diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf973280852..7ac547a9994 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,9 +35,11 @@ jobs: steps: - uses: actions/checkout@v3 + with: + fetch-depth: 0 - uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: Install dependencies on Linux if: runner.os == 'Linux' run: sudo apt update && sudo apt install build-essential @@ -57,9 +59,9 @@ jobs: - name: Install golangci-lint if: runner.os == 'Linux' - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v4 with: - version: v1.55.2 + version: v1.57.2 skip-build-cache: true args: --help @@ -74,6 +76,14 @@ jobs: - name: Test run: make test + - name: SonarCloud + if: runner.os == 'Linux' + uses: SonarSource/sonarcloud-github-action@v2.1.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + continue-on-error: true + tests-windows: if: ${{ github.event_name == 'push' || !github.event.pull_request.draft }} strategy: @@ -89,7 +99,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - uses: actions/cache@v3 with: @@ -115,6 +125,7 @@ jobs: # don't run this on devel - the PR must have run it to be merged and it misleads that this pushes the docker image if: (${{ github.event_name == 'push' || !github.event.pull_request.draft }}) && ${{ github.ref != 'refs/heads/devel' }} runs-on: ubuntu-22.04 + steps: - uses: AutoModality/action-clean@v1 - uses: actions/checkout@v3 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml deleted file mode 100644 index 3982becbc53..00000000000 --- a/.github/workflows/coverage.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Coverage -on: - push: - branches: - - devel - -jobs: - coverage: - runs-on: ubuntu-22.04 - - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: '1.20' - - - name: install dependencies on Linux - if: runner.os == 'Linux' - run: sudo apt update && sudo apt install build-essential - - - name: run coverage - run: echo "COVERAGE=$(make coverage)" >> $GITHUB_ENV - - - name: set badge color - shell: bash - run: | - if [ ${{ env.COVERAGE }} -lt 40 ] - then - echo "BADGE_COLOR=800000" >> $GITHUB_ENV - elif [ ${{ env.COVERAGE }} -lt 75 ] - then - echo "BADGE_COLOR=696969" >> $GITHUB_ENV - else - echo "BADGE_COLOR=31c653" >> $GITHUB_ENV - fi - - - name: create badge - uses: emibcn/badge-action@d6f51ff11b5c3382b3b88689ae2d6db22d9737d1 - with: - label: Coverage - status: ${{ env.COVERAGE }} - color: ${{ env.BADGE_COLOR }} - path: badge.svg - - - name: upload badge to gist - if: > - github.event_name == 'workflow_run' && github.event.workflow_run.head_branch == 'devel' || - github.event_name != 'workflow_run' && github.ref == 'refs/heads/devel' - uses: andymckay/append-gist-action@1fbfbbce708a39bd45846f0955ed5521f2099c6d - with: - token: ${{ secrets.GIST_TOKEN }} - gistURL: https://gist.githubusercontent.com/revitteth/ee38e9beb22353eef6b88f2ad6ed7aa9 - file: badge.svg \ No newline at end of file diff --git a/.github/workflows/qa-clean-exit-block-downloading.yml b/.github/workflows/qa-clean-exit-block-downloading.yml index 73104382ce8..c378dd793bb 100644 --- a/.github/workflows/qa-clean-exit-block-downloading.yml +++ b/.github/workflows/qa-clean-exit-block-downloading.yml @@ -3,44 +3,27 @@ name: QA - Clean exit (block downloading) on: push: branches: - - 'release/**' + - 'release/2.*' pull_request: branches: - - devel - - 'release/**' + - 'release/2.*' types: - ready_for_review + workflow_dispatch: # Run manually jobs: - long-running-test: - runs-on: self-hosted + clean-exit-bd-test: + runs-on: [self-hosted, Erigon2] env: - ERIGON_REFERENCE_DATA_DIR: /opt/erigon-release/datadir + ERIGON_REFERENCE_DATA_DIR: /opt/erigon-versions/reference-version/datadir ERIGON_TESTBED_DATA_DIR: /opt/erigon-testbed/datadir + ERIGON_QA_PATH: /home/qarunner/erigon-qa WORKING_TIME_SECONDS: 600 + CHAIN: mainnet steps: - name: Check out repository - uses: actions/checkout@v2 - - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version: '1.21' - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.x' - - #- name: Install dependencies - # run: | - # sudo apt-get update - # sudo apt-get install -y build-essential make gcc - - - name: Restore Erigon Testbed Data Directory - run: | - rsync -av --delete $ERIGON_REFERENCE_DATA_DIR/ $ERIGON_TESTBED_DATA_DIR/ + uses: actions/checkout@v4 - name: Clean Erigon Build Directory run: | @@ -51,31 +34,78 @@ jobs: make erigon working-directory: ${{ github.workspace }} - #- name: Download Python Script for Logs Checking - # run: | - # curl -o check_erigon_exit.py 'https://gist.githubusercontent.com/mriccobene/8db4030a745de34d527f136f2caa104f/raw/3c1a860cb87d61075e78ce399e17f0ab157cacc6/check_erigon_exit.py' + - name: Pause the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/pause_production.py || true + + - name: Restore Erigon Testbed Data Directory + run: | + rsync -a --delete $ERIGON_REFERENCE_DATA_DIR/ $ERIGON_TESTBED_DATA_DIR/ - name: Run Erigon, send ctrl-c and check for clean exiting + id: test_step run: | + set +e # Disable exit on error + # Run Erigon, send ctrl-c and check logs - python3 ${{ github.workspace }}/../../../../erigon-qa/test_system/qa-tests/clean-exit/run_and_check_clean_exit.py ${{ github.workspace }}/build/bin $ERIGON_TESTBED_DATA_DIR $WORKING_TIME_SECONDS + python3 $ERIGON_QA_PATH/test_system/qa-tests/clean-exit/run_and_check_clean_exit.py ${{ github.workspace }}/build/bin $ERIGON_TESTBED_DATA_DIR $WORKING_TIME_SECONDS Erigon2 # Capture monitoring script exit status - monitoring_exit_status=$? + test_exit_status=$? + + # Save the subsection reached status + echo "::set-output name=test_executed::true" # Clean up Erigon process if it's still running if kill -0 $ERIGON_PID 2> /dev/null; then echo "Terminating Erigon" kill $ERIGON_PID wait $ERIGON_PID - else - echo "Erigon has already terminated" fi - # Check monitoring script exit status - if [ $monitoring_exit_status -eq 0 ]; then - echo "Monitoring completed successfully" + # Check test runner script exit status + if [ $test_exit_status -eq 0 ]; then + echo "Tests completed successfully" + echo "TEST_RESULT=success" >> "$GITHUB_OUTPUT" else - echo "Error detected in Erigon logs or monitoring script exited unexpectedly" - exit 1 + echo "Error detected during tests" + echo "TEST_RESULT=failure" >> "$GITHUB_OUTPUT" + fi + + - name: Delete Erigon Testbed Data Directory + if: always() + run: | + rm -rf $ERIGON_TESTBED_DATA_DIR + + - name: Resume the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/resume_production.py || true + + - name: Save test results + if: steps.test_step.outputs.test_executed == 'true' + env: + TEST_RESULT: ${{ steps.test_step.outputs.TEST_RESULT }} + run: | + db_version=$(python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/prod_info.py $ERIGON_REFERENCE_DATA_DIR/../production.ini production erigon_repo_commit) + if [ -z "$db_version" ]; then + db_version="no-version" fi + + python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/upload_test_results.py --repo erigon --commit $(git rev-parse HEAD) --branch ${{ github.ref_name }} --test_name clean-exit-block-downloading --chain $CHAIN --runner ${{ runner.name }} --db_version $db_version --outcome $TEST_RESULT --result_file ${{ github.workspace }}/result.json + + - name: Upload test results + if: steps.test_step.outputs.test_executed == 'true' + uses: actions/upload-artifact@v4 + with: + name: test-results + path: ${{ github.workspace }}/result.json + + - name: Action for Success + if: steps.test_step.outputs.TEST_RESULT == 'success' + run: echo "::notice::Tests completed successfully" + + - name: Action for Not Success + if: steps.test_step.outputs.TEST_RESULT != 'success' + run: | + echo "::error::Error detected during tests" + exit 1 \ No newline at end of file diff --git a/.github/workflows/qa-clean-exit-snapshot-downloading.yml b/.github/workflows/qa-clean-exit-snapshot-downloading.yml index 7b04664f762..5f953a654ff 100644 --- a/.github/workflows/qa-clean-exit-snapshot-downloading.yml +++ b/.github/workflows/qa-clean-exit-snapshot-downloading.yml @@ -3,83 +3,99 @@ name: QA - Clean exit (snapshot downloading) on: push: branches: - - devel - - alpha - - 'release/**' + - 'release/2.*' pull_request: branches: - - devel - - alpha - - 'release/**' + - 'release/2.*' types: - - opened - - reopened - - synchronize - ready_for_review + workflow_dispatch: # Run manually jobs: - long-running-test: + clean-exit-sd-test: runs-on: self-hosted env: ERIGON_DATA_DIR: ${{ github.workspace }}/erigon_data + ERIGON_QA_PATH: /home/qarunner/erigon-qa WORKING_TIME_SECONDS: 600 + CHAIN: mainnet steps: - name: Check out repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version: '1.21' - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.x' - - #- name: Install dependencies - # run: | - # sudo apt-get update - # sudo apt-get install -y build-essential make gcc - - - name: Clean Erigon Build Directory + - name: Clean Erigon Build & Data Directories run: | make clean + rm -rf $ERIGON_DATA_DIR - name: Build Erigon run: | make erigon working-directory: ${{ github.workspace }} - #- name: Download Python Script for Logs Checking - # run: | - # curl -o check_erigon_exit.py 'https://gist.githubusercontent.com/mriccobene/8db4030a745de34d527f136f2caa104f/raw/3c1a860cb87d61075e78ce399e17f0ab157cacc6/check_erigon_exit.py' + - name: Pause the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/pause_production.py || true - name: Run Erigon, send ctrl-c and check for clean exiting + id: test_step run: | + set +e # Disable exit on error + # Run Erigon, send ctrl-c and check logs - python3 ${{ github.workspace }}/../../../../erigon-qa/test_system/qa-tests/clean-exit/run_and_check_clean_exit.py ${{ github.workspace }}/build/bin $ERIGON_DATA_DIR $WORKING_TIME_SECONDS + python3 $ERIGON_QA_PATH/test_system/qa-tests/clean-exit/run_and_check_clean_exit.py ${{ github.workspace }}/build/bin $ERIGON_DATA_DIR $WORKING_TIME_SECONDS Erigon2 # Capture monitoring script exit status - monitoring_exit_status=$? + test_exit_status=$? + + # Save the subsection reached status + echo "::set-output name=test_executed::true" # Clean up Erigon process if it's still running if kill -0 $ERIGON_PID 2> /dev/null; then echo "Terminating Erigon" kill $ERIGON_PID wait $ERIGON_PID - else - echo "Erigon has already terminated" fi - # Clean up Erigon build and data directories - rm -rf $ERIGON_DATA_DIR - - # Check monitoring script exit status - if [ $monitoring_exit_status -eq 0 ]; then - echo "Monitoring completed successfully" + # Check test runner script exit status + if [ $test_exit_status -eq 0 ]; then + echo "Tests completed successfully" + echo "TEST_RESULT=success" >> "$GITHUB_OUTPUT" else - echo "Error detected in Erigon logs or monitoring script exited unexpectedly" - exit 1 + echo "Error detected during tests" + echo "TEST_RESULT=failure" >> "$GITHUB_OUTPUT" fi + + - name: Clean up Erigon data directory + if: always() + run: | + rm -rf $ERIGON_DATA_DIR + + - name: Resume the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/resume_production.py || true + + - name: Save test results + if: steps.test_step.outputs.test_executed == 'true' + env: + TEST_RESULT: ${{ steps.test_step.outputs.TEST_RESULT }} + run: python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/upload_test_results.py --repo erigon --commit $(git rev-parse HEAD) --branch ${{ github.ref_name }} --test_name clean-exit-snapshot-downloading --chain $CHAIN --runner ${{ runner.name }} --outcome $TEST_RESULT --result_file ${{ github.workspace }}/result.json + + - name: Upload test results + if: steps.test_step.outputs.test_executed == 'true' + uses: actions/upload-artifact@v4 + with: + name: test-results + path: ${{ github.workspace }}/result.json + + - name: Action for Success + if: steps.test_step.outputs.TEST_RESULT == 'success' + run: echo "::notice::Tests completed successfully" + + - name: Action for Not Success + if: steps.test_step.outputs.TEST_RESULT != 'success' + run: | + echo "::error::Error detected during tests" + exit 1 \ No newline at end of file diff --git a/.github/workflows/qa-snap-download.yml b/.github/workflows/qa-snap-download.yml new file mode 100644 index 00000000000..630429e14d5 --- /dev/null +++ b/.github/workflows/qa-snap-download.yml @@ -0,0 +1,102 @@ +name: QA - Snapshot Download + +on: + push: + branches: + - 'release/2.*' + pull_request: + branches: + - 'release/2.*' + types: + - ready_for_review + workflow_dispatch: # Run manually + +jobs: + snap-download-test: + runs-on: [self-hosted, Erigon2] + timeout-minutes: 800 + env: + ERIGON_DATA_DIR: ${{ github.workspace }}/erigon_data + ERIGON_QA_PATH: /home/qarunner/erigon-qa + TOTAL_TIME_SECONDS: 43200 # 12 hours + CHAIN: mainnet + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Clean Erigon Build & Data Directories + run: | + make clean + rm -rf $ERIGON_DATA_DIR + + - name: Build Erigon + run: | + make erigon + working-directory: ${{ github.workspace }} + + - name: Pause the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/pause_production.py || true + + - name: Run Erigon and monitor snapshot downloading + id: test_step + run: | + set +e # Disable exit on error + + # Run Erigon, monitor snapshot downloading and check logs + python3 $ERIGON_QA_PATH/test_system/qa-tests/snap-download/run_and_check_snap_download.py ${{ github.workspace }}/build/bin $ERIGON_DATA_DIR $TOTAL_TIME_SECONDS Erigon2 $CHAIN + + # Capture monitoring script exit status + test_exit_status=$? + + # Save the subsection reached status + echo "::set-output name=test_executed::true" + + # Clean up Erigon process if it's still running + if kill -0 $ERIGON_PID 2> /dev/null; then + echo "Terminating Erigon" + kill $ERIGON_PID + wait $ERIGON_PID + fi + + # Check test runner script exit status + if [ $test_exit_status -eq 0 ]; then + echo "Tests completed successfully" + echo "TEST_RESULT=success" >> "$GITHUB_OUTPUT" + else + echo "Error detected during tests" + echo "TEST_RESULT=failure" >> "$GITHUB_OUTPUT" + fi + + - name: Clean up Erigon data directory + if: always() + run: | + rm -rf $ERIGON_DATA_DIR + + - name: Resume the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/resume_production.py || true + + - name: Save test results + if: steps.test_step.outputs.test_executed == 'true' + env: + TEST_RESULT: ${{ steps.test_step.outputs.TEST_RESULT }} + run: python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/upload_test_results.py --repo erigon --commit $(git rev-parse HEAD) --branch ${{ github.ref_name }} --test_name snap-download --chain $CHAIN --runner ${{ runner.name }} --outcome $TEST_RESULT --result_file ${{ github.workspace }}/result-$CHAIN.json + + - name: Upload test results + if: steps.test_step.outputs.test_executed == 'true' + uses: actions/upload-artifact@v4 + with: + name: test-results + path: ${{ github.workspace }}/result-${{ env.CHAIN }}.json + + - name: Action for Success + if: steps.test_step.outputs.TEST_RESULT == 'success' + run: echo "::notice::Tests completed successfully" + + - name: Action for Not Success + if: steps.test_step.outputs.TEST_RESULT != 'success' + run: | + echo "::error::Error detected during tests" + exit 1 \ No newline at end of file diff --git a/.github/workflows/qa-tip-tracking.yml b/.github/workflows/qa-tip-tracking.yml new file mode 100644 index 00000000000..2a5299ed252 --- /dev/null +++ b/.github/workflows/qa-tip-tracking.yml @@ -0,0 +1,115 @@ +name: QA - Tip tracking + +on: + push: + branches: + - 'release/2.*' + pull_request: + branches: + - 'release/2.*' + types: + - ready_for_review + workflow_dispatch: # Run manually + +jobs: + tip-tracking-test: + runs-on: [self-hosted, Erigon2] + timeout-minutes: 600 + env: + ERIGON_REFERENCE_DATA_DIR: /opt/erigon-versions/reference-version/datadir + ERIGON_TESTBED_DATA_DIR: /opt/erigon-testbed/datadir + ERIGON_QA_PATH: /home/qarunner/erigon-qa + TRACKING_TIME_SECONDS: 14400 # 4 hours + TOTAL_TIME_SECONDS: 28800 # 8 hours + CHAIN: mainnet + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Clean Erigon Build Directory + run: | + make clean + + - name: Build Erigon + run: | + make erigon + working-directory: ${{ github.workspace }} + + - name: Pause the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/pause_production.py || true + + - name: Restore Erigon Testbed Data Directory + run: | + rsync -a --delete $ERIGON_REFERENCE_DATA_DIR/ $ERIGON_TESTBED_DATA_DIR/ + + - name: Run Erigon, wait sync and check ability to maintain sync + id: test_step + run: | + set +e # Disable exit on error + + # 1. Launch the testbed Erigon instance + # 2. Allow time for the Erigon to achieve synchronization + # 3. Begin timing the duration that Erigon maintains synchronization + python3 $ERIGON_QA_PATH/test_system/qa-tests/tip-tracking/run_and_check_tip_tracking.py ${{ github.workspace }}/build/bin $ERIGON_TESTBED_DATA_DIR $TRACKING_TIME_SECONDS $TOTAL_TIME_SECONDS Erigon2 $CHAIN + + # Capture monitoring script exit status + test_exit_status=$? + + # Save the subsection reached status + echo "::set-output name=test_executed::true" + + # Clean up Erigon process if it's still running + if kill -0 $ERIGON_PID 2> /dev/null; then + echo "Terminating Erigon" + kill $ERIGON_PID + wait $ERIGON_PID + fi + + # Check test runner script exit status + if [ $test_exit_status -eq 0 ]; then + echo "Tests completed successfully" + echo "TEST_RESULT=success" >> "$GITHUB_OUTPUT" + else + echo "Error detected during tests" + echo "TEST_RESULT=failure" >> "$GITHUB_OUTPUT" + fi + + - name: Delete Erigon Testbed Data Directory + if: always() + run: | + rm -rf $ERIGON_TESTBED_DATA_DIR + + - name: Resume the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/resume_production.py || true + + - name: Save test results + if: steps.test_step.outputs.test_executed == 'true' + env: + TEST_RESULT: ${{ steps.test_step.outputs.TEST_RESULT }} + run: | + db_version=$(python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/prod_info.py $ERIGON_REFERENCE_DATA_DIR/../production.ini production erigon_repo_commit) + if [ -z "$db_version" ]; then + db_version="no-version" + fi + + python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/upload_test_results.py --repo erigon --commit $(git rev-parse HEAD) --branch ${{ github.ref_name }} --test_name tip-tracking --chain $CHAIN --runner ${{ runner.name }} --db_version $db_version --outcome $TEST_RESULT --result_file ${{ github.workspace }}/result-$CHAIN.json + + - name: Upload test results + if: steps.test_step.outputs.test_executed == 'true' + uses: actions/upload-artifact@v4 + with: + name: test-results + path: ${{ github.workspace }}/result-${{ env.CHAIN }}.json + + - name: Action for Success + if: steps.test_step.outputs.TEST_RESULT == 'success' + run: echo "::notice::Tests completed successfully" + + - name: Action for Not Success + if: steps.test_step.outputs.TEST_RESULT != 'success' + run: | + echo "::error::Error detected during tests" + exit 1 \ No newline at end of file diff --git a/.github/workflows/test-integration-caplin.yml b/.github/workflows/test-integration-caplin.yml index ca687f6df70..9daed00f143 100644 --- a/.github/workflows/test-integration-caplin.yml +++ b/.github/workflows/test-integration-caplin.yml @@ -28,7 +28,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: Install dependencies on Linux if: runner.os == 'Linux' run: sudo apt update && sudo apt install build-essential @@ -46,7 +46,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - uses: actions/cache@v3 with: diff --git a/.gitignore b/.gitignore index 123c1eb2b93..6badb620637 100644 --- a/.gitignore +++ b/.gitignore @@ -99,4 +99,4 @@ node_modules /config.yaml /config.yml -vendor \ No newline at end of file +vendor diff --git a/.golangci.yml b/.golangci.yml index a7ec604b677..ea3622695e6 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,5 +1,5 @@ run: - deadline: 10m + timeout: 10m build-tags: - nosqlite - noboltdb @@ -41,21 +41,15 @@ linters: # - stylecheck linters-settings: - gocritic: - # Which checks should be enabled; can't be combined with 'disabled-checks'; - # See https://go-critic.github.io/overview#checks-overview - # To check which checks are enabled run `GL_DEBUG=gocritic ./build/bin/golangci-lint run` - # By default list of stable checks is used. + gocritic: # see https://golangci-lint.run/usage/linters/#gocritic and https://go-critic.github.io/overview#checks-overview + enabled-tags: + - performance + - diagnostic enabled-checks: - ruleguard - - truncateCmp - # - defaultCaseOrder - - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty disabled-checks: - regexpMust - appendAssign - # - hugeParam - rangeValCopy - exitAfterDefer - elseif @@ -66,19 +60,22 @@ linters-settings: - captLocal - commentFormatting - ifElseChain - - importShadow - - paramTypeCombine - - builtinShadow - - typeUnparen - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". - enabled-tags: - - performance - - diagnostic - - opinionated - disabled-tags: - - experimental + # diagnostigs tag: possible bugs. need enable checks in future + - sloppyReassign + - sprintfQuotedString + - deferInLoop + - nilValReturn + - evalOrder + - returnAfterHttpError + - weakCond + - builtinShadowDecl + - unnecessaryDefer + - uncheckedInlineErr + - preferStringWriter + - commentedOutCode + - preferFprint + settings: ruleguard: rules: "rules.go" @@ -90,9 +87,6 @@ linters-settings: sizeThreshold: 512 # whether to check test functions (default true) skipTestFuncs: true - truncateCmp: - # whether to skip int/uint/uintptr types (default true) - skipArchDependent: true underef: # whether to skip (*x).method() calls where x is a pointer receiver (default true) skipRecvDeref: true @@ -107,7 +101,7 @@ linters-settings: min-len: 2 min-occurrences: 2 gofmt: - auto-fix: false + simplify: false issues: exclude-rules: @@ -125,20 +119,17 @@ issues: linters: - gosec - unused - - deadcode - gocritic - perfsprint - path: hack\.go linters: - gosec - unused - - deadcode - gocritic - path: cmd/devp2p linters: - gosec - unused - - deadcode - gocritic - path: metrics/sample\.go linters: diff --git a/Dockerfile b/Dockerfile index e9850144a85..2810dee2210 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # syntax = docker/dockerfile:1.2 -FROM docker.io/library/golang:1.20-alpine3.17 AS builder +FROM docker.io/library/golang:1.21-alpine3.17 AS builder RUN apk --no-cache add build-base linux-headers git bash ca-certificates libstdc++ @@ -18,7 +18,7 @@ RUN --mount=type=cache,target=/root/.cache \ make BUILD_TAGS=nosqlite,noboltdb,nosilkworm all -FROM docker.io/library/golang:1.20-alpine3.17 AS tools-builder +FROM docker.io/library/golang:1.21-alpine3.17 AS tools-builder RUN apk --no-cache add build-base linux-headers git bash ca-certificates libstdc++ WORKDIR /app @@ -79,7 +79,6 @@ COPY --from=builder /app/build/bin/state /usr/local/bin/state COPY --from=builder /app/build/bin/txpool /usr/local/bin/txpool COPY --from=builder /app/build/bin/verkle /usr/local/bin/verkle COPY --from=builder /app/build/bin/caplin /usr/local/bin/caplin -COPY --from=builder /app/build/bin/caplin-regression /usr/local/bin/caplin-regression EXPOSE 8545 \ diff --git a/Dockerfile.debian b/Dockerfile.debian index 01d38f3d105..fede5a8e9d6 100644 --- a/Dockerfile.debian +++ b/Dockerfile.debian @@ -1,5 +1,5 @@ # syntax = docker/dockerfile:1.2 -FROM docker.io/library/golang:1.20-bullseye AS builder +FROM docker.io/library/golang:1.21-bullseye AS builder RUN apt update RUN apt install -y build-essential git bash ca-certificates libstdc++6 @@ -17,7 +17,7 @@ RUN --mount=type=cache,target=/root/.cache \ make all -FROM docker.io/library/golang:1.20-alpine3.17 AS tools-builder +FROM docker.io/library/golang:1.21-alpine3.17 AS tools-builder RUN apk --no-cache add build-base linux-headers git bash ca-certificates libstdc++ WORKDIR /app @@ -75,7 +75,6 @@ COPY --from=builder /app/build/bin/state /usr/local/bin/state COPY --from=builder /app/build/bin/txpool /usr/local/bin/txpool COPY --from=builder /app/build/bin/verkle /usr/local/bin/verkle COPY --from=builder /app/build/bin/caplin /usr/local/bin/caplin -COPY --from=builder /app/build/bin/caplin-regression /usr/local/bin/caplin-regression EXPOSE 8545 \ 8551 \ diff --git a/Makefile b/Makefile index 39cd47ef31a..5e168a828c8 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ GO ?= go # if using docker, should not need to be installed/linked -GOBIN = $(CURDIR)/build/bin +GOBINREL = build/bin +GOBIN = $(CURDIR)/$(GOBINREL) UNAME = $(shell uname) # Supported: Darwin, Linux DOCKER := $(shell command -v docker 2> /dev/null) @@ -41,14 +42,16 @@ ifneq ($(shell "$(CURDIR)/turbo/silkworm/silkworm_compat_check.sh"),) BUILD_TAGS := $(BUILD_TAGS),nosilkworm endif +GOPRIVATE = github.com/erigontech/silkworm-go + PACKAGE = github.com/ledgerwatch/erigon GO_FLAGS += -trimpath -tags $(BUILD_TAGS) -buildvcs=false GO_FLAGS += -ldflags "-X ${PACKAGE}/params.GitCommit=${GIT_COMMIT} -X ${PACKAGE}/params.GitBranch=${GIT_BRANCH} -X ${PACKAGE}/params.GitTag=${GIT_TAG}" -GOBUILD = CGO_CFLAGS="$(CGO_CFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) build $(GO_FLAGS) -GO_DBG_BUILD = CGO_CFLAGS="$(CGO_CFLAGS) -DMDBX_DEBUG=1" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) build -tags $(BUILD_TAGS),debug -gcflags=all="-N -l" # see delve docs -GOTEST = CGO_CFLAGS="$(CGO_CFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" GODEBUG=cgocheck=0 $(GO) test $(GO_FLAGS) ./... -p 2 +GOBUILD = CGO_CFLAGS="$(CGO_CFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" GOPRIVATE="$(GOPRIVATE)" $(GO) build $(GO_FLAGS) +GO_DBG_BUILD = CGO_CFLAGS="$(CGO_CFLAGS) -DMDBX_DEBUG=1" CGO_LDFLAGS="$(CGO_LDFLAGS)" GOPRIVATE="$(GOPRIVATE)" $(GO) build -tags $(BUILD_TAGS),debug -gcflags=all="-N -l" # see delve docs +GOTEST = CGO_CFLAGS="$(CGO_CFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" GOPRIVATE="$(GOPRIVATE)" GODEBUG=cgocheck=0 $(GO) test $(GO_FLAGS) ./... -p 2 default: all @@ -133,12 +136,8 @@ COMMANDS += verkle COMMANDS += evm COMMANDS += sentinel COMMANDS += caplin -COMMANDS += caplin-regression -COMMANDS += tooling COMMANDS += snapshots - - - +COMMANDS += diag # build each command using %.cmd rule $(COMMANDS): %: %.cmd @@ -165,7 +164,7 @@ test-erigon-ext: ## test: run unit tests with a 100s timeout test: test-erigon-lib - $(GOTEST) --timeout 10m + $(GOTEST) --timeout 10m -coverprofile=coverage.out test3: test-erigon-lib $(GOTEST) --timeout 10m -tags $(BUILD_TAGS),e3 @@ -205,19 +204,52 @@ format: ## devtools: installs dev tools (and checks for npm installation etc.) devtools: - # Notice! If you adding new binary - add it also to cmd/hack/binary-deps/main.go file + # Notice! If you adding new binary - add it also to tools.go file $(GOBUILD) -o $(GOBIN)/gencodec github.com/fjl/gencodec + $(GOBUILD) -o $(GOBIN)/mockgen go.uber.org/mock/mockgen $(GOBUILD) -o $(GOBIN)/abigen ./cmd/abigen $(GOBUILD) -o $(GOBIN)/codecgen github.com/ugorji/go/codec/codecgen - PATH=$(GOBIN):$(PATH) go generate ./common -# PATH=$(GOBIN):$(PATH) go generate ./core/types - PATH=$(GOBIN):$(PATH) cd ./cmd/rpcdaemon/graphql && go run github.com/99designs/gqlgen . - PATH=$(GOBIN):$(PATH) go generate ./consensus/aura/... - #PATH=$(GOBIN):$(PATH) go generate ./eth/ethconfig/... @type "npm" 2> /dev/null || echo 'Please install node.js and npm' @type "solc" 2> /dev/null || echo 'Please install solc' @type "protoc" 2> /dev/null || echo 'Please install protoc' +## mocks: generate test mocks +mocks: mocks-clean + @cd erigon-lib && $(MAKE) mocks + $(GOBUILD) -o $(GOBIN)/mockgen go.uber.org/mock/mockgen + PATH="$(GOBIN):$(PATH)" go generate -run "mockgen" ./... + +## mocks-clean: cleans all generated test mocks +mocks-clean: + grep -r -l --exclude-dir="erigon-lib" --exclude-dir="*$(GOBINREL)*" "^// Code generated by MockGen. DO NOT EDIT.$$" . | xargs rm -r + +## solc: generate all solidity contracts +solc: + PATH="$(GOBIN):$(PATH)" go generate -run "solc" ./... + +## abigen: generate abis using abigen +abigen: + $(GOBUILD) -o $(GOBIN)/abigen ./cmd/abigen + PATH="$(GOBIN):$(PATH)" go generate -run "abigen" ./... + +## gencodec: generate marshalling code using gencodec +gencodec: + $(GOBUILD) -o $(GOBIN)/gencodec github.com/fjl/gencodec + PATH="$(GOBIN):$(PATH)" go generate -run "gencodec" ./... + +## codecgen: generate encoder/decoder code using codecgen +codecgen: + $(GOBUILD) -o $(GOBIN)/codecgen github.com/ugorji/go/codec/codecgen + PATH="$(GOBIN):$(PATH)" go generate -run "codecgen" ./... + +## graphql: generate graphql code +graphql: + PATH=$(GOBIN):$(PATH) cd ./cmd/rpcdaemon/graphql && go run github.com/99designs/gqlgen . + +## gen: generate all auto-generated code in the codebase +gen: mocks solc abigen gencodec codecgen graphql + @cd erigon-lib && $(MAKE) gen + ## bindings: generate test contracts and core contracts bindings: PATH=$(GOBIN):$(PATH) go generate ./tests/contracts/ @@ -251,7 +283,7 @@ install: @ls -al "$(DIST)" PACKAGE_NAME := github.com/ledgerwatch/erigon -GOLANG_CROSS_VERSION ?= v1.20.7 +GOLANG_CROSS_VERSION ?= v1.21.6 .PHONY: release-dry-run release-dry-run: git-submodules @@ -315,11 +347,6 @@ user_macos: sudo dscl . -append /Groups/admin GroupMembership $(ERIGON_USER) sudo -u $(ERIGON_USER) mkdir -p /Users/$(ERIGON_USER)/.local/share -## coverage: run code coverage report and output total coverage % -.PHONY: coverage -coverage: - @go test -coverprofile=coverage.out ./... > /dev/null 2>&1 && go tool cover -func coverage.out | grep total | awk '{print substr($$3, 1, length($$3)-1)}' - ## hive: run hive test suite locally using docker e.g. OUTPUT_DIR=~/results/hive SIM=ethereum/engine make hive .PHONY: hive hive: diff --git a/README.md b/README.md index 8ee63718b93..d5c249062d5 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,10 @@ Erigon is an implementation of Ethereum (execution layer with embeddable consens frontier. [Archive Node](https://ethereum.org/en/developers/docs/nodes-and-clients/archive-nodes/#what-is-an-archive-node) by default. -![Build status](https://github.com/ledgerwatch/erigon/actions/workflows/ci.yml/badge.svg) +An accessible and complete version of the documentation is available at **[erigon.gitbook.io](https://erigon.gitbook.io)**. +
-![Coverage](https://gist.githubusercontent.com/revitteth/ee38e9beb22353eef6b88f2ad6ed7aa9/raw/badge.svg) +![Build status](https://github.com/ledgerwatch/erigon/actions/workflows/ci.yml/badge.svg) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ledgerwatch_erigon&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ledgerwatch_erigon) @@ -20,6 +21,7 @@ by default. + [GoDoc](https://godoc.org/github.com/ledgerwatch/erigon) + [Beacon Chain](#beacon-chain-consensus-layer) + [Dev Chain](#dev-chain) + + [Caplin (Internal Consensus Layer)](#caplin) - [Key features](#key-features) + [More Efficient State Storage](#more-efficient-state-storage) @@ -27,6 +29,7 @@ by default. + [JSON-RPC daemon](#json-rpc-daemon) + [Run all components by docker-compose](#run-all-components-by-docker-compose) + [Grafana dashboard](#grafana-dashboard) + + [Internal Consensus Layer](#caplin) - [Documentation](#documentation) - [FAQ](#faq) - [Getting in touch](#getting-in-touch) @@ -49,13 +52,13 @@ in `erigon --help`). We don't allow change this flag after first start. System Requirements =================== -* For an Archive node of Ethereum Mainnet we recommend >=3.5TB storage space: 2.2TB state (as of December 2023), - 470GB snapshots (can symlink or mount folder `/snapshots` to another disk), 200GB temp files (can symlink or mount folder `/temp` to another disk). Ethereum Mainnet Full node ( - see `--prune*` flags): 400Gb (April 2022). +* For an Archive node of Ethereum Mainnet we recommend >=3.5TB storage space: 2.3TiB state (as of March 2024), + 643GiB snapshots (can symlink or mount folder `/snapshots` to another disk), 200GB temp files (can symlink or mount folder `/temp` to another disk). Ethereum Mainnet Full node ( + see `--prune*` flags): 1.1TiB (March 2024). * Goerli Full node (see `--prune*` flags): 189GB on Beta, 114GB on Alpha (April 2022). -* Gnosis Chain Archive: 600GB (October 2023). +* Gnosis Chain Archive: 1.7TiB (March 2024). Gnosis Chain Full node (`--prune=hrtc` flag): 530GiB (March 2024). * Polygon Mainnet Archive: 8.5TiB (December 2023). `--prune.*.older 15768000`: 5.1Tb (September 2023). Polygon Mumbai Archive: 1TB. (April 2022). @@ -65,7 +68,7 @@ Bear in mind that SSD performance deteriorates when close to capacity. RAM: >=16GB, 64-bit architecture. -[Golang version >= 1.20](https://golang.org/doc/install); GCC 10+ or Clang; On Linux: kernel > v4 +[Golang version >= 1.21](https://golang.org/doc/install); GCC 10+ or Clang; On Linux: kernel > v4 🔬 more details on disk storage [here](https://erigon.substack.com/p/disk-footprint-changes-in-new-erigon?s=r) and [here](https://ledgerwatch.github.io/turbo_geth_release.html#Disk-space). @@ -105,7 +108,7 @@ Use `--datadir` to choose where to store data. Use `--chain=gnosis` for [Gnosis Chain](https://www.gnosis.io/), `--chain=bor-mainnet` for Polygon Mainnet, `--chain=mumbai` for Polygon Mumbai and `--chain=amoy` for Polygon Amoy. For Gnosis Chain you need a [Consensus Layer](#beacon-chain-consensus-layer) client alongside -Erigon (https://docs.gnosischain.com/node/guide/beacon). +Erigon (https://docs.gnosischain.com/node/manual/beacon). Running `make help` will list and describe the convenience commands available in the [Makefile](./Makefile). @@ -208,7 +211,7 @@ Windows users may run erigon in 3 possible ways: build on windows : * [Git](https://git-scm.com/downloads) for Windows must be installed. If you're cloning this repository is very likely you already have it - * [GO Programming Language](https://golang.org/dl/) must be installed. Minimum required version is 1.20 + * [GO Programming Language](https://golang.org/dl/) must be installed. Minimum required version is 1.21 * GNU CC Compiler at least version 13 (is highly suggested that you install `chocolatey` package manager - see following point) * If you need to build MDBX tools (i.e. `.\wmake.ps1 db-tools`) @@ -303,6 +306,26 @@ Once Erigon is running, you need to point your CL client to `:85 where `` is either `localhost` or the IP address of the device running Erigon, and also point to the JWT secret path created by Erigon. +### Caplin + +Caplin is a full-fledged validating Consensus Client like Prysm, Lighthouse, Teku, Nimbus and Lodestar. Its goal is: + +* provide better stability +* Validation of the chain +* Stay in sync +* keep the execution of blocks on chain tip +* serve the Beacon API using a fast and compact data model alongside low CPU and memory usage. + + The main reason why developed a new Consensus Layer is to experiment with the possible benefits that could come with it. For example, The Engine API does not work well with Erigon. The Engine API sends data one block at a time, which does not suit how Erigon works. Erigon is designed to handle many blocks simultaneously and needs to sort and process data efficiently. Therefore, it would be better for Erigon to handle the blocks independently instead of relying on the Engine API. + +#### Caplin's Usage. + +Caplin can be enabled through the `--internalcl` flag. from that point on, an external Consensus Layer will not be need anymore. + +Caplin also has an archivial mode for historical states and blocks. it can be enabled through the `--caplin.archive` flag. +In order to enable the caplin's Beacon API, the flag `--beacon.api=` must be added. +e.g: `--beacon.api=beacon,builder,config,debug,node,validator,lighthouse` will enable all endpoints. **NOTE: Caplin is not staking-ready so aggregation endpoints are still to be implemented. Additionally enabling the Beacon API will lead to a 6 GB higher RAM usage. + ### Multiple Instances / One Machine Define 6 flags to avoid conflicts: `--datadir --port --http.port --authrpc.port --torrent.port --private.api.addr`. @@ -603,6 +626,18 @@ RFC 922, Section 7 Same in [IpTables syntax](https://ethereum.stackexchange.com/questions/6386/how-to-prevent-being-blacklisted-for-running-an-ethereum-client/13068#13068) +### How to run erigon as a separate user? (e.g. as a `systemd` daemon) + +Running erigon from `build/bin` as a separate user might produce an error: + + error while loading shared libraries: libsilkworm_capi.so: cannot open shared object file: No such file or directory + +The library needs to be *installed* for another user using `make DIST= install`. You could use `$HOME/erigon` or `/opt/erigon` as the installation path, for example: + + make DIST=/opt/erigon install + +and then run `/opt/erigon/erigon`. + ### How to get diagnostic for bug report? - Get stack trace: `kill -SIGUSR1 `, get trace and stop: `kill -6 ` diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index 97d4571712e..a2b85615c49 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -129,7 +129,7 @@ func NewTestSimulatedBackendWithConfig(t *testing.T, alloc types.GenesisAlloc, c return b } func (b *SimulatedBackend) DB() kv.RwDB { return b.m.DB } -func (b *SimulatedBackend) Agg() *state2.AggregatorV3 { return b.m.HistoryV3Components() } +func (b *SimulatedBackend) Agg() *state2.Aggregator { return b.m.HistoryV3Components() } func (b *SimulatedBackend) HistoryV3() bool { return b.m.HistoryV3 } func (b *SimulatedBackend) Engine() consensus.Engine { return b.m.Engine } func (b *SimulatedBackend) BlockReader() services.FullBlockReader { return b.m.BlockReader } diff --git a/accounts/abi/bind/bind_test.go b/accounts/abi/bind/bind_test.go index 2561a63f5e7..7698dd6dc9e 100644 --- a/accounts/abi/bind/bind_test.go +++ b/accounts/abi/bind/bind_test.go @@ -1848,11 +1848,6 @@ func TestGolangBindings(t *testing.T) { t.Fatalf("failed to replace binding test dependency to current source tree: %v\n%s", err, out) } - replacer = exec.Command(gocmd, "mod", "edit", "-x", "-require", "github.com/tendermint/tendermint@v0.0.0", "-replace", "github.com/tendermint/tendermint=github.com/bnb-chain/tendermint@v0.31.12") // Repo root - replacer.Dir = pkg - if out, err := replacer.CombinedOutput(); err != nil { - t.Fatalf("failed to replace tendermint dependency to bnb-chain source: %v\n%s", err, out) - } tidier := exec.Command(gocmd, "mod", "tidy") tidier.Dir = pkg if out, err := tidier.CombinedOutput(); err != nil { diff --git a/accounts/abi/bind/template.go b/accounts/abi/bind/template.go index 344b1974bf0..3caa889fd00 100644 --- a/accounts/abi/bind/template.go +++ b/accounts/abi/bind/template.go @@ -82,7 +82,7 @@ var tmplSource = map[Lang]string{ // tmplSourceGo is the Go source template that the generated Go contract binding // is based on. const tmplSourceGo = ` -// Code generated - DO NOT EDIT. +// Code generated by abigen. DO NOT EDIT. // This file is a generated binding and any manual changes will be lost. package {{.Package}} @@ -110,6 +110,8 @@ var ( _ = libcommon.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = fmt.Errorf + _ = reflect.ValueOf ) {{$structs := .Structs}} @@ -366,8 +368,8 @@ var ( {{range .Transacts}} {{if ne (len .Normalized.Inputs) 0}} - // {{.Normalized.Name}}Params is an auto generated read-only Go binding of transcaction calldata params - type {{.Normalized.Name}}Params struct { + // {{$metaType}}{{.Normalized.Name}}Params is an auto generated read-only Go binding of transcaction calldata params + type {{$metaType}}{{.Normalized.Name}}Params struct { {{range $i, $_ := .Normalized.Inputs}} Param_{{.Name}} {{bindtype .Type $structs}} {{end}} } @@ -375,7 +377,7 @@ var ( // Parse {{.Normalized.Name}} method from calldata of a transaction // // Solidity: {{.Original.String}} - func Parse{{.Normalized.Name}}(calldata []byte) (*{{.Normalized.Name}}Params, error) { + func Parse{{$metaType}}{{.Normalized.Name}}Params(calldata []byte) (*{{$metaType}}{{.Normalized.Name}}Params, error) { if len(calldata) <= 4 { return nil, fmt.Errorf("invalid calldata input") } @@ -390,7 +392,7 @@ var ( return nil, fmt.Errorf("failed to unpack {{.Original.Name}} params data: %w", err) } - var paramsResult = new({{.Normalized.Name}}Params) + var paramsResult = new({{$metaType}}{{.Normalized.Name}}Params) value := reflect.ValueOf(paramsResult).Elem() if value.NumField() != len(out) { @@ -400,7 +402,7 @@ var ( {{range $i, $t := .Normalized.Inputs}} out{{$i}} := *abi.ConvertType(out[{{$i}}], new({{bindtype .Type $structs}})).(*{{bindtype .Type $structs}}){{end}} - return &{{.Normalized.Name}}Params{ + return &{{$metaType}}{{.Normalized.Name}}Params{ {{range $i, $_ := .Normalized.Inputs}} Param_{{.Name}} : out{{$i}},{{end}} }, nil } diff --git a/accounts/abi/reflect.go b/accounts/abi/reflect.go index 8238991aaa4..b5c967fe91c 100644 --- a/accounts/abi/reflect.go +++ b/accounts/abi/reflect.go @@ -125,15 +125,8 @@ func set(dst, src reflect.Value) error { func setSlice(dst, src reflect.Value) error { slice := reflect.MakeSlice(dst.Type(), src.Len(), src.Len()) for i := 0; i < src.Len(); i++ { - if src.Index(i).Kind() == reflect.Struct { - if err := set(slice.Index(i), src.Index(i)); err != nil { - return err - } - } else { - // e.g. [][32]uint8 to []libcommon.Hash - if err := set(slice.Index(i), src.Index(i)); err != nil { - return err - } + if err := set(slice.Index(i), src.Index(i)); err != nil { + return err } } if dst.CanSet() { diff --git a/accounts/abi/type.go b/accounts/abi/type.go index edaabda15d7..d8609828243 100644 --- a/accounts/abi/type.go +++ b/accounts/abi/type.go @@ -350,7 +350,7 @@ func (t Type) pack(v reflect.Value) ([]byte, error) { } } -// requireLengthPrefix returns whether the type requires any sort of length +// requiresLengthPrefix returns whether the type requires any sort of length // prefixing. func (t Type) requiresLengthPrefix() bool { return t.T == StringTy || t.T == BytesTy || t.T == SliceTy diff --git a/cl/aggregation/mock_services/aggregation_pool_mock.go b/cl/aggregation/mock_services/aggregation_pool_mock.go new file mode 100644 index 00000000000..56dce309153 --- /dev/null +++ b/cl/aggregation/mock_services/aggregation_pool_mock.go @@ -0,0 +1,117 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/aggregation (interfaces: AggregationPool) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/aggregation_pool_mock.go -package=mock_services . AggregationPool +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + reflect "reflect" + + common "github.com/ledgerwatch/erigon-lib/common" + solid "github.com/ledgerwatch/erigon/cl/cltypes/solid" + gomock "go.uber.org/mock/gomock" +) + +// MockAggregationPool is a mock of AggregationPool interface. +type MockAggregationPool struct { + ctrl *gomock.Controller + recorder *MockAggregationPoolMockRecorder +} + +// MockAggregationPoolMockRecorder is the mock recorder for MockAggregationPool. +type MockAggregationPoolMockRecorder struct { + mock *MockAggregationPool +} + +// NewMockAggregationPool creates a new mock instance. +func NewMockAggregationPool(ctrl *gomock.Controller) *MockAggregationPool { + mock := &MockAggregationPool{ctrl: ctrl} + mock.recorder = &MockAggregationPoolMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAggregationPool) EXPECT() *MockAggregationPoolMockRecorder { + return m.recorder +} + +// AddAttestation mocks base method. +func (m *MockAggregationPool) AddAttestation(arg0 *solid.Attestation) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddAttestation", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddAttestation indicates an expected call of AddAttestation. +func (mr *MockAggregationPoolMockRecorder) AddAttestation(arg0 any) *MockAggregationPoolAddAttestationCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddAttestation", reflect.TypeOf((*MockAggregationPool)(nil).AddAttestation), arg0) + return &MockAggregationPoolAddAttestationCall{Call: call} +} + +// MockAggregationPoolAddAttestationCall wrap *gomock.Call +type MockAggregationPoolAddAttestationCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockAggregationPoolAddAttestationCall) Return(arg0 error) *MockAggregationPoolAddAttestationCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockAggregationPoolAddAttestationCall) Do(f func(*solid.Attestation) error) *MockAggregationPoolAddAttestationCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockAggregationPoolAddAttestationCall) DoAndReturn(f func(*solid.Attestation) error) *MockAggregationPoolAddAttestationCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetAggregatationByRoot mocks base method. +func (m *MockAggregationPool) GetAggregatationByRoot(arg0 common.Hash) *solid.Attestation { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAggregatationByRoot", arg0) + ret0, _ := ret[0].(*solid.Attestation) + return ret0 +} + +// GetAggregatationByRoot indicates an expected call of GetAggregatationByRoot. +func (mr *MockAggregationPoolMockRecorder) GetAggregatationByRoot(arg0 any) *MockAggregationPoolGetAggregatationByRootCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAggregatationByRoot", reflect.TypeOf((*MockAggregationPool)(nil).GetAggregatationByRoot), arg0) + return &MockAggregationPoolGetAggregatationByRootCall{Call: call} +} + +// MockAggregationPoolGetAggregatationByRootCall wrap *gomock.Call +type MockAggregationPoolGetAggregatationByRootCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockAggregationPoolGetAggregatationByRootCall) Return(arg0 *solid.Attestation) *MockAggregationPoolGetAggregatationByRootCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockAggregationPoolGetAggregatationByRootCall) Do(f func(common.Hash) *solid.Attestation) *MockAggregationPoolGetAggregatationByRootCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockAggregationPoolGetAggregatationByRootCall) DoAndReturn(f func(common.Hash) *solid.Attestation) *MockAggregationPoolGetAggregatationByRootCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/aggregation/pool.go b/cl/aggregation/pool.go new file mode 100644 index 00000000000..9efbd5c042a --- /dev/null +++ b/cl/aggregation/pool.go @@ -0,0 +1,13 @@ +package aggregation + +import ( + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" +) + +//go:generate mockgen -typed=true -destination=./mock_services/aggregation_pool_mock.go -package=mock_services . AggregationPool +type AggregationPool interface { + // AddAttestation adds a single attestation to the pool. + AddAttestation(att *solid.Attestation) error + GetAggregatationByRoot(root common.Hash) *solid.Attestation +} diff --git a/cl/aggregation/pool_impl.go b/cl/aggregation/pool_impl.go new file mode 100644 index 00000000000..62f1b704e4e --- /dev/null +++ b/cl/aggregation/pool_impl.go @@ -0,0 +1,134 @@ +package aggregation + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/Giulio2002/bls" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" +) + +var ErrIsSuperset = fmt.Errorf("attestation is superset of existing attestation") + +var ( + blsAggregate = bls.AggregateSignatures +) + +type aggregationPoolImpl struct { + // config + beaconConfig *clparams.BeaconChainConfig + netConfig *clparams.NetworkConfig + ethClock eth_clock.EthereumClock + aggregatesLock sync.RWMutex + aggregates map[common.Hash]*solid.Attestation +} + +func NewAggregationPool( + ctx context.Context, + beaconConfig *clparams.BeaconChainConfig, + netConfig *clparams.NetworkConfig, + ethClock eth_clock.EthereumClock, +) AggregationPool { + p := &aggregationPoolImpl{ + ethClock: ethClock, + beaconConfig: beaconConfig, + netConfig: netConfig, + aggregatesLock: sync.RWMutex{}, + aggregates: make(map[common.Hash]*solid.Attestation), + } + go p.sweepStaleAtt(ctx) + return p +} + +func (p *aggregationPoolImpl) AddAttestation(inAtt *solid.Attestation) error { + // use hash of attestation data as key + hashRoot, err := inAtt.AttestantionData().HashSSZ() + if err != nil { + return err + } + + p.aggregatesLock.Lock() + defer p.aggregatesLock.Unlock() + att, ok := p.aggregates[hashRoot] + if !ok { + p.aggregates[hashRoot] = inAtt.Copy() + return nil + } + + if utils.IsNonStrictSupersetBitlist(att.AggregationBits(), inAtt.AggregationBits()) { + // the on bit is already set, so ignore + return ErrIsSuperset + } + + // merge signature + baseSig := att.Signature() + inSig := inAtt.Signature() + merged, err := blsAggregate([][]byte{baseSig[:], inSig[:]}) + if err != nil { + return err + } + if len(merged) != 96 { + return fmt.Errorf("merged signature is too long") + } + var mergedSig [96]byte + copy(mergedSig[:], merged) + + // merge aggregation bits + mergedBits := make([]byte, len(att.AggregationBits())) + for i := range att.AggregationBits() { + mergedBits[i] = att.AggregationBits()[i] | inAtt.AggregationBits()[i] + } + + // update attestation + p.aggregates[hashRoot] = solid.NewAttestionFromParameters( + mergedBits, + inAtt.AttestantionData(), + mergedSig, + ) + return nil +} + +func (p *aggregationPoolImpl) GetAggregatationByRoot(root common.Hash) *solid.Attestation { + p.aggregatesLock.RLock() + defer p.aggregatesLock.RUnlock() + att := p.aggregates[root] + if att == nil { + return nil + } + return att.Copy() +} + +func (p *aggregationPoolImpl) sweepStaleAtt(ctx context.Context) { + ticker := time.NewTicker(time.Minute) + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + p.aggregatesLock.Lock() + toRemoves := make([][32]byte, 0) + for hashRoot := range p.aggregates { + att := p.aggregates[hashRoot] + if p.slotIsStale(att.AttestantionData().Slot()) { + toRemoves = append(toRemoves, hashRoot) + } + } + // remove stale attestation + for _, hashRoot := range toRemoves { + delete(p.aggregates, hashRoot) + } + p.aggregatesLock.Unlock() + } + } +} + +func (p *aggregationPoolImpl) slotIsStale(targetSlot uint64) bool { + curSlot := p.ethClock.GetCurrentSlot() + return curSlot-targetSlot > p.netConfig.AttestationPropagationSlotRange +} diff --git a/cl/aggregation/pool_test.go b/cl/aggregation/pool_test.go new file mode 100644 index 00000000000..79ae9cf410f --- /dev/null +++ b/cl/aggregation/pool_test.go @@ -0,0 +1,121 @@ +package aggregation + +import ( + "context" + "log" + "testing" + + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/stretchr/testify/suite" +) + +var ( + // mock attestations with attestation data 1 + attData1 = solid.NewAttestionDataFromParameters(1, 1, [32]byte{0, 4, 2, 6}, + solid.NewCheckpointFromParameters([32]byte{0}, 4), + solid.NewCheckpointFromParameters([32]byte{0}, 4)) + attData1Root, _ = attData1.HashSSZ() + + att1_1 = solid.NewAttestionFromParameters( + []byte{0b00000001, 0, 0, 0}, + attData1, + [96]byte{'a', 'b', 'c', 'd', 'e', 'f'}, + ) + att1_2 = solid.NewAttestionFromParameters( + []byte{0b00000001, 0, 0, 0}, + attData1, + [96]byte{'d', 'e', 'f', 'g', 'h', 'i'}, + ) + att1_3 = solid.NewAttestionFromParameters( + []byte{0b00000100, 0, 0, 0}, + attData1, + [96]byte{'g', 'h', 'i', 'j', 'k', 'l'}, + ) + att1_4 = solid.NewAttestionFromParameters( + []byte{0b00100000, 0, 0, 0}, + attData1, + [96]byte{'m', 'n', 'o', 'p', 'q', 'r'}, + ) + // mock attestations with attestation data 2 + attData2 = solid.NewAttestionDataFromParameters(3, 1, [32]byte{5, 5, 6, 6}, + solid.NewCheckpointFromParameters([32]byte{0}, 4), + solid.NewCheckpointFromParameters([32]byte{0}, 4)) + att2_1 = solid.NewAttestionFromParameters( + []byte{0b00000001, 0, 0, 0}, + attData2, + [96]byte{'t', 'e', 's', 't', 'i', 'n'}, + ) + + mockAggrResult = [96]byte{'m', 'o', 'c', 'k'} +) + +type PoolTestSuite struct { + suite.Suite +} + +func (t *PoolTestSuite) SetupTest() { + blsAggregate = func(sigs [][]byte) ([]byte, error) { + ret := make([]byte, 96) + copy(ret, mockAggrResult[:]) + return ret, nil + } +} + +func (t *PoolTestSuite) TearDownTest() { +} + +func (t *PoolTestSuite) TestAddAttestation() { + testcases := []struct { + name string + atts []*solid.Attestation + hashRoot [32]byte + expect *solid.Attestation + }{ + { + name: "simple, different hashRoot", + atts: []*solid.Attestation{ + att1_1, + att2_1, + }, + hashRoot: attData1Root, + expect: att1_1, + }, + { + name: "att1_2 is a super set of att1_1. skip att1_1", + atts: []*solid.Attestation{ + att1_2, + att1_1, + att2_1, // none of its business + }, + hashRoot: attData1Root, + expect: att1_2, + }, + { + name: "merge att1_2, att1_3, att1_4", + atts: []*solid.Attestation{ + att1_2, + att1_3, + att1_4, + }, + hashRoot: attData1Root, + expect: solid.NewAttestionFromParameters( + []byte{0b00100101, 0, 0, 0}, // merge of att1_2, att1_3 and att1_4 + attData1, + mockAggrResult), + }, + } + + for _, tc := range testcases { + log.Printf("test case: %s", tc.name) + pool := NewAggregationPool(context.Background(), nil, nil, nil) + for _, att := range tc.atts { + pool.AddAttestation(att) + } + att := pool.GetAggregatationByRoot(tc.hashRoot) + t.Equal(tc.expect, att, tc.name) + } +} + +func TestPool(t *testing.T) { + suite.Run(t, new(PoolTestSuite)) +} diff --git a/cl/antiquary/antiquary.go b/cl/antiquary/antiquary.go index a0f97b41fa5..61a03ccd130 100644 --- a/cl/antiquary/antiquary.go +++ b/cl/antiquary/antiquary.go @@ -2,6 +2,7 @@ package antiquary import ( "context" + "math" "sync/atomic" "time" @@ -10,58 +11,60 @@ import ( proto_downloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/utils" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" "github.com/ledgerwatch/log/v3" - "github.com/spf13/afero" ) -const safetyMargin = 10_000 // We retire snapshots 10k blocks after the finalized head +const safetyMargin = 2_000 // We retire snapshots 2k blocks after the finalized head // Antiquary is where the snapshots go, aka old history, it is what keep track of the oldest records. type Antiquary struct { - mainDB kv.RwDB // this is the main DB - dirs datadir.Dirs - downloader proto_downloader.DownloaderClient - logger log.Logger - sn *freezeblocks.CaplinSnapshots - snReader freezeblocks.BeaconSnapshotReader - ctx context.Context - beaconDB persistence.BlockSource - backfilled *atomic.Bool - cfg *clparams.BeaconChainConfig - states, blocks bool - fs afero.Fs - validatorsTable *state_accessors.StaticValidatorTable - genesisState *state.CachingBeaconState + mainDB kv.RwDB // this is the main DB + blobStorage blob_storage.BlobStorage // this is the blob storage + dirs datadir.Dirs + downloader proto_downloader.DownloaderClient + logger log.Logger + sn *freezeblocks.CaplinSnapshots + snReader freezeblocks.BeaconSnapshotReader + ctx context.Context + backfilled *atomic.Bool + blobBackfilled *atomic.Bool + cfg *clparams.BeaconChainConfig + states, blocks, blobs bool + validatorsTable *state_accessors.StaticValidatorTable + genesisState *state.CachingBeaconState // set to nil currentState *state.CachingBeaconState balances32 []byte } -func NewAntiquary(ctx context.Context, genesisState *state.CachingBeaconState, validatorsTable *state_accessors.StaticValidatorTable, cfg *clparams.BeaconChainConfig, dirs datadir.Dirs, downloader proto_downloader.DownloaderClient, mainDB kv.RwDB, sn *freezeblocks.CaplinSnapshots, reader freezeblocks.BeaconSnapshotReader, beaconDB persistence.BlockSource, logger log.Logger, states, blocks bool, fs afero.Fs) *Antiquary { +func NewAntiquary(ctx context.Context, blobStorage blob_storage.BlobStorage, genesisState *state.CachingBeaconState, validatorsTable *state_accessors.StaticValidatorTable, cfg *clparams.BeaconChainConfig, dirs datadir.Dirs, downloader proto_downloader.DownloaderClient, mainDB kv.RwDB, sn *freezeblocks.CaplinSnapshots, reader freezeblocks.BeaconSnapshotReader, logger log.Logger, states, blocks, blobs bool) *Antiquary { backfilled := &atomic.Bool{} + blobBackfilled := &atomic.Bool{} backfilled.Store(false) + blobBackfilled.Store(false) return &Antiquary{ mainDB: mainDB, + blobStorage: blobStorage, dirs: dirs, downloader: downloader, logger: logger, sn: sn, - beaconDB: beaconDB, ctx: ctx, backfilled: backfilled, + blobBackfilled: blobBackfilled, cfg: cfg, states: states, snReader: reader, - fs: fs, validatorsTable: validatorsTable, genesisState: genesisState, blocks: blocks, + blobs: blobs, } } @@ -91,7 +94,7 @@ func (a *Antiquary) Loop() error { case <-a.ctx.Done(): } } - if err := a.sn.BuildMissingIndices(a.ctx, a.logger, log.LvlDebug); err != nil { + if err := a.sn.BuildMissingIndices(a.ctx, a.logger); err != nil { return err } // Here we need to start mdbx transaction and lock the thread @@ -154,7 +157,7 @@ func (a *Antiquary) Loop() error { frozenSlots := a.sn.BlocksAvailable() if frozenSlots != 0 { - if err := a.beaconDB.PurgeRange(a.ctx, tx, 0, frozenSlots); err != nil { + if err := beacon_indicies.PruneBlocks(a.ctx, tx, frozenSlots); err != nil { return err } } @@ -162,6 +165,9 @@ func (a *Antiquary) Loop() error { if a.states { go a.loopStates(a.ctx) } + if a.blobs { + go a.loopBlobs(a.ctx) + } // write the indicies if err := beacon_indicies.WriteLastBeaconSnapshot(tx, frozenSlots); err != nil { @@ -209,7 +215,7 @@ func (a *Antiquary) Loop() error { if to-from < snaptype.Erigon2MergeLimit { continue } - if err := a.antiquate(a.sn.Version(), from, to); err != nil { + if err := a.antiquate(from, to); err != nil { return err } case <-a.ctx.Done(): @@ -218,29 +224,109 @@ func (a *Antiquary) Loop() error { } // Antiquate will antiquate a specific block range (aka. retire snapshots), this should be ran in the background. -func (a *Antiquary) antiquate(version uint8, from, to uint64) error { +func (a *Antiquary) antiquate(from, to uint64) error { if a.downloader == nil { return nil // Just skip if we don't have a downloader } log.Info("[Antiquary]: Antiquating", "from", from, "to", to) - if err := freezeblocks.DumpBeaconBlocks(a.ctx, a.mainDB, a.beaconDB, version, from, to, snaptype.Erigon2MergeLimit, a.dirs.Tmp, a.dirs.Snap, 1, log.LvlDebug, a.logger); err != nil { + if err := freezeblocks.DumpBeaconBlocks(a.ctx, a.mainDB, from, to, a.sn.Salt, a.dirs, 1, log.LvlDebug, a.logger); err != nil { + return err + } + tx, err := a.mainDB.BeginRw(a.ctx) + if err != nil { + return err + } + defer tx.Rollback() + + if err := beacon_indicies.PruneBlocks(a.ctx, tx, to); err != nil { + return err + } + if err := beacon_indicies.WriteLastBeaconSnapshot(tx, to-1); err != nil { + return err + } + if err := tx.Commit(); err != nil { + return err + } + + if err := a.sn.ReopenFolder(); err != nil { return err } + paths := a.sn.SegFilePaths(from, to) + downloadItems := make([]*proto_downloader.AddItem, len(paths)) + for i, path := range paths { + downloadItems[i] = &proto_downloader.AddItem{ + Path: path, + } + } + // Notify bittorent to seed the new snapshots + if _, err := a.downloader.Add(a.ctx, &proto_downloader.AddRequest{Items: downloadItems}); err != nil { + log.Warn("[Antiquary]: Failed to add items to bittorent", "err", err) + } + + return tx.Commit() +} + +func (a *Antiquary) NotifyBackfilled() { + // we set up the range for [lowestRawSlot, finalized] + a.backfilled.Store(true) // this is the lowest slot not in snapshots +} + +func (a *Antiquary) NotifyBlobBackfilled() { + a.blobBackfilled.Store(true) +} + +func (a *Antiquary) loopBlobs(ctx context.Context) { + if a.cfg.DenebForkEpoch == math.MaxUint64 { + return + } + blobAntiquationTicker := time.NewTicker(10 * time.Second) + for { + select { + case <-ctx.Done(): + return + case <-blobAntiquationTicker.C: + if !a.blobBackfilled.Load() { + continue + } + if err := a.antiquateBlobs(); err != nil { + log.Error("[Antiquary]: Failed to antiquate blobs", "err", err) + } + } + } +} + +func (a *Antiquary) antiquateBlobs() error { roTx, err := a.mainDB.BeginRo(a.ctx) if err != nil { return err } defer roTx.Rollback() - if err := a.beaconDB.PurgeRange(a.ctx, roTx, from, to-from-1); err != nil { + // perform blob antiquation if it is time to. + currentBlobsProgress := a.sn.FrozenBlobs() + minimunBlobsProgress := ((a.cfg.DenebForkEpoch * a.cfg.SlotsPerEpoch) / snaptype.Erigon2MergeLimit) * snaptype.Erigon2MergeLimit + currentBlobsProgress = utils.Max64(currentBlobsProgress, minimunBlobsProgress) + // read the finalized head + to, err := beacon_indicies.ReadHighestFinalized(roTx) + if err != nil { return err } + if to <= currentBlobsProgress || to-currentBlobsProgress < snaptype.Erigon2MergeLimit { + return nil + } roTx.Rollback() + a.logger.Info("[Antiquary]: Antiquating blobs", "from", currentBlobsProgress, "to", to) + // now, we need to retire the blobs + if err := freezeblocks.DumpBlobsSidecar(a.ctx, a.blobStorage, a.mainDB, currentBlobsProgress, to, a.sn.Salt, a.dirs, 1, log.LvlDebug, a.logger); err != nil { + return err + } + to = (to / snaptype.Erigon2MergeLimit) * snaptype.Erigon2MergeLimit + a.logger.Info("[Antiquary]: Finished Antiquating blobs", "from", currentBlobsProgress, "to", to) if err := a.sn.ReopenFolder(); err != nil { return err } - paths := a.sn.SegFilePaths(from, to) + paths := a.sn.SegFilePaths(currentBlobsProgress, to) downloadItems := make([]*proto_downloader.AddItem, len(paths)) for i, path := range paths { downloadItems[i] = &proto_downloader.AddItem{ @@ -252,19 +338,18 @@ func (a *Antiquary) antiquate(version uint8, from, to uint64) error { log.Warn("[Antiquary]: Failed to add items to bittorent", "err", err) } - tx, err := a.mainDB.BeginRw(a.ctx) + roTx, err = a.mainDB.BeginRo(a.ctx) if err != nil { return err } - defer tx.Rollback() - a.validatorsTable.SetSlot(to) - if err := beacon_indicies.WriteLastBeaconSnapshot(tx, to-1); err != nil { - return err + defer roTx.Rollback() + // now prune blobs from the database + for i := currentBlobsProgress; i < to; i++ { + blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(roTx, i) + if err != nil { + return err + } + a.blobStorage.RemoveBlobSidecars(a.ctx, i, blockRoot) } - return tx.Commit() -} - -func (a *Antiquary) NotifyBackfilled() { - // we set up the range for [lowestRawSlot, finalized] - a.backfilled.Store(true) // this is the lowest slot not in snapshots + return nil } diff --git a/cl/antiquary/beacon_states_collector.go b/cl/antiquary/beacon_states_collector.go new file mode 100644 index 00000000000..1f2367f7c03 --- /dev/null +++ b/cl/antiquary/beacon_states_collector.go @@ -0,0 +1,391 @@ +package antiquary + +import ( + "bytes" + "context" + "io" + + "github.com/klauspost/compress/zstd" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/etl" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/base_encoding" + state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/transition/impl/eth2" + "github.com/ledgerwatch/log/v3" +) + +var stateAntiquaryBufSz = etl.BufferOptimalSize / 8 // 18 collectors * 256mb / 8 = 512mb in worst case + +// RATIONALE: MDBX locks the entire database when writing to it, so we need to minimize the time spent in the write lock. +// so instead of writing the historical states on write transactions, we accumulate them in memory and write them in a single write transaction. + +// beaconStatesCollector is a collector that collects some of the beacon states fields in sub-collectors. +// these collectors then flush the data to the database. +type beaconStatesCollector struct { + effectiveBalanceCollector *etl.Collector + balancesCollector *etl.Collector + randaoMixesCollector *etl.Collector + intraRandaoMixesCollector *etl.Collector + proposersCollector *etl.Collector + slashingsCollector *etl.Collector + blockRootsCollector *etl.Collector + stateRootsCollector *etl.Collector + slotDataCollector *etl.Collector + epochDataCollector *etl.Collector + inactivityScoresCollector *etl.Collector + nextSyncCommitteeCollector *etl.Collector + currentSyncCommitteeCollector *etl.Collector + eth1DataVotesCollector *etl.Collector + stateEventsCollector *etl.Collector + activeValidatorIndiciesCollector *etl.Collector + balancesDumpsCollector *etl.Collector + effectiveBalancesDumpCollector *etl.Collector + + buf *bytes.Buffer + compressor *zstd.Encoder + + beaconCfg *clparams.BeaconChainConfig + logger log.Logger +} + +func newBeaconStatesCollector(beaconCfg *clparams.BeaconChainConfig, tmpdir string, logger log.Logger) *beaconStatesCollector { + buf := &bytes.Buffer{} + compressor, err := zstd.NewWriter(buf) + if err != nil { + panic(err) + } + return &beaconStatesCollector{ + effectiveBalanceCollector: etl.NewCollector(kv.ValidatorEffectiveBalance, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + balancesCollector: etl.NewCollector(kv.ValidatorBalance, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + randaoMixesCollector: etl.NewCollector(kv.RandaoMixes, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + intraRandaoMixesCollector: etl.NewCollector(kv.IntraRandaoMixes, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + proposersCollector: etl.NewCollector(kv.Proposers, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + slashingsCollector: etl.NewCollector(kv.ValidatorSlashings, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + blockRootsCollector: etl.NewCollector(kv.BlockRoot, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + stateRootsCollector: etl.NewCollector(kv.StateRoot, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + slotDataCollector: etl.NewCollector(kv.SlotData, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + epochDataCollector: etl.NewCollector(kv.EpochData, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + inactivityScoresCollector: etl.NewCollector(kv.InactivityScores, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + nextSyncCommitteeCollector: etl.NewCollector(kv.NextSyncCommittee, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + currentSyncCommitteeCollector: etl.NewCollector(kv.CurrentSyncCommittee, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + eth1DataVotesCollector: etl.NewCollector(kv.Eth1DataVotes, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + stateEventsCollector: etl.NewCollector(kv.StateEvents, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + activeValidatorIndiciesCollector: etl.NewCollector(kv.ActiveValidatorIndicies, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + balancesDumpsCollector: etl.NewCollector(kv.BalancesDump, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + effectiveBalancesDumpCollector: etl.NewCollector(kv.EffectiveBalancesDump, tmpdir, etl.NewSortableBuffer(stateAntiquaryBufSz), logger), + logger: logger, + beaconCfg: beaconCfg, + + buf: buf, + compressor: compressor, + } +} + +func (i *beaconStatesCollector) addGenesisState(ctx context.Context, state *state.CachingBeaconState) error { + i.buf.Reset() + i.compressor.Reset(i.buf) + + var err error + slot := state.Slot() + epoch := slot / i.beaconCfg.SlotsPerEpoch + // Setup state events handlers + if err := i.proposersCollector.Collect(base_encoding.Encode64ToBytes4(epoch), getProposerDutiesValue(state)); err != nil { + return err + } + + events := state_accessors.NewStateEvents() + + state.ForEachValidator(func(v solid.Validator, index, total int) bool { + events.AddValidator(uint64(index), v) + return true + }) + if err != nil { + return err + } + roundedSlotToDump := slot - (slot % clparams.SlotsPerDump) + + if err := antiquateField(ctx, roundedSlotToDump, state.RawBalances(), i.buf, i.compressor, i.balancesDumpsCollector); err != nil { + return err + } + + if err := i.collectEffectiveBalancesDump(slot, state.RawValidatorSet()); err != nil { + return err + } + if err := antiquateFullUint64List(i.slashingsCollector, roundedSlotToDump, state.RawSlashings(), i.buf, i.compressor); err != nil { + return err + } + + if err := i.storeEpochData(state); err != nil { + return err + } + + if state.Version() >= clparams.AltairVersion { + // dump inactivity scores + if err := antiquateFullUint64List(i.inactivityScoresCollector, slot, state.RawInactivityScores(), i.buf, i.compressor); err != nil { + return err + } + committeeSlot := i.beaconCfg.RoundSlotToSyncCommitteePeriod(slot) + committee := *state.CurrentSyncCommittee() + if err := i.currentSyncCommitteeCollector.Collect(base_encoding.Encode64ToBytes4(committeeSlot), libcommon.Copy(committee[:])); err != nil { + return err + } + + committee = *state.NextSyncCommittee() + if err := i.nextSyncCommitteeCollector.Collect(base_encoding.Encode64ToBytes4(committeeSlot), libcommon.Copy(committee[:])); err != nil { + return err + } + } + + if err := i.storeSlotData(state, nil); err != nil { + return err + } + + return i.stateEventsCollector.Collect(base_encoding.Encode64ToBytes4(slot), events.CopyBytes()) +} + +func (i *beaconStatesCollector) storeEpochData(st *state.CachingBeaconState) error { + i.buf.Reset() + epochData := state_accessors.EpochDataFromBeaconState(st) + + if err := epochData.WriteTo(i.buf); err != nil { + return err + } + roundedSlot := i.beaconCfg.RoundSlotToEpoch(st.Slot()) + return i.epochDataCollector.Collect(base_encoding.Encode64ToBytes4(roundedSlot), libcommon.Copy(i.buf.Bytes())) +} + +func (i *beaconStatesCollector) storeSlotData(st *state.CachingBeaconState, rewardsCollector *eth2.BlockRewardsCollector) error { + i.buf.Reset() + slotData := state_accessors.SlotDataFromBeaconState(st) + if rewardsCollector != nil { + slotData.AttestationsRewards = rewardsCollector.Attestations + slotData.SyncAggregateRewards = rewardsCollector.SyncAggregate + slotData.AttesterSlashings = rewardsCollector.AttesterSlashings + slotData.ProposerSlashings = rewardsCollector.ProposerSlashings + } + if err := slotData.WriteTo(i.buf); err != nil { + return err + } + return i.slotDataCollector.Collect(base_encoding.Encode64ToBytes4(st.Slot()), libcommon.Copy(i.buf.Bytes())) +} + +func (i *beaconStatesCollector) collectEffectiveBalancesDump(slot uint64, uncompressed []byte) error { + i.buf.Reset() + i.compressor.Reset(i.buf) + + validatorSetSize := 121 + for j := 0; j < len(uncompressed)/validatorSetSize; j++ { + // 80:88 + if _, err := i.compressor.Write(uncompressed[j*validatorSetSize+80 : j*validatorSetSize+88]); err != nil { + return err + } + } + + if err := i.compressor.Close(); err != nil { + return err + } + roundedSlot := slot - (slot % clparams.SlotsPerDump) + return i.effectiveBalancesDumpCollector.Collect(base_encoding.Encode64ToBytes4(roundedSlot), libcommon.Copy(i.buf.Bytes())) +} + +func (i *beaconStatesCollector) collectBalancesDump(slot uint64, uncompressed []byte) error { + i.buf.Reset() + i.compressor.Reset(i.buf) + return antiquateField(context.Background(), slot, uncompressed, i.buf, i.compressor, i.balancesDumpsCollector) +} + +func (i *beaconStatesCollector) collectIntraEpochRandaoMix(slot uint64, randao libcommon.Hash) error { + return i.intraRandaoMixesCollector.Collect(base_encoding.Encode64ToBytes4(slot), randao[:]) +} + +func (i *beaconStatesCollector) collectEpochRandaoMix(epoch uint64, randao libcommon.Hash) error { + slot := epoch * i.beaconCfg.SlotsPerEpoch + return i.randaoMixesCollector.Collect(base_encoding.Encode64ToBytes4(slot), randao[:]) +} + +func (i *beaconStatesCollector) collectStateRoot(slot uint64, stateRoot libcommon.Hash) error { + return i.stateRootsCollector.Collect(base_encoding.Encode64ToBytes4(slot), stateRoot[:]) +} + +func (i *beaconStatesCollector) collectBlockRoot(slot uint64, blockRoot libcommon.Hash) error { + return i.blockRootsCollector.Collect(base_encoding.Encode64ToBytes4(slot), blockRoot[:]) +} + +func (i *beaconStatesCollector) collectActiveIndices(epoch uint64, activeIndices []uint64) error { + i.buf.Reset() + if err := base_encoding.WriteRabbits(activeIndices, i.buf); err != nil { + return err + } + slot := epoch * i.beaconCfg.SlotsPerEpoch + return i.activeValidatorIndiciesCollector.Collect(base_encoding.Encode64ToBytes4(slot), libcommon.Copy(i.buf.Bytes())) +} + +func (i *beaconStatesCollector) collectFlattenedProposers(epoch uint64, proposers []byte) error { + return i.proposersCollector.Collect(base_encoding.Encode64ToBytes4(epoch), proposers) +} + +func (i *beaconStatesCollector) collectCurrentSyncCommittee(slot uint64, committee *solid.SyncCommittee) error { + roundedSlot := i.beaconCfg.RoundSlotToSyncCommitteePeriod(slot) + return i.currentSyncCommitteeCollector.Collect(base_encoding.Encode64ToBytes4(roundedSlot), committee[:]) +} + +func (i *beaconStatesCollector) collectNextSyncCommittee(slot uint64, committee *solid.SyncCommittee) error { + roundedSlot := i.beaconCfg.RoundSlotToSyncCommitteePeriod(slot) + return i.nextSyncCommitteeCollector.Collect(base_encoding.Encode64ToBytes4(roundedSlot), committee[:]) +} + +func (i *beaconStatesCollector) collectEth1DataVote(slot uint64, eth1Data *cltypes.Eth1Data) error { + vote, err := eth1Data.EncodeSSZ(nil) + if err != nil { + return err + } + return i.eth1DataVotesCollector.Collect(base_encoding.Encode64ToBytes4(slot), vote) +} + +func (i *beaconStatesCollector) collectSlashings(slot uint64, rawSlashings []byte) error { + i.buf.Reset() + i.compressor.Reset(i.buf) + return antiquateFullUint64List(i.slashingsCollector, slot, rawSlashings, i.buf, i.compressor) +} + +func (i *beaconStatesCollector) collectStateEvents(slot uint64, events *state_accessors.StateEvents) error { + return i.stateEventsCollector.Collect(base_encoding.Encode64ToBytes4(slot), events.CopyBytes()) +} + +func (i *beaconStatesCollector) collectBalancesDiffs(ctx context.Context, slot uint64, old, new []byte) error { + return antiquateBytesListDiff(ctx, base_encoding.Encode64ToBytes4(slot), old, new, i.balancesCollector, base_encoding.ComputeCompressedSerializedUint64ListDiff) +} + +func (i *beaconStatesCollector) collectEffectiveBalancesDiffs(ctx context.Context, slot uint64, oldValidatorSetSSZ, newValidatorSetSSZ []byte) error { + return antiquateBytesListDiff(ctx, base_encoding.Encode64ToBytes4(slot), oldValidatorSetSSZ, newValidatorSetSSZ, i.effectiveBalanceCollector, base_encoding.ComputeCompressedSerializedEffectiveBalancesDiff) +} + +func (i *beaconStatesCollector) collectInactivityScores(slot uint64, inactivityScores []byte) error { + return antiquateFullUint64List(i.inactivityScoresCollector, slot, inactivityScores, i.buf, i.compressor) +} + +func (i *beaconStatesCollector) flush(ctx context.Context, tx kv.RwTx) error { + loadfunc := func(k, v []byte, table etl.CurrentTableReader, next etl.LoadNextFunc) error { + return next(k, k, v) + } + + if err := i.effectiveBalanceCollector.Load(tx, kv.ValidatorEffectiveBalance, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.randaoMixesCollector.Load(tx, kv.RandaoMixes, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.balancesCollector.Load(tx, kv.ValidatorBalance, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.proposersCollector.Load(tx, kv.Proposers, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.slashingsCollector.Load(tx, kv.ValidatorSlashings, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.blockRootsCollector.Load(tx, kv.BlockRoot, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.stateRootsCollector.Load(tx, kv.StateRoot, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.activeValidatorIndiciesCollector.Load(tx, kv.ActiveValidatorIndicies, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.slotDataCollector.Load(tx, kv.SlotData, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.inactivityScoresCollector.Load(tx, kv.InactivityScores, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.intraRandaoMixesCollector.Load(tx, kv.IntraRandaoMixes, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.epochDataCollector.Load(tx, kv.EpochData, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.nextSyncCommitteeCollector.Load(tx, kv.NextSyncCommittee, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.currentSyncCommitteeCollector.Load(tx, kv.CurrentSyncCommittee, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.eth1DataVotesCollector.Load(tx, kv.Eth1DataVotes, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.stateEventsCollector.Load(tx, kv.StateEvents, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + if err := i.effectiveBalancesDumpCollector.Load(tx, kv.EffectiveBalancesDump, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + return err + } + + return i.balancesDumpsCollector.Load(tx, kv.BalancesDump, loadfunc, etl.TransformArgs{Quit: ctx.Done()}) +} + +func (i *beaconStatesCollector) close() { + i.effectiveBalanceCollector.Close() + i.balancesCollector.Close() + i.randaoMixesCollector.Close() + i.intraRandaoMixesCollector.Close() + i.proposersCollector.Close() + i.slashingsCollector.Close() + i.blockRootsCollector.Close() + i.stateRootsCollector.Close() + i.slotDataCollector.Close() + i.epochDataCollector.Close() + i.inactivityScoresCollector.Close() + i.nextSyncCommitteeCollector.Close() + i.currentSyncCommitteeCollector.Close() + i.eth1DataVotesCollector.Close() + i.stateEventsCollector.Close() + i.activeValidatorIndiciesCollector.Close() + i.balancesDumpsCollector.Close() + i.effectiveBalancesDumpCollector.Close() +} + +// antiquateFullUint64List goes on mdbx as it is full of common repeated patter always and thus fits with 16KB pages. +func antiquateFullUint64List(collector *etl.Collector, slot uint64, raw []byte, buffer *bytes.Buffer, compressor *zstd.Encoder) error { + buffer.Reset() + compressor.Reset(buffer) + if _, err := compressor.Write(raw); err != nil { + return err + } + if err := compressor.Close(); err != nil { + return err + } + return collector.Collect(base_encoding.Encode64ToBytes4(slot), libcommon.Copy(buffer.Bytes())) +} + +func antiquateField(ctx context.Context, slot uint64, uncompressed []byte, buffer *bytes.Buffer, compressor *zstd.Encoder, collector *etl.Collector) error { + buffer.Reset() + compressor.Reset(buffer) + + if _, err := compressor.Write(uncompressed); err != nil { + return err + } + if err := compressor.Close(); err != nil { + return err + } + roundedSlot := slot - (slot % clparams.SlotsPerDump) + return collector.Collect(base_encoding.Encode64ToBytes4(roundedSlot), libcommon.Copy(buffer.Bytes())) +} + +func antiquateBytesListDiff(ctx context.Context, key []byte, old, new []byte, collector *etl.Collector, diffFn func(w io.Writer, old, new []byte) error) error { + // create a diff + diffBuffer := bufferPool.Get().(*bytes.Buffer) + defer bufferPool.Put(diffBuffer) + diffBuffer.Reset() + + if err := diffFn(diffBuffer, old, new); err != nil { + return err + } + + return collector.Collect(key, libcommon.Copy(diffBuffer.Bytes())) +} diff --git a/cl/antiquary/state_antiquary.go b/cl/antiquary/state_antiquary.go index 892df0a2ceb..dcd23df2ea7 100644 --- a/cl/antiquary/state_antiquary.go +++ b/cl/antiquary/state_antiquary.go @@ -3,11 +3,7 @@ package antiquary import ( "bytes" "context" - "crypto/sha256" - "encoding/binary" "fmt" - "io" - "os" "sync" "time" @@ -26,7 +22,6 @@ import ( "github.com/ledgerwatch/erigon/cl/persistence/state/historical_states_reader" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state/raw" - "github.com/ledgerwatch/erigon/cl/phase1/core/state/shuffling" "github.com/ledgerwatch/erigon/cl/transition" "github.com/ledgerwatch/erigon/cl/transition/impl/eth2" "github.com/ledgerwatch/log/v3" @@ -39,28 +34,6 @@ var bufferPool = sync.Pool{ }, } -func excludeDuplicatesIdentity() etl.LoadFunc { - var prevKey, prevValue []byte - prevValue = []byte{} - return func(k, v []byte, table etl.CurrentTableReader, next etl.LoadNextFunc) error { - if len(prevKey) == 0 { - prevKey = common.Copy(k) - prevValue = common.Copy(v) - return nil - } - if bytes.Equal(k, prevKey) { - prevValue = common.Copy(v) - return nil - } - if err := next(prevKey, prevKey, prevValue); err != nil { - return err - } - prevKey = common.Copy(k) - prevValue = common.Copy(v) - return nil - } -} - func (s *Antiquary) loopStates(ctx context.Context) { // Execute this each second reqRetryTimer := time.NewTicker(100 * time.Millisecond) @@ -70,6 +43,12 @@ func (s *Antiquary) loopStates(ctx context.Context) { return } + _, beforeFinalized, err := s.readHistoricalProcessingProgress(ctx) + if err != nil { + s.logger.Error("Failed to read historical processing progress", "err", err) + return + } + for { select { // Check if we are behind finalized @@ -78,22 +57,24 @@ func (s *Antiquary) loopStates(ctx context.Context) { continue } // Check if we are behind finalized - progress, finalized, err := s.readHistoricalProcessingProgress(ctx) + _, finalized, err := s.readHistoricalProcessingProgress(ctx) if err != nil { s.logger.Error("Failed to read historical processing progress", "err", err) continue } - // Stay behind a little bit we rely on forkchoice up until (finalized - 2*slotsPerEpoch) - if progress+s.cfg.SlotsPerEpoch/2 >= finalized { + // We wait for updated finality. + if finalized == beforeFinalized { continue } + beforeFinalized = finalized if err := s.IncrementBeaconState(ctx, finalized); err != nil { - slot := uint64(0) if s.currentState != nil { - slot = s.currentState.Slot() + s.logger.Warn("Could not to increment beacon state, trying again later", "err", err, "slot", s.currentState.Slot()) + } else { + s.logger.Warn("Failed to increment beacon state", "err", err) } - s.logger.Error("Failed to increment beacon state", "err", err, "slot", slot) - return + s.currentState = nil + time.Sleep(5 * time.Second) } case <-ctx.Done(): @@ -121,19 +102,6 @@ func (s *Antiquary) readHistoricalProcessingProgress(ctx context.Context) (progr return } -func uint64BalancesList(s *state.CachingBeaconState, out []uint64) []uint64 { - if len(out) < s.ValidatorLength() { - out = make([]uint64, s.ValidatorLength()) - } - out = out[:s.ValidatorLength()] - - s.ForEachBalance(func(v uint64, index int, total int) bool { - out[index] = v - return true - }) - return out -} - func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { var tx kv.Tx @@ -146,102 +114,27 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { // maps which validators changes changedValidators := make(map[uint64]struct{}) - loadfunc := func(k, v []byte, table etl.CurrentTableReader, next etl.LoadNextFunc) error { - return next(k, k, v) - } + stateAntiquaryCollector := newBeaconStatesCollector(s.cfg, s.dirs.Tmp, s.logger) + defer stateAntiquaryCollector.close() - etlBufSz := etl.BufferOptimalSize / 8 // 18 collectors * 256mb / 8 = 512mb in worst case - effectiveBalance := etl.NewCollector(kv.ValidatorEffectiveBalance, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer effectiveBalance.Close() - balances := etl.NewCollector(kv.ValidatorBalance, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer balances.Close() - randaoMixes := etl.NewCollector(kv.RandaoMixes, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer randaoMixes.Close() - intraRandaoMixes := etl.NewCollector(kv.IntraRandaoMixes, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer intraRandaoMixes.Close() - proposers := etl.NewCollector(kv.Proposers, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer proposers.Close() - slashings := etl.NewCollector(kv.ValidatorSlashings, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer slashings.Close() - blockRoots := etl.NewCollector(kv.BlockRoot, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer blockRoots.Close() - stateRoots := etl.NewCollector(kv.StateRoot, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer stateRoots.Close() - slotData := etl.NewCollector(kv.SlotData, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer slotData.Close() - epochData := etl.NewCollector(kv.EpochData, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer epochData.Close() - inactivityScoresC := etl.NewCollector(kv.InactivityScores, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer inactivityScoresC.Close() - nextSyncCommittee := etl.NewCollector(kv.NextSyncCommittee, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer nextSyncCommittee.Close() - currentSyncCommittee := etl.NewCollector(kv.CurrentSyncCommittee, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer currentSyncCommittee.Close() - currentEpochAttestations := etl.NewCollector(kv.CurrentEpochAttestations, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer currentEpochAttestations.Close() - previousEpochAttestations := etl.NewCollector(kv.PreviousEpochAttestations, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer previousEpochAttestations.Close() - eth1DataVotes := etl.NewCollector(kv.Eth1DataVotes, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer eth1DataVotes.Close() - stateEvents := etl.NewCollector(kv.StateEvents, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer stateEvents.Close() - activeValidatorIndicies := etl.NewCollector(kv.ActiveValidatorIndicies, s.dirs.Tmp, etl.NewSortableBuffer(etlBufSz), s.logger) - defer activeValidatorIndicies.Close() - - progress, err := state_accessors.GetStateProcessingProgress(tx) - if err != nil { + if err := s.initializeStateAntiquaryIfNeeded(ctx, tx); err != nil { return err } - // Go back a little bit - if progress > s.cfg.SlotsPerEpoch*2 { - progress -= s.cfg.SlotsPerEpoch * 2 - } else { - progress = 0 - } - progress, err = findNearestSlotBackwards(tx, s.cfg, progress) // Maybe the guess was a missed slot. - if err != nil { - return err - } - // buffers - commonBuffer := &bytes.Buffer{} - compressedWriter, err := zstd.NewWriter(commonBuffer, zstd.WithEncoderLevel(zstd.SpeedBetterCompression)) - if err != nil { - return err - } - defer compressedWriter.Close() - // TODO(Giulio2002): also store genesis information and resume from state. - if s.currentState == nil { - // progress is 0 when we are at genesis - if progress == 0 { - s.currentState, err = s.genesisState.Copy() - if err != nil { - return err - } - // Collect genesis state if we are at genesis - if err := s.collectGenesisState(ctx, compressedWriter, s.currentState, currentSyncCommittee, nextSyncCommittee, slashings, epochData, inactivityScoresC, proposers, slotData, stateEvents, changedValidators); err != nil { - return err - } - } else { - start := time.Now() - // progress not 0? we need to load the state from the DB - historicalReader := historical_states_reader.NewHistoricalStatesReader(s.cfg, s.snReader, s.validatorsTable, s.fs, s.genesisState) - s.currentState, err = historicalReader.ReadHistoricalState(ctx, tx, progress) - if err != nil { - return fmt.Errorf("failed to read historical state at slot %d: %w", progress, err) - } - end := time.Since(start) - hashRoot, err := s.currentState.HashSSZ() - if err != nil { - return err - } - log.Info("Recovered Beacon State", "slot", s.currentState.Slot(), "elapsed", end, "root", libcommon.Hash(hashRoot).String()) - if err := s.currentState.InitBeaconState(); err != nil { - return err - } + if s.currentState.Slot() == s.genesisState.Slot() { + // Collect genesis state if we are at genesis + if err := stateAntiquaryCollector.addGenesisState(ctx, s.currentState); err != nil { + return err } - s.balances32 = s.balances32[:0] - s.balances32 = append(s.balances32, s.currentState.RawBalances()...) + // Mark all validators as touched because we just initizialized the whole state. + s.currentState.ForEachValidator(func(v solid.Validator, index, total int) bool { + changedValidators[uint64(index)] = struct{}{} + if err = s.validatorsTable.AddValidator(v, uint64(index), 0); err != nil { + return false + } + return true + }) } + s.validatorsTable.SetSlot(s.currentState.Slot()) logLvl := log.LvlInfo if to-s.currentState.Slot() < 96 { @@ -252,19 +145,17 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { // Use this as the event slot (it will be incremented by 1 each time we process a block) slot := s.currentState.Slot() + 1 - var prevBalances, prevValSet []byte + var prevValSet []byte events := state_accessors.NewStateEvents() slashingOccured := false - // var validatorStaticState - // var validatorStaticState map[uint64]*state.ValidatorStatic - // Setup state events handlers + // setup the events handler for historical states replay. s.currentState.SetEvents(raw.Events{ OnNewSlashingSegment: func(index int, segment uint64) error { slashingOccured = true return nil }, OnRandaoMixChange: func(index int, mix [32]byte) error { - return intraRandaoMixes.Collect(base_encoding.Encode64ToBytes4(slot), mix[:]) + return stateAntiquaryCollector.collectIntraEpochRandaoMix(slot, mix) }, OnNewValidator: func(index int, v solid.Validator, balance uint64) error { changedValidators[uint64(index)] = struct{}{} @@ -302,7 +193,7 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { return s.validatorsTable.AddWithdrawalCredentials(uint64(index), slot, libcommon.BytesToHash(wc)) }, OnEpochBoundary: func(epoch uint64) error { - if err := s.storeEpochData(commonBuffer, s.currentState, epochData); err != nil { + if err := stateAntiquaryCollector.storeEpochData(s.currentState); err != nil { return err } var prevEpoch uint64 @@ -310,49 +201,38 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { prevEpoch = epoch - 1 } mix := s.currentState.GetRandaoMixes(prevEpoch) - if err := randaoMixes.Collect(base_encoding.Encode64ToBytes4(prevEpoch*s.cfg.SlotsPerEpoch), mix[:]); err != nil { + if err := stateAntiquaryCollector.collectEpochRandaoMix(prevEpoch, mix); err != nil { return err } // Write active validator indicies - actives := s.currentState.GetActiveValidatorsIndices(prevEpoch) - commonBuffer.Reset() - if err := base_encoding.WriteRabbits(actives, commonBuffer); err != nil { - return err - } - if err := activeValidatorIndicies.Collect(base_encoding.Encode64ToBytes4(prevEpoch*s.cfg.SlotsPerEpoch), libcommon.Copy(commonBuffer.Bytes())); err != nil { + if err := stateAntiquaryCollector.collectActiveIndices( + prevEpoch, + s.currentState.GetActiveValidatorsIndices(prevEpoch), + ); err != nil { return err } - actives = s.currentState.GetActiveValidatorsIndices(epoch) - commonBuffer.Reset() - if err := base_encoding.WriteRabbits(actives, commonBuffer); err != nil { + if err := stateAntiquaryCollector.collectActiveIndices( + epoch, + s.currentState.GetActiveValidatorsIndices(epoch), + ); err != nil { return err } - if err := activeValidatorIndicies.Collect(base_encoding.Encode64ToBytes4(epoch*s.cfg.SlotsPerEpoch), libcommon.Copy(commonBuffer.Bytes())); err != nil { - return err - } - // truncate the file - return proposers.Collect(base_encoding.Encode64ToBytes4(epoch), getProposerDutiesValue(s.currentState)) + return stateAntiquaryCollector.collectFlattenedProposers(epoch, getProposerDutiesValue(s.currentState)) }, OnNewBlockRoot: func(index int, root common.Hash) error { - return blockRoots.Collect(base_encoding.Encode64ToBytes4(s.currentState.Slot()), root[:]) + return stateAntiquaryCollector.collectBlockRoot(s.currentState.Slot(), root) }, OnNewStateRoot: func(index int, root common.Hash) error { - return stateRoots.Collect(base_encoding.Encode64ToBytes4(s.currentState.Slot()), root[:]) + return stateAntiquaryCollector.collectStateRoot(s.currentState.Slot(), root) }, OnNewNextSyncCommittee: func(committee *solid.SyncCommittee) error { - roundedSlot := s.cfg.RoundSlotToSyncCommitteePeriod(slot) - return nextSyncCommittee.Collect(base_encoding.Encode64ToBytes4(roundedSlot), committee[:]) + return stateAntiquaryCollector.collectNextSyncCommittee(slot, committee) }, OnNewCurrentSyncCommittee: func(committee *solid.SyncCommittee) error { - roundedSlot := s.cfg.RoundSlotToSyncCommitteePeriod(slot) - return currentSyncCommittee.Collect(base_encoding.Encode64ToBytes4(roundedSlot), committee[:]) + return stateAntiquaryCollector.collectCurrentSyncCommittee(slot, committee) }, OnAppendEth1Data: func(data *cltypes.Eth1Data) error { - vote, err := data.EncodeSSZ(nil) - if err != nil { - return err - } - return eth1DataVotes.Collect(base_encoding.Encode64ToBytes4(slot), vote) + return stateAntiquaryCollector.collectEth1DataVote(slot, data) }, }) log.Log(logLvl, "Starting state processing", "from", slot, "to", to) @@ -361,13 +241,11 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { defer progressTimer.Stop() prevSlot := slot first := false - blocksBeforeCommit := 100_000 + blocksBeforeCommit := 350_000 blocksProcessed := 0 - // This tells us that transition and operations do not happen concurrently and access is safe, so we can optimize for GC. - // there is optimized custom cache to recycle big GC overhead. + for ; slot < to && blocksProcessed < blocksBeforeCommit; slot++ { slashingOccured = false // Set this to false at the beginning of each slot. - key := base_encoding.Encode64ToBytes4(slot) isDumpSlot := slot%clparams.SlotsPerDump == 0 block, err := s.snReader.ReadBlockBySlot(ctx, tx, slot) @@ -377,47 +255,27 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { prevValidatorSetLength := s.currentState.ValidatorLength() prevEpoch := state.Epoch(s.currentState) - if slot%s.cfg.SlotsPerEpoch == 0 && s.currentState.Version() == clparams.Phase0Version { - encoded, err := s.currentState.CurrentEpochAttestations().EncodeSSZ(nil) - if err != nil { - return err - } - if err := s.dumpPayload(base_encoding.Encode64ToBytes4(s.cfg.RoundSlotToEpoch(slot-1)), encoded, currentEpochAttestations, commonBuffer, compressedWriter); err != nil { - return err - } - encoded, err = s.currentState.PreviousEpochAttestations().EncodeSSZ(nil) - if err != nil { - return err - } - if err := s.dumpPayload(base_encoding.Encode64ToBytes4(s.cfg.RoundSlotToEpoch(slot-1)), encoded, previousEpochAttestations, commonBuffer, compressedWriter); err != nil { - return err - } - } - // If we have a missed block, we just skip it. if block == nil { if isDumpSlot { - if err := s.antiquateField(ctx, slot, s.currentState.RawBalances(), compressedWriter, "balances"); err != nil { + if err := stateAntiquaryCollector.collectBalancesDump(slot, s.currentState.RawBalances()); err != nil { return err } - if err := s.antiquateEffectiveBalances(ctx, slot, s.currentState.RawValidatorSet(), compressedWriter); err != nil { + if err := stateAntiquaryCollector.collectEffectiveBalancesDump(slot, s.currentState.RawValidatorSet()); err != nil { return err } - s.balances32 = s.balances32[:0] - s.balances32 = append(s.balances32, s.currentState.RawBalances()...) - } else if slot%s.cfg.SlotsPerEpoch == 0 { - if err := s.antiquateBytesListDiff(ctx, key, s.balances32, s.currentState.RawBalances(), balances, base_encoding.ComputeCompressedSerializedUint64ListDiff); err != nil { + } + if slot%s.cfg.SlotsPerEpoch == 0 { + if err := stateAntiquaryCollector.collectBalancesDiffs(ctx, slot, s.balances32, s.currentState.RawBalances()); err != nil { return err } + s.balances32 = s.balances32[:0] s.balances32 = append(s.balances32, s.currentState.RawBalances()...) } - continue } // We now compute the difference between the two balances. - prevBalances = prevBalances[:0] - prevBalances = append(prevBalances, s.currentState.RawBalances()...) prevValSet = prevValSet[:0] prevValSet = append(prevValSet, s.currentState.RawValidatorSet()...) @@ -427,55 +285,56 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { if err := transition.TransitionState(s.currentState, block, blockRewardsCollector, fullValidation); err != nil { return err } + // if s.currentState.Slot() == 3000010 { + // s.dumpFullBeaconState() + // } blocksProcessed++ first = false - // dump the whole slashings vector. + // dump the whole slashings vector, if the slashing actually occured. if slashingOccured { - if err := s.antiquateFullUint64List(slashings, slot, s.currentState.RawSlashings(), commonBuffer, compressedWriter); err != nil { + if err := stateAntiquaryCollector.collectSlashings(slot, s.currentState.RawSlashings()); err != nil { return err } } - if err := s.storeSlotData(commonBuffer, s.currentState, blockRewardsCollector, slotData); err != nil { + if err := stateAntiquaryCollector.storeSlotData(s.currentState, blockRewardsCollector); err != nil { return err } - if err := stateEvents.Collect(base_encoding.Encode64ToBytes4(slot), events.CopyBytes()); err != nil { + + if err := stateAntiquaryCollector.collectStateEvents(slot, events); err != nil { return err } events.Reset() if isDumpSlot { - if err := s.antiquateField(ctx, slot, s.currentState.RawBalances(), compressedWriter, "balances"); err != nil { + if err := stateAntiquaryCollector.collectBalancesDump(slot, s.currentState.RawBalances()); err != nil { return err } - if err := s.antiquateEffectiveBalances(ctx, slot, s.currentState.RawValidatorSet(), compressedWriter); err != nil { + if err := stateAntiquaryCollector.collectEffectiveBalancesDump(slot, s.currentState.RawValidatorSet()); err != nil { return err } - // Reset it as we antiquated it. + } + // collect current diffs. + if err := stateAntiquaryCollector.collectBalancesDiffs(ctx, slot, s.balances32, s.currentState.RawBalances()); err != nil { + return err + } + // If we find an epoch, we need to reset the diffs. + if slot%s.cfg.SlotsPerEpoch == 0 { s.balances32 = s.balances32[:0] s.balances32 = append(s.balances32, s.currentState.RawBalances()...) - continue } // antiquate diffs isEpochCrossed := prevEpoch != state.Epoch(s.currentState) - if slot%s.cfg.SlotsPerEpoch == 0 { - if err := s.antiquateBytesListDiff(ctx, key, s.balances32, s.currentState.RawBalances(), balances, base_encoding.ComputeCompressedSerializedUint64ListDiff); err != nil { - return err - } - s.balances32 = s.balances32[:0] - s.balances32 = append(s.balances32, s.currentState.RawBalances()...) - } else if err := s.antiquateBytesListDiff(ctx, key, prevBalances, s.currentState.RawBalances(), balances, base_encoding.ComputeCompressedSerializedUint64ListDiff); err != nil { - return err - } + if prevValidatorSetLength != s.currentState.ValidatorLength() || isEpochCrossed { - if err := s.antiquateBytesListDiff(ctx, key, prevValSet, s.currentState.RawValidatorSet(), effectiveBalance, base_encoding.ComputeCompressedSerializedEffectiveBalancesDiff); err != nil { + if err := stateAntiquaryCollector.collectEffectiveBalancesDiffs(ctx, slot, prevValSet, s.currentState.RawValidatorSet()); err != nil { return err } if s.currentState.Version() >= clparams.AltairVersion { - if err := s.antiquateFullUint64List(inactivityScoresC, slot, s.currentState.RawInactivityScores(), commonBuffer, compressedWriter); err != nil { + if err := stateAntiquaryCollector.collectInactivityScores(slot, s.currentState.RawInactivityScores()); err != nil { return err } } @@ -492,97 +351,35 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { log.Debug("Finished beacon state iteration", "elapsed", time.Since(start)) + log.Log(logLvl, "Stopped Caplin to load states") rwTx, err := s.mainDB.BeginRw(ctx) if err != nil { return err } defer rwTx.Rollback() - start = time.Now() - log.Log(logLvl, "Stopped Caplin to load states") - // Now load. - if err := effectiveBalance.Load(rwTx, kv.ValidatorEffectiveBalance, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := randaoMixes.Load(rwTx, kv.RandaoMixes, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := balances.Load(rwTx, kv.ValidatorBalance, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := proposers.Load(rwTx, kv.Proposers, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := slashings.Load(rwTx, kv.ValidatorSlashings, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := blockRoots.Load(rwTx, kv.BlockRoot, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := stateRoots.Load(rwTx, kv.StateRoot, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - if err := activeValidatorIndicies.Load(rwTx, kv.ActiveValidatorIndicies, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := slotData.Load(rwTx, kv.SlotData, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := inactivityScoresC.Load(rwTx, kv.InactivityScores, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := intraRandaoMixes.Load(rwTx, kv.IntraRandaoMixes, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - if err := epochData.Load(rwTx, kv.EpochData, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := nextSyncCommittee.Load(rwTx, kv.NextSyncCommittee, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := currentSyncCommittee.Load(rwTx, kv.CurrentSyncCommittee, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := currentEpochAttestations.Load(rwTx, kv.CurrentEpochAttestations, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - - if err := previousEpochAttestations.Load(rwTx, kv.PreviousEpochAttestations, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { + start = time.Now() + // We now need to store the state + if err := stateAntiquaryCollector.flush(ctx, rwTx); err != nil { return err } - if err := eth1DataVotes.Load(rwTx, kv.Eth1DataVotes, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - if err := stateEvents.Load(rwTx, kv.StateEvents, loadfunc, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } if err := state_accessors.SetStateProcessingProgress(rwTx, s.currentState.Slot()); err != nil { return err } + s.validatorsTable.SetSlot(s.currentState.Slot()) + buf := &bytes.Buffer{} s.validatorsTable.ForEach(func(validatorIndex uint64, validator *state_accessors.StaticValidator) bool { if _, ok := changedValidators[validatorIndex]; !ok { return true } - commonBuffer.Reset() - if err = validator.WriteTo(commonBuffer); err != nil { + buf.Reset() + if err = validator.WriteTo(buf); err != nil { return false } - if err = rwTx.Put(kv.StaticValidators, base_encoding.Encode64ToBytes4(validatorIndex), common.Copy(commonBuffer.Bytes())); err != nil { + if err = rwTx.Put(kv.StaticValidators, base_encoding.Encode64ToBytes4(validatorIndex), common.Copy(buf.Bytes())); err != nil { return false } return true @@ -602,267 +399,82 @@ func (s *Antiquary) IncrementBeaconState(ctx context.Context, to uint64) error { return nil } -func (s *Antiquary) antiquateField(ctx context.Context, slot uint64, uncompressed []byte, compressor *zstd.Encoder, name string) error { - folderPath, filePath := clparams.EpochToPaths(slot, s.cfg, name) - _ = s.fs.MkdirAll(folderPath, 0o755) - - balancesFile, err := s.fs.OpenFile(filePath, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - return err - } - defer balancesFile.Close() - compressor.Reset(balancesFile) - - if err := binary.Write(balancesFile, binary.LittleEndian, uint64(len(uncompressed))); err != nil { - return err - } +func (s *Antiquary) antiquateField(ctx context.Context, slot uint64, uncompressed []byte, buffer *bytes.Buffer, compressor *zstd.Encoder, collector *etl.Collector) error { + buffer.Reset() + compressor.Reset(buffer) if _, err := compressor.Write(uncompressed); err != nil { return err } - if err := compressor.Close(); err != nil { return err } - return balancesFile.Sync() + roundedSlot := slot - (slot % clparams.SlotsPerDump) + return collector.Collect(base_encoding.Encode64ToBytes4(roundedSlot), common.Copy(buffer.Bytes())) } -func (s *Antiquary) antiquateEffectiveBalances(ctx context.Context, slot uint64, uncompressed []byte, compressor *zstd.Encoder) error { - folderPath, filePath := clparams.EpochToPaths(slot, s.cfg, "effective_balances") - _ = s.fs.MkdirAll(folderPath, 0o755) - - balancesFile, err := s.fs.OpenFile(filePath, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) +func (s *Antiquary) initializeStateAntiquaryIfNeeded(ctx context.Context, tx kv.Tx) error { + if s.currentState != nil { + return nil + } + // Start by reading the state processing progress + targetSlot, err := state_accessors.GetStateProcessingProgress(tx) if err != nil { return err } - defer balancesFile.Close() - compressor.Reset(balancesFile) - validatorSetSize := 121 + // We want to backoff by some slots until we get a correct state from DB. + // we start from 1 * clparams.SlotsPerDump. + backoffStep := uint64(10) - if err := binary.Write(balancesFile, binary.LittleEndian, uint64((len(uncompressed)/validatorSetSize)*8)); err != nil { - return err - } + historicalReader := historical_states_reader.NewHistoricalStatesReader(s.cfg, s.snReader, s.validatorsTable, s.genesisState) - for i := 0; i < len(uncompressed)/validatorSetSize; i++ { - // 80:88 - if _, err := compressor.Write(uncompressed[i*validatorSetSize+80 : i*validatorSetSize+88]); err != nil { + for { + attempt, err := computeSlotToBeRequested(tx, s.cfg, s.genesisState.Slot(), targetSlot, backoffStep) + if err != nil { return err } - } - - if err := compressor.Close(); err != nil { - return err - } - return balancesFile.Sync() -} - -func (s *Antiquary) antiquateBytesListDiff(ctx context.Context, key []byte, old, new []byte, collector *etl.Collector, diffFn func(w io.Writer, old, new []byte) error) error { - // create a diff - diffBuffer := bufferPool.Get().(*bytes.Buffer) - defer bufferPool.Put(diffBuffer) - diffBuffer.Reset() - - if err := diffFn(diffBuffer, old, new); err != nil { - return err - } - - return collector.Collect(key, common.Copy(diffBuffer.Bytes())) -} - -func getProposerDutiesValue(s *state.CachingBeaconState) []byte { - epoch := state.Epoch(s) - var wg sync.WaitGroup - list := make([]byte, s.BeaconConfig().SlotsPerEpoch*4) - for slot := s.Slot(); slot < s.Slot()+s.BeaconConfig().SlotsPerEpoch; slot++ { - var proposerIndex uint64 - // Lets do proposer index computation - mixPosition := (epoch + s.BeaconConfig().EpochsPerHistoricalVector - s.BeaconConfig().MinSeedLookahead - 1) % - s.BeaconConfig().EpochsPerHistoricalVector - // Input for the seed hash. - mix := s.GetRandaoMix(int(mixPosition)) - input := shuffling.GetSeed(s.BeaconConfig(), mix, epoch, s.BeaconConfig().DomainBeaconProposer) - slotByteArray := make([]byte, 8) - binary.LittleEndian.PutUint64(slotByteArray, slot) - - // Add slot to the end of the input. - inputWithSlot := append(input[:], slotByteArray...) - hash := sha256.New() - - // Calculate the hash. - hash.Write(inputWithSlot) - seed := hash.Sum(nil) - - indices := s.GetActiveValidatorsIndices(epoch) - - // Write the seed to an array. - seedArray := [32]byte{} - copy(seedArray[:], seed) - wg.Add(1) - - // Do it in parallel - go func(i, slot uint64, indicies []uint64, seedArray [32]byte) { - defer wg.Done() - var err error - proposerIndex, err = shuffling.ComputeProposerIndex(s.BeaconState, indices, seedArray) + // If we are attempting slot=0 then we are at genesis. + if attempt == s.genesisState.Slot() { + s.currentState, err = s.genesisState.Copy() if err != nil { - panic(err) + return err } - binary.BigEndian.PutUint32(list[i*4:(i+1)*4], uint32(proposerIndex)) - }(slot-s.Slot(), slot, indices, seedArray) - } - wg.Wait() - return list -} - -func (s *Antiquary) collectGenesisState(ctx context.Context, compressor *zstd.Encoder, state *state.CachingBeaconState, currentSyncCommittee, nextSyncCommittee, slashings, epochData, inactivities, proposersCollector, slotDataCollector, stateEvents *etl.Collector, changedValidators map[uint64]struct{}) error { - var err error - slot := state.Slot() - epoch := slot / s.cfg.SlotsPerEpoch - // Setup state events handlers - if err := proposersCollector.Collect(base_encoding.Encode64ToBytes4(epoch), getProposerDutiesValue(s.currentState)); err != nil { - return err - } - - events := state_accessors.NewStateEvents() - - state.ForEachValidator(func(v solid.Validator, index, total int) bool { - changedValidators[uint64(index)] = struct{}{} - if err = s.validatorsTable.AddValidator(v, uint64(index), 0); err != nil { - return false + break } - events.AddValidator(uint64(index), v) - return true - }) - if err != nil { - return err - } - roundedSlotToDump := slot - (slot % clparams.SlotsPerDump) - if err := s.antiquateField(ctx, roundedSlotToDump, s.currentState.RawBalances(), compressor, "balances"); err != nil { - return err - } - if err := s.antiquateEffectiveBalances(ctx, roundedSlotToDump, s.currentState.RawValidatorSet(), compressor); err != nil { - return err - } - var commonBuffer bytes.Buffer - if err := s.antiquateFullUint64List(slashings, roundedSlotToDump, s.currentState.RawSlashings(), &commonBuffer, compressor); err != nil { - return err - } - if err := s.storeEpochData(&commonBuffer, state, epochData); err != nil { - return err - } + // progress not 0 ? we need to load the state from the DB + s.currentState, err = historicalReader.ReadHistoricalState(ctx, tx, attempt) + if err != nil { + return fmt.Errorf("failed to read historical state at slot %d: %w", attempt, err) + } - if state.Version() >= clparams.AltairVersion { - // dump inactivity scores - if err := s.antiquateFullUint64List(inactivities, slot, state.RawInactivityScores(), &commonBuffer, compressor); err != nil { + computedBlockRoot, err := s.currentState.BlockRoot() + if err != nil { return err } - committeeSlot := s.cfg.RoundSlotToSyncCommitteePeriod(slot) - committee := *state.CurrentSyncCommittee() - if err := currentSyncCommittee.Collect(base_encoding.Encode64ToBytes4(committeeSlot), libcommon.Copy(committee[:])); err != nil { + expectedBlockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, attempt) + if err != nil { return err } - - committee = *state.NextSyncCommittee() - if err := nextSyncCommittee.Collect(base_encoding.Encode64ToBytes4(committeeSlot), libcommon.Copy(committee[:])); err != nil { - return err + if computedBlockRoot != expectedBlockRoot { + log.Debug("Block root mismatch, trying again", "slot", attempt, "expected", expectedBlockRoot) + // backoff more + backoffStep += 10 + continue } + break } - var b bytes.Buffer - if err := s.storeSlotData(&b, state, nil, slotDataCollector); err != nil { - return err - } - - return stateEvents.Collect(base_encoding.Encode64ToBytes4(slot), events.CopyBytes()) + s.balances32 = s.balances32[:0] + s.balances32 = append(s.balances32, s.currentState.RawBalances()...) + return s.currentState.InitBeaconState() } -func (s *Antiquary) storeSlotData(buffer *bytes.Buffer, st *state.CachingBeaconState, rewardsCollector *eth2.BlockRewardsCollector, collector *etl.Collector) error { - buffer.Reset() - slotData := state_accessors.SlotDataFromBeaconState(st) - if rewardsCollector != nil { - slotData.AttestationsRewards = rewardsCollector.Attestations - slotData.SyncAggregateRewards = rewardsCollector.SyncAggregate - slotData.AttesterSlashings = rewardsCollector.AttesterSlashings - slotData.ProposerSlashings = rewardsCollector.ProposerSlashings - } - if err := slotData.WriteTo(buffer); err != nil { - return err - } - return collector.Collect(base_encoding.Encode64ToBytes4(st.Slot()), libcommon.Copy(buffer.Bytes())) -} - -func (s *Antiquary) storeEpochData(buffer *bytes.Buffer, st *state.CachingBeaconState, collector *etl.Collector) error { - buffer.Reset() - epochData := state_accessors.EpochDataFromBeaconState(st) - - if err := epochData.WriteTo(buffer); err != nil { - return err - } - roundedSlot := s.cfg.RoundSlotToEpoch(st.Slot()) - return collector.Collect(base_encoding.Encode64ToBytes4(roundedSlot), libcommon.Copy(buffer.Bytes())) -} - -func (s *Antiquary) dumpPayload(k []byte, v []byte, c *etl.Collector, b *bytes.Buffer, compressor *zstd.Encoder) error { - if compressor == nil { - return c.Collect(k, v) - } - b.Reset() - compressor.Reset(b) - - if _, err := compressor.Write(v); err != nil { - return err - } - if err := compressor.Close(); err != nil { - return err - } - return c.Collect(k, common.Copy(b.Bytes())) -} - -// func (s *Antiquary) dumpFullBeaconState() { -// b, err := s.currentState.EncodeSSZ(nil) -// if err != nil { -// s.logger.Error("Failed to encode full beacon state", "err", err) -// return -// } -// // just dump it in a.txt like an idiot without afero -// if err := os.WriteFile("b.txt", b, 0644); err != nil { -// s.logger.Error("Failed to write full beacon state", "err", err) -// } -// } - -func flattenRandaoMixes(hashes []libcommon.Hash) []byte { - out := make([]byte, len(hashes)*32) - for i, h := range hashes { - copy(out[i*32:(i+1)*32], h[:]) - } - return out -} - -// antiquateFullSlashings goes on mdbx as it is full of common repeated patter always and thus fits with 16KB pages. -func (s *Antiquary) antiquateFullUint64List(collector *etl.Collector, slot uint64, raw []byte, buffer *bytes.Buffer, compressor *zstd.Encoder) error { - buffer.Reset() - compressor.Reset(buffer) - if _, err := compressor.Write(raw); err != nil { - return err - } - if err := compressor.Close(); err != nil { - return err - } - return collector.Collect(base_encoding.Encode64ToBytes4(slot), common.Copy(buffer.Bytes())) -} - -func findNearestSlotBackwards(tx kv.Tx, cfg *clparams.BeaconChainConfig, slot uint64) (uint64, error) { - canonicalRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, slot) - if err != nil { - return 0, err - } - for (canonicalRoot == (common.Hash{}) && slot > 0) || slot%cfg.SlotsPerEpoch != 0 { - slot-- - canonicalRoot, err = beacon_indicies.ReadCanonicalBlockRoot(tx, slot) - if err != nil { - return 0, err - } +func computeSlotToBeRequested(tx kv.Tx, cfg *clparams.BeaconChainConfig, genesisSlot uint64, targetSlot uint64, backoffStep uint64) (uint64, error) { + // We want to backoff by some slots until we get a correct state from DB. + // we start from 2 * clparams.SlotsPerDump. + if targetSlot > clparams.SlotsPerDump*backoffStep { + return findNearestSlotBackwards(tx, cfg, targetSlot-clparams.SlotsPerDump*backoffStep) } - return slot, nil + return genesisSlot, nil } diff --git a/cl/antiquary/state_antiquary_test.go b/cl/antiquary/state_antiquary_test.go index 7f407a4b674..efff4afe816 100644 --- a/cl/antiquary/state_antiquary_test.go +++ b/cl/antiquary/state_antiquary_test.go @@ -1,3 +1,5 @@ +//go:build integration + package antiquary import ( @@ -13,24 +15,20 @@ import ( state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/log/v3" - "github.com/spf13/afero" "github.com/stretchr/testify/require" ) func runTest(t *testing.T, blocks []*cltypes.SignedBeaconBlock, preState, postState *state.CachingBeaconState) { db := memdb.NewTestDB(t) - reader, _ := tests.LoadChain(blocks, postState, db, t) + reader := tests.LoadChain(blocks, postState, db, t) ctx := context.Background() vt := state_accessors.NewStaticValidatorTable() - f := afero.NewMemMapFs() - a := NewAntiquary(ctx, preState, vt, &clparams.MainnetBeaconConfig, datadir.New("/tmp"), nil, db, nil, reader, nil, log.New(), true, true, f) + a := NewAntiquary(ctx, nil, preState, vt, &clparams.MainnetBeaconConfig, datadir.New("/tmp"), nil, db, nil, reader, log.New(), true, true, true) require.NoError(t, a.IncrementBeaconState(ctx, blocks[len(blocks)-1].Block.Slot+33)) - // TODO: add more meaning here, like checking db values, will do so once i see some bugs } func TestStateAntiquaryCapella(t *testing.T) { - t.Skip("TODO: oom") blocks, preState, postState := tests.GetCapellaRandom() runTest(t, blocks, preState, postState) } diff --git a/cl/antiquary/tests/tests.go b/cl/antiquary/tests/tests.go index ddfb042405d..47b7c713599 100644 --- a/cl/antiquary/tests/tests.go +++ b/cl/antiquary/tests/tests.go @@ -11,12 +11,10 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/utils" - "github.com/spf13/afero" "github.com/stretchr/testify/require" ) @@ -50,20 +48,27 @@ var phase0_post_state_ssz_snappy []byte var bellatrixFS embed.FS type MockBlockReader struct { - u map[uint64]*cltypes.SignedBeaconBlock + U map[uint64]*cltypes.SignedBeaconBlock } func NewMockBlockReader() *MockBlockReader { - return &MockBlockReader{u: make(map[uint64]*cltypes.SignedBeaconBlock)} + return &MockBlockReader{U: make(map[uint64]*cltypes.SignedBeaconBlock)} } func (m *MockBlockReader) ReadBlockBySlot(ctx context.Context, tx kv.Tx, slot uint64) (*cltypes.SignedBeaconBlock, error) { - return m.u[slot], nil + return m.U[slot], nil +} + +func (m *MockBlockReader) ReadBlindedBlockBySlot(ctx context.Context, tx kv.Tx, slot uint64) (*cltypes.SignedBlindedBeaconBlock, error) { + if m.U[slot] == nil { + return nil, nil + } + return m.U[slot].Blinded() } func (m *MockBlockReader) ReadBlockByRoot(ctx context.Context, tx kv.Tx, blockRoot libcommon.Hash) (*cltypes.SignedBeaconBlock, error) { // do a linear search - for _, v := range m.u { + for _, v := range m.U { r, err := v.Block.HashSSZ() if err != nil { return nil, err @@ -90,25 +95,21 @@ func (m *MockBlockReader) FrozenSlots() uint64 { panic("implement me") } -func LoadChain(blocks []*cltypes.SignedBeaconBlock, s *state.CachingBeaconState, db kv.RwDB, t *testing.T) (*MockBlockReader, afero.Fs) { +func LoadChain(blocks []*cltypes.SignedBeaconBlock, s *state.CachingBeaconState, db kv.RwDB, t *testing.T) *MockBlockReader { tx, err := db.BeginRw(context.Background()) require.NoError(t, err) defer tx.Rollback() - fs := afero.NewMemMapFs() - bs := persistence.NewAferoRawBlockSaver(fs, &clparams.MainnetBeaconConfig) - source := persistence.NewBeaconChainDatabaseFilesystem(bs, nil, &clparams.MainnetBeaconConfig) m := NewMockBlockReader() for _, block := range blocks { - m.u[block.Block.Slot] = block - - require.NoError(t, source.WriteBlock(context.Background(), tx, block, true)) + m.U[block.Block.Slot] = block + require.NoError(t, beacon_indicies.WriteBeaconBlockAndIndicies(context.Background(), tx, block, true)) require.NoError(t, beacon_indicies.WriteHighestFinalized(tx, block.Block.Slot+64)) } require.NoError(t, state_accessors.InitializeStaticTables(tx, s)) require.NoError(t, tx.Commit()) - return m, fs + return m } func GetCapellaRandom() ([]*cltypes.SignedBeaconBlock, *state.CachingBeaconState, *state.CachingBeaconState) { diff --git a/cl/antiquary/utils.go b/cl/antiquary/utils.go new file mode 100644 index 00000000000..ee7ea86d6e5 --- /dev/null +++ b/cl/antiquary/utils.go @@ -0,0 +1,86 @@ +package antiquary + +import ( + "crypto/sha256" + "encoding/binary" + "sync" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/core/state/shuffling" +) + +func getProposerDutiesValue(s *state.CachingBeaconState) []byte { + epoch := state.Epoch(s) + var wg sync.WaitGroup + list := make([]byte, s.BeaconConfig().SlotsPerEpoch*4) + for slot := s.Slot(); slot < s.Slot()+s.BeaconConfig().SlotsPerEpoch; slot++ { + var proposerIndex uint64 + // Lets do proposer index computation + mixPosition := (epoch + s.BeaconConfig().EpochsPerHistoricalVector - s.BeaconConfig().MinSeedLookahead - 1) % + s.BeaconConfig().EpochsPerHistoricalVector + // Input for the seed hash. + mix := s.GetRandaoMix(int(mixPosition)) + input := shuffling.GetSeed(s.BeaconConfig(), mix, epoch, s.BeaconConfig().DomainBeaconProposer) + slotByteArray := make([]byte, 8) + binary.LittleEndian.PutUint64(slotByteArray, slot) + + // Add slot to the end of the input. + inputWithSlot := append(input[:], slotByteArray...) + hash := sha256.New() + + // Calculate the hash. + hash.Write(inputWithSlot) + seed := hash.Sum(nil) + + indices := s.GetActiveValidatorsIndices(epoch) + + // Write the seed to an array. + seedArray := [32]byte{} + copy(seedArray[:], seed) + wg.Add(1) + + // Do it in parallel + go func(i, slot uint64, indicies []uint64, seedArray [32]byte) { + defer wg.Done() + var err error + proposerIndex, err = shuffling.ComputeProposerIndex(s.BeaconState, indices, seedArray) + if err != nil { + panic(err) + } + binary.BigEndian.PutUint32(list[i*4:(i+1)*4], uint32(proposerIndex)) + }(slot-s.Slot(), slot, indices, seedArray) + } + wg.Wait() + return list +} + +// func (s *Antiquary) dumpFullBeaconState() { +// b, err := s.currentState.EncodeSSZ(nil) +// if err != nil { +// s.logger.Error("Failed to encode full beacon state", "err", err) +// return +// } +// // just dump it in a.txt like an idiot without afero +// if err := os.WriteFile("bab.txt", b, 0644); err != nil { +// s.logger.Error("Failed to write full beacon state", "err", err) +// } +// } + +func findNearestSlotBackwards(tx kv.Tx, cfg *clparams.BeaconChainConfig, slot uint64) (uint64, error) { + canonicalRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, slot) + if err != nil { + return 0, err + } + for (canonicalRoot == (common.Hash{}) && slot > 0) || slot%cfg.SlotsPerEpoch != 0 { + slot-- + canonicalRoot, err = beacon_indicies.ReadCanonicalBlockRoot(tx, slot) + if err != nil { + return 0, err + } + } + return slot, nil +} diff --git a/cl/beacon/beacon_router_configuration/cfg.go b/cl/beacon/beacon_router_configuration/cfg.go index 75b9cabcb67..7564c305d66 100644 --- a/cl/beacon/beacon_router_configuration/cfg.go +++ b/cl/beacon/beacon_router_configuration/cfg.go @@ -1,6 +1,10 @@ package beacon_router_configuration -import "time" +import ( + "fmt" + "strings" + "time" +) type RouterConfiguration struct { Active bool @@ -14,4 +18,51 @@ type RouterConfiguration struct { ReadTimeTimeout time.Duration IdleTimeout time.Duration WriteTimeout time.Duration + + Beacon bool + Builder bool + Config bool + Debug bool + Events bool + Node bool + Validator bool + Lighthouse bool +} + +func (r *RouterConfiguration) UnwrapEndpointsList(l []string) error { + r.Active = len(l) > 0 + for _, v := range l { + // convert v to lowercase + v = strings.ToLower(v) + switch v { + case "beacon": + r.Beacon = true + case "builder": + r.Builder = true + case "config": + r.Config = true + case "debug": + r.Debug = true + case "events": + r.Events = true + case "node": + r.Node = true + case "validator": + r.Validator = true + case "lighthouse": + r.Lighthouse = true + default: + r.Active = false + r.Beacon = false + r.Builder = false + r.Config = false + r.Debug = false + r.Events = false + r.Node = false + r.Validator = false + r.Lighthouse = false + return fmt.Errorf("unknown endpoint for beacon.api: %s. known endpoints: beacon, builder, config, debug, events, node, validator, lighthouse", v) + } + } + return nil } diff --git a/cl/beacon/beaconevents/emitter.go b/cl/beacon/beaconevents/emitter.go new file mode 100644 index 00000000000..81299f9c876 --- /dev/null +++ b/cl/beacon/beaconevents/emitter.go @@ -0,0 +1,71 @@ +package beaconevents + +import ( + "sync" + + "github.com/google/uuid" + "golang.org/x/sync/errgroup" +) + +type Subscription struct { + id string + topics map[string]struct{} + cb func(topic string, item any) +} + +type EventName string + +// Emitters creates pub/sub connection +type Emitters struct { + cbs map[string]*Subscription + mu sync.RWMutex +} + +func NewEmitters() *Emitters { + return &Emitters{ + cbs: map[string]*Subscription{}, + } +} + +// publish to all subscribers. each callback is run in a separate goroutine +func (e *Emitters) Publish(s string, a any) { + // forward gossip object + e.mu.Lock() + values := make([]*Subscription, 0, len(e.cbs)) + for _, v := range e.cbs { + values = append(values, v) + } + e.mu.Unlock() + + egg := errgroup.Group{} + for idx := range values { + v := values[idx] + exec := func() error { v.cb(s, a); return nil } + if _, ok := v.topics["*"]; ok { + egg.Go(exec) + } else if _, ok := v.topics[s]; ok { + egg.Go(exec) + } + } + egg.Wait() +} + +// subscribe with callback. call the returned cancelfunc to unregister the callback +// publish will block until all callbacks for the message are resolved +func (e *Emitters) Subscribe(topics []string, cb func(topic string, item any)) (func(), error) { + subid := uuid.New().String() + sub := &Subscription{ + id: subid, + topics: map[string]struct{}{}, + cb: cb, + } + for _, v := range topics { + sub.topics[v] = struct{}{} + } + e.cbs[subid] = sub + return func() { + e.mu.Lock() + defer e.mu.Unlock() + delete(e.cbs, subid) + }, nil +} diff --git a/cl/beacon/beaconevents/emitter_test.go b/cl/beacon/beaconevents/emitter_test.go new file mode 100644 index 00000000000..5ad3ccaeee8 --- /dev/null +++ b/cl/beacon/beaconevents/emitter_test.go @@ -0,0 +1,54 @@ +package beaconevents_test + +import ( + "sync/atomic" + "testing" + + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/stretchr/testify/require" +) + +func TestEmitterSet(t *testing.T) { + e := beaconevents.NewEmitters() + var called int + e.Subscribe([]string{"set"}, func(topic string, item any) { + require.EqualValues(t, "set", topic) + require.EqualValues(t, "hello", item.(string)) + called = called + 1 + }) + e.Publish("set", "hello") + require.EqualValues(t, 1, called) +} +func TestEmitterFilters(t *testing.T) { + e := beaconevents.NewEmitters() + var a atomic.Int64 + var b atomic.Int64 + var ab atomic.Int64 + var wild atomic.Int64 + e.Subscribe([]string{"a"}, func(topic string, item any) { + require.EqualValues(t, topic, item.(string)) + a.Add(1) + }) + e.Subscribe([]string{"b"}, func(topic string, item any) { + require.EqualValues(t, topic, item.(string)) + b.Add(1) + }) + e.Subscribe([]string{"a", "b"}, func(topic string, item any) { + require.EqualValues(t, topic, item.(string)) + ab.Add(1) + }) + e.Subscribe([]string{"*"}, func(topic string, item any) { + require.EqualValues(t, topic, item.(string)) + wild.Add(1) + }) + + e.Publish("a", "a") + e.Publish("b", "b") + e.Publish("b", "b") + e.Publish("c", "c") + + require.EqualValues(t, 1, a.Load()) + require.EqualValues(t, 2, b.Load()) + require.EqualValues(t, 3, ab.Load()) + require.EqualValues(t, 4, wild.Load()) +} diff --git a/cl/beacon/beaconhttp/api.go b/cl/beacon/beaconhttp/api.go index 6bc32c58ddf..d38775093c8 100644 --- a/cl/beacon/beaconhttp/api.go +++ b/cl/beacon/beaconhttp/api.go @@ -6,38 +6,49 @@ import ( "fmt" "net/http" "reflect" + "slices" "strings" - "time" "github.com/ledgerwatch/erigon-lib/types/ssz" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/fork_graph" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" ) var _ error = EndpointError{} var _ error = (*EndpointError)(nil) type EndpointError struct { - Code int `json:"code"` - Message string `json:"message"` + Code int `json:"code"` + Message string `json:"message"` + Stacktraces []string `json:"stacktraces,omitempty"` + + err error } +var ErrorCantFindBeaconState = errors.New("Could not find beacon state") +var ErrorSszNotSupported = errors.New("This endpoint does not support SSZ response") + func WrapEndpointError(err error) *EndpointError { e := &EndpointError{} if errors.As(err, e) { return e } if errors.Is(err, fork_graph.ErrStateNotFound) { - return NewEndpointError(http.StatusNotFound, "Could not find beacon state") + return NewEndpointError(http.StatusNotFound, ErrorCantFindBeaconState) } - return NewEndpointError(http.StatusInternalServerError, err.Error()) + return NewEndpointError(http.StatusInternalServerError, err) } -func NewEndpointError(code int, message string) *EndpointError { +func NewEndpointError(code int, err error) *EndpointError { + // TODO: consider adding stack traces/debug mode ? + //b := make([]byte, 2048) + //n := runtime.Stack(b, false) + //s := string(b[:n]) return &EndpointError{ Code: code, - Message: message, + Message: err.Error(), + // Stacktraces: []string{s} + err: err, } } @@ -45,6 +56,10 @@ func (e EndpointError) Error() string { return fmt.Sprintf("Code %d: %s", e.Code, e.Message) } +func (e EndpointError) Unwrap() error { + return e.err +} + func (e *EndpointError) WriteTo(w http.ResponseWriter) { w.WriteHeader(e.Code) encErr := json.NewEncoder(w).Encode(e) @@ -69,9 +84,7 @@ func HandleEndpointFunc[T any](h EndpointHandlerFunc[T]) http.HandlerFunc { func HandleEndpoint[T any](h EndpointHandler[T]) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - start := time.Now() ans, err := h.Handle(w, r) - log.Debug("beacon api request", "endpoint", r.URL.Path, "duration", time.Since(start)) if err != nil { var endpointError *EndpointError if e, ok := err.(*EndpointError); ok { @@ -85,11 +98,16 @@ func HandleEndpoint[T any](h EndpointHandler[T]) http.HandlerFunc { // TODO: potentially add a context option to buffer these contentType := r.Header.Get("Accept") contentTypes := strings.Split(contentType, ",") + + // early return for event stream + if slices.Contains(w.Header().Values("Content-Type"), "text/event-stream") { + return + } switch { case slices.Contains(contentTypes, "application/octet-stream"): sszMarshaler, ok := any(ans).(ssz.Marshaler) if !ok { - NewEndpointError(http.StatusBadRequest, "This endpoint does not support SSZ response").WriteTo(w) + NewEndpointError(http.StatusBadRequest, ErrorSszNotSupported).WriteTo(w) return } // TODO: we should probably figure out some way to stream this in the future :) @@ -110,8 +128,10 @@ func HandleEndpoint[T any](h EndpointHandler[T]) http.HandlerFunc { } else { w.WriteHeader(200) } + case slices.Contains(contentTypes, "text/event-stream"): + return default: - http.Error(w, "content type must be application/json or application/octet-stream", http.StatusBadRequest) + http.Error(w, "content type must be application/json, application/octet-stream, or text/event-stream", http.StatusBadRequest) } }) } diff --git a/cl/beacon/beaconhttp/args.go b/cl/beacon/beaconhttp/args.go index 1701620b074..5bbb115171a 100644 --- a/cl/beacon/beaconhttp/args.go +++ b/cl/beacon/beaconhttp/args.go @@ -5,6 +5,7 @@ import ( "net/http" "regexp" "strconv" + "strings" "github.com/go-chi/chi/v5" "github.com/ledgerwatch/erigon-lib/common" @@ -168,9 +169,13 @@ func Uint64FromQueryParams(r *http.Request, name string) (*uint64, error) { // decode a list of strings from the query params func StringListFromQueryParams(r *http.Request, name string) ([]string, error) { - str := r.URL.Query().Get(name) - if str == "" { + values := r.URL.Query()[name] + if len(values) == 0 { return nil, nil } + + // Combine all values into a single string, separating by comma + str := strings.Join(values, ",") + return regexp.MustCompile(`\s*,\s*`).Split(str, -1), nil } diff --git a/cl/beacon/beaconhttp/beacon_response.go b/cl/beacon/beaconhttp/beacon_response.go index c0e340915e6..64842a9be81 100644 --- a/cl/beacon/beaconhttp/beacon_response.go +++ b/cl/beacon/beaconhttp/beacon_response.go @@ -26,6 +26,9 @@ func NewBeaconResponse(data any) *BeaconResponse { func (r *BeaconResponse) With(key string, value any) (out *BeaconResponse) { out = new(BeaconResponse) *out = *r + if out.Extra == nil { + out.Extra = make(map[string]any) + } out.Extra[key] = value return out } @@ -63,7 +66,7 @@ func (b *BeaconResponse) MarshalJSON() ([]byte, error) { o["finalized"] = *b.Finalized } if b.Version != nil { - o["version"] = *b.Version + o["version"] = clparams.ClVersionToString(*b.Version) } if b.ExecutionOptimistic != nil { o["execution_optimistic"] = *b.ExecutionOptimistic @@ -77,7 +80,7 @@ func (b *BeaconResponse) MarshalJSON() ([]byte, error) { func (b *BeaconResponse) EncodeSSZ(xs []byte) ([]byte, error) { marshaler, ok := b.Data.(ssz.Marshaler) if !ok { - return nil, NewEndpointError(http.StatusBadRequest, "This endpoint does not support SSZ response") + return nil, NewEndpointError(http.StatusBadRequest, ErrorSszNotSupported) } encoded, err := marshaler.EncodeSSZ(nil) if err != nil { diff --git a/cl/beacon/beacontest/harness.go b/cl/beacon/beacontest/harness.go index 84287f46530..0bcd8801824 100644 --- a/cl/beacon/beacontest/harness.go +++ b/cl/beacon/beacontest/harness.go @@ -241,6 +241,7 @@ func (c *Comparison) Compare(t *testing.T, aRaw, bRaw json.RawMessage, aCode, bC if len(c.Exprs) == 0 && c.Expr == "" { exprs = append(exprs, "actual_code == 200", "actual == expect") } + env, err := cel.NewEnv( cel.Variable("expect", aType), cel.Variable("actual", bType), @@ -278,6 +279,8 @@ func (c *Comparison) Compare(t *testing.T, aRaw, bRaw json.RawMessage, aCode, bC } if !assert.Equal(t, bres, true, `expr: %s`, expr) { if os.Getenv("HIDE_HARNESS_LOG") != "1" { + // b1, _ := json.Marshal(b) + // panic(string(b1)) t.Logf(`name: %s expect%d: %v actual%d: %v @@ -376,7 +379,8 @@ func (s *Source) executeRemote(ctx context.Context) (json.RawMessage, int, error q.Add(k, v) } purl.RawQuery = q.Encode() - request, err := http.NewRequest(method, purl.String(), body) + + request, err := http.NewRequest(method, strings.ReplaceAll(purl.String(), "%3F", "?"), body) if err != nil { return nil, 0, err } diff --git a/cl/beacon/handler/attestation_rewards.go b/cl/beacon/handler/attestation_rewards.go index aa823b9b76c..54e1360e968 100644 --- a/cl/beacon/handler/attestation_rewards.go +++ b/cl/beacon/handler/attestation_rewards.go @@ -2,6 +2,7 @@ package handler import ( "encoding/json" + "fmt" "io" "net/http" @@ -9,10 +10,10 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" - "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/transition/impl/eth2/statechange" "github.com/ledgerwatch/erigon/cl/utils" ) @@ -40,7 +41,7 @@ type attestationsRewardsResponse struct { TotalRewards []TotalReward `json:"total_rewards"` } -func (a *ApiHandler) getAttestationsRewards(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) PostEthV1BeaconRewardsAttestations(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -51,19 +52,19 @@ func (a *ApiHandler) getAttestationsRewards(w http.ResponseWriter, r *http.Reque epoch, err := beaconhttp.EpochFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } req := []string{} // read the entire body jsonBytes, err := io.ReadAll(r.Body) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } // parse json body request if len(jsonBytes) > 0 { if err := json.Unmarshal(jsonBytes, &req); err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } } @@ -77,7 +78,7 @@ func (a *ApiHandler) getAttestationsRewards(w http.ResponseWriter, r *http.Reque } headEpoch := headSlot / a.beaconChainCfg.SlotsPerEpoch if epoch > headEpoch { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "epoch is in the future") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("epoch is in the future")) } // Few cases to handle: // 1) finalized data @@ -85,7 +86,7 @@ func (a *ApiHandler) getAttestationsRewards(w http.ResponseWriter, r *http.Reque version := a.beaconChainCfg.GetCurrentStateVersion(epoch) // finalized data - if epoch > a.forkchoiceStore.FinalizedCheckpoint().Epoch() { + if epoch > a.forkchoiceStore.LowestAvaiableSlot()/a.beaconChainCfg.SlotsPerEpoch { minRange := epoch * a.beaconChainCfg.SlotsPerEpoch maxRange := (epoch + 1) * a.beaconChainCfg.SlotsPerEpoch var blockRoot libcommon.Hash @@ -97,60 +98,88 @@ func (a *ApiHandler) getAttestationsRewards(w http.ResponseWriter, r *http.Reque if blockRoot == (libcommon.Hash{}) { continue } - s, err := a.forkchoiceStore.GetStateAtBlockRoot(blockRoot, true) + if version == clparams.Phase0Version { + return nil, beaconhttp.NewEndpointError(http.StatusHTTPVersionNotSupported, fmt.Errorf("phase0 state is not supported when there is no antiquation")) + } + inactivityScores, err := a.forkchoiceStore.GetInactivitiesScores(blockRoot) if err != nil { return nil, err } - if s == nil { - continue - } - if s.Version() == clparams.Phase0Version { - return a.computeAttestationsRewardsForPhase0(s, filterIndicies, epoch) + if inactivityScores == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no inactivity scores found for this epoch")) } - return a.computeAttestationsRewardsForAltair(s.ValidatorSet(), s.InactivityScores(), s.PreviousEpochParticipation(), state.InactivityLeaking(s), filterIndicies, epoch) - } - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "no block found for this epoch") - } - if version == clparams.Phase0Version { - minRange := epoch * a.beaconChainCfg.SlotsPerEpoch - maxRange := (epoch + 1) * a.beaconChainCfg.SlotsPerEpoch - for i := maxRange - 1; i >= minRange; i-- { - s, err := a.stateReader.ReadHistoricalState(ctx, tx, i) + prevPartecipation, err := a.forkchoiceStore.GetPreviousPartecipationIndicies(blockRoot) if err != nil { return nil, err } - if s == nil { - continue + if prevPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no previous partecipation found for this epoch")) } - if err := s.InitBeaconState(); err != nil { + validatorSet, err := a.forkchoiceStore.GetValidatorSet(blockRoot) + if err != nil { return nil, err } - return a.computeAttestationsRewardsForPhase0(s, filterIndicies, epoch) + if validatorSet == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no validator set found for this epoch")) + } + + ok, finalizedCheckpoint, _, _ := a.forkchoiceStore.GetFinalityCheckpoints(blockRoot) + if !ok { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no finalized checkpoint found for this epoch")) + } + + return a.computeAttestationsRewardsForAltair(validatorSet, inactivityScores, prevPartecipation, a.isInactivityLeaking(epoch, finalizedCheckpoint), filterIndicies, epoch) } - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "no block found for this epoch") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no block found for this epoch")) + } + + root, err := a.findEpochRoot(tx, epoch) + if err != nil { + return nil, err + } + lastSlotPtr, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, root) + if err != nil { + return nil, err + } + if lastSlotPtr == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no block found for this epoch")) } - lastSlot := epoch*a.beaconChainCfg.SlotsPerEpoch + a.beaconChainCfg.SlotsPerEpoch - 1 + lastSlot := *lastSlotPtr + stateProgress, err := state_accessors.GetStateProcessingProgress(tx) if err != nil { return nil, err } if lastSlot > stateProgress { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "requested range is not yet processed or the node is not archivial") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("requested range is not yet processed or the node is not archivial")) + } + + epochData, err := state_accessors.ReadEpochData(tx, a.beaconChainCfg.RoundSlotToEpoch(lastSlot)) + if err != nil { + return nil, err } + validatorSet, err := a.stateReader.ReadValidatorsForHistoricalState(tx, lastSlot) if err != nil { return nil, err } + if validatorSet == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no validator set found for this epoch")) + } _, previousIdx, err := a.stateReader.ReadPartecipations(tx, lastSlot) if err != nil { return nil, err } + _, _, finalizedCheckpoint, err := state_accessors.ReadCheckpoints(tx, epoch*a.beaconChainCfg.SlotsPerEpoch) if err != nil { return nil, err } + if version == clparams.Phase0Version { + return a.computeAttestationsRewardsForPhase0(validatorSet, finalizedCheckpoint.Epoch()-epoch, epochData.TotalActiveBalance, previousIdx, a.isInactivityLeaking(epoch, finalizedCheckpoint), filterIndicies, epoch) + } inactivityScores := solid.NewUint64ListSSZ(int(a.beaconChainCfg.ValidatorRegistryLimit)) if err := a.stateReader.ReconstructUint64ListDump(tx, lastSlot, kv.InactivityScores, validatorSet.Length(), inactivityScores); err != nil { return nil, err @@ -289,9 +318,9 @@ func (a *ApiHandler) computeAttestationsRewardsForAltair(validatorSet *solid.Val } // processRewardsAndPenaltiesPhase0 process rewards and penalties for phase0 state. -func (a *ApiHandler) computeAttestationsRewardsForPhase0(s *state.CachingBeaconState, filterIndicies []uint64, epoch uint64) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) computeAttestationsRewardsForPhase0(validatorSet *solid.ValidatorSet, finalityDelay, activeBalance uint64, previousParticipation *solid.BitList, inactivityLeak bool, filterIndicies []uint64, epoch uint64) (*beaconhttp.BeaconResponse, error) { response := &attestationsRewardsResponse{} - beaconConfig := s.BeaconConfig() + beaconConfig := a.beaconChainCfg if epoch == beaconConfig.GenesisEpoch { return newBeaconResponse(response), nil } @@ -306,38 +335,33 @@ func (a *ApiHandler) computeAttestationsRewardsForPhase0(s *state.CachingBeaconS } } else { response = &attestationsRewardsResponse{ - IdealRewards: make([]IdealReward, 0, s.ValidatorLength()), - TotalRewards: make([]TotalReward, 0, s.ValidatorLength()), + IdealRewards: make([]IdealReward, 0, validatorSet.Length()), + TotalRewards: make([]TotalReward, 0, validatorSet.Length()), } } - inactivityLeak := state.InactivityLeaking(s) - rewardDenominator := s.GetTotalActiveBalance() / beaconConfig.EffectiveBalanceIncrement + rewardDenominator := activeBalance / beaconConfig.EffectiveBalanceIncrement var unslashedMatchingSourceBalanceIncrements, unslashedMatchingTargetBalanceIncrements, unslashedMatchingHeadBalanceIncrements uint64 var err error - s.ForEachValidator(func(validator solid.Validator, idx, total int) bool { - if validator.Slashed() { + + validatorSet.Range(func(i int, v solid.Validator, _ int) bool { + if v.Slashed() { return true } var previousMatchingSourceAttester, previousMatchingTargetAttester, previousMatchingHeadAttester bool + previousParticipation := cltypes.ParticipationFlags(previousParticipation.Get(i)) + previousMatchingHeadAttester = previousParticipation.HasFlag(int(beaconConfig.TimelyHeadFlagIndex)) + previousMatchingTargetAttester = previousParticipation.HasFlag(int(beaconConfig.TimelyTargetFlagIndex)) + previousMatchingSourceAttester = previousParticipation.HasFlag(int(beaconConfig.TimelySourceFlagIndex)) - if previousMatchingSourceAttester, err = s.ValidatorIsPreviousMatchingSourceAttester(idx); err != nil { - return false - } - if previousMatchingTargetAttester, err = s.ValidatorIsPreviousMatchingTargetAttester(idx); err != nil { - return false - } - if previousMatchingHeadAttester, err = s.ValidatorIsPreviousMatchingHeadAttester(idx); err != nil { - return false - } if previousMatchingSourceAttester { - unslashedMatchingSourceBalanceIncrements += validator.EffectiveBalance() + unslashedMatchingSourceBalanceIncrements += v.EffectiveBalance() } if previousMatchingTargetAttester { - unslashedMatchingTargetBalanceIncrements += validator.EffectiveBalance() + unslashedMatchingTargetBalanceIncrements += v.EffectiveBalance() } if previousMatchingHeadAttester { - unslashedMatchingHeadBalanceIncrements += validator.EffectiveBalance() + unslashedMatchingHeadBalanceIncrements += v.EffectiveBalance() } return true }) @@ -348,36 +372,34 @@ func (a *ApiHandler) computeAttestationsRewardsForPhase0(s *state.CachingBeaconS unslashedMatchingSourceBalanceIncrements /= beaconConfig.EffectiveBalanceIncrement unslashedMatchingTargetBalanceIncrements /= beaconConfig.EffectiveBalanceIncrement unslashedMatchingHeadBalanceIncrements /= beaconConfig.EffectiveBalanceIncrement + totalActiveBalanceSqrt := utils.IntegerSquareRoot(activeBalance) fn := func(index uint64, currentValidator solid.Validator) error { - baseReward, err := s.BaseReward(index) + baseReward := a.baseReward(clparams.Phase0Version, currentValidator.EffectiveBalance(), totalActiveBalanceSqrt) + if err != nil { return err } var previousMatchingSourceAttester, previousMatchingTargetAttester, previousMatchingHeadAttester bool - if previousMatchingSourceAttester, err = s.ValidatorIsPreviousMatchingSourceAttester(int(index)); err != nil { - return err - } - if previousMatchingTargetAttester, err = s.ValidatorIsPreviousMatchingTargetAttester(int(index)); err != nil { - return err - } - if previousMatchingHeadAttester, err = s.ValidatorIsPreviousMatchingHeadAttester(int(index)); err != nil { - return err - } + previousParticipation := cltypes.ParticipationFlags(previousParticipation.Get(int(index))) + previousMatchingHeadAttester = previousParticipation.HasFlag(int(beaconConfig.TimelyHeadFlagIndex)) + previousMatchingTargetAttester = previousParticipation.HasFlag(int(beaconConfig.TimelyTargetFlagIndex)) + previousMatchingSourceAttester = previousParticipation.HasFlag(int(beaconConfig.TimelySourceFlagIndex)) + totalReward := TotalReward{ValidatorIndex: int64(index)} idealReward := IdealReward{EffectiveBalance: int64(currentValidator.EffectiveBalance())} - // check inclusion delay - if !currentValidator.Slashed() && previousMatchingSourceAttester { - var attestation *solid.PendingAttestation - if attestation, err = s.ValidatorMinPreviousInclusionDelayAttestation(int(index)); err != nil { - return err - } - proposerReward := (baseReward / beaconConfig.ProposerRewardQuotient) - maxAttesterReward := baseReward - proposerReward - idealReward.InclusionDelay = int64(maxAttesterReward / attestation.InclusionDelay()) - totalReward.InclusionDelay = idealReward.InclusionDelay - } + // TODO: check inclusion delay + // if !currentValidator.Slashed() && previousMatchingSourceAttester { + // var attestation *solid.PendingAttestation + // if attestation, err = s.ValidatorMinPreviousInclusionDelayAttestation(int(index)); err != nil { + // return err + // } + // proposerReward := (baseReward / beaconConfig.ProposerRewardQuotient) + // maxAttesterReward := baseReward - proposerReward + // idealReward.InclusionDelay = int64(maxAttesterReward / attestation.InclusionDelay()) + // totalReward.InclusionDelay = idealReward.InclusionDelay + // } // if it is not eligible for rewards, then do not continue further if !(currentValidator.Active(prevEpoch) || (currentValidator.Slashed() && prevEpoch+1 < currentValidator.WithdrawableEpoch())) { response.IdealRewards = append(response.IdealRewards, idealReward) @@ -417,7 +439,7 @@ func (a *ApiHandler) computeAttestationsRewardsForPhase0(s *state.CachingBeaconS proposerReward := baseReward / beaconConfig.ProposerRewardQuotient totalReward.Inactivity = -int64(beaconConfig.BaseRewardsPerEpoch*baseReward - proposerReward) if currentValidator.Slashed() || !previousMatchingTargetAttester { - totalReward.Inactivity -= int64(currentValidator.EffectiveBalance() * state.FinalityDelay(s) / beaconConfig.InactivityPenaltyQuotient) + totalReward.Inactivity -= int64(currentValidator.EffectiveBalance() * finalityDelay / beaconConfig.InactivityPenaltyQuotient) } } totalReward.Inactivity -= int64(baseReward * missed) @@ -427,20 +449,14 @@ func (a *ApiHandler) computeAttestationsRewardsForPhase0(s *state.CachingBeaconS } if len(filterIndicies) > 0 { for _, index := range filterIndicies { - v, err := s.ValidatorForValidatorIndex(int(index)) - if err != nil { - return nil, err - } + v := validatorSet.Get(int(index)) if err := fn(index, v); err != nil { return nil, err } } } else { - for index := uint64(0); index < uint64(s.ValidatorLength()); index++ { - v, err := s.ValidatorForValidatorIndex(int(index)) - if err != nil { - return nil, err - } + for index := uint64(0); index < uint64(validatorSet.Length()); index++ { + v := validatorSet.Get(int(index)) if err := fn(index, v); err != nil { return nil, err } diff --git a/cl/beacon/handler/blobs.go b/cl/beacon/handler/blobs.go new file mode 100644 index 00000000000..8b006ec4d4a --- /dev/null +++ b/cl/beacon/handler/blobs.go @@ -0,0 +1,84 @@ +package handler + +import ( + "fmt" + "net/http" + "strconv" + + "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" +) + +var blobSidecarSSZLenght = (*cltypes.BlobSidecar)(nil).EncodingSizeSSZ() + +func (a *ApiHandler) GetEthV1BeaconBlobSidecars(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + ctx := r.Context() + tx, err := a.indiciesDB.BeginRo(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback() + + blockId, err := beaconhttp.BlockIdFromRequest(r) + if err != nil { + return nil, err + } + blockRoot, err := a.rootFromBlockId(ctx, tx, blockId) + if err != nil { + return nil, err + } + slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, blockRoot) + if err != nil { + return nil, err + } + if slot == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found")) + } + if a.caplinSnapshots != nil && *slot <= a.caplinSnapshots.FrozenBlobs() { + out, err := a.caplinSnapshots.ReadBlobSidecars(*slot) + if err != nil { + return nil, err + } + resp := solid.NewStaticListSSZ[*cltypes.BlobSidecar](696969, blobSidecarSSZLenght) + for _, v := range out { + resp.Append(v) + } + return beaconhttp.NewBeaconResponse(resp), nil + + } + out, found, err := a.blobStoage.ReadBlobSidecars(ctx, *slot, blockRoot) + if err != nil { + return nil, err + } + strIdxs, err := beaconhttp.StringListFromQueryParams(r, "indices") + if err != nil { + return nil, err + } + resp := solid.NewStaticListSSZ[*cltypes.BlobSidecar](696969, blobSidecarSSZLenght) + if !found { + return beaconhttp.NewBeaconResponse(resp), nil + } + if len(strIdxs) == 0 { + for _, v := range out { + resp.Append(v) + } + } else { + included := make(map[uint64]struct{}) + for _, idx := range strIdxs { + i, err := strconv.ParseUint(idx, 10, 64) + if err != nil { + return nil, err + } + included[i] = struct{}{} + } + for _, v := range out { + if _, ok := included[v.Index]; ok { + resp.Append(v) + } + } + } + + return beaconhttp.NewBeaconResponse(resp), nil +} diff --git a/cl/beacon/handler/block_production.go b/cl/beacon/handler/block_production.go new file mode 100644 index 00000000000..fb4ddcbfb9f --- /dev/null +++ b/cl/beacon/handler/block_production.go @@ -0,0 +1,840 @@ +package handler + +import ( + "bytes" + "context" + "encoding/hex" + "encoding/json" + "fmt" + "io" + "net/http" + "sort" + "strconv" + "sync" + "time" + + "github.com/go-chi/chi/v5" + "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/abstract" + "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/gossip" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/transition" + "github.com/ledgerwatch/erigon/cl/transition/impl/eth2" + "github.com/ledgerwatch/erigon/cl/transition/machine" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/turbo/engineapi/engine_types" + "github.com/ledgerwatch/log/v3" + "golang.org/x/exp/slices" +) + +type BlockPublishingValidation string + +const ( + BlockPublishingValidationGossip BlockPublishingValidation = "gossip" + BlockPublishingValidationConsensus BlockPublishingValidation = "consensus" + BlockPublishingValidationConsensusAndEquivocation BlockPublishingValidation = "consensus_and_equivocation" +) + +var defaultGraffitiString = "Caplin" + +func (a *ApiHandler) GetEthV1ValidatorAttestationData( + w http.ResponseWriter, + r *http.Request, +) (*beaconhttp.BeaconResponse, error) { + slot, err := beaconhttp.Uint64FromQueryParams(r, "slot") + if err != nil { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) + } + committeeIndex, err := beaconhttp.Uint64FromQueryParams(r, "committee_index") + if err != nil { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) + } + if slot == nil || committeeIndex == nil { + return nil, beaconhttp.NewEndpointError( + http.StatusBadRequest, + fmt.Errorf("slot and committee_index url params are required"), + ) + } + headState := a.syncedData.HeadState() + if headState == nil { + return nil, beaconhttp.NewEndpointError( + http.StatusServiceUnavailable, + fmt.Errorf("beacon node is still syncing"), + ) + } + + attestationData, err := a.attestationProducer.ProduceAndCacheAttestationData( + headState, + *slot, + *committeeIndex, + ) + if err != nil { + return nil, beaconhttp.NewEndpointError(http.StatusInternalServerError, err) + } + return newBeaconResponse(attestationData), nil +} + +func (a *ApiHandler) GetEthV3ValidatorBlock( + w http.ResponseWriter, + r *http.Request, +) (*beaconhttp.BeaconResponse, error) { + ctx := r.Context() + // parse request data + + randaoRevealString := r.URL.Query().Get("randao_reveal") + var randaoReveal common.Bytes96 + if err := randaoReveal.UnmarshalText([]byte(randaoRevealString)); err != nil { + return nil, beaconhttp.NewEndpointError( + http.StatusBadRequest, + fmt.Errorf("invalid randao_reveal: %v", err), + ) + } + if r.URL.Query().Has("skip_randao_verification") { + randaoReveal = common.Bytes96{0xc0} // infinity bls signature + } + graffiti := libcommon.HexToHash(r.URL.Query().Get("graffiti")) + if !r.URL.Query().Has("graffiti") { + graffiti = libcommon.HexToHash(hex.EncodeToString([]byte(defaultGraffitiString))) + } + + tx, err := a.indiciesDB.BeginRo(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback() + + targetSlotStr := chi.URLParam(r, "slot") + targetSlot, err := strconv.ParseUint(targetSlotStr, 10, 64) + if err != nil { + return nil, beaconhttp.NewEndpointError( + http.StatusBadRequest, + fmt.Errorf("invalid slot: %v", err), + ) + } + + s := a.syncedData.HeadState() + if s == nil { + return nil, beaconhttp.NewEndpointError( + http.StatusServiceUnavailable, + fmt.Errorf("node is syncing"), + ) + } + + baseBlockRoot, err := s.BlockRoot() + if err != nil { + return nil, err + } + + sourceBlock, err := a.blockReader.ReadBlockByRoot(ctx, tx, baseBlockRoot) + if err != nil { + return nil, err + } + if sourceBlock == nil { + return nil, beaconhttp.NewEndpointError( + http.StatusNotFound, + fmt.Errorf("block not found %x", baseBlockRoot), + ) + } + baseState, err := a.forkchoiceStore.GetStateAtBlockRoot( + baseBlockRoot, + true, + ) // we start the block production from this state + if err != nil { + return nil, err + } + if baseState == nil { + return nil, beaconhttp.NewEndpointError( + http.StatusNotFound, + fmt.Errorf("state not found %x", baseBlockRoot), + ) + } + if err := transition.DefaultMachine.ProcessSlots(baseState, targetSlot); err != nil { + return nil, err + } + + beaconBody, executionValue, err := a.produceBeaconBody( + ctx, + 3, + sourceBlock.Block, + baseState, + targetSlot, + randaoReveal, + graffiti, + ) + if err != nil { + return nil, err + } + + proposerIndex, err := baseState.GetBeaconProposerIndex() + if err != nil { + return nil, err + } + + rewardsCollector := ð2.BlockRewardsCollector{} + block := &cltypes.BeaconBlock{ + Slot: targetSlot, + ProposerIndex: proposerIndex, + ParentRoot: baseBlockRoot, + Body: beaconBody, + } + log.Info( + "BlockProduction: Computing HashSSZ block", + "slot", + targetSlot, + "execution_value", + executionValue, + "proposerIndex", + proposerIndex, + ) + + // compute the state root now + if err := machine.ProcessBlock(transition.DefaultMachine, baseState, &cltypes.SignedBeaconBlock{Block: block}); err != nil { + return nil, err + } + block.StateRoot, err = baseState.HashSSZ() + if err != nil { + return nil, err + } + consensusValue := rewardsCollector.Attestations + rewardsCollector.ProposerSlashings + rewardsCollector.AttesterSlashings + rewardsCollector.SyncAggregate + isSSZBlinded := false + a.setupHeaderReponseForBlockProduction( + w, + block.Version(), + isSSZBlinded, + executionValue, + consensusValue, + ) + + return newBeaconResponse(block). + With("execution_payload_blinded", isSSZBlinded). + With("execution_payload_value", strconv.FormatUint(executionValue, 10)). + With("consensus_block_value", strconv.FormatUint(consensusValue, 10)), nil +} + +func (a *ApiHandler) produceBeaconBody( + ctx context.Context, + apiVersion int, + baseBlock *cltypes.BeaconBlock, + baseState *state.CachingBeaconState, + targetSlot uint64, + randaoReveal common.Bytes96, + graffiti common.Hash, +) (*cltypes.BeaconBody, uint64, error) { + if targetSlot <= baseBlock.Slot { + return nil, 0, fmt.Errorf( + "target slot %d must be greater than base block slot %d", + targetSlot, + baseBlock.Slot, + ) + } + var wg sync.WaitGroup + stateVersion := a.beaconChainCfg.GetCurrentStateVersion( + targetSlot / a.beaconChainCfg.SlotsPerEpoch, + ) + beaconBody := cltypes.NewBeaconBody(&clparams.MainnetBeaconConfig) + // Setup body. + beaconBody.RandaoReveal = randaoReveal + beaconBody.Graffiti = graffiti + beaconBody.Version = stateVersion + + // Build execution payload + latestExecutionPayload := baseState.LatestExecutionPayloadHeader() + head := latestExecutionPayload.BlockHash + finalizedHash := a.forkchoiceStore.GetEth1Hash(baseState.FinalizedCheckpoint().BlockRoot()) + if finalizedHash == (libcommon.Hash{}) { + finalizedHash = head // probably fuck up fcu for EL but not a big deal. + } + proposerIndex, err := baseState.GetBeaconProposerIndexForSlot(targetSlot) + if err != nil { + return nil, 0, err + } + currEpoch := a.ethClock.GetCurrentEpoch() + random := baseState.GetRandaoMixes(currEpoch) + + var executionPayload *cltypes.Eth1Block + var executionValue uint64 + + blockRoot, err := baseBlock.HashSSZ() + if err != nil { + return nil, 0, err + } + // Process the execution data in a thread. + wg.Add(1) + go func() { + defer wg.Done() + timeoutForBlockBuilding := 2 * time.Second // keep asking for 2 seconds for block + retryTime := 10 * time.Millisecond + secsDiff := (targetSlot - baseBlock.Slot) * a.beaconChainCfg.SecondsPerSlot + feeRecipient, _ := a.validatorParams.GetFeeRecipient(proposerIndex) + var withdrawals []*types.Withdrawal + clWithdrawals := state.ExpectedWithdrawals( + baseState, + targetSlot/a.beaconChainCfg.SlotsPerEpoch, + ) + for _, w := range clWithdrawals { + withdrawals = append(withdrawals, &types.Withdrawal{ + Index: w.Index, + Amount: w.Amount, + Validator: w.Validator, + Address: w.Address, + }) + } + + idBytes, err := a.engine.ForkChoiceUpdate( + ctx, + finalizedHash, + head, + &engine_types.PayloadAttributes{ + Timestamp: hexutil.Uint64(latestExecutionPayload.Time + secsDiff), + PrevRandao: random, + SuggestedFeeRecipient: feeRecipient, + Withdrawals: withdrawals, + ParentBeaconBlockRoot: (*libcommon.Hash)(&blockRoot), + }, + ) + if err != nil { + log.Error("BlockProduction: Failed to get payload id", "err", err) + return + } + // Keep requesting block until it's ready + stopTimer := time.NewTimer(timeoutForBlockBuilding) + ticker := time.NewTicker(retryTime) + defer stopTimer.Stop() + defer ticker.Stop() + for { + select { + case <-stopTimer.C: + return + case <-ticker.C: + payload, bundles, blockValue, err := a.engine.GetAssembledBlock(ctx, idBytes) + if err != nil { + log.Error("BlockProduction: Failed to get payload", "err", err) + continue + } + if payload == nil { + continue + } + // Determine block value + if blockValue == nil { + executionValue = 0 + } else { + executionValue = blockValue.Uint64() + } + + if len(bundles.Blobs) != len(bundles.Proofs) || + len(bundles.Commitments) != len(bundles.Proofs) { + log.Error("BlockProduction: Invalid bundle") + return + } + for i := range bundles.Blobs { + if len(bundles.Commitments[i]) != length.Bytes48 { + log.Error("BlockProduction: Invalid commitment length") + return + } + if len(bundles.Proofs[i]) != length.Bytes48 { + log.Error("BlockProduction: Invalid commitment length") + return + } + if len(bundles.Blobs[i]) != int(cltypes.BYTES_PER_BLOB) { + log.Error("BlockProduction: Invalid blob length") + return + } + // add the bundle to recently produced blobs + a.blobBundles.Add(libcommon.Bytes48(bundles.Commitments[i]), BlobBundle{ + Blob: (*cltypes.Blob)(bundles.Blobs[i]), + KzgProof: libcommon.Bytes48(bundles.Proofs[i]), + Commitment: libcommon.Bytes48(bundles.Commitments[i]), + }) + // Assemble the KZG commitments list + var c cltypes.KZGCommitment + copy(c[:], bundles.Commitments[i]) + beaconBody.BlobKzgCommitments.Append(&c) + } + // Setup executionPayload + executionPayload = cltypes.NewEth1Block(beaconBody.Version, a.beaconChainCfg) + executionPayload.BlockHash = payload.BlockHash + executionPayload.ParentHash = payload.ParentHash + executionPayload.StateRoot = payload.StateRoot + executionPayload.ReceiptsRoot = payload.ReceiptsRoot + executionPayload.LogsBloom = payload.LogsBloom + executionPayload.BlockNumber = payload.BlockNumber + executionPayload.GasLimit = payload.GasLimit + executionPayload.GasUsed = payload.GasUsed + executionPayload.Time = payload.Time + executionPayload.Extra = payload.Extra + executionPayload.BlobGasUsed = payload.BlobGasUsed + executionPayload.ExcessBlobGas = payload.ExcessBlobGas + executionPayload.BaseFeePerGas = payload.BaseFeePerGas + executionPayload.BlockHash = payload.BlockHash + executionPayload.FeeRecipient = payload.FeeRecipient + executionPayload.PrevRandao = payload.PrevRandao + // Reset the limit of withdrawals + executionPayload.Withdrawals = solid.NewStaticListSSZ[*cltypes.Withdrawal]( + int(a.beaconChainCfg.MaxWithdrawalsPerPayload), + 44, + ) + payload.Withdrawals.Range( + func(index int, value *cltypes.Withdrawal, length int) bool { + executionPayload.Withdrawals.Append(value) + return true + }, + ) + executionPayload.Transactions = payload.Transactions + + return + } + } + }() + // process the sync aggregate in parallel + wg.Add(1) + go func() { + defer wg.Done() + beaconBody.SyncAggregate, err = a.syncMessagePool.GetSyncAggregate(targetSlot-1, blockRoot) + if err != nil { + log.Error("BlockProduction: Failed to get sync aggregate", "err", err) + } + }() + // Process operations all in parallel with each other. + wg.Add(1) + go func() { + defer wg.Done() + beaconBody.AttesterSlashings, beaconBody.ProposerSlashings, beaconBody.VoluntaryExits, beaconBody.ExecutionChanges = a.getBlockOperations( + baseState, + targetSlot, + ) + beaconBody.Attestations = a.findBestAttestationsForBlockProduction(baseState) + }() + + wg.Wait() + if executionPayload == nil { + return nil, 0, fmt.Errorf("failed to produce execution payload") + } + beaconBody.ExecutionPayload = executionPayload + return beaconBody, executionValue, nil +} + +func (a *ApiHandler) getBlockOperations(s *state.CachingBeaconState, targetSlot uint64) ( + *solid.ListSSZ[*cltypes.AttesterSlashing], + *solid.ListSSZ[*cltypes.ProposerSlashing], + *solid.ListSSZ[*cltypes.SignedVoluntaryExit], + *solid.ListSSZ[*cltypes.SignedBLSToExecutionChange]) { + + attesterSlashings := solid.NewDynamicListSSZ[*cltypes.AttesterSlashing]( + int(a.beaconChainCfg.MaxAttesterSlashings), + ) + slashedIndicies := []uint64{} + // AttesterSlashings +AttLoop: + for _, slashing := range a.operationsPool.AttesterSlashingsPool.Raw() { + idxs := slashing.Attestation_1.AttestingIndices + rawIdxs := []uint64{} + for i := 0; i < idxs.Length(); i++ { + currentValidatorIndex := idxs.Get(i) + if slices.Contains(slashedIndicies, currentValidatorIndex) || slices.Contains(rawIdxs, currentValidatorIndex) { + continue AttLoop + } + v := s.ValidatorSet().Get(int(currentValidatorIndex)) + if !v.IsSlashable(targetSlot / a.beaconChainCfg.SlotsPerEpoch) { + continue AttLoop + } + rawIdxs = append(rawIdxs, currentValidatorIndex) + } + slashedIndicies = append(slashedIndicies, rawIdxs...) + attesterSlashings.Append(slashing) + if attesterSlashings.Len() >= int(a.beaconChainCfg.MaxAttesterSlashings) { + break + } + } + // ProposerSlashings + proposerSlashings := solid.NewStaticListSSZ[*cltypes.ProposerSlashing]( + int(a.beaconChainCfg.MaxProposerSlashings), + 416, + ) + for _, slashing := range a.operationsPool.ProposerSlashingsPool.Raw() { + proposerIndex := slashing.Header1.Header.ProposerIndex + if slices.Contains(slashedIndicies, proposerIndex) { + continue + } + v := s.ValidatorSet().Get(int(proposerIndex)) + if !v.IsSlashable(targetSlot / a.beaconChainCfg.SlotsPerEpoch) { + continue + } + proposerSlashings.Append(slashing) + slashedIndicies = append(slashedIndicies, proposerIndex) + if proposerSlashings.Len() >= int(a.beaconChainCfg.MaxProposerSlashings) { + break + } + } + // Voluntary Exits + voluntaryExits := solid.NewStaticListSSZ[*cltypes.SignedVoluntaryExit]( + int(a.beaconChainCfg.MaxVoluntaryExits), + 112, + ) + for _, exit := range a.operationsPool.VoluntaryExitsPool.Raw() { + if slices.Contains(slashedIndicies, exit.VoluntaryExit.ValidatorIndex) { + continue + } + if err := eth2.IsVoluntaryExitApplicable(s, exit.VoluntaryExit); err != nil { + continue // Not applicable right now, skip. + } + voluntaryExits.Append(exit) + slashedIndicies = append(slashedIndicies, exit.VoluntaryExit.ValidatorIndex) + if voluntaryExits.Len() >= int(a.beaconChainCfg.MaxVoluntaryExits) { + break + } + } + // BLS Executions Changes + blsToExecutionChanges := solid.NewStaticListSSZ[*cltypes.SignedBLSToExecutionChange]( + int(a.beaconChainCfg.MaxBlsToExecutionChanges), + 172, + ) + for _, blsExecutionChange := range a.operationsPool.BLSToExecutionChangesPool.Raw() { + if slices.Contains(slashedIndicies, blsExecutionChange.Message.ValidatorIndex) { + continue + } + if blsExecutionChange.Message.ValidatorIndex >= uint64(s.ValidatorLength()) { + continue + } + wc := s.ValidatorSet(). + Get(int(blsExecutionChange.Message.ValidatorIndex)). + WithdrawalCredentials() + // Check the validator's withdrawal credentials prefix. + if wc[0] != byte(a.beaconChainCfg.ETH1AddressWithdrawalPrefixByte) { + continue + } + + // Check the validator's withdrawal credentials against the provided message. + hashedFrom := utils.Sha256(blsExecutionChange.Message.From[:]) + if !bytes.Equal(hashedFrom[1:], wc[1:]) { + continue + } + blsToExecutionChanges.Append(blsExecutionChange) + slashedIndicies = append(slashedIndicies, blsExecutionChange.Message.ValidatorIndex) + } + return attesterSlashings, proposerSlashings, voluntaryExits, blsToExecutionChanges +} + +func (a *ApiHandler) setupHeaderReponseForBlockProduction( + w http.ResponseWriter, + consensusVersion clparams.StateVersion, + blinded bool, + executionBlockValue, consensusBlockValue uint64, +) { + w.Header().Set("Eth-Execution-Payload-Value", strconv.FormatUint(executionBlockValue, 10)) + w.Header().Set("Eth-Consensus-Block-Value", strconv.FormatUint(consensusBlockValue, 10)) + w.Header().Set("Eth-Consensus-Version", clparams.ClVersionToString(consensusVersion)) + w.Header().Set("Eth-Execution-Payload-Blinded", strconv.FormatBool(blinded)) +} + +func (a *ApiHandler) PostEthV1BeaconBlocks(w http.ResponseWriter, r *http.Request) { + a.postBeaconBlocks(w, r, 1) +} + +func (a *ApiHandler) PostEthV2BeaconBlocks(w http.ResponseWriter, r *http.Request) { + a.postBeaconBlocks(w, r, 2) +} + +func (a *ApiHandler) postBeaconBlocks(w http.ResponseWriter, r *http.Request, apiVersion int) { + ctx := r.Context() + version, err := a.parseEthConsensusVersion(r.Header.Get("Eth-Consensus-Version"), apiVersion) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + validation := a.parseBlockPublishingValidation(w, r, apiVersion) + // Decode the block + block, err := a.parseRequestBeaconBlock(version, r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + _ = validation + + if err := a.broadcastBlock(ctx, block); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusOK) + +} + +func (a *ApiHandler) parseEthConsensusVersion( + str string, + apiVersion int, +) (clparams.StateVersion, error) { + if str == "" && apiVersion == 2 { + return 0, fmt.Errorf("Eth-Consensus-Version header is required") + } + if str == "" && apiVersion == 1 { + currentEpoch := a.ethClock.GetCurrentEpoch() + return a.beaconChainCfg.GetCurrentStateVersion(currentEpoch), nil + } + return clparams.StringToClVersion(str) +} + +func (a *ApiHandler) parseBlockPublishingValidation( + w http.ResponseWriter, + r *http.Request, + apiVersion int, +) BlockPublishingValidation { + str := r.URL.Query().Get("broadcast_validation") + if apiVersion == 1 || str == string(BlockPublishingValidationGossip) { + return BlockPublishingValidationGossip + } + // fall to consensus anyway. equivocation is not supported yet. + return BlockPublishingValidationConsensus +} + +func (a *ApiHandler) parseRequestBeaconBlock( + version clparams.StateVersion, + r *http.Request, +) (*cltypes.SignedBeaconBlock, error) { + block := cltypes.NewSignedBeaconBlock(a.beaconChainCfg) + block.Block.Body.Version = version + // check content type + if r.Header.Get("Content-Type") == "application/json" { + return block, json.NewDecoder(r.Body).Decode(block) + } + octect, err := io.ReadAll(r.Body) + if err != nil { + return nil, err + } + if err := block.DecodeSSZ(octect, int(version)); err != nil { + return nil, err + } + return block, nil +} + +func (a *ApiHandler) broadcastBlock(ctx context.Context, blk *cltypes.SignedBeaconBlock) error { + blkSSZ, err := blk.EncodeSSZ(nil) + if err != nil { + return err + } + blobsSidecarsBytes := make([][]byte, 0, blk.Block.Body.BlobKzgCommitments.Len()) + blobsSidecars := make([]*cltypes.BlobSidecar, 0, blk.Block.Body.BlobKzgCommitments.Len()) + + header := blk.SignedBeaconBlockHeader() + + if blk.Version() >= clparams.DenebVersion { + for i := 0; i < blk.Block.Body.BlobKzgCommitments.Len(); i++ { + blobSidecar := &cltypes.BlobSidecar{} + commitment := blk.Block.Body.BlobKzgCommitments.Get(i) + if commitment == nil { + return fmt.Errorf("missing commitment %d", i) + } + bundle, has := a.blobBundles.Get(libcommon.Bytes48(*commitment)) + if !has { + return fmt.Errorf("missing blob bundle for commitment %x", commitment) + } + // Assemble inclusion proof + inclusionProofRaw, err := blk.Block.Body.KzgCommitmentMerkleProof(i) + if err != nil { + return err + } + blobSidecar.CommitmentInclusionProof = solid.NewHashVector(cltypes.CommitmentBranchSize) + for i, h := range inclusionProofRaw { + blobSidecar.CommitmentInclusionProof.Set(i, h) + } + blobSidecar.Index = uint64(i) + blobSidecar.Blob = *bundle.Blob + blobSidecar.KzgCommitment = bundle.Commitment + blobSidecar.KzgProof = bundle.KzgProof + blobSidecar.SignedBlockHeader = header + blobSidecarSSZ, err := blobSidecar.EncodeSSZ(nil) + if err != nil { + return err + } + blobsSidecarsBytes = append(blobsSidecarsBytes, blobSidecarSSZ) + blobsSidecars = append(blobsSidecars, blobSidecar) + } + } + go func() { + if err := a.storeBlockAndBlobs(context.Background(), blk, blobsSidecars); err != nil { + log.Error("BlockPublishing: Failed to store block and blobs", "err", err) + } + }() + + log.Info( + "BlockPublishing: publishing block and blobs", + "slot", + blk.Block.Slot, + "blobs", + len(blobsSidecars), + ) + // Broadcast the block and its blobs + if _, err := a.sentinel.PublishGossip(ctx, &sentinel.GossipData{ + Name: gossip.TopicNameBeaconBlock, + Data: blkSSZ, + }); err != nil { + log.Error("Failed to publish block", "err", err) + return err + } + for idx, blob := range blobsSidecarsBytes { + idx64 := uint64(idx) + if _, err := a.sentinel.PublishGossip(ctx, &sentinel.GossipData{ + Name: gossip.TopicNamePrefixBlobSidecar, + Data: blob, + SubnetId: &idx64, + }); err != nil { + log.Error("Failed to publish blob sidecar", "err", err) + return err + } + } + return nil +} + +func (a *ApiHandler) storeBlockAndBlobs( + ctx context.Context, + block *cltypes.SignedBeaconBlock, + sidecars []*cltypes.BlobSidecar, +) error { + blockRoot, err := block.Block.HashSSZ() + if err != nil { + return err + } + if err := a.blobStoage.WriteBlobSidecars(ctx, blockRoot, sidecars); err != nil { + return err + } + if err := a.indiciesDB.Update(ctx, func(tx kv.RwTx) error { + if err := beacon_indicies.WriteHighestFinalized(tx, a.forkchoiceStore.FinalizedSlot()); err != nil { + return err + } + return beacon_indicies.WriteBeaconBlockAndIndicies(ctx, tx, block, false) + }); err != nil { + return err + } + + return a.forkchoiceStore.OnBlock(ctx, block, true, false, false) +} + +type attestationCandidate struct { + attestation *solid.Attestation + reward uint64 +} + +func (a *ApiHandler) findBestAttestationsForBlockProduction( + s abstract.BeaconState, +) *solid.ListSSZ[*solid.Attestation] { + + ret := solid.NewDynamicListSSZ[*solid.Attestation](int(a.beaconChainCfg.MaxAttestations)) + attestationCandidates := []attestationCandidate{} + + for _, attestation := range a.operationsPool.AttestationsPool.Raw() { + if err := eth2.IsAttestationApplicable(s, attestation); err != nil { + continue // attestation not applicable skip + } + expectedReward, err := computeAttestationReward(s, attestation) + if err != nil { + log.Warn( + "[Block Production] Could not compute expected attestation reward", + "reason", + err, + ) + continue + } + if expectedReward == 0 { + continue + } + attestationCandidates = append(attestationCandidates, attestationCandidate{ + attestation: attestation, + reward: expectedReward, + }) + } + // Rank by reward in descending order. + sort.Slice(attestationCandidates, func(i, j int) bool { + return attestationCandidates[i].reward > attestationCandidates[j].reward + }) + // Some aggregates can be supersets of existing ones so let's filter out the supersets + // this MAP is HashTreeRoot(AttestationData) => AggregationBits + aggregationBitsByAttestationData := make(map[libcommon.Hash][]byte) + for _, candidate := range attestationCandidates { + // Check if it is a superset of a pre-included attestation with higher reward + attestationDataRoot, err := candidate.attestation.AttestantionData().HashSSZ() + if err != nil { + log.Warn("[Block Production] Cannot compute attestation data root", "err", err) + continue + } + currAggregationBits, exists := aggregationBitsByAttestationData[attestationDataRoot] + if exists { + if utils.IsNonStrictSupersetBitlist( + currAggregationBits, + candidate.attestation.AggregationBits(), + ) { + continue + } + utils.MergeBitlists(currAggregationBits, candidate.attestation.AggregationBits()) + } else { + currAggregationBits = candidate.attestation.AggregationBits() + } + // Update the currently built superset + aggregationBitsByAttestationData[attestationDataRoot] = currAggregationBits + + ret.Append(candidate.attestation) + if ret.Len() >= int(a.beaconChainCfg.MaxAttestations) { + break + } + } + return ret +} + +// computeAttestationReward computes the reward for a specific attestation. +func computeAttestationReward( + s abstract.BeaconState, + attestation *solid.Attestation) (uint64, error) { + + baseRewardPerIncrement := s.BaseRewardPerIncrement() + data := attestation.AttestantionData() + currentEpoch := state.Epoch(s) + stateSlot := s.Slot() + beaconConfig := s.BeaconConfig() + + participationFlagsIndicies, err := s.GetAttestationParticipationFlagIndicies( + data, + stateSlot-data.Slot(), + false, + ) + if err != nil { + return 0, err + } + attestingIndicies, err := s.GetAttestingIndicies(data, attestation.AggregationBits(), true) + if err != nil { + return 0, err + } + var proposerRewardNumerator uint64 + + isCurrentEpoch := data.Target().Epoch() == currentEpoch + + for _, attesterIndex := range attestingIndicies { + val, err := s.ValidatorEffectiveBalance(int(attesterIndex)) + if err != nil { + return 0, err + } + + baseReward := (val / beaconConfig.EffectiveBalanceIncrement) * baseRewardPerIncrement + for flagIndex, weight := range beaconConfig.ParticipationWeights() { + flagParticipation := s.EpochParticipationForValidatorIndex( + isCurrentEpoch, + int(attesterIndex), + ) + if !slices.Contains(participationFlagsIndicies, uint8(flagIndex)) || + flagParticipation.HasFlag(flagIndex) { + continue + } + proposerRewardNumerator += baseReward * weight + } + } + proposerRewardDenominator := (beaconConfig.WeightDenominator - beaconConfig.ProposerWeight) * beaconConfig.WeightDenominator / beaconConfig.ProposerWeight + reward := proposerRewardNumerator / proposerRewardDenominator + return reward, nil +} diff --git a/cl/beacon/handler/blocks.go b/cl/beacon/handler/blocks.go index 2fd7d38eebf..183987c0445 100644 --- a/cl/beacon/handler/blocks.go +++ b/cl/beacon/handler/blocks.go @@ -40,7 +40,7 @@ func (a *ApiHandler) rootFromBlockId(ctx context.Context, tx kv.Tx, blockId *bea return libcommon.Hash{}, err } if root == (libcommon.Hash{}) { - return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusNotFound, "genesis block not found") + return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("genesis block not found")) } case blockId.GetSlot() != nil: root, err = beacon_indicies.ReadCanonicalBlockRoot(tx, *blockId.GetSlot()) @@ -48,18 +48,18 @@ func (a *ApiHandler) rootFromBlockId(ctx context.Context, tx kv.Tx, blockId *bea return libcommon.Hash{}, err } if root == (libcommon.Hash{}) { - return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("block not found %d", *blockId.GetSlot())) + return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found %d", *blockId.GetSlot())) } case blockId.GetRoot() != nil: // first check if it exists root = *blockId.GetRoot() default: - return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusInternalServerError, "cannot parse block id") + return libcommon.Hash{}, beaconhttp.NewEndpointError(http.StatusInternalServerError, fmt.Errorf("cannot parse block id")) } return } -func (a *ApiHandler) getBlock(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconBlock(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { @@ -81,7 +81,7 @@ func (a *ApiHandler) getBlock(w http.ResponseWriter, r *http.Request) (*beaconht return nil, err } if blk == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("block not found %x", root)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found %x", root)) } // Check if the block is canonical var canonicalRoot libcommon.Hash @@ -94,7 +94,7 @@ func (a *ApiHandler) getBlock(w http.ResponseWriter, r *http.Request) (*beaconht WithVersion(blk.Version()), nil } -func (a *ApiHandler) getBlindedBlock(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEthV1BlindedBlock(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { @@ -116,7 +116,7 @@ func (a *ApiHandler) getBlindedBlock(w http.ResponseWriter, r *http.Request) (*b return nil, err } if blk == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("block not found %x", root)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found %x", root)) } // Check if the block is canonical var canonicalRoot libcommon.Hash @@ -133,7 +133,7 @@ func (a *ApiHandler) getBlindedBlock(w http.ResponseWriter, r *http.Request) (*b WithVersion(blk.Version()), nil } -func (a *ApiHandler) getBlockAttestations(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconBlockAttestations(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { @@ -142,7 +142,7 @@ func (a *ApiHandler) getBlockAttestations(w http.ResponseWriter, r *http.Request defer tx.Rollback() blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } root, err := a.rootFromBlockId(ctx, tx, blockId) if err != nil { @@ -153,7 +153,7 @@ func (a *ApiHandler) getBlockAttestations(w http.ResponseWriter, r *http.Request return nil, err } if blk == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("block not found %x", root)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found %x", root)) } // Check if the block is canonical canonicalRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, blk.Block.Slot) @@ -165,7 +165,7 @@ func (a *ApiHandler) getBlockAttestations(w http.ResponseWriter, r *http.Request WithVersion(blk.Version()), nil } -func (a *ApiHandler) getBlockRoot(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconBlockRoot(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { @@ -174,7 +174,7 @@ func (a *ApiHandler) getBlockRoot(w http.ResponseWriter, r *http.Request) (*beac defer tx.Rollback() blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } root, err := a.rootFromBlockId(ctx, tx, blockId) if err != nil { @@ -186,7 +186,7 @@ func (a *ApiHandler) getBlockRoot(w http.ResponseWriter, r *http.Request) (*beac return nil, err } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("block not found %x", root)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found %x", root)) } // Check if the block is canonical var canonicalRoot libcommon.Hash diff --git a/cl/beacon/handler/builder.go b/cl/beacon/handler/builder.go index 94166e021c0..6e2f7ab7f61 100644 --- a/cl/beacon/handler/builder.go +++ b/cl/beacon/handler/builder.go @@ -1,6 +1,7 @@ package handler import ( + "fmt" "net/http" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -10,7 +11,7 @@ import ( "github.com/ledgerwatch/erigon/cl/phase1/core/state" ) -func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWit(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWithdrawals(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -21,35 +22,36 @@ func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWit(w http.ResponseWriter, r blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } root, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, root) if err != nil { return nil, err } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "state not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("state not found")) } if a.beaconChainCfg.GetCurrentStateVersion(*slot/a.beaconChainCfg.SlotsPerEpoch) < clparams.CapellaVersion { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, "the specified state is not a capella state") + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("the specified state is not a capella state")) } headRoot, _, err := a.forkchoiceStore.GetHead() if err != nil { return nil, err } + if a.syncedData.Syncing() { + return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, fmt.Errorf("beacon node is syncing")) + } if root == headRoot { - s, cn := a.syncedData.HeadState() - defer cn() - return newBeaconResponse(state.ExpectedWithdrawals(s)).WithFinalized(false), nil + return newBeaconResponse(state.ExpectedWithdrawals(a.syncedData.HeadState(), state.Epoch(a.syncedData.HeadState()))).WithFinalized(false), nil } lookAhead := 1024 for currSlot := *slot + 1; currSlot < *slot+uint64(lookAhead); currSlot++ { if currSlot > a.syncedData.HeadSlot() { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "state not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("state not found")) } blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, currSlot) if err != nil { @@ -65,5 +67,5 @@ func (a *ApiHandler) GetEth1V1BuilderStatesExpectedWit(w http.ResponseWriter, r return newBeaconResponse(blk.Block.Body.ExecutionPayload.Withdrawals).WithFinalized(false), nil } - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "state not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("state not found")) } diff --git a/cl/beacon/handler/committees.go b/cl/beacon/handler/committees.go index c7e527fbe76..df2a052c7f8 100644 --- a/cl/beacon/handler/committees.go +++ b/cl/beacon/handler/committees.go @@ -42,12 +42,12 @@ func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*bea defer tx.Rollback() blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } blockRoot, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } slotPtr, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, blockRoot) @@ -55,7 +55,7 @@ func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*bea return nil, err } if slotPtr == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read block slot: %x", blockRoot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read block slot: %x", blockRoot)) } slot := *slotPtr epoch := slot / a.beaconChainCfg.SlotsPerEpoch @@ -64,19 +64,18 @@ func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*bea } // check if the filter (if any) is in the epoch if slotFilter != nil && !(epoch*a.beaconChainCfg.SlotsPerEpoch <= *slotFilter && *slotFilter < (epoch+1)*a.beaconChainCfg.SlotsPerEpoch) { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("slot %d is not in epoch %d", *slotFilter, epoch)) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("slot %d is not in epoch %d", *slotFilter, epoch)) } resp := make([]*committeeResponse, 0, a.beaconChainCfg.SlotsPerEpoch*a.beaconChainCfg.MaxCommitteesPerSlot) isFinalized := slot <= a.forkchoiceStore.FinalizedSlot() if a.forkchoiceStore.LowestAvaiableSlot() <= slot { // non-finality case - s, cn := a.syncedData.HeadState() - defer cn() + s := a.syncedData.HeadState() if s == nil { - return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, "node is syncing") + return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, fmt.Errorf("node is syncing")) } if epoch > state.Epoch(s)+1 { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("epoch %d is too far in the future", epoch)) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("epoch %d is too far in the future", epoch)) } // get active validator indicies committeeCount := s.CommitteeCount(epoch) @@ -119,7 +118,7 @@ func (a *ApiHandler) getCommittees(w http.ResponseWriter, r *http.Request) (*bea mixPosition := (epoch + a.beaconChainCfg.EpochsPerHistoricalVector - a.beaconChainCfg.MinSeedLookahead - 1) % a.beaconChainCfg.EpochsPerHistoricalVector mix, err := a.stateReader.ReadRandaoMixBySlotAndIndex(tx, epoch*a.beaconChainCfg.SlotsPerEpoch, mixPosition) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read randao mix: %v", err)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read randao mix: %v", err)) } for currSlot := epoch * a.beaconChainCfg.SlotsPerEpoch; currSlot < (epoch+1)*a.beaconChainCfg.SlotsPerEpoch; currSlot++ { diff --git a/cl/beacon/handler/data_test.go b/cl/beacon/handler/data_test.go index 3b4276e4c8e..aed164609bc 100644 --- a/cl/beacon/handler/data_test.go +++ b/cl/beacon/handler/data_test.go @@ -1,4 +1,4 @@ -package handler_test +package handler import ( "embed" @@ -10,7 +10,10 @@ import ( "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/beacon/beacontest" "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/lightclient_utils" "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" "github.com/ledgerwatch/log/v3" "github.com/spf13/afero" @@ -41,9 +44,27 @@ func defaultHarnessOpts(c harnessConfig) []beacontest.HarnessOption { logger.SetHandler(log.DiscardHandler()) } } - _, blocks, _, _, postState, handler, _, sm, fcu := setupTestingHandler(c.t, c.v, logger) + _, blocks, _, _, postState, handler, _, sm, fcu, _ := setupTestingHandler(c.t, c.v, logger) + var err error + lastBlockRoot, err := blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(c.t, err) + + if c.v >= clparams.AltairVersion { + fcu.LightClientBootstraps[lastBlockRoot], err = lightclient_utils.CreateLightClientBootstrap(postState, blocks[len(blocks)-1]) + require.NoError(c.t, err) + fcu.NewestLCUpdate = cltypes.NewLightClientUpdate(postState.Version()) + fcu.NewestLCUpdate.NextSyncCommittee = postState.NextSyncCommittee() + fcu.NewestLCUpdate.SignatureSlot = 1234 + fcu.NewestLCUpdate.SyncAggregate = blocks[len(blocks)-1].Block.Body.SyncAggregate + fcu.NewestLCUpdate.AttestedHeader, err = lightclient_utils.BlockToLightClientHeader(blocks[len(blocks)-1]) + require.NoError(c.t, err) + fcu.NewestLCUpdate.FinalizedHeader = fcu.NewestLCUpdate.AttestedHeader + fcu.LCUpdates[1] = fcu.NewestLCUpdate + fcu.LCUpdates[2] = fcu.NewestLCUpdate + } + if c.forkmode == 0 { fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() require.NoError(c.t, err) @@ -63,9 +84,11 @@ func defaultHarnessOpts(c harnessConfig) []beacontest.HarnessOption { if c.forkmode == 1 { sm.OnHeadState(postState) - s, cancel := sm.HeadState() + var s *state.CachingBeaconState + for s == nil { + s = sm.HeadState() + } s.SetSlot(789274827847783) - cancel() fcu.HeadSlotVal = 128 fcu.HeadVal = common.Hash{1, 2, 3} @@ -87,8 +110,8 @@ func defaultHarnessOpts(c harnessConfig) []beacontest.HarnessOption { fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(common.Hash{1, 2, 3}, 1) fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(common.Hash{1, 2, 3}, 2) - } + sm.OnHeadState(postState) return []beacontest.HarnessOption{ beacontest.WithTesting(c.t), diff --git a/cl/beacon/handler/duties_attester.go b/cl/beacon/handler/duties_attester.go index 3fb6a3f1609..aecc7b06e8e 100644 --- a/cl/beacon/handler/duties_attester.go +++ b/cl/beacon/handler/duties_attester.go @@ -22,18 +22,41 @@ type attesterDutyResponse struct { Slot uint64 `json:"slot,string"` } +func (a *ApiHandler) getDependentRoot(s *state.CachingBeaconState, epoch uint64) libcommon.Hash { + dependentRootSlot := ((epoch - 1) * a.beaconChainCfg.SlotsPerEpoch) - 3 + maxIterations := 2048 + for i := 0; i < maxIterations; i++ { + if dependentRootSlot > epoch*a.beaconChainCfg.SlotsPerEpoch { + return libcommon.Hash{} + } + + dependentRoot, err := s.GetBlockRootAtSlot(dependentRootSlot) + if err != nil { + dependentRootSlot-- + continue + } + return dependentRoot + } + return libcommon.Hash{} +} + func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { epoch, err := beaconhttp.EpochFromRequest(r) if err != nil { return nil, err } + s := a.syncedData.HeadState() + if s == nil { + return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, fmt.Errorf("node is syncing")) + } + dependentRoot := a.getDependentRoot(s, epoch) var idxsStr []string if err := json.NewDecoder(r.Body).Decode(&idxsStr); err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not decode request body: %w. request body is required", err).Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not decode request body: %w. request body is required", err)) } if len(idxsStr) == 0 { - return newBeaconResponse([]string{}).WithOptimistic(false), nil + return newBeaconResponse([]string{}).WithOptimistic(false).With("dependent_root", dependentRoot), nil } idxSet := map[int]struct{}{} // convert the request to uint64 @@ -41,7 +64,7 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( idx, err := strconv.ParseUint(idxStr, 10, 64) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not parse validator index: %w", err).Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not parse validator index: %w", err)) } if _, ok := idxSet[int(idx)]; ok { continue @@ -60,14 +83,13 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( // get the duties if a.forkchoiceStore.LowestAvaiableSlot() <= epoch*a.beaconChainCfg.SlotsPerEpoch { // non-finality case - s, cn := a.syncedData.HeadState() - defer cn() + if s == nil { - return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, "node is syncing") + return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, fmt.Errorf("node is syncing")) } - if epoch > state.Epoch(s)+1 { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("epoch %d is too far in the future", epoch)) + if epoch > state.Epoch(s)+3 { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("epoch %d is too far in the future", epoch)) } // get active validator indicies @@ -100,7 +122,7 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( } } } - return newBeaconResponse(resp).WithOptimistic(false), nil + return newBeaconResponse(resp).WithOptimistic(false).With("dependent_root", dependentRoot), nil } stageStateProgress, err := state_accessors.GetStateProcessingProgress(tx) @@ -108,7 +130,7 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( return nil, err } if (epoch)*a.beaconChainCfg.SlotsPerEpoch >= stageStateProgress { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("epoch %d is too far in the future", epoch)) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("epoch %d is too far in the future", epoch)) } // finality case activeIdxs, err := state_accessors.ReadActiveIndicies(tx, epoch*a.beaconChainCfg.SlotsPerEpoch) @@ -127,7 +149,7 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( mixPosition := (epoch + a.beaconChainCfg.EpochsPerHistoricalVector - a.beaconChainCfg.MinSeedLookahead - 1) % a.beaconChainCfg.EpochsPerHistoricalVector mix, err := a.stateReader.ReadRandaoMixBySlotAndIndex(tx, epoch*a.beaconChainCfg.SlotsPerEpoch, mixPosition) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read randao mix: %v", err)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read randao mix: %v", err)) } for currSlot := epoch * a.beaconChainCfg.SlotsPerEpoch; currSlot < (epoch+1)*a.beaconChainCfg.SlotsPerEpoch; currSlot++ { @@ -159,5 +181,5 @@ func (a *ApiHandler) getAttesterDuties(w http.ResponseWriter, r *http.Request) ( } } } - return newBeaconResponse(resp).WithOptimistic(false), nil + return newBeaconResponse(resp).WithOptimistic(false).With("dependent_root", dependentRoot), nil } diff --git a/cl/beacon/handler/duties_proposer.go b/cl/beacon/handler/duties_proposer.go index 95fd2dfb648..297d1fcd27f 100644 --- a/cl/beacon/handler/duties_proposer.go +++ b/cl/beacon/handler/duties_proposer.go @@ -3,6 +3,7 @@ package handler import ( "crypto/sha256" "encoding/binary" + "fmt" "net/http" "sync" @@ -24,9 +25,13 @@ type proposerDuties struct { func (a *ApiHandler) getDutiesProposer(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { epoch, err := beaconhttp.EpochFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } - + s := a.syncedData.HeadState() + if s == nil { + return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, fmt.Errorf("node is syncing")) + } + dependentRoot := a.getDependentRoot(s, epoch) if epoch < a.forkchoiceStore.FinalizedCheckpoint().Epoch() { tx, err := a.indiciesDB.BeginRo(r.Context()) if err != nil { @@ -39,7 +44,7 @@ func (a *ApiHandler) getDutiesProposer(w http.ResponseWriter, r *http.Request) ( return nil, err } if len(indiciesBytes) != int(a.beaconChainCfg.SlotsPerEpoch*4) { - return nil, beaconhttp.NewEndpointError(http.StatusInternalServerError, "proposer duties is corrupted") + return nil, beaconhttp.NewEndpointError(http.StatusInternalServerError, fmt.Errorf("proposer duties is corrupted")) } duties := make([]proposerDuties, a.beaconChainCfg.SlotsPerEpoch) for i := uint64(0); i < a.beaconChainCfg.SlotsPerEpoch; i++ { @@ -55,14 +60,13 @@ func (a *ApiHandler) getDutiesProposer(w http.ResponseWriter, r *http.Request) ( Slot: epoch*a.beaconChainCfg.SlotsPerEpoch + i, } } - return newBeaconResponse(duties).WithFinalized(true).WithVersion(a.beaconChainCfg.GetCurrentStateVersion(epoch)), nil + return newBeaconResponse(duties).WithFinalized(true).WithVersion(a.beaconChainCfg.GetCurrentStateVersion(epoch)).With("dependent_root", dependentRoot), nil } // We need to compute our duties - state, cancel := a.syncedData.HeadState() - defer cancel() + state := a.syncedData.HeadState() if state == nil { - return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, "beacon node is syncing") + return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, fmt.Errorf("beacon node is syncing")) } @@ -118,5 +122,5 @@ func (a *ApiHandler) getDutiesProposer(w http.ResponseWriter, r *http.Request) ( } wg.Wait() - return newBeaconResponse(duties).WithFinalized(false).WithVersion(a.beaconChainCfg.GetCurrentStateVersion(epoch)), nil + return newBeaconResponse(duties).WithFinalized(false).WithVersion(a.beaconChainCfg.GetCurrentStateVersion(epoch)).With("dependent_root", dependentRoot), nil } diff --git a/cl/beacon/handler/duties_sync.go b/cl/beacon/handler/duties_sync.go index 154b7d40282..7f0924881c3 100644 --- a/cl/beacon/handler/duties_sync.go +++ b/cl/beacon/handler/duties_sync.go @@ -9,15 +9,14 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" + "github.com/ledgerwatch/log/v3" ) type syncDutyResponse struct { Pubkey libcommon.Bytes48 `json:"pubkey"` ValidatorIndex uint64 `json:"validator_index,string"` - ValidatorSyncCommitteeIndicies []string `json:"validator_sync_committee_indicies"` + ValidatorSyncCommitteeIndicies []string `json:"validator_sync_committee_indices"` } func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { @@ -31,7 +30,7 @@ func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*bea var idxsStr []string if err := json.NewDecoder(r.Body).Decode(&idxsStr); err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not decode request body: %w. request body is required.", err).Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not decode request body: %w. request body is required.", err)) } if len(idxsStr) == 0 { return newBeaconResponse([]string{}).WithOptimistic(false), nil @@ -43,7 +42,7 @@ func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*bea idx, err := strconv.ParseUint(idxStr, 10, 64) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not parse validator index: %w", err).Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not parse validator index: %w", err)) } if _, ok := duplicates[int(idx)]; ok { continue @@ -59,45 +58,27 @@ func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*bea defer tx.Rollback() // Try to find a slot in the epoch or close to it - referenceSlot := ((epoch + 1) * a.beaconChainCfg.SlotsPerEpoch) - 1 + startSlotAtEpoch := (epoch * a.beaconChainCfg.SlotsPerEpoch) - (a.beaconChainCfg.SlotsPerEpoch - 1) - // Find the first slot in the epoch (or close enough that have a sync committee) - var referenceRoot libcommon.Hash - for ; referenceRoot != (libcommon.Hash{}); referenceSlot-- { - referenceRoot, err = beacon_indicies.ReadCanonicalBlockRoot(tx, referenceSlot) - if err != nil { - return nil, err - } - } - referencePeriod := (referenceSlot / a.beaconChainCfg.SlotsPerEpoch) / a.beaconChainCfg.EpochsPerSyncCommitteePeriod // Now try reading the sync committee - currentSyncCommittee, nextSyncCommittee, ok := a.forkchoiceStore.GetSyncCommittees(referenceRoot) + syncCommittee, _, ok := a.forkchoiceStore.GetSyncCommittees(period) if !ok { - roundedSlotToPeriod := a.beaconChainCfg.RoundSlotToSyncCommitteePeriod(referenceSlot) - switch { - case referencePeriod == period: - currentSyncCommittee, err = state_accessors.ReadCurrentSyncCommittee(tx, roundedSlotToPeriod) - case referencePeriod+1 == period: - nextSyncCommittee, err = state_accessors.ReadNextSyncCommittee(tx, roundedSlotToPeriod) - default: - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not find sync committee for epoch %d", epoch)) + _, syncCommittee, ok = a.forkchoiceStore.GetSyncCommittees(period - 1) + } + // Read them from the archive node if we do not have them in the fast-access storage + if !ok { + syncCommittee, err = state_accessors.ReadCurrentSyncCommittee(tx, a.beaconChainCfg.RoundSlotToSyncCommitteePeriod(startSlotAtEpoch)) + if syncCommittee == nil { + log.Warn("could not find sync committee for epoch", "epoch", epoch, "period", period) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not find sync committee for epoch %d", epoch)) } if err != nil { return nil, err } } - var syncCommittee *solid.SyncCommittee - // Determine which one to use. TODO(Giulio2002): Make this less rendundant. - switch { - case referencePeriod == period: - syncCommittee = currentSyncCommittee - case referencePeriod+1 == period: - syncCommittee = nextSyncCommittee - default: - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not find sync committee for epoch %d", epoch)) - } + if syncCommittee == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not find sync committee for epoch %d", epoch)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not find sync committee for epoch %d", epoch)) } // Now we have the sync committee, we can initialize our response set dutiesSet := map[uint64]*syncDutyResponse{} @@ -107,7 +88,7 @@ func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*bea return nil, err } if publicKey == (libcommon.Bytes48{}) { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not find validator with index %d", idx)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not find validator with index %d", idx)) } dutiesSet[idx] = &syncDutyResponse{ Pubkey: publicKey, @@ -121,7 +102,7 @@ func (a *ApiHandler) getSyncDuties(w http.ResponseWriter, r *http.Request) (*bea return nil, err } if !ok { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not find validator with public key %x", committeePartecipantPublicKey)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not find validator with public key %x", committeePartecipantPublicKey)) } if _, ok := dutiesSet[committeePartecipantIndex]; !ok { continue diff --git a/cl/beacon/handler/events.go b/cl/beacon/handler/events.go new file mode 100644 index 00000000000..5b465443ca6 --- /dev/null +++ b/cl/beacon/handler/events.go @@ -0,0 +1,66 @@ +package handler + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "sync" + + "github.com/gfx-labs/sse" + "github.com/ledgerwatch/log/v3" +) + +var validTopics = map[string]struct{}{ + "head": {}, + "block": {}, + "attestation": {}, + "voluntary_exit": {}, + "bls_to_execution_change": {}, + "finalized_checkpoint": {}, + "chain_reorg": {}, + "contribution_and_proof": {}, + "light_client_finality_update": {}, + "light_client_optimistic_update": {}, + "payload_attributes": {}, + "*": {}, +} + +func (a *ApiHandler) EventSourceGetV1Events(w http.ResponseWriter, r *http.Request) { + sink, err := sse.DefaultUpgrader.Upgrade(w, r) + if err != nil { + http.Error(w, "failed to upgrade", http.StatusInternalServerError) + } + topics := r.URL.Query()["topics"] + for _, v := range topics { + if _, ok := validTopics[v]; !ok { + http.Error(w, fmt.Sprintf("invalid Topic: %s", v), http.StatusBadRequest) + } + } + var mu sync.Mutex + closer, err := a.emitters.Subscribe(topics, func(topic string, item any) { + buf := &bytes.Buffer{} + err := json.NewEncoder(buf).Encode(item) + if err != nil { + // return early + return + } + mu.Lock() + err = sink.Encode(&sse.Event{ + Event: []byte(topic), + Data: buf, + }) + mu.Unlock() + if err != nil { + log.Error("failed to encode data", "topic", topic, "err", err) + } + // OK to ignore this error. maybe should log it later? + }) + if err != nil { + http.Error(w, "failed to subscribe", http.StatusInternalServerError) + return + } + defer closer() + <-r.Context().Done() + +} diff --git a/cl/beacon/handler/forkchoice.go b/cl/beacon/handler/forkchoice.go index e8ceea1f655..c9e6ce9cbb3 100644 --- a/cl/beacon/handler/forkchoice.go +++ b/cl/beacon/handler/forkchoice.go @@ -2,14 +2,16 @@ package handler import ( "encoding/json" + "fmt" "net/http" + "strconv" "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" ) func (a *ApiHandler) GetEthV2DebugBeaconHeads(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { if a.syncedData.Syncing() { - return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, "beacon node is syncing") + return nil, beaconhttp.NewEndpointError(http.StatusServiceUnavailable, fmt.Errorf("beacon node is syncing")) } hash, slotNumber, err := a.forkchoiceStore.GetHead() if err != nil { @@ -18,7 +20,7 @@ func (a *ApiHandler) GetEthV2DebugBeaconHeads(w http.ResponseWriter, r *http.Req return newBeaconResponse( []interface{}{ map[string]interface{}{ - "slot": slotNumber, + "slot": strconv.FormatUint(slotNumber, 10), "root": hash, "execution_optimistic": false, }, diff --git a/cl/beacon/handler/genesis.go b/cl/beacon/handler/genesis.go index 562c65429d2..804066f7265 100644 --- a/cl/beacon/handler/genesis.go +++ b/cl/beacon/handler/genesis.go @@ -6,7 +6,7 @@ import ( "github.com/ledgerwatch/erigon-lib/common" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" - "github.com/ledgerwatch/erigon/cl/fork" + "github.com/ledgerwatch/erigon/cl/utils" ) type genesisResponse struct { @@ -15,19 +15,10 @@ type genesisResponse struct { GenesisForkVersion libcommon.Bytes4 `json:"genesis_fork_version"` } -func (a *ApiHandler) getGenesis(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { - if a.genesisCfg == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "Genesis Config is missing") - } - - digest, err := fork.ComputeForkDigest(a.beaconChainCfg, a.genesisCfg) - if err != nil { - return nil, err - } - +func (a *ApiHandler) GetEthV1BeaconGenesis(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { return newBeaconResponse(&genesisResponse{ - GenesisTime: a.genesisCfg.GenesisTime, - GenesisValidatorRoot: a.genesisCfg.GenesisValidatorRoot, - GenesisForkVersion: digest, + GenesisTime: a.ethClock.GenesisTime(), + GenesisValidatorRoot: a.ethClock.GenesisValidatorsRoot(), + GenesisForkVersion: utils.Uint32ToBytes4(uint32(a.beaconChainCfg.GenesisForkVersion)), }), nil } diff --git a/cl/beacon/handler/handler.go b/cl/beacon/handler/handler.go index 8328efdacff..311c0cbdd2a 100644 --- a/cl/beacon/handler/handler.go +++ b/cl/beacon/handler/handler.go @@ -5,43 +5,160 @@ import ( "sync" "github.com/go-chi/chi/v5" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/aggregation" + "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" "github.com/ledgerwatch/erigon/cl/beacon/synced_data" "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/persistence" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" "github.com/ledgerwatch/erigon/cl/persistence/state/historical_states_reader" + "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" + "github.com/ledgerwatch/erigon/cl/phase1/execution_client" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" + "github.com/ledgerwatch/erigon/cl/phase1/network/services" "github.com/ledgerwatch/erigon/cl/pool" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/cl/validator/attestation_producer" + "github.com/ledgerwatch/erigon/cl/validator/committee_subscription" + "github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool" + "github.com/ledgerwatch/erigon/cl/validator/validator_params" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" + "github.com/ledgerwatch/log/v3" ) +const maxBlobBundleCacheSize = 48 // 8 blocks worth of blobs + +type BlobBundle struct { + Commitment common.Bytes48 + Blob *cltypes.Blob + KzgProof common.Bytes48 +} + type ApiHandler struct { o sync.Once mux *chi.Mux blockReader freezeblocks.BeaconSnapshotReader - indiciesDB kv.RoDB - genesisCfg *clparams.GenesisConfig + indiciesDB kv.RwDB + netConfig *clparams.NetworkConfig + ethClock eth_clock.EthereumClock beaconChainCfg *clparams.BeaconChainConfig forkchoiceStore forkchoice.ForkChoiceStorage operationsPool pool.OperationsPool syncedData *synced_data.SyncedDataManager stateReader *historical_states_reader.HistoricalStatesReader sentinel sentinel.SentinelClient + blobStoage blob_storage.BlobStorage + caplinSnapshots *freezeblocks.CaplinSnapshots version string // Node's version // pools randaoMixesPool sync.Pool + + // caches + lighthouseInclusionCache sync.Map + emitters *beaconevents.Emitters + + routerCfg *beacon_router_configuration.RouterConfiguration + logger log.Logger + + // Validator data structures + validatorParams *validator_params.ValidatorParams + blobBundles *lru.Cache[common.Bytes48, BlobBundle] // Keep recent bundled blobs from the execution layer. + engine execution_client.ExecutionEngine + syncMessagePool sync_contribution_pool.SyncContributionPool + committeeSub *committee_subscription.CommitteeSubscribeMgmt + attestationProducer attestation_producer.AttestationDataProducer + aggregatePool aggregation.AggregationPool + + // services + syncCommitteeMessagesService services.SyncCommitteeMessagesService + syncContributionAndProofsService services.SyncContributionService + aggregateAndProofsService services.AggregateAndProofService + attestationService services.AttestationService + voluntaryExitService services.VoluntaryExitService + blsToExecutionChangeService services.BLSToExecutionChangeService + proposerSlashingService services.ProposerSlashingService } -func NewApiHandler(genesisConfig *clparams.GenesisConfig, beaconChainConfig *clparams.BeaconChainConfig, source persistence.RawBeaconBlockChain, indiciesDB kv.RoDB, forkchoiceStore forkchoice.ForkChoiceStorage, operationsPool pool.OperationsPool, rcsn freezeblocks.BeaconSnapshotReader, syncedData *synced_data.SyncedDataManager, stateReader *historical_states_reader.HistoricalStatesReader, sentinel sentinel.SentinelClient, version string) *ApiHandler { - return &ApiHandler{o: sync.Once{}, genesisCfg: genesisConfig, beaconChainCfg: beaconChainConfig, indiciesDB: indiciesDB, forkchoiceStore: forkchoiceStore, operationsPool: operationsPool, blockReader: rcsn, syncedData: syncedData, stateReader: stateReader, randaoMixesPool: sync.Pool{New: func() interface{} { - return solid.NewHashVector(int(beaconChainConfig.EpochsPerHistoricalVector)) - }}, sentinel: sentinel, version: version} +func NewApiHandler( + logger log.Logger, + netConfig *clparams.NetworkConfig, + ethClock eth_clock.EthereumClock, + beaconChainConfig *clparams.BeaconChainConfig, + indiciesDB kv.RwDB, + forkchoiceStore forkchoice.ForkChoiceStorage, + operationsPool pool.OperationsPool, + rcsn freezeblocks.BeaconSnapshotReader, + syncedData *synced_data.SyncedDataManager, + stateReader *historical_states_reader.HistoricalStatesReader, + sentinel sentinel.SentinelClient, + version string, + routerCfg *beacon_router_configuration.RouterConfiguration, + emitters *beaconevents.Emitters, + blobStoage blob_storage.BlobStorage, + caplinSnapshots *freezeblocks.CaplinSnapshots, + validatorParams *validator_params.ValidatorParams, + attestationProducer attestation_producer.AttestationDataProducer, + engine execution_client.ExecutionEngine, + syncMessagePool sync_contribution_pool.SyncContributionPool, + committeeSub *committee_subscription.CommitteeSubscribeMgmt, + aggregatePool aggregation.AggregationPool, + syncCommitteeMessagesService services.SyncCommitteeMessagesService, + syncContributionAndProofs services.SyncContributionService, + aggregateAndProofs services.AggregateAndProofService, + attestationService services.AttestationService, + voluntaryExitService services.VoluntaryExitService, + blsToExecutionChangeService services.BLSToExecutionChangeService, + proposerSlashingService services.ProposerSlashingService, +) *ApiHandler { + blobBundles, err := lru.New[common.Bytes48, BlobBundle]("blobs", maxBlobBundleCacheSize) + if err != nil { + panic(err) + } + return &ApiHandler{ + logger: logger, + validatorParams: validatorParams, + o: sync.Once{}, + netConfig: netConfig, + ethClock: ethClock, + beaconChainCfg: beaconChainConfig, + indiciesDB: indiciesDB, + forkchoiceStore: forkchoiceStore, + operationsPool: operationsPool, + blockReader: rcsn, + syncedData: syncedData, + stateReader: stateReader, + randaoMixesPool: sync.Pool{New: func() interface{} { + return solid.NewHashVector(int(beaconChainConfig.EpochsPerHistoricalVector)) + }}, + sentinel: sentinel, + version: version, + routerCfg: routerCfg, + emitters: emitters, + blobStoage: blobStoage, + caplinSnapshots: caplinSnapshots, + attestationProducer: attestationProducer, + blobBundles: blobBundles, + engine: engine, + syncMessagePool: syncMessagePool, + committeeSub: committeeSub, + aggregatePool: aggregatePool, + syncCommitteeMessagesService: syncCommitteeMessagesService, + syncContributionAndProofsService: syncContributionAndProofs, + aggregateAndProofsService: aggregateAndProofs, + attestationService: attestationService, + voluntaryExitService: voluntaryExitService, + blsToExecutionChangeService: blsToExecutionChangeService, + proposerSlashingService: proposerSlashingService, + } } func (a *ApiHandler) Init() { @@ -52,101 +169,144 @@ func (a *ApiHandler) Init() { func (a *ApiHandler) init() { r := chi.NewRouter() a.mux = r - // This is the set of apis for validation + otterscan - // otterscn specific ones are commented as such + + r.Get("/", a.GetEthV1NodeHealth) + + if a.routerCfg.Lighthouse { + r.Route("/lighthouse", func(r chi.Router) { + r.Get("/validator_inclusion/{epoch}/global", beaconhttp.HandleEndpointFunc(a.GetLighthouseValidatorInclusionGlobal)) + r.Get("/validator_inclusion/{epoch}/{validator_id}", beaconhttp.HandleEndpointFunc(a.GetLighthouseValidatorInclusion)) + }) + } r.Route("/eth", func(r chi.Router) { r.Route("/v1", func(r chi.Router) { - r.Get("/builder/states/{state_id}/expected_withdrawals", beaconhttp.HandleEndpointFunc(a.GetEth1V1BuilderStatesExpectedWit)) - r.Get("/events", http.NotFound) - r.Route("/node", func(r chi.Router) { - r.Get("/health", a.GetEthV1NodeHealth) - r.Get("/version", a.GetEthV1NodeVersion) - }) - r.Get("/debug/fork_choice", a.GetEthV1DebugBeaconForkChoice) - r.Route("/config", func(r chi.Router) { - r.Get("/spec", beaconhttp.HandleEndpointFunc(a.getSpec)) - r.Get("/deposit_contract", beaconhttp.HandleEndpointFunc(a.getDepositContract)) - r.Get("/fork_schedule", beaconhttp.HandleEndpointFunc(a.getForkSchedule)) - }) - r.Route("/beacon", func(r chi.Router) { - r.Route("/rewards", func(r chi.Router) { - r.Post("/sync_committee/{block_id}", beaconhttp.HandleEndpointFunc(a.getSyncCommitteesRewards)) - r.Get("/blocks/{block_id}", beaconhttp.HandleEndpointFunc(a.getBlockRewards)) - r.Post("/attestations/{epoch}", beaconhttp.HandleEndpointFunc(a.getAttestationsRewards)) - }) - r.Route("/headers", func(r chi.Router) { - r.Get("/", beaconhttp.HandleEndpointFunc(a.getHeaders)) - r.Get("/{block_id}", beaconhttp.HandleEndpointFunc(a.getHeader)) - }) - r.Route("/blocks", func(r chi.Router) { - r.Post("/", http.NotFound) - r.Get("/{block_id}", beaconhttp.HandleEndpointFunc(a.getBlock)) - r.Get("/{block_id}/attestations", beaconhttp.HandleEndpointFunc(a.getBlockAttestations)) - r.Get("/{block_id}/root", beaconhttp.HandleEndpointFunc(a.getBlockRoot)) + if a.routerCfg.Builder { + r.Get("/builder/states/{state_id}/expected_withdrawals", beaconhttp.HandleEndpointFunc(a.GetEth1V1BuilderStatesExpectedWithdrawals)) + } + if a.routerCfg.Events { + r.Get("/events", a.EventSourceGetV1Events) + } + if a.routerCfg.Node { + r.Route("/node", func(r chi.Router) { + r.Get("/health", a.GetEthV1NodeHealth) + r.Get("/version", a.GetEthV1NodeVersion) + r.Get("/peer_count", a.GetEthV1NodePeerCount) + r.Get("/peers", a.GetEthV1NodePeersInfos) + r.Get("/peers/{peer_id}", a.GetEthV1NodePeerInfos) + r.Get("/identity", a.GetEthV1NodeIdentity) + r.Get("/syncing", a.GetEthV1NodeSyncing) }) - r.Get("/genesis", beaconhttp.HandleEndpointFunc(a.getGenesis)) - r.Get("/blinded_blocks/{block_id}", beaconhttp.HandleEndpointFunc(a.getBlindedBlock)) - r.Route("/pool", func(r chi.Router) { - r.Get("/voluntary_exits", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolVoluntaryExits)) - r.Post("/voluntary_exits", a.PostEthV1BeaconPoolVoluntaryExits) - r.Get("/attester_slashings", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolAttesterSlashings)) - r.Post("/attester_slashings", a.PostEthV1BeaconPoolAttesterSlashings) - r.Get("/proposer_slashings", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolProposerSlashings)) - r.Post("/proposer_slashings", a.PostEthV1BeaconPoolProposerSlashings) - r.Get("/bls_to_execution_changes", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolBLSExecutionChanges)) - r.Post("/bls_to_execution_changes", a.PostEthV1BeaconPoolBlsToExecutionChanges) - r.Get("/attestations", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolAttestations)) - r.Post("/attestations", http.NotFound) // TODO - r.Post("/sync_committees", http.NotFound) // TODO + } + + if a.routerCfg.Debug { + r.Get("/debug/fork_choice", a.GetEthV1DebugBeaconForkChoice) + } + if a.routerCfg.Config { + r.Route("/config", func(r chi.Router) { + r.Get("/spec", beaconhttp.HandleEndpointFunc(a.getSpec)) + r.Get("/deposit_contract", beaconhttp.HandleEndpointFunc(a.getDepositContract)) + r.Get("/fork_schedule", beaconhttp.HandleEndpointFunc(a.getForkSchedule)) }) - r.Get("/node/syncing", http.NotFound) - r.Route("/states", func(r chi.Router) { - r.Route("/{state_id}", func(r chi.Router) { - r.Get("/randao", beaconhttp.HandleEndpointFunc(a.getRandao)) - r.Get("/committees", beaconhttp.HandleEndpointFunc(a.getCommittees)) - r.Get("/sync_committees", beaconhttp.HandleEndpointFunc(a.getSyncCommittees)) // otterscan - r.Get("/finality_checkpoints", beaconhttp.HandleEndpointFunc(a.getFinalityCheckpoints)) - r.Get("/validators", http.NotFound) - r.Get("/root", beaconhttp.HandleEndpointFunc(a.getStateRoot)) - r.Get("/fork", beaconhttp.HandleEndpointFunc(a.getStateFork)) - r.Get("/validators", beaconhttp.HandleEndpointFunc(a.getAllValidators)) - r.Get("/validator_balances", beaconhttp.HandleEndpointFunc(a.getAllValidatorsBalances)) - r.Get("/validators/{validator_id}", beaconhttp.HandleEndpointFunc(a.getSingleValidator)) + } + if a.routerCfg.Beacon { + r.Route("/beacon", func(r chi.Router) { + r.Route("/rewards", func(r chi.Router) { + r.Post("/sync_committee/{block_id}", beaconhttp.HandleEndpointFunc(a.PostEthV1BeaconRewardsSyncCommittees)) + r.Get("/blocks/{block_id}", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconRewardsBlocks)) + r.Post("/attestations/{epoch}", beaconhttp.HandleEndpointFunc(a.PostEthV1BeaconRewardsAttestations)) + }) + r.Route("/headers", func(r chi.Router) { + r.Get("/", beaconhttp.HandleEndpointFunc(a.getHeaders)) + r.Get("/{block_id}", beaconhttp.HandleEndpointFunc(a.getHeader)) + }) + r.Route("/blocks", func(r chi.Router) { + r.Post("/", a.PostEthV1BeaconBlocks) + r.Get("/{block_id}", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconBlock)) + r.Get("/{block_id}/attestations", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconBlockAttestations)) + r.Get("/{block_id}/root", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconBlockRoot)) + }) + r.Get("/genesis", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconGenesis)) + r.Get("/blinded_blocks/{block_id}", beaconhttp.HandleEndpointFunc(a.GetEthV1BlindedBlock)) + r.Route("/pool", func(r chi.Router) { + r.Get("/voluntary_exits", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolVoluntaryExits)) + r.Post("/voluntary_exits", a.PostEthV1BeaconPoolVoluntaryExits) + r.Get("/attester_slashings", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolAttesterSlashings)) + r.Post("/attester_slashings", a.PostEthV1BeaconPoolAttesterSlashings) + r.Get("/proposer_slashings", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolProposerSlashings)) + r.Post("/proposer_slashings", a.PostEthV1BeaconPoolProposerSlashings) + r.Get("/bls_to_execution_changes", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolBLSExecutionChanges)) + r.Post("/bls_to_execution_changes", a.PostEthV1BeaconPoolBlsToExecutionChanges) + r.Get("/attestations", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconPoolAttestations)) + r.Post("/attestations", a.PostEthV1BeaconPoolAttestations) + r.Post("/sync_committees", a.PostEthV1BeaconPoolSyncCommittees) + }) + r.Route("/light_client", func(r chi.Router) { + r.Get("/bootstrap/{block_id}", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconLightClientBootstrap)) + r.Get("/optimistic_update", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconLightClientOptimisticUpdate)) + r.Get("/finality_update", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconLightClientFinalityUpdate)) + r.Get("/updates", a.GetEthV1BeaconLightClientUpdates) + }) + r.Get("/blob_sidecars/{block_id}", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconBlobSidecars)) + r.Route("/states", func(r chi.Router) { + r.Route("/{state_id}", func(r chi.Router) { + r.Get("/randao", beaconhttp.HandleEndpointFunc(a.getRandao)) + r.Get("/committees", beaconhttp.HandleEndpointFunc(a.getCommittees)) + r.Get("/sync_committees", beaconhttp.HandleEndpointFunc(a.getSyncCommittees)) // otterscan + r.Get("/finality_checkpoints", beaconhttp.HandleEndpointFunc(a.getFinalityCheckpoints)) + r.Get("/root", beaconhttp.HandleEndpointFunc(a.getStateRoot)) + r.Get("/fork", beaconhttp.HandleEndpointFunc(a.getStateFork)) + r.Get("/validators", a.GetEthV1BeaconStatesValidators) + r.Get("/validator_balances", a.GetEthV1BeaconValidatorsBalances) + r.Get("/validators/{validator_id}", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconStatesValidator)) + }) }) }) - }) - r.Route("/validator", func(r chi.Router) { - r.Route("/duties", func(r chi.Router) { - r.Post("/attester/{epoch}", beaconhttp.HandleEndpointFunc(a.getAttesterDuties)) - r.Get("/proposer/{epoch}", beaconhttp.HandleEndpointFunc(a.getDutiesProposer)) - r.Post("/sync/{epoch}", beaconhttp.HandleEndpointFunc(a.getSyncDuties)) + } + if a.routerCfg.Validator { + r.Route("/validator", func(r chi.Router) { + r.Route("/duties", func(r chi.Router) { + r.Post("/attester/{epoch}", beaconhttp.HandleEndpointFunc(a.getAttesterDuties)) + r.Get("/proposer/{epoch}", beaconhttp.HandleEndpointFunc(a.getDutiesProposer)) + r.Post("/sync/{epoch}", beaconhttp.HandleEndpointFunc(a.getSyncDuties)) + }) + r.Get("/blinded_blocks/{slot}", http.NotFound) + r.Get("/attestation_data", beaconhttp.HandleEndpointFunc(a.GetEthV1ValidatorAttestationData)) + r.Get("/aggregate_attestation", beaconhttp.HandleEndpointFunc(a.GetEthV1ValidatorAggregateAttestation)) + r.Post("/aggregate_and_proofs", a.PostEthV1ValidatorAggregatesAndProof) + r.Post("/beacon_committee_subscriptions", a.PostEthV1ValidatorBeaconCommitteeSubscription) + r.Post("/sync_committee_subscriptions", a.PostEthV1ValidatorSyncCommitteeSubscriptions) + r.Get("/sync_committee_contribution", beaconhttp.HandleEndpointFunc(a.GetEthV1ValidatorSyncCommitteeContribution)) + r.Post("/contribution_and_proofs", a.PostEthV1ValidatorContributionsAndProofs) + r.Post("/prepare_beacon_proposer", a.PostEthV1ValidatorPrepareBeaconProposal) + r.Post("/liveness/{epoch}", beaconhttp.HandleEndpointFunc(a.liveness)) }) - r.Get("/blinded_blocks/{slot}", http.NotFound) - r.Get("/attestation_data", http.NotFound) - r.Get("/aggregate_attestation", http.NotFound) - r.Post("/aggregate_and_proofs", a.PostEthV1ValidatorAggregatesAndProof) - r.Post("/beacon_committee_subscriptions", http.NotFound) - r.Post("/sync_committee_subscriptions", http.NotFound) - r.Get("/sync_committee_contribution", http.NotFound) - r.Post("/contribution_and_proofs", http.NotFound) - r.Post("/prepare_beacon_proposer", http.NotFound) - r.Post("/liveness/{epoch}", beaconhttp.HandleEndpointFunc(a.liveness)) - }) + } + }) r.Route("/v2", func(r chi.Router) { - r.Route("/debug", func(r chi.Router) { + if a.routerCfg.Debug { + r.Route("/debug", func(r chi.Router) { + r.Route("/beacon", func(r chi.Router) { + r.Get("/states/{state_id}", beaconhttp.HandleEndpointFunc(a.getFullState)) + r.Get("/heads", beaconhttp.HandleEndpointFunc(a.GetEthV2DebugBeaconHeads)) + }) + }) + } + if a.routerCfg.Beacon { r.Route("/beacon", func(r chi.Router) { - r.Get("/states/{state_id}", beaconhttp.HandleEndpointFunc(a.getFullState)) - r.Get("/heads", beaconhttp.HandleEndpointFunc(a.GetEthV2DebugBeaconHeads)) + r.Get("/blocks/{block_id}", beaconhttp.HandleEndpointFunc(a.GetEthV1BeaconBlock)) + r.Post("/blocks", a.PostEthV2BeaconBlocks) + }) + } + if a.routerCfg.Validator { + r.Route("/validator", func(r chi.Router) { + r.Post("/blocks/{slot}", http.NotFound) }) - }) - r.Route("/beacon", func(r chi.Router) { - r.Get("/blocks/{block_id}", beaconhttp.HandleEndpointFunc(a.getBlock)) - }) - r.Route("/validator", func(r chi.Router) { - r.Post("/blocks/{slot}", http.NotFound) - }) + } }) + if a.routerCfg.Validator { + r.Get("/v3/validator/blocks/{slot}", beaconhttp.HandleEndpointFunc(a.GetEthV3ValidatorBlock)) + } }) } diff --git a/cl/beacon/handler/harness/blob_sidecars.yaml b/cl/beacon/handler/harness/blob_sidecars.yaml new file mode 100644 index 00000000000..1b866bd9653 --- /dev/null +++ b/cl/beacon/handler/harness/blob_sidecars.yaml @@ -0,0 +1,8 @@ +tests: +- name: sidecars + actual: + handler: i + path: /eth/v1/beacon/blob_sidecars/0x694ee8130c036e4c7c052fac5d5a24618a52fa299a17e49d81af6bb82efd8998 + expect: + file: "blob_sidecars_1" + fs: td \ No newline at end of file diff --git a/cl/beacon/handler/harness/config.yml b/cl/beacon/handler/harness/config.yml index e9910ba5c6a..457d9669536 100644 --- a/cl/beacon/handler/harness/config.yml +++ b/cl/beacon/handler/harness/config.yml @@ -1,13 +1,4 @@ tests: - - name: spec - actual: - handler: i - path: /eth/v1/config/spec - compare: - exprs: - - actual_code == 200 - - actual.data.SlotsPerEpoch == 32 - - actual.data.SlotsPerHistoricalRoot == 8192 - name: fork schedule actual: handler: i @@ -30,3 +21,13 @@ tests: - actual_code == 200 - actual.data.address == "0x00000000219ab540356cBB839Cbe05303d7705Fa" - actual.data.chain_id == "1" + - name: genesis + actual: + handler: i + path: /eth/v1/beacon/genesis + compare: + exprs: + - actual_code == 200 + - actual.data.genesis_time == "1606824023" + - actual.data.genesis_validators_root == "0x4b363db94e286120d76eb905340fdd4e54bfe9f06bf33ff6cf5ad27f511bfe95" + - actual.data.genesis_fork_version == "0x00000000" diff --git a/cl/beacon/handler/harness/expected_withdrawals.yml b/cl/beacon/handler/harness/expected_withdrawals.yml new file mode 100644 index 00000000000..bed772fba24 --- /dev/null +++ b/cl/beacon/handler/harness/expected_withdrawals.yml @@ -0,0 +1,15 @@ +tests: + - name: head_expected_withdrawals + actual: + handler: i + path: /eth/v1/builder/states/head/expected_withdrawals + expect: + file: "expected_withdrawals_head" + fs: td + - name: head_expected_avg + actual: + handler: i + path: /eth/v1/builder/states/8320/expected_withdrawals + expect: + file: "expected_withdrawals_avg" + fs: td diff --git a/cl/beacon/handler/harness/lightclient.yml b/cl/beacon/handler/harness/lightclient.yml new file mode 100644 index 00000000000..8f40158ca9a --- /dev/null +++ b/cl/beacon/handler/harness/lightclient.yml @@ -0,0 +1,32 @@ +vars: + head_hash: '0x0d86eab4d6fd68775a23fda562ab7e059a88d36768729f7ba6d817ba67a6a7ee' + bad_hash: '0xbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeef' +tests: + - name: bootstrap + actual: + handler: i + path: /eth/v1/beacon/light_client/bootstrap/{{.Vars.head_hash}} + expect: + file: "light_client_bootstrap_1" + fs: td + - name: optimistic + actual: + handler: i + path: /eth/v1/beacon/light_client/optimistic_update + expect: + file: "light_client_optimistic_1" + fs: td + - name: finality + actual: + handler: i + path: /eth/v1/beacon/light_client/finality_update + expect: + file: "light_client_finality_1" + fs: td + - name: updates + actual: + handler: i + path: /eth/v1/beacon/light_client/updates?start_period=1&count=3 + expect: + file: "light_client_update_1" + fs: td diff --git a/cl/beacon/handler/harness/lighthouse.yml b/cl/beacon/handler/harness/lighthouse.yml new file mode 100644 index 00000000000..b0f37b33997 --- /dev/null +++ b/cl/beacon/handler/harness/lighthouse.yml @@ -0,0 +1,15 @@ +tests: +- name: inclusion_global + actual: + handler: i + path: /lighthouse/validator_inclusion/4/global + expect: + file: "harness_inclusion_global_1" + fs: td +- name: inclusion_local + actual: + handler: i + path: /lighthouse/validator_inclusion/4/1 + expect: + file: "harness_inclusion_local_1" + fs: td \ No newline at end of file diff --git a/cl/beacon/handler/harness/validators.yml b/cl/beacon/handler/harness/validators.yml new file mode 100644 index 00000000000..fc4ff857422 --- /dev/null +++ b/cl/beacon/handler/harness/validators.yml @@ -0,0 +1,36 @@ +tests: + - name: head_validators_all + actual: + handler: i + path: /eth/v1/beacon/states/head/validators + expect: + file: "head_validators_all" + fs: td + - name: validators_some + actual: + handler: i + path: /eth/v1/beacon/states/159/validators?id=0,1,2,0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc&status=active + expect: + file: "validators_some" + fs: td + - name: validator + actual: + handler: i + path: /eth/v1/beacon/states/159/validators/0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc + expect: + file: "validator_1" + fs: td + - name: validator_not_found + actual: + handler: i + path: /eth/v1/beacon/states/159/validators/0xffe7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc + compare: + exprs: + - "actual_code==404" + - name: head_validators_balances + actual: + handler: i + path: /eth/v1/beacon/states/head/validator_balances + expect: + file: "head_validators_balances" + fs: td diff --git a/cl/beacon/handler/harness_test.go b/cl/beacon/handler/harness_test.go index 8c0086a09cc..6ad000d6a35 100644 --- a/cl/beacon/handler/harness_test.go +++ b/cl/beacon/handler/harness_test.go @@ -1,12 +1,11 @@ -package handler_test +package handler import ( + _ "embed" "testing" "github.com/ledgerwatch/erigon/cl/beacon/beacontest" "github.com/ledgerwatch/erigon/cl/clparams" - - _ "embed" ) func TestHarnessPhase0(t *testing.T) { @@ -16,13 +15,13 @@ func TestHarnessPhase0(t *testing.T) { beacontest.WithTestFromFs(Harnesses, "blocks"), beacontest.WithTestFromFs(Harnesses, "config"), beacontest.WithTestFromFs(Harnesses, "headers"), - beacontest.WithTestFromFs(Harnesses, "attestation_rewards_phase0"), beacontest.WithTestFromFs(Harnesses, "committees"), beacontest.WithTestFromFs(Harnesses, "duties_attester"), beacontest.WithTestFromFs(Harnesses, "duties_proposer"), )..., ) } + func TestHarnessPhase0Finalized(t *testing.T) { beacontest.Execute( append( @@ -40,9 +39,23 @@ func TestHarnessBellatrix(t *testing.T) { defaultHarnessOpts(harnessConfig{t: t, v: clparams.BellatrixVersion, finalized: true}), beacontest.WithTestFromFs(Harnesses, "attestation_rewards_bellatrix"), beacontest.WithTestFromFs(Harnesses, "duties_sync_bellatrix"), + beacontest.WithTestFromFs(Harnesses, "lightclient"), + beacontest.WithTestFromFs(Harnesses, "validators"), + beacontest.WithTestFromFs(Harnesses, "lighthouse"), + beacontest.WithTestFromFs(Harnesses, "blob_sidecars"), )..., ) } + +func TestHarnessCapella(t *testing.T) { + beacontest.Execute( + append( + defaultHarnessOpts(harnessConfig{t: t, v: clparams.CapellaVersion, finalized: true}), + beacontest.WithTestFromFs(Harnesses, "expected_withdrawals"), + )..., + ) +} + func TestHarnessForkChoice(t *testing.T) { beacontest.Execute( append( diff --git a/cl/beacon/handler/headers.go b/cl/beacon/handler/headers.go index 43c9a66850f..2eb4b44b51c 100644 --- a/cl/beacon/handler/headers.go +++ b/cl/beacon/handler/headers.go @@ -14,11 +14,11 @@ func (a *ApiHandler) getHeaders(w http.ResponseWriter, r *http.Request) (*beacon querySlot, err := beaconhttp.Uint64FromQueryParams(r, "slot") if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } queryParentHash, err := beaconhttp.HashFromQueryParams(r, "parent_root") if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } tx, err := a.indiciesDB.BeginRo(ctx) @@ -98,7 +98,7 @@ func (a *ApiHandler) getHeader(w http.ResponseWriter, r *http.Request) (*beaconh defer tx.Rollback() blockId, err := beaconhttp.BlockIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } root, err := a.rootFromBlockId(ctx, tx, blockId) if err != nil { @@ -111,7 +111,7 @@ func (a *ApiHandler) getHeader(w http.ResponseWriter, r *http.Request) (*beaconh } if signedHeader == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("block not found %x", root)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found %x", root)) } var canonicalRoot libcommon.Hash canonicalRoot, err = beacon_indicies.ReadCanonicalBlockRoot(tx, signedHeader.Header.Slot) diff --git a/cl/beacon/handler/lightclient.go b/cl/beacon/handler/lightclient.go new file mode 100644 index 00000000000..79cbc5c6dac --- /dev/null +++ b/cl/beacon/handler/lightclient.go @@ -0,0 +1,115 @@ +package handler + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" +) + +func (a *ApiHandler) GetEthV1BeaconLightClientBootstrap(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + ctx := r.Context() + tx, err := a.indiciesDB.BeginRo(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback() + + blockId, err := beaconhttp.BlockIdFromRequest(r) + if err != nil { + return nil, err + } + root, err := a.rootFromBlockId(ctx, tx, blockId) + if err != nil { + return nil, err + } + + bootstrap, ok := a.forkchoiceStore.GetLightClientBootstrap(root) + if !ok { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("bootstrap object evicted")) + } + return newBeaconResponse(bootstrap).WithVersion(bootstrap.Header.Version()), nil +} + +func (a *ApiHandler) GetEthV1BeaconLightClientOptimisticUpdate(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + update := a.forkchoiceStore.NewestLightClientUpdate() + if update == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no optimistic update loaded yet, try again later. it may take a few minutes for it to load.")) + } + version := update.AttestedHeader.Version() + return newBeaconResponse(&cltypes.LightClientOptimisticUpdate{ + AttestedHeader: update.AttestedHeader, + SyncAggregate: update.SyncAggregate, + SignatureSlot: update.SignatureSlot, + }).WithVersion(version), nil +} + +func (a *ApiHandler) GetEthV1BeaconLightClientFinalityUpdate(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + update := a.forkchoiceStore.NewestLightClientUpdate() + if update == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("no finility update loaded yet, try again later. it may take a few minutes for it to load.")) + } + version := update.AttestedHeader.Version() + return newBeaconResponse(&cltypes.LightClientFinalityUpdate{ + AttestedHeader: update.AttestedHeader, + FinalizedHeader: update.FinalizedHeader, + FinalityBranch: update.FinalityBranch, + SyncAggregate: update.SyncAggregate, + SignatureSlot: update.SignatureSlot, + }).WithVersion(version), nil +} + +func (a *ApiHandler) GetEthV1BeaconLightClientUpdates(w http.ResponseWriter, r *http.Request) { + + startPeriod, err := beaconhttp.Uint64FromQueryParams(r, "start_period") + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if startPeriod == nil { + http.Error(w, "start_period is required", http.StatusBadRequest) + return + } + count, err := beaconhttp.Uint64FromQueryParams(r, "count") + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if count == nil { + http.Error(w, "count is required", http.StatusBadRequest) + return + } + + resp := []interface{}{} + endPeriod := *startPeriod + *count + currentSlot := a.ethClock.GetCurrentSlot() + if endPeriod > a.beaconChainCfg.SyncCommitteePeriod(currentSlot) { + endPeriod = a.beaconChainCfg.SyncCommitteePeriod(currentSlot) + } + + notFoundPrev := false + // Fetch from [start_period, start_period + count] + for i := *startPeriod; i <= endPeriod; i++ { + respUpdate := map[string]interface{}{} + update, has := a.forkchoiceStore.GetLightClientUpdate(i) + if !has { + notFoundPrev = true + continue + } + if notFoundPrev { + resp = []interface{}{} + notFoundPrev = false + } + respUpdate["data"] = update + respUpdate["version"] = clparams.ClVersionToString(update.AttestedHeader.Version()) + resp = append(resp, respUpdate) + } + + if err := json.NewEncoder(w).Encode(resp); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } +} diff --git a/cl/beacon/handler/lighthouse.go b/cl/beacon/handler/lighthouse.go new file mode 100644 index 00000000000..f024e90b0e0 --- /dev/null +++ b/cl/beacon/handler/lighthouse.go @@ -0,0 +1,325 @@ +package handler + +import ( + "fmt" + "net/http" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" +) + +type LighthouseValidatorInclusionGlobal struct { + CurrentEpochActiveGwei uint64 `json:"current_epoch_active_gwei"` + PreviousEpochActiveGwei uint64 `json:"previous_epoch_active_gwei"` + CurrentEpochTargetAttestingGwei uint64 `json:"current_epoch_target_attesting_gwei"` + PreviousEpochTargetAttestingGwei uint64 `json:"previous_epoch_target_attesting_gwei"` + PreviousEpochHeadAttestingGwei uint64 `json:"previous_epoch_head_attesting_gwei"` +} + +func (a *ApiHandler) findEpochRoot(tx kv.Tx, epoch uint64) (common.Hash, error) { + var currentBlockRoot common.Hash + var err error + for i := epoch * a.beaconChainCfg.SlotsPerEpoch; i < (epoch+1)*a.beaconChainCfg.SlotsPerEpoch; i++ { + // read the block root + currentBlockRoot, err = beacon_indicies.ReadCanonicalBlockRoot(tx, i) + if err != nil { + return common.Hash{}, err + } + } + return currentBlockRoot, nil + +} + +func (a *ApiHandler) GetLighthouseValidatorInclusionGlobal(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + epoch, err := beaconhttp.EpochFromRequest(r) + if err != nil { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) + } + ret, ok := a.lighthouseInclusionCache.Load(epoch) + if ok { + return newBeaconResponse(ret.(*LighthouseValidatorInclusionGlobal)), nil + } + // otherwise take data from historical states + prevEpoch := epoch + if prevEpoch > 0 { + prevEpoch-- + } + tx, err := a.indiciesDB.BeginRo(r.Context()) + if err != nil { + return nil, err + } + defer tx.Rollback() + + slot := epoch * a.beaconChainCfg.SlotsPerEpoch + if slot >= a.forkchoiceStore.LowestAvaiableSlot() { + // Take data from forkchoice + root, err := a.findEpochRoot(tx, epoch) + if err != nil { + return nil, err + } + prevRoot, err := a.findEpochRoot(tx, prevEpoch) + if err != nil { + return nil, err + } + activeBalance, ok := a.forkchoiceStore.TotalActiveBalance(root) + if !ok { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("active balance not found for current epoch")) + } + prevActiveBalance, ok := a.forkchoiceStore.TotalActiveBalance(prevRoot) + if !ok { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("active balance not found for previous epoch")) + } + validatorSet, err := a.forkchoiceStore.GetValidatorSet(root) + if err != nil { + return nil, err + } + if validatorSet == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("validator set not found for current epoch")) + } + currentEpochPartecipation, err := a.forkchoiceStore.GetCurrentPartecipationIndicies(root) + if err != nil { + return nil, err + } + if currentEpochPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("partecipation not found for current epoch")) + } + previousEpochPartecipation, err := a.forkchoiceStore.GetPreviousPartecipationIndicies(root) + if err != nil { + return nil, err + } + if previousEpochPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("partecipation not found for previous epoch")) + } + return newBeaconResponse(a.computeLighthouseValidatorInclusionGlobal(epoch, activeBalance, prevActiveBalance, validatorSet, currentEpochPartecipation, previousEpochPartecipation)), nil + } + + // read the epoch datas first + epochData, err := state_accessors.ReadEpochData(tx, epoch*a.beaconChainCfg.SlotsPerEpoch) + if err != nil { + return nil, err + } + if epochData == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("epoch data not found for current epoch")) + } + prevEpochData, err := state_accessors.ReadEpochData(tx, prevEpoch*a.beaconChainCfg.SlotsPerEpoch) + if err != nil { + return nil, err + } + if prevEpochData == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("epoch data not found for previous epoch")) + } + // read the validator set + validatorSet, err := a.stateReader.ReadValidatorsForHistoricalState(tx, slot) + if err != nil { + return nil, err + } + if validatorSet == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("validator set not found for current epoch")) + } + currentEpochPartecipation, previousEpochPartecipation, err := a.stateReader.ReadPartecipations(tx, slot+(a.beaconChainCfg.SlotsPerEpoch-1)) + if err != nil { + return nil, err + } + if currentEpochPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("partecipation not found for current epoch")) + } + if previousEpochPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("partecipation not found for previous epoch")) + } + return newBeaconResponse(a.computeLighthouseValidatorInclusionGlobal(epoch, epochData.TotalActiveBalance, prevEpochData.TotalActiveBalance, validatorSet, currentEpochPartecipation, previousEpochPartecipation)), nil +} + +func (a *ApiHandler) computeLighthouseValidatorInclusionGlobal(epoch, currentActiveGwei, previousActiveGwei uint64, validatorSet *solid.ValidatorSet, currentEpochPartecipation, previousEpochPartecipation *solid.BitList) *LighthouseValidatorInclusionGlobal { + var currentEpochTargetAttestingGwei, previousEpochTargetAttestingGwei, previousEpochHeadAttestingGwei uint64 + for i := 0; i < validatorSet.Length(); i++ { + validatorBalance := validatorSet.Get(i).EffectiveBalance() + prevFlags := cltypes.ParticipationFlags(previousEpochPartecipation.Get(i)) + currFlags := cltypes.ParticipationFlags(currentEpochPartecipation.Get(i)) + if prevFlags.HasFlag(int(a.beaconChainCfg.TimelyHeadFlagIndex)) { + previousEpochHeadAttestingGwei += validatorBalance + } + if currFlags.HasFlag(int(a.beaconChainCfg.TimelyTargetFlagIndex)) { + currentEpochTargetAttestingGwei += validatorBalance + } + if prevFlags.HasFlag(int(a.beaconChainCfg.TimelyTargetFlagIndex)) { + previousEpochTargetAttestingGwei += validatorBalance + } + } + ret := &LighthouseValidatorInclusionGlobal{ + CurrentEpochActiveGwei: currentActiveGwei, + PreviousEpochActiveGwei: previousActiveGwei, + CurrentEpochTargetAttestingGwei: currentEpochTargetAttestingGwei, + PreviousEpochTargetAttestingGwei: previousEpochTargetAttestingGwei, + PreviousEpochHeadAttestingGwei: previousEpochHeadAttestingGwei, + } + a.lighthouseInclusionCache.Store(epoch, ret) + + return ret +} + +// { +// "data": { +// "is_slashed": false, +// "is_withdrawable_in_current_epoch": false, +// "is_active_unslashed_in_current_epoch": true, +// "is_active_unslashed_in_previous_epoch": true, +// "current_epoch_effective_balance_gwei": 32000000000, +// "is_current_epoch_target_attester": false, +// "is_previous_epoch_target_attester": false, +// "is_previous_epoch_head_attester": false +// } +// } + +type LighthouseValidatorInclusion struct { + IsSlashed bool `json:"is_slashed"` + IsWithdrawableInCurrentEpoch bool `json:"is_withdrawable_in_current_epoch"` + IsActiveUnslashedInCurrentEpoch bool `json:"is_active_unslashed_in_current_epoch"` + IsActiveUnslashedInPreviousEpoch bool `json:"is_active_unslashed_in_previous_epoch"` + CurrentEpochEffectiveBalanceGwei uint64 `json:"current_epoch_effective_balance_gwei"` + IsCurrentEpochTargetAttester bool `json:"is_current_epoch_target_attester"` + IsPreviousEpochTargetAttester bool `json:"is_previous_epoch_target_attester"` + IsPreviousEpochHeadAttester bool `json:"is_previous_epoch_head_attester"` +} + +func (a *ApiHandler) GetLighthouseValidatorInclusion(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + epoch, err := beaconhttp.EpochFromRequest(r) + if err != nil { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) + } + tx, err := a.indiciesDB.BeginRo(r.Context()) + if err != nil { + return nil, err + } + defer tx.Rollback() + + validatorId, err := beaconhttp.StringFromRequest(r, "validator_id") + if err != nil { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) + } + + validatorIndex, err := parseQueryValidatorIndex(tx, validatorId) + if err != nil { + return nil, err + } + + // otherwise take data from historical states + prevEpoch := epoch + if prevEpoch > 0 { + prevEpoch-- + } + + slot := epoch * a.beaconChainCfg.SlotsPerEpoch + if slot >= a.forkchoiceStore.LowestAvaiableSlot() { + // Take data from forkchoice + root, err := a.findEpochRoot(tx, epoch) + if err != nil { + return nil, err + } + prevRoot, err := a.findEpochRoot(tx, prevEpoch) + if err != nil { + return nil, err + } + activeBalance, ok := a.forkchoiceStore.TotalActiveBalance(root) + if !ok { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("active balance not found for current epoch")) + } + prevActiveBalance, ok := a.forkchoiceStore.TotalActiveBalance(prevRoot) + if !ok { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("active balance not found for previous epoch")) + } + validatorSet, err := a.forkchoiceStore.GetValidatorSet(root) + if err != nil { + return nil, err + } + if validatorSet == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("validator set not found for current epoch")) + } + currentEpochPartecipation, err := a.forkchoiceStore.GetCurrentPartecipationIndicies(root) + if err != nil { + return nil, err + } + if currentEpochPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("partecipation not found for current epoch")) + } + previousEpochPartecipation, err := a.forkchoiceStore.GetPreviousPartecipationIndicies(root) + if err != nil { + return nil, err + } + if previousEpochPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("partecipation not found for previous epoch")) + } + return newBeaconResponse(a.computeLighthouseValidatorInclusion(int(validatorIndex), prevEpoch, epoch, activeBalance, prevActiveBalance, validatorSet, currentEpochPartecipation, previousEpochPartecipation)), nil + } + + // read the epoch datas first + epochData, err := state_accessors.ReadEpochData(tx, epoch*a.beaconChainCfg.SlotsPerEpoch) + if err != nil { + return nil, err + } + if epochData == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("epoch data not found for current epoch")) + } + prevEpochData, err := state_accessors.ReadEpochData(tx, prevEpoch*a.beaconChainCfg.SlotsPerEpoch) + if err != nil { + return nil, err + } + if prevEpochData == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("epoch data not found for previous epoch")) + } + // read the validator set + validatorSet, err := a.stateReader.ReadValidatorsForHistoricalState(tx, slot) + if err != nil { + return nil, err + } + if validatorSet == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("validator set not found for current epoch")) + } + currentEpochPartecipation, previousEpochPartecipation, err := a.stateReader.ReadPartecipations(tx, slot+(a.beaconChainCfg.SlotsPerEpoch-1)) + if err != nil { + return nil, err + } + if currentEpochPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("partecipation not found for current epoch")) + } + if previousEpochPartecipation == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("partecipation not found for previous epoch")) + } + return newBeaconResponse(a.computeLighthouseValidatorInclusion(int(validatorIndex), prevEpoch, epoch, epochData.TotalActiveBalance, prevEpochData.TotalActiveBalance, validatorSet, currentEpochPartecipation, previousEpochPartecipation)), nil +} + +func (a *ApiHandler) computeLighthouseValidatorInclusion(idx int, prevEpoch, epoch, currentActiveGwei, previousActiveGwei uint64, validatorSet *solid.ValidatorSet, currentEpochPartecipation, previousEpochPartecipation *solid.BitList) *LighthouseValidatorInclusion { + var currentEpochTargetAttestingGwei, previousEpochTargetAttestingGwei, previousEpochHeadAttestingGwei uint64 + for i := 0; i < validatorSet.Length(); i++ { + validatorBalance := validatorSet.Get(i).EffectiveBalance() + prevFlags := cltypes.ParticipationFlags(previousEpochPartecipation.Get(i)) + currFlags := cltypes.ParticipationFlags(currentEpochPartecipation.Get(i)) + if prevFlags.HasFlag(int(a.beaconChainCfg.TimelyHeadFlagIndex)) { + previousEpochHeadAttestingGwei += validatorBalance + } + if currFlags.HasFlag(int(a.beaconChainCfg.TimelyTargetFlagIndex)) { + currentEpochTargetAttestingGwei += validatorBalance + } + if prevFlags.HasFlag(int(a.beaconChainCfg.TimelyTargetFlagIndex)) { + previousEpochTargetAttestingGwei += validatorBalance + } + } + validator := validatorSet.Get(idx) + prevFlags := cltypes.ParticipationFlags(previousEpochPartecipation.Get(idx)) + currFlags := cltypes.ParticipationFlags(currentEpochPartecipation.Get(idx)) + + return &LighthouseValidatorInclusion{ + IsSlashed: validator.Slashed(), + IsWithdrawableInCurrentEpoch: epoch >= validator.WithdrawableEpoch(), + IsActiveUnslashedInCurrentEpoch: validator.Active(epoch) && !validator.Slashed(), + IsActiveUnslashedInPreviousEpoch: validator.Active(prevEpoch) && !validator.Slashed(), + CurrentEpochEffectiveBalanceGwei: validator.EffectiveBalance(), + IsCurrentEpochTargetAttester: currFlags.HasFlag(int(a.beaconChainCfg.TimelyTargetFlagIndex)), + IsPreviousEpochTargetAttester: prevFlags.HasFlag(int(a.beaconChainCfg.TimelyTargetFlagIndex)), + IsPreviousEpochHeadAttester: prevFlags.HasFlag(int(a.beaconChainCfg.TimelyHeadFlagIndex)), + } +} diff --git a/cl/beacon/handler/liveness.go b/cl/beacon/handler/liveness.go index 99ec031d831..f23078ee695 100644 --- a/cl/beacon/handler/liveness.go +++ b/cl/beacon/handler/liveness.go @@ -12,7 +12,6 @@ import ( "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/utils" ) type live struct { @@ -25,14 +24,14 @@ func (a *ApiHandler) liveness(w http.ResponseWriter, r *http.Request) (*beaconht if err != nil { return nil, err } - maxEpoch := utils.GetCurrentEpoch(a.genesisCfg.GenesisTime, a.beaconChainCfg.SecondsPerSlot, a.beaconChainCfg.SlotsPerEpoch) + maxEpoch := a.ethClock.GetCurrentEpoch() if epoch > maxEpoch { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("epoch %d is in the future, max epoch is %d", epoch, maxEpoch).Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("epoch %d is in the future, max epoch is %d", epoch, maxEpoch)) } var idxsStr []string if err := json.NewDecoder(r.Body).Decode(&idxsStr); err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not decode request body: %w. request body is required.", err).Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not decode request body: %w. request body is required.", err)) } if len(idxsStr) == 0 { return newBeaconResponse([]string{}), nil @@ -43,7 +42,7 @@ func (a *ApiHandler) liveness(w http.ResponseWriter, r *http.Request) (*beaconht for _, idxStr := range idxsStr { idx, err := strconv.ParseUint(idxStr, 10, 64) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not parse validator index: %w", err).Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("could not parse validator index: %w", err)) } if _, ok := idxSet[int(idx)]; ok { continue @@ -88,7 +87,7 @@ func (a *ApiHandler) liveness(w http.ResponseWriter, r *http.Request) (*beaconht return nil, err } if currentEpochPartecipation == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not find partecipations for epoch %d, if this was an historical query, turn on --caplin.archive", epoch)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not find partecipations for epoch %d, if this was an historical query, turn on --caplin.archive", epoch)) } for idx, live := range liveSet { if live.IsLive { diff --git a/cl/beacon/handler/node.go b/cl/beacon/handler/node.go index 063adacdeb5..7cba2bb7791 100644 --- a/cl/beacon/handler/node.go +++ b/cl/beacon/handler/node.go @@ -5,10 +5,28 @@ import ( "fmt" "net/http" "runtime" + "strconv" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" ) +/* +"peer_id": "QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N", +"enr": "enr:-IS4QHCYrYZbAKWCBRlAy5zzaDZXJBGkcnh4MHcBFZntXNFrdvJjX04jRzjzCBOonrkTfj499SZuOh8R33Ls8RRcy5wBgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQPKY0yuDUmstAHYpMa2_oxVtw0RW_QAdpzBQA8yWM0xOIN1ZHCCdl8", +"last_seen_p2p_address": "/ip4/7.7.7.7/tcp/4242/p2p/QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N", +"state": "disconnected", +"direction": "inbound" +*/ +type peer struct { + PeerID string `json:"peer_id"` + State string `json:"state"` + Enr string `json:"enr"` + LastSeenP2PAddress string `json:"last_seen_p2p_address"` + Direction string `json:"direction"` + AgentVersion string `json:"agent_version"` +} + func (a *ApiHandler) GetEthV1NodeHealth(w http.ResponseWriter, r *http.Request) { syncingStatus, err := beaconhttp.Uint64FromQueryParams(r, "syncing_status") if err != nil { @@ -36,3 +54,131 @@ func (a *ApiHandler) GetEthV1NodeVersion(w http.ResponseWriter, r *http.Request) http.Error(w, err.Error(), http.StatusInternalServerError) } } + +func (a *ApiHandler) GetEthV1NodePeerCount(w http.ResponseWriter, r *http.Request) { + ret, err := a.sentinel.GetPeers(r.Context(), &sentinel.EmptyMessage{}) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + // all fields should be converted to string + if err := json.NewEncoder(w).Encode(map[string]interface{}{ + "data": map[string]interface{}{ + "connected": strconv.FormatUint(ret.Connected, 10), + "disconnected": strconv.FormatUint(ret.Disconnected, 10), + "connecting": strconv.FormatUint(ret.Connecting, 10), + "disconnecting": strconv.FormatUint(ret.Disconnecting, 10), + }, + }); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} + +func (a *ApiHandler) GetEthV1NodePeersInfos(w http.ResponseWriter, r *http.Request) { + state := r.URL.Query().Get("state") + direction := r.URL.Query().Get("direction") + + var directionIn, stateIn *string + if state != "" { + stateIn = &state + } + if direction != "" { + directionIn = &direction + } + + ret, err := a.sentinel.PeersInfo(r.Context(), &sentinel.PeersInfoRequest{ + Direction: directionIn, + State: stateIn, + }) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + peers := make([]peer, 0, len(ret.Peers)) + for i := range ret.Peers { + peers = append(peers, peer{ + PeerID: ret.Peers[i].Pid, + State: ret.Peers[i].State, + Enr: ret.Peers[i].Enr, + LastSeenP2PAddress: ret.Peers[i].Address, + Direction: ret.Peers[i].Direction, + AgentVersion: ret.Peers[i].AgentVersion, + }) + } + if err := json.NewEncoder(w).Encode(map[string]interface{}{ + "data": peers, + }); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} + +func (a *ApiHandler) GetEthV1NodePeerInfos(w http.ResponseWriter, r *http.Request) { + pid, err := beaconhttp.StringFromRequest(r, "peer_id") + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + ret, err := a.sentinel.PeersInfo(r.Context(), &sentinel.PeersInfoRequest{}) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + // find the peer with matching enr + for _, p := range ret.Peers { + if p.Pid == pid { + if err := json.NewEncoder(w).Encode(map[string]interface{}{ + "data": peer{ + PeerID: p.Pid, + State: p.State, + Enr: p.Enr, + LastSeenP2PAddress: p.Address, + Direction: p.Direction, + AgentVersion: p.AgentVersion, + }, + }); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + return + } + } + http.Error(w, "peer not found", http.StatusNotFound) +} + +func (a *ApiHandler) GetEthV1NodeIdentity(w http.ResponseWriter, r *http.Request) { + id, err := a.sentinel.Identity(r.Context(), &sentinel.EmptyMessage{}) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + if err := json.NewEncoder(w).Encode(map[string]interface{}{ + "data": map[string]interface{}{ + "peer_id": id.Pid, + "enr": id.Enr, + "p2p_addresses": id.P2PAddresses, + "discovery_addresses": id.DiscoveryAddresses, + "metadata": map[string]interface{}{ + "seq": strconv.FormatUint(id.Metadata.Seq, 10), + "attnets": id.Metadata.Attnets, + "syncnets": id.Metadata.Syncnets, + }, + }, + }); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} + +func (a *ApiHandler) GetEthV1NodeSyncing(w http.ResponseWriter, r *http.Request) { + currentSlot := a.ethClock.GetCurrentSlot() + + if err := json.NewEncoder(w).Encode(map[string]interface{}{ + "data": map[string]interface{}{ + "head_slot": strconv.FormatUint(a.syncedData.HeadSlot(), 10), + "sync_distance": strconv.FormatUint(currentSlot-a.syncedData.HeadSlot(), 10), + "is_syncing": a.syncedData.Syncing(), + "is_optimistic": false, // needs to change + "el_offline": false, + }, + }); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} diff --git a/cl/beacon/handler/pool.go b/cl/beacon/handler/pool.go index 6b3a07af7b0..e586f3a03ff 100644 --- a/cl/beacon/handler/pool.go +++ b/cl/beacon/handler/pool.go @@ -1,22 +1,26 @@ package handler import ( + "bytes" "encoding/json" - "fmt" + "errors" "net/http" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/gossip" + "github.com/ledgerwatch/erigon/cl/phase1/network/services" + "github.com/ledgerwatch/erigon/cl/phase1/network/subnets" + "github.com/ledgerwatch/log/v3" ) func (a *ApiHandler) GetEthV1BeaconPoolVoluntaryExits(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { - return newBeaconResponse(a.operationsPool.VoluntaryExistsPool.Raw()), nil + return newBeaconResponse(a.operationsPool.VoluntaryExitsPool.Raw()), nil } func (a *ApiHandler) GetEthV1BeaconPoolAttesterSlashings(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { - fmt.Println("GetEthV1BeaconPoolAttesterSlashings", a.operationsPool.AttesterSlashingsPool.Raw()) return newBeaconResponse(a.operationsPool.AttesterSlashingsPool.Raw()), nil } @@ -31,11 +35,11 @@ func (a *ApiHandler) GetEthV1BeaconPoolBLSExecutionChanges(w http.ResponseWriter func (a *ApiHandler) GetEthV1BeaconPoolAttestations(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { slot, err := beaconhttp.Uint64FromQueryParams(r, "slot") if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } committeeIndex, err := beaconhttp.Uint64FromQueryParams(r, "committee_index") if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } atts := a.operationsPool.AttestationsPool.Raw() if slot == nil && committeeIndex == nil { @@ -46,7 +50,7 @@ func (a *ApiHandler) GetEthV1BeaconPoolAttestations(w http.ResponseWriter, r *ht if slot != nil && atts[i].AttestantionData().Slot() != *slot { continue } - if committeeIndex != nil && atts[i].AttestantionData().ValidatorIndex() != *committeeIndex { + if committeeIndex != nil && atts[i].AttestantionData().CommitteeIndex() != *committeeIndex { continue } ret = append(ret, atts[i]) @@ -55,16 +59,77 @@ func (a *ApiHandler) GetEthV1BeaconPoolAttestations(w http.ResponseWriter, r *ht return newBeaconResponse(ret), nil } +func (a *ApiHandler) PostEthV1BeaconPoolAttestations(w http.ResponseWriter, r *http.Request) { + req := []*solid.Attestation{} + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + beaconhttp.NewEndpointError(http.StatusBadRequest, err).WriteTo(w) + return + } + + headState := a.syncedData.HeadState() + if headState == nil { + beaconhttp.NewEndpointError(http.StatusServiceUnavailable, errors.New("head state not available")).WriteTo(w) + return + } + failures := []poolingFailure{} + for i, attestation := range req { + var ( + slot = attestation.AttestantionData().Slot() + cIndex = attestation.AttestantionData().CommitteeIndex() + committeeCountPerSlot = headState.CommitteeCount(slot / a.beaconChainCfg.SlotsPerEpoch) + subnet = subnets.ComputeSubnetForAttestation(committeeCountPerSlot, slot, cIndex, a.beaconChainCfg.SlotsPerEpoch, a.netConfig.AttestationSubnetCount) + ) + _ = i + if err := a.attestationService.ProcessMessage(r.Context(), &subnet, attestation); err != nil { + log.Warn("[Beacon REST] failed to process attestation", "err", err) + failures = append(failures, poolingFailure{ + Index: i, + Message: err.Error(), + }) + continue + } + if a.sentinel != nil { + encodedSSZ, err := attestation.EncodeSSZ(nil) + if err != nil { + beaconhttp.NewEndpointError(http.StatusInternalServerError, err).WriteTo(w) + return + } + if _, err := a.sentinel.PublishGossip(r.Context(), &sentinel.GossipData{ + Data: encodedSSZ, + Name: gossip.TopicNamePrefixBeaconAttestation, + SubnetId: &subnet, + }); err != nil { + beaconhttp.NewEndpointError(http.StatusInternalServerError, err).WriteTo(w) + return + } + } + } + if len(failures) > 0 { + errResp := poolingError{ + Code: http.StatusBadRequest, + Message: "some failures", + Failures: failures, + } + w.WriteHeader(http.StatusBadRequest) + if err := json.NewEncoder(w).Encode(errResp); err != nil { + log.Warn("failed to encode response", "err", err) + } + return + } + w.WriteHeader(http.StatusOK) +} + func (a *ApiHandler) PostEthV1BeaconPoolVoluntaryExits(w http.ResponseWriter, r *http.Request) { req := cltypes.SignedVoluntaryExit{} if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } - if err := a.forkchoiceStore.OnVoluntaryExit(&req, false); err != nil { + if err := a.voluntaryExitService.ProcessMessage(r.Context(), nil, &req); err != nil && !errors.Is(err, services.ErrIgnore) { http.Error(w, err.Error(), http.StatusBadRequest) return } + // Broadcast to gossip if a.sentinel != nil { encodedSSZ, err := req.EncodeSSZ(nil) @@ -79,7 +144,7 @@ func (a *ApiHandler) PostEthV1BeaconPoolVoluntaryExits(w http.ResponseWriter, r http.Error(w, err.Error(), http.StatusInternalServerError) return } - a.operationsPool.VoluntaryExistsPool.Insert(req.VoluntaryExit.ValidatorIndex, &req) + a.operationsPool.VoluntaryExitsPool.Insert(req.VoluntaryExit.ValidatorIndex, &req) } // Only write 200 w.WriteHeader(http.StatusOK) @@ -120,7 +185,7 @@ func (a *ApiHandler) PostEthV1BeaconPoolProposerSlashings(w http.ResponseWriter, http.Error(w, err.Error(), http.StatusBadRequest) return } - if err := a.forkchoiceStore.OnProposerSlashing(&req, false); err != nil { + if err := a.proposerSlashingService.ProcessMessage(r.Context(), nil, &req); err != nil && !errors.Is(err, services.ErrIgnore) { http.Error(w, err.Error(), http.StatusBadRequest) return } @@ -151,7 +216,7 @@ type poolingFailure struct { type poolingError struct { Code int `json:"code"` Message string `json:"message"` - Failures []poolingFailure `json:"failures"` + Failures []poolingFailure `json:"failures,omitempty"` } func (a *ApiHandler) PostEthV1BeaconPoolBlsToExecutionChanges(w http.ResponseWriter, r *http.Request) { @@ -162,7 +227,7 @@ func (a *ApiHandler) PostEthV1BeaconPoolBlsToExecutionChanges(w http.ResponseWri } failures := []poolingFailure{} for _, v := range req { - if err := a.forkchoiceStore.OnBlsToExecutionChange(v, false); err != nil { + if err := a.blsToExecutionChangeService.ProcessMessage(r.Context(), nil, v); err != nil && !errors.Is(err, services.ErrIgnore) { failures = append(failures, poolingFailure{Index: len(failures), Message: err.Error()}) continue } @@ -202,7 +267,8 @@ func (a *ApiHandler) PostEthV1ValidatorAggregatesAndProof(w http.ResponseWriter, failures := []poolingFailure{} for _, v := range req { - if err := a.forkchoiceStore.OnAggregateAndProof(v, false); err != nil { + if err := a.aggregateAndProofsService.ProcessMessage(r.Context(), nil, v); err != nil && !errors.Is(err, services.ErrIgnore) { + log.Warn("[Beacon REST] failed to process bls-change", "err", err) failures = append(failures, poolingFailure{Index: len(failures), Message: err.Error()}) continue } @@ -211,15 +277,123 @@ func (a *ApiHandler) PostEthV1ValidatorAggregatesAndProof(w http.ResponseWriter, encodedSSZ, err := v.EncodeSSZ(nil) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) + log.Warn("[Beacon REST] failed to encode aggregate and proof", "err", err) return } if _, err := a.sentinel.PublishGossip(r.Context(), &sentinel.GossipData{ Data: encodedSSZ, Name: gossip.TopicNameBeaconAggregateAndProof, }); err != nil { + log.Warn("[Beacon REST] failed to publish gossip", "err", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } } } } + +// PostEthV1BeaconPoolSyncCommittees is a handler for POST /eth/v1/beacon/pool/sync_committees. +// it receives a list of sync committee messages and adds them to the sync committee pool. +func (a *ApiHandler) PostEthV1BeaconPoolSyncCommittees(w http.ResponseWriter, r *http.Request) { + msgs := []*cltypes.SyncCommitteeMessage{} + if err := json.NewDecoder(r.Body).Decode(&msgs); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + s := a.syncedData.HeadState() + if s == nil { + http.Error(w, "node is not synced", http.StatusServiceUnavailable) + return + } + failures := []poolingFailure{} + for idx, v := range msgs { + publishingSubnets, err := subnets.ComputeSubnetsForSyncCommittee(s, v.ValidatorIndex) + if err != nil { + failures = append(failures, poolingFailure{Index: idx, Message: err.Error()}) + continue + } + for _, subnet := range publishingSubnets { + if err = a.syncCommitteeMessagesService.ProcessMessage(r.Context(), &subnet, v); err != nil && !errors.Is(err, services.ErrIgnore) { + log.Warn("[Beacon REST] failed to process attestation", "err", err) + failures = append(failures, poolingFailure{Index: idx, Message: err.Error()}) + break + } + // Broadcast to gossip + if a.sentinel != nil { + encodedSSZ, err := v.EncodeSSZ(nil) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + subnetId := subnet // this effectively makes a copy + if _, err := a.sentinel.PublishGossip(r.Context(), &sentinel.GossipData{ + Data: encodedSSZ, + Name: gossip.TopicNamePrefixSyncCommittee, + SubnetId: &subnetId, + }); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + } + } + } + if len(failures) > 0 { + w.WriteHeader(http.StatusBadRequest) + json.NewEncoder(w).Encode(poolingError{Code: http.StatusBadRequest, Message: "some failures", Failures: failures}) + return + } + // Only write 200 + w.WriteHeader(http.StatusOK) +} + +// PostEthV1ValidatorContributionsAndProofs is a handler for POST /eth/v1/validator/contributions_and_proofs. +// it receives a list of signed contributions and proofs and adds them to the sync committee pool. +func (a *ApiHandler) PostEthV1ValidatorContributionsAndProofs(w http.ResponseWriter, r *http.Request) { + msgs := []*cltypes.SignedContributionAndProof{} + if err := json.NewDecoder(r.Body).Decode(&msgs); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + s := a.syncedData.HeadState() + if s == nil { + http.Error(w, "node is not synced", http.StatusServiceUnavailable) + return + } + failures := []poolingFailure{} + var err error + for idx, v := range msgs { + if bytes.Equal(v.Message.Contribution.AggregationBits, make([]byte, len(v.Message.Contribution.AggregationBits))) { + continue // skip empty contributions + } + if err = a.syncContributionAndProofsService.ProcessMessage(r.Context(), nil, v); err != nil && !errors.Is(err, services.ErrIgnore) { + log.Warn("[Beacon REST] failed to process sync contribution", "err", err) + failures = append(failures, poolingFailure{Index: idx, Message: err.Error()}) + continue + } + // Broadcast to gossip + if a.sentinel != nil { + encodedSSZ, err := v.EncodeSSZ(nil) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + log.Warn("[Beacon REST] failed to encode sync contribution", "err", err) + return + } + if _, err := a.sentinel.PublishGossip(r.Context(), &sentinel.GossipData{ + Data: encodedSSZ, + Name: gossip.TopicNameSyncCommitteeContributionAndProof, + }); err != nil { + log.Warn("[Beacon REST] failed to publish gossip", "err", err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + } + } + + if len(failures) > 0 { + w.WriteHeader(http.StatusBadRequest) + json.NewEncoder(w).Encode(poolingError{Code: http.StatusBadRequest, Message: "some failures", Failures: failures}) + return + } + // Only write 200 + w.WriteHeader(http.StatusOK) +} diff --git a/cl/beacon/handler/pool_test.go b/cl/beacon/handler/pool_test.go new file mode 100644 index 00000000000..793b4d82079 --- /dev/null +++ b/cl/beacon/handler/pool_test.go @@ -0,0 +1,339 @@ +package handler + +import ( + "bytes" + "encoding/json" + "net/http/httptest" + "testing" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" +) + +func TestPoolAttesterSlashings(t *testing.T) { + attesterSlashing := &cltypes.AttesterSlashing{ + Attestation_1: &cltypes.IndexedAttestation{ + AttestingIndices: solid.NewRawUint64List(2048, []uint64{2, 3, 4, 5, 6}), + Data: solid.NewAttestationData(), + }, + Attestation_2: &cltypes.IndexedAttestation{ + AttestingIndices: solid.NewRawUint64List(2048, []uint64{2, 3, 4, 1, 6}), + Data: solid.NewAttestationData(), + }, + } + // find server + _, _, _, _, _, handler, _, _, _, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + server := httptest.NewServer(handler.mux) + defer server.Close() + // json + req, err := json.Marshal(attesterSlashing) + require.NoError(t, err) + // post attester slashing + resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/attester_slashings", "application/json", bytes.NewBuffer(req)) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + // get attester slashings + resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/attester_slashings") + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + out := struct { + Data []*cltypes.AttesterSlashing `json:"data"` + }{ + Data: []*cltypes.AttesterSlashing{ + cltypes.NewAttesterSlashing(), + }, + } + + err = json.NewDecoder(resp.Body).Decode(&out) + require.NoError(t, err) + + require.Equal(t, 1, len(out.Data)) + require.Equal(t, attesterSlashing, out.Data[0]) +} + +func TestPoolProposerSlashings(t *testing.T) { + proposerSlashing := &cltypes.ProposerSlashing{ + Header1: &cltypes.SignedBeaconBlockHeader{ + Header: &cltypes.BeaconBlockHeader{ + Slot: 1, + ProposerIndex: 3, + }, + }, + Header2: &cltypes.SignedBeaconBlockHeader{ + Header: &cltypes.BeaconBlockHeader{ + Slot: 2, + ProposerIndex: 4, + }, + }, + } + // find server + _, _, _, _, _, handler, _, _, _, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + server := httptest.NewServer(handler.mux) + defer server.Close() + // json + req, err := json.Marshal(proposerSlashing) + require.NoError(t, err) + + // post attester slashing + resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/proposer_slashings", "application/json", bytes.NewBuffer(req)) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + // get attester slashings + resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/proposer_slashings") + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + out := struct { + Data []*cltypes.ProposerSlashing `json:"data"` + }{ + Data: []*cltypes.ProposerSlashing{}, + } + + err = json.NewDecoder(resp.Body).Decode(&out) + require.NoError(t, err) + + require.Equal(t, 1, len(out.Data)) + require.Equal(t, proposerSlashing, out.Data[0]) +} + +func TestPoolVoluntaryExits(t *testing.T) { + voluntaryExit := &cltypes.SignedVoluntaryExit{ + VoluntaryExit: &cltypes.VoluntaryExit{ + Epoch: 1, + ValidatorIndex: 3, + }, + } + // find server + _, _, _, _, _, handler, _, _, _, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + server := httptest.NewServer(handler.mux) + defer server.Close() + // json + req, err := json.Marshal(voluntaryExit) + require.NoError(t, err) + // post attester slashing + resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/voluntary_exits", "application/json", bytes.NewBuffer(req)) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + // get attester slashings + resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/voluntary_exits") + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + out := struct { + Data []*cltypes.SignedVoluntaryExit `json:"data"` + }{ + Data: []*cltypes.SignedVoluntaryExit{}, + } + + err = json.NewDecoder(resp.Body).Decode(&out) + require.NoError(t, err) + + require.Equal(t, 1, len(out.Data)) + require.Equal(t, voluntaryExit, out.Data[0]) +} + +func TestPoolBlsToExecutionChainges(t *testing.T) { + msg := []*cltypes.SignedBLSToExecutionChange{ + { + Message: &cltypes.BLSToExecutionChange{ + ValidatorIndex: 45, + }, + Signature: libcommon.Bytes96{2}, + }, + { + Message: &cltypes.BLSToExecutionChange{ + ValidatorIndex: 46, + }, + }, + } + // find server + _, _, _, _, _, handler, _, _, _, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + server := httptest.NewServer(handler.mux) + defer server.Close() + // json + req, err := json.Marshal(msg) + require.NoError(t, err) + // post attester slashing + resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/bls_to_execution_changes", "application/json", bytes.NewBuffer(req)) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + // get attester slashings + resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/bls_to_execution_changes") + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + out := struct { + Data []*cltypes.SignedBLSToExecutionChange `json:"data"` + }{ + Data: []*cltypes.SignedBLSToExecutionChange{}, + } + + err = json.NewDecoder(resp.Body).Decode(&out) + require.NoError(t, err) + + require.Equal(t, 2, len(out.Data)) + require.Equal(t, msg[0], out.Data[0]) + require.Equal(t, msg[1], out.Data[1]) +} + +func TestPoolAggregatesAndProofs(t *testing.T) { + msg := []*cltypes.SignedAggregateAndProof{ + { + Message: &cltypes.AggregateAndProof{ + Aggregate: solid.NewAttestionFromParameters([]byte{1, 2}, solid.NewAttestationData(), libcommon.Bytes96{3, 45, 6}), + }, + Signature: libcommon.Bytes96{2}, + }, + { + Message: &cltypes.AggregateAndProof{ + Aggregate: solid.NewAttestionFromParameters([]byte{1, 2, 5, 6}, solid.NewAttestationData(), libcommon.Bytes96{3, 0, 6}), + }, + Signature: libcommon.Bytes96{2, 3, 5}, + }, + } + // find server + _, _, _, _, _, handler, _, _, _, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + server := httptest.NewServer(handler.mux) + defer server.Close() + // json + req, err := json.Marshal(msg) + require.NoError(t, err) + // post attester slashing + resp, err := server.Client().Post(server.URL+"/eth/v1/validator/aggregate_and_proofs", "application/json", bytes.NewBuffer(req)) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + // get attester slashings + resp, err = server.Client().Get(server.URL + "/eth/v1/beacon/pool/attestations") + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + out := struct { + Data []*solid.Attestation `json:"data"` + }{ + Data: []*solid.Attestation{}, + } + + err = json.NewDecoder(resp.Body).Decode(&out) + require.NoError(t, err) + + require.Equal(t, 2, len(out.Data)) + require.Equal(t, msg[0].Message.Aggregate, out.Data[0]) + require.Equal(t, msg[1].Message.Aggregate, out.Data[1]) +} + +func TestPoolSyncCommittees(t *testing.T) { + msgs := []*cltypes.SyncCommitteeMessage{ + { + Slot: 1, + BeaconBlockRoot: libcommon.Hash{1, 2, 3, 4, 5, 6, 7, 8}, + ValidatorIndex: 3, + }, + } + _, _, _, s, _, handler, _, sd, _, _ := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + + sd.OnHeadState(s) + server := httptest.NewServer(handler.mux) + defer server.Close() + // json + req, err := json.Marshal(msgs) + require.NoError(t, err) + // post attester slashing + resp, err := server.Client().Post(server.URL+"/eth/v1/beacon/pool/sync_committees", "application/json", bytes.NewBuffer(req)) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + // get attester slashings + resp, err = server.Client().Get(server.URL + "/eth/v1/validator/sync_committee_contribution?slot=1&subcommittee_index=0&beacon_block_root=0x0102030405060708000000000000000000000000000000000000000000000000") + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + out := struct { + Data *cltypes.Contribution `json:"data"` + }{} + + err = json.NewDecoder(resp.Body).Decode(&out) + require.NoError(t, err) + + require.Equal(t, out.Data, &cltypes.Contribution{ + Slot: 1, + BeaconBlockRoot: libcommon.Hash{1, 2, 3, 4, 5, 6, 7, 8}, + SubcommitteeIndex: 0, + AggregationBits: make([]byte, cltypes.SyncCommitteeAggregationBitsSize), + }) +} + +func TestPoolSyncContributionAndProofs(t *testing.T) { + aggrBits := make([]byte, cltypes.SyncCommitteeAggregationBitsSize) + aggrBits[0] = 1 + msgs := []*cltypes.SignedContributionAndProof{ + { + Message: &cltypes.ContributionAndProof{ + Contribution: &cltypes.Contribution{ + Slot: 1, + BeaconBlockRoot: libcommon.Hash{1, 2, 3, 4, 5, 6, 7, 8}, + AggregationBits: aggrBits, + }, + }, + }, + } + _, _, _, s, _, handler, _, sd, _, _ := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + + sd.OnHeadState(s) + server := httptest.NewServer(handler.mux) + defer server.Close() + // json + req, err := json.Marshal(msgs) + require.NoError(t, err) + // post attester slashing + resp, err := server.Client().Post(server.URL+"/eth/v1/validator/contribution_and_proofs", "application/json", bytes.NewBuffer(req)) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + // get attester slashings + resp, err = server.Client().Get(server.URL + "/eth/v1/validator/sync_committee_contribution?slot=1&subcommittee_index=0&beacon_block_root=0x0102030405060708000000000000000000000000000000000000000000000000") + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) + out := struct { + Data *cltypes.Contribution `json:"data"` + }{} + + err = json.NewDecoder(resp.Body).Decode(&out) + require.NoError(t, err) + + require.Equal(t, out.Data, &cltypes.Contribution{ + Slot: 1, + BeaconBlockRoot: libcommon.Hash{1, 2, 3, 4, 5, 6, 7, 8}, + SubcommitteeIndex: 0, + AggregationBits: aggrBits, + }) +} diff --git a/cl/beacon/handler/rewards.go b/cl/beacon/handler/rewards.go index cb41352986f..a4c67e554b5 100644 --- a/cl/beacon/handler/rewards.go +++ b/cl/beacon/handler/rewards.go @@ -2,6 +2,7 @@ package handler import ( "encoding/json" + "fmt" "io" "net/http" "sort" @@ -23,7 +24,7 @@ type blockRewardsResponse struct { Total uint64 `json:"total,string"` } -func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconRewardsBlocks(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { @@ -44,7 +45,7 @@ func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*b return nil, err } if blk == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "block not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found")) } slot := blk.Header.Slot isFinalized := slot <= a.forkchoiceStore.FinalizedSlot() @@ -52,7 +53,7 @@ func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*b // finalized case blkRewards, ok := a.forkchoiceStore.BlockRewards(root) if !ok { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "block not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found")) } return newBeaconResponse(blockRewardsResponse{ ProposerIndex: blk.Header.ProposerIndex, @@ -68,7 +69,7 @@ func (a *ApiHandler) getBlockRewards(w http.ResponseWriter, r *http.Request) (*b return nil, err } if slotData == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "could not read historical block rewards, node may not be archive or it still processing historical states") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read historical block rewards, node may not be archive or it still processing historical states")) } return newBeaconResponse(blockRewardsResponse{ ProposerIndex: blk.Header.ProposerIndex, @@ -85,7 +86,7 @@ type syncCommitteeReward struct { Reward int64 `json:"reward,string"` } -func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) PostEthV1BeaconRewardsSyncCommittees(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -98,12 +99,12 @@ func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Req // read the entire body jsonBytes, err := io.ReadAll(r.Body) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } // parse json body request if len(jsonBytes) > 0 { if err := json.Unmarshal(jsonBytes, &req); err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } } filterIndicies, err := parseQueryValidatorIndicies(tx, req) @@ -124,11 +125,12 @@ func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Req return nil, err } if blk == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "block not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("block not found")) } + slot := blk.Block.Slot version := a.beaconChainCfg.GetCurrentStateVersion(blk.Block.Slot / a.beaconChainCfg.SlotsPerEpoch) if version < clparams.AltairVersion { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "sync committee rewards not available before Altair fork") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("sync committee rewards not available before Altair fork")) } // retrieve the state we need ----------------------------------------------- // We need: @@ -148,14 +150,14 @@ func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Req ) if isFinalized { if !isCanonical { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "non-canonical finalized block not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("non-canonical finalized block not found")) } epochData, err := state_accessors.ReadEpochData(tx, blk.Block.Slot) if err != nil { return nil, err } if epochData == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "could not read historical sync committee rewards, node may not be archive or it still processing historical states") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read historical sync committee rewards, node may not be archive or it still processing historical states")) } totalActiveBalance = epochData.TotalActiveBalance syncCommittee, err = state_accessors.ReadCurrentSyncCommittee(tx, a.beaconChainCfg.RoundSlotToSyncCommitteePeriod(blk.Block.Slot)) @@ -163,17 +165,17 @@ func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Req return nil, err } if syncCommittee == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "could not read historical sync committee, node may not be archive or it still processing historical states") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read historical sync committee, node may not be archive or it still processing historical states")) } } else { var ok bool - syncCommittee, _, ok = a.forkchoiceStore.GetSyncCommittees(root) + syncCommittee, _, ok = a.forkchoiceStore.GetSyncCommittees(a.beaconChainCfg.SyncCommitteePeriod(slot)) if !ok { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "non-finalized sync committee not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("non-finalized sync committee not found")) } totalActiveBalance, ok = a.forkchoiceStore.TotalActiveBalance(root) if !ok { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "non-finalized total active balance not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("non-finalized total active balance not found")) } } committee := syncCommittee.GetCommittee() @@ -198,7 +200,7 @@ func (a *ApiHandler) getSyncCommitteesRewards(w http.ResponseWriter, r *http.Req return nil, err } if !ok { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "sync committee public key not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("sync committee public key not found")) } if len(filterIndiciesSet) > 0 { if _, ok := filterIndiciesSet[idx]; !ok { diff --git a/cl/beacon/handler/rewards_test.go b/cl/beacon/handler/rewards_test.go new file mode 100644 index 00000000000..9b65d123811 --- /dev/null +++ b/cl/beacon/handler/rewards_test.go @@ -0,0 +1,143 @@ +package handler + +import ( + "fmt" + "io" + "math" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/common" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" +) + +func TestGetBlockRewards(t *testing.T) { + _, blocks, _, _, _, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + var err error + fcu.HeadVal, err = blocks[len(blocks)-5].Block.HashSSZ() + require.NoError(t, err) + genesisVal, err := blocks[0].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, math.MaxUint64) + fcu.FinalizedSlotVal = math.MaxUint64 + + cases := []struct { + blockID string + code int + expectedResp string + }{ + { + blockID: "0x" + common.Bytes2Hex(fcu.HeadVal[:]), + code: http.StatusOK, + expectedResp: `{"data":{"proposer_index":"203","attestations":"332205","proposer_slashings":"0","attester_slashings":"0","sync_aggregate":"0","total":"332205"},"execution_optimistic":false,"finalized":true}` + "\n", + }, + { + blockID: "0x" + common.Bytes2Hex(genesisVal[:]), + code: http.StatusOK, + expectedResp: `{"data":{"proposer_index":"98","attestations":"332205","proposer_slashings":"0","attester_slashings":"0","sync_aggregate":"0","total":"332205"},"execution_optimistic":false,"finalized":true}` + "\n", + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + } + + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} + resp, err := http.Get(server.URL + "/eth/v1/beacon/rewards/blocks/" + c.blockID) + require.NoError(t, err) + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + + // unmarshal the json + out, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, c.expectedResp, string(out)) + }) + } +} + +func TestPostSyncCommitteeRewards(t *testing.T) { + _, blocks, _, _, _, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + var err error + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + fcu.FinalizedSlotVal = math.MaxInt64 + + fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, 99999999) + + cases := []struct { + name string + blockId string + code int + request string + expected string + }{ + { + name: "all validators", + blockId: "0x" + common.Bytes2Hex(fcu.HeadVal[:]), + code: http.StatusOK, + expected: `{"data":[{"validator_index":"0","reward":"-698"},{"validator_index":"1","reward":"-698"},{"validator_index":"2","reward":"-698"},{"validator_index":"3","reward":"-698"},{"validator_index":"4","reward":"-698"},{"validator_index":"5","reward":"-698"},{"validator_index":"6","reward":"-698"},{"validator_index":"7","reward":"-698"},{"validator_index":"8","reward":"-698"},{"validator_index":"9","reward":"-698"},{"validator_index":"10","reward":"-698"},{"validator_index":"11","reward":"-698"},{"validator_index":"12","reward":"-698"},{"validator_index":"13","reward":"-698"},{"validator_index":"14","reward":"-698"},{"validator_index":"15","reward":"-698"},{"validator_index":"16","reward":"-698"},{"validator_index":"17","reward":"-698"},{"validator_index":"18","reward":"-698"},{"validator_index":"19","reward":"-698"},{"validator_index":"20","reward":"-698"},{"validator_index":"21","reward":"-698"},{"validator_index":"22","reward":"-698"},{"validator_index":"23","reward":"-698"},{"validator_index":"24","reward":"-698"},{"validator_index":"25","reward":"-698"},{"validator_index":"26","reward":"-698"},{"validator_index":"27","reward":"-698"},{"validator_index":"28","reward":"-698"},{"validator_index":"29","reward":"-698"},{"validator_index":"30","reward":"-698"},{"validator_index":"31","reward":"-698"},{"validator_index":"32","reward":"-698"},{"validator_index":"33","reward":"-698"},{"validator_index":"34","reward":"-698"},{"validator_index":"35","reward":"-698"},{"validator_index":"36","reward":"-698"},{"validator_index":"37","reward":"-698"},{"validator_index":"38","reward":"-698"},{"validator_index":"39","reward":"-698"},{"validator_index":"40","reward":"-698"},{"validator_index":"41","reward":"-698"},{"validator_index":"42","reward":"-698"},{"validator_index":"43","reward":"-698"},{"validator_index":"44","reward":"-698"},{"validator_index":"45","reward":"-698"},{"validator_index":"46","reward":"-698"},{"validator_index":"47","reward":"-698"},{"validator_index":"48","reward":"-698"},{"validator_index":"49","reward":"-698"},{"validator_index":"50","reward":"-698"},{"validator_index":"51","reward":"-698"},{"validator_index":"52","reward":"-698"},{"validator_index":"53","reward":"-698"},{"validator_index":"54","reward":"-698"},{"validator_index":"55","reward":"-698"},{"validator_index":"56","reward":"-698"},{"validator_index":"57","reward":"-698"},{"validator_index":"58","reward":"-698"},{"validator_index":"59","reward":"-698"},{"validator_index":"60","reward":"-698"},{"validator_index":"61","reward":"-698"},{"validator_index":"62","reward":"-698"},{"validator_index":"63","reward":"-698"},{"validator_index":"64","reward":"-698"},{"validator_index":"65","reward":"-698"},{"validator_index":"66","reward":"-698"},{"validator_index":"67","reward":"-698"},{"validator_index":"68","reward":"-698"},{"validator_index":"69","reward":"-698"},{"validator_index":"70","reward":"-698"},{"validator_index":"71","reward":"-698"},{"validator_index":"72","reward":"-698"},{"validator_index":"73","reward":"-698"},{"validator_index":"74","reward":"-698"},{"validator_index":"75","reward":"-698"},{"validator_index":"76","reward":"-698"},{"validator_index":"77","reward":"-698"},{"validator_index":"78","reward":"-698"},{"validator_index":"79","reward":"-698"},{"validator_index":"80","reward":"-698"},{"validator_index":"81","reward":"-698"},{"validator_index":"82","reward":"-698"},{"validator_index":"83","reward":"-698"},{"validator_index":"84","reward":"-698"},{"validator_index":"85","reward":"-698"},{"validator_index":"86","reward":"-698"},{"validator_index":"87","reward":"-698"},{"validator_index":"88","reward":"-698"},{"validator_index":"89","reward":"-698"},{"validator_index":"90","reward":"-698"},{"validator_index":"91","reward":"-698"},{"validator_index":"92","reward":"-698"},{"validator_index":"93","reward":"-698"},{"validator_index":"94","reward":"-698"},{"validator_index":"95","reward":"-698"},{"validator_index":"96","reward":"-698"},{"validator_index":"97","reward":"-698"},{"validator_index":"98","reward":"-698"},{"validator_index":"99","reward":"-698"},{"validator_index":"100","reward":"-698"},{"validator_index":"101","reward":"-698"},{"validator_index":"102","reward":"-698"},{"validator_index":"103","reward":"-698"},{"validator_index":"104","reward":"-698"},{"validator_index":"105","reward":"-698"},{"validator_index":"106","reward":"-698"},{"validator_index":"107","reward":"-698"},{"validator_index":"108","reward":"-698"},{"validator_index":"109","reward":"-698"},{"validator_index":"110","reward":"-698"},{"validator_index":"111","reward":"-698"},{"validator_index":"112","reward":"-698"},{"validator_index":"113","reward":"-698"},{"validator_index":"114","reward":"-698"},{"validator_index":"115","reward":"-698"},{"validator_index":"116","reward":"-698"},{"validator_index":"117","reward":"-698"},{"validator_index":"118","reward":"-698"},{"validator_index":"119","reward":"-698"},{"validator_index":"120","reward":"-698"},{"validator_index":"121","reward":"-698"},{"validator_index":"122","reward":"-698"},{"validator_index":"123","reward":"-698"},{"validator_index":"124","reward":"-698"},{"validator_index":"125","reward":"-698"},{"validator_index":"126","reward":"-698"},{"validator_index":"127","reward":"-698"},{"validator_index":"128","reward":"-698"},{"validator_index":"129","reward":"-698"},{"validator_index":"130","reward":"-698"},{"validator_index":"131","reward":"-698"},{"validator_index":"132","reward":"-698"},{"validator_index":"133","reward":"-698"},{"validator_index":"134","reward":"-698"},{"validator_index":"135","reward":"-698"},{"validator_index":"136","reward":"-698"},{"validator_index":"137","reward":"-698"},{"validator_index":"138","reward":"-698"},{"validator_index":"139","reward":"-698"},{"validator_index":"140","reward":"-698"},{"validator_index":"141","reward":"-698"},{"validator_index":"142","reward":"-698"},{"validator_index":"143","reward":"-698"},{"validator_index":"144","reward":"-698"},{"validator_index":"145","reward":"-698"},{"validator_index":"146","reward":"-698"},{"validator_index":"147","reward":"-698"},{"validator_index":"148","reward":"-698"},{"validator_index":"149","reward":"-698"},{"validator_index":"150","reward":"-698"},{"validator_index":"151","reward":"-698"},{"validator_index":"152","reward":"-698"},{"validator_index":"153","reward":"-698"},{"validator_index":"154","reward":"-698"},{"validator_index":"155","reward":"-698"},{"validator_index":"156","reward":"-698"},{"validator_index":"157","reward":"-698"},{"validator_index":"158","reward":"-698"},{"validator_index":"159","reward":"-698"},{"validator_index":"160","reward":"-698"},{"validator_index":"161","reward":"-698"},{"validator_index":"162","reward":"-698"},{"validator_index":"163","reward":"-698"},{"validator_index":"164","reward":"-698"},{"validator_index":"165","reward":"-698"},{"validator_index":"166","reward":"-698"},{"validator_index":"167","reward":"-698"},{"validator_index":"168","reward":"-698"},{"validator_index":"169","reward":"-698"},{"validator_index":"170","reward":"-698"},{"validator_index":"171","reward":"-698"},{"validator_index":"172","reward":"-698"},{"validator_index":"173","reward":"-698"},{"validator_index":"174","reward":"-698"},{"validator_index":"175","reward":"-698"},{"validator_index":"176","reward":"-698"},{"validator_index":"177","reward":"-698"},{"validator_index":"178","reward":"-698"},{"validator_index":"179","reward":"-698"},{"validator_index":"180","reward":"-698"},{"validator_index":"181","reward":"-698"},{"validator_index":"182","reward":"-698"},{"validator_index":"183","reward":"-698"},{"validator_index":"184","reward":"-698"},{"validator_index":"185","reward":"-698"},{"validator_index":"186","reward":"-698"},{"validator_index":"187","reward":"-698"},{"validator_index":"188","reward":"-698"},{"validator_index":"189","reward":"-698"},{"validator_index":"190","reward":"-698"},{"validator_index":"191","reward":"-698"},{"validator_index":"192","reward":"-698"},{"validator_index":"193","reward":"-698"},{"validator_index":"194","reward":"-698"},{"validator_index":"195","reward":"-698"},{"validator_index":"196","reward":"-698"},{"validator_index":"197","reward":"-698"},{"validator_index":"198","reward":"-698"},{"validator_index":"199","reward":"-698"},{"validator_index":"200","reward":"-698"},{"validator_index":"201","reward":"-698"},{"validator_index":"202","reward":"-698"},{"validator_index":"203","reward":"-698"},{"validator_index":"204","reward":"-698"},{"validator_index":"205","reward":"-698"},{"validator_index":"206","reward":"-698"},{"validator_index":"207","reward":"-698"},{"validator_index":"208","reward":"-698"},{"validator_index":"209","reward":"-698"},{"validator_index":"210","reward":"-698"},{"validator_index":"211","reward":"-698"},{"validator_index":"212","reward":"-698"},{"validator_index":"213","reward":"-698"},{"validator_index":"214","reward":"-698"},{"validator_index":"215","reward":"-698"},{"validator_index":"216","reward":"-698"},{"validator_index":"217","reward":"-698"},{"validator_index":"218","reward":"-698"},{"validator_index":"219","reward":"-698"},{"validator_index":"220","reward":"-698"},{"validator_index":"221","reward":"-698"},{"validator_index":"222","reward":"-698"},{"validator_index":"223","reward":"-698"},{"validator_index":"224","reward":"-698"},{"validator_index":"225","reward":"-698"},{"validator_index":"226","reward":"-698"},{"validator_index":"227","reward":"-698"},{"validator_index":"228","reward":"-698"},{"validator_index":"229","reward":"-698"},{"validator_index":"230","reward":"-698"},{"validator_index":"231","reward":"-698"},{"validator_index":"232","reward":"-698"},{"validator_index":"233","reward":"-698"},{"validator_index":"234","reward":"-698"},{"validator_index":"235","reward":"-698"},{"validator_index":"236","reward":"-698"},{"validator_index":"237","reward":"-698"},{"validator_index":"238","reward":"-698"},{"validator_index":"239","reward":"-698"},{"validator_index":"240","reward":"-698"},{"validator_index":"241","reward":"-698"},{"validator_index":"242","reward":"-698"},{"validator_index":"243","reward":"-698"},{"validator_index":"244","reward":"-698"},{"validator_index":"245","reward":"-698"},{"validator_index":"246","reward":"-698"},{"validator_index":"247","reward":"-698"},{"validator_index":"248","reward":"-698"},{"validator_index":"249","reward":"-698"},{"validator_index":"250","reward":"-698"},{"validator_index":"251","reward":"-698"},{"validator_index":"252","reward":"-698"},{"validator_index":"253","reward":"-698"},{"validator_index":"254","reward":"-698"},{"validator_index":"255","reward":"-698"}],"execution_optimistic":false,"finalized":true}` + "\n", + }, + { + blockId: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + name: "2 validators", + blockId: "0x" + common.Bytes2Hex(fcu.HeadVal[:]), + request: `["1","4"]`, + code: http.StatusOK, + expected: `{"data":[{"validator_index":"1","reward":"-698"},{"validator_index":"4","reward":"-698"}],"execution_optimistic":false,"finalized":true}` + "\n", // Add your expected response + }, + } + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + url := fmt.Sprintf("%s/eth/v1/beacon/rewards/sync_committee/%s", server.URL, c.blockId) + + // Create a request + req, err := http.NewRequest("POST", url, strings.NewReader(c.request)) + require.NoError(t, err) + req.Header.Set("Content-Type", "application/json") + + // Perform the request + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + defer resp.Body.Close() + + // Check status code + require.Equal(t, c.code, resp.StatusCode) + + if resp.StatusCode != http.StatusOK { + return + } + + // Read the response body + out, err := io.ReadAll(resp.Body) + require.NoError(t, err) + if string(out) != c.expected { + panic(string(out)) + } + // Compare the response with the expected result + require.Equal(t, c.expected, string(out)) + }) + } +} diff --git a/cl/beacon/handler/states.go b/cl/beacon/handler/states.go index e232084d1e2..c4436429a0a 100644 --- a/cl/beacon/handler/states.go +++ b/cl/beacon/handler/states.go @@ -82,11 +82,11 @@ func (a *ApiHandler) getStateFork(w http.ResponseWriter, r *http.Request) (*beac blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } root, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, root) @@ -94,7 +94,7 @@ func (a *ApiHandler) getStateFork(w http.ResponseWriter, r *http.Request) (*beac return nil, err } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read block slot: %x", root)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read block slot: %x", root)) } epoch := *slot / a.beaconChainCfg.SlotsPerEpoch @@ -121,11 +121,11 @@ func (a *ApiHandler) getStateRoot(w http.ResponseWriter, r *http.Request) (*beac blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } root, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } stateRoot, err := beacon_indicies.ReadStateRootByBlockRoot(ctx, tx, root) @@ -133,7 +133,7 @@ func (a *ApiHandler) getStateRoot(w http.ResponseWriter, r *http.Request) (*beac return nil, err } if stateRoot == (libcommon.Hash{}) { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read block header: %x", root)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read block header: %x", root)) } slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, root) @@ -141,7 +141,7 @@ func (a *ApiHandler) getStateRoot(w http.ResponseWriter, r *http.Request) (*beac return nil, err } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read block header: %x", root)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read block header: %x", root)) } canonicalRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, *slot) if err != nil { @@ -163,17 +163,17 @@ func (a *ApiHandler) getFullState(w http.ResponseWriter, r *http.Request) (*beac blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } blockRoot, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } state, err := a.forkchoiceStore.GetStateAtBlockRoot(blockRoot, true) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } if state == nil { slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, blockRoot) @@ -182,21 +182,21 @@ func (a *ApiHandler) getFullState(w http.ResponseWriter, r *http.Request) (*beac } // Sanity checks slot and canonical data. if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read block slot: %x", blockRoot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read block slot: %x", blockRoot)) } canonicalRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, *slot) if err != nil { return nil, err } if canonicalRoot != blockRoot { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read state: %x", blockRoot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read state: %x", blockRoot)) } state, err := a.stateReader.ReadHistoricalState(ctx, tx, *slot) if err != nil { return nil, err } if state == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read state: %x", blockRoot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read state: %x", blockRoot)) } return newBeaconResponse(state).WithFinalized(true).WithVersion(state.Version()), nil } @@ -220,12 +220,12 @@ func (a *ApiHandler) getFinalityCheckpoints(w http.ResponseWriter, r *http.Reque defer tx.Rollback() blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } blockRoot, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, blockRoot) @@ -233,20 +233,20 @@ func (a *ApiHandler) getFinalityCheckpoints(w http.ResponseWriter, r *http.Reque return nil, err } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read block slot: %x", blockRoot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read block slot: %x", blockRoot)) } ok, finalizedCheckpoint, currentJustifiedCheckpoint, previousJustifiedCheckpoint := a.forkchoiceStore.GetFinalityCheckpoints(blockRoot) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } if !ok { currentJustifiedCheckpoint, previousJustifiedCheckpoint, finalizedCheckpoint, err = state_accessors.ReadCheckpoints(tx, a.beaconChainCfg.RoundSlotToEpoch(*slot)) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } if currentJustifiedCheckpoint == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read checkpoints: %x, %d", blockRoot, a.beaconChainCfg.RoundSlotToEpoch(*slot))) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read checkpoints: %x, %d", blockRoot, a.beaconChainCfg.RoundSlotToEpoch(*slot))) } } version := a.beaconChainCfg.GetCurrentStateVersion(*slot / a.beaconChainCfg.SlotsPerEpoch) @@ -277,12 +277,12 @@ func (a *ApiHandler) getSyncCommittees(w http.ResponseWriter, r *http.Request) ( defer tx.Rollback() blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } blockRoot, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, blockRoot) @@ -290,11 +290,11 @@ func (a *ApiHandler) getSyncCommittees(w http.ResponseWriter, r *http.Request) ( return nil, err } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read block slot: %x", blockRoot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read block slot: %x", blockRoot)) } // Code here - currentSyncCommittee, nextSyncCommittee, ok := a.forkchoiceStore.GetSyncCommittees(blockRoot) + currentSyncCommittee, nextSyncCommittee, ok := a.forkchoiceStore.GetSyncCommittees(a.beaconChainCfg.SyncCommitteePeriod(*slot)) if !ok { syncCommitteeSlot := a.beaconChainCfg.RoundSlotToSyncCommitteePeriod(*slot) // Check the main database if it cannot be found in the forkchoice store @@ -307,7 +307,7 @@ func (a *ApiHandler) getSyncCommittees(w http.ResponseWriter, r *http.Request) ( return nil, err } if currentSyncCommittee == nil || nextSyncCommittee == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read sync committees: %x, %d", blockRoot, *slot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read sync committees: %x, %d", blockRoot, *slot)) } } // Now fetch the data we need @@ -372,12 +372,12 @@ func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconh defer tx.Rollback() blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } blockRoot, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } epochReq, err := beaconhttp.Uint64FromQueryParams(r, "epoch") @@ -389,7 +389,7 @@ func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconh return nil, err } if slotPtr == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read block slot: %x", blockRoot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read block slot: %x", blockRoot)) } slot := *slotPtr epoch := slot / a.beaconChainCfg.SlotsPerEpoch @@ -409,7 +409,7 @@ func (a *ApiHandler) getRandao(w http.ResponseWriter, r *http.Request) (*beaconh return nil, err } if canonicalRoot != blockRoot { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("could not read randao: %x", blockRoot)) + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("could not read randao: %x", blockRoot)) } mix, err := a.stateReader.ReadRandaoMixBySlotAndIndex(tx, slot, epoch%a.beaconChainCfg.EpochsPerHistoricalVector) if err != nil { diff --git a/cl/beacon/handler/states_test.go b/cl/beacon/handler/states_test.go new file mode 100644 index 00000000000..73fb70380a9 --- /dev/null +++ b/cl/beacon/handler/states_test.go @@ -0,0 +1,505 @@ +package handler + +import ( + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "strconv" + "testing" + + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/common" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" +) + +func TestGetStateFork(t *testing.T) { + + // setupTestingHandler(t, clparams.Phase0Version) + _, blocks, _, _, postState, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + postRoot, err := postState.HashSSZ() + require.NoError(t, err) + + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + cases := []struct { + blockID string + code int + }{ + { + blockID: "0x" + common.Bytes2Hex(postRoot[:]), + code: http.StatusOK, + }, + { + blockID: "head", + code: http.StatusOK, + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + blockID: strconv.FormatInt(int64(postState.Slot()), 10), + code: http.StatusOK, + }, + } + + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} + resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/fork") + require.NoError(t, err) + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + jsonVal := make(map[string]interface{}) + // unmarshal the json + require.NoError(t, json.NewDecoder(resp.Body).Decode(&jsonVal)) + data := jsonVal["data"].(map[string]interface{}) + require.Equal(t, data["current_version"], "0x00000000") + require.Equal(t, data["previous_version"], "0x00000000") + require.Equal(t, data["epoch"], "0") + }) + } +} + +func TestGetStateRoot(t *testing.T) { + + // setupTestingHandler(t, clparams.Phase0Version) + _, blocks, _, _, postState, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + postRoot, err := postState.HashSSZ() + require.NoError(t, err) + + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + + cases := []struct { + blockID string + code int + }{ + { + blockID: "0x" + common.Bytes2Hex(postRoot[:]), + code: http.StatusOK, + }, + { + blockID: "finalized", + code: http.StatusOK, + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + blockID: strconv.FormatInt(int64(postState.Slot()), 10), + code: http.StatusOK, + }, + } + + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + // Query the block in the handler with /eth/v2/beacon/blocks/{block_id} + resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/root") + require.NoError(t, err) + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + jsonVal := make(map[string]interface{}) + // unmarshal the json + require.NoError(t, json.NewDecoder(resp.Body).Decode(&jsonVal)) + data := jsonVal["data"].(map[string]interface{}) + require.Equal(t, data["root"], "0x"+common.Bytes2Hex(postRoot[:])) + }) + } +} + +func TestGetStateFullHistorical(t *testing.T) { + + // setupTestingHandler(t, clparams.Phase0Version) + _, blocks, _, _, postState, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + postRoot, err := postState.HashSSZ() + require.NoError(t, err) + + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + + cases := []struct { + blockID string + code int + }{ + { + blockID: "0x" + common.Bytes2Hex(postRoot[:]), + code: http.StatusOK, + }, + { + blockID: "finalized", + code: http.StatusOK, + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + blockID: strconv.FormatInt(int64(postState.Slot()), 10), + code: http.StatusOK, + }, + } + + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream + req, err := http.NewRequest("GET", server.URL+"/eth/v2/debug/beacon/states/"+c.blockID, nil) + require.NoError(t, err) + req.Header.Set("Accept", "application/octet-stream") + + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + // read the all of the octect + out, err := io.ReadAll(resp.Body) + require.NoError(t, err) + other := state.New(&clparams.MainnetBeaconConfig) + require.NoError(t, other.DecodeSSZ(out, int(clparams.Phase0Version))) + + otherRoot, err := other.HashSSZ() + require.NoError(t, err) + require.Equal(t, postRoot, otherRoot) + }) + } +} + +func TestGetStateFullForkchoice(t *testing.T) { + + // setupTestingHandler(t, clparams.Phase0Version) + _, blocks, _, _, postState, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.Phase0Version, log.Root()) + + postRoot, err := postState.HashSSZ() + require.NoError(t, err) + + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + fcu.FinalizedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + + fcu.StateAtBlockRootVal[fcu.HeadVal] = postState + + cases := []struct { + blockID string + code int + }{ + { + blockID: "0x" + common.Bytes2Hex(postRoot[:]), + code: http.StatusOK, + }, + { + blockID: "finalized", + code: http.StatusOK, + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + blockID: strconv.FormatInt(int64(postState.Slot()), 10), + code: http.StatusOK, + }, + } + + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + // Query the block in the handler with /eth/v2/beacon/states/{block_id} with content-type octet-stream + req, err := http.NewRequest("GET", server.URL+"/eth/v2/debug/beacon/states/"+c.blockID, nil) + require.NoError(t, err) + req.Header.Set("Accept", "application/octet-stream") + + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + // read the all of the octect + out, err := io.ReadAll(resp.Body) + require.NoError(t, err) + other := state.New(&clparams.MainnetBeaconConfig) + require.NoError(t, other.DecodeSSZ(out, int(clparams.Phase0Version))) + + otherRoot, err := other.HashSSZ() + require.NoError(t, err) + require.Equal(t, postRoot, otherRoot) + }) + } +} + +func TestGetStateSyncCommittees(t *testing.T) { + + // setupTestingHandler(t, clparams.Phase0Version) + _, blocks, _, _, postState, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + + postRoot, err := postState.HashSSZ() + require.NoError(t, err) + + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + cSyncCommittee := postState.CurrentSyncCommittee().Copy() + nSyncCommittee := postState.NextSyncCommittee().Copy() + + fcu.GetSyncCommitteesVal[fcu.HeadSlotVal] = [2]*solid.SyncCommittee{ + cSyncCommittee, + nSyncCommittee, + } + + fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + + cases := []struct { + blockID string + code int + }{ + { + blockID: "0x" + common.Bytes2Hex(postRoot[:]), + code: http.StatusOK, + }, + { + blockID: "justified", + code: http.StatusOK, + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + blockID: strconv.FormatInt(int64(postState.Slot()), 10), + code: http.StatusOK, + }, + } + expected := `{"data":{"validators":["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192","109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],"validator_aggregates":[["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"]]},"execution_optimistic":false,"finalized":false}` + "\n" + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/sync_committees") + require.NoError(t, err) + + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + // read the all of the octect + out, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, string(out), expected) + }) + } +} + +func TestGetStateSyncCommitteesHistorical(t *testing.T) { + + // setupTestingHandler(t, clparams.Phase0Version) + _, blocks, _, _, postState, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + + postRoot, err := postState.HashSSZ() + require.NoError(t, err) + + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + + cases := []struct { + blockID string + code int + }{ + { + blockID: "0x" + common.Bytes2Hex(postRoot[:]), + code: http.StatusOK, + }, + { + blockID: "justified", + code: http.StatusOK, + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + blockID: strconv.FormatInt(int64(postState.Slot()), 10), + code: http.StatusOK, + }, + } + expected := `{"data":{"validators":["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192","109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42","141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],"validator_aggregates":[["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"],["109","134","145","89","181","81","159","168","34","251","3","205","213","202","99","121","80","149","18","65","201","227","116","69","100","74","160","198","16","131","0","73","210","122","209","217","97","237","136","98","229","248","176","95","150","171","238","191","200","220","33","219","126","9","214","124","56","86","169","208","125","85","25","88","13","190","153","183","96","165","180","90","164","104","240","123","118","196","163","222","231","127","241","77","68","32","62","79","44","58","14","187","151","243","139","142","174","106","228","102","223","31","120","5","43","255","179","66","119","170","60","152","167","194","4","112","156","233","254","203","1","55","53","19","92","21","28","42"],["141","162","146","57","23","45","158","93","212","38","2","206","246","225","195","189","47","193","224","242","76","138","84","140","111","51","135","113","41","133","207","30","82","175","161","6","249","83","234","155","244","177","108","252","94","143","173","8","154","75","50","49","39","36","182","101","48","12","172","87","250","59","24","157","215","218","72","185","71","7","253","114","230","226","110","46","166","91","130","20","137","117","132","204","221","52","197","188","11","232","67","115","245","26","35","103","186","37","27","235","64","40","70","239","236","211","61","29","216","199","63","54","78","105","184","15","10","147","247","22","144","107","128","17","178","148","129","192"]]},"execution_optimistic":false,"finalized":false}` + "\n" + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/sync_committees") + require.NoError(t, err) + + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + // read the all of the octect + out, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, string(out), expected) + }) + } +} + +func TestGetStateFinalityCheckpoints(t *testing.T) { + + // setupTestingHandler(t, clparams.Phase0Version) + _, blocks, _, _, postState, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + + postRoot, err := postState.HashSSZ() + require.NoError(t, err) + + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + + cases := []struct { + blockID string + code int + }{ + { + blockID: "0x" + common.Bytes2Hex(postRoot[:]), + code: http.StatusOK, + }, + { + blockID: "justified", + code: http.StatusOK, + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + blockID: strconv.FormatInt(int64(postState.Slot()), 10), + code: http.StatusOK, + }, + } + expected := `{"data":{"finalized_checkpoint":{"epoch":"1","root":"0xde46b0f2ed5e72f0cec20246403b14c963ec995d7c2825f3532b0460c09d5693"},"current_justified_checkpoint":{"epoch":"3","root":"0xa6e47f164b1a3ca30ea3b2144bd14711de442f51e5b634750a12a1734e24c987"},"previous_justified_checkpoint":{"epoch":"2","root":"0x4c3ee7969e485696669498a88c17f70e6999c40603e2f4338869004392069063"}},"execution_optimistic":false,"finalized":false,"version":"bellatrix"}` + "\n" + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/finality_checkpoints") + require.NoError(t, err) + + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + // read the all of the octect + out, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, string(out), expected) + }) + } +} + +func TestGetRandao(t *testing.T) { + + // setupTestingHandler(t, clparams.Phase0Version) + _, blocks, _, _, postState, handler, _, _, fcu, _ := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + + postRoot, err := postState.HashSSZ() + require.NoError(t, err) + + fcu.HeadVal, err = blocks[len(blocks)-1].Block.HashSSZ() + require.NoError(t, err) + + fcu.HeadSlotVal = blocks[len(blocks)-1].Block.Slot + + fcu.JustifiedCheckpointVal = solid.NewCheckpointFromParameters(fcu.HeadVal, fcu.HeadSlotVal/32) + + cases := []struct { + blockID string + code int + }{ + { + blockID: "0x" + common.Bytes2Hex(postRoot[:]), + code: http.StatusOK, + }, + { + blockID: "justified", + code: http.StatusOK, + }, + { + blockID: "0x" + common.Bytes2Hex(make([]byte, 32)), + code: http.StatusNotFound, + }, + { + blockID: strconv.FormatInt(int64(postState.Slot()), 10), + code: http.StatusOK, + }, + } + expected := `{"data":{"randao":"0xdeec617717272914bfd73e02ca1da113a83cf4cf33cd4939486509e2da4ccf4e"},"execution_optimistic":false,"finalized":false}` + "\n" + for _, c := range cases { + t.Run(c.blockID, func(t *testing.T) { + server := httptest.NewServer(handler.mux) + defer server.Close() + resp, err := http.Get(server.URL + "/eth/v1/beacon/states/" + c.blockID + "/randao") + require.NoError(t, err) + + defer resp.Body.Close() + require.Equal(t, c.code, resp.StatusCode) + if resp.StatusCode != http.StatusOK { + return + } + // read the all of the octect + out, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, string(out), expected) + }) + } +} diff --git a/cl/beacon/handler/subscription.go b/cl/beacon/handler/subscription.go new file mode 100644 index 00000000000..3f60adca794 --- /dev/null +++ b/cl/beacon/handler/subscription.go @@ -0,0 +1,136 @@ +package handler + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "strconv" + "time" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" + "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/gossip" + "github.com/ledgerwatch/erigon/cl/phase1/network/subnets" + "github.com/ledgerwatch/log/v3" +) + +type ValidatorSyncCommitteeSubscriptionsRequest struct { + ValidatorIndex uint64 `json:"validator_index,string"` + SyncCommitteeIndicies []string `json:"sync_committee_indices"` + UntilEpoch uint64 `json:"until_epoch,string"` + + DEBUG bool `json:"DEBUG,omitempty"` +} + +func (a *ApiHandler) PostEthV1ValidatorSyncCommitteeSubscriptions(w http.ResponseWriter, r *http.Request) { + var req []ValidatorSyncCommitteeSubscriptionsRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if len(req) == 0 { + w.WriteHeader(http.StatusOK) + return + } + headState := a.syncedData.HeadState() + if headState == nil { + http.Error(w, "head state not available", http.StatusServiceUnavailable) + return + } + var err error + // process each sub request + for _, subRequest := range req { + expiry := a.ethClock.GetSlotTime(subRequest.UntilEpoch * a.beaconChainCfg.SlotsPerEpoch) + if expiry.Before(time.Now()) { + continue + } + + var syncnets []uint64 + if subRequest.DEBUG { + for i := 0; i < int(a.beaconChainCfg.SyncCommitteeSubnetCount); i++ { + syncnets = append(syncnets, uint64(i)) + } + } else { + syncnets, err = subnets.ComputeSubnetsForSyncCommittee(headState, subRequest.ValidatorIndex) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + } + + // subscribe to subnets + for _, subnet := range syncnets { + if _, err := a.sentinel.SetSubscribeExpiry(r.Context(), &sentinel.RequestSubscribeExpiry{ + Topic: gossip.TopicNameSyncCommittee(int(subnet)), + ExpiryUnixSecs: uint64(expiry.Unix()), + }); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + } + } + w.WriteHeader(http.StatusOK) +} + +func (a *ApiHandler) PostEthV1ValidatorBeaconCommitteeSubscription(w http.ResponseWriter, r *http.Request) { + req := []*cltypes.BeaconCommitteeSubscription{} + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + log.Error("failed to decode request", "err", err) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if len(req) == 0 { + http.Error(w, "empty request", http.StatusBadRequest) + return + } + for _, sub := range req { + if err := a.committeeSub.AddAttestationSubscription(context.Background(), sub); err != nil { + log.Error("failed to add attestation subscription", "err", err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + } + w.WriteHeader(http.StatusOK) +} + +func parseSyncCommitteeContribution(r *http.Request) (slot, subcommitteeIndex uint64, beaconBlockRoot common.Hash, err error) { + slotStr := r.URL.Query().Get("slot") + subCommitteeIndexStr := r.URL.Query().Get("subcommittee_index") + blockRootStr := r.URL.Query().Get("beacon_block_root") + // check if they required fields are present + if slotStr == "" { + err = fmt.Errorf("slot as query param is required") + return + } + if subCommitteeIndexStr == "" { + err = fmt.Errorf("subcommittee_index as query param is required") + return + } + if blockRootStr == "" { + err = fmt.Errorf("beacon_block_root as query param is required") + return + } + slot, err = strconv.ParseUint(slotStr, 10, 64) + if err != nil { + err = fmt.Errorf("could not parse slot: %w", err) + return + } + subcommitteeIndex, err = strconv.ParseUint(subCommitteeIndexStr, 10, 64) + if err != nil { + err = fmt.Errorf("could not parse subcommittee_index: %w", err) + return + } + beaconBlockRoot = common.HexToHash(blockRootStr) + return +} + +func (a *ApiHandler) GetEthV1ValidatorSyncCommitteeContribution(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + slot, subCommitteeIndex, beaconBlockRoot, err := parseSyncCommitteeContribution(r) + if err != nil { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) + } + return newBeaconResponse(a.syncMessagePool.GetSyncContribution(slot, subCommitteeIndex, beaconBlockRoot)), nil +} diff --git a/cl/beacon/handler/test_data/blinded_block_1.json b/cl/beacon/handler/test_data/blinded_block_1.json index de776b31230..233e6bd0405 100644 --- a/cl/beacon/handler/test_data/blinded_block_1.json +++ b/cl/beacon/handler/test_data/blinded_block_1.json @@ -1,1975 +1 @@ -{ - "data": { - "signature": "0x8b915f3b9d2d4c7ccaacf5d56c1152b1e91eafd1f59ba734d09e78996930b63ca550499997fe6d590343aaf5997f0d0c14c986571992ac9ed188de2b31ae4b7d70dfb68edae8b012f72f284dc8da44f4af5a2bdf3dfc9c0897ec4f7165daa07a", - "message": { - "slot": "8322", - "proposer_index": "210", - "parent_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "state_root": "0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1", - "body": { - "randao_reveal": "0xa182a6c7224c53cc43492b7ba87b54e8303094ebcb8c822da09c4224791b461e34d089ac857acf05cd695679c25cffa30404832791fe424fd104e2e96ebbf583dd5ec4dcbc891e7f4e0dea402071dbd294810417221fc41e4f90e4837c694e1a", - "eth1_data": { - "deposit_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "deposit_count": "528", - "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "graffiti": "0x0000000000000000000000000000000000000000000000000000000000000000", - "proposer_slashings": [ - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "476", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x939584df88598e56fe144105c6933b4727d7b772539e65c57289df64cedee771377e4d0e94f85c25d39a6072997d309c09da8c477267670aa42f26fb0836c72ec5867fa2f34dc0eb7e043ef5d6421282d1515b0f8c7ffd4bbbf56ee8d61ed063" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "476", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x8a184441d5d944ed3c18549dd9e4640eda879f9e737ac4211fdddfd30a65e1a2a32a8aa918ca65ad9b863a15e8cfefc412608ca78fd54ea1e5cbbd5697d125cc721aac1b01e8984a33f025c4707623669573244a632ec7f37808c01fab143f58" - } - }, - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "406", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0xad97a43e9f28a90ff46b07a7bf65d520b89a78af47dbff1c10e4fc6bb36b4ee9c4f27f2a72c65311a03e7b48e06d86db1149147b14a8803d46f6a457092642dc89d3f2782bd48a373e3125af1a84f5b76d4ff7ddc85ac2650ca4c0f99e1af592" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "406", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x88d860d460526de062ee196400e24cb3055de2ff6abb31331d0bfeeebcdc77839d22ad6dfec39d81279f5527d1ffbd7e0a9d6eee7dce5a1cd6f79451537e9dfb6384f595e9d49673c58c181527a599dd4b38154e1322f1607f192ab0394f1411" - } - }, - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "281", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x8a2358ff11a30100a2492001827f54ff6c10dd6dcea66f6814dd1cccc4a49850bbbe36546e4f9b72410042a9d5882e8219a5a01708b8a95ca57984debe78f419a4ac921270a0f0c11c795a6c5ef1e6bfb96712751a4fee61059ca8fbe69639b6" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "281", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0xb820e03b7bfd21c2d97a4f2bc9dd1fd5325894757f7129646c7a39a02b2c1c8ca33d509b4e83491e79db02ac0490aa3308ee23bfa1f65bf4130ab07e377a8cbd4eace5b69801528322dde425b0a78310504c330da30be7cefc674573dbdb4502" - } - }, - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "169", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x88c81a6029f097a9f23e37c7677abfafa2921982e9aebffc35ca700e1aefcd49c2ab5d51c7b28ef3db3aad49d58a6407082ce1ecd7f7bd89cb764242890440b684fc0e1511e047434b25f3ad1a5e238e5bf97f51e9e37d6eed48e0b9fef64333" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "169", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x815b492a6a3fb606f01dbc595c8b18b51b7f7a5a86b11f3ae57c48f7506a34606556a3cf2be683ce23cd0c7b2235667613f9dbcf98408b176f134645f122684bd8fe704c7a4eccb7bb7cbe33c6de377be4d742291d35d0ec8d6083c1b17b7261" - } - }, - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "397", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0xae352ba8550d04c07591224449bd4967f66f9d639b731795f643b1e3fc5ad28317268dc9e289ce6075e8981a0e37d9440885e4f4292cb4b4656bd0c7bd9fc22d21eb4c7d1b46f1b08cdb1eb08d7a405985e8a406e6d93c5c3fdd20e91baba122" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "397", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0xb9152f5510f2bfa5ab7b61829823f25f0c879ab9b852fcd90c17f751bed6e687dc523fcda177503509cd1befec36046a056a66f5826e2333b6de67430a16f6194416681ae69a1c3498cf8351abae4fac5d8f0b51b1734633d545d540bf269270" - } - } - ], - "attester_slashings": [ - { - "attestation_1": { - "attesting_indicies": [ - "96", - "353", - "445" - ], - "data": { - "slot": "555", - "index": "0", - "beacon_block_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "17", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - }, - "signature": "0xa7e932307a82913b23743198182a7e3c97675e8a1133e8d946bc59c62b1765046214ca0ea0e13b77e4f8acc8f226498103684f382826a9fff6c6c2ffdf9c65ffeb1680155025f489f676457634581ee4363bdfbe4d46fc4d1d9df93c3df8750d" - }, - "attestation_2": { - "attesting_indicies": [ - "96", - "353", - "445" - ], - "data": { - "slot": "555", - "index": "0", - "beacon_block_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "17", - "root": "0x0101010101010101010101010101010101010101010101010101010101010101" - } - }, - "signature": "0x89aadbd74370dc6d86b6b61c544c1e18949b0d8aa2d706605d1014d0266a043588a829243d343d1c3812621944ea34540aef1fbd34fe51b03a5734ebc5ec31057d1df0004faeca71d8687dd3af806e4332e19f6da5ab1d7da67fe017c2f2e68b" - } - } - ], - "attestations": [ - { - "aggregation_bits": "0xff3f", - "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", - "data": { - "slot": "8314", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c", - "data": { - "slot": "8292", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", - "data": { - "slot": "8317", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", - "data": { - "slot": "8309", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9", - "data": { - "slot": "8312", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3", - "data": { - "slot": "8297", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928", - "data": { - "slot": "8290", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", - "data": { - "slot": "8291", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223", - "data": { - "slot": "8311", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53", - "data": { - "slot": "8320", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "258", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "260", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", - "data": { - "slot": "8302", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", - "data": { - "slot": "8296", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", - "data": { - "slot": "8314", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", - "data": { - "slot": "8309", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247", - "data": { - "slot": "8318", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", - "data": { - "slot": "8307", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", - "data": { - "slot": "8307", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", - "data": { - "slot": "8291", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217", - "data": { - "slot": "8300", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0", - "data": { - "slot": "8304", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", - "data": { - "slot": "8296", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", - "data": { - "slot": "8302", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", - "data": { - "slot": "8296", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", - "data": { - "slot": "8317", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", - "data": { - "slot": "8307", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3", - "data": { - "slot": "8297", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928", - "data": { - "slot": "8290", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", - "data": { - "slot": "8309", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed", - "data": { - "slot": "8308", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247", - "data": { - "slot": "8318", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c", - "data": { - "slot": "8292", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", - "data": { - "slot": "8314", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", - "data": { - "slot": "8305", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217", - "data": { - "slot": "8300", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", - "data": { - "slot": "8317", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed", - "data": { - "slot": "8308", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", - "data": { - "slot": "8299", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", - "data": { - "slot": "8305", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", - "data": { - "slot": "8305", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53", - "data": { - "slot": "8320", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "258", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "260", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", - "data": { - "slot": "8298", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", - "data": { - "slot": "8298", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6", - "data": { - "slot": "8310", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", - "data": { - "slot": "8299", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223", - "data": { - "slot": "8311", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", - "data": { - "slot": "8291", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6", - "data": { - "slot": "8310", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", - "data": { - "slot": "8298", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", - "data": { - "slot": "8291", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", - "data": { - "slot": "8309", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9", - "data": { - "slot": "8312", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", - "data": { - "slot": "8299", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0", - "data": { - "slot": "8304", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", - "data": { - "slot": "8307", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa46775d208c119b097221ead6ee9afbf011258b03da07138d01fef8d5bd4681ecbab6f36687e8ae644191acebc94800a002b136de6ff892e4e0910d05402def66858ee8ad8f4b706fab163fe742959dcb86fa90d0b822e5937092852962acbb1", - "data": { - "slot": "8294", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", - "data": { - "slot": "8302", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - } - ], - "deposits": [ - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xa19c8e80ddc1caad60a172b66eb24e83ef200d77034b3e16bbee4d95e929a5c1a473563973338d22e7a566fdbd352f65", - "withdrawal_credentials": "0x00edbcfc97a6985ac86187522426240ed81b6493c880d0798360149ec8ce96d8", - "amount": "32000000000", - "signature": "0xb9b4b512b2c67a3e89edcbef91fc0ccd88c9a8c8654c51a130ffb2ab539c22a0c6b84928e8db4ca8a9d04f2dee312c3817a2bf360b6f5f2f3d1ba69b43cf4671290f7f58621887ad4dd1c9fe6d02cc59443e12447a20b38913f67597b0e3cc93" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb1f92d1a612942fb266c1e436f8d417282efa2805d5a5a819e3d07e358a70efbf0cc1671412ee986cd342c3d2255a324", - "withdrawal_credentials": "0x004ac0f181a01d43a7de32602b440cfbe3a091bb8c108c1fa35726ed301743f9", - "amount": "32000000000", - "signature": "0x8dbd6f9b4ce0a5277f66da9ec41776cff88a647ae1b4dde221a3bf41b9d4af1e77d0cff23185796815448f2e8148126a046b4b60947a32a1e201b4e979c91b395c1d4804ead1324d699eaa9c481efa69484a7946a0bad9788e50cf05847a30c4" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb532643cb8824a2fbd9196c10961f3ad2f0e319c3612bb15a51a3454593f44726383f006425c2e5952b156a6e14aceb0", - "withdrawal_credentials": "0x00f68c08152911b76f556f9d6dfc66d54e5abd63de04dc073d6b03f333ac00f3", - "amount": "32000000000", - "signature": "0x97852e8c02386bcc8a2dd51c70c48661c79bc1f89f9dce113a60fcde345abedf96fa186c4230013cf61f3546c5d9877a0eab7a5a4f4e4e0e4bcd917dc8368a88e3b8380de9e96ed36bfd605d55956af64a17b877f12762acfdd1c3effe4b4d42" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xa7a1c0bbad929dc02699e92597a66266bbd9533419693270c9b56bbdea643cd2ded9664da3c9fd8db2389277b5e585cc", - "withdrawal_credentials": "0x00e64188226da03f1f3d787ef65d86690aaa24d44e5ac92c99c413463ec47c26", - "amount": "32000000000", - "signature": "0xb0e97772997255840a5758e5325b9d1c56a292500838c5b2b697b7dd207c65a2ef928ebb9466d57782edf79f9b74bbbb069235c752f6527e8d8eb1c785d99326da78680056ee3084811b980185287259af64607e218d67a3b8f24d27c0659ce2" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0x9919842dee455266e4dc77c74088bddbfdb535b9a1bbe75a3cced0e428598038365afe11c7578e4dbd8fe4cae7237543", - "withdrawal_credentials": "0x000a2baaef8f6cc730d6a5474879aed4fe8c95da787cc2e15c3cdba14a9cef12", - "amount": "32000000000", - "signature": "0x99ef1ab7cfbe40d0a1e136138a4a8094e8f54a59c8d05052749b7af14931274fad1c0a44577de51099f2700505fa8861023b7bddabb274249a091acb3a4f7543f877da3792dad7897351c7a01343116a65959812fd55cc4ce4197b05f698761f" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb4ed73c02a816ba9d23ba0e023970772f82dd3a32a85eefd922958e33bcab7f9c85e20372e49107665926cca852b8b9a", - "withdrawal_credentials": "0x0017c0e8e177a6d58e4f8b93b2b66b13aef9c186cfccb9466d857a474b32b0d4", - "amount": "32000000000", - "signature": "0xa6dfce815f61ce81bf107bf5ccc1beae5f32b63a55e836a5983b63b90c0e7eac873387107c145ab59c32679091cfd28a0dbf2b73f75cd5ab01b75c6ba984b83c796c92b77adba152ab2a20132324fc4b20c8ec002663f16edec9308bb8f3d298" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb0d0dfaf7479f59319beb513bee16e1af576a0740a7a124a9947ec7c3826dbc0a5d5db15519e8423d7aa683f638f3da3", - "withdrawal_credentials": "0x00a61d2fddabb70c2db059af7e298b0395ef882dda24ae144f2b7ac88026e55d", - "amount": "32000000000", - "signature": "0x85a06ab8d9d576cb2810a88635b7a462d1cfb238db066b8caeba7f36562bb903630f8f24d157747debad5428c4f42a9a0a08dfd53c687cd7c3e17ec539f353357bbd89b7111246c99cc7fab24b8cd33a88cddf845f7d27c8a33079aa097069e3" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb69614adf68d58f7d67110d7ced171ab934cb973f19c60cbb83161468655c42fe19a80a8e903030650bfaa9613a1ab2d", - "withdrawal_credentials": "0x0037c021fdef99bcf9fb90c02440571ab2faa0238485ed72e427b69dc8dddc91", - "amount": "32000000000", - "signature": "0x957f48b82d761d3e7f2e34eeff5922358d87f9b31c51e5af37a54fedeab7cfc09c3068f6ef5c97e0323dabff706bc7520113d51841c6dc2eaa044c8526bdaebcf35476c0b08cccb69ab0bab07c8e7ca2d6573b0ae96c32ae3d18764ae7ea78e0" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xac897c8892a6f3effcd276e4f44f410644846a333db600ad12e1099020196b2f8104563c04d78fedf5afc5d87b91b1b5", - "withdrawal_credentials": "0x0075f9178dd8a199c55d5cebb9dccb00508e619d5b9abd2b7cd5ad3f671c5a9f", - "amount": "32000000000", - "signature": "0x95a886b35ead6f8fc09d33975108857abffc32d53db6546a7251d32ca6d1706e899155b3883b05e65a041e44c51db8480703f13cccc6575cd2d50d0506485b9669a096bb1a2d4879008c15b8c1cdcd2e1a5c4f12885311e24dd87dc32e1bce87" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0x8794fd3f4e5e66e6e81735d5726943833b82d1efd7d877e495a8c36955b7dfb95b3f6cfcef865fd7969fa2e17e628ab9", - "withdrawal_credentials": "0x0087adf1a29896ae52be67356ee9a4a5035450764c278382f8940d554668c208", - "amount": "32000000000", - "signature": "0xb42aa548fd9068db7916757390f6d011ad890b9f27a75d4676dd9edcd9017f5d7e2cec215a04502fcff253aa821865fb0c30549e7b5d5e62cc8df0264dc3b55538f15cfd375f9cb022a94c2a39201d757a502701acd50554dc4da29173c945bd" - } - } - ], - "voluntary_exits": [ - { - "message": { - "epoch": "260", - "validator_index": "504" - }, - "signature": "0x8fedc3077271b41f631d6062cc1cc8c8f074e486e9e692f198c5f82b94d2bb3b0fbf71cbac043cee94b56a7a06adf06d07bb7ecf06d8f699add17972ceb54b25e6021c3a2a727afd3370e960afbf345a75fddd2d221ba85a5f7b07e5607eec1e" - }, - { - "message": { - "epoch": "260", - "validator_index": "503" - }, - "signature": "0xa44079752dfa36b925f0ff675dfd10b5b7cc0c178839356d0bda9c83b6df01f6bfdd904af92373002bfac40277941d2809c4152fc61007ae4f2c73e550ed02f425419efae0461d8829746c7a3d36dcae5bc37158ede7dd30ccc33930783b6194" - }, - { - "message": { - "epoch": "260", - "validator_index": "502" - }, - "signature": "0xb193b547c2d45341c9aedd0a22f4afc565d9aaa3a04889df2f8ad608bb31b44a0391c69383f0f4725cea291332c081ff0a48e850d246dd0be40880bf17316eb4b2eaf4b8b6ba6d59c93aea3af98988f05cb2ddf61d8637f943864ebfe7c9707c" - }, - { - "message": { - "epoch": "260", - "validator_index": "501" - }, - "signature": "0x88afe9a0215d2a67c451fcbdc358237c4d5dce6b46973ae527afb7f8fb1da800d6a3dd7f6387028a57737b354b7db88803bd6f2a59c7fb84229f42e6c6ea1b7510cb2a28026ff8f2eefb8fc7e2a83115197b7a1bd35fbf0afcc69e4b6e581911" - }, - { - "message": { - "epoch": "260", - "validator_index": "500" - }, - "signature": "0xa2f2399070bcfa3f50894d7170d1343ab5f52d6bdc155124e867bcde936aee4e0bb69f164dee5fa07d47abccb8844ec101126caf0402f1a757934f8e7b5904a60cedc283b5e9801f2a71f80cda16e910d72518d469a9a40cd94b8ad3cca10136" - }, - { - "message": { - "epoch": "260", - "validator_index": "499" - }, - "signature": "0x86abacd204c85cfc40d71853422001e44134b1900138fccb409928b7e663270476e3d7a7e0aaa103c693cad3629da1aa056cac30c8aab1a4eb50d81bb0711db3dba1d741562b103f67f495996b18fad779d3d9cc508763ab883a7cd6858bdc51" - }, - { - "message": { - "epoch": "260", - "validator_index": "498" - }, - "signature": "0xb86533e02779dd0f959dbf1b0fa195126ccc945fd0a7c5b7370aefc16f8f130d083c0c1c58a5c18e8119d7912dd532d91765dd26ad5ef3991238bc093bab79d511b1d8484482eec9b6b4a98f4a8928819ea58fc857ed80b59fe9cb7a33fe60a2" - }, - { - "message": { - "epoch": "260", - "validator_index": "495" - }, - "signature": "0x80a5c7c52a246dcaaf67caf6285ea518581835af668d1a64723b321b167464e238248c0017d5265be373c9079d7b529b10aedc37835683e5e1320c3ad6fa1f72d52046a49b061935e1631565912d2f2482434007957fe9903edecf4dad8e5bb8" - }, - { - "message": { - "epoch": "260", - "validator_index": "494" - }, - "signature": "0xb6a0e4cdc1815f03166218963ec9cc4c5d607a67d659d1227386e16f90d3e39c6cddf696e3534f3824ca5aff8c734bab153f3bab701247cdcea16db31c94846c1cd3781b1861485ad813d025bf0a486c592dd1f9afa1134e8288e4fef44d2f3c" - }, - { - "message": { - "epoch": "260", - "validator_index": "492" - }, - "signature": "0xad850276510c2e41d059df6a1cefab9f1b66463da47b0fc772b21ed90c13e1bd6f86def8b2ecb867f4f752612d9d25e30a151aa6ef630a1b6ddaa4420c240b37df0234ee332373fe132b0101a0486900c5733762beeacd95429dd34c34230d13" - }, - { - "message": { - "epoch": "260", - "validator_index": "491" - }, - "signature": "0x837669180ba01b65157087f49c7af19acb1439016eca9c699b7136da7e9bbc89d6bddc7a030388bbb7e149ebd521c4810f457846b9cf913f7ee6f01db4363d3ce92fc732e52359917d36c7e4a08158653f1a9a78a608c4b56ff3e155b2783974" - } - ], - "sync_aggregate": { - "sync_committee_bits": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - }, - "execution_payload_header": { - "parent_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "fee_recipient": "0x0000000000000000000000000000000000000000", - "state_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "receipts_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "prev_randao": "0x0000000000000000000000000000000000000000000000000000000000000000", - "block_number": "0", - "gas_limit": "0", - "gas_used": "0", - "time": "0", - "extra_data": null, - "base_fee_per_gas": "0x0000000000000000000000000000000000000000000000000000000000000000", - "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "transactions_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "withdrawals_root": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "execution_changes": [], - "blob_kzg_commitments": [] - } - } - }, - "finalized": false, - "version": 0, - "execution_optimistic": false -} +{"data":{"message":{"body":{"attestations":[{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8314","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8292","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8317","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8309","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8312","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8297","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8290","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8291","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8311","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8320","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8302","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8296","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8314","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8309","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8318","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8307","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8307","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8291","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8300","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8304","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8296","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8302","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8296","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8317","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8307","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8297","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8290","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8309","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8308","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8318","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8292","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8314","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8305","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8300","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8317","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8308","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8299","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8305","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8305","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8320","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8298","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8298","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8310","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8299","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8311","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8291","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8310","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8298","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8291","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8309","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8312","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8299","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8304","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8307","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8294","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa46775d208c119b097221ead6ee9afbf011258b03da07138d01fef8d5bd4681ecbab6f36687e8ae644191acebc94800a002b136de6ff892e4e0910d05402def66858ee8ad8f4b706fab163fe742959dcb86fa90d0b822e5937092852962acbb1"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8302","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079"}],"attester_slashings":[{"attestation_1":{"attesting_indicies":["96","353","445"],"data":{"beacon_block_root":"0x0000000000000000000000000000000000000000000000000000000000000000","index":"0","slot":"555","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"17","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa7e932307a82913b23743198182a7e3c97675e8a1133e8d946bc59c62b1765046214ca0ea0e13b77e4f8acc8f226498103684f382826a9fff6c6c2ffdf9c65ffeb1680155025f489f676457634581ee4363bdfbe4d46fc4d1d9df93c3df8750d"},"attestation_2":{"attesting_indicies":["96","353","445"],"data":{"beacon_block_root":"0x0000000000000000000000000000000000000000000000000000000000000000","index":"0","slot":"555","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"17","root":"0x0101010101010101010101010101010101010101010101010101010101010101"}},"signature":"0x89aadbd74370dc6d86b6b61c544c1e18949b0d8aa2d706605d1014d0266a043588a829243d343d1c3812621944ea34540aef1fbd34fe51b03a5734ebc5ec31057d1df0004faeca71d8687dd3af806e4332e19f6da5ab1d7da67fe017c2f2e68b"}}],"blob_kzg_commitments":[],"deposits":[{"data":{"amount":"32000000000","pubkey":"0xa19c8e80ddc1caad60a172b66eb24e83ef200d77034b3e16bbee4d95e929a5c1a473563973338d22e7a566fdbd352f65","signature":"0xb9b4b512b2c67a3e89edcbef91fc0ccd88c9a8c8654c51a130ffb2ab539c22a0c6b84928e8db4ca8a9d04f2dee312c3817a2bf360b6f5f2f3d1ba69b43cf4671290f7f58621887ad4dd1c9fe6d02cc59443e12447a20b38913f67597b0e3cc93","withdrawal_credentials":"0x00edbcfc97a6985ac86187522426240ed81b6493c880d0798360149ec8ce96d8"},"proof":["0x7e4ac18e104e72c0e90675c6caca41a8b6147b55c93df90177b3875e4ce83a04","0x458368e9794627a362da6580eabde010c6147a98132bab1fc5201a3890333a4b","0x492fcfbd51e4c43551b6a683cd1d103994c5f96d3a9671e1fb228e3a8d0ccbdd","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb1f92d1a612942fb266c1e436f8d417282efa2805d5a5a819e3d07e358a70efbf0cc1671412ee986cd342c3d2255a324","signature":"0x8dbd6f9b4ce0a5277f66da9ec41776cff88a647ae1b4dde221a3bf41b9d4af1e77d0cff23185796815448f2e8148126a046b4b60947a32a1e201b4e979c91b395c1d4804ead1324d699eaa9c481efa69484a7946a0bad9788e50cf05847a30c4","withdrawal_credentials":"0x004ac0f181a01d43a7de32602b440cfbe3a091bb8c108c1fa35726ed301743f9"},"proof":["0xb87c4b5cfdd2b2dde4c1d282cf4b68e81d232038820320b11445df5001a68e7c","0x458368e9794627a362da6580eabde010c6147a98132bab1fc5201a3890333a4b","0x492fcfbd51e4c43551b6a683cd1d103994c5f96d3a9671e1fb228e3a8d0ccbdd","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb532643cb8824a2fbd9196c10961f3ad2f0e319c3612bb15a51a3454593f44726383f006425c2e5952b156a6e14aceb0","signature":"0x97852e8c02386bcc8a2dd51c70c48661c79bc1f89f9dce113a60fcde345abedf96fa186c4230013cf61f3546c5d9877a0eab7a5a4f4e4e0e4bcd917dc8368a88e3b8380de9e96ed36bfd605d55956af64a17b877f12762acfdd1c3effe4b4d42","withdrawal_credentials":"0x00f68c08152911b76f556f9d6dfc66d54e5abd63de04dc073d6b03f333ac00f3"},"proof":["0x3fcccf842d7d1954fb2c1aacd56d76733564644838e52af17cfe1d0eb778ffd5","0x120dce76ce67112e449d83e5d0b488fd11fd1c41c352a6e88f1911a29a7827eb","0x492fcfbd51e4c43551b6a683cd1d103994c5f96d3a9671e1fb228e3a8d0ccbdd","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xa7a1c0bbad929dc02699e92597a66266bbd9533419693270c9b56bbdea643cd2ded9664da3c9fd8db2389277b5e585cc","signature":"0xb0e97772997255840a5758e5325b9d1c56a292500838c5b2b697b7dd207c65a2ef928ebb9466d57782edf79f9b74bbbb069235c752f6527e8d8eb1c785d99326da78680056ee3084811b980185287259af64607e218d67a3b8f24d27c0659ce2","withdrawal_credentials":"0x00e64188226da03f1f3d787ef65d86690aaa24d44e5ac92c99c413463ec47c26"},"proof":["0xd3955560f10ca441dfc6f92be6798857e9f81833cf1672e75fe1830f8a21ddb4","0x120dce76ce67112e449d83e5d0b488fd11fd1c41c352a6e88f1911a29a7827eb","0x492fcfbd51e4c43551b6a683cd1d103994c5f96d3a9671e1fb228e3a8d0ccbdd","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0x9919842dee455266e4dc77c74088bddbfdb535b9a1bbe75a3cced0e428598038365afe11c7578e4dbd8fe4cae7237543","signature":"0x99ef1ab7cfbe40d0a1e136138a4a8094e8f54a59c8d05052749b7af14931274fad1c0a44577de51099f2700505fa8861023b7bddabb274249a091acb3a4f7543f877da3792dad7897351c7a01343116a65959812fd55cc4ce4197b05f698761f","withdrawal_credentials":"0x000a2baaef8f6cc730d6a5474879aed4fe8c95da787cc2e15c3cdba14a9cef12"},"proof":["0x483eee486429a5f5c215aa1d843f352300e48345c10e329725907a65b61ccc04","0x02ef49759b3e3b3d4eca789a7ea68e687d4cf0d09f5891e7a47e96c2e13f626a","0x5c6eb7a447d36de81aeb12e0e4ee44c0e27f1f808dc38e9bd00ef7e8fa3c6725","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb4ed73c02a816ba9d23ba0e023970772f82dd3a32a85eefd922958e33bcab7f9c85e20372e49107665926cca852b8b9a","signature":"0xa6dfce815f61ce81bf107bf5ccc1beae5f32b63a55e836a5983b63b90c0e7eac873387107c145ab59c32679091cfd28a0dbf2b73f75cd5ab01b75c6ba984b83c796c92b77adba152ab2a20132324fc4b20c8ec002663f16edec9308bb8f3d298","withdrawal_credentials":"0x0017c0e8e177a6d58e4f8b93b2b66b13aef9c186cfccb9466d857a474b32b0d4"},"proof":["0xd46d72b4a13923f739ef7f69526c405af02941c64a3d73585000a321f06e866d","0x02ef49759b3e3b3d4eca789a7ea68e687d4cf0d09f5891e7a47e96c2e13f626a","0x5c6eb7a447d36de81aeb12e0e4ee44c0e27f1f808dc38e9bd00ef7e8fa3c6725","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb0d0dfaf7479f59319beb513bee16e1af576a0740a7a124a9947ec7c3826dbc0a5d5db15519e8423d7aa683f638f3da3","signature":"0x85a06ab8d9d576cb2810a88635b7a462d1cfb238db066b8caeba7f36562bb903630f8f24d157747debad5428c4f42a9a0a08dfd53c687cd7c3e17ec539f353357bbd89b7111246c99cc7fab24b8cd33a88cddf845f7d27c8a33079aa097069e3","withdrawal_credentials":"0x00a61d2fddabb70c2db059af7e298b0395ef882dda24ae144f2b7ac88026e55d"},"proof":["0x29b1515f1533718ce5cdebb90590c0bf30caefcaf6c92ad72c821d7a78f83684","0x50e358c6d946202b00d58595e2cdc1ded7d8dd8b1f1df149632c4a508ee7067c","0x5c6eb7a447d36de81aeb12e0e4ee44c0e27f1f808dc38e9bd00ef7e8fa3c6725","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb69614adf68d58f7d67110d7ced171ab934cb973f19c60cbb83161468655c42fe19a80a8e903030650bfaa9613a1ab2d","signature":"0x957f48b82d761d3e7f2e34eeff5922358d87f9b31c51e5af37a54fedeab7cfc09c3068f6ef5c97e0323dabff706bc7520113d51841c6dc2eaa044c8526bdaebcf35476c0b08cccb69ab0bab07c8e7ca2d6573b0ae96c32ae3d18764ae7ea78e0","withdrawal_credentials":"0x0037c021fdef99bcf9fb90c02440571ab2faa0238485ed72e427b69dc8dddc91"},"proof":["0x8b0f06508d861e2d5a18c3565217368ea18eb41985729a506d8a6ab2427f192d","0x50e358c6d946202b00d58595e2cdc1ded7d8dd8b1f1df149632c4a508ee7067c","0x5c6eb7a447d36de81aeb12e0e4ee44c0e27f1f808dc38e9bd00ef7e8fa3c6725","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xac897c8892a6f3effcd276e4f44f410644846a333db600ad12e1099020196b2f8104563c04d78fedf5afc5d87b91b1b5","signature":"0x95a886b35ead6f8fc09d33975108857abffc32d53db6546a7251d32ca6d1706e899155b3883b05e65a041e44c51db8480703f13cccc6575cd2d50d0506485b9669a096bb1a2d4879008c15b8c1cdcd2e1a5c4f12885311e24dd87dc32e1bce87","withdrawal_credentials":"0x0075f9178dd8a199c55d5cebb9dccb00508e619d5b9abd2b7cd5ad3f671c5a9f"},"proof":["0x50f17abe0de10eea94174120fbfa9f93b2761e2df90717235b422a62ca34cc11","0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b","0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71","0xd30099c5c4129378264a4c45ed088fb4552ed73f04cdcd0c4f11acae180e7f9a","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0x8794fd3f4e5e66e6e81735d5726943833b82d1efd7d877e495a8c36955b7dfb95b3f6cfcef865fd7969fa2e17e628ab9","signature":"0xb42aa548fd9068db7916757390f6d011ad890b9f27a75d4676dd9edcd9017f5d7e2cec215a04502fcff253aa821865fb0c30549e7b5d5e62cc8df0264dc3b55538f15cfd375f9cb022a94c2a39201d757a502701acd50554dc4da29173c945bd","withdrawal_credentials":"0x0087adf1a29896ae52be67356ee9a4a5035450764c278382f8940d554668c208"},"proof":["0x409002728188e6b1455636b55469598dbc31a3633a7f53a743a5576e3356c0b3","0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b","0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71","0xd30099c5c4129378264a4c45ed088fb4552ed73f04cdcd0c4f11acae180e7f9a","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]}],"eth1_data":{"block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","deposit_count":"528","deposit_root":"0x0000000000000000000000000000000000000000000000000000000000000000"},"execution_changes":[],"execution_payload_header":{"base_fee_per_gas":"0","block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","block_number":"0","extra_data":null,"fee_recipient":"0x0000000000000000000000000000000000000000","gas_limit":"0","gas_used":"0","logs_bloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","parent_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","prev_randao":"0x0000000000000000000000000000000000000000000000000000000000000000","receipts_root":"0x0000000000000000000000000000000000000000000000000000000000000000","state_root":"0x0000000000000000000000000000000000000000000000000000000000000000","timestamp":"0","transactions_root":"0x0000000000000000000000000000000000000000000000000000000000000000","withdrawals_root":"0x0000000000000000000000000000000000000000000000000000000000000000"},"graffiti":"0x0000000000000000000000000000000000000000000000000000000000000000","proposer_slashings":[{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"476","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x939584df88598e56fe144105c6933b4727d7b772539e65c57289df64cedee771377e4d0e94f85c25d39a6072997d309c09da8c477267670aa42f26fb0836c72ec5867fa2f34dc0eb7e043ef5d6421282d1515b0f8c7ffd4bbbf56ee8d61ed063"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"476","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x8a184441d5d944ed3c18549dd9e4640eda879f9e737ac4211fdddfd30a65e1a2a32a8aa918ca65ad9b863a15e8cfefc412608ca78fd54ea1e5cbbd5697d125cc721aac1b01e8984a33f025c4707623669573244a632ec7f37808c01fab143f58"}},{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"406","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0xad97a43e9f28a90ff46b07a7bf65d520b89a78af47dbff1c10e4fc6bb36b4ee9c4f27f2a72c65311a03e7b48e06d86db1149147b14a8803d46f6a457092642dc89d3f2782bd48a373e3125af1a84f5b76d4ff7ddc85ac2650ca4c0f99e1af592"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"406","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x88d860d460526de062ee196400e24cb3055de2ff6abb31331d0bfeeebcdc77839d22ad6dfec39d81279f5527d1ffbd7e0a9d6eee7dce5a1cd6f79451537e9dfb6384f595e9d49673c58c181527a599dd4b38154e1322f1607f192ab0394f1411"}},{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"281","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x8a2358ff11a30100a2492001827f54ff6c10dd6dcea66f6814dd1cccc4a49850bbbe36546e4f9b72410042a9d5882e8219a5a01708b8a95ca57984debe78f419a4ac921270a0f0c11c795a6c5ef1e6bfb96712751a4fee61059ca8fbe69639b6"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"281","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0xb820e03b7bfd21c2d97a4f2bc9dd1fd5325894757f7129646c7a39a02b2c1c8ca33d509b4e83491e79db02ac0490aa3308ee23bfa1f65bf4130ab07e377a8cbd4eace5b69801528322dde425b0a78310504c330da30be7cefc674573dbdb4502"}},{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"169","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x88c81a6029f097a9f23e37c7677abfafa2921982e9aebffc35ca700e1aefcd49c2ab5d51c7b28ef3db3aad49d58a6407082ce1ecd7f7bd89cb764242890440b684fc0e1511e047434b25f3ad1a5e238e5bf97f51e9e37d6eed48e0b9fef64333"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"169","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x815b492a6a3fb606f01dbc595c8b18b51b7f7a5a86b11f3ae57c48f7506a34606556a3cf2be683ce23cd0c7b2235667613f9dbcf98408b176f134645f122684bd8fe704c7a4eccb7bb7cbe33c6de377be4d742291d35d0ec8d6083c1b17b7261"}},{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"397","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0xae352ba8550d04c07591224449bd4967f66f9d639b731795f643b1e3fc5ad28317268dc9e289ce6075e8981a0e37d9440885e4f4292cb4b4656bd0c7bd9fc22d21eb4c7d1b46f1b08cdb1eb08d7a405985e8a406e6d93c5c3fdd20e91baba122"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"397","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0xb9152f5510f2bfa5ab7b61829823f25f0c879ab9b852fcd90c17f751bed6e687dc523fcda177503509cd1befec36046a056a66f5826e2333b6de67430a16f6194416681ae69a1c3498cf8351abae4fac5d8f0b51b1734633d545d540bf269270"}}],"randao_reveal":"0xa182a6c7224c53cc43492b7ba87b54e8303094ebcb8c822da09c4224791b461e34d089ac857acf05cd695679c25cffa30404832791fe424fd104e2e96ebbf583dd5ec4dcbc891e7f4e0dea402071dbd294810417221fc41e4f90e4837c694e1a","sync_aggregate":{"sync_committee_bits":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","sync_committee_signature":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"voluntary_exits":[{"message":{"epoch":"260","validator_index":"504"},"signature":"0x8fedc3077271b41f631d6062cc1cc8c8f074e486e9e692f198c5f82b94d2bb3b0fbf71cbac043cee94b56a7a06adf06d07bb7ecf06d8f699add17972ceb54b25e6021c3a2a727afd3370e960afbf345a75fddd2d221ba85a5f7b07e5607eec1e"},{"message":{"epoch":"260","validator_index":"503"},"signature":"0xa44079752dfa36b925f0ff675dfd10b5b7cc0c178839356d0bda9c83b6df01f6bfdd904af92373002bfac40277941d2809c4152fc61007ae4f2c73e550ed02f425419efae0461d8829746c7a3d36dcae5bc37158ede7dd30ccc33930783b6194"},{"message":{"epoch":"260","validator_index":"502"},"signature":"0xb193b547c2d45341c9aedd0a22f4afc565d9aaa3a04889df2f8ad608bb31b44a0391c69383f0f4725cea291332c081ff0a48e850d246dd0be40880bf17316eb4b2eaf4b8b6ba6d59c93aea3af98988f05cb2ddf61d8637f943864ebfe7c9707c"},{"message":{"epoch":"260","validator_index":"501"},"signature":"0x88afe9a0215d2a67c451fcbdc358237c4d5dce6b46973ae527afb7f8fb1da800d6a3dd7f6387028a57737b354b7db88803bd6f2a59c7fb84229f42e6c6ea1b7510cb2a28026ff8f2eefb8fc7e2a83115197b7a1bd35fbf0afcc69e4b6e581911"},{"message":{"epoch":"260","validator_index":"500"},"signature":"0xa2f2399070bcfa3f50894d7170d1343ab5f52d6bdc155124e867bcde936aee4e0bb69f164dee5fa07d47abccb8844ec101126caf0402f1a757934f8e7b5904a60cedc283b5e9801f2a71f80cda16e910d72518d469a9a40cd94b8ad3cca10136"},{"message":{"epoch":"260","validator_index":"499"},"signature":"0x86abacd204c85cfc40d71853422001e44134b1900138fccb409928b7e663270476e3d7a7e0aaa103c693cad3629da1aa056cac30c8aab1a4eb50d81bb0711db3dba1d741562b103f67f495996b18fad779d3d9cc508763ab883a7cd6858bdc51"},{"message":{"epoch":"260","validator_index":"498"},"signature":"0xb86533e02779dd0f959dbf1b0fa195126ccc945fd0a7c5b7370aefc16f8f130d083c0c1c58a5c18e8119d7912dd532d91765dd26ad5ef3991238bc093bab79d511b1d8484482eec9b6b4a98f4a8928819ea58fc857ed80b59fe9cb7a33fe60a2"},{"message":{"epoch":"260","validator_index":"495"},"signature":"0x80a5c7c52a246dcaaf67caf6285ea518581835af668d1a64723b321b167464e238248c0017d5265be373c9079d7b529b10aedc37835683e5e1320c3ad6fa1f72d52046a49b061935e1631565912d2f2482434007957fe9903edecf4dad8e5bb8"},{"message":{"epoch":"260","validator_index":"494"},"signature":"0xb6a0e4cdc1815f03166218963ec9cc4c5d607a67d659d1227386e16f90d3e39c6cddf696e3534f3824ca5aff8c734bab153f3bab701247cdcea16db31c94846c1cd3781b1861485ad813d025bf0a486c592dd1f9afa1134e8288e4fef44d2f3c"},{"message":{"epoch":"260","validator_index":"492"},"signature":"0xad850276510c2e41d059df6a1cefab9f1b66463da47b0fc772b21ed90c13e1bd6f86def8b2ecb867f4f752612d9d25e30a151aa6ef630a1b6ddaa4420c240b37df0234ee332373fe132b0101a0486900c5733762beeacd95429dd34c34230d13"},{"message":{"epoch":"260","validator_index":"491"},"signature":"0x837669180ba01b65157087f49c7af19acb1439016eca9c699b7136da7e9bbc89d6bddc7a030388bbb7e149ebd521c4810f457846b9cf913f7ee6f01db4363d3ce92fc732e52359917d36c7e4a08158653f1a9a78a608c4b56ff3e155b2783974"}]},"parent_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","proposer_index":"210","slot":"8322","state_root":"0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1"},"signature":"0x8b915f3b9d2d4c7ccaacf5d56c1152b1e91eafd1f59ba734d09e78996930b63ca550499997fe6d590343aaf5997f0d0c14c986571992ac9ed188de2b31ae4b7d70dfb68edae8b012f72f284dc8da44f4af5a2bdf3dfc9c0897ec4f7165daa07a"},"execution_optimistic":false,"finalized":false,"version":"phase0"} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/blob_sidecars_1.json b/cl/beacon/handler/test_data/blob_sidecars_1.json new file mode 100644 index 00000000000..fb466dff65a --- /dev/null +++ b/cl/beacon/handler/test_data/blob_sidecars_1.json @@ -0,0 +1 @@ +{"data":[{"blob":"0x0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","index":"0","kzg_commitment":"0x450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","kzg_proof":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","proof":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"signed_block_header":{"message":{"body_root":"0x046ac489d926da1fea955a8b9f8a9e2fa519a976a1259a5cead8e2e0b2abea26","parent_root":"0x4c3ee7969e485696669498a88c17f70e6999c40603e2f4338869004392069063","proposer_index":"98","slot":"65","state_root":"0x4e111fd157af040c741732c84b93f32fa12d0f63e0710a2b6a9442e195b8a458"},"signature":"0x95727701ff1c057e5951eb7107c29df33b5d69bae6ea15c3a1413786f3025769c40bb1fab474eda4f9569f838306861c0393d275e640777b719cde54c469257eb520cbd71e6b2766c11bcd52412746a1ba2125cfe71d1bf240c3686862caa71e"}},{"blob":"0x0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","index":"1","kzg_commitment":"0x010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","kzg_proof":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","proof":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"signed_block_header":{"message":{"body_root":"0x046ac489d926da1fea955a8b9f8a9e2fa519a976a1259a5cead8e2e0b2abea26","parent_root":"0x4c3ee7969e485696669498a88c17f70e6999c40603e2f4338869004392069063","proposer_index":"98","slot":"65","state_root":"0x4e111fd157af040c741732c84b93f32fa12d0f63e0710a2b6a9442e195b8a458"},"signature":"0x95727701ff1c057e5951eb7107c29df33b5d69bae6ea15c3a1413786f3025769c40bb1fab474eda4f9569f838306861c0393d275e640777b719cde54c469257eb520cbd71e6b2766c11bcd52412746a1ba2125cfe71d1bf240c3686862caa71e"}}]} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/block_1.json b/cl/beacon/handler/test_data/block_1.json index 05289c754eb..72b906b853e 100644 --- a/cl/beacon/handler/test_data/block_1.json +++ b/cl/beacon/handler/test_data/block_1.json @@ -1,1974 +1 @@ -{ - "data": { - "signature": "0x8b915f3b9d2d4c7ccaacf5d56c1152b1e91eafd1f59ba734d09e78996930b63ca550499997fe6d590343aaf5997f0d0c14c986571992ac9ed188de2b31ae4b7d70dfb68edae8b012f72f284dc8da44f4af5a2bdf3dfc9c0897ec4f7165daa07a", - "message": { - "slot": "8322", - "proposer_index": "210", - "parent_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "state_root": "0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1", - "body": { - "randao_reveal": "0xa182a6c7224c53cc43492b7ba87b54e8303094ebcb8c822da09c4224791b461e34d089ac857acf05cd695679c25cffa30404832791fe424fd104e2e96ebbf583dd5ec4dcbc891e7f4e0dea402071dbd294810417221fc41e4f90e4837c694e1a", - "eth1_data": { - "deposit_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "deposit_count": "528", - "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, - "graffiti": "0x0000000000000000000000000000000000000000000000000000000000000000", - "proposer_slashings": [ - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "476", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x939584df88598e56fe144105c6933b4727d7b772539e65c57289df64cedee771377e4d0e94f85c25d39a6072997d309c09da8c477267670aa42f26fb0836c72ec5867fa2f34dc0eb7e043ef5d6421282d1515b0f8c7ffd4bbbf56ee8d61ed063" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "476", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x8a184441d5d944ed3c18549dd9e4640eda879f9e737ac4211fdddfd30a65e1a2a32a8aa918ca65ad9b863a15e8cfefc412608ca78fd54ea1e5cbbd5697d125cc721aac1b01e8984a33f025c4707623669573244a632ec7f37808c01fab143f58" - } - }, - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "406", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0xad97a43e9f28a90ff46b07a7bf65d520b89a78af47dbff1c10e4fc6bb36b4ee9c4f27f2a72c65311a03e7b48e06d86db1149147b14a8803d46f6a457092642dc89d3f2782bd48a373e3125af1a84f5b76d4ff7ddc85ac2650ca4c0f99e1af592" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "406", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x88d860d460526de062ee196400e24cb3055de2ff6abb31331d0bfeeebcdc77839d22ad6dfec39d81279f5527d1ffbd7e0a9d6eee7dce5a1cd6f79451537e9dfb6384f595e9d49673c58c181527a599dd4b38154e1322f1607f192ab0394f1411" - } - }, - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "281", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x8a2358ff11a30100a2492001827f54ff6c10dd6dcea66f6814dd1cccc4a49850bbbe36546e4f9b72410042a9d5882e8219a5a01708b8a95ca57984debe78f419a4ac921270a0f0c11c795a6c5ef1e6bfb96712751a4fee61059ca8fbe69639b6" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "281", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0xb820e03b7bfd21c2d97a4f2bc9dd1fd5325894757f7129646c7a39a02b2c1c8ca33d509b4e83491e79db02ac0490aa3308ee23bfa1f65bf4130ab07e377a8cbd4eace5b69801528322dde425b0a78310504c330da30be7cefc674573dbdb4502" - } - }, - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "169", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x88c81a6029f097a9f23e37c7677abfafa2921982e9aebffc35ca700e1aefcd49c2ab5d51c7b28ef3db3aad49d58a6407082ce1ecd7f7bd89cb764242890440b684fc0e1511e047434b25f3ad1a5e238e5bf97f51e9e37d6eed48e0b9fef64333" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "169", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0x815b492a6a3fb606f01dbc595c8b18b51b7f7a5a86b11f3ae57c48f7506a34606556a3cf2be683ce23cd0c7b2235667613f9dbcf98408b176f134645f122684bd8fe704c7a4eccb7bb7cbe33c6de377be4d742291d35d0ec8d6083c1b17b7261" - } - }, - { - "signed_header_1": { - "message": { - "slot": "8321", - "proposer_index": "397", - "parent_root": "0x3333333333333333333333333333333333333333333333333333333333333333", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0xae352ba8550d04c07591224449bd4967f66f9d639b731795f643b1e3fc5ad28317268dc9e289ce6075e8981a0e37d9440885e4f4292cb4b4656bd0c7bd9fc22d21eb4c7d1b46f1b08cdb1eb08d7a405985e8a406e6d93c5c3fdd20e91baba122" - }, - "signed_header_2": { - "message": { - "slot": "8321", - "proposer_index": "397", - "parent_root": "0x9999999999999999999999999999999999999999999999999999999999999999", - "state_root": "0x4444444444444444444444444444444444444444444444444444444444444444", - "body_root": "0x5555555555555555555555555555555555555555555555555555555555555555" - }, - "signature": "0xb9152f5510f2bfa5ab7b61829823f25f0c879ab9b852fcd90c17f751bed6e687dc523fcda177503509cd1befec36046a056a66f5826e2333b6de67430a16f6194416681ae69a1c3498cf8351abae4fac5d8f0b51b1734633d545d540bf269270" - } - } - ], - "attester_slashings": [ - { - "attestation_1": { - "attesting_indicies": [ - "96", - "353", - "445" - ], - "data": { - "slot": "555", - "index": "0", - "beacon_block_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "17", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - }, - "signature": "0xa7e932307a82913b23743198182a7e3c97675e8a1133e8d946bc59c62b1765046214ca0ea0e13b77e4f8acc8f226498103684f382826a9fff6c6c2ffdf9c65ffeb1680155025f489f676457634581ee4363bdfbe4d46fc4d1d9df93c3df8750d" - }, - "attestation_2": { - "attesting_indicies": [ - "96", - "353", - "445" - ], - "data": { - "slot": "555", - "index": "0", - "beacon_block_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "17", - "root": "0x0101010101010101010101010101010101010101010101010101010101010101" - } - }, - "signature": "0x89aadbd74370dc6d86b6b61c544c1e18949b0d8aa2d706605d1014d0266a043588a829243d343d1c3812621944ea34540aef1fbd34fe51b03a5734ebc5ec31057d1df0004faeca71d8687dd3af806e4332e19f6da5ab1d7da67fe017c2f2e68b" - } - } - ], - "attestations": [ - { - "aggregation_bits": "0xff3f", - "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", - "data": { - "slot": "8314", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c", - "data": { - "slot": "8292", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", - "data": { - "slot": "8317", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", - "data": { - "slot": "8309", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9", - "data": { - "slot": "8312", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3", - "data": { - "slot": "8297", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928", - "data": { - "slot": "8290", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", - "data": { - "slot": "8291", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223", - "data": { - "slot": "8311", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53", - "data": { - "slot": "8320", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "258", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "260", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", - "data": { - "slot": "8302", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", - "data": { - "slot": "8296", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", - "data": { - "slot": "8314", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", - "data": { - "slot": "8309", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247", - "data": { - "slot": "8318", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", - "data": { - "slot": "8307", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", - "data": { - "slot": "8307", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", - "data": { - "slot": "8291", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217", - "data": { - "slot": "8300", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0", - "data": { - "slot": "8304", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", - "data": { - "slot": "8296", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", - "data": { - "slot": "8302", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343", - "data": { - "slot": "8296", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", - "data": { - "slot": "8317", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", - "data": { - "slot": "8307", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3", - "data": { - "slot": "8297", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928", - "data": { - "slot": "8290", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", - "data": { - "slot": "8309", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed", - "data": { - "slot": "8308", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247", - "data": { - "slot": "8318", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c", - "data": { - "slot": "8292", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642", - "data": { - "slot": "8314", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", - "data": { - "slot": "8305", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217", - "data": { - "slot": "8300", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542", - "data": { - "slot": "8317", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed", - "data": { - "slot": "8308", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", - "data": { - "slot": "8299", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", - "data": { - "slot": "8305", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65", - "data": { - "slot": "8305", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53", - "data": { - "slot": "8320", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "258", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "260", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", - "data": { - "slot": "8298", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", - "data": { - "slot": "8298", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6", - "data": { - "slot": "8310", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527", - "data": { - "slot": "8313", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", - "data": { - "slot": "8299", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223", - "data": { - "slot": "8311", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", - "data": { - "slot": "8291", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce", - "data": { - "slot": "8306", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6", - "data": { - "slot": "8310", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929", - "data": { - "slot": "8298", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098", - "data": { - "slot": "8291", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804", - "data": { - "slot": "8293", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4", - "data": { - "slot": "8309", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9", - "data": { - "slot": "8312", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935", - "data": { - "slot": "8299", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0", - "data": { - "slot": "8304", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3", - "data": { - "slot": "8307", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff7f", - "signature": "0xa46775d208c119b097221ead6ee9afbf011258b03da07138d01fef8d5bd4681ecbab6f36687e8ae644191acebc94800a002b136de6ff892e4e0910d05402def66858ee8ad8f4b706fab163fe742959dcb86fa90d0b822e5937092852962acbb1", - "data": { - "slot": "8294", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - }, - { - "aggregation_bits": "0xff3f", - "signature": "0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079", - "data": { - "slot": "8302", - "index": "0", - "beacon_block_root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed", - "source": { - "epoch": "257", - "root": "0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e" - }, - "target": { - "epoch": "259", - "root": "0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed" - } - } - } - ], - "deposits": [ - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xa19c8e80ddc1caad60a172b66eb24e83ef200d77034b3e16bbee4d95e929a5c1a473563973338d22e7a566fdbd352f65", - "withdrawal_credentials": "0x00edbcfc97a6985ac86187522426240ed81b6493c880d0798360149ec8ce96d8", - "amount": "32000000000", - "signature": "0xb9b4b512b2c67a3e89edcbef91fc0ccd88c9a8c8654c51a130ffb2ab539c22a0c6b84928e8db4ca8a9d04f2dee312c3817a2bf360b6f5f2f3d1ba69b43cf4671290f7f58621887ad4dd1c9fe6d02cc59443e12447a20b38913f67597b0e3cc93" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb1f92d1a612942fb266c1e436f8d417282efa2805d5a5a819e3d07e358a70efbf0cc1671412ee986cd342c3d2255a324", - "withdrawal_credentials": "0x004ac0f181a01d43a7de32602b440cfbe3a091bb8c108c1fa35726ed301743f9", - "amount": "32000000000", - "signature": "0x8dbd6f9b4ce0a5277f66da9ec41776cff88a647ae1b4dde221a3bf41b9d4af1e77d0cff23185796815448f2e8148126a046b4b60947a32a1e201b4e979c91b395c1d4804ead1324d699eaa9c481efa69484a7946a0bad9788e50cf05847a30c4" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb532643cb8824a2fbd9196c10961f3ad2f0e319c3612bb15a51a3454593f44726383f006425c2e5952b156a6e14aceb0", - "withdrawal_credentials": "0x00f68c08152911b76f556f9d6dfc66d54e5abd63de04dc073d6b03f333ac00f3", - "amount": "32000000000", - "signature": "0x97852e8c02386bcc8a2dd51c70c48661c79bc1f89f9dce113a60fcde345abedf96fa186c4230013cf61f3546c5d9877a0eab7a5a4f4e4e0e4bcd917dc8368a88e3b8380de9e96ed36bfd605d55956af64a17b877f12762acfdd1c3effe4b4d42" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xa7a1c0bbad929dc02699e92597a66266bbd9533419693270c9b56bbdea643cd2ded9664da3c9fd8db2389277b5e585cc", - "withdrawal_credentials": "0x00e64188226da03f1f3d787ef65d86690aaa24d44e5ac92c99c413463ec47c26", - "amount": "32000000000", - "signature": "0xb0e97772997255840a5758e5325b9d1c56a292500838c5b2b697b7dd207c65a2ef928ebb9466d57782edf79f9b74bbbb069235c752f6527e8d8eb1c785d99326da78680056ee3084811b980185287259af64607e218d67a3b8f24d27c0659ce2" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0x9919842dee455266e4dc77c74088bddbfdb535b9a1bbe75a3cced0e428598038365afe11c7578e4dbd8fe4cae7237543", - "withdrawal_credentials": "0x000a2baaef8f6cc730d6a5474879aed4fe8c95da787cc2e15c3cdba14a9cef12", - "amount": "32000000000", - "signature": "0x99ef1ab7cfbe40d0a1e136138a4a8094e8f54a59c8d05052749b7af14931274fad1c0a44577de51099f2700505fa8861023b7bddabb274249a091acb3a4f7543f877da3792dad7897351c7a01343116a65959812fd55cc4ce4197b05f698761f" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb4ed73c02a816ba9d23ba0e023970772f82dd3a32a85eefd922958e33bcab7f9c85e20372e49107665926cca852b8b9a", - "withdrawal_credentials": "0x0017c0e8e177a6d58e4f8b93b2b66b13aef9c186cfccb9466d857a474b32b0d4", - "amount": "32000000000", - "signature": "0xa6dfce815f61ce81bf107bf5ccc1beae5f32b63a55e836a5983b63b90c0e7eac873387107c145ab59c32679091cfd28a0dbf2b73f75cd5ab01b75c6ba984b83c796c92b77adba152ab2a20132324fc4b20c8ec002663f16edec9308bb8f3d298" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb0d0dfaf7479f59319beb513bee16e1af576a0740a7a124a9947ec7c3826dbc0a5d5db15519e8423d7aa683f638f3da3", - "withdrawal_credentials": "0x00a61d2fddabb70c2db059af7e298b0395ef882dda24ae144f2b7ac88026e55d", - "amount": "32000000000", - "signature": "0x85a06ab8d9d576cb2810a88635b7a462d1cfb238db066b8caeba7f36562bb903630f8f24d157747debad5428c4f42a9a0a08dfd53c687cd7c3e17ec539f353357bbd89b7111246c99cc7fab24b8cd33a88cddf845f7d27c8a33079aa097069e3" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xb69614adf68d58f7d67110d7ced171ab934cb973f19c60cbb83161468655c42fe19a80a8e903030650bfaa9613a1ab2d", - "withdrawal_credentials": "0x0037c021fdef99bcf9fb90c02440571ab2faa0238485ed72e427b69dc8dddc91", - "amount": "32000000000", - "signature": "0x957f48b82d761d3e7f2e34eeff5922358d87f9b31c51e5af37a54fedeab7cfc09c3068f6ef5c97e0323dabff706bc7520113d51841c6dc2eaa044c8526bdaebcf35476c0b08cccb69ab0bab07c8e7ca2d6573b0ae96c32ae3d18764ae7ea78e0" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0xac897c8892a6f3effcd276e4f44f410644846a333db600ad12e1099020196b2f8104563c04d78fedf5afc5d87b91b1b5", - "withdrawal_credentials": "0x0075f9178dd8a199c55d5cebb9dccb00508e619d5b9abd2b7cd5ad3f671c5a9f", - "amount": "32000000000", - "signature": "0x95a886b35ead6f8fc09d33975108857abffc32d53db6546a7251d32ca6d1706e899155b3883b05e65a041e44c51db8480703f13cccc6575cd2d50d0506485b9669a096bb1a2d4879008c15b8c1cdcd2e1a5c4f12885311e24dd87dc32e1bce87" - } - }, - { - "proof": [ - "0x1a02000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": { - "pubkey": "0x8794fd3f4e5e66e6e81735d5726943833b82d1efd7d877e495a8c36955b7dfb95b3f6cfcef865fd7969fa2e17e628ab9", - "withdrawal_credentials": "0x0087adf1a29896ae52be67356ee9a4a5035450764c278382f8940d554668c208", - "amount": "32000000000", - "signature": "0xb42aa548fd9068db7916757390f6d011ad890b9f27a75d4676dd9edcd9017f5d7e2cec215a04502fcff253aa821865fb0c30549e7b5d5e62cc8df0264dc3b55538f15cfd375f9cb022a94c2a39201d757a502701acd50554dc4da29173c945bd" - } - } - ], - "voluntary_exits": [ - { - "message": { - "epoch": "260", - "validator_index": "504" - }, - "signature": "0x8fedc3077271b41f631d6062cc1cc8c8f074e486e9e692f198c5f82b94d2bb3b0fbf71cbac043cee94b56a7a06adf06d07bb7ecf06d8f699add17972ceb54b25e6021c3a2a727afd3370e960afbf345a75fddd2d221ba85a5f7b07e5607eec1e" - }, - { - "message": { - "epoch": "260", - "validator_index": "503" - }, - "signature": "0xa44079752dfa36b925f0ff675dfd10b5b7cc0c178839356d0bda9c83b6df01f6bfdd904af92373002bfac40277941d2809c4152fc61007ae4f2c73e550ed02f425419efae0461d8829746c7a3d36dcae5bc37158ede7dd30ccc33930783b6194" - }, - { - "message": { - "epoch": "260", - "validator_index": "502" - }, - "signature": "0xb193b547c2d45341c9aedd0a22f4afc565d9aaa3a04889df2f8ad608bb31b44a0391c69383f0f4725cea291332c081ff0a48e850d246dd0be40880bf17316eb4b2eaf4b8b6ba6d59c93aea3af98988f05cb2ddf61d8637f943864ebfe7c9707c" - }, - { - "message": { - "epoch": "260", - "validator_index": "501" - }, - "signature": "0x88afe9a0215d2a67c451fcbdc358237c4d5dce6b46973ae527afb7f8fb1da800d6a3dd7f6387028a57737b354b7db88803bd6f2a59c7fb84229f42e6c6ea1b7510cb2a28026ff8f2eefb8fc7e2a83115197b7a1bd35fbf0afcc69e4b6e581911" - }, - { - "message": { - "epoch": "260", - "validator_index": "500" - }, - "signature": "0xa2f2399070bcfa3f50894d7170d1343ab5f52d6bdc155124e867bcde936aee4e0bb69f164dee5fa07d47abccb8844ec101126caf0402f1a757934f8e7b5904a60cedc283b5e9801f2a71f80cda16e910d72518d469a9a40cd94b8ad3cca10136" - }, - { - "message": { - "epoch": "260", - "validator_index": "499" - }, - "signature": "0x86abacd204c85cfc40d71853422001e44134b1900138fccb409928b7e663270476e3d7a7e0aaa103c693cad3629da1aa056cac30c8aab1a4eb50d81bb0711db3dba1d741562b103f67f495996b18fad779d3d9cc508763ab883a7cd6858bdc51" - }, - { - "message": { - "epoch": "260", - "validator_index": "498" - }, - "signature": "0xb86533e02779dd0f959dbf1b0fa195126ccc945fd0a7c5b7370aefc16f8f130d083c0c1c58a5c18e8119d7912dd532d91765dd26ad5ef3991238bc093bab79d511b1d8484482eec9b6b4a98f4a8928819ea58fc857ed80b59fe9cb7a33fe60a2" - }, - { - "message": { - "epoch": "260", - "validator_index": "495" - }, - "signature": "0x80a5c7c52a246dcaaf67caf6285ea518581835af668d1a64723b321b167464e238248c0017d5265be373c9079d7b529b10aedc37835683e5e1320c3ad6fa1f72d52046a49b061935e1631565912d2f2482434007957fe9903edecf4dad8e5bb8" - }, - { - "message": { - "epoch": "260", - "validator_index": "494" - }, - "signature": "0xb6a0e4cdc1815f03166218963ec9cc4c5d607a67d659d1227386e16f90d3e39c6cddf696e3534f3824ca5aff8c734bab153f3bab701247cdcea16db31c94846c1cd3781b1861485ad813d025bf0a486c592dd1f9afa1134e8288e4fef44d2f3c" - }, - { - "message": { - "epoch": "260", - "validator_index": "492" - }, - "signature": "0xad850276510c2e41d059df6a1cefab9f1b66463da47b0fc772b21ed90c13e1bd6f86def8b2ecb867f4f752612d9d25e30a151aa6ef630a1b6ddaa4420c240b37df0234ee332373fe132b0101a0486900c5733762beeacd95429dd34c34230d13" - }, - { - "message": { - "epoch": "260", - "validator_index": "491" - }, - "signature": "0x837669180ba01b65157087f49c7af19acb1439016eca9c699b7136da7e9bbc89d6bddc7a030388bbb7e149ebd521c4810f457846b9cf913f7ee6f01db4363d3ce92fc732e52359917d36c7e4a08158653f1a9a78a608c4b56ff3e155b2783974" - } - ], - "sync_aggregate": { - "sync_committee_bits": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "signature": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" - }, - "execution_payload": { - "parent_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "fee_recipient": "0x0000000000000000000000000000000000000000", - "state_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "receipts_root": "0x0000000000000000000000000000000000000000000000000000000000000000", - "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "prev_randao": "0x0000000000000000000000000000000000000000000000000000000000000000", - "block_number": "0", - "gas_limit": "0", - "gas_used": "0", - "timestamp": "0", - "extra_data": null, - "base_fee_per_gas": "0x0000000000000000000000000000000000000000000000000000000000000000", - "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "transactions": null - }, - "execution_changes": [], - "blob_kzg_commitments": [] - } - } - }, - "finalized": false, - "version": 0, - "execution_optimistic": false -} +{"data":{"message":{"body":{"attestations":[{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8314","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8292","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8317","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8309","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8312","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8297","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8290","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8291","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8311","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8320","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8302","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8296","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8314","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8309","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8318","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8307","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8307","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8291","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8300","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8304","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8296","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8302","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8296","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x94fab4732e767881653a5923ca4a93fc2778d349cef972b077aa0fd2553946f578be6571d7a02fe14aa98b11a77475e115bc8062308b23a23c6ce71cd07c528a6e37d30324d57dcc36fa336575210bce5d71ccabf74f0dd96f839eefc1a49343"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8317","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8307","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8297","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x894270af1854ce4e65c6e09bc83c15171d564a2af871d0b442cacea78536e5cd34cf4a906025a6d87e12a172ceeb79990b86a1de7ed4ef40cffeca6b93402c3542682bb2914c34430e23038a57e8490abe809dc9f96f3b2caebed380113280b3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8290","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98aade2cf9dad0e1528edec0e76be15577601b6cbef68353e51748b6286bf08812e42fe8791147a54eeed34782249e3f0cc463e22d6cb1c6050636ca8d070531fe40e16913f2e5560f6e683a6781268ff08d32bc5899b00306a87eecc5603928"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8309","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8308","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8318","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xb60160a4024734b6c22e6083d755d97b22d107001965d35cd1aa5fc3c1059b4cb482c36c78609c0fa131631eb847d165177c877949e5baebb96a48f6e471c1d1d700619b4adeafa728b4d69de8d03d02854e4240d8e16d790168619cc2027247"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8292","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xb731b2df4dcaf841d50747f85b332170471895508c3af7e8bada14e58a816fed435460e1694e87e2887f19a0de201c3d0bc1ece52c26c519fd9131b25fa8a69b229c14ffd1c935d9e853aca8ab07eaae98a65daec09b2640b91961685e96d58c"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8314","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b63c286bff1c5dc6fb2e4878e73631e16db1cd3b07e9d0150b3ede4175635fe8db571cb486398e35923640606643d630bacc148d84e9c1060c32b55fe644e5c2573326b041767c5d45d45509a5403a7f2f1b2dd60e54bed26f407bb367a8642"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8305","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8300","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x9494651d4491cfc326f3439cebc3304aaf50a8e5598217da6df2a13b5cb9f9731cc8934f406c0243786b17f936d5892801fc34fc74fb4f52fec147536375dabd9f892940aacdea196e28cb21320bce9ede79b0a11333569d90e6deeb59869217"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8317","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x98416260b644654a4a90bda6032053f1eb3a12c59a3c7534f1ef348f2108c2837245bce74b3fd9f61ebae24860cc698100f864c4f26966c36431acbf0beea679807ba4eba9adfd1a267ef8d990290a2548af6456b1d0def6639ac47fd30c5542"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8308","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x980e36beab885b1f2d8460e7ece21054e9d235fea5429836bc6df687e0c2f41b7556d9c86cd9c1ca7a69e5a51991b8d617eea619ba8e312d568e38f8de8adb8b4a9ec3e9dab2d47df45b35d9f2488236c042d66cd0916fee70e8a3295353b0ed"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8299","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8305","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8305","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x906fd8d1a45b719a36eb5e09b5e13f9d0fb7faaa194d84b90e0b2b811ce299f385bf18bb07844620ec032b6f267d04781480dc303081be7c5d8ba735bccd682dd3ddb6345bae13bd96068eb86b148e73b8931b642705b1696d9ada4159b1dd65"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8320","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8bfaed4667e28ed9e39464c7c57027ae345f22847b6ac1aa7e5f342fdb6cdca9d78a962da68f9e34e0453f68fa363fcd196881e2dd76abcab6814439d73448f404124ad2e2f57b59b0df57699d913e24f79c53f129a09c05f2659e4444f4bb53"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8298","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8298","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8310","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8313","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x90428ae131501833950bbeccfa738a2af4cbb5c6a04ae8f5e21d7fdd00dda2452d32e0630cd989a4863e8cb81303e1ca04b8f3abcf0b4c456fd7856c0af8585d206f109972b635bcefd72a537a67839b033a6c61f00af536a5e7107fdb9bf527"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8299","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8311","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8d852ffa1c5960ba3a5d09837fbdb859bbf9045001b3d1dc1c4d22c6b4bc5b6d506f6ef667b5c7c9fbfb1dd0cfe3617405f56750f8b5eb25b3539d0a4c94822b198c524de92a6c68982ce17f985ff5283cea6ac8dabe41828ce38edb7e9fe223"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8291","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8306","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa44792a6341475c3eff0c11ad62bc19154d5ed48a4b81869ed49885499d5f768c81f357dd6a3ea60aa2f15a184b098f40a1382cfaea0a8438d62d9cca27c85023245b1838e2e4f1d4e65926f8c6a3032740b36c0a3c8aa69850648ac6c12b3ce"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8310","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x912fe61ef99df1c96d7e5e6bd01ee5a6be73389978c7f4670c4e978beb6b8e4d640f238c6ba3426e935ac8f8527d118c06f464b08f6527ebebac793728ccc1190ee6701838c6f2b3b06391dc2d69232e63af11023ffe8e1c66eb3bd1075085a6"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8298","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xabdb4b0a06e2d036021b0cd847fb6e8f4d2deca86e60788a6ae2bb9bd55b62ebf35716290f958e075812e8dfcba2beef00b002459e5932d7e7478cf00e91300f9f53a84f593ce40afb1f3c07b1db789ba5da757d313a9ee4cac6b2e28ed2f929"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8291","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xab42974cba2e3fa75faa4c1f717caf7c2a953f4964063462ed32629764336124fd2f2f430ddf0291325722206250452c109b14cded0e51171b89b106b6b2044291128c3d6966c804490033b9e5fd06450ea50d22b5ab761892c6c3f4de79e098"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8293","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x876c656d7889c15cd355d6652b347a25dc8fd7ffc383f0d14ad436b5f1af9ac09e06168ad71be76b85c3dd44ae79cc0f04f250a0bcc529d06a1032283e2b8b384d582c0ace50bf747264a199647697f159d06be75ecfb24da2a8b625a3087804"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8309","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x805e92ba1e4c88489f178202ca5d7ce96e7b874fe98bdee80ab6423441bd37ff3f0fe724bc088f58050ac2a8f81ec5e80401d76caeb65795b5794e7a20d0384f3bfd162b281a17e96cc98087c651d893b05154203af7a7591afe1056db934ec4"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8312","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x95bbaf8dcff64306f01e0b09b27ebe3c761def7edd75542e213586ee0c6d3fc313ae102760abd1262b4f8c00e57603fa01627390011e3a5dea555c74798d7a3e1da68e00e3cdb9d8e4af112b6ff83951bd926288d24eb82e3f203a3160a4d7a9"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8299","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x815ca84fb30789d731ebf977b6ecdd60c30818202d464acdc2947143f62342c4a5d01c6cdb32b1e223d032c746fa98d30899164e6ab37828e6d049f32e46a5c59d742d82005f9a629938761e3abce454cec104352665cd81bbcffa2fce22a935"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8304","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x87c3f6fac9ea937a8e8bd4f6dccb7893cb8ea39c65e0313a30e903c220dba2c8597df1d75ee21fd905eab1ebf2261ebf085b13115363d72adc9ccd9527293b7218c39e94c257c94a8c95c32cf909cf58e8b7ece89a9bd21107a413b3fe3172e0"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8307","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x8b1fbaba2982cd546a7d19d4af3755163112349a0e6d13f05c69807c709f363359c2cfff8a4afa66bd24445eb12b923615c33892a82d8081575207e4165a1d0c944fd3871ff885662c3921b152e674130879d67a0692b4867ad9fc2d20e24fa3"},{"aggregation_bits":"0xff7f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8294","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa46775d208c119b097221ead6ee9afbf011258b03da07138d01fef8d5bd4681ecbab6f36687e8ae644191acebc94800a002b136de6ff892e4e0910d05402def66858ee8ad8f4b706fab163fe742959dcb86fa90d0b822e5937092852962acbb1"},{"aggregation_bits":"0xff3f","data":{"beacon_block_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","index":"0","slot":"8302","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"259","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0x97426dbbe61af8a68ac683ba95ad871baade096e9287e2d533c1efba04430b7083283485db5b1624fb03639065e8c754155cfe68986d526c1a771b67e45c0e8c97428dee8c6d80cc68892b961e8352d50f34e2623dc3b7ba2cb5dba28a854079"}],"attester_slashings":[{"attestation_1":{"attesting_indicies":["96","353","445"],"data":{"beacon_block_root":"0x0000000000000000000000000000000000000000000000000000000000000000","index":"0","slot":"555","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"17","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}},"signature":"0xa7e932307a82913b23743198182a7e3c97675e8a1133e8d946bc59c62b1765046214ca0ea0e13b77e4f8acc8f226498103684f382826a9fff6c6c2ffdf9c65ffeb1680155025f489f676457634581ee4363bdfbe4d46fc4d1d9df93c3df8750d"},"attestation_2":{"attesting_indicies":["96","353","445"],"data":{"beacon_block_root":"0x0000000000000000000000000000000000000000000000000000000000000000","index":"0","slot":"555","source":{"epoch":"257","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"17","root":"0x0101010101010101010101010101010101010101010101010101010101010101"}},"signature":"0x89aadbd74370dc6d86b6b61c544c1e18949b0d8aa2d706605d1014d0266a043588a829243d343d1c3812621944ea34540aef1fbd34fe51b03a5734ebc5ec31057d1df0004faeca71d8687dd3af806e4332e19f6da5ab1d7da67fe017c2f2e68b"}}],"blob_kzg_commitments":[],"bls_to_execution_changes":[],"deposits":[{"data":{"amount":"32000000000","pubkey":"0xa19c8e80ddc1caad60a172b66eb24e83ef200d77034b3e16bbee4d95e929a5c1a473563973338d22e7a566fdbd352f65","signature":"0xb9b4b512b2c67a3e89edcbef91fc0ccd88c9a8c8654c51a130ffb2ab539c22a0c6b84928e8db4ca8a9d04f2dee312c3817a2bf360b6f5f2f3d1ba69b43cf4671290f7f58621887ad4dd1c9fe6d02cc59443e12447a20b38913f67597b0e3cc93","withdrawal_credentials":"0x00edbcfc97a6985ac86187522426240ed81b6493c880d0798360149ec8ce96d8"},"proof":["0x7e4ac18e104e72c0e90675c6caca41a8b6147b55c93df90177b3875e4ce83a04","0x458368e9794627a362da6580eabde010c6147a98132bab1fc5201a3890333a4b","0x492fcfbd51e4c43551b6a683cd1d103994c5f96d3a9671e1fb228e3a8d0ccbdd","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb1f92d1a612942fb266c1e436f8d417282efa2805d5a5a819e3d07e358a70efbf0cc1671412ee986cd342c3d2255a324","signature":"0x8dbd6f9b4ce0a5277f66da9ec41776cff88a647ae1b4dde221a3bf41b9d4af1e77d0cff23185796815448f2e8148126a046b4b60947a32a1e201b4e979c91b395c1d4804ead1324d699eaa9c481efa69484a7946a0bad9788e50cf05847a30c4","withdrawal_credentials":"0x004ac0f181a01d43a7de32602b440cfbe3a091bb8c108c1fa35726ed301743f9"},"proof":["0xb87c4b5cfdd2b2dde4c1d282cf4b68e81d232038820320b11445df5001a68e7c","0x458368e9794627a362da6580eabde010c6147a98132bab1fc5201a3890333a4b","0x492fcfbd51e4c43551b6a683cd1d103994c5f96d3a9671e1fb228e3a8d0ccbdd","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb532643cb8824a2fbd9196c10961f3ad2f0e319c3612bb15a51a3454593f44726383f006425c2e5952b156a6e14aceb0","signature":"0x97852e8c02386bcc8a2dd51c70c48661c79bc1f89f9dce113a60fcde345abedf96fa186c4230013cf61f3546c5d9877a0eab7a5a4f4e4e0e4bcd917dc8368a88e3b8380de9e96ed36bfd605d55956af64a17b877f12762acfdd1c3effe4b4d42","withdrawal_credentials":"0x00f68c08152911b76f556f9d6dfc66d54e5abd63de04dc073d6b03f333ac00f3"},"proof":["0x3fcccf842d7d1954fb2c1aacd56d76733564644838e52af17cfe1d0eb778ffd5","0x120dce76ce67112e449d83e5d0b488fd11fd1c41c352a6e88f1911a29a7827eb","0x492fcfbd51e4c43551b6a683cd1d103994c5f96d3a9671e1fb228e3a8d0ccbdd","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xa7a1c0bbad929dc02699e92597a66266bbd9533419693270c9b56bbdea643cd2ded9664da3c9fd8db2389277b5e585cc","signature":"0xb0e97772997255840a5758e5325b9d1c56a292500838c5b2b697b7dd207c65a2ef928ebb9466d57782edf79f9b74bbbb069235c752f6527e8d8eb1c785d99326da78680056ee3084811b980185287259af64607e218d67a3b8f24d27c0659ce2","withdrawal_credentials":"0x00e64188226da03f1f3d787ef65d86690aaa24d44e5ac92c99c413463ec47c26"},"proof":["0xd3955560f10ca441dfc6f92be6798857e9f81833cf1672e75fe1830f8a21ddb4","0x120dce76ce67112e449d83e5d0b488fd11fd1c41c352a6e88f1911a29a7827eb","0x492fcfbd51e4c43551b6a683cd1d103994c5f96d3a9671e1fb228e3a8d0ccbdd","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0x9919842dee455266e4dc77c74088bddbfdb535b9a1bbe75a3cced0e428598038365afe11c7578e4dbd8fe4cae7237543","signature":"0x99ef1ab7cfbe40d0a1e136138a4a8094e8f54a59c8d05052749b7af14931274fad1c0a44577de51099f2700505fa8861023b7bddabb274249a091acb3a4f7543f877da3792dad7897351c7a01343116a65959812fd55cc4ce4197b05f698761f","withdrawal_credentials":"0x000a2baaef8f6cc730d6a5474879aed4fe8c95da787cc2e15c3cdba14a9cef12"},"proof":["0x483eee486429a5f5c215aa1d843f352300e48345c10e329725907a65b61ccc04","0x02ef49759b3e3b3d4eca789a7ea68e687d4cf0d09f5891e7a47e96c2e13f626a","0x5c6eb7a447d36de81aeb12e0e4ee44c0e27f1f808dc38e9bd00ef7e8fa3c6725","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb4ed73c02a816ba9d23ba0e023970772f82dd3a32a85eefd922958e33bcab7f9c85e20372e49107665926cca852b8b9a","signature":"0xa6dfce815f61ce81bf107bf5ccc1beae5f32b63a55e836a5983b63b90c0e7eac873387107c145ab59c32679091cfd28a0dbf2b73f75cd5ab01b75c6ba984b83c796c92b77adba152ab2a20132324fc4b20c8ec002663f16edec9308bb8f3d298","withdrawal_credentials":"0x0017c0e8e177a6d58e4f8b93b2b66b13aef9c186cfccb9466d857a474b32b0d4"},"proof":["0xd46d72b4a13923f739ef7f69526c405af02941c64a3d73585000a321f06e866d","0x02ef49759b3e3b3d4eca789a7ea68e687d4cf0d09f5891e7a47e96c2e13f626a","0x5c6eb7a447d36de81aeb12e0e4ee44c0e27f1f808dc38e9bd00ef7e8fa3c6725","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb0d0dfaf7479f59319beb513bee16e1af576a0740a7a124a9947ec7c3826dbc0a5d5db15519e8423d7aa683f638f3da3","signature":"0x85a06ab8d9d576cb2810a88635b7a462d1cfb238db066b8caeba7f36562bb903630f8f24d157747debad5428c4f42a9a0a08dfd53c687cd7c3e17ec539f353357bbd89b7111246c99cc7fab24b8cd33a88cddf845f7d27c8a33079aa097069e3","withdrawal_credentials":"0x00a61d2fddabb70c2db059af7e298b0395ef882dda24ae144f2b7ac88026e55d"},"proof":["0x29b1515f1533718ce5cdebb90590c0bf30caefcaf6c92ad72c821d7a78f83684","0x50e358c6d946202b00d58595e2cdc1ded7d8dd8b1f1df149632c4a508ee7067c","0x5c6eb7a447d36de81aeb12e0e4ee44c0e27f1f808dc38e9bd00ef7e8fa3c6725","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xb69614adf68d58f7d67110d7ced171ab934cb973f19c60cbb83161468655c42fe19a80a8e903030650bfaa9613a1ab2d","signature":"0x957f48b82d761d3e7f2e34eeff5922358d87f9b31c51e5af37a54fedeab7cfc09c3068f6ef5c97e0323dabff706bc7520113d51841c6dc2eaa044c8526bdaebcf35476c0b08cccb69ab0bab07c8e7ca2d6573b0ae96c32ae3d18764ae7ea78e0","withdrawal_credentials":"0x0037c021fdef99bcf9fb90c02440571ab2faa0238485ed72e427b69dc8dddc91"},"proof":["0x8b0f06508d861e2d5a18c3565217368ea18eb41985729a506d8a6ab2427f192d","0x50e358c6d946202b00d58595e2cdc1ded7d8dd8b1f1df149632c4a508ee7067c","0x5c6eb7a447d36de81aeb12e0e4ee44c0e27f1f808dc38e9bd00ef7e8fa3c6725","0xe0a4bdf253ab854666078b97d3c04e6944dbbf2d52f4147fbc6a2074dd5d95a2","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0xac897c8892a6f3effcd276e4f44f410644846a333db600ad12e1099020196b2f8104563c04d78fedf5afc5d87b91b1b5","signature":"0x95a886b35ead6f8fc09d33975108857abffc32d53db6546a7251d32ca6d1706e899155b3883b05e65a041e44c51db8480703f13cccc6575cd2d50d0506485b9669a096bb1a2d4879008c15b8c1cdcd2e1a5c4f12885311e24dd87dc32e1bce87","withdrawal_credentials":"0x0075f9178dd8a199c55d5cebb9dccb00508e619d5b9abd2b7cd5ad3f671c5a9f"},"proof":["0x50f17abe0de10eea94174120fbfa9f93b2761e2df90717235b422a62ca34cc11","0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b","0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71","0xd30099c5c4129378264a4c45ed088fb4552ed73f04cdcd0c4f11acae180e7f9a","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]},{"data":{"amount":"32000000000","pubkey":"0x8794fd3f4e5e66e6e81735d5726943833b82d1efd7d877e495a8c36955b7dfb95b3f6cfcef865fd7969fa2e17e628ab9","signature":"0xb42aa548fd9068db7916757390f6d011ad890b9f27a75d4676dd9edcd9017f5d7e2cec215a04502fcff253aa821865fb0c30549e7b5d5e62cc8df0264dc3b55538f15cfd375f9cb022a94c2a39201d757a502701acd50554dc4da29173c945bd","withdrawal_credentials":"0x0087adf1a29896ae52be67356ee9a4a5035450764c278382f8940d554668c208"},"proof":["0x409002728188e6b1455636b55469598dbc31a3633a7f53a743a5576e3356c0b3","0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b","0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71","0xd30099c5c4129378264a4c45ed088fb4552ed73f04cdcd0c4f11acae180e7f9a","0x94d56d67b7c2e9cb1eb1b7945f84677037bdd87d2850bbb12fa6819b7c137fba","0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30","0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1","0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c","0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193","0x1d3126aa021ce6d47e1599e94501454852eb785433220b897fe82837ca550f1e","0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b","0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220","0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f","0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e","0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784","0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb","0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb","0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab","0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4","0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f","0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa","0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c","0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167","0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7","0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0","0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544","0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765","0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4","0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1","0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636","0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c","0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7","0x1a02000000000000000000000000000000000000000000000000000000000000"]}],"eth1_data":{"block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","deposit_count":"528","deposit_root":"0x0000000000000000000000000000000000000000000000000000000000000000"},"execution_payload":{"base_fee_per_gas":"0","blob_gas_used":"0","block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","block_number":"0","excess_blob_gas":"0","extra_data":null,"fee_recipient":"0x0000000000000000000000000000000000000000","gas_limit":"0","gas_used":"0","logs_bloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","parent_hash":"0x0000000000000000000000000000000000000000000000000000000000000000","prev_randao":"0x0000000000000000000000000000000000000000000000000000000000000000","receipts_root":"0x0000000000000000000000000000000000000000000000000000000000000000","state_root":"0x0000000000000000000000000000000000000000000000000000000000000000","timestamp":"0","transactions":null},"graffiti":"0x0000000000000000000000000000000000000000000000000000000000000000","proposer_slashings":[{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"476","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x939584df88598e56fe144105c6933b4727d7b772539e65c57289df64cedee771377e4d0e94f85c25d39a6072997d309c09da8c477267670aa42f26fb0836c72ec5867fa2f34dc0eb7e043ef5d6421282d1515b0f8c7ffd4bbbf56ee8d61ed063"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"476","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x8a184441d5d944ed3c18549dd9e4640eda879f9e737ac4211fdddfd30a65e1a2a32a8aa918ca65ad9b863a15e8cfefc412608ca78fd54ea1e5cbbd5697d125cc721aac1b01e8984a33f025c4707623669573244a632ec7f37808c01fab143f58"}},{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"406","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0xad97a43e9f28a90ff46b07a7bf65d520b89a78af47dbff1c10e4fc6bb36b4ee9c4f27f2a72c65311a03e7b48e06d86db1149147b14a8803d46f6a457092642dc89d3f2782bd48a373e3125af1a84f5b76d4ff7ddc85ac2650ca4c0f99e1af592"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"406","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x88d860d460526de062ee196400e24cb3055de2ff6abb31331d0bfeeebcdc77839d22ad6dfec39d81279f5527d1ffbd7e0a9d6eee7dce5a1cd6f79451537e9dfb6384f595e9d49673c58c181527a599dd4b38154e1322f1607f192ab0394f1411"}},{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"281","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x8a2358ff11a30100a2492001827f54ff6c10dd6dcea66f6814dd1cccc4a49850bbbe36546e4f9b72410042a9d5882e8219a5a01708b8a95ca57984debe78f419a4ac921270a0f0c11c795a6c5ef1e6bfb96712751a4fee61059ca8fbe69639b6"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"281","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0xb820e03b7bfd21c2d97a4f2bc9dd1fd5325894757f7129646c7a39a02b2c1c8ca33d509b4e83491e79db02ac0490aa3308ee23bfa1f65bf4130ab07e377a8cbd4eace5b69801528322dde425b0a78310504c330da30be7cefc674573dbdb4502"}},{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"169","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x88c81a6029f097a9f23e37c7677abfafa2921982e9aebffc35ca700e1aefcd49c2ab5d51c7b28ef3db3aad49d58a6407082ce1ecd7f7bd89cb764242890440b684fc0e1511e047434b25f3ad1a5e238e5bf97f51e9e37d6eed48e0b9fef64333"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"169","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0x815b492a6a3fb606f01dbc595c8b18b51b7f7a5a86b11f3ae57c48f7506a34606556a3cf2be683ce23cd0c7b2235667613f9dbcf98408b176f134645f122684bd8fe704c7a4eccb7bb7cbe33c6de377be4d742291d35d0ec8d6083c1b17b7261"}},{"signed_header_1":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x3333333333333333333333333333333333333333333333333333333333333333","proposer_index":"397","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0xae352ba8550d04c07591224449bd4967f66f9d639b731795f643b1e3fc5ad28317268dc9e289ce6075e8981a0e37d9440885e4f4292cb4b4656bd0c7bd9fc22d21eb4c7d1b46f1b08cdb1eb08d7a405985e8a406e6d93c5c3fdd20e91baba122"},"signed_header_2":{"message":{"body_root":"0x5555555555555555555555555555555555555555555555555555555555555555","parent_root":"0x9999999999999999999999999999999999999999999999999999999999999999","proposer_index":"397","slot":"8321","state_root":"0x4444444444444444444444444444444444444444444444444444444444444444"},"signature":"0xb9152f5510f2bfa5ab7b61829823f25f0c879ab9b852fcd90c17f751bed6e687dc523fcda177503509cd1befec36046a056a66f5826e2333b6de67430a16f6194416681ae69a1c3498cf8351abae4fac5d8f0b51b1734633d545d540bf269270"}}],"randao_reveal":"0xa182a6c7224c53cc43492b7ba87b54e8303094ebcb8c822da09c4224791b461e34d089ac857acf05cd695679c25cffa30404832791fe424fd104e2e96ebbf583dd5ec4dcbc891e7f4e0dea402071dbd294810417221fc41e4f90e4837c694e1a","sync_aggregate":{"sync_committee_bits":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","sync_committee_signature":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"voluntary_exits":[{"message":{"epoch":"260","validator_index":"504"},"signature":"0x8fedc3077271b41f631d6062cc1cc8c8f074e486e9e692f198c5f82b94d2bb3b0fbf71cbac043cee94b56a7a06adf06d07bb7ecf06d8f699add17972ceb54b25e6021c3a2a727afd3370e960afbf345a75fddd2d221ba85a5f7b07e5607eec1e"},{"message":{"epoch":"260","validator_index":"503"},"signature":"0xa44079752dfa36b925f0ff675dfd10b5b7cc0c178839356d0bda9c83b6df01f6bfdd904af92373002bfac40277941d2809c4152fc61007ae4f2c73e550ed02f425419efae0461d8829746c7a3d36dcae5bc37158ede7dd30ccc33930783b6194"},{"message":{"epoch":"260","validator_index":"502"},"signature":"0xb193b547c2d45341c9aedd0a22f4afc565d9aaa3a04889df2f8ad608bb31b44a0391c69383f0f4725cea291332c081ff0a48e850d246dd0be40880bf17316eb4b2eaf4b8b6ba6d59c93aea3af98988f05cb2ddf61d8637f943864ebfe7c9707c"},{"message":{"epoch":"260","validator_index":"501"},"signature":"0x88afe9a0215d2a67c451fcbdc358237c4d5dce6b46973ae527afb7f8fb1da800d6a3dd7f6387028a57737b354b7db88803bd6f2a59c7fb84229f42e6c6ea1b7510cb2a28026ff8f2eefb8fc7e2a83115197b7a1bd35fbf0afcc69e4b6e581911"},{"message":{"epoch":"260","validator_index":"500"},"signature":"0xa2f2399070bcfa3f50894d7170d1343ab5f52d6bdc155124e867bcde936aee4e0bb69f164dee5fa07d47abccb8844ec101126caf0402f1a757934f8e7b5904a60cedc283b5e9801f2a71f80cda16e910d72518d469a9a40cd94b8ad3cca10136"},{"message":{"epoch":"260","validator_index":"499"},"signature":"0x86abacd204c85cfc40d71853422001e44134b1900138fccb409928b7e663270476e3d7a7e0aaa103c693cad3629da1aa056cac30c8aab1a4eb50d81bb0711db3dba1d741562b103f67f495996b18fad779d3d9cc508763ab883a7cd6858bdc51"},{"message":{"epoch":"260","validator_index":"498"},"signature":"0xb86533e02779dd0f959dbf1b0fa195126ccc945fd0a7c5b7370aefc16f8f130d083c0c1c58a5c18e8119d7912dd532d91765dd26ad5ef3991238bc093bab79d511b1d8484482eec9b6b4a98f4a8928819ea58fc857ed80b59fe9cb7a33fe60a2"},{"message":{"epoch":"260","validator_index":"495"},"signature":"0x80a5c7c52a246dcaaf67caf6285ea518581835af668d1a64723b321b167464e238248c0017d5265be373c9079d7b529b10aedc37835683e5e1320c3ad6fa1f72d52046a49b061935e1631565912d2f2482434007957fe9903edecf4dad8e5bb8"},{"message":{"epoch":"260","validator_index":"494"},"signature":"0xb6a0e4cdc1815f03166218963ec9cc4c5d607a67d659d1227386e16f90d3e39c6cddf696e3534f3824ca5aff8c734bab153f3bab701247cdcea16db31c94846c1cd3781b1861485ad813d025bf0a486c592dd1f9afa1134e8288e4fef44d2f3c"},{"message":{"epoch":"260","validator_index":"492"},"signature":"0xad850276510c2e41d059df6a1cefab9f1b66463da47b0fc772b21ed90c13e1bd6f86def8b2ecb867f4f752612d9d25e30a151aa6ef630a1b6ddaa4420c240b37df0234ee332373fe132b0101a0486900c5733762beeacd95429dd34c34230d13"},{"message":{"epoch":"260","validator_index":"491"},"signature":"0x837669180ba01b65157087f49c7af19acb1439016eca9c699b7136da7e9bbc89d6bddc7a030388bbb7e149ebd521c4810f457846b9cf913f7ee6f01db4363d3ce92fc732e52359917d36c7e4a08158653f1a9a78a608c4b56ff3e155b2783974"}]},"parent_root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed","proposer_index":"210","slot":"8322","state_root":"0x933d6650f2999f17012e781f5012981edb549e5935de1c981fce81cdd241d4e1"},"signature":"0x8b915f3b9d2d4c7ccaacf5d56c1152b1e91eafd1f59ba734d09e78996930b63ca550499997fe6d590343aaf5997f0d0c14c986571992ac9ed188de2b31ae4b7d70dfb68edae8b012f72f284dc8da44f4af5a2bdf3dfc9c0897ec4f7165daa07a"},"execution_optimistic":false,"finalized":false,"version":"phase0"} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/duties_1.yaml b/cl/beacon/handler/test_data/duties_1.yaml index f1a51002917..91ff01101d6 100644 --- a/cl/beacon/handler/test_data/duties_1.yaml +++ b/cl/beacon/handler/test_data/duties_1.yaml @@ -1,2 +1,2 @@ -- {"data":[{"pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","validator_index":"0","committee_index":"0","committee_length":"14","validator_committee_index":"0","committees_at_slot":"1","slot":"8322"},{"pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","validator_index":"4","committee_index":"0","committee_length":"13","validator_committee_index":"5","committees_at_slot":"1","slot":"8327"},{"pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","validator_index":"6","committee_index":"0","committee_length":"13","validator_committee_index":"10","committees_at_slot":"1","slot":"8327"},{"pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","validator_index":"5","committee_index":"0","committee_length":"14","validator_committee_index":"10","committees_at_slot":"1","slot":"8329"},{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","validator_index":"2","committee_index":"0","committee_length":"14","validator_committee_index":"11","committees_at_slot":"1","slot":"8331"},{"pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","validator_index":"9","committee_index":"0","committee_length":"14","validator_committee_index":"8","committees_at_slot":"1","slot":"8342"},{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","validator_index":"3","committee_index":"0","committee_length":"13","validator_committee_index":"6","committees_at_slot":"1","slot":"8348"}],"execution_optimistic":false} -- {"data":[],"execution_optimistic":false} +- {"data":[{"committee_index":"0","committee_length":"14","committees_at_slot":"1","pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","slot":"8322","validator_committee_index":"0","validator_index":"0"},{"committee_index":"0","committee_length":"13","committees_at_slot":"1","pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","slot":"8327","validator_committee_index":"5","validator_index":"4"},{"committee_index":"0","committee_length":"13","committees_at_slot":"1","pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","slot":"8327","validator_committee_index":"10","validator_index":"6"},{"committee_index":"0","committee_length":"14","committees_at_slot":"1","pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","slot":"8329","validator_committee_index":"10","validator_index":"5"},{"committee_index":"0","committee_length":"14","committees_at_slot":"1","pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","slot":"8331","validator_committee_index":"11","validator_index":"2"},{"committee_index":"0","committee_length":"14","committees_at_slot":"1","pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","slot":"8342","validator_committee_index":"8","validator_index":"9"},{"committee_index":"0","committee_length":"13","committees_at_slot":"1","pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","slot":"8348","validator_committee_index":"6","validator_index":"3"}],"dependent_root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e","execution_optimistic":false} +- {"data":[],"execution_optimistic":false, "dependent_root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"} diff --git a/cl/beacon/handler/test_data/duties_sync_1.yaml b/cl/beacon/handler/test_data/duties_sync_1.yaml index 9d655806893..a4f82319469 100644 --- a/cl/beacon/handler/test_data/duties_sync_1.yaml +++ b/cl/beacon/handler/test_data/duties_sync_1.yaml @@ -1,2 +1,2 @@ -- {"data":[{"pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","validator_index":"0","validator_sync_committee_indicies":["30","286"]},{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","validator_index":"1","validator_sync_committee_indicies":["120","376"]},{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","validator_index":"2","validator_sync_committee_indicies":["138","394"]},{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","validator_index":"3","validator_sync_committee_indicies":["10","266"]},{"pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","validator_index":"4","validator_sync_committee_indicies":["114","370"]},{"pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","validator_index":"5","validator_sync_committee_indicies":["103","359"]},{"pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","validator_index":"6","validator_sync_committee_indicies":["163","419"]},{"pubkey":"0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","validator_index":"7","validator_sync_committee_indicies":["197","453"]},{"pubkey":"0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","validator_index":"8","validator_sync_committee_indicies":["175","431"]},{"pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","validator_index":"9","validator_sync_committee_indicies":["53","309"]}],"execution_optimistic":false} +- {"data":[{"pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","validator_index":"0","validator_sync_committee_indices":["30","286"]},{"pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","validator_index":"1","validator_sync_committee_indices":["120","376"]},{"pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","validator_index":"2","validator_sync_committee_indices":["138","394"]},{"pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","validator_index":"3","validator_sync_committee_indices":["10","266"]},{"pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","validator_index":"4","validator_sync_committee_indices":["114","370"]},{"pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","validator_index":"5","validator_sync_committee_indices":["103","359"]},{"pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","validator_index":"6","validator_sync_committee_indices":["163","419"]},{"pubkey":"0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","validator_index":"7","validator_sync_committee_indices":["197","453"]},{"pubkey":"0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","validator_index":"8","validator_sync_committee_indices":["175","431"]},{"pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","validator_index":"9","validator_sync_committee_indices":["53","309"]}],"execution_optimistic":false} - {"data":[],"execution_optimistic":false} diff --git a/cl/beacon/handler/test_data/expected_withdrawals_avg.json b/cl/beacon/handler/test_data/expected_withdrawals_avg.json new file mode 100644 index 00000000000..c346a50f8ec --- /dev/null +++ b/cl/beacon/handler/test_data/expected_withdrawals_avg.json @@ -0,0 +1 @@ +{"data":[{"address":"0x4242424242424242424242424242424242424242","amount":"20355258402","index":"0","validator_index":"35"},{"address":"0x4242424242424242424242424242424242424242","amount":"25625000808","index":"1","validator_index":"59"},{"address":"0x4242424242424242424242424242424242424242","amount":"15625188833","index":"2","validator_index":"137"},{"address":"0x4242424242424242424242424242424242424242","amount":"27715699200","index":"3","validator_index":"227"},{"address":"0x4242424242424242424242424242424242424242","amount":"41625000404","index":"4","validator_index":"254"},{"address":"0x4242424242424242424242424242424242424242","amount":"51375000404","index":"5","validator_index":"305"},{"address":"0x4242424242424242424242424242424242424242","amount":"17625000404","index":"6","validator_index":"414"},{"address":"0x4242424242424242424242424242424242424242","amount":"5000038229","index":"7","validator_index":"463"}],"execution_optimistic":false,"finalized":false} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/expected_withdrawals_head.json b/cl/beacon/handler/test_data/expected_withdrawals_head.json new file mode 100644 index 00000000000..09f514c66eb --- /dev/null +++ b/cl/beacon/handler/test_data/expected_withdrawals_head.json @@ -0,0 +1 @@ +{"data":[{"address":"0x4242424242424242424242424242424242424242","amount":"804","index":"8","validator_index":"35"},{"address":"0x4242424242424242424242424242424242424242","amount":"20872684895","index":"9","validator_index":"52"},{"address":"0x4242424242424242424242424242424242424242","amount":"804","index":"10","validator_index":"59"},{"address":"0x4242424242424242424242424242424242424242","amount":"402","index":"11","validator_index":"254"},{"address":"0x4242424242424242424242424242424242424242","amount":"17874959099","index":"12","validator_index":"278"},{"address":"0x4242424242424242424242424242424242424242","amount":"12500038631","index":"13","validator_index":"317"},{"address":"0x4242424242424242424242424242424242424242","amount":"5999955369","index":"14","validator_index":"391"},{"address":"0x4242424242424242424242424242424242424242","amount":"402","index":"15","validator_index":"414"},{"address":"0x4242424242424242424242424242424242424242","amount":"402","index":"16","validator_index":"463"}],"execution_optimistic":false,"finalized":false} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/forkchoice_1.yaml b/cl/beacon/handler/test_data/forkchoice_1.yaml index 448f1545a4b..1892b1f0306 100644 --- a/cl/beacon/handler/test_data/forkchoice_1.yaml +++ b/cl/beacon/handler/test_data/forkchoice_1.yaml @@ -1,2 +1,2 @@ -- {"data":[{"execution_optimistic":false,"root":"0x0102030000000000000000000000000000000000000000000000000000000000","slot":128}]} +- {"data":[{"execution_optimistic":false,"root":"0x0102030000000000000000000000000000000000000000000000000000000000","slot":"128"}]} - {"finalized_checkpoint":{"epoch":"1","root":"0x0102030000000000000000000000000000000000000000000000000000000000"},"fork_choice_nodes":[{"slot":"128","block_root":"0x0102030000000000000000000000000000000000000000000000000000000000","parent_root":"0x0102030000000000000000000000000000000000000000000000000000000000","justified_epoch":"0","finalized_epoch":"0","weight":"1","validity":"","execution_block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"},{"slot":"128","block_root":"0x0102020405030000000000000000000000000000000000000000000000000000","parent_root":"0x0102050000000000000000000000000000000000000000000000000000000000","justified_epoch":"0","finalized_epoch":"0","weight":"2","validity":"","execution_block_hash":"0x0000000000000000000000000000000000000000000000000000000000000000"}],"justified_checkpoint":{"epoch":"2","root":"0x0102030000000000000000000000000000000000000000000000000000000000"}} diff --git a/cl/beacon/handler/test_data/harness_inclusion_global_1.json b/cl/beacon/handler/test_data/harness_inclusion_global_1.json new file mode 100644 index 00000000000..8ae1df014c1 --- /dev/null +++ b/cl/beacon/handler/test_data/harness_inclusion_global_1.json @@ -0,0 +1 @@ +{"data":{"current_epoch_active_gwei":8192000000000,"current_epoch_target_attesting_gwei":0,"previous_epoch_active_gwei":8192000000000,"previous_epoch_head_attesting_gwei":0,"previous_epoch_target_attesting_gwei":8192000000000}} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/harness_inclusion_local_1.json b/cl/beacon/handler/test_data/harness_inclusion_local_1.json new file mode 100644 index 00000000000..f8387bc2bfc --- /dev/null +++ b/cl/beacon/handler/test_data/harness_inclusion_local_1.json @@ -0,0 +1 @@ +{"data":{"current_epoch_effective_balance_gwei":32000000000,"is_active_unslashed_in_current_epoch":true,"is_active_unslashed_in_previous_epoch":true,"is_current_epoch_target_attester":false,"is_previous_epoch_head_attester":false,"is_previous_epoch_target_attester":true,"is_slashed":false,"is_withdrawable_in_current_epoch":false}} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/head_validators_all.json b/cl/beacon/handler/test_data/head_validators_all.json new file mode 100644 index 00000000000..4d072f2e7ff --- /dev/null +++ b/cl/beacon/handler/test_data/head_validators_all.json @@ -0,0 +1 @@ +{"data":[{"balance":"31999877792","index":"0","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00bba1b6980555a68535b416e6f33726afcf6da826d384247bb332920f457889"}},{"balance":"31999877792","index":"1","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b"}},{"balance":"32000209997","index":"2","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x006adc4a1e4caba37c54d56d2411fd0df3a102f8489a4c1be535f4fd5f8810c9"}},{"balance":"31999877792","index":"3","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0081c852078a2ad430d438d7eaefc39646f53895292596bbe199e2d7d1884ab8"}},{"balance":"32000542202","index":"4","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005ac1746fa6585b6333554902f3e7c7bd548cb1b61c26d6812101cedd3ec670"}},{"balance":"31999877792","index":"5","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x008c20f942a0f9b264b5216171eff8353be774df817ecd121f794948ba8a6904"}},{"balance":"31999877792","index":"6","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00597c4096b245362cc3a3171e4b786945ff53834e37912d47e77f2bba478120"}},{"balance":"31999877792","index":"7","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e1724ac1836885e7fbb9660bfead4b9908ac60f65eb9b3271d8caf5085d2f6"}},{"balance":"32000209997","index":"8","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c0bf64237e21995dc56b8ecd4fed9a86ea4dc763d182ff4a809954489b5998"}},{"balance":"31999877792","index":"9","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a32736ee4b125b0cd9ac5be959754d6419a6f1b29602a19a64496a1eecab84"}},{"balance":"32000209997","index":"10","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x80fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a55","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00bf68e1922c9754e3b21dacc029f13271451cd0faf2331500d09ce2da9ab0b2"}},{"balance":"31999877792","index":"11","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0034f85f3bcde43a3f12ae8e4dde6dee305dc2211792820eb9b6313638d5be84"}},{"balance":"31999877792","index":"12","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x851f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007e63c0bb15b5d6e74b7708d4878e05fdecfc1cc133ca33556e3b8377641d54"}},{"balance":"32000209997","index":"13","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x99bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0086e3760ff20b197cab1d410db7888b8a2c1a3d7f28cee5476180fa89b6cd32"}},{"balance":"31999877792","index":"14","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a41495083582","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x009b5fd1a128add9bcfcc54f50675196ab9c94561d556329ad29566b127a1687"}},{"balance":"32000209997","index":"15","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa73eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0057eddd5aa1cd1de99d27a4fc796fcc9c65e5fe880033e77aa1b8f4b170faa0"}},{"balance":"32000209997","index":"16","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00f0a879fa28bdf064c6fbb441dd1590053c975472de97cf95e3504611c07917"}},{"balance":"31999877792","index":"17","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0089ec0a8dc1c28cdc2e79cc83b7459d0f1aa61267031e1d34520c9211ebe74e"}},{"balance":"31999305516","index":"18","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e1305ff13cd46c944f8647c88ef486d020104b582812cb9ece5603995b4b6b"}},{"balance":"31999877792","index":"19","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa272e9d1d50a4aea7d8f0583948090d0888be5777f2846800b8281139cd4aa9eee05f89b069857a3e77ccfaae1615f9c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00848f083ce1d1f9ff3e3f294212364a28125beafdb3ee500871d97c8a076f2a"}},{"balance":"31999877792","index":"20","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9780e853f8ce7eda772c6691d25e220ca1d2ab0db51a7824b700620f7ac94c06639e91c98bb6abd78128f0ec845df8ef","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00cb39686dd2677f312a9dcf73d1a51fea1c067423427ced4f6a623bd3ce45d2"}},{"balance":"31999877792","index":"21","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xab48aa2cc6f4a0bb63b5d67be54ac3aed10326dda304c5aeb9e942b40d6e7610478377680ab90e092ef1895e62786008","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00956c2c3d62c2acb8ae46f1699a23d808b9ec0c0314132877ca436a562ddf8c"}},{"balance":"31999877792","index":"22","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8c8b694b04d98a749a0763c72fc020ef61b2bb3f63ebb182cb2e568f6a8b9ca3ae013ae78317599e7e7ba2a528ec754a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x009965cdded007fc121479b4d0449295ff1d910964f436a08d4535d67090aebc"}},{"balance":"31999877792","index":"23","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9717182463fbe215168e6762abcbb55c5c65290f2b5a2af616f8a6f50d625b46164178a11622d21913efdfa4b800648d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00cfdacaa5f14b534f8d3f881cd035a6a6ac7c337e771c0d1816975f4bcbecb1"}},{"balance":"32000209997","index":"24","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xacb58c81ae0cae2e9d4d446b730922239923c345744eee58efaadb36e9a0925545b18a987acf0bad469035b291e37269","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00dd1180512476a26db8ebc9882196ebd81b88f264d040bb7e5382fc6247e1ac"}},{"balance":"32000209997","index":"25","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x81ccc19e3b938ec2405099e90022a4218baa5082a3ca0974b24be0bc8b07e5fffaed64bef0d02c4dbfb6a307829afc5c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0041f0d11c37195984b4576ca77da20aa7e4146fcc2a137cdcf4facf2d5e9f85"}},{"balance":"32000209997","index":"26","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xab83dfefb120fab7665a607d749ef1765fbb3cc0ba5827a20a135402c09d987c701ddb5b60f0f5495026817e8ab6ea2e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e0335186ca6e2e874f2a0d901444624e58065c46e144e0577625040132847a"}},{"balance":"31999877792","index":"27","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb6ad11e5d15f77c1143b1697344911b9c590110fdd8dd09df2e58bfd757269169deefe8be3544d4e049fb3776fb0bcfb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a83f812c5da2fb82461cb82c36fa9a0e49ed59b349535806e1e2d01dae7c87"}},{"balance":"31999877792","index":"28","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8515e7f61ca0470e165a44d247a23f17f24bf6e37185467bedb7981c1003ea70bbec875703f793dd8d11e56afa7f74ba","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0093cacba6054bab859a8542d0fadd260624c56f8aee7379792e861aef77d90f"}},{"balance":"31999877792","index":"29","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xad84464b3966ec5bede84aa487facfca7823af383715078da03b387cc2f5d5597cdd7d025aa07db00a38b953bdeb6e3f","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00cdd391c9a9c2b573cd28e1221916666106f620736a87dad858dc294e8edb80"}},{"balance":"32000209997","index":"30","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb29043a7273d0a2dbc2b747dcf6a5eccbd7ccb44b2d72e985537b117929bc3fd3a99001481327788ad040b4077c47c0d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a4c7cea67274a6e12bcb8b3108b84b5201dd10d4b3e8e4d712c21d2f2a8fdf"}},{"balance":"31999877792","index":"31","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa72841987e4f219d54f2b6a9eac5fe6e78704644753c3579e776a3691bc123743f8c63770ed0f72a71e9e964dbf58f43","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00bd7c96a1b9f140928c44c569955e64cc8dabe39a0e6302db278f9a76e5cbfc"}},{"balance":"31999877792","index":"32","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xaed3e9f4bb4553952b687ba7bcac3a5324f0cceecc83458dcb45d73073fb20cef4f9f0c64558a527ec26bad9a42e6c4c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0077833e80f7de3bc3aaf15774594d12604f51d948d5b8698963a8d0c44a925d"}},{"balance":"32000209997","index":"33","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9446407bcd8e5efe9f2ac0efbfa9e07d136e68b03c5ebc5bde43db3b94773de8605c30419eb2596513707e4e7448bb50","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00601851d92238d2231c7779e4f224009afcbfe7c6ac3bef1901bd9d27d78cf7"}},{"balance":"31999877792","index":"34","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa60d5589316a5e16e1d9bb03db45136afb9a3d6e97d350256129ee32a8e33396907dc44d2211762967d88d3e2840f71b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c6dd4fe93c48c912b1824c9839e0428b8377c71fbcba0c6e6f5c9c01d64f4c"}},{"balance":"31999877792","index":"35","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x90c0c1f774e77d9fad044aa06009a15e33941477b4b9a79fa43f327608a0a54524b3fcef0a896cb0df790e9995b6ebf1","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005757fedff1d038188f6ee68c18cac4c5dccc0df1074d58349c0c27392d09d9"}},{"balance":"31999877792","index":"36","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8f207bd83dad262dd9de867748094f7141dade78704eca74a71fd9cfc9136b5278d934db83f4f3908d7a3de84d583fc9","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c030d1cf7d5c481000bc1cbe562bac0b45f19a971e6270e71601ca8ef826e5"}},{"balance":"32000209997","index":"37","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x82d333a47c24d4958e5b07be4abe85234c5ad1b685719a1f02131a612022ce0c726e58d52a53cf80b4a8afb21667dee1","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003d36f24d525351b098dcaa3a0267e0310876c6b828dc97331cd0ca3a229289"}},{"balance":"31999877792","index":"38","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8e04ad5641cc0c949935785184c0b0237977e2282742bc0f81e58a7aa9bfee694027b60de0db0de0539a63d72fd57760","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e39d3608724d572f1a63e458f323138a965e4870714c33f34814d7feab0f80"}},{"balance":"31999877792","index":"39","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x96413b2d61a9fc6a545b40e5c2e0064c53418f491a25994f270af1b79c59d5cf21d2e8c58785a8df09e7265ac975cb28","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x002a1ae422f9a11cdbb0054eb72c748f8ba0ed0365e39e089598206285e96b98"}},{"balance":"31999877792","index":"40","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xae5163dc807af48bc827d2fd86b7c37de5a364d0d504c2c29a1b0a243601016b21c0fda5d0a446b9cb2a333f0c08ab20","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000202723a358f5be2c7be69598bb93aa8f6dabd03031f057262d9b774519e82"}},{"balance":"31999877792","index":"41","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b7ec26cc56264c65df7d6e129428665f9166b33629976b9cd4041774575821"}},{"balance":"31999305516","index":"42","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8f81b19ee2e4d4d0ff6384c63bacb785bc05c4fc22e6f553079cc4ff7e0270d458951533458a01d160b22d59a8bd9ab5","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00f8a9d05afdaedf807a97999cf42aa9544771017386c5962f36cf5bb99973a3"}},{"balance":"31999877792","index":"43","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x95fa3538b8379ff2423656ab436df1632b74311aaef49bc9a3cbd70b1b01febaf2f869b4127d0e8e6d18d7d919f1f6d8","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005a9c0baf08db76ff67f377aec67b5028feb56ae5400949d42f750741cf9f6a"}},{"balance":"31999877792","index":"44","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa65a82f7b291d33e28dd59d614657ac5871c3c60d1fb89c41dd873e41c30e0a7bc8d57b91fe50a4c96490ebf5769cb6b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b33a96c9e35aa74bdb4ee0cba0bc6fb7b9a3a2a6ee1a3d4c579f4df2c386b0"}},{"balance":"31999877792","index":"45","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb2a3cedd685176071a98ab100494628c989d65e4578eec9c5919f2c0321c3fc3f573b71ef81a76501d88ed9ed6c68e13","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000f93eae39b06c0a3025009c68a1587787d1ef7eaae19b4cdd35373a0ddeb1f"}},{"balance":"31999877792","index":"46","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8fc502abb5d8bdd747f8faf599b0f62b1c41145d30ee3b6ff1e52f9370240758eac4fdb6d7fb45ed258a43edebf63e96","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a3105daeb8f80c86d3711fb46d095c8f66655f12f074c6dca0866f427aac2e"}},{"balance":"31999877792","index":"47","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x931bea4bc76fad23ba9c339622ddc0e7d28904a71353c715363aa9e038f64e990ef6ef76fc1fc431b9c73036dd07b86c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b76fdae41067eff5770424982ace20e2403c8b3a421482d75a8234a2b1089c"}},{"balance":"31999877792","index":"48","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa3caedb9c2a5d8e922359ef69f9c35b8c819bcb081610343148dc3a2c50255c9caa6090f49f890ca31d853384fc80d00","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005b43ca6d2a5ac963a982369904babe733f98c9d39c92f5530beabc73ec725f"}},{"balance":"31999877792","index":"49","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xaf3dc44695d2a7f45dbe8b21939d5b4015ed1697131184ce19fc6bb8ff6bbc23882348b4c86278282dddf7d718e72e2b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00266130d1c3547c617e01f85606deb2b9fc994556ea37cf7643276c0b77b982"}},{"balance":"31999877792","index":"50","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8aea7d8eb22063bcfe882e2b7efc0b3713e1a48dd8343bed523b1ab4546114be84d00f896d33c605d1f67456e8e2ed93","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c1bff44644898b2f3d23a0839bd27eb9746d58659143bf416f67a854dfa531"}},{"balance":"32000209997","index":"51","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8fbdab59d6171f31107ff330af9f2c1a8078bb630abe379868670c61f8fa5f05a27c78f6a1fd80cde658417ef5d6a951","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x004ea2037fa6efab442d464f4fb2c7ce46fdb08b2c38ef5f7c01b3279b71c39a"}},{"balance":"32000209997","index":"52","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x83798f4dcc27c08dcd23315bee084a9821f39eed4c35ef45ba5079de93e7cf49633eea6d0f30b20c252c941f615f6ccb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0016bfdcb79f6b341dbaec90d1b4c3f08f69fec49296952e110d9822a9c6cc7b"}},{"balance":"31999305516","index":"53","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8f021f52cbd6c46979619100350a397154df00cae2efe72b22ad0dd66747d7de4beecd9b194d0f7016e4df460a63a8ea","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001044b7cf817af344975bda7347104a526f5edfedcb1f129b16073f875e7295"}},{"balance":"31999877792","index":"54","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x89db41a6183c2fe47cf54d1e00c3cfaae53df634a32cccd5cf0c0a73e95ee0450fc3d060bb6878780fbf5f30d9e29aac","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0085872a128740aa4134914f3f63ca892df52895d302da59c4f5d0df090fae7a"}},{"balance":"32000209997","index":"55","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x951f3707389db5012848b67ab77b63da2a73118b7df60f087fa9972d8f7fef33ed93e5f25268d4237c2987f032cd613f","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00cfd3abd915305a34ab28647c0e5f51cdaa83dcf2eddae284d7d9ec99013994"}},{"balance":"31999877792","index":"56","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb57520f5150ed646e8c26a01bf0bd15a324cc66fa8903f33fa26c3b4dd16b9a7c5118fdac9ee3eceba5ff2138cdce8f0","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x004c40e9bba882adb571a0d00f4c1c83487687130490acfd8673ddd20650e519"}},{"balance":"31999877792","index":"57","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xaa14e001d092db9dc99746fcfc22cd84a74adaa8fc483e6abf697bd8a93bda2ee9a075aca303f97f59615ed4e8709583","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00fc8b23cbd978d7520bbcebbb3494773fa0cc84245ee379057240d88a177c1e"}},{"balance":"32000209997","index":"58","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x98536b398e5b7f1276f7cb426fba0ec2b8b0b64fba7785ea528bebed6ae56c0dee59f5d295fa4c97a1c621ecacfc4ec3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00ced372c7d920625204916847774725627796c4ee7ad6315deba74edfbaeff1"}},{"balance":"31999877792","index":"59","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb783a70a1cf9f53e7d2ddf386bea81a947e5360c5f1e0bf004fceedb2073e4dd180ef3d2d91bee7b1c5a88d1afd11c49","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00cebfffab2c6a4e9fb3e70b5f01bb26aa5fd0f7f29d5695a748e742b7ae4f68"}},{"balance":"31999877792","index":"60","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x912b440c4d3c8177a012cea1cc58115cbc6795afc389363c7769bf419b9451bcde764586cf26c15e9906ea54837d031a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007aa69ed69d923976fc2e17d0dd7708d8caca65b201d1268c9d59f290de80ac"}},{"balance":"32000209997","index":"61","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8d8be92bde8af1b9df13d5a8ed8a3a01eab6ee4cf883d7987c1d78c0d7d9b53a8630541fddf5e324b6cf4900435b1df8","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000648358dfea0ec2db58ffa3ecc4677040d5413c7b9c794ac4b1ef324534093"}},{"balance":"31999877792","index":"62","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x86d386aaf3dff5b9331ace79f6e24cff8759e7e002bbe9af91c6de91ab693f6477551e7ee0a1e675d0fc614814d8a8aa","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007fe64e4dc8aa0cbcb2f6a5275188ff05644caf88f6388f41a61a005246ac84"}},{"balance":"31999877792","index":"63","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x911bb496153aa457e3302ea8e74427962c6eb57e97096f65cafe45a238f739b86d4b790debd5c7359f18f3642d7d774c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x002b12c6027639e85f1334c8068990936cde5abee56f4f473db1fc2395dfd5cf"}},{"balance":"31999877792","index":"64","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb4e84be7005df300900c6f5f67cf288374e33c3f05c2f10b6d2ff754e92ea8577d55b91e22cea2782250a8bc7d2af46d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005bff5e4c87fcb55ae02718faa23149c4a7b36c7e63ae2db79b4a4bc1fc32e1"}},{"balance":"31999969926","index":"65","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa4e8f4a4f81f855f46512af8cdcbc9ae8a7eb395a75f135e5569b758a8d92349681a0358500f2d41f4578d3f7ffaa90f","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x002bd1a3fcf74664b634c3f0c77ff309b34861e7c931bc8ca57e0860d4fe5d6d"}},{"balance":"31999877792","index":"66","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x91887afbd7a83b8e9efb0111419c3d0197728d56ef96656432fbc51eb7ed736bb534dad59359629cf9c586461e251229","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e3c5e9fe37e2ed274816105d303ae4beeccdd343fbcaedef425ba3dd3fb8fe"}},{"balance":"31999877792","index":"67","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x875a795a82ae224b00d4659eb1f6a3b024f686bfc8028b07bf92392b2311b945afc3d3ab346a1d4de2deac1b5f9c7e0d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00baefa40580ac69e2671b89c2e0a6a458200e49b70ec1de9638edf97a0c7445"}},{"balance":"31999877792","index":"68","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8fe55d12257709ae842f8594f9a0a40de3d38dabdf82b21a60baac927e52ed00c5fd42f4c905410eacdaf8f8a9952490","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00dcb0e750d2ead7d45c21f95454a20e1414751c8eb3e9e623a79444c6a13864"}},{"balance":"31999877792","index":"69","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xacebcdddf7ac509202f9db4efbc0da9172f57b3e468f9b6c116c6b134c906256630d44c38a19ec0e4b569c5001a5a04c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0038263c32cd9bd62163b42bb4e1badc7c13a91d9fa512d1f82504399d5727e5"}},{"balance":"31999877792","index":"70","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xad297ab0ef5f34448ceffef73c7104791cacae92aed22df8def9034b0f111b2af4f4365259dccecb46a1208fd3354fcd","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00fd657a6b423fad78713ed2275ca2592558e64e1404efa51071f535ce4a0ed9"}},{"balance":"32000209997","index":"71","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x86de7221af8fd5bb4ee28dad543997cde0c5cd7fa5ec9ad2b92284e63e107154cc24bf41e25153a2a20bcae3add50542","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d65e299f6aff6070e86f63f1a430da7d1d4ec5df2c5c9d2713d78f0a130000"}},{"balance":"31999877792","index":"72","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8e0b26637a9bc464c5a9ac490f6e673a0fb6279d7918c46a870307cf1f96109abf975d8453dc77273f9aba47c8eb68c2","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c218d529d32c20b12f3fd6a2b4e90015892e21018e774bbb01d3ee102aaefc"}},{"balance":"31999877792","index":"73","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb0675bcee7652a66c92dc254157eef380726c396b1c2f5b4e1905fff912003b7e790f31fb5542df57f1f465e0915e7a0","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d535806e592aa0a268456697b579c7e6a7b23720b5db9b7fa700330339466f"}},{"balance":"32000209997","index":"74","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa984a361f4eb059c693e8405075a81469157811e78c317bb3ca189b16cd5c3b2a567c65d78560ef2ca95e108dc5a211e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00011134d89a5f6c0b7569a5579c0ae087ce9d43cce9e1d36d6c28b1016106bd"}},{"balance":"31999877792","index":"75","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb8ae7b57f57bf505dd2623a49017da70665f5b7f5ac74d45d51883aac06881467b5ef42964bd93ff0f3b904e8239e7b4","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c93bc4d079d1dab11b0eaa96c7a6c6c82f9ed83824c65c004ce1caa731a4e7"}},{"balance":"31999877792","index":"76","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x95906ec0660892c205634e21ad540cbe0b6f7729d101d5c4639b864dea09be7f42a4252c675d46dd90a2661b3a94e8ca","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0067132cbc5736a4e25d0b3701d40d71cd93681ef15e1fad7cb41333505d8d9b"}},{"balance":"32000209997","index":"77","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xaa44163d9f9776392ce5f29f1ecbcc177f8a91f28927f5890c672433b4a3c9b2a34830842d9396dc561348501e885afb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007fced1437e1f4bb57b857d770407e8b37248d25b944165db0a3610909211de"}},{"balance":"31999877792","index":"78","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8774d1d544c4cc583fb649d0bbba86c2d2b5abb4c0395d7d1dac08ab1a2cc795030bdbdce6e3213154d4f2c748ccdaef","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x008264616781f3d511d9e66333ffe02f384fd190796544c29be306da0cf18085"}},{"balance":"32000542202","index":"79","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8856c31a50097c2cc0c9a09f89e09912c83b9c7838b2c33d645e95d0f35130569a347abc4b03f0cb12a89397b899d078","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00886cca879055786ba4b9bb2d164f34426445902abeb65e3d82cb37caf84920"}},{"balance":"31999877792","index":"80","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x97063101e86c4e4fa689de9521bb79575ed727c5799cf69c17bfe325033200fcecca79a9ec9636b7d93e6d64f7275977","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b3f54426c6de306db17e88efefe9e22cdf076a73aff806cfc78bfb01980d54"}},{"balance":"31999877792","index":"81","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x881f1a1ac6a56a47f041f49266d0a2e146c35e42bf87c22a9bc23a363526959e4d3d0c7e7382be091246787ef25e33d5","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d8a1fcd5cc7b4a8cfa916072d9db37a6bd00f44903655f2c88a65ddcd9f70c"}},{"balance":"31999877792","index":"82","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb08d72a2c2656679f133a13661d9119ab3a586e17123c11ca17dc538d687576789d42ab7c81daa5af6506cc3bac9d089","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x008047fa89c2168f4e153a87d0c3fc8f61a4fcd11bcd571ec540951b0ba3b7ce"}},{"balance":"31999877792","index":"83","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8ed36ed5fb9a1b099d84cba0686d8af9a2929a348797cd51c335cdcea1099e3d6f95126dfbc93abcfb3b56a7fc14477b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00291e032e3cf905d5b3c904bc65aead94f08ad0d7451171b94344a71b55090e"}},{"balance":"31999877792","index":"84","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x97631345700c2eddaeb839fc39837b954f83753ef9fe1d637abcfc9076fcb9090e68da08e795f97cfe5ef569911969ec","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d038f16339e7a3bf9cfb62f72ad567943dab9260001da1fd29e1263a95e46c"}},{"balance":"31999877792","index":"85","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x997b2de22feea1fb11d265cedac9b02020c54ebf7cbc76ffdfe2dbfda93696e5f83af8d2c4ff54ce8ee987edbab19252","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0093d6a35cd4f44891a52076d42e4b45bb4d973a8069803a97f1af9b2ac2a497"}},{"balance":"31999877792","index":"86","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa222487021cdd811ed4410ad0c3006e8724dc489a426a0e17b4c76a8cd8f524cd0e63fac45dc8186c5ce1127162bec83","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00613ccd0f3d2eb6134e8672d8904a726bed3aafd066a7377743a5de569b2467"}},{"balance":"31999877792","index":"87","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa19dd710fbf120dbd2ce410c1abeb52c639d2c3be0ec285dc444d6edea01cee272988e051d5c9c37f06fea79b96ba57b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e73bf6fff4e9d85bbc80deed45ef840f81ce8f96cf1217cc6e5f1042cc79ac"}},{"balance":"31999305516","index":"88","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x995b103d85d9e60f971e05c57b1acebf45bd6968b409906c9efea53ce4dc571aa4345e49c34b444b9ab6b62d13e6630b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003a94871dbb0e5faae47abd4597acbdf7cb39d7f36cb1691d5bac8cdbf04365"}},{"balance":"31999877792","index":"89","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x90f3659630d58bd08e2e0131f76283cf9de7aa89e0102c67e79ca05c5c7217b213c05668f3de82939d8414d1674dc6a1","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00fe2ef80fd7a985641d6b4870018c16ee5029fe6f47044a565a120eb3effb1d"}},{"balance":"31999877792","index":"90","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb4aa2583a999066ec6caa72a3fc19e80d8936f6856d447dd043aa9b126aa63bcaac876266d80913071777984d8d30563","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0074905ca06727573660aa80d13cd709ce7d3cd64959d53bbd29d8b429bdbd25"}},{"balance":"31999877792","index":"91","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8eb8b1b309a726fa5af6a6228385214a48788a1f23fe03cd46e16e200ed7d8909394d2e0b442ef71e519215765ca6625","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d92823c46a415cb4ac0bd9801c14cb2d2a33012009bec5c418ac85ed85bfed"}},{"balance":"32000542202","index":"92","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8c7b0e11f9bc3f48d84013ef8e8575aeb764bc1b9bf15938d19eb191201011365c2b14d78139a0f27327cb21c1b8bf3d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00efccfe4c9264504a7c0a7bc80ffa2adbea51af5752215adf1245a13b7e51bf"}},{"balance":"31999877792","index":"93","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8d08a52857017fd5cab3a821ccb8f5908c96cf63c5a5647209c037e2ea1c56f9650ec030b82ffdce76d37672d942e45b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c692abb106ebb4d5019ff166d3685e70dd9c6ccdcab8e168c61ae456b38545"}},{"balance":"31999877792","index":"94","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa8f5540a9977fd2ee7dea836ed3dafa5d0b1fc9c5d5f1689e91ec49cdef989976c51502c3764025ef8ff542ef3b170ea","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0052bab2db7275f7ec44da1c99ce31081ea4efcd3a91e37add0074a2068fa399"}},{"balance":"32000209997","index":"95","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8ff7cc69f007f11481c91c6f9b20698998a0c2e9a2928bec8eea7507c7ad73a9d1d218cfdb279c4d2132d7da6c9e513e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005a790403c3148e60116cf570cef43d5ae5c115251b9b0d4d92ba094066e160"}},{"balance":"31999877792","index":"96","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xafb72b4c111da98379f195da4e5c18462acc7ece85cd66894fbaf69ddab3d3bb0b6957ea0042b7705937919189e6a531","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00233e0044874e0a777c5ce7911df4988a0d11997e3956d087e5cdcbef4b0ef2"}},{"balance":"32000209997","index":"97","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x812b2d0546aa77dec2d55406b0131ed580c079c1aeb76eb2ca076b7b58289fa9d781069a2e11fe2199f1e02c5dd70e6a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x006cc45887b5da1424c1ca0651d77c355a7ab098b1e9599db03aa1bf9739a79f"}},{"balance":"32000209997","index":"98","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xaa10e1055b14a89cc3261699524998732fddc4f30c76c1057eb83732a01416643eb015a932e4080c86f42e485973d240","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d2050294b7a81d65a7b63245808b572ef356739d69131dc6359768c55e97b7"}},{"balance":"31999877792","index":"99","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa29e520a73ec28f4e2e45050c93080eeaee57af1108e659d740897c3ced76ceb75d106cb00d7ed25ec221874bf4b235a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00cc274477df2a5b1275c45896b0954ddda4be43f5ac300755e180caf9bb41fe"}},{"balance":"31999877792","index":"100","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa7b9a71c54b44f6738a77f457af08dc79f09826193197a53c1c880f15963c716cec9ff0fd0bcb8ab41bc2fe89c2711fa","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00f3a67e45414d605aa88bc2f52a0e754c2892f16cac4537c46c55fe83fdb5f4"}},{"balance":"31999877792","index":"101","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb8f1a9edf68006f913b5377a0f37bed80efadc4d6bf9f1523e83b2311e14219c6aa0b8aaee79e47a9977e880bad37a8e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001a4fc7202f79d296e9488d694eb6289a81bb03eff2649bc8c0f1114356724c"}},{"balance":"31999877792","index":"102","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x899729f080571e25fee93538eb21304a10600d5ceb9807959d78c3967d9ba32b570d4f4105626e5972ccf2e24b723604","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00cf44c811ba691c297556d8402d9a84d2d63181c95261de5b9628beb3510b59"}},{"balance":"31999877792","index":"103","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xab23c89f138f4252fc3922e24b7254743af1259fa1aeae90e98315c664c50800cecfc72a4d45ee772f73c4bb22b8646f","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e56ce1aa87268c906c916a681eca93ef36b6dbb793a6ccd04c9ad886cedca5"}},{"balance":"31999877792","index":"104","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb8357a39c42f80953e8bc9908cb6b79c1a5c50ed3bbc0e330577a215ac850e601909fa5b53bed90c744e0355863eaa6e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000d923151b230d1c5cab7673d6ab8f6837d68ae118078a1769e038bdc03e3be"}},{"balance":"32000209997","index":"105","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa1dbd288ae846edbfba77f7342faf45bdc0c5d5ce8483877acce6d00e09ef49d30fb40d4764d6637658d5ac738e0e197","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0048cced92ac3a512f86c8a6813c30f95c73526d02cbe086d4e62bb8ec518155"}},{"balance":"31999877792","index":"106","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9417af4462cc8d542f6f6c479866f1c9fa4768069ef145f9acdd50221b8956b891ceec3ef4ec77c54006b00e38156cee","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00bf0060134ece5b37ff306f4ee53795eb9920e5a5d8a4a8b7d525bcfff91ad8"}},{"balance":"31999877792","index":"107","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x92e5cd122e484c8480c430738091f23f30773477d9850c3026824f1f58c75cf20365d950607e159717864c0760432edb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0086ad2172de51cf0178f29c542255ef0eefaeadfef167c9f3eb72bd70c86c13"}},{"balance":"31999877792","index":"108","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8a3a08b7dae65f0e90a3bc589e13019340be199f092203c1f8d25ee9989378c5f89722430e12580f3be3e4b08ae04b1b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d534c7ee553a6d1acf1e4a619ea575bd27cd60ed423ec6776f95932b5c1364"}},{"balance":"31999877792","index":"109","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb4bf4717ad2d3fce3a11a84dee1b38469be9e783b298b200cc533be97e474bf94d6c7c591d3102992f908820bc63ac72","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e3c8efebd19022c8c23e31c1f14452536c14b0eea25ac361b317fb768ff093"}},{"balance":"31999877792","index":"110","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa325677c8eda841381e3ed9ea48689b344ed181c82937fa2651191686fd10b32885b869ce47ca09fbe8bd2dbcaa1c163","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00bb98706a813d037ded19b55a666382d59e6299f1c41c84bda4f4be10578a37"}},{"balance":"31999877792","index":"111","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb54d0e0f7d368cd60bc3f47e527e59ef5161c446320da4ed80b7af04a96461b2e372d1a1edf8fe099e40bff514a530af","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0099b9883493311b27e1dc398fea1449689adeee9062016c81646c82dd4b4935"}},{"balance":"32000209997","index":"112","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb20c190dd46da9fe928d277ccfa0b804b942f5a181adb37fc1219e028fb7b48d63261248c6d939d68d4d8cd2c13a4f80","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x006a312343a05ce0e6bece7de65e68f9b80139dedbeb94659ada5f004724f46f"}},{"balance":"31999877792","index":"113","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb0c9351b9604478fb83646d16008d09cedf9600f57b0adbf62dd8ad4a59af0f71b80717666eeec697488996b71a5a51e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x009565f8f7a00b78cc975ad5644bd7bdb53d6748a1af7f08a6ac62fdff22abcd"}},{"balance":"31999877792","index":"114","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8a5898f52fe9b20f089d2aa31e9e0a3fe26c272ce087ffdfd3490d3f4fa1cacbec4879f5f7cd7708e241a658be5e4a2f","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00faa08ee528de30bdeb345f3e0fe5a938eb12bcec957fc3d6e35ff5d511bf12"}},{"balance":"31999877792","index":"115","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xabc2344dc831a4bc0e1ec920b5b0f774bd6465f70199b69675312c4993a3f3df50fe4f30693e32eb9c5f8e3a70e4e7c4","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003cf834fbc68195caabf9969d97b9e345491192f12c3c9c7a1becec00c50670"}},{"balance":"32000209997","index":"116","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x95eacc3adc09c827593f581e8e2de068bf4cf5d0c0eb29e5372f0d23364788ee0f9beb112c8a7e9c2f0c720433705cf0","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00df373a084018b1ada7a5abd100a349a098a44dcf479dca35f214c5c979a553"}},{"balance":"31999877792","index":"117","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8353cad3430c0b22a8ec895547fc54ff5791382c4060f83c2314a4fcd82fb7e8e822a9e829bace6ec155db77c565bcb3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d2f2ec401059d84b924c010e886c4861efa149fd144047318394fbbdc69501"}},{"balance":"31999877792","index":"118","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa8e1bc8a6493fc7ed293f44c99b28d31561c4818984891e5817c92d270c9408241ceaca44ab079409d13cc0df9e2e187","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x009c8c6384aa695f592ab072df87c6d0c01565d983d9a85213a7dfa0a9c1b3c9"}},{"balance":"31999877792","index":"119","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8e6ad45832f4ba45f5fe719022e6b869f61e1516d8835586b702764c474befe88591722045da41ab95aafbf0387ecd18","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a04b6d532e52ae4b5f4dccc91ed0db66b36ab3ae5423264d1aec2d0090456a"}},{"balance":"31999877792","index":"120","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xae6f240e7a9baa3e388eb3052c11d5b6ace127b87a7766970db3795b4bf5fc1de17a8ee8528d9bef0d6aefcfb67a7761","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0083df289bfd84d078473d13a5b0597ed1bed61e00b2898b7926cefef11a5dfd"}},{"balance":"32000209997","index":"121","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x91d2fe0eded16c39a891ba065319dabfe2c0c300f5e5f5c84f31f6c52344084f0bb60d79650fc1dfe8d2a26fe34bd1fa","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a98ad192215aaffb3ce7b240da2b1265bffe806cd5dc6b00607445b9e3e984"}},{"balance":"32000209997","index":"122","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa0ec3e71a719a25208adc97106b122809210faf45a17db24f10ffb1ac014fac1ab95a4a1967e55b185d4df622685b9e8","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d43425e6f191cd2f90483ddd392a7bd012c2450024e334f69f2a7980c1f6d1"}},{"balance":"32000209997","index":"123","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa7d10210c48f84d67a8af3f894062397b22cb48fa3f0936c039400638908f5e976d9783295aad8af9ac602f6bf3b10a7","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0034ab849120ba1da77876329cb1fe487e71890143bc112f5adc5f97e8b1f774"}},{"balance":"32000209997","index":"124","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x82681717d96c5d63a931c4ee8447ca0201c5951f516a876e78dcbc1689b9c4cf57a00a61c6fd0d92361a4b723c307e2d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e09a86fce4b1b8ce40aa9588cb044cfb5e163c6d3a80fa8596e18b2cf7f79e"}},{"balance":"32000209997","index":"125","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8f3f78ee37dbcbbc784fa2a75e047e02f8748af86365f3961cfc1b21055e552b46ec0377085da06914e0cffec0d3f0a4","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007f8901042a4192bd29d9c2c415dc32a9b39621748e2a034358a1cc3e636ff7"}},{"balance":"32000209997","index":"126","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8035a49b18a5e6223952e762185cc2f992f7eabdd1fbd9d0a7467605d65de6fe89ec90d778cb2835f4e2abe84fb67983","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b95f1339ae79d62e6a8a89f51bdb39fad464b3000cdc6fdf2106e117393a87"}},{"balance":"31999877792","index":"127","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8b737f47d5b2794819b5dc01236895e684f1406f8b9f0d9aa06b5fb36dba6c185efec755b77d9424d09b848468127559","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005de96e4094802a824d256c53e208a162347f02952baf7e12624f6e9bb73c38"}},{"balance":"32000209997","index":"128","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xab03beff9e24a04f469555b1bc6af53aa8c49c27b97878ff3b4fbf5e9795072f4d2b928bff4abbbd72d9aa272d1f100e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00efb9a0f742e497925650bfccaebf3243102479601e21ea09dd6d9e60d2a05e"}},{"balance":"31999877792","index":"129","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x87109a988e34933e29c2623b4e604d23195b0346a76f92d51c074f07ce322de8e1bef1993477777c0eb9a9e95c16785f","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a28d611a4c5206e270f4dabfe590650a9a7be02d71920879347714926fd2d1"}},{"balance":"32000209997","index":"130","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa07d173f08193f50544b8f0d7e7826b0758a2bedfdd04dcee4537b610de9c647c6e40fdf089779f1ec7e16ca177c9c35","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c7e8d006ad71832d0ff433188e5fce1a881e6721dcb76d886268e5026e7d41"}},{"balance":"32000209997","index":"131","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8c62ca6abda1a9af02d5c477d2bbf4c00900328f3f03c45f5e1e6bc69a5be2b7acc2532a923f19cb4d4ab43d0d2f42ec","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005390591c93070ae97b8901db6d9958b510db917be7e9e7b1c52651ff7c36db"}},{"balance":"31999877792","index":"132","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb91ab4aed4387ed938900552662885cdb648deaf73e6fca210df81c1703eb0a9cbed00cecf5ecf28337b4336830c30c8","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003a7d1fa4c918d739babc348760b9157f7bf2aeeac6051a12498e9e2ee57281"}},{"balance":"31999877792","index":"133","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x942d5ed35db7a30cac769b0349fec326953189b51be30b38189cd4bb4233cfe08ccc9abe5dd04bf691f60e5df533d98a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003bd3fccfe61e7acc986c8277f4563ac48ab2d970d6fd9b914e8d391db1e42b"}},{"balance":"31999877792","index":"134","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x969b4bcd84cabd5ba5f31705de51e2c4096402f832fdf543d88eb41ebb55f03a8715c1ceea92335d24febbea17a3bdd7","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00874a8b9e2a78c5c1ff1bb51b0e92c174da5094a626711c2cf6e3fd449cc37e"}},{"balance":"31999877792","index":"135","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9718567efc4776425b17ac2450ae0c117fdf6e9eeeabb4ede117f86bee413b31b2c07cf82e38c6ecaf14001453ce29d0","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a81283b75829edfd7dbd442d507d16f776d8ca60a78a411cc85b62973ee81a"}},{"balance":"31999877792","index":"136","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x815c0c9f90323633f00c1382199b8c8325d66fda9b93e7147f6dee80484c5fc4ef8b4b1ec6c64fab0e23f198beefa9ea","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00ed65b3d31ce1526114ffcd2854e73985bbfe3c98634fd45728f6f5ce55cd54"}},{"balance":"31999877792","index":"137","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x820c62fa9fe1ac9ba7e9b27573036e4e44e3b1c43723e9b950b7e28d7cf939923d74bec2ecd8dc2ade4bab4a3f573160","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003567a0ff6277ba5479dbd300af3e36f5db9d0ffdb2832165b6c16593bc404e"}},{"balance":"31999877792","index":"138","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xafdb131642e23aedfd7625d0107954a451aecc9574faeeec8534c50c6156c51d3d0bdb8174372d91c560a0b7799b4e8e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d18b8b98be88154fe6466df8c115a2eacd53d31b1d0f88190d476f6748ec32"}},{"balance":"32000542202","index":"139","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8e34d569ec169d15c9a0de70c15bf1a798ce9c36b30cca911ef17d6c183de72614575629475b57147f1c37602f25d76c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0001eed1fb94412a527c00c388a232ebcd482f5e32e0691b961375b0e89d9f16"}},{"balance":"32000209997","index":"140","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8bcfb0520b9d093bc59151b69e510089759364625589e07b8ca0b4d761ce8e3516dbdce90b74b9b8d83d9395091b18bf","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007265e3949883a1b264541233682c86e37d6fb66fef448d2fc5bc8398d9b363"}},{"balance":"31999877792","index":"141","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa6f68f09fc2b9df0ed7b58f213319dd050c11addaef31231853c01079fb225d0f8aa6860acd20bc1de87901f6103b95f","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0096b0003ee2f0c742b93a21427db162073470d1a930299e209b89d8efedabf8"}},{"balance":"31999877792","index":"142","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb0ea38f0b465ae0f0b019494aecd8a82cb7c496ecfab60af96d0bda1a52c29efd4d4e5b270f3d565eb3485b2aaf3d87c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0031a1947e01f6777338358eb0ba6597c883e87e459287fb344071463fc4a04e"}},{"balance":"32000209997","index":"143","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x87dc2da68d1641ffe8e6ca1b675767dc3303995c5e9e31564905c196e3109f11345b8877d28d116e8ae110e6a6a7c7a4","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e30cf397adf2b66344f9b2fe7602340974733cbe92d3bb59cb46db022a5861"}},{"balance":"32000209997","index":"144","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xaf048ba47a86a6d110fc8e7723a99d69961112612f140062cca193d3fc937cf5148671a78b6caa9f43a5cf239c3db230","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000cb726878ce3c36b6025d653cbdb37b1da1652b3f45b499444c6871a8959a5"}},{"balance":"31999877792","index":"145","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x92c057502d4de4935cf8af77f21ca5791f646286aead82753a62dfb06dbd1705df506a02f19517accb44177cb469f3e4","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x002cebeae13262316e27582c620326955a0a75b763a5d0a4890e4dcc8e28d94d"}},{"balance":"31999877792","index":"146","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb88b54fe7990227c6d6baa95d668d2217626b088579ddb9773faf4e8f9386108c78ddd084a91e69e3bdb8a90456030c6","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00cbb190758f8ff5afe7a1bdeae5537527e4d6f6417e4338a4d3cb751c375554"}},{"balance":"32000209997","index":"147","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x913e4eec6be4605946086d38f531d68fe6f4669777c2d066eff79b72a4616ad1538aae7b74066575669d7ce065a7f47d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000fcdecdeb5fc677c45c0c8115c0b467106d59365ff41a99f744038656f1c7e"}},{"balance":"31999877792","index":"148","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa99987ba6c0eb0fd4fbd5020a2db501128eb9d6a9a173e74462571985403f33959fc2f526b9a424d6915a77910939fc3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00505d5d4c406f4d856d3bc01f1bf712e1d56aa42418c980f78daf96984990e4"}},{"balance":"31999877792","index":"149","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb194e855fa3d9ab53cbfbc97e7e0ce463723428bb1ad25952713eac04d086bf2407bdb78f8b8173f07aa795bd5e491dc","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x004184c1ac4b68615c1b79189882c3e68a3ab0e081946c1834ebc49091f1307c"}},{"balance":"32000209997","index":"150","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8623144b531c2852fb755a4d8b4c9b303a026de6f99b1e88a1e91fa82bc10d6c7a9d8dad7926b6b7afd21ca4edb92408","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e867708ad18765d59c2cb961a40d82c4e8195d0c09447416765f8341d19ed1"}},{"balance":"31999877792","index":"151","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x955bcc6bca53e7a6afa0e83c8443364e0e121f416d6024a442253d1e9d805407f2c7f7d9944770db370935e8722e5f51","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00085e7c92e98719b58d3c0394994266cac706b544cbc06f0151869b98d7d76f"}},{"balance":"31999877792","index":"152","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa82f4819a86b89c9cbd6d164e959fe0061e6a9b705862be2952d3cf642b515bd5edae4e6338e4eeb975a9082ff205bb7","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003e75e675eae76b8ed0f003db3258d25bf86d4b92b3e9a032ae50fcf8521d2b"}},{"balance":"31999877792","index":"153","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8a75c55208585181c6cef64a26b56d6a1b27ef47b69162b2538724575c2dff045ec54a9d321fe662735871b825c5aa3c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007001c40216458b26c8afa5b7dd52d63be4ffabd5c6185e551e4de4c4746e25"}},{"balance":"31999877792","index":"154","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa69ec7c89252e2531c057ebeb86098e3b59ca01558afd5f6de4ec40370cb40de07856334770ecacbf23e123201266f67","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x002f049d144e2710589bb652f826ae4b0106c48cb52c60eb2122975ec26740b6"}},{"balance":"31999877792","index":"155","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa7a9bebe161505ba51f5fb812471f8fb8702a4c4ad2f23de1008985f93da644674edb2df1096920eaecb6c5b00de78cd","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0076f79924e86077044539996da7eb1ed2aea846432268613c3c26b626bcbea5"}},{"balance":"32000209997","index":"156","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa20cca122e38a06188877a9f8f0ca9889f1dd3ffb22dddf76152604c72fc91519e414c973d4616b986ff64aec8a3208b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b90e7e91816d316d4a459474aafa9b48298a1e753a997a43c96b2ceaf9f6c5"}},{"balance":"31999877792","index":"157","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa9e1558a3ab00c369a1ce75b98f37fd753dbb1d5e86c4514858b1196dfd149aa7b818e084f22d1ad8d34eba29ce07788","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00bdd7270ee0b4d3cd94d7fbbbb09defeacb4f631a770ce85f01037fca8583c4"}},{"balance":"31999877792","index":"158","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb203b206005c6db2ecfab163e814bacb065872485d20ac2d65f982b4696617d12e30c169bf10dbe31d17bf04a7bdd3bc","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00f0c980b038baf464ef5a4e5629eb4e81a6401a88e633e8a7d3c80f1fb8035a"}},{"balance":"31999877792","index":"159","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x866f9ebe3afe58f2fd3234c4635a215c7982a53df4fb5396d9614a50308020b33618606a434984ca408963093b8f916d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00879335e1dd57bb244cfbcba92c68382f0a5e7d4a25e567a0a67623a1681d8e"}},{"balance":"32000542202","index":"160","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa1cd4b34c72719c9d2707d45cd91a213541dd467f294f225e11571fd2e1cea6aac4b94b904ec9e153ed3ac350856ad97","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00dd05ecae7c3eb9d7b119434858cc0955585a1a9138c53618acb0277b0ed688"}},{"balance":"31999877792","index":"161","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x93b15273200e99dbbf91b24f87daa9079a023ccdf4debf84d2f9d0c2a1bf57d3b13591b62b1c513ec08ad20feb011875","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0039f46ca008928d3350416709f99f4f1f5681513dfae571acbc7ac4df47551e"}},{"balance":"31999877792","index":"162","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x85ae0ef8d9ca996dbfebb49fa6ec7a1a95dff2d280b24f97c613b8e00b389e580f0f08aa5a9d5e4816a6532aaebc23bf","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00fbbcc55ea47c6af087b1023c61fece29124ef18f7060edaf4026f6699a38d8"}},{"balance":"32000874407","index":"163","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x826a146c3580b547594469b248195c9003205f48d778e8344caff117b210b24351892c5b0ace399a3a66edebc24c180f","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00112c780956770c0705749c59b98c0b8d828a467c6ed9560044177854d0da93"}},{"balance":"31999877792","index":"164","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa762624bc58176cdfa2d8f83629b897bb26a2fad86feb50f1b41603db2db787b42429e3c045d7df8f7ea55c0582c9069","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d58ef719338ac3693115eaf1bdf88f64e78dda8f5ddf945b195c25cf311b7d"}},{"balance":"31999877792","index":"165","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb58160d3dc5419cfa1f22e54e5135d4f24f9c66565da543a3845f7959660fa1d15c815b9c8ae1160dd32821a035640c0","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00876436b3dc7515befe340174d1cf2f885b624321892307417da963b411b4fe"}},{"balance":"31999877792","index":"166","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x837d6c15c830728fc1de0e107ec3a88e8bbc0a9c442eb199a085e030b3bcdfb08e7155565506171fe838598b0429b9cc","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b10234b13884022e1de44b84c5052983b51b11ef858799437926cacd2f4cea"}},{"balance":"31999877792","index":"167","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8ab3f4fbbea07b771705f27bb470481ab6c44c46afcb317500df564b1177fa6dc7a3d27506b9e2d672ac1edd888a7a65","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e4aebd845e707c5963dbfdb0b6398ae6936f61c63e54ff40bcee1e08ee15ac"}},{"balance":"32000209997","index":"168","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa49f744d9bbfbcdd106592646040a3322fbe36e628be501a13f5272ad545a149f06f59bd417df9ae1a38d08c5a2108fe","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0097691fcb4d18ff0474c2e93cff343d969de5deac10c6a9a6b8ec14428e3884"}},{"balance":"32000209997","index":"169","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa6ba3250cd25bd8965d83a177ff93cf273980a7939160b6814a1d2f3cf3006c5a61b0d1c060aa48d33da7b24487eaf43","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000716a77895537b7be1525d69364ebd8b82c4a8ab60a90145efe60e41dee953"}},{"balance":"31999877792","index":"170","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8a8409bd78ea4ff8d6e3e780ec93a3b017e639bbdaa5f399926e07ce2a939c8b478699496da2599b03a8fb62328cb1da","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c965344b126b27adb1c6397a3d35601593d2789beaff0358208f8aeb70cfd1"}},{"balance":"31999305516","index":"171","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x84a3f285f8a8afc70b2c5b2c93e8ab82668def5e21601888fac3d2c0cdf947480c97089ba4ad04e786d4b771c8988c75","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x006c327abab4e40b4850875e4a9321fb2210294d5091e1d25a12f2604c22ebe7"}},{"balance":"31999877792","index":"172","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb614644e726aa24b10254dd0a639489211ec2f38a69966b5c39971069ea046b83ee17cf0e91da740e11e659c0c031215","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x006af9030bb5748e995922a2c6fb718c51a007ab24f1f52a91c92268b3a157c9"}},{"balance":"31999877792","index":"173","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9725ff209f8243ab7aceda34f117b4c402e963cc2a3a85d890f6d6d3c0c96e0b0acbed787fe4fa7b37197c049ab307ea","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003c01e43ae62bb58fa84e93cee4761b0017482fa373c6d0b7b49883ce98fa4b"}},{"balance":"31999877792","index":"174","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x90bc674d83e1b863fec40140a2827c942e575bd96bc5e60339c51089bab5fd445ae0c99ab9f1b5074b54682ac9c4a275","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0055aef0ebeafc8d0c688ebf5aedbdfb2e1e9e1425178266334da39ccc3b7769"}},{"balance":"32000209997","index":"175","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x98ff9389cf70ee9e0ae5df1474454ab5d7529cab72db2621e1b8b40b473168c59689a18838c950de286ea76dfdf9dc24","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x006ea8030ae7b759fc420db81cbba3bdfca89f14339ed90555f8d7031787bb9b"}},{"balance":"31999877792","index":"176","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb3dc963ef53ae9b6d83ce417c5d417a9f6cc46beaa5fcf74dc59f190c6e9c513e1f57a124a0ef8b6836e4c8928125500","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e4ec54a013cc298690fc48c4f099b1849924a61619ca1ae6ebcdee8f4f3db2"}},{"balance":"32000542202","index":"177","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb2277b279519ba0d28b17c7a32745d71ceb3a787e89e045fe84aaadf43a1d388336ec4c8096b17997f78d240ab067d07","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x009f38d19d493e6cc7833db663b7f493115fb961b750a9e94cbc96d3949dda2e"}},{"balance":"31999877792","index":"178","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x84614d2ae5bc594a0c639bed6b6a1dc15d608010848b475d389d43001346ed5f511da983cc5df62b6e49c32c0ef5b24c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0084c23879018db95ef3c4105aaa089d01a1ed564208cc1385b8586273411766"}},{"balance":"31999877792","index":"179","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa1402173873adf34e52c43feacd915eb141d77bf16bc5180e1ee86762b120411fffa7cb956cf0e625364e9a2d56f01f3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001598cda2ea1db0f8d9912e5c9a85ab7081af5ee7b9e6d749359568e7fe3379"}},{"balance":"31999877792","index":"180","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x89bdc5f82877823776a841cd8e93877c0e5e0b55adcebaafaf304d6460ab22d32bcd7e46e942ec4d8832eaa735b08923","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0057d657705b9fcdba998f1342ccac2c453e482d93bd2f382913729e4a7266e1"}},{"balance":"32000209997","index":"181","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8c3999317e8c6753e3e89651e5ba7fdea91ab1dda46fdb6902eccd4035ba1618a178d1cd31f6fbbacc773255d72995b3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001f3a188196ad476a1fde1414e7f12200c30e96c8c18f09f1a3e656806ec466"}},{"balance":"31999877792","index":"182","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x86bdb0a034dab642e05cb3e441d67f60e0baf43fa1140e341f028a2c4b04f3f48a0cdc5ee1c7825dcdc4019b004ec073","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x009ea8fd24e77fdbaea9e743b1b82242ca1d445a37ed845cbc9d4ecabb3d8be9"}},{"balance":"31999877792","index":"183","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x82de0e98b08925f379d1b2c40e30195f610841409ab3724ad3f2d173513e1d884c8b27aff402cd0353f79e61c7b4addb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001318ec0238d67cb45114b7614e66225030f53645831bc8fdd1d011d3dbbddb"}},{"balance":"32000209997","index":"184","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb74c0f5b4125900f20e11e4719f69bac8d9be792e6901800d93f7f49733bc42bfb047220c531373a224f5564b6e6ecbb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00fb15eff08b47ab160ec9ddc995e65a40182420a4e1f4c5ee6a7d0247596c26"}},{"balance":"31999877792","index":"185","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb4d670b79d64e8a6b71e6be0c324ff0616ad1a49fbb287d7bf278ec5960a1192b02af89d04918d3344754fb3284b53a1","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00912ae5348ab021c8f05709fc684f0caf567b3cf33d4388f7d4f9f9d8b00885"}},{"balance":"31999877792","index":"186","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x865dfd7192acc296f26e74ae537cd8a54c28450f18d579ed752ad9e0c5dcb2862e160e52e87859d71f433a3d4f5ca393","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0056867a596d9903c6b9f17c96957dec409fd6f89dbdb000ac3ff860e39942a4"}},{"balance":"31999877792","index":"187","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa52cd15bb5cb9bdd7cef27b3644356318d0fa9331f9388edc12b204e2eb56face5604e4c3bb9631ef5bd438ff7821523","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0062d25b01271a7aefd642efcc8d7ef51d6bc619b325a006eeebd286abad931b"}},{"balance":"31999877792","index":"188","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa98ae7e54d229bac164d3392cb4ab9deeb66108cd6871bd340cbc9170f29d4602a2c27682f9d2fa3ad8019e604b6016a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c5e59517c619b0c9fa18bcc08804152fbfd63e78167b8b5f5ba32911a43203"}},{"balance":"32000209997","index":"189","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x931cdb87f226ad70ec6e0ff47e8420481d080e57951443ad804411a7b78dc2f2e99cbdf2463dda39d6be2ad95c0730e1","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00a440d21b4efafb90327bcec34f73a49e68144d3d07b03bd99af386ba4fa6d3"}},{"balance":"31999877792","index":"190","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa64609779de550798ce1b718904bfd6f15e41dc56a14928ab1e6f43bba84d706f5ce39022a34e3fb2e113af695c52473","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0090b3305dc25d6281b873f0552b26b9e74151da0db46cfec202a1946ba88710"}},{"balance":"31999877792","index":"191","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb3f095233b798f4eb74be9d7d13b95800c9421875bc58f7bab4709840881fbfbe1eb133236eead9f469dde9603f06e46","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c67d22fe8b6f96135d28be7245ffb95fe5146721e4ea7c8230d95e14eb4830"}},{"balance":"31999877792","index":"192","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8e7cb413850ecb6f1d2ded9851e382d945a8fee01f8f55184c7b0817000073944c6b6c77164e0a2272c39410fde18e58","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001058c55bd4621ec0b027261ee4ffc7e39ba60127c9bbbd41a3933d620a462e"}},{"balance":"31999877792","index":"193","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9929f70ba8c05847beb74c26dd03b4ec04ca8895bc6d9f31d70bd4231329c2f35799d4404a64f737e918db55eec72d25","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x008c03a4d2871972d66a2226fc6b3ec9e24e86d60b6cb4526becf211de25b412"}},{"balance":"31999877792","index":"194","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x85ddb75efa05baaa727d659b09d268b606f81029796e106b55ff8d47fdb74a7d237286dfeadde6cc26d53d56204eff65","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x008948bc518a2a7d9c79634817112c7fda7b8ab60f7e07b4ecba31b436a7caba"}},{"balance":"31999877792","index":"195","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x803968608f3f1447912bb635f200ed5b0bc2f3ade2736bccb05a70c83c7df55602a2723f6b9740e528456eeba51ced64","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e590554b9ae9f27324e64a49575b3f107f99c1764659b72c5332e0ba2dafd3"}},{"balance":"32000209997","index":"196","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x98a3e7179e2ad305857bf326d2c4b3924af478b704a944a416f4bc40be691fa53793ae77dcfa409adaee4bced903dfb1","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0098a85c1e857e5c3df8ed71a0a7c7aff53a3cb167142b490bbc50d175ea2dbb"}},{"balance":"31999877792","index":"197","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8eb7dd3ccc06165c3862d4e32d7fd09a383e0226fa06909ddf4e693802fd5c4324407d86c32df1fdc4438853368db6ce","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00fcecf098ff10c9588275bbfba5503cdb67b35c1a9897ebdb5b1b2f9b970cce"}},{"balance":"31999877792","index":"198","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x86fef261cd5bccd56c72bba1bfcb512c7b45015283dbea7458d6a33ab1edfb992139cfb0afd7b05a2dfb327b6c8f94dc","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00c9876bcf801bf41890645bcc6b61c0ebba0be6eb0bd5db2bc0d18bf86ac896"}},{"balance":"31999877792","index":"199","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb35220775df2432a8923a1e3e786869c78f1661ed4e16bd91b439105f549487fb84bbea0590124a1d7aa4e5b08a60143","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000e00d9d98da19d6f6bc583c06bdcd4bf0517beafde15b6c7e3246ad2117a68"}},{"balance":"32000209997","index":"200","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb3c8a118a25b60416b4e6f9e0bc7cb4a520b22b1982f4d6ba47d3f484f0a98d000eed8f5019051847497f24fd9079a74","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001f8344c441ea567694104f367acab8533a6bd10decf8560315be10c0e33100"}},{"balance":"32000209997","index":"201","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x876a46a1e38a8ae4fbad9cb9336baed2f740b01fabb784233ae2f84ffc972aefbfc5458e815491ab63b42fcb67f6b7cb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0056cb59b0aa1a34bcb0368b219b6927e62a7229dcceb6b87fac2e21127253bd"}},{"balance":"31999877792","index":"202","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xafad69e0702e02012b2419bdc7250c94816e40286a238e5f83858c7be2f93be2ec3657dd6cd0ded9184d6c9646092d3e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001b7193799f6945eddb157ee55502fe1784fa7d1b15ed705e2b6c7bfb8d07de"}},{"balance":"32000209997","index":"203","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x908ee03816f68a78d1da050c8ec125d3dac2306178d4f547d9c90bd58b3985a20f6fef507dcc81f010d70262d9abab68","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005c0dc50a908154ee061c68a7432a1aeea253d8b69fb5ab7f45ea452f1f0583"}},{"balance":"32000874407","index":"204","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb12332004f9ecc80d258fe5c7e6a0fba342b93890a5ea0ccda642e7b9d79f2d660be4b85d6ca744c48d07a1056bc376d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0027909184fbe51be99de06cc84660124aa67e296812ba028edc66ff1ef2e4b8"}},{"balance":"32000209997","index":"205","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x99fb4a03d71921b6a56f5e39f42f281b96ee017e859f738fab6fbc51edbcf3b02b1276336d1f82391e495723ecbe337e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00ac5b1539617f854c0a568302447ab3e9ada0eff847cbd8452809ab2b241e14"}},{"balance":"32000209997","index":"206","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa06d4f9703440b365bdce45e08442ec380165c5051c30e9df4d25571cba350ce5ab5e07810e1d1476c097a51d7734630","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005459b5f1ec11723e3a35bf20eece27a8ff0a891c7e49babf5c7f73b8cb05aa"}},{"balance":"31999305516","index":"207","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa4c90c14292dfd52d27d0e566bbfa92a2aebb0b4bcd33d246d8eeb44156c7f2fd42ba8afb8e32699724c365fc583e904","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000a6d8790e347cd746e8ccf0699255b8b4b34fd8b4f3d1f2c4755bb76005992"}},{"balance":"31999877792","index":"208","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa8b15373c351e26e5dc5baba55cb2e1e014f839a7938764ee2def671bd7ac56c3f8b4c9c330f6ae77500d3f7118eb6e8","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00310703658da0b1de1c014577a39004a1927e460e8fb23d524ddaba80a64bb5"}},{"balance":"31999877792","index":"209","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb12d0c357016caa5c0ec0a6bdc07e60c2af4631c477366eeb6ab4fffbd0ca40ab9ec195091478a2698bf26349b785ae8","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003ad3ac604149caf46015ba78965d71bcb2b59a15980c578da1a23f53152d10"}},{"balance":"32000209997","index":"210","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb3d106c404056e440519d8a1e657f249d9aae11325796404bb048c1792a12f8addf7aa29c5822893c8cc408527793d6a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003a9034cfd33e31e38e13e26808c9d328ab9a5e2aa0ba760f04678bb8a8b016"}},{"balance":"31999877792","index":"211","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa232213cdd2b3bbdf5f61e65d57e28ee988c2b48185c9ac59b7372bc05c5b5763e19086ceaefb597b8e2b21b30aaacde","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b431e54cd99d7122fea459f8c9cb8833f2452b1050c8ba871a026b1ce04ad6"}},{"balance":"32000209997","index":"212","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x84d1e4703d63ac280cd243c601def2b6cc0c72fb0a3de5e83149d3ac558c339f8b47a977b78fd6c9acf1f0033ae71a88","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00b2cdf52324324f6d996cec2429cbd76ffe11e709e7a39e522aa39cfbeaf65c"}},{"balance":"31999877792","index":"213","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa9761c83d922ced991557c9913bedfbe34509ec68d34a791242ac0f96e30f87e29a19099199a38aac29037e0c8e939c6","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00aa5a780fe41513c5f9040f92709cc80a2d0f1e4ff2f82894202723d75aeaf4"}},{"balance":"32000209997","index":"214","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa74fb46295a7ba2f570e09c4b8047a5833db7bf9fea68be8401bd455430418fe5485be0b41c49bd369f850dbfd991ce3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x002842f154aa20d4c5d2ca106230a80d94e0e55e3c3152c949f2f7c4bce071bb"}},{"balance":"31999877792","index":"215","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa23cf58a430d6e52c8099ecee6756773c10183e1e3c6871eb74c7f8b933943a758872d061a961c9961f2e06b4c24f2c4","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00763ae4706dbfd4aedd8653c5a3446eafd192cb324331ca08a3b35c883069b7"}},{"balance":"32000209997","index":"216","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x889586bc28e52a4510bc9e8f1e673835ff4f27732b3954b6b7cd371d10a453ba793cfdfacf4ce20ca819310e541198b5","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00da97c798548b51c390d706b15b03814a7c8410dc2e856f76e47802ad2e600b"}},{"balance":"31999877792","index":"217","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb4ff0075497094519c49b4b56687a1b8c84878e110dc7f2bd492608f3977dfdc538f1c8e3f8941552552af121eab9772","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e2a74a7fb0e0bfb21460e619e2e874f97a49318f63b8a6f20dbe3e170d5294"}},{"balance":"31999877792","index":"218","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8b5b5399aefcd717d8fc97ea80b1f99d4137eb6fa67afd53762ee726876b6790f47850cf165901f1734487e4a2333b56","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005474c687eba68625082add9f6208b4d41666fa62fddb650f1830216936959a"}},{"balance":"31999877792","index":"219","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x99b2f703619c4472a1039f532bf97f3771a870834f08d3b84fc914a75859fd0902725b40f1a6dabe7f901ac9c23f0842","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0082989619c216b3e736ca57e814a08ac68d70a8b60be5dcc964bbfca1561c13"}},{"balance":"31999877792","index":"220","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x927e6e88fe7641155e68ff8328af706b5f152125206fe32aeab19432f17ec925ed6452489cf22bee1f563096cbd1dae6","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007d486003b9346aa9fa72c004a310f93b140d22ee6112d4e7b4ce21fe543b29"}},{"balance":"32000209997","index":"221","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x88eeb6e5e927aa49a4cd42a109705c50fa58ed3833a52a20506f56cc13428cbccb734784a648c56de15ef64b0772de71","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005f0df87337d7bb960644a674e39c7bb163bbd459ca8911ed462e504543feda"}},{"balance":"31999877792","index":"222","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x95cc6e3d4e3ec850b01b866ccec0e8093a72311bcc4c149377af66586471ca442d5f61ecbb8878352f0193ddea928805","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x002f232b219e3f6715fccad24d2c124cdb7703eab85408cc0499a3155e5b8368"}},{"balance":"32000209997","index":"223","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xada7d351b72dcca4e46d7198e0a6fae51935f9d3363659be3dfaa5af8b1c033d4c52478f8b2fbf86f7318142f07af3a7","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00ac036f8556ccbbccc4b25245a27d4c6b276dcff55ce4a65f9492cf5364d8cb"}},{"balance":"31999969926","index":"224","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x93abf6639e499a3d83e3e2369882ac8dbe3e084e7e766d166121897497eabee495728365d9d7b9d9399a14831d186ff1","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005967d3e4b11b9f7f7249808340ce46789ddfa2d8ccfd2ebba139bb3033833a"}},{"balance":"32000209997","index":"225","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8e876b110d8ad35997a0d4044ca03e8693a1532497bcbbb8cdb1cd4ce68fe685eb03209b3d2833494c0e79c1c1a8c60b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007bbcd6d043ce2b9ccf21c067d69804e3ab37d5ff5aaaedef30789358151e11"}},{"balance":"31999877792","index":"226","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa339d48ea1916bad485abb8b6cbdcafdba851678bfe35163fa2572c84553386e6ee4345140eab46e9ddbffc59ded50d5","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00565291b3fba50c0aefadf088e0a019b996e49f52bc2d6e7aa4d8968d2afb69"}},{"balance":"31999877792","index":"227","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8e62874e15daea5eb362fa4aaad371d6280b6ca3d4d86dae9c6d0d663186a9475c1d865cf0f37c22cb9e916c00f92f71","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00e33ed74668779118cfae479fcc88d7573bbadcd03d375a77fbcbf8ebe9847f"}},{"balance":"31999877792","index":"228","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa0d79afac7df720f660881e20f49246f64543e1655a0ab9945030e14854b1dd988df308ed374fc6130586426c6cf16a4","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00132a4831fdaee3152f198d0267120bfdeb81edaa7785621fed95d7d560c5ed"}},{"balance":"32000209997","index":"229","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xab812b452a959fd9cbca07925045312f94e45eb1a7129b88ea701b2c23c70ae18a3c4a1e81389712c6c7d41e748b8c7d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007af5bc4715bf2c0ce900947c8dd902555bbcec1ef8760c0693d52d822ef2b5"}},{"balance":"32000209997","index":"230","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9294795d066f5e24d506f4b3aa7613b831399924cee51c160c92eb57aad864297d02bfda8694aafd0a24be6396eb022a","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0024f2fd6ab505a764afe15f2f3e2c7643545eea097f0e9ba86b6402d231c3f3"}},{"balance":"32000542202","index":"231","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x925ef08813aa7d99fbb6cc9d045921a43bcf8c9721c437478afd3d81e662df84497da96ddbf663996503b433fd46af28","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003488aba6d67ef195f5f4e2feba8618fb29bb496257141e1f906ce8a23a60fa"}},{"balance":"31999877792","index":"232","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8da7f6c67fb6018092a39f24db6ea661b1ead780c25c0de741db9ae0cfc023f06be36385de6a4785a47c9f92135ea37d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005d08981403ff1fe66e94a41c4815978b29f94a921225b71cd56ca7509e6189"}},{"balance":"32000542202","index":"233","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa1555b4e598691b619c576bad04f322fc6fe5898a53865d330097460e035e9d0e9169089a276f15f8977a39f27f9aec3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001cc847328b84294d0a230508d6705a3549e8557b4c8c4942c81633a11fc26e"}},{"balance":"32000542202","index":"234","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8215b57dd02553c973052c69b0fecefa813cc6f3420c9b2a1cffae5bd47e3a7a264eaec4ed77c21d1f2f01cf130423c0","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x008c3ca15594501f0d1c8db02c4ce15837fa017bdc175bdcd3b3bd40f7b13f68"}},{"balance":"31999877792","index":"235","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8978bdb97d45647584b8b9971246421b2f93d9ac648b1ed6595ad8326f80c107344a2c85d1756cd2f56b748001d5fd30","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x000b2a8d62713d6ecb5ee4d4c8ba70b31c4f028f8607d204e46d0916ff18f4c5"}},{"balance":"31999877792","index":"236","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb3b3c89c783ee18bc030384914fafb8608d54c370005c49085fe8de22df6e04828b082c2fe7b595bd884986d688345f5","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00d711e8f82099cf38c26d7291bf42e37895ba6209056c7d7260198201c79ee8"}},{"balance":"31999877792","index":"237","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xae08c32bac1e3ec1e2250803b1781b8004efb2ad7f215e2fe8feb9f9ec5ec14157a9395f9f0e92060d18f4b73b33c0c3","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x008f4dc7ba5bc03bb570758cc85ad10e48606f3da44d4e0bc45c2dd810ed7336"}},{"balance":"31999877792","index":"238","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa7e53203bbed6adaa99c54f786622592dcaa4cd702e9aaaa355b8dcf302301f8b8dfec87625a9560079d3f8daf076c5d","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x009da3cc06030c353c23c8c4ca002445a40cb0440613223618e9cbf902de5108"}},{"balance":"31999877792","index":"239","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9081bebcd06b4976d992d98a499397a44da20650ad4a1e0fb15dc63db8744d60d70dff0c6e2c3bb43ee35d1940683d1b","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00aa0c477da5453180f7a79ef7ee59bbdb4a53b3304b3b340a6eca352706c816"}},{"balance":"31999877792","index":"240","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x9847ef9b7f43678bb536a27ab3aecee8cc3eedfe834e1214eaaeb00dc07bc20fd69af3319c043e62a29effd5ffb37e16","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x002b8a16a2fd8dd0dfacb78574e507e200424ab6dd22a92120027815578bca9b"}},{"balance":"31999877792","index":"241","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8988349654c5fdf666ec4647d398199cc609bb8b3d5108b9e5678b8d0c7563438f3fbcf9d30ab3ef5df22aad9dc673b2","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00ba433feef62e40bb987e6faff8adc72683b8084e58d9666e8d023d7147e893"}},{"balance":"32000542202","index":"242","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb29e53ff7b1595375136703600d24237b3d62877a5e8462fad67fc33cbde5bd7fcfac10dde01f50944b9f8309ad77751","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x006e363f044d1cfb18b39e106fa71e7da2a863e349c71a7c4947ed1698afa919"}},{"balance":"31999877792","index":"243","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x95c38f73d6e65f67752ae3f382e8167d7d0d18ced0ca85a1d6b9ba5196f89cf9aed314a7d80b911806d5310584adc1b8","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0087be73d806c15f46030a0d510f8d4449b03a9852674cceba767b92b25bbfbd"}},{"balance":"31999877792","index":"244","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8fa4a674911c27c9306106ffcc797e156b27dab7a67ce7e301cfd73d979331f8edcd4d3397616dd2821b64e91b4d9247","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00579bbd0c8de773bffd4651b496ab39361711f639def9abb8c0040609983eb7"}},{"balance":"31999877792","index":"245","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb8e551f550803ec5e67717c25f109673b79284e923c9b25558a65864e0d730aeaecab0ee24448226e5dd9da3070080a2","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x004436c437b98236ca2ddad4a5d582b80ee46e6dcbbe997fdaab8d05c221e457"}},{"balance":"31999877792","index":"246","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x950c598dc627cd58cd7d34e0dd055daf92c9bc89235c3a5d3aacf594af97f99eb0f02a6f353238386626ee67462cd9a2","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x004751e89d86f5b31f377c642f501ed585c3d2239c28f69f34f2171fbe865db3"}},{"balance":"31999877792","index":"247","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x97363100f195df58c141aa327440a105abe321f4ebc6aea2d5f56c1fb7732ebfa5402349f6da72a6182c6bbedaeb8567","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x007e655bc95ce4c5d7b1110d7c99fcd85f27aa2043ee71ef0d1477c801841994"}},{"balance":"31999877792","index":"248","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x80e8e7de168588f5ac5f3b9f2fabcadc0c4f50c764f6a4abf8231675fec11277d49e7357c3b5b681566e6a3d32b557e1","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005519f7bc5413873abf9acbd50da7e4be24bc6e98d4c2f6b4acd4c4bec85f8d"}},{"balance":"31999877792","index":"249","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x90239bd66450f4cc08a38402adc026444230fd893b752c7dfc4699539044a1fd39ba133cbdc330b7fc19538e224725cb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00618e76f0b30dcdb427958b81aeeab84b24f951b65176255d754504076d4cb9"}},{"balance":"31999877792","index":"250","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa2ca1572cca0b43a2652dd519063311003ca6eccab5e659fc4a39d2411608e12e28294973aae5be678da60b0c41ca5f0","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00921e250978155567004f0635ab151ffc22e3b33e5c182af9d15408205c34de"}},{"balance":"32000209997","index":"251","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb48e56bd66650adb1e4f0c68b745f35f08d9829a06dbd5c67b2cc03dcf4cc5f9a85c84654f9596163b59d693eab14c34","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0018ebbb336f9db681b63e040b7aa805ccdf1624bac8c6207c94e4fb02b61527"}},{"balance":"31999877792","index":"252","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x825abb120ae686f0e3c716b49f4086e92b0435413a137a31bcf992e4851ecdf9d74ceea3d6e063d7009ec8b8e504fb30","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00f4d91b27e34c5e57587181313952802df1469250d9b5547ae93a41d9a84c0a"}},{"balance":"32000209997","index":"253","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb422f8004e8e7c47cf4bc69c3a551b3491916e415b824c2d064204d55c465fb6839834a3f37d8a9271c75e5e2d1f3718","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x0098994504462a8eb8bb025edfd9f8ee9dfb59b603be45ae2338456acbed95ae"}},{"balance":"32000209997","index":"254","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x97e827da16cbd1da013b125a96b24770e0cad7e5af0ccd9fb75a60d8ba426891489d44497b091e1b0383f457f1b2251c","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00823ba308d4a94cd4772a2e5fefe9d8f054bf688c296ff575d3f0520eee32a3"}},{"balance":"32000209997","index":"255","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x8025cdadf2afc5906b2602574a799f4089d90f36d73f94c1cf317cfc1a207c57f232bca6057924dd34cff5bde87f1930","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x003b9098beaef6797fd504b137d18ccbd08f221ce174485f3296378f9155696f"}}],"execution_optimistic":false,"finalized":false} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/head_validators_balances.json b/cl/beacon/handler/test_data/head_validators_balances.json new file mode 100644 index 00000000000..35cf0611db3 --- /dev/null +++ b/cl/beacon/handler/test_data/head_validators_balances.json @@ -0,0 +1 @@ +{"data":[{"balance":"31999877792","index":"0"},{"balance":"31999877792","index":"1"},{"balance":"32000209997","index":"2"},{"balance":"31999877792","index":"3"},{"balance":"32000542202","index":"4"},{"balance":"31999877792","index":"5"},{"balance":"31999877792","index":"6"},{"balance":"31999877792","index":"7"},{"balance":"32000209997","index":"8"},{"balance":"31999877792","index":"9"},{"balance":"32000209997","index":"10"},{"balance":"31999877792","index":"11"},{"balance":"31999877792","index":"12"},{"balance":"32000209997","index":"13"},{"balance":"31999877792","index":"14"},{"balance":"32000209997","index":"15"},{"balance":"32000209997","index":"16"},{"balance":"31999877792","index":"17"},{"balance":"31999305516","index":"18"},{"balance":"31999877792","index":"19"},{"balance":"31999877792","index":"20"},{"balance":"31999877792","index":"21"},{"balance":"31999877792","index":"22"},{"balance":"31999877792","index":"23"},{"balance":"32000209997","index":"24"},{"balance":"32000209997","index":"25"},{"balance":"32000209997","index":"26"},{"balance":"31999877792","index":"27"},{"balance":"31999877792","index":"28"},{"balance":"31999877792","index":"29"},{"balance":"32000209997","index":"30"},{"balance":"31999877792","index":"31"},{"balance":"31999877792","index":"32"},{"balance":"32000209997","index":"33"},{"balance":"31999877792","index":"34"},{"balance":"31999877792","index":"35"},{"balance":"31999877792","index":"36"},{"balance":"32000209997","index":"37"},{"balance":"31999877792","index":"38"},{"balance":"31999877792","index":"39"},{"balance":"31999877792","index":"40"},{"balance":"31999877792","index":"41"},{"balance":"31999305516","index":"42"},{"balance":"31999877792","index":"43"},{"balance":"31999877792","index":"44"},{"balance":"31999877792","index":"45"},{"balance":"31999877792","index":"46"},{"balance":"31999877792","index":"47"},{"balance":"31999877792","index":"48"},{"balance":"31999877792","index":"49"},{"balance":"31999877792","index":"50"},{"balance":"32000209997","index":"51"},{"balance":"32000209997","index":"52"},{"balance":"31999305516","index":"53"},{"balance":"31999877792","index":"54"},{"balance":"32000209997","index":"55"},{"balance":"31999877792","index":"56"},{"balance":"31999877792","index":"57"},{"balance":"32000209997","index":"58"},{"balance":"31999877792","index":"59"},{"balance":"31999877792","index":"60"},{"balance":"32000209997","index":"61"},{"balance":"31999877792","index":"62"},{"balance":"31999877792","index":"63"},{"balance":"31999877792","index":"64"},{"balance":"31999969926","index":"65"},{"balance":"31999877792","index":"66"},{"balance":"31999877792","index":"67"},{"balance":"31999877792","index":"68"},{"balance":"31999877792","index":"69"},{"balance":"31999877792","index":"70"},{"balance":"32000209997","index":"71"},{"balance":"31999877792","index":"72"},{"balance":"31999877792","index":"73"},{"balance":"32000209997","index":"74"},{"balance":"31999877792","index":"75"},{"balance":"31999877792","index":"76"},{"balance":"32000209997","index":"77"},{"balance":"31999877792","index":"78"},{"balance":"32000542202","index":"79"},{"balance":"31999877792","index":"80"},{"balance":"31999877792","index":"81"},{"balance":"31999877792","index":"82"},{"balance":"31999877792","index":"83"},{"balance":"31999877792","index":"84"},{"balance":"31999877792","index":"85"},{"balance":"31999877792","index":"86"},{"balance":"31999877792","index":"87"},{"balance":"31999305516","index":"88"},{"balance":"31999877792","index":"89"},{"balance":"31999877792","index":"90"},{"balance":"31999877792","index":"91"},{"balance":"32000542202","index":"92"},{"balance":"31999877792","index":"93"},{"balance":"31999877792","index":"94"},{"balance":"32000209997","index":"95"},{"balance":"31999877792","index":"96"},{"balance":"32000209997","index":"97"},{"balance":"32000209997","index":"98"},{"balance":"31999877792","index":"99"},{"balance":"31999877792","index":"100"},{"balance":"31999877792","index":"101"},{"balance":"31999877792","index":"102"},{"balance":"31999877792","index":"103"},{"balance":"31999877792","index":"104"},{"balance":"32000209997","index":"105"},{"balance":"31999877792","index":"106"},{"balance":"31999877792","index":"107"},{"balance":"31999877792","index":"108"},{"balance":"31999877792","index":"109"},{"balance":"31999877792","index":"110"},{"balance":"31999877792","index":"111"},{"balance":"32000209997","index":"112"},{"balance":"31999877792","index":"113"},{"balance":"31999877792","index":"114"},{"balance":"31999877792","index":"115"},{"balance":"32000209997","index":"116"},{"balance":"31999877792","index":"117"},{"balance":"31999877792","index":"118"},{"balance":"31999877792","index":"119"},{"balance":"31999877792","index":"120"},{"balance":"32000209997","index":"121"},{"balance":"32000209997","index":"122"},{"balance":"32000209997","index":"123"},{"balance":"32000209997","index":"124"},{"balance":"32000209997","index":"125"},{"balance":"32000209997","index":"126"},{"balance":"31999877792","index":"127"},{"balance":"32000209997","index":"128"},{"balance":"31999877792","index":"129"},{"balance":"32000209997","index":"130"},{"balance":"32000209997","index":"131"},{"balance":"31999877792","index":"132"},{"balance":"31999877792","index":"133"},{"balance":"31999877792","index":"134"},{"balance":"31999877792","index":"135"},{"balance":"31999877792","index":"136"},{"balance":"31999877792","index":"137"},{"balance":"31999877792","index":"138"},{"balance":"32000542202","index":"139"},{"balance":"32000209997","index":"140"},{"balance":"31999877792","index":"141"},{"balance":"31999877792","index":"142"},{"balance":"32000209997","index":"143"},{"balance":"32000209997","index":"144"},{"balance":"31999877792","index":"145"},{"balance":"31999877792","index":"146"},{"balance":"32000209997","index":"147"},{"balance":"31999877792","index":"148"},{"balance":"31999877792","index":"149"},{"balance":"32000209997","index":"150"},{"balance":"31999877792","index":"151"},{"balance":"31999877792","index":"152"},{"balance":"31999877792","index":"153"},{"balance":"31999877792","index":"154"},{"balance":"31999877792","index":"155"},{"balance":"32000209997","index":"156"},{"balance":"31999877792","index":"157"},{"balance":"31999877792","index":"158"},{"balance":"31999877792","index":"159"},{"balance":"32000542202","index":"160"},{"balance":"31999877792","index":"161"},{"balance":"31999877792","index":"162"},{"balance":"32000874407","index":"163"},{"balance":"31999877792","index":"164"},{"balance":"31999877792","index":"165"},{"balance":"31999877792","index":"166"},{"balance":"31999877792","index":"167"},{"balance":"32000209997","index":"168"},{"balance":"32000209997","index":"169"},{"balance":"31999877792","index":"170"},{"balance":"31999305516","index":"171"},{"balance":"31999877792","index":"172"},{"balance":"31999877792","index":"173"},{"balance":"31999877792","index":"174"},{"balance":"32000209997","index":"175"},{"balance":"31999877792","index":"176"},{"balance":"32000542202","index":"177"},{"balance":"31999877792","index":"178"},{"balance":"31999877792","index":"179"},{"balance":"31999877792","index":"180"},{"balance":"32000209997","index":"181"},{"balance":"31999877792","index":"182"},{"balance":"31999877792","index":"183"},{"balance":"32000209997","index":"184"},{"balance":"31999877792","index":"185"},{"balance":"31999877792","index":"186"},{"balance":"31999877792","index":"187"},{"balance":"31999877792","index":"188"},{"balance":"32000209997","index":"189"},{"balance":"31999877792","index":"190"},{"balance":"31999877792","index":"191"},{"balance":"31999877792","index":"192"},{"balance":"31999877792","index":"193"},{"balance":"31999877792","index":"194"},{"balance":"31999877792","index":"195"},{"balance":"32000209997","index":"196"},{"balance":"31999877792","index":"197"},{"balance":"31999877792","index":"198"},{"balance":"31999877792","index":"199"},{"balance":"32000209997","index":"200"},{"balance":"32000209997","index":"201"},{"balance":"31999877792","index":"202"},{"balance":"32000209997","index":"203"},{"balance":"32000874407","index":"204"},{"balance":"32000209997","index":"205"},{"balance":"32000209997","index":"206"},{"balance":"31999305516","index":"207"},{"balance":"31999877792","index":"208"},{"balance":"31999877792","index":"209"},{"balance":"32000209997","index":"210"},{"balance":"31999877792","index":"211"},{"balance":"32000209997","index":"212"},{"balance":"31999877792","index":"213"},{"balance":"32000209997","index":"214"},{"balance":"31999877792","index":"215"},{"balance":"32000209997","index":"216"},{"balance":"31999877792","index":"217"},{"balance":"31999877792","index":"218"},{"balance":"31999877792","index":"219"},{"balance":"31999877792","index":"220"},{"balance":"32000209997","index":"221"},{"balance":"31999877792","index":"222"},{"balance":"32000209997","index":"223"},{"balance":"31999969926","index":"224"},{"balance":"32000209997","index":"225"},{"balance":"31999877792","index":"226"},{"balance":"31999877792","index":"227"},{"balance":"31999877792","index":"228"},{"balance":"32000209997","index":"229"},{"balance":"32000209997","index":"230"},{"balance":"32000542202","index":"231"},{"balance":"31999877792","index":"232"},{"balance":"32000542202","index":"233"},{"balance":"32000542202","index":"234"},{"balance":"31999877792","index":"235"},{"balance":"31999877792","index":"236"},{"balance":"31999877792","index":"237"},{"balance":"31999877792","index":"238"},{"balance":"31999877792","index":"239"},{"balance":"31999877792","index":"240"},{"balance":"31999877792","index":"241"},{"balance":"32000542202","index":"242"},{"balance":"31999877792","index":"243"},{"balance":"31999877792","index":"244"},{"balance":"31999877792","index":"245"},{"balance":"31999877792","index":"246"},{"balance":"31999877792","index":"247"},{"balance":"31999877792","index":"248"},{"balance":"31999877792","index":"249"},{"balance":"31999877792","index":"250"},{"balance":"32000209997","index":"251"},{"balance":"31999877792","index":"252"},{"balance":"32000209997","index":"253"},{"balance":"32000209997","index":"254"},{"balance":"32000209997","index":"255"}],"execution_optimistic":false,"finalized":false} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/light_client_bootstrap_1.json b/cl/beacon/handler/test_data/light_client_bootstrap_1.json new file mode 100644 index 00000000000..0ee97fe1831 --- /dev/null +++ b/cl/beacon/handler/test_data/light_client_bootstrap_1.json @@ -0,0 +1 @@ +{"data":{"current_sync_committee":{"aggregate_public_key":"0xb7dad3c14f74e6e9f88d341983d8daf541d59f1dc7373eed42bb62e55948eb0bf0c34ebda79890b11746b45e2faa1dd5","committee":["0xb4bf4717ad2d3fce3a11a84dee1b38469be9e783b298b200cc533be97e474bf94d6c7c591d3102992f908820bc63ac72","0x969b4bcd84cabd5ba5f31705de51e2c4096402f832fdf543d88eb41ebb55f03a8715c1ceea92335d24febbea17a3bdd7","0x92c057502d4de4935cf8af77f21ca5791f646286aead82753a62dfb06dbd1705df506a02f19517accb44177cb469f3e4","0x90f3659630d58bd08e2e0131f76283cf9de7aa89e0102c67e79ca05c5c7217b213c05668f3de82939d8414d1674dc6a1","0x8c3999317e8c6753e3e89651e5ba7fdea91ab1dda46fdb6902eccd4035ba1618a178d1cd31f6fbbacc773255d72995b3","0x881f1a1ac6a56a47f041f49266d0a2e146c35e42bf87c22a9bc23a363526959e4d3d0c7e7382be091246787ef25e33d5","0x866f9ebe3afe58f2fd3234c4635a215c7982a53df4fb5396d9614a50308020b33618606a434984ca408963093b8f916d","0xa49f744d9bbfbcdd106592646040a3322fbe36e628be501a13f5272ad545a149f06f59bd417df9ae1a38d08c5a2108fe","0xa60d5589316a5e16e1d9bb03db45136afb9a3d6e97d350256129ee32a8e33396907dc44d2211762967d88d3e2840f71b","0xb48e56bd66650adb1e4f0c68b745f35f08d9829a06dbd5c67b2cc03dcf4cc5f9a85c84654f9596163b59d693eab14c34","0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","0x99fb4a03d71921b6a56f5e39f42f281b96ee017e859f738fab6fbc51edbcf3b02b1276336d1f82391e495723ecbe337e","0xa9761c83d922ced991557c9913bedfbe34509ec68d34a791242ac0f96e30f87e29a19099199a38aac29037e0c8e939c6","0xafad69e0702e02012b2419bdc7250c94816e40286a238e5f83858c7be2f93be2ec3657dd6cd0ded9184d6c9646092d3e","0xa29e520a73ec28f4e2e45050c93080eeaee57af1108e659d740897c3ced76ceb75d106cb00d7ed25ec221874bf4b235a","0x91d2fe0eded16c39a891ba065319dabfe2c0c300f5e5f5c84f31f6c52344084f0bb60d79650fc1dfe8d2a26fe34bd1fa","0x97063101e86c4e4fa689de9521bb79575ed727c5799cf69c17bfe325033200fcecca79a9ec9636b7d93e6d64f7275977","0xb194e855fa3d9ab53cbfbc97e7e0ce463723428bb1ad25952713eac04d086bf2407bdb78f8b8173f07aa795bd5e491dc","0xb271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4","0xa4e8f4a4f81f855f46512af8cdcbc9ae8a7eb395a75f135e5569b758a8d92349681a0358500f2d41f4578d3f7ffaa90f","0x876a46a1e38a8ae4fbad9cb9336baed2f740b01fabb784233ae2f84ffc972aefbfc5458e815491ab63b42fcb67f6b7cb","0x8e62874e15daea5eb362fa4aaad371d6280b6ca3d4d86dae9c6d0d663186a9475c1d865cf0f37c22cb9e916c00f92f71","0x95eacc3adc09c827593f581e8e2de068bf4cf5d0c0eb29e5372f0d23364788ee0f9beb112c8a7e9c2f0c720433705cf0","0xacebcdddf7ac509202f9db4efbc0da9172f57b3e468f9b6c116c6b134c906256630d44c38a19ec0e4b569c5001a5a04c","0xa7b9a71c54b44f6738a77f457af08dc79f09826193197a53c1c880f15963c716cec9ff0fd0bcb8ab41bc2fe89c2711fa","0xa984a361f4eb059c693e8405075a81469157811e78c317bb3ca189b16cd5c3b2a567c65d78560ef2ca95e108dc5a211e","0xa1cd4b34c72719c9d2707d45cd91a213541dd467f294f225e11571fd2e1cea6aac4b94b904ec9e153ed3ac350856ad97","0x86fef261cd5bccd56c72bba1bfcb512c7b45015283dbea7458d6a33ab1edfb992139cfb0afd7b05a2dfb327b6c8f94dc","0xb098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a","0x8c62ca6abda1a9af02d5c477d2bbf4c00900328f3f03c45f5e1e6bc69a5be2b7acc2532a923f19cb4d4ab43d0d2f42ec","0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","0xb0675bcee7652a66c92dc254157eef380726c396b1c2f5b4e1905fff912003b7e790f31fb5542df57f1f465e0915e7a0","0xb3d106c404056e440519d8a1e657f249d9aae11325796404bb048c1792a12f8addf7aa29c5822893c8cc408527793d6a","0xa0ec3e71a719a25208adc97106b122809210faf45a17db24f10ffb1ac014fac1ab95a4a1967e55b185d4df622685b9e8","0xb12d0c357016caa5c0ec0a6bdc07e60c2af4631c477366eeb6ab4fffbd0ca40ab9ec195091478a2698bf26349b785ae8","0xb4ff0075497094519c49b4b56687a1b8c84878e110dc7f2bd492608f3977dfdc538f1c8e3f8941552552af121eab9772","0x812b2d0546aa77dec2d55406b0131ed580c079c1aeb76eb2ca076b7b58289fa9d781069a2e11fe2199f1e02c5dd70e6a","0xae08c32bac1e3ec1e2250803b1781b8004efb2ad7f215e2fe8feb9f9ec5ec14157a9395f9f0e92060d18f4b73b33c0c3","0x815c0c9f90323633f00c1382199b8c8325d66fda9b93e7147f6dee80484c5fc4ef8b4b1ec6c64fab0e23f198beefa9ea","0xaa10e1055b14a89cc3261699524998732fddc4f30c76c1057eb83732a01416643eb015a932e4080c86f42e485973d240","0xab812b452a959fd9cbca07925045312f94e45eb1a7129b88ea701b2c23c70ae18a3c4a1e81389712c6c7d41e748b8c7d","0x80e8e7de168588f5ac5f3b9f2fabcadc0c4f50c764f6a4abf8231675fec11277d49e7357c3b5b681566e6a3d32b557e1","0xb3dc963ef53ae9b6d83ce417c5d417a9f6cc46beaa5fcf74dc59f190c6e9c513e1f57a124a0ef8b6836e4c8928125500","0x8ff7cc69f007f11481c91c6f9b20698998a0c2e9a2928bec8eea7507c7ad73a9d1d218cfdb279c4d2132d7da6c9e513e","0x8623144b531c2852fb755a4d8b4c9b303a026de6f99b1e88a1e91fa82bc10d6c7a9d8dad7926b6b7afd21ca4edb92408","0x84a3f285f8a8afc70b2c5b2c93e8ab82668def5e21601888fac3d2c0cdf947480c97089ba4ad04e786d4b771c8988c75","0xa7e53203bbed6adaa99c54f786622592dcaa4cd702e9aaaa355b8dcf302301f8b8dfec87625a9560079d3f8daf076c5d","0xb3f095233b798f4eb74be9d7d13b95800c9421875bc58f7bab4709840881fbfbe1eb133236eead9f469dde9603f06e46","0xb3c8a118a25b60416b4e6f9e0bc7cb4a520b22b1982f4d6ba47d3f484f0a98d000eed8f5019051847497f24fd9079a74","0x927e6e88fe7641155e68ff8328af706b5f152125206fe32aeab19432f17ec925ed6452489cf22bee1f563096cbd1dae6","0x9446407bcd8e5efe9f2ac0efbfa9e07d136e68b03c5ebc5bde43db3b94773de8605c30419eb2596513707e4e7448bb50","0x99b2f703619c4472a1039f532bf97f3771a870834f08d3b84fc914a75859fd0902725b40f1a6dabe7f901ac9c23f0842","0x8035a49b18a5e6223952e762185cc2f992f7eabdd1fbd9d0a7467605d65de6fe89ec90d778cb2835f4e2abe84fb67983","0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","0xa74fb46295a7ba2f570e09c4b8047a5833db7bf9fea68be8401bd455430418fe5485be0b41c49bd369f850dbfd991ce3","0x82681717d96c5d63a931c4ee8447ca0201c5951f516a876e78dcbc1689b9c4cf57a00a61c6fd0d92361a4b723c307e2d","0xb57520f5150ed646e8c26a01bf0bd15a324cc66fa8903f33fa26c3b4dd16b9a7c5118fdac9ee3eceba5ff2138cdce8f0","0xa222487021cdd811ed4410ad0c3006e8724dc489a426a0e17b4c76a8cd8f524cd0e63fac45dc8186c5ce1127162bec83","0xa6ba3250cd25bd8965d83a177ff93cf273980a7939160b6814a1d2f3cf3006c5a61b0d1c060aa48d33da7b24487eaf43","0xa8b15373c351e26e5dc5baba55cb2e1e014f839a7938764ee2def671bd7ac56c3f8b4c9c330f6ae77500d3f7118eb6e8","0x8f3f78ee37dbcbbc784fa2a75e047e02f8748af86365f3961cfc1b21055e552b46ec0377085da06914e0cffec0d3f0a4","0x997b2de22feea1fb11d265cedac9b02020c54ebf7cbc76ffdfe2dbfda93696e5f83af8d2c4ff54ce8ee987edbab19252","0x81ccc19e3b938ec2405099e90022a4218baa5082a3ca0974b24be0bc8b07e5fffaed64bef0d02c4dbfb6a307829afc5c","0x995b103d85d9e60f971e05c57b1acebf45bd6968b409906c9efea53ce4dc571aa4345e49c34b444b9ab6b62d13e6630b","0x99bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3","0xa64609779de550798ce1b718904bfd6f15e41dc56a14928ab1e6f43bba84d706f5ce39022a34e3fb2e113af695c52473","0x8a75c55208585181c6cef64a26b56d6a1b27ef47b69162b2538724575c2dff045ec54a9d321fe662735871b825c5aa3c","0x82de0e98b08925f379d1b2c40e30195f610841409ab3724ad3f2d173513e1d884c8b27aff402cd0353f79e61c7b4addb","0xafb72b4c111da98379f195da4e5c18462acc7ece85cd66894fbaf69ddab3d3bb0b6957ea0042b7705937919189e6a531","0xb58160d3dc5419cfa1f22e54e5135d4f24f9c66565da543a3845f7959660fa1d15c815b9c8ae1160dd32821a035640c0","0x89bdc5f82877823776a841cd8e93877c0e5e0b55adcebaafaf304d6460ab22d32bcd7e46e942ec4d8832eaa735b08923","0xb4aa2583a999066ec6caa72a3fc19e80d8936f6856d447dd043aa9b126aa63bcaac876266d80913071777984d8d30563","0xa762624bc58176cdfa2d8f83629b897bb26a2fad86feb50f1b41603db2db787b42429e3c045d7df8f7ea55c0582c9069","0xb8357a39c42f80953e8bc9908cb6b79c1a5c50ed3bbc0e330577a215ac850e601909fa5b53bed90c744e0355863eaa6e","0x9847ef9b7f43678bb536a27ab3aecee8cc3eedfe834e1214eaaeb00dc07bc20fd69af3319c043e62a29effd5ffb37e16","0xa7d10210c48f84d67a8af3f894062397b22cb48fa3f0936c039400638908f5e976d9783295aad8af9ac602f6bf3b10a7","0xa8e1bc8a6493fc7ed293f44c99b28d31561c4818984891e5817c92d270c9408241ceaca44ab079409d13cc0df9e2e187","0x98a3e7179e2ad305857bf326d2c4b3924af478b704a944a416f4bc40be691fa53793ae77dcfa409adaee4bced903dfb1","0x826a146c3580b547594469b248195c9003205f48d778e8344caff117b210b24351892c5b0ace399a3a66edebc24c180f","0x95cc6e3d4e3ec850b01b866ccec0e8093a72311bcc4c149377af66586471ca442d5f61ecbb8878352f0193ddea928805","0x925ef08813aa7d99fbb6cc9d045921a43bcf8c9721c437478afd3d81e662df84497da96ddbf663996503b433fd46af28","0x8b737f47d5b2794819b5dc01236895e684f1406f8b9f0d9aa06b5fb36dba6c185efec755b77d9424d09b848468127559","0x8988349654c5fdf666ec4647d398199cc609bb8b3d5108b9e5678b8d0c7563438f3fbcf9d30ab3ef5df22aad9dc673b2","0xaa44163d9f9776392ce5f29f1ecbcc177f8a91f28927f5890c672433b4a3c9b2a34830842d9396dc561348501e885afb","0x8fe55d12257709ae842f8594f9a0a40de3d38dabdf82b21a60baac927e52ed00c5fd42f4c905410eacdaf8f8a9952490","0xaed3e9f4bb4553952b687ba7bcac3a5324f0cceecc83458dcb45d73073fb20cef4f9f0c64558a527ec26bad9a42e6c4c","0x86d386aaf3dff5b9331ace79f6e24cff8759e7e002bbe9af91c6de91ab693f6477551e7ee0a1e675d0fc614814d8a8aa","0x8856c31a50097c2cc0c9a09f89e09912c83b9c7838b2c33d645e95d0f35130569a347abc4b03f0cb12a89397b899d078","0xa65a82f7b291d33e28dd59d614657ac5871c3c60d1fb89c41dd873e41c30e0a7bc8d57b91fe50a4c96490ebf5769cb6b","0x98536b398e5b7f1276f7cb426fba0ec2b8b0b64fba7785ea528bebed6ae56c0dee59f5d295fa4c97a1c621ecacfc4ec3","0x8d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a41495083582","0xa52cd15bb5cb9bdd7cef27b3644356318d0fa9331f9388edc12b204e2eb56face5604e4c3bb9631ef5bd438ff7821523","0x955bcc6bca53e7a6afa0e83c8443364e0e121f416d6024a442253d1e9d805407f2c7f7d9944770db370935e8722e5f51","0x95c38f73d6e65f67752ae3f382e8167d7d0d18ced0ca85a1d6b9ba5196f89cf9aed314a7d80b911806d5310584adc1b8","0x8e34d569ec169d15c9a0de70c15bf1a798ce9c36b30cca911ef17d6c183de72614575629475b57147f1c37602f25d76c","0xb0ea38f0b465ae0f0b019494aecd8a82cb7c496ecfab60af96d0bda1a52c29efd4d4e5b270f3d565eb3485b2aaf3d87c","0x90bc674d83e1b863fec40140a2827c942e575bd96bc5e60339c51089bab5fd445ae0c99ab9f1b5074b54682ac9c4a275","0x9417af4462cc8d542f6f6c479866f1c9fa4768069ef145f9acdd50221b8956b891ceec3ef4ec77c54006b00e38156cee","0xa0d79afac7df720f660881e20f49246f64543e1655a0ab9945030e14854b1dd988df308ed374fc6130586426c6cf16a4","0x899729f080571e25fee93538eb21304a10600d5ceb9807959d78c3967d9ba32b570d4f4105626e5972ccf2e24b723604","0xada7d351b72dcca4e46d7198e0a6fae51935f9d3363659be3dfaa5af8b1c033d4c52478f8b2fbf86f7318142f07af3a7","0xa72841987e4f219d54f2b6a9eac5fe6e78704644753c3579e776a3691bc123743f8c63770ed0f72a71e9e964dbf58f43","0xae6f240e7a9baa3e388eb3052c11d5b6ace127b87a7766970db3795b4bf5fc1de17a8ee8528d9bef0d6aefcfb67a7761","0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","0x95fa3538b8379ff2423656ab436df1632b74311aaef49bc9a3cbd70b1b01febaf2f869b4127d0e8e6d18d7d919f1f6d8","0x8025cdadf2afc5906b2602574a799f4089d90f36d73f94c1cf317cfc1a207c57f232bca6057924dd34cff5bde87f1930","0xa1402173873adf34e52c43feacd915eb141d77bf16bc5180e1ee86762b120411fffa7cb956cf0e625364e9a2d56f01f3","0x91887afbd7a83b8e9efb0111419c3d0197728d56ef96656432fbc51eb7ed736bb534dad59359629cf9c586461e251229","0x8e6ad45832f4ba45f5fe719022e6b869f61e1516d8835586b702764c474befe88591722045da41ab95aafbf0387ecd18","0x8a8409bd78ea4ff8d6e3e780ec93a3b017e639bbdaa5f399926e07ce2a939c8b478699496da2599b03a8fb62328cb1da","0x912b440c4d3c8177a012cea1cc58115cbc6795afc389363c7769bf419b9451bcde764586cf26c15e9906ea54837d031a","0xa82f4819a86b89c9cbd6d164e959fe0061e6a9b705862be2952d3cf642b515bd5edae4e6338e4eeb975a9082ff205bb7","0x8ab3f4fbbea07b771705f27bb470481ab6c44c46afcb317500df564b1177fa6dc7a3d27506b9e2d672ac1edd888a7a65","0x85ddb75efa05baaa727d659b09d268b606f81029796e106b55ff8d47fdb74a7d237286dfeadde6cc26d53d56204eff65","0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","0xb20c190dd46da9fe928d277ccfa0b804b942f5a181adb37fc1219e028fb7b48d63261248c6d939d68d4d8cd2c13a4f80","0xa20cca122e38a06188877a9f8f0ca9889f1dd3ffb22dddf76152604c72fc91519e414c973d4616b986ff64aec8a3208b","0xa1555b4e598691b619c576bad04f322fc6fe5898a53865d330097460e035e9d0e9169089a276f15f8977a39f27f9aec3","0x97e827da16cbd1da013b125a96b24770e0cad7e5af0ccd9fb75a60d8ba426891489d44497b091e1b0383f457f1b2251c","0x908ee03816f68a78d1da050c8ec125d3dac2306178d4f547d9c90bd58b3985a20f6fef507dcc81f010d70262d9abab68","0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","0x951f3707389db5012848b67ab77b63da2a73118b7df60f087fa9972d8f7fef33ed93e5f25268d4237c2987f032cd613f","0x8f021f52cbd6c46979619100350a397154df00cae2efe72b22ad0dd66747d7de4beecd9b194d0f7016e4df460a63a8ea","0xa272e9d1d50a4aea7d8f0583948090d0888be5777f2846800b8281139cd4aa9eee05f89b069857a3e77ccfaae1615f9c","0x8c7b0e11f9bc3f48d84013ef8e8575aeb764bc1b9bf15938d19eb191201011365c2b14d78139a0f27327cb21c1b8bf3d","0xab48aa2cc6f4a0bb63b5d67be54ac3aed10326dda304c5aeb9e942b40d6e7610478377680ab90e092ef1895e62786008","0x8515e7f61ca0470e165a44d247a23f17f24bf6e37185467bedb7981c1003ea70bbec875703f793dd8d11e56afa7f74ba","0x8f81b19ee2e4d4d0ff6384c63bacb785bc05c4fc22e6f553079cc4ff7e0270d458951533458a01d160b22d59a8bd9ab5","0xa6f68f09fc2b9df0ed7b58f213319dd050c11addaef31231853c01079fb225d0f8aa6860acd20bc1de87901f6103b95f","0x85ae0ef8d9ca996dbfebb49fa6ec7a1a95dff2d280b24f97c613b8e00b389e580f0f08aa5a9d5e4816a6532aaebc23bf","0xb88b54fe7990227c6d6baa95d668d2217626b088579ddb9773faf4e8f9386108c78ddd084a91e69e3bdb8a90456030c6","0xaa14e001d092db9dc99746fcfc22cd84a74adaa8fc483e6abf697bd8a93bda2ee9a075aca303f97f59615ed4e8709583","0x9717182463fbe215168e6762abcbb55c5c65290f2b5a2af616f8a6f50d625b46164178a11622d21913efdfa4b800648d","0xb2a3cedd685176071a98ab100494628c989d65e4578eec9c5919f2c0321c3fc3f573b71ef81a76501d88ed9ed6c68e13","0xb203b206005c6db2ecfab163e814bacb065872485d20ac2d65f982b4696617d12e30c169bf10dbe31d17bf04a7bdd3bc","0x8d08a52857017fd5cab3a821ccb8f5908c96cf63c5a5647209c037e2ea1c56f9650ec030b82ffdce76d37672d942e45b","0x84d1e4703d63ac280cd243c601def2b6cc0c72fb0a3de5e83149d3ac558c339f8b47a977b78fd6c9acf1f0033ae71a88","0x8e04ad5641cc0c949935785184c0b0237977e2282742bc0f81e58a7aa9bfee694027b60de0db0de0539a63d72fd57760","0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","0xa06d4f9703440b365bdce45e08442ec380165c5051c30e9df4d25571cba350ce5ab5e07810e1d1476c097a51d7734630","0x950c598dc627cd58cd7d34e0dd055daf92c9bc89235c3a5d3aacf594af97f99eb0f02a6f353238386626ee67462cd9a2","0x8e876b110d8ad35997a0d4044ca03e8693a1532497bcbbb8cdb1cd4ce68fe685eb03209b3d2833494c0e79c1c1a8c60b","0x803968608f3f1447912bb635f200ed5b0bc2f3ade2736bccb05a70c83c7df55602a2723f6b9740e528456eeba51ced64","0x931cdb87f226ad70ec6e0ff47e8420481d080e57951443ad804411a7b78dc2f2e99cbdf2463dda39d6be2ad95c0730e1","0x931bea4bc76fad23ba9c339622ddc0e7d28904a71353c715363aa9e038f64e990ef6ef76fc1fc431b9c73036dd07b86c","0x9929f70ba8c05847beb74c26dd03b4ec04ca8895bc6d9f31d70bd4231329c2f35799d4404a64f737e918db55eec72d25","0x93abf6639e499a3d83e3e2369882ac8dbe3e084e7e766d166121897497eabee495728365d9d7b9d9399a14831d186ff1","0xb29e53ff7b1595375136703600d24237b3d62877a5e8462fad67fc33cbde5bd7fcfac10dde01f50944b9f8309ad77751","0x95906ec0660892c205634e21ad540cbe0b6f7729d101d5c4639b864dea09be7f42a4252c675d46dd90a2661b3a94e8ca","0xafdb131642e23aedfd7625d0107954a451aecc9574faeeec8534c50c6156c51d3d0bdb8174372d91c560a0b7799b4e8e","0x97631345700c2eddaeb839fc39837b954f83753ef9fe1d637abcfc9076fcb9090e68da08e795f97cfe5ef569911969ec","0x8bcfb0520b9d093bc59151b69e510089759364625589e07b8ca0b4d761ce8e3516dbdce90b74b9b8d83d9395091b18bf","0xb54d0e0f7d368cd60bc3f47e527e59ef5161c446320da4ed80b7af04a96461b2e372d1a1edf8fe099e40bff514a530af","0x8fbdab59d6171f31107ff330af9f2c1a8078bb630abe379868670c61f8fa5f05a27c78f6a1fd80cde658417ef5d6a951","0x9718567efc4776425b17ac2450ae0c117fdf6e9eeeabb4ede117f86bee413b31b2c07cf82e38c6ecaf14001453ce29d0","0xb0c9351b9604478fb83646d16008d09cedf9600f57b0adbf62dd8ad4a59af0f71b80717666eeec697488996b71a5a51e","0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48","0x942d5ed35db7a30cac769b0349fec326953189b51be30b38189cd4bb4233cfe08ccc9abe5dd04bf691f60e5df533d98a","0xa4c90c14292dfd52d27d0e566bbfa92a2aebb0b4bcd33d246d8eeb44156c7f2fd42ba8afb8e32699724c365fc583e904","0xb29043a7273d0a2dbc2b747dcf6a5eccbd7ccb44b2d72e985537b117929bc3fd3a99001481327788ad040b4077c47c0d","0xb08d72a2c2656679f133a13661d9119ab3a586e17123c11ca17dc538d687576789d42ab7c81daa5af6506cc3bac9d089","0x98ff9389cf70ee9e0ae5df1474454ab5d7529cab72db2621e1b8b40b473168c59689a18838c950de286ea76dfdf9dc24","0x93b15273200e99dbbf91b24f87daa9079a023ccdf4debf84d2f9d0c2a1bf57d3b13591b62b1c513ec08ad20feb011875","0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","0x90239bd66450f4cc08a38402adc026444230fd893b752c7dfc4699539044a1fd39ba133cbdc330b7fc19538e224725cb","0x8ed36ed5fb9a1b099d84cba0686d8af9a2929a348797cd51c335cdcea1099e3d6f95126dfbc93abcfb3b56a7fc14477b","0x8215b57dd02553c973052c69b0fecefa813cc6f3420c9b2a1cffae5bd47e3a7a264eaec4ed77c21d1f2f01cf130423c0","0xa7a9bebe161505ba51f5fb812471f8fb8702a4c4ad2f23de1008985f93da644674edb2df1096920eaecb6c5b00de78cd","0x8fa4a674911c27c9306106ffcc797e156b27dab7a67ce7e301cfd73d979331f8edcd4d3397616dd2821b64e91b4d9247","0xb2277b279519ba0d28b17c7a32745d71ceb3a787e89e045fe84aaadf43a1d388336ec4c8096b17997f78d240ab067d07","0x8a3a08b7dae65f0e90a3bc589e13019340be199f092203c1f8d25ee9989378c5f89722430e12580f3be3e4b08ae04b1b","0x825abb120ae686f0e3c716b49f4086e92b0435413a137a31bcf992e4851ecdf9d74ceea3d6e063d7009ec8b8e504fb30","0xa8f5540a9977fd2ee7dea836ed3dafa5d0b1fc9c5d5f1689e91ec49cdef989976c51502c3764025ef8ff542ef3b170ea","0x87dc2da68d1641ffe8e6ca1b675767dc3303995c5e9e31564905c196e3109f11345b8877d28d116e8ae110e6a6a7c7a4","0x9725ff209f8243ab7aceda34f117b4c402e963cc2a3a85d890f6d6d3c0c96e0b0acbed787fe4fa7b37197c049ab307ea","0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","0xa69ec7c89252e2531c057ebeb86098e3b59ca01558afd5f6de4ec40370cb40de07856334770ecacbf23e123201266f67","0xb8ae7b57f57bf505dd2623a49017da70665f5b7f5ac74d45d51883aac06881467b5ef42964bd93ff0f3b904e8239e7b4","0x8aea7d8eb22063bcfe882e2b7efc0b3713e1a48dd8343bed523b1ab4546114be84d00f896d33c605d1f67456e8e2ed93","0xaf3dc44695d2a7f45dbe8b21939d5b4015ed1697131184ce19fc6bb8ff6bbc23882348b4c86278282dddf7d718e72e2b","0x96413b2d61a9fc6a545b40e5c2e0064c53418f491a25994f270af1b79c59d5cf21d2e8c58785a8df09e7265ac975cb28","0x8f207bd83dad262dd9de867748094f7141dade78704eca74a71fd9cfc9136b5278d934db83f4f3908d7a3de84d583fc9","0x86bdb0a034dab642e05cb3e441d67f60e0baf43fa1140e341f028a2c4b04f3f48a0cdc5ee1c7825dcdc4019b004ec073","0xb8f1a9edf68006f913b5377a0f37bed80efadc4d6bf9f1523e83b2311e14219c6aa0b8aaee79e47a9977e880bad37a8e","0xa3caedb9c2a5d8e922359ef69f9c35b8c819bcb081610343148dc3a2c50255c9caa6090f49f890ca31d853384fc80d00","0x851f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e","0xb614644e726aa24b10254dd0a639489211ec2f38a69966b5c39971069ea046b83ee17cf0e91da740e11e659c0c031215","0xa19dd710fbf120dbd2ce410c1abeb52c639d2c3be0ec285dc444d6edea01cee272988e051d5c9c37f06fea79b96ba57b","0xa2ca1572cca0b43a2652dd519063311003ca6eccab5e659fc4a39d2411608e12e28294973aae5be678da60b0c41ca5f0","0xb783a70a1cf9f53e7d2ddf386bea81a947e5360c5f1e0bf004fceedb2073e4dd180ef3d2d91bee7b1c5a88d1afd11c49","0xacb58c81ae0cae2e9d4d446b730922239923c345744eee58efaadb36e9a0925545b18a987acf0bad469035b291e37269","0xa9e1558a3ab00c369a1ce75b98f37fd753dbb1d5e86c4514858b1196dfd149aa7b818e084f22d1ad8d34eba29ce07788","0xa23cf58a430d6e52c8099ecee6756773c10183e1e3c6871eb74c7f8b933943a758872d061a961c9961f2e06b4c24f2c4","0x8b5b5399aefcd717d8fc97ea80b1f99d4137eb6fa67afd53762ee726876b6790f47850cf165901f1734487e4a2333b56","0x8e0b26637a9bc464c5a9ac490f6e673a0fb6279d7918c46a870307cf1f96109abf975d8453dc77273f9aba47c8eb68c2","0xb4d670b79d64e8a6b71e6be0c324ff0616ad1a49fbb287d7bf278ec5960a1192b02af89d04918d3344754fb3284b53a1","0x86de7221af8fd5bb4ee28dad543997cde0c5cd7fa5ec9ad2b92284e63e107154cc24bf41e25153a2a20bcae3add50542","0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","0xb422f8004e8e7c47cf4bc69c3a551b3491916e415b824c2d064204d55c465fb6839834a3f37d8a9271c75e5e2d1f3718","0x8a5898f52fe9b20f089d2aa31e9e0a3fe26c272ce087ffdfd3490d3f4fa1cacbec4879f5f7cd7708e241a658be5e4a2f","0x9294795d066f5e24d506f4b3aa7613b831399924cee51c160c92eb57aad864297d02bfda8694aafd0a24be6396eb022a","0xa339d48ea1916bad485abb8b6cbdcafdba851678bfe35163fa2572c84553386e6ee4345140eab46e9ddbffc59ded50d5","0xa325677c8eda841381e3ed9ea48689b344ed181c82937fa2651191686fd10b32885b869ce47ca09fbe8bd2dbcaa1c163","0x8fc502abb5d8bdd747f8faf599b0f62b1c41145d30ee3b6ff1e52f9370240758eac4fdb6d7fb45ed258a43edebf63e96","0x837d6c15c830728fc1de0e107ec3a88e8bbc0a9c442eb199a085e030b3bcdfb08e7155565506171fe838598b0429b9cc","0x8eb8b1b309a726fa5af6a6228385214a48788a1f23fe03cd46e16e200ed7d8909394d2e0b442ef71e519215765ca6625","0xa07d173f08193f50544b8f0d7e7826b0758a2bedfdd04dcee4537b610de9c647c6e40fdf089779f1ec7e16ca177c9c35","0x9780e853f8ce7eda772c6691d25e220ca1d2ab0db51a7824b700620f7ac94c06639e91c98bb6abd78128f0ec845df8ef","0x820c62fa9fe1ac9ba7e9b27573036e4e44e3b1c43723e9b950b7e28d7cf939923d74bec2ecd8dc2ade4bab4a3f573160","0x8353cad3430c0b22a8ec895547fc54ff5791382c4060f83c2314a4fcd82fb7e8e822a9e829bace6ec155db77c565bcb3","0xb91ab4aed4387ed938900552662885cdb648deaf73e6fca210df81c1703eb0a9cbed00cecf5ecf28337b4336830c30c8","0xb12332004f9ecc80d258fe5c7e6a0fba342b93890a5ea0ccda642e7b9d79f2d660be4b85d6ca744c48d07a1056bc376d","0x88eeb6e5e927aa49a4cd42a109705c50fa58ed3833a52a20506f56cc13428cbccb734784a648c56de15ef64b0772de71","0x83798f4dcc27c08dcd23315bee084a9821f39eed4c35ef45ba5079de93e7cf49633eea6d0f30b20c252c941f615f6ccb","0x8eb7dd3ccc06165c3862d4e32d7fd09a383e0226fa06909ddf4e693802fd5c4324407d86c32df1fdc4438853368db6ce","0xa98ae7e54d229bac164d3392cb4ab9deeb66108cd6871bd340cbc9170f29d4602a2c27682f9d2fa3ad8019e604b6016a","0x8345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c","0x8da7f6c67fb6018092a39f24db6ea661b1ead780c25c0de741db9ae0cfc023f06be36385de6a4785a47c9f92135ea37d","0x875a795a82ae224b00d4659eb1f6a3b024f686bfc8028b07bf92392b2311b945afc3d3ab346a1d4de2deac1b5f9c7e0d","0xabc2344dc831a4bc0e1ec920b5b0f774bd6465f70199b69675312c4993a3f3df50fe4f30693e32eb9c5f8e3a70e4e7c4","0xb8e551f550803ec5e67717c25f109673b79284e923c9b25558a65864e0d730aeaecab0ee24448226e5dd9da3070080a2","0xab83dfefb120fab7665a607d749ef1765fbb3cc0ba5827a20a135402c09d987c701ddb5b60f0f5495026817e8ab6ea2e","0x90c0c1f774e77d9fad044aa06009a15e33941477b4b9a79fa43f327608a0a54524b3fcef0a896cb0df790e9995b6ebf1","0xab23c89f138f4252fc3922e24b7254743af1259fa1aeae90e98315c664c50800cecfc72a4d45ee772f73c4bb22b8646f","0x865dfd7192acc296f26e74ae537cd8a54c28450f18d579ed752ad9e0c5dcb2862e160e52e87859d71f433a3d4f5ca393","0x82d333a47c24d4958e5b07be4abe85234c5ad1b685719a1f02131a612022ce0c726e58d52a53cf80b4a8afb21667dee1","0xb6ad11e5d15f77c1143b1697344911b9c590110fdd8dd09df2e58bfd757269169deefe8be3544d4e049fb3776fb0bcfb","0x8978bdb97d45647584b8b9971246421b2f93d9ac648b1ed6595ad8326f80c107344a2c85d1756cd2f56b748001d5fd30","0xb4e84be7005df300900c6f5f67cf288374e33c3f05c2f10b6d2ff754e92ea8577d55b91e22cea2782250a8bc7d2af46d","0xae5163dc807af48bc827d2fd86b7c37de5a364d0d504c2c29a1b0a243601016b21c0fda5d0a446b9cb2a333f0c08ab20","0xad297ab0ef5f34448ceffef73c7104791cacae92aed22df8def9034b0f111b2af4f4365259dccecb46a1208fd3354fcd","0x9081bebcd06b4976d992d98a499397a44da20650ad4a1e0fb15dc63db8744d60d70dff0c6e2c3bb43ee35d1940683d1b","0xb3b3c89c783ee18bc030384914fafb8608d54c370005c49085fe8de22df6e04828b082c2fe7b595bd884986d688345f5","0xa232213cdd2b3bbdf5f61e65d57e28ee988c2b48185c9ac59b7372bc05c5b5763e19086ceaefb597b8e2b21b30aaacde","0x8d8be92bde8af1b9df13d5a8ed8a3a01eab6ee4cf883d7987c1d78c0d7d9b53a8630541fddf5e324b6cf4900435b1df8","0xad84464b3966ec5bede84aa487facfca7823af383715078da03b387cc2f5d5597cdd7d025aa07db00a38b953bdeb6e3f","0x889586bc28e52a4510bc9e8f1e673835ff4f27732b3954b6b7cd371d10a453ba793cfdfacf4ce20ca819310e541198b5","0xb35220775df2432a8923a1e3e786869c78f1661ed4e16bd91b439105f549487fb84bbea0590124a1d7aa4e5b08a60143","0x911bb496153aa457e3302ea8e74427962c6eb57e97096f65cafe45a238f739b86d4b790debd5c7359f18f3642d7d774c","0x89db41a6183c2fe47cf54d1e00c3cfaae53df634a32cccd5cf0c0a73e95ee0450fc3d060bb6878780fbf5f30d9e29aac","0x8774d1d544c4cc583fb649d0bbba86c2d2b5abb4c0395d7d1dac08ab1a2cc795030bdbdce6e3213154d4f2c748ccdaef","0xa1dbd288ae846edbfba77f7342faf45bdc0c5d5ce8483877acce6d00e09ef49d30fb40d4764d6637658d5ac738e0e197","0xb74c0f5b4125900f20e11e4719f69bac8d9be792e6901800d93f7f49733bc42bfb047220c531373a224f5564b6e6ecbb","0xa73eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086","0x80fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a55","0x913e4eec6be4605946086d38f531d68fe6f4669777c2d066eff79b72a4616ad1538aae7b74066575669d7ce065a7f47d","0x97363100f195df58c141aa327440a105abe321f4ebc6aea2d5f56c1fb7732ebfa5402349f6da72a6182c6bbedaeb8567","0x8c8b694b04d98a749a0763c72fc020ef61b2bb3f63ebb182cb2e568f6a8b9ca3ae013ae78317599e7e7ba2a528ec754a","0xaf048ba47a86a6d110fc8e7723a99d69961112612f140062cca193d3fc937cf5148671a78b6caa9f43a5cf239c3db230","0x92e5cd122e484c8480c430738091f23f30773477d9850c3026824f1f58c75cf20365d950607e159717864c0760432edb","0xab03beff9e24a04f469555b1bc6af53aa8c49c27b97878ff3b4fbf5e9795072f4d2b928bff4abbbd72d9aa272d1f100e","0x9252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada","0x84614d2ae5bc594a0c639bed6b6a1dc15d608010848b475d389d43001346ed5f511da983cc5df62b6e49c32c0ef5b24c","0xa99987ba6c0eb0fd4fbd5020a2db501128eb9d6a9a173e74462571985403f33959fc2f526b9a424d6915a77910939fc3","0x87109a988e34933e29c2623b4e604d23195b0346a76f92d51c074f07ce322de8e1bef1993477777c0eb9a9e95c16785f","0x8e7cb413850ecb6f1d2ded9851e382d945a8fee01f8f55184c7b0817000073944c6b6c77164e0a2272c39410fde18e58","0xb4bf4717ad2d3fce3a11a84dee1b38469be9e783b298b200cc533be97e474bf94d6c7c591d3102992f908820bc63ac72","0x969b4bcd84cabd5ba5f31705de51e2c4096402f832fdf543d88eb41ebb55f03a8715c1ceea92335d24febbea17a3bdd7","0x92c057502d4de4935cf8af77f21ca5791f646286aead82753a62dfb06dbd1705df506a02f19517accb44177cb469f3e4","0x90f3659630d58bd08e2e0131f76283cf9de7aa89e0102c67e79ca05c5c7217b213c05668f3de82939d8414d1674dc6a1","0x8c3999317e8c6753e3e89651e5ba7fdea91ab1dda46fdb6902eccd4035ba1618a178d1cd31f6fbbacc773255d72995b3","0x881f1a1ac6a56a47f041f49266d0a2e146c35e42bf87c22a9bc23a363526959e4d3d0c7e7382be091246787ef25e33d5","0x866f9ebe3afe58f2fd3234c4635a215c7982a53df4fb5396d9614a50308020b33618606a434984ca408963093b8f916d","0xa49f744d9bbfbcdd106592646040a3322fbe36e628be501a13f5272ad545a149f06f59bd417df9ae1a38d08c5a2108fe","0xa60d5589316a5e16e1d9bb03db45136afb9a3d6e97d350256129ee32a8e33396907dc44d2211762967d88d3e2840f71b","0xb48e56bd66650adb1e4f0c68b745f35f08d9829a06dbd5c67b2cc03dcf4cc5f9a85c84654f9596163b59d693eab14c34","0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","0x99fb4a03d71921b6a56f5e39f42f281b96ee017e859f738fab6fbc51edbcf3b02b1276336d1f82391e495723ecbe337e","0xa9761c83d922ced991557c9913bedfbe34509ec68d34a791242ac0f96e30f87e29a19099199a38aac29037e0c8e939c6","0xafad69e0702e02012b2419bdc7250c94816e40286a238e5f83858c7be2f93be2ec3657dd6cd0ded9184d6c9646092d3e","0xa29e520a73ec28f4e2e45050c93080eeaee57af1108e659d740897c3ced76ceb75d106cb00d7ed25ec221874bf4b235a","0x91d2fe0eded16c39a891ba065319dabfe2c0c300f5e5f5c84f31f6c52344084f0bb60d79650fc1dfe8d2a26fe34bd1fa","0x97063101e86c4e4fa689de9521bb79575ed727c5799cf69c17bfe325033200fcecca79a9ec9636b7d93e6d64f7275977","0xb194e855fa3d9ab53cbfbc97e7e0ce463723428bb1ad25952713eac04d086bf2407bdb78f8b8173f07aa795bd5e491dc","0xb271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4","0xa4e8f4a4f81f855f46512af8cdcbc9ae8a7eb395a75f135e5569b758a8d92349681a0358500f2d41f4578d3f7ffaa90f","0x876a46a1e38a8ae4fbad9cb9336baed2f740b01fabb784233ae2f84ffc972aefbfc5458e815491ab63b42fcb67f6b7cb","0x8e62874e15daea5eb362fa4aaad371d6280b6ca3d4d86dae9c6d0d663186a9475c1d865cf0f37c22cb9e916c00f92f71","0x95eacc3adc09c827593f581e8e2de068bf4cf5d0c0eb29e5372f0d23364788ee0f9beb112c8a7e9c2f0c720433705cf0","0xacebcdddf7ac509202f9db4efbc0da9172f57b3e468f9b6c116c6b134c906256630d44c38a19ec0e4b569c5001a5a04c","0xa7b9a71c54b44f6738a77f457af08dc79f09826193197a53c1c880f15963c716cec9ff0fd0bcb8ab41bc2fe89c2711fa","0xa984a361f4eb059c693e8405075a81469157811e78c317bb3ca189b16cd5c3b2a567c65d78560ef2ca95e108dc5a211e","0xa1cd4b34c72719c9d2707d45cd91a213541dd467f294f225e11571fd2e1cea6aac4b94b904ec9e153ed3ac350856ad97","0x86fef261cd5bccd56c72bba1bfcb512c7b45015283dbea7458d6a33ab1edfb992139cfb0afd7b05a2dfb327b6c8f94dc","0xb098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a","0x8c62ca6abda1a9af02d5c477d2bbf4c00900328f3f03c45f5e1e6bc69a5be2b7acc2532a923f19cb4d4ab43d0d2f42ec","0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","0xb0675bcee7652a66c92dc254157eef380726c396b1c2f5b4e1905fff912003b7e790f31fb5542df57f1f465e0915e7a0","0xb3d106c404056e440519d8a1e657f249d9aae11325796404bb048c1792a12f8addf7aa29c5822893c8cc408527793d6a","0xa0ec3e71a719a25208adc97106b122809210faf45a17db24f10ffb1ac014fac1ab95a4a1967e55b185d4df622685b9e8","0xb12d0c357016caa5c0ec0a6bdc07e60c2af4631c477366eeb6ab4fffbd0ca40ab9ec195091478a2698bf26349b785ae8","0xb4ff0075497094519c49b4b56687a1b8c84878e110dc7f2bd492608f3977dfdc538f1c8e3f8941552552af121eab9772","0x812b2d0546aa77dec2d55406b0131ed580c079c1aeb76eb2ca076b7b58289fa9d781069a2e11fe2199f1e02c5dd70e6a","0xae08c32bac1e3ec1e2250803b1781b8004efb2ad7f215e2fe8feb9f9ec5ec14157a9395f9f0e92060d18f4b73b33c0c3","0x815c0c9f90323633f00c1382199b8c8325d66fda9b93e7147f6dee80484c5fc4ef8b4b1ec6c64fab0e23f198beefa9ea","0xaa10e1055b14a89cc3261699524998732fddc4f30c76c1057eb83732a01416643eb015a932e4080c86f42e485973d240","0xab812b452a959fd9cbca07925045312f94e45eb1a7129b88ea701b2c23c70ae18a3c4a1e81389712c6c7d41e748b8c7d","0x80e8e7de168588f5ac5f3b9f2fabcadc0c4f50c764f6a4abf8231675fec11277d49e7357c3b5b681566e6a3d32b557e1","0xb3dc963ef53ae9b6d83ce417c5d417a9f6cc46beaa5fcf74dc59f190c6e9c513e1f57a124a0ef8b6836e4c8928125500","0x8ff7cc69f007f11481c91c6f9b20698998a0c2e9a2928bec8eea7507c7ad73a9d1d218cfdb279c4d2132d7da6c9e513e","0x8623144b531c2852fb755a4d8b4c9b303a026de6f99b1e88a1e91fa82bc10d6c7a9d8dad7926b6b7afd21ca4edb92408","0x84a3f285f8a8afc70b2c5b2c93e8ab82668def5e21601888fac3d2c0cdf947480c97089ba4ad04e786d4b771c8988c75","0xa7e53203bbed6adaa99c54f786622592dcaa4cd702e9aaaa355b8dcf302301f8b8dfec87625a9560079d3f8daf076c5d","0xb3f095233b798f4eb74be9d7d13b95800c9421875bc58f7bab4709840881fbfbe1eb133236eead9f469dde9603f06e46","0xb3c8a118a25b60416b4e6f9e0bc7cb4a520b22b1982f4d6ba47d3f484f0a98d000eed8f5019051847497f24fd9079a74","0x927e6e88fe7641155e68ff8328af706b5f152125206fe32aeab19432f17ec925ed6452489cf22bee1f563096cbd1dae6","0x9446407bcd8e5efe9f2ac0efbfa9e07d136e68b03c5ebc5bde43db3b94773de8605c30419eb2596513707e4e7448bb50","0x99b2f703619c4472a1039f532bf97f3771a870834f08d3b84fc914a75859fd0902725b40f1a6dabe7f901ac9c23f0842","0x8035a49b18a5e6223952e762185cc2f992f7eabdd1fbd9d0a7467605d65de6fe89ec90d778cb2835f4e2abe84fb67983","0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","0xa74fb46295a7ba2f570e09c4b8047a5833db7bf9fea68be8401bd455430418fe5485be0b41c49bd369f850dbfd991ce3","0x82681717d96c5d63a931c4ee8447ca0201c5951f516a876e78dcbc1689b9c4cf57a00a61c6fd0d92361a4b723c307e2d","0xb57520f5150ed646e8c26a01bf0bd15a324cc66fa8903f33fa26c3b4dd16b9a7c5118fdac9ee3eceba5ff2138cdce8f0","0xa222487021cdd811ed4410ad0c3006e8724dc489a426a0e17b4c76a8cd8f524cd0e63fac45dc8186c5ce1127162bec83","0xa6ba3250cd25bd8965d83a177ff93cf273980a7939160b6814a1d2f3cf3006c5a61b0d1c060aa48d33da7b24487eaf43","0xa8b15373c351e26e5dc5baba55cb2e1e014f839a7938764ee2def671bd7ac56c3f8b4c9c330f6ae77500d3f7118eb6e8","0x8f3f78ee37dbcbbc784fa2a75e047e02f8748af86365f3961cfc1b21055e552b46ec0377085da06914e0cffec0d3f0a4","0x997b2de22feea1fb11d265cedac9b02020c54ebf7cbc76ffdfe2dbfda93696e5f83af8d2c4ff54ce8ee987edbab19252","0x81ccc19e3b938ec2405099e90022a4218baa5082a3ca0974b24be0bc8b07e5fffaed64bef0d02c4dbfb6a307829afc5c","0x995b103d85d9e60f971e05c57b1acebf45bd6968b409906c9efea53ce4dc571aa4345e49c34b444b9ab6b62d13e6630b","0x99bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3","0xa64609779de550798ce1b718904bfd6f15e41dc56a14928ab1e6f43bba84d706f5ce39022a34e3fb2e113af695c52473","0x8a75c55208585181c6cef64a26b56d6a1b27ef47b69162b2538724575c2dff045ec54a9d321fe662735871b825c5aa3c","0x82de0e98b08925f379d1b2c40e30195f610841409ab3724ad3f2d173513e1d884c8b27aff402cd0353f79e61c7b4addb","0xafb72b4c111da98379f195da4e5c18462acc7ece85cd66894fbaf69ddab3d3bb0b6957ea0042b7705937919189e6a531","0xb58160d3dc5419cfa1f22e54e5135d4f24f9c66565da543a3845f7959660fa1d15c815b9c8ae1160dd32821a035640c0","0x89bdc5f82877823776a841cd8e93877c0e5e0b55adcebaafaf304d6460ab22d32bcd7e46e942ec4d8832eaa735b08923","0xb4aa2583a999066ec6caa72a3fc19e80d8936f6856d447dd043aa9b126aa63bcaac876266d80913071777984d8d30563","0xa762624bc58176cdfa2d8f83629b897bb26a2fad86feb50f1b41603db2db787b42429e3c045d7df8f7ea55c0582c9069","0xb8357a39c42f80953e8bc9908cb6b79c1a5c50ed3bbc0e330577a215ac850e601909fa5b53bed90c744e0355863eaa6e","0x9847ef9b7f43678bb536a27ab3aecee8cc3eedfe834e1214eaaeb00dc07bc20fd69af3319c043e62a29effd5ffb37e16","0xa7d10210c48f84d67a8af3f894062397b22cb48fa3f0936c039400638908f5e976d9783295aad8af9ac602f6bf3b10a7","0xa8e1bc8a6493fc7ed293f44c99b28d31561c4818984891e5817c92d270c9408241ceaca44ab079409d13cc0df9e2e187","0x98a3e7179e2ad305857bf326d2c4b3924af478b704a944a416f4bc40be691fa53793ae77dcfa409adaee4bced903dfb1","0x826a146c3580b547594469b248195c9003205f48d778e8344caff117b210b24351892c5b0ace399a3a66edebc24c180f","0x95cc6e3d4e3ec850b01b866ccec0e8093a72311bcc4c149377af66586471ca442d5f61ecbb8878352f0193ddea928805","0x925ef08813aa7d99fbb6cc9d045921a43bcf8c9721c437478afd3d81e662df84497da96ddbf663996503b433fd46af28","0x8b737f47d5b2794819b5dc01236895e684f1406f8b9f0d9aa06b5fb36dba6c185efec755b77d9424d09b848468127559","0x8988349654c5fdf666ec4647d398199cc609bb8b3d5108b9e5678b8d0c7563438f3fbcf9d30ab3ef5df22aad9dc673b2","0xaa44163d9f9776392ce5f29f1ecbcc177f8a91f28927f5890c672433b4a3c9b2a34830842d9396dc561348501e885afb","0x8fe55d12257709ae842f8594f9a0a40de3d38dabdf82b21a60baac927e52ed00c5fd42f4c905410eacdaf8f8a9952490","0xaed3e9f4bb4553952b687ba7bcac3a5324f0cceecc83458dcb45d73073fb20cef4f9f0c64558a527ec26bad9a42e6c4c","0x86d386aaf3dff5b9331ace79f6e24cff8759e7e002bbe9af91c6de91ab693f6477551e7ee0a1e675d0fc614814d8a8aa","0x8856c31a50097c2cc0c9a09f89e09912c83b9c7838b2c33d645e95d0f35130569a347abc4b03f0cb12a89397b899d078","0xa65a82f7b291d33e28dd59d614657ac5871c3c60d1fb89c41dd873e41c30e0a7bc8d57b91fe50a4c96490ebf5769cb6b","0x98536b398e5b7f1276f7cb426fba0ec2b8b0b64fba7785ea528bebed6ae56c0dee59f5d295fa4c97a1c621ecacfc4ec3","0x8d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a41495083582","0xa52cd15bb5cb9bdd7cef27b3644356318d0fa9331f9388edc12b204e2eb56face5604e4c3bb9631ef5bd438ff7821523","0x955bcc6bca53e7a6afa0e83c8443364e0e121f416d6024a442253d1e9d805407f2c7f7d9944770db370935e8722e5f51","0x95c38f73d6e65f67752ae3f382e8167d7d0d18ced0ca85a1d6b9ba5196f89cf9aed314a7d80b911806d5310584adc1b8","0x8e34d569ec169d15c9a0de70c15bf1a798ce9c36b30cca911ef17d6c183de72614575629475b57147f1c37602f25d76c","0xb0ea38f0b465ae0f0b019494aecd8a82cb7c496ecfab60af96d0bda1a52c29efd4d4e5b270f3d565eb3485b2aaf3d87c","0x90bc674d83e1b863fec40140a2827c942e575bd96bc5e60339c51089bab5fd445ae0c99ab9f1b5074b54682ac9c4a275","0x9417af4462cc8d542f6f6c479866f1c9fa4768069ef145f9acdd50221b8956b891ceec3ef4ec77c54006b00e38156cee","0xa0d79afac7df720f660881e20f49246f64543e1655a0ab9945030e14854b1dd988df308ed374fc6130586426c6cf16a4","0x899729f080571e25fee93538eb21304a10600d5ceb9807959d78c3967d9ba32b570d4f4105626e5972ccf2e24b723604","0xada7d351b72dcca4e46d7198e0a6fae51935f9d3363659be3dfaa5af8b1c033d4c52478f8b2fbf86f7318142f07af3a7","0xa72841987e4f219d54f2b6a9eac5fe6e78704644753c3579e776a3691bc123743f8c63770ed0f72a71e9e964dbf58f43","0xae6f240e7a9baa3e388eb3052c11d5b6ace127b87a7766970db3795b4bf5fc1de17a8ee8528d9bef0d6aefcfb67a7761","0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","0x95fa3538b8379ff2423656ab436df1632b74311aaef49bc9a3cbd70b1b01febaf2f869b4127d0e8e6d18d7d919f1f6d8","0x8025cdadf2afc5906b2602574a799f4089d90f36d73f94c1cf317cfc1a207c57f232bca6057924dd34cff5bde87f1930","0xa1402173873adf34e52c43feacd915eb141d77bf16bc5180e1ee86762b120411fffa7cb956cf0e625364e9a2d56f01f3","0x91887afbd7a83b8e9efb0111419c3d0197728d56ef96656432fbc51eb7ed736bb534dad59359629cf9c586461e251229","0x8e6ad45832f4ba45f5fe719022e6b869f61e1516d8835586b702764c474befe88591722045da41ab95aafbf0387ecd18","0x8a8409bd78ea4ff8d6e3e780ec93a3b017e639bbdaa5f399926e07ce2a939c8b478699496da2599b03a8fb62328cb1da","0x912b440c4d3c8177a012cea1cc58115cbc6795afc389363c7769bf419b9451bcde764586cf26c15e9906ea54837d031a","0xa82f4819a86b89c9cbd6d164e959fe0061e6a9b705862be2952d3cf642b515bd5edae4e6338e4eeb975a9082ff205bb7","0x8ab3f4fbbea07b771705f27bb470481ab6c44c46afcb317500df564b1177fa6dc7a3d27506b9e2d672ac1edd888a7a65","0x85ddb75efa05baaa727d659b09d268b606f81029796e106b55ff8d47fdb74a7d237286dfeadde6cc26d53d56204eff65","0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","0xb20c190dd46da9fe928d277ccfa0b804b942f5a181adb37fc1219e028fb7b48d63261248c6d939d68d4d8cd2c13a4f80","0xa20cca122e38a06188877a9f8f0ca9889f1dd3ffb22dddf76152604c72fc91519e414c973d4616b986ff64aec8a3208b","0xa1555b4e598691b619c576bad04f322fc6fe5898a53865d330097460e035e9d0e9169089a276f15f8977a39f27f9aec3","0x97e827da16cbd1da013b125a96b24770e0cad7e5af0ccd9fb75a60d8ba426891489d44497b091e1b0383f457f1b2251c","0x908ee03816f68a78d1da050c8ec125d3dac2306178d4f547d9c90bd58b3985a20f6fef507dcc81f010d70262d9abab68","0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","0x951f3707389db5012848b67ab77b63da2a73118b7df60f087fa9972d8f7fef33ed93e5f25268d4237c2987f032cd613f","0x8f021f52cbd6c46979619100350a397154df00cae2efe72b22ad0dd66747d7de4beecd9b194d0f7016e4df460a63a8ea","0xa272e9d1d50a4aea7d8f0583948090d0888be5777f2846800b8281139cd4aa9eee05f89b069857a3e77ccfaae1615f9c","0x8c7b0e11f9bc3f48d84013ef8e8575aeb764bc1b9bf15938d19eb191201011365c2b14d78139a0f27327cb21c1b8bf3d","0xab48aa2cc6f4a0bb63b5d67be54ac3aed10326dda304c5aeb9e942b40d6e7610478377680ab90e092ef1895e62786008","0x8515e7f61ca0470e165a44d247a23f17f24bf6e37185467bedb7981c1003ea70bbec875703f793dd8d11e56afa7f74ba","0x8f81b19ee2e4d4d0ff6384c63bacb785bc05c4fc22e6f553079cc4ff7e0270d458951533458a01d160b22d59a8bd9ab5","0xa6f68f09fc2b9df0ed7b58f213319dd050c11addaef31231853c01079fb225d0f8aa6860acd20bc1de87901f6103b95f","0x85ae0ef8d9ca996dbfebb49fa6ec7a1a95dff2d280b24f97c613b8e00b389e580f0f08aa5a9d5e4816a6532aaebc23bf","0xb88b54fe7990227c6d6baa95d668d2217626b088579ddb9773faf4e8f9386108c78ddd084a91e69e3bdb8a90456030c6","0xaa14e001d092db9dc99746fcfc22cd84a74adaa8fc483e6abf697bd8a93bda2ee9a075aca303f97f59615ed4e8709583","0x9717182463fbe215168e6762abcbb55c5c65290f2b5a2af616f8a6f50d625b46164178a11622d21913efdfa4b800648d","0xb2a3cedd685176071a98ab100494628c989d65e4578eec9c5919f2c0321c3fc3f573b71ef81a76501d88ed9ed6c68e13","0xb203b206005c6db2ecfab163e814bacb065872485d20ac2d65f982b4696617d12e30c169bf10dbe31d17bf04a7bdd3bc","0x8d08a52857017fd5cab3a821ccb8f5908c96cf63c5a5647209c037e2ea1c56f9650ec030b82ffdce76d37672d942e45b","0x84d1e4703d63ac280cd243c601def2b6cc0c72fb0a3de5e83149d3ac558c339f8b47a977b78fd6c9acf1f0033ae71a88","0x8e04ad5641cc0c949935785184c0b0237977e2282742bc0f81e58a7aa9bfee694027b60de0db0de0539a63d72fd57760","0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","0xa06d4f9703440b365bdce45e08442ec380165c5051c30e9df4d25571cba350ce5ab5e07810e1d1476c097a51d7734630","0x950c598dc627cd58cd7d34e0dd055daf92c9bc89235c3a5d3aacf594af97f99eb0f02a6f353238386626ee67462cd9a2","0x8e876b110d8ad35997a0d4044ca03e8693a1532497bcbbb8cdb1cd4ce68fe685eb03209b3d2833494c0e79c1c1a8c60b","0x803968608f3f1447912bb635f200ed5b0bc2f3ade2736bccb05a70c83c7df55602a2723f6b9740e528456eeba51ced64","0x931cdb87f226ad70ec6e0ff47e8420481d080e57951443ad804411a7b78dc2f2e99cbdf2463dda39d6be2ad95c0730e1","0x931bea4bc76fad23ba9c339622ddc0e7d28904a71353c715363aa9e038f64e990ef6ef76fc1fc431b9c73036dd07b86c","0x9929f70ba8c05847beb74c26dd03b4ec04ca8895bc6d9f31d70bd4231329c2f35799d4404a64f737e918db55eec72d25","0x93abf6639e499a3d83e3e2369882ac8dbe3e084e7e766d166121897497eabee495728365d9d7b9d9399a14831d186ff1","0xb29e53ff7b1595375136703600d24237b3d62877a5e8462fad67fc33cbde5bd7fcfac10dde01f50944b9f8309ad77751","0x95906ec0660892c205634e21ad540cbe0b6f7729d101d5c4639b864dea09be7f42a4252c675d46dd90a2661b3a94e8ca","0xafdb131642e23aedfd7625d0107954a451aecc9574faeeec8534c50c6156c51d3d0bdb8174372d91c560a0b7799b4e8e","0x97631345700c2eddaeb839fc39837b954f83753ef9fe1d637abcfc9076fcb9090e68da08e795f97cfe5ef569911969ec","0x8bcfb0520b9d093bc59151b69e510089759364625589e07b8ca0b4d761ce8e3516dbdce90b74b9b8d83d9395091b18bf","0xb54d0e0f7d368cd60bc3f47e527e59ef5161c446320da4ed80b7af04a96461b2e372d1a1edf8fe099e40bff514a530af","0x8fbdab59d6171f31107ff330af9f2c1a8078bb630abe379868670c61f8fa5f05a27c78f6a1fd80cde658417ef5d6a951","0x9718567efc4776425b17ac2450ae0c117fdf6e9eeeabb4ede117f86bee413b31b2c07cf82e38c6ecaf14001453ce29d0","0xb0c9351b9604478fb83646d16008d09cedf9600f57b0adbf62dd8ad4a59af0f71b80717666eeec697488996b71a5a51e","0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48","0x942d5ed35db7a30cac769b0349fec326953189b51be30b38189cd4bb4233cfe08ccc9abe5dd04bf691f60e5df533d98a","0xa4c90c14292dfd52d27d0e566bbfa92a2aebb0b4bcd33d246d8eeb44156c7f2fd42ba8afb8e32699724c365fc583e904","0xb29043a7273d0a2dbc2b747dcf6a5eccbd7ccb44b2d72e985537b117929bc3fd3a99001481327788ad040b4077c47c0d","0xb08d72a2c2656679f133a13661d9119ab3a586e17123c11ca17dc538d687576789d42ab7c81daa5af6506cc3bac9d089","0x98ff9389cf70ee9e0ae5df1474454ab5d7529cab72db2621e1b8b40b473168c59689a18838c950de286ea76dfdf9dc24","0x93b15273200e99dbbf91b24f87daa9079a023ccdf4debf84d2f9d0c2a1bf57d3b13591b62b1c513ec08ad20feb011875","0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","0x90239bd66450f4cc08a38402adc026444230fd893b752c7dfc4699539044a1fd39ba133cbdc330b7fc19538e224725cb","0x8ed36ed5fb9a1b099d84cba0686d8af9a2929a348797cd51c335cdcea1099e3d6f95126dfbc93abcfb3b56a7fc14477b","0x8215b57dd02553c973052c69b0fecefa813cc6f3420c9b2a1cffae5bd47e3a7a264eaec4ed77c21d1f2f01cf130423c0","0xa7a9bebe161505ba51f5fb812471f8fb8702a4c4ad2f23de1008985f93da644674edb2df1096920eaecb6c5b00de78cd","0x8fa4a674911c27c9306106ffcc797e156b27dab7a67ce7e301cfd73d979331f8edcd4d3397616dd2821b64e91b4d9247","0xb2277b279519ba0d28b17c7a32745d71ceb3a787e89e045fe84aaadf43a1d388336ec4c8096b17997f78d240ab067d07","0x8a3a08b7dae65f0e90a3bc589e13019340be199f092203c1f8d25ee9989378c5f89722430e12580f3be3e4b08ae04b1b","0x825abb120ae686f0e3c716b49f4086e92b0435413a137a31bcf992e4851ecdf9d74ceea3d6e063d7009ec8b8e504fb30","0xa8f5540a9977fd2ee7dea836ed3dafa5d0b1fc9c5d5f1689e91ec49cdef989976c51502c3764025ef8ff542ef3b170ea","0x87dc2da68d1641ffe8e6ca1b675767dc3303995c5e9e31564905c196e3109f11345b8877d28d116e8ae110e6a6a7c7a4","0x9725ff209f8243ab7aceda34f117b4c402e963cc2a3a85d890f6d6d3c0c96e0b0acbed787fe4fa7b37197c049ab307ea","0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","0xa69ec7c89252e2531c057ebeb86098e3b59ca01558afd5f6de4ec40370cb40de07856334770ecacbf23e123201266f67","0xb8ae7b57f57bf505dd2623a49017da70665f5b7f5ac74d45d51883aac06881467b5ef42964bd93ff0f3b904e8239e7b4","0x8aea7d8eb22063bcfe882e2b7efc0b3713e1a48dd8343bed523b1ab4546114be84d00f896d33c605d1f67456e8e2ed93","0xaf3dc44695d2a7f45dbe8b21939d5b4015ed1697131184ce19fc6bb8ff6bbc23882348b4c86278282dddf7d718e72e2b","0x96413b2d61a9fc6a545b40e5c2e0064c53418f491a25994f270af1b79c59d5cf21d2e8c58785a8df09e7265ac975cb28","0x8f207bd83dad262dd9de867748094f7141dade78704eca74a71fd9cfc9136b5278d934db83f4f3908d7a3de84d583fc9","0x86bdb0a034dab642e05cb3e441d67f60e0baf43fa1140e341f028a2c4b04f3f48a0cdc5ee1c7825dcdc4019b004ec073","0xb8f1a9edf68006f913b5377a0f37bed80efadc4d6bf9f1523e83b2311e14219c6aa0b8aaee79e47a9977e880bad37a8e","0xa3caedb9c2a5d8e922359ef69f9c35b8c819bcb081610343148dc3a2c50255c9caa6090f49f890ca31d853384fc80d00","0x851f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e","0xb614644e726aa24b10254dd0a639489211ec2f38a69966b5c39971069ea046b83ee17cf0e91da740e11e659c0c031215","0xa19dd710fbf120dbd2ce410c1abeb52c639d2c3be0ec285dc444d6edea01cee272988e051d5c9c37f06fea79b96ba57b","0xa2ca1572cca0b43a2652dd519063311003ca6eccab5e659fc4a39d2411608e12e28294973aae5be678da60b0c41ca5f0","0xb783a70a1cf9f53e7d2ddf386bea81a947e5360c5f1e0bf004fceedb2073e4dd180ef3d2d91bee7b1c5a88d1afd11c49","0xacb58c81ae0cae2e9d4d446b730922239923c345744eee58efaadb36e9a0925545b18a987acf0bad469035b291e37269","0xa9e1558a3ab00c369a1ce75b98f37fd753dbb1d5e86c4514858b1196dfd149aa7b818e084f22d1ad8d34eba29ce07788","0xa23cf58a430d6e52c8099ecee6756773c10183e1e3c6871eb74c7f8b933943a758872d061a961c9961f2e06b4c24f2c4","0x8b5b5399aefcd717d8fc97ea80b1f99d4137eb6fa67afd53762ee726876b6790f47850cf165901f1734487e4a2333b56","0x8e0b26637a9bc464c5a9ac490f6e673a0fb6279d7918c46a870307cf1f96109abf975d8453dc77273f9aba47c8eb68c2","0xb4d670b79d64e8a6b71e6be0c324ff0616ad1a49fbb287d7bf278ec5960a1192b02af89d04918d3344754fb3284b53a1","0x86de7221af8fd5bb4ee28dad543997cde0c5cd7fa5ec9ad2b92284e63e107154cc24bf41e25153a2a20bcae3add50542","0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","0xb422f8004e8e7c47cf4bc69c3a551b3491916e415b824c2d064204d55c465fb6839834a3f37d8a9271c75e5e2d1f3718","0x8a5898f52fe9b20f089d2aa31e9e0a3fe26c272ce087ffdfd3490d3f4fa1cacbec4879f5f7cd7708e241a658be5e4a2f","0x9294795d066f5e24d506f4b3aa7613b831399924cee51c160c92eb57aad864297d02bfda8694aafd0a24be6396eb022a","0xa339d48ea1916bad485abb8b6cbdcafdba851678bfe35163fa2572c84553386e6ee4345140eab46e9ddbffc59ded50d5","0xa325677c8eda841381e3ed9ea48689b344ed181c82937fa2651191686fd10b32885b869ce47ca09fbe8bd2dbcaa1c163","0x8fc502abb5d8bdd747f8faf599b0f62b1c41145d30ee3b6ff1e52f9370240758eac4fdb6d7fb45ed258a43edebf63e96","0x837d6c15c830728fc1de0e107ec3a88e8bbc0a9c442eb199a085e030b3bcdfb08e7155565506171fe838598b0429b9cc","0x8eb8b1b309a726fa5af6a6228385214a48788a1f23fe03cd46e16e200ed7d8909394d2e0b442ef71e519215765ca6625","0xa07d173f08193f50544b8f0d7e7826b0758a2bedfdd04dcee4537b610de9c647c6e40fdf089779f1ec7e16ca177c9c35","0x9780e853f8ce7eda772c6691d25e220ca1d2ab0db51a7824b700620f7ac94c06639e91c98bb6abd78128f0ec845df8ef","0x820c62fa9fe1ac9ba7e9b27573036e4e44e3b1c43723e9b950b7e28d7cf939923d74bec2ecd8dc2ade4bab4a3f573160","0x8353cad3430c0b22a8ec895547fc54ff5791382c4060f83c2314a4fcd82fb7e8e822a9e829bace6ec155db77c565bcb3","0xb91ab4aed4387ed938900552662885cdb648deaf73e6fca210df81c1703eb0a9cbed00cecf5ecf28337b4336830c30c8","0xb12332004f9ecc80d258fe5c7e6a0fba342b93890a5ea0ccda642e7b9d79f2d660be4b85d6ca744c48d07a1056bc376d","0x88eeb6e5e927aa49a4cd42a109705c50fa58ed3833a52a20506f56cc13428cbccb734784a648c56de15ef64b0772de71","0x83798f4dcc27c08dcd23315bee084a9821f39eed4c35ef45ba5079de93e7cf49633eea6d0f30b20c252c941f615f6ccb","0x8eb7dd3ccc06165c3862d4e32d7fd09a383e0226fa06909ddf4e693802fd5c4324407d86c32df1fdc4438853368db6ce","0xa98ae7e54d229bac164d3392cb4ab9deeb66108cd6871bd340cbc9170f29d4602a2c27682f9d2fa3ad8019e604b6016a","0x8345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c","0x8da7f6c67fb6018092a39f24db6ea661b1ead780c25c0de741db9ae0cfc023f06be36385de6a4785a47c9f92135ea37d","0x875a795a82ae224b00d4659eb1f6a3b024f686bfc8028b07bf92392b2311b945afc3d3ab346a1d4de2deac1b5f9c7e0d","0xabc2344dc831a4bc0e1ec920b5b0f774bd6465f70199b69675312c4993a3f3df50fe4f30693e32eb9c5f8e3a70e4e7c4","0xb8e551f550803ec5e67717c25f109673b79284e923c9b25558a65864e0d730aeaecab0ee24448226e5dd9da3070080a2","0xab83dfefb120fab7665a607d749ef1765fbb3cc0ba5827a20a135402c09d987c701ddb5b60f0f5495026817e8ab6ea2e","0x90c0c1f774e77d9fad044aa06009a15e33941477b4b9a79fa43f327608a0a54524b3fcef0a896cb0df790e9995b6ebf1","0xab23c89f138f4252fc3922e24b7254743af1259fa1aeae90e98315c664c50800cecfc72a4d45ee772f73c4bb22b8646f","0x865dfd7192acc296f26e74ae537cd8a54c28450f18d579ed752ad9e0c5dcb2862e160e52e87859d71f433a3d4f5ca393","0x82d333a47c24d4958e5b07be4abe85234c5ad1b685719a1f02131a612022ce0c726e58d52a53cf80b4a8afb21667dee1","0xb6ad11e5d15f77c1143b1697344911b9c590110fdd8dd09df2e58bfd757269169deefe8be3544d4e049fb3776fb0bcfb","0x8978bdb97d45647584b8b9971246421b2f93d9ac648b1ed6595ad8326f80c107344a2c85d1756cd2f56b748001d5fd30","0xb4e84be7005df300900c6f5f67cf288374e33c3f05c2f10b6d2ff754e92ea8577d55b91e22cea2782250a8bc7d2af46d","0xae5163dc807af48bc827d2fd86b7c37de5a364d0d504c2c29a1b0a243601016b21c0fda5d0a446b9cb2a333f0c08ab20","0xad297ab0ef5f34448ceffef73c7104791cacae92aed22df8def9034b0f111b2af4f4365259dccecb46a1208fd3354fcd","0x9081bebcd06b4976d992d98a499397a44da20650ad4a1e0fb15dc63db8744d60d70dff0c6e2c3bb43ee35d1940683d1b","0xb3b3c89c783ee18bc030384914fafb8608d54c370005c49085fe8de22df6e04828b082c2fe7b595bd884986d688345f5","0xa232213cdd2b3bbdf5f61e65d57e28ee988c2b48185c9ac59b7372bc05c5b5763e19086ceaefb597b8e2b21b30aaacde","0x8d8be92bde8af1b9df13d5a8ed8a3a01eab6ee4cf883d7987c1d78c0d7d9b53a8630541fddf5e324b6cf4900435b1df8","0xad84464b3966ec5bede84aa487facfca7823af383715078da03b387cc2f5d5597cdd7d025aa07db00a38b953bdeb6e3f","0x889586bc28e52a4510bc9e8f1e673835ff4f27732b3954b6b7cd371d10a453ba793cfdfacf4ce20ca819310e541198b5","0xb35220775df2432a8923a1e3e786869c78f1661ed4e16bd91b439105f549487fb84bbea0590124a1d7aa4e5b08a60143","0x911bb496153aa457e3302ea8e74427962c6eb57e97096f65cafe45a238f739b86d4b790debd5c7359f18f3642d7d774c","0x89db41a6183c2fe47cf54d1e00c3cfaae53df634a32cccd5cf0c0a73e95ee0450fc3d060bb6878780fbf5f30d9e29aac","0x8774d1d544c4cc583fb649d0bbba86c2d2b5abb4c0395d7d1dac08ab1a2cc795030bdbdce6e3213154d4f2c748ccdaef","0xa1dbd288ae846edbfba77f7342faf45bdc0c5d5ce8483877acce6d00e09ef49d30fb40d4764d6637658d5ac738e0e197","0xb74c0f5b4125900f20e11e4719f69bac8d9be792e6901800d93f7f49733bc42bfb047220c531373a224f5564b6e6ecbb","0xa73eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086","0x80fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a55","0x913e4eec6be4605946086d38f531d68fe6f4669777c2d066eff79b72a4616ad1538aae7b74066575669d7ce065a7f47d","0x97363100f195df58c141aa327440a105abe321f4ebc6aea2d5f56c1fb7732ebfa5402349f6da72a6182c6bbedaeb8567","0x8c8b694b04d98a749a0763c72fc020ef61b2bb3f63ebb182cb2e568f6a8b9ca3ae013ae78317599e7e7ba2a528ec754a","0xaf048ba47a86a6d110fc8e7723a99d69961112612f140062cca193d3fc937cf5148671a78b6caa9f43a5cf239c3db230","0x92e5cd122e484c8480c430738091f23f30773477d9850c3026824f1f58c75cf20365d950607e159717864c0760432edb","0xab03beff9e24a04f469555b1bc6af53aa8c49c27b97878ff3b4fbf5e9795072f4d2b928bff4abbbd72d9aa272d1f100e","0x9252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada","0x84614d2ae5bc594a0c639bed6b6a1dc15d608010848b475d389d43001346ed5f511da983cc5df62b6e49c32c0ef5b24c","0xa99987ba6c0eb0fd4fbd5020a2db501128eb9d6a9a173e74462571985403f33959fc2f526b9a424d6915a77910939fc3","0x87109a988e34933e29c2623b4e604d23195b0346a76f92d51c074f07ce322de8e1bef1993477777c0eb9a9e95c16785f","0x8e7cb413850ecb6f1d2ded9851e382d945a8fee01f8f55184c7b0817000073944c6b6c77164e0a2272c39410fde18e58"]},"current_sync_committee_branch":["0x5cf5804f5a8dc680445f5efd4069859f3c65dd2db869f1d091f454008f6d7ab7","0x5652625b4666269da9abc42860e916cfbcedb34d2e9b0e1e29c41e92222c7725","0xf39bba29e678faa3726942dcff865dc78c86f7bd92ec917b75afae90d3152890","0xffb410306f3aaf61ffcc3799984ea488c50a0015fac228975696981ca0d87bff","0xe494c748f990bf6af040a1f2b7631e7214cbfeb177d5fa1ada94d8995746b0f4"],"header":{"beacon":{"body_root":"0x1bcf7977a0413b2bbc234ea1e6b63806cb4d24fadf1d9faab698f2828e804542","parent_root":"0x98d75aab2adb4f8e8dbfbf5c81c61eae2e75558171a9cb38cde5633857ef7ef0","proposer_index":"144","slot":"160","state_root":"0xd9a68463000f9b3092347bfc6a7e31e5991e5c6b763c4358e0186640dcf5b8f2"}}},"version":"bellatrix"} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/light_client_finality_1.json b/cl/beacon/handler/test_data/light_client_finality_1.json new file mode 100644 index 00000000000..db1c119d08c --- /dev/null +++ b/cl/beacon/handler/test_data/light_client_finality_1.json @@ -0,0 +1 @@ +{"data":{"attested_header":{"beacon":{"body_root":"0x1bcf7977a0413b2bbc234ea1e6b63806cb4d24fadf1d9faab698f2828e804542","parent_root":"0x98d75aab2adb4f8e8dbfbf5c81c61eae2e75558171a9cb38cde5633857ef7ef0","proposer_index":"144","slot":"160","state_root":"0xd9a68463000f9b3092347bfc6a7e31e5991e5c6b763c4358e0186640dcf5b8f2"}},"finality_branch":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"finalized_header":{"beacon":{"body_root":"0x1bcf7977a0413b2bbc234ea1e6b63806cb4d24fadf1d9faab698f2828e804542","parent_root":"0x98d75aab2adb4f8e8dbfbf5c81c61eae2e75558171a9cb38cde5633857ef7ef0","proposer_index":"144","slot":"160","state_root":"0xd9a68463000f9b3092347bfc6a7e31e5991e5c6b763c4358e0186640dcf5b8f2"}},"signature_slot":"1234","sync_aggregate":{"sync_committee_bits":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","sync_committee_signature":"0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}},"version":"bellatrix"} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/light_client_optimistic_1.json b/cl/beacon/handler/test_data/light_client_optimistic_1.json new file mode 100644 index 00000000000..41fbc4cf3e8 --- /dev/null +++ b/cl/beacon/handler/test_data/light_client_optimistic_1.json @@ -0,0 +1 @@ +{"data":{"attested_header":{"beacon":{"body_root":"0x1bcf7977a0413b2bbc234ea1e6b63806cb4d24fadf1d9faab698f2828e804542","parent_root":"0x98d75aab2adb4f8e8dbfbf5c81c61eae2e75558171a9cb38cde5633857ef7ef0","proposer_index":"144","slot":"160","state_root":"0xd9a68463000f9b3092347bfc6a7e31e5991e5c6b763c4358e0186640dcf5b8f2"}},"signature_slot":"1234","sync_aggregate":{"sync_committee_bits":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","sync_committee_signature":"0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}},"version":"bellatrix"} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/light_client_update_1.json b/cl/beacon/handler/test_data/light_client_update_1.json new file mode 100644 index 00000000000..307e14ea35a --- /dev/null +++ b/cl/beacon/handler/test_data/light_client_update_1.json @@ -0,0 +1 @@ +[{"data":{"attested_header":{"beacon":{"body_root":"0x1bcf7977a0413b2bbc234ea1e6b63806cb4d24fadf1d9faab698f2828e804542","parent_root":"0x98d75aab2adb4f8e8dbfbf5c81c61eae2e75558171a9cb38cde5633857ef7ef0","proposer_index":"144","slot":"160","state_root":"0xd9a68463000f9b3092347bfc6a7e31e5991e5c6b763c4358e0186640dcf5b8f2"}},"finality_branch":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"finalized_header":{"beacon":{"body_root":"0x1bcf7977a0413b2bbc234ea1e6b63806cb4d24fadf1d9faab698f2828e804542","parent_root":"0x98d75aab2adb4f8e8dbfbf5c81c61eae2e75558171a9cb38cde5633857ef7ef0","proposer_index":"144","slot":"160","state_root":"0xd9a68463000f9b3092347bfc6a7e31e5991e5c6b763c4358e0186640dcf5b8f2"}},"next_sync_committee":{"aggregate_public_key":"0xb7dad3c14f74e6e9f88d341983d8daf541d59f1dc7373eed42bb62e55948eb0bf0c34ebda79890b11746b45e2faa1dd5","committee":["0xb4bf4717ad2d3fce3a11a84dee1b38469be9e783b298b200cc533be97e474bf94d6c7c591d3102992f908820bc63ac72","0x969b4bcd84cabd5ba5f31705de51e2c4096402f832fdf543d88eb41ebb55f03a8715c1ceea92335d24febbea17a3bdd7","0x92c057502d4de4935cf8af77f21ca5791f646286aead82753a62dfb06dbd1705df506a02f19517accb44177cb469f3e4","0x90f3659630d58bd08e2e0131f76283cf9de7aa89e0102c67e79ca05c5c7217b213c05668f3de82939d8414d1674dc6a1","0x8c3999317e8c6753e3e89651e5ba7fdea91ab1dda46fdb6902eccd4035ba1618a178d1cd31f6fbbacc773255d72995b3","0x881f1a1ac6a56a47f041f49266d0a2e146c35e42bf87c22a9bc23a363526959e4d3d0c7e7382be091246787ef25e33d5","0x866f9ebe3afe58f2fd3234c4635a215c7982a53df4fb5396d9614a50308020b33618606a434984ca408963093b8f916d","0xa49f744d9bbfbcdd106592646040a3322fbe36e628be501a13f5272ad545a149f06f59bd417df9ae1a38d08c5a2108fe","0xa60d5589316a5e16e1d9bb03db45136afb9a3d6e97d350256129ee32a8e33396907dc44d2211762967d88d3e2840f71b","0xb48e56bd66650adb1e4f0c68b745f35f08d9829a06dbd5c67b2cc03dcf4cc5f9a85c84654f9596163b59d693eab14c34","0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","0x99fb4a03d71921b6a56f5e39f42f281b96ee017e859f738fab6fbc51edbcf3b02b1276336d1f82391e495723ecbe337e","0xa9761c83d922ced991557c9913bedfbe34509ec68d34a791242ac0f96e30f87e29a19099199a38aac29037e0c8e939c6","0xafad69e0702e02012b2419bdc7250c94816e40286a238e5f83858c7be2f93be2ec3657dd6cd0ded9184d6c9646092d3e","0xa29e520a73ec28f4e2e45050c93080eeaee57af1108e659d740897c3ced76ceb75d106cb00d7ed25ec221874bf4b235a","0x91d2fe0eded16c39a891ba065319dabfe2c0c300f5e5f5c84f31f6c52344084f0bb60d79650fc1dfe8d2a26fe34bd1fa","0x97063101e86c4e4fa689de9521bb79575ed727c5799cf69c17bfe325033200fcecca79a9ec9636b7d93e6d64f7275977","0xb194e855fa3d9ab53cbfbc97e7e0ce463723428bb1ad25952713eac04d086bf2407bdb78f8b8173f07aa795bd5e491dc","0xb271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4","0xa4e8f4a4f81f855f46512af8cdcbc9ae8a7eb395a75f135e5569b758a8d92349681a0358500f2d41f4578d3f7ffaa90f","0x876a46a1e38a8ae4fbad9cb9336baed2f740b01fabb784233ae2f84ffc972aefbfc5458e815491ab63b42fcb67f6b7cb","0x8e62874e15daea5eb362fa4aaad371d6280b6ca3d4d86dae9c6d0d663186a9475c1d865cf0f37c22cb9e916c00f92f71","0x95eacc3adc09c827593f581e8e2de068bf4cf5d0c0eb29e5372f0d23364788ee0f9beb112c8a7e9c2f0c720433705cf0","0xacebcdddf7ac509202f9db4efbc0da9172f57b3e468f9b6c116c6b134c906256630d44c38a19ec0e4b569c5001a5a04c","0xa7b9a71c54b44f6738a77f457af08dc79f09826193197a53c1c880f15963c716cec9ff0fd0bcb8ab41bc2fe89c2711fa","0xa984a361f4eb059c693e8405075a81469157811e78c317bb3ca189b16cd5c3b2a567c65d78560ef2ca95e108dc5a211e","0xa1cd4b34c72719c9d2707d45cd91a213541dd467f294f225e11571fd2e1cea6aac4b94b904ec9e153ed3ac350856ad97","0x86fef261cd5bccd56c72bba1bfcb512c7b45015283dbea7458d6a33ab1edfb992139cfb0afd7b05a2dfb327b6c8f94dc","0xb098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a","0x8c62ca6abda1a9af02d5c477d2bbf4c00900328f3f03c45f5e1e6bc69a5be2b7acc2532a923f19cb4d4ab43d0d2f42ec","0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","0xb0675bcee7652a66c92dc254157eef380726c396b1c2f5b4e1905fff912003b7e790f31fb5542df57f1f465e0915e7a0","0xb3d106c404056e440519d8a1e657f249d9aae11325796404bb048c1792a12f8addf7aa29c5822893c8cc408527793d6a","0xa0ec3e71a719a25208adc97106b122809210faf45a17db24f10ffb1ac014fac1ab95a4a1967e55b185d4df622685b9e8","0xb12d0c357016caa5c0ec0a6bdc07e60c2af4631c477366eeb6ab4fffbd0ca40ab9ec195091478a2698bf26349b785ae8","0xb4ff0075497094519c49b4b56687a1b8c84878e110dc7f2bd492608f3977dfdc538f1c8e3f8941552552af121eab9772","0x812b2d0546aa77dec2d55406b0131ed580c079c1aeb76eb2ca076b7b58289fa9d781069a2e11fe2199f1e02c5dd70e6a","0xae08c32bac1e3ec1e2250803b1781b8004efb2ad7f215e2fe8feb9f9ec5ec14157a9395f9f0e92060d18f4b73b33c0c3","0x815c0c9f90323633f00c1382199b8c8325d66fda9b93e7147f6dee80484c5fc4ef8b4b1ec6c64fab0e23f198beefa9ea","0xaa10e1055b14a89cc3261699524998732fddc4f30c76c1057eb83732a01416643eb015a932e4080c86f42e485973d240","0xab812b452a959fd9cbca07925045312f94e45eb1a7129b88ea701b2c23c70ae18a3c4a1e81389712c6c7d41e748b8c7d","0x80e8e7de168588f5ac5f3b9f2fabcadc0c4f50c764f6a4abf8231675fec11277d49e7357c3b5b681566e6a3d32b557e1","0xb3dc963ef53ae9b6d83ce417c5d417a9f6cc46beaa5fcf74dc59f190c6e9c513e1f57a124a0ef8b6836e4c8928125500","0x8ff7cc69f007f11481c91c6f9b20698998a0c2e9a2928bec8eea7507c7ad73a9d1d218cfdb279c4d2132d7da6c9e513e","0x8623144b531c2852fb755a4d8b4c9b303a026de6f99b1e88a1e91fa82bc10d6c7a9d8dad7926b6b7afd21ca4edb92408","0x84a3f285f8a8afc70b2c5b2c93e8ab82668def5e21601888fac3d2c0cdf947480c97089ba4ad04e786d4b771c8988c75","0xa7e53203bbed6adaa99c54f786622592dcaa4cd702e9aaaa355b8dcf302301f8b8dfec87625a9560079d3f8daf076c5d","0xb3f095233b798f4eb74be9d7d13b95800c9421875bc58f7bab4709840881fbfbe1eb133236eead9f469dde9603f06e46","0xb3c8a118a25b60416b4e6f9e0bc7cb4a520b22b1982f4d6ba47d3f484f0a98d000eed8f5019051847497f24fd9079a74","0x927e6e88fe7641155e68ff8328af706b5f152125206fe32aeab19432f17ec925ed6452489cf22bee1f563096cbd1dae6","0x9446407bcd8e5efe9f2ac0efbfa9e07d136e68b03c5ebc5bde43db3b94773de8605c30419eb2596513707e4e7448bb50","0x99b2f703619c4472a1039f532bf97f3771a870834f08d3b84fc914a75859fd0902725b40f1a6dabe7f901ac9c23f0842","0x8035a49b18a5e6223952e762185cc2f992f7eabdd1fbd9d0a7467605d65de6fe89ec90d778cb2835f4e2abe84fb67983","0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","0xa74fb46295a7ba2f570e09c4b8047a5833db7bf9fea68be8401bd455430418fe5485be0b41c49bd369f850dbfd991ce3","0x82681717d96c5d63a931c4ee8447ca0201c5951f516a876e78dcbc1689b9c4cf57a00a61c6fd0d92361a4b723c307e2d","0xb57520f5150ed646e8c26a01bf0bd15a324cc66fa8903f33fa26c3b4dd16b9a7c5118fdac9ee3eceba5ff2138cdce8f0","0xa222487021cdd811ed4410ad0c3006e8724dc489a426a0e17b4c76a8cd8f524cd0e63fac45dc8186c5ce1127162bec83","0xa6ba3250cd25bd8965d83a177ff93cf273980a7939160b6814a1d2f3cf3006c5a61b0d1c060aa48d33da7b24487eaf43","0xa8b15373c351e26e5dc5baba55cb2e1e014f839a7938764ee2def671bd7ac56c3f8b4c9c330f6ae77500d3f7118eb6e8","0x8f3f78ee37dbcbbc784fa2a75e047e02f8748af86365f3961cfc1b21055e552b46ec0377085da06914e0cffec0d3f0a4","0x997b2de22feea1fb11d265cedac9b02020c54ebf7cbc76ffdfe2dbfda93696e5f83af8d2c4ff54ce8ee987edbab19252","0x81ccc19e3b938ec2405099e90022a4218baa5082a3ca0974b24be0bc8b07e5fffaed64bef0d02c4dbfb6a307829afc5c","0x995b103d85d9e60f971e05c57b1acebf45bd6968b409906c9efea53ce4dc571aa4345e49c34b444b9ab6b62d13e6630b","0x99bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3","0xa64609779de550798ce1b718904bfd6f15e41dc56a14928ab1e6f43bba84d706f5ce39022a34e3fb2e113af695c52473","0x8a75c55208585181c6cef64a26b56d6a1b27ef47b69162b2538724575c2dff045ec54a9d321fe662735871b825c5aa3c","0x82de0e98b08925f379d1b2c40e30195f610841409ab3724ad3f2d173513e1d884c8b27aff402cd0353f79e61c7b4addb","0xafb72b4c111da98379f195da4e5c18462acc7ece85cd66894fbaf69ddab3d3bb0b6957ea0042b7705937919189e6a531","0xb58160d3dc5419cfa1f22e54e5135d4f24f9c66565da543a3845f7959660fa1d15c815b9c8ae1160dd32821a035640c0","0x89bdc5f82877823776a841cd8e93877c0e5e0b55adcebaafaf304d6460ab22d32bcd7e46e942ec4d8832eaa735b08923","0xb4aa2583a999066ec6caa72a3fc19e80d8936f6856d447dd043aa9b126aa63bcaac876266d80913071777984d8d30563","0xa762624bc58176cdfa2d8f83629b897bb26a2fad86feb50f1b41603db2db787b42429e3c045d7df8f7ea55c0582c9069","0xb8357a39c42f80953e8bc9908cb6b79c1a5c50ed3bbc0e330577a215ac850e601909fa5b53bed90c744e0355863eaa6e","0x9847ef9b7f43678bb536a27ab3aecee8cc3eedfe834e1214eaaeb00dc07bc20fd69af3319c043e62a29effd5ffb37e16","0xa7d10210c48f84d67a8af3f894062397b22cb48fa3f0936c039400638908f5e976d9783295aad8af9ac602f6bf3b10a7","0xa8e1bc8a6493fc7ed293f44c99b28d31561c4818984891e5817c92d270c9408241ceaca44ab079409d13cc0df9e2e187","0x98a3e7179e2ad305857bf326d2c4b3924af478b704a944a416f4bc40be691fa53793ae77dcfa409adaee4bced903dfb1","0x826a146c3580b547594469b248195c9003205f48d778e8344caff117b210b24351892c5b0ace399a3a66edebc24c180f","0x95cc6e3d4e3ec850b01b866ccec0e8093a72311bcc4c149377af66586471ca442d5f61ecbb8878352f0193ddea928805","0x925ef08813aa7d99fbb6cc9d045921a43bcf8c9721c437478afd3d81e662df84497da96ddbf663996503b433fd46af28","0x8b737f47d5b2794819b5dc01236895e684f1406f8b9f0d9aa06b5fb36dba6c185efec755b77d9424d09b848468127559","0x8988349654c5fdf666ec4647d398199cc609bb8b3d5108b9e5678b8d0c7563438f3fbcf9d30ab3ef5df22aad9dc673b2","0xaa44163d9f9776392ce5f29f1ecbcc177f8a91f28927f5890c672433b4a3c9b2a34830842d9396dc561348501e885afb","0x8fe55d12257709ae842f8594f9a0a40de3d38dabdf82b21a60baac927e52ed00c5fd42f4c905410eacdaf8f8a9952490","0xaed3e9f4bb4553952b687ba7bcac3a5324f0cceecc83458dcb45d73073fb20cef4f9f0c64558a527ec26bad9a42e6c4c","0x86d386aaf3dff5b9331ace79f6e24cff8759e7e002bbe9af91c6de91ab693f6477551e7ee0a1e675d0fc614814d8a8aa","0x8856c31a50097c2cc0c9a09f89e09912c83b9c7838b2c33d645e95d0f35130569a347abc4b03f0cb12a89397b899d078","0xa65a82f7b291d33e28dd59d614657ac5871c3c60d1fb89c41dd873e41c30e0a7bc8d57b91fe50a4c96490ebf5769cb6b","0x98536b398e5b7f1276f7cb426fba0ec2b8b0b64fba7785ea528bebed6ae56c0dee59f5d295fa4c97a1c621ecacfc4ec3","0x8d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a41495083582","0xa52cd15bb5cb9bdd7cef27b3644356318d0fa9331f9388edc12b204e2eb56face5604e4c3bb9631ef5bd438ff7821523","0x955bcc6bca53e7a6afa0e83c8443364e0e121f416d6024a442253d1e9d805407f2c7f7d9944770db370935e8722e5f51","0x95c38f73d6e65f67752ae3f382e8167d7d0d18ced0ca85a1d6b9ba5196f89cf9aed314a7d80b911806d5310584adc1b8","0x8e34d569ec169d15c9a0de70c15bf1a798ce9c36b30cca911ef17d6c183de72614575629475b57147f1c37602f25d76c","0xb0ea38f0b465ae0f0b019494aecd8a82cb7c496ecfab60af96d0bda1a52c29efd4d4e5b270f3d565eb3485b2aaf3d87c","0x90bc674d83e1b863fec40140a2827c942e575bd96bc5e60339c51089bab5fd445ae0c99ab9f1b5074b54682ac9c4a275","0x9417af4462cc8d542f6f6c479866f1c9fa4768069ef145f9acdd50221b8956b891ceec3ef4ec77c54006b00e38156cee","0xa0d79afac7df720f660881e20f49246f64543e1655a0ab9945030e14854b1dd988df308ed374fc6130586426c6cf16a4","0x899729f080571e25fee93538eb21304a10600d5ceb9807959d78c3967d9ba32b570d4f4105626e5972ccf2e24b723604","0xada7d351b72dcca4e46d7198e0a6fae51935f9d3363659be3dfaa5af8b1c033d4c52478f8b2fbf86f7318142f07af3a7","0xa72841987e4f219d54f2b6a9eac5fe6e78704644753c3579e776a3691bc123743f8c63770ed0f72a71e9e964dbf58f43","0xae6f240e7a9baa3e388eb3052c11d5b6ace127b87a7766970db3795b4bf5fc1de17a8ee8528d9bef0d6aefcfb67a7761","0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","0x95fa3538b8379ff2423656ab436df1632b74311aaef49bc9a3cbd70b1b01febaf2f869b4127d0e8e6d18d7d919f1f6d8","0x8025cdadf2afc5906b2602574a799f4089d90f36d73f94c1cf317cfc1a207c57f232bca6057924dd34cff5bde87f1930","0xa1402173873adf34e52c43feacd915eb141d77bf16bc5180e1ee86762b120411fffa7cb956cf0e625364e9a2d56f01f3","0x91887afbd7a83b8e9efb0111419c3d0197728d56ef96656432fbc51eb7ed736bb534dad59359629cf9c586461e251229","0x8e6ad45832f4ba45f5fe719022e6b869f61e1516d8835586b702764c474befe88591722045da41ab95aafbf0387ecd18","0x8a8409bd78ea4ff8d6e3e780ec93a3b017e639bbdaa5f399926e07ce2a939c8b478699496da2599b03a8fb62328cb1da","0x912b440c4d3c8177a012cea1cc58115cbc6795afc389363c7769bf419b9451bcde764586cf26c15e9906ea54837d031a","0xa82f4819a86b89c9cbd6d164e959fe0061e6a9b705862be2952d3cf642b515bd5edae4e6338e4eeb975a9082ff205bb7","0x8ab3f4fbbea07b771705f27bb470481ab6c44c46afcb317500df564b1177fa6dc7a3d27506b9e2d672ac1edd888a7a65","0x85ddb75efa05baaa727d659b09d268b606f81029796e106b55ff8d47fdb74a7d237286dfeadde6cc26d53d56204eff65","0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","0xb20c190dd46da9fe928d277ccfa0b804b942f5a181adb37fc1219e028fb7b48d63261248c6d939d68d4d8cd2c13a4f80","0xa20cca122e38a06188877a9f8f0ca9889f1dd3ffb22dddf76152604c72fc91519e414c973d4616b986ff64aec8a3208b","0xa1555b4e598691b619c576bad04f322fc6fe5898a53865d330097460e035e9d0e9169089a276f15f8977a39f27f9aec3","0x97e827da16cbd1da013b125a96b24770e0cad7e5af0ccd9fb75a60d8ba426891489d44497b091e1b0383f457f1b2251c","0x908ee03816f68a78d1da050c8ec125d3dac2306178d4f547d9c90bd58b3985a20f6fef507dcc81f010d70262d9abab68","0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","0x951f3707389db5012848b67ab77b63da2a73118b7df60f087fa9972d8f7fef33ed93e5f25268d4237c2987f032cd613f","0x8f021f52cbd6c46979619100350a397154df00cae2efe72b22ad0dd66747d7de4beecd9b194d0f7016e4df460a63a8ea","0xa272e9d1d50a4aea7d8f0583948090d0888be5777f2846800b8281139cd4aa9eee05f89b069857a3e77ccfaae1615f9c","0x8c7b0e11f9bc3f48d84013ef8e8575aeb764bc1b9bf15938d19eb191201011365c2b14d78139a0f27327cb21c1b8bf3d","0xab48aa2cc6f4a0bb63b5d67be54ac3aed10326dda304c5aeb9e942b40d6e7610478377680ab90e092ef1895e62786008","0x8515e7f61ca0470e165a44d247a23f17f24bf6e37185467bedb7981c1003ea70bbec875703f793dd8d11e56afa7f74ba","0x8f81b19ee2e4d4d0ff6384c63bacb785bc05c4fc22e6f553079cc4ff7e0270d458951533458a01d160b22d59a8bd9ab5","0xa6f68f09fc2b9df0ed7b58f213319dd050c11addaef31231853c01079fb225d0f8aa6860acd20bc1de87901f6103b95f","0x85ae0ef8d9ca996dbfebb49fa6ec7a1a95dff2d280b24f97c613b8e00b389e580f0f08aa5a9d5e4816a6532aaebc23bf","0xb88b54fe7990227c6d6baa95d668d2217626b088579ddb9773faf4e8f9386108c78ddd084a91e69e3bdb8a90456030c6","0xaa14e001d092db9dc99746fcfc22cd84a74adaa8fc483e6abf697bd8a93bda2ee9a075aca303f97f59615ed4e8709583","0x9717182463fbe215168e6762abcbb55c5c65290f2b5a2af616f8a6f50d625b46164178a11622d21913efdfa4b800648d","0xb2a3cedd685176071a98ab100494628c989d65e4578eec9c5919f2c0321c3fc3f573b71ef81a76501d88ed9ed6c68e13","0xb203b206005c6db2ecfab163e814bacb065872485d20ac2d65f982b4696617d12e30c169bf10dbe31d17bf04a7bdd3bc","0x8d08a52857017fd5cab3a821ccb8f5908c96cf63c5a5647209c037e2ea1c56f9650ec030b82ffdce76d37672d942e45b","0x84d1e4703d63ac280cd243c601def2b6cc0c72fb0a3de5e83149d3ac558c339f8b47a977b78fd6c9acf1f0033ae71a88","0x8e04ad5641cc0c949935785184c0b0237977e2282742bc0f81e58a7aa9bfee694027b60de0db0de0539a63d72fd57760","0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","0xa06d4f9703440b365bdce45e08442ec380165c5051c30e9df4d25571cba350ce5ab5e07810e1d1476c097a51d7734630","0x950c598dc627cd58cd7d34e0dd055daf92c9bc89235c3a5d3aacf594af97f99eb0f02a6f353238386626ee67462cd9a2","0x8e876b110d8ad35997a0d4044ca03e8693a1532497bcbbb8cdb1cd4ce68fe685eb03209b3d2833494c0e79c1c1a8c60b","0x803968608f3f1447912bb635f200ed5b0bc2f3ade2736bccb05a70c83c7df55602a2723f6b9740e528456eeba51ced64","0x931cdb87f226ad70ec6e0ff47e8420481d080e57951443ad804411a7b78dc2f2e99cbdf2463dda39d6be2ad95c0730e1","0x931bea4bc76fad23ba9c339622ddc0e7d28904a71353c715363aa9e038f64e990ef6ef76fc1fc431b9c73036dd07b86c","0x9929f70ba8c05847beb74c26dd03b4ec04ca8895bc6d9f31d70bd4231329c2f35799d4404a64f737e918db55eec72d25","0x93abf6639e499a3d83e3e2369882ac8dbe3e084e7e766d166121897497eabee495728365d9d7b9d9399a14831d186ff1","0xb29e53ff7b1595375136703600d24237b3d62877a5e8462fad67fc33cbde5bd7fcfac10dde01f50944b9f8309ad77751","0x95906ec0660892c205634e21ad540cbe0b6f7729d101d5c4639b864dea09be7f42a4252c675d46dd90a2661b3a94e8ca","0xafdb131642e23aedfd7625d0107954a451aecc9574faeeec8534c50c6156c51d3d0bdb8174372d91c560a0b7799b4e8e","0x97631345700c2eddaeb839fc39837b954f83753ef9fe1d637abcfc9076fcb9090e68da08e795f97cfe5ef569911969ec","0x8bcfb0520b9d093bc59151b69e510089759364625589e07b8ca0b4d761ce8e3516dbdce90b74b9b8d83d9395091b18bf","0xb54d0e0f7d368cd60bc3f47e527e59ef5161c446320da4ed80b7af04a96461b2e372d1a1edf8fe099e40bff514a530af","0x8fbdab59d6171f31107ff330af9f2c1a8078bb630abe379868670c61f8fa5f05a27c78f6a1fd80cde658417ef5d6a951","0x9718567efc4776425b17ac2450ae0c117fdf6e9eeeabb4ede117f86bee413b31b2c07cf82e38c6ecaf14001453ce29d0","0xb0c9351b9604478fb83646d16008d09cedf9600f57b0adbf62dd8ad4a59af0f71b80717666eeec697488996b71a5a51e","0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48","0x942d5ed35db7a30cac769b0349fec326953189b51be30b38189cd4bb4233cfe08ccc9abe5dd04bf691f60e5df533d98a","0xa4c90c14292dfd52d27d0e566bbfa92a2aebb0b4bcd33d246d8eeb44156c7f2fd42ba8afb8e32699724c365fc583e904","0xb29043a7273d0a2dbc2b747dcf6a5eccbd7ccb44b2d72e985537b117929bc3fd3a99001481327788ad040b4077c47c0d","0xb08d72a2c2656679f133a13661d9119ab3a586e17123c11ca17dc538d687576789d42ab7c81daa5af6506cc3bac9d089","0x98ff9389cf70ee9e0ae5df1474454ab5d7529cab72db2621e1b8b40b473168c59689a18838c950de286ea76dfdf9dc24","0x93b15273200e99dbbf91b24f87daa9079a023ccdf4debf84d2f9d0c2a1bf57d3b13591b62b1c513ec08ad20feb011875","0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","0x90239bd66450f4cc08a38402adc026444230fd893b752c7dfc4699539044a1fd39ba133cbdc330b7fc19538e224725cb","0x8ed36ed5fb9a1b099d84cba0686d8af9a2929a348797cd51c335cdcea1099e3d6f95126dfbc93abcfb3b56a7fc14477b","0x8215b57dd02553c973052c69b0fecefa813cc6f3420c9b2a1cffae5bd47e3a7a264eaec4ed77c21d1f2f01cf130423c0","0xa7a9bebe161505ba51f5fb812471f8fb8702a4c4ad2f23de1008985f93da644674edb2df1096920eaecb6c5b00de78cd","0x8fa4a674911c27c9306106ffcc797e156b27dab7a67ce7e301cfd73d979331f8edcd4d3397616dd2821b64e91b4d9247","0xb2277b279519ba0d28b17c7a32745d71ceb3a787e89e045fe84aaadf43a1d388336ec4c8096b17997f78d240ab067d07","0x8a3a08b7dae65f0e90a3bc589e13019340be199f092203c1f8d25ee9989378c5f89722430e12580f3be3e4b08ae04b1b","0x825abb120ae686f0e3c716b49f4086e92b0435413a137a31bcf992e4851ecdf9d74ceea3d6e063d7009ec8b8e504fb30","0xa8f5540a9977fd2ee7dea836ed3dafa5d0b1fc9c5d5f1689e91ec49cdef989976c51502c3764025ef8ff542ef3b170ea","0x87dc2da68d1641ffe8e6ca1b675767dc3303995c5e9e31564905c196e3109f11345b8877d28d116e8ae110e6a6a7c7a4","0x9725ff209f8243ab7aceda34f117b4c402e963cc2a3a85d890f6d6d3c0c96e0b0acbed787fe4fa7b37197c049ab307ea","0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","0xa69ec7c89252e2531c057ebeb86098e3b59ca01558afd5f6de4ec40370cb40de07856334770ecacbf23e123201266f67","0xb8ae7b57f57bf505dd2623a49017da70665f5b7f5ac74d45d51883aac06881467b5ef42964bd93ff0f3b904e8239e7b4","0x8aea7d8eb22063bcfe882e2b7efc0b3713e1a48dd8343bed523b1ab4546114be84d00f896d33c605d1f67456e8e2ed93","0xaf3dc44695d2a7f45dbe8b21939d5b4015ed1697131184ce19fc6bb8ff6bbc23882348b4c86278282dddf7d718e72e2b","0x96413b2d61a9fc6a545b40e5c2e0064c53418f491a25994f270af1b79c59d5cf21d2e8c58785a8df09e7265ac975cb28","0x8f207bd83dad262dd9de867748094f7141dade78704eca74a71fd9cfc9136b5278d934db83f4f3908d7a3de84d583fc9","0x86bdb0a034dab642e05cb3e441d67f60e0baf43fa1140e341f028a2c4b04f3f48a0cdc5ee1c7825dcdc4019b004ec073","0xb8f1a9edf68006f913b5377a0f37bed80efadc4d6bf9f1523e83b2311e14219c6aa0b8aaee79e47a9977e880bad37a8e","0xa3caedb9c2a5d8e922359ef69f9c35b8c819bcb081610343148dc3a2c50255c9caa6090f49f890ca31d853384fc80d00","0x851f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e","0xb614644e726aa24b10254dd0a639489211ec2f38a69966b5c39971069ea046b83ee17cf0e91da740e11e659c0c031215","0xa19dd710fbf120dbd2ce410c1abeb52c639d2c3be0ec285dc444d6edea01cee272988e051d5c9c37f06fea79b96ba57b","0xa2ca1572cca0b43a2652dd519063311003ca6eccab5e659fc4a39d2411608e12e28294973aae5be678da60b0c41ca5f0","0xb783a70a1cf9f53e7d2ddf386bea81a947e5360c5f1e0bf004fceedb2073e4dd180ef3d2d91bee7b1c5a88d1afd11c49","0xacb58c81ae0cae2e9d4d446b730922239923c345744eee58efaadb36e9a0925545b18a987acf0bad469035b291e37269","0xa9e1558a3ab00c369a1ce75b98f37fd753dbb1d5e86c4514858b1196dfd149aa7b818e084f22d1ad8d34eba29ce07788","0xa23cf58a430d6e52c8099ecee6756773c10183e1e3c6871eb74c7f8b933943a758872d061a961c9961f2e06b4c24f2c4","0x8b5b5399aefcd717d8fc97ea80b1f99d4137eb6fa67afd53762ee726876b6790f47850cf165901f1734487e4a2333b56","0x8e0b26637a9bc464c5a9ac490f6e673a0fb6279d7918c46a870307cf1f96109abf975d8453dc77273f9aba47c8eb68c2","0xb4d670b79d64e8a6b71e6be0c324ff0616ad1a49fbb287d7bf278ec5960a1192b02af89d04918d3344754fb3284b53a1","0x86de7221af8fd5bb4ee28dad543997cde0c5cd7fa5ec9ad2b92284e63e107154cc24bf41e25153a2a20bcae3add50542","0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","0xb422f8004e8e7c47cf4bc69c3a551b3491916e415b824c2d064204d55c465fb6839834a3f37d8a9271c75e5e2d1f3718","0x8a5898f52fe9b20f089d2aa31e9e0a3fe26c272ce087ffdfd3490d3f4fa1cacbec4879f5f7cd7708e241a658be5e4a2f","0x9294795d066f5e24d506f4b3aa7613b831399924cee51c160c92eb57aad864297d02bfda8694aafd0a24be6396eb022a","0xa339d48ea1916bad485abb8b6cbdcafdba851678bfe35163fa2572c84553386e6ee4345140eab46e9ddbffc59ded50d5","0xa325677c8eda841381e3ed9ea48689b344ed181c82937fa2651191686fd10b32885b869ce47ca09fbe8bd2dbcaa1c163","0x8fc502abb5d8bdd747f8faf599b0f62b1c41145d30ee3b6ff1e52f9370240758eac4fdb6d7fb45ed258a43edebf63e96","0x837d6c15c830728fc1de0e107ec3a88e8bbc0a9c442eb199a085e030b3bcdfb08e7155565506171fe838598b0429b9cc","0x8eb8b1b309a726fa5af6a6228385214a48788a1f23fe03cd46e16e200ed7d8909394d2e0b442ef71e519215765ca6625","0xa07d173f08193f50544b8f0d7e7826b0758a2bedfdd04dcee4537b610de9c647c6e40fdf089779f1ec7e16ca177c9c35","0x9780e853f8ce7eda772c6691d25e220ca1d2ab0db51a7824b700620f7ac94c06639e91c98bb6abd78128f0ec845df8ef","0x820c62fa9fe1ac9ba7e9b27573036e4e44e3b1c43723e9b950b7e28d7cf939923d74bec2ecd8dc2ade4bab4a3f573160","0x8353cad3430c0b22a8ec895547fc54ff5791382c4060f83c2314a4fcd82fb7e8e822a9e829bace6ec155db77c565bcb3","0xb91ab4aed4387ed938900552662885cdb648deaf73e6fca210df81c1703eb0a9cbed00cecf5ecf28337b4336830c30c8","0xb12332004f9ecc80d258fe5c7e6a0fba342b93890a5ea0ccda642e7b9d79f2d660be4b85d6ca744c48d07a1056bc376d","0x88eeb6e5e927aa49a4cd42a109705c50fa58ed3833a52a20506f56cc13428cbccb734784a648c56de15ef64b0772de71","0x83798f4dcc27c08dcd23315bee084a9821f39eed4c35ef45ba5079de93e7cf49633eea6d0f30b20c252c941f615f6ccb","0x8eb7dd3ccc06165c3862d4e32d7fd09a383e0226fa06909ddf4e693802fd5c4324407d86c32df1fdc4438853368db6ce","0xa98ae7e54d229bac164d3392cb4ab9deeb66108cd6871bd340cbc9170f29d4602a2c27682f9d2fa3ad8019e604b6016a","0x8345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c","0x8da7f6c67fb6018092a39f24db6ea661b1ead780c25c0de741db9ae0cfc023f06be36385de6a4785a47c9f92135ea37d","0x875a795a82ae224b00d4659eb1f6a3b024f686bfc8028b07bf92392b2311b945afc3d3ab346a1d4de2deac1b5f9c7e0d","0xabc2344dc831a4bc0e1ec920b5b0f774bd6465f70199b69675312c4993a3f3df50fe4f30693e32eb9c5f8e3a70e4e7c4","0xb8e551f550803ec5e67717c25f109673b79284e923c9b25558a65864e0d730aeaecab0ee24448226e5dd9da3070080a2","0xab83dfefb120fab7665a607d749ef1765fbb3cc0ba5827a20a135402c09d987c701ddb5b60f0f5495026817e8ab6ea2e","0x90c0c1f774e77d9fad044aa06009a15e33941477b4b9a79fa43f327608a0a54524b3fcef0a896cb0df790e9995b6ebf1","0xab23c89f138f4252fc3922e24b7254743af1259fa1aeae90e98315c664c50800cecfc72a4d45ee772f73c4bb22b8646f","0x865dfd7192acc296f26e74ae537cd8a54c28450f18d579ed752ad9e0c5dcb2862e160e52e87859d71f433a3d4f5ca393","0x82d333a47c24d4958e5b07be4abe85234c5ad1b685719a1f02131a612022ce0c726e58d52a53cf80b4a8afb21667dee1","0xb6ad11e5d15f77c1143b1697344911b9c590110fdd8dd09df2e58bfd757269169deefe8be3544d4e049fb3776fb0bcfb","0x8978bdb97d45647584b8b9971246421b2f93d9ac648b1ed6595ad8326f80c107344a2c85d1756cd2f56b748001d5fd30","0xb4e84be7005df300900c6f5f67cf288374e33c3f05c2f10b6d2ff754e92ea8577d55b91e22cea2782250a8bc7d2af46d","0xae5163dc807af48bc827d2fd86b7c37de5a364d0d504c2c29a1b0a243601016b21c0fda5d0a446b9cb2a333f0c08ab20","0xad297ab0ef5f34448ceffef73c7104791cacae92aed22df8def9034b0f111b2af4f4365259dccecb46a1208fd3354fcd","0x9081bebcd06b4976d992d98a499397a44da20650ad4a1e0fb15dc63db8744d60d70dff0c6e2c3bb43ee35d1940683d1b","0xb3b3c89c783ee18bc030384914fafb8608d54c370005c49085fe8de22df6e04828b082c2fe7b595bd884986d688345f5","0xa232213cdd2b3bbdf5f61e65d57e28ee988c2b48185c9ac59b7372bc05c5b5763e19086ceaefb597b8e2b21b30aaacde","0x8d8be92bde8af1b9df13d5a8ed8a3a01eab6ee4cf883d7987c1d78c0d7d9b53a8630541fddf5e324b6cf4900435b1df8","0xad84464b3966ec5bede84aa487facfca7823af383715078da03b387cc2f5d5597cdd7d025aa07db00a38b953bdeb6e3f","0x889586bc28e52a4510bc9e8f1e673835ff4f27732b3954b6b7cd371d10a453ba793cfdfacf4ce20ca819310e541198b5","0xb35220775df2432a8923a1e3e786869c78f1661ed4e16bd91b439105f549487fb84bbea0590124a1d7aa4e5b08a60143","0x911bb496153aa457e3302ea8e74427962c6eb57e97096f65cafe45a238f739b86d4b790debd5c7359f18f3642d7d774c","0x89db41a6183c2fe47cf54d1e00c3cfaae53df634a32cccd5cf0c0a73e95ee0450fc3d060bb6878780fbf5f30d9e29aac","0x8774d1d544c4cc583fb649d0bbba86c2d2b5abb4c0395d7d1dac08ab1a2cc795030bdbdce6e3213154d4f2c748ccdaef","0xa1dbd288ae846edbfba77f7342faf45bdc0c5d5ce8483877acce6d00e09ef49d30fb40d4764d6637658d5ac738e0e197","0xb74c0f5b4125900f20e11e4719f69bac8d9be792e6901800d93f7f49733bc42bfb047220c531373a224f5564b6e6ecbb","0xa73eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086","0x80fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a55","0x913e4eec6be4605946086d38f531d68fe6f4669777c2d066eff79b72a4616ad1538aae7b74066575669d7ce065a7f47d","0x97363100f195df58c141aa327440a105abe321f4ebc6aea2d5f56c1fb7732ebfa5402349f6da72a6182c6bbedaeb8567","0x8c8b694b04d98a749a0763c72fc020ef61b2bb3f63ebb182cb2e568f6a8b9ca3ae013ae78317599e7e7ba2a528ec754a","0xaf048ba47a86a6d110fc8e7723a99d69961112612f140062cca193d3fc937cf5148671a78b6caa9f43a5cf239c3db230","0x92e5cd122e484c8480c430738091f23f30773477d9850c3026824f1f58c75cf20365d950607e159717864c0760432edb","0xab03beff9e24a04f469555b1bc6af53aa8c49c27b97878ff3b4fbf5e9795072f4d2b928bff4abbbd72d9aa272d1f100e","0x9252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada","0x84614d2ae5bc594a0c639bed6b6a1dc15d608010848b475d389d43001346ed5f511da983cc5df62b6e49c32c0ef5b24c","0xa99987ba6c0eb0fd4fbd5020a2db501128eb9d6a9a173e74462571985403f33959fc2f526b9a424d6915a77910939fc3","0x87109a988e34933e29c2623b4e604d23195b0346a76f92d51c074f07ce322de8e1bef1993477777c0eb9a9e95c16785f","0x8e7cb413850ecb6f1d2ded9851e382d945a8fee01f8f55184c7b0817000073944c6b6c77164e0a2272c39410fde18e58","0xb4bf4717ad2d3fce3a11a84dee1b38469be9e783b298b200cc533be97e474bf94d6c7c591d3102992f908820bc63ac72","0x969b4bcd84cabd5ba5f31705de51e2c4096402f832fdf543d88eb41ebb55f03a8715c1ceea92335d24febbea17a3bdd7","0x92c057502d4de4935cf8af77f21ca5791f646286aead82753a62dfb06dbd1705df506a02f19517accb44177cb469f3e4","0x90f3659630d58bd08e2e0131f76283cf9de7aa89e0102c67e79ca05c5c7217b213c05668f3de82939d8414d1674dc6a1","0x8c3999317e8c6753e3e89651e5ba7fdea91ab1dda46fdb6902eccd4035ba1618a178d1cd31f6fbbacc773255d72995b3","0x881f1a1ac6a56a47f041f49266d0a2e146c35e42bf87c22a9bc23a363526959e4d3d0c7e7382be091246787ef25e33d5","0x866f9ebe3afe58f2fd3234c4635a215c7982a53df4fb5396d9614a50308020b33618606a434984ca408963093b8f916d","0xa49f744d9bbfbcdd106592646040a3322fbe36e628be501a13f5272ad545a149f06f59bd417df9ae1a38d08c5a2108fe","0xa60d5589316a5e16e1d9bb03db45136afb9a3d6e97d350256129ee32a8e33396907dc44d2211762967d88d3e2840f71b","0xb48e56bd66650adb1e4f0c68b745f35f08d9829a06dbd5c67b2cc03dcf4cc5f9a85c84654f9596163b59d693eab14c34","0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","0x99fb4a03d71921b6a56f5e39f42f281b96ee017e859f738fab6fbc51edbcf3b02b1276336d1f82391e495723ecbe337e","0xa9761c83d922ced991557c9913bedfbe34509ec68d34a791242ac0f96e30f87e29a19099199a38aac29037e0c8e939c6","0xafad69e0702e02012b2419bdc7250c94816e40286a238e5f83858c7be2f93be2ec3657dd6cd0ded9184d6c9646092d3e","0xa29e520a73ec28f4e2e45050c93080eeaee57af1108e659d740897c3ced76ceb75d106cb00d7ed25ec221874bf4b235a","0x91d2fe0eded16c39a891ba065319dabfe2c0c300f5e5f5c84f31f6c52344084f0bb60d79650fc1dfe8d2a26fe34bd1fa","0x97063101e86c4e4fa689de9521bb79575ed727c5799cf69c17bfe325033200fcecca79a9ec9636b7d93e6d64f7275977","0xb194e855fa3d9ab53cbfbc97e7e0ce463723428bb1ad25952713eac04d086bf2407bdb78f8b8173f07aa795bd5e491dc","0xb271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4","0xa4e8f4a4f81f855f46512af8cdcbc9ae8a7eb395a75f135e5569b758a8d92349681a0358500f2d41f4578d3f7ffaa90f","0x876a46a1e38a8ae4fbad9cb9336baed2f740b01fabb784233ae2f84ffc972aefbfc5458e815491ab63b42fcb67f6b7cb","0x8e62874e15daea5eb362fa4aaad371d6280b6ca3d4d86dae9c6d0d663186a9475c1d865cf0f37c22cb9e916c00f92f71","0x95eacc3adc09c827593f581e8e2de068bf4cf5d0c0eb29e5372f0d23364788ee0f9beb112c8a7e9c2f0c720433705cf0","0xacebcdddf7ac509202f9db4efbc0da9172f57b3e468f9b6c116c6b134c906256630d44c38a19ec0e4b569c5001a5a04c","0xa7b9a71c54b44f6738a77f457af08dc79f09826193197a53c1c880f15963c716cec9ff0fd0bcb8ab41bc2fe89c2711fa","0xa984a361f4eb059c693e8405075a81469157811e78c317bb3ca189b16cd5c3b2a567c65d78560ef2ca95e108dc5a211e","0xa1cd4b34c72719c9d2707d45cd91a213541dd467f294f225e11571fd2e1cea6aac4b94b904ec9e153ed3ac350856ad97","0x86fef261cd5bccd56c72bba1bfcb512c7b45015283dbea7458d6a33ab1edfb992139cfb0afd7b05a2dfb327b6c8f94dc","0xb098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a","0x8c62ca6abda1a9af02d5c477d2bbf4c00900328f3f03c45f5e1e6bc69a5be2b7acc2532a923f19cb4d4ab43d0d2f42ec","0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","0xb0675bcee7652a66c92dc254157eef380726c396b1c2f5b4e1905fff912003b7e790f31fb5542df57f1f465e0915e7a0","0xb3d106c404056e440519d8a1e657f249d9aae11325796404bb048c1792a12f8addf7aa29c5822893c8cc408527793d6a","0xa0ec3e71a719a25208adc97106b122809210faf45a17db24f10ffb1ac014fac1ab95a4a1967e55b185d4df622685b9e8","0xb12d0c357016caa5c0ec0a6bdc07e60c2af4631c477366eeb6ab4fffbd0ca40ab9ec195091478a2698bf26349b785ae8","0xb4ff0075497094519c49b4b56687a1b8c84878e110dc7f2bd492608f3977dfdc538f1c8e3f8941552552af121eab9772","0x812b2d0546aa77dec2d55406b0131ed580c079c1aeb76eb2ca076b7b58289fa9d781069a2e11fe2199f1e02c5dd70e6a","0xae08c32bac1e3ec1e2250803b1781b8004efb2ad7f215e2fe8feb9f9ec5ec14157a9395f9f0e92060d18f4b73b33c0c3","0x815c0c9f90323633f00c1382199b8c8325d66fda9b93e7147f6dee80484c5fc4ef8b4b1ec6c64fab0e23f198beefa9ea","0xaa10e1055b14a89cc3261699524998732fddc4f30c76c1057eb83732a01416643eb015a932e4080c86f42e485973d240","0xab812b452a959fd9cbca07925045312f94e45eb1a7129b88ea701b2c23c70ae18a3c4a1e81389712c6c7d41e748b8c7d","0x80e8e7de168588f5ac5f3b9f2fabcadc0c4f50c764f6a4abf8231675fec11277d49e7357c3b5b681566e6a3d32b557e1","0xb3dc963ef53ae9b6d83ce417c5d417a9f6cc46beaa5fcf74dc59f190c6e9c513e1f57a124a0ef8b6836e4c8928125500","0x8ff7cc69f007f11481c91c6f9b20698998a0c2e9a2928bec8eea7507c7ad73a9d1d218cfdb279c4d2132d7da6c9e513e","0x8623144b531c2852fb755a4d8b4c9b303a026de6f99b1e88a1e91fa82bc10d6c7a9d8dad7926b6b7afd21ca4edb92408","0x84a3f285f8a8afc70b2c5b2c93e8ab82668def5e21601888fac3d2c0cdf947480c97089ba4ad04e786d4b771c8988c75","0xa7e53203bbed6adaa99c54f786622592dcaa4cd702e9aaaa355b8dcf302301f8b8dfec87625a9560079d3f8daf076c5d","0xb3f095233b798f4eb74be9d7d13b95800c9421875bc58f7bab4709840881fbfbe1eb133236eead9f469dde9603f06e46","0xb3c8a118a25b60416b4e6f9e0bc7cb4a520b22b1982f4d6ba47d3f484f0a98d000eed8f5019051847497f24fd9079a74","0x927e6e88fe7641155e68ff8328af706b5f152125206fe32aeab19432f17ec925ed6452489cf22bee1f563096cbd1dae6","0x9446407bcd8e5efe9f2ac0efbfa9e07d136e68b03c5ebc5bde43db3b94773de8605c30419eb2596513707e4e7448bb50","0x99b2f703619c4472a1039f532bf97f3771a870834f08d3b84fc914a75859fd0902725b40f1a6dabe7f901ac9c23f0842","0x8035a49b18a5e6223952e762185cc2f992f7eabdd1fbd9d0a7467605d65de6fe89ec90d778cb2835f4e2abe84fb67983","0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","0xa74fb46295a7ba2f570e09c4b8047a5833db7bf9fea68be8401bd455430418fe5485be0b41c49bd369f850dbfd991ce3","0x82681717d96c5d63a931c4ee8447ca0201c5951f516a876e78dcbc1689b9c4cf57a00a61c6fd0d92361a4b723c307e2d","0xb57520f5150ed646e8c26a01bf0bd15a324cc66fa8903f33fa26c3b4dd16b9a7c5118fdac9ee3eceba5ff2138cdce8f0","0xa222487021cdd811ed4410ad0c3006e8724dc489a426a0e17b4c76a8cd8f524cd0e63fac45dc8186c5ce1127162bec83","0xa6ba3250cd25bd8965d83a177ff93cf273980a7939160b6814a1d2f3cf3006c5a61b0d1c060aa48d33da7b24487eaf43","0xa8b15373c351e26e5dc5baba55cb2e1e014f839a7938764ee2def671bd7ac56c3f8b4c9c330f6ae77500d3f7118eb6e8","0x8f3f78ee37dbcbbc784fa2a75e047e02f8748af86365f3961cfc1b21055e552b46ec0377085da06914e0cffec0d3f0a4","0x997b2de22feea1fb11d265cedac9b02020c54ebf7cbc76ffdfe2dbfda93696e5f83af8d2c4ff54ce8ee987edbab19252","0x81ccc19e3b938ec2405099e90022a4218baa5082a3ca0974b24be0bc8b07e5fffaed64bef0d02c4dbfb6a307829afc5c","0x995b103d85d9e60f971e05c57b1acebf45bd6968b409906c9efea53ce4dc571aa4345e49c34b444b9ab6b62d13e6630b","0x99bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3","0xa64609779de550798ce1b718904bfd6f15e41dc56a14928ab1e6f43bba84d706f5ce39022a34e3fb2e113af695c52473","0x8a75c55208585181c6cef64a26b56d6a1b27ef47b69162b2538724575c2dff045ec54a9d321fe662735871b825c5aa3c","0x82de0e98b08925f379d1b2c40e30195f610841409ab3724ad3f2d173513e1d884c8b27aff402cd0353f79e61c7b4addb","0xafb72b4c111da98379f195da4e5c18462acc7ece85cd66894fbaf69ddab3d3bb0b6957ea0042b7705937919189e6a531","0xb58160d3dc5419cfa1f22e54e5135d4f24f9c66565da543a3845f7959660fa1d15c815b9c8ae1160dd32821a035640c0","0x89bdc5f82877823776a841cd8e93877c0e5e0b55adcebaafaf304d6460ab22d32bcd7e46e942ec4d8832eaa735b08923","0xb4aa2583a999066ec6caa72a3fc19e80d8936f6856d447dd043aa9b126aa63bcaac876266d80913071777984d8d30563","0xa762624bc58176cdfa2d8f83629b897bb26a2fad86feb50f1b41603db2db787b42429e3c045d7df8f7ea55c0582c9069","0xb8357a39c42f80953e8bc9908cb6b79c1a5c50ed3bbc0e330577a215ac850e601909fa5b53bed90c744e0355863eaa6e","0x9847ef9b7f43678bb536a27ab3aecee8cc3eedfe834e1214eaaeb00dc07bc20fd69af3319c043e62a29effd5ffb37e16","0xa7d10210c48f84d67a8af3f894062397b22cb48fa3f0936c039400638908f5e976d9783295aad8af9ac602f6bf3b10a7","0xa8e1bc8a6493fc7ed293f44c99b28d31561c4818984891e5817c92d270c9408241ceaca44ab079409d13cc0df9e2e187","0x98a3e7179e2ad305857bf326d2c4b3924af478b704a944a416f4bc40be691fa53793ae77dcfa409adaee4bced903dfb1","0x826a146c3580b547594469b248195c9003205f48d778e8344caff117b210b24351892c5b0ace399a3a66edebc24c180f","0x95cc6e3d4e3ec850b01b866ccec0e8093a72311bcc4c149377af66586471ca442d5f61ecbb8878352f0193ddea928805","0x925ef08813aa7d99fbb6cc9d045921a43bcf8c9721c437478afd3d81e662df84497da96ddbf663996503b433fd46af28","0x8b737f47d5b2794819b5dc01236895e684f1406f8b9f0d9aa06b5fb36dba6c185efec755b77d9424d09b848468127559","0x8988349654c5fdf666ec4647d398199cc609bb8b3d5108b9e5678b8d0c7563438f3fbcf9d30ab3ef5df22aad9dc673b2","0xaa44163d9f9776392ce5f29f1ecbcc177f8a91f28927f5890c672433b4a3c9b2a34830842d9396dc561348501e885afb","0x8fe55d12257709ae842f8594f9a0a40de3d38dabdf82b21a60baac927e52ed00c5fd42f4c905410eacdaf8f8a9952490","0xaed3e9f4bb4553952b687ba7bcac3a5324f0cceecc83458dcb45d73073fb20cef4f9f0c64558a527ec26bad9a42e6c4c","0x86d386aaf3dff5b9331ace79f6e24cff8759e7e002bbe9af91c6de91ab693f6477551e7ee0a1e675d0fc614814d8a8aa","0x8856c31a50097c2cc0c9a09f89e09912c83b9c7838b2c33d645e95d0f35130569a347abc4b03f0cb12a89397b899d078","0xa65a82f7b291d33e28dd59d614657ac5871c3c60d1fb89c41dd873e41c30e0a7bc8d57b91fe50a4c96490ebf5769cb6b","0x98536b398e5b7f1276f7cb426fba0ec2b8b0b64fba7785ea528bebed6ae56c0dee59f5d295fa4c97a1c621ecacfc4ec3","0x8d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a41495083582","0xa52cd15bb5cb9bdd7cef27b3644356318d0fa9331f9388edc12b204e2eb56face5604e4c3bb9631ef5bd438ff7821523","0x955bcc6bca53e7a6afa0e83c8443364e0e121f416d6024a442253d1e9d805407f2c7f7d9944770db370935e8722e5f51","0x95c38f73d6e65f67752ae3f382e8167d7d0d18ced0ca85a1d6b9ba5196f89cf9aed314a7d80b911806d5310584adc1b8","0x8e34d569ec169d15c9a0de70c15bf1a798ce9c36b30cca911ef17d6c183de72614575629475b57147f1c37602f25d76c","0xb0ea38f0b465ae0f0b019494aecd8a82cb7c496ecfab60af96d0bda1a52c29efd4d4e5b270f3d565eb3485b2aaf3d87c","0x90bc674d83e1b863fec40140a2827c942e575bd96bc5e60339c51089bab5fd445ae0c99ab9f1b5074b54682ac9c4a275","0x9417af4462cc8d542f6f6c479866f1c9fa4768069ef145f9acdd50221b8956b891ceec3ef4ec77c54006b00e38156cee","0xa0d79afac7df720f660881e20f49246f64543e1655a0ab9945030e14854b1dd988df308ed374fc6130586426c6cf16a4","0x899729f080571e25fee93538eb21304a10600d5ceb9807959d78c3967d9ba32b570d4f4105626e5972ccf2e24b723604","0xada7d351b72dcca4e46d7198e0a6fae51935f9d3363659be3dfaa5af8b1c033d4c52478f8b2fbf86f7318142f07af3a7","0xa72841987e4f219d54f2b6a9eac5fe6e78704644753c3579e776a3691bc123743f8c63770ed0f72a71e9e964dbf58f43","0xae6f240e7a9baa3e388eb3052c11d5b6ace127b87a7766970db3795b4bf5fc1de17a8ee8528d9bef0d6aefcfb67a7761","0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","0x95fa3538b8379ff2423656ab436df1632b74311aaef49bc9a3cbd70b1b01febaf2f869b4127d0e8e6d18d7d919f1f6d8","0x8025cdadf2afc5906b2602574a799f4089d90f36d73f94c1cf317cfc1a207c57f232bca6057924dd34cff5bde87f1930","0xa1402173873adf34e52c43feacd915eb141d77bf16bc5180e1ee86762b120411fffa7cb956cf0e625364e9a2d56f01f3","0x91887afbd7a83b8e9efb0111419c3d0197728d56ef96656432fbc51eb7ed736bb534dad59359629cf9c586461e251229","0x8e6ad45832f4ba45f5fe719022e6b869f61e1516d8835586b702764c474befe88591722045da41ab95aafbf0387ecd18","0x8a8409bd78ea4ff8d6e3e780ec93a3b017e639bbdaa5f399926e07ce2a939c8b478699496da2599b03a8fb62328cb1da","0x912b440c4d3c8177a012cea1cc58115cbc6795afc389363c7769bf419b9451bcde764586cf26c15e9906ea54837d031a","0xa82f4819a86b89c9cbd6d164e959fe0061e6a9b705862be2952d3cf642b515bd5edae4e6338e4eeb975a9082ff205bb7","0x8ab3f4fbbea07b771705f27bb470481ab6c44c46afcb317500df564b1177fa6dc7a3d27506b9e2d672ac1edd888a7a65","0x85ddb75efa05baaa727d659b09d268b606f81029796e106b55ff8d47fdb74a7d237286dfeadde6cc26d53d56204eff65","0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","0xb20c190dd46da9fe928d277ccfa0b804b942f5a181adb37fc1219e028fb7b48d63261248c6d939d68d4d8cd2c13a4f80","0xa20cca122e38a06188877a9f8f0ca9889f1dd3ffb22dddf76152604c72fc91519e414c973d4616b986ff64aec8a3208b","0xa1555b4e598691b619c576bad04f322fc6fe5898a53865d330097460e035e9d0e9169089a276f15f8977a39f27f9aec3","0x97e827da16cbd1da013b125a96b24770e0cad7e5af0ccd9fb75a60d8ba426891489d44497b091e1b0383f457f1b2251c","0x908ee03816f68a78d1da050c8ec125d3dac2306178d4f547d9c90bd58b3985a20f6fef507dcc81f010d70262d9abab68","0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","0x951f3707389db5012848b67ab77b63da2a73118b7df60f087fa9972d8f7fef33ed93e5f25268d4237c2987f032cd613f","0x8f021f52cbd6c46979619100350a397154df00cae2efe72b22ad0dd66747d7de4beecd9b194d0f7016e4df460a63a8ea","0xa272e9d1d50a4aea7d8f0583948090d0888be5777f2846800b8281139cd4aa9eee05f89b069857a3e77ccfaae1615f9c","0x8c7b0e11f9bc3f48d84013ef8e8575aeb764bc1b9bf15938d19eb191201011365c2b14d78139a0f27327cb21c1b8bf3d","0xab48aa2cc6f4a0bb63b5d67be54ac3aed10326dda304c5aeb9e942b40d6e7610478377680ab90e092ef1895e62786008","0x8515e7f61ca0470e165a44d247a23f17f24bf6e37185467bedb7981c1003ea70bbec875703f793dd8d11e56afa7f74ba","0x8f81b19ee2e4d4d0ff6384c63bacb785bc05c4fc22e6f553079cc4ff7e0270d458951533458a01d160b22d59a8bd9ab5","0xa6f68f09fc2b9df0ed7b58f213319dd050c11addaef31231853c01079fb225d0f8aa6860acd20bc1de87901f6103b95f","0x85ae0ef8d9ca996dbfebb49fa6ec7a1a95dff2d280b24f97c613b8e00b389e580f0f08aa5a9d5e4816a6532aaebc23bf","0xb88b54fe7990227c6d6baa95d668d2217626b088579ddb9773faf4e8f9386108c78ddd084a91e69e3bdb8a90456030c6","0xaa14e001d092db9dc99746fcfc22cd84a74adaa8fc483e6abf697bd8a93bda2ee9a075aca303f97f59615ed4e8709583","0x9717182463fbe215168e6762abcbb55c5c65290f2b5a2af616f8a6f50d625b46164178a11622d21913efdfa4b800648d","0xb2a3cedd685176071a98ab100494628c989d65e4578eec9c5919f2c0321c3fc3f573b71ef81a76501d88ed9ed6c68e13","0xb203b206005c6db2ecfab163e814bacb065872485d20ac2d65f982b4696617d12e30c169bf10dbe31d17bf04a7bdd3bc","0x8d08a52857017fd5cab3a821ccb8f5908c96cf63c5a5647209c037e2ea1c56f9650ec030b82ffdce76d37672d942e45b","0x84d1e4703d63ac280cd243c601def2b6cc0c72fb0a3de5e83149d3ac558c339f8b47a977b78fd6c9acf1f0033ae71a88","0x8e04ad5641cc0c949935785184c0b0237977e2282742bc0f81e58a7aa9bfee694027b60de0db0de0539a63d72fd57760","0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","0xa06d4f9703440b365bdce45e08442ec380165c5051c30e9df4d25571cba350ce5ab5e07810e1d1476c097a51d7734630","0x950c598dc627cd58cd7d34e0dd055daf92c9bc89235c3a5d3aacf594af97f99eb0f02a6f353238386626ee67462cd9a2","0x8e876b110d8ad35997a0d4044ca03e8693a1532497bcbbb8cdb1cd4ce68fe685eb03209b3d2833494c0e79c1c1a8c60b","0x803968608f3f1447912bb635f200ed5b0bc2f3ade2736bccb05a70c83c7df55602a2723f6b9740e528456eeba51ced64","0x931cdb87f226ad70ec6e0ff47e8420481d080e57951443ad804411a7b78dc2f2e99cbdf2463dda39d6be2ad95c0730e1","0x931bea4bc76fad23ba9c339622ddc0e7d28904a71353c715363aa9e038f64e990ef6ef76fc1fc431b9c73036dd07b86c","0x9929f70ba8c05847beb74c26dd03b4ec04ca8895bc6d9f31d70bd4231329c2f35799d4404a64f737e918db55eec72d25","0x93abf6639e499a3d83e3e2369882ac8dbe3e084e7e766d166121897497eabee495728365d9d7b9d9399a14831d186ff1","0xb29e53ff7b1595375136703600d24237b3d62877a5e8462fad67fc33cbde5bd7fcfac10dde01f50944b9f8309ad77751","0x95906ec0660892c205634e21ad540cbe0b6f7729d101d5c4639b864dea09be7f42a4252c675d46dd90a2661b3a94e8ca","0xafdb131642e23aedfd7625d0107954a451aecc9574faeeec8534c50c6156c51d3d0bdb8174372d91c560a0b7799b4e8e","0x97631345700c2eddaeb839fc39837b954f83753ef9fe1d637abcfc9076fcb9090e68da08e795f97cfe5ef569911969ec","0x8bcfb0520b9d093bc59151b69e510089759364625589e07b8ca0b4d761ce8e3516dbdce90b74b9b8d83d9395091b18bf","0xb54d0e0f7d368cd60bc3f47e527e59ef5161c446320da4ed80b7af04a96461b2e372d1a1edf8fe099e40bff514a530af","0x8fbdab59d6171f31107ff330af9f2c1a8078bb630abe379868670c61f8fa5f05a27c78f6a1fd80cde658417ef5d6a951","0x9718567efc4776425b17ac2450ae0c117fdf6e9eeeabb4ede117f86bee413b31b2c07cf82e38c6ecaf14001453ce29d0","0xb0c9351b9604478fb83646d16008d09cedf9600f57b0adbf62dd8ad4a59af0f71b80717666eeec697488996b71a5a51e","0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48","0x942d5ed35db7a30cac769b0349fec326953189b51be30b38189cd4bb4233cfe08ccc9abe5dd04bf691f60e5df533d98a","0xa4c90c14292dfd52d27d0e566bbfa92a2aebb0b4bcd33d246d8eeb44156c7f2fd42ba8afb8e32699724c365fc583e904","0xb29043a7273d0a2dbc2b747dcf6a5eccbd7ccb44b2d72e985537b117929bc3fd3a99001481327788ad040b4077c47c0d","0xb08d72a2c2656679f133a13661d9119ab3a586e17123c11ca17dc538d687576789d42ab7c81daa5af6506cc3bac9d089","0x98ff9389cf70ee9e0ae5df1474454ab5d7529cab72db2621e1b8b40b473168c59689a18838c950de286ea76dfdf9dc24","0x93b15273200e99dbbf91b24f87daa9079a023ccdf4debf84d2f9d0c2a1bf57d3b13591b62b1c513ec08ad20feb011875","0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","0x90239bd66450f4cc08a38402adc026444230fd893b752c7dfc4699539044a1fd39ba133cbdc330b7fc19538e224725cb","0x8ed36ed5fb9a1b099d84cba0686d8af9a2929a348797cd51c335cdcea1099e3d6f95126dfbc93abcfb3b56a7fc14477b","0x8215b57dd02553c973052c69b0fecefa813cc6f3420c9b2a1cffae5bd47e3a7a264eaec4ed77c21d1f2f01cf130423c0","0xa7a9bebe161505ba51f5fb812471f8fb8702a4c4ad2f23de1008985f93da644674edb2df1096920eaecb6c5b00de78cd","0x8fa4a674911c27c9306106ffcc797e156b27dab7a67ce7e301cfd73d979331f8edcd4d3397616dd2821b64e91b4d9247","0xb2277b279519ba0d28b17c7a32745d71ceb3a787e89e045fe84aaadf43a1d388336ec4c8096b17997f78d240ab067d07","0x8a3a08b7dae65f0e90a3bc589e13019340be199f092203c1f8d25ee9989378c5f89722430e12580f3be3e4b08ae04b1b","0x825abb120ae686f0e3c716b49f4086e92b0435413a137a31bcf992e4851ecdf9d74ceea3d6e063d7009ec8b8e504fb30","0xa8f5540a9977fd2ee7dea836ed3dafa5d0b1fc9c5d5f1689e91ec49cdef989976c51502c3764025ef8ff542ef3b170ea","0x87dc2da68d1641ffe8e6ca1b675767dc3303995c5e9e31564905c196e3109f11345b8877d28d116e8ae110e6a6a7c7a4","0x9725ff209f8243ab7aceda34f117b4c402e963cc2a3a85d890f6d6d3c0c96e0b0acbed787fe4fa7b37197c049ab307ea","0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","0xa69ec7c89252e2531c057ebeb86098e3b59ca01558afd5f6de4ec40370cb40de07856334770ecacbf23e123201266f67","0xb8ae7b57f57bf505dd2623a49017da70665f5b7f5ac74d45d51883aac06881467b5ef42964bd93ff0f3b904e8239e7b4","0x8aea7d8eb22063bcfe882e2b7efc0b3713e1a48dd8343bed523b1ab4546114be84d00f896d33c605d1f67456e8e2ed93","0xaf3dc44695d2a7f45dbe8b21939d5b4015ed1697131184ce19fc6bb8ff6bbc23882348b4c86278282dddf7d718e72e2b","0x96413b2d61a9fc6a545b40e5c2e0064c53418f491a25994f270af1b79c59d5cf21d2e8c58785a8df09e7265ac975cb28","0x8f207bd83dad262dd9de867748094f7141dade78704eca74a71fd9cfc9136b5278d934db83f4f3908d7a3de84d583fc9","0x86bdb0a034dab642e05cb3e441d67f60e0baf43fa1140e341f028a2c4b04f3f48a0cdc5ee1c7825dcdc4019b004ec073","0xb8f1a9edf68006f913b5377a0f37bed80efadc4d6bf9f1523e83b2311e14219c6aa0b8aaee79e47a9977e880bad37a8e","0xa3caedb9c2a5d8e922359ef69f9c35b8c819bcb081610343148dc3a2c50255c9caa6090f49f890ca31d853384fc80d00","0x851f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e","0xb614644e726aa24b10254dd0a639489211ec2f38a69966b5c39971069ea046b83ee17cf0e91da740e11e659c0c031215","0xa19dd710fbf120dbd2ce410c1abeb52c639d2c3be0ec285dc444d6edea01cee272988e051d5c9c37f06fea79b96ba57b","0xa2ca1572cca0b43a2652dd519063311003ca6eccab5e659fc4a39d2411608e12e28294973aae5be678da60b0c41ca5f0","0xb783a70a1cf9f53e7d2ddf386bea81a947e5360c5f1e0bf004fceedb2073e4dd180ef3d2d91bee7b1c5a88d1afd11c49","0xacb58c81ae0cae2e9d4d446b730922239923c345744eee58efaadb36e9a0925545b18a987acf0bad469035b291e37269","0xa9e1558a3ab00c369a1ce75b98f37fd753dbb1d5e86c4514858b1196dfd149aa7b818e084f22d1ad8d34eba29ce07788","0xa23cf58a430d6e52c8099ecee6756773c10183e1e3c6871eb74c7f8b933943a758872d061a961c9961f2e06b4c24f2c4","0x8b5b5399aefcd717d8fc97ea80b1f99d4137eb6fa67afd53762ee726876b6790f47850cf165901f1734487e4a2333b56","0x8e0b26637a9bc464c5a9ac490f6e673a0fb6279d7918c46a870307cf1f96109abf975d8453dc77273f9aba47c8eb68c2","0xb4d670b79d64e8a6b71e6be0c324ff0616ad1a49fbb287d7bf278ec5960a1192b02af89d04918d3344754fb3284b53a1","0x86de7221af8fd5bb4ee28dad543997cde0c5cd7fa5ec9ad2b92284e63e107154cc24bf41e25153a2a20bcae3add50542","0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","0xb422f8004e8e7c47cf4bc69c3a551b3491916e415b824c2d064204d55c465fb6839834a3f37d8a9271c75e5e2d1f3718","0x8a5898f52fe9b20f089d2aa31e9e0a3fe26c272ce087ffdfd3490d3f4fa1cacbec4879f5f7cd7708e241a658be5e4a2f","0x9294795d066f5e24d506f4b3aa7613b831399924cee51c160c92eb57aad864297d02bfda8694aafd0a24be6396eb022a","0xa339d48ea1916bad485abb8b6cbdcafdba851678bfe35163fa2572c84553386e6ee4345140eab46e9ddbffc59ded50d5","0xa325677c8eda841381e3ed9ea48689b344ed181c82937fa2651191686fd10b32885b869ce47ca09fbe8bd2dbcaa1c163","0x8fc502abb5d8bdd747f8faf599b0f62b1c41145d30ee3b6ff1e52f9370240758eac4fdb6d7fb45ed258a43edebf63e96","0x837d6c15c830728fc1de0e107ec3a88e8bbc0a9c442eb199a085e030b3bcdfb08e7155565506171fe838598b0429b9cc","0x8eb8b1b309a726fa5af6a6228385214a48788a1f23fe03cd46e16e200ed7d8909394d2e0b442ef71e519215765ca6625","0xa07d173f08193f50544b8f0d7e7826b0758a2bedfdd04dcee4537b610de9c647c6e40fdf089779f1ec7e16ca177c9c35","0x9780e853f8ce7eda772c6691d25e220ca1d2ab0db51a7824b700620f7ac94c06639e91c98bb6abd78128f0ec845df8ef","0x820c62fa9fe1ac9ba7e9b27573036e4e44e3b1c43723e9b950b7e28d7cf939923d74bec2ecd8dc2ade4bab4a3f573160","0x8353cad3430c0b22a8ec895547fc54ff5791382c4060f83c2314a4fcd82fb7e8e822a9e829bace6ec155db77c565bcb3","0xb91ab4aed4387ed938900552662885cdb648deaf73e6fca210df81c1703eb0a9cbed00cecf5ecf28337b4336830c30c8","0xb12332004f9ecc80d258fe5c7e6a0fba342b93890a5ea0ccda642e7b9d79f2d660be4b85d6ca744c48d07a1056bc376d","0x88eeb6e5e927aa49a4cd42a109705c50fa58ed3833a52a20506f56cc13428cbccb734784a648c56de15ef64b0772de71","0x83798f4dcc27c08dcd23315bee084a9821f39eed4c35ef45ba5079de93e7cf49633eea6d0f30b20c252c941f615f6ccb","0x8eb7dd3ccc06165c3862d4e32d7fd09a383e0226fa06909ddf4e693802fd5c4324407d86c32df1fdc4438853368db6ce","0xa98ae7e54d229bac164d3392cb4ab9deeb66108cd6871bd340cbc9170f29d4602a2c27682f9d2fa3ad8019e604b6016a","0x8345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c","0x8da7f6c67fb6018092a39f24db6ea661b1ead780c25c0de741db9ae0cfc023f06be36385de6a4785a47c9f92135ea37d","0x875a795a82ae224b00d4659eb1f6a3b024f686bfc8028b07bf92392b2311b945afc3d3ab346a1d4de2deac1b5f9c7e0d","0xabc2344dc831a4bc0e1ec920b5b0f774bd6465f70199b69675312c4993a3f3df50fe4f30693e32eb9c5f8e3a70e4e7c4","0xb8e551f550803ec5e67717c25f109673b79284e923c9b25558a65864e0d730aeaecab0ee24448226e5dd9da3070080a2","0xab83dfefb120fab7665a607d749ef1765fbb3cc0ba5827a20a135402c09d987c701ddb5b60f0f5495026817e8ab6ea2e","0x90c0c1f774e77d9fad044aa06009a15e33941477b4b9a79fa43f327608a0a54524b3fcef0a896cb0df790e9995b6ebf1","0xab23c89f138f4252fc3922e24b7254743af1259fa1aeae90e98315c664c50800cecfc72a4d45ee772f73c4bb22b8646f","0x865dfd7192acc296f26e74ae537cd8a54c28450f18d579ed752ad9e0c5dcb2862e160e52e87859d71f433a3d4f5ca393","0x82d333a47c24d4958e5b07be4abe85234c5ad1b685719a1f02131a612022ce0c726e58d52a53cf80b4a8afb21667dee1","0xb6ad11e5d15f77c1143b1697344911b9c590110fdd8dd09df2e58bfd757269169deefe8be3544d4e049fb3776fb0bcfb","0x8978bdb97d45647584b8b9971246421b2f93d9ac648b1ed6595ad8326f80c107344a2c85d1756cd2f56b748001d5fd30","0xb4e84be7005df300900c6f5f67cf288374e33c3f05c2f10b6d2ff754e92ea8577d55b91e22cea2782250a8bc7d2af46d","0xae5163dc807af48bc827d2fd86b7c37de5a364d0d504c2c29a1b0a243601016b21c0fda5d0a446b9cb2a333f0c08ab20","0xad297ab0ef5f34448ceffef73c7104791cacae92aed22df8def9034b0f111b2af4f4365259dccecb46a1208fd3354fcd","0x9081bebcd06b4976d992d98a499397a44da20650ad4a1e0fb15dc63db8744d60d70dff0c6e2c3bb43ee35d1940683d1b","0xb3b3c89c783ee18bc030384914fafb8608d54c370005c49085fe8de22df6e04828b082c2fe7b595bd884986d688345f5","0xa232213cdd2b3bbdf5f61e65d57e28ee988c2b48185c9ac59b7372bc05c5b5763e19086ceaefb597b8e2b21b30aaacde","0x8d8be92bde8af1b9df13d5a8ed8a3a01eab6ee4cf883d7987c1d78c0d7d9b53a8630541fddf5e324b6cf4900435b1df8","0xad84464b3966ec5bede84aa487facfca7823af383715078da03b387cc2f5d5597cdd7d025aa07db00a38b953bdeb6e3f","0x889586bc28e52a4510bc9e8f1e673835ff4f27732b3954b6b7cd371d10a453ba793cfdfacf4ce20ca819310e541198b5","0xb35220775df2432a8923a1e3e786869c78f1661ed4e16bd91b439105f549487fb84bbea0590124a1d7aa4e5b08a60143","0x911bb496153aa457e3302ea8e74427962c6eb57e97096f65cafe45a238f739b86d4b790debd5c7359f18f3642d7d774c","0x89db41a6183c2fe47cf54d1e00c3cfaae53df634a32cccd5cf0c0a73e95ee0450fc3d060bb6878780fbf5f30d9e29aac","0x8774d1d544c4cc583fb649d0bbba86c2d2b5abb4c0395d7d1dac08ab1a2cc795030bdbdce6e3213154d4f2c748ccdaef","0xa1dbd288ae846edbfba77f7342faf45bdc0c5d5ce8483877acce6d00e09ef49d30fb40d4764d6637658d5ac738e0e197","0xb74c0f5b4125900f20e11e4719f69bac8d9be792e6901800d93f7f49733bc42bfb047220c531373a224f5564b6e6ecbb","0xa73eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086","0x80fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a55","0x913e4eec6be4605946086d38f531d68fe6f4669777c2d066eff79b72a4616ad1538aae7b74066575669d7ce065a7f47d","0x97363100f195df58c141aa327440a105abe321f4ebc6aea2d5f56c1fb7732ebfa5402349f6da72a6182c6bbedaeb8567","0x8c8b694b04d98a749a0763c72fc020ef61b2bb3f63ebb182cb2e568f6a8b9ca3ae013ae78317599e7e7ba2a528ec754a","0xaf048ba47a86a6d110fc8e7723a99d69961112612f140062cca193d3fc937cf5148671a78b6caa9f43a5cf239c3db230","0x92e5cd122e484c8480c430738091f23f30773477d9850c3026824f1f58c75cf20365d950607e159717864c0760432edb","0xab03beff9e24a04f469555b1bc6af53aa8c49c27b97878ff3b4fbf5e9795072f4d2b928bff4abbbd72d9aa272d1f100e","0x9252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada","0x84614d2ae5bc594a0c639bed6b6a1dc15d608010848b475d389d43001346ed5f511da983cc5df62b6e49c32c0ef5b24c","0xa99987ba6c0eb0fd4fbd5020a2db501128eb9d6a9a173e74462571985403f33959fc2f526b9a424d6915a77910939fc3","0x87109a988e34933e29c2623b4e604d23195b0346a76f92d51c074f07ce322de8e1bef1993477777c0eb9a9e95c16785f","0x8e7cb413850ecb6f1d2ded9851e382d945a8fee01f8f55184c7b0817000073944c6b6c77164e0a2272c39410fde18e58"]},"next_sync_committee_branch":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"signature_slot":"1234","sync_aggregate":{"sync_committee_bits":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","sync_committee_signature":"0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}},"version":"bellatrix"},{"data":{"attested_header":{"beacon":{"body_root":"0x1bcf7977a0413b2bbc234ea1e6b63806cb4d24fadf1d9faab698f2828e804542","parent_root":"0x98d75aab2adb4f8e8dbfbf5c81c61eae2e75558171a9cb38cde5633857ef7ef0","proposer_index":"144","slot":"160","state_root":"0xd9a68463000f9b3092347bfc6a7e31e5991e5c6b763c4358e0186640dcf5b8f2"}},"finality_branch":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"finalized_header":{"beacon":{"body_root":"0x1bcf7977a0413b2bbc234ea1e6b63806cb4d24fadf1d9faab698f2828e804542","parent_root":"0x98d75aab2adb4f8e8dbfbf5c81c61eae2e75558171a9cb38cde5633857ef7ef0","proposer_index":"144","slot":"160","state_root":"0xd9a68463000f9b3092347bfc6a7e31e5991e5c6b763c4358e0186640dcf5b8f2"}},"next_sync_committee":{"aggregate_public_key":"0xb7dad3c14f74e6e9f88d341983d8daf541d59f1dc7373eed42bb62e55948eb0bf0c34ebda79890b11746b45e2faa1dd5","committee":["0xb4bf4717ad2d3fce3a11a84dee1b38469be9e783b298b200cc533be97e474bf94d6c7c591d3102992f908820bc63ac72","0x969b4bcd84cabd5ba5f31705de51e2c4096402f832fdf543d88eb41ebb55f03a8715c1ceea92335d24febbea17a3bdd7","0x92c057502d4de4935cf8af77f21ca5791f646286aead82753a62dfb06dbd1705df506a02f19517accb44177cb469f3e4","0x90f3659630d58bd08e2e0131f76283cf9de7aa89e0102c67e79ca05c5c7217b213c05668f3de82939d8414d1674dc6a1","0x8c3999317e8c6753e3e89651e5ba7fdea91ab1dda46fdb6902eccd4035ba1618a178d1cd31f6fbbacc773255d72995b3","0x881f1a1ac6a56a47f041f49266d0a2e146c35e42bf87c22a9bc23a363526959e4d3d0c7e7382be091246787ef25e33d5","0x866f9ebe3afe58f2fd3234c4635a215c7982a53df4fb5396d9614a50308020b33618606a434984ca408963093b8f916d","0xa49f744d9bbfbcdd106592646040a3322fbe36e628be501a13f5272ad545a149f06f59bd417df9ae1a38d08c5a2108fe","0xa60d5589316a5e16e1d9bb03db45136afb9a3d6e97d350256129ee32a8e33396907dc44d2211762967d88d3e2840f71b","0xb48e56bd66650adb1e4f0c68b745f35f08d9829a06dbd5c67b2cc03dcf4cc5f9a85c84654f9596163b59d693eab14c34","0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","0x99fb4a03d71921b6a56f5e39f42f281b96ee017e859f738fab6fbc51edbcf3b02b1276336d1f82391e495723ecbe337e","0xa9761c83d922ced991557c9913bedfbe34509ec68d34a791242ac0f96e30f87e29a19099199a38aac29037e0c8e939c6","0xafad69e0702e02012b2419bdc7250c94816e40286a238e5f83858c7be2f93be2ec3657dd6cd0ded9184d6c9646092d3e","0xa29e520a73ec28f4e2e45050c93080eeaee57af1108e659d740897c3ced76ceb75d106cb00d7ed25ec221874bf4b235a","0x91d2fe0eded16c39a891ba065319dabfe2c0c300f5e5f5c84f31f6c52344084f0bb60d79650fc1dfe8d2a26fe34bd1fa","0x97063101e86c4e4fa689de9521bb79575ed727c5799cf69c17bfe325033200fcecca79a9ec9636b7d93e6d64f7275977","0xb194e855fa3d9ab53cbfbc97e7e0ce463723428bb1ad25952713eac04d086bf2407bdb78f8b8173f07aa795bd5e491dc","0xb271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4","0xa4e8f4a4f81f855f46512af8cdcbc9ae8a7eb395a75f135e5569b758a8d92349681a0358500f2d41f4578d3f7ffaa90f","0x876a46a1e38a8ae4fbad9cb9336baed2f740b01fabb784233ae2f84ffc972aefbfc5458e815491ab63b42fcb67f6b7cb","0x8e62874e15daea5eb362fa4aaad371d6280b6ca3d4d86dae9c6d0d663186a9475c1d865cf0f37c22cb9e916c00f92f71","0x95eacc3adc09c827593f581e8e2de068bf4cf5d0c0eb29e5372f0d23364788ee0f9beb112c8a7e9c2f0c720433705cf0","0xacebcdddf7ac509202f9db4efbc0da9172f57b3e468f9b6c116c6b134c906256630d44c38a19ec0e4b569c5001a5a04c","0xa7b9a71c54b44f6738a77f457af08dc79f09826193197a53c1c880f15963c716cec9ff0fd0bcb8ab41bc2fe89c2711fa","0xa984a361f4eb059c693e8405075a81469157811e78c317bb3ca189b16cd5c3b2a567c65d78560ef2ca95e108dc5a211e","0xa1cd4b34c72719c9d2707d45cd91a213541dd467f294f225e11571fd2e1cea6aac4b94b904ec9e153ed3ac350856ad97","0x86fef261cd5bccd56c72bba1bfcb512c7b45015283dbea7458d6a33ab1edfb992139cfb0afd7b05a2dfb327b6c8f94dc","0xb098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a","0x8c62ca6abda1a9af02d5c477d2bbf4c00900328f3f03c45f5e1e6bc69a5be2b7acc2532a923f19cb4d4ab43d0d2f42ec","0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","0xb0675bcee7652a66c92dc254157eef380726c396b1c2f5b4e1905fff912003b7e790f31fb5542df57f1f465e0915e7a0","0xb3d106c404056e440519d8a1e657f249d9aae11325796404bb048c1792a12f8addf7aa29c5822893c8cc408527793d6a","0xa0ec3e71a719a25208adc97106b122809210faf45a17db24f10ffb1ac014fac1ab95a4a1967e55b185d4df622685b9e8","0xb12d0c357016caa5c0ec0a6bdc07e60c2af4631c477366eeb6ab4fffbd0ca40ab9ec195091478a2698bf26349b785ae8","0xb4ff0075497094519c49b4b56687a1b8c84878e110dc7f2bd492608f3977dfdc538f1c8e3f8941552552af121eab9772","0x812b2d0546aa77dec2d55406b0131ed580c079c1aeb76eb2ca076b7b58289fa9d781069a2e11fe2199f1e02c5dd70e6a","0xae08c32bac1e3ec1e2250803b1781b8004efb2ad7f215e2fe8feb9f9ec5ec14157a9395f9f0e92060d18f4b73b33c0c3","0x815c0c9f90323633f00c1382199b8c8325d66fda9b93e7147f6dee80484c5fc4ef8b4b1ec6c64fab0e23f198beefa9ea","0xaa10e1055b14a89cc3261699524998732fddc4f30c76c1057eb83732a01416643eb015a932e4080c86f42e485973d240","0xab812b452a959fd9cbca07925045312f94e45eb1a7129b88ea701b2c23c70ae18a3c4a1e81389712c6c7d41e748b8c7d","0x80e8e7de168588f5ac5f3b9f2fabcadc0c4f50c764f6a4abf8231675fec11277d49e7357c3b5b681566e6a3d32b557e1","0xb3dc963ef53ae9b6d83ce417c5d417a9f6cc46beaa5fcf74dc59f190c6e9c513e1f57a124a0ef8b6836e4c8928125500","0x8ff7cc69f007f11481c91c6f9b20698998a0c2e9a2928bec8eea7507c7ad73a9d1d218cfdb279c4d2132d7da6c9e513e","0x8623144b531c2852fb755a4d8b4c9b303a026de6f99b1e88a1e91fa82bc10d6c7a9d8dad7926b6b7afd21ca4edb92408","0x84a3f285f8a8afc70b2c5b2c93e8ab82668def5e21601888fac3d2c0cdf947480c97089ba4ad04e786d4b771c8988c75","0xa7e53203bbed6adaa99c54f786622592dcaa4cd702e9aaaa355b8dcf302301f8b8dfec87625a9560079d3f8daf076c5d","0xb3f095233b798f4eb74be9d7d13b95800c9421875bc58f7bab4709840881fbfbe1eb133236eead9f469dde9603f06e46","0xb3c8a118a25b60416b4e6f9e0bc7cb4a520b22b1982f4d6ba47d3f484f0a98d000eed8f5019051847497f24fd9079a74","0x927e6e88fe7641155e68ff8328af706b5f152125206fe32aeab19432f17ec925ed6452489cf22bee1f563096cbd1dae6","0x9446407bcd8e5efe9f2ac0efbfa9e07d136e68b03c5ebc5bde43db3b94773de8605c30419eb2596513707e4e7448bb50","0x99b2f703619c4472a1039f532bf97f3771a870834f08d3b84fc914a75859fd0902725b40f1a6dabe7f901ac9c23f0842","0x8035a49b18a5e6223952e762185cc2f992f7eabdd1fbd9d0a7467605d65de6fe89ec90d778cb2835f4e2abe84fb67983","0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","0xa74fb46295a7ba2f570e09c4b8047a5833db7bf9fea68be8401bd455430418fe5485be0b41c49bd369f850dbfd991ce3","0x82681717d96c5d63a931c4ee8447ca0201c5951f516a876e78dcbc1689b9c4cf57a00a61c6fd0d92361a4b723c307e2d","0xb57520f5150ed646e8c26a01bf0bd15a324cc66fa8903f33fa26c3b4dd16b9a7c5118fdac9ee3eceba5ff2138cdce8f0","0xa222487021cdd811ed4410ad0c3006e8724dc489a426a0e17b4c76a8cd8f524cd0e63fac45dc8186c5ce1127162bec83","0xa6ba3250cd25bd8965d83a177ff93cf273980a7939160b6814a1d2f3cf3006c5a61b0d1c060aa48d33da7b24487eaf43","0xa8b15373c351e26e5dc5baba55cb2e1e014f839a7938764ee2def671bd7ac56c3f8b4c9c330f6ae77500d3f7118eb6e8","0x8f3f78ee37dbcbbc784fa2a75e047e02f8748af86365f3961cfc1b21055e552b46ec0377085da06914e0cffec0d3f0a4","0x997b2de22feea1fb11d265cedac9b02020c54ebf7cbc76ffdfe2dbfda93696e5f83af8d2c4ff54ce8ee987edbab19252","0x81ccc19e3b938ec2405099e90022a4218baa5082a3ca0974b24be0bc8b07e5fffaed64bef0d02c4dbfb6a307829afc5c","0x995b103d85d9e60f971e05c57b1acebf45bd6968b409906c9efea53ce4dc571aa4345e49c34b444b9ab6b62d13e6630b","0x99bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3","0xa64609779de550798ce1b718904bfd6f15e41dc56a14928ab1e6f43bba84d706f5ce39022a34e3fb2e113af695c52473","0x8a75c55208585181c6cef64a26b56d6a1b27ef47b69162b2538724575c2dff045ec54a9d321fe662735871b825c5aa3c","0x82de0e98b08925f379d1b2c40e30195f610841409ab3724ad3f2d173513e1d884c8b27aff402cd0353f79e61c7b4addb","0xafb72b4c111da98379f195da4e5c18462acc7ece85cd66894fbaf69ddab3d3bb0b6957ea0042b7705937919189e6a531","0xb58160d3dc5419cfa1f22e54e5135d4f24f9c66565da543a3845f7959660fa1d15c815b9c8ae1160dd32821a035640c0","0x89bdc5f82877823776a841cd8e93877c0e5e0b55adcebaafaf304d6460ab22d32bcd7e46e942ec4d8832eaa735b08923","0xb4aa2583a999066ec6caa72a3fc19e80d8936f6856d447dd043aa9b126aa63bcaac876266d80913071777984d8d30563","0xa762624bc58176cdfa2d8f83629b897bb26a2fad86feb50f1b41603db2db787b42429e3c045d7df8f7ea55c0582c9069","0xb8357a39c42f80953e8bc9908cb6b79c1a5c50ed3bbc0e330577a215ac850e601909fa5b53bed90c744e0355863eaa6e","0x9847ef9b7f43678bb536a27ab3aecee8cc3eedfe834e1214eaaeb00dc07bc20fd69af3319c043e62a29effd5ffb37e16","0xa7d10210c48f84d67a8af3f894062397b22cb48fa3f0936c039400638908f5e976d9783295aad8af9ac602f6bf3b10a7","0xa8e1bc8a6493fc7ed293f44c99b28d31561c4818984891e5817c92d270c9408241ceaca44ab079409d13cc0df9e2e187","0x98a3e7179e2ad305857bf326d2c4b3924af478b704a944a416f4bc40be691fa53793ae77dcfa409adaee4bced903dfb1","0x826a146c3580b547594469b248195c9003205f48d778e8344caff117b210b24351892c5b0ace399a3a66edebc24c180f","0x95cc6e3d4e3ec850b01b866ccec0e8093a72311bcc4c149377af66586471ca442d5f61ecbb8878352f0193ddea928805","0x925ef08813aa7d99fbb6cc9d045921a43bcf8c9721c437478afd3d81e662df84497da96ddbf663996503b433fd46af28","0x8b737f47d5b2794819b5dc01236895e684f1406f8b9f0d9aa06b5fb36dba6c185efec755b77d9424d09b848468127559","0x8988349654c5fdf666ec4647d398199cc609bb8b3d5108b9e5678b8d0c7563438f3fbcf9d30ab3ef5df22aad9dc673b2","0xaa44163d9f9776392ce5f29f1ecbcc177f8a91f28927f5890c672433b4a3c9b2a34830842d9396dc561348501e885afb","0x8fe55d12257709ae842f8594f9a0a40de3d38dabdf82b21a60baac927e52ed00c5fd42f4c905410eacdaf8f8a9952490","0xaed3e9f4bb4553952b687ba7bcac3a5324f0cceecc83458dcb45d73073fb20cef4f9f0c64558a527ec26bad9a42e6c4c","0x86d386aaf3dff5b9331ace79f6e24cff8759e7e002bbe9af91c6de91ab693f6477551e7ee0a1e675d0fc614814d8a8aa","0x8856c31a50097c2cc0c9a09f89e09912c83b9c7838b2c33d645e95d0f35130569a347abc4b03f0cb12a89397b899d078","0xa65a82f7b291d33e28dd59d614657ac5871c3c60d1fb89c41dd873e41c30e0a7bc8d57b91fe50a4c96490ebf5769cb6b","0x98536b398e5b7f1276f7cb426fba0ec2b8b0b64fba7785ea528bebed6ae56c0dee59f5d295fa4c97a1c621ecacfc4ec3","0x8d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a41495083582","0xa52cd15bb5cb9bdd7cef27b3644356318d0fa9331f9388edc12b204e2eb56face5604e4c3bb9631ef5bd438ff7821523","0x955bcc6bca53e7a6afa0e83c8443364e0e121f416d6024a442253d1e9d805407f2c7f7d9944770db370935e8722e5f51","0x95c38f73d6e65f67752ae3f382e8167d7d0d18ced0ca85a1d6b9ba5196f89cf9aed314a7d80b911806d5310584adc1b8","0x8e34d569ec169d15c9a0de70c15bf1a798ce9c36b30cca911ef17d6c183de72614575629475b57147f1c37602f25d76c","0xb0ea38f0b465ae0f0b019494aecd8a82cb7c496ecfab60af96d0bda1a52c29efd4d4e5b270f3d565eb3485b2aaf3d87c","0x90bc674d83e1b863fec40140a2827c942e575bd96bc5e60339c51089bab5fd445ae0c99ab9f1b5074b54682ac9c4a275","0x9417af4462cc8d542f6f6c479866f1c9fa4768069ef145f9acdd50221b8956b891ceec3ef4ec77c54006b00e38156cee","0xa0d79afac7df720f660881e20f49246f64543e1655a0ab9945030e14854b1dd988df308ed374fc6130586426c6cf16a4","0x899729f080571e25fee93538eb21304a10600d5ceb9807959d78c3967d9ba32b570d4f4105626e5972ccf2e24b723604","0xada7d351b72dcca4e46d7198e0a6fae51935f9d3363659be3dfaa5af8b1c033d4c52478f8b2fbf86f7318142f07af3a7","0xa72841987e4f219d54f2b6a9eac5fe6e78704644753c3579e776a3691bc123743f8c63770ed0f72a71e9e964dbf58f43","0xae6f240e7a9baa3e388eb3052c11d5b6ace127b87a7766970db3795b4bf5fc1de17a8ee8528d9bef0d6aefcfb67a7761","0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","0x95fa3538b8379ff2423656ab436df1632b74311aaef49bc9a3cbd70b1b01febaf2f869b4127d0e8e6d18d7d919f1f6d8","0x8025cdadf2afc5906b2602574a799f4089d90f36d73f94c1cf317cfc1a207c57f232bca6057924dd34cff5bde87f1930","0xa1402173873adf34e52c43feacd915eb141d77bf16bc5180e1ee86762b120411fffa7cb956cf0e625364e9a2d56f01f3","0x91887afbd7a83b8e9efb0111419c3d0197728d56ef96656432fbc51eb7ed736bb534dad59359629cf9c586461e251229","0x8e6ad45832f4ba45f5fe719022e6b869f61e1516d8835586b702764c474befe88591722045da41ab95aafbf0387ecd18","0x8a8409bd78ea4ff8d6e3e780ec93a3b017e639bbdaa5f399926e07ce2a939c8b478699496da2599b03a8fb62328cb1da","0x912b440c4d3c8177a012cea1cc58115cbc6795afc389363c7769bf419b9451bcde764586cf26c15e9906ea54837d031a","0xa82f4819a86b89c9cbd6d164e959fe0061e6a9b705862be2952d3cf642b515bd5edae4e6338e4eeb975a9082ff205bb7","0x8ab3f4fbbea07b771705f27bb470481ab6c44c46afcb317500df564b1177fa6dc7a3d27506b9e2d672ac1edd888a7a65","0x85ddb75efa05baaa727d659b09d268b606f81029796e106b55ff8d47fdb74a7d237286dfeadde6cc26d53d56204eff65","0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","0xb20c190dd46da9fe928d277ccfa0b804b942f5a181adb37fc1219e028fb7b48d63261248c6d939d68d4d8cd2c13a4f80","0xa20cca122e38a06188877a9f8f0ca9889f1dd3ffb22dddf76152604c72fc91519e414c973d4616b986ff64aec8a3208b","0xa1555b4e598691b619c576bad04f322fc6fe5898a53865d330097460e035e9d0e9169089a276f15f8977a39f27f9aec3","0x97e827da16cbd1da013b125a96b24770e0cad7e5af0ccd9fb75a60d8ba426891489d44497b091e1b0383f457f1b2251c","0x908ee03816f68a78d1da050c8ec125d3dac2306178d4f547d9c90bd58b3985a20f6fef507dcc81f010d70262d9abab68","0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","0x951f3707389db5012848b67ab77b63da2a73118b7df60f087fa9972d8f7fef33ed93e5f25268d4237c2987f032cd613f","0x8f021f52cbd6c46979619100350a397154df00cae2efe72b22ad0dd66747d7de4beecd9b194d0f7016e4df460a63a8ea","0xa272e9d1d50a4aea7d8f0583948090d0888be5777f2846800b8281139cd4aa9eee05f89b069857a3e77ccfaae1615f9c","0x8c7b0e11f9bc3f48d84013ef8e8575aeb764bc1b9bf15938d19eb191201011365c2b14d78139a0f27327cb21c1b8bf3d","0xab48aa2cc6f4a0bb63b5d67be54ac3aed10326dda304c5aeb9e942b40d6e7610478377680ab90e092ef1895e62786008","0x8515e7f61ca0470e165a44d247a23f17f24bf6e37185467bedb7981c1003ea70bbec875703f793dd8d11e56afa7f74ba","0x8f81b19ee2e4d4d0ff6384c63bacb785bc05c4fc22e6f553079cc4ff7e0270d458951533458a01d160b22d59a8bd9ab5","0xa6f68f09fc2b9df0ed7b58f213319dd050c11addaef31231853c01079fb225d0f8aa6860acd20bc1de87901f6103b95f","0x85ae0ef8d9ca996dbfebb49fa6ec7a1a95dff2d280b24f97c613b8e00b389e580f0f08aa5a9d5e4816a6532aaebc23bf","0xb88b54fe7990227c6d6baa95d668d2217626b088579ddb9773faf4e8f9386108c78ddd084a91e69e3bdb8a90456030c6","0xaa14e001d092db9dc99746fcfc22cd84a74adaa8fc483e6abf697bd8a93bda2ee9a075aca303f97f59615ed4e8709583","0x9717182463fbe215168e6762abcbb55c5c65290f2b5a2af616f8a6f50d625b46164178a11622d21913efdfa4b800648d","0xb2a3cedd685176071a98ab100494628c989d65e4578eec9c5919f2c0321c3fc3f573b71ef81a76501d88ed9ed6c68e13","0xb203b206005c6db2ecfab163e814bacb065872485d20ac2d65f982b4696617d12e30c169bf10dbe31d17bf04a7bdd3bc","0x8d08a52857017fd5cab3a821ccb8f5908c96cf63c5a5647209c037e2ea1c56f9650ec030b82ffdce76d37672d942e45b","0x84d1e4703d63ac280cd243c601def2b6cc0c72fb0a3de5e83149d3ac558c339f8b47a977b78fd6c9acf1f0033ae71a88","0x8e04ad5641cc0c949935785184c0b0237977e2282742bc0f81e58a7aa9bfee694027b60de0db0de0539a63d72fd57760","0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","0xa06d4f9703440b365bdce45e08442ec380165c5051c30e9df4d25571cba350ce5ab5e07810e1d1476c097a51d7734630","0x950c598dc627cd58cd7d34e0dd055daf92c9bc89235c3a5d3aacf594af97f99eb0f02a6f353238386626ee67462cd9a2","0x8e876b110d8ad35997a0d4044ca03e8693a1532497bcbbb8cdb1cd4ce68fe685eb03209b3d2833494c0e79c1c1a8c60b","0x803968608f3f1447912bb635f200ed5b0bc2f3ade2736bccb05a70c83c7df55602a2723f6b9740e528456eeba51ced64","0x931cdb87f226ad70ec6e0ff47e8420481d080e57951443ad804411a7b78dc2f2e99cbdf2463dda39d6be2ad95c0730e1","0x931bea4bc76fad23ba9c339622ddc0e7d28904a71353c715363aa9e038f64e990ef6ef76fc1fc431b9c73036dd07b86c","0x9929f70ba8c05847beb74c26dd03b4ec04ca8895bc6d9f31d70bd4231329c2f35799d4404a64f737e918db55eec72d25","0x93abf6639e499a3d83e3e2369882ac8dbe3e084e7e766d166121897497eabee495728365d9d7b9d9399a14831d186ff1","0xb29e53ff7b1595375136703600d24237b3d62877a5e8462fad67fc33cbde5bd7fcfac10dde01f50944b9f8309ad77751","0x95906ec0660892c205634e21ad540cbe0b6f7729d101d5c4639b864dea09be7f42a4252c675d46dd90a2661b3a94e8ca","0xafdb131642e23aedfd7625d0107954a451aecc9574faeeec8534c50c6156c51d3d0bdb8174372d91c560a0b7799b4e8e","0x97631345700c2eddaeb839fc39837b954f83753ef9fe1d637abcfc9076fcb9090e68da08e795f97cfe5ef569911969ec","0x8bcfb0520b9d093bc59151b69e510089759364625589e07b8ca0b4d761ce8e3516dbdce90b74b9b8d83d9395091b18bf","0xb54d0e0f7d368cd60bc3f47e527e59ef5161c446320da4ed80b7af04a96461b2e372d1a1edf8fe099e40bff514a530af","0x8fbdab59d6171f31107ff330af9f2c1a8078bb630abe379868670c61f8fa5f05a27c78f6a1fd80cde658417ef5d6a951","0x9718567efc4776425b17ac2450ae0c117fdf6e9eeeabb4ede117f86bee413b31b2c07cf82e38c6ecaf14001453ce29d0","0xb0c9351b9604478fb83646d16008d09cedf9600f57b0adbf62dd8ad4a59af0f71b80717666eeec697488996b71a5a51e","0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48","0x942d5ed35db7a30cac769b0349fec326953189b51be30b38189cd4bb4233cfe08ccc9abe5dd04bf691f60e5df533d98a","0xa4c90c14292dfd52d27d0e566bbfa92a2aebb0b4bcd33d246d8eeb44156c7f2fd42ba8afb8e32699724c365fc583e904","0xb29043a7273d0a2dbc2b747dcf6a5eccbd7ccb44b2d72e985537b117929bc3fd3a99001481327788ad040b4077c47c0d","0xb08d72a2c2656679f133a13661d9119ab3a586e17123c11ca17dc538d687576789d42ab7c81daa5af6506cc3bac9d089","0x98ff9389cf70ee9e0ae5df1474454ab5d7529cab72db2621e1b8b40b473168c59689a18838c950de286ea76dfdf9dc24","0x93b15273200e99dbbf91b24f87daa9079a023ccdf4debf84d2f9d0c2a1bf57d3b13591b62b1c513ec08ad20feb011875","0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","0x90239bd66450f4cc08a38402adc026444230fd893b752c7dfc4699539044a1fd39ba133cbdc330b7fc19538e224725cb","0x8ed36ed5fb9a1b099d84cba0686d8af9a2929a348797cd51c335cdcea1099e3d6f95126dfbc93abcfb3b56a7fc14477b","0x8215b57dd02553c973052c69b0fecefa813cc6f3420c9b2a1cffae5bd47e3a7a264eaec4ed77c21d1f2f01cf130423c0","0xa7a9bebe161505ba51f5fb812471f8fb8702a4c4ad2f23de1008985f93da644674edb2df1096920eaecb6c5b00de78cd","0x8fa4a674911c27c9306106ffcc797e156b27dab7a67ce7e301cfd73d979331f8edcd4d3397616dd2821b64e91b4d9247","0xb2277b279519ba0d28b17c7a32745d71ceb3a787e89e045fe84aaadf43a1d388336ec4c8096b17997f78d240ab067d07","0x8a3a08b7dae65f0e90a3bc589e13019340be199f092203c1f8d25ee9989378c5f89722430e12580f3be3e4b08ae04b1b","0x825abb120ae686f0e3c716b49f4086e92b0435413a137a31bcf992e4851ecdf9d74ceea3d6e063d7009ec8b8e504fb30","0xa8f5540a9977fd2ee7dea836ed3dafa5d0b1fc9c5d5f1689e91ec49cdef989976c51502c3764025ef8ff542ef3b170ea","0x87dc2da68d1641ffe8e6ca1b675767dc3303995c5e9e31564905c196e3109f11345b8877d28d116e8ae110e6a6a7c7a4","0x9725ff209f8243ab7aceda34f117b4c402e963cc2a3a85d890f6d6d3c0c96e0b0acbed787fe4fa7b37197c049ab307ea","0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","0xa69ec7c89252e2531c057ebeb86098e3b59ca01558afd5f6de4ec40370cb40de07856334770ecacbf23e123201266f67","0xb8ae7b57f57bf505dd2623a49017da70665f5b7f5ac74d45d51883aac06881467b5ef42964bd93ff0f3b904e8239e7b4","0x8aea7d8eb22063bcfe882e2b7efc0b3713e1a48dd8343bed523b1ab4546114be84d00f896d33c605d1f67456e8e2ed93","0xaf3dc44695d2a7f45dbe8b21939d5b4015ed1697131184ce19fc6bb8ff6bbc23882348b4c86278282dddf7d718e72e2b","0x96413b2d61a9fc6a545b40e5c2e0064c53418f491a25994f270af1b79c59d5cf21d2e8c58785a8df09e7265ac975cb28","0x8f207bd83dad262dd9de867748094f7141dade78704eca74a71fd9cfc9136b5278d934db83f4f3908d7a3de84d583fc9","0x86bdb0a034dab642e05cb3e441d67f60e0baf43fa1140e341f028a2c4b04f3f48a0cdc5ee1c7825dcdc4019b004ec073","0xb8f1a9edf68006f913b5377a0f37bed80efadc4d6bf9f1523e83b2311e14219c6aa0b8aaee79e47a9977e880bad37a8e","0xa3caedb9c2a5d8e922359ef69f9c35b8c819bcb081610343148dc3a2c50255c9caa6090f49f890ca31d853384fc80d00","0x851f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e","0xb614644e726aa24b10254dd0a639489211ec2f38a69966b5c39971069ea046b83ee17cf0e91da740e11e659c0c031215","0xa19dd710fbf120dbd2ce410c1abeb52c639d2c3be0ec285dc444d6edea01cee272988e051d5c9c37f06fea79b96ba57b","0xa2ca1572cca0b43a2652dd519063311003ca6eccab5e659fc4a39d2411608e12e28294973aae5be678da60b0c41ca5f0","0xb783a70a1cf9f53e7d2ddf386bea81a947e5360c5f1e0bf004fceedb2073e4dd180ef3d2d91bee7b1c5a88d1afd11c49","0xacb58c81ae0cae2e9d4d446b730922239923c345744eee58efaadb36e9a0925545b18a987acf0bad469035b291e37269","0xa9e1558a3ab00c369a1ce75b98f37fd753dbb1d5e86c4514858b1196dfd149aa7b818e084f22d1ad8d34eba29ce07788","0xa23cf58a430d6e52c8099ecee6756773c10183e1e3c6871eb74c7f8b933943a758872d061a961c9961f2e06b4c24f2c4","0x8b5b5399aefcd717d8fc97ea80b1f99d4137eb6fa67afd53762ee726876b6790f47850cf165901f1734487e4a2333b56","0x8e0b26637a9bc464c5a9ac490f6e673a0fb6279d7918c46a870307cf1f96109abf975d8453dc77273f9aba47c8eb68c2","0xb4d670b79d64e8a6b71e6be0c324ff0616ad1a49fbb287d7bf278ec5960a1192b02af89d04918d3344754fb3284b53a1","0x86de7221af8fd5bb4ee28dad543997cde0c5cd7fa5ec9ad2b92284e63e107154cc24bf41e25153a2a20bcae3add50542","0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","0xb422f8004e8e7c47cf4bc69c3a551b3491916e415b824c2d064204d55c465fb6839834a3f37d8a9271c75e5e2d1f3718","0x8a5898f52fe9b20f089d2aa31e9e0a3fe26c272ce087ffdfd3490d3f4fa1cacbec4879f5f7cd7708e241a658be5e4a2f","0x9294795d066f5e24d506f4b3aa7613b831399924cee51c160c92eb57aad864297d02bfda8694aafd0a24be6396eb022a","0xa339d48ea1916bad485abb8b6cbdcafdba851678bfe35163fa2572c84553386e6ee4345140eab46e9ddbffc59ded50d5","0xa325677c8eda841381e3ed9ea48689b344ed181c82937fa2651191686fd10b32885b869ce47ca09fbe8bd2dbcaa1c163","0x8fc502abb5d8bdd747f8faf599b0f62b1c41145d30ee3b6ff1e52f9370240758eac4fdb6d7fb45ed258a43edebf63e96","0x837d6c15c830728fc1de0e107ec3a88e8bbc0a9c442eb199a085e030b3bcdfb08e7155565506171fe838598b0429b9cc","0x8eb8b1b309a726fa5af6a6228385214a48788a1f23fe03cd46e16e200ed7d8909394d2e0b442ef71e519215765ca6625","0xa07d173f08193f50544b8f0d7e7826b0758a2bedfdd04dcee4537b610de9c647c6e40fdf089779f1ec7e16ca177c9c35","0x9780e853f8ce7eda772c6691d25e220ca1d2ab0db51a7824b700620f7ac94c06639e91c98bb6abd78128f0ec845df8ef","0x820c62fa9fe1ac9ba7e9b27573036e4e44e3b1c43723e9b950b7e28d7cf939923d74bec2ecd8dc2ade4bab4a3f573160","0x8353cad3430c0b22a8ec895547fc54ff5791382c4060f83c2314a4fcd82fb7e8e822a9e829bace6ec155db77c565bcb3","0xb91ab4aed4387ed938900552662885cdb648deaf73e6fca210df81c1703eb0a9cbed00cecf5ecf28337b4336830c30c8","0xb12332004f9ecc80d258fe5c7e6a0fba342b93890a5ea0ccda642e7b9d79f2d660be4b85d6ca744c48d07a1056bc376d","0x88eeb6e5e927aa49a4cd42a109705c50fa58ed3833a52a20506f56cc13428cbccb734784a648c56de15ef64b0772de71","0x83798f4dcc27c08dcd23315bee084a9821f39eed4c35ef45ba5079de93e7cf49633eea6d0f30b20c252c941f615f6ccb","0x8eb7dd3ccc06165c3862d4e32d7fd09a383e0226fa06909ddf4e693802fd5c4324407d86c32df1fdc4438853368db6ce","0xa98ae7e54d229bac164d3392cb4ab9deeb66108cd6871bd340cbc9170f29d4602a2c27682f9d2fa3ad8019e604b6016a","0x8345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c","0x8da7f6c67fb6018092a39f24db6ea661b1ead780c25c0de741db9ae0cfc023f06be36385de6a4785a47c9f92135ea37d","0x875a795a82ae224b00d4659eb1f6a3b024f686bfc8028b07bf92392b2311b945afc3d3ab346a1d4de2deac1b5f9c7e0d","0xabc2344dc831a4bc0e1ec920b5b0f774bd6465f70199b69675312c4993a3f3df50fe4f30693e32eb9c5f8e3a70e4e7c4","0xb8e551f550803ec5e67717c25f109673b79284e923c9b25558a65864e0d730aeaecab0ee24448226e5dd9da3070080a2","0xab83dfefb120fab7665a607d749ef1765fbb3cc0ba5827a20a135402c09d987c701ddb5b60f0f5495026817e8ab6ea2e","0x90c0c1f774e77d9fad044aa06009a15e33941477b4b9a79fa43f327608a0a54524b3fcef0a896cb0df790e9995b6ebf1","0xab23c89f138f4252fc3922e24b7254743af1259fa1aeae90e98315c664c50800cecfc72a4d45ee772f73c4bb22b8646f","0x865dfd7192acc296f26e74ae537cd8a54c28450f18d579ed752ad9e0c5dcb2862e160e52e87859d71f433a3d4f5ca393","0x82d333a47c24d4958e5b07be4abe85234c5ad1b685719a1f02131a612022ce0c726e58d52a53cf80b4a8afb21667dee1","0xb6ad11e5d15f77c1143b1697344911b9c590110fdd8dd09df2e58bfd757269169deefe8be3544d4e049fb3776fb0bcfb","0x8978bdb97d45647584b8b9971246421b2f93d9ac648b1ed6595ad8326f80c107344a2c85d1756cd2f56b748001d5fd30","0xb4e84be7005df300900c6f5f67cf288374e33c3f05c2f10b6d2ff754e92ea8577d55b91e22cea2782250a8bc7d2af46d","0xae5163dc807af48bc827d2fd86b7c37de5a364d0d504c2c29a1b0a243601016b21c0fda5d0a446b9cb2a333f0c08ab20","0xad297ab0ef5f34448ceffef73c7104791cacae92aed22df8def9034b0f111b2af4f4365259dccecb46a1208fd3354fcd","0x9081bebcd06b4976d992d98a499397a44da20650ad4a1e0fb15dc63db8744d60d70dff0c6e2c3bb43ee35d1940683d1b","0xb3b3c89c783ee18bc030384914fafb8608d54c370005c49085fe8de22df6e04828b082c2fe7b595bd884986d688345f5","0xa232213cdd2b3bbdf5f61e65d57e28ee988c2b48185c9ac59b7372bc05c5b5763e19086ceaefb597b8e2b21b30aaacde","0x8d8be92bde8af1b9df13d5a8ed8a3a01eab6ee4cf883d7987c1d78c0d7d9b53a8630541fddf5e324b6cf4900435b1df8","0xad84464b3966ec5bede84aa487facfca7823af383715078da03b387cc2f5d5597cdd7d025aa07db00a38b953bdeb6e3f","0x889586bc28e52a4510bc9e8f1e673835ff4f27732b3954b6b7cd371d10a453ba793cfdfacf4ce20ca819310e541198b5","0xb35220775df2432a8923a1e3e786869c78f1661ed4e16bd91b439105f549487fb84bbea0590124a1d7aa4e5b08a60143","0x911bb496153aa457e3302ea8e74427962c6eb57e97096f65cafe45a238f739b86d4b790debd5c7359f18f3642d7d774c","0x89db41a6183c2fe47cf54d1e00c3cfaae53df634a32cccd5cf0c0a73e95ee0450fc3d060bb6878780fbf5f30d9e29aac","0x8774d1d544c4cc583fb649d0bbba86c2d2b5abb4c0395d7d1dac08ab1a2cc795030bdbdce6e3213154d4f2c748ccdaef","0xa1dbd288ae846edbfba77f7342faf45bdc0c5d5ce8483877acce6d00e09ef49d30fb40d4764d6637658d5ac738e0e197","0xb74c0f5b4125900f20e11e4719f69bac8d9be792e6901800d93f7f49733bc42bfb047220c531373a224f5564b6e6ecbb","0xa73eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086","0x80fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a55","0x913e4eec6be4605946086d38f531d68fe6f4669777c2d066eff79b72a4616ad1538aae7b74066575669d7ce065a7f47d","0x97363100f195df58c141aa327440a105abe321f4ebc6aea2d5f56c1fb7732ebfa5402349f6da72a6182c6bbedaeb8567","0x8c8b694b04d98a749a0763c72fc020ef61b2bb3f63ebb182cb2e568f6a8b9ca3ae013ae78317599e7e7ba2a528ec754a","0xaf048ba47a86a6d110fc8e7723a99d69961112612f140062cca193d3fc937cf5148671a78b6caa9f43a5cf239c3db230","0x92e5cd122e484c8480c430738091f23f30773477d9850c3026824f1f58c75cf20365d950607e159717864c0760432edb","0xab03beff9e24a04f469555b1bc6af53aa8c49c27b97878ff3b4fbf5e9795072f4d2b928bff4abbbd72d9aa272d1f100e","0x9252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada","0x84614d2ae5bc594a0c639bed6b6a1dc15d608010848b475d389d43001346ed5f511da983cc5df62b6e49c32c0ef5b24c","0xa99987ba6c0eb0fd4fbd5020a2db501128eb9d6a9a173e74462571985403f33959fc2f526b9a424d6915a77910939fc3","0x87109a988e34933e29c2623b4e604d23195b0346a76f92d51c074f07ce322de8e1bef1993477777c0eb9a9e95c16785f","0x8e7cb413850ecb6f1d2ded9851e382d945a8fee01f8f55184c7b0817000073944c6b6c77164e0a2272c39410fde18e58","0xb4bf4717ad2d3fce3a11a84dee1b38469be9e783b298b200cc533be97e474bf94d6c7c591d3102992f908820bc63ac72","0x969b4bcd84cabd5ba5f31705de51e2c4096402f832fdf543d88eb41ebb55f03a8715c1ceea92335d24febbea17a3bdd7","0x92c057502d4de4935cf8af77f21ca5791f646286aead82753a62dfb06dbd1705df506a02f19517accb44177cb469f3e4","0x90f3659630d58bd08e2e0131f76283cf9de7aa89e0102c67e79ca05c5c7217b213c05668f3de82939d8414d1674dc6a1","0x8c3999317e8c6753e3e89651e5ba7fdea91ab1dda46fdb6902eccd4035ba1618a178d1cd31f6fbbacc773255d72995b3","0x881f1a1ac6a56a47f041f49266d0a2e146c35e42bf87c22a9bc23a363526959e4d3d0c7e7382be091246787ef25e33d5","0x866f9ebe3afe58f2fd3234c4635a215c7982a53df4fb5396d9614a50308020b33618606a434984ca408963093b8f916d","0xa49f744d9bbfbcdd106592646040a3322fbe36e628be501a13f5272ad545a149f06f59bd417df9ae1a38d08c5a2108fe","0xa60d5589316a5e16e1d9bb03db45136afb9a3d6e97d350256129ee32a8e33396907dc44d2211762967d88d3e2840f71b","0xb48e56bd66650adb1e4f0c68b745f35f08d9829a06dbd5c67b2cc03dcf4cc5f9a85c84654f9596163b59d693eab14c34","0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60","0x99fb4a03d71921b6a56f5e39f42f281b96ee017e859f738fab6fbc51edbcf3b02b1276336d1f82391e495723ecbe337e","0xa9761c83d922ced991557c9913bedfbe34509ec68d34a791242ac0f96e30f87e29a19099199a38aac29037e0c8e939c6","0xafad69e0702e02012b2419bdc7250c94816e40286a238e5f83858c7be2f93be2ec3657dd6cd0ded9184d6c9646092d3e","0xa29e520a73ec28f4e2e45050c93080eeaee57af1108e659d740897c3ced76ceb75d106cb00d7ed25ec221874bf4b235a","0x91d2fe0eded16c39a891ba065319dabfe2c0c300f5e5f5c84f31f6c52344084f0bb60d79650fc1dfe8d2a26fe34bd1fa","0x97063101e86c4e4fa689de9521bb79575ed727c5799cf69c17bfe325033200fcecca79a9ec9636b7d93e6d64f7275977","0xb194e855fa3d9ab53cbfbc97e7e0ce463723428bb1ad25952713eac04d086bf2407bdb78f8b8173f07aa795bd5e491dc","0xb271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4","0xa4e8f4a4f81f855f46512af8cdcbc9ae8a7eb395a75f135e5569b758a8d92349681a0358500f2d41f4578d3f7ffaa90f","0x876a46a1e38a8ae4fbad9cb9336baed2f740b01fabb784233ae2f84ffc972aefbfc5458e815491ab63b42fcb67f6b7cb","0x8e62874e15daea5eb362fa4aaad371d6280b6ca3d4d86dae9c6d0d663186a9475c1d865cf0f37c22cb9e916c00f92f71","0x95eacc3adc09c827593f581e8e2de068bf4cf5d0c0eb29e5372f0d23364788ee0f9beb112c8a7e9c2f0c720433705cf0","0xacebcdddf7ac509202f9db4efbc0da9172f57b3e468f9b6c116c6b134c906256630d44c38a19ec0e4b569c5001a5a04c","0xa7b9a71c54b44f6738a77f457af08dc79f09826193197a53c1c880f15963c716cec9ff0fd0bcb8ab41bc2fe89c2711fa","0xa984a361f4eb059c693e8405075a81469157811e78c317bb3ca189b16cd5c3b2a567c65d78560ef2ca95e108dc5a211e","0xa1cd4b34c72719c9d2707d45cd91a213541dd467f294f225e11571fd2e1cea6aac4b94b904ec9e153ed3ac350856ad97","0x86fef261cd5bccd56c72bba1bfcb512c7b45015283dbea7458d6a33ab1edfb992139cfb0afd7b05a2dfb327b6c8f94dc","0xb098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a","0x8c62ca6abda1a9af02d5c477d2bbf4c00900328f3f03c45f5e1e6bc69a5be2b7acc2532a923f19cb4d4ab43d0d2f42ec","0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","0xb0675bcee7652a66c92dc254157eef380726c396b1c2f5b4e1905fff912003b7e790f31fb5542df57f1f465e0915e7a0","0xb3d106c404056e440519d8a1e657f249d9aae11325796404bb048c1792a12f8addf7aa29c5822893c8cc408527793d6a","0xa0ec3e71a719a25208adc97106b122809210faf45a17db24f10ffb1ac014fac1ab95a4a1967e55b185d4df622685b9e8","0xb12d0c357016caa5c0ec0a6bdc07e60c2af4631c477366eeb6ab4fffbd0ca40ab9ec195091478a2698bf26349b785ae8","0xb4ff0075497094519c49b4b56687a1b8c84878e110dc7f2bd492608f3977dfdc538f1c8e3f8941552552af121eab9772","0x812b2d0546aa77dec2d55406b0131ed580c079c1aeb76eb2ca076b7b58289fa9d781069a2e11fe2199f1e02c5dd70e6a","0xae08c32bac1e3ec1e2250803b1781b8004efb2ad7f215e2fe8feb9f9ec5ec14157a9395f9f0e92060d18f4b73b33c0c3","0x815c0c9f90323633f00c1382199b8c8325d66fda9b93e7147f6dee80484c5fc4ef8b4b1ec6c64fab0e23f198beefa9ea","0xaa10e1055b14a89cc3261699524998732fddc4f30c76c1057eb83732a01416643eb015a932e4080c86f42e485973d240","0xab812b452a959fd9cbca07925045312f94e45eb1a7129b88ea701b2c23c70ae18a3c4a1e81389712c6c7d41e748b8c7d","0x80e8e7de168588f5ac5f3b9f2fabcadc0c4f50c764f6a4abf8231675fec11277d49e7357c3b5b681566e6a3d32b557e1","0xb3dc963ef53ae9b6d83ce417c5d417a9f6cc46beaa5fcf74dc59f190c6e9c513e1f57a124a0ef8b6836e4c8928125500","0x8ff7cc69f007f11481c91c6f9b20698998a0c2e9a2928bec8eea7507c7ad73a9d1d218cfdb279c4d2132d7da6c9e513e","0x8623144b531c2852fb755a4d8b4c9b303a026de6f99b1e88a1e91fa82bc10d6c7a9d8dad7926b6b7afd21ca4edb92408","0x84a3f285f8a8afc70b2c5b2c93e8ab82668def5e21601888fac3d2c0cdf947480c97089ba4ad04e786d4b771c8988c75","0xa7e53203bbed6adaa99c54f786622592dcaa4cd702e9aaaa355b8dcf302301f8b8dfec87625a9560079d3f8daf076c5d","0xb3f095233b798f4eb74be9d7d13b95800c9421875bc58f7bab4709840881fbfbe1eb133236eead9f469dde9603f06e46","0xb3c8a118a25b60416b4e6f9e0bc7cb4a520b22b1982f4d6ba47d3f484f0a98d000eed8f5019051847497f24fd9079a74","0x927e6e88fe7641155e68ff8328af706b5f152125206fe32aeab19432f17ec925ed6452489cf22bee1f563096cbd1dae6","0x9446407bcd8e5efe9f2ac0efbfa9e07d136e68b03c5ebc5bde43db3b94773de8605c30419eb2596513707e4e7448bb50","0x99b2f703619c4472a1039f532bf97f3771a870834f08d3b84fc914a75859fd0902725b40f1a6dabe7f901ac9c23f0842","0x8035a49b18a5e6223952e762185cc2f992f7eabdd1fbd9d0a7467605d65de6fe89ec90d778cb2835f4e2abe84fb67983","0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed","0xa74fb46295a7ba2f570e09c4b8047a5833db7bf9fea68be8401bd455430418fe5485be0b41c49bd369f850dbfd991ce3","0x82681717d96c5d63a931c4ee8447ca0201c5951f516a876e78dcbc1689b9c4cf57a00a61c6fd0d92361a4b723c307e2d","0xb57520f5150ed646e8c26a01bf0bd15a324cc66fa8903f33fa26c3b4dd16b9a7c5118fdac9ee3eceba5ff2138cdce8f0","0xa222487021cdd811ed4410ad0c3006e8724dc489a426a0e17b4c76a8cd8f524cd0e63fac45dc8186c5ce1127162bec83","0xa6ba3250cd25bd8965d83a177ff93cf273980a7939160b6814a1d2f3cf3006c5a61b0d1c060aa48d33da7b24487eaf43","0xa8b15373c351e26e5dc5baba55cb2e1e014f839a7938764ee2def671bd7ac56c3f8b4c9c330f6ae77500d3f7118eb6e8","0x8f3f78ee37dbcbbc784fa2a75e047e02f8748af86365f3961cfc1b21055e552b46ec0377085da06914e0cffec0d3f0a4","0x997b2de22feea1fb11d265cedac9b02020c54ebf7cbc76ffdfe2dbfda93696e5f83af8d2c4ff54ce8ee987edbab19252","0x81ccc19e3b938ec2405099e90022a4218baa5082a3ca0974b24be0bc8b07e5fffaed64bef0d02c4dbfb6a307829afc5c","0x995b103d85d9e60f971e05c57b1acebf45bd6968b409906c9efea53ce4dc571aa4345e49c34b444b9ab6b62d13e6630b","0x99bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3","0xa64609779de550798ce1b718904bfd6f15e41dc56a14928ab1e6f43bba84d706f5ce39022a34e3fb2e113af695c52473","0x8a75c55208585181c6cef64a26b56d6a1b27ef47b69162b2538724575c2dff045ec54a9d321fe662735871b825c5aa3c","0x82de0e98b08925f379d1b2c40e30195f610841409ab3724ad3f2d173513e1d884c8b27aff402cd0353f79e61c7b4addb","0xafb72b4c111da98379f195da4e5c18462acc7ece85cd66894fbaf69ddab3d3bb0b6957ea0042b7705937919189e6a531","0xb58160d3dc5419cfa1f22e54e5135d4f24f9c66565da543a3845f7959660fa1d15c815b9c8ae1160dd32821a035640c0","0x89bdc5f82877823776a841cd8e93877c0e5e0b55adcebaafaf304d6460ab22d32bcd7e46e942ec4d8832eaa735b08923","0xb4aa2583a999066ec6caa72a3fc19e80d8936f6856d447dd043aa9b126aa63bcaac876266d80913071777984d8d30563","0xa762624bc58176cdfa2d8f83629b897bb26a2fad86feb50f1b41603db2db787b42429e3c045d7df8f7ea55c0582c9069","0xb8357a39c42f80953e8bc9908cb6b79c1a5c50ed3bbc0e330577a215ac850e601909fa5b53bed90c744e0355863eaa6e","0x9847ef9b7f43678bb536a27ab3aecee8cc3eedfe834e1214eaaeb00dc07bc20fd69af3319c043e62a29effd5ffb37e16","0xa7d10210c48f84d67a8af3f894062397b22cb48fa3f0936c039400638908f5e976d9783295aad8af9ac602f6bf3b10a7","0xa8e1bc8a6493fc7ed293f44c99b28d31561c4818984891e5817c92d270c9408241ceaca44ab079409d13cc0df9e2e187","0x98a3e7179e2ad305857bf326d2c4b3924af478b704a944a416f4bc40be691fa53793ae77dcfa409adaee4bced903dfb1","0x826a146c3580b547594469b248195c9003205f48d778e8344caff117b210b24351892c5b0ace399a3a66edebc24c180f","0x95cc6e3d4e3ec850b01b866ccec0e8093a72311bcc4c149377af66586471ca442d5f61ecbb8878352f0193ddea928805","0x925ef08813aa7d99fbb6cc9d045921a43bcf8c9721c437478afd3d81e662df84497da96ddbf663996503b433fd46af28","0x8b737f47d5b2794819b5dc01236895e684f1406f8b9f0d9aa06b5fb36dba6c185efec755b77d9424d09b848468127559","0x8988349654c5fdf666ec4647d398199cc609bb8b3d5108b9e5678b8d0c7563438f3fbcf9d30ab3ef5df22aad9dc673b2","0xaa44163d9f9776392ce5f29f1ecbcc177f8a91f28927f5890c672433b4a3c9b2a34830842d9396dc561348501e885afb","0x8fe55d12257709ae842f8594f9a0a40de3d38dabdf82b21a60baac927e52ed00c5fd42f4c905410eacdaf8f8a9952490","0xaed3e9f4bb4553952b687ba7bcac3a5324f0cceecc83458dcb45d73073fb20cef4f9f0c64558a527ec26bad9a42e6c4c","0x86d386aaf3dff5b9331ace79f6e24cff8759e7e002bbe9af91c6de91ab693f6477551e7ee0a1e675d0fc614814d8a8aa","0x8856c31a50097c2cc0c9a09f89e09912c83b9c7838b2c33d645e95d0f35130569a347abc4b03f0cb12a89397b899d078","0xa65a82f7b291d33e28dd59d614657ac5871c3c60d1fb89c41dd873e41c30e0a7bc8d57b91fe50a4c96490ebf5769cb6b","0x98536b398e5b7f1276f7cb426fba0ec2b8b0b64fba7785ea528bebed6ae56c0dee59f5d295fa4c97a1c621ecacfc4ec3","0x8d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a41495083582","0xa52cd15bb5cb9bdd7cef27b3644356318d0fa9331f9388edc12b204e2eb56face5604e4c3bb9631ef5bd438ff7821523","0x955bcc6bca53e7a6afa0e83c8443364e0e121f416d6024a442253d1e9d805407f2c7f7d9944770db370935e8722e5f51","0x95c38f73d6e65f67752ae3f382e8167d7d0d18ced0ca85a1d6b9ba5196f89cf9aed314a7d80b911806d5310584adc1b8","0x8e34d569ec169d15c9a0de70c15bf1a798ce9c36b30cca911ef17d6c183de72614575629475b57147f1c37602f25d76c","0xb0ea38f0b465ae0f0b019494aecd8a82cb7c496ecfab60af96d0bda1a52c29efd4d4e5b270f3d565eb3485b2aaf3d87c","0x90bc674d83e1b863fec40140a2827c942e575bd96bc5e60339c51089bab5fd445ae0c99ab9f1b5074b54682ac9c4a275","0x9417af4462cc8d542f6f6c479866f1c9fa4768069ef145f9acdd50221b8956b891ceec3ef4ec77c54006b00e38156cee","0xa0d79afac7df720f660881e20f49246f64543e1655a0ab9945030e14854b1dd988df308ed374fc6130586426c6cf16a4","0x899729f080571e25fee93538eb21304a10600d5ceb9807959d78c3967d9ba32b570d4f4105626e5972ccf2e24b723604","0xada7d351b72dcca4e46d7198e0a6fae51935f9d3363659be3dfaa5af8b1c033d4c52478f8b2fbf86f7318142f07af3a7","0xa72841987e4f219d54f2b6a9eac5fe6e78704644753c3579e776a3691bc123743f8c63770ed0f72a71e9e964dbf58f43","0xae6f240e7a9baa3e388eb3052c11d5b6ace127b87a7766970db3795b4bf5fc1de17a8ee8528d9bef0d6aefcfb67a7761","0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909","0x95fa3538b8379ff2423656ab436df1632b74311aaef49bc9a3cbd70b1b01febaf2f869b4127d0e8e6d18d7d919f1f6d8","0x8025cdadf2afc5906b2602574a799f4089d90f36d73f94c1cf317cfc1a207c57f232bca6057924dd34cff5bde87f1930","0xa1402173873adf34e52c43feacd915eb141d77bf16bc5180e1ee86762b120411fffa7cb956cf0e625364e9a2d56f01f3","0x91887afbd7a83b8e9efb0111419c3d0197728d56ef96656432fbc51eb7ed736bb534dad59359629cf9c586461e251229","0x8e6ad45832f4ba45f5fe719022e6b869f61e1516d8835586b702764c474befe88591722045da41ab95aafbf0387ecd18","0x8a8409bd78ea4ff8d6e3e780ec93a3b017e639bbdaa5f399926e07ce2a939c8b478699496da2599b03a8fb62328cb1da","0x912b440c4d3c8177a012cea1cc58115cbc6795afc389363c7769bf419b9451bcde764586cf26c15e9906ea54837d031a","0xa82f4819a86b89c9cbd6d164e959fe0061e6a9b705862be2952d3cf642b515bd5edae4e6338e4eeb975a9082ff205bb7","0x8ab3f4fbbea07b771705f27bb470481ab6c44c46afcb317500df564b1177fa6dc7a3d27506b9e2d672ac1edd888a7a65","0x85ddb75efa05baaa727d659b09d268b606f81029796e106b55ff8d47fdb74a7d237286dfeadde6cc26d53d56204eff65","0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","0xb20c190dd46da9fe928d277ccfa0b804b942f5a181adb37fc1219e028fb7b48d63261248c6d939d68d4d8cd2c13a4f80","0xa20cca122e38a06188877a9f8f0ca9889f1dd3ffb22dddf76152604c72fc91519e414c973d4616b986ff64aec8a3208b","0xa1555b4e598691b619c576bad04f322fc6fe5898a53865d330097460e035e9d0e9169089a276f15f8977a39f27f9aec3","0x97e827da16cbd1da013b125a96b24770e0cad7e5af0ccd9fb75a60d8ba426891489d44497b091e1b0383f457f1b2251c","0x908ee03816f68a78d1da050c8ec125d3dac2306178d4f547d9c90bd58b3985a20f6fef507dcc81f010d70262d9abab68","0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","0x951f3707389db5012848b67ab77b63da2a73118b7df60f087fa9972d8f7fef33ed93e5f25268d4237c2987f032cd613f","0x8f021f52cbd6c46979619100350a397154df00cae2efe72b22ad0dd66747d7de4beecd9b194d0f7016e4df460a63a8ea","0xa272e9d1d50a4aea7d8f0583948090d0888be5777f2846800b8281139cd4aa9eee05f89b069857a3e77ccfaae1615f9c","0x8c7b0e11f9bc3f48d84013ef8e8575aeb764bc1b9bf15938d19eb191201011365c2b14d78139a0f27327cb21c1b8bf3d","0xab48aa2cc6f4a0bb63b5d67be54ac3aed10326dda304c5aeb9e942b40d6e7610478377680ab90e092ef1895e62786008","0x8515e7f61ca0470e165a44d247a23f17f24bf6e37185467bedb7981c1003ea70bbec875703f793dd8d11e56afa7f74ba","0x8f81b19ee2e4d4d0ff6384c63bacb785bc05c4fc22e6f553079cc4ff7e0270d458951533458a01d160b22d59a8bd9ab5","0xa6f68f09fc2b9df0ed7b58f213319dd050c11addaef31231853c01079fb225d0f8aa6860acd20bc1de87901f6103b95f","0x85ae0ef8d9ca996dbfebb49fa6ec7a1a95dff2d280b24f97c613b8e00b389e580f0f08aa5a9d5e4816a6532aaebc23bf","0xb88b54fe7990227c6d6baa95d668d2217626b088579ddb9773faf4e8f9386108c78ddd084a91e69e3bdb8a90456030c6","0xaa14e001d092db9dc99746fcfc22cd84a74adaa8fc483e6abf697bd8a93bda2ee9a075aca303f97f59615ed4e8709583","0x9717182463fbe215168e6762abcbb55c5c65290f2b5a2af616f8a6f50d625b46164178a11622d21913efdfa4b800648d","0xb2a3cedd685176071a98ab100494628c989d65e4578eec9c5919f2c0321c3fc3f573b71ef81a76501d88ed9ed6c68e13","0xb203b206005c6db2ecfab163e814bacb065872485d20ac2d65f982b4696617d12e30c169bf10dbe31d17bf04a7bdd3bc","0x8d08a52857017fd5cab3a821ccb8f5908c96cf63c5a5647209c037e2ea1c56f9650ec030b82ffdce76d37672d942e45b","0x84d1e4703d63ac280cd243c601def2b6cc0c72fb0a3de5e83149d3ac558c339f8b47a977b78fd6c9acf1f0033ae71a88","0x8e04ad5641cc0c949935785184c0b0237977e2282742bc0f81e58a7aa9bfee694027b60de0db0de0539a63d72fd57760","0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","0xa06d4f9703440b365bdce45e08442ec380165c5051c30e9df4d25571cba350ce5ab5e07810e1d1476c097a51d7734630","0x950c598dc627cd58cd7d34e0dd055daf92c9bc89235c3a5d3aacf594af97f99eb0f02a6f353238386626ee67462cd9a2","0x8e876b110d8ad35997a0d4044ca03e8693a1532497bcbbb8cdb1cd4ce68fe685eb03209b3d2833494c0e79c1c1a8c60b","0x803968608f3f1447912bb635f200ed5b0bc2f3ade2736bccb05a70c83c7df55602a2723f6b9740e528456eeba51ced64","0x931cdb87f226ad70ec6e0ff47e8420481d080e57951443ad804411a7b78dc2f2e99cbdf2463dda39d6be2ad95c0730e1","0x931bea4bc76fad23ba9c339622ddc0e7d28904a71353c715363aa9e038f64e990ef6ef76fc1fc431b9c73036dd07b86c","0x9929f70ba8c05847beb74c26dd03b4ec04ca8895bc6d9f31d70bd4231329c2f35799d4404a64f737e918db55eec72d25","0x93abf6639e499a3d83e3e2369882ac8dbe3e084e7e766d166121897497eabee495728365d9d7b9d9399a14831d186ff1","0xb29e53ff7b1595375136703600d24237b3d62877a5e8462fad67fc33cbde5bd7fcfac10dde01f50944b9f8309ad77751","0x95906ec0660892c205634e21ad540cbe0b6f7729d101d5c4639b864dea09be7f42a4252c675d46dd90a2661b3a94e8ca","0xafdb131642e23aedfd7625d0107954a451aecc9574faeeec8534c50c6156c51d3d0bdb8174372d91c560a0b7799b4e8e","0x97631345700c2eddaeb839fc39837b954f83753ef9fe1d637abcfc9076fcb9090e68da08e795f97cfe5ef569911969ec","0x8bcfb0520b9d093bc59151b69e510089759364625589e07b8ca0b4d761ce8e3516dbdce90b74b9b8d83d9395091b18bf","0xb54d0e0f7d368cd60bc3f47e527e59ef5161c446320da4ed80b7af04a96461b2e372d1a1edf8fe099e40bff514a530af","0x8fbdab59d6171f31107ff330af9f2c1a8078bb630abe379868670c61f8fa5f05a27c78f6a1fd80cde658417ef5d6a951","0x9718567efc4776425b17ac2450ae0c117fdf6e9eeeabb4ede117f86bee413b31b2c07cf82e38c6ecaf14001453ce29d0","0xb0c9351b9604478fb83646d16008d09cedf9600f57b0adbf62dd8ad4a59af0f71b80717666eeec697488996b71a5a51e","0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48","0x942d5ed35db7a30cac769b0349fec326953189b51be30b38189cd4bb4233cfe08ccc9abe5dd04bf691f60e5df533d98a","0xa4c90c14292dfd52d27d0e566bbfa92a2aebb0b4bcd33d246d8eeb44156c7f2fd42ba8afb8e32699724c365fc583e904","0xb29043a7273d0a2dbc2b747dcf6a5eccbd7ccb44b2d72e985537b117929bc3fd3a99001481327788ad040b4077c47c0d","0xb08d72a2c2656679f133a13661d9119ab3a586e17123c11ca17dc538d687576789d42ab7c81daa5af6506cc3bac9d089","0x98ff9389cf70ee9e0ae5df1474454ab5d7529cab72db2621e1b8b40b473168c59689a18838c950de286ea76dfdf9dc24","0x93b15273200e99dbbf91b24f87daa9079a023ccdf4debf84d2f9d0c2a1bf57d3b13591b62b1c513ec08ad20feb011875","0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7","0x90239bd66450f4cc08a38402adc026444230fd893b752c7dfc4699539044a1fd39ba133cbdc330b7fc19538e224725cb","0x8ed36ed5fb9a1b099d84cba0686d8af9a2929a348797cd51c335cdcea1099e3d6f95126dfbc93abcfb3b56a7fc14477b","0x8215b57dd02553c973052c69b0fecefa813cc6f3420c9b2a1cffae5bd47e3a7a264eaec4ed77c21d1f2f01cf130423c0","0xa7a9bebe161505ba51f5fb812471f8fb8702a4c4ad2f23de1008985f93da644674edb2df1096920eaecb6c5b00de78cd","0x8fa4a674911c27c9306106ffcc797e156b27dab7a67ce7e301cfd73d979331f8edcd4d3397616dd2821b64e91b4d9247","0xb2277b279519ba0d28b17c7a32745d71ceb3a787e89e045fe84aaadf43a1d388336ec4c8096b17997f78d240ab067d07","0x8a3a08b7dae65f0e90a3bc589e13019340be199f092203c1f8d25ee9989378c5f89722430e12580f3be3e4b08ae04b1b","0x825abb120ae686f0e3c716b49f4086e92b0435413a137a31bcf992e4851ecdf9d74ceea3d6e063d7009ec8b8e504fb30","0xa8f5540a9977fd2ee7dea836ed3dafa5d0b1fc9c5d5f1689e91ec49cdef989976c51502c3764025ef8ff542ef3b170ea","0x87dc2da68d1641ffe8e6ca1b675767dc3303995c5e9e31564905c196e3109f11345b8877d28d116e8ae110e6a6a7c7a4","0x9725ff209f8243ab7aceda34f117b4c402e963cc2a3a85d890f6d6d3c0c96e0b0acbed787fe4fa7b37197c049ab307ea","0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793","0xa69ec7c89252e2531c057ebeb86098e3b59ca01558afd5f6de4ec40370cb40de07856334770ecacbf23e123201266f67","0xb8ae7b57f57bf505dd2623a49017da70665f5b7f5ac74d45d51883aac06881467b5ef42964bd93ff0f3b904e8239e7b4","0x8aea7d8eb22063bcfe882e2b7efc0b3713e1a48dd8343bed523b1ab4546114be84d00f896d33c605d1f67456e8e2ed93","0xaf3dc44695d2a7f45dbe8b21939d5b4015ed1697131184ce19fc6bb8ff6bbc23882348b4c86278282dddf7d718e72e2b","0x96413b2d61a9fc6a545b40e5c2e0064c53418f491a25994f270af1b79c59d5cf21d2e8c58785a8df09e7265ac975cb28","0x8f207bd83dad262dd9de867748094f7141dade78704eca74a71fd9cfc9136b5278d934db83f4f3908d7a3de84d583fc9","0x86bdb0a034dab642e05cb3e441d67f60e0baf43fa1140e341f028a2c4b04f3f48a0cdc5ee1c7825dcdc4019b004ec073","0xb8f1a9edf68006f913b5377a0f37bed80efadc4d6bf9f1523e83b2311e14219c6aa0b8aaee79e47a9977e880bad37a8e","0xa3caedb9c2a5d8e922359ef69f9c35b8c819bcb081610343148dc3a2c50255c9caa6090f49f890ca31d853384fc80d00","0x851f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e","0xb614644e726aa24b10254dd0a639489211ec2f38a69966b5c39971069ea046b83ee17cf0e91da740e11e659c0c031215","0xa19dd710fbf120dbd2ce410c1abeb52c639d2c3be0ec285dc444d6edea01cee272988e051d5c9c37f06fea79b96ba57b","0xa2ca1572cca0b43a2652dd519063311003ca6eccab5e659fc4a39d2411608e12e28294973aae5be678da60b0c41ca5f0","0xb783a70a1cf9f53e7d2ddf386bea81a947e5360c5f1e0bf004fceedb2073e4dd180ef3d2d91bee7b1c5a88d1afd11c49","0xacb58c81ae0cae2e9d4d446b730922239923c345744eee58efaadb36e9a0925545b18a987acf0bad469035b291e37269","0xa9e1558a3ab00c369a1ce75b98f37fd753dbb1d5e86c4514858b1196dfd149aa7b818e084f22d1ad8d34eba29ce07788","0xa23cf58a430d6e52c8099ecee6756773c10183e1e3c6871eb74c7f8b933943a758872d061a961c9961f2e06b4c24f2c4","0x8b5b5399aefcd717d8fc97ea80b1f99d4137eb6fa67afd53762ee726876b6790f47850cf165901f1734487e4a2333b56","0x8e0b26637a9bc464c5a9ac490f6e673a0fb6279d7918c46a870307cf1f96109abf975d8453dc77273f9aba47c8eb68c2","0xb4d670b79d64e8a6b71e6be0c324ff0616ad1a49fbb287d7bf278ec5960a1192b02af89d04918d3344754fb3284b53a1","0x86de7221af8fd5bb4ee28dad543997cde0c5cd7fa5ec9ad2b92284e63e107154cc24bf41e25153a2a20bcae3add50542","0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf","0xb422f8004e8e7c47cf4bc69c3a551b3491916e415b824c2d064204d55c465fb6839834a3f37d8a9271c75e5e2d1f3718","0x8a5898f52fe9b20f089d2aa31e9e0a3fe26c272ce087ffdfd3490d3f4fa1cacbec4879f5f7cd7708e241a658be5e4a2f","0x9294795d066f5e24d506f4b3aa7613b831399924cee51c160c92eb57aad864297d02bfda8694aafd0a24be6396eb022a","0xa339d48ea1916bad485abb8b6cbdcafdba851678bfe35163fa2572c84553386e6ee4345140eab46e9ddbffc59ded50d5","0xa325677c8eda841381e3ed9ea48689b344ed181c82937fa2651191686fd10b32885b869ce47ca09fbe8bd2dbcaa1c163","0x8fc502abb5d8bdd747f8faf599b0f62b1c41145d30ee3b6ff1e52f9370240758eac4fdb6d7fb45ed258a43edebf63e96","0x837d6c15c830728fc1de0e107ec3a88e8bbc0a9c442eb199a085e030b3bcdfb08e7155565506171fe838598b0429b9cc","0x8eb8b1b309a726fa5af6a6228385214a48788a1f23fe03cd46e16e200ed7d8909394d2e0b442ef71e519215765ca6625","0xa07d173f08193f50544b8f0d7e7826b0758a2bedfdd04dcee4537b610de9c647c6e40fdf089779f1ec7e16ca177c9c35","0x9780e853f8ce7eda772c6691d25e220ca1d2ab0db51a7824b700620f7ac94c06639e91c98bb6abd78128f0ec845df8ef","0x820c62fa9fe1ac9ba7e9b27573036e4e44e3b1c43723e9b950b7e28d7cf939923d74bec2ecd8dc2ade4bab4a3f573160","0x8353cad3430c0b22a8ec895547fc54ff5791382c4060f83c2314a4fcd82fb7e8e822a9e829bace6ec155db77c565bcb3","0xb91ab4aed4387ed938900552662885cdb648deaf73e6fca210df81c1703eb0a9cbed00cecf5ecf28337b4336830c30c8","0xb12332004f9ecc80d258fe5c7e6a0fba342b93890a5ea0ccda642e7b9d79f2d660be4b85d6ca744c48d07a1056bc376d","0x88eeb6e5e927aa49a4cd42a109705c50fa58ed3833a52a20506f56cc13428cbccb734784a648c56de15ef64b0772de71","0x83798f4dcc27c08dcd23315bee084a9821f39eed4c35ef45ba5079de93e7cf49633eea6d0f30b20c252c941f615f6ccb","0x8eb7dd3ccc06165c3862d4e32d7fd09a383e0226fa06909ddf4e693802fd5c4324407d86c32df1fdc4438853368db6ce","0xa98ae7e54d229bac164d3392cb4ab9deeb66108cd6871bd340cbc9170f29d4602a2c27682f9d2fa3ad8019e604b6016a","0x8345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c","0x8da7f6c67fb6018092a39f24db6ea661b1ead780c25c0de741db9ae0cfc023f06be36385de6a4785a47c9f92135ea37d","0x875a795a82ae224b00d4659eb1f6a3b024f686bfc8028b07bf92392b2311b945afc3d3ab346a1d4de2deac1b5f9c7e0d","0xabc2344dc831a4bc0e1ec920b5b0f774bd6465f70199b69675312c4993a3f3df50fe4f30693e32eb9c5f8e3a70e4e7c4","0xb8e551f550803ec5e67717c25f109673b79284e923c9b25558a65864e0d730aeaecab0ee24448226e5dd9da3070080a2","0xab83dfefb120fab7665a607d749ef1765fbb3cc0ba5827a20a135402c09d987c701ddb5b60f0f5495026817e8ab6ea2e","0x90c0c1f774e77d9fad044aa06009a15e33941477b4b9a79fa43f327608a0a54524b3fcef0a896cb0df790e9995b6ebf1","0xab23c89f138f4252fc3922e24b7254743af1259fa1aeae90e98315c664c50800cecfc72a4d45ee772f73c4bb22b8646f","0x865dfd7192acc296f26e74ae537cd8a54c28450f18d579ed752ad9e0c5dcb2862e160e52e87859d71f433a3d4f5ca393","0x82d333a47c24d4958e5b07be4abe85234c5ad1b685719a1f02131a612022ce0c726e58d52a53cf80b4a8afb21667dee1","0xb6ad11e5d15f77c1143b1697344911b9c590110fdd8dd09df2e58bfd757269169deefe8be3544d4e049fb3776fb0bcfb","0x8978bdb97d45647584b8b9971246421b2f93d9ac648b1ed6595ad8326f80c107344a2c85d1756cd2f56b748001d5fd30","0xb4e84be7005df300900c6f5f67cf288374e33c3f05c2f10b6d2ff754e92ea8577d55b91e22cea2782250a8bc7d2af46d","0xae5163dc807af48bc827d2fd86b7c37de5a364d0d504c2c29a1b0a243601016b21c0fda5d0a446b9cb2a333f0c08ab20","0xad297ab0ef5f34448ceffef73c7104791cacae92aed22df8def9034b0f111b2af4f4365259dccecb46a1208fd3354fcd","0x9081bebcd06b4976d992d98a499397a44da20650ad4a1e0fb15dc63db8744d60d70dff0c6e2c3bb43ee35d1940683d1b","0xb3b3c89c783ee18bc030384914fafb8608d54c370005c49085fe8de22df6e04828b082c2fe7b595bd884986d688345f5","0xa232213cdd2b3bbdf5f61e65d57e28ee988c2b48185c9ac59b7372bc05c5b5763e19086ceaefb597b8e2b21b30aaacde","0x8d8be92bde8af1b9df13d5a8ed8a3a01eab6ee4cf883d7987c1d78c0d7d9b53a8630541fddf5e324b6cf4900435b1df8","0xad84464b3966ec5bede84aa487facfca7823af383715078da03b387cc2f5d5597cdd7d025aa07db00a38b953bdeb6e3f","0x889586bc28e52a4510bc9e8f1e673835ff4f27732b3954b6b7cd371d10a453ba793cfdfacf4ce20ca819310e541198b5","0xb35220775df2432a8923a1e3e786869c78f1661ed4e16bd91b439105f549487fb84bbea0590124a1d7aa4e5b08a60143","0x911bb496153aa457e3302ea8e74427962c6eb57e97096f65cafe45a238f739b86d4b790debd5c7359f18f3642d7d774c","0x89db41a6183c2fe47cf54d1e00c3cfaae53df634a32cccd5cf0c0a73e95ee0450fc3d060bb6878780fbf5f30d9e29aac","0x8774d1d544c4cc583fb649d0bbba86c2d2b5abb4c0395d7d1dac08ab1a2cc795030bdbdce6e3213154d4f2c748ccdaef","0xa1dbd288ae846edbfba77f7342faf45bdc0c5d5ce8483877acce6d00e09ef49d30fb40d4764d6637658d5ac738e0e197","0xb74c0f5b4125900f20e11e4719f69bac8d9be792e6901800d93f7f49733bc42bfb047220c531373a224f5564b6e6ecbb","0xa73eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086","0x80fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a55","0x913e4eec6be4605946086d38f531d68fe6f4669777c2d066eff79b72a4616ad1538aae7b74066575669d7ce065a7f47d","0x97363100f195df58c141aa327440a105abe321f4ebc6aea2d5f56c1fb7732ebfa5402349f6da72a6182c6bbedaeb8567","0x8c8b694b04d98a749a0763c72fc020ef61b2bb3f63ebb182cb2e568f6a8b9ca3ae013ae78317599e7e7ba2a528ec754a","0xaf048ba47a86a6d110fc8e7723a99d69961112612f140062cca193d3fc937cf5148671a78b6caa9f43a5cf239c3db230","0x92e5cd122e484c8480c430738091f23f30773477d9850c3026824f1f58c75cf20365d950607e159717864c0760432edb","0xab03beff9e24a04f469555b1bc6af53aa8c49c27b97878ff3b4fbf5e9795072f4d2b928bff4abbbd72d9aa272d1f100e","0x9252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada","0x84614d2ae5bc594a0c639bed6b6a1dc15d608010848b475d389d43001346ed5f511da983cc5df62b6e49c32c0ef5b24c","0xa99987ba6c0eb0fd4fbd5020a2db501128eb9d6a9a173e74462571985403f33959fc2f526b9a424d6915a77910939fc3","0x87109a988e34933e29c2623b4e604d23195b0346a76f92d51c074f07ce322de8e1bef1993477777c0eb9a9e95c16785f","0x8e7cb413850ecb6f1d2ded9851e382d945a8fee01f8f55184c7b0817000073944c6b6c77164e0a2272c39410fde18e58"]},"next_sync_committee_branch":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"],"signature_slot":"1234","sync_aggregate":{"sync_committee_bits":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","sync_committee_signature":"0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}},"version":"bellatrix"}] \ No newline at end of file diff --git a/cl/beacon/handler/test_data/validator_1.json b/cl/beacon/handler/test_data/validator_1.json new file mode 100644 index 00000000000..ab95300dffb --- /dev/null +++ b/cl/beacon/handler/test_data/validator_1.json @@ -0,0 +1 @@ +{"data":{"balance":"32000408740","index":"4","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005ac1746fa6585b6333554902f3e7c7bd548cb1b61c26d6812101cedd3ec670"}},"execution_optimistic":false,"finalized":true} \ No newline at end of file diff --git a/cl/beacon/handler/test_data/validators_some.json b/cl/beacon/handler/test_data/validators_some.json new file mode 100644 index 00000000000..e3f6e69da5c --- /dev/null +++ b/cl/beacon/handler/test_data/validators_some.json @@ -0,0 +1 @@ +{"data":[{"balance":"31999744330","index":"0","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x00bba1b6980555a68535b416e6f33726afcf6da826d384247bb332920f457889"}},{"balance":"31999744330","index":"1","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x001f09ed305c0767d56f1b3bdb25f301298027f8e98a8e0cd2dcbcc660723d7b"}},{"balance":"32000076535","index":"2","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x006adc4a1e4caba37c54d56d2411fd0df3a102f8489a4c1be535f4fd5f8810c9"}},{"balance":"32000408740","index":"4","status":"active_ongoing","validator":{"activation_eligibility_epoch":"0","activation_epoch":"0","effective_balance":"32000000000","exit_epoch":"18446744073709551615","pubkey":"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc","slashed":false,"withdrawable_epoch":"18446744073709551615","withdrawal_credentials":"0x005ac1746fa6585b6333554902f3e7c7bd548cb1b61c26d6812101cedd3ec670"}}],"execution_optimistic":false,"finalized":true} \ No newline at end of file diff --git a/cl/beacon/handler/utils_test.go b/cl/beacon/handler/utils_test.go index a23d8654aab..76e72eb2cdf 100644 --- a/cl/beacon/handler/utils_test.go +++ b/cl/beacon/handler/utils_test.go @@ -1,30 +1,38 @@ -package handler_test +package handler import ( "context" + "math" "testing" + "github.com/ledgerwatch/log/v3" + "github.com/spf13/afero" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/erigon/cl/antiquary" "github.com/ledgerwatch/erigon/cl/antiquary/tests" - "github.com/ledgerwatch/erigon/cl/beacon/handler" + "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" "github.com/ledgerwatch/erigon/cl/beacon/synced_data" "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/clparams/initial_state" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" "github.com/ledgerwatch/erigon/cl/persistence/state/historical_states_reader" "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" + mock_services2 "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/phase1/network/services/mock_services" "github.com/ledgerwatch/erigon/cl/pool" - "github.com/ledgerwatch/log/v3" - "github.com/spf13/afero" - "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/cl/validator/validator_params" ) -func setupTestingHandler(t *testing.T, v clparams.StateVersion, logger log.Logger) (db kv.RwDB, blocks []*cltypes.SignedBeaconBlock, f afero.Fs, preState, postState *state.CachingBeaconState, h *handler.ApiHandler, opPool pool.OperationsPool, syncedData *synced_data.SyncedDataManager, fcu *forkchoice.ForkChoiceStorageMock) { +func setupTestingHandler(t *testing.T, v clparams.StateVersion, logger log.Logger) (db kv.RwDB, blocks []*cltypes.SignedBeaconBlock, f afero.Fs, preState, postState *state.CachingBeaconState, h *ApiHandler, opPool pool.OperationsPool, syncedData *synced_data.SyncedDataManager, fcu *mock_services2.ForkChoiceStorageMock, vp *validator_params.ValidatorParams) { bcfg := clparams.MainnetBeaconConfig if v == clparams.Phase0Version { blocks, preState, postState = tests.GetPhase0Random() @@ -32,31 +40,90 @@ func setupTestingHandler(t *testing.T, v clparams.StateVersion, logger log.Logge bcfg.AltairForkEpoch = 1 bcfg.BellatrixForkEpoch = 1 blocks, preState, postState = tests.GetBellatrixRandom() - } else { - require.FailNow(t, "unknown state version") + } else if v == clparams.CapellaVersion { + bcfg.AltairForkEpoch = 1 + bcfg.BellatrixForkEpoch = 1 + bcfg.CapellaForkEpoch = 1 + blocks, preState, postState = tests.GetCapellaRandom() } - fcu = forkchoice.NewForkChoiceStorageMock() + fcu = mock_services2.NewForkChoiceStorageMock(t) db = memdb.NewTestDB(t) + blobDb := memdb.NewTestDB(t) var reader *tests.MockBlockReader - reader, f = tests.LoadChain(blocks, postState, db, t) + reader = tests.LoadChain(blocks, postState, db, t) + firstBlockRoot, _ := blocks[0].Block.HashSSZ() + firstBlockHeader := blocks[0].SignedBeaconBlockHeader() - rawDB := persistence.NewAferoRawBlockSaver(f, &clparams.MainnetBeaconConfig) bcfg.InitializeForkSchedule() ctx := context.Background() vt := state_accessors.NewStaticValidatorTable() - a := antiquary.NewAntiquary(ctx, preState, vt, &bcfg, datadir.New("/tmp"), nil, db, nil, reader, nil, logger, true, true, f) + a := antiquary.NewAntiquary(ctx, nil, preState, vt, &bcfg, datadir.New("/tmp"), nil, db, nil, reader, logger, true, true, false) require.NoError(t, a.IncrementBeaconState(ctx, blocks[len(blocks)-1].Block.Slot+33)) // historical states reader below - statesReader := historical_states_reader.NewHistoricalStatesReader(&bcfg, reader, vt, f, preState) + statesReader := historical_states_reader.NewHistoricalStatesReader(&bcfg, reader, vt, preState) opPool = pool.NewOperationsPool(&bcfg) fcu.Pool = opPool syncedData = synced_data.NewSyncedDataManager(true, &bcfg) - gC := clparams.GenesisConfigs[clparams.MainnetNetwork] - h = handler.NewApiHandler( - &gC, + genesis, err := initial_state.GetGenesisState(clparams.MainnetNetwork) + require.NoError(t, err) + ethClock := eth_clock.NewEthereumClock(genesis.GenesisTime(), genesis.GenesisValidatorsRoot(), &bcfg) + blobStorage := blob_storage.NewBlobStore(blobDb, afero.NewMemMapFs(), math.MaxUint64, &bcfg, ethClock) + blobStorage.WriteBlobSidecars(ctx, firstBlockRoot, []*cltypes.BlobSidecar{ + { + Index: 0, + Blob: cltypes.Blob{byte(1)}, + SignedBlockHeader: firstBlockHeader, + KzgCommitment: [48]byte{69}, + CommitmentInclusionProof: solid.NewHashVector(17), + }, + { + Index: 1, + Blob: cltypes.Blob{byte(2)}, + SignedBlockHeader: firstBlockHeader, + KzgCommitment: [48]byte{1}, + CommitmentInclusionProof: solid.NewHashVector(17), + }, + }) + ctrl := gomock.NewController(t) + syncCommitteeMessagesService := mock_services.NewMockSyncCommitteeMessagesService(ctrl) + syncContributionService := mock_services.NewMockSyncContributionService(ctrl) + aggregateAndProofsService := mock_services.NewMockAggregateAndProofService(ctrl) + voluntaryExitService := mock_services.NewMockVoluntaryExitService(ctrl) + blsToExecutionChangeService := mock_services.NewMockBLSToExecutionChangeService(ctrl) + proposerSlashingService := mock_services.NewMockProposerSlashingService(ctrl) + + // ctx context.Context, subnetID *uint64, msg *cltypes.SyncCommitteeMessage) error + syncCommitteeMessagesService.EXPECT().ProcessMessage(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, subnetID *uint64, msg *cltypes.SyncCommitteeMessage) error { + return h.syncMessagePool.AddSyncCommitteeMessage(postState, *subnetID, msg) + }).AnyTimes() + + syncContributionService.EXPECT().ProcessMessage(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, subnetID *uint64, msg *cltypes.SignedContributionAndProof) error { + return h.syncMessagePool.AddSyncContribution(postState, msg.Message.Contribution) + }).AnyTimes() + aggregateAndProofsService.EXPECT().ProcessMessage(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, subnetID *uint64, msg *cltypes.SignedAggregateAndProof) error { + opPool.AttestationsPool.Insert(msg.Message.Aggregate.Signature(), msg.Message.Aggregate) + return nil + }).AnyTimes() + voluntaryExitService.EXPECT().ProcessMessage(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, subnetID *uint64, msg *cltypes.SignedVoluntaryExit) error { + opPool.VoluntaryExitsPool.Insert(msg.VoluntaryExit.ValidatorIndex, msg) + return nil + }).AnyTimes() + blsToExecutionChangeService.EXPECT().ProcessMessage(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, subnetID *uint64, msg *cltypes.SignedBLSToExecutionChange) error { + opPool.BLSToExecutionChangesPool.Insert(msg.Signature, msg) + return nil + }).AnyTimes() + proposerSlashingService.EXPECT().ProcessMessage(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, subnetID *uint64, msg *cltypes.ProposerSlashing) error { + opPool.ProposerSlashingsPool.Insert(pool.ComputeKeyForProposerSlashing(msg), msg) + return nil + }).AnyTimes() + + vp = validator_params.NewValidatorParams() + h = NewApiHandler( + logger, + &clparams.NetworkConfig{}, + ethClock, &bcfg, - rawDB, db, fcu, opPool, @@ -64,7 +131,24 @@ func setupTestingHandler(t *testing.T, v clparams.StateVersion, logger log.Logge syncedData, statesReader, nil, - "test-version") + "test-version", &beacon_router_configuration.RouterConfiguration{ + Beacon: true, + Node: true, + Builder: true, + Config: true, + Debug: true, + Events: true, + Validator: true, + Lighthouse: true, + }, nil, blobStorage, nil, vp, nil, nil, fcu.SyncContributionPool, nil, nil, + syncCommitteeMessagesService, + syncContributionService, + aggregateAndProofsService, + nil, + voluntaryExitService, + blsToExecutionChangeService, + proposerSlashingService, + ) // TODO: add tests h.Init() return } diff --git a/cl/beacon/handler/validator_registration.go b/cl/beacon/handler/validator_registration.go new file mode 100644 index 00000000000..c055d6a180c --- /dev/null +++ b/cl/beacon/handler/validator_registration.go @@ -0,0 +1,27 @@ +package handler + +import ( + "encoding/json" + "net/http" + + libcommon "github.com/ledgerwatch/erigon-lib/common" +) + +type ValidatorPreparationPayload struct { + ValidatorIndex uint64 `json:"validator_index,string"` + FeeRecipient libcommon.Address `json:"fee_recipient"` +} + +func (a *ApiHandler) PostEthV1ValidatorPrepareBeaconProposal(w http.ResponseWriter, r *http.Request) { + req := []ValidatorPreparationPayload{} + // decode request with json + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + for _, v := range req { + a.logger.Debug("[Caplin] Registred new validator", "index", v.ValidatorIndex, "fee_recipient", v.FeeRecipient.String()) + a.validatorParams.SetFeeRecipient(v.ValidatorIndex, v.FeeRecipient) + } + w.WriteHeader(http.StatusOK) +} diff --git a/cl/beacon/handler/validator_registration_test.go b/cl/beacon/handler/validator_registration_test.go new file mode 100644 index 00000000000..0e3cb3234fb --- /dev/null +++ b/cl/beacon/handler/validator_registration_test.go @@ -0,0 +1,44 @@ +package handler + +import ( + "bytes" + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" +) + +func TestPostEthV1ValidatorPreparation(t *testing.T) { + _, _, _, _, _, handler, _, _, _, vp := setupTestingHandler(t, clparams.BellatrixVersion, log.Root()) + server := httptest.NewServer(handler.mux) + defer server.Close() + req := []ValidatorPreparationPayload{ + { + ValidatorIndex: 1, + FeeRecipient: libcommon.Address{1}, + }, + { + ValidatorIndex: 2, + FeeRecipient: libcommon.Address{2}, + }, + } + + reqByte, err := json.Marshal(req) + require.NoError(t, err) + + resp, err := http.Post(server.URL+"/eth/v1/validator/prepare_beacon_proposer", "application/json", bytes.NewBuffer(reqByte)) + require.NoError(t, err) + defer resp.Body.Close() + require.Equal(t, 200, resp.StatusCode) + + a1, _ := vp.GetFeeRecipient(1) + a2, _ := vp.GetFeeRecipient(2) + + require.Equal(t, libcommon.Address{1}, a1) + require.Equal(t, libcommon.Address{2}, a2) +} diff --git a/cl/beacon/handler/validator_test.go b/cl/beacon/handler/validator_test.go new file mode 100644 index 00000000000..a314d8ef2dc --- /dev/null +++ b/cl/beacon/handler/validator_test.go @@ -0,0 +1,175 @@ +package handler + +import ( + "encoding/json" + "log" + "net/http" + "net/http/httptest" + "testing" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + mockaggregation "github.com/ledgerwatch/erigon/cl/aggregation/mock_services" + "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/pool" + "github.com/ledgerwatch/erigon/common" + "github.com/stretchr/testify/suite" + "go.uber.org/mock/gomock" +) + +type validatorTestSuite struct { + suite.Suite + apiHandler *ApiHandler + mockAggrPool *mockaggregation.MockAggregationPool + gomockCtrl *gomock.Controller +} + +func (t *validatorTestSuite) SetupTest() { + gomockCtrl := gomock.NewController(t.T()) + t.mockAggrPool = mockaggregation.NewMockAggregationPool(gomockCtrl) + t.apiHandler = NewApiHandler( + nil, + nil, + nil, + nil, + nil, + nil, + pool.OperationsPool{}, + nil, + nil, + nil, + nil, + "0", + &beacon_router_configuration.RouterConfiguration{Validator: true}, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + t.mockAggrPool, + nil, + nil, + nil, + nil, + nil, + nil, + nil, + ) + t.gomockCtrl = gomockCtrl +} + +func (t *validatorTestSuite) TearDownTest() { + t.gomockCtrl.Finish() +} + +func (t *validatorTestSuite) TestGetEthV1ValidatorAggregateAttestation() { + mockDataRoot := libcommon.HexToHash("0x123").String() + + tests := []struct { + name string + method string + url string + mock func() + expCode int + expBody any + }{ + { + name: "empty attestation data root", + method: http.MethodGet, + url: "/eth/v1/validator/aggregate_attestation?slot=1", + mock: func() {}, + expCode: http.StatusBadRequest, + expBody: map[string]any{ + "code": float64(http.StatusBadRequest), + "message": "attestation_data_root is required", + }, + }, + { + name: "slot mismatch", + method: http.MethodGet, + url: "/eth/v1/validator/aggregate_attestation?attestation_data_root=" + mockDataRoot + "&slot=1", + mock: func() { + ret := *solid.NewAttestionFromParameters( + []byte{}, + solid.NewAttestionDataFromParameters( + 123456, + 1, + libcommon.HexToHash(mockDataRoot), + solid.NewCheckpointFromParameters(libcommon.Hash{}, 1), + solid.NewCheckpointFromParameters(libcommon.Hash{}, 1), + ), + [96]byte{}, + ) + t.mockAggrPool.EXPECT().GetAggregatationByRoot(libcommon.HexToHash(mockDataRoot)).Return(&ret).Times(1) + }, + expCode: http.StatusBadRequest, + expBody: map[string]any{ + "code": float64(http.StatusBadRequest), + "message": "attestation slot mismatch", + }, + }, + { + name: "pass", + method: http.MethodGet, + url: "/eth/v1/validator/aggregate_attestation?attestation_data_root=" + mockDataRoot + "&slot=1", + mock: func() { + ret := *solid.NewAttestionFromParameters( + []byte{0b00111111, 0b00000011, 0, 0}, + solid.NewAttestionDataFromParameters( + 1, + 1, + libcommon.HexToHash(mockDataRoot), + solid.NewCheckpointFromParameters(libcommon.Hash{}, 1), + solid.NewCheckpointFromParameters(libcommon.Hash{}, 1), + ), + [96]byte{0, 1, 2, 3, 4, 5}, + ) + t.mockAggrPool.EXPECT().GetAggregatationByRoot(libcommon.HexToHash(mockDataRoot)).Return(&ret).Times(1) + }, + expCode: http.StatusOK, + expBody: map[string]any{ + "data": map[string]any{ + "aggregation_bits": "0x" + common.Bytes2Hex([]byte{0b00111111, 0b00000011, 0, 0}), + "signature": "0x" + common.Bytes2Hex([][96]byte{{0, 1, 2, 3, 4, 5}}[0][:]), + "data": map[string]any{ + "slot": "1", + "index": "1", + "beacon_block_root": mockDataRoot, + "source": map[string]any{ + "epoch": "1", + "root": libcommon.Hash{}.String(), + }, + "target": map[string]any{ + "epoch": "1", + "root": libcommon.Hash{}.String(), + }, + }, + }, + }, + }, + } + for _, tc := range tests { + log.Printf("test case: %s", tc.name) + tc.mock() + req, err := http.NewRequest(tc.method, tc.url, nil) + t.NoError(err) + rr := httptest.NewRecorder() + t.apiHandler.ServeHTTP(rr, req) + t.Equal(tc.expCode, rr.Code) + + // check body by comparing map + jsonResp := map[string]any{} + err = json.Unmarshal(rr.Body.Bytes(), &jsonResp) + t.NoError(err) + t.Equal(tc.expBody, jsonResp) + + t.True(t.gomockCtrl.Satisfied(), "mock expectations were not met") + } +} + +func TestValidator(t *testing.T) { + suite.Run(t, new(validatorTestSuite)) +} diff --git a/cl/beacon/handler/validators.go b/cl/beacon/handler/validators.go index f08a9a850b6..7ea0746f398 100644 --- a/cl/beacon/handler/validators.go +++ b/cl/beacon/handler/validators.go @@ -5,8 +5,10 @@ import ( "fmt" "math" "net/http" + "slices" "strconv" "strings" + "sync" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" @@ -15,9 +17,16 @@ import ( "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "golang.org/x/exp/slices" + "github.com/ledgerwatch/log/v3" + "github.com/pkg/errors" ) +var stringsBuilderPool = sync.Pool{ + New: func() interface{} { + return new(strings.Builder) + }, +} + type validatorStatus int var validatorJsonTemplate = "{\"index\":\"%d\",\"status\":\"%s\",\"balance\":\"%d\",\"validator\":{\"pubkey\":\"0x%x\",\"withdrawal_credentials\":\"0x%x\",\"effective_balance\":\"%d\",\"slashed\":%t,\"activation_eligibility_epoch\":\"%d\",\"activation_epoch\":\"%d\",\"exit_epoch\":\"%d\",\"withdrawable_epoch\":\"%d\"}}" @@ -151,13 +160,13 @@ func parseStatuses(s []string) ([]validatorStatus, error) { statuses := make([]validatorStatus, 0, len(s)) if len(s) > maxValidatorsLookupFilter { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, "too many statuses requested") + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("too many statuses requested")) } for _, status := range s { s, err := validatorStatusFromString(status) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } if _, ok := seenAlready[s]; ok { continue @@ -173,92 +182,122 @@ func checkValidValidatorId(s string) (bool, error) { if len(s) == 98 && s[:2] == "0x" { // check if it is a valid hex string if _, err := hex.DecodeString(s[2:]); err != nil { - return false, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return false, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } return true, nil } // If it is not 0x prefixed, then it must be a number, check if it is a base-10 number if _, err := strconv.ParseUint(s, 10, 64); err != nil { - return false, beaconhttp.NewEndpointError(http.StatusBadRequest, "invalid validator id") + return false, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("invalid validator id")) } return false, nil } -func (a *ApiHandler) getAllValidators(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconStatesValidators(w http.ResponseWriter, r *http.Request) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } defer tx.Rollback() blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return } blockRoot, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + http.Error(w, err.Error(), httpStatus) + return } queryFilters, err := beaconhttp.StringListFromQueryParams(r, "status") if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return } validatorIds, err := beaconhttp.StringListFromQueryParams(r, "id") if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return } if len(validatorIds) > maxValidatorsLookupFilter { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, "too many validators requested") + http.Error(w, fmt.Errorf("too many validators requested").Error(), http.StatusBadRequest) + return } filterIndicies, err := parseQueryValidatorIndicies(tx, validatorIds) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusBadRequest) + return } // Check the filters' validity statusFilters, err := parseStatuses(queryFilters) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusBadRequest) + return } if blockId.Head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. - s, cn := a.syncedData.HeadState() - defer cn() + s := a.syncedData.HeadState() if s == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "node is not synced") + http.Error(w, fmt.Errorf("node is not synced").Error(), http.StatusServiceUnavailable) + return } - return responseValidators(filterIndicies, statusFilters, state.Epoch(s), s.Balances(), s.Validators(), false) + responseValidators(w, filterIndicies, statusFilters, state.Epoch(s), s.Balances(), s.Validators(), false) + return } slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, blockRoot) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "state not found") + http.Error(w, fmt.Errorf("state not found").Error(), http.StatusNotFound) + return } stateEpoch := *slot / a.beaconChainCfg.SlotsPerEpoch - state, err := a.forkchoiceStore.GetStateAtBlockRoot(blockRoot, true) - if err != nil { - return nil, err - } - if state == nil { + + if *slot < a.forkchoiceStore.LowestAvaiableSlot() { validatorSet, err := a.stateReader.ReadValidatorsForHistoricalState(tx, *slot) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } balances, err := a.stateReader.ReadValidatorsBalances(tx, *slot) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } - return responseValidators(filterIndicies, statusFilters, stateEpoch, balances, validatorSet, true) + responseValidators(w, filterIndicies, statusFilters, stateEpoch, balances, validatorSet, true) + return + } + balances, err := a.forkchoiceStore.GetBalances(blockRoot) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + if balances == nil { + http.Error(w, fmt.Errorf("balances not found").Error(), http.StatusNotFound) + return + } + validators, err := a.forkchoiceStore.GetValidatorSet(blockRoot) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + if validators == nil { + http.Error(w, fmt.Errorf("validators not found").Error(), http.StatusNotFound) + return } - return responseValidators(filterIndicies, statusFilters, stateEpoch, state.Balances(), state.Validators(), *slot <= a.forkchoiceStore.FinalizedSlot()) + responseValidators(w, filterIndicies, statusFilters, stateEpoch, balances, validators, *slot <= a.forkchoiceStore.FinalizedSlot()) + return } func parseQueryValidatorIndex(tx kv.Tx, id string) (uint64, error) { @@ -269,7 +308,7 @@ func parseQueryValidatorIndex(tx kv.Tx, id string) (uint64, error) { if isPublicKey { var b48 libcommon.Bytes48 if err := b48.UnmarshalText([]byte(id)); err != nil { - return 0, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return 0, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } has, err := tx.Has(kv.InvertedValidatorPublicKeys, b48[:]) if err != nil { @@ -283,13 +322,13 @@ func parseQueryValidatorIndex(tx kv.Tx, id string) (uint64, error) { return 0, err } if !ok { - return 0, beaconhttp.NewEndpointError(http.StatusNotFound, "validator not found") + return 0, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("validator not found")) } return idx, nil } idx, err := strconv.ParseUint(id, 10, 64) if err != nil { - return 0, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return 0, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } return idx, nil @@ -308,7 +347,7 @@ func parseQueryValidatorIndicies(tx kv.Tx, ids []string) ([]uint64, error) { return filterIndicies, nil } -func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconStatesValidator(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) @@ -319,17 +358,17 @@ func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } blockRoot, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + return nil, beaconhttp.NewEndpointError(httpStatus, err) } validatorId, err := beaconhttp.StringFromRequest(r, "validator_id") if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err) } validatorIndex, err := parseQueryValidatorIndex(tx, validatorId) @@ -338,13 +377,15 @@ func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) } if blockId.Head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. - s, cn := a.syncedData.HeadState() - defer cn() + s := a.syncedData.HeadState() + if s == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("node is not synced")) + } if s.ValidatorLength() <= int(validatorIndex) { return newBeaconResponse([]int{}).WithFinalized(false), nil } if s == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "node is not synced") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("node is not synced")) } return responseValidator(validatorIndex, state.Epoch(s), s.Balances(), s.Validators(), false) } @@ -354,14 +395,11 @@ func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "state not found") + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("state not found")) } stateEpoch := *slot / a.beaconChainCfg.SlotsPerEpoch - state, err := a.forkchoiceStore.GetStateAtBlockRoot(blockRoot, true) - if err != nil { - return nil, err - } - if state == nil { + + if *slot < a.forkchoiceStore.LowestAvaiableSlot() { validatorSet, err := a.stateReader.ReadValidatorsForHistoricalState(tx, *slot) if err != nil { return nil, err @@ -372,70 +410,105 @@ func (a *ApiHandler) getSingleValidator(w http.ResponseWriter, r *http.Request) } return responseValidator(validatorIndex, stateEpoch, balances, validatorSet, true) } - return responseValidator(validatorIndex, stateEpoch, state.Balances(), state.Validators(), *slot <= a.forkchoiceStore.FinalizedSlot()) + balances, err := a.forkchoiceStore.GetBalances(blockRoot) + if err != nil { + return nil, err + } + if balances == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("balances not found")) + } + validators, err := a.forkchoiceStore.GetValidatorSet(blockRoot) + if err != nil { + return nil, err + } + if validators == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("validators not found")) + } + return responseValidator(validatorIndex, stateEpoch, balances, validators, *slot <= a.forkchoiceStore.FinalizedSlot()) } -func (a *ApiHandler) getAllValidatorsBalances(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { +func (a *ApiHandler) GetEthV1BeaconValidatorsBalances(w http.ResponseWriter, r *http.Request) { ctx := r.Context() tx, err := a.indiciesDB.BeginRo(ctx) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } defer tx.Rollback() blockId, err := beaconhttp.StateIdFromRequest(r) if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return } blockRoot, httpStatus, err := a.blockRootFromStateId(ctx, tx, blockId) if err != nil { - return nil, beaconhttp.NewEndpointError(httpStatus, err.Error()) + http.Error(w, err.Error(), httpStatus) + return } validatorIds, err := beaconhttp.StringListFromQueryParams(r, "id") if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return } if len(validatorIds) > maxValidatorsLookupFilter { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, "too many validators requested") + http.Error(w, fmt.Errorf("too many validators requested").Error(), http.StatusBadRequest) + return } filterIndicies, err := parseQueryValidatorIndicies(tx, validatorIds) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusBadRequest) + return } if blockId.Head() { // Lets see if we point to head, if yes then we need to look at the head state we always keep. - s, cn := a.syncedData.HeadState() - defer cn() + s := a.syncedData.HeadState() if s == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "node is not synced") + http.Error(w, fmt.Errorf("node is not synced").Error(), http.StatusServiceUnavailable) + return } - return responseValidatorsBalances(filterIndicies, state.Epoch(s), s.Balances(), false) + responseValidatorsBalances(w, filterIndicies, state.Epoch(s), s.Balances(), false) + return } slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, blockRoot) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } if slot == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "state not found") + http.Error(w, fmt.Errorf("state not found").Error(), http.StatusNotFound) + return } stateEpoch := *slot / a.beaconChainCfg.SlotsPerEpoch - state, err := a.forkchoiceStore.GetStateAtBlockRoot(blockRoot, true) - if err != nil { - return nil, err - } - if state == nil { + + if *slot < a.forkchoiceStore.LowestAvaiableSlot() { balances, err := a.stateReader.ReadValidatorsBalances(tx, *slot) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } - return responseValidatorsBalances(filterIndicies, stateEpoch, balances, true) + if balances == nil { + + http.Error(w, fmt.Errorf("validators not found, node may node be running in archivial node").Error(), http.StatusNotFound) + } + responseValidatorsBalances(w, filterIndicies, stateEpoch, balances, true) + return + } + balances, err := a.forkchoiceStore.GetBalances(blockRoot) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + if balances == nil { + http.Error(w, fmt.Errorf("balances not found").Error(), http.StatusNotFound) + return } - return responseValidatorsBalances(filterIndicies, stateEpoch, state.Balances(), *slot <= a.forkchoiceStore.FinalizedSlot()) + responseValidatorsBalances(w, filterIndicies, stateEpoch, balances, *slot <= a.forkchoiceStore.FinalizedSlot()) } type directString string @@ -444,8 +517,15 @@ func (d directString) MarshalJSON() ([]byte, error) { return []byte(d), nil } -func responseValidators(filterIndicies []uint64, filterStatuses []validatorStatus, stateEpoch uint64, balances solid.Uint64ListSSZ, validators *solid.ValidatorSet, finalized bool) (*beaconhttp.BeaconResponse, error) { - var b strings.Builder +func responseValidators(w http.ResponseWriter, filterIndicies []uint64, filterStatuses []validatorStatus, stateEpoch uint64, balances solid.Uint64ListSSZ, validators *solid.ValidatorSet, finalized bool) { + b := stringsBuilderPool.Get().(*strings.Builder) + defer stringsBuilderPool.Put(b) + b.Reset() + + if _, err := b.WriteString("{\"execution_optimistic\":false,\"finalized\":" + strconv.FormatBool(finalized) + ",\"data\":"); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } b.WriteString("[") first := true var err error @@ -453,6 +533,7 @@ func responseValidators(filterIndicies []uint64, filterStatuses []validatorStatu if len(filterIndicies) > 0 && !slices.Contains(filterIndicies, uint64(i)) { return true } + // "{\"index\":\"%d\",\"status\":\"%s\",\"balance\":\"%d\",\"validator\":{\"pubkey\":\"0x%x\",\"withdrawal_credentials\":\"0x%x\",\"effective_balance\":\"%d\",\"slashed\":%t,\"activation_eligibility_epoch\":\"%d\",\"activation_epoch\":\"%d\",\"exit_epoch\":\"%d\",\"withdrawable_epoch\":\"%d\"}}" status := validatorStatusFromValidator(v, stateEpoch, balances.Get(i)) if shouldStatusBeFiltered(status, filterStatuses) { return true @@ -463,18 +544,37 @@ func responseValidators(filterIndicies []uint64, filterStatuses []validatorStatu } } first = false - if _, err = b.WriteString(fmt.Sprintf(validatorJsonTemplate, i, status.String(), balances.Get(i), v.PublicKey(), v.WithdrawalCredentials(), v.EffectiveBalance(), v.Slashed(), v.ActivationEligibilityEpoch(), v.ActivationEpoch(), v.ExitEpoch(), v.WithdrawableEpoch())); err != nil { + // if _, err = b.WriteString(fmt.Sprintf(validatorJsonTemplate, i, status.String(), balances.Get(i), v.PublicKey(), v.WithdrawalCredentials(), v.EffectiveBalance(), v.Slashed(), v.ActivationEligibilityEpoch(), v.ActivationEpoch(), v.ExitEpoch(), v.WithdrawableEpoch())); err != nil { + // return false + // } + if _, err = b.WriteString("{\"index\":\"" + strconv.FormatUint(uint64(i), 10) + + "\",\"status\":\"" + status.String() + + "\",\"balance\":\"" + strconv.FormatUint(balances.Get(i), 10) + + "\",\"validator\":{\"pubkey\":\"" + libcommon.Bytes48(v.PublicKey()).Hex() + + "\",\"withdrawal_credentials\":\"" + v.WithdrawalCredentials().Hex() + + "\",\"effective_balance\":\"" + strconv.FormatUint(v.EffectiveBalance(), 10) + + "\",\"slashed\":" + strconv.FormatBool(v.Slashed()) + + ",\"activation_eligibility_epoch\":\"" + strconv.FormatUint(v.ActivationEligibilityEpoch(), 10) + + "\",\"activation_epoch\":\"" + strconv.FormatUint(v.ActivationEpoch(), 10) + + "\",\"exit_epoch\":\"" + strconv.FormatUint(v.ExitEpoch(), 10) + + "\",\"withdrawable_epoch\":\"" + strconv.FormatUint(v.WithdrawableEpoch(), 10) + "\"}}"); err != nil { return false } + return true }) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } - _, err = b.WriteString("]\n") + _, err = b.WriteString("]}\n") + + if _, err := w.Write([]byte(b.String())); err != nil { + log.Error("failed to write response", "err", err) + } + return - return newBeaconResponse(directString(b.String())).WithFinalized(finalized), err } func responseValidator(idx uint64, stateEpoch uint64, balances solid.Uint64ListSSZ, validators *solid.ValidatorSet, finalized bool) (*beaconhttp.BeaconResponse, error) { @@ -483,6 +583,9 @@ func responseValidator(idx uint64, stateEpoch uint64, balances solid.Uint64ListS if validators.Length() <= int(idx) { return newBeaconResponse([]int{}).WithFinalized(finalized), nil } + if idx >= uint64(validators.Length()) { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("validator not found")) + } v := validators.Get(int(idx)) status := validatorStatusFromValidator(v, stateEpoch, balances.Get(int(idx))) @@ -496,10 +599,18 @@ func responseValidator(idx uint64, stateEpoch uint64, balances solid.Uint64ListS return newBeaconResponse(directString(b.String())).WithFinalized(finalized), err } -func responseValidatorsBalances(filterIndicies []uint64, stateEpoch uint64, balances solid.Uint64ListSSZ, finalized bool) (*beaconhttp.BeaconResponse, error) { - var b strings.Builder +func responseValidatorsBalances(w http.ResponseWriter, filterIndicies []uint64, stateEpoch uint64, balances solid.Uint64ListSSZ, finalized bool) { + b := stringsBuilderPool.Get().(*strings.Builder) + defer stringsBuilderPool.Put(b) + b.Reset() + + if _, err := b.WriteString("{\"execution_optimistic\":false,\"finalized\":" + strconv.FormatBool(finalized) + ",\"data\":"); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } b.WriteString("[") - jsonTemplate := "{\"index\":\"%d\",\"balance\":\"%d\"}" + + //jsonTemplate := "{\"index\":\"%d\",\"balance\":\"%d\"}" first := true var err error balances.Range(func(i int, v uint64, l int) bool { @@ -513,18 +624,20 @@ func responseValidatorsBalances(filterIndicies []uint64, stateEpoch uint64, bala } } first = false - if _, err = b.WriteString(fmt.Sprintf(jsonTemplate, i, v)); err != nil { + if _, err = b.WriteString("{\"index\":\"" + strconv.FormatUint(uint64(i), 10) + "\",\"balance\":\"" + strconv.FormatUint(v, 10) + "\"}"); err != nil { return false } return true }) if err != nil { - return nil, err + http.Error(w, err.Error(), http.StatusInternalServerError) + return } - _, err = b.WriteString("]\n") - - return newBeaconResponse(directString(b.String())).WithFinalized(finalized), err + _, err = b.WriteString("]}\n") + if _, err := w.Write([]byte(b.String())); err != nil { + log.Error("failed to write response", "err", err) + } } func shouldStatusBeFiltered(status validatorStatus, statuses []validatorStatus) bool { @@ -541,3 +654,30 @@ func shouldStatusBeFiltered(status validatorStatus, statuses []validatorStatus) } return true // filter if no filter condition is met } + +func (a *ApiHandler) GetEthV1ValidatorAggregateAttestation(w http.ResponseWriter, r *http.Request) (*beaconhttp.BeaconResponse, error) { + attDataRoot := r.URL.Query().Get("attestation_data_root") + if attDataRoot == "" { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("attestation_data_root is required")) + } + slot := r.URL.Query().Get("slot") + if slot == "" { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("slot is required")) + } + slotNum, err := strconv.ParseUint(slot, 10, 64) + if err != nil { + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, errors.WithMessage(err, "invalid slot")) + } + + attDataRootHash := libcommon.HexToHash(attDataRoot) + att := a.aggregatePool.GetAggregatationByRoot(attDataRootHash) + if att == nil { + return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Errorf("attestation not found. attestation_data_root")) + } + if slotNum != att.AttestantionData().Slot() { + log.Debug("attestation slot does not match", "attestation_data_root", attDataRoot, "slot_inquire", slot) + return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Errorf("attestation slot mismatch")) + } + + return newBeaconResponse(att), nil +} diff --git a/cl/beacon/middleware.go b/cl/beacon/middleware.go deleted file mode 100644 index 519aebf0527..00000000000 --- a/cl/beacon/middleware.go +++ /dev/null @@ -1 +0,0 @@ -package beacon diff --git a/cl/beacon/router.go b/cl/beacon/router.go index 4ffb605c7fc..8bb6bf1dd70 100644 --- a/cl/beacon/router.go +++ b/cl/beacon/router.go @@ -4,19 +4,17 @@ import ( "context" "net" "net/http" - "strings" + "time" "github.com/go-chi/chi/v5" "github.com/go-chi/cors" "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" "github.com/ledgerwatch/erigon/cl/beacon/handler" - "github.com/ledgerwatch/erigon/cl/beacon/validatorapi" "github.com/ledgerwatch/log/v3" ) type LayeredBeaconHandler struct { - ValidatorApi *validatorapi.ValidatorApiHandler - ArchiveApi *handler.ApiHandler + ArchiveApi *handler.ApiHandler } func ListenAndServe(beaconHandler *LayeredBeaconHandler, routerCfg beacon_router_configuration.RouterConfiguration) error { @@ -34,32 +32,23 @@ func ListenAndServe(beaconHandler *LayeredBeaconHandler, routerCfg beacon_router AllowCredentials: routerCfg.AllowCredentials, MaxAge: 4, })) - // enforce json content type - mux.Use(func(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - contentType := r.Header.Get("Content-Type") - if len(contentType) > 0 && !strings.EqualFold(contentType, "application/json") { - http.Error(w, "Content-Type header must be application/json", http.StatusUnsupportedMediaType) - return - } - h.ServeHTTP(w, r) - }) - }) - // layered handling - 404 on first handler falls back to the second - mux.HandleFunc("/eth/*", func(w http.ResponseWriter, r *http.Request) { - nfw := ¬FoundNoWriter{rw: w} - beaconHandler.ValidatorApi.ServeHTTP(nfw, r) + + mux.HandleFunc("/*", func(w http.ResponseWriter, r *http.Request) { + nfw := ¬FoundNoWriter{ResponseWriter: w, r: r} r = r.WithContext(context.WithValue(r.Context(), chi.RouteCtxKey, chi.NewRouteContext())) if isNotFound(nfw.code) || nfw.code == 0 { + start := time.Now() beaconHandler.ArchiveApi.ServeHTTP(w, r) + log.Debug("[Beacon API] Request", "uri", r.URL.String(), "path", r.URL.Path, "time", time.Since(start)) + } else { + log.Warn("[Beacon API] Request to unavaiable endpoint, check --beacon.api flag", "uri", r.URL.String(), "path", r.URL.Path) } }) - mux.HandleFunc("/validator/*", func(w http.ResponseWriter, r *http.Request) { - http.StripPrefix("/validator", beaconHandler.ValidatorApi).ServeHTTP(w, r) - }) - mux.HandleFunc("/archive/*", func(w http.ResponseWriter, r *http.Request) { - http.StripPrefix("/archive", beaconHandler.ArchiveApi).ServeHTTP(w, r) + mux.NotFound(func(w http.ResponseWriter, r *http.Request) { + log.Warn("[Beacon API] Not found", "method", r.Method, "path", r.URL.Path) + http.Error(w, "Not found", http.StatusNotFound) }) + server := &http.Server{ Handler: mux, ReadTimeout: routerCfg.ReadTimeTimeout, @@ -74,5 +63,6 @@ func ListenAndServe(beaconHandler *LayeredBeaconHandler, routerCfg beacon_router log.Warn("[Beacon API] failed to start serving", "addr", routerCfg.Address, "err", err) return err } + log.Info("[Beacon API] Listening", "addr", routerCfg.Address) return nil } diff --git a/cl/beacon/rw.go b/cl/beacon/rw.go index bab259297f8..9ddc9d1e51d 100644 --- a/cl/beacon/rw.go +++ b/cl/beacon/rw.go @@ -5,7 +5,8 @@ import ( ) type notFoundNoWriter struct { - rw http.ResponseWriter + http.ResponseWriter + r *http.Request code int headers http.Header @@ -34,7 +35,7 @@ func (f *notFoundNoWriter) Write(xs []byte) (int, error) { return 0, nil } // pass on the write - return f.rw.Write(xs) + return f.ResponseWriter.Write(xs) } func (f *notFoundNoWriter) WriteHeader(statusCode int) { @@ -46,14 +47,28 @@ func (f *notFoundNoWriter) WriteHeader(statusCode int) { f.headers = nil return } - f.rw.WriteHeader(statusCode) + f.ResponseWriter.WriteHeader(statusCode) // if we get here, it means it is a successful write. if f.headers != nil { for k, v := range f.headers { for _, x := range v { - f.rw.Header().Add(k, x) + f.ResponseWriter.Header().Add(k, x) } } } - f.headers = f.rw.Header() + f.headers = f.ResponseWriter.Header() +} +func (f *notFoundNoWriter) Flush() { + flusher, ok := f.ResponseWriter.(http.Flusher) + if !ok { + return + } + select { + case <-f.r.Context().Done(): + return + default: + } + if flusher != nil { + flusher.Flush() + } } diff --git a/cl/beacon/synced_data/interface.go b/cl/beacon/synced_data/interface.go new file mode 100644 index 00000000000..e7566b8eea8 --- /dev/null +++ b/cl/beacon/synced_data/interface.go @@ -0,0 +1,12 @@ +package synced_data + +import "github.com/ledgerwatch/erigon/cl/phase1/core/state" + +//go:generate mockgen -typed=true -destination=./mock_services/synced_data_mock.go -package=mock_services . SyncedData +type SyncedData interface { + OnHeadState(newState *state.CachingBeaconState) (err error) + HeadState() *state.CachingBeaconState + HeadStateReader() state.BeaconStateReader + Syncing() bool + HeadSlot() uint64 +} diff --git a/cl/beacon/synced_data/mock_services/synced_data_mock.go b/cl/beacon/synced_data/mock_services/synced_data_mock.go new file mode 100644 index 00000000000..a5111b2e485 --- /dev/null +++ b/cl/beacon/synced_data/mock_services/synced_data_mock.go @@ -0,0 +1,230 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/beacon/synced_data (interfaces: SyncedData) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/synced_data_mock.go -package=mock_services . SyncedData +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + reflect "reflect" + + state "github.com/ledgerwatch/erigon/cl/phase1/core/state" + gomock "go.uber.org/mock/gomock" +) + +// MockSyncedData is a mock of SyncedData interface. +type MockSyncedData struct { + ctrl *gomock.Controller + recorder *MockSyncedDataMockRecorder +} + +// MockSyncedDataMockRecorder is the mock recorder for MockSyncedData. +type MockSyncedDataMockRecorder struct { + mock *MockSyncedData +} + +// NewMockSyncedData creates a new mock instance. +func NewMockSyncedData(ctrl *gomock.Controller) *MockSyncedData { + mock := &MockSyncedData{ctrl: ctrl} + mock.recorder = &MockSyncedDataMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSyncedData) EXPECT() *MockSyncedDataMockRecorder { + return m.recorder +} + +// HeadSlot mocks base method. +func (m *MockSyncedData) HeadSlot() uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HeadSlot") + ret0, _ := ret[0].(uint64) + return ret0 +} + +// HeadSlot indicates an expected call of HeadSlot. +func (mr *MockSyncedDataMockRecorder) HeadSlot() *MockSyncedDataHeadSlotCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HeadSlot", reflect.TypeOf((*MockSyncedData)(nil).HeadSlot)) + return &MockSyncedDataHeadSlotCall{Call: call} +} + +// MockSyncedDataHeadSlotCall wrap *gomock.Call +type MockSyncedDataHeadSlotCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncedDataHeadSlotCall) Return(arg0 uint64) *MockSyncedDataHeadSlotCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncedDataHeadSlotCall) Do(f func() uint64) *MockSyncedDataHeadSlotCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncedDataHeadSlotCall) DoAndReturn(f func() uint64) *MockSyncedDataHeadSlotCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// HeadState mocks base method. +func (m *MockSyncedData) HeadState() *state.CachingBeaconState { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HeadState") + ret0, _ := ret[0].(*state.CachingBeaconState) + return ret0 +} + +// HeadState indicates an expected call of HeadState. +func (mr *MockSyncedDataMockRecorder) HeadState() *MockSyncedDataHeadStateCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HeadState", reflect.TypeOf((*MockSyncedData)(nil).HeadState)) + return &MockSyncedDataHeadStateCall{Call: call} +} + +// MockSyncedDataHeadStateCall wrap *gomock.Call +type MockSyncedDataHeadStateCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncedDataHeadStateCall) Return(arg0 *state.CachingBeaconState) *MockSyncedDataHeadStateCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncedDataHeadStateCall) Do(f func() *state.CachingBeaconState) *MockSyncedDataHeadStateCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncedDataHeadStateCall) DoAndReturn(f func() *state.CachingBeaconState) *MockSyncedDataHeadStateCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// HeadStateReader mocks base method. +func (m *MockSyncedData) HeadStateReader() state.BeaconStateReader { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HeadStateReader") + ret0, _ := ret[0].(state.BeaconStateReader) + return ret0 +} + +// HeadStateReader indicates an expected call of HeadStateReader. +func (mr *MockSyncedDataMockRecorder) HeadStateReader() *MockSyncedDataHeadStateReaderCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HeadStateReader", reflect.TypeOf((*MockSyncedData)(nil).HeadStateReader)) + return &MockSyncedDataHeadStateReaderCall{Call: call} +} + +// MockSyncedDataHeadStateReaderCall wrap *gomock.Call +type MockSyncedDataHeadStateReaderCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncedDataHeadStateReaderCall) Return(arg0 state.BeaconStateReader) *MockSyncedDataHeadStateReaderCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncedDataHeadStateReaderCall) Do(f func() state.BeaconStateReader) *MockSyncedDataHeadStateReaderCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncedDataHeadStateReaderCall) DoAndReturn(f func() state.BeaconStateReader) *MockSyncedDataHeadStateReaderCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// OnHeadState mocks base method. +func (m *MockSyncedData) OnHeadState(arg0 *state.CachingBeaconState) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnHeadState", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnHeadState indicates an expected call of OnHeadState. +func (mr *MockSyncedDataMockRecorder) OnHeadState(arg0 any) *MockSyncedDataOnHeadStateCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnHeadState", reflect.TypeOf((*MockSyncedData)(nil).OnHeadState), arg0) + return &MockSyncedDataOnHeadStateCall{Call: call} +} + +// MockSyncedDataOnHeadStateCall wrap *gomock.Call +type MockSyncedDataOnHeadStateCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncedDataOnHeadStateCall) Return(arg0 error) *MockSyncedDataOnHeadStateCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncedDataOnHeadStateCall) Do(f func(*state.CachingBeaconState) error) *MockSyncedDataOnHeadStateCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncedDataOnHeadStateCall) DoAndReturn(f func(*state.CachingBeaconState) error) *MockSyncedDataOnHeadStateCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Syncing mocks base method. +func (m *MockSyncedData) Syncing() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Syncing") + ret0, _ := ret[0].(bool) + return ret0 +} + +// Syncing indicates an expected call of Syncing. +func (mr *MockSyncedDataMockRecorder) Syncing() *MockSyncedDataSyncingCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Syncing", reflect.TypeOf((*MockSyncedData)(nil).Syncing)) + return &MockSyncedDataSyncingCall{Call: call} +} + +// MockSyncedDataSyncingCall wrap *gomock.Call +type MockSyncedDataSyncingCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncedDataSyncingCall) Return(arg0 bool) *MockSyncedDataSyncingCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncedDataSyncingCall) Do(f func() bool) *MockSyncedDataSyncingCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncedDataSyncingCall) DoAndReturn(f func() bool) *MockSyncedDataSyncingCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/beacon/synced_data/synced_data.go b/cl/beacon/synced_data/synced_data.go index 0d6f7e0789f..9248142d902 100644 --- a/cl/beacon/synced_data/synced_data.go +++ b/cl/beacon/synced_data/synced_data.go @@ -1,20 +1,16 @@ package synced_data import ( - "sync" + "sync/atomic" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/erigon/cl/utils" - "github.com/ledgerwatch/log/v3" ) type SyncedDataManager struct { enabled bool cfg *clparams.BeaconChainConfig - headState *state.CachingBeaconState - - mu sync.RWMutex + headState atomic.Value } func NewSyncedDataManager(enabled bool, cfg *clparams.BeaconChainConfig) *SyncedDataManager { @@ -28,54 +24,47 @@ func (s *SyncedDataManager) OnHeadState(newState *state.CachingBeaconState) (err if !s.enabled { return } - s.mu.Lock() - defer s.mu.Unlock() - if s.headState == nil { - s.headState, err = newState.Copy() - if err != nil { - return err - } - } - err = newState.CopyInto(s.headState) + st, err := newState.Copy() if err != nil { - log.Error("failed to copy head state", "err", err) + return err } + s.headState.Store(st) return } -func (s *SyncedDataManager) HeadState() (state *state.CachingBeaconState, cancel func()) { +func (s *SyncedDataManager) HeadState() *state.CachingBeaconState { if !s.enabled { - return nil, func() {} + return nil + } + if ret, ok := s.headState.Load().(*state.CachingBeaconState); ok { + return ret + } + return nil +} + +func (s *SyncedDataManager) HeadStateReader() state.BeaconStateReader { + headstate := s.HeadState() + if headstate == nil { + return nil } - s.mu.RLock() - return s.headState, s.mu.RUnlock + return headstate } func (s *SyncedDataManager) Syncing() bool { if !s.enabled { return false } - s.mu.RLock() - defer s.mu.RUnlock() - if s.headState == nil { - return true - } - - headEpoch := utils.GetCurrentEpoch(s.headState.GenesisTime(), s.cfg.SecondsPerSlot, s.cfg.SlotsPerEpoch) - // surplusMargin, give it a go if we are within 2 epochs of the head - surplusMargin := s.cfg.SlotsPerEpoch * 2 - return s.headState.Slot()+surplusMargin < headEpoch + return s.headState.Load() == nil } func (s *SyncedDataManager) HeadSlot() uint64 { if !s.enabled { return 0 } - s.mu.RLock() - defer s.mu.RUnlock() - if s.headState == nil { + st, ok := s.headState.Load().(*state.CachingBeaconState) + if !ok { return 0 } - return s.headState.Slot() + return st.Slot() } diff --git a/cl/beacon/validatorapi/get.go b/cl/beacon/validatorapi/get.go deleted file mode 100644 index 00cbbf1e374..00000000000 --- a/cl/beacon/validatorapi/get.go +++ /dev/null @@ -1,265 +0,0 @@ -package validatorapi - -import ( - "fmt" - "net/http" - "strconv" - "strings" - - "github.com/gfx-labs/sse" - "github.com/go-chi/chi/v5" - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/hexutil" - "github.com/ledgerwatch/erigon-lib/common/hexutility" - "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/fork" - "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/erigon/cl/utils" -) - -func (v *ValidatorApiHandler) GetEthV1NodeSyncing(w http.ResponseWriter, r *http.Request) (any, error) { - _, slot, err := v.FC.GetHead() - if err != nil { - return nil, err - } - - realHead := utils.GetCurrentSlot(v.GenesisCfg.GenesisTime, v.BeaconChainCfg.SecondsPerSlot) - - isSyncing := realHead > slot - - syncDistance := 0 - if isSyncing { - syncDistance = int(realHead) - int(slot) - } - - elOffline := true - if v.FC.Engine() != nil { - val, err := v.FC.Engine().Ready() - if err == nil { - elOffline = !val - } - } - - return map[string]any{ - "data": map[string]any{ - "head_slot": strconv.FormatUint(slot, 10), - "sync_distance": syncDistance, - "is_syncing": isSyncing, - "el_offline": elOffline, - // TODO: figure out how to populat this field - "is_optimistic": true, - }}, nil -} - -func (v *ValidatorApiHandler) GetEthV1ConfigSpec(w http.ResponseWriter, r *http.Request) (*clparams.BeaconChainConfig, error) { - if v.BeaconChainCfg == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "beacon config not found") - } - return v.BeaconChainCfg, nil -} - -func (v *ValidatorApiHandler) GetEthV1BeaconGenesis(w http.ResponseWriter, r *http.Request) (any, error) { - if v.GenesisCfg == nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "genesis config not found") - } - digest, err := fork.ComputeForkDigest(v.BeaconChainCfg, v.GenesisCfg) - if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusInternalServerError, err.Error()) - } - return map[string]any{ - "data": map[string]any{ - "genesis_time": v.GenesisCfg.GenesisTime, - "genesis_validator_root": v.GenesisCfg.GenesisValidatorRoot, - "genesis_fork_version": hexutility.Bytes(digest[:]), - }}, nil -} - -func (v *ValidatorApiHandler) GetEthV1BeaconStatesStateIdFork(w http.ResponseWriter, r *http.Request) (any, error) { - stateId := chi.URLParam(r, "state_id") - state, err := v.privateGetStateFromStateId(stateId) - if err != nil { - return nil, err - } - isFinalized := state.Slot() <= v.FC.FinalizedSlot() - forkData := state.BeaconState.Fork() - return map[string]any{ - // TODO: this "True if the response references an unverified execution payload. " - // figure out the condition where this happens - "execution_optimistic": false, - "finalized": isFinalized, - "data": map[string]any{ - "previous_version": hexutility.Bytes(forkData.PreviousVersion[:]), - "current_version": hexutility.Bytes(forkData.CurrentVersion[:]), - "epoch": strconv.Itoa(int(forkData.Epoch)), - }, - }, nil -} - -func (v *ValidatorApiHandler) GetEthV1BeaconStatesStateIdValidatorsValidatorId(w http.ResponseWriter, r *http.Request) (any, error) { - stateId := chi.URLParam(r, "state_id") - // grab the correct state for the given state id - beaconState, err := v.privateGetStateFromStateId(stateId) - if err != nil { - return nil, err - } - - var validatorIndex uint64 - validatorId := chi.URLParam(r, "validator_id") - switch { - case strings.HasPrefix(validatorId, "0x"): - // assume is hex has, so try to parse - hsh := common.Bytes48{} - err := hsh.UnmarshalText([]byte(stateId)) - if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("Invalid validator ID: %s", validatorId)) - } - val, ok := beaconState.ValidatorIndexByPubkey(hsh) - if !ok { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("validator not found: %s", validatorId)) - } - validatorIndex = val - case isInt(validatorId): - val, err := strconv.ParseUint(validatorId, 10, 64) - if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("Invalid validator ID: %s", validatorId)) - } - validatorIndex = val - default: - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("Invalid validator ID: %s", validatorId)) - } - // at this point validatorIndex is neccesarily assigned, so we can trust the zero value - validator, err := beaconState.ValidatorForValidatorIndex(int(validatorIndex)) - if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("validator not found at %s: %s ", stateId, validatorId)) - } - validatorBalance, err := beaconState.ValidatorBalance(int(validatorIndex)) - if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, fmt.Sprintf("balance not found at %s: %s ", stateId, validatorId)) - } - - //pending_initialized - When the first deposit is processed, but not enough funds are available (or not yet the end of the first epoch) to get validator into the activation queue. - //pending_queued - When validator is waiting to get activated, and have enough funds etc. while in the queue, validator activation epoch keeps changing until it gets to the front and make it through (finalization is a requirement here too). - //active_ongoing - When validator must be attesting, and have not initiated any exit. - //active_exiting - When validator is still active, but filed a voluntary request to exit. - //active_slashed - When validator is still active, but have a slashed status and is scheduled to exit. - //exited_unslashed - When validator has reached regular exit epoch, not being slashed, and doesn't have to attest any more, but cannot withdraw yet. - //exited_slashed - When validator has reached regular exit epoch, but was slashed, have to wait for a longer withdrawal period. - //withdrawal_possible - After validator has exited, a while later is permitted to move funds, and is truly out of the system. - //withdrawal_done - (not possible in phase0, except slashing full balance) - actually having moved funds away - - epoch := state.GetEpochAtSlot(v.BeaconChainCfg, beaconState.Slot()) - // TODO: figure out what is wrong and missing here - validator_status := func() string { - // see if validator has exited - if validator.ExitEpoch() >= epoch { - if validator.WithdrawableEpoch() >= epoch { - // TODO: is this right? not sure if correct way to check for withdrawal_done - if validatorBalance == 0 { - return "withdrawal_done" - } - return "withdrawal_possible" - } - if validator.Slashed() { - return "exited_slashed" - } - return "exited_unslashed" - } - // at this point we know they have not exited, so they are either active or pending - if validator.Active(epoch) { - // if active, figure out if they are slashed - if validator.Slashed() { - return "active_slashed" - } - if validator.ExitEpoch() != v.BeaconChainCfg.FarFutureEpoch { - return "active_exiting" - } - return "active_ongoing" - } - // check if enough funds (TODO: or end of first epoch??) - if validatorBalance >= v.BeaconChainCfg.MinDepositAmount { - return "pending_initialized" - } - return "pending_queued" - }() - - isFinalized := beaconState.Slot() <= v.FC.FinalizedSlot() - return map[string]any{ - // TODO: this "True if the response references an unverified execution payload. " - // figure out the condition where this happens - "execution_optimistic": false, - "finalized": isFinalized, - "data": map[string]any{ - "index": strconv.FormatUint(validatorIndex, 10), - "balance": strconv.FormatUint(validatorBalance, 10), - "status": validator_status, - "data": map[string]any{ - "pubkey": hexutility.Bytes(validator.PublicKeyBytes()), - "withdraw_credentials": hexutility.Bytes(validator.WithdrawalCredentials().Bytes()), - "effective_balance": strconv.FormatUint(validator.EffectiveBalance(), 10), - "slashed": validator.Slashed(), - "activation_eligibility_epoch": strconv.FormatUint(validator.ActivationEligibilityEpoch(), 10), - "activation_epoch": strconv.FormatUint(validator.ActivationEpoch(), 10), - "exit_epoch": strconv.FormatUint(validator.ActivationEpoch(), 10), - "withdrawable_epoch": strconv.FormatUint(validator.WithdrawableEpoch(), 10), - }, - }, - }, nil -} - -func (v *ValidatorApiHandler) GetEthV1EthNodeSyncing(w http.ResponseWriter, r *http.Request) (any, error) { - // TODO: populate this map - o := map[string]any{ - "data": map[string]any{}, - } - return o, nil -} -func (v *ValidatorApiHandler) GetEthV3ValidatorBlocksSlot(w http.ResponseWriter, r *http.Request) (any, error) { - // TODO: populate this map - o := map[string]any{ - "data": map[string]any{}, - } - - slotString := chi.URLParam(r, "slot") - slot, err := strconv.ParseUint(slotString, 10, 64) - if err != nil { - return nil, fmt.Errorf("fail to parse slot: %w", err) - } - randaoRevealString := r.URL.Query().Get("randao_reveal") - randaoReveal, err := hexutil.Decode(randaoRevealString) - if err != nil { - return nil, fmt.Errorf("fail to parse randao_reveal: %w", err) - } - graffitiString := r.URL.Query().Get("randao_reveal") - if graffitiString == "" { - graffitiString = "0x" - } - graffiti, err := hexutil.Decode(graffitiString) - if err != nil { - return nil, fmt.Errorf("fail to parse graffiti: %w", err) - } - skip_randao_verification := r.URL.Query().Has("skip_randao_verification") - //if skip_randao_verification { - // if isInfinity(randaoReveal) { - // return nil, beaconhttp.NewEndpointError(400, "randao reveal must be set to infinity if skip randao verification is set") - // } - //} - _, _, _, _ = slot, graffiti, randaoReveal, skip_randao_verification - return o, nil -} - -func (v *ValidatorApiHandler) EventSourceGetV1Events(w http.ResponseWriter, r *http.Request) { - sink, err := sse.DefaultUpgrader.Upgrade(w, r) - if err != nil { - // OK to ignore this error. - return - } - topics := r.URL.Query()["topics"] - for _, topic := range topics { - sink.Encode(&sse.Event{ - Event: []byte(topic), - Data: nil, - }) - // OK to ignore this error. maybe should log it later - } -} diff --git a/cl/beacon/validatorapi/handler.go b/cl/beacon/validatorapi/handler.go deleted file mode 100644 index 41e9190fa6d..00000000000 --- a/cl/beacon/validatorapi/handler.go +++ /dev/null @@ -1,95 +0,0 @@ -package validatorapi - -import ( - "net/http" - "sync" - - "github.com/go-chi/chi/v5" - "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" - "github.com/ledgerwatch/erigon/cl/beacon/building" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" -) - -type ValidatorApiHandler struct { - FC forkchoice.ForkChoiceStorage - - BeaconChainCfg *clparams.BeaconChainConfig - GenesisCfg *clparams.GenesisConfig - - state *building.State - - o sync.Once - mux *chi.Mux -} - -func (v *ValidatorApiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - v.o.Do(func() { - v.mux = chi.NewRouter() - v.state = building.NewState() - v.Route(v.mux) - }) - v.mux.ServeHTTP(w, r) -} - -func (v *ValidatorApiHandler) Route(r chi.Router) { - r.Route("/eth", func(r chi.Router) { - r.Route("/v1", func(r chi.Router) { - r.Route("/beacon", func(r chi.Router) { - r.Route("/states", func(r chi.Router) { - r.Route("/{state_id}", func(r chi.Router) { - r.Get("/fork", beaconhttp.HandleEndpointFunc(v.GetEthV1BeaconStatesStateIdFork)) - // r.Get("/validators/{validator_id}", beaconhttp.HandleEndpointFunc(v.GetEthV1BeaconStatesStateIdValidatorsValidatorId)) - }) - }) - r.Post("/blocks", beaconhttp.HandleEndpointFunc(v.PostEthV1BeaconBlocks)) - r.Post("/blinded_blocks", beaconhttp.HandleEndpointFunc(v.PostEthV1BeaconBlindedBlocks)) - r.Route("/pool", func(r chi.Router) { - r.Post("/attestations", beaconhttp.HandleEndpointFunc(v.PostEthV1BeaconPoolAttestations)) - r.Post("/sync_committees", beaconhttp.HandleEndpointFunc(v.PostEthV1BeaconPoolAttestations)) - }) - }) - r.Route("/node", func(r chi.Router) { - r.Get("/syncing", beaconhttp.HandleEndpointFunc(v.GetEthV1NodeSyncing)) - }) - r.Get("/events", v.EventSourceGetV1Events) - r.Route("/validator", func(r chi.Router) { - // implemented by archive api (for now) - // r.Route("/duties", func(r chi.Router) { - // r.Post("/attester/{epoch}", http.NotFound) - // r.Post("/sync/{epoch}", http.NotFound) - // r.Get("/proposer/{epoch}", http.NotFound) - // }) - // r.Get("/blinded_blocks/{slot}", http.NotFound) - deprecated - r.Get("/attestation_data", http.NotFound) - r.Get("/aggregate_attestation", http.NotFound) - r.Post("/aggregate_and_proofs", beaconhttp.HandleEndpointFunc(v.PostEthV1ValidatorAggregateAndProofs)) - r.Post("/beacon_committee_subscriptions", beaconhttp.HandleEndpointFunc(v.PostEthV1ValidatorBeaconCommitteeSubscriptions)) - r.Post("/sync_committee_subscriptions", beaconhttp.HandleEndpointFunc(v.PostEthV1ValidatorSyncCommitteeSubscriptions)) - r.Get("/sync_committee_contribution", http.NotFound) - r.Post("/contribution_and_proofs", beaconhttp.HandleEndpointFunc(v.PostEthV1ValidatorContributionAndProofs)) - r.Post("/prepare_beacon_proposer", beaconhttp.HandleEndpointFunc(v.PostEthV1ValidatorPrepareBeaconProposer)) - }) - }) - r.Route("/v2", func(r chi.Router) { - r.Route("/debug", func(r chi.Router) { - r.Route("/beacon", func(r chi.Router) { - r.Get("/states/{state_id}", http.NotFound) - }) - }) - r.Route("/beacon", func(r chi.Router) { - r.Post("/blocks", beaconhttp.HandleEndpointFunc(v.PostEthV2BeaconBlocks)) - r.Post("/blinded_blocks", beaconhttp.HandleEndpointFunc(v.PostEthV2BeaconBlindedBlocks)) - }) - r.Route("/validator", func(r chi.Router) { - r.Post("/blocks/{slot}", beaconhttp.HandleEndpointFunc(v.GetEthV3ValidatorBlocksSlot)) - }) - }) - r.Route("/v3", func(r chi.Router) { - r.Route("/validator", func(r chi.Router) { - r.Get("/blocks/{block_id}", http.NotFound) - }) - }) - }) - -} diff --git a/cl/beacon/validatorapi/helpers.go b/cl/beacon/validatorapi/helpers.go deleted file mode 100644 index af0319e0ce5..00000000000 --- a/cl/beacon/validatorapi/helpers.go +++ /dev/null @@ -1,55 +0,0 @@ -package validatorapi - -import ( - "fmt" - "net/http" - "strconv" - "strings" - "unicode" - - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" - "github.com/ledgerwatch/erigon/cl/phase1/core/state" -) - -func (v *ValidatorApiHandler) privateGetStateFromStateId(stateId string) (*state.CachingBeaconState, error) { - switch { - case stateId == "head": - // Now check the head - headRoot, _, err := v.FC.GetHead() - if err != nil { - return nil, err - } - return v.FC.GetStateAtBlockRoot(headRoot, true) - case stateId == "genesis": - // not supported - return nil, beaconhttp.NewEndpointError(http.StatusNotFound, "genesis block not found") - case stateId == "finalized": - return v.FC.GetStateAtBlockRoot(v.FC.FinalizedCheckpoint().BlockRoot(), true) - case stateId == "justified": - return v.FC.GetStateAtBlockRoot(v.FC.JustifiedCheckpoint().BlockRoot(), true) - case strings.HasPrefix(stateId, "0x"): - // assume is hex has, so try to parse - hsh := common.Hash{} - err := hsh.UnmarshalText([]byte(stateId)) - if err != nil { - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("Invalid state ID: %s", stateId)) - } - return v.FC.GetStateAtStateRoot(hsh, true) - case isInt(stateId): - // ignore the error bc isInt check succeeded. yes this doesn't protect for overflow, they will request slot 0 and it will fail. good - val, _ := strconv.ParseUint(stateId, 10, 64) - return v.FC.GetStateAtSlot(val, true) - default: - return nil, beaconhttp.NewEndpointError(http.StatusBadRequest, fmt.Sprintf("Invalid state ID: %s", stateId)) - } -} - -func isInt(s string) bool { - for _, c := range s { - if !unicode.IsDigit(c) { - return false - } - } - return true -} diff --git a/cl/beacon/validatorapi/post.go b/cl/beacon/validatorapi/post.go deleted file mode 100644 index 207eec480e8..00000000000 --- a/cl/beacon/validatorapi/post.go +++ /dev/null @@ -1,145 +0,0 @@ -package validatorapi - -import ( - "encoding/json" - "net/http" - - "github.com/ledgerwatch/erigon/cl/beacon/beaconhttp" - "github.com/ledgerwatch/erigon/cl/beacon/building" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" -) - -func (v *ValidatorApiHandler) PostEthV1ValidatorPrepareBeaconProposer(w http.ResponseWriter, r *http.Request) (*int, error) { - var req []building.PrepareBeaconProposer - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - for _, x := range req { - v.state.SetFeeRecipient(x.ValidatorIndex, x.FeeRecipient) - } - return nil, nil -} - -func (v *ValidatorApiHandler) PostEthV1ValidatorContributionAndProofs(w http.ResponseWriter, r *http.Request) (*int, error) { - var req []*cltypes.ContributionAndProof - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV1ValidatorSyncCommitteeSubscriptions(w http.ResponseWriter, r *http.Request) (*int, error) { - var req []building.SyncCommitteeSubscription - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV1ValidatorBeaconCommitteeSubscriptions(w http.ResponseWriter, r *http.Request) (*int, error) { - var req []building.BeaconCommitteeSubscription - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV1ValidatorAggregateAndProofs(w http.ResponseWriter, r *http.Request) (*int, error) { - var req []cltypes.SignedAggregateAndProof - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV1BeaconPoolSyncCommittees(w http.ResponseWriter, r *http.Request) (*int, error) { - var req []*solid.SyncCommittee - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV1BeaconPoolAttestations(w http.ResponseWriter, r *http.Request) (*int, error) { - var req []*solid.Attestation - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV1BeaconBlocks(w http.ResponseWriter, r *http.Request) (*int, error) { - ethConsensusVersion := r.Header.Get("Eth-Consensus-Version") - var req cltypes.SignedBeaconBlock - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - _ = ethConsensusVersion - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV2BeaconBlocks(w http.ResponseWriter, r *http.Request) (*int, error) { - broadcastValidation := r.URL.Query().Get("broadcast_validation") - if broadcastValidation == "" { - broadcastValidation = "gossip" - } - ethConsensusVersion := r.Header.Get("Eth-Consensus-Version") - if ethConsensusVersion == "" { - return nil, beaconhttp.NewEndpointError(400, "no eth consensus version set") - } - var req cltypes.SignedBeaconBlock - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - _, _ = broadcastValidation, ethConsensusVersion - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV1BeaconBlindedBlocks(w http.ResponseWriter, r *http.Request) (*int, error) { - ethConsensusVersion := r.Header.Get("Eth-Consensus-Version") - var req cltypes.SignedBlindedBeaconBlock - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - _ = ethConsensusVersion - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} - -func (v *ValidatorApiHandler) PostEthV2BeaconBlindedBlocks(w http.ResponseWriter, r *http.Request) (*int, error) { - broadcastValidation := r.URL.Query().Get("broadcast_validation") - if broadcastValidation == "" { - broadcastValidation = "gossip" - } - ethConsensusVersion := r.Header.Get("Eth-Consensus-Version") - if ethConsensusVersion == "" { - return nil, beaconhttp.NewEndpointError(400, "no eth consensus version set") - } - var req cltypes.SignedBlindedBeaconBlock - err := json.NewDecoder(r.Body).Decode(&req) - if err != nil { - return nil, beaconhttp.NewEndpointError(400, "invalid request: "+err.Error()) - } - // TODO: this endpoint - _, _ = broadcastValidation, ethConsensusVersion - return nil, beaconhttp.NewEndpointError(404, "not implemented") -} diff --git a/cl/clparams/config.go b/cl/clparams/config.go index ec7ba8516fd..e5980ab3cca 100644 --- a/cl/clparams/config.go +++ b/cl/clparams/config.go @@ -15,6 +15,7 @@ package clparams import ( "crypto/rand" + "encoding/binary" "fmt" "math" "math/big" @@ -24,15 +25,16 @@ import ( "github.com/ledgerwatch/erigon-lib/chain/networkname" libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/types/ssz" "gopkg.in/yaml.v2" "github.com/ledgerwatch/erigon/cl/utils" ) type CaplinConfig struct { - Backfilling bool - Archive bool + Backfilling bool + BlobBackfilling bool + BlobPruningDisabled bool + Archive bool } type NetworkType int @@ -40,13 +42,14 @@ type NetworkType int const ( MainnetNetwork NetworkType = 1 GoerliNetwork NetworkType = 5 + HoleskyNetwork NetworkType = 17000 SepoliaNetwork NetworkType = 11155111 GnosisNetwork NetworkType = 100 ChiadoNetwork NetworkType = 10200 ) const ( - MaxDialTimeout = 2 * time.Second + MaxDialTimeout = 15 * time.Second VersionLength int = 4 MaxChunkSize uint64 = 1 << 20 // 1 MiB ReqTimeout time.Duration = 10 * time.Second @@ -55,7 +58,7 @@ const ( const ( SubDivisionFolderSize = 10_000 - SlotsPerDump = 1024 + SlotsPerDump = 1536 ) var ( @@ -86,24 +89,34 @@ var ( "enr:-L64QC9Hhov4DhQ7mRukTOz4_jHm4DHlGL726NWH4ojH1wFgEwSin_6H95Gs6nW2fktTWbPachHJ6rUFu0iJNgA0SB2CARqHYXR0bmV0c4j__________4RldGgykDb6UBOQAABx__________-CaWSCdjSCaXCEA-2vzolzZWNwMjU2azGhA17lsUg60R776rauYMdrAz383UUgESoaHEzMkvm4K6k6iHN5bmNuZXRzD4N0Y3CCIyiDdWRwgiMo") GnosisBootstrapNodes = append(MainnetBootstrapNodes, []string{ - "enr:-Ly4QMU1y81COwm1VZgxGF4_eZ21ub9-GHF6dXZ29aEJ0oZpcV2Rysw-viaEKfpcpu9ZarILJLxFZjcKOjE0Sybs3MQBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhANLnx-Jc2VjcDI1NmsxoQKoaYT8I-wf2I_f_ii6EgoSSXj5T3bhiDyW-7ZLsY3T64hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QBf76jLiCA_pDXoZjhyRbuwzFOscFY-MIKkPnmHPQbvaKhIDZutfe38G9ibzgQP0RKrTo3vcWOy4hf_8wOZ-U5MBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhBLGgjaJc2VjcDI1NmsxoQLGeo0Q4lDvxIjHjnkAqEuETTaFIjsNrEcSpdDhcHXWFYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QLjZUWdqUO_RwyDqCAccIK5-MbLRD6A2c7oBuVbBgBnWDkEf0UKJVAaJqi2pO101WVQQLYSnYgz1Q3pRhYdrlFoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhANA8sSJc2VjcDI1NmsxoQK4TC_EK1jSs0VVPUpOjIo1rhJmff2SLBPFOWSXMwdLVYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QKwX2rTFtKWKQHSGQFhquxsxL1jewO8JB1MG-jgHqAZVFWxnb3yMoQqnYSV1bk25-_jiLuhIulxar3RBWXEDm6EBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhAN-qZeJc2VjcDI1NmsxoQI7EPGMpecl0QofLp4Wy_lYNCCChUFEH6kY7k-oBGkPFIhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QPoChSQTleJROee1-k-4HOEgKqL9kLksE-tEiVqcY9kwF9V53aBg-MruD7Yx4Aks3LAeJpKXAS4ntMrIdqvQYc8Ch2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhGsWBHiJc2VjcDI1NmsxoQKwGQrwOSBJB_DtQOkFZVAY4YQfMAbUVxFpL5WgrzEddYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QBbaKRSX4SncCOxTTL611Kxlz-zYFrIn-k_63jGIPK_wbvFghVUHJICPCxufgTX5h79jvgfPr-2hEEQEdziGQ5MCh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhAMazo6Jc2VjcDI1NmsxoQKt-kbM9isuWp8djhyEq6-4MLv1Sy7dOXeMOMdPgwu9LohzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QKJ5BzgFyJ6BaTlGY0C8ROzl508U3GA6qxdG5Gn2hxdke6nQO187pYlLvhp82Dez4PQn436Fts1F0WAm-_5l2LACh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhA-YLVKJc2VjcDI1NmsxoQI8_Lvr6p_TkcAu8KorKacfUEnoOon0tdO0qWhriPdBP4hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QJMtoiX2bPnVbiQOJCLbtUlqdqZk7kCJQln_W1bp1vOHcxWowE-iMXkKC4_uOb0o73wAW71WYi80Dlsg-7a5wiICh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhDbP3KmJc2VjcDI1NmsxoQNvcfKYUqcemLFlpKxl7JcQJwQ3L9unYL44gY2aEiRnI4hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", + "enr:-Ly4QIAhiTHk6JdVhCdiLwT83wAolUFo5J4nI5HrF7-zJO_QEw3cmEGxC1jvqNNUN64Vu-xxqDKSM528vKRNCehZAfEBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhEFtZ5SJc2VjcDI1NmsxoQJwgL5C-30E8RJmW8gCb7sfwWvvfre7wGcCeV4X1G2wJYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", + "enr:-Ly4QDhEjlkf8fwO5uWAadexy88GXZneTuUCIPHhv98v8ZfXMtC0S1S_8soiT0CMEgoeLe9Db01dtkFQUnA9YcnYC_8Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhEFtZ5WJc2VjcDI1NmsxoQMRSho89q2GKx_l2FZhR1RmnSiQr6o_9hfXfQUuW6bjMohzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", + "enr:-Ly4QLKgv5M2D4DYJgo6s4NG_K4zu4sk5HOLCfGCdtgoezsbfRbfGpQ4iSd31M88ec3DHA5FWVbkgIas9EaJeXia0nwBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhI1eYRaJc2VjcDI1NmsxoQLpK_A47iNBkVjka9Mde1F-Kie-R0sq97MCNKCxt2HwOIhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", + "enr:-Ly4QF_0qvji6xqXrhQEhwJR1W9h5dXV7ZjVCN_NlosKxcgZW6emAfB_KXxEiPgKr_-CZG8CWvTiojEohG1ewF7P368Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhI1eYUqJc2VjcDI1NmsxoQIpNRUT6llrXqEbjkAodsZOyWv8fxQkyQtSvH4sg2D7n4hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", + "enr:-Ly4QCD5D99p36WafgTSxB6kY7D2V1ca71C49J4VWI2c8UZCCPYBvNRWiv0-HxOcbpuUdwPVhyWQCYm1yq2ZH0ukCbQBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhI1eYVSJc2VjcDI1NmsxoQJJMSV8iSZ8zvkgbi8cjIGEUVJeekLqT0LQha_co-siT4hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", + "enr:-KK4QKXJq1QOVWuJAGige4uaT8LRPQGCVRf3lH3pxjaVScMRUfFW1eiiaz8RwOAYvw33D4EX-uASGJ5QVqVCqwccxa-Bi4RldGgykCGm-DYDAABk__________-CaWSCdjSCaXCEM0QnzolzZWNwMjU2azGhAhNvrRkpuK4MWTf3WqiOXSOePL8Zc-wKVpZ9FQx_BDadg3RjcIIjKIN1ZHCCIyg", + "enr:-LO4QO87Rn2ejN3SZdXkx7kv8m11EZ3KWWqoIN5oXwQ7iXR9CVGd1dmSyWxOL1PGsdIqeMf66OZj4QGEJckSi6okCdWBpIdhdHRuZXRziAAAAABgAAAAhGV0aDKQPr_UhAQAAGT__________4JpZIJ2NIJpcIQj0iX1iXNlY3AyNTZrMaEDd-_eqFlWWJrUfEp8RhKT9NxdYaZoLHvsp3bbejPyOoeDdGNwgiMog3VkcIIjKA", + "enr:-LK4QIJUAxX9uNgW4ACkq8AixjnSTcs9sClbEtWRq9F8Uy9OEExsr4ecpBTYpxX66cMk6pUHejCSX3wZkK2pOCCHWHEBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpA-v9SEBAAAZP__________gmlkgnY0gmlwhCPSnDuJc2VjcDI1NmsxoQNuaAjFE-ANkH3pbeBdPiEIwjR5kxFuKaBWxHkqFuPz5IN0Y3CCIyiDdWRwgiMo", }...) ChiadoBootstrapNodes = append(MainnetBootstrapNodes, []string{ "enr:-L64QOijsdi9aVIawMb5h5PWueaPM9Ai6P17GNPFlHzz7MGJQ8tFMdYrEx8WQitNKLG924g2Q9cCdzg54M0UtKa3QIKCMxaHYXR0bmV0c4j__________4RldGgykDE2cEMCAABv__________-CaWSCdjSCaXCEi5AaWYlzZWNwMjU2azGhA8CjTkD4m1s8FbKCN18LgqlYcE65jrT148vFtwd9U62SiHN5bmNuZXRzD4N0Y3CCIyiDdWRwgiMo", "enr:-L64QKYKGQj5ybkfBxyFU5IEVzP7oJkGHJlie4W8BCGAYEi4P0mmMksaasiYF789mVW_AxYVNVFUjg9CyzmdvpyWQ1KCMlmHYXR0bmV0c4j__________4RldGgykDE2cEMCAABv__________-CaWSCdjSCaXCEi5CtNolzZWNwMjU2azGhAuA7BAwIijy1z81AO9nz_MOukA1ER68rGA67PYQ5pF1qiHN5bmNuZXRzD4N0Y3CCIyiDdWRwgiMo", "enr:-Ly4QJJUnV9BxP_rw2Bv7E9iyw4sYS2b4OQZIf4Mu_cA6FljJvOeSTQiCUpbZhZjR4R0VseBhdTzrLrlHrAuu_OeZqgJh2F0dG5ldHOI__________-EZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhIuQGnOJc2VjcDI1NmsxoQPT_u3IjDtB2r-nveH5DhUmlM8F2IgLyxhmwmqW4L5k3ohzeW5jbmV0cw-DdGNwgiMog3VkcIIjKA", - "enr:-MK4QCkOyqOTPX1_-F-5XVFjPclDUc0fj3EeR8FJ5-hZjv6ARuGlFspM0DtioHn1r6YPUXkOg2g3x6EbeeKdsrvVBYmGAYQKrixeh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhIuQGlWJc2VjcDI1NmsxoQKdW3-DgLExBkpLGMRtuM88wW_gZkC7Yeg0stYDTrlynYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA==", + "enr:-MK4QCkOyqOTPX1_-F-5XVFjPclDUc0fj3EeR8FJ5-hZjv6ARuGlFspM0DtioHn1r6YPUXkOg2g3x6EbeeKdsrvVBYmGAYQKrixeh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhIuQGlWJc2VjcDI1NmsxoQKdW3-DgLExBkpLGMRtuM88wW_gZkC7Yeg0stYDTrlynYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", "enr:-Ly4QLYLNqrjvSxD3lpAPBUNlxa6cIbe79JqLZLFcZZjWoCjZcw-85agLUErHiygG2weRSCLnd5V460qTbLbwJQsfZkoh2F0dG5ldHOI__________-EZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhKq7mu-Jc2VjcDI1NmsxoQP900YAYa9kdvzlSKGjVo-F3XVzATjOYp3BsjLjSophO4hzeW5jbmV0cw-DdGNwgiMog3VkcIIjKA", "enr:-Ly4QCGeYvTCNOGKi0mKRUd45rLj96b4pH98qG7B9TCUGXGpHZALtaL2-XfjASQyhbCqENccI4PGXVqYTIehNT9KJMQgh2F0dG5ldHOI__________-EZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhIuQrVSJc2VjcDI1NmsxoQP9iDchx2PGl3JyJ29B9fhLCvVMN6n23pPAIIeFV-sHOIhzeW5jbmV0cw-DdGNwgiMog3VkcIIjKA", "enr:-Ly4QAtr21x5Ps7HYhdZkIBRBgcBkvlIfEel1YNjtFWf4cV3au2LgBGICz9PtEs9-p2HUl_eME8m1WImxTxSB3AkCMwBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhANHhOeJc2VjcDI1NmsxoQNLp1QPV8-pyMCohOtj6xGtSBM_GtVTqzlbvNsCF4ezkYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", "enr:-Ly4QLgn8Bx6faigkKUGZQvd1HDToV2FAxZIiENK-lczruzQb90qJK-4E65ADly0s4__dQOW7IkLMW7ZAyJy2vtiLy8Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhANFIw2Jc2VjcDI1NmsxoQMa-fWEy9UJHfOl_lix3wdY5qust78sHAqZnWwEiyqKgYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", + "enr:-KG4QF7z4LUdMfgwvh-fS-MDv_1hPSUCqGfyOWGLNJuoBHKFAMSHz8geQn8v3qDDbuSQKud3WIAjKqR4gqJoLBUEJ08ZhGV0aDKQDc1ElgAAAG___________4JpZIJ2NIJpcIQjzq5ciXNlY3AyNTZrMaECt7YO363pV54d3QdgnluL5kxzhCR_k0yM9C-G6bqMGoKDdGNwgiMog3VkcIIjKA", + "enr:-LK4QCUTEmZrT1AgCKdyVgwnHL5J0VSoxsyjruAtwo-owBTBVEOyAnQRVNXlcW5aL-ycntk5oHDrKCR-DXZAlUAKpjEBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCdM7Z1BAAAb___________gmlkgnY0gmlwhCPSfheJc2VjcDI1NmsxoQNpdf8U9pzsU9m6Hzgd1rmTI-On-QImJnkZBGqDp4org4N0Y3CCIyiDdWRwgiMo", + }...) + HoleskyBootstrapNodes = append(MainnetBootstrapNodes, []string{ + "enr:-Ku4QFo-9q73SspYI8cac_4kTX7yF800VXqJW4Lj3HkIkb5CMqFLxciNHePmMt4XdJzHvhrCC5ADI4D_GkAsxGJRLnQBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAhnTT-AQFwAP__________gmlkgnY0gmlwhLKAiOmJc2VjcDI1NmsxoQORcM6e19T1T9gi7jxEZjk_sjVLGFscUNqAY9obgZaxbIN1ZHCCIyk", + "enr:-Ku4QPG7F72mbKx3gEQEx07wpYYusGDh-ni6SNkLvOS-hhN-BxIggN7tKlmalb0L5JPoAfqD-akTZ-gX06hFeBEz4WoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAhnTT-AQFwAP__________gmlkgnY0gmlwhJK-DYCJc2VjcDI1NmsxoQKLVXFOhp2uX6jeT0DvvDpPcU8FWMjQdR4wMuORMhpX24N1ZHCCIyk", + "enr:-LK4QPxe-mDiSOtEB_Y82ozvxn9aQM07Ui8A-vQHNgYGMMthfsfOabaaTHhhJHFCBQQVRjBww_A5bM1rf8MlkJU_l68Eh2F0dG5ldHOIAADAAAAAAACEZXRoMpBpt9l0BAFwAAABAAAAAAAAgmlkgnY0gmlwhLKAiOmJc2VjcDI1NmsxoQJu6T9pclPObAzEVQ53DpVQqjadmVxdTLL-J3h9NFoCeIN0Y3CCIyiDdWRwgiMo", + "enr:-Ly4QGbOw4xNel5EhmDsJJ-QhC9XycWtsetnWoZ0uRy381GHdHsNHJiCwDTOkb3S1Ade0SFQkWJX_pgb3g8Jfh93rvMBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpBpt9l0BAFwAAABAAAAAAAAgmlkgnY0gmlwhJK-DYCJc2VjcDI1NmsxoQOxKv9sv3zKF8GDewgFGGHKP5HCZZpPpTrwl9eXKAWGxIhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", + "enr:-LS4QG0uV4qvcpJ-HFDJRGBmnlD3TJo7yc4jwK8iP7iKaTlfQ5kZvIDspLMJhk7j9KapuL9yyHaZmwTEZqr10k9XumyCEcmHYXR0bmV0c4gAAAAABgAAAIRldGgykGm32XQEAXAAAAEAAAAAAACCaWSCdjSCaXCErK4j-YlzZWNwMjU2azGhAgfWRBEJlb7gAhXIB5ePmjj2b8io0UpEenq1Kl9cxStJg3RjcIIjKIN1ZHCCIyg", + "enr:-Le4QLoE1wFHSlGcm48a9ZESb_MRLqPPu6G0vHqu4MaUcQNDHS69tsy-zkN0K6pglyzX8m24mkb-LtBcbjAYdP1uxm4BhGV0aDKQabfZdAQBcAAAAQAAAAAAAIJpZIJ2NIJpcIQ5gR6Wg2lwNpAgAUHQBwEQAAAAAAAAADR-iXNlY3AyNTZrMaEDPMSNdcL92uNIyCsS177Z6KTXlbZakQqxv3aQcWawNXeDdWRwgiMohHVkcDaCI4I", }...) ) @@ -131,11 +144,6 @@ type NetworkConfig struct { StaticPeers []string } -type GenesisConfig struct { - GenesisValidatorRoot libcommon.Hash // Merkle Root at Genesis - GenesisTime uint64 // Unix time at Genesis -} - var NetworkConfigs map[NetworkType]NetworkConfig = map[NetworkType]NetworkConfig{ MainnetNetwork: { GossipMaxSize: 1 << 20, // 1 MiB @@ -236,28 +244,25 @@ var NetworkConfigs map[NetworkType]NetworkConfig = map[NetworkType]NetworkConfig ContractDeploymentBlock: 155530, BootNodes: ChiadoBootstrapNodes, }, -} -var GenesisConfigs map[NetworkType]GenesisConfig = map[NetworkType]GenesisConfig{ - MainnetNetwork: { - GenesisValidatorRoot: libcommon.HexToHash("4b363db94e286120d76eb905340fdd4e54bfe9f06bf33ff6cf5ad27f511bfe95"), - GenesisTime: 1606824023, - }, - SepoliaNetwork: { - GenesisValidatorRoot: libcommon.HexToHash("d8ea171f3c94aea21ebc42a1ed61052acf3f9209c00e4efbaaddac09ed9b8078"), - GenesisTime: 1655733600, - }, - GoerliNetwork: { - GenesisValidatorRoot: libcommon.HexToHash("043db0d9a83813551ee2f33450d23797757d430911a9320530ad8a0eabc43efb"), - GenesisTime: 1616508000, - }, - GnosisNetwork: { - GenesisValidatorRoot: libcommon.HexToHash("f5dcb5564e829aab27264b9becd5dfaa017085611224cb3036f573368dbb9d47"), - GenesisTime: 1638993340, - }, - ChiadoNetwork: { - GenesisValidatorRoot: libcommon.HexToHash("9d642dac73058fbf39c0ae41ab1e34e4d889043cb199851ded7095bc99eb4c1e"), - GenesisTime: 1665396300, + HoleskyNetwork: { + GossipMaxSize: 1 << 20, // 1 MiB + GossipMaxSizeBellatrix: 10485760, + MaxChunkSize: 1 << 20, // 1 MiB + AttestationSubnetCount: 64, + AttestationPropagationSlotRange: 32, + MaxRequestBlocks: 1 << 10, // 1024 + TtfbTimeout: ReqTimeout, + RespTimeout: RespTimeout, + MaximumGossipClockDisparity: 500 * time.Millisecond, + MessageDomainInvalidSnappy: [4]byte{00, 00, 00, 00}, + MessageDomainValidSnappy: [4]byte{01, 00, 00, 00}, + Eth2key: "eth2", + AttSubnetKey: "attnets", + SyncCommsSubnetKey: "syncnets", + MinimumPeersInSubnetSearch: 20, + ContractDeploymentBlock: 155530, + BootNodes: HoleskyBootstrapNodes, }, } @@ -278,16 +283,22 @@ var CheckpointSyncEndpoints = map[NetworkType][]string{ }, SepoliaNetwork: { //"https://beaconstate-sepolia.chainsafe.io/eth/v2/debug/beacon/states/finalized", - "https://sepolia.beaconstate.info/eth/v2/debug/beacon/states/finalized", + //"https://sepolia.beaconstate.info/eth/v2/debug/beacon/states/finalized", "https://checkpoint-sync.sepolia.ethpandaops.io/eth/v2/debug/beacon/states/finalized", }, GnosisNetwork: { - "https://checkpoint.gnosis.gateway.fm/eth/v2/debug/beacon/states/finalized", + //"https://checkpoint.gnosis.gateway.fm/eth/v2/debug/beacon/states/finalized", "https://checkpoint.gnosischain.com/eth/v2/debug/beacon/states/finalized", }, ChiadoNetwork: { "https://checkpoint.chiadochain.net/eth/v2/debug/beacon/states/finalized", }, + HoleskyNetwork: { + "https://holesky.beaconstate.ethstaker.cc/eth/v2/debug/beacon/states/finalized", + "https://beaconstate-holesky.chainsafe.io/eth/v2/debug/beacon/states/finalized", + "https://holesky.beaconstate.info/eth/v2/debug/beacon/states/finalized", + "https://checkpoint-sync.holesky.ethpandaops.io/eth/v2/debug/beacon/states/finalized", + }, } // MinEpochsForBlockRequests equal to MIN_VALIDATOR_WITHDRAWABILITY_DELAY + CHURN_LIMIT_QUOTIENT / 2 @@ -296,204 +307,198 @@ func (b *BeaconChainConfig) MinEpochsForBlockRequests() uint64 { } +type ConfigByte byte + +func (b ConfigByte) MarshalJSON() ([]byte, error) { + return []byte(fmt.Sprintf("\"0x%x\"", b)), nil +} + +type ConfigForkVersion uint32 + +func (v ConfigForkVersion) MarshalJSON() ([]byte, error) { + tmp := make([]byte, 4) + binary.BigEndian.PutUint32(tmp, uint32(v)) + return []byte(fmt.Sprintf("\"0x%x\"", tmp)), nil +} + // BeaconChainConfig contains constant configs for node to participate in beacon chain. type BeaconChainConfig struct { // Constants (non-configurable) - GenesisSlot uint64 `yaml:"GENESIS_SLOT"` // GenesisSlot represents the first canonical slot number of the beacon chain. - GenesisEpoch uint64 `yaml:"GENESIS_EPOCH"` // GenesisEpoch represents the first canonical epoch number of the beacon chain. - FarFutureEpoch uint64 `yaml:"FAR_FUTURE_EPOCH"` // FarFutureEpoch represents a epoch extremely far away in the future used as the default penalization epoch for validators. - FarFutureSlot uint64 `yaml:"FAR_FUTURE_SLOT"` // FarFutureSlot represents a slot extremely far away in the future. - BaseRewardsPerEpoch uint64 `yaml:"BASE_REWARDS_PER_EPOCH"` // BaseRewardsPerEpoch is used to calculate the per epoch rewards. - DepositContractTreeDepth uint64 `yaml:"DEPOSIT_CONTRACT_TREE_DEPTH"` // DepositContractTreeDepth depth of the Merkle trie of deposits in the validator deposit contract on the PoW chain. - JustificationBitsLength uint64 `yaml:"JUSTIFICATION_BITS_LENGTH"` // JustificationBitsLength defines number of epochs to track when implementing k-finality in Casper FFG. + GenesisSlot uint64 `yaml:"GENESIS_SLOT" json:"GENESIS_SLOT,string"` // GenesisSlot represents the first canonical slot number of the beacon chain. + GenesisEpoch uint64 `yaml:"GENESIS_EPOCH" json:"GENESIS_EPOCH,string"` // GenesisEpoch represents the first canonical epoch number of the beacon chain. + FarFutureEpoch uint64 `yaml:"FAR_FUTURE_EPOCH" json:"FAR_FUTURE_EPOCH,string"` // FarFutureEpoch represents a epoch extremely far away in the future used as the default penalization epoch for validators. + FarFutureSlot uint64 `yaml:"FAR_FUTURE_SLOT" json:"FAR_FUTURE_SLOT,string"` // FarFutureSlot represents a slot extremely far away in the future. + BaseRewardsPerEpoch uint64 `yaml:"BASE_REWARDS_PER_EPOCH" json:"BASE_REWARDS_PER_EPOCH,string"` // BaseRewardsPerEpoch is used to calculate the per epoch rewards. + DepositContractTreeDepth uint64 `yaml:"DEPOSIT_CONTRACT_TREE_DEPTH" json:"DEPOSIT_CONTRACT_TREE_DEPTH,string"` // DepositContractTreeDepth depth of the Merkle trie of deposits in the validator deposit contract on the PoW chain. + JustificationBitsLength uint64 `yaml:"JUSTIFICATION_BITS_LENGTH" json:"JUSTIFICATION_BITS_LENGTH,string"` // JustificationBitsLength defines number of epochs to track when implementing k-finality in Casper FFG. // Misc constants. - PresetBase string `yaml:"PRESET_BASE" spec:"true"` // PresetBase represents the underlying spec preset this config is based on. - ConfigName string `yaml:"CONFIG_NAME" spec:"true"` // ConfigName for allowing an easy human-readable way of knowing what chain is being used. - TargetCommitteeSize uint64 `yaml:"TARGET_COMMITTEE_SIZE" spec:"true"` // TargetCommitteeSize is the number of validators in a committee when the chain is healthy. - MaxValidatorsPerCommittee uint64 `yaml:"MAX_VALIDATORS_PER_COMMITTEE" spec:"true"` // MaxValidatorsPerCommittee defines the upper bound of the size of a committee. - MaxCommitteesPerSlot uint64 `yaml:"MAX_COMMITTEES_PER_SLOT" spec:"true"` // MaxCommitteesPerSlot defines the max amount of committee in a single slot. - MinPerEpochChurnLimit uint64 `yaml:"MIN_PER_EPOCH_CHURN_LIMIT" spec:"true"` // MinPerEpochChurnLimit is the minimum amount of churn allotted for validator rotations. - ChurnLimitQuotient uint64 `yaml:"CHURN_LIMIT_QUOTIENT" spec:"true"` // ChurnLimitQuotient is used to determine the limit of how many validators can rotate per epoch. - MaxPerEpochActivationChurnLimit uint64 `yaml:"MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT" spec:"true"` // MaxPerEpochActivationChurnLimit defines the maximum amount of churn allowed in one epoch from deneb. - ShuffleRoundCount uint64 `yaml:"SHUFFLE_ROUND_COUNT" spec:"true"` // ShuffleRoundCount is used for retrieving the permuted index. - MinGenesisActiveValidatorCount uint64 `yaml:"MIN_GENESIS_ACTIVE_VALIDATOR_COUNT" spec:"true"` // MinGenesisActiveValidatorCount defines how many validator deposits needed to kick off beacon chain. - MinGenesisTime uint64 `yaml:"MIN_GENESIS_TIME" spec:"true"` // MinGenesisTime is the time that needed to pass before kicking off beacon chain. - TargetAggregatorsPerCommittee uint64 `yaml:"TARGET_AGGREGATORS_PER_COMMITTEE" spec:"true"` // TargetAggregatorsPerCommittee defines the number of aggregators inside one committee. - HysteresisQuotient uint64 `yaml:"HYSTERESIS_QUOTIENT" spec:"true"` // HysteresisQuotient defines the hysteresis quotient for effective balance calculations. - HysteresisDownwardMultiplier uint64 `yaml:"HYSTERESIS_DOWNWARD_MULTIPLIER" spec:"true"` // HysteresisDownwardMultiplier defines the hysteresis downward multiplier for effective balance calculations. - HysteresisUpwardMultiplier uint64 `yaml:"HYSTERESIS_UPWARD_MULTIPLIER" spec:"true"` // HysteresisUpwardMultiplier defines the hysteresis upward multiplier for effective balance calculations. + PresetBase string `yaml:"PRESET_BASE" spec:"true" json:"PRESET_BASE"` // PresetBase represents the underlying spec preset this config is based on. + ConfigName string `yaml:"CONFIG_NAME" spec:"true" json:"CONFIG_NAME"` // ConfigName for allowing an easy human-readable way of knowing what chain is being used. + TargetCommitteeSize uint64 `yaml:"TARGET_COMMITTEE_SIZE" spec:"true" json:"TARGET_COMMITTEE_SIZE,string"` // TargetCommitteeSize is the number of validators in a committee when the chain is healthy. + MaxValidatorsPerCommittee uint64 `yaml:"MAX_VALIDATORS_PER_COMMITTEE" spec:"true" json:"MAX_VALIDATORS_PER_COMMITTEE,string"` // MaxValidatorsPerCommittee defines the upper bound of the size of a committee. + MaxCommitteesPerSlot uint64 `yaml:"MAX_COMMITTEES_PER_SLOT" spec:"true" json:"MAX_COMMITTEES_PER_SLOT,string"` // MaxCommitteesPerSlot defines the max amount of committee in a single slot. + MinPerEpochChurnLimit uint64 `yaml:"MIN_PER_EPOCH_CHURN_LIMIT" spec:"true" json:"MIN_PER_EPOCH_CHURN_LIMIT,string"` // MinPerEpochChurnLimit is the minimum amount of churn allotted for validator rotations. + ChurnLimitQuotient uint64 `yaml:"CHURN_LIMIT_QUOTIENT" spec:"true" json:"CHURN_LIMIT_QUOTIENT,string"` // ChurnLimitQuotient is used to determine the limit of how many validators can rotate per epoch. + MaxPerEpochActivationChurnLimit uint64 `yaml:"MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT" spec:"true" json:"MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT,string"` // MaxPerEpochActivationChurnLimit defines the maximum amount of churn allowed in one epoch from deneb. + ShuffleRoundCount uint64 `yaml:"SHUFFLE_ROUND_COUNT" spec:"true" json:"SHUFFLE_ROUND_COUNT,string"` // ShuffleRoundCount is used for retrieving the permuted index. + MinGenesisActiveValidatorCount uint64 `yaml:"MIN_GENESIS_ACTIVE_VALIDATOR_COUNT" spec:"true" json:"MIN_GENESIS_ACTIVE_VALIDATOR_COUNT,string"` // MinGenesisActiveValidatorCount defines how many validator deposits needed to kick off beacon chain. + MinGenesisTime uint64 `yaml:"MIN_GENESIS_TIME" spec:"true" json:"MIN_GENESIS_TIME,string"` // MinGenesisTime is the time that needed to pass before kicking off beacon chain. + TargetAggregatorsPerCommittee uint64 `yaml:"TARGET_AGGREGATORS_PER_COMMITTEE" spec:"true" json:"TARGET_AGGREGATORS_PER_COMMITTEE,string"` // TargetAggregatorsPerCommittee defines the number of aggregators inside one committee. + HysteresisQuotient uint64 `yaml:"HYSTERESIS_QUOTIENT" spec:"true" json:"HYSTERESIS_QUOTIENT,string"` // HysteresisQuotient defines the hysteresis quotient for effective balance calculations. + HysteresisDownwardMultiplier uint64 `yaml:"HYSTERESIS_DOWNWARD_MULTIPLIER" spec:"true" json:"HYSTERESIS_DOWNWARD_MULTIPLIER,string"` // HysteresisDownwardMultiplier defines the hysteresis downward multiplier for effective balance calculations. + HysteresisUpwardMultiplier uint64 `yaml:"HYSTERESIS_UPWARD_MULTIPLIER" spec:"true" json:"HYSTERESIS_UPWARD_MULTIPLIER,string"` // HysteresisUpwardMultiplier defines the hysteresis upward multiplier for effective balance calculations. + MinEpochsForBlobsSidecarsRequest uint64 `yaml:"MIN_EPOCHS_FOR_BLOBS_SIDECARS_REQUEST" spec:"true" json:"MIN_EPOCHS_FOR_BLOBS_SIDECARS_REQUEST,string"` // MinEpochsForBlobsSidecarsRequest defines the minimum number of epochs to wait before requesting blobs sidecars. // Gwei value constants. - MinDepositAmount uint64 `yaml:"MIN_DEPOSIT_AMOUNT" spec:"true"` // MinDepositAmount is the minimum amount of Gwei a validator can send to the deposit contract at once (lower amounts will be reverted). - MaxEffectiveBalance uint64 `yaml:"MAX_EFFECTIVE_BALANCE" spec:"true"` // MaxEffectiveBalance is the maximal amount of Gwei that is effective for staking. - EjectionBalance uint64 `yaml:"EJECTION_BALANCE" spec:"true"` // EjectionBalance is the minimal GWei a validator needs to have before ejected. - EffectiveBalanceIncrement uint64 `yaml:"EFFECTIVE_BALANCE_INCREMENT" spec:"true"` // EffectiveBalanceIncrement is used for converting the high balance into the low balance for validators. + MinDepositAmount uint64 `yaml:"MIN_DEPOSIT_AMOUNT" spec:"true" json:"MIN_DEPOSIT_AMOUNT,string"` // MinDepositAmount is the minimum amount of Gwei a validator can send to the deposit contract at once (lower amounts will be reverted). + MaxEffectiveBalance uint64 `yaml:"MAX_EFFECTIVE_BALANCE" spec:"true" json:"MAX_EFFECTIVE_BALANCE,string"` // MaxEffectiveBalance is the maximal amount of Gwei that is effective for staking. + EjectionBalance uint64 `yaml:"EJECTION_BALANCE" spec:"true" json:"EJECTION_BALANCE,string"` // EjectionBalance is the minimal GWei a validator needs to have before ejected. + EffectiveBalanceIncrement uint64 `yaml:"EFFECTIVE_BALANCE_INCREMENT" spec:"true" json:"EFFECTIVE_BALANCE_INCREMENT,string"` // EffectiveBalanceIncrement is used for converting the high balance into the low balance for validators. // Initial value constants. - BLSWithdrawalPrefixByte byte `yaml:"BLS_WITHDRAWAL_PREFIX" spec:"true"` // BLSWithdrawalPrefixByte is used for BLS withdrawal and it's the first byte. - ETH1AddressWithdrawalPrefixByte byte `yaml:"ETH1_ADDRESS_WITHDRAWAL_PREFIX" spec:"true"` // ETH1AddressWithdrawalPrefixByte is used for withdrawals and it's the first byte. - ZeroHash libcommon.Hash // ZeroHash is used to represent a zeroed out 32 byte array. + BLSWithdrawalPrefixByte ConfigByte `yaml:"BLS_WITHDRAWAL_PREFIX" spec:"true" json:"BLS_WITHDRAWAL_PREFIX"` // BLSWithdrawalPrefixByte is used for BLS withdrawal and it's the first byte. + ETH1AddressWithdrawalPrefixByte ConfigByte `yaml:"ETH1_ADDRESS_WITHDRAWAL_PREFIX" spec:"true" json:"ETH1AddressWithdrawalPrefixByte"` // ETH1AddressWithdrawalPrefixByte is used for withdrawals and it's the first byte. // Time parameters constants. - GenesisDelay uint64 `yaml:"GENESIS_DELAY" spec:"true"` // GenesisDelay is the minimum number of seconds to delay starting the Ethereum Beacon Chain genesis. Must be at least 1 second. - MinAttestationInclusionDelay uint64 `yaml:"MIN_ATTESTATION_INCLUSION_DELAY" spec:"true"` // MinAttestationInclusionDelay defines how many slots validator has to wait to include attestation for beacon block. - SecondsPerSlot uint64 `yaml:"SECONDS_PER_SLOT" spec:"true"` // SecondsPerSlot is how many seconds are in a single slot. - SlotsPerEpoch uint64 `yaml:"SLOTS_PER_EPOCH" spec:"true"` // SlotsPerEpoch is the number of slots in an epoch. - SqrRootSlotsPerEpoch uint64 // SqrRootSlotsPerEpoch is a hard coded value where we take the square root of `SlotsPerEpoch` and round down. - MinSeedLookahead uint64 `yaml:"MIN_SEED_LOOKAHEAD" spec:"true"` // MinSeedLookahead is the duration of randao look ahead seed. - MaxSeedLookahead uint64 `yaml:"MAX_SEED_LOOKAHEAD" spec:"true"` // MaxSeedLookahead is the duration a validator has to wait for entry and exit in epoch. - EpochsPerEth1VotingPeriod uint64 `yaml:"EPOCHS_PER_ETH1_VOTING_PERIOD" spec:"true"` // EpochsPerEth1VotingPeriod defines how often the merkle root of deposit receipts get updated in beacon node on per epoch basis. - SlotsPerHistoricalRoot uint64 `yaml:"SLOTS_PER_HISTORICAL_ROOT" spec:"true"` // SlotsPerHistoricalRoot defines how often the historical root is saved. - MinValidatorWithdrawabilityDelay uint64 `yaml:"MIN_VALIDATOR_WITHDRAWABILITY_DELAY" spec:"true"` // MinValidatorWithdrawabilityDelay is the shortest amount of time a validator has to wait to withdraw. - ShardCommitteePeriod uint64 `yaml:"SHARD_COMMITTEE_PERIOD" spec:"true"` // ShardCommitteePeriod is the minimum amount of epochs a validator must participate before exiting. - MinEpochsToInactivityPenalty uint64 `yaml:"MIN_EPOCHS_TO_INACTIVITY_PENALTY" spec:"true"` // MinEpochsToInactivityPenalty defines the minimum amount of epochs since finality to begin penalizing inactivity. - Eth1FollowDistance uint64 `yaml:"ETH1_FOLLOW_DISTANCE" spec:"true"` // Eth1FollowDistance is the number of eth1.0 blocks to wait before considering a new deposit for voting. This only applies after the chain as been started. - SafeSlotsToUpdateJustified uint64 `yaml:"SAFE_SLOTS_TO_UPDATE_JUSTIFIED" spec:"true"` // SafeSlotsToUpdateJustified is the minimal slots needed to update justified check point. - DeprecatedSafeSlotsToImportOptimistically uint64 `yaml:"SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY" spec:"true"` // SafeSlotsToImportOptimistically is the minimal number of slots to wait before importing optimistically a pre-merge block - SecondsPerETH1Block uint64 `yaml:"SECONDS_PER_ETH1_BLOCK" spec:"true"` // SecondsPerETH1Block is the approximate time for a single eth1 block to be produced. + GenesisDelay uint64 `yaml:"GENESIS_DELAY" spec:"true" json:"GENESIS_DELAY,string"` // GenesisDelay is the minimum number of seconds to delay starting the Ethereum Beacon Chain genesis. Must be at least 1 second. + MinAttestationInclusionDelay uint64 `yaml:"MIN_ATTESTATION_INCLUSION_DELAY" spec:"true" json:"MIN_ATTESTATION_INCLUSION_DELAY,string"` // MinAttestationInclusionDelay defines how many slots validator has to wait to include attestation for beacon block. + SecondsPerSlot uint64 `yaml:"SECONDS_PER_SLOT" spec:"true" json:"SECONDS_PER_SLOT,string"` // SecondsPerSlot is how many seconds are in a single slot. + SlotsPerEpoch uint64 `yaml:"SLOTS_PER_EPOCH" spec:"true" json:"SLOTS_PER_EPOCH,string"` // SlotsPerEpoch is the number of slots in an epoch. + MinSeedLookahead uint64 `yaml:"MIN_SEED_LOOKAHEAD" spec:"true" json:"MIN_SEED_LOOKAHEAD,string"` // MinSeedLookahead is the duration of randao look ahead seed. + MaxSeedLookahead uint64 `yaml:"MAX_SEED_LOOKAHEAD" spec:"true" json:"MAX_SEED_LOOKAHEAD,string"` // MaxSeedLookahead is the duration a validator has to wait for entry and exit in epoch. + EpochsPerEth1VotingPeriod uint64 `yaml:"EPOCHS_PER_ETH1_VOTING_PERIOD" spec:"true" json:"EPOCHS_PER_ETH1_VOTING_PERIOD,string"` // EpochsPerEth1VotingPeriod defines how often the merkle root of deposit receipts get updated in beacon node on per epoch basis. + SlotsPerHistoricalRoot uint64 `yaml:"SLOTS_PER_HISTORICAL_ROOT" spec:"true" json:"SLOTS_PER_HISTORICAL_ROOT,string"` // SlotsPerHistoricalRoot defines how often the historical root is saved. + MinValidatorWithdrawabilityDelay uint64 `yaml:"MIN_VALIDATOR_WITHDRAWABILITY_DELAY" spec:"true" json:"MIN_VALIDATOR_WITHDRAWABILITY_DELAY,string"` // MinValidatorWithdrawabilityDelay is the shortest amount of time a validator has to wait to withdraw. + ShardCommitteePeriod uint64 `yaml:"SHARD_COMMITTEE_PERIOD" spec:"true" json:"SHARD_COMMITTEE_PERIOD,string"` // ShardCommitteePeriod is the minimum amount of epochs a validator must participate before exiting. + MinEpochsToInactivityPenalty uint64 `yaml:"MIN_EPOCHS_TO_INACTIVITY_PENALTY" spec:"true" json:"MIN_EPOCHS_TO_INACTIVITY_PENALTY,string"` // MinEpochsToInactivityPenalty defines the minimum amount of epochs since finality to begin penalizing inactivity. + Eth1FollowDistance uint64 `yaml:"ETH1_FOLLOW_DISTANCE" spec:"true" json:"ETH1_FOLLOW_DISTANCE,string"` // Eth1FollowDistance is the number of eth1.0 blocks to wait before considering a new deposit for voting. This only applies after the chain as been started. + SafeSlotsToUpdateJustified uint64 `yaml:"SAFE_SLOTS_TO_UPDATE_JUSTIFIED" spec:"true" json:"SAFE_SLOTS_TO_UPDATE_JUSTIFIED,string"` // SafeSlotsToUpdateJustified is the minimal slots needed to update justified check point. + DeprecatedSafeSlotsToImportOptimistically uint64 `yaml:"SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY" spec:"true" json:"SAFE_SLOTS_TO_IMPORT_OPTIMISTICALLY,string"` // SafeSlotsToImportOptimistically is the minimal number of slots to wait before importing optimistically a pre-merge block + SecondsPerETH1Block uint64 `yaml:"SECONDS_PER_ETH1_BLOCK" spec:"true" json:"SECONDS_PER_ETH1_BLOCK,string"` // SecondsPerETH1Block is the approximate time for a single eth1 block to be produced. // Fork choice algorithm constants. - ProposerScoreBoost uint64 `yaml:"PROPOSER_SCORE_BOOST" spec:"true"` // ProposerScoreBoost defines a value that is a % of the committee weight for fork-choice boosting. - IntervalsPerSlot uint64 `yaml:"INTERVALS_PER_SLOT" spec:"true"` // IntervalsPerSlot defines the number of fork choice intervals in a slot defined in the fork choice spec. + ProposerScoreBoost uint64 `yaml:"PROPOSER_SCORE_BOOST" spec:"true" json:"PROPOSER_SCORE_BOOST,string"` // ProposerScoreBoost defines a value that is a % of the committee weight for fork-choice boosting. + IntervalsPerSlot uint64 `yaml:"INTERVALS_PER_SLOT" spec:"true" json:"INTERVALS_PER_SLOT,string"` // IntervalsPerSlot defines the number of fork choice intervals in a slot defined in the fork choice spec. // Ethereum PoW parameters. - DepositChainID uint64 `yaml:"DEPOSIT_CHAIN_ID" spec:"true"` // DepositChainID of the eth1 network. This used for replay protection. - DepositNetworkID uint64 `yaml:"DEPOSIT_NETWORK_ID" spec:"true"` // DepositNetworkID of the eth1 network. This used for replay protection. - DepositContractAddress string `yaml:"DEPOSIT_CONTRACT_ADDRESS" spec:"true"` // DepositContractAddress is the address of the deposit contract. + DepositChainID uint64 `yaml:"DEPOSIT_CHAIN_ID" spec:"true" json:"DEPOSIT_CHAIN_ID,string"` // DepositChainID of the eth1 network. This used for replay protection. + DepositNetworkID uint64 `yaml:"DEPOSIT_NETWORK_ID" spec:"true" json:"DEPOSIT_NETWORK_ID,string"` // DepositNetworkID of the eth1 network. This used for replay protection. + DepositContractAddress string `yaml:"DEPOSIT_CONTRACT_ADDRESS" spec:"true" json:"DEPOSIT_CONTRACT_ADDRESS"` // DepositContractAddress is the address of the deposit contract. // Validator parameters. - RandomSubnetsPerValidator uint64 `yaml:"RANDOM_SUBNETS_PER_VALIDATOR" spec:"true"` // RandomSubnetsPerValidator specifies the amount of subnets a validator has to be subscribed to at one time. - EpochsPerRandomSubnetSubscription uint64 `yaml:"EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION" spec:"true"` // EpochsPerRandomSubnetSubscription specifies the minimum duration a validator is connected to their subnet. + RandomSubnetsPerValidator uint64 `yaml:"RANDOM_SUBNETS_PER_VALIDATOR" spec:"true" json:"RANDOM_SUBNETS_PER_VALIDATOR,string"` // RandomSubnetsPerValidator specifies the amount of subnets a validator has to be subscribed to at one time. + EpochsPerRandomSubnetSubscription uint64 `yaml:"EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION" spec:"true" json:"EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION,string"` // EpochsPerRandomSubnetSubscription specifies the minimum duration a validator is connected to their subnet. // State list lengths - EpochsPerHistoricalVector uint64 `yaml:"EPOCHS_PER_HISTORICAL_VECTOR" spec:"true"` // EpochsPerHistoricalVector defines max length in epoch to store old historical stats in beacon state. - EpochsPerSlashingsVector uint64 `yaml:"EPOCHS_PER_SLASHINGS_VECTOR" spec:"true"` // EpochsPerSlashingsVector defines max length in epoch to store old stats to recompute slashing witness. - HistoricalRootsLimit uint64 `yaml:"HISTORICAL_ROOTS_LIMIT" spec:"true"` // HistoricalRootsLimit defines max historical roots that can be saved in state before roll over. - ValidatorRegistryLimit uint64 `yaml:"VALIDATOR_REGISTRY_LIMIT" spec:"true"` // ValidatorRegistryLimit defines the upper bound of validators can participate in eth2. + EpochsPerHistoricalVector uint64 `yaml:"EPOCHS_PER_HISTORICAL_VECTOR" spec:"true" json:"EPOCHS_PER_HISTORICAL_VECTOR,string"` // EpochsPerHistoricalVector defines max length in epoch to store old historical stats in beacon state. + EpochsPerSlashingsVector uint64 `yaml:"EPOCHS_PER_SLASHINGS_VECTOR" spec:"true" json:"EPOCHS_PER_SLASHINGS_VECTOR,string"` // EpochsPerSlashingsVector defines max length in epoch to store old stats to recompute slashing witness. + HistoricalRootsLimit uint64 `yaml:"HISTORICAL_ROOTS_LIMIT" spec:"true" json:"HISTORICAL_ROOTS_LIMIT,string"` // HistoricalRootsLimit defines max historical roots that can be saved in state before roll over. + ValidatorRegistryLimit uint64 `yaml:"VALIDATOR_REGISTRY_LIMIT" spec:"true" json:"VALIDATOR_REGISTRY_LIMIT,string"` // ValidatorRegistryLimit defines the upper bound of validators can participate in eth2. // Reward and penalty quotients constants. - BaseRewardFactor uint64 `yaml:"BASE_REWARD_FACTOR" spec:"true"` // BaseRewardFactor is used to calculate validator per-slot interest rate. - WhistleBlowerRewardQuotient uint64 `yaml:"WHISTLEBLOWER_REWARD_QUOTIENT" spec:"true"` // WhistleBlowerRewardQuotient is used to calculate whistle blower reward. - ProposerRewardQuotient uint64 `yaml:"PROPOSER_REWARD_QUOTIENT" spec:"true"` // ProposerRewardQuotient is used to calculate the reward for proposers. - InactivityPenaltyQuotient uint64 `yaml:"INACTIVITY_PENALTY_QUOTIENT" spec:"true"` // InactivityPenaltyQuotient is used to calculate the penalty for a validator that is offline. - MinSlashingPenaltyQuotient uint64 `yaml:"MIN_SLASHING_PENALTY_QUOTIENT" spec:"true"` // MinSlashingPenaltyQuotient is used to calculate the minimum penalty to prevent DoS attacks. - ProportionalSlashingMultiplier uint64 `yaml:"PROPORTIONAL_SLASHING_MULTIPLIER" spec:"true"` // ProportionalSlashingMultiplier is used as a multiplier on slashed penalties. + BaseRewardFactor uint64 `yaml:"BASE_REWARD_FACTOR" spec:"true" json:"BASE_REWARD_FACTOR,string"` // BaseRewardFactor is used to calculate validator per-slot interest rate. + WhistleBlowerRewardQuotient uint64 `yaml:"WHISTLEBLOWER_REWARD_QUOTIENT" spec:"true" json:"WHISTLEBLOWER_REWARD_QUOTIENT,string"` // WhistleBlowerRewardQuotient is used to calculate whistle blower reward. + ProposerRewardQuotient uint64 `yaml:"PROPOSER_REWARD_QUOTIENT" spec:"true" json:"PROPOSER_REWARD_QUOTIENT,string"` // ProposerRewardQuotient is used to calculate the reward for proposers. + InactivityPenaltyQuotient uint64 `yaml:"INACTIVITY_PENALTY_QUOTIENT" spec:"true" json:"INACTIVITY_PENALTY_QUOTIENT,string"` // InactivityPenaltyQuotient is used to calculate the penalty for a validator that is offline. + MinSlashingPenaltyQuotient uint64 `yaml:"MIN_SLASHING_PENALTY_QUOTIENT" spec:"true" json:"MIN_SLASHING_PENALTY_QUOTIENT,string"` // MinSlashingPenaltyQuotient is used to calculate the minimum penalty to prevent DoS attacks. + ProportionalSlashingMultiplier uint64 `yaml:"PROPORTIONAL_SLASHING_MULTIPLIER" spec:"true" json:"PROPORTIONAL_SLASHING_MULTIPLIER,string"` // ProportionalSlashingMultiplier is used as a multiplier on slashed penalties. // Max operations per block constants. - MaxProposerSlashings uint64 `yaml:"MAX_PROPOSER_SLASHINGS" spec:"true"` // MaxProposerSlashings defines the maximum number of slashings of proposers possible in a block. - MaxAttesterSlashings uint64 `yaml:"MAX_ATTESTER_SLASHINGS" spec:"true"` // MaxAttesterSlashings defines the maximum number of casper FFG slashings possible in a block. - MaxAttestations uint64 `yaml:"MAX_ATTESTATIONS" spec:"true"` // MaxAttestations defines the maximum allowed attestations in a beacon block. - MaxDeposits uint64 `yaml:"MAX_DEPOSITS" spec:"true"` // MaxDeposits defines the maximum number of validator deposits in a block. - MaxVoluntaryExits uint64 `yaml:"MAX_VOLUNTARY_EXITS" spec:"true"` // MaxVoluntaryExits defines the maximum number of validator exits in a block. - MaxWithdrawalsPerPayload uint64 `yaml:"MAX_WITHDRAWALS_PER_PAYLOAD" spec:"true"` // MaxWithdrawalsPerPayload defines the maximum number of withdrawals in a block. - MaxBlsToExecutionChanges uint64 `yaml:"MAX_BLS_TO_EXECUTION_CHANGES" spec:"true"` // MaxBlsToExecutionChanges defines the maximum number of BLS-to-execution-change objects in a block. - MaxValidatorsPerWithdrawalsSweep uint64 `yaml:"MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP" spec:"true"` //MaxValidatorsPerWithdrawalsSweep bounds the size of the sweep searching for withdrawals per slot. + MaxProposerSlashings uint64 `yaml:"MAX_PROPOSER_SLASHINGS" spec:"true" json:"MAX_PROPOSER_SLASHINGS,string"` // MaxProposerSlashings defines the maximum number of slashings of proposers possible in a block. + MaxAttesterSlashings uint64 `yaml:"MAX_ATTESTER_SLASHINGS" spec:"true" json:"MAX_ATTESTER_SLASHINGS,string"` // MaxAttesterSlashings defines the maximum number of casper FFG slashings possible in a block. + MaxAttestations uint64 `yaml:"MAX_ATTESTATIONS" spec:"true" json:"MAX_ATTESTATIONS,string"` // MaxAttestations defines the maximum allowed attestations in a beacon block. + MaxDeposits uint64 `yaml:"MAX_DEPOSITS" spec:"true" json:"MAX_DEPOSITS,string"` // MaxDeposits defines the maximum number of validator deposits in a block. + MaxVoluntaryExits uint64 `yaml:"MAX_VOLUNTARY_EXITS" spec:"true" json:"MAX_VOLUNTARY_EXITS,string"` // MaxVoluntaryExits defines the maximum number of validator exits in a block. + MaxWithdrawalsPerPayload uint64 `yaml:"MAX_WITHDRAWALS_PER_PAYLOAD" spec:"true" json:"MAX_WITHDRAWALS_PER_PAYLOAD,string"` // MaxWithdrawalsPerPayload defines the maximum number of withdrawals in a block. + MaxBlsToExecutionChanges uint64 `yaml:"MAX_BLS_TO_EXECUTION_CHANGES" spec:"true" json:"MAX_BLS_TO_EXECUTION_CHANGES,string"` // MaxBlsToExecutionChanges defines the maximum number of BLS-to-execution-change objects in a block. + MaxValidatorsPerWithdrawalsSweep uint64 `yaml:"MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP" spec:"true" json:"MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP,string"` //MaxValidatorsPerWithdrawalsSweep bounds the size of the sweep searching for withdrawals per slot. // BLS domain values. - DomainBeaconProposer libcommon.Bytes4 `yaml:"DOMAIN_BEACON_PROPOSER" spec:"true"` // DomainBeaconProposer defines the BLS signature domain for beacon proposal verification. - DomainRandao libcommon.Bytes4 `yaml:"DOMAIN_RANDAO" spec:"true"` // DomainRandao defines the BLS signature domain for randao verification. - DomainBeaconAttester libcommon.Bytes4 `yaml:"DOMAIN_BEACON_ATTESTER" spec:"true"` // DomainBeaconAttester defines the BLS signature domain for attestation verification. - DomainDeposit libcommon.Bytes4 `yaml:"DOMAIN_DEPOSIT" spec:"true"` // DomainDeposit defines the BLS signature domain for deposit verification. - DomainVoluntaryExit libcommon.Bytes4 `yaml:"DOMAIN_VOLUNTARY_EXIT" spec:"true"` // DomainVoluntaryExit defines the BLS signature domain for exit verification. - DomainSelectionProof libcommon.Bytes4 `yaml:"DOMAIN_SELECTION_PROOF" spec:"true"` // DomainSelectionProof defines the BLS signature domain for selection proof. - DomainAggregateAndProof libcommon.Bytes4 `yaml:"DOMAIN_AGGREGATE_AND_PROOF" spec:"true"` // DomainAggregateAndProof defines the BLS signature domain for aggregate and proof. - DomainSyncCommittee libcommon.Bytes4 `yaml:"DOMAIN_SYNC_COMMITTEE" spec:"true"` // DomainVoluntaryExit defines the BLS signature domain for sync committee. - DomainSyncCommitteeSelectionProof libcommon.Bytes4 `yaml:"DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF" spec:"true"` // DomainSelectionProof defines the BLS signature domain for sync committee selection proof. - DomainContributionAndProof libcommon.Bytes4 `yaml:"DOMAIN_CONTRIBUTION_AND_PROOF" spec:"true"` // DomainAggregateAndProof defines the BLS signature domain for contribution and proof. - DomainApplicationMask libcommon.Bytes4 `yaml:"DOMAIN_APPLICATION_MASK" spec:"true"` // DomainApplicationMask defines the BLS signature domain for application mask. - DomainApplicationBuilder libcommon.Bytes4 // DomainApplicationBuilder defines the BLS signature domain for application builder. - DomainBLSToExecutionChange libcommon.Bytes4 // DomainBLSToExecutionChange defines the BLS signature domain to change withdrawal addresses to ETH1 prefix - DomainBlobSideCar libcommon.Bytes4 `yaml:"DOMAIN_BLOB_SIDECAR" spec:"true"` // DomainBlobSideCar defines the BLS signature domain for blob sidecar verification - - // Prysm constants. - GweiPerEth uint64 // GweiPerEth is the amount of gwei corresponding to 1 eth. - BLSSecretKeyLength int // BLSSecretKeyLength defines the expected length of BLS secret keys in bytes. - BLSPubkeyLength int // BLSPubkeyLength defines the expected length of BLS public keys in bytes. - DefaultBufferSize int // DefaultBufferSize for channels across the Prysm repository. - ValidatorPrivkeyFileName string // ValidatorPrivKeyFileName specifies the string name of a validator private key file. - WithdrawalPrivkeyFileName string // WithdrawalPrivKeyFileName specifies the string name of a withdrawal private key file. - RPCSyncCheck time.Duration // Number of seconds to query the sync service, to find out if the node is synced or not. - EmptySignature libcommon.Bytes96 // EmptySignature is used to represent a zeroed out BLS Signature. - DefaultPageSize int // DefaultPageSize defines the default page size for RPC server request. - MaxPeersToSync int // MaxPeersToSync describes the limit for number of peers in round robin sync. - SlotsPerArchivedPoint uint64 // SlotsPerArchivedPoint defines the number of slots per one archived point. - GenesisCountdownInterval time.Duration // How often to log the countdown until the genesis time is reached. - BeaconStateFieldCount int // BeaconStateFieldCount defines how many fields are in beacon state. - BeaconStateAltairFieldCount int // BeaconStateAltairFieldCount defines how many fields are in beacon state hard fork 1. - BeaconStateBellatrixFieldCount int // BeaconStateBellatrixFieldCount defines how many fields are in beacon state post upgrade to the Bellatrix. + DomainBeaconProposer libcommon.Bytes4 `yaml:"DOMAIN_BEACON_PROPOSER" spec:"true" json:"DOMAIN_BEACON_PROPOSER"` // DomainBeaconProposer defines the BLS signature domain for beacon proposal verification. + DomainRandao libcommon.Bytes4 `yaml:"DOMAIN_RANDAO" spec:"true" json:"DOMAIN_RANDAO"` // DomainRandao defines the BLS signature domain for randao verification. + DomainBeaconAttester libcommon.Bytes4 `yaml:"DOMAIN_BEACON_ATTESTER" spec:"true" json:"DOMAIN_BEACON_ATTESTER"` // DomainBeaconAttester defines the BLS signature domain for attestation verification. + DomainDeposit libcommon.Bytes4 `yaml:"DOMAIN_DEPOSIT" spec:"true" json:"DOMAIN_DEPOSIT"` // DomainDeposit defines the BLS signature domain for deposit verification. + DomainVoluntaryExit libcommon.Bytes4 `yaml:"DOMAIN_VOLUNTARY_EXIT" spec:"true" json:"DOMAIN_VOLUNTARY_EXIT"` // DomainVoluntaryExit defines the BLS signature domain for exit verification. + DomainSelectionProof libcommon.Bytes4 `yaml:"DOMAIN_SELECTION_PROOF" spec:"true" json:"DOMAIN_SELECTION_PROOF"` // DomainSelectionProof defines the BLS signature domain for selection proof. + DomainAggregateAndProof libcommon.Bytes4 `yaml:"DOMAIN_AGGREGATE_AND_PROOF" spec:"true" json:"DOMAIN_AGGREGATE_AND_PROOF"` // DomainAggregateAndProof defines the BLS signature domain for aggregate and proof. + DomainSyncCommittee libcommon.Bytes4 `yaml:"DOMAIN_SYNC_COMMITTEE" spec:"true" json:"DOMAIN_SYNC_COMMITTEE"` // DomainVoluntaryExit defines the BLS signature domain for sync committee. + DomainSyncCommitteeSelectionProof libcommon.Bytes4 `yaml:"DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF" spec:"true" json:"DOMAIN_SYNC_COMMITTEE_SELECTION_PROOF"` // DomainSelectionProof defines the BLS signature domain for sync committee selection proof. + DomainContributionAndProof libcommon.Bytes4 `yaml:"DOMAIN_CONTRIBUTION_AND_PROOF" spec:"true" json:"DOMAIN_CONTRIBUTION_AND_PROOF"` // DomainAggregateAndProof defines the BLS signature domain for contribution and proof. + DomainApplicationMask libcommon.Bytes4 `yaml:"DOMAIN_APPLICATION_MASK" spec:"true" json:"DOMAIN_APPLICATION_MASK"` // DomainApplicationMask defines the BLS signature domain for application mask. + DomainApplicationBuilder libcommon.Bytes4 `json:"-"` // DomainApplicationBuilder defines the BLS signature domain for application builder. + DomainBLSToExecutionChange libcommon.Bytes4 `json:"-"` // DomainBLSToExecutionChange defines the BLS signature domain to change withdrawal addresses to ETH1 prefix + DomainBlobSideCar libcommon.Bytes4 `yaml:"DOMAIN_BLOB_SIDECAR" spec:"true" json:"DOMAIN_BLOB_SIDECAR"` // DomainBlobSideCar defines the BLS signature domain for blob sidecar verification // Slasher constants. - WeakSubjectivityPeriod uint64 // WeakSubjectivityPeriod defines the time period expressed in number of epochs were proof of stake network should validate block headers and attestations for slashable events. - PruneSlasherStoragePeriod uint64 // PruneSlasherStoragePeriod defines the time period expressed in number of epochs were proof of stake network should prune attestation and block header store. + PruneSlasherStoragePeriod uint64 `json:"-"` // PruneSlasherStoragePeriod defines the time period expressed in number of epochs were proof of stake network should prune attestation and block header store. // Slashing protection constants. - SlashingProtectionPruningEpochs uint64 // SlashingProtectionPruningEpochs defines a period after which all prior epochs are pruned in the validator database. + SlashingProtectionPruningEpochs uint64 `json:"-"` // SlashingProtectionPruningEpochs defines a period after which all prior epochs are pruned in the validator database. // Fork-related values. - GenesisForkVersion uint32 `yaml:"GENESIS_FORK_VERSION" spec:"true"` // GenesisForkVersion is used to track fork version between state transitions. - AltairForkVersion uint32 `yaml:"ALTAIR_FORK_VERSION" spec:"true"` // AltairForkVersion is used to represent the fork version for Altair. - AltairForkEpoch uint64 `yaml:"ALTAIR_FORK_EPOCH" spec:"true"` // AltairForkEpoch is used to represent the assigned fork epoch for Altair. - BellatrixForkVersion uint32 `yaml:"BELLATRIX_FORK_VERSION" spec:"true"` // BellatrixForkVersion is used to represent the fork version for Bellatrix. - BellatrixForkEpoch uint64 `yaml:"BELLATRIX_FORK_EPOCH" spec:"true"` // BellatrixForkEpoch is used to represent the assigned fork epoch for Bellatrix. - CapellaForkVersion uint32 `yaml:"CAPELLA_FORK_VERSION" spec:"true"` // CapellaForkVersion is used to represent the fork version for Capella. - CapellaForkEpoch uint64 `yaml:"CAPELLA_FORK_EPOCH" spec:"true"` // CapellaForkEpoch is used to represent the assigned fork epoch for Capella. - DenebForkVersion uint32 `yaml:"DENEB_FORK_VERSION" spec:"true"` // DenebForkVersion is used to represent the fork version for Deneb. - DenebForkEpoch uint64 `yaml:"DENEB_FORK_EPOCH" spec:"true"` // DenebForkEpoch is used to represent the assigned fork epoch for Deneb. - - ForkVersionSchedule map[libcommon.Bytes4]uint64 // Schedule of fork epochs by version. - ForkVersionNames map[libcommon.Bytes4]string // Human-readable names of fork versions. - - // Weak subjectivity values. - SafetyDecay uint64 // SafetyDecay is defined as the loss in the 1/3 consensus safety margin of the casper FFG mechanism. + GenesisForkVersion ConfigForkVersion `yaml:"GENESIS_FORK_VERSION" spec:"true" json:"GENESIS_FORK_VERSION"` // GenesisForkVersion is used to track fork version between state transitions. + AltairForkVersion ConfigForkVersion `yaml:"ALTAIR_FORK_VERSION" spec:"true" json:"ALTAIR_FORK_VERSION"` // AltairForkVersion is used to represent the fork version for Altair. + AltairForkEpoch uint64 `yaml:"ALTAIR_FORK_EPOCH" spec:"true" json:"ALTAIR_FORK_EPOCH,string"` // AltairForkEpoch is used to represent the assigned fork epoch for Altair. + BellatrixForkVersion ConfigForkVersion `yaml:"BELLATRIX_FORK_VERSION" spec:"true" json:"BELLATRIX_FORK_VERSION"` // BellatrixForkVersion is used to represent the fork version for Bellatrix. + BellatrixForkEpoch uint64 `yaml:"BELLATRIX_FORK_EPOCH" spec:"true" json:"BELLATRIX_FORK_EPOCH,string"` // BellatrixForkEpoch is used to represent the assigned fork epoch for Bellatrix. + CapellaForkVersion ConfigForkVersion `yaml:"CAPELLA_FORK_VERSION" spec:"true" json:"CAPELLA_FORK_VERSION"` // CapellaForkVersion is used to represent the fork version for Capella. + CapellaForkEpoch uint64 `yaml:"CAPELLA_FORK_EPOCH" spec:"true" json:"CAPELLA_FORK_EPOCH,string"` // CapellaForkEpoch is used to represent the assigned fork epoch for Capella. + DenebForkVersion ConfigForkVersion `yaml:"DENEB_FORK_VERSION" spec:"true" json:"DENEB_FORK_VERSION"` // DenebForkVersion is used to represent the fork version for Deneb. + DenebForkEpoch uint64 `yaml:"DENEB_FORK_EPOCH" spec:"true" json:"DENEB_FORK_EPOCH,string"` // DenebForkEpoch is used to represent the assigned fork epoch for Deneb. + + ForkVersionSchedule map[libcommon.Bytes4]uint64 `json:"-"` // Schedule of fork epochs by version. + ForkVersionNames map[libcommon.Bytes4]string `json:"-"` // Human-readable names of fork versions. // New values introduced in Altair hard fork 1. // Participation flag indices. - TimelySourceFlagIndex uint8 `yaml:"TIMELY_SOURCE_FLAG_INDEX" spec:"true"` // TimelySourceFlagIndex is the source flag position of the participation bits. - TimelyTargetFlagIndex uint8 `yaml:"TIMELY_TARGET_FLAG_INDEX" spec:"true"` // TimelyTargetFlagIndex is the target flag position of the participation bits. - TimelyHeadFlagIndex uint8 `yaml:"TIMELY_HEAD_FLAG_INDEX" spec:"true"` // TimelyHeadFlagIndex is the head flag position of the participation bits. + TimelySourceFlagIndex uint8 `yaml:"TIMELY_SOURCE_FLAG_INDEX" spec:"true" json:"TIMELY_SOURCE_FLAG_INDEX,string"` // TimelySourceFlagIndex is the source flag position of the participation bits. + TimelyTargetFlagIndex uint8 `yaml:"TIMELY_TARGET_FLAG_INDEX" spec:"true" json:"TIMELY_TARGET_FLAG_INDEX,string"` // TimelyTargetFlagIndex is the target flag position of the participation bits. + TimelyHeadFlagIndex uint8 `yaml:"TIMELY_HEAD_FLAG_INDEX" spec:"true" json:"TIMELY_HEAD_FLAG_INDEX,string"` // TimelyHeadFlagIndex is the head flag position of the participation bits. // Incentivization weights. - TimelySourceWeight uint64 `yaml:"TIMELY_SOURCE_WEIGHT" spec:"true"` // TimelySourceWeight is the factor of how much source rewards receives. - TimelyTargetWeight uint64 `yaml:"TIMELY_TARGET_WEIGHT" spec:"true"` // TimelyTargetWeight is the factor of how much target rewards receives. - TimelyHeadWeight uint64 `yaml:"TIMELY_HEAD_WEIGHT" spec:"true"` // TimelyHeadWeight is the factor of how much head rewards receives. - SyncRewardWeight uint64 `yaml:"SYNC_REWARD_WEIGHT" spec:"true"` // SyncRewardWeight is the factor of how much sync committee rewards receives. - WeightDenominator uint64 `yaml:"WEIGHT_DENOMINATOR" spec:"true"` // WeightDenominator accounts for total rewards denomination. - ProposerWeight uint64 `yaml:"PROPOSER_WEIGHT" spec:"true"` // ProposerWeight is the factor of how much proposer rewards receives. + TimelySourceWeight uint64 `yaml:"TIMELY_SOURCE_WEIGHT" spec:"true" json:"TIMELY_SOURCE_WEIGHT,string"` // TimelySourceWeight is the factor of how much source rewards receives. + TimelyTargetWeight uint64 `yaml:"TIMELY_TARGET_WEIGHT" spec:"true" json:"TIMELY_TARGET_WEIGHT,string"` // TimelyTargetWeight is the factor of how much target rewards receives. + TimelyHeadWeight uint64 `yaml:"TIMELY_HEAD_WEIGHT" spec:"true" json:"TIMELY_HEAD_WEIGHT,string"` // TimelyHeadWeight is the factor of how much head rewards receives. + SyncRewardWeight uint64 `yaml:"SYNC_REWARD_WEIGHT" spec:"true" json:"SYNC_REWARD_WEIGHT,string"` // SyncRewardWeight is the factor of how much sync committee rewards receives. + WeightDenominator uint64 `yaml:"WEIGHT_DENOMINATOR" spec:"true" json:"WEIGHT_DENOMINATOR,string"` // WeightDenominator accounts for total rewards denomination. + ProposerWeight uint64 `yaml:"PROPOSER_WEIGHT" spec:"true" json:"PROPOSER_WEIGHT,string"` // ProposerWeight is the factor of how much proposer rewards receives. // Validator related. - TargetAggregatorsPerSyncSubcommittee uint64 `yaml:"TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE" spec:"true"` // TargetAggregatorsPerSyncSubcommittee for aggregating in sync committee. - SyncCommitteeSubnetCount uint64 `yaml:"SYNC_COMMITTEE_SUBNET_COUNT" spec:"true"` // SyncCommitteeSubnetCount for sync committee subnet count. + TargetAggregatorsPerSyncSubcommittee uint64 `yaml:"TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE" spec:"true" json:"TARGET_AGGREGATORS_PER_SYNC_SUBCOMMITTEE,string"` // TargetAggregatorsPerSyncSubcommittee for aggregating in sync committee. + SyncCommitteeSubnetCount uint64 `yaml:"SYNC_COMMITTEE_SUBNET_COUNT" spec:"true" json:"SYNC_COMMITTEE_SUBNET_COUNT,string"` // SyncCommitteeSubnetCount for sync committee subnet count. // Misc. - SyncCommitteeSize uint64 `yaml:"SYNC_COMMITTEE_SIZE" spec:"true"` // SyncCommitteeSize for light client sync committee size. - InactivityScoreBias uint64 `yaml:"INACTIVITY_SCORE_BIAS" spec:"true"` // InactivityScoreBias for calculating score bias penalties during inactivity - InactivityScoreRecoveryRate uint64 `yaml:"INACTIVITY_SCORE_RECOVERY_RATE" spec:"true"` // InactivityScoreRecoveryRate for recovering score bias penalties during inactivity. - EpochsPerSyncCommitteePeriod uint64 `yaml:"EPOCHS_PER_SYNC_COMMITTEE_PERIOD" spec:"true"` // EpochsPerSyncCommitteePeriod defines how many epochs per sync committee period. + SyncCommitteeSize uint64 `yaml:"SYNC_COMMITTEE_SIZE" spec:"true" json:"SYNC_COMMITTEE_SIZE,string"` // SyncCommitteeSize for light client sync committee size. + InactivityScoreBias uint64 `yaml:"INACTIVITY_SCORE_BIAS" spec:"true" json:"INACTIVITY_SCORE_BIAS,string"` // InactivityScoreBias for calculating score bias penalties during inactivity + InactivityScoreRecoveryRate uint64 `yaml:"INACTIVITY_SCORE_RECOVERY_RATE" spec:"true" json:"INACTIVITY_SCORE_RECOVERY_RATE,string"` // InactivityScoreRecoveryRate for recovering score bias penalties during inactivity. + EpochsPerSyncCommitteePeriod uint64 `yaml:"EPOCHS_PER_SYNC_COMMITTEE_PERIOD" spec:"true" json:"EPOCHS_PER_SYNC_COMMITTEE_PERIOD,string"` // EpochsPerSyncCommitteePeriod defines how many epochs per sync committee period. // Updated penalty values. This moves penalty parameters toward their final, maximum security values. // Note: We do not override previous configuration values but instead creates new values and replaces usage throughout. - InactivityPenaltyQuotientAltair uint64 `yaml:"INACTIVITY_PENALTY_QUOTIENT_ALTAIR" spec:"true"` // InactivityPenaltyQuotientAltair for penalties during inactivity post Altair hard fork. - MinSlashingPenaltyQuotientAltair uint64 `yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR" spec:"true"` // MinSlashingPenaltyQuotientAltair for slashing penalties post Altair hard fork. - ProportionalSlashingMultiplierAltair uint64 `yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR" spec:"true"` // ProportionalSlashingMultiplierAltair for slashing penalties' multiplier post Alair hard fork. - MinSlashingPenaltyQuotientBellatrix uint64 `yaml:"MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX" spec:"true"` // MinSlashingPenaltyQuotientBellatrix for slashing penalties post Bellatrix hard fork. - ProportionalSlashingMultiplierBellatrix uint64 `yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX" spec:"true"` // ProportionalSlashingMultiplierBellatrix for slashing penalties' multiplier post Bellatrix hard fork. - InactivityPenaltyQuotientBellatrix uint64 `yaml:"INACTIVITY_PENALTY_QUOTIENT_BELLATRIX" spec:"true"` // InactivityPenaltyQuotientBellatrix for penalties during inactivity post Bellatrix hard fork. + InactivityPenaltyQuotientAltair uint64 `yaml:"INACTIVITY_PENALTY_QUOTIENT_ALTAIR" spec:"true" json:"INACTIVITY_PENALTY_QUOTIENT_ALTAIR,string"` // InactivityPenaltyQuotientAltair for penalties during inactivity post Altair hard fork. + MinSlashingPenaltyQuotientAltair uint64 `yaml:"MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR" spec:"true" json:"MIN_SLASHING_PENALTY_QUOTIENT_ALTAIR,string"` // MinSlashingPenaltyQuotientAltair for slashing penalties post Altair hard fork. + ProportionalSlashingMultiplierAltair uint64 `yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR" spec:"true" json:"PROPORTIONAL_SLASHING_MULTIPLIER_ALTAIR,string"` // ProportionalSlashingMultiplierAltair for slashing penalties' multiplier post Alair hard fork. + MinSlashingPenaltyQuotientBellatrix uint64 `yaml:"MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX" spec:"true" json:"MIN_SLASHING_PENALTY_QUOTIENT_BELLATRIX,string"` // MinSlashingPenaltyQuotientBellatrix for slashing penalties post Bellatrix hard fork. + ProportionalSlashingMultiplierBellatrix uint64 `yaml:"PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX" spec:"true" json:"PROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX,string"` // ProportionalSlashingMultiplierBellatrix for slashing penalties' multiplier post Bellatrix hard fork. + InactivityPenaltyQuotientBellatrix uint64 `yaml:"INACTIVITY_PENALTY_QUOTIENT_BELLATRIX" spec:"true" json:"INACTIVITY_PENALTY_QUOTIENT_BELLATRIX,string"` // InactivityPenaltyQuotientBellatrix for penalties during inactivity post Bellatrix hard fork. // Light client - MinSyncCommitteeParticipants uint64 `yaml:"MIN_SYNC_COMMITTEE_PARTICIPANTS" spec:"true"` // MinSyncCommitteeParticipants defines the minimum amount of sync committee participants for which the light client acknowledges the signature. + MinSyncCommitteeParticipants uint64 `yaml:"MIN_SYNC_COMMITTEE_PARTICIPANTS" spec:"true" json:"MIN_SYNC_COMMITTEE_PARTICIPANTS,string"` // MinSyncCommitteeParticipants defines the minimum amount of sync committee participants for which the light client acknowledges the signature. // Bellatrix - TerminalBlockHash libcommon.Hash `yaml:"TERMINAL_BLOCK_HASH" spec:"true"` // TerminalBlockHash of beacon chain. - TerminalBlockHashActivationEpoch uint64 `yaml:"TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH" spec:"true"` // TerminalBlockHashActivationEpoch of beacon chain. - TerminalTotalDifficulty string `yaml:"TERMINAL_TOTAL_DIFFICULTY" spec:"true"` // TerminalTotalDifficulty is part of the experimental Bellatrix spec. This value is type is currently TBD. - DefaultFeeRecipient libcommon.Address // DefaultFeeRecipient where the transaction fee goes to. - EthBurnAddressHex string // EthBurnAddressHex is the constant eth address written in hex format to burn fees in that network. the default is 0x0 - DefaultBuilderGasLimit uint64 // DefaultBuilderGasLimit is the default used to set the gaslimit for the Builder APIs, typically at around 30M wei. + TerminalBlockHash libcommon.Hash `yaml:"TERMINAL_BLOCK_HASH" spec:"true" json:"TERMINAL_BLOCK_HASH"` // TerminalBlockHash of beacon chain. + TerminalBlockHashActivationEpoch uint64 `yaml:"TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH" spec:"true" json:"TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH,string"` // TerminalBlockHashActivationEpoch of beacon chain. + TerminalTotalDifficulty string `yaml:"TERMINAL_TOTAL_DIFFICULTY" spec:"true" json:"TERMINAL_TOTAL_DIFFICULTY"` // TerminalTotalDifficulty is part of the experimental Bellatrix spec. This value is type is currently TBD. + DefaultFeeRecipient libcommon.Address `json:"-"` // DefaultFeeRecipient where the transaction fee goes to. + DefaultBuilderGasLimit uint64 `json:"-"` // DefaultBuilderGasLimit is the default used to set the gaslimit for the Builder APIs, typically at around 30M wei. // Mev-boost circuit breaker - MaxBuilderConsecutiveMissedSlots uint64 // MaxBuilderConsecutiveMissedSlots defines the number of consecutive skip slot to fallback from using relay/builder to local execution engine for block construction. - MaxBuilderEpochMissedSlots uint64 // MaxBuilderEpochMissedSlots is defines the number of total skip slot (per epoch rolling windows) to fallback from using relay/builder to local execution engine for block construction. + MaxBuilderConsecutiveMissedSlots uint64 `json:"-"` // MaxBuilderConsecutiveMissedSlots defines the number of consecutive skip slot to fallback from using relay/builder to local execution engine for block construction. + MaxBuilderEpochMissedSlots uint64 `json:"-"` // MaxBuilderEpochMissedSlots is defines the number of total skip slot (per epoch rolling windows) to fallback from using relay/builder to local execution engine for block construction. + + MaxBlobGasPerBlock uint64 `yaml:"MAX_BLOB_GAS_PER_BLOCK" json:"MAX_BLOB_GAS_PER_BLOCK,string"` // MaxBlobGasPerBlock defines the maximum gas limit for blob sidecar per block. + MaxBlobsPerBlock uint64 `yaml:"MAX_BLOBS_PER_BLOCK" json:"MAX_BLOBS_PER_BLOCK,string"` // MaxBlobsPerBlock defines the maximum number of blobs per block. } func (b *BeaconChainConfig) RoundSlotToEpoch(slot uint64) uint64 { @@ -532,28 +537,23 @@ func (b *BeaconChainConfig) InitializeForkSchedule() { b.ForkVersionNames = configForkNames(b) } -func toBytes4(in []byte) (ret [4]byte) { - copy(ret[:], in) - return -} - func configForkSchedule(b *BeaconChainConfig) map[libcommon.Bytes4]uint64 { fvs := map[libcommon.Bytes4]uint64{} - fvs[utils.Uint32ToBytes4(b.GenesisForkVersion)] = 0 - fvs[utils.Uint32ToBytes4(b.AltairForkVersion)] = b.AltairForkEpoch - fvs[utils.Uint32ToBytes4(b.BellatrixForkVersion)] = b.BellatrixForkEpoch - fvs[utils.Uint32ToBytes4(b.CapellaForkVersion)] = b.CapellaForkEpoch - fvs[utils.Uint32ToBytes4(b.DenebForkVersion)] = b.DenebForkEpoch + fvs[utils.Uint32ToBytes4(uint32(b.GenesisForkVersion))] = 0 + fvs[utils.Uint32ToBytes4(uint32(b.AltairForkVersion))] = b.AltairForkEpoch + fvs[utils.Uint32ToBytes4(uint32(b.BellatrixForkVersion))] = b.BellatrixForkEpoch + fvs[utils.Uint32ToBytes4(uint32(b.CapellaForkVersion))] = b.CapellaForkEpoch + fvs[utils.Uint32ToBytes4(uint32(b.DenebForkVersion))] = b.DenebForkEpoch return fvs } func configForkNames(b *BeaconChainConfig) map[libcommon.Bytes4]string { fvn := map[libcommon.Bytes4]string{} - fvn[utils.Uint32ToBytes4(b.GenesisForkVersion)] = "phase0" - fvn[utils.Uint32ToBytes4(b.AltairForkVersion)] = "altair" - fvn[utils.Uint32ToBytes4(b.BellatrixForkVersion)] = "bellatrix" - fvn[utils.Uint32ToBytes4(b.CapellaForkVersion)] = "capella" - fvn[utils.Uint32ToBytes4(b.DenebForkVersion)] = "deneb" + fvn[utils.Uint32ToBytes4(uint32(b.GenesisForkVersion))] = "phase0" + fvn[utils.Uint32ToBytes4(uint32(b.AltairForkVersion))] = "altair" + fvn[utils.Uint32ToBytes4(uint32(b.BellatrixForkVersion))] = "bellatrix" + fvn[utils.Uint32ToBytes4(uint32(b.CapellaForkVersion))] = "capella" + fvn[utils.Uint32ToBytes4(uint32(b.DenebForkVersion))] = "deneb" return fvn } @@ -574,19 +574,20 @@ var MainnetBeaconConfig BeaconChainConfig = BeaconChainConfig{ GenesisDelay: 604800, // 1 week. // Misc constant. - TargetCommitteeSize: 128, - MaxValidatorsPerCommittee: 2048, - MaxCommitteesPerSlot: 64, - MinPerEpochChurnLimit: 4, - ChurnLimitQuotient: 1 << 16, - MaxPerEpochActivationChurnLimit: 8, - ShuffleRoundCount: 90, - MinGenesisActiveValidatorCount: 16384, - MinGenesisTime: 1606824000, // Dec 1, 2020, 12pm UTC. - TargetAggregatorsPerCommittee: 16, - HysteresisQuotient: 4, - HysteresisDownwardMultiplier: 1, - HysteresisUpwardMultiplier: 5, + TargetCommitteeSize: 128, + MaxValidatorsPerCommittee: 2048, + MaxCommitteesPerSlot: 64, + MinPerEpochChurnLimit: 4, + ChurnLimitQuotient: 1 << 16, + MaxPerEpochActivationChurnLimit: 8, + ShuffleRoundCount: 90, + MinGenesisActiveValidatorCount: 16384, + MinGenesisTime: 1606824000, // Dec 1, 2020, 12pm UTC. + TargetAggregatorsPerCommittee: 16, + HysteresisQuotient: 4, + HysteresisDownwardMultiplier: 1, + HysteresisUpwardMultiplier: 5, + MinEpochsForBlobsSidecarsRequest: 4096, // Gwei value constants. MinDepositAmount: 1 * 1e9, @@ -595,15 +596,13 @@ var MainnetBeaconConfig BeaconChainConfig = BeaconChainConfig{ EffectiveBalanceIncrement: 1 * 1e9, // Initial value constants. - BLSWithdrawalPrefixByte: byte(0), - ETH1AddressWithdrawalPrefixByte: byte(1), - ZeroHash: [32]byte{}, + BLSWithdrawalPrefixByte: ConfigByte(0), + ETH1AddressWithdrawalPrefixByte: ConfigByte(1), // Time parameter constants. MinAttestationInclusionDelay: 1, SecondsPerSlot: 12, SlotsPerEpoch: 32, - SqrRootSlotsPerEpoch: 5, MinSeedLookahead: 1, MaxSeedLookahead: 4, EpochsPerEth1VotingPeriod: 64, @@ -675,32 +674,13 @@ var MainnetBeaconConfig BeaconChainConfig = BeaconChainConfig{ DomainBLSToExecutionChange: utils.Uint32ToBytes4(0x0A000000), // Prysm constants. - GweiPerEth: 1000000000, - BLSSecretKeyLength: 32, - BLSPubkeyLength: 48, - DefaultBufferSize: 10000, - WithdrawalPrivkeyFileName: "/shardwithdrawalkey", - ValidatorPrivkeyFileName: "/validatorprivatekey", - RPCSyncCheck: 1, - EmptySignature: [96]byte{}, - DefaultPageSize: 250, - MaxPeersToSync: 15, - SlotsPerArchivedPoint: 2048, - GenesisCountdownInterval: time.Minute, - ConfigName: "mainnet", - PresetBase: "mainnet", - BeaconStateFieldCount: 21, - BeaconStateAltairFieldCount: 24, - BeaconStateBellatrixFieldCount: 25, + ConfigName: "mainnet", + PresetBase: "mainnet", // Slasher related values. - WeakSubjectivityPeriod: 54000, PruneSlasherStoragePeriod: 10, SlashingProtectionPruningEpochs: 512, - // Weak subjectivity values. - SafetyDecay: 10, - // Fork related values. GenesisForkVersion: 0, AltairForkVersion: 0x01000000, @@ -710,7 +690,7 @@ var MainnetBeaconConfig BeaconChainConfig = BeaconChainConfig{ CapellaForkVersion: 0x03000000, CapellaForkEpoch: 194048, DenebForkVersion: 0x04000000, - DenebForkEpoch: math.MaxUint64, + DenebForkEpoch: 269568, // New values introduced in Altair hard fork 1. // Participation flag indices. @@ -751,12 +731,14 @@ var MainnetBeaconConfig BeaconChainConfig = BeaconChainConfig{ TerminalBlockHashActivationEpoch: 18446744073709551615, TerminalBlockHash: [32]byte{}, TerminalTotalDifficulty: "58750000000000000000000", // Estimated: Sept 15, 2022 - EthBurnAddressHex: "0x0000000000000000000000000000000000000000", DefaultBuilderGasLimit: uint64(30000000), // Mevboost circuit breaker MaxBuilderConsecutiveMissedSlots: 3, MaxBuilderEpochMissedSlots: 8, + + MaxBlobGasPerBlock: 786432, + MaxBlobsPerBlock: 6, } func mainnetConfig() BeaconChainConfig { @@ -776,18 +758,6 @@ func CustomConfig(configFile string) (BeaconChainConfig, error) { return cfg, err } -func ParseGenesisSSZToGenesisConfig(genesisFile string, genesisVersion StateVersion) (GenesisConfig, []byte, error) { - cfg := GenesisConfig{} - b, err := os.ReadFile(genesisFile) // just pass the file name - if err != nil { - return GenesisConfig{}, nil, err - } - // Read first 2 fields of SSZ - cfg.GenesisTime = ssz.UnmarshalUint64SSZ(b) - copy(cfg.GenesisValidatorRoot[:], b[8:]) - return cfg, b, nil -} - func sepoliaConfig() BeaconChainConfig { cfg := MainnetBeaconConfig cfg.MinGenesisTime = 1655647200 @@ -836,6 +806,45 @@ func goerliConfig() BeaconChainConfig { return cfg } +func holeskyConfig() BeaconChainConfig { + cfg := MainnetBeaconConfig + cfg.ConfigName = "holesky" + cfg.MinGenesisActiveValidatorCount = 16384 + cfg.MinGenesisTime = 1695902100 + cfg.GenesisForkVersion = 0x01017000 + cfg.GenesisDelay = 300 + cfg.SecondsPerSlot = 12 + cfg.Eth1FollowDistance = 2048 + cfg.DepositChainID = uint64(HoleskyNetwork) + cfg.DepositNetworkID = uint64(HoleskyNetwork) + + cfg.AltairForkEpoch = 0 + cfg.AltairForkVersion = 0x02017000 + cfg.BellatrixForkEpoch = 0 + cfg.BellatrixForkVersion = 0x03017000 + cfg.CapellaForkEpoch = 256 + cfg.CapellaForkVersion = 0x04017000 + cfg.DenebForkEpoch = 29696 + cfg.DenebForkVersion = 0x05017000 + cfg.TerminalTotalDifficulty = "0" + cfg.TerminalBlockHash = [32]byte{} + cfg.TerminalBlockHashActivationEpoch = math.MaxUint64 + cfg.DepositContractAddress = "0x4242424242424242424242424242424242424242" + cfg.BaseRewardFactor = 64 + cfg.SlotsPerEpoch = 32 + cfg.EpochsPerSyncCommitteePeriod = 256 + cfg.InactivityScoreBias = 4 + cfg.InactivityScoreRecoveryRate = 16 + cfg.EjectionBalance = 28000000000 + cfg.MinPerEpochChurnLimit = 4 + cfg.ChurnLimitQuotient = 1 << 16 + cfg.ProposerScoreBoost = 40 + + cfg.InitializeForkSchedule() + return cfg + +} + func gnosisConfig() BeaconChainConfig { cfg := MainnetBeaconConfig cfg.MinGenesisTime = 1638968400 @@ -860,10 +869,13 @@ func gnosisConfig() BeaconChainConfig { cfg.BaseRewardFactor = 25 cfg.SlotsPerEpoch = 16 cfg.EpochsPerSyncCommitteePeriod = 512 - cfg.DenebForkEpoch = math.MaxUint64 + cfg.DenebForkEpoch = 889856 + cfg.DenebForkVersion = 0x04000064 cfg.InactivityScoreRecoveryRate = 16 cfg.InactivityScoreBias = 4 cfg.MaxWithdrawalsPerPayload = 8 + cfg.MaxValidatorsPerWithdrawalsSweep = 8192 + cfg.MaxPerEpochActivationChurnLimit = 2 cfg.InitializeForkSchedule() return cfg } @@ -894,6 +906,7 @@ func chiadoConfig() BeaconChainConfig { cfg.BaseRewardFactor = 25 cfg.SlotsPerEpoch = 16 cfg.EpochsPerSyncCommitteePeriod = 512 + cfg.MaxPerEpochActivationChurnLimit = 2 cfg.InitializeForkSchedule() return cfg } @@ -937,6 +950,7 @@ var BeaconConfigs map[NetworkType]BeaconChainConfig = map[NetworkType]BeaconChai MainnetNetwork: mainnetConfig(), SepoliaNetwork: sepoliaConfig(), GoerliNetwork: goerliConfig(), + HoleskyNetwork: holeskyConfig(), GnosisNetwork: gnosisConfig(), ChiadoNetwork: chiadoConfig(), } @@ -964,15 +978,15 @@ func (b *BeaconChainConfig) CurrentEpochAttestationsLength() uint64 { func (b *BeaconChainConfig) GetForkVersionByVersion(v StateVersion) uint32 { switch v { case Phase0Version: - return b.GenesisForkVersion + return uint32(b.GenesisForkVersion) case AltairVersion: - return b.AltairForkVersion + return uint32(b.AltairForkVersion) case BellatrixVersion: - return b.BellatrixForkVersion + return uint32(b.BellatrixForkVersion) case CapellaVersion: - return b.CapellaForkVersion + return uint32(b.CapellaForkVersion) case DenebVersion: - return b.DenebForkVersion + return uint32(b.DenebForkVersion) } panic("invalid version") } @@ -993,32 +1007,34 @@ func (b *BeaconChainConfig) GetForkEpochByVersion(v StateVersion) uint64 { panic("invalid version") } -func GetConfigsByNetwork(net NetworkType) (*GenesisConfig, *NetworkConfig, *BeaconChainConfig) { +func GetConfigsByNetwork(net NetworkType) (*NetworkConfig, *BeaconChainConfig) { networkConfig := NetworkConfigs[net] - genesisConfig := GenesisConfigs[net] beaconConfig := BeaconConfigs[net] - return &genesisConfig, &networkConfig, &beaconConfig + return &networkConfig, &beaconConfig } -func GetConfigsByNetworkName(net string) (*GenesisConfig, *NetworkConfig, *BeaconChainConfig, NetworkType, error) { +func GetConfigsByNetworkName(net string) (*NetworkConfig, *BeaconChainConfig, NetworkType, error) { switch net { case networkname.MainnetChainName: - genesisCfg, networkCfg, beaconCfg := GetConfigsByNetwork(MainnetNetwork) - return genesisCfg, networkCfg, beaconCfg, MainnetNetwork, nil + networkCfg, beaconCfg := GetConfigsByNetwork(MainnetNetwork) + return networkCfg, beaconCfg, MainnetNetwork, nil case networkname.GoerliChainName: - genesisCfg, networkCfg, beaconCfg := GetConfigsByNetwork(GoerliNetwork) - return genesisCfg, networkCfg, beaconCfg, GoerliNetwork, nil + networkCfg, beaconCfg := GetConfigsByNetwork(GoerliNetwork) + return networkCfg, beaconCfg, GoerliNetwork, nil case networkname.SepoliaChainName: - genesisCfg, networkCfg, beaconCfg := GetConfigsByNetwork(SepoliaNetwork) - return genesisCfg, networkCfg, beaconCfg, SepoliaNetwork, nil + networkCfg, beaconCfg := GetConfigsByNetwork(SepoliaNetwork) + return networkCfg, beaconCfg, SepoliaNetwork, nil case networkname.GnosisChainName: - genesisCfg, networkCfg, beaconCfg := GetConfigsByNetwork(GnosisNetwork) - return genesisCfg, networkCfg, beaconCfg, GnosisNetwork, nil + networkCfg, beaconCfg := GetConfigsByNetwork(GnosisNetwork) + return networkCfg, beaconCfg, GnosisNetwork, nil case networkname.ChiadoChainName: - genesisCfg, networkCfg, beaconCfg := GetConfigsByNetwork(ChiadoNetwork) - return genesisCfg, networkCfg, beaconCfg, ChiadoNetwork, nil + networkCfg, beaconCfg := GetConfigsByNetwork(ChiadoNetwork) + return networkCfg, beaconCfg, ChiadoNetwork, nil + case networkname.HoleskyChainName: + networkCfg, beaconCfg := GetConfigsByNetwork(HoleskyNetwork) + return networkCfg, beaconCfg, HoleskyNetwork, nil default: - return nil, nil, nil, MainnetNetwork, fmt.Errorf("chain not found") + return nil, nil, MainnetNetwork, fmt.Errorf("chain not found") } } @@ -1046,6 +1062,7 @@ func GetCheckpointSyncEndpoint(net NetworkType) string { func EmbeddedSupported(id uint64) bool { return id == 1 || id == 5 || + id == 17000 || id == 11155111 || id == 100 // || //id == 10200 diff --git a/cl/clparams/config_test.go b/cl/clparams/config_test.go index a5c5112c4c9..c9ab9b30d09 100644 --- a/cl/clparams/config_test.go +++ b/cl/clparams/config_test.go @@ -20,9 +20,8 @@ import ( ) func testConfig(t *testing.T, n NetworkType) { - genesis, network, beacon := GetConfigsByNetwork(n) + network, beacon := GetConfigsByNetwork(n) - require.Equal(t, *genesis, GenesisConfigs[n]) require.Equal(t, *network, NetworkConfigs[n]) require.Equal(t, *beacon, BeaconConfigs[n]) } diff --git a/cl/clparams/initial_state/initial_state.go b/cl/clparams/initial_state/initial_state.go index 3f15c23dc1f..e845dd175c9 100644 --- a/cl/clparams/initial_state/initial_state.go +++ b/cl/clparams/initial_state/initial_state.go @@ -16,7 +16,7 @@ var sepoliaStateSSZ []byte // Return genesis state func GetGenesisState(network clparams.NetworkType) (*state.CachingBeaconState, error) { - _, _, config := clparams.GetConfigsByNetwork(network) + _, config := clparams.GetConfigsByNetwork(network) returnState := state.New(config) switch network { diff --git a/cl/clparams/version.go b/cl/clparams/version.go index 72884406fdd..c181337e337 100644 --- a/cl/clparams/version.go +++ b/cl/clparams/version.go @@ -1,5 +1,7 @@ package clparams +import "fmt" + type StateVersion uint8 const ( @@ -11,20 +13,20 @@ const ( ) // stringToClVersion converts the string to the current state version. -func StringToClVersion(s string) StateVersion { +func StringToClVersion(s string) (StateVersion, error) { switch s { case "phase0": - return Phase0Version + return Phase0Version, nil case "altair": - return AltairVersion + return AltairVersion, nil case "bellatrix": - return BellatrixVersion + return BellatrixVersion, nil case "capella": - return CapellaVersion + return CapellaVersion, nil case "deneb": - return DenebVersion + return DenebVersion, nil default: - panic("unsupported fork version: " + s) + return 0, fmt.Errorf("unsupported fork version %s", s) } } diff --git a/cl/clstages/clstages.go b/cl/clstages/clstages.go index 543de4b038d..7769b3ed783 100644 --- a/cl/clstages/clstages.go +++ b/cl/clstages/clstages.go @@ -45,7 +45,7 @@ func (s *StageGraph[CONFIG, ARGUMENTS]) StartWithStage(ctx context.Context, star err := <-errch dur := time.Since(start) if err != nil { - if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { + if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) || err.Error() == "timeout waiting for blocks" { lg.Debug("error executing clstage", "err", err) } else { lg.Warn("error executing clstage", "err", err) diff --git a/cl/cltypes/aggregate.go b/cl/cltypes/aggregate.go index 5819b6f323c..8efc4b2e8b4 100644 --- a/cl/cltypes/aggregate.go +++ b/cl/cltypes/aggregate.go @@ -61,12 +61,12 @@ func (a *SignedAggregateAndProof) HashSSZ() ([32]byte, error) { } /* - * SyncAggregate, Determines successfull committee, bits shows active participants, + * SyncAggregate, Determines successful committee, bits shows active participants, * and signature is the aggregate BLS signature of the committee. */ type SyncAggregate struct { SyncCommiteeBits libcommon.Bytes64 `json:"sync_committee_bits"` - SyncCommiteeSignature libcommon.Bytes96 `json:"signature"` + SyncCommiteeSignature libcommon.Bytes96 `json:"sync_committee_signature"` } // return sum of the committee bits diff --git a/cl/cltypes/beacon_block.go b/cl/cltypes/beacon_block.go index d9763803706..cfaa4ed8f67 100644 --- a/cl/cltypes/beacon_block.go +++ b/cl/cltypes/beacon_block.go @@ -1,6 +1,7 @@ package cltypes import ( + "encoding/json" "fmt" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -57,7 +58,7 @@ type BeaconBody struct { // Data related to crosslink records and executing operations on the Ethereum 2.0 chain ExecutionPayload *Eth1Block `json:"execution_payload,omitempty"` // Withdrawals Diffs for Execution Layer - ExecutionChanges *solid.ListSSZ[*SignedBLSToExecutionChange] `json:"execution_changes,omitempty"` + ExecutionChanges *solid.ListSSZ[*SignedBLSToExecutionChange] `json:"bls_to_execution_changes,omitempty"` // The commitments for beacon chain blobs // With a max of 4 per block BlobKzgCommitments *solid.ListSSZ[*KZGCommitment] `json:"blob_kzg_commitments,omitempty"` @@ -120,7 +121,16 @@ func (b *BeaconBlock) Blinded() (*BlindedBeaconBlock, error) { func NewBeaconBody(beaconCfg *clparams.BeaconChainConfig) *BeaconBody { return &BeaconBody{ - beaconCfg: beaconCfg, + beaconCfg: beaconCfg, + Eth1Data: &Eth1Data{}, + ProposerSlashings: solid.NewStaticListSSZ[*ProposerSlashing](MaxProposerSlashings, 416), + AttesterSlashings: solid.NewDynamicListSSZ[*AttesterSlashing](MaxAttesterSlashings), + Attestations: solid.NewDynamicListSSZ[*solid.Attestation](MaxAttestations), + Deposits: solid.NewStaticListSSZ[*Deposit](MaxDeposits, 1240), + VoluntaryExits: solid.NewStaticListSSZ[*SignedVoluntaryExit](MaxVoluntaryExits, 112), + ExecutionPayload: NewEth1Block(clparams.Phase0Version, beaconCfg), + ExecutionChanges: solid.NewStaticListSSZ[*SignedBLSToExecutionChange](MaxExecutionChanges, 172), + BlobKzgCommitments: solid.NewStaticListSSZ[*KZGCommitment](MaxBlobsCommittmentsPerBlock, 48), } } @@ -146,9 +156,7 @@ func (b *BeaconBody) EncodingSizeSSZ() (size int) { if b.SyncAggregate == nil { b.SyncAggregate = &SyncAggregate{} } - if b.ExecutionPayload == nil { - b.ExecutionPayload = NewEth1Block(b.Version, b.beaconCfg) - } + if b.ProposerSlashings == nil { b.ProposerSlashings = solid.NewStaticListSSZ[*ProposerSlashing](MaxProposerSlashings, 416) } @@ -297,3 +305,57 @@ func (*BeaconBlock) Static() bool { func (b *BeaconBody) ExecutionPayloadMerkleProof() ([][32]byte, error) { return merkle_tree.MerkleProof(4, 9, b.getSchema(false)...) } + +func (b *BeaconBody) KzgCommitmentMerkleProof(index int) ([][32]byte, error) { + if index >= b.BlobKzgCommitments.Len() { + return nil, fmt.Errorf("index out of range") + } + kzgCommitmentsProof, err := merkle_tree.MerkleProof(4, 11, b.getSchema(false)...) + if err != nil { + return nil, err + } + branch := b.BlobKzgCommitments.ElementProof(index) + return append(branch, kzgCommitmentsProof...), nil +} + +func (b *BeaconBody) UnmarshalJSON(buf []byte) error { + var tmp struct { + RandaoReveal libcommon.Bytes96 `json:"randao_reveal"` + Eth1Data *Eth1Data `json:"eth1_data"` + Graffiti libcommon.Hash `json:"graffiti"` + ProposerSlashings *solid.ListSSZ[*ProposerSlashing] `json:"proposer_slashings"` + AttesterSlashings *solid.ListSSZ[*AttesterSlashing] `json:"attester_slashings"` + Attestations *solid.ListSSZ[*solid.Attestation] `json:"attestations"` + Deposits *solid.ListSSZ[*Deposit] `json:"deposits"` + VoluntaryExits *solid.ListSSZ[*SignedVoluntaryExit] `json:"voluntary_exits"` + SyncAggregate *SyncAggregate `json:"sync_aggregate,omitempty"` + ExecutionPayload *Eth1Block `json:"execution_payload,omitempty"` + ExecutionChanges *solid.ListSSZ[*SignedBLSToExecutionChange] `json:"bls_to_execution_changes,omitempty"` + BlobKzgCommitments *solid.ListSSZ[*KZGCommitment] `json:"blob_kzg_commitments,omitempty"` + } + tmp.ProposerSlashings = solid.NewStaticListSSZ[*ProposerSlashing](MaxProposerSlashings, 416) + tmp.AttesterSlashings = solid.NewDynamicListSSZ[*AttesterSlashing](MaxAttesterSlashings) + tmp.Attestations = solid.NewDynamicListSSZ[*solid.Attestation](MaxAttestations) + tmp.Deposits = solid.NewStaticListSSZ[*Deposit](MaxDeposits, 1240) + tmp.VoluntaryExits = solid.NewStaticListSSZ[*SignedVoluntaryExit](MaxVoluntaryExits, 112) + tmp.ExecutionChanges = solid.NewStaticListSSZ[*SignedBLSToExecutionChange](MaxExecutionChanges, 172) + tmp.BlobKzgCommitments = solid.NewStaticListSSZ[*KZGCommitment](MaxBlobsCommittmentsPerBlock, 48) + tmp.ExecutionPayload = NewEth1Block(b.Version, b.beaconCfg) + + if err := json.Unmarshal(buf, &tmp); err != nil { + return err + } + b.RandaoReveal = tmp.RandaoReveal + b.Eth1Data = tmp.Eth1Data + b.Graffiti = tmp.Graffiti + b.ProposerSlashings = tmp.ProposerSlashings + b.AttesterSlashings = tmp.AttesterSlashings + b.Attestations = tmp.Attestations + b.Deposits = tmp.Deposits + b.VoluntaryExits = tmp.VoluntaryExits + b.SyncAggregate = tmp.SyncAggregate + b.ExecutionPayload = tmp.ExecutionPayload + b.ExecutionChanges = tmp.ExecutionChanges + b.BlobKzgCommitments = tmp.BlobKzgCommitments + return nil +} diff --git a/cl/cltypes/beacon_block_test.go b/cl/cltypes/beacon_block_test.go index 6a20827e3fe..ae9c18347c1 100644 --- a/cl/cltypes/beacon_block_test.go +++ b/cl/cltypes/beacon_block_test.go @@ -1,6 +1,8 @@ package cltypes import ( + _ "embed" + "encoding/json" "math/big" "testing" @@ -10,8 +12,15 @@ import ( "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/core/types" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) +//go:embed testdata/block_test_gnosis_deneb.json +var beaconBodyJSON []byte + +//go:embed testdata/block_test_gnosis_deneb.ssz +var beaconBodySSZ []byte + func TestBeaconBody(t *testing.T) { // Create sample data randaoReveal := [96]byte{1, 2, 3} @@ -85,3 +94,29 @@ func TestBeaconBody(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, b) } + +func TestBeaconBlockJson(t *testing.T) { + _, bc := clparams.GetConfigsByNetwork(clparams.GnosisNetwork) + block := NewSignedBeaconBlock(bc) + block.Block.Body.Version = clparams.DenebVersion + err := json.Unmarshal(beaconBodyJSON, block) + require.NoError(t, err) + map1 := make(map[string]interface{}) + map2 := make(map[string]interface{}) + err = json.Unmarshal(beaconBodyJSON, &map1) + require.NoError(t, err) + out, err := json.Marshal(block) + require.NoError(t, err) + err = json.Unmarshal(out, &map2) + require.NoError(t, err) + + r, _ := block.Block.HashSSZ() + + block2 := NewSignedBeaconBlock(bc) + if err := block2.DecodeSSZ(beaconBodySSZ, int(clparams.DenebVersion)); err != nil { + t.Fatal(err) + } + + assert.Equal(t, map1, map2) + assert.Equal(t, libcommon.Hash(r), libcommon.HexToHash("0x1a9b89eb12282543a5fa0b0f251d8ec0c5c432121d7cb2a8d78461ea9d10c294")) +} diff --git a/cl/cltypes/beacon_committee_subscriptions.go b/cl/cltypes/beacon_committee_subscriptions.go new file mode 100644 index 00000000000..16c67e67817 --- /dev/null +++ b/cl/cltypes/beacon_committee_subscriptions.go @@ -0,0 +1,9 @@ +package cltypes + +type BeaconCommitteeSubscription struct { + ValidatorIndex uint64 `json:"validator_index,string"` + CommitteeIndex uint64 `json:"committee_index,string"` + CommitteesAtSlot uint64 `json:"committees_at_slot,string"` + Slot uint64 `json:"slot,string"` + IsAggregator bool `json:"is_aggregator"` +} diff --git a/cl/cltypes/beacon_kzgcommitment.go b/cl/cltypes/beacon_kzgcommitment.go index f6a5d5f38f1..6a1fec24a55 100644 --- a/cl/cltypes/beacon_kzgcommitment.go +++ b/cl/cltypes/beacon_kzgcommitment.go @@ -2,13 +2,20 @@ package cltypes import ( "encoding/json" + "reflect" gokzg4844 "github.com/crate-crypto/go-kzg-4844" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutility" + "github.com/ledgerwatch/erigon-lib/types/clonable" "github.com/ledgerwatch/erigon/cl/merkle_tree" ssz2 "github.com/ledgerwatch/erigon/cl/ssz" ) +var ( + blobT = reflect.TypeOf(Blob{}) +) + type Blob gokzg4844.Blob type KZGProof gokzg4844.KZGProof // [48]byte @@ -47,3 +54,32 @@ func (b *KZGCommitment) EncodingSizeSSZ() int { func (b *KZGCommitment) HashSSZ() ([32]byte, error) { return merkle_tree.BytesRoot(b[:]) } + +func (b *Blob) MarshalJSON() ([]byte, error) { + return json.Marshal(hexutility.Bytes(b[:])) +} + +func (b *Blob) UnmarshalJSON(in []byte) error { + return hexutility.UnmarshalFixedJSON(blobT, in, b[:]) +} + +func (b *Blob) Clone() clonable.Clonable { + return &Blob{} +} + +func (b *Blob) DecodeSSZ(buf []byte, version int) error { + copy(b[:], buf) + return nil +} + +func (b *Blob) EncodeSSZ(buf []byte) ([]byte, error) { + return append(buf, b[:]...), nil +} + +func (b *Blob) EncodingSizeSSZ() int { + return len(b[:]) +} + +func (b *Blob) HashSSZ() ([32]byte, error) { + return merkle_tree.BytesRoot(b[:]) +} diff --git a/cl/cltypes/blob_sidecar.go b/cl/cltypes/blob_sidecar.go new file mode 100644 index 00000000000..b1f5edd65e3 --- /dev/null +++ b/cl/cltypes/blob_sidecar.go @@ -0,0 +1,163 @@ +package cltypes + +import ( + "encoding/json" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/types/clonable" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/merkle_tree" + ssz2 "github.com/ledgerwatch/erigon/cl/ssz" + "github.com/ledgerwatch/erigon/cl/utils" +) + +const CommitmentBranchSize = 17 + +type BlobSidecar struct { + Index uint64 `json:"index,string"` + Blob Blob `json:"blob"` // define byte vector of 4096 * 32 bytes + KzgCommitment libcommon.Bytes48 `json:"kzg_commitment"` + KzgProof libcommon.Bytes48 `json:"kzg_proof"` + SignedBlockHeader *SignedBeaconBlockHeader `json:"signed_block_header"` + CommitmentInclusionProof solid.HashVectorSSZ `json:"proof"` +} + +func NewBlobSidecar(index uint64, blob *Blob, kzgCommitment libcommon.Bytes48, kzgProof libcommon.Bytes48, signedBlockHeader *SignedBeaconBlockHeader, commitmentInclusionProof solid.HashVectorSSZ) *BlobSidecar { + return &BlobSidecar{ + Index: index, + Blob: *blob, + KzgCommitment: kzgCommitment, + KzgProof: kzgProof, + SignedBlockHeader: signedBlockHeader, + CommitmentInclusionProof: commitmentInclusionProof, + } +} + +func (b *BlobSidecar) EncodeSSZ(buf []byte) ([]byte, error) { + return ssz2.MarshalSSZ(buf, b.getSchema()...) +} + +func (b *BlobSidecar) UnmarshalJSON(buf []byte) error { + var tmp struct { + Index uint64 `json:"index,string"` + Blob *Blob `json:"blob"` + KzgCommitment libcommon.Bytes48 `json:"kzg_commitment"` + KzgProof libcommon.Bytes48 `json:"kzg_proof"` + SignedBlockHeader *SignedBeaconBlockHeader `json:"signed_block_header"` + CommitmentInclusionProof solid.HashVectorSSZ `json:"proof"` + } + tmp.Blob = &Blob{} + tmp.CommitmentInclusionProof = solid.NewHashVector(CommitmentBranchSize) + if err := json.Unmarshal(buf, &tmp); err != nil { + return err + } + b.Index = tmp.Index + b.Blob = *tmp.Blob + b.KzgCommitment = tmp.KzgCommitment + b.KzgProof = tmp.KzgProof + b.SignedBlockHeader = tmp.SignedBlockHeader + b.CommitmentInclusionProof = tmp.CommitmentInclusionProof + return nil +} + +func (b *BlobSidecar) EncodingSizeSSZ() int { + return length.BlockNum + 4096*32 + length.Bytes48 + length.Bytes48 + CommitmentBranchSize*length.Hash + length.Bytes96 + length.Hash*3 + length.BlockNum*2 +} + +func (b *BlobSidecar) DecodeSSZ(buf []byte, version int) error { + b.CommitmentInclusionProof = solid.NewHashVector(CommitmentBranchSize) + b.SignedBlockHeader = &SignedBeaconBlockHeader{} + return ssz2.UnmarshalSSZ(buf, version, b.getSchema()...) +} + +func (b *BlobSidecar) HashSSZ() ([32]byte, error) { + return merkle_tree.HashTreeRoot(b.getSchema()...) +} + +func (b *BlobSidecar) Clone() clonable.Clonable { + blob := &Blob{} + return NewBlobSidecar(b.Index, blob, b.KzgCommitment, b.KzgProof, b.SignedBlockHeader, b.CommitmentInclusionProof) +} + +func (b *BlobSidecar) getSchema() []interface{} { + s := []interface{}{&b.Index, b.Blob[:], b.KzgCommitment[:], b.KzgProof[:]} + if b.SignedBlockHeader != nil { + s = append(s, b.SignedBlockHeader) + } + if b.CommitmentInclusionProof != nil { + s = append(s, b.CommitmentInclusionProof) + } + return s +} + +type BlobIdentifier struct { + BlockRoot libcommon.Hash `json:"block_root"` + Index uint64 `json:"index,string"` +} + +func NewBlobIdentifier(blockRoot libcommon.Hash, index uint64) *BlobIdentifier { + return &BlobIdentifier{ + BlockRoot: blockRoot, + Index: index, + } +} + +func (b *BlobIdentifier) EncodeSSZ(buf []byte) ([]byte, error) { + return ssz2.MarshalSSZ(buf, b.getSchema()...) +} + +func (b *BlobIdentifier) EncodingSizeSSZ() int { + return 32 + 8 +} + +func (b *BlobIdentifier) DecodeSSZ(buf []byte, version int) error { + return ssz2.UnmarshalSSZ(buf, version, b.getSchema()...) +} + +func (b *BlobIdentifier) HashSSZ() ([32]byte, error) { + return merkle_tree.HashTreeRoot(b.getSchema()...) +} + +func (*BlobIdentifier) Clone() clonable.Clonable { + return &BlobIdentifier{} +} + +func (b *BlobIdentifier) getSchema() []interface{} { + return []interface{}{ + b.BlockRoot[:], + &b.Index, + } +} + +func VerifyCommitmentInclusionProof(commitment libcommon.Bytes48, commitmentInclusionProof solid.HashVectorSSZ, commitmentIndex uint64, version clparams.StateVersion, bodyRoot [32]byte) bool { + // Initialize the merkle tree leaf + value, err := merkle_tree.HashTreeRoot(commitment[:]) + if err != nil { + return false + } + bodyDepth := 4 + commitmentsDepth := uint64(13) // log2(4096) + 1 = 13 + bIndex := uint64(11) + + // Start by constructing the commitments subtree + for i := uint64(0); i < commitmentsDepth; i++ { + curr := commitmentInclusionProof.Get(int(i)) + if (commitmentIndex / utils.PowerOf2(i) % 2) == 1 { + value = utils.Sha256(append(curr[:], value[:]...)) + } else { + value = utils.Sha256(append(value[:], curr[:]...)) + } + } + // Construct up the block giga tree + for i := uint64(0); i < uint64(bodyDepth); i++ { + curr := commitmentInclusionProof.Get(int(i + commitmentsDepth)) + if (bIndex / utils.PowerOf2(i) % 2) == 1 { + value = utils.Sha256(append(curr[:], value[:]...)) + } else { + value = utils.Sha256(append(value[:], curr[:]...)) + } + } + return value == bodyRoot +} diff --git a/cl/cltypes/clone.go b/cl/cltypes/clone.go index 4b6da3b71b9..99b5840bb3f 100644 --- a/cl/cltypes/clone.go +++ b/cl/cltypes/clone.go @@ -5,7 +5,9 @@ import ( ) func (s *SignedBeaconBlock) Clone() clonable.Clonable { - return NewSignedBeaconBlock(s.Block.Body.beaconCfg) + other := NewSignedBeaconBlock(s.Block.Body.beaconCfg) + other.Block.Body.Version = s.Block.Body.Version + return other } func (*IndexedAttestation) Clone() clonable.Clonable { @@ -13,7 +15,9 @@ func (*IndexedAttestation) Clone() clonable.Clonable { } func (b *BeaconBody) Clone() clonable.Clonable { - return NewBeaconBody(b.beaconCfg) + other := NewBeaconBody(b.beaconCfg) + other.Version = b.Version + return other } func (e *Eth1Block) Clone() clonable.Clonable { @@ -73,7 +77,9 @@ func (*Deposit) Clone() clonable.Clonable { } func (b *BeaconBlock) Clone() clonable.Clonable { - return NewBeaconBlock(b.Body.beaconCfg) + other := NewBeaconBlock(b.Body.beaconCfg) + other.Body.Version = b.Body.Version + return other } func (*AggregateAndProof) Clone() clonable.Clonable { @@ -107,3 +113,23 @@ func (*Eth1Header) Clone() clonable.Clonable { func (*Withdrawal) Clone() clonable.Clonable { return &Withdrawal{} } + +func (s *SignedContributionAndProof) Clone() clonable.Clonable { + return &SignedContributionAndProof{} +} + +func (s *ContributionAndProof) Clone() clonable.Clonable { + return &ContributionAndProof{} +} + +func (s *Contribution) Clone() clonable.Clonable { + return &Contribution{} +} + +func (*Root) Clone() clonable.Clonable { + return &Root{} +} + +func (*LightClientUpdatesByRangeRequest) Clone() clonable.Clonable { + return &LightClientUpdatesByRangeRequest{} +} diff --git a/cl/cltypes/contribution.go b/cl/cltypes/contribution.go index a64ea8b10c3..e6d184185b6 100644 --- a/cl/cltypes/contribution.go +++ b/cl/cltypes/contribution.go @@ -2,36 +2,41 @@ package cltypes import ( libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon-lib/common/hexutility" + "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/types/clonable" "github.com/ledgerwatch/erigon/cl/merkle_tree" ssz2 "github.com/ledgerwatch/erigon/cl/ssz" ) +var _ ssz2.SizedObjectSSZ = (*ContributionAndProof)(nil) +var _ ssz2.SizedObjectSSZ = (*Contribution)(nil) + /* * ContributionAndProof contains the index of the aggregator, the attestation * to be aggregated and the BLS signature of the attestation. */ type ContributionAndProof struct { - AggregatorIndex uint64 `json:"aggregator_index,string"` - SelectionProof libcommon.Bytes96 `json:"selection_proof"` - Contribution *solid.Contribution `json:"contribution"` + AggregatorIndex uint64 `json:"aggregator_index,string"` + Contribution *Contribution `json:"contribution"` + SelectionProof libcommon.Bytes96 `json:"selection_proof"` } func (a *ContributionAndProof) EncodeSSZ(dst []byte) ([]byte, error) { - return ssz2.MarshalSSZ(dst, a.AggregatorIndex, a.Contribution, a.SelectionProof[:]) + return ssz2.MarshalSSZ(dst, &a.AggregatorIndex, a.Contribution, a.SelectionProof[:]) } func (a *ContributionAndProof) Static() bool { - return false + return true } func (a *ContributionAndProof) DecodeSSZ(buf []byte, version int) error { - a.Contribution = new(solid.Contribution) + a.Contribution = new(Contribution) return ssz2.UnmarshalSSZ(buf, version, &a.AggregatorIndex, a.Contribution, a.SelectionProof[:]) } func (a *ContributionAndProof) EncodingSizeSSZ() int { - return 108 + a.Contribution.EncodingSizeSSZ() + return length.BlockNum + length.Bytes96 + a.Contribution.EncodingSizeSSZ() } func (a *ContributionAndProof) HashSSZ() ([32]byte, error) { @@ -49,19 +54,67 @@ func (a *SignedContributionAndProof) EncodeSSZ(dst []byte) ([]byte, error) { func (a *SignedContributionAndProof) DecodeSSZ(buf []byte, version int) error { a.Message = new(ContributionAndProof) + a.Message.Contribution = new(Contribution) return ssz2.UnmarshalSSZ(buf, version, a.Message, a.Signature[:]) } func (a *SignedContributionAndProof) EncodingSizeSSZ() int { - return 100 + a.Message.EncodingSizeSSZ() + return length.Bytes96 + a.Message.EncodingSizeSSZ() + // return 100 + a.Message.EncodingSizeSSZ() } func (a *SignedContributionAndProof) HashSSZ() ([32]byte, error) { return merkle_tree.HashTreeRoot(a.Message, a.Signature[:]) } +var SyncCommitteeAggregationBitsSize = 16 + +type Contribution struct { + Slot uint64 `json:"slot,string"` + BeaconBlockRoot libcommon.Hash `json:"beacon_block_root"` + SubcommitteeIndex uint64 `json:"subcommittee_index,string"` + AggregationBits hexutility.Bytes `json:"aggregation_bits"` + Signature libcommon.Bytes96 `json:"signature"` +} + +type ContributionKey struct { + Slot uint64 `json:"slot,string"` + BeaconBlockRoot libcommon.Hash `json:"beacon_block_root"` + SubcommitteeIndex uint64 `json:"subcommittee_index,string"` +} + +func (a *Contribution) EncodeSSZ(dst []byte) ([]byte, error) { + if len(a.AggregationBits) == 0 { + a.AggregationBits = make([]byte, SyncCommitteeAggregationBitsSize) + } + return ssz2.MarshalSSZ(dst, &a.Slot, a.BeaconBlockRoot[:], &a.SubcommitteeIndex, []byte(a.AggregationBits), a.Signature[:]) +} + +func (a *Contribution) Static() bool { + return true +} + +func (a *Contribution) Copy() *Contribution { + ret := *a + ret.AggregationBits = append([]byte{}, a.AggregationBits...) + return &ret +} + +func (a *Contribution) DecodeSSZ(buf []byte, version int) error { + a.AggregationBits = make([]byte, SyncCommitteeAggregationBitsSize) + return ssz2.UnmarshalSSZ(buf, version, &a.Slot, a.BeaconBlockRoot[:], &a.SubcommitteeIndex, []byte(a.AggregationBits), a.Signature[:]) +} + +func (a *Contribution) EncodingSizeSSZ() int { + return length.BlockNum*2 + length.Hash + length.Bytes96 + len(a.AggregationBits) +} + +func (a *Contribution) HashSSZ() ([32]byte, error) { + return merkle_tree.HashTreeRoot(&a.Slot, a.BeaconBlockRoot[:], &a.SubcommitteeIndex, []byte(a.AggregationBits), a.Signature[:]) +} + /* - * SyncContribution, Determines successfull committee, bits shows active participants, + * SyncContribution, Determines successful committee, bits shows active participants, * and signature is the aggregate BLS signature of the committee. */ type SyncContribution struct { @@ -109,3 +162,34 @@ func (agg *SyncContribution) HashSSZ() ([32]byte, error) { return merkle_tree.HashTreeRoot(agg.SyncCommiteeBits[:], agg.SyncCommiteeSignature[:]) } + +type SyncCommitteeMessage struct { + Slot uint64 `json:"slot,string"` + BeaconBlockRoot libcommon.Hash `json:"beacon_block_root"` + ValidatorIndex uint64 `json:"validator_index,string"` + Signature libcommon.Bytes96 `json:"signature"` +} + +func (a *SyncCommitteeMessage) EncodeSSZ(dst []byte) ([]byte, error) { + return ssz2.MarshalSSZ(dst, &a.Slot, a.BeaconBlockRoot[:], &a.ValidatorIndex, a.Signature[:]) +} + +func (a *SyncCommitteeMessage) DecodeSSZ(buf []byte, version int) error { + return ssz2.UnmarshalSSZ(buf, version, &a.Slot, a.BeaconBlockRoot[:], &a.ValidatorIndex, a.Signature[:]) +} + +func (a *SyncCommitteeMessage) EncodingSizeSSZ() int { + return 144 +} + +func (a *SyncCommitteeMessage) HashSSZ() ([32]byte, error) { + return merkle_tree.HashTreeRoot(&a.Slot, a.BeaconBlockRoot[:], &a.ValidatorIndex, a.Signature[:]) +} + +func (a *SyncCommitteeMessage) Static() bool { + return true +} + +func (*SyncCommitteeMessage) Clone() clonable.Clonable { + return &SyncCommitteeMessage{} +} diff --git a/cl/cltypes/eth1_block.go b/cl/cltypes/eth1_block.go index 67f54233f42..4c311f44a2f 100644 --- a/cl/cltypes/eth1_block.go +++ b/cl/cltypes/eth1_block.go @@ -1,15 +1,18 @@ package cltypes import ( + "encoding/json" "fmt" "math/big" + "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/merkle_tree" ssz2 "github.com/ledgerwatch/erigon/cl/ssz" + "github.com/ledgerwatch/erigon/cl/utils" "github.com/ledgerwatch/erigon/consensus/merge" "github.com/ledgerwatch/erigon/core/types" ) @@ -32,8 +35,8 @@ type Eth1Block struct { BlockHash libcommon.Hash `json:"block_hash"` Transactions *solid.TransactionsSSZ `json:"transactions"` Withdrawals *solid.ListSSZ[*Withdrawal] `json:"withdrawals,omitempty"` - BlobGasUsed uint64 `json:"blob_gas_used,omitempty,string"` - ExcessBlobGas uint64 `json:"excess_blob_gas,omitempty,string"` + BlobGasUsed uint64 `json:"blob_gas_used,string"` + ExcessBlobGas uint64 `json:"excess_blob_gas,string"` // internals version clparams.StateVersion beaconCfg *clparams.BeaconChainConfig @@ -90,6 +93,96 @@ func (*Eth1Block) Static() bool { return false } +func (b *Eth1Block) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + ParentHash libcommon.Hash `json:"parent_hash"` + FeeRecipient libcommon.Address `json:"fee_recipient"` + StateRoot libcommon.Hash `json:"state_root"` + ReceiptsRoot libcommon.Hash `json:"receipts_root"` + LogsBloom types.Bloom `json:"logs_bloom"` + PrevRandao libcommon.Hash `json:"prev_randao"` + BlockNumber uint64 `json:"block_number,string"` + GasLimit uint64 `json:"gas_limit,string"` + GasUsed uint64 `json:"gas_used,string"` + Time uint64 `json:"timestamp,string"` + Extra *solid.ExtraData `json:"extra_data"` + BaseFeePerGas string `json:"base_fee_per_gas"` + BlockHash libcommon.Hash `json:"block_hash"` + Transactions *solid.TransactionsSSZ `json:"transactions"` + Withdrawals *solid.ListSSZ[*Withdrawal] `json:"withdrawals,omitempty"` + BlobGasUsed uint64 `json:"blob_gas_used,string"` + ExcessBlobGas uint64 `json:"excess_blob_gas,string"` + }{ + ParentHash: b.ParentHash, + FeeRecipient: b.FeeRecipient, + StateRoot: b.StateRoot, + ReceiptsRoot: b.ReceiptsRoot, + LogsBloom: b.LogsBloom, + PrevRandao: b.PrevRandao, + BlockNumber: b.BlockNumber, + GasLimit: b.GasLimit, + GasUsed: b.GasUsed, + Time: b.Time, + Extra: b.Extra, + BaseFeePerGas: uint256.NewInt(0).SetBytes32(utils.ReverseOfByteSlice(b.BaseFeePerGas[:])).Dec(), + BlockHash: b.BlockHash, + Transactions: b.Transactions, + Withdrawals: b.Withdrawals, + BlobGasUsed: b.BlobGasUsed, + ExcessBlobGas: b.ExcessBlobGas, + }) +} + +func (b *Eth1Block) UnmarshalJSON(data []byte) error { + var aux struct { + ParentHash libcommon.Hash `json:"parent_hash"` + FeeRecipient libcommon.Address `json:"fee_recipient"` + StateRoot libcommon.Hash `json:"state_root"` + ReceiptsRoot libcommon.Hash `json:"receipts_root"` + LogsBloom types.Bloom `json:"logs_bloom"` + PrevRandao libcommon.Hash `json:"prev_randao"` + BlockNumber uint64 `json:"block_number,string"` + GasLimit uint64 `json:"gas_limit,string"` + GasUsed uint64 `json:"gas_used,string"` + Time uint64 `json:"timestamp,string"` + Extra *solid.ExtraData `json:"extra_data"` + BaseFeePerGas string `json:"base_fee_per_gas"` + BlockHash libcommon.Hash `json:"block_hash"` + Transactions *solid.TransactionsSSZ `json:"transactions"` + Withdrawals *solid.ListSSZ[*Withdrawal] `json:"withdrawals,omitempty"` + BlobGasUsed uint64 `json:"blob_gas_used,string"` + ExcessBlobGas uint64 `json:"excess_blob_gas,string"` + } + aux.Withdrawals = solid.NewStaticListSSZ[*Withdrawal](int(b.beaconCfg.MaxWithdrawalsPerPayload), 44) + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + b.ParentHash = aux.ParentHash + b.FeeRecipient = aux.FeeRecipient + b.StateRoot = aux.StateRoot + b.ReceiptsRoot = aux.ReceiptsRoot + b.LogsBloom = aux.LogsBloom + b.PrevRandao = aux.PrevRandao + b.BlockNumber = aux.BlockNumber + b.GasLimit = aux.GasLimit + b.GasUsed = aux.GasUsed + b.Time = aux.Time + b.Extra = aux.Extra + tmp := uint256.NewInt(0) + if err := tmp.SetFromDecimal(aux.BaseFeePerGas); err != nil { + return err + } + tmpBaseFee := tmp.Bytes32() + b.BaseFeePerGas = libcommon.Hash{} + copy(b.BaseFeePerGas[:], utils.ReverseOfByteSlice(tmpBaseFee[:])) + b.BlockHash = aux.BlockHash + b.Transactions = aux.Transactions + b.Withdrawals = aux.Withdrawals + b.BlobGasUsed = aux.BlobGasUsed + b.ExcessBlobGas = aux.ExcessBlobGas + return nil +} + // PayloadHeader returns the equivalent ExecutionPayloadHeader object. func (b *Eth1Block) PayloadHeader() (*Eth1Header, error) { var err error diff --git a/cl/cltypes/eth1_header.go b/cl/cltypes/eth1_header.go index e74270fc6ed..c49ee4d1608 100644 --- a/cl/cltypes/eth1_header.go +++ b/cl/cltypes/eth1_header.go @@ -1,8 +1,10 @@ package cltypes import ( + "encoding/json" "fmt" + "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/types/ssz" "github.com/ledgerwatch/erigon/cl/clparams" @@ -129,3 +131,90 @@ func (h *Eth1Header) getSchema() []interface{} { func (h *Eth1Header) Static() bool { return false } + +func (h *Eth1Header) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + ParentHash libcommon.Hash `json:"parent_hash"` + FeeRecipient libcommon.Address `json:"fee_recipient"` + StateRoot libcommon.Hash `json:"state_root"` + ReceiptsRoot libcommon.Hash `json:"receipts_root"` + LogsBloom types.Bloom `json:"logs_bloom"` + PrevRandao libcommon.Hash `json:"prev_randao"` + BlockNumber uint64 `json:"block_number,string"` + GasLimit uint64 `json:"gas_limit,string"` + GasUsed uint64 `json:"gas_used,string"` + Time uint64 `json:"timestamp,string"` + Extra *solid.ExtraData `json:"extra_data"` + BaseFeePerGas string `json:"base_fee_per_gas"` + BlockHash libcommon.Hash `json:"block_hash"` + TransactionsRoot libcommon.Hash `json:"transactions_root"` + WithdrawalsRoot libcommon.Hash `json:"withdrawals_root,omitempty"` + BlobGasUsed uint64 `json:"blob_gas_used,omitempty,string"` + ExcessBlobGas uint64 `json:"excess_blob_gas,omitempty,string"` + }{ + ParentHash: h.ParentHash, + FeeRecipient: h.FeeRecipient, + StateRoot: h.StateRoot, + ReceiptsRoot: h.ReceiptsRoot, + LogsBloom: h.LogsBloom, + PrevRandao: h.PrevRandao, + BlockNumber: h.BlockNumber, + GasLimit: h.GasLimit, + GasUsed: h.GasUsed, + Time: h.Time, + Extra: h.Extra, + BaseFeePerGas: uint256.NewInt(0).SetBytes32(h.BaseFeePerGas[:]).Dec(), + BlockHash: h.BlockHash, + TransactionsRoot: h.TransactionsRoot, + WithdrawalsRoot: h.WithdrawalsRoot, + BlobGasUsed: h.BlobGasUsed, + ExcessBlobGas: h.ExcessBlobGas, + }) +} + +func (h *Eth1Header) UnmarshalJSON(data []byte) error { + var aux struct { + ParentHash libcommon.Hash `json:"parent_hash"` + FeeRecipient libcommon.Address `json:"fee_recipient"` + StateRoot libcommon.Hash `json:"state_root"` + ReceiptsRoot libcommon.Hash `json:"receipts_root"` + LogsBloom types.Bloom `json:"logs_bloom"` + PrevRandao libcommon.Hash `json:"prev_randao"` + BlockNumber uint64 `json:"block_number,string"` + GasLimit uint64 `json:"gas_limit,string"` + GasUsed uint64 `json:"gas_used,string"` + Time uint64 `json:"timestamp,string"` + Extra *solid.ExtraData `json:"extra_data"` + BaseFeePerGas string `json:"base_fee_per_gas"` + BlockHash libcommon.Hash `json:"block_hash"` + TransactionsRoot libcommon.Hash `json:"transactions_root"` + WithdrawalsRoot libcommon.Hash `json:"withdrawals_root,omitempty"` + BlobGasUsed uint64 `json:"blob_gas_used,omitempty,string"` + ExcessBlobGas uint64 `json:"excess_blob_gas,omitempty,string"` + } + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + h.ParentHash = aux.ParentHash + h.FeeRecipient = aux.FeeRecipient + h.StateRoot = aux.StateRoot + h.ReceiptsRoot = aux.ReceiptsRoot + h.LogsBloom = aux.LogsBloom + h.PrevRandao = aux.PrevRandao + h.BlockNumber = aux.BlockNumber + h.GasLimit = aux.GasLimit + h.GasUsed = aux.GasUsed + h.Time = aux.Time + h.Extra = aux.Extra + tmp := uint256.NewInt(0) + if err := tmp.SetFromDecimal(aux.BaseFeePerGas); err != nil { + return err + } + h.BaseFeePerGas = tmp.Bytes32() + h.BlockHash = aux.BlockHash + h.TransactionsRoot = aux.TransactionsRoot + h.WithdrawalsRoot = aux.WithdrawalsRoot + h.BlobGasUsed = aux.BlobGasUsed + h.ExcessBlobGas = aux.ExcessBlobGas + return nil +} diff --git a/cl/cltypes/indexed_attestation.go b/cl/cltypes/indexed_attestation.go index 1464c8eb158..ba285ffb0b1 100644 --- a/cl/cltypes/indexed_attestation.go +++ b/cl/cltypes/indexed_attestation.go @@ -1,6 +1,8 @@ package cltypes import ( + "encoding/json" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/merkle_tree" @@ -27,6 +29,23 @@ func (i *IndexedAttestation) Static() bool { return false } +func (i *IndexedAttestation) UnmarshalJSON(buf []byte) error { + var tmp struct { + AttestingIndices *solid.RawUint64List `json:"attesting_indicies"` + Data solid.AttestationData `json:"data"` + Signature libcommon.Bytes96 `json:"signature"` + } + tmp.AttestingIndices = solid.NewRawUint64List(2048, nil) + tmp.Data = solid.NewAttestationData() + if err := json.Unmarshal(buf, &tmp); err != nil { + return err + } + i.AttestingIndices = tmp.AttestingIndices + i.Data = tmp.Data + i.Signature = tmp.Signature + return nil +} + func (i *IndexedAttestation) EncodeSSZ(buf []byte) (dst []byte, err error) { return ssz2.MarshalSSZ(buf, i.AttestingIndices, i.Data, i.Signature[:]) } diff --git a/cl/cltypes/light_client.go b/cl/cltypes/light_client.go index b68b1d6bec9..a6fe0c5e27c 100644 --- a/cl/cltypes/light_client.go +++ b/cl/cltypes/light_client.go @@ -25,6 +25,12 @@ type LightClientHeader struct { } func NewLightClientHeader(version clparams.StateVersion) *LightClientHeader { + if version < clparams.CapellaVersion { + return &LightClientHeader{ + version: version, + Beacon: &BeaconBlockHeader{}, + } + } return &LightClientHeader{ version: version, Beacon: &BeaconBlockHeader{}, @@ -33,6 +39,10 @@ func NewLightClientHeader(version clparams.StateVersion) *LightClientHeader { } } +func (l *LightClientHeader) Version() clparams.StateVersion { + return l.version +} + func (l *LightClientHeader) EncodeSSZ(buf []byte) ([]byte, error) { return ssz2.MarshalSSZ(buf, l.getSchema()...) } @@ -40,8 +50,10 @@ func (l *LightClientHeader) EncodeSSZ(buf []byte) ([]byte, error) { func (l *LightClientHeader) DecodeSSZ(buf []byte, version int) error { l.version = clparams.StateVersion(version) l.Beacon = &BeaconBlockHeader{} - l.ExecutionBranch = solid.NewHashVector(ExecutionBranchSize) - l.ExecutionPayloadHeader = NewEth1Header(l.version) + if version >= int(clparams.CapellaVersion) { + l.ExecutionPayloadHeader = NewEth1Header(l.version) + l.ExecutionBranch = solid.NewHashVector(ExecutionBranchSize) + } return ssz2.UnmarshalSSZ(buf, version, l.getSchema()...) } diff --git a/cl/cltypes/lightclient_utils/lightclient.go b/cl/cltypes/lightclient_utils/lightclient.go new file mode 100644 index 00000000000..dd53e25eabb --- /dev/null +++ b/cl/cltypes/lightclient_utils/lightclient.go @@ -0,0 +1,185 @@ +package lightclient_utils + +import ( + "fmt" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" +) + +// def create_light_client_update(state: BeaconState, +// block: SignedBeaconBlock, +// attested_state: BeaconState, +// attested_block: SignedBeaconBlock, +// finalized_block: Optional[SignedBeaconBlock]) -> LightClientUpdate: +// assert compute_epoch_at_slot(attested_state.slot) >= ALTAIR_FORK_EPOCH +// assert sum(block.message.body.sync_aggregate.sync_committee_bits) >= MIN_SYNC_COMMITTEE_PARTICIPANTS + +// assert state.slot == state.latest_block_header.slot +// header = state.latest_block_header.copy() +// header.state_root = hash_tree_root(state) +// assert hash_tree_root(header) == hash_tree_root(block.message) +// update_signature_period = compute_sync_committee_period_at_slot(block.message.slot) +// assert attested_state.slot == attested_state.latest_block_header.slot +// attested_header = attested_state.latest_block_header.copy() +// attested_header.state_root = hash_tree_root(attested_state) +// assert hash_tree_root(attested_header) == hash_tree_root(attested_block.message) == block.message.parent_root +// update_attested_period = compute_sync_committee_period_at_slot(attested_block.message.slot) +// update = LightClientUpdate() +// update.attested_header = block_to_light_client_header(attested_block) +// # `next_sync_committee` is only useful if the message is signed by the current sync committee +// if update_attested_period == update_signature_period: +// update.next_sync_committee = attested_state.next_sync_committee +// update.next_sync_committee_branch = NextSyncCommitteeBranch( +// compute_merkle_proof(attested_state, NEXT_SYNC_COMMITTEE_GINDEX)) +// # Indicate finality whenever possible +// if finalized_block is not None: +// if finalized_block.message.slot != GENESIS_SLOT: +// update.finalized_header = block_to_light_client_header(finalized_block) +// assert hash_tree_root(update.finalized_header.beacon) == attested_state.finalized_checkpoint.root +// else: +// assert attested_state.finalized_checkpoint.root == Bytes32() +// update.finality_branch = FinalityBranch( +// compute_merkle_proof(attested_state, FINALIZED_ROOT_GINDEX)) + +// update.sync_aggregate = block.message.body.sync_aggregate +// update.signature_slot = block.message.slot + +// return update +// CreateLightClientUpdate implements the specs to initialize the light client update +func CreateLightClientUpdate(cfg *clparams.BeaconChainConfig, block *cltypes.SignedBeaconBlock, finalizedBlock *cltypes.SignedBeaconBlock, + attestedBlock *cltypes.SignedBeaconBlock, attestedSlot uint64, + attestedNextSyncCommittee *solid.SyncCommittee, attestedFinalizedCheckpoint solid.Checkpoint, + attestedNextSyncCommitteeBranch, attestedFinalityBranch solid.HashVectorSSZ) (*cltypes.LightClientUpdate, error) { + var err error + if attestedBlock.Version() < clparams.AltairVersion { + return nil, fmt.Errorf("attested slot %d is before altair fork epoch %d", attestedSlot, cfg.AltairForkEpoch) + } + if block.Block.Body.SyncAggregate.Sum() < int(cfg.MinSyncCommitteeParticipants) { + return nil, fmt.Errorf("sync committee participants %d is less than minimum %d", block.Block.Body.SyncAggregate.Sum(), cfg.MinSyncCommitteeParticipants) + } + + updateSignaturePeriod := cfg.SyncCommitteePeriod(block.Block.Slot) + + attestedHeader := attestedBlock.SignedBeaconBlockHeader() + if attestedSlot != attestedHeader.Header.Slot { + return nil, fmt.Errorf("attested slot %d is not equal to attested latest block header slot %d", attestedSlot, attestedHeader.Header.Slot) + } + updateAttestedPeriod := cfg.SyncCommitteePeriod(attestedBlock.Block.Slot) + + update := cltypes.NewLightClientUpdate(block.Version()) + update.AttestedHeader, err = BlockToLightClientHeader(attestedBlock) + if err != nil { + return nil, err + } + if updateAttestedPeriod == updateSignaturePeriod { + update.NextSyncCommittee = attestedNextSyncCommittee + update.NextSyncCommitteeBranch = attestedNextSyncCommitteeBranch + } + if finalizedBlock != nil { + if finalizedBlock.Block.Slot != cfg.GenesisSlot { + update.FinalizedHeader, err = BlockToLightClientHeader(finalizedBlock) + if err != nil { + return nil, err + } + finalizedBeaconRoot, err := update.FinalizedHeader.Beacon.HashSSZ() + if err != nil { + return nil, err + } + if finalizedBeaconRoot != attestedFinalizedCheckpoint.BlockRoot() { + return nil, fmt.Errorf("finalized beacon root %x is not equal to attested finalized checkpoint root %x", finalizedBeaconRoot, attestedFinalizedCheckpoint.BlockRoot()) + } + } else if attestedFinalizedCheckpoint.BlockRoot() != (libcommon.Hash{}) { + return nil, fmt.Errorf("attested finalized checkpoint root %x is not equal to zero hash", attestedFinalizedCheckpoint.BlockRoot()) + } + update.FinalityBranch = attestedFinalityBranch + } + update.SyncAggregate = block.Block.Body.SyncAggregate + update.SignatureSlot = block.Block.Slot + return update, nil +} + +// def block_to_light_client_header(block: SignedBeaconBlock) -> LightClientHeader: +// +// return LightClientHeader( +// beacon=BeaconBlockHeader( +// slot=block.message.slot, +// proposer_index=block.message.proposer_index, +// parent_root=block.message.parent_root, +// state_root=block.message.state_root, +// body_root=hash_tree_root(block.message.body), +// ), +// ) +func BlockToLightClientHeader(block *cltypes.SignedBeaconBlock) (*cltypes.LightClientHeader, error) { + h := cltypes.NewLightClientHeader(block.Version()) + h.Beacon = block.SignedBeaconBlockHeader().Header + if block.Version() < clparams.CapellaVersion { + return h, nil + } + var err error + h.ExecutionPayloadHeader, err = block.Block.Body.ExecutionPayload.PayloadHeader() + if err != nil { + return nil, err + } + payloadMerkleProof, err := block.Block.Body.ExecutionPayloadMerkleProof() + if err != nil { + return nil, err + } + payloadMerkleProofHashVector := solid.NewHashVector(len(payloadMerkleProof)) + for i := range payloadMerkleProof { + payloadMerkleProofHashVector.Set(i, payloadMerkleProof[i]) + } + h.ExecutionBranch = payloadMerkleProofHashVector + return h, nil +} + +// def create_light_client_bootstrap(state: BeaconState, +// block: SignedBeaconBlock) -> LightClientBootstrap: +// assert compute_epoch_at_slot(state.slot) >= ALTAIR_FORK_EPOCH + +// assert state.slot == state.latest_block_header.slot +// header = state.latest_block_header.copy() +// header.state_root = hash_tree_root(state) +// assert hash_tree_root(header) == hash_tree_root(block.message) + +// return LightClientBootstrap( +// +// header=block_to_light_client_header(block), +// current_sync_committee=state.current_sync_committee, +// current_sync_committee_branch=CurrentSyncCommitteeBranch( +// compute_merkle_proof(state, CURRENT_SYNC_COMMITTEE_GINDEX)), +// +// ) +func CreateLightClientBootstrap(state *state.CachingBeaconState, block *cltypes.SignedBeaconBlock) (*cltypes.LightClientBootstrap, error) { + cfg := state.BeaconConfig() + if state.Version() < clparams.AltairVersion { + return nil, fmt.Errorf("state slot %d is before altair fork epoch %d", state.Slot(), cfg.AltairForkEpoch) + } + + if state.Slot() != state.LatestBlockHeader().Slot { + return nil, fmt.Errorf("state slot %d is not equal to state latest block header slot %d", state.Slot(), state.LatestBlockHeader().Slot) + } + + currentSyncCommitteeBranch, err := state.CurrentSyncCommitteeBranch() + if err != nil { + return nil, err + } + + hashVector := solid.NewHashVector(len(currentSyncCommitteeBranch)) + for i := range currentSyncCommitteeBranch { + hashVector.Set(i, currentSyncCommitteeBranch[i]) + } + lcHeader, err := BlockToLightClientHeader(block) + if err != nil { + return nil, err + } + + return &cltypes.LightClientBootstrap{ + Header: lcHeader, + CurrentSyncCommittee: state.CurrentSyncCommittee(), + CurrentSyncCommitteeBranch: hashVector, + }, nil +} diff --git a/cl/cltypes/network.go b/cl/cltypes/network.go index af8d1a3ee26..863c3cd4d27 100644 --- a/cl/cltypes/network.go +++ b/cl/cltypes/network.go @@ -1,6 +1,11 @@ package cltypes import ( + "encoding/json" + "strconv" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/types/clonable" "github.com/ledgerwatch/erigon-lib/types/ssz" @@ -9,36 +14,51 @@ import ( type Metadata struct { SeqNumber uint64 - Attnets uint64 - Syncnets *uint64 + Attnets [8]byte + Syncnets *[1]byte } func (m *Metadata) EncodeSSZ(buf []byte) ([]byte, error) { if m.Syncnets == nil { - return ssz2.MarshalSSZ(buf, m.SeqNumber, m.Attnets) + return ssz2.MarshalSSZ(buf, m.SeqNumber, m.Attnets[:]) } - return ssz2.MarshalSSZ(buf, m.SeqNumber, m.Attnets, *m.Syncnets) + return ssz2.MarshalSSZ(buf, m.SeqNumber, m.Attnets[:], m.Syncnets[:]) } func (m *Metadata) EncodingSizeSSZ() (ret int) { ret = 8 * 2 if m.Syncnets != nil { - ret += 8 + ret += 1 } return } func (m *Metadata) DecodeSSZ(buf []byte, _ int) error { + if len(buf) < 16 { + return ssz.ErrLowBufferSize + } m.SeqNumber = ssz.UnmarshalUint64SSZ(buf) - m.Attnets = ssz.UnmarshalUint64SSZ(buf[8:]) - if len(buf) < 24 { + copy(m.Attnets[:], buf[8:]) + if len(buf) < 17 { return nil } - m.Syncnets = new(uint64) - *m.Syncnets = ssz.UnmarshalUint64SSZ(buf[16:]) + m.Syncnets = new([1]byte) + copy(m.Syncnets[:], buf[16:17]) return nil } +func (m *Metadata) MarshalJSON() ([]byte, error) { + out := map[string]interface{}{ + "seq_number": strconv.FormatUint(m.SeqNumber, 10), + "attnets": hexutility.Bytes(m.Attnets[:]), + } + if m.Syncnets != nil { + out["syncnets"] = hexutility.Bytes(m.Syncnets[:]) + } + // Attnets and syncnets are hex encoded + return json.Marshal(out) +} + // Ping is a test P2P message, used to test out liveness of our peer/signaling disconnection. type Ping struct { Id uint64 @@ -57,6 +77,41 @@ func (p *Ping) DecodeSSZ(buf []byte, _ int) error { return nil } +// Root is a SSZ wrapper around a Hash +type Root struct { + Root libcommon.Hash +} + +func (r *Root) EncodeSSZ(buf []byte) ([]byte, error) { + return append(buf, r.Root[:]...), nil +} + +func (r *Root) DecodeSSZ(buf []byte, _ int) error { + copy(r.Root[:], buf) + return nil +} + +func (r *Root) EncodingSizeSSZ() int { + return 32 +} + +type LightClientUpdatesByRangeRequest struct { + StartPeriod uint64 + Count uint64 +} + +func (l *LightClientUpdatesByRangeRequest) EncodeSSZ(buf []byte) ([]byte, error) { + return ssz2.MarshalSSZ(buf, &l.StartPeriod, &l.Count) +} + +func (l *LightClientUpdatesByRangeRequest) DecodeSSZ(buf []byte, _ int) error { + return ssz2.UnmarshalSSZ(buf, 0, &l.StartPeriod, &l.Count) +} + +func (l *LightClientUpdatesByRangeRequest) EncodingSizeSSZ() int { + return 16 +} + /* * BeaconBlocksByRangeRequest is the request for getting a range of blocks. */ @@ -105,3 +160,24 @@ func (s *Status) DecodeSSZ(buf []byte, version int) error { func (s *Status) EncodingSizeSSZ() int { return 84 } + +type BlobsByRangeRequest struct { + StartSlot uint64 + Count uint64 +} + +func (l *BlobsByRangeRequest) EncodeSSZ(buf []byte) ([]byte, error) { + return ssz2.MarshalSSZ(buf, &l.StartSlot, &l.Count) +} + +func (l *BlobsByRangeRequest) DecodeSSZ(buf []byte, _ int) error { + return ssz2.UnmarshalSSZ(buf, 0, &l.StartSlot, &l.Count) +} + +func (l *BlobsByRangeRequest) EncodingSizeSSZ() int { + return 16 +} + +func (*BlobsByRangeRequest) Clone() clonable.Clonable { + return &BlobsByRangeRequest{} +} diff --git a/cl/cltypes/network_test.go b/cl/cltypes/network_test.go index 85296644433..de589e93fed 100644 --- a/cl/cltypes/network_test.go +++ b/cl/cltypes/network_test.go @@ -13,7 +13,7 @@ import ( var testMetadata = &cltypes.Metadata{ SeqNumber: 99, - Attnets: 69, + Attnets: [8]byte{1, 2, 3, 4, 5, 6, 7, 8}, } var testPing = &cltypes.Ping{ @@ -40,12 +40,29 @@ var testHeader = &cltypes.BeaconBlockHeader{ BodyRoot: libcommon.HexToHash("ad"), } +var testBlockRoot = &cltypes.Root{ + Root: libcommon.HexToHash("a"), +} + +var testLightClientUpdatesByRange = &cltypes.LightClientUpdatesByRangeRequest{ + StartPeriod: 100, + Count: 10, +} + +var testBlobRequestByRange = &cltypes.BlobsByRangeRequest{ + StartSlot: 100, + Count: 10, +} + func TestMarshalNetworkTypes(t *testing.T) { cases := []ssz.EncodableSSZ{ testMetadata, testPing, testBlockRangeRequest, testStatus, + testBlockRoot, + testLightClientUpdatesByRange, + testBlobRequestByRange, } unmarshalDestinations := []ssz.EncodableSSZ{ @@ -53,6 +70,9 @@ func TestMarshalNetworkTypes(t *testing.T) { &cltypes.Ping{}, &cltypes.BeaconBlocksByRangeRequest{}, &cltypes.Status{}, + &cltypes.Root{}, + &cltypes.LightClientUpdatesByRangeRequest{}, + &cltypes.BlobsByRangeRequest{}, } for i, tc := range cases { marshalledBytes, err := tc.EncodeSSZ(nil) diff --git a/cl/cltypes/solid/attestation.go b/cl/cltypes/solid/attestation.go index 42097e11d9f..7b7de59e4d2 100644 --- a/cl/cltypes/solid/attestation.go +++ b/cl/cltypes/solid/attestation.go @@ -1,6 +1,7 @@ package solid import ( + "encoding/binary" "encoding/json" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -34,6 +35,14 @@ func (*Attestation) Static() bool { return false } +func (a *Attestation) Copy() *Attestation { + new := &Attestation{} + copy(new.staticBuffer[:], a.staticBuffer[:]) + new.aggregationBitsBuffer = make([]byte, len(a.aggregationBitsBuffer)) + copy(new.aggregationBitsBuffer, a.aggregationBitsBuffer) + return new +} + // NewAttestionFromParameters creates a new Attestation instance using provided parameters func NewAttestionFromParameters( aggregationBits []byte, @@ -41,6 +50,7 @@ func NewAttestionFromParameters( signature [96]byte, ) *Attestation { a := &Attestation{} + binary.LittleEndian.PutUint32(a.staticBuffer[:4], aggregationBitsOffset) a.SetAttestationData(attestationData) a.SetSignature(signature) a.SetAggregationBits(aggregationBits) @@ -69,6 +79,7 @@ func (a *Attestation) UnmarshalJSON(buf []byte) error { if err := json.Unmarshal(buf, &tmp); err != nil { return err } + binary.LittleEndian.PutUint32(a.staticBuffer[:4], aggregationBitsOffset) a.SetAggregationBits(tmp.AggregationBits) a.SetSignature(tmp.Signature) a.SetAttestationData(tmp.Data) @@ -170,6 +181,19 @@ func (a *Attestation) HashSSZ() (o [32]byte, err error) { // Clone creates a new clone of the Attestation instance. // This can be useful for creating copies without changing the original object. -func (*Attestation) Clone() clonable.Clonable { - return &Attestation{} +func (a *Attestation) Clone() clonable.Clonable { + if a == nil { + return &Attestation{} + } + var staticBuffer [attestationStaticBufferSize]byte + var bitsBuffer []byte + copy(staticBuffer[:], a.staticBuffer[:]) + if a.aggregationBitsBuffer != nil { + bitsBuffer = make([]byte, len(a.aggregationBitsBuffer)) + copy(bitsBuffer, a.aggregationBitsBuffer) + } + return &Attestation{ + aggregationBitsBuffer: bitsBuffer, + staticBuffer: staticBuffer, + } } diff --git a/cl/cltypes/solid/attestation_data.go b/cl/cltypes/solid/attestation_data.go index 188571957ab..cf84df93903 100644 --- a/cl/cltypes/solid/attestation_data.go +++ b/cl/cltypes/solid/attestation_data.go @@ -24,14 +24,14 @@ type AttestationData []byte func NewAttestionDataFromParameters( slot uint64, - validatorIndex uint64, + committeeIndex uint64, beaconBlockRoot libcommon.Hash, source Checkpoint, target Checkpoint, ) AttestationData { a := NewAttestationData() a.SetSlot(slot) - a.SetValidatorIndex(validatorIndex) + a.SetCommitteeIndex(committeeIndex) a.SetBeaconBlockRoot(beaconBlockRoot) a.SetSource(source) a.SetTarget(target) @@ -48,7 +48,7 @@ func (a AttestationData) MarshalJSON() ([]byte, error) { }{ Slot: a.Slot(), BeaconBlockRoot: a.BeaconBlockRoot(), - Index: a.ValidatorIndex(), + Index: a.CommitteeIndex(), Source: a.Source(), Target: a.Target(), }) @@ -68,7 +68,7 @@ func (a AttestationData) UnmarshalJSON(buf []byte) error { return err } a.SetSlot(tmp.Slot) - a.SetValidatorIndex(tmp.Index) + a.SetCommitteeIndex(tmp.Index) a.SetBeaconBlockRoot(tmp.BeaconBlockRoot) a.SetSource(tmp.Source) a.SetTarget(tmp.Target) @@ -87,7 +87,7 @@ func (a AttestationData) Slot() uint64 { return binary.LittleEndian.Uint64(a[:8]) } -func (a AttestationData) ValidatorIndex() uint64 { +func (a AttestationData) CommitteeIndex() uint64 { return binary.LittleEndian.Uint64(a[8:16]) } @@ -108,7 +108,7 @@ func (a AttestationData) SetSlot(slot uint64) { binary.LittleEndian.PutUint64(a[:8], slot) } -func (a AttestationData) SetValidatorIndex(validatorIndex uint64) { +func (a AttestationData) SetCommitteeIndex(validatorIndex uint64) { binary.LittleEndian.PutUint64(a[8:16], validatorIndex) } @@ -120,7 +120,7 @@ func (a AttestationData) SetSlotWithRawBytes(b []byte) { copy(a[:8], b) } -func (a AttestationData) SetValidatorIndexWithRawBytes(b []byte) { +func (a AttestationData) SetCommitteeIndexWithRawBytes(b []byte) { copy(a[8:16], b) } diff --git a/cl/cltypes/solid/attestation_test.go b/cl/cltypes/solid/attestation_test.go index 2aa4e22d37a..ba0a5d5ab6e 100644 --- a/cl/cltypes/solid/attestation_test.go +++ b/cl/cltypes/solid/attestation_test.go @@ -18,7 +18,7 @@ func TestAttestationData(t *testing.T) { // Ensure that the data was set correctly assert.Equal(t, slot, attData.Slot()) - assert.Equal(t, validatorIndex, attData.ValidatorIndex()) + assert.Equal(t, validatorIndex, attData.CommitteeIndex()) assert.Equal(t, beaconBlockRoot, attData.BeaconBlockRoot()) assert.Equal(t, source, attData.Source()) assert.Equal(t, target, attData.Target()) diff --git a/cl/cltypes/solid/checkpoint.go b/cl/cltypes/solid/checkpoint.go index 948bd8344eb..7520d026a22 100644 --- a/cl/cltypes/solid/checkpoint.go +++ b/cl/cltypes/solid/checkpoint.go @@ -40,7 +40,7 @@ func (c Checkpoint) MarshalJSON() ([]byte, error) { }{Epoch: c.Epoch(), Root: c.BlockRoot()}) } -func (c Checkpoint) UnmarshalJSON(buf []byte) error { +func (c *Checkpoint) UnmarshalJSON(buf []byte) error { var tmp struct { Epoch uint64 `json:"epoch,string"` Root libcommon.Hash `json:"root"` diff --git a/cl/cltypes/solid/contribution.go b/cl/cltypes/solid/contribution.go deleted file mode 100644 index 36e0806e897..00000000000 --- a/cl/cltypes/solid/contribution.go +++ /dev/null @@ -1,231 +0,0 @@ -package solid - -import ( - "encoding/binary" - "encoding/json" - - "github.com/ledgerwatch/erigon-lib/common" - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/hexutility" - "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/types/clonable" - "github.com/ledgerwatch/erigon-lib/types/ssz" - "github.com/ledgerwatch/erigon/cl/merkle_tree" - ssz2 "github.com/ledgerwatch/erigon/cl/ssz" -) - -const ( - // slot: 8 bytes // 0 - // beaconBlockHash: 32 bytes // 8 - // subcommitteeIndex: 8 bytes // 40 - // aggregationbits: 16 bytes // 48 - // signature: 96 bytes // 64 - // total = 160 - contributionStaticBufferSize = 8 + 32 + 8 + 16 + 96 -) - -// Contribution type represents a statement or confirmation of some occurrence or phenomenon. -type Contribution [160]byte - -// Static returns whether the contribution is static or not. For Contribution, it's always false. -func (*Contribution) Static() bool { - return false -} - -// NewAttestionFromParameters creates a new Contribution instance using provided parameters -func NewContributionFromParameters( - slot uint64, - beaconBlockRoot libcommon.Hash, - subcommitteeIndex uint64, - aggregationBits [16]byte, - signature libcommon.Bytes96, -) *Contribution { - a := &Contribution{} - a.SetSlot(slot) - a.SetBeaconBlockRoot(beaconBlockRoot) - a.SetSubcommitteeIndex(subcommitteeIndex) - a.SetAggregationBits(aggregationBits) - a.SetSignature(signature) - return a -} - -func (a Contribution) MarshalJSON() ([]byte, error) { - ab := a.AggregationBits() - return json.Marshal(struct { - Slot uint64 `json:"slot,string"` - BeaconBlockRoot libcommon.Hash `json:"beacon_block_root"` - SubcommitteeIndex uint64 `json:"subcommittee_index,string"` - AggregationBits hexutility.Bytes `json:"aggregation_bits"` - Signature libcommon.Bytes96 `json:"signature"` - }{ - Slot: a.Slot(), - BeaconBlockRoot: a.BeaconBlockRoot(), - SubcommitteeIndex: a.SubcommitteeIndex(), - AggregationBits: hexutility.Bytes(ab[:]), - Signature: a.Signature(), - }) -} - -func (a *Contribution) UnmarshalJSON(buf []byte) error { - var tmp struct { - Slot uint64 `json:"slot,string"` - BeaconBlockRoot libcommon.Hash `json:"beacon_block_root"` - SubcommitteeIndex uint64 `json:"subcommittee_index,string"` - AggregationBits hexutility.Bytes `json:"aggregation_bits"` - Signature libcommon.Bytes96 `json:"signature"` - } - if err := json.Unmarshal(buf, &tmp); err != nil { - return err - } - a.SetSlot(tmp.Slot) - a.SetBeaconBlockRoot(tmp.BeaconBlockRoot) - a.SetSubcommitteeIndex(tmp.SubcommitteeIndex) - o := [16]byte{} - copy(o[:], tmp.AggregationBits) - a.SetAggregationBits(o) - a.SetSignature(tmp.Signature) - return nil -} -func (a Contribution) Slot() uint64 { - return binary.LittleEndian.Uint64(a[:8]) -} -func (a Contribution) BeaconBlockRoot() (o libcommon.Hash) { - copy(o[:], a[16:40]) - return -} -func (a Contribution) SubcommitteeIndex() uint64 { - return binary.LittleEndian.Uint64(a[40:48]) -} -func (a Contribution) AggregationBits() (o [16]byte) { - copy(o[:], a[48:64]) - return -} -func (a Contribution) Signature() (o libcommon.Bytes96) { - copy(o[:], a[96:160]) - return -} - -func (a Contribution) SetSlot(slot uint64) { - binary.LittleEndian.PutUint64(a[:8], slot) -} - -func (a Contribution) SetBeaconBlockRoot(hsh common.Hash) { - copy(a[40:48], hsh[:]) -} - -func (a Contribution) SetSubcommitteeIndex(validatorIndex uint64) { - binary.LittleEndian.PutUint64(a[40:48], validatorIndex) -} - -func (a Contribution) SetAggregationBits(xs [16]byte) { - copy(a[48:64], xs[:]) -} - -// SetSignature sets the signature of the Contribution instance. -func (a Contribution) SetSignature(signature [96]byte) { - copy(a[64:], signature[:]) -} - -// EncodingSizeSSZ returns the size of the Contribution instance when encoded in SSZ format. -func (a *Contribution) EncodingSizeSSZ() (size int) { - return 160 -} - -// DecodeSSZ decodes the provided buffer into the Contribution instance. -func (a *Contribution) DecodeSSZ(buf []byte, _ int) error { - if len(buf) < contributionStaticBufferSize { - return ssz.ErrLowBufferSize - } - copy((*a)[:], buf) - return nil -} - -// EncodeSSZ encodes the Contribution instance into the provided buffer. -func (a *Contribution) EncodeSSZ(dst []byte) ([]byte, error) { - buf := dst - buf = append(buf, (*a)[:]...) - return buf, nil -} - -// CopyHashBufferTo copies the hash buffer of the Contribution instance to the provided byte slice. -func (a *Contribution) CopyHashBufferTo(o []byte) error { - for i := 0; i < 160; i++ { - o[i] = 0 - } - - // hash signature first - copy(o[:128], a[64:160]) - if err := merkle_tree.InPlaceRoot(o); err != nil { - return err - } - copy(o[:128:160], o[:32]) - - copy(o[:32], a[:8]) - copy(o[32:64], a[8:40]) - copy(o[64:96], a[40:48]) - copy(o[96:128], a[48:64]) - return nil -} - -// HashSSZ hashes the Contribution instance using SSZ. -// It creates a byte slice `leaves` with a size based on length.Hash, -// then fills this slice with the values from the Contribution's hash buffer. -func (a *Contribution) HashSSZ() (o [32]byte, err error) { - leaves := make([]byte, length.Hash*5) - if err = a.CopyHashBufferTo(leaves); err != nil { - return - } - err = merkle_tree.MerkleRootFromFlatLeaves(leaves, o[:]) - return -} - -// Clone creates a new clone of the Contribution instance. -// This can be useful for creating copies without changing the original object. -func (*Contribution) Clone() clonable.Clonable { - return &Contribution{} -} - -type ContributionAndProof struct { - AggregatorIndex uint64 `json:"aggregator_index,string"` - Message *Contribution `json:"message"` - Signature libcommon.Bytes96 `json:"selection_proof"` -} - -func (a *ContributionAndProof) EncodeSSZ(dst []byte) ([]byte, error) { - return ssz2.MarshalSSZ(dst, a.Message, a.Signature[:]) -} - -func (a *ContributionAndProof) DecodeSSZ(buf []byte, version int) error { - a.Message = new(Contribution) - return ssz2.UnmarshalSSZ(buf, version, a.Message, a.Signature[:]) -} - -func (a *ContributionAndProof) EncodingSizeSSZ() int { - return 100 + a.Message.EncodingSizeSSZ() -} - -func (a *ContributionAndProof) HashSSZ() ([32]byte, error) { - return merkle_tree.HashTreeRoot(a.Message, a.Signature[:]) -} - -type SignedContributionAndProof struct { - Message *ContributionAndProof `json:"message"` - Signature libcommon.Bytes96 `json:"signature"` -} - -func (a *SignedContributionAndProof) EncodeSSZ(dst []byte) ([]byte, error) { - return ssz2.MarshalSSZ(dst, a.Message, a.Signature[:]) -} - -func (a *SignedContributionAndProof) DecodeSSZ(buf []byte, version int) error { - a.Message = new(ContributionAndProof) - return ssz2.UnmarshalSSZ(buf, version, a.Message, a.Signature[:]) -} - -func (a *SignedContributionAndProof) EncodingSizeSSZ() int { - return 100 + a.Message.EncodingSizeSSZ() -} - -func (a *SignedContributionAndProof) HashSSZ() ([32]byte, error) { - return merkle_tree.HashTreeRoot(a.Message, a.Signature[:]) -} diff --git a/cl/cltypes/solid/hash_list.go b/cl/cltypes/solid/hash_list.go index 9c4ba66dd9c..b6d9310f90e 100644 --- a/cl/cltypes/solid/hash_list.go +++ b/cl/cltypes/solid/hash_list.go @@ -32,7 +32,7 @@ func (arr *hashList) Bytes() []byte { func (arr *hashList) MarshalJSON() ([]byte, error) { list := make([]libcommon.Hash, arr.l) for i := 0; i < arr.l; i++ { - list[0] = arr.Get(i) + list[i] = arr.Get(i) } return json.Marshal(list) } @@ -44,7 +44,6 @@ func (arr *hashList) UnmarshalJSON(buf []byte) error { return err } arr.Clear() - arr.l = len(list) for _, elem := range list { arr.Append(elem) } diff --git a/cl/cltypes/solid/list_ssz.go b/cl/cltypes/solid/list_ssz.go index cf2de25ff1b..30af90a16a3 100644 --- a/cl/cltypes/solid/list_ssz.go +++ b/cl/cltypes/solid/list_ssz.go @@ -164,3 +164,23 @@ func (l *ListSSZ[T]) Truncate(length int) { l.list = l.list[:length] l.root = libcommon.Hash{} } + +func (l *ListSSZ[T]) ElementProof(i int) [][32]byte { + leaves := make([]interface{}, l.limit) + for i := range leaves { + leaves[i] = make([]byte, 32) + } + for i, element := range l.list { + root, err := element.HashSSZ() + if err != nil { + panic(err) + } + leaves[i] = root[:] + } + d := GetDepth(uint64(l.limit)) + branch, err := merkle_tree.MerkleProof(int(d), i, leaves...) + if err != nil { + panic(err) + } + return append(branch, merkle_tree.Uint64Root(uint64(len(l.list)))) +} diff --git a/cl/cltypes/solid/pending_attestation.go b/cl/cltypes/solid/pending_attestation.go index 02788f33089..ba61000b9fe 100644 --- a/cl/cltypes/solid/pending_attestation.go +++ b/cl/cltypes/solid/pending_attestation.go @@ -133,6 +133,8 @@ func (a *PendingAttestation) UnmarshalJSON(input []byte) error { InclusionDelay uint64 `json:"inclusion_delay,string"` ProposerIndex uint64 `json:"proposer_index,string"` } + tmp.AttestationData = NewAttestationData() + if err = json.Unmarshal(input, &tmp); err != nil { return err } diff --git a/cl/cltypes/solid/transactions.go b/cl/cltypes/solid/transactions.go index 40651ac85fd..77b216af109 100644 --- a/cl/cltypes/solid/transactions.go +++ b/cl/cltypes/solid/transactions.go @@ -11,7 +11,7 @@ import ( ) type TransactionsSSZ struct { - underlying [][]byte // underlying tranaction list + underlying [][]byte // underlying transaction list root libcommon.Hash // root } diff --git a/cl/cltypes/solid/uint64_raw_list.go b/cl/cltypes/solid/uint64_raw_list.go index e93b580a165..1107f195d85 100644 --- a/cl/cltypes/solid/uint64_raw_list.go +++ b/cl/cltypes/solid/uint64_raw_list.go @@ -158,7 +158,7 @@ func (arr *RawUint64List) MarshalJSON() ([]byte, error) { // convert it to a list of strings strs := make([]string, len(arr.u)) for i, v := range arr.u { - strs[i] = strconv.FormatInt(int64(v), 10) + strs[i] = strconv.FormatUint(v, 10) } return json.Marshal(strs) } diff --git a/cl/cltypes/sync_aggregator_selection_data.go b/cl/cltypes/sync_aggregator_selection_data.go new file mode 100644 index 00000000000..b5ff5fb6c70 --- /dev/null +++ b/cl/cltypes/sync_aggregator_selection_data.go @@ -0,0 +1,48 @@ +package cltypes + +import ( + "github.com/ledgerwatch/erigon-lib/types/clonable" + "github.com/ledgerwatch/erigon/cl/merkle_tree" + ssz2 "github.com/ledgerwatch/erigon/cl/ssz" +) + +// SyncAggregatorSelectionData data, contains if we were on bellatrix/alteir/phase0 and transition epoch. +type SyncAggregatorSelectionData struct { + Slot uint64 `json:"slot,string"` + SubcommitteeIndex uint64 `json:"subcommittee_index,string"` +} + +func (*SyncAggregatorSelectionData) Static() bool { + return true +} + +func (f *SyncAggregatorSelectionData) Copy() *SyncAggregatorSelectionData { + return &SyncAggregatorSelectionData{ + Slot: f.Slot, + SubcommitteeIndex: f.SubcommitteeIndex, + } +} + +func (f *SyncAggregatorSelectionData) EncodeSSZ(dst []byte) ([]byte, error) { + return ssz2.MarshalSSZ(dst, f.Slot, f.SubcommitteeIndex) +} + +func (f *SyncAggregatorSelectionData) DecodeSSZ(buf []byte, _ int) error { + return ssz2.UnmarshalSSZ(buf, 0, &f.Slot, &f.SubcommitteeIndex) + +} + +func (f *SyncAggregatorSelectionData) EncodingSizeSSZ() int { + return 16 +} + +func (f *SyncAggregatorSelectionData) HashSSZ() ([32]byte, error) { + return merkle_tree.HashTreeRoot(f.Slot, f.SubcommitteeIndex) +} + +func (f *SyncAggregatorSelectionData) Clone() clonable.Clonable { + return &SyncAggregatorSelectionData{ + Slot: f.Slot, + SubcommitteeIndex: f.SubcommitteeIndex, + } +} diff --git a/cl/cltypes/testdata/block_test_gnosis_deneb.json b/cl/cltypes/testdata/block_test_gnosis_deneb.json new file mode 100644 index 00000000000..c2af345200f --- /dev/null +++ b/cl/cltypes/testdata/block_test_gnosis_deneb.json @@ -0,0 +1 @@ +{"message":{"slot":"14447822","proposer_index":"114228","parent_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","state_root":"0x665bf93d70457bfc19331b087c832c8c8e1dff7531634f13389e9c9e21d5aeba","body":{"randao_reveal":"0x82cec086a0bea71975b38a613fad626d27e0ef4c7e182e0bb86e9cf0a39d8d7713df8d77a2cde191d6ebf558ce40adaa178192b5de8d1d860deaf89be80f87889e4e8d9531a4e5619f10095e65488cd7d0fd734636d35f2af372bf6288b50ea3","eth1_data":{"deposit_root":"0xb307c658f5371e6c00af0bcfb298159c1e1ae7051d0b92b4b376cbaea0a5acd8","deposit_count":"234127","block_hash":"0xfec853aacbe8af12e01b18eb6ee5e2cd11efe76db95aa27868a03ab66d4b76a3"},"graffiti":"0x7374616e645f7374726f6e675f62726f74686572730000000000000000000000","proposer_slashings":[],"attester_slashings":[],"attestations":[{"aggregation_bits":"0xffffffffdffffffeffffbffffffffffffffffffffffbefff3f","data":{"slot":"14447821","index":"16","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8dfbe9b47476a0f5e3a1668c7a2076eb6dbf04772ae9eb98521fc4165405f1ff3cc7d2f4e7912e946bc6dced4cb71378196223b4dadc264c462c47bae80f3ba0db7770436d9ebd32a62fd9e60db5b76510afa35f4219e201378912db55ee276f"},{"aggregation_bits":"0xffffdffffdfffbffffffffffffffffffffffdfefefffffff1f","data":{"slot":"14447821","index":"45","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x9160c3ae2525bd5920708cd88f9c39b29988ac7155f46cafd89748a2bf26422d7d1d66742343a56dbf3afbf6c42087f504fb5b9aa9098344de5ca2f66f3bedf11447dcafdc5c25c50a5861c2b134c5360dddd1d9633d7754d03bdc037344aedc"},{"aggregation_bits":"0xfffffffefffffffffefffffbfffffeffffdffffffffffdff1b","data":{"slot":"14447821","index":"34","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa642d94453c4c42a2a0f6e9c98b2da5839dfd606929355a573c113c3169e8041e26b93f14dab0091e1886b21cfa22ad616a50fe24ff23cadd9f421fa329b88b4545eac607ae43feebc8210d5be8d12fbb98edf2dd336add3d186f127c0146e7a"},{"aggregation_bits":"0xffffffffffdfffffffffff7fffff7fbffffffbf7ffffffef17","data":{"slot":"14447821","index":"35","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x89fd3a51b1a349a98b2b2c0eb049ea1310772f43f34bd350dba32240035fd9a4d043058bbba9ea88b9fcdab17e16357703fd43989dd03c9c828cfbb6756de3e49d900629385f5a5a107c99c6fa4096b08fc86f7cb9f76913f59a1e1872afcfb9"},{"aggregation_bits":"0xfffffffe7ffbb7ffffeffbfff7fffffffffffffffffffffb1f","data":{"slot":"14447821","index":"46","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x9546d61317b60093572d61770b5bb7ca9af29f02bd4262ab30f6ec4faaea6fbe59c065b29218b6f837f791922dd3d1fc0ca21076d52670309793b016565c4d3a32ea18159711deedbf32e84baf01a5fc692394a483b64e5b6f3eb9dd60e12e17"},{"aggregation_bits":"0xffeffffefefeffffffefffffffd7ffdeffffffffffbfffff1f","data":{"slot":"14447821","index":"23","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa05cfba0ddf6ede8a2d73c4f6adde717ce31248f887314c4aa8793eea22615e56e7e2d79e2ffe9cffa83c540dfdc993c13d47dbbae3ce7d36dbba66f93d295040c9013655c5feb369264de8b8f3531b38555f08775706a23df5a5747b5b3ac4c"},{"aggregation_bits":"0xffbfbfbfff7ff7ff7ffffeffffffffffffffffdefffffffd1f","data":{"slot":"14447821","index":"13","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb91de447354abdd46c226c45c5423e47cfb8c11a414654fb728488ad7078ae3fbc9bc29990b368a10e314bdb0d0412d717c87e2b28f155f813c850c202885c02271e4c5b559abae97c45957aee24098836b53fd8713f9f426570a2db88e09bf8"},{"aggregation_bits":"0xfffeffeffffffff3fffffff7fffffdfffffeffffffdff7fa3f","data":{"slot":"14447821","index":"36","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xaf68a56f32d5ae36718a0defe96e31cb6f7c6d068247188db73ea3ce199ad9ccaa5e887a51ea50bccc7d184c3b6bf9c30fd739b64ecc09ebda0f712082ce728ab280564d679e4229152780d376a3c7290829b193d674af7eb2a5dae205b172d6"},{"aggregation_bits":"0xdfffff7ffeffefffff7ffffffef7fffdffffefdfefffffff1f","data":{"slot":"14447821","index":"63","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x956d309ab838af5d5aa0df86bf698ed0a43a2b703db6780c75b083276eb52b1b2784080d6a7f23c1fc8727d8d29519e20d77504332a25d87f57b4f7b74cd8b81db5ab222ff45e99f8959d5f06d547345237307c6be11faf49ebe8e1cc047ac99"},{"aggregation_bits":"0xfffffefffdfff9fffbffffffffffbdffffeffefffbfffffb1f","data":{"slot":"14447821","index":"33","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x91117ef3041f0962b088a9a5d801d936bc0d08cf73e0faea8f51826b4e74c7f90ac4b51106e6abb6a47d46b8819d3f9d0a53dba218e3858b3813f5deb7e6a2c2d08a17ea741a8c095b021453b909285fb590feff2276eafb54ae9dbf6f5fee35"},{"aggregation_bits":"0xfffffbfffffff3ffffdffbffdf7fffafff7ffffffffffff71f","data":{"slot":"14447821","index":"51","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa1922cc8021d408dd10c1348ac06a2e59e918d0f349a9ee6080bc1177b69443e55b329854837567662a6d09f39d4eae007cf9c7918b285cdfbf74ac307fdddab906b8763a9e9477b512307ccb7f54b2b86d8c2bed7fef6bacd9325308a0c649d"},{"aggregation_bits":"0x7fffcfffffffefbbffffffffffffffffefb7ffffbff7ffff1f","data":{"slot":"14447821","index":"48","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x85b50ba93cd12388b71ad7cbfb766030a80121a9123542c871d5921345e89492768f3b8299d1e0bebab5e66f32af343c135f486364b2218695b9e8d4b55cef7e2a8a553217fd619ca88c8f1bd81637d06f3129cbc9f6453809c41090a42e12a2"},{"aggregation_bits":"0xfffffdffeffffffbfffffbfffdffffffffffff7efbbff7bf1f","data":{"slot":"14447821","index":"6","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8f9bea069430c0858bce09979fa2db0da8c9db8f02ea9e52f7a2b274b5636f5bba3806960959c24593d3cc48a8b6609610062d7e2503cc5f61b34b3e505b1df365a24902b11160b615b64d3adf2beb18fff8c02ad3f337d0419aff71afe6e97a"},{"aggregation_bits":"0xdffffefffbfff7efbffafff7ffffffffffeffffff7ffdfff1f","data":{"slot":"14447821","index":"21","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa115a796559b7cc8ac89ebb921fbb63b45172fe484e3c70a10db8389967ac5e9a33dd91418a3fe0c6d65473e27c95e6c149eaed8e39f6304e930dd53f9cdd8c979c8caa281e498699c18c7a5df4ece371d35a05a905687869f9de8ba4402f3c5"},{"aggregation_bits":"0xefffff7fffffdfff77feffdedffffbffefffffffffffffbf1f","data":{"slot":"14447821","index":"43","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x85069b98a5bd2c2842a190377f5d3bfd5fd1f23af30129d85d19325075181d10ac90916b60a85ea04b8fcdfb03e3adbd0d4539331b472b4598f2823089a4948a5c109d592096513e687a5303af26b741e524049f63c695346c487bccc5847fb4"},{"aggregation_bits":"0xffffffff7fffffffafffffcff7bf7ffffffff5fffbfbffff1f","data":{"slot":"14447821","index":"52","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb6708b5796ac044c4bcbb9d5aa3164ee8120cb3065be2eb85a7c623dc348a6806bdd6edd1d89d3dfb85a62448a8ce56c1056fd8d5330af10d033dd2558732989081482f3012f7f10d5d63463995d4378477a7ff8fefbec2b09b8498abd17c3f1"},{"aggregation_bits":"0xfffdbffdfbff3fbffff7fff7fffffffffffbfffffeffff7f1f","data":{"slot":"14447821","index":"17","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb38bbad15f7385ccae785d2eccde3be2db4847b9bd43c0cfc358e036ac3dd80543c1e942fc8d438335c28ecc213751a9050647bf372e7d98bcbdffaa302236d1871349ea3effcf816e3c77e0569b781f6918489fb95adad0c9fcc7c394c15933"},{"aggregation_bits":"0xffdeffffbffd77fffdffbfbf77ffefffffdfffffffffffff1f","data":{"slot":"14447821","index":"37","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8e68a2b4dd9903e7c8e2c32f5a15a0be3c24227747ee128e7b3bef75160e5b0c12367ea5b51772bf17a7113c1ac2788615bd7e25390ebb022cfb6c772c19937af39ea82e6b2256190ebf04b1f85934d273a85906a1b0d206f9323be7d0d33177"},{"aggregation_bits":"0xfffff3ff7ffffbffedfbfbf7ffffffffffffffff9befffff1f","data":{"slot":"14447821","index":"55","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa58233322cea3c4c8cca16b6c78a90be4cebdb3cf028bc1185019d26cb127a23ab99453f6d08ca473c0b8158167434ee1945a2e7f664aa4c4f0f3df8f572ba9adf32a15e890be892d1e98cd6f4688d19ab69036f2bd87c9c382563628e51283b"},{"aggregation_bits":"0x7ff7ffeffff7ffffbffdfffffbfeffdffeeffffffdffdeff1f","data":{"slot":"14447821","index":"53","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x99e0f1ab5ec33a2a7b54739319bbcdb98413b0442bc2130a045e4096c5667f82b72949f0beece9eee568f10b0394f5640ad20d183479bad33c1217effdb5987488b9e753b71b8956120c6f05efe4a3187d23244f3cf83f7c4c0af1565c42854d"},{"aggregation_bits":"0xffffffff7ffffffeffffe7ef7ffffffdfbfeff7ffdcfff7f1f","data":{"slot":"14447821","index":"22","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8715606610823b56a8e89a962dd384678120458788ea815259965488dd52ade7fd010ac097db7be74171c2645bdcb2d6065575fe13b9bc6f83b60182d8e5d1b478eb6c0116492793f59baa3788679942fefd3eb0af68c6b0b8cb986c1f9af79a"},{"aggregation_bits":"0xffffffff7efefffefffffffffeb9ffbfdf7fff7ffffdffff1e","data":{"slot":"14447821","index":"1","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x973cc1468f229c7eafa0a71a88b53827d0e8faf0029531c52e74faa157a52c58696148edd069c32edb83a09ff4da5b24008b06f60ce3d44e71da5c6a6282ce1b684e30993ee31f2dd6d809bc04bb191d5c40a2c224a1794dc6f817dd71a38e18"},{"aggregation_bits":"0xfffffffffffffddfffff77ff7ffffdfeeffbfffb7bf7fff71f","data":{"slot":"14447821","index":"31","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa468f229245ea230138ff90ff2a4a70878f445672994fe59df5be4a7186889561a0f8fc8615569cd1ada4659f0a96f3e132652c30d20b65a7102e5cef86075af42c28775a75b9975cded07bcd8f599a8df5cb4a5dbd2e7b7736569d29d35f083"},{"aggregation_bits":"0xff66fffffdffffffffffffffffffcbf3dffeffffbfffffff1d","data":{"slot":"14447821","index":"7","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa0d14b8362f30baf2fba738e6b099464189a1257396d160011b87a839f85a8c6264f8e961228ac5360167219793a8e6f0a0aa8451bb787764abafe3c77684d058f18a1adfc451483b8ae84312d65773e5bfebeb23c55a642292cfbc4b4c3ad4e"},{"aggregation_bits":"0xb59ffffffffffffffffffffdfffffffeedeffeffff9fffdf1f","data":{"slot":"14447821","index":"32","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa10bba491bb129cbdd626830c9b8f5585f793e4605eae97fad310d2496c0ffff24af757c613985dc36ebfae53f71162a19682a3237e2eb1b9d80040440d25704f74918b0d6fa44a4d8a6b53ba4d08d23072f27d82a08497a5a840e6749e35afe"},{"aggregation_bits":"0xfbffffffffff7f6fedfffffbfffffffdfffbdeffff7ffb7e1f","data":{"slot":"14447821","index":"25","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa15c8d3f4b8160f69f160d960909575fc84e1473fd1b11b3bb137fecf23d4d2d2f5d2940f044edff251453f525f4d4b904449348ddbf41194c55441ff022a6eb5915863de33c928e9162a4c82acb3d315c8ef90aef8c04851371550893989bac"},{"aggregation_bits":"0xfffffdfbffedffebffbffcefbfffffffff7fffff7ff7ffff1b","data":{"slot":"14447821","index":"4","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x9141b2538d50ac3d162fe1e97a5a9b4caeed5693278383b4bd932dbf56d28ad3b49a6958a0b4e0af6eec1926c00b78dc129ee3351981efdb11f91536bbb1b211fed6431b794b02d120c0cc8ad4b53cb9d634b909ab269d7e85c1b711ba7cbd26"},{"aggregation_bits":"0xffdfffffffdfaeffffffffef7bffbbfffffffff7fffbdffb1e","data":{"slot":"14447821","index":"41","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb55d11408859a986eb0bb4973af6828430143936c477ccd0ef97078fd12061e60abe7b21181534147edc46ae86e440eb03429e5a2d00c05f698e00a66764cdac049b794030e41dcf3db356485171ed09dad5096a011185240a109fa3aa3d1a51"},{"aggregation_bits":"0xfccfffefbffefffdfffeffefb77f7fffdfffffffffffdfff3f","data":{"slot":"14447821","index":"47","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa518ce29e45a6c24cbe6b38b4d6f54d4704674e3a64e6061ec0da15120d6879df9e8c1b385d7aba7cfaa58e47216c823052a2dbf1d442d720320f2e7c22345f60c27cf723f49331a61ab35765c9a2040518942e2d763aee0dbfcd79e5eca9bf0"},{"aggregation_bits":"0xfffbfaf3ffff6fffffffbfffffefdfff7ffffffffdf7fefe1f","data":{"slot":"14447821","index":"44","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x91826df53277af9619ab86ea9d18aa186822928d4c77f584d906d23bb8fccbdf6d9ef986e456b4a26730f5a8b65275eb185ca07468c09e9fae68bfa6f13d5e302cd1ec51fc3cef383b3471cf98278763a56904a3010641766a45a53b7e0ca132"},{"aggregation_bits":"0x7ffffff7ffff7fe7fdffff7fef7fffdfffffbbffff7ffdfb3e","data":{"slot":"14447821","index":"26","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8360c3782e204bc1beade8ab460836ac95b33adda62f746373f81fee158ccfd9ebb0d3994865bff4c63540d541de784701cf964b4825eadede036749ce4c7a1e38006e811ead643712ecb6c4c6ec402c7ec552a3b7f6df1c0c2ccc713b369948"},{"aggregation_bits":"0xfffffbfffeff7fffff7fcfffffdbfbefffedfedfefffffbf1f","data":{"slot":"14447821","index":"0","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x9168b8748b5c612c7ffe48c428a31d43d06cbbeed560a6d52c8684ae6cde26344133f5745d8d02624c75ba1d8f69b3a1130dcb99abc1f60ca9ce731561b44a0a5ee6681e1d99650ede964ba51e0f5b019505c9c23d6d997c0c74e949c585faa1"},{"aggregation_bits":"0xffffbfffffffd9ebfffffbffffeff7f7fffffcfffffffcf71d","data":{"slot":"14447821","index":"3","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x897e9240b72061db71db3a4edce287bd568d19df8139a358eba8bdf7d5783549af36999b555be17d32cde153921d191a0ccf1ce31fde967a2ba54b6722df5fdd76b3fb1af7924d67af84e77e34df1a874e4714989006c22c12c20f68e2a548df"},{"aggregation_bits":"0xeffefefffffffffe6ffffffffffffff8ffffff5fffffbf6f16","data":{"slot":"14447821","index":"19","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x947930c1680ea365edca6f7c0bcb1ab345a55af34201733f8fc6afe167427511f380eb257f381be289c38f3b8a7eff6b077dcc7f741b79890f4e5bcf99098ee75846b22d1ac497759911def725c247606a8e8ad1828c836beb08083c35b78e89"},{"aggregation_bits":"0xffdffefeffffbffbfff7ffffeedfff7dfffffefdfffbfffe1b","data":{"slot":"14447821","index":"38","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8de554ca9fb7a3e473fa90f048aa11576633e5adae53f511c882bf97f279a1cc224739b3e9bfb95c3fae4fa7587c4f1619423bd4086886209ea6cd100471e6191d9854434d5ea528e7e1041d244900cb834fc89a2e1121ac11b407bdff584a41"},{"aggregation_bits":"0xfeffffeedfffffaffd6ffffff7ff7fffffefbfffdefdffff1e","data":{"slot":"14447821","index":"49","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x86654ce19bf005964c103162806c00d85ccc3162a9598604b120f544cdec3aa022de71b12625c8906346da39afd552f30ee85266c4c24a23830ca391074270f2e250b28b33f572f6fa26c81009dfe31f1368830da8784ac537b7844a58821003"},{"aggregation_bits":"0xddff5fb9ffdfdfdffffb7ffffffff7fffeffffffffbfffdb1f","data":{"slot":"14447821","index":"56","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8f32d372d1b73e985c167f31e98c8726e5e289bcf48048bc65299f235c19dead10c3a9f03ef70fde13fd95c24198a4480b75d38102c7eb9a689256fdb57389dde23192f1725797b4c0c07031c72cb67a1ea69bfd160f29fd92be3a1a126279a2"},{"aggregation_bits":"0xeff77ffbfdffbfeffffbfff7ffffffef7efffffbfffcfbef1f","data":{"slot":"14447821","index":"59","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8b113571007e20165edbcdc5c2b4c441df7b73064cba6927e37ecce86fb5e50cee0ed4facaa5440087c32065372a6b0d04540b893d8e423b107538d3d1202dd3755b849d8a07bc72c647846d14f7a9f48f954694eae31aa0ac7033ca1e554c96"},{"aggregation_bits":"0xfffffff7ffbff7ffffffefbbffbfffffbffeffb7effff3ad1f","data":{"slot":"14447821","index":"12","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xac595f2b299ad24457f329091fe347edf41d0d9bcbede202d36e06c47b1e7fbc27ce9414de120238da77e1a380f7010d11ffc278129841fce9ad8bfe5b22fba53ad2e3bbb4d9a29af1c50cd1bc6d79a80f01f335195ec32dec2cea6f8f3f0862"},{"aggregation_bits":"0x3fffbffffdf7ffeefff7f7ffefffdfffdfbbffefffffafff1f","data":{"slot":"14447821","index":"8","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x825d5c4bc6dabf39834f89931c23be86fef0c04929525d13547c8bdc2cb2877f6a7ce8f2765c7c5be8d5002a9aa409b30eeda50bd89eddb640b85d851bf8438d56b9b3c89ce39e93e6af69393ce8ed952ba700e0762e50fac7c42c350c039088"},{"aggregation_bits":"0x73ffffeffff7fffff77ffefffefdeffffffffefefffeff6f1e","data":{"slot":"14447821","index":"18","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb3bd5c26d299ae09d90c2fb9bde9b0cef7e041c04d19815a00c21531212da4bcdb58741f255b082b8e08a88da9dbee590c509b3d74fb68e782072d4980604961b520396828e0ad74d122c00cbbe34507e89d9beb1d89e689fc1aeeda77fc4005"},{"aggregation_bits":"0xdffffffffeefefbdffdfff7dfffffdf7feffffbfbffffffd1c","data":{"slot":"14447821","index":"14","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x812fe38b47314472c719f990bd98e74068fbc717dde2f3aba550d6b3b6335822d128d0ff7908b0e52544f64ce3442ebf177a95ed2fbca2c2cfd5cedbbff0dde18b5d1be89c5c55bfc7106caa94e8a657b942e21f25c894b1d5802b4d276543d1"},{"aggregation_bits":"0x7bffdffffff4fef7effff3ffffdffff7defff7ffefffffff1f","data":{"slot":"14447821","index":"39","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa86385236a4aec8dd0a732d0d625a480d57350bdc32a5d98494717b3d8fbd3afb8b98cf3134c5748f97e7ec2a43ee0a5024ca199dc4919125614240429ddb3774b7a2bff7d850a1fc8d83ca284283e7dde22f5ac5aba749ebd79e140a8237330"},{"aggregation_bits":"0xfe6ffbdbffffffff7e7bfbffdfff7fffdfffbfbfffffffff1d","data":{"slot":"14447821","index":"11","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xaa42f332dcca1bfed1faa18904955628417d8e81238c344f7216c0d2afb30d72ba60a83811834e0613eea296c5587e8b0131ae68eefff6010bda28dec798592d19dadd1e2610fd81e0f54c633df2d82f84234406e7b599b05c37e7d5887a9a3b"},{"aggregation_bits":"0xebff7ffdfffbff7fffffbcfdffbef7fbdfffef7feff7ffff3f","data":{"slot":"14447821","index":"5","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x95106e71c4d39e8c20147e472dd2e0652a9ad208efae9db1a48dcd4d8255e15914cca72cd23be5308d488ffd31fc1ce9194d0c03889f01125c0950c80fe810945b4aa858b3a4737663e7a19151f6479cea9a331c5bd27805ce0c8b44ce5f49a8"},{"aggregation_bits":"0xffddffdfdfffeffef7fdbfff3ffffbdfbffdfffffbffbff71f","data":{"slot":"14447821","index":"50","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa08253ac22bed4c75ec34cbd8d024655856be6c1c586f15b4e94839bdfa0719f4dfc7e8b9ea7cbe105e912a207be9e2a12565fe3908b6af015622d5ee9a370189b7fff370946f736f385f4a22d728da3fad1ec1ee547c848944c2fe409c95b20"},{"aggregation_bits":"0xdfefffffbfffcfefffffbedfffcfbfffb7ffdeffffffdfbf1f","data":{"slot":"14447821","index":"40","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xacc82c823701931535cace63284fa2786cb9e483b8770111899de428db1785f8893db0478e364efc42031c56aa6e5e6d0e43260a665a01dd738b90bcd0f129697cfe83ba79f3bbd0a7eeb7863b474b36a3637e3826cc62442f505af824fcbcf6"},{"aggregation_bits":"0xfbeffbfdfffdcf5fffffffffffff7fffaffffef5f9fffeff1f","data":{"slot":"14447821","index":"10","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x9548b7e9715e8ecbd1838d2fe4616774c8edd57b01dce19b86259788d4e27b8c9e895daa6f7a6d002ce80aa294564175139f449d4fb0ca4a019f9f092817193d96e9c4c04d9c5e006c460e260b87aba30a924923c5ccaa49d34ce98b95fb290b"},{"aggregation_bits":"0xfffdcffeffffbfdffeffffdffeffbffbdfbefe7deffbe7ff3f","data":{"slot":"14447821","index":"57","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x832b87bccd45a98d317a5614fee43e8e7a3af5c9a6e444019896ce9fff92806379ec1c11d2f838eb745dfa40a53a921c18374af5b225efe75869feffcc6a8f083243570d74f946ec02d2061d2d97f2e3d9dae76b7e5f14434f80f5da4355c59c"},{"aggregation_bits":"0xb7fff7ffefffffddddbfffffdf7fffe7bfffef7fffbffffd1a","data":{"slot":"14447821","index":"28","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb89ac49d05cb37c04c689c42c4b7504019c1e8b24d339f327a93a47fc63c262abe05614bf981e3d860207979969280fb0a9e64ad94d6f642054c7ad382d799a45c201eec202c5aa04e75f6979ef06dc63894fcef0b4dede8cc7291797032b9f8"},{"aggregation_bits":"0x3ffbeffffffeff5ffaff7ffedefffbffbffffffbedfffebf1f","data":{"slot":"14447821","index":"30","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x830753bb6f307012214051b6c43fb183005c28ae9f5df7e274cf7734e46eeb2c4128f6a9e9525b30f8df24eb45b41afe0f4e64a9203fe3b28e1a91aff62038fdaf0505f4d3fde71ecf807214f2c88b017d81be1558d99a2776c29554acf77be0"},{"aggregation_bits":"0xfeffdffffffbfdfefe7fe7ffffdefff7bfffdfed9f7ffffb17","data":{"slot":"14447821","index":"2","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x948b3cfa1b98bc9ce14c5a1e9f466cddbb06eb5ed2640967175303d07cfc00be002732e9a66332b776939aaff1e4e24205fc297cbc11e8310d70041766ca6c8cbe569c99aa508d17078c6b5cb97ab86a7fd690565b109479c2600594505545a3"},{"aggregation_bits":"0xffef7ffefff77feffefffeffe5cfbfbfef7ffffbf7fbff6f1f","data":{"slot":"14447821","index":"62","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa86cb21c46cc2104bafc015df236e966f5d4d1e950482634cf9a56935284abf19277ab63a6b2cba799fd23cdea18567f1572c79a3138ce4cc268a20e2201bdf02ac9c7aa49ef326fe35588d9b579fcc51899b66e4164eb78c05c5f63428838d7"},{"aggregation_bits":"0xfd7fdffffe7fffffdff6f7ffffdadfff7ffeffffffe6fb7f1c","data":{"slot":"14447821","index":"24","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8e4dbc8c409ad8c487377dfa4d36a0d64c9f3b2e8cdc99c698d3397e26fb410e46596b49b4ff127ddfd0a12056fa72b1171751f188fa7b6a70d5e756fd7203e1cebb78452b502f5377d177cc12d20104072f1f23479bfd336dfe0308b911bd91"},{"aggregation_bits":"0xbffffffff7bdbff7b7ffeeffeff3f7fffbfffb9ff7ffbff717","data":{"slot":"14447821","index":"58","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xad9828b2a74973b046e973a816bee253067e97335b7841b970105cf8a9ac38e1162f2f77893474184c40fb7422588e5412304dad0cc554a7bd1ac9848c6cbf1ea3a95a1d31a80b014be0a41923ab34a713539f55c97a259c5878b714985be76a"},{"aggregation_bits":"0xffeffeffffe6ff3fffffffffe4fefffafbfbffbffffa6f7f1d","data":{"slot":"14447821","index":"61","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xab30e6d89d70055323317215c00699668c0b58e7a2f3f589e578afa6b739930e4e3a1d9ff59561e2be80557d8b67f9240e184121c6af49a51496be5aad639359f691bac9b64e2005dc321b3b80597d071abfeffcf1ad2cfe9308d45a3e0969f6"},{"aggregation_bits":"0xfd6f7ffdffd7dffff77cbefffffffffdfd9dffef6ffeffff1f","data":{"slot":"14447821","index":"29","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa4debed851d53c85133038e607cc2dc677e9c7a8f4aa93d0e5251524b5bd3dbd6e324a8c4496e556b7dba1eaba0dbd4302fdf16a3f408892566188980794dd39d1b16bacd789903bf9fa0637b6575442201c2876b6d3be32b2029d748f5ae335"},{"aggregation_bits":"0xffb5fff5fefdf77dfffdfdedef7f7fff7fffffffffaffeeb1f","data":{"slot":"14447821","index":"27","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xab71daa084b897a6045281df006aa1cc822b5e0b67523b0deb419cf35ca1f5bbe6f84b75d35b23a7e5a6ec32fcd03f250cb0812c3f92c40096447dea1edfab378200a4986e43f791a50f9bd069643867afc7309c23cc9c5bd8f6bf57677f3d64"},{"aggregation_bits":"0xfbfbf7ffbee5eeffffffff7adffff3fddfdfdbfdfb7fffff1f","data":{"slot":"14447821","index":"54","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb7540f09aa739c5f18e7f01e098eb7ccd8abd3556ebf803295077e9c7efb031820c4079cf2d1565e2fb6be3fcf6822d30dc68ddf7e4420fa184322c423ef9ba1f5b29896fdb3a957b1c43febb9d1c25df55ce8912fb216ba04a1eb0b9d083806"},{"aggregation_bits":"0xffbffeeffddffb7f77fffdffdddafedffddff3fff7befeff1f","data":{"slot":"14447821","index":"42","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb40f9bb0bb3ed33856278ad56f8fb39544393a93bd963cf5e88b18edb9a4265831f88d5ce32991d692a1383d8a40bcba161ada255ab8ffa4b93854f9d6b2427a5ca7777fbf728ea3967cd5417a36f646fc9c907e1f12897f7f3d0a38033cc338"},{"aggregation_bits":"0x67ffb7fff75f7fbfffcdfbffffffffafbafff75f7ffffdff17","data":{"slot":"14447821","index":"9","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa674c8f1c0d503a9c6769fb1a25a7b00d990d0bcb316c6f56b645eff626b86a36dd7ac288d336960fcf0535329a31337107d9f19327b65165d6c6d5de51056c5240b409a4d72d291416c5bed77fc304a6709aa0341c77d4ea190241b46e09779"},{"aggregation_bits":"0xfff7fdeb77df9ffddffffdbff6aff7fdffff78fefffffbfe1f","data":{"slot":"14447821","index":"60","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x951e5cc0db0927b26394a0b48530f66f3f4689d96338f1d93b95e8fdfa98a020f6f51b527c36d5fa209ff3a5598f7e3b1089010a4f5710fb139589909faa6ad3d2da0fd826ad025f47d4e32253a9d546caddd5d7605f89c585e9a7e7c330a0c0"},{"aggregation_bits":"0xffffff7f79bf7ff5ffff97feeffbbfff6feff7afffdcfbfe17","data":{"slot":"14447821","index":"15","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x92e4931053b877f969c77daa83898f8f481d9db6be29acd76984b20158324167acac545e987c79fc108bc7206700ccd50f168c43303d60ce3e4065f8e5c5efb90ff5ebc956958c21403fe11cb7afa3f7296e31aeabedcffafadc5a77228b2df6"},{"aggregation_bits":"0xff7e77f9fffdaefdf256efbdeffdffff9ef9ef7fff7fdfff13","data":{"slot":"14447821","index":"20","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb49aed88fc8cb24c21d3f0a53879927a0148d0dc2c2e682a101badddc7521e90e10986e7d0257d97454451c115dc3db904cbd5d0585cc1a46ba7ec77708a030fb1bfa64dbb5015147f76065e9dd2404872083339da6e62a4f7b8c4fa3c802e98"},{"aggregation_bits":"0x00100404000420040008040000000000080000100040040810","data":{"slot":"14447818","index":"2","beacon_block_root":"0x8bae3a10595d03817ddb5de3e27255e5dc9934dcb21b179401f07b60a511bcb9","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa45b5547fe895ce3812db03ea3773b498c707867fad1c15639bacb5cb71ebd9ae8f524adc912dace7cc2a7c03b2afc6316a2676df398ad1dddaafa44531842d2cc00a03e0dc6c59031244b59ab6510d2a2cecb58d29ba27072d485b0d60e8eb8"},{"aggregation_bits":"0xfffffffbffffffffffdf7fffffffffffffffffdfffffffff1e","data":{"slot":"14447820","index":"51","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x83571a31340435091b2eaf409466631942b7c8e04a6de9241dc686467b8b753e35f1004b0f335cc072068147c82290b812127a862b8b9af43c97a79c47cd775ca5f350818ab96948d012f958ee60b26df1d9175c9a46b87d2fa40909f617b61c"},{"aggregation_bits":"0xffffffffd77fffffbffbf7ffffbfbedfffffffffffffffff17","data":{"slot":"14447820","index":"20","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xad95c1520c10f455c8c217057d74df73ff27cd0f35ef2d549a0fed05a07efa09f2205f6e85eff9a192346d61abfbd23703b646ade68782e6afa357e2eda5f77499a28d0efdd82d28a4ddbd0e671db1c58cd9b3b66fc2dd5fe5ae2a6cf811a0a1"},{"aggregation_bits":"0xf7ffffbff6dfd7ffffbbffffeffefffbfff5fdffffefffff1e","data":{"slot":"14447820","index":"3","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xab9a5cc9153dd35201f023ce7186433edb9c5a39bd9b182c783c08aab23b01a88dcb5321544e4036ed4a86375dcc736e010856e3b205f24828e1377cc9c0ee53c3777b4115e7472c9dbee9192a264a2280e26e349abed7e45fcb6d9bbd9d7e6c"},{"aggregation_bits":"0x0002024000041100c000200100000002004001000000001010","data":{"slot":"14447820","index":"10","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa9648e70dac0718737c9cbe39dd9e0fbd7437856c304da62fa960f0fbb72a10e334964fa37b035fa625f3f1e4cbe7fe1077b3fdb2a09e12a9fe4c6856048777828dcefba53dba70f70baa9b14ac4559ae860dc77ba3a77ddf4fad4b7df1413f2"},{"aggregation_bits":"0x00000000000000000000001000000000000000000000000410","data":{"slot":"14447821","index":"41","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x823560cf5811d5f180fa22e7acbc70605abe22cd6df0362316436e0067ca8d6b65319c38554a7c640666ffab36625cac17864375bf78c92116db48ebee416991932819d93421bd5d7d319c1f0e647e3c409dba4ab76fd76e0df0d2c7c52cbcbc"},{"aggregation_bits":"0x00000800000000000000000000100000000000000000000010","data":{"slot":"14447820","index":"32","beacon_block_root":"0x11b8885c134ac41dcfa5d75d3a7961c116c45e4da3b5779c8295b05e9b2341ad","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa9143c15409d9a62d52d1f8ad69681ff4010cec6af0bf5f60a7a84d9f490c927ff248fe439cbdf0671e2eaa147fca10d0bae83b2e141ec1ec6f2f2ced21a3ce759ae15c0d30ce3a49e8d54d6e42693c37c9f1f5a4e38520513f61aefa96a439a"},{"aggregation_bits":"0x7ffffffebfffffffdffff7ffffbffb9ffffbf7ffffffffff1f","data":{"slot":"14447819","index":"50","beacon_block_root":"0x11b8885c134ac41dcfa5d75d3a7961c116c45e4da3b5779c8295b05e9b2341ad","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x83b75e7454a17313cf51cfe49e1d98d277fca90a7a26ce635b7f2f29c93698e7d6e361081161ca4bca9a4f06304ef194179d7aaf382776a8f2c249ab5eae888c0bcdd15ad53324b83e6d519b50b4f012297a1dd4711a0ff0a4a9bdc776290230"},{"aggregation_bits":"0x00180000200000000000000000000000010201000000020010","data":{"slot":"14447817","index":"25","beacon_block_root":"0x153b785a103ad0caefaba3dc9a11b0e0da481a7807dd2d5e649772d3e978285b","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb3cc14d4e6271c14fa5f873f9113c15ecb737fc98ffb9ac5e608863f2c81dabac42c14cf64f446c24ef7c329efbe54861286fbb00aaacbf94f47c686130366ac6df07172b23a15d77c03366df4936beb0aabd16a09a4211532ecefe0be83d9a7"},{"aggregation_bits":"0x7dfff7f77f7f7fe7fcdeff7faf67fddfbfffbbf7ff7ffffb3e","data":{"slot":"14447821","index":"26","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x832dc4dc592bc5ddf9de862e2d96c5467c91e5274f7e0c320d1db6307c06119a9590f1d5e12ea06df4526a16df5720c4015c22cb1c80f72f2e070946e211d39c3f3f16aedbefe2eed5ceb8db4ee298976fda133e7520ed2008bd9331bd92a215"},{"aggregation_bits":"0xfeffdffffffbfdfefe7ee7ffffdefff7bfffdfeddf7ffffb17","data":{"slot":"14447821","index":"2","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xaa3e707ca15ae54849682ba202f1f112dd8985b86f3f62d1a2a990794d29b5718f554ce262d7eb192f47a04c571da1b817f4425a848bbbbed5713bbd0b334aff48e031b1361e1745724fd40db4eb70e090364f8a87f328d2375122aee7bc028b"},{"aggregation_bits":"0xfefffffedfffffafed6d7faff7ef7ffff7efb7ffdefd7fff1e","data":{"slot":"14447821","index":"49","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x969fe41bf8a556c094b9afee2e6c9beca8bcc31d84cd9def2193b4f0dff940cc39068f4faa746937712a31725e30f89b0435e3f8033d8a2bd6cb7b697518dc8d8a63c24edcf8155678293e12e7970e21fc0e50545975f551d25abd2980ea2632"},{"aggregation_bits":"0xffef7ffefd777ffbdefffefee5cfbfbfef6f7ffbf7fbff471f","data":{"slot":"14447821","index":"62","beacon_block_root":"0xc8895be3912aa2240e9d0f34f1b9cfe5b558fcf2e7addb8607e9c9db570e0d33","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8b2285d32f054c2ae2761e6c294d11ac1e7757aee9299abcfca17455882a51e2750cb8bd31f02c6d907c5d4117f5fb2113fc297fcee618d1b59c68da3598878bb8fe444b805654467c311d87a2ec70c369e0377eca791cf4a4c8227f3d48ce6b"},{"aggregation_bits":"0xbdff9e7b3efd7ff532ceef7ff7df6de6ff7ffef3dfc3bbd51e","data":{"slot":"14447820","index":"45","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xa9d1fecdd8e86fa084781e7db77a14b3c35c7251de0fa1d2bfac3d1b546881359238bb65ccc0453f78c064ecee51e3f81041da4a2c25c0b75099b87573468e32df4296c2d392caa2f6b36dfb7903d75fbbd8d6bea3a9f4cd3643a51e4204a25c"},{"aggregation_bits":"0x7f7fdfeffffbffffedfdbffffffffffffffffffffffff7ff1f","data":{"slot":"14447819","index":"41","beacon_block_root":"0x11b8885c134ac41dcfa5d75d3a7961c116c45e4da3b5779c8295b05e9b2341ad","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb6b1a0782d8f2b925cf556123e9d3acf8a5f7075dcee5ff0791651bc4c6109c36901d424ad7cf69654046f8c7f8c3f3a0665e968a14d2acc17481c77269a789e7daf8effb68cccf7fcfc2915ef4dbf23abc950e74016524e82b23bbb139d27d6"},{"aggregation_bits":"0x00000420000000000800800000400110000000004800600012","data":{"slot":"14447818","index":"22","beacon_block_root":"0x8bae3a10595d03817ddb5de3e27255e5dc9934dcb21b179401f07b60a511bcb9","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb2943886a774f9875f8db991e4726dc6f5f145b5a06744b19e74be0cbfbbb8a524c71c966194049c699812fae1aae39814d52d4edf53a02a9154d811b42d0ab6e00339b9b89493481ec1dd28aaec5335beb9f50085024dab8b5ce0cf819d6263"},{"aggregation_bits":"0xfeeffffffffffeeff7ffffffffbf7fffff7fffffff7fffff1f","data":{"slot":"14447819","index":"14","beacon_block_root":"0x11b8885c134ac41dcfa5d75d3a7961c116c45e4da3b5779c8295b05e9b2341ad","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xaf0fbe81ef83e1602dcb31f1394d44804591f8ca1bb1c918f1862d05e9adefe8a9ddd7aeb94748728268f78a159c23de018e796bc2899dbc9f3cf25ae21b4f17ab6e4e4fe6a7bf27ecbfcc7c499de5f877031bea834ff16a6d3669d38e5bd29c"},{"aggregation_bits":"0xffffffffeffffddfffffffffffffffffffff7fffff5fbfff3f","data":{"slot":"14447820","index":"7","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8bf2a7d02e32bb7f9e97ba3ca1bdb7160c28ad7d6216720a179e7a4375807cd699d9dd9faa7cb1175df4a6716928ede70ab5ed9f6c0d4f0908879887f0bd759006929ea72dc05f3418b5ec5f0c82b39e7cd376b8b68dba13b612e8270f1f0102"},{"aggregation_bits":"0xfffff9fff7fefffbffffffef7fffff7ffffffbefffbfffff1f","data":{"slot":"14447820","index":"24","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xac77db3640266705a3ac0ce6272af96ced90e992b45f4025e02f858acf0e3bdba15cff674232fe947910d1ed5abdf14705b4f24e9513ef1a125420faa00d0644caa5394708da7b71de668bae51df04ebf16a394c6ebd2231099458c72f8f5d3d"},{"aggregation_bits":"0x7fffffef5effff3fbfff7fffdfdef7fefefbfffffbeffbef1f","data":{"slot":"14447820","index":"5","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x9574f644c87a4dbed9907fca7e4ce14199a3bc8d9301e8ad4e605e7a8962266e590887f9c20f6c201012284036a3bcdf00d5a0eea5bb93d5980e2dfddd0d1f359eb5b1a8e28c7da1e4b6e91592a8d238116232bc4473b0957945e8d55efb347d"},{"aggregation_bits":"0xffffffdffffffbdfffffffbeffffffffffffffff7fffffff1e","data":{"slot":"14447820","index":"26","beacon_block_root":"0x3c262834175e42a97cd39fe11a4a086671b867b9e628947645fdf3ba6b4df8a0","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xaedd5b23408a38b13a8173fd2e0c97c3892a994433032e9ed73b9a2f746aa2691246538573728d7d17d4c96bff7f8fd50fd0404599d264f27734818827e83a2ce0362f1907bbf844d32b3b33c9ad47c1fdcb586df0868e1d342c180c422077da"},{"aggregation_bits":"0x00000000000000000000000000000000000000000000800020","data":{"slot":"14447820","index":"38","beacon_block_root":"0x11b8885c134ac41dcfa5d75d3a7961c116c45e4da3b5779c8295b05e9b2341ad","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0x8010562f63735ef3ce7de36fae4e12b17f229da76a3b6873e9a15753fa1874cdb28c4116debcac323d650d76e1e591ca028bb3a3623ecca6f87ccdc8406a8ef522a23610639c1bbe745e7d7780addb5af851a7dbc490729c277a10f7d5b6785f"},{"aggregation_bits":"0x00000000000000000000000000000000000000200000000010","data":{"slot":"14447816","index":"32","beacon_block_root":"0x437ed67a6d18fda85da8c220ac84b1c01617c2a14b0801f096252da69b67ef48","source":{"epoch":"902987","root":"0x5bd3cbe6f13bb6925debb887f3b33fe1ec4b1a8c20c2ff116bc095fbe1be9187"},"target":{"epoch":"902988","root":"0xc42a9f4adaa17eee518b0958fda9fb0b0ee3840a6086e3125c34724af21668f3"}},"signature":"0xb4215cc52e241913852c9118027af8295a6b7198c8cae9473cfd1d08f802fb666b9458a9a4d8e0a28e84a29b36499dfd05f4ae3f9c3f38e45f36373ad3f25cf09b2349b88bb0a524ae78623d08f673b6cbb3148a61869bdf5871653f772a2a6d"}],"deposits":[],"voluntary_exits":[],"sync_aggregate":{"sync_committee_bits":"0xbffaffffffffffffbfffffdffffffdffefff7fffbffffffffffff7fff7bfffffffbef7ffefff6ffffffffdfe7fffffffffffffdfffffdfffffffffbbfffdfff7","sync_committee_signature":"0x97065d9a55e8b9a321516c3d960a5f0226bba2f54e3d35fe921ca64f3366be83f6d2a9db8c20dc0ceff9bc80cc09df020a36ffeb391ba6a4c3db9d24f4f07a57e07be4f2c2c7afe64a8e644c53e29d1988033fb50b67f4ca0992445bc73353db"},"execution_payload":{"parent_hash":"0x73347f809a398087e519868059eec77d380bb3f5eae4eb1530621fd980b5c537","fee_recipient":"0x24a91c580c6d864702ce750269d9f0270c21f889","state_root":"0xe8f9b07e11c504aa6b0e5ff49e9fd22118f90fbe884968b4f247689c4fb98608","receipts_root":"0xab330711ed57f05ed3aba0e36abf67a7f76ab4cc45ea117761a83605a4c4d8d3","logs_bloom":"0x100a801001011008010100000008000000201200504100000800000280800000000000e0020a8000c00c0010600090100020002000110804042000020100a8002182009004000200084000080040000290200000402000044210000001001000004000100283728100408000a00008800141000800440008010000501010280404d24889218100b10014001000020010020300302102000209080841000020881005002008ac28004101208880108200004008010000004c0a00801005000300000d8c0640100602500002000000400020010002380814000002108824c0302900000000083400020320000000800005080188000101110a1020480604141404","prev_randao":"0x365ecf22576edcf2df118a76dda9c6a7490a4a20045dfe3a8d7211f4156d5924","block_number":"33081545","gas_limit":"17000000","gas_used":"648873","timestamp":"1711232450","extra_data":"0x4e65746865726d696e64","base_fee_per_gas":"9","block_hash":"0x26d4270569964373b8e6b3a3d631f17e27ab642cd465a25c3a26a06c6ff8976a","transactions":["0xf8ef8304760f850147d357008401036640942541889d03f8c1225f24e863487ec46bc18c671b80b884c204642c000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000df56f65263178653301e5bc008c107db0572809281eba0cfe6066ef8120a6a10e612bb07d5efed007e0152527aa8f5100ddee7fa368c47a009755ecc2369f4116ed7d6f5252ff295389c3e8a7d35b12ea073775c1a8a0ce7","0xf9034e833cbbdf848f0d18008305b4b49411bb2991882a86dc3e38858d922559a385d506ba80b902e4b143044b00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000910000000000000000000000009714ccf1dedef14bab5013625db92746c1358cb400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000065ffaa1800000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000e40223536e0000000000000000000000000000000000000000000000000000000000000060882d044c2c0eeea1377b5fa06d0bd614a799ead24f22b32267aa4051649f08b80000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000005101000000000000102d000075a000000000000000000000000026da582889f59eaae9da1f063be0140cd93e6a4f000075c100000000000000000000000026da582889f59eaae9da1f063be0140cd93e6a4f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082f43fcaaf69171cabb69698877d06096844dad52de4fc56e2027833668139a370555c06f331bd3259535a645da83b014065deccc34d6c862915f4ee446c1c642b1bb687cc287b332ffe4b916147c1af17adfd9a74cdeccbac00a2a13a5ae555f2e76397c8177074e6666a33ded422841cd7207690ed67a1eddad8784162f49468431b00000000000000000000000000000000000000000000000000000000000081eba0ac81d05c5c60341bd31d3f73cfffb4898c4e8b1f9014dc06bb939857c1168413a07b6136e85f12fa4f36ad0dfa2b770dd3b763fdf1512d0c91a9ba92992f42b777","0xf902ee832bf879848f0d1800831b40d094d56e4eab23cb81f43168f9f45211eb027b9ac7cc80b90284b143044b000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000009100000000000000000000000038de71124f7a447a01d67945a51edce9ff49125100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000065ffaa1800000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000084704316e5000000000000000000000000000000000000000000000000000000000000006f78851096be649a355d676874b51a075c12da9a6a2bb619f749a599a12d8863c7000000000000000000000000000000000000000000000000000000000000001478851096be649a355d676874b51a075c12da9a6a2bb619f749a599a12d8863c70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000827ecbdf7a9c8e5582f414e04a1ba9dcc55ef400cdef6acf0e2b180458cc96aab91a8286a1a6a7fff80bc5fc64329e4c5ba568800c7f48efeca301c82b81d25a731b869c724d175bc69d0dfef3063cdd23417a1e48d45a404d2ee59419dd3727d0871d985b95c22630641d07ba05d9f6d920130e2b877029952b21e31329aaaa5c4e1b00000000000000000000000000000000000000000000000000000000000081eba0a8c0f27d89df8680e6f004a0ae2c07df7ccde6d920285374b95ee8ceb4c100b3a07cef04fd2cbb8eefe83983558d5c8bdc90f9d7447de8f77a4fbe520587b4b54a","0x02f902746483014f3f84891736f684891737088302cbad94ad09d78f4c6b9da2ae82b1d34107802d380bb74f80b902047c39d1300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000d6000000000000000000000010000000d600000000000000000000000073fbd25c3e817dc4b4cd9d00eff6d83dcde2dff6b79f7d6aa829cff637000960b8779bf99656b2115e467f50087562992fdcd9e500018ae78e8f7412a8dc26cfbd22bf1147c59872480330a8d319658dcbad9bb6481779781912968e8fb4cbe875a2a7a10419d1169ddbb699b2153410b697f11d79ba73281cf9b1dc55197a2d2e68f7abbe6b02fe11a6da3d286ed6130400814967b171c95704fdc2286cc293ee5d9caff6c342265e81e176c6bdc8f2bd6d9b10ee02add5bd1c00000000000000000000000000000000000000000000000000000000000000000000000000000000008d0300018ae700000089000000000000000000000000574e69c50e7d13b3d1b364bf0d48285a5ae2df5600000064000000000000000000000000fd34afdfbac1e47afc539235420e4be4a206f26d0000000000000000000000001edf2f5413e240323c08e9a850140ae784dfbfb60000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000c001a0b830b2480d81787dedcae8d918a4fb9368e64e953528df036e20d1fd19d9fe8ea01b0acdc7d4d9c6cfb5eef8c4b5213595d8b2c2c9bf2ea7f19830dd59e082021e","0x02f9049464830391af8483215600848321560083019b8694021dda17ff875d6b6f012de3c14f8d0d3c34dfcc80b90424729ad39e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001f000000000000000000000000416a0eaef1b61a9cd8e6da826c2fd2ec4800c225000000000000000000000000c19722ebe5c177e5bedca9b2fd7df0cdde9c85ee00000000000000000000000091caeb79b559c36499f9c1214d9303f102161c5b000000000000000000000000b9db432219857d028a630094cb043e7f0cd916f4000000000000000000000000342788af4270d1823f47d45dcbd3504e9f11af05000000000000000000000000988e0e665f9a40270b245e7897b0c258067ca3830000000000000000000000000b37877bc15e8f257ff92c2455aa9c99184f3f0200000000000000000000000082073dcaec6bf64d27b0436266846f32744ca20d000000000000000000000000900895745fabc68de6957a632f53d2e1fc0a7b470000000000000000000000008906d3d8bce4cb53bae376aa6cd2b185d926d325000000000000000000000000bedde657808a6a80184a1980cf48a15121f6a350000000000000000000000000427b9961264db44e026951c3095c939f08024b6f000000000000000000000000a52e50ed7f9ac7de867faf7ecda4ee5b159482ef0000000000000000000000002ffcc5f073f478c043070a54148c6ca526e5bac10000000000000000000000003c3e0004a8ed538fb3b4211d62d87376bc079999000000000000000000000000399b7ac50db9b8a36e182c861841564a10b904dc00000000000000000000000026c79c391a83a1e2b8687dee6449f4bf50073056000000000000000000000000bec6fa853e5fac4d61c901d679ebb43d3d1fe4b70000000000000000000000001525a91ef75a03c95e1657981c653a7fcc5534e40000000000000000000000008d4a5dce520ca6361f8baef8b4cf46a34c788cc0000000000000000000000000e9b11c5eb3d0ba3186859b8f93b8004e38ad5a5a000000000000000000000000687ec44afe80f4bc34ce1bc6ab2ecb75e103af6b000000000000000000000000d82b4973cf8cc60a95b020b986f7e77bc03543f6000000000000000000000000a3972a9648302be4383de5c485ef91a92dac1abe000000000000000000000000e1dba1cddfaf9d1c9b2fe34638fc8bf3a6514c0f0000000000000000000000004508f6bdea0a609e91b821d3fe29d9c7a1e14adc00000000000000000000000064e5e429b23fcd6cd4736f8dcb40dd45a90a0d7b0000000000000000000000003677a5315fbe1b0b9c27a484de9b3dc5a55cfe98000000000000000000000000865f2082850288dd504e09f99afd92b24f6048a900000000000000000000000086ec325f4d85c0a051b779c2d670d993a2b8d10f0000000000000000000000007fad43984966004887fecf620cc7c51e0af7627ac080a0491aed0dc9328e06ed30419790d95c43856ce2f7a0070f419da0da83153c3302a069cbdcc6b40cf1092c581cf74ae76f888b63c13ec6ae4cd90b8ca2526e882429","0x02f901b364830391b08483215600848321560082a9ac94021dda17ff875d6b6f012de3c14f8d0d3c34dfcc80b90144729ad39e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000080000000000000000000000005fc580b05926cd49268093a47e0b45759acfafb700000000000000000000000070443cca4795e56284ab8949f0d5ca27ce543ad30000000000000000000000008c88b7eb91879e0441ba6f688b8c800566a9369900000000000000000000000072c46dc6f6fa87d0d454ac3f03b723f578120bb8000000000000000000000000a9cacf9f7bf323554c43bd85b28bef6d7b40fad7000000000000000000000000049199072c77b966a50e8000f0bb316f329356a000000000000000000000000030d73c186763586ee20171f3d16f9c914061cc510000000000000000000000001344d05f52580ec73c1886383ad9d88e909558aec080a0834e1c86065d9aef59b8d5e6a44d640287c04687af2e9c16c1e163d1a77b3578a031e111eb0c83a226ec06ffddc8f57bf100ab39e6fc47f2b6ea79111dc18ea2de","0x02f904146483036785848321560084832156008301719294a765a188b6ed6bf931b3de0326e73a2da8e5f5e980b903a4729ad39e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000353ff658a123a7db3baded64a0486f4476a4d91c0000000000000000000000007a5e68313f0a221eac0c212ac5d3331e1ca32af4000000000000000000000000da20765e8bc3128816e1a356e95fb264a9c05ff900000000000000000000000083776b981d808b479b0b20a95f8b76c2aea4312a000000000000000000000000fdb8a293dfb13d421caaa5b0bafae280dc4ceac800000000000000000000000017e36c908f0abddd014e233a3e239dbdbf2d67ee000000000000000000000000f2553af86bc7a59fdb02e4e5b2899566280f74a4000000000000000000000000ac642fc51492a5fc6d258f8725b759d1a43ee1310000000000000000000000005be4717408e21360a1001c36c9dba172f6c335a6000000000000000000000000e7852bff6095045b61ac827ae6bc4d3910fba3e2000000000000000000000000717b2f65e70aa617aa54d667bbb2f5e5084ce12a000000000000000000000000d9e5e079229baefee74d7527bfa03a93c70a45ed000000000000000000000000b833fa798cb4e8e79fbb4772d4cd05c93b2d148100000000000000000000000085cb52c8ad16cfd4efcd61fe7e43cb61c7bd38a5000000000000000000000000fc3a60ea497b0450d88f86ca34b38c8dbf55d8cd0000000000000000000000007a1436eac3acdbac4c25f6b598f458d74d3e2cfa000000000000000000000000bc7e24c29ab20b8e2d8cd38c44bad86963d459580000000000000000000000008a6a1a60fd4d6ea27bf14b0e4861323aecf08fb4000000000000000000000000545f9d790c67d56a278481ae2c3a84f87ebd9701000000000000000000000000afc3ad716af4843eb24eb9ddac6e1ec8aa53ec36000000000000000000000000c3e860838109a909db9b1796779fb14ae281b67200000000000000000000000052b583ec9443822734d011507263c7a05fe677b1000000000000000000000000dcfd58141f2aadfdcbb27d08faba27bbb133c73000000000000000000000000044f40e5f2843c4f7b2d099f77d8c238148dee969000000000000000000000000925139d77edad111d494ae32890bf85439051c16000000000000000000000000124b995d0266149fd2ec932c8629e786581e14d4000000000000000000000000c05f5ac9ac874d3399eda982860f005fd9703a12c080a02516739cc32da267167b456b1b2d374372a5978447408841d10fa569a7037bcaa0310007a3f0c2efd7f1cb1c04c8802edc94d8bfd2853416d72fdec8c3f6c45c72","0xf86d822284847735940082520894ee8bba37508cd6f9db7c8ad0ae2b3de0168c1b368749ff3406d8d3558081eca05e665d22ee784a03dbcb0280da657ab5572c6bcd2cb8c34a5ecc8b1b2a485445a00a1ba54ca3a005ec51550d9850e98c71fb6b4d111dc37a1102b9c3e16e62de6e","0x02f9019464831cfb3784745836538474583665830201e89418bf3c917fd75618a491f31c9ef94116d762738b80b90124f7b773e5000000000000000000000000e3548b967861541fc043d2479a0639b176151398000000000000000000000000fd5d8deb4adf9468ab10b2cf5c9b4bd01471add9000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000014636e766c62666e616d636a733733636d676864300000000000000000000000000000000000000000000000000000000000000000000000000000000000000009506c6179324561726e0000000000000000000000000000000000000000000000c001a0b4496fc433cf228acc83bee3c781d9bed62ba5da19102fd5eea0d7c19a76adaaa04edabff745ef0b1086d2886c7735d02381d13e62622514f0040ebf0103cf6b37"],"withdrawals":[{"index":"30708552","validator_index":"138975","address":"0x564e604eda8c878021126c06084a4da4e1a960cb","amount":"11958115"},{"index":"30708553","validator_index":"138976","address":"0x564e604eda8c878021126c06084a4da4e1a960cb","amount":"12037692"},{"index":"30708554","validator_index":"138977","address":"0x564e604eda8c878021126c06084a4da4e1a960cb","amount":"12019556"},{"index":"30708555","validator_index":"138978","address":"0x564e604eda8c878021126c06084a4da4e1a960cb","amount":"12053759"},{"index":"30708556","validator_index":"138979","address":"0x564e604eda8c878021126c06084a4da4e1a960cb","amount":"12023837"},{"index":"30708557","validator_index":"138980","address":"0x564e604eda8c878021126c06084a4da4e1a960cb","amount":"12004621"},{"index":"30708558","validator_index":"138981","address":"0x564e604eda8c878021126c06084a4da4e1a960cb","amount":"11991711"},{"index":"30708559","validator_index":"138982","address":"0x564e604eda8c878021126c06084a4da4e1a960cb","amount":"11989443"}],"blob_gas_used":"0","excess_blob_gas":"0"},"bls_to_execution_changes":[],"blob_kzg_commitments":[]}},"signature":"0xab6272567b3815df8c3d676f9a650340b5c5a4d94ab94a717de5fb8868142802d6b05627b32727d683dde4841a55277f18a01770f6f390f1dc014df014829e66deee7cc4f78b723b29148a958058b52227fdbb9bf46829721f0dd69acb0fedd8"} \ No newline at end of file diff --git a/cl/cltypes/testdata/block_test_gnosis_deneb.ssz b/cl/cltypes/testdata/block_test_gnosis_deneb.ssz new file mode 100644 index 00000000000..f82deb8c38d Binary files /dev/null and b/cl/cltypes/testdata/block_test_gnosis_deneb.ssz differ diff --git a/cl/cltypes/validator.go b/cl/cltypes/validator.go index 645b4fec5a0..c2eea4cbd81 100644 --- a/cl/cltypes/validator.go +++ b/cl/cltypes/validator.go @@ -1,6 +1,8 @@ package cltypes import ( + "encoding/json" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/types/clonable" "github.com/ledgerwatch/erigon-lib/types/ssz" @@ -52,6 +54,16 @@ type Deposit struct { Data *DepositData `json:"data"` } +func (d *Deposit) UnmarshalJSON(buf []byte) error { + d.Proof = solid.NewHashVector(33) + d.Data = new(DepositData) + + return json.Unmarshal(buf, &struct { + Proof solid.HashVectorSSZ `json:"proof"` + Data *DepositData `json:"data"` + }{d.Proof, d.Data}) +} + func (d *Deposit) EncodeSSZ(dst []byte) ([]byte, error) { return ssz2.MarshalSSZ(dst, d.Proof, d.Data) } diff --git a/cl/cltypes/withdrawal.go b/cl/cltypes/withdrawal.go index ffaae3234d9..c76b29c6738 100644 --- a/cl/cltypes/withdrawal.go +++ b/cl/cltypes/withdrawal.go @@ -11,10 +11,10 @@ import ( ) type Withdrawal struct { - Index uint64 `json:"index,string"` // monotonically increasing identifier issued by consensus layer - Validator uint64 `json:"validatorIndex,string"` // index of validator associated with withdrawal - Address libcommon.Address `json:"address"` // target address for withdrawn ether - Amount uint64 `json:"amount,string"` // value of withdrawal in GWei + Index uint64 `json:"index,string"` // monotonically increasing identifier issued by consensus layer + Validator uint64 `json:"validator_index,string"` // index of validator associated with withdrawal + Address libcommon.Address `json:"address"` // target address for withdrawn ether + Amount uint64 `json:"amount,string"` // value of withdrawal in GWei } func (obj *Withdrawal) EncodeSSZ(buf []byte) ([]byte, error) { diff --git a/cl/domino/cases/binaryblob/case.go b/cl/domino/cases/binaryblob/case.go deleted file mode 100644 index c088b94e94f..00000000000 --- a/cl/domino/cases/binaryblob/case.go +++ /dev/null @@ -1,91 +0,0 @@ -package binaryblob - -import ( - "context" - "fmt" - "io/fs" - "math" - "strconv" - - "github.com/ledgerwatch/erigon/cl/abstract" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/erigon/cl/utils" - "github.com/spf13/afero" -) - -type Case struct { - CheckpointFs afero.Fs - DominoFs afero.Fs - - GenesisConfig *clparams.GenesisConfig - BeaconConfig *clparams.BeaconChainConfig -} - -func (c *Case) stupidSeek(slot uint64) (fs.FileInfo, error) { - files, err := afero.ReadDir(c.CheckpointFs, "") - if err != nil { - return nil, err - } - if len(files) == 0 { - return nil, fmt.Errorf("no checkpoints") - } - file := files[0] - diff := math.MaxInt - for _, v := range files { - i, err := strconv.Atoi(v.Name()) - if err != nil { - continue - } - if uint64(i) > slot { - break - } - newDiff := int(slot) - i - if newDiff < diff { - file = v - } - } - return file, nil -} - -// Checkpoint should get the state at or before the slot selected -func (c *Case) Checkpoint(ctx context.Context, slot uint64) (abstract.BeaconState, error) { - fi, err := c.stupidSeek(slot) - if err != nil { - return nil, err - } - bts, err := afero.ReadFile(c.CheckpointFs, fmt.Sprintf("%s/data.bin", fi.Name())) - if err != nil { - return nil, err - } - _, version := c.EpochAndVersion() - beaconState := state.New(c.BeaconConfig) - err = beaconState.DecodeSSZ(bts, version) - if err != nil { - return nil, err - } - return beaconState, nil -} - -// Dominos should get a block -func (c *Case) Domino(ctx context.Context, slot uint64) (*cltypes.SignedBeaconBlock, error) { - bts, err := afero.ReadFile(c.DominoFs, fmt.Sprintf("%d/data.bin", slot)) - if err != nil { - return nil, err - } - _, version := c.EpochAndVersion() - blk := cltypes.NewSignedBeaconBlock(c.BeaconConfig) - err = blk.DecodeSSZ(bts, version) - if err != nil { - return nil, err - } - return blk, nil -} - -func (c *Case) EpochAndVersion() (epoch uint64, version int) { - epoch = utils.GetCurrentEpoch(c.GenesisConfig.GenesisTime, c.BeaconConfig.SecondsPerSlot, c.BeaconConfig.SlotsPerEpoch) - version = int(c.BeaconConfig.GetCurrentStateVersion(epoch)) - return - -} diff --git a/cl/domino/domino.go b/cl/domino/domino.go deleted file mode 100644 index f6f8ecdbd72..00000000000 --- a/cl/domino/domino.go +++ /dev/null @@ -1,129 +0,0 @@ -package domino - -import ( - "context" - "fmt" - - "github.com/ledgerwatch/erigon/cl/abstract" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/transition/machine" -) - -// Case defines an interface for storage of dominoes. it should be thread safe -type Case interface { - // Checkpoint should get the state at or before the slot selected - Checkpoint(ctx context.Context, slot uint64) (abstract.BeaconState, error) - // Dominos should get a block - Domino(ctx context.Context, slot uint64) (*cltypes.SignedBeaconBlock, error) -} - -// Exhibit is for managing multiple domino runs -type Exhibit struct { - c Case - m machine.Interface -} - -func NewExhibit(c Case, m machine.Interface) *Exhibit { - return &Exhibit{ - c: c, - m: m, - } -} - -// GetRun gets a run. -// in the future, the exhibit can be smarter and possibly reuse runs -// caller should call topple when they need to. -func (e *Exhibit) GetRun(ctx context.Context, slot uint64) (*Run, error) { - r := NewRun(e.c, e.m) - err := r.Reset(ctx, slot) - if err != nil { - return nil, err - } - return r, nil -} - -// In the future, we can potentially reuse runs. for now we don't -func (e *Exhibit) PutRun(*Run) { -} - -func NewRun(c Case, m machine.Interface) *Run { - return &Run{ - c: c, - m: m, - } -} - -// A domino run is not thread safe and should be protected by a external mutex if needed to be called thread safe -type Run struct { - c Case - m machine.Interface - - s abstract.BeaconState -} - -// Reset will reset the domino stack to the nearest checkpoint -func (r *Run) Reset(ctx context.Context, slot uint64) (err error) { - // if we are not resetting for initialization, we check if we actually need to reset - if r.s != nil { - if r.s.Slot() == slot { - return nil - } - } - r.s, err = r.c.Checkpoint(ctx, slot) - if err != nil { - return err - } - return nil -} - -func (r *Run) State() abstract.BeaconState { - return r.s -} - -func (r *Run) Current() uint64 { - if r.s == nil { - return 0 - } - return r.s.Slot() -} - -func (r *Run) ToppleTo(ctx context.Context, slot uint64) error { - if r.s == nil { - return fmt.Errorf("No state set") - } - if r.s.Slot() == slot { - return nil - } - if r.s.Slot() > slot { - return fmt.Errorf("Cannot restack dominos (%d -> %d)", r.s.Slot(), slot) - } - res := make(chan *cltypes.SignedBeaconBlock, 1) - errCh := make(chan error) - go func() { - for i := r.s.Slot(); i <= slot; i++ { - blk, err := r.c.Domino(ctx, i) - if err != nil { - errCh <- err - return - } - res <- blk - } - close(res) - }() - for { - select { - case <-ctx.Done(): - return ctx.Err() - case val, ok := <-res: - if !ok { - return nil - } - err := machine.TransitionState(r.m, r.s, val) - if err != nil { - return err - } - case err := <-errCh: - return err - } - } -} diff --git a/cl/fork/fork.go b/cl/fork/fork.go index 9121b768853..b7aeb2adaba 100644 --- a/cl/fork/fork.go +++ b/cl/fork/fork.go @@ -14,17 +14,12 @@ package fork import ( - "encoding/binary" "errors" - "fmt" - "math" "sort" - "time" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/types/ssz" - "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/utils" ) @@ -32,119 +27,6 @@ import ( var NO_GENESIS_TIME_ERR error = errors.New("genesis time is not set") var NO_VALIDATOR_ROOT_HASH error = errors.New("genesis validators root is not set") -func ForkDigestVersion(digest [4]byte, b *clparams.BeaconChainConfig, genesisValidatorRoot libcommon.Hash) (clparams.StateVersion, error) { - var ( - phase0ForkDigest, altairForkDigest, bellatrixForkDigest, capellaForkDigest, denebForkDigest [4]byte - err error - ) - phase0ForkDigest, err = ComputeForkDigestForVersion( - utils.Uint32ToBytes4(b.GenesisForkVersion), - genesisValidatorRoot, - ) - if err != nil { - return 0, err - } - - altairForkDigest, err = ComputeForkDigestForVersion( - utils.Uint32ToBytes4(b.AltairForkVersion), - genesisValidatorRoot, - ) - if err != nil { - return 0, err - } - - bellatrixForkDigest, err = ComputeForkDigestForVersion( - utils.Uint32ToBytes4(b.BellatrixForkVersion), - genesisValidatorRoot, - ) - if err != nil { - return 0, err - } - - capellaForkDigest, err = ComputeForkDigestForVersion( - utils.Uint32ToBytes4(b.CapellaForkVersion), - genesisValidatorRoot, - ) - if err != nil { - return 0, err - } - - denebForkDigest, err = ComputeForkDigestForVersion( - utils.Uint32ToBytes4(b.DenebForkVersion), - genesisValidatorRoot, - ) - if err != nil { - return 0, err - } - switch digest { - case phase0ForkDigest: - return clparams.Phase0Version, nil - case altairForkDigest: - return clparams.AltairVersion, nil - case bellatrixForkDigest: - return clparams.BellatrixVersion, nil - case capellaForkDigest: - return clparams.CapellaVersion, nil - case denebForkDigest: - return clparams.DenebVersion, nil - } - return 0, fmt.Errorf("invalid state version") -} - -func ComputeForkDigest( - beaconConfig *clparams.BeaconChainConfig, - genesisConfig *clparams.GenesisConfig, -) ([4]byte, error) { - if genesisConfig.GenesisTime == 0 { - return [4]byte{}, NO_GENESIS_TIME_ERR - } - if genesisConfig.GenesisValidatorRoot == (libcommon.Hash{}) { - return [4]byte{}, NO_VALIDATOR_ROOT_HASH - } - - currentEpoch := utils.GetCurrentEpoch(genesisConfig.GenesisTime, beaconConfig.SecondsPerSlot, beaconConfig.SlotsPerEpoch) - // Retrieve current fork version. - currentForkVersion := utils.Uint32ToBytes4(beaconConfig.GenesisForkVersion) - for _, fork := range forkList(beaconConfig.ForkVersionSchedule) { - if currentEpoch >= fork.epoch { - currentForkVersion = fork.version - continue - } - break - } - return ComputeForkDigestForVersion(currentForkVersion, genesisConfig.GenesisValidatorRoot) -} - -func ComputeNextForkDigest( - beaconConfig *clparams.BeaconChainConfig, - genesisConfig *clparams.GenesisConfig, -) ([4]byte, error) { - if genesisConfig.GenesisTime == 0 { - return [4]byte{}, NO_GENESIS_TIME_ERR - } - if genesisConfig.GenesisValidatorRoot == (libcommon.Hash{}) { - return [4]byte{}, NO_VALIDATOR_ROOT_HASH - } - - currentEpoch := utils.GetCurrentEpoch(genesisConfig.GenesisTime, beaconConfig.SecondsPerSlot, beaconConfig.SlotsPerEpoch) - // Retrieve next fork version. - nextForkIndex := 0 - forkList := forkList(beaconConfig.ForkVersionSchedule) - for _, fork := range forkList { - if currentEpoch >= fork.epoch { - nextForkIndex++ - continue - } - break - } - nextForkIndex-- - if nextForkIndex == len(forkList)-1 { - return [4]byte{}, nil - } - nextForkIndex++ - return ComputeForkDigestForVersion(forkList[nextForkIndex].version, genesisConfig.GenesisValidatorRoot) -} - type fork struct { epoch uint64 version [4]byte @@ -160,66 +42,6 @@ func forkList(schedule map[libcommon.Bytes4]uint64) (f []fork) { return } -func ComputeForkDigestForVersion(currentVersion [4]byte, genesisValidatorsRoot [32]byte) (digest [4]byte, err error) { - var currentVersion32 libcommon.Hash - copy(currentVersion32[:], currentVersion[:]) - dataRoot := utils.Sha256(currentVersion32[:], genesisValidatorsRoot[:]) - // copy first four bytes to output - copy(digest[:], dataRoot[:4]) - return -} - -func ComputeForkId( - beaconConfig *clparams.BeaconChainConfig, - genesisConfig *clparams.GenesisConfig, -) ([]byte, error) { - digest, err := ComputeForkDigest(beaconConfig, genesisConfig) - if err != nil { - return nil, err - } - - currentEpoch := utils.GetCurrentEpoch(genesisConfig.GenesisTime, beaconConfig.SecondsPerSlot, beaconConfig.SlotsPerEpoch) - - if time.Now().Unix() < int64(genesisConfig.GenesisTime) { - currentEpoch = 0 - } - - var nextForkVersion [4]byte - nextForkEpoch := uint64(math.MaxUint64) - for _, fork := range forkList(beaconConfig.ForkVersionSchedule) { - if currentEpoch < fork.epoch { - nextForkVersion = fork.version - nextForkEpoch = fork.epoch - break - } - nextForkVersion = fork.version - } - - enrForkId := make([]byte, 16) - copy(enrForkId, digest[:]) - copy(enrForkId[4:], nextForkVersion[:]) - binary.BigEndian.PutUint64(enrForkId[8:], nextForkEpoch) - - return enrForkId, nil -} - -func GetLastFork( - beaconConfig *clparams.BeaconChainConfig, - genesisConfig *clparams.GenesisConfig, -) [4]byte { - currentEpoch := utils.GetCurrentEpoch(genesisConfig.GenesisTime, beaconConfig.SecondsPerSlot, beaconConfig.SlotsPerEpoch) - // Retrieve current fork version. - currentFork := utils.Uint32ToBytes4(beaconConfig.GenesisForkVersion) - for _, fork := range forkList(beaconConfig.ForkVersionSchedule) { - if currentEpoch >= fork.epoch { - currentFork = fork.version - continue - } - break - } - return currentFork -} - func ComputeDomain( domainType []byte, currentVersion [4]byte, diff --git a/cl/fork/fork_test.go b/cl/fork/fork_test.go index f20fc90c9ac..63befb5a7bf 100644 --- a/cl/fork/fork_test.go +++ b/cl/fork/fork_test.go @@ -16,122 +16,9 @@ package fork import ( "testing" - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/utils" "github.com/stretchr/testify/require" ) -// Testing Fork digest -func TestMainnetForkDigest(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - digest, err := ComputeForkDigest(&beaconCfg, &genesisCfg) - require.NoError(t, err) - _, err = ComputeForkId(&beaconCfg, &genesisCfg) - require.NoError(t, err) - require.Equal(t, [4]byte{0xbb, 0xa4, 0xda, 0x96}, digest) -} - -func TestMainnetForkDigestWithNoGenesisTime(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - genesisCfg.GenesisTime = 0 - _, err := ComputeForkDigest(&beaconCfg, &genesisCfg) - require.ErrorIs(t, err, NO_GENESIS_TIME_ERR) -} - -func TestMainnerForkDigestWithNoValidatorRootHash(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - genesisCfg.GenesisValidatorRoot = common.Hash{} - _, err := ComputeForkDigest(&beaconCfg, &genesisCfg) - require.ErrorIs(t, err, NO_VALIDATOR_ROOT_HASH) -} - -func TestGoerliForkDigest(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.GoerliNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.GoerliNetwork] - digest, err := ComputeForkDigest(&beaconCfg, &genesisCfg) - require.NoError(t, err) - _, err = ComputeForkId(&beaconCfg, &genesisCfg) - require.NoError(t, err) - require.Equal(t, [4]uint8{0xa7, 0x5d, 0xcc, 0xf2}, digest) -} - -func TestSepoliaForkDigest(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.SepoliaNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.SepoliaNetwork] - digest, err := ComputeForkDigest(&beaconCfg, &genesisCfg) - require.NoError(t, err) - _, err = ComputeForkId(&beaconCfg, &genesisCfg) - require.NoError(t, err) - require.Equal(t, [4]uint8{0xd3, 0x1f, 0x61, 0x91}, digest) -} - -// ForkDigestVersion -func TestMainnetForkDigestPhase0Version(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - digest, err := ComputeForkDigestForVersion(utils.Uint32ToBytes4(beaconCfg.GenesisForkVersion), genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - version, err := ForkDigestVersion(digest, &beaconCfg, genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - require.Equal(t, clparams.Phase0Version, version) -} - -func TestMainnetForkDigestAltairVersion(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - digest, err := ComputeForkDigestForVersion(utils.Uint32ToBytes4(beaconCfg.AltairForkVersion), genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - version, err := ForkDigestVersion(digest, &beaconCfg, genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - require.Equal(t, clparams.AltairVersion, version) -} - -func TestMainnetForkDigestBellatrixVersion(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - digest, err := ComputeForkDigestForVersion(utils.Uint32ToBytes4(beaconCfg.BellatrixForkVersion), genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - version, err := ForkDigestVersion(digest, &beaconCfg, genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - require.Equal(t, clparams.BellatrixVersion, version) -} - -func TestMainnetForkDigestCapellaVersion(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - digest, err := ComputeForkDigestForVersion(utils.Uint32ToBytes4(beaconCfg.CapellaForkVersion), genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - version, err := ForkDigestVersion(digest, &beaconCfg, genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - require.Equal(t, clparams.CapellaVersion, version) -} - -func TestMainnetForkDigestDenebVersion(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - digest, err := ComputeForkDigestForVersion(utils.Uint32ToBytes4(beaconCfg.DenebForkVersion), genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - version, err := ForkDigestVersion(digest, &beaconCfg, genesisCfg.GenesisValidatorRoot) - require.NoError(t, err) - require.Equal(t, clparams.DenebVersion, version) -} - -// ComputeForkNextDigest -func TestMainnetComputeForkNextDigest(t *testing.T) { - beaconCfg := clparams.BeaconConfigs[clparams.MainnetNetwork] - genesisCfg := clparams.GenesisConfigs[clparams.MainnetNetwork] - beaconCfg.ForkVersionSchedule = make(map[common.Bytes4]uint64) - beaconCfg.ForkVersionSchedule[utils.Uint32ToBytes4(uint32(clparams.Phase0Version))] = 0 - beaconCfg.ForkVersionSchedule[utils.Uint32ToBytes4(uint32(clparams.BellatrixVersion))] = 210010230210301201 - digest, err := ComputeNextForkDigest(&beaconCfg, &genesisCfg) - require.NoError(t, err) - require.Equal(t, [4]uint8{0xe, 0x6, 0x3, 0x18}, digest) -} - func TestMainnetComputeDomain(t *testing.T) { domainType := [4]uint8{0x1, 0x0, 0x0, 0x0} currentVersion := [4]uint8{0x3, 0x0, 0x0, 0x0} diff --git a/cl/freezer/.gitignore b/cl/freezer/.gitignore deleted file mode 100644 index 007b73ee656..00000000000 --- a/cl/freezer/.gitignore +++ /dev/null @@ -1 +0,0 @@ -test_output diff --git a/cl/freezer/freezer.go b/cl/freezer/freezer.go deleted file mode 100644 index a6793f93688..00000000000 --- a/cl/freezer/freezer.go +++ /dev/null @@ -1,16 +0,0 @@ -package freezer - -import "io" - -type Freezer interface { - Getter - Putter -} - -type Getter interface { - Get(namespace, object, id string, extra ...string) (data io.ReadCloser, sidecar []byte, err error) -} - -type Putter interface { - Put(data io.Reader, sidecar []byte, namespace, object, id string, extra ...string) error -} diff --git a/cl/freezer/freezer_test.go b/cl/freezer/freezer_test.go deleted file mode 100644 index e5ca0637d5c..00000000000 --- a/cl/freezer/freezer_test.go +++ /dev/null @@ -1,100 +0,0 @@ -package freezer_test - -import ( - "os" - "path" - "strconv" - "sync/atomic" - "testing" - - "github.com/ledgerwatch/erigon/cl/freezer" - "github.com/stretchr/testify/assert" -) - -func runBlobStoreTest(t *testing.T, b *freezer.BlobStore) { - var err error - // put bad item into obj - err = b.Put(nil, "../../../test", "a", "b") - assert.ErrorIs(t, err, os.ErrInvalid) - // get bad item - _, err = b.Get("../../../test", "a", "b") - assert.ErrorIs(t, err, os.ErrInvalid) - // put item into obj - orig := []byte{1, 2, 3, 4} - err = b.Put(orig, "test", "a", "b") - assert.NoError(t, err) - - // get item from obj - ans, err := b.Get("test", "a", "b") - assert.NoError(t, err) - assert.EqualValues(t, orig, ans) - - ans, err = b.Get("test", "b", "a") - assert.ErrorIs(t, err, os.ErrNotExist) - assert.Nil(t, ans) -} - -func runSidecarBlobStoreTest(t *testing.T, b *freezer.SidecarBlobStore) { - var err error - // put bad item into obj - err = b.Put(nil, nil, "../../../test", "a", "b") - assert.ErrorIs(t, err, os.ErrInvalid) - // get bad item - _, _, err = b.Get("../../../test", "a", "b") - assert.ErrorIs(t, err, os.ErrInvalid) - - // put item into obj - orig := []byte{1, 2, 3, 4} - orig2 := []byte{5, 6, 7, 8} - err = b.Put(orig, orig2, "test", "a", "b") - assert.NoError(t, err) - - // get item from obj - ans, sidecar, err := b.Get("test", "a", "b") - assert.NoError(t, err) - assert.EqualValues(t, orig, ans) - assert.EqualValues(t, orig2, sidecar) - - ans, sidecar, err = b.Get("test", "b", "a") - assert.ErrorIs(t, err, os.ErrNotExist) - assert.Nil(t, ans) - assert.Nil(t, sidecar) - - // put item without sidecar - err = b.Put(orig2, nil, "test", "a", "c") - assert.NoError(t, err) - - // get item from obj - ans, sidecar, err = b.Get("test", "a", "c") - assert.NoError(t, err) - assert.EqualValues(t, orig2, ans) - assert.Nil(t, sidecar) -} - -func testFreezer(t *testing.T, fn func() (freezer.Freezer, func())) { - t.Run("BlobStore", func(t *testing.T) { - f, cn := fn() - defer cn() - runBlobStoreTest(t, freezer.NewBlobStore(f)) - }) - t.Run("SidecarBlobStore", func(t *testing.T) { - f, cn := fn() - defer cn() - runSidecarBlobStoreTest(t, freezer.NewSidecarBlobStore(f)) - }) -} - -func TestMemoryStore(t *testing.T) { - testFreezer(t, func() (freezer.Freezer, func()) { - return &freezer.InMemory{}, func() {} - }) -} - -func TestRootPathStore(t *testing.T) { - cnt := atomic.Uint64{} - c := func() (freezer.Freezer, func()) { - base := path.Join("test_output", strconv.Itoa(int(cnt.Load()))) - return &freezer.RootPathOsFs{base}, func() { os.RemoveAll(base) } - } - testFreezer(t, c) -} diff --git a/cl/freezer/fs_freezer.go b/cl/freezer/fs_freezer.go deleted file mode 100644 index 017dee8ff8f..00000000000 --- a/cl/freezer/fs_freezer.go +++ /dev/null @@ -1,65 +0,0 @@ -package freezer - -import ( - "io" - "os" - "path" - "path/filepath" - "strings" -) - -const RootPathDataFile = "data.bin" -const RootPathSidecarFile = "sidecar.bin" - -type RootPathOsFs struct { - Root string -} - -func (f *RootPathOsFs) resolveFileName(namespace string, object string, id string, extra ...string) (string, error) { - root := filepath.Clean(f.Root) - j := filepath.Join(root, namespace, object, id) - if !strings.HasPrefix(j, root) { - return "", os.ErrInvalid - } - return j, nil -} - -func (f *RootPathOsFs) Get(namespace string, object string, id string, extra ...string) (data io.ReadCloser, sidecar []byte, err error) { - infoPath, err := f.resolveFileName(namespace, object, id) - if err != nil { - return nil, nil, err - } - fp, err := os.Open(path.Join(infoPath, RootPathDataFile)) - if err != nil { - return nil, nil, err - } - blob, err := os.ReadFile(path.Join(infoPath, RootPathSidecarFile)) - if err == nil { - sidecar = blob - } - return fp, sidecar, nil -} - -func (f *RootPathOsFs) Put(data io.Reader, sidecar []byte, namespace string, object string, id string, extra ...string) error { - infoPath, err := f.resolveFileName(namespace, object, id) - if err != nil { - return err - } - _ = os.MkdirAll(infoPath, 0o755) - fp, err := os.OpenFile(path.Join(infoPath, RootPathDataFile), os.O_TRUNC|os.O_CREATE|os.O_RDWR, 0o755) - if err != nil { - return err - } - defer fp.Close() - _, err = io.Copy(fp, data) - if err != nil { - return err - } - if sidecar != nil { - err = os.WriteFile(path.Join(infoPath, RootPathSidecarFile), sidecar, 0o600) - if err == nil { - return err - } - } - return nil -} diff --git a/cl/freezer/mem_freezer.go b/cl/freezer/mem_freezer.go deleted file mode 100644 index 60521dd79a3..00000000000 --- a/cl/freezer/mem_freezer.go +++ /dev/null @@ -1,72 +0,0 @@ -package freezer - -import ( - "bytes" - "io" - "io/fs" - "os" - "path" - "path/filepath" - "strings" - "sync" -) - -type InMemory struct { - blob sync.Map - - mu sync.RWMutex -} - -func (f *InMemory) save(name string, b io.Reader) { - buf := new(bytes.Buffer) - buf.ReadFrom(b) - f.blob.Store(name, buf) -} - -func (f *InMemory) get(name string) (*bytes.Buffer, error) { - val, ok := f.blob.Load(name) - if !ok { - return nil, fs.ErrNotExist - } - cast, ok := val.(*bytes.Buffer) - if !ok { - panic("incorrect item in sync map... this should never happen") - } - return cast, nil -} - -func (f *InMemory) resolveFileName(namespace string, object string, id string, extra ...string) (string, error) { - j := filepath.Join("inmem", namespace, object, id) - if !strings.HasPrefix(j, "inmem") { - return "", os.ErrInvalid - } - return j, nil -} - -func (f *InMemory) Get(namespace string, object string, id string, extra ...string) (data io.ReadCloser, sidecar []byte, err error) { - infoPath, err := f.resolveFileName(namespace, object, id) - if err != nil { - return nil, nil, err - } - fp, err := f.get(path.Join(infoPath, RootPathDataFile)) - if err != nil { - return nil, nil, err - } - blob, err := f.get(path.Join(infoPath, RootPathSidecarFile)) - if err == nil { - sidecar = blob.Bytes() - } - return io.NopCloser(fp), sidecar, nil -} - -func (f *InMemory) Put(data io.Reader, sidecar []byte, namespace string, object string, id string, extra ...string) error { - infoPath, err := f.resolveFileName(namespace, object, id) - if err != nil { - return err - } - f.save(path.Join(infoPath, RootPathDataFile), data) - if sidecar != nil { - f.save(path.Join(infoPath, RootPathSidecarFile), bytes.NewBuffer(sidecar)) - } - return nil -} diff --git a/cl/freezer/store.go b/cl/freezer/store.go deleted file mode 100644 index 078142995d1..00000000000 --- a/cl/freezer/store.go +++ /dev/null @@ -1,53 +0,0 @@ -package freezer - -import ( - "bytes" - "io" -) - -type BlobStore struct { - f Freezer -} - -func NewBlobStore(f Freezer) *BlobStore { - return &BlobStore{f: f} -} - -func (b *BlobStore) Get(namespace, object, id string) ([]byte, error) { - o, _, err := b.f.Get(namespace, object, id) - if err != nil { - return nil, err - } - defer o.Close() - return io.ReadAll(o) -} - -func (b *BlobStore) Put(dat []byte, namespace, object, id string) error { - return b.f.Put(bytes.NewBuffer(dat), nil, namespace, object, id) -} - -type SidecarBlobStore struct { - f Freezer -} - -func NewSidecarBlobStore(f Freezer) *SidecarBlobStore { - return &SidecarBlobStore{f: f} -} - -func (b *SidecarBlobStore) Get(namespace, object, id string) (blob []byte, sidecar []byte, err error) { - a, bb, err := b.f.Get(namespace, object, id) - if err != nil { - return nil, nil, err - } - defer a.Close() - sidecar = bb - blob, err = io.ReadAll(a) - if err != nil { - return - } - return -} - -func (b *SidecarBlobStore) Put(dat []byte, sidecar []byte, namespace, object, id string) error { - return b.f.Put(bytes.NewBuffer(dat), sidecar, namespace, object, id) -} diff --git a/cl/freezer/utils.go b/cl/freezer/utils.go deleted file mode 100644 index d7b2052186e..00000000000 --- a/cl/freezer/utils.go +++ /dev/null @@ -1,32 +0,0 @@ -package freezer - -import ( - "bytes" - "fmt" - "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" - - "github.com/ledgerwatch/erigon-lib/types/ssz" -) - -type marshalerHashable interface { - ssz.Marshaler - ssz.HashableSSZ -} - -func PutObjectSSZIntoFreezer(objectName, freezerNamespace string, numericalId uint64, object marshalerHashable, record Freezer) error { - if record == nil { - return nil - } - buffer := new(bytes.Buffer) - if err := ssz_snappy.EncodeAndWrite(buffer, object); err != nil { - return err - } - id := fmt.Sprintf("%d", numericalId) - // put the hash of the object as the sidecar. - h, err := object.HashSSZ() - if err != nil { - return err - } - - return record.Put(buffer, h[:], freezerNamespace, objectName, id) -} diff --git a/cl/gossip/gossip.go b/cl/gossip/gossip.go index 05d335273ed..e2e2a76fc73 100644 --- a/cl/gossip/gossip.go +++ b/cl/gossip/gossip.go @@ -1,25 +1,55 @@ package gossip import ( - "strconv" + "fmt" "strings" ) const ( - TopicNameBeaconBlock = "beacon_block" - TopicNameBeaconAggregateAndProof = "beacon_aggregate_and_proof" - TopicNameVoluntaryExit = "voluntary_exit" - TopicNameProposerSlashing = "proposer_slashing" - TopicNameAttesterSlashing = "attester_slashing" - TopicNameBlsToExecutionChange = "bls_to_execution_change" - - TopicNamePrefixBlobSidecar = "blob_sidecar_" + TopicNameBeaconBlock = "beacon_block" + TopicNameBeaconAggregateAndProof = "beacon_aggregate_and_proof" + TopicNameVoluntaryExit = "voluntary_exit" + TopicNameProposerSlashing = "proposer_slashing" + TopicNameAttesterSlashing = "attester_slashing" + TopicNameBlsToExecutionChange = "bls_to_execution_change" + TopicNameSyncCommitteeContributionAndProof = "sync_committee_contribution_and_proof" + + TopicNameLightClientFinalityUpdate = "light_client_finality_update" + TopicNameLightClientOptimisticUpdate = "light_client_optimistic_update" + + TopicNamePrefixBlobSidecar = "blob_sidecar_%d" + TopicNamePrefixBeaconAttestation = "beacon_attestation_%d" + TopicNamePrefixSyncCommittee = "sync_committee_%d" ) -func TopicNameBlobSidecar(d int) string { - return TopicNamePrefixBlobSidecar + strconv.Itoa(d) +func TopicNameBlobSidecar(d uint64) string { + return fmt.Sprintf(TopicNamePrefixBlobSidecar, d) +} + +func TopicNameBeaconAttestation(d uint64) string { + return fmt.Sprintf(TopicNamePrefixBeaconAttestation, d) +} + +func TopicNameSyncCommittee(d int) string { + return fmt.Sprintf(TopicNamePrefixSyncCommittee, d) } func IsTopicBlobSidecar(d string) bool { - return strings.Contains(d, TopicNamePrefixBlobSidecar) + return strings.Contains(d, "blob_sidecar_") +} + +func IsTopicSyncCommittee(d string) bool { + return strings.Contains(d, "sync_committee_") && !strings.Contains(d, TopicNameSyncCommitteeContributionAndProof) +} +func IsTopicBeaconAttestation(d string) bool { + return strings.Contains(d, "beacon_attestation_") +} + +func SubnetIdFromTopicBeaconAttestation(d string) (uint64, error) { + if !IsTopicBeaconAttestation(d) { + return 0, fmt.Errorf("not a beacon attestation topic") + } + var id uint64 + _, err := fmt.Sscanf(d, TopicNamePrefixBeaconAttestation, &id) + return id, err } diff --git a/cl/merkle_tree/merkle_root.go b/cl/merkle_tree/merkle_root.go index a4b9791f966..a1a8b1ad372 100644 --- a/cl/merkle_tree/merkle_root.go +++ b/cl/merkle_tree/merkle_root.go @@ -69,7 +69,7 @@ func HashTreeRoot(schema ...interface{}) ([32]byte, error) { return common.BytesToHash(leaves[:length.Hash]), nil } -// HashByteSlice is gohashtree HashBytSlice but using our hopefully safer header converstion +// HashByteSlice is gohashtree HashBytSlice but using our hopefully safer header conversion func HashByteSlice(out, in []byte) error { if len(in) == 0 { return errors.New("zero leaves provided") diff --git a/cl/persistence/base_encoding/primitives_test.go b/cl/persistence/base_encoding/primitives_test.go index a2b18d0c0fb..4e89e840b0a 100644 --- a/cl/persistence/base_encoding/primitives_test.go +++ b/cl/persistence/base_encoding/primitives_test.go @@ -36,10 +36,15 @@ func TestDiff64(t *testing.T) { require.NoError(t, err) out := b.Bytes() - new2, err := ApplyCompressedSerializedUint64ListDiff(old, nil, out) + new2, err := ApplyCompressedSerializedUint64ListDiff(old, nil, out, false) require.NoError(t, err) require.Equal(t, new, new2) + + new3, err := ApplyCompressedSerializedUint64ListDiff(new2, nil, out, true) + require.NoError(t, err) + + require.Equal(t, old, new3[:len(old)]) } func TestDiff64Effective(t *testing.T) { @@ -67,8 +72,33 @@ func TestDiff64Effective(t *testing.T) { require.NoError(t, err) out := b.Bytes() - new2, err := ApplyCompressedSerializedUint64ListDiff(previous, nil, out) + new2, err := ApplyCompressedSerializedUint64ListDiff(previous, nil, out, false) require.NoError(t, err) require.Equal(t, new2, expected) } + +func TestDiffValidators(t *testing.T) { + vals := 3 + old := make([]byte, vals*121) + new := make([]byte, 121*(vals+1)) + inc := 1 + for i := 0; i < vals*121; i++ { + if i%9 == 0 { + inc++ + } + old[i] = byte(i) + new[i] = byte(i + inc) + } + + var b bytes.Buffer + + err := ComputeCompressedSerializedValidatorSetListDiff(&b, old, new) + require.NoError(t, err) + + out := b.Bytes() + new2, err := ApplyCompressedSerializedValidatorListDiff(old, nil, out, false) + require.NoError(t, err) + + require.Equal(t, new, new2) +} diff --git a/cl/persistence/base_encoding/uint64_diff.go b/cl/persistence/base_encoding/uint64_diff.go index 1e3496082e9..a3b03180599 100644 --- a/cl/persistence/base_encoding/uint64_diff.go +++ b/cl/persistence/base_encoding/uint64_diff.go @@ -9,7 +9,6 @@ import ( "sync" "github.com/klauspost/compress/zstd" - "github.com/ledgerwatch/erigon/cl/utils" ) // make a sync.pool of compressors (zstd) @@ -183,10 +182,9 @@ func ComputeCompressedSerializedEffectiveBalancesDiff(w io.Writer, old, new []by *plainBufferPtr = plainBuffer[:0] return compressor.Close() - } -func ApplyCompressedSerializedUint64ListDiff(old, out []byte, diff []byte) ([]byte, error) { +func ApplyCompressedSerializedUint64ListDiff(in, out []byte, diff []byte, reverse bool) ([]byte, error) { out = out[:0] buffer := bufferPool.Get().(*bytes.Buffer) @@ -212,7 +210,7 @@ func ApplyCompressedSerializedUint64ListDiff(old, out []byte, diff []byte) ([]by temp := make([]byte, 8) currIndex := 0 for i := 0; i < int(length); i++ { - n, err := utils.ReadZSTD(decompressor, temp[:4]) + n, err := io.ReadFull(decompressor, temp[:4]) if err != nil && !errors.Is(err, io.EOF) { return nil, err } @@ -221,7 +219,7 @@ func ApplyCompressedSerializedUint64ListDiff(old, out []byte, diff []byte) ([]by } entry.count = binary.BigEndian.Uint32(temp[:4]) - n, err = utils.ReadZSTD(decompressor, temp) + n, err = io.ReadFull(decompressor, temp) if err != nil && !errors.Is(err, io.EOF) { return nil, err } @@ -230,16 +228,111 @@ func ApplyCompressedSerializedUint64ListDiff(old, out []byte, diff []byte) ([]by } entry.val = binary.BigEndian.Uint64(temp) for j := 0; j < int(entry.count); j++ { - if currIndex+8 > len(old) { + if currIndex+8 > len(in) { // Append the remaining new bytes that were not in the old slice out = binary.LittleEndian.AppendUint64(out, entry.val) currIndex += 8 continue } - out = binary.LittleEndian.AppendUint64(out, binary.LittleEndian.Uint64(old[currIndex:currIndex+8])+entry.val) + if !reverse { + out = binary.LittleEndian.AppendUint64(out, binary.LittleEndian.Uint64(in[currIndex:currIndex+8])+entry.val) + } else { + out = binary.LittleEndian.AppendUint64(out, binary.LittleEndian.Uint64(in[currIndex:currIndex+8])-entry.val) + } currIndex += 8 } } return out, nil } + +func ComputeCompressedSerializedValidatorSetListDiff(w io.Writer, old, new []byte) error { + if len(old) > len(new) { + return fmt.Errorf("old list is longer than new list") + } + + validatorLength := 121 + if len(old)%validatorLength != 0 { + return fmt.Errorf("old list is not a multiple of validator length got %d", len(old)) + } + if len(new)%validatorLength != 0 { + return fmt.Errorf("new list is not a multiple of validator length got %d", len(new)) + } + for i := 0; i < len(old); i += validatorLength { + if !bytes.Equal(old[i:i+validatorLength], new[i:i+validatorLength]) { + if err := binary.Write(w, binary.BigEndian, uint32(i/validatorLength)); err != nil { + return err + } + if _, err := w.Write(new[i : i+validatorLength]); err != nil { + return err + } + } + } + if err := binary.Write(w, binary.BigEndian, uint32(1<<31)); err != nil { + return err + } + + if _, err := w.Write(new[len(old):]); err != nil { + return err + } + + return nil +} + +func ApplyCompressedSerializedValidatorListDiff(in, out []byte, diff []byte, reverse bool) ([]byte, error) { + out = out[:0] + if cap(out) < len(in) { + out = make([]byte, len(in)) + } + out = out[:len(in)] + + buffer := bufferPool.Get().(*bytes.Buffer) + defer bufferPool.Put(buffer) + buffer.Reset() + + if _, err := buffer.Write(diff); err != nil { + return nil, err + } + + currValidator := make([]byte, 121) + + for { + var index uint32 + if err := binary.Read(buffer, binary.BigEndian, &index); err != nil { + if errors.Is(err, io.EOF) { + break + } + return nil, err + } + if index == 1<<31 { + break + } + n, err := io.ReadFull(buffer, currValidator) + if err != nil && !errors.Is(err, io.EOF) { + return nil, err + } + if n == 0 { + break + } + if n != 121 { + return nil, fmt.Errorf("read %d bytes, expected 121", n) + } + // overwrite the validator + copy(out[index*121:], currValidator) + } + for { + n, err := io.ReadFull(buffer, currValidator) + if err != nil && !errors.Is(err, io.EOF) { + return nil, err + } + if n == 0 { + break + } + if n != 121 { + return nil, fmt.Errorf("read %d bytes, expected 121", n) + } + out = append(out, currValidator...) + } + + return out, nil +} diff --git a/cl/persistence/beacon_indicies/indicies.go b/cl/persistence/beacon_indicies/indicies.go index d485b121b70..d559ead01ce 100644 --- a/cl/persistence/beacon_indicies/indicies.go +++ b/cl/persistence/beacon_indicies/indicies.go @@ -1,16 +1,40 @@ package beacon_indicies import ( + "bytes" "context" "fmt" + "sync" + "github.com/klauspost/compress/zstd" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" + "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/persistence/base_encoding" + "github.com/ledgerwatch/erigon/cl/persistence/format/snapshot_format" _ "modernc.org/sqlite" ) +// make a buffer pool +var bufferPool = &sync.Pool{ + New: func() interface{} { + return new(bytes.Buffer) + }, +} + +// make a zstd writer pool +var zstdWriterPool = &sync.Pool{ + New: func() interface{} { + encoder, err := zstd.NewWriter(nil, zstd.WithEncoderLevel(zstd.SpeedBetterCompression)) + if err != nil { + panic(err) + } + return encoder + }, +} + func WriteHighestFinalized(tx kv.RwTx, slot uint64) error { return tx.Put(kv.HighestFinalized, kv.HighestFinalizedKey, base_encoding.Encode64ToBytes4(slot)) } @@ -26,7 +50,7 @@ func ReadHighestFinalized(tx kv.Tx) (uint64, error) { return base_encoding.Decode64FromBytes4(val), nil } -// WriteBlockRootSlot writes the slot associated with a block root. +// WriteHeaderSlot writes the slot associated with a block root. func WriteHeaderSlot(tx kv.RwTx, blockRoot libcommon.Hash, slot uint64) error { return tx.Put(kv.BlockRootToSlot, blockRoot[:], base_encoding.Encode64ToBytes4(slot)) } @@ -44,7 +68,7 @@ func ReadBlockSlotByBlockRoot(tx kv.Tx, blockRoot libcommon.Hash) (*uint64, erro return slot, nil } -// WriteBlockRootSlot writes the slot associated with a block root. +// WriteStateRoot writes the slot associated with a block root. func WriteStateRoot(tx kv.RwTx, blockRoot libcommon.Hash, stateRoot libcommon.Hash) error { if err := tx.Put(kv.BlockRootToStateRoot, blockRoot[:], stateRoot[:]); err != nil { return err @@ -260,6 +284,93 @@ func ReadBeaconBlockRootsInSlotRange(ctx context.Context, tx kv.Tx, fromSlot, co return blockRoots, slots, err } +func WriteBeaconBlock(ctx context.Context, tx kv.RwTx, block *cltypes.SignedBeaconBlock) error { + blockRoot, err := block.Block.HashSSZ() + if err != nil { + return err + } + // take a buffer and encoder + buf := bufferPool.Get().(*bytes.Buffer) + defer bufferPool.Put(buf) + encoder := zstdWriterPool.Get().(*zstd.Encoder) + defer zstdWriterPool.Put(encoder) + buf.Reset() + encoder.Reset(buf) + _, err = snapshot_format.WriteBlockForSnapshot(encoder, block, nil) + if err != nil { + return err + } + if err := encoder.Flush(); err != nil { + return err + } + if err := tx.Put(kv.BeaconBlocks, dbutils.BlockBodyKey(block.Block.Slot, blockRoot), libcommon.Copy(buf.Bytes())); err != nil { + return err + } + return nil +} + +func WriteBeaconBlockAndIndicies(ctx context.Context, tx kv.RwTx, block *cltypes.SignedBeaconBlock, canonical bool) error { + blockRoot, err := block.Block.HashSSZ() + if err != nil { + return err + } + + if err := WriteBeaconBlock(ctx, tx, block); err != nil { + return err + } + + bodyRoot, err := block.Block.Body.HashSSZ() + if err != nil { + return err + } + if block.Version() >= clparams.BellatrixVersion { + if err := WriteExecutionBlockNumber(tx, blockRoot, block.Block.Body.ExecutionPayload.BlockNumber); err != nil { + return err + } + if err := WriteExecutionBlockHash(tx, blockRoot, block.Block.Body.ExecutionPayload.BlockHash); err != nil { + return err + } + } + + if err := WriteBeaconBlockHeaderAndIndicies(ctx, tx, &cltypes.SignedBeaconBlockHeader{ + Signature: block.Signature, + Header: &cltypes.BeaconBlockHeader{ + Slot: block.Block.Slot, + ParentRoot: block.Block.ParentRoot, + ProposerIndex: block.Block.ProposerIndex, + Root: block.Block.StateRoot, + BodyRoot: bodyRoot, + }, + }, canonical); err != nil { + return err + } + return nil +} + +func PruneBlocks(ctx context.Context, tx kv.RwTx, to uint64) error { + cursor, err := tx.RwCursor(kv.BeaconBlocks) + if err != nil { + return err + } + for k, _, err := cursor.First(); err == nil && k != nil; k, _, err = cursor.Prev() { + if len(k) != 40 { + continue + } + slot, err := dbutils.DecodeBlockNumber(k[:8]) + if err != nil { + return err + } + if slot >= to { + break + } + if err := cursor.DeleteCurrent(); err != nil { + return err + } + } + return nil + +} + func ReadSignedHeaderByBlockRoot(ctx context.Context, tx kv.Tx, blockRoot libcommon.Hash) (*cltypes.SignedBeaconBlockHeader, bool, error) { h := &cltypes.SignedBeaconBlockHeader{Header: &cltypes.BeaconBlockHeader{}} headerBytes, err := tx.GetOne(kv.BeaconBlockHeaders, blockRoot[:]) diff --git a/cl/persistence/blob_storage/blob_db.go b/cl/persistence/blob_storage/blob_db.go new file mode 100644 index 00000000000..49389e8a908 --- /dev/null +++ b/cl/persistence/blob_storage/blob_db.go @@ -0,0 +1,308 @@ +package blob_storage + +import ( + "context" + "encoding/binary" + "errors" + "fmt" + "io" + "math" + "strconv" + "sync" + "sync/atomic" + + gokzg4844 "github.com/crate-crypto/go-kzg-4844" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/crypto/kzg" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/spf13/afero" +) + +const subdivisionSlot = 10_000 + +type BlobStorage interface { + WriteBlobSidecars(ctx context.Context, blockRoot libcommon.Hash, blobSidecars []*cltypes.BlobSidecar) error + RemoveBlobSidecars(ctx context.Context, slot uint64, blockRoot libcommon.Hash) error + ReadBlobSidecars(ctx context.Context, slot uint64, blockRoot libcommon.Hash) (out []*cltypes.BlobSidecar, found bool, err error) + WriteStream(w io.Writer, slot uint64, blockRoot libcommon.Hash, idx uint64) error // Used for P2P networking + KzgCommitmentsCount(ctx context.Context, blockRoot libcommon.Hash) (uint32, error) + Prune() error +} + +type BlobStore struct { + db kv.RwDB + fs afero.Fs + beaconChainConfig *clparams.BeaconChainConfig + ethClock eth_clock.EthereumClock + slotsKept uint64 +} + +func NewBlobStore(db kv.RwDB, fs afero.Fs, slotsKept uint64, beaconChainConfig *clparams.BeaconChainConfig, ethClock eth_clock.EthereumClock) BlobStorage { + return &BlobStore{fs: fs, db: db, slotsKept: slotsKept, beaconChainConfig: beaconChainConfig, ethClock: ethClock} +} + +func blobSidecarFilePath(slot, index uint64, blockRoot libcommon.Hash) (folderpath, filepath string) { + subdir := slot / subdivisionSlot + folderpath = strconv.FormatUint(subdir, 10) + filepath = fmt.Sprintf("%s/%s_%d", folderpath, blockRoot.String(), index) + return +} + +/* +file system layout: /_ +indicies: +- -> kzg_commitments_length // block +*/ + +// WriteBlobSidecars writes the sidecars on the database. it assumes that all blobSidecars are for the same blockRoot and we have all of them. +func (bs *BlobStore) WriteBlobSidecars(ctx context.Context, blockRoot libcommon.Hash, blobSidecars []*cltypes.BlobSidecar) error { + + for _, blobSidecar := range blobSidecars { + folderPath, filePath := blobSidecarFilePath( + blobSidecar.SignedBlockHeader.Header.Slot, + blobSidecar.Index, blockRoot) + // mkdir the whole folder and subfolders + bs.fs.MkdirAll(folderPath, 0755) + // create the file + file, err := bs.fs.Create(filePath) + if err != nil { + return err + } + defer file.Close() + + if err := ssz_snappy.EncodeAndWrite(file, blobSidecar); err != nil { + return err + } + if err := file.Sync(); err != nil { + return err + } + } + val := make([]byte, 4) + binary.LittleEndian.PutUint32(val, uint32(len(blobSidecars))) + tx, err := bs.db.BeginRw(ctx) + if err != nil { + return err + } + defer tx.Rollback() + // Wait for the blob to be written on disk and then write the index on mdbx + if err := tx.Put(kv.BlockRootToKzgCommitments, blockRoot[:], val); err != nil { + return err + } + return tx.Commit() +} + +// ReadBlobSidecars reads the sidecars from the database. it assumes that all blobSidecars are for the same blockRoot and we have all of them. +func (bs *BlobStore) ReadBlobSidecars(ctx context.Context, slot uint64, blockRoot libcommon.Hash) ([]*cltypes.BlobSidecar, bool, error) { + tx, err := bs.db.BeginRo(ctx) + if err != nil { + return nil, false, err + } + defer tx.Rollback() + + val, err := tx.GetOne(kv.BlockRootToKzgCommitments, blockRoot[:]) + if err != nil { + return nil, false, err + } + if len(val) == 0 { + return nil, false, nil + } + kzgCommitmentsLength := binary.LittleEndian.Uint32(val) + + var blobSidecars []*cltypes.BlobSidecar + for i := uint32(0); i < kzgCommitmentsLength; i++ { + _, filePath := blobSidecarFilePath(slot, uint64(i), blockRoot) + file, err := bs.fs.Open(filePath) + if err != nil { + if errors.Is(err, afero.ErrFileNotFound) { + return nil, false, nil + } + return nil, false, err + } + defer file.Close() + + blobSidecar := &cltypes.BlobSidecar{} + if err := ssz_snappy.DecodeAndReadNoForkDigest(file, blobSidecar, clparams.DenebVersion); err != nil { + return nil, false, err + } + blobSidecars = append(blobSidecars, blobSidecar) + } + return blobSidecars, true, nil +} + +// Do a bit of pruning +func (bs *BlobStore) Prune() error { + if bs.slotsKept == math.MaxUint64 { + return nil + } + + currentSlot := bs.ethClock.GetCurrentSlot() + currentSlot -= bs.slotsKept + currentSlot = (currentSlot / subdivisionSlot) * subdivisionSlot + var startPrune uint64 + if currentSlot >= 1_000_000 { + startPrune = currentSlot - 1_000_000 + } + // delete all the folders that are older than slotsKept + for i := startPrune; i < currentSlot; i += subdivisionSlot { + bs.fs.RemoveAll(strconv.FormatUint(i, 10)) + } + return nil +} + +func (bs *BlobStore) WriteStream(w io.Writer, slot uint64, blockRoot libcommon.Hash, idx uint64) error { + _, filePath := blobSidecarFilePath(slot, idx, blockRoot) + file, err := bs.fs.Open(filePath) + if err != nil { + return err + } + defer file.Close() + _, err = io.Copy(w, file) + return err +} + +func (bs *BlobStore) KzgCommitmentsCount(ctx context.Context, blockRoot libcommon.Hash) (uint32, error) { + tx, err := bs.db.BeginRo(context.Background()) + if err != nil { + return 0, err + } + defer tx.Rollback() + val, err := tx.GetOne(kv.BlockRootToKzgCommitments, blockRoot[:]) + if err != nil { + return 0, err + } + if len(val) != 4 { + return 0, nil + } + return binary.LittleEndian.Uint32(val), nil +} + +func (bs *BlobStore) RemoveBlobSidecars(ctx context.Context, slot uint64, blockRoot libcommon.Hash) error { + tx, err := bs.db.BeginRw(ctx) + if err != nil { + return err + } + defer tx.Rollback() + val, err := tx.GetOne(kv.BlockRootToKzgCommitments, blockRoot[:]) + if err != nil { + return err + } + if len(val) == 0 { + return nil + } + kzgCommitmentsLength := binary.LittleEndian.Uint32(val) + for i := uint32(0); i < kzgCommitmentsLength; i++ { + _, filePath := blobSidecarFilePath(slot, uint64(i), blockRoot) + if err := bs.fs.Remove(filePath); err != nil { + return err + } + tx.Delete(kv.BlockRootToKzgCommitments, blockRoot[:]) + } + return tx.Commit() +} + +type sidecarsPayload struct { + blockRoot libcommon.Hash + sidecars []*cltypes.BlobSidecar +} + +type verifyHeaderSignatureFn func(header *cltypes.SignedBeaconBlockHeader) error + +// VerifyAgainstIdentifiersAndInsertIntoTheBlobStore does all due verification for blobs before database insertion. it also returns the latest correctly return blob. +func VerifyAgainstIdentifiersAndInsertIntoTheBlobStore(ctx context.Context, storage BlobStorage, identifiers *solid.ListSSZ[*cltypes.BlobIdentifier], sidecars []*cltypes.BlobSidecar, verifySignatureFn verifyHeaderSignatureFn) (uint64, uint64, error) { + kzgCtx := kzg.Ctx() + inserted := atomic.Uint64{} + if identifiers.Len() == 0 || len(sidecars) == 0 { + return 0, 0, nil + } + if len(sidecars) > identifiers.Len() { + return 0, 0, fmt.Errorf("sidecars length is greater than identifiers length") + } + prevBlockRoot := identifiers.Get(0).BlockRoot + totalProcessed := 0 + + storableSidecars := []*sidecarsPayload{} + currentSidecarsPayload := &sidecarsPayload{blockRoot: identifiers.Get(0).BlockRoot} + lastProcessed := sidecars[0].SignedBlockHeader.Header.Slot + // Some will be stored, truncate when validation goes to shit + for i, sidecar := range sidecars { + identifier := identifiers.Get(i) + // check if the root of the block matches the identifier + sidecarBlockRoot, err := sidecar.SignedBlockHeader.Header.HashSSZ() + if err != nil { + return 0, 0, err + } + if sidecarBlockRoot != identifier.BlockRoot { + break + } + // check if the index of the sidecar matches the identifier + if sidecars[i].Index != identifier.Index { + break + } + + if !cltypes.VerifyCommitmentInclusionProof(sidecar.KzgCommitment, sidecar.CommitmentInclusionProof, sidecar.Index, clparams.DenebVersion, sidecar.SignedBlockHeader.Header.BodyRoot) { + return 0, 0, fmt.Errorf("could not verify blob's inclusion proof") + } + if verifySignatureFn != nil { + // verify the signature of the sidecar head, we leave this step up to the caller to define + if verifySignatureFn(sidecar.SignedBlockHeader); err != nil { + return 0, 0, err + } + } + // if the sidecar is valid, add it to the current payload of sidecars being built. + if identifier.BlockRoot != prevBlockRoot { + storableSidecars = append(storableSidecars, currentSidecarsPayload) + if len(currentSidecarsPayload.sidecars) != 0 { + lastProcessed = currentSidecarsPayload.sidecars[len(currentSidecarsPayload.sidecars)-1].SignedBlockHeader.Header.Slot + } + currentSidecarsPayload = &sidecarsPayload{blockRoot: identifier.BlockRoot} + } + currentSidecarsPayload.sidecars = append(currentSidecarsPayload.sidecars, sidecar) + totalProcessed++ + prevBlockRoot = identifier.BlockRoot + } + if totalProcessed == identifiers.Len() { + storableSidecars = append(storableSidecars, currentSidecarsPayload) + lastProcessed = sidecars[len(sidecars)-1].SignedBlockHeader.Header.Slot + } + + var errAtomic atomic.Value + var wg sync.WaitGroup + for _, sds := range storableSidecars { + wg.Add(1) + go func(sds *sidecarsPayload) { + defer wg.Done() + blobs := make([]gokzg4844.Blob, len(sds.sidecars)) + for i, sidecar := range sds.sidecars { + blobs[i] = gokzg4844.Blob(sidecar.Blob) + } + kzgCommitments := make([]gokzg4844.KZGCommitment, len(sds.sidecars)) + for i, sidecar := range sds.sidecars { + kzgCommitments[i] = gokzg4844.KZGCommitment(sidecar.KzgCommitment) + } + kzgProofs := make([]gokzg4844.KZGProof, len(sds.sidecars)) + for i, sidecar := range sds.sidecars { + kzgProofs[i] = gokzg4844.KZGProof(sidecar.KzgProof) + } + if err := kzgCtx.VerifyBlobKZGProofBatch(blobs, kzgCommitments, kzgProofs); err != nil { + errAtomic.Store(fmt.Errorf("sidecar is wrong")) + return + } + if err := storage.WriteBlobSidecars(ctx, sds.blockRoot, sds.sidecars); err != nil { + errAtomic.Store(err) + } else { + inserted.Add(uint64(len(sds.sidecars))) + } + + }(sds) + } + wg.Wait() + if err := errAtomic.Load(); err != nil { + return 0, 0, err.(error) + } + return lastProcessed, inserted.Load(), nil +} diff --git a/cl/persistence/blob_storage/blob_db_test.go b/cl/persistence/blob_storage/blob_db_test.go new file mode 100644 index 00000000000..85f5fcb10d8 --- /dev/null +++ b/cl/persistence/blob_storage/blob_db_test.go @@ -0,0 +1,52 @@ +package blob_storage + +import ( + "context" + "testing" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/spf13/afero" + "github.com/stretchr/testify/require" +) + +func setupTestDB(t *testing.T) kv.RwDB { + db := memdb.NewTestDB(t) + return db +} + +func TestBlobDB(t *testing.T) { + db := setupTestDB(t) + defer db.Close() + + s1 := cltypes.NewBlobSidecar(0, &cltypes.Blob{1}, libcommon.Bytes48{2}, libcommon.Bytes48{3}, &cltypes.SignedBeaconBlockHeader{Header: &cltypes.BeaconBlockHeader{Slot: 1}}, solid.NewHashVector(cltypes.CommitmentBranchSize)) + s2 := cltypes.NewBlobSidecar(1, &cltypes.Blob{3}, libcommon.Bytes48{5}, libcommon.Bytes48{9}, &cltypes.SignedBeaconBlockHeader{Header: &cltypes.BeaconBlockHeader{Slot: 1}}, solid.NewHashVector(cltypes.CommitmentBranchSize)) + + // + bs := NewBlobStore(db, afero.NewMemMapFs(), 12, &clparams.MainnetBeaconConfig, nil) + blockRoot := libcommon.Hash{1} + err := bs.WriteBlobSidecars(context.Background(), blockRoot, []*cltypes.BlobSidecar{s1, s2}) + require.NoError(t, err) + + sidecars, found, err := bs.ReadBlobSidecars(context.Background(), 1, blockRoot) + require.NoError(t, err) + require.True(t, found) + require.Len(t, sidecars, 2) + + require.Equal(t, s1.Blob, sidecars[0].Blob) + require.Equal(t, s2.Blob, sidecars[1].Blob) + require.Equal(t, s1.Index, sidecars[0].Index) + require.Equal(t, s2.Index, sidecars[1].Index) + require.Equal(t, s1.CommitmentInclusionProof, sidecars[0].CommitmentInclusionProof) + require.Equal(t, s2.CommitmentInclusionProof, sidecars[1].CommitmentInclusionProof) + require.Equal(t, s1.KzgCommitment, sidecars[0].KzgCommitment) + require.Equal(t, s2.KzgCommitment, sidecars[1].KzgCommitment) + require.Equal(t, s1.KzgProof, sidecars[0].KzgProof) + require.Equal(t, s2.KzgProof, sidecars[1].KzgProof) + require.Equal(t, s1.SignedBlockHeader, sidecars[0].SignedBlockHeader) + require.Equal(t, s2.SignedBlockHeader, sidecars[1].SignedBlockHeader) +} diff --git a/cl/persistence/block_saver.go b/cl/persistence/block_saver.go deleted file mode 100644 index d2497e335f7..00000000000 --- a/cl/persistence/block_saver.go +++ /dev/null @@ -1,185 +0,0 @@ -package persistence - -import ( - "context" - "errors" - "fmt" - "io" - "strings" - - "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" - "go.uber.org/zap/buffer" - - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" - "github.com/ledgerwatch/erigon/cl/phase1/execution_client" - "github.com/ledgerwatch/erigon/cl/sentinel/peers" - "github.com/spf13/afero" -) - -const subDivisionFolderSize = 10_000 - -type beaconChainDatabaseFilesystem struct { - rawDB RawBeaconBlockChain - cfg *clparams.BeaconChainConfig - - executionEngine execution_client.ExecutionEngine -} - -func NewBeaconChainDatabaseFilesystem(rawDB RawBeaconBlockChain, executionEngine execution_client.ExecutionEngine, cfg *clparams.BeaconChainConfig) BeaconChainDatabase { - return beaconChainDatabaseFilesystem{ - rawDB: rawDB, - cfg: cfg, - executionEngine: executionEngine, - } -} - -func (b beaconChainDatabaseFilesystem) GetBlock(ctx context.Context, tx kv.Tx, slot uint64) (*peers.PeeredObject[*cltypes.SignedBeaconBlock], error) { - blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, slot) - if err != nil { - return nil, err - } - if blockRoot == (libcommon.Hash{}) { - return nil, nil - } - - r, err := b.rawDB.BlockReader(ctx, slot, blockRoot) - if err != nil { - return nil, err - } - defer r.Close() - - block := cltypes.NewSignedBeaconBlock(b.cfg) - version := b.cfg.GetCurrentStateVersion(slot / b.cfg.SlotsPerEpoch) - if err := ssz_snappy.DecodeAndReadNoForkDigest(r, block, version); err != nil { - return nil, err - } - - return &peers.PeeredObject[*cltypes.SignedBeaconBlock]{Data: block}, nil -} - -func (b beaconChainDatabaseFilesystem) GetRange(ctx context.Context, tx kv.Tx, from uint64, count uint64) (*peers.PeeredObject[[]*cltypes.SignedBeaconBlock], error) { - // Retrieve block roots for each ranged slot - beaconBlockRooots, slots, err := beacon_indicies.ReadBeaconBlockRootsInSlotRange(ctx, tx, from, count) - if err != nil { - return nil, err - } - - if len(beaconBlockRooots) == 0 { - return &peers.PeeredObject[[]*cltypes.SignedBeaconBlock]{}, nil - } - - blocks := []*cltypes.SignedBeaconBlock{} - for idx, blockRoot := range beaconBlockRooots { - slot := slots[idx] - - r, err := b.rawDB.BlockReader(ctx, slot, blockRoot) - if errors.Is(err, afero.ErrFileNotFound) { - continue - } - if err != nil { - return nil, err - } - defer r.Close() - - block := cltypes.NewSignedBeaconBlock(b.cfg) - version := b.cfg.GetCurrentStateVersion(slot / b.cfg.SlotsPerEpoch) - if err := ssz_snappy.DecodeAndReadNoForkDigest(r, block, version); err != nil { - return nil, err - } - - blocks = append(blocks, block) - } - return &peers.PeeredObject[[]*cltypes.SignedBeaconBlock]{Data: blocks}, nil - -} - -func (b beaconChainDatabaseFilesystem) PurgeRange(ctx context.Context, tx kv.Tx, from uint64, count uint64) error { - if err := beacon_indicies.RangeBlockRoots(ctx, tx, from, from+count, func(slot uint64, beaconBlockRoot libcommon.Hash) bool { - b.rawDB.DeleteBlock(ctx, slot, beaconBlockRoot) - return true - }); err != nil { - return err - } - - return nil -} - -func (b beaconChainDatabaseFilesystem) WriteBlock(ctx context.Context, tx kv.RwTx, block *cltypes.SignedBeaconBlock, canonical bool) error { - blockRoot, err := block.Block.HashSSZ() - if err != nil { - return err - } - - w, err := b.rawDB.BlockWriter(ctx, block.Block.Slot, blockRoot) - if err != nil { - return err - } - defer w.Close() - - if fp, ok := w.(afero.File); ok { - err = fp.Truncate(0) - if err != nil { - return err - } - _, err = fp.Seek(0, io.SeekStart) - if err != nil { - return err - } - } - - err = ssz_snappy.EncodeAndWrite(w, block) - if err != nil { - return err - } - - if fp, ok := w.(afero.File); ok { - err = fp.Sync() - if err != nil { - return err - } - } - bodyRoot, err := block.Block.Body.HashSSZ() - if err != nil { - return err - } - if block.Version() >= clparams.BellatrixVersion { - if err := beacon_indicies.WriteExecutionBlockNumber(tx, blockRoot, block.Block.Body.ExecutionPayload.BlockNumber); err != nil { - return err - } - if err := beacon_indicies.WriteExecutionBlockHash(tx, blockRoot, block.Block.Body.ExecutionPayload.BlockHash); err != nil { - return err - } - } - - if err := beacon_indicies.WriteBeaconBlockHeaderAndIndicies(ctx, tx, &cltypes.SignedBeaconBlockHeader{ - Signature: block.Signature, - Header: &cltypes.BeaconBlockHeader{ - Slot: block.Block.Slot, - ParentRoot: block.Block.ParentRoot, - ProposerIndex: block.Block.ProposerIndex, - Root: block.Block.StateRoot, - BodyRoot: bodyRoot, - }, - }, canonical); err != nil { - return err - } - return nil -} - -// SlotToPaths define the file structure to store a block -// -// "/signedBeaconBlock/{slot/10_000}/{root}.ssz_snappy" -func rootToPaths(slot uint64, root libcommon.Hash, config *clparams.BeaconChainConfig) (folderPath string, filePath string) { - // bufio - buffer := bPool.Get().(*buffer.Buffer) - defer bPool.Put(buffer) - buffer.Reset() - - fmt.Fprintf(buffer, "%d/%x.sz", slot/subDivisionFolderSize, root) - split := strings.Split(buffer.String(), "/") - return split[0], buffer.String() -} diff --git a/cl/persistence/block_saver_test.go b/cl/persistence/block_saver_test.go deleted file mode 100644 index c49e593feba..00000000000 --- a/cl/persistence/block_saver_test.go +++ /dev/null @@ -1,138 +0,0 @@ -package persistence - -import ( - "context" - "testing" - - _ "embed" - - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon-lib/kv/memdb" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/phase1/execution_client" - "github.com/ledgerwatch/erigon/cl/utils" - "github.com/ledgerwatch/erigon/core/types" - "github.com/spf13/afero" - "github.com/stretchr/testify/require" -) - -type mockEngine struct { - blocks map[uint64]*types.Block -} - -func newMockEngine() execution_client.ExecutionEngine { - return &mockEngine{ - blocks: make(map[uint64]*types.Block), - } -} - -func (m *mockEngine) ForkChoiceUpdate(finalized libcommon.Hash, head libcommon.Hash) error { - panic("unimplemented") -} - -func (m *mockEngine) FrozenBlocks() uint64 { - panic("unimplemented") -} - -func (m *mockEngine) NewPayload(payload *cltypes.Eth1Block, beaconParentRoot *libcommon.Hash) (bool, error) { - panic("unimplemented") -} - -func (m *mockEngine) SupportInsertion() bool { - return true -} - -func (m *mockEngine) InsertBlocks([]*types.Block) error { - panic("unimplemented") -} - -func (m *mockEngine) IsCanonicalHash(libcommon.Hash) (bool, error) { - panic("unimplemented") -} - -func (m *mockEngine) Ready() (bool, error) { - return true, nil -} - -func (m *mockEngine) InsertBlock(b *types.Block) error { - m.blocks[b.NumberU64()] = b - return nil -} - -func (m *mockEngine) GetBodiesByRange(start, count uint64) ([]*types.RawBody, error) { - bds := []*types.RawBody{} - for i := start; i < start+count; i++ { - - blk, ok := m.blocks[i] - if !ok { - break - } - bds = append(bds, blk.RawBody()) - } - return bds, nil -} - -func (m *mockEngine) GetBodiesByHashes(hashes []libcommon.Hash) ([]*types.RawBody, error) { - panic("unimplemented") -} - -//go:embed test_data/test_block.ssz_snappy -var testBlock []byte - -func getTestBlock() *cltypes.SignedBeaconBlock { - enc, err := utils.DecompressSnappy(testBlock) - if err != nil { - panic(err) - } - bcBlock := cltypes.NewSignedBeaconBlock(&clparams.MainnetBeaconConfig) - if err := bcBlock.DecodeSSZ(enc, int(clparams.CapellaVersion)); err != nil { - panic(err) - } - bcBlock.Block.Slot = (clparams.MainnetBeaconConfig.CapellaForkEpoch + 1) * 32 - bcBlock.Block.Body.ExecutionPayload.Transactions = solid.NewTransactionsSSZFromTransactions(nil) - bcBlock.Block.Body.ExecutionPayload.BlockNumber = 100 - bcBlock.Block.Body.ExecutionPayload.BlockHash = libcommon.HexToHash("0x78e6ce0d5a80c7416138af475d20c0a0a22124ae67b6dc5a0d0d0fe6f95e365d") - return bcBlock -} - -func setupStore(t *testing.T, full bool) (BeaconChainDatabase, kv.RwDB, execution_client.ExecutionEngine) { - // Open an in-memory SQLite database for testing - db := memdb.NewTestDB(t) - // Create an in-memory filesystem - fs := afero.NewMemMapFs() - engine := newMockEngine() - return NewBeaconChainDatabaseFilesystem(NewAferoRawBlockSaver(fs, &clparams.MainnetBeaconConfig), engine, &clparams.MainnetBeaconConfig), db, engine -} - -func TestBlockSaverStoreLoadPurgeFull(t *testing.T) { - store, db, _ := setupStore(t, true) - defer db.Close() - - tx, _ := db.BeginRw(context.Background()) - defer tx.Rollback() - - ctx := context.Background() - block := getTestBlock() - require.NoError(t, store.WriteBlock(ctx, tx, block, true)) - - blks, err := store.GetRange(context.Background(), tx, block.Block.Slot, 1) - require.NoError(t, err) - require.Equal(t, len(blks.Data), 1) - - expectedRoot, err := block.HashSSZ() - require.NoError(t, err) - - haveRoot, err := blks.Data[0].HashSSZ() - require.NoError(t, err) - - require.Equal(t, expectedRoot, haveRoot) - - require.NoError(t, store.PurgeRange(ctx, tx, 0, 99999999999)) // THE PUURGE - - newBlks, err := store.GetRange(context.Background(), tx, block.Block.Slot, 1) - require.NoError(t, err) - require.Equal(t, len(newBlks.Data), 0) -} diff --git a/cl/persistence/block_store.go b/cl/persistence/block_store.go index c3ad0492497..ec4f69319c6 100644 --- a/cl/persistence/block_store.go +++ b/cl/persistence/block_store.go @@ -2,15 +2,12 @@ package persistence import ( "context" - "sync" "time" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/phase1/network" "github.com/ledgerwatch/erigon/cl/rpc" "github.com/ledgerwatch/erigon/cl/sentinel/peers" - "github.com/tidwall/btree" ) var _ BlockSource = (*BeaconRpcSource)(nil) @@ -68,94 +65,3 @@ func (b *BeaconRpcSource) GetRange(ctx context.Context, _ kv.Tx, from uint64, co func (b *BeaconRpcSource) PurgeRange(ctx context.Context, _ kv.Tx, from uint64, count uint64) error { return nil } - -var _ BlockSource = (*GossipSource)(nil) - -type GossipSource struct { - gossip *network.GossipManager - gossipBlocks <-chan *peers.PeeredObject[*cltypes.SignedBeaconBlock] - - mu sync.Mutex - blocks *btree.Map[uint64, chan *peers.PeeredObject[*cltypes.SignedBeaconBlock]] -} - -func (*GossipSource) GetBlock(ctx context.Context, tx kv.Tx, slot uint64) (*peers.PeeredObject[*cltypes.SignedBeaconBlock], error) { - panic("unimplemented") -} - -func NewGossipSource(ctx context.Context, gossip *network.GossipManager) *GossipSource { - g := &GossipSource{ - gossip: gossip, - gossipBlocks: gossip.SubscribeSignedBeaconBlocks(ctx), - blocks: btree.NewMap[uint64, chan *peers.PeeredObject[*cltypes.SignedBeaconBlock]](32), - } - go func() { - for { - select { - case <-ctx.Done(): - return - case recv := <-g.gossipBlocks: - ch := g.grabOrCreate(ctx, recv.Data.Block.Slot) - select { - case ch <- recv: - default: - } - } - } - }() - return g -} - -func (b *GossipSource) grabOrCreate(ctx context.Context, id uint64) chan *peers.PeeredObject[*cltypes.SignedBeaconBlock] { - b.mu.Lock() - defer b.mu.Unlock() - ch, ok := b.blocks.Get(id) - if !ok { - ch = make(chan *peers.PeeredObject[*cltypes.SignedBeaconBlock], 3) - b.blocks.Set(id, ch) - } - // if there are ever more than 512 blocks, clear the last 256 blocks - if b.blocks.Len() > 512 { - b.purgeRange(ctx, nil, 0, id-256) - } - return ch -} -func (b *GossipSource) GetRange(ctx context.Context, _ kv.Tx, from uint64, count uint64) (*peers.PeeredObject[[]*cltypes.SignedBeaconBlock], error) { - out := &peers.PeeredObject[[]*cltypes.SignedBeaconBlock]{} - for i := from; i < from+count; i++ { - ch := b.grabOrCreate(ctx, i) - select { - case <-ctx.Done(): - return nil, ctx.Err() - case item := <-ch: - out.Data = append(out.Data, item.Data) - out.Peer = item.Peer - } - } - return out, nil -} - -func (b *GossipSource) PurgeRange(ctx context.Context, tx kv.Tx, from uint64, count uint64) error { - b.mu.Lock() - defer b.mu.Unlock() - return b.purgeRange(ctx, tx, from, count) -} - -func (b *GossipSource) purgeRange(ctx context.Context, _ kv.Tx, from uint64, count uint64) error { - initSize := count - if initSize > 256 { - initSize = 256 - } - xs := make([]uint64, 0, initSize) - b.blocks.Ascend(from, func(key uint64, value chan *peers.PeeredObject[*cltypes.SignedBeaconBlock]) bool { - if key >= from+count { - return false - } - xs = append(xs, key) - return true - }) - for _, v := range xs { - b.blocks.Delete(v) - } - return nil -} diff --git a/cl/persistence/interface.go b/cl/persistence/interface.go index 985b50a728a..9ea885558f9 100644 --- a/cl/persistence/interface.go +++ b/cl/persistence/interface.go @@ -2,9 +2,7 @@ package persistence import ( "context" - "io" - libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/sentinel/peers" @@ -20,12 +18,6 @@ type BeaconChainWriter interface { WriteBlock(ctx context.Context, tx kv.RwTx, block *cltypes.SignedBeaconBlock, canonical bool) error } -type RawBeaconBlockChain interface { - BlockWriter(ctx context.Context, slot uint64, blockRoot libcommon.Hash) (io.WriteCloser, error) - BlockReader(ctx context.Context, slot uint64, blockRoot libcommon.Hash) (io.ReadCloser, error) - DeleteBlock(ctx context.Context, slot uint64, blockRoot libcommon.Hash) error -} - type BeaconChainDatabase interface { BlockSource BeaconChainWriter diff --git a/cl/persistence/raw_block_saver.go b/cl/persistence/raw_block_saver.go deleted file mode 100644 index 6d41f4d8cd0..00000000000 --- a/cl/persistence/raw_block_saver.go +++ /dev/null @@ -1,52 +0,0 @@ -package persistence - -import ( - "context" - "io" - "os" - "sync" - - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/spf13/afero" - "go.uber.org/zap/buffer" -) - -var bPool = sync.Pool{ - New: func() interface{} { - return &buffer.Buffer{} - }, -} - -type aferoRawBeaconBlockChain struct { - fs afero.Fs - cfg *clparams.BeaconChainConfig -} - -func NewAferoRawBlockSaver(fs afero.Fs, cfg *clparams.BeaconChainConfig) RawBeaconBlockChain { - return aferoRawBeaconBlockChain{ - fs: fs, - cfg: cfg, - } -} - -func AferoRawBeaconBlockChainFromOsPath(cfg *clparams.BeaconChainConfig, path string) (RawBeaconBlockChain, afero.Fs) { - dataDirFs := afero.NewBasePathFs(afero.NewOsFs(), path) - return NewAferoRawBlockSaver(dataDirFs, cfg), dataDirFs -} - -func (a aferoRawBeaconBlockChain) BlockWriter(ctx context.Context, slot uint64, blockRoot libcommon.Hash) (io.WriteCloser, error) { - folderPath, path := rootToPaths(slot, blockRoot, a.cfg) - _ = a.fs.MkdirAll(folderPath, 0o755) - return a.fs.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0o755) -} - -func (a aferoRawBeaconBlockChain) BlockReader(ctx context.Context, slot uint64, blockRoot libcommon.Hash) (io.ReadCloser, error) { - _, path := rootToPaths(slot, blockRoot, a.cfg) - return a.fs.OpenFile(path, os.O_RDONLY, 0o755) -} - -func (a aferoRawBeaconBlockChain) DeleteBlock(ctx context.Context, slot uint64, blockRoot libcommon.Hash) error { - _, path := rootToPaths(slot, blockRoot, a.cfg) - return a.fs.Remove(path) -} diff --git a/cl/persistence/state/epoch_data.go b/cl/persistence/state/epoch_data.go index 7b6ed7e963e..6c620b9bd61 100644 --- a/cl/persistence/state/epoch_data.go +++ b/cl/persistence/state/epoch_data.go @@ -14,7 +14,6 @@ import ( type EpochData struct { TotalActiveBalance uint64 JustificationBits *cltypes.JustificationBits - Fork *cltypes.Fork CurrentJustifiedCheckpoint solid.Checkpoint PreviousJustifiedCheckpoint solid.Checkpoint FinalizedCheckpoint solid.Checkpoint @@ -27,7 +26,6 @@ func EpochDataFromBeaconState(s *state.CachingBeaconState) *EpochData { jj := s.JustificationBits() copy(justificationCopy[:], jj[:]) return &EpochData{ - Fork: s.Fork(), JustificationBits: justificationCopy, TotalActiveBalance: s.GetTotalActiveBalance(), CurrentJustifiedCheckpoint: s.CurrentJustifiedCheckpoint(), @@ -56,7 +54,6 @@ func (m *EpochData) WriteTo(w io.Writer) error { // Deserialize deserializes the state from a byte slice with zstd compression. func (m *EpochData) ReadFrom(r io.Reader) error { m.JustificationBits = &cltypes.JustificationBits{} - m.Fork = &cltypes.Fork{} m.FinalizedCheckpoint = solid.NewCheckpoint() m.CurrentJustifiedCheckpoint = solid.NewCheckpoint() m.PreviousJustifiedCheckpoint = solid.NewCheckpoint() @@ -73,5 +70,5 @@ func (m *EpochData) ReadFrom(r io.Reader) error { } func (m *EpochData) getSchema() []interface{} { - return []interface{}{&m.TotalActiveBalance, m.JustificationBits, m.Fork, m.CurrentJustifiedCheckpoint, m.PreviousJustifiedCheckpoint, m.FinalizedCheckpoint, &m.HistoricalSummariesLength, &m.HistoricalRootsLength} + return []interface{}{&m.TotalActiveBalance, m.JustificationBits, m.CurrentJustifiedCheckpoint, m.PreviousJustifiedCheckpoint, m.FinalizedCheckpoint, &m.HistoricalSummariesLength, &m.HistoricalRootsLength} } diff --git a/cl/persistence/state/epoch_data_test.go b/cl/persistence/state/epoch_data_test.go index 95079cc58bb..3a3e2effa18 100644 --- a/cl/persistence/state/epoch_data_test.go +++ b/cl/persistence/state/epoch_data_test.go @@ -14,7 +14,6 @@ func TestEpochData(t *testing.T) { e := &EpochData{ TotalActiveBalance: 123, JustificationBits: &cltypes.JustificationBits{true}, - Fork: &cltypes.Fork{}, CurrentJustifiedCheckpoint: solid.NewCheckpointFromParameters(libcommon.Hash{}, 123), PreviousJustifiedCheckpoint: solid.NewCheckpointFromParameters(libcommon.Hash{}, 123), FinalizedCheckpoint: solid.NewCheckpointFromParameters(libcommon.Hash{}, 123), diff --git a/cl/persistence/state/historical_states_reader/attesting_indicies.go b/cl/persistence/state/historical_states_reader/attesting_indicies.go index 22868b02248..971a2a14d59 100644 --- a/cl/persistence/state/historical_states_reader/attesting_indicies.go +++ b/cl/persistence/state/historical_states_reader/attesting_indicies.go @@ -16,7 +16,7 @@ import ( func (r *HistoricalStatesReader) attestingIndicies(attestation solid.AttestationData, aggregationBits []byte, checkBitsLength bool, mix libcommon.Hash, idxs []uint64) ([]uint64, error) { slot := attestation.Slot() committeesPerSlot := committeeCount(r.cfg, slot/r.cfg.SlotsPerEpoch, idxs) - committeeIndex := attestation.ValidatorIndex() + committeeIndex := attestation.CommitteeIndex() index := (slot%r.cfg.SlotsPerEpoch)*committeesPerSlot + committeeIndex count := committeesPerSlot * r.cfg.SlotsPerEpoch @@ -108,11 +108,12 @@ func (r *HistoricalStatesReader) readHistoricalBlockRoot(tx kv.Tx, slot, index u } -func (r *HistoricalStatesReader) getAttestationParticipationFlagIndicies(tx kv.Tx, stateSlot uint64, data solid.AttestationData, inclusionDelay uint64, skipAssert bool) ([]uint8, error) { +func (r *HistoricalStatesReader) getAttestationParticipationFlagIndicies(tx kv.Tx, version clparams.StateVersion, stateSlot uint64, data solid.AttestationData, inclusionDelay uint64, skipAssert bool) ([]uint8, error) { currentCheckpoint, previousCheckpoint, _, err := state_accessors.ReadCheckpoints(tx, r.cfg.RoundSlotToEpoch(stateSlot)) if err != nil { return nil, err } + if currentCheckpoint == nil { currentCheckpoint = r.genesisState.CurrentJustifiedCheckpoint() } @@ -157,11 +158,15 @@ func (r *HistoricalStatesReader) getAttestationParticipationFlagIndicies(tx kv.T if inclusionDelay <= utils.IntegerSquareRoot(r.cfg.SlotsPerEpoch) { participationFlagIndicies = append(participationFlagIndicies, r.cfg.TimelySourceFlagIndex) } - if matchingTarget && inclusionDelay <= r.cfg.SlotsPerEpoch { - participationFlagIndicies = append(participationFlagIndicies, r.cfg.TimelyTargetFlagIndex) - } + if matchingHead && inclusionDelay == r.cfg.MinAttestationInclusionDelay { participationFlagIndicies = append(participationFlagIndicies, r.cfg.TimelyHeadFlagIndex) } + if version < clparams.DenebVersion && matchingTarget && inclusionDelay <= r.cfg.SlotsPerEpoch { + participationFlagIndicies = append(participationFlagIndicies, r.cfg.TimelyTargetFlagIndex) + } + if version >= clparams.DenebVersion && matchingTarget { + participationFlagIndicies = append(participationFlagIndicies, r.cfg.TimelyTargetFlagIndex) + } return participationFlagIndicies, nil } diff --git a/cl/persistence/state/historical_states_reader/historical_states_reader.go b/cl/persistence/state/historical_states_reader/historical_states_reader.go index 5cf69b590b2..85d1258c95b 100644 --- a/cl/persistence/state/historical_states_reader/historical_states_reader.go +++ b/cl/persistence/state/historical_states_reader/historical_states_reader.go @@ -3,7 +3,6 @@ package historical_states_reader import ( "bytes" "context" - "encoding/binary" "errors" "fmt" "io" @@ -19,17 +18,17 @@ import ( state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" - "github.com/ledgerwatch/erigon/cl/utils" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" - "github.com/spf13/afero" - "golang.org/x/exp/slices" libcommon "github.com/ledgerwatch/erigon-lib/common" ) +var buffersPool = sync.Pool{ + New: func() interface{} { return &bytes.Buffer{} }, +} + type HistoricalStatesReader struct { cfg *clparams.BeaconChainConfig - fs afero.Fs // some data is on filesystem to avoid database fragmentation validatorTable *state_accessors.StaticValidatorTable // We can save 80% of the I/O by caching the validator table blockReader freezeblocks.BeaconSnapshotReader genesisState *state.CachingBeaconState @@ -38,7 +37,7 @@ type HistoricalStatesReader struct { shuffledSetsCache *lru.Cache[uint64, []uint64] } -func NewHistoricalStatesReader(cfg *clparams.BeaconChainConfig, blockReader freezeblocks.BeaconSnapshotReader, validatorTable *state_accessors.StaticValidatorTable, fs afero.Fs, genesisState *state.CachingBeaconState) *HistoricalStatesReader { +func NewHistoricalStatesReader(cfg *clparams.BeaconChainConfig, blockReader freezeblocks.BeaconSnapshotReader, validatorTable *state_accessors.StaticValidatorTable, genesisState *state.CachingBeaconState) *HistoricalStatesReader { cache, err := lru.New[uint64, []uint64]("shuffledSetsCache_reader", 125) if err != nil { @@ -47,7 +46,6 @@ func NewHistoricalStatesReader(cfg *clparams.BeaconChainConfig, blockReader free return &HistoricalStatesReader{ cfg: cfg, - fs: fs, blockReader: blockReader, genesisState: genesisState, validatorTable: validatorTable, @@ -64,7 +62,7 @@ func (r *HistoricalStatesReader) ReadHistoricalState(ctx context.Context, tx kv. // If this happens, we need to update our static tables if slot > latestProcessedState || slot > r.validatorTable.Slot() { - return nil, fmt.Errorf("slot %d is greater than latest processed state %d", slot, latestProcessedState) + return nil, nil } if slot == r.genesisState.Slot() { @@ -92,7 +90,7 @@ func (r *HistoricalStatesReader) ReadHistoricalState(ctx context.Context, tx kv. epochData, err := state_accessors.ReadEpochData(tx, roundedSlot) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to read epoch data: %w", err) } if epochData == nil { return nil, nil @@ -103,7 +101,7 @@ func (r *HistoricalStatesReader) ReadHistoricalState(ctx context.Context, tx kv. ret.SetGenesisTime(r.genesisState.GenesisTime()) ret.SetGenesisValidatorsRoot(r.genesisState.GenesisValidatorsRoot()) ret.SetSlot(slot) - ret.SetFork(epochData.Fork) + ret.SetFork(slotData.Fork) // History stateRoots, blockRoots := solid.NewHashVector(int(r.cfg.SlotsPerHistoricalRoot)), solid.NewHashVector(int(r.cfg.SlotsPerHistoricalRoot)) ret.SetLatestBlockHeader(blockHeader) @@ -130,13 +128,13 @@ func (r *HistoricalStatesReader) ReadHistoricalState(ctx context.Context, tx kv. // Eth1 eth1DataVotes := solid.NewStaticListSSZ[*cltypes.Eth1Data](int(r.cfg.Eth1DataVotesLength()), 72) if err := r.readEth1DataVotes(tx, slotData.Eth1DataLength, slot, eth1DataVotes); err != nil { - return nil, err + return nil, fmt.Errorf("failed to read eth1 data votes: %w", err) } ret.SetEth1DataVotes(eth1DataVotes) ret.SetEth1Data(slotData.Eth1Data) ret.SetEth1DepositIndex(slotData.Eth1DepositIndex) // Registry (Validators + Balances) - balancesBytes, err := r.reconstructBalances(tx, slot, kv.ValidatorBalance) + balancesBytes, err := r.reconstructBalances(tx, slotData.ValidatorLength, slot, kv.ValidatorBalance, kv.BalancesDump) if err != nil { return nil, fmt.Errorf("failed to read validator balances: %w", err) } @@ -144,6 +142,7 @@ func (r *HistoricalStatesReader) ReadHistoricalState(ctx context.Context, tx kv. if err := balances.DecodeSSZ(balancesBytes, 0); err != nil { return nil, fmt.Errorf("failed to decode validator balances: %w", err) } + ret.SetBalances(balances) validatorSet, err := r.ReadValidatorsForHistoricalState(tx, slot) @@ -168,7 +167,7 @@ func (r *HistoricalStatesReader) ReadHistoricalState(ctx context.Context, tx kv. // Finality currentCheckpoint, previousCheckpoint, finalizedCheckpoint, err := state_accessors.ReadCheckpoints(tx, roundedSlot) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to read checkpoints: %w", err) } if currentCheckpoint == nil { currentCheckpoint = r.genesisState.CurrentJustifiedCheckpoint() @@ -185,7 +184,7 @@ func (r *HistoricalStatesReader) ReadHistoricalState(ctx context.Context, tx kv. ret.SetFinalizedCheckpoint(finalizedCheckpoint) // Participation if ret.Version() == clparams.Phase0Version { - currentAtts, previousAtts, err := r.readPendingEpochs(tx, slot, slotData.CurrentEpochAttestationsLength, slotData.PreviousEpochAttestationsLength) + currentAtts, previousAtts, err := r.readPendingEpochs(tx, slot) if err != nil { return nil, fmt.Errorf("failed to read pending attestations: %w", err) } @@ -372,30 +371,50 @@ func (r *HistoricalStatesReader) readRandaoMixes(tx kv.Tx, slot uint64, out soli return nil } -func (r *HistoricalStatesReader) reconstructDiffedUint64List(tx kv.Tx, slot uint64, diffBucket string, fileSuffix string) ([]byte, error) { +func (r *HistoricalStatesReader) reconstructDiffedUint64List(tx kv.Tx, validatorSetLength, slot uint64, diffBucket string, dumpBucket string) ([]byte, error) { // Read the file - freshDumpSlot := slot - slot%clparams.SlotsPerDump - _, filePath := clparams.EpochToPaths(freshDumpSlot, r.cfg, fileSuffix) - file, err := r.fs.Open(filePath) + remainder := slot % clparams.SlotsPerDump + freshDumpSlot := slot - remainder + + midpoint := uint64(clparams.SlotsPerDump / 2) + var compressed []byte + currentStageProgress, err := state_accessors.GetStateProcessingProgress(tx) if err != nil { return nil, err } - defer file.Close() + forward := remainder <= midpoint || currentStageProgress <= freshDumpSlot+clparams.SlotsPerDump + if forward { + compressed, err = tx.GetOne(dumpBucket, base_encoding.Encode64ToBytes4(freshDumpSlot)) + if err != nil { + return nil, err + } + } else { + compressed, err = tx.GetOne(dumpBucket, base_encoding.Encode64ToBytes4(freshDumpSlot+clparams.SlotsPerDump)) + if err != nil { + return nil, err + } + } + if len(compressed) == 0 { + return nil, fmt.Errorf("dump not found for slot %d", freshDumpSlot) + } + + buffer := buffersPool.Get().(*bytes.Buffer) + defer buffersPool.Put(buffer) + buffer.Reset() + + if _, err := buffer.Write(compressed); err != nil { + return nil, err + } // Read the diff file - zstdReader, err := zstd.NewReader(file) + zstdReader, err := zstd.NewReader(buffer) if err != nil { return nil, err } defer zstdReader.Close() - lenRaw := uint64(0) - if err := binary.Read(file, binary.LittleEndian, &lenRaw); err != nil { - return nil, err - } - currentList := make([]byte, lenRaw) - - if _, err = utils.ReadZSTD(zstdReader, currentList); err != nil { + currentList := make([]byte, validatorSetLength*8) + if _, err = io.ReadFull(zstdReader, currentList); err != nil && err != io.ErrUnexpectedEOF { return nil, err } @@ -404,64 +423,123 @@ func (r *HistoricalStatesReader) reconstructDiffedUint64List(tx kv.Tx, slot uint return nil, err } defer diffCursor.Close() + if forward { + for k, v, err := diffCursor.Seek(base_encoding.Encode64ToBytes4(freshDumpSlot)); err == nil && k != nil && base_encoding.Decode64FromBytes4(k) <= slot; k, v, err = diffCursor.Next() { + if err != nil { + return nil, err + } + if len(k) != 4 { + return nil, fmt.Errorf("invalid key %x", k) + } + currSlot := base_encoding.Decode64FromBytes4(k) + if currSlot == freshDumpSlot { + continue + } + if currSlot > slot { + return nil, fmt.Errorf("diff not found for slot %d", slot) + } + currentList, err = base_encoding.ApplyCompressedSerializedUint64ListDiff(currentList, currentList, v, false) + if err != nil { + return nil, err + } + } + } else { + for k, v, err := diffCursor.Seek(base_encoding.Encode64ToBytes4(freshDumpSlot + clparams.SlotsPerDump)); err == nil && k != nil && base_encoding.Decode64FromBytes4(k) > slot; k, v, err = diffCursor.Prev() { + if err != nil { + return nil, err + } + if len(k) != 4 { + return nil, fmt.Errorf("invalid key %x", k) + } + currSlot := base_encoding.Decode64FromBytes4(k) + if currSlot <= slot || currSlot > freshDumpSlot+clparams.SlotsPerDump { + continue + } + currentList, err = base_encoding.ApplyCompressedSerializedUint64ListDiff(currentList, currentList, v, true) + if err != nil { + return nil, err + } + } + } + currentList = currentList[:validatorSetLength*8] + return currentList, err +} + +func (r *HistoricalStatesReader) reconstructBalances(tx kv.Tx, validatorSetLength, slot uint64, diffBucket, dumpBucket string) ([]byte, error) { + remainder := slot % clparams.SlotsPerDump + freshDumpSlot := slot - remainder - for k, v, err := diffCursor.Seek(base_encoding.Encode64ToBytes4(freshDumpSlot)); err == nil && k != nil && base_encoding.Decode64FromBytes4(k) <= slot; k, v, err = diffCursor.Next() { + buffer := buffersPool.Get().(*bytes.Buffer) + defer buffersPool.Put(buffer) + buffer.Reset() + + var compressed []byte + currentStageProgress, err := state_accessors.GetStateProcessingProgress(tx) + if err != nil { + return nil, err + } + midpoint := uint64(clparams.SlotsPerDump / 2) + forward := remainder <= midpoint || currentStageProgress <= freshDumpSlot+clparams.SlotsPerDump + if forward { + compressed, err = tx.GetOne(dumpBucket, base_encoding.Encode64ToBytes4(freshDumpSlot)) if err != nil { return nil, err } - if len(k) != 4 { - return nil, fmt.Errorf("invalid key %x", k) - } - if base_encoding.Decode64FromBytes4(k) > slot { - return nil, fmt.Errorf("diff not found for slot %d", slot) - } - currentList, err = base_encoding.ApplyCompressedSerializedUint64ListDiff(currentList, currentList, v) + } else { + compressed, err = tx.GetOne(dumpBucket, base_encoding.Encode64ToBytes4(freshDumpSlot+clparams.SlotsPerDump)) if err != nil { return nil, err } } - return currentList, err -} - -func (r *HistoricalStatesReader) reconstructBalances(tx kv.Tx, slot uint64, diffBucket string) ([]byte, error) { - // Read the file - freshDumpSlot := slot - slot%clparams.SlotsPerDump - _, filePath := clparams.EpochToPaths(freshDumpSlot, r.cfg, "balances") - file, err := r.fs.Open(filePath) - if err != nil { + if len(compressed) == 0 { + return nil, fmt.Errorf("dump not found for slot %d", freshDumpSlot) + } + if _, err := buffer.Write(compressed); err != nil { return nil, err } - defer file.Close() - - // Read the diff file - zstdReader, err := zstd.NewReader(file) + zstdReader, err := zstd.NewReader(buffer) if err != nil { return nil, err } defer zstdReader.Close() - - lenRaw := uint64(0) - if err := binary.Read(file, binary.LittleEndian, &lenRaw); err != nil { + currentList := make([]byte, validatorSetLength*8) + if _, err = io.ReadFull(zstdReader, currentList); err != nil && err != io.ErrUnexpectedEOF { return nil, err } - currentList := make([]byte, lenRaw) - if _, err = utils.ReadZSTD(zstdReader, currentList); err != nil { - return nil, err - } roundedSlot := r.cfg.RoundSlotToEpoch(slot) - for i := freshDumpSlot; i < roundedSlot; i += r.cfg.SlotsPerEpoch { - diff, err := tx.GetOne(diffBucket, base_encoding.Encode64ToBytes4(i)) - if err != nil { - return nil, err - } - if len(diff) == 0 { - continue + + if forward { + for i := freshDumpSlot; i <= roundedSlot; i += r.cfg.SlotsPerEpoch { + if i == freshDumpSlot { + continue + } + diff, err := tx.GetOne(diffBucket, base_encoding.Encode64ToBytes4(i)) + if err != nil { + return nil, err + } + if len(diff) == 0 { + continue + } + currentList, err = base_encoding.ApplyCompressedSerializedUint64ListDiff(currentList, currentList, diff, false) + if err != nil { + return nil, err + } } - currentList, err = base_encoding.ApplyCompressedSerializedUint64ListDiff(currentList, currentList, diff) - if err != nil { - return nil, err + } else { + for i := freshDumpSlot + clparams.SlotsPerDump; i > roundedSlot; i -= r.cfg.SlotsPerEpoch { + diff, err := tx.GetOne(diffBucket, base_encoding.Encode64ToBytes4(i)) + if err != nil { + return nil, err + } + if len(diff) == 0 { + continue + } + currentList, err = base_encoding.ApplyCompressedSerializedUint64ListDiff(currentList, currentList, diff, true) + if err != nil { + return nil, err + } } } @@ -470,24 +548,21 @@ func (r *HistoricalStatesReader) reconstructBalances(tx kv.Tx, slot uint64, diff return nil, err } defer diffCursor.Close() + if slot%r.cfg.SlotsPerEpoch == 0 { + currentList = currentList[:validatorSetLength*8] + return currentList, nil + } - for k, v, err := diffCursor.Seek(base_encoding.Encode64ToBytes4(roundedSlot)); err == nil && k != nil && base_encoding.Decode64FromBytes4(k) <= slot; k, v, err = diffCursor.Next() { - if err != nil { - return nil, err - } - if len(k) != 4 { - return nil, fmt.Errorf("invalid key %x", k) - } - if base_encoding.Decode64FromBytes4(k) > slot { - return nil, fmt.Errorf("diff not found for slot %d", slot) - } - currentList, err = base_encoding.ApplyCompressedSerializedUint64ListDiff(currentList, currentList, v) - if err != nil { - return nil, err - } + slotDiff, err := tx.GetOne(diffBucket, base_encoding.Encode64ToBytes4(slot)) + if err != nil { + return nil, err } + if slotDiff == nil { + return nil, fmt.Errorf("slot diff not found for slot %d", slot) + } + currentList = currentList[:validatorSetLength*8] - return currentList, err + return base_encoding.ApplyCompressedSerializedUint64ListDiff(currentList, currentList, slotDiff, false) } func (r *HistoricalStatesReader) ReconstructUint64ListDump(tx kv.Tx, slot uint64, bkt string, size int, out solid.Uint64ListSSZ) error { @@ -523,7 +598,7 @@ func (r *HistoricalStatesReader) ReconstructUint64ListDump(tx kv.Tx, slot uint64 defer zstdReader.Close() currentList := make([]byte, size*8) - if _, err = utils.ReadZSTD(zstdReader, currentList); err != nil && !errors.Is(err, io.EOF) { + if _, err = io.ReadFull(zstdReader, currentList); err != nil && !errors.Is(err, io.EOF) { return fmt.Errorf("failed to read dump: %w, len: %d", err, len(v)) } @@ -548,13 +623,12 @@ func (r *HistoricalStatesReader) ReadValidatorsForHistoricalState(tx kv.Tx, slot if validatorIndex >= validatorSetLength { return false } - currValidator := out.Get(int(validatorIndex)) - validator.ToValidator(currValidator, slot) + validator.ToValidator(out.Get(int(validatorIndex)), slot) return true }) // Read the balances - bytesEffectiveBalances, err := r.reconstructDiffedUint64List(tx, slot, kv.ValidatorEffectiveBalance, "effective_balances") + bytesEffectiveBalances, err := r.reconstructDiffedUint64List(tx, validatorSetLength, slot, kv.ValidatorEffectiveBalance, kv.EffectiveBalancesDump) if err != nil { return nil, err } @@ -565,22 +639,53 @@ func (r *HistoricalStatesReader) ReadValidatorsForHistoricalState(tx kv.Tx, slot return out, nil } -func (r *HistoricalStatesReader) readPendingEpochs(tx kv.Tx, slot uint64, currentEpochAttestationsLength, previousEpochAttestationsLength uint64) (*solid.ListSSZ[*solid.PendingAttestation], *solid.ListSSZ[*solid.PendingAttestation], error) { - if slot < r.cfg.SlotsPerEpoch { +func (r *HistoricalStatesReader) readPendingEpochs(tx kv.Tx, slot uint64) (*solid.ListSSZ[*solid.PendingAttestation], *solid.ListSSZ[*solid.PendingAttestation], error) { + if slot == r.cfg.GenesisSlot { return r.genesisState.CurrentEpochAttestations(), r.genesisState.PreviousEpochAttestations(), nil } - roundedSlot := r.cfg.RoundSlotToEpoch(slot) - // Read the current epoch attestations - currentEpochAttestations, err := state_accessors.ReadCurrentEpochAttestations(tx, roundedSlot, int(r.cfg.CurrentEpochAttestationsLength())) - if err != nil { - return nil, nil, err - } - previousEpochAttestations, err := state_accessors.ReadPreviousEpochAttestations(tx, roundedSlot, int(r.cfg.PreviousEpochAttestationsLength())) - if err != nil { - return nil, nil, err + epoch, prevEpoch := r.computeRelevantEpochs(slot) + previousEpochAttestations := solid.NewDynamicListSSZ[*solid.PendingAttestation](int(r.cfg.PreviousEpochAttestationsLength())) + currentEpochAttestations := solid.NewDynamicListSSZ[*solid.PendingAttestation](int(r.cfg.CurrentEpochAttestationsLength())) + beginSlot := prevEpoch * r.cfg.SlotsPerEpoch + + for i := beginSlot; i <= slot; i++ { + // Read the block + block, err := r.blockReader.ReadBlindedBlockBySlot(context.Background(), tx, i) + if err != nil { + return nil, nil, err + } + if block == nil { + continue + } + currentEpoch := i / r.cfg.SlotsPerEpoch + isPreviousPendingAttestations := currentEpoch == prevEpoch + + // Read the participation flags + block.Block.Body.Attestations.Range(func(index int, attestation *solid.Attestation, length int) bool { + data := attestation.AttestantionData() + isCurrentEpoch := data.Target().Epoch() == currentEpoch + // skip if it is too far behind + if !isCurrentEpoch && isPreviousPendingAttestations { + return true + } + pendingAttestation := solid.NewPendingAttestionFromParameters( + attestation.AggregationBits(), + data, + i-data.Slot(), + block.Block.ProposerIndex, + ) + + if data.Target().Epoch() == epoch { + currentEpochAttestations.Append(pendingAttestation) + } else { + previousEpochAttestations.Append(pendingAttestation) + } + return true + }) + if err != nil { + return nil, nil, err + } } - previousEpochAttestations.Truncate(int(previousEpochAttestationsLength)) - currentEpochAttestations.Truncate(int(currentEpochAttestationsLength)) return currentEpochAttestations, previousEpochAttestations, nil } @@ -617,6 +722,9 @@ func (r *HistoricalStatesReader) ReadPartecipations(tx kv.Tx, slot uint64) (*sol currentIdxs := solid.NewBitList(int(validatorLength), int(r.cfg.ValidatorRegistryLimit)) previousIdxs := solid.NewBitList(int(validatorLength), int(r.cfg.ValidatorRegistryLimit)) + if err != nil { + return nil, nil, err + } // trigger the cache for shuffled sets in parallel if err := r.tryCachingEpochsInParallell(tx, [][]uint64{currentActiveIndicies, previousActiveIndicies}, []uint64{epoch, prevEpoch}); err != nil { return nil, nil, err @@ -624,7 +732,7 @@ func (r *HistoricalStatesReader) ReadPartecipations(tx kv.Tx, slot uint64) (*sol // Read the previous idxs for i := beginSlot; i <= slot; i++ { // Read the block - block, err := r.blockReader.ReadBlockBySlot(context.Background(), tx, i) + block, err := r.blockReader.ReadBlindedBlockBySlot(context.Background(), tx, i) if err != nil { return nil, nil, err } @@ -666,26 +774,27 @@ func (r *HistoricalStatesReader) ReadPartecipations(tx kv.Tx, slot uint64) (*sol return false } var participationFlagsIndicies []uint8 - participationFlagsIndicies, err = r.getAttestationParticipationFlagIndicies(tx, i, data, i-data.Slot(), true) + participationFlagsIndicies, err = r.getAttestationParticipationFlagIndicies(tx, block.Version(), i, data, i-data.Slot(), true) if err != nil { return false } + prevIdxs := isCurrentEpoch && currentEpoch != prevEpoch // apply the flags for _, idx := range attestingIndicies { - for flagIndex := range r.cfg.ParticipationWeights() { + for _, flagIndex := range participationFlagsIndicies { var flagParticipation cltypes.ParticipationFlags - if isCurrentEpoch && currentEpoch != prevEpoch { + if prevIdxs { flagParticipation = cltypes.ParticipationFlags(currentIdxs.Get(int(idx))) } else { flagParticipation = cltypes.ParticipationFlags(previousIdxs.Get(int(idx))) } - if !slices.Contains(participationFlagsIndicies, uint8(flagIndex)) || flagParticipation.HasFlag(flagIndex) { + if flagParticipation.HasFlag(int(flagIndex)) { continue } - if isCurrentEpoch && currentEpoch != prevEpoch { - currentIdxs.Set(int(idx), byte(flagParticipation.Add(flagIndex))) + if prevIdxs { + currentIdxs.Set(int(idx), byte(flagParticipation.Add(int(flagIndex)))) } else { - previousIdxs.Set(int(idx), byte(flagParticipation.Add(flagIndex))) + previousIdxs.Set(int(idx), byte(flagParticipation.Add(int(flagIndex)))) } } } @@ -700,7 +809,7 @@ func (r *HistoricalStatesReader) ReadPartecipations(tx kv.Tx, slot uint64) (*sol func (r *HistoricalStatesReader) computeRelevantEpochs(slot uint64) (uint64, uint64) { epoch := slot / r.cfg.SlotsPerEpoch - if epoch <= r.cfg.AltairForkEpoch && r.genesisState.Version() < clparams.AltairVersion { + if epoch == r.cfg.GenesisEpoch { return epoch, epoch } return epoch, epoch - 1 @@ -736,7 +845,7 @@ func (r *HistoricalStatesReader) ReadValidatorsBalances(tx kv.Tx, slot uint64) ( return nil, nil } - balances, err := r.reconstructBalances(tx, slot, kv.ValidatorBalance) + balances, err := r.reconstructBalances(tx, sd.ValidatorLength, slot, kv.ValidatorBalance, kv.BalancesDump) if err != nil { return nil, err } diff --git a/cl/persistence/state/historical_states_reader/historical_states_reader_test.go b/cl/persistence/state/historical_states_reader/historical_states_reader_test.go index cec53451589..81079ddcf4c 100644 --- a/cl/persistence/state/historical_states_reader/historical_states_reader_test.go +++ b/cl/persistence/state/historical_states_reader/historical_states_reader_test.go @@ -15,18 +15,16 @@ import ( "github.com/ledgerwatch/erigon/cl/persistence/state/historical_states_reader" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/log/v3" - "github.com/spf13/afero" "github.com/stretchr/testify/require" ) func runTest(t *testing.T, blocks []*cltypes.SignedBeaconBlock, preState, postState *state.CachingBeaconState) { db := memdb.NewTestDB(t) - reader, _ := tests.LoadChain(blocks, postState, db, t) + reader := tests.LoadChain(blocks, postState, db, t) ctx := context.Background() vt := state_accessors.NewStaticValidatorTable() - f := afero.NewMemMapFs() - a := antiquary.NewAntiquary(ctx, preState, vt, &clparams.MainnetBeaconConfig, datadir.New("/tmp"), nil, db, nil, reader, nil, log.New(), true, true, f) + a := antiquary.NewAntiquary(ctx, nil, preState, vt, &clparams.MainnetBeaconConfig, datadir.New("/tmp"), nil, db, nil, reader, log.New(), true, true, true) require.NoError(t, a.IncrementBeaconState(ctx, blocks[len(blocks)-1].Block.Slot+33)) // Now lets test it against the reader tx, err := db.BeginRw(ctx) @@ -35,31 +33,31 @@ func runTest(t *testing.T, blocks []*cltypes.SignedBeaconBlock, preState, postSt vt = state_accessors.NewStaticValidatorTable() require.NoError(t, state_accessors.ReadValidatorsTable(tx, vt)) - hr := historical_states_reader.NewHistoricalStatesReader(&clparams.MainnetBeaconConfig, reader, vt, f, preState) + hr := historical_states_reader.NewHistoricalStatesReader(&clparams.MainnetBeaconConfig, reader, vt, preState) s, err := hr.ReadHistoricalState(ctx, tx, blocks[len(blocks)-1].Block.Slot) require.NoError(t, err) postHash, err := s.HashSSZ() require.NoError(t, err) - postHash2, err := postState.HashSSZ() + _, err = postState.HashSSZ() require.NoError(t, err) - require.Equal(t, libcommon.Hash(postHash2), libcommon.Hash(postHash)) + require.Equal(t, libcommon.Hash(postHash), blocks[len(blocks)-1].Block.StateRoot) } func TestStateAntiquaryCapella(t *testing.T) { - t.Skip() + //t.Skip() blocks, preState, postState := tests.GetCapellaRandom() runTest(t, blocks, preState, postState) } func TestStateAntiquaryPhase0(t *testing.T) { - t.Skip() + //t.Skip() blocks, preState, postState := tests.GetPhase0Random() runTest(t, blocks, preState, postState) } func TestStateAntiquaryBellatrix(t *testing.T) { - t.Skip() + //t.Skip() blocks, preState, postState := tests.GetBellatrixRandom() runTest(t, blocks, preState, postState) } diff --git a/cl/persistence/state/slot_data.go b/cl/persistence/state/slot_data.go index 2d0e865bfc2..2184567f547 100644 --- a/cl/persistence/state/slot_data.go +++ b/cl/persistence/state/slot_data.go @@ -15,13 +15,12 @@ type SlotData struct { // Block Header and Execution Headers can be retrieved from block snapshots Version clparams.StateVersion // Lengths - ValidatorLength uint64 - Eth1DataLength uint64 - PreviousEpochAttestationsLength uint64 - CurrentEpochAttestationsLength uint64 + ValidatorLength uint64 + Eth1DataLength uint64 // Phase0 Eth1Data *cltypes.Eth1Data Eth1DepositIndex uint64 + Fork *cltypes.Fork // Capella NextWithdrawalIndex uint64 NextWithdrawalValidatorIndex uint64 @@ -38,15 +37,15 @@ func SlotDataFromBeaconState(s *state.CachingBeaconState) *SlotData { jj := s.JustificationBits() copy(justificationCopy[:], jj[:]) return &SlotData{ - ValidatorLength: uint64(s.ValidatorLength()), - Eth1DataLength: uint64(s.Eth1DataVotes().Len()), - PreviousEpochAttestationsLength: uint64(s.PreviousEpochAttestations().Len()), - CurrentEpochAttestationsLength: uint64(s.CurrentEpochAttestations().Len()), - Version: s.Version(), - Eth1Data: s.Eth1Data(), - Eth1DepositIndex: s.Eth1DepositIndex(), - NextWithdrawalIndex: s.NextWithdrawalIndex(), - NextWithdrawalValidatorIndex: s.NextWithdrawalValidatorIndex(), + ValidatorLength: uint64(s.ValidatorLength()), + Eth1DataLength: uint64(s.Eth1DataVotes().Len()), + + Version: s.Version(), + Eth1Data: s.Eth1Data(), + Eth1DepositIndex: s.Eth1DepositIndex(), + NextWithdrawalIndex: s.NextWithdrawalIndex(), + NextWithdrawalValidatorIndex: s.NextWithdrawalValidatorIndex(), + Fork: s.Fork(), } } @@ -74,6 +73,7 @@ func (m *SlotData) WriteTo(w io.Writer) error { // Deserialize deserializes the state from a byte slice with zstd compression. func (m *SlotData) ReadFrom(r io.Reader) error { m.Eth1Data = &cltypes.Eth1Data{} + m.Fork = &cltypes.Fork{} var err error versionByte := make([]byte, 1) @@ -97,11 +97,12 @@ func (m *SlotData) ReadFrom(r io.Reader) error { if n != len(buf) { return io.ErrUnexpectedEOF } + return ssz2.UnmarshalSSZ(buf, int(m.Version), m.getSchema()...) } func (m *SlotData) getSchema() []interface{} { - schema := []interface{}{m.Eth1Data, &m.Eth1DepositIndex, &m.ValidatorLength, &m.Eth1DataLength, &m.PreviousEpochAttestationsLength, &m.CurrentEpochAttestationsLength, &m.AttestationsRewards, &m.SyncAggregateRewards, &m.ProposerSlashings, &m.AttesterSlashings} + schema := []interface{}{m.Eth1Data, m.Fork, &m.Eth1DepositIndex, &m.ValidatorLength, &m.Eth1DataLength, &m.AttestationsRewards, &m.SyncAggregateRewards, &m.ProposerSlashings, &m.AttesterSlashings} if m.Version >= clparams.CapellaVersion { schema = append(schema, &m.NextWithdrawalIndex, &m.NextWithdrawalValidatorIndex) } diff --git a/cl/persistence/state/slot_data_test.go b/cl/persistence/state/slot_data_test.go index 6378d159a26..2c4090cd9c3 100644 --- a/cl/persistence/state/slot_data_test.go +++ b/cl/persistence/state/slot_data_test.go @@ -16,6 +16,7 @@ func TestSlotData(t *testing.T) { Eth1DepositIndex: 0, NextWithdrawalIndex: 0, NextWithdrawalValidatorIndex: 0, + Fork: &cltypes.Fork{Epoch: 12}, } var b bytes.Buffer if err := m.WriteTo(&b); err != nil { diff --git a/cl/persistence/state/state_accessors.go b/cl/persistence/state/state_accessors.go index 234641de968..87b407cc548 100644 --- a/cl/persistence/state/state_accessors.go +++ b/cl/persistence/state/state_accessors.go @@ -2,9 +2,7 @@ package state_accessors import ( "bytes" - "io" - "github.com/klauspost/compress/zstd" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" @@ -257,65 +255,6 @@ func ReadHistoricalSummaries(tx kv.Tx, l uint64, fn func(idx int, historicalSumm return nil } -func ReadCurrentEpochAttestations(tx kv.Tx, slot uint64, limit int) (*solid.ListSSZ[*solid.PendingAttestation], error) { - v, err := tx.GetOne(kv.CurrentEpochAttestations, base_encoding.Encode64ToBytes4(slot)) - if err != nil { - return nil, err - } - if len(v) == 0 { - has, err := tx.Has(kv.CurrentEpochAttestations, base_encoding.Encode64ToBytes4(slot)) - if err != nil { - return nil, err - } - if !has { - return nil, nil - } - } - attestations := solid.NewDynamicListSSZ[*solid.PendingAttestation](limit) - reader, err := zstd.NewReader(bytes.NewReader(v)) - if err != nil { - return nil, err - } - - fullSZZ, err := io.ReadAll(reader) - if err != nil { - return nil, err - } - if err := attestations.DecodeSSZ(fullSZZ, 0); err != nil { - return nil, err - } - return attestations, nil -} - -func ReadPreviousEpochAttestations(tx kv.Tx, slot uint64, limit int) (*solid.ListSSZ[*solid.PendingAttestation], error) { - v, err := tx.GetOne(kv.PreviousEpochAttestations, base_encoding.Encode64ToBytes4(slot)) - if err != nil { - return nil, err - } - if len(v) == 0 { - has, err := tx.Has(kv.PreviousEpochAttestations, base_encoding.Encode64ToBytes4(slot)) - if err != nil { - return nil, err - } - if !has { - return nil, nil - } - } - attestations := solid.NewDynamicListSSZ[*solid.PendingAttestation](limit) - reader, err := zstd.NewReader(bytes.NewReader(v)) - if err != nil { - return nil, err - } - fullSZZ, err := io.ReadAll(reader) - if err != nil { - return nil, err - } - if err := attestations.DecodeSSZ(fullSZZ, 0); err != nil { - return nil, err - } - return attestations, nil -} - func ReadValidatorsTable(tx kv.Tx, out *StaticValidatorTable) error { cursor, err := tx.Cursor(kv.StaticValidators) if err != nil { diff --git a/cl/persistence/state/static_validator_table.go b/cl/persistence/state/static_validator_table.go index 5e32b890e2a..e894ff17add 100644 --- a/cl/persistence/state/static_validator_table.go +++ b/cl/persistence/state/static_validator_table.go @@ -203,6 +203,51 @@ func (s *StaticValidator) ToValidator(v solid.Validator, slot uint64) { v.SetWithdrawableEpoch(s.WithdrawableEpoch(slot)) } +func (s *StaticValidator) Reset(slot uint64) { + for i := 0; i < len(s.publicKeys); i++ { + if s.publicKeys[i].Slot > slot { + s.publicKeys = s.publicKeys[:i] + break + } + } + for i := 0; i < len(s.withdrawalCredentials); i++ { + if s.withdrawalCredentials[i].Slot > slot { + s.withdrawalCredentials = s.withdrawalCredentials[:i] + break + } + } + for i := 0; i < len(s.slashed); i++ { + if s.slashed[i].Slot > slot { + s.slashed = s.slashed[:i] + break + } + } + for i := 0; i < len(s.activationEligibility); i++ { + if s.activationEligibility[i].Slot > slot { + s.activationEligibility = s.activationEligibility[:i] + break + } + } + for i := 0; i < len(s.activationEpoch); i++ { + if s.activationEpoch[i].Slot > slot { + s.activationEpoch = s.activationEpoch[:i] + break + } + } + for i := 0; i < len(s.exitEpoch); i++ { + if s.exitEpoch[i].Slot > slot { + s.exitEpoch = s.exitEpoch[:i] + break + } + } + for i := 0; i < len(s.withdrawableEpoch); i++ { + if s.withdrawableEpoch[i].Slot > slot { + s.withdrawableEpoch = s.withdrawableEpoch[:i] + break + } + } +} + type staticValidatorField[V any] struct { Slot uint64 Field V @@ -230,7 +275,7 @@ func (s *StaticValidatorTable) AddValidator(v solid.Validator, validatorIndex, s return nil } s.validatorTable = append(s.validatorTable, NewStaticValidatorFromValidator(v, slot)) - if validatorIndex >= uint64(len(s.validatorTable)) { + if validatorIndex != uint64(len(s.validatorTable))-1 { return fmt.Errorf("validator index mismatch") } return nil @@ -376,12 +421,21 @@ func (s *StaticValidatorTable) GetStaticValidator(validatorIndex uint64) *Static func (s *StaticValidatorTable) SetSlot(slot uint64) { s.sync.Lock() defer s.sync.Unlock() - if slot <= s.slot && s.slot != 0 { - return - } + s.resetTable(slot) s.slot = slot } +func (s *StaticValidatorTable) resetTable(slot uint64) { + for i, v := range s.validatorTable { + v.Reset(slot) + // if we remove all public keys, we can remove all subsequent fields + if len(v.publicKeys) == 0 { + s.validatorTable = s.validatorTable[:i] + break + } + } +} + func (s *StaticValidatorTable) Slot() uint64 { s.sync.RLock() defer s.sync.RUnlock() diff --git a/cl/phase1/cache/attestation_indicies_cache.go b/cl/phase1/cache/attestation_indicies_cache.go deleted file mode 100644 index 00a0fa36c4c..00000000000 --- a/cl/phase1/cache/attestation_indicies_cache.go +++ /dev/null @@ -1,30 +0,0 @@ -package cache - -import ( - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" - "github.com/ledgerwatch/erigon/cl/utils" -) - -var attestationIndiciesCache *lru.Cache[common.Hash, []uint64] - -const attestationIndiciesCacheSize = 1024 - -func LoadAttestatingIndicies(attestation *solid.AttestationData, aggregationBits []byte) ([]uint64, bool) { - bitsHash := utils.Sha256(aggregationBits) - hash, err := attestation.HashSSZ() - if err != nil { - return nil, false - } - return attestationIndiciesCache.Get(utils.Sha256(hash[:], bitsHash[:])) -} - -func StoreAttestation(attestation *solid.AttestationData, aggregationBits []byte, indicies []uint64) { - bitsHash := utils.Sha256(aggregationBits) - hash, err := attestation.HashSSZ() - if err != nil { - return - } - attestationIndiciesCache.Add(utils.Sha256(hash[:], bitsHash[:]), indicies) -} diff --git a/cl/phase1/cache/cache_test.go b/cl/phase1/cache/cache_test.go deleted file mode 100644 index bedade366bb..00000000000 --- a/cl/phase1/cache/cache_test.go +++ /dev/null @@ -1,18 +0,0 @@ -package cache_test - -import ( - "testing" - - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/phase1/cache" - "github.com/stretchr/testify/require" -) - -func TestAttestationsCache(t *testing.T) { - input := []uint64{1} - a := solid.NewAttestationData() - cache.StoreAttestation(&a, []byte{2}, []uint64{1}) - output, valid := cache.LoadAttestatingIndicies(&a, []byte{2}) - require.True(t, valid) - require.Equal(t, input, output) -} diff --git a/cl/phase1/cache/init.go b/cl/phase1/cache/init.go deleted file mode 100644 index 1f349b2b402..00000000000 --- a/cl/phase1/cache/init.go +++ /dev/null @@ -1,13 +0,0 @@ -package cache - -import ( - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" -) - -func init() { - var err error - if attestationIndiciesCache, err = lru.New[common.Hash, []uint64]("attestationIndiciesCacheSize", attestationIndiciesCacheSize); err != nil { - panic(err) - } -} diff --git a/cl/phase1/core/checkpoint.go b/cl/phase1/core/checkpoint.go index 59eaf82aec1..ffaeeb50293 100644 --- a/cl/phase1/core/checkpoint.go +++ b/cl/phase1/core/checkpoint.go @@ -12,11 +12,17 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/utils" "github.com/ledgerwatch/log/v3" ) -func RetrieveBeaconState(ctx context.Context, beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig, uri string) (*state.CachingBeaconState, error) { +func extractSlotFromSerializedBeaconState(beaconState []byte) (uint64, error) { + if len(beaconState) < 48 { + return 0, fmt.Errorf("checkpoint sync read failed, too short") + } + return binary.LittleEndian.Uint64(beaconState[40:48]), nil +} + +func RetrieveBeaconState(ctx context.Context, beaconConfig *clparams.BeaconChainConfig, uri string) (*state.CachingBeaconState, error) { log.Info("[Checkpoint Sync] Requesting beacon state", "uri", uri) req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) if err != nil { @@ -42,7 +48,10 @@ func RetrieveBeaconState(ctx context.Context, beaconConfig *clparams.BeaconChain return nil, fmt.Errorf("checkpoint sync read failed %s", err) } - epoch := utils.GetCurrentEpoch(genesisConfig.GenesisTime, beaconConfig.SecondsPerSlot, beaconConfig.SlotsPerEpoch) + epoch, err := extractSlotFromSerializedBeaconState(marshaled) + if err != nil { + return nil, fmt.Errorf("checkpoint sync read failed %s", err) + } beaconState := state.New(beaconConfig) err = beaconState.DecodeSSZ(marshaled, int(beaconConfig.GetCurrentStateVersion(epoch))) @@ -52,7 +61,7 @@ func RetrieveBeaconState(ctx context.Context, beaconConfig *clparams.BeaconChain return beaconState, nil } -func RetrieveBlock(ctx context.Context, beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig, uri string, expectedBlockRoot *libcommon.Hash) (*cltypes.SignedBeaconBlock, error) { +func RetrieveBlock(ctx context.Context, beaconConfig *clparams.BeaconChainConfig, uri string, expectedBlockRoot *libcommon.Hash) (*cltypes.SignedBeaconBlock, error) { log.Debug("[Checkpoint Sync] Requesting beacon block", "uri", uri) req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) if err != nil { diff --git a/cl/phase1/core/state/accessors.go b/cl/phase1/core/state/accessors.go index 90974b2cce8..7d08c683235 100644 --- a/cl/phase1/core/state/accessors.go +++ b/cl/phase1/core/state/accessors.go @@ -29,7 +29,7 @@ func Epoch(b abstract.BeaconStateBasic) uint64 { return GetEpochAtSlot(b.BeaconConfig(), b.Slot()) } -func IsAggregator(cfg *clparams.BeaconChainConfig, committeeLength, slot, committeeIndex uint64, slotSignature libcommon.Bytes96) bool { +func IsAggregator(cfg *clparams.BeaconChainConfig, committeeLength, committeeIndex uint64, slotSignature libcommon.Bytes96) bool { modulo := utils.Max64(1, committeeLength/cfg.TargetAggregatorsPerCommittee) hashSlotSignatue := utils.Sha256(slotSignature[:]) return binary.LittleEndian.Uint64(hashSlotSignatue[:8])%modulo == 0 @@ -83,7 +83,8 @@ func FinalityDelay(b abstract.BeaconState) uint64 { return PreviousEpoch(b) - b.FinalizedCheckpoint().Epoch() } -// Implementation of is_in_inactivity_leak. tells us if network is in danger pretty much. defined in ETH 2.0 specs. +// InactivityLeaking returns whether epochs are in inactivity penalty. +// Implementation of is_in_inactivity_leak as defined in the ETH 2.0 specs. func InactivityLeaking(b abstract.BeaconState) bool { return FinalityDelay(b) > b.BeaconConfig().MinEpochsToInactivityPenalty } @@ -147,7 +148,7 @@ func IsValidIndexedAttestation(b abstract.BeaconStateBasic, att *cltypes.Indexed return true, nil } -// getUnslashedParticipatingIndices returns set of currently unslashed participating indexes +// GetUnslashedParticipatingIndices returns set of currently unslashed participating indexes. func GetUnslashedParticipatingIndices(b abstract.BeaconState, flagIndex int, epoch uint64) (validatorSet []uint64, err error) { var participation *solid.BitList // Must be either previous or current epoch @@ -172,32 +173,35 @@ func GetUnslashedParticipatingIndices(b abstract.BeaconState, flagIndex int, epo return } -// Implementation of is_eligible_for_activation_queue. Specs at: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#is_eligible_for_activation_queue +// IsValidatorEligibleForActivationQueue returns whether the validator is eligible to be placed into the activation queue. +// Implementation of is_eligible_for_activation_queue. +// Specs at: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#is_eligible_for_activation_queue func IsValidatorEligibleForActivationQueue(b abstract.BeaconState, validator solid.Validator) bool { return validator.ActivationEligibilityEpoch() == b.BeaconConfig().FarFutureEpoch && validator.EffectiveBalance() == b.BeaconConfig().MaxEffectiveBalance } -// Implementation of is_eligible_for_activation. Specs at: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#is_eligible_for_activation +// IsValidatorEligibleForActivation returns whether the validator is eligible for activation. +// Implementation of is_eligible_for_activation. +// Specs at: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#is_eligible_for_activation func IsValidatorEligibleForActivation(b abstract.BeaconState, validator solid.Validator) bool { return validator.ActivationEligibilityEpoch() <= b.FinalizedCheckpoint().Epoch() && validator.ActivationEpoch() == b.BeaconConfig().FarFutureEpoch } -// Check whether a merge transition is complete by verifying the presence of a valid execution payload header. +// IsMergeTransitionComplete returns whether a merge transition is complete by verifying the presence of a valid execution payload header. func IsMergeTransitionComplete(b abstract.BeaconState) bool { return !b.LatestExecutionPayloadHeader().IsZero() } -// Compute the Unix timestamp at the specified slot number. +// ComputeTimestampAtSlot computes the Unix timestamp at the specified slot number. func ComputeTimestampAtSlot(b abstract.BeaconState, slot uint64) uint64 { return b.GenesisTime() + (slot-b.BeaconConfig().GenesisSlot)*b.BeaconConfig().SecondsPerSlot } // ExpectedWithdrawals calculates the expected withdrawals that can be made by validators in the current epoch -func ExpectedWithdrawals(b abstract.BeaconState) []*cltypes.Withdrawal { +func ExpectedWithdrawals(b abstract.BeaconState, currentEpoch uint64) []*cltypes.Withdrawal { // Get the current epoch, the next withdrawal index, and the next withdrawal validator index - currentEpoch := Epoch(b) nextWithdrawalIndex := b.NextWithdrawalIndex() nextWithdrawalValidatorIndex := b.NextWithdrawalValidatorIndex() diff --git a/cl/phase1/core/state/cache.go b/cl/phase1/core/state/cache.go index 63ada362378..70e05d7bc7e 100644 --- a/cl/phase1/core/state/cache.go +++ b/cl/phase1/core/state/cache.go @@ -190,7 +190,10 @@ func (b *CachingBeaconState) _initializeValidatorsPhase0() error { }) } -func (b *CachingBeaconState) _refreshActiveBalances() { +func (b *CachingBeaconState) _refreshActiveBalancesIfNeeded() { + if b.totalActiveBalanceCache != nil && *b.totalActiveBalanceCache != 0 { + return + } epoch := Epoch(b) b.totalActiveBalanceCache = new(uint64) *b.totalActiveBalanceCache = 0 @@ -217,7 +220,8 @@ func (b *CachingBeaconState) initCaches() error { } func (b *CachingBeaconState) InitBeaconState() error { - b._refreshActiveBalances() + b.totalActiveBalanceCache = nil + b._refreshActiveBalancesIfNeeded() b.publicKeyIndicies = make(map[[48]byte]uint64) diff --git a/cl/phase1/core/state/cache_accessors.go b/cl/phase1/core/state/cache_accessors.go index 80685ec5a24..e72bcec31d0 100644 --- a/cl/phase1/core/state/cache_accessors.go +++ b/cl/phase1/core/state/cache_accessors.go @@ -1,12 +1,14 @@ package state import ( + "crypto/sha256" "encoding/binary" "fmt" "math" "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/phase1/core/state/shuffling" + shuffling2 "github.com/ledgerwatch/erigon/cl/phase1/core/state/shuffling" "github.com/Giulio2002/bls" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -40,14 +42,17 @@ func (b *CachingBeaconState) GetActiveValidatorsIndices(epoch uint64) []uint64 { // GetTotalActiveBalance return the sum of all balances within active validators. func (b *CachingBeaconState) GetTotalActiveBalance() uint64 { - if b.totalActiveBalanceCache == nil { - b._refreshActiveBalances() - } + b._refreshActiveBalancesIfNeeded() + return *b.totalActiveBalanceCache } // ComputeCommittee uses cache to compute compittee -func (b *CachingBeaconState) ComputeCommittee(indicies []uint64, slot uint64, index, count uint64) ([]uint64, error) { +func (b *CachingBeaconState) ComputeCommittee( + indicies []uint64, + slot uint64, + index, count uint64, +) ([]uint64, error) { lenIndicies := uint64(len(indicies)) start := (lenIndicies * index) / count end := (lenIndicies * (index + 1)) / count @@ -82,20 +87,45 @@ func (b *CachingBeaconState) GetBeaconProposerIndex() (uint64, error) { return *b.proposerIndex, nil } +// GetBeaconProposerIndexForSlot compute the proposer index for a specific slot +func (b *CachingBeaconState) GetBeaconProposerIndexForSlot(slot uint64) (uint64, error) { + epoch := slot / b.BeaconConfig().SlotsPerEpoch + + hash := sha256.New() + beaconConfig := b.BeaconConfig() + mixPosition := (epoch + beaconConfig.EpochsPerHistoricalVector - beaconConfig.MinSeedLookahead - 1) % + beaconConfig.EpochsPerHistoricalVector + // Input for the seed hash. + mix := b.GetRandaoMix(int(mixPosition)) + input := shuffling2.GetSeed(b.BeaconConfig(), mix, epoch, b.BeaconConfig().DomainBeaconProposer) + slotByteArray := make([]byte, 8) + binary.LittleEndian.PutUint64(slotByteArray, slot) + + // Add slot to the end of the input. + inputWithSlot := append(input[:], slotByteArray...) + + // Calculate the hash. + hash.Write(inputWithSlot) + seed := hash.Sum(nil) + + indices := b.GetActiveValidatorsIndices(epoch) + // Write the seed to an array. + seedArray := [32]byte{} + copy(seedArray[:], seed) + return shuffling2.ComputeProposerIndex(b.BeaconState, indices, seedArray) +} + // BaseRewardPerIncrement return base rewards for processing sync committee and duties. func (b *CachingBeaconState) BaseRewardPerIncrement() uint64 { - if b.totalActiveBalanceCache == nil { - b._refreshActiveBalances() - } + b._refreshActiveBalancesIfNeeded() + return b.BeaconConfig().EffectiveBalanceIncrement * b.BeaconConfig().BaseRewardFactor / b.totalActiveBalanceRootCache } // BaseReward return base rewards for processing sync committee and duties. func (b *CachingBeaconState) BaseReward(index uint64) (uint64, error) { - if b.totalActiveBalanceCache == nil { - b._refreshActiveBalances() - } + b._refreshActiveBalancesIfNeeded() effectiveBalance, err := b.ValidatorEffectiveBalance(int(index)) if err != nil { @@ -125,7 +155,9 @@ func (b *CachingBeaconState) SyncRewards() (proposerReward, participantReward ui // CommitteeCount returns current number of committee for epoch. func (b *CachingBeaconState) CommitteeCount(epoch uint64) uint64 { - committeCount := uint64(len(b.GetActiveValidatorsIndices(epoch))) / b.BeaconConfig().SlotsPerEpoch / b.BeaconConfig().TargetCommitteeSize + committeCount := uint64( + len(b.GetActiveValidatorsIndices(epoch)), + ) / b.BeaconConfig().SlotsPerEpoch / b.BeaconConfig().TargetCommitteeSize if b.BeaconConfig().MaxCommitteesPerSlot < committeCount { committeCount = b.BeaconConfig().MaxCommitteesPerSlot } @@ -135,7 +167,11 @@ func (b *CachingBeaconState) CommitteeCount(epoch uint64) uint64 { return committeCount } -func (b *CachingBeaconState) GetAttestationParticipationFlagIndicies(data solid.AttestationData, inclusionDelay uint64, skipAssert bool) ([]uint8, error) { +func (b *CachingBeaconState) GetAttestationParticipationFlagIndicies( + data solid.AttestationData, + inclusionDelay uint64, + skipAssert bool, +) ([]uint8, error) { var justifiedCheckpoint solid.Checkpoint // get checkpoint from epoch @@ -146,16 +182,7 @@ func (b *CachingBeaconState) GetAttestationParticipationFlagIndicies(data solid. } // Matching roots if !data.Source().Equal(justifiedCheckpoint) && !skipAssert { - // jsonify the data.Source and justifiedCheckpoint - jsonSource, err := data.Source().MarshalJSON() - if err != nil { - return nil, err - } - jsonJustifiedCheckpoint, err := justifiedCheckpoint.MarshalJSON() - if err != nil { - return nil, err - } - return nil, fmt.Errorf("GetAttestationParticipationFlagIndicies: source does not match. source: %s, justifiedCheckpoint: %s", jsonSource, jsonJustifiedCheckpoint) + return nil, fmt.Errorf("GetAttestationParticipationFlagIndicies: source does not match") } targetRoot, err := GetBlockRoot(b, data.Target().Epoch()) if err != nil { @@ -169,16 +196,29 @@ func (b *CachingBeaconState) GetAttestationParticipationFlagIndicies(data solid. matchingHead := matchingTarget && data.BeaconBlockRoot() == headRoot participationFlagIndicies := []uint8{} if inclusionDelay <= utils.IntegerSquareRoot(b.BeaconConfig().SlotsPerEpoch) { - participationFlagIndicies = append(participationFlagIndicies, b.BeaconConfig().TimelySourceFlagIndex) + participationFlagIndicies = append( + participationFlagIndicies, + b.BeaconConfig().TimelySourceFlagIndex, + ) } - if b.Version() < clparams.DenebVersion && matchingTarget && inclusionDelay <= b.BeaconConfig().SlotsPerEpoch { - participationFlagIndicies = append(participationFlagIndicies, b.BeaconConfig().TimelyTargetFlagIndex) + if b.Version() < clparams.DenebVersion && matchingTarget && + inclusionDelay <= b.BeaconConfig().SlotsPerEpoch { + participationFlagIndicies = append( + participationFlagIndicies, + b.BeaconConfig().TimelyTargetFlagIndex, + ) } if b.Version() >= clparams.DenebVersion && matchingTarget { - participationFlagIndicies = append(participationFlagIndicies, b.BeaconConfig().TimelyTargetFlagIndex) + participationFlagIndicies = append( + participationFlagIndicies, + b.BeaconConfig().TimelyTargetFlagIndex, + ) } if matchingHead && inclusionDelay == b.BeaconConfig().MinAttestationInclusionDelay { - participationFlagIndicies = append(participationFlagIndicies, b.BeaconConfig().TimelyHeadFlagIndex) + participationFlagIndicies = append( + participationFlagIndicies, + b.BeaconConfig().TimelyHeadFlagIndex, + ) } return participationFlagIndicies, nil } @@ -265,17 +305,22 @@ func (b *CachingBeaconState) ComputeNextSyncCommittee() (*solid.SyncCommittee, e // GetAttestingIndicies retrieves attesting indicies for a specific attestation. however some tests will not expect the aggregation bits check. // thus, it is a flag now. -func (b *CachingBeaconState) GetAttestingIndicies(attestation solid.AttestationData, aggregationBits []byte, checkBitsLength bool) ([]uint64, error) { - // if cached, ok := cache.LoadAttestatingIndicies(&attestation, aggregationBits); ok { - // return cached, nil - // } - committee, err := b.GetBeaconCommitee(attestation.Slot(), attestation.ValidatorIndex()) +func (b *CachingBeaconState) GetAttestingIndicies( + attestation solid.AttestationData, + aggregationBits []byte, + checkBitsLength bool, +) ([]uint64, error) { + committee, err := b.GetBeaconCommitee(attestation.Slot(), attestation.CommitteeIndex()) if err != nil { return nil, err } aggregationBitsLen := utils.GetBitlistLength(aggregationBits) if checkBitsLength && utils.GetBitlistLength(aggregationBits) != len(committee) { - return nil, fmt.Errorf("GetAttestingIndicies: invalid aggregation bits. agg bits size: %d, expect: %d", aggregationBitsLen, len(committee)) + return nil, fmt.Errorf( + "GetAttestingIndicies: invalid aggregation bits. agg bits size: %d, expect: %d", + aggregationBitsLen, + len(committee), + ) } attestingIndices := []uint64{} @@ -289,20 +334,25 @@ func (b *CachingBeaconState) GetAttestingIndicies(attestation solid.AttestationD attestingIndices = append(attestingIndices, member) } } - // cache.StoreAttestation(&attestation, aggregationBits, attestingIndices) return attestingIndices, nil } // See: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#get_validator_churn_limit func (b *CachingBeaconState) GetValidatorChurnLimit() uint64 { activeIndsCount := uint64(len(b.GetActiveValidatorsIndices(Epoch(b)))) - return utils.Max64(activeIndsCount/b.BeaconConfig().ChurnLimitQuotient, b.BeaconConfig().MinPerEpochChurnLimit) + return utils.Max64( + activeIndsCount/b.BeaconConfig().ChurnLimitQuotient, + b.BeaconConfig().MinPerEpochChurnLimit, + ) } // https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/beacon-chain.md#new-get_validator_activation_churn_limit func (b *CachingBeaconState) GetValidatorActivationChurnLimit() uint64 { if b.Version() >= clparams.DenebVersion { - return utils.Min64(b.BeaconConfig().MaxPerEpochActivationChurnLimit, b.GetValidatorChurnLimit()) + return utils.Min64( + b.BeaconConfig().MaxPerEpochActivationChurnLimit, + b.GetValidatorChurnLimit(), + ) } return b.GetValidatorChurnLimit() } diff --git a/cl/phase1/core/state/interface.go b/cl/phase1/core/state/interface.go new file mode 100644 index 00000000000..eb1e14a3973 --- /dev/null +++ b/cl/phase1/core/state/interface.go @@ -0,0 +1,12 @@ +package state + +import libcommon "github.com/ledgerwatch/erigon-lib/common" + +// BeaconStateReader is an interface for reading the beacon state. +// +//go:generate mockgen -typed=true -destination=./mock_services/beacon_state_reader_mock.go -package=mock_services . BeaconStateReader +type BeaconStateReader interface { + ValidatorPublicKey(index int) (libcommon.Bytes48, error) + GetDomain(domainType [4]byte, epoch uint64) ([]byte, error) + CommitteeCount(epoch uint64) uint64 +} diff --git a/cl/phase1/core/state/lru/lru.go b/cl/phase1/core/state/lru/lru.go index b1da5285616..e1d25ba5a4c 100644 --- a/cl/phase1/core/state/lru/lru.go +++ b/cl/phase1/core/state/lru/lru.go @@ -2,8 +2,10 @@ package lru import ( "fmt" + "time" lru "github.com/hashicorp/golang-lru/v2" + "github.com/hashicorp/golang-lru/v2/expirable" "github.com/ledgerwatch/erigon-lib/metrics" ) @@ -39,3 +41,23 @@ func (c *Cache[K, V]) Get(k K) (V, bool) { } return v, ok } + +type CacheWithTTL[K comparable, V any] struct { + *expirable.LRU[K, V] + metric string +} + +func NewWithTTL[K comparable, V any](metricName string, size int, ttl time.Duration) *CacheWithTTL[K, V] { + cache := expirable.NewLRU[K, V](size, nil, ttl) + return &CacheWithTTL[K, V]{LRU: cache, metric: metricName} +} + +func (c *CacheWithTTL[K, V]) Get(k K) (V, bool) { + v, ok := c.LRU.Get(k) + if ok { + metrics.GetOrCreateCounter(fmt.Sprintf(`golang_ttl_lru_cache_hit{%s="%s"}`, "cache", c.metric)).Inc() + } else { + metrics.GetOrCreateCounter(fmt.Sprintf(`golang_ttl_lru_cache_miss{%s="%s"}`, "cache", c.metric)).Inc() + } + return v, ok +} diff --git a/cl/phase1/core/state/mock_services/beacon_state_reader_mock.go b/cl/phase1/core/state/mock_services/beacon_state_reader_mock.go new file mode 100644 index 00000000000..94875a81103 --- /dev/null +++ b/cl/phase1/core/state/mock_services/beacon_state_reader_mock.go @@ -0,0 +1,156 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/core/state (interfaces: BeaconStateReader) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/beacon_state_reader_mock.go -package=mock_services . BeaconStateReader +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + reflect "reflect" + + common "github.com/ledgerwatch/erigon-lib/common" + gomock "go.uber.org/mock/gomock" +) + +// MockBeaconStateReader is a mock of BeaconStateReader interface. +type MockBeaconStateReader struct { + ctrl *gomock.Controller + recorder *MockBeaconStateReaderMockRecorder +} + +// MockBeaconStateReaderMockRecorder is the mock recorder for MockBeaconStateReader. +type MockBeaconStateReaderMockRecorder struct { + mock *MockBeaconStateReader +} + +// NewMockBeaconStateReader creates a new mock instance. +func NewMockBeaconStateReader(ctrl *gomock.Controller) *MockBeaconStateReader { + mock := &MockBeaconStateReader{ctrl: ctrl} + mock.recorder = &MockBeaconStateReaderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockBeaconStateReader) EXPECT() *MockBeaconStateReaderMockRecorder { + return m.recorder +} + +// CommitteeCount mocks base method. +func (m *MockBeaconStateReader) CommitteeCount(arg0 uint64) uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CommitteeCount", arg0) + ret0, _ := ret[0].(uint64) + return ret0 +} + +// CommitteeCount indicates an expected call of CommitteeCount. +func (mr *MockBeaconStateReaderMockRecorder) CommitteeCount(arg0 any) *MockBeaconStateReaderCommitteeCountCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CommitteeCount", reflect.TypeOf((*MockBeaconStateReader)(nil).CommitteeCount), arg0) + return &MockBeaconStateReaderCommitteeCountCall{Call: call} +} + +// MockBeaconStateReaderCommitteeCountCall wrap *gomock.Call +type MockBeaconStateReaderCommitteeCountCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockBeaconStateReaderCommitteeCountCall) Return(arg0 uint64) *MockBeaconStateReaderCommitteeCountCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockBeaconStateReaderCommitteeCountCall) Do(f func(uint64) uint64) *MockBeaconStateReaderCommitteeCountCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockBeaconStateReaderCommitteeCountCall) DoAndReturn(f func(uint64) uint64) *MockBeaconStateReaderCommitteeCountCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetDomain mocks base method. +func (m *MockBeaconStateReader) GetDomain(arg0 [4]byte, arg1 uint64) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetDomain", arg0, arg1) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDomain indicates an expected call of GetDomain. +func (mr *MockBeaconStateReaderMockRecorder) GetDomain(arg0, arg1 any) *MockBeaconStateReaderGetDomainCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDomain", reflect.TypeOf((*MockBeaconStateReader)(nil).GetDomain), arg0, arg1) + return &MockBeaconStateReaderGetDomainCall{Call: call} +} + +// MockBeaconStateReaderGetDomainCall wrap *gomock.Call +type MockBeaconStateReaderGetDomainCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockBeaconStateReaderGetDomainCall) Return(arg0 []byte, arg1 error) *MockBeaconStateReaderGetDomainCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockBeaconStateReaderGetDomainCall) Do(f func([4]byte, uint64) ([]byte, error)) *MockBeaconStateReaderGetDomainCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockBeaconStateReaderGetDomainCall) DoAndReturn(f func([4]byte, uint64) ([]byte, error)) *MockBeaconStateReaderGetDomainCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// ValidatorPublicKey mocks base method. +func (m *MockBeaconStateReader) ValidatorPublicKey(arg0 int) (common.Bytes48, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ValidatorPublicKey", arg0) + ret0, _ := ret[0].(common.Bytes48) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ValidatorPublicKey indicates an expected call of ValidatorPublicKey. +func (mr *MockBeaconStateReaderMockRecorder) ValidatorPublicKey(arg0 any) *MockBeaconStateReaderValidatorPublicKeyCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ValidatorPublicKey", reflect.TypeOf((*MockBeaconStateReader)(nil).ValidatorPublicKey), arg0) + return &MockBeaconStateReaderValidatorPublicKeyCall{Call: call} +} + +// MockBeaconStateReaderValidatorPublicKeyCall wrap *gomock.Call +type MockBeaconStateReaderValidatorPublicKeyCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockBeaconStateReaderValidatorPublicKeyCall) Return(arg0 common.Bytes48, arg1 error) *MockBeaconStateReaderValidatorPublicKeyCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockBeaconStateReaderValidatorPublicKeyCall) Do(f func(int) (common.Bytes48, error)) *MockBeaconStateReaderValidatorPublicKeyCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockBeaconStateReaderValidatorPublicKeyCall) DoAndReturn(f func(int) (common.Bytes48, error)) *MockBeaconStateReaderValidatorPublicKeyCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/core/state/raw/getters.go b/cl/phase1/core/state/raw/getters.go index 1d234a647a0..d66a81b078c 100644 --- a/cl/phase1/core/state/raw/getters.go +++ b/cl/phase1/core/state/raw/getters.go @@ -131,7 +131,7 @@ func (b *BeaconState) ValidatorBalance(index int) (uint64, error) { } func (b *BeaconState) ValidatorPublicKey(index int) (libcommon.Bytes48, error) { - if index >= b.balances.Length() { + if index >= b.validators.Length() { return libcommon.Bytes48{}, ErrInvalidValidatorIndex } return b.validators.Get(index).PublicKey(), nil diff --git a/cl/phase1/core/state/raw/hashing.go b/cl/phase1/core/state/raw/hashing.go index 7be41d67830..fda5d80b14b 100644 --- a/cl/phase1/core/state/raw/hashing.go +++ b/cl/phase1/core/state/raw/hashing.go @@ -11,6 +11,8 @@ import ( ) func (b *BeaconState) HashSSZ() (out [32]byte, err error) { + b.mu.Lock() + defer b.mu.Unlock() if err = b.computeDirtyLeaves(); err != nil { return [32]byte{}, err } diff --git a/cl/phase1/core/state/raw/state.go b/cl/phase1/core/state/raw/state.go index f84eade855a..7e5ec23d3ce 100644 --- a/cl/phase1/core/state/raw/state.go +++ b/cl/phase1/core/state/raw/state.go @@ -3,6 +3,7 @@ package raw import ( "encoding/json" "strconv" + "sync" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/clparams" @@ -62,6 +63,8 @@ type BeaconState struct { version clparams.StateVersion // State version beaconConfig *clparams.BeaconChainConfig events Events + + mu sync.Mutex } func New(cfg *clparams.BeaconChainConfig) *BeaconState { diff --git a/cl/phase1/core/state/shuffling/util.go b/cl/phase1/core/state/shuffling/util.go index afd16e67c47..034db5092e4 100644 --- a/cl/phase1/core/state/shuffling/util.go +++ b/cl/phase1/core/state/shuffling/util.go @@ -23,7 +23,7 @@ func ComputeShuffledIndex(conf *clparams.BeaconChainConfig, ind, ind_count uint6 // Read hash value. hashValue := binary.LittleEndian.Uint64(preInputs[i][:8]) - // Caclulate pivot and flip. + // Calculate pivot and flip. pivot := hashValue % ind_count flip := (pivot + ind_count - ind) % ind_count diff --git a/cl/phase1/core/state/upgrade.go b/cl/phase1/core/state/upgrade.go index caa12f7ead3..e7f4cae9589 100644 --- a/cl/phase1/core/state/upgrade.go +++ b/cl/phase1/core/state/upgrade.go @@ -14,7 +14,7 @@ func (b *CachingBeaconState) UpgradeToAltair() error { // update version fork := b.Fork() fork.Epoch = epoch - fork.CurrentVersion = utils.Uint32ToBytes4(b.BeaconConfig().AltairForkVersion) + fork.CurrentVersion = utils.Uint32ToBytes4(uint32(b.BeaconConfig().AltairForkVersion)) b.SetFork(fork) // Process new fields b.SetPreviousEpochParticipationFlags(make(cltypes.ParticipationFlagsList, b.ValidatorLength())) @@ -67,7 +67,7 @@ func (b *CachingBeaconState) UpgradeToBellatrix() error { fork := b.Fork() fork.Epoch = epoch fork.PreviousVersion = fork.CurrentVersion - fork.CurrentVersion = utils.Uint32ToBytes4(b.BeaconConfig().BellatrixForkVersion) + fork.CurrentVersion = utils.Uint32ToBytes4(uint32(b.BeaconConfig().BellatrixForkVersion)) b.SetFork(fork) b.SetLatestExecutionPayloadHeader(cltypes.NewEth1Header(clparams.BellatrixVersion)) // Update the state root cache @@ -82,7 +82,7 @@ func (b *CachingBeaconState) UpgradeToCapella() error { fork := b.Fork() fork.Epoch = epoch fork.PreviousVersion = fork.CurrentVersion - fork.CurrentVersion = utils.Uint32ToBytes4(b.BeaconConfig().CapellaForkVersion) + fork.CurrentVersion = utils.Uint32ToBytes4(uint32(b.BeaconConfig().CapellaForkVersion)) b.SetFork(fork) // Update the payload header. header := b.LatestExecutionPayloadHeader() @@ -104,7 +104,7 @@ func (b *CachingBeaconState) UpgradeToDeneb() error { fork := b.Fork() fork.Epoch = epoch fork.PreviousVersion = fork.CurrentVersion - fork.CurrentVersion = utils.Uint32ToBytes4(b.BeaconConfig().DenebForkVersion) + fork.CurrentVersion = utils.Uint32ToBytes4(uint32(b.BeaconConfig().DenebForkVersion)) b.SetFork(fork) // Update the payload header. header := b.LatestExecutionPayloadHeader() diff --git a/cl/phase1/core/state/upgrade_test.go b/cl/phase1/core/state/upgrade_test.go index 76414eaa5d4..560a3e18ef7 100644 --- a/cl/phase1/core/state/upgrade_test.go +++ b/cl/phase1/core/state/upgrade_test.go @@ -21,7 +21,7 @@ func TestUpgradeAndExpectedWithdrawals(t *testing.T) { require.NoError(t, s.UpgradeToCapella()) require.NoError(t, s.UpgradeToDeneb()) // now WITHDRAWAAALLLLSSSS - w := ExpectedWithdrawals(s) + w := ExpectedWithdrawals(s, Epoch(s)) assert.Empty(t, w) } diff --git a/cl/phase1/core/state/util.go b/cl/phase1/core/state/util.go index 3706283ec6b..9a6c684a863 100644 --- a/cl/phase1/core/state/util.go +++ b/cl/phase1/core/state/util.go @@ -24,7 +24,7 @@ func copyLRU[K comparable, V any](dst *lru.Cache[K, V], src *lru.Cache[K, V]) *l } func GetIndexedAttestation(attestation *solid.Attestation, attestingIndicies []uint64) *cltypes.IndexedAttestation { - // Sort the the attestation indicies. + // Sort the attestation indicies. sort.Slice(attestingIndicies, func(i, j int) bool { return attestingIndicies[i] < attestingIndicies[j] }) @@ -53,14 +53,14 @@ func ValidatorFromDeposit(conf *clparams.BeaconChainConfig, deposit *cltypes.Dep // Check whether a validator is fully withdrawable at the given epoch. func isFullyWithdrawableValidator(conf *clparams.BeaconChainConfig, validator solid.Validator, balance uint64, epoch uint64) bool { withdrawalCredentials := validator.WithdrawalCredentials() - return withdrawalCredentials[0] == conf.ETH1AddressWithdrawalPrefixByte && + return withdrawalCredentials[0] == byte(conf.ETH1AddressWithdrawalPrefixByte) && validator.WithdrawableEpoch() <= epoch && balance > 0 } // Check whether a validator is partially withdrawable. func isPartiallyWithdrawableValidator(conf *clparams.BeaconChainConfig, validator solid.Validator, balance uint64) bool { withdrawalCredentials := validator.WithdrawalCredentials() - return withdrawalCredentials[0] == conf.ETH1AddressWithdrawalPrefixByte && + return withdrawalCredentials[0] == byte(conf.ETH1AddressWithdrawalPrefixByte) && validator.EffectiveBalance() == conf.MaxEffectiveBalance && balance > conf.MaxEffectiveBalance } diff --git a/cl/phase1/execution_client/block_collector/block_collector.go b/cl/phase1/execution_client/block_collector/block_collector.go new file mode 100644 index 00000000000..933dbba2118 --- /dev/null +++ b/cl/phase1/execution_client/block_collector/block_collector.go @@ -0,0 +1,154 @@ +package block_collector + +import ( + "context" + "fmt" + "sync" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/etl" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" + "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/phase1/execution_client" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/log/v3" +) + +var ( + etlPrefix = "Caplin-Blocks" + batchSize = 1000 +) + +type BlockCollector interface { + AddBlock(block *cltypes.BeaconBlock) error + Flush(ctx context.Context) error +} + +type blockCollector struct { + collector *etl.Collector // simple etl.Collector + tmpdir string + beaconChainCfg *clparams.BeaconChainConfig + size uint64 + logger log.Logger + engine execution_client.ExecutionEngine + + mu sync.Mutex +} + +// NewBlockCollector creates a new block collector +func NewBlockCollector(logger log.Logger, engine execution_client.ExecutionEngine, beaconChainCfg *clparams.BeaconChainConfig, tmpdir string) BlockCollector { + return &blockCollector{ + collector: etl.NewCollector(etlPrefix, tmpdir, etl.NewSortableBuffer(etl.BufferOptimalSize), logger), + tmpdir: tmpdir, + beaconChainCfg: beaconChainCfg, + logger: logger, + engine: engine, + } +} + +// AddBlock adds the execution payload part of the block to the collector +func (b *blockCollector) AddBlock(block *cltypes.BeaconBlock) error { + b.mu.Lock() + defer b.mu.Unlock() + payload := block.Body.ExecutionPayload + encodedBlock, err := encodeBlock(payload, block.ParentRoot) + if err != nil { + return err + } + key, err := payloadKey(payload) + if err != nil { + return err + } + b.size++ + return b.collector.Collect(key, encodedBlock) +} + +func (b *blockCollector) Flush(ctx context.Context) error { + b.mu.Lock() + defer b.mu.Unlock() + if b.size == 0 { + return nil + } + tmpDB := memdb.New(b.tmpdir) + defer tmpDB.Close() + defer b.collector.Close() + tmpTx, err := tmpDB.BeginRw(ctx) + if err != nil { + return err + } + defer tmpTx.Rollback() + blocksBatch := []*types.Block{} + + if err := b.collector.Load(tmpTx, kv.Headers, func(k, v []byte, table etl.CurrentTableReader, next etl.LoadNextFunc) error { + if len(v) == 0 { + return nil + } + v, err = utils.DecompressSnappy(v) + if err != nil { + return err + } + version := clparams.StateVersion(v[0]) + parentRoot := common.BytesToHash(v[1:33]) + v = v[33:] + executionPayload := cltypes.NewEth1Block(version, b.beaconChainCfg) + if err := executionPayload.DecodeSSZ(v, int(version)); err != nil { + return err + } + body := executionPayload.Body() + txs, err := types.DecodeTransactions(body.Transactions) + if err != nil { + b.logger.Warn("bad blocks segment received", "err", err) + return err + } + header, err := executionPayload.RlpHeader(&parentRoot) + if err != nil { + b.logger.Warn("bad blocks segment received", "err", err) + return err + } + blocksBatch = append(blocksBatch, types.NewBlockFromStorage(executionPayload.BlockHash, header, txs, nil, body.Withdrawals)) + if len(blocksBatch) >= batchSize { + if err := b.engine.InsertBlocks(ctx, blocksBatch, true); err != nil { + b.logger.Warn("failed to insert blocks", "err", err) + } + b.logger.Info("[Caplin] Inserted blocks", "progress", blocksBatch[len(blocksBatch)-1].NumberU64()) + blocksBatch = []*types.Block{} + } + return next(k, nil, nil) + }, etl.TransformArgs{}); err != nil { + return err + } + if len(blocksBatch) > 0 { + if err := b.engine.InsertBlocks(ctx, blocksBatch, true); err != nil { + b.logger.Warn("failed to insert blocks", "err", err) + } + } + b.size = 0 + // Create a new collector + b.collector = etl.NewCollector(etlPrefix, b.tmpdir, etl.NewSortableBuffer(etl.BufferOptimalSize), b.logger) + return nil + +} + +// serializes block value +func encodeBlock(payload *cltypes.Eth1Block, parentRoot common.Hash) ([]byte, error) { + encodedPayload, err := payload.EncodeSSZ(nil) + if err != nil { + return nil, fmt.Errorf("error encoding execution payload during download: %s", err) + } + // Use snappy compression that the temporary files do not take too much disk. + return utils.CompressSnappy(append([]byte{byte(payload.Version())}, append(parentRoot[:], encodedPayload...)...)), nil +} + +// payloadKey returns the key for the payload: number + payload.HashTreeRoot() +func payloadKey(payload *cltypes.Eth1Block) ([]byte, error) { + root, err := payload.HashSSZ() + if err != nil { + return nil, err + } + numberBytes := dbutils.EncodeBlockNumber(payload.BlockNumber) + return append(numberBytes, root[:]...), nil +} diff --git a/cl/phase1/execution_client/block_collector/block_collector_test.go b/cl/phase1/execution_client/block_collector/block_collector_test.go new file mode 100644 index 00000000000..dc42cfd38ba --- /dev/null +++ b/cl/phase1/execution_client/block_collector/block_collector_test.go @@ -0,0 +1,44 @@ +package block_collector_test + +import ( + "context" + "testing" + + "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/phase1/execution_client" + "github.com/ledgerwatch/erigon/cl/phase1/execution_client/block_collector" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func TestBlockCollectorAccumulateAndFlush(t *testing.T) { + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + engine := execution_client.NewMockExecutionEngine(ctrl) + blocks, _, _ := tests.GetBellatrixRandom() + + blocksLeft := make(map[uint64]struct{}) + for _, block := range blocks { + blocksLeft[block.Block.Body.ExecutionPayload.BlockNumber] = struct{}{} + } + + engine.EXPECT().InsertBlocks(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes().DoAndReturn(func(ctx context.Context, blocks []*types.Block, wait bool) error { + for _, block := range blocks { + delete(blocksLeft, block.NumberU64()) + } + return nil + }) + bc := block_collector.NewBlockCollector(log.Root(), engine, &clparams.MainnetBeaconConfig, ".") + for _, block := range blocks { + err := bc.AddBlock(block.Block) + if err != nil { + t.Fatal(err) + } + } + require.NoError(t, bc.Flush(context.Background())) + require.Equal(t, len(blocksLeft), 0) +} diff --git a/cl/phase1/execution_client/execution_client_direct.go b/cl/phase1/execution_client/execution_client_direct.go index cf827e4f8b8..389442d59cd 100644 --- a/cl/phase1/execution_client/execution_client_direct.go +++ b/cl/phase1/execution_client/execution_client_direct.go @@ -2,28 +2,29 @@ package execution_client import ( "context" + "encoding/binary" "fmt" + "math/big" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces/execution" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/turbo/engineapi/engine_types" "github.com/ledgerwatch/erigon/turbo/execution/eth1/eth1_chain_reader.go" ) type ExecutionClientDirect struct { chainRW eth1_chain_reader.ChainReaderWriterEth1 - ctx context.Context } -func NewExecutionClientDirect(ctx context.Context, chainRW eth1_chain_reader.ChainReaderWriterEth1) (*ExecutionClientDirect, error) { +func NewExecutionClientDirect(chainRW eth1_chain_reader.ChainReaderWriterEth1) (*ExecutionClientDirect, error) { return &ExecutionClientDirect{ chainRW: chainRW, - ctx: ctx, }, nil } -func (cc *ExecutionClientDirect) NewPayload(payload *cltypes.Eth1Block, beaconParentRoot *libcommon.Hash) (invalid bool, err error) { +func (cc *ExecutionClientDirect) NewPayload(ctx context.Context, payload *cltypes.Eth1Block, beaconParentRoot *libcommon.Hash, versionedHashes []libcommon.Hash) (invalid bool, err error) { if payload == nil { return } @@ -39,11 +40,16 @@ func (cc *ExecutionClientDirect) NewPayload(payload *cltypes.Eth1Block, beaconPa return true, err } - if err := cc.chainRW.InsertBlockAndWait(types.NewBlockFromStorage(payload.BlockHash, header, txs, nil, body.Withdrawals)); err != nil { + if err := cc.chainRW.InsertBlockAndWait(ctx, types.NewBlockFromStorage(payload.BlockHash, header, txs, nil, body.Withdrawals)); err != nil { return false, err } - status, _, err := cc.chainRW.ValidateChain(payload.BlockHash, payload.BlockNumber) + headHeader := cc.chainRW.CurrentHeader(ctx) + if headHeader == nil || header.Number.Uint64() > headHeader.Number.Uint64()+1 { + return false, nil // import optimistically. + } + + status, _, _, err := cc.chainRW.ValidateChain(ctx, payload.BlockHash, payload.BlockNumber) if err != nil { return false, err } @@ -52,50 +58,74 @@ func (cc *ExecutionClientDirect) NewPayload(payload *cltypes.Eth1Block, beaconPa return } -func (cc *ExecutionClientDirect) ForkChoiceUpdate(finalized libcommon.Hash, head libcommon.Hash) error { - status, _, err := cc.chainRW.UpdateForkChoice(head, head, finalized) +func (cc *ExecutionClientDirect) ForkChoiceUpdate(ctx context.Context, finalized libcommon.Hash, head libcommon.Hash, attr *engine_types.PayloadAttributes) ([]byte, error) { + status, _, _, err := cc.chainRW.UpdateForkChoice(ctx, head, head, finalized) if err != nil { - return fmt.Errorf("execution Client RPC failed to retrieve ForkChoiceUpdate response, err: %w", err) + return nil, fmt.Errorf("execution Client RPC failed to retrieve ForkChoiceUpdate response, err: %w", err) } if status == execution.ExecutionStatus_InvalidForkchoice { - return fmt.Errorf("forkchoice was invalid") + return nil, fmt.Errorf("forkchoice was invalid") } if status == execution.ExecutionStatus_BadBlock { - return fmt.Errorf("bad block as forkchoice") + return nil, fmt.Errorf("bad block as forkchoice") + } + if attr == nil { + return nil, nil } - return nil + idBytes := make([]byte, 8) + id, err := cc.chainRW.AssembleBlock(head, attr) + if err != nil { + return nil, err + } + binary.LittleEndian.PutUint64(idBytes, id) + return idBytes, nil } func (cc *ExecutionClientDirect) SupportInsertion() bool { return true } -func (cc *ExecutionClientDirect) InsertBlocks(blks []*types.Block) error { - return cc.chainRW.InsertBlocksAndWait(blks) +func (cc *ExecutionClientDirect) InsertBlocks(ctx context.Context, blocks []*types.Block, wait bool) error { + if wait { + return cc.chainRW.InsertBlocksAndWait(ctx, blocks) + } + return cc.chainRW.InsertBlocks(ctx, blocks) +} + +func (cc *ExecutionClientDirect) InsertBlock(ctx context.Context, blk *types.Block) error { + return cc.chainRW.InsertBlockAndWait(ctx, blk) } -func (cc *ExecutionClientDirect) InsertBlock(blk *types.Block) error { - return cc.chainRW.InsertBlockAndWait(blk) +func (cc *ExecutionClientDirect) CurrentHeader(ctx context.Context) (*types.Header, error) { + return cc.chainRW.CurrentHeader(ctx), nil } -func (cc *ExecutionClientDirect) IsCanonicalHash(hash libcommon.Hash) (bool, error) { - return cc.chainRW.IsCanonicalHash(hash) +func (cc *ExecutionClientDirect) IsCanonicalHash(ctx context.Context, hash libcommon.Hash) (bool, error) { + return cc.chainRW.IsCanonicalHash(ctx, hash) } -func (cc *ExecutionClientDirect) Ready() (bool, error) { - return cc.chainRW.Ready() +func (cc *ExecutionClientDirect) Ready(ctx context.Context) (bool, error) { + return cc.chainRW.Ready(ctx) } // GetBodiesByRange gets block bodies in given block range -func (cc *ExecutionClientDirect) GetBodiesByRange(start, count uint64) ([]*types.RawBody, error) { - return cc.chainRW.GetBodiesByRange(start, count) +func (cc *ExecutionClientDirect) GetBodiesByRange(ctx context.Context, start, count uint64) ([]*types.RawBody, error) { + return cc.chainRW.GetBodiesByRange(ctx, start, count) } // GetBodiesByHashes gets block bodies with given hashes -func (cc *ExecutionClientDirect) GetBodiesByHashes(hashes []libcommon.Hash) ([]*types.RawBody, error) { - return cc.chainRW.GetBodiesByHashes(hashes) +func (cc *ExecutionClientDirect) GetBodiesByHashes(ctx context.Context, hashes []libcommon.Hash) ([]*types.RawBody, error) { + return cc.chainRW.GetBodiesByHashes(ctx, hashes) +} + +func (cc *ExecutionClientDirect) FrozenBlocks(ctx context.Context) uint64 { + return cc.chainRW.FrozenBlocks(ctx) +} + +func (cc *ExecutionClientDirect) HasBlock(ctx context.Context, hash libcommon.Hash) (bool, error) { + return cc.chainRW.HasBlock(ctx, hash) } -func (cc *ExecutionClientDirect) FrozenBlocks() uint64 { - return cc.chainRW.FrozenBlocks() +func (cc *ExecutionClientDirect) GetAssembledBlock(_ context.Context, idBytes []byte) (*cltypes.Eth1Block, *engine_types.BlobsBundleV1, *big.Int, error) { + return cc.chainRW.GetAssembledBlock(binary.LittleEndian.Uint64(idBytes)) } diff --git a/cl/phase1/execution_client/execution_client_rpc.go b/cl/phase1/execution_client/execution_client_rpc.go index 82515a2f5fb..000b62760a4 100644 --- a/cl/phase1/execution_client/execution_client_rpc.go +++ b/cl/phase1/execution_client/execution_client_rpc.go @@ -3,12 +3,15 @@ package execution_client import ( "context" "fmt" - "github.com/ledgerwatch/erigon-lib/common/hexutil" "math/big" "net/http" "strings" "time" + "github.com/ledgerwatch/erigon-lib/common/hexutil" + + "github.com/ledgerwatch/log/v3" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" @@ -16,19 +19,17 @@ import ( "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/engineapi/engine_types" - "github.com/ledgerwatch/log/v3" ) const DefaultRPCHTTPTimeout = time.Second * 30 type ExecutionClientRpc struct { client *rpc.Client - ctx context.Context addr string jwtSecret []byte } -func NewExecutionClientRPC(ctx context.Context, jwtSecret []byte, addr string, port int) (*ExecutionClientRpc, error) { +func NewExecutionClientRPC(jwtSecret []byte, addr string, port int) (*ExecutionClientRpc, error) { roundTripper := rpc_helper.NewJWTRoundTripper(jwtSecret) client := &http.Client{Timeout: DefaultRPCHTTPTimeout, Transport: roundTripper} @@ -47,13 +48,12 @@ func NewExecutionClientRPC(ctx context.Context, jwtSecret []byte, addr string, p return &ExecutionClientRpc{ client: rpcClient, - ctx: ctx, addr: addr, jwtSecret: jwtSecret, }, nil } -func (cc *ExecutionClientRpc) NewPayload(payload *cltypes.Eth1Block, beaconParentRoot *libcommon.Hash) (invalid bool, err error) { +func (cc *ExecutionClientRpc) NewPayload(ctx context.Context, payload *cltypes.Eth1Block, beaconParentRoot *libcommon.Hash, versionedHashes []libcommon.Hash) (invalid bool, err error) { if payload == nil { return } @@ -111,7 +111,11 @@ func (cc *ExecutionClientRpc) NewPayload(payload *cltypes.Eth1Block, beaconParen payloadStatus := &engine_types.PayloadStatus{} // As it is done in the rpcdaemon log.Debug("[ExecutionClientRpc] Calling EL", "method", engineMethod) - err = cc.client.CallContext(cc.ctx, &payloadStatus, engineMethod, request) + args := []interface{}{request} + if versionedHashes != nil { + args = append(args, versionedHashes, *beaconParentRoot) + } + err = cc.client.CallContext(ctx, &payloadStatus, engineMethod, args...) if err != nil { err = fmt.Errorf("execution Client RPC failed to retrieve the NewPayload status response, err: %w", err) return @@ -125,7 +129,7 @@ func (cc *ExecutionClientRpc) NewPayload(payload *cltypes.Eth1Block, beaconParen return } -func (cc *ExecutionClientRpc) ForkChoiceUpdate(finalized libcommon.Hash, head libcommon.Hash) error { +func (cc *ExecutionClientRpc) ForkChoiceUpdate(ctx context.Context, finalized libcommon.Hash, head libcommon.Hash, attributes *engine_types.PayloadAttributes) ([]byte, error) { forkChoiceRequest := engine_types.ForkChoiceState{ HeadHash: head, SafeBlockHash: head, @@ -133,20 +137,27 @@ func (cc *ExecutionClientRpc) ForkChoiceUpdate(finalized libcommon.Hash, head li } forkChoiceResp := &engine_types.ForkChoiceUpdatedResponse{} log.Debug("[ExecutionClientRpc] Calling EL", "method", rpc_helper.ForkChoiceUpdatedV1) + args := []interface{}{forkChoiceRequest} + if attributes != nil { + args = append(args, attributes) + } - err := cc.client.CallContext(cc.ctx, forkChoiceResp, rpc_helper.ForkChoiceUpdatedV1, forkChoiceRequest) + err := cc.client.CallContext(ctx, forkChoiceResp, rpc_helper.ForkChoiceUpdatedV1, args...) if err != nil { - return fmt.Errorf("execution Client RPC failed to retrieve ForkChoiceUpdate response, err: %w", err) + return nil, fmt.Errorf("execution Client RPC failed to retrieve ForkChoiceUpdate response, err: %w", err) } // Ignore timeouts if err != nil && err.Error() == errContextExceeded { - return nil + return nil, nil } if err != nil { - return err + return nil, err + } + if forkChoiceResp.PayloadId == nil { + return []byte{}, checkPayloadStatus(forkChoiceResp.PayloadStatus) } - return checkPayloadStatus(forkChoiceResp.PayloadStatus) + return *forkChoiceResp.PayloadId, checkPayloadStatus(forkChoiceResp.PayloadStatus) } func checkPayloadStatus(payloadStatus *engine_types.PayloadStatus) error { @@ -169,29 +180,33 @@ func (cc *ExecutionClientRpc) SupportInsertion() bool { return false } -func (cc *ExecutionClientRpc) InsertBlocks([]*types.Block) error { +func (cc *ExecutionClientRpc) InsertBlocks(ctx context.Context, blocks []*types.Block, wait bool) error { panic("unimplemented") } -func (cc *ExecutionClientRpc) InsertBlock(*types.Block) error { +func (cc *ExecutionClientRpc) InsertBlock(ctx context.Context, block *types.Block) error { panic("unimplemented") } -func (cc *ExecutionClientRpc) IsCanonicalHash(libcommon.Hash) (bool, error) { +func (cc *ExecutionClientRpc) CurrentHeader(ctx context.Context) (*types.Header, error) { panic("unimplemented") } -func (cc *ExecutionClientRpc) Ready() (bool, error) { +func (cc *ExecutionClientRpc) IsCanonicalHash(ctx context.Context, hash libcommon.Hash) (bool, error) { + panic("unimplemented") +} + +func (cc *ExecutionClientRpc) Ready(ctx context.Context) (bool, error) { return true, nil // Engine API is always ready } // Range methods // GetBodiesByRange gets block bodies in given block range -func (cc *ExecutionClientRpc) GetBodiesByRange(start, count uint64) ([]*types.RawBody, error) { +func (cc *ExecutionClientRpc) GetBodiesByRange(ctx context.Context, start, count uint64) ([]*types.RawBody, error) { result := []*engine_types.ExecutionPayloadBodyV1{} - if err := cc.client.CallContext(cc.ctx, &result, rpc_helper.GetPayloadBodiesByRangeV1, hexutil.Uint64(start), hexutil.Uint64(count)); err != nil { + if err := cc.client.CallContext(ctx, &result, rpc_helper.GetPayloadBodiesByRangeV1, hexutil.Uint64(start), hexutil.Uint64(count)); err != nil { return nil, err } ret := make([]*types.RawBody, len(result)) @@ -207,10 +222,10 @@ func (cc *ExecutionClientRpc) GetBodiesByRange(start, count uint64) ([]*types.Ra } // GetBodiesByHashes gets block bodies with given hashes -func (cc *ExecutionClientRpc) GetBodiesByHashes(hashes []libcommon.Hash) ([]*types.RawBody, error) { +func (cc *ExecutionClientRpc) GetBodiesByHashes(ctx context.Context, hashes []libcommon.Hash) ([]*types.RawBody, error) { result := []*engine_types.ExecutionPayloadBodyV1{} - if err := cc.client.CallContext(cc.ctx, &result, rpc_helper.GetPayloadBodiesByHashV1, hashes); err != nil { + if err := cc.client.CallContext(ctx, &result, rpc_helper.GetPayloadBodiesByHashV1, hashes); err != nil { return nil, err } ret := make([]*types.RawBody, len(result)) @@ -225,6 +240,17 @@ func (cc *ExecutionClientRpc) GetBodiesByHashes(hashes []libcommon.Hash) ([]*typ return ret, nil } -func (cc *ExecutionClientRpc) FrozenBlocks() uint64 { +func (cc *ExecutionClientRpc) FrozenBlocks(ctx context.Context) uint64 { + panic("unimplemented") +} + +// HasBlock checks if block with given hash is present +func (cc *ExecutionClientRpc) HasBlock(ctx context.Context, hash libcommon.Hash) (bool, error) { + panic("unimplemented") +} + +// Block production + +func (cc *ExecutionClientRpc) GetAssembledBlock(ctx context.Context, id []byte) (*cltypes.Eth1Block, *engine_types.BlobsBundleV1, *big.Int, error) { panic("unimplemented") } diff --git a/cl/phase1/execution_client/execution_engine_mock.go b/cl/phase1/execution_client/execution_engine_mock.go new file mode 100644 index 00000000000..cb4171aab9e --- /dev/null +++ b/cl/phase1/execution_client/execution_engine_mock.go @@ -0,0 +1,550 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./interface.go +// +// Generated by this command: +// +// mockgen -typed=true -source=./interface.go -destination=./execution_engine_mock.go -package=execution_client . ExecutionEngine +// + +// Package execution_client is a generated GoMock package. +package execution_client + +import ( + context "context" + big "math/big" + reflect "reflect" + + common "github.com/ledgerwatch/erigon-lib/common" + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + types "github.com/ledgerwatch/erigon/core/types" + engine_types "github.com/ledgerwatch/erigon/turbo/engineapi/engine_types" + gomock "go.uber.org/mock/gomock" +) + +// MockExecutionEngine is a mock of ExecutionEngine interface. +type MockExecutionEngine struct { + ctrl *gomock.Controller + recorder *MockExecutionEngineMockRecorder +} + +// MockExecutionEngineMockRecorder is the mock recorder for MockExecutionEngine. +type MockExecutionEngineMockRecorder struct { + mock *MockExecutionEngine +} + +// NewMockExecutionEngine creates a new mock instance. +func NewMockExecutionEngine(ctrl *gomock.Controller) *MockExecutionEngine { + mock := &MockExecutionEngine{ctrl: ctrl} + mock.recorder = &MockExecutionEngineMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockExecutionEngine) EXPECT() *MockExecutionEngineMockRecorder { + return m.recorder +} + +// CurrentHeader mocks base method. +func (m *MockExecutionEngine) CurrentHeader(ctx context.Context) (*types.Header, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CurrentHeader", ctx) + ret0, _ := ret[0].(*types.Header) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CurrentHeader indicates an expected call of CurrentHeader. +func (mr *MockExecutionEngineMockRecorder) CurrentHeader(ctx any) *MockExecutionEngineCurrentHeaderCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CurrentHeader", reflect.TypeOf((*MockExecutionEngine)(nil).CurrentHeader), ctx) + return &MockExecutionEngineCurrentHeaderCall{Call: call} +} + +// MockExecutionEngineCurrentHeaderCall wrap *gomock.Call +type MockExecutionEngineCurrentHeaderCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineCurrentHeaderCall) Return(arg0 *types.Header, arg1 error) *MockExecutionEngineCurrentHeaderCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineCurrentHeaderCall) Do(f func(context.Context) (*types.Header, error)) *MockExecutionEngineCurrentHeaderCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineCurrentHeaderCall) DoAndReturn(f func(context.Context) (*types.Header, error)) *MockExecutionEngineCurrentHeaderCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// ForkChoiceUpdate mocks base method. +func (m *MockExecutionEngine) ForkChoiceUpdate(ctx context.Context, finalized, head common.Hash, attributes *engine_types.PayloadAttributes) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ForkChoiceUpdate", ctx, finalized, head, attributes) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ForkChoiceUpdate indicates an expected call of ForkChoiceUpdate. +func (mr *MockExecutionEngineMockRecorder) ForkChoiceUpdate(ctx, finalized, head, attributes any) *MockExecutionEngineForkChoiceUpdateCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ForkChoiceUpdate", reflect.TypeOf((*MockExecutionEngine)(nil).ForkChoiceUpdate), ctx, finalized, head, attributes) + return &MockExecutionEngineForkChoiceUpdateCall{Call: call} +} + +// MockExecutionEngineForkChoiceUpdateCall wrap *gomock.Call +type MockExecutionEngineForkChoiceUpdateCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineForkChoiceUpdateCall) Return(arg0 []byte, arg1 error) *MockExecutionEngineForkChoiceUpdateCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineForkChoiceUpdateCall) Do(f func(context.Context, common.Hash, common.Hash, *engine_types.PayloadAttributes) ([]byte, error)) *MockExecutionEngineForkChoiceUpdateCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineForkChoiceUpdateCall) DoAndReturn(f func(context.Context, common.Hash, common.Hash, *engine_types.PayloadAttributes) ([]byte, error)) *MockExecutionEngineForkChoiceUpdateCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FrozenBlocks mocks base method. +func (m *MockExecutionEngine) FrozenBlocks(ctx context.Context) uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FrozenBlocks", ctx) + ret0, _ := ret[0].(uint64) + return ret0 +} + +// FrozenBlocks indicates an expected call of FrozenBlocks. +func (mr *MockExecutionEngineMockRecorder) FrozenBlocks(ctx any) *MockExecutionEngineFrozenBlocksCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FrozenBlocks", reflect.TypeOf((*MockExecutionEngine)(nil).FrozenBlocks), ctx) + return &MockExecutionEngineFrozenBlocksCall{Call: call} +} + +// MockExecutionEngineFrozenBlocksCall wrap *gomock.Call +type MockExecutionEngineFrozenBlocksCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineFrozenBlocksCall) Return(arg0 uint64) *MockExecutionEngineFrozenBlocksCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineFrozenBlocksCall) Do(f func(context.Context) uint64) *MockExecutionEngineFrozenBlocksCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineFrozenBlocksCall) DoAndReturn(f func(context.Context) uint64) *MockExecutionEngineFrozenBlocksCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetAssembledBlock mocks base method. +func (m *MockExecutionEngine) GetAssembledBlock(ctx context.Context, id []byte) (*cltypes.Eth1Block, *engine_types.BlobsBundleV1, *big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAssembledBlock", ctx, id) + ret0, _ := ret[0].(*cltypes.Eth1Block) + ret1, _ := ret[1].(*engine_types.BlobsBundleV1) + ret2, _ := ret[2].(*big.Int) + ret3, _ := ret[3].(error) + return ret0, ret1, ret2, ret3 +} + +// GetAssembledBlock indicates an expected call of GetAssembledBlock. +func (mr *MockExecutionEngineMockRecorder) GetAssembledBlock(ctx, id any) *MockExecutionEngineGetAssembledBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAssembledBlock", reflect.TypeOf((*MockExecutionEngine)(nil).GetAssembledBlock), ctx, id) + return &MockExecutionEngineGetAssembledBlockCall{Call: call} +} + +// MockExecutionEngineGetAssembledBlockCall wrap *gomock.Call +type MockExecutionEngineGetAssembledBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineGetAssembledBlockCall) Return(arg0 *cltypes.Eth1Block, arg1 *engine_types.BlobsBundleV1, arg2 *big.Int, arg3 error) *MockExecutionEngineGetAssembledBlockCall { + c.Call = c.Call.Return(arg0, arg1, arg2, arg3) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineGetAssembledBlockCall) Do(f func(context.Context, []byte) (*cltypes.Eth1Block, *engine_types.BlobsBundleV1, *big.Int, error)) *MockExecutionEngineGetAssembledBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineGetAssembledBlockCall) DoAndReturn(f func(context.Context, []byte) (*cltypes.Eth1Block, *engine_types.BlobsBundleV1, *big.Int, error)) *MockExecutionEngineGetAssembledBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetBodiesByHashes mocks base method. +func (m *MockExecutionEngine) GetBodiesByHashes(ctx context.Context, hashes []common.Hash) ([]*types.RawBody, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetBodiesByHashes", ctx, hashes) + ret0, _ := ret[0].([]*types.RawBody) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetBodiesByHashes indicates an expected call of GetBodiesByHashes. +func (mr *MockExecutionEngineMockRecorder) GetBodiesByHashes(ctx, hashes any) *MockExecutionEngineGetBodiesByHashesCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBodiesByHashes", reflect.TypeOf((*MockExecutionEngine)(nil).GetBodiesByHashes), ctx, hashes) + return &MockExecutionEngineGetBodiesByHashesCall{Call: call} +} + +// MockExecutionEngineGetBodiesByHashesCall wrap *gomock.Call +type MockExecutionEngineGetBodiesByHashesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineGetBodiesByHashesCall) Return(arg0 []*types.RawBody, arg1 error) *MockExecutionEngineGetBodiesByHashesCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineGetBodiesByHashesCall) Do(f func(context.Context, []common.Hash) ([]*types.RawBody, error)) *MockExecutionEngineGetBodiesByHashesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineGetBodiesByHashesCall) DoAndReturn(f func(context.Context, []common.Hash) ([]*types.RawBody, error)) *MockExecutionEngineGetBodiesByHashesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetBodiesByRange mocks base method. +func (m *MockExecutionEngine) GetBodiesByRange(ctx context.Context, start, count uint64) ([]*types.RawBody, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetBodiesByRange", ctx, start, count) + ret0, _ := ret[0].([]*types.RawBody) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetBodiesByRange indicates an expected call of GetBodiesByRange. +func (mr *MockExecutionEngineMockRecorder) GetBodiesByRange(ctx, start, count any) *MockExecutionEngineGetBodiesByRangeCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBodiesByRange", reflect.TypeOf((*MockExecutionEngine)(nil).GetBodiesByRange), ctx, start, count) + return &MockExecutionEngineGetBodiesByRangeCall{Call: call} +} + +// MockExecutionEngineGetBodiesByRangeCall wrap *gomock.Call +type MockExecutionEngineGetBodiesByRangeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineGetBodiesByRangeCall) Return(arg0 []*types.RawBody, arg1 error) *MockExecutionEngineGetBodiesByRangeCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineGetBodiesByRangeCall) Do(f func(context.Context, uint64, uint64) ([]*types.RawBody, error)) *MockExecutionEngineGetBodiesByRangeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineGetBodiesByRangeCall) DoAndReturn(f func(context.Context, uint64, uint64) ([]*types.RawBody, error)) *MockExecutionEngineGetBodiesByRangeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// HasBlock mocks base method. +func (m *MockExecutionEngine) HasBlock(ctx context.Context, hash common.Hash) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HasBlock", ctx, hash) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HasBlock indicates an expected call of HasBlock. +func (mr *MockExecutionEngineMockRecorder) HasBlock(ctx, hash any) *MockExecutionEngineHasBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasBlock", reflect.TypeOf((*MockExecutionEngine)(nil).HasBlock), ctx, hash) + return &MockExecutionEngineHasBlockCall{Call: call} +} + +// MockExecutionEngineHasBlockCall wrap *gomock.Call +type MockExecutionEngineHasBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineHasBlockCall) Return(arg0 bool, arg1 error) *MockExecutionEngineHasBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineHasBlockCall) Do(f func(context.Context, common.Hash) (bool, error)) *MockExecutionEngineHasBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineHasBlockCall) DoAndReturn(f func(context.Context, common.Hash) (bool, error)) *MockExecutionEngineHasBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// InsertBlock mocks base method. +func (m *MockExecutionEngine) InsertBlock(ctx context.Context, block *types.Block) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "InsertBlock", ctx, block) + ret0, _ := ret[0].(error) + return ret0 +} + +// InsertBlock indicates an expected call of InsertBlock. +func (mr *MockExecutionEngineMockRecorder) InsertBlock(ctx, block any) *MockExecutionEngineInsertBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InsertBlock", reflect.TypeOf((*MockExecutionEngine)(nil).InsertBlock), ctx, block) + return &MockExecutionEngineInsertBlockCall{Call: call} +} + +// MockExecutionEngineInsertBlockCall wrap *gomock.Call +type MockExecutionEngineInsertBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineInsertBlockCall) Return(arg0 error) *MockExecutionEngineInsertBlockCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineInsertBlockCall) Do(f func(context.Context, *types.Block) error) *MockExecutionEngineInsertBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineInsertBlockCall) DoAndReturn(f func(context.Context, *types.Block) error) *MockExecutionEngineInsertBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// InsertBlocks mocks base method. +func (m *MockExecutionEngine) InsertBlocks(ctx context.Context, blocks []*types.Block, wait bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "InsertBlocks", ctx, blocks, wait) + ret0, _ := ret[0].(error) + return ret0 +} + +// InsertBlocks indicates an expected call of InsertBlocks. +func (mr *MockExecutionEngineMockRecorder) InsertBlocks(ctx, blocks, wait any) *MockExecutionEngineInsertBlocksCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InsertBlocks", reflect.TypeOf((*MockExecutionEngine)(nil).InsertBlocks), ctx, blocks, wait) + return &MockExecutionEngineInsertBlocksCall{Call: call} +} + +// MockExecutionEngineInsertBlocksCall wrap *gomock.Call +type MockExecutionEngineInsertBlocksCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineInsertBlocksCall) Return(arg0 error) *MockExecutionEngineInsertBlocksCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineInsertBlocksCall) Do(f func(context.Context, []*types.Block, bool) error) *MockExecutionEngineInsertBlocksCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineInsertBlocksCall) DoAndReturn(f func(context.Context, []*types.Block, bool) error) *MockExecutionEngineInsertBlocksCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// IsCanonicalHash mocks base method. +func (m *MockExecutionEngine) IsCanonicalHash(ctx context.Context, hash common.Hash) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "IsCanonicalHash", ctx, hash) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// IsCanonicalHash indicates an expected call of IsCanonicalHash. +func (mr *MockExecutionEngineMockRecorder) IsCanonicalHash(ctx, hash any) *MockExecutionEngineIsCanonicalHashCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsCanonicalHash", reflect.TypeOf((*MockExecutionEngine)(nil).IsCanonicalHash), ctx, hash) + return &MockExecutionEngineIsCanonicalHashCall{Call: call} +} + +// MockExecutionEngineIsCanonicalHashCall wrap *gomock.Call +type MockExecutionEngineIsCanonicalHashCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineIsCanonicalHashCall) Return(arg0 bool, arg1 error) *MockExecutionEngineIsCanonicalHashCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineIsCanonicalHashCall) Do(f func(context.Context, common.Hash) (bool, error)) *MockExecutionEngineIsCanonicalHashCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineIsCanonicalHashCall) DoAndReturn(f func(context.Context, common.Hash) (bool, error)) *MockExecutionEngineIsCanonicalHashCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// NewPayload mocks base method. +func (m *MockExecutionEngine) NewPayload(ctx context.Context, payload *cltypes.Eth1Block, beaconParentRoot *common.Hash, versionedHashes []common.Hash) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NewPayload", ctx, payload, beaconParentRoot, versionedHashes) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NewPayload indicates an expected call of NewPayload. +func (mr *MockExecutionEngineMockRecorder) NewPayload(ctx, payload, beaconParentRoot, versionedHashes any) *MockExecutionEngineNewPayloadCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewPayload", reflect.TypeOf((*MockExecutionEngine)(nil).NewPayload), ctx, payload, beaconParentRoot, versionedHashes) + return &MockExecutionEngineNewPayloadCall{Call: call} +} + +// MockExecutionEngineNewPayloadCall wrap *gomock.Call +type MockExecutionEngineNewPayloadCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineNewPayloadCall) Return(arg0 bool, arg1 error) *MockExecutionEngineNewPayloadCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineNewPayloadCall) Do(f func(context.Context, *cltypes.Eth1Block, *common.Hash, []common.Hash) (bool, error)) *MockExecutionEngineNewPayloadCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineNewPayloadCall) DoAndReturn(f func(context.Context, *cltypes.Eth1Block, *common.Hash, []common.Hash) (bool, error)) *MockExecutionEngineNewPayloadCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Ready mocks base method. +func (m *MockExecutionEngine) Ready(ctx context.Context) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Ready", ctx) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Ready indicates an expected call of Ready. +func (mr *MockExecutionEngineMockRecorder) Ready(ctx any) *MockExecutionEngineReadyCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ready", reflect.TypeOf((*MockExecutionEngine)(nil).Ready), ctx) + return &MockExecutionEngineReadyCall{Call: call} +} + +// MockExecutionEngineReadyCall wrap *gomock.Call +type MockExecutionEngineReadyCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineReadyCall) Return(arg0 bool, arg1 error) *MockExecutionEngineReadyCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineReadyCall) Do(f func(context.Context) (bool, error)) *MockExecutionEngineReadyCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineReadyCall) DoAndReturn(f func(context.Context) (bool, error)) *MockExecutionEngineReadyCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SupportInsertion mocks base method. +func (m *MockExecutionEngine) SupportInsertion() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SupportInsertion") + ret0, _ := ret[0].(bool) + return ret0 +} + +// SupportInsertion indicates an expected call of SupportInsertion. +func (mr *MockExecutionEngineMockRecorder) SupportInsertion() *MockExecutionEngineSupportInsertionCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SupportInsertion", reflect.TypeOf((*MockExecutionEngine)(nil).SupportInsertion)) + return &MockExecutionEngineSupportInsertionCall{Call: call} +} + +// MockExecutionEngineSupportInsertionCall wrap *gomock.Call +type MockExecutionEngineSupportInsertionCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockExecutionEngineSupportInsertionCall) Return(arg0 bool) *MockExecutionEngineSupportInsertionCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockExecutionEngineSupportInsertionCall) Do(f func() bool) *MockExecutionEngineSupportInsertionCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockExecutionEngineSupportInsertionCall) DoAndReturn(f func() bool) *MockExecutionEngineSupportInsertionCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/execution_client/interface.go b/cl/phase1/execution_client/interface.go index a83c60c9489..61a87c8be67 100644 --- a/cl/phase1/execution_client/interface.go +++ b/cl/phase1/execution_client/interface.go @@ -1,27 +1,37 @@ package execution_client import ( + "context" + "math/big" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/turbo/engineapi/engine_types" ) var errContextExceeded = "rpc error: code = DeadlineExceeded desc = context deadline exceeded" // ExecutionEngine is used only for syncing up very close to chain tip and to stay in sync. // It pretty much mimics engine API. + +//go:generate mockgen -typed=true -source=./interface.go -destination=./execution_engine_mock.go -package=execution_client . ExecutionEngine type ExecutionEngine interface { - NewPayload(payload *cltypes.Eth1Block, beaconParentRoot *libcommon.Hash) (bool, error) - ForkChoiceUpdate(finalized libcommon.Hash, head libcommon.Hash) error + NewPayload(ctx context.Context, payload *cltypes.Eth1Block, beaconParentRoot *libcommon.Hash, versionedHashes []libcommon.Hash) (bool, error) + ForkChoiceUpdate(ctx context.Context, finalized libcommon.Hash, head libcommon.Hash, attributes *engine_types.PayloadAttributes) ([]byte, error) SupportInsertion() bool - InsertBlocks([]*types.Block) error - InsertBlock(*types.Block) error - IsCanonicalHash(libcommon.Hash) (bool, error) - Ready() (bool, error) + InsertBlocks(ctx context.Context, blocks []*types.Block, wait bool) error + InsertBlock(ctx context.Context, block *types.Block) error + CurrentHeader(ctx context.Context) (*types.Header, error) + IsCanonicalHash(ctx context.Context, hash libcommon.Hash) (bool, error) + Ready(ctx context.Context) (bool, error) // Range methods - GetBodiesByRange(start, count uint64) ([]*types.RawBody, error) - GetBodiesByHashes(hashes []libcommon.Hash) ([]*types.RawBody, error) + GetBodiesByRange(ctx context.Context, start, count uint64) ([]*types.RawBody, error) + GetBodiesByHashes(ctx context.Context, hashes []libcommon.Hash) ([]*types.RawBody, error) + HasBlock(ctx context.Context, hash libcommon.Hash) (bool, error) // Snapshots - FrozenBlocks() uint64 + FrozenBlocks(ctx context.Context) uint64 + // Block production + GetAssembledBlock(ctx context.Context, id []byte) (*cltypes.Eth1Block, *engine_types.BlobsBundleV1, *big.Int, error) } diff --git a/cl/phase1/forkchoice/blob_sidecars.go b/cl/phase1/forkchoice/blob_sidecars.go new file mode 100644 index 00000000000..3570872ff12 --- /dev/null +++ b/cl/phase1/forkchoice/blob_sidecars.go @@ -0,0 +1,40 @@ +package forkchoice + +import ( + "github.com/ledgerwatch/erigon/cl/cltypes" +) + +func (f *ForkChoiceStore) AddPreverifiedBlobSidecar(blobSidecar *cltypes.BlobSidecar) error { + blockRoot, err := blobSidecar.SignedBlockHeader.Header.HashSSZ() + if err != nil { + return err + } + + // operation is not thread safe from here. + f.mu.Lock() + defer f.mu.Unlock() + + for _, sidecar := range f.hotSidecars[blockRoot] { + if sidecar.SignedBlockHeader.Header.Slot == blobSidecar.SignedBlockHeader.Header.Slot && + sidecar.SignedBlockHeader.Header.ProposerIndex == blobSidecar.SignedBlockHeader.Header.ProposerIndex && + sidecar.Index == blobSidecar.Index { + return nil // ignore if we already have it + } + } + f.hotSidecars[blockRoot] = append(f.hotSidecars[blockRoot], blobSidecar) + + blobsMaxAge := 4 // a slot can live for up to 4 slots in the pool of hot sidecars. + currentSlot := f.highestSeen.Load() + var pruneSlot uint64 + if currentSlot > uint64(blobsMaxAge) { + pruneSlot = currentSlot - uint64(blobsMaxAge) + } + // also clean up all old blobs that may have been accumulating + for blockRoot := range f.hotSidecars { + if len(f.hotSidecars) == 0 || f.hotSidecars[blockRoot][0].SignedBlockHeader.Header.Slot < pruneSlot { + delete(f.hotSidecars, blockRoot) + } + } + + return nil +} diff --git a/cl/phase1/forkchoice/checkpoint_state.go b/cl/phase1/forkchoice/checkpoint_state.go index 612068945dc..ffd6986fe83 100644 --- a/cl/phase1/forkchoice/checkpoint_state.go +++ b/cl/phase1/forkchoice/checkpoint_state.go @@ -109,7 +109,7 @@ func (c *checkpointState) getAttestingIndicies(attestation *solid.AttestationDat lenIndicies := uint64(len(c.shuffledSet)) committeesPerSlot := c.committeeCount(epoch, lenIndicies) count := committeesPerSlot * c.beaconConfig.SlotsPerEpoch - index := (slot%c.beaconConfig.SlotsPerEpoch)*committeesPerSlot + attestation.ValidatorIndex() + index := (slot%c.beaconConfig.SlotsPerEpoch)*committeesPerSlot + attestation.CommitteeIndex() start := (lenIndicies * index) / count end := (lenIndicies * (index + 1)) / count committee := c.shuffledSet[start:end] diff --git a/cl/phase1/forkchoice/fork_choice_test.go b/cl/phase1/forkchoice/fork_choice_test.go index fa3559490d3..61fc786bd3e 100644 --- a/cl/phase1/forkchoice/fork_choice_test.go +++ b/cl/phase1/forkchoice/fork_choice_test.go @@ -5,22 +5,28 @@ import ( _ "embed" "fmt" "testing" + "time" + + "github.com/spf13/afero" "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/fork_graph" "github.com/ledgerwatch/erigon/cl/pool" "github.com/ledgerwatch/erigon/cl/transition" - "github.com/spf13/afero" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/utils" - "github.com/stretchr/testify/require" ) //go:embed test_data/anchor_state.ssz_snappy @@ -40,8 +46,9 @@ var attestationEncoded []byte // this is consensus spec test altair/forkchoice/ex_ante/ex_ante_attestations_is_greater_than_proposer_boost_with_boost func TestForkChoiceBasic(t *testing.T) { + ctx := context.Background() expectedCheckpoint := solid.NewCheckpointFromParameters(libcommon.HexToHash("0x564d76d91f66c1fb2977484a6184efda2e1c26dd01992e048353230e10f83201"), 0) - + sd := synced_data.NewSyncedDataManager(true, &clparams.MainnetBeaconConfig) // Decode test blocks block0x3a, block0xc2, block0xd4 := cltypes.NewSignedBeaconBlock(&clparams.MainnetBeaconConfig), cltypes.NewSignedBeaconBlock(&clparams.MainnetBeaconConfig), cltypes.NewSignedBeaconBlock(&clparams.MainnetBeaconConfig) require.NoError(t, utils.DecodeSSZSnappy(block0x3a, block3aEncoded, int(clparams.AltairVersion))) @@ -54,12 +61,13 @@ func TestForkChoiceBasic(t *testing.T) { anchorState := state.New(&clparams.MainnetBeaconConfig) require.NoError(t, utils.DecodeSSZSnappy(anchorState, anchorStateEncoded, int(clparams.AltairVersion))) pool := pool.NewOperationsPool(&clparams.MainnetBeaconConfig) - store, err := forkchoice.NewForkChoiceStore(context.Background(), anchorState, nil, nil, pool, fork_graph.NewForkGraphDisk(anchorState, afero.NewMemMapFs())) + emitters := beaconevents.NewEmitters() + store, err := forkchoice.NewForkChoiceStore(nil, anchorState, nil, pool, fork_graph.NewForkGraphDisk(anchorState, afero.NewMemMapFs(), beacon_router_configuration.RouterConfiguration{}), emitters, sd, nil) require.NoError(t, err) // first steps store.OnTick(0) store.OnTick(12) - require.NoError(t, store.OnBlock(block0x3a, false, true)) + require.NoError(t, store.OnBlock(ctx, block0x3a, false, true, false)) // Check if we get correct status (1) require.Equal(t, store.Time(), uint64(12)) require.Equal(t, store.ProposerBoostRoot(), libcommon.HexToHash("0xc9bd7bcb6dfa49dc4e5a67ca75e89062c36b5c300bc25a1b31db4e1a89306071")) @@ -71,7 +79,7 @@ func TestForkChoiceBasic(t *testing.T) { require.Equal(t, headSlot, uint64(1)) // process another tick and another block store.OnTick(36) - require.NoError(t, store.OnBlock(block0xc2, false, true)) + require.NoError(t, store.OnBlock(ctx, block0xc2, false, true, false)) // Check if we get correct status (2) require.Equal(t, store.Time(), uint64(36)) require.Equal(t, store.ProposerBoostRoot(), libcommon.HexToHash("0x744cc484f6503462f0f3a5981d956bf4fcb3e57ab8687ed006467e05049ee033")) @@ -82,7 +90,7 @@ func TestForkChoiceBasic(t *testing.T) { require.Equal(t, headSlot, uint64(3)) require.Equal(t, headRoot, libcommon.HexToHash("0x744cc484f6503462f0f3a5981d956bf4fcb3e57ab8687ed006467e05049ee033")) // last block - require.NoError(t, store.OnBlock(block0xd4, false, true)) + require.NoError(t, store.OnBlock(ctx, block0xd4, false, true, false)) require.Equal(t, store.Time(), uint64(36)) require.Equal(t, store.ProposerBoostRoot(), libcommon.HexToHash("0x744cc484f6503462f0f3a5981d956bf4fcb3e57ab8687ed006467e05049ee033")) require.Equal(t, store.JustifiedCheckpoint(), expectedCheckpoint) @@ -93,26 +101,19 @@ func TestForkChoiceBasic(t *testing.T) { require.Equal(t, headRoot, libcommon.HexToHash("0x744cc484f6503462f0f3a5981d956bf4fcb3e57ab8687ed006467e05049ee033")) // lastly do attestation require.NoError(t, store.OnAttestation(testAttestation, false, false)) - // Try processing a voluntary exit - err = store.OnVoluntaryExit(&cltypes.SignedVoluntaryExit{ - VoluntaryExit: &cltypes.VoluntaryExit{ - Epoch: 0, - ValidatorIndex: 0, - }, - }, true) + bs, err := store.GetStateAtBlockRoot(headRoot, true) require.NoError(t, err) - // Try processing a bls execution change exit - err = store.OnBlsToExecutionChange(&cltypes.SignedBLSToExecutionChange{ - Message: &cltypes.BLSToExecutionChange{ - ValidatorIndex: 0, - }, - }, true) + sd.OnHeadState(bs) + for sd.HeadState() == nil { + time.Sleep(time.Millisecond) + } require.NoError(t, err) - require.Equal(t, len(pool.VoluntaryExistsPool.Raw()), 1) } func TestForkChoiceChainBellatrix(t *testing.T) { + ctx := context.Background() blocks, anchorState, _ := tests.GetBellatrixRandom() + cfg := clparams.MainnetBeaconConfig intermediaryState, err := anchorState.Copy() require.NoError(t, err) @@ -125,11 +126,15 @@ func TestForkChoiceChainBellatrix(t *testing.T) { } // Initialize forkchoice store pool := pool.NewOperationsPool(&clparams.MainnetBeaconConfig) - store, err := forkchoice.NewForkChoiceStore(context.Background(), anchorState, nil, nil, pool, fork_graph.NewForkGraphDisk(anchorState, afero.NewMemMapFs())) + emitters := beaconevents.NewEmitters() + sd := synced_data.NewSyncedDataManager(true, &clparams.MainnetBeaconConfig) + store, err := forkchoice.NewForkChoiceStore(nil, anchorState, nil, pool, fork_graph.NewForkGraphDisk(anchorState, afero.NewMemMapFs(), beacon_router_configuration.RouterConfiguration{ + Beacon: true, + }), emitters, sd, nil) store.OnTick(2000) require.NoError(t, err) for _, block := range blocks { - require.NoError(t, store.OnBlock(block, false, true)) + require.NoError(t, store.OnBlock(ctx, block, false, true, false)) } root1, err := blocks[20].Block.HashSSZ() require.NoError(t, err) @@ -143,9 +148,15 @@ func TestForkChoiceChainBellatrix(t *testing.T) { for i := 0; i < mixes.Length(); i++ { require.Equal(t, mixes.Get(i), intermediaryState.RandaoMixes().Get(i), fmt.Sprintf("mixes mismatch at index %d, have: %x, expected: %x", i, mixes.Get(i), intermediaryState.RandaoMixes().Get(i))) } - currentIntermediarySyncCommittee, nextIntermediarySyncCommittee, ok := store.GetSyncCommittees(intermediaryBlockRoot) + currentIntermediarySyncCommittee, nextIntermediarySyncCommittee, ok := store.GetSyncCommittees(cfg.SyncCommitteePeriod(store.HighestSeen())) require.True(t, ok) require.Equal(t, intermediaryState.CurrentSyncCommittee(), currentIntermediarySyncCommittee) require.Equal(t, intermediaryState.NextSyncCommittee(), nextIntermediarySyncCommittee) + + bs, has := store.GetLightClientBootstrap(intermediaryBlockRoot) + require.True(t, has) + bsRoot, err := bs.HashSSZ() + require.NoError(t, err) + require.Equal(t, libcommon.Hash(bsRoot), libcommon.HexToHash("0x58a3f366bcefe6c30fb3a6506bed726f9a51bb272c77a8a3ed88c34435d44cb7")) } diff --git a/cl/phase1/forkchoice/fork_graph/diff_storage/diff_storage.go b/cl/phase1/forkchoice/fork_graph/diff_storage/diff_storage.go new file mode 100644 index 00000000000..8d1f84eda76 --- /dev/null +++ b/cl/phase1/forkchoice/fork_graph/diff_storage/diff_storage.go @@ -0,0 +1,115 @@ +package diffstorage + +import ( + "bytes" + "io" + "sync" + + "github.com/alecthomas/atomic" + libcommon "github.com/ledgerwatch/erigon-lib/common" +) + +const maxDumps = 8 // max number of dumps to keep in memory to prevent from memory leak during long non-finality. + +var bufferPool = sync.Pool{ + New: func() interface{} { + return new(bytes.Buffer) + }, +} + +type link struct { + from libcommon.Hash + to libcommon.Hash +} + +// Memory storage for binary diffs +type ChainDiffStorage struct { + dumps sync.Map + parent sync.Map // maps child -> parent + links sync.Map // maps root -> []links + diffFn func(w io.Writer, old, new []byte) error + applyFn func(in, out []byte, diff []byte, reverse bool) ([]byte, error) + diffs sync.Map + dumpsCount atomic.Int32 // prevent from memory leak during long non-finality. +} + +func NewChainDiffStorage(diffFn func(w io.Writer, old, new []byte) error, applyFn func(in, out []byte, diff []byte, reverse bool) ([]byte, error)) *ChainDiffStorage { + return &ChainDiffStorage{ + diffFn: diffFn, + applyFn: applyFn, + dumpsCount: atomic.NewInt32(0), + } +} + +func (c *ChainDiffStorage) Insert(root, parent libcommon.Hash, prevDump, dump []byte, isDump bool) error { + c.parent.Store(root, parent) + if isDump { + c.dumpsCount.Add(1) + if c.dumpsCount.Load() > maxDumps { + *c = *NewChainDiffStorage(c.diffFn, c.applyFn) + c.dumpsCount.Store(0) + return nil + } + c.dumps.Store(root, libcommon.Copy(dump)) + return nil + } + + buf := bufferPool.Get().(*bytes.Buffer) + defer bufferPool.Put(buf) + buf.Reset() + + if err := c.diffFn(buf, prevDump, dump); err != nil { + return err + } + c.diffs.Store(link{from: parent, to: root}, libcommon.Copy(buf.Bytes())) + + links, _ := c.links.LoadOrStore(parent, []link{}) + c.links.Store(parent, append(links.([]link), link{from: parent, to: root})) + + return nil +} + +func (c *ChainDiffStorage) Get(root libcommon.Hash) ([]byte, error) { + dump, foundDump := c.dumps.Load(root) + if foundDump { + return dump.([]byte), nil + } + currentRoot := root + diffs := [][]byte{} + for !foundDump { + parent, found := c.parent.Load(currentRoot) + if !found { + return nil, nil + } + diff, foundDiff := c.diffs.Load(link{from: parent.(libcommon.Hash), to: currentRoot}) + if !foundDiff { + return nil, nil + } + diffs = append(diffs, diff.([]byte)) + currentRoot = parent.(libcommon.Hash) + dump, foundDump = c.dumps.Load(currentRoot) + } + out := libcommon.Copy(dump.([]byte)) + for i := len(diffs) - 1; i >= 0; i-- { + var err error + out, err = c.applyFn(out, out, diffs[i], false) + if err != nil { + return nil, err + } + } + return out, nil +} + +func (c *ChainDiffStorage) Delete(root libcommon.Hash) { + if _, loaded := c.dumps.LoadAndDelete(root); loaded { + c.dumpsCount.Add(-1) + } + c.parent.Delete(root) + links, ok := c.links.Load(root) + if ok { + for _, link := range links.([]link) { + c.diffs.Delete(link) + } + } + c.links.Delete(root) +} diff --git a/cl/phase1/forkchoice/fork_graph/diff_storage/diff_storage_test.go b/cl/phase1/forkchoice/fork_graph/diff_storage/diff_storage_test.go new file mode 100644 index 00000000000..305765439de --- /dev/null +++ b/cl/phase1/forkchoice/fork_graph/diff_storage/diff_storage_test.go @@ -0,0 +1,84 @@ +package diffstorage + +import ( + "math" + "testing" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/base_encoding" + "github.com/stretchr/testify/require" +) + +// 1 -> 2 -> 3 -> 4 -> 5 +// +// | +// --> 6 +func TestDiffStorage(t *testing.T) { + // decleare 5 nodes + node1 := libcommon.Hash{1} + node2 := libcommon.Hash{2} + node3 := libcommon.Hash{3} + node4 := libcommon.Hash{4} + node5 := libcommon.Hash{5} + node6 := libcommon.Hash{6} + + node1Content := []uint64{1, 2, 3, 4, 5} + node2Content := []uint64{1, 2, 3, 4, 5, 6} + node3Content := []uint64{1, 2, 3, 4, 5, 2, 7} + node4Content := []uint64{1, 2, 3, 4, 5, 2, 7, 8} + node5Content := []uint64{1, 6, 8, 4, 5, 2, 7, 8, 9} + node6Content := []uint64{1, 2, 3, 4, 5, 2, 7, 10} + + exp1 := solid.NewUint64ListSSZFromSlice(math.MaxInt, node1Content) + exp2 := solid.NewUint64ListSSZFromSlice(math.MaxInt, node2Content) + exp3 := solid.NewUint64ListSSZFromSlice(math.MaxInt, node3Content) + exp4 := solid.NewUint64ListSSZFromSlice(math.MaxInt, node4Content) + exp5 := solid.NewUint64ListSSZFromSlice(math.MaxInt, node5Content) + exp6 := solid.NewUint64ListSSZFromSlice(math.MaxInt, node6Content) + + enc1, err := exp1.EncodeSSZ(nil) + require.NoError(t, err) + enc2, err := exp2.EncodeSSZ(nil) + require.NoError(t, err) + enc3, err := exp3.EncodeSSZ(nil) + require.NoError(t, err) + enc4, err := exp4.EncodeSSZ(nil) + require.NoError(t, err) + enc5, err := exp5.EncodeSSZ(nil) + require.NoError(t, err) + enc6, err := exp6.EncodeSSZ(nil) + require.NoError(t, err) + + diffStorage := NewChainDiffStorage(base_encoding.ComputeCompressedSerializedUint64ListDiff, base_encoding.ApplyCompressedSerializedUint64ListDiff) + diffStorage.Insert(node1, libcommon.Hash{}, nil, enc1, true) + diffStorage.Insert(node2, node1, enc1, enc2, false) + diffStorage.Insert(node3, node2, enc2, enc3, false) + diffStorage.Insert(node4, node3, enc3, enc4, false) + diffStorage.Insert(node5, node4, enc4, enc5, false) + diffStorage.Insert(node6, node2, enc2, enc6, false) + + d1, err := diffStorage.Get(node1) + require.NoError(t, err) + require.Equal(t, enc1, d1) + + d2, err := diffStorage.Get(node2) + require.NoError(t, err) + require.Equal(t, enc2, d2) + + d3, err := diffStorage.Get(node3) + require.NoError(t, err) + require.Equal(t, enc3, d3) + + d4, err := diffStorage.Get(node4) + require.NoError(t, err) + require.Equal(t, enc4, d4) + + d5, err := diffStorage.Get(node5) + require.NoError(t, err) + require.Equal(t, enc5, d5) + + d6, err := diffStorage.Get(node6) + require.NoError(t, err) + require.Equal(t, enc6, d6) +} diff --git a/cl/phase1/forkchoice/fork_graph/fork_graph_disk.go b/cl/phase1/forkchoice/fork_graph/fork_graph_disk.go index 1030cba9014..d313dd5b63b 100644 --- a/cl/phase1/forkchoice/fork_graph/fork_graph_disk.go +++ b/cl/phase1/forkchoice/fork_graph/fork_graph_disk.go @@ -3,21 +3,28 @@ package fork_graph import ( "bytes" "errors" + "fmt" "sync" + "sync/atomic" "github.com/klauspost/compress/zstd" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/lightclient_utils" "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/base_encoding" "github.com/ledgerwatch/erigon/cl/phase1/core/state" + diffstorage "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/fork_graph/diff_storage" "github.com/ledgerwatch/erigon/cl/transition" "github.com/ledgerwatch/erigon/cl/transition/impl/eth2" "github.com/ledgerwatch/log/v3" "github.com/spf13/afero" - "golang.org/x/exp/slices" ) +const dumpSlotFrequency = 17 + type syncCommittees struct { currentSyncCommittee *solid.SyncCommittee nextSyncCommittee *solid.SyncCommittee @@ -60,83 +67,93 @@ type savedStateRecord struct { slot uint64 } +func convertHashSliceToHashList(in [][32]byte) solid.HashVectorSSZ { + out := solid.NewHashVector(len(in)) + for i, v := range in { + out.Set(i, libcommon.Hash(v)) + } + return out +} + // ForkGraph is our graph for ETH 2.0 consensus forkchoice. Each node is a (block root, changes) pair and // each edge is the path described as (prevBlockRoot, currBlockRoot). if we want to go forward we use blocks. type forkGraphDisk struct { // Alternate beacon states fs afero.Fs - blocks map[libcommon.Hash]*cltypes.SignedBeaconBlock // set of blocks - headers map[libcommon.Hash]*cltypes.BeaconBlockHeader // set of headers - badBlocks map[libcommon.Hash]struct{} // blocks that are invalid and that leads to automatic fail of extension. - - // TODO: this leaks, but it isn't a big deal since it's only ~24 bytes per block. - // the dirty solution is to just make it an LRU with max size of like 128 epochs or something probably? - stateRoots map[libcommon.Hash]libcommon.Hash // set of stateHash -> blockHash + blocks sync.Map // set of blocks (block root -> block) + headers sync.Map // set of headers + badBlocks sync.Map // blocks that are invalid and that leads to automatic fail of extension. // current state data - currentState *state.CachingBeaconState - currentStateBlockRoot libcommon.Hash - - // saveStates are indexed by block index - saveStates map[libcommon.Hash]savedStateRecord + currentState *state.CachingBeaconState // for each block root we also keep track of te equivalent current justified and finalized checkpoints for faster head retrieval. - currentJustifiedCheckpoints map[libcommon.Hash]solid.Checkpoint - finalizedCheckpoints map[libcommon.Hash]solid.Checkpoint + currentJustifiedCheckpoints sync.Map + finalizedCheckpoints sync.Map // keep track of rewards too - blockRewards map[libcommon.Hash]*eth2.BlockRewardsCollector + blockRewards sync.Map // for each block root we keep track of the sync committees for head retrieval. - syncCommittees map[libcommon.Hash]syncCommittees + syncCommittees sync.Map + lightclientBootstraps sync.Map + // diffs storage + balancesStorage *diffstorage.ChainDiffStorage + validatorSetStorage *diffstorage.ChainDiffStorage + inactivityScoresStorage *diffstorage.ChainDiffStorage + previousIndicies sync.Map + currentIndicies sync.Map // configurations beaconCfg *clparams.BeaconChainConfig genesisTime uint64 // highest block seen - highestSeen, lowestAvaiableSlot, anchorSlot uint64 + highestSeen, anchorSlot uint64 + lowestAvaiableBlock atomic.Uint64 + + newestLightClientUpdate atomic.Value + // the lightclientUpdates leaks memory, but it's not a big deal since new data is added every 27 hours. + lightClientUpdates sync.Map // period -> lightclientupdate // reusable buffers sszBuffer bytes.Buffer sszSnappyBuffer bytes.Buffer + + rcfg beacon_router_configuration.RouterConfiguration } // Initialize fork graph with a new state -func NewForkGraphDisk(anchorState *state.CachingBeaconState, aferoFs afero.Fs) ForkGraph { +func NewForkGraphDisk(anchorState *state.CachingBeaconState, aferoFs afero.Fs, rcfg beacon_router_configuration.RouterConfiguration) ForkGraph { farthestExtendingPath := make(map[libcommon.Hash]bool) anchorRoot, err := anchorState.BlockRoot() if err != nil { panic(err) } - headers := make(map[libcommon.Hash]*cltypes.BeaconBlockHeader) anchorHeader := anchorState.LatestBlockHeader() if anchorHeader.Root, err = anchorState.HashSSZ(); err != nil { panic(err) } - headers[anchorRoot] = &anchorHeader farthestExtendingPath[anchorRoot] = true + balancesStorage := diffstorage.NewChainDiffStorage(base_encoding.ComputeCompressedSerializedUint64ListDiff, base_encoding.ApplyCompressedSerializedUint64ListDiff) + validatorSetStorage := diffstorage.NewChainDiffStorage(base_encoding.ComputeCompressedSerializedValidatorSetListDiff, base_encoding.ApplyCompressedSerializedValidatorListDiff) + inactivityScoresStorage := diffstorage.NewChainDiffStorage(base_encoding.ComputeCompressedSerializedUint64ListDiff, base_encoding.ApplyCompressedSerializedUint64ListDiff) + f := &forkGraphDisk{ fs: aferoFs, - // storage - blocks: make(map[libcommon.Hash]*cltypes.SignedBeaconBlock), - headers: headers, - badBlocks: make(map[libcommon.Hash]struct{}), - stateRoots: make(map[libcommon.Hash]libcommon.Hash), // current state data - currentState: anchorState, - currentStateBlockRoot: anchorRoot, - saveStates: make(map[libcommon.Hash]savedStateRecord), - syncCommittees: make(map[libcommon.Hash]syncCommittees), - // checkpoints trackers - currentJustifiedCheckpoints: make(map[libcommon.Hash]solid.Checkpoint), - finalizedCheckpoints: make(map[libcommon.Hash]solid.Checkpoint), - blockRewards: make(map[libcommon.Hash]*eth2.BlockRewardsCollector), + currentState: anchorState, // configuration - beaconCfg: anchorState.BeaconConfig(), - genesisTime: anchorState.GenesisTime(), - anchorSlot: anchorState.Slot(), - lowestAvaiableSlot: anchorState.Slot(), + beaconCfg: anchorState.BeaconConfig(), + genesisTime: anchorState.GenesisTime(), + anchorSlot: anchorState.Slot(), + balancesStorage: balancesStorage, + validatorSetStorage: validatorSetStorage, + inactivityScoresStorage: inactivityScoresStorage, + rcfg: rcfg, } + f.lowestAvaiableBlock.Store(anchorState.Slot()) + f.headers.Store(libcommon.Hash(anchorRoot), &anchorHeader) + f.dumpBeaconStateOnDisk(anchorState, anchorRoot) return f } @@ -153,211 +170,174 @@ func (f *forkGraphDisk) AddChainSegment(signedBlock *cltypes.SignedBeaconBlock, return nil, LogisticError, err } - if _, ok := f.headers[blockRoot]; ok { + if _, ok := f.GetHeader(libcommon.Hash(blockRoot)); ok { return nil, PreValidated, nil } // Blocks below anchors are invalid. if block.Slot <= f.anchorSlot { log.Debug("block below anchor slot", "slot", block.Slot, "hash", libcommon.Hash(blockRoot)) - f.badBlocks[blockRoot] = struct{}{} + f.badBlocks.Store(libcommon.Hash(blockRoot), struct{}{}) return nil, BelowAnchor, nil } // Check if block being process right now was marked as invalid. - if _, ok := f.badBlocks[blockRoot]; ok { + if _, ok := f.badBlocks.Load(libcommon.Hash(blockRoot)); ok { log.Debug("block has invalid parent", "slot", block.Slot, "hash", libcommon.Hash(blockRoot)) - f.badBlocks[blockRoot] = struct{}{} return nil, InvalidBlock, nil } newState, err := f.GetState(block.ParentRoot, false) if err != nil { - return nil, InvalidBlock, err + return nil, LogisticError, fmt.Errorf("AddChainSegment: %w, parentRoot; %x", err, block.ParentRoot) } if newState == nil { - log.Debug("AddChainSegment: missing segment", "block", libcommon.Hash(blockRoot)) + log.Trace("AddChainSegment: missing segment", "block", libcommon.Hash(blockRoot)) return nil, MissingSegment, nil } + finalizedBlock, hasFinalized := f.getBlock(newState.FinalizedCheckpoint().BlockRoot()) + parentBlock, hasParentBlock := f.getBlock(block.ParentRoot) + + // Before processing the state: update the newest lightclient update. + if block.Version() >= clparams.AltairVersion && hasParentBlock && fullValidation && hasFinalized && f.rcfg.Beacon { + nextSyncCommitteeBranch, err := newState.NextSyncCommitteeBranch() + if err != nil { + return nil, LogisticError, err + } + finalityBranch, err := newState.FinalityRootBranch() + if err != nil { + return nil, LogisticError, err + } + lightclientUpdate, err := lightclient_utils.CreateLightClientUpdate(f.beaconCfg, signedBlock, finalizedBlock, parentBlock, newState.Slot(), + newState.NextSyncCommittee(), newState.FinalizedCheckpoint(), convertHashSliceToHashList(nextSyncCommitteeBranch), convertHashSliceToHashList(finalityBranch)) + if err != nil { + log.Debug("Could not create light client update", "err", err) + } else { + f.newestLightClientUpdate.Store(lightclientUpdate) + period := f.beaconCfg.SyncCommitteePeriod(newState.Slot()) + _, hasPeriod := f.lightClientUpdates.Load(period) + if !hasPeriod { + log.Info("Adding light client update", "period", period) + f.lightClientUpdates.Store(period, lightclientUpdate) + } + } + } blockRewardsCollector := ð2.BlockRewardsCollector{} + var prevDumpBalances, prevValidatorSetDump, prevInactivityScores []byte + epochCross := newState.Slot()/f.beaconCfg.SlotsPerEpoch != block.Slot/f.beaconCfg.SlotsPerEpoch + if (f.rcfg.Beacon || f.rcfg.Validator || f.rcfg.Lighthouse) && !epochCross { + prevDumpBalances = libcommon.Copy(newState.RawBalances()) + prevValidatorSetDump = libcommon.Copy(newState.RawValidatorSet()) + prevInactivityScores = libcommon.Copy(newState.RawInactivityScores()) + } // Execute the state if invalidBlockErr := transition.TransitionState(newState, signedBlock, blockRewardsCollector, fullValidation); invalidBlockErr != nil { // Add block to list of invalid blocks - log.Debug("Invalid beacon block", "reason", invalidBlockErr) - f.badBlocks[blockRoot] = struct{}{} - f.currentStateBlockRoot = libcommon.Hash{} - f.currentState, err = f.GetState(block.ParentRoot, true) - if err != nil { - log.Error("[Caplin] Could not recover from invalid block", "err", err) - } else { - f.currentStateBlockRoot = block.ParentRoot - } + log.Warn("Invalid beacon block", "slot", block.Slot, "blockRoot", blockRoot, "reason", invalidBlockErr) + f.badBlocks.Store(libcommon.Hash(blockRoot), struct{}{}) + f.currentState = nil return nil, InvalidBlock, invalidBlockErr } - f.blockRewards[blockRoot] = blockRewardsCollector - f.syncCommittees[blockRoot] = syncCommittees{ - currentSyncCommittee: newState.CurrentSyncCommittee().Copy(), - nextSyncCommittee: newState.NextSyncCommittee().Copy(), + // update diff storages. + if f.rcfg.Beacon || f.rcfg.Validator || f.rcfg.Lighthouse { + if block.Version() != clparams.Phase0Version { + f.currentIndicies.Store(libcommon.Hash(blockRoot), libcommon.Copy(newState.RawCurrentEpochParticipation())) + f.previousIndicies.Store(libcommon.Hash(blockRoot), libcommon.Copy(newState.RawPreviousEpochParticipation())) + f.inactivityScoresStorage.Insert(libcommon.Hash(blockRoot), block.ParentRoot, prevInactivityScores, newState.RawInactivityScores(), epochCross) + } + f.blockRewards.Store(libcommon.Hash(blockRoot), blockRewardsCollector) + f.balancesStorage.Insert(libcommon.Hash(blockRoot), block.ParentRoot, prevDumpBalances, newState.RawBalances(), epochCross) + f.validatorSetStorage.Insert(libcommon.Hash(blockRoot), block.ParentRoot, prevValidatorSetDump, newState.RawValidatorSet(), epochCross) + period := f.beaconCfg.SyncCommitteePeriod(newState.Slot()) + f.syncCommittees.Store(period, syncCommittees{ + currentSyncCommittee: newState.CurrentSyncCommittee().Copy(), + nextSyncCommittee: newState.NextSyncCommittee().Copy(), + }) + + if block.Version() >= clparams.AltairVersion { + lightclientBootstrap, err := lightclient_utils.CreateLightClientBootstrap(newState, signedBlock) + if err != nil { + return nil, LogisticError, err + } + f.lightclientBootstraps.Store(libcommon.Hash(blockRoot), lightclientBootstrap) + } } - - f.blocks[blockRoot] = signedBlock + f.blocks.Store(libcommon.Hash(blockRoot), signedBlock) bodyRoot, err := signedBlock.Block.Body.HashSSZ() if err != nil { return nil, LogisticError, err } - f.headers[blockRoot] = &cltypes.BeaconBlockHeader{ + + f.headers.Store(libcommon.Hash(blockRoot), &cltypes.BeaconBlockHeader{ Slot: block.Slot, ProposerIndex: block.ProposerIndex, ParentRoot: block.ParentRoot, Root: block.StateRoot, BodyRoot: bodyRoot, - } - - // add the state root - stateRoot, err := newState.HashSSZ() - if err != nil { - return nil, LogisticError, err - } - f.stateRoots[stateRoot] = blockRoot + }) - if newState.Slot()%f.beaconCfg.SlotsPerEpoch == 0 { + if newState.Slot()%dumpSlotFrequency == 0 { if err := f.dumpBeaconStateOnDisk(newState, blockRoot); err != nil { return nil, LogisticError, err } - f.saveStates[blockRoot] = savedStateRecord{slot: newState.Slot()} } // Lastly add checkpoints to caches as well. - f.currentJustifiedCheckpoints[blockRoot] = newState.CurrentJustifiedCheckpoint().Copy() - f.finalizedCheckpoints[blockRoot] = newState.FinalizedCheckpoint().Copy() + f.currentJustifiedCheckpoints.Store(libcommon.Hash(blockRoot), newState.CurrentJustifiedCheckpoint().Copy()) + f.finalizedCheckpoints.Store(libcommon.Hash(blockRoot), newState.FinalizedCheckpoint().Copy()) if newState.Slot() > f.highestSeen { f.highestSeen = newState.Slot() f.currentState = newState - f.currentStateBlockRoot = blockRoot } return newState, Success, nil } func (f *forkGraphDisk) GetHeader(blockRoot libcommon.Hash) (*cltypes.BeaconBlockHeader, bool) { - obj, has := f.headers[blockRoot] - return obj, has + obj, has := f.headers.Load(blockRoot) + if !has { + return nil, false + } + return obj.(*cltypes.BeaconBlockHeader), true } func (f *forkGraphDisk) getBlock(blockRoot libcommon.Hash) (*cltypes.SignedBeaconBlock, bool) { - obj, has := f.blocks[blockRoot] - return obj, has -} - -// GetStateAtSlot is for getting a state based off the slot number -// NOTE: all this does is call GetStateAtSlot using the stateRoots index and existing blocks. -func (f *forkGraphDisk) GetStateAtStateRoot(root libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) { - blockRoot, ok := f.stateRoots[root] - if !ok { - return nil, ErrStateNotFound - } - blockSlot, ok := f.blocks[blockRoot] - if !ok { - return nil, ErrStateNotFound + obj, has := f.blocks.Load(blockRoot) + if !has { + return nil, false } - return f.GetStateAtSlot(blockSlot.Block.Slot, alwaysCopy) + return obj.(*cltypes.SignedBeaconBlock), true } -// GetStateAtSlot is for getting a state based off the slot number -// TODO: this is rather inefficient. we could create indices that make it faster -func (f *forkGraphDisk) GetStateAtSlot(slot uint64, alwaysCopy bool) (*state.CachingBeaconState, error) { - // fast path for if the slot is the current slot - if f.currentState.Slot() == slot { - // always copy. - if alwaysCopy { - ret, err := f.currentState.Copy() - return ret, err - } - return f.currentState, nil - } - // if the slot requested is larger than the current slot, we know it is not found, so another fast path - if slot > f.currentState.Slot() { - return nil, ErrStateNotFound - } - if len(f.saveStates) == 0 { - return nil, ErrStateNotFound - } - bestSlot := uint64(0) - startHash := libcommon.Hash{} - // iterate over all savestates. there should be less than 10 of these, so this should be safe. - for blockHash, v := range f.saveStates { - // make sure the slot is smaller than the target slot - // (equality case caught by short circuit) - // and that the slot is larger than the current best found starting slot - if v.slot < slot && v.slot > bestSlot { - bestSlot = v.slot - startHash = blockHash - } - } - // no snapshot old enough to honor this request :( - if bestSlot == 0 { - return nil, ErrStateNotFound - } - copyReferencedState, err := f.readBeaconStateFromDisk(startHash) - if err != nil { - return nil, err - } - // cache lied? return state not found - if copyReferencedState == nil { - return nil, ErrStateNotFound - } - - // what we need to do is grab every block in our block store that is between the target slot and the current slot - // this is linear time from the distance to our last snapshot. - blocksInTheWay := []*cltypes.SignedBeaconBlock{} - for _, v := range f.blocks { - if v.Block.Slot <= f.currentState.Slot() && v.Block.Slot >= slot { - blocksInTheWay = append(blocksInTheWay, v) - } - } - - // sort the slots from low to high - slices.SortStableFunc(blocksInTheWay, func(a, b *cltypes.SignedBeaconBlock) int { - return int(a.Block.Slot) - int(b.Block.Slot) - }) - - // Traverse the blocks from top to bottom. - for _, block := range blocksInTheWay { - if err := transition.TransitionState(copyReferencedState, block, nil, false); err != nil { +func (f *forkGraphDisk) GetState(blockRoot libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) { + if f.currentState != nil && !alwaysCopy { + currentStateBlockRoot, err := f.currentState.BlockRoot() + if err != nil { return nil, err } - } - return copyReferencedState, nil -} - -func (f *forkGraphDisk) GetState(blockRoot libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) { - if f.currentStateBlockRoot == blockRoot { - if alwaysCopy { - ret, err := f.currentState.Copy() - return ret, err + if currentStateBlockRoot == blockRoot { + return f.currentState, nil } - return f.currentState, nil } // collect all blocks beetwen greatest extending node path and block. blocksInTheWay := []*cltypes.SignedBeaconBlock{} // Use the parent root as a reverse iterator. currentIteratorRoot := blockRoot - // try and find the point of recconection for { block, isSegmentPresent := f.getBlock(currentIteratorRoot) if !isSegmentPresent { // check if it is in the header bHeader, ok := f.GetHeader(currentIteratorRoot) - if ok && bHeader.Slot%f.beaconCfg.SlotsPerEpoch == 0 { + if ok && bHeader.Slot%dumpSlotFrequency == 0 { break } - log.Debug("Could not retrieve state: Missing header", "missing", currentIteratorRoot) + log.Trace("Could not retrieve state: Missing header", "missing", currentIteratorRoot) return nil, nil } - if block.Block.Slot%f.beaconCfg.SlotsPerEpoch == 0 { + if block.Block.Slot%dumpSlotFrequency == 0 { break } blocksInTheWay = append(blocksInTheWay, block) @@ -381,58 +361,167 @@ func (f *forkGraphDisk) GetState(blockRoot libcommon.Hash, alwaysCopy bool) (*st } func (f *forkGraphDisk) GetCurrentJustifiedCheckpoint(blockRoot libcommon.Hash) (solid.Checkpoint, bool) { - obj, has := f.currentJustifiedCheckpoints[blockRoot] - return obj, has + obj, has := f.currentJustifiedCheckpoints.Load(blockRoot) + if !has { + return solid.Checkpoint{}, false + } + return obj.(solid.Checkpoint), has } func (f *forkGraphDisk) GetFinalizedCheckpoint(blockRoot libcommon.Hash) (solid.Checkpoint, bool) { - obj, has := f.finalizedCheckpoints[blockRoot] - return obj, has + obj, has := f.finalizedCheckpoints.Load(blockRoot) + if !has { + return solid.Checkpoint{}, false + } + return obj.(solid.Checkpoint), has } func (f *forkGraphDisk) MarkHeaderAsInvalid(blockRoot libcommon.Hash) { - f.badBlocks[blockRoot] = struct{}{} + f.badBlocks.Store(blockRoot, struct{}{}) } func (f *forkGraphDisk) Prune(pruneSlot uint64) (err error) { pruneSlot -= f.beaconCfg.SlotsPerEpoch * 2 - oldRoots := make([]libcommon.Hash, 0, len(f.blocks)) - for hash, signedBlock := range f.blocks { + oldRoots := make([]libcommon.Hash, 0, f.beaconCfg.SlotsPerEpoch) + highestCrossedEpochSlot := uint64(0) + f.blocks.Range(func(key, value interface{}) bool { + hash := key.(libcommon.Hash) + signedBlock := value.(*cltypes.SignedBeaconBlock) + if signedBlock.Block.Slot%f.beaconCfg.SlotsPerEpoch == 0 && highestCrossedEpochSlot < signedBlock.Block.Slot { + highestCrossedEpochSlot = signedBlock.Block.Slot + } if signedBlock.Block.Slot >= pruneSlot { - continue + return true } oldRoots = append(oldRoots, hash) + + return true + }) + if pruneSlot >= highestCrossedEpochSlot { + return } - f.lowestAvaiableSlot = pruneSlot + 1 + + f.lowestAvaiableBlock.Store(pruneSlot + 1) for _, root := range oldRoots { - delete(f.badBlocks, root) - delete(f.blocks, root) - delete(f.currentJustifiedCheckpoints, root) - delete(f.finalizedCheckpoints, root) - delete(f.headers, root) - delete(f.saveStates, root) - delete(f.syncCommittees, root) - delete(f.blockRewards, root) + f.badBlocks.Delete(root) + f.blocks.Delete(root) + f.lightclientBootstraps.Delete(root) + f.currentJustifiedCheckpoints.Delete(root) + f.finalizedCheckpoints.Delete(root) + f.headers.Delete(root) + f.blockRewards.Delete(root) f.fs.Remove(getBeaconStateFilename(root)) f.fs.Remove(getBeaconStateCacheFilename(root)) + f.balancesStorage.Delete(root) + f.validatorSetStorage.Delete(root) + f.inactivityScoresStorage.Delete(root) + f.previousIndicies.Delete(root) + f.currentIndicies.Delete(root) } log.Debug("Pruned old blocks", "pruneSlot", pruneSlot) return } -func (f *forkGraphDisk) GetSyncCommittees(blockRoot libcommon.Hash) (*solid.SyncCommittee, *solid.SyncCommittee, bool) { - obj, has := f.syncCommittees[blockRoot] +func (f *forkGraphDisk) GetSyncCommittees(period uint64) (*solid.SyncCommittee, *solid.SyncCommittee, bool) { + obj, has := f.syncCommittees.Load(period) if !has { return nil, nil, false } - return obj.currentSyncCommittee, obj.nextSyncCommittee, true + ret := obj.(syncCommittees) + return ret.currentSyncCommittee, ret.nextSyncCommittee, true } func (f *forkGraphDisk) GetBlockRewards(blockRoot libcommon.Hash) (*eth2.BlockRewardsCollector, bool) { - obj, has := f.blockRewards[blockRoot] - return obj, has + obj, has := f.blockRewards.Load(blockRoot) + if !has { + return nil, false + } + return obj.(*eth2.BlockRewardsCollector), true } func (f *forkGraphDisk) LowestAvaiableSlot() uint64 { - return f.lowestAvaiableSlot + return f.lowestAvaiableBlock.Load() +} + +func (f *forkGraphDisk) GetLightClientBootstrap(blockRoot libcommon.Hash) (*cltypes.LightClientBootstrap, bool) { + obj, has := f.lightclientBootstraps.Load(blockRoot) + if !has { + return nil, false + } + return obj.(*cltypes.LightClientBootstrap), true +} + +func (f *forkGraphDisk) NewestLightClientUpdate() *cltypes.LightClientUpdate { + if f.newestLightClientUpdate.Load() == nil { + return nil + } + return f.newestLightClientUpdate.Load().(*cltypes.LightClientUpdate) +} + +func (f *forkGraphDisk) GetLightClientUpdate(period uint64) (*cltypes.LightClientUpdate, bool) { + obj, has := f.lightClientUpdates.Load(period) + if !has { + return nil, false + } + return obj.(*cltypes.LightClientUpdate), true +} + +func (f *forkGraphDisk) GetBalances(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) { + b, err := f.balancesStorage.Get(blockRoot) + if err != nil { + return nil, err + } + if len(b) == 0 { + return nil, nil + } + out := solid.NewUint64ListSSZ(int(f.beaconCfg.ValidatorRegistryLimit)) + return out, out.DecodeSSZ(b, 0) +} + +func (f *forkGraphDisk) GetInactivitiesScores(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) { + b, err := f.inactivityScoresStorage.Get(blockRoot) + if err != nil { + return nil, err + } + if len(b) == 0 { + return nil, nil + } + out := solid.NewUint64ListSSZ(int(f.beaconCfg.ValidatorRegistryLimit)) + return out, out.DecodeSSZ(b, 0) +} + +func (f *forkGraphDisk) GetPreviousPartecipationIndicies(blockRoot libcommon.Hash) (*solid.BitList, error) { + b, ok := f.previousIndicies.Load(blockRoot) + if !ok { + return nil, nil + } + if len(b.([]byte)) == 0 { + return nil, nil + } + out := solid.NewBitList(0, int(f.beaconCfg.ValidatorRegistryLimit)) + return out, out.DecodeSSZ(b.([]byte), 0) +} + +func (f *forkGraphDisk) GetCurrentPartecipationIndicies(blockRoot libcommon.Hash) (*solid.BitList, error) { + b, ok := f.currentIndicies.Load(blockRoot) + if !ok { + return nil, nil + } + if len(b.([]byte)) == 0 { + return nil, nil + } + out := solid.NewBitList(0, int(f.beaconCfg.ValidatorRegistryLimit)) + return out, out.DecodeSSZ(b.([]byte), 0) +} + +func (f *forkGraphDisk) GetValidatorSet(blockRoot libcommon.Hash) (*solid.ValidatorSet, error) { + b, err := f.validatorSetStorage.Get(blockRoot) + if err != nil { + return nil, err + } + if len(b) == 0 { + return nil, nil + } + out := solid.NewValidatorSet(int(f.beaconCfg.ValidatorRegistryLimit)) + return out, out.DecodeSSZ(b, 0) } diff --git a/cl/phase1/forkchoice/fork_graph/fork_graph_disk_fs.go b/cl/phase1/forkchoice/fork_graph/fork_graph_disk_fs.go index 274fa7a691b..72a9eabfc82 100644 --- a/cl/phase1/forkchoice/fork_graph/fork_graph_disk_fs.go +++ b/cl/phase1/forkchoice/fork_graph/fork_graph_disk_fs.go @@ -2,7 +2,9 @@ package fork_graph import ( "encoding/binary" + "errors" "fmt" + "io" "os" "github.com/golang/snappy" @@ -31,35 +33,38 @@ func (f *forkGraphDisk) readBeaconStateFromDisk(blockRoot libcommon.Hash) (bs *s // Read the version v := []byte{0} if _, err := file.Read(v); err != nil { - return nil, err + return nil, fmt.Errorf("failed to read hard fork version: %w, root: %x", err, blockRoot) } // Read the length lengthBytes := make([]byte, 8) - _, err = file.Read(lengthBytes) + var n int + n, err = io.ReadFull(file, lengthBytes) if err != nil { - return + return nil, fmt.Errorf("failed to read length: %w, root: %x", err, blockRoot) + } + if n != 8 { + return nil, fmt.Errorf("failed to read length: %d, want 8, root: %x", n, blockRoot) } // Grow the snappy buffer f.sszSnappyBuffer.Grow(int(binary.BigEndian.Uint64(lengthBytes))) // Read the snappy buffer sszSnappyBuffer := f.sszSnappyBuffer.Bytes() sszSnappyBuffer = sszSnappyBuffer[:cap(sszSnappyBuffer)] - var n int - n, err = file.Read(sszSnappyBuffer) - if err != nil { - return + n, err = io.ReadFull(file, sszSnappyBuffer) + if err != nil && !errors.Is(err, io.ErrUnexpectedEOF) { + return nil, fmt.Errorf("failed to read snappy buffer: %w, root: %x", err, blockRoot) } decLen, err := snappy.DecodedLen(sszSnappyBuffer[:n]) if err != nil { - return + return nil, fmt.Errorf("failed to get decoded length: %w, root: %x, len: %d", err, blockRoot, n) } // Grow the plain ssz buffer f.sszBuffer.Grow(decLen) sszBuffer := f.sszBuffer.Bytes() sszBuffer, err = snappy.Decode(sszBuffer, sszSnappyBuffer[:n]) if err != nil { - return + return nil, fmt.Errorf("failed to decode snappy buffer: %w, root: %x, len: %d, decLen: %d", err, blockRoot, n, decLen) } bs = state.New(f.beaconCfg) err = bs.DecodeSSZ(sszBuffer, int(v[0])) diff --git a/cl/phase1/forkchoice/fork_graph/fork_graph_test.go b/cl/phase1/forkchoice/fork_graph/fork_graph_test.go index 67820471a8d..442c814b890 100644 --- a/cl/phase1/forkchoice/fork_graph/fork_graph_test.go +++ b/cl/phase1/forkchoice/fork_graph/fork_graph_test.go @@ -4,6 +4,7 @@ import ( _ "embed" "testing" + "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/spf13/afero" @@ -30,7 +31,7 @@ func TestForkGraphInDisk(t *testing.T) { require.NoError(t, utils.DecodeSSZSnappy(blockB, block2, int(clparams.Phase0Version))) require.NoError(t, utils.DecodeSSZSnappy(blockC, block2, int(clparams.Phase0Version))) require.NoError(t, utils.DecodeSSZSnappy(anchorState, anchor, int(clparams.Phase0Version))) - graph := NewForkGraphDisk(anchorState, afero.NewMemMapFs()) + graph := NewForkGraphDisk(anchorState, afero.NewMemMapFs(), beacon_router_configuration.RouterConfiguration{}) _, status, err := graph.AddChainSegment(blockA, true) require.NoError(t, err) require.Equal(t, status, Success) diff --git a/cl/phase1/forkchoice/fork_graph/interface.go b/cl/phase1/forkchoice/fork_graph/interface.go index 23d9e106040..5b22c1f231b 100644 --- a/cl/phase1/forkchoice/fork_graph/interface.go +++ b/cl/phase1/forkchoice/fork_graph/interface.go @@ -24,14 +24,18 @@ type ForkGraph interface { GetState(blockRoot libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) GetCurrentJustifiedCheckpoint(blockRoot libcommon.Hash) (solid.Checkpoint, bool) GetFinalizedCheckpoint(blockRoot libcommon.Hash) (solid.Checkpoint, bool) - GetSyncCommittees(blockRoot libcommon.Hash) (*solid.SyncCommittee, *solid.SyncCommittee, bool) + GetSyncCommittees(period uint64) (*solid.SyncCommittee, *solid.SyncCommittee, bool) MarkHeaderAsInvalid(blockRoot libcommon.Hash) AnchorSlot() uint64 Prune(uint64) error GetBlockRewards(blockRoot libcommon.Hash) (*eth2.BlockRewardsCollector, bool) LowestAvaiableSlot() uint64 - - // extra methods for validator api - GetStateAtSlot(slot uint64, alwaysCopy bool) (*state.CachingBeaconState, error) - GetStateAtStateRoot(root libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) + GetLightClientBootstrap(blockRoot libcommon.Hash) (*cltypes.LightClientBootstrap, bool) + NewestLightClientUpdate() *cltypes.LightClientUpdate + GetLightClientUpdate(period uint64) (*cltypes.LightClientUpdate, bool) + GetBalances(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) + GetInactivitiesScores(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) + GetPreviousPartecipationIndicies(blockRoot libcommon.Hash) (*solid.BitList, error) + GetValidatorSet(blockRoot libcommon.Hash) (*solid.ValidatorSet, error) + GetCurrentPartecipationIndicies(blockRoot libcommon.Hash) (*solid.BitList, error) } diff --git a/cl/phase1/forkchoice/forkchoice.go b/cl/phase1/forkchoice/forkchoice.go index 689c8240d3a..933ef73f0d8 100644 --- a/cl/phase1/forkchoice/forkchoice.go +++ b/cl/phase1/forkchoice/forkchoice.go @@ -1,41 +1,32 @@ package forkchoice import ( - "context" + "slices" "sort" "sync" "sync/atomic" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/freezer" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" "github.com/ledgerwatch/erigon/cl/phase1/core/state" state2 "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/phase1/execution_client" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/fork_graph" "github.com/ledgerwatch/erigon/cl/pool" "github.com/ledgerwatch/erigon/cl/transition/impl/eth2" - "golang.org/x/exp/slices" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" lru "github.com/hashicorp/golang-lru/v2" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/length" ) -// Schema -/* -{ - "slot": "1", - "block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", - "parent_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", - "justified_epoch": "1", - "finalized_epoch": "1", - "weight": "1", - "validity": "valid", - "execution_block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", - "extra_data": {} - } -*/ +// ForkNode is a struct that represents a node in the fork choice tree. type ForkNode struct { Slot uint64 `json:"slot,string"` BlockRoot libcommon.Hash `json:"block_root"` @@ -72,54 +63,61 @@ type preverifiedAppendListsSizes struct { } type ForkChoiceStore struct { - ctx context.Context - time uint64 - highestSeen uint64 - justifiedCheckpoint solid.Checkpoint - finalizedCheckpoint solid.Checkpoint - unrealizedJustifiedCheckpoint solid.Checkpoint - unrealizedFinalizedCheckpoint solid.Checkpoint - proposerBoostRoot libcommon.Hash - // attestations that are not yet processed - attestationSet sync.Map - // head data - headHash libcommon.Hash - headSlot uint64 - genesisTime uint64 - weights map[libcommon.Hash]uint64 - headSet map[libcommon.Hash]struct{} + time atomic.Uint64 + highestSeen atomic.Uint64 + // all of *solid.Checkpoint type + justifiedCheckpoint atomic.Value + finalizedCheckpoint atomic.Value + unrealizedJustifiedCheckpoint atomic.Value + unrealizedFinalizedCheckpoint atomic.Value + + proposerBoostRoot atomic.Value + headHash libcommon.Hash + headSlot uint64 + genesisTime uint64 + genesisValidatorsRoot libcommon.Hash + weights map[libcommon.Hash]uint64 + headSet map[libcommon.Hash]struct{} + hotSidecars map[libcommon.Hash][]*cltypes.BlobSidecar // Set of sidecars that are not yet processed. // childrens - childrens map[libcommon.Hash]childrens + childrens sync.Map // Use go map because this is actually an unordered set equivocatingIndicies []byte forkGraph fork_graph.ForkGraph + blobStorage blob_storage.BlobStorage // I use the cache due to the convenient auto-cleanup feauture. - checkpointStates map[checkpointComparable]*checkpointState // We keep ssz snappy of it as the full beacon state is full of rendundant data. - latestMessages []LatestMessage - anchorPublicKeys []byte + checkpointStates sync.Map // We keep ssz snappy of it as the full beacon state is full of rendundant data. + + latestMessages []LatestMessage + anchorPublicKeys []byte + syncedDataManager *synced_data.SyncedDataManager // We keep track of them so that we can forkchoice with EL. eth2Roots *lru.Cache[libcommon.Hash, libcommon.Hash] // ETH2 root -> ETH1 hash // preverifid sizes and other data collection preverifiedSizes *lru.Cache[libcommon.Hash, preverifiedAppendListsSizes] finalityCheckpoints *lru.Cache[libcommon.Hash, finalityCheckpoints] totalActiveBalances *lru.Cache[libcommon.Hash, uint64] + nextBlockProposers *lru.Cache[libcommon.Hash, []uint64] // Randao mixes randaoMixesLists *lru.Cache[libcommon.Hash, solid.HashListSSZ] // limited randao mixes full list (only 16 elements) randaoDeltas *lru.Cache[libcommon.Hash, randaoDelta] // small entry can be lots of elements. // participation tracking participation *lru.Cache[uint64, *solid.BitList] // epoch -> [partecipation] - mu sync.Mutex + mu sync.RWMutex + // EL engine execution_client.ExecutionEngine - // freezer - recorder freezer.Freezer + // operations pool operationsPool pool.OperationsPool beaconCfg *clparams.BeaconChainConfig - synced atomic.Bool + emitters *beaconevents.Emitters + synced atomic.Bool + + ethClock eth_clock.EthereumClock } type LatestMessage struct { @@ -133,7 +131,16 @@ type childrens struct { } // NewForkChoiceStore initialize a new store from the given anchor state, either genesis or checkpoint sync state. -func NewForkChoiceStore(ctx context.Context, anchorState *state2.CachingBeaconState, engine execution_client.ExecutionEngine, recorder freezer.Freezer, operationsPool pool.OperationsPool, forkGraph fork_graph.ForkGraph) (*ForkChoiceStore, error) { +func NewForkChoiceStore( + ethClock eth_clock.EthereumClock, + anchorState *state2.CachingBeaconState, + engine execution_client.ExecutionEngine, + operationsPool pool.OperationsPool, + forkGraph fork_graph.ForkGraph, + emitters *beaconevents.Emitters, + syncedDataManager *synced_data.SyncedDataManager, + blobStorage blob_storage.BlobStorage, +) (*ForkChoiceStore, error) { anchorRoot, err := anchorState.BlockRoot() if err != nil { return nil, err @@ -192,6 +199,11 @@ func NewForkChoiceStore(ctx context.Context, anchorState *state2.CachingBeaconSt return nil, err } + nextBlockProposers, err := lru.New[libcommon.Hash, []uint64](checkpointsPerCache * 10) + if err != nil { + return nil, err + } + participation.Add(state.Epoch(anchorState.BeaconState), anchorState.CurrentEpochParticipation().Copy()) totalActiveBalances.Add(anchorRoot, anchorState.GetTotalActiveBalance()) @@ -200,153 +212,130 @@ func NewForkChoiceStore(ctx context.Context, anchorState *state2.CachingBeaconSt randaoMixesLists.Add(anchorRoot, r) headSet := make(map[libcommon.Hash]struct{}) headSet[anchorRoot] = struct{}{} - return &ForkChoiceStore{ - ctx: ctx, - highestSeen: anchorState.Slot(), - time: anchorState.GenesisTime() + anchorState.BeaconConfig().SecondsPerSlot*anchorState.Slot(), - justifiedCheckpoint: anchorCheckpoint.Copy(), - finalizedCheckpoint: anchorCheckpoint.Copy(), - unrealizedJustifiedCheckpoint: anchorCheckpoint.Copy(), - unrealizedFinalizedCheckpoint: anchorCheckpoint.Copy(), - forkGraph: forkGraph, - equivocatingIndicies: make([]byte, anchorState.ValidatorLength(), anchorState.ValidatorLength()*2), - latestMessages: make([]LatestMessage, anchorState.ValidatorLength(), anchorState.ValidatorLength()*2), - checkpointStates: make(map[checkpointComparable]*checkpointState), - eth2Roots: eth2Roots, - engine: engine, - recorder: recorder, - operationsPool: operationsPool, - anchorPublicKeys: anchorPublicKeys, - genesisTime: anchorState.GenesisTime(), - beaconCfg: anchorState.BeaconConfig(), - childrens: make(map[libcommon.Hash]childrens), - preverifiedSizes: preverifiedSizes, - finalityCheckpoints: finalityCheckpoints, - totalActiveBalances: totalActiveBalances, - randaoMixesLists: randaoMixesLists, - randaoDeltas: randaoDeltas, - headSet: headSet, - weights: make(map[libcommon.Hash]uint64), - participation: participation, - }, nil + f := &ForkChoiceStore{ + forkGraph: forkGraph, + equivocatingIndicies: make([]byte, anchorState.ValidatorLength(), anchorState.ValidatorLength()*2), + latestMessages: make([]LatestMessage, anchorState.ValidatorLength(), anchorState.ValidatorLength()*2), + eth2Roots: eth2Roots, + engine: engine, + operationsPool: operationsPool, + anchorPublicKeys: anchorPublicKeys, + beaconCfg: anchorState.BeaconConfig(), + preverifiedSizes: preverifiedSizes, + finalityCheckpoints: finalityCheckpoints, + totalActiveBalances: totalActiveBalances, + randaoMixesLists: randaoMixesLists, + randaoDeltas: randaoDeltas, + headSet: headSet, + weights: make(map[libcommon.Hash]uint64), + participation: participation, + emitters: emitters, + genesisTime: anchorState.GenesisTime(), + syncedDataManager: syncedDataManager, + nextBlockProposers: nextBlockProposers, + genesisValidatorsRoot: anchorState.GenesisValidatorsRoot(), + hotSidecars: make(map[libcommon.Hash][]*cltypes.BlobSidecar), + blobStorage: blobStorage, + ethClock: ethClock, + } + f.justifiedCheckpoint.Store(anchorCheckpoint.Copy()) + f.finalizedCheckpoint.Store(anchorCheckpoint.Copy()) + f.unrealizedFinalizedCheckpoint.Store(anchorCheckpoint.Copy()) + f.unrealizedJustifiedCheckpoint.Store(anchorCheckpoint.Copy()) + f.proposerBoostRoot.Store(libcommon.Hash{}) + + f.highestSeen.Store(anchorState.Slot()) + f.time.Store(anchorState.GenesisTime() + anchorState.BeaconConfig().SecondsPerSlot*anchorState.Slot()) + return f, nil } // Highest seen returns highest seen slot func (f *ForkChoiceStore) HighestSeen() uint64 { - f.mu.Lock() - defer f.mu.Unlock() - return f.highestSeen + return f.highestSeen.Load() } func (f *ForkChoiceStore) children(parent libcommon.Hash) []libcommon.Hash { - children, ok := f.childrens[parent] + children, ok := f.childrens.Load(parent) if !ok { return nil } - return children.childrenHashes + return children.(childrens).childrenHashes } // updateChildren adds a new child to the parent node hash. func (f *ForkChoiceStore) updateChildren(parentSlot uint64, parent, child libcommon.Hash) { - c, ok := f.childrens[parent] - if !ok { - c = childrens{} + cI, ok := f.childrens.Load(parent) + var c childrens + if ok { + c = cI.(childrens) } - c.parentSlot = parentSlot // can be innacurate. + c.parentSlot = parentSlot // can be inaccurate. if slices.Contains(c.childrenHashes, child) { return } c.childrenHashes = append(c.childrenHashes, child) - f.childrens[parent] = c -} - -// AdvanceHighestSeen advances the highest seen block by n and returns the new slot after the change -func (f *ForkChoiceStore) AdvanceHighestSeen(n uint64) uint64 { - f.mu.Lock() - defer f.mu.Unlock() - f.highestSeen += n - return f.highestSeen + f.childrens.Store(parent, c) } // Time returns current time func (f *ForkChoiceStore) Time() uint64 { - f.mu.Lock() - defer f.mu.Unlock() - return f.time + return f.time.Load() } // ProposerBoostRoot returns proposer boost root func (f *ForkChoiceStore) ProposerBoostRoot() libcommon.Hash { - f.mu.Lock() - defer f.mu.Unlock() - return f.proposerBoostRoot + return f.proposerBoostRoot.Load().(libcommon.Hash) } // JustifiedCheckpoint returns justified checkpoint func (f *ForkChoiceStore) JustifiedCheckpoint() solid.Checkpoint { - f.mu.Lock() - defer f.mu.Unlock() - return f.justifiedCheckpoint + return f.justifiedCheckpoint.Load().(solid.Checkpoint) } // FinalizedCheckpoint returns justified checkpoint func (f *ForkChoiceStore) JustifiedSlot() uint64 { - f.mu.Lock() - defer f.mu.Unlock() - return f.computeStartSlotAtEpoch(f.justifiedCheckpoint.Epoch()) + return f.computeStartSlotAtEpoch(f.justifiedCheckpoint.Load().(solid.Checkpoint).Epoch()) } // FinalizedCheckpoint returns justified checkpoint func (f *ForkChoiceStore) FinalizedCheckpoint() solid.Checkpoint { - f.mu.Lock() - defer f.mu.Unlock() - return f.finalizedCheckpoint + return f.finalizedCheckpoint.Load().(solid.Checkpoint) } // FinalizedCheckpoint returns justified checkpoint func (f *ForkChoiceStore) FinalizedSlot() uint64 { - f.mu.Lock() - defer f.mu.Unlock() - return f.computeStartSlotAtEpoch(f.finalizedCheckpoint.Epoch()) + (f.beaconCfg.SlotsPerEpoch - 1) + return f.computeStartSlotAtEpoch(f.finalizedCheckpoint.Load().(solid.Checkpoint).Epoch()) + (f.beaconCfg.SlotsPerEpoch - 1) } // FinalizedCheckpoint returns justified checkpoint func (f *ForkChoiceStore) Engine() execution_client.ExecutionEngine { - f.mu.Lock() - defer f.mu.Unlock() + f.mu.RLock() + defer f.mu.RUnlock() return f.engine } // FinalizedCheckpoint returns justified checkpoint func (f *ForkChoiceStore) GetEth1Hash(eth2Root libcommon.Hash) libcommon.Hash { - f.mu.Lock() - defer f.mu.Unlock() + f.mu.RLock() + defer f.mu.RUnlock() ret, _ := f.eth2Roots.Get(eth2Root) return ret } // FinalizedCheckpoint returns justified checkpoint func (f *ForkChoiceStore) AnchorSlot() uint64 { - f.mu.Lock() - defer f.mu.Unlock() + f.mu.RLock() + defer f.mu.RUnlock() return f.forkGraph.AnchorSlot() } func (f *ForkChoiceStore) GetStateAtBlockRoot(blockRoot libcommon.Hash, alwaysCopy bool) (*state2.CachingBeaconState, error) { - f.mu.Lock() - defer f.mu.Unlock() + if !alwaysCopy { + f.mu.RLock() + defer f.mu.RUnlock() + } return f.forkGraph.GetState(blockRoot, alwaysCopy) } -func (f *ForkChoiceStore) GetStateAtStateRoot(stateRoot libcommon.Hash, alwaysCopy bool) (*state2.CachingBeaconState, error) { - f.mu.Lock() - defer f.mu.Unlock() - return f.forkGraph.GetState(stateRoot, alwaysCopy) -} -func (f *ForkChoiceStore) GetStateAtSlot(slot uint64, alwaysCopy bool) (*state.CachingBeaconState, error) { - f.mu.Lock() - defer f.mu.Unlock() - return f.forkGraph.GetStateAtSlot(slot, alwaysCopy) -} func (f *ForkChoiceStore) PreverifiedValidator(blockRoot libcommon.Hash) uint64 { if ret, ok := f.preverifiedSizes.Get(blockRoot); ok { @@ -370,23 +359,21 @@ func (f *ForkChoiceStore) PreverifiedHistoricalSummaries(blockRoot libcommon.Has } func (f *ForkChoiceStore) GetFinalityCheckpoints(blockRoot libcommon.Hash) (bool, solid.Checkpoint, solid.Checkpoint, solid.Checkpoint) { - f.mu.Lock() - defer f.mu.Unlock() if ret, ok := f.finalityCheckpoints.Get(blockRoot); ok { return true, ret.finalizedCheckpoint, ret.currentJustifiedCheckpoint, ret.previousJustifiedCheckpoint } return false, solid.Checkpoint{}, solid.Checkpoint{}, solid.Checkpoint{} } -func (f *ForkChoiceStore) GetSyncCommittees(blockRoot libcommon.Hash) (*solid.SyncCommittee, *solid.SyncCommittee, bool) { - f.mu.Lock() - defer f.mu.Unlock() - return f.forkGraph.GetSyncCommittees(blockRoot) +func (f *ForkChoiceStore) GetSyncCommittees(period uint64) (*solid.SyncCommittee, *solid.SyncCommittee, bool) { + return f.forkGraph.GetSyncCommittees(period) +} + +func (f *ForkChoiceStore) GetBeaconCommitee(slot, committeeIndex uint64) ([]uint64, error) { + return f.syncedDataManager.HeadState().GetBeaconCommitee(slot, committeeIndex) } func (f *ForkChoiceStore) BlockRewards(root libcommon.Hash) (*eth2.BlockRewardsCollector, bool) { - f.mu.Lock() - defer f.mu.Unlock() return f.forkGraph.GetBlockRewards(root) } @@ -395,14 +382,12 @@ func (f *ForkChoiceStore) TotalActiveBalance(root libcommon.Hash) (uint64, bool) } func (f *ForkChoiceStore) LowestAvaiableSlot() uint64 { - f.mu.Lock() - defer f.mu.Unlock() + f.mu.RLock() + defer f.mu.RUnlock() return f.forkGraph.LowestAvaiableSlot() } func (f *ForkChoiceStore) RandaoMixes(blockRoot libcommon.Hash, out solid.HashListSSZ) bool { - f.mu.Lock() - defer f.mu.Unlock() relevantDeltas := map[uint64]randaoDelta{} currentBlockRoot := blockRoot var currentSlot uint64 @@ -440,8 +425,8 @@ func (f *ForkChoiceStore) Partecipation(epoch uint64) (*solid.BitList, bool) { } func (f *ForkChoiceStore) ForkNodes() []ForkNode { - f.mu.Lock() - defer f.mu.Unlock() + f.mu.RLock() + defer f.mu.RUnlock() forkNodes := make([]ForkNode, 0, len(f.weights)) for blockRoot, weight := range f.weights { header, has := f.forkGraph.GetHeader(blockRoot) @@ -476,13 +461,45 @@ func (f *ForkChoiceStore) ForkNodes() []ForkNode { } func (f *ForkChoiceStore) Synced() bool { - f.mu.Lock() - defer f.mu.Unlock() return f.synced.Load() } func (f *ForkChoiceStore) SetSynced(s bool) { - f.mu.Lock() - defer f.mu.Unlock() f.synced.Store(s) } + +func (f *ForkChoiceStore) GetLightClientBootstrap(blockRoot libcommon.Hash) (*cltypes.LightClientBootstrap, bool) { + return f.forkGraph.GetLightClientBootstrap(blockRoot) +} + +func (f *ForkChoiceStore) NewestLightClientUpdate() *cltypes.LightClientUpdate { + return f.forkGraph.NewestLightClientUpdate() +} + +func (f *ForkChoiceStore) GetLightClientUpdate(period uint64) (*cltypes.LightClientUpdate, bool) { + return f.forkGraph.GetLightClientUpdate(period) +} + +func (f *ForkChoiceStore) GetHeader(blockRoot libcommon.Hash) (*cltypes.BeaconBlockHeader, bool) { + return f.forkGraph.GetHeader(blockRoot) +} + +func (f *ForkChoiceStore) GetBalances(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) { + return f.forkGraph.GetBalances(blockRoot) +} + +func (f *ForkChoiceStore) GetInactivitiesScores(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) { + return f.forkGraph.GetInactivitiesScores(blockRoot) +} + +func (f *ForkChoiceStore) GetPreviousPartecipationIndicies(blockRoot libcommon.Hash) (*solid.BitList, error) { + return f.forkGraph.GetPreviousPartecipationIndicies(blockRoot) +} + +func (f *ForkChoiceStore) GetValidatorSet(blockRoot libcommon.Hash) (*solid.ValidatorSet, error) { + return f.forkGraph.GetValidatorSet(blockRoot) +} + +func (f *ForkChoiceStore) GetCurrentPartecipationIndicies(blockRoot libcommon.Hash) (*solid.BitList, error) { + return f.forkGraph.GetCurrentPartecipationIndicies(blockRoot) +} diff --git a/cl/phase1/forkchoice/forkchoice_mock.go b/cl/phase1/forkchoice/forkchoice_mock.go deleted file mode 100644 index 665b0f12621..00000000000 --- a/cl/phase1/forkchoice/forkchoice_mock.go +++ /dev/null @@ -1,235 +0,0 @@ -package forkchoice - -import ( - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/erigon/cl/phase1/execution_client" - "github.com/ledgerwatch/erigon/cl/pool" - "github.com/ledgerwatch/erigon/cl/transition/impl/eth2" -) - -// type ForkChoiceStorage interface { -// ForkChoiceStorageWriter -// ForkChoiceStorageReader -// } - -// type ForkChoiceStorageReader interface { -// Ancestor(root common.Hash, slot uint64) common.Hash -// AnchorSlot() uint64 -// Engine() execution_client.ExecutionEngine -// FinalizedCheckpoint() solid.Checkpoint -// FinalizedSlot() uint64 -// GetEth1Hash(eth2Root common.Hash) common.Hash -// GetHead() (common.Hash, uint64, error) -// HighestSeen() uint64 -// JustifiedCheckpoint() solid.Checkpoint -// JustifiedSlot() uint64 -// ProposerBoostRoot() common.Hash -// GetStateAtBlockRoot(blockRoot libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) -// GetFinalityCheckpoints(blockRoot libcommon.Hash) (bool, solid.Checkpoint, solid.Checkpoint, solid.Checkpoint) -// GetSyncCommittees(blockRoot libcommon.Hash) (*solid.SyncCommittee, *solid.SyncCommittee, bool) -// Slot() uint64 -// Time() uint64 - -// GetStateAtSlot(slot uint64, alwaysCopy bool) (*state.CachingBeaconState, error) -// GetStateAtStateRoot(root libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) -// } - -// type ForkChoiceStorageWriter interface { -// OnAttestation(attestation *solid.Attestation, fromBlock bool) error -// OnAttesterSlashing(attesterSlashing *cltypes.AttesterSlashing, test bool) error -// OnBlock(block *cltypes.SignedBeaconBlock, newPayload bool, fullValidation bool) error -// OnTick(time uint64) -// } - -// Make mocks with maps and simple setters and getters, panic on methods from ForkChoiceStorageWriter - -type ForkChoiceStorageMock struct { - Ancestors map[uint64]common.Hash - AnchorSlotVal uint64 - FinalizedCheckpointVal solid.Checkpoint - FinalizedSlotVal uint64 - HeadVal common.Hash - HeadSlotVal uint64 - HighestSeenVal uint64 - JustifiedCheckpointVal solid.Checkpoint - JustifiedSlotVal uint64 - ProposerBoostRootVal common.Hash - SlotVal uint64 - TimeVal uint64 - - ParticipationVal *solid.BitList - - StateAtBlockRootVal map[common.Hash]*state.CachingBeaconState - StateAtSlotVal map[uint64]*state.CachingBeaconState - GetSyncCommitteesVal map[common.Hash][2]*solid.SyncCommittee - GetFinalityCheckpointsVal map[common.Hash][3]solid.Checkpoint - WeightsMock []ForkNode - - Pool pool.OperationsPool -} - -func NewForkChoiceStorageMock() *ForkChoiceStorageMock { - return &ForkChoiceStorageMock{ - Ancestors: make(map[uint64]common.Hash), - AnchorSlotVal: 0, - FinalizedCheckpointVal: solid.Checkpoint{}, - FinalizedSlotVal: 0, - HeadVal: common.Hash{}, - HighestSeenVal: 0, - JustifiedCheckpointVal: solid.Checkpoint{}, - JustifiedSlotVal: 0, - ProposerBoostRootVal: common.Hash{}, - SlotVal: 0, - TimeVal: 0, - StateAtBlockRootVal: make(map[common.Hash]*state.CachingBeaconState), - StateAtSlotVal: make(map[uint64]*state.CachingBeaconState), - GetSyncCommitteesVal: make(map[common.Hash][2]*solid.SyncCommittee), - GetFinalityCheckpointsVal: make(map[common.Hash][3]solid.Checkpoint), - } -} - -func (f *ForkChoiceStorageMock) Ancestor(root common.Hash, slot uint64) common.Hash { - return f.Ancestors[slot] -} - -func (f *ForkChoiceStorageMock) AnchorSlot() uint64 { - return f.AnchorSlotVal -} - -func (f *ForkChoiceStorageMock) Engine() execution_client.ExecutionEngine { - panic("implement me") -} - -func (f *ForkChoiceStorageMock) FinalizedCheckpoint() solid.Checkpoint { - return f.FinalizedCheckpointVal -} - -func (f *ForkChoiceStorageMock) FinalizedSlot() uint64 { - return f.FinalizedSlotVal -} - -func (f *ForkChoiceStorageMock) GetEth1Hash(eth2Root common.Hash) common.Hash { - panic("implement me") -} - -func (f *ForkChoiceStorageMock) GetHead() (common.Hash, uint64, error) { - return f.HeadVal, f.HeadSlotVal, nil -} - -func (f *ForkChoiceStorageMock) HighestSeen() uint64 { - return f.HighestSeenVal -} - -func (f *ForkChoiceStorageMock) JustifiedCheckpoint() solid.Checkpoint { - return f.JustifiedCheckpointVal -} - -func (f *ForkChoiceStorageMock) JustifiedSlot() uint64 { - return f.JustifiedSlotVal -} - -func (f *ForkChoiceStorageMock) ProposerBoostRoot() common.Hash { - return f.ProposerBoostRootVal -} - -func (f *ForkChoiceStorageMock) GetStateAtBlockRoot(blockRoot common.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) { - return f.StateAtBlockRootVal[blockRoot], nil -} - -func (f *ForkChoiceStorageMock) GetFinalityCheckpoints(blockRoot common.Hash) (bool, solid.Checkpoint, solid.Checkpoint, solid.Checkpoint) { - oneNil := f.GetFinalityCheckpointsVal[blockRoot][0] != nil && f.GetFinalityCheckpointsVal[blockRoot][1] != nil && f.GetFinalityCheckpointsVal[blockRoot][2] != nil - return oneNil, f.GetFinalityCheckpointsVal[blockRoot][0], f.GetFinalityCheckpointsVal[blockRoot][1], f.GetFinalityCheckpointsVal[blockRoot][2] -} - -func (f *ForkChoiceStorageMock) GetSyncCommittees(blockRoot common.Hash) (*solid.SyncCommittee, *solid.SyncCommittee, bool) { - return f.GetSyncCommitteesVal[blockRoot][0], f.GetSyncCommitteesVal[blockRoot][1], f.GetSyncCommitteesVal[blockRoot][0] != nil && f.GetSyncCommitteesVal[blockRoot][1] != nil -} - -func (f *ForkChoiceStorageMock) GetStateAtSlot(slot uint64, alwaysCopy bool) (*state.CachingBeaconState, error) { - return f.StateAtSlotVal[slot], nil -} - -func (f *ForkChoiceStorageMock) Slot() uint64 { - return f.SlotVal -} - -func (f *ForkChoiceStorageMock) Time() uint64 { - return f.TimeVal -} - -func (f *ForkChoiceStorageMock) OnAttestation(attestation *solid.Attestation, fromBlock, insert bool) error { - f.Pool.AttestationsPool.Insert(attestation.Signature(), attestation) - return nil -} - -func (f *ForkChoiceStorageMock) OnAttesterSlashing(attesterSlashing *cltypes.AttesterSlashing, test bool) error { - f.Pool.AttesterSlashingsPool.Insert(pool.ComputeKeyForAttesterSlashing(attesterSlashing), attesterSlashing) - return nil -} - -func (f *ForkChoiceStorageMock) OnBlock(block *cltypes.SignedBeaconBlock, newPayload bool, fullValidation bool) error { - panic("implement me") -} - -func (f *ForkChoiceStorageMock) OnTick(time uint64) { - panic("implement me") -} - -func (f *ForkChoiceStorageMock) GetStateAtStateRoot(root common.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) { - panic("implement me") -} - -func (f *ForkChoiceStorageMock) BlockRewards(root common.Hash) (*eth2.BlockRewardsCollector, bool) { - panic("implement me") -} - -func (f *ForkChoiceStorageMock) TotalActiveBalance(root common.Hash) (uint64, bool) { - panic("implement me") -} - -func (f *ForkChoiceStorageMock) RandaoMixes(blockRoot common.Hash, out solid.HashListSSZ) bool { - return false -} - -func (f *ForkChoiceStorageMock) LowestAvaiableSlot() uint64 { - return f.FinalizedSlotVal -} - -func (f *ForkChoiceStorageMock) Partecipation(epoch uint64) (*solid.BitList, bool) { - return f.ParticipationVal, f.ParticipationVal != nil -} - -func (f *ForkChoiceStorageMock) OnVoluntaryExit(signedVoluntaryExit *cltypes.SignedVoluntaryExit, test bool) error { - f.Pool.VoluntaryExistsPool.Insert(signedVoluntaryExit.VoluntaryExit.ValidatorIndex, signedVoluntaryExit) - return nil -} - -func (f *ForkChoiceStorageMock) OnProposerSlashing(proposerSlashing *cltypes.ProposerSlashing, test bool) error { - f.Pool.ProposerSlashingsPool.Insert(pool.ComputeKeyForProposerSlashing(proposerSlashing), proposerSlashing) - return nil -} - -func (f *ForkChoiceStorageMock) OnBlsToExecutionChange(signedChange *cltypes.SignedBLSToExecutionChange, test bool) error { - f.Pool.BLSToExecutionChangesPool.Insert(signedChange.Signature, signedChange) - return nil -} - -func (f *ForkChoiceStorageMock) ForkNodes() []ForkNode { - return f.WeightsMock -} - -func (f *ForkChoiceStorageMock) OnAggregateAndProof(aggregateAndProof *cltypes.SignedAggregateAndProof, test bool) error { - f.Pool.AttestationsPool.Insert(aggregateAndProof.Message.Aggregate.Signature(), aggregateAndProof.Message.Aggregate) - return nil -} - -func (f *ForkChoiceStorageMock) Synced() bool { - return true -} - -func (f *ForkChoiceStorageMock) SetSynced(synced bool) { - panic("implement me") -} diff --git a/cl/phase1/forkchoice/forkchoice_slot.go b/cl/phase1/forkchoice/forkchoice_slot.go deleted file mode 100644 index ef71778dcad..00000000000 --- a/cl/phase1/forkchoice/forkchoice_slot.go +++ /dev/null @@ -1 +0,0 @@ -package forkchoice diff --git a/cl/phase1/forkchoice/get_head.go b/cl/phase1/forkchoice/get_head.go index 56165f4a2bc..7d5d5aa1d24 100644 --- a/cl/phase1/forkchoice/get_head.go +++ b/cl/phase1/forkchoice/get_head.go @@ -7,15 +7,9 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" ) -// GetHead fetches the current head. -func (f *ForkChoiceStore) GetHead() (libcommon.Hash, uint64, error) { - f.mu.Lock() - defer f.mu.Unlock() - return f.getHead() -} - // accountWeights updates the weights of the validators, given the vote and given an head leaf. func (f *ForkChoiceStore) accountWeights(votes, weights map[libcommon.Hash]uint64, justifedRoot, leaf libcommon.Hash) { curr := leaf @@ -33,18 +27,26 @@ func (f *ForkChoiceStore) accountWeights(votes, weights map[libcommon.Hash]uint6 return } -func (f *ForkChoiceStore) getHead() (libcommon.Hash, uint64, error) { +func (f *ForkChoiceStore) GetHead() (libcommon.Hash, uint64, error) { + f.mu.RLock() if f.headHash != (libcommon.Hash{}) { + f.mu.RUnlock() return f.headHash, f.headSlot, nil } - // Retrieve att - f.headHash = f.justifiedCheckpoint.BlockRoot() - blocks := f.getFilteredBlockTree(f.headHash) + f.mu.RUnlock() + // Take write lock here + + justifiedCheckpoint := f.justifiedCheckpoint.Load().(solid.Checkpoint) // See which validators can be used for attestation score - justificationState, err := f.getCheckpointState(f.justifiedCheckpoint) + justificationState, err := f.getCheckpointState(justifiedCheckpoint) if err != nil { return libcommon.Hash{}, 0, err } + f.mu.Lock() + defer f.mu.Unlock() + // Retrieve att + f.headHash = justifiedCheckpoint.BlockRoot() + blocks := f.getFilteredBlockTree(f.headHash) // Do a simple scan to determine the fork votes. votes := make(map[libcommon.Hash]uint64) for validatorIndex, message := range f.latestMessages { @@ -62,14 +64,15 @@ func (f *ForkChoiceStore) getHead() (libcommon.Hash, uint64, error) { } votes[message.Root] += justificationState.balances[validatorIndex] } - if f.proposerBoostRoot != (libcommon.Hash{}) { + boostRoot := f.proposerBoostRoot.Load().(libcommon.Hash) + if boostRoot != (libcommon.Hash{}) { boost := justificationState.activeBalance / justificationState.beaconConfig.SlotsPerEpoch - votes[f.proposerBoostRoot] += (boost * justificationState.beaconConfig.ProposerScoreBoost) / 100 + votes[boostRoot] += (boost * justificationState.beaconConfig.ProposerScoreBoost) / 100 } // Account for weights on each head fork f.weights = make(map[libcommon.Hash]uint64) for head := range f.headSet { - f.accountWeights(votes, f.weights, f.justifiedCheckpoint.BlockRoot(), head) + f.accountWeights(votes, f.weights, justifiedCheckpoint.BlockRoot(), head) } for { @@ -90,6 +93,7 @@ func (f *ForkChoiceStore) getHead() (libcommon.Hash, uint64, error) { f.headSlot = header.Slot return f.headHash, f.headSlot, nil } + // Average case scenario. if len(children) == 1 { f.headHash = children[0] @@ -101,7 +105,6 @@ func (f *ForkChoiceStore) getHead() (libcommon.Hash, uint64, error) { childB := children[j] return bytes.Compare(childA[:], childB[:]) < 0 }) - // After sorting is done determine best fit. f.headHash = children[0] maxWeight := f.weights[children[0]] @@ -148,12 +151,14 @@ func (f *ForkChoiceStore) getWeight(root libcommon.Hash, indicies []uint64, stat } attestationScore += state.balances[validatorIndex] } - if f.proposerBoostRoot == (libcommon.Hash{}) { + + boostRoot := f.proposerBoostRoot.Load().(libcommon.Hash) + if boostRoot == (libcommon.Hash{}) { return attestationScore } // Boost is applied if root is an ancestor of proposer_boost_root - if f.Ancestor(f.proposerBoostRoot, header.Slot) == root { + if f.Ancestor(boostRoot, header.Slot) == root { committeeWeight := state.activeBalance / state.beaconConfig.SlotsPerEpoch attestationScore += (committeeWeight * state.beaconConfig.ProposerScoreBoost) / 100 } @@ -175,6 +180,8 @@ func (f *ForkChoiceStore) getFilterBlockTree(blockRoot libcommon.Hash, blocks ma if !has { return false } + finalizedCheckpoint := f.finalizedCheckpoint.Load().(solid.Checkpoint) + justifiedCheckpoint := f.justifiedCheckpoint.Load().(solid.Checkpoint) children := f.children(blockRoot) // If there are children iterate down recursively and see which branches are viable. if len(children) > 0 { @@ -199,8 +206,8 @@ func (f *ForkChoiceStore) getFilterBlockTree(blockRoot libcommon.Hash, blocks ma } genesisEpoch := f.beaconCfg.GenesisEpoch - if (f.justifiedCheckpoint.Epoch() == genesisEpoch || currentJustifiedCheckpoint.Equal(f.justifiedCheckpoint)) && - (f.finalizedCheckpoint.Epoch() == genesisEpoch || finalizedJustifiedCheckpoint.Equal(f.finalizedCheckpoint)) { + if (justifiedCheckpoint.Epoch() == genesisEpoch || currentJustifiedCheckpoint.Equal(justifiedCheckpoint)) && + (finalizedCheckpoint.Epoch() == genesisEpoch || finalizedJustifiedCheckpoint.Equal(finalizedCheckpoint)) { blocks[blockRoot] = header return true } diff --git a/cl/phase1/forkchoice/interface.go b/cl/phase1/forkchoice/interface.go index 955bd188d4a..e24af7990ff 100644 --- a/cl/phase1/forkchoice/interface.go +++ b/cl/phase1/forkchoice/interface.go @@ -1,6 +1,8 @@ package forkchoice import ( + "context" + "github.com/ledgerwatch/erigon-lib/common" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/cltypes" @@ -28,9 +30,15 @@ type ForkChoiceStorageReader interface { JustifiedCheckpoint() solid.Checkpoint JustifiedSlot() uint64 ProposerBoostRoot() common.Hash - GetStateAtBlockRoot(blockRoot libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) - GetFinalityCheckpoints(blockRoot libcommon.Hash) (bool, solid.Checkpoint, solid.Checkpoint, solid.Checkpoint) - GetSyncCommittees(blockRoot libcommon.Hash) (*solid.SyncCommittee, *solid.SyncCommittee, bool) + GetStateAtBlockRoot( + blockRoot libcommon.Hash, + alwaysCopy bool, + ) (*state.CachingBeaconState, error) + GetFinalityCheckpoints( + blockRoot libcommon.Hash, + ) (bool, solid.Checkpoint, solid.Checkpoint, solid.Checkpoint) + GetSyncCommittees(period uint64) (*solid.SyncCommittee, *solid.SyncCommittee, bool) + GetBeaconCommitee(slot, committeeIndex uint64) ([]uint64, error) Slot() uint64 Time() uint64 Partecipation(epoch uint64) (*solid.BitList, bool) @@ -38,20 +46,34 @@ type ForkChoiceStorageReader interface { BlockRewards(root libcommon.Hash) (*eth2.BlockRewardsCollector, bool) TotalActiveBalance(root libcommon.Hash) (uint64, bool) - GetStateAtSlot(slot uint64, alwaysCopy bool) (*state.CachingBeaconState, error) - GetStateAtStateRoot(root libcommon.Hash, alwaysCopy bool) (*state.CachingBeaconState, error) ForkNodes() []ForkNode Synced() bool + GetLightClientBootstrap(blockRoot libcommon.Hash) (*cltypes.LightClientBootstrap, bool) + NewestLightClientUpdate() *cltypes.LightClientUpdate + GetLightClientUpdate(period uint64) (*cltypes.LightClientUpdate, bool) + GetHeader(blockRoot libcommon.Hash) (*cltypes.BeaconBlockHeader, bool) + + GetBalances(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) + GetInactivitiesScores(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) + GetPreviousPartecipationIndicies(blockRoot libcommon.Hash) (*solid.BitList, error) + GetValidatorSet(blockRoot libcommon.Hash) (*solid.ValidatorSet, error) + GetCurrentPartecipationIndicies(blockRoot libcommon.Hash) (*solid.BitList, error) + + ValidateOnAttestation(attestation *solid.Attestation) error } type ForkChoiceStorageWriter interface { - OnAggregateAndProof(aggregateAndProof *cltypes.SignedAggregateAndProof, test bool) error OnAttestation(attestation *solid.Attestation, fromBlock, insert bool) error OnAttesterSlashing(attesterSlashing *cltypes.AttesterSlashing, test bool) error - OnVoluntaryExit(signedVoluntaryExit *cltypes.SignedVoluntaryExit, test bool) error - OnProposerSlashing(proposerSlashing *cltypes.ProposerSlashing, test bool) error - OnBlsToExecutionChange(signedChange *cltypes.SignedBLSToExecutionChange, test bool) error - OnBlock(block *cltypes.SignedBeaconBlock, newPayload bool, fullValidation bool) error + OnBlock( + ctx context.Context, + block *cltypes.SignedBeaconBlock, + newPayload bool, + fullValidation bool, + checkDataAvaibility bool, + ) error + AddPreverifiedBlobSidecar(blobSidecar *cltypes.BlobSidecar) error OnTick(time uint64) SetSynced(synced bool) + ProcessAttestingIndicies(attestation *solid.Attestation, attestionIndicies []uint64) } diff --git a/cl/phase1/forkchoice/mock_services/forkchoice_mock.go b/cl/phase1/forkchoice/mock_services/forkchoice_mock.go new file mode 100644 index 00000000000..ea37ada97eb --- /dev/null +++ b/cl/phase1/forkchoice/mock_services/forkchoice_mock.go @@ -0,0 +1,351 @@ +package mock_services + +import ( + "context" + "testing" + + "go.uber.org/mock/gomock" + + "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/execution_client" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" + "github.com/ledgerwatch/erigon/cl/pool" + "github.com/ledgerwatch/erigon/cl/transition/impl/eth2" + "github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool" + syncpoolmock "github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool/mock_services" +) + +// Make mocks with maps and simple setters and getters, panic on methods from ForkChoiceStorageWriter + +type ForkChoiceStorageMock struct { + Ancestors map[uint64]common.Hash + AnchorSlotVal uint64 + FinalizedCheckpointVal solid.Checkpoint + FinalizedSlotVal uint64 + HeadVal common.Hash + HeadSlotVal uint64 + HighestSeenVal uint64 + JustifiedCheckpointVal solid.Checkpoint + JustifiedSlotVal uint64 + ProposerBoostRootVal common.Hash + SlotVal uint64 + TimeVal uint64 + + ParticipationVal *solid.BitList + + StateAtBlockRootVal map[common.Hash]*state.CachingBeaconState + StateAtSlotVal map[uint64]*state.CachingBeaconState + GetSyncCommitteesVal map[uint64][2]*solid.SyncCommittee + GetFinalityCheckpointsVal map[common.Hash][3]solid.Checkpoint + WeightsMock []forkchoice.ForkNode + LightClientBootstraps map[common.Hash]*cltypes.LightClientBootstrap + NewestLCUpdate *cltypes.LightClientUpdate + LCUpdates map[uint64]*cltypes.LightClientUpdate + SyncContributionPool sync_contribution_pool.SyncContributionPool + Headers map[common.Hash]*cltypes.BeaconBlockHeader + GetBeaconCommitteeMock func(slot, committeeIndex uint64) ([]uint64, error) + + Pool pool.OperationsPool +} + +func makeSyncContributionPoolMock(t *testing.T) sync_contribution_pool.SyncContributionPool { + ctrl := gomock.NewController(t) + type syncContributionKey struct { + slot uint64 + subcommitteeIndex uint64 + beaconBlockRoot common.Hash + } + u := map[syncContributionKey]*cltypes.Contribution{} + pool := syncpoolmock.NewMockSyncContributionPool(ctrl) + pool.EXPECT(). + AddSyncContribution(gomock.Any(), gomock.Any()). + DoAndReturn(func(headState *state.CachingBeaconState, contribution *cltypes.Contribution) error { + key := syncContributionKey{ + slot: contribution.Slot, + subcommitteeIndex: contribution.SubcommitteeIndex, + beaconBlockRoot: contribution.BeaconBlockRoot, + } + u[key] = contribution + return nil + }). + AnyTimes() + pool.EXPECT(). + GetSyncContribution(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(slot uint64, subcommitteeIndex uint64, beaconBlockRoot common.Hash) *cltypes.Contribution { + key := syncContributionKey{ + slot: slot, + subcommitteeIndex: subcommitteeIndex, + beaconBlockRoot: beaconBlockRoot, + } + return u[key] + }). + AnyTimes() + pool.EXPECT(). + AddSyncCommitteeMessage(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(headState *state.CachingBeaconState, subCommitee uint64, message *cltypes.SyncCommitteeMessage) error { + key := syncContributionKey{ + slot: message.Slot, + subcommitteeIndex: subCommitee, + beaconBlockRoot: message.BeaconBlockRoot, + } + u[key] = &cltypes.Contribution{ + Slot: message.Slot, + SubcommitteeIndex: subCommitee, + BeaconBlockRoot: message.BeaconBlockRoot, + AggregationBits: make([]byte, cltypes.SyncCommitteeAggregationBitsSize), + } + return nil + }).AnyTimes() + return pool +} + +func NewForkChoiceStorageMock(t *testing.T) *ForkChoiceStorageMock { + return &ForkChoiceStorageMock{ + Ancestors: make(map[uint64]common.Hash), + AnchorSlotVal: 0, + FinalizedCheckpointVal: solid.Checkpoint{}, + FinalizedSlotVal: 0, + HeadVal: common.Hash{}, + HighestSeenVal: 0, + JustifiedCheckpointVal: solid.Checkpoint{}, + JustifiedSlotVal: 0, + ProposerBoostRootVal: common.Hash{}, + SlotVal: 0, + TimeVal: 0, + StateAtBlockRootVal: make(map[common.Hash]*state.CachingBeaconState), + StateAtSlotVal: make(map[uint64]*state.CachingBeaconState), + GetSyncCommitteesVal: make(map[uint64][2]*solid.SyncCommittee), + GetFinalityCheckpointsVal: make(map[common.Hash][3]solid.Checkpoint), + LightClientBootstraps: make(map[common.Hash]*cltypes.LightClientBootstrap), + LCUpdates: make(map[uint64]*cltypes.LightClientUpdate), + Headers: make(map[common.Hash]*cltypes.BeaconBlockHeader), + GetBeaconCommitteeMock: nil, + SyncContributionPool: makeSyncContributionPoolMock(t), + } +} + +func (f *ForkChoiceStorageMock) Ancestor(root common.Hash, slot uint64) common.Hash { + return f.Ancestors[slot] +} + +func (f *ForkChoiceStorageMock) AnchorSlot() uint64 { + return f.AnchorSlotVal +} + +func (f *ForkChoiceStorageMock) Engine() execution_client.ExecutionEngine { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) FinalizedCheckpoint() solid.Checkpoint { + return f.FinalizedCheckpointVal +} + +func (f *ForkChoiceStorageMock) FinalizedSlot() uint64 { + return f.FinalizedSlotVal +} + +func (f *ForkChoiceStorageMock) GetEth1Hash(eth2Root common.Hash) common.Hash { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) GetHead() (common.Hash, uint64, error) { + return f.HeadVal, f.HeadSlotVal, nil +} + +func (f *ForkChoiceStorageMock) HighestSeen() uint64 { + return f.HighestSeenVal +} + +func (f *ForkChoiceStorageMock) JustifiedCheckpoint() solid.Checkpoint { + return f.JustifiedCheckpointVal +} + +func (f *ForkChoiceStorageMock) JustifiedSlot() uint64 { + return f.JustifiedSlotVal +} + +func (f *ForkChoiceStorageMock) ProposerBoostRoot() common.Hash { + return f.ProposerBoostRootVal +} + +func (f *ForkChoiceStorageMock) GetStateAtBlockRoot( + blockRoot common.Hash, + alwaysCopy bool, +) (*state.CachingBeaconState, error) { + return f.StateAtBlockRootVal[blockRoot], nil +} + +func (f *ForkChoiceStorageMock) GetFinalityCheckpoints( + blockRoot common.Hash, +) (bool, solid.Checkpoint, solid.Checkpoint, solid.Checkpoint) { + oneNil := f.GetFinalityCheckpointsVal[blockRoot][0] != nil && + f.GetFinalityCheckpointsVal[blockRoot][1] != nil && + f.GetFinalityCheckpointsVal[blockRoot][2] != nil + return oneNil, f.GetFinalityCheckpointsVal[blockRoot][0], f.GetFinalityCheckpointsVal[blockRoot][1], f.GetFinalityCheckpointsVal[blockRoot][2] +} + +func (f *ForkChoiceStorageMock) GetSyncCommittees( + period uint64, +) (*solid.SyncCommittee, *solid.SyncCommittee, bool) { + return f.GetSyncCommitteesVal[period][0], f.GetSyncCommitteesVal[period][1], f.GetSyncCommitteesVal[period][0] != nil && + f.GetSyncCommitteesVal[period][1] != nil +} + +func (f *ForkChoiceStorageMock) GetBeaconCommitee(slot, committeeIndex uint64) ([]uint64, error) { + if f.GetBeaconCommitteeMock != nil { + return f.GetBeaconCommitteeMock(slot, committeeIndex) + } + return []uint64{1, 2, 3, 4, 5, 6, 7, 8}, nil +} + +func (f *ForkChoiceStorageMock) Slot() uint64 { + return f.SlotVal +} + +func (f *ForkChoiceStorageMock) Time() uint64 { + return f.TimeVal +} + +func (f *ForkChoiceStorageMock) OnAttestation( + attestation *solid.Attestation, + fromBlock, insert bool, +) error { + f.Pool.AttestationsPool.Insert(attestation.Signature(), attestation) + return nil +} + +func (f *ForkChoiceStorageMock) OnAttesterSlashing( + attesterSlashing *cltypes.AttesterSlashing, + test bool, +) error { + f.Pool.AttesterSlashingsPool.Insert( + pool.ComputeKeyForAttesterSlashing(attesterSlashing), + attesterSlashing, + ) + return nil +} + +func (f *ForkChoiceStorageMock) OnBlock( + ctx context.Context, + block *cltypes.SignedBeaconBlock, + newPayload bool, + fullValidation bool, + checkDataAvaiability bool, +) error { + return nil +} + +func (f *ForkChoiceStorageMock) OnTick(time uint64) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) BlockRewards(root common.Hash) (*eth2.BlockRewardsCollector, bool) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) TotalActiveBalance(root common.Hash) (uint64, bool) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) RandaoMixes(blockRoot common.Hash, out solid.HashListSSZ) bool { + return false +} + +func (f *ForkChoiceStorageMock) LowestAvaiableSlot() uint64 { + return f.FinalizedSlotVal +} + +func (f *ForkChoiceStorageMock) Partecipation(epoch uint64) (*solid.BitList, bool) { + return f.ParticipationVal, f.ParticipationVal != nil +} + +func (f *ForkChoiceStorageMock) ForkNodes() []forkchoice.ForkNode { + return f.WeightsMock +} + +func (f *ForkChoiceStorageMock) Synced() bool { + return true +} + +func (f *ForkChoiceStorageMock) SetSynced(synced bool) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) GetLightClientBootstrap( + blockRoot common.Hash, +) (*cltypes.LightClientBootstrap, bool) { + return f.LightClientBootstraps[blockRoot], f.LightClientBootstraps[blockRoot] != nil +} + +func (f *ForkChoiceStorageMock) NewestLightClientUpdate() *cltypes.LightClientUpdate { + return f.NewestLCUpdate +} + +func (f *ForkChoiceStorageMock) GetLightClientUpdate( + period uint64, +) (*cltypes.LightClientUpdate, bool) { + return f.LCUpdates[period], f.LCUpdates[period] != nil +} + +func (f *ForkChoiceStorageMock) GetHeader( + blockRoot libcommon.Hash, +) (*cltypes.BeaconBlockHeader, bool) { + return f.Headers[blockRoot], f.Headers[blockRoot] != nil +} + +func (f *ForkChoiceStorageMock) GetBalances(blockRoot libcommon.Hash) (solid.Uint64ListSSZ, error) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) GetInactivitiesScores( + blockRoot libcommon.Hash, +) (solid.Uint64ListSSZ, error) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) GetPreviousPartecipationIndicies( + blockRoot libcommon.Hash, +) (*solid.BitList, error) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) GetValidatorSet( + blockRoot libcommon.Hash, +) (*solid.ValidatorSet, error) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) GetCurrentPartecipationIndicies( + blockRoot libcommon.Hash, +) (*solid.BitList, error) { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) GetPublicKeyForValidator( + blockRoot libcommon.Hash, + idx uint64, +) (libcommon.Bytes48, error) { + panic("implement me") +} + +// func (f *ForkChoiceStorageMock) OnSignedContributionAndProof(signedContribution *cltypes.SignedContributionAndProof, test bool) error { +// f.SyncContributionPool.AddSyncContribution(nil, signedContribution.Message.Contribution) +// return nil +// } + +func (f *ForkChoiceStorageMock) AddPreverifiedBlobSidecar(msg *cltypes.BlobSidecar) error { + return nil +} +func (f *ForkChoiceStorageMock) ValidateOnAttestation(attestation *solid.Attestation) error { + panic("implement me") +} + +func (f *ForkChoiceStorageMock) ProcessAttestingIndicies( + attestation *solid.Attestation, + attestionIndicies []uint64, +) { +} diff --git a/cl/phase1/forkchoice/on_attestation.go b/cl/phase1/forkchoice/on_attestation.go index 3c59c4c2eb8..4056e8c11cb 100644 --- a/cl/phase1/forkchoice/on_attestation.go +++ b/cl/phase1/forkchoice/on_attestation.go @@ -2,21 +2,23 @@ package forkchoice import ( "fmt" - "time" - "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/phase1/cache" "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/log/v3" libcommon "github.com/ledgerwatch/erigon-lib/common" ) -const maxAttestationJobLifetime = 30 * time.Minute +var ( + ErrIgnore = fmt.Errorf("ignore") +) // OnAttestation processes incoming attestations. -func (f *ForkChoiceStore) OnAttestation(attestation *solid.Attestation, fromBlock bool, insert bool) error { +func (f *ForkChoiceStore) OnAttestation( + attestation *solid.Attestation, + fromBlock bool, + insert bool, +) error { if !f.synced.Load() { return nil } @@ -24,134 +26,120 @@ func (f *ForkChoiceStore) OnAttestation(attestation *solid.Attestation, fromBloc defer f.mu.Unlock() f.headHash = libcommon.Hash{} data := attestation.AttestantionData() - if err := f.validateOnAttestation(attestation, fromBlock); err != nil { + if err := f.ValidateOnAttestation(attestation); err != nil { return err } - // Schedule for later processing. - if f.Slot() < attestation.AttestantionData().Slot()+1 { - f.scheduleAttestationForLaterProcessing(attestation, fromBlock) + currentEpoch := f.computeEpochAtSlot(f.Slot()) + + if f.Slot() < attestation.AttestantionData().Slot()+1 || data.Target().Epoch() > currentEpoch { return nil } + + if !fromBlock { + if err := f.validateTargetEpochAgainstCurrentTime(attestation); err != nil { + return err + } + } + headState := f.syncedDataManager.HeadState() + var attestationIndicies []uint64 + var err error target := data.Target() - if cachedIndicies, ok := cache.LoadAttestatingIndicies(&data, attestation.AggregationBits()); ok { - f.processAttestingIndicies(attestation, cachedIndicies) - return nil + + if headState == nil { + attestationIndicies, err = f.verifyAttestationWithCheckpointState( + target, + attestation, + fromBlock, + ) + } else { + attestationIndicies, err = f.verifyAttestationWithState(headState, attestation, fromBlock) + } + if err != nil { + return err } + + // Lastly update latest messages. + f.processAttestingIndicies(attestation, attestationIndicies) + + return nil +} + +func (f *ForkChoiceStore) ProcessAttestingIndicies( + attestation *solid.Attestation, + attestionIndicies []uint64, +) { + f.mu.Lock() + defer f.mu.Unlock() + f.processAttestingIndicies(attestation, attestionIndicies) +} + +func (f *ForkChoiceStore) verifyAttestationWithCheckpointState( + target solid.Checkpoint, + attestation *solid.Attestation, + fromBlock bool, +) (attestationIndicies []uint64, err error) { + data := attestation.AttestantionData() targetState, err := f.getCheckpointState(target) if err != nil { - return nil + return nil, err } // Verify attestation signature. if targetState == nil { - return fmt.Errorf("target state does not exist") + return nil, fmt.Errorf("target state does not exist") } // Now we need to find the attesting indicies. - attestationIndicies, err := targetState.getAttestingIndicies(&data, attestation.AggregationBits()) + attestationIndicies, err = targetState.getAttestingIndicies( + &data, + attestation.AggregationBits(), + ) if err != nil { - return err + return nil, err } if !fromBlock { indexedAttestation := state.GetIndexedAttestation(attestation, attestationIndicies) if err != nil { - return err + return nil, err } valid, err := targetState.isValidIndexedAttestation(indexedAttestation) if err != nil { - return err + return nil, err } if !valid { - return fmt.Errorf("invalid attestation") + return nil, fmt.Errorf("invalid attestation") } } - cache.StoreAttestation(&data, attestation.AggregationBits(), attestationIndicies) - // Lastly update latest messages. - f.processAttestingIndicies(attestation, attestationIndicies) - if !fromBlock && insert { - // Add to the pool when verified. - f.operationsPool.AttestationsPool.Insert(attestation.Signature(), attestation) - } - return nil + return attestationIndicies, nil } -func (f *ForkChoiceStore) OnAggregateAndProof(aggregateAndProof *cltypes.SignedAggregateAndProof, test bool) error { - if !f.synced.Load() { - return nil - } - slot := aggregateAndProof.Message.Aggregate.AttestantionData().Slot() - selectionProof := aggregateAndProof.Message.SelectionProof - committeeIndex := aggregateAndProof.Message.Aggregate.AttestantionData().ValidatorIndex() - epoch := state.GetEpochAtSlot(f.beaconCfg, slot) - - if err := f.validateOnAttestation(aggregateAndProof.Message.Aggregate, false); err != nil { - return err - } - - target := aggregateAndProof.Message.Aggregate.AttestantionData().Target() - targetState, err := f.getCheckpointState(target) +func (f *ForkChoiceStore) verifyAttestationWithState( + s *state.CachingBeaconState, + attestation *solid.Attestation, + fromBlock bool, +) (attestationIndicies []uint64, err error) { + data := attestation.AttestantionData() if err != nil { - return nil - } - - activeIndicies := targetState.getActiveIndicies(epoch) - activeIndiciesLength := uint64(len(activeIndicies)) - - count := targetState.committeeCount(epoch, activeIndiciesLength) * f.beaconCfg.SlotsPerEpoch - start := (activeIndiciesLength * committeeIndex) / count - end := (activeIndiciesLength * (committeeIndex + 1)) / count - committeeLength := end - start - if !state.IsAggregator(f.beaconCfg, committeeLength, slot, committeeIndex, selectionProof) { - log.Warn("invalid aggregate and proof") - return fmt.Errorf("invalid aggregate and proof") + return nil, err } - return f.OnAttestation(aggregateAndProof.Message.Aggregate, false, false) -} - -type attestationJob struct { - attestation *solid.Attestation - insert bool - when time.Time -} -// scheduleAttestationForLaterProcessing scheudules an attestation for later processing -func (f *ForkChoiceStore) scheduleAttestationForLaterProcessing(attestation *solid.Attestation, insert bool) { - root, err := attestation.HashSSZ() + attestationIndicies, err = s.GetAttestingIndicies(data, attestation.AggregationBits(), true) if err != nil { - log.Error("failed to hash attestation", "err", err) - return + return nil, err } - f.attestationSet.Store(root, &attestationJob{ - attestation: attestation, - insert: insert, - when: time.Now(), - }) -} - -func (f *ForkChoiceStore) StartAttestationsRTT() { - go func() { - interval := time.NewTicker(500 * time.Millisecond) - for { - select { - case <-f.ctx.Done(): - return - case <-interval.C: - f.attestationSet.Range(func(key, value interface{}) bool { - job := value.(*attestationJob) - if time.Since(job.when) > maxAttestationJobLifetime { - f.attestationSet.Delete(key) - return true - } - if f.Slot() >= job.attestation.AttestantionData().Slot()+1 { - if err := f.OnAttestation(job.attestation, false, job.insert); err != nil { - log.Warn("failed to process attestation", "err", err) - } - f.attestationSet.Delete(key) - } - return true - }) - } + if !fromBlock { + indexedAttestation := state.GetIndexedAttestation(attestation, attestationIndicies) + if err != nil { + return nil, err + } + valid, err := state.IsValidIndexedAttestation(s, indexedAttestation) + if err != nil { + return nil, err } - }() + if !valid { + return nil, fmt.Errorf("invalid attestation") + } + } + return attestationIndicies, nil } func (f *ForkChoiceStore) setLatestMessage(index uint64, message LatestMessage) { @@ -167,7 +155,8 @@ func (f *ForkChoiceStore) setLatestMessage(index uint64, message LatestMessage) } func (f *ForkChoiceStore) getLatestMessage(validatorIndex uint64) (LatestMessage, bool) { - if validatorIndex >= uint64(len(f.latestMessages)) || f.latestMessages[validatorIndex] == (LatestMessage{}) { + if validatorIndex >= uint64(len(f.latestMessages)) || + f.latestMessages[validatorIndex] == (LatestMessage{}) { return LatestMessage{}, false } return f.latestMessages[validatorIndex], true @@ -197,7 +186,10 @@ func (f *ForkChoiceStore) setUnequivocating(validatorIndex uint64) { f.equivocatingIndicies[index] |= 1 << uint(subIndex) } -func (f *ForkChoiceStore) processAttestingIndicies(attestation *solid.Attestation, indicies []uint64) { +func (f *ForkChoiceStore) processAttestingIndicies( + attestation *solid.Attestation, + indicies []uint64, +) { beaconBlockRoot := attestation.AttestantionData().BeaconBlockRoot() target := attestation.AttestantionData().Target() @@ -215,21 +207,17 @@ func (f *ForkChoiceStore) processAttestingIndicies(attestation *solid.Attestatio } } -func (f *ForkChoiceStore) validateOnAttestation(attestation *solid.Attestation, fromBlock bool) error { +func (f *ForkChoiceStore) ValidateOnAttestation(attestation *solid.Attestation) error { target := attestation.AttestantionData().Target() - if !fromBlock { - if err := f.validateTargetEpochAgainstCurrentTime(attestation); err != nil { - return err - } - } if target.Epoch() != f.computeEpochAtSlot(attestation.AttestantionData().Slot()) { return fmt.Errorf("mismatching target epoch with slot data") } if _, has := f.forkGraph.GetHeader(target.BlockRoot()); !has { return fmt.Errorf("target root is missing") } - if blockHeader, has := f.forkGraph.GetHeader(attestation.AttestantionData().BeaconBlockRoot()); !has || blockHeader.Slot > attestation.AttestantionData().Slot() { + if blockHeader, has := f.forkGraph.GetHeader(attestation.AttestantionData().BeaconBlockRoot()); !has || + blockHeader.Slot > attestation.AttestantionData().Slot() { return fmt.Errorf("bad attestation data") } // LMD vote must be consistent with FFG vote target @@ -245,7 +233,9 @@ func (f *ForkChoiceStore) validateOnAttestation(attestation *solid.Attestation, return nil } -func (f *ForkChoiceStore) validateTargetEpochAgainstCurrentTime(attestation *solid.Attestation) error { +func (f *ForkChoiceStore) validateTargetEpochAgainstCurrentTime( + attestation *solid.Attestation, +) error { target := attestation.AttestantionData().Target() // Attestations must be from the current or previous epoch currentEpoch := f.computeEpochAtSlot(f.Slot()) diff --git a/cl/phase1/forkchoice/on_attester_slashing.go b/cl/phase1/forkchoice/on_attester_slashing.go index 4305ed58d08..af701d7f918 100644 --- a/cl/phase1/forkchoice/on_attester_slashing.go +++ b/cl/phase1/forkchoice/on_attester_slashing.go @@ -17,31 +17,31 @@ func (f *ForkChoiceStore) OnAttesterSlashing(attesterSlashing *cltypes.AttesterS return nil } f.mu.Lock() + defer f.mu.Unlock() // Check if this attestation is even slashable. attestation1 := attesterSlashing.Attestation_1 attestation2 := attesterSlashing.Attestation_2 if !cltypes.IsSlashableAttestationData(attestation1.Data, attestation2.Data) { - f.mu.Unlock() return fmt.Errorf("attestation data is not slashable") } - // Retrieve justified state - s, err := f.forkGraph.GetState(f.justifiedCheckpoint.BlockRoot(), false) - if err != nil { - f.mu.Unlock() - return err + var err error + s := f.syncedDataManager.HeadState() + if s == nil { + // Retrieve justified state + s, err = f.forkGraph.GetState(f.justifiedCheckpoint.Load().(solid.Checkpoint).BlockRoot(), false) + if err != nil { + return err + } } if s == nil { - f.mu.Unlock() - return fmt.Errorf("justified checkpoint state not accessible") + return fmt.Errorf("no state accessible") } attestation1PublicKeys, err := getIndexedAttestationPublicKeys(s, attestation1) if err != nil { - f.mu.Unlock() return err } attestation2PublicKeys, err := getIndexedAttestationPublicKeys(s, attestation2) if err != nil { - f.mu.Unlock() return err } domain1, err := s.GetDomain(s.BeaconConfig().DomainBeaconAttester, attestation1.Data.Target().Epoch()) @@ -52,7 +52,6 @@ func (f *ForkChoiceStore) OnAttesterSlashing(attesterSlashing *cltypes.AttesterS if err != nil { return fmt.Errorf("unable to get the domain: %v", err) } - f.mu.Unlock() if !test { // Verify validity of slashings (1) @@ -82,8 +81,7 @@ func (f *ForkChoiceStore) OnAttesterSlashing(attesterSlashing *cltypes.AttesterS return fmt.Errorf("invalid aggregate signature") } } - f.mu.Lock() - defer f.mu.Unlock() + var anySlashed bool for _, index := range solid.IntersectionOfSortedSets(attestation1.AttestingIndices, attestation2.AttestingIndices) { f.setUnequivocating(index) diff --git a/cl/phase1/forkchoice/on_block.go b/cl/phase1/forkchoice/on_block.go index 627e16ac26f..e06e3f464d9 100644 --- a/cl/phase1/forkchoice/on_block.go +++ b/cl/phase1/forkchoice/on_block.go @@ -1,21 +1,54 @@ package forkchoice import ( + "context" "fmt" + "sort" "time" - libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + + "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/freezer" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/fork_graph" "github.com/ledgerwatch/erigon/cl/transition/impl/eth2/statechange" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/ethutils" ) -func (f *ForkChoiceStore) OnBlock(block *cltypes.SignedBeaconBlock, newPayload, fullValidation bool) error { +const foreseenProposers = 16 + +var ErrEIP4844DataNotAvailable = fmt.Errorf("EIP-4844 blob data is not available") + +func verifyKzgCommitmentsAgainstTransactions(cfg *clparams.BeaconChainConfig, block *cltypes.Eth1Block, kzgCommitments *solid.ListSSZ[*cltypes.KZGCommitment]) error { + expectedBlobHashes := []common.Hash{} + transactions, err := types.DecodeTransactions(block.Transactions.UnderlyngReference()) + if err != nil { + return fmt.Errorf("unable to decode transactions: %v", err) + } + kzgCommitments.Range(func(index int, value *cltypes.KZGCommitment, length int) bool { + var kzg libcommon.Hash + kzg, err = utils.KzgCommitmentToVersionedHash(libcommon.Bytes48(*value)) + if err != nil { + return false + } + expectedBlobHashes = append(expectedBlobHashes, kzg) + return true + }) + if err != nil { + return err + } + + return ethutils.ValidateBlobs(block.BlobGasUsed, cfg.MaxBlobGasPerBlock, cfg.MaxBlobsPerBlock, expectedBlobHashes, &transactions) +} + +func (f *ForkChoiceStore) OnBlock(ctx context.Context, block *cltypes.SignedBeaconBlock, newPayload, fullValidation, checkDataAvaiability bool) error { f.mu.Lock() defer f.mu.Unlock() f.headHash = libcommon.Hash{} @@ -28,22 +61,55 @@ func (f *ForkChoiceStore) OnBlock(block *cltypes.SignedBeaconBlock, newPayload, return fmt.Errorf("block is too early compared to current_slot") } // Check that block is later than the finalized epoch slot (optimization to reduce calls to get_ancestor) - finalizedSlot := f.computeStartSlotAtEpoch(f.finalizedCheckpoint.Epoch()) + finalizedSlot := f.computeStartSlotAtEpoch(f.finalizedCheckpoint.Load().(solid.Checkpoint).Epoch()) if block.Block.Slot <= finalizedSlot { return nil } + // Now we find the versioned hashes + var versionedHashes []libcommon.Hash + if newPayload && f.engine != nil && block.Version() >= clparams.DenebVersion { + versionedHashes = []libcommon.Hash{} + solid.RangeErr[*cltypes.KZGCommitment](block.Block.Body.BlobKzgCommitments, func(i1 int, k *cltypes.KZGCommitment, i2 int) error { + versionedHash, err := utils.KzgCommitmentToVersionedHash(libcommon.Bytes48(*k)) + if err != nil { + return err + } + versionedHashes = append(versionedHashes, versionedHash) + return nil + }) + } + + // Check if blob data is available + if block.Version() >= clparams.DenebVersion && checkDataAvaiability { + if err := f.isDataAvailable(ctx, block.Block.Slot, blockRoot, block.Block.Body.BlobKzgCommitments); err != nil { + if err == ErrEIP4844DataNotAvailable { + return err + } + return fmt.Errorf("OnBlock: data is not available for block %x: %v", blockRoot, err) + } + } var invalidBlock bool + startEngine := time.Now() if newPayload && f.engine != nil { - if invalidBlock, err = f.engine.NewPayload(block.Block.Body.ExecutionPayload, &block.Block.ParentRoot); err != nil { + if block.Version() >= clparams.DenebVersion { + if err := verifyKzgCommitmentsAgainstTransactions(f.beaconCfg, block.Block.Body.ExecutionPayload, block.Block.Body.BlobKzgCommitments); err != nil { + return fmt.Errorf("OnBlock: failed to process kzg commitments: %v", err) + } + } + + if invalidBlock, err = f.engine.NewPayload(ctx, block.Block.Body.ExecutionPayload, &block.Block.ParentRoot, versionedHashes); err != nil { if invalidBlock { f.forkGraph.MarkHeaderAsInvalid(blockRoot) } - log.Warn("newPayload failed", "err", err) - return err + return fmt.Errorf("newPayload failed: %v", err) + } + if invalidBlock { + f.forkGraph.MarkHeaderAsInvalid(blockRoot) + return fmt.Errorf("execution client failed") } } - + log.Trace("OnBlock: engine", "elapsed", time.Since(startEngine)) lastProcessedState, status, err := f.forkGraph.AddChainSegment(block, fullValidation) if err != nil { return err @@ -63,22 +129,19 @@ func (f *ForkChoiceStore) OnBlock(block *cltypes.SignedBeaconBlock, newPayload, f.eth2Roots.Add(blockRoot, block.Block.Body.ExecutionPayload.BlockHash) } - if block.Block.Slot > f.highestSeen { - f.highestSeen = block.Block.Slot + if block.Block.Slot > f.highestSeen.Load() { + f.highestSeen.Store(block.Block.Slot) } // Remove the parent from the head set delete(f.headSet, block.Block.ParentRoot) f.headSet[blockRoot] = struct{}{} // Add proposer score boost if the block is timely - timeIntoSlot := (f.time - f.genesisTime) % lastProcessedState.BeaconConfig().SecondsPerSlot + timeIntoSlot := (f.time.Load() - f.genesisTime) % lastProcessedState.BeaconConfig().SecondsPerSlot isBeforeAttestingInterval := timeIntoSlot < f.beaconCfg.SecondsPerSlot/f.beaconCfg.IntervalsPerSlot - if f.Slot() == block.Block.Slot && isBeforeAttestingInterval && f.proposerBoostRoot == (libcommon.Hash{}) { - f.proposerBoostRoot = blockRoot + if f.Slot() == block.Block.Slot && isBeforeAttestingInterval && f.proposerBoostRoot.Load().(libcommon.Hash) == (libcommon.Hash{}) { + f.proposerBoostRoot.Store(libcommon.Hash(blockRoot)) } if lastProcessedState.Slot()%f.beaconCfg.SlotsPerEpoch == 0 { - if err := freezer.PutObjectSSZIntoFreezer("beaconState", "caplin_core", lastProcessedState.Slot(), lastProcessedState, f.recorder); err != nil { - return err - } // Update randao mixes r := solid.NewHashVector(int(f.beaconCfg.EpochsPerHistoricalVector)) lastProcessedState.RandaoMixes().CopyTo(r) @@ -100,6 +163,7 @@ func (f *ForkChoiceStore) OnBlock(block *cltypes.SignedBeaconBlock, newPayload, currentJustifiedCheckpoint: lastProcessedState.CurrentJustifiedCheckpoint().Copy(), previousJustifiedCheckpoint: lastProcessedState.PreviousJustifiedCheckpoint().Copy(), }) + f.totalActiveBalances.Add(blockRoot, lastProcessedState.GetTotalActiveBalance()) // Update checkpoints f.updateCheckpoints(lastProcessedState.CurrentJustifiedCheckpoint().Copy(), lastProcessedState.FinalizedCheckpoint().Copy()) @@ -121,6 +185,16 @@ func (f *ForkChoiceStore) OnBlock(block *cltypes.SignedBeaconBlock, newPayload, lastProcessedState.SetCurrentJustifiedCheckpoint(currentJustifiedCheckpoint) lastProcessedState.SetFinalizedCheckpoint(finalizedCheckpoint) lastProcessedState.SetJustificationBits(justificationBits) + // Load next proposer indicies for the parent root + idxs := make([]uint64, 0, foreseenProposers) + for i := lastProcessedState.Slot() + 1; i < f.beaconCfg.SlotsPerEpoch; i++ { + idx, err := lastProcessedState.GetBeaconProposerIndexForSlot(i) + if err != nil { + return err + } + idxs = append(idxs, idx) + } + f.nextBlockProposers.Add(blockRoot, idxs) // If the block is from a prior epoch, apply the realized values blockEpoch := f.computeEpochAtSlot(block.Block.Slot) currentEpoch := f.computeEpochAtSlot(f.Slot()) @@ -130,3 +204,43 @@ func (f *ForkChoiceStore) OnBlock(block *cltypes.SignedBeaconBlock, newPayload, log.Debug("OnBlock", "elapsed", time.Since(start)) return nil } + +func (f *ForkChoiceStore) isDataAvailable(ctx context.Context, slot uint64, blockRoot libcommon.Hash, blobKzgCommitments *solid.ListSSZ[*cltypes.KZGCommitment]) error { + if f.blobStorage == nil { + return nil + } + + commitmentsLeftToCheck := map[libcommon.Bytes48]struct{}{} + blobKzgCommitments.Range(func(index int, value *cltypes.KZGCommitment, length int) bool { + commitmentsLeftToCheck[libcommon.Bytes48(*value)] = struct{}{} + return true + }) + // Blobs are preverified so we skip verification, we just need to check if commitments checks out. + sidecars, foundOnDisk, err := f.blobStorage.ReadBlobSidecars(ctx, slot, blockRoot) + if err != nil { + return fmt.Errorf("cannot check data avaiability. failed to read blob sidecars: %v", err) + } + if !foundOnDisk { + sidecars = f.hotSidecars[blockRoot] // take it from memory + } + + if blobKzgCommitments.Len() != len(sidecars) { + return ErrEIP4844DataNotAvailable // This should then schedule the block for reprocessing + } + for _, sidecar := range sidecars { + delete(commitmentsLeftToCheck, sidecar.KzgCommitment) + } + if len(commitmentsLeftToCheck) > 0 { + return ErrEIP4844DataNotAvailable // This should then schedule the block for reprocessing + } + if !foundOnDisk { + // If we didn't find the sidecars on disk, we should write them to disk now + sort.Slice(sidecars, func(i, j int) bool { + return sidecars[i].Index < sidecars[j].Index + }) + if err := f.blobStorage.WriteBlobSidecars(ctx, blockRoot, sidecars); err != nil { + return fmt.Errorf("failed to write blob sidecars: %v", err) + } + } + return nil +} diff --git a/cl/phase1/forkchoice/on_operations.go b/cl/phase1/forkchoice/on_operations.go deleted file mode 100644 index 74399523134..00000000000 --- a/cl/phase1/forkchoice/on_operations.go +++ /dev/null @@ -1,225 +0,0 @@ -package forkchoice - -import ( - "bytes" - "errors" - "fmt" - - "github.com/Giulio2002/bls" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/fork" - "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/erigon/cl/pool" - "github.com/ledgerwatch/erigon/cl/utils" -) - -// NOTE: This file implements non-official handlers for other types of iterations. what it does is,using the forkchoices -// and verify external operations and eventually push them in the operations pool. - -// OnVoluntaryExit is a non-official handler for voluntary exit operations. it pushes the voluntary exit in the pool. -func (f *ForkChoiceStore) OnVoluntaryExit(signedVoluntaryExit *cltypes.SignedVoluntaryExit, test bool) error { - voluntaryExit := signedVoluntaryExit.VoluntaryExit - if f.operationsPool.VoluntaryExistsPool.Has(voluntaryExit.ValidatorIndex) { - return nil - } - f.mu.Lock() - - headHash, _, err := f.getHead() - if err != nil { - f.mu.Unlock() - return err - } - s, err := f.forkGraph.GetState(headHash, false) - if err != nil { - f.mu.Unlock() - return err - } - - val, err := s.ValidatorForValidatorIndex(int(voluntaryExit.ValidatorIndex)) - if err != nil { - f.mu.Unlock() - return err - } - - if val.ExitEpoch() != f.beaconCfg.FarFutureEpoch { - f.mu.Unlock() - return nil - } - - pk := val.PublicKey() - f.mu.Unlock() - - domainType := f.beaconCfg.DomainVoluntaryExit - var domain []byte - - if s.Version() < clparams.DenebVersion { - domain, err = s.GetDomain(domainType, voluntaryExit.Epoch) - } else if s.Version() >= clparams.DenebVersion { - domain, err = fork.ComputeDomain(domainType[:], utils.Uint32ToBytes4(s.BeaconConfig().CapellaForkVersion), s.GenesisValidatorsRoot()) - } - if err != nil { - return err - } - - signingRoot, err := fork.ComputeSigningRoot(voluntaryExit, domain) - if err != nil { - return err - } - if !test { - valid, err := bls.Verify(signedVoluntaryExit.Signature[:], signingRoot[:], pk[:]) - if err != nil { - return err - } - if !valid { - return errors.New("ProcessVoluntaryExit: BLS verification failed") - } - } - f.operationsPool.VoluntaryExistsPool.Insert(voluntaryExit.ValidatorIndex, signedVoluntaryExit) - return nil -} - -// OnProposerSlashing is a non-official handler for proposer slashing operations. it pushes the proposer slashing in the pool. -func (f *ForkChoiceStore) OnProposerSlashing(proposerSlashing *cltypes.ProposerSlashing, test bool) (err error) { - if f.operationsPool.ProposerSlashingsPool.Has(pool.ComputeKeyForProposerSlashing(proposerSlashing)) { - return nil - } - h1 := proposerSlashing.Header1.Header - h2 := proposerSlashing.Header2.Header - - if h1.Slot != h2.Slot { - return fmt.Errorf("non-matching slots on proposer slashing: %d != %d", h1.Slot, h2.Slot) - } - - if h1.ProposerIndex != h2.ProposerIndex { - return fmt.Errorf("non-matching proposer indices proposer slashing: %d != %d", h1.ProposerIndex, h2.ProposerIndex) - } - - if *h1 == *h2 { - return fmt.Errorf("proposee slashing headers are the same") - } - - // Take lock as we interact with state. - f.mu.Lock() - headHash, _, err := f.getHead() - if err != nil { - f.mu.Unlock() - return err - } - s, err := f.forkGraph.GetState(headHash, false) - if err != nil { - f.mu.Unlock() - return err - } - proposer, err := s.ValidatorForValidatorIndex(int(h1.ProposerIndex)) - if err != nil { - f.mu.Unlock() - return fmt.Errorf("unable to retrieve state: %v", err) - } - if !proposer.IsSlashable(state.Epoch(s)) { - f.mu.Unlock() - return fmt.Errorf("proposer is not slashable: %v", proposer) - } - domain1, err := s.GetDomain(s.BeaconConfig().DomainBeaconProposer, state.GetEpochAtSlot(s.BeaconConfig(), h1.Slot)) - if err != nil { - return fmt.Errorf("unable to get domain: %v", err) - } - domain2, err := s.GetDomain(s.BeaconConfig().DomainBeaconProposer, state.GetEpochAtSlot(s.BeaconConfig(), h2.Slot)) - if err != nil { - return fmt.Errorf("unable to get domain: %v", err) - } - pk := proposer.PublicKey() - f.mu.Unlock() - if test { - f.operationsPool.ProposerSlashingsPool.Insert(pool.ComputeKeyForProposerSlashing(proposerSlashing), proposerSlashing) - return nil - } - signingRoot, err := fork.ComputeSigningRoot(h1, domain1) - if err != nil { - return fmt.Errorf("unable to compute signing root: %v", err) - } - valid, err := bls.Verify(proposerSlashing.Header1.Signature[:], signingRoot[:], pk[:]) - if err != nil { - return fmt.Errorf("unable to verify signature: %v", err) - } - if !valid { - return fmt.Errorf("invalid signature: signature %v, root %v, pubkey %v", proposerSlashing.Header1.Signature[:], signingRoot[:], pk) - } - signingRoot, err = fork.ComputeSigningRoot(h2, domain2) - if err != nil { - return fmt.Errorf("unable to compute signing root: %v", err) - } - - valid, err = bls.Verify(proposerSlashing.Header2.Signature[:], signingRoot[:], pk[:]) - if err != nil { - return fmt.Errorf("unable to verify signature: %v", err) - } - if !valid { - return fmt.Errorf("invalid signature: signature %v, root %v, pubkey %v", proposerSlashing.Header2.Signature[:], signingRoot[:], pk) - } - f.operationsPool.ProposerSlashingsPool.Insert(pool.ComputeKeyForProposerSlashing(proposerSlashing), proposerSlashing) - - return nil -} - -func (f *ForkChoiceStore) OnBlsToExecutionChange(signedChange *cltypes.SignedBLSToExecutionChange, test bool) error { - if f.operationsPool.BLSToExecutionChangesPool.Has(signedChange.Signature) { - return nil - } - change := signedChange.Message - - // Take lock as we interact with state. - f.mu.Lock() - - headHash, _, err := f.getHead() - if err != nil { - f.mu.Unlock() - return err - } - s, err := f.forkGraph.GetState(headHash, false) - if err != nil { - f.mu.Unlock() - return err - } - validator, err := s.ValidatorForValidatorIndex(int(change.ValidatorIndex)) - if err != nil { - f.mu.Unlock() - return fmt.Errorf("unable to retrieve state: %v", err) - } - wc := validator.WithdrawalCredentials() - - if wc[0] != f.beaconCfg.BLSWithdrawalPrefixByte { - f.mu.Unlock() - return fmt.Errorf("invalid withdrawal credentials prefix") - } - genesisValidatorRoot := s.GenesisValidatorsRoot() - f.mu.Unlock() - // Perform full validation if requested. - if !test { - // Check the validator's withdrawal credentials against the provided message. - hashedFrom := utils.Sha256(change.From[:]) - if !bytes.Equal(hashedFrom[1:], wc[1:]) { - return fmt.Errorf("invalid withdrawal credentials") - } - - // Compute the signing domain and verify the message signature. - domain, err := fork.ComputeDomain(f.beaconCfg.DomainBLSToExecutionChange[:], utils.Uint32ToBytes4(f.beaconCfg.GenesisForkVersion), genesisValidatorRoot) - if err != nil { - return err - } - signedRoot, err := fork.ComputeSigningRoot(change, domain) - if err != nil { - return err - } - valid, err := bls.Verify(signedChange.Signature[:], signedRoot[:], change.From[:]) - if err != nil { - return err - } - if !valid { - return fmt.Errorf("invalid signature") - } - } - - f.operationsPool.BLSToExecutionChangesPool.Insert(signedChange.Signature, signedChange) - return nil -} diff --git a/cl/phase1/forkchoice/on_tick.go b/cl/phase1/forkchoice/on_tick.go index 6020e979900..ea11fc22c2d 100644 --- a/cl/phase1/forkchoice/on_tick.go +++ b/cl/phase1/forkchoice/on_tick.go @@ -1,11 +1,12 @@ package forkchoice -import libcommon "github.com/ledgerwatch/erigon-lib/common" +import ( + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" +) // OnTick executes on_tick operation for forkchoice. func (f *ForkChoiceStore) OnTick(time uint64) { - f.mu.Lock() - defer f.mu.Unlock() tickSlot := (time - f.genesisTime) / f.beaconCfg.SecondsPerSlot for f.Slot() < tickSlot { previousTime := f.genesisTime + (f.Slot()+1)*f.beaconCfg.SecondsPerSlot @@ -17,15 +18,17 @@ func (f *ForkChoiceStore) OnTick(time uint64) { // onTickPerSlot handles ticks func (f *ForkChoiceStore) onTickPerSlot(time uint64) { previousSlot := f.Slot() - f.time = time + f.time.Store(time) currentSlot := f.Slot() if currentSlot <= previousSlot { return } + f.mu.Lock() f.headHash = libcommon.Hash{} + f.mu.Unlock() // If this is a new slot, reset store.proposer_boost_root - f.proposerBoostRoot = libcommon.Hash{} + f.proposerBoostRoot.Store(libcommon.Hash{}) if f.computeSlotsSinceEpochStart(currentSlot) == 0 { - f.updateCheckpoints(f.unrealizedJustifiedCheckpoint.Copy(), f.unrealizedFinalizedCheckpoint.Copy()) + f.updateCheckpoints(f.unrealizedJustifiedCheckpoint.Load().(solid.Checkpoint).Copy(), f.unrealizedFinalizedCheckpoint.Load().(solid.Checkpoint).Copy()) } } diff --git a/cl/phase1/forkchoice/utils.go b/cl/phase1/forkchoice/utils.go index f13aee3dac4..6513450c762 100644 --- a/cl/phase1/forkchoice/utils.go +++ b/cl/phase1/forkchoice/utils.go @@ -13,48 +13,50 @@ import ( // Slot calculates the current slot number using the time and genesis slot. func (f *ForkChoiceStore) Slot() uint64 { - return f.beaconCfg.GenesisSlot + ((f.time - f.genesisTime) / f.beaconCfg.SecondsPerSlot) + return f.beaconCfg.GenesisSlot + ((f.time.Load() - f.genesisTime) / f.beaconCfg.SecondsPerSlot) } // updateCheckpoints updates the justified and finalized checkpoints if new checkpoints have higher epochs. func (f *ForkChoiceStore) updateCheckpoints(justifiedCheckpoint, finalizedCheckpoint solid.Checkpoint) { - if justifiedCheckpoint.Epoch() > f.justifiedCheckpoint.Epoch() { - f.justifiedCheckpoint = justifiedCheckpoint + if justifiedCheckpoint.Epoch() > f.justifiedCheckpoint.Load().(solid.Checkpoint).Epoch() { + f.justifiedCheckpoint.Store(justifiedCheckpoint) } - if finalizedCheckpoint.Epoch() > f.finalizedCheckpoint.Epoch() { + if finalizedCheckpoint.Epoch() > f.finalizedCheckpoint.Load().(solid.Checkpoint).Epoch() { + f.emitters.Publish("finalized_checkpoint", finalizedCheckpoint) f.onNewFinalized(finalizedCheckpoint) - f.finalizedCheckpoint = finalizedCheckpoint - + f.finalizedCheckpoint.Store(finalizedCheckpoint) } } func (f *ForkChoiceStore) onNewFinalized(newFinalized solid.Checkpoint) { - // get rid of checkpoint states - for k := range f.checkpointStates { - checkpoint := solid.Checkpoint(k) - if checkpoint.Epoch() <= newFinalized.Epoch() { - delete(f.checkpointStates, k) - continue + f.checkpointStates.Range(func(key, value any) bool { + checkpoint := key.(checkpointComparable) + + if solid.Checkpoint(checkpoint).Epoch() < newFinalized.Epoch() { + f.checkpointStates.Delete(key) } - } + return true + }) + // get rid of children - for k, children := range f.childrens { - if children.parentSlot <= newFinalized.Epoch()*f.beaconCfg.SlotsPerEpoch { - delete(f.childrens, k) - delete(f.headSet, k) - continue + f.childrens.Range(func(k, v any) bool { + if v.(childrens).parentSlot <= newFinalized.Epoch()*f.beaconCfg.SlotsPerEpoch { + f.childrens.Delete(k) + delete(f.headSet, k.(libcommon.Hash)) } - } + return true + }) + f.forkGraph.Prune(newFinalized.Epoch() * f.beaconCfg.SlotsPerEpoch) } // updateCheckpoints updates the justified and finalized checkpoints if new checkpoints have higher epochs. func (f *ForkChoiceStore) updateUnrealizedCheckpoints(justifiedCheckpoint, finalizedCheckpoint solid.Checkpoint) { - if justifiedCheckpoint.Epoch() > f.unrealizedJustifiedCheckpoint.Epoch() { - f.unrealizedJustifiedCheckpoint = justifiedCheckpoint + if justifiedCheckpoint.Epoch() > f.unrealizedJustifiedCheckpoint.Load().(solid.Checkpoint).Epoch() { + f.unrealizedJustifiedCheckpoint.Store(justifiedCheckpoint) } - if finalizedCheckpoint.Epoch() > f.unrealizedFinalizedCheckpoint.Epoch() { - f.unrealizedFinalizedCheckpoint = finalizedCheckpoint + if finalizedCheckpoint.Epoch() > f.unrealizedFinalizedCheckpoint.Load().(solid.Checkpoint).Epoch() { + f.unrealizedFinalizedCheckpoint.Store(finalizedCheckpoint) } } @@ -63,6 +65,10 @@ func (f *ForkChoiceStore) computeEpochAtSlot(slot uint64) uint64 { return slot / f.beaconCfg.SlotsPerEpoch } +func (f *ForkChoiceStore) computeSyncPeriod(epoch uint64) uint64 { + return epoch / f.beaconCfg.EpochsPerSyncCommitteePeriod +} + // computeStartSlotAtEpoch calculates the starting slot of a given epoch. func (f *ForkChoiceStore) computeStartSlotAtEpoch(epoch uint64) uint64 { return epoch * f.beaconCfg.SlotsPerEpoch @@ -92,9 +98,10 @@ func (f *ForkChoiceStore) Ancestor(root libcommon.Hash, slot uint64) libcommon.H // getCheckpointState computes and caches checkpoint states. func (f *ForkChoiceStore) getCheckpointState(checkpoint solid.Checkpoint) (*checkpointState, error) { // check if it can be found in cache. - if state, ok := f.checkpointStates[checkpointComparable(checkpoint)]; ok { - return state, nil + if state, ok := f.checkpointStates.Load(checkpointComparable(checkpoint)); ok { + return state.(*checkpointState), nil } + // If it is not in cache compute it and then put in cache. baseState, err := f.forkGraph.GetState(checkpoint.BlockRoot(), true) if err != nil { @@ -121,6 +128,6 @@ func (f *ForkChoiceStore) getCheckpointState(checkpoint solid.Checkpoint) (*chec checkpointState := newCheckpointState(f.beaconCfg, f.anchorPublicKeys, validators, mixes, baseState.GenesisValidatorsRoot(), baseState.Fork(), baseState.GetTotalActiveBalance(), state.Epoch(baseState.BeaconState)) // Cache in memory what we are left with. - f.checkpointStates[checkpointComparable(checkpoint)] = checkpointState + f.checkpointStates.Store(checkpointComparable(checkpoint), checkpointState) return checkpointState, nil } diff --git a/cl/phase1/main.go b/cl/phase1/main.go deleted file mode 100644 index 10f4c7070f6..00000000000 --- a/cl/phase1/main.go +++ /dev/null @@ -1,215 +0,0 @@ -package main - -func main() {} - -// import ( -// "context" -// "errors" -// "fmt" -// "os" - -// "github.com/ledgerwatch/erigon-lib/cl/phase1/core" -// "github.com/ledgerwatch/erigon-lib/cl/phase1/core/state" -// "github.com/ledgerwatch/erigon-lib/cl/phase1/execution_client" -// "github.com/ledgerwatch/erigon-lib/cl/phase1/forkchoice" -// network2 "github.com/ledgerwatch/erigon-lib/cl/phase1/network" -// stages2 "github.com/ledgerwatch/erigon-lib/cl/phase1/stages" -// rawdb2 "github.com/ledgerwatch/erigon-lib/cl/phase4/rawdb" - -// sentinelrpc "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" -// "github.com/ledgerwatch/erigon-lib/kv" -// "github.com/ledgerwatch/erigon-lib/kv/mdbx" -// "github.com/ledgerwatch/erigon-lib/cl/clparams" -// "github.com/ledgerwatch/erigon-lib/cl/clparams/initial_state" -// "github.com/ledgerwatch/erigon-lib/cl/cltypes" -// "github.com/ledgerwatch/erigon-lib/cl/fork" -// "github.com/ledgerwatch/erigon-lib/cl/rpc" -// lcCli "github.com/ledgerwatch/erigon/cmd/sentinel/cli" - -// "github.com/ledgerwatch/erigon/cmd/sentinel/cli/flags" -// "github.com/ledgerwatch/erigon/cmd/sentinel/sentinel" -// "github.com/ledgerwatch/erigon/cmd/sentinel/sentinel/service" -// sentinelapp "github.com/ledgerwatch/erigon/turbo/app" -// "github.com/ledgerwatch/erigon/turbo/debug" -// "github.com/ledgerwatch/log/v3" -// "github.com/urfave/cli/v2" -// ) - -// func main() { -// app := sentinelapp.MakeApp("erigon-cl", runConsensusLayerNode, flags.CLDefaultFlags) -// if err := app.Run(os.Args); err != nil { -// _, printErr := fmt.Fprintln(os.Stderr, err) -// if printErr != nil { -// log.Warn("Fprintln error", "err", printErr) -// } -// os.Exit(1) -// } -// } - -// func runConsensusLayerNode(cliCtx *cli.Context) error { -// var logger log.Logger -// var err error -// if logger, err = debug.Setup(cliCtx, true /* root logger */); err != nil { -// return err -// } - -// ctx := context.Background() -// cfg, _ := lcCli.SetupConsensusClientCfg(cliCtx) -// var db kv.RwDB -// if cfg.Chaindata == "" { -// db, err = mdbx.NewTemporaryMdbx() -// } else { -// db, err = mdbx.Open(cfg.Chaindata, log.Root(), false) -// } -// if err != nil { -// log.Error("Error opening database", "err", err) -// } -// defer db.Close() -// if err := checkAndStoreBeaconDataConfigWithDB(ctx, db, cfg.BeaconDataCfg); err != nil { -// log.Error("Could load beacon data configuration", "err", err) -// return err -// } - -// tmpdir := "/tmp" -// executionClient, err := execution_client.NewExecutionClient(ctx, "127.0.0.1:8989") -// if err != nil { -// log.Warn("Could not connect to execution client", "err", err) -// return err -// } - -// if cfg.TransitionChain { -// state, err := initial_state.GetGenesisState(cfg.NetworkType) -// if err != nil { -// return err -// } -// // Execute from genesis to whatever we have. -// return stages2.SpawnStageBeaconState(stages2.StageBeaconState(db, cfg.BeaconCfg, state, executionClient), nil, ctx) -// } - -// // Fetch the checkpoint state. -// cpState, err := getCheckpointState(ctx, db, cfg.BeaconCfg, cfg.GenesisCfg, cfg.CheckpointUri) -// if err != nil { -// log.Error("Could not get checkpoint", "err", err) -// return err -// } - -// log.Info("Starting sync from checkpoint.") -// // Start the sentinel service -// log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(cfg.LogLvl), log.StderrHandler)) -// log.Info("[Sentinel] running sentinel with configuration", "cfg", cfg) -// s, err := startSentinel(cliCtx, *cfg, cpState) -// if err != nil { -// log.Error("Could not start sentinel service", "err", err) -// } - -// genesisCfg := cfg.GenesisCfg -// beaconConfig := cfg.BeaconCfg -// beaconRpc := rpc.NewBeaconRpcP2P(ctx, s, beaconConfig, genesisCfg) -// downloader := network2.NewForwardBeaconDownloader(ctx, beaconRpc) -// bdownloader := network2.NewBackwardBeaconDownloader(ctx, beaconRpc) - -// forkChoice, err := forkchoice.NewForkChoiceStore(cpState, nil, true) -// if err != nil { -// log.Error("Could not start forkchoice service", "err", err) -// return nil -// } -// gossipManager := network2.NewGossipReceiver(ctx, s, forkChoice, beaconConfig, genesisCfg) -// stageloop, err := stages2.NewConsensusStagedSync(ctx, db, downloader, bdownloader, genesisCfg, beaconConfig, cpState, -// tmpdir, executionClient, cfg.BeaconDataCfg, gossipManager, forkChoice, logger) -// if err != nil { -// return err -// } -// Loop: -// for { -// if err := stageloop.Run(db, nil, false); err != nil { -// return err -// } -// select { -// case <-ctx.Done(): -// break Loop -// default: -// } -// } -// return nil -// } - -// func startSentinel(cliCtx *cli.Context, cfg lcCli.ConsensusClientCliCfg, beaconState *state.BeaconState) (sentinelrpc.SentinelClient, error) { -// forkDigest, err := fork.ComputeForkDigest(cfg.BeaconCfg, cfg.GenesisCfg) -// if err != nil { -// return nil, err -// } -// s, err := service.StartSentinelService(&sentinel.SentinelConfig{ -// IpAddr: cfg.Addr, -// Port: int(cfg.Port), -// TCPPort: cfg.ServerTcpPort, -// GenesisConfig: cfg.GenesisCfg, -// NetworkConfig: cfg.NetworkCfg, -// BeaconConfig: cfg.BeaconCfg, -// NoDiscovery: cfg.NoDiscovery, -// }, nil, &service.ServerConfig{Network: cfg.ServerProtocol, Addr: cfg.ServerAddr}, nil, &cltypes.Status{ -// ForkDigest: forkDigest, -// FinalizedRoot: beaconState.FinalizedCheckpoint().BlockRoot(), -// FinalizedEpoch: beaconState.FinalizedCheckpoint().Epoch(), -// HeadSlot: beaconState.FinalizedCheckpoint().Epoch() * cfg.BeaconCfg.SlotsPerEpoch, -// HeadRoot: beaconState.FinalizedCheckpoint().BlockRoot(), -// }) -// if err != nil { -// log.Error("Could not start sentinel", "err", err) -// return nil, err -// } -// log.Info("Sentinel started", "addr", cfg.ServerAddr) -// return s, nil -// } - -// func getCheckpointState(ctx context.Context, db kv.RwDB, beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig, uri string) (*state.BeaconState, error) { -// state, err := core.RetrieveBeaconState(ctx, beaconConfig, genesisConfig, uri) -// if err != nil { -// log.Error("[Checkpoint Sync] Failed", "reason", err) -// return nil, err -// } -// tx, err := db.BeginRw(ctx) -// if err != nil { -// log.Error("[DB] Failed", "reason", err) -// return nil, err -// } -// defer tx.Rollback() - -// if err := rawdb2.WriteBeaconState(tx, state); err != nil { -// log.Error("[DB] Failed", "reason", err) -// return nil, err -// } -// log.Info("Checkpoint sync successful: hurray!") -// return state, tx.Commit() -// } - -// func checkAndStoreBeaconDataConfigWithDB(ctx context.Context, db kv.RwDB, provided *rawdb2.BeaconDataConfig) error { -// tx, err := db.BeginRw(ctx) -// if err != nil { -// log.Error("[DB] Failed", "reason", err) -// return err -// } -// defer tx.Rollback() -// if provided == nil { -// return errors.New("no valid beacon data config found") -// } -// stored, err := rawdb2.ReadBeaconDataConfig(tx) -// if err != nil { -// return err -// } -// if stored != nil { -// if err := checkBeaconDataConfig(provided, stored); err != nil { -// return err -// } -// } -// return rawdb2.WriteBeaconDataConfig(tx, provided) -// } - -// func checkBeaconDataConfig(provided *rawdb2.BeaconDataConfig, stored *rawdb2.BeaconDataConfig) error { -// if provided.BackFillingAmount != stored.BackFillingAmount { -// return fmt.Errorf("mismatching backfilling amount, provided %d, stored %d", provided.BackFillingAmount, stored.BackFillingAmount) -// } -// if provided.SlotPerRestorePoint != stored.SlotPerRestorePoint { -// return fmt.Errorf("mismatching sprp, provided %d, stored %d", provided.SlotPerRestorePoint, stored.SlotPerRestorePoint) -// } -// return nil -// } diff --git a/cl/phase1/network/backward_beacon_downloader.go b/cl/phase1/network/backward_beacon_downloader.go index 08cf7aa80f6..ec687751811 100644 --- a/cl/phase1/network/backward_beacon_downloader.go +++ b/cl/phase1/network/backward_beacon_downloader.go @@ -5,13 +5,16 @@ import ( "sync/atomic" "time" - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/log/v3" "golang.org/x/net/context" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/persistence/base_encoding" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/phase1/execution_client" "github.com/ledgerwatch/erigon/cl/rpc" ) @@ -20,11 +23,12 @@ type OnNewBlock func(blk *cltypes.SignedBeaconBlock) (finished bool, err error) type BackwardBeaconDownloader struct { ctx context.Context - slotToDownload uint64 + slotToDownload atomic.Uint64 expectedRoot libcommon.Hash rpc *rpc.BeaconRpcP2P + engine execution_client.ExecutionEngine onNewBlock OnNewBlock - finished bool + finished atomic.Bool reqInterval *time.Ticker db kv.RwDB neverSkip bool @@ -32,13 +36,14 @@ type BackwardBeaconDownloader struct { mu sync.Mutex } -func NewBackwardBeaconDownloader(ctx context.Context, rpc *rpc.BeaconRpcP2P, db kv.RwDB) *BackwardBeaconDownloader { +func NewBackwardBeaconDownloader(ctx context.Context, rpc *rpc.BeaconRpcP2P, engine execution_client.ExecutionEngine, db kv.RwDB) *BackwardBeaconDownloader { return &BackwardBeaconDownloader{ ctx: ctx, rpc: rpc, db: db, reqInterval: time.NewTicker(300 * time.Millisecond), neverSkip: true, + engine: engine, } } @@ -51,9 +56,7 @@ func (b *BackwardBeaconDownloader) SetThrottle(throttle time.Duration) { // SetSlotToDownload sets slot to download. func (b *BackwardBeaconDownloader) SetSlotToDownload(slot uint64) { - b.mu.Lock() - defer b.mu.Unlock() - b.slotToDownload = slot + b.slotToDownload.Store(slot) } // SetExpectedRoot sets the expected root we expect to download. @@ -77,19 +80,17 @@ func (b *BackwardBeaconDownloader) SetOnNewBlock(onNewBlock OnNewBlock) { b.onNewBlock = onNewBlock } -// HighestProcessedRoot returns the highest processed block root so far. -func (b *BackwardBeaconDownloader) Finished() bool { - b.mu.Lock() - defer b.mu.Unlock() - return b.finished +func (b *BackwardBeaconDownloader) RPC() *rpc.BeaconRpcP2P { + return b.rpc } +// HighestProcessedRoot returns the highest processed block root so far. +func (b *BackwardBeaconDownloader) Finished() bool { return b.finished.Load() } + // Progress current progress. func (b *BackwardBeaconDownloader) Progress() uint64 { // Skip if it is not downloading or limit was reached - b.mu.Lock() - defer b.mu.Unlock() - return b.slotToDownload + return b.slotToDownload.Load() } // Peers returns the current number of peers connected to the BackwardBeaconDownloader. @@ -103,10 +104,10 @@ func (b *BackwardBeaconDownloader) Peers() (uint64, error) { // If the callback returns an error or signals that the download should be finished, the function will exit. // If the block's root hash does not match the expected root hash, it will be rejected and the function will continue to the next block. func (b *BackwardBeaconDownloader) RequestMore(ctx context.Context) error { - count := uint64(32) - start := b.slotToDownload - count + 1 + count := uint64(64) + start := b.slotToDownload.Load() - count + 1 // Overflow? round to 0. - if start > b.slotToDownload { + if start > b.slotToDownload.Load() { start = 0 } var atomicResp atomic.Value @@ -145,7 +146,7 @@ Loop: responses := atomicResp.Load().([]*cltypes.SignedBeaconBlock) // Import new blocks, order is forward so reverse the whole packet for i := len(responses) - 1; i >= 0; i-- { - if b.finished { + if b.finished.Load() { return nil } segment := responses[i] @@ -157,20 +158,21 @@ Loop: } // No? Reject. if blockRoot != b.expectedRoot { - log.Debug("Gotten unexpected root", "got", blockRoot, "expected", b.expectedRoot) + log.Debug("Gotten unexpected root", "got", libcommon.Hash(blockRoot), "expected", b.expectedRoot) continue } // Yes? then go for the callback. - b.finished, err = b.onNewBlock(segment) + finished, err := b.onNewBlock(segment) + b.finished.Store(finished) if err != nil { log.Warn("Found error while processing packet", "err", err) continue } // set expected root to the segment parent root b.expectedRoot = segment.Block.ParentRoot - b.slotToDownload = segment.Block.Slot - 1 // update slot (might be inexact but whatever) + b.slotToDownload.Store(segment.Block.Slot - 1) // update slot (might be inexact but whatever) } - if b.neverSkip { + if !b.neverSkip { return nil } // try skipping if the next slot is in db @@ -179,7 +181,6 @@ Loop: return err } defer tx.Rollback() - // it will stop if we end finding a gap or if we reach the maxIterations for { // check if the expected root is in db @@ -187,10 +188,27 @@ Loop: if err != nil { return err } + if slot == nil || *slot == 0 { break } - b.slotToDownload = *slot - 1 + + if b.engine != nil && b.engine.SupportInsertion() { + blockHash, err := beacon_indicies.ReadExecutionBlockHash(tx, b.expectedRoot) + if err != nil { + return err + } + if blockHash != (libcommon.Hash{}) { + has, err := b.engine.HasBlock(ctx, blockHash) + if err != nil { + return err + } + if !has { + break + } + } + } + b.slotToDownload.Store(*slot - 1) if err := beacon_indicies.MarkRootCanonical(b.ctx, tx, *slot, b.expectedRoot); err != nil { return err } @@ -198,6 +216,17 @@ Loop: if err != nil { return err } + // Some cleaning of possible ugly restarts + newSlotToDownload, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, b.expectedRoot) + if err != nil { + return err + } + if newSlotToDownload == nil || *newSlotToDownload == 0 { + continue + } + for i := *newSlotToDownload + 1; i < *slot; i++ { + tx.Delete(kv.CanonicalBlockRoots, base_encoding.Encode64ToBytes4(i)) + } } return tx.Commit() diff --git a/cl/phase1/network/beacon_downloader.go b/cl/phase1/network/beacon_downloader.go index af673d0f084..0edd6ec4b63 100644 --- a/cl/phase1/network/beacon_downloader.go +++ b/cl/phase1/network/beacon_downloader.go @@ -2,6 +2,7 @@ package network import ( "sync" + "sync/atomic" "time" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -66,21 +67,62 @@ func (f *ForwardBeaconDownloader) HighestProcessedRoot() libcommon.Hash { return f.highestBlockRootProcessed } +type peerAndBlocks struct { + peerId string + blocks []*cltypes.SignedBeaconBlock +} + func (f *ForwardBeaconDownloader) RequestMore(ctx context.Context) { - count := uint64(16) // dont need many - responses, pid, err := f.rpc.SendBeaconBlocksByRangeReq(ctx, f.highestSlotProcessed+1, count) - if err != nil { - f.rpc.BanPeer(pid) - // Wait a bit in this case (we do not need to be super performant here). - time.Sleep(time.Second) - return + count := uint64(16) + var atomicResp atomic.Value + atomicResp.Store(peerAndBlocks{}) + reqInterval := time.NewTicker(300 * time.Millisecond) + defer reqInterval.Stop() +Loop: + for { + select { + case <-reqInterval.C: + go func() { + if len(atomicResp.Load().(peerAndBlocks).blocks) > 0 { + return + } + // this is so we do not get stuck on a side-fork + responses, peerId, err := f.rpc.SendBeaconBlocksByRangeReq(ctx, f.highestSlotProcessed-2, count) + + if err != nil { + return + } + if responses == nil { + return + } + if len(responses) == 0 { + f.rpc.BanPeer(peerId) + return + } + if len(atomicResp.Load().(peerAndBlocks).blocks) > 0 { + return + } + atomicResp.Store(peerAndBlocks{peerId, responses}) + }() + case <-ctx.Done(): + return + default: + if len(atomicResp.Load().(peerAndBlocks).blocks) > 0 { + break Loop + } + time.Sleep(10 * time.Millisecond) + } } + f.mu.Lock() defer f.mu.Unlock() var highestBlockRootProcessed libcommon.Hash var highestSlotProcessed uint64 - if highestSlotProcessed, highestBlockRootProcessed, err = f.process(f.highestSlotProcessed, f.highestBlockRootProcessed, responses); err != nil { + var err error + blocks := atomicResp.Load().(peerAndBlocks).blocks + pid := atomicResp.Load().(peerAndBlocks).peerId + if highestSlotProcessed, highestBlockRootProcessed, err = f.process(f.highestSlotProcessed, f.highestBlockRootProcessed, blocks); err != nil { f.rpc.BanPeer(pid) return } diff --git a/cl/phase1/network/blobs.go b/cl/phase1/network/blobs.go new file mode 100644 index 00000000000..3ea629d6b3e --- /dev/null +++ b/cl/phase1/network/blobs.go @@ -0,0 +1,112 @@ +package network + +import ( + "sync/atomic" + "time" + + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/rpc" + "github.com/ledgerwatch/log/v3" + "golang.org/x/net/context" +) + +var requestBlobBatchExpiration = 15 * time.Second + +// This is just a bunch of functions to handle blobs + +// BlobsIdentifiersFromBlocks returns a list of blob identifiers from a list of blocks, which should then be forwarded to the network. +func BlobsIdentifiersFromBlocks(blocks []*cltypes.SignedBeaconBlock) (*solid.ListSSZ[*cltypes.BlobIdentifier], error) { + ids := solid.NewStaticListSSZ[*cltypes.BlobIdentifier](0, 40) + for _, block := range blocks { + if block.Version() < clparams.DenebVersion { + continue + } + blockRoot, err := block.Block.HashSSZ() + if err != nil { + return nil, err + } + kzgCommitments := block.Block.Body.BlobKzgCommitments.Len() + for i := 0; i < kzgCommitments; i++ { + ids.Append(&cltypes.BlobIdentifier{ + BlockRoot: blockRoot, + Index: uint64(i), + }) + } + } + return ids, nil +} + +func BlobsIdentifiersFromBlindedBlocks(blocks []*cltypes.SignedBlindedBeaconBlock) (*solid.ListSSZ[*cltypes.BlobIdentifier], error) { + ids := solid.NewStaticListSSZ[*cltypes.BlobIdentifier](0, 40) + for _, block := range blocks { + if block.Version() < clparams.DenebVersion { + continue + } + blockRoot, err := block.Block.HashSSZ() + if err != nil { + return nil, err + } + kzgCommitments := block.Block.Body.BlobKzgCommitments.Len() + for i := 0; i < kzgCommitments; i++ { + ids.Append(&cltypes.BlobIdentifier{ + BlockRoot: blockRoot, + Index: uint64(i), + }) + } + } + return ids, nil +} + +type PeerAndSidecars struct { + Peer string + Responses []*cltypes.BlobSidecar +} + +// RequestBlobsFrantically requests blobs from the network frantically. +func RequestBlobsFrantically(ctx context.Context, r *rpc.BeaconRpcP2P, req *solid.ListSSZ[*cltypes.BlobIdentifier]) (*PeerAndSidecars, error) { + var atomicResp atomic.Value + + atomicResp.Store(&PeerAndSidecars{}) + reqInterval := time.NewTicker(100 * time.Millisecond) + defer reqInterval.Stop() +Loop: + for { + select { + case <-reqInterval.C: + go func() { + if len(atomicResp.Load().(*PeerAndSidecars).Responses) > 0 { + return + } + // this is so we do not get stuck on a side-fork + responses, pid, err := r.SendBlobsSidecarByIdentifierReq(ctx, req) + + if err != nil { + return + } + if responses == nil { + return + } + if len(atomicResp.Load().(*PeerAndSidecars).Responses) > 0 { + return + } + atomicResp.Store(&PeerAndSidecars{ + Peer: pid, + Responses: responses, + }) + }() + case <-ctx.Done(): + return nil, ctx.Err() + case <-time.After(requestBlobBatchExpiration): + log.Debug("RequestBlobsFrantically: timeout") + return nil, nil + default: + if len(atomicResp.Load().(*PeerAndSidecars).Responses) > 0 { + break Loop + } + time.Sleep(10 * time.Millisecond) + } + } + return atomicResp.Load().(*PeerAndSidecars), nil +} diff --git a/cl/phase1/network/gossip_manager.go b/cl/phase1/network/gossip_manager.go index 88c0841dea8..7f735b933a8 100644 --- a/cl/phase1/network/gossip_manager.go +++ b/cl/phase1/network/gossip_manager.go @@ -2,78 +2,96 @@ package network import ( "context" + "errors" "fmt" - "sync" + "time" + "github.com/c2h5oh/datasize" "github.com/ledgerwatch/erigon-lib/common" - - "github.com/ledgerwatch/erigon/cl/freezer" + "github.com/ledgerwatch/erigon-lib/gointerfaces/grpcutil" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/gossip" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" - "github.com/ledgerwatch/erigon/cl/sentinel/peers" + "github.com/ledgerwatch/erigon/cl/phase1/network/services" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/cl/validator/committee_subscription" + "google.golang.org/grpc" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/erigon-lib/types/ssz" "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/utils" "github.com/ledgerwatch/log/v3" ) // Gossip manager is sending all messages to fork choice or others type GossipManager struct { - recorder freezer.Freezer forkChoice *forkchoice.ForkChoiceStore sentinel sentinel.SentinelClient // configs - beaconConfig *clparams.BeaconChainConfig - genesisConfig *clparams.GenesisConfig + beaconConfig *clparams.BeaconChainConfig + ethClock eth_clock.EthereumClock + + emitters *beaconevents.Emitters + committeeSub *committee_subscription.CommitteeSubscribeMgmt - mu sync.RWMutex - subs map[int]chan *peers.PeeredObject[*cltypes.SignedBeaconBlock] - totalSubs int + // Services for processing messages from the network + blockService services.BlockService + blobService services.BlobSidecarsService + syncCommitteeMessagesService services.SyncCommitteeMessagesService + syncContributionService services.SyncContributionService + aggregateAndProofService services.AggregateAndProofService + attestationService services.AttestationService + voluntaryExitService services.VoluntaryExitService + blsToExecutionChangeService services.BLSToExecutionChangeService + proposerSlashingService services.ProposerSlashingService } -func NewGossipReceiver(s sentinel.SentinelClient, forkChoice *forkchoice.ForkChoiceStore, - beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig, recorder freezer.Freezer) *GossipManager { +func NewGossipReceiver( + s sentinel.SentinelClient, + forkChoice *forkchoice.ForkChoiceStore, + beaconConfig *clparams.BeaconChainConfig, + ethClock eth_clock.EthereumClock, + emitters *beaconevents.Emitters, + comitteeSub *committee_subscription.CommitteeSubscribeMgmt, + blockService services.BlockService, + blobService services.BlobSidecarsService, + syncCommitteeMessagesService services.SyncCommitteeMessagesService, + syncContributionService services.SyncContributionService, + aggregateAndProofService services.AggregateAndProofService, + attestationService services.AttestationService, + voluntaryExitService services.VoluntaryExitService, + blsToExecutionChangeService services.BLSToExecutionChangeService, + proposerSlashingService services.ProposerSlashingService, +) *GossipManager { return &GossipManager{ - sentinel: s, - forkChoice: forkChoice, - beaconConfig: beaconConfig, - genesisConfig: genesisConfig, - recorder: recorder, - subs: make(map[int]chan *peers.PeeredObject[*cltypes.SignedBeaconBlock]), + sentinel: s, + forkChoice: forkChoice, + emitters: emitters, + beaconConfig: beaconConfig, + ethClock: ethClock, + committeeSub: comitteeSub, + blockService: blockService, + blobService: blobService, + syncCommitteeMessagesService: syncCommitteeMessagesService, + syncContributionService: syncContributionService, + aggregateAndProofService: aggregateAndProofService, + attestationService: attestationService, + voluntaryExitService: voluntaryExitService, + blsToExecutionChangeService: blsToExecutionChangeService, + proposerSlashingService: proposerSlashingService, } } -// this subscribes to signed beacon blocks..... i wish this was better -func (g *GossipManager) SubscribeSignedBeaconBlocks(ctx context.Context) <-chan *peers.PeeredObject[*cltypes.SignedBeaconBlock] { - // a really big limit because why not.... - out := make(chan *peers.PeeredObject[*cltypes.SignedBeaconBlock], 512) - g.mu.Lock() - g.totalSubs++ - idx := g.totalSubs - g.subs[idx] = out - g.mu.Unlock() - go func() { - <-ctx.Done() - g.mu.Lock() - delete(g.subs, idx) - g.mu.Unlock() - }() - return out -} - -func operationsContract[T ssz.EncodableSSZ](ctx context.Context, g *GossipManager, l log.Ctx, data *sentinel.GossipData, version int, name string, fn func(T, bool) error) error { +func operationsContract[T ssz.EncodableSSZ](ctx context.Context, g *GossipManager, data *sentinel.GossipData, version int, name string, fn func(T, bool) error) error { var t T object := t.Clone().(T) if err := object.DecodeSSZ(common.CopyBytes(data.Data), version); err != nil { g.sentinel.BanPeer(ctx, data.Peer) - l["at"] = fmt.Sprintf("decoding %s", name) return err } if err := fn(object /*test=*/, false); err != nil { - l["at"] = fmt.Sprintf("verify %s", name) return err } if _, err := g.sentinel.PublishGossip(ctx, data); err != nil { @@ -83,111 +101,180 @@ func operationsContract[T ssz.EncodableSSZ](ctx context.Context, g *GossipManage } func (g *GossipManager) onRecv(ctx context.Context, data *sentinel.GossipData, l log.Ctx) (err error) { - defer func() { - r := recover() - if r != nil { - err = fmt.Errorf("%v", r) - } - }() + // defer func() { + // r := recover() + // if r != nil { + // err = fmt.Errorf("%v", r) + // } + // }() + // Make a copy of the gossip data so that we the received data is not modified. + // 1) When we publish and corrupt the data, the peers bans us. + // 2) We decode the block wrong + data = &sentinel.GossipData{ + Name: data.Name, + Peer: data.Peer, + SubnetId: data.SubnetId, + Data: common.CopyBytes(data.Data), + } - currentEpoch := utils.GetCurrentEpoch(g.genesisConfig.GenesisTime, g.beaconConfig.SecondsPerSlot, g.beaconConfig.SlotsPerEpoch) + if err := g.routeAndProcess(ctx, data); err != nil { + return err + } + if errors.Is(err, services.ErrIgnore) { + return nil + } + if err != nil { + g.sentinel.BanPeer(ctx, data.Peer) + return err + } + if _, err := g.sentinel.PublishGossip(ctx, data); err != nil { + log.Warn("failed publish gossip", "err", err) + } + return nil +} + +func (g *GossipManager) routeAndProcess(ctx context.Context, data *sentinel.GossipData) error { + currentEpoch := g.ethClock.GetCurrentEpoch() version := g.beaconConfig.GetCurrentStateVersion(currentEpoch) // Depending on the type of the received data, we create an instance of a specific type that implements the ObjectSSZ interface, // then attempts to deserialize the received data into it. // If the deserialization fails, an error is logged and the loop returns to the next iteration. // If the deserialization is successful, the object is set to the deserialized value and the loop returns to the next iteration. - var object ssz.Unmarshaler switch data.Name { case gossip.TopicNameBeaconBlock: - object = cltypes.NewSignedBeaconBlock(g.beaconConfig) - if err := object.DecodeSSZ(common.CopyBytes(data.Data), int(version)); err != nil { - g.sentinel.BanPeer(ctx, data.Peer) - l["at"] = "decoding block" - return err - } - block := object.(*cltypes.SignedBeaconBlock) - l["slot"] = block.Block.Slot - currentSlotByTime := utils.GetCurrentSlot(g.genesisConfig.GenesisTime, g.beaconConfig.SecondsPerSlot) - maxGossipSlotThreshold := uint64(4) - // Skip if slot is too far behind. - if block.Block.Slot+maxGossipSlotThreshold < currentSlotByTime { - return nil - } - if block.Block.Slot == currentSlotByTime { - if _, err := g.sentinel.PublishGossip(ctx, data); err != nil { - log.Debug("failed publish gossip", "err", err) - } - } - - count, err := g.sentinel.GetPeers(ctx, &sentinel.EmptyMessage{}) - if err != nil { - l["at"] = "sentinel peer count" + obj := cltypes.NewSignedBeaconBlock(g.beaconConfig) + if err := obj.DecodeSSZ(data.Data, int(version)); err != nil { return err } - - log.Debug("Received block via gossip", - "peers", count.Amount, - "slot", block.Block.Slot, - ) - - if err := freezer.PutObjectSSZIntoFreezer("signedBeaconBlock", "caplin_core", block.Block.Slot, block, g.recorder); err != nil { + log.Debug("Received block via gossip", "slot", obj.Block.Slot) + return g.blockService.ProcessMessage(ctx, data.SubnetId, obj) + case gossip.TopicNameSyncCommitteeContributionAndProof: + obj := &cltypes.SignedContributionAndProof{} + if err := obj.DecodeSSZ(data.Data, int(version)); err != nil { return err } - - g.mu.RLock() - for _, v := range g.subs { - select { - case v <- &peers.PeeredObject[*cltypes.SignedBeaconBlock]{Data: block, Peer: data.Peer.Pid}: - default: - } - } - g.mu.RUnlock() - + return g.syncContributionService.ProcessMessage(ctx, data.SubnetId, obj) case gossip.TopicNameVoluntaryExit: - if err := operationsContract[*cltypes.SignedVoluntaryExit](ctx, g, l, data, int(version), "voluntary exit", g.forkChoice.OnVoluntaryExit); err != nil { + obj := &cltypes.SignedVoluntaryExit{} + if err := obj.DecodeSSZ(data.Data, int(version)); err != nil { return err } + return g.voluntaryExitService.ProcessMessage(ctx, data.SubnetId, obj) + case gossip.TopicNameProposerSlashing: - if err := operationsContract[*cltypes.ProposerSlashing](ctx, g, l, data, int(version), "proposer slashing", g.forkChoice.OnProposerSlashing); err != nil { + obj := &cltypes.ProposerSlashing{} + if err := obj.DecodeSSZ(data.Data, int(version)); err != nil { return err } + return g.proposerSlashingService.ProcessMessage(ctx, data.SubnetId, obj) case gossip.TopicNameAttesterSlashing: - if err := operationsContract[*cltypes.AttesterSlashing](ctx, g, l, data, int(version), "attester slashing", g.forkChoice.OnAttesterSlashing); err != nil { - return err - } + return operationsContract[*cltypes.AttesterSlashing](ctx, g, data, int(version), "attester slashing", g.forkChoice.OnAttesterSlashing) case gossip.TopicNameBlsToExecutionChange: - if err := operationsContract[*cltypes.SignedBLSToExecutionChange](ctx, g, l, data, int(version), "bls to execution change", g.forkChoice.OnBlsToExecutionChange); err != nil { + obj := &cltypes.SignedBLSToExecutionChange{} + if err := obj.DecodeSSZ(data.Data, int(version)); err != nil { return err } + return g.blsToExecutionChangeService.ProcessMessage(ctx, data.SubnetId, obj) case gossip.TopicNameBeaconAggregateAndProof: - if err := operationsContract[*cltypes.SignedAggregateAndProof](ctx, g, l, data, int(version), "aggregate and proof", g.forkChoice.OnAggregateAndProof); err != nil { + obj := &cltypes.SignedAggregateAndProof{} + if err := obj.DecodeSSZ(data.Data, int(version)); err != nil { return err } + return g.aggregateAndProofService.ProcessMessage(ctx, data.SubnetId, obj) + default: + switch { + case gossip.IsTopicBlobSidecar(data.Name): + // decode sidecar + blobSideCar := &cltypes.BlobSidecar{} + if err := blobSideCar.DecodeSSZ(data.Data, int(version)); err != nil { + return err + } + defer log.Debug("Received blob sidecar via gossip", "index", *data.SubnetId, "size", datasize.ByteSize(len(blobSideCar.Blob))) + // The background checks above are enough for now. + return g.blobService.ProcessMessage(ctx, data.SubnetId, blobSideCar) + case gossip.IsTopicSyncCommittee(data.Name): + msg := &cltypes.SyncCommitteeMessage{} + if err := msg.DecodeSSZ(common.CopyBytes(data.Data), int(version)); err != nil { + return err + } + return g.syncCommitteeMessagesService.ProcessMessage(ctx, data.SubnetId, msg) + case gossip.IsTopicBeaconAttestation(data.Name): + att := &solid.Attestation{} + if err := att.DecodeSSZ(data.Data, int(version)); err != nil { + return err + } + return g.attestationService.ProcessMessage(ctx, data.SubnetId, att) + default: + return fmt.Errorf("unknown topic %s", data.Name) + } } - return nil } func (g *GossipManager) Start(ctx context.Context) { - subscription, err := g.sentinel.SubscribeGossip(ctx, &sentinel.SubscriptionData{}) - if err != nil { - return + operationsCh := make(chan *sentinel.GossipData, 1<<16) + blobsCh := make(chan *sentinel.GossipData, 1<<16) + blocksCh := make(chan *sentinel.GossipData, 1<<16) + syncCommitteesCh := make(chan *sentinel.GossipData, 1<<16) + defer close(operationsCh) + defer close(blobsCh) + defer close(blocksCh) + + // Start couple of goroutines that listen for new gossip messages and sends them to the operations processor. + goWorker := func(ch <-chan *sentinel.GossipData, workerCount int) { + worker := func() { + for { + select { + case <-ctx.Done(): + return + case data := <-ch: + l := log.Ctx{} + if err := g.onRecv(ctx, data, l); err != nil && !errors.Is(err, services.ErrIgnore) { + log.Debug("[Beacon Gossip] Recoverable Error", "err", err) + } + } + } + } + for i := 0; i < workerCount; i++ { + go worker() + } } + goWorker(operationsCh, 1) + goWorker(blocksCh, 1) + goWorker(blobsCh, 1) + goWorker(syncCommitteesCh, 1) - l := log.Ctx{} +Reconnect: for { - data, err := subscription.Recv() - if err != nil { - log.Warn("[Beacon Gossip] Fatal error receiving gossip", "err", err) - break - } - for k := range l { - delete(l, k) + select { + case <-ctx.Done(): + return + default: } - err = g.onRecv(ctx, data, l) + + subscription, err := g.sentinel.SubscribeGossip(ctx, &sentinel.SubscriptionData{}, grpc.WaitForReady(true)) if err != nil { - l["err"] = err - log.Debug("[Beacon Gossip] Recoverable Error", l) + return + } + + for { + data, err := subscription.Recv() + if err != nil { + if grpcutil.IsRetryLater(err) || grpcutil.IsEndOfStream(err) { + time.Sleep(3 * time.Second) + continue Reconnect + } + log.Warn("[Beacon Gossip] Fatal error receiving gossip", "err", err) + continue Reconnect + } + + if data.Name == gossip.TopicNameBeaconBlock || gossip.IsTopicBlobSidecar(data.Name) { + blocksCh <- data + } else if gossip.IsTopicSyncCommittee(data.Name) || data.Name == gossip.TopicNameSyncCommitteeContributionAndProof { + syncCommitteesCh <- data + } else { + operationsCh <- data + } } } } diff --git a/cl/phase1/network/services/aggregate_and_proof_service.go b/cl/phase1/network/services/aggregate_and_proof_service.go new file mode 100644 index 00000000000..b2fdb54c2db --- /dev/null +++ b/cl/phase1/network/services/aggregate_and_proof_service.go @@ -0,0 +1,304 @@ +package services + +import ( + "context" + "fmt" + "slices" + "sync" + "time" + + "github.com/Giulio2002/bls" + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/fork" + "github.com/ledgerwatch/erigon/cl/merkle_tree" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" + "github.com/ledgerwatch/erigon/cl/pool" + "github.com/ledgerwatch/erigon/cl/utils" +) + +type aggregateJob struct { + aggregate *cltypes.SignedAggregateAndProof + creationTime time.Time +} + +type aggregateAndProofServiceImpl struct { + syncedDataManager *synced_data.SyncedDataManager + forkchoiceStore forkchoice.ForkChoiceStorage + beaconCfg *clparams.BeaconChainConfig + opPool pool.OperationsPool + test bool + + // set of aggregates that are scheduled for later processing + aggregatesScheduledForLaterExecution sync.Map +} + +func NewAggregateAndProofService( + ctx context.Context, + syncedDataManager *synced_data.SyncedDataManager, + forkchoiceStore forkchoice.ForkChoiceStorage, + beaconCfg *clparams.BeaconChainConfig, + opPool pool.OperationsPool, + test bool, +) AggregateAndProofService { + a := &aggregateAndProofServiceImpl{ + syncedDataManager: syncedDataManager, + forkchoiceStore: forkchoiceStore, + beaconCfg: beaconCfg, + opPool: opPool, + test: test, + } + go a.loop(ctx) + return a +} + +func (a *aggregateAndProofServiceImpl) ProcessMessage( + ctx context.Context, + subnet *uint64, + aggregateAndProof *cltypes.SignedAggregateAndProof, +) error { + headState := a.syncedDataManager.HeadState() + if headState == nil { + return ErrIgnore + } + selectionProof := aggregateAndProof.Message.SelectionProof + aggregateData := aggregateAndProof.Message.Aggregate.AttestantionData() + target := aggregateAndProof.Message.Aggregate.AttestantionData().Target() + slot := aggregateAndProof.Message.Aggregate.AttestantionData().Slot() + committeeIndex := aggregateAndProof.Message.Aggregate.AttestantionData().CommitteeIndex() + + if aggregateData.Slot() > headState.Slot() { + a.scheduleAggregateForLaterProcessing(aggregateAndProof) + return ErrIgnore + } + epoch := slot / a.beaconCfg.SlotsPerEpoch + // [IGNORE] the epoch of aggregate.data.slot is either the current or previous epoch (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance) -- i.e. compute_epoch_at_slot(aggregate.data.slot) in (get_previous_epoch(state), get_current_epoch(state)) + if state.PreviousEpoch(headState) != epoch && state.Epoch(headState) != epoch { + return ErrIgnore + } + finalizedCheckpoint := a.forkchoiceStore.FinalizedCheckpoint() + finalizedSlot := finalizedCheckpoint.Epoch() * a.beaconCfg.SlotsPerEpoch + // [IGNORE] The current finalized_checkpoint is an ancestor of the block defined by aggregate.data.beacon_block_root -- i.e. get_checkpoint_block(store, aggregate.data.beacon_block_root, finalized_checkpoint.epoch) == store.finalized_checkpoint.root + if a.forkchoiceStore.Ancestor( + aggregateData.BeaconBlockRoot(), + finalizedSlot, + ) != finalizedCheckpoint.BlockRoot() { + return ErrIgnore + } + + // [IGNORE] The block being voted for (aggregate.data.beacon_block_root) has been seen (via both gossip and non-gossip sources) (a client MAY queue aggregates for processing once block is retrieved). + if _, ok := a.forkchoiceStore.GetHeader(aggregateData.BeaconBlockRoot()); !ok { + return ErrIgnore + } + + // [REJECT] The committee index is within the expected range -- i.e. index < get_committee_count_per_slot(state, aggregate.data.target.epoch). + committeeCountPerSlot := headState.CommitteeCount(target.Epoch()) + if aggregateData.CommitteeIndex() >= committeeCountPerSlot { + return fmt.Errorf("invalid committee index in aggregate and proof") + } + // [REJECT] The aggregate attestation's epoch matches its target -- i.e. aggregate.data.target.epoch == compute_epoch_at_slot(aggregate.data.slot) + if aggregateData.Target().Epoch() != epoch { + return fmt.Errorf("invalid target epoch in aggregate and proof") + } + committee, err := headState.GetBeaconCommitee(slot, committeeIndex) + if err != nil { + return err + } + + // [REJECT] The aggregator's validator index is within the committee -- i.e. aggregate_and_proof.aggregator_index in get_beacon_committee(state, aggregate.data.slot, index). + if !slices.Contains(committee, aggregateAndProof.Message.AggregatorIndex) { + return fmt.Errorf("committee index not in committee") + } + // [REJECT] The aggregate attestation's target block is an ancestor of the block named in the LMD vote -- i.e. get_checkpoint_block(store, aggregate.data.beacon_block_root, aggregate.data.target.epoch) == aggregate.data.target.root + if a.forkchoiceStore.Ancestor( + aggregateData.BeaconBlockRoot(), + epoch*a.beaconCfg.SlotsPerEpoch, + ) != target.BlockRoot() { + return fmt.Errorf("invalid target block") + } + if a.test { + return nil + } + + // [REJECT] aggregate_and_proof.selection_proof selects the validator as an aggregator for the slot -- i.e. is_aggregator(state, aggregate.data.slot, index, aggregate_and_proof.selection_proof) returns True. + if !state.IsAggregator(a.beaconCfg, uint64(len(committee)), committeeIndex, selectionProof) { + log.Warn("receveived aggregate and proof from invalid aggregator") + return fmt.Errorf("invalid aggregate and proof") + } + attestingIndicies, err := headState.GetAttestingIndicies( + aggregateAndProof.Message.Aggregate.AttestantionData(), + aggregateAndProof.Message.Aggregate.AggregationBits(), + true, + ) + if err != nil { + return err + } + if err := verifySignaturesOnAggregate(headState, aggregateAndProof); err != nil { + return err + } // Add to aggregation pool + a.opPool.AttestationsPool.Insert( + aggregateAndProof.Message.Aggregate.Signature(), + aggregateAndProof.Message.Aggregate, + ) + a.forkchoiceStore.ProcessAttestingIndicies( + aggregateAndProof.Message.Aggregate, + attestingIndicies, + ) + return nil +} + +func verifySignaturesOnAggregate( + s *state.CachingBeaconState, + aggregateAndProof *cltypes.SignedAggregateAndProof, +) error { + aggregationBits := aggregateAndProof.Message.Aggregate.AggregationBits() + // [REJECT] The aggregate attestation has participants -- that is, len(get_attesting_indices(state, aggregate)) >= 1. + attestingIndicies, err := s.GetAttestingIndicies( + aggregateAndProof.Message.Aggregate.AttestantionData(), + aggregationBits, + true, + ) + if err != nil { + return err + } + if len(attestingIndicies) == 0 { + return fmt.Errorf("no attesting indicies") + } + // [REJECT] The aggregate_and_proof.selection_proof is a valid signature of the aggregate.data.slot by the validator with index aggregate_and_proof.aggregator_index. + if err := verifyAggregateAndProofSignature(s, aggregateAndProof.Message); err != nil { + return err + } + + // [REJECT] The aggregator signature, signed_aggregate_and_proof.signature, is valid. + if err := verifyAggregatorSignature(s, aggregateAndProof); err != nil { + return err + } + + return verifyAggregateMessageSignature(s, aggregateAndProof, attestingIndicies) +} + +func verifyAggregateAndProofSignature( + state *state.CachingBeaconState, + aggregate *cltypes.AggregateAndProof, +) error { + slot := aggregate.Aggregate.AttestantionData().Slot() + publicKey, err := state.ValidatorPublicKey(int(aggregate.AggregatorIndex)) + if err != nil { + return err + } + domain, err := state.GetDomain( + state.BeaconConfig().DomainSelectionProof, + slot*state.BeaconConfig().SlotsPerEpoch, + ) + if err != nil { + return err + } + signingRoot := utils.Sha256(merkle_tree.Uint64Root(slot).Bytes(), domain) + valid, err := bls.Verify(aggregate.SelectionProof[:], signingRoot[:], publicKey[:]) + if err != nil { + return err + } + if !valid { + return fmt.Errorf("invalid bls signature on aggregate and proof") + } + return nil +} + +func verifyAggregatorSignature( + state *state.CachingBeaconState, + aggregate *cltypes.SignedAggregateAndProof, +) error { + publicKey, err := state.ValidatorPublicKey(int(aggregate.Message.AggregatorIndex)) + if err != nil { + return err + } + domain, err := state.GetDomain(state.BeaconConfig().DomainAggregateAndProof, state.Slot()) + if err != nil { + return err + } + signingRoot, err := fork.ComputeSigningRoot(aggregate.Message, domain) + if err != nil { + return err + } + valid, err := bls.Verify(aggregate.Signature[:], signingRoot[:], publicKey[:]) + if err != nil { + return err + } + if !valid { + return fmt.Errorf("invalid bls signature on aggregate and proof") + } + return nil +} + +func verifyAggregateMessageSignature( + s *state.CachingBeaconState, + aggregateAndProof *cltypes.SignedAggregateAndProof, + attestingIndicies []uint64, +) error { + indexedAttestation := state.GetIndexedAttestation( + aggregateAndProof.Message.Aggregate, + attestingIndicies, + ) + + valid, err := state.IsValidIndexedAttestation(s, indexedAttestation) + if err != nil { + return err + } + if !valid { + return fmt.Errorf("invalid aggregate signature") + } + return nil +} + +func (a *aggregateAndProofServiceImpl) scheduleAggregateForLaterProcessing( + aggregateAndProof *cltypes.SignedAggregateAndProof, +) { + key, err := aggregateAndProof.HashSSZ() + if err != nil { + panic(err) + } + + a.aggregatesScheduledForLaterExecution.Store(key, &aggregateJob{ + aggregate: aggregateAndProof, + creationTime: time.Now(), + }) +} + +func (a *aggregateAndProofServiceImpl) loop(ctx context.Context) { + ticker := time.NewTicker(attestationJobsIntervalTick) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + } + headState := a.syncedDataManager.HeadState() + if headState == nil { + continue + } + a.aggregatesScheduledForLaterExecution.Range(func(key, value any) bool { + job := value.(*aggregateJob) + // check if it has expired + if time.Since(job.creationTime) > attestationJobExpiry { + a.aggregatesScheduledForLaterExecution.Delete(key.([32]byte)) + return true + } + aggregateData := job.aggregate.Message.Aggregate.AttestantionData() + if aggregateData.Slot() > headState.Slot() { + return true + } + + if err := a.ProcessMessage(ctx, nil, job.aggregate); err != nil { + log.Trace("blob sidecar verification failed", "err", err) + return true + } + a.aggregatesScheduledForLaterExecution.Delete(key.([32]byte)) + return true + }) + } +} diff --git a/cl/phase1/network/services/aggregate_and_proof_service_test.go b/cl/phase1/network/services/aggregate_and_proof_service_test.go new file mode 100644 index 00000000000..2b1c02270f4 --- /dev/null +++ b/cl/phase1/network/services/aggregate_and_proof_service_test.go @@ -0,0 +1,172 @@ +package services + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + + "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/pool" +) + +func getAggregateAndProofAndState(t *testing.T) (*cltypes.SignedAggregateAndProof, *state.CachingBeaconState) { + _, _, s := tests.GetBellatrixRandom() + br, _ := s.BlockRoot() + checkpoint := s.CurrentJustifiedCheckpoint() + a := &cltypes.SignedAggregateAndProof{ + Message: &cltypes.AggregateAndProof{ + AggregatorIndex: 141, + Aggregate: solid.NewAttestionFromParameters([]byte{1, 2}, solid.NewAttestionDataFromParameters( + s.Slot(), + 0, + br, + checkpoint, + checkpoint, + ), common.Bytes96{}), + SelectionProof: common.Bytes96{}, + }, + } + a.Message.Aggregate.AttestantionData().Target().SetEpoch(s.Slot() / 32) + return a, s + +} + +func setupAggregateAndProofTest(t *testing.T) (AggregateAndProofService, *synced_data.SyncedDataManager, *mock_services.ForkChoiceStorageMock) { + ctx, cn := context.WithCancel(context.Background()) + cn() + cfg := &clparams.MainnetBeaconConfig + syncedDataManager := synced_data.NewSyncedDataManager(true, cfg) + forkchoiceMock := mock_services.NewForkChoiceStorageMock(t) + p := pool.OperationsPool{} + p.AttestationsPool = pool.NewOperationPool[libcommon.Bytes96, *solid.Attestation](100, "test") + blockService := NewAggregateAndProofService(ctx, syncedDataManager, forkchoiceMock, cfg, p, true) + return blockService, syncedDataManager, forkchoiceMock +} + +func TestAggregateAndProofServiceUnsynced(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, _ := getAggregateAndProofAndState(t) + + aggService, _, _ := setupAggregateAndProofTest(t) + require.Error(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} + +func TestAggregateAndProofServiceHighSlot(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, s := getAggregateAndProofAndState(t) + agg.Message.Aggregate.AttestantionData().SetSlot(9998898) + + aggService, sd, _ := setupAggregateAndProofTest(t) + sd.OnHeadState(s) + require.Error(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} + +func TestAggregateAndProofServiceBadEpoch(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, s := getAggregateAndProofAndState(t) + agg.Message.Aggregate.AttestantionData().SetSlot(0) + + aggService, sd, _ := setupAggregateAndProofTest(t) + sd.OnHeadState(s) + require.Error(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} + +func TestAggregateAndProofServiceNotAncestor(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, s := getAggregateAndProofAndState(t) + + aggService, sd, fcu := setupAggregateAndProofTest(t) + sd.OnHeadState(s) + fcu.FinalizedCheckpointVal = s.FinalizedCheckpoint() + require.Error(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} + +func TestAggregateAndProofServiceNoHeader(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, s := getAggregateAndProofAndState(t) + + aggService, sd, fcu := setupAggregateAndProofTest(t) + sd.OnHeadState(s) + fcu.FinalizedCheckpointVal = s.FinalizedCheckpoint() + fcu.Ancestors[s.FinalizedCheckpoint().Epoch()*32] = s.FinalizedCheckpoint().BlockRoot() + require.Error(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} + +func TestAggregateAndProofInvalidEpoch(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, s := getAggregateAndProofAndState(t) + + aggService, sd, fcu := setupAggregateAndProofTest(t) + sd.OnHeadState(s) + fcu.FinalizedCheckpointVal = s.FinalizedCheckpoint() + fcu.Ancestors[s.FinalizedCheckpoint().Epoch()*32] = s.FinalizedCheckpoint().BlockRoot() + fcu.Headers[agg.Message.Aggregate.AttestantionData().BeaconBlockRoot()] = &cltypes.BeaconBlockHeader{} + agg.Message.Aggregate.AttestantionData().Target().SetEpoch(999999) + require.Error(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} + +func TestAggregateAndProofInvalidCommittee(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, s := getAggregateAndProofAndState(t) + + aggService, sd, fcu := setupAggregateAndProofTest(t) + sd.OnHeadState(s) + fcu.FinalizedCheckpointVal = s.FinalizedCheckpoint() + fcu.Ancestors[s.FinalizedCheckpoint().Epoch()*32] = s.FinalizedCheckpoint().BlockRoot() + fcu.Headers[agg.Message.Aggregate.AttestantionData().BeaconBlockRoot()] = &cltypes.BeaconBlockHeader{} + agg.Message.AggregatorIndex = 12453224 + require.Error(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} + +func TestAggregateAndProofAncestorMissing(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, s := getAggregateAndProofAndState(t) + + aggService, sd, fcu := setupAggregateAndProofTest(t) + sd.OnHeadState(s) + fcu.FinalizedCheckpointVal = s.FinalizedCheckpoint() + fcu.Ancestors[s.FinalizedCheckpoint().Epoch()*32] = s.FinalizedCheckpoint().BlockRoot() + fcu.Headers[agg.Message.Aggregate.AttestantionData().BeaconBlockRoot()] = &cltypes.BeaconBlockHeader{} + require.Error(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} + +func TestAggregateAndProofSuccess(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + agg, s := getAggregateAndProofAndState(t) + + aggService, sd, fcu := setupAggregateAndProofTest(t) + sd.OnHeadState(s) + fcu.FinalizedCheckpointVal = s.FinalizedCheckpoint() + fcu.Ancestors[s.FinalizedCheckpoint().Epoch()*32] = s.FinalizedCheckpoint().BlockRoot() + fcu.Ancestors[agg.Message.Aggregate.AttestantionData().Slot()] = agg.Message.Aggregate.AttestantionData().Target().BlockRoot() + fcu.Headers[agg.Message.Aggregate.AttestantionData().BeaconBlockRoot()] = &cltypes.BeaconBlockHeader{} + require.NoError(t, aggService.ProcessMessage(context.Background(), nil, agg)) +} diff --git a/cl/phase1/network/services/attestation_service.go b/cl/phase1/network/services/attestation_service.go new file mode 100644 index 00000000000..87afc7f855a --- /dev/null +++ b/cl/phase1/network/services/attestation_service.go @@ -0,0 +1,236 @@ +package services + +import ( + "context" + "errors" + "fmt" + "sync" + "time" + + "github.com/Giulio2002/bls" + "github.com/ledgerwatch/erigon/cl/aggregation" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/fork" + "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" + "github.com/ledgerwatch/erigon/cl/phase1/network/subnets" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/cl/validator/committee_subscription" +) + +var ( + computeSubnetForAttestation = subnets.ComputeSubnetForAttestation + computeCommitteeCountPerSlot = subnets.ComputeCommitteeCountPerSlot + computeSigningRoot = fork.ComputeSigningRoot + blsVerify = bls.Verify +) + +type attestationService struct { + forkchoiceStore forkchoice.ForkChoiceStorage + committeeSubscribe committee_subscription.CommitteeSubscribe + ethClock eth_clock.EthereumClock + syncedDataManager synced_data.SyncedData + beaconCfg *clparams.BeaconChainConfig + netCfg *clparams.NetworkConfig + // validatorAttestationSeen maps from epoch to validator index. This is used to ignore duplicate validator attestations in the same epoch. + validatorAttestationSeen *lru.CacheWithTTL[uint64, uint64] // validator index -> epoch + attestationsToBeLaterProcessed sync.Map +} + +func NewAttestationService( + ctx context.Context, + forkchoiceStore forkchoice.ForkChoiceStorage, + committeeSubscribe committee_subscription.CommitteeSubscribe, + ethClock eth_clock.EthereumClock, + syncedDataManager synced_data.SyncedData, + beaconCfg *clparams.BeaconChainConfig, + netCfg *clparams.NetworkConfig, +) AttestationService { + epochDuration := time.Duration(beaconCfg.SlotsPerEpoch*beaconCfg.SecondsPerSlot) * time.Second + a := &attestationService{ + forkchoiceStore: forkchoiceStore, + committeeSubscribe: committeeSubscribe, + ethClock: ethClock, + syncedDataManager: syncedDataManager, + beaconCfg: beaconCfg, + netCfg: netCfg, + validatorAttestationSeen: lru.NewWithTTL[uint64, uint64]("validator_attestation_seen", validatorAttestationCacheSize, epochDuration), + } + go a.loop(ctx) + return a +} + +func (s *attestationService) ProcessMessage(ctx context.Context, subnet *uint64, att *solid.Attestation) error { + var ( + root = att.AttestantionData().BeaconBlockRoot() + slot = att.AttestantionData().Slot() + committeeIndex = att.AttestantionData().CommitteeIndex() + targetEpoch = att.AttestantionData().Target().Epoch() + ) + headState := s.syncedDataManager.HeadStateReader() + if headState == nil { + return ErrIgnore + } + + // [REJECT] The committee index is within the expected range + committeeCount := computeCommitteeCountPerSlot(headState, slot, s.beaconCfg.SlotsPerEpoch) + if committeeIndex >= committeeCount { + return fmt.Errorf("committee index out of range, %d >= %d", committeeIndex, committeeCount) + } + // [REJECT] The attestation is for the correct subnet -- i.e. compute_subnet_for_attestation(committees_per_slot, attestation.data.slot, index) == subnet_id + subnetId := computeSubnetForAttestation(committeeCount, slot, committeeIndex, s.beaconCfg.SlotsPerEpoch, s.netCfg.AttestationSubnetCount) + if subnet == nil || subnetId != *subnet { + return fmt.Errorf("wrong subnet") + } + // [IGNORE] attestation.data.slot is within the last ATTESTATION_PROPAGATION_SLOT_RANGE slots (within a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance) -- + // i.e. attestation.data.slot + ATTESTATION_PROPAGATION_SLOT_RANGE >= current_slot >= attestation.data.slot (a client MAY queue future attestations for processing at the appropriate slot). + currentSlot := s.ethClock.GetCurrentSlot() + if currentSlot < slot || currentSlot > slot+s.netCfg.AttestationPropagationSlotRange { + return fmt.Errorf("not in propagation range %w", ErrIgnore) + } + // [REJECT] The attestation's epoch matches its target -- i.e. attestation.data.target.epoch == compute_epoch_at_slot(attestation.data.slot) + if targetEpoch != slot/s.beaconCfg.SlotsPerEpoch { + return fmt.Errorf("epoch mismatch") + } + // [REJECT] The number of aggregation bits matches the committee size -- i.e. len(aggregation_bits) == len(get_beacon_committee(state, attestation.data.slot, index)). + beaconCommittee, err := s.forkchoiceStore.GetBeaconCommitee(slot, committeeIndex) + if err != nil { + return err + } + bits := att.AggregationBits() + expectedAggregationBitsLength := len(beaconCommittee) + actualAggregationBitsLength := utils.GetBitlistLength(bits) + if actualAggregationBitsLength != expectedAggregationBitsLength { + return fmt.Errorf("aggregation bits count mismatch: %d != %d", actualAggregationBitsLength, expectedAggregationBitsLength) + } + + //[REJECT] The attestation is unaggregated -- that is, it has exactly one participating validator (len([bit for bit in aggregation_bits if bit]) == 1, i.e. exactly 1 bit is set). + setBits := 0 + onBitIndex := 0 // Aggregationbits is []byte, so we need to iterate over all bits. + for i := 0; i < len(bits); i++ { + for j := 0; j < 8; j++ { + if bits[i]&(1<= len(beaconCommittee) { + continue + } + setBits++ + onBitIndex = i*8 + j + } + } + } + + if setBits == 0 { + return ErrIgnore // Ignore if it is just an empty bitlist + } + if setBits != 1 { + return fmt.Errorf("attestation does not have exactly one participating validator") + } + // [IGNORE] There has been no other valid attestation seen on an attestation subnet that has an identical attestation.data.target.epoch and participating validator index. + if err != nil { + return err + } + if onBitIndex >= len(beaconCommittee) { + return fmt.Errorf("on bit index out of committee range") + } + // mark the validator as seen + vIndex := beaconCommittee[onBitIndex] + epochLastTime, ok := s.validatorAttestationSeen.Get(vIndex) + if ok && epochLastTime == targetEpoch { + return fmt.Errorf("validator already seen in target epoch %w", ErrIgnore) + } + s.validatorAttestationSeen.Add(vIndex, targetEpoch) + + // [REJECT] The signature of attestation is valid. + signature := att.Signature() + pubKey, err := headState.ValidatorPublicKey(int(beaconCommittee[onBitIndex])) + if err != nil { + return fmt.Errorf("unable to get public key: %v", err) + } + domain, err := headState.GetDomain(s.beaconCfg.DomainBeaconAttester, targetEpoch) + if err != nil { + return fmt.Errorf("unable to get the domain: %v", err) + } + signingRoot, err := computeSigningRoot(att.AttestantionData(), domain) + if err != nil { + return fmt.Errorf("unable to get signing root: %v", err) + } + if valid, err := blsVerify(signature[:], signingRoot[:], pubKey[:]); err != nil { + return err + } else if !valid { + return fmt.Errorf("invalid signature") + } + + // [IGNORE] The block being voted for (attestation.data.beacon_block_root) has been seen (via both gossip and non-gossip sources) + // (a client MAY queue attestations for processing once block is retrieved). + if _, ok := s.forkchoiceStore.GetHeader(root); !ok { + s.scheduleAttestationForLaterProcessing(att) + return ErrIgnore + } + + // [REJECT] The attestation's target block is an ancestor of the block named in the LMD vote -- i.e. + // get_checkpoint_block(store, attestation.data.beacon_block_root, attestation.data.target.epoch) == attestation.data.target.root + startSlotAtEpoch := targetEpoch * s.beaconCfg.SlotsPerEpoch + if s.forkchoiceStore.Ancestor(root, startSlotAtEpoch) != att.AttestantionData().Target().BlockRoot() { + return fmt.Errorf("invalid target block") + } + // [IGNORE] The current finalized_checkpoint is an ancestor of the block defined by attestation.data.beacon_block_root -- + // i.e. get_checkpoint_block(store, attestation.data.beacon_block_root, store.finalized_checkpoint.epoch) == store.finalized_checkpoint.root + startSlotAtEpoch = s.forkchoiceStore.FinalizedCheckpoint().Epoch() * s.beaconCfg.SlotsPerEpoch + if s.forkchoiceStore.Ancestor(root, startSlotAtEpoch) != s.forkchoiceStore.FinalizedCheckpoint().BlockRoot() { + return fmt.Errorf("invalid finalized checkpoint %w", ErrIgnore) + } + + err = s.committeeSubscribe.CheckAggregateAttestation(att) + if errors.Is(err, aggregation.ErrIsSuperset) { + return ErrIgnore + } + return err +} + +type attestationJob struct { + att *solid.Attestation + creationTime time.Time + subnet uint64 +} + +func (a *attestationService) scheduleAttestationForLaterProcessing(att *solid.Attestation) { + key, err := att.HashSSZ() + if err != nil { + return + } + a.attestationsToBeLaterProcessed.Store(key, &attestationJob{ + att: att, + creationTime: time.Now(), + }) +} + +func (a *attestationService) loop(ctx context.Context) { + ticker := time.NewTicker(singleAttestationIntervalTick) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + } + a.attestationsToBeLaterProcessed.Range(func(key, value any) bool { + k := key.([32]byte) + v := value.(*attestationJob) + if time.Now().After(v.creationTime.Add(singleAttestationJobExpiry)) { + a.attestationsToBeLaterProcessed.Delete(k) + return true + } + + root := v.att.AttestantionData().BeaconBlockRoot() + if _, ok := a.forkchoiceStore.GetHeader(root); !ok { + return true + } + a.ProcessMessage(ctx, &v.subnet, v.att) + return true + }) + } +} diff --git a/cl/phase1/network/services/attestation_service_test.go b/cl/phase1/network/services/attestation_service_test.go new file mode 100644 index 00000000000..18428bf79ec --- /dev/null +++ b/cl/phase1/network/services/attestation_service_test.go @@ -0,0 +1,365 @@ +package services + +import ( + "context" + "log" + "testing" + + "github.com/stretchr/testify/suite" + "go.uber.org/mock/gomock" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/types/ssz" + mockSync "github.com/ledgerwatch/erigon/cl/beacon/synced_data/mock_services" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + mockState "github.com/ledgerwatch/erigon/cl/phase1/core/state/mock_services" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + mockCommittee "github.com/ledgerwatch/erigon/cl/validator/committee_subscription/mock_services" +) + +var ( + mockSlot = uint64(321) + mockEpoch = uint64(10) + mockSlotsPerEpoch = uint64(32) + attData = solid.NewAttestionDataFromParameters(mockSlot, 2, [32]byte{0, 4, 2, 6}, + solid.NewCheckpointFromParameters([32]byte{1, 0}, mockEpoch), + solid.NewCheckpointFromParameters([32]byte{1, 0}, mockEpoch)) + + att = solid.NewAttestionFromParameters( + []byte{0b00000001, 1}, + attData, + [96]byte{'a', 'b', 'c', 'd', 'e', 'f'}, + ) +) + +type attestationTestSuite struct { + suite.Suite + gomockCtrl *gomock.Controller + mockForkChoice *mock_services.ForkChoiceStorageMock + syncedData *mockSync.MockSyncedData + beaconStateReader *mockState.MockBeaconStateReader + committeeSubscibe *mockCommittee.MockCommitteeSubscribe + ethClock *eth_clock.MockEthereumClock + attService AttestationService + beaconConfig *clparams.BeaconChainConfig +} + +func (t *attestationTestSuite) SetupTest() { + t.gomockCtrl = gomock.NewController(t.T()) + t.mockForkChoice = &mock_services.ForkChoiceStorageMock{} + t.syncedData = mockSync.NewMockSyncedData(t.gomockCtrl) + t.beaconStateReader = mockState.NewMockBeaconStateReader(t.gomockCtrl) + t.committeeSubscibe = mockCommittee.NewMockCommitteeSubscribe(t.gomockCtrl) + t.ethClock = eth_clock.NewMockEthereumClock(t.gomockCtrl) + t.beaconConfig = &clparams.BeaconChainConfig{SlotsPerEpoch: mockSlotsPerEpoch} + netConfig := &clparams.NetworkConfig{} + computeSigningRoot = func(obj ssz.HashableSSZ, domain []byte) ([32]byte, error) { return [32]byte{}, nil } + blsVerify = func(sig []byte, msg []byte, pubKeys []byte) (bool, error) { return true, nil } + ctx, cn := context.WithCancel(context.Background()) + cn() + t.attService = NewAttestationService(ctx, t.mockForkChoice, t.committeeSubscibe, t.ethClock, t.syncedData, t.beaconConfig, netConfig) +} + +func (t *attestationTestSuite) TearDownTest() { + t.gomockCtrl.Finish() +} + +func (t *attestationTestSuite) TestAttestationProcessMessage() { + type args struct { + ctx context.Context + subnet *uint64 + msg *solid.Attestation + } + tests := []struct { + name string + mock func() + args args + wantErr bool + }{ + { + name: "Test attestation with committee index out of range", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 1 + } + }, + args: args{ + ctx: context.Background(), + subnet: nil, + msg: att, + }, + wantErr: true, + }, + { + name: "Test attestation with wrong subnet", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 5 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 2 + } + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: att, + }, + wantErr: true, + }, + { + name: "Test attestation with wrong slot (current_slot < slot)", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 5 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 1 + } + t.ethClock.EXPECT().GetCurrentSlot().Return(uint64(1)).Times(1) + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: att, + }, + wantErr: true, + }, + { + name: "Attestation is aggregated", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 5 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 1 + } + t.ethClock.EXPECT().GetCurrentSlot().Return(mockSlot).Times(1) + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: solid.NewAttestionFromParameters( + []byte{0b10000001, 1 /*msb*/}, + attData, + [96]byte{0, 1, 2, 3, 4, 5}, + ), + }, + wantErr: true, + }, + { + name: "Attestation is empty", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 5 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 1 + } + t.ethClock.EXPECT().GetCurrentSlot().Return(mockSlot).Times(1) + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: solid.NewAttestionFromParameters( + []byte{0b0, 1}, + attData, + [96]byte{0, 1, 2, 3, 4, 5}, + ), + }, + wantErr: true, + }, + { + name: "invalid signature", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 5 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 1 + } + t.ethClock.EXPECT().GetCurrentSlot().Return(mockSlot).Times(1) + t.beaconStateReader.EXPECT().ValidatorPublicKey(gomock.Any()).Return(common.Bytes48{}, nil).Times(1) + t.beaconStateReader.EXPECT().GetDomain(t.beaconConfig.DomainBeaconAttester, att.AttestantionData().Target().Epoch()).Return([]byte{}, nil).Times(1) + computeSigningRoot = func(obj ssz.HashableSSZ, domain []byte) ([32]byte, error) { + return [32]byte{}, nil + } + blsVerify = func(sig []byte, msg []byte, pubKeys []byte) (bool, error) { + return false, nil + } + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: att, + }, + wantErr: true, + }, + { + name: "block header not found", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 8 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 1 + } + t.ethClock.EXPECT().GetCurrentSlot().Return(mockSlot).Times(1) + t.beaconStateReader.EXPECT().ValidatorPublicKey(gomock.Any()).Return(common.Bytes48{}, nil).Times(1) + t.beaconStateReader.EXPECT().GetDomain(t.beaconConfig.DomainBeaconAttester, att.AttestantionData().Target().Epoch()).Return([]byte{}, nil).Times(1) + computeSigningRoot = func(obj ssz.HashableSSZ, domain []byte) ([32]byte, error) { + return [32]byte{}, nil + } + blsVerify = func(sig []byte, msg []byte, pubKeys []byte) (bool, error) { + return true, nil + } + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: att, + }, + wantErr: true, + }, + { + name: "invalid target block", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 8 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 1 + } + t.ethClock.EXPECT().GetCurrentSlot().Return(mockSlot).Times(1) + t.beaconStateReader.EXPECT().ValidatorPublicKey(gomock.Any()).Return(common.Bytes48{}, nil).Times(1) + t.beaconStateReader.EXPECT().GetDomain(t.beaconConfig.DomainBeaconAttester, att.AttestantionData().Target().Epoch()).Return([]byte{}, nil).Times(1) + computeSigningRoot = func(obj ssz.HashableSSZ, domain []byte) ([32]byte, error) { + return [32]byte{}, nil + } + blsVerify = func(sig []byte, msg []byte, pubKeys []byte) (bool, error) { + return true, nil + } + t.mockForkChoice.Headers = map[common.Hash]*cltypes.BeaconBlockHeader{ + att.AttestantionData().BeaconBlockRoot(): {}, // wrong block root + } + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: att, + }, + wantErr: true, + }, + { + name: "invalid finality checkpoint", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 8 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 1 + } + t.ethClock.EXPECT().GetCurrentSlot().Return(mockSlot).Times(1) + t.beaconStateReader.EXPECT().ValidatorPublicKey(gomock.Any()).Return(common.Bytes48{}, nil).Times(1) + t.beaconStateReader.EXPECT().GetDomain(t.beaconConfig.DomainBeaconAttester, att.AttestantionData().Target().Epoch()).Return([]byte{}, nil).Times(1) + computeSigningRoot = func(obj ssz.HashableSSZ, domain []byte) ([32]byte, error) { + return [32]byte{}, nil + } + blsVerify = func(sig []byte, msg []byte, pubKeys []byte) (bool, error) { + return true, nil + } + t.mockForkChoice.Headers = map[common.Hash]*cltypes.BeaconBlockHeader{ + att.AttestantionData().BeaconBlockRoot(): {}, + } + mockFinalizedCheckPoint := solid.NewCheckpointFromParameters([32]byte{1, 0}, 1) + t.mockForkChoice.Ancestors = map[uint64]common.Hash{ + mockEpoch * mockSlotsPerEpoch: att.AttestantionData().Target().BlockRoot(), + mockFinalizedCheckPoint.Epoch() * mockSlotsPerEpoch: {}, // wrong block root + } + t.mockForkChoice.FinalizedCheckpointVal = solid.NewCheckpointFromParameters( + mockFinalizedCheckPoint.BlockRoot(), + mockFinalizedCheckPoint.Epoch()) + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: att, + }, + wantErr: true, + }, + { + name: "success", + mock: func() { + t.syncedData.EXPECT().HeadStateReader().Return(t.beaconStateReader).Times(1) + computeCommitteeCountPerSlot = func(_ state.BeaconStateReader, _, _ uint64) uint64 { + return 8 + } + computeSubnetForAttestation = func(_, _, _, _, _ uint64) uint64 { + return 1 + } + t.ethClock.EXPECT().GetCurrentSlot().Return(mockSlot).Times(1) + t.beaconStateReader.EXPECT().ValidatorPublicKey(gomock.Any()).Return(common.Bytes48{}, nil).Times(1) + t.beaconStateReader.EXPECT().GetDomain(t.beaconConfig.DomainBeaconAttester, att.AttestantionData().Target().Epoch()).Return([]byte{}, nil).Times(1) + computeSigningRoot = func(obj ssz.HashableSSZ, domain []byte) ([32]byte, error) { + return [32]byte{}, nil + } + blsVerify = func(sig []byte, msg []byte, pubKeys []byte) (bool, error) { + return true, nil + } + t.mockForkChoice.Headers = map[common.Hash]*cltypes.BeaconBlockHeader{ + att.AttestantionData().BeaconBlockRoot(): {}, + } + + mockFinalizedCheckPoint := solid.NewCheckpointFromParameters([32]byte{1, 0}, 1) + t.mockForkChoice.Ancestors = map[uint64]common.Hash{ + mockEpoch * mockSlotsPerEpoch: att.AttestantionData().Target().BlockRoot(), + mockFinalizedCheckPoint.Epoch() * mockSlotsPerEpoch: mockFinalizedCheckPoint.BlockRoot(), + } + t.mockForkChoice.FinalizedCheckpointVal = solid.NewCheckpointFromParameters( + mockFinalizedCheckPoint.BlockRoot(), + mockFinalizedCheckPoint.Epoch()) + t.committeeSubscibe.EXPECT().CheckAggregateAttestation(att).Return(nil).Times(1) + }, + args: args{ + ctx: context.Background(), + subnet: uint64Ptr(1), + msg: att, + }, + }, + } + + for _, tt := range tests { + log.Printf("test case: %s", tt.name) + t.SetupTest() + tt.mock() + err := t.attService.ProcessMessage(tt.args.ctx, tt.args.subnet, tt.args.msg) + if tt.wantErr { + log.Printf("err msg: %v", err) + t.Require().Error(err, err.Error()) + } else { + t.Require().NoError(err) + } + t.True(t.gomockCtrl.Satisfied()) + } +} + +func TestAttestation(t *testing.T) { + suite.Run(t, &attestationTestSuite{}) +} + +func uint64Ptr(i uint64) *uint64 { + return &i +} diff --git a/cl/phase1/network/services/blob_sidecar_service.go b/cl/phase1/network/services/blob_sidecar_service.go new file mode 100644 index 00000000000..57dde2104c5 --- /dev/null +++ b/cl/phase1/network/services/blob_sidecar_service.go @@ -0,0 +1,210 @@ +package services + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/Giulio2002/bls" + gokzg4844 "github.com/crate-crypto/go-kzg-4844" + "github.com/ledgerwatch/erigon-lib/crypto/kzg" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/fork" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/log/v3" +) + +type blobSidecarService struct { + forkchoiceStore forkchoice.ForkChoiceStorage + beaconCfg *clparams.BeaconChainConfig + syncedDataManager *synced_data.SyncedDataManager + + blobSidecarsScheduledForLaterExecution sync.Map + ethClock eth_clock.EthereumClock + test bool +} + +type blobSidecarJob struct { + blobSidecar *cltypes.BlobSidecar + creationTime time.Time +} + +// NewBlobSidecarService creates a new blob sidecar service +func NewBlobSidecarService( + ctx context.Context, + beaconCfg *clparams.BeaconChainConfig, + forkchoiceStore forkchoice.ForkChoiceStorage, + syncedDataManager *synced_data.SyncedDataManager, + ethClock eth_clock.EthereumClock, + test bool, +) BlobSidecarsService { + b := &blobSidecarService{ + beaconCfg: beaconCfg, + forkchoiceStore: forkchoiceStore, + syncedDataManager: syncedDataManager, + test: test, + ethClock: ethClock, + } + go b.loop(ctx) + return b +} + +// ProcessMessage processes a blob sidecar message +func (b *blobSidecarService) ProcessMessage(ctx context.Context, subnetId *uint64, msg *cltypes.BlobSidecar) error { + if b.test { + return b.verifyAndStoreBlobSidecar(nil, msg) + } + + headState := b.syncedDataManager.HeadState() + if headState == nil { + b.scheduleBlobSidecarForLaterExecution(msg) + return ErrIgnore + } + + // [REJECT] The sidecar's index is consistent with MAX_BLOBS_PER_BLOCK -- i.e. blob_sidecar.index < MAX_BLOBS_PER_BLOCK. + if msg.Index >= b.beaconCfg.MaxBlobsPerBlock { + return fmt.Errorf("blob index out of range") + } + sidecarSubnetIndex := msg.Index % b.beaconCfg.MaxBlobsPerBlock + if sidecarSubnetIndex != *subnetId { + return ErrBlobIndexOutOfRange + } + currentSlot := b.ethClock.GetCurrentSlot() + sidecarSlot := msg.SignedBlockHeader.Header.Slot + // [IGNORE] The block is not from a future slot (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance) -- i.e. validate that + //signed_beacon_block.message.slot <= current_slot (a client MAY queue future blocks for processing at the appropriate slot). + if currentSlot < sidecarSlot && !b.ethClock.IsSlotCurrentSlotWithMaximumClockDisparity(sidecarSlot) { + return ErrIgnore + } + + blockRoot, err := msg.SignedBlockHeader.Header.HashSSZ() + if err != nil { + return err + } + // Do not bother with blocks processed by fork choice already. + if _, has := b.forkchoiceStore.GetHeader(blockRoot); has { + return ErrIgnore + } + + parentHeader, has := b.forkchoiceStore.GetHeader(msg.SignedBlockHeader.Header.ParentRoot) + if !has { + b.scheduleBlobSidecarForLaterExecution(msg) + return ErrIgnore + } + if msg.SignedBlockHeader.Header.Slot <= parentHeader.Slot { + return ErrInvalidSidecarSlot + } + + return b.verifyAndStoreBlobSidecar(headState, msg) +} + +func (b *blobSidecarService) verifyAndStoreBlobSidecar(headState *state.CachingBeaconState, msg *cltypes.BlobSidecar) error { + kzgCtx := kzg.Ctx() + + if !b.test && !cltypes.VerifyCommitmentInclusionProof(msg.KzgCommitment, msg.CommitmentInclusionProof, msg.Index, + clparams.DenebVersion, msg.SignedBlockHeader.Header.BodyRoot) { + return ErrCommitmentsInclusionProofFailed + } + + if err := kzgCtx.VerifyBlobKZGProof(gokzg4844.Blob(msg.Blob), gokzg4844.KZGCommitment(msg.KzgCommitment), gokzg4844.KZGProof(msg.KzgProof)); err != nil { + return fmt.Errorf("blob KZG proof verification failed: %v", err) + } + if !b.test { + if err := b.verifySidecarsSignature(headState, msg.SignedBlockHeader); err != nil { + return err + } + } + // operation is not thread safe from here. + return b.forkchoiceStore.AddPreverifiedBlobSidecar(msg) +} + +func (b *blobSidecarService) verifySidecarsSignature(headState *state.CachingBeaconState, header *cltypes.SignedBeaconBlockHeader) error { + parentHeader, ok := b.forkchoiceStore.GetHeader(header.Header.ParentRoot) + if !ok { + return fmt.Errorf("parent header not found") + } + currentVersion := b.beaconCfg.GetCurrentStateVersion(parentHeader.Slot / b.beaconCfg.SlotsPerEpoch) + forkVersion := b.beaconCfg.GetForkVersionByVersion(currentVersion) + domain, err := fork.ComputeDomain(b.beaconCfg.DomainBeaconProposer[:], utils.Uint32ToBytes4(forkVersion), headState.GenesisValidatorsRoot()) + if err != nil { + return err + } + sigRoot, err := fork.ComputeSigningRoot(header.Header, domain) + if err != nil { + return err + } + pk, err := headState.ValidatorPublicKey(int(header.Header.ProposerIndex)) + if err != nil { + return err + } + if ok, err = bls.Verify(header.Signature[:], sigRoot[:], pk[:]); err != nil { + return err + } + if !ok { + return fmt.Errorf("blob signature validation: signature not valid") + } + return nil +} + +func (b *blobSidecarService) scheduleBlobSidecarForLaterExecution(blobSidecar *cltypes.BlobSidecar) { + blobSidecarJob := &blobSidecarJob{ + blobSidecar: blobSidecar, + creationTime: time.Now(), + } + blobSidecarHash, err := blobSidecar.HashSSZ() + if err != nil { + return + } + b.blobSidecarsScheduledForLaterExecution.Store(blobSidecarHash, blobSidecarJob) +} + +// loop is the main loop of the block service +func (b *blobSidecarService) loop(ctx context.Context) { + ticker := time.NewTicker(blobJobsIntervalTick) + defer ticker.Stop() + if b.test { + return + } + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + } + headState := b.syncedDataManager.HeadState() + if headState == nil { + continue + } + b.blobSidecarsScheduledForLaterExecution.Range(func(key, value any) bool { + job := value.(*blobSidecarJob) + // check if it has expired + if time.Since(job.creationTime) > blobJobExpiry { + b.blobSidecarsScheduledForLaterExecution.Delete(key.([32]byte)) + return true + } + blockRoot, err := job.blobSidecar.SignedBlockHeader.Header.HashSSZ() + if err != nil { + log.Debug("blob sidecar verification failed", "err", err) + return true + } + if _, has := b.forkchoiceStore.GetHeader(blockRoot); has { + b.blobSidecarsScheduledForLaterExecution.Delete(key.([32]byte)) + return true + } + + if err := b.verifyAndStoreBlobSidecar(headState, job.blobSidecar); err != nil { + log.Trace("blob sidecar verification failed", "err", err, + "slot", job.blobSidecar.SignedBlockHeader.Header.Slot) + return true + } + b.blobSidecarsScheduledForLaterExecution.Delete(key.([32]byte)) + return true + }) + } +} diff --git a/cl/phase1/network/services/blob_sidecar_service_test.go b/cl/phase1/network/services/blob_sidecar_service_test.go new file mode 100644 index 00000000000..e2768e1ee96 --- /dev/null +++ b/cl/phase1/network/services/blob_sidecar_service_test.go @@ -0,0 +1,183 @@ +package services + +import ( + "context" + _ "embed" + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + + "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" +) + +//go:embed test_data/blob_sidecar_service_blob.ssz_snappy +var blobSidecarServiceBlob []byte + +//go:embed test_data/blob_sidecar_service_block.ssz_snappy +var blobSidecarServiceBlock []byte + +//go:embed test_data/blob_sidecar_service_state.ssz_snappy +var blobSidecarServiceState []byte + +func getObjectsForBlobSidecarServiceTests(t *testing.T) (*state.CachingBeaconState, *cltypes.SignedBeaconBlock, *cltypes.BlobSidecar) { + stateObj := state.New(&clparams.MainnetBeaconConfig) + block := cltypes.NewSignedBeaconBlock(&clparams.MainnetBeaconConfig) + blob := cltypes.Blob{} + require.NoError(t, utils.DecodeSSZSnappy(stateObj, blobSidecarServiceState, int(clparams.DenebVersion))) + require.NoError(t, utils.DecodeSSZSnappy(block, blobSidecarServiceBlock, int(clparams.DenebVersion))) + require.NoError(t, utils.DecodeSSZSnappy(&blob, blobSidecarServiceBlob, int(clparams.DenebVersion))) + var proof libcommon.Bytes48 + proofStr := "0xb5a64254a75a8dd4e5fde529e2f657de268fcb9eedff43363c946f40bbf36ef16ee13a890504a7a8c4f689085146ad51" + proofBytes := common.Hex2Bytes(proofStr[2:]) + copy(proof[:], proofBytes) + sidecar := &cltypes.BlobSidecar{ + Index: uint64(0), + SignedBlockHeader: block.SignedBeaconBlockHeader(), + Blob: blob, + KzgCommitment: common.Bytes48(*block.Block.Body.BlobKzgCommitments.Get(0)), + KzgProof: proof, + } + return stateObj, block, sidecar +} + +func setupBlobSidecarService(t *testing.T, ctrl *gomock.Controller, test bool) (BlobSidecarsService, *synced_data.SyncedDataManager, *eth_clock.MockEthereumClock, *mock_services.ForkChoiceStorageMock) { + ctx := context.Background() + ctx2, cn := context.WithTimeout(ctx, 1) + cn() + cfg := &clparams.MainnetBeaconConfig + syncedDataManager := synced_data.NewSyncedDataManager(true, cfg) + ethClock := eth_clock.NewMockEthereumClock(ctrl) + forkchoiceMock := mock_services.NewForkChoiceStorageMock(t) + blockService := NewBlobSidecarService(ctx2, cfg, forkchoiceMock, syncedDataManager, ethClock, test) + return blockService, syncedDataManager, ethClock, forkchoiceMock +} + +func TestBlobServiceUnsynced(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blobService, _, _, _ := setupBlobSidecarService(t, ctrl, false) + + require.Error(t, blobService.ProcessMessage(context.Background(), nil, &cltypes.BlobSidecar{})) +} + +func TestBlobServiceInvalidIndex(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blobService, syncedData, _, _ := setupBlobSidecarService(t, ctrl, false) + stateObj, _, _ := getObjectsForBlobSidecarServiceTests(t) + syncedData.OnHeadState(stateObj) + + require.Error(t, blobService.ProcessMessage(context.Background(), nil, &cltypes.BlobSidecar{ + Index: 99999, + })) +} + +func TestBlobServiceInvalidSubnet(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blobService, syncedData, _, _ := setupBlobSidecarService(t, ctrl, false) + stateObj, _, _ := getObjectsForBlobSidecarServiceTests(t) + syncedData.OnHeadState(stateObj) + sn := uint64(99999) + + require.Error(t, blobService.ProcessMessage(context.Background(), &sn, &cltypes.BlobSidecar{ + Index: 0, + })) +} + +func TestBlobServiceBadTimings(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blobService, syncedData, ethClock, _ := setupBlobSidecarService(t, ctrl, false) + stateObj, _, blobSidecar := getObjectsForBlobSidecarServiceTests(t) + syncedData.OnHeadState(stateObj) + sn := uint64(0) + + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(false).AnyTimes() + + require.Error(t, blobService.ProcessMessage(context.Background(), &sn, blobSidecar)) +} + +func TestBlobServiceAlreadyHave(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blobService, syncedData, ethClock, fcu := setupBlobSidecarService(t, ctrl, false) + stateObj, _, blobSidecar := getObjectsForBlobSidecarServiceTests(t) + syncedData.OnHeadState(stateObj) + sn := uint64(0) + sidecarRoot, err := blobSidecar.SignedBlockHeader.Header.HashSSZ() + require.NoError(t, err) + + fcu.Headers[sidecarRoot] = blobSidecar.SignedBlockHeader.Header.Copy() + + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + + require.Error(t, blobService.ProcessMessage(context.Background(), &sn, blobSidecar)) +} + +func TestBlobServiceDontHaveParentRoot(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blobService, syncedData, ethClock, _ := setupBlobSidecarService(t, ctrl, false) + stateObj, _, blobSidecar := getObjectsForBlobSidecarServiceTests(t) + syncedData.OnHeadState(stateObj) + sn := uint64(0) + + // fcu.Headers[blobSidecar.SignedBlockHeader.Header.ParentRoot] = blobSidecar.SignedBlockHeader.Header.Copy() + + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + + require.Error(t, blobService.ProcessMessage(context.Background(), &sn, blobSidecar)) +} + +func TestBlobServiceInvalidSidecarSlot(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blobService, syncedData, ethClock, fcu := setupBlobSidecarService(t, ctrl, false) + stateObj, _, blobSidecar := getObjectsForBlobSidecarServiceTests(t) + syncedData.OnHeadState(stateObj) + sn := uint64(0) + + fcu.Headers[blobSidecar.SignedBlockHeader.Header.ParentRoot] = blobSidecar.SignedBlockHeader.Header.Copy() + + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + + require.Error(t, blobService.ProcessMessage(context.Background(), &sn, blobSidecar)) +} + +func TestBlobServiceSuccess(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blobService, syncedData, ethClock, fcu := setupBlobSidecarService(t, ctrl, true) + stateObj, _, blobSidecar := getObjectsForBlobSidecarServiceTests(t) + syncedData.OnHeadState(stateObj) + sn := uint64(0) + + fcu.Headers[blobSidecar.SignedBlockHeader.Header.ParentRoot] = blobSidecar.SignedBlockHeader.Header.Copy() + fcu.Headers[blobSidecar.SignedBlockHeader.Header.ParentRoot].Slot-- + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + + require.NoError(t, blobService.ProcessMessage(context.Background(), &sn, blobSidecar)) +} diff --git a/cl/phase1/network/services/block_service.go b/cl/phase1/network/services/block_service.go new file mode 100644 index 00000000000..f16b07774ec --- /dev/null +++ b/cl/phase1/network/services/block_service.go @@ -0,0 +1,236 @@ +package services + +import ( + "context" + "strconv" + "sync" + "time" + + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/log/v3" + + libcommon "github.com/ledgerwatch/erigon-lib/common" +) + +type proposerIndexAndSlot struct { + proposerIndex uint64 + slot uint64 +} + +type blockJob struct { + block *cltypes.SignedBeaconBlock + creationTime time.Time +} + +type blockService struct { + forkchoiceStore forkchoice.ForkChoiceStorage + syncedData *synced_data.SyncedDataManager + ethClock eth_clock.EthereumClock + beaconCfg *clparams.BeaconChainConfig + + // reference: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#beacon_block + seenBlocksCache *lru.Cache[proposerIndexAndSlot, struct{}] + + // blocks that should be scheduled for later execution (e.g missing blobs). + emitter *beaconevents.Emitters + blocksScheduledForLaterExecution sync.Map + // store the block in db + db kv.RwDB +} + +// NewBlockService creates a new block service +func NewBlockService( + ctx context.Context, + db kv.RwDB, + forkchoiceStore forkchoice.ForkChoiceStorage, + syncedData *synced_data.SyncedDataManager, + ethClock eth_clock.EthereumClock, + beaconCfg *clparams.BeaconChainConfig, + emitter *beaconevents.Emitters, +) Service[*cltypes.SignedBeaconBlock] { + seenBlocksCache, err := lru.New[proposerIndexAndSlot, struct{}]("seenblocks", seenBlockCacheSize) + if err != nil { + panic(err) + } + b := &blockService{ + forkchoiceStore: forkchoiceStore, + syncedData: syncedData, + ethClock: ethClock, + beaconCfg: beaconCfg, + seenBlocksCache: seenBlocksCache, + emitter: emitter, + db: db, + } + go b.loop(ctx) + return b +} + +// ProcessMessage processes a block message according to https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#beacon_block +func (b *blockService) ProcessMessage(ctx context.Context, _ *uint64, msg *cltypes.SignedBeaconBlock) error { + headState := b.syncedData.HeadState() + if headState == nil { + b.scheduleBlockForLaterProcessing(msg) + return ErrIgnore + } + + blockEpoch := msg.Block.Slot / b.beaconCfg.SlotsPerEpoch + + currentSlot := b.ethClock.GetCurrentSlot() + + // [IGNORE] The block is not from a future slot (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance) -- i.e. validate that + //signed_beacon_block.message.slot <= current_slot (a client MAY queue future blocks for processing at the appropriate slot). + if currentSlot < msg.Block.Slot && !b.ethClock.IsSlotCurrentSlotWithMaximumClockDisparity(msg.Block.Slot) { + return ErrIgnore + } + // [IGNORE] The block is from a slot greater than the latest finalized slot -- i.e. validate that signed_beacon_block.message.slot > compute_start_slot_at_epoch(store.finalized_checkpoint.epoch) + // (a client MAY choose to validate and store such blocks for additional purposes -- e.g. slashing detection, archive nodes, etc). + if blockEpoch <= headState.FinalizedCheckpoint().Epoch() { + return ErrIgnore + } + + // [IGNORE] The block is the first block with valid signature received for the proposer for the slot, signed_beacon_block.message.slot. + seenCacheKey := proposerIndexAndSlot{ + proposerIndex: msg.Block.ProposerIndex, + slot: msg.Block.Slot, + } + if b.seenBlocksCache.Contains(seenCacheKey) { + return ErrIgnore + } + + // [IGNORE] The block's parent (defined by block.parent_root) has been seen (via both gossip and non-gossip sources) (a client MAY queue blocks for processing once the parent block is retrieved). + parentHeader, ok := b.forkchoiceStore.GetHeader(msg.Block.ParentRoot) + if !ok { + b.scheduleBlockForLaterProcessing(msg) + return ErrIgnore + } + if parentHeader.Slot >= msg.Block.Slot { + return ErrBlockYoungerThanParent + } + + // [REJECT] The length of KZG commitments is less than or equal to the limitation defined in Consensus Layer -- i.e. validate that len(body.signed_beacon_block.message.blob_kzg_commitments) <= MAX_BLOBS_PER_BLOCK + if msg.Block.Body.BlobKzgCommitments.Len() > int(b.beaconCfg.MaxBlobsPerBlock) { + return ErrInvalidCommitmentsCount + } + b.publishBlockEvent(msg) + + // the rest of the validation is done in the forkchoice store + if err := b.processAndStoreBlock(ctx, msg); err != nil { + if err == forkchoice.ErrEIP4844DataNotAvailable { + b.scheduleBlockForLaterProcessing(msg) + return ErrIgnore + } + return err + } + return nil +} + +// publishBlockEvent publishes a block event +func (b *blockService) publishBlockEvent(block *cltypes.SignedBeaconBlock) { + if b.emitter == nil { + return + } + blockRoot, err := block.Block.HashSSZ() + if err != nil { + log.Debug("Failed to hash block", "block", block, "error", err) + return + } + // publish block to event handler + b.emitter.Publish("block", map[string]any{ + "slot": strconv.Itoa(int(block.Block.Slot)), + "block": libcommon.Hash(blockRoot), + "execution_optimistic": false, + }) +} + +// scheduleBlockForLaterProcessing schedules a block for later processing +func (b *blockService) scheduleBlockForLaterProcessing(block *cltypes.SignedBeaconBlock) { + log.Debug("Block scheduled for later processing", "block", block.Block.Slot) + blockRoot, err := block.Block.HashSSZ() + if err != nil { + log.Debug("Failed to hash block", "block", block, "error", err) + return + } + + b.blocksScheduledForLaterExecution.Store(blockRoot, &blockJob{ + block: block, + creationTime: time.Now(), + }) +} + +// processAndStoreBlock processes and stores a block +func (b *blockService) processAndStoreBlock(ctx context.Context, block *cltypes.SignedBeaconBlock) error { + if err := b.db.Update(ctx, func(tx kv.RwTx) error { + return beacon_indicies.WriteBeaconBlockAndIndicies(ctx, tx, block, false) + }); err != nil { + return err + } + if err := b.forkchoiceStore.OnBlock(ctx, block, true, true, true); err != nil { + return err + } + go b.importBlockOperations(block) + return b.db.Update(ctx, func(tx kv.RwTx) error { + return beacon_indicies.WriteHighestFinalized(tx, b.forkchoiceStore.FinalizedSlot()) + }) + +} + +// importBlockOperations imports block operations in parallel +func (b *blockService) importBlockOperations(block *cltypes.SignedBeaconBlock) { + defer func() { // Would prefer this not to crash but rather log the error + r := recover() + if r != nil { + log.Warn("recovered from panic", "err", r) + } + }() + start := time.Now() + block.Block.Body.Attestations.Range(func(idx int, a *solid.Attestation, total int) bool { + if err := b.forkchoiceStore.OnAttestation(a, true, false); err != nil { + log.Debug("bad attestation received", "err", err) + } + + return true + }) + block.Block.Body.AttesterSlashings.Range(func(idx int, a *cltypes.AttesterSlashing, total int) bool { + if err := b.forkchoiceStore.OnAttesterSlashing(a, false); err != nil { + log.Debug("bad attester slashing received", "err", err) + } + return true + }) + log.Debug("import operations", "time", time.Since(start)) +} + +// loop is the main loop of the block service +func (b *blockService) loop(ctx context.Context) { + ticker := time.NewTicker(blockJobsIntervalTick) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + } + b.blocksScheduledForLaterExecution.Range(func(key, value any) bool { + blockJob := value.(*blockJob) + // check if it has expired + if time.Since(blockJob.creationTime) > blockJobExpiry { + b.blocksScheduledForLaterExecution.Delete(key.([32]byte)) + return true + } + if err := b.processAndStoreBlock(ctx, blockJob.block); err != nil { + log.Trace("Failed to process and store block", "block", blockJob.block, "error", err) + return true + } + b.blocksScheduledForLaterExecution.Delete(key.([32]byte)) + return true + }) + } +} diff --git a/cl/phase1/network/services/block_service_test.go b/cl/phase1/network/services/block_service_test.go new file mode 100644 index 00000000000..402912ecb05 --- /dev/null +++ b/cl/phase1/network/services/block_service_test.go @@ -0,0 +1,137 @@ +package services + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + + "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" +) + +func setupBlockService(t *testing.T, ctrl *gomock.Controller) (BlockService, *synced_data.SyncedDataManager, *eth_clock.MockEthereumClock, *mock_services.ForkChoiceStorageMock) { + db := memdb.NewTestDB(t) + cfg := &clparams.MainnetBeaconConfig + syncedDataManager := synced_data.NewSyncedDataManager(true, cfg) + ethClock := eth_clock.NewMockEthereumClock(ctrl) + forkchoiceMock := mock_services.NewForkChoiceStorageMock(t) + blockService := NewBlockService(context.Background(), db, forkchoiceMock, syncedDataManager, ethClock, cfg, nil) + return blockService, syncedDataManager, ethClock, forkchoiceMock +} + +func TestBlockServiceUnsynced(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blocks, _, _ := tests.GetBellatrixRandom() + + blockService, _, _, _ := setupBlockService(t, ctrl) + require.Error(t, blockService.ProcessMessage(context.Background(), nil, blocks[0])) +} + +func TestBlockServiceIgnoreSlot(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blocks, _, post := tests.GetBellatrixRandom() + + blockService, syncedData, ethClock, _ := setupBlockService(t, ctrl) + syncedData.OnHeadState(post) + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(false).AnyTimes() + + require.Error(t, blockService.ProcessMessage(context.Background(), nil, blocks[0])) +} + +func TestBlockServiceLowerThanFinalizedCheckpoint(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blocks, _, post := tests.GetBellatrixRandom() + + blockService, syncedData, ethClock, fcu := setupBlockService(t, ctrl) + syncedData.OnHeadState(post) + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + fcu.FinalizedCheckpointVal = post.FinalizedCheckpoint() + blocks[0].Block.Slot = 0 + + require.Error(t, blockService.ProcessMessage(context.Background(), nil, blocks[0])) +} + +func TestBlockServiceUnseenParentRoot(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blocks, _, post := tests.GetBellatrixRandom() + + blockService, syncedData, ethClock, fcu := setupBlockService(t, ctrl) + syncedData.OnHeadState(post) + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + fcu.FinalizedCheckpointVal = post.FinalizedCheckpoint() + + require.Error(t, blockService.ProcessMessage(context.Background(), nil, blocks[0])) +} + +func TestBlockServiceYoungerThanParent(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blocks, _, post := tests.GetBellatrixRandom() + + blockService, syncedData, ethClock, fcu := setupBlockService(t, ctrl) + syncedData.OnHeadState(post) + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + fcu.FinalizedCheckpointVal = post.FinalizedCheckpoint() + fcu.Headers[blocks[1].Block.ParentRoot] = blocks[0].SignedBeaconBlockHeader().Header.Copy() + blocks[1].Block.Slot-- + + require.Error(t, blockService.ProcessMessage(context.Background(), nil, blocks[1])) +} + +func TestBlockServiceInvalidCommitmentsPerBlock(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blocks, _, post := tests.GetBellatrixRandom() + + blockService, syncedData, ethClock, fcu := setupBlockService(t, ctrl) + syncedData.OnHeadState(post) + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + fcu.FinalizedCheckpointVal = post.FinalizedCheckpoint() + fcu.Headers[blocks[1].Block.ParentRoot] = blocks[0].SignedBeaconBlockHeader().Header.Copy() + blocks[1].Block.Body.BlobKzgCommitments = solid.NewStaticListSSZ[*cltypes.KZGCommitment](100, 48) + // Append lots of commitments + for i := 0; i < 100; i++ { + blocks[1].Block.Body.BlobKzgCommitments.Append(&cltypes.KZGCommitment{}) + } + require.Error(t, blockService.ProcessMessage(context.Background(), nil, blocks[1])) +} + +func TestBlockServiceSuccess(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + blocks, _, post := tests.GetBellatrixRandom() + + blockService, syncedData, ethClock, fcu := setupBlockService(t, ctrl) + syncedData.OnHeadState(post) + ethClock.EXPECT().GetCurrentSlot().Return(uint64(0)).AnyTimes() + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + fcu.FinalizedCheckpointVal = post.FinalizedCheckpoint() + fcu.Headers[blocks[1].Block.ParentRoot] = blocks[0].SignedBeaconBlockHeader().Header.Copy() + blocks[1].Block.Body.BlobKzgCommitments = solid.NewStaticListSSZ[*cltypes.KZGCommitment](100, 48) + + require.NoError(t, blockService.ProcessMessage(context.Background(), nil, blocks[1])) +} diff --git a/cl/phase1/network/services/bls_to_execution_change_service.go b/cl/phase1/network/services/bls_to_execution_change_service.go new file mode 100644 index 00000000000..0f9ba191946 --- /dev/null +++ b/cl/phase1/network/services/bls_to_execution_change_service.go @@ -0,0 +1,110 @@ +package services + +import ( + "bytes" + "context" + "fmt" + + "github.com/Giulio2002/bls" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/fork" + "github.com/ledgerwatch/erigon/cl/pool" + "github.com/ledgerwatch/erigon/cl/utils" +) + +type blsToExecutionChangeService struct { + operationsPool pool.OperationsPool + emitters *beaconevents.Emitters + syncedDataManager *synced_data.SyncedDataManager + beaconCfg *clparams.BeaconChainConfig +} + +func NewBLSToExecutionChangeService( + operationsPool pool.OperationsPool, + emitters *beaconevents.Emitters, + syncedDataManager *synced_data.SyncedDataManager, + beaconCfg *clparams.BeaconChainConfig, +) BLSToExecutionChangeService { + return &blsToExecutionChangeService{ + operationsPool: operationsPool, + emitters: emitters, + syncedDataManager: syncedDataManager, + beaconCfg: beaconCfg, + } +} + +func (s *blsToExecutionChangeService) ProcessMessage(ctx context.Context, subnet *uint64, msg *cltypes.SignedBLSToExecutionChange) error { + // https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/p2p-interface.md#bls_to_execution_change + defer s.emitters.Publish("bls_to_execution_change", msg) + // [IGNORE] The signed_bls_to_execution_change is the first valid signed bls to execution change received + // for the validator with index signed_bls_to_execution_change.message.validator_index. + if s.operationsPool.BLSToExecutionChangesPool.Has(msg.Signature) { + return ErrIgnore + } + change := msg.Message + state := s.syncedDataManager.HeadState() + if state == nil { + return ErrIgnore + } + + // [IGNORE] current_epoch >= CAPELLA_FORK_EPOCH, where current_epoch is defined by the current wall-clock time. + if !(state.Version() >= clparams.CapellaVersion) { + return ErrIgnore + } + // ref: https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md#new-process_bls_to_execution_change + // assert address_change.validator_index < len(state.validators) + validator, err := state.ValidatorForValidatorIndex(int(change.ValidatorIndex)) + if err != nil { + return fmt.Errorf("unable to retrieve state: %v", err) + } + wc := validator.WithdrawalCredentials() + + // assert validator.withdrawal_credentials[:1] == BLS_WITHDRAWAL_PREFIX + if wc[0] != byte(s.beaconCfg.BLSWithdrawalPrefixByte) { + return fmt.Errorf("invalid withdrawal credentials prefix") + } + + // assert validator.withdrawal_credentials[1:] == hash(address_change.from_bls_pubkey)[1:] + // Perform full validation if requested. + // Check the validator's withdrawal credentials against the provided message. + hashedFrom := utils.Sha256(change.From[:]) + if !bytes.Equal(hashedFrom[1:], wc[1:]) { + return fmt.Errorf("invalid withdrawal credentials") + } + + // assert bls.Verify(address_change.from_bls_pubkey, signing_root, signed_address_change.signature) + genesisValidatorRoot := state.GenesisValidatorsRoot() + domain, err := fork.ComputeDomain(s.beaconCfg.DomainBLSToExecutionChange[:], utils.Uint32ToBytes4(uint32(s.beaconCfg.GenesisForkVersion)), genesisValidatorRoot) + if err != nil { + return err + } + signedRoot, err := fork.ComputeSigningRoot(change, domain) + if err != nil { + return err + } + valid, err := bls.Verify(msg.Signature[:], signedRoot[:], change.From[:]) + if err != nil { + return err + } + if !valid { + return fmt.Errorf("invalid signature") + } + + // validator.withdrawal_credentials = ( + // ETH1_ADDRESS_WITHDRAWAL_PREFIX + // + b'\x00' * 11 + // + address_change.to_execution_address + // ) + newWc := libcommon.Hash{} + newWc[0] = byte(s.beaconCfg.ETH1AddressWithdrawalPrefixByte) + copy(wc[1:], make([]byte, 11)) + copy(wc[12:], change.To[:]) + state.SetWithdrawalCredentialForValidatorAtIndex(int(change.ValidatorIndex), newWc) + + s.operationsPool.BLSToExecutionChangesPool.Insert(msg.Signature, msg) + return nil +} diff --git a/cl/phase1/network/services/constants.go b/cl/phase1/network/services/constants.go new file mode 100644 index 00000000000..2540c34b18b --- /dev/null +++ b/cl/phase1/network/services/constants.go @@ -0,0 +1,29 @@ +package services + +import ( + "errors" + "time" +) + +const ( + validatorAttestationCacheSize = 100_000 + proposerSlashingCacheSize = 100 + seenBlockCacheSize = 1000 // SeenBlockCacheSize is the size of the cache for seen blocks. + blockJobsIntervalTick = 50 * time.Millisecond + blobJobsIntervalTick = 5 * time.Millisecond + singleAttestationIntervalTick = 10 * time.Millisecond + attestationJobsIntervalTick = 100 * time.Millisecond + blockJobExpiry = 7 * time.Minute + blobJobExpiry = 7 * time.Minute + attestationJobExpiry = 30 * time.Minute + singleAttestationJobExpiry = 6 * time.Second +) + +var ( + ErrIgnore = errors.New("ignore") // ErrIgnore is used to indicate that the message should be ignored. + ErrBlockYoungerThanParent = errors.New("block is younger than parent") + ErrInvalidCommitmentsCount = errors.New("invalid commitments count") + ErrCommitmentsInclusionProofFailed = errors.New("commitments inclusion proof failed") + ErrInvalidSidecarSlot = errors.New("invalid sidecar slot") + ErrBlobIndexOutOfRange = errors.New("blob index out of range") +) diff --git a/cl/phase1/network/services/interface.go b/cl/phase1/network/services/interface.go new file mode 100644 index 00000000000..62be577b940 --- /dev/null +++ b/cl/phase1/network/services/interface.go @@ -0,0 +1,41 @@ +package services + +import ( + "context" + + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" +) + +// Note: BlobSidecarService and BlockService are tested in spectests + +type Service[T any] interface { + ProcessMessage(ctx context.Context, subnet *uint64, msg T) error +} + +//go:generate mockgen -typed=true -destination=./mock_services/block_service_mock.go -package=mock_services . BlockService +type BlockService Service[*cltypes.SignedBeaconBlock] + +//go:generate mockgen -typed=true -destination=./mock_services/blob_sidecars_service_mock.go -package=mock_services . BlobSidecarsService +type BlobSidecarsService Service[*cltypes.BlobSidecar] + +//go:generate mockgen -typed=true -destination=./mock_services/sync_committee_messages_service_mock.go -package=mock_services . SyncCommitteeMessagesService +type SyncCommitteeMessagesService Service[*cltypes.SyncCommitteeMessage] + +//go:generate mockgen -typed=true -destination=./mock_services/sync_contribution_service_mock.go -package=mock_services . SyncContributionService +type SyncContributionService Service[*cltypes.SignedContributionAndProof] + +//go:generate mockgen -typed=true -destination=./mock_services/aggregate_and_proof_service_mock.go -package=mock_services . AggregateAndProofService +type AggregateAndProofService Service[*cltypes.SignedAggregateAndProof] + +//go:generate mockgen -typed=true -destination=./mock_services/attestation_service_mock.go -package=mock_services . AttestationService +type AttestationService Service[*solid.Attestation] + +//go:generate mockgen -typed=true -destination=./mock_services/voluntary_exit_service_mock.go -package=mock_services . VoluntaryExitService +type VoluntaryExitService Service[*cltypes.SignedVoluntaryExit] + +//go:generate mockgen -typed=true -destination=./mock_services/bls_to_execution_change_service_mock.go -package=mock_services . BLSToExecutionChangeService +type BLSToExecutionChangeService Service[*cltypes.SignedBLSToExecutionChange] + +//go:generate mockgen -typed=true -destination=./mock_services/proposer_slashing_service_mock.go -package=mock_services . ProposerSlashingService +type ProposerSlashingService Service[*cltypes.ProposerSlashing] diff --git a/cl/phase1/network/services/mock_services/aggregate_and_proof_service_mock.go b/cl/phase1/network/services/mock_services/aggregate_and_proof_service_mock.go new file mode 100644 index 00000000000..7d0eff95ca9 --- /dev/null +++ b/cl/phase1/network/services/mock_services/aggregate_and_proof_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: AggregateAndProofService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/aggregate_and_proof_service_mock.go -package=mock_services . AggregateAndProofService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + gomock "go.uber.org/mock/gomock" +) + +// MockAggregateAndProofService is a mock of AggregateAndProofService interface. +type MockAggregateAndProofService struct { + ctrl *gomock.Controller + recorder *MockAggregateAndProofServiceMockRecorder +} + +// MockAggregateAndProofServiceMockRecorder is the mock recorder for MockAggregateAndProofService. +type MockAggregateAndProofServiceMockRecorder struct { + mock *MockAggregateAndProofService +} + +// NewMockAggregateAndProofService creates a new mock instance. +func NewMockAggregateAndProofService(ctrl *gomock.Controller) *MockAggregateAndProofService { + mock := &MockAggregateAndProofService{ctrl: ctrl} + mock.recorder = &MockAggregateAndProofServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAggregateAndProofService) EXPECT() *MockAggregateAndProofServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockAggregateAndProofService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *cltypes.SignedAggregateAndProof) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockAggregateAndProofServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockAggregateAndProofServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockAggregateAndProofService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockAggregateAndProofServiceProcessMessageCall{Call: call} +} + +// MockAggregateAndProofServiceProcessMessageCall wrap *gomock.Call +type MockAggregateAndProofServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockAggregateAndProofServiceProcessMessageCall) Return(arg0 error) *MockAggregateAndProofServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockAggregateAndProofServiceProcessMessageCall) Do(f func(context.Context, *uint64, *cltypes.SignedAggregateAndProof) error) *MockAggregateAndProofServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockAggregateAndProofServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *cltypes.SignedAggregateAndProof) error) *MockAggregateAndProofServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/mock_services/attestation_service_mock.go b/cl/phase1/network/services/mock_services/attestation_service_mock.go new file mode 100644 index 00000000000..537da583a5d --- /dev/null +++ b/cl/phase1/network/services/mock_services/attestation_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: AttestationService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/attestation_service_mock.go -package=mock_services . AttestationService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + solid "github.com/ledgerwatch/erigon/cl/cltypes/solid" + gomock "go.uber.org/mock/gomock" +) + +// MockAttestationService is a mock of AttestationService interface. +type MockAttestationService struct { + ctrl *gomock.Controller + recorder *MockAttestationServiceMockRecorder +} + +// MockAttestationServiceMockRecorder is the mock recorder for MockAttestationService. +type MockAttestationServiceMockRecorder struct { + mock *MockAttestationService +} + +// NewMockAttestationService creates a new mock instance. +func NewMockAttestationService(ctrl *gomock.Controller) *MockAttestationService { + mock := &MockAttestationService{ctrl: ctrl} + mock.recorder = &MockAttestationServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAttestationService) EXPECT() *MockAttestationServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockAttestationService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *solid.Attestation) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockAttestationServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockAttestationServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockAttestationService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockAttestationServiceProcessMessageCall{Call: call} +} + +// MockAttestationServiceProcessMessageCall wrap *gomock.Call +type MockAttestationServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockAttestationServiceProcessMessageCall) Return(arg0 error) *MockAttestationServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockAttestationServiceProcessMessageCall) Do(f func(context.Context, *uint64, *solid.Attestation) error) *MockAttestationServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockAttestationServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *solid.Attestation) error) *MockAttestationServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/mock_services/blob_sidecars_service_mock.go b/cl/phase1/network/services/mock_services/blob_sidecars_service_mock.go new file mode 100644 index 00000000000..c27b577b97e --- /dev/null +++ b/cl/phase1/network/services/mock_services/blob_sidecars_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: BlobSidecarsService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/blob_sidecars_service_mock.go -package=mock_services . BlobSidecarsService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + gomock "go.uber.org/mock/gomock" +) + +// MockBlobSidecarsService is a mock of BlobSidecarsService interface. +type MockBlobSidecarsService struct { + ctrl *gomock.Controller + recorder *MockBlobSidecarsServiceMockRecorder +} + +// MockBlobSidecarsServiceMockRecorder is the mock recorder for MockBlobSidecarsService. +type MockBlobSidecarsServiceMockRecorder struct { + mock *MockBlobSidecarsService +} + +// NewMockBlobSidecarsService creates a new mock instance. +func NewMockBlobSidecarsService(ctrl *gomock.Controller) *MockBlobSidecarsService { + mock := &MockBlobSidecarsService{ctrl: ctrl} + mock.recorder = &MockBlobSidecarsServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockBlobSidecarsService) EXPECT() *MockBlobSidecarsServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockBlobSidecarsService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *cltypes.BlobSidecar) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockBlobSidecarsServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockBlobSidecarsServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockBlobSidecarsService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockBlobSidecarsServiceProcessMessageCall{Call: call} +} + +// MockBlobSidecarsServiceProcessMessageCall wrap *gomock.Call +type MockBlobSidecarsServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockBlobSidecarsServiceProcessMessageCall) Return(arg0 error) *MockBlobSidecarsServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockBlobSidecarsServiceProcessMessageCall) Do(f func(context.Context, *uint64, *cltypes.BlobSidecar) error) *MockBlobSidecarsServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockBlobSidecarsServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *cltypes.BlobSidecar) error) *MockBlobSidecarsServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/mock_services/block_service_mock.go b/cl/phase1/network/services/mock_services/block_service_mock.go new file mode 100644 index 00000000000..22014d316bb --- /dev/null +++ b/cl/phase1/network/services/mock_services/block_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: BlockService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/block_service_mock.go -package=mock_services . BlockService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + gomock "go.uber.org/mock/gomock" +) + +// MockBlockService is a mock of BlockService interface. +type MockBlockService struct { + ctrl *gomock.Controller + recorder *MockBlockServiceMockRecorder +} + +// MockBlockServiceMockRecorder is the mock recorder for MockBlockService. +type MockBlockServiceMockRecorder struct { + mock *MockBlockService +} + +// NewMockBlockService creates a new mock instance. +func NewMockBlockService(ctrl *gomock.Controller) *MockBlockService { + mock := &MockBlockService{ctrl: ctrl} + mock.recorder = &MockBlockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockBlockService) EXPECT() *MockBlockServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockBlockService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *cltypes.SignedBeaconBlock) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockBlockServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockBlockServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockBlockService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockBlockServiceProcessMessageCall{Call: call} +} + +// MockBlockServiceProcessMessageCall wrap *gomock.Call +type MockBlockServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockBlockServiceProcessMessageCall) Return(arg0 error) *MockBlockServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockBlockServiceProcessMessageCall) Do(f func(context.Context, *uint64, *cltypes.SignedBeaconBlock) error) *MockBlockServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockBlockServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *cltypes.SignedBeaconBlock) error) *MockBlockServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/mock_services/bls_to_execution_change_service_mock.go b/cl/phase1/network/services/mock_services/bls_to_execution_change_service_mock.go new file mode 100644 index 00000000000..3fad375a124 --- /dev/null +++ b/cl/phase1/network/services/mock_services/bls_to_execution_change_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: BLSToExecutionChangeService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/bls_to_execution_change_service_mock.go -package=mock_services . BLSToExecutionChangeService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + gomock "go.uber.org/mock/gomock" +) + +// MockBLSToExecutionChangeService is a mock of BLSToExecutionChangeService interface. +type MockBLSToExecutionChangeService struct { + ctrl *gomock.Controller + recorder *MockBLSToExecutionChangeServiceMockRecorder +} + +// MockBLSToExecutionChangeServiceMockRecorder is the mock recorder for MockBLSToExecutionChangeService. +type MockBLSToExecutionChangeServiceMockRecorder struct { + mock *MockBLSToExecutionChangeService +} + +// NewMockBLSToExecutionChangeService creates a new mock instance. +func NewMockBLSToExecutionChangeService(ctrl *gomock.Controller) *MockBLSToExecutionChangeService { + mock := &MockBLSToExecutionChangeService{ctrl: ctrl} + mock.recorder = &MockBLSToExecutionChangeServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockBLSToExecutionChangeService) EXPECT() *MockBLSToExecutionChangeServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockBLSToExecutionChangeService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *cltypes.SignedBLSToExecutionChange) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockBLSToExecutionChangeServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockBLSToExecutionChangeServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockBLSToExecutionChangeService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockBLSToExecutionChangeServiceProcessMessageCall{Call: call} +} + +// MockBLSToExecutionChangeServiceProcessMessageCall wrap *gomock.Call +type MockBLSToExecutionChangeServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockBLSToExecutionChangeServiceProcessMessageCall) Return(arg0 error) *MockBLSToExecutionChangeServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockBLSToExecutionChangeServiceProcessMessageCall) Do(f func(context.Context, *uint64, *cltypes.SignedBLSToExecutionChange) error) *MockBLSToExecutionChangeServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockBLSToExecutionChangeServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *cltypes.SignedBLSToExecutionChange) error) *MockBLSToExecutionChangeServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/mock_services/proposer_slashing_service_mock.go b/cl/phase1/network/services/mock_services/proposer_slashing_service_mock.go new file mode 100644 index 00000000000..d1f41e6aea6 --- /dev/null +++ b/cl/phase1/network/services/mock_services/proposer_slashing_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: ProposerSlashingService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/proposer_slashing_service_mock.go -package=mock_services . ProposerSlashingService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + gomock "go.uber.org/mock/gomock" +) + +// MockProposerSlashingService is a mock of ProposerSlashingService interface. +type MockProposerSlashingService struct { + ctrl *gomock.Controller + recorder *MockProposerSlashingServiceMockRecorder +} + +// MockProposerSlashingServiceMockRecorder is the mock recorder for MockProposerSlashingService. +type MockProposerSlashingServiceMockRecorder struct { + mock *MockProposerSlashingService +} + +// NewMockProposerSlashingService creates a new mock instance. +func NewMockProposerSlashingService(ctrl *gomock.Controller) *MockProposerSlashingService { + mock := &MockProposerSlashingService{ctrl: ctrl} + mock.recorder = &MockProposerSlashingServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockProposerSlashingService) EXPECT() *MockProposerSlashingServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockProposerSlashingService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *cltypes.ProposerSlashing) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockProposerSlashingServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockProposerSlashingServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockProposerSlashingService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockProposerSlashingServiceProcessMessageCall{Call: call} +} + +// MockProposerSlashingServiceProcessMessageCall wrap *gomock.Call +type MockProposerSlashingServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockProposerSlashingServiceProcessMessageCall) Return(arg0 error) *MockProposerSlashingServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockProposerSlashingServiceProcessMessageCall) Do(f func(context.Context, *uint64, *cltypes.ProposerSlashing) error) *MockProposerSlashingServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockProposerSlashingServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *cltypes.ProposerSlashing) error) *MockProposerSlashingServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/mock_services/sync_committee_messages_service_mock.go b/cl/phase1/network/services/mock_services/sync_committee_messages_service_mock.go new file mode 100644 index 00000000000..37cde072f81 --- /dev/null +++ b/cl/phase1/network/services/mock_services/sync_committee_messages_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: SyncCommitteeMessagesService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/sync_committee_messages_service_mock.go -package=mock_services . SyncCommitteeMessagesService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + gomock "go.uber.org/mock/gomock" +) + +// MockSyncCommitteeMessagesService is a mock of SyncCommitteeMessagesService interface. +type MockSyncCommitteeMessagesService struct { + ctrl *gomock.Controller + recorder *MockSyncCommitteeMessagesServiceMockRecorder +} + +// MockSyncCommitteeMessagesServiceMockRecorder is the mock recorder for MockSyncCommitteeMessagesService. +type MockSyncCommitteeMessagesServiceMockRecorder struct { + mock *MockSyncCommitteeMessagesService +} + +// NewMockSyncCommitteeMessagesService creates a new mock instance. +func NewMockSyncCommitteeMessagesService(ctrl *gomock.Controller) *MockSyncCommitteeMessagesService { + mock := &MockSyncCommitteeMessagesService{ctrl: ctrl} + mock.recorder = &MockSyncCommitteeMessagesServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSyncCommitteeMessagesService) EXPECT() *MockSyncCommitteeMessagesServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockSyncCommitteeMessagesService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *cltypes.SyncCommitteeMessage) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockSyncCommitteeMessagesServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockSyncCommitteeMessagesServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockSyncCommitteeMessagesService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockSyncCommitteeMessagesServiceProcessMessageCall{Call: call} +} + +// MockSyncCommitteeMessagesServiceProcessMessageCall wrap *gomock.Call +type MockSyncCommitteeMessagesServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncCommitteeMessagesServiceProcessMessageCall) Return(arg0 error) *MockSyncCommitteeMessagesServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncCommitteeMessagesServiceProcessMessageCall) Do(f func(context.Context, *uint64, *cltypes.SyncCommitteeMessage) error) *MockSyncCommitteeMessagesServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncCommitteeMessagesServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *cltypes.SyncCommitteeMessage) error) *MockSyncCommitteeMessagesServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/mock_services/sync_contribution_service_mock.go b/cl/phase1/network/services/mock_services/sync_contribution_service_mock.go new file mode 100644 index 00000000000..937b86a4db5 --- /dev/null +++ b/cl/phase1/network/services/mock_services/sync_contribution_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: SyncContributionService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/sync_contribution_service_mock.go -package=mock_services . SyncContributionService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + gomock "go.uber.org/mock/gomock" +) + +// MockSyncContributionService is a mock of SyncContributionService interface. +type MockSyncContributionService struct { + ctrl *gomock.Controller + recorder *MockSyncContributionServiceMockRecorder +} + +// MockSyncContributionServiceMockRecorder is the mock recorder for MockSyncContributionService. +type MockSyncContributionServiceMockRecorder struct { + mock *MockSyncContributionService +} + +// NewMockSyncContributionService creates a new mock instance. +func NewMockSyncContributionService(ctrl *gomock.Controller) *MockSyncContributionService { + mock := &MockSyncContributionService{ctrl: ctrl} + mock.recorder = &MockSyncContributionServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSyncContributionService) EXPECT() *MockSyncContributionServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockSyncContributionService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *cltypes.SignedContributionAndProof) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockSyncContributionServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockSyncContributionServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockSyncContributionService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockSyncContributionServiceProcessMessageCall{Call: call} +} + +// MockSyncContributionServiceProcessMessageCall wrap *gomock.Call +type MockSyncContributionServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncContributionServiceProcessMessageCall) Return(arg0 error) *MockSyncContributionServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncContributionServiceProcessMessageCall) Do(f func(context.Context, *uint64, *cltypes.SignedContributionAndProof) error) *MockSyncContributionServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncContributionServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *cltypes.SignedContributionAndProof) error) *MockSyncContributionServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/mock_services/voluntary_exit_service_mock.go b/cl/phase1/network/services/mock_services/voluntary_exit_service_mock.go new file mode 100644 index 00000000000..3f8bd68d28c --- /dev/null +++ b/cl/phase1/network/services/mock_services/voluntary_exit_service_mock.go @@ -0,0 +1,79 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/phase1/network/services (interfaces: VoluntaryExitService) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/voluntary_exit_service_mock.go -package=mock_services . VoluntaryExitService +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + gomock "go.uber.org/mock/gomock" +) + +// MockVoluntaryExitService is a mock of VoluntaryExitService interface. +type MockVoluntaryExitService struct { + ctrl *gomock.Controller + recorder *MockVoluntaryExitServiceMockRecorder +} + +// MockVoluntaryExitServiceMockRecorder is the mock recorder for MockVoluntaryExitService. +type MockVoluntaryExitServiceMockRecorder struct { + mock *MockVoluntaryExitService +} + +// NewMockVoluntaryExitService creates a new mock instance. +func NewMockVoluntaryExitService(ctrl *gomock.Controller) *MockVoluntaryExitService { + mock := &MockVoluntaryExitService{ctrl: ctrl} + mock.recorder = &MockVoluntaryExitServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockVoluntaryExitService) EXPECT() *MockVoluntaryExitServiceMockRecorder { + return m.recorder +} + +// ProcessMessage mocks base method. +func (m *MockVoluntaryExitService) ProcessMessage(arg0 context.Context, arg1 *uint64, arg2 *cltypes.SignedVoluntaryExit) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProcessMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// ProcessMessage indicates an expected call of ProcessMessage. +func (mr *MockVoluntaryExitServiceMockRecorder) ProcessMessage(arg0, arg1, arg2 any) *MockVoluntaryExitServiceProcessMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProcessMessage", reflect.TypeOf((*MockVoluntaryExitService)(nil).ProcessMessage), arg0, arg1, arg2) + return &MockVoluntaryExitServiceProcessMessageCall{Call: call} +} + +// MockVoluntaryExitServiceProcessMessageCall wrap *gomock.Call +type MockVoluntaryExitServiceProcessMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockVoluntaryExitServiceProcessMessageCall) Return(arg0 error) *MockVoluntaryExitServiceProcessMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockVoluntaryExitServiceProcessMessageCall) Do(f func(context.Context, *uint64, *cltypes.SignedVoluntaryExit) error) *MockVoluntaryExitServiceProcessMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockVoluntaryExitServiceProcessMessageCall) DoAndReturn(f func(context.Context, *uint64, *cltypes.SignedVoluntaryExit) error) *MockVoluntaryExitServiceProcessMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/phase1/network/services/proposer_slashing_service.go b/cl/phase1/network/services/proposer_slashing_service.go new file mode 100644 index 00000000000..cfbf36d7525 --- /dev/null +++ b/cl/phase1/network/services/proposer_slashing_service.go @@ -0,0 +1,111 @@ +package services + +import ( + "context" + "fmt" + + "github.com/Giulio2002/bls" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/fork" + st "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" + "github.com/ledgerwatch/erigon/cl/pool" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" +) + +type proposerSlashingService struct { + operationsPool pool.OperationsPool + syncedDataManager *synced_data.SyncedDataManager + beaconCfg *clparams.BeaconChainConfig + ethClock eth_clock.EthereumClock + cache *lru.Cache[uint64, struct{}] +} + +func NewProposerSlashingService( + operationsPool pool.OperationsPool, + syncedDataManager *synced_data.SyncedDataManager, + beaconCfg *clparams.BeaconChainConfig, + ethClock eth_clock.EthereumClock, +) *proposerSlashingService { + cache, err := lru.New[uint64, struct{}]("proposer_slashing", proposerSlashingCacheSize) + if err != nil { + panic(err) + } + return &proposerSlashingService{ + operationsPool: operationsPool, + syncedDataManager: syncedDataManager, + beaconCfg: beaconCfg, + ethClock: ethClock, + cache: cache, + } +} + +func (s *proposerSlashingService) ProcessMessage(ctx context.Context, subnet *uint64, msg *cltypes.ProposerSlashing) error { + // https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#proposer_slashing + + // [IGNORE] The proposer slashing is the first valid proposer slashing received for the proposer with index proposer_slashing.signed_header_1.message.proposer_index + pIndex := msg.Header1.Header.ProposerIndex + if _, ok := s.cache.Get(pIndex); ok { + return ErrIgnore + } + + if s.operationsPool.ProposerSlashingsPool.Has(pool.ComputeKeyForProposerSlashing(msg)) { + return ErrIgnore + } + h1 := msg.Header1.Header + h2 := msg.Header2.Header + + // Verify header slots match + if h1.Slot != h2.Slot { + return fmt.Errorf("non-matching slots on proposer slashing: %d != %d", h1.Slot, h2.Slot) + } + + // Verify header proposer indices match + if h1.ProposerIndex != h2.ProposerIndex { + return fmt.Errorf("non-matching proposer indices proposer slashing: %d != %d", h1.ProposerIndex, h2.ProposerIndex) + } + + // Verify the headers are different + if *h1 == *h2 { + return fmt.Errorf("proposee slashing headers are the same") + } + + // Verify the proposer is slashable + state := s.syncedDataManager.HeadState() + if state == nil { + return ErrIgnore + } + proposer, err := state.ValidatorForValidatorIndex(int(h1.ProposerIndex)) + if err != nil { + return fmt.Errorf("unable to retrieve state: %v", err) + } + if !proposer.IsSlashable(s.ethClock.GetCurrentEpoch()) { + return fmt.Errorf("proposer is not slashable: %v", proposer) + } + + // Verify signatures for both headers + for _, signedHeader := range []*cltypes.SignedBeaconBlockHeader{msg.Header1, msg.Header2} { + domain, err := state.GetDomain(state.BeaconConfig().DomainBeaconProposer, st.GetEpochAtSlot(state.BeaconConfig(), signedHeader.Header.Slot)) + if err != nil { + return fmt.Errorf("unable to get domain: %v", err) + } + pk := proposer.PublicKey() + signingRoot, err := fork.ComputeSigningRoot(signedHeader, domain) + if err != nil { + return fmt.Errorf("unable to compute signing root: %v", err) + } + valid, err := bls.Verify(signedHeader.Signature[:], signingRoot[:], pk[:]) + if err != nil { + return fmt.Errorf("unable to verify signature: %v", err) + } + if !valid { + return fmt.Errorf("invalid signature: signature %v, root %v, pubkey %v", signedHeader.Signature[:], signingRoot[:], pk) + } + } + + s.operationsPool.ProposerSlashingsPool.Insert(pool.ComputeKeyForProposerSlashing(msg), msg) + s.cache.Add(pIndex, struct{}{}) + return nil +} diff --git a/cl/phase1/network/services/sync_committee_messages_service.go b/cl/phase1/network/services/sync_committee_messages_service.go new file mode 100644 index 00000000000..b1f68e74987 --- /dev/null +++ b/cl/phase1/network/services/sync_committee_messages_service.go @@ -0,0 +1,132 @@ +package services + +import ( + "context" + "errors" + "fmt" + "slices" + "sync" + + "github.com/Giulio2002/bls" + + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/network/subnets" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool" +) + +type seenSyncCommitteeMessage struct { + subnet uint64 + slot uint64 + validatorIndex uint64 +} + +type syncCommitteeMessagesService struct { + seenSyncCommitteeMessages map[seenSyncCommitteeMessage]struct{} + syncedDataManager *synced_data.SyncedDataManager + beaconChainCfg *clparams.BeaconChainConfig + syncContributionPool sync_contribution_pool.SyncContributionPool + ethClock eth_clock.EthereumClock + test bool + + mu sync.Mutex +} + +// NewSyncCommitteeMessagesService creates a new sync committee messages service +func NewSyncCommitteeMessagesService( + beaconChainCfg *clparams.BeaconChainConfig, + ethClock eth_clock.EthereumClock, + syncedDataManager *synced_data.SyncedDataManager, + syncContributionPool sync_contribution_pool.SyncContributionPool, + test bool, +) SyncCommitteeMessagesService { + return &syncCommitteeMessagesService{ + seenSyncCommitteeMessages: make(map[seenSyncCommitteeMessage]struct{}), + ethClock: ethClock, + syncedDataManager: syncedDataManager, + beaconChainCfg: beaconChainCfg, + syncContributionPool: syncContributionPool, + test: test, + } +} + +// ProcessMessage processes a sync committee message +func (s *syncCommitteeMessagesService) ProcessMessage(ctx context.Context, subnet *uint64, msg *cltypes.SyncCommitteeMessage) error { + s.mu.Lock() + defer s.mu.Unlock() + headState := s.syncedDataManager.HeadState() + if headState == nil { + return ErrIgnore + } + // [IGNORE] The message's slot is for the current slot (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance), i.e. sync_committee_message.slot == current_slot. + if !s.ethClock.IsSlotCurrentSlotWithMaximumClockDisparity(msg.Slot) { + return ErrIgnore + } + + // [REJECT] The subnet_id is valid for the given validator, i.e. subnet_id in compute_subnets_for_sync_committee(state, sync_committee_message.validator_index). + // Note this validation implies the validator is part of the broader current sync committee along with the correct subcommittee. + subnets, err := subnets.ComputeSubnetsForSyncCommittee(headState, msg.ValidatorIndex) + if err != nil { + return err + } + seenSyncCommitteeMessageIdentifier := seenSyncCommitteeMessage{ + subnet: *subnet, + slot: msg.Slot, + validatorIndex: msg.ValidatorIndex, + } + + if !slices.Contains(subnets, *subnet) { + return fmt.Errorf("validator is not into any subnet %d", *subnet) + } + // [IGNORE] There has been no other valid sync committee message for the declared slot for the validator referenced by sync_committee_message.validator_index. + if _, ok := s.seenSyncCommitteeMessages[seenSyncCommitteeMessageIdentifier]; ok { + return ErrIgnore + } + // [REJECT] The signature is valid for the message beacon_block_root for the validator referenced by validator_index + if err := verifySyncCommitteeMessageSignature(headState, msg); !s.test && err != nil { + return err + } + s.seenSyncCommitteeMessages[seenSyncCommitteeMessageIdentifier] = struct{}{} + s.cleanupOldSyncCommitteeMessages() // cleanup old messages + // Aggregate the message + return s.syncContributionPool.AddSyncCommitteeMessage(headState, *subnet, msg) +} + +// cleanupOldSyncCommitteeMessages removes old sync committee messages from the cache +func (s *syncCommitteeMessagesService) cleanupOldSyncCommitteeMessages() { + headSlot := s.syncedDataManager.HeadSlot() + for k := range s.seenSyncCommitteeMessages { + if headSlot > k.slot+1 { + delete(s.seenSyncCommitteeMessages, k) + } + } +} + +// verifySyncCommitteeMessageSignature verifies the signature of a sync committee message +func verifySyncCommitteeMessageSignature(s *state.CachingBeaconState, msg *cltypes.SyncCommitteeMessage) error { + publicKey, err := s.ValidatorPublicKey(int(msg.ValidatorIndex)) + if err != nil { + return err + } + cfg := s.BeaconConfig() + domain, err := s.GetDomain(cfg.DomainSyncCommittee, state.Epoch(s)) + if err != nil { + return err + } + signingRoot, err := utils.Sha256(msg.BeaconBlockRoot[:], domain), nil + if err != nil { + return err + } + valid, err := bls.Verify(msg.Signature[:], signingRoot[:], publicKey[:]) + if err != nil { + return errors.New("invalid signature") + } + if !valid { + return errors.New("invalid signature") + } + return nil +} diff --git a/cl/phase1/network/services/sync_committee_messages_service_test.go b/cl/phase1/network/services/sync_committee_messages_service_test.go new file mode 100644 index 00000000000..15d99c5e68e --- /dev/null +++ b/cl/phase1/network/services/sync_committee_messages_service_test.go @@ -0,0 +1,83 @@ +package services + +import ( + "context" + "testing" + + "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + syncpoolmock "github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool/mock_services" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func setupSyncCommitteesServiceTest(t *testing.T, ctrl *gomock.Controller) (SyncCommitteeMessagesService, *synced_data.SyncedDataManager, *eth_clock.MockEthereumClock) { + cfg := &clparams.MainnetBeaconConfig + syncedDataManager := synced_data.NewSyncedDataManager(true, cfg) + ethClock := eth_clock.NewMockEthereumClock(ctrl) + syncContributionPool := syncpoolmock.NewMockSyncContributionPool(ctrl) + s := NewSyncCommitteeMessagesService(cfg, ethClock, syncedDataManager, syncContributionPool, true) + syncContributionPool.EXPECT().AddSyncCommitteeMessage(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + return s, syncedDataManager, ethClock +} + +func getObjectsForSyncCommitteesServiceTest(t *testing.T, ctrl *gomock.Controller) (*state.CachingBeaconState, *cltypes.SyncCommitteeMessage) { + _, _, state := tests.GetBellatrixRandom() + br, _ := state.BlockRoot() + msg := &cltypes.SyncCommitteeMessage{ + Slot: state.Slot(), + BeaconBlockRoot: br, + ValidatorIndex: 0, + } + return state, msg +} + +func TestSyncCommitteesServiceUnsynced(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + s, _, _ := setupSyncCommitteesServiceTest(t, ctrl) + require.Error(t, s.ProcessMessage(context.TODO(), nil, nil)) +} + +func TestSyncCommitteesBadTiming(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + state, msg := getObjectsForSyncCommitteesServiceTest(t, ctrl) + + s, synced, ethClock := setupSyncCommitteesServiceTest(t, ctrl) + synced.OnHeadState(state) + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(msg.Slot).Return(false).AnyTimes() + require.Error(t, s.ProcessMessage(context.Background(), nil, msg)) +} + +func TestSyncCommitteesBadSubnet(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + state, msg := getObjectsForSyncCommitteesServiceTest(t, ctrl) + sn := uint64(1000) + + s, synced, ethClock := setupSyncCommitteesServiceTest(t, ctrl) + synced.OnHeadState(state) + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(msg.Slot).Return(true).AnyTimes() + require.Error(t, s.ProcessMessage(context.Background(), &sn, msg)) +} + +func TestSyncCommitteesSuccess(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + state, msg := getObjectsForSyncCommitteesServiceTest(t, ctrl) + + s, synced, ethClock := setupSyncCommitteesServiceTest(t, ctrl) + synced.OnHeadState(state) + ethClock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(msg.Slot).Return(true).AnyTimes() + require.NoError(t, s.ProcessMessage(context.Background(), new(uint64), msg)) + require.Error(t, s.ProcessMessage(context.Background(), new(uint64), msg)) // Ignore if done twice +} diff --git a/cl/phase1/network/services/sync_contribution_service.go b/cl/phase1/network/services/sync_contribution_service.go new file mode 100644 index 00000000000..0f37daf9924 --- /dev/null +++ b/cl/phase1/network/services/sync_contribution_service.go @@ -0,0 +1,281 @@ +package services + +import ( + "bytes" + "context" + "encoding/binary" + "errors" + "fmt" + "slices" + "sync" + + "github.com/Giulio2002/bls" + + "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/fork" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool" +) + +type seenSyncCommitteeContribution struct { + aggregatorIndex uint64 + slot uint64 + subCommitteeIndex uint64 +} + +type syncContributionService struct { + syncedDataManager *synced_data.SyncedDataManager + beaconCfg *clparams.BeaconChainConfig + syncContributionPool sync_contribution_pool.SyncContributionPool + seenSyncCommitteeContributions map[seenSyncCommitteeContribution]struct{} + emitters *beaconevents.Emitters + ethClock eth_clock.EthereumClock + test bool + + mu sync.Mutex +} + +// NewSyncContributionService creates a new sync contribution service +func NewSyncContributionService( + syncedDataManager *synced_data.SyncedDataManager, + beaconCfg *clparams.BeaconChainConfig, + syncContributionPool sync_contribution_pool.SyncContributionPool, + ethClock eth_clock.EthereumClock, + emitters *beaconevents.Emitters, + test bool, +) SyncContributionService { + return &syncContributionService{ + syncedDataManager: syncedDataManager, + beaconCfg: beaconCfg, + syncContributionPool: syncContributionPool, + seenSyncCommitteeContributions: make(map[seenSyncCommitteeContribution]struct{}), + ethClock: ethClock, + emitters: emitters, + test: test, + } +} + +// ProcessMessage processes a sync contribution message +func (s *syncContributionService) ProcessMessage(ctx context.Context, subnet *uint64, signedContribution *cltypes.SignedContributionAndProof) error { + s.mu.Lock() + defer s.mu.Unlock() + + contributionAndProof := signedContribution.Message + selectionProof := contributionAndProof.SelectionProof + aggregationBits := contributionAndProof.Contribution.AggregationBits + + headState := s.syncedDataManager.HeadState() + if headState == nil { + return ErrIgnore + } + + // [REJECT] The subcommittee index is in the allowed range, i.e. contribution.subcommittee_index < SYNC_COMMITTEE_SUBNET_COUNT. + if contributionAndProof.Contribution.SubcommitteeIndex >= clparams.MainnetBeaconConfig.SyncCommitteeSubnetCount { + return fmt.Errorf("subcommittee index is out of range") + } + + aggregatorPubKey, err := headState.ValidatorPublicKey(int(contributionAndProof.AggregatorIndex)) + if err != nil { + return err + } + subcommiteePubsKeys, err := s.getSyncSubcommitteePubkeys(headState, contributionAndProof.Contribution.SubcommitteeIndex) + if err != nil { + return err + } + + // [IGNORE] The contribution's slot is for the current slot (with a MAXIMUM_GOSSIP_CLOCK_DISPARITY allowance), i.e. contribution.slot == current_slot. + if !s.ethClock.IsSlotCurrentSlotWithMaximumClockDisparity(contributionAndProof.Contribution.Slot) { + return ErrIgnore + } + + // [REJECT] The contribution has participants -- that is, any(contribution.aggregation_bits). + if bytes.Equal(aggregationBits, make([]byte, len(aggregationBits))) { // check if the aggregation bits are all zeros + return fmt.Errorf("contribution has no participants") + } + + modulo := utils.Max64(1, s.beaconCfg.SyncCommitteeSize/s.beaconCfg.SyncCommitteeSubnetCount/s.beaconCfg.TargetAggregatorsPerSyncSubcommittee) + hashSignature := utils.Sha256(selectionProof[:]) + if !s.test && binary.LittleEndian.Uint64(hashSignature[:8])%modulo != 0 { + return fmt.Errorf("selects the validator as an aggregator") + } + + // [REJECT] The aggregator's validator index is in the declared subcommittee of the current sync committee -- i.e. state.validators[contribution_and_proof.aggregator_index].pubkey in get_sync_subcommittee_pubkeys(state, contribution.subcommittee_index). + if !slices.Contains(subcommiteePubsKeys, aggregatorPubKey) { + return fmt.Errorf("aggregator's validator index is not in subcommittee") + } + + // [IGNORE] The sync committee contribution is the first valid contribution received for the aggregator with index contribution_and_proof.aggregator_index for the slot contribution.slot and subcommittee index contribution.subcommittee_index (this requires maintaining a cache of size SYNC_COMMITTEE_SIZE for this topic that can be flushed after each slot). + if s.wasContributionSeen(contributionAndProof) { + return ErrIgnore + } + + // [REJECT] The contribution_and_proof.selection_proof is a valid signature of the SyncAggregatorSelectionData derived from the contribution by the validator with index contribution_and_proof.aggregator_index. + if err := verifySyncContributionSelectionProof(headState, contributionAndProof); !s.test && err != nil { + return err + } + // [REJECT] The aggregator signature, signed_contribution_and_proof.signature, is valid. + if err := verifyAggregatorSignatureForSyncContribution(headState, signedContribution); !s.test && err != nil { + return err + } + // [REJECT] The aggregate signature is valid for the message beacon_block_root and aggregate pubkey derived + // from the participation info in aggregation_bits for the subcommittee specified by the contribution.subcommittee_index. + if err := verifySyncContributionProofAggregatedSignature(headState, contributionAndProof.Contribution, subcommiteePubsKeys); !s.test && err != nil { + return err + } + // mark the valid contribution as seen + s.markContributionAsSeen(contributionAndProof) + + // emit contribution_and_proof + s.emitters.Publish("contribution_and_proof", signedContribution) + // add the contribution to the pool + err = s.syncContributionPool.AddSyncContribution(headState, contributionAndProof.Contribution) + if errors.Is(err, sync_contribution_pool.ErrIsSuperset) { + return ErrIgnore + } + return err +} + +// def get_sync_subcommittee_pubkeys(state: BeaconState, subcommittee_index: uint64) -> Sequence[BLSPubkey]: +// +// # Committees assigned to `slot` sign for `slot - 1` +// # This creates the exceptional logic below when transitioning between sync committee periods +// next_slot_epoch = compute_epoch_at_slot(Slot(state.slot + 1)) +// if compute_sync_committee_period(get_current_epoch(state)) == compute_sync_committee_period(next_slot_epoch): +// sync_committee = state.current_sync_committee +// else: +// sync_committee = state.next_sync_committee +// # Return pubkeys for the subcommittee index +// sync_subcommittee_size = SYNC_COMMITTEE_SIZE // SYNC_COMMITTEE_SUBNET_COUNT +// i = subcommittee_index * sync_subcommittee_size +// return sync_committee.pubkeys[i:i + sync_subcommittee_size] + +// getSyncSubcommitteePubkeys returns the public keys of the validators in the given subcommittee. +func (s *syncContributionService) getSyncSubcommitteePubkeys(st *state.CachingBeaconState, subcommitteeIndex uint64) ([]libcommon.Bytes48, error) { + var syncCommittee *solid.SyncCommittee + if s.beaconCfg.SyncCommitteePeriod(st.Slot()) == s.beaconCfg.SyncCommitteePeriod(st.Slot()+1) { + syncCommittee = st.CurrentSyncCommittee() + } else { + syncCommittee = st.NextSyncCommittee() + } + syncSubcommitteeSize := s.beaconCfg.SyncCommitteeSize / s.beaconCfg.SyncCommitteeSubnetCount + i := subcommitteeIndex * syncSubcommitteeSize + return syncCommittee.GetCommittee()[i : i+syncSubcommitteeSize], nil +} + +// wasContributionSeen checks if the contribution was seen before. +func (s *syncContributionService) wasContributionSeen(contribution *cltypes.ContributionAndProof) bool { + key := seenSyncCommitteeContribution{ + aggregatorIndex: contribution.AggregatorIndex, + slot: contribution.Contribution.Slot, + subCommitteeIndex: contribution.Contribution.SubcommitteeIndex, + } + + _, ok := s.seenSyncCommitteeContributions[key] + return ok +} + +// markContributionAsSeen marks the contribution as seen. +func (s *syncContributionService) markContributionAsSeen(contribution *cltypes.ContributionAndProof) { + key := seenSyncCommitteeContribution{ + aggregatorIndex: contribution.AggregatorIndex, + slot: contribution.Contribution.Slot, + subCommitteeIndex: contribution.Contribution.SubcommitteeIndex, + } + s.seenSyncCommitteeContributions[key] = struct{}{} +} + +// verifySyncContributionProof verifies the sync contribution proof. +func verifySyncContributionSelectionProof(st *state.CachingBeaconState, contributionAndProof *cltypes.ContributionAndProof) error { + syncAggregatorSelectionData := &cltypes.SyncAggregatorSelectionData{ + Slot: contributionAndProof.Contribution.Slot, + SubcommitteeIndex: contributionAndProof.Contribution.SubcommitteeIndex, + } + selectionProof := contributionAndProof.SelectionProof + + aggregatorPubKey, err := st.ValidatorPublicKey(int(contributionAndProof.AggregatorIndex)) + if err != nil { + return err + } + + domain, err := st.GetDomain(st.BeaconConfig().DomainSyncCommitteeSelectionProof, state.GetEpochAtSlot(st.BeaconConfig(), contributionAndProof.Contribution.Slot)) + if err != nil { + return err + } + + selectionDataRoot, err := fork.ComputeSigningRoot(syncAggregatorSelectionData, domain) + if err != nil { + return err + } + + valid, err := bls.Verify(selectionProof[:], selectionDataRoot[:], aggregatorPubKey[:]) + if err != nil { + return err + } + if !valid { + return fmt.Errorf("invalid selectionProof signature") + } + return nil +} + +// verifySyncContributionProof verifies the contribution aggregated signature. +func verifySyncContributionProofAggregatedSignature(s *state.CachingBeaconState, contribution *cltypes.Contribution, subCommitteeKeys []libcommon.Bytes48) error { + domain, err := s.GetDomain(s.BeaconConfig().DomainSyncCommittee, state.Epoch(s)) + if err != nil { + return err + } + + msg := utils.Sha256(contribution.BeaconBlockRoot[:], domain) + if err != nil { + return err + } + // only use the ones pertaining to the aggregation bits + subCommitteePubsKeys := make([][]byte, 0, len(subCommitteeKeys)) + for i, key := range subCommitteeKeys { + if utils.IsBitOn(contribution.AggregationBits, i) { + subCommitteePubsKeys = append(subCommitteePubsKeys, common.Copy(key[:])) + } + } + + valid, err := bls.VerifyAggregate(contribution.Signature[:], msg[:], subCommitteePubsKeys) + if err != nil { + return err + } + + if !valid { + return fmt.Errorf("invalid signature for aggregate sync contribution") + } + return nil +} + +func verifyAggregatorSignatureForSyncContribution(s *state.CachingBeaconState, signedContributionAndProof *cltypes.SignedContributionAndProof) error { + contribution := signedContributionAndProof.Message.Contribution + domain, err := s.GetDomain(s.BeaconConfig().DomainContributionAndProof, contribution.Slot/s.BeaconConfig().SlotsPerEpoch) + if err != nil { + return err + } + + signingRoot, err := fork.ComputeSigningRoot(signedContributionAndProof.Message, domain) + if err != nil { + return err + } + aggregatorPubKey, err := s.ValidatorPublicKey(int(signedContributionAndProof.Message.AggregatorIndex)) + if err != nil { + return err + } + valid, err := bls.Verify(signedContributionAndProof.Signature[:], signingRoot[:], aggregatorPubKey[:]) + if err != nil { + return err + } + if !valid { + return errors.New("invalid aggregator signature") + } + return nil +} diff --git a/cl/phase1/network/services/sync_contribution_service_test.go b/cl/phase1/network/services/sync_contribution_service_test.go new file mode 100644 index 00000000000..898ba590630 --- /dev/null +++ b/cl/phase1/network/services/sync_contribution_service_test.go @@ -0,0 +1,124 @@ +package services + +import ( + "context" + "testing" + + "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + syncpoolmock "github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool/mock_services" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func setupSyncContributionServiceTest(t *testing.T, ctrl *gomock.Controller) (SyncContributionService, *synced_data.SyncedDataManager, *eth_clock.MockEthereumClock) { + cfg := &clparams.MainnetBeaconConfig + syncedDataManager := synced_data.NewSyncedDataManager(true, cfg) + ethClock := eth_clock.NewMockEthereumClock(ctrl) + syncContributionPool := syncpoolmock.NewMockSyncContributionPool(ctrl) + s := NewSyncContributionService(syncedDataManager, cfg, syncContributionPool, ethClock, beaconevents.NewEmitters(), true) + syncContributionPool.EXPECT().AddSyncContribution(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + return s, syncedDataManager, ethClock +} + +func getObjectsForSyncContributionServiceTest(t *testing.T, ctrl *gomock.Controller) (*state.CachingBeaconState, *cltypes.SignedContributionAndProof) { + _, _, state := tests.GetBellatrixRandom() + br, _ := state.BlockRoot() + aggBits := make([]byte, 16) + aggBits[0] = 1 + msg := &cltypes.SignedContributionAndProof{ + Message: &cltypes.ContributionAndProof{ + AggregatorIndex: 0, + Contribution: &cltypes.Contribution{ + Slot: state.Slot(), + BeaconBlockRoot: br, + SubcommitteeIndex: 0, + AggregationBits: aggBits, + }, + }, + } + + return state, msg +} + +func TestSyncContributionServiceUnsynced(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + s, _, _ := setupSyncContributionServiceTest(t, ctrl) + _, msg := getObjectsForSyncContributionServiceTest(t, ctrl) + err := s.ProcessMessage(context.TODO(), nil, msg) + require.Error(t, err) +} + +func TestSyncContributionServiceBadTiming(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + s, sd, clock := setupSyncContributionServiceTest(t, ctrl) + clock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(false).AnyTimes() + state, msg := getObjectsForSyncContributionServiceTest(t, ctrl) + sd.OnHeadState(state) + err := s.ProcessMessage(context.TODO(), nil, msg) + require.Error(t, err) +} + +func TestSyncContributionServiceBadSubcommitteeIndex(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + s, sd, clock := setupSyncContributionServiceTest(t, ctrl) + clock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + state, msg := getObjectsForSyncContributionServiceTest(t, ctrl) + sd.OnHeadState(state) + msg.Message.Contribution.SubcommitteeIndex = 1000 + err := s.ProcessMessage(context.TODO(), nil, msg) + require.Error(t, err) +} + +func TestSyncContributionServiceBadAggregationBits(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + s, sd, clock := setupSyncContributionServiceTest(t, ctrl) + clock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + state, msg := getObjectsForSyncContributionServiceTest(t, ctrl) + sd.OnHeadState(state) + msg.Message.Contribution.AggregationBits = make([]byte, 16) + err := s.ProcessMessage(context.TODO(), nil, msg) + require.Error(t, err) +} + +func TestSyncContributionServiceBadAggregator(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + s, sd, clock := setupSyncContributionServiceTest(t, ctrl) + clock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + state, msg := getObjectsForSyncContributionServiceTest(t, ctrl) + state.SetCurrentSyncCommittee(&solid.SyncCommittee{}) + state.SetNextSyncCommittee(&solid.SyncCommittee{}) + sd.OnHeadState(state) + err := s.ProcessMessage(context.TODO(), nil, msg) + require.Error(t, err) +} + +func TestSyncContributionServiceSuccess(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + s, sd, clock := setupSyncContributionServiceTest(t, ctrl) + clock.EXPECT().IsSlotCurrentSlotWithMaximumClockDisparity(gomock.Any()).Return(true).AnyTimes() + state, msg := getObjectsForSyncContributionServiceTest(t, ctrl) + sd.OnHeadState(state) + err := s.ProcessMessage(context.TODO(), nil, msg) + require.NoError(t, err) + err = s.ProcessMessage(context.TODO(), nil, msg) + require.Error(t, err) +} diff --git a/cl/phase1/network/services/test_data/blob_sidecar_service_blob.ssz_snappy b/cl/phase1/network/services/test_data/blob_sidecar_service_blob.ssz_snappy new file mode 100644 index 00000000000..2ac3db6aa0b Binary files /dev/null and b/cl/phase1/network/services/test_data/blob_sidecar_service_blob.ssz_snappy differ diff --git a/cl/phase1/network/services/test_data/blob_sidecar_service_block.ssz_snappy b/cl/phase1/network/services/test_data/blob_sidecar_service_block.ssz_snappy new file mode 100644 index 00000000000..266d3d37a72 Binary files /dev/null and b/cl/phase1/network/services/test_data/blob_sidecar_service_block.ssz_snappy differ diff --git a/cl/phase1/network/services/test_data/blob_sidecar_service_state.ssz_snappy b/cl/phase1/network/services/test_data/blob_sidecar_service_state.ssz_snappy new file mode 100644 index 00000000000..a1faa184e3a Binary files /dev/null and b/cl/phase1/network/services/test_data/blob_sidecar_service_state.ssz_snappy differ diff --git a/cl/phase1/network/services/voluntary_exit_service.go b/cl/phase1/network/services/voluntary_exit_service.go new file mode 100644 index 00000000000..925ed88e447 --- /dev/null +++ b/cl/phase1/network/services/voluntary_exit_service.go @@ -0,0 +1,117 @@ +package services + +import ( + "context" + "fmt" + + "github.com/Giulio2002/bls" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/fork" + "github.com/ledgerwatch/erigon/cl/pool" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/pkg/errors" +) + +type voluntaryExitService struct { + operationsPool pool.OperationsPool + emitters *beaconevents.Emitters + syncedDataManager *synced_data.SyncedDataManager + beaconCfg *clparams.BeaconChainConfig + ethClock eth_clock.EthereumClock +} + +func NewVoluntaryExitService( + operationsPool pool.OperationsPool, + emitters *beaconevents.Emitters, + syncedDataManager *synced_data.SyncedDataManager, + beaconCfg *clparams.BeaconChainConfig, + ethClock eth_clock.EthereumClock, +) VoluntaryExitService { + return &voluntaryExitService{ + operationsPool: operationsPool, + emitters: emitters, + syncedDataManager: syncedDataManager, + beaconCfg: beaconCfg, + ethClock: ethClock, + } +} + +func (s *voluntaryExitService) ProcessMessage(ctx context.Context, subnet *uint64, msg *cltypes.SignedVoluntaryExit) error { + // ref: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#voluntary_exit + voluntaryExit := msg.VoluntaryExit + defer s.emitters.Publish("voluntary_exit", voluntaryExit) + + // [IGNORE] The voluntary exit is the first valid voluntary exit received for the validator with index signed_voluntary_exit.message.validator_index. + if s.operationsPool.VoluntaryExitsPool.Has(voluntaryExit.ValidatorIndex) { + return ErrIgnore + } + + // ref: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#voluntary-exits + // def process_voluntary_exit(state: BeaconState, signed_voluntary_exit: SignedVoluntaryExit) -> None: + state := s.syncedDataManager.HeadState() + if state == nil { + return ErrIgnore + } + val, err := state.ValidatorForValidatorIndex(int(voluntaryExit.ValidatorIndex)) + if err != nil { + return ErrIgnore + } + curEpoch := s.ethClock.GetCurrentEpoch() + + // Verify the validator is active + // assert is_active_validator(validator, get_current_epoch(state)) + if !val.Active(curEpoch) { + return fmt.Errorf("validator is not active") + } + + // Verify exit has not been initiated + // assert validator.exit_epoch == FAR_FUTURE_EPOCH + if !(val.ExitEpoch() == s.beaconCfg.FarFutureEpoch) { + return fmt.Errorf("verify exit has not been initiated. exitEpoch: %d, farFutureEpoch: %d", val.ExitEpoch(), s.beaconCfg.FarFutureEpoch) + } + + // Exits must specify an epoch when they become valid; they are not valid before then + // assert get_current_epoch(state) >= voluntary_exit.epoch + if !(curEpoch >= voluntaryExit.Epoch) { + return fmt.Errorf("exits must specify an epoch when they become valid; they are not valid before then") + } + + // Verify the validator has been active long enough + // assert get_current_epoch(state) >= validator.activation_epoch + SHARD_COMMITTEE_PERIOD + if !(curEpoch >= val.ActivationEpoch()+s.beaconCfg.ShardCommitteePeriod) { + return fmt.Errorf("verify the validator has been active long enough") + } + + // Verify signature + // domain = get_domain(state, DOMAIN_VOLUNTARY_EXIT, voluntary_exit.epoch) + // signing_root = compute_signing_root(voluntary_exit, domain) + // assert bls.Verify(validator.pubkey, signing_root, signed_voluntary_exit.signature) + pk := val.PublicKey() + domainType := s.beaconCfg.DomainVoluntaryExit + var domain []byte + if state.Version() < clparams.DenebVersion { + domain, err = state.GetDomain(domainType, voluntaryExit.Epoch) + } else if state.Version() >= clparams.DenebVersion { + domain, err = fork.ComputeDomain(domainType[:], utils.Uint32ToBytes4(uint32(state.BeaconConfig().CapellaForkVersion)), state.GenesisValidatorsRoot()) + } + if err != nil { + return err + } + signingRoot, err := fork.ComputeSigningRoot(voluntaryExit, domain) + if err != nil { + return err + } + if valid, err := bls.Verify(msg.Signature[:], signingRoot[:], pk[:]); err != nil { + return err + } else if !valid { + return errors.New("ProcessVoluntaryExit: BLS verification failed") + } + + s.operationsPool.VoluntaryExitsPool.Insert(voluntaryExit.ValidatorIndex, msg) + + return nil +} diff --git a/cl/phase1/network/subnets/subnets.go b/cl/phase1/network/subnets/subnets.go new file mode 100644 index 00000000000..1fba86c09ee --- /dev/null +++ b/cl/phase1/network/subnets/subnets.go @@ -0,0 +1,70 @@ +package subnets + +import ( + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" +) + +// def compute_subnets_for_sync_committee(state: BeaconState, validator_index: ValidatorIndex) -> Set[uint64]: +// next_slot_epoch = compute_epoch_at_slot(Slot(state.slot + 1)) +// if compute_sync_committee_period(get_current_epoch(state)) == compute_sync_committee_period(next_slot_epoch): +// sync_committee = state.current_sync_committee +// else: +// sync_committee = state.next_sync_committee + +// target_pubkey = state.validators[validator_index].pubkey +// sync_committee_indices = [index for index, pubkey in enumerate(sync_committee.pubkeys) if pubkey == target_pubkey] +// return set([ +// +// uint64(index // (SYNC_COMMITTEE_SIZE // SYNC_COMMITTEE_SUBNET_COUNT)) +// for index in sync_committee_indices +// +// ]) + +// ComputeSubnetsForSyncCommittee is used by the ValidatorClient to determine which subnets a validator should be subscribed to for sync committees. +// the function takes an extra syncCommitteeIndicies parameter to adapt to the Beacon API specs. +func ComputeSubnetsForSyncCommittee(s *state.CachingBeaconState, validatorIndex uint64) (subnets []uint64, err error) { + cfg := s.BeaconConfig() + var syncCommittee *solid.SyncCommittee + if cfg.SyncCommitteePeriod(s.Slot()) == cfg.SyncCommitteePeriod(s.Slot()+1) { + syncCommittee = s.CurrentSyncCommittee() + } else { + syncCommittee = s.NextSyncCommittee() + } + + targetPublicKey, err := s.ValidatorPublicKey(int(validatorIndex)) + if err != nil { + return nil, err + } + + // make sure we return each subnet id, exactly once. + alreadySeenSubnetIndex := make(map[uint64]struct{}) + + committee := syncCommittee.GetCommittee() + for index := uint64(0); index < uint64(len(committee)); index++ { + subnetIdx := index / (cfg.SyncCommitteeSize / cfg.SyncCommitteeSubnetCount) + if _, ok := alreadySeenSubnetIndex[subnetIdx]; ok { + continue + } + if targetPublicKey == committee[index] { + subnets = append(subnets, subnetIdx) + alreadySeenSubnetIndex[subnetIdx] = struct{}{} + } + } + return subnets, nil +} + +func ComputeSubnetForAttestation(committeePerSlot, slot, committeeIndex, slotsPerEpoch, attSubnetCount uint64) uint64 { + // ref: https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/validator.md#broadcast-attestation + // slots_since_epoch_start = uint64(slot % SLOTS_PER_EPOCH) + // committees_since_epoch_start = committees_per_slot * slots_since_epoch_start + // return SubnetID((committees_since_epoch_start + committee_index) % ATTESTATION_SUBNET_COUNT) + slotsSinceEpochStart := slot % slotsPerEpoch + committeesSinceEpochStart := committeePerSlot * slotsSinceEpochStart + return (committeesSinceEpochStart + committeeIndex) % attSubnetCount +} + +func ComputeCommitteeCountPerSlot(s state.BeaconStateReader, slot uint64, slotsPerEpoch uint64) uint64 { + epoch := slot / slotsPerEpoch + return s.CommitteeCount(epoch) +} diff --git a/cl/phase1/stages/clstages.go b/cl/phase1/stages/clstages.go index 5f5e18c80e2..2118800f4d1 100644 --- a/cl/phase1/stages/clstages.go +++ b/cl/phase1/stages/clstages.go @@ -3,52 +3,64 @@ package stages import ( "context" "errors" + "fmt" "runtime" + "sort" + "strconv" + "sync/atomic" "time" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/erigon/cl/antiquary" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" "github.com/ledgerwatch/erigon/cl/beacon/synced_data" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/clstages" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" "github.com/ledgerwatch/erigon/cl/persistence/db_config" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cl/phase1/execution_client" + "github.com/ledgerwatch/erigon/cl/phase1/execution_client/block_collector" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" - "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/cl/validator/attestation_producer" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" + "github.com/ledgerwatch/log/v3" + network2 "github.com/ledgerwatch/erigon/cl/phase1/network" "github.com/ledgerwatch/erigon/cl/rpc" "github.com/ledgerwatch/erigon/cl/sentinel/peers" - "github.com/ledgerwatch/erigon/cl/utils" - "github.com/ledgerwatch/log/v3" ) type Cfg struct { - rpc *rpc.BeaconRpcP2P - genesisCfg *clparams.GenesisConfig - beaconCfg *clparams.BeaconChainConfig - executionClient execution_client.ExecutionEngine - state *state.CachingBeaconState - gossipManager *network2.GossipManager - forkChoice *forkchoice.ForkChoiceStore - beaconDB persistence.BeaconChainDatabase - indiciesDB kv.RwDB - tmpdir string - dbConfig db_config.DatabaseConfiguration - sn *freezeblocks.CaplinSnapshots - antiquary *antiquary.Antiquary - syncedData *synced_data.SyncedDataManager - - hasDownloaded, backfilling bool + rpc *rpc.BeaconRpcP2P + ethClock eth_clock.EthereumClock + beaconCfg *clparams.BeaconChainConfig + executionClient execution_client.ExecutionEngine + state *state.CachingBeaconState + gossipManager *network2.GossipManager + forkChoice *forkchoice.ForkChoiceStore + indiciesDB kv.RwDB + tmpdir string + dbConfig db_config.DatabaseConfiguration + blockReader freezeblocks.BeaconSnapshotReader + antiquary *antiquary.Antiquary + syncedData *synced_data.SyncedDataManager + emitter *beaconevents.Emitters + blockCollector block_collector.BlockCollector + sn *freezeblocks.CaplinSnapshots + blobStore blob_storage.BlobStorage + attestationDataProducer attestation_producer.AttestationDataProducer + + hasDownloaded, backfilling, blobBackfilling bool } type Args struct { @@ -63,43 +75,52 @@ type Args struct { func ClStagesCfg( rpc *rpc.BeaconRpcP2P, antiquary *antiquary.Antiquary, - genesisCfg *clparams.GenesisConfig, + ethClock eth_clock.EthereumClock, beaconCfg *clparams.BeaconChainConfig, state *state.CachingBeaconState, executionClient execution_client.ExecutionEngine, gossipManager *network2.GossipManager, forkChoice *forkchoice.ForkChoiceStore, - beaconDB persistence.BeaconChainDatabase, indiciesDB kv.RwDB, sn *freezeblocks.CaplinSnapshots, + blockReader freezeblocks.BeaconSnapshotReader, tmpdir string, dbConfig db_config.DatabaseConfiguration, backfilling bool, + blobBackfilling bool, syncedData *synced_data.SyncedDataManager, + emitters *beaconevents.Emitters, + blobStore blob_storage.BlobStorage, + attestationDataProducer attestation_producer.AttestationDataProducer, ) *Cfg { return &Cfg{ - rpc: rpc, - antiquary: antiquary, - genesisCfg: genesisCfg, - beaconCfg: beaconCfg, - state: state, - executionClient: executionClient, - gossipManager: gossipManager, - forkChoice: forkChoice, - tmpdir: tmpdir, - beaconDB: beaconDB, - indiciesDB: indiciesDB, - dbConfig: dbConfig, - sn: sn, - backfilling: backfilling, - syncedData: syncedData, + rpc: rpc, + antiquary: antiquary, + ethClock: ethClock, + beaconCfg: beaconCfg, + state: state, + executionClient: executionClient, + gossipManager: gossipManager, + forkChoice: forkChoice, + tmpdir: tmpdir, + indiciesDB: indiciesDB, + dbConfig: dbConfig, + sn: sn, + blockReader: blockReader, + backfilling: backfilling, + syncedData: syncedData, + emitter: emitters, + blobStore: blobStore, + blockCollector: block_collector.NewBlockCollector(log.Root(), executionClient, beaconCfg, tmpdir), + blobBackfilling: blobBackfilling, + attestationDataProducer: attestationDataProducer, } } type StageName = string const ( - CatchUpEpochs StageName = "CatchUpEpochs" + ForwardSync StageName = "ForwardSync" CatchUpBlocks StageName = "CatchUpBlocks" ForkChoice StageName = "ForkChoice" ListenForForks StageName = "ListenForForks" @@ -117,7 +138,7 @@ func MetaCatchingUp(args Args) StageName { return DownloadHistoricalBlocks } if args.seenEpoch < args.targetEpoch { - return CatchUpEpochs + return ForwardSync } if args.seenSlot < args.targetSlot { return CatchUpBlocks @@ -136,7 +157,7 @@ digraph { label="syncing"; WaitForPeers; CatchUpBlocks; - CatchUpEpochs; + ForwardSync; } subgraph cluster_3 { @@ -150,11 +171,11 @@ digraph { } MetaCatchingUp -> WaitForPeers - MetaCatchingUp -> CatchUpEpochs + MetaCatchingUp -> ForwardSync MetaCatchingUp -> CatchUpBlocks WaitForPeers -> MetaCatchingUp[lhead=cluster_3] - CatchUpEpochs -> MetaCatchingUp[lhead=cluster_3] + ForwardSync -> MetaCatchingUp[lhead=cluster_3] CatchUpBlocks -> MetaCatchingUp[lhead=cluster_3] CleanupAndPruning -> MetaCatchingUp[lhead=cluster_3] ListenForForks -> MetaCatchingUp[lhead=cluster_3] @@ -178,17 +199,17 @@ func ConsensusClStages(ctx context.Context, ) *clstages.StageGraph[*Cfg, Args] { rpcSource := persistence.NewBeaconRpcSource(cfg.rpc) - gossipSource := persistence.NewGossipSource(ctx, cfg.gossipManager) - processBlock := func(tx kv.RwTx, block *cltypes.SignedBeaconBlock, newPayload, fullValidation bool) error { - if err := cfg.forkChoice.OnBlock(block, newPayload, fullValidation); err != nil { - log.Warn("fail to process block", "reason", err, "slot", block.Block.Slot) - return err - } - if err := beacon_indicies.WriteHighestFinalized(tx, cfg.forkChoice.FinalizedSlot()); err != nil { + processBlock := func(db kv.RwDB, block *cltypes.SignedBeaconBlock, newPayload, fullValidation, checkDataAvaiability bool) error { + if err := db.Update(ctx, func(tx kv.RwTx) error { + if err := beacon_indicies.WriteHighestFinalized(tx, cfg.forkChoice.FinalizedSlot()); err != nil { + return err + } + return beacon_indicies.WriteBeaconBlockAndIndicies(ctx, tx, block, false) + }); err != nil { return err } - // Write block to database optimistically if we are very behind. - return cfg.beaconDB.WriteBlock(ctx, tx, block, false) + + return cfg.forkChoice.OnBlock(ctx, block, newPayload, fullValidation, checkDataAvaiability) } // TODO: this is an ugly hack, but it works! Basically, we want shared state in the clstages. @@ -209,9 +230,9 @@ func ConsensusClStages(ctx context.Context, args.hasDownloaded = cfg.hasDownloaded args.seenSlot = cfg.forkChoice.HighestSeen() args.seenEpoch = args.seenSlot / cfg.beaconCfg.SlotsPerEpoch - args.targetSlot = utils.GetCurrentSlot(cfg.genesisCfg.GenesisTime, cfg.beaconCfg.SecondsPerSlot) + args.targetSlot = cfg.ethClock.GetCurrentSlot() // Note that the target epoch is always one behind. this is because we are always behind in the current epoch, so it would not be very useful - args.targetEpoch = utils.GetCurrentEpoch(cfg.genesisCfg.GenesisTime, cfg.beaconCfg.SecondsPerSlot, cfg.beaconCfg.SlotsPerEpoch) - 1 + args.targetEpoch = cfg.ethClock.GetCurrentEpoch() - 1 return }, Stages: map[string]clstages.Stage[*Cfg, Args]{ @@ -231,16 +252,16 @@ func ConsensusClStages(ctx context.Context, } // This stage is special so use context.Background() TODO(Giulio2002): make the context be passed in startingSlot := cfg.state.LatestBlockHeader().Slot - downloader := network2.NewBackwardBeaconDownloader(context.Background(), cfg.rpc, cfg.indiciesDB) + downloader := network2.NewBackwardBeaconDownloader(context.Background(), cfg.rpc, cfg.executionClient, cfg.indiciesDB) - if err := SpawnStageHistoryDownload(StageHistoryReconstruction(downloader, cfg.antiquary, cfg.sn, cfg.beaconDB, cfg.indiciesDB, cfg.executionClient, cfg.genesisCfg, cfg.beaconCfg, cfg.backfilling, false, startingRoot, startingSlot, cfg.tmpdir, 600*time.Millisecond, logger), context.Background(), logger); err != nil { + if err := SpawnStageHistoryDownload(StageHistoryReconstruction(downloader, cfg.antiquary, cfg.sn, cfg.indiciesDB, cfg.executionClient, cfg.beaconCfg, cfg.backfilling, cfg.blobBackfilling, false, startingRoot, startingSlot, cfg.tmpdir, 600*time.Millisecond, cfg.blockCollector, cfg.blockReader, cfg.blobStore, logger), context.Background(), logger); err != nil { cfg.hasDownloaded = false return err } return nil }, }, - CatchUpEpochs: { + ForwardSync: { Description: `if we are 1 or more epochs behind, we download in parallel by epoch`, TransitionFunc: func(cfg *Cfg, args Args, err error) string { if x := MetaCatchingUp(args); x != "" { @@ -249,71 +270,102 @@ func ConsensusClStages(ctx context.Context, return CatchUpBlocks }, ActionFunc: func(ctx context.Context, logger log.Logger, cfg *Cfg, args Args) error { - logger.Info("[Caplin] Downloading epochs from reqresp", "from", args.seenEpoch, "to", args.targetEpoch) - currentEpoch := args.seenEpoch - blockBatch := []*types.Block{} shouldInsert := cfg.executionClient != nil && cfg.executionClient.SupportInsertion() - tx, err := cfg.indiciesDB.BeginRw(ctx) - if err != nil { - return err - } - defer tx.Rollback() - MainLoop: - for currentEpoch <= args.targetEpoch+1 { - startBlock := currentEpoch * cfg.beaconCfg.SlotsPerEpoch - blocks, err := rpcSource.GetRange(ctx, tx, startBlock, cfg.beaconCfg.SlotsPerEpoch) - if err != nil { - return err - } - // If we got an empty packet ban the peer - if len(blocks.Data) == 0 { - cfg.rpc.BanPeer(blocks.Peer) - log.Debug("no data received from peer in epoch download") - continue MainLoop - } - - logger.Info("[Caplin] Epoch downloaded", "epoch", currentEpoch) - for _, block := range blocks.Data { + downloader := network2.NewForwardBeaconDownloader(ctx, cfg.rpc) + finalizedCheckpoint := cfg.forkChoice.FinalizedCheckpoint() + var currentSlot atomic.Uint64 + currentSlot.Store(finalizedCheckpoint.Epoch() * cfg.beaconCfg.SlotsPerEpoch) + secsPerLog := 30 + logTicker := time.NewTicker(time.Duration(secsPerLog) * time.Second) + // Always start from the current finalized checkpoint + downloader.SetHighestProcessedRoot(finalizedCheckpoint.BlockRoot()) + downloader.SetHighestProcessedSlot(currentSlot.Load()) + downloader.SetProcessFunction(func(highestSlotProcessed uint64, highestBlockRootProcessed common.Hash, blocks []*cltypes.SignedBeaconBlock) (newHighestSlotProcessed uint64, newHighestBlockRootProcessed common.Hash, err error) { + initialHighestSlotProcessed := highestSlotProcessed + initialHighestBlockRootProcessed := highestBlockRootProcessed + sort.Slice(blocks, func(i, j int) bool { + return blocks[i].Block.Slot < blocks[j].Block.Slot + }) + + for i, block := range blocks { + if err := processBlock(cfg.indiciesDB, block, false, true, false); err != nil { + log.Warn("bad blocks segment received", "err", err) + blocks = blocks[i:] + break + } if shouldInsert && block.Version() >= clparams.BellatrixVersion { - executionPayload := block.Block.Body.ExecutionPayload - body := executionPayload.Body() - txs, err := types.DecodeTransactions(body.Transactions) - if err != nil { - log.Warn("bad blocks segment received", "err", err) - cfg.rpc.BanPeer(blocks.Peer) - currentEpoch = utils.Max64(args.seenEpoch, currentEpoch-1) - continue MainLoop + if err := cfg.blockCollector.AddBlock(block.Block); err != nil { + logger.Warn("failed to add block to collector", "err", err) + blocks = blocks[i:] + break } - parentRoot := &block.Block.ParentRoot - header, err := executionPayload.RlpHeader(parentRoot) + } + + if highestSlotProcessed < block.Block.Slot { + currentSlot.Store(block.Block.Slot) + highestSlotProcessed = block.Block.Slot + highestBlockRootProcessed, err = block.Block.HashSSZ() if err != nil { - log.Warn("bad blocks segment received", "err", err) - cfg.rpc.BanPeer(blocks.Peer) - currentEpoch = utils.Max64(args.seenEpoch, currentEpoch-1) - continue MainLoop + blocks = blocks[i:] + logger.Warn("failed to hash block", "err", err) + break } - blockBatch = append(blockBatch, types.NewBlockFromStorage(executionPayload.BlockHash, header, txs, nil, body.Withdrawals)) - } - if err := processBlock(tx, block, false, true); err != nil { - log.Warn("bad blocks segment received", "err", err) - cfg.rpc.BanPeer(blocks.Peer) - currentEpoch = utils.Max64(args.seenEpoch, currentEpoch-1) - continue MainLoop } } - if len(blockBatch) > 0 { - if err := cfg.executionClient.InsertBlocks(blockBatch); err != nil { - log.Warn("bad blocks segment received", "err", err) - currentEpoch = utils.Max64(args.seenEpoch, currentEpoch-1) - blockBatch = blockBatch[:0] - continue MainLoop + // Do the DA now, first of all see what blobs to retrieve + ids, err := network2.BlobsIdentifiersFromBlocks(blocks) + if err != nil { + logger.Warn("failed to get blob identifiers", "err", err) + return initialHighestSlotProcessed, initialHighestBlockRootProcessed, err + } + if ids.Len() == 0 { // no blobs, no DA. + return highestSlotProcessed, highestBlockRootProcessed, nil + } + blobs, err := network2.RequestBlobsFrantically(ctx, cfg.rpc, ids) + if err != nil { + logger.Warn("failed to get blobs", "err", err) + return initialHighestSlotProcessed, initialHighestBlockRootProcessed, err + } + var highestProcessed, inserted uint64 + if highestProcessed, inserted, err = blob_storage.VerifyAgainstIdentifiersAndInsertIntoTheBlobStore(ctx, cfg.blobStore, ids, blobs.Responses, nil); err != nil { + logger.Warn("failed to get verify blobs", "err", err) + cfg.rpc.BanPeer(blobs.Peer) + return initialHighestSlotProcessed, initialHighestBlockRootProcessed, err + } + if inserted == uint64(ids.Len()) { + return highestSlotProcessed, highestBlockRootProcessed, nil + } + + if highestProcessed <= initialHighestSlotProcessed { + return initialHighestSlotProcessed, initialHighestBlockRootProcessed, nil + } + return highestProcessed - 1, highestBlockRootProcessed, err + }) + chainTipSlot := cfg.ethClock.GetCurrentSlot() + logger.Info("[Caplin] Forward Sync", "from", currentSlot.Load(), "to", chainTipSlot) + prevProgress := currentSlot.Load() + for downloader.GetHighestProcessedSlot() < chainTipSlot { + downloader.RequestMore(ctx) + + select { + case <-ctx.Done(): + return ctx.Err() + case <-logTicker.C: + progressMade := chainTipSlot - currentSlot.Load() + distFromChainTip := time.Duration(progressMade*cfg.beaconCfg.SecondsPerSlot) * time.Second + timeProgress := currentSlot.Load() - prevProgress + estimatedTimeRemaining := 999 * time.Hour + if timeProgress > 0 { + estimatedTimeRemaining = time.Duration(float64(progressMade)/(float64(currentSlot.Load()-prevProgress)/float64(secsPerLog))) * time.Second } - blockBatch = blockBatch[:0] + prevProgress = currentSlot.Load() + logger.Info("[Caplin] Forward Sync", "progress", currentSlot.Load(), "distance-from-chain-tip", distFromChainTip, "estimated-time-remaining", estimatedTimeRemaining) + default: } - currentEpoch++ } - return tx.Commit() + + return nil }, }, CatchUpBlocks: { @@ -326,91 +378,164 @@ func ConsensusClStages(ctx context.Context, }, ActionFunc: func(ctx context.Context, logger log.Logger, cfg *Cfg, args Args) error { totalRequest := args.targetSlot - args.seenSlot + readyTimeout := time.NewTimer(10 * time.Second) + readyInterval := time.NewTimer(50 * time.Millisecond) + defer readyTimeout.Stop() + defer readyInterval.Stop() + if cfg.executionClient != nil { + ReadyLoop: + for { // if the client does not support insertion, then skip + select { + case <-ctx.Done(): + return ctx.Err() + case <-readyTimeout.C: + return nil + case <-readyInterval.C: + ready, err := cfg.executionClient.Ready(ctx) + if err != nil { + return err + } + if ready { + break ReadyLoop + } + } + } + } + + tmpDB := memdb.New(cfg.tmpdir) + defer tmpDB.Close() + tx, err := tmpDB.BeginRw(ctx) + if err != nil { + return err + } + defer tx.Rollback() + + if cfg.executionClient != nil && cfg.executionClient.SupportInsertion() { + if err := cfg.blockCollector.Flush(context.Background()); err != nil { + return err + } + } + tx.Rollback() + logger.Debug("waiting for blocks...", "seenSlot", args.seenSlot, "targetSlot", args.targetSlot, "requestedSlots", totalRequest, ) - respCh := make(chan *peers.PeeredObject[[]*cltypes.SignedBeaconBlock]) + respCh := make(chan *peers.PeeredObject[[]*cltypes.SignedBeaconBlock], 1024) errCh := make(chan error) - sources := []persistence.BlockSource{gossipSource, rpcSource} - // if we are more than one block behind, we request the rpc source as well - if totalRequest > 2 { - sources = append(sources, rpcSource) - } // 15 seconds is a good timeout for this - ctx, cn := context.WithTimeout(ctx, 15*time.Second) + ctx, cn := context.WithTimeout(ctx, 25*time.Second) defer cn() - // we go ask all the sources and see who gets back to us first. whoever does is the winner!! - for _, v := range sources { - sourceFunc := v.GetRange - go func(source persistence.BlockSource) { - if _, ok := source.(*persistence.BeaconRpcSource); ok { - time.Sleep(2 * time.Second) - var blocks *peers.PeeredObject[[]*cltypes.SignedBeaconBlock] - Loop: - for { - var err error - from := args.seenSlot - 2 - currentSlot := utils.GetCurrentSlot(cfg.genesisCfg.GenesisTime, cfg.beaconCfg.SecondsPerSlot) - count := (currentSlot - from) + 2 - if currentSlot <= cfg.forkChoice.HighestSeen() { - time.Sleep(100 * time.Millisecond) - continue - } - blocks, err = sourceFunc(ctx, nil, from, count) - if err != nil { - errCh <- err - return - } - for _, block := range blocks.Data { - if block.Block.Slot >= currentSlot { - break Loop - } - } - } - respCh <- blocks + go func() { + select { + case <-time.After((time.Duration(cfg.beaconCfg.SecondsPerSlot) * time.Second) / 2): + case <-ctx.Done(): + return + } + + for { + var blocks *peers.PeeredObject[[]*cltypes.SignedBeaconBlock] + var err error + from := cfg.forkChoice.HighestSeen() - 2 + currentSlot := cfg.ethClock.GetCurrentSlot() + count := (currentSlot - from) + 4 + if cfg.forkChoice.HighestSeen() >= args.targetSlot { return } - blocks, err := sourceFunc(ctx, nil, args.seenSlot+1, totalRequest) + blocks, err = rpcSource.GetRange(ctx, nil, from, count) if err != nil { errCh <- err return } - respCh <- blocks - }(v) - } - tx, err := cfg.indiciesDB.BeginRw(ctx) - if err != nil { - return err - } - defer tx.Rollback() + if len(blocks.Data) == 0 { + continue + } + ids, err := network2.BlobsIdentifiersFromBlocks(blocks.Data) + if err != nil { + errCh <- err + return + } + var inserted uint64 + + for inserted != uint64(ids.Len()) { + select { + case <-ctx.Done(): + return + default: + } + blobs, err := network2.RequestBlobsFrantically(ctx, cfg.rpc, ids) + if err != nil { + errCh <- err + return + } + if _, inserted, err = blob_storage.VerifyAgainstIdentifiersAndInsertIntoTheBlobStore(ctx, cfg.blobStore, ids, blobs.Responses, nil); err != nil { + errCh <- err + return + } + } + select { + case respCh <- blocks: + case <-ctx.Done(): + return + case <-time.After(time.Second): // take a smol pause + } + } + }() logTimer := time.NewTicker(30 * time.Second) defer logTimer.Stop() + // blocks may be scheduled for later execution outside of the catch-up flow + presenceTicker := time.NewTicker(20 * time.Millisecond) + defer presenceTicker.Stop() + seenBlockRoots := make(map[common.Hash]struct{}) MainLoop: for { select { + case <-presenceTicker.C: + if cfg.forkChoice.HighestSeen() >= args.targetSlot { + break MainLoop + } case <-ctx.Done(): return errors.New("timeout waiting for blocks") case err := <-errCh: return err case blocks := <-respCh: for _, block := range blocks.Data { - if err := processBlock(tx, block, true, true); err != nil { - log.Error("bad blocks segment received", "err", err) - cfg.rpc.BanPeer(blocks.Peer) - continue MainLoop + + if _, ok := cfg.forkChoice.GetHeader(block.Block.ParentRoot); !ok { + time.Sleep(time.Millisecond) + continue } - block.Block.Body.Attestations.Range(func(idx int, a *solid.Attestation, total int) bool { - if err = cfg.forkChoice.OnAttestation(a, true, false); err != nil { - log.Debug("bad attestation received", "err", err) + // we can ignore this error because the block would not process if the hashssz failed + blockRoot, _ := block.Block.HashSSZ() + if _, ok := cfg.forkChoice.GetHeader(blockRoot); ok { + if block.Block.Slot >= args.targetSlot { + break MainLoop } - return true - }) + continue + } + if _, ok := seenBlockRoots[blockRoot]; ok { + continue + } + seenBlockRoots[blockRoot] = struct{}{} + if err := processBlock(cfg.indiciesDB, block, true, true, true); err != nil { + log.Debug("bad blocks segment received", "err", err) + continue + } + + if err := tx.Commit(); err != nil { + return err + } + // publish block to event handler + cfg.emitter.Publish("block", map[string]any{ + "slot": strconv.Itoa(int(block.Block.Slot)), + "block": common.Hash(blockRoot), + "execution_optimistic": false, // TODO: i don't know what to put here. i see other places doing false, leaving flase for now + }) if block.Block.Slot >= args.targetSlot { break MainLoop } @@ -419,12 +544,13 @@ func ConsensusClStages(ctx context.Context, logger.Info("[Caplin] Progress", "progress", cfg.forkChoice.HighestSeen(), "from", args.seenSlot, "to", args.targetSlot) } } - return tx.Commit() + + return nil }, }, ForkChoice: { Description: `fork choice stage. We will send all fork choise things here - also, we will wait up to delay seconds to deal with attestations + side forks`, + also, we will wait up to delay seconds to deal with attestations + side forks`, TransitionFunc: func(cfg *Cfg, args Args, err error) string { if x := MetaCatchingUp(args); x != "" { return x @@ -436,7 +562,7 @@ func ConsensusClStages(ctx context.Context, // Now check the head headRoot, headSlot, err := cfg.forkChoice.GetHead() if err != nil { - return err + return fmt.Errorf("failed to get head: %w", err) } // Do forkchoice if possible @@ -444,17 +570,23 @@ func ConsensusClStages(ctx context.Context, finalizedCheckpoint := cfg.forkChoice.FinalizedCheckpoint() logger.Debug("Caplin is sending forkchoice") // Run forkchoice - if err := cfg.forkChoice.Engine().ForkChoiceUpdate( + if _, err := cfg.forkChoice.Engine().ForkChoiceUpdate( + ctx, cfg.forkChoice.GetEth1Hash(finalizedCheckpoint.BlockRoot()), - cfg.forkChoice.GetEth1Hash(headRoot), + cfg.forkChoice.GetEth1Hash(headRoot), nil, ); err != nil { logger.Warn("Could not set forkchoice", "err", err) return err } } + if err := cfg.rpc.SetStatus(cfg.forkChoice.FinalizedCheckpoint().BlockRoot(), + cfg.forkChoice.FinalizedCheckpoint().Epoch(), + headRoot, headSlot); err != nil { + logger.Warn("Could not set status", "err", err) + } tx, err := cfg.indiciesDB.BeginRw(ctx) if err != nil { - return err + return fmt.Errorf("failed to begin transaction: %w", err) } defer tx.Rollback() @@ -467,18 +599,18 @@ func ConsensusClStages(ctx context.Context, currentSlot := headSlot currentCanonical, err := beacon_indicies.ReadCanonicalBlockRoot(tx, currentSlot) if err != nil { - return err + return fmt.Errorf("failed to read canonical block root: %w", err) } - reconnectionRoots := make([]canonicalEntry, 0, 1) + reconnectionRoots := []canonicalEntry{{currentSlot, currentRoot}} for currentRoot != currentCanonical { var newFoundSlot *uint64 if currentRoot, err = beacon_indicies.ReadParentBlockRoot(ctx, tx, currentRoot); err != nil { - return err + return fmt.Errorf("failed to read parent block root: %w", err) } if newFoundSlot, err = beacon_indicies.ReadBlockSlotByBlockRoot(tx, currentRoot); err != nil { - return err + return fmt.Errorf("failed to read block slot by block root: %w", err) } if newFoundSlot == nil { break @@ -486,54 +618,88 @@ func ConsensusClStages(ctx context.Context, currentSlot = *newFoundSlot currentCanonical, err = beacon_indicies.ReadCanonicalBlockRoot(tx, currentSlot) if err != nil { - return err + return fmt.Errorf("failed to read canonical block root: %w", err) } reconnectionRoots = append(reconnectionRoots, canonicalEntry{currentSlot, currentRoot}) } if err := beacon_indicies.TruncateCanonicalChain(ctx, tx, currentSlot); err != nil { - return err + return fmt.Errorf("failed to truncate canonical chain: %w", err) } for i := len(reconnectionRoots) - 1; i >= 0; i-- { if err := beacon_indicies.MarkRootCanonical(ctx, tx, reconnectionRoots[i].slot, reconnectionRoots[i].root); err != nil { - return err + return fmt.Errorf("failed to mark root canonical: %w", err) } } if err := beacon_indicies.MarkRootCanonical(ctx, tx, headSlot, headRoot); err != nil { - return err + return fmt.Errorf("failed to mark root canonical: %w", err) } // Increment validator set headState, err := cfg.forkChoice.GetStateAtBlockRoot(headRoot, false) if err != nil { - return err + return fmt.Errorf("failed to get state at block root: %w", err) } cfg.forkChoice.SetSynced(true) if err := cfg.syncedData.OnHeadState(headState); err != nil { - return err + return fmt.Errorf("failed to set head state: %w", err) } start := time.Now() + + copiedHeadState := cfg.syncedData.HeadState() // it is just copied, so we can use it without worrying about concurrency + + if _, err = cfg.attestationDataProducer.ProduceAndCacheAttestationData(copiedHeadState, copiedHeadState.Slot(), 0); err != nil { + logger.Warn("failed to produce and cache attestation data", "err", err) + } // Incement some stuff here preverifiedValidators := cfg.forkChoice.PreverifiedValidator(headState.FinalizedCheckpoint().BlockRoot()) preverifiedHistoricalSummary := cfg.forkChoice.PreverifiedHistoricalSummaries(headState.FinalizedCheckpoint().BlockRoot()) preverifiedHistoricalRoots := cfg.forkChoice.PreverifiedHistoricalRoots(headState.FinalizedCheckpoint().BlockRoot()) if err := state_accessors.IncrementPublicKeyTable(tx, headState, preverifiedValidators); err != nil { - return err + return fmt.Errorf("failed to increment public key table: %w", err) } if err := state_accessors.IncrementHistoricalSummariesTable(tx, headState, preverifiedHistoricalSummary); err != nil { - return err + return fmt.Errorf("failed to increment historical summaries table: %w", err) } if err := state_accessors.IncrementHistoricalRootsTable(tx, headState, preverifiedHistoricalRoots); err != nil { - return err + return fmt.Errorf("failed to increment historical roots table: %w", err) } log.Debug("Incremented state history", "elapsed", time.Since(start), "preverifiedValidators", preverifiedValidators) + stateRoot, err := headState.HashSSZ() + if err != nil { + return fmt.Errorf("failed to hash ssz: %w", err) + } + + headEpoch := headSlot / cfg.beaconCfg.SlotsPerEpoch + previous_duty_dependent_root, err := headState.GetBlockRootAtSlot((headEpoch-1)*cfg.beaconCfg.SlotsPerEpoch - 1) + if err != nil { + return fmt.Errorf("failed to get block root at slot for previous_duty_dependent_root: %w", err) + } + current_duty_dependent_root, err := headState.GetBlockRootAtSlot(headEpoch*cfg.beaconCfg.SlotsPerEpoch - 1) + if err != nil { + return fmt.Errorf("failed to get block root at slot for current_duty_dependent_root: %w", err) + } + // emit the head event + cfg.emitter.Publish("head", map[string]any{ + "slot": strconv.Itoa(int(headSlot)), + "block": headRoot, + "state": common.Hash(stateRoot), + "epoch_transition": true, + "previous_duty_dependent_root": previous_duty_dependent_root, + "current_duty_dependent_root": current_duty_dependent_root, + "execution_optimistic": false, + }) + var m runtime.MemStats dbg.ReadMemStats(&m) logger.Debug("Imported chain segment", "hash", headRoot, "slot", headSlot, "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys)) - return tx.Commit() + if err := tx.Commit(); err != nil { + return err + } + return nil }, }, ListenForForks: { @@ -551,37 +717,7 @@ func ConsensusClStages(ctx context.Context, }, ActionFunc: func(ctx context.Context, logger log.Logger, cfg *Cfg, args Args) error { - slotTime := utils.GetSlotTime(cfg.genesisCfg.GenesisTime, cfg.beaconCfg.SecondsPerSlot, args.targetSlot).Add( - time.Duration(cfg.beaconCfg.SecondsPerSlot) * (time.Second / 3), - ) - waitDur := slotTime.Sub(time.Now()) - ctx, cn := context.WithTimeout(ctx, waitDur) - defer cn() - tx, err := cfg.indiciesDB.BeginRw(ctx) - if err != nil { - return err - } - defer tx.Rollback() - // try to get the current block - blocks, err := gossipSource.GetRange(ctx, tx, args.seenSlot, 1) - if err != nil { - if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { - return nil - } - return err - } - - for _, block := range blocks.Data { - err := processBlock(tx, block, true, true) - if err != nil { - // its okay if block processing fails - logger.Warn("extra block failed validation", "err", err) - return nil - } - shouldForkChoiceSinceReorg = true - logger.Debug("extra block received", "slot", args.seenSlot) - } - return tx.Commit() + return nil // Remove completely in a subsequent refactor }, }, CleanupAndPruning: { @@ -598,22 +734,19 @@ func ConsensusClStages(ctx context.Context, return err } defer tx.Rollback() - // clean up some old ranges - err = gossipSource.PurgeRange(ctx, tx, 1, args.seenSlot-cfg.beaconCfg.SlotsPerEpoch*16) - if err != nil { - return err - } - // TODO(Giulio2002): schedule snapshots retirement if needed. + pruneDistance := uint64(1_000_000) + if !cfg.backfilling { - if err := cfg.beaconDB.PurgeRange(ctx, tx, 1, cfg.forkChoice.HighestSeen()-100_000); err != nil { - return err - } - if err := beacon_indicies.PruneBlockRoots(ctx, tx, 0, cfg.forkChoice.HighestSeen()-100_000); err != nil { + if err := beacon_indicies.PruneBlocks(ctx, tx, args.seenSlot-pruneDistance); err != nil { return err } } - return tx.Commit() + if err := tx.Commit(); err != nil { + return err + } + return cfg.blobStore.Prune() + }, }, SleepForSlot: { @@ -626,7 +759,7 @@ func ConsensusClStages(ctx context.Context, }, ActionFunc: func(ctx context.Context, logger log.Logger, cfg *Cfg, args Args) error { nextSlot := args.seenSlot + 1 - nextSlotTime := utils.GetSlotTime(cfg.genesisCfg.GenesisTime, cfg.beaconCfg.SecondsPerSlot, nextSlot) + nextSlotTime := cfg.ethClock.GetSlotTime(nextSlot) nextSlotDur := nextSlotTime.Sub(time.Now()) logger.Debug("sleeping until next slot", "slot", nextSlot, "time", nextSlotTime, "dur", nextSlotDur) time.Sleep(nextSlotDur) diff --git a/cl/phase1/stages/stage_history_download.go b/cl/phase1/stages/stage_history_download.go index c8fc88baa79..44985789950 100644 --- a/cl/phase1/stages/stage_history_download.go +++ b/cl/phase1/stages/stage_history_download.go @@ -3,65 +3,68 @@ package stages import ( "context" "fmt" + "math" "sync/atomic" "time" - "github.com/ledgerwatch/erigon-lib/kv/dbutils" - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/etl" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/erigon/cl/antiquary" - "github.com/ledgerwatch/erigon/cl/persistence" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" "github.com/ledgerwatch/erigon/cl/phase1/execution_client" + "github.com/ledgerwatch/erigon/cl/phase1/execution_client/block_collector" "github.com/ledgerwatch/erigon/cl/phase1/network" - "github.com/ledgerwatch/erigon/cl/utils" - "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/log/v3" ) type StageHistoryReconstructionCfg struct { - genesisCfg *clparams.GenesisConfig - beaconCfg *clparams.BeaconChainConfig - downloader *network.BackwardBeaconDownloader - sn *freezeblocks.CaplinSnapshots - startingRoot libcommon.Hash - backfilling bool - waitForAllRoutines bool - startingSlot uint64 - tmpdir string - db persistence.BeaconChainDatabase - indiciesDB kv.RwDB - engine execution_client.ExecutionEngine - antiquary *antiquary.Antiquary - logger log.Logger - backfillingThrottling time.Duration + beaconCfg *clparams.BeaconChainConfig + downloader *network.BackwardBeaconDownloader + sn *freezeblocks.CaplinSnapshots + startingRoot libcommon.Hash + backfilling bool + blobsBackfilling bool + waitForAllRoutines bool + startingSlot uint64 + tmpdir string + indiciesDB kv.RwDB + engine execution_client.ExecutionEngine + antiquary *antiquary.Antiquary + logger log.Logger + executionBlocksCollector block_collector.BlockCollector + backfillingThrottling time.Duration + blockReader freezeblocks.BeaconSnapshotReader + blobStorage blob_storage.BlobStorage } const logIntervalTime = 30 * time.Second -func StageHistoryReconstruction(downloader *network.BackwardBeaconDownloader, antiquary *antiquary.Antiquary, sn *freezeblocks.CaplinSnapshots, db persistence.BeaconChainDatabase, indiciesDB kv.RwDB, engine execution_client.ExecutionEngine, genesisCfg *clparams.GenesisConfig, beaconCfg *clparams.BeaconChainConfig, backfilling, waitForAllRoutines bool, startingRoot libcommon.Hash, startinSlot uint64, tmpdir string, backfillingThrottling time.Duration, logger log.Logger) StageHistoryReconstructionCfg { +func StageHistoryReconstruction(downloader *network.BackwardBeaconDownloader, antiquary *antiquary.Antiquary, sn *freezeblocks.CaplinSnapshots, indiciesDB kv.RwDB, engine execution_client.ExecutionEngine, beaconCfg *clparams.BeaconChainConfig, backfilling, blobsBackfilling, waitForAllRoutines bool, startingRoot libcommon.Hash, startinSlot uint64, tmpdir string, backfillingThrottling time.Duration, executionBlocksCollector block_collector.BlockCollector, blockReader freezeblocks.BeaconSnapshotReader, blobStorage blob_storage.BlobStorage, logger log.Logger) StageHistoryReconstructionCfg { return StageHistoryReconstructionCfg{ - genesisCfg: genesisCfg, - beaconCfg: beaconCfg, - downloader: downloader, - startingRoot: startingRoot, - tmpdir: tmpdir, - startingSlot: startinSlot, - waitForAllRoutines: waitForAllRoutines, - logger: logger, - backfilling: backfilling, - indiciesDB: indiciesDB, - antiquary: antiquary, - db: db, - engine: engine, - sn: sn, - backfillingThrottling: backfillingThrottling, + beaconCfg: beaconCfg, + downloader: downloader, + startingRoot: startingRoot, + tmpdir: tmpdir, + startingSlot: startinSlot, + waitForAllRoutines: waitForAllRoutines, + logger: logger, + backfilling: backfilling, + indiciesDB: indiciesDB, + antiquary: antiquary, + engine: engine, + sn: sn, + backfillingThrottling: backfillingThrottling, + executionBlocksCollector: executionBlocksCollector, + blockReader: blockReader, + blobsBackfilling: blobsBackfilling, + blobStorage: blobStorage, } } @@ -74,23 +77,19 @@ func SpawnStageHistoryDownload(cfg StageHistoryReconstructionCfg, ctx context.Co if !clparams.SupportBackfilling(cfg.beaconCfg.DepositNetworkID) { cfg.backfilling = false // disable backfilling if not on a supported network } - executionBlocksCollector := etl.NewCollector("HistoryDownload", cfg.tmpdir, etl.NewSortableBuffer(etl.BufferOptimalSize), logger) - defer executionBlocksCollector.Close() - executionBlocksCollector.LogLvl(log.LvlDebug) + // Start the procedure logger.Info("Starting downloading History", "from", currentSlot) // Setup slot and block root cfg.downloader.SetSlotToDownload(currentSlot) cfg.downloader.SetExpectedRoot(blockRoot) - foundLatestEth1ValidBlock := &atomic.Bool{} - foundLatestEth1ValidBlock.Store(false) - if cfg.engine == nil || !cfg.engine.SupportInsertion() { - foundLatestEth1ValidBlock.Store(true) // skip this if we are not using an engine supporting direct insertion - } var currEth1Progress atomic.Int64 - bytesReadInTotal := atomic.Uint64{} + destinationSlotForEL := uint64(math.MaxUint64) + if cfg.engine != nil && cfg.engine.SupportInsertion() && cfg.beaconCfg.DenebForkEpoch != math.MaxUint64 { + destinationSlotForEL = cfg.beaconCfg.BellatrixForkEpoch * cfg.beaconCfg.SlotsPerEpoch + } // Set up onNewBlock callback cfg.downloader.SetOnNewBlock(func(blk *cltypes.SignedBeaconBlock) (finished bool, err error) { tx, err := cfg.indiciesDB.BeginRw(ctx) @@ -102,47 +101,46 @@ func SpawnStageHistoryDownload(cfg StageHistoryReconstructionCfg, ctx context.Co currEth1Progress.Store(int64(blk.Block.Body.ExecutionPayload.BlockNumber)) } - destinationSlot := cfg.sn.SegmentsMax() - bytesReadInTotal.Add(uint64(blk.EncodingSizeSSZ())) + destinationSlotForCL := cfg.sn.SegmentsMax() slot := blk.Block.Slot - if destinationSlot <= blk.Block.Slot { - if err := cfg.db.WriteBlock(ctx, tx, blk, true); err != nil { + if destinationSlotForCL <= blk.Block.Slot { + if err := beacon_indicies.WriteBeaconBlockAndIndicies(ctx, tx, blk, true); err != nil { return false, err } } - if !foundLatestEth1ValidBlock.Load() && blk.Version() >= clparams.BellatrixVersion { + if cfg.engine != nil && cfg.engine.SupportInsertion() && blk.Version() >= clparams.BellatrixVersion { payload := blk.Block.Body.ExecutionPayload - encodedPayload, err := payload.EncodeSSZ(nil) + hasELBlock, err := cfg.engine.HasBlock(ctx, payload.BlockHash) if err != nil { - return false, fmt.Errorf("error encoding execution payload during download: %s", err) - } - // Use snappy compression that the temporary files do not take too much disk. - encodedPayload = utils.CompressSnappy(append(encodedPayload, append(blk.Block.ParentRoot[:], byte(blk.Version()))...)) - if err := executionBlocksCollector.Collect(dbutils.BlockBodyKey(payload.BlockNumber, payload.BlockHash), encodedPayload); err != nil { - return false, fmt.Errorf("error collecting execution payload during download: %s", err) - } - if currEth1Progress.Load()%100 == 0 { - return false, tx.Commit() + return false, fmt.Errorf("error retrieving whether execution payload is present: %s", err) } - bodyChainHeader, err := cfg.engine.GetBodiesByHashes([]libcommon.Hash{payload.BlockHash}) - if err != nil { - return false, fmt.Errorf("error retrieving whether execution payload is present: %s", err) + if !hasELBlock { + if err := cfg.executionBlocksCollector.AddBlock(blk.Block); err != nil { + return false, fmt.Errorf("error adding block to execution blocks collector: %s", err) + } + if currEth1Progress.Load()%100 == 0 { + return false, tx.Commit() + } + } + if hasELBlock && !cfg.backfilling { + return true, tx.Commit() } - foundLatestEth1ValidBlock.Store(len(bodyChainHeader) > 0 || cfg.engine.FrozenBlocks() > payload.BlockNumber) } - if blk.Version() <= clparams.AltairVersion { - foundLatestEth1ValidBlock.Store(true) + isInElSnapshots := true + if blk.Version() >= clparams.BellatrixVersion && cfg.engine != nil && cfg.engine.SupportInsertion() { + isInElSnapshots = blk.Block.Body.ExecutionPayload.BlockNumber < cfg.engine.FrozenBlocks(ctx) } - - return foundLatestEth1ValidBlock.Load() && (!cfg.backfilling || slot <= destinationSlot), tx.Commit() + return (!cfg.backfilling || slot <= destinationSlotForCL) && (slot <= destinationSlotForEL || isInElSnapshots), tx.Commit() }) prevProgress := cfg.downloader.Progress() finishCh := make(chan struct{}) // Start logging thread + isBackfilling := atomic.Bool{} + go func() { logInterval := time.NewTicker(logIntervalTime) defer logInterval.Stop() @@ -150,14 +148,9 @@ func SpawnStageHistoryDownload(cfg StageHistoryReconstructionCfg, ctx context.Co select { case <-logInterval.C: logTime := logIntervalTime - // if we found the latest valid hash extend ticker to 10 times the normal amout - if foundLatestEth1ValidBlock.Load() { - logTime = 20 * logIntervalTime - logInterval.Reset(logTime) - } if cfg.engine != nil && cfg.engine.SupportInsertion() { - if ready, err := cfg.engine.Ready(); !ready { + if ready, err := cfg.engine.Ready(ctx); !ready { if err != nil { log.Warn("could not log progress", "err", err) } @@ -171,24 +164,25 @@ func SpawnStageHistoryDownload(cfg StageHistoryReconstructionCfg, ctx context.Co ratio := float64(logTime / time.Second) speed := blockProgress / ratio prevProgress = currProgress - peerCount, err := cfg.downloader.Peers() - if err != nil { - return + + if speed == 0 { + continue } logArgs = append(logArgs, "slot", currProgress, "blockNumber", currEth1Progress.Load(), "blk/sec", fmt.Sprintf("%.1f", speed), - "mbps/sec", fmt.Sprintf("%.4f", float64(bytesReadInTotal.Load())/(1000*1000*ratio)), - "peers", peerCount, "snapshots", cfg.sn.SegmentsMax(), - "reconnected", foundLatestEth1ValidBlock.Load(), ) - bytesReadInTotal.Store(0) - logger.Info("Downloading History", logArgs...) + logMsg := "Node is still syncing... downloading past blocks" + if isBackfilling.Load() { + logMsg = "Node has finished syncing... full history is being downloaded for archiving purposes" + } + logger.Info(logMsg, logArgs...) case <-finishCh: return case <-ctx.Done(): + return } } }() @@ -201,12 +195,36 @@ func SpawnStageHistoryDownload(cfg StageHistoryReconstructionCfg, ctx context.Co } } cfg.antiquary.NotifyBackfilled() - log.Info("Backfilling finished") + if cfg.backfilling { + cfg.logger.Info("Full backfilling finished") + } else { + cfg.logger.Info("Missing blocks download finished (note: this does not mean that the history is complete, only that the missing blocks need for sync have been downloaded)") + } close(finishCh) + if cfg.blobsBackfilling { + go func() { + if err := downloadBlobHistoryWorker(cfg, ctx, logger); err != nil { + logger.Error("Error downloading blobs", "err", err) + } + // set a timer every 1 hour as a failsafe + ticker := time.NewTicker(time.Hour) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + if err := downloadBlobHistoryWorker(cfg, ctx, logger); err != nil { + logger.Error("Error downloading blobs", "err", err) + } + } + } + }() + } }() - // Lets wait for the latestValidHash to be turned on - for !foundLatestEth1ValidBlock.Load() || (cfg.waitForAllRoutines && !cfg.downloader.Finished()) { + // We block until we are done with the EL side of the backfilling with 2000 blocks of safety margin. + for !cfg.downloader.Finished() && (cfg.engine == nil || cfg.downloader.Progress() > destinationSlotForEL) { select { case <-ctx.Done(): return ctx.Err() @@ -223,60 +241,119 @@ func SpawnStageHistoryDownload(cfg StageHistoryReconstructionCfg, ctx context.Co return err } defer tx2.Rollback() - - blockBatch := []*types.Block{} - blockBatchMaxSize := 1000 + isBackfilling.Store(true) cfg.logger.Info("Ready to insert history, waiting for sync cycle to finish") - if err := executionBlocksCollector.Load(tx2, kv.Headers, func(k, vComp []byte, _ etl.CurrentTableReader, next etl.LoadNextFunc) error { - if cfg.engine == nil || !cfg.engine.SupportInsertion() { - return next(k, nil, nil) - } - var err error - var v []byte - if v, err = utils.DecompressSnappy(vComp); err != nil { - return fmt.Errorf("error decompressing dump during collection: %s", err) + return nil +} + +// downloadBlobHistoryWorker is a worker that downloads the blob history by using the already downloaded beacon blocks +func downloadBlobHistoryWorker(cfg StageHistoryReconstructionCfg, ctx context.Context, logger log.Logger) error { + currentSlot := cfg.startingSlot + 1 + blocksBatchSize := uint64(8) // requests 8 blocks worth of blobs at a time + tx, err := cfg.indiciesDB.BeginRo(ctx) + if err != nil { + return err + } + defer tx.Rollback() + logInterval := time.NewTicker(logIntervalTime) + + rpc := cfg.downloader.RPC() + prevLogSlot := currentSlot + prevTime := time.Now() + targetSlot := cfg.beaconCfg.DenebForkEpoch * cfg.beaconCfg.SlotsPerEpoch + cfg.logger.Info("Downloading blobs backwards", "from", currentSlot, "to", targetSlot) + for currentSlot >= targetSlot { + if currentSlot <= cfg.sn.FrozenBlobs() { + break } - version := clparams.StateVersion(v[len(v)-1]) - parentRoot := libcommon.BytesToHash(v[len(v)-1-32 : len(v)-1]) + batch := make([]*cltypes.SignedBlindedBeaconBlock, 0, blocksBatchSize) + visited := uint64(0) + maxIterations := uint64(32) + for ; visited < blocksBatchSize; visited++ { + if visited >= maxIterations { + break + } + if currentSlot-visited < targetSlot { + break + } + block, err := cfg.blockReader.ReadBlindedBlockBySlot(ctx, tx, currentSlot-visited) + if err != nil { + return err + } + if block == nil { + continue + } + if block.Version() < clparams.DenebVersion { + break + } + blockRoot, err := block.Block.HashSSZ() + if err != nil { + return err + } + blobsCount, err := cfg.blobStorage.KzgCommitmentsCount(ctx, blockRoot) + if err != nil { + return err + } - executionPayload := cltypes.NewEth1Block(version, cfg.beaconCfg) - if err := executionPayload.DecodeSSZ(v[:len(v)-1-32], int(version)); err != nil { - return fmt.Errorf("error decoding execution payload during collection: %s", err) + if block.Block.Body.BlobKzgCommitments.Len() == int(blobsCount) { + continue + } + batch = append(batch, block) } - if executionPayload.BlockNumber%10000 == 0 { - cfg.logger.Info("Inserting execution payload", "blockNumber", executionPayload.BlockNumber) + if len(batch) == 0 { + currentSlot -= visited + continue } - body := executionPayload.Body() - header, err := executionPayload.RlpHeader(&parentRoot) + select { + case <-ctx.Done(): + return ctx.Err() + case <-logInterval.C: + + blkSec := float64(prevLogSlot-currentSlot) / time.Since(prevTime).Seconds() + blkSecStr := fmt.Sprintf("%.1f", blkSec) + // round to 1 decimal place and convert to string + prevLogSlot = currentSlot + prevTime = time.Now() + + logger.Info("Downloading blobs backwards", "slot", currentSlot, "blks/sec", blkSecStr) + default: + } + // Generate the request + req, err := network.BlobsIdentifiersFromBlindedBlocks(batch) if err != nil { - return fmt.Errorf("error parsing rlp header during collection: %s", err) + cfg.logger.Debug("Error generating blob identifiers", "err", err) + continue } - - txs, err := types.DecodeTransactions(body.Transactions) + // Request the blobs + blobs, err := network.RequestBlobsFrantically(ctx, rpc, req) if err != nil { - return err + cfg.logger.Debug("Error requesting blobs", "err", err) + continue } - - block := types.NewBlockFromStorage(executionPayload.BlockHash, header, txs, nil, body.Withdrawals) - blockBatch = append(blockBatch, block) - if len(blockBatch) >= blockBatchMaxSize { - if err := cfg.engine.InsertBlocks(blockBatch); err != nil { - return fmt.Errorf("error inserting block during collection: %s", err) + _, _, err = blob_storage.VerifyAgainstIdentifiersAndInsertIntoTheBlobStore(ctx, cfg.blobStorage, req, blobs.Responses, func(header *cltypes.SignedBeaconBlockHeader) error { + // The block is preverified so just check that the signature is correct against the block + for _, block := range batch { + if block.Block.Slot != header.Header.Slot { + continue + } + if block.Signature != header.Signature { + return fmt.Errorf("signature mismatch beetwen blob and stored block") + } + return nil } - blockBatch = blockBatch[:0] - } - return next(k, nil, nil) - }, etl.TransformArgs{Quit: ctx.Done()}); err != nil { - return err - } - if cfg.engine != nil && cfg.engine.SupportInsertion() { - if err := cfg.engine.InsertBlocks(blockBatch); err != nil { - return fmt.Errorf("error doing last block insertion during collection: %s", err) + return fmt.Errorf("block not in batch") + }) + if err != nil { + rpc.BanPeer(blobs.Peer) + cfg.logger.Warn("Error verifying blobs", "err", err) + continue } } + log.Info("Blob history download finished successfully") + cfg.antiquary.NotifyBlobBackfilled() return nil } diff --git a/cl/pool/operation_pool.go b/cl/pool/operation_pool.go index 348680559c5..32b0725d085 100644 --- a/cl/pool/operation_pool.go +++ b/cl/pool/operation_pool.go @@ -1,6 +1,7 @@ package pool import ( + "sync" "time" "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" @@ -12,7 +13,7 @@ var operationsMultiplier = 20 // Cap the amount of cached element to max_operati type OperationPool[K comparable, T any] struct { pool *lru.Cache[K, T] // Map the Signature to the underlying object - recentlySeen map[K]time.Time + recentlySeen sync.Map // map from K to time.Time lastPruned time.Time } @@ -23,26 +24,23 @@ func NewOperationPool[K comparable, T any](maxOperationsPerBlock int, matricName } return &OperationPool[K, T]{ pool: pool, - recentlySeen: make(map[K]time.Time), + recentlySeen: sync.Map{}, } } func (o *OperationPool[K, T]) Insert(k K, operation T) { - if _, ok := o.recentlySeen[k]; ok { + if _, ok := o.recentlySeen.Load(k); ok { return } o.pool.Add(k, operation) - o.recentlySeen[k] = time.Now() + o.recentlySeen.Store(k, time.Now()) if time.Since(o.lastPruned) > lifeSpan { - deleteList := make([]K, 0, len(o.recentlySeen)) - for k, t := range o.recentlySeen { - if time.Since(t) > lifeSpan { - deleteList = append(deleteList, k) + o.recentlySeen.Range(func(k, v interface{}) bool { + if time.Since(v.(time.Time)) > lifeSpan { + o.recentlySeen.Delete(k) } - } - for _, k := range deleteList { - delete(o.recentlySeen, k) - } + return true + }) o.lastPruned = time.Now() } } @@ -58,3 +56,7 @@ func (o *OperationPool[K, T]) Has(k K) (hash bool) { func (o *OperationPool[K, T]) Raw() []T { return o.pool.Values() } + +func (o *OperationPool[K, T]) Get(k K) (T, bool) { + return o.pool.Get(k) +} diff --git a/cl/pool/operations_pool.go b/cl/pool/operations_pool.go index 949e6fda237..0cb4da68a0f 100644 --- a/cl/pool/operations_pool.go +++ b/cl/pool/operations_pool.go @@ -8,6 +8,8 @@ import ( "github.com/ledgerwatch/erigon/cl/cltypes/solid" ) +const operationsPerPool = 512 + // DoubleSignatureKey uses blake2b algorithm to merge two signatures together. blake2 is faster than sha3. func doubleSignatureKey(one, two libcommon.Bytes96) (out libcommon.Bytes96) { res := blake2b.Sum256(append(one[:], two[:]...)) @@ -29,22 +31,22 @@ type OperationsPool struct { AttesterSlashingsPool *OperationPool[libcommon.Bytes96, *cltypes.AttesterSlashing] ProposerSlashingsPool *OperationPool[libcommon.Bytes96, *cltypes.ProposerSlashing] BLSToExecutionChangesPool *OperationPool[libcommon.Bytes96, *cltypes.SignedBLSToExecutionChange] - VoluntaryExistsPool *OperationPool[uint64, *cltypes.SignedVoluntaryExit] + VoluntaryExitsPool *OperationPool[uint64, *cltypes.SignedVoluntaryExit] } func NewOperationsPool(beaconCfg *clparams.BeaconChainConfig) OperationsPool { return OperationsPool{ - AttestationsPool: NewOperationPool[libcommon.Bytes96, *solid.Attestation](int(beaconCfg.MaxAttestations), "attestationsPool"), - AttesterSlashingsPool: NewOperationPool[libcommon.Bytes96, *cltypes.AttesterSlashing](int(beaconCfg.MaxAttestations), "attesterSlashingsPool"), - ProposerSlashingsPool: NewOperationPool[libcommon.Bytes96, *cltypes.ProposerSlashing](int(beaconCfg.MaxAttestations), "proposerSlashingsPool"), - BLSToExecutionChangesPool: NewOperationPool[libcommon.Bytes96, *cltypes.SignedBLSToExecutionChange](int(beaconCfg.MaxBlsToExecutionChanges), "blsExecutionChangesPool"), - VoluntaryExistsPool: NewOperationPool[uint64, *cltypes.SignedVoluntaryExit](int(beaconCfg.MaxBlsToExecutionChanges), "voluntaryExitsPool"), + AttestationsPool: NewOperationPool[libcommon.Bytes96, *solid.Attestation](operationsPerPool, "attestationsPool"), + AttesterSlashingsPool: NewOperationPool[libcommon.Bytes96, *cltypes.AttesterSlashing](operationsPerPool, "attesterSlashingsPool"), + ProposerSlashingsPool: NewOperationPool[libcommon.Bytes96, *cltypes.ProposerSlashing](operationsPerPool, "proposerSlashingsPool"), + BLSToExecutionChangesPool: NewOperationPool[libcommon.Bytes96, *cltypes.SignedBLSToExecutionChange](operationsPerPool, "blsExecutionChangesPool"), + VoluntaryExitsPool: NewOperationPool[uint64, *cltypes.SignedVoluntaryExit](operationsPerPool, "voluntaryExitsPool"), } } func (o *OperationsPool) NotifyBlock(blk *cltypes.BeaconBlock) { blk.Body.VoluntaryExits.Range(func(_ int, exit *cltypes.SignedVoluntaryExit, _ int) bool { - o.VoluntaryExistsPool.DeleteIfExist(exit.VoluntaryExit.ValidatorIndex) + o.VoluntaryExitsPool.DeleteIfExist(exit.VoluntaryExit.ValidatorIndex) return true }) blk.Body.AttesterSlashings.Range(func(_ int, att *cltypes.AttesterSlashing, _ int) bool { @@ -59,4 +61,5 @@ func (o *OperationsPool) NotifyBlock(blk *cltypes.BeaconBlock) { o.BLSToExecutionChangesPool.DeleteIfExist(c.Signature) return true }) + o.BLSToExecutionChangesPool.pool.Purge() } diff --git a/cl/rpc/rpc.go b/cl/rpc/rpc.go index 338edaac382..c5e02ddb545 100644 --- a/cl/rpc/rpc.go +++ b/cl/rpc/rpc.go @@ -10,6 +10,7 @@ import ( "github.com/ledgerwatch/erigon/cl/sentinel/communication" "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" "github.com/c2h5oh/datasize" "github.com/golang/snappy" @@ -22,7 +23,6 @@ import ( "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/fork" "github.com/ledgerwatch/erigon/cl/utils" ) @@ -36,18 +36,18 @@ type BeaconRpcP2P struct { sentinel sentinel.SentinelClient // beaconConfig is the configuration for the beacon chain. beaconConfig *clparams.BeaconChainConfig - // genesisConfig is the configuration for the genesis block of the beacon chain. - genesisConfig *clparams.GenesisConfig + // ethClock handles all time-related operations. + ethClock eth_clock.EthereumClock } // NewBeaconRpcP2P creates a new BeaconRpcP2P struct and returns a pointer to it. // It takes a context, a sentinel.Sent -func NewBeaconRpcP2P(ctx context.Context, sentinel sentinel.SentinelClient, beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig) *BeaconRpcP2P { +func NewBeaconRpcP2P(ctx context.Context, sentinel sentinel.SentinelClient, beaconConfig *clparams.BeaconChainConfig, ethClock eth_clock.EthereumClock) *BeaconRpcP2P { return &BeaconRpcP2P{ - ctx: ctx, - sentinel: sentinel, - beaconConfig: beaconConfig, - genesisConfig: genesisConfig, + ctx: ctx, + sentinel: sentinel, + beaconConfig: beaconConfig, + ethClock: ethClock, } } @@ -55,7 +55,7 @@ func (b *BeaconRpcP2P) sendBlocksRequest(ctx context.Context, topic string, reqD // Prepare output slice. responsePacket := []*cltypes.SignedBeaconBlock{} - ctx, cn := context.WithTimeout(ctx, time.Second*time.Duration(16+30*count)) + ctx, cn := context.WithTimeout(ctx, time.Second*2) defer cn() message, err := b.sentinel.SendRequest(ctx, &sentinel.RequestData{ Data: reqData, @@ -108,7 +108,7 @@ func (b *BeaconRpcP2P) sendBlocksRequest(ctx context.Context, topic string, reqD return nil, message.Peer.Pid, fmt.Errorf("null fork digest") } - version, err := fork.ForkDigestVersion(utils.Uint32ToBytes4(respForkDigest), b.beaconConfig, b.genesisConfig.GenesisValidatorRoot) + version, err := b.ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) if err != nil { return nil, message.Peer.Pid, err } @@ -125,6 +125,105 @@ func (b *BeaconRpcP2P) sendBlocksRequest(ctx context.Context, topic string, reqD return responsePacket, message.Peer.Pid, nil } +func (b *BeaconRpcP2P) sendBlobsSidecar(ctx context.Context, topic string, reqData []byte, count uint64) ([]*cltypes.BlobSidecar, string, error) { + // Prepare output slice. + responsePacket := []*cltypes.BlobSidecar{} + + ctx, cn := context.WithTimeout(ctx, time.Second*2) + defer cn() + message, err := b.sentinel.SendRequest(ctx, &sentinel.RequestData{ + Data: reqData, + Topic: topic, + }) + if err != nil { + return nil, "", err + } + if message.Error { + rd := snappy.NewReader(bytes.NewBuffer(message.Data)) + errBytes, _ := io.ReadAll(rd) + log.Trace("received range req error", "err", string(errBytes), "raw", string(message.Data)) + return nil, message.Peer.Pid, nil + } + + r := bytes.NewReader(message.Data) + for i := 0; i < int(count); i++ { + forkDigest := make([]byte, 4) + if _, err := r.Read(forkDigest); err != nil { + if err == io.EOF { + break + } + return nil, message.Peer.Pid, err + } + + // Read varint for length of message. + encodedLn, _, err := ssz_snappy.ReadUvarint(r) + if err != nil { + return nil, message.Peer.Pid, fmt.Errorf("unable to read varint from message prefix: %w", err) + } + // Sanity check for message size. + if encodedLn > uint64(maxMessageLength) { + return nil, message.Peer.Pid, fmt.Errorf("received message too big") + } + + // Read bytes using snappy into a new raw buffer of side encodedLn. + raw := make([]byte, encodedLn) + sr := snappy.NewReader(r) + bytesRead := 0 + for bytesRead < int(encodedLn) { + n, err := sr.Read(raw[bytesRead:]) + if err != nil { + return nil, message.Peer.Pid, fmt.Errorf("read error: %w", err) + } + bytesRead += n + } + // Fork digests + respForkDigest := binary.BigEndian.Uint32(forkDigest) + if respForkDigest == 0 { + return nil, message.Peer.Pid, fmt.Errorf("null fork digest") + } + + version, err := b.ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) + if err != nil { + return nil, message.Peer.Pid, err + } + responseChunk := &cltypes.BlobSidecar{} + + if err = responseChunk.DecodeSSZ(raw, int(version)); err != nil { + return nil, message.Peer.Pid, err + } + responsePacket = append(responsePacket, responseChunk) + // TODO(issues/5884): figure out why there is this extra byte. + r.ReadByte() + } + + return responsePacket, message.Peer.Pid, nil +} + +// SendBeaconBlocksByRangeReq retrieves blocks range from beacon chain. +func (b *BeaconRpcP2P) SendBlobsSidecarByIdentifierReq(ctx context.Context, req *solid.ListSSZ[*cltypes.BlobIdentifier]) ([]*cltypes.BlobSidecar, string, error) { + var buffer buffer.Buffer + if err := ssz_snappy.EncodeAndWrite(&buffer, req); err != nil { + return nil, "", err + } + + data := libcommon.CopyBytes(buffer.Bytes()) + return b.sendBlobsSidecar(ctx, communication.BlobSidecarByRootProtocolV1, data, uint64(req.Len())) +} + +// SendBeaconBlocksByRangeReq retrieves blocks range from beacon chain. +func (b *BeaconRpcP2P) SendBlobsSidecarByRangerReq(ctx context.Context, start, count uint64) ([]*cltypes.BlobSidecar, string, error) { + var buffer buffer.Buffer + if err := ssz_snappy.EncodeAndWrite(&buffer, &cltypes.BlobsByRangeRequest{ + StartSlot: start, + Count: count, + }); err != nil { + return nil, "", err + } + + data := libcommon.CopyBytes(buffer.Bytes()) + return b.sendBlobsSidecar(ctx, communication.BlobSidecarByRangeProtocolV1, data, count*b.beaconConfig.MaxBlobsPerBlock) +} + // SendBeaconBlocksByRangeReq retrieves blocks range from beacon chain. func (b *BeaconRpcP2P) SendBeaconBlocksByRangeReq(ctx context.Context, start, count uint64) ([]*cltypes.SignedBeaconBlock, string, error) { req := &cltypes.BeaconBlocksByRangeRequest{ @@ -161,11 +260,11 @@ func (b *BeaconRpcP2P) Peers() (uint64, error) { if err != nil { return 0, err } - return amount.Amount, nil + return amount.Active, nil } func (b *BeaconRpcP2P) SetStatus(finalizedRoot libcommon.Hash, finalizedEpoch uint64, headRoot libcommon.Hash, headSlot uint64) error { - forkDigest, err := fork.ComputeForkDigest(b.beaconConfig, b.genesisConfig) + forkDigest, err := b.ethClock.CurrentForkDigest() if err != nil { return err } diff --git a/cl/sentinel/communication/ssz_snappy/encoding.go b/cl/sentinel/communication/ssz_snappy/encoding.go index 6f460b3599d..5c489e3d755 100644 --- a/cl/sentinel/communication/ssz_snappy/encoding.go +++ b/cl/sentinel/communication/ssz_snappy/encoding.go @@ -23,10 +23,9 @@ import ( "github.com/c2h5oh/datasize" "github.com/golang/snappy" - libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/types/ssz" "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/fork" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" ) var writerPool = sync.Pool{ @@ -64,14 +63,14 @@ func EncodeAndWrite(w io.Writer, val ssz.Marshaler, prefix ...byte) error { return err } -func DecodeAndRead(r io.Reader, val ssz.EncodableSSZ, b *clparams.BeaconChainConfig, genesisValidatorRoot libcommon.Hash) error { +func DecodeAndRead(r io.Reader, val ssz.EncodableSSZ, b *clparams.BeaconChainConfig, ethClock eth_clock.EthereumClock) error { var forkDigest [4]byte // TODO(issues/5884): assert the fork digest matches the expectation for // a specific configuration. if _, err := r.Read(forkDigest[:]); err != nil { return err } - version, err := fork.ForkDigestVersion(forkDigest, b, genesisValidatorRoot) + version, err := ethClock.StateVersionByForkDigest(forkDigest) if err != nil { return err } @@ -120,7 +119,7 @@ func ReadUvarint(r io.Reader) (x, n uint64, err error) { return 0, n, nil } -func DecodeListSSZ(data []byte, count uint64, list []ssz.EncodableSSZ, b *clparams.BeaconChainConfig, genesisValidatorRoot libcommon.Hash) error { +func DecodeListSSZ(data []byte, count uint64, list []ssz.EncodableSSZ, b *clparams.BeaconChainConfig, ethClock eth_clock.EthereumClock) error { objSize := list[0].EncodingSizeSSZ() r := bytes.NewReader(data) @@ -130,7 +129,7 @@ func DecodeListSSZ(data []byte, count uint64, list []ssz.EncodableSSZ, b *clpara return err } - version, err := fork.ForkDigestVersion(forkDigest, b, genesisValidatorRoot) + version, err := ethClock.StateVersionByForkDigest(forkDigest) if err != nil { return err } diff --git a/cl/sentinel/communication/topics.go b/cl/sentinel/communication/topics.go index 9c889e53654..d17419c34a1 100644 --- a/cl/sentinel/communication/topics.go +++ b/cl/sentinel/communication/topics.go @@ -31,6 +31,10 @@ const BeaconBlocksByRangeTopic = "/beacon_blocks_by_range" const BeaconBlocksByRootTopic = "/beacon_blocks_by_root" const BlobSidecarByRootTopic = "/blob_sidecars_by_root" const BlobSidecarByRangeTopic = "/blob_sidecars_by_range" +const LightClientOptimisticUpdateTopic = "/light_client_optimistic_update" +const LightClientFinalityUpdateTopic = "/light_client_finality_update" +const LightClientBootstrapTopic = "/light_client_bootstrap" +const LightClientUpdatesByRangeTopic = "/light_client_updates_by_range" // Request and Response protocol ids var ( @@ -50,5 +54,9 @@ var ( BlobSidecarByRootProtocolV1 = ProtocolPrefix + BlobSidecarByRootTopic + Schema1 + EncodingProtocol - BlobSidecarByRangeProtocolV1 = ProtocolPrefix + BlobSidecarByRangeTopic + Schema1 + EncodingProtocol + BlobSidecarByRangeProtocolV1 = ProtocolPrefix + BlobSidecarByRangeTopic + Schema1 + EncodingProtocol + LightClientOptimisticUpdateProtocolV1 = ProtocolPrefix + LightClientOptimisticUpdateTopic + Schema1 + EncodingProtocol + LightClientFinalityUpdateProtocolV1 = ProtocolPrefix + LightClientFinalityUpdateTopic + Schema1 + EncodingProtocol + LightClientBootstrapProtocolV1 = ProtocolPrefix + LightClientBootstrapTopic + Schema1 + EncodingProtocol + LightClientUpdatesByRangeProtocolV1 = ProtocolPrefix + LightClientUpdatesByRangeTopic + Schema1 + EncodingProtocol ) diff --git a/cl/sentinel/config.go b/cl/sentinel/config.go index 3157e1a96c3..7de45cbd769 100644 --- a/cl/sentinel/config.go +++ b/cl/sentinel/config.go @@ -30,7 +30,6 @@ import ( type SentinelConfig struct { NetworkConfig *clparams.NetworkConfig - GenesisConfig *clparams.GenesisConfig BeaconConfig *clparams.BeaconChainConfig IpAddr string Port int @@ -45,7 +44,8 @@ type SentinelConfig struct { TmpDir string LocalDiscovery bool - EnableBlocks bool + EnableBlocks bool + ActiveIndicies uint64 } func convertToCryptoPrivkey(privkey *ecdsa.PrivateKey) (crypto.PrivKey, error) { diff --git a/cl/sentinel/discovery.go b/cl/sentinel/discovery.go index de596304643..6a3acc096ac 100644 --- a/cl/sentinel/discovery.go +++ b/cl/sentinel/discovery.go @@ -6,7 +6,6 @@ import ( "time" "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/fork" "github.com/ledgerwatch/erigon/p2p/enode" "github.com/ledgerwatch/erigon/p2p/enr" "github.com/ledgerwatch/log/v3" @@ -54,7 +53,6 @@ func (s *Sentinel) connectWithAllPeers(multiAddrs []multiaddr.Multiaddr) error { } func (s *Sentinel) listenForPeers() { - s.listenForPeersDoneCh = make(chan struct{}, 3) enodes := []*enode.Node{} for _, node := range s.cfg.NetworkConfig.StaticPeers { newNode, err := enode.Parse(enode.ValidSchemes, node) @@ -80,11 +78,7 @@ func (s *Sentinel) listenForPeers() { log.Debug("Stopping Ethereum 2.0 peer discovery", "err", err) break } - select { - case <-s.listenForPeersDoneCh: - return - default: - } + if s.HasTooManyPeers() { log.Trace("[Sentinel] Not looking for peers, at peer limit") time.Sleep(100 * time.Millisecond) @@ -100,6 +94,7 @@ func (s *Sentinel) listenForPeers() { log.Error("[Sentinel] Could not convert to peer info", "err", err) continue } + s.pidToEnr.Store(peerInfo.ID, node.String()) // Skip Peer if IP was private. if node.IP().IsPrivate() { @@ -131,7 +126,7 @@ func (s *Sentinel) connectToBootnodes() error { func (s *Sentinel) setupENR( node *enode.LocalNode, ) (*enode.LocalNode, error) { - forkId, err := fork.ComputeForkId(s.cfg.BeaconConfig, s.cfg.GenesisConfig) + forkId, err := s.ethClock.ForkId() if err != nil { return nil, err } diff --git a/cl/sentinel/gossip.go b/cl/sentinel/gossip.go index 7067d79bf96..da546a246a4 100644 --- a/cl/sentinel/gossip.go +++ b/cl/sentinel/gossip.go @@ -17,22 +17,52 @@ import ( "fmt" "strings" "sync" + "sync/atomic" "time" "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/fork" "github.com/ledgerwatch/erigon/cl/gossip" "github.com/ledgerwatch/log/v3" pubsub "github.com/libp2p/go-libp2p-pubsub" "github.com/libp2p/go-libp2p/core/peer" ) -var ( - // maxInMeshScore describes the max score a peer can attain from being in the mesh. - maxInMeshScore = 10. +const ( // beaconBlockWeight specifies the scoring weight that we apply to // our beacon block topic. beaconBlockWeight = 0.8 + // aggregateWeight specifies the scoring weight that we apply to + // our aggregate topic. + aggregateWeight = 0.5 + // syncContributionWeight specifies the scoring weight that we apply to + // our sync contribution topic. + syncContributionWeight = 0.2 + // attestationTotalWeight specifies the scoring weight that we apply to + // our attestation subnet topic. + attestationTotalWeight = 1 + // syncCommitteesTotalWeight specifies the scoring weight that we apply to + // our sync subnet topic. + syncCommitteesTotalWeight = 0.4 + // attesterSlashingWeight specifies the scoring weight that we apply to + // our attester slashing topic. + attesterSlashingWeight = 0.05 + // proposerSlashingWeight specifies the scoring weight that we apply to + // our proposer slashing topic. + proposerSlashingWeight = 0.05 + // voluntaryExitWeight specifies the scoring weight that we apply to + // our voluntary exit topic. + voluntaryExitWeight = 0.05 + // blsToExecutionChangeWeight specifies the scoring weight that we apply to + // our bls to execution topic. + blsToExecutionChangeWeight = 0.05 + + // maxInMeshScore describes the max score a peer can attain from being in the mesh. + maxInMeshScore = 10 + // maxFirstDeliveryScore describes the max score a peer can obtain from first deliveries. + maxFirstDeliveryScore = 40 + + // dampeningFactor reduces the amount by which the various thresholds and caps are created. + dampeningFactor = 90 ) const SSZSnappyCodec = "ssz_snappy" @@ -72,13 +102,27 @@ var BlsToExecutionChangeSsz = GossipTopic{ CodecStr: SSZSnappyCodec, } +var SyncCommitteeContributionAndProofSsz = GossipTopic{ + Name: gossip.TopicNameSyncCommitteeContributionAndProof, + CodecStr: SSZSnappyCodec, +} + +var LightClientFinalityUpdateSsz = GossipTopic{ + Name: gossip.TopicNameLightClientFinalityUpdate, + CodecStr: SSZSnappyCodec, +} + +var LightClientOptimisticUpdateSsz = GossipTopic{ + Name: gossip.TopicNameLightClientOptimisticUpdate, + CodecStr: SSZSnappyCodec, +} + type GossipManager struct { ch chan *GossipMessage - subscriptions map[string]*GossipSubscription - mu sync.RWMutex + subscriptions sync.Map // map from topic string to *GossipSubscription } -const maxIncomingGossipMessages = 5092 +const maxIncomingGossipMessages = 1 << 16 // construct a new gossip manager that will handle packets with the given handlerfunc func NewGossipManager( @@ -86,7 +130,7 @@ func NewGossipManager( ) *GossipManager { g := &GossipManager{ ch: make(chan *GossipMessage, maxIncomingGossipMessages), - subscriptions: map[string]*GossipSubscription{}, + subscriptions: sync.Map{}, } return g } @@ -94,7 +138,7 @@ func NewGossipManager( func GossipSidecarTopics(maxBlobs uint64) (ret []GossipTopic) { for i := uint64(0); i < maxBlobs; i++ { ret = append(ret, GossipTopic{ - Name: gossip.TopicNameBlobSidecar(int(i)), + Name: gossip.TopicNameBlobSidecar(i), CodecStr: SSZSnappyCodec, }) } @@ -106,45 +150,38 @@ func (s *GossipManager) Recv() <-chan *GossipMessage { } func (s *GossipManager) GetMatchingSubscription(match string) *GossipSubscription { - s.mu.Lock() - defer s.mu.Unlock() var sub *GossipSubscription - for topic, currSub := range s.subscriptions { - if strings.Contains(topic, match) { - sub = currSub + s.subscriptions.Range(func(topic, value interface{}) bool { + topicStr := topic.(string) + // take out third part of the topic by splitting on "/" + // reference: /eth2/d31f6191/beacon_attestation_45/ssz_snappy + parts := strings.Split(topicStr, "/") + if len(parts) < 4 { + return true } - } + if parts[3] == match { + sub = value.(*GossipSubscription) + return false + } + return true + }) return sub } func (s *GossipManager) AddSubscription(topic string, sub *GossipSubscription) { - s.mu.Lock() - defer s.mu.Unlock() - s.subscriptions[topic] = sub + s.subscriptions.Store(topic, sub) } func (s *GossipManager) unsubscribe(topic string) { - s.mu.Lock() - defer s.mu.Unlock() - if _, ok := s.subscriptions[topic]; !ok { + sub, ok := s.subscriptions.LoadAndDelete(topic) + if !ok || sub == nil { return } - sub := s.subscriptions[topic] - go func() { - timer := time.NewTimer(time.Hour) - ctx := sub.ctx - select { - case <-ctx.Done(): - sub.Close() - case <-timer.C: - sub.Close() - } - }() - delete(s.subscriptions, topic) + sub.(*GossipSubscription).Close() } func (s *Sentinel) forkWatcher() { - prevDigest, err := fork.ComputeForkDigest(s.cfg.BeaconConfig, s.cfg.GenesisConfig) + prevDigest, err := s.ethClock.CurrentForkDigest() if err != nil { log.Error("[Gossip] Failed to calculate fork choice", "err", err) return @@ -155,38 +192,43 @@ func (s *Sentinel) forkWatcher() { case <-s.ctx.Done(): return case <-iterationInterval.C: - digest, err := fork.ComputeForkDigest(s.cfg.BeaconConfig, s.cfg.GenesisConfig) + digest, err := s.ethClock.CurrentForkDigest() if err != nil { log.Error("[Gossip] Failed to calculate fork choice", "err", err) return } if prevDigest != digest { - subs := s.subManager.subscriptions - for path, sub := range subs { - s.subManager.unsubscribe(path) - newSub, err := s.SubscribeGossip(sub.gossip_topic) + // unsubscribe and resubscribe to all topics + s.subManager.subscriptions.Range(func(key, value interface{}) bool { + sub := value.(*GossipSubscription) + s.subManager.unsubscribe(key.(string)) + newSub, err := s.SubscribeGossip(sub.gossip_topic, sub.expiration.Load().(time.Time)) if err != nil { - log.Error("[Gossip] Failed to resubscribe to topic", "err", err) - return + log.Warn("[Gossip] Failed to resubscribe to topic", "err", err) } newSub.Listen() - } + return true + }) prevDigest = digest } } } } -func (s *Sentinel) SubscribeGossip(topic GossipTopic, opts ...pubsub.TopicOpt) (sub *GossipSubscription, err error) { - digest, err := fork.ComputeForkDigest(s.cfg.BeaconConfig, s.cfg.GenesisConfig) +func (s *Sentinel) SubscribeGossip(topic GossipTopic, expiration time.Time, opts ...pubsub.TopicOpt) (sub *GossipSubscription, err error) { + digest, err := s.ethClock.CurrentForkDigest() if err != nil { log.Error("[Gossip] Failed to calculate fork choice", "err", err) } + var exp atomic.Value + exp.Store(expiration) sub = &GossipSubscription{ gossip_topic: topic, ch: s.subManager.ch, host: s.host.ID(), ctx: s.ctx, + expiration: exp, + s: s, } path := fmt.Sprintf("/eth2/%x/%s/%s", digest, topic.Name, topic.CodecStr) sub.topic, err = s.pubsub.Join(path, opts...) @@ -203,7 +245,7 @@ func (s *Sentinel) SubscribeGossip(topic GossipTopic, opts ...pubsub.TopicOpt) ( } func (s *Sentinel) Unsubscribe(topic GossipTopic, opts ...pubsub.TopicOpt) (err error) { - digest, err := fork.ComputeForkDigest(s.cfg.BeaconConfig, s.cfg.GenesisConfig) + digest, err := s.ethClock.CurrentForkDigest() if err != nil { log.Error("[Gossip] Failed to calculate fork choice", "err", err) } @@ -214,30 +256,20 @@ func (s *Sentinel) Unsubscribe(topic GossipTopic, opts ...pubsub.TopicOpt) (err func (s *Sentinel) topicScoreParams(topic string) *pubsub.TopicScoreParams { switch { - case strings.Contains(topic, gossip.TopicNameBeaconBlock): + case strings.Contains(topic, gossip.TopicNameBeaconBlock) || gossip.IsTopicBlobSidecar(topic): return s.defaultBlockTopicParams() - /*case strings.Contains(topic, GossipAggregateAndProofMessage): - return defaultAggregateTopicParams(activeValidators), nil - case strings.Contains(topic, GossipAttestationMessage): - return defaultAggregateSubnetTopicParams(activeValidators), nil - case strings.Contains(topic, GossipSyncCommitteeMessage): - return defaultSyncSubnetTopicParams(activeValidators), nil - case strings.Contains(topic, GossipContributionAndProofMessage): - return defaultSyncContributionTopicParams(), nil - case strings.Contains(topic, GossipExitMessage): - return defaultVoluntaryExitTopicParams(), nil - case strings.Contains(topic, GossipProposerSlashingMessage): - return defaultProposerSlashingTopicParams(), nil - case strings.Contains(topic, GossipAttesterSlashingMessage): - return defaultAttesterSlashingTopicParams(), nil - case strings.Contains(topic, GossipBlsToExecutionChangeMessage): - return defaultBlsToExecutionChangeTopicParams(), nil*/ + case strings.Contains(topic, gossip.TopicNameVoluntaryExit): + return s.defaultVoluntaryExitTopicParams() + case gossip.IsTopicBeaconAttestation(topic): + return s.defaultAggregateSubnetTopicParams() + case gossip.IsTopicSyncCommittee(topic): + return s.defaultSyncSubnetTopicParams(s.cfg.ActiveIndicies) default: return nil } } -// Based on the lighthouse parameters. +// Based on the prysm parameters. // https://gist.github.com/blacktemplar/5c1862cb3f0e32a1a7fb0b25e79e6e2c func (s *Sentinel) defaultBlockTopicParams() *pubsub.TopicScoreParams { blocksPerEpoch := s.cfg.BeaconConfig.SlotsPerEpoch @@ -263,12 +295,198 @@ func (s *Sentinel) defaultBlockTopicParams() *pubsub.TopicScoreParams { } } +func (s *Sentinel) defaultVoluntaryExitTopicParams() *pubsub.TopicScoreParams { + return &pubsub.TopicScoreParams{ + TopicWeight: voluntaryExitWeight, + TimeInMeshWeight: maxInMeshScore / s.inMeshCap(), + TimeInMeshQuantum: s.oneSlotDuration(), + TimeInMeshCap: s.inMeshCap(), + FirstMessageDeliveriesWeight: 2, + FirstMessageDeliveriesDecay: s.scoreDecay(100 * s.oneEpochDuration()), + FirstMessageDeliveriesCap: 5, + MeshMessageDeliveriesWeight: 0, + MeshMessageDeliveriesDecay: 0, + MeshMessageDeliveriesCap: 0, + MeshMessageDeliveriesThreshold: 0, + MeshMessageDeliveriesWindow: 0, + MeshMessageDeliveriesActivation: 0, + MeshFailurePenaltyWeight: 0, + MeshFailurePenaltyDecay: 0, + InvalidMessageDeliveriesWeight: -2000, + InvalidMessageDeliveriesDecay: s.scoreDecay(50 * s.oneEpochDuration()), + } +} + +func (s *Sentinel) defaultSyncSubnetTopicParams(activeValidators uint64) *pubsub.TopicScoreParams { + subnetCount := s.cfg.BeaconConfig.SyncCommitteeSubnetCount + // Get weight for each specific subnet. + topicWeight := syncCommitteesTotalWeight / float64(subnetCount) + syncComSize := s.cfg.BeaconConfig.SyncCommitteeSize + // Set the max as the sync committee size + if activeValidators > syncComSize { + activeValidators = syncComSize + } + subnetWeight := activeValidators / subnetCount + if subnetWeight == 0 { + log.Warn("Subnet weight is 0, skipping initializing topic scoring") + return nil + } + firstDecayDuration := 1 * s.oneEpochDuration() + meshDecayDuration := 4 * s.oneEpochDuration() + + rate := subnetWeight * 2 / gossipSubD + if rate == 0 { + log.Warn("rate is 0, skipping initializing topic scoring") + return nil + } + // Determine expected first deliveries based on the message rate. + firstMessageCap, err := decayLimit(s.scoreDecay(firstDecayDuration), float64(rate)) + if err != nil { + log.Warn("Skipping initializing topic scoring") + return nil + } + firstMessageWeight := maxFirstDeliveryScore / firstMessageCap + // Determine expected mesh deliveries based on message rate applied with a dampening factor. + meshThreshold, err := decayThreshold(s.scoreDecay(meshDecayDuration), float64(subnetWeight)/dampeningFactor) + if err != nil { + log.Warn("Skipping initializing topic scoring") + return nil + } + meshCap := 4 * meshThreshold + + return &pubsub.TopicScoreParams{ + TopicWeight: topicWeight, + TimeInMeshWeight: maxInMeshScore / s.inMeshCap(), + TimeInMeshQuantum: s.oneSlotDuration(), + TimeInMeshCap: s.inMeshCap(), + FirstMessageDeliveriesWeight: firstMessageWeight, + FirstMessageDeliveriesDecay: s.scoreDecay(firstDecayDuration), + FirstMessageDeliveriesCap: firstMessageCap, + MeshMessageDeliveriesWeight: 0, + MeshMessageDeliveriesDecay: s.scoreDecay(meshDecayDuration), + MeshMessageDeliveriesCap: meshCap, + MeshMessageDeliveriesThreshold: meshThreshold, + MeshMessageDeliveriesWindow: 2 * time.Second, + MeshMessageDeliveriesActivation: s.oneEpochDuration(), + MeshFailurePenaltyWeight: 0, + MeshFailurePenaltyDecay: s.scoreDecay(meshDecayDuration), + InvalidMessageDeliveriesWeight: -maxScore() / topicWeight, + InvalidMessageDeliveriesDecay: s.scoreDecay(50 * s.oneEpochDuration()), + } +} + +// decayLimit provides the value till which a decay process will +// limit till provided with an expected growth rate. +func decayLimit(decayRate, rate float64) (float64, error) { + if 1 <= decayRate { + return 0, fmt.Errorf("got an invalid decayLimit rate: %f", decayRate) + } + return rate / (1 - decayRate), nil +} + +func (s *Sentinel) committeeCountPerSlot() uint64 { + activeValidatorCount := s.cfg.ActiveIndicies + cfg := s.cfg.BeaconConfig + var committeesPerSlot = activeValidatorCount / cfg.SlotsPerEpoch / cfg.TargetCommitteeSize + + if committeesPerSlot > cfg.MaxCommitteesPerSlot { + return cfg.MaxCommitteesPerSlot + } + if committeesPerSlot == 0 { + return 1 + } + + return committeesPerSlot +} + +// maxScore attainable by a peer. +func maxScore() float64 { + totalWeight := beaconBlockWeight + aggregateWeight + syncContributionWeight + + attestationTotalWeight + syncCommitteesTotalWeight + attesterSlashingWeight + + proposerSlashingWeight + voluntaryExitWeight + blsToExecutionChangeWeight + return (maxInMeshScore + maxFirstDeliveryScore) * totalWeight +} + +// is used to determine the threshold from the decay limit with +// a provided growth rate. This applies the decay rate to a +// computed limit. +func decayThreshold(decayRate, rate float64) (float64, error) { + d, err := decayLimit(decayRate, rate) + if err != nil { + return 0, err + } + return d * decayRate, nil +} + +func (s *Sentinel) defaultAggregateSubnetTopicParams() *pubsub.TopicScoreParams { + subnetCount := s.cfg.NetworkConfig.AttestationSubnetCount + // Get weight for each specific subnet. + topicWeight := float64(attestationTotalWeight) / float64(subnetCount) + subnetWeight := s.cfg.ActiveIndicies / subnetCount + if subnetWeight == 0 { + log.Warn("Subnet weight is 0, skipping initializing topic scoring", "activeValidatorCount", s.cfg.ActiveIndicies) + return nil + } + // Determine the amount of validators expected in a subnet in a single slot. + numPerSlot := time.Duration(subnetWeight / s.cfg.BeaconConfig.SlotsPerEpoch) + if numPerSlot == 0 { + log.Trace("numPerSlot is 0, skipping initializing topic scoring") + return nil + } + comsPerSlot := s.committeeCountPerSlot() + exceedsThreshold := comsPerSlot >= 2*subnetCount/s.cfg.BeaconConfig.SlotsPerEpoch + firstDecayDuration := 1 * s.oneEpochDuration() + meshDecayDuration := 4 * s.oneEpochDuration() + if exceedsThreshold { + firstDecayDuration = 4 * s.oneEpochDuration() + meshDecayDuration = 16 * s.oneEpochDuration() + } + rate := numPerSlot * 2 / gossipSubD + if rate == 0 { + log.Trace("rate is 0, skipping initializing topic scoring") + return nil + } + // Determine expected first deliveries based on the message rate. + firstMessageCap, err := decayLimit(s.scoreDecay(firstDecayDuration), float64(rate)) + if err != nil { + log.Trace("skipping initializing topic scoring", "err", err) + return nil + } + firstMessageWeight := float64(maxFirstDeliveryScore) / firstMessageCap + // Determine expected mesh deliveries based on message rate applied with a dampening factor. + meshThreshold, err := decayThreshold(s.scoreDecay(meshDecayDuration), float64(numPerSlot)/float64(dampeningFactor)) + if err != nil { + log.Trace("skipping initializing topic scoring", "err", err) + return nil + } + meshCap := 4 * meshThreshold + + return &pubsub.TopicScoreParams{ + TopicWeight: topicWeight, + TimeInMeshWeight: maxInMeshScore / s.inMeshCap(), + TimeInMeshQuantum: s.oneSlotDuration(), + TimeInMeshCap: s.inMeshCap(), + FirstMessageDeliveriesWeight: firstMessageWeight, + FirstMessageDeliveriesDecay: s.scoreDecay(firstDecayDuration), + FirstMessageDeliveriesCap: firstMessageCap, + MeshMessageDeliveriesDecay: s.scoreDecay(meshDecayDuration), + MeshMessageDeliveriesCap: meshCap, + MeshMessageDeliveriesThreshold: meshThreshold, + MeshMessageDeliveriesWindow: 2 * time.Second, + MeshMessageDeliveriesActivation: 1 * s.oneEpochDuration(), + MeshFailurePenaltyDecay: s.scoreDecay(meshDecayDuration), + InvalidMessageDeliveriesWeight: -maxScore() / topicWeight, + InvalidMessageDeliveriesDecay: s.scoreDecay(50 * s.oneEpochDuration()), + } +} + func (g *GossipManager) Close() { - for _, topic := range g.subscriptions { - if topic != nil { - topic.Close() + g.subscriptions.Range(func(key, value interface{}) bool { + if value != nil { + value.(*GossipSubscription).Close() } - } + return true + }) } // GossipSubscription abstracts a gossip subscription to write decoded structs. @@ -277,6 +495,8 @@ type GossipSubscription struct { host peer.ID ch chan *GossipMessage ctx context.Context + expiration atomic.Value // Unix nano for how much we should listen to this topic + subscribed atomic.Bool topic *pubsub.Topic sub *pubsub.Subscription @@ -284,42 +504,79 @@ type GossipSubscription struct { cf context.CancelFunc rf pubsub.RelayCancelFunc - setup sync.Once - stopCh chan struct{} + s *Sentinel + + stopCh chan struct{} + closeOnce sync.Once } -func (sub *GossipSubscription) Listen() (err error) { - sub.setup.Do(func() { - sub.stopCh = make(chan struct{}, 3) - sub.sub, err = sub.topic.Subscribe() - if err != nil { - err = fmt.Errorf("failed to begin topic %s subscription, err=%w", sub.topic.String(), err) - return +func (sub *GossipSubscription) Listen() { + go func() { + var err error + checkingInterval := time.NewTicker(100 * time.Millisecond) + for { + select { + case <-sub.ctx.Done(): + return + case <-checkingInterval.C: + + expirationTime := sub.expiration.Load().(time.Time) + if sub.subscribed.Load() && time.Now().After(expirationTime) { + sub.stopCh <- struct{}{} + if cancelFunc := sub.cf; cancelFunc != nil { + cancelFunc() // stop pubsub.Subscription.Next + } + sub.topic.Close() + sub.subscribed.Store(false) + log.Info("[Gossip] Unsubscribed from topic", "topic", sub.sub.Topic()) + sub.s.updateENROnSubscription(sub.sub.Topic(), false) + continue + } + if !sub.subscribed.Load() && time.Now().Before(expirationTime) { + sub.stopCh = make(chan struct{}, 3) + sub.sub, err = sub.topic.Subscribe() + if err != nil { + log.Warn("[Gossip] failed to begin topic subscription", "err", err) + time.Sleep(30 * time.Second) + continue + } + var sctx context.Context + sctx, sub.cf = context.WithCancel(sub.ctx) + go sub.run(sctx, sub.sub, sub.sub.Topic()) + sub.subscribed.Store(true) + sub.s.updateENROnSubscription(sub.sub.Topic(), true) + log.Info("[Gossip] Subscribed to topic", "topic", sub.sub.Topic()) + } + } } - var sctx context.Context - sctx, sub.cf = context.WithCancel(sub.ctx) - go sub.run(sctx, sub.sub, sub.sub.Topic()) - }) - return nil + }() +} + +func (sub *GossipSubscription) OverwriteSubscriptionExpiry(expiry time.Time) { + if expiry.After(sub.expiration.Load().(time.Time)) { + sub.expiration.Store(expiry) + } } // calls the cancel func for the subscriber and closes the topic and sub func (s *GossipSubscription) Close() { - s.stopCh <- struct{}{} - if s.cf != nil { - s.cf() - } - if s.rf != nil { - s.rf() - } - if s.sub != nil { - s.sub.Cancel() - s.sub = nil - } - if s.topic != nil { - s.topic.Close() - s.topic = nil - } + s.closeOnce.Do(func() { + close(s.stopCh) + if s.cf != nil { + s.cf() + } + if s.rf != nil { + s.rf() + } + if s.sub != nil { + s.sub.Cancel() + s.sub = nil + } + if s.topic != nil { + s.topic.Close() + s.topic = nil + } + }) } type GossipMessage struct { @@ -351,11 +608,12 @@ func (s *GossipSubscription) run(ctx context.Context, sub *pubsub.Subscription, log.Warn("[Sentinel] fail to decode gossip packet", "err", err, "topicName", topicName) return } - if msg.GetFrom() == s.host { + + if msg.ReceivedFrom == s.host { continue } s.ch <- &GossipMessage{ - From: msg.GetFrom(), + From: msg.ReceivedFrom, TopicName: topicName, Data: common.Copy(msg.Data), } @@ -364,5 +622,8 @@ func (s *GossipSubscription) run(ctx context.Context, sub *pubsub.Subscription, } func (g *GossipSubscription) Publish(data []byte) error { + if len(g.topic.ListPeers()) == 0 { + log.Warn("[Gossip] No peers to publish to for topic", "topic", g.topic.String()) + } return g.topic.Publish(g.ctx, data) } diff --git a/cl/sentinel/handlers/blobs.go b/cl/sentinel/handlers/blobs.go new file mode 100644 index 00000000000..989e80b5443 --- /dev/null +++ b/cl/sentinel/handlers/blobs.go @@ -0,0 +1,119 @@ +package handlers + +import ( + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/libp2p/go-libp2p/core/network" +) + +const maxBlobsThroughoutputPerRequest = 72 + +func (c *ConsensusHandlers) blobsSidecarsByRangeHandler(s network.Stream) error { + peerId := s.Conn().RemotePeer().String() + + req := &cltypes.BlobsByRangeRequest{} + if err := ssz_snappy.DecodeAndReadNoForkDigest(s, req, clparams.DenebVersion); err != nil { + return err + } + if err := c.checkRateLimit(peerId, "blobSidecar", rateLimits.blobSidecarsLimit, int(req.Count)); err != nil { + ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) + return err + } + + tx, err := c.indiciesDB.BeginRo(c.ctx) + if err != nil { + return err + } + defer tx.Rollback() + + written := 0 + for slot := req.StartSlot; slot < req.StartSlot+req.Count; slot++ { + blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, slot) + if err != nil { + return err + } + if blockRoot == (libcommon.Hash{}) { + continue + } + + blobCount, err := c.blobsStorage.KzgCommitmentsCount(c.ctx, blockRoot) + if err != nil { + return err + } + + for i := 0; i < int(blobCount) && written < maxBlobsThroughoutputPerRequest; i++ { + version := c.beaconConfig.GetCurrentStateVersion(slot / c.beaconConfig.SlotsPerEpoch) + // Read the fork digest + forkDigest, err := c.ethClock.ComputeForkDigestForVersion(utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(version))) + if err != nil { + return err + } + if _, err := s.Write([]byte{0}); err != nil { + return err + } + if _, err := s.Write(forkDigest[:]); err != nil { + return err + } + if err := c.blobsStorage.WriteStream(s, slot, blockRoot, uint64(i)); err != nil { + return err + } + written++ + } + } + return nil +} + +func (c *ConsensusHandlers) blobsSidecarsByIdsHandler(s network.Stream) error { + peerId := s.Conn().RemotePeer().String() + + req := solid.NewStaticListSSZ[*cltypes.BlobIdentifier](40269, 40) + if err := ssz_snappy.DecodeAndReadNoForkDigest(s, req, clparams.DenebVersion); err != nil { + return err + } + + if err := c.checkRateLimit(peerId, "blobSidecar", rateLimits.blobSidecarsLimit, req.Len()); err != nil { + ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) + return err + } + + tx, err := c.indiciesDB.BeginRo(c.ctx) + if err != nil { + return err + } + defer tx.Rollback() + + written := 0 + for i := 0; i < req.Len() && written < maxBlobsThroughoutputPerRequest; i++ { + + id := req.Get(i) + slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, id.BlockRoot) + if err != nil { + return err + } + if slot == nil { + break + } + version := c.beaconConfig.GetCurrentStateVersion(*slot / c.beaconConfig.SlotsPerEpoch) + // Read the fork digest + forkDigest, err := c.ethClock.ComputeForkDigestForVersion(utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(version))) + if err != nil { + return err + } + if _, err := s.Write([]byte{0}); err != nil { + return err + } + if _, err := s.Write(forkDigest[:]); err != nil { + return err + } + if err := c.blobsStorage.WriteStream(s, *slot, id.BlockRoot, id.Index); err != nil { + return err + } + written++ + } + return nil +} diff --git a/cl/sentinel/handlers/blobs_test.go b/cl/sentinel/handlers/blobs_test.go new file mode 100644 index 00000000000..d0feb663422 --- /dev/null +++ b/cl/sentinel/handlers/blobs_test.go @@ -0,0 +1,298 @@ +package handlers + +import ( + "bytes" + "context" + "encoding/binary" + "fmt" + "io" + "math" + "testing" + + "github.com/golang/snappy" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" + "github.com/spf13/afero" + "github.com/stretchr/testify/require" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/clparams/initial_state" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/sentinel/communication" + "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" + "github.com/ledgerwatch/erigon/cl/sentinel/peers" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" +) + +func getEthClock(t *testing.T) eth_clock.EthereumClock { + s, err := initial_state.GetGenesisState(clparams.MainnetNetwork) + require.NoError(t, err) + return eth_clock.NewEthereumClock(s.GenesisTime(), s.GenesisValidatorsRoot(), s.BeaconConfig()) +} + +func getTestBlobSidecars(blockHeader *cltypes.SignedBeaconBlockHeader) []*cltypes.BlobSidecar { + out := []*cltypes.BlobSidecar{} + for i := 0; i < 4; i++ { + out = append(out, cltypes.NewBlobSidecar( + uint64(i), + &cltypes.Blob{byte(i)}, + libcommon.Bytes48{byte(i)}, + libcommon.Bytes48{byte(i)}, + blockHeader, + solid.NewHashVector(cltypes.CommitmentBranchSize), + )) + } + return out + +} + +func TestBlobsByRangeHandler(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/6121" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/6358" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + blobDb := memdb.NewTestDB(t) + _, indiciesDB := setupStore(t) + store := tests.NewMockBlockReader() + + tx, _ := indiciesDB.BeginRw(ctx) + + startSlot := uint64(100) + count := uint64(10) + + expBlocks := populateDatabaseWithBlocks(t, store, tx, startSlot, count) + h := expBlocks[0].SignedBeaconBlockHeader() + sidecars := getTestBlobSidecars(h) + _, beaconCfg := clparams.GetConfigsByNetwork(1) + blobStorage := blob_storage.NewBlobStore(blobDb, afero.NewMemMapFs(), math.MaxUint64, beaconCfg, nil) + r, _ := h.Header.HashSSZ() + require.NoError(t, blobStorage.WriteBlobSidecars(ctx, r, sidecars)) + + tx.Commit() + + ethClock := getEthClock(t) + c := NewConsensusHandlers( + ctx, + store, + indiciesDB, + host, + peersPool, + &clparams.NetworkConfig{}, + nil, + beaconCfg, + ethClock, + nil, &mock_services.ForkChoiceStorageMock{}, blobStorage, true, + ) + c.Start() + req := &cltypes.BlobsByRangeRequest{ + StartSlot: h.Header.Slot, + Count: 1, + } + + var reqBuf bytes.Buffer + if err := ssz_snappy.EncodeAndWrite(&reqBuf, req); err != nil { + return + } + + reqData := libcommon.CopyBytes(reqBuf.Bytes()) + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.BlobSidecarByRangeProtocolV1)) + require.NoError(t, err) + + _, err = stream.Write(reqData) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + for i := 0; i < len(sidecars); i++ { + forkDigest := make([]byte, 4) + _, err := stream.Read(forkDigest) + if err != nil && err != io.EOF { + require.NoError(t, err) + } + + encodedLn, _, err := ssz_snappy.ReadUvarint(stream) + require.NoError(t, err) + + raw := make([]byte, encodedLn) + sr := snappy.NewReader(stream) + bytesRead := 0 + for bytesRead < int(encodedLn) { + n, err := sr.Read(raw[bytesRead:]) + if err != nil { + require.NoError(t, err) + } + bytesRead += n + } + // Fork digests + respForkDigest := binary.BigEndian.Uint32(forkDigest) + if respForkDigest == 0 { + require.NoError(t, fmt.Errorf("null fork digest")) + } + version, err := ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) + if err != nil { + require.NoError(t, err) + } + + sidecar := &cltypes.BlobSidecar{} + if err = sidecar.DecodeSSZ(raw, int(version)); err != nil { + require.NoError(t, err) + return + } + require.Equal(t, sidecars[i], sidecar) + stream.Read(make([]byte, 1)) + } + + _, err = stream.Read(make([]byte, 1)) + if err != io.EOF { + t.Fatal("Stream is not empty") + } + + defer indiciesDB.Close() + defer tx.Rollback() +} + +func TestBlobsByIdentifiersHandler(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/6125" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/6350" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + blobDb := memdb.NewTestDB(t) + _, indiciesDB := setupStore(t) + store := tests.NewMockBlockReader() + + tx, _ := indiciesDB.BeginRw(ctx) + + startSlot := uint64(100) + count := uint64(10) + + ethClock := getEthClock(t) + expBlocks := populateDatabaseWithBlocks(t, store, tx, startSlot, count) + h := expBlocks[0].SignedBeaconBlockHeader() + sidecars := getTestBlobSidecars(h) + _, beaconCfg := clparams.GetConfigsByNetwork(1) + blobStorage := blob_storage.NewBlobStore(blobDb, afero.NewMemMapFs(), math.MaxUint64, beaconCfg, ethClock) + r, _ := h.Header.HashSSZ() + require.NoError(t, blobStorage.WriteBlobSidecars(ctx, r, sidecars)) + + tx.Commit() + + c := NewConsensusHandlers( + ctx, + store, + indiciesDB, + host, + peersPool, + &clparams.NetworkConfig{}, + nil, + beaconCfg, + ethClock, + nil, &mock_services.ForkChoiceStorageMock{}, blobStorage, true, + ) + c.Start() + req := solid.NewStaticListSSZ[*cltypes.BlobIdentifier](40269, 40) + req.Append(&cltypes.BlobIdentifier{BlockRoot: r, Index: 0}) + req.Append(&cltypes.BlobIdentifier{BlockRoot: r, Index: 1}) + req.Append(&cltypes.BlobIdentifier{BlockRoot: r, Index: 2}) + req.Append(&cltypes.BlobIdentifier{BlockRoot: r, Index: 3}) + + var reqBuf bytes.Buffer + if err := ssz_snappy.EncodeAndWrite(&reqBuf, req); err != nil { + return + } + + reqData := libcommon.CopyBytes(reqBuf.Bytes()) + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.BlobSidecarByRootProtocolV1)) + require.NoError(t, err) + + _, err = stream.Write(reqData) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + for i := 0; i < len(sidecars); i++ { + forkDigest := make([]byte, 4) + _, err := stream.Read(forkDigest) + if err != nil && err != io.EOF { + require.NoError(t, err) + } + + encodedLn, _, err := ssz_snappy.ReadUvarint(stream) + require.NoError(t, err) + + raw := make([]byte, encodedLn) + sr := snappy.NewReader(stream) + bytesRead := 0 + for bytesRead < int(encodedLn) { + n, err := sr.Read(raw[bytesRead:]) + if err != nil { + require.NoError(t, err) + } + bytesRead += n + } + // Fork digests + respForkDigest := binary.BigEndian.Uint32(forkDigest) + if respForkDigest == 0 { + require.NoError(t, fmt.Errorf("null fork digest")) + } + version, err := ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) + if err != nil { + require.NoError(t, err) + } + + sidecar := &cltypes.BlobSidecar{} + if err = sidecar.DecodeSSZ(raw, int(version)); err != nil { + require.NoError(t, err) + return + } + require.Equal(t, sidecars[i], sidecar) + stream.Read(make([]byte, 1)) + } + + _, err = stream.Read(make([]byte, 1)) + if err != io.EOF { + t.Fatal("Stream is not empty") + } + + defer indiciesDB.Close() + defer tx.Rollback() +} diff --git a/cl/sentinel/handlers/blocks.go b/cl/sentinel/handlers/blocks.go index d3b09c28c79..1a1e1b18ede 100644 --- a/cl/sentinel/handlers/blocks.go +++ b/cl/sentinel/handlers/blocks.go @@ -14,65 +14,50 @@ package handlers import ( - "io" - libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/fork" - "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" "github.com/ledgerwatch/erigon/cl/utils" "github.com/libp2p/go-libp2p/core/network" ) -const MAX_REQUEST_BLOCKS = 96 +const ( + MaxRequestsBlocks = 96 +) func (c *ConsensusHandlers) beaconBlocksByRangeHandler(s network.Stream) error { peerId := s.Conn().RemotePeer().String() - if err := c.checkRateLimit(peerId, "beaconBlocksByRange", rateLimits.beaconBlocksByRangeLimit); err != nil { - ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) - return err - } req := &cltypes.BeaconBlocksByRangeRequest{} if err := ssz_snappy.DecodeAndReadNoForkDigest(s, req, clparams.Phase0Version); err != nil { return err } - - tx, err := c.indiciesDB.BeginRo(c.ctx) - if err != nil { + if err := c.checkRateLimit(peerId, "beaconBlocksByRange", rateLimits.beaconBlocksByRangeLimit, int(req.Count)); err != nil { + ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) return err } - defer tx.Rollback() - // Limit the number of blocks to the count specified in the request. - if int(req.Count) > MAX_REQUEST_BLOCKS { - req.Count = MAX_REQUEST_BLOCKS - } - beaconBlockRooots, slots, err := beacon_indicies.ReadBeaconBlockRootsInSlotRange(c.ctx, tx, req.StartSlot, req.Count) + tx, err := c.indiciesDB.BeginRo(c.ctx) if err != nil { return err } + defer tx.Rollback() - if len(beaconBlockRooots) == 0 || len(slots) == 0 { - return ssz_snappy.EncodeAndWrite(s, &emptyString{}, ResourceUnavaiablePrefix) - } - - for i, slot := range slots { - r, err := c.beaconDB.BlockReader(c.ctx, slot, beaconBlockRooots[i]) + written := uint64(0) + for slot := req.StartSlot; slot < req.StartSlot+MaxRequestsBlocks; slot++ { + block, err := c.beaconDB.ReadBlockBySlot(c.ctx, tx, slot) if err != nil { return err } - defer r.Close() + if block == nil { + continue + } version := c.beaconConfig.GetCurrentStateVersion(slot / c.beaconConfig.SlotsPerEpoch) // Read the fork digest - forkDigest, err := fork.ComputeForkDigestForVersion( - utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(version)), - c.genesisConfig.GenesisValidatorRoot, - ) + forkDigest, err := c.ethClock.ComputeForkDigestForVersion(utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(version))) if err != nil { return err } @@ -80,14 +65,17 @@ func (c *ConsensusHandlers) beaconBlocksByRangeHandler(s network.Stream) error { if _, err := s.Write([]byte{0}); err != nil { return err } - if _, err := s.Write(forkDigest[:]); err != nil { return err } - _, err = io.Copy(s, r) - if err != nil { + // obtain block and write + if err := ssz_snappy.EncodeAndWrite(s, block); err != nil { return err } + written++ + if written >= req.Count { + break + } } return nil @@ -95,25 +83,26 @@ func (c *ConsensusHandlers) beaconBlocksByRangeHandler(s network.Stream) error { func (c *ConsensusHandlers) beaconBlocksByRootHandler(s network.Stream) error { peerId := s.Conn().RemotePeer().String() - if err := c.checkRateLimit(peerId, "beaconBlocksByRoot", rateLimits.beaconBlocksByRootLimit); err != nil { - ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) - return err - } var req solid.HashListSSZ = solid.NewHashList(100) if err := ssz_snappy.DecodeAndReadNoForkDigest(s, req, clparams.Phase0Version); err != nil { return err } + if err := c.checkRateLimit(peerId, "beaconBlocksByRoot", rateLimits.beaconBlocksByRootLimit, req.Length()); err != nil { + ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) + return err + } blockRoots := []libcommon.Hash{} for i := 0; i < req.Length(); i++ { blockRoot := req.Get(i) blockRoots = append(blockRoots, blockRoot) // Limit the number of blocks to the count specified in the request. - if len(blockRoots) >= MAX_REQUEST_BLOCKS { + if len(blockRoots) >= MaxRequestsBlocks { break } } + if len(blockRoots) == 0 { return ssz_snappy.EncodeAndWrite(s, &emptyString{}, ResourceUnavaiablePrefix) } @@ -123,51 +112,38 @@ func (c *ConsensusHandlers) beaconBlocksByRootHandler(s network.Stream) error { } defer tx.Rollback() - for i, blockRoot := range blockRoots { - slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, blockRoot) - if slot == nil { - continue - } - if err != nil { - return err - } - - r, err := c.beaconDB.BlockReader(c.ctx, *slot, blockRoots[i]) + var block *cltypes.SignedBeaconBlock + req.Range(func(index int, blockRoot libcommon.Hash, length int) bool { + block, err = c.beaconDB.ReadBlockByRoot(c.ctx, tx, blockRoot) if err != nil { - return err + return false } - defer r.Close() - - if _, err := s.Write([]byte{0}); err != nil { - return err + if block == nil { + return true } - version := c.beaconConfig.GetCurrentStateVersion(*slot / c.beaconConfig.SlotsPerEpoch) // Read the fork digest - forkDigest, err := fork.ComputeForkDigestForVersion( - utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(version)), - c.genesisConfig.GenesisValidatorRoot, - ) + var forkDigest [4]byte + forkDigest, err = c.ethClock.ComputeForkDigestForVersion(utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(block.Version()))) if err != nil { - return err + return false } - if _, err := s.Write(forkDigest[:]); err != nil { - return err + if _, err = s.Write([]byte{0}); err != nil { + return false } - // Read block from DB - block := cltypes.NewSignedBeaconBlock(c.beaconConfig) - - if err := ssz_snappy.DecodeAndReadNoForkDigest(r, block, clparams.Phase0Version); err != nil { - return err + if _, err = s.Write(forkDigest[:]); err != nil { + return false } - if err := ssz_snappy.EncodeAndWrite(s, block); err != nil { - return err + // obtain block and write + if err = ssz_snappy.EncodeAndWrite(s, block); err != nil { + return false } - } + return true + }) - return nil + return err } type emptyString struct{} diff --git a/cl/sentinel/handlers/blocks_by_range_test.go b/cl/sentinel/handlers/blocks_by_range_test.go index 84500364c21..6c53b598e07 100644 --- a/cl/sentinel/handlers/blocks_by_range_test.go +++ b/cl/sentinel/handlers/blocks_by_range_test.go @@ -9,19 +9,20 @@ import ( "testing" "github.com/golang/snappy" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" + "github.com/stretchr/testify/require" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/antiquary/tests" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/fork" - "github.com/ledgerwatch/erigon/cl/persistence" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" "github.com/ledgerwatch/erigon/cl/sentinel/communication" "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" "github.com/ledgerwatch/erigon/cl/sentinel/peers" "github.com/ledgerwatch/erigon/cl/utils" - "github.com/libp2p/go-libp2p" - "github.com/libp2p/go-libp2p/core/peer" - "github.com/libp2p/go-libp2p/core/protocol" - "github.com/stretchr/testify/require" ) func TestBlocksByRootHandler(t *testing.T) { @@ -42,8 +43,8 @@ func TestBlocksByRootHandler(t *testing.T) { require.NoError(t, err) peersPool := peers.NewPool() - beaconDB, indiciesDB := setupStore(t) - store := persistence.NewBeaconChainDatabaseFilesystem(beaconDB, nil, &clparams.MainnetBeaconConfig) + _, indiciesDB := setupStore(t) + store := tests.NewMockBlockReader() tx, _ := indiciesDB.BeginRw(ctx) @@ -54,16 +55,19 @@ func TestBlocksByRootHandler(t *testing.T) { expBlocks := populateDatabaseWithBlocks(t, store, tx, startSlot, count) tx.Commit() - genesisCfg, _, beaconCfg := clparams.GetConfigsByNetwork(1) + ethClock := getEthClock(t) + _, beaconCfg := clparams.GetConfigsByNetwork(1) c := NewConsensusHandlers( ctx, - beaconDB, + store, indiciesDB, host, peersPool, + &clparams.NetworkConfig{}, + nil, beaconCfg, - genesisCfg, - &cltypes.Metadata{}, true, + ethClock, + nil, &mock_services.ForkChoiceStorageMock{}, nil, true, ) c.Start() req := &cltypes.BeaconBlocksByRangeRequest{ @@ -118,10 +122,8 @@ func TestBlocksByRootHandler(t *testing.T) { require.NoError(t, fmt.Errorf("null fork digest")) } - version, err := fork.ForkDigestVersion(utils.Uint32ToBytes4(respForkDigest), beaconCfg, genesisCfg.GenesisValidatorRoot) - if err != nil { - require.NoError(t, err) - } + version, err := ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) + require.NoError(t, err) block := cltypes.NewSignedBeaconBlock(&clparams.MainnetBeaconConfig) if err = block.DecodeSSZ(raw, int(version)); err != nil { diff --git a/cl/sentinel/handlers/blocks_by_root_test.go b/cl/sentinel/handlers/blocks_by_root_test.go index b917644b145..43c99e817c4 100644 --- a/cl/sentinel/handlers/blocks_by_root_test.go +++ b/cl/sentinel/handlers/blocks_by_root_test.go @@ -9,21 +9,22 @@ import ( "testing" "github.com/golang/snappy" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" + "github.com/stretchr/testify/require" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/antiquary/tests" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/fork" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" "github.com/ledgerwatch/erigon/cl/sentinel/communication" "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" "github.com/ledgerwatch/erigon/cl/sentinel/peers" "github.com/ledgerwatch/erigon/cl/utils" - "github.com/libp2p/go-libp2p" - "github.com/libp2p/go-libp2p/core/peer" - "github.com/libp2p/go-libp2p/core/protocol" - "github.com/stretchr/testify/require" ) func TestBlocksByRangeHandler(t *testing.T) { @@ -44,8 +45,8 @@ func TestBlocksByRangeHandler(t *testing.T) { require.NoError(t, err) peersPool := peers.NewPool() - beaconDB, indiciesDB := setupStore(t) - store := persistence.NewBeaconChainDatabaseFilesystem(beaconDB, nil, &clparams.MainnetBeaconConfig) + _, indiciesDB := setupStore(t) + store := tests.NewMockBlockReader() tx, _ := indiciesDB.BeginRw(ctx) @@ -57,16 +58,19 @@ func TestBlocksByRangeHandler(t *testing.T) { blockRoots, _, _ = beacon_indicies.ReadBeaconBlockRootsInSlotRange(ctx, tx, startSlot, startSlot+count) tx.Commit() - genesisCfg, _, beaconCfg := clparams.GetConfigsByNetwork(1) + ethClock := getEthClock(t) + _, beaconCfg := clparams.GetConfigsByNetwork(1) c := NewConsensusHandlers( ctx, - beaconDB, + store, indiciesDB, host, peersPool, + &clparams.NetworkConfig{}, + nil, beaconCfg, - genesisCfg, - &cltypes.Metadata{}, true, + ethClock, + nil, &mock_services.ForkChoiceStorageMock{}, nil, true, ) c.Start() var req solid.HashListSSZ = solid.NewHashList(len(expBlocks)) @@ -117,7 +121,7 @@ func TestBlocksByRangeHandler(t *testing.T) { if respForkDigest == 0 { require.NoError(t, fmt.Errorf("null fork digest")) } - version, err := fork.ForkDigestVersion(utils.Uint32ToBytes4(respForkDigest), beaconCfg, genesisCfg.GenesisValidatorRoot) + version, err := ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) if err != nil { require.NoError(t, err) } diff --git a/cl/sentinel/handlers/handlers.go b/cl/sentinel/handlers/handlers.go index a97bfb57cd0..f920a6271ac 100644 --- a/cl/sentinel/handlers/handlers.go +++ b/cl/sentinel/handlers/handlers.go @@ -22,14 +22,18 @@ import ( "time" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" "github.com/ledgerwatch/erigon/cl/sentinel/communication" + "github.com/ledgerwatch/erigon/cl/sentinel/handshake" "github.com/ledgerwatch/erigon/cl/sentinel/peers" "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/p2p/enode" + "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" "golang.org/x/time/rate" "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/log/v3" "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/network" @@ -44,33 +48,46 @@ type RateLimits struct { statusLimit int beaconBlocksByRangeLimit int beaconBlocksByRootLimit int + lightClientLimit int + blobSidecarsLimit int } -const punishmentPeriod = time.Minute -const defaultRateLimit = math.MaxInt -const defaultBlockHandlerRateLimit = 200 +const ( + punishmentPeriod = time.Minute + heartBeatRateLimit = math.MaxInt + blockHandlerRateLimit = 200 + lightClientRateLimit = 500 + blobHandlerRateLimit = 50 // very generous here. +) var rateLimits = RateLimits{ - pingLimit: defaultRateLimit, - goodbyeLimit: defaultRateLimit, - metadataV1Limit: defaultRateLimit, - metadataV2Limit: defaultRateLimit, - statusLimit: defaultRateLimit, - beaconBlocksByRangeLimit: defaultBlockHandlerRateLimit, - beaconBlocksByRootLimit: defaultBlockHandlerRateLimit, + pingLimit: heartBeatRateLimit, + goodbyeLimit: heartBeatRateLimit, + metadataV1Limit: heartBeatRateLimit, + metadataV2Limit: heartBeatRateLimit, + statusLimit: heartBeatRateLimit, + beaconBlocksByRangeLimit: blockHandlerRateLimit, + beaconBlocksByRootLimit: blockHandlerRateLimit, + lightClientLimit: lightClientRateLimit, + blobSidecarsLimit: blobHandlerRateLimit, } type ConsensusHandlers struct { - handlers map[protocol.ID]network.StreamHandler - host host.Host - metadata *cltypes.Metadata - beaconConfig *clparams.BeaconChainConfig - genesisConfig *clparams.GenesisConfig - ctx context.Context - beaconDB persistence.RawBeaconBlockChain + handlers map[protocol.ID]network.StreamHandler + hs *handshake.HandShaker + beaconConfig *clparams.BeaconChainConfig + ethClock eth_clock.EthereumClock + ctx context.Context + beaconDB freezeblocks.BeaconSnapshotReader + indiciesDB kv.RoDB peerRateLimits sync.Map punishmentEndTimes sync.Map + forkChoiceReader forkchoice.ForkChoiceStorageReader + host host.Host + me *enode.LocalNode + netCfg *clparams.NetworkConfig + blobsStorage blob_storage.BlobStorage enableBlocks bool } @@ -81,32 +98,42 @@ const ( ResourceUnavaiablePrefix = 0x02 ) -func NewConsensusHandlers(ctx context.Context, db persistence.RawBeaconBlockChain, indiciesDB kv.RoDB, host host.Host, - peers *peers.Pool, beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig, metadata *cltypes.Metadata, enabledBlocks bool) *ConsensusHandlers { +func NewConsensusHandlers(ctx context.Context, db freezeblocks.BeaconSnapshotReader, indiciesDB kv.RoDB, host host.Host, + peers *peers.Pool, netCfg *clparams.NetworkConfig, me *enode.LocalNode, beaconConfig *clparams.BeaconChainConfig, ethClock eth_clock.EthereumClock, hs *handshake.HandShaker, forkChoiceReader forkchoice.ForkChoiceStorageReader, blobsStorage blob_storage.BlobStorage, enabledBlocks bool) *ConsensusHandlers { c := &ConsensusHandlers{ host: host, - metadata: metadata, + hs: hs, beaconDB: db, indiciesDB: indiciesDB, - genesisConfig: genesisConfig, + ethClock: ethClock, beaconConfig: beaconConfig, ctx: ctx, peerRateLimits: sync.Map{}, punishmentEndTimes: sync.Map{}, enableBlocks: enabledBlocks, + forkChoiceReader: forkChoiceReader, + me: me, + netCfg: netCfg, + blobsStorage: blobsStorage, } hm := map[string]func(s network.Stream) error{ - communication.PingProtocolV1: c.pingHandler, - communication.GoodbyeProtocolV1: c.goodbyeHandler, - communication.StatusProtocolV1: c.statusHandler, - communication.MetadataProtocolV1: c.metadataV1Handler, - communication.MetadataProtocolV2: c.metadataV2Handler, + communication.PingProtocolV1: c.pingHandler, + communication.GoodbyeProtocolV1: c.goodbyeHandler, + communication.StatusProtocolV1: c.statusHandler, + communication.MetadataProtocolV1: c.metadataV1Handler, + communication.MetadataProtocolV2: c.metadataV2Handler, + communication.LightClientOptimisticUpdateProtocolV1: c.optimisticLightClientUpdateHandler, + communication.LightClientFinalityUpdateProtocolV1: c.finalityLightClientUpdateHandler, + communication.LightClientBootstrapProtocolV1: c.lightClientBootstrapHandler, + communication.LightClientUpdatesByRangeProtocolV1: c.lightClientUpdatesByRangeHandler, } if c.enableBlocks { hm[communication.BeaconBlocksByRangeProtocolV2] = c.beaconBlocksByRangeHandler hm[communication.BeaconBlocksByRootProtocolV2] = c.beaconBlocksByRootHandler + hm[communication.BlobSidecarByRangeProtocolV1] = c.blobsSidecarsByRangeHandler + hm[communication.BlobSidecarByRootProtocolV1] = c.blobsSidecarsByIdsHandler } c.handlers = map[protocol.ID]network.StreamHandler{} @@ -116,7 +143,7 @@ func NewConsensusHandlers(ctx context.Context, db persistence.RawBeaconBlockChai return c } -func (c *ConsensusHandlers) checkRateLimit(peerId string, method string, limit int) error { +func (c *ConsensusHandlers) checkRateLimit(peerId string, method string, limit, n int) error { keyHash := utils.Sha256([]byte(peerId), []byte(method)) if punishmentEndTime, ok := c.punishmentEndTimes.Load(keyHash); ok { @@ -134,7 +161,7 @@ func (c *ConsensusHandlers) checkRateLimit(peerId string, method string, limit i limiter := value.(*rate.Limiter) - if !limiter.Allow() { + if !limiter.AllowN(time.Now(), n) { c.punishmentEndTimes.Store(keyHash, time.Now().Add(punishmentPeriod)) c.peerRateLimits.Delete(keyHash) return errors.New("rate limit exceeded") @@ -151,6 +178,14 @@ func (c *ConsensusHandlers) Start() { func (c *ConsensusHandlers) wrapStreamHandler(name string, fn func(s network.Stream) error) func(s network.Stream) { return func(s network.Stream) { + // handle panic + defer func() { + if r := recover(); r != nil { + log.Error("[pubsubhandler] panic in stream handler", "err", r) + _ = s.Reset() + _ = s.Close() + } + }() l := log.Ctx{ "name": name, } diff --git a/cl/sentinel/handlers/heartbeats.go b/cl/sentinel/handlers/heartbeats.go index b06774a77fe..14f9d880290 100644 --- a/cl/sentinel/handlers/heartbeats.go +++ b/cl/sentinel/handlers/heartbeats.go @@ -17,6 +17,8 @@ import ( "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" + "github.com/ledgerwatch/erigon/p2p/enr" + "github.com/ledgerwatch/log/v3" "github.com/libp2p/go-libp2p/core/network" ) @@ -25,21 +27,33 @@ import ( func (c *ConsensusHandlers) pingHandler(s network.Stream) error { peerId := s.Conn().RemotePeer().String() - if err := c.checkRateLimit(peerId, "ping", rateLimits.pingLimit); err != nil { + if err := c.checkRateLimit(peerId, "ping", rateLimits.pingLimit, 1); err != nil { ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) return err } return ssz_snappy.EncodeAndWrite(s, &cltypes.Ping{ - Id: c.metadata.SeqNumber, + Id: c.me.Seq(), }, SuccessfulResponsePrefix) } func (c *ConsensusHandlers) goodbyeHandler(s network.Stream) error { peerId := s.Conn().RemotePeer().String() - if err := c.checkRateLimit(peerId, "goodbye", rateLimits.goodbyeLimit); err != nil { + if err := c.checkRateLimit(peerId, "goodbye", rateLimits.goodbyeLimit, 1); err != nil { ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) return err } + gid := &cltypes.Ping{} + if err := ssz_snappy.DecodeAndReadNoForkDigest(s, gid, clparams.Phase0Version); err != nil { + return err + } + + if gid.Id > 250 { // 250 is the status code for getting banned due to whatever reason + v, err := c.host.Peerstore().Get("AgentVersion", peerId) + if err == nil { + log.Debug("Received goodbye message from peer", "v", v) + } + } + return ssz_snappy.EncodeAndWrite(s, &cltypes.Ping{ Id: 1, }, SuccessfulResponsePrefix) @@ -47,36 +61,54 @@ func (c *ConsensusHandlers) goodbyeHandler(s network.Stream) error { func (c *ConsensusHandlers) metadataV1Handler(s network.Stream) error { peerId := s.Conn().RemotePeer().String() - if err := c.checkRateLimit(peerId, "metadataV1", rateLimits.metadataV1Limit); err != nil { + if err := c.checkRateLimit(peerId, "metadataV1", rateLimits.metadataV1Limit, 1); err != nil { ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) return err } + subnetField := [8]byte{} + attSubEnr := enr.WithEntry(c.netCfg.AttSubnetKey, &subnetField) + if err := c.me.Node().Load(attSubEnr); err != nil { + return err + } + //me.Load() return ssz_snappy.EncodeAndWrite(s, &cltypes.Metadata{ - SeqNumber: c.metadata.SeqNumber, - Attnets: c.metadata.Attnets, + SeqNumber: c.me.Seq(), + Attnets: subnetField, }, SuccessfulResponsePrefix) } func (c *ConsensusHandlers) metadataV2Handler(s network.Stream) error { peerId := s.Conn().RemotePeer().String() - if err := c.checkRateLimit(peerId, "metadataV2", rateLimits.metadataV2Limit); err != nil { + if err := c.checkRateLimit(peerId, "metadataV2", rateLimits.metadataV2Limit, 1); err != nil { ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) return err } - return ssz_snappy.EncodeAndWrite(s, c.metadata, SuccessfulResponsePrefix) + subnetField := [8]byte{} + syncnetField := [1]byte{} + attSubEnr := enr.WithEntry(c.netCfg.AttSubnetKey, &subnetField) + syncNetEnr := enr.WithEntry(c.netCfg.SyncCommsSubnetKey, &syncnetField) + if err := c.me.Node().Load(attSubEnr); err != nil { + return err + } + if err := c.me.Node().Load(syncNetEnr); err != nil { + return err + } + + return ssz_snappy.EncodeAndWrite(s, &cltypes.Metadata{ + SeqNumber: c.me.Seq(), + Attnets: subnetField, + Syncnets: &syncnetField, + }, SuccessfulResponsePrefix) } // TODO: Actually respond with proper status func (c *ConsensusHandlers) statusHandler(s network.Stream) error { peerId := s.Conn().RemotePeer().String() - if err := c.checkRateLimit(peerId, "status", rateLimits.statusLimit); err != nil { + if err := c.checkRateLimit(peerId, "status", rateLimits.statusLimit, 1); err != nil { ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) return err } - status := &cltypes.Status{} - if err := ssz_snappy.DecodeAndReadNoForkDigest(s, status, clparams.Phase0Version); err != nil { - return err - } - return ssz_snappy.EncodeAndWrite(s, status, SuccessfulResponsePrefix) + + return ssz_snappy.EncodeAndWrite(s, c.hs.Status(), SuccessfulResponsePrefix) } diff --git a/cl/sentinel/handlers/heartbeats_test.go b/cl/sentinel/handlers/heartbeats_test.go new file mode 100644 index 00000000000..4bfb28c8027 --- /dev/null +++ b/cl/sentinel/handlers/heartbeats_test.go @@ -0,0 +1,346 @@ +package handlers + +import ( + "bytes" + "context" + "crypto/ecdsa" + "testing" + + "github.com/ledgerwatch/log/v3" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" + "github.com/stretchr/testify/require" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/sentinel/communication" + "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" + "github.com/ledgerwatch/erigon/cl/sentinel/handshake" + "github.com/ledgerwatch/erigon/cl/sentinel/peers" + "github.com/ledgerwatch/erigon/crypto" + "github.com/ledgerwatch/erigon/p2p/enode" + "github.com/ledgerwatch/erigon/p2p/enr" +) + +var ( + attnetsTestVal = [8]byte{1, 5, 6} + syncnetsTestVal = [1]byte{56} +) + +func newkey() *ecdsa.PrivateKey { + key, err := crypto.GenerateKey() + if err != nil { + panic("couldn't generate key: " + err.Error()) + } + return key +} + +func testLocalNode() *enode.LocalNode { + db, err := enode.OpenDB(context.TODO(), "", "", log.Root()) + if err != nil { + panic(err) + } + ln := enode.NewLocalNode(db, newkey(), log.Root()) + ln.Set(enr.WithEntry("attnets", attnetsTestVal)) + ln.Set(enr.WithEntry("syncnets", syncnetsTestVal)) + return ln +} + +func TestPing(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/4501" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/4503" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + ethClock := getEthClock(t) + + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &clparams.NetworkConfig{}, + testLocalNode(), + beaconCfg, + ethClock, + nil, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.PingProtocolV1)) + require.NoError(t, err) + + _, err = stream.Write(nil) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + p := &cltypes.Ping{} + + err = ssz_snappy.DecodeAndReadNoForkDigest(stream, p, clparams.Phase0Version) + require.NoError(t, err) +} + +func TestGoodbye(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/4509" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/4512" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + ethClock := getEthClock(t) + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &clparams.NetworkConfig{}, + testLocalNode(), + beaconCfg, + ethClock, + nil, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.GoodbyeProtocolV1)) + require.NoError(t, err) + + req := &cltypes.Ping{} + var reqBuf bytes.Buffer + if err := ssz_snappy.EncodeAndWrite(&reqBuf, req); err != nil { + return + } + + _, err = stream.Write(reqBuf.Bytes()) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + p := &cltypes.Ping{} + + err = ssz_snappy.DecodeAndReadNoForkDigest(stream, p, clparams.Phase0Version) + require.NoError(t, err) +} + +func TestMetadataV2(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/2509" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/7510" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + ethClock := getEthClock(t) + nc := clparams.NetworkConfigs[clparams.MainnetNetwork] + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &nc, + testLocalNode(), + beaconCfg, + ethClock, + nil, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.MetadataProtocolV2)) + require.NoError(t, err) + + _, err = stream.Write(nil) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + p := &cltypes.Metadata{} + + err = ssz_snappy.DecodeAndReadNoForkDigest(stream, p, clparams.Phase0Version) + require.NoError(t, err) + + require.Equal(t, attnetsTestVal, p.Attnets) + require.Equal(t, &syncnetsTestVal, p.Syncnets) +} + +func TestMetadataV1(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/4519" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/4578" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + + nc := clparams.NetworkConfigs[clparams.MainnetNetwork] + ethClock := getEthClock(t) + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &nc, + testLocalNode(), + beaconCfg, + ethClock, + nil, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.MetadataProtocolV1)) + require.NoError(t, err) + + _, err = stream.Write(nil) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + p := &cltypes.Metadata{} + + err = ssz_snappy.DecodeAndReadNoForkDigest(stream, p, clparams.Phase0Version) + require.NoError(t, err) + + require.Equal(t, attnetsTestVal, p.Attnets) +} + +func TestStatus(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/1519" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/4518" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + + hs := handshake.New(ctx, getEthClock(t), &clparams.MainnetBeaconConfig, nil) + s := &cltypes.Status{ + FinalizedRoot: libcommon.Hash{1, 2, 4}, + HeadRoot: libcommon.Hash{1, 2, 4}, + FinalizedEpoch: 1, + HeadSlot: 1, + } + hs.SetStatus(s) + nc := clparams.NetworkConfigs[clparams.MainnetNetwork] + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &nc, + testLocalNode(), + beaconCfg, + getEthClock(t), + hs, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.StatusProtocolV1)) + require.NoError(t, err) + + _, err = stream.Write(nil) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + p := &cltypes.Status{} + + err = ssz_snappy.DecodeAndReadNoForkDigest(stream, p, clparams.Phase0Version) + require.NoError(t, err) + + require.Equal(t, s, p) +} diff --git a/cl/sentinel/handlers/light_client.go b/cl/sentinel/handlers/light_client.go new file mode 100644 index 00000000000..5662883659e --- /dev/null +++ b/cl/sentinel/handlers/light_client.go @@ -0,0 +1,151 @@ +package handlers + +import ( + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/libp2p/go-libp2p/core/network" +) + +const maxLightClientsPerRequest = 100 + +func (c *ConsensusHandlers) optimisticLightClientUpdateHandler(s network.Stream) error { + peerId := s.Conn().RemotePeer().String() + if err := c.checkRateLimit(peerId, "light_client", rateLimits.lightClientLimit, 1); err != nil { + ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) + return err + } + lc := c.forkChoiceReader.NewestLightClientUpdate() + if lc == nil { + return ssz_snappy.EncodeAndWrite(s, &emptyString{}, ResourceUnavaiablePrefix) + } + version := lc.AttestedHeader.Version() + // Read the fork digest + forkDigest, err := c.ethClock.ComputeForkDigestForVersion(utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(version))) + if err != nil { + return err + } + + prefix := append([]byte{SuccessfulResponsePrefix}, forkDigest[:]...) + return ssz_snappy.EncodeAndWrite(s, &cltypes.LightClientOptimisticUpdate{ + AttestedHeader: lc.AttestedHeader, + SyncAggregate: lc.SyncAggregate, + SignatureSlot: lc.SignatureSlot, + }, prefix...) +} + +func (c *ConsensusHandlers) finalityLightClientUpdateHandler(s network.Stream) error { + peerId := s.Conn().RemotePeer().String() + if err := c.checkRateLimit(peerId, "light_client", rateLimits.lightClientLimit, 1); err != nil { + ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) + return err + } + lc := c.forkChoiceReader.NewestLightClientUpdate() + if lc == nil { + return ssz_snappy.EncodeAndWrite(s, &emptyString{}, ResourceUnavaiablePrefix) + } + + forkDigest, err := c.ethClock.ComputeForkDigestForVersion(utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(lc.AttestedHeader.Version()))) + if err != nil { + return err + } + prefix := append([]byte{SuccessfulResponsePrefix}, forkDigest[:]...) + return ssz_snappy.EncodeAndWrite(s, &cltypes.LightClientFinalityUpdate{ + AttestedHeader: lc.AttestedHeader, + SyncAggregate: lc.SyncAggregate, + FinalizedHeader: lc.FinalizedHeader, + FinalityBranch: lc.FinalityBranch, + SignatureSlot: lc.SignatureSlot, + }, prefix...) +} + +func (c *ConsensusHandlers) lightClientBootstrapHandler(s network.Stream) error { + root := &cltypes.Root{} + if err := ssz_snappy.DecodeAndReadNoForkDigest(s, root, clparams.Phase0Version); err != nil { + return err + } + + peerId := s.Conn().RemotePeer().String() + if err := c.checkRateLimit(peerId, "light_client", rateLimits.lightClientLimit, 1); err != nil { + ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) + return err + } + + lc, has := c.forkChoiceReader.GetLightClientBootstrap(root.Root) + if !has { + return ssz_snappy.EncodeAndWrite(s, &emptyString{}, ResourceUnavaiablePrefix) + } + + forkDigest, err := c.ethClock.ComputeForkDigestForVersion(utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(lc.Header.Version()))) + if err != nil { + return err + } + + prefix := append([]byte{SuccessfulResponsePrefix}, forkDigest[:]...) + return ssz_snappy.EncodeAndWrite(s, lc, prefix...) +} + +func (c *ConsensusHandlers) lightClientUpdatesByRangeHandler(s network.Stream) error { + req := &cltypes.LightClientUpdatesByRangeRequest{} + if err := ssz_snappy.DecodeAndReadNoForkDigest(s, req, clparams.Phase0Version); err != nil { + return err + } + + peerId := s.Conn().RemotePeer().String() + if err := c.checkRateLimit(peerId, "light_client", rateLimits.lightClientLimit, int(req.Count)); err != nil { + ssz_snappy.EncodeAndWrite(s, &emptyString{}, RateLimitedPrefix) + return err + } + + lightClientUpdates := make([]*cltypes.LightClientUpdate, 0, maxLightClientsPerRequest) + + endPeriod := req.StartPeriod + req.Count + currentSlot := c.ethClock.GetCurrentSlot() + if endPeriod > c.beaconConfig.SyncCommitteePeriod(currentSlot) { + endPeriod = c.beaconConfig.SyncCommitteePeriod(currentSlot) + 1 + } + + notFoundPrev := false + // Fetch from [start_period, start_period + count] + for i := req.StartPeriod; i < endPeriod; i++ { + update, has := c.forkChoiceReader.GetLightClientUpdate(i) + if !has { + notFoundPrev = true + continue + } + if notFoundPrev { + lightClientUpdates = lightClientUpdates[0:] + notFoundPrev = false + } + + lightClientUpdates = append(lightClientUpdates, update) + if uint64(len(lightClientUpdates)) >= maxLightClientsPerRequest { + break + } + } + + // Write the updates + for _, update := range lightClientUpdates { + if _, err := s.Write([]byte{0}); err != nil { + return err + } + + version := update.AttestedHeader.Version() + // Read the fork digest + forkDigest, err := c.ethClock.ComputeForkDigestForVersion(utils.Uint32ToBytes4(c.beaconConfig.GetForkVersionByVersion(version))) + if err != nil { + return err + } + + if _, err := s.Write(forkDigest[:]); err != nil { + return err + } + + if err := ssz_snappy.EncodeAndWrite(s, update); err != nil { + return err + } + } + + return nil +} diff --git a/cl/sentinel/handlers/light_client_test.go b/cl/sentinel/handlers/light_client_test.go new file mode 100644 index 00000000000..6ffcf412897 --- /dev/null +++ b/cl/sentinel/handlers/light_client_test.go @@ -0,0 +1,381 @@ +package handlers + +import ( + "bytes" + "context" + "encoding/binary" + "fmt" + "io" + "testing" + + "github.com/golang/snappy" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" + "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/sentinel/communication" + "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" + "github.com/ledgerwatch/erigon/cl/sentinel/peers" + "github.com/ledgerwatch/erigon/cl/utils" +) + +func TestLightClientOptimistic(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/6011" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/6013" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + + f.NewestLCUpdate = &cltypes.LightClientUpdate{ + AttestedHeader: cltypes.NewLightClientHeader(clparams.AltairVersion), + NextSyncCommittee: &solid.SyncCommittee{}, + SignatureSlot: 1234, + SyncAggregate: &cltypes.SyncAggregate{}, + FinalizedHeader: cltypes.NewLightClientHeader(clparams.AltairVersion), + // 8 is fine as this is a test + FinalityBranch: solid.NewHashVector(8), + NextSyncCommitteeBranch: solid.NewHashVector(8), + } + + ethClock := getEthClock(t) + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &clparams.NetworkConfig{}, + nil, + beaconCfg, + ethClock, + nil, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.LightClientOptimisticUpdateProtocolV1)) + require.NoError(t, err) + + _, err = stream.Write(nil) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + optimistic := &cltypes.LightClientOptimisticUpdate{} + + err = ssz_snappy.DecodeAndRead(stream, optimistic, &clparams.MainnetBeaconConfig, ethClock) + require.NoError(t, err) + + require.Equal(t, optimistic.AttestedHeader, f.NewestLCUpdate.AttestedHeader) + require.Equal(t, optimistic.SignatureSlot, f.NewestLCUpdate.SignatureSlot) + require.Equal(t, optimistic.SyncAggregate, f.NewestLCUpdate.SyncAggregate) +} + +func TestLightClientFinality(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/6005" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/6006" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + + f.NewestLCUpdate = &cltypes.LightClientUpdate{ + AttestedHeader: cltypes.NewLightClientHeader(clparams.AltairVersion), + NextSyncCommittee: &solid.SyncCommittee{}, + SignatureSlot: 1234, + SyncAggregate: &cltypes.SyncAggregate{}, + FinalizedHeader: cltypes.NewLightClientHeader(clparams.AltairVersion), + // 8 is fine as this is a test + FinalityBranch: solid.NewHashVector(cltypes.FinalizedBranchSize), + NextSyncCommitteeBranch: solid.NewHashVector(cltypes.SyncCommitteeBranchSize), + } + ethClock := getEthClock(t) + + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &clparams.NetworkConfig{}, + nil, + beaconCfg, + ethClock, + nil, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.LightClientFinalityUpdateProtocolV1)) + require.NoError(t, err) + + _, err = stream.Write(nil) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + got := &cltypes.LightClientFinalityUpdate{} + + err = ssz_snappy.DecodeAndRead(stream, got, &clparams.MainnetBeaconConfig, ethClock) + require.NoError(t, err) + + require.Equal(t, got.AttestedHeader, f.NewestLCUpdate.AttestedHeader) + require.Equal(t, got.SyncAggregate, f.NewestLCUpdate.SyncAggregate) + require.Equal(t, got.FinalizedHeader, f.NewestLCUpdate.FinalizedHeader) + require.Equal(t, got.FinalityBranch, f.NewestLCUpdate.FinalityBranch) + require.Equal(t, got.SignatureSlot, f.NewestLCUpdate.SignatureSlot) +} + +func TestLightClientBootstrap(t *testing.T) { + ctx := context.Background() + ethClock := getEthClock(t) + + listenAddrHost := "/ip4/127.0.0.1/tcp/6007" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/6008" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + + f.NewestLCUpdate = &cltypes.LightClientUpdate{ + AttestedHeader: cltypes.NewLightClientHeader(clparams.AltairVersion), + NextSyncCommittee: &solid.SyncCommittee{}, + SignatureSlot: 1234, + SyncAggregate: &cltypes.SyncAggregate{}, + FinalizedHeader: cltypes.NewLightClientHeader(clparams.AltairVersion), + // 8 is fine as this is a test + FinalityBranch: solid.NewHashVector(cltypes.FinalizedBranchSize), + NextSyncCommitteeBranch: solid.NewHashVector(cltypes.SyncCommitteeBranchSize), + } + reqRoot := common.Hash{1, 2, 3} + f.LightClientBootstraps[reqRoot] = &cltypes.LightClientBootstrap{ + Header: cltypes.NewLightClientHeader(clparams.AltairVersion), + CurrentSyncCommittee: &solid.SyncCommittee{1, 2, 3, 5, 6}, + CurrentSyncCommitteeBranch: solid.NewHashVector(cltypes.SyncCommitteeBranchSize), + } + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &clparams.NetworkConfig{}, + nil, + beaconCfg, + ethClock, + nil, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.LightClientBootstrapProtocolV1)) + require.NoError(t, err) + + var reqBuf bytes.Buffer + if err := ssz_snappy.EncodeAndWrite(&reqBuf, &cltypes.Root{Root: reqRoot}); err != nil { + return + } + require.NoError(t, err) + + reqData := libcommon.CopyBytes(reqBuf.Bytes()) + _, err = stream.Write(reqData) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + got := &cltypes.LightClientBootstrap{} + + err = ssz_snappy.DecodeAndRead(stream, got, &clparams.MainnetBeaconConfig, ethClock) + require.NoError(t, err) + + expected := f.LightClientBootstraps[reqRoot] + require.Equal(t, got.Header, expected.Header) + require.Equal(t, got.CurrentSyncCommittee, expected.CurrentSyncCommittee) + require.Equal(t, got.CurrentSyncCommitteeBranch, expected.CurrentSyncCommitteeBranch) +} + +func TestLightClientUpdates(t *testing.T) { + ctx := context.Background() + + listenAddrHost := "/ip4/127.0.0.1/tcp/6009" + host, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost)) + require.NoError(t, err) + + listenAddrHost1 := "/ip4/127.0.0.1/tcp/6041" + host1, err := libp2p.New(libp2p.ListenAddrStrings(listenAddrHost1)) + require.NoError(t, err) + + err = host.Connect(ctx, peer.AddrInfo{ + ID: host1.ID(), + Addrs: host1.Addrs(), + }) + require.NoError(t, err) + + peersPool := peers.NewPool() + beaconDB, indiciesDB := setupStore(t) + + f := mock_services.NewForkChoiceStorageMock(t) + ethClock := getEthClock(t) + + up := &cltypes.LightClientUpdate{ + AttestedHeader: cltypes.NewLightClientHeader(clparams.AltairVersion), + NextSyncCommittee: &solid.SyncCommittee{}, + SignatureSlot: 1234, + SyncAggregate: &cltypes.SyncAggregate{}, + FinalizedHeader: cltypes.NewLightClientHeader(clparams.AltairVersion), + // 8 is fine as this is a test + FinalityBranch: solid.NewHashVector(cltypes.FinalizedBranchSize), + NextSyncCommitteeBranch: solid.NewHashVector(cltypes.SyncCommitteeBranchSize), + } + // just some stupid randomization + for i := 1; i < 5; i++ { + upC := *up + upC.SignatureSlot = uint64(i) + f.LCUpdates[uint64(i)] = &upC + } + _, beaconCfg := clparams.GetConfigsByNetwork(1) + c := NewConsensusHandlers( + ctx, + beaconDB, + indiciesDB, + host, + peersPool, + &clparams.NetworkConfig{}, + nil, + beaconCfg, + ethClock, + nil, f, nil, true, + ) + c.Start() + + stream, err := host1.NewStream(ctx, host.ID(), protocol.ID(communication.LightClientUpdatesByRangeProtocolV1)) + require.NoError(t, err) + + var reqBuf bytes.Buffer + if err := ssz_snappy.EncodeAndWrite(&reqBuf, &cltypes.LightClientUpdatesByRangeRequest{StartPeriod: 0, Count: 2}); err != nil { + return + } + require.NoError(t, err) + + reqData := libcommon.CopyBytes(reqBuf.Bytes()) + _, err = stream.Write(reqData) + require.NoError(t, err) + + firstByte := make([]byte, 1) + _, err = stream.Read(firstByte) + require.NoError(t, err) + require.Equal(t, firstByte[0], byte(0)) + + got := []*cltypes.LightClientUpdate{} + _ = got + expectedCount := 1 + currentPeriod := 1 + for i := 0; i < expectedCount; i++ { + forkDigest := make([]byte, 4) + + _, err := stream.Read(forkDigest) + if err != nil { + if err == io.EOF { + t.Fatal("Stream is empty") + } else { + require.NoError(t, err) + } + } + + encodedLn, _, err := ssz_snappy.ReadUvarint(stream) + require.NoError(t, err) + + raw := make([]byte, encodedLn) + sr := snappy.NewReader(stream) + bytesRead := 0 + for bytesRead < int(encodedLn) { + n, err := sr.Read(raw[bytesRead:]) + require.NoError(t, err) + bytesRead += n + } + + // Fork digests + respForkDigest := binary.BigEndian.Uint32(forkDigest) + if respForkDigest == 0 { + require.NoError(t, fmt.Errorf("null fork digest")) + } + + version, err := ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) + if err != nil { + require.NoError(t, err) + } + + update := cltypes.NewLightClientUpdate(version) + if err = update.DecodeSSZ(raw, int(version)); err != nil { + require.NoError(t, err) + return + } + require.Equal(t, update, f.LCUpdates[uint64(currentPeriod)]) + currentPeriod++ + + stream.Read(make([]byte, 1)) + } + + _, err = stream.Read(make([]byte, 1)) + if err != io.EOF { + t.Fatal("Stream is not empty") + } + +} diff --git a/cl/sentinel/handlers/utils_test.go b/cl/sentinel/handlers/utils_test.go index f197fea46ff..26c5d1dd283 100644 --- a/cl/sentinel/handlers/utils_test.go +++ b/cl/sentinel/handlers/utils_test.go @@ -8,23 +8,20 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/erigon/cl/antiquary/tests" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" - "github.com/spf13/afero" + "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" "github.com/stretchr/testify/require" ) -func setupStore(t *testing.T) (persistence.RawBeaconBlockChain, kv.RwDB) { +func setupStore(t *testing.T) (freezeblocks.BeaconSnapshotReader, kv.RwDB) { db := memdb.NewTestDB(t) - af := afero.NewMemMapFs() - rawDB := persistence.NewAferoRawBlockSaver(af, &clparams.MainnetBeaconConfig) - return rawDB, db + return tests.NewMockBlockReader(), db } -func populateDatabaseWithBlocks(t *testing.T, store persistence.BeaconChainDatabase, tx kv.RwTx, startSlot, count uint64) []*cltypes.SignedBeaconBlock { - +func populateDatabaseWithBlocks(t *testing.T, store *tests.MockBlockReader, tx kv.RwTx, startSlot, count uint64) []*cltypes.SignedBeaconBlock { mockParentRoot := common.Hash{1} blocks := make([]*cltypes.SignedBeaconBlock, 0, count) for i := uint64(0); i <= count; i++ { @@ -37,8 +34,8 @@ func populateDatabaseWithBlocks(t *testing.T, store persistence.BeaconChainDatab bodyRoot, _ := block.Block.Body.HashSSZ() canonical := true - // Populate BeaconChainDatabase - store.WriteBlock(context.Background(), tx, block, canonical) + store.U[block.Block.Slot] = block + require.NoError(t, beacon_indicies.WriteBeaconBlock(context.Background(), tx, block)) // Populate indiciesDB require.NoError(t, beacon_indicies.WriteBeaconBlockHeaderAndIndicies( diff --git a/cl/sentinel/handshake/handshake.go b/cl/sentinel/handshake/handshake.go index f5b6baadf07..d3eb5e57f2d 100644 --- a/cl/sentinel/handshake/handshake.go +++ b/cl/sentinel/handshake/handshake.go @@ -11,10 +11,10 @@ import ( communication2 "github.com/ledgerwatch/erigon/cl/sentinel/communication" "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" "github.com/ledgerwatch/erigon/cl/sentinel/httpreqresp" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/fork" "github.com/libp2p/go-libp2p/core/peer" ) @@ -23,22 +23,22 @@ import ( type HandShaker struct { ctx context.Context // Status object to send over. - status *cltypes.Status // Contains status object for handshakes - set bool - handler http.Handler - genesisConfig *clparams.GenesisConfig - beaconConfig *clparams.BeaconChainConfig + status *cltypes.Status // Contains status object for handshakes + set bool + handler http.Handler + beaconConfig *clparams.BeaconChainConfig + ethClock eth_clock.EthereumClock mu sync.Mutex } -func New(ctx context.Context, genesisConfig *clparams.GenesisConfig, beaconConfig *clparams.BeaconChainConfig, handler http.Handler) *HandShaker { +func New(ctx context.Context, ethClock eth_clock.EthereumClock, beaconConfig *clparams.BeaconChainConfig, handler http.Handler) *HandShaker { return &HandShaker{ - ctx: ctx, - handler: handler, - genesisConfig: genesisConfig, - beaconConfig: beaconConfig, - status: &cltypes.Status{}, + ctx: ctx, + handler: handler, + ethClock: ethClock, + beaconConfig: beaconConfig, + status: &cltypes.Status{}, } } @@ -89,16 +89,13 @@ func (h *HandShaker) ValidatePeer(id peer.ID) (bool, error) { if resp.Header.Get("REQRESP-RESPONSE-CODE") != "0" { a, _ := io.ReadAll(resp.Body) //TODO: proper errors - return false, fmt.Errorf("handshake error: %s", string(a)) + return false, fmt.Errorf("hand shake error: %s", string(a)) } responseStatus := &cltypes.Status{} if err := ssz_snappy.DecodeAndReadNoForkDigest(resp.Body, responseStatus, clparams.Phase0Version); err != nil { return false, nil } - forkDigest, err := fork.ComputeForkDigest(h.beaconConfig, h.genesisConfig) - if err != nil { - return false, nil - } - return responseStatus.ForkDigest == forkDigest, nil + forkDigest, err := h.ethClock.CurrentForkDigest() + return responseStatus.ForkDigest == forkDigest, err } diff --git a/cl/sentinel/msg_id_test.go b/cl/sentinel/msg_id_test.go index ac7e66ba37f..eb4f3223501 100644 --- a/cl/sentinel/msg_id_test.go +++ b/cl/sentinel/msg_id_test.go @@ -13,13 +13,11 @@ import ( ) func TestMsgID(t *testing.T) { - g := clparams.GenesisConfigs[clparams.MainnetNetwork] n := clparams.NetworkConfigs[clparams.MainnetNetwork] s := &Sentinel{ ctx: context.TODO(), cfg: &SentinelConfig{ BeaconConfig: &clparams.MainnetBeaconConfig, - GenesisConfig: &g, NetworkConfig: &n, }, } diff --git a/cl/sentinel/peers/pool.go b/cl/sentinel/peers/pool.go index e5237b6abdd..ac1ef0ee7ca 100644 --- a/cl/sentinel/peers/pool.go +++ b/cl/sentinel/peers/pool.go @@ -38,9 +38,10 @@ type Pool struct { // allowedPeers are the peers that are allowed. // peers not on this list will be silently discarded // when returned, and skipped when requesting - peerData map[peer.ID]*Item + peerData map[peer.ID]*Item + bannedPeersCount atomic.Int32 - bannedPeers map[peer.ID]struct{} + bannedPeers sync.Map queue *ring.Buffer[*Item] mu sync.Mutex @@ -48,22 +49,25 @@ type Pool struct { func NewPool() *Pool { return &Pool{ - peerData: make(map[peer.ID]*Item), - bannedPeers: map[peer.ID]struct{}{}, - queue: ring.NewBuffer[*Item](0, 1024), + peerData: make(map[peer.ID]*Item), + queue: ring.NewBuffer[*Item](0, 1024), } } func (p *Pool) BanStatus(pid peer.ID) bool { - _, ok := p.bannedPeers[pid] + _, ok := p.bannedPeers.Load(pid) return ok } +func (p *Pool) LenBannedPeers() int { + return int(p.bannedPeersCount.Load()) +} + func (p *Pool) AddPeer(pid peer.ID) { p.mu.Lock() defer p.mu.Unlock() // if peer banned, return immediately - if _, ok := p.bannedPeers[pid]; ok { + if _, ok := p.bannedPeers.Load(pid); ok { return } // if peer already here, return immediately @@ -82,10 +86,11 @@ func (p *Pool) SetBanStatus(pid peer.ID, banned bool) { p.mu.Lock() defer p.mu.Unlock() if banned { - p.bannedPeers[pid] = struct{}{} + p.bannedPeers.Store(pid, struct{}{}) + p.bannedPeersCount.Add(1) delete(p.peerData, pid) } else { - delete(p.bannedPeers, pid) + p.bannedPeers.Delete(pid) } } @@ -112,7 +117,7 @@ func (p *Pool) nextPeer() (i *Item, ok bool) { return nil, false } // if peer been banned, get next peer - if _, ok := p.bannedPeers[val.id]; ok { + if _, ok := p.bannedPeers.Load(val.id); ok { return p.nextPeer() } // if peer not in set, get next peer diff --git a/cl/sentinel/sentinel.go b/cl/sentinel/sentinel.go index f5b36861699..f1bbcda2abf 100644 --- a/cl/sentinel/sentinel.go +++ b/cl/sentinel/sentinel.go @@ -19,17 +19,22 @@ import ( "fmt" "net" "net/http" + "sync" "time" "github.com/go-chi/chi/v5" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" "github.com/ledgerwatch/erigon/cl/sentinel/handlers" "github.com/ledgerwatch/erigon/cl/sentinel/handshake" "github.com/ledgerwatch/erigon/cl/sentinel/httpreqresp" "github.com/ledgerwatch/erigon/cl/sentinel/peers" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" + sentinelrpc "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/erigon/p2p/discover" "github.com/ledgerwatch/erigon/p2p/enode" @@ -72,18 +77,23 @@ type Sentinel struct { httpApi http.Handler - metadataV2 *cltypes.Metadata handshaker *handshake.HandShaker - db persistence.RawBeaconBlockChain + blockReader freezeblocks.BeaconSnapshotReader + blobStorage blob_storage.BlobStorage + indiciesDB kv.RoDB - discoverConfig discover.Config - pubsub *pubsub.PubSub - subManager *GossipManager - metrics bool - listenForPeersDoneCh chan struct{} - logger log.Logger + discoverConfig discover.Config + pubsub *pubsub.PubSub + subManager *GossipManager + metrics bool + logger log.Logger + forkChoiceReader forkchoice.ForkChoiceStorageReader + pidToEnr sync.Map + ethClock eth_clock.EthereumClock + + metadataLock sync.Mutex } func (s *Sentinel) createLocalNode( @@ -160,20 +170,14 @@ func (s *Sentinel) createListener() (*discover.UDPv5, error) { return nil, err } - // TODO: Set up proper attestation number - s.metadataV2 = &cltypes.Metadata{ - SeqNumber: localNode.Seq(), - Attnets: 0, - Syncnets: new(uint64), - } - // Start stream handlers - handlers.NewConsensusHandlers(s.ctx, s.db, s.indiciesDB, s.host, s.peers, s.cfg.BeaconConfig, s.cfg.GenesisConfig, s.metadataV2, s.cfg.EnableBlocks).Start() net, err := discover.ListenV5(s.ctx, "any", conn, localNode, discCfg) if err != nil { return nil, err } + handlers.NewConsensusHandlers(s.ctx, s.blockReader, s.indiciesDB, s.host, s.peers, s.cfg.NetworkConfig, localNode, s.cfg.BeaconConfig, s.ethClock, s.handshaker, s.forkChoiceReader, s.blobStorage, s.cfg.EnableBlocks).Start() + return net, err } @@ -181,17 +185,23 @@ func (s *Sentinel) createListener() (*discover.UDPv5, error) { func New( ctx context.Context, cfg *SentinelConfig, - db persistence.RawBeaconBlockChain, + ethClock eth_clock.EthereumClock, + blockReader freezeblocks.BeaconSnapshotReader, + blobStorage blob_storage.BlobStorage, indiciesDB kv.RoDB, logger log.Logger, + forkChoiceReader forkchoice.ForkChoiceStorageReader, ) (*Sentinel, error) { s := &Sentinel{ - ctx: ctx, - cfg: cfg, - db: db, - indiciesDB: indiciesDB, - metrics: true, - logger: logger, + ctx: ctx, + cfg: cfg, + blockReader: blockReader, + indiciesDB: indiciesDB, + metrics: true, + logger: logger, + forkChoiceReader: forkChoiceReader, + blobStorage: blobStorage, + ethClock: ethClock, } // Setup discovery @@ -247,7 +257,7 @@ func New( mux.Get("/", httpreqresp.NewRequestHandler(host)) s.httpApi = mux - s.handshaker = handshake.New(ctx, cfg.GenesisConfig, cfg.BeaconConfig, s.httpApi) + s.handshaker = handshake.New(ctx, s.ethClock, cfg.BeaconConfig, s.httpApi) pubsub.TimeCacheDuration = 550 * gossipSubHeartbeatInterval s.pubsub, err = pubsub.NewGossipSub(s.ctx, s.host, s.pubsubOptions()...) @@ -296,7 +306,6 @@ func (s *Sentinel) Start() error { } func (s *Sentinel) Stop() { - s.listenForPeersDoneCh <- struct{}{} s.listener.Close() s.subManager.Close() s.host.Close() @@ -307,17 +316,109 @@ func (s *Sentinel) String() string { } func (s *Sentinel) HasTooManyPeers() bool { - return s.GetPeersCount() >= peers.DefaultMaxPeers + active, _, _ := s.GetPeersCount() + return active >= peers.DefaultMaxPeers } -func (s *Sentinel) GetPeersCount() int { - // sub := s.subManager.GetMatchingSubscription(string(BeaconBlockTopic)) +func (s *Sentinel) GetPeersCount() (active int, connected int, disconnected int) { + peers := s.host.Network().Peers() - // if sub == nil { - return len(s.host.Network().Peers()) - // } + active = len(peers) + for _, p := range peers { + if s.host.Network().Connectedness(p) == network.Connected { + connected++ + } else { + disconnected++ + } + } + disconnected += s.peers.LenBannedPeers() + return +} - // return len(sub.topic.ListPeers()) +func (s *Sentinel) GetPeersInfos() *sentinelrpc.PeersInfoResponse { + peers := s.host.Network().Peers() + + out := &sentinelrpc.PeersInfoResponse{Peers: make([]*sentinelrpc.Peer, 0, len(peers))} + + for _, p := range peers { + entry := &sentinelrpc.Peer{} + peerInfo := s.host.Network().Peerstore().PeerInfo(p) + if len(peerInfo.Addrs) == 0 { + continue + } + entry.Address = peerInfo.Addrs[0].String() + entry.Pid = peerInfo.ID.String() + entry.State = "connected" + if s.host.Network().Connectedness(p) != network.Connected { + entry.State = "disconnected" + } + conns := s.host.Network().ConnsToPeer(p) + if len(conns) == 0 { + continue + } + if conns[0].Stat().Direction == network.DirOutbound { + entry.Direction = "outbound" + } else { + entry.Direction = "inbound" + } + if enr, ok := s.pidToEnr.Load(p); ok { + entry.Enr = enr.(string) + } else { + continue + } + agent, err := s.host.Peerstore().Get(p, "AgentVersion") + if err == nil { + entry.AgentVersion = agent.(string) + } + if entry.AgentVersion == "" { + entry.AgentVersion = "unknown" + } + out.Peers = append(out.Peers, entry) + } + return out +} + +func (s *Sentinel) Identity() (pid, enrStr string, p2pAddresses, discoveryAddresses []string, metadata *cltypes.Metadata) { + pid = s.host.ID().String() + enrStr = s.listener.LocalNode().Node().String() + p2pAddresses = make([]string, 0, len(s.host.Addrs())) + for _, addr := range s.host.Addrs() { + p2pAddresses = append(p2pAddresses, fmt.Sprintf("%s/%s", addr.String(), pid)) + } + discoveryAddresses = []string{} + + if s.listener.LocalNode().Node().TCP() != 0 { + protocol := "ip4" + if s.listener.LocalNode().Node().IP().To4() == nil { + protocol = "ip6" + } + port := s.listener.LocalNode().Node().TCP() + discoveryAddresses = append(discoveryAddresses, fmt.Sprintf("/%s/%s/tcp/%d/p2p/%s", protocol, s.listener.LocalNode().Node().IP(), port, pid)) + } + if s.listener.LocalNode().Node().UDP() != 0 { + protocol := "ip4" + if s.listener.LocalNode().Node().IP().To4() == nil { + protocol = "ip6" + } + port := s.listener.LocalNode().Node().UDP() + discoveryAddresses = append(discoveryAddresses, fmt.Sprintf("/%s/%s/udp/%d/p2p/%s", protocol, s.listener.LocalNode().Node().IP(), port, pid)) + } + subnetField := [8]byte{} + syncnetField := [1]byte{} + attSubEnr := enr.WithEntry(s.cfg.NetworkConfig.AttSubnetKey, subnetField[:]) + syncNetEnr := enr.WithEntry(s.cfg.NetworkConfig.SyncCommsSubnetKey, syncnetField[:]) + if err := s.listener.LocalNode().Node().Load(attSubEnr); err != nil { + return + } + if err := s.listener.LocalNode().Node().Load(syncNetEnr); err != nil { + return + } + metadata = &cltypes.Metadata{ + SeqNumber: s.listener.LocalNode().Seq(), + Attnets: subnetField, + Syncnets: &syncnetField, + } + return } func (s *Sentinel) Host() host.Host { diff --git a/cl/sentinel/sentinel_gossip_test.go b/cl/sentinel/sentinel_gossip_test.go index 5ef8b2082e8..7900885c8b1 100644 --- a/cl/sentinel/sentinel_gossip_test.go +++ b/cl/sentinel/sentinel_gossip_test.go @@ -6,22 +6,34 @@ import ( "testing" "time" - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/log/v3" "github.com/libp2p/go-libp2p/core/peer" "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/clparams/initial_state" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" ) +func getEthClock(t *testing.T) eth_clock.EthereumClock { + s, err := initial_state.GetGenesisState(clparams.MainnetNetwork) + require.NoError(t, err) + return eth_clock.NewEthereumClock(s.GenesisTime(), s.GenesisValidatorsRoot(), s.BeaconConfig()) +} + func TestSentinelGossipOnHardFork(t *testing.T) { listenAddrHost := "127.0.0.1" ctx := context.Background() - db, _, f, _, _ := loadChain(t) - raw := persistence.NewAferoRawBlockSaver(f, &clparams.MainnetBeaconConfig) - genesisConfig, networkConfig, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) + db, _, _, _, _, reader := loadChain(t) + networkConfig, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) bcfg := *beaconConfig + s, err := initial_state.GetGenesisState(clparams.MainnetNetwork) + require.NoError(t, err) + ethClock := eth_clock.NewEthereumClock(s.GenesisTime(), s.GenesisValidatorsRoot(), &bcfg) + bcfg.AltairForkEpoch = math.MaxUint64 bcfg.BellatrixForkEpoch = math.MaxUint64 bcfg.CapellaForkEpoch = math.MaxUint64 @@ -31,11 +43,10 @@ func TestSentinelGossipOnHardFork(t *testing.T) { sentinel1, err := New(ctx, &SentinelConfig{ NetworkConfig: networkConfig, BeaconConfig: &bcfg, - GenesisConfig: genesisConfig, IpAddr: listenAddrHost, Port: 7070, EnableBlocks: true, - }, raw, db, log.New()) + }, ethClock, reader, nil, db, log.New(), &mock_services.ForkChoiceStorageMock{}) require.NoError(t, err) defer sentinel1.Stop() @@ -45,28 +56,28 @@ func TestSentinelGossipOnHardFork(t *testing.T) { sentinel2, err := New(ctx, &SentinelConfig{ NetworkConfig: networkConfig, BeaconConfig: &bcfg, - GenesisConfig: genesisConfig, IpAddr: listenAddrHost, Port: 7077, EnableBlocks: true, TCPPort: 9123, - }, raw, db, log.New()) + }, ethClock, reader, nil, db, log.New(), &mock_services.ForkChoiceStorageMock{}) require.NoError(t, err) defer sentinel2.Stop() require.NoError(t, sentinel2.Start()) h2 := sentinel2.host - sub1, err := sentinel1.SubscribeGossip(BeaconBlockSsz) + sub1, err := sentinel1.SubscribeGossip(BeaconBlockSsz, time.Unix(0, math.MaxInt64)) require.NoError(t, err) defer sub1.Close() - require.NoError(t, sub1.Listen()) + sub1.Listen() - sub2, err := sentinel2.SubscribeGossip(BeaconBlockSsz) + sub2, err := sentinel2.SubscribeGossip(BeaconBlockSsz, time.Unix(0, math.MaxInt64)) require.NoError(t, err) defer sub2.Close() - require.NoError(t, sub2.Listen()) + sub2.Listen() + time.Sleep(200 * time.Millisecond) err = h.Connect(ctx, peer.AddrInfo{ ID: h2.ID(), diff --git a/cl/sentinel/sentinel_requests_test.go b/cl/sentinel/sentinel_requests_test.go index 1686c97e872..4f821c53a1d 100644 --- a/cl/sentinel/sentinel_requests_test.go +++ b/cl/sentinel/sentinel_requests_test.go @@ -8,6 +8,13 @@ import ( "testing" "github.com/golang/snappy" + "github.com/ledgerwatch/log/v3" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/protocol" + "github.com/spf13/afero" + "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" @@ -16,30 +23,22 @@ import ( "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/fork" - "github.com/ledgerwatch/erigon/cl/persistence" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/mock_services" "github.com/ledgerwatch/erigon/cl/sentinel/communication" "github.com/ledgerwatch/erigon/cl/sentinel/communication/ssz_snappy" "github.com/ledgerwatch/erigon/cl/utils" - "github.com/ledgerwatch/log/v3" - "github.com/libp2p/go-libp2p" - "github.com/libp2p/go-libp2p/core/peer" - "github.com/libp2p/go-libp2p/core/protocol" - "github.com/spf13/afero" - "github.com/stretchr/testify/require" ) -func loadChain(t *testing.T) (db kv.RwDB, blocks []*cltypes.SignedBeaconBlock, f afero.Fs, preState, postState *state.CachingBeaconState) { +func loadChain(t *testing.T) (db kv.RwDB, blocks []*cltypes.SignedBeaconBlock, f afero.Fs, preState, postState *state.CachingBeaconState, reader *tests.MockBlockReader) { blocks, preState, postState = tests.GetPhase0Random() db = memdb.NewTestDB(t) - var reader *tests.MockBlockReader - reader, f = tests.LoadChain(blocks, postState, db, t) + reader = tests.LoadChain(blocks, postState, db, t) ctx := context.Background() vt := state_accessors.NewStaticValidatorTable() - a := antiquary.NewAntiquary(ctx, preState, vt, &clparams.MainnetBeaconConfig, datadir.New("/tmp"), nil, db, nil, reader, nil, log.New(), true, true, f) + a := antiquary.NewAntiquary(ctx, nil, preState, vt, &clparams.MainnetBeaconConfig, datadir.New("/tmp"), nil, db, nil, reader, log.New(), true, true, false) require.NoError(t, a.IncrementBeaconState(ctx, blocks[len(blocks)-1].Block.Slot+33)) return } @@ -47,18 +46,17 @@ func loadChain(t *testing.T) (db kv.RwDB, blocks []*cltypes.SignedBeaconBlock, f func TestSentinelBlocksByRange(t *testing.T) { listenAddrHost := "127.0.0.1" + ethClock := getEthClock(t) ctx := context.Background() - db, blocks, f, _, _ := loadChain(t) - raw := persistence.NewAferoRawBlockSaver(f, &clparams.MainnetBeaconConfig) - genesisConfig, networkConfig, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) + db, blocks, _, _, _, reader := loadChain(t) + networkConfig, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) sentinel, err := New(ctx, &SentinelConfig{ NetworkConfig: networkConfig, BeaconConfig: beaconConfig, - GenesisConfig: genesisConfig, IpAddr: listenAddrHost, Port: 7070, EnableBlocks: true, - }, raw, db, log.New()) + }, ethClock, reader, nil, db, log.New(), &mock_services.ForkChoiceStorageMock{}) require.NoError(t, err) defer sentinel.Stop() @@ -125,7 +123,7 @@ func TestSentinelBlocksByRange(t *testing.T) { respForkDigest := binary.BigEndian.Uint32(forkDigest) require.NoError(t, err) - version, err := fork.ForkDigestVersion(utils.Uint32ToBytes4(respForkDigest), beaconConfig, genesisConfig.GenesisValidatorRoot) + version, err := ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) require.NoError(t, err) responseChunk := cltypes.NewSignedBeaconBlock(beaconConfig) @@ -153,17 +151,16 @@ func TestSentinelBlocksByRoots(t *testing.T) { listenAddrHost := "127.0.0.1" ctx := context.Background() - db, blocks, f, _, _ := loadChain(t) - raw := persistence.NewAferoRawBlockSaver(f, &clparams.MainnetBeaconConfig) - genesisConfig, networkConfig, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) + db, blocks, _, _, _, reader := loadChain(t) + ethClock := getEthClock(t) + networkConfig, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) sentinel, err := New(ctx, &SentinelConfig{ NetworkConfig: networkConfig, BeaconConfig: beaconConfig, - GenesisConfig: genesisConfig, IpAddr: listenAddrHost, Port: 7070, EnableBlocks: true, - }, raw, db, log.New()) + }, ethClock, reader, nil, db, log.New(), &mock_services.ForkChoiceStorageMock{}) require.NoError(t, err) defer sentinel.Stop() @@ -234,7 +231,7 @@ func TestSentinelBlocksByRoots(t *testing.T) { respForkDigest := binary.BigEndian.Uint32(forkDigest) require.NoError(t, err) - version, err := fork.ForkDigestVersion(utils.Uint32ToBytes4(respForkDigest), beaconConfig, genesisConfig.GenesisValidatorRoot) + version, err := ethClock.StateVersionByForkDigest(utils.Uint32ToBytes4(respForkDigest)) require.NoError(t, err) responseChunk := cltypes.NewSignedBeaconBlock(beaconConfig) @@ -263,17 +260,16 @@ func TestSentinelStatusRequest(t *testing.T) { listenAddrHost := "127.0.0.1" ctx := context.Background() - db, blocks, f, _, _ := loadChain(t) - raw := persistence.NewAferoRawBlockSaver(f, &clparams.MainnetBeaconConfig) - genesisConfig, networkConfig, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) + db, blocks, _, _, _, reader := loadChain(t) + ethClock := getEthClock(t) + networkConfig, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) sentinel, err := New(ctx, &SentinelConfig{ NetworkConfig: networkConfig, BeaconConfig: beaconConfig, - GenesisConfig: genesisConfig, IpAddr: listenAddrHost, Port: 7070, EnableBlocks: true, - }, raw, db, log.New()) + }, ethClock, reader, nil, db, log.New(), &mock_services.ForkChoiceStorageMock{}) require.NoError(t, err) defer sentinel.Stop() diff --git a/cl/sentinel/service/notifiers.go b/cl/sentinel/service/notifiers.go index 7297dc81802..e5f12416648 100644 --- a/cl/sentinel/service/notifiers.go +++ b/cl/sentinel/service/notifiers.go @@ -3,8 +3,6 @@ package service import ( "fmt" "sync" - - "github.com/ledgerwatch/erigon/cl/gossip" ) const ( @@ -12,9 +10,10 @@ const ( ) type gossipObject struct { - data []byte // gossip data - t string // determine which gossip message we are notifying of - pid string // pid is the peer id of the sender + data []byte // gossip data + t string // determine which gossip message we are notifying of + pid string // pid is the peer id of the sender + subnetId *uint64 } type gossipNotifier struct { @@ -29,29 +28,12 @@ func newGossipNotifier() *gossipNotifier { } } -func (g *gossipNotifier) notify(t string, data []byte, pid string) { - g.mu.Lock() - defer g.mu.Unlock() - - for _, ch := range g.notifiers { - ch <- gossipObject{ - data: data, - t: t, - pid: pid, - } - } -} - -func (g *gossipNotifier) notifyBlob(data []byte, pid string, blobIndex int) { +func (g *gossipNotifier) notify(obj *gossipObject) { g.mu.Lock() defer g.mu.Unlock() for _, ch := range g.notifiers { - ch <- gossipObject{ - data: data, - t: gossip.TopicNameBlobSidecar(blobIndex), - pid: pid, - } + ch <- *obj } } @@ -62,7 +44,7 @@ func (g *gossipNotifier) addSubscriber() (chan gossipObject, int, error) { if len(g.notifiers) >= maxSubscribers { return nil, -1, fmt.Errorf("too many subsribers, try again later") } - ch := make(chan gossipObject) + ch := make(chan gossipObject, 1<<16) g.notifiers = append(g.notifiers, ch) return ch, len(g.notifiers) - 1, nil } diff --git a/cl/sentinel/service/service.go b/cl/sentinel/service/service.go index 218c54f1848..1bf9654fb53 100644 --- a/cl/sentinel/service/service.go +++ b/cl/sentinel/service/service.go @@ -11,12 +11,13 @@ import ( "strings" "sync" "time" + "unicode" - "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon/cl/gossip" "github.com/ledgerwatch/erigon/cl/sentinel" "github.com/ledgerwatch/erigon/cl/sentinel/httpreqresp" + "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/gointerfaces" sentinelrpc "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/erigon/cl/cltypes" @@ -25,6 +26,8 @@ import ( "github.com/libp2p/go-libp2p/core/peer" ) +const gracePeerCount = 8 + var _ sentinelrpc.SentinelServer = (*SentinelServer)(nil) type SentinelServer struct { @@ -36,8 +39,6 @@ type SentinelServer struct { mu sync.RWMutex logger log.Logger - - peerStatistics map[string]*diagnostics.PeerStatistics } func NewSentinelServer(ctx context.Context, sentinel *sentinel.Sentinel, logger log.Logger) *SentinelServer { @@ -46,20 +47,25 @@ func NewSentinelServer(ctx context.Context, sentinel *sentinel.Sentinel, logger ctx: ctx, gossipNotifier: newGossipNotifier(), logger: logger, - peerStatistics: make(map[string]*diagnostics.PeerStatistics), } } -// extractBlobSideCarIndex takes a topic and extract the blob sidecar -func extractBlobSideCarIndex(topic string) int { - // compute the index prefixless - startIndex := strings.Index(topic, gossip.TopicNamePrefixBlobSidecar) + len(gossip.TopicNamePrefixBlobSidecar) - endIndex := strings.Index(topic[:startIndex], "/") - blobIndex, err := strconv.Atoi(topic[startIndex:endIndex]) +// extractSubnetIndexByGossipTopic takes a topic and extract the blob sidecar +func extractSubnetIndexByGossipTopic(name string) int { + // e.g blob_sidecar_3, we want to extract 3 + // reject if last character is not a number + if !unicode.IsNumber(rune(name[len(name)-1])) { + return -1 + } + // get the last part of the topic + parts := strings.Split(name, "_") + // convert it to int + index, err := strconv.Atoi(parts[len(parts)-1]) if err != nil { - panic(fmt.Sprintf("should not be substribed to %s", topic)) + log.Warn("[Sentinel] failed to parse subnet index", "topic", name, "err", err) + return -1 } - return blobIndex + return index } //BanPeer(context.Context, *Peer) (*EmptyMessage, error) @@ -80,33 +86,43 @@ func (s *SentinelServer) PublishGossip(_ context.Context, msg *sentinelrpc.Gossi // Snappify payload before sending it to gossip compressedData := utils.CompressSnappy(msg.Data) - s.trackPeerStatistics(msg.GetPeer().Pid, false, msg.Name, "unknown", len(compressedData)) + //trackPeerStatistics(msg.GetPeer().Pid, false, msg.Name, "unknown", len(compressedData)) var subscription *sentinel.GossipSubscription - // TODO: this is still wrong... we should build a subscription here to match exactly, meaning that downstream consumers should be - // in charge of keeping track of fork id. switch msg.Name { - case gossip.TopicNameBeaconBlock: - subscription = manager.GetMatchingSubscription(msg.Name) - case gossip.TopicNameBeaconAggregateAndProof: - subscription = manager.GetMatchingSubscription(msg.Name) - case gossip.TopicNameVoluntaryExit: - subscription = manager.GetMatchingSubscription(msg.Name) - case gossip.TopicNameProposerSlashing: - subscription = manager.GetMatchingSubscription(msg.Name) - case gossip.TopicNameAttesterSlashing: + case gossip.TopicNameBeaconBlock, + gossip.TopicNameBeaconAggregateAndProof, + gossip.TopicNameVoluntaryExit, + gossip.TopicNameProposerSlashing, + gossip.TopicNameSyncCommitteeContributionAndProof, + gossip.TopicNameAttesterSlashing, + gossip.TopicNameBlsToExecutionChange: subscription = manager.GetMatchingSubscription(msg.Name) default: + // check subnets switch { case gossip.IsTopicBlobSidecar(msg.Name): - subscription = manager.GetMatchingSubscription(msg.Name) + if msg.SubnetId == nil { + return nil, fmt.Errorf("subnetId is required for blob sidecar") + } + subscription = manager.GetMatchingSubscription(gossip.TopicNameBlobSidecar(*msg.SubnetId)) + case gossip.IsTopicSyncCommittee(msg.Name): + if msg.SubnetId == nil { + return nil, fmt.Errorf("subnetId is required for sync_committee") + } + subscription = manager.GetMatchingSubscription(gossip.TopicNameSyncCommittee(int(*msg.SubnetId))) + case gossip.IsTopicBeaconAttestation(msg.Name): + if msg.SubnetId == nil { + return nil, fmt.Errorf("subnetId is required for beacon attestation") + } + subscription = manager.GetMatchingSubscription(gossip.TopicNameBeaconAttestation(*msg.SubnetId)) default: - return &sentinelrpc.EmptyMessage{}, nil + return &sentinelrpc.EmptyMessage{}, fmt.Errorf("unknown topic %s", msg.Name) } } if subscription == nil { - return &sentinelrpc.EmptyMessage{}, nil + return &sentinelrpc.EmptyMessage{}, fmt.Errorf("unknown topic %s", msg.Name) } return &sentinelrpc.EmptyMessage{}, subscription.Publish(compressedData) } @@ -134,6 +150,7 @@ func (s *SentinelServer) SubscribeGossip(data *sentinelrpc.SubscriptionData, str Peer: &sentinelrpc.Peer{ Pid: packet.pid, }, + SubnetId: packet.subnetId, }); err != nil { s.logger.Warn("[Sentinel] Could not relay gossip packet", "reason", err) } @@ -189,15 +206,10 @@ func (s *SentinelServer) requestPeer(ctx context.Context, pid peer.ID, req *sent if resp.StatusCode < 200 || resp.StatusCode > 399 { errBody, _ := io.ReadAll(resp.Body) errorMessage := fmt.Errorf("SentinelHttp: %s", string(errBody)) - if resp.StatusCode >= 400 && resp.StatusCode < 500 { - s.sentinel.Peers().RemovePeer(pid) - s.sentinel.Host().Peerstore().RemovePeer(pid) - s.sentinel.Host().Network().ClosePeer(pid) - } - if resp.StatusCode >= 500 && resp.StatusCode < 600 { - s.sentinel.Host().Peerstore().RemovePeer(pid) - s.sentinel.Host().Network().ClosePeer(pid) - } + s.sentinel.Peers().RemovePeer(pid) + s.sentinel.Host().Peerstore().RemovePeer(pid) + s.sentinel.Host().Network().ClosePeer(pid) + return nil, errorMessage } // we should never get an invalid response to this. our responder should always set it on non-error response @@ -207,18 +219,14 @@ func (s *SentinelServer) requestPeer(ctx context.Context, pid peer.ID, req *sent return nil, err } // known error codes, just remove the peer - if isError == 3 || isError == 2 { + if isError != 0 { + s.sentinel.Peers().RemovePeer(pid) s.sentinel.Host().Peerstore().RemovePeer(pid) s.sentinel.Host().Network().ClosePeer(pid) + return nil, fmt.Errorf("peer error code: %d", isError) } - // unknown error codes - if isError > 3 { - s.logger.Debug("peer returned unknown erro", "id", pid.String()) - s.sentinel.Host().Peerstore().RemovePeer(pid) - s.sentinel.Host().Network().ClosePeer(pid) - return nil, fmt.Errorf("peer returned unknown error: %d", isError) - } + // read the body from the response data, err := io.ReadAll(resp.Body) if err != nil { @@ -248,6 +256,12 @@ func (s *SentinelServer) SendRequest(ctx context.Context, req *sentinelrpc.Reque resp, err := s.requestPeer(ctx, pid, req) if err != nil { + if strings.Contains(err.Error(), "protocols not supported") { + s.sentinel.Peers().RemovePeer(pid) + s.sentinel.Host().Peerstore().RemovePeer(pid) + s.sentinel.Host().Network().ClosePeer(pid) + s.sentinel.Peers().SetBanStatus(pid, true) + } s.logger.Trace("[sentinel] peer gave us bad data", "peer", pid, "err", err) return nil, err } @@ -255,6 +269,23 @@ func (s *SentinelServer) SendRequest(ctx context.Context, req *sentinelrpc.Reque } +func (s *SentinelServer) Identity(ctx context.Context, in *sentinelrpc.EmptyMessage) (*sentinelrpc.IdentityResponse, error) { + // call s.sentinel.Identity() + pid, enr, p2pAddresses, discoveryAddresses, metadata := s.sentinel.Identity() + return &sentinelrpc.IdentityResponse{ + Pid: pid, + Enr: enr, + P2PAddresses: p2pAddresses, + DiscoveryAddresses: discoveryAddresses, + Metadata: &sentinelrpc.Metadata{ + Seq: metadata.SeqNumber, + Attnets: fmt.Sprintf("%x", metadata.Attnets), + Syncnets: fmt.Sprintf("%x", *metadata.Syncnets), + }, + }, nil + +} + func (s *SentinelServer) SetStatus(_ context.Context, req *sentinelrpc.Status) (*sentinelrpc.EmptyMessage, error) { // Send the request and get the data if we get an answer. s.sentinel.SetStatus(&cltypes.Status{ @@ -268,12 +299,35 @@ func (s *SentinelServer) SetStatus(_ context.Context, req *sentinelrpc.Status) ( } func (s *SentinelServer) GetPeers(_ context.Context, _ *sentinelrpc.EmptyMessage) (*sentinelrpc.PeerCount, error) { + count, connected, disconnected := s.sentinel.GetPeersCount() // Send the request and get the data if we get an answer. return &sentinelrpc.PeerCount{ - Amount: uint64(s.sentinel.GetPeersCount()), + Active: uint64(count), + Connected: uint64(connected), + Disconnected: uint64(disconnected), }, nil } +func (s *SentinelServer) PeersInfo(ctx context.Context, r *sentinelrpc.PeersInfoRequest) (*sentinelrpc.PeersInfoResponse, error) { + peersInfos := s.sentinel.GetPeersInfos() + if r.Direction == nil && r.State == nil { + return peersInfos, nil + } + filtered := &sentinelrpc.PeersInfoResponse{ + Peers: make([]*sentinelrpc.Peer, 0, len(peersInfos.Peers)), + } + for _, peer := range peersInfos.Peers { + if r.Direction != nil && peer.Direction != *r.Direction { + continue + } + if r.State != nil && peer.State != *r.State { + continue + } + filtered.Peers = append(filtered.Peers, peer) + } + return filtered, nil +} + func (s *SentinelServer) ListenToGossip() { refreshTicker := time.NewTicker(100 * time.Millisecond) defer refreshTicker.Stop() @@ -290,6 +344,19 @@ func (s *SentinelServer) ListenToGossip() { } } +func (s *SentinelServer) SetSubscribeExpiry(ctx context.Context, expiryReq *sentinelrpc.RequestSubscribeExpiry) (*sentinelrpc.EmptyMessage, error) { + var ( + topic = expiryReq.GetTopic() + expiryTime = time.Unix(int64(expiryReq.GetExpiryUnixSecs()), 0) + ) + subs := s.sentinel.GossipManager().GetMatchingSubscription(topic) + if subs == nil { + return nil, fmt.Errorf("no such subscription") + } + subs.OverwriteSubscriptionExpiry(expiryTime) + return &sentinelrpc.EmptyMessage{}, nil +} + func (s *SentinelServer) handleGossipPacket(pkt *sentinel.GossipMessage) error { var err error s.logger.Trace("[Sentinel Gossip] Received Packet", "topic", pkt.TopicName) @@ -308,67 +375,59 @@ func (s *SentinelServer) handleGossipPacket(pkt *sentinel.GossipMessage) error { return err } - msgType, msgCap := parseTopic(topic) - s.trackPeerStatistics(string(textPid), true, msgType, msgCap, len(data)) - - // Check to which gossip it belongs to. - if strings.Contains(topic, string(gossip.TopicNameBeaconBlock)) { - s.gossipNotifier.notify(gossip.TopicNameBeaconBlock, data, string(textPid)) - } else if strings.Contains(topic, string(gossip.TopicNameBeaconAggregateAndProof)) { - s.gossipNotifier.notify(gossip.TopicNameBeaconAggregateAndProof, data, string(textPid)) - } else if strings.Contains(topic, string(gossip.TopicNameVoluntaryExit)) { - s.gossipNotifier.notify(gossip.TopicNameVoluntaryExit, data, string(textPid)) - } else if strings.Contains(topic, string(gossip.TopicNameProposerSlashing)) { - s.gossipNotifier.notify(gossip.TopicNameProposerSlashing, data, string(textPid)) - } else if strings.Contains(topic, string(gossip.TopicNameAttesterSlashing)) { - s.gossipNotifier.notify(gossip.TopicNameAttesterSlashing, data, string(textPid)) - } else if strings.Contains(topic, string(gossip.TopicNameBlsToExecutionChange)) { - s.gossipNotifier.notify(gossip.TopicNameBlsToExecutionChange, data, string(textPid)) - } else if gossip.IsTopicBlobSidecar(topic) { - // extract the index - s.gossipNotifier.notifyBlob(data, string(textPid), extractBlobSideCarIndex(topic)) + msgType, gossipTopic := parseTopic(topic) + trackPeerStatistics(string(textPid), true, msgType, gossipTopic, len(data)) + + switch gossipTopic { + case gossip.TopicNameBeaconBlock, + gossip.TopicNameBeaconAggregateAndProof, + gossip.TopicNameVoluntaryExit, + gossip.TopicNameProposerSlashing, + gossip.TopicNameAttesterSlashing, + gossip.TopicNameBlsToExecutionChange, + gossip.TopicNameSyncCommitteeContributionAndProof: + s.gossipNotifier.notify(&gossipObject{ + data: data, + t: gossipTopic, + pid: string(textPid), + subnetId: nil, + }) + default: + // case for: + // TopicNamePrefixBlobSidecar + // TopicNamePrefixBeaconAttestation + // TopicNamePrefixSyncCommittee + subnet := extractSubnetIndexByGossipTopic(gossipTopic) + if subnet < 0 { + break + } + subnetId := uint64(subnet) + s.gossipNotifier.notify(&gossipObject{ + data: data, + t: gossipTopic, + pid: string(textPid), + subnetId: &subnetId, + }) } return nil } -func (s *SentinelServer) GetPeersStatistics() map[string]*diagnostics.PeerStatistics { - stats := make(map[string]*diagnostics.PeerStatistics) - for k, v := range s.peerStatistics { - stats[k] = v - delete(s.peerStatistics, k) - } - - return stats -} - -func (s *SentinelServer) trackPeerStatistics(peerID string, inbound bool, msgType string, msgCap string, bytes int) { - if s.peerStatistics == nil { - s.peerStatistics = make(map[string]*diagnostics.PeerStatistics) - } - - if _, exists := s.peerStatistics[peerID]; !exists { - s.peerStatistics[peerID] = &diagnostics.PeerStatistics{ - CapBytesIn: make(map[string]uint64), - CapBytesOut: make(map[string]uint64), - TypeBytesIn: make(map[string]uint64), - TypeBytesOut: make(map[string]uint64), - } - } - - stats := s.peerStatistics[peerID] - - if inbound { - stats.BytesIn += uint64(bytes) - stats.CapBytesIn[msgCap] += uint64(bytes) - stats.TypeBytesIn[msgType] += uint64(bytes) - } else { - stats.BytesOut += uint64(bytes) - stats.CapBytesOut[msgCap] += uint64(bytes) - stats.TypeBytesOut[msgType] += uint64(bytes) +func trackPeerStatistics(peerID string, inbound bool, msgType string, msgCap string, bytes int) { + isDiagEnabled := diagnostics.TypeOf(diagnostics.PeerStatisticMsgUpdate{}).Enabled() + if isDiagEnabled { + diagnostics.Send(diagnostics.PeerStatisticMsgUpdate{ + PeerType: "Sentinel", + PeerID: peerID, + Inbound: inbound, + MsgType: msgType, + MsgCap: msgCap, + Bytes: bytes, + }) } } func parseTopic(input string) (string, string) { + // e.g /eth2/d31f6191/blob_sidecar_3/ssz_snappy parts := strings.Split(input, "/") if len(parts) < 4 { diff --git a/cl/sentinel/service/start.go b/cl/sentinel/service/start.go index f84de009455..dc4dfcf53a7 100644 --- a/cl/sentinel/service/start.go +++ b/cl/sentinel/service/start.go @@ -2,27 +2,75 @@ package service import ( "context" + "fmt" "net" + "strings" + "time" + "github.com/ledgerwatch/erigon/cl/gossip" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" + "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" "github.com/ledgerwatch/erigon/cl/sentinel" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/common/math" + "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" "github.com/ledgerwatch/erigon-lib/direct" sentinelrpc "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/log/v3" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) type ServerConfig struct { - Network string - Addr string + Network string + Addr string + Creds credentials.TransportCredentials + Validator bool + InitialStatus *cltypes.Status } -func createSentinel(cfg *sentinel.SentinelConfig, db persistence.RawBeaconBlockChain, indiciesDB kv.RwDB, logger log.Logger) (*sentinel.Sentinel, error) { - sent, err := sentinel.New(context.Background(), cfg, db, indiciesDB, logger) +func generateSubnetsTopics(template string, maxIds int) []sentinel.GossipTopic { + topics := make([]sentinel.GossipTopic, 0, maxIds) + for i := 0; i < maxIds; i++ { + topics = append(topics, sentinel.GossipTopic{ + Name: fmt.Sprintf(template, i), + CodecStr: sentinel.SSZSnappyCodec, + }) + } + return topics +} + +func getExpirationForTopic(topic string) time.Time { + if strings.Contains(topic, "beacon_attestation") || + (strings.Contains(topic, "sync_committee_") && !strings.Contains(topic, gossip.TopicNameSyncCommitteeContributionAndProof)) { + return time.Unix(0, 0) + } + + return time.Unix(0, math.MaxInt64) +} + +func createSentinel( + cfg *sentinel.SentinelConfig, + blockReader freezeblocks.BeaconSnapshotReader, + blobStorage blob_storage.BlobStorage, + indiciesDB kv.RwDB, + forkChoiceReader forkchoice.ForkChoiceStorageReader, + ethClock eth_clock.EthereumClock, + validatorTopics bool, + logger log.Logger) (*sentinel.Sentinel, error) { + sent, err := sentinel.New( + context.Background(), + cfg, + ethClock, + blockReader, + blobStorage, + indiciesDB, + logger, + forkChoiceReader, + ) if err != nil { return nil, err } @@ -31,51 +79,90 @@ func createSentinel(cfg *sentinel.SentinelConfig, db persistence.RawBeaconBlockC } gossipTopics := []sentinel.GossipTopic{ sentinel.BeaconBlockSsz, - sentinel.BeaconAggregateAndProofSsz, - sentinel.VoluntaryExitSsz, + //sentinel.VoluntaryExitSsz, sentinel.ProposerSlashingSsz, sentinel.AttesterSlashingSsz, sentinel.BlsToExecutionChangeSsz, + ////sentinel.LightClientFinalityUpdateSsz, + ////sentinel.LightClientOptimisticUpdateSsz, + sentinel.SyncCommitteeContributionAndProofSsz, + sentinel.BeaconAggregateAndProofSsz, } - // gossipTopics = append(gossipTopics, sentinel.GossipSidecarTopics(chain.MaxBlobsPerBlock)...) + gossipTopics = append( + gossipTopics, + generateSubnetsTopics( + gossip.TopicNamePrefixBlobSidecar, + int(cfg.BeaconConfig.MaxBlobsPerBlock), + )...) + gossipTopics = append( + gossipTopics, + generateSubnetsTopics( + gossip.TopicNamePrefixBeaconAttestation, + int(cfg.NetworkConfig.AttestationSubnetCount), + )...) + gossipTopics = append( + gossipTopics, + generateSubnetsTopics( + gossip.TopicNamePrefixSyncCommittee, + int(cfg.BeaconConfig.SyncCommitteeSubnetCount), + )...) for _, v := range gossipTopics { if err := sent.Unsubscribe(v); err != nil { logger.Error("[Sentinel] failed to start sentinel", "err", err) continue } + // now lets separately connect to the gossip topics. this joins the room - subscriber, err := sent.SubscribeGossip(v) + subscriber, err := sent.SubscribeGossip(v, getExpirationForTopic(v.Name)) // Listen forever. if err != nil { logger.Error("[Sentinel] failed to start sentinel", "err", err) } // actually start the subscription, aka listening and sending packets to the sentinel recv channel - err = subscriber.Listen() - if err != nil { - logger.Error("[Sentinel] failed to start sentinel", "err", err) - } + subscriber.Listen() } return sent, nil } -func StartSentinelService(cfg *sentinel.SentinelConfig, db persistence.RawBeaconBlockChain, indiciesDB kv.RwDB, srvCfg *ServerConfig, creds credentials.TransportCredentials, initialStatus *cltypes.Status, logger log.Logger) (sentinelrpc.SentinelClient, error) { +func StartSentinelService( + cfg *sentinel.SentinelConfig, + blockReader freezeblocks.BeaconSnapshotReader, + blobStorage blob_storage.BlobStorage, + indiciesDB kv.RwDB, + srvCfg *ServerConfig, + ethClock eth_clock.EthereumClock, + forkChoiceReader forkchoice.ForkChoiceStorageReader, + logger log.Logger) (sentinelrpc.SentinelClient, error) { ctx := context.Background() - sent, err := createSentinel(cfg, db, indiciesDB, logger) + sent, err := createSentinel( + cfg, + blockReader, + blobStorage, + indiciesDB, + forkChoiceReader, + ethClock, + srvCfg.Validator, + logger, + ) if err != nil { return nil, err } // rcmgrObs.MustRegisterWith(prometheus.DefaultRegisterer) logger.Info("[Sentinel] Sentinel started", "enr", sent.String()) - if initialStatus != nil { - sent.SetStatus(initialStatus) + if srvCfg.InitialStatus != nil { + sent.SetStatus(srvCfg.InitialStatus) } server := NewSentinelServer(ctx, sent, logger) - go StartServe(server, srvCfg, creds) + go StartServe(server, srvCfg, srvCfg.Creds) return direct.NewSentinelClientDirect(server), nil } -func StartServe(server *SentinelServer, srvCfg *ServerConfig, creds credentials.TransportCredentials) { +func StartServe( + server *SentinelServer, + srvCfg *ServerConfig, + creds credentials.TransportCredentials, +) { lis, err := net.Listen(srvCfg.Network, srvCfg.Addr) if err != nil { log.Warn("[Sentinel] could not serve service", "reason", err) diff --git a/cl/sentinel/utils.go b/cl/sentinel/utils.go index e3fdd9cd61c..ad3457efe1d 100644 --- a/cl/sentinel/utils.go +++ b/cl/sentinel/utils.go @@ -16,15 +16,20 @@ import ( "crypto/ecdsa" "fmt" "net" + "strings" "time" "github.com/btcsuite/btcd/btcec/v2" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/gossip" "github.com/ledgerwatch/erigon/p2p/enode" + "github.com/ledgerwatch/erigon/p2p/enr" "github.com/ledgerwatch/log/v3" "github.com/libp2p/go-libp2p/core/crypto" "github.com/libp2p/go-libp2p/core/peer" "github.com/multiformats/go-multiaddr" "github.com/pion/randutil" + "github.com/prysmaticlabs/go-bitfield" ) func convertToInterfacePubkey(pubkey *ecdsa.PublicKey) (crypto.PubKey, error) { @@ -114,3 +119,70 @@ func (s *Sentinel) oneEpochDuration() time.Duration { func (s *Sentinel) inMeshCap() float64 { return float64((3600 * time.Second) / s.oneSlotDuration()) } + +// updateENRAttSubnets calls the ENR to notify other peers their attnets preferences. +func (s *Sentinel) updateENRAttSubnets(subnetIndex int, on bool) { + subnetField := bitfield.NewBitvector64() + if err := s.listener.LocalNode().Node().Load(enr.WithEntry(s.cfg.NetworkConfig.AttSubnetKey, &subnetField)); err != nil { + log.Error("[Sentinel] Could not load attSubnetKey", "err", err) + return + } + subnetField = common.Copy(subnetField) + if len(subnetField) <= subnetIndex/8 { + log.Error("[Sentinel] Subnet index out of range", "subnetIndex", subnetIndex, "len", len(subnetField)) + return + } + if on { + subnetField[subnetIndex/8] |= 1 << (subnetIndex % 8) + } else { + subnetField[subnetIndex/8] &^= 1 << (subnetIndex % 8) + } + s.listener.LocalNode().Set(enr.WithEntry(s.cfg.NetworkConfig.AttSubnetKey, &subnetField)) +} + +// updateENRSyncNets calls the ENR to notify other peers their attnets preferences. +func (s *Sentinel) updateENRSyncNets(subnetIndex int, on bool) { + subnetField := bitfield.NewBitvector4() + if err := s.listener.LocalNode().Node().Load(enr.WithEntry(s.cfg.NetworkConfig.SyncCommsSubnetKey, &subnetField)); err != nil { + log.Error("[Sentinel] Could not load syncCommsSubnetKey", "err", err) + return + } + subnetField = common.Copy(subnetField) + if len(subnetField) <= subnetIndex/8 { + log.Error("[Sentinel] Subnet index out of range", "subnetIndex", subnetIndex, "len", len(subnetField)) + return + } + if on { + subnetField[subnetIndex/8] |= 1 << (subnetIndex % 8) + } else { + subnetField[subnetIndex/8] &^= 1 << (subnetIndex % 8) + } + s.listener.LocalNode().Set(enr.WithEntry(s.cfg.NetworkConfig.SyncCommsSubnetKey, &subnetField)) +} + +// updateENROnSubscription updates the ENR based on the subscription status to subnets/syncnets. +func (s *Sentinel) updateENROnSubscription(topicName string, subscribe bool) { + s.metadataLock.Lock() + defer s.metadataLock.Unlock() + //. topic: /eth2/d31f6191/beacon_attestation_45/ssz_snappy + // extract third part of the topic name + parts := strings.Split(topicName, "/") + if len(parts) < 4 { + return + } + part := parts[3] + for i := 0; i < int(s.cfg.NetworkConfig.AttestationSubnetCount); i++ { + if part == gossip.TopicNameBeaconAttestation(uint64(i)) { + log.Info("[Sentinel] Update ENR on subscription", "subnet", i, "subscribe", subscribe, "type", "attestation") + s.updateENRAttSubnets(i, subscribe) + return + } + } + for i := 0; i < int(s.cfg.BeaconConfig.SyncCommitteeSubnetCount); i++ { + if part == gossip.TopicNameSyncCommittee(i) { + log.Info("[Sentinel] Update ENR on subscription", "subnet", i, "subscribe", subscribe, "type", "syncnets") + s.updateENRSyncNets(i, subscribe) + return + } + } +} diff --git a/cl/spectest/Makefile b/cl/spectest/Makefile index 23c6cf4c17e..b507c4613b1 100644 --- a/cl/spectest/Makefile +++ b/cl/spectest/Makefile @@ -2,15 +2,13 @@ tests: - GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/ethereum/consensus-spec-tests + GIT_LFS_SKIP_SMUDGE=1 GIT_CLONE_PROTECTION_ACTIVE=false git clone https://github.com/ethereum/consensus-spec-tests cd consensus-spec-tests && git checkout 080c96fbbf3be58e75947debfeb9ba3b2b7c9748 && git lfs pull --exclude=tests/general,tests/minimal && cd .. mv consensus-spec-tests/tests . rm -rf consensus-spec-tests rm -rf tests/minimal # not needed for now rm -rf tests/mainnet/eip6110 - # FIXME: Add fork choice coverage for deneb - rm -rf tests/mainnet/deneb/fork_choice clean: rm -rf tests diff --git a/cl/spectest/consensus_tests/appendix.go b/cl/spectest/consensus_tests/appendix.go index b547533edb2..25e6d1c7a0f 100644 --- a/cl/spectest/consensus_tests/appendix.go +++ b/cl/spectest/consensus_tests/appendix.go @@ -49,6 +49,8 @@ func init() { With("", spectest.UnimplementedHandler) TestFormats.Add("light_client"). WithFn("single_merkle_proof", LightClientBeaconBlockBodyExecutionMerkleProof) + TestFormats.Add("merkle_proof"). + With("single_merkle_proof", Eip4844MerkleProof) TestFormats.Add("operations"). WithFn("attestation", operationAttestationHandler). WithFn("attester_slashing", operationAttesterSlashingHandler). @@ -90,18 +92,18 @@ func addSszTests() { With("BeaconBlockBody", getSSZStaticConsensusTest(cltypes.NewBeaconBody(&clparams.MainnetBeaconConfig))). With("BeaconBlockHeader", getSSZStaticConsensusTest(&cltypes.BeaconBlockHeader{})). With("BeaconState", getSSZStaticConsensusTest(state.New(&clparams.MainnetBeaconConfig))). - //With("BlobIdentifier", getSSZStaticConsensusTest(&cltypes.BlobIdentifier{})). - //With("BlobSidecar", getSSZStaticConsensusTest(&cltypes.BlobSideCar{})). + With("BlobIdentifier", getSSZStaticConsensusTest(&cltypes.BlobIdentifier{})). + With("BlobSidecar", getSSZStaticConsensusTest(&cltypes.BlobSidecar{})). With("BLSToExecutionChange", getSSZStaticConsensusTest(&cltypes.BLSToExecutionChange{})). With("Checkpoint", getSSZStaticConsensusTest(solid.Checkpoint{})). - // With("ContributionAndProof", getSSZStaticConsensusTest(&cltypes.ContributionAndProof{})). + With("ContributionAndProof", getSSZStaticConsensusTest(&cltypes.ContributionAndProof{})). With("Deposit", getSSZStaticConsensusTest(&cltypes.Deposit{})). With("DepositData", getSSZStaticConsensusTest(&cltypes.DepositData{})). // With("DepositMessage", getSSZStaticConsensusTest(&cltypes.DepositMessage{})). // With("Eth1Block", getSSZStaticConsensusTest(&cltypes.Eth1Block{})). With("Eth1Data", getSSZStaticConsensusTest(&cltypes.Eth1Data{})). - //With("ExecutionPayload", getSSZStaticConsensusTest(&cltypes.NewEth1Block(mainn))). - With("ExecutionPayloadHeader", getSSZStaticConsensusTest(&cltypes.Eth1Header{})). + With("ExecutionPayload", getSSZStaticConsensusTest(cltypes.NewEth1Block(clparams.Phase0Version, &clparams.MainnetBeaconConfig))). + //With("ExecutionPayloadHeader", getSSZStaticConsensusTest(&cltypes.Eth1Header{})). With("Fork", getSSZStaticConsensusTest(&cltypes.Fork{})). //With("ForkData", getSSZStaticConsensusTest(&cltypes.ForkData{})). //With("HistoricalBatch", getSSZStaticConsensusTest(&cltypes.HistoricalBatch{})). @@ -120,11 +122,11 @@ func addSszTests() { With("SignedBeaconBlockHeader", getSSZStaticConsensusTest(&cltypes.SignedBeaconBlockHeader{})). //With("SignedBlobSidecar", getSSZStaticConsensusTest(&cltypes.SignedBlobSideCar{})). With("SignedBLSToExecutionChange", getSSZStaticConsensusTest(&cltypes.SignedBLSToExecutionChange{})). - // With("SignedContributionAndProof", getSSZStaticConsensusTest(&cltypes.SignedContributionAndProof{})). + With("SignedContributionAndProof", getSSZStaticConsensusTest(&cltypes.SignedContributionAndProof{})). With("SignedVoluntaryExit", getSSZStaticConsensusTest(&cltypes.SignedVoluntaryExit{})). // With("SigningData", getSSZStaticConsensusTest(&cltypes.SigningData{})). Not needed. With("SyncAggregate", getSSZStaticConsensusTest(&cltypes.SyncAggregate{})). - // With("SyncAggregatorSelectionData", getSSZStaticConsensusTest(&cltypes.SyncAggregatorSelectionData{})). Unimplemented + With("SyncAggregatorSelectionData", getSSZStaticConsensusTest(&cltypes.SyncAggregatorSelectionData{})). With("SyncCommittee", getSSZStaticConsensusTest(&solid.SyncCommittee{})). // With("SyncCommitteeContribution", getSSZStaticConsensusTest(&cltypes.SyncCommitteeContribution{})). // With("SyncCommitteeMessage", getSSZStaticConsensusTest(&cltypes.SyncCommitteeMessage{})). diff --git a/cl/spectest/consensus_tests/eip4844_proofs.go b/cl/spectest/consensus_tests/eip4844_proofs.go new file mode 100644 index 00000000000..35a7c981eb9 --- /dev/null +++ b/cl/spectest/consensus_tests/eip4844_proofs.go @@ -0,0 +1,53 @@ +package consensus_tests + +import ( + "io/fs" + "testing" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/ledgerwatch/erigon/spectest" + "github.com/stretchr/testify/require" +) + +type MPTBranch struct { + Branch []string `yaml:"branch"` + Leaf string `yaml:"leaf"` + LeafIndex uint64 `yaml:"leaf_index"` +} + +var Eip4844MerkleProof = spectest.HandlerFunc(func(t *testing.T, root fs.FS, c spectest.TestCase) (err error) { + // read proof.yaml + proofYaml := MPTBranch{} + err = spectest.ReadYml(root, "proof.yaml", &proofYaml) + require.NoError(t, err) + + branch := make([][32]byte, len(proofYaml.Branch)) + for i, b := range proofYaml.Branch { + branch[i] = libcommon.HexToHash(b) + } + leaf := libcommon.HexToHash(proofYaml.Leaf) + beaconBody := cltypes.NewBeaconBody(&clparams.MainnetBeaconConfig) + require.NoError(t, spectest.ReadSsz(root, c.Version(), spectest.ObjectSSZ, beaconBody)) + proof, err := beaconBody.KzgCommitmentMerkleProof(0) + require.NoError(t, err) + + require.Equal(t, branch, proof) + bodyRoot, err := beaconBody.HashSSZ() + require.NoError(t, err) + proofHashes := make([]libcommon.Hash, len(proof)) + for i := range proof { + proofHashes[i] = libcommon.Hash(proof[i]) + } + require.True(t, utils.IsValidMerkleBranch(leaf, proofHashes, 17, proofYaml.LeafIndex, bodyRoot)) // Test if this is correct + hashList := solid.NewHashVector(17) + for i, h := range proof { + hashList.Set(i, libcommon.Hash(h)) + } + require.True(t, cltypes.VerifyCommitmentInclusionProof(libcommon.Bytes48(*beaconBody.BlobKzgCommitments.Get(0)), hashList, 0, c.Version(), bodyRoot)) + return nil + +}) diff --git a/cl/spectest/consensus_tests/fork_choice.go b/cl/spectest/consensus_tests/fork_choice.go index 4eff9f50c11..96644a01ed1 100644 --- a/cl/spectest/consensus_tests/fork_choice.go +++ b/cl/spectest/consensus_tests/fork_choice.go @@ -4,22 +4,34 @@ import ( "context" "fmt" "io/fs" + "math" "testing" "github.com/ledgerwatch/erigon/spectest" + "github.com/spf13/afero" + "github.com/ledgerwatch/erigon/cl/abstract" + "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/clparams/initial_state" "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/fork_graph" + "github.com/ledgerwatch/erigon/cl/phase1/network/services" "github.com/ledgerwatch/erigon/cl/pool" - "github.com/spf13/afero" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/erigon/cl/cltypes" ) func (f *ForkChoiceStep) StepType() string { @@ -52,6 +64,8 @@ type ForkChoiceStep struct { Valid *bool `yaml:"valid,omitempty"` Attestation *string `yaml:"attestation,omitempty"` Block *string `yaml:"block,omitempty"` + Blobs *string `yaml:"blobs,omitempty"` + Proofs []string `yaml:"proofs,omitempty"` PowBlock *string `yaml:"pow_block,omitempty"` AttesterSlashing *string `yaml:"attester_slashing,omitempty"` BlockHash *string `yaml:"block_hash,omitempty"` @@ -83,6 +97,14 @@ func (f *ForkChoiceStep) GetBlock() string { } return *f.Block } + +func (f *ForkChoiceStep) GetBlobs() string { + if f.Blobs == nil { + return "" + } + return *f.Blobs +} + func (f *ForkChoiceStep) GetPowBlock() string { if f.PowBlock == nil { return "" @@ -147,6 +169,8 @@ func NewForkChoice(fn func(s abstract.BeaconState) error) *ForkChoice { } func (b *ForkChoice) Run(t *testing.T, root fs.FS, c spectest.TestCase) (err error) { + ctx := context.Background() + anchorBlock, err := spectest.ReadAnchorBlock(root, c.Version(), "anchor_block.ssz_snappy") require.NoError(t, err) @@ -156,7 +180,15 @@ func (b *ForkChoice) Run(t *testing.T, root fs.FS, c spectest.TestCase) (err err anchorState, err := spectest.ReadBeaconState(root, c.Version(), "anchor_state.ssz_snappy") require.NoError(t, err) - forkStore, err := forkchoice.NewForkChoiceStore(context.Background(), anchorState, nil, nil, pool.NewOperationsPool(&clparams.MainnetBeaconConfig), fork_graph.NewForkGraphDisk(anchorState, afero.NewMemMapFs())) + genesisState, err := initial_state.GetGenesisState(clparams.MainnetNetwork) + require.NoError(t, err) + + emitters := beaconevents.NewEmitters() + _, beaconConfig := clparams.GetConfigsByNetwork(clparams.MainnetNetwork) + ethClock := eth_clock.NewEthereumClock(genesisState.GenesisTime(), genesisState.GenesisValidatorsRoot(), beaconConfig) + blobStorage := blob_storage.NewBlobStore(memdb.New("/tmp"), afero.NewMemMapFs(), math.MaxUint64, &clparams.MainnetBeaconConfig, ethClock) + + forkStore, err := forkchoice.NewForkChoiceStore(ethClock, anchorState, nil, pool.NewOperationsPool(&clparams.MainnetBeaconConfig), fork_graph.NewForkGraphDisk(anchorState, afero.NewMemMapFs(), beacon_router_configuration.RouterConfiguration{}), emitters, synced_data.NewSyncedDataManager(true, &clparams.MainnetBeaconConfig), blobStorage) require.NoError(t, err) forkStore.SetSynced(true) @@ -186,7 +218,37 @@ func (b *ForkChoice) Run(t *testing.T, root fs.FS, c spectest.TestCase) (err err blk := cltypes.NewSignedBeaconBlock(anchorState.BeaconConfig()) err := spectest.ReadSsz(root, c.Version(), step.GetBlock()+".ssz_snappy", blk) require.NoError(t, err, stepstr) - err = forkStore.OnBlock(blk, true, true) + blobs := solid.NewStaticListSSZ[*cltypes.Blob](6, len(cltypes.Blob{})) + if step.GetBlobs() != "" { + err := spectest.ReadSsz(root, c.Version(), step.GetBlobs()+".ssz_snappy", blobs) + require.NoError(t, err, stepstr) + if step.GetValid() { + require.False(t, len(step.Proofs) != blobs.Len() || len(step.Proofs) != blk.Block.Body.BlobKzgCommitments.Len(), "invalid number of proofs") + } else { + if len(step.Proofs) != blobs.Len() || len(step.Proofs) != blk.Block.Body.BlobKzgCommitments.Len() { + continue + } + } + blobSidecarService := services.NewBlobSidecarService(ctx, &clparams.MainnetBeaconConfig, forkStore, nil, ethClock, true) + + blobs.Range(func(index int, value *cltypes.Blob, length int) bool { + var proof libcommon.Bytes48 + proofStr := step.Proofs[index] + proofBytes := common.Hex2Bytes(proofStr[2:]) + copy(proof[:], proofBytes) + err = blobSidecarService.ProcessMessage(ctx, nil, &cltypes.BlobSidecar{ + Index: uint64(index), + SignedBlockHeader: blk.SignedBeaconBlockHeader(), + Blob: *value, + KzgCommitment: common.Bytes48(*blk.Block.Body.BlobKzgCommitments.Get(index)), + KzgProof: proof, + }) + return true + }) + + } + + err = forkStore.OnBlock(ctx, blk, true, true, true) if step.GetValid() { require.NoError(t, err, stepstr) } else { diff --git a/cl/spectest/consensus_tests/rewards.go b/cl/spectest/consensus_tests/rewards.go index 15c3460d813..862ac65eb15 100644 --- a/cl/spectest/consensus_tests/rewards.go +++ b/cl/spectest/consensus_tests/rewards.go @@ -1,9 +1,10 @@ package consensus_tests import ( - "github.com/ledgerwatch/erigon/spectest" "io/fs" "testing" + + "github.com/ledgerwatch/erigon/spectest" ) type RewardsCore struct { @@ -11,7 +12,6 @@ type RewardsCore struct { func (b *RewardsCore) Run(t *testing.T, root fs.FS, c spectest.TestCase) (err error) { t.Skipf("Skippinf attestation reward calculation tests for now") - //TODO: we should find some way to pass these //preState, err := spectest.ReadBeaconState(root, c.Version(), spectest.PreSsz) //require.NoError(t, err) diff --git a/cl/spectest/consensus_tests/ssz_static.go b/cl/spectest/consensus_tests/ssz_static.go index a1512837d44..6a24727a9a1 100644 --- a/cl/spectest/consensus_tests/ssz_static.go +++ b/cl/spectest/consensus_tests/ssz_static.go @@ -2,6 +2,7 @@ package consensus_tests import ( "bytes" + "encoding/json" "io/fs" "testing" @@ -9,6 +10,7 @@ import ( "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" "github.com/ledgerwatch/erigon/cl/persistence/format/snapshot_format" "github.com/ledgerwatch/erigon/cl/phase1/core/state" @@ -53,6 +55,7 @@ func getSSZStaticConsensusTest[T unmarshalerMarshalerHashable](ref T) spectest.H if err := object.DecodeSSZ(encoded, int(c.Version())); err != nil && !isBeaconState { return err } + haveRoot, err := object.HashSSZ() require.NoError(t, err) require.EqualValues(t, expectedRoot, haveRoot) @@ -81,6 +84,25 @@ func getSSZStaticConsensusTest[T unmarshalerMarshalerHashable](ref T) spectest.H require.NoError(t, err) require.EqualValues(t, expectedRoot, haveRoot) } + if _, ok := object.(solid.Checkpoint); ok { + return nil + } + if _, ok := object.(solid.AttestationData); ok { + return nil + } + if _, ok := object.(solid.Validator); ok { + return nil + } + + obj2 := object.Clone() + // test json + jsonBlock, err := json.Marshal(object) + require.NoError(t, err) + require.NoError(t, json.Unmarshal(jsonBlock, obj2)) + + haveRoot, err = obj2.(unmarshalerMarshalerHashable).HashSSZ() + require.NoError(t, err) + require.Equal(t, expectedRoot, libcommon.Hash(haveRoot)) return nil }) diff --git a/cl/transition/impl/eth2/operations.go b/cl/transition/impl/eth2/operations.go index fd570038fe5..84e2b09e915 100644 --- a/cl/transition/impl/eth2/operations.go +++ b/cl/transition/impl/eth2/operations.go @@ -4,14 +4,14 @@ import ( "bytes" "errors" "fmt" - "reflect" + "slices" "time" "github.com/ledgerwatch/erigon-lib/metrics" + "github.com/ledgerwatch/erigon/cl/abstract" "github.com/ledgerwatch/erigon/cl/transition/impl/eth2/statechange" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/cltypes/solid" @@ -24,10 +24,12 @@ import ( "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/fork" "github.com/ledgerwatch/erigon/cl/utils" - "github.com/ledgerwatch/erigon/core/types" ) -func (I *impl) ProcessProposerSlashing(s abstract.BeaconState, propSlashing *cltypes.ProposerSlashing) error { +func (I *impl) ProcessProposerSlashing( + s abstract.BeaconState, + propSlashing *cltypes.ProposerSlashing, +) error { h1 := propSlashing.Header1.Header h2 := propSlashing.Header2.Header @@ -36,7 +38,11 @@ func (I *impl) ProcessProposerSlashing(s abstract.BeaconState, propSlashing *clt } if h1.ProposerIndex != h2.ProposerIndex { - return fmt.Errorf("non-matching proposer indices proposer slashing: %d != %d", h1.ProposerIndex, h2.ProposerIndex) + return fmt.Errorf( + "non-matching proposer indices proposer slashing: %d != %d", + h1.ProposerIndex, + h2.ProposerIndex, + ) } if *h1 == *h2 { @@ -52,7 +58,10 @@ func (I *impl) ProcessProposerSlashing(s abstract.BeaconState, propSlashing *clt } for _, signedHeader := range []*cltypes.SignedBeaconBlockHeader{propSlashing.Header1, propSlashing.Header2} { - domain, err := s.GetDomain(s.BeaconConfig().DomainBeaconProposer, state.GetEpochAtSlot(s.BeaconConfig(), signedHeader.Header.Slot)) + domain, err := s.GetDomain( + s.BeaconConfig().DomainBeaconProposer, + state.GetEpochAtSlot(s.BeaconConfig(), signedHeader.Header.Slot), + ) if err != nil { return fmt.Errorf("unable to get domain: %v", err) } @@ -66,7 +75,12 @@ func (I *impl) ProcessProposerSlashing(s abstract.BeaconState, propSlashing *clt return fmt.Errorf("unable to verify signature: %v", err) } if !valid { - return fmt.Errorf("invalid signature: signature %v, root %v, pubkey %v", signedHeader.Signature[:], signingRoot[:], pk) + return fmt.Errorf( + "invalid signature: signature %v, root %v, pubkey %v", + signedHeader.Signature[:], + signingRoot[:], + pk, + ) } } @@ -78,7 +92,10 @@ func (I *impl) ProcessProposerSlashing(s abstract.BeaconState, propSlashing *clt return err } -func (I *impl) ProcessAttesterSlashing(s abstract.BeaconState, attSlashing *cltypes.AttesterSlashing) error { +func (I *impl) ProcessAttesterSlashing( + s abstract.BeaconState, + attSlashing *cltypes.AttesterSlashing, +) error { att1 := attSlashing.Attestation_1 att2 := attSlashing.Attestation_2 @@ -163,7 +180,11 @@ func (I *impl) ProcessDeposit(s abstract.BeaconState, deposit *cltypes.Deposit) validatorIndex, has := s.ValidatorIndexByPubkey(publicKey) if !has { // Agnostic domain. - domain, err := fork.ComputeDomain(s.BeaconConfig().DomainDeposit[:], utils.Uint32ToBytes4(s.BeaconConfig().GenesisForkVersion), [32]byte{}) + domain, err := fork.ComputeDomain( + s.BeaconConfig().DomainDeposit[:], + utils.Uint32ToBytes4(uint32(s.BeaconConfig().GenesisForkVersion)), + [32]byte{}, + ) if err != nil { return err } @@ -193,10 +214,7 @@ func (I *impl) ProcessDeposit(s abstract.BeaconState, deposit *cltypes.Deposit) return state.IncreaseBalance(s, validatorIndex, amount) } -// ProcessVoluntaryExit takes a voluntary exit and applies state transition. -func (I *impl) ProcessVoluntaryExit(s abstract.BeaconState, signedVoluntaryExit *cltypes.SignedVoluntaryExit) error { - // Sanity checks so that we know it is good. - voluntaryExit := signedVoluntaryExit.VoluntaryExit +func IsVoluntaryExitApplicable(s abstract.BeaconState, voluntaryExit *cltypes.VoluntaryExit) error { currentEpoch := state.Epoch(s) validator, err := s.ValidatorForValidatorIndex(int(voluntaryExit.ValidatorIndex)) if err != nil { @@ -206,7 +224,9 @@ func (I *impl) ProcessVoluntaryExit(s abstract.BeaconState, signedVoluntaryExit return errors.New("ProcessVoluntaryExit: validator is not active") } if validator.ExitEpoch() != s.BeaconConfig().FarFutureEpoch { - return errors.New("ProcessVoluntaryExit: another exit for the same validator is already getting processed") + return errors.New( + "ProcessVoluntaryExit: another exit for the same validator is already getting processed", + ) } if currentEpoch < voluntaryExit.Epoch { return errors.New("ProcessVoluntaryExit: exit is happening in the future") @@ -214,6 +234,24 @@ func (I *impl) ProcessVoluntaryExit(s abstract.BeaconState, signedVoluntaryExit if currentEpoch < validator.ActivationEpoch()+s.BeaconConfig().ShardCommitteePeriod { return errors.New("ProcessVoluntaryExit: exit is happening too fast") } + return nil +} + +// ProcessVoluntaryExit takes a voluntary exit and applies state transition. +func (I *impl) ProcessVoluntaryExit( + s abstract.BeaconState, + signedVoluntaryExit *cltypes.SignedVoluntaryExit, +) error { + // Sanity checks so that we know it is good. + voluntaryExit := signedVoluntaryExit.VoluntaryExit + err := IsVoluntaryExitApplicable(s, voluntaryExit) + if err != nil { + return err + } + validator, err := s.ValidatorForValidatorIndex(int(voluntaryExit.ValidatorIndex)) + if err != nil { + return err + } // We can skip it in some instances if we want to optimistically sync up. if I.FullValidation { @@ -221,7 +259,7 @@ func (I *impl) ProcessVoluntaryExit(s abstract.BeaconState, signedVoluntaryExit if s.Version() < clparams.DenebVersion { domain, err = s.GetDomain(s.BeaconConfig().DomainVoluntaryExit, voluntaryExit.Epoch) } else if s.Version() >= clparams.DenebVersion { - domain, err = fork.ComputeDomain(s.BeaconConfig().DomainVoluntaryExit[:], utils.Uint32ToBytes4(s.BeaconConfig().CapellaForkVersion), s.GenesisValidatorsRoot()) + domain, err = fork.ComputeDomain(s.BeaconConfig().DomainVoluntaryExit[:], utils.Uint32ToBytes4(uint32(s.BeaconConfig().CapellaForkVersion)), s.GenesisValidatorsRoot()) } if err != nil { return err @@ -245,7 +283,10 @@ func (I *impl) ProcessVoluntaryExit(s abstract.BeaconState, signedVoluntaryExit // ProcessWithdrawals processes withdrawals by decreasing the balance of each validator // and updating the next withdrawal index and validator index. -func (I *impl) ProcessWithdrawals(s abstract.BeaconState, withdrawals *solid.ListSSZ[*cltypes.Withdrawal]) error { +func (I *impl) ProcessWithdrawals( + s abstract.BeaconState, + withdrawals *solid.ListSSZ[*cltypes.Withdrawal], +) error { // Get the list of withdrawals, the expected withdrawals (if performing full validation), // and the beacon configuration. beaconConfig := s.BeaconConfig() @@ -253,9 +294,13 @@ func (I *impl) ProcessWithdrawals(s abstract.BeaconState, withdrawals *solid.Lis // Check if full validation is required and verify expected withdrawals. if I.FullValidation { - expectedWithdrawals := state.ExpectedWithdrawals(s) + expectedWithdrawals := state.ExpectedWithdrawals(s, state.Epoch(s)) if len(expectedWithdrawals) != withdrawals.Len() { - return fmt.Errorf("ProcessWithdrawals: expected %d withdrawals, but got %d", len(expectedWithdrawals), withdrawals.Len()) + return fmt.Errorf( + "ProcessWithdrawals: expected %d withdrawals, but got %d", + len(expectedWithdrawals), + withdrawals.Len(), + ) } if err := solid.RangeErr[*cltypes.Withdrawal](withdrawals, func(i int, w *cltypes.Withdrawal, _ int) error { if *expectedWithdrawals[i] != *w { @@ -302,7 +347,11 @@ func (I *impl) ProcessExecutionPayload(s abstract.BeaconState, payload *cltypes. } } if payload.PrevRandao != s.GetRandaoMixes(state.Epoch(s)) { - return fmt.Errorf("ProcessExecutionPayload: randao mix mismatches with mix digest") + return fmt.Errorf( + "ProcessExecutionPayload: randao mix mismatches with mix digest, expected %x, got %x", + s.GetRandaoMixes(state.Epoch(s)), + payload.PrevRandao, + ) } if payload.Time != state.ComputeTimestampAtSlot(s, s.Slot()) { return fmt.Errorf("ProcessExecutionPayload: invalid Eth1 timestamp") @@ -323,7 +372,12 @@ func (I *impl) ProcessSyncAggregate(s abstract.BeaconState, sync *cltypes.SyncAg if I.FullValidation { previousSlot := s.PreviousSlot() - domain, err := fork.Domain(s.Fork(), state.GetEpochAtSlot(s.BeaconConfig(), previousSlot), s.BeaconConfig().DomainSyncCommittee, s.GenesisValidatorsRoot()) + domain, err := fork.Domain( + s.Fork(), + state.GetEpochAtSlot(s.BeaconConfig(), previousSlot), + s.BeaconConfig().DomainSyncCommittee, + s.GenesisValidatorsRoot(), + ) if err != nil { return nil } @@ -346,7 +400,10 @@ func (I *impl) ProcessSyncAggregate(s abstract.BeaconState, sync *cltypes.SyncAg // processSyncAggregate applies all the logic in the spec function `process_sync_aggregate` except // verifying the BLS signatures. It returns the modified beacons state and the list of validators' // public keys that voted, for future signature verification. -func (I *impl) processSyncAggregate(s abstract.BeaconState, sync *cltypes.SyncAggregate) ([][]byte, error) { +func (I *impl) processSyncAggregate( + s abstract.BeaconState, + sync *cltypes.SyncAggregate, +) ([][]byte, error) { currentSyncCommittee := s.CurrentSyncCommittee() if currentSyncCommittee == nil { @@ -376,7 +433,10 @@ func (I *impl) processSyncAggregate(s abstract.BeaconState, sync *cltypes.SyncAg vIdx, exists := s.ValidatorIndexByPubkey(committeeKeys[currPubKeyIndex]) // Impossible scenario. if !exists { - return nil, fmt.Errorf("validator public key does not exist in state: %x", committeeKeys[currPubKeyIndex]) + return nil, fmt.Errorf( + "validator public key does not exist in state: %x", + committeeKeys[currPubKeyIndex], + ) } if syncAggregateBits[i]&byte(bit) > 0 { votedKeys = append(votedKeys, committeeKeys[currPubKeyIndex][:]) @@ -400,7 +460,10 @@ func (I *impl) processSyncAggregate(s abstract.BeaconState, sync *cltypes.SyncAg } // ProcessBlsToExecutionChange processes a BLSToExecutionChange message by updating a validator's withdrawal credentials. -func (I *impl) ProcessBlsToExecutionChange(s abstract.BeaconState, signedChange *cltypes.SignedBLSToExecutionChange) error { +func (I *impl) ProcessBlsToExecutionChange( + s abstract.BeaconState, + signedChange *cltypes.SignedBLSToExecutionChange, +) error { change := signedChange.Message beaconConfig := s.BeaconConfig() @@ -413,7 +476,7 @@ func (I *impl) ProcessBlsToExecutionChange(s abstract.BeaconState, signedChange wc := validator.WithdrawalCredentials() if I.FullValidation { // Check the validator's withdrawal credentials prefix. - if wc[0] != beaconConfig.BLSWithdrawalPrefixByte { + if wc[0] != byte(beaconConfig.BLSWithdrawalPrefixByte) { return fmt.Errorf("invalid withdrawal credentials prefix") } @@ -424,7 +487,11 @@ func (I *impl) ProcessBlsToExecutionChange(s abstract.BeaconState, signedChange } // Compute the signing domain and verify the message signature. - domain, err := fork.ComputeDomain(beaconConfig.DomainBLSToExecutionChange[:], utils.Uint32ToBytes4(beaconConfig.GenesisForkVersion), s.GenesisValidatorsRoot()) + domain, err := fork.ComputeDomain( + beaconConfig.DomainBLSToExecutionChange[:], + utils.Uint32ToBytes4(uint32(beaconConfig.GenesisForkVersion)), + s.GenesisValidatorsRoot(), + ) if err != nil { return err } @@ -442,7 +509,7 @@ func (I *impl) ProcessBlsToExecutionChange(s abstract.BeaconState, signedChange } credentials := wc // Reset the validator's withdrawal credentials. - credentials[0] = beaconConfig.ETH1AddressWithdrawalPrefixByte + credentials[0] = byte(beaconConfig.ETH1AddressWithdrawalPrefixByte) copy(credentials[1:], make([]byte, 11)) copy(credentials[12:], change.To[:]) @@ -451,40 +518,10 @@ func (I *impl) ProcessBlsToExecutionChange(s abstract.BeaconState, signedChange return nil } -func (I *impl) VerifyKzgCommitmentsAgainstTransactions(transactions *solid.TransactionsSSZ, kzgCommitments *solid.ListSSZ[*cltypes.KZGCommitment]) (bool, error) { - if I.FullValidation { - return true, nil - } - allVersionedHashes := []common.Hash{} - transactions.ForEach(func(tx []byte, idx, total int) bool { - if tx[0] != types.BlobTxType { - return true - } - - allVersionedHashes = append(allVersionedHashes, txPeekBlobVersionedHashes(tx)...) - return true - }) - - commitmentVersionedHash := []common.Hash{} - var err error - var versionedHash common.Hash - kzgCommitments.Range(func(index int, value *cltypes.KZGCommitment, length int) bool { - versionedHash, err = kzgCommitmentToVersionedHash(value) - if err != nil { - return false - } - - commitmentVersionedHash = append(commitmentVersionedHash, versionedHash) - return true - }) - if err != nil { - return false, err - } - - return reflect.DeepEqual(allVersionedHashes, commitmentVersionedHash), nil -} - -func (I *impl) ProcessAttestations(s abstract.BeaconState, attestations *solid.ListSSZ[*solid.Attestation]) error { +func (I *impl) ProcessAttestations( + s abstract.BeaconState, + attestations *solid.ListSSZ[*solid.Attestation], +) error { attestingIndiciesSet := make([][]uint64, attestations.Len()) h := metrics.NewHistTimer("beacon_process_attestations") baseRewardPerIncrement := s.BaseRewardPerIncrement() @@ -519,7 +556,11 @@ func (I *impl) ProcessAttestations(s abstract.BeaconState, attestations *solid.L return nil } -func (I *impl) processAttestationPostAltair(s abstract.BeaconState, attestation *solid.Attestation, baseRewardPerIncrement uint64) ([]uint64, error) { +func (I *impl) processAttestationPostAltair( + s abstract.BeaconState, + attestation *solid.Attestation, + baseRewardPerIncrement uint64, +) ([]uint64, error) { data := attestation.AttestantionData() currentEpoch := state.Epoch(s) stateSlot := s.Slot() @@ -528,7 +569,11 @@ func (I *impl) processAttestationPostAltair(s abstract.BeaconState, attestation h := metrics.NewHistTimer("beacon_process_attestation_post_altair") c := h.Tag("step", "get_participation_flag") - participationFlagsIndicies, err := s.GetAttestationParticipationFlagIndicies(data, stateSlot-data.Slot(), false) + participationFlagsIndicies, err := s.GetAttestationParticipationFlagIndicies( + data, + stateSlot-data.Slot(), + false, + ) if err != nil { return nil, err } @@ -556,11 +601,19 @@ func (I *impl) processAttestationPostAltair(s abstract.BeaconState, attestation baseReward := (val / beaconConfig.EffectiveBalanceIncrement) * baseRewardPerIncrement for flagIndex, weight := range beaconConfig.ParticipationWeights() { - flagParticipation := s.EpochParticipationForValidatorIndex(isCurrentEpoch, int(attesterIndex)) - if !slices.Contains(participationFlagsIndicies, uint8(flagIndex)) || flagParticipation.HasFlag(flagIndex) { + flagParticipation := s.EpochParticipationForValidatorIndex( + isCurrentEpoch, + int(attesterIndex), + ) + if !slices.Contains(participationFlagsIndicies, uint8(flagIndex)) || + flagParticipation.HasFlag(flagIndex) { continue } - s.SetEpochParticipationForValidatorIndex(isCurrentEpoch, int(attesterIndex), flagParticipation.Add(flagIndex)) + s.SetEpochParticipationForValidatorIndex( + isCurrentEpoch, + int(attesterIndex), + flagParticipation.Add(flagIndex), + ) proposerRewardNumerator += baseReward * weight } } @@ -581,9 +634,12 @@ func (I *impl) processAttestationPostAltair(s abstract.BeaconState, attestation } // processAttestationsPhase0 implements the rules for phase0 processing. -func (I *impl) processAttestationPhase0(s abstract.BeaconState, attestation *solid.Attestation) ([]uint64, error) { +func (I *impl) processAttestationPhase0( + s abstract.BeaconState, + attestation *solid.Attestation, +) ([]uint64, error) { data := attestation.AttestantionData() - committee, err := s.GetBeaconCommitee(data.Slot(), data.ValidatorIndex()) + committee, err := s.GetBeaconCommitee(data.Slot(), data.CommitteeIndex()) if err != nil { return nil, err } @@ -618,7 +674,11 @@ func (I *impl) processAttestationPhase0(s abstract.BeaconState, attestation *sol s.AddPreviousEpochAttestation(pendingAttestation) } // Not required by specs but needed if we want performant epoch transition. - indicies, err := s.GetAttestingIndicies(attestation.AttestantionData(), attestation.AggregationBits(), true) + indicies, err := s.GetAttestingIndicies( + attestation.AttestantionData(), + attestation.AggregationBits(), + true, + ) if err != nil { return nil, err } @@ -632,12 +692,16 @@ func (I *impl) processAttestationPhase0(s abstract.BeaconState, attestation *sol } // Basically we flag all validators we are currently attesting. will be important for rewards/finalization processing. for _, index := range indicies { - minCurrentInclusionDelayAttestation, err := s.ValidatorMinCurrentInclusionDelayAttestation(int(index)) + minCurrentInclusionDelayAttestation, err := s.ValidatorMinCurrentInclusionDelayAttestation( + int(index), + ) if err != nil { return nil, err } - minPreviousInclusionDelayAttestation, err := s.ValidatorMinPreviousInclusionDelayAttestation(int(index)) + minPreviousInclusionDelayAttestation, err := s.ValidatorMinPreviousInclusionDelayAttestation( + int(index), + ) if err != nil { return nil, err } @@ -691,25 +755,40 @@ func (I *impl) processAttestationPhase0(s abstract.BeaconState, attestation *sol return indicies, nil } -// ProcessAttestation takes an attestation and process it. -func (I *impl) processAttestation(s abstract.BeaconState, attestation *solid.Attestation, baseRewardPerIncrement uint64) ([]uint64, error) { +func IsAttestationApplicable(s abstract.BeaconState, attestation *solid.Attestation) error { data := attestation.AttestantionData() currentEpoch := state.Epoch(s) previousEpoch := state.PreviousEpoch(s) stateSlot := s.Slot() beaconConfig := s.BeaconConfig() // Prelimary checks. - if (data.Target().Epoch() != currentEpoch && data.Target().Epoch() != previousEpoch) || data.Target().Epoch() != state.GetEpochAtSlot(s.BeaconConfig(), data.Slot()) { - return nil, errors.New("ProcessAttestation: attestation with invalid epoch") + if (data.Target().Epoch() != currentEpoch && data.Target().Epoch() != previousEpoch) || + data.Target().Epoch() != state.GetEpochAtSlot(s.BeaconConfig(), data.Slot()) { + return errors.New("ProcessAttestation: attestation with invalid epoch") + } + if s.Version() < clparams.DenebVersion && + ((data.Slot()+beaconConfig.MinAttestationInclusionDelay > stateSlot) || (stateSlot > data.Slot()+beaconConfig.SlotsPerEpoch)) { + return errors.New("ProcessAttestation: attestation slot not in range") } - if s.Version() < clparams.DenebVersion && ((data.Slot()+beaconConfig.MinAttestationInclusionDelay > stateSlot) || (stateSlot > data.Slot()+beaconConfig.SlotsPerEpoch)) { - return nil, errors.New("ProcessAttestation: attestation slot not in range") + if s.Version() >= clparams.DenebVersion && + data.Slot()+beaconConfig.MinAttestationInclusionDelay > stateSlot { + return errors.New("ProcessAttestation: attestation slot not in range") } - if s.Version() >= clparams.DenebVersion && data.Slot()+beaconConfig.MinAttestationInclusionDelay > stateSlot { - return nil, errors.New("ProcessAttestation: attestation slot not in range") + if data.CommitteeIndex() >= s.CommitteeCount(data.Target().Epoch()) { + return errors.New("ProcessAttestation: attester index out of range") } - if data.ValidatorIndex() >= s.CommitteeCount(data.Target().Epoch()) { - return nil, errors.New("ProcessAttestation: attester index out of range") + return nil +} + +// ProcessAttestation takes an attestation and process it. +func (I *impl) processAttestation( + s abstract.BeaconState, + attestation *solid.Attestation, + baseRewardPerIncrement uint64, +) ([]uint64, error) { + // Prelimary checks. + if err := IsAttestationApplicable(s, attestation); err != nil { + return nil, err } // check if we need to use rules for phase0 or post-altair. if s.Version() == clparams.Phase0Version { @@ -718,7 +797,11 @@ func (I *impl) processAttestation(s abstract.BeaconState, attestation *solid.Att return I.processAttestationPostAltair(s, attestation, baseRewardPerIncrement) } -func verifyAttestations(s abstract.BeaconState, attestations *solid.ListSSZ[*solid.Attestation], attestingIndicies [][]uint64) (bool, error) { +func verifyAttestations( + s abstract.BeaconState, + attestations *solid.ListSSZ[*solid.Attestation], + attestingIndicies [][]uint64, +) (bool, error) { indexedAttestations := make([]*cltypes.IndexedAttestation, 0, attestations.Len()) commonBuffer := make([]byte, 8*2048) attestations.Range(func(idx int, a *solid.Attestation, _ int) bool { @@ -738,7 +821,10 @@ type indexedAttestationVerificationResult struct { } // Concurrent verification of BLS. -func batchVerifyAttestations(s abstract.BeaconState, indexedAttestations []*cltypes.IndexedAttestation) (valid bool, err error) { +func batchVerifyAttestations( + s abstract.BeaconState, + indexedAttestations []*cltypes.IndexedAttestation, +) (valid bool, err error) { c := make(chan indexedAttestationVerificationResult, 1) for idx := range indexedAttestations { @@ -767,14 +853,22 @@ func (I *impl) ProcessBlockHeader(s abstract.BeaconState, block *cltypes.BeaconB return fmt.Errorf("state slot: %d, not equal to block slot: %d", s.Slot(), block.Slot) } if block.Slot <= s.LatestBlockHeader().Slot { - return fmt.Errorf("slock slot: %d, not greater than latest block slot: %d", block.Slot, s.LatestBlockHeader().Slot) + return fmt.Errorf( + "slock slot: %d, not greater than latest block slot: %d", + block.Slot, + s.LatestBlockHeader().Slot, + ) } propInd, err := s.GetBeaconProposerIndex() if err != nil { return fmt.Errorf("error in GetBeaconProposerIndex: %v", err) } if block.ProposerIndex != propInd { - return fmt.Errorf("block proposer index: %d, does not match beacon proposer index: %d", block.ProposerIndex, propInd) + return fmt.Errorf( + "block proposer index: %d, does not match beacon proposer index: %d", + block.ProposerIndex, + propInd, + ) } blockHeader := s.LatestBlockHeader() latestRoot, err := (&blockHeader).HashSSZ() @@ -782,7 +876,11 @@ func (I *impl) ProcessBlockHeader(s abstract.BeaconState, block *cltypes.BeaconB return fmt.Errorf("unable to hash tree root of latest block header: %v", err) } if block.ParentRoot != latestRoot { - return fmt.Errorf("block parent root: %x, does not match latest block root: %x", block.ParentRoot, latestRoot) + return fmt.Errorf( + "block parent root: %x, does not match latest block root: %x", + block.ParentRoot, + latestRoot, + ) } bodyRoot, err := block.Body.HashSSZ() @@ -824,10 +922,21 @@ func (I *impl) ProcessRandao(s abstract.BeaconState, randao [96]byte, proposerIn pk := proposer.PublicKey() valid, err := bls.Verify(randao[:], signingRoot[:], pk[:]) if err != nil { - return fmt.Errorf("ProcessRandao: unable to verify public key: %x, with signing root: %x, and signature: %x, %v", pk[:], signingRoot[:], randao[:], err) + return fmt.Errorf( + "ProcessRandao: unable to verify public key: %x, with signing root: %x, and signature: %x, %v", + pk[:], + signingRoot[:], + randao[:], + err, + ) } if !valid { - return fmt.Errorf("ProcessRandao: invalid signature: public key: %x, signing root: %x, signature: %x", pk[:], signingRoot[:], randao[:]) + return fmt.Errorf( + "ProcessRandao: invalid signature: public key: %x, signing root: %x, signature: %x", + pk[:], + signingRoot[:], + randao[:], + ) } } @@ -878,7 +987,13 @@ func (I *impl) ProcessSlots(s abstract.BeaconState, slot uint64) error { if err := statechange.ProcessEpoch(s); err != nil { return err } - log.Trace("Processed new epoch successfully", "epoch", state.Epoch(s), "process_epoch_elpsed", time.Since(start)) + log.Trace( + "Processed new epoch successfully", + "epoch", + state.Epoch(s), + "process_epoch_elpsed", + time.Since(start), + ) } sSlot += 1 diff --git a/cl/transition/impl/eth2/utils.go b/cl/transition/impl/eth2/utils.go index 13078d7d076..88ebbb6f9fd 100644 --- a/cl/transition/impl/eth2/utils.go +++ b/cl/transition/impl/eth2/utils.go @@ -6,58 +6,9 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cl/abstract" - "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/utils" - "github.com/ledgerwatch/erigon/core/types" ) -const VERSIONED_HASH_VERSION_KZG byte = byte(1) - -func kzgCommitmentToVersionedHash(kzgCommitment *cltypes.KZGCommitment) (libcommon.Hash, error) { - versionedHash := [32]byte{} - kzgCommitmentHash := utils.Sha256(kzgCommitment[:]) - - buf := append([]byte{}, VERSIONED_HASH_VERSION_KZG) - buf = append(buf, kzgCommitmentHash[1:]...) - copy(versionedHash[:], buf) - - return versionedHash, nil -} - -func txPeekBlobVersionedHashes(txBytes []byte) []libcommon.Hash { - if txBytes[0] != types.BlobTxType { - return []libcommon.Hash{} - } - - messageOffset := 1 + binary.LittleEndian.Uint32(txBytes[1:5]) - - /* - https://gist.github.com/protolambda/23bd106b66f6d4bb854ce46044aa3ca3 - chain_id: 32 bytes - nonce: 8 bytes - priority_fee_per_gas: 32 bytes - max_basefee_per_gas: 32 bytes - gas: 8 bytes - to: 4 bytes - offset to B (relative to A) - value: 32 bytes - data: 4 bytes - offset to C (relative to A) - access_list: 4 bytes - offset to D (relative to A) - max_fee_per_blob_gas: 32 bytes - blob_versioned_hashes: 4 bytes - offset to E (relative to A) - */ - // field offset: 32 + 8 + 32 + 32 + 8 + 4 + 32 + 4 + 4 + 32 = 188 - blobVersionedHashes := messageOffset + binary.LittleEndian.Uint32(txBytes[messageOffset+188:messageOffset+192]) - - versionedHashes := make([]libcommon.Hash, len(txBytes[blobVersionedHashes:])/32) - for pos, i := blobVersionedHashes, 0; int(pos) < len(txBytes) && i < len(versionedHashes); pos += 32 { - versionedHash := libcommon.BytesToHash(txBytes[pos : pos+32]) - versionedHashes[i] = versionedHash - i++ - } - - return versionedHashes -} - func computeSigningRootEpoch(epoch uint64, domain []byte) (libcommon.Hash, error) { b := make([]byte, 32) binary.LittleEndian.PutUint64(b, epoch) diff --git a/cl/transition/impl/eth2/validation.go b/cl/transition/impl/eth2/validation.go index 8930134b8f2..7153a1f1c11 100644 --- a/cl/transition/impl/eth2/validation.go +++ b/cl/transition/impl/eth2/validation.go @@ -19,7 +19,7 @@ func (I *impl) VerifyTransition(s abstract.BeaconState, currentBlock *cltypes.Be return fmt.Errorf("unable to generate state root: %v", err) } if expectedStateRoot != currentBlock.StateRoot { - return fmt.Errorf("expected state root differs from received state root") + return fmt.Errorf("expected state root differs from received state root, slot %d", currentBlock.Slot) } return nil } diff --git a/cl/transition/impl/funcmap/impl.go b/cl/transition/impl/funcmap/impl.go index 073ef35fbce..9dfad4b82af 100644 --- a/cl/transition/impl/funcmap/impl.go +++ b/cl/transition/impl/funcmap/impl.go @@ -10,22 +10,21 @@ import ( var _ machine.Interface = (*Impl)(nil) type Impl struct { - FnVerifyBlockSignature func(s abstract.BeaconState, block *cltypes.SignedBeaconBlock) error - FnVerifyTransition func(s abstract.BeaconState, block *cltypes.BeaconBlock) error - FnProcessSlots func(s abstract.BeaconState, slot uint64) error - FnProcessBlockHeader func(s abstract.BeaconState, block *cltypes.BeaconBlock) error - FnProcessWithdrawals func(s abstract.BeaconState, withdrawals *solid.ListSSZ[*cltypes.Withdrawal]) error - FnProcessExecutionPayload func(s abstract.BeaconState, payload *cltypes.Eth1Block) error - FnProcessRandao func(s abstract.BeaconState, randao [96]byte, proposerIndex uint64) error - FnProcessEth1Data func(state abstract.BeaconState, eth1Data *cltypes.Eth1Data) error - FnProcessSyncAggregate func(s abstract.BeaconState, sync *cltypes.SyncAggregate) error - FnVerifyKzgCommitmentsAgainstTransactions func(transactions *solid.TransactionsSSZ, kzgCommitments *solid.ListSSZ[*cltypes.KZGCommitment]) (bool, error) - FnProcessProposerSlashing func(s abstract.BeaconState, propSlashing *cltypes.ProposerSlashing) error - FnProcessAttesterSlashing func(s abstract.BeaconState, attSlashing *cltypes.AttesterSlashing) error - FnProcessAttestations func(s abstract.BeaconState, attestations *solid.ListSSZ[*solid.Attestation]) error - FnProcessDeposit func(s abstract.BeaconState, deposit *cltypes.Deposit) error - FnProcessVoluntaryExit func(s abstract.BeaconState, signedVoluntaryExit *cltypes.SignedVoluntaryExit) error - FnProcessBlsToExecutionChange func(state abstract.BeaconState, signedChange *cltypes.SignedBLSToExecutionChange) error + FnVerifyBlockSignature func(s abstract.BeaconState, block *cltypes.SignedBeaconBlock) error + FnVerifyTransition func(s abstract.BeaconState, block *cltypes.BeaconBlock) error + FnProcessSlots func(s abstract.BeaconState, slot uint64) error + FnProcessBlockHeader func(s abstract.BeaconState, block *cltypes.BeaconBlock) error + FnProcessWithdrawals func(s abstract.BeaconState, withdrawals *solid.ListSSZ[*cltypes.Withdrawal]) error + FnProcessExecutionPayload func(s abstract.BeaconState, payload *cltypes.Eth1Block) error + FnProcessRandao func(s abstract.BeaconState, randao [96]byte, proposerIndex uint64) error + FnProcessEth1Data func(state abstract.BeaconState, eth1Data *cltypes.Eth1Data) error + FnProcessSyncAggregate func(s abstract.BeaconState, sync *cltypes.SyncAggregate) error + FnProcessProposerSlashing func(s abstract.BeaconState, propSlashing *cltypes.ProposerSlashing) error + FnProcessAttesterSlashing func(s abstract.BeaconState, attSlashing *cltypes.AttesterSlashing) error + FnProcessAttestations func(s abstract.BeaconState, attestations *solid.ListSSZ[*solid.Attestation]) error + FnProcessDeposit func(s abstract.BeaconState, deposit *cltypes.Deposit) error + FnProcessVoluntaryExit func(s abstract.BeaconState, signedVoluntaryExit *cltypes.SignedVoluntaryExit) error + FnProcessBlsToExecutionChange func(state abstract.BeaconState, signedChange *cltypes.SignedBLSToExecutionChange) error } func (i Impl) VerifyBlockSignature(s abstract.BeaconState, block *cltypes.SignedBeaconBlock) error { @@ -60,10 +59,6 @@ func (i Impl) ProcessSyncAggregate(s abstract.BeaconState, sync *cltypes.SyncAgg return i.FnProcessSyncAggregate(s, sync) } -func (i Impl) VerifyKzgCommitmentsAgainstTransactions(transactions *solid.TransactionsSSZ, kzgCommitments *solid.ListSSZ[*cltypes.KZGCommitment]) (bool, error) { - return i.FnVerifyKzgCommitmentsAgainstTransactions(transactions, kzgCommitments) -} - func (i Impl) ProcessProposerSlashing(s abstract.BeaconState, propSlashing *cltypes.ProposerSlashing) error { return i.FnProcessProposerSlashing(s, propSlashing) } diff --git a/cl/transition/machine/block.go b/cl/transition/machine/block.go index 1bfaa452a52..89593f6e614 100644 --- a/cl/transition/machine/block.go +++ b/cl/transition/machine/block.go @@ -56,15 +56,7 @@ func ProcessBlock(impl BlockProcessor, s abstract.BeaconState, signedBlock *clty return fmt.Errorf("processBlock: failed to process sync aggregate: %v", err) } } - if version >= clparams.DenebVersion { - verified, err := impl.VerifyKzgCommitmentsAgainstTransactions(block.Body.ExecutionPayload.Transactions, block.Body.BlobKzgCommitments) - if err != nil { - return fmt.Errorf("processBlock: failed to process blob kzg commitments: %w", err) - } - if !verified { - return fmt.Errorf("processBlock: failed to process blob kzg commitments: commitments are not equal") - } - } + h.PutSince() return nil } diff --git a/cl/transition/machine/machine.go b/cl/transition/machine/machine.go index 408b62bdcb6..509235212a4 100644 --- a/cl/transition/machine/machine.go +++ b/cl/transition/machine/machine.go @@ -34,7 +34,6 @@ type BlockHeaderProcessor interface { ProcessRandao(s abstract.BeaconState, randao [96]byte, proposerIndex uint64) error ProcessEth1Data(state abstract.BeaconState, eth1Data *cltypes.Eth1Data) error ProcessSyncAggregate(s abstract.BeaconState, sync *cltypes.SyncAggregate) error - VerifyKzgCommitmentsAgainstTransactions(transactions *solid.TransactionsSSZ, kzgCommitments *solid.ListSSZ[*cltypes.KZGCommitment]) (bool, error) } type BlockOperationProcessor interface { diff --git a/cl/utils/blob.go b/cl/utils/blob.go new file mode 100644 index 00000000000..ead272c215f --- /dev/null +++ b/cl/utils/blob.go @@ -0,0 +1,18 @@ +package utils + +import ( + libcommon "github.com/ledgerwatch/erigon-lib/common" +) + +const VERSIONED_HASH_VERSION_KZG byte = byte(1) + +func KzgCommitmentToVersionedHash(kzgCommitment libcommon.Bytes48) (libcommon.Hash, error) { + versionedHash := [32]byte{} + kzgCommitmentHash := Sha256(kzgCommitment[:]) + + buf := append([]byte{}, VERSIONED_HASH_VERSION_KZG) + buf = append(buf, kzgCommitmentHash[1:]...) + copy(versionedHash[:], buf) + + return versionedHash, nil +} diff --git a/cl/utils/bytes.go b/cl/utils/bytes.go index 387bad6f5de..9284df09f93 100644 --- a/cl/utils/bytes.go +++ b/cl/utils/bytes.go @@ -15,7 +15,6 @@ package utils import ( "encoding/binary" - "io" "math/bits" "github.com/ledgerwatch/erigon-lib/types/ssz" @@ -105,16 +104,51 @@ func GetBitlistLength(b []byte) int { return 8*(len(b)-1) + msb - 1 } -func ReadZSTD(r io.Reader, out []byte) (int, error) { - n := 0 - var err error - for n != len(out) { - var m int - m, err = r.Read(out[n:]) - n += m - if err != nil { - return n, err +func ReverseOfByteSlice(b []byte) (out []byte) { + out = make([]byte, len(b)) + for i := range b { + out[i] = b[len(b)-1-i] + } + return +} + +func FlipBitOn(b []byte, i int) { + b[i/8] |= 1 << (i % 8) +} + +func IsBitOn(b []byte, idx int) bool { + i := uint8(1 << (idx % 8)) + return b[idx/8]&i == i +} + +// IsNonStrictSupersetBitlist checks if bitlist 'a' is a non-strict superset of bitlist 'b' +func IsNonStrictSupersetBitlist(a, b []byte) bool { + // Ensure 'a' is at least as long as 'b' + if len(a) < len(b) { + return false + } + + // Check each bit in 'b' to ensure it is also set in 'a' + for i := 0; i < len(b); i++ { + if (a[i] & b[i]) != b[i] { + return false } } - return n, nil + + // If all bits required by 'b' are present in 'a', return true + return true +} + +func BitsOnCount(b []byte) int { + count := 0 + for _, v := range b { + count += bits.OnesCount8(v) + } + return count +} + +func MergeBitlists(a, b []byte) { + for i := range b { + a[i] |= b[i] + } } diff --git a/cl/utils/bytes_test.go b/cl/utils/bytes_test.go index 9b61947b7f7..2978c78d20e 100644 --- a/cl/utils/bytes_test.go +++ b/cl/utils/bytes_test.go @@ -1,9 +1,10 @@ package utils_test import ( - "github.com/ledgerwatch/erigon-lib/common" "testing" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/utils" "github.com/stretchr/testify/require" @@ -11,8 +12,8 @@ import ( func TestSSZSnappy(t *testing.T) { verySussyMessage := &cltypes.Metadata{ - SeqNumber: 69, // :D - Attnets: 96, // :( + SeqNumber: 69, // :D + Attnets: [8]byte{96}, // :( } sussyEncoded, err := utils.EncodeSSZSnappy(verySussyMessage) require.NoError(t, err) diff --git a/cl/utils/eth_clock/ethereum_clock.go b/cl/utils/eth_clock/ethereum_clock.go new file mode 100644 index 00000000000..eaf5aca5e5c --- /dev/null +++ b/cl/utils/eth_clock/ethereum_clock.go @@ -0,0 +1,233 @@ +package eth_clock + +import ( + "encoding/binary" + "sort" + "time" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/utils" +) + +var maximumClockDisparity = 500 * time.Millisecond + +//go:generate mockgen -typed=true -source=./ethereum_clock.go -destination=./ethereum_clock_mock.go -package=eth_clock . EthereumClock +type EthereumClock interface { + GetSlotTime(slot uint64) time.Time + GetCurrentSlot() uint64 + IsSlotCurrentSlotWithMaximumClockDisparity(slot uint64) bool + GetSlotByTime(time time.Time) uint64 + GetCurrentEpoch() uint64 + CurrentForkDigest() (common.Bytes4, error) // ComputeForkDigest + NextForkDigest() (common.Bytes4, error) // ComputeForkDigest + ForkId() ([]byte, error) // ComputeForkId + LastFork() (common.Bytes4, error) // GetLastFork + StateVersionByForkDigest(common.Bytes4) (clparams.StateVersion, error) // ForkDigestVersion + ComputeForkDigestForVersion(currentVersion common.Bytes4) (digest common.Bytes4, err error) + + GenesisValidatorsRoot() common.Hash + GenesisTime() uint64 +} + +type forkNode struct { + epoch uint64 + version [4]byte +} + +func forkList(schedule map[common.Bytes4]uint64) (f []forkNode) { + for version, epoch := range schedule { + f = append(f, forkNode{epoch: epoch, version: version}) + } + sort.Slice(f, func(i, j int) bool { + return f[i].epoch < f[j].epoch + }) + return +} + +type ethereumClockImpl struct { + genesisTime uint64 + genesisValidatorsRoot common.Hash + beaconCfg *clparams.BeaconChainConfig +} + +func NewEthereumClock(genesisTime uint64, genesisValidatorsRoot common.Hash, beaconCfg *clparams.BeaconChainConfig) EthereumClock { + return ðereumClockImpl{ + genesisTime: genesisTime, + beaconCfg: beaconCfg, + genesisValidatorsRoot: genesisValidatorsRoot, + } +} + +func (t *ethereumClockImpl) GetSlotTime(slot uint64) time.Time { + slotTime := t.genesisTime + t.beaconCfg.SecondsPerSlot*slot + return time.Unix(int64(slotTime), 0) +} + +func (t *ethereumClockImpl) GetCurrentSlot() uint64 { + now := uint64(time.Now().Unix()) + if now < t.genesisTime { + return 0 + } + + return (now - t.genesisTime) / t.beaconCfg.SecondsPerSlot +} + +func (t *ethereumClockImpl) IsSlotCurrentSlotWithMaximumClockDisparity(slot uint64) bool { + slotTime := t.GetSlotTime(slot) + currSlot := t.GetCurrentSlot() + minSlot := t.GetSlotByTime(slotTime.Add(-maximumClockDisparity)) + maxSlot := t.GetSlotByTime(slotTime.Add(maximumClockDisparity)) + return minSlot == currSlot || maxSlot == currSlot +} + +func (t *ethereumClockImpl) GetSlotByTime(time time.Time) uint64 { + return (uint64(time.Unix()) - t.genesisTime) / t.beaconCfg.SecondsPerSlot +} + +func (t *ethereumClockImpl) GetCurrentEpoch() uint64 { + now := uint64(time.Now().Unix()) + if now < t.genesisTime { + return 0 + } + + return t.GetCurrentSlot() / t.beaconCfg.SlotsPerEpoch +} + +func (t *ethereumClockImpl) CurrentForkDigest() (common.Bytes4, error) { + currentEpoch := t.GetCurrentEpoch() + // Retrieve current fork version. + currentForkVersion := utils.Uint32ToBytes4(uint32(t.beaconCfg.GenesisForkVersion)) + for _, fork := range forkList(t.beaconCfg.ForkVersionSchedule) { + if currentEpoch >= fork.epoch { + currentForkVersion = fork.version + continue + } + break + } + return t.ComputeForkDigestForVersion(currentForkVersion) +} + +func (t *ethereumClockImpl) NextForkDigest() (common.Bytes4, error) { + currentEpoch := t.GetCurrentEpoch() + // Retrieve next fork version. + nextForkIndex := 0 + forkList := forkList(t.beaconCfg.ForkVersionSchedule) + for _, fork := range forkList { + if currentEpoch >= fork.epoch { + nextForkIndex++ + continue + } + break + } + if nextForkIndex-1 == len(forkList)-1 { + return [4]byte{}, nil + } + return t.ComputeForkDigestForVersion(forkList[nextForkIndex].version) +} + +func (t *ethereumClockImpl) ForkId() ([]byte, error) { + digest, err := t.CurrentForkDigest() + if err != nil { + return nil, err + } + + currentEpoch := t.GetCurrentEpoch() + + if time.Now().Unix() < int64(t.genesisTime) { + currentEpoch = 0 + } + + var nextForkVersion [4]byte + nextForkEpoch := uint64(0) + for _, fork := range forkList(t.beaconCfg.ForkVersionSchedule) { + if currentEpoch < fork.epoch { + nextForkVersion = fork.version + nextForkEpoch = fork.epoch + break + } + nextForkVersion = fork.version + } + + enrForkId := make([]byte, 16) + copy(enrForkId, digest[:]) + copy(enrForkId[4:], nextForkVersion[:]) + binary.BigEndian.PutUint64(enrForkId[8:], nextForkEpoch) + + return enrForkId, nil +} + +func (t *ethereumClockImpl) LastFork() (common.Bytes4, error) { + currentEpoch := t.GetCurrentEpoch() + // Retrieve current fork version. + currentFork := utils.Uint32ToBytes4(uint32(t.beaconCfg.GenesisForkVersion)) + for _, fork := range forkList(t.beaconCfg.ForkVersionSchedule) { + if currentEpoch >= fork.epoch { + currentFork = fork.version + continue + } + break + } + return currentFork, nil +} + +func (t *ethereumClockImpl) StateVersionByForkDigest(digest common.Bytes4) (clparams.StateVersion, error) { + var ( + phase0ForkDigest, altairForkDigest, bellatrixForkDigest, capellaForkDigest, denebForkDigest common.Bytes4 + err error + ) + phase0ForkDigest, err = t.ComputeForkDigestForVersion(utils.Uint32ToBytes4(uint32(t.beaconCfg.GenesisForkVersion))) + if err != nil { + return 0, err + } + + altairForkDigest, err = t.ComputeForkDigestForVersion(utils.Uint32ToBytes4(uint32(t.beaconCfg.AltairForkVersion))) + if err != nil { + return 0, err + } + + bellatrixForkDigest, err = t.ComputeForkDigestForVersion(utils.Uint32ToBytes4(uint32(t.beaconCfg.BellatrixForkVersion))) + if err != nil { + return 0, err + } + + capellaForkDigest, err = t.ComputeForkDigestForVersion(utils.Uint32ToBytes4(uint32(t.beaconCfg.CapellaForkVersion))) + if err != nil { + return 0, err + } + + denebForkDigest, err = t.ComputeForkDigestForVersion(utils.Uint32ToBytes4(uint32(t.beaconCfg.DenebForkVersion))) + if err != nil { + return 0, err + } + switch digest { + case phase0ForkDigest: + return clparams.Phase0Version, nil + case altairForkDigest: + return clparams.AltairVersion, nil + case bellatrixForkDigest: + return clparams.BellatrixVersion, nil + case capellaForkDigest: + return clparams.CapellaVersion, nil + case denebForkDigest: + return clparams.DenebVersion, nil + } + return 0, nil +} + +func (t *ethereumClockImpl) ComputeForkDigestForVersion(currentVersion common.Bytes4) (digest common.Bytes4, err error) { + var currentVersion32 common.Hash + copy(currentVersion32[:], currentVersion[:]) + dataRoot := utils.Sha256(currentVersion32[:], t.genesisValidatorsRoot[:]) + // copy first four bytes to output + copy(digest[:], dataRoot[:4]) + return +} + +func (t *ethereumClockImpl) GenesisValidatorsRoot() common.Hash { + return t.genesisValidatorsRoot +} + +func (t *ethereumClockImpl) GenesisTime() uint64 { + return t.genesisTime +} diff --git a/cl/utils/eth_clock/ethereum_clock_mock.go b/cl/utils/eth_clock/ethereum_clock_mock.go new file mode 100644 index 00000000000..ab444a50e4f --- /dev/null +++ b/cl/utils/eth_clock/ethereum_clock_mock.go @@ -0,0 +1,542 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./ethereum_clock.go +// +// Generated by this command: +// +// mockgen -typed=true -source=./ethereum_clock.go -destination=./ethereum_clock_mock.go -package=eth_clock . EthereumClock +// + +// Package eth_clock is a generated GoMock package. +package eth_clock + +import ( + reflect "reflect" + time "time" + + common "github.com/ledgerwatch/erigon-lib/common" + clparams "github.com/ledgerwatch/erigon/cl/clparams" + gomock "go.uber.org/mock/gomock" +) + +// MockEthereumClock is a mock of EthereumClock interface. +type MockEthereumClock struct { + ctrl *gomock.Controller + recorder *MockEthereumClockMockRecorder +} + +// MockEthereumClockMockRecorder is the mock recorder for MockEthereumClock. +type MockEthereumClockMockRecorder struct { + mock *MockEthereumClock +} + +// NewMockEthereumClock creates a new mock instance. +func NewMockEthereumClock(ctrl *gomock.Controller) *MockEthereumClock { + mock := &MockEthereumClock{ctrl: ctrl} + mock.recorder = &MockEthereumClockMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockEthereumClock) EXPECT() *MockEthereumClockMockRecorder { + return m.recorder +} + +// ComputeForkDigestForVersion mocks base method. +func (m *MockEthereumClock) ComputeForkDigestForVersion(currentVersion common.Bytes4) (common.Bytes4, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ComputeForkDigestForVersion", currentVersion) + ret0, _ := ret[0].(common.Bytes4) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ComputeForkDigestForVersion indicates an expected call of ComputeForkDigestForVersion. +func (mr *MockEthereumClockMockRecorder) ComputeForkDigestForVersion(currentVersion any) *MockEthereumClockComputeForkDigestForVersionCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ComputeForkDigestForVersion", reflect.TypeOf((*MockEthereumClock)(nil).ComputeForkDigestForVersion), currentVersion) + return &MockEthereumClockComputeForkDigestForVersionCall{Call: call} +} + +// MockEthereumClockComputeForkDigestForVersionCall wrap *gomock.Call +type MockEthereumClockComputeForkDigestForVersionCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockComputeForkDigestForVersionCall) Return(digest common.Bytes4, err error) *MockEthereumClockComputeForkDigestForVersionCall { + c.Call = c.Call.Return(digest, err) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockComputeForkDigestForVersionCall) Do(f func(common.Bytes4) (common.Bytes4, error)) *MockEthereumClockComputeForkDigestForVersionCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockComputeForkDigestForVersionCall) DoAndReturn(f func(common.Bytes4) (common.Bytes4, error)) *MockEthereumClockComputeForkDigestForVersionCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// CurrentForkDigest mocks base method. +func (m *MockEthereumClock) CurrentForkDigest() (common.Bytes4, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CurrentForkDigest") + ret0, _ := ret[0].(common.Bytes4) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CurrentForkDigest indicates an expected call of CurrentForkDigest. +func (mr *MockEthereumClockMockRecorder) CurrentForkDigest() *MockEthereumClockCurrentForkDigestCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CurrentForkDigest", reflect.TypeOf((*MockEthereumClock)(nil).CurrentForkDigest)) + return &MockEthereumClockCurrentForkDigestCall{Call: call} +} + +// MockEthereumClockCurrentForkDigestCall wrap *gomock.Call +type MockEthereumClockCurrentForkDigestCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockCurrentForkDigestCall) Return(arg0 common.Bytes4, arg1 error) *MockEthereumClockCurrentForkDigestCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockCurrentForkDigestCall) Do(f func() (common.Bytes4, error)) *MockEthereumClockCurrentForkDigestCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockCurrentForkDigestCall) DoAndReturn(f func() (common.Bytes4, error)) *MockEthereumClockCurrentForkDigestCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// ForkId mocks base method. +func (m *MockEthereumClock) ForkId() ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ForkId") + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ForkId indicates an expected call of ForkId. +func (mr *MockEthereumClockMockRecorder) ForkId() *MockEthereumClockForkIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ForkId", reflect.TypeOf((*MockEthereumClock)(nil).ForkId)) + return &MockEthereumClockForkIdCall{Call: call} +} + +// MockEthereumClockForkIdCall wrap *gomock.Call +type MockEthereumClockForkIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockForkIdCall) Return(arg0 []byte, arg1 error) *MockEthereumClockForkIdCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockForkIdCall) Do(f func() ([]byte, error)) *MockEthereumClockForkIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockForkIdCall) DoAndReturn(f func() ([]byte, error)) *MockEthereumClockForkIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GenesisTime mocks base method. +func (m *MockEthereumClock) GenesisTime() uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GenesisTime") + ret0, _ := ret[0].(uint64) + return ret0 +} + +// GenesisTime indicates an expected call of GenesisTime. +func (mr *MockEthereumClockMockRecorder) GenesisTime() *MockEthereumClockGenesisTimeCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GenesisTime", reflect.TypeOf((*MockEthereumClock)(nil).GenesisTime)) + return &MockEthereumClockGenesisTimeCall{Call: call} +} + +// MockEthereumClockGenesisTimeCall wrap *gomock.Call +type MockEthereumClockGenesisTimeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockGenesisTimeCall) Return(arg0 uint64) *MockEthereumClockGenesisTimeCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockGenesisTimeCall) Do(f func() uint64) *MockEthereumClockGenesisTimeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockGenesisTimeCall) DoAndReturn(f func() uint64) *MockEthereumClockGenesisTimeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GenesisValidatorsRoot mocks base method. +func (m *MockEthereumClock) GenesisValidatorsRoot() common.Hash { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GenesisValidatorsRoot") + ret0, _ := ret[0].(common.Hash) + return ret0 +} + +// GenesisValidatorsRoot indicates an expected call of GenesisValidatorsRoot. +func (mr *MockEthereumClockMockRecorder) GenesisValidatorsRoot() *MockEthereumClockGenesisValidatorsRootCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GenesisValidatorsRoot", reflect.TypeOf((*MockEthereumClock)(nil).GenesisValidatorsRoot)) + return &MockEthereumClockGenesisValidatorsRootCall{Call: call} +} + +// MockEthereumClockGenesisValidatorsRootCall wrap *gomock.Call +type MockEthereumClockGenesisValidatorsRootCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockGenesisValidatorsRootCall) Return(arg0 common.Hash) *MockEthereumClockGenesisValidatorsRootCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockGenesisValidatorsRootCall) Do(f func() common.Hash) *MockEthereumClockGenesisValidatorsRootCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockGenesisValidatorsRootCall) DoAndReturn(f func() common.Hash) *MockEthereumClockGenesisValidatorsRootCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetCurrentEpoch mocks base method. +func (m *MockEthereumClock) GetCurrentEpoch() uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCurrentEpoch") + ret0, _ := ret[0].(uint64) + return ret0 +} + +// GetCurrentEpoch indicates an expected call of GetCurrentEpoch. +func (mr *MockEthereumClockMockRecorder) GetCurrentEpoch() *MockEthereumClockGetCurrentEpochCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentEpoch", reflect.TypeOf((*MockEthereumClock)(nil).GetCurrentEpoch)) + return &MockEthereumClockGetCurrentEpochCall{Call: call} +} + +// MockEthereumClockGetCurrentEpochCall wrap *gomock.Call +type MockEthereumClockGetCurrentEpochCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockGetCurrentEpochCall) Return(arg0 uint64) *MockEthereumClockGetCurrentEpochCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockGetCurrentEpochCall) Do(f func() uint64) *MockEthereumClockGetCurrentEpochCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockGetCurrentEpochCall) DoAndReturn(f func() uint64) *MockEthereumClockGetCurrentEpochCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetCurrentSlot mocks base method. +func (m *MockEthereumClock) GetCurrentSlot() uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCurrentSlot") + ret0, _ := ret[0].(uint64) + return ret0 +} + +// GetCurrentSlot indicates an expected call of GetCurrentSlot. +func (mr *MockEthereumClockMockRecorder) GetCurrentSlot() *MockEthereumClockGetCurrentSlotCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentSlot", reflect.TypeOf((*MockEthereumClock)(nil).GetCurrentSlot)) + return &MockEthereumClockGetCurrentSlotCall{Call: call} +} + +// MockEthereumClockGetCurrentSlotCall wrap *gomock.Call +type MockEthereumClockGetCurrentSlotCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockGetCurrentSlotCall) Return(arg0 uint64) *MockEthereumClockGetCurrentSlotCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockGetCurrentSlotCall) Do(f func() uint64) *MockEthereumClockGetCurrentSlotCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockGetCurrentSlotCall) DoAndReturn(f func() uint64) *MockEthereumClockGetCurrentSlotCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetSlotByTime mocks base method. +func (m *MockEthereumClock) GetSlotByTime(time time.Time) uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSlotByTime", time) + ret0, _ := ret[0].(uint64) + return ret0 +} + +// GetSlotByTime indicates an expected call of GetSlotByTime. +func (mr *MockEthereumClockMockRecorder) GetSlotByTime(time any) *MockEthereumClockGetSlotByTimeCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSlotByTime", reflect.TypeOf((*MockEthereumClock)(nil).GetSlotByTime), time) + return &MockEthereumClockGetSlotByTimeCall{Call: call} +} + +// MockEthereumClockGetSlotByTimeCall wrap *gomock.Call +type MockEthereumClockGetSlotByTimeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockGetSlotByTimeCall) Return(arg0 uint64) *MockEthereumClockGetSlotByTimeCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockGetSlotByTimeCall) Do(f func(time.Time) uint64) *MockEthereumClockGetSlotByTimeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockGetSlotByTimeCall) DoAndReturn(f func(time.Time) uint64) *MockEthereumClockGetSlotByTimeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetSlotTime mocks base method. +func (m *MockEthereumClock) GetSlotTime(slot uint64) time.Time { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSlotTime", slot) + ret0, _ := ret[0].(time.Time) + return ret0 +} + +// GetSlotTime indicates an expected call of GetSlotTime. +func (mr *MockEthereumClockMockRecorder) GetSlotTime(slot any) *MockEthereumClockGetSlotTimeCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSlotTime", reflect.TypeOf((*MockEthereumClock)(nil).GetSlotTime), slot) + return &MockEthereumClockGetSlotTimeCall{Call: call} +} + +// MockEthereumClockGetSlotTimeCall wrap *gomock.Call +type MockEthereumClockGetSlotTimeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockGetSlotTimeCall) Return(arg0 time.Time) *MockEthereumClockGetSlotTimeCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockGetSlotTimeCall) Do(f func(uint64) time.Time) *MockEthereumClockGetSlotTimeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockGetSlotTimeCall) DoAndReturn(f func(uint64) time.Time) *MockEthereumClockGetSlotTimeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// IsSlotCurrentSlotWithMaximumClockDisparity mocks base method. +func (m *MockEthereumClock) IsSlotCurrentSlotWithMaximumClockDisparity(slot uint64) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "IsSlotCurrentSlotWithMaximumClockDisparity", slot) + ret0, _ := ret[0].(bool) + return ret0 +} + +// IsSlotCurrentSlotWithMaximumClockDisparity indicates an expected call of IsSlotCurrentSlotWithMaximumClockDisparity. +func (mr *MockEthereumClockMockRecorder) IsSlotCurrentSlotWithMaximumClockDisparity(slot any) *MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsSlotCurrentSlotWithMaximumClockDisparity", reflect.TypeOf((*MockEthereumClock)(nil).IsSlotCurrentSlotWithMaximumClockDisparity), slot) + return &MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall{Call: call} +} + +// MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall wrap *gomock.Call +type MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall) Return(arg0 bool) *MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall) Do(f func(uint64) bool) *MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall) DoAndReturn(f func(uint64) bool) *MockEthereumClockIsSlotCurrentSlotWithMaximumClockDisparityCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastFork mocks base method. +func (m *MockEthereumClock) LastFork() (common.Bytes4, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastFork") + ret0, _ := ret[0].(common.Bytes4) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// LastFork indicates an expected call of LastFork. +func (mr *MockEthereumClockMockRecorder) LastFork() *MockEthereumClockLastForkCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastFork", reflect.TypeOf((*MockEthereumClock)(nil).LastFork)) + return &MockEthereumClockLastForkCall{Call: call} +} + +// MockEthereumClockLastForkCall wrap *gomock.Call +type MockEthereumClockLastForkCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockLastForkCall) Return(arg0 common.Bytes4, arg1 error) *MockEthereumClockLastForkCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockLastForkCall) Do(f func() (common.Bytes4, error)) *MockEthereumClockLastForkCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockLastForkCall) DoAndReturn(f func() (common.Bytes4, error)) *MockEthereumClockLastForkCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// NextForkDigest mocks base method. +func (m *MockEthereumClock) NextForkDigest() (common.Bytes4, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NextForkDigest") + ret0, _ := ret[0].(common.Bytes4) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NextForkDigest indicates an expected call of NextForkDigest. +func (mr *MockEthereumClockMockRecorder) NextForkDigest() *MockEthereumClockNextForkDigestCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NextForkDigest", reflect.TypeOf((*MockEthereumClock)(nil).NextForkDigest)) + return &MockEthereumClockNextForkDigestCall{Call: call} +} + +// MockEthereumClockNextForkDigestCall wrap *gomock.Call +type MockEthereumClockNextForkDigestCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockNextForkDigestCall) Return(arg0 common.Bytes4, arg1 error) *MockEthereumClockNextForkDigestCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockNextForkDigestCall) Do(f func() (common.Bytes4, error)) *MockEthereumClockNextForkDigestCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockNextForkDigestCall) DoAndReturn(f func() (common.Bytes4, error)) *MockEthereumClockNextForkDigestCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// StateVersionByForkDigest mocks base method. +func (m *MockEthereumClock) StateVersionByForkDigest(arg0 common.Bytes4) (clparams.StateVersion, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVersionByForkDigest", arg0) + ret0, _ := ret[0].(clparams.StateVersion) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVersionByForkDigest indicates an expected call of StateVersionByForkDigest. +func (mr *MockEthereumClockMockRecorder) StateVersionByForkDigest(arg0 any) *MockEthereumClockStateVersionByForkDigestCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVersionByForkDigest", reflect.TypeOf((*MockEthereumClock)(nil).StateVersionByForkDigest), arg0) + return &MockEthereumClockStateVersionByForkDigestCall{Call: call} +} + +// MockEthereumClockStateVersionByForkDigestCall wrap *gomock.Call +type MockEthereumClockStateVersionByForkDigestCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockEthereumClockStateVersionByForkDigestCall) Return(arg0 clparams.StateVersion, arg1 error) *MockEthereumClockStateVersionByForkDigestCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockEthereumClockStateVersionByForkDigestCall) Do(f func(common.Bytes4) (clparams.StateVersion, error)) *MockEthereumClockStateVersionByForkDigestCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockEthereumClockStateVersionByForkDigestCall) DoAndReturn(f func(common.Bytes4) (clparams.StateVersion, error)) *MockEthereumClockStateVersionByForkDigestCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/utils/eth_clock/ethereum_clock_test.go b/cl/utils/eth_clock/ethereum_clock_test.go new file mode 100644 index 00000000000..47c8e4e869a --- /dev/null +++ b/cl/utils/eth_clock/ethereum_clock_test.go @@ -0,0 +1,35 @@ +package eth_clock + +import ( + "testing" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/stretchr/testify/require" +) + +func TestSlotOperations(t *testing.T) { + clock := NewEthereumClock(0, common.Hash{}, &clparams.BeaconChainConfig{SecondsPerSlot: 12, SlotsPerEpoch: 32}) + slot := clock.GetCurrentSlot() + epoch := clock.GetCurrentEpoch() + require.Equal(t, slot/32, epoch) + require.True(t, clock.IsSlotCurrentSlotWithMaximumClockDisparity(slot)) + require.False(t, clock.IsSlotCurrentSlotWithMaximumClockDisparity(slot-1000)) +} + +func TestGetForkDigests(t *testing.T) { + clock := NewEthereumClock(0, common.Hash{}, &clparams.MainnetBeaconConfig) + currDigest, err := clock.CurrentForkDigest() + require.NoError(t, err) + require.Equal(t, common.Bytes4{0xf5, 0xa5, 0xfd, 0x42}, currDigest) + nextDigest, err := clock.NextForkDigest() + require.NoError(t, err) + lastFork, err := clock.LastFork() + require.NoError(t, err) + require.Equal(t, lastFork, nextDigest) + expectedForkId := make([]byte, 16) + copy(expectedForkId, currDigest[:]) + forkId, err := clock.ForkId() + require.NoError(t, err) + require.Equal(t, expectedForkId, forkId) +} diff --git a/cl/utils/time.go b/cl/utils/time.go deleted file mode 100644 index b9ed288f794..00000000000 --- a/cl/utils/time.go +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright 2022 Erigon-Lightclient contributors - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package utils - -import "time" - -// compute time of slot. -func GetSlotTime(genesisTime uint64, secondsPerSlot uint64, slot uint64) time.Time { - slotTime := genesisTime + secondsPerSlot*slot - return time.Unix(int64(slotTime), 0) -} - -// compute current slot. -func GetCurrentSlot(genesisTime uint64, secondsPerSlot uint64) uint64 { - now := uint64(time.Now().Unix()) - if now < genesisTime { - return 0 - } - - return (now - genesisTime) / secondsPerSlot -} - -// compute current slot. -func GetCurrentSlotOverTime(genesisTime uint64, secondsPerSlot uint64) uint64 { - now := uint64(time.Now().Unix()) - if now < genesisTime { - return 0 - } - - return (now - genesisTime) % secondsPerSlot -} - -// compute current epoch. -func GetCurrentEpoch(genesisTime uint64, secondsPerSlot uint64, slotsPerEpoch uint64) uint64 { - now := uint64(time.Now().Unix()) - if now < genesisTime { - return 0 - } - - return GetCurrentSlot(genesisTime, secondsPerSlot) / slotsPerEpoch -} - -// compute current slot. -func SlotToPeriod(slot uint64) uint64 { - return slot / 8192 -} diff --git a/cl/utils/time_test.go b/cl/utils/time_test.go index 598a80e4c2a..69a32b0b71b 100644 --- a/cl/utils/time_test.go +++ b/cl/utils/time_test.go @@ -1,27 +1,15 @@ package utils_test -import ( - "testing" - "time" - - "github.com/ledgerwatch/erigon/cl/utils" - "github.com/stretchr/testify/assert" -) - -func TestGetCurrentSlot(t *testing.T) { - now := uint64(time.Now().Unix()) - timePerSlot := 12 - genesisTime := now - 12*10 - assert.Equal(t, utils.GetCurrentSlot(genesisTime, uint64(timePerSlot)), uint64(10)) -} - -func TestGetCurrentEpoch(t *testing.T) { - now := uint64(time.Now().Unix()) - timePerSlot := 12 - genesisTime := now - 86*10 - assert.Equal(t, utils.GetCurrentEpoch(genesisTime, uint64(timePerSlot), 32), uint64(2)) -} - -func TestSlotToPeriod(t *testing.T) { - assert.Equal(t, utils.SlotToPeriod(20000), uint64(2)) -} +// func TestGetCurrentSlot(t *testing.T) { +// now := uint64(time.Now().Unix()) +// timePerSlot := 12 +// genesisTime := now - 12*10 +// assert.Equal(t, utils.GetCurrentSlot(genesisTime, uint64(timePerSlot)), uint64(10)) +// } + +// func TestGetCurrentEpoch(t *testing.T) { +// now := uint64(time.Now().Unix()) +// timePerSlot := 12 +// genesisTime := now - 86*10 +// assert.Equal(t, utils.GetCurrentEpoch(genesisTime, uint64(timePerSlot), 32), uint64(2)) +// } diff --git a/cl/validator/attestation_producer/attestation_producer.go b/cl/validator/attestation_producer/attestation_producer.go new file mode 100644 index 00000000000..b87f72c9fd9 --- /dev/null +++ b/cl/validator/attestation_producer/attestation_producer.go @@ -0,0 +1,110 @@ +package attestation_producer + +import ( + "errors" + + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/core/state/lru" + "github.com/ledgerwatch/erigon/cl/transition" + + libcommon "github.com/ledgerwatch/erigon-lib/common" +) + +var ( + ErrHeadStateNotAvailable = errors.New("head state not available") +) + +const attestationsCacheSize = 21 + +type attestationProducer struct { + beaconCfg *clparams.BeaconChainConfig + + attestationsCache *lru.Cache[uint64, solid.AttestationData] // Epoch => Base AttestationData +} + +func New(beaconCfg *clparams.BeaconChainConfig) AttestationDataProducer { + attestationsCache, err := lru.New[uint64, solid.AttestationData]("attestations", attestationsCacheSize) + if err != nil { + panic(err) + } + + return &attestationProducer{ + beaconCfg: beaconCfg, + attestationsCache: attestationsCache, + } +} + +func (ap *attestationProducer) ProduceAndCacheAttestationData(baseState *state.CachingBeaconState, slot uint64, committeeIndex uint64) (solid.AttestationData, error) { + epoch := slot / ap.beaconCfg.SlotsPerEpoch + baseStateBlockRoot, err := baseState.BlockRoot() + if err != nil { + return solid.AttestationData{}, err + } + if baseAttestationData, ok := ap.attestationsCache.Get(slot); ok { + beaconBlockRoot := baseStateBlockRoot + if baseState.Slot() > slot { + beaconBlockRoot, err = baseState.GetBlockRootAtSlot(slot) + if err != nil { + return solid.AttestationData{}, err + } + } + return solid.NewAttestionDataFromParameters( + slot, + committeeIndex, + beaconBlockRoot, + baseAttestationData.Source(), + baseAttestationData.Target(), + ), nil + } + stateEpoch := state.Epoch(baseState) + + if baseState.Slot() > slot { + return solid.AttestationData{}, errors.New("head state slot is bigger than requested slot, the attestation should have been cached, try again later.") + } + + if stateEpoch < epoch { + baseState, err = baseState.Copy() + if err != nil { + return solid.AttestationData{}, err + } + if err := transition.DefaultMachine.ProcessSlots(baseState, slot); err != nil { + return solid.AttestationData{}, err + } + } + + targetEpoch := state.Epoch(baseState) + epochStartTargetSlot := targetEpoch * ap.beaconCfg.SlotsPerEpoch + var targetRoot libcommon.Hash + if epochStartTargetSlot == baseState.Slot() { + targetRoot = baseStateBlockRoot + } else { + targetRoot, err = baseState.GetBlockRootAtSlot(epochStartTargetSlot) + if err != nil { + return solid.AttestationData{}, err + } + if targetRoot == (libcommon.Hash{}) { + targetRoot = baseStateBlockRoot + } + } + + baseAttestationData := solid.NewAttestionDataFromParameters( + 0, + 0, + libcommon.Hash{}, + baseState.CurrentJustifiedCheckpoint(), + solid.NewCheckpointFromParameters( + targetRoot, + targetEpoch, + ), + ) + ap.attestationsCache.Add(slot, baseAttestationData) + return solid.NewAttestionDataFromParameters( + slot, + committeeIndex, + baseStateBlockRoot, + baseAttestationData.Source(), + baseAttestationData.Target(), + ), nil +} diff --git a/cl/validator/attestation_producer/attestation_producer_test.go b/cl/validator/attestation_producer/attestation_producer_test.go new file mode 100644 index 00000000000..f61b03af517 --- /dev/null +++ b/cl/validator/attestation_producer/attestation_producer_test.go @@ -0,0 +1,25 @@ +package attestation_producer_test + +import ( + "testing" + + "github.com/ledgerwatch/erigon/cl/antiquary/tests" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/validator/attestation_producer" + "github.com/stretchr/testify/require" +) + +func TestAttestationProducer(t *testing.T) { + attProducer := attestation_producer.New(&clparams.MainnetBeaconConfig) + + _, _, headState := tests.GetPhase0Random() + + att, err := attProducer.ProduceAndCacheAttestationData(headState, headState.Slot(), 0) + require.NoError(t, err) + + attJson, err := att.MarshalJSON() + require.NoError(t, err) + + // check if the json match with the expected value + require.Equal(t, string(attJson), `{"slot":"8322","index":"0","beacon_block_root":"0xeffdd8ef40c3c901f0724d48e04ce257967cf1da31929f3b6db614f89ef8d660","source":{"epoch":"258","root":"0x31885d5a2405876b7203f9cc1a7e115b9977412107c51c81ab4fd49bde93905e"},"target":{"epoch":"260","root":"0x86979f6f6dc7626064ef0d38d4dffb89e91d1d4c18492e3fb7d7ee93cedca3ed"}}`) +} diff --git a/cl/validator/attestation_producer/interface.go b/cl/validator/attestation_producer/interface.go new file mode 100644 index 00000000000..09415fc39d3 --- /dev/null +++ b/cl/validator/attestation_producer/interface.go @@ -0,0 +1,10 @@ +package attestation_producer + +import ( + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" +) + +type AttestationDataProducer interface { + ProduceAndCacheAttestationData(baseState *state.CachingBeaconState, slot uint64, committeeIndex uint64) (solid.AttestationData, error) +} diff --git a/cl/validator/committee_subscription/committee_subscription.go b/cl/validator/committee_subscription/committee_subscription.go new file mode 100644 index 00000000000..1bee4b05cbe --- /dev/null +++ b/cl/validator/committee_subscription/committee_subscription.go @@ -0,0 +1,149 @@ +package committee_subscription + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/cl/aggregation" + "github.com/ledgerwatch/erigon/cl/beacon/synced_data" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/gossip" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/phase1/network/subnets" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" +) + +var ( + ErrIgnore = fmt.Errorf("ignore") + ErrCommitteeIndexOutOfRange = fmt.Errorf("committee index out of range") + ErrWrongSubnet = fmt.Errorf("attestation is for the wrong subnet") + ErrNotInPropagationRange = fmt.Errorf("attestation is not in propagation range. %w", ErrIgnore) + ErrEpochMismatch = fmt.Errorf("epoch mismatch") + ErrExactlyOneBitSet = fmt.Errorf("exactly one aggregation bit should be set") + ErrAggregationBitsMismatch = fmt.Errorf("aggregation bits mismatch committee size") +) + +type CommitteeSubscribeMgmt struct { + indiciesDB kv.RoDB + ethClock eth_clock.EthereumClock + beaconConfig *clparams.BeaconChainConfig + netConfig *clparams.NetworkConfig + sentinel sentinel.SentinelClient + state *state.CachingBeaconState + syncedData *synced_data.SyncedDataManager + // subscriptions + aggregationPool aggregation.AggregationPool + validatorSubsMutex sync.RWMutex + validatorSubs map[uint64]*validatorSub // slot -> committeeIndex -> validatorSub +} + +func NewCommitteeSubscribeManagement( + ctx context.Context, + indiciesDB kv.RoDB, + beaconConfig *clparams.BeaconChainConfig, + netConfig *clparams.NetworkConfig, + ethClock eth_clock.EthereumClock, + sentinel sentinel.SentinelClient, + state *state.CachingBeaconState, + aggregationPool aggregation.AggregationPool, + syncedData *synced_data.SyncedDataManager, +) *CommitteeSubscribeMgmt { + c := &CommitteeSubscribeMgmt{ + indiciesDB: indiciesDB, + beaconConfig: beaconConfig, + netConfig: netConfig, + ethClock: ethClock, + sentinel: sentinel, + state: state, + aggregationPool: aggregationPool, + syncedData: syncedData, + validatorSubs: make(map[uint64]*validatorSub), + } + go c.sweepByStaleSlots(ctx) + return c +} + +type validatorSub struct { + subnetId uint64 + aggregate bool +} + +func (c *CommitteeSubscribeMgmt) AddAttestationSubscription(ctx context.Context, p *cltypes.BeaconCommitteeSubscription) error { + var ( + slot = p.Slot + cIndex = p.CommitteeIndex + ) + headState := c.syncedData.HeadState() + if headState == nil { + return fmt.Errorf("head state not available") + } + + commiteePerSlot := headState.CommitteeCount(p.Slot / c.beaconConfig.SlotsPerEpoch) + subnetId := subnets.ComputeSubnetForAttestation(commiteePerSlot, slot, cIndex, c.beaconConfig.SlotsPerEpoch, c.netConfig.AttestationSubnetCount) + // add validator to subscription + c.validatorSubsMutex.Lock() + + if _, ok := c.validatorSubs[cIndex]; !ok { + c.validatorSubs[cIndex] = &validatorSub{ + subnetId: subnetId, + aggregate: p.IsAggregator, + } + } else if p.IsAggregator { + c.validatorSubs[cIndex].aggregate = true + } + + c.validatorSubsMutex.Unlock() + + // set sentinel gossip expiration by subnet id + request := sentinel.RequestSubscribeExpiry{ + Topic: gossip.TopicNameBeaconAttestation(subnetId), + ExpiryUnixSecs: uint64(time.Now().Add(30 * time.Minute).Unix()), // temporarily set to 30 minutes + } + if _, err := c.sentinel.SetSubscribeExpiry(ctx, &request); err != nil { + return err + } + return nil +} + +func (c *CommitteeSubscribeMgmt) CheckAggregateAttestation(att *solid.Attestation) error { + committeeIndex := att.AttestantionData().CommitteeIndex() + c.validatorSubsMutex.RLock() + defer c.validatorSubsMutex.RUnlock() + if sub, ok := c.validatorSubs[committeeIndex]; ok && sub.aggregate { + // aggregate attestation + if err := c.aggregationPool.AddAttestation(att); err != nil { + return err + } + } + return nil +} + +func (c *CommitteeSubscribeMgmt) sweepByStaleSlots(ctx context.Context) { + slotIsStale := func(curSlot, targetSlot uint64) bool { + return curSlot-targetSlot > c.netConfig.AttestationPropagationSlotRange + } + // sweep every minute + ticker := time.NewTicker(time.Minute) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + curSlot := c.ethClock.GetCurrentSlot() + c.validatorSubsMutex.Lock() + for slot := range c.validatorSubs { + if slotIsStale(curSlot, slot) { + delete(c.validatorSubs, slot) + } + } + c.validatorSubsMutex.Unlock() + } + } +} diff --git a/cl/validator/committee_subscription/interface.go b/cl/validator/committee_subscription/interface.go new file mode 100644 index 00000000000..43ffac4074a --- /dev/null +++ b/cl/validator/committee_subscription/interface.go @@ -0,0 +1,14 @@ +package committee_subscription + +import ( + "context" + + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" +) + +//go:generate mockgen -typed=true -destination=./mock_services/committee_subscribe_mock.go -package=mock_services . CommitteeSubscribe +type CommitteeSubscribe interface { + AddAttestationSubscription(ctx context.Context, p *cltypes.BeaconCommitteeSubscription) error + CheckAggregateAttestation(att *solid.Attestation) error +} diff --git a/cl/validator/committee_subscription/mock_services/committee_subscribe_mock.go b/cl/validator/committee_subscription/mock_services/committee_subscribe_mock.go new file mode 100644 index 00000000000..bfdfee3dc12 --- /dev/null +++ b/cl/validator/committee_subscription/mock_services/committee_subscribe_mock.go @@ -0,0 +1,118 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/validator/committee_subscription (interfaces: CommitteeSubscribe) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./mock_services/committee_subscribe_mock.go -package=mock_services . CommitteeSubscribe +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + context "context" + reflect "reflect" + + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + solid "github.com/ledgerwatch/erigon/cl/cltypes/solid" + gomock "go.uber.org/mock/gomock" +) + +// MockCommitteeSubscribe is a mock of CommitteeSubscribe interface. +type MockCommitteeSubscribe struct { + ctrl *gomock.Controller + recorder *MockCommitteeSubscribeMockRecorder +} + +// MockCommitteeSubscribeMockRecorder is the mock recorder for MockCommitteeSubscribe. +type MockCommitteeSubscribeMockRecorder struct { + mock *MockCommitteeSubscribe +} + +// NewMockCommitteeSubscribe creates a new mock instance. +func NewMockCommitteeSubscribe(ctrl *gomock.Controller) *MockCommitteeSubscribe { + mock := &MockCommitteeSubscribe{ctrl: ctrl} + mock.recorder = &MockCommitteeSubscribeMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockCommitteeSubscribe) EXPECT() *MockCommitteeSubscribeMockRecorder { + return m.recorder +} + +// AddAttestationSubscription mocks base method. +func (m *MockCommitteeSubscribe) AddAttestationSubscription(arg0 context.Context, arg1 *cltypes.BeaconCommitteeSubscription) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddAttestationSubscription", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddAttestationSubscription indicates an expected call of AddAttestationSubscription. +func (mr *MockCommitteeSubscribeMockRecorder) AddAttestationSubscription(arg0, arg1 any) *MockCommitteeSubscribeAddAttestationSubscriptionCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddAttestationSubscription", reflect.TypeOf((*MockCommitteeSubscribe)(nil).AddAttestationSubscription), arg0, arg1) + return &MockCommitteeSubscribeAddAttestationSubscriptionCall{Call: call} +} + +// MockCommitteeSubscribeAddAttestationSubscriptionCall wrap *gomock.Call +type MockCommitteeSubscribeAddAttestationSubscriptionCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCommitteeSubscribeAddAttestationSubscriptionCall) Return(arg0 error) *MockCommitteeSubscribeAddAttestationSubscriptionCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCommitteeSubscribeAddAttestationSubscriptionCall) Do(f func(context.Context, *cltypes.BeaconCommitteeSubscription) error) *MockCommitteeSubscribeAddAttestationSubscriptionCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCommitteeSubscribeAddAttestationSubscriptionCall) DoAndReturn(f func(context.Context, *cltypes.BeaconCommitteeSubscription) error) *MockCommitteeSubscribeAddAttestationSubscriptionCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// CheckAggregateAttestation mocks base method. +func (m *MockCommitteeSubscribe) CheckAggregateAttestation(arg0 *solid.Attestation) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CheckAggregateAttestation", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// CheckAggregateAttestation indicates an expected call of CheckAggregateAttestation. +func (mr *MockCommitteeSubscribeMockRecorder) CheckAggregateAttestation(arg0 any) *MockCommitteeSubscribeCheckAggregateAttestationCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckAggregateAttestation", reflect.TypeOf((*MockCommitteeSubscribe)(nil).CheckAggregateAttestation), arg0) + return &MockCommitteeSubscribeCheckAggregateAttestationCall{Call: call} +} + +// MockCommitteeSubscribeCheckAggregateAttestationCall wrap *gomock.Call +type MockCommitteeSubscribeCheckAggregateAttestationCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCommitteeSubscribeCheckAggregateAttestationCall) Return(arg0 error) *MockCommitteeSubscribeCheckAggregateAttestationCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCommitteeSubscribeCheckAggregateAttestationCall) Do(f func(*solid.Attestation) error) *MockCommitteeSubscribeCheckAggregateAttestationCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCommitteeSubscribeCheckAggregateAttestationCall) DoAndReturn(f func(*solid.Attestation) error) *MockCommitteeSubscribeCheckAggregateAttestationCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/validator/sync_contribution_pool/interface.go b/cl/validator/sync_contribution_pool/interface.go new file mode 100644 index 00000000000..db021b333db --- /dev/null +++ b/cl/validator/sync_contribution_pool/interface.go @@ -0,0 +1,23 @@ +package sync_contribution_pool + +import ( + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" +) + +// SyncContributionPool is an interface for managing sync committee contributions and messages. +// it keeps a store of sync committee contributions, if new messages are received they are aggregated with pre-existing contributions. + +//go:generate mockgen -typed=true -destination=mock_services/sync_contribution_pool_mock.go -package=mock_services . SyncContributionPool +type SyncContributionPool interface { + // AddSyncContribution adds a sync committee contribution to the pool. + AddSyncContribution(headState *state.CachingBeaconState, contribution *cltypes.Contribution) error + // AddSyncCommitteeMessage aggretates a sync committee message to a contribution to the pool. + AddSyncCommitteeMessage(headState *state.CachingBeaconState, subCommitee uint64, message *cltypes.SyncCommitteeMessage) error + + // GetSyncContribution retrieves a sync contribution from the pool. + GetSyncContribution(slot, subcommitteeIndex uint64, beaconBlockRoot common.Hash) *cltypes.Contribution + // Obtain the sync aggregate for the sync messages pointing to a given beacon block root. + GetSyncAggregate(slot uint64, beaconBlockRoot common.Hash) (*cltypes.SyncAggregate, error) +} diff --git a/cl/validator/sync_contribution_pool/mock_services/sync_contribution_pool_mock.go b/cl/validator/sync_contribution_pool/mock_services/sync_contribution_pool_mock.go new file mode 100644 index 00000000000..37950068065 --- /dev/null +++ b/cl/validator/sync_contribution_pool/mock_services/sync_contribution_pool_mock.go @@ -0,0 +1,195 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool (interfaces: SyncContributionPool) +// +// Generated by this command: +// +// mockgen -typed=true -destination=mock_services/sync_contribution_pool_mock.go -package=mock_services . SyncContributionPool +// + +// Package mock_services is a generated GoMock package. +package mock_services + +import ( + reflect "reflect" + + common "github.com/ledgerwatch/erigon-lib/common" + cltypes "github.com/ledgerwatch/erigon/cl/cltypes" + state "github.com/ledgerwatch/erigon/cl/phase1/core/state" + gomock "go.uber.org/mock/gomock" +) + +// MockSyncContributionPool is a mock of SyncContributionPool interface. +type MockSyncContributionPool struct { + ctrl *gomock.Controller + recorder *MockSyncContributionPoolMockRecorder +} + +// MockSyncContributionPoolMockRecorder is the mock recorder for MockSyncContributionPool. +type MockSyncContributionPoolMockRecorder struct { + mock *MockSyncContributionPool +} + +// NewMockSyncContributionPool creates a new mock instance. +func NewMockSyncContributionPool(ctrl *gomock.Controller) *MockSyncContributionPool { + mock := &MockSyncContributionPool{ctrl: ctrl} + mock.recorder = &MockSyncContributionPoolMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSyncContributionPool) EXPECT() *MockSyncContributionPoolMockRecorder { + return m.recorder +} + +// AddSyncCommitteeMessage mocks base method. +func (m *MockSyncContributionPool) AddSyncCommitteeMessage(arg0 *state.CachingBeaconState, arg1 uint64, arg2 *cltypes.SyncCommitteeMessage) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddSyncCommitteeMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddSyncCommitteeMessage indicates an expected call of AddSyncCommitteeMessage. +func (mr *MockSyncContributionPoolMockRecorder) AddSyncCommitteeMessage(arg0, arg1, arg2 any) *MockSyncContributionPoolAddSyncCommitteeMessageCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddSyncCommitteeMessage", reflect.TypeOf((*MockSyncContributionPool)(nil).AddSyncCommitteeMessage), arg0, arg1, arg2) + return &MockSyncContributionPoolAddSyncCommitteeMessageCall{Call: call} +} + +// MockSyncContributionPoolAddSyncCommitteeMessageCall wrap *gomock.Call +type MockSyncContributionPoolAddSyncCommitteeMessageCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncContributionPoolAddSyncCommitteeMessageCall) Return(arg0 error) *MockSyncContributionPoolAddSyncCommitteeMessageCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncContributionPoolAddSyncCommitteeMessageCall) Do(f func(*state.CachingBeaconState, uint64, *cltypes.SyncCommitteeMessage) error) *MockSyncContributionPoolAddSyncCommitteeMessageCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncContributionPoolAddSyncCommitteeMessageCall) DoAndReturn(f func(*state.CachingBeaconState, uint64, *cltypes.SyncCommitteeMessage) error) *MockSyncContributionPoolAddSyncCommitteeMessageCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// AddSyncContribution mocks base method. +func (m *MockSyncContributionPool) AddSyncContribution(arg0 *state.CachingBeaconState, arg1 *cltypes.Contribution) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddSyncContribution", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddSyncContribution indicates an expected call of AddSyncContribution. +func (mr *MockSyncContributionPoolMockRecorder) AddSyncContribution(arg0, arg1 any) *MockSyncContributionPoolAddSyncContributionCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddSyncContribution", reflect.TypeOf((*MockSyncContributionPool)(nil).AddSyncContribution), arg0, arg1) + return &MockSyncContributionPoolAddSyncContributionCall{Call: call} +} + +// MockSyncContributionPoolAddSyncContributionCall wrap *gomock.Call +type MockSyncContributionPoolAddSyncContributionCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncContributionPoolAddSyncContributionCall) Return(arg0 error) *MockSyncContributionPoolAddSyncContributionCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncContributionPoolAddSyncContributionCall) Do(f func(*state.CachingBeaconState, *cltypes.Contribution) error) *MockSyncContributionPoolAddSyncContributionCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncContributionPoolAddSyncContributionCall) DoAndReturn(f func(*state.CachingBeaconState, *cltypes.Contribution) error) *MockSyncContributionPoolAddSyncContributionCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetSyncAggregate mocks base method. +func (m *MockSyncContributionPool) GetSyncAggregate(arg0 uint64, arg1 common.Hash) (*cltypes.SyncAggregate, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSyncAggregate", arg0, arg1) + ret0, _ := ret[0].(*cltypes.SyncAggregate) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetSyncAggregate indicates an expected call of GetSyncAggregate. +func (mr *MockSyncContributionPoolMockRecorder) GetSyncAggregate(arg0, arg1 any) *MockSyncContributionPoolGetSyncAggregateCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSyncAggregate", reflect.TypeOf((*MockSyncContributionPool)(nil).GetSyncAggregate), arg0, arg1) + return &MockSyncContributionPoolGetSyncAggregateCall{Call: call} +} + +// MockSyncContributionPoolGetSyncAggregateCall wrap *gomock.Call +type MockSyncContributionPoolGetSyncAggregateCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncContributionPoolGetSyncAggregateCall) Return(arg0 *cltypes.SyncAggregate, arg1 error) *MockSyncContributionPoolGetSyncAggregateCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncContributionPoolGetSyncAggregateCall) Do(f func(uint64, common.Hash) (*cltypes.SyncAggregate, error)) *MockSyncContributionPoolGetSyncAggregateCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncContributionPoolGetSyncAggregateCall) DoAndReturn(f func(uint64, common.Hash) (*cltypes.SyncAggregate, error)) *MockSyncContributionPoolGetSyncAggregateCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetSyncContribution mocks base method. +func (m *MockSyncContributionPool) GetSyncContribution(arg0, arg1 uint64, arg2 common.Hash) *cltypes.Contribution { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSyncContribution", arg0, arg1, arg2) + ret0, _ := ret[0].(*cltypes.Contribution) + return ret0 +} + +// GetSyncContribution indicates an expected call of GetSyncContribution. +func (mr *MockSyncContributionPoolMockRecorder) GetSyncContribution(arg0, arg1, arg2 any) *MockSyncContributionPoolGetSyncContributionCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSyncContribution", reflect.TypeOf((*MockSyncContributionPool)(nil).GetSyncContribution), arg0, arg1, arg2) + return &MockSyncContributionPoolGetSyncContributionCall{Call: call} +} + +// MockSyncContributionPoolGetSyncContributionCall wrap *gomock.Call +type MockSyncContributionPoolGetSyncContributionCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSyncContributionPoolGetSyncContributionCall) Return(arg0 *cltypes.Contribution) *MockSyncContributionPoolGetSyncContributionCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSyncContributionPoolGetSyncContributionCall) Do(f func(uint64, uint64, common.Hash) *cltypes.Contribution) *MockSyncContributionPoolGetSyncContributionCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSyncContributionPoolGetSyncContributionCall) DoAndReturn(f func(uint64, uint64, common.Hash) *cltypes.Contribution) *MockSyncContributionPoolGetSyncContributionCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/cl/validator/sync_contribution_pool/sync_contribution_pool.go b/cl/validator/sync_contribution_pool/sync_contribution_pool.go new file mode 100644 index 00000000000..e3e59f13eb6 --- /dev/null +++ b/cl/validator/sync_contribution_pool/sync_contribution_pool.go @@ -0,0 +1,237 @@ +package sync_contribution_pool + +import ( + "bytes" + "errors" + "sync" + + "github.com/Giulio2002/bls" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/utils" +) + +type syncContributionKey struct { + slot uint64 + subcommitteeIndex uint64 + beaconBlockRoot common.Hash +} + +type syncContributionPoolImpl struct { + // syncContributionPool is a map of sync contributions, indexed by slot, subcommittee index and block root. + syncContributionPoolForBlocks map[syncContributionKey]*cltypes.Contribution // Used for block publishing. + syncContributionPoolForAggregates map[syncContributionKey]*cltypes.Contribution // Used for sync committee messages aggregation. + beaconCfg *clparams.BeaconChainConfig + + mu sync.Mutex +} + +var ErrIsSuperset = errors.New("sync contribution is a superset of existing attestation") + +func NewSyncContributionPool(beaconCfg *clparams.BeaconChainConfig) SyncContributionPool { + return &syncContributionPoolImpl{ + syncContributionPoolForBlocks: make(map[syncContributionKey]*cltypes.Contribution), + syncContributionPoolForAggregates: make(map[syncContributionKey]*cltypes.Contribution), + beaconCfg: beaconCfg, + } +} + +func getSyncCommitteeFromState(s *state.CachingBeaconState) *solid.SyncCommittee { + cfg := s.BeaconConfig() + if cfg.SyncCommitteePeriod(s.Slot()) == cfg.SyncCommitteePeriod(s.Slot()+1) { + return s.CurrentSyncCommittee() + } + return s.NextSyncCommittee() + +} + +func (s *syncContributionPoolImpl) AddSyncContribution(headState *state.CachingBeaconState, contribution *cltypes.Contribution) error { + s.mu.Lock() + defer s.mu.Unlock() + + key := syncContributionKey{ + slot: contribution.Slot, + subcommitteeIndex: contribution.SubcommitteeIndex, + beaconBlockRoot: contribution.BeaconBlockRoot, + } + + baseContribution, ok := s.syncContributionPoolForBlocks[key] + if !ok { + s.syncContributionPoolForBlocks[key] = contribution.Copy() + return nil + } + if utils.BitsOnCount(baseContribution.AggregationBits) >= utils.BitsOnCount(contribution.AggregationBits) { + return ErrIsSuperset + } + s.syncContributionPoolForBlocks[key] = contribution.Copy() + return nil +} + +func (s *syncContributionPoolImpl) GetSyncContribution(slot, subcommitteeIndex uint64, beaconBlockRoot common.Hash) *cltypes.Contribution { + s.mu.Lock() + defer s.mu.Unlock() + + key := syncContributionKey{ + slot: slot, + subcommitteeIndex: subcommitteeIndex, + beaconBlockRoot: beaconBlockRoot, + } + + contribution, ok := s.syncContributionPoolForAggregates[key] // this should be exposed to the outside world. through Beacon API. + // Return a copies. + if !ok { + // if we dont have it return an empty contribution (no aggregation bits). + return &cltypes.Contribution{ + Slot: slot, + SubcommitteeIndex: subcommitteeIndex, + BeaconBlockRoot: beaconBlockRoot, + AggregationBits: make([]byte, cltypes.SyncCommitteeAggregationBitsSize), + Signature: bls.InfiniteSignature, + } + } + return contribution.Copy() +} + +func (s *syncContributionPoolImpl) cleanupOldContributions(headState *state.CachingBeaconState) { + for key := range s.syncContributionPoolForAggregates { + if headState.Slot() != key.slot { + delete(s.syncContributionPoolForAggregates, key) + } + } + for key := range s.syncContributionPoolForBlocks { + if headState.Slot() != key.slot { + delete(s.syncContributionPoolForBlocks, key) + } + } +} + +// AddSyncCommitteeMessage aggregates a sync committee message to a contribution to the pool. +func (s *syncContributionPoolImpl) AddSyncCommitteeMessage(headState *state.CachingBeaconState, subCommittee uint64, message *cltypes.SyncCommitteeMessage) error { + s.mu.Lock() + defer s.mu.Unlock() + + cfg := headState.BeaconConfig() + + key := syncContributionKey{ + slot: message.Slot, + subcommitteeIndex: subCommittee, + beaconBlockRoot: message.BeaconBlockRoot, + } + + // We retrieve a base contribution + contribution, ok := s.syncContributionPoolForAggregates[key] + if !ok { + contribution = &cltypes.Contribution{ + Slot: message.Slot, + SubcommitteeIndex: subCommittee, + BeaconBlockRoot: message.BeaconBlockRoot, + AggregationBits: make([]byte, cltypes.SyncCommitteeAggregationBitsSize), + Signature: bls.InfiniteSignature, + } + } + // We use the a copy of this contribution + contribution = contribution.Copy() // make a copy + // First we find the aggregation bits to which this validator needs to be turned on. + publicKey, err := headState.ValidatorPublicKey(int(message.ValidatorIndex)) + if err != nil { + return err + } + + committee := getSyncCommitteeFromState(headState).GetCommittee() + subCommitteeSize := cfg.SyncCommitteeSize / cfg.SyncCommitteeSubnetCount + startSubCommittee := subCommittee * subCommitteeSize + for i := startSubCommittee; i < startSubCommittee+subCommitteeSize; i++ { + if committee[i] == publicKey { // turn on this bit + if utils.IsBitOn(contribution.AggregationBits, int(i-startSubCommittee)) { + return nil + } + utils.FlipBitOn(contribution.AggregationBits, int(i-startSubCommittee)) + } + } + + // Compute the aggregated signature. + aggregatedSignature, err := bls.AggregateSignatures([][]byte{ + contribution.Signature[:], + message.Signature[:], + }) + if err != nil { + return err + } + copy(contribution.Signature[:], aggregatedSignature) + s.syncContributionPoolForAggregates[key] = contribution + s.cleanupOldContributions(headState) + return nil +} + +// GetSyncAggregate computes and returns the sync aggregate for the sync messages pointing to a given beacon block root. +/* +def process_sync_committee_contributions(block: BeaconBlock, + contributions: Set[SyncCommitteeContribution]) -> None: + sync_aggregate = SyncAggregate() + signatures = [] + sync_subcommittee_size = SYNC_COMMITTEE_SIZE // SYNC_COMMITTEE_SUBNET_COUNT + + for contribution in contributions: + subcommittee_index = contribution.subcommittee_index + for index, participated in enumerate(contribution.aggregation_bits): + if participated: + participant_index = sync_subcommittee_size * subcommittee_index + index + sync_aggregate.sync_committee_bits[participant_index] = True + signatures.append(contribution.signature) + + sync_aggregate.sync_committee_signature = bls.Aggregate(signatures) + block.body.sync_aggregate = sync_aggregate +*/ +func (s *syncContributionPoolImpl) GetSyncAggregate(slot uint64, beaconBlockRoot common.Hash) (*cltypes.SyncAggregate, error) { + s.mu.Lock() + defer s.mu.Unlock() + // find all contributions for the given beacon block root. + contributions := []*cltypes.Contribution{} + for key, contribution := range s.syncContributionPoolForBlocks { + if key.beaconBlockRoot == beaconBlockRoot && slot == key.slot { + contributions = append(contributions, contribution) + } + } + if len(contributions) == 0 { + return &cltypes.SyncAggregate{ // return an empty aggregate. + SyncCommiteeSignature: bls.InfiniteSignature, + }, nil + } + aggregate := &cltypes.SyncAggregate{} + signatures := [][]byte{} + syncSubCommitteeSize := s.beaconCfg.SyncCommitteeSize / s.beaconCfg.SyncCommitteeSubnetCount + // triple for-loop for the win. + for _, contribution := range contributions { + if bytes.Equal(contribution.AggregationBits, make([]byte, cltypes.SyncCommitteeAggregationBitsSize)) { + continue + } + for i := range contribution.AggregationBits { + for j := 0; j < 8; j++ { + bitIndex := i*8 + j + partecipated := utils.IsBitOn(contribution.AggregationBits, bitIndex) + if partecipated { + participantIndex := syncSubCommitteeSize*contribution.SubcommitteeIndex + uint64(bitIndex) + utils.FlipBitOn(aggregate.SyncCommiteeBits[:], int(participantIndex)) + } + } + } + signatures = append(signatures, contribution.Signature[:]) + } + if len(signatures) == 0 { + return &cltypes.SyncAggregate{ // return an empty aggregate. + SyncCommiteeSignature: bls.InfiniteSignature, + }, nil + } + // Aggregate the signatures. + aggregateSignature, err := bls.AggregateSignatures(signatures) + if err != nil { + return &cltypes.SyncAggregate{ // return an empty aggregate. + SyncCommiteeSignature: bls.InfiniteSignature, + }, err + } + copy(aggregate.SyncCommiteeSignature[:], aggregateSignature) + return aggregate, nil +} diff --git a/cl/validator/sync_contribution_pool/sync_contribution_pool_test.go b/cl/validator/sync_contribution_pool/sync_contribution_pool_test.go new file mode 100644 index 00000000000..7def33ed56c --- /dev/null +++ b/cl/validator/sync_contribution_pool/sync_contribution_pool_test.go @@ -0,0 +1,62 @@ +package sync_contribution_pool + +import ( + "testing" + + "github.com/Giulio2002/bls" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/phase1/core/state" + "github.com/ledgerwatch/erigon/cl/utils" + "github.com/stretchr/testify/require" +) + +var testHash = common.Hash{0x01, 0x02, 0x03, 0x04} + +func getTestCommitteesMessages(n int) (privateKeys [][]byte, messages []cltypes.SyncCommitteeMessage, s *state.CachingBeaconState) { + s = state.New(&clparams.MainnetBeaconConfig) + for i := 0; i < n; i++ { + privateKey, err := bls.GenerateKey() + if err != nil { + panic(err) + } + privateKeys = append(privateKeys, privateKey.Bytes()) + domain, err := s.GetDomain(s.BeaconConfig().DomainSyncCommittee, 0) + if err != nil { + panic(err) + } + msg := utils.Sha256(testHash[:], domain) + sig := privateKey.Sign(msg[:]) + message := cltypes.SyncCommitteeMessage{ + BeaconBlockRoot: testHash, + ValidatorIndex: uint64(i), + Signature: common.Bytes96(sig.Bytes()), + } + messages = append(messages, message) + v := solid.NewValidator() + v.SetPublicKey(common.Bytes48(bls.CompressPublicKey(privateKey.PublicKey()))) + s.AppendValidator(v) + currCommittee := s.CurrentSyncCommittee() + c := currCommittee.GetCommittee() + c[i] = common.Bytes48(bls.CompressPublicKey(privateKey.PublicKey())) + currCommittee.SetCommittee(c) + s.SetCurrentSyncCommittee(currCommittee) + } + return +} + +func TestSyncContributionPool(t *testing.T) { + _, msgs, s := getTestCommitteesMessages(16) + pool := NewSyncContributionPool(&clparams.MainnetBeaconConfig) + require.NoError(t, pool.AddSyncCommitteeMessage(s, 0, &msgs[0])) + require.NoError(t, pool.AddSyncCommitteeMessage(s, 0, &msgs[1])) + require.NoError(t, pool.AddSyncCommitteeMessage(s, 0, &msgs[2])) + + contribution := pool.GetSyncContribution(0, 0, testHash) + require.NotEqual(t, contribution.Signature, common.Bytes96(bls.InfiniteSignature)) + + contribution.SubcommitteeIndex = 1 + require.NoError(t, pool.AddSyncContribution(s, contribution)) +} diff --git a/cl/validator/validator_params/validator_params.go b/cl/validator/validator_params/validator_params.go new file mode 100644 index 00000000000..2118c104c22 --- /dev/null +++ b/cl/validator/validator_params/validator_params.go @@ -0,0 +1,27 @@ +package validator_params + +import ( + "sync" + + libcommon "github.com/ledgerwatch/erigon-lib/common" +) + +type ValidatorParams struct { + feeRecipients sync.Map +} + +func NewValidatorParams() *ValidatorParams { + return &ValidatorParams{} +} + +func (vp *ValidatorParams) SetFeeRecipient(validatorIndex uint64, feeRecipient libcommon.Address) { + vp.feeRecipients.Store(validatorIndex, feeRecipient) +} + +func (vp *ValidatorParams) GetFeeRecipient(validatorIndex uint64) (libcommon.Address, bool) { + val, ok := vp.feeRecipients.Load(validatorIndex) + if !ok { + return libcommon.Address{}, false + } + return val.(libcommon.Address), true +} diff --git a/cmd/capcli/cli.go b/cmd/capcli/cli.go index f012add350d..b124fc95e8d 100644 --- a/cmd/capcli/cli.go +++ b/cmd/capcli/cli.go @@ -2,10 +2,14 @@ package main import ( "context" + "encoding/json" "fmt" + "io" "math" + "net/http" "net/url" "os" + "strconv" "strings" "time" @@ -15,21 +19,21 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" lg "github.com/anacrolix/log" + "github.com/ledgerwatch/erigon-lib/direct" downloader3 "github.com/ledgerwatch/erigon-lib/downloader" "github.com/ledgerwatch/erigon-lib/metrics" state2 "github.com/ledgerwatch/erigon-lib/state" "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" "github.com/ledgerwatch/erigon-lib/downloader" - "github.com/ledgerwatch/erigon/cl/abstract" "github.com/ledgerwatch/erigon/cl/antiquary" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/clparams/initial_state" - "github.com/ledgerwatch/erigon/cl/cltypes" - persistence2 "github.com/ledgerwatch/erigon/cl/persistence" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" "github.com/ledgerwatch/erigon/cmd/caplin/caplin1" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/ethconfig/estimate" @@ -41,8 +45,6 @@ import ( "github.com/ledgerwatch/erigon-lib/downloader/downloadercfg" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon-lib/kv/mdbx" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" "github.com/ledgerwatch/erigon/cl/persistence/db_config" "github.com/ledgerwatch/erigon/cl/persistence/format/snapshot_format" @@ -54,25 +56,16 @@ import ( "github.com/ledgerwatch/erigon/cl/phase1/network" "github.com/ledgerwatch/erigon/cl/phase1/stages" "github.com/ledgerwatch/erigon/cl/rpc" - "github.com/ledgerwatch/erigon/cl/sentinel/peers" - "github.com/ledgerwatch/erigon/cl/transition/impl/eth2" - "github.com/ledgerwatch/erigon/cl/transition/machine" "github.com/ledgerwatch/erigon/cl/utils" - "github.com/jedib0t/go-pretty/v6/progress" - "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/log/v3" "github.com/spf13/afero" - "golang.org/x/sync/errgroup" "google.golang.org/grpc" + + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" ) var CLI struct { - Migrate Migrate `cmd:"" help:"migrate from one state to another"` - - Blocks Blocks `cmd:"" help:"download blocks from reqresp network"` - Epochs Epochs `cmd:"" help:"download epochs from reqresp network"` - Chain Chain `cmd:"" help:"download the entire chain from reqresp network"` DumpSnapshots DumpSnapshots `cmd:"" help:"generate caplin snapshots"` CheckSnapshots CheckSnapshots `cmd:"" help:"check snapshot folder against content of chain data"` @@ -80,14 +73,19 @@ var CLI struct { LoopSnapshots LoopSnapshots `cmd:"" help:"loop over snapshots"` RetrieveHistoricalState RetrieveHistoricalState `cmd:"" help:"retrieve historical state from db"` ChainEndpoint ChainEndpoint `cmd:"" help:"chain endpoint"` + ArchiveSanitizer ArchiveSanitizer `cmd:"" help:"archive sanitizer"` + BenchmarkNode BenchmarkNode `cmd:"" help:"benchmark node"` + BlobArchiveStoreCheck BlobArchiveStoreCheck `cmd:"" help:"blob archive store check"` + DumpBlobsSnapshots DumpBlobsSnapshots `cmd:"" help:"dump blobs snapshots"` + CheckBlobsSnapshots CheckBlobsSnapshots `cmd:"" help:"check blobs snapshots"` } type chainCfg struct { Chain string `help:"chain" default:"mainnet"` } -func (c *chainCfg) configs() (beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig, err error) { - genesisConfig, _, beaconConfig, _, err = clparams.GetConfigsByNetworkName(c.Chain) +func (c *chainCfg) configs() (beaconConfig *clparams.BeaconChainConfig, err error) { + _, beaconConfig, _, err = clparams.GetConfigsByNetworkName(c.Chain) return } @@ -122,264 +120,6 @@ func openFs(fsName string, path string) (afero.Fs, error) { return afero.NewBasePathFs(afero.NewBasePathFs(afero.NewOsFs(), fsName), path), nil } -type Blocks struct { - chainCfg - outputFolder - withSentinel - - FromBlock int `arg:"" name:"from" default:"0"` - ToBlock int `arg:"" name:"to" default:"-1"` -} - -func (b *Blocks) Run(ctx *Context) error { - s, err := b.withSentinel.connectSentinel() - if err != nil { - return err - } - beaconConfig, genesisConfig, err := b.configs() - if err != nil { - return err - } - - beacon := rpc.NewBeaconRpcP2P(ctx, s, beaconConfig, genesisConfig) - err = beacon.SetStatus( - genesisConfig.GenesisValidatorRoot, - beaconConfig.GenesisEpoch, - genesisConfig.GenesisValidatorRoot, - beaconConfig.GenesisSlot) - if err != nil { - return err - } - - if b.ToBlock < 0 { - b.ToBlock = int(utils.GetCurrentSlot(genesisConfig.GenesisTime, beaconConfig.SecondsPerSlot)) - } - - resp, _, err := beacon.SendBeaconBlocksByRangeReq(ctx, uint64(b.FromBlock), uint64(b.ToBlock)) - if err != nil { - return fmt.Errorf("error get beacon blocks: %w", err) - } - aferoFS, err := openFs(b.Datadir, "caplin/beacon") - if err != nil { - return err - } - - db := mdbx.MustOpen("caplin/db") - if err != nil { - return err - } - defer db.Close() - - tx, err := db.BeginRw(ctx) - if err != nil { - return err - } - defer tx.Rollback() - beaconDB := persistence2.NewBeaconChainDatabaseFilesystem(persistence2.NewAferoRawBlockSaver(aferoFS, beaconConfig), nil, beaconConfig) - for _, vv := range resp { - err := beaconDB.WriteBlock(ctx, tx, vv, true) - if err != nil { - return err - } - } - return nil -} - -type Epochs struct { - chainCfg - outputFolder - withSentinel - - Concurrency int `help:"number of epochs to ask concurrently for" name:"concurrency" short:"c" default:"4"` - - FromEpoch int `arg:"" name:"from" default:"0"` - ToEpoch int `arg:"" name:"to" default:"-1"` -} - -func (b *Epochs) Run(cctx *Context) error { - ctx := cctx.Context - s, err := b.withSentinel.connectSentinel() - if err != nil { - return err - } - beaconConfig, genesisConfig, err := b.configs() - if err != nil { - return err - } - - aferoFS, err := openFs(b.Datadir, "caplin/beacon") - if err != nil { - return err - } - - beaconDB := persistence.NewBeaconChainDatabaseFilesystem(persistence.NewAferoRawBlockSaver(aferoFS, beaconConfig), nil, beaconConfig) - - beacon := rpc.NewBeaconRpcP2P(ctx, s, beaconConfig, genesisConfig) - rpcSource := persistence2.NewBeaconRpcSource(beacon) - - err = beacon.SetStatus( - genesisConfig.GenesisValidatorRoot, - beaconConfig.GenesisEpoch, - genesisConfig.GenesisValidatorRoot, - beaconConfig.GenesisSlot) - if err != nil { - return err - } - - if b.ToEpoch < 0 { - b.ToEpoch = int(utils.GetCurrentEpoch(genesisConfig.GenesisTime, beaconConfig.SecondsPerSlot, beaconConfig.SlotsPerEpoch)) - } - - ctx, cn := context.WithCancel(ctx) - defer cn() - egg, ctx := errgroup.WithContext(ctx) - - totalEpochs := (b.ToEpoch - b.FromEpoch + 1) - pw := progress.NewWriter() - pw.SetTrackerLength(50) - pw.SetMessageWidth(24) - pw.SetStyle(progress.StyleDefault) - pw.SetUpdateFrequency(time.Millisecond * 100) - pw.SetTrackerPosition(progress.PositionRight) - pw.Style().Visibility.Percentage = true - pw.Style().Visibility.Speed = true - pw.Style().Visibility.Value = true - pw.Style().Visibility.ETA = true - pw.Style().Visibility.ETAOverall = false - pw.Style().Visibility.Tracker = true - pw.Style().Visibility.TrackerOverall = false - pw.Style().Visibility.SpeedOverall = true - pw.Style().Options.Separator = "" - - go pw.Render() - - total := int64(uint64(totalEpochs) * beaconConfig.SlotsPerEpoch) - tk := &progress.Tracker{ - Message: fmt.Sprintf("downloading %d blocks", total), - Total: total, - Units: progress.UnitsDefault, - } - pw.AppendTracker(tk) - tk.UpdateTotal(total) - - egg.SetLimit(b.Concurrency) - - db := mdbx.MustOpen("caplin/db") - if err != nil { - return err - } - defer db.Close() - - tx, err := db.BeginRw(ctx) - if err != nil { - return err - } - defer tx.Rollback() - defer cn() - for i := b.FromEpoch; i <= b.ToEpoch; i = i + 1 { - ii := i - egg.Go(func() error { - var blocks *peers.PeeredObject[[]*cltypes.SignedBeaconBlock] - for { - blocks, err = rpcSource.GetRange(ctx, tx, uint64(ii)*beaconConfig.SlotsPerEpoch, beaconConfig.SlotsPerEpoch) - if err != nil { - log.Error("dl error", "err", err, "epoch", ii) - } else { - break - } - } - for _, v := range blocks.Data { - tk.Increment(1) - _, _ = beaconDB, v - err := beaconDB.WriteBlock(ctx, tx, v, true) - if err != nil { - return err - } - } - return nil - }) - } - err = egg.Wait() - if err != nil { - return err - } - tk.MarkAsDone() - return tx.Commit() -} - -type Migrate struct { - outputFolder - chainCfg - - State string `arg:"" help:"state to start from (file or later url to checkpoint)"` - Blocks []string `arg:"" name:"blocks" help:"blocks to migrate, in order" type:"path"` -} - -func resolveState(source string, chain chainCfg) (abstract.BeaconState, error) { - beaconConfig, _, err := chain.configs() - if err != nil { - return nil, err - } - s := state.New(beaconConfig) - switch { - default: - var stateByte []byte - if _, stateByte, err = clparams.ParseGenesisSSZToGenesisConfig( - source, - beaconConfig.GetCurrentStateVersion(0)); err != nil { - return nil, err - } - if s.DecodeSSZ(stateByte, int(beaconConfig.GetCurrentStateVersion(0))); err != nil { - return nil, err - } - return s, nil - case strings.HasPrefix(strings.ToLower(source), "http://"), strings.HasPrefix(strings.ToLower(source), "https://"): - } - return nil, fmt.Errorf("unknown state format: '%s'", source) -} - -func (m *Migrate) getBlock(ctx *Context, block string) (*cltypes.SignedBeaconBlock, error) { - afs := afero.NewOsFs() - - bts, err := afero.ReadFile(afs, block) - if err != nil { - return nil, err - } - b, _, err := m.chainCfg.configs() - if err != nil { - return nil, err - } - blk := cltypes.NewSignedBeaconBlock(b) - err = blk.DecodeSSZ(bts, 0) - if err != nil { - return nil, err - } - - return blk, nil -} - -func (m *Migrate) Run(ctx *Context) error { - state, err := resolveState(m.State, m.chainCfg) - if err != nil { - return err - } - // get the machine - cl := ð2.Impl{} - - // TODO: two queues for download and transition - for _, v := range m.Blocks { - blk, err := m.getBlock(ctx, v) - if err != nil { - return err - } - err = machine.TransitionState(cl, state, blk) - if err != nil { - return err - } - } - return nil -} - type Chain struct { chainCfg withSentinel @@ -392,7 +132,7 @@ func (c *Chain) Run(ctx *Context) error { return err } - genesisConfig, _, beaconConfig, networkType, err := clparams.GetConfigsByNetworkName(c.Chain) + _, beaconConfig, networkType, err := clparams.GetConfigsByNetworkName(c.Chain) if err != nil { return err } @@ -400,23 +140,20 @@ func (c *Chain) Run(ctx *Context) error { log.Info("Started chain download", "chain", c.Chain) dirs := datadir.New(c.Datadir) - snapshotVersion := snapcfg.KnownCfg(c.Chain, 0).Version - - csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs.Snap, snapshotVersion, log.Root()) - rawDB, _ := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - beaconDB, db, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, rawDB, dirs.CaplinIndexing, nil, false) + csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs, log.Root()) + bs, err := core.RetrieveBeaconState(ctx, beaconConfig, clparams.GetCheckpointSyncEndpoint(networkType)) if err != nil { return err } - defer db.Close() - - beacon := rpc.NewBeaconRpcP2P(ctx, s, beaconConfig, genesisConfig) - - bs, err := core.RetrieveBeaconState(ctx, beaconConfig, genesisConfig, clparams.GetCheckpointSyncEndpoint(networkType)) + ethClock := eth_clock.NewEthereumClock(bs.GenesisTime(), bs.GenesisValidatorsRoot(), beaconConfig) + db, blobStorage, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, ethClock, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) if err != nil { return err } + defer db.Close() + + beacon := rpc.NewBeaconRpcP2P(ctx, s, beaconConfig, ethClock) bRoot, err := bs.BlockRoot() if err != nil { @@ -430,16 +167,16 @@ func (c *Chain) Run(ctx *Context) error { } err = beacon.SetStatus( - genesisConfig.GenesisValidatorRoot, + ethClock.GenesisValidatorsRoot(), beaconConfig.GenesisEpoch, - genesisConfig.GenesisValidatorRoot, + ethClock.GenesisValidatorsRoot(), beaconConfig.GenesisSlot) if err != nil { return err } - downloader := network.NewBackwardBeaconDownloader(ctx, beacon, db) - cfg := stages.StageHistoryReconstruction(downloader, antiquary.NewAntiquary(ctx, nil, nil, nil, dirs, nil, nil, nil, nil, nil, nil, false, false, nil), csn, beaconDB, db, nil, genesisConfig, beaconConfig, true, true, bRoot, bs.Slot(), "/tmp", 300*time.Millisecond, log.Root()) + downloader := network.NewBackwardBeaconDownloader(ctx, beacon, nil, db) + cfg := stages.StageHistoryReconstruction(downloader, antiquary.NewAntiquary(ctx, nil, nil, nil, nil, dirs, nil, nil, nil, nil, nil, false, false, false), csn, db, nil, beaconConfig, true, false, true, bRoot, bs.Slot(), "/tmp", 300*time.Millisecond, nil, nil, blobStorage, log.Root()) return stages.SpawnStageHistoryDownload(cfg, ctx, log.Root()) } @@ -450,15 +187,19 @@ type ChainEndpoint struct { } func (c *ChainEndpoint) Run(ctx *Context) error { - genesisConfig, _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) + _, beaconConfig, ntype, err := clparams.GetConfigsByNetworkName(c.Chain) if err != nil { return err } log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) + bs, err := core.RetrieveBeaconState(ctx, beaconConfig, clparams.GetCheckpointSyncEndpoint(ntype)) + if err != nil { + return err + } + ethClock := eth_clock.NewEthereumClock(bs.GenesisTime(), bs.GenesisValidatorsRoot(), beaconConfig) dirs := datadir.New(c.Datadir) - rawDB, _ := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - beaconDB, db, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, rawDB, dirs.CaplinIndexing, nil, false) + db, _, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, ethClock, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) if err != nil { return err } @@ -470,7 +211,7 @@ func (c *ChainEndpoint) Run(ctx *Context) error { } log.Info("Hooked", "uri", baseUri) // Let's fetch the head first - currentBlock, err := core.RetrieveBlock(ctx, beaconConfig, genesisConfig, fmt.Sprintf("%s/head", baseUri), nil) + currentBlock, err := core.RetrieveBlock(ctx, beaconConfig, fmt.Sprintf("%s/head", baseUri), nil) if err != nil { return err } @@ -486,7 +227,7 @@ func (c *ChainEndpoint) Run(ctx *Context) error { log.Info("Starting with", "root", libcommon.Hash(currentRoot), "slot", currentBlock.Block.Slot) currentRoot = currentBlock.Block.ParentRoot - if err := beaconDB.WriteBlock(ctx, tx, currentBlock, true); err != nil { + if err := beacon_indicies.WriteBeaconBlockAndIndicies(ctx, tx, currentBlock, true); err != nil { return err } if err := tx.Commit(); err != nil { @@ -506,7 +247,7 @@ func (c *ChainEndpoint) Run(ctx *Context) error { stringifiedRoot := common.Bytes2Hex(currentRoot[:]) // Let's fetch the head first - currentBlock, err := core.RetrieveBlock(ctx, beaconConfig, genesisConfig, fmt.Sprintf("%s/0x%s", baseUri, stringifiedRoot), (*libcommon.Hash)(¤tRoot)) + currentBlock, err := core.RetrieveBlock(ctx, beaconConfig, fmt.Sprintf("%s/0x%s", baseUri, stringifiedRoot), (*libcommon.Hash)(¤tRoot)) if err != nil { return false, err } @@ -514,7 +255,7 @@ func (c *ChainEndpoint) Run(ctx *Context) error { if err != nil { return false, err } - if err := beaconDB.WriteBlock(ctx, tx, currentBlock, true); err != nil { + if err := beacon_indicies.WriteBeaconBlockAndIndicies(ctx, tx, currentBlock, true); err != nil { return false, err } currentRoot = currentBlock.Block.ParentRoot @@ -569,7 +310,7 @@ type DumpSnapshots struct { } func (c *DumpSnapshots) Run(ctx *Context) error { - _, _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) if err != nil { return err } @@ -579,8 +320,7 @@ func (c *DumpSnapshots) Run(ctx *Context) error { dirs := datadir.New(c.Datadir) log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) - rawDB, _ := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - beaconDB, db, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, rawDB, dirs.CaplinIndexing, nil, false) + db, _, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, nil, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) if err != nil { return err } @@ -594,9 +334,13 @@ func (c *DumpSnapshots) Run(ctx *Context) error { return }) - snapshotVersion := snapcfg.KnownCfg(c.Chain, 0).Version + salt, err := snaptype.GetIndexSalt(dirs.Snap) - return freezeblocks.DumpBeaconBlocks(ctx, db, beaconDB, snapshotVersion, 0, to, snaptype.Erigon2MergeLimit, dirs.Tmp, dirs.Snap, estimate.CompressSnapshot.Workers(), log.LvlInfo, log.Root()) + if err != nil { + return err + } + + return freezeblocks.DumpBeaconBlocks(ctx, db, 0, to, salt, dirs, estimate.CompressSnapshot.Workers(), log.LvlInfo, log.Root()) } type CheckSnapshots struct { @@ -606,7 +350,7 @@ type CheckSnapshots struct { } func (c *CheckSnapshots) Run(ctx *Context) error { - _, _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) if err != nil { return err } @@ -616,8 +360,7 @@ func (c *CheckSnapshots) Run(ctx *Context) error { dirs := datadir.New(c.Datadir) log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) - rawDB, _ := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - _, db, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, rawDB, dirs.CaplinIndexing, nil, false) + db, _, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, nil, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) if err != nil { return err } @@ -634,9 +377,8 @@ func (c *CheckSnapshots) Run(ctx *Context) error { } to = (to / snaptype.Erigon2MergeLimit) * snaptype.Erigon2MergeLimit - snapshotVersion := snapcfg.KnownCfg(c.Chain, 0).Version - csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs.Snap, snapshotVersion, log.Root()) + csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs, log.Root()) if err := csn.ReopenFolder(); err != nil { return err } @@ -688,7 +430,7 @@ type LoopSnapshots struct { func (c *LoopSnapshots) Run(ctx *Context) error { c.withProfile() - _, _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) if err != nil { return err } @@ -698,8 +440,7 @@ func (c *LoopSnapshots) Run(ctx *Context) error { dirs := datadir.New(c.Datadir) log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) - rawDB, _ := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - beaconDB, db, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, rawDB, dirs.CaplinIndexing, nil, false) + db, _, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, nil, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) if err != nil { return err } @@ -717,15 +458,13 @@ func (c *LoopSnapshots) Run(ctx *Context) error { to = (to / snaptype.Erigon2MergeLimit) * snaptype.Erigon2MergeLimit - snapshotVersion := snapcfg.KnownCfg(c.Chain, 0).Version - - csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs.Snap, snapshotVersion, log.Root()) + csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs, log.Root()) if err := csn.ReopenFolder(); err != nil { return err } br := &snapshot_format.MockBlockReader{} - snReader := freezeblocks.NewBeaconSnapshotReader(csn, br, beaconDB, beaconConfig) + snReader := freezeblocks.NewBeaconSnapshotReader(csn, br, beaconConfig) start := time.Now() for i := c.Slot; i < to; i++ { snReader.ReadBlockBySlot(ctx, tx, i) @@ -743,16 +482,14 @@ func (d *DownloadSnapshots) Run(ctx *Context) error { webSeeds := snapcfg.KnownWebseeds[d.Chain] dirs := datadir.New(d.Datadir) - _, _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(d.Chain) + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(d.Chain) if err != nil { return err } - rawDB, _ := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - log.Root().SetHandler(log.LvlFilterHandler(log.LvlDebug, log.StderrHandler)) - _, db, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, rawDB, dirs.CaplinIndexing, nil, false) + db, _, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, nil, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) if err != nil { return err } @@ -772,15 +509,15 @@ func (d *DownloadSnapshots) Run(ctx *Context) error { } version := "erigon: " + params.VersionWithCommit(params.GitCommit) - downloaderCfg, err := downloadercfg.New(dirs, version, lg.Info, downloadRate, uploadRate, 42069, 10, 3, nil, webSeeds, d.Chain) + downloaderCfg, err := downloadercfg.New(dirs, version, lg.Info, downloadRate, uploadRate, 42069, 10, 3, nil, webSeeds, d.Chain, true) if err != nil { return err } - downlo, err := downloader.New(ctx, downloaderCfg, dirs, log.Root(), log.LvlInfo, true) + downlo, err := downloader.New(ctx, downloaderCfg, log.Root(), log.LvlInfo, true) if err != nil { return err } - s, err := state2.NewAggregatorV3(ctx, dirs.Tmp, dirs.Tmp, 200000, db, log.Root()) + s, err := state2.NewAggregator(ctx, dirs.Tmp, dirs.Tmp, 200000, db, log.Root()) if err != nil { return err } @@ -790,12 +527,10 @@ func (d *DownloadSnapshots) Run(ctx *Context) error { return fmt.Errorf("new server: %w", err) } - snapshotVersion := snapcfg.KnownCfg(d.Chain, 0).Version - - return snapshotsync.WaitForDownloader(ctx, "CapCliDownloader", false, snapshotsync.OnlyCaplin, s, tx, + return snapshotsync.WaitForDownloader(ctx, "CapCliDownloader", false, false, snapshotsync.OnlyCaplin, s, tx, freezeblocks.NewBlockReader( - freezeblocks.NewRoSnapshots(ethconfig.NewSnapCfg(false, false, false), dirs.Snap, snapshotVersion, log.Root()), - freezeblocks.NewBorRoSnapshots(ethconfig.NewSnapCfg(false, false, false), dirs.Snap, snapshotVersion, log.Root())), + freezeblocks.NewRoSnapshots(ethconfig.NewSnapCfg(false, false, false), dirs.Snap, 0, log.Root()), + freezeblocks.NewBorRoSnapshots(ethconfig.NewSnapCfg(false, false, false), dirs.Snap, 0, log.Root())), params.ChainConfigByChainName(d.Chain), direct.NewDownloaderClient(bittorrentServer), []string{}) } @@ -804,17 +539,17 @@ type RetrieveHistoricalState struct { outputFolder CompareFile string `help:"compare file" default:""` CompareSlot uint64 `help:"compare slot" default:"0"` + Out string `help:"output file" default:""` } func (r *RetrieveHistoricalState) Run(ctx *Context) error { vt := state_accessors.NewStaticValidatorTable() - _, _, beaconConfig, t, err := clparams.GetConfigsByNetworkName(r.Chain) + _, beaconConfig, t, err := clparams.GetConfigsByNetworkName(r.Chain) if err != nil { return err } dirs := datadir.New(r.Datadir) - rawDB, fs := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - beaconDB, db, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, rawDB, dirs.CaplinIndexing, nil, false) + db, _, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, nil, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) if err != nil { return err } @@ -825,9 +560,8 @@ func (r *RetrieveHistoricalState) Run(ctx *Context) error { return err } defer tx.Rollback() - snapshotVersion := snapcfg.KnownCfg(r.Chain, 0).Version - allSnapshots := freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{}, dirs.Snap, snapshotVersion, log.Root()) + allSnapshots := freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{}, dirs.Snap, 0, log.Root()) if err := allSnapshots.ReopenFolder(); err != nil { return err } @@ -838,17 +572,17 @@ func (r *RetrieveHistoricalState) Run(ctx *Context) error { var bor *freezeblocks.BorRoSnapshots blockReader := freezeblocks.NewBlockReader(allSnapshots, bor) eth1Getter := getters.NewExecutionSnapshotReader(ctx, beaconConfig, blockReader, db) - csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs.Snap, snapshotVersion, log.Root()) + csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs, log.Root()) if err := csn.ReopenFolder(); err != nil { return err } - snr := freezeblocks.NewBeaconSnapshotReader(csn, eth1Getter, beaconDB, beaconConfig) + snr := freezeblocks.NewBeaconSnapshotReader(csn, eth1Getter, beaconConfig) gSpot, err := initial_state.GetGenesisState(t) if err != nil { return err } - hr := historical_states_reader.NewHistoricalStatesReader(beaconConfig, snr, vt, fs, gSpot) + hr := historical_states_reader.NewHistoricalStatesReader(beaconConfig, snr, vt, gSpot) start := time.Now() haveState, err := hr.ReadHistoricalState(ctx, tx, r.CompareSlot) if err != nil { @@ -875,6 +609,13 @@ func (r *RetrieveHistoricalState) Run(ctx *Context) error { if err := haveState.DecodeSSZ(enc, int(v)); err != nil { return err } + if r.Out != "" { + // create file + if err := os.WriteFile(r.Out, enc, 0644); err != nil { + return err + } + } + hRoot, err = haveState.HashSSZ() if err != nil { return err @@ -897,7 +638,414 @@ func (r *RetrieveHistoricalState) Run(ctx *Context) error { return err } if hRoot != wRoot { + // for i := 0; i < haveState.PreviousEpochParticipation().Length(); i++ { + // if haveState.PreviousEpochParticipation().Get(i) != wantState.PreviousEpochParticipation().Get(i) { + // log.Info("Participation mismatch", "index", i, "have", haveState.PreviousEpochParticipation().Get(i), "want", wantState.PreviousEpochParticipation().Get(i)) + // } + // } return fmt.Errorf("state mismatch: got %s, want %s", libcommon.Hash(hRoot), libcommon.Hash(wRoot)) } return nil } + +type ArchiveSanitizer struct { + chainCfg + outputFolder + BeaconApiURL string `help:"beacon api url" default:"http://localhost:5555"` + IntervalSlot uint64 `help:"interval slot" default:"19"` // odd number so that we can test many potential cases. + StartSlot uint64 `help:"start slot" default:"0"` + FaultOut string `help:"fault out" default:""` +} + +func getHead(beaconApiURL string) (uint64, error) { + headResponse := map[string]interface{}{} + req, err := http.NewRequest("GET", fmt.Sprintf("%s/eth/v2/debug/beacon/heads", beaconApiURL), nil) + if err != nil { + return 0, err + } + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return 0, err + } + defer resp.Body.Close() + if err := json.NewDecoder(resp.Body).Decode(&headResponse); err != nil { + return 0, err + } + data := headResponse["data"].([]interface{}) + if len(data) == 0 { + return 0, fmt.Errorf("no head found") + } + head := data[0].(map[string]interface{}) + slotStr, ok := head["slot"].(string) + if !ok { + return 0, fmt.Errorf("no slot found") + } + slot, err := strconv.ParseUint(slotStr, 10, 64) + if err != nil { + return 0, err + } + return slot, nil +} + +func getStateRootAtSlot(beaconApiURL string, slot uint64) (libcommon.Hash, error) { + response := map[string]interface{}{} + req, err := http.NewRequest("GET", fmt.Sprintf("%s/eth/v1/beacon/states/%d/root", beaconApiURL, slot), nil) + if err != nil { + return libcommon.Hash{}, err + } + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return libcommon.Hash{}, err + } + if resp.StatusCode == http.StatusNotFound { + return libcommon.Hash{}, nil + } + defer resp.Body.Close() + if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { + return libcommon.Hash{}, err + } + data := response["data"].(map[string]interface{}) + if len(data) == 0 { + return libcommon.Hash{}, fmt.Errorf("no head found") + } + rootStr := data["root"].(string) + + return libcommon.HexToHash(rootStr), nil +} + +func getBeaconState(ctx context.Context, beaconConfig *clparams.BeaconChainConfig, uri string, slot uint64) (*state.CachingBeaconState, error) { + log.Info("[Checkpoint Sync] Requesting beacon state", "uri", uri) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) + if err != nil { + return nil, err + } + + req.Header.Set("Accept", "application/octet-stream") + if err != nil { + return nil, fmt.Errorf("checkpoint sync request failed %s", err) + } + r, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer func() { + err = r.Body.Close() + }() + if r.StatusCode != http.StatusOK { + return nil, fmt.Errorf("checkpoint sync failed, bad status code %d", r.StatusCode) + } + marshaled, err := io.ReadAll(r.Body) + if err != nil { + return nil, fmt.Errorf("checkpoint sync read failed %s", err) + } + + epoch := slot / beaconConfig.SlotsPerEpoch + + beaconState := state.New(beaconConfig) + err = beaconState.DecodeSSZ(marshaled, int(beaconConfig.GetCurrentStateVersion(epoch))) + if err != nil { + return nil, fmt.Errorf("checkpoint sync decode failed %s", err) + } + return beaconState, nil +} + +func (a *ArchiveSanitizer) Run(ctx *Context) error { + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(a.Chain) + if err != nil { + return err + } + log.Root().SetHandler(log.LvlFilterHandler(log.LvlDebug, log.StderrHandler)) + + // retrieve the head slot first through /eth/v2/debug/beacon/heads + headSlot, err := getHead(a.BeaconApiURL) + if err != nil { + return err + } + for i := a.StartSlot; i < headSlot; i += a.IntervalSlot { + // retrieve the state root at slot i and skip if not found (can happen) + stateRoot, err := getStateRootAtSlot(a.BeaconApiURL, i) + if err != nil { + return err + } + if stateRoot == (libcommon.Hash{}) { + continue + } + state, err := getBeaconState(ctx, beaconConfig, fmt.Sprintf("%s/eth/v2/debug/beacon/states/%d", a.BeaconApiURL, i), i) + if err != nil { + return err + } + stateRoot2, err := state.HashSSZ() + if err != nil { + return err + } + if stateRoot != stateRoot2 { + if a.FaultOut != "" { + enc, err := state.EncodeSSZ(nil) + if err != nil { + return err + } + if err := os.WriteFile(a.FaultOut, enc, 0644); err != nil { + return err + } + } + return fmt.Errorf("state mismatch at slot %d: got %x, want %x", i, stateRoot2, stateRoot) + } + log.Info("State at slot", "slot", i, "root", stateRoot) + } + return nil +} + +type BenchmarkNode struct { + chainCfg + BaseURL string `help:"base url" default:"http://localhost:5555"` + Endpoint string `help:"endpoint" default:"/eth/v1/beacon/states/{slot}/validators"` + OutCSV string `help:"output csv" default:""` + Accept string `help:"accept" default:"application/json"` + Head bool `help:"head" default:"false"` + Method string `help:"method" default:"GET"` + Body string `help:"body" default:"{}"` +} + +func (b *BenchmarkNode) Run(ctx *Context) error { + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(b.Chain) + if err != nil { + return err + } + log.Root().SetHandler(log.LvlFilterHandler(log.LvlDebug, log.StderrHandler)) + + // retrieve the head slot first through /eth/v2/debug/beacon/heads + headSlot, err := getHead(b.BaseURL) + if err != nil { + return err + } + startSlot := 0 + interval := 20_000 + if b.Head { + startSlot = int(headSlot) - 20 + interval = 1 + } + // make a csv file + f, err := os.Create(b.OutCSV) + if err != nil { + return err + } + defer f.Close() + _, err = f.WriteString("slot,elapsed\n") + if err != nil { + return err + } + + for i := uint64(startSlot); i < headSlot; i += uint64(interval) { + uri := b.BaseURL + b.Endpoint + uri = strings.Replace(uri, "{slot}", fmt.Sprintf("%d", i), 1) + uri = strings.Replace(uri, "{epoch}", fmt.Sprintf("%d", i/beaconConfig.SlotsPerEpoch), 1) + elapsed, err := timeRequest(uri, b.Accept, b.Method, b.Body) + if err != nil { + log.Warn("Failed to benchmark", "error", err, "uri", uri) + continue + } + _, err = f.WriteString(fmt.Sprintf("%d,%d\n", i, elapsed.Milliseconds())) + if err != nil { + return err + } + log.Info("Benchmarked", "slot", i, "elapsed", elapsed, "uri", uri) + } + return nil +} + +func timeRequest(uri, accept, method, body string) (time.Duration, error) { + req, err := http.NewRequest(method, uri, nil) + if err != nil { + return 0, err + } + if method == "POST" { + req.Body = io.NopCloser(strings.NewReader(body)) + } + req.Header.Set("Accept", accept) + start := time.Now() + r, err := http.DefaultClient.Do(req) + if err != nil { + return 0, err + } + defer r.Body.Close() + if r.StatusCode != http.StatusOK { + return 0, fmt.Errorf("bad status code %d", r.StatusCode) + } + _, err = io.ReadAll(r.Body) // we wait for the body to be read + if err != nil { + return 0, err + } + return time.Since(start), nil +} + +type BlobArchiveStoreCheck struct { + chainCfg + outputFolder + FromSlot uint64 `help:"from slot" default:"0"` +} + +func (b *BlobArchiveStoreCheck) Run(ctx *Context) error { + + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(b.Chain) + if err != nil { + return err + } + log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) + log.Info("Started archive node checking", "chain", b.Chain) + + dirs := datadir.New(b.Datadir) + + db, blobStorage, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, nil, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) + if err != nil { + return err + } + defer db.Close() + + csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs, log.Root()) + if err := csn.ReopenFolder(); err != nil { + return err + } + snr := freezeblocks.NewBeaconSnapshotReader(csn, nil, beaconConfig) + + targetSlot := beaconConfig.DenebForkEpoch * beaconConfig.SlotsPerEpoch + tx, err := db.BeginRo(ctx) + if err != nil { + return err + } + defer tx.Rollback() + for i := b.FromSlot; i >= targetSlot; i-- { + blk, err := snr.ReadBlindedBlockBySlot(ctx, tx, i) + if err != nil { + return err + } + if blk == nil { + continue + } + if blk.Version() < clparams.DenebVersion { + continue + } + if blk.Block.Slot%10_000 == 0 { + log.Info("Checking slot", "slot", blk.Block.Slot) + } + blockRoot, err := blk.Block.HashSSZ() + if err != nil { + return err + } + + haveBlobs, err := blobStorage.KzgCommitmentsCount(ctx, blockRoot) + if err != nil { + return err + } + if haveBlobs != uint32(blk.Block.Body.BlobKzgCommitments.Len()) { + if err := blobStorage.RemoveBlobSidecars(ctx, i, blockRoot); err != nil { + return err + } + log.Warn("Slot", "slot", i, "have", haveBlobs, "want", blk.Block.Body.BlobKzgCommitments.Len()) + } + } + log.Info("Blob archive store check passed") + return nil +} + +type DumpBlobsSnapshots struct { + chainCfg + outputFolder + + To uint64 `name:"to" help:"slot to dump"` +} + +func (c *DumpBlobsSnapshots) Run(ctx *Context) error { + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) + if err != nil { + return err + } + log.Root().SetHandler(log.LvlFilterHandler(log.LvlDebug, log.StderrHandler)) + log.Info("Started chain download", "chain", c.Chain) + + dirs := datadir.New(c.Datadir) + log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) + + db, blobStorage, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, nil, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) + if err != nil { + return err + } + var to uint64 + db.View(ctx, func(tx kv.Tx) (err error) { + if c.To == 0 { + to, err = beacon_indicies.ReadHighestFinalized(tx) + return + } + to = c.To + return + }) + from := ((beaconConfig.DenebForkEpoch * beaconConfig.SlotsPerEpoch) / snaptype.Erigon2MergeLimit) * snaptype.Erigon2MergeLimit + + salt, err := snaptype.GetIndexSalt(dirs.Snap) + + if err != nil { + return err + } + + return freezeblocks.DumpBlobsSidecar(ctx, blobStorage, db, from, to, salt, dirs, estimate.CompressSnapshot.Workers(), log.LvlInfo, log.Root()) +} + +type CheckBlobsSnapshots struct { + chainCfg + outputFolder + withPPROF +} + +func (c *CheckBlobsSnapshots) Run(ctx *Context) error { + _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) + if err != nil { + return err + } + c.withProfile() + log.Root().SetHandler(log.LvlFilterHandler(log.LvlDebug, log.StderrHandler)) + log.Info("Started the checking process", "chain", c.Chain) + dirs := datadir.New(c.Datadir) + log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) + + db, blobStorage, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, nil, dirs.CaplinIndexing, dirs.CaplinBlobs, nil, false, 0) + if err != nil { + return err + } + tx, err := db.BeginRo(ctx) + if err != nil { + return err + } + defer tx.Rollback() + + csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs, log.Root()) + if err := csn.ReopenFolder(); err != nil { + return err + } + to := csn.FrozenBlobs() + + for i := beaconConfig.SlotsPerEpoch*beaconConfig.DenebForkEpoch + 1; i < to; i++ { + sds, err := csn.ReadBlobSidecars(i) + if err != nil { + return err + } + blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, i) + if err != nil { + return err + } + + haveSds, _, err := blobStorage.ReadBlobSidecars(ctx, i, blockRoot) + if err != nil { + return err + } + for i, sd := range sds { + if sd.Blob != haveSds[i].Blob { + return fmt.Errorf("slot %d: blob %d mismatch", i, i) + } + } + if i%2000 == 0 { + log.Info("Successfully checked", "slot", i) + } + } + return nil +} diff --git a/cmd/caplin-regression/.gitignore b/cmd/caplin-regression/.gitignore deleted file mode 100644 index 6c2cc3b30ee..00000000000 --- a/cmd/caplin-regression/.gitignore +++ /dev/null @@ -1 +0,0 @@ -caplin-tests \ No newline at end of file diff --git a/cmd/caplin-regression/Makefile b/cmd/caplin-regression/Makefile deleted file mode 100644 index 710a44bba99..00000000000 --- a/cmd/caplin-regression/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -setup: - git clone https://github.com/Giulio2002/caplin-tests \ No newline at end of file diff --git a/cmd/caplin-regression/README.md b/cmd/caplin-regression/README.md deleted file mode 100644 index 2931b35940f..00000000000 --- a/cmd/caplin-regression/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Caplin Regression - -Tool to test for regressions in Caplin's components \ No newline at end of file diff --git a/cmd/caplin-regression/main.go b/cmd/caplin-regression/main.go deleted file mode 100644 index c9a6d7a9343..00000000000 --- a/cmd/caplin-regression/main.go +++ /dev/null @@ -1,70 +0,0 @@ -package main - -import ( - "flag" - "github.com/ledgerwatch/erigon-lib/metrics" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" - - "github.com/ledgerwatch/erigon/turbo/debug" - - "github.com/ledgerwatch/erigon/cmd/caplin-regression/regression" - "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" - - _ "net/http/pprof" //nolint:gosec -) - -var nameTestsMap = map[string]func(*forkchoice.ForkChoiceStore, *cltypes.SignedBeaconBlock) error{ - "TestRegressionWithValidation": regression.TestRegressionWithValidation, - "TestRegressionWithoutValidation": regression.TestRegressionWithoutValidation, - "TestRegressionBadBlocks": regression.TestRegressionBadBlocks, -} - -var excludeTests = []string{"TestRegressionBadBlocks"} - -func main() { - log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) - test := flag.String("test", "TestRegressionWithValidation", "select test to run. can be TestRegressionWithValidation, TestRegressionWithoutValidation and TestRegressionBadBlocks") - step := flag.Int("step", 32, "how often to log performance") - pprof := flag.Bool("pprof", true, "turn on profiling") - loop := flag.Bool("loop", true, "loop the test in an infinite loop") - testsDir := flag.String("testsDir", "cmd/caplin-regression/caplin-tests", "directory to the tests") - - all := flag.Bool("all", true, "loop trhough all the test") - - flag.Parse() - if _, ok := nameTestsMap[*test]; !ok { - log.Error("Could not start regression tests", "err", "test not found") - return - } - r, err := regression.NewRegressionTester( - *testsDir, - ) - if *pprof { - // Server for pprof - debug.StartPProf("localhost:6060", metrics.Setup("localhost:6060", log.Root())) - } - - if err != nil { - log.Error("Could not start regression tests", "err", err) - return - } - - for val := true; val; val = *loop { - if *all { - for name, t := range nameTestsMap { - if slices.Contains(excludeTests, name) { - continue - } - if err := r.Run(name, t, *step); err != nil { - log.Error("Could not do regression tests", "err", err) - } - } - continue - } - if err := r.Run(*test, nameTestsMap[*test], *step); err != nil { - log.Error("Could not do regression tests", "err", err) - } - } -} diff --git a/cmd/caplin-regression/regression/reader.go b/cmd/caplin-regression/regression/reader.go deleted file mode 100644 index c21f72a2adf..00000000000 --- a/cmd/caplin-regression/regression/reader.go +++ /dev/null @@ -1,54 +0,0 @@ -package regression - -import ( - "io/fs" - "os" - "path" - "path/filepath" - "sort" - - clparams2 "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/phase1/core/state" - "github.com/ledgerwatch/erigon/cl/utils" -) - -func (r *RegressionTester) readStartingState() (*state.CachingBeaconState, error) { - stateFile, err := os.ReadFile(path.Join(r.testDirectory, regressionPath, startingStatePath)) - if err != nil { - return nil, err - } - s := state.New(&clparams2.MainnetBeaconConfig) - if err := utils.DecodeSSZSnappy(s, stateFile, int(clparams2.CapellaVersion)); err != nil { - return nil, err - } - return s, nil -} - -func (r *RegressionTester) initBlocks() error { - r.blockList = nil - if err := filepath.Walk(filepath.Join(r.testDirectory, regressionPath, signedBeaconBlockPath), func(path string, info fs.FileInfo, err error) error { - if err != nil { - return err - } - if info == nil || info.IsDir() || info.Name() != "data.bin" { - return nil - } - f, err := os.ReadFile(path) - if err != nil { - return err - } - b := new(cltypes.SignedBeaconBlock) - if err := utils.DecodeSSZSnappy(b, f, int(clparams2.CapellaVersion)); err != nil { - return err - } - r.blockList = append(r.blockList, b) - return nil - }); err != nil { - return err - } - sort.Slice(r.blockList, func(i, j int) bool { - return r.blockList[i].Block.Slot < r.blockList[j].Block.Slot - }) - return nil -} diff --git a/cmd/caplin-regression/regression/tester.go b/cmd/caplin-regression/regression/tester.go deleted file mode 100644 index 9734b21894f..00000000000 --- a/cmd/caplin-regression/regression/tester.go +++ /dev/null @@ -1,115 +0,0 @@ -package regression - -import ( - "context" - "runtime" - "time" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - solid2 "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" - "github.com/ledgerwatch/erigon/cl/pool" - - "github.com/Giulio2002/bls" - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/dbg" - "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/fork_graph" - "github.com/ledgerwatch/log/v3" - "github.com/spf13/afero" -) - -const ( - regressionPath = "regression" - startingStatePath = "beaconState/0/data.bin" - signedBeaconBlockPath = "signedBeaconBlock" -) - -type RegressionTester struct { - testDirectory string - - // block list - blockList []*cltypes.SignedBeaconBlock -} - -func NewRegressionTester(testDirectory string) (*RegressionTester, error) { - reg := &RegressionTester{ - testDirectory: testDirectory, - } - return reg, reg.initBlocks() -} - -func (r *RegressionTester) Run(name string, fn func(*forkchoice.ForkChoiceStore, *cltypes.SignedBeaconBlock) error, step int) error { - state, err := r.readStartingState() - if err != nil { - return err - } - store, err := forkchoice.NewForkChoiceStore(context.Background(), state, nil, nil, pool.NewOperationsPool(&clparams.MainnetBeaconConfig), fork_graph.NewForkGraphDisk(state, afero.NewMemMapFs())) - if err != nil { - return err - } - log.Info("Loading public keys into memory") - bls.SetEnabledCaching(true) - state.ForEachValidator(func(v solid2.Validator, idx, total int) bool { - pk := v.PublicKey() - if err := bls.LoadPublicKeyIntoCache(pk[:], false); err != nil { - panic(err) - } - return true - }) - store.OnTick(uint64(time.Now().Unix())) - begin := time.Now() - beginStep := time.Now() - log.Info("Starting test, CTRL+C to stop.", "name", name) - for _, block := range r.blockList { - if err := fn(store, block); err != nil { - return err - } - if block.Block.Slot%uint64(step) == 0 { - elapsed := time.Since(beginStep) - log.Info("Processed", "slot", block.Block.Slot, "elapsed", elapsed, "sec/blk", elapsed/time.Duration(step)) - beginStep = time.Now() - } - } - - var m runtime.MemStats - dbg.ReadMemStats(&m) - sum := time.Since(begin) - log.Info("Finished/Restarting test", "name", name, "averageBlockTime", sum/time.Duration(len(r.blockList)), "sys", common.ByteCount(m.Sys)) - - return nil -} - -// 3 regression tests - -// Test fullValidation=true -func TestRegressionWithValidation(store *forkchoice.ForkChoiceStore, block *cltypes.SignedBeaconBlock) error { - if err := store.OnBlock(block, false, true); err != nil { - return err - } - block.Block.Body.Attestations.Range(func(index int, value *solid2.Attestation, length int) bool { - store.OnAttestation(value, true, true) - return true - }) - return nil -} - -// Test fullValidation=false -func TestRegressionWithoutValidation(store *forkchoice.ForkChoiceStore, block *cltypes.SignedBeaconBlock) error { - if err := store.OnBlock(block, false, false); err != nil { - return err - } - return nil -} - -// Test fullValidation=false, one badBlock, one good block (intervaled) -func TestRegressionBadBlocks(store *forkchoice.ForkChoiceStore, block *cltypes.SignedBeaconBlock) error { - block.Block.ProposerIndex++ - store.OnBlock(block, false, false) - // restore the block - block.Block.ProposerIndex-- - if err := store.OnBlock(block, false, false); err != nil { - return err - } - return nil -} diff --git a/cmd/caplin/caplin1/run.go b/cmd/caplin/caplin1/run.go index a2b27138178..b04def6aeec 100644 --- a/cmd/caplin/caplin1/run.go +++ b/cmd/caplin/caplin1/run.go @@ -2,28 +2,39 @@ package caplin1 import ( "context" + "fmt" "os" "path" "time" + "google.golang.org/grpc/credentials" + proto_downloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader" + "github.com/ledgerwatch/erigon/cl/aggregation" "github.com/ledgerwatch/erigon/cl/antiquary" "github.com/ledgerwatch/erigon/cl/beacon" - "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" + "github.com/ledgerwatch/erigon/cl/beacon/beaconevents" "github.com/ledgerwatch/erigon/cl/beacon/handler" "github.com/ledgerwatch/erigon/cl/beacon/synced_data" - "github.com/ledgerwatch/erigon/cl/beacon/validatorapi" "github.com/ledgerwatch/erigon/cl/clparams/initial_state" + "github.com/ledgerwatch/erigon/cl/cltypes" "github.com/ledgerwatch/erigon/cl/cltypes/solid" - "github.com/ledgerwatch/erigon/cl/freezer" - freezer2 "github.com/ledgerwatch/erigon/cl/freezer" + "github.com/ledgerwatch/erigon/cl/rpc" + "github.com/ledgerwatch/erigon/cl/sentinel" + "github.com/ledgerwatch/erigon/cl/sentinel/service" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/cl/validator/attestation_producer" + "github.com/ledgerwatch/erigon/cl/validator/committee_subscription" + "github.com/ledgerwatch/erigon/cl/validator/sync_contribution_pool" + "github.com/ledgerwatch/erigon/cl/validator/validator_params" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" - "github.com/ledgerwatch/erigon/cl/persistence" - persistence2 "github.com/ledgerwatch/erigon/cl/persistence" + "github.com/spf13/afero" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" "github.com/ledgerwatch/erigon/cl/persistence/db_config" "github.com/ledgerwatch/erigon/cl/persistence/format/snapshot_format" state_accessors "github.com/ledgerwatch/erigon/cl/persistence/state" @@ -33,36 +44,42 @@ import ( "github.com/ledgerwatch/erigon/cl/phase1/forkchoice" "github.com/ledgerwatch/erigon/cl/phase1/forkchoice/fork_graph" "github.com/ledgerwatch/erigon/cl/phase1/network" + "github.com/ledgerwatch/erigon/cl/phase1/network/services" "github.com/ledgerwatch/erigon/cl/phase1/stages" "github.com/ledgerwatch/erigon/cl/pool" - "github.com/ledgerwatch/erigon/cl/rpc" - "github.com/spf13/afero" "github.com/Giulio2002/bls" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/log/v3" ) func OpenCaplinDatabase(ctx context.Context, databaseConfig db_config.DatabaseConfiguration, beaconConfig *clparams.BeaconChainConfig, - rawBeaconChain persistence2.RawBeaconBlockChain, + ethClock eth_clock.EthereumClock, dbPath string, + blobDir string, engine execution_client.ExecutionEngine, wipeout bool, -) (persistence.BeaconChainDatabase, kv.RwDB, error) { + blobPruneDistance uint64, +) (kv.RwDB, blob_storage.BlobStorage, error) { dataDirIndexer := path.Join(dbPath, "beacon_indicies") + blobDbPath := path.Join(blobDir, "chaindata") + if wipeout { os.RemoveAll(dataDirIndexer) + os.RemoveAll(blobDbPath) } os.MkdirAll(dbPath, 0700) + os.MkdirAll(dataDirIndexer, 0700) db := mdbx.MustOpen(dataDirIndexer) + blobDB := mdbx.MustOpen(blobDbPath) tx, err := db.BeginRw(ctx) if err != nil { @@ -80,35 +97,26 @@ func OpenCaplinDatabase(ctx context.Context, { // start ticking forkChoice go func() { <-ctx.Done() - db.Close() // close sql database here + db.Close() // close sql database here + blobDB.Close() // close blob database here }() } - return persistence2.NewBeaconChainDatabaseFilesystem(rawBeaconChain, engine, beaconConfig), db, nil + return db, blob_storage.NewBlobStore(blobDB, afero.NewBasePathFs(afero.NewOsFs(), blobDir), blobPruneDistance, beaconConfig, ethClock), nil } -func RunCaplinPhase1(ctx context.Context, sentinel sentinel.SentinelClient, engine execution_client.ExecutionEngine, - beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig, state *state.CachingBeaconState, - caplinFreezer freezer.Freezer, dirs datadir.Dirs, snapshotVersion uint8, cfg beacon_router_configuration.RouterConfiguration, eth1Getter snapshot_format.ExecutionBlockReaderByNumber, - snDownloader proto_downloader.DownloaderClient, backfilling bool, states bool, historyDB persistence.BeaconChainDatabase, indexDB kv.RwDB) error { - rawDB, af := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - +func RunCaplinPhase1(ctx context.Context, engine execution_client.ExecutionEngine, config *ethconfig.Config, networkConfig *clparams.NetworkConfig, + beaconConfig *clparams.BeaconChainConfig, ethClock eth_clock.EthereumClock, state *state.CachingBeaconState, dirs datadir.Dirs, eth1Getter snapshot_format.ExecutionBlockReaderByNumber, + snDownloader proto_downloader.DownloaderClient, backfilling, blobBackfilling bool, states bool, indexDB kv.RwDB, blobStorage blob_storage.BlobStorage, creds credentials.TransportCredentials) error { ctx, cn := context.WithCancel(ctx) defer cn() - beaconRpc := rpc.NewBeaconRpcP2P(ctx, sentinel, beaconConfig, genesisConfig) - logger := log.New("app", "caplin") - csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs.Snap, snapshotVersion, logger) - rcsn := freezeblocks.NewBeaconSnapshotReader(csn, eth1Getter, historyDB, beaconConfig) - - if caplinFreezer != nil { - if err := freezer2.PutObjectSSZIntoFreezer("beaconState", "caplin_core", 0, state, caplinFreezer); err != nil { - return err - } - } + csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs, logger) + rcsn := freezeblocks.NewBeaconSnapshotReader(csn, eth1Getter, beaconConfig) pool := pool.NewOperationsPool(beaconConfig) + attestationProducer := attestation_producer.New(beaconConfig) caplinFcuPath := path.Join(dirs.Tmp, "caplin-forkchoice") os.RemoveAll(caplinFcuPath) @@ -117,8 +125,12 @@ func RunCaplinPhase1(ctx context.Context, sentinel sentinel.SentinelClient, engi return err } fcuFs := afero.NewBasePathFs(afero.NewOsFs(), caplinFcuPath) + syncedDataManager := synced_data.NewSyncedDataManager(true, beaconConfig) - forkChoice, err := forkchoice.NewForkChoiceStore(ctx, state, engine, caplinFreezer, pool, fork_graph.NewForkGraphDisk(state, fcuFs)) + syncContributionPool := sync_contribution_pool.NewSyncContributionPool(beaconConfig) + emitters := beaconevents.NewEmitters() + aggregationPool := aggregation.NewAggregationPool(ctx, beaconConfig, networkConfig, ethClock) + forkChoice, err := forkchoice.NewForkChoiceStore(ethClock, state, engine, pool, fork_graph.NewForkGraphDisk(state, fcuFs, config.BeaconRouter), emitters, syncedDataManager, blobStorage) if err != nil { logger.Error("Could not create forkchoice", "err", err) return err @@ -131,10 +143,57 @@ func RunCaplinPhase1(ctx context.Context, sentinel sentinel.SentinelClient, engi } return true }) - gossipManager := network.NewGossipReceiver(sentinel, forkChoice, beaconConfig, genesisConfig, caplinFreezer) + + forkDigest, err := ethClock.CurrentForkDigest() + if err != nil { + return err + } + activeIndicies := state.GetActiveValidatorsIndices(state.Slot() / beaconConfig.SlotsPerEpoch) + + sentinel, err := service.StartSentinelService(&sentinel.SentinelConfig{ + IpAddr: config.LightClientDiscoveryAddr, + Port: int(config.LightClientDiscoveryPort), + TCPPort: uint(config.LightClientDiscoveryTCPPort), + NetworkConfig: networkConfig, + BeaconConfig: beaconConfig, + TmpDir: dirs.Tmp, + EnableBlocks: true, + ActiveIndicies: uint64(len(activeIndicies)), + }, rcsn, blobStorage, indexDB, &service.ServerConfig{ + Network: "tcp", + Addr: fmt.Sprintf("%s:%d", config.SentinelAddr, config.SentinelPort), + Creds: creds, + Validator: config.BeaconRouter.Validator, + InitialStatus: &cltypes.Status{ + ForkDigest: forkDigest, + FinalizedRoot: state.FinalizedCheckpoint().BlockRoot(), + FinalizedEpoch: state.FinalizedCheckpoint().Epoch(), + HeadSlot: state.FinalizedCheckpoint().Epoch() * beaconConfig.SlotsPerEpoch, + HeadRoot: state.FinalizedCheckpoint().BlockRoot(), + }, + }, ethClock, forkChoice, logger) + if err != nil { + return err + } + beaconRpc := rpc.NewBeaconRpcP2P(ctx, sentinel, beaconConfig, ethClock) + committeeSub := committee_subscription.NewCommitteeSubscribeManagement(ctx, indexDB, beaconConfig, networkConfig, ethClock, sentinel, state, aggregationPool, syncedDataManager) + // Define gossip services + blockService := services.NewBlockService(ctx, indexDB, forkChoice, syncedDataManager, ethClock, beaconConfig, emitters) + blobService := services.NewBlobSidecarService(ctx, beaconConfig, forkChoice, syncedDataManager, ethClock, false) + syncCommitteeMessagesService := services.NewSyncCommitteeMessagesService(beaconConfig, ethClock, syncedDataManager, syncContributionPool, false) + attestationService := services.NewAttestationService(ctx, forkChoice, committeeSub, ethClock, syncedDataManager, beaconConfig, networkConfig) + syncContributionService := services.NewSyncContributionService(syncedDataManager, beaconConfig, syncContributionPool, ethClock, emitters, false) + aggregateAndProofService := services.NewAggregateAndProofService(ctx, syncedDataManager, forkChoice, beaconConfig, pool, false) + voluntaryExitService := services.NewVoluntaryExitService(pool, emitters, syncedDataManager, beaconConfig, ethClock) + blsToExecutionChangeService := services.NewBLSToExecutionChangeService(pool, emitters, syncedDataManager, beaconConfig) + proposerSlashingService := services.NewProposerSlashingService(pool, syncedDataManager, beaconConfig, ethClock) + // Create the gossip manager + gossipManager := network.NewGossipReceiver(sentinel, forkChoice, beaconConfig, ethClock, emitters, committeeSub, + blockService, blobService, syncCommitteeMessagesService, syncContributionService, aggregateAndProofService, + attestationService, voluntaryExitService, blsToExecutionChangeService, proposerSlashingService) { // start ticking forkChoice go func() { - tickInterval := time.NewTicker(50 * time.Millisecond) + tickInterval := time.NewTicker(2 * time.Millisecond) for { select { case <-tickInterval.C: @@ -142,7 +201,6 @@ func RunCaplinPhase1(ctx context.Context, sentinel sentinel.SentinelClient, engi case <-ctx.Done(): return } - } }() } @@ -187,7 +245,7 @@ func RunCaplinPhase1(ctx context.Context, sentinel sentinel.SentinelClient, engi } vTables := state_accessors.NewStaticValidatorTable() - // Read the the current table + // Read the current table if states { if err := state_accessors.ReadValidatorsTable(tx, vTables); err != nil { return err @@ -198,7 +256,7 @@ func RunCaplinPhase1(ctx context.Context, sentinel sentinel.SentinelClient, engi if err != nil { return err } - antiq := antiquary.NewAntiquary(ctx, genesisState, vTables, beaconConfig, dirs, snDownloader, indexDB, csn, rcsn, historyDB, logger, states, backfilling, af) + antiq := antiquary.NewAntiquary(ctx, blobStorage, genesisState, vTables, beaconConfig, dirs, snDownloader, indexDB, csn, rcsn, logger, states, backfilling, blobBackfilling) // Create the antiquary go func() { if err := antiq.Loop(); err != nil { @@ -210,25 +268,47 @@ func RunCaplinPhase1(ctx context.Context, sentinel sentinel.SentinelClient, engi return err } - statesReader := historical_states_reader.NewHistoricalStatesReader(beaconConfig, rcsn, vTables, af, genesisState) - syncedDataManager := synced_data.NewSyncedDataManager(cfg.Active, beaconConfig) - if cfg.Active { - apiHandler := handler.NewApiHandler(genesisConfig, beaconConfig, rawDB, indexDB, forkChoice, pool, rcsn, syncedDataManager, statesReader, sentinel, params.GitTag) - headApiHandler := &validatorapi.ValidatorApiHandler{ - FC: forkChoice, - BeaconChainCfg: beaconConfig, - GenesisCfg: genesisConfig, - } + statesReader := historical_states_reader.NewHistoricalStatesReader(beaconConfig, rcsn, vTables, genesisState) + validatorParameters := validator_params.NewValidatorParams() + if config.BeaconRouter.Active { + apiHandler := handler.NewApiHandler( + logger, + networkConfig, + ethClock, + beaconConfig, + indexDB, + forkChoice, + pool, + rcsn, + syncedDataManager, + statesReader, + sentinel, + params.GitTag, + &config.BeaconRouter, + emitters, + blobStorage, + csn, + validatorParameters, + attestationProducer, + engine, + syncContributionPool, + committeeSub, + aggregationPool, + syncCommitteeMessagesService, + syncContributionService, + aggregateAndProofService, + attestationService, + voluntaryExitService, + blsToExecutionChangeService, + proposerSlashingService, + ) go beacon.ListenAndServe(&beacon.LayeredBeaconHandler{ - ValidatorApi: headApiHandler, - ArchiveApi: apiHandler, - }, cfg) - log.Info("Beacon API started", "addr", cfg.Address) + ArchiveApi: apiHandler, + }, config.BeaconRouter) + log.Info("Beacon API started", "addr", config.BeaconRouter.Address) } - forkChoice.StartAttestationsRTT() - - stageCfg := stages.ClStagesCfg(beaconRpc, antiq, genesisConfig, beaconConfig, state, engine, gossipManager, forkChoice, historyDB, indexDB, csn, dirs.Tmp, dbConfig, backfilling, syncedDataManager) + stageCfg := stages.ClStagesCfg(beaconRpc, antiq, ethClock, beaconConfig, state, engine, gossipManager, forkChoice, indexDB, csn, rcsn, dirs.Tmp, dbConfig, backfilling, blobBackfilling, syncedDataManager, emitters, blobStorage, attestationProducer) sync := stages.ConsensusClStages(ctx, stageCfg) logger.Info("[Caplin] starting clstages loop") diff --git a/cmd/caplin/caplincli/config.go b/cmd/caplin/caplincli/config.go index 87b05181349..f4865f62b80 100644 --- a/cmd/caplin/caplincli/config.go +++ b/cmd/caplin/caplincli/config.go @@ -12,7 +12,6 @@ import ( "github.com/ledgerwatch/erigon/cl/phase1/core/state" "github.com/ledgerwatch/erigon/cmd/caplin/caplinflags" "github.com/ledgerwatch/erigon/cmd/sentinel/sentinelcli" - "github.com/ledgerwatch/erigon/cmd/sentinel/sentinelflags" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/log/v3" @@ -27,7 +26,7 @@ type CaplinCliCfg struct { ErigonPrivateApi string `json:"erigon_private_api"` TransitionChain bool `json:"transition_chain"` InitialSync bool `json:"initial_sync"` - NoBeaconApi bool `json:"no_beacon_api"` + AllowedEndpoints []string `json:"endpoints"` BeaconApiReadTimeout time.Duration `json:"beacon_api_read_timeout"` BeaconApiWriteTimeout time.Duration `json:"beacon_api_write_timeout"` BeaconAddr string `json:"beacon_addr"` @@ -57,22 +56,24 @@ func SetupCaplinCli(ctx *cli.Context) (cfg *CaplinCliCfg, err error) { cfg.ErigonPrivateApi = ctx.String(caplinflags.ErigonPrivateApiFlag.Name) - if ctx.String(sentinelflags.BeaconConfigFlag.Name) != "" { - var stateByte []byte - // Now parse genesis time and genesis fork - if *cfg.GenesisCfg, stateByte, err = clparams.ParseGenesisSSZToGenesisConfig( - ctx.String(sentinelflags.GenesisSSZFlag.Name), - cfg.BeaconCfg.GetCurrentStateVersion(0)); err != nil { - return nil, err - } + //T TODO(Giulio2002): Refactor later + // if ctx.String(sentinelflags.BeaconConfigFlag.Name) != "" { + // var stateByte []byte + // // Now parse genesis time and genesis fork + // if *cfg.GenesisCfg, stateByte, err = clparams.ParseGenesisSSZToGenesisConfig( + // ctx.String(sentinelflags.GenesisSSZFlag.Name), + // cfg.BeaconCfg.GetCurrentStateVersion(0)); err != nil { + // return nil, err + // } - cfg.InitalState = state.New(cfg.BeaconCfg) - if cfg.InitalState.DecodeSSZ(stateByte, int(cfg.BeaconCfg.GetCurrentStateVersion(0))); err != nil { - return nil, err - } - } + // cfg.InitalState = state.New(cfg.BeaconCfg) + // if cfg.InitalState.DecodeSSZ(stateByte, int(cfg.BeaconCfg.GetCurrentStateVersion(0))); err != nil { + // return nil, err + // } + // } + + cfg.AllowedEndpoints = ctx.StringSlice(utils.BeaconAPIFlag.Name) - cfg.NoBeaconApi = ctx.Bool(caplinflags.NoBeaconApi.Name) cfg.BeaconApiReadTimeout = time.Duration(ctx.Uint64(caplinflags.BeaconApiReadTimeout.Name)) * time.Second cfg.BeaconApiWriteTimeout = time.Duration(ctx.Uint(caplinflags.BeaconApiWriteTimeout.Name)) * time.Second cfg.BeaconAddr = fmt.Sprintf("%s:%d", ctx.String(caplinflags.BeaconApiAddr.Name), ctx.Int(caplinflags.BeaconApiPort.Name)) diff --git a/cmd/caplin/caplinflags/flags.go b/cmd/caplin/caplinflags/flags.go index c7929462588..84c858edbde 100644 --- a/cmd/caplin/caplinflags/flags.go +++ b/cmd/caplin/caplinflags/flags.go @@ -6,7 +6,7 @@ import ( ) var CliFlags = []cli.Flag{ - &NoBeaconApi, + &utils.BeaconAPIFlag, &BeaconApiReadTimeout, &BeaconApiWriteTimeout, &BeaconApiPort, diff --git a/cmd/caplin/main.go b/cmd/caplin/main.go index 9fea81304a9..4fec687c80e 100644 --- a/cmd/caplin/main.go +++ b/cmd/caplin/main.go @@ -16,18 +16,15 @@ import ( "fmt" "os" - "github.com/ledgerwatch/erigon-lib/chain/snapcfg" + "github.com/ledgerwatch/erigon-lib/common/disk" + "github.com/ledgerwatch/erigon-lib/common/mem" "github.com/ledgerwatch/erigon/cl/beacon/beacon_router_configuration" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/fork" - freezer2 "github.com/ledgerwatch/erigon/cl/freezer" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/db_config" "github.com/ledgerwatch/erigon/cl/phase1/core" "github.com/ledgerwatch/erigon/cl/phase1/core/state" execution_client2 "github.com/ledgerwatch/erigon/cl/phase1/execution_client" - "github.com/ledgerwatch/erigon/cl/sentinel" - "github.com/ledgerwatch/erigon/cl/sentinel/service" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" + "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/log/v3" "github.com/urfave/cli/v2" @@ -58,50 +55,66 @@ func runCaplinNode(cliCtx *cli.Context) error { log.Error("[Phase1] Could not initialize caplin", "err", err) return err } - if _, _, err := debug.Setup(cliCtx, true /* root logger */); err != nil { + if _, _, _, err := debug.Setup(cliCtx, true /* root logger */); err != nil { + return err + } + rcfg := beacon_router_configuration.RouterConfiguration{ + Protocol: cfg.BeaconProtocol, + Address: cfg.BeaconAddr, + ReadTimeTimeout: cfg.BeaconApiReadTimeout, + WriteTimeout: cfg.BeaconApiWriteTimeout, + IdleTimeout: cfg.BeaconApiWriteTimeout, + AllowedOrigins: cfg.AllowedOrigins, + AllowedMethods: cfg.AllowedMethods, + AllowCredentials: cfg.AllowCredentials, + } + if err := rcfg.UnwrapEndpointsList(cfg.AllowedEndpoints); err != nil { return err } log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(cfg.LogLvl), log.StderrHandler)) log.Info("[Phase1]", "chain", cliCtx.String(utils.ChainFlag.Name)) log.Info("[Phase1] Running Caplin") + + // setup periodic logging and prometheus updates + go mem.LogMemStats(cliCtx.Context, log.Root()) + go disk.UpdateDiskStats(cliCtx.Context, log.Root()) + // Either start from genesis or a checkpoint - ctx, cn := context.WithCancel(context.Background()) + ctx, cn := context.WithCancel(cliCtx.Context) defer cn() var state *state.CachingBeaconState if cfg.InitialSync { state = cfg.InitalState } else { - state, err = core.RetrieveBeaconState(ctx, cfg.BeaconCfg, cfg.GenesisCfg, cfg.CheckpointUri) + state, err = core.RetrieveBeaconState(ctx, cfg.BeaconCfg, cfg.CheckpointUri) if err != nil { return err } } - forkDigest, err := fork.ComputeForkDigest(cfg.BeaconCfg, cfg.GenesisCfg) - if err != nil { - return err - } + ethClock := eth_clock.NewEthereumClock(state.GenesisTime(), state.GenesisValidatorsRoot(), cfg.BeaconCfg) - sentinel, err := service.StartSentinelService(&sentinel.SentinelConfig{ - IpAddr: cfg.Addr, - Port: int(cfg.Port), - TCPPort: cfg.ServerTcpPort, - GenesisConfig: cfg.GenesisCfg, - NetworkConfig: cfg.NetworkCfg, - BeaconConfig: cfg.BeaconCfg, - NoDiscovery: cfg.NoDiscovery, - }, nil, nil, &service.ServerConfig{Network: cfg.ServerProtocol, Addr: cfg.ServerAddr}, nil, &cltypes.Status{ - ForkDigest: forkDigest, - FinalizedRoot: state.FinalizedCheckpoint().BlockRoot(), - FinalizedEpoch: state.FinalizedCheckpoint().Epoch(), - HeadSlot: state.FinalizedCheckpoint().Epoch() * cfg.BeaconCfg.SlotsPerEpoch, - HeadRoot: state.FinalizedCheckpoint().BlockRoot(), - }, log.Root()) - if err != nil { - log.Error("Could not start sentinel", "err", err) - } + // sentinel, err := service.StartSentinelService(&sentinel.SentinelConfig{ + // IpAddr: cfg.Addr, + // Port: int(cfg.Port), + // TCPPort: cfg.ServerTcpPort, + // GenesisConfig: cfg.GenesisCfg, + // NetworkConfig: cfg.NetworkCfg, + // BeaconConfig: cfg.BeaconCfg, + // NoDiscovery: cfg.NoDiscovery, + // EnableBlocks: true, + // }, nil, nil, &service.ServerConfig{Network: cfg.ServerProtocol, Addr: cfg.ServerAddr}, nil, &cltypes.Status{ + // ForkDigest: forkDigest, + // FinalizedRoot: state.FinalizedCheckpoint().BlockRoot(), + // FinalizedEpoch: state.FinalizedCheckpoint().Epoch(), + // HeadSlot: state.FinalizedCheckpoint().Epoch() * cfg.BeaconCfg.SlotsPerEpoch, + // HeadRoot: state.FinalizedCheckpoint().BlockRoot(), + // }, log.Root()) + // if err != nil { + // log.Error("Could not start sentinel", "err", err) + // } - log.Info("Sentinel started", "addr", cfg.ServerAddr) + // log.Info("Sentinel started", "addr", cfg.ServerAddr) if err != nil { log.Error("[Checkpoint Sync] Failed", "reason", err) @@ -109,7 +122,7 @@ func runCaplinNode(cliCtx *cli.Context) error { } var executionEngine execution_client2.ExecutionEngine if cfg.RunEngineAPI { - cc, err := execution_client2.NewExecutionClientRPC(ctx, cfg.JwtSecret, cfg.EngineAPIAddr, cfg.EngineAPIPort) + cc, err := execution_client2.NewExecutionClientRPC(cfg.JwtSecret, cfg.EngineAPIAddr, cfg.EngineAPIPort) if err != nil { log.Error("could not start engine api", "err", err) } @@ -117,29 +130,15 @@ func runCaplinNode(cliCtx *cli.Context) error { executionEngine = cc } - var caplinFreezer freezer2.Freezer - if cfg.RecordMode { - caplinFreezer = &freezer2.RootPathOsFs{ - Root: cfg.RecordDir, - } - } - rawBeaconBlockChainDb, _ := persistence.AferoRawBeaconBlockChainFromOsPath(cfg.BeaconCfg, cfg.Dirs.CaplinHistory) - historyDB, indiciesDB, err := caplin1.OpenCaplinDatabase(ctx, db_config.DefaultDatabaseConfiguration, cfg.BeaconCfg, rawBeaconBlockChainDb, cfg.Dirs.CaplinIndexing, executionEngine, false) + indiciesDB, blobStorage, err := caplin1.OpenCaplinDatabase(ctx, db_config.DefaultDatabaseConfiguration, cfg.BeaconCfg, ethClock, cfg.Dirs.CaplinIndexing, cfg.Dirs.CaplinBlobs, executionEngine, false, 100_000) if err != nil { return err } - snapshotVersion := snapcfg.KnownCfg(cliCtx.String(utils.ChainFlag.Name), 0).Version - - return caplin1.RunCaplinPhase1(ctx, sentinel, executionEngine, cfg.BeaconCfg, cfg.GenesisCfg, state, caplinFreezer, cfg.Dirs, snapshotVersion, beacon_router_configuration.RouterConfiguration{ - Protocol: cfg.BeaconProtocol, - Address: cfg.BeaconAddr, - ReadTimeTimeout: cfg.BeaconApiReadTimeout, - WriteTimeout: cfg.BeaconApiWriteTimeout, - IdleTimeout: cfg.BeaconApiWriteTimeout, - Active: !cfg.NoBeaconApi, - AllowedOrigins: cfg.AllowedOrigins, - AllowedMethods: cfg.AllowedMethods, - AllowCredentials: cfg.AllowCredentials, - }, nil, nil, false, false, historyDB, indiciesDB) + return caplin1.RunCaplinPhase1(ctx, executionEngine, ðconfig.Config{ + LightClientDiscoveryAddr: cfg.Addr, + LightClientDiscoveryPort: uint64(cfg.Port), + LightClientDiscoveryTCPPort: uint64(cfg.ServerTcpPort), + BeaconRouter: rcfg, + }, cfg.NetworkCfg, cfg.BeaconCfg, ethClock, state, cfg.Dirs, nil, nil, false, false, false, indiciesDB, blobStorage, nil) } diff --git a/cmd/devnet/contracts/lib/rlpreader.sol b/cmd/devnet/contracts/lib/rlpreader.sol index b2760333e77..9dad9a6658e 100644 --- a/cmd/devnet/contracts/lib/rlpreader.sol +++ b/cmd/devnet/contracts/lib/rlpreader.sol @@ -201,7 +201,7 @@ library RLPReader { assembly { result := mload(memPtr) - // shift to the correct location if neccesary + // shift to the correct location if necessary if lt(len, 32) { result := div(result, exp(256, sub(32, len))) } diff --git a/cmd/devnet/devnet/node.go b/cmd/devnet/devnet/node.go index 33f716aa3f3..32b2e8a7440 100644 --- a/cmd/devnet/devnet/node.go +++ b/cmd/devnet/devnet/node.go @@ -140,6 +140,7 @@ func (n *devnetNode) run(ctx *cli.Context) error { var logger log.Logger var err error var metricsMux *http.ServeMux + var pprofMux *http.ServeMux defer n.done() defer func() { @@ -152,7 +153,7 @@ func (n *devnetNode) run(ctx *cli.Context) error { n.Unlock() }() - if logger, metricsMux, err = debug.Setup(ctx, false /* rootLogger */); err != nil { + if logger, metricsMux, pprofMux, err = debug.Setup(ctx, false /* rootLogger */); err != nil { return err } @@ -184,9 +185,7 @@ func (n *devnetNode) run(ctx *cli.Context) error { n.ethNode, err = enode.New(ctx.Context, n.nodeCfg, n.ethCfg, logger) - if metricsMux != nil { - diagnostics.Setup(ctx, metricsMux, n.ethNode) - } + diagnostics.Setup(ctx, n.ethNode, metricsMux, pprofMux) n.Lock() if n.startErr != nil { diff --git a/cmd/devnet/devnetutils/utils.go b/cmd/devnet/devnetutils/utils.go index 6993eb90da4..7b5ecd97e4a 100644 --- a/cmd/devnet/devnetutils/utils.go +++ b/cmd/devnet/devnetutils/utils.go @@ -12,6 +12,7 @@ import ( "strings" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/log/v3" @@ -23,7 +24,7 @@ var ErrInvalidEnodeString = errors.New("invalid enode string") func ClearDevDB(dataDir string, logger log.Logger) error { logger.Info("Deleting nodes' data folders") - files, err := os.ReadDir(dataDir) + files, err := dir.ReadDir(dataDir) if err != nil { return err diff --git a/cmd/devnet/services/polygon/checkpoint.go b/cmd/devnet/services/polygon/checkpoint.go index 903919ecb49..206d1d3a1a5 100644 --- a/cmd/devnet/services/polygon/checkpoint.go +++ b/cmd/devnet/services/polygon/checkpoint.go @@ -65,15 +65,15 @@ var zeroAddress libcommon.Address func (c CheckpointBlock) ValidateBasic() error { if c.RootHash == zeroHash { - return fmt.Errorf("Invalid rootHash %v", c.RootHash.String()) + return fmt.Errorf("invalid rootHash %v", c.RootHash.String()) } if c.Proposer == zeroAddress { - return fmt.Errorf("Invalid proposer %v", c.Proposer.String()) + return fmt.Errorf("invalid proposer %v", c.Proposer.String()) } if c.StartBlock >= c.EndBlock || c.EndBlock == 0 { - return fmt.Errorf("Invalid startBlock %v or/and endBlock %v", c.StartBlock, c.EndBlock) + return fmt.Errorf("invalid startBlock %v or/and endBlock %v", c.StartBlock, c.EndBlock) } return nil @@ -126,7 +126,7 @@ func (h *Heimdall) startChildHeaderSubscription(ctx context.Context) { for childHeader := range childHeaderChan { if err := h.handleChildHeader(ctx, childHeader); err != nil { - if errors.Is(err, notEnoughChildChainTxConfirmationsError) { + if errors.Is(err, errNotEnoughChildChainTxConfirmations) { h.logger.Info("L2 header processing skipped", "header", childHeader.Number, "err", err) } else { h.logger.Error("L2 header processing failed", "header", childHeader.Number, "err", err) @@ -153,7 +153,7 @@ func (h *Heimdall) startRootHeaderBlockSubscription() { } } -var notEnoughChildChainTxConfirmationsError = errors.New("the chain doesn't have enough blocks for ChildChainTxConfirmations") +var errNotEnoughChildChainTxConfirmations = errors.New("the chain doesn't have enough blocks for ChildChainTxConfirmations") func (h *Heimdall) handleChildHeader(ctx context.Context, header *types.Header) error { @@ -162,7 +162,7 @@ func (h *Heimdall) handleChildHeader(ctx context.Context, header *types.Header) latestConfirmedChildBlock := header.Number.Int64() - int64(h.checkpointConfig.ChildChainTxConfirmations) if latestConfirmedChildBlock <= 0 { - return notEnoughChildChainTxConfirmationsError + return errNotEnoughChildChainTxConfirmations } timeStamp := uint64(time.Now().Unix()) @@ -177,29 +177,31 @@ func (h *Heimdall) handleChildHeader(ctx context.Context, header *types.Header) } h.pendingCheckpoint = &heimdall.Checkpoint{ - Timestamp: timeStamp, - StartBlock: big.NewInt(int64(expectedCheckpointState.newStart)), - EndBlock: big.NewInt(int64(expectedCheckpointState.newEnd)), + Fields: heimdall.WaypointFields{ + Timestamp: timeStamp, + StartBlock: big.NewInt(int64(expectedCheckpointState.newStart)), + EndBlock: big.NewInt(int64(expectedCheckpointState.newEnd)), + }, } } - if header.Number.Cmp(h.pendingCheckpoint.EndBlock) < 0 { + if header.Number.Cmp(h.pendingCheckpoint.EndBlock()) < 0 { return nil } - h.pendingCheckpoint.EndBlock = header.Number + h.pendingCheckpoint.Fields.EndBlock = header.Number - if !(h.pendingCheckpoint.Timestamp == 0 || - ((timeStamp > h.pendingCheckpoint.Timestamp) && timeStamp-h.pendingCheckpoint.Timestamp >= checkpointBufferTime)) { + if !(h.pendingCheckpoint.Timestamp() == 0 || + ((timeStamp > h.pendingCheckpoint.Timestamp()) && timeStamp-h.pendingCheckpoint.Timestamp() >= checkpointBufferTime)) { h.logger.Debug("Pendiing checkpoint awaiting buffer expiry", - "start", h.pendingCheckpoint.StartBlock, - "end", h.pendingCheckpoint.EndBlock, - "expiry", time.Unix(int64(h.pendingCheckpoint.Timestamp+checkpointBufferTime), 0)) + "start", h.pendingCheckpoint.StartBlock(), + "end", h.pendingCheckpoint.EndBlock(), + "expiry", time.Unix(int64(h.pendingCheckpoint.Timestamp()+checkpointBufferTime), 0)) return nil } - start := h.pendingCheckpoint.StartBlock.Uint64() - end := h.pendingCheckpoint.EndBlock.Uint64() + start := h.pendingCheckpoint.StartBlock().Uint64() + end := h.pendingCheckpoint.EndBlock().Uint64() shouldSend, err := h.shouldSendCheckpoint(start, end) @@ -453,7 +455,7 @@ func (h *Heimdall) createAndSendCheckpointToRootchain(ctx context.Context, start return err } - h.pendingCheckpoint.RootHash, err = h.getRootHash(ctx, start, end) + h.pendingCheckpoint.Fields.RootHash, err = h.getRootHash(ctx, start, end) if err != nil { return err @@ -463,7 +465,7 @@ func (h *Heimdall) createAndSendCheckpointToRootchain(ctx context.Context, start Proposer: h.checkpointConfig.CheckpointAccount.Address, StartBlock: start, EndBlock: end, - RootHash: h.pendingCheckpoint.RootHash, + RootHash: h.pendingCheckpoint.RootHash(), AccountRootHash: accountRoot, BorChainID: h.chainConfig.ChainID.String(), } @@ -568,24 +570,24 @@ func (h *Heimdall) handleRootHeaderBlock(event *contracts.TestRootChainNewHeader LogIndex: uint64(event.Raw.Index), } - if ack.StartBlock != h.pendingCheckpoint.StartBlock.Uint64() { + if ack.StartBlock != h.pendingCheckpoint.StartBlock().Uint64() { h.logger.Error("Invalid start block", "startExpected", h.pendingCheckpoint.StartBlock, "startReceived", ack.StartBlock) - return fmt.Errorf("Invalid Checkpoint Ack: Invalid start block") + return fmt.Errorf("invalid Checkpoint Ack: Invalid start block") } // Return err if start and end matches but contract root hash doesn't match - if ack.StartBlock == h.pendingCheckpoint.StartBlock.Uint64() && - ack.EndBlock == h.pendingCheckpoint.EndBlock.Uint64() && ack.RootHash != h.pendingCheckpoint.RootHash { + if ack.StartBlock == h.pendingCheckpoint.StartBlock().Uint64() && + ack.EndBlock == h.pendingCheckpoint.EndBlock().Uint64() && ack.RootHash != h.pendingCheckpoint.RootHash() { h.logger.Error("Invalid ACK", - "startExpected", h.pendingCheckpoint.StartBlock, + "startExpected", h.pendingCheckpoint.StartBlock(), "startReceived", ack.StartBlock, - "endExpected", h.pendingCheckpoint.EndBlock, + "endExpected", h.pendingCheckpoint.EndBlock(), "endReceived", ack.StartBlock, - "rootExpected", h.pendingCheckpoint.RootHash.String(), + "rootExpected", h.pendingCheckpoint.RootHash().String(), "rootRecieved", ack.RootHash.String(), ) - return fmt.Errorf("Invalid Checkpoint Ack: Invalid root hash") + return fmt.Errorf("invalid Checkpoint Ack: Invalid root hash") } h.latestCheckpoint = &ack diff --git a/cmd/devnet/services/polygon/heimdall.go b/cmd/devnet/services/polygon/heimdall.go index 80253bf276f..7a2e21c0d7d 100644 --- a/cmd/devnet/services/polygon/heimdall.go +++ b/cmd/devnet/services/polygon/heimdall.go @@ -78,8 +78,8 @@ type Heimdall struct { pendingCheckpoint *heimdall.Checkpoint latestCheckpoint *CheckpointAck ackWaiter *sync.Cond - currentSpan *heimdall.HeimdallSpan - spans map[uint64]*heimdall.HeimdallSpan + currentSpan *heimdall.Span + spans map[heimdall.SpanId]*heimdall.Span logger log.Logger cancelFunc context.CancelFunc syncSenderAddress libcommon.Address @@ -105,7 +105,7 @@ func NewHeimdall( borConfig: chainConfig.Bor.(*borcfg.BorConfig), listenAddr: serverURL[7:], checkpointConfig: *checkpointConfig, - spans: map[uint64]*heimdall.HeimdallSpan{}, + spans: map[heimdall.SpanId]*heimdall.Span{}, pendingSyncRecords: map[syncRecordKey]*EventRecordWithBlock{}, logger: logger} @@ -142,24 +142,26 @@ func NewHeimdall( return heimdall } -func (h *Heimdall) Span(ctx context.Context, spanID uint64) (*heimdall.HeimdallSpan, error) { +func (h *Heimdall) FetchSpan(ctx context.Context, spanID uint64) (*heimdall.Span, error) { h.Lock() defer h.Unlock() - if span, ok := h.spans[spanID]; ok { + if span, ok := h.spans[heimdall.SpanId(spanID)]; ok { h.currentSpan = span return span, nil } var nextSpan = heimdall.Span{ - ID: spanID, + Id: heimdall.SpanId(spanID), + ValidatorSet: *h.validatorSet, + ChainID: h.chainConfig.ChainID.String(), } if h.currentSpan == nil || spanID == 0 { nextSpan.StartBlock = 1 //256 } else { - if spanID != h.currentSpan.ID+1 { - return nil, fmt.Errorf("Can't initialize span: non consecutive span") + if spanID != uint64(h.currentSpan.Id+1) { + return nil, fmt.Errorf("can't initialize span: non consecutive span") } nextSpan.StartBlock = h.currentSpan.EndBlock + 1 @@ -169,24 +171,23 @@ func (h *Heimdall) Span(ctx context.Context, spanID uint64) (*heimdall.HeimdallS // TODO we should use a subset here - see: https://wiki.polygon.technology/docs/pos/bor/ - selectedProducers := make([]valset.Validator, len(h.validatorSet.Validators)) + nextSpan.SelectedProducers = make([]valset.Validator, len(h.validatorSet.Validators)) for i, v := range h.validatorSet.Validators { - selectedProducers[i] = *v + nextSpan.SelectedProducers[i] = *v } - h.currentSpan = &heimdall.HeimdallSpan{ - Span: nextSpan, - ValidatorSet: *h.validatorSet, - SelectedProducers: selectedProducers, - ChainID: h.chainConfig.ChainID.String(), - } + h.currentSpan = &nextSpan - h.spans[h.currentSpan.ID] = h.currentSpan + h.spans[h.currentSpan.Id] = h.currentSpan return h.currentSpan, nil } +func (h *Heimdall) FetchLatestSpan(ctx context.Context) (*heimdall.Span, error) { + return nil, fmt.Errorf("TODO") +} + func (h *Heimdall) currentSprintLength() int { if h.currentSpan != nil { return int(h.borConfig.CalculateSprintLength(h.currentSpan.StartBlock)) @@ -209,6 +210,10 @@ func (h *Heimdall) FetchCheckpointCount(ctx context.Context) (int64, error) { return 0, fmt.Errorf("TODO") } +func (h *Heimdall) FetchCheckpoints(ctx context.Context, page uint64, limit uint64) (heimdall.Checkpoints, error) { + return nil, fmt.Errorf("TODO") +} + func (h *Heimdall) FetchMilestone(ctx context.Context, number int64) (*heimdall.Milestone, error) { return nil, fmt.Errorf("TODO") } @@ -229,6 +234,14 @@ func (h *Heimdall) FetchMilestoneID(ctx context.Context, milestoneID string) err return fmt.Errorf("TODO") } +func (h *Heimdall) FetchStateSyncEvents(ctx context.Context, fromID uint64, to time.Time, limit int) ([]*heimdall.EventRecordWithTime, error) { + return nil, fmt.Errorf("TODO") +} + +func (h *Heimdall) FetchStateSyncEvent(ctx context.Context, id uint64) (*heimdall.EventRecordWithTime, error) { + return nil, fmt.Errorf("TODO") +} + func (h *Heimdall) Close() { h.unsubscribe() } @@ -434,7 +447,7 @@ func makeHeimdallRouter(ctx context.Context, client heimdall.HeimdallClient) *ch return } - result, err := client.StateSyncEvents(ctx, fromId, toTime) + result, err := client.FetchStateSyncEvents(ctx, fromId, time.Unix(toTime, 0), 0) writeResponse(w, result, err) }) @@ -445,7 +458,7 @@ func makeHeimdallRouter(ctx context.Context, client heimdall.HeimdallClient) *ch http.Error(w, http.StatusText(400), 400) return } - result, err := client.Span(ctx, id) + result, err := client.FetchSpan(ctx, id) writeResponse(w, result, err) }) @@ -470,6 +483,25 @@ func makeHeimdallRouter(ctx context.Context, client heimdall.HeimdallClient) *ch writeResponse(w, wrapResult(result), err) }) + router.Get("/checkpoints/list", func(w http.ResponseWriter, r *http.Request) { + pageStr := r.URL.Query().Get("page") + page, err := strconv.ParseUint(pageStr, 10, 64) + if err != nil { + http.Error(w, http.StatusText(400), 400) + return + } + + limitStr := r.URL.Query().Get("limit") + limit, err := strconv.ParseUint(limitStr, 10, 64) + if err != nil { + http.Error(w, http.StatusText(400), 400) + return + } + + result, err := client.FetchCheckpoints(ctx, page, limit) + writeResponse(w, wrapResult(result), err) + }) + router.Get("/milestone/{number}", func(w http.ResponseWriter, r *http.Request) { numberStr := chi.URLParam(r, "number") number, err := strconv.ParseInt(numberStr, 10, 64) diff --git a/cmd/devnet/services/polygon/heimdall_test.go b/cmd/devnet/services/polygon/heimdall_test.go index 0cb3e58ab94..97854dba2e7 100644 --- a/cmd/devnet/services/polygon/heimdall_test.go +++ b/cmd/devnet/services/polygon/heimdall_test.go @@ -7,8 +7,8 @@ import ( "testing" "time" - "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" "github.com/ledgerwatch/erigon/polygon/heimdall" ) @@ -36,22 +36,22 @@ func TestHeimdallServer(t *testing.T) { Time: time.Now(), }, } - client.EXPECT().StateSyncEvents(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(events, nil) + client.EXPECT().FetchStateSyncEvents(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes().Return(events, nil) - span := &heimdall.HeimdallSpan{ - Span: heimdall.Span{ - ID: 1, - StartBlock: 1000, - EndBlock: 2000, - }, - ChainID: "80001", + span := &heimdall.Span{ + Id: 1, + StartBlock: 1000, + EndBlock: 2000, + ChainID: "80001", } - client.EXPECT().Span(gomock.Any(), gomock.Any()).AnyTimes().Return(span, nil) + client.EXPECT().FetchSpan(gomock.Any(), gomock.Any()).AnyTimes().Return(span, nil) checkpoint1 := &heimdall.Checkpoint{ - StartBlock: big.NewInt(1000), - EndBlock: big.NewInt(1999), - BorChainID: "80001", + Fields: heimdall.WaypointFields{ + StartBlock: big.NewInt(1000), + EndBlock: big.NewInt(1999), + ChainID: "80001", + }, } client.EXPECT().FetchCheckpoint(gomock.Any(), gomock.Any()).AnyTimes().Return(checkpoint1, nil) client.EXPECT().FetchCheckpointCount(gomock.Any()).AnyTimes().Return(int64(1), nil) diff --git a/cmd/devnet/services/polygon/proofgenerator.go b/cmd/devnet/services/polygon/proofgenerator.go index 5b8d207af91..1dc24e77a0a 100644 --- a/cmd/devnet/services/polygon/proofgenerator.go +++ b/cmd/devnet/services/polygon/proofgenerator.go @@ -11,6 +11,7 @@ import ( "sync" "github.com/ledgerwatch/erigon/cl/merkle_tree" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" "golang.org/x/sync/errgroup" "github.com/ledgerwatch/erigon-lib/chain/networkname" @@ -27,7 +28,7 @@ import ( "github.com/ledgerwatch/erigon/turbo/trie" ) -var ErrTokenIndexOutOfRange = errors.New("Index is grater than the number of tokens in transaction") +var ErrTokenIndexOutOfRange = errors.New("index is grater than the number of tokens in transaction") type ProofGenerator struct { heimdall *Heimdall @@ -264,7 +265,7 @@ type receiptProof struct { } func getReceiptProof(ctx context.Context, node requests.RequestGenerator, receipt *types.Receipt, block *requests.Block, receipts []*types.Receipt) (*receiptProof, error) { - stateSyncTxHash := types.ComputeBorTxHash(block.Number.Uint64(), block.Hash) + stateSyncTxHash := bortypes.ComputeBorTxHash(block.Number.Uint64(), block.Hash) receiptsTrie := trie.New(trie.EmptyRoot) if len(receipts) == 0 { diff --git a/cmd/devnet/services/polygon/proofgenerator_test.go b/cmd/devnet/services/polygon/proofgenerator_test.go index 8c9bd9f985f..969ad04d1a5 100644 --- a/cmd/devnet/services/polygon/proofgenerator_test.go +++ b/cmd/devnet/services/polygon/proofgenerator_test.go @@ -283,8 +283,8 @@ func (c spanner) GetCurrentSpan(_ consensus.SystemCall) (*heimdall.Span, error) return &c.currentSpan, nil } -func (c *spanner) CommitSpan(heimdallSpan heimdall.HeimdallSpan, syscall consensus.SystemCall) error { - c.currentSpan = heimdallSpan.Span +func (c *spanner) CommitSpan(heimdallSpan heimdall.Span, syscall consensus.SystemCall) error { + c.currentSpan = heimdallSpan return nil } diff --git a/cmd/devnet/tests/bor_devnet_test.go b/cmd/devnet/tests/bor_devnet_test.go index 30cb8839d38..bf6a4834fe8 100644 --- a/cmd/devnet/tests/bor_devnet_test.go +++ b/cmd/devnet/tests/bor_devnet_test.go @@ -16,6 +16,8 @@ import ( ) func TestStateSync(t *testing.T) { + t.Skip() + runCtx, err := ContextStart(t, networkname.BorDevnetChainName) require.Nil(t, err) var ctx context.Context = runCtx diff --git a/cmd/devnet/tests/generic_devnet_test.go b/cmd/devnet/tests/generic_devnet_test.go index 8deddfb1fe8..c3aeda071e3 100644 --- a/cmd/devnet/tests/generic_devnet_test.go +++ b/cmd/devnet/tests/generic_devnet_test.go @@ -39,18 +39,24 @@ func testDynamicTx(t *testing.T, ctx context.Context) { } func TestDynamicTxNode0(t *testing.T) { + t.Skip() + runCtx, err := ContextStart(t, "") require.Nil(t, err) testDynamicTx(t, runCtx.WithCurrentNetwork(0).WithCurrentNode(0)) } func TestDynamicTxAnyNode(t *testing.T) { + t.Skip() + runCtx, err := ContextStart(t, "") require.Nil(t, err) testDynamicTx(t, runCtx.WithCurrentNetwork(0)) } func TestCallContract(t *testing.T) { + t.Skip() + runCtx, err := ContextStart(t, "") require.Nil(t, err) ctx := runCtx.WithCurrentNetwork(0) diff --git a/cmd/diag/_images/dbs/example_databases.png b/cmd/diag/_images/dbs/example_databases.png new file mode 100644 index 00000000000..5f74a2942bd Binary files /dev/null and b/cmd/diag/_images/dbs/example_databases.png differ diff --git a/cmd/diag/_images/dbs/example_databases_name.png b/cmd/diag/_images/dbs/example_databases_name.png new file mode 100644 index 00000000000..a1bbf5d01ca Binary files /dev/null and b/cmd/diag/_images/dbs/example_databases_name.png differ diff --git a/cmd/diag/_images/dbs/example_databases_name_populated.png b/cmd/diag/_images/dbs/example_databases_name_populated.png new file mode 100644 index 00000000000..aabef5b99c9 Binary files /dev/null and b/cmd/diag/_images/dbs/example_databases_name_populated.png differ diff --git a/cmd/diag/_images/downloader/example_downloader.png b/cmd/diag/_images/downloader/example_downloader.png new file mode 100644 index 00000000000..a74e48e1e40 Binary files /dev/null and b/cmd/diag/_images/downloader/example_downloader.png differ diff --git a/cmd/diag/_images/downloader/example_downloader_files.png b/cmd/diag/_images/downloader/example_downloader_files.png new file mode 100644 index 00000000000..5dab609515b Binary files /dev/null and b/cmd/diag/_images/downloader/example_downloader_files.png differ diff --git a/cmd/diag/_images/downloader/example_downloader_files_downloaded.png b/cmd/diag/_images/downloader/example_downloader_files_downloaded.png new file mode 100644 index 00000000000..7d120e2f714 Binary files /dev/null and b/cmd/diag/_images/downloader/example_downloader_files_downloaded.png differ diff --git a/cmd/diag/_images/downloader/example_downloader_files_filename.png b/cmd/diag/_images/downloader/example_downloader_files_filename.png new file mode 100644 index 00000000000..5ff5b5766ef Binary files /dev/null and b/cmd/diag/_images/downloader/example_downloader_files_filename.png differ diff --git a/cmd/diag/_images/local_connection.png b/cmd/diag/_images/local_connection.png new file mode 100644 index 00000000000..4b640cad181 Binary files /dev/null and b/cmd/diag/_images/local_connection.png differ diff --git a/cmd/diag/_images/stages/example_stages.png b/cmd/diag/_images/stages/example_stages.png new file mode 100644 index 00000000000..7c9891fc373 Binary files /dev/null and b/cmd/diag/_images/stages/example_stages.png differ diff --git a/cmd/diag/db/db.go b/cmd/diag/db/db.go new file mode 100644 index 00000000000..a9056ecc949 --- /dev/null +++ b/cmd/diag/db/db.go @@ -0,0 +1,197 @@ +package db + +import ( + "fmt" + "os" + + "github.com/jedib0t/go-pretty/v6/table" + "github.com/jedib0t/go-pretty/v6/text" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/cmd/diag/flags" + "github.com/ledgerwatch/erigon/cmd/diag/util" + "github.com/urfave/cli/v2" +) + +type DBInfo struct { + name string `header:"DB Name"` + tables []BDTableInfo `header:"Tables"` + count int `header:"Keys Count"` + size string `header:"Size"` +} + +type BDTableInfo struct { + Name string `header:"Table Name"` + Count int `header:"Keys Count"` + Size uint64 `header:"Size"` +} + +var ( + DBPopulatedFlag = cli.BoolFlag{ + Name: "db.appearance.populated", + Aliases: []string{"dbap"}, + Usage: "Print populated table content only", + Required: false, + Value: false, + } + + DBNameFlag = cli.StringFlag{ + Name: "db.name", + Aliases: []string{"dbn"}, + Usage: "DB name to print info about. If not set, all dbs will be printed.", + Required: false, + Value: "", + } +) + +var Command = cli.Command{ + Action: startPrintDBsInfo, + Name: "databases", + Aliases: []string{"dbs"}, + Usage: "Print database tables info.", + ArgsUsage: "", + Flags: []cli.Flag{ + &flags.DebugURLFlag, + &flags.OutputFlag, + &DBPopulatedFlag, + &DBNameFlag, + }, + Description: ``, +} + +func startPrintDBsInfo(cliCtx *cli.Context) error { + data, err := DBsInfo(cliCtx) + if err != nil { + util.RenderError(err) + return nil + } + + dbToPrint := cliCtx.String(DBNameFlag.Name) + + if dbToPrint != "" { + for _, db := range data { + if db.name == dbToPrint { + printDBsInfo([]DBInfo{db}) + return nil + } + } + + fmt.Printf("DB %s not found\n", dbToPrint) + return nil + } + + printDBsInfo(data) + + txt := text.Colors{text.BgGreen, text.Bold} + fmt.Println(txt.Sprint("To get detailed info about Erigon node state use 'diag ui' command.")) + return nil +} + +func printDBsInfo(data []DBInfo) { + txt := text.Colors{text.FgBlue, text.Bold} + fmt.Println(txt.Sprint("Databases Info:")) + t := table.NewWriter() + t.SetOutputMirror(os.Stdout) + t.AppendHeader(table.Row{"DB Name", "Keys Count", "Size"}) + + for _, db := range data { + t.AppendRow(table.Row{db.name, db.count, db.size}) + } + + t.AppendSeparator() + t.Render() + + t.ResetHeaders() + t.AppendHeader(table.Row{"Table Name", "Keys Count", "Size"}) + + for _, db := range data { + t.ResetRows() + fmt.Println(txt.Sprint("DB " + db.name + " tables:")) + for _, tbl := range db.tables { + t.AppendRow(table.Row{tbl.Name, tbl.Count, common.ByteCount(tbl.Size)}) + } + + t.AppendSeparator() + t.Render() + fmt.Print("\n") + } +} + +func DBsInfo(cliCtx *cli.Context) ([]DBInfo, error) { + data := make([]DBInfo, 0) + + dbsNames, err := getAllDbsNames(cliCtx) + if err != nil { + return data, err + } + + for _, dbName := range dbsNames { + tables, err := getDb(cliCtx, dbName) + if err != nil { + continue + } + + tCount := 0 + tSize := uint64(0) + for _, table := range tables { + tCount += table.Count + tSize += table.Size + } + + dbInfo := DBInfo{ + name: dbName, + tables: tables, + count: tCount, + size: common.ByteCount(tSize), + } + data = append(data, dbInfo) + } + + // filter out empty tables + if cliCtx.Bool(DBPopulatedFlag.Name) { + // filter out empty tables + for i := 0; i < len(data); i++ { + tables := data[i].tables + for j := 0; j < len(tables); j++ { + if tables[j].Count == 0 { + tables = append(tables[:j], tables[j+1:]...) + j-- + } + } + data[i].tables = tables + } + + //filter out empty dbs + for i := 0; i < len(data); i++ { + if len(data[i].tables) == 0 { + data = append(data[:i], data[i+1:]...) + i-- + } + } + } + + return data, nil +} + +func getAllDbsNames(cliCtx *cli.Context) ([]string, error) { + var data []string + url := "http://" + cliCtx.String(flags.DebugURLFlag.Name) + flags.ApiPath + "/dbs" + + err := util.MakeHttpGetCall(cliCtx.Context, url, &data) + if err != nil { + return data, err + } + + return data, nil +} + +func getDb(cliCtx *cli.Context, dbName string) ([]BDTableInfo, error) { + var data []BDTableInfo + url := "http://" + cliCtx.String(flags.DebugURLFlag.Name) + flags.ApiPath + "/dbs/" + dbName + "/tables" + + err := util.MakeHttpGetCall(cliCtx.Context, url, &data) + if err != nil { + return data, err + } + + return data, nil +} diff --git a/cmd/diag/downloader/diag_downloader.go b/cmd/diag/downloader/diag_downloader.go new file mode 100644 index 00000000000..4988f719ad7 --- /dev/null +++ b/cmd/diag/downloader/diag_downloader.go @@ -0,0 +1,384 @@ +package downloader + +import ( + "fmt" + "time" + + "github.com/jedib0t/go-pretty/v6/table" + "github.com/jedib0t/go-pretty/v6/text" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/diagnostics" + "github.com/ledgerwatch/erigon/cmd/diag/flags" + "github.com/ledgerwatch/erigon/cmd/diag/util" + "github.com/urfave/cli/v2" +) + +var ( + FileFilterFlag = cli.StringFlag{ + Name: "downloader.file.filter", + Aliases: []string{"dff"}, + Usage: "Filter files list [all|active|inactive|downloaded|queued], dafault value is all", + Required: false, + Value: "all", + } + + FileNameFlag = cli.StringFlag{ + Name: "downloader.file.name", + Aliases: []string{"dfn"}, + Usage: "File name to print details about.", + Required: false, + Value: "", + } +) + +var Command = cli.Command{ + Action: printDownloadStatus, + Name: "downloader", + Aliases: []string{"dl"}, + Usage: "Print snapshot download status", + ArgsUsage: "", + Flags: []cli.Flag{ + &flags.DebugURLFlag, + &flags.OutputFlag, + }, + Subcommands: []*cli.Command{ + { + Name: "files", + Aliases: []string{"fls"}, + Action: printFiles, + Usage: "Print snapshot download files status", + ArgsUsage: "", + Flags: []cli.Flag{ + &flags.DebugURLFlag, + &flags.OutputFlag, + &FileFilterFlag, + &FileNameFlag, + }, + }, + }, + Description: ``, +} + +func printDownloadStatus(cliCtx *cli.Context) error { + data, err := getData(cliCtx) + + if err != nil { + util.RenderError(err) + return nil + } + + snapshotDownloadStatus := getSnapshotStatusRow(data.SnapshotDownload) + + switch cliCtx.String(flags.OutputFlag.Name) { + case "json": + util.RenderJson(snapshotDownloadStatus) + + case "text": + util.RenderTableWithHeader( + "Snapshot download info:", + table.Row{"Status", "Progress", "Downloaded", "Total", "Time Left", "Total Time", "Download Rate", "Upload Rate", "Peers", "Files", "Connections", "Alloc", "Sys"}, + []table.Row{snapshotDownloadStatus}, + ) + } + + return nil +} + +func printFiles(cliCtx *cli.Context) error { + if cliCtx.String(FileNameFlag.Name) != "" { + return printFile(cliCtx) + } + + data, err := getData(cliCtx) + + if err != nil { + util.RenderError(err) + return nil + } + + snapshotDownloadStatus := getSnapshotStatusRow(data.SnapshotDownload) + + snapDownload := data.SnapshotDownload + + files := snapDownload.SegmentsDownloading + rows := []table.Row{} + + for _, file := range files { + rows = append(rows, getFileRow(file)) + } + + filteredRows := filterRows(rows, cliCtx.String(FileFilterFlag.Name)) + + switch cliCtx.String(flags.OutputFlag.Name) { + case "json": + util.RenderJson(snapshotDownloadStatus) + util.RenderJson(filteredRows) + case "text": + //Print overall status + util.RenderTableWithHeader( + "Snapshot download info:", + table.Row{"Status", "Progress", "Downloaded", "Total", "Time Left", "Total Time", "Download Rate", "Upload Rate", "Peers", "Files", "Connections", "Alloc", "Sys"}, + []table.Row{snapshotDownloadStatus}, + ) + + //Print files status + util.RenderTableWithHeader( + "Files download info:", + table.Row{"File", "Progress", "Total", "Downloaded", "Peers", "Peers Download Rate", "Webseeds", "Webseeds Download Rate", "Time Left", "Active"}, + filteredRows, + ) + } + + return nil +} + +func printFile(cliCtx *cli.Context) error { + data, err := getData(cliCtx) + + if err != nil { + return err + } + + snapDownload := data.SnapshotDownload + + if file, ok := snapDownload.SegmentsDownloading[cliCtx.String(FileNameFlag.Name)]; ok { + + if file.DownloadedBytes >= file.TotalBytes { + fileRow := getDownloadedFileRow(file) + switch cliCtx.String(flags.OutputFlag.Name) { + case "json": + util.RenderJson(fileRow) + case "text": + //Print file status + util.RenderTableWithHeader( + "File download info:", + table.Row{"File", "Size", "Average Download Rate", "Time Took"}, + []table.Row{fileRow}, + ) + } + } else { + fileRow := getFileRow(file) + filePeers := getPeersRows(file.Peers) + fileWebseeds := getPeersRows(file.Webseeds) + + switch cliCtx.String(flags.OutputFlag.Name) { + case "json": + util.RenderJson(fileRow) + util.RenderJson(filePeers) + util.RenderJson(fileWebseeds) + case "text": + //Print file status + util.RenderTableWithHeader( + "file download info:", + table.Row{"File", "Progress", "Total", "Downloaded", "Peers", "Peers Download Rate", "Webseeds", "Webseeds Download Rate", "Time Left", "Active"}, + []table.Row{fileRow}, + ) + + //Print peers and webseeds status + util.RenderTableWithHeader( + "", + table.Row{"Peer", "Download Rate"}, + filePeers, + ) + + util.RenderTableWithHeader( + "", + table.Row{"Webseed", "Download Rate"}, + fileWebseeds, + ) + } + } + } else { + txt := text.Colors{text.FgWhite, text.BgRed} + fmt.Printf("%s %s", txt.Sprint("[ERROR]"), "File with name: "+cliCtx.String(FileNameFlag.Name)+" does not exist.") + } + + return nil +} + +func getDownloadedFileRow(file diagnostics.SegmentDownloadStatistics) table.Row { + averageDownloadRate := common.ByteCount(file.DownloadedStats.AverageRate) + "/s" + totalDownloadTimeString := time.Duration(file.DownloadedStats.TimeTook) * time.Second + + row := table.Row{ + file.Name, + common.ByteCount(file.TotalBytes), + averageDownloadRate, + totalDownloadTimeString.String(), + } + + return row +} + +func getSnapshotStatusRow(snapDownload diagnostics.SnapshotDownloadStatistics) table.Row { + status := "Downloading" + if snapDownload.DownloadFinished { + status = "Finished" + } + + downloadedPercent := getPercentDownloaded(snapDownload.Downloaded, snapDownload.Total) + + remainingBytes := snapDownload.Total - snapDownload.Downloaded + downloadTimeLeft := diagnostics.CalculateTime(remainingBytes, snapDownload.DownloadRate) + + totalDownloadTimeString := time.Duration(snapDownload.TotalTime) * time.Second + + rowObj := table.Row{ + status, // Status + downloadedPercent, // Progress + common.ByteCount(snapDownload.Downloaded), // Downloaded + common.ByteCount(snapDownload.Total), // Total + downloadTimeLeft, // Time Left + totalDownloadTimeString.String(), // Total Time + common.ByteCount(snapDownload.DownloadRate) + "/s", // Download Rate + common.ByteCount(snapDownload.UploadRate) + "/s", // Upload Rate + snapDownload.Peers, // Peers + snapDownload.Files, // Files + snapDownload.Connections, // Connections + common.ByteCount(snapDownload.Alloc), // Alloc + common.ByteCount(snapDownload.Sys), // Sys + } + + return rowObj +} + +func getFileRow(file diagnostics.SegmentDownloadStatistics) table.Row { + peersDownloadRate := getFileDownloadRate(file.Peers) + webseedsDownloadRate := getFileDownloadRate(file.Webseeds) + totalDownloadRate := peersDownloadRate + webseedsDownloadRate + downloadedPercent := getPercentDownloaded(file.DownloadedBytes, file.TotalBytes) + remainingBytes := file.TotalBytes - file.DownloadedBytes + downloadTimeLeft := diagnostics.CalculateTime(remainingBytes, totalDownloadRate) + isActive := "false" + if totalDownloadRate > 0 { + isActive = "true" + } + + row := table.Row{ + file.Name, + downloadedPercent, + common.ByteCount(file.TotalBytes), + common.ByteCount(file.DownloadedBytes), + len(file.Peers), + common.ByteCount(peersDownloadRate) + "/s", + len(file.Webseeds), + common.ByteCount(webseedsDownloadRate) + "/s", + downloadTimeLeft, + isActive, + } + + return row +} + +func getPeersRows(peers []diagnostics.SegmentPeer) []table.Row { + rows := make([]table.Row, 0) + + for _, peer := range peers { + row := table.Row{ + peer.Url, + common.ByteCount(peer.DownloadRate) + "/s", + } + + rows = append(rows, row) + } + + return rows +} + +func getFileDownloadRate(peers []diagnostics.SegmentPeer) uint64 { + var downloadRate uint64 + + for _, peer := range peers { + downloadRate += peer.DownloadRate + } + + return downloadRate +} + +func getData(cliCtx *cli.Context) (diagnostics.SyncStatistics, error) { + var data diagnostics.SyncStatistics + url := "http://" + cliCtx.String(flags.DebugURLFlag.Name) + flags.ApiPath + "/snapshot-sync" + + err := util.MakeHttpGetCall(cliCtx.Context, url, &data) + + if err != nil { + return data, err + } + + return data, nil +} + +func filterRows(rows []table.Row, filter string) []table.Row { + switch filter { + case "all": + return rows + case "active": + return filterActive(rows) + case "inactive": + return filterInactive(rows) + case "downloaded": + return filterDownloaded(rows) + case "queued": + return filterQueued(rows) + } + + return rows +} + +func filterActive(rows []table.Row) []table.Row { + filtered := []table.Row{} + + for _, row := range rows { + if row[len(row)-1] == "true" { + filtered = append(filtered, row) + } + } + + return filtered +} + +func filterInactive(rows []table.Row) []table.Row { + filtered := []table.Row{} + + for _, row := range rows { + if row[len(row)-1] == "false" { + filtered = append(filtered, row) + } + } + + return filtered +} + +func filterDownloaded(rows []table.Row) []table.Row { + filtered := []table.Row{} + + for _, row := range rows { + if row[1] == "100.00%" { + filtered = append(filtered, row) + } + } + + return filtered +} + +func filterQueued(rows []table.Row) []table.Row { + filtered := []table.Row{} + + for _, row := range rows { + if row[1] == "0.00%" { + filtered = append(filtered, row) + } + } + + return filtered +} + +func getPercentDownloaded(downloaded, total uint64) string { + percent := float32(downloaded) / float32(total/100) + + if percent > 100 { + percent = 100 + } + + return fmt.Sprintf("%.2f%%", percent) +} diff --git a/cmd/diag/flags/flags.go b/cmd/diag/flags/flags.go new file mode 100644 index 00000000000..d4bec07b4e5 --- /dev/null +++ b/cmd/diag/flags/flags.go @@ -0,0 +1,39 @@ +package flags + +import "github.com/urfave/cli/v2" + +var ( + ApiPath = "/debug/diag" + + DebugURLFlag = cli.StringFlag{ + Name: "debug.addr", + Aliases: []string{"da"}, + Usage: "URL to the debug endpoint", + Required: false, + Value: "localhost:6060", + } + + OutputFlag = cli.StringFlag{ + Name: "output", + Aliases: []string{"o"}, + Usage: "Output format [text|json]", + Required: false, + Value: "text", + } + + AutoUpdateFlag = cli.BoolFlag{ + Name: "autoupdate", + Aliases: []string{"au"}, + Usage: "Auto update the output", + Required: false, + Value: false, + } + + AutoUpdateIntervalFlag = cli.IntFlag{ + Name: "autoupdate.interval", + Aliases: []string{"aui"}, + Usage: "Auto update interval in milliseconds", + Required: false, + Value: 20000, + } +) diff --git a/cmd/diag/main.go b/cmd/diag/main.go new file mode 100644 index 00000000000..63ebe6d400b --- /dev/null +++ b/cmd/diag/main.go @@ -0,0 +1,109 @@ +package main + +import ( + "context" + "fmt" + "os" + "os/signal" + "path/filepath" + "syscall" + + "github.com/urfave/cli/v2" + + "github.com/ledgerwatch/erigon/cmd/diag/db" + "github.com/ledgerwatch/erigon/cmd/diag/downloader" + "github.com/ledgerwatch/erigon/cmd/diag/stages" + "github.com/ledgerwatch/erigon/cmd/diag/ui" + "github.com/ledgerwatch/erigon/cmd/snapshots/sync" + "github.com/ledgerwatch/erigon/cmd/utils" + "github.com/ledgerwatch/erigon/params" + "github.com/ledgerwatch/erigon/turbo/logging" + "github.com/ledgerwatch/log/v3" +) + +func main() { + logging.LogVerbosityFlag.Value = log.LvlError.String() + logging.LogConsoleVerbosityFlag.Value = log.LvlError.String() + + app := cli.NewApp() + app.Name = "diagnostics" + app.Version = params.VersionWithCommit(params.GitCommit) + app.EnableBashCompletion = true + + app.Commands = []*cli.Command{ + &downloader.Command, + &stages.Command, + &db.Command, + &ui.Command, + } + + app.Flags = []cli.Flag{} + + app.HelpName = `Erigon Diagnostics` + app.Usage = "Display diagnostic output for a running erigon node" + app.UsageText = `diag [command] [flags]` + + app.Action = func(context *cli.Context) error { + var goodNames []string + for _, c := range app.VisibleCommands() { + goodNames = append(goodNames, c.Name) + } + _, _ = fmt.Fprintf(os.Stderr, "Command '%s' not found. Available commands: %s\n", context.Args().First(), goodNames) + cli.ShowAppHelpAndExit(context, 1) + + return nil + } + + for _, command := range app.Commands { + command.Before = func(ctx *cli.Context) error { + logger, err := setupLogger(ctx) + + if err != nil { + return err + } + + var cancel context.CancelFunc + + ctx.Context, cancel = context.WithCancel(sync.WithLogger(ctx.Context, logger)) + + go handleTerminationSignals(cancel, logger) + + return nil + } + } + + if err := app.Run(os.Args); err != nil { + _, _ = fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func setupLogger(ctx *cli.Context) (log.Logger, error) { + dataDir := ctx.String(utils.DataDirFlag.Name) + + if len(dataDir) > 0 { + logsDir := filepath.Join(dataDir, "logs") + + if err := os.MkdirAll(logsDir, 0755); err != nil { + return nil, err + } + } + + logger := logging.SetupLoggerCtx("diagnostics-"+ctx.Command.Name, ctx, log.LvlError, log.LvlInfo, false) + + return logger, nil +} + +func handleTerminationSignals(stopFunc func(), logger log.Logger) { + signalCh := make(chan os.Signal, 1) + signal.Notify(signalCh, syscall.SIGTERM, syscall.SIGINT) + + switch s := <-signalCh; s { + case syscall.SIGTERM: + logger.Info("Stopping") + stopFunc() + case syscall.SIGINT: + logger.Info("Terminating") + os.Exit(-int(syscall.SIGINT)) + } +} diff --git a/cmd/diag/readme.md b/cmd/diag/readme.md new file mode 100644 index 00000000000..279a0f7258b --- /dev/null +++ b/cmd/diag/readme.md @@ -0,0 +1,96 @@ +# Diagnostics commands + +## Diagnostics command architecture +Diagnostics command is implemented to retrieve information from the Erigon node on a headless machine. It makes it easier to run and get information from the node as it runs on the same machine and doesn't require a PIN-secured remote connection. This is done to make the diagnostics process quicker to set up and make the entire process less resistant. + + +### Diagnostics command local connection diagram +![overview](./_images/local_connection.png) + +[Compare with remote connection](https://github.com/ledgerwatch/diagnostics?tab=readme-ov-file#diagnostics-architecture-diagram) + +## Available commands +| | | +|--|--| +|databases|Displays information about databases. [Details](#databases)| +|downloader|Displays info about the snapshot download process| +|stages|Displays the current status of node synchronization| +|ui|Serves local UI interface to browse through all info collected by diagnostics| +||| + +### Global flags +||||| +|--|--|--|--| +|Flag|Default Value|Allowed Values|Description| +|debug.addr|"localhost:6060"|string|Address of diagnostics endpoint in Erigon node. This endpoint must match the values of `diagnostics.endpoint.addr:diagnostics.endpoint.port`. By default, it is `localhost:6060`.| +|output|`text`|`text`, `json`|Defines the output format for diagnostics data. It can be either `text` or `json`. `text` means that the output will be prettified, `json` means that the output will be in JSON format. By default, the output is in `text` format.| +|help|||Shows details about the command| +||||| + + +### Databases +`./build/bin/diag databases` +#### Available flags: +||||| +|--|--|--|--| +|Flag|Default Value|Allowed Values|Description| +|db.appearance.populated|false|boolean|Print only for populated tables content.| +|db.name|""|string|DB name to print info about. If not set, all DBs will be printed.| +|||| + +Examples: +- `./build/bin/diag databases` +![img](./_images/dbs/example_databases.png) +- `./build/bin/diag databases --db.name=caplin/indexing/beacon_indicies` +![img](./_images/dbs/example_databases_name.png) +- `./build/bin/diag databases --db.name=caplin/indexing/beacon_indicies --db.appearance.populated` +![img](./_images/dbs/example_databases_name_populated.png) + +### Downloader +`./build/bin/diag downloader` +Display Snapshot download status + +#### Available subcommands: +||| +|--|--| +|files|Displays status for each file along with overall download status| +||| + +#### Available flags: +||||| +|--|--|--|--| +|Flag|Default Value|Allowed Values|Description| +|downloader.file.filter|`all`|`all`, `active`, `inactive`, `downloaded`, `queued`|Filter files to display.| +|downloader.file.name|""|string|File name to print details about.| +|||| + +Examples: +- `./build/bin/diag downloader` +![img](./_images/downloader/example_downloader.png) +- `./build/bin/diag downloader files` +![img](./_images/downloader/example_downloader_files.png) +- `./build/bin/diag downloader files --downloader.file.filter=downloaded` +![img](./_images/downloader/example_downloader_files_downloaded.png) +- `./build/bin/diag downloader files --downloader.file.name=v1-005400-005500-transactions.seg` +![img](./_images/downloader/example_downloader_files_filename.png) + +### Stages +`./build/bin/diag stages current` +Display node synchronization status + +Example output: + +![img](./_images/stages/example_stages.png) + +### UI +`./build/bin/diag ui` +Serve diagnostics ui locally + +#### Available flags: +||||| +|--|--|--|--| +|Flag|Default Value|Allowed Values|Description| +|ui.addr|`127.0.0.1:6060`|string|URL to serve UI web application.| +|||| + +After running this command, it enables you to navigate through all available diagnostics data using a web application. You can see what is currently [available](https://github.com/ledgerwatch/diagnostics?tab=readme-ov-file#currently-implemented-diagnostics). This command allows you to skip the session setup to connect to your node as it automatically connects to a running node. \ No newline at end of file diff --git a/cmd/diag/stages/stages.go b/cmd/diag/stages/stages.go new file mode 100644 index 00000000000..a2b74468b09 --- /dev/null +++ b/cmd/diag/stages/stages.go @@ -0,0 +1,201 @@ +package stages + +import ( + "sync" + "time" + + "github.com/jedib0t/go-pretty/v6/table" + "github.com/ledgerwatch/erigon-lib/diagnostics" + "github.com/ledgerwatch/erigon/cmd/diag/flags" + "github.com/ledgerwatch/erigon/cmd/diag/util" + "github.com/urfave/cli/v2" +) + +var Command = cli.Command{ + Name: "stages", + Aliases: []string{"st"}, + ArgsUsage: "", + Action: printStages, + Flags: []cli.Flag{ + &flags.DebugURLFlag, + &flags.OutputFlag, + &flags.AutoUpdateFlag, + &flags.AutoUpdateIntervalFlag, + }, + Subcommands: []*cli.Command{ + { + Name: "current", + Aliases: []string{"c"}, + Action: printCurentStage, + Usage: "print current stage", + ArgsUsage: "", + Flags: []cli.Flag{ + &flags.DebugURLFlag, + &flags.OutputFlag, + &flags.AutoUpdateFlag, + &flags.AutoUpdateIntervalFlag, + }, + }, + }, + Description: ``, +} + +func printStages(cliCtx *cli.Context) error { + err := printSyncStages(cliCtx, false) + if err != nil { + util.RenderError(err) + } + + return nil +} + +func printCurentStage(cliCtx *cli.Context) error { + err := printSyncStages(cliCtx, true) + if err != nil { + util.RenderError(err) + } + + return nil +} + +func printSyncStages(cliCtx *cli.Context, isCurrent bool) error { + autoupdate := cliCtx.Bool(flags.AutoUpdateFlag.Name) + + syncStages, err := querySyncInfo(cliCtx) + if err != nil { + util.RenderError(err) + return nil + } else { + var stagesRows []table.Row + if isCurrent { + stagesRows = getCurrentStageRow(syncStages) + } else { + stagesRows = getStagesRows(syncStages) + } + printData(cliCtx, stagesRows) + } + + if autoupdate { + interval := time.Duration(cliCtx.Int(flags.AutoUpdateIntervalFlag.Name)) * time.Millisecond + var wg sync.WaitGroup + wg.Add(1) + + ticker := time.NewTicker(interval) + go func() { + for { + select { + case <-ticker.C: + syncStages, err := querySyncInfo(cliCtx) + if err == nil { + var stagesRows []table.Row + if isCurrent { + stagesRows = getCurrentStageRow(syncStages) + } else { + stagesRows = getStagesRows(syncStages) + } + + printData(cliCtx, stagesRows) + } else { + util.RenderError(err) + wg.Done() + return + } + + case <-cliCtx.Done(): + ticker.Stop() + wg.Done() + return + } + } + }() + + wg.Wait() + } + + return nil +} + +func querySyncInfo(cliCtx *cli.Context) ([]diagnostics.SyncStage, error) { + var data []diagnostics.SyncStage + url := "http://" + cliCtx.String(flags.DebugURLFlag.Name) + flags.ApiPath + "/sync-stages" + + err := util.MakeHttpGetCall(cliCtx.Context, url, &data) + if err != nil { + return nil, err + } + + return data, nil +} + +func printData(cliCtx *cli.Context, data []table.Row) { + switch cliCtx.String(flags.OutputFlag.Name) { + case "json": + util.RenderJson(data) + + case "text": + util.RenderTableWithHeader( + "", + table.Row{"Stage", "SubStage", "Status", "Time Elapsed", "Progress"}, + data, + ) + } +} + +func getStagesRows(stages []diagnostics.SyncStage) []table.Row { + return createSyncStageRows(stages, false) +} + +func getCurrentStageRow(stages []diagnostics.SyncStage) []table.Row { + return createSyncStageRows(stages, true) +} + +func createSyncStageRows(stages []diagnostics.SyncStage, forCurrentStage bool) []table.Row { + rows := []table.Row{} + for _, stage := range stages { + + if forCurrentStage { + if stage.State != diagnostics.Running { + continue + } + } + + stageRow := createStageRowFromStage(stage) + rows = append(rows, stageRow) + + for _, substage := range stage.SubStages { + subStageRow := createSubStageRowFromSubstageStage(substage) + rows = append(rows, subStageRow) + } + + if len(stage.SubStages) != 0 { + rows = append(rows, table.Row{"", "", "", "", ""}) + } + + if forCurrentStage { + break + } + + } + + return rows +} + +func createStageRowFromStage(stage diagnostics.SyncStage) table.Row { + return table.Row{ + stage.ID, + "", + stage.State.String(), + stage.Stats.TimeElapsed, + stage.Stats.Progress, + } +} + +func createSubStageRowFromSubstageStage(substage diagnostics.SyncSubStage) table.Row { + return table.Row{ + "", + substage.ID, + substage.State.String(), + substage.Stats.TimeElapsed, + substage.Stats.Progress, + } +} diff --git a/cmd/diag/ui/ui.go b/cmd/diag/ui/ui.go new file mode 100644 index 00000000000..1620747b5d9 --- /dev/null +++ b/cmd/diag/ui/ui.go @@ -0,0 +1,137 @@ +package ui + +import ( + "encoding/json" + "fmt" + "log" + "net/http" + "sync" + "time" + + "github.com/ledgerwatch/erigonwatch" + + "github.com/go-chi/chi/v5" + "github.com/go-chi/chi/v5/middleware" + "github.com/go-chi/cors" + "github.com/jedib0t/go-pretty/v6/text" + "github.com/ledgerwatch/erigon/cmd/diag/flags" + "github.com/urfave/cli/v2" +) + +var ( + UIURLFlag = cli.StringFlag{ + Name: "ui.addr", + Usage: "URL to serve UI web application", + Required: false, + Value: "127.0.0.1:6060", + } +) + +var Command = cli.Command{ + Name: "ui", + Action: runUI, + Aliases: []string{"u"}, + Usage: "run local ui", + ArgsUsage: "", + Flags: []cli.Flag{ + &flags.DebugURLFlag, + &UIURLFlag, + }, + Description: ``, +} + +func runUI(cli *cli.Context) error { + supportedSubpaths := []string{ + "sentry-network", + "sentinel-network", + "downloader", + "logs", + "chain", + "data", + "debug", + "testing", + "performance", + "documentation", + "issues", + "admin", + } + + listenUrl := cli.String(UIURLFlag.Name) + + assets, _ := erigonwatch.UIFiles() + fs := http.FileServer(http.FS(assets)) + + r := chi.NewRouter() + r.Use(middleware.Logger) + r.Use(middleware.Recoverer) + r.Use(middleware.RouteHeaders(). + Route("Origin", "*", cors.Handler(cors.Options{ + AllowedOrigins: []string{"*"}, + AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, + AllowedHeaders: []string{"Accept", "Content-Type", "session-id"}, + AllowCredentials: false, // <----------<<< do not allow credentials + })). + Handler) + + r.Mount("/", fs) + + for _, subpath := range supportedSubpaths { + addhandler(r, "/"+subpath, fs) + } + + // Use the file system to serve static files + url := "http://" + cli.String(flags.DebugURLFlag.Name) + addr := DiagAddress{ + Address: url, + } + + //r.Get("/diagaddr", writeDiagAdderss(addr)) + r.Handle("/data", http.StripPrefix("/data", fs)) + + r.HandleFunc("/diagaddr", func(w http.ResponseWriter, r *http.Request) { + writeDiagAdderss(w, addr) + }) + + srv := &http.Server{ + Addr: listenUrl, + Handler: r, + MaxHeaderBytes: 1 << 20, + ReadHeaderTimeout: 1 * time.Minute, + } + + var wg sync.WaitGroup + wg.Add(1) + + go func() { + defer wg.Done() // Signal that the goroutine has completed + err := srv.ListenAndServe() + + if err != nil { + log.Fatal(err) + } + }() + + uiUrl := fmt.Sprintf("http://%s", listenUrl) + fmt.Println(text.Hyperlink(uiUrl, fmt.Sprintf("UI running on %s", uiUrl))) + + wg.Wait() // Wait for the server goroutine to finish + return nil +} + +func addhandler(r *chi.Mux, path string, handler http.Handler) { + r.Handle(path, http.StripPrefix(path, handler)) +} + +type DiagAddress struct { + Address string `json:"address"` +} + +func writeDiagAdderss(w http.ResponseWriter, addr DiagAddress) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + + if err := json.NewEncoder(w).Encode(addr); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + +} diff --git a/cmd/diag/util/util.go b/cmd/diag/util/util.go new file mode 100644 index 00000000000..43cda2761a7 --- /dev/null +++ b/cmd/diag/util/util.go @@ -0,0 +1,97 @@ +package util + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "strings" + "time" + + "github.com/jedib0t/go-pretty/v6/table" + "github.com/jedib0t/go-pretty/v6/text" +) + +func MakeHttpGetCall(ctx context.Context, url string, data interface{}) error { + var client = &http.Client{ + Timeout: time.Second * 20, + } + + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) + if err != nil { + return err + } + + resp, err := client.Do(req) + if err != nil { + if strings.Contains(err.Error(), "connection refused") { + return fmt.Errorf("it looks like the Erigon node is not running, is running incorrectly, or you have specified the wrong diagnostics URL. If you run the Erigon node with the '--diagnostics.endpoint.addr' or '--diagnostics.endpoint.port' flags, you must also specify the '--debug.addr' flag with the same address and port") + } + return err + } + + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + + err = json.Unmarshal(body, &data) + if err != nil { + if err.Error() == "invalid character 'p' after top-level value" { + return fmt.Errorf("diagnostics was not initialized yet. Please try again in a few seconds") + } + + return err + } + + return nil +} + +func RenderJson(data interface{}) { + bytes, err := json.Marshal(data) + + if err == nil { + fmt.Println(string(bytes)) + fmt.Print("\n") + } +} + +func RenderTableWithHeader(title string, header table.Row, rows []table.Row) { + if title != "" { + txt := text.Colors{text.FgBlue, text.Bold} + fmt.Println(txt.Sprint(title)) + + if len(rows) == 0 { + txt := text.Colors{text.FgRed, text.Bold} + fmt.Println(txt.Sprint("No data to show")) + } + } + + if len(rows) > 0 { + t := table.NewWriter() + t.SetOutputMirror(os.Stdout) + + t.AppendHeader(header) + if len(rows) > 0 { + t.AppendRows(rows) + } + + t.AppendSeparator() + t.Render() + } + + fmt.Print("\n") +} + +func RenderUseDiagUI() { + txt := text.Colors{text.BgGreen, text.Bold} + fmt.Println(txt.Sprint("To get detailed info about Erigon node state use 'diag ui' command.")) +} + +func RenderError(err error) { + txt := text.Colors{text.FgWhite, text.BgRed} + fmt.Printf("%s %s\n", txt.Sprint("[ERROR]"), err) +} diff --git a/cmd/downloader/main.go b/cmd/downloader/main.go index f7251501bde..13e28a97cbb 100644 --- a/cmd/downloader/main.go +++ b/cmd/downloader/main.go @@ -4,12 +4,18 @@ import ( "context" "errors" "fmt" + "io/fs" "net" + "net/url" "os" "path/filepath" + "sort" "strings" "time" + _ "github.com/ledgerwatch/erigon/core/snaptype" //hack + _ "github.com/ledgerwatch/erigon/polygon/bor/snaptype" //hack + "github.com/anacrolix/torrent/metainfo" "github.com/c2h5oh/datasize" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" @@ -20,7 +26,7 @@ import ( "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/downloader" "github.com/ledgerwatch/erigon-lib/downloader/downloadercfg" - "github.com/ledgerwatch/erigon-lib/downloader/snaptype" + "github.com/ledgerwatch/erigon-lib/downloader/downloadergrpc" proto_downloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/mdbx" @@ -82,7 +88,8 @@ func init() { utils.CobraFlags(rootCmd, debug.Flags, utils.MetricFlags, logging.Flags) withDataDir(rootCmd) - rootCmd.Flags().StringVar(&chain, utils.ChainFlag.Name, utils.ChainFlag.Value, utils.ChainFlag.Usage) + withChainFlag(rootCmd) + rootCmd.Flags().StringVar(&webseeds, utils.WebSeedsFlag.Name, utils.WebSeedsFlag.Value, utils.WebSeedsFlag.Usage) rootCmd.Flags().StringVar(&natSetting, "nat", utils.NATFlag.Value, utils.NATFlag.Usage) rootCmd.Flags().StringVar(&downloaderApiAddr, "downloader.api.addr", "127.0.0.1:9093", "external downloader api network address, for example: 127.0.0.1:9093 serves remote downloader interface") @@ -103,15 +110,26 @@ func init() { withDataDir(createTorrent) withFile(createTorrent) + withChainFlag(createTorrent) rootCmd.AddCommand(createTorrent) rootCmd.AddCommand(torrentCat) rootCmd.AddCommand(torrentMagnet) + withDataDir(torrentClean) + rootCmd.AddCommand(torrentClean) + withDataDir(manifestCmd) + withChainFlag(manifestCmd) rootCmd.AddCommand(manifestCmd) + manifestVerifyCmd.Flags().StringVar(&webseeds, utils.WebSeedsFlag.Name, utils.WebSeedsFlag.Value, utils.WebSeedsFlag.Usage) + manifestVerifyCmd.PersistentFlags().BoolVar(&verifyFailfast, "verify.failfast", false, "Stop on first found error. Report it and exit") + withChainFlag(manifestVerifyCmd) + rootCmd.AddCommand(manifestVerifyCmd) + withDataDir(printTorrentHashes) + withChainFlag(printTorrentHashes) printTorrentHashes.PersistentFlags().BoolVar(&forceRebuild, "rebuild", false, "Force re-create .torrent files") printTorrentHashes.Flags().StringVar(&targetFile, "targetfile", "", "write output to file") if err := printTorrentHashes.MarkFlagFilename("targetfile"); err != nil { @@ -123,9 +141,12 @@ func init() { func withDataDir(cmd *cobra.Command) { cmd.Flags().StringVar(&datadirCli, utils.DataDirFlag.Name, paths.DefaultDataDir(), utils.DataDirFlag.Usage) - if err := cmd.MarkFlagDirname(utils.DataDirFlag.Name); err != nil { - panic(err) - } + must(cmd.MarkFlagRequired(utils.DataDirFlag.Name)) + must(cmd.MarkFlagDirname(utils.DataDirFlag.Name)) +} +func withChainFlag(cmd *cobra.Command) { + cmd.Flags().StringVar(&chain, utils.ChainFlag.Name, utils.ChainFlag.Value, utils.ChainFlag.Usage) + must(cmd.MarkFlagRequired(utils.ChainFlag.Name)) } func withFile(cmd *cobra.Command) { cmd.Flags().StringVar(&filePath, "file", "", "") @@ -134,6 +155,12 @@ func withFile(cmd *cobra.Command) { } } +func must(err error) { + if err != nil { + panic(err) + } +} + var logger log.Logger var rootCmd = &cobra.Command{ Use: "", @@ -188,7 +215,7 @@ func Downloader(ctx context.Context, logger log.Logger) error { if known, ok := snapcfg.KnownWebseeds[chain]; ok { webseedsList = append(webseedsList, known...) } - cfg, err := downloadercfg.New(dirs, version, torrentLogLevel, downloadRate, uploadRate, torrentPort, torrentConnsPerFile, torrentDownloadSlots, staticPeers, webseedsList, chain) + cfg, err := downloadercfg.New(dirs, version, torrentLogLevel, downloadRate, uploadRate, torrentPort, torrentConnsPerFile, torrentDownloadSlots, staticPeers, webseedsList, chain, true) if err != nil { return err } @@ -205,15 +232,20 @@ func Downloader(ctx context.Context, logger log.Logger) error { cfg.AddTorrentsFromDisk = true // always true unless using uploader - which wants control of torrent files - d, err := downloader.New(ctx, cfg, dirs, logger, log.LvlInfo, seedbox) + d, err := downloader.New(ctx, cfg, logger, log.LvlInfo, seedbox) if err != nil { return err } defer d.Close() logger.Info("[snapshots] Start bittorrent server", "my_peer_id", fmt.Sprintf("%x", d.TorrentClient().PeerID())) - if err := addPreConfiguredHashes(ctx, d); err != nil { - return err + if len(_verifyFiles) > 0 { + verifyFiles = strings.Split(_verifyFiles, ",") + } + if verify || verifyFailfast || len(verifyFiles) > 0 { // remove and create .torrent files (will re-read all snapshots) + if err = d.VerifyData(ctx, verifyFiles, verifyFailfast); err != nil { + return err + } } d.MainLoopInBackground(false) @@ -222,6 +254,18 @@ func Downloader(ctx context.Context, logger log.Logger) error { if err != nil { return fmt.Errorf("new server: %w", err) } + if seedbox { + var downloadItems []*proto_downloader.AddItem + for _, it := range snapcfg.KnownCfg(chain).Preverified { + downloadItems = append(downloadItems, &proto_downloader.AddItem{ + Path: it.Name, + TorrentHash: downloadergrpc.String2Proto(it.Hash), + }) + } + if _, err := bittorrentServer.Add(ctx, &proto_downloader.AddRequest{Items: downloadItems}); err != nil { + return err + } + } grpcServer, err := StartGrpc(bittorrentServer, downloaderApiAddr, nil /* transportCredentials */, logger) if err != nil { @@ -229,15 +273,6 @@ func Downloader(ctx context.Context, logger log.Logger) error { } defer grpcServer.GracefulStop() - if len(_verifyFiles) > 0 { - verifyFiles = strings.Split(_verifyFiles, ",") - } - if verify || verifyFailfast || len(verifyFiles) > 0 { // remove and create .torrent files (will re-read all snapshots) - if err = d.VerifyData(ctx, verifyFiles, verifyFailfast); err != nil { - return err - } - } - <-ctx.Done() return nil } @@ -246,12 +281,12 @@ var createTorrent = &cobra.Command{ Use: "torrent_create", Example: "go run ./cmd/downloader torrent_create --datadir= --file=", RunE: func(cmd *cobra.Command, args []string) error { - //logger := debug.SetupCobra(cmd, "integration") dirs := datadir.New(datadirCli) - err := downloader.BuildTorrentFilesIfNeed(cmd.Context(), dirs, downloader.NewAtomicTorrentFiles(dirs.Snap)) + createdAmount, err := downloader.BuildTorrentFilesIfNeed(cmd.Context(), dirs, downloader.NewAtomicTorrentFS(dirs.Snap), chain, nil) if err != nil { return err } + log.Info("created .torent files", "amount", createdAmount) return nil }, } @@ -270,7 +305,7 @@ var printTorrentHashes = &cobra.Command{ var manifestCmd = &cobra.Command{ Use: "manifest", - Example: "go run ./cmd/downloader torrent_hashes --datadir ", + Example: "go run ./cmd/downloader manifest --datadir ", RunE: func(cmd *cobra.Command, args []string) error { logger := debug.SetupCobra(cmd, "downloader") if err := manifest(cmd.Context(), logger); err != nil { @@ -280,6 +315,19 @@ var manifestCmd = &cobra.Command{ }, } +var manifestVerifyCmd = &cobra.Command{ + Use: "manifest-verify", + Example: "go run ./cmd/downloader manifest-verify --chain [--webseeds 'a','b','c']", + RunE: func(cmd *cobra.Command, args []string) error { + logger := debug.SetupCobra(cmd, "downloader") + if err := manifestVerify(cmd.Context(), logger); err != nil { + log.Error(err.Error()) + os.Exit(1) // to mark CI as failed + } + return nil + }, +} + var torrentCat = &cobra.Command{ Use: "torrent_cat", Example: "go run ./cmd/downloader torrent_cat ", @@ -302,6 +350,44 @@ var torrentCat = &cobra.Command{ return nil }, } +var torrentClean = &cobra.Command{ + Use: "torrent_clean", + Short: "Remove all .torrent files from datadir directory", + Example: "go run ./cmd/downloader torrent_clean --datadir=", + RunE: func(cmd *cobra.Command, args []string) error { + dirs := datadir.New(datadirCli) + + logger.Info("[snapshots.webseed] processing local file etags") + removedTorrents := 0 + walker := func(path string, de fs.DirEntry, err error) error { + if err != nil || de.IsDir() { + if err != nil { + logger.Warn("[snapshots.torrent] walk and cleanup", "err", err, "path", path) + } + return nil //nolint + } + + if !strings.HasSuffix(de.Name(), ".torrent") || strings.HasPrefix(de.Name(), ".") { + return nil + } + err = os.Remove(filepath.Join(dirs.Snap, path)) + if err != nil { + logger.Warn("[snapshots.torrent] remove", "err", err, "path", path) + return err + } + removedTorrents++ + return nil + } + + sfs := os.DirFS(dirs.Snap) + if err := fs.WalkDir(sfs, ".", walker); err != nil { + return err + } + logger.Info("[snapshots.torrent] cleanup finished", "count", removedTorrents) + return nil + }, +} + var torrentMagnet = &cobra.Command{ Use: "torrent_magnet", Example: "go run ./cmd/downloader torrent_magnet ", @@ -319,25 +405,78 @@ var torrentMagnet = &cobra.Command{ }, } +func manifestVerify(ctx context.Context, logger log.Logger) error { + webseedsList := common.CliString2Array(webseeds) + if len(webseedsList) == 0 { + if known, ok := snapcfg.KnownWebseeds[chain]; ok { + webseedsList = append(webseedsList, known...) + } + } + + webseedUrlsOrFiles := webseedsList + webseedHttpProviders := make([]*url.URL, 0, len(webseedUrlsOrFiles)) + webseedFileProviders := make([]string, 0, len(webseedUrlsOrFiles)) + for _, webseed := range webseedUrlsOrFiles { + if !strings.HasPrefix(webseed, "v") { // has marker v1/v2/... + uri, err := url.ParseRequestURI(webseed) + if err != nil { + if strings.HasSuffix(webseed, ".toml") && dir.FileExist(webseed) { + webseedFileProviders = append(webseedFileProviders, webseed) + } + continue + } + webseedHttpProviders = append(webseedHttpProviders, uri) + continue + } + + if strings.HasPrefix(webseed, "v1:") { + withoutVerisonPrefix := webseed[3:] + if !strings.HasPrefix(withoutVerisonPrefix, "https:") { + continue + } + uri, err := url.ParseRequestURI(withoutVerisonPrefix) + if err != nil { + log.Warn("[webseed] can't parse url", "err", err, "url", withoutVerisonPrefix) + continue + } + webseedHttpProviders = append(webseedHttpProviders, uri) + } else { + continue + } + } + if len(webseedFileProviders) > 0 { + logger.Warn("file providers are not supported yet", "fileProviders", webseedFileProviders) + } + + wseed := downloader.NewWebSeeds(webseedHttpProviders, log.LvlDebug, logger) + return wseed.VerifyManifestedBuckets(ctx, verifyFailfast) +} + func manifest(ctx context.Context, logger log.Logger) error { dirs := datadir.New(datadirCli) + + files, err := downloader.SeedableFiles(dirs, chain) + if err != nil { + return err + } + extList := []string{ ".torrent", - ".seg", ".idx", // e2 - ".kv", ".kvi", ".bt", ".kvei", // e3 domain - ".v", ".vi", //e3 hist - ".ef", ".efi", //e3 idx - ".txt", //salt.txt + //".seg", ".idx", // e2 + //".kv", ".kvi", ".bt", ".kvei", // e3 domain + //".v", ".vi", //e3 hist + //".ef", ".efi", //e3 idx + ".txt", //salt.txt, manifest.txt } l, _ := dir.ListFiles(dirs.Snap, extList...) for _, fPath := range l { _, fName := filepath.Split(fPath) - fmt.Printf("%s\n", fName) + files = append(files, fName) } l, _ = dir.ListFiles(dirs.SnapDomain, extList...) for _, fPath := range l { _, fName := filepath.Split(fPath) - fmt.Printf("domain/%s\n", fName) + files = append(files, "domain/"+fName) } l, _ = dir.ListFiles(dirs.SnapHistory, extList...) for _, fPath := range l { @@ -345,7 +484,7 @@ func manifest(ctx context.Context, logger log.Logger) error { if strings.Contains(fName, "commitment") { continue } - fmt.Printf("history/%s\n", fName) + files = append(files, "history/"+fName) } l, _ = dir.ListFiles(dirs.SnapIdx, extList...) for _, fPath := range l { @@ -353,15 +492,12 @@ func manifest(ctx context.Context, logger log.Logger) error { if strings.Contains(fName, "commitment") { continue } - fmt.Printf("idx/%s\n", fName) + files = append(files, "idx/"+fName) } - l, _ = dir.ListFiles(dirs.SnapAccessors, extList...) - for _, fPath := range l { - _, fName := filepath.Split(fPath) - if strings.Contains(fName, "commitment") { - continue - } - fmt.Printf("accessors/%s\n", fName) + + sort.Strings(files) + for _, f := range files { + fmt.Printf("%s\n", f) } return nil } @@ -372,7 +508,7 @@ func doPrintTorrentHashes(ctx context.Context, logger log.Logger) error { return err } - tf := downloader.NewAtomicTorrentFiles(dirs.Snap) + tf := downloader.NewAtomicTorrentFS(dirs.Snap) if forceRebuild { // remove and create .torrent files (will re-read all snapshots) //removePieceCompletionStorage(snapDir) @@ -385,9 +521,11 @@ func doPrintTorrentHashes(ctx context.Context, logger log.Logger) error { return err } } - if err := downloader.BuildTorrentFilesIfNeed(ctx, dirs, tf); err != nil { + createdAmount, err := downloader.BuildTorrentFilesIfNeed(ctx, dirs, tf, chain, nil) + if err != nil { return fmt.Errorf("BuildTorrentFilesIfNeed: %w", err) } + log.Info("created .torent files", "amount", createdAmount) } res := map[string]string{} @@ -489,16 +627,6 @@ func StartGrpc(snServer *downloader.GrpcServer, addr string, creds *credentials. return grpcServer, nil } -// Add pre-configured -func addPreConfiguredHashes(ctx context.Context, d *downloader.Downloader) error { - for _, it := range snapcfg.KnownCfg(chain, 0).Preverified { - if err := d.AddMagnetLink(ctx, snaptype.Hex2InfoHash(it.Hash), it.Name); err != nil { - return err - } - } - return nil -} - func checkChainName(ctx context.Context, dirs datadir.Dirs, chainName string) error { if !dir.FileExist(filepath.Join(dirs.Chaindata, "mdbx.dat")) { return nil diff --git a/cmd/downloader/readme.md b/cmd/downloader/readme.md index 61fa4203a3e..8146934d6e9 100644 --- a/cmd/downloader/readme.md +++ b/cmd/downloader/readme.md @@ -101,7 +101,7 @@ Downloader does: - Read .torrent files, download everything described by .torrent files - Use https://github.com/ngosang/trackerslist - see [./trackers/embed.go](../../../erigon-lib/downloader/trackers/embed.go) + see [./downloader/util.go](../../erigon-lib/downloader/util.go) - automatically seeding Technical details: @@ -153,6 +153,14 @@ downloader --datadir= --chain=mainnet --webseed= downloader torrent_cat /path/to.torrent downloader torrent_magnet /path/to.torrent + +downloader torrent_clean --datadir # remote all .torrent files in datadir +``` + +## Remote manifest verify +To check that remote webseeds has available manifest and all manifested files are available, has correct format of ETag, does not have dangling torrents etc. +``` +downloader manifest-verify --chain [--webseeds 'a','b','c'] ``` ## Faster rsync diff --git a/cmd/erigon/main.go b/cmd/erigon/main.go index b3dd55dcdb5..e6196d0932f 100644 --- a/cmd/erigon/main.go +++ b/cmd/erigon/main.go @@ -44,8 +44,9 @@ func runErigon(cliCtx *cli.Context) error { var logger log.Logger var err error var metricsMux *http.ServeMux + var pprofMux *http.ServeMux - if logger, metricsMux, err = debug.Setup(cliCtx, true /* root logger */); err != nil { + if logger, metricsMux, pprofMux, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { return err } @@ -68,9 +69,7 @@ func runErigon(cliCtx *cli.Context) error { return err } - if metricsMux != nil { - diagnostics.Setup(cliCtx, metricsMux, ethNode) - } + diagnostics.Setup(cliCtx, ethNode, metricsMux, pprofMux) err = ethNode.Serve() if err != nil { diff --git a/cmd/evm/README.md b/cmd/evm/README.md index 6dc57eaf408..d4a0a04f6a8 100644 --- a/cmd/evm/README.md +++ b/cmd/evm/README.md @@ -342,7 +342,7 @@ To make `t8n` apply these, the following inputs are required: - For ethash, it is `5000000000000000000` `wei`, - If this is not defined, mining rewards are not applied, - A value of `0` is valid, and causes accounts to be 'touched'. -- For each ommer, the tool needs to be given an `addres\` and a `delta`. This +- For each ommer, the tool needs to be given an `address\` and a `delta`. This is done via the `ommers` field in `env`. Note: the tool does not verify that e.g. the normal uncle rules apply, diff --git a/cmd/evm/internal/t8ntool/transition.go b/cmd/evm/internal/t8ntool/transition.go index 14401d0f94b..e1bd1710318 100644 --- a/cmd/evm/internal/t8ntool/transition.go +++ b/cmd/evm/internal/t8ntool/transition.go @@ -29,7 +29,7 @@ import ( "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon/core/state/temporal" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/ledgerwatch/log/v3" "github.com/urfave/cli/v2" @@ -294,7 +294,7 @@ func Main(ctx *cli.Context) error { return h } - _, db, _ := temporal.NewTestDB(nil, datadir.New(""), nil) + _, db, _ := temporaltest.NewTestDB(nil, datadir.New("")) defer db.Close() tx, err := db.BeginRw(context.Background()) diff --git a/cmd/hack/hack.go b/cmd/hack/hack.go index b6585f90f42..6dcb47c4560 100644 --- a/cmd/hack/hack.go +++ b/cmd/hack/hack.go @@ -14,6 +14,7 @@ import ( "os" "path/filepath" "runtime/pprof" + "slices" "sort" "strings" "time" @@ -23,18 +24,17 @@ import ( "github.com/RoaringBitmap/roaring/roaring64" "github.com/holiman/uint256" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcfg" "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/erigon-lib/kv/temporal/historyv2" "github.com/ledgerwatch/erigon-lib/recsplit" "github.com/ledgerwatch/erigon-lib/recsplit/eliasfano32" + "github.com/ledgerwatch/erigon-lib/seg" hackdb "github.com/ledgerwatch/erigon/cmd/hack/db" "github.com/ledgerwatch/erigon/cmd/hack/flow" @@ -60,16 +60,15 @@ import ( ) var ( - action = flag.String("action", "", "action to execute") - cpuprofile = flag.String("cpuprofile", "", "write cpu profile `file`") - block = flag.Int("block", 1, "specifies a block number for operation") - blockTotal = flag.Int("blocktotal", 1, "specifies a total amount of blocks to process (will offset from head block if <= 0)") - account = flag.String("account", "0x", "specifies account to investigate") - name = flag.String("name", "", "name to add to the file names") - chaindata = flag.String("chaindata", "chaindata", "path to the chaindata database file") - bucket = flag.String("bucket", "", "bucket in the database") - hash = flag.String("hash", "0x00", "image for preimage or state root for testBlockHashes action") - shapshotVersion = flag.Uint("stapshots.version", 1, "specifies the snapshot file version") + action = flag.String("action", "", "action to execute") + cpuprofile = flag.String("cpuprofile", "", "write cpu profile `file`") + block = flag.Int("block", 1, "specifies a block number for operation") + blockTotal = flag.Int("blocktotal", 1, "specifies a total amount of blocks to process (will offset from head block if <= 0)") + account = flag.String("account", "0x", "specifies account to investigate") + name = flag.String("name", "", "name to add to the file names") + chaindata = flag.String("chaindata", "chaindata", "path to the chaindata database file") + bucket = flag.String("bucket", "", "bucket in the database") + hash = flag.String("hash", "0x00", "image for preimage or state root for testBlockHashes action") ) func dbSlice(chaindata string, bucket string, prefix []byte) { @@ -93,10 +92,10 @@ func dbSlice(chaindata string, bucket string, prefix []byte) { } // Searches 1000 blocks from the given one to try to find the one with the given state root hash -func testBlockHashes(chaindata string, snapshotVersion uint8, block int, stateRoot libcommon.Hash) { +func testBlockHashes(chaindata string, block int, stateRoot libcommon.Hash) { ethDb := mdbx.MustOpen(chaindata) defer ethDb.Close() - br, _ := blocksIO(ethDb, snapshotVersion) + br, _ := blocksIO(ethDb) tool.Check(ethDb.View(context.Background(), func(tx kv.Tx) error { blocksToSearch := 10000000 for i := uint64(block); i < uint64(block+blocksToSearch); i++ { @@ -132,7 +131,7 @@ func printCurrentBlockNumber(chaindata string) { }) } -func blocksIO(db kv.RoDB, snapshotVersion uint8) (services.FullBlockReader, *blockio.BlockWriter) { +func blocksIO(db kv.RoDB) (services.FullBlockReader, *blockio.BlockWriter) { var histV3 bool if err := db.View(context.Background(), func(tx kv.Tx) error { histV3, _ = kvcfg.HistoryV3.Enabled(tx) @@ -140,15 +139,15 @@ func blocksIO(db kv.RoDB, snapshotVersion uint8) (services.FullBlockReader, *blo }); err != nil { panic(err) } - br := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", snapshotVersion, log.New()), nil /* BorSnapshots */) + br := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 0, log.New()), nil /* BorSnapshots */) bw := blockio.NewBlockWriter(histV3) return br, bw } -func printTxHashes(chaindata string, snapshotVersion uint8, block uint64) error { +func printTxHashes(chaindata string, block uint64) error { db := mdbx.MustOpen(chaindata) defer db.Close() - br, _ := blocksIO(db, snapshotVersion) + br, _ := blocksIO(db) if err := db.View(context.Background(), func(tx kv.Tx) error { for b := block; b < block+1; b++ { block, _ := br.BlockByNumber(context.Background(), tx, b) @@ -460,10 +459,10 @@ func getBlockTotal(tx kv.Tx, blockFrom uint64, blockTotalOrOffset int64) uint64 return 1 } -func extractHashes(chaindata string, snapshotVersion uint8, blockStep uint64, blockTotalOrOffset int64, name string) error { +func extractHashes(chaindata string, blockStep uint64, blockTotalOrOffset int64, name string) error { db := mdbx.MustOpen(chaindata) defer db.Close() - br, _ := blocksIO(db, snapshotVersion) + br, _ := blocksIO(db) f, err := os.Create(fmt.Sprintf("preverified_hashes_%s.go", name)) if err != nil { @@ -535,12 +534,12 @@ func extractHeaders(chaindata string, block uint64, blockTotalOrOffset int64) er return nil } -func extractBodies(datadir string, snapshotVersion uint8) error { +func extractBodies(datadir string) error { snaps := freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{ Enabled: true, KeepBlocks: true, Produce: false, - }, filepath.Join(datadir, "snapshots"), snapshotVersion, log.New()) + }, filepath.Join(datadir, "snapshots"), 0, log.New()) snaps.ReopenFolder() /* method Iterate was removed, need re-implement @@ -579,7 +578,7 @@ func extractBodies(datadir string, snapshotVersion uint8) error { */ db := mdbx.MustOpen(filepath.Join(datadir, "chaindata")) defer db.Close() - br, _ := blocksIO(db, snapshotVersion) + br, _ := blocksIO(db) tx, err := db.BeginRo(context.Background()) if err != nil { @@ -1025,7 +1024,7 @@ func scanReceipts3(chaindata string, block uint64) error { return nil } -func scanReceipts2(chaindata string, snapshotVersion uint8) error { +func scanReceipts2(chaindata string) error { f, err := os.Create("receipts.txt") if err != nil { return err @@ -1039,7 +1038,7 @@ func scanReceipts2(chaindata string, snapshotVersion uint8) error { if err != nil { return err } - br, _ := blocksIO(dbdb, snapshotVersion) + br, _ := blocksIO(dbdb) defer tx.Rollback() blockNum, err := historyv2.AvailableFrom(tx) @@ -1272,7 +1271,7 @@ func iterate(filename string, prefix string) error { efFilename := filename + ".ef" viFilename := filename + ".vi" vFilename := filename + ".v" - efDecomp, err := compress.NewDecompressor(efFilename) + efDecomp, err := seg.NewDecompressor(efFilename) if err != nil { return err } @@ -1283,7 +1282,7 @@ func iterate(filename string, prefix string) error { } defer viIndex.Close() r := recsplit.NewIndexReader(viIndex) - vDecomp, err := compress.NewDecompressor(vFilename) + vDecomp, err := seg.NewDecompressor(vFilename) if err != nil { return err } @@ -1302,7 +1301,10 @@ func iterate(filename string, prefix string) error { txNum, _ := efIt.Next() var txKey [8]byte binary.BigEndian.PutUint64(txKey[:], txNum) - offset := r.Lookup2(txKey[:], key) + offset, ok := r.Lookup2(txKey[:], key) + if !ok { + continue + } gv.Reset(offset) v, _ := gv.Next(nil) fmt.Printf(" %d", txNum) @@ -1324,7 +1326,7 @@ func iterate(filename string, prefix string) error { } func readSeg(chaindata string) error { - vDecomp, err := compress.NewDecompressor(chaindata) + vDecomp, err := seg.NewDecompressor(chaindata) if err != nil { return err } @@ -1388,7 +1390,7 @@ func main() { flow.TestGenCfg() case "testBlockHashes": - testBlockHashes(*chaindata, uint8(*shapshotVersion), *block, libcommon.HexToHash(*hash)) + testBlockHashes(*chaindata, *block, libcommon.HexToHash(*hash)) case "readAccount": if err := readAccount(*chaindata, libcommon.HexToAddress(*account)); err != nil { @@ -1426,7 +1428,7 @@ func main() { err = extractHeaders(*chaindata, uint64(*block), int64(*blockTotal)) case "extractHashes": - err = extractHashes(*chaindata, uint8(*shapshotVersion), uint64(*block), int64(*blockTotal), *name) + err = extractHashes(*chaindata, uint64(*block), int64(*blockTotal), *name) case "defrag": err = hackdb.Defrag() @@ -1435,13 +1437,13 @@ func main() { err = hackdb.TextInfo(*chaindata, &strings.Builder{}) case "extractBodies": - err = extractBodies(*chaindata, uint8(*shapshotVersion)) + err = extractBodies(*chaindata) case "repairCurrent": repairCurrent() case "printTxHashes": - printTxHashes(*chaindata, uint8(*shapshotVersion), uint64(*block)) + printTxHashes(*chaindata, uint64(*block)) case "snapSizes": err = snapSizes(*chaindata) @@ -1468,7 +1470,7 @@ func main() { err = scanTxs(*chaindata) case "scanReceipts2": - err = scanReceipts2(*chaindata, uint8(*shapshotVersion)) + err = scanReceipts2(*chaindata) case "scanReceipts3": err = scanReceipts3(*chaindata, uint64(*block)) diff --git a/cmd/integration/commands/flags.go b/cmd/integration/commands/flags.go index 70036f55425..67a48319176 100644 --- a/cmd/integration/commands/flags.go +++ b/cmd/integration/commands/flags.go @@ -17,6 +17,7 @@ var ( unwindEvery uint64 batchSizeStr string reset, warmup, noCommit bool + resetPruneAt bool bucket string datadirCli, toChaindata string migration string @@ -29,7 +30,9 @@ var ( pruneHBefore, pruneRBefore uint64 pruneTBefore, pruneCBefore uint64 experiments []string + unwindTypes []string chain string // Which chain to use (mainnet, goerli, sepolia, etc.) + outputCsvFile string commitmentMode string commitmentTrie string @@ -39,7 +42,6 @@ var ( _forceSetHistoryV3 bool workers, reconWorkers uint64 - snapshotVersion uint8 = 1 ) func must(err error) { @@ -103,6 +105,10 @@ func withReset(cmd *cobra.Command) { cmd.Flags().BoolVar(&warmup, "warmup", false, "warmup relevant tables by parallel random reads") } +func withResetPruneAt(cmd *cobra.Command) { + cmd.Flags().BoolVar(&resetPruneAt, "resetPruneAt", false, "reset prune_at to 0 for a given stage") +} + func withBucket(cmd *cobra.Command) { cmd.Flags().StringVar(&bucket, "bucket", "", "reset given stage") } @@ -165,12 +171,12 @@ func withTraceFromTx(cmd *cobra.Command) { cmd.Flags().Uint64Var(&traceFromTx, "txtrace.from", 0, "start tracing from tx number") } +func withOutputCsvFile(cmd *cobra.Command) { + cmd.Flags().StringVar(&outputCsvFile, "output.csv.file", "", "location to output csv data") +} + func withCommitment(cmd *cobra.Command) { cmd.Flags().StringVar(&commitmentMode, "commitment.mode", "direct", "defines the way to calculate commitments: 'direct' mode reads from state directly, 'update' accumulate updates before commitment, 'off' actually disables commitment calculation") cmd.Flags().StringVar(&commitmentTrie, "commitment.trie", "hex", "hex - use Hex Patricia Hashed Trie for commitments, bin - use of binary patricia trie") cmd.Flags().IntVar(&commitmentFreq, "commitment.freq", 1000000, "how many blocks to skip between calculating commitment") } - -func withSnapshotVersion(cmd *cobra.Command) { - cmd.Flags().Uint8Var(&snapshotVersion, "stapshots.version", 1, "specifies the snapshot file version") -} diff --git a/cmd/integration/commands/refetence_db.go b/cmd/integration/commands/refetence_db.go index ac717c8f360..e68efe5612a 100644 --- a/cmd/integration/commands/refetence_db.go +++ b/cmd/integration/commands/refetence_db.go @@ -13,9 +13,9 @@ import ( common2 "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/backup" mdbx2 "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/erigon/common" - "github.com/ledgerwatch/erigon/turbo/backup" "github.com/ledgerwatch/erigon/turbo/debug" "github.com/ledgerwatch/log/v3" "github.com/spf13/cobra" @@ -160,7 +160,7 @@ func init() { func doWarmup(ctx context.Context, chaindata string, bucket string, logger log.Logger) error { const ThreadsLimit = 5_000 - db := mdbx2.NewMDBX(log.New()).Path(chaindata).RoTxsLimiter(semaphore.NewWeighted(ThreadsLimit)).MustOpen() + db := mdbx2.NewMDBX(log.New()).Path(chaindata).Accede().RoTxsLimiter(semaphore.NewWeighted(ThreadsLimit)).MustOpen() defer db.Close() var total uint64 diff --git a/cmd/integration/commands/reset_state.go b/cmd/integration/commands/reset_state.go index 0f995b2cdec..84e4990202e 100644 --- a/cmd/integration/commands/reset_state.go +++ b/cmd/integration/commands/reset_state.go @@ -8,7 +8,7 @@ import ( "os" "text/tabwriter" - "github.com/ledgerwatch/erigon/turbo/backup" + "github.com/ledgerwatch/erigon-lib/kv/backup" "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon-lib/common" @@ -31,14 +31,14 @@ var cmdResetState = &cobra.Command{ Short: "Reset StateStages (5,6,7,8,9,10) and buckets", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return } ctx, _ := common.RootContext() defer db.Close() - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -74,7 +74,7 @@ var cmdClearBadBlocks = &cobra.Command{ RunE: func(cmd *cobra.Command, args []string) error { logger := debug.SetupCobra(cmd, "integration") ctx, _ := common.RootContext() - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return err @@ -91,15 +91,13 @@ func init() { withConfig(cmdResetState) withDataDir(cmdResetState) withChain(cmdResetState) - withSnapshotVersion(cmdResetState) rootCmd.AddCommand(cmdResetState) withDataDir(cmdClearBadBlocks) - withSnapshotVersion(cmdClearBadBlocks) rootCmd.AddCommand(cmdClearBadBlocks) } -func printStages(tx kv.Tx, snapshots *freezeblocks.RoSnapshots, borSn *freezeblocks.BorRoSnapshots, agg *state.AggregatorV3) error { +func printStages(tx kv.Tx, snapshots *freezeblocks.RoSnapshots, borSn *freezeblocks.BorRoSnapshots, agg *state.Aggregator) error { var err error var progress uint64 w := new(tabwriter.Writer) diff --git a/cmd/integration/commands/root.go b/cmd/integration/commands/root.go index e90e38b2222..fcb9a932357 100644 --- a/cmd/integration/commands/root.go +++ b/cmd/integration/commands/root.go @@ -7,6 +7,7 @@ import ( "path/filepath" "strings" + "github.com/ledgerwatch/erigon-lib/kv/temporal" "github.com/ledgerwatch/log/v3" "github.com/spf13/cobra" "golang.org/x/sync/semaphore" @@ -16,8 +17,6 @@ import ( kv2 "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/erigon/cmd/utils" - "github.com/ledgerwatch/erigon/core/state/temporal" - "github.com/ledgerwatch/erigon/core/systemcontracts" "github.com/ledgerwatch/erigon/migrations" "github.com/ledgerwatch/erigon/turbo/debug" "github.com/ledgerwatch/erigon/turbo/logging" @@ -72,7 +71,7 @@ func dbCfg(label kv.Label, path string) kv2.MdbxOpts { return opts } -func openDB(opts kv2.MdbxOpts, applyMigrations bool, snapshotVersion uint8, logger log.Logger) (kv.RwDB, error) { +func openDB(opts kv2.MdbxOpts, applyMigrations bool, logger log.Logger) (kv.RwDB, error) { db := opts.MustOpen() if applyMigrations { migrator := migrations.NewMigrator(opts.GetLabel()) @@ -105,8 +104,8 @@ func openDB(opts kv2.MdbxOpts, applyMigrations bool, snapshotVersion uint8, logg return nil, err } if h3 { - _, _, agg := allSnapshots(context.Background(), db, snapshotVersion, logger) - tdb, err := temporal.New(db, agg, systemcontracts.SystemContractCodeLookup[chain]) + _, _, agg := allSnapshots(context.Background(), db, logger) + tdb, err := temporal.New(db, agg) if err != nil { return nil, err } diff --git a/cmd/integration/commands/stages.go b/cmd/integration/commands/stages.go index 18959df6224..428903d3fab 100644 --- a/cmd/integration/commands/stages.go +++ b/cmd/integration/commands/stages.go @@ -5,7 +5,8 @@ import ( "context" "errors" "fmt" - "path/filepath" + "os" + "slices" "strings" "sync" "time" @@ -16,34 +17,24 @@ import ( "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/secp256k1" "github.com/spf13/cobra" - "golang.org/x/exp/slices" - - "github.com/ledgerwatch/erigon/polygon/heimdall" - - "github.com/ledgerwatch/erigon/core/rawdb/blockio" - "github.com/ledgerwatch/erigon/node/nodecfg" - "github.com/ledgerwatch/erigon/p2p/sentry/sentry_multi_client" - "github.com/ledgerwatch/erigon/polygon/bor" - "github.com/ledgerwatch/erigon/turbo/builder" - "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" chain2 "github.com/ledgerwatch/erigon-lib/chain" - "github.com/ledgerwatch/erigon-lib/commitment" common2 "github.com/ledgerwatch/erigon-lib/common" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/cmp" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/common/dir" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcfg" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" libstate "github.com/ledgerwatch/erigon-lib/state" "github.com/ledgerwatch/erigon-lib/wrap" - "github.com/ledgerwatch/erigon/cmd/hack/tool/fromdb" "github.com/ledgerwatch/erigon/consensus" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/rawdb" + "github.com/ledgerwatch/erigon/core/rawdb/blockio" reset2 "github.com/ledgerwatch/erigon/core/rawdb/rawdbreset" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" @@ -54,11 +45,18 @@ import ( "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/ethdb/prune" "github.com/ledgerwatch/erigon/migrations" + "github.com/ledgerwatch/erigon/node/nodecfg" "github.com/ledgerwatch/erigon/p2p" + "github.com/ledgerwatch/erigon/p2p/sentry" + "github.com/ledgerwatch/erigon/p2p/sentry/sentry_multi_client" "github.com/ledgerwatch/erigon/params" + "github.com/ledgerwatch/erigon/polygon/bor" + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/turbo/builder" "github.com/ledgerwatch/erigon/turbo/debug" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/erigon/turbo/shards" + "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" "github.com/ledgerwatch/erigon/turbo/snapshotsync/snap" stages2 "github.com/ledgerwatch/erigon/turbo/stages" ) @@ -68,7 +66,7 @@ var cmdStageSnapshots = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -89,7 +87,7 @@ var cmdStageHeaders = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -110,14 +108,14 @@ var cmdStageBorHeimdall = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return } defer db.Close() - if err := stageBorHeimdall(db, cmd.Context(), logger); err != nil { + if err := stageBorHeimdall(db, cmd.Context(), unwindTypes, logger); err != nil { if !errors.Is(err, context.Canceled) { logger.Error(err.Error()) } @@ -131,7 +129,7 @@ var cmdStageBodies = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -152,7 +150,7 @@ var cmdStageSenders = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -173,7 +171,7 @@ var cmdStageExec = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -196,7 +194,7 @@ var cmdStageTrie = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -217,7 +215,7 @@ var cmdStageHashState = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -238,7 +236,7 @@ var cmdStageHistory = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -259,7 +257,7 @@ var cmdLogIndex = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -280,7 +278,7 @@ var cmdCallTraces = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -301,7 +299,7 @@ var cmdStageTxLookup = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -316,12 +314,13 @@ var cmdStageTxLookup = &cobra.Command{ } }, } + var cmdPrintStages = &cobra.Command{ Use: "print_stages", Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), false, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), false, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -337,12 +336,82 @@ var cmdPrintStages = &cobra.Command{ }, } +var cmdPrintTableSizes = &cobra.Command{ + Use: "print_table_sizes", + Short: "", + Run: func(cmd *cobra.Command, args []string) { + logger := debug.SetupCobra(cmd, "integration") + db, err := openDB(dbCfg(kv.ChainDB, chaindata), false, logger) + if err != nil { + logger.Error("Opening DB", "error", err) + return + } + defer db.Close() + + allTablesCfg := db.AllTables() + allTables := make([]string, 0, len(allTablesCfg)) + for table, cfg := range allTablesCfg { + if cfg.IsDeprecated { + continue + } + + allTables = append(allTables, table) + } + + var tableSizes []interface{} + err = db.View(cmd.Context(), func(tx kv.Tx) error { + tableSizes = stagedsync.CollectTableSizes(db, tx, allTables) + return nil + }) + if err != nil { + logger.Error("error while collecting table sizes", "err", err) + return + } + + if len(tableSizes)%2 != 0 { + logger.Error("table sizes len not even", "len", len(tableSizes)) + return + } + + var sb strings.Builder + sb.WriteString("Table") + sb.WriteRune(',') + sb.WriteString("Size") + sb.WriteRune('\n') + for i := 0; i < len(tableSizes)/2; i++ { + sb.WriteString(tableSizes[i*2].(string)) + sb.WriteRune(',') + sb.WriteString(tableSizes[i*2+1].(string)) + sb.WriteRune('\n') + } + + if outputCsvFile == "" { + logger.Info("table sizes", "csv", sb.String()) + return + } + + f, err := os.Create(outputCsvFile) + if err != nil { + logger.Error("issue creating file", "file", outputCsvFile, "err", err) + return + } + + _, err = f.WriteString(sb.String()) + if err != nil { + logger.Error("issue writing output to file", "file", outputCsvFile, "err", err) + return + } + + logger.Info("wrote table sizes to csv output file", "file", outputCsvFile) + }, +} + var cmdPrintMigrations = &cobra.Command{ Use: "print_migrations", Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), false, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), false, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -362,7 +431,7 @@ var cmdRemoveMigration = &cobra.Command{ Short: "", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), false, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), false, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -384,7 +453,7 @@ var cmdRunMigrations = &cobra.Command{ logger := debug.SetupCobra(cmd, "integration") //non-accede and exclusive mode - to apply create new tables if need. cfg := dbCfg(kv.ChainDB, chaindata).Flags(func(u uint) uint { return u &^ mdbx.Accede }).Exclusive() - db, err := openDB(cfg, true, snapshotVersion, logger) + db, err := openDB(cfg, true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -399,7 +468,7 @@ var cmdSetPrune = &cobra.Command{ Short: "Override existing --prune flag value (if you know what you are doing)", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -419,13 +488,13 @@ var cmdSetSnap = &cobra.Command{ Short: "Override existing --snapshots flag value (if you know what you are doing)", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return } defer db.Close() - sn, borSn, agg := allSnapshots(cmd.Context(), db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(cmd.Context(), db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -455,7 +524,7 @@ var cmdForceSetHistoryV3 = &cobra.Command{ Short: "Override existing --history.v3 flag value (if you know what you are doing)", Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -477,9 +546,12 @@ func init() { withDataDir(cmdPrintStages) withChain(cmdPrintStages) withHeimdall(cmdPrintStages) - withSnapshotVersion(cmdPrintStages) rootCmd.AddCommand(cmdPrintStages) + withDataDir(cmdPrintTableSizes) + withOutputCsvFile(cmdPrintTableSizes) + rootCmd.AddCommand(cmdPrintTableSizes) + withConfig(cmdStageSenders) withIntegrityChecks(cmdStageSenders) withReset(cmdStageSenders) @@ -488,13 +560,11 @@ func init() { withDataDir(cmdStageSenders) withChain(cmdStageSenders) withHeimdall(cmdStageSenders) - withSnapshotVersion(cmdStageSenders) rootCmd.AddCommand(cmdStageSenders) withConfig(cmdStageSnapshots) withDataDir(cmdStageSnapshots) withReset(cmdStageSnapshots) - withSnapshotVersion(cmdStageSnapshots) rootCmd.AddCommand(cmdStageSnapshots) withConfig(cmdStageHeaders) @@ -504,15 +574,14 @@ func init() { withReset(cmdStageHeaders) withChain(cmdStageHeaders) withHeimdall(cmdStageHeaders) - withSnapshotVersion(cmdStageHeaders) rootCmd.AddCommand(cmdStageHeaders) withConfig(cmdStageBorHeimdall) withDataDir(cmdStageBorHeimdall) withReset(cmdStageBorHeimdall) + withUnwind(cmdStageBorHeimdall) withChain(cmdStageBorHeimdall) withHeimdall(cmdStageBorHeimdall) - withSnapshotVersion(cmdStageBorHeimdall) rootCmd.AddCommand(cmdStageBorHeimdall) withConfig(cmdStageBodies) @@ -520,7 +589,6 @@ func init() { withUnwind(cmdStageBodies) withChain(cmdStageBodies) withHeimdall(cmdStageBodies) - withSnapshotVersion(cmdStageBodies) rootCmd.AddCommand(cmdStageBodies) withConfig(cmdStageExec) @@ -535,7 +603,6 @@ func init() { withChain(cmdStageExec) withHeimdall(cmdStageExec) withWorkers(cmdStageExec) - withSnapshotVersion(cmdStageExec) rootCmd.AddCommand(cmdStageExec) withConfig(cmdStageHashState) @@ -547,7 +614,6 @@ func init() { withBatchSize(cmdStageHashState) withChain(cmdStageHashState) withHeimdall(cmdStageHashState) - withSnapshotVersion(cmdStageHashState) rootCmd.AddCommand(cmdStageHashState) withConfig(cmdStageTrie) @@ -559,7 +625,6 @@ func init() { withIntegrityChecks(cmdStageTrie) withChain(cmdStageTrie) withHeimdall(cmdStageTrie) - withSnapshotVersion(cmdStageTrie) rootCmd.AddCommand(cmdStageTrie) withConfig(cmdStageHistory) @@ -570,18 +635,17 @@ func init() { withPruneTo(cmdStageHistory) withChain(cmdStageHistory) withHeimdall(cmdStageHistory) - withSnapshotVersion(cmdStageHistory) rootCmd.AddCommand(cmdStageHistory) withConfig(cmdLogIndex) withDataDir(cmdLogIndex) withReset(cmdLogIndex) + withResetPruneAt(cmdLogIndex) withBlock(cmdLogIndex) withUnwind(cmdLogIndex) withPruneTo(cmdLogIndex) withChain(cmdLogIndex) withHeimdall(cmdLogIndex) - withSnapshotVersion(cmdLogIndex) rootCmd.AddCommand(cmdLogIndex) withConfig(cmdCallTraces) @@ -592,7 +656,6 @@ func init() { withPruneTo(cmdCallTraces) withChain(cmdCallTraces) withHeimdall(cmdCallTraces) - withSnapshotVersion(cmdCallTraces) rootCmd.AddCommand(cmdCallTraces) withConfig(cmdStageTxLookup) @@ -603,12 +666,10 @@ func init() { withPruneTo(cmdStageTxLookup) withChain(cmdStageTxLookup) withHeimdall(cmdStageTxLookup) - withSnapshotVersion(cmdStageTxLookup) rootCmd.AddCommand(cmdStageTxLookup) withConfig(cmdPrintMigrations) withDataDir(cmdPrintMigrations) - withSnapshotVersion(cmdPrintMigrations) rootCmd.AddCommand(cmdPrintMigrations) withConfig(cmdRemoveMigration) @@ -616,27 +677,23 @@ func init() { withMigration(cmdRemoveMigration) withChain(cmdRemoveMigration) withHeimdall(cmdRemoveMigration) - withSnapshotVersion(cmdRemoveMigration) rootCmd.AddCommand(cmdRemoveMigration) withConfig(cmdRunMigrations) withDataDir(cmdRunMigrations) withChain(cmdRunMigrations) withHeimdall(cmdRunMigrations) - withSnapshotVersion(cmdRunMigrations) rootCmd.AddCommand(cmdRunMigrations) withConfig(cmdSetSnap) withDataDir2(cmdSetSnap) withChain(cmdSetSnap) - withSnapshotVersion(cmdSetSnap) cmdSetSnap.Flags().Bool("snapshots", false, "") must(cmdSetSnap.MarkFlagRequired("snapshots")) rootCmd.AddCommand(cmdSetSnap) withConfig(cmdForceSetHistoryV3) withDataDir2(cmdForceSetHistoryV3) - withSnapshotVersion(cmdForceSetHistoryV3) cmdForceSetHistoryV3.Flags().BoolVar(&_forceSetHistoryV3, "history.v3", false, "") must(cmdForceSetHistoryV3.MarkFlagRequired("history.v3")) rootCmd.AddCommand(cmdForceSetHistoryV3) @@ -644,7 +701,6 @@ func init() { withConfig(cmdSetPrune) withDataDir(cmdSetPrune) withChain(cmdSetPrune) - withSnapshotVersion(cmdSetPrune) cmdSetPrune.Flags().StringVar(&pruneFlag, "prune", "hrtc", "") cmdSetPrune.Flags().Uint64Var(&pruneH, "prune.h.older", 0, "") cmdSetPrune.Flags().Uint64Var(&pruneR, "prune.r.older", 0, "") @@ -655,6 +711,7 @@ func init() { cmdSetPrune.Flags().Uint64Var(&pruneTBefore, "prune.t.before", 0, "") cmdSetPrune.Flags().Uint64Var(&pruneCBefore, "prune.c.before", 0, "") cmdSetPrune.Flags().StringSliceVar(&experiments, "experiments", nil, "Storage mode to override database") + cmdSetPrune.Flags().StringSliceVar(&unwindTypes, "unwind.types", nil, "Types to unwind for bor heimdall") rootCmd.AddCommand(cmdSetPrune) } @@ -680,7 +737,7 @@ func stageHeaders(db kv.RwDB, ctx context.Context, logger log.Logger) error { return err } - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -765,7 +822,12 @@ func stageHeaders(db kv.RwDB, ctx context.Context, logger log.Logger) error { }) } -func stageBorHeimdall(db kv.RwDB, ctx context.Context, logger log.Logger) error { +func stageBorHeimdall(db kv.RwDB, ctx context.Context, unwindTypes []string, logger log.Logger) error { + engine, _, sync, _, miningState := newSync(ctx, db, nil /* miningConfig */, logger) + chainConfig := fromdb.ChainConfig(db) + + heimdallClient := engine.(*bor.Bor).HeimdallClient + return db.Update(ctx, func(tx kv.RwTx) error { if reset { if err := reset2.ResetBorHeimdall(ctx, tx); err != nil { @@ -773,12 +835,72 @@ func stageBorHeimdall(db kv.RwDB, ctx context.Context, logger log.Logger) error } return nil } + if unwind > 0 { + sn, borSn, agg := allSnapshots(ctx, db, logger) + defer sn.Close() + defer borSn.Close() + defer agg.Close() + + stageState := stage(sync, tx, nil, stages.BorHeimdall) + + snapshotsMaxBlock := borSn.BlocksAvailable() + if unwind <= snapshotsMaxBlock { + return fmt.Errorf("cannot unwind past snapshots max block: %d", snapshotsMaxBlock) + } + + if unwind > stageState.BlockNumber { + return fmt.Errorf("cannot unwind to a point beyond stage: %d", stageState.BlockNumber) + } + + unwindState := sync.NewUnwindState(stages.BorHeimdall, stageState.BlockNumber-unwind, stageState.BlockNumber) + cfg := stagedsync.StageBorHeimdallCfg(db, nil, miningState, *chainConfig, nil, nil, nil, nil, nil, nil, nil, false, unwindTypes) + if err := stagedsync.BorHeimdallUnwind(unwindState, ctx, stageState, tx, cfg); err != nil { + return err + } + + stageProgress, err := stages.GetStageProgress(tx, stages.BorHeimdall) + if err != nil { + return fmt.Errorf("re-read bor heimdall progress: %w", err) + } + + logger.Info("progress", "bor heimdall", stageProgress) + return nil + } + + sn, borSn, agg := allSnapshots(ctx, db, logger) + defer sn.Close() + defer borSn.Close() + defer agg.Close() + blockReader, _ := blocksIO(db, logger) + var ( + snapDb kv.RwDB + recents *lru.ARCCache[libcommon.Hash, *bor.Snapshot] + signatures *lru.ARCCache[libcommon.Hash, libcommon.Address] + ) + if bor, ok := engine.(*bor.Bor); ok { + snapDb = bor.DB + recents = bor.Recents + signatures = bor.Signatures + } + cfg := stagedsync.StageBorHeimdallCfg(db, snapDb, miningState, *chainConfig, heimdallClient, blockReader, nil, nil, nil, recents, signatures, false, unwindTypes) + + stageState := stage(sync, tx, nil, stages.BorHeimdall) + if err := stagedsync.BorHeimdallForward(stageState, sync, ctx, tx, cfg, logger); err != nil { + return err + } + + stageProgress, err := stages.GetStageProgress(tx, stages.BorHeimdall) + if err != nil { + return fmt.Errorf("re-read bor heimdall progress: %w", err) + } + + logger.Info("progress", "bor heimdall", stageProgress) return nil }) } func stageBodies(db kv.RwDB, ctx context.Context, logger log.Logger) error { - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -818,7 +940,7 @@ func stageBodies(db kv.RwDB, ctx context.Context, logger log.Logger) error { func stageSenders(db kv.RwDB, ctx context.Context, logger log.Logger) error { tmpdir := datadir.New(datadirCli).Tmp chainConfig := fromdb.ChainConfig(db) - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -916,7 +1038,7 @@ func stageExec(db kv.RwDB, ctx context.Context, logger log.Logger) error { engine, vmConfig, sync, _, _ := newSync(ctx, db, nil /* miningConfig */, logger) must(sync.SetCurrentStage(stages.Execution)) - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -999,7 +1121,7 @@ func stageExec(db kv.RwDB, ctx context.Context, logger log.Logger) error { func stageTrie(db kv.RwDB, ctx context.Context, logger log.Logger) error { dirs, pm, historyV3 := datadir.New(datadirCli), fromdb.PruneMode(db), kvcfg.HistoryV3.FromDB(db) - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -1057,7 +1179,7 @@ func stageTrie(db kv.RwDB, ctx context.Context, logger log.Logger) error { func stageHashState(db kv.RwDB, ctx context.Context, logger log.Logger) error { dirs, pm, historyV3 := datadir.New(datadirCli), fromdb.PruneMode(db), kvcfg.HistoryV3.FromDB(db) - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -1113,7 +1235,7 @@ func stageHashState(db kv.RwDB, ctx context.Context, logger log.Logger) error { } func stageLogIndex(db kv.RwDB, ctx context.Context, logger log.Logger) error { - dirs, pm, historyV3 := datadir.New(datadirCli), fromdb.PruneMode(db), kvcfg.HistoryV3.FromDB(db) + dirs, pm, historyV3, chainConfig := datadir.New(datadirCli), fromdb.PruneMode(db), kvcfg.HistoryV3.FromDB(db), fromdb.ChainConfig(db) if historyV3 { return fmt.Errorf("this stage is disable in --history.v3=true") } @@ -1125,6 +1247,9 @@ func stageLogIndex(db kv.RwDB, ctx context.Context, logger log.Logger) error { if reset { return reset2.Reset(ctx, db, stages.LogIndex) } + if resetPruneAt { + return reset2.ResetPruneAt(ctx, db, stages.LogIndex) + } tx, err := db.BeginRw(ctx) if err != nil { return err @@ -1143,7 +1268,7 @@ func stageLogIndex(db kv.RwDB, ctx context.Context, logger log.Logger) error { logger.Info("Stage exec", "progress", execAt) logger.Info("Stage", "name", s.ID, "progress", s.BlockNumber) - cfg := stagedsync.StageLogIndexCfg(db, pm, dirs.Tmp) + cfg := stagedsync.StageLogIndexCfg(db, pm, dirs.Tmp, chainConfig.NoPruneContracts) if unwind > 0 { u := sync.NewUnwindState(stages.LogIndex, s.BlockNumber-unwind, s.BlockNumber) err = stagedsync.UnwindLogIndex(u, s, tx, cfg, ctx) @@ -1235,7 +1360,7 @@ func stageHistory(db kv.RwDB, ctx context.Context, logger log.Logger) error { if historyV3 { return fmt.Errorf("this stage is disable in --history.v3=true") } - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -1311,7 +1436,7 @@ func stageTxLookup(db kv.RwDB, ctx context.Context, logger log.Logger) error { _, _, sync, _, _ := newSync(ctx, db, nil /* miningConfig */, logger) chainConfig := fromdb.ChainConfig(db) must(sync.SetCurrentStage(stages.TxLookup)) - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -1361,7 +1486,7 @@ func stageTxLookup(db kv.RwDB, ctx context.Context, logger log.Logger) error { } func printAllStages(db kv.RoDB, ctx context.Context, logger log.Logger) error { - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -1395,9 +1520,9 @@ func removeMigration(db kv.RwDB, ctx context.Context) error { var openSnapshotOnce sync.Once var _allSnapshotsSingleton *freezeblocks.RoSnapshots var _allBorSnapshotsSingleton *freezeblocks.BorRoSnapshots -var _aggSingleton *libstate.AggregatorV3 +var _aggSingleton *libstate.Aggregator -func allSnapshots(ctx context.Context, db kv.RoDB, version uint8, logger log.Logger) (*freezeblocks.RoSnapshots, *freezeblocks.BorRoSnapshots, *libstate.AggregatorV3) { +func allSnapshots(ctx context.Context, db kv.RoDB, logger log.Logger) (*freezeblocks.RoSnapshots, *freezeblocks.BorRoSnapshots, *libstate.Aggregator) { openSnapshotOnce.Do(func() { var useSnapshots bool _ = db.View(context.Background(), func(tx kv.Tx) error { @@ -1408,11 +1533,11 @@ func allSnapshots(ctx context.Context, db kv.RoDB, version uint8, logger log.Log dir.MustExist(dirs.SnapHistory) snapCfg := ethconfig.NewSnapCfg(useSnapshots, true, true) - _allSnapshotsSingleton = freezeblocks.NewRoSnapshots(snapCfg, dirs.Snap, version, logger) - _allBorSnapshotsSingleton = freezeblocks.NewBorRoSnapshots(snapCfg, dirs.Snap, snapshotVersion, logger) + _allSnapshotsSingleton = freezeblocks.NewRoSnapshots(snapCfg, dirs.Snap, 0, logger) + _allBorSnapshotsSingleton = freezeblocks.NewBorRoSnapshots(snapCfg, dirs.Snap, 0, logger) var err error - _aggSingleton, err = libstate.NewAggregatorV3(ctx, dirs.SnapHistory, dirs.Tmp, ethconfig.HistoryV3AggregationStep, db, logger) + _aggSingleton, err = libstate.NewAggregator(ctx, dirs.SnapHistory, dirs.Tmp, config3.HistoryV3AggregationStep, db, logger) if err != nil { panic(err) } @@ -1448,7 +1573,7 @@ var _blockWriterSingleton *blockio.BlockWriter func blocksIO(db kv.RoDB, logger log.Logger) (services.FullBlockReader, *blockio.BlockWriter) { openBlockReaderOnce.Do(func() { - sn, borSn, _ := allSnapshots(context.Background(), db, snapshotVersion, logger) + sn, borSn, _ := allSnapshots(context.Background(), db, logger) histV3 := kvcfg.HistoryV3.FromDB(db) _blockReaderSingleton = freezeblocks.NewBlockReader(sn, borSn) _blockWriterSingleton = blockio.NewBlockWriter(histV3) @@ -1456,83 +1581,6 @@ func blocksIO(db kv.RoDB, logger log.Logger) (services.FullBlockReader, *blockio return _blockReaderSingleton, _blockWriterSingleton } -var openDomainsOnce sync.Once -var _aggDomainSingleton *libstate.Aggregator - -func allDomains(ctx context.Context, db kv.RoDB, stepSize uint64, mode libstate.CommitmentMode, trie commitment.TrieVariant, logger log.Logger) (*freezeblocks.RoSnapshots, *libstate.Aggregator) { - openDomainsOnce.Do(func() { - var useSnapshots bool - _ = db.View(context.Background(), func(tx kv.Tx) error { - useSnapshots, _ = snap.Enabled(tx) - return nil - }) - dirs := datadir.New(datadirCli) - dir.MustExist(dirs.SnapHistory) - - snapCfg := ethconfig.NewSnapCfg(useSnapshots, true, true) - _allSnapshotsSingleton = freezeblocks.NewRoSnapshots(snapCfg, dirs.Snap, snapshotVersion, logger) - - var err error - _aggDomainSingleton, err = libstate.NewAggregator(filepath.Join(dirs.DataDir, "state"), dirs.Tmp, stepSize, mode, trie, logger) - if err != nil { - panic(err) - } - if err = _aggDomainSingleton.ReopenFolder(); err != nil { - panic(err) - } - - if useSnapshots { - if err := _allSnapshotsSingleton.ReopenFolder(); err != nil { - panic(err) - } - _allSnapshotsSingleton.LogStat("all:singleton") - //db.View(context.Background(), func(tx kv.Tx) error { - // _aggSingleton.LogStats(tx, func(endTxNumMinimax uint64) uint64 { - // _, histBlockNumProgress, _ := rawdbv3.TxNums.FindBlockNum(tx, endTxNumMinimax) - // return histBlockNumProgress - // }) - // return nil - //}) - } - }) - return _allSnapshotsSingleton, _aggDomainSingleton -} - -func newDomains(ctx context.Context, db kv.RwDB, stepSize uint64, mode libstate.CommitmentMode, trie commitment.TrieVariant, logger log.Logger) (consensus.Engine, ethconfig.Config, *freezeblocks.RoSnapshots, *libstate.Aggregator) { - historyV3, pm := kvcfg.HistoryV3.FromDB(db), fromdb.PruneMode(db) - //events := shards.NewEvents() - genesis := core.GenesisBlockByChainName(chain) - - chainConfig, genesisBlock, genesisErr := core.CommitGenesisBlock(db, genesis, "", logger) - _ = genesisBlock // TODO apply if needed here - - if _, ok := genesisErr.(*chain2.ConfigCompatError); genesisErr != nil && !ok { - panic(genesisErr) - } - //logger.Info("Initialised chain configuration", "config", chainConfig) - - var batchSize datasize.ByteSize - must(batchSize.UnmarshalText([]byte(batchSizeStr))) - - cfg := ethconfig.Defaults - cfg.HistoryV3 = historyV3 - cfg.Prune = pm - cfg.BatchSize = batchSize - cfg.DeprecatedTxPool.Disable = true - cfg.Genesis = core.GenesisBlockByChainName(chain) - //if miningConfig != nil { - // cfg.Miner = *miningConfig - //} - cfg.Dirs = datadir.New(datadirCli) - - allSn, agg := allDomains(ctx, db, stepSize, mode, trie, logger) - cfg.Snapshot = allSn.Cfg() - - blockReader, _ := blocksIO(db, logger) - engine, _ := initConsensusEngine(ctx, chainConfig, cfg.Dirs.DataDir, db, blockReader, logger) - return engine, cfg, allSn, agg -} - const blockBufferSize = 128 func newSync(ctx context.Context, db kv.RwDB, miningConfig *params.MiningConfig, logger log.Logger) (consensus.Engine, *vm.Config, *stagedsync.Sync, *stagedsync.Sync, stagedsync.MiningState) { @@ -1557,34 +1605,39 @@ func newSync(ctx context.Context, db kv.RwDB, miningConfig *params.MiningConfig, cfg.Prune = pm cfg.BatchSize = batchSize cfg.DeprecatedTxPool.Disable = true - cfg.Genesis = core.GenesisBlockByChainName(chain) + cfg.Genesis = genesis if miningConfig != nil { cfg.Miner = *miningConfig } cfg.Dirs = datadir.New(datadirCli) - allSn, _, agg := allSnapshots(ctx, db, snapshotVersion, logger) + allSn, _, agg := allSnapshots(ctx, db, logger) cfg.Snapshot = allSn.Cfg() blockReader, blockWriter := blocksIO(db, logger) engine, heimdallClient := initConsensusEngine(ctx, chainConfig, cfg.Dirs.DataDir, db, blockReader, logger) + statusDataProvider := sentry.NewStatusDataProvider( + db, + chainConfig, + genesisBlock, + chainConfig.ChainID.Uint64(), + logger, + ) + maxBlockBroadcastPeers := func(header *types.Header) uint { return 0 } sentryControlServer, err := sentry_multi_client.NewMultiClient( db, - "", chainConfig, - genesisBlock.Hash(), - genesisBlock.Time(), engine, - 1, nil, ethconfig.Defaults.Sync, blockReader, blockBufferSize, + statusDataProvider, false, - nil, maxBlockBroadcastPeers, + false, /* disableBlockDownload */ logger, ) if err != nil { @@ -1619,7 +1672,7 @@ func newSync(ctx context.Context, db kv.RwDB, miningConfig *params.MiningConfig, cfg.Sync, stagedsync.MiningStages(ctx, stagedsync.StageMiningCreateBlockCfg(db, miner, *chainConfig, engine, nil, nil, dirs.Tmp, blockReader), - stagedsync.StageBorHeimdallCfg(db, snapDb, miner, *chainConfig, heimdallClient, blockReader, nil, nil, nil, recents, signatures), + stagedsync.StageBorHeimdallCfg(db, snapDb, miner, *chainConfig, heimdallClient, blockReader, nil, nil, nil, recents, signatures, false, unwindTypes), stagedsync.StageMiningExecCfg(db, miner, events, *chainConfig, engine, &vm.Config{}, dirs.Tmp, nil, 0, nil, nil, blockReader), stagedsync.StageHashStateCfg(db, dirs, historyV3), stagedsync.StageTrieCfg(db, false, true, false, dirs.Tmp, blockReader, nil, historyV3, agg), diff --git a/cmd/integration/commands/state_domains.go b/cmd/integration/commands/state_domains.go deleted file mode 100644 index cacbb6238de..00000000000 --- a/cmd/integration/commands/state_domains.go +++ /dev/null @@ -1,328 +0,0 @@ -package commands - -import ( - "context" - "encoding/hex" - "errors" - "fmt" - "path/filepath" - "runtime" - "strings" - "time" - - "github.com/ledgerwatch/erigon-lib/metrics" - - "github.com/holiman/uint256" - "github.com/ledgerwatch/log/v3" - "github.com/spf13/cobra" - - "github.com/ledgerwatch/erigon-lib/commitment" - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon-lib/common/dbg" - "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/kv" - kv2 "github.com/ledgerwatch/erigon-lib/kv/mdbx" - libstate "github.com/ledgerwatch/erigon-lib/state" - - "github.com/ledgerwatch/erigon/cmd/utils" - "github.com/ledgerwatch/erigon/core" - "github.com/ledgerwatch/erigon/core/types/accounts" - "github.com/ledgerwatch/erigon/eth/ethconfig" - "github.com/ledgerwatch/erigon/node/nodecfg" - erigoncli "github.com/ledgerwatch/erigon/turbo/cli" - "github.com/ledgerwatch/erigon/turbo/debug" -) - -func init() { - withDataDir(readDomains) - withChain(readDomains) - withHeimdall(readDomains) - withWorkers(readDomains) - withStartTx(readDomains) - - rootCmd.AddCommand(readDomains) -} - -// if trie variant is not hex, we could not have another rootHash with to verify it -var ( - stepSize uint64 - lastStep uint64 - dirtySpaceThreshold = uint64(2 * 1024 * 1024 * 1024) /* threshold of dirty space in MDBX transaction that triggers a commit */ - blockRootMismatchExpected bool - - mxBlockExecutionTimer = metrics.GetOrCreateSummary("chain_execution_seconds") - mxCommitTook = metrics.GetOrCreateHistogram("domain_commit_took") -) - -// write command to just seek and query state by addr and domain from state db and files (if any) -var readDomains = &cobra.Command{ - Use: "read_domains", - Short: `Run block execution and commitment with Domains.`, - Example: "go run ./cmd/integration read_domains --datadir=... --verbosity=3", - ValidArgs: []string{"account", "storage", "code", "commitment"}, - Args: cobra.ArbitraryArgs, - Run: func(cmd *cobra.Command, args []string) { - logger := debug.SetupCobra(cmd, "integration") - ctx, _ := libcommon.RootContext() - cfg := &nodecfg.DefaultConfig - utils.SetNodeConfigCobra(cmd, cfg) - ethConfig := ðconfig.Defaults - ethConfig.Genesis = core.GenesisBlockByChainName(chain) - erigoncli.ApplyFlagsForEthConfigCobra(cmd.Flags(), ethConfig) - - var readFromDomain string - var addrs [][]byte - for i := 0; i < len(args); i++ { - if i == 0 { - switch s := strings.ToLower(args[i]); s { - case "account", "storage", "code", "commitment": - readFromDomain = s - default: - logger.Error("invalid domain to read from", "arg", args[i]) - return - } - continue - } - addr, err := hex.DecodeString(strings.TrimPrefix(args[i], "0x")) - if err != nil { - logger.Warn("invalid address passed", "str", args[i], "at position", i, "err", err) - continue - } - addrs = append(addrs, addr) - } - - dirs := datadir.New(datadirCli) - chainDb, err := openDB(dbCfg(kv.ChainDB, dirs.Chaindata), true, snapshotVersion, logger) - if err != nil { - logger.Error("Opening DB", "error", err) - return - } - defer chainDb.Close() - - stateDb, err := kv2.NewMDBX(log.New()).Path(filepath.Join(dirs.DataDir, "statedb")).WriteMap().Open(ctx) - if err != nil { - return - } - defer stateDb.Close() - - if err := requestDomains(chainDb, stateDb, ctx, readFromDomain, addrs, logger); err != nil { - if !errors.Is(err, context.Canceled) { - logger.Error(err.Error()) - } - return - } - }, -} - -func requestDomains(chainDb, stateDb kv.RwDB, ctx context.Context, readDomain string, addrs [][]byte, logger log.Logger) error { - trieVariant := commitment.ParseTrieVariant(commitmentTrie) - if trieVariant != commitment.VariantHexPatriciaTrie { - blockRootMismatchExpected = true - } - mode := libstate.ParseCommitmentMode(commitmentMode) - libstate.COMPARE_INDEXES = true - - _, _, _, agg := newDomains(ctx, chainDb, stepSize, mode, trieVariant, logger) - defer agg.Close() - - histTx, err := chainDb.BeginRo(ctx) - must(err) - defer histTx.Rollback() - - stateTx, err := stateDb.BeginRw(ctx) - must(err) - defer stateTx.Rollback() - - agg.SetTx(stateTx) - defer agg.StartWrites().FinishWrites() - - latestBlock, latestTx, err := agg.SeekCommitment() - if err != nil && startTxNum != 0 { - return fmt.Errorf("failed to seek commitment to tx %d: %w", startTxNum, err) - } - if latestTx < startTxNum { - return fmt.Errorf("latest available tx to start is %d and its less than start tx %d", latestTx, startTxNum) - } - if latestTx > 0 { - logger.Info("aggregator files opened", "txn", latestTx, "block", latestBlock) - } - agg.SetTxNum(latestTx) - - r := ReaderWrapper4{ - roTx: histTx, - ac: agg.MakeContext(), - } - - switch readDomain { - case "account": - for _, addr := range addrs { - acc, err := r.ReadAccountData(libcommon.BytesToAddress(addr)) - if err != nil { - logger.Error("failed to read account", "addr", addr, "err", err) - continue - } - fmt.Printf("%x: nonce=%d balance=%d code=%x root=%x\n", addr, acc.Nonce, acc.Balance.Uint64(), acc.CodeHash, acc.Root) - } - case "storage": - for _, addr := range addrs { - a, s := libcommon.BytesToAddress(addr[:length.Addr]), libcommon.BytesToHash(addr[length.Addr:]) - st, err := r.ReadAccountStorage(a, 0, &s) - if err != nil { - logger.Error("failed to read storage", "addr", a.String(), "key", s.String(), "err", err) - continue - } - fmt.Printf("%s %s -> %x\n", a.String(), s.String(), st) - } - case "code": - for _, addr := range addrs { - code, err := r.ReadAccountCode(libcommon.BytesToAddress(addr), 0, libcommon.Hash{}) - if err != nil { - logger.Error("failed to read code", "addr", addr, "err", err) - continue - } - fmt.Printf("%s: %x\n", addr, code) - } - } - return nil -} - -// Implements StateReader and StateWriter -type ReaderWrapper4 struct { - roTx kv.Tx - ac *libstate.AggregatorContext -} - -type WriterWrapper4 struct { - w *libstate.Aggregator -} - -func (rw *ReaderWrapper4) SetTx(roTx kv.Tx, ctx *libstate.AggregatorContext) { - rw.roTx = roTx - rw.ac.Close() - rw.ac = ctx -} - -func (rw *ReaderWrapper4) ReadAccountData(address libcommon.Address) (*accounts.Account, error) { - enc, err := rw.ac.ReadAccountData(address.Bytes(), rw.roTx) - if err != nil { - return nil, err - } - if len(enc) == 0 { - return nil, nil - } - var a accounts.Account - if err := accounts.DeserialiseV3(&a, enc); err != nil { - return nil, err - } - return &a, nil -} - -func (rw *ReaderWrapper4) ReadAccountStorage(address libcommon.Address, incarnation uint64, key *libcommon.Hash) ([]byte, error) { - enc, err := rw.ac.ReadAccountStorage(address.Bytes(), key.Bytes(), rw.roTx) - if err != nil { - return nil, err - } - if enc == nil { - return nil, nil - } - if len(enc) == 1 && enc[0] == 0 { - return nil, nil - } - return enc, nil -} - -func (rw *ReaderWrapper4) ReadAccountCode(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash) ([]byte, error) { - return rw.ac.ReadAccountCode(address.Bytes(), rw.roTx) -} - -func (rw *ReaderWrapper4) ReadAccountCodeSize(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash) (int, error) { - return rw.ac.ReadAccountCodeSize(address.Bytes(), rw.roTx) -} - -func (rw *ReaderWrapper4) ReadAccountIncarnation(address libcommon.Address) (uint64, error) { - return 0, nil -} - -func (ww *WriterWrapper4) UpdateAccountData(address libcommon.Address, original, account *accounts.Account) error { - value := accounts.SerialiseV3(account) - if err := ww.w.UpdateAccountData(address.Bytes(), value); err != nil { - return err - } - return nil -} - -func (ww *WriterWrapper4) UpdateAccountCode(address libcommon.Address, incarnation uint64, codeHash libcommon.Hash, code []byte) error { - if err := ww.w.UpdateAccountCode(address.Bytes(), code); err != nil { - return err - } - return nil -} - -func (ww *WriterWrapper4) DeleteAccount(address libcommon.Address, original *accounts.Account) error { - if err := ww.w.DeleteAccount(address.Bytes()); err != nil { - return err - } - return nil -} - -func (ww *WriterWrapper4) WriteAccountStorage(address libcommon.Address, incarnation uint64, key *libcommon.Hash, original, value *uint256.Int) error { - if err := ww.w.WriteAccountStorage(address.Bytes(), key.Bytes(), value.Bytes()); err != nil { - return err - } - return nil -} - -func (ww *WriterWrapper4) CreateContract(address libcommon.Address) error { - return nil -} - -type stat4 struct { - prevBlock uint64 - blockNum uint64 - hits uint64 - misses uint64 - hitMissRatio float64 - blockSpeed float64 - txSpeed float64 - prevTxNum uint64 - txNum uint64 - prevTime time.Time - mem runtime.MemStats - startedAt time.Time -} - -func (s *stat4) print(aStats libstate.FilesStats, logger log.Logger) { - totalFiles := aStats.FilesCount - totalDatSize := aStats.DataSize - totalIdxSize := aStats.IdxSize - - logger.Info("Progress", "block", s.blockNum, "blk/s", s.blockSpeed, "tx", s.txNum, "txn/s", s.txSpeed, "state files", totalFiles, - "total dat", libcommon.ByteCount(totalDatSize), "total idx", libcommon.ByteCount(totalIdxSize), - "hit ratio", s.hitMissRatio, "hits+misses", s.hits+s.misses, - "alloc", libcommon.ByteCount(s.mem.Alloc), "sys", libcommon.ByteCount(s.mem.Sys), - ) -} - -func (s *stat4) delta(blockNum, txNum uint64) *stat4 { - currentTime := time.Now() - dbg.ReadMemStats(&s.mem) - - interval := currentTime.Sub(s.prevTime).Seconds() - s.blockNum = blockNum - s.blockSpeed = float64(s.blockNum-s.prevBlock) / interval - s.txNum = txNum - s.txSpeed = float64(s.txNum-s.prevTxNum) / interval - s.prevBlock = blockNum - s.prevTxNum = txNum - s.prevTime = currentTime - if s.startedAt.IsZero() { - s.startedAt = currentTime - } - - total := s.hits + s.misses - if total > 0 { - s.hitMissRatio = float64(s.hits) / float64(total) - } - return s -} diff --git a/cmd/integration/commands/state_stages.go b/cmd/integration/commands/state_stages.go index ab9955dfca2..5e342009b0b 100644 --- a/cmd/integration/commands/state_stages.go +++ b/cmd/integration/commands/state_stages.go @@ -65,7 +65,7 @@ Examples: erigoncli.ApplyFlagsForEthConfigCobra(cmd.Flags(), ethConfig) miningConfig := params.MiningConfig{} utils.SetupMinerCobra(cmd, &miningConfig) - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -95,7 +95,7 @@ var loopIhCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") ctx, _ := common2.RootContext() - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -119,7 +119,7 @@ var loopExecCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { logger := debug.SetupCobra(cmd, "integration") ctx, _ := common2.RootContext() - db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, snapshotVersion, logger) + db, err := openDB(dbCfg(kv.ChainDB, chaindata), true, logger) if err != nil { logger.Error("Opening DB", "error", err) return @@ -149,7 +149,6 @@ func init() { withChain(stateStages) withHeimdall(stateStages) withWorkers(stateStages) - withSnapshotVersion(stateStages) rootCmd.AddCommand(stateStages) withConfig(loopIhCmd) @@ -158,7 +157,6 @@ func init() { withUnwind(loopIhCmd) withChain(loopIhCmd) withHeimdall(loopIhCmd) - withSnapshotVersion(loopIhCmd) rootCmd.AddCommand(loopIhCmd) withConfig(loopExecCmd) @@ -168,7 +166,6 @@ func init() { withChain(loopExecCmd) withHeimdall(loopExecCmd) withWorkers(loopExecCmd) - withSnapshotVersion(loopExecCmd) rootCmd.AddCommand(loopExecCmd) } @@ -178,7 +175,7 @@ func syncBySmallSteps(db kv.RwDB, miningConfig params.MiningConfig, ctx context. return err } - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger1) + sn, borSn, agg := allSnapshots(ctx, db, logger1) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -455,7 +452,7 @@ func checkMinedBlock(b1, b2 *types.Block, chainConfig *chain2.Config) { } func loopIh(db kv.RwDB, ctx context.Context, unwind uint64, logger log.Logger) error { - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() @@ -529,7 +526,7 @@ func loopIh(db kv.RwDB, ctx context.Context, unwind uint64, logger log.Logger) e func loopExec(db kv.RwDB, ctx context.Context, unwind uint64, logger log.Logger) error { chainConfig := fromdb.ChainConfig(db) dirs, pm := datadir.New(datadirCli), fromdb.PruneMode(db) - sn, borSn, agg := allSnapshots(ctx, db, snapshotVersion, logger) + sn, borSn, agg := allSnapshots(ctx, db, logger) defer sn.Close() defer borSn.Close() defer agg.Close() diff --git a/cmd/integration/main.go b/cmd/integration/main.go index e4c0c3e2684..dcc76fa1ddf 100644 --- a/cmd/integration/main.go +++ b/cmd/integration/main.go @@ -4,6 +4,9 @@ import ( "fmt" "os" + _ "github.com/ledgerwatch/erigon/core/snaptype" //hack + _ "github.com/ledgerwatch/erigon/polygon/bor/snaptype" //hack + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/cmd/integration/commands" ) diff --git a/cmd/prometheus/Readme.md b/cmd/prometheus/Readme.md index d6272e4a89d..e9313667a46 100644 --- a/cmd/prometheus/Readme.md +++ b/cmd/prometheus/Readme.md @@ -20,8 +20,8 @@ To add custom Erigon host: copy `./cmd/prometheus/prometheus.yml`, modify, pass #### How to update dashboards 1. Edit dashboard right in Grafana UI as you need. Save. -2. Go to "Dashboard Settings" -> "JSON Model" -> Copy json representation of dashboard. -3. Go to file `./cmd/prometheus/dashboards/erigon.json` and past json there. +2. Go to "Share" -> "Export" -> enable checkbox "Export for sharing externally" -> "View Json" -> Copy json +3. Go to file `./cmd/prometheus/dashboards/erigon.json` and paste json there. 4. Commit and push. Done. #### How to add new metrics diff --git a/cmd/prometheus/dashboards/erigon.json b/cmd/prometheus/dashboards/erigon.json index ac97e232f96..351abf5928b 100644 --- a/cmd/prometheus/dashboards/erigon.json +++ b/cmd/prometheus/dashboards/erigon.json @@ -1,4 +1,41 @@ { + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.4.2" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph (old)", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], "annotations": { "list": [ { @@ -24,14 +61,14 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 2, + "id": null, "links": [], "liveNow": false, "panels": [ { "collapsed": false, "datasource": { - "type": "prometheus" + "datasource": "${DS_PROMETHEUS}" }, "gridPos": { "h": 1, @@ -44,7 +81,7 @@ "targets": [ { "datasource": { - "type": "prometheus" + "datasource": "${DS_PROMETHEUS}" }, "refId": "A" } @@ -54,7 +91,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -62,8 +100,10 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", + "axisGridShow": true, "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -83,7 +123,7 @@ "type": "linear" }, "showPoints": "never", - "spanNulls": true, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -117,7 +157,6 @@ "y": 1 }, "id": 110, - "links": [], "options": { "legend": { "calcs": [ @@ -136,7 +175,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "sync{instance=~\"$instance\",stage=\"headers\"}", @@ -149,7 +189,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "chain_head_block{instance=~\"$instance\"}", "format": "time_series", @@ -164,7 +205,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -172,6 +214,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -227,7 +270,6 @@ "y": 1 }, "id": 116, - "links": [], "options": { "legend": { "calcs": [ @@ -246,7 +288,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "txpool_pending{instance=~\"$instance\"}", @@ -259,7 +302,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "txpool_basefee{instance=~\"$instance\"}", @@ -273,7 +317,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "txpool_queued{instance=~\"$instance\"}", "format": "time_series", @@ -288,7 +333,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -296,6 +342,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -351,7 +398,6 @@ "y": 1 }, "id": 106, - "links": [], "options": { "legend": { "calcs": [ @@ -371,7 +417,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -389,7 +436,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "description": "", "fieldConfig": { @@ -398,6 +446,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -453,7 +502,6 @@ "y": 1 }, "id": 154, - "links": [], "options": { "legend": { "calcs": [ @@ -473,7 +521,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -488,7 +537,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -503,7 +553,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -518,7 +569,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -533,7 +585,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -548,7 +601,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -567,7 +621,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -575,6 +630,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -651,7 +707,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "sync{instance=~\"$instance\"}", @@ -666,7 +723,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -674,6 +732,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -729,7 +788,6 @@ "y": 12 }, "id": 77, - "links": [], "options": { "legend": { "calcs": [ @@ -751,7 +809,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "p2p_peers{instance=~\"$instance\"}", "format": "time_series", @@ -762,7 +821,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "rate(p2p_dials{instance=~\"$instance\"}[1m])", "format": "time_series", @@ -773,7 +833,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "rate(p2p_serves{instance=~\"$instance\"}[1m])", "format": "time_series", @@ -788,7 +849,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -796,6 +858,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -851,7 +914,6 @@ "y": 12 }, "id": 96, - "links": [], "options": { "legend": { "calcs": [ @@ -871,7 +933,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(p2p_ingress{instance=~\"$instance\"}[$rate_interval])", @@ -883,7 +946,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(p2p_egress{instance=~\"$instance\"}[$rate_interval])", @@ -900,7 +964,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -908,6 +973,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -932,7 +998,7 @@ "spanNulls": false, "stacking": { "group": "A", - "mode": "normal" + "mode": "none" }, "thresholdsStyle": { "mode": "off" @@ -943,8 +1009,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -952,7 +1017,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -963,7 +1029,6 @@ "y": 23 }, "id": 85, - "links": [], "options": { "legend": { "calcs": [ @@ -983,7 +1048,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(process_io_storage_read_bytes_total{instance=~\"$instance\"}[$rate_interval])", @@ -995,7 +1061,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(process_io_storage_written_bytes_total{instance=~\"$instance\"}[$rate_interval])", @@ -1011,7 +1078,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1019,6 +1087,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1054,8 +1123,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1063,7 +1131,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -1092,7 +1161,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_size{instance=~\"$instance\"}", "interval": "", @@ -1101,7 +1171,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "db_mi_last_pgno{instance=~\"$instance\"}", @@ -1117,9 +1188,7 @@ }, { "collapsed": false, - "datasource": { - "type": "prometheus" - }, + "datasource": "${DS_PROMETHEUS}", "gridPos": { "h": 1, "w": 24, @@ -1130,9 +1199,7 @@ "panels": [], "targets": [ { - "datasource": { - "type": "prometheus" - }, + "datasource": "${DS_PROMETHEUS}", "refId": "A" } ], @@ -1141,7 +1208,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1149,6 +1217,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1162,6 +1231,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1191,7 +1261,8 @@ } ] }, - "unit": "reqps" + "unit": "reqps", + "unitScale": true }, "overrides": [] }, @@ -1220,7 +1291,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(rpc_duration_seconds_count{instance=~\"$instance\",success=\"success\"}[1m])", @@ -1230,7 +1302,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(rpc_duration_seconds_count{instance=~\"$instance\",success=\"failure\"}[1m])", @@ -1241,12 +1314,12 @@ } ], "title": "RPS", - "transformations": [], "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1254,6 +1327,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1267,6 +1341,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1296,7 +1371,8 @@ } ] }, - "unit": "s" + "unit": "s", + "unitScale": true }, "overrides": [] }, @@ -1325,7 +1401,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rpc_duration_seconds{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -1335,12 +1412,12 @@ } ], "title": "Timings", - "transformations": [], "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1348,6 +1425,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1361,6 +1439,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1390,7 +1469,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -1419,7 +1499,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_keys_total{name=\"rpc\",instance=~\"$instance\"}", @@ -1430,7 +1511,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_list_total{name=\"rpc\",instance=~\"$instance\"}", @@ -1441,7 +1523,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_code_keys_total{name=\"rpc\",instance=~\"$instance\"}", @@ -1452,7 +1535,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_code_list_total{name=\"rpc\",instance=~\"$instance\"}", @@ -1467,7 +1551,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1475,6 +1560,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1488,6 +1574,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1516,7 +1603,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -1545,7 +1633,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1558,7 +1647,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "sum(delta(cache_code_total{result=\"hit\",name=\"rpc\",instance=~\"$instance\"}[1m]))/sum(delta(cache_code_total{name=\"rpc\",instance=~\"$instance\"}[1m])) ", @@ -1573,9 +1663,7 @@ }, { "collapsed": true, - "datasource": { - "type": "prometheus" - }, + "datasource": "${DS_PROMETHEUS}", "gridPos": { "h": 1, "w": 24, @@ -1590,7 +1678,8 @@ "dashLength": 10, "dashes": false, "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fill": 1, "fillGradient": 0, @@ -1629,7 +1718,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "sum by (grpc_service, grpc_method, instance) (rate(grpc_server_started_total{instance=~\"$instance\"}[1m]))", "interval": "", @@ -1638,7 +1728,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "sum by (grpc_service, grpc_method, instance) (rate(grpc_server_handled_total{instance=~\"$instance\",grpc_code!=\"OK\"}[1m])) ", "interval": "", @@ -1679,9 +1770,7 @@ ], "targets": [ { - "datasource": { - "type": "prometheus" - }, + "datasource": "${DS_PROMETHEUS}", "refId": "A" } ], @@ -1691,8 +1780,7 @@ ], "refresh": "30s", "revision": 1, - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [], "templating": { "list": [ @@ -1749,17 +1837,10 @@ "type": "custom" }, { - "current": { - "selected": true, - "text": [ - "mumbai3-2:6061" - ], - "value": [ - "mumbai3-2:6061" - ] - }, + "current": {}, "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "definition": "go_goroutines", "hide": 0, @@ -1855,6 +1936,25 @@ "refresh": 2, "skipUrlSync": false, "type": "interval" + }, + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "PBFA97CFB590B2093" + }, + "hide": 2, + "includeAll": false, + "label": "prometheus", + "multi": false, + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" } ] }, @@ -1889,6 +1989,6 @@ "timezone": "", "title": "Erigon", "uid": "FPpjH6Hik", - "version": 7, + "version": 16, "weekStart": "" } \ No newline at end of file diff --git a/cmd/prometheus/dashboards/erigon_internals.json b/cmd/prometheus/dashboards/erigon_internals.json index e2a279cec43..93a9c7e5c7e 100644 --- a/cmd/prometheus/dashboards/erigon_internals.json +++ b/cmd/prometheus/dashboards/erigon_internals.json @@ -1,4 +1,47 @@ { + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "panel", + "id": "bargauge", + "name": "Bar gauge", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.4.2" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], "annotations": { "list": [ { @@ -24,11 +67,12 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 1, + "id": null, "links": [], "liveNow": false, "panels": [ { + "collapsed": false, "datasource": { "type": "prometheus" }, @@ -39,6 +83,7 @@ "y": 0 }, "id": 171, + "panels": [], "targets": [ { "datasource": { @@ -52,7 +97,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -60,6 +106,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -93,7 +140,7 @@ "mode": "off" } }, - "decimals": 1, + "decimals": 2, "mappings": [], "thresholds": { "mode": "absolute", @@ -113,7 +160,7 @@ "overrides": [] }, "gridPos": { - "h": 10, + "h": 6, "w": 8, "x": 0, "y": 1 @@ -136,10 +183,11 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sync{instance=~\"$instance\"}", + "expr": "sync{instance=~\"$instance\",stage=\"execution\"}", "instant": false, "legendFormat": "{{ stage }}: {{instance}}", "range": true, @@ -151,7 +199,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -159,6 +208,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -213,8 +263,7 @@ "x": 8, "y": 1 }, - "id": 158, - "links": [], + "id": 195, "options": { "legend": { "calcs": [ @@ -233,25 +282,207 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, - "expr": "rate(sync{instance=~\"$instance\"}[$rate_interval])", + "expr": "rate(exec_txs_done{instance=~\"$instance\"}[$rate_interval])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "{{ stage }}: {{instance}}", + "legendFormat": "txs apply: {{instance}}", "range": true, "refId": "A" } ], - "title": "Sync Stages progress rate", + "title": "Exec v3: txs/s ", "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 4, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 60 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 8, + "x": 16, + "y": 1 + }, + "id": 200, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.3.4", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "prune_seconds{quantile=\"$quantile\",instance=~\"$instance\"}", + "instant": false, + "legendFormat": "{{instance}} {{type}} ", + "range": true, + "refId": "A" + } + ], + "title": "Prune, seconds", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 2 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 5 + }, + "id": 202, + "options": { + "displayMode": "lcd", + "maxVizHeight": 300, + "minVizHeight": 16, + "minVizWidth": 8, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "valueMode": "color" + }, + "pluginVersion": "10.4.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "domain_prunable{instance=~\"$instance\",type=\"domain\"}", + "hide": false, + "legendFormat": "{{instance}}-{{type}}-{{table}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "domain_prunable{instance=~\"$instance\",type=\"history\",table!=\"commitment\"}/1562500", + "hide": false, + "legendFormat": "{{instance}}-{{type}}-{{table}}", + "range": true, + "refId": "C" + } + ], + "title": "pruning availability, steps", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -259,6 +490,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -310,11 +542,10 @@ "gridPos": { "h": 5, "w": 8, - "x": 16, - "y": 1 + "x": 8, + "y": 6 }, - "id": 195, - "links": [], + "id": 158, "options": { "legend": { "calcs": [ @@ -333,25 +564,27 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, - "expr": "rate(exec_txs_done{instance=~\"$instance\"}[$rate_interval])", + "expr": "rate(sync{instance=~\"$instance\",stage=\"execution\"}[$rate_interval])", "format": "time_series", "interval": "", "intervalFactor": 1, - "legendFormat": "txs apply: {{instance}}", + "legendFormat": "{{ stage }}: {{instance}}", "range": true, "refId": "A" } ], - "title": "Exec v3: txs/s ", + "title": "Sync Stages progress rate", "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -359,14 +592,14 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisGridShow": true, "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", - "fillOpacity": 0, + "fillOpacity": 5, "gradientMode": "none", "hideFrom": { "legend": false, @@ -375,12 +608,15 @@ }, "insertNulls": false, "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, "lineWidth": 1, - "pointSize": 5, + "pointSize": 4, "scaleDistribution": { "type": "linear" }, - "showPoints": "never", + "showPoints": "auto", "spanNulls": true, "stacking": { "group": "A", @@ -404,23 +640,20 @@ } ] }, - "unit": "s" + "unit": "ops" }, "overrides": [] }, "gridPos": { - "h": 5, + "h": 8, "w": 8, - "x": 8, - "y": 6 + "x": 0, + "y": 7 }, - "id": 112, - "links": [], + "id": 197, "options": { "legend": { - "calcs": [ - "mean" - ], + "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -434,69 +667,84 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "idelta(domain_collate_took_sum{instance=~\"$instance\"}[$rate_interval])", - "format": "time_series", - "instant": false, - "legendFormat": "collation took: {{instance}}", + "expr": "irate(domain_collation_size{instance=~\"$instance\"}[$rate_interval])", + "hide": false, + "legendFormat": "collated [domain]: {{instance}}", "range": true, - "refId": "A" + "refId": "D" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "idelta(domain_step_took_sum{instance=~\"$instance\"}[$rate_interval])", + "expr": "irate(domain_collation_hist_size{instance=~\"$instance\"}[$rate_interval])", "hide": false, - "legendFormat": "step took: {{instance}}", + "legendFormat": "collated [history]: {{instance}}", "range": true, - "refId": "C" + "refId": "E" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "idelta(domain_prune_took_sum{instance=~\"$instance\"}[$rate_interval])", + "expr": "sum(rate(domain_commitment_keys[$rate_interval])) by (instance)", "hide": false, - "legendFormat": "prune took [{{type}}]: {{instance}}", + "legendFormat": "keys committed: {{instance}}", "range": true, - "refId": "B" + "refId": "A" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "idelta(domain_commitment_took_sum{instance=~\"$instance\"}[$rate_interval])", + "expr": "irate(domain_commitment_updates{instance=~\"$instance\"}[$rate_interval])", "hide": false, - "legendFormat": "commitment took: {{instance}}", + "legendFormat": "commitment node updates: {{instance}}", "range": true, - "refId": "D" + "refId": "C" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "exemplar": false, - "expr": "idelta(domain_commitment_write_took_sum{instance=~\"$instance\"}[$rate_interval])", + "expr": "irate(domain_commitment_updates_applied{instance=~\"$instance\"}[$rate_interval])", "hide": false, - "instant": false, - "legendFormat": "commitment update write took: {{instance}}", + "legendFormat": "commitment trie node updates: {{instance}}", "range": true, "refId": "F" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "irate(domain_prune_size{instance=~\"$instance\"}[$rate_interval])", + "hide": false, + "legendFormat": "pruned keys [{{type}}]: {{instance}}", + "range": true, + "refId": "G" } ], - "title": "Time took", + "title": "State: Collate/Prune/Merge/Commitment", "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -504,6 +752,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -518,14 +767,14 @@ "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", + "lineInterpolation": "smooth", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, - "showPoints": "never", - "spanNulls": true, + "showPoints": "auto", + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -534,7 +783,6 @@ "mode": "off" } }, - "decimals": 2, "mappings": [], "thresholds": { "mode": "absolute", @@ -548,71 +796,112 @@ "value": 80 } ] - }, - "unit": "percentunit" + } }, "overrides": [] }, "gridPos": { "h": 5, "w": 8, - "x": 16, - "y": 6 + "x": 8, + "y": 11 }, - "id": 194, - "links": [], + "id": 198, "options": { "legend": { - "calcs": [ - "mean" - ], + "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "multi", - "sort": "none" + "sort": "desc" } }, - "pluginVersion": "8.0.6", + "pluginVersion": "10.3.4", "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "exemplar": true, - "expr": "rate(exec_repeats{instance=~\"$instance\"}[$rate_interval])/rate(exec_txs_done{instance=~\"$instance\"}[$rate_interval])", - "format": "time_series", - "interval": "", - "intervalFactor": 1, - "legendFormat": "repeats: {{instance}}", + "expr": "domain_running_merges{instance=~\"$instance\"}", + "legendFormat": "running merges: {{instance}}", "range": true, "refId": "A" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "exemplar": true, - "expr": "rate(exec_triggers{instance=~\"$instance\"}[$rate_interval])/rate(exec_txs_done{instance=~\"$instance\"}[$rate_interval])", - "format": "time_series", + "expr": "domain_running_collations{instance=~\"$instance\"}", "hide": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "triggers: {{instance}}", + "legendFormat": "running collations: {{instance}}", "range": true, "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "domain_pruning_progress{instance=~\"$instance\"}", + "hide": false, + "legendFormat": "running prunes: {{instance}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "domain_running_commitment{instance=~\"$instance\"}", + "hide": false, + "legendFormat": "running commitment: {{instance}}", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "domain_running_files_building{instance=~\"$instance\"}", + "hide": false, + "instant": false, + "legendFormat": "running files building: {{instance}}", + "range": true, + "refId": "E" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "domain_wal_flushes{instance=~\"$instance\"}", + "hide": false, + "instant": false, + "legendFormat": "WAL flushes {{instance}}", + "range": true, + "refId": "F" } ], - "title": "Exec v3", + "title": "State: running collate/merge/prune", "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -620,6 +909,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -671,11 +961,10 @@ "gridPos": { "h": 5, "w": 8, - "x": 0, + "x": 16, "y": 11 }, "id": 199, - "links": [], "options": { "legend": { "calcs": [ @@ -695,7 +984,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "chain_execution_seconds{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -711,7 +1001,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -719,13 +1010,15 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", + "axisGridShow": true, "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", - "fillOpacity": 5, + "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, @@ -734,15 +1027,12 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, "lineWidth": 1, - "pointSize": 4, + "pointSize": 5, "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", + "showPoints": "never", "spanNulls": true, "stacking": { "group": "A", @@ -766,7 +1056,7 @@ } ] }, - "unit": "ops" + "unit": "s" }, "overrides": [ { @@ -776,7 +1066,8 @@ "options": { "mode": "exclude", "names": [ - "keys committed: mainnet-dev-awskii:6061" + "prune took [index]: mainnet3-1:6061", + "prune took [index]: mainnet3-3:6061" ], "prefix": "All except:", "readOnly": true @@ -784,27 +1075,180 @@ }, "properties": [ { - "id": "custom.hideFrom", - "value": { - "legend": false, - "tooltip": false, - "viz": true - } + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 15 + }, + "id": 112, + "options": { + "legend": { + "calcs": [ + "mean" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "9.3.6", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(domain_collate_took_sum{instance=~\"$instance\"}[$rate_interval])", + "format": "time_series", + "instant": false, + "legendFormat": "collation took: {{instance}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(domain_step_took_sum{instance=~\"$instance\"}[$rate_interval])", + "hide": false, + "legendFormat": "step took: {{instance}}", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(domain_prune_took_sum{instance=~\"$instance\"}[$rate_interval])", + "hide": false, + "legendFormat": "prune took [{{type}}]: {{instance}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "rate(domain_commitment_took_sum{instance=~\"$instance\"}[$rate_interval])", + "hide": false, + "legendFormat": "commitment took: {{instance}}", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "rate(domain_commitment_write_took_sum{instance=~\"$instance\"}[$rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "commitment update write took: {{instance}}", + "range": true, + "refId": "F" + } + ], + "title": "State: timins", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 } ] - } - ] + }, + "unit": "percentunit" + }, + "overrides": [] }, "gridPos": { "h": 5, "w": 8, "x": 8, - "y": 11 + "y": 16 }, - "id": 197, + "id": 194, "options": { "legend": { - "calcs": [], + "calcs": [ + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -814,81 +1258,47 @@ "sort": "none" } }, - "pluginVersion": "9.3.6", + "pluginVersion": "8.0.6", "targets": [ { "datasource": { - "type": "prometheus" - }, - "editorMode": "code", - "expr": "irate(domain_collation_size{instance=~\"$instance\"}[$rate_interval])", - "hide": false, - "legendFormat": "collated [domain]: {{instance}}", - "range": true, - "refId": "D" - }, - { - "datasource": { - "type": "prometheus" - }, - "editorMode": "code", - "expr": "irate(domain_collation_hist_size{instance=~\"$instance\"}[$rate_interval])", - "hide": false, - "legendFormat": "collated [history]: {{instance}}", - "range": true, - "refId": "E" - }, - { - "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "sum(rate(domain_commitment_keys[$rate_interval])) by (instance)", - "hide": false, - "legendFormat": "keys committed: {{instance}}", + "exemplar": true, + "expr": "rate(exec_repeats{instance=~\"$instance\"}[$rate_interval])/rate(exec_txs_done{instance=~\"$instance\"}[$rate_interval])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "repeats: {{instance}}", "range": true, "refId": "A" }, { "datasource": { - "type": "prometheus" - }, - "editorMode": "code", - "expr": "irate(domain_commitment_updates{instance=~\"$instance\"}[$rate_interval])", - "hide": false, - "legendFormat": "commitment node updates: {{instance}}", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus" - }, - "editorMode": "code", - "expr": "irate(domain_commitment_updates_applied{instance=~\"$instance\"}[$rate_interval])", - "hide": false, - "legendFormat": "commitment trie node updates: {{instance}}", - "range": true, - "refId": "F" - }, - { - "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "irate(domain_prune_size{instance=~\"$instance\"}[$rate_interval])", + "exemplar": true, + "expr": "rate(exec_triggers{instance=~\"$instance\"}[$rate_interval])/rate(exec_txs_done{instance=~\"$instance\"}[$rate_interval])", + "format": "time_series", "hide": false, - "legendFormat": "pruned keys [{{type}}]: {{instance}}", + "interval": "", + "intervalFactor": 1, + "legendFormat": "triggers: {{instance}}", "range": true, - "refId": "G" + "refId": "B" } ], - "title": "Collate/Prune/Merge/Commitment", + "title": "Exec v3", "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -896,6 +1306,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -947,9 +1358,9 @@ "h": 5, "w": 8, "x": 16, - "y": 11 + "y": 16 }, - "id": 198, + "id": 201, "options": { "legend": { "calcs": [], @@ -965,73 +1376,54 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "domain_running_merges{instance=~\"$instance\"}", - "legendFormat": "running merges: {{instance}}", + "expr": "block_consumer_delay{type=\"header_download\",instance=~\"$instance\",quantile=\"$quantile\"}", + "hide": false, + "legendFormat": "header: {{instance}}", "range": true, "refId": "A" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "domain_running_collations{instance=~\"$instance\"}", + "expr": "block_consumer_delay{type=\"body_download\",instance=~\"$instance\",quantile=\"$quantile\"}", "hide": false, - "legendFormat": "running collations: {{instance}}", + "legendFormat": "body: {{instance}}", "range": true, "refId": "B" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "domain_pruning_progress{instance=~\"$instance\"}", + "expr": "block_consumer_delay{type=\"pre_execution\",instance=~\"$instance\",quantile=\"$quantile\"}", "hide": false, - "legendFormat": "running prunes: {{instance}}", + "legendFormat": "execution_start: {{instance}}", "range": true, "refId": "C" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", - "expr": "domain_running_commitment{instance=~\"$instance\"}", + "expr": "block_consumer_delay{type=\"post_execution\",instance=~\"$instance\",quantile=\"$quantile\"}", "hide": false, - "legendFormat": "running commitment: {{instance}}", + "legendFormat": "execution_end: {{instance}}", "range": true, "refId": "D" - }, - { - "datasource": { - "type": "prometheus" - }, - "editorMode": "code", - "expr": "domain_running_files_building{instance=~\"$instance\"}", - "hide": false, - "instant": false, - "legendFormat": "running files building: {{instance}}", - "range": true, - "refId": "E" - }, - { - "datasource": { - "type": "prometheus" - }, - "editorMode": "code", - "expr": "domain_wal_flushes{instance=~\"$instance\"}", - "hide": false, - "instant": false, - "legendFormat": "WAL flushes {{instance}}", - "range": true, - "refId": "F" } ], - "title": "Running Collations / Merges / Prunes", + "title": "Block execution delays", "type": "timeseries" }, { @@ -1043,7 +1435,7 @@ "h": 1, "w": 24, "x": 0, - "y": 16 + "y": 21 }, "id": 17, "panels": [], @@ -1060,7 +1452,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1068,6 +1461,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1104,8 +1498,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1113,7 +1506,8 @@ } ] }, - "unit": "ops" + "unit": "ops", + "unitScale": true }, "overrides": [] }, @@ -1121,7 +1515,7 @@ "h": 5, "w": 8, "x": 0, - "y": 17 + "y": 22 }, "id": 141, "options": { @@ -1140,7 +1534,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1156,7 +1551,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "description": "", "fieldConfig": { @@ -1165,6 +1561,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1200,8 +1597,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1209,15 +1605,41 @@ } ] }, - "unit": "s" + "unit": "s", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "sync: mainnet3-1:6061" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] }, "gridPos": { "h": 9, "w": 16, "x": 8, - "y": 17 + "y": 22 }, "id": 166, "options": { @@ -1238,7 +1660,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1250,7 +1673,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1263,7 +1687,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1276,7 +1701,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1289,7 +1715,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1302,7 +1729,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1315,7 +1743,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1328,7 +1757,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1341,7 +1771,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1354,7 +1785,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1367,7 +1799,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1380,7 +1813,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1393,7 +1827,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1410,7 +1845,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1418,6 +1854,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1453,8 +1890,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1462,7 +1898,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -1470,7 +1907,7 @@ "h": 5, "w": 8, "x": 0, - "y": 22 + "y": 27 }, "id": 159, "options": { @@ -1489,7 +1926,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_size{instance=~\"$instance\"}", "interval": "", @@ -1498,7 +1936,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "db_mi_last_pgno{instance=~\"$instance\"}", @@ -1514,7 +1953,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1522,6 +1962,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1546,7 +1987,7 @@ "spanNulls": false, "stacking": { "group": "A", - "mode": "normal" + "mode": "none" }, "thresholdsStyle": { "mode": "off" @@ -1557,8 +1998,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1566,15 +2006,42 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "cow: mainnet3-1:6061", + "cow: mainnet3-3:6061" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] }, "gridPos": { "h": 7, "w": 16, "x": 8, - "y": 26 + "y": 31 }, "id": 168, "options": { @@ -1595,7 +2062,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1608,7 +2076,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(db_pgops{phase=\"cow\", instance=~\"$instance\"}[$rate_interval])", @@ -1619,7 +2088,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(db_pgops{phase=\"clone\", instance=~\"$instance\"}[$rate_interval])", @@ -1630,7 +2100,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(db_pgops{phase=\"split\", instance=~\"$instance\"}[$rate_interval])", @@ -1641,7 +2112,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1654,7 +2126,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(db_pgops{phase=\"spill\", instance=~\"$instance\"}[$rate_interval])", @@ -1665,7 +2138,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(db_pgops{phase=\"wops\", instance=~\"$instance\"}[$rate_interval])", @@ -1676,7 +2150,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(db_pgops{phase=\"unspill\", instance=~\"$instance\"}[$rate_interval])", @@ -1687,7 +2162,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1700,7 +2176,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1713,7 +2190,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1726,7 +2204,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1739,7 +2218,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -1752,7 +2232,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(db_pgops{phase=\"minicore\", instance=~\"$instance\"}[$rate_interval])", @@ -1763,7 +2244,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(db_pgops{phase=\"prefault\", instance=~\"$instance\"}[$rate_interval])", @@ -1778,7 +2260,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1786,6 +2269,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1821,8 +2305,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -1830,7 +2313,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -1838,7 +2322,7 @@ "h": 6, "w": 8, "x": 0, - "y": 27 + "y": 32 }, "id": 167, "options": { @@ -1859,7 +2343,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "tx_limit{instance=~\"$instance\"}", @@ -1870,7 +2355,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "tx_dirty{instance=~\"$instance\"}", @@ -1886,7 +2372,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -1894,6 +2381,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -1918,7 +2406,7 @@ "spanNulls": false, "stacking": { "group": "A", - "mode": "normal" + "mode": "none" }, "thresholdsStyle": { "mode": "off" @@ -1937,7 +2425,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [ { @@ -1947,7 +2436,8 @@ "options": { "mode": "exclude", "names": [ - "gc_overflow: mainnet2-1:6061" + "gc_leaf: mainnet3-3:6061", + "gc_leaf: mainnet3-1:6061" ], "prefix": "All except:", "readOnly": true @@ -1970,12 +2460,14 @@ "h": 6, "w": 8, "x": 0, - "y": 33 + "y": 38 }, "id": 169, "options": { "legend": { - "calcs": [], + "calcs": [ + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -1989,7 +2481,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "db_gc_leaf{instance=~\"$instance\"}", @@ -1999,7 +2492,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "db_gc_overflow{instance=~\"$instance\"}", @@ -2010,7 +2504,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2027,7 +2522,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "description": "", "fieldConfig": { @@ -2036,6 +2532,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2060,7 +2557,7 @@ "spanNulls": false, "stacking": { "group": "A", - "mode": "normal" + "mode": "none" }, "thresholdsStyle": { "mode": "off" @@ -2079,20 +2576,49 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "hard: mainnet3-1:6061", + "hard: mainnet3-3:6061" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] }, "gridPos": { "h": 6, "w": 16, "x": 8, - "y": 33 + "y": 38 }, "id": 150, "options": { "legend": { - "calcs": [], + "calcs": [ + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -2106,7 +2632,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(process_minor_pagefaults_total{instance=~\"$instance\"}[$rate_interval])", @@ -2116,7 +2643,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(process_major_pagefaults_total{instance=~\"$instance\"}[$rate_interval])", @@ -2131,7 +2659,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -2139,6 +2668,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2181,7 +2711,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -2189,7 +2720,7 @@ "h": 8, "w": 16, "x": 8, - "y": 39 + "y": 44 }, "id": 191, "options": { @@ -2208,7 +2739,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2221,7 +2753,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2234,7 +2767,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2247,7 +2781,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2260,7 +2795,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2273,7 +2809,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2286,7 +2823,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2299,7 +2837,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2312,7 +2851,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2325,7 +2865,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2338,7 +2879,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2351,7 +2893,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2364,7 +2907,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2388,7 +2932,7 @@ "h": 1, "w": 24, "x": 0, - "y": 47 + "y": 52 }, "id": 134, "panels": [], @@ -2405,7 +2949,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -2417,7 +2962,8 @@ "mode": "absolute", "steps": [] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -2425,7 +2971,7 @@ "h": 18, "w": 8, "x": 0, - "y": 48 + "y": 53 }, "id": 165, "options": { @@ -2440,76 +2986,85 @@ "fields": "", "values": false }, + "showPercentChange": false, "text": { "titleSize": 14, "valueSize": 14 }, - "textMode": "auto" + "textMode": "auto", + "wideLayout": true }, - "pluginVersion": "10.1.4", + "pluginVersion": "10.3.5", "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "expr": "ru_inblock{instance=~\"$instance\"}", + "expr": "process_io_read_syscalls_total{instance=~\"$instance\"}", "interval": "", - "legendFormat": "inblock: {{instance}}", + "legendFormat": "process_io_read_syscalls_total: {{instance}}", "refId": "A" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "expr": "ru_outblock{instance=~\"$instance\"}", + "expr": "process_io_write_syscalls_total{instance=~\"$instance\"}", "hide": false, "interval": "", - "legendFormat": "outblock: {{instance}}", + "legendFormat": "process_io_write_syscalls_total: {{instance}}", "refId": "B" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "expr": "ru_minflt{instance=~\"$instance\"}", + "expr": "process_minor_pagefaults_total{instance=~\"$instance\"}", "hide": false, "interval": "", - "legendFormat": "minflt: {{instance}}", + "legendFormat": "process_minor_pagefaults_total: {{instance}}", "refId": "C" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "expr": "ru_majflt{instance=~\"$instance\"}", + "expr": "process_major_pagefaults_total{instance=~\"$instance\"}", "hide": false, "interval": "", - "legendFormat": "majflt: {{instance}}", + "legendFormat": "process_major_pagefaults_total: {{instance}}", "refId": "D" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "expr": "system_disk_readbytes{instance=~\"$instance\"}", + "expr": "process_io_storage_read_bytes_total{instance=~\"$instance\"}", "hide": false, "interval": "", - "legendFormat": "system_disk_readbytes: {{instance}}", + "legendFormat": "process_io_storage_read_bytes_total: {{instance}}", "refId": "E" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "expr": "system_disk_writebytes{instance=~\"$instance\"}", + "expr": "process_io_storage_written_bytes_total{instance=~\"$instance\"}", "hide": false, "interval": "", - "legendFormat": "system_disk_writebytes: {{instance}}", + "legendFormat": "process_io_storage_written_bytes_total: {{instance}}", "refId": "F" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_pgops_newly{instance=~\"$instance\"}", "hide": false, @@ -2519,7 +3074,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_pgops_cow{instance=~\"$instance\"}", "hide": false, @@ -2529,7 +3085,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_pgops_clone{instance=~\"$instance\"}", "hide": false, @@ -2539,7 +3096,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_pgops_split{instance=~\"$instance\"}", "hide": false, @@ -2549,7 +3107,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_pgops_merge{instance=~\"$instance\"}", "hide": false, @@ -2559,7 +3118,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_pgops_spill{instance=~\"$instance\"}", "hide": false, @@ -2569,7 +3129,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_pgops_unspill{instance=~\"$instance\"}", "hide": false, @@ -2579,7 +3140,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "db_pgops_wops{instance=~\"$instance\"}", "hide": false, @@ -2593,7 +3155,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "description": "", "fieldConfig": { @@ -2602,6 +3165,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2645,18 +3209,44 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "out: mainnet3-1:6061", + "out: mainnet3-3:6061" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] }, "gridPos": { "h": 6, "w": 8, "x": 8, - "y": 48 + "y": 53 }, "id": 155, - "links": [], "options": { "legend": { "calcs": [ @@ -2675,7 +3265,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(process_io_write_syscalls_total{instance=~\"$instance\"}[$rate_interval])", @@ -2688,7 +3279,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(process_io_read_syscalls_total{instance=~\"$instance\"}[$rate_interval])", @@ -2705,7 +3297,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "description": "", "fieldConfig": { @@ -2714,6 +3307,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2757,7 +3351,8 @@ } ] }, - "unit": "cps" + "unit": "cps", + "unitScale": true }, "overrides": [] }, @@ -2765,7 +3360,7 @@ "h": 6, "w": 8, "x": 16, - "y": 48 + "y": 53 }, "id": 153, "options": { @@ -2786,7 +3381,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -2802,7 +3398,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -2810,6 +3407,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2834,7 +3432,7 @@ "spanNulls": false, "stacking": { "group": "A", - "mode": "normal" + "mode": "none" }, "thresholdsStyle": { "mode": "off" @@ -2853,21 +3451,49 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, - "overrides": [] + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "read: mainnet3-3:6061", + "read: mainnet3-1:6061" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] }, "gridPos": { "h": 6, "w": 8, "x": 8, - "y": 54 + "y": 59 }, "id": 85, - "links": [], "options": { "legend": { - "calcs": [], + "calcs": [ + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -2881,7 +3507,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(process_io_storage_read_bytes_total{instance=~\"$instance\"}[$rate_interval])", @@ -2893,7 +3520,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(process_io_storage_written_bytes_total{instance=~\"$instance\"}[$rate_interval])", @@ -2909,7 +3537,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -2917,6 +3546,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -2960,7 +3590,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -2968,7 +3599,7 @@ "h": 6, "w": 8, "x": 16, - "y": 54 + "y": 59 }, "id": 128, "options": { @@ -2987,7 +3618,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "go_goroutines{instance=~\"$instance\"}", @@ -2998,7 +3630,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "expr": "go_threads{instance=~\"$instance\"}", @@ -3013,7 +3646,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "description": "", "fieldConfig": { @@ -3022,6 +3656,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3065,7 +3700,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -3073,13 +3709,14 @@ "h": 6, "w": 8, "x": 8, - "y": 60 + "y": 65 }, "id": 154, - "links": [], "options": { "legend": { - "calcs": [], + "calcs": [ + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -3093,7 +3730,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3107,7 +3745,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3122,7 +3761,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3137,7 +3777,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3152,7 +3793,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3167,7 +3809,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3186,7 +3829,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -3194,6 +3838,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3237,7 +3882,8 @@ } ] }, - "unit": "s" + "unit": "s", + "unitScale": true }, "overrides": [] }, @@ -3245,7 +3891,7 @@ "h": 5, "w": 8, "x": 16, - "y": 60 + "y": 65 }, "id": 124, "options": { @@ -3264,7 +3910,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3280,7 +3927,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "description": "", "fieldConfig": { @@ -3289,6 +3937,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3332,7 +3981,8 @@ } ] }, - "unit": "decbytes" + "unit": "decbytes", + "unitScale": true }, "overrides": [] }, @@ -3340,7 +3990,7 @@ "h": 5, "w": 8, "x": 0, - "y": 66 + "y": 71 }, "id": 148, "options": { @@ -3361,7 +4011,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "process_virtual_memory_bytes{instance=~\"$instance\"}", @@ -3372,7 +4023,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "process_resident_memory_anon_bytes{instance=~\"$instance\"}", @@ -3383,7 +4035,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "process_resident_memory_bytes{instance=~\"$instance\"}", @@ -3394,7 +4047,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "mem_data{instance=~\"$instance\"}", "hide": false, @@ -3404,7 +4058,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "mem_stack{instance=~\"$instance\"}", "hide": false, @@ -3414,7 +4069,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "mem_locked{instance=~\"$instance\"}", "hide": false, @@ -3424,7 +4080,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "mem_swap{instance=~\"$instance\"}", "hide": false, @@ -3438,7 +4095,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "description": "", "fieldConfig": { @@ -3447,6 +4105,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3490,7 +4149,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -3498,13 +4158,14 @@ "h": 5, "w": 8, "x": 0, - "y": 71 + "y": 76 }, "id": 86, - "links": [], "options": { "legend": { - "calcs": [], + "calcs": [ + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -3518,7 +4179,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3532,7 +4194,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3551,7 +4214,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -3559,8 +4223,10 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", + "axisGridShow": true, "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -3602,7 +4268,8 @@ } ] }, - "unit": "percent" + "unit": "percent", + "unitScale": true }, "overrides": [] }, @@ -3610,13 +4277,14 @@ "h": 5, "w": 8, "x": 0, - "y": 76 + "y": 81 }, "id": 106, - "links": [], "options": { "legend": { - "calcs": [], + "calcs": [ + "mean" + ], "displayMode": "list", "placement": "bottom", "showLegend": true @@ -3630,7 +4298,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3655,7 +4324,7 @@ "h": 1, "w": 24, "x": 0, - "y": 81 + "y": 86 }, "id": 173, "panels": [], @@ -3672,7 +4341,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -3680,6 +4350,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3723,7 +4394,8 @@ } ] }, - "unit": "s" + "unit": "s", + "unitScale": true }, "overrides": [] }, @@ -3731,7 +4403,7 @@ "h": 8, "w": 12, "x": 0, - "y": 82 + "y": 87 }, "id": 175, "options": { @@ -3752,7 +4424,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "pool_process_remote_txs{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -3762,7 +4435,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "pool_add_remote_txs{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -3773,7 +4447,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "pool_new_block{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -3784,7 +4459,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "pool_write_to_db{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -3795,7 +4471,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "pool_propagate_to_new_peer{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -3806,7 +4483,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "pool_propagate_new_txs{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -3817,12 +4495,12 @@ } ], "title": "Timings", - "transformations": [], "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -3830,6 +4508,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -3873,7 +4552,8 @@ } ] }, - "unit": "reqps" + "unit": "reqps", + "unitScale": true }, "overrides": [] }, @@ -3881,7 +4561,7 @@ "h": 8, "w": 12, "x": 12, - "y": 82 + "y": 87 }, "id": 177, "options": { @@ -3902,7 +4582,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(pool_process_remote_txs_count{instance=~\"$instance\"}[$rate_interval])", @@ -3913,7 +4594,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(pool_add_remote_txs_count{instance=~\"$instance\"}[$rate_interval])", @@ -3924,7 +4606,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(pool_new_block_count{instance=~\"$instance\"}[$rate_interval])", @@ -3935,7 +4618,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(pool_write_to_db_count{instance=~\"$instance\"}[$rate_interval])", @@ -3946,7 +4630,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -3959,12 +4644,12 @@ } ], "title": "RPS", - "transformations": [], "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -3972,6 +4657,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4014,7 +4700,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -4022,7 +4709,7 @@ "h": 6, "w": 8, "x": 0, - "y": 90 + "y": 95 }, "id": 176, "options": { @@ -4043,7 +4730,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "sum(delta(cache_total{result=\"hit\",name=\"txpool\",instance=~\"$instance\"}[1m]))/sum(delta(cache_total{name=\"txpool\",instance=~\"$instance\"}[1m])) ", @@ -4058,7 +4746,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4066,6 +4755,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4108,7 +4798,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -4116,7 +4807,7 @@ "h": 6, "w": 8, "x": 8, - "y": 90 + "y": 95 }, "id": 180, "options": { @@ -4137,7 +4828,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(cache_total{name=\"txpool\",instance=~\"$instance\"}[1m])", @@ -4148,7 +4840,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(cache_timeout_total{name=\"txpool\",instance=~\"$instance\"}[1m])", @@ -4163,7 +4856,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4171,6 +4865,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4214,7 +4909,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -4222,7 +4918,7 @@ "h": 6, "w": 8, "x": 16, - "y": 90 + "y": 95 }, "id": 181, "options": { @@ -4243,7 +4939,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_keys_total{name=\"txpool\",instance=~\"$instance\"}", @@ -4254,7 +4951,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_list_total{name=\"txpool\",instance=~\"$instance\"}", @@ -4269,7 +4967,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4277,6 +4976,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4320,7 +5020,8 @@ } ] }, - "unit": "binBps" + "unit": "binBps", + "unitScale": true }, "overrides": [] }, @@ -4328,7 +5029,7 @@ "h": 6, "w": 8, "x": 0, - "y": 96 + "y": 101 }, "id": 178, "options": { @@ -4349,7 +5050,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(pool_write_to_db_bytes{instance=~\"$instance\"}[$rate_interval])", @@ -4371,7 +5073,7 @@ "h": 1, "w": 24, "x": 0, - "y": 102 + "y": 107 }, "id": 183, "panels": [], @@ -4388,7 +5090,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4396,6 +5099,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4439,7 +5143,8 @@ } ] }, - "unit": "reqps" + "unit": "reqps", + "unitScale": true }, "overrides": [] }, @@ -4447,7 +5152,7 @@ "h": 8, "w": 12, "x": 0, - "y": 103 + "y": 108 }, "id": 185, "options": { @@ -4468,7 +5173,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(rpc_duration_seconds_count{instance=~\"$instance\",success=\"success\"}[1m])", @@ -4478,7 +5184,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(rpc_duration_seconds_count{instance=~\"$instance\",success=\"failure\"}[1m])", @@ -4489,12 +5196,12 @@ } ], "title": "RPS", - "transformations": [], "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4502,6 +5209,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4545,7 +5253,8 @@ } ] }, - "unit": "s" + "unit": "s", + "unitScale": true }, "overrides": [] }, @@ -4553,7 +5262,7 @@ "h": 8, "w": 12, "x": 12, - "y": 103 + "y": 108 }, "id": 186, "options": { @@ -4574,7 +5283,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "db_begin_seconds{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -4584,12 +5294,12 @@ } ], "title": "DB begin", - "transformations": [], "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4597,6 +5307,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4640,7 +5351,8 @@ } ] }, - "unit": "s" + "unit": "s", + "unitScale": true }, "overrides": [] }, @@ -4648,7 +5360,7 @@ "h": 8, "w": 12, "x": 0, - "y": 111 + "y": 116 }, "id": 187, "options": { @@ -4669,7 +5381,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rpc_duration_seconds{quantile=\"$quantile\",instance=~\"$instance\"}", @@ -4679,12 +5392,12 @@ } ], "title": "Timings", - "transformations": [], "type": "timeseries" }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4692,6 +5405,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4735,7 +5449,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -4743,7 +5458,7 @@ "h": 8, "w": 12, "x": 12, - "y": 111 + "y": 116 }, "id": 188, "options": { @@ -4762,7 +5477,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "go_goroutines{instance=~\"$instance\"}", "instant": false, @@ -4772,7 +5488,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "go_threads{instance=~\"$instance\"}", "instant": false, @@ -4786,7 +5503,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4794,6 +5512,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4837,7 +5556,8 @@ } ] }, - "unit": "short" + "unit": "short", + "unitScale": true }, "overrides": [] }, @@ -4845,7 +5565,7 @@ "h": 6, "w": 8, "x": 8, - "y": 119 + "y": 124 }, "id": 189, "options": { @@ -4866,7 +5586,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_keys_total{name=\"rpc\",instance=~\"$instance\"}", @@ -4877,7 +5598,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_list_total{name=\"rpc\",instance=~\"$instance\"}", @@ -4888,7 +5610,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_code_keys_total{name=\"rpc\",instance=~\"$instance\"}", @@ -4899,7 +5622,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "cache_code_list_total{name=\"rpc\",instance=~\"$instance\"}", @@ -4914,7 +5638,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -4922,6 +5647,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -4964,7 +5690,8 @@ "value": 80 } ] - } + }, + "unitScale": true }, "overrides": [] }, @@ -4972,7 +5699,7 @@ "h": 6, "w": 8, "x": 16, - "y": 119 + "y": 124 }, "id": 184, "options": { @@ -4993,7 +5720,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -5006,7 +5734,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "sum(delta(cache_code_total{result=\"hit\",name=\"rpc\",instance=~\"$instance\"}[1m]))/sum(delta(cache_code_total{name=\"rpc\",instance=~\"$instance\"}[1m])) ", @@ -5028,7 +5757,7 @@ "h": 1, "w": 24, "x": 0, - "y": 125 + "y": 130 }, "id": 75, "panels": [], @@ -5045,7 +5774,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -5053,6 +5783,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -5096,7 +5827,8 @@ } ] }, - "unit": "Bps" + "unit": "Bps", + "unitScale": true }, "overrides": [ { @@ -5129,10 +5861,9 @@ "h": 9, "w": 12, "x": 0, - "y": 126 + "y": 131 }, "id": 96, - "links": [], "options": { "legend": { "calcs": [ @@ -5154,7 +5885,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -5168,7 +5900,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "editorMode": "code", "exemplar": true, @@ -5187,7 +5920,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "fieldConfig": { "defaults": { @@ -5195,6 +5929,7 @@ "mode": "palette-classic" }, "custom": { + "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", @@ -5238,7 +5973,8 @@ } ] }, - "unit": "none" + "unit": "none", + "unitScale": true }, "overrides": [] }, @@ -5246,10 +5982,9 @@ "h": 9, "w": 12, "x": 12, - "y": 126 + "y": 131 }, "id": 77, - "links": [], "options": { "legend": { "calcs": [ @@ -5271,7 +6006,8 @@ "targets": [ { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "p2p_peers{instance=~\"$instance\"}", "format": "time_series", @@ -5282,7 +6018,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "rate(p2p_dials{instance=~\"$instance\"}[1m])", "format": "time_series", @@ -5293,7 +6030,8 @@ }, { "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "expr": "rate(p2p_serves{instance=~\"$instance\"}[1m])", "format": "time_series", @@ -5307,10 +6045,9 @@ "type": "timeseries" } ], - "refresh": "", + "refresh": "10s", "revision": 1, - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [], "templating": { "list": [ @@ -5367,17 +6104,10 @@ "type": "custom" }, { - "current": { - "selected": true, - "text": [ - "mainnet-dev-awskii:6061" - ], - "value": [ - "mainnet-dev-awskii:6061" - ] - }, + "current": {}, "datasource": { - "type": "prometheus" + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, "definition": "go_goroutines", "hide": 0, @@ -5473,11 +6203,29 @@ "refresh": 2, "skipUrlSync": false, "type": "interval" + }, + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "PBFA97CFB590B2093" + }, + "hide": 2, + "includeAll": false, + "label": "Prometheus", + "multi": false, + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" } ] }, "time": { - "from": "now-1h", + "from": "now-30m", "to": "now" }, "timepicker": { diff --git a/cmd/release/Dockerfile b/cmd/release/Dockerfile index 25dc5cbb98c..bb2f7ae53c7 100644 --- a/cmd/release/Dockerfile +++ b/cmd/release/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/library/golang:1.20-alpine3.17 AS builder +FROM docker.io/library/golang:1.21-alpine3.17 AS builder WORKDIR /app ADD go.mod go.mod diff --git a/cmd/release/main.go b/cmd/release/main.go index 6f129631112..854260728a7 100644 --- a/cmd/release/main.go +++ b/cmd/release/main.go @@ -10,6 +10,8 @@ import ( "sort" "strings" "time" + + "github.com/hashicorp/go-version" ) type Binary struct { diff --git a/cmd/rpcdaemon/README.md b/cmd/rpcdaemon/README.md index 79833756911..4629b79180b 100644 --- a/cmd/rpcdaemon/README.md +++ b/cmd/rpcdaemon/README.md @@ -1,21 +1,21 @@ - [Introduction](#introduction) - [Getting Started](#getting-started) - - [Running locally](#running-locally) - - [Running remotely](#running-remotely) - - [Healthcheck](#healthcheck) - - [Testing](#testing) + - [Running locally](#running-locally) + - [Running remotely](#running-remotely) + - [Healthcheck](#healthcheck) + - [Testing](#testing) - [FAQ](#faq) - - [Relations between prune options and rpc methods](#relations-between-prune-options-and-rpc-method) - - [RPC Implementation Status](#rpc-implementation-status) - - [Securing the communication between RPC daemon and Erigon instance via TLS and authentication](#securing-the-communication-between-rpc-daemon-and-erigon-instance-via-tls-and-authentication) - - [Ethstats](#ethstats) - - [Allowing only specific methods (Allowlist)](#allowing-only-specific-methods--allowlist-) - - [Trace transactions progress](#trace-transactions-progress) - - [Clients getting timeout, but server load is low](#clients-getting-timeout--but-server-load-is-low) - - [Server load too high](#server-load-too-high) - - [Faster Batch requests](#faster-batch-requests) + - [Relations between prune options and rpc methods](#relations-between-prune-options-and-rpc-method) + - [RPC Implementation Status](#rpc-implementation-status) + - [Securing the communication between RPC daemon and Erigon instance via TLS and authentication](#securing-the-communication-between-rpc-daemon-and-erigon-instance-via-tls-and-authentication) + - [Ethstats](#ethstats) + - [Allowing only specific methods (Allowlist)](#allowing-only-specific-methods--allowlist-) + - [Trace transactions progress](#trace-transactions-progress) + - [Clients getting timeout, but server load is low](#clients-getting-timeout--but-server-load-is-low) + - [Server load too high](#server-load-too-high) + - [Faster Batch requests](#faster-batch-requests) - [For Developers](#for-developers) - - [Code generation](#code-generation) + - [Code generation](#code-generation) ## Introduction @@ -72,7 +72,8 @@ it may scale well for some workloads that are heavy on the current state queries ### Healthcheck -There are 2 options for running healtchecks, POST request, or GET request with custom headers. Both options are available +There are 2 options for running healtchecks, POST request, or GET request with custom headers. Both options are +available at the `/health` endpoint. #### POST request @@ -172,6 +173,14 @@ Also, there are [extensive instructions for using Postman](https://github.com/ledgerwatch/erigon/wiki/Using-Postman-to-Test-TurboGeth-RPC) to test the RPC. +### Debugging + +To print more detailed logs for 1 request - add `--rpc.dbg.single=true` flag. Then can send HTTP header `"dbg: true"`: + +``` +curl -X POST -H "dbg: true" -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id":1}' localhost:8545 +``` + ## FAQ ### Relations between prune options and RPC methods @@ -191,7 +200,8 @@ Some methods, if not found historical data in DB, can fallback to old blocks re- ### The --http.url flag -the `--http.url` flag is an optional flag which allows one to bind the HTTP server to a socket, for example, `tcp6://:8545` or `unix:///erigon_http.socket` +the `--http.url` flag is an optional flag which allows one to bind the HTTP server to a socket, for +example, `tcp6://:8545` or `unix:///erigon_http.socket` If the `--http.url` flag is set, then `--http.addr` and `--http.port` with both be ignored. @@ -201,11 +211,13 @@ note that this is NOT geth-style IPC. for that, read the next section, IPC endpo Erigon supports HTTPS, HTTP2, and H2C out of the box. H2C is served by the default HTTP handler. -To enable the HTTPS+HTTP2 server, add flag `--https.enabled`, along with providing flags `-https.cert="/path/to.cert"` and `--https.key=/path/to.key` +To enable the HTTPS+HTTP2 server, add flag `--https.enabled`, along with providing flags `-https.cert="/path/to.cert"` +and `--https.key=/path/to.key` By default, the HTTPS server will run on the HTTP port + 363. use flag `--https.port` to set the port -The HTTPS server will inherit all other configuration parameters from http, for instance, enabling the websocket server, cors domains, or enabled namespaces +The HTTPS server will inherit all other configuration parameters from http, for instance, enabling the websocket server, +cors domains, or enabled namespaces If the `--https.url` flag is set, then `--https.addr` and `--https.port` with both be ignored. @@ -226,7 +238,7 @@ Label "remote" means: `--private.api.addr` flag is required. The following table shows the current implementation status of Erigon's RPC daemon. | Command | Avail | Notes | -| ------------------------------------------ | ------- | ------------------------------------ | +|--------------------------------------------|---------|--------------------------------------| | admin_nodeInfo | Yes | | | admin_peers | Yes | | | admin_addPeer | Yes | | @@ -374,7 +386,7 @@ The following table shows the current implementation status of Erigon's RPC daem ### GraphQL | Command | Avail | Notes | -| --------------- | ----- | ----- | +|-----------------|-------|-------| | GetBlockDetails | Yes | | | GetChainID | Yes | | @@ -503,9 +515,9 @@ Then update your `app.json` for ethstats-client like that: "RPC_PORT": "8545", "LISTENING_PORT": "30303", "INSTANCE_NAME": "Erigon node", - "CONTACT_DETAILS": , + "CONTACT_DETAILS": "", "WS_SERVER": "wss://ethstats.net/api", - "WS_SECRET": , + "WS_SECRET": "", "VERBOSITY": 2 } } @@ -532,7 +544,10 @@ with `rpc.accessList` flag. ```json { - "allow": ["net_version", "web3_eth_getBlockByHash"] + "allow": [ + "net_version", + "web3_eth_getBlockByHash" + ] } ``` diff --git a/cmd/rpcdaemon/cli/config.go b/cmd/rpcdaemon/cli/config.go index aa9ec6d0e51..99a700357e5 100644 --- a/cmd/rpcdaemon/cli/config.go +++ b/cmd/rpcdaemon/cli/config.go @@ -14,6 +14,8 @@ import ( "strings" "time" + "github.com/ledgerwatch/erigon-lib/config3" + "github.com/ledgerwatch/erigon-lib/kv/temporal" "github.com/ledgerwatch/log/v3" "github.com/spf13/cobra" "golang.org/x/sync/semaphore" @@ -22,7 +24,6 @@ import ( "google.golang.org/grpc/health/grpc_health_v1" "github.com/ledgerwatch/erigon-lib/chain" - "github.com/ledgerwatch/erigon-lib/chain/snapcfg" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/common/dir" @@ -52,8 +53,6 @@ import ( "github.com/ledgerwatch/erigon/consensus/ethash" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/state" - "github.com/ledgerwatch/erigon/core/state/temporal" - "github.com/ledgerwatch/erigon/core/systemcontracts" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/node" @@ -96,6 +95,7 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().StringVar(&cfg.RpcAllowListFilePath, utils.RpcAccessListFlag.Name, "", "Specify granular (method-by-method) API allowlist") rootCmd.PersistentFlags().UintVar(&cfg.RpcBatchConcurrency, utils.RpcBatchConcurrencyFlag.Name, 2, utils.RpcBatchConcurrencyFlag.Usage) rootCmd.PersistentFlags().BoolVar(&cfg.RpcStreamingDisable, utils.RpcStreamingDisableFlag.Name, false, utils.RpcStreamingDisableFlag.Usage) + rootCmd.PersistentFlags().BoolVar(&cfg.DebugSingleRequest, utils.HTTPDebugSingleFlag.Name, false, utils.HTTPDebugSingleFlag.Usage) rootCmd.PersistentFlags().IntVar(&cfg.DBReadConcurrency, utils.DBReadConcurrencyFlag.Name, utils.DBReadConcurrencyFlag.Value, utils.DBReadConcurrencyFlag.Usage) rootCmd.PersistentFlags().BoolVar(&cfg.TraceCompatibility, "trace.compat", false, "Bug for bug compatibility with OE for trace_ routines") rootCmd.PersistentFlags().StringVar(&cfg.TxPoolApiAddr, "txpool.api.addr", "", "txpool api network address, for example: 127.0.0.1:9090 (default: use value of --private.api.addr)") @@ -138,6 +138,8 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().DurationVar(&cfg.HTTPTimeouts.WriteTimeout, "http.timeouts.write", rpccfg.DefaultHTTPTimeouts.WriteTimeout, "Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read") rootCmd.PersistentFlags().DurationVar(&cfg.HTTPTimeouts.IdleTimeout, "http.timeouts.idle", rpccfg.DefaultHTTPTimeouts.IdleTimeout, "Maximum amount of time to wait for the next request when keep-alives are enabled. If http.timeouts.idle is zero, the value of http.timeouts.read is used") rootCmd.PersistentFlags().DurationVar(&cfg.EvmCallTimeout, "rpc.evmtimeout", rpccfg.DefaultEvmCallTimeout, "Maximum amount of time to wait for the answer from EVM call.") + rootCmd.PersistentFlags().DurationVar(&cfg.OverlayGetLogsTimeout, "rpc.overlay.getlogstimeout", rpccfg.DefaultOverlayGetLogsTimeout, "Maximum amount of time to wait for the answer from the overlay_getLogs call.") + rootCmd.PersistentFlags().DurationVar(&cfg.OverlayReplayBlockTimeout, "rpc.overlay.replayblocktimeout", rpccfg.DefaultOverlayReplayBlockTimeout, "Maximum amount of time to wait for the answer to replay a single block when called from an overlay_getLogs call.") rootCmd.PersistentFlags().IntVar(&cfg.BatchLimit, utils.RpcBatchLimit.Name, utils.RpcBatchLimit.Value, utils.RpcBatchLimit.Usage) rootCmd.PersistentFlags().IntVar(&cfg.ReturnDataLimit, utils.RpcReturnDataLimit.Name, utils.RpcReturnDataLimit.Value, utils.RpcReturnDataLimit.Usage) @@ -149,6 +151,8 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().IntVar(&cfg.MaxGetProofRewindBlockCount, utils.RpcMaxGetProofRewindBlockCount.Name, utils.RpcMaxGetProofRewindBlockCount.Value, utils.RpcMaxGetProofRewindBlockCount.Usage) rootCmd.PersistentFlags().Uint64Var(&cfg.OtsMaxPageSize, utils.OtsSearchMaxCapFlag.Name, utils.OtsSearchMaxCapFlag.Value, utils.OtsSearchMaxCapFlag.Usage) rootCmd.PersistentFlags().DurationVar(&cfg.RPCSlowLogThreshold, utils.RPCSlowFlag.Name, utils.RPCSlowFlag.Value, utils.RPCSlowFlag.Usage) + rootCmd.PersistentFlags().IntVar(&cfg.WebsocketSubscribeLogsChannelSize, utils.WSSubscribeLogsChannelSize.Name, utils.WSSubscribeLogsChannelSize.Value, utils.WSSubscribeLogsChannelSize.Usage) + if err := rootCmd.MarkPersistentFlagFilename("rpc.accessList", "json"); err != nil { panic(err) } @@ -302,7 +306,7 @@ func EmbeddedServices(ctx context.Context, func RemoteServices(ctx context.Context, cfg *httpcfg.HttpCfg, logger log.Logger, rootCancel context.CancelFunc) ( db kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, stateCache kvcache.Cache, blockReader services.FullBlockReader, engine consensus.EngineReader, - ff *rpchelper.Filters, agg *libstate.AggregatorV3, err error) { + ff *rpchelper.Filters, agg *libstate.Aggregator, err error) { if !cfg.WithDatadir && cfg.PrivateApiAddr == "" { return nil, nil, nil, nil, nil, nil, nil, ff, nil, fmt.Errorf("either remote db or local db must be specified") } @@ -377,19 +381,17 @@ func RemoteServices(ctx context.Context, cfg *httpcfg.HttpCfg, logger log.Logger logger.Info("Use --snapshots=false") } - snapshotVersion := snapcfg.KnownCfg(cc.ChainName, 0).Version - // Configure sapshots - allSnapshots = freezeblocks.NewRoSnapshots(cfg.Snap, cfg.Dirs.Snap, snapshotVersion, logger) - allBorSnapshots = freezeblocks.NewBorRoSnapshots(cfg.Snap, cfg.Dirs.Snap, snapshotVersion, logger) + allSnapshots = freezeblocks.NewRoSnapshots(cfg.Snap, cfg.Dirs.Snap, 0, logger) + allBorSnapshots = freezeblocks.NewBorRoSnapshots(cfg.Snap, cfg.Dirs.Snap, 0, logger) // To povide good UX - immediatly can read snapshots after RPCDaemon start, even if Erigon is down // Erigon does store list of snapshots in db: means RPCDaemon can read this list now, but read by `remoteKvClient.Snapshots` after establish grpc connection allSnapshots.OptimisticReopenWithDB(db) allBorSnapshots.OptimisticalyReopenWithDB(db) allSnapshots.LogStat("remote") - allBorSnapshots.LogStat("remote") + allBorSnapshots.LogStat("bor:remote") - if agg, err = libstate.NewAggregatorV3(ctx, cfg.Dirs.SnapHistory, cfg.Dirs.Tmp, ethconfig.HistoryV3AggregationStep, db, logger); err != nil { + if agg, err = libstate.NewAggregator(ctx, cfg.Dirs.SnapHistory, cfg.Dirs.Tmp, config3.HistoryV3AggregationStep, db, logger); err != nil { return nil, nil, nil, nil, nil, nil, nil, ff, nil, fmt.Errorf("create aggregator: %w", err) } _ = agg.OpenFolder() @@ -416,7 +418,7 @@ func RemoteServices(ctx context.Context, cfg *httpcfg.HttpCfg, logger log.Logger if err := allBorSnapshots.ReopenList(reply.BlocksFiles, true); err != nil { logger.Error("[bor snapshots] reopen", "err", err) } else { - allBorSnapshots.LogStat("reopen") + allBorSnapshots.LogStat("bor:reopen") } _ = reply.HistoryFiles @@ -444,7 +446,7 @@ func RemoteServices(ctx context.Context, cfg *httpcfg.HttpCfg, logger log.Logger }) if histV3Enabled { logger.Info("HistoryV3", "enable", histV3Enabled) - db, err = temporal.New(rwKv, agg, systemcontracts.SystemContractCodeLookup[cc.ChainName]) + db, err = temporal.New(rwKv, agg) if err != nil { return nil, nil, nil, nil, nil, nil, nil, nil, nil, err } @@ -570,7 +572,7 @@ func StartRpcServerWithJwtAuthentication(ctx context.Context, cfg *httpcfg.HttpC func startRegularRpcServer(ctx context.Context, cfg *httpcfg.HttpCfg, rpcAPI []rpc.API, logger log.Logger) error { // register apis and create handler stack - srv := rpc.NewServer(cfg.RpcBatchConcurrency, cfg.TraceRequests, cfg.RpcStreamingDisable, logger, cfg.RPCSlowLogThreshold) + srv := rpc.NewServer(cfg.RpcBatchConcurrency, cfg.TraceRequests, cfg.DebugSingleRequest, cfg.RpcStreamingDisable, logger, cfg.RPCSlowLogThreshold) allowListForRPC, err := parseAllowListForRPC(cfg.RpcAllowListFilePath) if err != nil { @@ -753,7 +755,7 @@ type engineInfo struct { } func startAuthenticatedRpcServer(cfg *httpcfg.HttpCfg, rpcAPI []rpc.API, logger log.Logger) (*engineInfo, error) { - srv := rpc.NewServer(cfg.RpcBatchConcurrency, cfg.TraceRequests, cfg.RpcStreamingDisable, logger, cfg.RPCSlowLogThreshold) + srv := rpc.NewServer(cfg.RpcBatchConcurrency, cfg.TraceRequests, cfg.DebugSingleRequest, cfg.RpcStreamingDisable, logger, cfg.RPCSlowLogThreshold) engineListener, engineSrv, engineHttpEndpoint, err := createEngineListener(cfg, rpcAPI, logger) if err != nil { @@ -843,7 +845,7 @@ func createHandler(cfg *httpcfg.HttpCfg, apiList []rpc.API, httpHandler http.Han func createEngineListener(cfg *httpcfg.HttpCfg, engineApi []rpc.API, logger log.Logger) (*http.Server, *rpc.Server, string, error) { engineHttpEndpoint := fmt.Sprintf("tcp://%s:%d", cfg.AuthRpcHTTPListenAddress, cfg.AuthRpcPort) - engineSrv := rpc.NewServer(cfg.RpcBatchConcurrency, cfg.TraceRequests, true, logger, cfg.RPCSlowLogThreshold) + engineSrv := rpc.NewServer(cfg.RpcBatchConcurrency, cfg.TraceRequests, cfg.DebugSingleRequest, true, logger, cfg.RPCSlowLogThreshold) if err := node.RegisterApisFromWhitelist(engineApi, nil, engineSrv, true, logger); err != nil { return nil, nil, "", fmt.Errorf("could not start register RPC engine api: %w", err) diff --git a/cmd/rpcdaemon/cli/httpcfg/http_cfg.go b/cmd/rpcdaemon/cli/httpcfg/http_cfg.go index 6ac47b577ff..9eaaf499f7d 100644 --- a/cmd/rpcdaemon/cli/httpcfg/http_cfg.go +++ b/cmd/rpcdaemon/cli/httpcfg/http_cfg.go @@ -40,21 +40,23 @@ type HttpCfg struct { AuthRpcPort int PrivateApiAddr string - API []string - Gascap uint64 - MaxTraces uint64 - WebsocketPort int - WebsocketEnabled bool - WebsocketCompression bool - RpcAllowListFilePath string - RpcBatchConcurrency uint - RpcStreamingDisable bool - DBReadConcurrency int - TraceCompatibility bool // Bug for bug compatibility for trace_ routines with OpenEthereum - TxPoolApiAddr string - StateCache kvcache.CoherentConfig - Snap ethconfig.BlocksFreezing - Sync ethconfig.Sync + API []string + Gascap uint64 + Feecap float64 + MaxTraces uint64 + WebsocketPort int + WebsocketEnabled bool + WebsocketCompression bool + WebsocketSubscribeLogsChannelSize int + RpcAllowListFilePath string + RpcBatchConcurrency uint + RpcStreamingDisable bool + DBReadConcurrency int + TraceCompatibility bool // Bug for bug compatibility for trace_ routines with OpenEthereum + TxPoolApiAddr string + StateCache kvcache.CoherentConfig + Snap ethconfig.BlocksFreezing + Sync ethconfig.Sync // GRPC server GRPCServerEnabled bool @@ -66,11 +68,15 @@ type HttpCfg struct { SocketServerEnabled bool SocketListenUrl string - JWTSecretPath string // Engine API Authentication - TraceRequests bool // Always trace requests in INFO level - HTTPTimeouts rpccfg.HTTPTimeouts - AuthRpcTimeouts rpccfg.HTTPTimeouts - EvmCallTimeout time.Duration + JWTSecretPath string // Engine API Authentication + TraceRequests bool // Print requests to logs at INFO level + DebugSingleRequest bool // Print single-request-related debugging info to logs at INFO level + HTTPTimeouts rpccfg.HTTPTimeouts + AuthRpcTimeouts rpccfg.HTTPTimeouts + EvmCallTimeout time.Duration + OverlayGetLogsTimeout time.Duration + OverlayReplayBlockTimeout time.Duration + LogDirVerbosity string LogDirPath string diff --git a/cmd/rpcdaemon/graphql/graph/schema.resolvers.go b/cmd/rpcdaemon/graphql/graph/schema.resolvers.go index 0bf234f9c0c..542ff100a96 100644 --- a/cmd/rpcdaemon/graphql/graph/schema.resolvers.go +++ b/cmd/rpcdaemon/graphql/graph/schema.resolvers.go @@ -102,6 +102,7 @@ func (r *queryResolver) Block(ctx context.Context, number *string, hash *string) block.TransactionCount = convertDataToIntP(blk, "transactionCount") block.TransactionsRoot = *convertDataToStringP(blk, "transactionsRoot") block.TotalDifficulty = *convertDataToStringP(blk, "totalDifficulty") + block.BaseFeePerGas = convertDataToStringP(blk, "baseFeePerGas") block.Transactions = []*model.Transaction{} block.LogsBloom = "0x" + *convertDataToStringP(blk, "logsBloom") @@ -161,7 +162,6 @@ func (r *queryResolver) Block(ctx context.Context, number *string, hash *string) // Blocks is the resolver for the blocks field. func (r *queryResolver) Blocks(ctx context.Context, from *uint64, to *uint64) ([]*model.Block, error) { - var blocks []*model.Block const maxBlocks = 25 diff --git a/cmd/rpcdaemon/graphql/graphql_test.go b/cmd/rpcdaemon/graphql/graphql_test.go index e8bce1384fb..791e52bcf57 100644 --- a/cmd/rpcdaemon/graphql/graphql_test.go +++ b/cmd/rpcdaemon/graphql/graphql_test.go @@ -85,6 +85,12 @@ func TestGraphQLQueryBlock(t *testing.T) { want: `{"errors":[{"message":"Cannot query field \"bleh\" on type \"Query\".","locations":[{"line":1,"column":2}],"extensions":{"code":"GRAPHQL_VALIDATION_FAILED"}}],"data":null}`, code: 422, }, + { // Should return baseFeePerGas + body: `{"query": "{block{number,baseFeePerGas}}","variables": null}`, + want: `{"data":{"block":{"number":\d{8,},"baseFeePerGas":\w+}}`, + code: 200, + comp: "regexp", + }, // should return `estimateGas` as decimal /* { diff --git a/cmd/rpcdaemon/graphql/query_block.graphql b/cmd/rpcdaemon/graphql/query_block.graphql index 587e168e946..bfbe0515a95 100644 --- a/cmd/rpcdaemon/graphql/query_block.graphql +++ b/cmd/rpcdaemon/graphql/query_block.graphql @@ -5,6 +5,7 @@ extraData gasLimit gasUsed + baseFeePerGas logsBloom ommerHash ommers { @@ -25,33 +26,33 @@ transactionsRoot totalDifficulty transactions { - createdContract { - address - } - cumulativeGasUsed - from { - address - } - gasUsed - gasPrice - inputData + createdContract { + address + } + cumulativeGasUsed + from { + address + } + gasUsed + gasPrice + inputData nonce - index - value - logs { - account { - address - } - data - index - topics - } - hash - index - to { - address - } - status + index + value + logs { + account { + address + } + data + index + topics + } + hash + index + to { + address + } + status } } } diff --git a/cmd/rpcdaemon/main.go b/cmd/rpcdaemon/main.go index 7a26fe2076e..c2e7806bcf8 100644 --- a/cmd/rpcdaemon/main.go +++ b/cmd/rpcdaemon/main.go @@ -13,6 +13,9 @@ import ( "github.com/ledgerwatch/erigon/turbo/debug" "github.com/ledgerwatch/erigon/turbo/jsonrpc" "github.com/spf13/cobra" + + _ "github.com/ledgerwatch/erigon/core/snaptype" //hack + _ "github.com/ledgerwatch/erigon/polygon/bor/snaptype" //hack ) func main() { diff --git a/cmd/rpcdaemon/postman/Overlay_Testing.json b/cmd/rpcdaemon/postman/Overlay_Testing.json new file mode 100644 index 00000000000..574a6d59032 --- /dev/null +++ b/cmd/rpcdaemon/postman/Overlay_Testing.json @@ -0,0 +1,3852 @@ +{ + "info": { + "_postman_id": "71e558b6-0f2a-402c-a8f4-a246fccd0e0f", + "name": "Overlay Testing", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "32940765" + }, + "item": [ + { + "name": "overlay_callConstructor", + "item": [ + { + "name": "ethereum", + "item": [ + { + "name": "CREATE", + "item": [ + { + "name": "WETH [0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": \"1\",", + " \"result\": {", + " \"code\": \"0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058208531eaba73699a54921fe3ca8ddd2f953367c4f55a4af45f1bb1eb153cf19dac0029\"", + " }", + "}", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : \"1\",\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_callConstructor\",\n \"params\" : [\n \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n \"0x60606040526040805190810160405280600d81526020017f57726170706564204574686572000000000000000000000000000000000000008152506000908051906020019061004f9291906100c8565b506040805190810160405280600481526020017f57455448000000000000000000000000000000000000000000000000000000008152506001908051906020019061009b9291906100c8565b506012600260006101000a81548160ff021916908360ff16021790555034156100c357600080fd5b61016d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010957805160ff1916838001178555610137565b82800160010185558215610137579182015b8281111561013657825182559160200191906001019061011b565b5b5090506101449190610148565b5090565b61016a91905b8082111561016657600081600090555060010161014e565b5090565b90565b610c348061017c6000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058208531eaba73699a54921fe3ca8ddd2f953367c4f55a4af45f1bb1eb153cf19dac0029\"\n ]\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "WETH mod [0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": \"1\",", + " \"result\": {", + " \"code\": \"0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc610543565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506105e1565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b46106d3565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506106f2565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b6102646004808035906020019091905050610a3f565b005b341561027157600080fd5b610279610bd1565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be4565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610bfc565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610c9a565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610caf565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef346040518082815260200191505060405180910390a3565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561074257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561081a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156109355781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156108aa57600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a8d57600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610b1a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b505050505081565b6000610ca73384846106f2565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820ebb12a6d914bf3a0414d4875b0a04981da1d20a808154259b5e2993065e9c3400029\"", + " }", + "}", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : \"1\",\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_callConstructor\",\n \"params\" : [\n \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n \"0x60606040526040805190810160405280600d81526020017f57726170706564204574686572000000000000000000000000000000000000008152506000908051906020019061004f9291906100c8565b506040805190810160405280600481526020017f57455448000000000000000000000000000000000000000000000000000000008152506001908051906020019061009b9291906100c8565b506012600260006101000a81548160ff021916908360ff16021790555034156100c357600080fd5b61016d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010957805160ff1916838001178555610137565b82800160010185558215610137579182015b8281111561013657825182559160200191906001019061011b565b5b5090506101449190610148565b5090565b61016a91905b8082111561016657600081600090555060010161014e565b5090565b90565b610d008061017c6000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc610543565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506105e1565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b46106d3565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506106f2565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b6102646004808035906020019091905050610a3f565b005b341561027157600080fd5b610279610bd1565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be4565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610bfc565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610c9a565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610caf565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef346040518082815260200191505060405180910390a3565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561074257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561081a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156109355781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156108aa57600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a8d57600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610b1a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b505050505081565b6000610ca73384846106f2565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820ebb12a6d914bf3a0414d4875b0a04981da1d20a808154259b5e2993065e9c3400029\"\n ]\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "CREATE2", + "item": [ + { + "name": "ShareValueHelper [0x444443bae5bB8640677A8cdF94CB8879Fec948Ec]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": \"1\",", + " \"result\": {", + " \"code\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063a59c850414610046578063c1e2998d1461006b578063d3d83fa61461007e575b600080fd5b610059610054366004610459565b610091565b60405190815260200160405180910390f35b610059610079366004610437565b61013d565b61005961008c366004610459565b610375565b600080836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100cd57600080fd5b505afa1580156100e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101059190610483565b90508015610132576101168461013d565b61012082856104be565b61012a919061049c565b915050610137565b829150505b92915050565b600080826001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b15801561017957600080fd5b505afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190610483565b90506000836001600160a01b031663422327166040518163ffffffff1660e01b815260040160206040518083038186803b1580156101ee57600080fd5b505afa158015610202573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102269190610483565b846001600160a01b031663c3535b526040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102979190610483565b6102a190426104dd565b6102ab91906104be565b9050670de0b6b3a764000081101561036e576000846001600160a01b03166344b813966040518163ffffffff1660e01b815260040160206040518083038186803b1580156102f857600080fd5b505afa15801561030c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103309190610483565b9050670de0b6b3a764000061034582846104be565b61034f919061049c565b61035990826104dd565b905061036581846104dd565b95945050505050565b5092915050565b600080836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b157600080fd5b505afa1580156103c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e99190610483565b9050806103f95782915050610137565b60006104048561013d565b90508161041182866104be565b610365919061049c565b80356001600160a01b038116811461043257600080fd5b919050565b60006020828403121561044957600080fd5b6104528261041b565b9392505050565b6000806040838503121561046c57600080fd5b6104758361041b565b946020939093013593505050565b60006020828403121561049557600080fd5b5051919050565b6000826104b957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156104d8576104d86104f4565b500290565b6000828210156104ef576104ef6104f4565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220c658ab4f0ab41de69b634c814e7853f594541a7b2a58aa2a9244016bc0d00ed464736f6c63430008060033\"", + " }", + "}", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : \"1\",\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_callConstructor\",\n \"params\" : [\n \"0x444443bae5bB8640677A8cdF94CB8879Fec948Ec\",\n \"0x608060405234801561001057600080fd5b50610540806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063a59c850414610046578063c1e2998d1461006b578063d3d83fa61461007e575b600080fd5b610059610054366004610459565b610091565b60405190815260200160405180910390f35b610059610079366004610437565b61013d565b61005961008c366004610459565b610375565b600080836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100cd57600080fd5b505afa1580156100e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101059190610483565b90508015610132576101168461013d565b61012082856104be565b61012a919061049c565b915050610137565b829150505b92915050565b600080826001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b15801561017957600080fd5b505afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190610483565b90506000836001600160a01b031663422327166040518163ffffffff1660e01b815260040160206040518083038186803b1580156101ee57600080fd5b505afa158015610202573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102269190610483565b846001600160a01b031663c3535b526040518163ffffffff1660e01b815260040160206040518083038186803b15801561025f57600080fd5b505afa158015610273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102979190610483565b6102a190426104dd565b6102ab91906104be565b9050670de0b6b3a764000081101561036e576000846001600160a01b03166344b813966040518163ffffffff1660e01b815260040160206040518083038186803b1580156102f857600080fd5b505afa15801561030c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103309190610483565b9050670de0b6b3a764000061034582846104be565b61034f919061049c565b61035990826104dd565b905061036581846104dd565b95945050505050565b5092915050565b600080836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b157600080fd5b505afa1580156103c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e99190610483565b9050806103f95782915050610137565b60006104048561013d565b90508161041182866104be565b610365919061049c565b80356001600160a01b038116811461043257600080fd5b919050565b60006020828403121561044957600080fd5b6104528261041b565b9392505050565b6000806040838503121561046c57600080fd5b6104758361041b565b946020939093013593505050565b60006020828403121561049557600080fd5b5051919050565b6000826104b957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156104d8576104d86104f4565b500290565b6000828210156104ef576104ef6104f4565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220c658ab4f0ab41de69b634c814e7853f594541a7b2a58aa2a9244016bc0d00ed464736f6c63430008060033\"\n ]\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "ShareValueHelper mod [0x444443bae5bB8640677A8cdF94CB8879Fec948Ec]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": \"1\",", + " \"result\": {", + " \"code\": \"0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058208531eaba73699a54921fe3ca8ddd2f953367c4f55a4af45f1bb1eb153cf19dac0029\"", + " }", + "}", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : \"1\",\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_callConstructor\",\n \"params\" : [\n \"0x444443bae5bB8640677A8cdF94CB8879Fec948Ec\",\n \"0x60606040526040805190810160405280600d81526020017f57726170706564204574686572000000000000000000000000000000000000008152506000908051906020019061004f9291906100c8565b506040805190810160405280600481526020017f57455448000000000000000000000000000000000000000000000000000000008152506001908051906020019061009b9291906100c8565b506012600260006101000a81548160ff021916908360ff16021790555034156100c357600080fd5b61016d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010957805160ff1916838001178555610137565b82800160010185558215610137579182015b8281111561013657825182559160200191906001019061011b565b5b5090506101449190610148565b5090565b61016a91905b8082111561016657600081600090555060010161014e565b5090565b90565b610c348061017c6000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058208531eaba73699a54921fe3ca8ddd2f953367c4f55a4af45f1bb1eb153cf19dac0029\"\n ]\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "yvAjnaDAI [0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": \"1\",", + " \"result\": {", + " \"code\": \"0x6003361161000c57612165565b60003560e01c34615a74576371da8a8d811861007a5760243610615a74576004358060a01c615a745760c0523360405260086060526100496159de565b60c05160155560c0517f28709a2dab2a5d5e8688e96159011151c51644ab21839a8a45b449634d7c8b2b600060e0a2005b632d9caa4e81186102585760443610615a7457600435600401600a813511615a745780358060c052600081600a8111615a745780156100da57905b8060051b6020850101358060a01c615a74578160051b60e001526001018181186100b5575b505050503360405260106060526100ef6159de565b600060c051600a8111615a7457801561019757905b8060051b60e001516102205260016102205160205260005260406000205461018c576009610240527f21696e61637469766500000000000000000000000000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b600101818118610104575b505060c051806002558060051b600081601f0160051c600a8111615a745780156101d557905b8060051b60e0015181600301556001018181186101bd575b505050507f0bc0cb8c5ccee13e6a2fd26a699f57ad7ff6e454e6aae97ec41cd2eb9ebd63a5602080610220528061022001600060c0518083528060051b600082600a8111615a7457801561024257905b8060051b60e001518160051b602088010152600101818118610225575b50508201602001915050905081019050610220a1005b6329c8a33b81186102be5760243610615a74576004358060011c615a745760c05233604052601060605261028a6159de565b60c051600d557f1f88e73ebc721f227812938fe07a069ec1f7136aafacb397ed460bd15dee13f160c05160e052602060e0a1005b636fe01d1e81186103835760243610615a7457602154615a7457336040526101006060526102ea6159de565b6016541561034f57600c60c0527f7573696e67206d6f64756c65000000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd6260043560c052602060c0a1005b63bb43546681186104565760243610615a74576004358060a01c615a745760c052602154615a7457336040526101006060526103bd6159de565b601454191561042557601360e0527f7573696e67206465706f736974206c696d6974000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60c05160165560c0517f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060e0a2005b637b67589481186104ba5760243610615a74576004358060a01c615a745760c052336040526102006060526104896159de565b60c05160175560c0517fce6e3f8beda82a13c441d76efd4a6335760f219f38c60502e6680060874e109d600060e0a2005b63bdd81c0181186105135760243610615a7457336040526104006060526104df6159de565b6004356013557f01a4494beed88920b88742cc58f2744e198f55ff192635a1fbabc6be8ffade8160043560c052602060c0a1005b63df69b22a81186106075760243610615a7457336040526108006060526105386159de565b6301e1855860043511156105a357601b60c0527f70726f66697420756e6c6f636b2074696d6520746f6f206c6f6e67000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356105d357600e30602052600052604060002054604052306060526105c861291e565b600060245560006023555b6004356022557ff361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a60043560c052602060c0a1005b632cf7fd8581186106815760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a745760605160186040516020526000526040600020556060516040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63a97cefa2811861071b5760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a7457606051601860405160205260005260406000205417601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63e2bf56dd81186107b95760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a7457606051613fff18601860405160205260005260406000205416601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b630b10dd8081186108235760243610615a745760043580600e1c615a7457604052601a543318615a74576001601960405160205260005260406000205560016040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63d52fe498811861088d5760243610615a745760043580600e1c615a7457604052601a543318615a74576000601960405160205260005260406000205560026040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63ef54cefd81186108bf5760243610615a74576004358060a01c615a7457604052601a543318615a7457604051601b55005b63f776bf1f811861090d5760043610615a7457601b543318615a745733601a556000601b55337fce93baa0b608a7d420822b6b90cfcccb70574363ba4fd26ef5ac17dd465016c460006040a2005b63bf86d690811861092c5760043610615a745760215460405260206040f35b63d9a0e97a811861094f5760043610615a7457602061094b6080612981565b6080f35b6399530b0681186109955760043610615a745760206020615aa6600039600051604d8111615a745780600a0a905060a052600160c052610990610140612a6e565b610140f35b63a9bbf1cc81186109ff5760043610615a74576020806040528060400160006002548083528060051b600082600a8111615a745780156109eb57905b80600301548160051b6020880101526001018181186109d1575b505082016020019150509050810190506040f35b636ec2b8d48118610a605760243610615a74576004358060a01c615a74576104e052600054600214615a74576002600055336040526020606052610a416159de565b60406104e0516101a052610a566105006151a9565b6105006003600055f35b63e5e918188118610e305760443610615a74576004358060a01c615a74576101a052600054600214615a7457600260005533604052611000606052610aa36159de565b60016101a051602052600052604060002054610b1f57600a6101c0527f6e6f7420616374697665000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60016101a0516020526000526040600020600281019050546101c0526024356101e0526101c051610bb057600e610200527f6e6f7468696e6720746f206275790000000000000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101e051610c1e576013610200527f6e6f7468696e6720746f206275792077697468000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101c0516101e0511115610c35576101c0516101e0525b6101a0516370a082316102205230610240526020610220602461023c845afa610c63573d600060003e3d6000fd5b60203d10615a74576102209050516101e051808202811583838304141715615a7457905090506101c0518015615a7457808204905090506102005261020051610d0c57600f610220527f63616e6e6f7420627579207a65726f00000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615a8660003960005160405233606052306080526101e05160a052610d31612d0d565b60016101a051602052600052604060002060028101905080546101e051808203828111615a7457905090508155506011546101e051808203828111615a7457905090506011556012546101e051808201828110615a7457905090506012556101a0517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c051610220526101c0516101e051808203828111615a745790509050610240526040610220a26101a0516040523360605261020051608052610df6612de9565b6101a0517fe94e7f88819f66c19b097748cb754149f63b1a176ed425dee1f1ee933e6d09b06101e051610220526020610220a26003600055005b63de7aeb418118610e745760243610615a74576004358060a01c615a745761010052336040526001606052610e636159de565b61010051604052610e72614573565b005b63577db3168118610ebd5760243610615a74576004358060a01c615a745761022052336040526002606052610ea76159de565b610220516040526000606052610ebb614787565b005b63fd129e638118610f065760243610615a74576004358060a01c615a745761022052336040526004606052610ef06159de565b610220516040526001606052610f04614787565b005b63b9ddcd688118610ff85760443610615a74576004358060a01c615a745760c052336040526080606052610f386159de565b600160c051602052600052604060002054610fac57601160e0527f696e6163746976652073747261746567790000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b602435600160c05160205260005260406000206003810190505560c051337fb3eef2123fec1523a6bbc90aceb203000154c1a4974335fe06b544c7534d4b8960243560e052602060e0a3005b630aeebf5581186110605760443610615a74576004358060a01c615a745761030052600054600214615a7457600260005533604052604060605261103a6159de565b60206103005161016052602435610180526110566103206149de565b6103206003600055f35b6336a5545081186111405760043610615a7457336040526120006060526110856159de565b602154615a74576001602155601654156110c757600060165560007f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060c0a25b60006014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd62600060c052602060c0a16040601833602052600052604060002054176018336020526000526040600020557f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf8600060c0a1005b636e553f65811861119c5760443610615a74576024358060a01c615a745761026052600054600214615a745760026000556020336101a052610260516101c0526004356101e05261119261028061369e565b6102806003600055f35b6394bf804d81186111f85760443610615a74576024358060a01c615a745761028052600054600214615a745760026000556020336101a052610280516101c0526004356101e0526111ee6102a061383f565b6102a06003600055f35b63b460af9481186112175760643610615a7457604036610be0376112aa565b63a318c1a4811861123c5760843610615a7457606435610be0526000610c00526112aa565b63d81a09f681186113585760c43610615a7457606435610be052608435600401600a813511615a7457803580610c0052600081600a8111615a745780156112a557905b8060051b6020850101358060a01c615a74578160051b610c20015260010181811861127f575b505050505b6024358060a01c615a7457610ba0526044358060a01c615a7457610bc052600054600214615a7457600260005560043560a052600260c0526112ed610d80612b45565b610d8051610d6052336105e052610ba05161060052610bc0516106205260043561064052610d605161066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa505050611348610d80613ab7565b610d80506020610d606003600055f35b63ba087652811861137d5760643610615a7457612710610be0526000610c0052611410565b639f40a7b381186113a25760843610615a7457606435610be0526000610c0052611410565b6306580f2d81186114ba5760c43610615a7457606435610be052608435600401600a813511615a7457803580610c0052600081600a8111615a7457801561140b57905b8060051b6020850101358060a01c615a74578160051b610c2001526001018181186113e5575b505050505b6024358060a01c615a7457610ba0526044358060a01c615a7457610bc052600054600214615a7457600260005560043560a052600160c052611453610d80612a6e565b610d8051610d60526020336105e052610ba05161060052610bc05161062052610d60516106405260043561066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa5050506114b0610d80613ab7565b610d806003600055f35b63095ea7b381186114fb5760443610615a74576004358060a01c615a745760c05260203360405260c0516060526024356080526114f760e061216b565b60e0f35b63a9059cbb81186115605760443610615a74576004358060a01c615a7457610100526101005130811461153057801515611533565b60005b905015615a745733604052610100516060526024356080526115536122b7565b6001610120526020610120f35b6323b872dd81186115d75760643610615a74576004358060a01c615a74576101e0526024358060a01c615a745761020052610200513081146115a4578015156115a7565b60005b905015615a745760206101e05161018052610200516101a0526044356101c0526115d26102206123a6565b610220f35b6339509351811861161a5760443610615a74576004358060a01c615a745760e05260203360405260e0516060526024356080526116156101006123e5565b610100f35b63a457c2d7811861165d5760443610615a74576004358060a01c615a745760e05260203360405260e051606052602435608052611658610100612479565b610100f35b63d505accf81186116d75760e43610615a74576004358060a01c615a7457610460526024358060a01c615a7457610480526084358060081c615a74576104a05260206104605161018052610480516101a052604060446101c0376104a05161020052604060a4610220376116d26104c06125e7565b6104c0f35b6370a0823181186117545760243610615a74576004358060a01c615a7457608052306080511861173957600e60805160205260005260406000205461171c60a0612981565b60a051808203828111615a74579050905060c052602060c0611752565b600e60805160205260005260406000205460a052602060a05bf35b6318160ddd81186117775760043610615a7457602061177360a06129f3565b60a0f35b6338d52e0f811861179e5760043610615a74576020615a8660003960005160405260206040f35b63313ce56781186117cd5760043610615a74576020615aa66000396000518060081c615a745760405260206040f35b6301e1d11481186117f05760043610615a745760206117ec6040612a55565b6040f35b639aa7df94811861180f5760043610615a745760125460405260206040f35b63fc7b9c18811861182e5760043610615a745760115460405260206040f35b63c6e6f592811861185e5760243610615a7457602060043560a052600160c052611859610160612b45565b610160f35b63ef8b30f7811861188e5760243610615a7457602060043560a052600160c052611889610160612b45565b610160f35b63b3d7f6b981186118be5760243610615a7457602060043560a052600260c0526118b9610140612a6e565b610140f35b6307a2d13a81186118ee5760243610615a7457602060043560a052600160c0526118e9610140612a6e565b610140f35b63402d267d81186119255760243610615a74576004358060a01c615a745760c052602060c05160405261192160e061305d565b60e0f35b63c63d75b6811861197f5760243610615a74576004358060a01c615a745761016052610160516040526119596101a061305d565b6101a0516101805260206101805160a052600160c05261197a6101a0612b45565b6101a0f35b63ce96cb77811861199e5760243610615a745760403661060037611a31565b6385b6875681186119c35760443610615a745760243561060052600061062052611a31565b6365cb67658118611a7e5760843610615a745760243561060052604435600401600a813511615a745780358061062052600081600a8111615a74578015611a2c57905b8060051b6020850101358060a01c615a74578160051b6106400152600101818118611a06575b505050505b6004358060a01c615a74576105e05260206105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611a7961078061323b565b610780f35b63d905777e8118611aa35760243610615a745761271061060052600061062052611b36565b634abe41378118611ac85760443610615a745760243561060052600061062052611b36565b6334b5fab68118611bd15760843610615a745760243561060052604435600401600a813511615a745780358061062052600081600a8111615a74578015611b3157905b8060051b6020850101358060a01c615a74578160051b6106400152600101818118611b0b575b505050505b6004358060a01c615a74576105e0526105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611b7c61078061323b565b610780516107c05260026107e0526107c05160a0526107e05160c052611ba36107a0612b45565b6107a051600e6105e05160205260005260406000205480828118828410021890509050610800526020610800f35b630a28a4778118611c015760243610615a7457602060043560a052600260c052611bfc610160612b45565b610160f35b634cdad5068118611c315760243610615a7457602060043560a052600160c052611c2c610140612a6e565b610140f35b63258294108118611cb95760043610615a745760208060805260056040527f332e302e3100000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6366d3ae578118611d1a5760443610615a74576004358060a01c615a74576101205260243560016101205160205260005260406000206002810190505410615a7457602061012051604052602435606052611d15610140613108565b610140f35b630952864e8118611d395760043610615a745760225460405260206040f35b632d6326928118611d585760043610615a745760235460405260206040f35b635141eebb8118611d775760043610615a745760245460405260206040f35b638afca8f08118611d965760043610615a745760255460405260206040f35b633644e5158118611dbb5760043610615a74576020611db661018061250d565b610180f35b632dd310008118611de25760043610615a74576020615ac660003960005160405260206040f35b6339ebf8238118611e375760243610615a74576004358060a01c615a74576040526001604051602052600052604060002080546060526001810154608052600281015460a052600381015460c0525060806060f35b638bf03b9e8118611e645760243610615a7457600435600254811015615a74576003015460405260206040f35b631e56558d8118611e835760043610615a7457600d5460405260206040f35b63dd62ed3e8118611edd5760443610615a74576004358060a01c615a74576040526024358060a01c615a7457606052600f604051602052600052604060002080606051602052600052604060002090505460805260206080f35b633940e9ee8118611efc5760043610615a745760105460405260206040f35b63356d64098118611f1b5760043610615a745760135460405260206040f35b63e46a57978118611f3a5760043610615a745760145460405260206040f35b634fb3ccc58118611f595760043610615a745760155460405260206040f35b6361c2ccf48118611f785760043610615a745760165460405260206040f35b63f5ba68f38118611f975760043610615a745760175460405260206040f35b63993746428118611fd25760243610615a74576004358060a01c615a7457604052601860405160205260005260406000205460605260206060f35b63f3789e45811861200d5760243610615a745760043580600e1c615a7457604052601960405160205260005260406000205460605260206060f35b6379b98917811861202c5760043610615a7457601a5460405260206040f35b639a98f418811861204b5760043610615a7457601b5460405260206040f35b6306fdde0381186120d05760043610615a745760208060405280604001601c5480825260208201600082601f0160051c60028111615a745780156120a257905b80601d01548160051b84015260010181811861208b575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186121285760043610615a745760208060405280604001601f5480825260208201602054815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b637ecebe0081186121635760243610615a74576004358060a01c615a7457604052602660405160205260005260406000205460605260206060f35b505b60006000fd5b608051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a36001815250565b600f60c05160205260005260406000208060e0516020526000526040600020905054610120527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61012051146122b5576101005161012051101561228d576016610140527f696e73756666696369656e7420616c6c6f77616e6365000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b60c05160405260e0516060526101005161012051036080526122b061014061216b565b610140505b565b600e60405160205260005260406000205460a05260805160a051101561233457601260c0527f696e73756666696369656e742066756e6473000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60805160a05103600e604051602052600052604060002055608051600e60605160205260005260406000205401600e6060516020526000526040600020556060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160c052602060c0a3565b6101805160c0523360e0526101c051610100526123c16121c9565b610180516040526101a0516060526101c0516080526123de6122b7565b6001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808201828110615a74579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808203828111615a74579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8160e00152602081019050600b6040527f596561726e205661756c7400000000000000000000000000000000000000000060605260408051602082012090508160e0015260208101905060056080527f332e302e3100000000000000000000000000000000000000000000000000000060a05260808051602082012090508160e00152602081019050468160e00152602081019050308160e001526020810190508060c05260c09050805160208201209050815250565b6101805161265557600d610260527f696e76616c6964206f776e6572000000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b426101e05110156126c657600e610260527f7065726d697420657870697265640000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60266101805160205260005260406000205461026052600060026102a0527f19010000000000000000000000000000000000000000000000000000000000006102c0526102a080516020820183610400018151815250508083019250505061272f6102e061250d565b6102e05181610400015260208101905060007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9816103200152602081019050610180518161032001526020810190506101a0518161032001526020810190506101c051816103200152602081019050610260518161032001526020810190506101e05181610320015260208101905080610300526103009050805160208201209050816104000152602081019050806103e0526103e090508051602082012090506102805261018051610280516102a052610200516102c052610220516102e05261024051610300526020600060806102a060015afa506000511815612895576011610340527f696e76616c6964207369676e61747572650000000000000000000000000000006103605261034050610340518061036001601f826000031636823750506308c379a061030052602061032052601f19601f61034051011660440161031cfd5b6101c051600f610180516020526000526040600020806101a05160205260005260406000209050556102605160018101818110615a745790506026610180516020526000526040600020556101a051610180517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256101c0516102a05260206102a0a36001815250565b600e60605160205260005260406000208054604051808203828111615a7457905090508155506040516010540360105560006060517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b602354604052600060605242604051116129b457604051156129eb57600e306020526000526040600020546060526129eb565b60245442602554808203828111615a745790509050808202811583838304141715615a74579050905064e8d4a51000810490506060525b606051815250565b601054612a006080612981565b608051808203828111615a745790509050815250565b612a2060c0612981565b60c05160a05260a051612a3257612a53565b426023541115612a4157426025555b60a05160405230606052612a5361291e565b565b601254601154808201828110615a745790509050815250565b60a05119612a7d576001612a82565b60a051155b15612a925760a051815250612b43565b612a9d6101006129f3565b6101005160e05260e051612ab65760a051815250612b43565b60a051612ac4610120612a55565b61012051808202811583838304141715615a745790509050610100526101005160e0518015615a74578082049050905061012052600260c05118612b1d576101005160e0518015615a7457808206905090501515612b20565b60005b15612b3b576101205160018101818110615a74579050610120525b610120518152505b565b60a05119612b54576001612b59565b60a051155b15612b695760a051815250612c39565b612b746101006129f3565b6101005160e052612b86610120612a55565b610120516101005261010051612bb65760e051612bac5760a051815250612c3956612bb6565b6000815250612c39565b60a05160e051808202811583838304141715615a7457905090506101205261012051610100518015615a74578082049050905061014052600260c05118612c135761012051610100518015615a7457808206905090501515612c16565b60005b15612c31576101405160018101818110615a74579050610140525b610140518152505b565b60405163095ea7b360a05260605160c05260805160e052602060a0604460bc6000855af1612c6e573d600060003e3d6000fd5b3d612c8557803b15615a7457600161010052612c9d565b60203d10615a745760a0518060011c615a7457610100525b610100905051612d0b57600f610120527f617070726f76616c206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b6040516323b872dd60c05260605160e0526080516101005260a05161012052602060c0606460dc6000855af1612d48573d600060003e3d6000fd5b3d612d5f57803b15615a7457600161014052612d77565b60203d10615a745760c0518060011c615a7457610140525b610140905051612de757600f610160527f7472616e73666572206661696c656400000000000000000000000000000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b565b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc6000855af1612e1c573d600060003e3d6000fd5b3d612e3357803b15615a7457600161010052612e4b565b60203d10615a745760a0518060011c615a7457610100525b610100905051612eb957600f610120527f7472616e73666572206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b604051600e60605160205260005260406000205401600e606051602052600052604060002055601054604051808201828110615a74579050905060105560605160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b612f366101006129f3565b6101005160e052612f48610120612a55565b610120516101005260006101205260e051612f695760a0516101205261302c565b60a0516101005111612feb5760a051610100511161302c57600f610140527f616d6f756e7420746f6f206869676800000000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd61302c565b60a05160e051808202811583838304141715615a7457905090506101005160a051808203828111615a7457905090508015615a745780820490509050610120525b6101205161303e57600081525061305b565b6101205160405260c051606052613053612ebb565b610120518152505b565b6040518061306c576001613071565b308118155b905015613082576000815250613106565b601654606052606051156130d05760605163320704ed60805260405160a052602060806024609c845afa6130bb573d600060003e3d6000fd5b60203d10615a74576080905051815250613106565b6130da60a0612a55565b60a05160805260145460a05260a051608051106130fb576000815250613106565b60805160a051038152505b565b60016040516020526000526040600020600281019050546080526040516370a0823160c0523060e052602060c0602460dc845afa61314b573d600060003e3d6000fd5b60203d10615a745760c090505160a0526040516307a2d13a60e05260a05161010052602060e0602460fc845afa613187573d600060003e3d6000fd5b60203d10615a745760e090505160c05260805160c05110156131ac57608051156131af565b60015b156131be576000815250613239565b60605160c051808202811583838304141715615a74579050905060e05260605160e0516080518015615a745780820490509050808203828111615a7457905090506101005260e0516080518015615a74578082069050905015613231576101005160018101818110615a74579050610100525b610100518152505b565b600e6101405160205260005260406000205460a052600160c052613260610300612a6e565b610300516102e052601754610300526103005115613333576103005163c36a0eee61032052606061014051610340526101605161036052806103805280610340016000610180518083528060051b600082600a8111615a745780156132df57905b8060051b6101a001518160051b6020880101526001018181186132c1575b5050820160200191505090508101505060206103206101c461033c845afa61330c573d600060003e3d6000fd5b60203d10615a74576103209050516102e0518082811882841002189050905081525061369c565b60125461032052610320516102e051111561369457610320516103405260006103605260025480610380528060051b600081601f0160051c600a8111615a7457801561339457905b80600301548160051b6103a0015260010181811861337b575b5050505061018051156133aa57600d54156133ad565b60005b156133cf576101805180610380528060051b806103a0826101a060045afa5050505b600061038051600a8111615a7457801561368957905b8060051b6103a001516104e05260016104e05160205260005260406000205461346e576011610500527f696e6163746976652073747261746567790000000000000000000000000000006105205261050050610500518061052001601f826000031636823750506308c379a06104c05260206104e052601f19601f6105005101166044016104dcfd5b6102e05161034051808203828111615a74579050905060016104e05160205260005260406000206002810190505480828118828410021890509050610500526104e051604052610500516060526134c6610540613108565b61054051610520526104e0516307a2d13a6105a0526104e05163d905777e6105605230610580526020610560602461057c845afa613509573d600060003e3d6000fd5b60203d10615a74576105609050516105c05260206105a060246105bc845afa613537573d600060003e3d6000fd5b60203d10615a74576105a0905051610540526105005161052051808203828111615a7457905090506105405110156135b5576105205161054051808202811583838304141715615a745790509050610500518015615a745780820490509050610520526105405161052051808201828110615a745790509050610500525b610500516135c25761367e565b61052051156135d95761270f6101605111156135dc565b60005b15613637576103405161050051808201828110615a74579050905061016051808202811583838304141715615a745790509050612710810490506103605161052051808201828110615a745790509050111561363757613689565b6103405161050051808201828110615a745790509050610340526102e051610340511061366357613689565b6103605161052051808201828110615a745790509050610360525b6001018181186133e5575b5050610340516102e0525b6102e0518152505b565b602154615a74576101c0516040526136b761020061305d565b610200516101e051111561372b576014610220527f657863656564206465706f736974206c696d69740000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615a8660003960005160405233606052306080526101e05160a052613750612d0d565b6012546101e051808201828110615a7457905090506012556101e05160a0526101c05160c052613781610220612f2b565b6102205161020052610200516137f7576010610220527f63616e6e6f74206d696e74207a65726f000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76101e0516102205261020051610240526040610220a361020051815250565b602154615a74576101e05160a052600260c05261385d610220612a6e565b6102205161020052610200516138d3576013610220527f63616e6e6f74206465706f736974207a65726f000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516040526138e561022061305d565b61022051610200511115613959576014610240527f657863656564206465706f736974206c696d69740000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b6020615a8660003960005160405233606052306080526102005160a05261397e612d0d565b60125461020051808201828110615a7457905090506012556101e0516040526101c0516060526139ac612ebb565b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d761020051610220526101e051610240526040610220a361020051815250565b604051630a28a47760a05260605160c052602060a0602460bc845afa613a1f573d600060003e3d6000fd5b60203d10615a745760a09050516040516370a0823160e0523061010052602060e0602460fc845afa613a56573d600060003e3d6000fd5b60203d10615a745760e09050518082811882841002189050905060805260405163ba08765260a05260805160c0523060e0523061010052602060a0606460bc6000855af1613aa9573d600060003e3d6000fd5b60203d10615a745760a05050565b61060051613b2557600c610800527f5a45524f204144445245535300000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b612710610680511115613b98576008610800527f6d6178206c6f73730000000000000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b60175415613c4b57610620516101405261068051610160526106a05180610180528060051b806101a0826106c060045afa505050613bd761080061323b565b61080051610640511115613c4b576015610820527f657863656564207769746864726177206c696d697400000000000000000000006108405261082050610820518061084001601f826000031636823750506308c379a06107e052602061080052601f19601f6108205101166044016107fcfd5b6106605161080052600e610620516020526000526040600020546108205261080051613cd7576013610840527f6e6f2073686172657320746f2072656465656d000000000000000000000000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b61080051610820511015613d4b57601d610840527f696e73756666696369656e742073686172657320746f2072656465656d0000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b610620516105e05114613d76576106205160c0526105e05160e0526106605161010052613d766121c9565b6106405161084052601254610860526108605161084051111561440c5760025480610880528060051b600081601f0160051c600a8111615a74578015613dd157905b80600301548160051b6108a00152600101818118613db8575b505050506106a05115613de757600d5415613dea565b60005b15613e0c576106a05180610880528060051b806108a0826106c060045afa5050505b6011546109e052610860516108405103610a00526000610a20526020615a866000396000516370a08231610a605230610a80526020610a606024610a7c845afa613e5b573d600060003e3d6000fd5b60203d10615a7457610a60905051610a4052600061088051600a8111615a7457801561438e57905b8060051b6108a00151610a60526001610a6051602052600052604060002054613f0c576011610a80527f696e616374697665207374726174656779000000000000000000000000000000610aa052610a8050610a805180610aa001601f826000031636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b6001610a6051602052600052604060002060028101905054610a8052610a0051610a805180828118828410021890509050610a2052610a60516307a2d13a610b0052610a605163d905777e610ac05230610ae0526020610ac06024610adc845afa613f7c573d600060003e3d6000fd5b60203d10615a7457610ac0905051610b20526020610b006024610b1c845afa613faa573d600060003e3d6000fd5b60203d10615a7457610b00905051610aa052610a6051604052610a2051606052613fd5610ae0613108565b610ae051610ac052610ac0511561416157610a2051610ac051808203828111615a745790509050610aa051101561406c57610a2051610ac051808203828111615a745790509050610ae052610ac051610aa051808202811583838304141715615a745790509050610ae0518015615a745780820490509050610ac052610aa051610ac051808201828110615a745790509050610a20525b610a2051610ac051808203828111615a745790509050610a205261084051610ac051808203828111615a74579050905061084052610a0051610ac051808203828111615a745790509050610a00526109e051610ac051808203828111615a7457905090506109e052610aa0516140e757610ac05115156140ea565b60005b1561416157610a8051610ac051808203828111615a745790509050610ae052610ae0516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b0052610ae051610b20526040610b00a25b610a2051610aa05180828118828410021890509050610a2052610a205161418757614383565b610a6051604052610a205160605261419d6139f4565b6020615a866000396000516370a08231610b005230610b20526020610b006024610b1c845afa6141d2573d600060003e3d6000fd5b60203d10615a7457610b00905051610ae052610ae051610a4051808203828111615a745790509050610b00526000610b2052610a2051610b00511161423157610a2051610b0051101561426b57610b0051610a205103610b205261426b565b610a8051610b00511161426257610a2051610a2051610b005103808201828110615a745790509050610a205261426b565b610a8051610a20525b61086051610a2051610b2051808203828111615a745790509050808201828110615a7457905090506108605261084051610b2051808203828111615a745790509050610840526109e051610a2051808203828111615a7457905090506109e052610a8051610a2051610ac051808201828110615a745790509050808203828111615a745790509050610b4052610b40516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b6052610b4051610b80526040610b60a26108605161084051116143605761438e565b610ae051610a4052610a0051610a2051808203828111615a745790509050610a00525b600101818118613e83575b50506108405161086051101561440457601c610a60527f696e73756666696369656e742061737365747320696e207661756c7400000000610a8052610a6050610a605180610a8001601f826000031636823750506308c379a0610a20526020610a4052601f19601f610a60510116604401610a3cfd5b6109e0516011555b61084051610640511161442057600061442a565b61270f6106805111155b156144d4576106405161068051808202811583838304141715615a745790509050612710810490506106405161084051808203828111615a74579050905011156144d457600d610880527f746f6f206d756368206c6f7373000000000000000000000000000000000000006108a0526108805061088051806108a001601f826000031636823750506308c379a061084052602061086052601f19601f61088051011660440161085cfd5b61080051604052610620516060526144ea61291e565b6108605161084051808203828111615a7457905090506012556020615a866000396000516040526106005160605261084051608052614527612de9565b61062051610600516105e0517ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db6108405161088052610800516108a0526040610880a461084051815250565b60405130811461458557801515614588565b60005b90506145eb57601f6080527f73747261746567792063616e6e6f74206265207a65726f20616464726573730060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6020615a866000396000516040516338d52e0f606052602060606004607c845afa61461b573d600060003e3d6000fd5b60203d10615a74576060518060a01c615a745760a05260a0905051181561469957600d60c0527f696e76616c69642061737365740000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60016040516020526000526040600020541561470c5760176060527f737472617465677920616c72656164792061637469766500000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6001604051602052600052604060002042815542600182015560006002820155600060038201555060096002541161475a5760025460098111615a7457600181016002556040518160030155505b60016040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca60006060a3565b60016040516020526000526040600020546147f95760136080527f7374726174656779206e6f74206163746976650000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60006080526001604051602052600052604060002060028101905054156148ea5760605161487e57601160a0527f737472617465677920686173206465627400000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b6001604051602052600052604060002060028101905054608052601154608051808203828111615a7457905090506011556040517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d267811600060a05260805160c05260803660e03760c060a0a25b600160405160205260005260406000206000815560006001820155600060028201556000600382015550600060a0526000600254600a8111615a7457801561496e57905b80600301546102005260405161020051146149635760a05160098111615a74576001810160a052610200518160051b60c00152505b60010181811861492e575b505060a051806002558060051b600081601f0160051c600a8111615a745780156149ac57905b8060051b60c001518160030155600101818118614994575b5050505060026040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca6000610200a3565b610180516101a0526001610160516020526000526040600020600281019050546101c05260215415614a115760006101a0525b6101c0516101a05118614a8457601c6101e0527f6e6577206465627420657175616c732063757272656e74206465627400000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101a0516101c05111614e29576001610160516020526000526040600020600381019050546101a0511115614b195760206101e0527f746172676574206465627420686967686572207468616e206d61782064656274610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101605163402d267d6102005230610220526020610200602461021c845afa614b47573d600060003e3d6000fd5b60203d10615a74576102009050516101e0526101e051614bc7576012610200527f6e6f7468696e6720746f206465706f73697400000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101a0516101c051808203828111615a745790509050610200526101e051610200511115614bf8576101e051610200525b6013546102205260125461024052610220516102405111614c79576013610260527f6e6f2066756e647320746f206465706f736974000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6102205161024051036102605261026051610200511115614c9d5761026051610200525b6102005115614e0a576020615a866000396000516040526101605160605261020051608052614cca612c3b565b6020615a866000396000516370a082316102a052306102c05260206102a060246102bc845afa614cff573d600060003e3d6000fd5b60203d10615a74576102a09050516102805261016051636e553f656102a052610200516102c052306102e05260206102a060446102bc6000855af1614d49573d600060003e3d6000fd5b60203d10615a74576102a050506020615a866000396000516370a082316102c052306102e05260206102c060246102dc845afa614d8b573d600060003e3d6000fd5b60203d10615a74576102c09050516102a0526020615a86600039600051604052610160516060526000608052614dbf612c3b565b610280516102a051808203828111615a7457905090506102005260125461020051808203828111615a74579050905060125560115461020051808201828110615a7457905090506011555b6101c05161020051808201828110615a7457905090506101a052615149565b6101a0516101c051036101e052601354610200526012546102205261020051610220516101e051808201828110615a7457905090501015614e88576102205161020051036101e0526101c0516101e0511115614e88576101c0516101e0525b610160516307a2d13a6102a0526101605163d905777e6102605230610280526020610260602461027c845afa614ec3573d600060003e3d6000fd5b60203d10615a74576102609050516102c05260206102a060246102bc845afa614ef1573d600060003e3d6000fd5b60203d10615a74576102a09050516102405261024051614f71576013610260527f6e6f7468696e6720746f207769746864726177000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6101e051610240511015614f8857610240516101e0525b610160516040526101e051606052614fa1610280613108565b6102805161026052610260511561501857601e610280527f73747261746567792068617320756e7265616c69736564206c6f7373657300006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b6020615a866000396000516370a082316102a052306102c05260206102a060246102bc845afa61504d573d600060003e3d6000fd5b60203d10615a74576102a090505161028052610160516040526101e0516060526150756139f4565b6020615a866000396000516370a082316102c052306102e05260206102c060246102dc845afa6150aa573d600060003e3d6000fd5b60203d10615a74576102c09050516102a0526102a05161028051808203828111615a7457905090506101c051808281188284100218905090506102c0526101e0516102c05111156150fe576102c0516101e0525b6012546102c051808201828110615a7457905090506012556011546101e051808203828111615a7457905090506011556101c0516101e051808203828111615a7457905090506101a0525b6101a051600161016051602052600052604060002060028101905055610160517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c0516101e0526101a0516102005260406101e0a26101a051815250565b60016101a0516020526000526040600020546152255760116101c0527f696e6163746976652073747261746567790000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b61522d612a16565b6101a0516370a082316101e052306102005260206101e060246101fc845afa61525b573d600060003e3d6000fd5b60203d10615a74576101e09050516101c0526101a0516307a2d13a610200526101c051610220526020610200602461021c845afa61529e573d600060003e3d6000fd5b60203d10615a74576102009050516101e05260016101a0516020526000526040600020600281019050546102005260403661022037610200516101e051116152f2576101e051610200510361024052615300565b610200516101e05103610220525b608036610260376015546102e0526102e05115615426576102e05163921f8a8f610300526101a05161032052610220516103405261024051610360526040610300606461031c6000855af161535a573d600060003e3d6000fd5b60403d10615a74576103009050805161026052602081015161028052506102605115615426576000610300526020615ac6600039600051635153b199610320526040610320600461033c845afa6153b6573d600060003e3d6000fd5b60403d10615a7457610320518060101c615a745761038052610340518060a01c615a74576103a052610380905080516103005260208101516102c0525060016103005112615426576102605161030051808202811583838304141715615a745790509050612710810490506102a0525b606036610300376102405161026051808201828110615a745790509050156154ee57610300516102405161026051808201828110615a74579050905060a052600260c052615475610360612b45565b61036051808201828110615a7457905090506103005261026051156154ee57610260516102a051808203828111615a74579050905060a052600160c0526154bd610360612b45565b61036051610320526102a051156154ee576102a05160a052600160c0526154e5610360612b45565b61036051610340525b60006103605261028051156155f157610280516020615a866000396000516370a08231610380526102e0516103a0526020610380602461039c845afa615539573d600060003e3d6000fd5b60203d10615a74576103809050516020615a8660003960005163dd62ed3e6103c0526102e0516103e052306104005260206103c060446103dc845afa615584573d600060003e3d6000fd5b60203d10615a74576103c09050518082811882841002189050905080828118828410021890509050610280526020615a866000396000516040526102e051606052306080526102805160a0526155d8612d0d565b60125461028051808201828110615a7457905090506012555b61022051156156415760016101a0516020526000526040600020600281019050805461022051808201828110615a74579050905081555060115461022051808201828110615a7457905090506011555b602254610380526102205161028051808201828110615a7457905090501561566e57610380511515615671565b60005b156156a7576102205161028051808201828110615a74579050905060a0523060c05261569e6103a0612f2b565b6103a051610360525b61024051156156f75760016101a0516020526000526040600020600281019050805461024051808203828111615a74579050905081555060115461024051808203828111615a7457905090506011555b600e3060205260005260406000205461036051808203828111615a7457905090506103a05261030051156157c357610300516103a05161036051808201828110615a7457905090508082811882841002189050905061030052610300516040523060605261576361291e565b6103005161036051808281188284100218905090506103c052610360516103c051808203828111615a745790509050610360526103a051610300516103c051808203828111615a745790509050808203828111615a7457905090506103a0525b61032051156157e257610320516040526102e0516060526157e2612ebb565b610340511561580157610340516040526102c051606052615801612ebb565b6103a05161036051808201828110615a7457905090506103c0526103c051156158fe5760006103e052602354610400524261040051111561586c576103a0516104005142808203828111615a745790509050808202811583838304141715615a7457905090506103e0525b6103e0516103605161038051808202811583838304141715615a745790509050808201828110615a7457905090506103c0518015615a745780820490509050610420526103c05164e8d4a5100081028164e8d4a51000820418615a74579050610420518015615a7457808204905090506024554261042051808201828110615a74579050905060235542602555615904565b60006024555b4260016101a0516020526000526040600020600181019050556101a0517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d2678116102205161042052610240516104405260016101a051602052600052604060002060028101905054610460526103405160a052600160c0526159856103e0612a6e565b6103e051610480526103405161032051808201828110615a74579050905060a052600160c0526159b6610400612a6e565b610400516104a052610280516104c05260c0610420a261022051815261024051602082015250565b601860405160205260005260406000205460605116156159ff576001615a11565b60196060516020526000526040600020545b615a7257600b6080527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b600080fda165767970657283000307000b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000e9e8c89c8fc7e8b8f23425688eb68987231178e5\"", + " }", + "}", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : \"1\",\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_callConstructor\",\n \"params\" : [\n \"0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB\",\n \"0x6020615c2a6000396000518060a01c615c25576040526020615c4a6000396000516040602082615c2a0160003960005111615c2557602081615c2a0160003960005180606052602082018181615c2a016080395050506020615c6a6000396000516020602082615c2a0160003960005111615c2557602081615c2a016000396000518060c05260208201602081615c2a0160003960005160e0525050506020615c8a6000396000518060a01c615c25576101005234615c2557604051615a865260405163313ce567610120526020610120600461013c845afa6100e7573d600060003e3d6000fd5b60203d10615c2557610120518060081c615c255761016052610160905051615aa65260ff615aa65111615c255733615ac6526301e185586020615caa60003960005111615c25576020615caa60003960005160225560605180601c55600081601f0160051c60028111615c2557801561017457905b8060051b6080015181601d015560010181811861015c575b50505060c05180601f5560e0516020555061010051601a55615a8661019e61000039615ae6610000f36003361161000c57612165565b60003560e01c34615a74576371da8a8d811861007a5760243610615a74576004358060a01c615a745760c0523360405260086060526100496159de565b60c05160155560c0517f28709a2dab2a5d5e8688e96159011151c51644ab21839a8a45b449634d7c8b2b600060e0a2005b632d9caa4e81186102585760443610615a7457600435600401600a813511615a745780358060c052600081600a8111615a745780156100da57905b8060051b6020850101358060a01c615a74578160051b60e001526001018181186100b5575b505050503360405260106060526100ef6159de565b600060c051600a8111615a7457801561019757905b8060051b60e001516102205260016102205160205260005260406000205461018c576009610240527f21696e61637469766500000000000000000000000000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b600101818118610104575b505060c051806002558060051b600081601f0160051c600a8111615a745780156101d557905b8060051b60e0015181600301556001018181186101bd575b505050507f0bc0cb8c5ccee13e6a2fd26a699f57ad7ff6e454e6aae97ec41cd2eb9ebd63a5602080610220528061022001600060c0518083528060051b600082600a8111615a7457801561024257905b8060051b60e001518160051b602088010152600101818118610225575b50508201602001915050905081019050610220a1005b6329c8a33b81186102be5760243610615a74576004358060011c615a745760c05233604052601060605261028a6159de565b60c051600d557f1f88e73ebc721f227812938fe07a069ec1f7136aafacb397ed460bd15dee13f160c05160e052602060e0a1005b636fe01d1e81186103835760243610615a7457602154615a7457336040526101006060526102ea6159de565b6016541561034f57600c60c0527f7573696e67206d6f64756c65000000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd6260043560c052602060c0a1005b63bb43546681186104565760243610615a74576004358060a01c615a745760c052602154615a7457336040526101006060526103bd6159de565b601454191561042557601360e0527f7573696e67206465706f736974206c696d6974000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60c05160165560c0517f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060e0a2005b637b67589481186104ba5760243610615a74576004358060a01c615a745760c052336040526102006060526104896159de565b60c05160175560c0517fce6e3f8beda82a13c441d76efd4a6335760f219f38c60502e6680060874e109d600060e0a2005b63bdd81c0181186105135760243610615a7457336040526104006060526104df6159de565b6004356013557f01a4494beed88920b88742cc58f2744e198f55ff192635a1fbabc6be8ffade8160043560c052602060c0a1005b63df69b22a81186106075760243610615a7457336040526108006060526105386159de565b6301e1855860043511156105a357601b60c0527f70726f66697420756e6c6f636b2074696d6520746f6f206c6f6e67000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356105d357600e30602052600052604060002054604052306060526105c861291e565b600060245560006023555b6004356022557ff361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a60043560c052602060c0a1005b632cf7fd8581186106815760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a745760605160186040516020526000526040600020556060516040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63a97cefa2811861071b5760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a7457606051601860405160205260005260406000205417601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63e2bf56dd81186107b95760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a7457606051613fff18601860405160205260005260406000205416601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b630b10dd8081186108235760243610615a745760043580600e1c615a7457604052601a543318615a74576001601960405160205260005260406000205560016040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63d52fe498811861088d5760243610615a745760043580600e1c615a7457604052601a543318615a74576000601960405160205260005260406000205560026040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63ef54cefd81186108bf5760243610615a74576004358060a01c615a7457604052601a543318615a7457604051601b55005b63f776bf1f811861090d5760043610615a7457601b543318615a745733601a556000601b55337fce93baa0b608a7d420822b6b90cfcccb70574363ba4fd26ef5ac17dd465016c460006040a2005b63bf86d690811861092c5760043610615a745760215460405260206040f35b63d9a0e97a811861094f5760043610615a7457602061094b6080612981565b6080f35b6399530b0681186109955760043610615a745760206020615aa6600039600051604d8111615a745780600a0a905060a052600160c052610990610140612a6e565b610140f35b63a9bbf1cc81186109ff5760043610615a74576020806040528060400160006002548083528060051b600082600a8111615a745780156109eb57905b80600301548160051b6020880101526001018181186109d1575b505082016020019150509050810190506040f35b636ec2b8d48118610a605760243610615a74576004358060a01c615a74576104e052600054600214615a74576002600055336040526020606052610a416159de565b60406104e0516101a052610a566105006151a9565b6105006003600055f35b63e5e918188118610e305760443610615a74576004358060a01c615a74576101a052600054600214615a7457600260005533604052611000606052610aa36159de565b60016101a051602052600052604060002054610b1f57600a6101c0527f6e6f7420616374697665000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60016101a0516020526000526040600020600281019050546101c0526024356101e0526101c051610bb057600e610200527f6e6f7468696e6720746f206275790000000000000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101e051610c1e576013610200527f6e6f7468696e6720746f206275792077697468000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101c0516101e0511115610c35576101c0516101e0525b6101a0516370a082316102205230610240526020610220602461023c845afa610c63573d600060003e3d6000fd5b60203d10615a74576102209050516101e051808202811583838304141715615a7457905090506101c0518015615a7457808204905090506102005261020051610d0c57600f610220527f63616e6e6f7420627579207a65726f00000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615a8660003960005160405233606052306080526101e05160a052610d31612d0d565b60016101a051602052600052604060002060028101905080546101e051808203828111615a7457905090508155506011546101e051808203828111615a7457905090506011556012546101e051808201828110615a7457905090506012556101a0517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c051610220526101c0516101e051808203828111615a745790509050610240526040610220a26101a0516040523360605261020051608052610df6612de9565b6101a0517fe94e7f88819f66c19b097748cb754149f63b1a176ed425dee1f1ee933e6d09b06101e051610220526020610220a26003600055005b63de7aeb418118610e745760243610615a74576004358060a01c615a745761010052336040526001606052610e636159de565b61010051604052610e72614573565b005b63577db3168118610ebd5760243610615a74576004358060a01c615a745761022052336040526002606052610ea76159de565b610220516040526000606052610ebb614787565b005b63fd129e638118610f065760243610615a74576004358060a01c615a745761022052336040526004606052610ef06159de565b610220516040526001606052610f04614787565b005b63b9ddcd688118610ff85760443610615a74576004358060a01c615a745760c052336040526080606052610f386159de565b600160c051602052600052604060002054610fac57601160e0527f696e6163746976652073747261746567790000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b602435600160c05160205260005260406000206003810190505560c051337fb3eef2123fec1523a6bbc90aceb203000154c1a4974335fe06b544c7534d4b8960243560e052602060e0a3005b630aeebf5581186110605760443610615a74576004358060a01c615a745761030052600054600214615a7457600260005533604052604060605261103a6159de565b60206103005161016052602435610180526110566103206149de565b6103206003600055f35b6336a5545081186111405760043610615a7457336040526120006060526110856159de565b602154615a74576001602155601654156110c757600060165560007f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060c0a25b60006014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd62600060c052602060c0a16040601833602052600052604060002054176018336020526000526040600020557f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf8600060c0a1005b636e553f65811861119c5760443610615a74576024358060a01c615a745761026052600054600214615a745760026000556020336101a052610260516101c0526004356101e05261119261028061369e565b6102806003600055f35b6394bf804d81186111f85760443610615a74576024358060a01c615a745761028052600054600214615a745760026000556020336101a052610280516101c0526004356101e0526111ee6102a061383f565b6102a06003600055f35b63b460af9481186112175760643610615a7457604036610be0376112aa565b63a318c1a4811861123c5760843610615a7457606435610be0526000610c00526112aa565b63d81a09f681186113585760c43610615a7457606435610be052608435600401600a813511615a7457803580610c0052600081600a8111615a745780156112a557905b8060051b6020850101358060a01c615a74578160051b610c20015260010181811861127f575b505050505b6024358060a01c615a7457610ba0526044358060a01c615a7457610bc052600054600214615a7457600260005560043560a052600260c0526112ed610d80612b45565b610d8051610d6052336105e052610ba05161060052610bc0516106205260043561064052610d605161066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa505050611348610d80613ab7565b610d80506020610d606003600055f35b63ba087652811861137d5760643610615a7457612710610be0526000610c0052611410565b639f40a7b381186113a25760843610615a7457606435610be0526000610c0052611410565b6306580f2d81186114ba5760c43610615a7457606435610be052608435600401600a813511615a7457803580610c0052600081600a8111615a7457801561140b57905b8060051b6020850101358060a01c615a74578160051b610c2001526001018181186113e5575b505050505b6024358060a01c615a7457610ba0526044358060a01c615a7457610bc052600054600214615a7457600260005560043560a052600160c052611453610d80612a6e565b610d8051610d60526020336105e052610ba05161060052610bc05161062052610d60516106405260043561066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa5050506114b0610d80613ab7565b610d806003600055f35b63095ea7b381186114fb5760443610615a74576004358060a01c615a745760c05260203360405260c0516060526024356080526114f760e061216b565b60e0f35b63a9059cbb81186115605760443610615a74576004358060a01c615a7457610100526101005130811461153057801515611533565b60005b905015615a745733604052610100516060526024356080526115536122b7565b6001610120526020610120f35b6323b872dd81186115d75760643610615a74576004358060a01c615a74576101e0526024358060a01c615a745761020052610200513081146115a4578015156115a7565b60005b905015615a745760206101e05161018052610200516101a0526044356101c0526115d26102206123a6565b610220f35b6339509351811861161a5760443610615a74576004358060a01c615a745760e05260203360405260e0516060526024356080526116156101006123e5565b610100f35b63a457c2d7811861165d5760443610615a74576004358060a01c615a745760e05260203360405260e051606052602435608052611658610100612479565b610100f35b63d505accf81186116d75760e43610615a74576004358060a01c615a7457610460526024358060a01c615a7457610480526084358060081c615a74576104a05260206104605161018052610480516101a052604060446101c0376104a05161020052604060a4610220376116d26104c06125e7565b6104c0f35b6370a0823181186117545760243610615a74576004358060a01c615a7457608052306080511861173957600e60805160205260005260406000205461171c60a0612981565b60a051808203828111615a74579050905060c052602060c0611752565b600e60805160205260005260406000205460a052602060a05bf35b6318160ddd81186117775760043610615a7457602061177360a06129f3565b60a0f35b6338d52e0f811861179e5760043610615a74576020615a8660003960005160405260206040f35b63313ce56781186117cd5760043610615a74576020615aa66000396000518060081c615a745760405260206040f35b6301e1d11481186117f05760043610615a745760206117ec6040612a55565b6040f35b639aa7df94811861180f5760043610615a745760125460405260206040f35b63fc7b9c18811861182e5760043610615a745760115460405260206040f35b63c6e6f592811861185e5760243610615a7457602060043560a052600160c052611859610160612b45565b610160f35b63ef8b30f7811861188e5760243610615a7457602060043560a052600160c052611889610160612b45565b610160f35b63b3d7f6b981186118be5760243610615a7457602060043560a052600260c0526118b9610140612a6e565b610140f35b6307a2d13a81186118ee5760243610615a7457602060043560a052600160c0526118e9610140612a6e565b610140f35b63402d267d81186119255760243610615a74576004358060a01c615a745760c052602060c05160405261192160e061305d565b60e0f35b63c63d75b6811861197f5760243610615a74576004358060a01c615a745761016052610160516040526119596101a061305d565b6101a0516101805260206101805160a052600160c05261197a6101a0612b45565b6101a0f35b63ce96cb77811861199e5760243610615a745760403661060037611a31565b6385b6875681186119c35760443610615a745760243561060052600061062052611a31565b6365cb67658118611a7e5760843610615a745760243561060052604435600401600a813511615a745780358061062052600081600a8111615a74578015611a2c57905b8060051b6020850101358060a01c615a74578160051b6106400152600101818118611a06575b505050505b6004358060a01c615a74576105e05260206105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611a7961078061323b565b610780f35b63d905777e8118611aa35760243610615a745761271061060052600061062052611b36565b634abe41378118611ac85760443610615a745760243561060052600061062052611b36565b6334b5fab68118611bd15760843610615a745760243561060052604435600401600a813511615a745780358061062052600081600a8111615a74578015611b3157905b8060051b6020850101358060a01c615a74578160051b6106400152600101818118611b0b575b505050505b6004358060a01c615a74576105e0526105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611b7c61078061323b565b610780516107c05260026107e0526107c05160a0526107e05160c052611ba36107a0612b45565b6107a051600e6105e05160205260005260406000205480828118828410021890509050610800526020610800f35b630a28a4778118611c015760243610615a7457602060043560a052600260c052611bfc610160612b45565b610160f35b634cdad5068118611c315760243610615a7457602060043560a052600160c052611c2c610140612a6e565b610140f35b63258294108118611cb95760043610615a745760208060805260056040527f332e302e3100000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6366d3ae578118611d1a5760443610615a74576004358060a01c615a74576101205260243560016101205160205260005260406000206002810190505410615a7457602061012051604052602435606052611d15610140613108565b610140f35b630952864e8118611d395760043610615a745760225460405260206040f35b632d6326928118611d585760043610615a745760235460405260206040f35b635141eebb8118611d775760043610615a745760245460405260206040f35b638afca8f08118611d965760043610615a745760255460405260206040f35b633644e5158118611dbb5760043610615a74576020611db661018061250d565b610180f35b632dd310008118611de25760043610615a74576020615ac660003960005160405260206040f35b6339ebf8238118611e375760243610615a74576004358060a01c615a74576040526001604051602052600052604060002080546060526001810154608052600281015460a052600381015460c0525060806060f35b638bf03b9e8118611e645760243610615a7457600435600254811015615a74576003015460405260206040f35b631e56558d8118611e835760043610615a7457600d5460405260206040f35b63dd62ed3e8118611edd5760443610615a74576004358060a01c615a74576040526024358060a01c615a7457606052600f604051602052600052604060002080606051602052600052604060002090505460805260206080f35b633940e9ee8118611efc5760043610615a745760105460405260206040f35b63356d64098118611f1b5760043610615a745760135460405260206040f35b63e46a57978118611f3a5760043610615a745760145460405260206040f35b634fb3ccc58118611f595760043610615a745760155460405260206040f35b6361c2ccf48118611f785760043610615a745760165460405260206040f35b63f5ba68f38118611f975760043610615a745760175460405260206040f35b63993746428118611fd25760243610615a74576004358060a01c615a7457604052601860405160205260005260406000205460605260206060f35b63f3789e45811861200d5760243610615a745760043580600e1c615a7457604052601960405160205260005260406000205460605260206060f35b6379b98917811861202c5760043610615a7457601a5460405260206040f35b639a98f418811861204b5760043610615a7457601b5460405260206040f35b6306fdde0381186120d05760043610615a745760208060405280604001601c5480825260208201600082601f0160051c60028111615a745780156120a257905b80601d01548160051b84015260010181811861208b575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186121285760043610615a745760208060405280604001601f5480825260208201602054815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b637ecebe0081186121635760243610615a74576004358060a01c615a7457604052602660405160205260005260406000205460605260206060f35b505b60006000fd5b608051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a36001815250565b600f60c05160205260005260406000208060e0516020526000526040600020905054610120527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61012051146122b5576101005161012051101561228d576016610140527f696e73756666696369656e7420616c6c6f77616e6365000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b60c05160405260e0516060526101005161012051036080526122b061014061216b565b610140505b565b600e60405160205260005260406000205460a05260805160a051101561233457601260c0527f696e73756666696369656e742066756e6473000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60805160a05103600e604051602052600052604060002055608051600e60605160205260005260406000205401600e6060516020526000526040600020556060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160c052602060c0a3565b6101805160c0523360e0526101c051610100526123c16121c9565b610180516040526101a0516060526101c0516080526123de6122b7565b6001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808201828110615a74579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808203828111615a74579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8160e00152602081019050600b6040527f596561726e205661756c7400000000000000000000000000000000000000000060605260408051602082012090508160e0015260208101905060056080527f332e302e3100000000000000000000000000000000000000000000000000000060a05260808051602082012090508160e00152602081019050468160e00152602081019050308160e001526020810190508060c05260c09050805160208201209050815250565b6101805161265557600d610260527f696e76616c6964206f776e6572000000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b426101e05110156126c657600e610260527f7065726d697420657870697265640000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60266101805160205260005260406000205461026052600060026102a0527f19010000000000000000000000000000000000000000000000000000000000006102c0526102a080516020820183610400018151815250508083019250505061272f6102e061250d565b6102e05181610400015260208101905060007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9816103200152602081019050610180518161032001526020810190506101a0518161032001526020810190506101c051816103200152602081019050610260518161032001526020810190506101e05181610320015260208101905080610300526103009050805160208201209050816104000152602081019050806103e0526103e090508051602082012090506102805261018051610280516102a052610200516102c052610220516102e05261024051610300526020600060806102a060015afa506000511815612895576011610340527f696e76616c6964207369676e61747572650000000000000000000000000000006103605261034050610340518061036001601f826000031636823750506308c379a061030052602061032052601f19601f61034051011660440161031cfd5b6101c051600f610180516020526000526040600020806101a05160205260005260406000209050556102605160018101818110615a745790506026610180516020526000526040600020556101a051610180517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256101c0516102a05260206102a0a36001815250565b600e60605160205260005260406000208054604051808203828111615a7457905090508155506040516010540360105560006060517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b602354604052600060605242604051116129b457604051156129eb57600e306020526000526040600020546060526129eb565b60245442602554808203828111615a745790509050808202811583838304141715615a74579050905064e8d4a51000810490506060525b606051815250565b601054612a006080612981565b608051808203828111615a745790509050815250565b612a2060c0612981565b60c05160a05260a051612a3257612a53565b426023541115612a4157426025555b60a05160405230606052612a5361291e565b565b601254601154808201828110615a745790509050815250565b60a05119612a7d576001612a82565b60a051155b15612a925760a051815250612b43565b612a9d6101006129f3565b6101005160e05260e051612ab65760a051815250612b43565b60a051612ac4610120612a55565b61012051808202811583838304141715615a745790509050610100526101005160e0518015615a74578082049050905061012052600260c05118612b1d576101005160e0518015615a7457808206905090501515612b20565b60005b15612b3b576101205160018101818110615a74579050610120525b610120518152505b565b60a05119612b54576001612b59565b60a051155b15612b695760a051815250612c39565b612b746101006129f3565b6101005160e052612b86610120612a55565b610120516101005261010051612bb65760e051612bac5760a051815250612c3956612bb6565b6000815250612c39565b60a05160e051808202811583838304141715615a7457905090506101205261012051610100518015615a74578082049050905061014052600260c05118612c135761012051610100518015615a7457808206905090501515612c16565b60005b15612c31576101405160018101818110615a74579050610140525b610140518152505b565b60405163095ea7b360a05260605160c05260805160e052602060a0604460bc6000855af1612c6e573d600060003e3d6000fd5b3d612c8557803b15615a7457600161010052612c9d565b60203d10615a745760a0518060011c615a7457610100525b610100905051612d0b57600f610120527f617070726f76616c206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b6040516323b872dd60c05260605160e0526080516101005260a05161012052602060c0606460dc6000855af1612d48573d600060003e3d6000fd5b3d612d5f57803b15615a7457600161014052612d77565b60203d10615a745760c0518060011c615a7457610140525b610140905051612de757600f610160527f7472616e73666572206661696c656400000000000000000000000000000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b565b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc6000855af1612e1c573d600060003e3d6000fd5b3d612e3357803b15615a7457600161010052612e4b565b60203d10615a745760a0518060011c615a7457610100525b610100905051612eb957600f610120527f7472616e73666572206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b604051600e60605160205260005260406000205401600e606051602052600052604060002055601054604051808201828110615a74579050905060105560605160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b612f366101006129f3565b6101005160e052612f48610120612a55565b610120516101005260006101205260e051612f695760a0516101205261302c565b60a0516101005111612feb5760a051610100511161302c57600f610140527f616d6f756e7420746f6f206869676800000000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd61302c565b60a05160e051808202811583838304141715615a7457905090506101005160a051808203828111615a7457905090508015615a745780820490509050610120525b6101205161303e57600081525061305b565b6101205160405260c051606052613053612ebb565b610120518152505b565b6040518061306c576001613071565b308118155b905015613082576000815250613106565b601654606052606051156130d05760605163320704ed60805260405160a052602060806024609c845afa6130bb573d600060003e3d6000fd5b60203d10615a74576080905051815250613106565b6130da60a0612a55565b60a05160805260145460a05260a051608051106130fb576000815250613106565b60805160a051038152505b565b60016040516020526000526040600020600281019050546080526040516370a0823160c0523060e052602060c0602460dc845afa61314b573d600060003e3d6000fd5b60203d10615a745760c090505160a0526040516307a2d13a60e05260a05161010052602060e0602460fc845afa613187573d600060003e3d6000fd5b60203d10615a745760e090505160c05260805160c05110156131ac57608051156131af565b60015b156131be576000815250613239565b60605160c051808202811583838304141715615a74579050905060e05260605160e0516080518015615a745780820490509050808203828111615a7457905090506101005260e0516080518015615a74578082069050905015613231576101005160018101818110615a74579050610100525b610100518152505b565b600e6101405160205260005260406000205460a052600160c052613260610300612a6e565b610300516102e052601754610300526103005115613333576103005163c36a0eee61032052606061014051610340526101605161036052806103805280610340016000610180518083528060051b600082600a8111615a745780156132df57905b8060051b6101a001518160051b6020880101526001018181186132c1575b5050820160200191505090508101505060206103206101c461033c845afa61330c573d600060003e3d6000fd5b60203d10615a74576103209050516102e0518082811882841002189050905081525061369c565b60125461032052610320516102e051111561369457610320516103405260006103605260025480610380528060051b600081601f0160051c600a8111615a7457801561339457905b80600301548160051b6103a0015260010181811861337b575b5050505061018051156133aa57600d54156133ad565b60005b156133cf576101805180610380528060051b806103a0826101a060045afa5050505b600061038051600a8111615a7457801561368957905b8060051b6103a001516104e05260016104e05160205260005260406000205461346e576011610500527f696e6163746976652073747261746567790000000000000000000000000000006105205261050050610500518061052001601f826000031636823750506308c379a06104c05260206104e052601f19601f6105005101166044016104dcfd5b6102e05161034051808203828111615a74579050905060016104e05160205260005260406000206002810190505480828118828410021890509050610500526104e051604052610500516060526134c6610540613108565b61054051610520526104e0516307a2d13a6105a0526104e05163d905777e6105605230610580526020610560602461057c845afa613509573d600060003e3d6000fd5b60203d10615a74576105609050516105c05260206105a060246105bc845afa613537573d600060003e3d6000fd5b60203d10615a74576105a0905051610540526105005161052051808203828111615a7457905090506105405110156135b5576105205161054051808202811583838304141715615a745790509050610500518015615a745780820490509050610520526105405161052051808201828110615a745790509050610500525b610500516135c25761367e565b61052051156135d95761270f6101605111156135dc565b60005b15613637576103405161050051808201828110615a74579050905061016051808202811583838304141715615a745790509050612710810490506103605161052051808201828110615a745790509050111561363757613689565b6103405161050051808201828110615a745790509050610340526102e051610340511061366357613689565b6103605161052051808201828110615a745790509050610360525b6001018181186133e5575b5050610340516102e0525b6102e0518152505b565b602154615a74576101c0516040526136b761020061305d565b610200516101e051111561372b576014610220527f657863656564206465706f736974206c696d69740000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615a8660003960005160405233606052306080526101e05160a052613750612d0d565b6012546101e051808201828110615a7457905090506012556101e05160a0526101c05160c052613781610220612f2b565b6102205161020052610200516137f7576010610220527f63616e6e6f74206d696e74207a65726f000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76101e0516102205261020051610240526040610220a361020051815250565b602154615a74576101e05160a052600260c05261385d610220612a6e565b6102205161020052610200516138d3576013610220527f63616e6e6f74206465706f736974207a65726f000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516040526138e561022061305d565b61022051610200511115613959576014610240527f657863656564206465706f736974206c696d69740000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b6020615a8660003960005160405233606052306080526102005160a05261397e612d0d565b60125461020051808201828110615a7457905090506012556101e0516040526101c0516060526139ac612ebb565b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d761020051610220526101e051610240526040610220a361020051815250565b604051630a28a47760a05260605160c052602060a0602460bc845afa613a1f573d600060003e3d6000fd5b60203d10615a745760a09050516040516370a0823160e0523061010052602060e0602460fc845afa613a56573d600060003e3d6000fd5b60203d10615a745760e09050518082811882841002189050905060805260405163ba08765260a05260805160c0523060e0523061010052602060a0606460bc6000855af1613aa9573d600060003e3d6000fd5b60203d10615a745760a05050565b61060051613b2557600c610800527f5a45524f204144445245535300000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b612710610680511115613b98576008610800527f6d6178206c6f73730000000000000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b60175415613c4b57610620516101405261068051610160526106a05180610180528060051b806101a0826106c060045afa505050613bd761080061323b565b61080051610640511115613c4b576015610820527f657863656564207769746864726177206c696d697400000000000000000000006108405261082050610820518061084001601f826000031636823750506308c379a06107e052602061080052601f19601f6108205101166044016107fcfd5b6106605161080052600e610620516020526000526040600020546108205261080051613cd7576013610840527f6e6f2073686172657320746f2072656465656d000000000000000000000000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b61080051610820511015613d4b57601d610840527f696e73756666696369656e742073686172657320746f2072656465656d0000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b610620516105e05114613d76576106205160c0526105e05160e0526106605161010052613d766121c9565b6106405161084052601254610860526108605161084051111561440c5760025480610880528060051b600081601f0160051c600a8111615a74578015613dd157905b80600301548160051b6108a00152600101818118613db8575b505050506106a05115613de757600d5415613dea565b60005b15613e0c576106a05180610880528060051b806108a0826106c060045afa5050505b6011546109e052610860516108405103610a00526000610a20526020615a866000396000516370a08231610a605230610a80526020610a606024610a7c845afa613e5b573d600060003e3d6000fd5b60203d10615a7457610a60905051610a4052600061088051600a8111615a7457801561438e57905b8060051b6108a00151610a60526001610a6051602052600052604060002054613f0c576011610a80527f696e616374697665207374726174656779000000000000000000000000000000610aa052610a8050610a805180610aa001601f826000031636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b6001610a6051602052600052604060002060028101905054610a8052610a0051610a805180828118828410021890509050610a2052610a60516307a2d13a610b0052610a605163d905777e610ac05230610ae0526020610ac06024610adc845afa613f7c573d600060003e3d6000fd5b60203d10615a7457610ac0905051610b20526020610b006024610b1c845afa613faa573d600060003e3d6000fd5b60203d10615a7457610b00905051610aa052610a6051604052610a2051606052613fd5610ae0613108565b610ae051610ac052610ac0511561416157610a2051610ac051808203828111615a745790509050610aa051101561406c57610a2051610ac051808203828111615a745790509050610ae052610ac051610aa051808202811583838304141715615a745790509050610ae0518015615a745780820490509050610ac052610aa051610ac051808201828110615a745790509050610a20525b610a2051610ac051808203828111615a745790509050610a205261084051610ac051808203828111615a74579050905061084052610a0051610ac051808203828111615a745790509050610a00526109e051610ac051808203828111615a7457905090506109e052610aa0516140e757610ac05115156140ea565b60005b1561416157610a8051610ac051808203828111615a745790509050610ae052610ae0516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b0052610ae051610b20526040610b00a25b610a2051610aa05180828118828410021890509050610a2052610a205161418757614383565b610a6051604052610a205160605261419d6139f4565b6020615a866000396000516370a08231610b005230610b20526020610b006024610b1c845afa6141d2573d600060003e3d6000fd5b60203d10615a7457610b00905051610ae052610ae051610a4051808203828111615a745790509050610b00526000610b2052610a2051610b00511161423157610a2051610b0051101561426b57610b0051610a205103610b205261426b565b610a8051610b00511161426257610a2051610a2051610b005103808201828110615a745790509050610a205261426b565b610a8051610a20525b61086051610a2051610b2051808203828111615a745790509050808201828110615a7457905090506108605261084051610b2051808203828111615a745790509050610840526109e051610a2051808203828111615a7457905090506109e052610a8051610a2051610ac051808201828110615a745790509050808203828111615a745790509050610b4052610b40516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b6052610b4051610b80526040610b60a26108605161084051116143605761438e565b610ae051610a4052610a0051610a2051808203828111615a745790509050610a00525b600101818118613e83575b50506108405161086051101561440457601c610a60527f696e73756666696369656e742061737365747320696e207661756c7400000000610a8052610a6050610a605180610a8001601f826000031636823750506308c379a0610a20526020610a4052601f19601f610a60510116604401610a3cfd5b6109e0516011555b61084051610640511161442057600061442a565b61270f6106805111155b156144d4576106405161068051808202811583838304141715615a745790509050612710810490506106405161084051808203828111615a74579050905011156144d457600d610880527f746f6f206d756368206c6f7373000000000000000000000000000000000000006108a0526108805061088051806108a001601f826000031636823750506308c379a061084052602061086052601f19601f61088051011660440161085cfd5b61080051604052610620516060526144ea61291e565b6108605161084051808203828111615a7457905090506012556020615a866000396000516040526106005160605261084051608052614527612de9565b61062051610600516105e0517ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db6108405161088052610800516108a0526040610880a461084051815250565b60405130811461458557801515614588565b60005b90506145eb57601f6080527f73747261746567792063616e6e6f74206265207a65726f20616464726573730060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6020615a866000396000516040516338d52e0f606052602060606004607c845afa61461b573d600060003e3d6000fd5b60203d10615a74576060518060a01c615a745760a05260a0905051181561469957600d60c0527f696e76616c69642061737365740000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60016040516020526000526040600020541561470c5760176060527f737472617465677920616c72656164792061637469766500000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6001604051602052600052604060002042815542600182015560006002820155600060038201555060096002541161475a5760025460098111615a7457600181016002556040518160030155505b60016040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca60006060a3565b60016040516020526000526040600020546147f95760136080527f7374726174656779206e6f74206163746976650000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60006080526001604051602052600052604060002060028101905054156148ea5760605161487e57601160a0527f737472617465677920686173206465627400000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b6001604051602052600052604060002060028101905054608052601154608051808203828111615a7457905090506011556040517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d267811600060a05260805160c05260803660e03760c060a0a25b600160405160205260005260406000206000815560006001820155600060028201556000600382015550600060a0526000600254600a8111615a7457801561496e57905b80600301546102005260405161020051146149635760a05160098111615a74576001810160a052610200518160051b60c00152505b60010181811861492e575b505060a051806002558060051b600081601f0160051c600a8111615a745780156149ac57905b8060051b60c001518160030155600101818118614994575b5050505060026040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca6000610200a3565b610180516101a0526001610160516020526000526040600020600281019050546101c05260215415614a115760006101a0525b6101c0516101a05118614a8457601c6101e0527f6e6577206465627420657175616c732063757272656e74206465627400000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101a0516101c05111614e29576001610160516020526000526040600020600381019050546101a0511115614b195760206101e0527f746172676574206465627420686967686572207468616e206d61782064656274610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101605163402d267d6102005230610220526020610200602461021c845afa614b47573d600060003e3d6000fd5b60203d10615a74576102009050516101e0526101e051614bc7576012610200527f6e6f7468696e6720746f206465706f73697400000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101a0516101c051808203828111615a745790509050610200526101e051610200511115614bf8576101e051610200525b6013546102205260125461024052610220516102405111614c79576013610260527f6e6f2066756e647320746f206465706f736974000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6102205161024051036102605261026051610200511115614c9d5761026051610200525b6102005115614e0a576020615a866000396000516040526101605160605261020051608052614cca612c3b565b6020615a866000396000516370a082316102a052306102c05260206102a060246102bc845afa614cff573d600060003e3d6000fd5b60203d10615a74576102a09050516102805261016051636e553f656102a052610200516102c052306102e05260206102a060446102bc6000855af1614d49573d600060003e3d6000fd5b60203d10615a74576102a050506020615a866000396000516370a082316102c052306102e05260206102c060246102dc845afa614d8b573d600060003e3d6000fd5b60203d10615a74576102c09050516102a0526020615a86600039600051604052610160516060526000608052614dbf612c3b565b610280516102a051808203828111615a7457905090506102005260125461020051808203828111615a74579050905060125560115461020051808201828110615a7457905090506011555b6101c05161020051808201828110615a7457905090506101a052615149565b6101a0516101c051036101e052601354610200526012546102205261020051610220516101e051808201828110615a7457905090501015614e88576102205161020051036101e0526101c0516101e0511115614e88576101c0516101e0525b610160516307a2d13a6102a0526101605163d905777e6102605230610280526020610260602461027c845afa614ec3573d600060003e3d6000fd5b60203d10615a74576102609050516102c05260206102a060246102bc845afa614ef1573d600060003e3d6000fd5b60203d10615a74576102a09050516102405261024051614f71576013610260527f6e6f7468696e6720746f207769746864726177000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6101e051610240511015614f8857610240516101e0525b610160516040526101e051606052614fa1610280613108565b6102805161026052610260511561501857601e610280527f73747261746567792068617320756e7265616c69736564206c6f7373657300006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b6020615a866000396000516370a082316102a052306102c05260206102a060246102bc845afa61504d573d600060003e3d6000fd5b60203d10615a74576102a090505161028052610160516040526101e0516060526150756139f4565b6020615a866000396000516370a082316102c052306102e05260206102c060246102dc845afa6150aa573d600060003e3d6000fd5b60203d10615a74576102c09050516102a0526102a05161028051808203828111615a7457905090506101c051808281188284100218905090506102c0526101e0516102c05111156150fe576102c0516101e0525b6012546102c051808201828110615a7457905090506012556011546101e051808203828111615a7457905090506011556101c0516101e051808203828111615a7457905090506101a0525b6101a051600161016051602052600052604060002060028101905055610160517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c0516101e0526101a0516102005260406101e0a26101a051815250565b60016101a0516020526000526040600020546152255760116101c0527f696e6163746976652073747261746567790000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b61522d612a16565b6101a0516370a082316101e052306102005260206101e060246101fc845afa61525b573d600060003e3d6000fd5b60203d10615a74576101e09050516101c0526101a0516307a2d13a610200526101c051610220526020610200602461021c845afa61529e573d600060003e3d6000fd5b60203d10615a74576102009050516101e05260016101a0516020526000526040600020600281019050546102005260403661022037610200516101e051116152f2576101e051610200510361024052615300565b610200516101e05103610220525b608036610260376015546102e0526102e05115615426576102e05163921f8a8f610300526101a05161032052610220516103405261024051610360526040610300606461031c6000855af161535a573d600060003e3d6000fd5b60403d10615a74576103009050805161026052602081015161028052506102605115615426576000610300526020615ac6600039600051635153b199610320526040610320600461033c845afa6153b6573d600060003e3d6000fd5b60403d10615a7457610320518060101c615a745761038052610340518060a01c615a74576103a052610380905080516103005260208101516102c0525060016103005112615426576102605161030051808202811583838304141715615a745790509050612710810490506102a0525b606036610300376102405161026051808201828110615a745790509050156154ee57610300516102405161026051808201828110615a74579050905060a052600260c052615475610360612b45565b61036051808201828110615a7457905090506103005261026051156154ee57610260516102a051808203828111615a74579050905060a052600160c0526154bd610360612b45565b61036051610320526102a051156154ee576102a05160a052600160c0526154e5610360612b45565b61036051610340525b60006103605261028051156155f157610280516020615a866000396000516370a08231610380526102e0516103a0526020610380602461039c845afa615539573d600060003e3d6000fd5b60203d10615a74576103809050516020615a8660003960005163dd62ed3e6103c0526102e0516103e052306104005260206103c060446103dc845afa615584573d600060003e3d6000fd5b60203d10615a74576103c09050518082811882841002189050905080828118828410021890509050610280526020615a866000396000516040526102e051606052306080526102805160a0526155d8612d0d565b60125461028051808201828110615a7457905090506012555b61022051156156415760016101a0516020526000526040600020600281019050805461022051808201828110615a74579050905081555060115461022051808201828110615a7457905090506011555b602254610380526102205161028051808201828110615a7457905090501561566e57610380511515615671565b60005b156156a7576102205161028051808201828110615a74579050905060a0523060c05261569e6103a0612f2b565b6103a051610360525b61024051156156f75760016101a0516020526000526040600020600281019050805461024051808203828111615a74579050905081555060115461024051808203828111615a7457905090506011555b600e3060205260005260406000205461036051808203828111615a7457905090506103a05261030051156157c357610300516103a05161036051808201828110615a7457905090508082811882841002189050905061030052610300516040523060605261576361291e565b6103005161036051808281188284100218905090506103c052610360516103c051808203828111615a745790509050610360526103a051610300516103c051808203828111615a745790509050808203828111615a7457905090506103a0525b61032051156157e257610320516040526102e0516060526157e2612ebb565b610340511561580157610340516040526102c051606052615801612ebb565b6103a05161036051808201828110615a7457905090506103c0526103c051156158fe5760006103e052602354610400524261040051111561586c576103a0516104005142808203828111615a745790509050808202811583838304141715615a7457905090506103e0525b6103e0516103605161038051808202811583838304141715615a745790509050808201828110615a7457905090506103c0518015615a745780820490509050610420526103c05164e8d4a5100081028164e8d4a51000820418615a74579050610420518015615a7457808204905090506024554261042051808201828110615a74579050905060235542602555615904565b60006024555b4260016101a0516020526000526040600020600181019050556101a0517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d2678116102205161042052610240516104405260016101a051602052600052604060002060028101905054610460526103405160a052600160c0526159856103e0612a6e565b6103e051610480526103405161032051808201828110615a74579050905060a052600160c0526159b6610400612a6e565b610400516104a052610280516104c05260c0610420a261022051815261024051602082015250565b601860405160205260005260406000205460605116156159ff576001615a11565b60196060516020526000526040600020545b615a7257600b6080527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b600080fda165767970657283000307000b005b600080fd0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000882c39380ab06f52b89a55e3fb75949f5d460ca40000000000000000000000000000000000000000000000000000000000093a800000000000000000000000000000000000000000000000000000000000000014596561726e2d416a6e6120444149205661756c7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000097976416a6e614441490000000000000000000000000000000000000000000000\"\n ]\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "yvAjnaDAI mod [0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": \"1\",", + " \"result\": {", + " \"code\": \"0x6003361161000c57612165565b60003560e01c34615aa0576371da8a8d811861007a5760243610615aa0576004358060a01c615aa05760c052336040526008606052610049615a0a565b60c05160155560c0517f28709a2dab2a5d5e8688e96159011151c51644ab21839a8a45b449634d7c8b2b600060e0a2005b632d9caa4e81186102585760443610615aa057600435600401600a813511615aa05780358060c052600081600a8111615aa05780156100da57905b8060051b6020850101358060a01c615aa0578160051b60e001526001018181186100b5575b505050503360405260106060526100ef615a0a565b600060c051600a8111615aa057801561019757905b8060051b60e001516102205260016102205160205260005260406000205461018c576009610240527f21696e61637469766500000000000000000000000000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b600101818118610104575b505060c051806002558060051b600081601f0160051c600a8111615aa05780156101d557905b8060051b60e0015181600301556001018181186101bd575b505050507f0bc0cb8c5ccee13e6a2fd26a699f57ad7ff6e454e6aae97ec41cd2eb9ebd63a5602080610220528061022001600060c0518083528060051b600082600a8111615aa057801561024257905b8060051b60e001518160051b602088010152600101818118610225575b50508201602001915050905081019050610220a1005b6329c8a33b81186102be5760243610615aa0576004358060011c615aa05760c05233604052601060605261028a615a0a565b60c051600d557f1f88e73ebc721f227812938fe07a069ec1f7136aafacb397ed460bd15dee13f160c05160e052602060e0a1005b636fe01d1e81186103835760243610615aa057602154615aa057336040526101006060526102ea615a0a565b6016541561034f57600c60c0527f7573696e67206d6f64756c65000000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd6260043560c052602060c0a1005b63bb43546681186104565760243610615aa0576004358060a01c615aa05760c052602154615aa057336040526101006060526103bd615a0a565b601454191561042557601360e0527f7573696e67206465706f736974206c696d6974000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60c05160165560c0517f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060e0a2005b637b67589481186104ba5760243610615aa0576004358060a01c615aa05760c05233604052610200606052610489615a0a565b60c05160175560c0517fce6e3f8beda82a13c441d76efd4a6335760f219f38c60502e6680060874e109d600060e0a2005b63bdd81c0181186105135760243610615aa057336040526104006060526104df615a0a565b6004356013557f01a4494beed88920b88742cc58f2744e198f55ff192635a1fbabc6be8ffade8160043560c052602060c0a1005b63df69b22a81186106075760243610615aa05733604052610800606052610538615a0a565b6301e1855860043511156105a357601b60c0527f70726f66697420756e6c6f636b2074696d6520746f6f206c6f6e67000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356105d357600e30602052600052604060002054604052306060526105c861291e565b600060245560006023555b6004356022557ff361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a60043560c052602060c0a1005b632cf7fd8581186106815760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa05760605160186040516020526000526040600020556060516040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63a97cefa2811861071b5760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa057606051601860405160205260005260406000205417601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63e2bf56dd81186107b95760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa057606051613fff18601860405160205260005260406000205416601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b630b10dd8081186108235760243610615aa05760043580600e1c615aa057604052601a543318615aa0576001601960405160205260005260406000205560016040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63d52fe498811861088d5760243610615aa05760043580600e1c615aa057604052601a543318615aa0576000601960405160205260005260406000205560026040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63ef54cefd81186108bf5760243610615aa0576004358060a01c615aa057604052601a543318615aa057604051601b55005b63f776bf1f811861090d5760043610615aa057601b543318615aa05733601a556000601b55337fce93baa0b608a7d420822b6b90cfcccb70574363ba4fd26ef5ac17dd465016c460006040a2005b63bf86d690811861092c5760043610615aa05760215460405260206040f35b63d9a0e97a811861094f5760043610615aa057602061094b60806129ad565b6080f35b6399530b0681186109955760043610615aa05760206020615ad2600039600051604d8111615aa05780600a0a905060a052600160c052610990610140612a9a565b610140f35b63a9bbf1cc81186109ff5760043610615aa0576020806040528060400160006002548083528060051b600082600a8111615aa05780156109eb57905b80600301548160051b6020880101526001018181186109d1575b505082016020019150509050810190506040f35b636ec2b8d48118610a605760243610615aa0576004358060a01c615aa0576104e052600054600214615aa0576002600055336040526020606052610a41615a0a565b60406104e0516101a052610a566105006151d5565b6105006003600055f35b63e5e918188118610e305760443610615aa0576004358060a01c615aa0576101a052600054600214615aa057600260005533604052611000606052610aa3615a0a565b60016101a051602052600052604060002054610b1f57600a6101c0527f6e6f7420616374697665000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60016101a0516020526000526040600020600281019050546101c0526024356101e0526101c051610bb057600e610200527f6e6f7468696e6720746f206275790000000000000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101e051610c1e576013610200527f6e6f7468696e6720746f206275792077697468000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101c0516101e0511115610c35576101c0516101e0525b6101a0516370a082316102205230610240526020610220602461023c845afa610c63573d600060003e3d6000fd5b60203d10615aa0576102209050516101e051808202811583838304141715615aa057905090506101c0518015615aa057808204905090506102005261020051610d0c57600f610220527f63616e6e6f7420627579207a65726f00000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615ab260003960005160405233606052306080526101e05160a052610d31612d39565b60016101a051602052600052604060002060028101905080546101e051808203828111615aa057905090508155506011546101e051808203828111615aa057905090506011556012546101e051808201828110615aa057905090506012556101a0517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c051610220526101c0516101e051808203828111615aa05790509050610240526040610220a26101a0516040523360605261020051608052610df6612e15565b6101a0517fe94e7f88819f66c19b097748cb754149f63b1a176ed425dee1f1ee933e6d09b06101e051610220526020610220a26003600055005b63de7aeb418118610e745760243610615aa0576004358060a01c615aa05761010052336040526001606052610e63615a0a565b61010051604052610e7261459f565b005b63577db3168118610ebd5760243610615aa0576004358060a01c615aa05761022052336040526002606052610ea7615a0a565b610220516040526000606052610ebb6147b3565b005b63fd129e638118610f065760243610615aa0576004358060a01c615aa05761022052336040526004606052610ef0615a0a565b610220516040526001606052610f046147b3565b005b63b9ddcd688118610ff85760443610615aa0576004358060a01c615aa05760c052336040526080606052610f38615a0a565b600160c051602052600052604060002054610fac57601160e0527f696e6163746976652073747261746567790000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b602435600160c05160205260005260406000206003810190505560c051337fb3eef2123fec1523a6bbc90aceb203000154c1a4974335fe06b544c7534d4b8960243560e052602060e0a3005b630aeebf5581186110605760443610615aa0576004358060a01c615aa05761030052600054600214615aa057600260005533604052604060605261103a615a0a565b6020610300516101605260243561018052611056610320614a0a565b6103206003600055f35b6336a5545081186111405760043610615aa05733604052612000606052611085615a0a565b602154615aa0576001602155601654156110c757600060165560007f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060c0a25b60006014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd62600060c052602060c0a16040601833602052600052604060002054176018336020526000526040600020557f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf8600060c0a1005b636e553f65811861119c5760443610615aa0576024358060a01c615aa05761026052600054600214615aa05760026000556020336101a052610260516101c0526004356101e0526111926102806136ca565b6102806003600055f35b6394bf804d81186111f85760443610615aa0576024358060a01c615aa05761028052600054600214615aa05760026000556020336101a052610280516101c0526004356101e0526111ee6102a061386b565b6102a06003600055f35b63b460af9481186112175760643610615aa057604036610be0376112aa565b63a318c1a4811861123c5760843610615aa057606435610be0526000610c00526112aa565b63d81a09f681186113585760c43610615aa057606435610be052608435600401600a813511615aa057803580610c0052600081600a8111615aa05780156112a557905b8060051b6020850101358060a01c615aa0578160051b610c20015260010181811861127f575b505050505b6024358060a01c615aa057610ba0526044358060a01c615aa057610bc052600054600214615aa057600260005560043560a052600260c0526112ed610d80612b71565b610d8051610d6052336105e052610ba05161060052610bc0516106205260043561064052610d605161066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa505050611348610d80613ae3565b610d80506020610d606003600055f35b63ba087652811861137d5760643610615aa057612710610be0526000610c0052611410565b639f40a7b381186113a25760843610615aa057606435610be0526000610c0052611410565b6306580f2d81186114ba5760c43610615aa057606435610be052608435600401600a813511615aa057803580610c0052600081600a8111615aa057801561140b57905b8060051b6020850101358060a01c615aa0578160051b610c2001526001018181186113e5575b505050505b6024358060a01c615aa057610ba0526044358060a01c615aa057610bc052600054600214615aa057600260005560043560a052600160c052611453610d80612a9a565b610d8051610d60526020336105e052610ba05161060052610bc05161062052610d60516106405260043561066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa5050506114b0610d80613ae3565b610d806003600055f35b63095ea7b381186114fb5760443610615aa0576004358060a01c615aa05760c05260203360405260c0516060526024356080526114f760e061216b565b60e0f35b63a9059cbb81186115605760443610615aa0576004358060a01c615aa057610100526101005130811461153057801515611533565b60005b905015615aa05733604052610100516060526024356080526115536122b7565b6001610120526020610120f35b6323b872dd81186115d75760643610615aa0576004358060a01c615aa0576101e0526024358060a01c615aa05761020052610200513081146115a4578015156115a7565b60005b905015615aa05760206101e05161018052610200516101a0526044356101c0526115d26102206123a6565b610220f35b6339509351811861161a5760443610615aa0576004358060a01c615aa05760e05260203360405260e0516060526024356080526116156101006123e5565b610100f35b63a457c2d7811861165d5760443610615aa0576004358060a01c615aa05760e05260203360405260e051606052602435608052611658610100612479565b610100f35b63d505accf81186116d75760e43610615aa0576004358060a01c615aa057610460526024358060a01c615aa057610480526084358060081c615aa0576104a05260206104605161018052610480516101a052604060446101c0376104a05161020052604060a4610220376116d26104c06125e7565b6104c0f35b6370a0823181186117545760243610615aa0576004358060a01c615aa057608052306080511861173957600e60805160205260005260406000205461171c60a06129ad565b60a051808203828111615aa0579050905060c052602060c0611752565b600e60805160205260005260406000205460a052602060a05bf35b6318160ddd81186117775760043610615aa057602061177360a0612a1f565b60a0f35b6338d52e0f811861179e5760043610615aa0576020615ab260003960005160405260206040f35b63313ce56781186117cd5760043610615aa0576020615ad26000396000518060081c615aa05760405260206040f35b6301e1d11481186117f05760043610615aa05760206117ec6040612a81565b6040f35b639aa7df94811861180f5760043610615aa05760125460405260206040f35b63fc7b9c18811861182e5760043610615aa05760115460405260206040f35b63c6e6f592811861185e5760243610615aa057602060043560a052600160c052611859610160612b71565b610160f35b63ef8b30f7811861188e5760243610615aa057602060043560a052600160c052611889610160612b71565b610160f35b63b3d7f6b981186118be5760243610615aa057602060043560a052600260c0526118b9610140612a9a565b610140f35b6307a2d13a81186118ee5760243610615aa057602060043560a052600160c0526118e9610140612a9a565b610140f35b63402d267d81186119255760243610615aa0576004358060a01c615aa05760c052602060c05160405261192160e0613089565b60e0f35b63c63d75b6811861197f5760243610615aa0576004358060a01c615aa05761016052610160516040526119596101a0613089565b6101a0516101805260206101805160a052600160c05261197a6101a0612b71565b6101a0f35b63ce96cb77811861199e5760243610615aa05760403661060037611a31565b6385b6875681186119c35760443610615aa05760243561060052600061062052611a31565b6365cb67658118611a7e5760843610615aa05760243561060052604435600401600a813511615aa05780358061062052600081600a8111615aa0578015611a2c57905b8060051b6020850101358060a01c615aa0578160051b6106400152600101818118611a06575b505050505b6004358060a01c615aa0576105e05260206105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611a79610780613267565b610780f35b63d905777e8118611aa35760243610615aa05761271061060052600061062052611b36565b634abe41378118611ac85760443610615aa05760243561060052600061062052611b36565b6334b5fab68118611bd15760843610615aa05760243561060052604435600401600a813511615aa05780358061062052600081600a8111615aa0578015611b3157905b8060051b6020850101358060a01c615aa0578160051b6106400152600101818118611b0b575b505050505b6004358060a01c615aa0576105e0526105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611b7c610780613267565b610780516107c05260026107e0526107c05160a0526107e05160c052611ba36107a0612b71565b6107a051600e6105e05160205260005260406000205480828118828410021890509050610800526020610800f35b630a28a4778118611c015760243610615aa057602060043560a052600260c052611bfc610160612b71565b610160f35b634cdad5068118611c315760243610615aa057602060043560a052600160c052611c2c610140612a9a565b610140f35b63258294108118611cb95760043610615aa05760208060805260056040527f332e302e3100000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6366d3ae578118611d1a5760443610615aa0576004358060a01c615aa0576101205260243560016101205160205260005260406000206002810190505410615aa057602061012051604052602435606052611d15610140613134565b610140f35b630952864e8118611d395760043610615aa05760225460405260206040f35b632d6326928118611d585760043610615aa05760235460405260206040f35b635141eebb8118611d775760043610615aa05760245460405260206040f35b638afca8f08118611d965760043610615aa05760255460405260206040f35b633644e5158118611dbb5760043610615aa0576020611db661018061250d565b610180f35b632dd310008118611de25760043610615aa0576020615af260003960005160405260206040f35b6339ebf8238118611e375760243610615aa0576004358060a01c615aa0576040526001604051602052600052604060002080546060526001810154608052600281015460a052600381015460c0525060806060f35b638bf03b9e8118611e645760243610615aa057600435600254811015615aa0576003015460405260206040f35b631e56558d8118611e835760043610615aa057600d5460405260206040f35b63dd62ed3e8118611edd5760443610615aa0576004358060a01c615aa0576040526024358060a01c615aa057606052600f604051602052600052604060002080606051602052600052604060002090505460805260206080f35b633940e9ee8118611efc5760043610615aa05760105460405260206040f35b63356d64098118611f1b5760043610615aa05760135460405260206040f35b63e46a57978118611f3a5760043610615aa05760145460405260206040f35b634fb3ccc58118611f595760043610615aa05760155460405260206040f35b6361c2ccf48118611f785760043610615aa05760165460405260206040f35b63f5ba68f38118611f975760043610615aa05760175460405260206040f35b63993746428118611fd25760243610615aa0576004358060a01c615aa057604052601860405160205260005260406000205460605260206060f35b63f3789e45811861200d5760243610615aa05760043580600e1c615aa057604052601960405160205260005260406000205460605260206060f35b6379b98917811861202c5760043610615aa057601a5460405260206040f35b639a98f418811861204b5760043610615aa057601b5460405260206040f35b6306fdde0381186120d05760043610615aa05760208060405280604001601c5480825260208201600082601f0160051c60028111615aa05780156120a257905b80601d01548160051b84015260010181811861208b575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186121285760043610615aa05760208060405280604001601f5480825260208201602054815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b637ecebe0081186121635760243610615aa0576004358060a01c615aa057604052602660405160205260005260406000205460605260206060f35b505b60006000fd5b608051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a36001815250565b600f60c05160205260005260406000208060e0516020526000526040600020905054610120527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61012051146122b5576101005161012051101561228d576016610140527f696e73756666696369656e7420616c6c6f77616e6365000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b60c05160405260e0516060526101005161012051036080526122b061014061216b565b610140505b565b600e60405160205260005260406000205460a05260805160a051101561233457601260c0527f696e73756666696369656e742066756e6473000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60805160a05103600e604051602052600052604060002055608051600e60605160205260005260406000205401600e6060516020526000526040600020556060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160c052602060c0a3565b6101805160c0523360e0526101c051610100526123c16121c9565b610180516040526101a0516060526101c0516080526123de6122b7565b6001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808201828110615aa0579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808203828111615aa0579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8160e00152602081019050600b6040527f596561726e205661756c7400000000000000000000000000000000000000000060605260408051602082012090508160e0015260208101905060056080527f332e302e3100000000000000000000000000000000000000000000000000000060a05260808051602082012090508160e00152602081019050468160e00152602081019050308160e001526020810190508060c05260c09050805160208201209050815250565b6101805161265557600d610260527f696e76616c6964206f776e6572000000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b426101e05110156126c657600e610260527f7065726d697420657870697265640000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60266101805160205260005260406000205461026052600060026102a0527f19010000000000000000000000000000000000000000000000000000000000006102c0526102a080516020820183610400018151815250508083019250505061272f6102e061250d565b6102e05181610400015260208101905060007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9816103200152602081019050610180518161032001526020810190506101a0518161032001526020810190506101c051816103200152602081019050610260518161032001526020810190506101e05181610320015260208101905080610300526103009050805160208201209050816104000152602081019050806103e0526103e090508051602082012090506102805261018051610280516102a052610200516102c052610220516102e05261024051610300526020600060806102a060015afa506000511815612895576011610340527f696e76616c6964207369676e61747572650000000000000000000000000000006103605261034050610340518061036001601f826000031636823750506308c379a061030052602061032052601f19601f61034051011660440161031cfd5b6101c051600f610180516020526000526040600020806101a05160205260005260406000209050556102605160018101818110615aa05790506026610180516020526000526040600020556101a051610180517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256101c0516102a05260206102a0a36001815250565b600e60605160205260005260406000208054604051808203828111615aa057905090508155506040516010540360105560006060517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a37fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb60405160805260206080a1565b602354604052600060605242604051116129e05760405115612a1757600e30602052600052604060002054606052612a17565b60245442602554808203828111615aa05790509050808202811583838304141715615aa0579050905064e8d4a51000810490506060525b606051815250565b601054612a2c60806129ad565b608051808203828111615aa05790509050815250565b612a4c60c06129ad565b60c05160a05260a051612a5e57612a7f565b426023541115612a6d57426025555b60a05160405230606052612a7f61291e565b565b601254601154808201828110615aa05790509050815250565b60a05119612aa9576001612aae565b60a051155b15612abe5760a051815250612b6f565b612ac9610100612a1f565b6101005160e05260e051612ae25760a051815250612b6f565b60a051612af0610120612a81565b61012051808202811583838304141715615aa05790509050610100526101005160e0518015615aa0578082049050905061012052600260c05118612b49576101005160e0518015615aa057808206905090501515612b4c565b60005b15612b67576101205160018101818110615aa0579050610120525b610120518152505b565b60a05119612b80576001612b85565b60a051155b15612b955760a051815250612c65565b612ba0610100612a1f565b6101005160e052612bb2610120612a81565b610120516101005261010051612be25760e051612bd85760a051815250612c6556612be2565b6000815250612c65565b60a05160e051808202811583838304141715615aa057905090506101205261012051610100518015615aa0578082049050905061014052600260c05118612c3f5761012051610100518015615aa057808206905090501515612c42565b60005b15612c5d576101405160018101818110615aa0579050610140525b610140518152505b565b60405163095ea7b360a05260605160c05260805160e052602060a0604460bc6000855af1612c9a573d600060003e3d6000fd5b3d612cb157803b15615aa057600161010052612cc9565b60203d10615aa05760a0518060011c615aa057610100525b610100905051612d3757600f610120527f617070726f76616c206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b6040516323b872dd60c05260605160e0526080516101005260a05161012052602060c0606460dc6000855af1612d74573d600060003e3d6000fd5b3d612d8b57803b15615aa057600161014052612da3565b60203d10615aa05760c0518060011c615aa057610140525b610140905051612e1357600f610160527f7472616e73666572206661696c656400000000000000000000000000000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b565b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc6000855af1612e48573d600060003e3d6000fd5b3d612e5f57803b15615aa057600161010052612e77565b60203d10615aa05760a0518060011c615aa057610100525b610100905051612ee557600f610120527f7472616e73666572206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b604051600e60605160205260005260406000205401600e606051602052600052604060002055601054604051808201828110615aa0579050905060105560605160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b612f62610100612a1f565b6101005160e052612f74610120612a81565b610120516101005260006101205260e051612f955760a05161012052613058565b60a05161010051116130175760a051610100511161305857600f610140527f616d6f756e7420746f6f206869676800000000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd613058565b60a05160e051808202811583838304141715615aa057905090506101005160a051808203828111615aa057905090508015615aa05780820490509050610120525b6101205161306a576000815250613087565b6101205160405260c05160605261307f612ee7565b610120518152505b565b6040518061309857600161309d565b308118155b9050156130ae576000815250613132565b601654606052606051156130fc5760605163320704ed60805260405160a052602060806024609c845afa6130e7573d600060003e3d6000fd5b60203d10615aa0576080905051815250613132565b61310660a0612a81565b60a05160805260145460a05260a05160805110613127576000815250613132565b60805160a051038152505b565b60016040516020526000526040600020600281019050546080526040516370a0823160c0523060e052602060c0602460dc845afa613177573d600060003e3d6000fd5b60203d10615aa05760c090505160a0526040516307a2d13a60e05260a05161010052602060e0602460fc845afa6131b3573d600060003e3d6000fd5b60203d10615aa05760e090505160c05260805160c05110156131d857608051156131db565b60015b156131ea576000815250613265565b60605160c051808202811583838304141715615aa0579050905060e05260605160e0516080518015615aa05780820490509050808203828111615aa057905090506101005260e0516080518015615aa057808206905090501561325d576101005160018101818110615aa0579050610100525b610100518152505b565b600e6101405160205260005260406000205460a052600160c05261328c610300612a9a565b610300516102e05260175461030052610300511561335f576103005163c36a0eee61032052606061014051610340526101605161036052806103805280610340016000610180518083528060051b600082600a8111615aa057801561330b57905b8060051b6101a001518160051b6020880101526001018181186132ed575b5050820160200191505090508101505060206103206101c461033c845afa613338573d600060003e3d6000fd5b60203d10615aa0576103209050516102e051808281188284100218905090508152506136c8565b60125461032052610320516102e05111156136c057610320516103405260006103605260025480610380528060051b600081601f0160051c600a8111615aa05780156133c057905b80600301548160051b6103a001526001018181186133a7575b5050505061018051156133d657600d54156133d9565b60005b156133fb576101805180610380528060051b806103a0826101a060045afa5050505b600061038051600a8111615aa05780156136b557905b8060051b6103a001516104e05260016104e05160205260005260406000205461349a576011610500527f696e6163746976652073747261746567790000000000000000000000000000006105205261050050610500518061052001601f826000031636823750506308c379a06104c05260206104e052601f19601f6105005101166044016104dcfd5b6102e05161034051808203828111615aa0579050905060016104e05160205260005260406000206002810190505480828118828410021890509050610500526104e051604052610500516060526134f2610540613134565b61054051610520526104e0516307a2d13a6105a0526104e05163d905777e6105605230610580526020610560602461057c845afa613535573d600060003e3d6000fd5b60203d10615aa0576105609050516105c05260206105a060246105bc845afa613563573d600060003e3d6000fd5b60203d10615aa0576105a0905051610540526105005161052051808203828111615aa057905090506105405110156135e1576105205161054051808202811583838304141715615aa05790509050610500518015615aa05780820490509050610520526105405161052051808201828110615aa05790509050610500525b610500516135ee576136aa565b61052051156136055761270f610160511115613608565b60005b15613663576103405161050051808201828110615aa0579050905061016051808202811583838304141715615aa05790509050612710810490506103605161052051808201828110615aa057905090501115613663576136b5565b6103405161050051808201828110615aa05790509050610340526102e051610340511061368f576136b5565b6103605161052051808201828110615aa05790509050610360525b600101818118613411575b5050610340516102e0525b6102e0518152505b565b602154615aa0576101c0516040526136e3610200613089565b610200516101e0511115613757576014610220527f657863656564206465706f736974206c696d69740000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615ab260003960005160405233606052306080526101e05160a05261377c612d39565b6012546101e051808201828110615aa057905090506012556101e05160a0526101c05160c0526137ad610220612f57565b610220516102005261020051613823576010610220527f63616e6e6f74206d696e74207a65726f000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76101e0516102205261020051610240526040610220a361020051815250565b602154615aa0576101e05160a052600260c052613889610220612a9a565b6102205161020052610200516138ff576013610220527f63616e6e6f74206465706f736974207a65726f000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c051604052613911610220613089565b61022051610200511115613985576014610240527f657863656564206465706f736974206c696d69740000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b6020615ab260003960005160405233606052306080526102005160a0526139aa612d39565b60125461020051808201828110615aa057905090506012556101e0516040526101c0516060526139d8612ee7565b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d761020051610220526101e051610240526040610220a361020051815250565b604051630a28a47760a05260605160c052602060a0602460bc845afa613a4b573d600060003e3d6000fd5b60203d10615aa05760a09050516040516370a0823160e0523061010052602060e0602460fc845afa613a82573d600060003e3d6000fd5b60203d10615aa05760e09050518082811882841002189050905060805260405163ba08765260a05260805160c0523060e0523061010052602060a0606460bc6000855af1613ad5573d600060003e3d6000fd5b60203d10615aa05760a05050565b61060051613b5157600c610800527f5a45524f204144445245535300000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b612710610680511115613bc4576008610800527f6d6178206c6f73730000000000000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b60175415613c7757610620516101405261068051610160526106a05180610180528060051b806101a0826106c060045afa505050613c03610800613267565b61080051610640511115613c77576015610820527f657863656564207769746864726177206c696d697400000000000000000000006108405261082050610820518061084001601f826000031636823750506308c379a06107e052602061080052601f19601f6108205101166044016107fcfd5b6106605161080052600e610620516020526000526040600020546108205261080051613d03576013610840527f6e6f2073686172657320746f2072656465656d000000000000000000000000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b61080051610820511015613d7757601d610840527f696e73756666696369656e742073686172657320746f2072656465656d0000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b610620516105e05114613da2576106205160c0526105e05160e0526106605161010052613da26121c9565b610640516108405260125461086052610860516108405111156144385760025480610880528060051b600081601f0160051c600a8111615aa0578015613dfd57905b80600301548160051b6108a00152600101818118613de4575b505050506106a05115613e1357600d5415613e16565b60005b15613e38576106a05180610880528060051b806108a0826106c060045afa5050505b6011546109e052610860516108405103610a00526000610a20526020615ab26000396000516370a08231610a605230610a80526020610a606024610a7c845afa613e87573d600060003e3d6000fd5b60203d10615aa057610a60905051610a4052600061088051600a8111615aa05780156143ba57905b8060051b6108a00151610a60526001610a6051602052600052604060002054613f38576011610a80527f696e616374697665207374726174656779000000000000000000000000000000610aa052610a8050610a805180610aa001601f826000031636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b6001610a6051602052600052604060002060028101905054610a8052610a0051610a805180828118828410021890509050610a2052610a60516307a2d13a610b0052610a605163d905777e610ac05230610ae0526020610ac06024610adc845afa613fa8573d600060003e3d6000fd5b60203d10615aa057610ac0905051610b20526020610b006024610b1c845afa613fd6573d600060003e3d6000fd5b60203d10615aa057610b00905051610aa052610a6051604052610a2051606052614001610ae0613134565b610ae051610ac052610ac0511561418d57610a2051610ac051808203828111615aa05790509050610aa051101561409857610a2051610ac051808203828111615aa05790509050610ae052610ac051610aa051808202811583838304141715615aa05790509050610ae0518015615aa05780820490509050610ac052610aa051610ac051808201828110615aa05790509050610a20525b610a2051610ac051808203828111615aa05790509050610a205261084051610ac051808203828111615aa0579050905061084052610a0051610ac051808203828111615aa05790509050610a00526109e051610ac051808203828111615aa057905090506109e052610aa05161411357610ac0511515614116565b60005b1561418d57610a8051610ac051808203828111615aa05790509050610ae052610ae0516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b0052610ae051610b20526040610b00a25b610a2051610aa05180828118828410021890509050610a2052610a20516141b3576143af565b610a6051604052610a20516060526141c9613a20565b6020615ab26000396000516370a08231610b005230610b20526020610b006024610b1c845afa6141fe573d600060003e3d6000fd5b60203d10615aa057610b00905051610ae052610ae051610a4051808203828111615aa05790509050610b00526000610b2052610a2051610b00511161425d57610a2051610b0051101561429757610b0051610a205103610b2052614297565b610a8051610b00511161428e57610a2051610a2051610b005103808201828110615aa05790509050610a2052614297565b610a8051610a20525b61086051610a2051610b2051808203828111615aa05790509050808201828110615aa057905090506108605261084051610b2051808203828111615aa05790509050610840526109e051610a2051808203828111615aa057905090506109e052610a8051610a2051610ac051808201828110615aa05790509050808203828111615aa05790509050610b4052610b40516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b6052610b4051610b80526040610b60a261086051610840511161438c576143ba565b610ae051610a4052610a0051610a2051808203828111615aa05790509050610a00525b600101818118613eaf575b50506108405161086051101561443057601c610a60527f696e73756666696369656e742061737365747320696e207661756c7400000000610a8052610a6050610a605180610a8001601f826000031636823750506308c379a0610a20526020610a4052601f19601f610a60510116604401610a3cfd5b6109e0516011555b61084051610640511161444c576000614456565b61270f6106805111155b15614500576106405161068051808202811583838304141715615aa05790509050612710810490506106405161084051808203828111615aa05790509050111561450057600d610880527f746f6f206d756368206c6f7373000000000000000000000000000000000000006108a0526108805061088051806108a001601f826000031636823750506308c379a061084052602061086052601f19601f61088051011660440161085cfd5b610800516040526106205160605261451661291e565b6108605161084051808203828111615aa057905090506012556020615ab26000396000516040526106005160605261084051608052614553612e15565b61062051610600516105e0517ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db6108405161088052610800516108a0526040610880a461084051815250565b6040513081146145b1578015156145b4565b60005b905061461757601f6080527f73747261746567792063616e6e6f74206265207a65726f20616464726573730060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6020615ab26000396000516040516338d52e0f606052602060606004607c845afa614647573d600060003e3d6000fd5b60203d10615aa0576060518060a01c615aa05760a05260a090505118156146c557600d60c0527f696e76616c69642061737365740000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6001604051602052600052604060002054156147385760176060527f737472617465677920616c72656164792061637469766500000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600160405160205260005260406000204281554260018201556000600282015560006003820155506009600254116147865760025460098111615aa057600181016002556040518160030155505b60016040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca60006060a3565b60016040516020526000526040600020546148255760136080527f7374726174656779206e6f74206163746976650000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6000608052600160405160205260005260406000206002810190505415614916576060516148aa57601160a0527f737472617465677920686173206465627400000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b6001604051602052600052604060002060028101905054608052601154608051808203828111615aa057905090506011556040517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d267811600060a05260805160c05260803660e03760c060a0a25b600160405160205260005260406000206000815560006001820155600060028201556000600382015550600060a0526000600254600a8111615aa057801561499a57905b806003015461020052604051610200511461498f5760a05160098111615aa0576001810160a052610200518160051b60c00152505b60010181811861495a575b505060a051806002558060051b600081601f0160051c600a8111615aa05780156149d857905b8060051b60c0015181600301556001018181186149c0575b5050505060026040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca6000610200a3565b610180516101a0526001610160516020526000526040600020600281019050546101c05260215415614a3d5760006101a0525b6101c0516101a05118614ab057601c6101e0527f6e6577206465627420657175616c732063757272656e74206465627400000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101a0516101c05111614e55576001610160516020526000526040600020600381019050546101a0511115614b455760206101e0527f746172676574206465627420686967686572207468616e206d61782064656274610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101605163402d267d6102005230610220526020610200602461021c845afa614b73573d600060003e3d6000fd5b60203d10615aa0576102009050516101e0526101e051614bf3576012610200527f6e6f7468696e6720746f206465706f73697400000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101a0516101c051808203828111615aa05790509050610200526101e051610200511115614c24576101e051610200525b6013546102205260125461024052610220516102405111614ca5576013610260527f6e6f2066756e647320746f206465706f736974000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6102205161024051036102605261026051610200511115614cc95761026051610200525b6102005115614e36576020615ab26000396000516040526101605160605261020051608052614cf6612c67565b6020615ab26000396000516370a082316102a052306102c05260206102a060246102bc845afa614d2b573d600060003e3d6000fd5b60203d10615aa0576102a09050516102805261016051636e553f656102a052610200516102c052306102e05260206102a060446102bc6000855af1614d75573d600060003e3d6000fd5b60203d10615aa0576102a050506020615ab26000396000516370a082316102c052306102e05260206102c060246102dc845afa614db7573d600060003e3d6000fd5b60203d10615aa0576102c09050516102a0526020615ab2600039600051604052610160516060526000608052614deb612c67565b610280516102a051808203828111615aa057905090506102005260125461020051808203828111615aa0579050905060125560115461020051808201828110615aa057905090506011555b6101c05161020051808201828110615aa057905090506101a052615175565b6101a0516101c051036101e052601354610200526012546102205261020051610220516101e051808201828110615aa057905090501015614eb4576102205161020051036101e0526101c0516101e0511115614eb4576101c0516101e0525b610160516307a2d13a6102a0526101605163d905777e6102605230610280526020610260602461027c845afa614eef573d600060003e3d6000fd5b60203d10615aa0576102609050516102c05260206102a060246102bc845afa614f1d573d600060003e3d6000fd5b60203d10615aa0576102a09050516102405261024051614f9d576013610260527f6e6f7468696e6720746f207769746864726177000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6101e051610240511015614fb457610240516101e0525b610160516040526101e051606052614fcd610280613134565b6102805161026052610260511561504457601e610280527f73747261746567792068617320756e7265616c69736564206c6f7373657300006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b6020615ab26000396000516370a082316102a052306102c05260206102a060246102bc845afa615079573d600060003e3d6000fd5b60203d10615aa0576102a090505161028052610160516040526101e0516060526150a1613a20565b6020615ab26000396000516370a082316102c052306102e05260206102c060246102dc845afa6150d6573d600060003e3d6000fd5b60203d10615aa0576102c09050516102a0526102a05161028051808203828111615aa057905090506101c051808281188284100218905090506102c0526101e0516102c051111561512a576102c0516101e0525b6012546102c051808201828110615aa057905090506012556011546101e051808203828111615aa057905090506011556101c0516101e051808203828111615aa057905090506101a0525b6101a051600161016051602052600052604060002060028101905055610160517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c0516101e0526101a0516102005260406101e0a26101a051815250565b60016101a0516020526000526040600020546152515760116101c0527f696e6163746976652073747261746567790000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b615259612a42565b6101a0516370a082316101e052306102005260206101e060246101fc845afa615287573d600060003e3d6000fd5b60203d10615aa0576101e09050516101c0526101a0516307a2d13a610200526101c051610220526020610200602461021c845afa6152ca573d600060003e3d6000fd5b60203d10615aa0576102009050516101e05260016101a0516020526000526040600020600281019050546102005260403661022037610200516101e0511161531e576101e05161020051036102405261532c565b610200516101e05103610220525b608036610260376015546102e0526102e05115615452576102e05163921f8a8f610300526101a05161032052610220516103405261024051610360526040610300606461031c6000855af1615386573d600060003e3d6000fd5b60403d10615aa0576103009050805161026052602081015161028052506102605115615452576000610300526020615af2600039600051635153b199610320526040610320600461033c845afa6153e2573d600060003e3d6000fd5b60403d10615aa057610320518060101c615aa05761038052610340518060a01c615aa0576103a052610380905080516103005260208101516102c0525060016103005112615452576102605161030051808202811583838304141715615aa05790509050612710810490506102a0525b606036610300376102405161026051808201828110615aa057905090501561551a57610300516102405161026051808201828110615aa0579050905060a052600260c0526154a1610360612b71565b61036051808201828110615aa0579050905061030052610260511561551a57610260516102a051808203828111615aa0579050905060a052600160c0526154e9610360612b71565b61036051610320526102a0511561551a576102a05160a052600160c052615511610360612b71565b61036051610340525b600061036052610280511561561d57610280516020615ab26000396000516370a08231610380526102e0516103a0526020610380602461039c845afa615565573d600060003e3d6000fd5b60203d10615aa0576103809050516020615ab260003960005163dd62ed3e6103c0526102e0516103e052306104005260206103c060446103dc845afa6155b0573d600060003e3d6000fd5b60203d10615aa0576103c09050518082811882841002189050905080828118828410021890509050610280526020615ab26000396000516040526102e051606052306080526102805160a052615604612d39565b60125461028051808201828110615aa057905090506012555b610220511561566d5760016101a0516020526000526040600020600281019050805461022051808201828110615aa0579050905081555060115461022051808201828110615aa057905090506011555b602254610380526102205161028051808201828110615aa057905090501561569a5761038051151561569d565b60005b156156d3576102205161028051808201828110615aa0579050905060a0523060c0526156ca6103a0612f57565b6103a051610360525b61024051156157235760016101a0516020526000526040600020600281019050805461024051808203828111615aa0579050905081555060115461024051808203828111615aa057905090506011555b600e3060205260005260406000205461036051808203828111615aa057905090506103a05261030051156157ef57610300516103a05161036051808201828110615aa057905090508082811882841002189050905061030052610300516040523060605261578f61291e565b6103005161036051808281188284100218905090506103c052610360516103c051808203828111615aa05790509050610360526103a051610300516103c051808203828111615aa05790509050808203828111615aa057905090506103a0525b610320511561580e57610320516040526102e05160605261580e612ee7565b610340511561582d57610340516040526102c05160605261582d612ee7565b6103a05161036051808201828110615aa057905090506103c0526103c0511561592a5760006103e0526023546104005242610400511115615898576103a0516104005142808203828111615aa05790509050808202811583838304141715615aa057905090506103e0525b6103e0516103605161038051808202811583838304141715615aa05790509050808201828110615aa057905090506103c0518015615aa05780820490509050610420526103c05164e8d4a5100081028164e8d4a51000820418615aa0579050610420518015615aa057808204905090506024554261042051808201828110615aa0579050905060235542602555615930565b60006024555b4260016101a0516020526000526040600020600181019050556101a0517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d2678116102205161042052610240516104405260016101a051602052600052604060002060028101905054610460526103405160a052600160c0526159b16103e0612a9a565b6103e051610480526103405161032051808201828110615aa0579050905060a052600160c0526159e2610400612a9a565b610400516104a052610280516104c05260c0610420a261022051815261024051602082015250565b60186040516020526000526040600020546060511615615a2b576001615a3d565b60196060516020526000526040600020545b615a9e57600b6080527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b600080fda165767970657283000307000b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000e9e8c89c8fc7e8b8f23425688eb68987231178e5\"", + " }", + "}", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : \"1\",\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_callConstructor\",\n \"params\" : [\n \"0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB\",\n \"0x6020615c566000396000518060a01c615c51576040526020615c766000396000516040602082615c560160003960005111615c5157602081615c560160003960005180606052602082018181615c56016080395050506020615c966000396000516020602082615c560160003960005111615c5157602081615c56016000396000518060c05260208201602081615c560160003960005160e0525050506020615cb66000396000518060a01c615c51576101005234615c5157604051615ab25260405163313ce567610120526020610120600461013c845afa6100e7573d600060003e3d6000fd5b60203d10615c5157610120518060081c615c515761016052610160905051615ad25260ff615ad25111615c515733615af2526301e185586020615cd660003960005111615c51576020615cd660003960005160225560605180601c55600081601f0160051c60028111615c5157801561017457905b8060051b6080015181601d015560010181811861015c575b50505060c05180601f5560e0516020555061010051601a55615ab261019e61000039615b12610000f36003361161000c57612165565b60003560e01c34615aa0576371da8a8d811861007a5760243610615aa0576004358060a01c615aa05760c052336040526008606052610049615a0a565b60c05160155560c0517f28709a2dab2a5d5e8688e96159011151c51644ab21839a8a45b449634d7c8b2b600060e0a2005b632d9caa4e81186102585760443610615aa057600435600401600a813511615aa05780358060c052600081600a8111615aa05780156100da57905b8060051b6020850101358060a01c615aa0578160051b60e001526001018181186100b5575b505050503360405260106060526100ef615a0a565b600060c051600a8111615aa057801561019757905b8060051b60e001516102205260016102205160205260005260406000205461018c576009610240527f21696e61637469766500000000000000000000000000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b600101818118610104575b505060c051806002558060051b600081601f0160051c600a8111615aa05780156101d557905b8060051b60e0015181600301556001018181186101bd575b505050507f0bc0cb8c5ccee13e6a2fd26a699f57ad7ff6e454e6aae97ec41cd2eb9ebd63a5602080610220528061022001600060c0518083528060051b600082600a8111615aa057801561024257905b8060051b60e001518160051b602088010152600101818118610225575b50508201602001915050905081019050610220a1005b6329c8a33b81186102be5760243610615aa0576004358060011c615aa05760c05233604052601060605261028a615a0a565b60c051600d557f1f88e73ebc721f227812938fe07a069ec1f7136aafacb397ed460bd15dee13f160c05160e052602060e0a1005b636fe01d1e81186103835760243610615aa057602154615aa057336040526101006060526102ea615a0a565b6016541561034f57600c60c0527f7573696e67206d6f64756c65000000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd6260043560c052602060c0a1005b63bb43546681186104565760243610615aa0576004358060a01c615aa05760c052602154615aa057336040526101006060526103bd615a0a565b601454191561042557601360e0527f7573696e67206465706f736974206c696d6974000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60c05160165560c0517f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060e0a2005b637b67589481186104ba5760243610615aa0576004358060a01c615aa05760c05233604052610200606052610489615a0a565b60c05160175560c0517fce6e3f8beda82a13c441d76efd4a6335760f219f38c60502e6680060874e109d600060e0a2005b63bdd81c0181186105135760243610615aa057336040526104006060526104df615a0a565b6004356013557f01a4494beed88920b88742cc58f2744e198f55ff192635a1fbabc6be8ffade8160043560c052602060c0a1005b63df69b22a81186106075760243610615aa05733604052610800606052610538615a0a565b6301e1855860043511156105a357601b60c0527f70726f66697420756e6c6f636b2074696d6520746f6f206c6f6e67000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356105d357600e30602052600052604060002054604052306060526105c861291e565b600060245560006023555b6004356022557ff361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a60043560c052602060c0a1005b632cf7fd8581186106815760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa05760605160186040516020526000526040600020556060516040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63a97cefa2811861071b5760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa057606051601860405160205260005260406000205417601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63e2bf56dd81186107b95760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa057606051613fff18601860405160205260005260406000205416601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b630b10dd8081186108235760243610615aa05760043580600e1c615aa057604052601a543318615aa0576001601960405160205260005260406000205560016040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63d52fe498811861088d5760243610615aa05760043580600e1c615aa057604052601a543318615aa0576000601960405160205260005260406000205560026040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63ef54cefd81186108bf5760243610615aa0576004358060a01c615aa057604052601a543318615aa057604051601b55005b63f776bf1f811861090d5760043610615aa057601b543318615aa05733601a556000601b55337fce93baa0b608a7d420822b6b90cfcccb70574363ba4fd26ef5ac17dd465016c460006040a2005b63bf86d690811861092c5760043610615aa05760215460405260206040f35b63d9a0e97a811861094f5760043610615aa057602061094b60806129ad565b6080f35b6399530b0681186109955760043610615aa05760206020615ad2600039600051604d8111615aa05780600a0a905060a052600160c052610990610140612a9a565b610140f35b63a9bbf1cc81186109ff5760043610615aa0576020806040528060400160006002548083528060051b600082600a8111615aa05780156109eb57905b80600301548160051b6020880101526001018181186109d1575b505082016020019150509050810190506040f35b636ec2b8d48118610a605760243610615aa0576004358060a01c615aa0576104e052600054600214615aa0576002600055336040526020606052610a41615a0a565b60406104e0516101a052610a566105006151d5565b6105006003600055f35b63e5e918188118610e305760443610615aa0576004358060a01c615aa0576101a052600054600214615aa057600260005533604052611000606052610aa3615a0a565b60016101a051602052600052604060002054610b1f57600a6101c0527f6e6f7420616374697665000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60016101a0516020526000526040600020600281019050546101c0526024356101e0526101c051610bb057600e610200527f6e6f7468696e6720746f206275790000000000000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101e051610c1e576013610200527f6e6f7468696e6720746f206275792077697468000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101c0516101e0511115610c35576101c0516101e0525b6101a0516370a082316102205230610240526020610220602461023c845afa610c63573d600060003e3d6000fd5b60203d10615aa0576102209050516101e051808202811583838304141715615aa057905090506101c0518015615aa057808204905090506102005261020051610d0c57600f610220527f63616e6e6f7420627579207a65726f00000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615ab260003960005160405233606052306080526101e05160a052610d31612d39565b60016101a051602052600052604060002060028101905080546101e051808203828111615aa057905090508155506011546101e051808203828111615aa057905090506011556012546101e051808201828110615aa057905090506012556101a0517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c051610220526101c0516101e051808203828111615aa05790509050610240526040610220a26101a0516040523360605261020051608052610df6612e15565b6101a0517fe94e7f88819f66c19b097748cb754149f63b1a176ed425dee1f1ee933e6d09b06101e051610220526020610220a26003600055005b63de7aeb418118610e745760243610615aa0576004358060a01c615aa05761010052336040526001606052610e63615a0a565b61010051604052610e7261459f565b005b63577db3168118610ebd5760243610615aa0576004358060a01c615aa05761022052336040526002606052610ea7615a0a565b610220516040526000606052610ebb6147b3565b005b63fd129e638118610f065760243610615aa0576004358060a01c615aa05761022052336040526004606052610ef0615a0a565b610220516040526001606052610f046147b3565b005b63b9ddcd688118610ff85760443610615aa0576004358060a01c615aa05760c052336040526080606052610f38615a0a565b600160c051602052600052604060002054610fac57601160e0527f696e6163746976652073747261746567790000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b602435600160c05160205260005260406000206003810190505560c051337fb3eef2123fec1523a6bbc90aceb203000154c1a4974335fe06b544c7534d4b8960243560e052602060e0a3005b630aeebf5581186110605760443610615aa0576004358060a01c615aa05761030052600054600214615aa057600260005533604052604060605261103a615a0a565b6020610300516101605260243561018052611056610320614a0a565b6103206003600055f35b6336a5545081186111405760043610615aa05733604052612000606052611085615a0a565b602154615aa0576001602155601654156110c757600060165560007f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060c0a25b60006014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd62600060c052602060c0a16040601833602052600052604060002054176018336020526000526040600020557f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf8600060c0a1005b636e553f65811861119c5760443610615aa0576024358060a01c615aa05761026052600054600214615aa05760026000556020336101a052610260516101c0526004356101e0526111926102806136ca565b6102806003600055f35b6394bf804d81186111f85760443610615aa0576024358060a01c615aa05761028052600054600214615aa05760026000556020336101a052610280516101c0526004356101e0526111ee6102a061386b565b6102a06003600055f35b63b460af9481186112175760643610615aa057604036610be0376112aa565b63a318c1a4811861123c5760843610615aa057606435610be0526000610c00526112aa565b63d81a09f681186113585760c43610615aa057606435610be052608435600401600a813511615aa057803580610c0052600081600a8111615aa05780156112a557905b8060051b6020850101358060a01c615aa0578160051b610c20015260010181811861127f575b505050505b6024358060a01c615aa057610ba0526044358060a01c615aa057610bc052600054600214615aa057600260005560043560a052600260c0526112ed610d80612b71565b610d8051610d6052336105e052610ba05161060052610bc0516106205260043561064052610d605161066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa505050611348610d80613ae3565b610d80506020610d606003600055f35b63ba087652811861137d5760643610615aa057612710610be0526000610c0052611410565b639f40a7b381186113a25760843610615aa057606435610be0526000610c0052611410565b6306580f2d81186114ba5760c43610615aa057606435610be052608435600401600a813511615aa057803580610c0052600081600a8111615aa057801561140b57905b8060051b6020850101358060a01c615aa0578160051b610c2001526001018181186113e5575b505050505b6024358060a01c615aa057610ba0526044358060a01c615aa057610bc052600054600214615aa057600260005560043560a052600160c052611453610d80612a9a565b610d8051610d60526020336105e052610ba05161060052610bc05161062052610d60516106405260043561066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa5050506114b0610d80613ae3565b610d806003600055f35b63095ea7b381186114fb5760443610615aa0576004358060a01c615aa05760c05260203360405260c0516060526024356080526114f760e061216b565b60e0f35b63a9059cbb81186115605760443610615aa0576004358060a01c615aa057610100526101005130811461153057801515611533565b60005b905015615aa05733604052610100516060526024356080526115536122b7565b6001610120526020610120f35b6323b872dd81186115d75760643610615aa0576004358060a01c615aa0576101e0526024358060a01c615aa05761020052610200513081146115a4578015156115a7565b60005b905015615aa05760206101e05161018052610200516101a0526044356101c0526115d26102206123a6565b610220f35b6339509351811861161a5760443610615aa0576004358060a01c615aa05760e05260203360405260e0516060526024356080526116156101006123e5565b610100f35b63a457c2d7811861165d5760443610615aa0576004358060a01c615aa05760e05260203360405260e051606052602435608052611658610100612479565b610100f35b63d505accf81186116d75760e43610615aa0576004358060a01c615aa057610460526024358060a01c615aa057610480526084358060081c615aa0576104a05260206104605161018052610480516101a052604060446101c0376104a05161020052604060a4610220376116d26104c06125e7565b6104c0f35b6370a0823181186117545760243610615aa0576004358060a01c615aa057608052306080511861173957600e60805160205260005260406000205461171c60a06129ad565b60a051808203828111615aa0579050905060c052602060c0611752565b600e60805160205260005260406000205460a052602060a05bf35b6318160ddd81186117775760043610615aa057602061177360a0612a1f565b60a0f35b6338d52e0f811861179e5760043610615aa0576020615ab260003960005160405260206040f35b63313ce56781186117cd5760043610615aa0576020615ad26000396000518060081c615aa05760405260206040f35b6301e1d11481186117f05760043610615aa05760206117ec6040612a81565b6040f35b639aa7df94811861180f5760043610615aa05760125460405260206040f35b63fc7b9c18811861182e5760043610615aa05760115460405260206040f35b63c6e6f592811861185e5760243610615aa057602060043560a052600160c052611859610160612b71565b610160f35b63ef8b30f7811861188e5760243610615aa057602060043560a052600160c052611889610160612b71565b610160f35b63b3d7f6b981186118be5760243610615aa057602060043560a052600260c0526118b9610140612a9a565b610140f35b6307a2d13a81186118ee5760243610615aa057602060043560a052600160c0526118e9610140612a9a565b610140f35b63402d267d81186119255760243610615aa0576004358060a01c615aa05760c052602060c05160405261192160e0613089565b60e0f35b63c63d75b6811861197f5760243610615aa0576004358060a01c615aa05761016052610160516040526119596101a0613089565b6101a0516101805260206101805160a052600160c05261197a6101a0612b71565b6101a0f35b63ce96cb77811861199e5760243610615aa05760403661060037611a31565b6385b6875681186119c35760443610615aa05760243561060052600061062052611a31565b6365cb67658118611a7e5760843610615aa05760243561060052604435600401600a813511615aa05780358061062052600081600a8111615aa0578015611a2c57905b8060051b6020850101358060a01c615aa0578160051b6106400152600101818118611a06575b505050505b6004358060a01c615aa0576105e05260206105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611a79610780613267565b610780f35b63d905777e8118611aa35760243610615aa05761271061060052600061062052611b36565b634abe41378118611ac85760443610615aa05760243561060052600061062052611b36565b6334b5fab68118611bd15760843610615aa05760243561060052604435600401600a813511615aa05780358061062052600081600a8111615aa0578015611b3157905b8060051b6020850101358060a01c615aa0578160051b6106400152600101818118611b0b575b505050505b6004358060a01c615aa0576105e0526105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611b7c610780613267565b610780516107c05260026107e0526107c05160a0526107e05160c052611ba36107a0612b71565b6107a051600e6105e05160205260005260406000205480828118828410021890509050610800526020610800f35b630a28a4778118611c015760243610615aa057602060043560a052600260c052611bfc610160612b71565b610160f35b634cdad5068118611c315760243610615aa057602060043560a052600160c052611c2c610140612a9a565b610140f35b63258294108118611cb95760043610615aa05760208060805260056040527f332e302e3100000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6366d3ae578118611d1a5760443610615aa0576004358060a01c615aa0576101205260243560016101205160205260005260406000206002810190505410615aa057602061012051604052602435606052611d15610140613134565b610140f35b630952864e8118611d395760043610615aa05760225460405260206040f35b632d6326928118611d585760043610615aa05760235460405260206040f35b635141eebb8118611d775760043610615aa05760245460405260206040f35b638afca8f08118611d965760043610615aa05760255460405260206040f35b633644e5158118611dbb5760043610615aa0576020611db661018061250d565b610180f35b632dd310008118611de25760043610615aa0576020615af260003960005160405260206040f35b6339ebf8238118611e375760243610615aa0576004358060a01c615aa0576040526001604051602052600052604060002080546060526001810154608052600281015460a052600381015460c0525060806060f35b638bf03b9e8118611e645760243610615aa057600435600254811015615aa0576003015460405260206040f35b631e56558d8118611e835760043610615aa057600d5460405260206040f35b63dd62ed3e8118611edd5760443610615aa0576004358060a01c615aa0576040526024358060a01c615aa057606052600f604051602052600052604060002080606051602052600052604060002090505460805260206080f35b633940e9ee8118611efc5760043610615aa05760105460405260206040f35b63356d64098118611f1b5760043610615aa05760135460405260206040f35b63e46a57978118611f3a5760043610615aa05760145460405260206040f35b634fb3ccc58118611f595760043610615aa05760155460405260206040f35b6361c2ccf48118611f785760043610615aa05760165460405260206040f35b63f5ba68f38118611f975760043610615aa05760175460405260206040f35b63993746428118611fd25760243610615aa0576004358060a01c615aa057604052601860405160205260005260406000205460605260206060f35b63f3789e45811861200d5760243610615aa05760043580600e1c615aa057604052601960405160205260005260406000205460605260206060f35b6379b98917811861202c5760043610615aa057601a5460405260206040f35b639a98f418811861204b5760043610615aa057601b5460405260206040f35b6306fdde0381186120d05760043610615aa05760208060405280604001601c5480825260208201600082601f0160051c60028111615aa05780156120a257905b80601d01548160051b84015260010181811861208b575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186121285760043610615aa05760208060405280604001601f5480825260208201602054815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b637ecebe0081186121635760243610615aa0576004358060a01c615aa057604052602660405160205260005260406000205460605260206060f35b505b60006000fd5b608051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a36001815250565b600f60c05160205260005260406000208060e0516020526000526040600020905054610120527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61012051146122b5576101005161012051101561228d576016610140527f696e73756666696369656e7420616c6c6f77616e6365000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b60c05160405260e0516060526101005161012051036080526122b061014061216b565b610140505b565b600e60405160205260005260406000205460a05260805160a051101561233457601260c0527f696e73756666696369656e742066756e6473000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60805160a05103600e604051602052600052604060002055608051600e60605160205260005260406000205401600e6060516020526000526040600020556060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160c052602060c0a3565b6101805160c0523360e0526101c051610100526123c16121c9565b610180516040526101a0516060526101c0516080526123de6122b7565b6001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808201828110615aa0579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808203828111615aa0579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8160e00152602081019050600b6040527f596561726e205661756c7400000000000000000000000000000000000000000060605260408051602082012090508160e0015260208101905060056080527f332e302e3100000000000000000000000000000000000000000000000000000060a05260808051602082012090508160e00152602081019050468160e00152602081019050308160e001526020810190508060c05260c09050805160208201209050815250565b6101805161265557600d610260527f696e76616c6964206f776e6572000000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b426101e05110156126c657600e610260527f7065726d697420657870697265640000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60266101805160205260005260406000205461026052600060026102a0527f19010000000000000000000000000000000000000000000000000000000000006102c0526102a080516020820183610400018151815250508083019250505061272f6102e061250d565b6102e05181610400015260208101905060007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9816103200152602081019050610180518161032001526020810190506101a0518161032001526020810190506101c051816103200152602081019050610260518161032001526020810190506101e05181610320015260208101905080610300526103009050805160208201209050816104000152602081019050806103e0526103e090508051602082012090506102805261018051610280516102a052610200516102c052610220516102e05261024051610300526020600060806102a060015afa506000511815612895576011610340527f696e76616c6964207369676e61747572650000000000000000000000000000006103605261034050610340518061036001601f826000031636823750506308c379a061030052602061032052601f19601f61034051011660440161031cfd5b6101c051600f610180516020526000526040600020806101a05160205260005260406000209050556102605160018101818110615aa05790506026610180516020526000526040600020556101a051610180517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256101c0516102a05260206102a0a36001815250565b600e60605160205260005260406000208054604051808203828111615aa057905090508155506040516010540360105560006060517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a37fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb60405160805260206080a1565b602354604052600060605242604051116129e05760405115612a1757600e30602052600052604060002054606052612a17565b60245442602554808203828111615aa05790509050808202811583838304141715615aa0579050905064e8d4a51000810490506060525b606051815250565b601054612a2c60806129ad565b608051808203828111615aa05790509050815250565b612a4c60c06129ad565b60c05160a05260a051612a5e57612a7f565b426023541115612a6d57426025555b60a05160405230606052612a7f61291e565b565b601254601154808201828110615aa05790509050815250565b60a05119612aa9576001612aae565b60a051155b15612abe5760a051815250612b6f565b612ac9610100612a1f565b6101005160e05260e051612ae25760a051815250612b6f565b60a051612af0610120612a81565b61012051808202811583838304141715615aa05790509050610100526101005160e0518015615aa0578082049050905061012052600260c05118612b49576101005160e0518015615aa057808206905090501515612b4c565b60005b15612b67576101205160018101818110615aa0579050610120525b610120518152505b565b60a05119612b80576001612b85565b60a051155b15612b955760a051815250612c65565b612ba0610100612a1f565b6101005160e052612bb2610120612a81565b610120516101005261010051612be25760e051612bd85760a051815250612c6556612be2565b6000815250612c65565b60a05160e051808202811583838304141715615aa057905090506101205261012051610100518015615aa0578082049050905061014052600260c05118612c3f5761012051610100518015615aa057808206905090501515612c42565b60005b15612c5d576101405160018101818110615aa0579050610140525b610140518152505b565b60405163095ea7b360a05260605160c05260805160e052602060a0604460bc6000855af1612c9a573d600060003e3d6000fd5b3d612cb157803b15615aa057600161010052612cc9565b60203d10615aa05760a0518060011c615aa057610100525b610100905051612d3757600f610120527f617070726f76616c206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b6040516323b872dd60c05260605160e0526080516101005260a05161012052602060c0606460dc6000855af1612d74573d600060003e3d6000fd5b3d612d8b57803b15615aa057600161014052612da3565b60203d10615aa05760c0518060011c615aa057610140525b610140905051612e1357600f610160527f7472616e73666572206661696c656400000000000000000000000000000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b565b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc6000855af1612e48573d600060003e3d6000fd5b3d612e5f57803b15615aa057600161010052612e77565b60203d10615aa05760a0518060011c615aa057610100525b610100905051612ee557600f610120527f7472616e73666572206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b604051600e60605160205260005260406000205401600e606051602052600052604060002055601054604051808201828110615aa0579050905060105560605160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b612f62610100612a1f565b6101005160e052612f74610120612a81565b610120516101005260006101205260e051612f955760a05161012052613058565b60a05161010051116130175760a051610100511161305857600f610140527f616d6f756e7420746f6f206869676800000000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd613058565b60a05160e051808202811583838304141715615aa057905090506101005160a051808203828111615aa057905090508015615aa05780820490509050610120525b6101205161306a576000815250613087565b6101205160405260c05160605261307f612ee7565b610120518152505b565b6040518061309857600161309d565b308118155b9050156130ae576000815250613132565b601654606052606051156130fc5760605163320704ed60805260405160a052602060806024609c845afa6130e7573d600060003e3d6000fd5b60203d10615aa0576080905051815250613132565b61310660a0612a81565b60a05160805260145460a05260a05160805110613127576000815250613132565b60805160a051038152505b565b60016040516020526000526040600020600281019050546080526040516370a0823160c0523060e052602060c0602460dc845afa613177573d600060003e3d6000fd5b60203d10615aa05760c090505160a0526040516307a2d13a60e05260a05161010052602060e0602460fc845afa6131b3573d600060003e3d6000fd5b60203d10615aa05760e090505160c05260805160c05110156131d857608051156131db565b60015b156131ea576000815250613265565b60605160c051808202811583838304141715615aa0579050905060e05260605160e0516080518015615aa05780820490509050808203828111615aa057905090506101005260e0516080518015615aa057808206905090501561325d576101005160018101818110615aa0579050610100525b610100518152505b565b600e6101405160205260005260406000205460a052600160c05261328c610300612a9a565b610300516102e05260175461030052610300511561335f576103005163c36a0eee61032052606061014051610340526101605161036052806103805280610340016000610180518083528060051b600082600a8111615aa057801561330b57905b8060051b6101a001518160051b6020880101526001018181186132ed575b5050820160200191505090508101505060206103206101c461033c845afa613338573d600060003e3d6000fd5b60203d10615aa0576103209050516102e051808281188284100218905090508152506136c8565b60125461032052610320516102e05111156136c057610320516103405260006103605260025480610380528060051b600081601f0160051c600a8111615aa05780156133c057905b80600301548160051b6103a001526001018181186133a7575b5050505061018051156133d657600d54156133d9565b60005b156133fb576101805180610380528060051b806103a0826101a060045afa5050505b600061038051600a8111615aa05780156136b557905b8060051b6103a001516104e05260016104e05160205260005260406000205461349a576011610500527f696e6163746976652073747261746567790000000000000000000000000000006105205261050050610500518061052001601f826000031636823750506308c379a06104c05260206104e052601f19601f6105005101166044016104dcfd5b6102e05161034051808203828111615aa0579050905060016104e05160205260005260406000206002810190505480828118828410021890509050610500526104e051604052610500516060526134f2610540613134565b61054051610520526104e0516307a2d13a6105a0526104e05163d905777e6105605230610580526020610560602461057c845afa613535573d600060003e3d6000fd5b60203d10615aa0576105609050516105c05260206105a060246105bc845afa613563573d600060003e3d6000fd5b60203d10615aa0576105a0905051610540526105005161052051808203828111615aa057905090506105405110156135e1576105205161054051808202811583838304141715615aa05790509050610500518015615aa05780820490509050610520526105405161052051808201828110615aa05790509050610500525b610500516135ee576136aa565b61052051156136055761270f610160511115613608565b60005b15613663576103405161050051808201828110615aa0579050905061016051808202811583838304141715615aa05790509050612710810490506103605161052051808201828110615aa057905090501115613663576136b5565b6103405161050051808201828110615aa05790509050610340526102e051610340511061368f576136b5565b6103605161052051808201828110615aa05790509050610360525b600101818118613411575b5050610340516102e0525b6102e0518152505b565b602154615aa0576101c0516040526136e3610200613089565b610200516101e0511115613757576014610220527f657863656564206465706f736974206c696d69740000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615ab260003960005160405233606052306080526101e05160a05261377c612d39565b6012546101e051808201828110615aa057905090506012556101e05160a0526101c05160c0526137ad610220612f57565b610220516102005261020051613823576010610220527f63616e6e6f74206d696e74207a65726f000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76101e0516102205261020051610240526040610220a361020051815250565b602154615aa0576101e05160a052600260c052613889610220612a9a565b6102205161020052610200516138ff576013610220527f63616e6e6f74206465706f736974207a65726f000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c051604052613911610220613089565b61022051610200511115613985576014610240527f657863656564206465706f736974206c696d69740000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b6020615ab260003960005160405233606052306080526102005160a0526139aa612d39565b60125461020051808201828110615aa057905090506012556101e0516040526101c0516060526139d8612ee7565b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d761020051610220526101e051610240526040610220a361020051815250565b604051630a28a47760a05260605160c052602060a0602460bc845afa613a4b573d600060003e3d6000fd5b60203d10615aa05760a09050516040516370a0823160e0523061010052602060e0602460fc845afa613a82573d600060003e3d6000fd5b60203d10615aa05760e09050518082811882841002189050905060805260405163ba08765260a05260805160c0523060e0523061010052602060a0606460bc6000855af1613ad5573d600060003e3d6000fd5b60203d10615aa05760a05050565b61060051613b5157600c610800527f5a45524f204144445245535300000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b612710610680511115613bc4576008610800527f6d6178206c6f73730000000000000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b60175415613c7757610620516101405261068051610160526106a05180610180528060051b806101a0826106c060045afa505050613c03610800613267565b61080051610640511115613c77576015610820527f657863656564207769746864726177206c696d697400000000000000000000006108405261082050610820518061084001601f826000031636823750506308c379a06107e052602061080052601f19601f6108205101166044016107fcfd5b6106605161080052600e610620516020526000526040600020546108205261080051613d03576013610840527f6e6f2073686172657320746f2072656465656d000000000000000000000000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b61080051610820511015613d7757601d610840527f696e73756666696369656e742073686172657320746f2072656465656d0000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b610620516105e05114613da2576106205160c0526105e05160e0526106605161010052613da26121c9565b610640516108405260125461086052610860516108405111156144385760025480610880528060051b600081601f0160051c600a8111615aa0578015613dfd57905b80600301548160051b6108a00152600101818118613de4575b505050506106a05115613e1357600d5415613e16565b60005b15613e38576106a05180610880528060051b806108a0826106c060045afa5050505b6011546109e052610860516108405103610a00526000610a20526020615ab26000396000516370a08231610a605230610a80526020610a606024610a7c845afa613e87573d600060003e3d6000fd5b60203d10615aa057610a60905051610a4052600061088051600a8111615aa05780156143ba57905b8060051b6108a00151610a60526001610a6051602052600052604060002054613f38576011610a80527f696e616374697665207374726174656779000000000000000000000000000000610aa052610a8050610a805180610aa001601f826000031636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b6001610a6051602052600052604060002060028101905054610a8052610a0051610a805180828118828410021890509050610a2052610a60516307a2d13a610b0052610a605163d905777e610ac05230610ae0526020610ac06024610adc845afa613fa8573d600060003e3d6000fd5b60203d10615aa057610ac0905051610b20526020610b006024610b1c845afa613fd6573d600060003e3d6000fd5b60203d10615aa057610b00905051610aa052610a6051604052610a2051606052614001610ae0613134565b610ae051610ac052610ac0511561418d57610a2051610ac051808203828111615aa05790509050610aa051101561409857610a2051610ac051808203828111615aa05790509050610ae052610ac051610aa051808202811583838304141715615aa05790509050610ae0518015615aa05780820490509050610ac052610aa051610ac051808201828110615aa05790509050610a20525b610a2051610ac051808203828111615aa05790509050610a205261084051610ac051808203828111615aa0579050905061084052610a0051610ac051808203828111615aa05790509050610a00526109e051610ac051808203828111615aa057905090506109e052610aa05161411357610ac0511515614116565b60005b1561418d57610a8051610ac051808203828111615aa05790509050610ae052610ae0516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b0052610ae051610b20526040610b00a25b610a2051610aa05180828118828410021890509050610a2052610a20516141b3576143af565b610a6051604052610a20516060526141c9613a20565b6020615ab26000396000516370a08231610b005230610b20526020610b006024610b1c845afa6141fe573d600060003e3d6000fd5b60203d10615aa057610b00905051610ae052610ae051610a4051808203828111615aa05790509050610b00526000610b2052610a2051610b00511161425d57610a2051610b0051101561429757610b0051610a205103610b2052614297565b610a8051610b00511161428e57610a2051610a2051610b005103808201828110615aa05790509050610a2052614297565b610a8051610a20525b61086051610a2051610b2051808203828111615aa05790509050808201828110615aa057905090506108605261084051610b2051808203828111615aa05790509050610840526109e051610a2051808203828111615aa057905090506109e052610a8051610a2051610ac051808201828110615aa05790509050808203828111615aa05790509050610b4052610b40516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b6052610b4051610b80526040610b60a261086051610840511161438c576143ba565b610ae051610a4052610a0051610a2051808203828111615aa05790509050610a00525b600101818118613eaf575b50506108405161086051101561443057601c610a60527f696e73756666696369656e742061737365747320696e207661756c7400000000610a8052610a6050610a605180610a8001601f826000031636823750506308c379a0610a20526020610a4052601f19601f610a60510116604401610a3cfd5b6109e0516011555b61084051610640511161444c576000614456565b61270f6106805111155b15614500576106405161068051808202811583838304141715615aa05790509050612710810490506106405161084051808203828111615aa05790509050111561450057600d610880527f746f6f206d756368206c6f7373000000000000000000000000000000000000006108a0526108805061088051806108a001601f826000031636823750506308c379a061084052602061086052601f19601f61088051011660440161085cfd5b610800516040526106205160605261451661291e565b6108605161084051808203828111615aa057905090506012556020615ab26000396000516040526106005160605261084051608052614553612e15565b61062051610600516105e0517ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db6108405161088052610800516108a0526040610880a461084051815250565b6040513081146145b1578015156145b4565b60005b905061461757601f6080527f73747261746567792063616e6e6f74206265207a65726f20616464726573730060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6020615ab26000396000516040516338d52e0f606052602060606004607c845afa614647573d600060003e3d6000fd5b60203d10615aa0576060518060a01c615aa05760a05260a090505118156146c557600d60c0527f696e76616c69642061737365740000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6001604051602052600052604060002054156147385760176060527f737472617465677920616c72656164792061637469766500000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600160405160205260005260406000204281554260018201556000600282015560006003820155506009600254116147865760025460098111615aa057600181016002556040518160030155505b60016040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca60006060a3565b60016040516020526000526040600020546148255760136080527f7374726174656779206e6f74206163746976650000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6000608052600160405160205260005260406000206002810190505415614916576060516148aa57601160a0527f737472617465677920686173206465627400000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b6001604051602052600052604060002060028101905054608052601154608051808203828111615aa057905090506011556040517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d267811600060a05260805160c05260803660e03760c060a0a25b600160405160205260005260406000206000815560006001820155600060028201556000600382015550600060a0526000600254600a8111615aa057801561499a57905b806003015461020052604051610200511461498f5760a05160098111615aa0576001810160a052610200518160051b60c00152505b60010181811861495a575b505060a051806002558060051b600081601f0160051c600a8111615aa05780156149d857905b8060051b60c0015181600301556001018181186149c0575b5050505060026040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca6000610200a3565b610180516101a0526001610160516020526000526040600020600281019050546101c05260215415614a3d5760006101a0525b6101c0516101a05118614ab057601c6101e0527f6e6577206465627420657175616c732063757272656e74206465627400000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101a0516101c05111614e55576001610160516020526000526040600020600381019050546101a0511115614b455760206101e0527f746172676574206465627420686967686572207468616e206d61782064656274610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101605163402d267d6102005230610220526020610200602461021c845afa614b73573d600060003e3d6000fd5b60203d10615aa0576102009050516101e0526101e051614bf3576012610200527f6e6f7468696e6720746f206465706f73697400000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101a0516101c051808203828111615aa05790509050610200526101e051610200511115614c24576101e051610200525b6013546102205260125461024052610220516102405111614ca5576013610260527f6e6f2066756e647320746f206465706f736974000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6102205161024051036102605261026051610200511115614cc95761026051610200525b6102005115614e36576020615ab26000396000516040526101605160605261020051608052614cf6612c67565b6020615ab26000396000516370a082316102a052306102c05260206102a060246102bc845afa614d2b573d600060003e3d6000fd5b60203d10615aa0576102a09050516102805261016051636e553f656102a052610200516102c052306102e05260206102a060446102bc6000855af1614d75573d600060003e3d6000fd5b60203d10615aa0576102a050506020615ab26000396000516370a082316102c052306102e05260206102c060246102dc845afa614db7573d600060003e3d6000fd5b60203d10615aa0576102c09050516102a0526020615ab2600039600051604052610160516060526000608052614deb612c67565b610280516102a051808203828111615aa057905090506102005260125461020051808203828111615aa0579050905060125560115461020051808201828110615aa057905090506011555b6101c05161020051808201828110615aa057905090506101a052615175565b6101a0516101c051036101e052601354610200526012546102205261020051610220516101e051808201828110615aa057905090501015614eb4576102205161020051036101e0526101c0516101e0511115614eb4576101c0516101e0525b610160516307a2d13a6102a0526101605163d905777e6102605230610280526020610260602461027c845afa614eef573d600060003e3d6000fd5b60203d10615aa0576102609050516102c05260206102a060246102bc845afa614f1d573d600060003e3d6000fd5b60203d10615aa0576102a09050516102405261024051614f9d576013610260527f6e6f7468696e6720746f207769746864726177000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6101e051610240511015614fb457610240516101e0525b610160516040526101e051606052614fcd610280613134565b6102805161026052610260511561504457601e610280527f73747261746567792068617320756e7265616c69736564206c6f7373657300006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b6020615ab26000396000516370a082316102a052306102c05260206102a060246102bc845afa615079573d600060003e3d6000fd5b60203d10615aa0576102a090505161028052610160516040526101e0516060526150a1613a20565b6020615ab26000396000516370a082316102c052306102e05260206102c060246102dc845afa6150d6573d600060003e3d6000fd5b60203d10615aa0576102c09050516102a0526102a05161028051808203828111615aa057905090506101c051808281188284100218905090506102c0526101e0516102c051111561512a576102c0516101e0525b6012546102c051808201828110615aa057905090506012556011546101e051808203828111615aa057905090506011556101c0516101e051808203828111615aa057905090506101a0525b6101a051600161016051602052600052604060002060028101905055610160517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c0516101e0526101a0516102005260406101e0a26101a051815250565b60016101a0516020526000526040600020546152515760116101c0527f696e6163746976652073747261746567790000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b615259612a42565b6101a0516370a082316101e052306102005260206101e060246101fc845afa615287573d600060003e3d6000fd5b60203d10615aa0576101e09050516101c0526101a0516307a2d13a610200526101c051610220526020610200602461021c845afa6152ca573d600060003e3d6000fd5b60203d10615aa0576102009050516101e05260016101a0516020526000526040600020600281019050546102005260403661022037610200516101e0511161531e576101e05161020051036102405261532c565b610200516101e05103610220525b608036610260376015546102e0526102e05115615452576102e05163921f8a8f610300526101a05161032052610220516103405261024051610360526040610300606461031c6000855af1615386573d600060003e3d6000fd5b60403d10615aa0576103009050805161026052602081015161028052506102605115615452576000610300526020615af2600039600051635153b199610320526040610320600461033c845afa6153e2573d600060003e3d6000fd5b60403d10615aa057610320518060101c615aa05761038052610340518060a01c615aa0576103a052610380905080516103005260208101516102c0525060016103005112615452576102605161030051808202811583838304141715615aa05790509050612710810490506102a0525b606036610300376102405161026051808201828110615aa057905090501561551a57610300516102405161026051808201828110615aa0579050905060a052600260c0526154a1610360612b71565b61036051808201828110615aa0579050905061030052610260511561551a57610260516102a051808203828111615aa0579050905060a052600160c0526154e9610360612b71565b61036051610320526102a0511561551a576102a05160a052600160c052615511610360612b71565b61036051610340525b600061036052610280511561561d57610280516020615ab26000396000516370a08231610380526102e0516103a0526020610380602461039c845afa615565573d600060003e3d6000fd5b60203d10615aa0576103809050516020615ab260003960005163dd62ed3e6103c0526102e0516103e052306104005260206103c060446103dc845afa6155b0573d600060003e3d6000fd5b60203d10615aa0576103c09050518082811882841002189050905080828118828410021890509050610280526020615ab26000396000516040526102e051606052306080526102805160a052615604612d39565b60125461028051808201828110615aa057905090506012555b610220511561566d5760016101a0516020526000526040600020600281019050805461022051808201828110615aa0579050905081555060115461022051808201828110615aa057905090506011555b602254610380526102205161028051808201828110615aa057905090501561569a5761038051151561569d565b60005b156156d3576102205161028051808201828110615aa0579050905060a0523060c0526156ca6103a0612f57565b6103a051610360525b61024051156157235760016101a0516020526000526040600020600281019050805461024051808203828111615aa0579050905081555060115461024051808203828111615aa057905090506011555b600e3060205260005260406000205461036051808203828111615aa057905090506103a05261030051156157ef57610300516103a05161036051808201828110615aa057905090508082811882841002189050905061030052610300516040523060605261578f61291e565b6103005161036051808281188284100218905090506103c052610360516103c051808203828111615aa05790509050610360526103a051610300516103c051808203828111615aa05790509050808203828111615aa057905090506103a0525b610320511561580e57610320516040526102e05160605261580e612ee7565b610340511561582d57610340516040526102c05160605261582d612ee7565b6103a05161036051808201828110615aa057905090506103c0526103c0511561592a5760006103e0526023546104005242610400511115615898576103a0516104005142808203828111615aa05790509050808202811583838304141715615aa057905090506103e0525b6103e0516103605161038051808202811583838304141715615aa05790509050808201828110615aa057905090506103c0518015615aa05780820490509050610420526103c05164e8d4a5100081028164e8d4a51000820418615aa0579050610420518015615aa057808204905090506024554261042051808201828110615aa0579050905060235542602555615930565b60006024555b4260016101a0516020526000526040600020600181019050556101a0517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d2678116102205161042052610240516104405260016101a051602052600052604060002060028101905054610460526103405160a052600160c0526159b16103e0612a9a565b6103e051610480526103405161032051808201828110615aa0579050905060a052600160c0526159e2610400612a9a565b610400516104a052610280516104c05260c0610420a261022051815261024051602082015250565b60186040516020526000526040600020546060511615615a2b576001615a3d565b60196060516020526000526040600020545b615a9e57600b6080527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b600080fda165767970657283000307000b005b600080fd0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000882c39380ab06f52b89a55e3fb75949f5d460ca40000000000000000000000000000000000000000000000000000000000093a800000000000000000000000000000000000000000000000000000000000000014596561726e2d416a6e6120444149205661756c7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000097976416a6e614441490000000000000000000000000000000000000000000000\"\n ]\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + } + ] + } + ] + } + ] + }, + { + "name": "overlay_getLogs", + "item": [ + { + "name": "ethereum", + "item": [ + { + "name": "WETH [0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": 1,", + " \"result\": [", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000007ca898cbbed67df0b4e249b05561d3a23404eed0\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000ded149b946ec050\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x36eae59c15502d6d286d78fef1a5b2d7c349ce236f37983526d033a9f8a3fb60\",", + " \"transactionIndex\": \"0x2\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x2\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007ca898cbbed67df0b4e249b05561d3a23404eed0\",", + " \"0x000000000000000000000000b7426bfd2abf64428fa82a71b0d44b056ffcc286\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000ded149b946ec050\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x36eae59c15502d6d286d78fef1a5b2d7c349ce236f37983526d033a9f8a3fb60\",", + " \"transactionIndex\": \"0x2\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x3\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000006f1cdbbb4d53d226cf4b917bf768b94acbab6168\",", + " \"0x000000000000000000000000a3f558aebaecaf0e11ca4b2199cc5ed341edfd74\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000938a07f61f9be133\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x88ce2762b96fc559c11d7340b2efb9dffd606e6b8a7b0481b6844332bc12296d\",", + " \"transactionIndex\": \"0x6\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x8\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc\",", + " \"0x000000000000000000000000dc900845732a53ee8df737efa282a6bc56976e62\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002eb6d33f630f0ae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe34ab697794df9f7a3bb20fcfecf13dd77037ed17601ef8397c15590da64b5b3\",", + " \"transactionIndex\": \"0x7\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x8895a3d74f164ee25fc5cc7ee16ffb894efc46387bbca161da8bf38235922c15\",", + " \"transactionIndex\": \"0xc\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x15\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\",", + " \"0x0000000000000000000000008dbee21e8586ee356130074aaa789c33159921ca\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x8895a3d74f164ee25fc5cc7ee16ffb894efc46387bbca161da8bf38235922c15\",", + " \"transactionIndex\": \"0xc\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x16\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000002cc846fff0b08fb3bffad71f53a60b4b6e6d6482\",", + " \"0x0000000000000000000000000b8a49d816cc709b6eadb09498030ae3416b66dc\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000096389457142eb5\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x1f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000b8a49d816cc709b6eadb09498030ae3416b66dc\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x22\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x23\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\",", + " \"0x00000000000000000000000008b067ad41e45babe5bbb52fc2fe7f692f628b06\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x24\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x00000000000000000000000008b067ad41e45babe5bbb52fc2fe7f692f628b06\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x25\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000086d45f29d20dcd09f3643963199f4039030f69de\",", + " \"0x0000000000000000000000003328f7f4a1d1c57c35df56bbf0c9dcafca309c49\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000aead8b9dd68fae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x9c1dbbc41c6df8cf71fa2ea18b0a5f2ba80cc82fe479ee07865df77fc2a23435\",", + " \"transactionIndex\": \"0x15\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x3d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003328f7f4a1d1c57c35df56bbf0c9dcafca309c49\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000aead8b9dd68fae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x9c1dbbc41c6df8cf71fa2ea18b0a5f2ba80cc82fe479ee07865df77fc2a23435\",", + " \"transactionIndex\": \"0x15\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x40\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a741a46278000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4d94b1df9a18dba0a34ab80c1b558824fa109a839babf40cdd7253334a22dc51\",", + " \"transactionIndex\": \"0x1b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x4f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000efd69f1ff464ed673dab856c5b9bca4d2847a74f\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a741a46278000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4d94b1df9a18dba0a34ab80c1b558824fa109a839babf40cdd7253334a22dc51\",", + " \"transactionIndex\": \"0x1b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x51\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000080a64c6d7f12c47b7c66c5b4e20e72bc1fcd5d9e\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a98f10b6a5c38\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf3dc076738c39963762a384ec8dd61bca04a3ecad2af45a56db03d9f610b8622\",", + " \"transactionIndex\": \"0x2a\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x5e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000080a64c6d7f12c47b7c66c5b4e20e72bc1fcd5d9e\",", + " \"0x0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f1852\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a98f10b6a5c38\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf3dc076738c39963762a384ec8dd61bca04a3ecad2af45a56db03d9f610b8622\",", + " \"transactionIndex\": \"0x2a\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x5f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe61db601fd6fdc4d2bffed233d33879da62d9b268aceb61f1ff6dcd1116743d5\",", + " \"transactionIndex\": \"0x2e\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x6f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000018c55910ae4178517b7eb31da8a4f69de784ee4\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe61db601fd6fdc4d2bffed233d33879da62d9b268aceb61f1ff6dcd1116743d5\",", + " \"transactionIndex\": \"0x2e\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x70\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000002d722c96f79d149dd21e9ef36f93fc12906ce9f8\",", + " \"0x000000000000000000000000824a30f2984f9013f2c8d0a29c0a3cc5fd5c0673\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000027b3664000000000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x522737b97543da36e315057ad5a69fa09891dcae6ce939560bc2c092d8ee171d\",", + " \"transactionIndex\": \"0x30\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x76\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc\",", + " \"0x000000000000000000000000a76a9baa3cc9dacd86852bea6c4ae8c63e70c4a4\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000003535e7abf72c3a1a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x16789dae02a4de8bc1d10a081e8d2da0bf915482060b5752da236e760ee431cc\",", + " \"transactionIndex\": \"0x47\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x7c\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a76a9baa3cc9dacd86852bea6c4ae8c63e70c4a4\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000080406307296259e\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xac\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\",", + " \"0x00000000000000000000000060594a405d53811d3bc4766596efd80fd545a270\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000007ce84be4e158e4e\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xaf\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000035817224809750\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb1\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b2843c7133289541086fa41673850dbf61cac6db\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002cdce5fdafd47fb\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0039adedc19a87664fd8e559b5934b1440c0dfd29b4e78523f08507eac967bc4\",", + " \"transactionIndex\": \"0x50\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002cdce5fdafd47fb\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0039adedc19a87664fd8e559b5934b1440c0dfd29b4e78523f08507eac967bc4\",", + " \"transactionIndex\": \"0x50\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb9\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f6\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000007735acf51f981221\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x54ba39687c7446d58a0a0035d1dc8a7f92dc73a797a8ae39dd1ebac7e0c26944\",", + " \"transactionIndex\": \"0x53\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xbb\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000001df4c6e36d61416813b42fe32724ef11e363eddc\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000007735acf51f981221\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x54ba39687c7446d58a0a0035d1dc8a7f92dc73a797a8ae39dd1ebac7e0c26944\",", + " \"transactionIndex\": \"0x53\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xc0\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007fdeb46b3a0916630f36e886d675602b1007fcbb\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000bca3e3ff0ab63b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xd1\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\",", + " \"0x000000000000000000000000c7bbec68d12a0d1830360f8ec58fa599ba1b0e9b\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000bac4f6bb538a84f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xd4\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000001deed43b72bb62\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xd6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\",", + " \"0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000da2da3a73f2a4e9\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x7092a0961840ecbb2a85707ef54ae9af473f62e32a4f6dea4bb5ac1de8a8e688\",", + " \"transactionIndex\": \"0x66\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xda\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000da2da3a73f2a4e9\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x7092a0961840ecbb2a85707ef54ae9af473f62e32a4f6dea4bb5ac1de8a8e688\",", + " \"transactionIndex\": \"0x66\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xdd\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a6cc3c2531fdaa6ae1a3ca84c2855806728693e8\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000014e0a0120ca6c1b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf2d5624eed5463be5213383d41b67f45dfd82e5ea236694e777bcd1f4c9b65b5\",", + " \"transactionIndex\": \"0x68\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xec\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000098409d8ca9629fbe01ab1b914ebf304175e384c8\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000014e0a0120ca6c1b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf2d5624eed5463be5213383d41b67f45dfd82e5ea236694e777bcd1f4c9b65b5\",", + " \"transactionIndex\": \"0x68\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xf1\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016345785d8a0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xbaa3d316c8b7dbd1f1e9074b45d134c61ea300ab3e3069ea0227e0c5a876d3aa\",", + " \"transactionIndex\": \"0x6b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xf5\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000d420d5f24225702a68ddf21242d5eef816dc2e6d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016345785d8a0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xbaa3d316c8b7dbd1f1e9074b45d134c61ea300ab3e3069ea0227e0c5a876d3aa\",", + " \"transactionIndex\": \"0x6b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xf6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007c6776bac3ea54878a2ddc3fd1c26ef87c8f255f\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000876b642dcffd7a6\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xfe816dc35d26b6bafa7f42ebf20e2b8de83ff5b1b09065c468710d174e8ec046\",", + " \"transactionIndex\": \"0x6c\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xfb\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000876b642dcffd7a6\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xfe816dc35d26b6bafa7f42ebf20e2b8de83ff5b1b09065c468710d174e8ec046\",", + " \"transactionIndex\": \"0x6c\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x106\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016029a98d5c5000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4709637a2c72368ee67597523989616b393c705bb02c65f43668a36e831cab6e\",", + " \"transactionIndex\": \"0x6d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x107\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\",", + " \"0x000000000000000000000000a7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016029a98d5c5000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4709637a2c72368ee67597523989616b393c705bb02c65f43668a36e831cab6e\",", + " \"transactionIndex\": \"0x6d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x108\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000088c8af198be09abac868d43f4e45540e8227b092\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000015af1d78b58c40000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x57a6f8aa223c748eb9ffeba309b7a2ba86ac24528e2415fbeb82e208dcc40b3f\",", + " \"transactionIndex\": \"0x6f\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x111\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000012f4832934a1800\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x312a6d36851729f53f54a49e59fe89e0fb0ca89d6b7e405c8b48f4abbd10ade9\",", + " \"transactionIndex\": \"0x71\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x113\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000001037fa1f40b69c9266c4aeb2abcedc7553614b4c\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000012f4832934a1800\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x312a6d36851729f53f54a49e59fe89e0fb0ca89d6b7e405c8b48f4abbd10ade9\",", + " \"transactionIndex\": \"0x71\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x114\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000dc900845732a53ee8df737efa282a6bc56976e62\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000aaf96eb9d0d0001\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x11b\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000001df4c6e36d61416813b42fe32724ef11e363eddc\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000013d8616c6ccf0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x11e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001e87f85809dc0001\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x121\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000470de4df820000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x953bd02465db847a1567fcd5177eb53db3aecce5caff9f057900db2463a44edd\",", + " \"transactionIndex\": \"0x78\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x12c\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000058025c79662e81f1ee72bce632511faf4e6aee01\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000470de4df820000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x953bd02465db847a1567fcd5177eb53db3aecce5caff9f057900db2463a44edd\",", + " \"transactionIndex\": \"0x78\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x12d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000d420d5f24225702a68ddf21242d5eef816dc2e6d\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000048152b3a075e65f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0c10ec18641834af74ae696eff380ff215128da4f2c989b5bee495650830a3fe\",", + " \"transactionIndex\": \"0x79\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x132\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000048152b3a075e65f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0c10ec18641834af74ae696eff380ff215128da4f2c989b5bee495650830a3fe\",", + " \"transactionIndex\": \"0x79\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x135\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007b8ac38aacd8ebca19b3d423bcbbd4c5815bab49\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007970b09df7ee8a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x13a\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007970b09df7ee8a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x13d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007b8ac38aacd8ebca19b3d423bcbbd4c5815bab49\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000135acbdcc2668bf\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x140\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000732276168b421d4792e743711e1a48172ea574a2\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000135acbdcc2668bf\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x147\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000071d091e35abbd51b46db179184684633581d1816\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000072ccca2b6c6a7e3\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x6bd3ecbd76f35b7e32a19355a3bb3635cd1b96bfae7ba7d77564701c6176a7ba\",", + " \"transactionIndex\": \"0x7d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x14e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000072ccca2b6c6a7e3\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x6bd3ecbd76f35b7e32a19355a3bb3635cd1b96bfae7ba7d77564701c6176a7ba\",", + " \"transactionIndex\": \"0x7d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x152\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x0000000000000000000000000000a26b00c1f0df003000390027140000faa719\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000005666e940f000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x15e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x0000000000000000000000007b0e1f31635068d522f18e241872441fad2f1a72\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000067aeb1812000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x15f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x000000000000000000000000d374f3bd4c62e92addd3692dd79708b648d3bd8d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000067aeb1812000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x160\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x000000000000000000000000ec8d211c8f9695b3b25d3ab55c47bf12898257df\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000c5a5025e25000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x161\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f1852\",", + " \"0x0000000000000000000000009ec9367b8c4dd45ec8e7b800b1f719251053ad60\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000004883288abe17e67\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x47dd6e9840debf5aee7d7de8a75a4bbde4f4c1dd324afa906949b64c28ad8a07\",", + " \"transactionIndex\": \"0x8d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x171\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000022f9dcf4647084d6c31b2765f6910cd85c178c18\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007105785dff5eb0\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x1e656c68b30903d1f6544308729fb5a4027d906ac64dd2756d22671862b19b41\",", + " \"transactionIndex\": \"0x92\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x17c\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000022f9dcf4647084d6c31b2765f6910cd85c178c18\",", + " \"0x0000000000000000000000008f1b19622a888c53c8ee4f7d7b4dc8f574ff9068\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007105785dff5eb0\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x1e656c68b30903d1f6544308729fb5a4027d906ac64dd2756d22671862b19b41\",", + " \"transactionIndex\": \"0x92\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x17d\",", + " \"removed\": false", + " }", + " ]", + "}", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : 1,\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_getLogs\",\n \"params\" : [\n {\n \"address\" : \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n \"fromBlock\" : 19218542,\n \"toBlock\" : 19218542\n },\n {\n \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\" : {\n \"code\": \"0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058208531eaba73699a54921fe3ca8ddd2f953367c4f55a4af45f1bb1eb153cf19dac0029\"\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "WETH no state overrides [0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": 1,", + " \"result\": [", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000007ca898cbbed67df0b4e249b05561d3a23404eed0\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000ded149b946ec050\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x36eae59c15502d6d286d78fef1a5b2d7c349ce236f37983526d033a9f8a3fb60\",", + " \"transactionIndex\": \"0x2\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x2\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007ca898cbbed67df0b4e249b05561d3a23404eed0\",", + " \"0x000000000000000000000000b7426bfd2abf64428fa82a71b0d44b056ffcc286\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000ded149b946ec050\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x36eae59c15502d6d286d78fef1a5b2d7c349ce236f37983526d033a9f8a3fb60\",", + " \"transactionIndex\": \"0x2\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x3\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000006f1cdbbb4d53d226cf4b917bf768b94acbab6168\",", + " \"0x000000000000000000000000a3f558aebaecaf0e11ca4b2199cc5ed341edfd74\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000938a07f61f9be133\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x88ce2762b96fc559c11d7340b2efb9dffd606e6b8a7b0481b6844332bc12296d\",", + " \"transactionIndex\": \"0x6\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x8\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc\",", + " \"0x000000000000000000000000dc900845732a53ee8df737efa282a6bc56976e62\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002eb6d33f630f0ae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe34ab697794df9f7a3bb20fcfecf13dd77037ed17601ef8397c15590da64b5b3\",", + " \"transactionIndex\": \"0x7\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x8895a3d74f164ee25fc5cc7ee16ffb894efc46387bbca161da8bf38235922c15\",", + " \"transactionIndex\": \"0xc\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x15\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\",", + " \"0x0000000000000000000000008dbee21e8586ee356130074aaa789c33159921ca\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x8895a3d74f164ee25fc5cc7ee16ffb894efc46387bbca161da8bf38235922c15\",", + " \"transactionIndex\": \"0xc\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x16\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000002cc846fff0b08fb3bffad71f53a60b4b6e6d6482\",", + " \"0x0000000000000000000000000b8a49d816cc709b6eadb09498030ae3416b66dc\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000096389457142eb5\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x1f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000b8a49d816cc709b6eadb09498030ae3416b66dc\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x22\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x23\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\",", + " \"0x00000000000000000000000008b067ad41e45babe5bbb52fc2fe7f692f628b06\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x24\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x00000000000000000000000008b067ad41e45babe5bbb52fc2fe7f692f628b06\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x25\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000086d45f29d20dcd09f3643963199f4039030f69de\",", + " \"0x0000000000000000000000003328f7f4a1d1c57c35df56bbf0c9dcafca309c49\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000aead8b9dd68fae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x9c1dbbc41c6df8cf71fa2ea18b0a5f2ba80cc82fe479ee07865df77fc2a23435\",", + " \"transactionIndex\": \"0x15\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x3d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003328f7f4a1d1c57c35df56bbf0c9dcafca309c49\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000aead8b9dd68fae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x9c1dbbc41c6df8cf71fa2ea18b0a5f2ba80cc82fe479ee07865df77fc2a23435\",", + " \"transactionIndex\": \"0x15\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x40\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a741a46278000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4d94b1df9a18dba0a34ab80c1b558824fa109a839babf40cdd7253334a22dc51\",", + " \"transactionIndex\": \"0x1b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x4f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000efd69f1ff464ed673dab856c5b9bca4d2847a74f\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a741a46278000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4d94b1df9a18dba0a34ab80c1b558824fa109a839babf40cdd7253334a22dc51\",", + " \"transactionIndex\": \"0x1b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x51\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000080a64c6d7f12c47b7c66c5b4e20e72bc1fcd5d9e\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a98f10b6a5c38\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf3dc076738c39963762a384ec8dd61bca04a3ecad2af45a56db03d9f610b8622\",", + " \"transactionIndex\": \"0x2a\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x5e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000080a64c6d7f12c47b7c66c5b4e20e72bc1fcd5d9e\",", + " \"0x0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f1852\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a98f10b6a5c38\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf3dc076738c39963762a384ec8dd61bca04a3ecad2af45a56db03d9f610b8622\",", + " \"transactionIndex\": \"0x2a\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x5f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe61db601fd6fdc4d2bffed233d33879da62d9b268aceb61f1ff6dcd1116743d5\",", + " \"transactionIndex\": \"0x2e\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x6f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000018c55910ae4178517b7eb31da8a4f69de784ee4\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe61db601fd6fdc4d2bffed233d33879da62d9b268aceb61f1ff6dcd1116743d5\",", + " \"transactionIndex\": \"0x2e\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x70\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000002d722c96f79d149dd21e9ef36f93fc12906ce9f8\",", + " \"0x000000000000000000000000824a30f2984f9013f2c8d0a29c0a3cc5fd5c0673\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000027b3664000000000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x522737b97543da36e315057ad5a69fa09891dcae6ce939560bc2c092d8ee171d\",", + " \"transactionIndex\": \"0x30\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x76\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc\",", + " \"0x000000000000000000000000a76a9baa3cc9dacd86852bea6c4ae8c63e70c4a4\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000003535e7abf72c3a1a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x16789dae02a4de8bc1d10a081e8d2da0bf915482060b5752da236e760ee431cc\",", + " \"transactionIndex\": \"0x47\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x7c\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a76a9baa3cc9dacd86852bea6c4ae8c63e70c4a4\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000080406307296259e\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xac\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\",", + " \"0x00000000000000000000000060594a405d53811d3bc4766596efd80fd545a270\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000007ce84be4e158e4e\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xaf\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000035817224809750\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb1\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b2843c7133289541086fa41673850dbf61cac6db\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002cdce5fdafd47fb\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0039adedc19a87664fd8e559b5934b1440c0dfd29b4e78523f08507eac967bc4\",", + " \"transactionIndex\": \"0x50\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002cdce5fdafd47fb\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0039adedc19a87664fd8e559b5934b1440c0dfd29b4e78523f08507eac967bc4\",", + " \"transactionIndex\": \"0x50\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb9\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f6\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000007735acf51f981221\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x54ba39687c7446d58a0a0035d1dc8a7f92dc73a797a8ae39dd1ebac7e0c26944\",", + " \"transactionIndex\": \"0x53\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xbb\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000001df4c6e36d61416813b42fe32724ef11e363eddc\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000007735acf51f981221\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x54ba39687c7446d58a0a0035d1dc8a7f92dc73a797a8ae39dd1ebac7e0c26944\",", + " \"transactionIndex\": \"0x53\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xc0\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007fdeb46b3a0916630f36e886d675602b1007fcbb\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000bca3e3ff0ab63b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xd1\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\",", + " \"0x000000000000000000000000c7bbec68d12a0d1830360f8ec58fa599ba1b0e9b\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000bac4f6bb538a84f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xd4\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000001deed43b72bb62\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xd6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\",", + " \"0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000da2da3a73f2a4e9\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x7092a0961840ecbb2a85707ef54ae9af473f62e32a4f6dea4bb5ac1de8a8e688\",", + " \"transactionIndex\": \"0x66\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xda\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000da2da3a73f2a4e9\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x7092a0961840ecbb2a85707ef54ae9af473f62e32a4f6dea4bb5ac1de8a8e688\",", + " \"transactionIndex\": \"0x66\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xdd\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a6cc3c2531fdaa6ae1a3ca84c2855806728693e8\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000014e0a0120ca6c1b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf2d5624eed5463be5213383d41b67f45dfd82e5ea236694e777bcd1f4c9b65b5\",", + " \"transactionIndex\": \"0x68\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xec\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000098409d8ca9629fbe01ab1b914ebf304175e384c8\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000014e0a0120ca6c1b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf2d5624eed5463be5213383d41b67f45dfd82e5ea236694e777bcd1f4c9b65b5\",", + " \"transactionIndex\": \"0x68\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xf1\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016345785d8a0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xbaa3d316c8b7dbd1f1e9074b45d134c61ea300ab3e3069ea0227e0c5a876d3aa\",", + " \"transactionIndex\": \"0x6b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xf5\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000d420d5f24225702a68ddf21242d5eef816dc2e6d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016345785d8a0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xbaa3d316c8b7dbd1f1e9074b45d134c61ea300ab3e3069ea0227e0c5a876d3aa\",", + " \"transactionIndex\": \"0x6b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xf6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007c6776bac3ea54878a2ddc3fd1c26ef87c8f255f\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000876b642dcffd7a6\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xfe816dc35d26b6bafa7f42ebf20e2b8de83ff5b1b09065c468710d174e8ec046\",", + " \"transactionIndex\": \"0x6c\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xfb\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000876b642dcffd7a6\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xfe816dc35d26b6bafa7f42ebf20e2b8de83ff5b1b09065c468710d174e8ec046\",", + " \"transactionIndex\": \"0x6c\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x106\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016029a98d5c5000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4709637a2c72368ee67597523989616b393c705bb02c65f43668a36e831cab6e\",", + " \"transactionIndex\": \"0x6d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x107\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\",", + " \"0x000000000000000000000000a7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016029a98d5c5000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4709637a2c72368ee67597523989616b393c705bb02c65f43668a36e831cab6e\",", + " \"transactionIndex\": \"0x6d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x108\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000088c8af198be09abac868d43f4e45540e8227b092\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000015af1d78b58c40000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x57a6f8aa223c748eb9ffeba309b7a2ba86ac24528e2415fbeb82e208dcc40b3f\",", + " \"transactionIndex\": \"0x6f\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x111\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000012f4832934a1800\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x312a6d36851729f53f54a49e59fe89e0fb0ca89d6b7e405c8b48f4abbd10ade9\",", + " \"transactionIndex\": \"0x71\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x113\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000001037fa1f40b69c9266c4aeb2abcedc7553614b4c\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000012f4832934a1800\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x312a6d36851729f53f54a49e59fe89e0fb0ca89d6b7e405c8b48f4abbd10ade9\",", + " \"transactionIndex\": \"0x71\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x114\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000dc900845732a53ee8df737efa282a6bc56976e62\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000aaf96eb9d0d0001\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x11b\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000001df4c6e36d61416813b42fe32724ef11e363eddc\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000013d8616c6ccf0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x11e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001e87f85809dc0001\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x121\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000470de4df820000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x953bd02465db847a1567fcd5177eb53db3aecce5caff9f057900db2463a44edd\",", + " \"transactionIndex\": \"0x78\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x12c\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000058025c79662e81f1ee72bce632511faf4e6aee01\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000470de4df820000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x953bd02465db847a1567fcd5177eb53db3aecce5caff9f057900db2463a44edd\",", + " \"transactionIndex\": \"0x78\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x12d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000d420d5f24225702a68ddf21242d5eef816dc2e6d\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000048152b3a075e65f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0c10ec18641834af74ae696eff380ff215128da4f2c989b5bee495650830a3fe\",", + " \"transactionIndex\": \"0x79\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x132\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000048152b3a075e65f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0c10ec18641834af74ae696eff380ff215128da4f2c989b5bee495650830a3fe\",", + " \"transactionIndex\": \"0x79\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x135\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007b8ac38aacd8ebca19b3d423bcbbd4c5815bab49\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007970b09df7ee8a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x13a\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007970b09df7ee8a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x13d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007b8ac38aacd8ebca19b3d423bcbbd4c5815bab49\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000135acbdcc2668bf\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x140\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000732276168b421d4792e743711e1a48172ea574a2\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000135acbdcc2668bf\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x147\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000071d091e35abbd51b46db179184684633581d1816\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000072ccca2b6c6a7e3\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x6bd3ecbd76f35b7e32a19355a3bb3635cd1b96bfae7ba7d77564701c6176a7ba\",", + " \"transactionIndex\": \"0x7d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x14e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000072ccca2b6c6a7e3\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x6bd3ecbd76f35b7e32a19355a3bb3635cd1b96bfae7ba7d77564701c6176a7ba\",", + " \"transactionIndex\": \"0x7d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x152\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x0000000000000000000000000000a26b00c1f0df003000390027140000faa719\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000005666e940f000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x15e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x0000000000000000000000007b0e1f31635068d522f18e241872441fad2f1a72\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000067aeb1812000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x15f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x000000000000000000000000d374f3bd4c62e92addd3692dd79708b648d3bd8d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000067aeb1812000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x160\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x000000000000000000000000ec8d211c8f9695b3b25d3ab55c47bf12898257df\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000c5a5025e25000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x161\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f1852\",", + " \"0x0000000000000000000000009ec9367b8c4dd45ec8e7b800b1f719251053ad60\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000004883288abe17e67\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x47dd6e9840debf5aee7d7de8a75a4bbde4f4c1dd324afa906949b64c28ad8a07\",", + " \"transactionIndex\": \"0x8d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x171\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000022f9dcf4647084d6c31b2765f6910cd85c178c18\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007105785dff5eb0\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x1e656c68b30903d1f6544308729fb5a4027d906ac64dd2756d22671862b19b41\",", + " \"transactionIndex\": \"0x92\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x17c\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000022f9dcf4647084d6c31b2765f6910cd85c178c18\",", + " \"0x0000000000000000000000008f1b19622a888c53c8ee4f7d7b4dc8f574ff9068\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007105785dff5eb0\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x1e656c68b30903d1f6544308729fb5a4027d906ac64dd2756d22671862b19b41\",", + " \"transactionIndex\": \"0x92\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x17d\",", + " \"removed\": false", + " }", + " ]", + "}", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : 1,\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_getLogs\",\n \"params\" : [\n {\n \"address\" : \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n \"fromBlock\" : 19218542,\n \"toBlock\" : 19218542\n },\n {}\n ]\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "WETH mod [0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": 1,", + " \"result\": [", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000007ca898cbbed67df0b4e249b05561d3a23404eed0\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000ded149b946ec050\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x36eae59c15502d6d286d78fef1a5b2d7c349ce236f37983526d033a9f8a3fb60\",", + " \"transactionIndex\": \"0x2\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x2\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x0000000000000000000000007ca898cbbed67df0b4e249b05561d3a23404eed0\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000ded149b946ec050\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x36eae59c15502d6d286d78fef1a5b2d7c349ce236f37983526d033a9f8a3fb60\",", + " \"transactionIndex\": \"0x2\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x3\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007ca898cbbed67df0b4e249b05561d3a23404eed0\",", + " \"0x000000000000000000000000b7426bfd2abf64428fa82a71b0d44b056ffcc286\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000ded149b946ec050\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x36eae59c15502d6d286d78fef1a5b2d7c349ce236f37983526d033a9f8a3fb60\",", + " \"transactionIndex\": \"0x2\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x4\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000006f1cdbbb4d53d226cf4b917bf768b94acbab6168\",", + " \"0x000000000000000000000000a3f558aebaecaf0e11ca4b2199cc5ed341edfd74\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000938a07f61f9be133\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x88ce2762b96fc559c11d7340b2efb9dffd606e6b8a7b0481b6844332bc12296d\",", + " \"transactionIndex\": \"0x6\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x9\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc\",", + " \"0x000000000000000000000000dc900845732a53ee8df737efa282a6bc56976e62\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002eb6d33f630f0ae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe34ab697794df9f7a3bb20fcfecf13dd77037ed17601ef8397c15590da64b5b3\",", + " \"transactionIndex\": \"0x7\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xc\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x8895a3d74f164ee25fc5cc7ee16ffb894efc46387bbca161da8bf38235922c15\",", + " \"transactionIndex\": \"0xc\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x16\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x8895a3d74f164ee25fc5cc7ee16ffb894efc46387bbca161da8bf38235922c15\",", + " \"transactionIndex\": \"0xc\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x17\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\",", + " \"0x0000000000000000000000008dbee21e8586ee356130074aaa789c33159921ca\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001bc16d674ec80000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x8895a3d74f164ee25fc5cc7ee16ffb894efc46387bbca161da8bf38235922c15\",", + " \"transactionIndex\": \"0xc\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x18\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000002cc846fff0b08fb3bffad71f53a60b4b6e6d6482\",", + " \"0x0000000000000000000000000b8a49d816cc709b6eadb09498030ae3416b66dc\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000096389457142eb5\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x21\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000b8a49d816cc709b6eadb09498030ae3416b66dc\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x24\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x25\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a88800cd213da5ae406ce248380802bd53b47647\",", + " \"0x00000000000000000000000008b067ad41e45babe5bbb52fc2fe7f692f628b06\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x26\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x00000000000000000000000008b067ad41e45babe5bbb52fc2fe7f692f628b06\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x27\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000008b067ad41e45babe5bbb52fc2fe7f692f628b06\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007ccf87f75d6632\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x38d802be90998b8d2498d42bd941d12d598a858e79d0ca2ecc0498bce9bb01eb\",", + " \"transactionIndex\": \"0xf\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x28\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000086d45f29d20dcd09f3643963199f4039030f69de\",", + " \"0x0000000000000000000000003328f7f4a1d1c57c35df56bbf0c9dcafca309c49\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000aead8b9dd68fae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x9c1dbbc41c6df8cf71fa2ea18b0a5f2ba80cc82fe479ee07865df77fc2a23435\",", + " \"transactionIndex\": \"0x15\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x40\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003328f7f4a1d1c57c35df56bbf0c9dcafca309c49\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000aead8b9dd68fae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x9c1dbbc41c6df8cf71fa2ea18b0a5f2ba80cc82fe479ee07865df77fc2a23435\",", + " \"transactionIndex\": \"0x15\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x43\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003328f7f4a1d1c57c35df56bbf0c9dcafca309c49\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000aead8b9dd68fae\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x9c1dbbc41c6df8cf71fa2ea18b0a5f2ba80cc82fe479ee07865df77fc2a23435\",", + " \"transactionIndex\": \"0x15\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x44\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a741a46278000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4d94b1df9a18dba0a34ab80c1b558824fa109a839babf40cdd7253334a22dc51\",", + " \"transactionIndex\": \"0x1b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x53\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a741a46278000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4d94b1df9a18dba0a34ab80c1b558824fa109a839babf40cdd7253334a22dc51\",", + " \"transactionIndex\": \"0x1b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x54\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000efd69f1ff464ed673dab856c5b9bca4d2847a74f\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a741a46278000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4d94b1df9a18dba0a34ab80c1b558824fa109a839babf40cdd7253334a22dc51\",", + " \"transactionIndex\": \"0x1b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x56\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000080a64c6d7f12c47b7c66c5b4e20e72bc1fcd5d9e\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a98f10b6a5c38\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf3dc076738c39963762a384ec8dd61bca04a3ecad2af45a56db03d9f610b8622\",", + " \"transactionIndex\": \"0x2a\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x63\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x00000000000000000000000080a64c6d7f12c47b7c66c5b4e20e72bc1fcd5d9e\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a98f10b6a5c38\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf3dc076738c39963762a384ec8dd61bca04a3ecad2af45a56db03d9f610b8622\",", + " \"transactionIndex\": \"0x2a\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x64\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000080a64c6d7f12c47b7c66c5b4e20e72bc1fcd5d9e\",", + " \"0x0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f1852\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000010a98f10b6a5c38\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf3dc076738c39963762a384ec8dd61bca04a3ecad2af45a56db03d9f610b8622\",", + " \"transactionIndex\": \"0x2a\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x65\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe61db601fd6fdc4d2bffed233d33879da62d9b268aceb61f1ff6dcd1116743d5\",", + " \"transactionIndex\": \"0x2e\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x75\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe61db601fd6fdc4d2bffed233d33879da62d9b268aceb61f1ff6dcd1116743d5\",", + " \"transactionIndex\": \"0x2e\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x76\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000018c55910ae4178517b7eb31da8a4f69de784ee4\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xe61db601fd6fdc4d2bffed233d33879da62d9b268aceb61f1ff6dcd1116743d5\",", + " \"transactionIndex\": \"0x2e\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x77\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000002d722c96f79d149dd21e9ef36f93fc12906ce9f8\",", + " \"0x000000000000000000000000824a30f2984f9013f2c8d0a29c0a3cc5fd5c0673\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000027b3664000000000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x522737b97543da36e315057ad5a69fa09891dcae6ce939560bc2c092d8ee171d\",", + " \"transactionIndex\": \"0x30\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x7d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc\",", + " \"0x000000000000000000000000a76a9baa3cc9dacd86852bea6c4ae8c63e70c4a4\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000003535e7abf72c3a1a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x16789dae02a4de8bc1d10a081e8d2da0bf915482060b5752da236e760ee431cc\",", + " \"transactionIndex\": \"0x47\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x83\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a76a9baa3cc9dacd86852bea6c4ae8c63e70c4a4\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000080406307296259e\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb3\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\",", + " \"0x00000000000000000000000060594a405d53811d3bc4766596efd80fd545a270\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000007ce84be4e158e4e\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000035817224809750\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb8\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000041d8e016863961825899770d3520ce32967f1594\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000035817224809750\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xb5a2fc4c2b42f2a1aecceb39d9356ae026c5d88e3a20e53d39be0ffbf1047b99\",", + " \"transactionIndex\": \"0x48\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xb9\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b2843c7133289541086fa41673850dbf61cac6db\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002cdce5fdafd47fb\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0039adedc19a87664fd8e559b5934b1440c0dfd29b4e78523f08507eac967bc4\",", + " \"transactionIndex\": \"0x50\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xbe\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002cdce5fdafd47fb\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0039adedc19a87664fd8e559b5934b1440c0dfd29b4e78523f08507eac967bc4\",", + " \"transactionIndex\": \"0x50\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xc1\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000002cdce5fdafd47fb\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0039adedc19a87664fd8e559b5934b1440c0dfd29b4e78523f08507eac967bc4\",", + " \"transactionIndex\": \"0x50\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xc2\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f6\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000007735acf51f981221\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x54ba39687c7446d58a0a0035d1dc8a7f92dc73a797a8ae39dd1ebac7e0c26944\",", + " \"transactionIndex\": \"0x53\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xc4\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000001df4c6e36d61416813b42fe32724ef11e363eddc\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000007735acf51f981221\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x54ba39687c7446d58a0a0035d1dc8a7f92dc73a797a8ae39dd1ebac7e0c26944\",", + " \"transactionIndex\": \"0x53\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xc9\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007fdeb46b3a0916630f36e886d675602b1007fcbb\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000bca3e3ff0ab63b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xda\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\",", + " \"0x000000000000000000000000c7bbec68d12a0d1830360f8ec58fa599ba1b0e9b\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000bac4f6bb538a84f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xdd\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000001deed43b72bb62\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xdf\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000b93d5724e4dd2895f38e27d5d84208018818bea1\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000001deed43b72bb62\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x3197169ae80de135350cfd33d07187e29388c280ab687d54a8735b6fba70f353\",", + " \"transactionIndex\": \"0x64\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xe0\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\",", + " \"0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000da2da3a73f2a4e9\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x7092a0961840ecbb2a85707ef54ae9af473f62e32a4f6dea4bb5ac1de8a8e688\",", + " \"transactionIndex\": \"0x66\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xe4\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000da2da3a73f2a4e9\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x7092a0961840ecbb2a85707ef54ae9af473f62e32a4f6dea4bb5ac1de8a8e688\",", + " \"transactionIndex\": \"0x66\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xe7\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000da2da3a73f2a4e9\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x7092a0961840ecbb2a85707ef54ae9af473f62e32a4f6dea4bb5ac1de8a8e688\",", + " \"transactionIndex\": \"0x66\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xe8\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000a6cc3c2531fdaa6ae1a3ca84c2855806728693e8\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000014e0a0120ca6c1b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf2d5624eed5463be5213383d41b67f45dfd82e5ea236694e777bcd1f4c9b65b5\",", + " \"transactionIndex\": \"0x68\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xf7\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000098409d8ca9629fbe01ab1b914ebf304175e384c8\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000014e0a0120ca6c1b1\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xf2d5624eed5463be5213383d41b67f45dfd82e5ea236694e777bcd1f4c9b65b5\",", + " \"transactionIndex\": \"0x68\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0xfc\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016345785d8a0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xbaa3d316c8b7dbd1f1e9074b45d134c61ea300ab3e3069ea0227e0c5a876d3aa\",", + " \"transactionIndex\": \"0x6b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x100\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016345785d8a0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xbaa3d316c8b7dbd1f1e9074b45d134c61ea300ab3e3069ea0227e0c5a876d3aa\",", + " \"transactionIndex\": \"0x6b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x101\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000d420d5f24225702a68ddf21242d5eef816dc2e6d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016345785d8a0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xbaa3d316c8b7dbd1f1e9074b45d134c61ea300ab3e3069ea0227e0c5a876d3aa\",", + " \"transactionIndex\": \"0x6b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x102\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007c6776bac3ea54878a2ddc3fd1c26ef87c8f255f\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000876b642dcffd7a6\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xfe816dc35d26b6bafa7f42ebf20e2b8de83ff5b1b09065c468710d174e8ec046\",", + " \"transactionIndex\": \"0x6c\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x107\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000876b642dcffd7a6\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xfe816dc35d26b6bafa7f42ebf20e2b8de83ff5b1b09065c468710d174e8ec046\",", + " \"transactionIndex\": \"0x6c\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x112\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000876b642dcffd7a6\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0xfe816dc35d26b6bafa7f42ebf20e2b8de83ff5b1b09065c468710d174e8ec046\",", + " \"transactionIndex\": \"0x6c\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x113\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016029a98d5c5000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4709637a2c72368ee67597523989616b393c705bb02c65f43668a36e831cab6e\",", + " \"transactionIndex\": \"0x6d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x114\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016029a98d5c5000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4709637a2c72368ee67597523989616b393c705bb02c65f43668a36e831cab6e\",", + " \"transactionIndex\": \"0x6d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x115\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000001111111254eeb25477b68fb85ed929f73a960582\",", + " \"0x000000000000000000000000a7480aafa8ad2af3ce24ac6853f960ae6ac7f0c4\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000016029a98d5c5000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x4709637a2c72368ee67597523989616b393c705bb02c65f43668a36e831cab6e\",", + " \"transactionIndex\": \"0x6d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x116\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000088c8af198be09abac868d43f4e45540e8227b092\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000015af1d78b58c40000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x57a6f8aa223c748eb9ffeba309b7a2ba86ac24528e2415fbeb82e208dcc40b3f\",", + " \"transactionIndex\": \"0x6f\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x11f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x00000000000000000000000088c8af198be09abac868d43f4e45540e8227b092\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000015af1d78b58c40000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x57a6f8aa223c748eb9ffeba309b7a2ba86ac24528e2415fbeb82e208dcc40b3f\",", + " \"transactionIndex\": \"0x6f\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x120\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000012f4832934a1800\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x312a6d36851729f53f54a49e59fe89e0fb0ca89d6b7e405c8b48f4abbd10ade9\",", + " \"transactionIndex\": \"0x71\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x122\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000012f4832934a1800\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x312a6d36851729f53f54a49e59fe89e0fb0ca89d6b7e405c8b48f4abbd10ade9\",", + " \"transactionIndex\": \"0x71\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x123\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000001037fa1f40b69c9266c4aeb2abcedc7553614b4c\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000012f4832934a1800\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x312a6d36851729f53f54a49e59fe89e0fb0ca89d6b7e405c8b48f4abbd10ade9\",", + " \"transactionIndex\": \"0x71\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x124\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000dc900845732a53ee8df737efa282a6bc56976e62\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000aaf96eb9d0d0001\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x12b\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000001df4c6e36d61416813b42fe32724ef11e363eddc\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000013d8616c6ccf0000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x12e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001e87f85809dc0001\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x131\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000001e87f85809dc0001\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0199061c74f8636b729e6ad5fdee406e061f000180f48e983a37b3d6c42e4ab6\",", + " \"transactionIndex\": \"0x72\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x132\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000470de4df820000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x953bd02465db847a1567fcd5177eb53db3aecce5caff9f057900db2463a44edd\",", + " \"transactionIndex\": \"0x78\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x13d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000470de4df820000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x953bd02465db847a1567fcd5177eb53db3aecce5caff9f057900db2463a44edd\",", + " \"transactionIndex\": \"0x78\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x13e\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000058025c79662e81f1ee72bce632511faf4e6aee01\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000470de4df820000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x953bd02465db847a1567fcd5177eb53db3aecce5caff9f057900db2463a44edd\",", + " \"transactionIndex\": \"0x78\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x13f\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000d420d5f24225702a68ddf21242d5eef816dc2e6d\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000048152b3a075e65f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0c10ec18641834af74ae696eff380ff215128da4f2c989b5bee495650830a3fe\",", + " \"transactionIndex\": \"0x79\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x144\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000048152b3a075e65f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0c10ec18641834af74ae696eff380ff215128da4f2c989b5bee495650830a3fe\",", + " \"transactionIndex\": \"0x79\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x147\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000048152b3a075e65f\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x0c10ec18641834af74ae696eff380ff215128da4f2c989b5bee495650830a3fe\",", + " \"transactionIndex\": \"0x79\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x148\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007b8ac38aacd8ebca19b3d423bcbbd4c5815bab49\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007970b09df7ee8a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x14d\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007970b09df7ee8a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x150\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007970b09df7ee8a\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x151\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007b8ac38aacd8ebca19b3d423bcbbd4c5815bab49\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000135acbdcc2668bf\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x154\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x000000000000000000000000732276168b421d4792e743711e1a48172ea574a2\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000000000135acbdcc2668bf\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x29d13f331189d5c5a1381857e4368ab6b21e5f8b268a3072d37c35b4bd17a01a\",", + " \"transactionIndex\": \"0x7b\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x15b\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000071d091e35abbd51b46db179184684633581d1816\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000072ccca2b6c6a7e3\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x6bd3ecbd76f35b7e32a19355a3bb3635cd1b96bfae7ba7d77564701c6176a7ba\",", + " \"transactionIndex\": \"0x7d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x162\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",", + " \"0x00000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f5640\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000072ccca2b6c6a7e3\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x6bd3ecbd76f35b7e32a19355a3bb3635cd1b96bfae7ba7d77564701c6176a7ba\",", + " \"transactionIndex\": \"0x7d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x166\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x0000000000000000000000000000a26b00c1f0df003000390027140000faa719\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000000005666e940f000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x172\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x0000000000000000000000007b0e1f31635068d522f18e241872441fad2f1a72\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000067aeb1812000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x173\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x000000000000000000000000d374f3bd4c62e92addd3692dd79708b648d3bd8d\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000067aeb1812000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x174\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x000000000000000000000000e8e4322f2f00640714f0a2f314a56fc9f5208136\",", + " \"0x000000000000000000000000ec8d211c8f9695b3b25d3ab55c47bf12898257df\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000000c5a5025e25000\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x088d2f5b31c8b2b9a3cf18ad1646a6e1f70a388e77a7c7adc8285732e792efc2\",", + " \"transactionIndex\": \"0x80\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x175\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000d4a11d5eeaac28ec3f61d100daf4d40471f1852\",", + " \"0x0000000000000000000000009ec9367b8c4dd45ec8e7b800b1f719251053ad60\"", + " ],", + " \"data\": \"0x00000000000000000000000000000000000000000000000004883288abe17e67\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x47dd6e9840debf5aee7d7de8a75a4bbde4f4c1dd324afa906949b64c28ad8a07\",", + " \"transactionIndex\": \"0x8d\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x185\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",", + " \"0x00000000000000000000000022f9dcf4647084d6c31b2765f6910cd85c178c18\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007105785dff5eb0\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x1e656c68b30903d1f6544308729fb5a4027d906ac64dd2756d22671862b19b41\",", + " \"transactionIndex\": \"0x92\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x190\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\",", + " \"0x00000000000000000000000022f9dcf4647084d6c31b2765f6910cd85c178c18\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007105785dff5eb0\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x1e656c68b30903d1f6544308729fb5a4027d906ac64dd2756d22671862b19b41\",", + " \"transactionIndex\": \"0x92\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x191\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x00000000000000000000000022f9dcf4647084d6c31b2765f6910cd85c178c18\",", + " \"0x0000000000000000000000008f1b19622a888c53c8ee4f7d7b4dc8f574ff9068\"", + " ],", + " \"data\": \"0x000000000000000000000000000000000000000000000000007105785dff5eb0\",", + " \"blockNumber\": \"0x125406e\",", + " \"transactionHash\": \"0x1e656c68b30903d1f6544308729fb5a4027d906ac64dd2756d22671862b19b41\",", + " \"transactionIndex\": \"0x92\",", + " \"blockHash\": \"0x4bfc3849e29cdc6dbeef4a1310d8049ed8e06d38de0480c9038b36d692b8d08b\",", + " \"logIndex\": \"0x192\",", + " \"removed\": false", + " }", + " ]", + "}", + "", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : 1,\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_getLogs\",\n \"params\" : [\n {\n \"address\" : \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n \"fromBlock\" : 19218542,\n \"toBlock\" : 19218542\n },\n {\n \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\" : {\n \"code\": \"0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc610543565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506105e1565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b46106d3565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506106f2565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b6102646004808035906020019091905050610a3f565b005b341561027157600080fd5b610279610bd1565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be4565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610bfc565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610c9a565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610caf565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a23373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef346040518082815260200191505060405180910390a3565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105d95780601f106105ae576101008083540402835291602001916105d9565b820191906000526020600020905b8154815290600101906020018083116105bc57829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561074257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561081a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156109355781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156108aa57600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a8d57600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610b1a57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b505050505081565b6000610ca73384846106f2565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820ebb12a6d914bf3a0414d4875b0a04981da1d20a808154259b5e2993065e9c3400029\"\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "yvAjnaDAI mod [0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": 1,", + " \"result\": [", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0x5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95\",", + " \"0x00000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000340b5fa7123377b2b772d000000000000000000000000000000000000000000033e283f765985925b2328\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf5\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000003bb83ee9943b1704591\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0xb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000003bb83ee9943b1704591\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf7\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0xfbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000003bcfed173ed5fbdeadc0000000000000000000000000000000000000000000003bb83ee9943b1704591\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf9\",", + " \"removed\": false", + " }", + " ]", + "}", + "", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : 1,\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_getLogs\",\n \"params\" : [\n {\n \"address\" : \"0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB\",\n \"fromBlock\" : 19266110,\n \"toBlock\" : 19266110\n },\n {\n \"0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB\" : {\n \"code\": \"0x6003361161000c57612165565b60003560e01c34615aa0576371da8a8d811861007a5760243610615aa0576004358060a01c615aa05760c052336040526008606052610049615a0a565b60c05160155560c0517f28709a2dab2a5d5e8688e96159011151c51644ab21839a8a45b449634d7c8b2b600060e0a2005b632d9caa4e81186102585760443610615aa057600435600401600a813511615aa05780358060c052600081600a8111615aa05780156100da57905b8060051b6020850101358060a01c615aa0578160051b60e001526001018181186100b5575b505050503360405260106060526100ef615a0a565b600060c051600a8111615aa057801561019757905b8060051b60e001516102205260016102205160205260005260406000205461018c576009610240527f21696e61637469766500000000000000000000000000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b600101818118610104575b505060c051806002558060051b600081601f0160051c600a8111615aa05780156101d557905b8060051b60e0015181600301556001018181186101bd575b505050507f0bc0cb8c5ccee13e6a2fd26a699f57ad7ff6e454e6aae97ec41cd2eb9ebd63a5602080610220528061022001600060c0518083528060051b600082600a8111615aa057801561024257905b8060051b60e001518160051b602088010152600101818118610225575b50508201602001915050905081019050610220a1005b6329c8a33b81186102be5760243610615aa0576004358060011c615aa05760c05233604052601060605261028a615a0a565b60c051600d557f1f88e73ebc721f227812938fe07a069ec1f7136aafacb397ed460bd15dee13f160c05160e052602060e0a1005b636fe01d1e81186103835760243610615aa057602154615aa057336040526101006060526102ea615a0a565b6016541561034f57600c60c0527f7573696e67206d6f64756c65000000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd6260043560c052602060c0a1005b63bb43546681186104565760243610615aa0576004358060a01c615aa05760c052602154615aa057336040526101006060526103bd615a0a565b601454191561042557601360e0527f7573696e67206465706f736974206c696d6974000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60c05160165560c0517f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060e0a2005b637b67589481186104ba5760243610615aa0576004358060a01c615aa05760c05233604052610200606052610489615a0a565b60c05160175560c0517fce6e3f8beda82a13c441d76efd4a6335760f219f38c60502e6680060874e109d600060e0a2005b63bdd81c0181186105135760243610615aa057336040526104006060526104df615a0a565b6004356013557f01a4494beed88920b88742cc58f2744e198f55ff192635a1fbabc6be8ffade8160043560c052602060c0a1005b63df69b22a81186106075760243610615aa05733604052610800606052610538615a0a565b6301e1855860043511156105a357601b60c0527f70726f66697420756e6c6f636b2074696d6520746f6f206c6f6e67000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356105d357600e30602052600052604060002054604052306060526105c861291e565b600060245560006023555b6004356022557ff361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a60043560c052602060c0a1005b632cf7fd8581186106815760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa05760605160186040516020526000526040600020556060516040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63a97cefa2811861071b5760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa057606051601860405160205260005260406000205417601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63e2bf56dd81186107b95760443610615aa0576004358060a01c615aa05760405260243580600e1c615aa057606052601a543318615aa057606051613fff18601860405160205260005260406000205416601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b630b10dd8081186108235760243610615aa05760043580600e1c615aa057604052601a543318615aa0576001601960405160205260005260406000205560016040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63d52fe498811861088d5760243610615aa05760043580600e1c615aa057604052601a543318615aa0576000601960405160205260005260406000205560026040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63ef54cefd81186108bf5760243610615aa0576004358060a01c615aa057604052601a543318615aa057604051601b55005b63f776bf1f811861090d5760043610615aa057601b543318615aa05733601a556000601b55337fce93baa0b608a7d420822b6b90cfcccb70574363ba4fd26ef5ac17dd465016c460006040a2005b63bf86d690811861092c5760043610615aa05760215460405260206040f35b63d9a0e97a811861094f5760043610615aa057602061094b60806129ad565b6080f35b6399530b0681186109955760043610615aa05760206020615ad2600039600051604d8111615aa05780600a0a905060a052600160c052610990610140612a9a565b610140f35b63a9bbf1cc81186109ff5760043610615aa0576020806040528060400160006002548083528060051b600082600a8111615aa05780156109eb57905b80600301548160051b6020880101526001018181186109d1575b505082016020019150509050810190506040f35b636ec2b8d48118610a605760243610615aa0576004358060a01c615aa0576104e052600054600214615aa0576002600055336040526020606052610a41615a0a565b60406104e0516101a052610a566105006151d5565b6105006003600055f35b63e5e918188118610e305760443610615aa0576004358060a01c615aa0576101a052600054600214615aa057600260005533604052611000606052610aa3615a0a565b60016101a051602052600052604060002054610b1f57600a6101c0527f6e6f7420616374697665000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60016101a0516020526000526040600020600281019050546101c0526024356101e0526101c051610bb057600e610200527f6e6f7468696e6720746f206275790000000000000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101e051610c1e576013610200527f6e6f7468696e6720746f206275792077697468000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101c0516101e0511115610c35576101c0516101e0525b6101a0516370a082316102205230610240526020610220602461023c845afa610c63573d600060003e3d6000fd5b60203d10615aa0576102209050516101e051808202811583838304141715615aa057905090506101c0518015615aa057808204905090506102005261020051610d0c57600f610220527f63616e6e6f7420627579207a65726f00000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615ab260003960005160405233606052306080526101e05160a052610d31612d39565b60016101a051602052600052604060002060028101905080546101e051808203828111615aa057905090508155506011546101e051808203828111615aa057905090506011556012546101e051808201828110615aa057905090506012556101a0517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c051610220526101c0516101e051808203828111615aa05790509050610240526040610220a26101a0516040523360605261020051608052610df6612e15565b6101a0517fe94e7f88819f66c19b097748cb754149f63b1a176ed425dee1f1ee933e6d09b06101e051610220526020610220a26003600055005b63de7aeb418118610e745760243610615aa0576004358060a01c615aa05761010052336040526001606052610e63615a0a565b61010051604052610e7261459f565b005b63577db3168118610ebd5760243610615aa0576004358060a01c615aa05761022052336040526002606052610ea7615a0a565b610220516040526000606052610ebb6147b3565b005b63fd129e638118610f065760243610615aa0576004358060a01c615aa05761022052336040526004606052610ef0615a0a565b610220516040526001606052610f046147b3565b005b63b9ddcd688118610ff85760443610615aa0576004358060a01c615aa05760c052336040526080606052610f38615a0a565b600160c051602052600052604060002054610fac57601160e0527f696e6163746976652073747261746567790000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b602435600160c05160205260005260406000206003810190505560c051337fb3eef2123fec1523a6bbc90aceb203000154c1a4974335fe06b544c7534d4b8960243560e052602060e0a3005b630aeebf5581186110605760443610615aa0576004358060a01c615aa05761030052600054600214615aa057600260005533604052604060605261103a615a0a565b6020610300516101605260243561018052611056610320614a0a565b6103206003600055f35b6336a5545081186111405760043610615aa05733604052612000606052611085615a0a565b602154615aa0576001602155601654156110c757600060165560007f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060c0a25b60006014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd62600060c052602060c0a16040601833602052600052604060002054176018336020526000526040600020557f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf8600060c0a1005b636e553f65811861119c5760443610615aa0576024358060a01c615aa05761026052600054600214615aa05760026000556020336101a052610260516101c0526004356101e0526111926102806136ca565b6102806003600055f35b6394bf804d81186111f85760443610615aa0576024358060a01c615aa05761028052600054600214615aa05760026000556020336101a052610280516101c0526004356101e0526111ee6102a061386b565b6102a06003600055f35b63b460af9481186112175760643610615aa057604036610be0376112aa565b63a318c1a4811861123c5760843610615aa057606435610be0526000610c00526112aa565b63d81a09f681186113585760c43610615aa057606435610be052608435600401600a813511615aa057803580610c0052600081600a8111615aa05780156112a557905b8060051b6020850101358060a01c615aa0578160051b610c20015260010181811861127f575b505050505b6024358060a01c615aa057610ba0526044358060a01c615aa057610bc052600054600214615aa057600260005560043560a052600260c0526112ed610d80612b71565b610d8051610d6052336105e052610ba05161060052610bc0516106205260043561064052610d605161066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa505050611348610d80613ae3565b610d80506020610d606003600055f35b63ba087652811861137d5760643610615aa057612710610be0526000610c0052611410565b639f40a7b381186113a25760843610615aa057606435610be0526000610c0052611410565b6306580f2d81186114ba5760c43610615aa057606435610be052608435600401600a813511615aa057803580610c0052600081600a8111615aa057801561140b57905b8060051b6020850101358060a01c615aa0578160051b610c2001526001018181186113e5575b505050505b6024358060a01c615aa057610ba0526044358060a01c615aa057610bc052600054600214615aa057600260005560043560a052600160c052611453610d80612a9a565b610d8051610d60526020336105e052610ba05161060052610bc05161062052610d60516106405260043561066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa5050506114b0610d80613ae3565b610d806003600055f35b63095ea7b381186114fb5760443610615aa0576004358060a01c615aa05760c05260203360405260c0516060526024356080526114f760e061216b565b60e0f35b63a9059cbb81186115605760443610615aa0576004358060a01c615aa057610100526101005130811461153057801515611533565b60005b905015615aa05733604052610100516060526024356080526115536122b7565b6001610120526020610120f35b6323b872dd81186115d75760643610615aa0576004358060a01c615aa0576101e0526024358060a01c615aa05761020052610200513081146115a4578015156115a7565b60005b905015615aa05760206101e05161018052610200516101a0526044356101c0526115d26102206123a6565b610220f35b6339509351811861161a5760443610615aa0576004358060a01c615aa05760e05260203360405260e0516060526024356080526116156101006123e5565b610100f35b63a457c2d7811861165d5760443610615aa0576004358060a01c615aa05760e05260203360405260e051606052602435608052611658610100612479565b610100f35b63d505accf81186116d75760e43610615aa0576004358060a01c615aa057610460526024358060a01c615aa057610480526084358060081c615aa0576104a05260206104605161018052610480516101a052604060446101c0376104a05161020052604060a4610220376116d26104c06125e7565b6104c0f35b6370a0823181186117545760243610615aa0576004358060a01c615aa057608052306080511861173957600e60805160205260005260406000205461171c60a06129ad565b60a051808203828111615aa0579050905060c052602060c0611752565b600e60805160205260005260406000205460a052602060a05bf35b6318160ddd81186117775760043610615aa057602061177360a0612a1f565b60a0f35b6338d52e0f811861179e5760043610615aa0576020615ab260003960005160405260206040f35b63313ce56781186117cd5760043610615aa0576020615ad26000396000518060081c615aa05760405260206040f35b6301e1d11481186117f05760043610615aa05760206117ec6040612a81565b6040f35b639aa7df94811861180f5760043610615aa05760125460405260206040f35b63fc7b9c18811861182e5760043610615aa05760115460405260206040f35b63c6e6f592811861185e5760243610615aa057602060043560a052600160c052611859610160612b71565b610160f35b63ef8b30f7811861188e5760243610615aa057602060043560a052600160c052611889610160612b71565b610160f35b63b3d7f6b981186118be5760243610615aa057602060043560a052600260c0526118b9610140612a9a565b610140f35b6307a2d13a81186118ee5760243610615aa057602060043560a052600160c0526118e9610140612a9a565b610140f35b63402d267d81186119255760243610615aa0576004358060a01c615aa05760c052602060c05160405261192160e0613089565b60e0f35b63c63d75b6811861197f5760243610615aa0576004358060a01c615aa05761016052610160516040526119596101a0613089565b6101a0516101805260206101805160a052600160c05261197a6101a0612b71565b6101a0f35b63ce96cb77811861199e5760243610615aa05760403661060037611a31565b6385b6875681186119c35760443610615aa05760243561060052600061062052611a31565b6365cb67658118611a7e5760843610615aa05760243561060052604435600401600a813511615aa05780358061062052600081600a8111615aa0578015611a2c57905b8060051b6020850101358060a01c615aa0578160051b6106400152600101818118611a06575b505050505b6004358060a01c615aa0576105e05260206105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611a79610780613267565b610780f35b63d905777e8118611aa35760243610615aa05761271061060052600061062052611b36565b634abe41378118611ac85760443610615aa05760243561060052600061062052611b36565b6334b5fab68118611bd15760843610615aa05760243561060052604435600401600a813511615aa05780358061062052600081600a8111615aa0578015611b3157905b8060051b6020850101358060a01c615aa0578160051b6106400152600101818118611b0b575b505050505b6004358060a01c615aa0576105e0526105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611b7c610780613267565b610780516107c05260026107e0526107c05160a0526107e05160c052611ba36107a0612b71565b6107a051600e6105e05160205260005260406000205480828118828410021890509050610800526020610800f35b630a28a4778118611c015760243610615aa057602060043560a052600260c052611bfc610160612b71565b610160f35b634cdad5068118611c315760243610615aa057602060043560a052600160c052611c2c610140612a9a565b610140f35b63258294108118611cb95760043610615aa05760208060805260056040527f332e302e3100000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6366d3ae578118611d1a5760443610615aa0576004358060a01c615aa0576101205260243560016101205160205260005260406000206002810190505410615aa057602061012051604052602435606052611d15610140613134565b610140f35b630952864e8118611d395760043610615aa05760225460405260206040f35b632d6326928118611d585760043610615aa05760235460405260206040f35b635141eebb8118611d775760043610615aa05760245460405260206040f35b638afca8f08118611d965760043610615aa05760255460405260206040f35b633644e5158118611dbb5760043610615aa0576020611db661018061250d565b610180f35b632dd310008118611de25760043610615aa0576020615af260003960005160405260206040f35b6339ebf8238118611e375760243610615aa0576004358060a01c615aa0576040526001604051602052600052604060002080546060526001810154608052600281015460a052600381015460c0525060806060f35b638bf03b9e8118611e645760243610615aa057600435600254811015615aa0576003015460405260206040f35b631e56558d8118611e835760043610615aa057600d5460405260206040f35b63dd62ed3e8118611edd5760443610615aa0576004358060a01c615aa0576040526024358060a01c615aa057606052600f604051602052600052604060002080606051602052600052604060002090505460805260206080f35b633940e9ee8118611efc5760043610615aa05760105460405260206040f35b63356d64098118611f1b5760043610615aa05760135460405260206040f35b63e46a57978118611f3a5760043610615aa05760145460405260206040f35b634fb3ccc58118611f595760043610615aa05760155460405260206040f35b6361c2ccf48118611f785760043610615aa05760165460405260206040f35b63f5ba68f38118611f975760043610615aa05760175460405260206040f35b63993746428118611fd25760243610615aa0576004358060a01c615aa057604052601860405160205260005260406000205460605260206060f35b63f3789e45811861200d5760243610615aa05760043580600e1c615aa057604052601960405160205260005260406000205460605260206060f35b6379b98917811861202c5760043610615aa057601a5460405260206040f35b639a98f418811861204b5760043610615aa057601b5460405260206040f35b6306fdde0381186120d05760043610615aa05760208060405280604001601c5480825260208201600082601f0160051c60028111615aa05780156120a257905b80601d01548160051b84015260010181811861208b575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186121285760043610615aa05760208060405280604001601f5480825260208201602054815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b637ecebe0081186121635760243610615aa0576004358060a01c615aa057604052602660405160205260005260406000205460605260206060f35b505b60006000fd5b608051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a36001815250565b600f60c05160205260005260406000208060e0516020526000526040600020905054610120527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61012051146122b5576101005161012051101561228d576016610140527f696e73756666696369656e7420616c6c6f77616e6365000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b60c05160405260e0516060526101005161012051036080526122b061014061216b565b610140505b565b600e60405160205260005260406000205460a05260805160a051101561233457601260c0527f696e73756666696369656e742066756e6473000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60805160a05103600e604051602052600052604060002055608051600e60605160205260005260406000205401600e6060516020526000526040600020556060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160c052602060c0a3565b6101805160c0523360e0526101c051610100526123c16121c9565b610180516040526101a0516060526101c0516080526123de6122b7565b6001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808201828110615aa0579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808203828111615aa0579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8160e00152602081019050600b6040527f596561726e205661756c7400000000000000000000000000000000000000000060605260408051602082012090508160e0015260208101905060056080527f332e302e3100000000000000000000000000000000000000000000000000000060a05260808051602082012090508160e00152602081019050468160e00152602081019050308160e001526020810190508060c05260c09050805160208201209050815250565b6101805161265557600d610260527f696e76616c6964206f776e6572000000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b426101e05110156126c657600e610260527f7065726d697420657870697265640000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60266101805160205260005260406000205461026052600060026102a0527f19010000000000000000000000000000000000000000000000000000000000006102c0526102a080516020820183610400018151815250508083019250505061272f6102e061250d565b6102e05181610400015260208101905060007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9816103200152602081019050610180518161032001526020810190506101a0518161032001526020810190506101c051816103200152602081019050610260518161032001526020810190506101e05181610320015260208101905080610300526103009050805160208201209050816104000152602081019050806103e0526103e090508051602082012090506102805261018051610280516102a052610200516102c052610220516102e05261024051610300526020600060806102a060015afa506000511815612895576011610340527f696e76616c6964207369676e61747572650000000000000000000000000000006103605261034050610340518061036001601f826000031636823750506308c379a061030052602061032052601f19601f61034051011660440161031cfd5b6101c051600f610180516020526000526040600020806101a05160205260005260406000209050556102605160018101818110615aa05790506026610180516020526000526040600020556101a051610180517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256101c0516102a05260206102a0a36001815250565b600e60605160205260005260406000208054604051808203828111615aa057905090508155506040516010540360105560006060517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a37fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb60405160805260206080a1565b602354604052600060605242604051116129e05760405115612a1757600e30602052600052604060002054606052612a17565b60245442602554808203828111615aa05790509050808202811583838304141715615aa0579050905064e8d4a51000810490506060525b606051815250565b601054612a2c60806129ad565b608051808203828111615aa05790509050815250565b612a4c60c06129ad565b60c05160a05260a051612a5e57612a7f565b426023541115612a6d57426025555b60a05160405230606052612a7f61291e565b565b601254601154808201828110615aa05790509050815250565b60a05119612aa9576001612aae565b60a051155b15612abe5760a051815250612b6f565b612ac9610100612a1f565b6101005160e05260e051612ae25760a051815250612b6f565b60a051612af0610120612a81565b61012051808202811583838304141715615aa05790509050610100526101005160e0518015615aa0578082049050905061012052600260c05118612b49576101005160e0518015615aa057808206905090501515612b4c565b60005b15612b67576101205160018101818110615aa0579050610120525b610120518152505b565b60a05119612b80576001612b85565b60a051155b15612b955760a051815250612c65565b612ba0610100612a1f565b6101005160e052612bb2610120612a81565b610120516101005261010051612be25760e051612bd85760a051815250612c6556612be2565b6000815250612c65565b60a05160e051808202811583838304141715615aa057905090506101205261012051610100518015615aa0578082049050905061014052600260c05118612c3f5761012051610100518015615aa057808206905090501515612c42565b60005b15612c5d576101405160018101818110615aa0579050610140525b610140518152505b565b60405163095ea7b360a05260605160c05260805160e052602060a0604460bc6000855af1612c9a573d600060003e3d6000fd5b3d612cb157803b15615aa057600161010052612cc9565b60203d10615aa05760a0518060011c615aa057610100525b610100905051612d3757600f610120527f617070726f76616c206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b6040516323b872dd60c05260605160e0526080516101005260a05161012052602060c0606460dc6000855af1612d74573d600060003e3d6000fd5b3d612d8b57803b15615aa057600161014052612da3565b60203d10615aa05760c0518060011c615aa057610140525b610140905051612e1357600f610160527f7472616e73666572206661696c656400000000000000000000000000000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b565b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc6000855af1612e48573d600060003e3d6000fd5b3d612e5f57803b15615aa057600161010052612e77565b60203d10615aa05760a0518060011c615aa057610100525b610100905051612ee557600f610120527f7472616e73666572206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b604051600e60605160205260005260406000205401600e606051602052600052604060002055601054604051808201828110615aa0579050905060105560605160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b612f62610100612a1f565b6101005160e052612f74610120612a81565b610120516101005260006101205260e051612f955760a05161012052613058565b60a05161010051116130175760a051610100511161305857600f610140527f616d6f756e7420746f6f206869676800000000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd613058565b60a05160e051808202811583838304141715615aa057905090506101005160a051808203828111615aa057905090508015615aa05780820490509050610120525b6101205161306a576000815250613087565b6101205160405260c05160605261307f612ee7565b610120518152505b565b6040518061309857600161309d565b308118155b9050156130ae576000815250613132565b601654606052606051156130fc5760605163320704ed60805260405160a052602060806024609c845afa6130e7573d600060003e3d6000fd5b60203d10615aa0576080905051815250613132565b61310660a0612a81565b60a05160805260145460a05260a05160805110613127576000815250613132565b60805160a051038152505b565b60016040516020526000526040600020600281019050546080526040516370a0823160c0523060e052602060c0602460dc845afa613177573d600060003e3d6000fd5b60203d10615aa05760c090505160a0526040516307a2d13a60e05260a05161010052602060e0602460fc845afa6131b3573d600060003e3d6000fd5b60203d10615aa05760e090505160c05260805160c05110156131d857608051156131db565b60015b156131ea576000815250613265565b60605160c051808202811583838304141715615aa0579050905060e05260605160e0516080518015615aa05780820490509050808203828111615aa057905090506101005260e0516080518015615aa057808206905090501561325d576101005160018101818110615aa0579050610100525b610100518152505b565b600e6101405160205260005260406000205460a052600160c05261328c610300612a9a565b610300516102e05260175461030052610300511561335f576103005163c36a0eee61032052606061014051610340526101605161036052806103805280610340016000610180518083528060051b600082600a8111615aa057801561330b57905b8060051b6101a001518160051b6020880101526001018181186132ed575b5050820160200191505090508101505060206103206101c461033c845afa613338573d600060003e3d6000fd5b60203d10615aa0576103209050516102e051808281188284100218905090508152506136c8565b60125461032052610320516102e05111156136c057610320516103405260006103605260025480610380528060051b600081601f0160051c600a8111615aa05780156133c057905b80600301548160051b6103a001526001018181186133a7575b5050505061018051156133d657600d54156133d9565b60005b156133fb576101805180610380528060051b806103a0826101a060045afa5050505b600061038051600a8111615aa05780156136b557905b8060051b6103a001516104e05260016104e05160205260005260406000205461349a576011610500527f696e6163746976652073747261746567790000000000000000000000000000006105205261050050610500518061052001601f826000031636823750506308c379a06104c05260206104e052601f19601f6105005101166044016104dcfd5b6102e05161034051808203828111615aa0579050905060016104e05160205260005260406000206002810190505480828118828410021890509050610500526104e051604052610500516060526134f2610540613134565b61054051610520526104e0516307a2d13a6105a0526104e05163d905777e6105605230610580526020610560602461057c845afa613535573d600060003e3d6000fd5b60203d10615aa0576105609050516105c05260206105a060246105bc845afa613563573d600060003e3d6000fd5b60203d10615aa0576105a0905051610540526105005161052051808203828111615aa057905090506105405110156135e1576105205161054051808202811583838304141715615aa05790509050610500518015615aa05780820490509050610520526105405161052051808201828110615aa05790509050610500525b610500516135ee576136aa565b61052051156136055761270f610160511115613608565b60005b15613663576103405161050051808201828110615aa0579050905061016051808202811583838304141715615aa05790509050612710810490506103605161052051808201828110615aa057905090501115613663576136b5565b6103405161050051808201828110615aa05790509050610340526102e051610340511061368f576136b5565b6103605161052051808201828110615aa05790509050610360525b600101818118613411575b5050610340516102e0525b6102e0518152505b565b602154615aa0576101c0516040526136e3610200613089565b610200516101e0511115613757576014610220527f657863656564206465706f736974206c696d69740000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615ab260003960005160405233606052306080526101e05160a05261377c612d39565b6012546101e051808201828110615aa057905090506012556101e05160a0526101c05160c0526137ad610220612f57565b610220516102005261020051613823576010610220527f63616e6e6f74206d696e74207a65726f000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76101e0516102205261020051610240526040610220a361020051815250565b602154615aa0576101e05160a052600260c052613889610220612a9a565b6102205161020052610200516138ff576013610220527f63616e6e6f74206465706f736974207a65726f000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c051604052613911610220613089565b61022051610200511115613985576014610240527f657863656564206465706f736974206c696d69740000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b6020615ab260003960005160405233606052306080526102005160a0526139aa612d39565b60125461020051808201828110615aa057905090506012556101e0516040526101c0516060526139d8612ee7565b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d761020051610220526101e051610240526040610220a361020051815250565b604051630a28a47760a05260605160c052602060a0602460bc845afa613a4b573d600060003e3d6000fd5b60203d10615aa05760a09050516040516370a0823160e0523061010052602060e0602460fc845afa613a82573d600060003e3d6000fd5b60203d10615aa05760e09050518082811882841002189050905060805260405163ba08765260a05260805160c0523060e0523061010052602060a0606460bc6000855af1613ad5573d600060003e3d6000fd5b60203d10615aa05760a05050565b61060051613b5157600c610800527f5a45524f204144445245535300000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b612710610680511115613bc4576008610800527f6d6178206c6f73730000000000000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b60175415613c7757610620516101405261068051610160526106a05180610180528060051b806101a0826106c060045afa505050613c03610800613267565b61080051610640511115613c77576015610820527f657863656564207769746864726177206c696d697400000000000000000000006108405261082050610820518061084001601f826000031636823750506308c379a06107e052602061080052601f19601f6108205101166044016107fcfd5b6106605161080052600e610620516020526000526040600020546108205261080051613d03576013610840527f6e6f2073686172657320746f2072656465656d000000000000000000000000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b61080051610820511015613d7757601d610840527f696e73756666696369656e742073686172657320746f2072656465656d0000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b610620516105e05114613da2576106205160c0526105e05160e0526106605161010052613da26121c9565b610640516108405260125461086052610860516108405111156144385760025480610880528060051b600081601f0160051c600a8111615aa0578015613dfd57905b80600301548160051b6108a00152600101818118613de4575b505050506106a05115613e1357600d5415613e16565b60005b15613e38576106a05180610880528060051b806108a0826106c060045afa5050505b6011546109e052610860516108405103610a00526000610a20526020615ab26000396000516370a08231610a605230610a80526020610a606024610a7c845afa613e87573d600060003e3d6000fd5b60203d10615aa057610a60905051610a4052600061088051600a8111615aa05780156143ba57905b8060051b6108a00151610a60526001610a6051602052600052604060002054613f38576011610a80527f696e616374697665207374726174656779000000000000000000000000000000610aa052610a8050610a805180610aa001601f826000031636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b6001610a6051602052600052604060002060028101905054610a8052610a0051610a805180828118828410021890509050610a2052610a60516307a2d13a610b0052610a605163d905777e610ac05230610ae0526020610ac06024610adc845afa613fa8573d600060003e3d6000fd5b60203d10615aa057610ac0905051610b20526020610b006024610b1c845afa613fd6573d600060003e3d6000fd5b60203d10615aa057610b00905051610aa052610a6051604052610a2051606052614001610ae0613134565b610ae051610ac052610ac0511561418d57610a2051610ac051808203828111615aa05790509050610aa051101561409857610a2051610ac051808203828111615aa05790509050610ae052610ac051610aa051808202811583838304141715615aa05790509050610ae0518015615aa05780820490509050610ac052610aa051610ac051808201828110615aa05790509050610a20525b610a2051610ac051808203828111615aa05790509050610a205261084051610ac051808203828111615aa0579050905061084052610a0051610ac051808203828111615aa05790509050610a00526109e051610ac051808203828111615aa057905090506109e052610aa05161411357610ac0511515614116565b60005b1561418d57610a8051610ac051808203828111615aa05790509050610ae052610ae0516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b0052610ae051610b20526040610b00a25b610a2051610aa05180828118828410021890509050610a2052610a20516141b3576143af565b610a6051604052610a20516060526141c9613a20565b6020615ab26000396000516370a08231610b005230610b20526020610b006024610b1c845afa6141fe573d600060003e3d6000fd5b60203d10615aa057610b00905051610ae052610ae051610a4051808203828111615aa05790509050610b00526000610b2052610a2051610b00511161425d57610a2051610b0051101561429757610b0051610a205103610b2052614297565b610a8051610b00511161428e57610a2051610a2051610b005103808201828110615aa05790509050610a2052614297565b610a8051610a20525b61086051610a2051610b2051808203828111615aa05790509050808201828110615aa057905090506108605261084051610b2051808203828111615aa05790509050610840526109e051610a2051808203828111615aa057905090506109e052610a8051610a2051610ac051808201828110615aa05790509050808203828111615aa05790509050610b4052610b40516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b6052610b4051610b80526040610b60a261086051610840511161438c576143ba565b610ae051610a4052610a0051610a2051808203828111615aa05790509050610a00525b600101818118613eaf575b50506108405161086051101561443057601c610a60527f696e73756666696369656e742061737365747320696e207661756c7400000000610a8052610a6050610a605180610a8001601f826000031636823750506308c379a0610a20526020610a4052601f19601f610a60510116604401610a3cfd5b6109e0516011555b61084051610640511161444c576000614456565b61270f6106805111155b15614500576106405161068051808202811583838304141715615aa05790509050612710810490506106405161084051808203828111615aa05790509050111561450057600d610880527f746f6f206d756368206c6f7373000000000000000000000000000000000000006108a0526108805061088051806108a001601f826000031636823750506308c379a061084052602061086052601f19601f61088051011660440161085cfd5b610800516040526106205160605261451661291e565b6108605161084051808203828111615aa057905090506012556020615ab26000396000516040526106005160605261084051608052614553612e15565b61062051610600516105e0517ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db6108405161088052610800516108a0526040610880a461084051815250565b6040513081146145b1578015156145b4565b60005b905061461757601f6080527f73747261746567792063616e6e6f74206265207a65726f20616464726573730060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6020615ab26000396000516040516338d52e0f606052602060606004607c845afa614647573d600060003e3d6000fd5b60203d10615aa0576060518060a01c615aa05760a05260a090505118156146c557600d60c0527f696e76616c69642061737365740000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6001604051602052600052604060002054156147385760176060527f737472617465677920616c72656164792061637469766500000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600160405160205260005260406000204281554260018201556000600282015560006003820155506009600254116147865760025460098111615aa057600181016002556040518160030155505b60016040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca60006060a3565b60016040516020526000526040600020546148255760136080527f7374726174656779206e6f74206163746976650000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6000608052600160405160205260005260406000206002810190505415614916576060516148aa57601160a0527f737472617465677920686173206465627400000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b6001604051602052600052604060002060028101905054608052601154608051808203828111615aa057905090506011556040517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d267811600060a05260805160c05260803660e03760c060a0a25b600160405160205260005260406000206000815560006001820155600060028201556000600382015550600060a0526000600254600a8111615aa057801561499a57905b806003015461020052604051610200511461498f5760a05160098111615aa0576001810160a052610200518160051b60c00152505b60010181811861495a575b505060a051806002558060051b600081601f0160051c600a8111615aa05780156149d857905b8060051b60c0015181600301556001018181186149c0575b5050505060026040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca6000610200a3565b610180516101a0526001610160516020526000526040600020600281019050546101c05260215415614a3d5760006101a0525b6101c0516101a05118614ab057601c6101e0527f6e6577206465627420657175616c732063757272656e74206465627400000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101a0516101c05111614e55576001610160516020526000526040600020600381019050546101a0511115614b455760206101e0527f746172676574206465627420686967686572207468616e206d61782064656274610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101605163402d267d6102005230610220526020610200602461021c845afa614b73573d600060003e3d6000fd5b60203d10615aa0576102009050516101e0526101e051614bf3576012610200527f6e6f7468696e6720746f206465706f73697400000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101a0516101c051808203828111615aa05790509050610200526101e051610200511115614c24576101e051610200525b6013546102205260125461024052610220516102405111614ca5576013610260527f6e6f2066756e647320746f206465706f736974000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6102205161024051036102605261026051610200511115614cc95761026051610200525b6102005115614e36576020615ab26000396000516040526101605160605261020051608052614cf6612c67565b6020615ab26000396000516370a082316102a052306102c05260206102a060246102bc845afa614d2b573d600060003e3d6000fd5b60203d10615aa0576102a09050516102805261016051636e553f656102a052610200516102c052306102e05260206102a060446102bc6000855af1614d75573d600060003e3d6000fd5b60203d10615aa0576102a050506020615ab26000396000516370a082316102c052306102e05260206102c060246102dc845afa614db7573d600060003e3d6000fd5b60203d10615aa0576102c09050516102a0526020615ab2600039600051604052610160516060526000608052614deb612c67565b610280516102a051808203828111615aa057905090506102005260125461020051808203828111615aa0579050905060125560115461020051808201828110615aa057905090506011555b6101c05161020051808201828110615aa057905090506101a052615175565b6101a0516101c051036101e052601354610200526012546102205261020051610220516101e051808201828110615aa057905090501015614eb4576102205161020051036101e0526101c0516101e0511115614eb4576101c0516101e0525b610160516307a2d13a6102a0526101605163d905777e6102605230610280526020610260602461027c845afa614eef573d600060003e3d6000fd5b60203d10615aa0576102609050516102c05260206102a060246102bc845afa614f1d573d600060003e3d6000fd5b60203d10615aa0576102a09050516102405261024051614f9d576013610260527f6e6f7468696e6720746f207769746864726177000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6101e051610240511015614fb457610240516101e0525b610160516040526101e051606052614fcd610280613134565b6102805161026052610260511561504457601e610280527f73747261746567792068617320756e7265616c69736564206c6f7373657300006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b6020615ab26000396000516370a082316102a052306102c05260206102a060246102bc845afa615079573d600060003e3d6000fd5b60203d10615aa0576102a090505161028052610160516040526101e0516060526150a1613a20565b6020615ab26000396000516370a082316102c052306102e05260206102c060246102dc845afa6150d6573d600060003e3d6000fd5b60203d10615aa0576102c09050516102a0526102a05161028051808203828111615aa057905090506101c051808281188284100218905090506102c0526101e0516102c051111561512a576102c0516101e0525b6012546102c051808201828110615aa057905090506012556011546101e051808203828111615aa057905090506011556101c0516101e051808203828111615aa057905090506101a0525b6101a051600161016051602052600052604060002060028101905055610160517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c0516101e0526101a0516102005260406101e0a26101a051815250565b60016101a0516020526000526040600020546152515760116101c0527f696e6163746976652073747261746567790000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b615259612a42565b6101a0516370a082316101e052306102005260206101e060246101fc845afa615287573d600060003e3d6000fd5b60203d10615aa0576101e09050516101c0526101a0516307a2d13a610200526101c051610220526020610200602461021c845afa6152ca573d600060003e3d6000fd5b60203d10615aa0576102009050516101e05260016101a0516020526000526040600020600281019050546102005260403661022037610200516101e0511161531e576101e05161020051036102405261532c565b610200516101e05103610220525b608036610260376015546102e0526102e05115615452576102e05163921f8a8f610300526101a05161032052610220516103405261024051610360526040610300606461031c6000855af1615386573d600060003e3d6000fd5b60403d10615aa0576103009050805161026052602081015161028052506102605115615452576000610300526020615af2600039600051635153b199610320526040610320600461033c845afa6153e2573d600060003e3d6000fd5b60403d10615aa057610320518060101c615aa05761038052610340518060a01c615aa0576103a052610380905080516103005260208101516102c0525060016103005112615452576102605161030051808202811583838304141715615aa05790509050612710810490506102a0525b606036610300376102405161026051808201828110615aa057905090501561551a57610300516102405161026051808201828110615aa0579050905060a052600260c0526154a1610360612b71565b61036051808201828110615aa0579050905061030052610260511561551a57610260516102a051808203828111615aa0579050905060a052600160c0526154e9610360612b71565b61036051610320526102a0511561551a576102a05160a052600160c052615511610360612b71565b61036051610340525b600061036052610280511561561d57610280516020615ab26000396000516370a08231610380526102e0516103a0526020610380602461039c845afa615565573d600060003e3d6000fd5b60203d10615aa0576103809050516020615ab260003960005163dd62ed3e6103c0526102e0516103e052306104005260206103c060446103dc845afa6155b0573d600060003e3d6000fd5b60203d10615aa0576103c09050518082811882841002189050905080828118828410021890509050610280526020615ab26000396000516040526102e051606052306080526102805160a052615604612d39565b60125461028051808201828110615aa057905090506012555b610220511561566d5760016101a0516020526000526040600020600281019050805461022051808201828110615aa0579050905081555060115461022051808201828110615aa057905090506011555b602254610380526102205161028051808201828110615aa057905090501561569a5761038051151561569d565b60005b156156d3576102205161028051808201828110615aa0579050905060a0523060c0526156ca6103a0612f57565b6103a051610360525b61024051156157235760016101a0516020526000526040600020600281019050805461024051808203828111615aa0579050905081555060115461024051808203828111615aa057905090506011555b600e3060205260005260406000205461036051808203828111615aa057905090506103a05261030051156157ef57610300516103a05161036051808201828110615aa057905090508082811882841002189050905061030052610300516040523060605261578f61291e565b6103005161036051808281188284100218905090506103c052610360516103c051808203828111615aa05790509050610360526103a051610300516103c051808203828111615aa05790509050808203828111615aa057905090506103a0525b610320511561580e57610320516040526102e05160605261580e612ee7565b610340511561582d57610340516040526102c05160605261582d612ee7565b6103a05161036051808201828110615aa057905090506103c0526103c0511561592a5760006103e0526023546104005242610400511115615898576103a0516104005142808203828111615aa05790509050808202811583838304141715615aa057905090506103e0525b6103e0516103605161038051808202811583838304141715615aa05790509050808201828110615aa057905090506103c0518015615aa05780820490509050610420526103c05164e8d4a5100081028164e8d4a51000820418615aa0579050610420518015615aa057808204905090506024554261042051808201828110615aa0579050905060235542602555615930565b60006024555b4260016101a0516020526000526040600020600181019050556101a0517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d2678116102205161042052610240516104405260016101a051602052600052604060002060028101905054610460526103405160a052600160c0526159b16103e0612a9a565b6103e051610480526103405161032051808201828110615aa0579050905060a052600160c0526159e2610400612a9a565b610400516104a052610280516104c05260c0610420a261022051815261024051602082015250565b60186040516020526000526040600020546060511615615a2b576001615a3d565b60196060516020526000526040600020545b615a9e57600b6080527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b600080fda165767970657283000307000b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000e9e8c89c8fc7e8b8f23425688eb68987231178e5\"\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "yvAjnaDAI no state overrides [0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": 1,", + " \"result\": [", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0x5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95\",", + " \"0x00000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000340b5fa7123377b2b772d000000000000000000000000000000000000000000033e283f765985925b2328\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf5\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000003bb83ee9943b1704591\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0xfbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000003bcfed173ed5fbdeadc0000000000000000000000000000000000000000000003bb83ee9943b1704591\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf8\",", + " \"removed\": false", + " }", + " ]", + "}", + "", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : 1,\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_getLogs\",\n \"params\" : [\n {\n \"address\" : \"0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB\",\n \"fromBlock\" : 19266110,\n \"toBlock\" : 19266110\n },\n {}\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + }, + { + "name": "yvAjnaDAI [0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB]", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var expected = {", + " \"jsonrpc\": \"2.0\",", + " \"id\": 1,", + " \"result\": [", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0x5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95\",", + " \"0x00000000000000000000000083f20f44975d03b1b09e64809b757c47f942beea\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000340b5fa7123377b2b772d000000000000000000000000000000000000000000033e283f765985925b2328\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf5\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000000000000000000000000000000000000000000000\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000003bb83ee9943b1704591\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf6\",", + " \"removed\": false", + " },", + " {", + " \"address\": \"0xe24ba27551abe96ca401d39761ca2319ea14e3cb\",", + " \"topics\": [", + " \"0xfbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\",", + " \"0x0000000000000000000000007d7aec26dca32dfe31a7d822e4308ffec2870fe1\"", + " ],", + " \"data\": \"0x0000000000000000000000000000000000000000000003bcfed173ed5fbdeadc0000000000000000000000000000000000000000000003bb83ee9943b1704591\",", + " \"blockNumber\": \"0x125fa3e\",", + " \"transactionHash\": \"0xc59038827fa9bdc54b139b386e1594ae60add87d0f69254ca7c024aa39058736\",", + " \"transactionIndex\": \"0x54\",", + " \"blockHash\": \"0x3fdf690476ab9b0aecd50c11c74f7f869bb5cf3f6d02fd76b356f21841501160\",", + " \"logIndex\": \"0xf8\",", + " \"removed\": false", + " }", + " ]", + "}", + "", + "", + "pm.test('Has correct result', function() {", + " pm.expect(pm.response.json()).to.be.deep.equal(expected);", + "})", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\" : 1,\n \"jsonrpc\" : \"2.0\",\n \"method\" : \"overlay_getLogs\",\n \"params\" : [\n {\n \"address\" : \"0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB\",\n \"fromBlock\" : 19266110,\n \"toBlock\" : 19266110\n },\n {\n \"0xe24BA27551aBE96Ca401D39761cA2319Ea14e3CB\" : {\n \"code\": \"0x6003361161000c57612165565b60003560e01c34615a74576371da8a8d811861007a5760243610615a74576004358060a01c615a745760c0523360405260086060526100496159de565b60c05160155560c0517f28709a2dab2a5d5e8688e96159011151c51644ab21839a8a45b449634d7c8b2b600060e0a2005b632d9caa4e81186102585760443610615a7457600435600401600a813511615a745780358060c052600081600a8111615a745780156100da57905b8060051b6020850101358060a01c615a74578160051b60e001526001018181186100b5575b505050503360405260106060526100ef6159de565b600060c051600a8111615a7457801561019757905b8060051b60e001516102205260016102205160205260005260406000205461018c576009610240527f21696e61637469766500000000000000000000000000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b600101818118610104575b505060c051806002558060051b600081601f0160051c600a8111615a745780156101d557905b8060051b60e0015181600301556001018181186101bd575b505050507f0bc0cb8c5ccee13e6a2fd26a699f57ad7ff6e454e6aae97ec41cd2eb9ebd63a5602080610220528061022001600060c0518083528060051b600082600a8111615a7457801561024257905b8060051b60e001518160051b602088010152600101818118610225575b50508201602001915050905081019050610220a1005b6329c8a33b81186102be5760243610615a74576004358060011c615a745760c05233604052601060605261028a6159de565b60c051600d557f1f88e73ebc721f227812938fe07a069ec1f7136aafacb397ed460bd15dee13f160c05160e052602060e0a1005b636fe01d1e81186103835760243610615a7457602154615a7457336040526101006060526102ea6159de565b6016541561034f57600c60c0527f7573696e67206d6f64756c65000000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd6260043560c052602060c0a1005b63bb43546681186104565760243610615a74576004358060a01c615a745760c052602154615a7457336040526101006060526103bd6159de565b601454191561042557601360e0527f7573696e67206465706f736974206c696d6974000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60c05160165560c0517f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060e0a2005b637b67589481186104ba5760243610615a74576004358060a01c615a745760c052336040526102006060526104896159de565b60c05160175560c0517fce6e3f8beda82a13c441d76efd4a6335760f219f38c60502e6680060874e109d600060e0a2005b63bdd81c0181186105135760243610615a7457336040526104006060526104df6159de565b6004356013557f01a4494beed88920b88742cc58f2744e198f55ff192635a1fbabc6be8ffade8160043560c052602060c0a1005b63df69b22a81186106075760243610615a7457336040526108006060526105386159de565b6301e1855860043511156105a357601b60c0527f70726f66697420756e6c6f636b2074696d6520746f6f206c6f6e67000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b6004356105d357600e30602052600052604060002054604052306060526105c861291e565b600060245560006023555b6004356022557ff361aed463da6fa20358e45c6209f1d3e16d4eca706e6eab0b0aeb338729c77a60043560c052602060c0a1005b632cf7fd8581186106815760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a745760605160186040516020526000526040600020556060516040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63a97cefa2811861071b5760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a7457606051601860405160205260005260406000205417601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b63e2bf56dd81186107b95760443610615a74576004358060a01c615a745760405260243580600e1c615a7457606052601a543318615a7457606051613fff18601860405160205260005260406000205416601860405160205260005260406000205560186040516020526000526040600020546040517f78557646b1d8efa2cd49740d66df5aca39eb610ca8ca0e1ccac08979b6b2c46e60006080a3005b630b10dd8081186108235760243610615a745760043580600e1c615a7457604052601a543318615a74576001601960405160205260005260406000205560016040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63d52fe498811861088d5760243610615a745760043580600e1c615a7457604052601a543318615a74576000601960405160205260005260406000205560026040517ffe075e51fb76b038a5d44dd2e56b16e6c928e35c0f3cc237312ad09bbca5aee560006060a3005b63ef54cefd81186108bf5760243610615a74576004358060a01c615a7457604052601a543318615a7457604051601b55005b63f776bf1f811861090d5760043610615a7457601b543318615a745733601a556000601b55337fce93baa0b608a7d420822b6b90cfcccb70574363ba4fd26ef5ac17dd465016c460006040a2005b63bf86d690811861092c5760043610615a745760215460405260206040f35b63d9a0e97a811861094f5760043610615a7457602061094b6080612981565b6080f35b6399530b0681186109955760043610615a745760206020615aa6600039600051604d8111615a745780600a0a905060a052600160c052610990610140612a6e565b610140f35b63a9bbf1cc81186109ff5760043610615a74576020806040528060400160006002548083528060051b600082600a8111615a745780156109eb57905b80600301548160051b6020880101526001018181186109d1575b505082016020019150509050810190506040f35b636ec2b8d48118610a605760243610615a74576004358060a01c615a74576104e052600054600214615a74576002600055336040526020606052610a416159de565b60406104e0516101a052610a566105006151a9565b6105006003600055f35b63e5e918188118610e305760443610615a74576004358060a01c615a74576101a052600054600214615a7457600260005533604052611000606052610aa36159de565b60016101a051602052600052604060002054610b1f57600a6101c0527f6e6f7420616374697665000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60016101a0516020526000526040600020600281019050546101c0526024356101e0526101c051610bb057600e610200527f6e6f7468696e6720746f206275790000000000000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101e051610c1e576013610200527f6e6f7468696e6720746f206275792077697468000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101c0516101e0511115610c35576101c0516101e0525b6101a0516370a082316102205230610240526020610220602461023c845afa610c63573d600060003e3d6000fd5b60203d10615a74576102209050516101e051808202811583838304141715615a7457905090506101c0518015615a7457808204905090506102005261020051610d0c57600f610220527f63616e6e6f7420627579207a65726f00000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615a8660003960005160405233606052306080526101e05160a052610d31612d0d565b60016101a051602052600052604060002060028101905080546101e051808203828111615a7457905090508155506011546101e051808203828111615a7457905090506011556012546101e051808201828110615a7457905090506012556101a0517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c051610220526101c0516101e051808203828111615a745790509050610240526040610220a26101a0516040523360605261020051608052610df6612de9565b6101a0517fe94e7f88819f66c19b097748cb754149f63b1a176ed425dee1f1ee933e6d09b06101e051610220526020610220a26003600055005b63de7aeb418118610e745760243610615a74576004358060a01c615a745761010052336040526001606052610e636159de565b61010051604052610e72614573565b005b63577db3168118610ebd5760243610615a74576004358060a01c615a745761022052336040526002606052610ea76159de565b610220516040526000606052610ebb614787565b005b63fd129e638118610f065760243610615a74576004358060a01c615a745761022052336040526004606052610ef06159de565b610220516040526001606052610f04614787565b005b63b9ddcd688118610ff85760443610615a74576004358060a01c615a745760c052336040526080606052610f386159de565b600160c051602052600052604060002054610fac57601160e0527f696e6163746976652073747261746567790000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b602435600160c05160205260005260406000206003810190505560c051337fb3eef2123fec1523a6bbc90aceb203000154c1a4974335fe06b544c7534d4b8960243560e052602060e0a3005b630aeebf5581186110605760443610615a74576004358060a01c615a745761030052600054600214615a7457600260005533604052604060605261103a6159de565b60206103005161016052602435610180526110566103206149de565b6103206003600055f35b6336a5545081186111405760043610615a7457336040526120006060526110856159de565b602154615a74576001602155601654156110c757600060165560007f777d215db24fb9fee4ded85c66b422abd7162a1caa6ed3ec4c031f6cd29ada52600060c0a25b60006014557fae565aab888bca5e19e25a13db7b0c9144305bf55cb0f3f4d724f730e5acdd62600060c052602060c0a16040601833602052600052604060002054176018336020526000526040600020557f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf8600060c0a1005b636e553f65811861119c5760443610615a74576024358060a01c615a745761026052600054600214615a745760026000556020336101a052610260516101c0526004356101e05261119261028061369e565b6102806003600055f35b6394bf804d81186111f85760443610615a74576024358060a01c615a745761028052600054600214615a745760026000556020336101a052610280516101c0526004356101e0526111ee6102a061383f565b6102a06003600055f35b63b460af9481186112175760643610615a7457604036610be0376112aa565b63a318c1a4811861123c5760843610615a7457606435610be0526000610c00526112aa565b63d81a09f681186113585760c43610615a7457606435610be052608435600401600a813511615a7457803580610c0052600081600a8111615a745780156112a557905b8060051b6020850101358060a01c615a74578160051b610c20015260010181811861127f575b505050505b6024358060a01c615a7457610ba0526044358060a01c615a7457610bc052600054600214615a7457600260005560043560a052600260c0526112ed610d80612b45565b610d8051610d6052336105e052610ba05161060052610bc0516106205260043561064052610d605161066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa505050611348610d80613ab7565b610d80506020610d606003600055f35b63ba087652811861137d5760643610615a7457612710610be0526000610c0052611410565b639f40a7b381186113a25760843610615a7457606435610be0526000610c0052611410565b6306580f2d81186114ba5760c43610615a7457606435610be052608435600401600a813511615a7457803580610c0052600081600a8111615a7457801561140b57905b8060051b6020850101358060a01c615a74578160051b610c2001526001018181186113e5575b505050505b6024358060a01c615a7457610ba0526044358060a01c615a7457610bc052600054600214615a7457600260005560043560a052600160c052611453610d80612a6e565b610d8051610d60526020336105e052610ba05161060052610bc05161062052610d60516106405260043561066052610be05161068052610c0051806106a0528060051b806106c082610c2060045afa5050506114b0610d80613ab7565b610d806003600055f35b63095ea7b381186114fb5760443610615a74576004358060a01c615a745760c05260203360405260c0516060526024356080526114f760e061216b565b60e0f35b63a9059cbb81186115605760443610615a74576004358060a01c615a7457610100526101005130811461153057801515611533565b60005b905015615a745733604052610100516060526024356080526115536122b7565b6001610120526020610120f35b6323b872dd81186115d75760643610615a74576004358060a01c615a74576101e0526024358060a01c615a745761020052610200513081146115a4578015156115a7565b60005b905015615a745760206101e05161018052610200516101a0526044356101c0526115d26102206123a6565b610220f35b6339509351811861161a5760443610615a74576004358060a01c615a745760e05260203360405260e0516060526024356080526116156101006123e5565b610100f35b63a457c2d7811861165d5760443610615a74576004358060a01c615a745760e05260203360405260e051606052602435608052611658610100612479565b610100f35b63d505accf81186116d75760e43610615a74576004358060a01c615a7457610460526024358060a01c615a7457610480526084358060081c615a74576104a05260206104605161018052610480516101a052604060446101c0376104a05161020052604060a4610220376116d26104c06125e7565b6104c0f35b6370a0823181186117545760243610615a74576004358060a01c615a7457608052306080511861173957600e60805160205260005260406000205461171c60a0612981565b60a051808203828111615a74579050905060c052602060c0611752565b600e60805160205260005260406000205460a052602060a05bf35b6318160ddd81186117775760043610615a7457602061177360a06129f3565b60a0f35b6338d52e0f811861179e5760043610615a74576020615a8660003960005160405260206040f35b63313ce56781186117cd5760043610615a74576020615aa66000396000518060081c615a745760405260206040f35b6301e1d11481186117f05760043610615a745760206117ec6040612a55565b6040f35b639aa7df94811861180f5760043610615a745760125460405260206040f35b63fc7b9c18811861182e5760043610615a745760115460405260206040f35b63c6e6f592811861185e5760243610615a7457602060043560a052600160c052611859610160612b45565b610160f35b63ef8b30f7811861188e5760243610615a7457602060043560a052600160c052611889610160612b45565b610160f35b63b3d7f6b981186118be5760243610615a7457602060043560a052600260c0526118b9610140612a6e565b610140f35b6307a2d13a81186118ee5760243610615a7457602060043560a052600160c0526118e9610140612a6e565b610140f35b63402d267d81186119255760243610615a74576004358060a01c615a745760c052602060c05160405261192160e061305d565b60e0f35b63c63d75b6811861197f5760243610615a74576004358060a01c615a745761016052610160516040526119596101a061305d565b6101a0516101805260206101805160a052600160c05261197a6101a0612b45565b6101a0f35b63ce96cb77811861199e5760243610615a745760403661060037611a31565b6385b6875681186119c35760443610615a745760243561060052600061062052611a31565b6365cb67658118611a7e5760843610615a745760243561060052604435600401600a813511615a745780358061062052600081600a8111615a74578015611a2c57905b8060051b6020850101358060a01c615a74578160051b6106400152600101818118611a06575b505050505b6004358060a01c615a74576105e05260206105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611a7961078061323b565b610780f35b63d905777e8118611aa35760243610615a745761271061060052600061062052611b36565b634abe41378118611ac85760443610615a745760243561060052600061062052611b36565b6334b5fab68118611bd15760843610615a745760243561060052604435600401600a813511615a745780358061062052600081600a8111615a74578015611b3157905b8060051b6020850101358060a01c615a74578160051b6106400152600101818118611b0b575b505050505b6004358060a01c615a74576105e0526105e0516101405261060051610160526106205180610180528060051b806101a08261064060045afa505050611b7c61078061323b565b610780516107c05260026107e0526107c05160a0526107e05160c052611ba36107a0612b45565b6107a051600e6105e05160205260005260406000205480828118828410021890509050610800526020610800f35b630a28a4778118611c015760243610615a7457602060043560a052600260c052611bfc610160612b45565b610160f35b634cdad5068118611c315760243610615a7457602060043560a052600160c052611c2c610140612a6e565b610140f35b63258294108118611cb95760043610615a745760208060805260056040527f332e302e3100000000000000000000000000000000000000000000000000000060605260408160800181518082526020830160208301815181525050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b6366d3ae578118611d1a5760443610615a74576004358060a01c615a74576101205260243560016101205160205260005260406000206002810190505410615a7457602061012051604052602435606052611d15610140613108565b610140f35b630952864e8118611d395760043610615a745760225460405260206040f35b632d6326928118611d585760043610615a745760235460405260206040f35b635141eebb8118611d775760043610615a745760245460405260206040f35b638afca8f08118611d965760043610615a745760255460405260206040f35b633644e5158118611dbb5760043610615a74576020611db661018061250d565b610180f35b632dd310008118611de25760043610615a74576020615ac660003960005160405260206040f35b6339ebf8238118611e375760243610615a74576004358060a01c615a74576040526001604051602052600052604060002080546060526001810154608052600281015460a052600381015460c0525060806060f35b638bf03b9e8118611e645760243610615a7457600435600254811015615a74576003015460405260206040f35b631e56558d8118611e835760043610615a7457600d5460405260206040f35b63dd62ed3e8118611edd5760443610615a74576004358060a01c615a74576040526024358060a01c615a7457606052600f604051602052600052604060002080606051602052600052604060002090505460805260206080f35b633940e9ee8118611efc5760043610615a745760105460405260206040f35b63356d64098118611f1b5760043610615a745760135460405260206040f35b63e46a57978118611f3a5760043610615a745760145460405260206040f35b634fb3ccc58118611f595760043610615a745760155460405260206040f35b6361c2ccf48118611f785760043610615a745760165460405260206040f35b63f5ba68f38118611f975760043610615a745760175460405260206040f35b63993746428118611fd25760243610615a74576004358060a01c615a7457604052601860405160205260005260406000205460605260206060f35b63f3789e45811861200d5760243610615a745760043580600e1c615a7457604052601960405160205260005260406000205460605260206060f35b6379b98917811861202c5760043610615a7457601a5460405260206040f35b639a98f418811861204b5760043610615a7457601b5460405260206040f35b6306fdde0381186120d05760043610615a745760208060405280604001601c5480825260208201600082601f0160051c60028111615a745780156120a257905b80601d01548160051b84015260010181811861208b575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6395d89b4181186121285760043610615a745760208060405280604001601f5480825260208201602054815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b637ecebe0081186121635760243610615a74576004358060a01c615a7457604052602660405160205260005260406000205460605260206060f35b505b60006000fd5b608051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560805160a052602060a0a36001815250565b600f60c05160205260005260406000208060e0516020526000526040600020905054610120527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61012051146122b5576101005161012051101561228d576016610140527f696e73756666696369656e7420616c6c6f77616e6365000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b60c05160405260e0516060526101005161012051036080526122b061014061216b565b610140505b565b600e60405160205260005260406000205460a05260805160a051101561233457601260c0527f696e73756666696369656e742066756e6473000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60805160a05103600e604051602052600052604060002055608051600e60605160205260005260406000205401600e6060516020526000526040600020556060516040517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60805160c052602060c0a3565b6101805160c0523360e0526101c051610100526123c16121c9565b610180516040526101a0516060526101c0516080526123de6122b7565b6001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808201828110615a74579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b600f6040516020526000526040600020806060516020526000526040600020905054608051808203828111615a74579050905060a05260a051600f60405160205260005260406000208060605160205260005260406000209050556060516040517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560a05160c052602060c0a36001815250565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8160e00152602081019050600b6040527f596561726e205661756c7400000000000000000000000000000000000000000060605260408051602082012090508160e0015260208101905060056080527f332e302e3100000000000000000000000000000000000000000000000000000060a05260808051602082012090508160e00152602081019050468160e00152602081019050308160e001526020810190508060c05260c09050805160208201209050815250565b6101805161265557600d610260527f696e76616c6964206f776e6572000000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b426101e05110156126c657600e610260527f7065726d697420657870697265640000000000000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60266101805160205260005260406000205461026052600060026102a0527f19010000000000000000000000000000000000000000000000000000000000006102c0526102a080516020820183610400018151815250508083019250505061272f6102e061250d565b6102e05181610400015260208101905060007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9816103200152602081019050610180518161032001526020810190506101a0518161032001526020810190506101c051816103200152602081019050610260518161032001526020810190506101e05181610320015260208101905080610300526103009050805160208201209050816104000152602081019050806103e0526103e090508051602082012090506102805261018051610280516102a052610200516102c052610220516102e05261024051610300526020600060806102a060015afa506000511815612895576011610340527f696e76616c6964207369676e61747572650000000000000000000000000000006103605261034050610340518061036001601f826000031636823750506308c379a061030052602061032052601f19601f61034051011660440161031cfd5b6101c051600f610180516020526000526040600020806101a05160205260005260406000209050556102605160018101818110615a745790506026610180516020526000526040600020556101a051610180517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256101c0516102a05260206102a0a36001815250565b600e60605160205260005260406000208054604051808203828111615a7457905090508155506040516010540360105560006060517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b602354604052600060605242604051116129b457604051156129eb57600e306020526000526040600020546060526129eb565b60245442602554808203828111615a745790509050808202811583838304141715615a74579050905064e8d4a51000810490506060525b606051815250565b601054612a006080612981565b608051808203828111615a745790509050815250565b612a2060c0612981565b60c05160a05260a051612a3257612a53565b426023541115612a4157426025555b60a05160405230606052612a5361291e565b565b601254601154808201828110615a745790509050815250565b60a05119612a7d576001612a82565b60a051155b15612a925760a051815250612b43565b612a9d6101006129f3565b6101005160e05260e051612ab65760a051815250612b43565b60a051612ac4610120612a55565b61012051808202811583838304141715615a745790509050610100526101005160e0518015615a74578082049050905061012052600260c05118612b1d576101005160e0518015615a7457808206905090501515612b20565b60005b15612b3b576101205160018101818110615a74579050610120525b610120518152505b565b60a05119612b54576001612b59565b60a051155b15612b695760a051815250612c39565b612b746101006129f3565b6101005160e052612b86610120612a55565b610120516101005261010051612bb65760e051612bac5760a051815250612c3956612bb6565b6000815250612c39565b60a05160e051808202811583838304141715615a7457905090506101205261012051610100518015615a74578082049050905061014052600260c05118612c135761012051610100518015615a7457808206905090501515612c16565b60005b15612c31576101405160018101818110615a74579050610140525b610140518152505b565b60405163095ea7b360a05260605160c05260805160e052602060a0604460bc6000855af1612c6e573d600060003e3d6000fd5b3d612c8557803b15615a7457600161010052612c9d565b60203d10615a745760a0518060011c615a7457610100525b610100905051612d0b57600f610120527f617070726f76616c206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b6040516323b872dd60c05260605160e0526080516101005260a05161012052602060c0606460dc6000855af1612d48573d600060003e3d6000fd5b3d612d5f57803b15615a7457600161014052612d77565b60203d10615a745760c0518060011c615a7457610140525b610140905051612de757600f610160527f7472616e73666572206661696c656400000000000000000000000000000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b565b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc6000855af1612e1c573d600060003e3d6000fd5b3d612e3357803b15615a7457600161010052612e4b565b60203d10615a745760a0518060011c615a7457610100525b610100905051612eb957600f610120527f7472616e73666572206661696c656400000000000000000000000000000000006101405261012050610120518061014001601f826000031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b604051600e60605160205260005260406000205401600e606051602052600052604060002055601054604051808201828110615a74579050905060105560605160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160805260206080a3565b612f366101006129f3565b6101005160e052612f48610120612a55565b610120516101005260006101205260e051612f695760a0516101205261302c565b60a0516101005111612feb5760a051610100511161302c57600f610140527f616d6f756e7420746f6f206869676800000000000000000000000000000000006101605261014050610140518061016001601f826000031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd61302c565b60a05160e051808202811583838304141715615a7457905090506101005160a051808203828111615a7457905090508015615a745780820490509050610120525b6101205161303e57600081525061305b565b6101205160405260c051606052613053612ebb565b610120518152505b565b6040518061306c576001613071565b308118155b905015613082576000815250613106565b601654606052606051156130d05760605163320704ed60805260405160a052602060806024609c845afa6130bb573d600060003e3d6000fd5b60203d10615a74576080905051815250613106565b6130da60a0612a55565b60a05160805260145460a05260a051608051106130fb576000815250613106565b60805160a051038152505b565b60016040516020526000526040600020600281019050546080526040516370a0823160c0523060e052602060c0602460dc845afa61314b573d600060003e3d6000fd5b60203d10615a745760c090505160a0526040516307a2d13a60e05260a05161010052602060e0602460fc845afa613187573d600060003e3d6000fd5b60203d10615a745760e090505160c05260805160c05110156131ac57608051156131af565b60015b156131be576000815250613239565b60605160c051808202811583838304141715615a74579050905060e05260605160e0516080518015615a745780820490509050808203828111615a7457905090506101005260e0516080518015615a74578082069050905015613231576101005160018101818110615a74579050610100525b610100518152505b565b600e6101405160205260005260406000205460a052600160c052613260610300612a6e565b610300516102e052601754610300526103005115613333576103005163c36a0eee61032052606061014051610340526101605161036052806103805280610340016000610180518083528060051b600082600a8111615a745780156132df57905b8060051b6101a001518160051b6020880101526001018181186132c1575b5050820160200191505090508101505060206103206101c461033c845afa61330c573d600060003e3d6000fd5b60203d10615a74576103209050516102e0518082811882841002189050905081525061369c565b60125461032052610320516102e051111561369457610320516103405260006103605260025480610380528060051b600081601f0160051c600a8111615a7457801561339457905b80600301548160051b6103a0015260010181811861337b575b5050505061018051156133aa57600d54156133ad565b60005b156133cf576101805180610380528060051b806103a0826101a060045afa5050505b600061038051600a8111615a7457801561368957905b8060051b6103a001516104e05260016104e05160205260005260406000205461346e576011610500527f696e6163746976652073747261746567790000000000000000000000000000006105205261050050610500518061052001601f826000031636823750506308c379a06104c05260206104e052601f19601f6105005101166044016104dcfd5b6102e05161034051808203828111615a74579050905060016104e05160205260005260406000206002810190505480828118828410021890509050610500526104e051604052610500516060526134c6610540613108565b61054051610520526104e0516307a2d13a6105a0526104e05163d905777e6105605230610580526020610560602461057c845afa613509573d600060003e3d6000fd5b60203d10615a74576105609050516105c05260206105a060246105bc845afa613537573d600060003e3d6000fd5b60203d10615a74576105a0905051610540526105005161052051808203828111615a7457905090506105405110156135b5576105205161054051808202811583838304141715615a745790509050610500518015615a745780820490509050610520526105405161052051808201828110615a745790509050610500525b610500516135c25761367e565b61052051156135d95761270f6101605111156135dc565b60005b15613637576103405161050051808201828110615a74579050905061016051808202811583838304141715615a745790509050612710810490506103605161052051808201828110615a745790509050111561363757613689565b6103405161050051808201828110615a745790509050610340526102e051610340511061366357613689565b6103605161052051808201828110615a745790509050610360525b6001018181186133e5575b5050610340516102e0525b6102e0518152505b565b602154615a74576101c0516040526136b761020061305d565b610200516101e051111561372b576014610220527f657863656564206465706f736974206c696d69740000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6020615a8660003960005160405233606052306080526101e05160a052613750612d0d565b6012546101e051808201828110615a7457905090506012556101e05160a0526101c05160c052613781610220612f2b565b6102205161020052610200516137f7576010610220527f63616e6e6f74206d696e74207a65726f000000000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76101e0516102205261020051610240526040610220a361020051815250565b602154615a74576101e05160a052600260c05261385d610220612a6e565b6102205161020052610200516138d3576013610220527f63616e6e6f74206465706f736974207a65726f000000000000000000000000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b6101c0516040526138e561022061305d565b61022051610200511115613959576014610240527f657863656564206465706f736974206c696d69740000000000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b6020615a8660003960005160405233606052306080526102005160a05261397e612d0d565b60125461020051808201828110615a7457905090506012556101e0516040526101c0516060526139ac612ebb565b6101c0516101a0517fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d761020051610220526101e051610240526040610220a361020051815250565b604051630a28a47760a05260605160c052602060a0602460bc845afa613a1f573d600060003e3d6000fd5b60203d10615a745760a09050516040516370a0823160e0523061010052602060e0602460fc845afa613a56573d600060003e3d6000fd5b60203d10615a745760e09050518082811882841002189050905060805260405163ba08765260a05260805160c0523060e0523061010052602060a0606460bc6000855af1613aa9573d600060003e3d6000fd5b60203d10615a745760a05050565b61060051613b2557600c610800527f5a45524f204144445245535300000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b612710610680511115613b98576008610800527f6d6178206c6f73730000000000000000000000000000000000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b60175415613c4b57610620516101405261068051610160526106a05180610180528060051b806101a0826106c060045afa505050613bd761080061323b565b61080051610640511115613c4b576015610820527f657863656564207769746864726177206c696d697400000000000000000000006108405261082050610820518061084001601f826000031636823750506308c379a06107e052602061080052601f19601f6108205101166044016107fcfd5b6106605161080052600e610620516020526000526040600020546108205261080051613cd7576013610840527f6e6f2073686172657320746f2072656465656d000000000000000000000000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b61080051610820511015613d4b57601d610840527f696e73756666696369656e742073686172657320746f2072656465656d0000006108605261084050610840518061086001601f826000031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b610620516105e05114613d76576106205160c0526105e05160e0526106605161010052613d766121c9565b6106405161084052601254610860526108605161084051111561440c5760025480610880528060051b600081601f0160051c600a8111615a74578015613dd157905b80600301548160051b6108a00152600101818118613db8575b505050506106a05115613de757600d5415613dea565b60005b15613e0c576106a05180610880528060051b806108a0826106c060045afa5050505b6011546109e052610860516108405103610a00526000610a20526020615a866000396000516370a08231610a605230610a80526020610a606024610a7c845afa613e5b573d600060003e3d6000fd5b60203d10615a7457610a60905051610a4052600061088051600a8111615a7457801561438e57905b8060051b6108a00151610a60526001610a6051602052600052604060002054613f0c576011610a80527f696e616374697665207374726174656779000000000000000000000000000000610aa052610a8050610a805180610aa001601f826000031636823750506308c379a0610a40526020610a6052601f19601f610a80510116604401610a5cfd5b6001610a6051602052600052604060002060028101905054610a8052610a0051610a805180828118828410021890509050610a2052610a60516307a2d13a610b0052610a605163d905777e610ac05230610ae0526020610ac06024610adc845afa613f7c573d600060003e3d6000fd5b60203d10615a7457610ac0905051610b20526020610b006024610b1c845afa613faa573d600060003e3d6000fd5b60203d10615a7457610b00905051610aa052610a6051604052610a2051606052613fd5610ae0613108565b610ae051610ac052610ac0511561416157610a2051610ac051808203828111615a745790509050610aa051101561406c57610a2051610ac051808203828111615a745790509050610ae052610ac051610aa051808202811583838304141715615a745790509050610ae0518015615a745780820490509050610ac052610aa051610ac051808201828110615a745790509050610a20525b610a2051610ac051808203828111615a745790509050610a205261084051610ac051808203828111615a74579050905061084052610a0051610ac051808203828111615a745790509050610a00526109e051610ac051808203828111615a7457905090506109e052610aa0516140e757610ac05115156140ea565b60005b1561416157610a8051610ac051808203828111615a745790509050610ae052610ae0516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b0052610ae051610b20526040610b00a25b610a2051610aa05180828118828410021890509050610a2052610a205161418757614383565b610a6051604052610a205160605261419d6139f4565b6020615a866000396000516370a08231610b005230610b20526020610b006024610b1c845afa6141d2573d600060003e3d6000fd5b60203d10615a7457610b00905051610ae052610ae051610a4051808203828111615a745790509050610b00526000610b2052610a2051610b00511161423157610a2051610b0051101561426b57610b0051610a205103610b205261426b565b610a8051610b00511161426257610a2051610a2051610b005103808201828110615a745790509050610a205261426b565b610a8051610a20525b61086051610a2051610b2051808203828111615a745790509050808201828110615a7457905090506108605261084051610b2051808203828111615a745790509050610840526109e051610a2051808203828111615a7457905090506109e052610a8051610a2051610ac051808201828110615a745790509050808203828111615a745790509050610b4052610b40516001610a6051602052600052604060002060028101905055610a60517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f95610a8051610b6052610b4051610b80526040610b60a26108605161084051116143605761438e565b610ae051610a4052610a0051610a2051808203828111615a745790509050610a00525b600101818118613e83575b50506108405161086051101561440457601c610a60527f696e73756666696369656e742061737365747320696e207661756c7400000000610a8052610a6050610a605180610a8001601f826000031636823750506308c379a0610a20526020610a4052601f19601f610a60510116604401610a3cfd5b6109e0516011555b61084051610640511161442057600061442a565b61270f6106805111155b156144d4576106405161068051808202811583838304141715615a745790509050612710810490506106405161084051808203828111615a74579050905011156144d457600d610880527f746f6f206d756368206c6f7373000000000000000000000000000000000000006108a0526108805061088051806108a001601f826000031636823750506308c379a061084052602061086052601f19601f61088051011660440161085cfd5b61080051604052610620516060526144ea61291e565b6108605161084051808203828111615a7457905090506012556020615a866000396000516040526106005160605261084051608052614527612de9565b61062051610600516105e0517ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db6108405161088052610800516108a0526040610880a461084051815250565b60405130811461458557801515614588565b60005b90506145eb57601f6080527f73747261746567792063616e6e6f74206265207a65726f20616464726573730060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6020615a866000396000516040516338d52e0f606052602060606004607c845afa61461b573d600060003e3d6000fd5b60203d10615a74576060518060a01c615a745760a05260a0905051181561469957600d60c0527f696e76616c69642061737365740000000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60016040516020526000526040600020541561470c5760176060527f737472617465677920616c72656164792061637469766500000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6001604051602052600052604060002042815542600182015560006002820155600060038201555060096002541161475a5760025460098111615a7457600181016002556040518160030155505b60016040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca60006060a3565b60016040516020526000526040600020546147f95760136080527f7374726174656779206e6f74206163746976650000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b60006080526001604051602052600052604060002060028101905054156148ea5760605161487e57601160a0527f737472617465677920686173206465627400000000000000000000000000000060c05260a05060a0518060c001601f826000031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b6001604051602052600052604060002060028101905054608052601154608051808203828111615a7457905090506011556040517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d267811600060a05260805160c05260803660e03760c060a0a25b600160405160205260005260406000206000815560006001820155600060028201556000600382015550600060a0526000600254600a8111615a7457801561496e57905b80600301546102005260405161020051146149635760a05160098111615a74576001810160a052610200518160051b60c00152505b60010181811861492e575b505060a051806002558060051b600081601f0160051c600a8111615a745780156149ac57905b8060051b60c001518160030155600101818118614994575b5050505060026040517fde8ff765a5c5dad48d27bc9faa99836fb81f3b07c9dc62cfe005475d6b83a2ca6000610200a3565b610180516101a0526001610160516020526000526040600020600281019050546101c05260215415614a115760006101a0525b6101c0516101a05118614a8457601c6101e0527f6e6577206465627420657175616c732063757272656e74206465627400000000610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101a0516101c05111614e29576001610160516020526000526040600020600381019050546101a0511115614b195760206101e0527f746172676574206465627420686967686572207468616e206d61782064656274610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b6101605163402d267d6102005230610220526020610200602461021c845afa614b47573d600060003e3d6000fd5b60203d10615a74576102009050516101e0526101e051614bc7576012610200527f6e6f7468696e6720746f206465706f73697400000000000000000000000000006102205261020050610200518061022001601f826000031636823750506308c379a06101c05260206101e052601f19601f6102005101166044016101dcfd5b6101a0516101c051808203828111615a745790509050610200526101e051610200511115614bf8576101e051610200525b6013546102205260125461024052610220516102405111614c79576013610260527f6e6f2066756e647320746f206465706f736974000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6102205161024051036102605261026051610200511115614c9d5761026051610200525b6102005115614e0a576020615a866000396000516040526101605160605261020051608052614cca612c3b565b6020615a866000396000516370a082316102a052306102c05260206102a060246102bc845afa614cff573d600060003e3d6000fd5b60203d10615a74576102a09050516102805261016051636e553f656102a052610200516102c052306102e05260206102a060446102bc6000855af1614d49573d600060003e3d6000fd5b60203d10615a74576102a050506020615a866000396000516370a082316102c052306102e05260206102c060246102dc845afa614d8b573d600060003e3d6000fd5b60203d10615a74576102c09050516102a0526020615a86600039600051604052610160516060526000608052614dbf612c3b565b610280516102a051808203828111615a7457905090506102005260125461020051808203828111615a74579050905060125560115461020051808201828110615a7457905090506011555b6101c05161020051808201828110615a7457905090506101a052615149565b6101a0516101c051036101e052601354610200526012546102205261020051610220516101e051808201828110615a7457905090501015614e88576102205161020051036101e0526101c0516101e0511115614e88576101c0516101e0525b610160516307a2d13a6102a0526101605163d905777e6102605230610280526020610260602461027c845afa614ec3573d600060003e3d6000fd5b60203d10615a74576102609050516102c05260206102a060246102bc845afa614ef1573d600060003e3d6000fd5b60203d10615a74576102a09050516102405261024051614f71576013610260527f6e6f7468696e6720746f207769746864726177000000000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6101e051610240511015614f8857610240516101e0525b610160516040526101e051606052614fa1610280613108565b6102805161026052610260511561501857601e610280527f73747261746567792068617320756e7265616c69736564206c6f7373657300006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b6020615a866000396000516370a082316102a052306102c05260206102a060246102bc845afa61504d573d600060003e3d6000fd5b60203d10615a74576102a090505161028052610160516040526101e0516060526150756139f4565b6020615a866000396000516370a082316102c052306102e05260206102c060246102dc845afa6150aa573d600060003e3d6000fd5b60203d10615a74576102c09050516102a0526102a05161028051808203828111615a7457905090506101c051808281188284100218905090506102c0526101e0516102c05111156150fe576102c0516101e0525b6012546102c051808201828110615a7457905090506012556011546101e051808203828111615a7457905090506011556101c0516101e051808203828111615a7457905090506101a0525b6101a051600161016051602052600052604060002060028101905055610160517f5e2b8821ad6e0e26207e0cb4d242d07eeb1cbb1cfd853e645bdcd27cc5484f956101c0516101e0526101a0516102005260406101e0a26101a051815250565b60016101a0516020526000526040600020546152255760116101c0527f696e6163746976652073747261746567790000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b61522d612a16565b6101a0516370a082316101e052306102005260206101e060246101fc845afa61525b573d600060003e3d6000fd5b60203d10615a74576101e09050516101c0526101a0516307a2d13a610200526101c051610220526020610200602461021c845afa61529e573d600060003e3d6000fd5b60203d10615a74576102009050516101e05260016101a0516020526000526040600020600281019050546102005260403661022037610200516101e051116152f2576101e051610200510361024052615300565b610200516101e05103610220525b608036610260376015546102e0526102e05115615426576102e05163921f8a8f610300526101a05161032052610220516103405261024051610360526040610300606461031c6000855af161535a573d600060003e3d6000fd5b60403d10615a74576103009050805161026052602081015161028052506102605115615426576000610300526020615ac6600039600051635153b199610320526040610320600461033c845afa6153b6573d600060003e3d6000fd5b60403d10615a7457610320518060101c615a745761038052610340518060a01c615a74576103a052610380905080516103005260208101516102c0525060016103005112615426576102605161030051808202811583838304141715615a745790509050612710810490506102a0525b606036610300376102405161026051808201828110615a745790509050156154ee57610300516102405161026051808201828110615a74579050905060a052600260c052615475610360612b45565b61036051808201828110615a7457905090506103005261026051156154ee57610260516102a051808203828111615a74579050905060a052600160c0526154bd610360612b45565b61036051610320526102a051156154ee576102a05160a052600160c0526154e5610360612b45565b61036051610340525b60006103605261028051156155f157610280516020615a866000396000516370a08231610380526102e0516103a0526020610380602461039c845afa615539573d600060003e3d6000fd5b60203d10615a74576103809050516020615a8660003960005163dd62ed3e6103c0526102e0516103e052306104005260206103c060446103dc845afa615584573d600060003e3d6000fd5b60203d10615a74576103c09050518082811882841002189050905080828118828410021890509050610280526020615a866000396000516040526102e051606052306080526102805160a0526155d8612d0d565b60125461028051808201828110615a7457905090506012555b61022051156156415760016101a0516020526000526040600020600281019050805461022051808201828110615a74579050905081555060115461022051808201828110615a7457905090506011555b602254610380526102205161028051808201828110615a7457905090501561566e57610380511515615671565b60005b156156a7576102205161028051808201828110615a74579050905060a0523060c05261569e6103a0612f2b565b6103a051610360525b61024051156156f75760016101a0516020526000526040600020600281019050805461024051808203828111615a74579050905081555060115461024051808203828111615a7457905090506011555b600e3060205260005260406000205461036051808203828111615a7457905090506103a05261030051156157c357610300516103a05161036051808201828110615a7457905090508082811882841002189050905061030052610300516040523060605261576361291e565b6103005161036051808281188284100218905090506103c052610360516103c051808203828111615a745790509050610360526103a051610300516103c051808203828111615a745790509050808203828111615a7457905090506103a0525b61032051156157e257610320516040526102e0516060526157e2612ebb565b610340511561580157610340516040526102c051606052615801612ebb565b6103a05161036051808201828110615a7457905090506103c0526103c051156158fe5760006103e052602354610400524261040051111561586c576103a0516104005142808203828111615a745790509050808202811583838304141715615a7457905090506103e0525b6103e0516103605161038051808202811583838304141715615a745790509050808201828110615a7457905090506103c0518015615a745780820490509050610420526103c05164e8d4a5100081028164e8d4a51000820418615a74579050610420518015615a7457808204905090506024554261042051808201828110615a74579050905060235542602555615904565b60006024555b4260016101a0516020526000526040600020600181019050556101a0517f7f2ad1d3ba35276f35ef140f83e3e0f17b23064fd710113d3f7a5ab30d2678116102205161042052610240516104405260016101a051602052600052604060002060028101905054610460526103405160a052600160c0526159856103e0612a6e565b6103e051610480526103405161032051808201828110615a74579050905060a052600160c0526159b6610400612a6e565b610400516104a052610280516104c05260c0610420a261022051815261024051602082015250565b601860405160205260005260406000205460605116156159ff576001615a11565b60196060516020526000526040600020545b615a7257600b6080527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060a0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b600080fda165767970657283000307000b0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000e9e8c89c8fc7e8b8f23425688eb68987231178e5\"\n }\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}", + "host": [ + "{{HOST}}" + ] + } + }, + "response": [] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/cmd/rpcdaemon/postman/README.md b/cmd/rpcdaemon/postman/README.md index 0b9c2321838..5b29d7f2407 100644 --- a/cmd/rpcdaemon/postman/README.md +++ b/cmd/rpcdaemon/postman/README.md @@ -1,9 +1,10 @@ # Postman testing -There are two files here: +There are three files here: - RPC_Testing.json - Trace_Testing.json +- Overlay_Testing.json You can import them into Postman using these instructions: https://github.com/ledgerwatch/erigon/wiki/Using-Postman-to-Test-TurboGeth-RPC @@ -14,5 +15,7 @@ release. There is basically one test for each of the 81 RPC endpoints. The second file contains 31 test cases specifically for the nine trace routines (five tests for five of the routines, three for another, one each for the other three). +The third file contains 12 test cases for the overlay API for CREATE and CREATE2. + Another collection of related tests can be found here: https://github.com/Great-Hill-Corporation/trueblocks-core/tree/develop/src/other/trace_tests diff --git a/cmd/rpcdaemon/rpcservices/eth_backend.go b/cmd/rpcdaemon/rpcservices/eth_backend.go index aa4f8192ee0..520162d7786 100644 --- a/cmd/rpcdaemon/rpcservices/eth_backend.go +++ b/cmd/rpcdaemon/rpcservices/eth_backend.go @@ -9,24 +9,27 @@ import ( "io" "sync/atomic" - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/gointerfaces" - "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/log/v3" "google.golang.org/grpc" "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/emptypb" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" + "github.com/ledgerwatch/erigon-lib/gointerfaces" + "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" + "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/ethdb/privateapi" "github.com/ledgerwatch/erigon/p2p" "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/turbo/services" ) +var _ services.FullBlockReader = &RemoteBackend{} + type RemoteBackend struct { remoteEthBackend remote.ETHBACKENDClient log log.Logger @@ -51,12 +54,22 @@ func (back *RemoteBackend) CanPruneTo(currentBlockInDB uint64) (canPruneBlocksTo func (back *RemoteBackend) HeadersRange(ctx context.Context, walker func(header *types.Header) error) error { panic("not implemented") } + +func (back *RemoteBackend) Integrity(_ context.Context) error { + panic("not implemented") +} + func (back *RemoteBackend) CurrentBlock(db kv.Tx) (*types.Block, error) { panic("not implemented") } func (back *RemoteBackend) RawTransactions(ctx context.Context, tx kv.Getter, fromBlock, toBlock uint64) (txs [][]byte, err error) { panic("not implemented") } + +func (back *RemoteBackend) FirstTxnNumNotInSnapshots() uint64 { + panic("not implemented") +} + func (back *RemoteBackend) ReadAncestor(db kv.Getter, hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { panic("not implemented") } @@ -82,6 +95,7 @@ func (back *RemoteBackend) BlockByHash(ctx context.Context, db kv.Tx, hash commo func (back *RemoteBackend) TxsV3Enabled() bool { panic("not implemented") } func (back *RemoteBackend) Snapshots() services.BlockSnapshots { panic("not implemented") } func (back *RemoteBackend) BorSnapshots() services.BlockSnapshots { panic("not implemented") } +func (back *RemoteBackend) AllTypes() []snaptype.Type { panic("not implemented") } func (back *RemoteBackend) FrozenBlocks() uint64 { return back.blockReader.FrozenBlocks() } func (back *RemoteBackend) FrozenBorBlocks() uint64 { return back.blockReader.FrozenBorBlocks() } func (back *RemoteBackend) FrozenFiles() (list []string) { return back.blockReader.FrozenFiles() } @@ -241,6 +255,11 @@ func (back *RemoteBackend) BadHeaderNumber(ctx context.Context, tx kv.Getter, ha func (back *RemoteBackend) BlockWithSenders(ctx context.Context, tx kv.Getter, hash common.Hash, blockNum uint64) (block *types.Block, senders []common.Address, err error) { return back.blockReader.BlockWithSenders(ctx, tx, hash, blockNum) } + +func (back *RemoteBackend) IterateFrozenBodies(_ func(blockNum uint64, baseTxNum uint64, txAmount uint64) error) error { + panic("not implemented") +} + func (back *RemoteBackend) BodyWithTransactions(ctx context.Context, tx kv.Getter, hash common.Hash, blockNum uint64) (body *types.Body, err error) { return back.blockReader.BodyWithTransactions(ctx, tx, hash, blockNum) } @@ -265,16 +284,51 @@ func (back *RemoteBackend) CanonicalHash(ctx context.Context, tx kv.Getter, bloc func (back *RemoteBackend) TxnByIdxInBlock(ctx context.Context, tx kv.Getter, blockNum uint64, i int) (types.Transaction, error) { return back.blockReader.TxnByIdxInBlock(ctx, tx, blockNum, i) } +func (back *RemoteBackend) LastEventId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + return back.blockReader.LastEventId(ctx, tx) +} func (back *RemoteBackend) EventLookup(ctx context.Context, tx kv.Getter, txnHash common.Hash) (uint64, bool, error) { return back.blockReader.EventLookup(ctx, tx, txnHash) } func (back *RemoteBackend) EventsByBlock(ctx context.Context, tx kv.Tx, hash common.Hash, blockNum uint64) ([]rlp.RawValue, error) { return back.blockReader.EventsByBlock(ctx, tx, hash, blockNum) } +func (back *RemoteBackend) BorStartEventID(ctx context.Context, tx kv.Tx, hash common.Hash, blockNum uint64) (uint64, error) { + return back.blockReader.BorStartEventID(ctx, tx, hash, blockNum) +} + +func (back *RemoteBackend) LastSpanId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + return back.blockReader.LastSpanId(ctx, tx) +} + +func (back *RemoteBackend) LastFrozenEventId() uint64 { + panic("not implemented") +} + func (back *RemoteBackend) Span(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) { return back.blockReader.Span(ctx, tx, spanId) } +func (r *RemoteBackend) LastMilestoneId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + return 0, false, fmt.Errorf("not implemented") +} + +func (r *RemoteBackend) Milestone(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) { + return nil, nil +} + +func (r *RemoteBackend) LastCheckpointId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + return 0, false, fmt.Errorf("not implemented") +} + +func (r *RemoteBackend) Checkpoint(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) { + return nil, nil +} + +func (back *RemoteBackend) LastFrozenSpanId() uint64 { + panic("not implemented") +} + func (back *RemoteBackend) NodeInfo(ctx context.Context, limit uint32) ([]p2p.NodeInfo, error) { nodes, err := back.remoteEthBackend.NodeInfo(ctx, &remote.NodesInfoRequest{Limit: limit}) if err != nil { diff --git a/cmd/rpctest/main.go b/cmd/rpctest/main.go index 44b53f85d11..8f870db49a1 100644 --- a/cmd/rpctest/main.go +++ b/cmd/rpctest/main.go @@ -240,6 +240,19 @@ func main() { } with(benchEthGetLogsCmd, withErigonUrl, withGethUrl, withNeedCompare, withBlockNum, withRecord, withErrorFile) + var benchOverlayGetLogsCmd = &cobra.Command{ + Use: "benchOverlayGetLogs", + Short: "", + Long: ``, + Run: func(cmd *cobra.Command, args []string) { + err := rpctest.BenchOverlayGetLogs(erigonURL, needCompare, blockFrom, blockTo, recordFile, errorFile) + if err != nil { + logger.Error(err.Error()) + } + }, + } + with(benchOverlayGetLogsCmd, withErigonUrl, withGethUrl, withNeedCompare, withBlockNum, withRecord, withErrorFile) + var bench9Cmd = &cobra.Command{ Use: "bench9", Short: "", @@ -457,6 +470,7 @@ func main() { bench6Cmd, bench7Cmd, benchEthGetLogsCmd, + benchOverlayGetLogsCmd, bench9Cmd, benchTraceCallCmd, benchTraceCallManyCmd, diff --git a/cmd/rpctest/rpctest/bench_overlaygetlogs.go b/cmd/rpctest/rpctest/bench_overlaygetlogs.go new file mode 100644 index 00000000000..28d187388a3 --- /dev/null +++ b/cmd/rpctest/rpctest/bench_overlaygetlogs.go @@ -0,0 +1,132 @@ +package rpctest + +import ( + "bufio" + "fmt" + "math/rand" + "net/http" + "os" + "time" +) + +// BenchOverlayGetLogs compares response of Erigon with Geth +// but also can be used for comparing RPCDaemon with Geth or infura +// parameters: +// needCompare - if false - doesn't call Erigon and doesn't compare responses +// +// false value - to generate vegeta files, it's faster but we can generate vegeta files for Geth and Erigon +// recordFile stores all eth_getlogs returned with success +// errorFile stores information when erigon and geth doesn't return same data +func BenchOverlayGetLogs(erigonURL string, needCompare bool, blockFrom uint64, blockTo uint64, recordFile string, errorFile string) error { + setRoutes(erigonURL, erigonURL) + var client = &http.Client{ + Timeout: time.Second * 600, + } + + var rec *bufio.Writer + if recordFile != "" { + f, err := os.Create(recordFile) + if err != nil { + return fmt.Errorf("Cannot create file %s for recording: %v\n", recordFile, err) + } + defer f.Close() + rec = bufio.NewWriter(f) + defer rec.Flush() + } + var errs *bufio.Writer + if errorFile != "" { + ferr, err := os.Create(errorFile) + if err != nil { + return fmt.Errorf("Cannot create file %s for error output: %v\n", errorFile, err) + } + defer ferr.Close() + errs = bufio.NewWriter(ferr) + defer errs.Flush() + } + + var resultsCh chan CallResult = nil + if !needCompare { + resultsCh = make(chan CallResult, 1000) + defer close(resultsCh) + go vegetaWrite(true, []string{"debug_getModifiedAccountsByNumber", "eth_getLogs"}, resultsCh) + } + + var res CallResult + reqGen := &RequestGenerator{ + client: client, + } + + reqGen.reqID++ + var blockNumber EthBlockNumber + res = reqGen.Erigon("eth_blockNumber", reqGen.blockNumber(), &blockNumber) + if res.Err != nil { + return fmt.Errorf("Could not get block number: %v\n", res.Err) + } + if blockNumber.Error != nil { + return fmt.Errorf("Error getting block number: %d %s\n", blockNumber.Error.Code, blockNumber.Error.Message) + } + fmt.Printf("Last block: %d\n", blockNumber.Number) + + prevBn := blockFrom + rnd := rand.New(rand.NewSource(42)) // nolint:gosec + for bn := blockFrom + 100; bn < blockTo; bn += 100 { + + // Checking modified accounts + reqGen.reqID++ + var mag DebugModifiedAccounts + res = reqGen.Erigon("debug_getModifiedAccountsByNumber", reqGen.getModifiedAccountsByNumber(prevBn, bn), &mag) + if res.Err != nil { + return fmt.Errorf("Could not get modified accounts (Erigon): %v\n", res.Err) + } + if mag.Error != nil { + return fmt.Errorf("Error getting modified accounts (Erigon): %d %s\n", mag.Error.Code, mag.Error.Message) + } + if res.Err == nil && mag.Error == nil { + accountSet := extractAccountMap(&mag) + for account := range accountSet { + reqGen.reqID++ + requestEth := reqGen.getLogs(prevBn, bn, account) + requestOverlay := reqGen.getOverlayLogs(prevBn, bn, account) + errCtx := fmt.Sprintf("account %x blocks %d-%d", account, prevBn, bn) + if err := requestAndCompareErigon(requestEth, requestOverlay, "eth_getLogs", "overlay_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { + fmt.Println(err) + return err + } + topics := getTopics(res.Result) + // All combination of account and one topic + for _, topic := range topics { + reqGen.reqID++ + requestEth = reqGen.getLogs1(prevBn, bn+10000, account, topic) + requestOverlay := reqGen.getOverlayLogs1(prevBn, bn+10000, account, topic) + errCtx := fmt.Sprintf("account %x topic %x blocks %d-%d", account, topic, prevBn, bn) + if err := requestAndCompareErigon(requestEth, requestOverlay, "eth_getLogs", "overlay_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { + fmt.Println(err) + return err + } + } + // Random combinations of two topics + if len(topics) >= 2 { + idx1 := rnd.Int31n(int32(len(topics))) + idx2 := rnd.Int31n(int32(len(topics) - 1)) + if idx2 >= idx1 { + idx2++ + } + reqGen.reqID++ + requestEth = reqGen.getLogs2(prevBn, bn+100000, account, topics[idx1], topics[idx2]) + requestOverlay := reqGen.getOverlayLogs2(prevBn, bn+100000, account, topics[idx1], topics[idx2]) + errCtx := fmt.Sprintf("account %x topic1 %x topic2 %x blocks %d-%d", account, topics[idx1], topics[idx2], prevBn, bn) + if err := requestAndCompareErigon(requestEth, requestOverlay, "eth_getLogs", "overlay_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { + fmt.Println(err) + return err + } + } + } + } + fmt.Printf("Done blocks %d-%d, modified accounts: %d\n", prevBn, bn, len(mag.Result)) + prevBn = bn + } + return nil +} diff --git a/cmd/rpctest/rpctest/request_generator.go b/cmd/rpctest/rpctest/request_generator.go index a38ea1ef3a4..927c0ee9b2e 100644 --- a/cmd/rpctest/rpctest/request_generator.go +++ b/cmd/rpctest/rpctest/request_generator.go @@ -89,16 +89,31 @@ func (g *RequestGenerator) getLogs(prevBn uint64, bn uint64, account libcommon.A return fmt.Sprintf(template, prevBn, bn, account, g.reqID) } +func (g *RequestGenerator) getOverlayLogs(prevBn uint64, bn uint64, account libcommon.Address) string { + const template = `{"jsonrpc":"2.0","method":"overlay_getLogs","params":[{"fromBlock": "0x%x", "toBlock": "0x%x", "address": "0x%x"},{}],"id":%d}` + return fmt.Sprintf(template, prevBn, bn, account, g.reqID) +} + func (g *RequestGenerator) getLogs1(prevBn uint64, bn uint64, account libcommon.Address, topic libcommon.Hash) string { const template = `{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"fromBlock": "0x%x", "toBlock": "0x%x", "address": "0x%x", "topics": ["0x%x"]}],"id":%d}` return fmt.Sprintf(template, prevBn, bn, account, topic, g.reqID) } +func (g *RequestGenerator) getOverlayLogs1(prevBn uint64, bn uint64, account libcommon.Address, topic libcommon.Hash) string { + const template = `{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"fromBlock": "0x%x", "toBlock": "0x%x", "address": "0x%x", "topics": ["0x%x"]},{}],"id":%d}` + return fmt.Sprintf(template, prevBn, bn, account, topic, g.reqID) +} + func (g *RequestGenerator) getLogs2(prevBn uint64, bn uint64, account libcommon.Address, topic1, topic2 libcommon.Hash) string { const template = `{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"fromBlock": "0x%x", "toBlock": "0x%x", "address": "0x%x", "topics": ["0x%x", "0x%x"]}],"id":%d}` return fmt.Sprintf(template, prevBn, bn, account, topic1, topic2, g.reqID) } +func (g *RequestGenerator) getOverlayLogs2(prevBn uint64, bn uint64, account libcommon.Address, topic1, topic2 libcommon.Hash) string { + const template = `{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"fromBlock": "0x%x", "toBlock": "0x%x", "address": "0x%x", "topics": ["0x%x", "0x%x"]},{}],"id":%d}` + return fmt.Sprintf(template, prevBn, bn, account, topic1, topic2, g.reqID) +} + func (g *RequestGenerator) accountRange(bn uint64, page []byte, num int) string { //nolint const template = `{ "jsonrpc": "2.0", "method": "debug_accountRange", "params": ["0x%x", "%s", %d, false, false, false], "id":%d}` encodedKey := base64.StdEncoding.EncodeToString(page) diff --git a/cmd/rpctest/rpctest/utils.go b/cmd/rpctest/rpctest/utils.go index e78ffce8579..bca7297ec0f 100644 --- a/cmd/rpctest/rpctest/utils.go +++ b/cmd/rpctest/rpctest/utils.go @@ -290,6 +290,66 @@ func requestAndCompare(request string, methodName string, errCtx string, reqGen return nil } +func requestAndCompareErigon(requestA, requestB string, methodNameA, methodNameB string, errCtx string, reqGen *RequestGenerator, needCompare bool, rec *bufio.Writer, errs *bufio.Writer, channel chan CallResult, insertOnlyIfSuccess bool) error { + recording := rec != nil + res := reqGen.Erigon2(methodNameA, requestA) + if res.Err != nil { + return fmt.Errorf("could not invoke %s (Erigon): %w", methodNameA, res.Err) + } + errVal := res.Result.Get("error") + if errVal != nil { + if !needCompare && channel == nil { + return fmt.Errorf("error invoking %s (Erigon): %d %s", methodNameA, errVal.GetInt("code"), errVal.GetStringBytes("message")) + } + } + if needCompare { + resg := reqGen.Erigon2(methodNameB, requestB) + if resg.Err != nil { + return fmt.Errorf("could not invoke %s (Geth/OE): %w", methodNameB, res.Err) + } + errValg := resg.Result.Get("error") + if errVal == nil && errValg == nil { + if err := compareResults(res.Result, resg.Result); err != nil { + recording = false + if errs != nil { + fmt.Printf("different results for methods %s, %s, errCtx: %s: %v\n", methodNameA, methodNameB, errCtx, err) + fmt.Fprintf(errs, "\nDifferent results for methods %s, %s, errCtx %s: %v\n", methodNameA, methodNameB, errCtx, err) + fmt.Fprintf(errs, "Request=====================================\n%s\n", requestA) + fmt.Fprintf(errs, "%s response=================================\n%s\n", methodNameA, res.Response) + fmt.Fprintf(errs, "%s response=================================\n%s\n", methodNameB, resg.Response) + errs.Flush() // nolint:errcheck + // Keep going + } else { + reqFile, _ := os.Create("request.json") //nolint:errcheck + reqFile.Write([]byte(requestA)) //nolint:errcheck + reqFile.Close() //nolint:errcheck + erigonRespFile, _ := os.Create("erigon-response.json") //nolint:errcheck + erigonRespFile.Write(res.Response) //nolint:errcheck + erigonRespFile.Close() //nolint:errcheck + oeRespFile, _ := os.Create("oe-response.json") //nolint:errcheck + oeRespFile.Write(resg.Response) //nolint:errcheck + oeRespFile.Close() //nolint:errcheck + return fmt.Errorf("different results for methods %s, %s, errCtx %s: %v\nRequest in file request.json, Erigon response in file erigon-response.json, Geth/OE response in file oe-response.json", methodNameA, methodNameB, errCtx, err) + } + } + } else { + //TODO fix for two methods + return compareErrors(errVal, errValg, methodNameA, errCtx, errs) + } + } else { + if channel != nil { + if insertOnlyIfSuccess == false || (insertOnlyIfSuccess && errVal == nil) { + channel <- res + } + } + } + + if recording { + fmt.Fprintf(rec, "%s\n%s\n\n", requestA, res.Response) + } + return nil +} + func compareBalances(balance, balanceg *EthBalance) bool { if balance.Balance.ToInt().Cmp(balanceg.Balance.ToInt()) != 0 { fmt.Printf("Different balance: %d %d\n", balance.Balance.ToInt(), balanceg.Balance.ToInt()) diff --git a/cmd/sentinel/main.go b/cmd/sentinel/main.go index 9453bf492b2..0b24b7be268 100644 --- a/cmd/sentinel/main.go +++ b/cmd/sentinel/main.go @@ -16,8 +16,13 @@ import ( "fmt" "os" + "github.com/ledgerwatch/erigon-lib/common/disk" + "github.com/ledgerwatch/erigon-lib/common/mem" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/phase1/core" "github.com/ledgerwatch/erigon/cl/sentinel" "github.com/ledgerwatch/erigon/cl/sentinel/service" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" "github.com/ledgerwatch/erigon/cmd/sentinel/sentinelcli" "github.com/ledgerwatch/erigon/cmd/sentinel/sentinelflags" @@ -45,16 +50,25 @@ func runSentinelNode(cliCtx *cli.Context) error { } log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(cfg.LogLvl), log.StderrHandler)) log.Info("[Sentinel] running sentinel with configuration", "cfg", cfg) + + // setup periodic logging and prometheus updates + go mem.LogMemStats(cliCtx.Context, log.Root()) + go disk.UpdateDiskStats(cliCtx.Context, log.Root()) + + bs, err := core.RetrieveBeaconState(context.Background(), cfg.BeaconCfg, clparams.GetCheckpointSyncEndpoint(cfg.NetworkType)) + if err != nil { + return err + } _, err = service.StartSentinelService(&sentinel.SentinelConfig{ IpAddr: cfg.Addr, Port: int(cfg.Port), TCPPort: cfg.ServerTcpPort, - GenesisConfig: cfg.GenesisCfg, NetworkConfig: cfg.NetworkCfg, BeaconConfig: cfg.BeaconCfg, NoDiscovery: cfg.NoDiscovery, LocalDiscovery: cfg.LocalDiscovery, - }, nil, nil, &service.ServerConfig{Network: cfg.ServerProtocol, Addr: cfg.ServerAddr}, nil, nil, log.Root()) + EnableBlocks: false, + }, nil, nil, nil, &service.ServerConfig{Network: cfg.ServerProtocol, Addr: cfg.ServerAddr}, eth_clock.NewEthereumClock(bs.GenesisTime(), bs.GenesisValidatorsRoot(), cfg.BeaconCfg), nil, log.Root()) if err != nil { log.Error("[Sentinel] Could not start sentinel", "err", err) return err diff --git a/cmd/sentinel/sentinelcli/cliSettings.go b/cmd/sentinel/sentinelcli/cliSettings.go index ce2e0490986..e00b3916bca 100644 --- a/cmd/sentinel/sentinelcli/cliSettings.go +++ b/cmd/sentinel/sentinelcli/cliSettings.go @@ -17,7 +17,6 @@ import ( ) type SentinelCliCfg struct { - GenesisCfg *clparams.GenesisConfig BeaconCfg *clparams.BeaconChainConfig NetworkCfg *clparams.NetworkConfig NetworkType clparams.NetworkType @@ -35,7 +34,7 @@ func SetupSentinelCli(ctx *cli.Context) (*SentinelCliCfg, error) { cfg := &SentinelCliCfg{} chainName := ctx.String(utils.ChainFlag.Name) var err error - cfg.GenesisCfg, cfg.NetworkCfg, cfg.BeaconCfg, cfg.NetworkType, err = clparams.GetConfigsByNetworkName(chainName) + cfg.NetworkCfg, cfg.BeaconCfg, cfg.NetworkType, err = clparams.GetConfigsByNetworkName(chainName) if err != nil { return nil, err } @@ -47,7 +46,6 @@ func SetupSentinelCli(ctx *cli.Context) (*SentinelCliCfg, error) { if ctx.String(sentinelflags.GenesisSSZFlag.Name) == "" { return nil, fmt.Errorf("no genesis file provided") } - cfg.GenesisCfg = new(clparams.GenesisConfig) } cfg.ServerAddr = fmt.Sprintf("%s:%d", ctx.String(sentinelflags.SentinelServerAddr.Name), ctx.Int(sentinelflags.SentinelServerPort.Name)) diff --git a/cmd/silkworm_api/snapshot_idx.go b/cmd/silkworm_api/snapshot_idx.go index 8f728ddf06f..af145023b56 100644 --- a/cmd/silkworm_api/snapshot_idx.go +++ b/cmd/silkworm_api/snapshot_idx.go @@ -3,15 +3,14 @@ package main import ( "fmt" "os" - "path/filepath" "time" - "github.com/ledgerwatch/erigon-lib/chain/snapcfg" "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/erigon/cmd/hack/tool/fromdb" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" "github.com/ledgerwatch/erigon/turbo/debug" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" "github.com/ledgerwatch/log/v3" @@ -57,7 +56,7 @@ func FindIf(segments []snaptype.FileInfo, predicate func(snaptype.FileInfo) bool } func buildIndex(cliCtx *cli.Context, dataDir string, snapshotPaths []string, minBlock uint64) error { - logger, _, err := debug.Setup(cliCtx, true /* rootLogger */) + logger, _, _, err := debug.Setup(cliCtx, true /* rootLogger */) if err != nil { return err } @@ -76,7 +75,7 @@ func buildIndex(cliCtx *cli.Context, dataDir string, snapshotPaths []string, min chainConfig := fromdb.ChainConfig(chainDB) - segments, _, err := freezeblocks.Segments(dirs.Snap, snapcfg.KnownCfg(chainConfig.ChainName, 0).Version, minBlock) + segments, _, err := freezeblocks.Segments(dirs.Snap, minBlock) if err != nil { return err } @@ -92,28 +91,13 @@ func buildIndex(cliCtx *cli.Context, dataDir string, snapshotPaths []string, min return fmt.Errorf("segment %s not found", snapshotPath) } - switch segment.T { - case snaptype.Headers: + switch segment.Type.Enum() { + case coresnaptype.Enums.Headers, coresnaptype.Enums.Bodies, coresnaptype.Enums.Transactions: g.Go(func() error { jobProgress := &background.Progress{} ps.Add(jobProgress) defer ps.Delete(jobProgress) - return freezeblocks.HeadersIdx(ctx, segment.Path, segment.Version, segment.From, dirs.Tmp, jobProgress, logLevel, logger) - }) - case snaptype.Bodies: - g.Go(func() error { - jobProgress := &background.Progress{} - ps.Add(jobProgress) - defer ps.Delete(jobProgress) - return freezeblocks.BodiesIdx(ctx, segment.Path, segment.From, dirs.Tmp, jobProgress, logLevel, logger) - }) - case snaptype.Transactions: - g.Go(func() error { - jobProgress := &background.Progress{} - ps.Add(jobProgress) - defer ps.Delete(jobProgress) - dir, _ := filepath.Split(segment.Path) - return freezeblocks.TransactionsIdx(ctx, chainConfig, segment.Version, segment.From, segment.To, dir, dirs.Tmp, jobProgress, logLevel, logger) + return segment.Type.BuildIndexes(ctx, segment, chainConfig, dirs.Tmp, jobProgress, logLevel, logger) }) } } diff --git a/cmd/snapshots/README.md b/cmd/snapshots/README.md index 06544214de4..99acd75ed1f 100644 --- a/cmd/snapshots/README.md +++ b/cmd/snapshots/README.md @@ -1,6 +1,6 @@ # Snapshots - tool for managing remote stanshots -In the root of `Erigon` project, use this command to build the the commands: +In the root of `Erigon` project, use this command to build the commands: ```shell make snapshots diff --git a/cmd/snapshots/cmp/cmp.go b/cmd/snapshots/cmp/cmp.go index 2ba6e0fde47..d1cb0fc8414 100644 --- a/cmd/snapshots/cmp/cmp.go +++ b/cmd/snapshots/cmp/cmp.go @@ -12,6 +12,10 @@ import ( "time" "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "golang.org/x/sync/errgroup" + "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/downloader" @@ -19,14 +23,12 @@ import ( "github.com/ledgerwatch/erigon/cmd/snapshots/flags" "github.com/ledgerwatch/erigon/cmd/snapshots/sync" "github.com/ledgerwatch/erigon/cmd/utils" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/turbo/logging" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli/v2" - "golang.org/x/sync/errgroup" ) var Command = cli.Command{ @@ -140,7 +142,8 @@ func cmp(cliCtx *cli.Context) error { } if loc1.LType == sync.TorrentFs || loc2.LType == sync.TorrentFs { - torrentCli, err = sync.NewTorrentClient(cliCtx, chain) + config := sync.NewTorrentClientConfigFromCobra(cliCtx, chain) + torrentCli, err = sync.NewTorrentClient(config) if err != nil { return fmt.Errorf("can't create torrent: %w", err) } @@ -174,7 +177,7 @@ func cmp(cliCtx *cli.Context) error { if rcCli != nil { if loc1.LType == sync.RemoteFs { - session1, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "l1"), loc1.Src+":"+loc1.Root) + session1, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "l1"), loc1.Src+":"+loc1.Root, nil) if err != nil { return err @@ -182,7 +185,7 @@ func cmp(cliCtx *cli.Context) error { } if loc2.LType == sync.RemoteFs { - session2, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "l2"), loc2.Src+":"+loc2.Root) + session2, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "l2"), loc2.Src+":"+loc2.Root, nil) if err != nil { return err @@ -257,13 +260,13 @@ func cmp(cliCtx *cli.Context) error { }) } else { for _, snapType := range snapTypes { - if snapType == snaptype.Headers { + if snapType.Enum() == coresnaptype.Enums.Headers { funcs = append(funcs, func(ctx context.Context) (time.Duration, time.Duration, time.Duration, error) { return c.compareHeaders(ctx, h1ents, h2ents, headerWorkers, logger) }) } - if snapType == snaptype.Bodies { + if snapType.Enum() == coresnaptype.Enums.Bodies { funcs = append(funcs, func(ctx context.Context) (time.Duration, time.Duration, time.Duration, error) { return c.compareBodies(ctx, b1ents, b2ents, bodyWorkers, logger) }) @@ -314,7 +317,7 @@ type BodyEntry struct { Body, Transactions fs.DirEntry } -func splitEntries(files []fs.DirEntry, version uint8, firstBlock, lastBlock uint64) (hents []fs.DirEntry, bents []*BodyEntry) { +func splitEntries(files []fs.DirEntry, version snaptype.Version, firstBlock, lastBlock uint64) (hents []fs.DirEntry, bents []*BodyEntry) { for _, ent := range files { if info, err := ent.Info(); err == nil { if snapInfo, ok := info.Sys().(downloader.SnapInfo); ok && snapInfo.Version() > 0 { @@ -322,11 +325,11 @@ func splitEntries(files []fs.DirEntry, version uint8, firstBlock, lastBlock uint (firstBlock == 0 || snapInfo.From() >= firstBlock) && (lastBlock == 0 || snapInfo.From() < lastBlock) { - if snapInfo.Type() == snaptype.Headers { + if snapInfo.Type().Enum() == coresnaptype.Enums.Headers { hents = append(hents, ent) } - if snapInfo.Type() == snaptype.Bodies { + if snapInfo.Type().Enum() == coresnaptype.Enums.Bodies { found := false for _, bent := range bents { @@ -342,7 +345,7 @@ func splitEntries(files []fs.DirEntry, version uint8, firstBlock, lastBlock uint } } - if snapInfo.Type() == snaptype.Transactions { + if snapInfo.Type().Enum() == coresnaptype.Enums.Transactions { found := false for _, bent := range bents { @@ -454,19 +457,23 @@ func (c comparitor) compareHeaders(ctx context.Context, f1ents []fs.DirEntry, f2 return err } + info1, _, _ := snaptype.ParseFileName(c.session1.LocalFsRoot(), ent1.Name()) + f1snaps := freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{ Enabled: true, Produce: false, NoDownloader: true, - }, c.session1.LocalFsRoot(), c.loc1.Version, logger) + }, info1.Dir(), info1.From, logger) f1snaps.ReopenList([]string{ent1.Name()}, false) + info2, _, _ := snaptype.ParseFileName(c.session2.LocalFsRoot(), ent1.Name()) + f2snaps := freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{ Enabled: true, Produce: false, NoDownloader: true, - }, c.session2.LocalFsRoot(), c.loc2.Version, logger) + }, info2.Dir(), info2.From, logger) f2snaps.ReopenList([]string{ent2.Name()}, false) @@ -578,9 +585,15 @@ func (c comparitor) compareBodies(ctx context.Context, f1ents []*BodyEntry, f2en g.Go(func() error { + info, _, ok := snaptype.ParseFileName(c.session1.LocalFsRoot(), ent1.Body.Name()) + err := func() error { startTime := time.Now() + if !ok { + return fmt.Errorf("can't parse file name %s", ent1.Body.Name()) + } + defer func() { atomic.AddUint64(&downloadTime, uint64(time.Since(startTime))) }() @@ -602,14 +615,18 @@ func (c comparitor) compareBodies(ctx context.Context, f1ents []*BodyEntry, f2en }() logger.Info(fmt.Sprintf("Indexing %s", ent1.Body.Name())) - return freezeblocks.BodiesIdx(ctx, - filepath.Join(c.session1.LocalFsRoot(), ent1.Body.Name()), ent1.From, c.session1.LocalFsRoot(), nil, log.LvlDebug, logger) + + return coresnaptype.Bodies.BuildIndexes(ctx, info, c.chainConfig(), c.session1.LocalFsRoot(), nil, log.LvlDebug, logger) }) g.Go(func() error { + info, _, ok := snaptype.ParseFileName(c.session1.LocalFsRoot(), ent1.Transactions.Name()) + if !ok { + return fmt.Errorf("can't parse file name %s", ent1.Transactions.Name()) + } + err := func() error { startTime := time.Now() - defer func() { atomic.AddUint64(&downloadTime, uint64(time.Since(startTime))) }() @@ -637,16 +654,21 @@ func (c comparitor) compareBodies(ctx context.Context, f1ents []*BodyEntry, f2en }() logger.Info(fmt.Sprintf("Indexing %s", ent1.Transactions.Name())) - return freezeblocks.TransactionsIdx(ctx, c.chainConfig(), c.loc1.Version, ent1.From, ent1.To, - c.session1.LocalFsRoot(), c.session1.LocalFsRoot(), nil, log.LvlDebug, logger) + return coresnaptype.Transactions.BuildIndexes(ctx, info, c.chainConfig(), c.session1.LocalFsRoot(), nil, log.LvlDebug, logger) }) b2err := make(chan error, 1) g.Go(func() error { + info, _, ok := snaptype.ParseFileName(c.session1.LocalFsRoot(), ent1.Body.Name()) + err := func() error { startTime := time.Now() + if !ok { + return fmt.Errorf("can't parse file name %s", ent1.Body.Name()) + } + defer func() { atomic.AddUint64(&downloadTime, uint64(time.Since(startTime))) }() @@ -668,17 +690,23 @@ func (c comparitor) compareBodies(ctx context.Context, f1ents []*BodyEntry, f2en }() logger.Info(fmt.Sprintf("Indexing %s", ent2.Body.Name())) - return freezeblocks.BodiesIdx(ctx, - filepath.Join(c.session2.LocalFsRoot(), ent2.Body.Name()), ent2.From, c.session1.LocalFsRoot(), nil, log.LvlDebug, logger) + return coresnaptype.Bodies.BuildIndexes(ctx, info, c.chainConfig(), c.session1.LocalFsRoot(), nil, log.LvlDebug, logger) }) g.Go(func() error { + info, _, ok := snaptype.ParseFileName(c.session1.LocalFsRoot(), ent1.Transactions.Name()) + err := func() error { startTime := time.Now() + if !ok { + return fmt.Errorf("can't parse file name %s", ent1.Transactions.Name()) + } + defer func() { atomic.AddUint64(&downloadTime, uint64(time.Since(startTime))) }() + logger.Info(fmt.Sprintf("Downloading %s", ent2.Transactions.Name()), "entry", fmt.Sprint(i2+1, "/", len(f2ents))) return c.session2.Download(ctx, ent2.Transactions.Name()) }() @@ -703,27 +731,30 @@ func (c comparitor) compareBodies(ctx context.Context, f1ents []*BodyEntry, f2en }() logger.Info(fmt.Sprintf("Indexing %s", ent2.Transactions.Name())) - return freezeblocks.TransactionsIdx(ctx, c.chainConfig(), c.loc2.Version, ent2.From, ent2.To, - c.session2.LocalFsRoot(), c.session2.LocalFsRoot(), nil, log.LvlDebug, logger) + return coresnaptype.Transactions.BuildIndexes(ctx, info, c.chainConfig(), c.session2.LocalFsRoot(), nil, log.LvlDebug, logger) }) if err := g.Wait(); err != nil { return err } + info1, _, _ := snaptype.ParseFileName(c.session1.LocalFsRoot(), ent1.Body.Name()) + f1snaps := freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{ Enabled: true, Produce: false, NoDownloader: true, - }, c.session1.LocalFsRoot(), c.loc1.Version, logger) + }, info1.Dir(), info1.From, logger) f1snaps.ReopenList([]string{ent1.Body.Name(), ent1.Transactions.Name()}, false) + info2, _, _ := snaptype.ParseFileName(c.session2.LocalFsRoot(), ent2.Body.Name()) + f2snaps := freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{ Enabled: true, Produce: false, NoDownloader: true, - }, c.session2.LocalFsRoot(), c.loc2.Version, logger) + }, info2.Dir(), info2.From, logger) f2snaps.ReopenList([]string{ent2.Body.Name(), ent2.Transactions.Name()}, false) diff --git a/cmd/snapshots/copy/copy.go b/cmd/snapshots/copy/copy.go index 4faebc1c6bc..c5f4df13dad 100644 --- a/cmd/snapshots/copy/copy.go +++ b/cmd/snapshots/copy/copy.go @@ -8,13 +8,14 @@ import ( "strconv" "strings" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon-lib/downloader" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon/cmd/snapshots/flags" "github.com/ledgerwatch/erigon/cmd/snapshots/sync" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/turbo/logging" - "github.com/urfave/cli/v2" ) var ( @@ -126,7 +127,8 @@ func copy(cliCtx *cli.Context) error { switch src.LType { case sync.TorrentFs: - torrentCli, err = sync.NewTorrentClient(cliCtx, dst.Chain) + config := sync.NewTorrentClientConfigFromCobra(cliCtx, dst.Chain) + torrentCli, err = sync.NewTorrentClient(config) if err != nil { return fmt.Errorf("can't create torrent: %w", err) } @@ -167,7 +169,7 @@ func copy(cliCtx *cli.Context) error { version := cliCtx.Int(VersionFlag.Name) if version != 0 { - dst.Version = uint8(version) + dst.Version = snaptype.Version(version) } if cliCtx.Args().Len() > pos { @@ -242,7 +244,7 @@ func remoteToLocal(ctx context.Context, rcCli *downloader.RCloneClient, src *syn return fmt.Errorf("no remote downloader") } - session, err := rcCli.NewSession(ctx, dst.Root, src.Src+":"+src.Root) + session, err := rcCli.NewSession(ctx, dst.Root, src.Src+":"+src.Root, nil) if err != nil { return err @@ -270,7 +272,7 @@ type sinf struct { snaptype.FileInfo } -func (i sinf) Version() uint8 { +func (i sinf) Version() snaptype.Version { return i.FileInfo.Version } @@ -283,10 +285,10 @@ func (i sinf) To() uint64 { } func (i sinf) Type() snaptype.Type { - return i.FileInfo.T + return i.FileInfo.Type } -func selectFiles(entries []fs.DirEntry, version uint8, firstBlock, lastBlock uint64, snapTypes []snaptype.Type, torrents, hashes, manifest bool) []string { +func selectFiles(entries []fs.DirEntry, version snaptype.Version, firstBlock, lastBlock uint64, snapTypes []snaptype.Type, torrents, hashes, manifest bool) []string { var files []string for _, ent := range entries { @@ -297,14 +299,18 @@ func selectFiles(entries []fs.DirEntry, version uint8, firstBlock, lastBlock uin if ext := filepath.Ext(info.Name()); ext == ".torrent" { fileName := strings.TrimSuffix(info.Name(), ".torrent") - if fileInfo, ok := snaptype.ParseFileName("", fileName); ok { - snapInfo = sinf{fileInfo} + if fileInfo, isStateFile, ok := snaptype.ParseFileName("", fileName); ok { + if isStateFile { + //TODO + } else { + snapInfo = sinf{fileInfo} + } } } } switch { - case snapInfo != nil && snapInfo.Type() != snaptype.Unknown: + case snapInfo != nil && snapInfo.Type() != nil: if (version == 0 || version == snapInfo.Version()) && (firstBlock == 0 || snapInfo.From() >= firstBlock) && (lastBlock == 0 || snapInfo.From() < lastBlock) { diff --git a/cmd/snapshots/main.go b/cmd/snapshots/main.go index 47e2f447616..adec101cd27 100644 --- a/cmd/snapshots/main.go +++ b/cmd/snapshots/main.go @@ -8,6 +8,11 @@ import ( "path/filepath" "syscall" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + + "github.com/ledgerwatch/erigon-lib/common/disk" + "github.com/ledgerwatch/erigon-lib/common/mem" "github.com/ledgerwatch/erigon/cmd/snapshots/cmp" "github.com/ledgerwatch/erigon/cmd/snapshots/copy" "github.com/ledgerwatch/erigon/cmd/snapshots/manifest" @@ -18,8 +23,6 @@ import ( "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/turbo/debug" "github.com/ledgerwatch/erigon/turbo/logging" - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli/v2" ) func main() { @@ -69,6 +72,10 @@ func main() { ctx.Context, cancel = context.WithCancel(sync.WithLogger(ctx.Context, logger)) + // setup periodic logging and prometheus updates + go mem.LogMemStats(ctx.Context, logger) + go disk.UpdateDiskStats(ctx.Context, logger) + go handleTerminationSignals(cancel, logger) return nil diff --git a/cmd/snapshots/manifest/manifest.go b/cmd/snapshots/manifest/manifest.go index 54e803fb0c2..fe36be79c27 100644 --- a/cmd/snapshots/manifest/manifest.go +++ b/cmd/snapshots/manifest/manifest.go @@ -12,12 +12,13 @@ import ( "strings" "time" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon-lib/downloader" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon/cmd/snapshots/sync" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/turbo/logging" - "github.com/urfave/cli/v2" ) var ( @@ -118,7 +119,7 @@ func manifest(cliCtx *cli.Context, command string) error { if rcCli != nil { if src != nil && src.LType == sync.RemoteFs { - srcSession, err = rcCli.NewSession(cliCtx.Context, tempDir, src.Src+":"+src.Root) + srcSession, err = rcCli.NewSession(cliCtx.Context, tempDir, src.Src+":"+src.Root, nil) if err != nil { return err @@ -132,10 +133,10 @@ func manifest(cliCtx *cli.Context, command string) error { logger.Debug("Starting manifest " + command) - var version *uint8 + var version *snaptype.Version if val := cliCtx.Int(VersionFlag.Name); val != 0 { - v := uint8(val) + v := snaptype.Version(val) version = &v } @@ -163,7 +164,7 @@ func listManifest(ctx context.Context, srcSession *downloader.RCloneSession, out return nil } -func updateManifest(ctx context.Context, tmpDir string, srcSession *downloader.RCloneSession, version *uint8) error { +func updateManifest(ctx context.Context, tmpDir string, srcSession *downloader.RCloneSession, version *snaptype.Version) error { entities, err := srcSession.ReadRemoteDir(ctx, true) if err != nil { @@ -187,9 +188,11 @@ func updateManifest(ctx context.Context, tmpDir string, srcSession *downloader.R files = fileMap } - info, ok := snaptype.ParseFileName("", file) - - if !ok || (version != nil && *version != info.Version) { + info, isStateFile, ok := snaptype.ParseFileName("", file) + if !ok { + continue + } + if !isStateFile && version != nil && *version != info.Version { continue } @@ -218,7 +221,7 @@ func updateManifest(ctx context.Context, tmpDir string, srcSession *downloader.R return srcSession.Upload(ctx, manifestFile) } -func verifyManifest(ctx context.Context, srcSession *downloader.RCloneSession, version *uint8, out *os.File) error { +func verifyManifest(ctx context.Context, srcSession *downloader.RCloneSession, version *snaptype.Version, out *os.File) error { manifestEntries, err := DownloadManifest(ctx, srcSession) if err != nil { @@ -236,9 +239,11 @@ func verifyManifest(ctx context.Context, srcSession *downloader.RCloneSession, v file = fi.Name() } - info, ok := snaptype.ParseFileName("", file) - - if !ok || (version != nil && *version != info.Version) { + info, isStateFile, ok := snaptype.ParseFileName("", file) + if !ok { + continue + } + if !isStateFile && version != nil && *version != info.Version { continue } @@ -263,9 +268,11 @@ func verifyManifest(ctx context.Context, srcSession *downloader.RCloneSession, v file = fi.Name() } - info, ok := snaptype.ParseFileName("", file) - - if !ok || (version != nil && *version != info.Version) { + info, isStateFile, ok := snaptype.ParseFileName("", file) + if !ok { + continue + } + if !isStateFile && version != nil && *version != info.Version { continue } @@ -280,7 +287,7 @@ func verifyManifest(ctx context.Context, srcSession *downloader.RCloneSession, v var extra string if len(manifestFiles) != 0 { - files := make([]string, len(manifestFiles)) + files := make([]string, 0, len(manifestFiles)) for file := range manifestFiles { files = append(files, file) @@ -290,7 +297,7 @@ func verifyManifest(ctx context.Context, srcSession *downloader.RCloneSession, v } if len(dirFiles) != 0 { - files := make([]string, len(dirFiles)) + files := make([]string, 0, len(dirFiles)) for file := range dirFiles { files = append(files, file) diff --git a/cmd/snapshots/sync/sync.go b/cmd/snapshots/sync/sync.go index c01626f0678..847fe2fd5c1 100644 --- a/cmd/snapshots/sync/sync.go +++ b/cmd/snapshots/sync/sync.go @@ -8,7 +8,7 @@ import ( "os" "path/filepath" "regexp" - "runtime" + "slices" "strconv" "strings" "time" @@ -17,6 +17,10 @@ import ( "github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/storage" "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + "golang.org/x/sync/errgroup" + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" @@ -27,9 +31,6 @@ import ( "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/p2p/nat" "github.com/ledgerwatch/erigon/params" - "github.com/urfave/cli/v2" - "golang.org/x/exp/slices" - "golang.org/x/sync/errgroup" ) type LType int @@ -44,7 +45,7 @@ type Locator struct { LType LType Src string Root string - Version uint8 + Version snaptype.Version Chain string } @@ -84,7 +85,7 @@ func ParseLocator(value string) (*Locator, error) { return nil, fmt.Errorf("can't parse version: %s: %w", matches[3], err) } - loc.Version = uint8(version) + loc.Version = snaptype.Version(version) } case len(matches[1]) > 0: @@ -102,7 +103,7 @@ func ParseLocator(value string) (*Locator, error) { return nil, fmt.Errorf("can't parse version: %s: %w", matches[3], err) } - loc.Version = uint8(version) + loc.Version = snaptype.Version(version) } default: @@ -128,31 +129,83 @@ type TorrentClient struct { cfg *torrent.ClientConfig } -func NewTorrentClient(cliCtx *cli.Context, chain string) (*TorrentClient, error) { - logger := Logger(cliCtx.Context) - tempDir := TempDir(cliCtx.Context) +type CreateNewTorrentClientConfig struct { + Chain string + WebSeeds string + DownloadRate string + UploadRate string + Verbosity int + TorrentPort int + ConnsPerFile int + DisableIPv6 bool + DisableIPv4 bool + NatFlag string + Logger log.Logger + TempDir string + CleanDir bool +} + +func NewTorrentClientConfigFromCobra(cliCtx *cli.Context, chain string) CreateNewTorrentClientConfig { + return CreateNewTorrentClientConfig{ + Chain: chain, + WebSeeds: cliCtx.String(utils.WebSeedsFlag.Name), + DownloadRate: cliCtx.String(utils.TorrentDownloadRateFlag.Name), + UploadRate: cliCtx.String(utils.TorrentUploadRateFlag.Name), + Verbosity: cliCtx.Int(utils.TorrentVerbosityFlag.Name), + TorrentPort: cliCtx.Int(utils.TorrentPortFlag.Name), + ConnsPerFile: cliCtx.Int(utils.TorrentConnsPerFileFlag.Name), + DisableIPv6: cliCtx.Bool(utils.DisableIPV6.Name), + DisableIPv4: cliCtx.Bool(utils.DisableIPV4.Name), + NatFlag: cliCtx.String(utils.NATFlag.Name), + Logger: Logger(cliCtx.Context), + TempDir: TempDir(cliCtx.Context), + CleanDir: true, + } +} - torrentDir := filepath.Join(tempDir, "torrents", chain) +func NewDefaultTorrentClientConfig(chain string, torrentDir string, logger log.Logger) CreateNewTorrentClientConfig { + return CreateNewTorrentClientConfig{ + Chain: chain, + WebSeeds: utils.WebSeedsFlag.Value, + DownloadRate: utils.TorrentDownloadRateFlag.Value, + UploadRate: utils.TorrentUploadRateFlag.Value, + Verbosity: utils.TorrentVerbosityFlag.Value, + TorrentPort: utils.TorrentPortFlag.Value, + ConnsPerFile: utils.TorrentConnsPerFileFlag.Value, + DisableIPv6: utils.DisableIPV6.Value, + DisableIPv4: utils.DisableIPV4.Value, + NatFlag: utils.NATFlag.Value, + Logger: logger, + TempDir: torrentDir, + CleanDir: false, + } +} + +func NewTorrentClient(config CreateNewTorrentClientConfig) (*TorrentClient, error) { + logger := config.Logger + tempDir := config.TempDir + + torrentDir := filepath.Join(tempDir, "torrents", config.Chain) dirs := datadir.New(torrentDir) - webseedsList := common.CliString2Array(cliCtx.String(utils.WebSeedsFlag.Name)) + webseedsList := common.CliString2Array(config.WebSeeds) - if known, ok := snapcfg.KnownWebseeds[chain]; ok { + if known, ok := snapcfg.KnownWebseeds[config.Chain]; ok { webseedsList = append(webseedsList, known...) } var downloadRate, uploadRate datasize.ByteSize - if err := downloadRate.UnmarshalText([]byte(cliCtx.String(utils.TorrentDownloadRateFlag.Name))); err != nil { + if err := downloadRate.UnmarshalText([]byte(config.DownloadRate)); err != nil { return nil, err } - if err := uploadRate.UnmarshalText([]byte(cliCtx.String(utils.TorrentUploadRateFlag.Name))); err != nil { + if err := uploadRate.UnmarshalText([]byte(config.UploadRate)); err != nil { return nil, err } - logLevel, _, err := downloadercfg.Int2LogLevel(cliCtx.Int(utils.TorrentVerbosityFlag.Name)) + logLevel, _, err := downloadercfg.Int2LogLevel(config.Verbosity) if err != nil { return nil, err @@ -161,17 +214,17 @@ func NewTorrentClient(cliCtx *cli.Context, chain string) (*TorrentClient, error) version := "erigon: " + params.VersionWithCommit(params.GitCommit) cfg, err := downloadercfg.New(dirs, version, logLevel, downloadRate, uploadRate, - cliCtx.Int(utils.TorrentPortFlag.Name), - cliCtx.Int(utils.TorrentConnsPerFileFlag.Name), 0, nil, webseedsList, chain) + config.TorrentPort, + config.ConnsPerFile, 0, nil, webseedsList, config.Chain, true) if err != nil { return nil, err } - err = os.RemoveAll(torrentDir) - - if err != nil { - return nil, fmt.Errorf("can't clean torrent dir: %w", err) + if config.CleanDir { + if err := os.RemoveAll(torrentDir); err != nil { + return nil, fmt.Errorf("can't clean torrent dir: %w", err) + } } if err := os.MkdirAll(torrentDir, 0755); err != nil { @@ -180,11 +233,11 @@ func NewTorrentClient(cliCtx *cli.Context, chain string) (*TorrentClient, error) cfg.ClientConfig.DataDir = torrentDir - cfg.ClientConfig.PieceHashersPerTorrent = 32 * runtime.NumCPU() - cfg.ClientConfig.DisableIPv6 = cliCtx.Bool(utils.DisableIPV6.Name) - cfg.ClientConfig.DisableIPv4 = cliCtx.Bool(utils.DisableIPV4.Name) + cfg.ClientConfig.PieceHashersPerTorrent = 32 + cfg.ClientConfig.DisableIPv6 = config.DisableIPv6 + cfg.ClientConfig.DisableIPv4 = config.DisableIPv4 - natif, err := nat.Parse(utils.NATFlag.Value) + natif, err := nat.Parse(config.NatFlag) if err != nil { return nil, fmt.Errorf("invalid nat option %s: %w", utils.NATFlag.Value, err) @@ -237,7 +290,7 @@ type torrentInfo struct { hash string } -func (i *torrentInfo) Version() uint8 { +func (i *torrentInfo) Version() snaptype.Version { if i.snapInfo != nil { return i.snapInfo.Version } @@ -263,10 +316,10 @@ func (i *torrentInfo) To() uint64 { func (i *torrentInfo) Type() snaptype.Type { if i.snapInfo != nil { - return i.snapInfo.T + return i.snapInfo.Type } - return 0 + return nil } func (i *torrentInfo) Hash() string { @@ -275,7 +328,7 @@ func (i *torrentInfo) Hash() string { func (fi *fileInfo) Sys() any { info := torrentInfo{hash: fi.info.Hash} - if snapInfo, ok := snaptype.ParseFileName("", fi.Name()); ok { + if snapInfo, isStateFile, ok := snaptype.ParseFileName("", fi.Name()); ok && !isStateFile { info.snapInfo = &snapInfo } @@ -402,7 +455,7 @@ func (s *torrentSession) Label() string { func NewTorrentSession(cli *TorrentClient, chain string) *torrentSession { session := &torrentSession{cli, map[string]snapcfg.PreverifiedItem{}} - for _, it := range snapcfg.KnownCfg(chain, 0).Preverified { + for _, it := range snapcfg.KnownCfg(chain).Preverified { session.items[it.Name] = it } diff --git a/cmd/snapshots/torrents/torrents.go b/cmd/snapshots/torrents/torrents.go index 01f01ab6e14..eb08ca00208 100644 --- a/cmd/snapshots/torrents/torrents.go +++ b/cmd/snapshots/torrents/torrents.go @@ -5,13 +5,12 @@ import ( "fmt" "os" "path/filepath" + "slices" "strconv" "strings" gosync "sync" "time" - "golang.org/x/exp/slices" - "github.com/ledgerwatch/log/v3" "github.com/anacrolix/torrent/metainfo" @@ -162,7 +161,8 @@ func torrents(cliCtx *cli.Context, command string) error { if rcCli != nil { if src != nil && src.LType == sync.RemoteFs { - srcSession, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "src"), src.Src+":"+src.Root) + ctx := cliCtx.Context // avoiding sonar dup complaint + srcSession, err = rcCli.NewSession(ctx, filepath.Join(tempDir, "src"), src.Src+":"+src.Root, nil) if err != nil { return err @@ -225,10 +225,12 @@ func listTorrents(ctx context.Context, srcSession *downloader.RCloneSession, out } for _, fi := range entries { - if filepath.Ext(fi.Name()) == ".torrent" { - if from > 0 || to > 0 { - info, _ := snaptype.ParseFileName("", strings.TrimSuffix(fi.Name(), ".torrent")) - + if filepath.Ext(fi.Name()) != ".torrent" { + continue + } + if from > 0 || to > 0 { + info, _, ok := snaptype.ParseFileName("", strings.TrimSuffix(fi.Name(), ".torrent")) + if ok { if from > 0 && info.From < from { continue } @@ -237,9 +239,9 @@ func listTorrents(ctx context.Context, srcSession *downloader.RCloneSession, out continue } } - - fmt.Fprintln(out, fi.Name()) } + + fmt.Fprintln(out, fi.Name()) } return nil @@ -263,10 +265,12 @@ func torrentHashes(ctx context.Context, srcSession *downloader.RCloneSession, fr g.SetLimit(16) for _, fi := range entries { - if filepath.Ext(fi.Name()) == ".torrent" { - if from > 0 || to > 0 { - info, _ := snaptype.ParseFileName("", strings.TrimSuffix(fi.Name(), ".torrent")) - + if filepath.Ext(fi.Name()) != ".torrent" { + continue + } + if from > 0 || to > 0 { + info, _, ok := snaptype.ParseFileName("", strings.TrimSuffix(fi.Name(), ".torrent")) + if ok { if from > 0 && info.From < from { continue } @@ -275,49 +279,49 @@ func torrentHashes(ctx context.Context, srcSession *downloader.RCloneSession, fr continue } } + } - file := fi.Name() - - g.Go(func() error { - var mi *metainfo.MetaInfo + file := fi.Name() - errs := 0 + g.Go(func() error { + var mi *metainfo.MetaInfo - for { - reader, err := srcSession.Cat(gctx, file) + errs := 0 - if err != nil { - return fmt.Errorf("can't read remote torrent: %s: %w", file, err) - } + for { + reader, err := srcSession.Cat(gctx, file) - mi, err = metainfo.Load(reader) + if err != nil { + return fmt.Errorf("can't read remote torrent: %s: %w", file, err) + } - if err != nil { - errs++ + mi, err = metainfo.Load(reader) - if errs == 4 { - return fmt.Errorf("can't parse remote torrent: %s: %w", file, err) - } + if err != nil { + errs++ - continue + if errs == 4 { + return fmt.Errorf("can't parse remote torrent: %s: %w", file, err) } - break + continue } - info, err := mi.UnmarshalInfo() + break + } - if err != nil { - return fmt.Errorf("can't unmarshal torrent info: %s: %w", file, err) - } + info, err := mi.UnmarshalInfo() + + if err != nil { + return fmt.Errorf("can't unmarshal torrent info: %s: %w", file, err) + } - hashesMutex.Lock() - defer hashesMutex.Unlock() - hashes = append(hashes, hashInfo{info.Name, mi.HashInfoBytes().String()}) + hashesMutex.Lock() + defer hashesMutex.Unlock() + hashes = append(hashes, hashInfo{info.Name, mi.HashInfoBytes().String()}) - return nil - }) - } + return nil + }) } if err := g.Wait(); err != nil { @@ -345,16 +349,18 @@ func updateTorrents(ctx context.Context, srcSession *downloader.RCloneSession, f g, gctx := errgroup.WithContext(ctx) g.SetLimit(16) - torrentFiles := downloader.NewAtomicTorrentFiles(srcSession.LocalFsRoot()) + torrentFiles := downloader.NewAtomicTorrentFS(srcSession.LocalFsRoot()) for _, fi := range entries { - if filepath.Ext(fi.Name()) == ".torrent" { - file := strings.TrimSuffix(fi.Name(), ".torrent") - - g.Go(func() error { - if from > 0 || to > 0 { - info, _ := snaptype.ParseFileName("", file) + if filepath.Ext(fi.Name()) != ".torrent" { + continue + } + file := strings.TrimSuffix(fi.Name(), ".torrent") + g.Go(func() error { + if from > 0 || to > 0 { + info, _, ok := snaptype.ParseFileName("", file) + if ok { if from > 0 && info.From < from { return nil } @@ -363,28 +369,28 @@ func updateTorrents(ctx context.Context, srcSession *downloader.RCloneSession, f return nil } } + } - logger.Info(fmt.Sprintf("Updating %s", file+".torrent")) + logger.Info(fmt.Sprintf("Updating %s", file+".torrent")) - err := srcSession.Download(gctx, file) + err := srcSession.Download(gctx, file) - if err != nil { - return err - } + if err != nil { + return err + } - defer os.Remove(filepath.Join(srcSession.LocalFsRoot(), file)) + defer os.Remove(filepath.Join(srcSession.LocalFsRoot(), file)) - err = downloader.BuildTorrentIfNeed(gctx, file, srcSession.LocalFsRoot(), torrentFiles) + _, err = downloader.BuildTorrentIfNeed(gctx, file, srcSession.LocalFsRoot(), torrentFiles) - if err != nil { - return err - } + if err != nil { + return err + } - defer os.Remove(filepath.Join(srcSession.LocalFsRoot(), file+".torrent")) + defer os.Remove(filepath.Join(srcSession.LocalFsRoot(), file+".torrent")) - return srcSession.Upload(gctx, file+".torrent") - }) - } + return srcSession.Upload(gctx, file+".torrent") + }) } return g.Wait() @@ -400,16 +406,18 @@ func verifyTorrents(ctx context.Context, srcSession *downloader.RCloneSession, f g, gctx := errgroup.WithContext(ctx) g.SetLimit(16) - torrentFiles := downloader.NewAtomicTorrentFiles(srcSession.LocalFsRoot()) + torrentFiles := downloader.NewAtomicTorrentFS(srcSession.LocalFsRoot()) for _, fi := range entries { - if filepath.Ext(fi.Name()) == ".torrent" { - file := strings.TrimSuffix(fi.Name(), ".torrent") - - g.Go(func() error { - if from > 0 || to > 0 { - info, _ := snaptype.ParseFileName("", file) + if filepath.Ext(fi.Name()) != ".torrent" { + continue + } + file := strings.TrimSuffix(fi.Name(), ".torrent") + g.Go(func() error { + if from > 0 || to > 0 { + info, _, ok := snaptype.ParseFileName("", file) + if ok { if from > 0 && info.From < from { return nil } @@ -418,86 +426,86 @@ func verifyTorrents(ctx context.Context, srcSession *downloader.RCloneSession, f return nil } } + } - logger.Info(fmt.Sprintf("Validating %s", file+".torrent")) + logger.Info(fmt.Sprintf("Validating %s", file+".torrent")) - var mi *metainfo.MetaInfo + var mi *metainfo.MetaInfo - errs := 0 + errs := 0 - for { - reader, err := srcSession.Cat(gctx, file+".torrent") + for { + reader, err := srcSession.Cat(gctx, file+".torrent") - if err != nil { - return fmt.Errorf("can't read remote torrent: %s: %w", file+".torrent", err) - } - - mi, err = metainfo.Load(reader) + if err != nil { + return fmt.Errorf("can't read remote torrent: %s: %w", file+".torrent", err) + } - if err != nil { - errs++ + mi, err = metainfo.Load(reader) - if errs == 4 { - return fmt.Errorf("can't parse remote torrent: %s: %w", file+".torrent", err) - } + if err != nil { + errs++ - continue + if errs == 4 { + return fmt.Errorf("can't parse remote torrent: %s: %w", file+".torrent", err) } - break + continue } - info, err := mi.UnmarshalInfo() + break + } - if err != nil { - return fmt.Errorf("can't unmarshal torrent info: %s: %w", file+".torrent", err) - } + info, err := mi.UnmarshalInfo() - if info.Name != file { - return fmt.Errorf("torrent name does not match file: %s", file) - } + if err != nil { + return fmt.Errorf("can't unmarshal torrent info: %s: %w", file+".torrent", err) + } - err = srcSession.Download(gctx, file) + if info.Name != file { + return fmt.Errorf("torrent name does not match file: %s", file) + } - if err != nil { - return err - } + err = srcSession.Download(gctx, file) - defer os.Remove(filepath.Join(srcSession.LocalFsRoot(), file)) + if err != nil { + return err + } - err = downloader.BuildTorrentIfNeed(gctx, file, srcSession.LocalFsRoot(), torrentFiles) + defer os.Remove(filepath.Join(srcSession.LocalFsRoot(), file)) - if err != nil { - return err - } + _, err = downloader.BuildTorrentIfNeed(gctx, file, srcSession.LocalFsRoot(), torrentFiles) - torrentPath := filepath.Join(srcSession.LocalFsRoot(), file+".torrent") + if err != nil { + return err + } - defer os.Remove(torrentPath) + torrentPath := filepath.Join(srcSession.LocalFsRoot(), file+".torrent") - lmi, err := metainfo.LoadFromFile(torrentPath) + defer os.Remove(torrentPath) - if err != nil { - return fmt.Errorf("can't load local torrent from: %s: %w", torrentPath, err) - } + lmi, err := metainfo.LoadFromFile(torrentPath) - if lmi.HashInfoBytes() != mi.HashInfoBytes() { - return fmt.Errorf("computed local hash does not match torrent: %s: expected: %s, got: %s", file+".torrent", lmi.HashInfoBytes(), mi.HashInfoBytes()) - } + if err != nil { + return fmt.Errorf("can't load local torrent from: %s: %w", torrentPath, err) + } - localInfo, err := lmi.UnmarshalInfo() + if lmi.HashInfoBytes() != mi.HashInfoBytes() { + return fmt.Errorf("computed local hash does not match torrent: %s: expected: %s, got: %s", file+".torrent", lmi.HashInfoBytes(), mi.HashInfoBytes()) + } - if err != nil { - return fmt.Errorf("can't unmarshal local torrent info: %s: %w", torrentPath, err) - } + localInfo, err := lmi.UnmarshalInfo() - if localInfo.Name != info.Name { - return fmt.Errorf("computed local name does not match torrent: %s: expected: %s, got: %s", file+".torrent", localInfo.Name, info.Name) - } + if err != nil { + return fmt.Errorf("can't unmarshal local torrent info: %s: %w", torrentPath, err) + } - return nil - }) - } + if localInfo.Name != info.Name { + return fmt.Errorf("computed local name does not match torrent: %s: expected: %s, got: %s", file+".torrent", localInfo.Name, info.Name) + } + + return nil + }) } return g.Wait() diff --git a/cmd/snapshots/verify/verify.go b/cmd/snapshots/verify/verify.go index bb0fbc83b70..d3547c6f716 100644 --- a/cmd/snapshots/verify/verify.go +++ b/cmd/snapshots/verify/verify.go @@ -6,12 +6,13 @@ import ( "path/filepath" "strconv" + "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon-lib/downloader" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon/cmd/snapshots/flags" "github.com/ledgerwatch/erigon/cmd/snapshots/sync" "github.com/ledgerwatch/erigon/cmd/utils" - "github.com/urfave/cli/v2" ) var ( @@ -99,7 +100,8 @@ func verify(cliCtx *cli.Context) error { switch dst.LType { case sync.TorrentFs: - torrentCli, err = sync.NewTorrentClient(cliCtx, dst.Chain) + config := sync.NewTorrentClientConfigFromCobra(cliCtx, dst.Chain) + torrentCli, err = sync.NewTorrentClient(config) if err != nil { return fmt.Errorf("can't create torrent: %w", err) } @@ -125,7 +127,8 @@ func verify(cliCtx *cli.Context) error { switch src.LType { case sync.TorrentFs: if torrentCli == nil { - torrentCli, err = sync.NewTorrentClient(cliCtx, dst.Chain) + config := sync.NewTorrentClientConfigFromCobra(cliCtx, dst.Chain) + torrentCli, err = sync.NewTorrentClient(config) if err != nil { return fmt.Errorf("can't create torrent: %w", err) } @@ -203,7 +206,7 @@ func verify(cliCtx *cli.Context) error { if rcCli != nil { if src != nil && src.LType == sync.RemoteFs { - srcSession, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "src"), src.Src+":"+src.Root) + srcSession, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "src"), src.Src+":"+src.Root, nil) if err != nil { return err @@ -211,7 +214,7 @@ func verify(cliCtx *cli.Context) error { } if dst.LType == sync.RemoteFs { - dstSession, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "dst"), dst.Src+":"+dst.Root) + dstSession, err = rcCli.NewSession(cliCtx.Context, filepath.Join(tempDir, "dst"), dst.Src+":"+dst.Root, nil) if err != nil { return err @@ -241,9 +244,9 @@ func verify(cliCtx *cli.Context) error { srcSession = dstSession } - return verfifySnapshots(srcSession, dstSession, firstBlock, lastBlock, snapTypes, torrents, hashes, manifest) + return verifySnapshots(srcSession, dstSession, firstBlock, lastBlock, snapTypes, torrents, hashes, manifest) } -func verfifySnapshots(srcSession sync.DownloadSession, rcSession sync.DownloadSession, from uint64, to uint64, snapTypes []snaptype.Type, torrents, hashes, manifest bool) error { +func verifySnapshots(srcSession sync.DownloadSession, rcSession sync.DownloadSession, from uint64, to uint64, snapTypes []snaptype.Type, torrents, hashes, manifest bool) error { return fmt.Errorf("TODO") } diff --git a/cmd/state/commands/check_change_sets.go b/cmd/state/commands/check_change_sets.go index 3b844f1e5d7..c1f327257ce 100644 --- a/cmd/state/commands/check_change_sets.go +++ b/cmd/state/commands/check_change_sets.go @@ -46,7 +46,6 @@ func init() { withBlock(checkChangeSetsCmd) withDataDir(checkChangeSetsCmd) withSnapshotBlocks(checkChangeSetsCmd) - withSnapshotVersion(checkChangeSetsCmd) checkChangeSetsCmd.Flags().StringVar(&historyfile, "historyfile", "", "path to the file where the changesets and history are expected to be. If omitted, the same as /erion/chaindata") checkChangeSetsCmd.Flags().BoolVar(&nocheck, "nocheck", false, "set to turn off the changeset checking and only execute transaction (for performance testing)") rootCmd.AddCommand(checkChangeSetsCmd) @@ -57,13 +56,13 @@ var checkChangeSetsCmd = &cobra.Command{ Short: "Re-executes historical transactions in read-only mode and checks that their outputs match the database ChangeSets", RunE: func(cmd *cobra.Command, args []string) error { logger := debug.SetupCobra(cmd, "check_change_sets") - return CheckChangeSets(cmd.Context(), genesis, snapshotVersion, block, chaindata, historyfile, nocheck, logger) + return CheckChangeSets(cmd.Context(), genesis, block, chaindata, historyfile, nocheck, logger) }, } // CheckChangeSets re-executes historical transactions in read-only mode // and checks that their outputs match the database ChangeSets. -func CheckChangeSets(ctx context.Context, genesis *types.Genesis, snapshotVersion uint8, blockNum uint64, chaindata string, historyfile string, nocheck bool, logger log.Logger) error { +func CheckChangeSets(ctx context.Context, genesis *types.Genesis, blockNum uint64, chaindata string, historyfile string, nocheck bool, logger log.Logger) error { if len(historyfile) == 0 { historyfile = chaindata } @@ -82,7 +81,7 @@ func CheckChangeSets(ctx context.Context, genesis *types.Genesis, snapshotVersio if err != nil { return err } - allSnapshots := freezeblocks.NewRoSnapshots(ethconfig.NewSnapCfg(true, false, true), path.Join(datadirCli, "snapshots"), snapshotVersion, logger) + allSnapshots := freezeblocks.NewRoSnapshots(ethconfig.NewSnapCfg(true, false, true), path.Join(datadirCli, "snapshots"), 0, logger) defer allSnapshots.Close() if err := allSnapshots.ReopenFolder(); err != nil { return fmt.Errorf("reopen snapshot segments: %w", err) diff --git a/cmd/state/commands/global_flags_vars.go b/cmd/state/commands/global_flags_vars.go index a45471410b7..dd81e19aee6 100644 --- a/cmd/state/commands/global_flags_vars.go +++ b/cmd/state/commands/global_flags_vars.go @@ -19,7 +19,6 @@ var ( snapshotsCli bool chain string logdir string - snapshotVersion uint8 ) func must(err error) { @@ -40,10 +39,6 @@ func withDataDir(cmd *cobra.Command) { must(cmd.MarkFlagDirname("chaindata")) } -func withSnapshotVersion(cmd *cobra.Command) { - cmd.Flags().Uint8Var(&snapshotVersion, "stapshots.version", 1, "specifies the snapshot file version") -} - func withStatsfile(cmd *cobra.Command) { cmd.Flags().StringVar(&statsfile, "statsfile", "stateless.csv", "path where to write the stats file") must(cmd.MarkFlagFilename("statsfile", "csv")) diff --git a/cmd/state/commands/opcode_tracer.go b/cmd/state/commands/opcode_tracer.go index 92c73d4ec4a..dcb656460bd 100644 --- a/cmd/state/commands/opcode_tracer.go +++ b/cmd/state/commands/opcode_tracer.go @@ -8,11 +8,13 @@ import ( "fmt" "os" "os/signal" + "path/filepath" "strconv" "syscall" "time" "github.com/holiman/uint256" + datadir2 "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/log/v3" "github.com/spf13/cobra" @@ -45,7 +47,6 @@ var ( func init() { withBlock(opcodeTracerCmd) withDataDir(opcodeTracerCmd) - withSnapshotVersion(opcodeTracerCmd) opcodeTracerCmd.Flags().Uint64Var(&numBlocks, "numBlocks", 1, "number of blocks to run the operation on") opcodeTracerCmd.Flags().BoolVar(&saveOpcodes, "saveOpcodes", false, "set to save the opcodes") opcodeTracerCmd.Flags().BoolVar(&saveBBlocks, "saveBBlocks", false, "set to save the basic blocks") @@ -58,7 +59,7 @@ var opcodeTracerCmd = &cobra.Command{ Short: "Re-executes historical transactions in read-only mode and traces them at the opcode level", RunE: func(cmd *cobra.Command, args []string) error { logger := log.New("opcode-tracer", genesis.Config.ChainID) - return OpcodeTracer(genesis, snapshotVersion, block, chaindata, numBlocks, saveOpcodes, saveBBlocks, logger) + return OpcodeTracer(genesis, block, chaindata, numBlocks, saveOpcodes, saveBBlocks, logger) }, } @@ -397,7 +398,7 @@ type segPrefix struct { // OpcodeTracer re-executes historical transactions in read-only mode // and traces them at the opcode level -func OpcodeTracer(genesis *types.Genesis, snapshotVersion uint8, blockNum uint64, chaindata string, numBlocks uint64, +func OpcodeTracer(genesis *types.Genesis, blockNum uint64, chaindata string, numBlocks uint64, saveOpcodes bool, saveBblocks bool, logger log.Logger) error { blockNumOrig := blockNum @@ -430,7 +431,8 @@ func OpcodeTracer(genesis *types.Genesis, snapshotVersion uint8, blockNum uint64 } return nil }) - blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", snapshotVersion, log.New()), nil /* BorSnapshots */) + dirs := datadir2.New(filepath.Dir(chainDb.(*mdbx.MdbxKV).Path())) + blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, dirs.Snap, 0, log.New()), nil /* BorSnapshots */) chainConfig := genesis.Config vmConfig := vm.Config{Tracer: ot, Debug: true} diff --git a/cmd/state/commands/state_root.go b/cmd/state/commands/state_root.go index 18e32915fe6..bb39e75da35 100644 --- a/cmd/state/commands/state_root.go +++ b/cmd/state/commands/state_root.go @@ -35,7 +35,6 @@ import ( func init() { withBlock(stateRootCmd) withDataDir(stateRootCmd) - withSnapshotVersion(stateRootCmd) rootCmd.AddCommand(stateRootCmd) } @@ -44,11 +43,11 @@ var stateRootCmd = &cobra.Command{ Short: "Exerimental command to re-execute blocks from beginning and compute state root", RunE: func(cmd *cobra.Command, args []string) error { logger := debug.SetupCobra(cmd, "stateroot") - return StateRoot(cmd.Context(), genesis, snapshotVersion, block, datadirCli, logger) + return StateRoot(cmd.Context(), genesis, block, datadirCli, logger) }, } -func blocksIO(db kv.RoDB, snapshotVersion uint8) (services.FullBlockReader, *blockio.BlockWriter) { +func blocksIO(db kv.RoDB) (services.FullBlockReader, *blockio.BlockWriter) { var histV3 bool if err := db.View(context.Background(), func(tx kv.Tx) error { histV3, _ = kvcfg.HistoryV3.Enabled(tx) @@ -56,12 +55,13 @@ func blocksIO(db kv.RoDB, snapshotVersion uint8) (services.FullBlockReader, *blo }); err != nil { panic(err) } - br := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", snapshotVersion, log.New()), nil /* BorSnapshots */) + dirs := datadir2.New(filepath.Dir(db.(*kv2.MdbxKV).Path())) + br := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, dirs.Snap, 0, log.New()), nil /* BorSnapshots */) bw := blockio.NewBlockWriter(histV3) return br, bw } -func StateRoot(ctx context.Context, genesis *types.Genesis, snapshotVersion uint8, blockNum uint64, datadir string, logger log.Logger) error { +func StateRoot(ctx context.Context, genesis *types.Genesis, blockNum uint64, datadir string, logger log.Logger) error { sigs := make(chan os.Signal, 1) interruptCh := make(chan bool, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) @@ -94,7 +94,7 @@ func StateRoot(ctx context.Context, genesis *types.Genesis, snapshotVersion uint return err2 } defer db.Close() - blockReader, _ := blocksIO(db, snapshotVersion) + blockReader, _ := blocksIO(db) chainConfig := genesis.Config vmConfig := vm.Config{} diff --git a/cmd/state/commands/verify_txlookup.go b/cmd/state/commands/verify_txlookup.go index 3b5c4707c22..8dd27671015 100644 --- a/cmd/state/commands/verify_txlookup.go +++ b/cmd/state/commands/verify_txlookup.go @@ -8,7 +8,6 @@ import ( func init() { withDataDir(verifyTxLookupCmd) - withSnapshotVersion(verifyTxLookupCmd) rootCmd.AddCommand(verifyTxLookupCmd) } @@ -17,6 +16,6 @@ var verifyTxLookupCmd = &cobra.Command{ Short: "Generate tx lookup index", RunE: func(cmd *cobra.Command, args []string) error { logger := debug.SetupCobra(cmd, "verify_txlookup") - return verify.ValidateTxLookups(chaindata, snapshotVersion, logger) + return verify.ValidateTxLookups(chaindata, logger) }, } diff --git a/cmd/state/exec3/state.go b/cmd/state/exec3/state.go index 93302df017f..6a91318c56a 100644 --- a/cmd/state/exec3/state.go +++ b/cmd/state/exec3/state.go @@ -297,7 +297,8 @@ func (cr ChainReader) HasBlock(hash libcommon.Hash, number uint64) bool { func (cr ChainReader) BorEventsByBlock(hash libcommon.Hash, number uint64) []rlp.RawValue { panic("") } -func (cr ChainReader) BorSpan(spanId uint64) []byte { panic("") } +func (cr ChainReader) BorStartEventID(hash libcommon.Hash, number uint64) uint64 { panic("") } +func (cr ChainReader) BorSpan(spanId uint64) []byte { panic("") } func NewWorkersPool(lock sync.Locker, ctx context.Context, background bool, chainDb kv.RoDB, rs *state.StateV3, in *exec22.QueueWithRetry, blockReader services.FullBlockReader, chainConfig *chain.Config, genesis *types.Genesis, engine consensus.Engine, workerCount int) (reconWorkers []*Worker, applyWorker *Worker, rws *exec22.ResultsQueue, clear func(), wait func()) { reconWorkers = make([]*Worker, workerCount) diff --git a/cmd/state/verify/verify_txlookup.go b/cmd/state/verify/verify_txlookup.go index 625ef1fc717..be2d380407b 100644 --- a/cmd/state/verify/verify_txlookup.go +++ b/cmd/state/verify/verify_txlookup.go @@ -7,9 +7,11 @@ import ( "math/big" "os" "os/signal" + "path/filepath" "time" libcommon "github.com/ledgerwatch/erigon-lib/common" + datadir2 "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcfg" "github.com/ledgerwatch/erigon-lib/kv/mdbx" @@ -20,7 +22,7 @@ import ( "github.com/ledgerwatch/log/v3" ) -func blocksIO(db kv.RoDB, snapshotVersion uint8) (services.FullBlockReader, *blockio.BlockWriter) { +func blocksIO(db kv.RoDB) (services.FullBlockReader, *blockio.BlockWriter) { var histV3 bool if err := db.View(context.Background(), func(tx kv.Tx) error { histV3, _ = kvcfg.HistoryV3.Enabled(tx) @@ -28,14 +30,15 @@ func blocksIO(db kv.RoDB, snapshotVersion uint8) (services.FullBlockReader, *blo }); err != nil { panic(err) } - br := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", snapshotVersion, log.New()), nil /* BorSnapshots */) + dirs := datadir2.New(filepath.Dir(db.(*mdbx.MdbxKV).Path())) + br := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, dirs.Snap, 0, log.New()), nil /* BorSnapshots */) bw := blockio.NewBlockWriter(histV3) return br, bw } -func ValidateTxLookups(chaindata string, snapshotVersion uint8, logger log.Logger) error { +func ValidateTxLookups(chaindata string, logger log.Logger) error { db := mdbx.MustOpen(chaindata) - br, _ := blocksIO(db, snapshotVersion) + br, _ := blocksIO(db) tx, err := db.BeginRo(context.Background()) if err != nil { return err diff --git a/cmd/tooling/README.md b/cmd/tooling/README.md deleted file mode 100644 index 222adcade50..00000000000 --- a/cmd/tooling/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Tooling - -this are a bunch of tools for our scripting necessities \ No newline at end of file diff --git a/cmd/tooling/cli.go b/cmd/tooling/cli.go deleted file mode 100644 index a30a30a4ad8..00000000000 --- a/cmd/tooling/cli.go +++ /dev/null @@ -1,180 +0,0 @@ -package main - -import ( - "fmt" - "math" - "os/exec" - "time" - - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cmd/caplin/caplin1" - "github.com/ledgerwatch/erigon/eth/ethconfig" - "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" - "golang.org/x/net/context" - - "github.com/ledgerwatch/erigon-lib/chain/snapcfg" - "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon-lib/downloader/snaptype" - "github.com/ledgerwatch/erigon/cl/persistence" - "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" - "github.com/ledgerwatch/erigon/cl/persistence/db_config" - "github.com/ledgerwatch/erigon/cl/utils" - - "github.com/ledgerwatch/log/v3" -) - -var CLI struct { - BucketCaplinAutomation BucketCaplinAutomation `cmd:"" help:"migrate from one state to another"` -} - -type chainCfg struct { - Chain string `help:"chain" default:"mainnet"` -} - -// func (c *chainCfg) configs() (beaconConfig *clparams.BeaconChainConfig, genesisConfig *clparams.GenesisConfig, err error) { -// genesisConfig, _, beaconConfig, _, err = clparams.GetConfigsByNetworkName(c.Chain) -// return -// } - -type withDatadir struct { - Datadir string `help:"datadir" default:"~/.local/share/erigon" type:"existingdir"` -} - -// func (w *withPPROF) withProfile() { -// if w.Pprof { -// debug.StartPProf("localhost:6060", metrics.Setup("localhost:6060", log.Root())) -// } -// } - -// func (w *withSentinel) connectSentinel() (sentinel.SentinelClient, error) { -// // YOLO message size -// gconn, err := grpc.Dial(w.Sentinel, grpc.WithInsecure(), grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt))) -// if err != nil { -// return nil, err -// } -// return sentinel.NewSentinelClient(gconn), nil -// } - -// func openFs(fsName string, path string) (afero.Fs, error) { -// return afero.NewBasePathFs(afero.NewBasePathFs(afero.NewOsFs(), fsName), path), nil -// } - -type BucketCaplinAutomation struct { - withDatadir - chainCfg - - UploadPeriod time.Duration `help:"upload period" default:"1440h"` - Bucket string `help:"r2 address" default:"http://localhost:8080"` -} - -func (c *BucketCaplinAutomation) Run(ctx *Context) error { - _, _, beaconConfig, _, err := clparams.GetConfigsByNetworkName(c.Chain) - if err != nil { - return err - } - log.Root().SetHandler(log.LvlFilterHandler(log.LvlDebug, log.StderrHandler)) - log.Info("Started the automation tool for automatic snapshot sanity check and R2 uploading (caplin only)", "chain", c.Chain) - dirs := datadir.New(c.Datadir) - log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StderrHandler)) - tickerTriggerer := time.NewTicker(c.UploadPeriod) - defer tickerTriggerer.Stop() - // do the checking at first run - - snapshotVersion := snapcfg.KnownCfg(c.Chain, 0).Version - - if err := checkSnapshots(ctx, beaconConfig, dirs, snapshotVersion); err != nil { - return err - } - log.Info("Uploading snapshots to R2 bucket") - // next upload to R2 - command := "rclone" - args := []string{"sync", dirs.Snap, c.Bucket, "--include", "*beaconblocks*"} - if err := exec.Command(command, args...).Run(); err != nil { - return fmt.Errorf("rclone failed, make sure rclone is installed and is properly configured: %s", err) - } - log.Info("Finished snapshots to R2 bucket") - for { - select { - case <-tickerTriggerer.C: - log.Info("Checking snapshots") - snapshotVersion := snapcfg.KnownCfg(c.Chain, 0).Version - - if err := checkSnapshots(ctx, beaconConfig, dirs, snapshotVersion); err != nil { - return err - } - log.Info("Finishing snapshots") - // next upload to R2 - command := "rclone" - args := []string{"sync", dirs.Snap, c.Bucket, "--include", "*beaconblocks*"} - log.Info("Uploading snapshots to R2 bucket") - if err := exec.Command(command, args...).Run(); err != nil { - return fmt.Errorf("rclone failed, make sure rclone is installed and is properly configured: %s", err) - } - log.Info("Finished snapshots to R2 bucket") - case <-ctx.Done(): - return nil - } - } -} - -func checkSnapshots(ctx context.Context, beaconConfig *clparams.BeaconChainConfig, dirs datadir.Dirs, snapshotVersion uint8) error { - rawDB, _ := persistence.AferoRawBeaconBlockChainFromOsPath(beaconConfig, dirs.CaplinHistory) - _, db, err := caplin1.OpenCaplinDatabase(ctx, db_config.DatabaseConfiguration{PruneDepth: math.MaxUint64}, beaconConfig, rawDB, dirs.CaplinIndexing, nil, false) - if err != nil { - return err - } - defer db.Close() - var to uint64 - tx, err := db.BeginRo(ctx) - if err != nil { - return err - } - defer tx.Rollback() - - to, err = beacon_indicies.ReadHighestFinalized(tx) - if err != nil { - return err - } - - to = (to / snaptype.Erigon2MergeLimit) * snaptype.Erigon2MergeLimit - - csn := freezeblocks.NewCaplinSnapshots(ethconfig.BlocksFreezing{}, beaconConfig, dirs.Snap, snapshotVersion, log.Root()) - if err := csn.ReopenFolder(); err != nil { - return err - } - - genesisHeader, _, _, err := csn.ReadHeader(0) - if err != nil { - return err - } - previousBlockRoot, err := genesisHeader.Header.HashSSZ() - if err != nil { - return err - } - previousBlockSlot := genesisHeader.Header.Slot - for i := uint64(1); i < to; i++ { - if utils.Min64(0, i-320) > previousBlockSlot { - return fmt.Errorf("snapshot %d has invalid slot", i) - } - // Checking of snapshots is a chain contiguity problem - currentHeader, _, _, err := csn.ReadHeader(i) - if err != nil { - return err - } - if currentHeader == nil { - continue - } - if currentHeader.Header.ParentRoot != previousBlockRoot { - return fmt.Errorf("snapshot %d has invalid parent root", i) - } - previousBlockRoot, err = currentHeader.Header.HashSSZ() - if err != nil { - return err - } - previousBlockSlot = currentHeader.Header.Slot - if i%20000 == 0 { - log.Info("Successfully checked", "slot", i) - } - } - return nil -} diff --git a/cmd/tooling/main.go b/cmd/tooling/main.go deleted file mode 100644 index d2d04e6dcd2..00000000000 --- a/cmd/tooling/main.go +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright 2022 Erigon-Lightclient contributors - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package main - -import ( - "context" - - "github.com/alecthomas/kong" -) - -type Context struct { - context.Context - kctx *kong.Context -} - -func main() { - ctx := kong.Parse(&CLI) - // Call the Run() method of the selected parsed command. - err := ctx.Run(&Context{ - kctx: ctx, - Context: context.TODO(), - }) - ctx.FatalIfErrorf(err) -} diff --git a/cmd/txpool/main.go b/cmd/txpool/main.go index 421bf0c7216..e0b94566879 100644 --- a/cmd/txpool/main.go +++ b/cmd/txpool/main.go @@ -50,11 +50,12 @@ var ( baseFeePoolLimit int queuedPoolLimit int - priceLimit uint64 - accountSlots uint64 - blobSlots uint64 - priceBump uint64 - blobPriceBump uint64 + priceLimit uint64 + accountSlots uint64 + blobSlots uint64 + totalBlobPoolLimit uint64 + priceBump uint64 + blobPriceBump uint64 optimism bool noTxGossip bool @@ -81,6 +82,7 @@ func init() { rootCmd.PersistentFlags().Uint64Var(&priceLimit, "txpool.pricelimit", txpoolcfg.DefaultConfig.MinFeeCap, "Minimum gas price (fee cap) limit to enforce for acceptance into the pool") rootCmd.PersistentFlags().Uint64Var(&accountSlots, "txpool.accountslots", txpoolcfg.DefaultConfig.AccountSlots, "Minimum number of executable transaction slots guaranteed per account") rootCmd.PersistentFlags().Uint64Var(&blobSlots, "txpool.blobslots", txpoolcfg.DefaultConfig.BlobSlots, "Max allowed total number of blobs (within type-3 txs) per account") + rootCmd.PersistentFlags().Uint64Var(&totalBlobPoolLimit, "txpool.totalblobpoollimit", txpoolcfg.DefaultConfig.TotalBlobPoolLimit, "Total limit of number of all blobs in txs within the txpool") rootCmd.PersistentFlags().Uint64Var(&priceBump, "txpool.pricebump", txpoolcfg.DefaultConfig.PriceBump, "Price bump percentage to replace an already existing transaction") rootCmd.PersistentFlags().Uint64Var(&blobPriceBump, "txpool.blobpricebump", txpoolcfg.DefaultConfig.BlobPriceBump, "Price bump percentage to replace an existing blob (type-3) transaction") rootCmd.PersistentFlags().DurationVar(&commitEvery, utils.TxPoolCommitEveryFlag.Name, utils.TxPoolCommitEveryFlag.Value, utils.TxPoolCommitEveryFlag.Usage) @@ -150,6 +152,7 @@ func doTxpool(ctx context.Context, logger log.Logger) error { cfg.MinFeeCap = priceLimit cfg.AccountSlots = accountSlots cfg.BlobSlots = blobSlots + cfg.TotalBlobPoolLimit = totalBlobPoolLimit cfg.PriceBump = priceBump cfg.BlobPriceBump = blobPriceBump cfg.NoGossip = noTxGossip diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 4b06c0aeac4..9cc194f7071 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -60,7 +60,9 @@ import ( "github.com/ledgerwatch/erigon/p2p/nat" "github.com/ledgerwatch/erigon/p2p/netutil" "github.com/ledgerwatch/erigon/params" + borsnaptype "github.com/ledgerwatch/erigon/polygon/bor/snaptype" "github.com/ledgerwatch/erigon/rpc/rpccfg" + "github.com/ledgerwatch/erigon/turbo/logging" ) // These are all the command line flags we support. @@ -116,6 +118,10 @@ var ( Name: "override.cancun", Usage: "Manually specify the Cancun fork time, overriding the bundled setting", } + OverridePragueFlag = flags.BigFlag{ + Name: "override.prague", + Usage: "Manually specify the Prague fork time, overriding the bundled setting", + } TrustedSetupFile = cli.StringFlag{ Name: "trusted-setup-file", Usage: "Absolute path to trusted_setup.json file", @@ -204,6 +210,11 @@ var ( Usage: "Max allowed total number of blobs (within type-3 txs) per account", Value: txpoolcfg.DefaultConfig.BlobSlots, } + TxPoolTotalBlobPoolLimit = cli.Uint64Flag{ + Name: "txpool.totalblobpoollimit", + Usage: "Total limit of number of all blobs in txs within the txpool", + Value: txpoolcfg.DefaultConfig.TotalBlobPoolLimit, + } TxPoolGlobalSlotsFlag = cli.Uint64Flag{ Name: "txpool.globalslots", Usage: "Maximum number of executable transaction slots for all accounts", @@ -413,7 +424,11 @@ var ( } HTTPTraceFlag = cli.BoolFlag{ Name: "http.trace", - Usage: "Trace HTTP requests with INFO level", + Usage: "Print all HTTP requests to logs with INFO level", + } + HTTPDebugSingleFlag = cli.BoolFlag{ + Name: "http.dbg.single", + Usage: "Allow pass HTTP header 'dbg: true' to printt more detailed logs - how this request was executed", } DBReadConcurrencyFlag = cli.IntFlag{ Name: "db.read.concurrency", @@ -448,7 +463,7 @@ var ( HTTPPathPrefixFlag = cli.StringFlag{ Name: "http.rpcprefix", - Usage: "HTTP path path prefix on which JSON-RPC is served. Use '/' to serve on all paths.", + Usage: "HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths.", Value: "", } TLSFlag = cli.BoolFlag{ @@ -499,6 +514,11 @@ var ( Usage: "HTTP path prefix on which JSON-RPC is served. Use '/' to serve on all paths.", Value: "", } + WSSubscribeLogsChannelSize = cli.IntFlag{ + Name: "ws.api.subscribelogs.channelsize", + Usage: "Size of the channel used for websocket logs subscriptions", + Value: 8192, + } ExecFlag = cli.StringFlag{ Name: "exec", Usage: "Execute JavaScript statement", @@ -689,10 +709,6 @@ var ( Usage: "Metrics HTTP server listening port", Value: metrics.DefaultConfig.Port, } - HistoryV3Flag = cli.BoolFlag{ - Name: "experimental.history.v3", - Usage: "(Also known as Erigon3) Not recommended yet: Can't change this flag after node creation. New DB and Snapshots format of history allows: parallel blocks execution, get state as of given transaction without executing whole block.", - } CliqueSnapshotCheckpointIntervalFlag = cli.UintFlag{ Name: "clique.checkpoint", @@ -837,6 +853,17 @@ var ( Value: true, } + WithHeimdallWaypoints = cli.BoolFlag{ + Name: "bor.waypoints", + Usage: "Enabling bor waypont recording", + Value: false, + } + + PolygonSyncFlag = cli.BoolFlag{ + Name: "polygon.sync", + Usage: "Enabling syncing using the new polygon sync component", + } + ConfigFlag = cli.StringFlag{ Name: "config", Usage: "Sets erigon flags from YAML/TOML file", @@ -895,18 +922,57 @@ var ( Usage: "Enable Silkworm block execution", } SilkwormRpcDaemonFlag = cli.BoolFlag{ - Name: "silkworm.rpcd", - Usage: "Enable embedded Silkworm RPC daemon", + Name: "silkworm.rpc", + Usage: "Enable embedded Silkworm RPC service", } SilkwormSentryFlag = cli.BoolFlag{ Name: "silkworm.sentry", Usage: "Enable embedded Silkworm Sentry service", } + SilkwormVerbosityFlag = cli.StringFlag{ + Name: "silkworm.verbosity", + Usage: "Set the log level for Silkworm console logs", + Value: log.LvlInfo.String(), + } + SilkwormNumContextsFlag = cli.UintFlag{ + Name: "silkworm.contexts", + Usage: "Number of I/O contexts used in embedded Silkworm RPC and Sentry services (zero means use default in Silkworm)", + Value: 0, + } + SilkwormRpcLogEnabledFlag = cli.BoolFlag{ + Name: "silkworm.rpc.log", + Usage: "Enable interface log for embedded Silkworm RPC service", + Value: false, + } + SilkwormRpcLogMaxFileSizeFlag = cli.UintFlag{ + Name: "silkworm.rpc.log.maxsize", + Usage: "Max interface log file size in MB for embedded Silkworm RPC service", + Value: 1, + } + SilkwormRpcLogMaxFilesFlag = cli.UintFlag{ + Name: "silkworm.rpc.log.maxfiles", + Usage: "Max interface log files for embedded Silkworm RPC service", + Value: 100, + } + SilkwormRpcLogDumpResponseFlag = cli.BoolFlag{ + Name: "silkworm.rpc.log.response", + Usage: "Dump responses in interface logs for embedded Silkworm RPC service", + Value: false, + } + SilkwormRpcNumWorkersFlag = cli.UintFlag{ + Name: "silkworm.rpc.workers", + Usage: "Number of worker threads used in embedded Silkworm RPC service (zero means use default in Silkworm)", + Value: 0, + } + SilkwormRpcJsonCompatibilityFlag = cli.BoolFlag{ + Name: "silkworm.rpc.compatibility", + Usage: "Preserve JSON-RPC compatibility using embedded Silkworm RPC service", + Value: true, + } - BeaconAPIFlag = cli.BoolFlag{ + BeaconAPIFlag = cli.StringSliceFlag{ Name: "beacon.api", - Usage: "Enable beacon API", - Value: false, + Usage: "Enable beacon API (avaiable endpoints: beacon, builder, config, debug, events, node, validator, rewards, lighthouse)", } BeaconApiProtocolFlag = cli.StringFlag{ Name: "beacon.api.protocol", @@ -948,9 +1014,19 @@ var ( Usage: "sets whether backfilling is enabled for caplin", Value: false, } + CaplinBlobBackfillingFlag = cli.BoolFlag{ + Name: "caplin.backfilling.blob", + Usage: "sets whether backfilling is enabled for caplin", + Value: false, + } + CaplinDisableBlobPruningFlag = cli.BoolFlag{ + Name: "caplin.backfilling.blob.no-pruning", + Usage: "disable blob pruning in caplin", + Value: false, + } CaplinArchiveFlag = cli.BoolFlag{ Name: "caplin.archive", - Usage: "enables archival node in caplin (Experimental, does not work)", + Usage: "enables archival node in caplin", Value: false, } BeaconApiAllowCredentialsFlag = cli.BoolFlag{ @@ -968,9 +1044,29 @@ var ( Usage: "set the cors' allow origins", Value: cli.NewStringSlice(), } + DiagDisabledFlag = cli.BoolFlag{ + Name: "diagnostics.disabled", + Usage: "Disable diagnostics", + Value: false, + } + DiagEndpointAddrFlag = cli.StringFlag{ + Name: "diagnostics.endpoint.addr", + Usage: "Diagnostics HTTP server listening interface", + Value: "0.0.0.0", + } + DiagEndpointPortFlag = cli.UintFlag{ + Name: "diagnostics.endpoint.port", + Usage: "Diagnostics HTTP server listening port", + Value: 6060, + } + DiagSpeedTestFlag = cli.BoolFlag{ + Name: "diagnostics.speedtest", + Usage: "Enable speed test", + Value: false, + } ) -var MetricFlags = []cli.Flag{&MetricsEnabledFlag, &MetricsHTTPFlag, &MetricsPortFlag} +var MetricFlags = []cli.Flag{&MetricsEnabledFlag, &MetricsHTTPFlag, &MetricsPortFlag, &DiagDisabledFlag, &DiagEndpointAddrFlag, &DiagEndpointPortFlag, &DiagSpeedTestFlag} var DiagnosticsFlags = []cli.Flag{&DiagnosticsURLFlag, &DiagnosticsURLFlag, &DiagnosticsSessionsFlag} @@ -1425,6 +1521,9 @@ func setTxPool(ctx *cli.Context, fullCfg *ethconfig.Config) { if ctx.IsSet(TxPoolBlobSlotsFlag.Name) { fullCfg.TxPool.BlobSlots = ctx.Uint64(TxPoolBlobSlotsFlag.Name) } + if ctx.IsSet(TxPoolTotalBlobPoolLimit.Name) { + fullCfg.TxPool.TotalBlobPoolLimit = ctx.Uint64(TxPoolTotalBlobPoolLimit.Name) + } if ctx.IsSet(TxPoolGlobalSlotsFlag.Name) { cfg.GlobalSlots = ctx.Uint64(TxPoolGlobalSlotsFlag.Name) } @@ -1541,6 +1640,9 @@ func setBorConfig(ctx *cli.Context, cfg *ethconfig.Config) { cfg.HeimdallURL = ctx.String(HeimdallURLFlag.Name) cfg.WithoutHeimdall = ctx.Bool(WithoutHeimdallFlag.Name) cfg.WithHeimdallMilestones = ctx.Bool(WithHeimdallMilestones.Name) + cfg.WithHeimdallWaypointRecording = ctx.Bool(WithHeimdallWaypoints.Name) + borsnaptype.RecordWayPoints(cfg.WithHeimdallWaypointRecording) + cfg.PolygonSync = ctx.Bool(PolygonSyncFlag.Name) } func setMiner(ctx *cli.Context, cfg *params.MiningConfig) { @@ -1593,8 +1695,12 @@ func setWhitelist(ctx *cli.Context, cfg *ethconfig.Config) { } } -func setBeaconAPI(ctx *cli.Context, cfg *ethconfig.Config) { - cfg.BeaconRouter.Active = ctx.Bool(BeaconAPIFlag.Name) +func setBeaconAPI(ctx *cli.Context, cfg *ethconfig.Config) error { + allowed := ctx.StringSlice(BeaconAPIFlag.Name) + if err := cfg.BeaconRouter.UnwrapEndpointsList(allowed); err != nil { + return err + } + cfg.BeaconRouter.Protocol = ctx.String(BeaconApiProtocolFlag.Name) cfg.BeaconRouter.Address = fmt.Sprintf("%s:%d", ctx.String(BeaconApiAddrFlag.Name), ctx.Int(BeaconApiPortFlag.Name)) cfg.BeaconRouter.ReadTimeTimeout = time.Duration(ctx.Uint64(BeaconApiReadTimeoutFlag.Name)) * time.Second @@ -1603,10 +1709,15 @@ func setBeaconAPI(ctx *cli.Context, cfg *ethconfig.Config) { cfg.BeaconRouter.AllowedMethods = ctx.StringSlice(BeaconApiAllowMethodsFlag.Name) cfg.BeaconRouter.AllowedOrigins = ctx.StringSlice(BeaconApiAllowOriginsFlag.Name) cfg.BeaconRouter.AllowCredentials = ctx.Bool(BeaconApiAllowCredentialsFlag.Name) + return nil } func setCaplin(ctx *cli.Context, cfg *ethconfig.Config) { - cfg.CaplinConfig.Backfilling = ctx.Bool(CaplinBackfillingFlag.Name) || ctx.Bool(CaplinArchiveFlag.Name) + // Caplin's block's backfilling is enabled if any of the following flags are set + cfg.CaplinConfig.Backfilling = ctx.Bool(CaplinBackfillingFlag.Name) || ctx.Bool(CaplinArchiveFlag.Name) || ctx.Bool(CaplinBlobBackfillingFlag.Name) + // More granularity here. + cfg.CaplinConfig.BlobBackfilling = ctx.Bool(CaplinBlobBackfillingFlag.Name) + cfg.CaplinConfig.BlobPruningDisabled = ctx.Bool(CaplinDisableBlobPruningFlag.Name) cfg.CaplinConfig.Archive = ctx.Bool(CaplinArchiveFlag.Name) } @@ -1614,6 +1725,15 @@ func setSilkworm(ctx *cli.Context, cfg *ethconfig.Config) { cfg.SilkwormExecution = ctx.Bool(SilkwormExecutionFlag.Name) cfg.SilkwormRpcDaemon = ctx.Bool(SilkwormRpcDaemonFlag.Name) cfg.SilkwormSentry = ctx.Bool(SilkwormSentryFlag.Name) + cfg.SilkwormVerbosity = ctx.String(SilkwormVerbosityFlag.Name) + cfg.SilkwormNumContexts = uint32(ctx.Uint64(SilkwormNumContextsFlag.Name)) + cfg.SilkwormRpcLogEnabled = ctx.Bool(SilkwormRpcLogEnabledFlag.Name) + cfg.SilkwormRpcLogDirPath = logging.LogDirPath(ctx) + cfg.SilkwormRpcLogMaxFileSize = uint16(ctx.Uint64(SilkwormRpcLogMaxFileSizeFlag.Name)) + cfg.SilkwormRpcLogMaxFiles = uint16(ctx.Uint(SilkwormRpcLogMaxFilesFlag.Name)) + cfg.SilkwormRpcLogDumpResponse = ctx.Bool(SilkwormRpcLogDumpResponseFlag.Name) + cfg.SilkwormRpcNumWorkers = uint32(ctx.Uint64(SilkwormRpcNumWorkersFlag.Name)) + cfg.SilkwormRpcJsonCompatibility = ctx.Bool(SilkwormRpcJsonCompatibilityFlag.Name) } // CheckExclusive verifies that only a single instance of the provided flags was @@ -1666,7 +1786,17 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C cfg.SentinelPort = ctx.Uint64(SentinelPortFlag.Name) cfg.ForcePartialCommit = ctx.Bool(ForcePartialCommitFlag.Name) - cfg.Sync.UseSnapshots = ethconfig.UseSnapshotsByChainName(ctx.String(ChainFlag.Name)) + chain := ctx.String(ChainFlag.Name) // mainnet by default + if ctx.IsSet(NetworkIdFlag.Name) { + cfg.NetworkID = ctx.Uint64(NetworkIdFlag.Name) + if cfg.NetworkID != 1 && !ctx.IsSet(ChainFlag.Name) { + chain = "" // don't default to mainnet if NetworkID != 1 + } + } else { + cfg.NetworkID = params.NetworkIDByChainName(chain) + } + + cfg.Sync.UseSnapshots = ethconfig.UseSnapshotsByChainName(chain) if ctx.IsSet(SnapshotFlag.Name) { //force override default by cli cfg.Sync.UseSnapshots = ctx.Bool(SnapshotFlag.Name) } @@ -1693,12 +1823,12 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C } logger.Info("torrent verbosity", "level", lvl.LogString()) version := "erigon: " + params.VersionWithCommit(params.GitCommit) - chain := ctx.String(ChainFlag.Name) webseedsList := libcommon.CliString2Array(ctx.String(WebSeedsFlag.Name)) if known, ok := snapcfg.KnownWebseeds[chain]; ok { webseedsList = append(webseedsList, known...) } - cfg.Downloader, err = downloadercfg2.New(cfg.Dirs, version, lvl, downloadRate, uploadRate, ctx.Int(TorrentPortFlag.Name), ctx.Int(TorrentConnsPerFileFlag.Name), ctx.Int(TorrentDownloadSlotsFlag.Name), ctx.StringSlice(TorrentDownloadSlotsFlag.Name), webseedsList, chain) + cfg.Downloader, err = downloadercfg2.New(cfg.Dirs, version, lvl, downloadRate, uploadRate, ctx.Int(TorrentPortFlag.Name), ctx.Int(TorrentConnsPerFileFlag.Name), ctx.Int(TorrentDownloadSlotsFlag.Name), libcommon.CliString2Array(ctx.String(TorrentStaticPeersFlag.Name)), webseedsList, chain, true) + if err != nil { panic(err) } @@ -1724,14 +1854,12 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C setWhitelist(ctx, cfg) setBorConfig(ctx, cfg) setSilkworm(ctx, cfg) - setBeaconAPI(ctx, cfg) + if err := setBeaconAPI(ctx, cfg); err != nil { + log.Error("Failed to set beacon API", "err", err) + } setCaplin(ctx, cfg) cfg.Ethstats = ctx.String(EthStatsURLFlag.Name) - cfg.HistoryV3 = ctx.Bool(HistoryV3Flag.Name) - if ctx.IsSet(NetworkIdFlag.Name) { - cfg.NetworkID = ctx.Uint64(NetworkIdFlag.Name) - } if ctx.IsSet(RPCGlobalGasCapFlag.Name) { cfg.RPCGasCap = ctx.Uint64(RPCGlobalGasCapFlag.Name) @@ -1762,9 +1890,8 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C cfg.RollupHistoricalRPC = ctx.String(RollupHistoricalRPCFlag.Name) } cfg.RollupHistoricalRPCTimeout = ctx.Duration(RollupHistoricalRPCTimeoutFlag.Name) - // Override any default configs for hard coded networks. - chain := ctx.String(ChainFlag.Name) + // Override any default configs for hard coded networks. switch chain { default: genesis := core.GenesisBlockByChainName(chain) @@ -1774,19 +1901,12 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C return } cfg.Genesis = genesis - if !ctx.IsSet(NetworkIdFlag.Name) { - cfg.NetworkID = params.NetworkIDByChainName(chain) - } SetDNSDiscoveryDefaults(cfg, *genesisHash) case "": if cfg.NetworkID == 1 { SetDNSDiscoveryDefaults(cfg, params.MainnetGenesisHash) } case networkname.DevChainName: - if !ctx.IsSet(NetworkIdFlag.Name) { - cfg.NetworkID = params.NetworkIDByChainName(chain) - } - // Create new developer account or reuse existing one developer := cfg.Miner.Etherbase if developer == (libcommon.Address{}) { @@ -1810,9 +1930,8 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C } } - if ctx.IsSet(OverrideCancunFlag.Name) { - cfg.OverrideCancunTime = flags.GlobalBig(ctx, OverrideCancunFlag.Name) - cfg.TxPool.OverrideCancunTime = cfg.OverrideCancunTime + if ctx.IsSet(OverridePragueFlag.Name) { + cfg.OverridePragueTime = flags.GlobalBig(ctx, OverridePragueFlag.Name) } if ctx.IsSet(OverrideShanghaiTime.Name) { cfg.OverrideShanghaiTime = flags.GlobalBig(ctx, OverrideShanghaiTime.Name) @@ -1901,6 +2020,8 @@ func CobraFlags(cmd *cobra.Command, urfaveCliFlagsLists ...[]cli.Flag) { switch f := flag.(type) { case *cli.IntFlag: flags.Int(f.Name, f.Value, f.Usage) + case *cli.UintFlag: + flags.Uint(f.Name, f.Value, f.Usage) case *cli.StringFlag: flags.String(f.Name, f.Value, f.Usage) case *cli.BoolFlag: diff --git a/common/compiler/test.v.py b/common/compiler/test.v.py index 35af56c8f6e..e489330c504 100644 --- a/common/compiler/test.v.py +++ b/common/compiler/test.v.py @@ -1,3 +1,3 @@ -@public +@external def test(): - hello: int128 + hello: int128 = 13 diff --git a/common/debug/log_panic.go b/common/debug/log_panic.go index c7b91a35f44..853a4e967cd 100644 --- a/common/debug/log_panic.go +++ b/common/debug/log_panic.go @@ -2,16 +2,17 @@ package debug import ( "os" + "sync/atomic" "syscall" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/log/v3" ) -var sigc chan os.Signal +var sigc atomic.Value func GetSigC(sig *chan os.Signal) { - sigc = *sig + sigc.Store(*sig) } // LogPanic - does log panic to logger and to /crashreports then stops the process @@ -22,7 +23,7 @@ func LogPanic() { } log.Error("catch panic", "err", panicResult, "stack", dbg.Stack()) - if sigc != nil { - sigc <- syscall.SIGINT + if sl := sigc.Load(); sl != nil { + sl.(chan os.Signal) <- syscall.SIGINT } } diff --git a/common/paths/paths.go b/common/paths/paths.go index 5b2bd1f69be..4e7792d1d5b 100644 --- a/common/paths/paths.go +++ b/common/paths/paths.go @@ -36,7 +36,7 @@ func DefaultDataDir() string { if xdgDataDir := os.Getenv("XDG_DATA_HOME"); xdgDataDir != "" { return filepath.Join(xdgDataDir, strings.ToLower(dirname)) } - return filepath.Join(home, ".local/share", strings.ToLower(dirname)) + return filepath.Join(home, ".local", "share", strings.ToLower(dirname)) } } // As we cannot guess a stable location, return empty and handle later diff --git a/common/prque/lazyqueue.go b/common/prque/lazyqueue.go index 0c8903851bb..9e51849b13f 100644 --- a/common/prque/lazyqueue.go +++ b/common/prque/lazyqueue.go @@ -164,7 +164,7 @@ func (q *LazyQueue) PopItem() interface{} { return i } -// Remove removes removes the item with the given index. +// Remove removes the item with the given index. func (q *LazyQueue) Remove(index int) interface{} { if index < 0 { return nil diff --git a/consensus/aura/aura.go b/consensus/aura/aura.go index e4dd33313d8..5cf0e17b4db 100644 --- a/consensus/aura/aura.go +++ b/consensus/aura/aura.go @@ -203,7 +203,7 @@ func (e *EpochManager) zoomToAfter(chain consensus.ChainHeaderReader, er *NonTra // / or transitions to. // / This will give the epoch that any children of this parent belong to. // / -// / The block corresponding the the parent hash must be stored already. +// / The block corresponding the parent hash must be stored already. // nolint func epochTransitionFor(chain consensus.ChainHeaderReader, e *NonTransactionalEpochReader, parentHash libcommon.Hash) (transition EpochTransition, ok bool) { //TODO: probably this version of func doesn't support non-canonical epoch transitions diff --git a/consensus/aura/auraabi/gen_block_reward.go b/consensus/aura/auraabi/gen_block_reward.go index 27d4fce7bec..4137b58f952 100644 --- a/consensus/aura/auraabi/gen_block_reward.go +++ b/consensus/aura/auraabi/gen_block_reward.go @@ -7,6 +7,9 @@ import ( "math/big" "strings" + "fmt" + "reflect" + ethereum "github.com/ledgerwatch/erigon" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/accounts/abi" @@ -191,3 +194,42 @@ func (_BlockReward *BlockRewardSession) Reward(benefactors []libcommon.Address, func (_BlockReward *BlockRewardTransactorSession) Reward(benefactors []libcommon.Address, kind []uint16) (types.Transaction, error) { return _BlockReward.Contract.Reward(&_BlockReward.TransactOpts, benefactors, kind) } + +// RewardParams is an auto generated read-only Go binding of transcaction calldata params +type RewardParams struct { + Param_benefactors []libcommon.Address + Param_kind []uint16 +} + +// Parse Reward method from calldata of a transaction +// +// Solidity: function reward(address[] benefactors, uint16[] kind) returns(address[], uint256[]) +func ParseReward(calldata []byte) (*RewardParams, error) { + if len(calldata) <= 4 { + return nil, fmt.Errorf("invalid calldata input") + } + + _abi, err := abi.JSON(strings.NewReader(BlockRewardABI)) + if err != nil { + return nil, fmt.Errorf("failed to get abi of registry metadata: %w", err) + } + + out, err := _abi.Methods["reward"].Inputs.Unpack(calldata[4:]) + if err != nil { + return nil, fmt.Errorf("failed to unpack reward params data: %w", err) + } + + var paramsResult = new(RewardParams) + value := reflect.ValueOf(paramsResult).Elem() + + if value.NumField() != len(out) { + return nil, fmt.Errorf("failed to match calldata with param field number") + } + + out0 := *abi.ConvertType(out[0], new([]libcommon.Address)).(*[]libcommon.Address) + out1 := *abi.ConvertType(out[1], new([]uint16)).(*[]uint16) + + return &RewardParams{ + Param_benefactors: out0, Param_kind: out1, + }, nil +} diff --git a/consensus/chain_header_reader_mock.go b/consensus/chain_header_reader_mock.go new file mode 100644 index 00000000000..e5312734761 --- /dev/null +++ b/consensus/chain_header_reader_mock.go @@ -0,0 +1,347 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/consensus (interfaces: ChainHeaderReader) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./chain_header_reader_mock.go -package=consensus . ChainHeaderReader +// + +// Package consensus is a generated GoMock package. +package consensus + +import ( + big "math/big" + reflect "reflect" + + chain "github.com/ledgerwatch/erigon-lib/chain" + common "github.com/ledgerwatch/erigon-lib/common" + types "github.com/ledgerwatch/erigon/core/types" + gomock "go.uber.org/mock/gomock" +) + +// MockChainHeaderReader is a mock of ChainHeaderReader interface. +type MockChainHeaderReader struct { + ctrl *gomock.Controller + recorder *MockChainHeaderReaderMockRecorder +} + +// MockChainHeaderReaderMockRecorder is the mock recorder for MockChainHeaderReader. +type MockChainHeaderReaderMockRecorder struct { + mock *MockChainHeaderReader +} + +// NewMockChainHeaderReader creates a new mock instance. +func NewMockChainHeaderReader(ctrl *gomock.Controller) *MockChainHeaderReader { + mock := &MockChainHeaderReader{ctrl: ctrl} + mock.recorder = &MockChainHeaderReaderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockChainHeaderReader) EXPECT() *MockChainHeaderReaderMockRecorder { + return m.recorder +} + +// BorSpan mocks base method. +func (m *MockChainHeaderReader) BorSpan(arg0 uint64) []byte { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BorSpan", arg0) + ret0, _ := ret[0].([]byte) + return ret0 +} + +// BorSpan indicates an expected call of BorSpan. +func (mr *MockChainHeaderReaderMockRecorder) BorSpan(arg0 any) *MockChainHeaderReaderBorSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BorSpan", reflect.TypeOf((*MockChainHeaderReader)(nil).BorSpan), arg0) + return &MockChainHeaderReaderBorSpanCall{Call: call} +} + +// MockChainHeaderReaderBorSpanCall wrap *gomock.Call +type MockChainHeaderReaderBorSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockChainHeaderReaderBorSpanCall) Return(arg0 []byte) *MockChainHeaderReaderBorSpanCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockChainHeaderReaderBorSpanCall) Do(f func(uint64) []byte) *MockChainHeaderReaderBorSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockChainHeaderReaderBorSpanCall) DoAndReturn(f func(uint64) []byte) *MockChainHeaderReaderBorSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Config mocks base method. +func (m *MockChainHeaderReader) Config() *chain.Config { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Config") + ret0, _ := ret[0].(*chain.Config) + return ret0 +} + +// Config indicates an expected call of Config. +func (mr *MockChainHeaderReaderMockRecorder) Config() *MockChainHeaderReaderConfigCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Config", reflect.TypeOf((*MockChainHeaderReader)(nil).Config)) + return &MockChainHeaderReaderConfigCall{Call: call} +} + +// MockChainHeaderReaderConfigCall wrap *gomock.Call +type MockChainHeaderReaderConfigCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockChainHeaderReaderConfigCall) Return(arg0 *chain.Config) *MockChainHeaderReaderConfigCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockChainHeaderReaderConfigCall) Do(f func() *chain.Config) *MockChainHeaderReaderConfigCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockChainHeaderReaderConfigCall) DoAndReturn(f func() *chain.Config) *MockChainHeaderReaderConfigCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// CurrentHeader mocks base method. +func (m *MockChainHeaderReader) CurrentHeader() *types.Header { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CurrentHeader") + ret0, _ := ret[0].(*types.Header) + return ret0 +} + +// CurrentHeader indicates an expected call of CurrentHeader. +func (mr *MockChainHeaderReaderMockRecorder) CurrentHeader() *MockChainHeaderReaderCurrentHeaderCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CurrentHeader", reflect.TypeOf((*MockChainHeaderReader)(nil).CurrentHeader)) + return &MockChainHeaderReaderCurrentHeaderCall{Call: call} +} + +// MockChainHeaderReaderCurrentHeaderCall wrap *gomock.Call +type MockChainHeaderReaderCurrentHeaderCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockChainHeaderReaderCurrentHeaderCall) Return(arg0 *types.Header) *MockChainHeaderReaderCurrentHeaderCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockChainHeaderReaderCurrentHeaderCall) Do(f func() *types.Header) *MockChainHeaderReaderCurrentHeaderCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockChainHeaderReaderCurrentHeaderCall) DoAndReturn(f func() *types.Header) *MockChainHeaderReaderCurrentHeaderCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FrozenBlocks mocks base method. +func (m *MockChainHeaderReader) FrozenBlocks() uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FrozenBlocks") + ret0, _ := ret[0].(uint64) + return ret0 +} + +// FrozenBlocks indicates an expected call of FrozenBlocks. +func (mr *MockChainHeaderReaderMockRecorder) FrozenBlocks() *MockChainHeaderReaderFrozenBlocksCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FrozenBlocks", reflect.TypeOf((*MockChainHeaderReader)(nil).FrozenBlocks)) + return &MockChainHeaderReaderFrozenBlocksCall{Call: call} +} + +// MockChainHeaderReaderFrozenBlocksCall wrap *gomock.Call +type MockChainHeaderReaderFrozenBlocksCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockChainHeaderReaderFrozenBlocksCall) Return(arg0 uint64) *MockChainHeaderReaderFrozenBlocksCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockChainHeaderReaderFrozenBlocksCall) Do(f func() uint64) *MockChainHeaderReaderFrozenBlocksCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockChainHeaderReaderFrozenBlocksCall) DoAndReturn(f func() uint64) *MockChainHeaderReaderFrozenBlocksCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetHeader mocks base method. +func (m *MockChainHeaderReader) GetHeader(arg0 common.Hash, arg1 uint64) *types.Header { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetHeader", arg0, arg1) + ret0, _ := ret[0].(*types.Header) + return ret0 +} + +// GetHeader indicates an expected call of GetHeader. +func (mr *MockChainHeaderReaderMockRecorder) GetHeader(arg0, arg1 any) *MockChainHeaderReaderGetHeaderCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetHeader", reflect.TypeOf((*MockChainHeaderReader)(nil).GetHeader), arg0, arg1) + return &MockChainHeaderReaderGetHeaderCall{Call: call} +} + +// MockChainHeaderReaderGetHeaderCall wrap *gomock.Call +type MockChainHeaderReaderGetHeaderCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockChainHeaderReaderGetHeaderCall) Return(arg0 *types.Header) *MockChainHeaderReaderGetHeaderCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockChainHeaderReaderGetHeaderCall) Do(f func(common.Hash, uint64) *types.Header) *MockChainHeaderReaderGetHeaderCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockChainHeaderReaderGetHeaderCall) DoAndReturn(f func(common.Hash, uint64) *types.Header) *MockChainHeaderReaderGetHeaderCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetHeaderByHash mocks base method. +func (m *MockChainHeaderReader) GetHeaderByHash(arg0 common.Hash) *types.Header { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetHeaderByHash", arg0) + ret0, _ := ret[0].(*types.Header) + return ret0 +} + +// GetHeaderByHash indicates an expected call of GetHeaderByHash. +func (mr *MockChainHeaderReaderMockRecorder) GetHeaderByHash(arg0 any) *MockChainHeaderReaderGetHeaderByHashCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetHeaderByHash", reflect.TypeOf((*MockChainHeaderReader)(nil).GetHeaderByHash), arg0) + return &MockChainHeaderReaderGetHeaderByHashCall{Call: call} +} + +// MockChainHeaderReaderGetHeaderByHashCall wrap *gomock.Call +type MockChainHeaderReaderGetHeaderByHashCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockChainHeaderReaderGetHeaderByHashCall) Return(arg0 *types.Header) *MockChainHeaderReaderGetHeaderByHashCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockChainHeaderReaderGetHeaderByHashCall) Do(f func(common.Hash) *types.Header) *MockChainHeaderReaderGetHeaderByHashCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockChainHeaderReaderGetHeaderByHashCall) DoAndReturn(f func(common.Hash) *types.Header) *MockChainHeaderReaderGetHeaderByHashCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetHeaderByNumber mocks base method. +func (m *MockChainHeaderReader) GetHeaderByNumber(arg0 uint64) *types.Header { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetHeaderByNumber", arg0) + ret0, _ := ret[0].(*types.Header) + return ret0 +} + +// GetHeaderByNumber indicates an expected call of GetHeaderByNumber. +func (mr *MockChainHeaderReaderMockRecorder) GetHeaderByNumber(arg0 any) *MockChainHeaderReaderGetHeaderByNumberCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetHeaderByNumber", reflect.TypeOf((*MockChainHeaderReader)(nil).GetHeaderByNumber), arg0) + return &MockChainHeaderReaderGetHeaderByNumberCall{Call: call} +} + +// MockChainHeaderReaderGetHeaderByNumberCall wrap *gomock.Call +type MockChainHeaderReaderGetHeaderByNumberCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockChainHeaderReaderGetHeaderByNumberCall) Return(arg0 *types.Header) *MockChainHeaderReaderGetHeaderByNumberCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockChainHeaderReaderGetHeaderByNumberCall) Do(f func(uint64) *types.Header) *MockChainHeaderReaderGetHeaderByNumberCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockChainHeaderReaderGetHeaderByNumberCall) DoAndReturn(f func(uint64) *types.Header) *MockChainHeaderReaderGetHeaderByNumberCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetTd mocks base method. +func (m *MockChainHeaderReader) GetTd(arg0 common.Hash, arg1 uint64) *big.Int { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetTd", arg0, arg1) + ret0, _ := ret[0].(*big.Int) + return ret0 +} + +// GetTd indicates an expected call of GetTd. +func (mr *MockChainHeaderReaderMockRecorder) GetTd(arg0, arg1 any) *MockChainHeaderReaderGetTdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTd", reflect.TypeOf((*MockChainHeaderReader)(nil).GetTd), arg0, arg1) + return &MockChainHeaderReaderGetTdCall{Call: call} +} + +// MockChainHeaderReaderGetTdCall wrap *gomock.Call +type MockChainHeaderReaderGetTdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockChainHeaderReaderGetTdCall) Return(arg0 *big.Int) *MockChainHeaderReaderGetTdCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockChainHeaderReaderGetTdCall) Do(f func(common.Hash, uint64) *big.Int) *MockChainHeaderReaderGetTdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockChainHeaderReaderGetTdCall) DoAndReturn(f func(common.Hash, uint64) *big.Int) *MockChainHeaderReaderGetTdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/consensus/consensus.go b/consensus/consensus.go index d9ba40fffc1..334b7f85a1f 100644 --- a/consensus/consensus.go +++ b/consensus/consensus.go @@ -34,7 +34,7 @@ import ( // ChainHeaderReader defines a small collection of methods needed to access the local // blockchain during header verification. // -//go:generate mockgen -destination=./mock/chain_header_reader_mock.go -package=mock . ChainHeaderReader +//go:generate mockgen -typed=true -destination=./chain_header_reader_mock.go -package=consensus . ChainHeaderReader type ChainHeaderReader interface { // Config retrieves the blockchain's chain configuration. Config() *chain.Config @@ -72,6 +72,7 @@ type ChainReader interface { HasBlock(hash libcommon.Hash, number uint64) bool BorEventsByBlock(hash libcommon.Hash, number uint64) []rlp.RawValue + BorStartEventID(hash libcommon.Hash, number uint64) uint64 } type SystemCall func(contract libcommon.Address, data []byte) ([]byte, error) diff --git a/consensus/misc/eip1559.go b/consensus/misc/eip1559.go index 97a452fdd11..2c3f576f56e 100644 --- a/consensus/misc/eip1559.go +++ b/consensus/misc/eip1559.go @@ -22,6 +22,7 @@ import ( "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/polygon/bor/borcfg" @@ -65,17 +66,19 @@ var Eip1559FeeCalculator eip1559Calculator type eip1559Calculator struct{} -func (f eip1559Calculator) CurrentFees(chainConfig *chain.Config, db kv.Getter) (baseFee uint64, blobFee uint64, minBlobGasPrice uint64, err error) { +func (f eip1559Calculator) CurrentFees(chainConfig *chain.Config, db kv.Getter) (baseFee, blobFee, minBlobGasPrice, blockGasLimit uint64, err error) { hash := rawdb.ReadHeadHeaderHash(db) - if hash == (common.Hash{}) { - return 0, 0, 0, fmt.Errorf("can't get head header hash") + if hash == (libcommon.Hash{}) { + return 0, 0, 0, 0, fmt.Errorf("can't get head header hash") } currentHeader, err := rawdb.ReadHeaderByHash(db, hash) - if err != nil { - return 0, 0, 0, err + return 0, 0, 0, 0, err + } + if currentHeader == nil { + return 0, 0, 0, 0, nil } if chainConfig != nil { @@ -94,7 +97,7 @@ func (f eip1559Calculator) CurrentFees(chainConfig *chain.Config, db kv.Getter) minBlobGasPrice = chainConfig.GetMinBlobGasPrice() - return baseFee, blobFee, minBlobGasPrice, nil + return baseFee, blobFee, minBlobGasPrice, currentHeader.GasLimit, nil } // CalcBaseFee calculates the basefee of the header. diff --git a/consensus/mock/chain_header_reader_mock.go b/consensus/mock/chain_header_reader_mock.go deleted file mode 100644 index 5131b49e374..00000000000 --- a/consensus/mock/chain_header_reader_mock.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/ledgerwatch/erigon/consensus (interfaces: ChainHeaderReader) - -// Package mock is a generated GoMock package. -package mock - -import ( - big "math/big" - reflect "reflect" - - gomock "github.com/golang/mock/gomock" - chain "github.com/ledgerwatch/erigon-lib/chain" - common "github.com/ledgerwatch/erigon-lib/common" - types "github.com/ledgerwatch/erigon/core/types" -) - -// MockChainHeaderReader is a mock of ChainHeaderReader interface. -type MockChainHeaderReader struct { - ctrl *gomock.Controller - recorder *MockChainHeaderReaderMockRecorder -} - -// MockChainHeaderReaderMockRecorder is the mock recorder for MockChainHeaderReader. -type MockChainHeaderReaderMockRecorder struct { - mock *MockChainHeaderReader -} - -// NewMockChainHeaderReader creates a new mock instance. -func NewMockChainHeaderReader(ctrl *gomock.Controller) *MockChainHeaderReader { - mock := &MockChainHeaderReader{ctrl: ctrl} - mock.recorder = &MockChainHeaderReaderMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockChainHeaderReader) EXPECT() *MockChainHeaderReaderMockRecorder { - return m.recorder -} - -// BorSpan mocks base method. -func (m *MockChainHeaderReader) BorSpan(arg0 uint64) []byte { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "BorSpan", arg0) - ret0, _ := ret[0].([]byte) - return ret0 -} - -// BorSpan indicates an expected call of BorSpan. -func (mr *MockChainHeaderReaderMockRecorder) BorSpan(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BorSpan", reflect.TypeOf((*MockChainHeaderReader)(nil).BorSpan), arg0) -} - -// Config mocks base method. -func (m *MockChainHeaderReader) Config() *chain.Config { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Config") - ret0, _ := ret[0].(*chain.Config) - return ret0 -} - -// Config indicates an expected call of Config. -func (mr *MockChainHeaderReaderMockRecorder) Config() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Config", reflect.TypeOf((*MockChainHeaderReader)(nil).Config)) -} - -// CurrentHeader mocks base method. -func (m *MockChainHeaderReader) CurrentHeader() *types.Header { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CurrentHeader") - ret0, _ := ret[0].(*types.Header) - return ret0 -} - -// CurrentHeader indicates an expected call of CurrentHeader. -func (mr *MockChainHeaderReaderMockRecorder) CurrentHeader() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CurrentHeader", reflect.TypeOf((*MockChainHeaderReader)(nil).CurrentHeader)) -} - -// FrozenBlocks mocks base method. -func (m *MockChainHeaderReader) FrozenBlocks() uint64 { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "FrozenBlocks") - ret0, _ := ret[0].(uint64) - return ret0 -} - -// FrozenBlocks indicates an expected call of FrozenBlocks. -func (mr *MockChainHeaderReaderMockRecorder) FrozenBlocks() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FrozenBlocks", reflect.TypeOf((*MockChainHeaderReader)(nil).FrozenBlocks)) -} - -// GetHeader mocks base method. -func (m *MockChainHeaderReader) GetHeader(arg0 common.Hash, arg1 uint64) *types.Header { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetHeader", arg0, arg1) - ret0, _ := ret[0].(*types.Header) - return ret0 -} - -// GetHeader indicates an expected call of GetHeader. -func (mr *MockChainHeaderReaderMockRecorder) GetHeader(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetHeader", reflect.TypeOf((*MockChainHeaderReader)(nil).GetHeader), arg0, arg1) -} - -// GetHeaderByHash mocks base method. -func (m *MockChainHeaderReader) GetHeaderByHash(arg0 common.Hash) *types.Header { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetHeaderByHash", arg0) - ret0, _ := ret[0].(*types.Header) - return ret0 -} - -// GetHeaderByHash indicates an expected call of GetHeaderByHash. -func (mr *MockChainHeaderReaderMockRecorder) GetHeaderByHash(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetHeaderByHash", reflect.TypeOf((*MockChainHeaderReader)(nil).GetHeaderByHash), arg0) -} - -// GetHeaderByNumber mocks base method. -func (m *MockChainHeaderReader) GetHeaderByNumber(arg0 uint64) *types.Header { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetHeaderByNumber", arg0) - ret0, _ := ret[0].(*types.Header) - return ret0 -} - -// GetHeaderByNumber indicates an expected call of GetHeaderByNumber. -func (mr *MockChainHeaderReaderMockRecorder) GetHeaderByNumber(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetHeaderByNumber", reflect.TypeOf((*MockChainHeaderReader)(nil).GetHeaderByNumber), arg0) -} - -// GetTd mocks base method. -func (m *MockChainHeaderReader) GetTd(arg0 common.Hash, arg1 uint64) *big.Int { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetTd", arg0, arg1) - ret0, _ := ret[0].(*big.Int) - return ret0 -} - -// GetTd indicates an expected call of GetTd. -func (mr *MockChainHeaderReaderMockRecorder) GetTd(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTd", reflect.TypeOf((*MockChainHeaderReader)(nil).GetTd), arg0, arg1) -} diff --git a/core/blockchain.go b/core/blockchain.go index 7b645b89b3d..11afdf9011a 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -18,16 +18,18 @@ package core import ( + "encoding/json" "fmt" + "slices" "time" "github.com/ledgerwatch/log/v3" "golang.org/x/crypto/sha3" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/cmp" + "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/metrics" "github.com/ledgerwatch/erigon-lib/opstack" "github.com/ledgerwatch/erigon/common/math" @@ -38,6 +40,8 @@ import ( "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/core/vm/evmtypes" + "github.com/ledgerwatch/erigon/eth/ethutils" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" "github.com/ledgerwatch/erigon/rlp" ) @@ -95,21 +99,17 @@ func ExecuteBlockEphemerally( gp := new(GasPool) gp.AddGas(block.GasLimit()).AddBlobGas(chainConfig.GetMaxBlobGasPerBlock()) - var ( - rejectedTxs []*RejectedTx - includedTxs types.Transactions - receipts types.Receipts - ) - if err := InitializeBlockExecution(engine, chainReader, block.Header(), chainConfig, ibs, logger); err != nil { return nil, err } + var rejectedTxs []*RejectedTx + includedTxs := make(types.Transactions, 0, block.Transactions().Len()) + receipts := make(types.Receipts, 0, block.Transactions().Len()) // Optimism Canyon misc.EnsureCreate2Deployer(chainConfig, header.Time, ibs) noop := state.NewNoopWriter() - //fmt.Printf("====txs processing start: %d====\n", block.NumberU64()) for i, tx := range block.Transactions() { ibs.SetTxContext(tx.Hash(), block.Hash(), i) writeTrace := false @@ -144,6 +144,10 @@ func ExecuteBlockEphemerally( receiptSha := types.DeriveSha(receipts) if !vmConfig.StatelessExec && chainConfig.IsByzantium(header.Number.Uint64()) && !vmConfig.NoReceipts && receiptSha != block.ReceiptHash() { + if dbg.LogHashMismatchReason() { + logReceipts(receipts, includedTxs, chainConfig, header, logger) + } + return nil, fmt.Errorf("mismatched receipt headers for block %d (%s != %s)", block.NumberU64(), receiptSha.Hex(), block.ReceiptHash().Hex()) } @@ -194,7 +198,7 @@ func ExecuteBlockEphemerally( stateSyncReceipt.Logs = blockLogs[len(logs):] // get state-sync logs from `state.Logs()` // fill the state sync with the correct information - types.DeriveFieldsForBorReceipt(stateSyncReceipt, block.Hash(), block.NumberU64(), receipts) + bortypes.DeriveFieldsForBorReceipt(stateSyncReceipt, block.Hash(), block.NumberU64(), receipts) stateSyncReceipt.Status = types.ReceiptStatusSuccessful } } @@ -205,6 +209,34 @@ func ExecuteBlockEphemerally( return execRs, nil } +func logReceipts(receipts types.Receipts, txns types.Transactions, cc *chain.Config, header *types.Header, logger log.Logger) { + if len(receipts) == 0 { + // no-op, can happen if vmConfig.NoReceipts=true or vmConfig.StatelessExec=true + return + } + + // note we do not return errors from this func since this is a debug-only + // informative feature that is best-effort and should not interfere with execution + if len(receipts) != len(txns) { + logger.Error("receipts and txns sizes differ", "receiptsLen", receipts.Len(), "txnsLen", txns.Len()) + return + } + + marshalled := make([]map[string]interface{}, 0, len(receipts)) + for i, receipt := range receipts { + txn := txns[i] + marshalled = append(marshalled, ethutils.MarshalReceipt(receipt, txn, cc, header, txn.Hash(), true)) + } + + result, err := json.Marshal(marshalled) + if err != nil { + logger.Error("marshalling error when logging receipts", "err", err) + return + } + + logger.Info("marshalled receipts", "result", string(result)) +} + func rlpHash(x interface{}) (h libcommon.Hash) { hw := sha3.NewLegacyKeccak256() rlp.Encode(hw, x) //nolint:errcheck diff --git a/core/chain_makers.go b/core/chain_makers.go index d1525a8d60c..dae90e98865 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -25,6 +25,7 @@ import ( "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/log/v3" @@ -34,7 +35,6 @@ import ( "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/turbo/trie" @@ -316,7 +316,7 @@ func GenerateChain(config *chain.Config, parent *types.Block, engine consensus.E var stateReader state.StateReader var stateWriter state.StateWriter - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") //agg := tx.(*temporal.Tx).Agg() //sd := agg.SharedDomains() @@ -332,7 +332,7 @@ func GenerateChain(config *chain.Config, parent *types.Block, engine consensus.E } txNum := -1 setBlockNum := func(blockNum uint64) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") //stateReader.(*state.StateReaderV4).SetBlockNum(blockNum) //stateWriter.(*state.StateWriterV4).SetBlockNum(blockNum) @@ -343,7 +343,7 @@ func GenerateChain(config *chain.Config, parent *types.Block, engine consensus.E } txNumIncrement := func() { txNum++ - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") //tx.(*temporal.Tx).Agg().SetTxNum(uint64(txNum)) //stateReader.(*state.StateReaderV4).SetTxNum(uint64(txNum)) @@ -390,7 +390,7 @@ func GenerateChain(config *chain.Config, parent *types.Block, engine consensus.E } var err error - b.header.Root, err = CalcHashRootForTests(tx, b.header, ethconfig.EnableHistoryV4InTest) + b.header.Root, err = CalcHashRootForTests(tx, b.header, config3.EnableHistoryV4InTest) if err != nil { return nil, nil, fmt.Errorf("call to CalcTrieRoot: %w", err) } @@ -661,4 +661,7 @@ func (cr *FakeChainReader) FrozenBlocks() uint64 func (cr *FakeChainReader) BorEventsByBlock(hash libcommon.Hash, number uint64) []rlp.RawValue { return nil } +func (cr *FakeChainReader) BorStartEventID(hash libcommon.Hash, number uint64) uint64 { + return 0 +} func (cr *FakeChainReader) BorSpan(spanId uint64) []byte { return nil } diff --git a/core/evm.go b/core/evm.go index 148e1ac07f6..3421f8a9a45 100644 --- a/core/evm.go +++ b/core/evm.go @@ -51,7 +51,14 @@ func NewEVMBlockContext(header *types.Header, blockHashFunc func(n uint64) libco var prevRandDao *libcommon.Hash if header.Difficulty.Cmp(merge.ProofOfStakeDifficulty) == 0 { // EIP-4399. We use ProofOfStakeDifficulty (i.e. 0) as a telltale of Proof-of-Stake blocks. - prevRandDao = &header.MixDigest + prevRandDao = new(libcommon.Hash) + *prevRandDao = header.MixDigest + } + + var excessBlobGas *uint64 + if header.ExcessBlobGas != nil { + excessBlobGas = new(uint64) + *excessBlobGas = *header.ExcessBlobGas } var transferFunc evmtypes.TransferFunc @@ -71,7 +78,7 @@ func NewEVMBlockContext(header *types.Header, blockHashFunc func(n uint64) libco BaseFee: &baseFee, GasLimit: header.GasLimit, PrevRanDao: prevRandDao, - ExcessBlobGas: header.ExcessBlobGas, + ExcessBlobGas: excessBlobGas, } } diff --git a/core/forkid/forkid.go b/core/forkid/forkid.go index 7e5202657cd..90e69a3530f 100644 --- a/core/forkid/forkid.go +++ b/core/forkid/forkid.go @@ -24,10 +24,10 @@ import ( "math" "math/big" "reflect" + "slices" "strings" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" diff --git a/core/forkid/forkid_test.go b/core/forkid/forkid_test.go index 179c2dd0e90..f9776ad8e8f 100644 --- a/core/forkid/forkid_test.go +++ b/core/forkid/forkid_test.go @@ -75,8 +75,10 @@ func TestCreation(t *testing.T) { {15049999, 1656586434, ID{Hash: checksumToBytes(0x20c327fc), Next: 15050000}}, // Last Arrow Glacier block {15050000, 1656586444, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 1681338455}}, // First Gray Glacier block {17034869, 1681338443, ID{Hash: checksumToBytes(0xf0afd0e3), Next: 1681338455}}, // Last pre-Shanghai block - {17034870, 1681338479, ID{Hash: checksumToBytes(0xdce96c2d), Next: 0}}, // First Shanghai block - {19000000, 1700000000, ID{Hash: checksumToBytes(0xdce96c2d), Next: 0}}, // Future Shanghai block (mock) + {17034870, 1681338479, ID{Hash: checksumToBytes(0xdce96c2d), Next: 1710338135}}, // First Shanghai block + {19426586, 1710338123, ID{Hash: checksumToBytes(0xdce96c2d), Next: 1710338135}}, // Last Shanghai block + {19426587, 1710338135, ID{Hash: checksumToBytes(0x9f3d2254), Next: 0}}, // First Cancun block + {20000000, 1800000000, ID{Hash: checksumToBytes(0x9f3d2254), Next: 0}}, // Future Cancun block (mock) }, }, // Goerli test cases @@ -108,8 +110,8 @@ func TestCreation(t *testing.T) { {1735371, 1661130108, ID{Hash: checksumToBytes(0xb96cbd13), Next: 1677557088}}, // First MergeNetsplit block {2990907, 1677557076, ID{Hash: checksumToBytes(0xb96cbd13), Next: 1677557088}}, // Last pre-Shanghai block {2990908, 1677557088, ID{Hash: checksumToBytes(0xf7f9bc08), Next: 1706655072}}, // First Shanghai block - {5198775, 1706655060, ID{Hash: checksumToBytes(0xf7f9bc08), Next: 1706655072}}, // Last Shanghai block (approx) - {5198776, 1706655072, ID{Hash: checksumToBytes(0x88cf81d9), Next: 0}}, // First Cancun block (approx) + {5187022, 1706655060, ID{Hash: checksumToBytes(0xf7f9bc08), Next: 1706655072}}, // Last Shanghai block + {5187023, 1706655072, ID{Hash: checksumToBytes(0x88cf81d9), Next: 0}}, // First Cancun block {8000000, 1800000000, ID{Hash: checksumToBytes(0x88cf81d9), Next: 0}}, // Future Cancun block (mock) }, }, @@ -133,7 +135,10 @@ func TestCreation(t *testing.T) { {19040000, 1636753580, ID{Hash: checksumToBytes(0x018479d3), Next: 1690889660}}, // First London block {21735000, 1650443255, ID{Hash: checksumToBytes(0x018479d3), Next: 1690889660}}, // First GIP-31 block {29242931, 1690889650, ID{Hash: checksumToBytes(0x018479d3), Next: 1690889660}}, // Last pre-Shanghai block - {29242932, 1690889660, ID{Hash: checksumToBytes(0x2efe91ba), Next: 0}}, // First Shanghai block + {29242932, 1690889660, ID{Hash: checksumToBytes(0x2efe91ba), Next: 1710181820}}, // First Shanghai block + {32880679, 1710181810, ID{Hash: checksumToBytes(0x2efe91ba), Next: 1710181820}}, // Last Shanghai block + {32880680, 1710181820, ID{Hash: checksumToBytes(0x1384dfc1), Next: 0}}, // First Cancun block + {40000000, 1800000000, ID{Hash: checksumToBytes(0x1384dfc1), Next: 0}}, // Future Cancun block (mock) }, }, // Chiado test cases @@ -144,8 +149,8 @@ func TestCreation(t *testing.T) { {0, 0, ID{Hash: checksumToBytes(0x50d39d7b), Next: 1684934220}}, {4100418, 1684934215, ID{Hash: checksumToBytes(0x50d39d7b), Next: 1684934220}}, // Last pre-Shanghai block {4100419, 1684934220, ID{Hash: checksumToBytes(0xa15a4252), Next: 1706724940}}, // First Shanghai block - {8102175, 1706724935, ID{Hash: checksumToBytes(0xa15a4252), Next: 1706724940}}, // Last Shanghai block (approx) - {8102176, 1706724940, ID{Hash: checksumToBytes(0x5fbc16bc), Next: 0}}, // First Cancun block (approx) + {8021277, 1706724930, ID{Hash: checksumToBytes(0xa15a4252), Next: 1706724940}}, // Last Shanghai block + {8021278, 1706724940, ID{Hash: checksumToBytes(0x5fbc16bc), Next: 0}}, // First Cancun block {10000000, 1800000000, ID{Hash: checksumToBytes(0x5fbc16bc), Next: 0}}, // Future Cancun block (mock) }, }, @@ -158,7 +163,8 @@ func TestCreation(t *testing.T) { {2722000, 0, ID{Hash: checksumToBytes(0x8647df30), Next: 13996000}}, // First Istanbul block {13996000, 0, ID{Hash: checksumToBytes(0x06cc1179), Next: 22640000}}, // First Berlin block {22640000, 0, ID{Hash: checksumToBytes(0x9adf950e), Next: 41874000}}, // First London block - {41874000, 0, ID{Hash: checksumToBytes(0x0c015a91), Next: 0}}, // First Agra block + {41874000, 0, ID{Hash: checksumToBytes(0x0c015a91), Next: 45648608}}, // First Agra block + {45648608, 0, ID{Hash: checksumToBytes(0x0f2316c1), Next: 0}}, // First Napoli block }, }, // Amoy test cases @@ -167,7 +173,7 @@ func TestCreation(t *testing.T) { params.AmoyGenesisHash, []testcase{ {0, 0, ID{Hash: checksumToBytes(0xbe06a477), Next: 73100}}, - {73100, 0, ID{Hash: checksumToBytes(0x135d2cd5), Next: 0}}, // First London, Jaipur, Delhi, Indore, Agra + {73100, 0, ID{Hash: checksumToBytes(0x135d2cd5), Next: 5423600}}, // First London, Jaipur, Delhi, Indore, Agra }, }, // Bor mainnet test cases @@ -179,7 +185,8 @@ func TestCreation(t *testing.T) { {3395000, 0, ID{Hash: checksumToBytes(0x27806576), Next: 14750000}}, // First Istanbul block {14750000, 0, ID{Hash: checksumToBytes(0x66e26adb), Next: 23850000}}, // First Berlin block {23850000, 0, ID{Hash: checksumToBytes(0x4f2f71cc), Next: 50523000}}, // First London block - {50523000, 0, ID{Hash: checksumToBytes(0xdc08865c), Next: 0}}, // First Agra block + {50523000, 0, ID{Hash: checksumToBytes(0xdc08865c), Next: 54876000}}, // First Agra block + {54876000, 0, ID{Hash: checksumToBytes(0xf097bc13), Next: 0}}, // First Napoli block }, }, } diff --git a/core/genesis_test.go b/core/genesis_test.go index c1f1cd46c3c..c2c534bce94 100644 --- a/core/genesis_test.go +++ b/core/genesis_test.go @@ -10,8 +10,8 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/ledgerwatch/erigon/core" - "github.com/ledgerwatch/erigon/core/state/temporal" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -26,7 +26,7 @@ import ( func TestGenesisBlockHashes(t *testing.T) { t.Parallel() logger := log.New() - _, db, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + _, db, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) check := func(network string) { genesis := core.GenesisBlockByChainName(network) tx, err := db.BeginRw(context.Background()) @@ -80,7 +80,7 @@ func TestGenesisBlockRoots(t *testing.T) { func TestCommitGenesisIdempotency(t *testing.T) { t.Parallel() logger := log.New() - _, db, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + _, db, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) tx, err := db.BeginRw(context.Background()) require.NoError(t, err) defer tx.Rollback() @@ -118,7 +118,7 @@ func TestAllocConstructor(t *testing.T) { }, } - historyV3, db, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + historyV3, db, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) _, _, err := core.CommitGenesisBlock(db, genSpec, "", logger) require.NoError(err) diff --git a/core/genesis_write.go b/core/genesis_write.go index 499500aee89..b858fb58e1f 100644 --- a/core/genesis_write.go +++ b/core/genesis_write.go @@ -25,13 +25,14 @@ import ( "fmt" "math/big" "reflect" + "slices" "sync" "github.com/c2h5oh/datasize" "github.com/ethereum-optimism/superchain-registry/superchain" "github.com/holiman/uint256" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/chain/networkname" @@ -49,7 +50,6 @@ import ( "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/crypto" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/turbo/trie" ) @@ -58,6 +58,7 @@ import ( type ChainOverrides struct { OverrideShanghaiTime *big.Int OverrideCancunTime *big.Int + OverridePragueTime *big.Int // optimism OverrideOptimismCanyonTime *big.Int OverrideOptimismEcotoneTime *big.Int @@ -119,6 +120,9 @@ func WriteGenesisBlock(tx kv.RwTx, genesis *types.Genesis, overrides *ChainOverr if overrides.OverrideCancunTime != nil { config.CancunTime = overrides.OverrideCancunTime } + if overrides.OverridePragueTime != nil { + config.PragueTime = overrides.OverridePragueTime + } if config.IsOptimism() && overrides.OverrideOptimismCanyonTime != nil { config.CanyonTime = overrides.OverrideOptimismCanyonTime // Shanghai hardfork is included in canyon hardfork @@ -250,7 +254,7 @@ func WriteGenesisState(g *types.Genesis, tx kv.RwTx, tmpDir string, logger log.L } var stateWriter state.StateWriter - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") //tx.(*temporal.Tx).Agg().SetTxNum(0) //stateWriter = state.NewWriterV4(tx.(kv.TemporalTx)) diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index 99d6ef75232..db48e2cfd66 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -29,6 +29,8 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/dbutils" "github.com/gballet/go-verkle" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/cmp" @@ -37,7 +39,6 @@ import ( "github.com/ledgerwatch/erigon-lib/common/length" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" - "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/ethdb/cbor" @@ -147,6 +148,8 @@ func WriteHeaderNumber(db kv.Putter, hash common.Hash, number uint64) error { } // ReadHeadHeaderHash retrieves the hash of the current canonical head header. +// It is updated in stage_headers, updateForkChoice. +// See: ReadHeadBlockHash func ReadHeadHeaderHash(db kv.Getter) common.Hash { data, err := db.GetOne(kv.HeadHeaderKey, []byte(kv.HeadHeaderKey)) if err != nil { @@ -159,6 +162,8 @@ func ReadHeadHeaderHash(db kv.Getter) common.Hash { } // WriteHeadHeaderHash stores the hash of the current canonical head header. +// It is updated in stage_headers, updateForkChoice. +// See: WriteHeadBlockHash func WriteHeadHeaderHash(db kv.Putter, hash common.Hash) error { if err := db.Put(kv.HeadHeaderKey, []byte(kv.HeadHeaderKey), hash.Bytes()); err != nil { return fmt.Errorf("failed to store last header's hash: %w", err) @@ -166,7 +171,9 @@ func WriteHeadHeaderHash(db kv.Putter, hash common.Hash) error { return nil } -// ReadHeadBlockHash retrieves the hash of the current canonical head block. +// ReadHeadBlockHash retrieves the hash of the current canonical head header for which its block body is known. +// It is updated in stage_finish. +// See: kv.HeadBlockKey func ReadHeadBlockHash(db kv.Getter) common.Hash { data, err := db.GetOne(kv.HeadBlockKey, []byte(kv.HeadBlockKey)) if err != nil { @@ -178,7 +185,9 @@ func ReadHeadBlockHash(db kv.Getter) common.Hash { return common.BytesToHash(data) } -// WriteHeadBlockHash stores the head block's hash. +// WriteHeadBlockHash stores the hash of the current canonical head header for which its block body is known. +// It is updated in stage_finish. +// See: kv.HeadBlockKey func WriteHeadBlockHash(db kv.Putter, hash common.Hash) { if err := db.Put(kv.HeadBlockKey, []byte(kv.HeadBlockKey), hash.Bytes()); err != nil { log.Crit("Failed to store last block's hash", "err", err) @@ -276,6 +285,9 @@ func ReadCurrentBlockNumber(db kv.Getter) *uint64 { return ReadHeaderNumber(db, headHash) } +// ReadCurrentHeader reads the current canonical head header. +// It is updated in stage_headers, updateForkChoice. +// See: ReadHeadHeaderHash, ReadCurrentHeaderHavingBody func ReadCurrentHeader(db kv.Getter) *types.Header { headHash := ReadHeadHeaderHash(db) headNumber := ReadHeaderNumber(db, headHash) @@ -285,6 +297,18 @@ func ReadCurrentHeader(db kv.Getter) *types.Header { return ReadHeader(db, headHash, *headNumber) } +// ReadCurrentHeaderHavingBody reads the current canonical head header for which its block body is known. +// It is updated in stage_finish. +// See: ReadHeadBlockHash, ReadCurrentHeader +func ReadCurrentHeaderHavingBody(db kv.Getter) *types.Header { + headHash := ReadHeadBlockHash(db) + headNumber := ReadHeaderNumber(db, headHash) + if headNumber == nil { + return nil + } + return ReadHeader(db, headHash, *headNumber) +} + func ReadHeadersByNumber(db kv.Tx, number uint64) ([]*types.Header, error) { var res []*types.Header c, err := db.Cursor(kv.Headers) @@ -416,7 +440,7 @@ func CanonicalTransactions(db kv.Getter, baseTxId uint64, amount uint32) ([]type i := uint32(0) if err := db.ForAmount(kv.EthTx, hexutility.EncodeTs(baseTxId), amount, func(k, v []byte) error { var decodeErr error - if txs[i], decodeErr = types.UnmarshalTransactionFromBinary(v); decodeErr != nil { + if txs[i], decodeErr = types.UnmarshalTransactionFromBinary(v, false /* blobTxnsAreWrappedWithBlobs */); decodeErr != nil { return decodeErr } i++ @@ -799,6 +823,11 @@ func ReadRawReceipts(db kv.Tx, blockNum uint64) types.Receipts { log.Error("logs fetching failed", "err", err) return nil } + defer func() { + if casted, ok := it.(kv.Closer); ok { + casted.Close() + } + }() for it.HasNext() { k, v, err := it.Next() if err != nil { @@ -914,7 +943,7 @@ func AppendReceipts(tx kv.StatelessWriteTx, blockNumber uint64, receipts types.R return nil } -// TruncateReceipts removes all receipt for given block number or newer +// TruncateReceipts removes all receipt for given block number or newer - used for Unwind func TruncateReceipts(db kv.RwTx, number uint64) error { if err := db.ForEach(kv.Receipts, hexutility.EncodeTs(number), func(k, _ []byte) error { return db.Delete(kv.Receipts, k) @@ -1066,65 +1095,6 @@ func PruneBlocks(tx kv.RwTx, blockTo uint64, blocksDeleteLimit int) error { return nil } -// PruneBorBlocks - delete [1, to) old blocks after moving it to snapshots. -// keeps genesis in db: [1, to) -// doesn't change sequences of kv.EthTx and kv.NonCanonicalTxs -// doesn't delete Receipts, Senders, Canonical markers, TotalDifficulty -func PruneBorBlocks(tx kv.RwTx, blockTo uint64, blocksDeleteLimit int, spanIDAt func(number uint64) uint64) error { - c, err := tx.Cursor(kv.BorEventNums) - if err != nil { - return err - } - defer c.Close() - var blockNumBytes [8]byte - binary.BigEndian.PutUint64(blockNumBytes[:], blockTo) - k, v, err := c.Seek(blockNumBytes[:]) - if err != nil { - return err - } - var eventIdTo uint64 = math.MaxUint64 - if k != nil { - eventIdTo = binary.BigEndian.Uint64(v) - } - c1, err := tx.RwCursor(kv.BorEvents) - if err != nil { - return err - } - defer c1.Close() - counter := blocksDeleteLimit - for k, _, err = c1.First(); err == nil && k != nil && counter > 0; k, _, err = c1.Next() { - eventId := binary.BigEndian.Uint64(k) - if eventId >= eventIdTo { - break - } - if err = c1.DeleteCurrent(); err != nil { - return err - } - counter-- - } - if err != nil { - return err - } - firstSpanToKeep := spanIDAt(blockTo) - c2, err := tx.RwCursor(kv.BorSpans) - if err != nil { - return err - } - defer c2.Close() - counter = blocksDeleteLimit - for k, _, err := c2.First(); err == nil && k != nil && counter > 0; k, _, err = c2.Next() { - spanId := binary.BigEndian.Uint64(k) - if spanId >= firstSpanToKeep { - break - } - if err = c2.DeleteCurrent(); err != nil { - return err - } - counter-- - } - return nil -} - func TruncateCanonicalChain(ctx context.Context, db kv.RwTx, from uint64) error { return db.ForEach(kv.HeaderCanonical, hexutility.EncodeTs(from), func(k, _ []byte) error { return db.Delete(kv.HeaderCanonical, k) @@ -1216,6 +1186,17 @@ func ReadHeaderByNumber(db kv.Getter, number uint64) *types.Header { return ReadHeader(db, hash, number) } +func ReadFirstNonGenesisHeaderNumber(tx kv.Tx) (uint64, bool, error) { + v, err := rawdbv3.SecondKey(tx, kv.Headers) + if err != nil { + return 0, false, err + } + if len(v) == 0 { + return 0, false, nil + } + return binary.BigEndian.Uint64(v), true, nil +} + func ReadHeaderByHash(db kv.Getter, hash common.Hash) (*types.Header, error) { number := ReadHeaderNumber(db, hash) if number == nil { diff --git a/core/rawdb/blockio/block_writer.go b/core/rawdb/blockio/block_writer.go index 096f1dd0fac..52838b47fd1 100644 --- a/core/rawdb/blockio/block_writer.go +++ b/core/rawdb/blockio/block_writer.go @@ -3,6 +3,8 @@ package blockio import ( "context" "encoding/binary" + + "github.com/ledgerwatch/erigon-lib/kv/backup" "github.com/ledgerwatch/erigon-lib/kv/dbutils" "github.com/ledgerwatch/erigon-lib/common" @@ -11,7 +13,7 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" "github.com/ledgerwatch/erigon/core/rawdb" - "github.com/ledgerwatch/erigon/turbo/backup" + "github.com/ledgerwatch/erigon/polygon/bor/bordb" "github.com/ledgerwatch/log/v3" ) @@ -114,6 +116,6 @@ func (w *BlockWriter) PruneBlocks(ctx context.Context, tx kv.RwTx, blockTo uint6 // keeps genesis in db // doesn't change sequences of kv.EthTx and kv.NonCanonicalTxs // doesn't delete Receipts, Senders, Canonical markers, TotalDifficulty -func (w *BlockWriter) PruneBorBlocks(ctx context.Context, tx kv.RwTx, blockTo uint64, blocksDeleteLimit int, spanIDAt func(number uint64) uint64) error { - return rawdb.PruneBorBlocks(tx, blockTo, blocksDeleteLimit, spanIDAt) +func (w *BlockWriter) PruneBorBlocks(ctx context.Context, tx kv.RwTx, blockTo uint64, blocksDeleteLimit int, SpanIdAt func(number uint64) uint64) error { + return bordb.PruneBorBlocks(tx, blockTo, blocksDeleteLimit, SpanIdAt) } diff --git a/core/rawdb/bor_receipts.go b/core/rawdb/bor_receipts.go index d05c25f1a44..08f5fad6504 100644 --- a/core/rawdb/bor_receipts.go +++ b/core/rawdb/bor_receipts.go @@ -2,28 +2,27 @@ package rawdb import ( "bytes" - "errors" "fmt" - "github.com/ledgerwatch/erigon-lib/kv/dbutils" "math/big" + "github.com/ledgerwatch/log/v3" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/log/v3" - + "github.com/ledgerwatch/erigon-lib/kv/dbutils" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/ethdb/cbor" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" "github.com/ledgerwatch/erigon/rlp" ) var ( // bor receipt key - borReceiptKey = types.BorReceiptKey + borReceiptKey = bortypes.BorReceiptKey ) -// HasBorReceipt verifies the existence of all block receipt belonging -// to a block. +// HasBorReceipts verifies the existence of all block receipt belonging to a block. func HasBorReceipts(db kv.Has, number uint64) bool { if has, err := db.Has(kv.BorReceipts, borReceiptKey(number)); !has || err != nil { return false @@ -80,16 +79,18 @@ func ReadBorReceipt(db kv.Tx, blockHash libcommon.Hash, blockNumber uint64, rece } } - types.DeriveFieldsForBorReceipt(borReceipt, blockHash, blockNumber, receipts) + bortypes.DeriveFieldsForBorReceipt(borReceipt, blockHash, blockNumber, receipts) return borReceipt, nil } -// WriteBorReceipt stores all the bor receipt belonging to a block (storing the state sync recipt and log). -func WriteBorReceipt(tx kv.RwTx, hash libcommon.Hash, number uint64, borReceipt *types.Receipt) error { +// WriteBorReceipt stores all the bor receipt belonging to a block (storing the state sync receipt and log). +func WriteBorReceipt(tx kv.RwTx, number uint64, borReceipt *types.Receipt) error { // Convert the bor receipt into their storage form and serialize them buf := bytes.NewBuffer(make([]byte, 0, 1024)) - cbor.Marshal(buf, borReceipt.Logs) + if err := cbor.Marshal(buf, borReceipt.Logs); err != nil { + return err + } if err := tx.Append(kv.Log, dbutils.LogKey(number, uint32(borReceipt.TransactionIndex)), buf.Bytes()); err != nil { return err } @@ -107,63 +108,6 @@ func WriteBorReceipt(tx kv.RwTx, hash libcommon.Hash, number uint64, borReceipt return nil } -/* -// DeleteBorReceipt removes receipt data associated with a block hash. -func DeleteBorReceipt(tx kv.RwTx, hash libcommon.Hash, number uint64) { - key := borReceiptKey(number) - - // we delete Bor Receipt log too - borReceipt, err := ReadBorReceipt(tx, number) - if err != nil { - log.Error("Failted to read bor receipt", "err", err) - } - if borReceipt != nil { - if err := tx.Delete(kv.Log, dbutils.LogKey(number, uint32(borReceipt.TransactionIndex))); err != nil { - log.Error("Failed to delete bor log", "err", err) - } - } - - if err := tx.Delete(kv.BorReceipts, key); err != nil { - log.Error("Failed to delete bor receipt", "err", err) - } -} - -// ReadBorTransactionWithBlockHash retrieves a specific bor (fake) transaction by tx hash and block hash, along with -// its added positional metadata. -func ReadBorTransactionWithBlockHash(db kv.Tx, borTxHash libcommon.Hash, blockHash libcommon.Hash) (*types.Transaction, libcommon.Hash, uint64, uint64, error) { - blockNumber, err := ReadTxLookupEntry(db, borTxHash) - if err != nil { - return nil, libcommon.Hash{}, 0, 0, err - } - if blockNumber == nil { - return nil, libcommon.Hash{}, 0, 0, errors.New("missing block number") - } - - bodyForStorage, err := ReadStorageBody(db, blockHash, *blockNumber) - if err != nil { - return nil, libcommon.Hash{}, 0, 0, nil - } - - var tx types.Transaction = types.NewBorTransaction() - return &tx, blockHash, *blockNumber, uint64(bodyForStorage.TxAmount), nil -} -*/ - -// ReadBorTransaction returns a specific bor (fake) transaction by txn hash, along with -// its added positional metadata. -func ReadBorTransaction(db kv.Tx, borTxHash libcommon.Hash) (types.Transaction, error) { - blockNumber, err := ReadBorTxLookupEntry(db, borTxHash) - if err != nil { - return nil, err - } - if blockNumber == nil { - return nil, errors.New("missing block number") - } - - borTx, err := computeBorTransactionForBlockNumber(db, *blockNumber) - return borTx, err -} - func ReadBorTxLookupEntry(db kv.Getter, borTxHash libcommon.Hash) (*uint64, error) { blockNumBytes, err := db.GetOne(kv.BorTxLookup, borTxHash.Bytes()) if err != nil { @@ -177,25 +121,13 @@ func ReadBorTxLookupEntry(db kv.Getter, borTxHash libcommon.Hash) (*uint64, erro return &blockNum, nil } -func computeBorTransactionForBlockNumber(db kv.Tx, blockNumber uint64) (types.Transaction, error) { - blockHash, err := ReadCanonicalHash(db, blockNumber) - if err != nil { - return nil, err - } - if blockHash == (libcommon.Hash{}) { - return nil, errors.New("missing block hash") - } - - return types.NewBorTransaction(), nil -} - // ReadBorTransactionForBlock retrieves a specific bor (fake) transaction associated with a block, along with // its added positional metadata. func ReadBorTransactionForBlock(db kv.Tx, blockNum uint64) types.Transaction { if !HasBorReceipts(db, blockNum) { return nil } - return types.NewBorTransaction() + return bortypes.NewBorTransaction() } // TruncateBorReceipts removes all bor receipt for given block number or newer diff --git a/core/rawdb/rawdbhelpers/rawdbhelpers.go b/core/rawdb/rawdbhelpers/rawdbhelpers.go index 195c3950810..ee8ecd8c79e 100644 --- a/core/rawdb/rawdbhelpers/rawdbhelpers.go +++ b/core/rawdb/rawdbhelpers/rawdbhelpers.go @@ -3,8 +3,8 @@ package rawdbhelpers import ( "encoding/binary" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon/eth/ethconfig" ) func IdxStepsCountV3(tx kv.Tx) float64 { @@ -14,7 +14,7 @@ func IdxStepsCountV3(tx kv.Tx) float64 { fstTxNum := binary.BigEndian.Uint64(fst) lstTxNum := binary.BigEndian.Uint64(lst) - return float64(lstTxNum-fstTxNum) / float64(ethconfig.HistoryV3AggregationStep) + return float64(lstTxNum-fstTxNum) / float64(config3.HistoryV3AggregationStep) } return 0 } diff --git a/core/rawdb/rawdbreset/reset_stages.go b/core/rawdb/rawdbreset/reset_stages.go index b791e0e84cf..56a3bd4385d 100644 --- a/core/rawdb/rawdbreset/reset_stages.go +++ b/core/rawdb/rawdbreset/reset_stages.go @@ -4,9 +4,12 @@ import ( "context" "fmt" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/backup" "github.com/ledgerwatch/erigon-lib/kv/kvcfg" "github.com/ledgerwatch/erigon-lib/state" "github.com/ledgerwatch/erigon/consensus" @@ -15,9 +18,7 @@ import ( "github.com/ledgerwatch/erigon/core/rawdb/blockio" "github.com/ledgerwatch/erigon/eth/stagedsync" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" - "github.com/ledgerwatch/erigon/turbo/backup" "github.com/ledgerwatch/erigon/turbo/services" - "github.com/ledgerwatch/log/v3" ) func ResetState(db kv.RwDB, ctx context.Context, chain string, tmpDir string, logger log.Logger) error { @@ -50,7 +51,7 @@ func ResetState(db kv.RwDB, ctx context.Context, chain string, tmpDir string, lo return nil } -func ResetBlocks(tx kv.RwTx, db kv.RoDB, agg *state.AggregatorV3, +func ResetBlocks(tx kv.RwTx, db kv.RoDB, agg *state.Aggregator, br services.FullBlockReader, bw *blockio.BlockWriter, dirs datadir.Dirs, cc chain.Config, engine consensus.Engine, logger log.Logger) error { // keep Genesis if err := rawdb.TruncateBlocks(context.Background(), tx, 1); err != nil { @@ -87,7 +88,7 @@ func ResetBlocks(tx kv.RwTx, db kv.RoDB, agg *state.AggregatorV3, } if br.FreezingCfg().Enabled && br.FrozenBlocks() > 0 { - if err := stagedsync.FillDBFromSnapshots("fillind_db_from_snapshots", context.Background(), tx, dirs, br, agg, logger); err != nil { + if err := stagedsync.FillDBFromSnapshots("filling_db_from_snapshots", context.Background(), tx, dirs, br, agg, logger); err != nil { return err } _ = stages.SaveStageProgress(tx, stages.Snapshots, br.FrozenBlocks()) @@ -241,6 +242,13 @@ func Reset(ctx context.Context, db kv.RwDB, stagesList ...stages.SyncStage) erro return nil }) } + +func ResetPruneAt(ctx context.Context, db kv.RwDB, stage stages.SyncStage) error { + return db.Update(ctx, func(tx kv.RwTx) error { + return stages.SaveStagePruneProgress(tx, stage, 0) + }) +} + func Warmup(ctx context.Context, db kv.RwDB, lvl log.Lvl, stList ...stages.SyncStage) error { for _, st := range stList { for _, tbl := range Tables[st] { diff --git a/core/rlp_test.go b/core/rlp_test.go index 0d03b0cdd75..cef7de0726f 100644 --- a/core/rlp_test.go +++ b/core/rlp_test.go @@ -24,7 +24,7 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon/core/state/temporal" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/ledgerwatch/log/v3" "golang.org/x/crypto/sha3" @@ -37,7 +37,7 @@ import ( ) func getBlock(tb testing.TB, transactions int, uncles int, dataSize int, tmpDir string, logger log.Logger) *types.Block { - _, db, _ := temporal.NewTestDB(tb, datadir.New(tmpDir), nil) + _, db, _ := temporaltest.NewTestDB(tb, datadir.New(tmpDir)) var ( aa = libcommon.HexToAddress("0x000000000000000000000000000000000000aaaa") // Generate a canonical chain to act as the main dataset diff --git a/core/snaptype/block_types.go b/core/snaptype/block_types.go new file mode 100644 index 00000000000..7e3ed775e70 --- /dev/null +++ b/core/snaptype/block_types.go @@ -0,0 +1,332 @@ +package snaptype + +import ( + "context" + "encoding/binary" + "errors" + "fmt" + "path/filepath" + + "github.com/holiman/uint256" + "github.com/ledgerwatch/erigon-lib/chain" + "github.com/ledgerwatch/erigon-lib/chain/networkname" + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/background" + "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" + "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" + types2 "github.com/ledgerwatch/erigon-lib/types" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/crypto" + "github.com/ledgerwatch/erigon/crypto/cryptopool" + "github.com/ledgerwatch/erigon/rlp" + "github.com/ledgerwatch/log/v3" +) + +func init() { + ethereumTypes := append(BlockSnapshotTypes, snaptype.CaplinSnapshotTypes...) + + snapcfg.RegisterKnownTypes(networkname.MainnetChainName, ethereumTypes) + snapcfg.RegisterKnownTypes(networkname.SepoliaChainName, ethereumTypes) + snapcfg.RegisterKnownTypes(networkname.GoerliChainName, ethereumTypes) + snapcfg.RegisterKnownTypes(networkname.GnosisChainName, ethereumTypes) + snapcfg.RegisterKnownTypes(networkname.ChiadoChainName, ethereumTypes) +} + +var Enums = struct { + snaptype.Enums + Headers, + Bodies, + Transactions snaptype.Enum +}{ + Enums: snaptype.Enums{}, + Headers: snaptype.MinCoreEnum, + Bodies: snaptype.MinCoreEnum + 1, + Transactions: snaptype.MinCoreEnum + 2, +} + +var Indexes = struct { + HeaderHash, + BodyHash, + TxnHash, + TxnHash2BlockNum snaptype.Index +}{ + HeaderHash: snaptype.Index{Name: "headers"}, + BodyHash: snaptype.Index{Name: "bodies"}, + TxnHash: snaptype.Index{Name: "transactions"}, + TxnHash2BlockNum: snaptype.Index{Name: "transactions-to-block", Offset: 1}, +} + +var ( + Headers = snaptype.RegisterType( + Enums.Headers, + "headers", + snaptype.Versions{ + Current: 1, //2, + MinSupported: 1, + }, + nil, + []snaptype.Index{Indexes.HeaderHash}, + snaptype.IndexBuilderFunc( + func(ctx context.Context, info snaptype.FileInfo, salt uint32, _ *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + hasher := crypto.NewKeccakState() + defer cryptopool.ReturnToPoolKeccak256(hasher) + var h common.Hash + if err := snaptype.BuildIndex(ctx, info, salt, info.From, tmpDir, log.LvlDebug, p, func(idx *recsplit.RecSplit, i, offset uint64, word []byte) error { + if p != nil { + p.Processed.Add(1) + } + + headerRlp := word[1:] + hasher.Reset() + hasher.Write(headerRlp) + hasher.Read(h[:]) + if err := idx.AddKey(h[:], offset); err != nil { + return err + } + return nil + }, logger); err != nil { + return fmt.Errorf("HeadersIdx: %w", err) + } + return nil + }), + ) + + Bodies = snaptype.RegisterType( + Enums.Bodies, + "bodies", + snaptype.Versions{ + Current: 1, //2, + MinSupported: 1, + }, + nil, + []snaptype.Index{Indexes.BodyHash}, + snaptype.IndexBuilderFunc( + func(ctx context.Context, info snaptype.FileInfo, salt uint32, _ *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + num := make([]byte, 8) + + if err := snaptype.BuildIndex(ctx, info, salt, info.From, tmpDir, log.LvlDebug, p, func(idx *recsplit.RecSplit, i, offset uint64, _ []byte) error { + if p != nil { + p.Processed.Add(1) + } + n := binary.PutUvarint(num, i) + if err := idx.AddKey(num[:n], offset); err != nil { + return err + } + return nil + }, logger); err != nil { + return fmt.Errorf("can't index %s: %w", info.Name(), err) + } + return nil + }), + ) + + Transactions = snaptype.RegisterType( + Enums.Transactions, + "transactions", + snaptype.Versions{ + Current: 1, //2, + MinSupported: 1, + }, + nil, + []snaptype.Index{Indexes.TxnHash, Indexes.TxnHash2BlockNum}, + snaptype.IndexBuilderFunc( + func(ctx context.Context, sn snaptype.FileInfo, salt uint32, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + defer func() { + if rec := recover(); rec != nil { + err = fmt.Errorf("index panic: at=%s, %v, %s", sn.Name(), rec, dbg.Stack()) + } + }() + firstBlockNum := sn.From + + bodiesSegment, err := seg.NewDecompressor(sn.As(Bodies).Path) + if err != nil { + return fmt.Errorf("can't open %s for indexing: %w", sn.As(Bodies).Name(), err) + } + defer bodiesSegment.Close() + + firstTxID, expectedCount, err := txsAmountBasedOnBodiesSnapshots(bodiesSegment, sn.Len()-1) + if err != nil { + return err + } + + d, err := seg.NewDecompressor(sn.Path) + if err != nil { + return fmt.Errorf("can't open %s for indexing: %w", sn.Path, err) + } + defer d.Close() + if d.Count() != expectedCount { + return fmt.Errorf("TransactionsIdx: at=%d-%d, pre index building, expect: %d, got %d", sn.From, sn.To, expectedCount, d.Count()) + } + + if p != nil { + name := sn.Name() + p.Name.Store(&name) + p.Total.Store(uint64(d.Count() * 2)) + } + + txnHashIdx, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ + KeyCount: d.Count(), + + Enums: true, + LessFalsePositives: true, + + BucketSize: 2000, + LeafSize: 8, + TmpDir: tmpDir, + IndexFile: filepath.Join(sn.Dir(), sn.Type.IdxFileName(sn.Version, sn.From, sn.To)), + BaseDataID: firstTxID, + }, logger) + if err != nil { + return err + } + + txnHash2BlockNumIdx, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ + KeyCount: d.Count(), + Enums: false, + BucketSize: 2000, + LeafSize: 8, + TmpDir: tmpDir, + IndexFile: filepath.Join(sn.Dir(), sn.Type.IdxFileName(sn.Version, sn.From, sn.To, Indexes.TxnHash2BlockNum)), + BaseDataID: firstBlockNum, + }, logger) + if err != nil { + return err + } + txnHashIdx.LogLvl(log.LvlDebug) + txnHash2BlockNumIdx.LogLvl(log.LvlDebug) + + chainId, _ := uint256.FromBig(chainConfig.ChainID) + + parseCtx := types2.NewTxParseContext(*chainId) + parseCtx.WithSender(false) + slot := types2.TxSlot{} + bodyBuf, word := make([]byte, 0, 4096), make([]byte, 0, 4096) + + defer d.EnableMadvNormal().DisableReadAhead() + defer bodiesSegment.EnableMadvNormal().DisableReadAhead() + + for { + g, bodyGetter := d.MakeGetter(), bodiesSegment.MakeGetter() + var i, offset, nextPos uint64 + blockNum := firstBlockNum + body := &types.BodyForStorage{} + + bodyBuf, _ = bodyGetter.Next(bodyBuf[:0]) + if err := rlp.DecodeBytes(bodyBuf, body); err != nil { + return err + } + + for g.HasNext() { + if p != nil { + p.Processed.Add(1) + } + + word, nextPos = g.Next(word[:0]) + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + for body.BaseTxId+uint64(body.TxAmount) <= firstTxID+i { // skip empty blocks + if !bodyGetter.HasNext() { + return fmt.Errorf("not enough bodies") + } + + bodyBuf, _ = bodyGetter.Next(bodyBuf[:0]) + if err := rlp.DecodeBytes(bodyBuf, body); err != nil { + return err + } + + blockNum++ + } + + firstTxByteAndlengthOfAddress := 21 + isSystemTx := len(word) == 0 + if isSystemTx { // system-txs hash:pad32(txnID) + slot.IDHash = common.Hash{} + binary.BigEndian.PutUint64(slot.IDHash[:], firstTxID+i) + } else { + if _, err = parseCtx.ParseTransaction(word[firstTxByteAndlengthOfAddress:], 0, &slot, nil, true /* hasEnvelope */, false /* wrappedWithBlobs */, nil /* validateHash */); err != nil { + return fmt.Errorf("ParseTransaction: %w, blockNum: %d, i: %d", err, blockNum, i) + } + } + + if err := txnHashIdx.AddKey(slot.IDHash[:], offset); err != nil { + return err + } + if err := txnHash2BlockNumIdx.AddKey(slot.IDHash[:], blockNum); err != nil { + return err + } + + i++ + offset = nextPos + } + + if int(i) != expectedCount { + return fmt.Errorf("TransactionsIdx: at=%d-%d, post index building, expect: %d, got %d", sn.From, sn.To, expectedCount, i) + } + + if err := txnHashIdx.Build(ctx); err != nil { + if errors.Is(err, recsplit.ErrCollision) { + logger.Warn("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) + txnHashIdx.ResetNextSalt() + txnHash2BlockNumIdx.ResetNextSalt() + continue + } + return fmt.Errorf("txnHashIdx: %w", err) + } + if err := txnHash2BlockNumIdx.Build(ctx); err != nil { + if errors.Is(err, recsplit.ErrCollision) { + logger.Warn("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) + txnHashIdx.ResetNextSalt() + txnHash2BlockNumIdx.ResetNextSalt() + continue + } + return fmt.Errorf("txnHash2BlockNumIdx: %w", err) + } + + return nil + } + }), + ) + + BlockSnapshotTypes = []snaptype.Type{Headers, Bodies, Transactions} +) + +func txsAmountBasedOnBodiesSnapshots(bodiesSegment *seg.Decompressor, len uint64) (firstTxID uint64, expectedCount int, err error) { + gg := bodiesSegment.MakeGetter() + buf, _ := gg.Next(nil) + firstBody := &types.BodyForStorage{} + if err = rlp.DecodeBytes(buf, firstBody); err != nil { + return + } + firstTxID = firstBody.BaseTxId + + lastBody := new(types.BodyForStorage) + i := uint64(0) + for gg.HasNext() { + i++ + if i == len { + buf, _ = gg.Next(buf[:0]) + if err = rlp.DecodeBytes(buf, lastBody); err != nil { + return + } + if gg.HasNext() { + panic(1) + } + } else { + gg.Skip() + } + } + + if lastBody.BaseTxId < firstBody.BaseTxId { + return 0, 0, fmt.Errorf("negative txs count %s: lastBody.BaseTxId=%d < firstBody.BaseTxId=%d", bodiesSegment.FileName(), lastBody.BaseTxId, firstBody.BaseTxId) + } + + expectedCount = int(lastBody.BaseTxId+uint64(lastBody.TxAmount)) - int(firstBody.BaseTxId) + return +} diff --git a/core/snaptype/block_types_test.go b/core/snaptype/block_types_test.go new file mode 100644 index 00000000000..ec704a7a3a9 --- /dev/null +++ b/core/snaptype/block_types_test.go @@ -0,0 +1,38 @@ +package snaptype_test + +import ( + "testing" + + "github.com/ledgerwatch/erigon/core/snaptype" +) + +func TestEnumeration(t *testing.T) { + + if snaptype.Headers.Enum() != snaptype.Enums.Headers { + t.Fatal("enum mismatch", snaptype.Headers, snaptype.Headers.Enum(), snaptype.Enums.Headers) + } + + if snaptype.Bodies.Enum() != snaptype.Enums.Bodies { + t.Fatal("enum mismatch", snaptype.Bodies, snaptype.Bodies.Enum(), snaptype.Enums.Bodies) + } + + if snaptype.Transactions.Enum() != snaptype.Enums.Transactions { + t.Fatal("enum mismatch", snaptype.Transactions, snaptype.Transactions.Enum(), snaptype.Enums.Transactions) + } + +} + +func TestNames(t *testing.T) { + + if snaptype.Headers.Name() != snaptype.Enums.Headers.String() { + t.Fatal("name mismatch", snaptype.Headers, snaptype.Headers.Name(), snaptype.Enums.Headers.String()) + } + + if snaptype.Bodies.Name() != snaptype.Enums.Bodies.String() { + t.Fatal("name mismatch", snaptype.Bodies, snaptype.Bodies.Name(), snaptype.Enums.Bodies.String()) + } + + if snaptype.Transactions.Name() != snaptype.Enums.Transactions.String() { + t.Fatal("name mismatch", snaptype.Transactions, snaptype.Transactions.Name(), snaptype.Enums.Transactions.String()) + } +} diff --git a/core/state/history_reader_v3.go b/core/state/history_reader_v3.go index 855d46d6d84..661b849aeb3 100644 --- a/core/state/history_reader_v3.go +++ b/core/state/history_reader_v3.go @@ -5,9 +5,9 @@ import ( "fmt" "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/core/types/accounts" - "github.com/ledgerwatch/erigon/eth/ethconfig" ) // HistoryReaderV3 Implements StateReader and StateWriter @@ -51,7 +51,7 @@ func (hr *HistoryReaderV3) ReadAccountData(address common.Address) (*accounts.Ac func (hr *HistoryReaderV3) ReadAccountStorage(address common.Address, incarnation uint64, key *common.Hash) ([]byte, error) { var acc []byte - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { acc = address.Bytes() } else { acc = make([]byte, 20+8) diff --git a/core/state/rw_v3.go b/core/state/rw_v3.go index b8bb03c664e..3428f6d08de 100644 --- a/core/state/rw_v3.go +++ b/core/state/rw_v3.go @@ -11,6 +11,7 @@ import ( "unsafe" "github.com/holiman/uint256" + "github.com/ledgerwatch/erigon-lib/kv/temporal" "github.com/ledgerwatch/log/v3" btree2 "github.com/tidwall/btree" @@ -24,7 +25,6 @@ import ( "github.com/ledgerwatch/erigon-lib/metrics" libstate "github.com/ledgerwatch/erigon-lib/state" "github.com/ledgerwatch/erigon/cmd/state/exec22" - "github.com/ledgerwatch/erigon/core/state/temporal" "github.com/ledgerwatch/erigon/core/types/accounts" "github.com/ledgerwatch/erigon/turbo/shards" ) @@ -293,7 +293,7 @@ func (rs *StateV3) CommitTxNum(sender *common.Address, txNum uint64, in *exec22. return count } -func (rs *StateV3) writeStateHistory(roTx kv.Tx, txTask *exec22.TxTask, agg *libstate.AggregatorV3) error { +func (rs *StateV3) writeStateHistory(roTx kv.Tx, txTask *exec22.TxTask, agg *libstate.Aggregator) error { rs.lock.RLock() defer rs.lock.RUnlock() @@ -401,7 +401,7 @@ func (rs *StateV3) writeStateHistory(roTx kv.Tx, txTask *exec22.TxTask, agg *lib return nil } -func (rs *StateV3) applyState(roTx kv.Tx, txTask *exec22.TxTask, agg *libstate.AggregatorV3) error { +func (rs *StateV3) applyState(roTx kv.Tx, txTask *exec22.TxTask, agg *libstate.Aggregator) error { emptyRemoval := txTask.Rules.IsSpuriousDragon rs.lock.Lock() defer rs.lock.Unlock() @@ -449,7 +449,7 @@ func (rs *StateV3) applyState(roTx kv.Tx, txTask *exec22.TxTask, agg *libstate.A return nil } -func (rs *StateV3) ApplyState(roTx kv.Tx, txTask *exec22.TxTask, agg *libstate.AggregatorV3) error { +func (rs *StateV3) ApplyState(roTx kv.Tx, txTask *exec22.TxTask, agg *libstate.Aggregator) error { defer agg.BatchHistoryWriteStart().BatchHistoryWriteEnd() agg.SetTxNum(txTask.TxNum) @@ -467,7 +467,7 @@ func (rs *StateV3) ApplyState(roTx kv.Tx, txTask *exec22.TxTask, agg *libstate.A return nil } -func (rs *StateV3) ApplyHistory(txTask *exec22.TxTask, agg *libstate.AggregatorV3) error { +func (rs *StateV3) ApplyHistory(txTask *exec22.TxTask, agg *libstate.Aggregator) error { if dbg.DiscardHistory() { return nil } @@ -521,7 +521,7 @@ func recoverCodeHashPlain(acc *accounts.Account, db kv.Tx, key []byte) { } } -func (rs *StateV3) Unwind(ctx context.Context, tx kv.RwTx, blockUnwindTo, txUnwindTo uint64, agg *libstate.AggregatorV3, accumulator *shards.Accumulator) error { +func (rs *StateV3) Unwind(ctx context.Context, tx kv.RwTx, blockUnwindTo, txUnwindTo uint64, agg *libstate.Aggregator, accumulator *shards.Accumulator) error { agg.SetTx(tx) var currentInc uint64 handle := func(k, v []byte, table etl.CurrentTableReader, next etl.LoadNextFunc) error { @@ -603,12 +603,12 @@ func (rs *StateV3) Unwind(ctx context.Context, tx kv.RwTx, blockUnwindTo, txUnwi stateChanges := etl.NewCollector("", "", etl.NewOldestEntryBuffer(etl.BufferOptimalSize), rs.logger) defer stateChanges.Close() - var actx *libstate.AggregatorV3Context + var actx *libstate.AggregatorRoTx switch ttx := tx.(type) { case *temporal.Tx: actx = ttx.AggCtx() default: - actx = agg.MakeContext() + actx = agg.BeginFilesRo() } { diff --git a/core/state_transition.go b/core/state_transition.go index 4f687c9332e..7e7aa3a6aa9 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -55,17 +55,17 @@ The state transitioning model does all the necessary work to work out a valid ne 6) Derive new state root */ type StateTransition struct { - gp *GasPool - msg Message - gas uint64 - gasPrice *uint256.Int - gasFeeCap *uint256.Int - tip *uint256.Int - initialGas uint64 - value *uint256.Int - data []byte - state evmtypes.IntraBlockState - evm *vm.EVM + gp *GasPool + msg Message + gasRemaining uint64 + gasPrice *uint256.Int + gasFeeCap *uint256.Int + tip *uint256.Int + initialGas uint64 + value *uint256.Int + data []byte + state evmtypes.IntraBlockState + evm *vm.EVM //some pre-allocated intermediate variables sharedBuyGas *uint256.Int @@ -91,7 +91,6 @@ type Message interface { Mint() *uint256.Int IsSystemTx() bool IsDepositTx() bool - IsFree() bool RollupCostData() types2.RollupCostData Nonce() uint64 @@ -99,6 +98,8 @@ type Message interface { Data() []byte AccessList() types2.AccessList BlobHashes() []libcommon.Hash + + IsFree() bool } // ExecutionResult includes all output after executing given evm @@ -242,16 +243,22 @@ func (st *StateTransition) buyGas(gasBailout bool) error { if overflow { return fmt.Errorf("%w: address %v", ErrInsufficientFunds, st.msg.From().Hex()) } + if st.evm.ChainRules().IsCancun { + maxBlobFee, overflow := new(uint256.Int).MulOverflow(st.msg.MaxFeePerBlobGas(), new(uint256.Int).SetUint64(st.msg.BlobGas())) + if overflow { + return fmt.Errorf("%w: address %v", ErrInsufficientFunds, st.msg.From().Hex()) + } + balanceCheck, overflow = balanceCheck.AddOverflow(balanceCheck, maxBlobFee) + if overflow { + return fmt.Errorf("%w: address %v", ErrInsufficientFunds, st.msg.From().Hex()) + } + } if l1Cost != nil { balanceCheck, overflow = balanceCheck.AddOverflow(balanceCheck, l1Cost) // FIXME - combine with dgval below if overflow { return fmt.Errorf("%w: address %v", ErrInsufficientFunds, st.msg.From().Hex()) } } - balanceCheck, overflow = balanceCheck.AddOverflow(balanceCheck, blobGasVal) - if overflow { - return fmt.Errorf("%w: address %v", ErrInsufficientFunds, st.msg.From().Hex()) - } } var subBalance = false have, want := st.state.GetBalance(st.msg.From()), balanceCheck @@ -267,7 +274,7 @@ func (st *StateTransition) buyGas(gasBailout bool) error { return err } } - st.gas += st.msg.Gas() + st.gasRemaining += st.msg.Gas() st.initialGas = st.msg.Gas() if subBalance { @@ -309,7 +316,7 @@ func (st *StateTransition) preCheck(gasBailout bool) error { // No fee fields to check, no nonce to check, and no need to check if EOA (L1 already verified it for us) // Gas is free, but no refunds! st.initialGas = st.msg.Gas() - st.gas += st.msg.Gas() // Add gas here in order to be able to execute calls. + st.gasRemaining += st.msg.Gas() // Add gas here in order to be able to execute calls. // Don't touch the gas pool for system transactions if st.msg.IsSystemTx() { if st.evm.ChainRules().IsOptimismRegolith { @@ -348,7 +355,8 @@ func (st *StateTransition) preCheck(gasBailout bool) error { // Make sure the transaction gasFeeCap is greater than the block's baseFee. if st.evm.ChainRules().IsLondon { // Skip the checks if gas fields are zero and baseFee was explicitly disabled (eth_call) - if !st.evm.Config().NoBaseFee || !st.gasFeeCap.IsZero() || !st.tip.IsZero() { + skipCheck := st.evm.Config().NoBaseFee && st.gasFeeCap.IsZero() && st.tip.IsZero() + if !skipCheck { if err := CheckEip1559TxGasFeeCap(st.msg.From(), st.gasFeeCap, st.tip, st.evm.Context.BaseFee, st.msg.IsFree()); err != nil { return err } @@ -363,7 +371,7 @@ func (st *StateTransition) preCheck(gasBailout bool) error { return err } maxFeePerBlobGas := st.msg.MaxFeePerBlobGas() - if blobGasPrice.Cmp(maxFeePerBlobGas) > 0 { + if !st.evm.Config().NoBaseFee && blobGasPrice.Cmp(maxFeePerBlobGas) > 0 { return fmt.Errorf("%w: address %v, maxFeePerBlobGas: %v blobGasPrice: %v, excessBlobGas: %v", ErrMaxFeePerBlobGas, st.msg.From().Hex(), st.msg.MaxFeePerBlobGas(), blobGasPrice, st.evm.Context.ExcessBlobGas) @@ -445,7 +453,7 @@ func (st *StateTransition) innerTransitionDb(refunds bool, gasBailout bool) (*Ex if st.evm.Config().Debug { st.evm.Config().Tracer.CaptureTxStart(st.initialGas) defer func() { - st.evm.Config().Tracer.CaptureTxEnd(st.gas) + st.evm.Config().Tracer.CaptureTxEnd(st.gasRemaining) }() } @@ -461,10 +469,10 @@ func (st *StateTransition) innerTransitionDb(refunds bool, gasBailout bool) (*Ex if err != nil { return nil, err } - if st.gas < gas { - return nil, fmt.Errorf("%w: have %d, want %d", ErrIntrinsicGas, st.gas, gas) + if st.gasRemaining < gas { + return nil, fmt.Errorf("%w: have %d, want %d", ErrIntrinsicGas, st.gasRemaining, gas) } - st.gas -= gas + st.gasRemaining -= gas var bailout bool // Gas bailout (for trace_call) should only be applied if there is not sufficient balance to perform value transfer @@ -493,11 +501,11 @@ func (st *StateTransition) innerTransitionDb(refunds bool, gasBailout bool) (*Ex // nonce to calculate the address of the contract that is being created // It does get incremented inside the `Create` call, after the computation // of the contract's address, but before the execution of the code. - ret, _, st.gas, vmerr = st.evm.Create(sender, st.data, st.gas, st.value) + ret, _, st.gasRemaining, vmerr = st.evm.Create(sender, st.data, st.gasRemaining, st.value) } else { // Increment the nonce for the next transaction st.state.SetNonce(msg.From(), st.state.GetNonce(sender.Address())+1) - ret, st.gas, vmerr = st.evm.Call(sender, st.to(), st.data, st.gas, st.value, bailout) + ret, st.gasRemaining, vmerr = st.evm.Call(sender, st.to(), st.data, st.gasRemaining, st.value, bailout) } // if deposit: skip refunds, skip tipping coinbase // Regolith changes this behaviour to report the actual gasUsed instead of always reporting all gas used. @@ -595,18 +603,18 @@ func (st *StateTransition) refundGas(refundQuotient uint64) { if refund > st.state.GetRefund() { refund = st.state.GetRefund() } - st.gas += refund + st.gasRemaining += refund // Return ETH for remaining gas, exchanged at the original rate. - remaining := new(uint256.Int).Mul(new(uint256.Int).SetUint64(st.gas), st.gasPrice) + remaining := new(uint256.Int).Mul(new(uint256.Int).SetUint64(st.gasRemaining), st.gasPrice) st.state.AddBalance(st.msg.From(), remaining) // Also return remaining gas to the block gas counter so it is // available for the next transaction. - st.gp.AddGas(st.gas) + st.gp.AddGas(st.gasRemaining) } // gasUsed returns the amount of gas used up by the state transition. func (st *StateTransition) gasUsed() uint64 { - return st.initialGas - st.gas + return st.initialGas - st.gasRemaining } diff --git a/core/types/access_list_tx.go b/core/types/access_list_tx.go index f4410bd566c..36af26a3ec9 100644 --- a/core/types/access_list_tx.go +++ b/core/types/access_list_tx.go @@ -43,17 +43,15 @@ type AccessListTx struct { } // copy creates a deep copy of the transaction data and initializes all fields. -func (tx AccessListTx) copy() *AccessListTx { +func (tx *AccessListTx) copy() *AccessListTx { cpy := &AccessListTx{ LegacyTx: LegacyTx{ CommonTx: CommonTx{ - TransactionMisc: TransactionMisc{ - time: tx.time, - }, - Nonce: tx.Nonce, - To: tx.To, // TODO: copy pointed-to address - Data: libcommon.CopyBytes(tx.Data), - Gas: tx.Gas, + TransactionMisc: TransactionMisc{}, + Nonce: tx.Nonce, + To: tx.To, // TODO: copy pointed-to address + Data: libcommon.CopyBytes(tx.Data), + Gas: tx.Gas, // These are copied below. Value: new(uint256.Int), }, @@ -78,11 +76,11 @@ func (tx AccessListTx) copy() *AccessListTx { return cpy } -func (tx AccessListTx) GetAccessList() types2.AccessList { +func (tx *AccessListTx) GetAccessList() types2.AccessList { return tx.AccessList } -func (tx AccessListTx) Protected() bool { +func (tx *AccessListTx) Protected() bool { return true } @@ -91,14 +89,14 @@ func (tx *AccessListTx) Unwrap() Transaction { } // EncodingSize returns the RLP encoding size of the whole transaction envelope -func (tx AccessListTx) EncodingSize() int { +func (tx *AccessListTx) EncodingSize() int { payloadSize, _, _, _ := tx.payloadSize() // Add envelope size and type size return 1 + rlp2.ListPrefixLen(payloadSize) + payloadSize } // payloadSize calculates the RLP encoding size of transaction, without TxType and envelope -func (tx AccessListTx) payloadSize() (payloadSize int, nonceLen, gasLen, accessListLen int) { +func (tx *AccessListTx) payloadSize() (payloadSize int, nonceLen, gasLen, accessListLen int) { // size of ChainID payloadSize++ payloadSize += rlp.Uint256LenExcludingHead(tx.ChainID) @@ -203,7 +201,7 @@ func EncodeStructSizePrefix(size int, w io.Writer, b []byte) error { // MarshalBinary returns the canonical encoding of the transaction. // For legacy transactions, it returns the RLP encoding. For EIP-2718 typed // transactions, it returns the type and payload. -func (tx AccessListTx) MarshalBinary(w io.Writer) error { +func (tx *AccessListTx) MarshalBinary(w io.Writer) error { payloadSize, nonceLen, gasLen, accessListLen := tx.payloadSize() var b [33]byte // encode TxType @@ -217,7 +215,7 @@ func (tx AccessListTx) MarshalBinary(w io.Writer) error { return nil } -func (tx AccessListTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, gasLen, accessListLen int) error { +func (tx *AccessListTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, gasLen, accessListLen int) error { // prefix if err := EncodeStructSizePrefix(payloadSize, w, b); err != nil { return err @@ -285,7 +283,7 @@ func (tx AccessListTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLe } // EncodeRLP implements rlp.Encoder -func (tx AccessListTx) EncodeRLP(w io.Writer) error { +func (tx *AccessListTx) EncodeRLP(w io.Writer) error { payloadSize, nonceLen, gasLen, accessListLen := tx.payloadSize() // size of struct prefix and TxType envelopeSize := 1 + rlp2.ListPrefixLen(payloadSize) + payloadSize @@ -417,7 +415,7 @@ func (tx *AccessListTx) DecodeRLP(s *rlp.Stream) error { } // AsMessage returns the transaction as a core.Message. -func (tx AccessListTx) AsMessage(s Signer, _ *big.Int, rules *chain.Rules) (Message, error) { +func (tx *AccessListTx) AsMessage(s Signer, _ *big.Int, rules *chain.Rules) (Message, error) { msg := Message{ nonce: tx.Nonce, gasLimit: tx.Gas, @@ -482,7 +480,7 @@ func (tx *AccessListTx) Hash() libcommon.Hash { return hash } -func (tx AccessListTx) SigningHash(chainID *big.Int) libcommon.Hash { +func (tx *AccessListTx) SigningHash(chainID *big.Int) libcommon.Hash { return prefixedRlpHash( AccessListTxType, []interface{}{ @@ -497,13 +495,13 @@ func (tx AccessListTx) SigningHash(chainID *big.Int) libcommon.Hash { }) } -func (tx AccessListTx) Type() byte { return AccessListTxType } +func (tx *AccessListTx) Type() byte { return AccessListTxType } -func (tx AccessListTx) RawSignatureValues() (*uint256.Int, *uint256.Int, *uint256.Int) { +func (tx *AccessListTx) RawSignatureValues() (*uint256.Int, *uint256.Int, *uint256.Int) { return &tx.V, &tx.R, &tx.S } -func (tx AccessListTx) GetChainID() *uint256.Int { +func (tx *AccessListTx) GetChainID() *uint256.Int { return tx.ChainID } diff --git a/core/types/blob_tx.go b/core/types/blob_tx.go index 32547e054bf..d9f0eb0ec6c 100644 --- a/core/types/blob_tx.go +++ b/core/types/blob_tx.go @@ -24,7 +24,7 @@ type BlobTx struct { } // copy creates a deep copy of the transaction data and initializes all fields. -func (stx BlobTx) copy() *BlobTx { +func (stx *BlobTx) copy() *BlobTx { cpy := &BlobTx{ DynamicFeeTransaction: *stx.DynamicFeeTransaction.copy(), MaxFeePerBlobGas: new(uint256.Int), @@ -37,17 +37,17 @@ func (stx BlobTx) copy() *BlobTx { return cpy } -func (stx BlobTx) Type() byte { return BlobTxType } +func (stx *BlobTx) Type() byte { return BlobTxType } -func (stx BlobTx) GetBlobHashes() []libcommon.Hash { +func (stx *BlobTx) GetBlobHashes() []libcommon.Hash { return stx.BlobVersionedHashes } -func (stx BlobTx) GetBlobGas() uint64 { +func (stx *BlobTx) GetBlobGas() uint64 { return fixedgas.BlobGasPerBlob * uint64(len(stx.BlobVersionedHashes)) } -func (stx BlobTx) AsMessage(s Signer, baseFee *big.Int, rules *chain.Rules) (Message, error) { +func (stx *BlobTx) AsMessage(s Signer, baseFee *big.Int, rules *chain.Rules) (Message, error) { msg := Message{ nonce: stx.Nonce, gasLimit: stx.Gas, @@ -92,7 +92,7 @@ func (stx *BlobTx) Sender(signer Signer) (libcommon.Address, error) { return addr, nil } -func (stx BlobTx) Hash() libcommon.Hash { +func (stx *BlobTx) Hash() libcommon.Hash { if hash := stx.hash.Load(); hash != nil { return *hash.(*libcommon.Hash) } @@ -114,7 +114,7 @@ func (stx BlobTx) Hash() libcommon.Hash { return hash } -func (stx BlobTx) SigningHash(chainID *big.Int) libcommon.Hash { +func (stx *BlobTx) SigningHash(chainID *big.Int) libcommon.Hash { return prefixedRlpHash( BlobTxType, []interface{}{ @@ -132,7 +132,13 @@ func (stx BlobTx) SigningHash(chainID *big.Int) libcommon.Hash { }) } -func (stx BlobTx) payloadSize() (payloadSize, nonceLen, gasLen, accessListLen, blobHashesLen int) { +func (stx *BlobTx) EncodingSize() int { + payloadSize, _, _, _, _ := stx.payloadSize() + // Add envelope size and type size + return 1 + rlp2.ListPrefixLen(payloadSize) + payloadSize +} + +func (stx *BlobTx) payloadSize() (payloadSize, nonceLen, gasLen, accessListLen, blobHashesLen int) { payloadSize, nonceLen, gasLen, accessListLen = stx.DynamicFeeTransaction.payloadSize() // size of MaxFeePerBlobGas payloadSize++ @@ -156,7 +162,7 @@ func encodeBlobVersionedHashes(hashes []libcommon.Hash, w io.Writer, b []byte) e return nil } -func (stx BlobTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, gasLen, accessListLen, blobHashesLen int) error { +func (stx *BlobTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, gasLen, accessListLen, blobHashesLen int) error { // prefix if err := EncodeStructSizePrefix(payloadSize, w, b); err != nil { return err @@ -217,7 +223,7 @@ func (stx BlobTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, ga if err := encodeBlobVersionedHashes(stx.BlobVersionedHashes, w, b); err != nil { return err } - // encode y_parity + // encode V if err := stx.V.EncodeRLP(w); err != nil { return err } @@ -232,7 +238,7 @@ func (stx BlobTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, ga return nil } -func (stx BlobTx) EncodeRLP(w io.Writer) error { +func (stx *BlobTx) EncodeRLP(w io.Writer) error { payloadSize, nonceLen, gasLen, accessListLen, blobHashesLen := stx.payloadSize() // size of struct prefix and TxType envelopeSize := 1 + rlp2.ListPrefixLen(payloadSize) + payloadSize @@ -252,7 +258,7 @@ func (stx BlobTx) EncodeRLP(w io.Writer) error { return nil } -func (stx BlobTx) MarshalBinary(w io.Writer) error { +func (stx *BlobTx) MarshalBinary(w io.Writer) error { payloadSize, nonceLen, gasLen, accessListLen, blobHashesLen := stx.payloadSize() var b [33]byte // encode TxType @@ -317,19 +323,19 @@ func (stx *BlobTx) DecodeRLP(s *rlp.Stream) error { if err = decodeAccessList(&stx.AccessList, s); err != nil { return err } - // decode MaxFeePerBlobGas if b, err = s.Uint256Bytes(); err != nil { return err } stx.MaxFeePerBlobGas = new(uint256.Int).SetBytes(b) - // decode BlobVersionedHashes stx.BlobVersionedHashes = []libcommon.Hash{} if err = decodeBlobVersionedHashes(&stx.BlobVersionedHashes, s); err != nil { return err } - + if len(stx.BlobVersionedHashes) == 0 { + return fmt.Errorf("a blob stx must contain at least one blob") + } // decode V if b, err = s.Uint256Bytes(); err != nil { return err @@ -363,7 +369,7 @@ func decodeBlobVersionedHashes(hashes *[]libcommon.Hash, s *rlp.Stream) error { copy((_hash)[:], b) *hashes = append(*hashes, _hash) } else { - return fmt.Errorf("wrong size for blobVersionedHashes: %d, %v", len(b), b[0]) + return fmt.Errorf("wrong size for blobVersionedHashes: %d", len(b)) } } diff --git a/core/types/blob_tx_wrapper.go b/core/types/blob_tx_wrapper.go index 1f5c78cbb56..c4ef359eca3 100644 --- a/core/types/blob_tx_wrapper.go +++ b/core/types/blob_tx_wrapper.go @@ -5,7 +5,6 @@ import ( "io" "math/big" "math/bits" - "time" gokzg4844 "github.com/crate-crypto/go-kzg-4844" "github.com/holiman/uint256" @@ -298,14 +297,11 @@ func (txw *BlobTxWrapper) GetEffectiveGasTip(baseFee *uint256.Int) *uint256.Int } func (txw *BlobTxWrapper) GetFeeCap() *uint256.Int { return txw.Tx.GetFeeCap() } -func (txw *BlobTxWrapper) Cost() *uint256.Int { return txw.Tx.GetFeeCap() } - func (txw *BlobTxWrapper) GetBlobHashes() []libcommon.Hash { return txw.Tx.GetBlobHashes() } func (txw *BlobTxWrapper) GetGas() uint64 { return txw.Tx.GetGas() } func (txw *BlobTxWrapper) GetBlobGas() uint64 { return txw.Tx.GetBlobGas() } func (txw *BlobTxWrapper) GetValue() *uint256.Int { return txw.Tx.GetValue() } -func (txw *BlobTxWrapper) Time() time.Time { return txw.Tx.Time() } func (txw *BlobTxWrapper) GetTo() *libcommon.Address { return txw.Tx.GetTo() } func (txw *BlobTxWrapper) AsMessage(s Signer, baseFee *big.Int, rules *chain.Rules) (Message, error) { @@ -376,12 +372,12 @@ func (txw *BlobTxWrapper) RollupCostData() types2.RollupCostData { // We deliberately encode only the transaction payload because the only case we need to serialize // blobs/commitments/proofs is when we reply to GetPooledTransactions (and that's handled by the txpool). -func (txw BlobTxWrapper) EncodingSize() int { +func (txw *BlobTxWrapper) EncodingSize() int { return txw.Tx.EncodingSize() } func (txw *BlobTxWrapper) MarshalBinary(w io.Writer) error { return txw.Tx.MarshalBinary(w) } -func (txw BlobTxWrapper) EncodeRLP(w io.Writer) error { +func (txw *BlobTxWrapper) EncodeRLP(w io.Writer) error { return txw.Tx.EncodeRLP(w) } diff --git a/core/types/block.go b/core/types/block.go index 1a434098bbf..f35ef67901f 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -27,13 +27,12 @@ import ( "reflect" "sync/atomic" - "github.com/ledgerwatch/erigon-lib/common/hexutil" - "github.com/gballet/go-verkle" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/common/hexutility" rlp2 "github.com/ledgerwatch/erigon-lib/rlp" - "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/erigon/rlp" ) @@ -679,18 +678,12 @@ func (rb RawBody) payloadSize() (payloadSize, txsLen, unclesLen, withdrawalsLen payloadSize += rlp2.ListPrefixLen(txsLen) + txsLen // size of Uncles - for _, uncle := range rb.Uncles { - uncleLen := uncle.EncodingSize() - unclesLen += rlp2.ListPrefixLen(uncleLen) + uncleLen - } + unclesLen += encodingSizeGeneric(rb.Uncles) payloadSize += rlp2.ListPrefixLen(unclesLen) + unclesLen // size of Withdrawals if rb.Withdrawals != nil { - for _, withdrawal := range rb.Withdrawals { - withdrawalLen := withdrawal.EncodingSize() - withdrawalsLen += rlp2.ListPrefixLen(withdrawalLen) + withdrawalLen - } + withdrawalsLen += encodingSizeGeneric(rb.Withdrawals) payloadSize += rlp2.ListPrefixLen(withdrawalsLen) + withdrawalsLen } @@ -714,24 +707,14 @@ func (rb RawBody) EncodeRLP(w io.Writer) error { } } // encode Uncles - if err := EncodeStructSizePrefix(unclesLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(rb.Uncles, unclesLen, w, b[:]); err != nil { return err } - for _, uncle := range rb.Uncles { - if err := uncle.EncodeRLP(w); err != nil { - return err - } - } // encode Withdrawals if rb.Withdrawals != nil { - if err := EncodeStructSizePrefix(withdrawalsLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(rb.Withdrawals, withdrawalsLen, w, b[:]); err != nil { return err } - for _, withdrawal := range rb.Withdrawals { - if err := withdrawal.EncodeRLP(w); err != nil { - return err - } - } } return nil } @@ -741,7 +724,6 @@ func (rb *RawBody) DecodeRLP(s *rlp.Stream) error { if err != nil { return err } - // decode Transactions if _, err = s.List(); err != nil { return err @@ -749,7 +731,7 @@ func (rb *RawBody) DecodeRLP(s *rlp.Stream) error { var tx []byte for tx, err = s.Raw(); err == nil; tx, err = s.Raw() { if tx == nil { - return errors.New("RawBody.DecodeRLP tx nil\n") + return errors.New("RawBody.DecodeRLP tx nil") } rb.Transactions = append(rb.Transactions, tx) } @@ -760,47 +742,13 @@ func (rb *RawBody) DecodeRLP(s *rlp.Stream) error { if err = s.ListEnd(); err != nil { return err } - // decode Uncles - if _, err = s.List(); err != nil { + if err := decodeUncles(&rb.Uncles, s); err != nil { return err } - for err == nil { - var uncle Header - if err = uncle.DecodeRLP(s); err != nil { - break - } - rb.Uncles = append(rb.Uncles, &uncle) - } - if !errors.Is(err, rlp.EOL) { - return err - } - // end of Uncles - if err = s.ListEnd(); err != nil { - return err - } - // decode Withdrawals - if _, err = s.List(); err != nil { - if errors.Is(err, rlp.EOL) { - rb.Withdrawals = nil - return s.ListEnd() - } - return fmt.Errorf("read Withdrawals: %w", err) - } rb.Withdrawals = []*Withdrawal{} - for err == nil { - var withdrawal Withdrawal - if err = withdrawal.DecodeRLP(s); err != nil { - break - } - rb.Withdrawals = append(rb.Withdrawals, &withdrawal) - } - if !errors.Is(err, rlp.EOL) { - return err - } - // end of Withdrawals - if err = s.ListEnd(); err != nil { + if err := decodeWithdrawals(&rb.Withdrawals, s); err != nil { return err } @@ -815,18 +763,12 @@ func (bfs BodyForStorage) payloadSize() (payloadSize, unclesLen, withdrawalsLen payloadSize += txAmountLen // size of Uncles - for _, uncle := range bfs.Uncles { - uncleLen := uncle.EncodingSize() - unclesLen += rlp2.ListPrefixLen(uncleLen) + uncleLen - } + unclesLen += encodingSizeGeneric(bfs.Uncles) payloadSize += rlp2.ListPrefixLen(unclesLen) + unclesLen // size of Withdrawals if bfs.Withdrawals != nil { - for _, withdrawal := range bfs.Withdrawals { - withdrawalLen := withdrawal.EncodingSize() - withdrawalsLen += rlp2.ListPrefixLen(withdrawalLen) + withdrawalLen - } + withdrawalsLen += encodingSizeGeneric(bfs.Withdrawals) payloadSize += rlp2.ListPrefixLen(withdrawalsLen) + withdrawalsLen } @@ -853,25 +795,15 @@ func (bfs BodyForStorage) EncodeRLP(w io.Writer) error { } // encode Uncles - if err := EncodeStructSizePrefix(unclesLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(bfs.Uncles, unclesLen, w, b[:]); err != nil { return err } - for _, uncle := range bfs.Uncles { - if err := uncle.EncodeRLP(w); err != nil { - return err - } - } // encode Withdrawals // nil if pre-shanghai, empty slice if shanghai and no withdrawals in block, otherwise non-empty if bfs.Withdrawals != nil { - if err := EncodeStructSizePrefix(withdrawalsLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(bfs.Withdrawals, withdrawalsLen, w, b[:]); err != nil { return err } - for _, withdrawal := range bfs.Withdrawals { - if err := withdrawal.EncodeRLP(w); err != nil { - return err - } - } } return nil } @@ -886,56 +818,17 @@ func (bfs *BodyForStorage) DecodeRLP(s *rlp.Stream) error { if err = s.Decode(&bfs.BaseTxId); err != nil { return err } - // decode TxAmount if err = s.Decode(&bfs.TxAmount); err != nil { return err } - // decode Uncles - if _, err = s.List(); err != nil { - return err - } - for err == nil { - var uncle Header - if err = uncle.DecodeRLP(s); err != nil { - break - } - bfs.Uncles = append(bfs.Uncles, &uncle) - } - if !errors.Is(err, rlp.EOL) { + if err := decodeUncles(&bfs.Uncles, s); err != nil { return err } - // end of Uncles - if err = s.ListEnd(); err != nil { - return err - } - // decode Withdrawals - if _, err = s.List(); err != nil { - if errors.Is(err, rlp.EOL) { - // pre-shanghai block - bfs.Withdrawals = nil - return s.ListEnd() - } - return fmt.Errorf("read Withdrawals: %w", err) - } - for err == nil { - var withdrawal Withdrawal - if err = withdrawal.DecodeRLP(s); err != nil { - // shanghai block with no withdrawals - if len(bfs.Withdrawals) == 0 { - bfs.Withdrawals = []*Withdrawal{} - } - break - } - bfs.Withdrawals = append(bfs.Withdrawals, &withdrawal) - } - if !errors.Is(err, rlp.EOL) { - return err - } - // end of Withdrawals - if err = s.ListEnd(); err != nil { + bfs.Withdrawals = []*Withdrawal{} + if err := decodeWithdrawals(&bfs.Withdrawals, s); err != nil { return err } @@ -949,25 +842,16 @@ func (bb Body) EncodingSize() int { func (bb Body) payloadSize() (payloadSize int, txsLen, unclesLen, withdrawalsLen int) { // size of Transactions - for _, tx := range bb.Transactions { - txLen := tx.EncodingSize() - txsLen += rlp2.ListPrefixLen(txLen) + txLen - } + txsLen += encodingSizeGeneric(bb.Transactions) payloadSize += rlp2.ListPrefixLen(txsLen) + txsLen // size of Uncles - for _, uncle := range bb.Uncles { - uncleLen := uncle.EncodingSize() - unclesLen += rlp2.ListPrefixLen(uncleLen) + uncleLen - } + unclesLen += encodingSizeGeneric(bb.Uncles) payloadSize += rlp2.ListPrefixLen(unclesLen) + unclesLen // size of Withdrawals if bb.Withdrawals != nil { - for _, withdrawal := range bb.Withdrawals { - withdrawalLen := withdrawal.EncodingSize() - withdrawalsLen += rlp2.ListPrefixLen(withdrawalLen) + withdrawalLen - } + withdrawalsLen += encodingSizeGeneric(bb.Withdrawals) payloadSize += rlp2.ListPrefixLen(withdrawalsLen) + withdrawalsLen } @@ -982,33 +866,18 @@ func (bb Body) EncodeRLP(w io.Writer) error { return err } // encode Transactions - if err := EncodeStructSizePrefix(txsLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(bb.Transactions, txsLen, w, b[:]); err != nil { return err } - for _, tx := range bb.Transactions { - if err := tx.EncodeRLP(w); err != nil { - return err - } - } // encode Uncles - if err := EncodeStructSizePrefix(unclesLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(bb.Uncles, unclesLen, w, b[:]); err != nil { return err } - for _, uncle := range bb.Uncles { - if err := uncle.EncodeRLP(w); err != nil { - return err - } - } // encode Withdrawals if bb.Withdrawals != nil { - if err := EncodeStructSizePrefix(withdrawalsLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(bb.Withdrawals, withdrawalsLen, w, b[:]); err != nil { return err } - for _, withdrawal := range bb.Withdrawals { - if err := withdrawal.EncodeRLP(w); err != nil { - return err - } - } } return nil } @@ -1018,63 +887,17 @@ func (bb *Body) DecodeRLP(s *rlp.Stream) error { if err != nil { return err } - // decode Transactions - if _, err = s.List(); err != nil { - return err - } - var tx Transaction - for tx, err = DecodeRLPTransaction(s); err == nil; tx, err = DecodeRLPTransaction(s) { - bb.Transactions = append(bb.Transactions, tx) - } - if !errors.Is(err, rlp.EOL) { + if err := decodeTxns(&bb.Transactions, s); err != nil { return err } - // end of Transactions - if err = s.ListEnd(); err != nil { - return err - } - // decode Uncles - if _, err = s.List(); err != nil { + if err := decodeUncles(&bb.Uncles, s); err != nil { return err } - for err == nil { - var uncle Header - if err = uncle.DecodeRLP(s); err != nil { - break - } - bb.Uncles = append(bb.Uncles, &uncle) - } - if !errors.Is(err, rlp.EOL) { - return err - } - // end of Uncles - if err = s.ListEnd(); err != nil { - return err - } - // decode Withdrawals - if _, err = s.List(); err != nil { - if errors.Is(err, rlp.EOL) { - bb.Withdrawals = nil - return s.ListEnd() - } - return fmt.Errorf("read Withdrawals: %w", err) - } bb.Withdrawals = []*Withdrawal{} - for err == nil { - var withdrawal Withdrawal - if err = withdrawal.DecodeRLP(s); err != nil { - break - } - bb.Withdrawals = append(bb.Withdrawals, &withdrawal) - } - if !errors.Is(err, rlp.EOL) { - return err - } - // end of Withdrawals - if err = s.ListEnd(); err != nil { + if err := decodeWithdrawals(&bb.Withdrawals, s); err != nil { return err } @@ -1152,6 +975,17 @@ func NewBlockWithHeader(header *Header) *Block { return &Block{header: CopyHeader(header)} } +// NewBlockFromNetwork like NewBlock but used to create Block object when assembled from devp2p network messages +// when there is no reason to copy parts, or re-calculate headers fields. +func NewBlockFromNetwork(header *Header, body *Body) *Block { + return &Block{ + header: header, + transactions: body.Transactions, + uncles: body.Uncles, + withdrawals: body.Withdrawals, + } +} + // CopyHeader creates a deep copy of a block header to prevent side effects from // modifying a header variable. func CopyHeader(h *Header) *Header { @@ -1209,61 +1043,16 @@ func (bb *Block) DecodeRLP(s *rlp.Stream) error { bb.header = &h // decode Transactions - if _, err = s.List(); err != nil { - return err - } - var tx Transaction - for tx, err = DecodeRLPTransaction(s); err == nil; tx, err = DecodeRLPTransaction(s) { - bb.transactions = append(bb.transactions, tx) - } - if !errors.Is(err, rlp.EOL) { - return err - } - // end of Transactions - if err = s.ListEnd(); err != nil { + if err := decodeTxns((*[]Transaction)(&bb.transactions), s); err != nil { return err } - // decode Uncles - if _, err = s.List(); err != nil { - return err - } - for err == nil { - var uncle Header - if err = uncle.DecodeRLP(s); err != nil { - break - } - bb.uncles = append(bb.uncles, &uncle) - } - if !errors.Is(err, rlp.EOL) { - return err - } - // end of Uncles - if err = s.ListEnd(); err != nil { + if err := decodeUncles(&bb.uncles, s); err != nil { return err } - // decode Withdrawals - if _, err = s.List(); err != nil { - if errors.Is(err, rlp.EOL) { - bb.withdrawals = nil - return s.ListEnd() - } - return fmt.Errorf("read Withdrawals: %w", err) - } bb.withdrawals = []*Withdrawal{} - for err == nil { - var withdrawal Withdrawal - if err = withdrawal.DecodeRLP(s); err != nil { - break - } - bb.withdrawals = append(bb.withdrawals, &withdrawal) - } - if !errors.Is(err, rlp.EOL) { - return err - } - // end of Withdrawals - if err = s.ListEnd(); err != nil { + if err := decodeWithdrawals(&bb.withdrawals, s); err != nil { return err } @@ -1276,25 +1065,16 @@ func (bb Block) payloadSize() (payloadSize int, txsLen, unclesLen, withdrawalsLe payloadSize += rlp2.ListPrefixLen(headerLen) + headerLen // size of Transactions - for _, tx := range bb.transactions { - txLen := tx.EncodingSize() - txsLen += rlp2.ListPrefixLen(txLen) + txLen - } + txsLen += encodingSizeGeneric(bb.transactions) payloadSize += rlp2.ListPrefixLen(txsLen) + txsLen // size of Uncles - for _, uncle := range bb.uncles { - uncleLen := uncle.EncodingSize() - unclesLen += rlp2.ListPrefixLen(uncleLen) + uncleLen - } + unclesLen += encodingSizeGeneric(bb.uncles) payloadSize += rlp2.ListPrefixLen(unclesLen) + unclesLen // size of Withdrawals if bb.withdrawals != nil { - for _, withdrawal := range bb.withdrawals { - withdrawalLen := withdrawal.EncodingSize() - withdrawalsLen += rlp2.ListPrefixLen(withdrawalLen) + withdrawalLen - } + withdrawalsLen += encodingSizeGeneric(bb.withdrawals) payloadSize += rlp2.ListPrefixLen(withdrawalsLen) + withdrawalsLen } @@ -1319,33 +1099,18 @@ func (bb Block) EncodeRLP(w io.Writer) error { return err } // encode Transactions - if err := EncodeStructSizePrefix(txsLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(bb.transactions, txsLen, w, b[:]); err != nil { return err } - for _, tx := range bb.transactions { - if err := tx.EncodeRLP(w); err != nil { - return err - } - } // encode Uncles - if err := EncodeStructSizePrefix(unclesLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(bb.uncles, unclesLen, w, b[:]); err != nil { return err } - for _, uncle := range bb.uncles { - if err := uncle.EncodeRLP(w); err != nil { - return err - } - } // encode Withdrawals if bb.withdrawals != nil { - if err := EncodeStructSizePrefix(withdrawalsLen, w, b[:]); err != nil { + if err := encodeRLPGeneric(bb.withdrawals, withdrawalsLen, w, b[:]); err != nil { return err } - for _, withdrawal := range bb.withdrawals { - if err := withdrawal.EncodeRLP(w); err != nil { - return err - } - } } return nil } @@ -1608,3 +1373,85 @@ type BlockWithReceipts struct { Block *Block Receipts Receipts } + +type rlpEncodable interface { + EncodeRLP(w io.Writer) error + EncodingSize() int +} + +func encodingSizeGeneric[T rlpEncodable](arr []T) (_len int) { + for _, item := range arr { + size := item.EncodingSize() + _len += rlp2.ListPrefixLen(size) + size + } + return +} + +func encodeRLPGeneric[T rlpEncodable](arr []T, _len int, w io.Writer, b []byte) error { + if err := EncodeStructSizePrefix(_len, w, b); err != nil { + return err + } + for _, item := range arr { + if err := item.EncodeRLP(w); err != nil { + return err + } + } + return nil +} + +func decodeTxns(appendList *[]Transaction, s *rlp.Stream) error { + var err error + if _, err = s.List(); err != nil { + return err + } + var tx Transaction + blobTxnsAreWrappedWithBlobs := false + for tx, err = DecodeRLPTransaction(s, blobTxnsAreWrappedWithBlobs); err == nil; tx, err = DecodeRLPTransaction(s, blobTxnsAreWrappedWithBlobs) { + *appendList = append(*appendList, tx) + } + return checkErrListEnd(s, err) +} + +func decodeUncles(appendList *[]*Header, s *rlp.Stream) error { + var err error + if _, err = s.List(); err != nil { + return err + } + for err == nil { + var u Header + if err = u.DecodeRLP(s); err != nil { + break + } + *appendList = append(*appendList, &u) + } + return checkErrListEnd(s, err) +} + +func decodeWithdrawals(appendList *[]*Withdrawal, s *rlp.Stream) error { + var err error + if _, err = s.List(); err != nil { + if errors.Is(err, rlp.EOL) { + *appendList = nil + return nil // EOL, check for ListEnd is in calling function + } + return fmt.Errorf("read Withdrawals: %w", err) + } + for err == nil { + var w Withdrawal + if err = w.DecodeRLP(s); err != nil { + break + } + *appendList = append(*appendList, &w) + } + return checkErrListEnd(s, err) +} + +func checkErrListEnd(s *rlp.Stream, err error) error { + if !errors.Is(err, rlp.EOL) { + return err + } + if err = s.ListEnd(); err != nil { + return err + } + return nil +} diff --git a/core/types/dynamic_fee_tx.go b/core/types/dynamic_fee_tx.go index f06b941010b..f3e5da55b3e 100644 --- a/core/types/dynamic_fee_tx.go +++ b/core/types/dynamic_fee_tx.go @@ -41,10 +41,10 @@ type DynamicFeeTransaction struct { AccessList types2.AccessList } -func (tx DynamicFeeTransaction) GetPrice() *uint256.Int { return tx.Tip } +func (tx *DynamicFeeTransaction) GetPrice() *uint256.Int { return tx.Tip } func (tx *DynamicFeeTransaction) GetFeeCap() *uint256.Int { return tx.FeeCap } func (tx *DynamicFeeTransaction) GetTip() *uint256.Int { return tx.Tip } -func (tx DynamicFeeTransaction) GetEffectiveGasTip(baseFee *uint256.Int) *uint256.Int { +func (tx *DynamicFeeTransaction) GetEffectiveGasTip(baseFee *uint256.Int) *uint256.Int { if baseFee == nil { return tx.GetTip() } @@ -61,28 +61,19 @@ func (tx DynamicFeeTransaction) GetEffectiveGasTip(baseFee *uint256.Int) *uint25 } } -func (tx DynamicFeeTransaction) Cost() *uint256.Int { - total := new(uint256.Int).SetUint64(tx.Gas) - total.Mul(total, tx.Tip) - total.Add(total, tx.Value) - return total -} - func (tx *DynamicFeeTransaction) Unwrap() Transaction { return tx } // copy creates a deep copy of the transaction data and initializes all fields. -func (tx DynamicFeeTransaction) copy() *DynamicFeeTransaction { +func (tx *DynamicFeeTransaction) copy() *DynamicFeeTransaction { cpy := &DynamicFeeTransaction{ CommonTx: CommonTx{ - TransactionMisc: TransactionMisc{ - time: tx.time, - }, - Nonce: tx.Nonce, - To: tx.To, // TODO: copy pointed-to address - Data: libcommon.CopyBytes(tx.Data), - Gas: tx.Gas, + TransactionMisc: TransactionMisc{}, + Nonce: tx.Nonce, + To: tx.To, // TODO: copy pointed-to address + Data: libcommon.CopyBytes(tx.Data), + Gas: tx.Gas, // These are copied below. Value: new(uint256.Int), }, @@ -110,17 +101,17 @@ func (tx DynamicFeeTransaction) copy() *DynamicFeeTransaction { return cpy } -func (tx DynamicFeeTransaction) GetAccessList() types2.AccessList { +func (tx *DynamicFeeTransaction) GetAccessList() types2.AccessList { return tx.AccessList } -func (tx DynamicFeeTransaction) EncodingSize() int { +func (tx *DynamicFeeTransaction) EncodingSize() int { payloadSize, _, _, _ := tx.payloadSize() // Add envelope size and type size return 1 + rlp2.ListPrefixLen(payloadSize) + payloadSize } -func (tx DynamicFeeTransaction) payloadSize() (payloadSize int, nonceLen, gasLen, accessListLen int) { +func (tx *DynamicFeeTransaction) payloadSize() (payloadSize int, nonceLen, gasLen, accessListLen int) { // size of ChainID payloadSize++ payloadSize += rlp.Uint256LenExcludingHead(tx.ChainID) @@ -188,7 +179,7 @@ func (tx *DynamicFeeTransaction) FakeSign(address libcommon.Address) (Transactio // MarshalBinary returns the canonical encoding of the transaction. // For legacy transactions, it returns the RLP encoding. For EIP-2718 typed // transactions, it returns the type and payload. -func (tx DynamicFeeTransaction) MarshalBinary(w io.Writer) error { +func (tx *DynamicFeeTransaction) MarshalBinary(w io.Writer) error { payloadSize, nonceLen, gasLen, accessListLen := tx.payloadSize() var b [33]byte // encode TxType @@ -202,7 +193,7 @@ func (tx DynamicFeeTransaction) MarshalBinary(w io.Writer) error { return nil } -func (tx DynamicFeeTransaction) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, gasLen, accessListLen int) error { +func (tx *DynamicFeeTransaction) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, gasLen, accessListLen int) error { // prefix if err := EncodeStructSizePrefix(payloadSize, w, b); err != nil { return err @@ -272,7 +263,7 @@ func (tx DynamicFeeTransaction) encodePayload(w io.Writer, b []byte, payloadSize return nil } -func (tx DynamicFeeTransaction) EncodeRLP(w io.Writer) error { +func (tx *DynamicFeeTransaction) EncodeRLP(w io.Writer) error { payloadSize, nonceLen, gasLen, accessListLen := tx.payloadSize() // size of struct prefix and TxType envelopeSize := 1 + rlp2.ListPrefixLen(payloadSize) + payloadSize @@ -355,7 +346,7 @@ func (tx *DynamicFeeTransaction) DecodeRLP(s *rlp.Stream) error { } // AsMessage returns the transaction as a core.Message. -func (tx DynamicFeeTransaction) AsMessage(s Signer, baseFee *big.Int, rules *chain.Rules) (Message, error) { +func (tx *DynamicFeeTransaction) AsMessage(s Signer, baseFee *big.Int, rules *chain.Rules) (Message, error) { msg := Message{ nonce: tx.Nonce, gasLimit: tx.Gas, @@ -409,7 +400,7 @@ func (tx *DynamicFeeTransaction) Hash() libcommon.Hash { return hash } -func (tx DynamicFeeTransaction) SigningHash(chainID *big.Int) libcommon.Hash { +func (tx *DynamicFeeTransaction) SigningHash(chainID *big.Int) libcommon.Hash { return prefixedRlpHash( DynamicFeeTxType, []interface{}{ @@ -426,13 +417,13 @@ func (tx DynamicFeeTransaction) SigningHash(chainID *big.Int) libcommon.Hash { } // accessors for innerTx. -func (tx DynamicFeeTransaction) Type() byte { return DynamicFeeTxType } +func (tx *DynamicFeeTransaction) Type() byte { return DynamicFeeTxType } -func (tx DynamicFeeTransaction) RawSignatureValues() (*uint256.Int, *uint256.Int, *uint256.Int) { +func (tx *DynamicFeeTransaction) RawSignatureValues() (*uint256.Int, *uint256.Int, *uint256.Int) { return &tx.V, &tx.R, &tx.S } -func (tx DynamicFeeTransaction) GetChainID() *uint256.Int { +func (tx *DynamicFeeTransaction) GetChainID() *uint256.Int { return tx.ChainID } diff --git a/core/types/encdec_test.go b/core/types/encdec_test.go new file mode 100644 index 00000000000..97951782588 --- /dev/null +++ b/core/types/encdec_test.go @@ -0,0 +1,442 @@ +package types + +import ( + "bytes" + "fmt" + "math/big" + "math/rand" + "reflect" + "testing" + "time" + + "github.com/holiman/uint256" + libcommon "github.com/ledgerwatch/erigon-lib/common" + types2 "github.com/ledgerwatch/erigon-lib/types" + "github.com/ledgerwatch/erigon/rlp" +) + +const RUNS = 100 // for local tests increase this number + +type TRand struct { + rnd *rand.Rand +} + +func NewTRand() *TRand { + seed := time.Now().UnixNano() + src := rand.NewSource(seed) + return &TRand{rnd: rand.New(src)} +} + +func (tr *TRand) RandIntInRange(min, max int) int { + return (tr.rnd.Intn(max-min) + min) +} + +func (tr *TRand) RandUint64() *uint64 { + a := tr.rnd.Uint64() + return &a +} + +func (tr *TRand) RandBig() *big.Int { + return big.NewInt(int64(tr.rnd.Int())) +} + +func (tr *TRand) RandBytes(size int) []byte { + arr := make([]byte, size) + for i := 0; i < size; i++ { + arr[i] = byte(tr.rnd.Intn(256)) + } + return arr +} + +func (tr *TRand) RandAddress() libcommon.Address { + return libcommon.Address(tr.RandBytes(20)) +} + +func (tr *TRand) RandHash() libcommon.Hash { + return libcommon.Hash(tr.RandBytes(32)) +} + +func (tr *TRand) RandBloom() Bloom { + return Bloom(tr.RandBytes(BloomByteLength)) +} + +func (tr *TRand) RandWithdrawal() *Withdrawal { + return &Withdrawal{ + Index: tr.rnd.Uint64(), + Validator: tr.rnd.Uint64(), + Address: tr.RandAddress(), + Amount: tr.rnd.Uint64(), + } +} + +func (tr *TRand) RandHeader() *Header { + wHash := tr.RandHash() + pHash := tr.RandHash() + return &Header{ + ParentHash: tr.RandHash(), // libcommon.Hash + UncleHash: tr.RandHash(), // libcommon.Hash + Coinbase: tr.RandAddress(), // libcommon.Address + Root: tr.RandHash(), // libcommon.Hash + TxHash: tr.RandHash(), // libcommon.Hash + ReceiptHash: tr.RandHash(), // libcommon.Hash + Bloom: tr.RandBloom(), // Bloom + Difficulty: tr.RandBig(), // *big.Int + Number: tr.RandBig(), // *big.Int + GasLimit: *tr.RandUint64(), // uint64 + GasUsed: *tr.RandUint64(), // uint64 + Time: *tr.RandUint64(), // uint64 + Extra: tr.RandBytes(tr.RandIntInRange(128, 1024)), // []byte + MixDigest: tr.RandHash(), // libcommon.Hash + Nonce: BlockNonce(tr.RandBytes(8)), // BlockNonce + BaseFee: tr.RandBig(), // *big.Int + WithdrawalsHash: &wHash, // *libcommon.Hash + BlobGasUsed: tr.RandUint64(), // *uint64 + ExcessBlobGas: tr.RandUint64(), // *uint64 + ParentBeaconBlockRoot: &pHash, //*libcommon.Hash + } +} + +func (tr *TRand) RandAccessTuple() types2.AccessTuple { + n := tr.RandIntInRange(1, 5) + sk := make([]libcommon.Hash, n) + for i := 0; i < n; i++ { + sk[i] = tr.RandHash() + } + return types2.AccessTuple{ + Address: tr.RandAddress(), + StorageKeys: sk, + } +} + +func (tr *TRand) RandAccessList(size int) types2.AccessList { + al := make([]types2.AccessTuple, size) + for i := 0; i < size; i++ { + al[i] = tr.RandAccessTuple() + } + return al +} + +func (tr *TRand) RandTransaction() Transaction { + txType := tr.RandIntInRange(0, 4) // LegacyTxType, AccessListTxType, DynamicFeeTxType, BlobTxType + to := tr.RandAddress() + commonTx := CommonTx{ + Nonce: *tr.RandUint64(), + Gas: *tr.RandUint64(), + To: &to, + Value: uint256.NewInt(*tr.RandUint64()), // wei amount + Data: tr.RandBytes(tr.RandIntInRange(128, 1024)), + V: *uint256.NewInt(*tr.RandUint64()), + R: *uint256.NewInt(*tr.RandUint64()), + S: *uint256.NewInt(*tr.RandUint64()), + } + switch txType { + case LegacyTxType: + return &LegacyTx{ + CommonTx: commonTx, + GasPrice: uint256.NewInt(*tr.RandUint64()), + } + case AccessListTxType: + return &AccessListTx{ + LegacyTx: LegacyTx{ + CommonTx: commonTx, + GasPrice: uint256.NewInt(*tr.RandUint64()), + }, + ChainID: uint256.NewInt(*tr.RandUint64()), + AccessList: tr.RandAccessList(tr.RandIntInRange(1, 5)), + } + case DynamicFeeTxType: + return &DynamicFeeTransaction{ + CommonTx: commonTx, + ChainID: uint256.NewInt(*tr.RandUint64()), + Tip: uint256.NewInt(*tr.RandUint64()), + FeeCap: uint256.NewInt(*tr.RandUint64()), + AccessList: tr.RandAccessList(tr.RandIntInRange(1, 5)), + } + case BlobTxType: + r := *tr.RandUint64() + return &BlobTx{ + DynamicFeeTransaction: DynamicFeeTransaction{ + CommonTx: commonTx, + ChainID: uint256.NewInt(*tr.RandUint64()), + Tip: uint256.NewInt(*tr.RandUint64()), + FeeCap: uint256.NewInt(*tr.RandUint64()), + AccessList: tr.RandAccessList(tr.RandIntInRange(1, 5)), + }, + MaxFeePerBlobGas: uint256.NewInt(r), + BlobVersionedHashes: tr.RandHashes(tr.RandIntInRange(1, 2)), + } + default: + fmt.Printf("unexpected txType %v", txType) + panic("unexpected txType") + } +} + +func (tr *TRand) RandHashes(size int) []libcommon.Hash { + hashes := make([]libcommon.Hash, size) + for i := 0; i < size; i++ { + hashes[i] = tr.RandHash() + } + return hashes +} + +func (tr *TRand) RandTransactions(size int) []Transaction { + txns := make([]Transaction, size) + for i := 0; i < size; i++ { + txns[i] = tr.RandTransaction() + } + return txns +} + +func (tr *TRand) RandRawTransactions(size int) [][]byte { + txns := make([][]byte, size) + for i := 0; i < size; i++ { + txns[i] = tr.RandBytes(tr.RandIntInRange(1, 1023)) + } + return txns +} + +func (tr *TRand) RandHeaders(size int) []*Header { + uncles := make([]*Header, size) + for i := 0; i < size; i++ { + uncles[i] = tr.RandHeader() + } + return uncles +} + +func (tr *TRand) RandWithdrawals(size int) []*Withdrawal { + withdrawals := make([]*Withdrawal, size) + for i := 0; i < size; i++ { + withdrawals[i] = tr.RandWithdrawal() + } + return withdrawals +} +func (tr *TRand) RandRawBody() *RawBody { + return &RawBody{ + Transactions: tr.RandRawTransactions(tr.RandIntInRange(1, 6)), + Uncles: tr.RandHeaders(tr.RandIntInRange(1, 6)), + Withdrawals: tr.RandWithdrawals(tr.RandIntInRange(1, 6)), + } +} + +func (tr *TRand) RandRawBlock(setNil bool) *RawBlock { + if setNil { + return &RawBlock{ + Header: tr.RandHeader(), + Body: &RawBody{ + Uncles: nil, + Withdrawals: nil, + // Deposits: nil, + }, + } + } + + return &RawBlock{ + Header: tr.RandHeader(), + Body: tr.RandRawBody(), + } +} + +func (tr *TRand) RandBody() *Body { + return &Body{ + Transactions: tr.RandTransactions(tr.RandIntInRange(1, 6)), + Uncles: tr.RandHeaders(tr.RandIntInRange(1, 6)), + Withdrawals: tr.RandWithdrawals(tr.RandIntInRange(1, 6)), + } +} + +func isEqualBytes(a, b []byte) bool { + for i := range a { + if a[i] != b[i] { + fmt.Printf("%v != %v at %v", a[i], b[i], i) + return false + } + } + return true +} + +func check(t *testing.T, f string, got, want interface{}) { + if !reflect.DeepEqual(got, want) { + t.Errorf("%s mismatch: got %v, want %v", f, got, want) + } +} + +func compareHeaders(t *testing.T, a, b *Header) { + check(t, "Header.ParentHash", a.ParentHash, b.ParentHash) + check(t, "Header.UncleHash", a.UncleHash, b.UncleHash) + check(t, "Header.Coinbase", a.Coinbase, b.Coinbase) + check(t, "Header.Root", a.Root, b.Root) + check(t, "Header.TxHash", a.TxHash, b.TxHash) + check(t, "Header.ReceiptHash", a.ReceiptHash, b.ReceiptHash) + check(t, "Header.Bloom", a.Bloom, b.Bloom) + check(t, "Header.Difficulty", a.Difficulty, b.Difficulty) + check(t, "Header.Number", a.Number, b.Number) + check(t, "Header.GasLimit", a.GasLimit, b.GasLimit) + check(t, "Header.GasUsed", a.GasUsed, b.GasUsed) + check(t, "Header.Time", a.Time, b.Time) + check(t, "Header.Extra", a.Extra, b.Extra) + check(t, "Header.MixDigest", a.MixDigest, b.MixDigest) + check(t, "Header.Nonce", a.Nonce, b.Nonce) + check(t, "Header.BaseFee", a.BaseFee, b.BaseFee) + check(t, "Header.WithdrawalsHash", a.WithdrawalsHash, b.WithdrawalsHash) + check(t, "Header.BlobGasUsed", a.BlobGasUsed, b.BlobGasUsed) + check(t, "Header.ExcessBlobGas", a.ExcessBlobGas, b.ExcessBlobGas) + check(t, "Header.ParentBeaconBlockRoot", a.ParentBeaconBlockRoot, b.ParentBeaconBlockRoot) +} + +func compareWithdrawals(t *testing.T, a, b *Withdrawal) { + check(t, "Withdrawal.Index", a.Index, b.Index) + check(t, "Withdrawal.Validator", a.Validator, b.Validator) + check(t, "Withdrawal.Address", a.Address, b.Address) + check(t, "Withdrawal.Amount", a.Amount, b.Amount) +} + +func compareTransactions(t *testing.T, a, b Transaction) { + v1, r1, s1 := a.RawSignatureValues() + v2, r2, s2 := b.RawSignatureValues() + check(t, "Tx.Type", a.Type(), b.Type()) + check(t, "Tx.GetChainID", a.GetChainID(), b.GetChainID()) + check(t, "Tx.GetNonce", a.GetNonce(), b.GetNonce()) + check(t, "Tx.GetPrice", a.GetPrice(), b.GetPrice()) + check(t, "Tx.GetTip", a.GetTip(), b.GetTip()) + check(t, "Tx.GetFeeCap", a.GetFeeCap(), b.GetFeeCap()) + check(t, "Tx.GetBlobHashes", a.GetBlobHashes(), b.GetBlobHashes()) + check(t, "Tx.GetGas", a.GetGas(), b.GetGas()) + check(t, "Tx.GetBlobGas", a.GetBlobGas(), b.GetBlobGas()) + check(t, "Tx.GetValue", a.GetValue(), b.GetValue()) + check(t, "Tx.GetTo", a.GetTo(), b.GetTo()) + check(t, "Tx.GetData", a.GetData(), b.GetData()) + check(t, "Tx.GetAccessList", a.GetAccessList(), b.GetAccessList()) + check(t, "Tx.V", v1, v2) + check(t, "Tx.R", r1, r2) + check(t, "Tx.S", s1, s2) +} + +// func compareDeposits(t *testing.T, a, b *Deposit) { +// check(t, "Deposit.Pubkey", a.Index, b.Index) +// check(t, "Deposit.WithdrawalCredentials", a.WithdrawalCredentials, b.WithdrawalCredentials) +// check(t, "Deposit.Amount", a.Amount, b.Amount) +// check(t, "Deposit.Signature", a.Signature, b.Signature) +// check(t, "Deposit.Index", a.Index, b.Index) +// } + +func compareRawBodies(t *testing.T, a, b *RawBody) error { + + atLen, btLen := len(a.Transactions), len(b.Transactions) + if atLen != btLen { + return fmt.Errorf("transactions len mismatch: expected: %v, got: %v", atLen, btLen) + } + + for i := 0; i < atLen; i++ { + if !isEqualBytes(a.Transactions[i], b.Transactions[i]) { + return fmt.Errorf("byte transactions are not equal") + } + } + + auLen, buLen := len(a.Uncles), len(b.Uncles) + if auLen != buLen { + return fmt.Errorf("uncles len mismatch: expected: %v, got: %v", auLen, buLen) + } + + for i := 0; i < auLen; i++ { + compareHeaders(t, a.Uncles[i], b.Uncles[i]) + } + + awLen, bwLen := len(a.Withdrawals), len(b.Withdrawals) + if awLen != bwLen { + return fmt.Errorf("withdrawals len mismatch: expected: %v, got: %v", auLen, buLen) + } + + for i := 0; i < awLen; i++ { + compareWithdrawals(t, a.Withdrawals[i], b.Withdrawals[i]) + } + + return nil +} + +func compareBodies(t *testing.T, a, b *Body) error { + + atLen, btLen := len(a.Transactions), len(b.Transactions) + if atLen != btLen { + return fmt.Errorf("txns len mismatch: expected: %v, got: %v", atLen, btLen) + } + + for i := 0; i < atLen; i++ { + compareTransactions(t, a.Transactions[i], b.Transactions[i]) + } + + auLen, buLen := len(a.Uncles), len(b.Uncles) + if auLen != buLen { + return fmt.Errorf("uncles len mismatch: expected: %v, got: %v", auLen, buLen) + } + + for i := 0; i < auLen; i++ { + compareHeaders(t, a.Uncles[i], b.Uncles[i]) + } + + awLen, bwLen := len(a.Withdrawals), len(b.Withdrawals) + if awLen != bwLen { + return fmt.Errorf("withdrawals len mismatch: expected: %v, got: %v", awLen, bwLen) + } + + for i := 0; i < awLen; i++ { + compareWithdrawals(t, a.Withdrawals[i], b.Withdrawals[i]) + } + + // adLen, bdLen := len(a.deposits), len(b.deposits) + // if adLen != bdLen { + // return fmt.Errorf("deposits len mismatch: expected: %v, got: %v", adLen, bdLen) + // } + + // for i := 0; i < adLen; i++ { + // compareDeposits(t, a.deposits[i], b.deposits[i]) + // } + + return nil +} + +// func TestRawBodyEncodeDecodeRLP(t *testing.T) { +// tr := NewTRand() +// var buf bytes.Buffer +// for i := 0; i < RUNS; i++ { +// enc := tr.RandRawBody() +// buf.Reset() +// if err := enc.EncodeRLP(&buf); err != nil { +// t.Errorf("error: RawBody.EncodeRLP(): %v", err) +// } + +// s := rlp.NewStream(bytes.NewReader(buf.Bytes()), 0) + +// dec := &RawBody{} +// if err := dec.DecodeRLP(s); err != nil { +// t.Errorf("error: RawBody.DecodeRLP(): %v", err) +// panic(err) +// } + +// if err := compareRawBodies(t, enc, dec); err != nil { +// t.Errorf("error: compareRawBodies: %v", err) +// } +// } +// } + +func TestBodyEncodeDecodeRLP(t *testing.T) { + tr := NewTRand() + var buf bytes.Buffer + for i := 0; i < RUNS; i++ { + enc := tr.RandBody() + buf.Reset() + if err := enc.EncodeRLP(&buf); err != nil { + t.Errorf("error: RawBody.EncodeRLP(): %v", err) + } + + s := rlp.NewStream(bytes.NewReader(buf.Bytes()), 0) + dec := &Body{} + if err := dec.DecodeRLP(s); err != nil { + t.Errorf("error: RawBody.DecodeRLP(): %v", err) + panic(err) + } + + if err := compareBodies(t, enc, dec); err != nil { + t.Errorf("error: compareRawBodies: %v", err) + } + } +} diff --git a/core/types/legacy_tx.go b/core/types/legacy_tx.go index 40965206a2f..02f386f182f 100644 --- a/core/types/legacy_tx.go +++ b/core/types/legacy_tx.go @@ -43,31 +43,31 @@ type CommonTx struct { V, R, S uint256.Int // signature values } -func (ct CommonTx) GetNonce() uint64 { +func (ct *CommonTx) GetNonce() uint64 { return ct.Nonce } -func (ct CommonTx) GetTo() *libcommon.Address { +func (ct *CommonTx) GetTo() *libcommon.Address { return ct.To } -func (ct CommonTx) GetBlobGas() uint64 { +func (ct *CommonTx) GetBlobGas() uint64 { return 0 } -func (ct CommonTx) GetGas() uint64 { +func (ct *CommonTx) GetGas() uint64 { return ct.Gas } -func (ct CommonTx) GetValue() *uint256.Int { +func (ct *CommonTx) GetValue() *uint256.Int { return ct.Value } -func (ct CommonTx) GetData() []byte { +func (ct *CommonTx) GetData() []byte { return ct.Data } -func (ct CommonTx) GetSender() (libcommon.Address, bool) { +func (ct *CommonTx) GetSender() (libcommon.Address, bool) { if sc := ct.from.Load(); sc != nil { return sc.(libcommon.Address), true } @@ -78,11 +78,11 @@ func (ct *CommonTx) SetSender(addr libcommon.Address) { ct.from.Store(addr) } -func (ct CommonTx) Protected() bool { +func (ct *CommonTx) Protected() bool { return true } -func (ct CommonTx) IsContractDeploy() bool { +func (ct *CommonTx) IsContractDeploy() bool { return ct.GetTo() == nil } @@ -97,10 +97,10 @@ type LegacyTx struct { GasPrice *uint256.Int // wei per gas } -func (tx LegacyTx) GetPrice() *uint256.Int { return tx.GasPrice } -func (tx LegacyTx) GetTip() *uint256.Int { return tx.GasPrice } -func (tx LegacyTx) GetFeeCap() *uint256.Int { return tx.GasPrice } -func (tx LegacyTx) GetEffectiveGasTip(baseFee *uint256.Int) *uint256.Int { +func (tx *LegacyTx) GetPrice() *uint256.Int { return tx.GasPrice } +func (tx *LegacyTx) GetTip() *uint256.Int { return tx.GasPrice } +func (tx *LegacyTx) GetFeeCap() *uint256.Int { return tx.GasPrice } +func (tx *LegacyTx) GetEffectiveGasTip(baseFee *uint256.Int) *uint256.Int { if baseFee == nil { return tx.GetTip() } @@ -117,18 +117,11 @@ func (tx LegacyTx) GetEffectiveGasTip(baseFee *uint256.Int) *uint256.Int { } } -func (tx LegacyTx) Cost() *uint256.Int { - total := new(uint256.Int).SetUint64(tx.Gas) - total.Mul(total, tx.GasPrice) - total.Add(total, tx.Value) - return total -} - -func (tx LegacyTx) GetAccessList() types2.AccessList { +func (tx *LegacyTx) GetAccessList() types2.AccessList { return types2.AccessList{} } -func (tx LegacyTx) Protected() bool { +func (tx *LegacyTx) Protected() bool { return isProtectedV(&tx.V) } @@ -166,16 +159,14 @@ func NewContractCreation(nonce uint64, amount *uint256.Int, gasLimit uint64, gas } // copy creates a deep copy of the transaction data and initializes all fields. -func (tx LegacyTx) copy() *LegacyTx { +func (tx *LegacyTx) copy() *LegacyTx { cpy := &LegacyTx{ CommonTx: CommonTx{ - TransactionMisc: TransactionMisc{ - time: tx.time, - }, - Nonce: tx.Nonce, - To: tx.To, // TODO: copy pointed-to address - Data: libcommon.CopyBytes(tx.Data), - Gas: tx.Gas, + TransactionMisc: TransactionMisc{}, + Nonce: tx.Nonce, + To: tx.To, // TODO: copy pointed-to address + Data: libcommon.CopyBytes(tx.Data), + Gas: tx.Gas, // These are initialized below. Value: new(uint256.Int), }, @@ -193,12 +184,12 @@ func (tx LegacyTx) copy() *LegacyTx { return cpy } -func (tx LegacyTx) EncodingSize() int { +func (tx *LegacyTx) EncodingSize() int { payloadSize, _, _ := tx.payloadSize() return payloadSize } -func (tx LegacyTx) payloadSize() (payloadSize int, nonceLen, gasLen int) { +func (tx *LegacyTx) payloadSize() (payloadSize int, nonceLen, gasLen int) { payloadSize++ nonceLen = rlp.IntLenExcludingHead(tx.Nonce) payloadSize += nonceLen @@ -225,7 +216,7 @@ func (tx LegacyTx) payloadSize() (payloadSize int, nonceLen, gasLen int) { return payloadSize, nonceLen, gasLen } -func (tx LegacyTx) MarshalBinary(w io.Writer) error { +func (tx *LegacyTx) MarshalBinary(w io.Writer) error { payloadSize, nonceLen, gasLen := tx.payloadSize() var b [33]byte if err := tx.encodePayload(w, b[:], payloadSize, nonceLen, gasLen); err != nil { @@ -234,7 +225,7 @@ func (tx LegacyTx) MarshalBinary(w io.Writer) error { return nil } -func (tx LegacyTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, gasLen int) error { +func (tx *LegacyTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, gasLen int) error { // prefix if err := EncodeStructSizePrefix(payloadSize, w, b); err != nil { return err @@ -289,7 +280,7 @@ func (tx LegacyTx) encodePayload(w io.Writer, b []byte, payloadSize, nonceLen, g } -func (tx LegacyTx) EncodeRLP(w io.Writer) error { +func (tx *LegacyTx) EncodeRLP(w io.Writer) error { payloadSize, nonceLen, gasLen := tx.payloadSize() var b [33]byte if err := tx.encodePayload(w, b[:], payloadSize, nonceLen, gasLen); err != nil { @@ -349,7 +340,7 @@ func (tx *LegacyTx) DecodeRLP(s *rlp.Stream, encodingSize uint64) error { } // AsMessage returns the transaction as a core.Message. -func (tx LegacyTx) AsMessage(s Signer, _ *big.Int, rules *chain.Rules) (Message, error) { +func (tx *LegacyTx) AsMessage(s Signer, _ *big.Int, _ *chain.Rules) (Message, error) { msg := Message{ nonce: tx.Nonce, gasLimit: tx.Gas, @@ -408,7 +399,7 @@ func (tx *LegacyTx) Hash() libcommon.Hash { return hash } -func (tx LegacyTx) SigningHash(chainID *big.Int) libcommon.Hash { +func (tx *LegacyTx) SigningHash(chainID *big.Int) libcommon.Hash { if chainID != nil && chainID.Sign() != 0 { return rlpHash([]interface{}{ tx.Nonce, @@ -430,13 +421,13 @@ func (tx LegacyTx) SigningHash(chainID *big.Int) libcommon.Hash { }) } -func (tx LegacyTx) Type() byte { return LegacyTxType } +func (tx *LegacyTx) Type() byte { return LegacyTxType } -func (tx LegacyTx) RawSignatureValues() (*uint256.Int, *uint256.Int, *uint256.Int) { +func (tx *LegacyTx) RawSignatureValues() (*uint256.Int, *uint256.Int, *uint256.Int) { return &tx.V, &tx.R, &tx.S } -func (tx LegacyTx) GetChainID() *uint256.Int { +func (tx *LegacyTx) GetChainID() *uint256.Int { return DeriveChainId(&tx.V) } diff --git a/core/types/receipt.go b/core/types/receipt.go index 787d5460b23..facad40015a 100644 --- a/core/types/receipt.go +++ b/core/types/receipt.go @@ -33,6 +33,15 @@ import ( "github.com/ledgerwatch/erigon/rlp" ) +// go:generate gencodec -type Receipt -field-override receiptMarshaling -out gen_receipt_json.go + +// to get it working need to update github.com/ugorji/go/codec to v1.2.12 which has the fix: +// - https://github.com/ugorji/go/commit/8286c2dc986535d23e3fad8d3e816b9dd1e5aea6 +// however updating the lib has caused us issues in the past, and we don't have good unit test coverage for updating atm +// we also use this for storing Receipts and Logs in the DB - we won't be doing that in Erigon 3 +// do not regen, more context: https://github.com/ledgerwatch/erigon/pull/10105#pullrequestreview-2027423601 +// go:generate codecgen -o receipt_codecgen_gen.go -r "^Receipts$|^Receipt$|^Logs$|^Log$" -st "codec" -j=false -nx=true -ta=true -oe=false -d 2 receipt.go log.go + //go:generate gencodec -type Receipt -field-override receiptMarshaling -out gen_receipt_json.go //go:generate codecgen -o receipt_codecgen_gen.go -r "^Receipts$|^Receipt$|^Logs$|^Log$" -st "codec" -j=false -nx=true -ta=true -oe=false -d 2 receipt.go log.go diff --git a/core/types/receipt_codecgen_gen.go b/core/types/receipt_codecgen_gen.go index dd72603db77..c388148f9be 100644 --- a/core/types/receipt_codecgen_gen.go +++ b/core/types/receipt_codecgen_gen.go @@ -11,7 +11,6 @@ import ( codec1978 "github.com/ugorji/go/codec" pkg2_big "math/big" "runtime" - "sort" "strconv" ) @@ -32,8 +31,7 @@ const ( ) var ( - errCodecSelferOnlyMapOrArrayEncodeToStruct2 = errors.New(`only encoded map or array can be decoded into a struct`) - _ sort.Interface = nil + errCodecSelferOnlyMapOrArrayEncodeToStruct2 = errors.New(`only encoded map or array can be decoded into a struct`) ) type codecSelfer2 struct{} @@ -41,35 +39,11 @@ type codecSelfer2 struct{} func codecSelfer2False() bool { return false } func codecSelfer2True() bool { return true } -type codecSelfer2stringSlice []string - -func (p codecSelfer2stringSlice) Len() int { return len(p) } -func (p codecSelfer2stringSlice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p codecSelfer2stringSlice) Less(i, j int) bool { return p[uint(i)] < p[uint(j)] } - -type codecSelfer2uint64Slice []uint64 - -func (p codecSelfer2uint64Slice) Len() int { return len(p) } -func (p codecSelfer2uint64Slice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p codecSelfer2uint64Slice) Less(i, j int) bool { return p[uint(i)] < p[uint(j)] } - -type codecSelfer2int64Slice []int64 - -func (p codecSelfer2int64Slice) Len() int { return len(p) } -func (p codecSelfer2int64Slice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p codecSelfer2int64Slice) Less(i, j int) bool { return p[uint(i)] < p[uint(j)] } - -type codecSelfer2float64Slice []float64 - -func (p codecSelfer2float64Slice) Len() int { return len(p) } -func (p codecSelfer2float64Slice) Swap(i, j int) { p[uint(i)], p[uint(j)] = p[uint(j)], p[uint(i)] } -func (p codecSelfer2float64Slice) Less(i, j int) bool { return p[uint(i)] < p[uint(j)] } - func init() { - if codec1978.GenVersion != 28 { + if codec1978.GenVersion != 19 { _, file, _, _ := runtime.Caller(0) ver := strconv.FormatInt(int64(codec1978.GenVersion), 10) - panic(errors.New("codecgen version mismatch: current: 28, need " + ver + ". Re-generate file: " + file)) + panic(errors.New("codecgen version mismatch: current: 19, need " + ver + ". Re-generate file: " + file)) } if false { // reference the types, but skip this branch at build/run time var _ pkg1_common.Address @@ -77,15 +51,10 @@ func init() { } } -func (Receipt) codecSelferViaCodecgen() {} func (x *Receipt) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Encoder(e) + z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r - if z.EncBasicHandle().CheckCircularRef { - z.EncEncode(x) - return - } if x == nil { r.EncodeNil() } else { @@ -199,7 +168,7 @@ func (x *Receipt) CodecEncodeSelf(e *codec1978.Encoder) { func (x *Receipt) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r if !z.DecBinary() && z.IsJSONHandle() { z.DecJSONUnmarshal(x) @@ -228,18 +197,27 @@ func (x *Receipt) CodecDecodeSelf(d *codec1978.Decoder) { func (x *Receipt) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r var yyhl3 bool = l >= 0 - for yyj3 := 0; z.DecContainerNext(yyj3, l, yyhl3); yyj3++ { + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if z.DecCheckBreak() { + break + } + } z.DecReadMapElemKey() - yys3 := r.DecodeStringAsBytes() + yys3 := z.StringView(r.DecodeStringAsBytes()) z.DecReadMapElemValue() - switch string(yys3) { + switch yys3 { case "Type": x.Type = (uint8)(z.C.UintV(r.DecodeUint64(), 8)) case "1": - x.PostState = z.DecodeBytesInto(([]byte)(x.PostState)) + x.PostState = r.DecodeBytes(([]byte)(x.PostState), false) case "2": x.Status = (uint64)(r.DecodeUint64()) case "3": @@ -349,19 +327,24 @@ func (x *Receipt) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { *x.L1BlobBaseFeeScalar = (uint64)(r.DecodeUint64()) } default: - z.DecStructFieldNotFound(-1, string(yys3)) + z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 } // end for yyj3 } func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r var yyj25 int var yyb25 bool var yyhl25 bool = l >= 0 - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + yyj25++ + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -369,15 +352,23 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { z.DecReadArrayElem() x.Type = (uint8)(z.C.UintV(r.DecodeUint64(), 8)) yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return } z.DecReadArrayElem() - x.PostState = z.DecodeBytesInto(([]byte)(x.PostState)) + x.PostState = r.DecodeBytes(([]byte)(x.PostState), false) yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -385,7 +376,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { z.DecReadArrayElem() x.Status = (uint64)(r.DecodeUint64()) yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -393,7 +388,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { z.DecReadArrayElem() x.CumulativeGasUsed = (uint64)(r.DecodeUint64()) yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -410,7 +409,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { *x.DepositNonce = (uint64)(r.DecodeUint64()) } yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -431,7 +434,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } } yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -452,7 +459,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } } yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -473,7 +484,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } } yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -494,7 +509,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } } yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -511,7 +530,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { *x.DepositReceiptVersion = (uint64)(r.DecodeUint64()) } yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -528,7 +551,11 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { *x.L1BaseFeeScalar = (uint64)(r.DecodeUint64()) } yyj25++ - yyb25 = !z.DecContainerNext(yyj25, l, yyhl25) + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } if yyb25 { z.DecReadArrayEnd() return @@ -544,21 +571,28 @@ func (x *Receipt) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } *x.L1BlobBaseFeeScalar = (uint64)(r.DecodeUint64()) } - yyj25++ - for ; z.DecContainerNext(yyj25, l, yyhl25); yyj25++ { + for { + yyj25++ + if yyhl25 { + yyb25 = yyj25 > l + } else { + yyb25 = z.DecCheckBreak() + } + if yyb25 { + break + } z.DecReadArrayElem() z.DecStructFieldNotFound(yyj25-1, "") } } func (x *Receipt) IsCodecEmpty() bool { - return !(x.Type != 0 || len(x.PostState) != 0 || x.Status != 0 || x.CumulativeGasUsed != 0 || false) + return !(x.Type != 0 && len(x.PostState) != 0 && x.Status != 0 && x.CumulativeGasUsed != 0 && true) } -func (Receipts) codecSelferViaCodecgen() {} func (x Receipts) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Encoder(e) + z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r if x == nil { r.EncodeNil() @@ -569,20 +603,15 @@ func (x Receipts) CodecEncodeSelf(e *codec1978.Encoder) { func (x *Receipts) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r h.decReceipts((*Receipts)(x), d) } -func (Log) codecSelferViaCodecgen() {} func (x *Log) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Encoder(e) + z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r - if z.EncBasicHandle().CheckCircularRef { - z.EncEncode(x) - return - } if x == nil { r.EncodeNil() } else { @@ -598,7 +627,7 @@ func (x *Log) CodecEncodeSelf(e *codec1978.Encoder) { if !z.EncBinary() { z.EncTextMarshal(*yy6) } else { - z.F.EncSliceUint8V(([]uint8)(yy6[:]), e) + h.enccommon_Address((*pkg1_common.Address)(yy6), e) } z.EncWriteArrayElem() if x.Topics == nil { @@ -619,7 +648,7 @@ func (x *Log) CodecEncodeSelf(e *codec1978.Encoder) { func (x *Log) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r if !z.DecBinary() && z.IsJSONHandle() { z.DecJSONUnmarshal(x) @@ -648,38 +677,52 @@ func (x *Log) CodecDecodeSelf(d *codec1978.Decoder) { func (x *Log) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r var yyhl3 bool = l >= 0 - for yyj3 := 0; z.DecContainerNext(yyj3, l, yyhl3); yyj3++ { + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if z.DecCheckBreak() { + break + } + } z.DecReadMapElemKey() - yys3 := r.DecodeStringAsBytes() + yys3 := z.StringView(r.DecodeStringAsBytes()) z.DecReadMapElemValue() - switch string(yys3) { + switch yys3 { case "1": if !z.DecBinary() && z.IsJSONHandle() { z.DecJSONUnmarshal(&x.Address) } else { - z.F.DecSliceUint8N(([]uint8)(x.Address[:]), d) + h.deccommon_Address((*pkg1_common.Address)(&x.Address), d) } case "2": h.decSlicecommon_Hash((*[]pkg1_common.Hash)(&x.Topics), d) case "3": - x.Data = z.DecodeBytesInto(([]byte)(x.Data)) + x.Data = r.DecodeBytes(([]byte)(x.Data), false) default: - z.DecStructFieldNotFound(-1, string(yys3)) + z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 } // end for yyj3 } func (x *Log) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r var yyj10 int var yyb10 bool var yyhl10 bool = l >= 0 - yyb10 = !z.DecContainerNext(yyj10, l, yyhl10) + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = z.DecCheckBreak() + } if yyb10 { z.DecReadArrayEnd() return @@ -688,10 +731,14 @@ func (x *Log) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if !z.DecBinary() && z.IsJSONHandle() { z.DecJSONUnmarshal(&x.Address) } else { - z.F.DecSliceUint8N(([]uint8)(x.Address[:]), d) + h.deccommon_Address((*pkg1_common.Address)(&x.Address), d) } yyj10++ - yyb10 = !z.DecContainerNext(yyj10, l, yyhl10) + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = z.DecCheckBreak() + } if yyb10 { z.DecReadArrayEnd() return @@ -699,28 +746,39 @@ func (x *Log) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { z.DecReadArrayElem() h.decSlicecommon_Hash((*[]pkg1_common.Hash)(&x.Topics), d) yyj10++ - yyb10 = !z.DecContainerNext(yyj10, l, yyhl10) + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = z.DecCheckBreak() + } if yyb10 { z.DecReadArrayEnd() return } z.DecReadArrayElem() - x.Data = z.DecodeBytesInto(([]byte)(x.Data)) - yyj10++ - for ; z.DecContainerNext(yyj10, l, yyhl10); yyj10++ { + x.Data = r.DecodeBytes(([]byte)(x.Data), false) + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = z.DecCheckBreak() + } + if yyb10 { + break + } z.DecReadArrayElem() z.DecStructFieldNotFound(yyj10-1, "") } } func (x *Log) IsCodecEmpty() bool { - return !(x.Address != pkg1_common.Address{} || len(x.Topics) != 0 || len(x.Data) != 0 || false) + return !(len(x.Address) != 0 && len(x.Topics) != 0 && len(x.Data) != 0 && true) } -func (Logs) codecSelferViaCodecgen() {} func (x Logs) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Encoder(e) + z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r if x == nil { r.EncodeNil() @@ -731,26 +789,26 @@ func (x Logs) CodecEncodeSelf(e *codec1978.Encoder) { func (x *Logs) CodecDecodeSelf(d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r h.decLogs((*Logs)(x), d) } func (x codecSelfer2) encReceipts(v Receipts, e *codec1978.Encoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Encoder(e) + z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r if v == nil { r.EncodeNil() return } z.EncWriteArrayStart(len(v)) - for yyv1 := range v { + for _, yyv1 := range v { z.EncWriteArrayElem() - if v[yyv1] == nil { + if yyv1 == nil { r.EncodeNil() } else { - v[yyv1].CodecEncodeSelf(e) + yyv1.CodecEncodeSelf(e) } } z.EncWriteArrayEnd() @@ -758,7 +816,7 @@ func (x codecSelfer2) encReceipts(v Receipts, e *codec1978.Encoder) { func (x codecSelfer2) decReceipts(v *Receipts, d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r yyv1 := *v @@ -797,7 +855,7 @@ func (x codecSelfer2) decReceipts(v *Receipts, d *codec1978.Decoder) { } } var yyj1 int - for yyj1 = 0; z.DecContainerNext(yyj1, yyl1, yyhl1); yyj1++ { + for yyj1 = 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || z.DecCheckBreak()); yyj1++ { // bounds-check-elimination if yyj1 == 0 && yyv1 == nil { if yyhl1 { yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) @@ -830,7 +888,7 @@ func (x codecSelfer2) decReceipts(v *Receipts, d *codec1978.Decoder) { yyv1 = yyv1[:yyj1] yyc1 = true } else if yyj1 == 0 && yyv1 == nil { - yyv1 = []*Receipt{} + yyv1 = make([]*Receipt, 0) yyc1 = true } } @@ -840,22 +898,40 @@ func (x codecSelfer2) decReceipts(v *Receipts, d *codec1978.Decoder) { } } +func (x codecSelfer2) enccommon_Address(v *pkg1_common.Address, e *codec1978.Encoder) { + var h codecSelfer2 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if v == nil { + r.EncodeNil() + return + } + r.EncodeStringBytesRaw(((*[20]byte)(v))[:]) +} + +func (x codecSelfer2) deccommon_Address(v *pkg1_common.Address, d *codec1978.Decoder) { + var h codecSelfer2 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + r.DecodeBytes(((*[20]byte)(v))[:], true) +} + func (x codecSelfer2) encSlicecommon_Hash(v []pkg1_common.Hash, e *codec1978.Encoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Encoder(e) + z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r if v == nil { r.EncodeNil() return } z.EncWriteArrayStart(len(v)) - for yyv1 := range v { + for _, yyv1 := range v { z.EncWriteArrayElem() - yy2 := &v[yyv1] + yy2 := &yyv1 if !z.EncBinary() { z.EncTextMarshal(*yy2) } else { - z.F.EncSliceUint8V(([]uint8)(yy2[:]), e) + h.enccommon_Hash((*pkg1_common.Hash)(yy2), e) } } z.EncWriteArrayEnd() @@ -863,7 +939,7 @@ func (x codecSelfer2) encSlicecommon_Hash(v []pkg1_common.Hash, e *codec1978.Enc func (x codecSelfer2) decSlicecommon_Hash(v *[]pkg1_common.Hash, d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r yyv1 := *v @@ -902,7 +978,7 @@ func (x codecSelfer2) decSlicecommon_Hash(v *[]pkg1_common.Hash, d *codec1978.De } } var yyj1 int - for yyj1 = 0; z.DecContainerNext(yyj1, yyl1, yyhl1); yyj1++ { + for yyj1 = 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || z.DecCheckBreak()); yyj1++ { // bounds-check-elimination if yyj1 == 0 && yyv1 == nil { if yyhl1 { yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 32) @@ -924,7 +1000,7 @@ func (x codecSelfer2) decSlicecommon_Hash(v *[]pkg1_common.Hash, d *codec1978.De if !z.DecBinary() && z.IsJSONHandle() { z.DecJSONUnmarshal(&yyv1[yyj1]) } else { - z.F.DecSliceUint8N(([]uint8)(yyv1[yyj1][:]), d) + h.deccommon_Hash((*pkg1_common.Hash)(&yyv1[yyj1]), d) } } } @@ -932,7 +1008,7 @@ func (x codecSelfer2) decSlicecommon_Hash(v *[]pkg1_common.Hash, d *codec1978.De yyv1 = yyv1[:yyj1] yyc1 = true } else if yyj1 == 0 && yyv1 == nil { - yyv1 = []pkg1_common.Hash{} + yyv1 = make([]pkg1_common.Hash, 0) yyc1 = true } } @@ -942,21 +1018,39 @@ func (x codecSelfer2) decSlicecommon_Hash(v *[]pkg1_common.Hash, d *codec1978.De } } +func (x codecSelfer2) enccommon_Hash(v *pkg1_common.Hash, e *codec1978.Encoder) { + var h codecSelfer2 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if v == nil { + r.EncodeNil() + return + } + r.EncodeStringBytesRaw(((*[32]byte)(v))[:]) +} + +func (x codecSelfer2) deccommon_Hash(v *pkg1_common.Hash, d *codec1978.Decoder) { + var h codecSelfer2 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + r.DecodeBytes(((*[32]byte)(v))[:], true) +} + func (x codecSelfer2) encLogs(v Logs, e *codec1978.Encoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Encoder(e) + z, r := codec1978.GenHelperEncoder(e) _, _, _ = h, z, r if v == nil { r.EncodeNil() return } z.EncWriteArrayStart(len(v)) - for yyv1 := range v { + for _, yyv1 := range v { z.EncWriteArrayElem() - if v[yyv1] == nil { + if yyv1 == nil { r.EncodeNil() } else { - v[yyv1].CodecEncodeSelf(e) + yyv1.CodecEncodeSelf(e) } } z.EncWriteArrayEnd() @@ -964,7 +1058,7 @@ func (x codecSelfer2) encLogs(v Logs, e *codec1978.Encoder) { func (x codecSelfer2) decLogs(v *Logs, d *codec1978.Decoder) { var h codecSelfer2 - z, r := codec1978.GenHelper().Decoder(d) + z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r yyv1 := *v @@ -1003,7 +1097,7 @@ func (x codecSelfer2) decLogs(v *Logs, d *codec1978.Decoder) { } } var yyj1 int - for yyj1 = 0; z.DecContainerNext(yyj1, yyl1, yyhl1); yyj1++ { + for yyj1 = 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || z.DecCheckBreak()); yyj1++ { // bounds-check-elimination if yyj1 == 0 && yyv1 == nil { if yyhl1 { yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) @@ -1036,7 +1130,7 @@ func (x codecSelfer2) decLogs(v *Logs, d *codec1978.Decoder) { yyv1 = yyv1[:yyj1] yyc1 = true } else if yyj1 == 0 && yyv1 == nil { - yyv1 = []*Log{} + yyv1 = make([]*Log, 0) yyc1 = true } } diff --git a/core/types/transaction.go b/core/types/transaction.go index a6db9307175..4370073f72c 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -18,13 +18,11 @@ package types import ( "bytes" - "container/heap" "errors" "fmt" "io" "math/big" "sync/atomic" - "time" "github.com/holiman/uint256" "github.com/ledgerwatch/log/v3" @@ -65,12 +63,10 @@ type Transaction interface { GetTip() *uint256.Int GetEffectiveGasTip(baseFee *uint256.Int) *uint256.Int GetFeeCap() *uint256.Int - Cost() *uint256.Int GetBlobHashes() []libcommon.Hash GetGas() uint64 GetBlobGas() uint64 GetValue() *uint256.Int - Time() time.Time GetTo() *libcommon.Address AsMessage(s Signer, baseFee *big.Int, rules *chain.Rules) (Message, error) WithSignature(signer Signer, sig []byte) (Transaction, error) @@ -99,11 +95,9 @@ type Transaction interface { Unwrap() Transaction // If this is a network wrapper, returns the unwrapped tx. Otherwiwes returns itself. } -// TransactionMisc is collection of miscelaneous fields for transaction that is supposed to be embedded into concrete +// TransactionMisc is collection of miscellaneous fields for transaction that is supposed to be embedded into concrete // implementations of different transaction types type TransactionMisc struct { - time time.Time // Time first seen locally (spam avoidance) - // caches hash atomic.Value //nolint:structcheck from atomic.Value @@ -167,15 +161,7 @@ func (t BinaryTransactions) EncodeIndex(i int, w *bytes.Buffer) { w.Write(t[i]) } -func (tm TransactionMisc) Time() time.Time { - return tm.time -} - -func (tm TransactionMisc) From() *atomic.Value { - return &tm.from -} - -func DecodeRLPTransaction(s *rlp.Stream) (Transaction, error) { +func DecodeRLPTransaction(s *rlp.Stream, blobTxnsAreWrappedWithBlobs bool) (Transaction, error) { kind, size, err := s.Kind() if err != nil { return nil, err @@ -198,51 +184,51 @@ func DecodeRLPTransaction(s *rlp.Stream) (Transaction, error) { if len(b) == 0 { return nil, rlp.EOL } - return UnmarshalTransactionFromBinary(b) + return UnmarshalTransactionFromBinary(b, blobTxnsAreWrappedWithBlobs) } -// DecodeWrappedTransaction decodes network encoded transaction with or without -// envelope. When transaction is not network encoded use DecodeTransaction. +// DecodeWrappedTransaction as similar to DecodeTransaction, +// but type-3 (blob) transactions are expected to be wrapped with blobs/commitments/proofs. +// See https://eips.ethereum.org/EIPS/eip-4844#networking func DecodeWrappedTransaction(data []byte) (Transaction, error) { + blobTxnsAreWrappedWithBlobs := true if len(data) == 0 { return nil, io.EOF } if data[0] < 0x80 { // the encoding is canonical, not RLP - - return UnmarshalWrappedTransactionFromBinary(data) + return UnmarshalTransactionFromBinary(data, blobTxnsAreWrappedWithBlobs) } s := rlp.NewStream(bytes.NewReader(data), uint64(len(data))) - return DecodeRLPTransaction(s) + return DecodeRLPTransaction(s, blobTxnsAreWrappedWithBlobs) } // DecodeTransaction decodes a transaction either in RLP or canonical format func DecodeTransaction(data []byte) (Transaction, error) { + blobTxnsAreWrappedWithBlobs := false if len(data) == 0 { return nil, io.EOF } - if data[0] < 0x80 { - // the encoding is canonical, not RLP - return UnmarshalTransactionFromBinary(data) + if data[0] < 0x80 { // the encoding is canonical, not RLP + return UnmarshalTransactionFromBinary(data, blobTxnsAreWrappedWithBlobs) } s := rlp.NewStream(bytes.NewReader(data), uint64(len(data))) - return DecodeRLPTransaction(s) + return DecodeRLPTransaction(s, blobTxnsAreWrappedWithBlobs) } // Parse transaction without envelope. -func UnmarshalTransactionFromBinary(data []byte) (Transaction, error) { +func UnmarshalTransactionFromBinary(data []byte, blobTxnsAreWrappedWithBlobs bool) (Transaction, error) { if len(data) <= 1 { return nil, fmt.Errorf("short input: %v", len(data)) } + s := rlp.NewStream(bytes.NewReader(data[1:]), uint64(len(data)-1)) switch data[0] { case AccessListTxType: - s := rlp.NewStream(bytes.NewReader(data[1:]), uint64(len(data)-1)) t := &AccessListTx{} if err := t.DecodeRLP(s); err != nil { return nil, err } return t, nil case DynamicFeeTxType: - s := rlp.NewStream(bytes.NewReader(data[1:]), uint64(len(data)-1)) t := &DynamicFeeTransaction{} if err := t.DecodeRLP(s); err != nil { return nil, err @@ -256,12 +242,19 @@ func UnmarshalTransactionFromBinary(data []byte) (Transaction, error) { } return t, nil case BlobTxType: - s := rlp.NewStream(bytes.NewReader(data[1:]), uint64(len(data)-1)) - t := &BlobTx{} - if err := t.DecodeRLP(s); err != nil { - return nil, err + if blobTxnsAreWrappedWithBlobs { + t := &BlobTxWrapper{} + if err := t.DecodeRLP(s); err != nil { + return nil, err + } + return t, nil + } else { + t := &BlobTx{} + if err := t.DecodeRLP(s); err != nil { + return nil, err + } + return t, nil } - return t, nil default: if data[0] >= 0x80 { // Tx is type legacy which is RLP encoded @@ -271,20 +264,18 @@ func UnmarshalTransactionFromBinary(data []byte) (Transaction, error) { } } -// Parse network encoded transaction without envelope. -func UnmarshalWrappedTransactionFromBinary(data []byte) (Transaction, error) { - if len(data) <= 1 { - return nil, fmt.Errorf("short input: %v", len(data)) - } - if data[0] != BlobTxType { - return UnmarshalTransactionFromBinary(data) +// Remove everything but the payload body from the wrapper - this is not used, for reference only +func UnwrapTxPlayloadRlp(blobTxRlp []byte) (retRlp []byte, err error) { + if blobTxRlp[0] != BlobTxType { + return blobTxRlp, nil } - s := rlp.NewStream(bytes.NewReader(data[1:]), uint64(len(data)-1)) - t := &BlobTxWrapper{} - if err := t.DecodeRLP(s); err != nil { + it, err := rlp.NewListIterator(blobTxRlp[1:]) + if err != nil { return nil, err } - return t, nil + it.Next() + retRlp = it.Value() + return } func MarshalTransactionsBinary(txs Transactions) ([][]byte, error) { @@ -310,7 +301,7 @@ func DecodeTransactions(txs [][]byte) ([]Transaction, error) { result := make([]Transaction, len(txs)) var err error for i := range txs { - result[i], err = UnmarshalTransactionFromBinary(txs[i]) + result[i], err = UnmarshalTransactionFromBinary(txs[i], false /* blobTxnsAreWrappedWithBlobs*/) if err != nil { return nil, err } @@ -403,35 +394,6 @@ func (s TxByNonce) Len() int { return len(s) } func (s TxByNonce) Less(i, j int) bool { return s[i].GetNonce() < s[j].GetNonce() } func (s TxByNonce) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -// TxByPriceAndTime implements both the sort and the heap interface, making it useful -// for all at once sorting as well as individually adding and removing elements. -type TxByPriceAndTime Transactions - -func (s TxByPriceAndTime) Len() int { return len(s) } -func (s TxByPriceAndTime) Less(i, j int) bool { - // If the prices are equal, use the time the transaction was first seen for - // deterministic sorting - cmp := s[i].GetPrice().Cmp(s[j].GetPrice()) - if cmp == 0 { - return s[i].Time().Before(s[j].Time()) - } - return cmp > 0 -} -func (s TxByPriceAndTime) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -func (s *TxByPriceAndTime) Push(x interface{}) { - *s = append(*s, x.(Transaction)) -} - -func (s *TxByPriceAndTime) Pop() interface{} { - old := *s - n := len(old) - x := old[n-1] - old[n-1] = nil // avoid memory leak - *s = old[0 : n-1] - return x -} - type TransactionsStream interface { Empty() bool Peek() Transaction @@ -439,89 +401,6 @@ type TransactionsStream interface { Pop() } -// TransactionsByPriceAndNonce represents a set of transactions that can return -// transactions in a profit-maximizing sorted order, while supporting removing -// entire batches of transactions for non-executable accounts. -type TransactionsByPriceAndNonce struct { - idx map[libcommon.Address]int // Per account nonce-sorted list of transactions - txs TransactionsGroupedBySender // Per account nonce-sorted list of transactions - heads TxByPriceAndTime // Next transaction for each unique account (price heap) - signer Signer // Signer for the set of transactions -} - -// NewTransactionsByPriceAndNonce creates a transaction set that can retrieve -// price sorted transactions in a nonce-honouring way. -// -// Note, the input map is reowned so the caller should not interact any more with -// if after providing it to the constructor. -func NewTransactionsByPriceAndNonce(signer Signer, txs TransactionsGroupedBySender) *TransactionsByPriceAndNonce { - // Initialize a price and received time based heap with the head transactions - heads := make(TxByPriceAndTime, 0, len(txs)) - idx := make(map[libcommon.Address]int, len(txs)) - for i, accTxs := range txs { - from, _ := accTxs[0].Sender(signer) - - // Ensure the sender address is from the signer - //if acc != from { - // delete(txs, from) - //txs[i] = txs[len(txs)-1] - //txs = txs[:len(txs)-1] - //continue - //} - heads = append(heads, accTxs[0]) - idx[from] = i - txs[i] = accTxs[1:] - } - heap.Init(&heads) - - // Assemble and return the transaction set - return &TransactionsByPriceAndNonce{ - idx: idx, - txs: txs, - heads: heads, - signer: signer, - } -} - -func (t *TransactionsByPriceAndNonce) Empty() bool { - if t == nil { - return true - } - return len(t.idx) == 0 -} - -// Peek returns the next transaction by price. -func (t *TransactionsByPriceAndNonce) Peek() Transaction { - if len(t.heads) == 0 { - return nil - } - return t.heads[0] -} - -// Shift replaces the current best head with the next one from the same account. -func (t *TransactionsByPriceAndNonce) Shift() { - acc, _ := t.heads[0].Sender(t.signer) - idx, ok := t.idx[acc] - if !ok { - heap.Pop(&t.heads) - return - } - txs := t.txs[idx] - if len(txs) == 0 { - heap.Pop(&t.heads) - return - } - t.heads[0], t.txs[idx] = txs[0], txs[1:] - heap.Fix(&t.heads, 0) -} - -// Pop removes the best transaction, *not* replacing it with the next one from -// the same account. This should be used when a transaction cannot be executed -// and hence all subsequent ones should be discarded from the same account. -func (t *TransactionsByPriceAndNonce) Pop() { - heap.Pop(&t.heads) -} - // TransactionsFixedOrder represents a set of transactions that can return // transactions in a profit-maximizing sorted order, while supporting removing // entire batches of transactions for non-executable accounts. diff --git a/core/types/transaction_marshalling.go b/core/types/transaction_marshalling.go index 2cf8fb20a44..a2916d30b94 100644 --- a/core/types/transaction_marshalling.go +++ b/core/types/transaction_marshalling.go @@ -54,7 +54,7 @@ type txJSON struct { Hash libcommon.Hash `json:"hash"` } -func (tx LegacyTx) MarshalJSON() ([]byte, error) { +func (tx *LegacyTx) MarshalJSON() ([]byte, error) { var enc txJSON // These are set for all tx types. enc.Hash = tx.Hash() @@ -74,7 +74,7 @@ func (tx LegacyTx) MarshalJSON() ([]byte, error) { return json.Marshal(&enc) } -func (tx AccessListTx) MarshalJSON() ([]byte, error) { +func (tx *AccessListTx) MarshalJSON() ([]byte, error) { var enc txJSON // These are set for all tx types. enc.Hash = tx.Hash() @@ -93,7 +93,7 @@ func (tx AccessListTx) MarshalJSON() ([]byte, error) { return json.Marshal(&enc) } -func (tx DynamicFeeTransaction) MarshalJSON() ([]byte, error) { +func (tx *DynamicFeeTransaction) MarshalJSON() ([]byte, error) { var enc txJSON // These are set for all tx types. enc.Hash = tx.Hash() @@ -155,11 +155,11 @@ func toBlobTxJSON(tx *BlobTx) *txJSON { return &enc } -func (tx BlobTx) MarshalJSON() ([]byte, error) { - return json.Marshal(toBlobTxJSON(&tx)) +func (tx *BlobTx) MarshalJSON() ([]byte, error) { + return json.Marshal(toBlobTxJSON(tx)) } -func (tx BlobTxWrapper) MarshalJSON() ([]byte, error) { +func (tx *BlobTxWrapper) MarshalJSON() ([]byte, error) { enc := toBlobTxJSON(&tx.Tx) enc.Blobs = tx.Blobs diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go index cdb05b69680..dfa5fd217b7 100644 --- a/core/types/transaction_test.go +++ b/core/types/transaction_test.go @@ -29,11 +29,16 @@ import ( "testing" "time" + gokzg4844 "github.com/crate-crypto/go-kzg-4844" "github.com/holiman/uint256" "github.com/stretchr/testify/assert" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/fixedgas" + "github.com/ledgerwatch/erigon-lib/common/hexutility" + "github.com/ledgerwatch/erigon-lib/crypto/kzg" + "github.com/ledgerwatch/erigon-lib/txpool" + libtypes "github.com/ledgerwatch/erigon-lib/types" types2 "github.com/ledgerwatch/erigon-lib/types" "github.com/ledgerwatch/erigon/common" @@ -359,91 +364,6 @@ func TestTransactionPriceNonceSort(t *testing.T) { } } } - // Sort the transactions and cross check the nonce ordering - txset := NewTransactionsByPriceAndNonce(*signer, groups) - - txs := Transactions{} - for tx := txset.Peek(); tx != nil; tx = txset.Peek() { - txs = append(txs, tx) - txset.Shift() - } - if len(txs) != 25*25 { - t.Errorf("expected %d transactions, found %d", 25*25, len(txs)) - } - for i, txi := range txs { - fromi, _ := txi.Sender(*signer) - - // Make sure the nonce order is valid - for j, txj := range txs[i+1:] { - fromj, _ := txj.Sender(*signer) - if fromi == fromj && txi.GetNonce() > txj.GetNonce() { - t.Errorf("invalid nonce ordering: tx #%d (A=%x N=%v) < tx #%d (A=%x N=%v)", i, fromi[:4], txi.GetNonce(), i+j, fromj[:4], txj.GetNonce()) - } - } - // If the next tx has different from account, the price must be lower than the current one - if i+1 < len(txs) { - next := txs[i+1] - fromNext, _ := next.Sender(*signer) - if fromi != fromNext && txi.GetPrice().Cmp(next.GetPrice()) < 0 { - t.Errorf("invalid gasprice ordering: tx #%d (A=%x P=%v) < tx #%d (A=%x P=%v)", i, fromi[:4], txi.GetPrice(), i+1, fromNext[:4], next.GetPrice()) - } - } - } -} - -// Tests that if multiple transactions have the same price, the ones seen earlier -// are prioritized to avoid network spam attacks aiming for a specific ordering. -func TestTransactionTimeSort(t *testing.T) { - t.Parallel() - // Generate a batch of accounts to start with - keys := make([]*ecdsa.PrivateKey, 5) - for i := 0; i < len(keys); i++ { - keys[i], _ = crypto.GenerateKey() - } - signer := LatestSignerForChainID(nil) - - // Generate a batch of transactions with overlapping prices, but different creation times - idx := map[libcommon.Address]int{} - groups := TransactionsGroupedBySender{} - for start, key := range keys { - addr := crypto.PubkeyToAddress(key.PublicKey) - - tx, _ := SignTx(NewTransaction(0, libcommon.Address{}, uint256.NewInt(100), 100, uint256.NewInt(1), nil), *signer, key) - tx.(*LegacyTx).time = time.Unix(0, int64(len(keys)-start)) - i, ok := idx[addr] - if ok { - groups[i] = append(groups[i], tx) - } else { - idx[addr] = len(groups) - groups = append(groups, Transactions{tx}) - } - } - // Sort the transactions and cross check the nonce ordering - txset := NewTransactionsByPriceAndNonce(*signer, groups) - - txs := Transactions{} - for tx := txset.Peek(); tx != nil; tx = txset.Peek() { - txs = append(txs, tx) - txset.Shift() - } - if len(txs) != len(keys) { - t.Errorf("expected %d transactions, found %d", len(keys), len(txs)) - } - for i, txi := range txs { - fromi, _ := txi.Sender(*signer) - if i+1 < len(txs) { - next := txs[i+1] - fromNext, _ := next.Sender(*signer) - - if txi.GetPrice().Cmp(next.GetPrice()) < 0 { - t.Errorf("invalid gasprice ordering: tx #%d (A=%x P=%v) < tx #%d (A=%x P=%v)", i, fromi[:4], txi.GetPrice(), i+1, fromNext[:4], next.GetPrice()) - } - // Make sure time order is ascending if the txs have the same gas price - if txi.GetPrice().Cmp(next.GetPrice()) == 0 && txi.(*LegacyTx).time.After(next.(*LegacyTx).time) { - t.Errorf("invalid received time ordering: tx #%d (A=%x T=%v) > tx #%d (A=%x T=%v)", i, fromi[:4], txi.(*LegacyTx).time, i+1, fromNext[:4], next.(*LegacyTx).time) - } - } - } } // TestTransactionCoding tests serializing/de-serializing to/from rlp and JSON. @@ -569,7 +489,7 @@ func encodeDecodeBinary(tx Transaction) (Transaction, error) { return nil, fmt.Errorf("rlp encoding failed: %w", err) } var parsedTx Transaction - if parsedTx, err = UnmarshalTransactionFromBinary(buf.Bytes()); err != nil { + if parsedTx, err = UnmarshalTransactionFromBinary(buf.Bytes(), false /* blobTxnsAreWrappedWithBlobs */); err != nil { return nil, fmt.Errorf("rlp decoding failed: %w", err) } return parsedTx, nil @@ -816,3 +736,93 @@ func TestBlobTxEncodeDecode(t *testing.T) { } } } + +func makeBlobTxRlp() []byte { + bodyRlp := hexutility.MustDecodeHex(txpool.BodyRlpHex) + + blobsRlpPrefix := hexutility.MustDecodeHex("fa040008") + blobRlpPrefix := hexutility.MustDecodeHex("ba020000") + + var blob0, blob1 = gokzg4844.Blob{}, gokzg4844.Blob{} + copy(blob0[:], hexutility.MustDecodeHex(txpool.ValidBlob1Hex)) + copy(blob1[:], hexutility.MustDecodeHex(txpool.ValidBlob2Hex)) + + var err error + proofsRlpPrefix := hexutility.MustDecodeHex("f862") + commitment0, _ := kzg.Ctx().BlobToKZGCommitment(blob0, 0) + commitment1, _ := kzg.Ctx().BlobToKZGCommitment(blob1, 0) + + proof0, err := kzg.Ctx().ComputeBlobKZGProof(blob0, commitment0, 0) + if err != nil { + fmt.Println("error", err) + } + proof1, err := kzg.Ctx().ComputeBlobKZGProof(blob1, commitment1, 0) + if err != nil { + fmt.Println("error", err) + } + + wrapperRlp := hexutility.MustDecodeHex("03fa0401fe") + wrapperRlp = append(wrapperRlp, bodyRlp...) + wrapperRlp = append(wrapperRlp, blobsRlpPrefix...) + wrapperRlp = append(wrapperRlp, blobRlpPrefix...) + wrapperRlp = append(wrapperRlp, blob0[:]...) + wrapperRlp = append(wrapperRlp, blobRlpPrefix...) + wrapperRlp = append(wrapperRlp, blob1[:]...) + wrapperRlp = append(wrapperRlp, proofsRlpPrefix...) + wrapperRlp = append(wrapperRlp, 0xb0) + wrapperRlp = append(wrapperRlp, commitment0[:]...) + wrapperRlp = append(wrapperRlp, 0xb0) + wrapperRlp = append(wrapperRlp, commitment1[:]...) + wrapperRlp = append(wrapperRlp, proofsRlpPrefix...) + wrapperRlp = append(wrapperRlp, 0xb0) + wrapperRlp = append(wrapperRlp, proof0[:]...) + wrapperRlp = append(wrapperRlp, 0xb0) + wrapperRlp = append(wrapperRlp, proof1[:]...) + + return wrapperRlp +} + +// This test is for reference +func TestShortUnwrap(t *testing.T) { + blobTxRlp := makeBlobTxRlp() + shortRlp, err := UnwrapTxPlayloadRlp(blobTxRlp) + if err != nil { + t.Errorf("short rlp stripping failed: %v", err) + return + } + prefixedRlp := append([]byte{0x03}, shortRlp...) // Added the 0x3 prefix for DecodeTransaction func + bbtx, err := DecodeTransaction(prefixedRlp) + + if err != nil { + t.Errorf("short rlp decoding failed : %v", err) + } + wrappedBlobTx := BlobTxWrapper{} + err = wrappedBlobTx.DecodeRLP(rlp.NewStream(bytes.NewReader(blobTxRlp[1:]), 0)) + if err != nil { + t.Errorf("long rlp decoding failed: %v", err) + } + assertEqual(bbtx, &wrappedBlobTx.Tx) +} + +// This test actually applies to testing the behaviour as seen from the +// onNewTx behaviour in filters.go +func TestShortUnwrapLib(t *testing.T) { + blobTxRlp := makeBlobTxRlp() + shortRlp, err := libtypes.UnwrapTxPlayloadRlp(blobTxRlp) + if err != nil { + t.Errorf("short rlp stripping failed: %v", err) + return + } + blobTx, err := DecodeTransaction(shortRlp) + + if err != nil { + t.Errorf("short rlp decoding failed : %v", err) + } + wrappedBlobTx := BlobTxWrapper{} + err = wrappedBlobTx.DecodeRLP(rlp.NewStream(bytes.NewReader(makeBlobTxRlp()[1:]), 0)) + if err != nil { + t.Errorf("long rlp decoding failed: %v", err) + } + + assertEqual(blobTx, &wrappedBlobTx.Tx) +} diff --git a/core/types/withdrawal.go b/core/types/withdrawal.go index 5dede6a0abc..286a6e75fce 100644 --- a/core/types/withdrawal.go +++ b/core/types/withdrawal.go @@ -19,16 +19,15 @@ package types import ( "bytes" "fmt" - "github.com/ledgerwatch/erigon-lib/common/hexutil" "io" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/types/clonable" - "github.com/ledgerwatch/erigon/rlp" ) -//go:generate go run github.com/fjl/gencodec -type Withdrawal -field-override withdrawalMarshaling -out gen_withdrawal_json.go +//go:generate gencodec -type Withdrawal -field-override withdrawalMarshaling -out gen_withdrawal_json.go // Withdrawal represents a validator withdrawal from the consensus layer. // See EIP-4895: Beacon chain push withdrawals as operations. diff --git a/core/vm/contracts.go b/core/vm/contracts.go index fadd1ffef9c..ce38a949ee5 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -22,6 +22,10 @@ import ( "errors" "math/big" + "github.com/consensys/gnark-crypto/ecc" + bls12381 "github.com/consensys/gnark-crypto/ecc/bls12-381" + "github.com/consensys/gnark-crypto/ecc/bls12-381/fp" + "github.com/consensys/gnark-crypto/ecc/bls12-381/fr" "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/chain" @@ -32,7 +36,6 @@ import ( "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/erigon/common/math" "github.com/ledgerwatch/erigon/crypto" - "github.com/ledgerwatch/erigon/crypto/bls12381" "github.com/ledgerwatch/erigon/crypto/bn256" "github.com/ledgerwatch/erigon/crypto/secp256r1" "github.com/ledgerwatch/erigon/params" @@ -141,22 +144,31 @@ var PrecompiledContractsNapoli = map[libcommon.Address]PrecompiledContract{ libcommon.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{}, } -// PrecompiledContractsBLS contains the set of pre-compiled Ethereum -// contracts specified in EIP-2537. These are exported for testing purposes. -var PrecompiledContractsBLS = map[libcommon.Address]PrecompiledContract{ - libcommon.BytesToAddress([]byte{0x0c}): &bls12381G1Add{}, - libcommon.BytesToAddress([]byte{0x0d}): &bls12381G1Mul{}, - libcommon.BytesToAddress([]byte{0x0e}): &bls12381G1MultiExp{}, - libcommon.BytesToAddress([]byte{0x0f}): &bls12381G2Add{}, - libcommon.BytesToAddress([]byte{0x10}): &bls12381G2Mul{}, - libcommon.BytesToAddress([]byte{0x11}): &bls12381G2MultiExp{}, - libcommon.BytesToAddress([]byte{0x12}): &bls12381Pairing{}, - libcommon.BytesToAddress([]byte{0x13}): &bls12381MapG1{}, - libcommon.BytesToAddress([]byte{0x14}): &bls12381MapG2{}, +var PrecompiledContractsPrague = map[libcommon.Address]PrecompiledContract{ + libcommon.BytesToAddress([]byte{0x01}): &ecrecover{}, + libcommon.BytesToAddress([]byte{0x02}): &sha256hash{}, + libcommon.BytesToAddress([]byte{0x03}): &ripemd160hash{}, + libcommon.BytesToAddress([]byte{0x04}): &dataCopy{}, + libcommon.BytesToAddress([]byte{0x05}): &bigModExp{eip2565: true}, + libcommon.BytesToAddress([]byte{0x06}): &bn256AddIstanbul{}, + libcommon.BytesToAddress([]byte{0x07}): &bn256ScalarMulIstanbul{}, + libcommon.BytesToAddress([]byte{0x08}): &bn256PairingIstanbul{}, + libcommon.BytesToAddress([]byte{0x09}): &blake2F{}, + libcommon.BytesToAddress([]byte{0x0a}): &pointEvaluation{}, + libcommon.BytesToAddress([]byte{0x0b}): &bls12381G1Add{}, + libcommon.BytesToAddress([]byte{0x0c}): &bls12381G1Mul{}, + libcommon.BytesToAddress([]byte{0x0d}): &bls12381G1MultiExp{}, + libcommon.BytesToAddress([]byte{0x0e}): &bls12381G2Add{}, + libcommon.BytesToAddress([]byte{0x0f}): &bls12381G2Mul{}, + libcommon.BytesToAddress([]byte{0x10}): &bls12381G2MultiExp{}, + libcommon.BytesToAddress([]byte{0x11}): &bls12381Pairing{}, + libcommon.BytesToAddress([]byte{0x12}): &bls12381MapFpToG1{}, + libcommon.BytesToAddress([]byte{0x13}): &bls12381MapFp2ToG2{}, } var ( PrecompiledAddressesFjord []libcommon.Address + PrecompiledAddressesPrague []libcommon.Address PrecompiledAddressesNapoli []libcommon.Address PrecompiledAddressesCancun []libcommon.Address PrecompiledAddressesBerlin []libcommon.Address @@ -187,6 +199,9 @@ func init() { for k := range PrecompiledContractsNapoli { PrecompiledAddressesNapoli = append(PrecompiledAddressesNapoli, k) } + for k := range PrecompiledContractsPrague { + PrecompiledAddressesPrague = append(PrecompiledAddressesPrague, k) + } } // ActivePrecompiles returns the precompiles enabled with the current configuration. @@ -194,6 +209,8 @@ func ActivePrecompiles(rules *chain.Rules) []libcommon.Address { switch { case rules.IsOptimismFjord: return PrecompiledAddressesFjord + case rules.IsPrague: + return PrecompiledAddressesPrague case rules.IsNapoli: return PrecompiledAddressesNapoli case rules.IsCancun: @@ -721,26 +738,22 @@ func (c *bls12381G1Add) Run(input []byte) ([]byte, error) { return nil, errBLS12381InvalidInputLength } var err error - var p0, p1 *bls12381.PointG1 - - // Initialize G1 - g := bls12381.NewG1() + var p0, p1 *bls12381.G1Affine // Decode G1 point p_0 - if p0, err = g.DecodePoint(input[:128]); err != nil { + if p0, err = decodePointG1(input[:128]); err != nil { return nil, err } // Decode G1 point p_1 - if p1, err = g.DecodePoint(input[128:]); err != nil { + if p1, err = decodePointG1(input[128:]); err != nil { return nil, err } // Compute r = p_0 + p_1 - r := g.New() - g.Add(r, p0, p1) + p0.Add(p0, p1) // Encode the G1 point result into 128 bytes - return g.EncodePoint(r), nil + return encodePointG1(p0), nil } // bls12381G1Mul implements EIP-2537 G1Mul precompile. @@ -759,24 +772,21 @@ func (c *bls12381G1Mul) Run(input []byte) ([]byte, error) { return nil, errBLS12381InvalidInputLength } var err error - var p0 *bls12381.PointG1 - - // Initialize G1 - g := bls12381.NewG1() + var p0 *bls12381.G1Affine // Decode G1 point - if p0, err = g.DecodePoint(input[:128]); err != nil { + if p0, err = decodePointG1(input[:128]); err != nil { return nil, err } // Decode scalar value e := new(big.Int).SetBytes(input[128:]) // Compute r = e * p_0 - r := g.New() - g.MulScalar(r, p0, e) + r := new(bls12381.G1Affine) + r.ScalarMultiplication(p0, e) // Encode the G1 point into 128 bytes - return g.EncodePoint(r), nil + return encodePointG1(r), nil } // bls12381G1MultiExp implements EIP-2537 G1MultiExp precompile. @@ -809,33 +819,29 @@ func (c *bls12381G1MultiExp) Run(input []byte) ([]byte, error) { if len(input) == 0 || len(input)%160 != 0 { return nil, errBLS12381InvalidInputLength } - var err error - points := make([]*bls12381.PointG1, k) - scalars := make([]*big.Int, k) - - // Initialize G1 - g := bls12381.NewG1() + points := make([]bls12381.G1Affine, k) + scalars := make([]fr.Element, k) // Decode point scalar pairs for i := 0; i < k; i++ { off := 160 * i t0, t1, t2 := off, off+128, off+160 // Decode G1 point - if points[i], err = g.DecodePoint(input[t0:t1]); err != nil { + p, err := decodePointG1(input[t0:t1]) + if err != nil { return nil, err } + points[i] = *p // Decode scalar value - scalars[i] = new(big.Int).SetBytes(input[t1:t2]) + scalars[i] = *new(fr.Element).SetBytes(input[t1:t2]) } // Compute r = e_0 * p_0 + e_1 * p_1 + ... + e_(k-1) * p_(k-1) - r := g.New() - if _, err = g.MultiExp(r, points, scalars); err != nil { - return nil, err - } + r := new(bls12381.G1Affine) + r.MultiExp(points, scalars, ecc.MultiExpConfig{}) // Encode the G1 point to 128 bytes - return g.EncodePoint(r), nil + return encodePointG1(r), nil } // bls12381G2Add implements EIP-2537 G2Add precompile. @@ -854,26 +860,23 @@ func (c *bls12381G2Add) Run(input []byte) ([]byte, error) { return nil, errBLS12381InvalidInputLength } var err error - var p0, p1 *bls12381.PointG2 - - // Initialize G2 - g := bls12381.NewG2() - r := g.New() + var p0, p1 *bls12381.G2Affine // Decode G2 point p_0 - if p0, err = g.DecodePoint(input[:256]); err != nil { + if p0, err = decodePointG2(input[:256]); err != nil { return nil, err } // Decode G2 point p_1 - if p1, err = g.DecodePoint(input[256:]); err != nil { + if p1, err = decodePointG2(input[256:]); err != nil { return nil, err } // Compute r = p_0 + p_1 - g.Add(r, p0, p1) + r := new(bls12381.G2Affine) + r.Add(p0, p1) // Encode the G2 point into 256 bytes - return g.EncodePoint(r), nil + return encodePointG2(r), nil } // bls12381G2Mul implements EIP-2537 G2Mul precompile. @@ -892,24 +895,21 @@ func (c *bls12381G2Mul) Run(input []byte) ([]byte, error) { return nil, errBLS12381InvalidInputLength } var err error - var p0 *bls12381.PointG2 - - // Initialize G2 - g := bls12381.NewG2() + var p0 *bls12381.G2Affine // Decode G2 point - if p0, err = g.DecodePoint(input[:256]); err != nil { + if p0, err = decodePointG2(input[:256]); err != nil { return nil, err } // Decode scalar value e := new(big.Int).SetBytes(input[256:]) // Compute r = e * p_0 - r := g.New() - g.MulScalar(r, p0, e) + r := new(bls12381.G2Affine) + r.ScalarMultiplication(p0, e) // Encode the G2 point into 256 bytes - return g.EncodePoint(r), nil + return encodePointG2(r), nil } // bls12381G2MultiExp implements EIP-2537 G2MultiExp precompile. @@ -942,33 +942,29 @@ func (c *bls12381G2MultiExp) Run(input []byte) ([]byte, error) { if len(input) == 0 || len(input)%288 != 0 { return nil, errBLS12381InvalidInputLength } - var err error - points := make([]*bls12381.PointG2, k) - scalars := make([]*big.Int, k) - - // Initialize G2 - g := bls12381.NewG2() + points := make([]bls12381.G2Affine, k) + scalars := make([]fr.Element, k) // Decode point scalar pairs for i := 0; i < k; i++ { off := 288 * i t0, t1, t2 := off, off+256, off+288 - // Decode G1 point - if points[i], err = g.DecodePoint(input[t0:t1]); err != nil { + // Decode G2 point + p, err := decodePointG2(input[t0:t1]) + if err != nil { return nil, err } + points[i] = *p // Decode scalar value - scalars[i] = new(big.Int).SetBytes(input[t1:t2]) + scalars[i] = *new(fr.Element).SetBytes(input[t1:t2]) } // Compute r = e_0 * p_0 + e_1 * p_1 + ... + e_(k-1) * p_(k-1) - r := g.New() - if _, err := g.MultiExp(r, points, scalars); err != nil { - return nil, err - } + r := new(bls12381.G2Affine) + r.MultiExp(points, scalars, ecc.MultiExpConfig{}) // Encode the G2 point to 256 bytes. - return g.EncodePoint(r), nil + return encodePointG2(r), nil } // bls12381Pairing implements EIP-2537 Pairing precompile. @@ -991,9 +987,10 @@ func (c *bls12381Pairing) Run(input []byte) ([]byte, error) { return nil, errBLS12381InvalidInputLength } - // Initialize BLS12-381 pairing engine - e := bls12381.NewPairingEngine() - g1, g2 := e.G1, e.G2 + var ( + p []bls12381.G1Affine + q []bls12381.G2Affine + ) // Decode pairs for i := 0; i < k; i++ { @@ -1001,66 +998,138 @@ func (c *bls12381Pairing) Run(input []byte) ([]byte, error) { t0, t1, t2 := off, off+128, off+384 // Decode G1 point - p1, err := g1.DecodePoint(input[t0:t1]) + p1, err := decodePointG1(input[t0:t1]) if err != nil { return nil, err } // Decode G2 point - p2, err := g2.DecodePoint(input[t1:t2]) + p2, err := decodePointG2(input[t1:t2]) if err != nil { return nil, err } // 'point is on curve' check already done, // Here we need to apply subgroup checks. - if !g1.InCorrectSubgroup(p1) { + if !p1.IsInSubGroup() { return nil, errBLS12381G1PointSubgroup } - if !g2.InCorrectSubgroup(p2) { + if !p2.IsInSubGroup() { return nil, errBLS12381G2PointSubgroup } - - // Update pairing engine with G1 and G2 points - e.AddPair(p1, p2) + p = append(p, *p1) + q = append(q, *p2) } // Prepare 32 byte output out := make([]byte, 32) // Compute pairing and set the result - if e.Check() { + ok, err := bls12381.PairingCheck(p, q) + if err == nil && ok { out[31] = 1 } return out, nil } +func decodePointG1(in []byte) (*bls12381.G1Affine, error) { + if len(in) != 128 { + return nil, errors.New("invalid g1 point length") + } + // decode x + x, err := decodeBLS12381FieldElement(in[:64]) + if err != nil { + return nil, err + } + // decode y + y, err := decodeBLS12381FieldElement(in[64:]) + if err != nil { + return nil, err + } + elem := bls12381.G1Affine{X: x, Y: y} + if !elem.IsOnCurve() { + return nil, errors.New("invalid point: not on curve") + } + + return &elem, nil +} + +// decodePointG2 given encoded (x, y) coordinates in 256 bytes returns a valid G2 Point. +func decodePointG2(in []byte) (*bls12381.G2Affine, error) { + if len(in) != 256 { + return nil, errors.New("invalid g2 point length") + } + x0, err := decodeBLS12381FieldElement(in[:64]) + if err != nil { + return nil, err + } + x1, err := decodeBLS12381FieldElement(in[64:128]) + if err != nil { + return nil, err + } + y0, err := decodeBLS12381FieldElement(in[128:192]) + if err != nil { + return nil, err + } + y1, err := decodeBLS12381FieldElement(in[192:]) + if err != nil { + return nil, err + } + + p := bls12381.G2Affine{X: bls12381.E2{A0: x0, A1: x1}, Y: bls12381.E2{A0: y0, A1: y1}} + if !p.IsOnCurve() { + return nil, errors.New("invalid point: not on curve") + } + return &p, err +} + // decodeBLS12381FieldElement decodes BLS12-381 elliptic curve field element. // Removes top 16 bytes of 64 byte input. -func decodeBLS12381FieldElement(in []byte) ([]byte, error) { +func decodeBLS12381FieldElement(in []byte) (fp.Element, error) { if len(in) != 64 { - return nil, errors.New("invalid field element length") + return fp.Element{}, errors.New("invalid field element length") } // check top bytes for i := 0; i < 16; i++ { if in[i] != byte(0x00) { - return nil, errBLS12381InvalidFieldElementTopBytes + return fp.Element{}, errBLS12381InvalidFieldElementTopBytes } } - out := make([]byte, 48) - copy(out, in[16:]) - return out, nil + var res [48]byte + copy(res[:], in[16:]) + + return fp.BigEndian.Element(&res) +} + +// encodePointG1 encodes a point into 128 bytes. +func encodePointG1(p *bls12381.G1Affine) []byte { + out := make([]byte, 128) + fp.BigEndian.PutElement((*[fp.Bytes]byte)(out[16:]), p.X) + fp.BigEndian.PutElement((*[fp.Bytes]byte)(out[64+16:]), p.Y) + return out } -// bls12381MapG1 implements EIP-2537 MapG1 precompile. -type bls12381MapG1 struct{} +// encodePointG2 encodes a point into 256 bytes. +func encodePointG2(p *bls12381.G2Affine) []byte { + out := make([]byte, 256) + // encode x + fp.BigEndian.PutElement((*[fp.Bytes]byte)(out[16:16+48]), p.X.A0) + fp.BigEndian.PutElement((*[fp.Bytes]byte)(out[80:80+48]), p.X.A1) + // encode y + fp.BigEndian.PutElement((*[fp.Bytes]byte)(out[144:144+48]), p.Y.A0) + fp.BigEndian.PutElement((*[fp.Bytes]byte)(out[208:208+48]), p.Y.A1) + return out +} + +// bls12381MapFpToG1 implements EIP-2537 MapG1 precompile. +type bls12381MapFpToG1 struct{} // RequiredGas returns the gas required to execute the pre-compiled contract. -func (c *bls12381MapG1) RequiredGas(input []byte) uint64 { - return params.Bls12381MapG1Gas +func (c *bls12381MapFpToG1) RequiredGas(input []byte) uint64 { + return params.Bls12381MapFpToG1Gas } -func (c *bls12381MapG1) Run(input []byte) ([]byte, error) { +func (c *bls12381MapFpToG1) Run(input []byte) ([]byte, error) { // Implements EIP-2537 Map_To_G1 precompile. - // > Field-to-curve call expects `64` bytes an an input that is interpreted as a an element of the base field. + // > Field-to-curve call expects `64` bytes as an input that is interpreted as a an element of the base field. // > Output of this call is `128` bytes and is G1 point following respective encoding rules. if len(input) != 64 { return nil, errBLS12381InvalidInputLength @@ -1072,59 +1141,50 @@ func (c *bls12381MapG1) Run(input []byte) ([]byte, error) { return nil, err } - // Initialize G1 - g := bls12381.NewG1() - // Compute mapping - r, err := g.MapToCurve(fe) + r := bls12381.MapToG1(fe) if err != nil { return nil, err } // Encode the G1 point to 128 bytes - return g.EncodePoint(r), nil + return encodePointG1(&r), nil } -// bls12381MapG2 implements EIP-2537 MapG2 precompile. -type bls12381MapG2 struct{} +// bls12381MapFp2ToG2 implements EIP-2537 MapG2 precompile. +type bls12381MapFp2ToG2 struct{} // RequiredGas returns the gas required to execute the pre-compiled contract. -func (c *bls12381MapG2) RequiredGas(input []byte) uint64 { - return params.Bls12381MapG2Gas +func (c *bls12381MapFp2ToG2) RequiredGas(input []byte) uint64 { + return params.Bls12381MapFp2ToG2Gas } -func (c *bls12381MapG2) Run(input []byte) ([]byte, error) { +func (c *bls12381MapFp2ToG2) Run(input []byte) ([]byte, error) { // Implements EIP-2537 Map_FP2_TO_G2 precompile logic. - // > Field-to-curve call expects `128` bytes an an input that is interpreted as a an element of the quadratic extension field. + // > Field-to-curve call expects `128` bytes as an input that is interpreted as a an element of the quadratic extension field. // > Output of this call is `256` bytes and is G2 point following respective encoding rules. if len(input) != 128 { return nil, errBLS12381InvalidInputLength } // Decode input field element - fe := make([]byte, 96) c0, err := decodeBLS12381FieldElement(input[:64]) if err != nil { return nil, err } - copy(fe[48:], c0) c1, err := decodeBLS12381FieldElement(input[64:]) if err != nil { return nil, err } - copy(fe[:48], c1) - - // Initialize G2 - g := bls12381.NewG2() // Compute mapping - r, err := g.MapToCurve(fe) + r := bls12381.MapToG2(bls12381.E2{A0: c0, A1: c1}) if err != nil { return nil, err } // Encode the G2 point to 256 bytes - return g.EncodePoint(r), nil + return encodePointG2(&r), nil } // pointEvaluation implements the EIP-4844 point evaluation precompile diff --git a/core/vm/contracts_test.go b/core/vm/contracts_test.go index d9b05437a71..a20e92ac903 100644 --- a/core/vm/contracts_test.go +++ b/core/vm/contracts_test.go @@ -65,8 +65,8 @@ var allPrecompiles = map[libcommon.Address]PrecompiledContract{ libcommon.BytesToAddress([]byte{14}): &bls12381G2Mul{}, libcommon.BytesToAddress([]byte{15}): &bls12381G2MultiExp{}, libcommon.BytesToAddress([]byte{16}): &bls12381Pairing{}, - libcommon.BytesToAddress([]byte{17}): &bls12381MapG1{}, - libcommon.BytesToAddress([]byte{18}): &bls12381MapG2{}, + libcommon.BytesToAddress([]byte{17}): &bls12381MapFpToG1{}, + libcommon.BytesToAddress([]byte{18}): &bls12381MapFp2ToG2{}, libcommon.BytesToAddress([]byte{20}): &pointEvaluation{}, libcommon.BytesToAddress([]byte{0x01, 0x00}): &p256Verify{}, } @@ -378,7 +378,7 @@ func BenchmarkPrecompiledBLS12381G1MultiExpWorstCase(b *testing.B) { Name: "WorstCaseG1", NoBenchmark: false, } - benchmarkPrecompiled(b, "0c", testcase) + benchmarkPrecompiled(b, "f0c", testcase) } // BenchmarkPrecompiledBLS12381G2MultiExpWorstCase benchmarks the worst case we could find that still fits a gaslimit of 10MGas. @@ -399,7 +399,7 @@ func BenchmarkPrecompiledBLS12381G2MultiExpWorstCase(b *testing.B) { Name: "WorstCaseG2", NoBenchmark: false, } - benchmarkPrecompiled(b, "0f", testcase) + benchmarkPrecompiled(b, "f0f", testcase) } // Benchmarks the sample inputs from the P256VERIFY precompile. diff --git a/core/vm/evm.go b/core/vm/evm.go index e41e2a2eb5d..efb48b76145 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -39,6 +39,8 @@ func (evm *EVM) precompile(addr libcommon.Address) (PrecompiledContract, bool) { switch { case evm.chainRules.IsOptimismFjord: precompiles = PrecompiledContractsFjord + case evm.chainRules.IsPrague: + precompiles = PrecompiledContractsPrague case evm.chainRules.IsNapoli: precompiles = PrecompiledContractsNapoli case evm.chainRules.IsCancun: @@ -99,6 +101,12 @@ type EVM struct { // NewEVM returns a new EVM. The returned EVM is not thread safe and should // only ever be used *once*. func NewEVM(blockCtx evmtypes.BlockContext, txCtx evmtypes.TxContext, state evmtypes.IntraBlockState, chainConfig *chain.Config, vmConfig Config) *EVM { + if vmConfig.NoBaseFee { + if txCtx.GasPrice.IsZero() { + blockCtx.BaseFee = new(uint256.Int) + } + } + evm := &EVM{ Context: blockCtx, TxContext: txCtx, @@ -221,6 +229,12 @@ func (evm *EVM) call(typ OpCode, caller ContractRef, addr libcommon.Address, inp v := value if typ == STATICCALL { v = nil + } else if typ == DELEGATECALL { + // NOTE: caller must, at all times be a contract. It should never happen + // that caller is something other than a Contract. + parent := caller.(*Contract) + // DELEGATECALL inherits value from parent call + v = parent.value } if depth == 0 { evm.config.Tracer.CaptureStart(evm, caller.Address(), addr, isPrecompile, false /* create */, input, gas, v, code) @@ -322,6 +336,10 @@ type codeAndHash struct { hash libcommon.Hash } +func NewCodeAndHash(code []byte) *codeAndHash { + return &codeAndHash{code: code} +} + func (c *codeAndHash) Hash() libcommon.Hash { if c.hash == (libcommon.Hash{}) { c.hash = crypto.Keccak256Hash(c.code) @@ -329,8 +347,12 @@ func (c *codeAndHash) Hash() libcommon.Hash { return c.hash } +func (evm *EVM) OverlayCreate(caller ContractRef, codeAndHash *codeAndHash, gas uint64, value *uint256.Int, address libcommon.Address, typ OpCode, incrementNonce bool) ([]byte, libcommon.Address, uint64, error) { + return evm.create(caller, codeAndHash, gas, value, address, typ, incrementNonce) +} + // create creates a new contract using code as deployment code. -func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, value *uint256.Int, address libcommon.Address, typ OpCode, incrementNonce bool) ([]byte, libcommon.Address, uint64, error) { +func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gasRemaining uint64, value *uint256.Int, address libcommon.Address, typ OpCode, incrementNonce bool) ([]byte, libcommon.Address, uint64, error) { var ret []byte var err error var gasConsumption uint64 @@ -338,12 +360,12 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, if evm.config.Debug { if depth == 0 { - evm.config.Tracer.CaptureStart(evm, caller.Address(), address, false /* precompile */, true /* create */, codeAndHash.code, gas, value, nil) + evm.config.Tracer.CaptureStart(evm, caller.Address(), address, false /* precompile */, true /* create */, codeAndHash.code, gasRemaining, value, nil) defer func() { evm.config.Tracer.CaptureEnd(ret, gasConsumption, err) }() } else { - evm.config.Tracer.CaptureEnter(typ, caller.Address(), address, false /* precompile */, true /* create */, codeAndHash.code, gas, value, nil) + evm.config.Tracer.CaptureEnter(typ, caller.Address(), address, false /* precompile */, true /* create */, codeAndHash.code, gasRemaining, value, nil) defer func() { evm.config.Tracer.CaptureExit(ret, gasConsumption, err) }() @@ -354,17 +376,17 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, // limit. if depth > int(params.CallCreateDepth) { err = ErrDepth - return nil, libcommon.Address{}, gas, err + return nil, libcommon.Address{}, gasRemaining, err } if !evm.Context.CanTransfer(evm.intraBlockState, caller.Address(), value) { err = ErrInsufficientBalance - return nil, libcommon.Address{}, gas, err + return nil, libcommon.Address{}, gasRemaining, err } if incrementNonce { nonce := evm.intraBlockState.GetNonce(caller.Address()) if nonce+1 < nonce { err = ErrNonceUintOverflow - return nil, libcommon.Address{}, gas, err + return nil, libcommon.Address{}, gasRemaining, err } evm.intraBlockState.SetNonce(caller.Address(), nonce+1) } @@ -389,11 +411,11 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, // Initialise a new contract and set the code that is to be used by the EVM. // The contract is a scoped environment for this execution context only. - contract := NewContract(caller, address, value, gas, evm.config.SkipAnalysis) + contract := NewContract(caller, address, value, gasRemaining, evm.config.SkipAnalysis) contract.SetCodeOptionalHash(&address, codeAndHash) if evm.config.NoRecursion && depth > 0 { - return nil, address, gas, nil + return nil, address, gasRemaining, nil } ret, err = run(evm, contract, nil, false) @@ -435,16 +457,16 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, } // calculate gasConsumption for deferred captures - gasConsumption = gas - contract.Gas + gasConsumption = gasRemaining - contract.Gas return ret, address, contract.Gas, err } // Create creates a new contract using code as deployment code. // DESCRIBED: docs/programmers_guide/guide.md#nonce -func (evm *EVM) Create(caller ContractRef, code []byte, gas uint64, endowment *uint256.Int) (ret []byte, contractAddr libcommon.Address, leftOverGas uint64, err error) { +func (evm *EVM) Create(caller ContractRef, code []byte, gasRemaining uint64, endowment *uint256.Int) (ret []byte, contractAddr libcommon.Address, leftOverGas uint64, err error) { contractAddr = crypto.CreateAddress(caller.Address(), evm.intraBlockState.GetNonce(caller.Address())) - return evm.create(caller, &codeAndHash{code: code}, gas, endowment, contractAddr, CREATE, true /* incrementNonce */) + return evm.create(caller, &codeAndHash{code: code}, gasRemaining, endowment, contractAddr, CREATE, true /* incrementNonce */) } // Create2 creates a new contract using code as deployment code. @@ -452,10 +474,10 @@ func (evm *EVM) Create(caller ContractRef, code []byte, gas uint64, endowment *u // The different between Create2 with Create is Create2 uses keccak256(0xff ++ msg.sender ++ salt ++ keccak256(init_code))[12:] // instead of the usual sender-and-nonce-hash as the address where the contract is initialized at. // DESCRIBED: docs/programmers_guide/guide.md#nonce -func (evm *EVM) Create2(caller ContractRef, code []byte, gas uint64, endowment *uint256.Int, salt *uint256.Int) (ret []byte, contractAddr libcommon.Address, leftOverGas uint64, err error) { +func (evm *EVM) Create2(caller ContractRef, code []byte, gasRemaining uint64, endowment *uint256.Int, salt *uint256.Int) (ret []byte, contractAddr libcommon.Address, leftOverGas uint64, err error) { codeAndHash := &codeAndHash{code: code} contractAddr = crypto.CreateAddress2(caller.Address(), salt.Bytes32(), codeAndHash.Hash().Bytes()) - return evm.create(caller, codeAndHash, gas, endowment, contractAddr, CREATE2, true /* incrementNonce */) + return evm.create(caller, codeAndHash, gasRemaining, endowment, contractAddr, CREATE2, true /* incrementNonce */) } // SysCreate is a special (system) contract creation methods for genesis constructors. diff --git a/core/vm/gas_table_test.go b/core/vm/gas_table_test.go index 63c4546bd09..8f52ace30e3 100644 --- a/core/vm/gas_table_test.go +++ b/core/vm/gas_table_test.go @@ -24,6 +24,7 @@ import ( "testing" "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -31,7 +32,6 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/erigon/core/state" - "github.com/ledgerwatch/erigon/core/state/temporal" "github.com/ledgerwatch/erigon/core/vm/evmtypes" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/turbo/rpchelper" @@ -141,7 +141,7 @@ var createGasTests = []struct { func TestCreateGas(t *testing.T) { t.Parallel() - _, db, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + _, db, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) for i, tt := range createGasTests { address := libcommon.BytesToAddress([]byte("contract")) diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 7871e9fd87a..b35de6adee6 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -18,6 +18,7 @@ package vm import ( "fmt" + "math" "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -331,7 +332,7 @@ func opCallDataCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext ) dataOffset64, overflow := dataOffset.Uint64WithOverflow() if overflow { - dataOffset64 = 0xffffffffffffffff + dataOffset64 = math.MaxUint64 } // These values are checked for overflow during gas cost calculation memOffset64 := memOffset.Uint64() @@ -392,7 +393,7 @@ func opCodeCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([ ) uint64CodeOffset, overflow := codeOffset.Uint64WithOverflow() if overflow { - uint64CodeOffset = 0xffffffffffffffff + uint64CodeOffset = math.MaxUint64 } codeCopy := getData(scope.Contract.Code, uint64CodeOffset, length.Uint64()) scope.Memory.Set(memOffset.Uint64(), length.Uint64(), codeCopy) diff --git a/core/vm/runtime/runtime.go b/core/vm/runtime/runtime.go index df2bb97b7ec..032d1b2e4d9 100644 --- a/core/vm/runtime/runtime.go +++ b/core/vm/runtime/runtime.go @@ -74,6 +74,7 @@ func setDefaults(cfg *Config) { ShanghaiTime: new(big.Int), CancunTime: new(big.Int), PragueTime: new(big.Int), + OsakaTime: new(big.Int), } } diff --git a/core/vm/testdata/precompiles/blsG1Add.json b/core/vm/testdata/precompiles/blsG1Add.json index 184d765aa1a..e3df47ddc82 100644 --- a/core/vm/testdata/precompiles/blsG1Add.json +++ b/core/vm/testdata/precompiles/blsG1Add.json @@ -3,728 +3,784 @@ "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", "Name": "bls_g1add_(g1+g1=2*g1)", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d280000000000000000000000000000000009ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e522400000000000000000000000000000000032b80d3a6f5b09f8a84623389c5f80ca69a0cddabc3097f9d9c27310fd43be6e745256c634af45ca3473b0590ae30d1", "Expected": "0000000000000000000000000000000010e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc0000000000000000000000000000000016ba437edcc6551e30c10512367494bfb6b01cc6681e8a4c3cd2501832ab5c4abc40b4578b85cbaffbf0bcd70d67c6e2", "Name": "bls_g1add_(2*g1+3*g1=5*g1)", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Expected": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "Name": "bls_g1add_(inf+g1=g1)", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g1add_(inf+inf=inf)", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000012196c5a43d69224d8713389285f26b98f86ee910ab3dd668e413738282003cc5b7357af9a7af54bb713d62255e80f560000000000000000000000000000000006ba8102bfbeea4416b710c73e8cce3032c31c6269c44906f8ac4f7874ce99fb17559992486528963884ce429a992fee000000000000000000000000000000000001101098f5c39893765766af4512a0c74e1bb89bc7e6fdf14e3e7337d257cc0f94658179d83320b99f31ff94cd2bac0000000000000000000000000000000003e1a9f9f44ca2cdab4f43a1a3ee3470fdf90b2fc228eb3b709fcd72f014838ac82a6d797aeefed9a0804b22ed1ce8f7", "Expected": "000000000000000000000000000000001466e1373ae4a7e7ba885c5f0c3ccfa48cdb50661646ac6b779952f466ac9fc92730dcaed9be831cd1f8c4fefffd5209000000000000000000000000000000000c1fb750d2285d4ca0378e1e8cdbf6044151867c34a711b73ae818aee6dbe9e886f53d7928cc6ed9c851e0422f609b11", "Name": "matter_g1_add_0", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000117dbe419018f67844f6a5e1b78a1e597283ad7b8ee7ac5e58846f5a5fd68d0da99ce235a91db3ec1cf340fe6b7afcdb0000000000000000000000000000000013316f23de032d25e912ae8dc9b54c8dba1be7cecdbb9d2228d7e8f652011d46be79089dd0a6080a73c82256ce5e4ed2000000000000000000000000000000000441e7f7f96198e4c23bd5eb16f1a7f045dbc8c53219ab2bcea91d3a027e2dfe659feac64905f8b9add7e4bfc91bec2b0000000000000000000000000000000005fc51bb1b40c87cd4292d4b66f8ca5ce4ef9abd2b69d4464b4879064203bda7c9fc3f896a3844ebc713f7bb20951d95", "Expected": "0000000000000000000000000000000016b8ab56b45a9294466809b8e858c1ad15ad0d52cfcb62f8f5753dc94cee1de6efaaebce10701e3ec2ecaa9551024ea600000000000000000000000000000000124571eec37c0b1361023188d66ec17c1ec230d31b515e0e81e599ec19e40c8a7c8cdea9735bc3d8b4e37ca7e5dd71f6", "Name": "matter_g1_add_1", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008ab7b556c672db7883ec47efa6d98bb08cec7902ebb421aac1c31506b177ac444ffa2d9b400a6f1cbdc6240c607ee110000000000000000000000000000000016b7fa9adf4addc2192271ce7ad3c8d8f902d061c43b7d2e8e26922009b777855bffabe7ed1a09155819eabfa87f276f00000000000000000000000000000000114c3f11ba0b47551fa28f09f148936d6b290dc9f2d0534a83c32b0b849ab921ce6bcaa4ff3c917707798d9c74f2084f00000000000000000000000000000000149dc028207fb04a7795d94ea65e21f9952e445000eb954531ee519efde6901675d3d2446614d243efb77a9cfe0ca3ae", "Expected": "0000000000000000000000000000000002ce7a08719448494857102da464bc65a47c95c77819af325055a23ac50b626df4732daf63feb9a663d71b7c9b8f2c510000000000000000000000000000000016117e87e9b55bd4bd5763d69d5240d30745e014b9aef87c498f9a9e3286ec4d5927df7cd5a2e54ac4179e78645acf27", "Name": "matter_g1_add_2", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015ff9a232d9b5a8020a85d5fe08a1dcfb73ece434258fe0e2fddf10ddef0906c42dcb5f5d62fc97f934ba900f17beb330000000000000000000000000000000009cfe4ee2241d9413c616462d7bac035a6766aeaab69c81e094d75b840df45d7e0dfac0265608b93efefb9a8728b98e4000000000000000000000000000000000c3d564ac1fe12f18f528c3750583ab6af8973bff3eded7bb4778c32805d9b17846cc7c687af0f46bc87de7748ab72980000000000000000000000000000000002f164c131cbd5afc85692c246157d38dc4bbb2959d2edfa6daf0a8b17c7a898aad53b400e8bdc2b29bf6688ee863db7", "Expected": "0000000000000000000000000000000015510826f50b88fa369caf062ecdf8b03a67e660a35b219b44437a5583b5a9adf76991dce7bff9afc50257f847299504000000000000000000000000000000000a83e879895a1b47dbd6cd25ce8b719e7490cfe021614f7539e841fc2f9c09f071e386676de60b6579aa4bf6d37b13dd", "Name": "matter_g1_add_3", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017a17b82e3bfadf3250210d8ef572c02c3610d65ab4d7366e0b748768a28ee6a1b51f77ed686a64f087f36f641e7dca900000000000000000000000000000000077ea73d233ccea51dc4d5acecf6d9332bf17ae51598f4b394a5f62fb387e9c9aa1d6823b64a074f5873422ca57545d30000000000000000000000000000000019fe3a64361fea14936ff0b3e630471494d0c0b9423e6a004184a2965221c18849b5ed0eb2708a587323d8d6c6735a90000000000000000000000000000000000340823d314703e5efeb0a65c23069199d7dfff8793aaacb98cdcd6177fc8e61ab3294c57bf13b4406266715752ef3e6", "Expected": "00000000000000000000000000000000010b1c96d3910f56b0bf54da5ae8c7ab674a07f8143b61fed660e7309e626dc73eaa2b11886cdb82e2b6735e7802cc860000000000000000000000000000000002dabbbedd72872c2c012e7e893d2f3df1834c43873315488d814ddd6bfcca6758a18aa6bd02a0f3aed962cb51f0a222", "Name": "matter_g1_add_4", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c1243478f4fbdc21ea9b241655947a28accd058d0cdb4f9f0576d32f09dddaf0850464550ff07cab5927b3e4c863ce90000000000000000000000000000000015fb54db10ffac0b6cd374eb7168a8cb3df0a7d5f872d8e98c1f623deb66df5dd08ff4c3658f2905ec8bd02598bd4f90000000000000000000000000000000001461565b03a86df363d1854b4af74879115dffabeddfa879e2c8db9aa414fb291a076c3bdf0beee82d9c094ea8dc381a000000000000000000000000000000000e19d51ab619ee2daf25ea5bfa51eb217eabcfe0b5cb0358fd2fa105fd7cb0f5203816b990df6fda4e0e8d541be9bcf6", "Expected": "000000000000000000000000000000000cb40d0bf86a627d3973f1e7846484ffd0bc4943b42a54ff9527c285fed3c056b947a9b6115824cabafe13cd1af8181c00000000000000000000000000000000076255fc12f1a9dbd232025815238baaa6a3977fd87594e8d1606caec0d37b916e1e43ee2d2953d75a40a7ba416df237", "Name": "matter_g1_add_5", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000328f09584b6d6c98a709fc22e184123994613aca95a28ac53df8523b92273eb6f4e2d9b2a7dcebb474604d54a210719000000000000000000000000000000001220ebde579911fe2e707446aaad8d3789fae96ae2e23670a4fd856ed82daaab704779eb4224027c1ed9460f39951a1b0000000000000000000000000000000019cabba3e09ad34cc3d125e0eb41b527aa48a4562c2b7637467b2dbc71c373897d50eed1bc75b2bde8904ece5626d6e400000000000000000000000000000000056b0746f820cff527358c86479dc924a10b9f7cae24cd495625a4159c8b71a8c3ad1a15ebf22d3561cd4b74e8a6e48b", "Expected": "000000000000000000000000000000000e115e0b61c1f1b25cc10a7b3bd21cf696b1433a0c366c2e1bca3c26b09482c6eced8c8ecfa69ce6b9b3b4419779262e00000000000000000000000000000000077b85daf61b9f947e81633e3bc64e697bc6c1d873f2c21e5c4c3a11302d4d5ef4c3ff5519564729aaf2a50a3c9f1196", "Name": "matter_g1_add_6", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002ebfa98aa92c32a29ebe17fcb1819ba82e686abd9371fcee8ea793b4c72b6464085044f818f1f5902396df0122830cb00000000000000000000000000000000001184715b8432ed190b459113977289a890f68f6085ea111466af15103c9c02467da33e01d6bff87fd57db6ccba442a0000000000000000000000000000000011f649ee35ff8114060fc5e4df9ac828293f6212a9857ca31cb3e9ce49aa1212154a9808f1e763bc989b6d5ba7cf09390000000000000000000000000000000019af81eca7452f58c1a6e99fab50dc0d5eeebc7712153e717a14a31cffdfd0a923dbd585e652704a174905605a2e8b9d", "Expected": "000000000000000000000000000000000013e37a8950a659265b285c6fb56930fb77759d9d40298acac2714b97b83ec7692a7d1c4ccb83f074384db9eedd809c0000000000000000000000000000000003215d524d6419214568ba42a31502f2a58a97d0139c66908e9d71755f5a7666567aafe30ea84d89308f06768f28a648", "Name": "matter_g1_add_7", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009d6424e002439998e91cd509f85751ad25e574830c564e7568347d19e3f38add0cab067c0b4b0801785a78bcbeaf246000000000000000000000000000000000ef6d7db03ee654503b46ff0dbc3297536a422e963bda9871a8da8f4eeb98dedebd6071c4880b4636198f4c2375dc795000000000000000000000000000000000d713e148769fac2efd380886f8566c6d4662dd38317bb7e68744c4339efaedbab88435ce3dc289afaa7ecb37df37a5300000000000000000000000000000000129d9cd031b31c77a4e68093dcdbb585feba786207aa115d9cf120fe4f19ca31a0dca9c692bd0f53721d60a55c333129", "Expected": "00000000000000000000000000000000029405b9615e14bdac8b5666bbc5f3843d4bca17c97bed66d164f1b58d2a148f0f506d645d665a40e60d53fe29375ed400000000000000000000000000000000162761f1712814e474beb2289cc50519253d680699b530c2a6477f727ccc75a19681b82e490f441f91a3c611eeb0e9e2", "Name": "matter_g1_add_8", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002d1cdb93191d1f9f0308c2c55d0208a071f5520faca7c52ab0311dbc9ba563bd33b5dd6baa77bf45ac2c3269e945f4800000000000000000000000000000000072a52106e6d7b92c594c4dacd20ef5fab7141e45c231457cd7e71463b2254ee6e72689e516fa6a8f29f2a173ce0a1900000000000000000000000000000000006d92bcb599edca426ff4ceeb154ebf133c2dea210c7db0441f74bd37c8d239149c8b5056ace0bfefb1db04b42664f530000000000000000000000000000000008522fc155eef6d5746283808091f91b427f2a96ac248850f9e3d7aadd14848101c965663fd4a63aea1153d71918435a", "Expected": "000000000000000000000000000000000cfaa8df9437c0b6f344a0c8dcbc7529a07aec0d7632ace89af6796b6b960b014f78dd10e987a993fb8a95cc909822ec0000000000000000000000000000000007475f115f6eb35f78ba9a2b71a44ccb6bbc1e980b8cd369c5c469565f3fb798bc907353cf47f524ba715deaedf379cb", "Name": "matter_g1_add_9", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000641642f6801d39a09a536f506056f72a619c50d043673d6d39aa4af11d8e3ded38b9c3bbc970dbc1bd55d68f94b50d0000000000000000000000000000000009ab050de356a24aea90007c6b319614ba2f2ed67223b972767117769e3c8e31ee4056494628fb2892d3d37afb6ac9430000000000000000000000000000000016380d03b7c5cc3301ffcb2cf7c28c9bde54fc22ba2b36ec293739d8eb674678c8e6461e34c1704747817c8f8341499a000000000000000000000000000000000ec6667aa5c6a769a64c180d277a341926376c39376480dc69fcad9a8d3b540238eb39d05aaa8e3ca15fc2c3ab696047", "Expected": "0000000000000000000000000000000011541d798b4b5069e2541fa5410dad03fd02784332e72658c7b0fa96c586142a967addc11a7a82bfcee33bd5d07066b900000000000000000000000000000000195b3fcb94ab7beb908208283b4e5d19c0af90fca4c76268f3c703859dea7d038aca976927f48839ebc7310869c724aa", "Name": "matter_g1_add_10", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000fd4893addbd58fb1bf30b8e62bef068da386edbab9541d198e8719b2de5beb9223d87387af82e8b55bd521ff3e47e2d000000000000000000000000000000000f3a923b76473d5b5a53501790cb02597bb778bdacb3805a9002b152d22241ad131d0f0d6a260739cbab2c2fe602870e00000000000000000000000000000000065eb0770ab40199658bf87db6c6b52cd8c6c843a3e40dd60433d4d79971ff31296c9e00a5d553df7c81ade533379f4b0000000000000000000000000000000017a6f6137ddd90c15cf5e415f040260e15287d8d2254c6bfee88938caec9e5a048ff34f10607d1345ba1f09f30441ef4", "Expected": "0000000000000000000000000000000006b0853b3d41fc2d7b27da0bb2d6eb76be32530b59f8f537d227a6eb78364c7c0760447494a8bba69ef4b256dbef750200000000000000000000000000000000166e55ba2d20d94da474d4a085c14245147705e252e2a76ae696c7e37d75cde6a77fea738cef045182d5e628924dc0bb", "Name": "matter_g1_add_11", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002cb4b24c8aa799fd7cb1e4ab1aab1372113200343d8526ea7bc64dfaf926baf5d90756a40e35617854a2079cd07fba40000000000000000000000000000000003327ca22bd64ebd673cc6d5b02b2a8804d5353c9d251637c4273ad08d581cc0d58da9bea27c37a0b3f4961dbafd276b0000000000000000000000000000000006a3f7eb0e42567210cc1ba5e6f8c42d02f1eef325b6483fef49ba186f59ab69ca2284715b736086d2a0a1f0ea224b40000000000000000000000000000000000bc08427fda31a6cfbe657a8c71c73894a33700e93e411d42f1471160c403b939b535070b68d60a4dc50e47493da63dc", "Expected": "000000000000000000000000000000000c35d4cd5d43e9cf52c15d46fef521666a1e1ab9f0b4a77b8e78882e9fab40f3f988597f202c5bd176c011a56a1887d4000000000000000000000000000000000ae2b5c24928a00c02daddf03fade45344f250dcf4c12eda06c39645b4d56147cb239d95b06fd719d4dc20fe332a6fce", "Name": "matter_g1_add_12", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024ad70f2b2105ca37112858e84c6f5e3ffd4a8b064522faae1ecba38fabd52a6274cb46b00075deb87472f11f2e67d90000000000000000000000000000000010a502c8b2a68aa30d2cb719273550b9a3c283c35b2e18a01b0b765344ffaaa5cb30a1e3e6ecd3a53ab67658a578768100000000000000000000000000000000068e79aea45b7199ec4b6f26e01e88ec76533743639ce76df66937fff9e7de3edf6700d227f10f43e073afcc63e2eddc00000000000000000000000000000000039c0b6d9e9681401aeb57a94cedc0709a0eff423ace9253eb00ae75e21cabeb626b52ef4368e6a4592aed9689c6fca4", "Expected": "0000000000000000000000000000000013bad27dafa20f03863454c30bd5ae6b202c9c7310875da302d4693fc1c2b78cca502b1ff851b183c4b2564c5d3eb4dc0000000000000000000000000000000000552b322b3d672704382b5d8b214c225b4f7868f9c5ae0766b7cdb181f97ed90a4892235915ffbc0daf3e14ec98a606", "Name": "matter_g1_add_13", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000704cc57c8e0944326ddc7c747d9e7347a7f6918977132eea269f161461eb64066f773352f293a3ac458dc3ccd5026a000000000000000000000000000000001099d3c2bb2d082f2fdcbed013f7ac69e8624f4fcf6dfab3ee9dcf7fbbdb8c49ee79de40e887c0b6828d2496e3a6f7680000000000000000000000000000000000adac9bb98bb6f35a8f941dbff39dfd307b6a4d5756ccae103c814564e3d3993a8866ff91581ccdd7686c1dce0b19f700000000000000000000000000000000083d235e0579032ca47f65b6ae007ce8ffd2f1a890ce3bc45ebd0df6673ad530d2f42125d543cb0c51ba0c28345729d8", "Expected": "000000000000000000000000000000000b5513e42f5217490f395a8cb3673a4fc35142575f770af75ecf7a4fcd97eee215c4298fc4feab51915137cbdb814839000000000000000000000000000000000e9d4db04b233b0b12a7ff620faefef906aeb2b15481ce1609dad50eb6a7d0c09a850375599c501296219fb7b288e305", "Name": "matter_g1_add_14", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000130535a29392c77f045ac90e47f2e7b3cffff94494fe605aad345b41043f6663ada8e2e7ecd3d06f3b8854ef92212f42000000000000000000000000000000001699a3cc1f10cd2ed0dc68eb916b4402e4f12bf4746893bf70e26e209e605ea89e3d53e7ac52bd07713d3c8fc671931d000000000000000000000000000000000d5bb4fa8b494c0adf4b695477d4a05f0ce48f7f971ef53952f685e9fb69dc8db1603e4a58292ddab7129bb5911d6cea0000000000000000000000000000000004a568c556641f0e0a2f44124b77ba70e4e560d7e030f1a21eff41eeec0d3c437b43488c535cdabf19a70acc777bacca", "Expected": "000000000000000000000000000000000c27ef4ebf37fd629370508f4cd062b74faa355b305d2ee60c7f4d67dd741363f18a7bbd368cdb17e848f372a5e33a6f0000000000000000000000000000000000ed833df28988944115502f554636e0b436cccf845341e21191e82d5b662482f32c24df492da4c605a0f9e0f8b00604", "Name": "matter_g1_add_15", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001830f52d9bff64a623c6f5259e2cd2c2a08ea17a8797aaf83174ea1e8c3bd3955c2af1d39bfa474815bfe60714b7cd80000000000000000000000000000000000874389c02d4cf1c61bc54c4c24def11dfbe7880bc998a95e70063009451ee8226fec4b278aade3a7cea55659459f1d500000000000000000000000000000000091ee883cb9ea2c933f6645f0f4c535a826d95b6da6847b4fe2349342bd4bd496e0dd546df7a7a17a4b9fb8349e5064f000000000000000000000000000000000902d7e72242a5e6b068ca82d0cb71dc0f51335dbd302941045319f9a06777518b56a6e0b0b0c9fd8f1edf6b114ad331", "Expected": "00000000000000000000000000000000122cce99f623944dfebffcdf6b0a0a3696162f35053e5952dddc2537421c60da9fe931579d1c4fc2e31082b6c25f96b500000000000000000000000000000000011366ffa91dc0b7da8b7c1839ea84d49299310f5c1ca244012eed0dd363dbcf4ad5813b8e3fb49361ef05ea8cb18ffe", "Name": "matter_g1_add_16", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000043c4ff154778330b4d5457b7811b551dbbf9701b402230411c527282fb5d2ba12cb445709718d5999e79fdd74c0a67000000000000000000000000000000000013a80ede40df002b72f6b33b1f0e3862d505efbe0721dce495d18920d542c98cdd2daf5164dbd1a2fee917ba943debe0000000000000000000000000000000000d3d4f11bc79b8425b77d25698b7e151d360ebb22c3a6afdb227de72fe432dcd6f0276b4fd3f1fcc2da5b59865053930000000000000000000000000000000015ac432071dc23148765f198ed7ea2234662745a96032c215cd9d7cf0ad8dafb8d52f209983fe98aaa2243ecc2073f1b", "Expected": "000000000000000000000000000000000113ccf11264ff04448f8c58b279a6a49acb386750c2051eab2c90fa8b8e03d7c5b9e87eccf36b4b3f79446b80be7b1d0000000000000000000000000000000004358a1fabfe803f4c787a671196b593981a837ee78587225fb21d5a883b98a15b912862763b94d18b971cb7e37dbcf0", "Name": "matter_g1_add_17", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009f9a78a70b9973c43182ba54bb6e363c6984d5f7920c1d347c5ff82e6093e73f4fb5e3cd985c9ddf9af936b16200e880000000000000000000000000000000008d7489c2d78f17b2b9b1d535f21588d8761b8fb323b08fa9af8a60f39b26e98af76aa883522f21e083c8a14c2e7edb600000000000000000000000000000000034f725766897ed76394145da2f02c92c66794a51fd5ae07bd7cc60c013d7a48ebf1b07faf669dfed74d82d07e48d1150000000000000000000000000000000018f4926a3d0f740988da25379199ecb849250239ad7efcfef7ffaa43bc1373166c0448cc30dcdbd75ceb71f76f883ea7", "Expected": "00000000000000000000000000000000167336aeeb9e447348156936849d518faee314c291c84d732fa3c1bd3951559230d94230e37a08e28e689e9d1fef05770000000000000000000000000000000005366535f7a68996e066ab80c55bb372a15fb0ed6634585b88fe7cafbf818fbfebbf6f6ddd9ca0ff72137594a1e84b35", "Name": "matter_g1_add_18", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010fcfe8af8403a52400bf79e1bd0058f66b9cab583afe554aa1d82a3e794fffad5f0e19d385263b2dd9ef69d1154f10a000000000000000000000000000000000aba6a0b58b49f7c6c2802afd2a5ed1320bf062c7b93135f3c0ed7a1d7b1ee27b2b986cde732a60fa585ca6ab7cc154b00000000000000000000000000000000079e5a154cf84190b6c735bc8cd968559182166568649b813732e4fb4c5c428c8b38e8265d4ef04990c49aa1381f51c8000000000000000000000000000000000ae08e682ef92b4986a5ac5d4f094ad0919c826a97efe8d8120a96877766eae5828803804a0cae67df9822fd18622aae", "Expected": "000000000000000000000000000000000a3d66cf87b1ce8c5683d71a6de4bf829d094041240f56d9071aa84ff189a06940e8e1935127e23a970c78ca73c28bf6000000000000000000000000000000000b2adda87740873c0c59e3ebde44d33834773f0fe69e2f5e7ede99c4f928978a5caaede7262e45fd22136a394b3f7858", "Name": "matter_g1_add_19", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013c5ebfb853f0c8741f12057b6b845c4cdbf72aecbeafc8f5b5978f186eead8685f2f3f125e536c465ade1a00f212b0900000000000000000000000000000000082543b58a13354d0cce5dc3fb1d91d1de6d5927290b2ff51e4e48f40cdf2d490730843b53a92865140153888d73d4af0000000000000000000000000000000008cefd0fd289d6964a962051c2c2ad98dab178612663548370dd5f007c5264fece368468d3ca8318a381b443c68c4cc7000000000000000000000000000000000708d118d44c1cb5609667fd51df9e58cacce8b65565ef20ad1649a3e1b9453e4fb37af67c95387de008d4c2114e5b95", "Expected": "0000000000000000000000000000000004b2311897264fe08972d62872d3679225d9880a16f2f3d7dd59412226e5e3f4f2aa8a69d283a2dc5b93e022293f0ee1000000000000000000000000000000000f03e18cef3f9a86e6b842272f2c7ee48d0ad23bfc7f1d5a9a796d88e5d5ac31326db5fe90de8f0690c70ae6e0155039", "Name": "matter_g1_add_20", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000053a12f6a1cb64272c34e042b7922fabe879275b837ba3b116adfe1eb2a6dc1c1fa6df40c779a7cdb8ed8689b8bc5ba800000000000000000000000000000000097ec91c728ae2d290489909bbee1a30048a7fa90bcfd96fe1d9297545867cbfee0939f20f1791329460a4fe1ac719290000000000000000000000000000000008e5afc16d909eb9d8bdaaf229ad291f34f7baf5247bbd4cc938278f1349adb4b0f0aacd14799c01d0ca2ed38c937d600000000000000000000000000000000006cf972c64e20403c82fee901c90eaa5547460d57cce2565fd091ff9bc55e24584595c9182298f148882d6949c36c9d5", "Expected": "000000000000000000000000000000000caf46f480ae2ea8e700f7913c505d5150c4629c9137e917357d2a4ba8a7a1c63b8f6e2978293755952fbed7f0ad8d6d0000000000000000000000000000000002e62e715b72eebbc7c366a2390318f73e69203a9533e72340aab568f65105129ffc9889a8bc00a692494d93688c7ec0", "Name": "matter_g1_add_21", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001354dd8a230fde7c983dcf06fa9ac075b3ab8f56cdd9f15bf870afce2ae6e7c65ba91a1df6255b6f640bb51d7fed302500000000000000000000000000000000130f139ca118869de846d1d938521647b7d27a95b127bbc53578c7b66d88d541adb525e7028a147bf332607bd760deac0000000000000000000000000000000013a6439e0ec0fabe93f6c772e102b96b1f692971d7181c386f7f8a360daca6e5f99772e1a736f1e72a17148d90b08efe0000000000000000000000000000000010f27477f3171dcf74498e940fc324596ef5ec6792be590028c2963385d84ef8c4bbb12c6eb3f06b1afb6809a2cb0358", "Expected": "000000000000000000000000000000000dea57d1fc19f994e6bdda9478a400b0ada23aed167bfe7a16ef79b6aa020403a04d554303c0b2a9c5a38f85cf6f3800000000000000000000000000000000000b8d76ccd41ba81a835775185bbf1d6bf94b031d94d5c78b3b97beb24cf246b0c25c4c309e2c06ae9896ed800169eeee", "Name": "matter_g1_add_22", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003f76a6dc6da31a399b93f4431bfabb3e48d86745eaa4b24d6337305006e3c7fc7bfcc85c85e2f3514cd389fec4e70580000000000000000000000000000000010e4280374c532ed0df44ac0bac82572f839afcfb8b696eea617d5bd1261288dfa90a7190200687d470992fb4827ff320000000000000000000000000000000005728a219d128bc0a1f851f228e2bf604a72400c393cfb0d3484456b6b28a2c5061198656f0e106bbe257d849be159040000000000000000000000000000000011f6d08baa91fb2c8b36191d5b2318e355f8964cc8112838394ba1ded84b075de58d90452601dcfc9aa8a275cfec695d", "Expected": "0000000000000000000000000000000012e6d6c518c15cfd3020181ff3f829e29140b3b507b99251cc7f31795128adec817750296bce413bac18b9a80f69ca5000000000000000000000000000000000131ee9b748f6f1eb790adeb9edd0e79d89a9908368f5a6bb82ee0c913061cdfffe75d9ba411a49aa3f9194ee6d4d08a9", "Name": "matter_g1_add_23", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009439f061c7d5fada6e5431c77fd093222285c98449951f6a6c4c8f225b316144875bc764be5ca51c7895773a9f1a640000000000000000000000000000000000ebdef273e2288c784c061bef6a45cd49b0306ac1e9faab263c6ff73dea4627189c8f10a823253d86a8752769cc4f8f200000000000000000000000000000000171696781ba195f330241584e42fb112adf9b8437b54ad17d410892b45c7d334e8734e25862604d1b679097590b8ab0a000000000000000000000000000000001879328fdf0d1fb79afd920e0b0a386828be5b8e0e6024dfeea800ffcb5c65f9044061af26d639d4dcc27bcb5ba1481a", "Expected": "00000000000000000000000000000000111c416d5bd018a77f3317e3fbf4b03d8e19658f2b810dc9c17863310dfb09e1c4ffdbb7c98951d357f1c3d93c5d0745000000000000000000000000000000000af0a252bff336d5eb3a406778557ef67d91776a9c788be9a76cff7727f519a70fc7809f1a50a58d29185cb9722624fd", "Name": "matter_g1_add_24", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001478ee0ffebf22708a6ab88855081daba5ee2f279b5a2ee5f5f8aec8f97649c8d5634fec3f8b28ad60981e6f29a091b10000000000000000000000000000000011efaeec0b1a4057b1e0053263afe40158790229c5bfb08062c90a252f59eca36085ab35e4cbc70483d29880c5c2f8c2000000000000000000000000000000000231b0d6189a4faad082ce4a69398c1734fcf35d222b7bce22b14571033a1066b049ae3cd3bd6c8cec5bec743955cdd600000000000000000000000000000000037375237fb71536564ea693ab316ae11722aadd7cab12b17b926c8a31bd13c4565619e8c894bffb960e632896856bbe", "Expected": "000000000000000000000000000000000d2b9c677417f4e9b38af6393718f55a27dbd23c730796c50472bc476ebf52172559b10f6ceb81e644ec2d0a41b3bb01000000000000000000000000000000001697f241ff6eceb05d9ada4be7d7078ecbbffa64dd4fb43ead0692eef270cb7cc31513ee4bf38a1b1154fe008a8b836a", "Name": "matter_g1_add_25", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000150d43c64cb1dbb7b981f455e90b740918e2d63453ca17d8eeecb68e662d2581f8aa1aea5b095cd8fc2a941d6e2728390000000000000000000000000000000006dc2ccb10213d3f6c3f10856888cb2bf6f1c7fcb2a17d6e63596c29281682cafd4c72696ecd6af3cce31c440144ebd10000000000000000000000000000000015653d1c5184736cdc78838be953390d12b307d268b394136b917b0462d5e31b8f1b9d96cce8f7a1203c2cae93db6a4000000000000000000000000000000000060efeece033ac711d500c1156e4b6dce3243156170c94bc948fd7beae7b28a31463a44872ca22ca49dc5d4d4dd27d1c", "Expected": "0000000000000000000000000000000003996050756117eeab27a5e4fa9acdde2a1161d6fbfff2601a1c7329f900e93a29f55a8073f85be8f7c2a4d0323e95cc00000000000000000000000000000000010b195a132c1cba2f1a6a73f2507baa079e9b5cb8894ea78bebc16d4151ee56fe562b16e2741f3ab1e8640cdad83180", "Name": "matter_g1_add_26", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f46bb86e827aa9c0c570d93f4d7d6986668c0099e4853927571199e1ce9e756d9db951f5b0325acafb2bf6e8fec2a1b0000000000000000000000000000000006d38cc6cc1a950a18e92e16287f201af4c014aba1a17929dd407d0440924ce5f08fad8fe0c50f7f733b285bf282acfc0000000000000000000000000000000018adb42928304cbc310a229306a205e7c21cdb31b9e5daf0ff6bb9437acee80cd8cf02b35dab823155d60f8a83fde5cc0000000000000000000000000000000018b57460c81cab43235be79c8c90dcda40fafcaf69e4e767133aee56308a6df07eac71275597dd8ed6607ffb9151ed9a", "Expected": "0000000000000000000000000000000003c7a7ee3d1b73cf1f0213404363bf3c0de4425ab97d679ed51448e877b7537400f148f14eba588ed241fea34e56d465000000000000000000000000000000000c581b5070e6bb8582b7ee2cd312dfeb5aaf0b0da95cf5a22a505ffba21fc204e26a5e17311d1f47113653ff13349f57", "Name": "matter_g1_add_27", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010cde0dbf4e18009c94ba648477624bbfb3732481d21663dd13cea914d6c54ec060557010ebe333d5e4b266e1563c631000000000000000000000000000000000fb24d3d4063fd054cd5b7288498f107114ff323226aca58d3336444fc79c010db15094ceda6eb99770c168d459f0da00000000000000000000000000000000001da65df8574a864ab454e5f2fa929405501bb73c3162a600979a1145586079361c89839cc0c5a07f1135c94bf059f9c0000000000000000000000000000000002560df402c0550662a2c4c463ad428ab6e60297fbc42a6484107e397ae016b58494d1c46ac4952027aa8c0896c50be3", "Expected": "000000000000000000000000000000000d7a539b679e5858271a6f9cf20108410eb5d5d2b1a905e09a8aa20318efbe9175450385d78389f08f836f5634f7a2f0000000000000000000000000000000000fb624e5f6c4c814b7d73eb63b70237c5de7d90d19ac81cac776d86171a8d307d3cc8c56da14f444fe8cf329ab7e63dd", "Name": "matter_g1_add_28", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008c0a4c543b7506e9718658902982b4ab7926cd90d4986eceb17b149d8f5122334903300ad419b90c2cb56dc6d2fe976000000000000000000000000000000000824e1631f054b666893784b1e7edb44b9a53596f718a6e5ba606dc1020cb6e269e9edf828de1768df0dd8ab8440e0530000000000000000000000000000000005311c11f4d0bb8542f3b60247c1441656608e5ac5c363f4d62127cecb88800a771767cf23a0e7c45f698ffa5015061f0000000000000000000000000000000018f7f1d23c8b0566a6a1fcb58d3a5c6fd422573840eb04660c3c6ba65762ed1becc756ac6300e9ce4f5bfb962e963419", "Expected": "0000000000000000000000000000000000849bbc7b0226b18abbcb4c9a9e78dca2f5f75a2cbb983bd95ff3a95b427b1a01fd909ce36384c49eb88ffb8ff77bb000000000000000000000000000000000087d8d28d92305b5313ca533a6b47f454ddce1c2d0fa3574b255128ef0b145fa4158beb07e4f0d50d6b7b90ea8a8ea8a", "Name": "matter_g1_add_29", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000159d94fb0cf6f4e3e26bdeb536d1ee9c511a29d32944da43420e86c3b5818e0f482a7a8af72880d4825a50fee6bc8cd8000000000000000000000000000000000c2ffe6be05eccd9170b6c181966bb8c1c3ed10e763613112238cabb41370e2a5bb5fef967f4f8f2af944dbef09d265e000000000000000000000000000000000c8e293f730253128399e5c39ab18c3f040b6cd9df10d794a28d2a428a9256ea1a71cf53022bd1be11f501805e0ddda40000000000000000000000000000000003e60c2291be46900930f710969f79f27e76cf710efefc243236428db2fed93719edeeb64ada0edf6346a0411f2a4cb8", "Expected": "00000000000000000000000000000000191084201608f706ea1f7c51dd5b593dda87b15d2c594b52829db66ce3beab6b30899d1d285bdb9590335949ceda5f050000000000000000000000000000000000d3460622c7f1d849658a20a7ae7b05e5afae1f01e871cad52ef632cc831b0529a3066f7b81248a7728d231e51fc4ad", "Name": "matter_g1_add_30", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019c822a4d44ac22f6fbaef356c37ceff93c1d6933e8c8f3b55784cfe62e5705930be48607c3f7a4a2ca146945cad6242000000000000000000000000000000000353d6521a17474856ad69582ce225f27d60f5a8319bea8cefded2c3f6b862d76fe633c77ed8ccdf99d2b10430253fc80000000000000000000000000000000013267db8fdf8f488a2806fead5cffdcbb7b1b4b7681a2b67d322cd7f5985c65d088c70cdc2638e679ed678cae3cc63c80000000000000000000000000000000007757233ad6d38d488c3d9d8252b41e4ab7ee54e4ef4bbf171402df57c14f9977dd3583c6c8f9b5171b368d61f082447", "Expected": "000000000000000000000000000000000c06fef6639ab7dceb44dc648ca6a7d614739e40e6486ee9fc01ecc55af580d98abc026c630a95878da7b6d5701d755c0000000000000000000000000000000007c9a7f2bc7fa1f65c9e3a1e463eb4e3283e47bb5490938edb12abf6c8f5a9b56d8ce7a81a60df67db8c399a9a1df1d4", "Name": "matter_g1_add_31", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000d4441801d287ba8de0e2fb6b77f766dbff07b4027098ce463cab80e01eb31d9f5dbd7ac935703d68c7032fa5128ff17000000000000000000000000000000001975bc52669187f27a86096ae6bf2d60178706105d15bce8fe782759f14e449bc97cb1570e87eec5f12214a9ae0e0170000000000000000000000000000000000ca6106d6e6487a3b6f00fc2af769d21cb3b83b5dc03db19e4824fc28fd9b3d9f7a986e79f05c02b3a914ff26c7a78d6", "Expected": "0000000000000000000000000000000002fbf4fba68ae416b42a99f3b26916dea464d662cebce55f4545481e5ab92d3c40f3e189504b54db4c9cd51ecdd60e8d0000000000000000000000000000000008e81e094c6d4ded718ef63c5edfacb2d258f48ccfa37562950c607299bb2dca18e680a620dff8c72dedc89b4e9d4759", "Name": "matter_g1_add_32", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c8129292540000000000000000000000000000000013a3d49e58274c2b4a534b95b7071b6d2f42b17b887bf128627c0f8894c19d3d69c1a419373ca4bd1bb6d4efc78e1d3f00000000000000000000000000000000109f6168a719add6ea1a14f9dc95345e325d6b0e56da2f4ecff8408536446894069fa61e81bdaebfc96b13b402fad865000000000000000000000000000000001806aa27c576f4c4fa8a6db49d577cd8f257a8450e89b061cbc7773c0b5434f06bacf12b479abf6847f537c4cbefcb46", "Expected": "0000000000000000000000000000000014e0bd4397b90a3f96240daf835d5fb05da28a64538f4bf42d9e7925a571f831c6e663910aa37dcc265ddd7938d83045000000000000000000000000000000001695d405d4f8ba385ebf4ad25fb3f34c65977217e90d6e5ed5085b3e5b0b143194f82e6c25766d28ad6c63114ca9dcdf", "Name": "matter_g1_add_33", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda0000000000000000000000000000000014a461f829e0a76ba89f42eb57dffb4f5544df2008163bd0ea1af824f7ff910b27418a0e4f86cb8046dc1f3139cab9af0000000000000000000000000000000019d3623a7866933e2d73214ceb2e56097a1b047db5943c3ecb846890aa02250126e90fc76a729a952cef895bd154cc7d000000000000000000000000000000000e87c376bbd695a356ef72226ac7ef6a550d99e9693d8485770a686e568ae28c038ee201d3f2ea38362046236ade91cd", "Expected": "000000000000000000000000000000000ffeab47985bd9b3e10ce27c6636bbda336dcf540cd37eccc3faec2adff2d97dd126633bd83a7d3c8c73c3623bdf0ba2000000000000000000000000000000001992eca4b1e924b360d57ca98b543ab496a8b55bd288d23f03bcc1b22f6bc76d95b12f47c3e305812097253c73b876dd", "Name": "matter_g1_add_34", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000016404bd07b6c6480af2d23301940e61817ee2e61fc625c100b31e1b324c369a583b61048dd57ab97b80b1fe6cd64c5c300000000000000000000000000000000163aaecf83d6c77a5d7417e73f5cf9d71a6aedfd194b2f3b53c608d06a228190f4f79ac57b029d77504c72744df4ecc0000000000000000000000000000000000416e6f9ca188d16daa2c28acd6a594f8fcb990eaa26e60ca2a34dfcad7ad76c425b241acedf674d48d298d0df0f824d", "Expected": "000000000000000000000000000000001812bcb26fa05e0ab5176e703699ab16f5ef8917a33a9626ae6ff20f2a6f4a9d5e2afe3a11f57061cbaa992e1f30477f000000000000000000000000000000000680acf0b632cb48017cb80baa93753d030aa4b49957178d8a10d1d1a27bbdc89ac6811a91868b2c181c5c0b9b6caf86", "Name": "matter_g1_add_35", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a0300000000000000000000000000000000053ee41f6a51c49b069f12de32e3e6b0b355cd2c3ba87a149c7de86136a5d9c5b7b59f2d1237964e548d1b62ec36c8db000000000000000000000000000000000aba7362eee717d03ef2d4f0fef2763822115fcc8fb9e2e8243683b6c1cde799ebc78f23812e557de2cc38e2b4a2e56700000000000000000000000000000000170833db69b3f067cf5c4c4690857e6711c9e3fcad91ca7cd045e9d2f38c7b31236960e8718f5dd4c8bfb4de76c6c9b9", "Expected": "00000000000000000000000000000000196ffe76a4b726fa8dd720cc1cd04c040724cb18ec10915e312eaa90d124100b08f0ce3a7fc888f46914319a3d7581f4000000000000000000000000000000000e2612357059ca6dbb64efb98ef19370560c9e83e2aad7ab2d9015e2444fe4d8c796b5577584aac9f63258beb5ae863c", "Name": "matter_g1_add_36", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000009cd91a281b96a881b20946fda164a987243c052378fcd8fee3926b75576dfa1d29a0aaca4b653da4e61da8257721808000000000000000000000000000000000a98ae36c690f2e3be8100f43678be5a1064390e210328dd23f61f5a496b87398db2798580edeabc6273fb9537fa12880000000000000000000000000000000009aedf77bb969592c6552ae0121a1c74de78ba222b6cd08623c7a34708a12763b5ff7969cf761ccd25adc1b65da0f02d", "Expected": "00000000000000000000000000000000072334ec8349fc38b99d6dea0b4259c03cd96c1438c90ef0da6321df2495892de031a53c23838ca2b260774fa09b5461000000000000000000000000000000000e4535767c2477c4f87c087540c836eeffcd0c45960841f9c3561a8a5f8e61ab98b183b11192b8e7ea1c9c7717336243", "Name": "matter_g1_add_37", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000011bf87b12734a6360d3dda4b452deede34470fba8e62a68f79153cc288a8e7fed98c74af862883b9861d2195a58262e00000000000000000000000000000000015c3c056ec904ce865d073f8f70ef2d4b5adb5b9238deaa5e167d32f45cad4901aa6d87efa2338c633e7853ce4c19185000000000000000000000000000000000a15f1aa6e662f21d7127351a1655821c943c4cf590e3c9e60c9ab968b4a835f87fb8d87eee6331ee4e194e5f1ea91f4", "Expected": "000000000000000000000000000000000140fb6dcf872d0a3bff3e32a0cb4a7fb7e60ee4fb476bb120c4ce068e169d72e1c167d7fda321280d5855983d5a9af800000000000000000000000000000000108f54a4ec3ba26dd614f4d94c5c82652583906986158ad40ffea54c17703fa4b0bd7806633e1c0318d06e8dc7d41cde", "Name": "matter_g1_add_38", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000f26fdf1af1b8ad442ef4494627c815ca01ae84510944788b87f4aa2c8600ed310b9579318bc617a689b916bb7731dcb000000000000000000000000000000000307841cb33e0f188103a83334a828fa864cea09c264d5f4343246f64ab244add4610c9ccd64c001816e5074fe84013f000000000000000000000000000000000e15bbeb6fff7f1435097828f5d64c448bbc800f31a5b7428436dcffd68abc92682f2b01744d7c60540e0cd1b57ab5d4", "Expected": "000000000000000000000000000000000a1b50660ed9120fff1e5c4abb401e4691a09f41780ca188cea4b1c2d77002f08ce28eb1caa41ee3fe73169e3651bb7f00000000000000000000000000000000125439ac3b45c698a98063ab911364bd3c6dd2a69435d00d6edf89fc5566b33038e960a125e5e52141abb605587942fe", "Name": "matter_g1_add_39", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a370000000000000000000000000000000003d2c7fe67cada2213e842ac5ec0dec8ec205b762f2a9c05fa12fa120c80eba30676834f0560d11ce9939fe210ad6c6300000000000000000000000000000000013866438b089d39de5a3ca2a624d72c241a54cbdcf5b2a67ebdd2db8373b112a814e74662bd52e37748ffbfc21782a5000000000000000000000000000000000d55454a22d5c2ef82611ef9cb6533e2f08668577764afc5bb9b7dfe32abd5d333147774fb1001dd24889775de57d305", "Expected": "000000000000000000000000000000000037b4e8846b423335711ac12f91e2419de772216509d6b9deb9c27fd1c1ee5851b3e032bf3bcac3dd8e93f3dce8a91b00000000000000000000000000000000113a1bf4be1103e858c3be282effafd5e2384f4d1073350f7073b0a415ecf9e7a3bfb55c951c0b2c25c6bab35454ecf0", "Name": "matter_g1_add_40", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000b02ca2b0e6e0989ea917719b89caf1aa84b959e45b6238813bf02f40db95fbb3bf43d3017c3f9c57eab1be617f180320000000000000000000000000000000017440fd557df23286da15f9a96bb88cfbc79589b1c157af13baf02c65227dc0a5bdec6f2f300083ff91dae395ed8cb75000000000000000000000000000000000ad09b4290842cc599d346110fdb39ededbb1d651568579564e274465f07b8f77eeaf00fece0c10db69c2125de8ab394", "Expected": "0000000000000000000000000000000007c158b4e21566742f7e4e39a672bd383e27864505acef4ef8c26f8b0a9db418f9c088b555b8e9eb25acf9859b1207b40000000000000000000000000000000016e06a1ace89f992d582af0de7662ef91c0a98f574306f6f6d0d8d5e80166638d2deef70105cce2e9b20faa9d6315510", "Name": "matter_g1_add_41", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c187229000000000000000000000000000000000096713619bf088bd9e12752cab83e9cdd58296ada8d338c86a749f00ba014087a3836ce10adaaf2e815f431235bff4f0000000000000000000000000000000000d7ccc3a4efdfe1a92a88e453933b8216016091f1b9d575faf18a5b3abf90daf077813167a3f4acce7359472dee544bb00000000000000000000000000000000128008c075ab176100e755cbb8de5b9ff0e9a78114f862d26ed030d9c1d1dea1c21ec8ae4d82a84d3ff5ae4c1cd6f339", "Expected": "000000000000000000000000000000000b84f9de79c748e37797c629cb78b86b4b736b199f161b30147b5dacf6eabe0b54afce40d5dacfe9a8ee8da5ef5b49de0000000000000000000000000000000010277ad094bb9a3b96379b1366dd90125b51a21ebeb4f776a81d9d9c1f37ab58c32a884a26fa32c83783ed0eef42b820", "Name": "matter_g1_add_42", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a90000000000000000000000000000000002b03f02b45aa15b39e030c4b88c89a285dff5c4bbfe16f643f3f87d91db774f8ab7019285fda0b236ff7eec16496e5e00000000000000000000000000000000008da4a93d5ffcdaa0adc736a59f0c187ae3bf11ecb5e9e6f6aedea976a47757739042200b4c4593c2dd5db555425531000000000000000000000000000000000a6fdb2d4160c6c35223daa6fa10d0b1073de07fe4f2eba28e65ed049ff8d8852ed0538b30759fe7a0d944009ddf9a6f", "Expected": "000000000000000000000000000000000d740bd1effd8674250618af0358ad0b83bbc787f0264af9c2ada72fa5431be909e82155da1de0211f46fb307e9949f0000000000000000000000000000000000ddf62c91d587a14b64feef07da52c081b40fbbf9a0f2eae8b66022e0850fc94de6a467e7e4f580c7f2c806f6c6ed8cf", "Name": "matter_g1_add_43", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb00000000000000000000000000000000185e8671e2ddb8e36380e39fe4eafefbac9769935603c28caac7d3f7f0f3e8ad14e925024b55aeb67d68b219875c9d790000000000000000000000000000000003258d7931a1d72ab6344c7e96c0dbd435a7909fe68cc679c08ca9b62f7a6a04863082cbcfdbe9a736625d895e4f3bdb0000000000000000000000000000000009ee3e470e2b2cebc955ba3444b7e478f887138e36c13bd68490689122627269ea5e7ce22dd9c69792394a24187103d6", "Expected": "000000000000000000000000000000000af674691f5d87655f0066188fac5013f31b4169a0181d3feb7ac3beae0d9a3429d4125f099ee344f644a2de8b941f9f00000000000000000000000000000000042a9603b8e4a6c37d59ede3a1398f5f80c5298da66de575a204ee28811d9f7c7c0dd40cef3769bd72a2156b9eb620c8", "Name": "matter_g1_add_44", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e2700000000000000000000000000000000123f973ab6bd3c2e5b0512a0c77ea0ac3003fd891e1262137f9444cd07b927b564e618205ba09220320ea1aa4564e820000000000000000000000000000000001833807f1ced52399305419450355499a63411837ee61ad681559d59561db18511eb1e8ad3161e7fe30016b560d18b8f00000000000000000000000000000000198b11b31586e17964a4a4ccdee85703163d2106481833e71f26327a589bafb43578d08d87f6cb19c7a04b4ca92392bf", "Expected": "000000000000000000000000000000001081c3359a0fadfe7850ce878182859e3dd77028772da7bcac9f6451ac6455739c22627889673db626bbea70aa3648d50000000000000000000000000000000000f4e8766f976fa49a0b05ef3f06f56d92fe6452ff05c3fac455f9c16efadf1b81a44d2921bed73511dda81d6fc7478e", "Name": "matter_g1_add_45", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000002ec930fb58c898ede931384c5a5f9edd2f5c70b8c3794edb83a12f23be5400949f95e81c96c666c1a72dffb50b811580000000000000000000000000000000007dc719ae9e3f1e11d3ed4747a546a7b973ccb1967adb1b3066645a8bde9632bcfa3530e768f088ddbc022b169e67cbf000000000000000000000000000000000bbf9cf884b19c84045da1cead7dcd9fdbf39d764ff1ad60d83ed1e4fd0ce0554f0fb618203952cf02a7c4ba466c66b8", "Expected": "000000000000000000000000000000000f60d66fd1ed5eb04f9619d6458c522cc49f5ace111aff2b61903b112559972f80ac615591463abf2b944c4f99d4c03e000000000000000000000000000000000001a1abfa869be2cda6bd7e05454a8735e1b638db7e1b3715708539c2d14ade53069c7e68b36d3b08cff80837028b7d", "Name": "matter_g1_add_46", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f100000000000000000000000000000000033f481fc62ab0a249561d180da39ff641a540c9c109cde41946a0e85d18c9d60b41dbcdec370c5c9f22a9ee9de00ccd0000000000000000000000000000000014b78c66c4acecdd913ba73cc4ab573c64b404a9494d29d4a2ba02393d9b8fdaba47bb7e76d32586df3a00e03ae2896700000000000000000000000000000000025c371cd8b72592a45dc521336a891202c5f96954812b1095ba2ea6bb11aad7b6941a44d68fe9b44e4e5fd06bd541d4", "Expected": "0000000000000000000000000000000015b164c854a2277658f5d08e04887d896a082c6c20895c8809ed4b349da8492d6fa0333ace6059a1f0d37e92ae9bad30000000000000000000000000000000001510d176ddba09ab60bb452188c2705ef154f449bed26abf0255897673a625637b5761355b17676748f67844a61d4e9f", "Name": "matter_g1_add_47", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be10000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe900000000000000000000000000000000104ee0990ba4194916f670f44e254200971b67a18ed45b25c17be49df66e4f9b934bac8c1552ecc25bdaa3af55952076000000000000000000000000000000000591094d9d89afe025ca1832d7f3e60444f83e72403a434b42216b6c4213980d29e4ef0c64ae497006de550c1faa9425", "Expected": "0000000000000000000000000000000006db0cc24ffec8aa11aecc43e9b76a418daac51d51f3de437090c1bcaabace19f7f8b5ceb6277d6b32b7f3b239a90c4700000000000000000000000000000000069e01f60ca7468c6b9a247c79d18cf3d88bf5d1d62c76abf9237408edeba05dea744205ac5b501920f519bb847bb711", "Name": "matter_g1_add_48", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000fa57c1436615442bbb049d08ac46e501c07736cd239298752bb94d1904bd38cc687759987cadd99bd3c4d45ba07193a0000000000000000000000000000000004840d028d0c0f056aeb37b7a8505325081e9822ef26046f2da72f2155c20987dd51f4b5577c5395e24288b71d2ce5140000000000000000000000000000000015f231a233e997633c1d6492e0df358fb658ae29d0f53928c8a0578484c899a699178ca3223772210063aa08991c3fff", "Expected": "000000000000000000000000000000000fa72bf2d7d564cc4982b9f2cdca743d2ac14f0f1be4218dbafb8b93a9277e55273487a5d2857fd3f731ac4ee469a6a1000000000000000000000000000000000fce44f886453c6ca5ebde9af41d2be92d1126e9897d72978a179dd7eebeed6242b6e9718604ab0c9369529a0426a575", "Name": "matter_g1_add_49", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b600000000000000000000000000000000175bdd42583cbbf733242510c152380525aff7649273acef1ec20569804ffba7f029ca06878dbafde84540cece1738220000000000000000000000000000000004877b97faa1d05d61ab65001110bf190d442cabcd6d4d1b9c1f0e513309aebd278f84a80354dfdef875769d00ec2c7500000000000000000000000000000000187066cccb5008bc2ffd0bcd1b227a5a0fe0cd4984316ba3cfd5113c4632a04c56cbda8d48993bd0dd50e9b7ce2b7ee9", "Expected": "0000000000000000000000000000000019ecd38afacc6b281b2515270157328e18039d51574bae0f7e0ef16c3f6da89f55ddee9e3bbb450ad51fe11edfd9f18d00000000000000000000000000000000088a5e292761bbf7a914a9f723de099035e91bd3c1fe9cd50728a4ceaa4fd3953683f30aa8e70ba0eb23919092aa9e22", "Name": "matter_g1_add_50", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000cbf7a31e6fef4f4664bca4bc87ec7c0b12ced7224300aa4e1a6a7cbdedfcef07482b5d20fa607e3f03fdd6dd03fd10c000000000000000000000000000000001881f5aba0603b0a256e03e5dc507598dd63682ce80a29e0fa141b2afdadf6168e98221e4ee45d378cee0416baaadc49000000000000000000000000000000000070d255101319dd3a0f8ca3a0856188428c09de15475d6b70d70a405e45ab379a5b1f2e55f84bd7fe5dd12aeedce670", "Expected": "0000000000000000000000000000000011ccd455d5e3eba94567a17bcd777559b4ff1afa66fd6f05f99c69937404290a2f1c83cfd6c2c25886ebff4934332c0e0000000000000000000000000000000010920aa3d5974df25530610ef466adce3d51fd6a508d4b1111739c586dfd7ba9040836e075fd812fe111d92f25b67f51", "Name": "matter_g1_add_51", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa0000000000000000000000000000000005aa892b0a056ff61706430f1daa3f0263dc01337eadabd8a7fd58152affd9aaa329e8c11ea98692134d9718cb4119bf000000000000000000000000000000000b53e5339f25bcd31afd091362874b5042c0b762ed7425341331630addbc4dccc299936e1acdf89823c36867d46c6f28000000000000000000000000000000000fc3c6b522268511dd52826dd1aee707413d925ee51aeb0e5d69c0e3eb697fabbc14783b5007e240cc0c53c299a40ada", "Expected": "00000000000000000000000000000000060773b9b8f3babdba3db27089b7be3e6e287a635dbae19576039d34ae18a0e6413278bfa280570f6329ae05cdb693fd00000000000000000000000000000000075fb9527f99a8c8db41e67baaf1deafffd2c134badb1b3478a26b5501b31dca858fad6f0d52f412d5631ecfa72eece4", "Name": "matter_g1_add_52", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a0300000000000000000000000000000000166ce33c0482b5957c6e746c16908ba579d6402b230bc977d3ff29ac2a4a800748d9c14608f2519e2ac4d1fe4daf29b2000000000000000000000000000000001693f4ebab3fed548784264196fb01cf55311399f47cdad74a9543bda5d1ca682a00ee04bb0b3954d5a0f00ceef97a750000000000000000000000000000000017f4019c23bd68e84d889857c417b17aa96c780fec3c1ed6ca75100cc70c97a8bb8272ad4c6de896d76dc2a1b09c7a61", "Expected": "000000000000000000000000000000000a3ea8afdc83794f18f9a9427bcd60a355196925d38fdf74ab09d4a08279647b2da6f1fbe30948a785497d6c6dddc2a9000000000000000000000000000000001263c88f1ca3e574cafac21641432d45ee01e1b05eba95716565922abe28c7f0fb004c255afcbfa10cf7959bbe6b00d7", "Name": "matter_g1_add_53", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f6046300000000000000000000000000000000148b5454f9b9868aefd2accc3318ddabfe618c5026e8c04f8a6bce76cd88e350bebcd779f2021fe7ceda3e8b4d438a0b0000000000000000000000000000000005d5602e05499a435effff3812744b582b0cd7c68f1c88faa3c268515c8b14f3c041b8ae322fe526b2406e7c25d84e61000000000000000000000000000000001038eaf49e74e19111e4456ebba01dc4d22c7e23a303d5dec821da832e90a1b07b1a6b8034137f1bfdcddeb58053a170", "Expected": "0000000000000000000000000000000019258ea5023ce73343dcd201ec9be68ec1ee1cb4e5b9964309d801c2bc523343c8ebc4f8393a403c7881e5928f29db14000000000000000000000000000000001423bf52daefb432162ce2bd9ef78b256ff3b24d0a84766b87119489fd56ecf6156b2884c8a7e1220e493469723cd7f8", "Name": "matter_g1_add_54", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a00000000000000000000000000000000016d2c22eabd4a06a5ae67b890a25fbede7d0e96c625b80329b19be6aa861f44b6e85778130d0bdf69f2abd491ee9751a0000000000000000000000000000000002626f28d421d9d1c28f5e1eb5a51ada9610dbdd62cd33c4078d2fdfc18dbd092e2847cf705ba5fcd8c1a60c1cc34a3b0000000000000000000000000000000001f7b8cfdb7e406c920f5fdecae45fb4be736f209480ccb455f972c6b1a1aebdd5ba116903c46ded72ce37cd8836e871", "Expected": "00000000000000000000000000000000081d674f5b9c7c64673c39fe33f4f3d77271e826dcb4dfd2591062e47c931237e8539ef9c886c9e112eccc50da4f63fd00000000000000000000000000000000141b700695839110ed4ced5f8a3f4fd64a8086805358ab4a5abd2705592e616cd95ff01271212ca9014dcb68d8157ba0", "Name": "matter_g1_add_55", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000f1afe9b199362f51cc84edb1d3cf2faf8e5bc0a734a646851ab83e213f73a3734114f255b611ec18db75694dcb0df91000000000000000000000000000000000259e307eacb1bc45a13811b02a7aeaaf4dc2bb405dcd88069bb6ec1c08a78905516169bd3440a36921764df0ef3a85b000000000000000000000000000000001263372b675124f6cc19ca16842ba069c5697dbf57730875fe72c864a81189d7d16fe126b5d24953a0524f96dbac5183", "Expected": "000000000000000000000000000000001908aa3a640817e31a4213156fbd4fd39ab39eb931091670a0e06399def71a689e67286f90d38ce9f97cb85f6488d9c8000000000000000000000000000000000764e46b6b82aa2f8862d28e9d543a751a9de855645377b9633cc098c2110ec6ed4fd30f0044ea5868c93f950f6cfd24", "Name": "matter_g1_add_56", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000019275491a51599736722295659dd5589f4e3f558e3d45137a66b4c8066c7514ae66ec35c862cd00bce809db528040c04000000000000000000000000000000000a138203c916cb8425663db3bbff37f239a5745be885784b8e035a4f40c47954c48873f6d5aa06d579e213282fe789fa0000000000000000000000000000000016897b8adbc3a3a0dccd809f7311ba1f84f76e218c58af243c0aa29a1bb150ed719191d1ced802d4372e717c1c97570a", "Expected": "0000000000000000000000000000000004ad79769fd10081ebaaed9e2131de5d8738d9ef143b6d0fa6e106bd82cfd53bbc9fab08c422aa03d03896a0fb2460d0000000000000000000000000000000000bb79356c2d477dfbcb1b0e417df7cb79affbe151c1f03fa60b1372d7d82fd53b2160afdd88be1bf0e9dc99596366055", "Name": "matter_g1_add_57", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000a896c5a84cbd03e52ae77000eb0285f5704993664a744a89ff6b346efd2efec1a519b67229a3b87e1f80e6aa17e29460000000000000000000000000000000019f60f2cf585bdbc36947f760a15fa16c54cf46435cc5707def410202a3f4fa61b577ab2481e058b0345982d3e3d1666000000000000000000000000000000000a70b7bbc55e1f3e11e9eb7efd79d4e396742de48d911ddff8dd0a7cf10422423d5e68021948e1448e92c2e07c194776", "Expected": "000000000000000000000000000000000a87e7e115ccdf3c2c1a2716491d449c3f8329e73d264088f4af444d43cf05f8be0410da273ce7eeb32969830195b7e70000000000000000000000000000000010a973d6e4bd85105bf311eb0dcfdc0a5d38dba1c099206b60f2e2df4791fd58846bf19d83769506e1561212920b4895", "Name": "matter_g1_add_58", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000001450bddfa14033ed8cdb94386715013ed9b2c4f9d65944e9d32c0b3545a085113e173e5afcfccb78878414a464d318400000000000000000000000000000000109bd6e0636a7f96ffe2ce8e109171efaacfcd60189c7050259ddedd15dd257e11f2585bbd84e4a3f4d8fc5fbc0289cf0000000000000000000000000000000019b420d778da53aed81b48f2c9b9eb399e771edd5e124a41577452b409ca2503e2798cd25d791f489352fc7b7268ae23", "Expected": "00000000000000000000000000000000162bd29f2de10002c1c446bd9583e89751fb91703ad564e7951d41673e28d214729aa9b4b9875c397989df197c912d5f0000000000000000000000000000000004d393181871c93714afab6c33c16f68ec391fbfcad606ac65cc1d070949c099e21f710e2fe0dd4e4f50f99ea2167a7e", "Name": "matter_g1_add_59", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f35556500000000000000000000000000000000120935947070451885bf0c328bd83def193831ab9353844a01130074f16a1ff4d20df8459b5ad6a57d5f1959d37aae920000000000000000000000000000000012bb529b45ad7875784b62a7281d025002f15e7f86cc33555e7472df60da2cb15d37c8bf628142818c0711ee9047fb4d000000000000000000000000000000000baa801623312d95e2b51ce86373fea516007e468f265d974c2327c1779830db180bed6dbe8a64f0959aad26eaafb8d9", "Expected": "0000000000000000000000000000000010c4b328d264893099d89ba81b0765d0642bf36b0ac043be090c7b4f7987d21a906228c3c208c4ec5123d577efb0771f0000000000000000000000000000000016d08ce3bf755da7d4bae5f4b06b37845c17a717329c547e941be93325a04e9a5095d3f6e6c6f9ec3b1a740f59d88919", "Name": "matter_g1_add_60", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce00000000000000000000000000000000144f438d86d1d808d528ea60c5d343b427124af6e43d4d9652368ddc508daab32fd9c9425cba44fba72e3449e366b1700000000000000000000000000000000002c9e50f37ff0db2676637be8a6275fce7948ae700df1e9e6a0861a8af942b6032cca2c3be8b8d95d4b4b36171b4b0d400000000000000000000000000000000050f1a9b2416bbda35bac9c8fdd4a91c12e7ee8e035973f79bd35e418fd88fa603761e2b36736c13f1d7a582984bd15e", "Expected": "000000000000000000000000000000000f798f8d5c21cbce7e9cfcbb708c3800bf5c22773ec5b44590cdbb6f720ccddf05a9f5d5e6a51f704f7c295c291df29f000000000000000000000000000000001483903fde5a968dba6924dfac3933cd39f757e2f89120f4ca9d03aaaf9e18252bdb5c5d3939471666b8a42aeb31b4ed", "Name": "matter_g1_add_61", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d000000000000000000000000000000001211464c91c7e78b00fe156da874407e4eeb7f422dbd698effb9a83357bf226d3f189f2db541eb17db3ed555084e91ec000000000000000000000000000000000332cdc97c1611c043dac5fd0014cfeaee4879fee3f1ad36cddf43d76162108e2dc71f181407171da0ceec4165bcd9760000000000000000000000000000000015b96a13732a726bad5860446a8f7e3f40458e865229bd924181aa671d16b2df2171669a3faa3977f0ee27920a2c5270", "Expected": "0000000000000000000000000000000001c762175f885a8d7cb0be11866bd370c97fb50d4277ab15b5531dacd08da0145e037d82be3a46a4ee4116305b807de6000000000000000000000000000000000bb6c4065723eaf84d432c9fde8ce05f80de7fe3baed26cf9d1662939baac9320da69c7fe956acdd085f725178fe1b97", "Name": "matter_g1_add_62", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000b4e7355aea3488234552d3dddfa2d1ad3164056407770e6c54f764193c9dc044cb7f2b157a1c4153b2045867d6f99c50000000000000000000000000000000003ebca978ea429eedad3a2c782816929724fc7529fbf78ea5738f2ca049aab56c1773f625df2698433d55db7f5fc8ca2000000000000000000000000000000000d2477f57b21ed471a40566f99b7c2d84ce6b82eaf83a6c87a7c21f3242959c8423d4113b7fd8449277b363303bb17b0", "Expected": "00000000000000000000000000000000071dc0f985703bd8335093779de651b524c02faca5fc967766abd3f6f59176d2046d7a14d18c0b757b8c9802e44ebcd300000000000000000000000000000000154e5cb66be8979ee276e8e0f240557e3f7dc074c497293af589256652da21d66a6e6b00ca5bfa6f89963fbd5bc6cf48", "Name": "matter_g1_add_63", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679000000000000000000000000000000001461afe277bf0e1754c12a8aabbe60262758941281f23496c2eeb714f8c01fd3793faf15139ae173be6c3ff5d534d2bc00000000000000000000000000000000148ad14901be55baa302fa166e5d81cc741d67a98a7052618d77294c12aea56e2d04b7e497662debc714096c433e844e", "Expected": "0000000000000000000000000000000012c4dd169f55dfb5634bc4866f7cbd110648b5392ace6042b5f64aba3278f24085227521b7834864f00d01ec9998dd6800000000000000000000000000000000102d7a495850195424677853da01d70caeb6c0af5270bcfffbc2d4252c0f3680518cd8d2a0a6dbbbc7b52923a5b26562", "Name": "matter_g1_add_64", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c0000000000000000000000000000000002218b4498c91e0fe66417fe835e03c2896d858a10338e92a461c9d76bcecd66df209771ae02c7dcace119596018f83c000000000000000000000000000000001990233c0bae1c21ba9b0e18e09b03aeb3680539c2b2ef8c9a95a3e94cf6e7c344730bf7a499d0f9f1b77345926fef2d", "Expected": "0000000000000000000000000000000010c50bd0f5169ebd65ee1f9cd2341fa18dd5254b33d2f7da0c644327677fe99b5d655dd5bfdb705b50d4df9cfce33d1400000000000000000000000000000000088e47ffbbc80c69ec3c5f2abe644a483f62df3e7c17aa2ff025553d1aaf3c884a44506eff069f4c41d622df84bbafa1", "Name": "matter_g1_add_65", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f7000000000000000000000000000000000160e0f540d64a3cedba9cf1e97b727be716bbfa97fbf980686c86e086833dc7a3028758be237de7be488e1c1c368fe100000000000000000000000000000000108250b265bd78f5e52f14ef11515d80af71e4d201389693a5c3ef202cf9d974628421d73666ead30481547582f7abaf", "Expected": "00000000000000000000000000000000168af33c85ae6e650375ed29b91218198edd9135683f6a1428211acdcbf16bdf86f0a95575e47ee0969587a10fa9f3c90000000000000000000000000000000012d9f5d692c870b3da951b6d07797c186a8ddc89b9f08a1c0b8f0f119f10ca0b155e8df5424cf48900ad3bf09ce6872a", "Name": "matter_g1_add_66", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d20000000000000000000000000000000002fa19b32a825608ab46b5c681c16ae23ebefd804bb06079059e3f2c7686fe1a74c9406f8581d29ff78f39221d995bfd000000000000000000000000000000000b41ea8a18c64de43301320eaf52d923a1f1d36812c92c6e8b34420eff031e05a037eed47b9fe701fd6a03eb045f2ca7", "Expected": "000000000000000000000000000000000b99587f721a490b503a973591b2bb76152919269d80347aeba85d2912b864a3f67b868c34aee834ecc8cd82ac1373db0000000000000000000000000000000007767bb0ca3047eee40b83bf14d444e63d98e9fc6c4121bdf04ea7148bcfaf3819b70dcebd9a941134e5c649da8f8d80", "Name": "matter_g1_add_67", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531f0000000000000000000000000000000002a540b681a6113a54249c0bbb47faf7c79e8da746260f71fbf83e60f18c17e5d6c8a7474badafee646fe74217a86ca4000000000000000000000000000000000fe2db7736129b35dc4958ffd0de7115359857fb9480b03a751c4fceb9ae1b2b05855398badffc517ae52c67f6394e2a", "Expected": "000000000000000000000000000000000bc719a8397a035fc3587d32d7ef4b4cfd63d4a5619ab78301d59659208f86df9e247e5d12650acc51a3bca3827063a900000000000000000000000000000000150d5519380a65b1909b0d84da374484675d99b00b254d03e423e634a012b286e3fe074e9b0a7bb24ff52d327249a01b", "Name": "matter_g1_add_68", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e787900000000000000000000000000000000019d917eb431ce0c066f80742fe7b48f5e008cffa55ee5d02a2a585cc7a105a32bbf47bdff44f8a855ade38184a8279e0000000000000000000000000000000012ee762e29d91a4fc70bc7a2fb296a1dcdd05c90368286cca352b3d5fffc76e3b838e14ea005773c461075beddf414d8", "Expected": "0000000000000000000000000000000008197403ab10f32d873974c937ef4c27fbdb0f505c4df8ac96504705d4851cf951fb0263335e477063884527b21edf160000000000000000000000000000000005396f1affa20ca8530b519a4d5d400969f0c8c8731ecc0944e8086388e89a7ff7c16d9a2a90780972c4762b88a0f0af", "Name": "matter_g1_add_69", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a000000000000000000000000000000000d280fe0b8297311751de20adf5e2d9e97f0c1bfe0cd430514cfddbafd5cdcb8c61bd8af4176cc3394f51f2de64b152400000000000000000000000000000000039f511e890187f28c7a0b2bd695ae665e89b0544c325a44b9109da52cc6908d81e1a27163a353ab275d683860c2e007", "Expected": "0000000000000000000000000000000002baea63055f72646189bdd133153dd83026f95afad5ce2cffbee3f74c8d47d5480094b2b58b0936c78aa33cd9a8f72f0000000000000000000000000000000013e600456a2d76f5a760059e0ba987b881c6bc10d6161f388d7a9d8b2031921054edfec46afbd80b1364d8e8f6a5a7a2", "Name": "matter_g1_add_70", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f50000000000000000000000000000000015bad24d12b5d68558e961a17dbc3e1686e1b918e6192ebe6f3f71c925177e61d0162e018ac81126099effa0cadfa185000000000000000000000000000000000de73182569184b3d79dcfa8c27f46ec7a31fe8a3fd73fe26eec37a088461192bdbcf4d4b37b33b6177d6fde015d1631", "Expected": "000000000000000000000000000000000ced641c930387432d512861eefbf2d6131017154f99a0d3d24da880dfd2aaae91c2d9634053fab8b85fc11a7884d30600000000000000000000000000000000122071c0e87fae5031c850dccc4777c3ec9d8463bbc4ed84364d4261bc9d38f696a4320d53eea926a75ed9fcc9789a07", "Name": "matter_g1_add_71", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b256730000000000000000000000000000000015cdf7dafedce64aba34e1f18c57b28f297629c07ee96b732029b545cf5ea6afdf926daa6a48d1250c67aa2a8b797d370000000000000000000000000000000004867352f86267dbe8e32806e4ed02f1487e036051068f8e06d02e8dea6d3773b422e065d2db27c89ea69246d0185351", "Expected": "000000000000000000000000000000000e2c633351d627a075acd1e373bec96ba41b047f0307201f4b7c9978c1a72243d0b18113604cc421b8f66d76ec9b1360000000000000000000000000000000000844e258d602bf9aaa35ce46c4c91c80dd9337053d8ab22c1163a0571fcd1488a2ef57476e2b66dd9c26963b28284d11", "Name": "matter_g1_add_72", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc300000000000000000000000000000000077eb801bcde78e9dd73b58d2429a907ea0f5600a8005093d471be373bba23ea70bf828c766ccced6a46db84b440053f00000000000000000000000000000000101af9df2939089d72e42fe2dc3de3e32be8f4526a2263ebd872d0080ed4a152107bb3d2f56176bf72d5ae8bd0c30a3f", "Expected": "0000000000000000000000000000000010205c6be10a5fc5390b0e5ae47a8a822c8e9a7a96f113d081cde477ec0de7bf0e8385e61780b2335e4297edb35bcc6d000000000000000000000000000000001796af180463ed70cf330791c8201ee3f0fe52993f64819291bda33017285fcc3a515669b3d48a411276c849fa021f6f", "Name": "matter_g1_add_73", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a0000000000000000000000000000000019b09bb7dddd11c5d0e304dac120b920601dd3a3505e478c88850cc701c17eb02aa7bfb20e4017a62fc4fb544d4f9e8f00000000000000000000000000000000048ad536cf89576d4cce83ef065bc16c47f1a28ae27bd71d30d8f2177a9c6f8b2ed0cdf872ead71bc5a1252bccb4a7e0", "Expected": "000000000000000000000000000000000fb047098a1996a625cd19021f81ea79895e038756878d8772aaee9b6bbb66930e474dcc04579ad58f4877b742a890900000000000000000000000000000000017da74a4caefc55794a36eda7938371f42265cc1f2d87d41883152db82873daeb59642e8e663afddd4f24536a1f52b3f", "Name": "matter_g1_add_74", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa30000000000000000000000000000000005f84f9afa2a4a80ea1be03770cb26ac94bec65cf9cb3412a07683df41bb267c2b561b744b34779635218527484633e30000000000000000000000000000000013ce1d1764961d1b0dff236c1f64eabec2ce5a8526edf6b0bccb9ea412e5a91880db24510435cf297fcc1b774b318b65", "Expected": "000000000000000000000000000000000f4ca788dc52b7c8c0cb3419ab62c26db9fb434321fc6830837333c2bb53b9f31138eecccc3c33461297f99a810e24ad0000000000000000000000000000000006785d4f9cdf42264c00fdc4452883b9050eb56e2f6e46c7b8fc8d937dfe4d3ad5072d969a47c4811b36d3887256d0b9", "Name": "matter_g1_add_75", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c8000000000000000000000000000000000f0dd7a15dfc39dc2df47cf09761498b0b363157d8443356e768567f5a6d5913c2a67f12d93df2dcf50756bb686836b100000000000000000000000000000000055914dbda5b115222e738d94fbd430440c99bcc6d2c6cf7225c77756ffadf765b2d83447d395e876b5f6134563ed914", "Expected": "000000000000000000000000000000000ac0f0f62202d09cede55ca77b7344b46fd831b41015eb357cac07f0fa49c2564c2e9d5c591630226677446a9100757c000000000000000000000000000000000ca21d0128ef933fc1a48c1b4967f56912513e63a416d86ad40c0a4590b2edf88e4e8a286338b8b176d8b341ea480277", "Name": "matter_g1_add_76", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb211000000000000000000000000000000000a6ff5f01a97c0f3c89ac0a460861dc9040f00693bfae22d81ea9a46b6c570436f0688ed0deef5cdcc5e2142f195b5c000000000000000000000000000000000193a17880edffe5b2ebedf0dc25e479cac3b136db9b6b24009ea0a9ca526d6dd9714d10d64c999d4334baa081b9f2fbe", "Expected": "000000000000000000000000000000000b728d4ae4b45fae9a9e242524e95e44f175356726da50f46236f690eec17fdd5edce5df1253383378dc8f9c1fee98ae00000000000000000000000000000000131d28a5eab968c45ddc86b82f220dcdeab7c009c7c61986ee4e55045c024e1bcbe76a4e35000b5699ccec5858ba427e", "Name": "matter_g1_add_77", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a000000000000000000000000000000000b35fcf625cde78fba1b70904acb97d7eb449d968e8013855d44292e9c3b0df3cfbcace6f292ec3c7717e25490bb4c67000000000000000000000000000000000af57abd87df55034c32dbe68bd1c0b47139fc2c3a8887b7c151e57b57c9002070337c8dcb2ce2687f9f007d48dd68c1", "Expected": "00000000000000000000000000000000178a19966b5b0fa70c138be7f5ea51d5399c7b8dcc5171cbef82ecb1451aeccbd1ed29170a27f404ebf6daa2ec99bd69000000000000000000000000000000000b1b748494806175030f6b5e2977c58982bd6ec6662d69237f0521351653c772a40035f2504ac8949fb448a901379fd6", "Name": "matter_g1_add_78", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b00000000000000000000000000000000177a51fcc81580ccb7a8873fa93eaf860ca8fedde13cdf3eb53f11e66a1c1e934b82ee9251f711c5c479f33a22770c47000000000000000000000000000000000a0edc9a58f4bb414aa0aeec7bfa6076fb62bdbaee987192c18855adf4e813e7103b943e1dddc24754acfa90600a5750", "Expected": "0000000000000000000000000000000019195049a2d457709e284c84c72a211224efc4d7d46d25c9a537eea94149b06506df02a2a4e0a6428263e9605eaaacb500000000000000000000000000000000061139f9a70ce7cd87ed3a701163bde247382295f557b47a3a0a880d2780f015e8ac753eb3243f9ad138f92c3a2257c5", "Name": "matter_g1_add_79", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d000000000000000000000000000000001552982822e0b64a6204b27da0e192873bb5bd2997784ff0b6ed53801b402501a665c17f0a379fd946ab1adfae43c6af000000000000000000000000000000000938359655fe135dd2a390f83e27273feb68387ba94f2b6f7c15389f8272d64231ebe9c8271de90ff2358d935359ba85", "Expected": "00000000000000000000000000000000168f958a40e85341d90012e134976d1a5839e807948410cc0c81a50961552c052bb784c50da4c734f6aa583777c22b28000000000000000000000000000000000d26998bac6ec11bc5fcf6fe7262c984d6500cd5b21af979048b940e20054f8d759f8a011f3e09d01d10f9cf8ab150e1", "Name": "matter_g1_add_80", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d50000000000000000000000000000000000d94885dcc21b0b98821b6861a4d094e9eb5d5adcf7ca4275c5b759abbf9a9910f3b38073183d54a0569ecbbc1e9826400000000000000000000000000000000034a54b4bbb3f128608a866f5f5c554cf6ad7899f6650ca663a5bd5f1a3e4471e35a2440644c0e4e0a56080936b46d12", "Expected": "000000000000000000000000000000000d4734ab1bbcf9e30cf142a7aa9e8cde1b3c88d92397b8d7d48c7a7402561feee58a810abf67776e1890489efe7f8ec20000000000000000000000000000000005be9e4af0c0c183c43601339f162345f7c013f5941167cd925057e91c4641e19091a20123a36f2e803142833c0bc1ef", "Name": "matter_g1_add_81", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000014f16cbb17e7f63284d8a75968a4c8fc8ee7f37233ed656d696477c507c23e7c7eaf54001f44c93deb14c298aa6f94c00000000000000000000000000000000169bde83e861889c50b2138c76531a5866235d515a6fee4da7aaf8e8b903f2848a9fe7bbd55eac7f1c58ce3a88e7249d", "Expected": "000000000000000000000000000000001400f774b2d932c6b990da6e1b3493685e8f51d429e0c53e9af1b4a2d3876781b790bca4a1bc28ce0240ea21be24a2350000000000000000000000000000000004993fcf5723b7e02095d4ba73ff3194bbe36027bc9099b57084c91c7e7d50b76331bfb06d3c678d3e401bc3f7fcc577", "Name": "matter_g1_add_82", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000009acc4b4678b4b645fde47d1b75a5dda8caf6696ad2bf312dd5c12d7f3ab50b95152f5fe59842650c8a1a785f345c3ab000000000000000000000000000000000b672989004fe54f4d645e40cd29a21418151134fd2b90a68185040ceff141ced7f7ece1fdd9137c32589fa04b105a0e", "Expected": "000000000000000000000000000000000fcb0ab180a69b0a230d9dba98099fdce4969f82fc7e7ad93352a7c8dd448bb0ba9c7d62f53d5dc80506bc36190d9bc700000000000000000000000000000000047b7306f4a53c21d42993c50f2365486d02dac495f2dee4f8971a4af308396fce6c90f3cfde857bf7a2c6bf5d0d8aa7", "Name": "matter_g1_add_83", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f6000000000000000000000000000000000198e12ade128447a240e03e024183c401d605cab1ed81f0f5bb7bc4c7cc9c889a2a01f59c0e37a0767a927719e5a95d000000000000000000000000000000001946e39fee9b76ce552108b339b9b24d11e43d3275ac19d2d4bc745c409bdc3f7c473a60c4d3a4d2cc3b598ae0d66880", "Expected": "00000000000000000000000000000000050b45f896fa40099cda8b1f20ab88644915c16f926589cd709e00149b12922347fa7122175424cd44e8875f217b9ad7000000000000000000000000000000001122b7e9b1509efe5616368b14085bdd36fb7adb85cd5a7f23e327548986f5298c045a602b6ee1265d53a4432a4a3c0e", "Name": "matter_g1_add_84", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac47388620000000000000000000000000000000009c48aa2681b3005b24075bb3a122ac100cbaca872f761f4398edaba9dd9da6d04d4a4925028297dfe5f77c2b0b5c821000000000000000000000000000000000ea95c646fb68aa458e69c267a6ca640a6a24d40bdca0161246e4521d13c46facfc1ac86dfc0a804cfa6665cebeec822", "Expected": "0000000000000000000000000000000005325a499aec678ada9eb673d366fe0475e885d5188e2fb687a96949e8f782852fba962197976b868ec083c512bfb66b000000000000000000000000000000000c4d6fcacc8d82401882bee355b37930d83e3cea2e4a7bc133e65a3e0af919b25fc3f30c333873da9406845ce42dbb87", "Name": "matter_g1_add_85", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae80000000000000000000000000000000008e8799a6cc0339e94e861692c81eee53e8a7b326523d5344b416bfbce04290585ef56018834cfd93d234bfa2943369f000000000000000000000000000000000fa1b01aab0878adad693ec769fb68640931c355b3802c51d4a3772300be5b16ceecdc8328a229b3b9f3639170db96f8", "Expected": "000000000000000000000000000000000685ec14da61c48bcb697966aca9e27601db43f0fb1f32e026fb33738eecfbb7012aa1ca3acf36a21fa846730245add70000000000000000000000000000000003fc52a1c3342b12271bbc178545bb20e96e8f1fde673e51f3d27ab5cb42e60aca49c6077e0f687be59b2d25cda9718e", "Name": "matter_g1_add_86", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000bb3a76287fb98fe668cb0a5de603c768340ee6b7f9f686a22da3a86926d8734d2c565c41f94f08fa3ef0e665f4ccb520000000000000000000000000000000016c02dbfb307c96d5b9c144672fe62f3e9cd78991844f246945ee484cbdef2a4c1b001a017cafb3acc57b35f7c08dc44", "Expected": "00000000000000000000000000000000021796fd6ef624eed7049b8a5c50415cc86104b2367f2966eb3a9f5b7c4833b9470ef558457426f87756d526d94d8dfe000000000000000000000000000000000f492dca3f0a89102b503d7a7d5b197946348e195954d23b8ab9ab7704b3bccecaa2123b8386662f95cd4cfdbbb7a64d", "Name": "matter_g1_add_87", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f00000000000000000000000000000000127420ff97df415e336cf3e24c39c161fad630c45c7ccef80f1831c4f5ed54da12f2c49a161e72bc70285fa0498e46d00000000000000000000000000000000013e605c21014f72364f8bff392ce64a10078ea537237fa282d5dd252ba1677b84b8c15d7925e54a4ab36f1feb13d3064", "Expected": "000000000000000000000000000000000ae916770455b0a63717e81802f5a7fcfbcc3e260b7adeca02a61a520c338d495eea29c4f070fd6efc1b8d23eb285e4c00000000000000000000000000000000134784e092744df573ba78f7d6f3cf1ed19491a0fc7ddfa02d3ca043bcf102fd40c33ac44b03a947308e3cc7af41c2df", "Name": "matter_g1_add_88", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab40000000000000000000000000000000016f41e8b098839944adc12481e5f965657a4faedd4f4cdea51a9597a6a0356989e791a686d3d2ee6232ab93683259c6b000000000000000000000000000000000d27b4a56b2cc2216e61eb41061f9a586a704652704906f7fe0eab869ba00d34205ea66f7a02d337d08b916598494e52", "Expected": "0000000000000000000000000000000012842c9d7f4309f6e40124a071d317f5597de419db0d5a8e5324a517f7b61dfdeea2fb4503ad7cdd8deb8aaa5c412554000000000000000000000000000000000ace4d9f98ee6e8a4416ef14d64f26dc49e102e69eced46ef829a352e58e8c1a7e1f083e3f4fc07f24ccd1685dedf215", "Name": "matter_g1_add_89", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000019e7c8d182e3b674dfa21539613f7de5d4872d4f4732307a5c6d95ada7e81a01bc25bda34e0b46634e0b0b32cd47e8ec0000000000000000000000000000000008149237de73ab46d5c20dfd85b07f593c0caf2e2e364335450e3ebb478a9f6b9ac0af89174dffd92eda2783a5271f01", "Expected": "000000000000000000000000000000000875289fdaead079a283aafe4de7035c88662642b6bba389b17583f8e3b5801dada6e46bd897af961997665e6ed4a55700000000000000000000000000000000050a6b9c1db35865df0a042d27a042ff4b8d3bec2fba6a3a28a71c5a574620dc05cda0e70932ce9b8966e4592220c147", "Name": "matter_g1_add_90", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a6000000000000000000000000000000000c0f33f2d76366af661d6fa58a8b5aab207d35ce03899e495f7ddccedf201d9816f270468b207413a2ca70380c798fc60000000000000000000000000000000002a7dc7e2b163e65cadf93b5d682982288c8f36d08b1db8e0b1cb40cd3c7231f3f1672da42b4679f35db2076a8de5b42", "Expected": "0000000000000000000000000000000019ea92820dcd442358db359146797aa82beff6154946b1ea14dccae05e8252b776b817dc044a20764e3514cd22799c0b000000000000000000000000000000000ed929fef2cb11e8b6b9b5d52bfde82080eda747f0c82f33b9cb87019476f0c128e6b918a4486172dee2884ba538ae5d", "Name": "matter_g1_add_91", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000118fb45274a6b0ca9fe2654821e3b30caa46444f7c64b1921cf16dfd56a43916947d4fb6968d718a59a30ed38d65ce3000000000000000000000000000000000110e8e73e640bbea6927cd770baaf887c8e0e0c58260bca489c39b6dd7a24ab8c0c0a2495133d8ff8c7afb9790b37faa", "Expected": "0000000000000000000000000000000009452bd0a167683e30c673ffd4e750c66a81edf309a8d2d6dd915c358b30b0ffc001c4165b1b17bf157a0f966bfd91d00000000000000000000000000000000015df0b1ee359dd3e35a7b2c33edbb8e92b18804ae3359a369c6a529f5561298e6be9a3498c9477f33353124af7e91968", "Name": "matter_g1_add_92", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000005dcb54cdf9635db275540c16307fc9f07b4ca5cd91e3977e4b95b58e8103e40ed9fa74752b2a43d95b6acb6f5fcbf440000000000000000000000000000000007ef8457752a47864ef2698176a53990e4822421ecf83b2716251e3ce69151ab2767d4a6611a0a6e0e40a57164ffb94e", "Expected": "0000000000000000000000000000000011f1ac702a06699dd64b63ebdd8b5381578f63b603c63c3a47413fe764af239ab7024712320f3ea3daefa6bd3cd3dfe9000000000000000000000000000000000918bb83a22b4fc66247e007c17155c4c2ec6326131c10fe04a5f9b82ddeca3d21c7c397a70a3949fda4d766540c85ff", "Name": "matter_g1_add_93", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c35850000000000000000000000000000000006d3335e092616363e94436bb68be89667c706564ba687f4a3494fcf7da62fd9ad8ae68cb76524926c261983711a14ad000000000000000000000000000000000f085a3d013592c402a380e2e8d9019864a775e7b8e8b94603c8cc1eb1def1e91075fd5675f76534397e2a7d76c2331e", "Expected": "000000000000000000000000000000000344951ccb5e60d1838f7793fcf8b765f5f252b69e1cfdb4bd3c20692c8ffa01afbda6950974a65f6ac74afb9da5942e0000000000000000000000000000000014f5f0e6b99a04d1c5c2adf96c53dd41f8c01aab8db4f0e6d7fc5eab27f6c03c429632db4e1c21467c09d8a54066a4d3", "Name": "matter_g1_add_94", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b0000000000000000000000000000000019e2ed6e9757e2339d013078fac91c966045f7a1416a56135d75e603c2021a8bebf4acbf6c0d5ba911f66510e9a7ad1a0000000000000000000000000000000008b8585444ffb3bd4fb6ee23e8128142aa72fd574a506151a0eea8979cbd694e03897caba63771b0490d46063bc5bb57", "Expected": "000000000000000000000000000000000a449fb0da911c544887b24860bc5fcaaf054041cc80f16bbb44c796520bee454d0d06f84fd5aa179a44fd4fac9f144a000000000000000000000000000000000fca81401349089caaef9156a86c64271c77235c9efd136dcfad9894450b076cb3dd1a05bfa1e62ef904435eee5d2250", "Name": "matter_g1_add_95", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b767f399e4ebea34fd6b6b7f32a77f4a36841a12fc79e68910a963175d28cb634eeb8dc6e0533c662223c36b728cce2000000000000000000000000000000000cb3827fd6ac2c84f24f64789adac53439b4eba89409e12fbca0917faa6b7109aa831d16ca03191a124738228095ed65000000000000000000000000000000000f4a256b4288386545957a3ba28278c0ce69a8a412febfed1f952ca13e673822bacb6b7751ea75893b680ea363aab66400000000000000000000000000000000152379d006e74798199f83b0c6c22a98440ef653d7f0a8c5e3026bcdabec8be59a3cc291ba05860bd0639c5c5f5bee26", "Expected": "000000000000000000000000000000000c427721953e139d4f12ad2a3f8f91a4caa49875a87001b619c8a6e909a7da8ddd9dd026bf56d5f85d49fd17527106a800000000000000000000000000000000018add2816914ef51a289e707ba0224fcf0b7bcfa4001487e90dbdce53f1b596e1f5872de32fcee6f63bce4484ccbef7", "Name": "matter_g1_add_96", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000150b75e9e9c03ada40b607f3d648bd6c40269aba3a1a992986dc005c9fde80bb1605266add0819641a0ca702d67bceed00000000000000000000000000000000083b43df032654f2dce90c8049ae4872a39f9cd860f08512930f43898e0f1e5625a5620818788797f3ca68134bc27d220000000000000000000000000000000012dae9aee13ed6ad52fe664bf7d2d0a1f134f0951d0d7ce5184e223bde164f6860967f9aaaa44fa6654d77d026c52d2a000000000000000000000000000000000f71889d64ec2f7da7319994883eb8bd1c753e6cdd3495036b630c35f07118a1bc10568c411ecbdf468a9cdaa9b4811b", "Expected": "000000000000000000000000000000000275b8efb3a3e43e2a24d0cda238154520f0a2b265f168bfc502b9cd4a07b930756961ae7e4fe3f01a5473d36ce3356200000000000000000000000000000000113403d5a968f01ba127dd8ef6c8d7b783a10d039a6b69c617032eba7122e9297f3ce2360c829ae64fdc9794695bf173", "Name": "matter_g1_add_97", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000cba419694214e95a3605a9b748854d16c8e6e1ee151c907487d8189acfac1361b790a5e78f43593152027295adf8df400000000000000000000000000000000110813ff6e0ddf3427e2a514d3f0bfbadcaf9dbf039e0f93fb9643d1e62bc2469fe84cd9ff0d585bdd1037255bbe54850000000000000000000000000000000004e9dd69012ab596b5d3f1f8e4593b448685fcec4ab3394008178b137b762ddf9150cbb8dbb74c8af45bd8baab9a6c4f000000000000000000000000000000001132b66a2127885774062732127951f051c9c3c9b5aba02406e3f3cd4ecfe2dbf6614ebaca3bfe9efbe4f6e5b15ba0f5", "Expected": "000000000000000000000000000000000594c808954bb930bd038806500c9e3fd6460a83554e945baeeec2354a3805f046c76aea62c249080f16ae8e70f8fa6b00000000000000000000000000000000046924a32fb3f2df9a52615e45eeea2fa3ac0e2ccd38458194ada6b4d993ecdc0f441e41d0ea37599254a06aef68b9ae", "Name": "matter_g1_add_98", - "Gas": 600, + "Gas": 500, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000106df8eba767e90cce0eabdaacc24d8e226c6865012ef8cb1460de5a319d443fdc6b4f4e58fb668943e0528b1809da10000000000000000000000000000000019789f464c95c179af18704c0b67b881991880f75ee7b03b9feafa3eafcd0f7d30a17fdd9cf439ff7fe683adca2083b50000000000000000000000000000000017a81b957a12adf474a2913e8636f169ea9cd10be62c16b88f95f5caf661f158a032a9f7d249fdf2765caa1564bed0570000000000000000000000000000000017fbf2abc62dc2678b65d509e19c9c9c5d961c72565649a078da8dff98be6236ef314e9ff8022f639ff565353345c230", "Expected": "00000000000000000000000000000000002c8bc5f39b2c9fea01372429e92a9c945fad152da67174f4e478fdead734d50f6e2da867c235f1f2f11bdfee67d2a7000000000000000000000000000000000c1dd27aad9f5d48c4824da3071daedf0c7a0e2a0b0ed39c50c9d25e61334a9c96765e049542ccaa00e0eccb316eec08", "Name": "matter_g1_add_99", - "Gas": 600, + "Gas": 500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", + "Name": "bls_g1add_g1+p1", + "Expected": "000000000000000000000000000000000a40300ce2dec9888b60690e9a41d3004fda4886854573974fab73b046d3147ba5b7a5bde85279ffede1b45b3918d82d0000000000000000000000000000000006d3d887e9f53b9ec4eb6cedf5607226754b07c01ace7834f57f3e7315faefb739e59018e22c492006190fba4a870025", + "Gas": 500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "Name": "bls_g1add_p1+g1", + "Expected": "000000000000000000000000000000000a40300ce2dec9888b60690e9a41d3004fda4886854573974fab73b046d3147ba5b7a5bde85279ffede1b45b3918d82d0000000000000000000000000000000006d3d887e9f53b9ec4eb6cedf5607226754b07c01ace7834f57f3e7315faefb739e59018e22c492006190fba4a870025", + "Gas": 500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1add_(g1+0=g1)", + "Expected": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "Gas": 500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1add_(p1+0=p1)", + "Expected": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", + "Gas": 500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00000000000000000000000000000000114d1d6855d545a8aa7d76c8cf2e21f267816aef1db507c96655b9d5caac42364e6f38ba0ecb751bad54dcd6b939c2ca", + "Name": "bls_g1add_(g1-g1=0)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca9426000000000000000000000000000000000195e911162921ba5ed055b496420f197693d36569ec34c63d7c0529a097d49e543070afba4b707e878e53c2b779208a", + "Name": "bls_g1add_(p1-p1=0)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "Name": "bls_g1add_(g1+g1=2*g1)", + "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", + "Gas": 500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2100000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", + "Name": "bls_g1add_(p1+p1=2*p1)", + "Expected": "0000000000000000000000000000000015222cddbabdd764c4bee0b3720322a65ff4712c86fc4b1588d0c209210a0884fa9468e855d261c483091b2bf7de6a630000000000000000000000000000000009f9edb99bc3b75d7489735c98b16ab78b9386c5f7a1f76c7e96ac6eb5bbde30dbca31a74ec6e0f0b12229eecea33c39", + "Gas": 500, "NoBenchmark": false } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG1Mul.json b/core/vm/testdata/precompiles/blsG1Mul.json index 0e166a29ca5..0f95e06164e 100644 --- a/core/vm/testdata/precompiles/blsG1Mul.json +++ b/core/vm/testdata/precompiles/blsG1Mul.json @@ -726,5 +726,54 @@ "Name": "matter_g1_mul_99", "Gas": 12000, "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g1mul_(g1+g1=2*g1)", + "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g1mul_(p1+p1=2*p1)", + "Expected": "0000000000000000000000000000000015222cddbabdd764c4bee0b3720322a65ff4712c86fc4b1588d0c209210a0884fa9468e855d261c483091b2bf7de6a630000000000000000000000000000000009f9edb99bc3b75d7489735c98b16ab78b9386c5f7a1f76c7e96ac6eb5bbde30dbca31a74ec6e0f0b12229eecea33c39", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_g1mul_(1*g1=g1)", + "Expected": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_g1mul_(1*p1=p1)", + "Expected": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1mul_(0*g1=inf)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1mul_(0*p1=inf)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 12000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", + "Name": "bls_g1mul_(x*inf=inf)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 12000, + "NoBenchmark": false } -] +] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG1MultiExp.json b/core/vm/testdata/precompiles/blsG1MultiExp.json index 62b91f6f4d7..27c47e66073 100644 --- a/core/vm/testdata/precompiles/blsG1MultiExp.json +++ b/core/vm/testdata/precompiles/blsG1MultiExp.json @@ -719,5 +719,82 @@ "Name": "matter_g1_multiexp_99", "Gas": 64128, "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g1multiexp_(g1+g1=2*g1)", + "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", + "Gas": 14400, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g1multiexp_(p1+p1=2*p1)", + "Expected": "0000000000000000000000000000000015222cddbabdd764c4bee0b3720322a65ff4712c86fc4b1588d0c209210a0884fa9468e855d261c483091b2bf7de6a630000000000000000000000000000000009f9edb99bc3b75d7489735c98b16ab78b9386c5f7a1f76c7e96ac6eb5bbde30dbca31a74ec6e0f0b12229eecea33c39", + "Gas": 14400, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_g1multiexp_(1*g1=g1)", + "Expected": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", + "Gas": 14400, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_g1multiexp_(1*p1=p1)", + "Expected": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a21", + "Gas": 14400, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1multiexp_(0*g1=inf)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 14400, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1multiexp_(0*p1=inf)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 14400, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", + "Name": "bls_g1multiexp_(x*inf=inf)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 14400, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1multiexp_(2g1+inf)", + "Expected": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", + "Gas": 21312, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1multiexp_(inf+inf)", + "Expected": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 21312, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a210000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g1multiexp_(2g1+2p1)", + "Expected": "00000000000000000000000000000000148f92dced907361b4782ab542a75281d4b6f71f65c8abf94a5a9082388c64662d30fd6a01ced724feef3e284752038c0000000000000000000000000000000015c3634c3b67bc18e19150e12bfd8a1769306ed010f59be645a0823acb5b38f39e8e0d86e59b6353fdafc59ca971b769", + "Gas": 21312, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e300000000000000000000000000000000112b98340eee2777cc3c14163dea3ec97977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca942600000000000000000000000000000000186b28d92356c4dfec4b5201ad099dbdede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a2147b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff66513800000000000000000000000000000000184bb665c37ff561a89ec2122dd343f20e0f4cbcaec84e3c3052ea81d1834e192c426074b02ed3dca4e7676ce4ce48ba0000000000000000000000000000000004407b8d35af4dacc809927071fc0405218f1401a6d15af775810e4e460064bcc9468beeba82fdc751be70476c888bf3328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d21600000000000000000000000000000000009769f3ab59bfd551d53a5f846b9984c59b97d6842b20a2c565baa167945e3d026a3755b6345df8ec7e6acb6868ae6d000000000000000000000000000000001532c00cf61aa3d0ce3e5aa20c3b531a2abd2c770a790a2613818303c6b830ffc0ecf6c357af3317b9575c567f11cd2c263dbd792f5b1be47ed85f8938c0f29586af0d3ac7b977f21c278fe1462040e2000000000000000000000000000000001974dbb8e6b5d20b84df7e625e2fbfecb2cdb5f77d5eae5fb2955e5ce7313cae8364bc2fff520a6c25619739c6bdcb6a0000000000000000000000000000000015f9897e11c6441eaa676de141c8d83c37aab8667173cbe1dfd6de74d11861b961dccebcd9d289ac633455dfcc7013a347b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665131000000000000000000000000000000000a7a047c4a8397b3446450642c2ac64d7239b61872c9ae7a59707a8f4f950f101e766afe58223b3bff3a19a7f754027c000000000000000000000000000000001383aebba1e4327ccff7cf9912bda0dbc77de048b71ef8c8a81111d71dc33c5e3aa6edee9cf6f5fe525d50cc50b77cc9328388aff0d4a5b7dc9205abd374e7e98f3cd9f3418edb4eafda5fb16473d211000000000000000000000000000000000e7a16a975904f131682edbb03d9560d3e48214c9986bd50417a77108d13dc957500edf96462a3d01e62dc6cd468ef11000000000000000000000000000000000ae89e677711d05c30a48d6d75e76ca9fb70fe06c6dd6ff988683d89ccde29ac7d46c53bb97a59b1901abf1db66052db55b53c4669f19f0fc7431929bc0363d7d8fb432435fcde2635fdba334424e9f5", + "Name": "bls_g1multiexp_multiple", + "Expected": "00000000000000000000000000000000053fbdb09b6b5faa08bfe7b7069454247ad4d8bd57e90e2d2ebaa04003dcf110aa83072c07f480ab2107cca2ccff6091000000000000000000000000000000001654537b7c96fe64d13906066679c3d45808cb666452b55d1b909c230cc4b423c3f932c58754b9b762dc49fcc825522c", + "Gas": 42000, + "NoBenchmark": false } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG2Add.json b/core/vm/testdata/precompiles/blsG2Add.json index 64ca2006dc2..30aa9f91d1a 100644 --- a/core/vm/testdata/precompiles/blsG2Add.json +++ b/core/vm/testdata/precompiles/blsG2Add.json @@ -3,728 +3,784 @@ "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", "Name": "bls_g2add_(g2+g2=2*g2)", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf300000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e849", "Expected": "000000000000000000000000000000000411a5de6730ffece671a9f21d65028cc0f1102378de124562cb1ff49db6f004fcd14d683024b0548eff3d1468df26880000000000000000000000000000000000fb837804dba8213329db46608b6c121d973363c1234a86dd183baff112709cf97096c5e9a1a770ee9d7dc641a894d60000000000000000000000000000000019b5e8f5d4a72f2b75811ac084a7f814317360bac52f6aab15eed416b4ef9938e0bdc4865cc2c4d0fd947e7c6925fd1400000000000000000000000000000000093567b4228be17ee62d11a254edd041ee4b953bffb8b8c7f925bd6662b4298bac2822b446f5b5de3b893e1be5aa4986", "Name": "bls_g2add_(2*g2+3*g2=5*g2)", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Expected": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Name": "bls_g2add_(inf+g2=g2)", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2add_(inf+inf=inf)", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000039b10ccd664da6f273ea134bb55ee48f09ba585a7e2bb95b5aec610631ac49810d5d616f67ba0147e6d1be476ea220e0000000000000000000000000000000000fbcdff4e48e07d1f73ec42fe7eb026f5c30407cfd2f22bbbfe5b2a09e8a7bb4884178cb6afd1c95f80e646929d30040000000000000000000000000000000001ed3b0e71acb0adbf44643374edbf4405af87cfc0507db7e8978889c6c3afbe9754d1182e98ac3060d64994d31ef576000000000000000000000000000000001681a2bf65b83be5a2ca50430949b6e2a099977482e9405b593f34d2ed877a3f0d1bddc37d0cec4d59d7df74b2b8f2df0000000000000000000000000000000017c9fcf0504e62d3553b2f089b64574150aa5117bd3d2e89a8c1ed59bb7f70fb83215975ef31976e757abf60a75a1d9f0000000000000000000000000000000008f5a53d704298fe0cfc955e020442874fe87d5c729c7126abbdcbed355eef6c8f07277bee6d49d56c4ebaf334848624000000000000000000000000000000001302dcc50c6ce4c28086f8e1b43f9f65543cf598be440123816765ab6bc93f62bceda80045fbcad8598d4f32d03ee8fa000000000000000000000000000000000bbb4eb37628d60b035a3e0c45c0ea8c4abef5a6ddc5625e0560097ef9caab208221062e81cd77ef72162923a1906a40", "Expected": "000000000000000000000000000000000a9b880c2c13da05bdeda62ea8f61e5fc2bf0b7aa5cc31eaf512bef7c5073d9e9927084b512e818dbf05eab697ba0661000000000000000000000000000000000b963b527aa3ec36813b108f2294115f732c878ac28551b5490615b436406773b5bb6a3f002be0e54db0bcebe40cb2e2000000000000000000000000000000000bd6e9060b42e36b57d88bc95b8b993da2d9d5acd95b73bad0509c2324212bcf7a94a46901932c0750535d00008a34f7000000000000000000000000000000000a374afd32bc3bb20c22a8864ce0dafe298bda17260b9d1d598a80830400c3fd4e8a8f677630eae5d4aa0a76a434e0ba", "Name": "matter_g2_add_0", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018c0ada6351b70661f053365deae56910798bd2ace6e2bf6ba4192d1a229967f6af6ca1c9a8a11ebc0a232344ee0f6d6000000000000000000000000000000000cc70a587f4652039d8117b6103858adcd9728f6aebe230578389a62da0042b7623b1c0436734f463cfdd187d20903240000000000000000000000000000000009f50bd7beedb23328818f9ffdafdb6da6a4dd80c5a9048ab8b154df3cad938ccede829f1156f769d9e149791e8e0cd900000000000000000000000000000000079ba50d2511631b20b6d6f3841e616e9d11b68ec3368cd60129d9d4787ab56c4e9145a38927e51c9cd6271d493d938800000000000000000000000000000000192fa5d8732ff9f38e0b1cf12eadfd2608f0c7a39aced7746837833ae253bb57ef9c0d98a4b69eeb2950901917e99d1e0000000000000000000000000000000009aeb10c372b5ef1010675c6a4762fda33636489c23b581c75220589afbc0cc46249f921eea02dd1b761e036ffdbae220000000000000000000000000000000002d225447600d49f932b9dd3ca1e6959697aa603e74d8666681a2dca8160c3857668ae074440366619eb8920256c4e4a00000000000000000000000000000000174882cdd3551e0ce6178861ff83e195fecbcffd53a67b6f10b4431e423e28a480327febe70276036f60bb9c99cf7633", "Expected": "000000000000000000000000000000001963e94d1501b6038de347037236c18a0a0c8cec677e48fc514e9fc9753a7d8dcf0acc4b3b64572cb571aebbe0b696640000000000000000000000000000000000d9739acc3a60f6dffb26f9b5f1fd114a21f2983deea192663c53e012b9f8e1cabd4942ad039badbd4745ddc0a26a91000000000000000000000000000000000b4206dcdb80d62195febb6773acab25fa2c09a2e4be9416ca019faeb72f1fad1dfdc51e8cea39b371a045b18947d40a00000000000000000000000000000000100758b888fa27e9258ddd5d83409e8aeac576874bc399b33b8bc50d77fce5358cb091d42f9a1b1ed09be3f200959989", "Name": "matter_g2_add_1", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003632695b09dbf86163909d2bb25995b36ad1d137cf252860fd4bb6c95749e19eb0c1383e9d2f93f2791cb0cf6c8ed9d000000000000000000000000000000001688a855609b0bbff4452d146396558ff18777f329fd4f76a96859dabfc6a6f6977c2496280dbe3b1f8923990c1d6407000000000000000000000000000000000c8567fee05d05af279adc67179468a29d7520b067dbb348ee315a99504f70a206538b81a457cce855f4851ad48b7e80000000000000000000000000000000001238dcdfa80ea46e1500026ea5feadb421de4409f4992ffbf5ae59fa67fd82f38452642a50261b849e74b4a33eed70cc000000000000000000000000000000000a69d6d9f79e19b38e6bf5a245dc820bddbdfe038d50932f76d0e4629d759f8ca6d573fcfc39256305daedf452f9fdf40000000000000000000000000000000015f5949369e58487afcecf8018775d1b0a73e913bf77e13d2e5a843bbbeba7d1978ca27ae8bfc87d30f567dd396b980e00000000000000000000000000000000182198bb38a0353b8db25389e56ab0d8679a1bda008a65dad77e4c95bc6804f6311eb16c761e1a5e2a5f87cfada49fa4000000000000000000000000000000000eb5483959e98c30e71db52615f63521378b156f142d46f3bb285b94aef39d80feacec335b797c5a68dc17ba89d43e0f", "Expected": "00000000000000000000000000000000079e4fc2190d3441fa76c2d925d23b81e353e09e9138fdde51234195e564a32c98aa0d240f051298bf966d17adc2d6fb000000000000000000000000000000000aa327776fa7e15000dd548fcdc3a1cc6f9d0ab33046dd4240a3002962131b738ffed579945a348c795cfcb33682cf3b00000000000000000000000000000000179232ec56602d1ff79861cbfa2edece34b296541483aa65fe0cb493f520b7722cfffbe04294dd054770a38bf75d927b000000000000000000000000000000001826b88a6b411330757bb304a380487a02f7cf421115b84b3f468d11a83dbf304ce7a5661f4f01299d3c7865305a0006", "Name": "matter_g2_add_2", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000149704960cccf9d5ea414c73871e896b1d4cf0a946b0db72f5f2c5df98d2ec4f3adbbc14c78047961bc9620cb6cfb5900000000000000000000000000000000140c5d25e534fb1bfdc19ba4cecaabe619f6e0cd3d60b0f17dafd7bcd27b286d4f4477d00c5e1af22ee1a0c67fbf177c00000000000000000000000000000000029a1727041590b8459890de736df15c00d80ab007c3aee692ddcdf75790c9806d198e9f4502bec2f0a623491c3f877d0000000000000000000000000000000008a94c98baa9409151030d4fae2bd4a64c6f11ea3c99b9661fdaed226b9a7c2a7d609be34afda5d18b8911b6e015bf49000000000000000000000000000000000286f09f931c07507ba4aafb7d43befe0b1d25b27ecc9199b19a9dc20bc7ec0329479ef224e00dece67ec0d61f1ca5ae0000000000000000000000000000000014e6ed154b5552be5c463b730b2134f83e0071dcdadfaa68e6c7c7f6e17dabb7daf06e409177bc4b38cfdb8248157618000000000000000000000000000000000f145e998dc6eb0c2b2be87db62949c7bfa63e8b01c8634248010fd623cfaec5d6c6c193331440957d333bf0c988b7b10000000000000000000000000000000002a1ab3eea343cfdea5779f64b3bddbf0769aded60e54a7507338f044310ba239430663394f110e560594d6042a99f1c", "Expected": "000000000000000000000000000000000f69e3616e7122bf78230461bb1f4b194988adc6149372691d8794d0086fba0870a2255a2c79cc3426e7ba4d032fc2ab00000000000000000000000000000000174752301e05dcd62f7a3ae3357344e64d1c94835b2b742ac24449ee2728d693a0df10c3beaeb45d1b4af4ac2bdbb8b200000000000000000000000000000000051a761a3ceb275ec28a2a269b5ded1d9fd11a617c958e73c07de3a92ac480aa82c7d2a1852d291804e734526277f5740000000000000000000000000000000009bec9045ea89d5d16588e3373cc977f6d975d0e2213b171403a9b2ca460b3b2e1106b474185516d4200655b17a179a1", "Name": "matter_g2_add_3", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001156d478661337478ab0cbc877a99d9e4d9824a2b3f605d41404d6b557b3ffabbf42635b0bbcb854cf9ed8b8637561a8000000000000000000000000000000001147ed317d5642e699787a7b47e6795c9a8943a34a694007e44f8654ba96390cf19f010dcf695e22c21874022c6ce291000000000000000000000000000000000c6dccdf920fd5e7fae284115511952633744c6ad94120d9cae6acda8a7c23c48bd912cba6c38de5159587e1e6cad519000000000000000000000000000000001944227d462bc2e5dcc6f6db0f83dad411ba8895262836f975b2b91e06fd0e2138862162acc04e9e65050b34ccbd1a4e000000000000000000000000000000000d1007ca90451229d3780d66d3aed7c9d8fc82e9d45549e8586600e38eb6763f3c466e2f6ba6ba1dafd8f00cc452dda20000000000000000000000000000000001d017d920a262b6d6597bab532f83270f41526409510e80278d1c3595ceabb9ceba8ae32b1817297ff78ea7a0d252e8000000000000000000000000000000000935b7a59d2e51bbb2f9b54ccb06ebee9d189fa82f0e97d10c8020badb3de7fe15731b5895faed8cad92ae76e2e1b649000000000000000000000000000000000792dadd48a20040ad43facedc109747411895180813349d41d0e5b389176bfb15895d41665be8d1afa80835ef818eca", "Expected": "000000000000000000000000000000000c079610e6f8770d65352f911863b6cb4fcb25cacc4a42f75e34e29e977c93244a6241cf3d5bd1040ce7d8987996f87e0000000000000000000000000000000010d08d8f6fa8ee7042c0891ea0c3b9b59a79da52cf3a91627c79d456212e3f6f39e1f69aa0053bbdb4076a3f7d05e5dc00000000000000000000000000000000069047218b0ac1e07650ac8f4a1b9235f68408f543517c4ae3c0ec47c79b468713c704ff3680edc8abd1bbed7a5fa75d00000000000000000000000000000000137737706162e02cfa75ce2154d57c9a3520818cc04626654824769ad92ff7977942f3881a28284ea47c14f353772d0b", "Name": "matter_g2_add_4", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019c31e3ab8cc9c920aa8f56371f133b6cb8d7b0b74b23c0c7201aca79e5ae69dc01f1f74d2492dcb081895b17d106b4e000000000000000000000000000000001789b0d371bd63077ccde3dbbebf3531368feb775bced187fb31cc6821481664600978e323ff21085b8c08e0f21daf72000000000000000000000000000000000009eacfe8f4a2a9bae6573424d07f42bd6af8a9d55f71476a7e3c7a4b2b898550c1e72ec13afd4eff22421a03af1d31000000000000000000000000000000000410bd4ea74dcfa33f2976aa1b571c67cbb596ab10f76a8aaf4548f1097e55b3373bff02683f806cb84e1e0e877819e200000000000000000000000000000000095353ad699b89ac82ca7ef631775b2b3a6e3ed8dd320440cdb929baa428e63cb902a83857cc0e2621470544c69e84aa000000000000000000000000000000000892559ade1060b0eef2cbc1c74de62a7ff076a3621e5f0f159672a549f1201f2ffb3ac12c8b12cb86ae3e386c33e219000000000000000000000000000000000750df4632a7126ddb08658a4001f949b9764d9cc43a9393cc55d8fdbb15d4a1186dd87a6433d111888a7804540ad9fc0000000000000000000000000000000017554bd444665df044b91b0b2614017bbfcd7acc7f8c5a16cea2861235578ce2b27dcced9fba234999fa478cd3f6e42d", "Expected": "0000000000000000000000000000000004dd5dfe38fa70625216ecfec60ea8d38602552726f0fdfb8f392362ce845fe0fda76894d0e456796e08462bb941579f00000000000000000000000000000000195a85cd0685f4053ee539de7e04fccd2380819b291f89cbcd63d5a0015b3214500284a7c6568a71f52bbdbc38be410a00000000000000000000000000000000107c211bad49c7dd8555e30f2500c67e7175eb98a8494f3d5309c65a93cce89572b7b5489428eaf3f0a5c1be323c5352000000000000000000000000000000000c11f978150ac35722679cf79443b3706d288c968116ddedc1f1d0fca8cd746e3c92dc006330be14886c53c41feebbf9", "Name": "matter_g2_add_5", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000147f09986691f2e57073378e8bfd58804241eed7934f6adfe6d0a6bac4da0b738495778a303e52113e1c80e698476d50000000000000000000000000000000000762348b84c92a8ca6de319cf1f8f11db296a71b90fe13e1e4bcd25903829c00a5d2ad4b1c8d98c37eaad7e042ab023d0000000000000000000000000000000011d1d94530d4a2daf0e902a5c3382cd135938557f94b04bccea5e16ea089c5e020e13524c854a316662bd68784fe31f300000000000000000000000000000000070828522bec75b6a492fd9bca7b54dac6fbbf4f0bc3179d312bb65c647439e3868e4d5b21af5a64c93aeee8a9b7e46e00000000000000000000000000000000175dadb6ee656ec6aebf8d0e5edaee3f119c74e0ea64e374be9e8ab9fd3d085fceeedf4ed8de676ebe9065d83b0542ad0000000000000000000000000000000005cd6a875329c23e4918976cf997e93e403957acfc999f8159a630d21ab6f1762925c063784237262bedc82402ad81bb0000000000000000000000000000000003274bcb8db35e50164d136c2a98b5a6d2fb5f9767d0ee11c1358bf7ca5ed96d9122f8c1051ba3c658cc89777d03dfa5000000000000000000000000000000000380a240443dff85b6542f75db28b87c39e278cdb8d9627efbbc63b229e6ce783f6fb0114c8e91c2fd6ea71c95bb99a4", "Expected": "000000000000000000000000000000000fb33caed4de22cf341bb3e04d41c0198b064c1d371a24f5cf59595ab4a1edfd379916a40cc405d35f0603b2f8fb987400000000000000000000000000000000131ad6172c20b3a1cc2542db037de1324086fd9cd140ae97987980f260023d91b24504181af6fcbcfa242f48e99559320000000000000000000000000000000004a0404c00789459395f5344544041785d10f2fe74d4bf484966f5e9b6b4c4c8cb113a811a4fa82a1cdf8e3242bb418900000000000000000000000000000000086ba6a914f3f07bdc6750fcf6baf76124a17964bf9eb9a12982e8a28ca04360da3544b69436d5663e4e94bf7189529b", "Name": "matter_g2_add_6", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000690a0869204c8dced5ba0ce13554b2703a3f18afb8fa8fa1c457d79c58fdc25471ae85bafad52e506fc1917fc3becff0000000000000000000000000000000010f7dbb16f8571ede1cec79e3f9ea03ae6468d7285984713f19607f5cab902b9a6b7cbcfd900be5c2e407cc093ea0e6700000000000000000000000000000000151caf87968433cb1f85fc1854c57049be22c26497a86bfbd66a2b3af121d894dba8004a17c6ff96a5843c2719fa32d10000000000000000000000000000000011f0270f2b039409f70392879bcc2c67c836c100cf9883d3dc48d7adbcd52037d270539e863a951acd47ecaa1ca4db12000000000000000000000000000000000834cf1b4149d100c41b1bca0495e455002eb6596bddcb94ae48d0c65957e8b313372f8e0d6e57504664b266f38293150000000000000000000000000000000000de2875fbd14760bac4c2cc7d3f239177efe9f7f61f767be420d44f24c9fb863efd60dcd732986db8c5b72470617ea60000000000000000000000000000000000bc9535ebf11c2dcc8c7d3bcd09d7d14035635fccb5fddb7df29ce8855e79f99809781d6ffbbcb33d1227314609abee00000000000000000000000000000000039bbfb4d969d702255e3be7f255a97529a19687ce38cb70637c37894d4102591feef428b0afe8c9ef50310ae3b83091", "Expected": "0000000000000000000000000000000019c8a1a206c0006a3033377abba4c31c55710a094d8c9dcef7560818e90411861ce7d189e2763f8fe69bf75e719e4efe000000000000000000000000000000000cccc6bba8691c210aa0a67d26584a359fab94041d853160abd9669893c0d398c805cc37fa3c33bc5ee5ff915b985c45000000000000000000000000000000000e353c1993c36763acec2a75495560e743d099b565f3de195e011afcacff3d60502801f47695da7dd589af81e772eb7800000000000000000000000000000000100c6123cf08eab6c59d78b414fa504ed10c204851289b0598b40ac31971fa12cfda4ef7cd2d64f9797d4d2b193e0bd2", "Name": "matter_g2_add_7", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017fae043c8fd4c520a90d4a6bd95f5b0484acc279b899e7b1d8f7f7831cc6ba37cd5965c4dc674768f5805842d433af30000000000000000000000000000000008ddd7b41b8fa4d29fb931830f29b46f4015ec202d51cb969d7c832aafc0995c875cd45eff4a083e2d5ecb5ad185b64f0000000000000000000000000000000015d384ab7e52420b83a69827257cb52b00f0199ed2240a142812b46cf67e92b99942ac59fb9f9efd7dd822f5a36c799f00000000000000000000000000000000074b3a16a9cc4be9da0ac8e2e7003d9c1ec89244d2c33441b31af76716cce439f805843a9a44701203231efdca551d5b000000000000000000000000000000000fc09c241899fa6e8cc3b31830e9c9f2777d2bc6758260c9f6af5fce56c9dc1a8daedb5bcb7d7669005ccf6bfacf71050000000000000000000000000000000018e95921a76bc37308e2f10afb36a812b622afe19c8db84465ab8b3293c7d371948ee0578dbb025eed7ed60686109aa0000000000000000000000000000000001558cdfbac6ea2c4c1f4b9a2e809b19e9f4ba47b78d2b18185ed8c97c2f9c2990beadc78b85c123b4c3c08d5c5b3bbef000000000000000000000000000000000ea4dfdd12b9a4b9a3172671a6eafed7508af296813ec5700b697d9239ae484bcf7ab630e5b6830d6d95675be5174bb2", "Expected": "0000000000000000000000000000000009fc3870f88288c680b43d63d3bb5305b99fe461e59c07be981b8819fbee0d1fdfae0c037e830fbbabc40cedac7919720000000000000000000000000000000018bdd4903da4d14fa28af4c2cddcb708238cf68673ce77a04a3926c4aaf17d39a831c5401e84dd042d6adf595a1763710000000000000000000000000000000002c398f0e8ad9752f4aded980bc5de2d91118db06818d815c11e818ead47e7065823737db8e304bae32969cab065d1ff00000000000000000000000000000000180642a633c3aa402e5c0b18fcb6fe8c115575b863abda59b5d91997ab01014faefc975d0aee994f98cf37ce79eb95aa", "Name": "matter_g2_add_8", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e25365988664e8b6ade2e5a40da49c11ff1e084cc0f8dca51f0d0578555d39e3617c8cadb2abc2633b28c5895ab0a9e00000000000000000000000000000000169f5fd768152169c403475dee475576fd2cc3788179453b0039ff3cb1b7a5a0fff8f82d03f56e65cad579218486c3b600000000000000000000000000000000087ccd7f92032febc1f75c7115111ede4acbb2e429cbccf3959524d0b79c449d431ff65485e1aecb442b53fec80ecb4000000000000000000000000000000000135d63f264360003b2eb28f126c6621a40088c6eb15acc4aea89d6068e9d5a47f842aa4b4300f5cda5cc5831edb815960000000000000000000000000000000000b36d8fb9bd156f618ab8049d41dfe0698218764c0abb10e12fae43c8810b8e2a5201364e2778f6f433b199bb8f9a6800000000000000000000000000000000000707eb15411b63722b4308c0ed4288320078d2463ae659ad4fb3f9ef8124f379df92d64e077403e50727388adb59ac00000000000000000000000000000000158e1249d5b91614924acb23899c6bae408697dec0982c10d0459746499f4e6739afb9d5129568106ed1a1caefeaa9640000000000000000000000000000000019e841562e4aa75321143f8ce1e5ec6158fa5cb8b98c839a486188260c18ee8a7600930f23aa39eac2eb520d6a0fba90", "Expected": "00000000000000000000000000000000199600699a6108599c638df8f965d73b5de4ca74598df281ec95c539de2c7eff9767569692d8e0ad120fcbb3d9335b95000000000000000000000000000000000c42b11e2585ba93521b3c968e9dee07e4f5168c11087d8d750795555a105df70c969bfa79b1ab4e5fc8d81657235d08000000000000000000000000000000001370daa4699daa99e9940fe04f69150e6f752798cbc0e66c91c3bd46149d935c1815f32d7f14b510e16d475044eda9cc0000000000000000000000000000000016c7a00be10de5732795cc3ee2951e58cb9d42f9b05d02fbff1b83fab5d3ad830cb8178092b76172108d7a53afe8c539", "Name": "matter_g2_add_9", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000159da74f15e4c614b418997f81a1b8a3d9eb8dd80d94b5bad664bff271bb0f2d8f3c4ceb947dc6300d5003a2f7d7a829000000000000000000000000000000000cdd4d1d4666f385dd54052cf5c1966328403251bebb29f0d553a9a96b5ade350c8493270e9b5282d8a06f9fa8d7b1d900000000000000000000000000000000189f8d3c94fdaa72cc67a7f93d35f91e22206ff9e97eed9601196c28d45b69c802ae92bcbf582754717b0355e08d37c000000000000000000000000000000000054b0a282610f108fc7f6736b8c22c8778d082bf4b0d0abca5a228198eba6a868910dd5c5c440036968e97795505419600000000000000000000000000000000186a9661d6fb539e8687ac214301b2d7623caedd76f4055089befba6ef2c96263d810921ad7783d229f82783c9def424000000000000000000000000000000000447f3e20caa1f99fbaccab7bde2bd37fe77cea691ebf2b9499f95bbbb77afe72b7039eb0c05970b61360fcf8ade73730000000000000000000000000000000005e11f828eda86c10a1d7929def547ac06885da278afae59c5d95453caf0a2d8ed186fa7c6d0a7ab6e9142cfa4b338190000000000000000000000000000000003d954e61b6ab71042b19e804efccd4956b56662f27f70a9255cec0c464b86c0e83721ad3785dec62dd4a9dd3d6d5d53", "Expected": "000000000000000000000000000000000669cc8a3acae17f99f805afb9012a38851a9e8d4fd9895a9946c29fc859849c24d7ab7b6278c449cfbc5f1d7ea1fdbd0000000000000000000000000000000007a9095be808d0ebc99bce94e851d2a7cd3e1977b923064ab5bbed2347cf18f3343e60120fa051d12fe27da3146cb423000000000000000000000000000000000f1e7f75887651f67457f6dc064d7c11934035d15fe4dc40bab970160ed1b1aa230a3fb84dc1da08770d847c0216347a000000000000000000000000000000000efbc62ade1678cd70eb38c644038bf19e52b0859f65747068d9f3124762d951e4a6ff05f34b6d14919774f8409adff5", "Name": "matter_g2_add_10", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f29b0d2b6e3466668e1328048e8dbc782c1111ab8cbe718c85d58ded992d97ca8ba20b9d048feb6ed0aa1b4139d02d3000000000000000000000000000000000d1f0dae940b99fbfc6e4a58480cac8c4e6b2fe33ce6f39c7ac1671046ce94d9e16cba2bb62c6749ef73d45bea21501a000000000000000000000000000000001902ccece1c0c763fd06934a76d1f2f056563ae6d8592bafd589cfebd6f057726fd908614ccd6518a21c66ecc2f78b660000000000000000000000000000000017f6b113f8872c3187d20b0c765d73b850b54244a719cf461fb318796c0b8f310b5490959f9d9187f99c8ed3e25e42a90000000000000000000000000000000002b94534aa0ba923bda34cbe92b3cd7a3e263741b120240ff5bdb8b718f094d3867e3fcabeab4a7be39c8f8c4fdd10d900000000000000000000000000000000048711cf6a82534d64d072355cb8fe647808e7e8b2d9ac9ed52eb7fe121647a721dd1234c71ecd163d91701eb7331cac00000000000000000000000000000000141ef2e23a1ecc7ef2ed3ea915492e79cfffe60b5e0de8441e878bd0653843d79c724e3c5ebe2321361df99f8932ddc200000000000000000000000000000000085513b4009f29b3e00a91c2c4be418368560802ba4194cbd2f4fa3d72a55fcae547014434514a8b2a8fe3e0b28d2773", "Expected": "000000000000000000000000000000000e25a38d0ce2aabd2538c95ed463f226e3f29ce7f10e1be27af2d3db741926d557178c4b125af8789b40480d8beec0890000000000000000000000000000000002a94b7c57fe2783d055a537004a3b67e41f5374da0813094f5944fbabf4d27eb576dc8b21ccc15f8339df14ff8785220000000000000000000000000000000008b9efd8abfa4fd71a8eafdba9df38360ef0b0a117c0052528d1c24df5032635eebc7b201439f5de858514666c68cd270000000000000000000000000000000012a2fde51f6f4a98435c325dc3b1ae846bc33a5ffb3b13fbe3fde2f74dec0aa815fa8e42392b3dbf798cf547fdb4db0d", "Name": "matter_g2_add_11", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000576b8cf1e69efdc277465c344cadf7f8cceffacbeca83821f3ff81717308b97f4ac046f1926e7c2eb42677d7afc257c000000000000000000000000000000000cc1524531e96f3c00e4250dd351aedb5a4c3184aff52ec8c13d470068f5967f3674fe173ee239933e67501a9decc6680000000000000000000000000000000001610cfcaea414c241b44cf6f3cc319dcb51d6b8de29c8a6869ff7c1ebb7b747d881e922b42e8fab96bde7cf23e8e4cd0000000000000000000000000000000017d4444dc8b6893b681cf10dac8169054f9d2f61d3dd5fd785ae7afa49d18ebbde9ce8dde5641adc6b381731734598360000000000000000000000000000000009143507a24313ee33401955fc46562c9b20c9917df3b40ccbd7ed43b1349d4551cfd98a4976d6fec5fc289460c8d89900000000000000000000000000000000060566b79df5cc975e669da8ca3a7fa91bf3f5c9fb871c3d62f4a3e79dbc341b89d38b588e5414bc385d5e3cbf3ab9310000000000000000000000000000000016bf40b8cc4c01a87aafae0c4439b623a51ba9a383756a550b69d627d6f45209f0d87e4f9be9edff35c986f7b9c49e3f000000000000000000000000000000001842d9172bce51a164fbdbdb108d0faae07e4642f21c80e40ac31e737657472ae3dfe552b65349629c210a068c4afc0e", "Expected": "00000000000000000000000000000000067265782d58b04a2ef3dd419cee506e076e49d1119e28db1df7f0e22cba9bbdabc560084cda50bc8db3915fa9c489a30000000000000000000000000000000012448a61fb2f6fd8e355111b671f0e888304284b72d5688091f2ed00edf7ccb7e5bd8a733a910d6964dde07d393798470000000000000000000000000000000005f687356ff6c634eb46613be8e98540107e706714434faff54510234d4aff42ef7752e154aed63fa8ff905ec0af628f00000000000000000000000000000000180dca84a37c964b30f5cd11a090e54acea102f1b884319f8d1252a37bda005512ffc39dec8e33af0dde0d37993f846f", "Name": "matter_g2_add_12", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ca8f961f86ee6c46fc88fbbf721ba760186f13cd4cce743f19dc60a89fd985cb3feee34dcc4656735a326f515a729e400000000000000000000000000000000174baf466b809b1155d524050f7ee58c7c5cf728c674e0ce549f5551047a4479ca15bdf69b403b03fa74eb1b26bbff6c0000000000000000000000000000000000e8c8b587c171b1b292779abfef57202ed29e7fe94ade9634ec5a2b3b4692a4f3c15468e3f6418b144674be70780d5b000000000000000000000000000000001865e99cf97d88bdf56dae32314eb32295c39a1e755cd7d1478bea8520b9ff21c39b683b92ae15568420c390c42b123b000000000000000000000000000000000ab19bbddd661e9db8fe4cb307ecebdc5e03efbb95c5b44716c7075bd60efcfc67de0bfd7c46ad989a613946c90a4c1000000000000000000000000000000000120800e7f344cda816299fa37f603ade06beb3b10907f5af896d6b4e42f7f865b756f14164db84411c56cb2ea81f60be000000000000000000000000000000000f688ddd257e66362af1437b6922d3397a7c3dd6dea6bca8ebd6375e75bf2de40bc287cbf3434388191e56b92949c83b0000000000000000000000000000000005252465784aff8c1c707da58b5808c69583bf852d68f96912bc53f8dae4536b09ccbbd25a49d9e744118992b92b6792", "Expected": "0000000000000000000000000000000012a29d35c9af52f172787c90c5a3e77ed29d66feabf5d7bdd6bfc14dd9a05d402976b84d44647628c908d1816f4e7100000000000000000000000000000000000caf3c372e36de557ecd7eba02e6a79b1b4cff30343119df7a23662c8512095e051ae2dc27e577635c74a260be2b084c0000000000000000000000000000000002ceca293a58bc9beb4ee9a0679eab037f5cf7b326d65c0efeefdbf384ad8e4bc08a3a75a02e6b9cba8963e65d6e76ef0000000000000000000000000000000004631773a6590bc89b49a75bbbe2e732f9466ba259ef7a04ae69b6aa5d5a2621c1918eb213101f6f7eeee4656a7b1472", "Name": "matter_g2_add_13", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017eccd446f10018219a1bd111b8786cf9febd49f9e7e754e82dd155ead59b819f0f20e42f4635d5044ec5d550d847623000000000000000000000000000000000403969d2b8f914ff2ea3bf902782642e2c6157bd2a343acf60ff9125b48b558d990a74c6d4d6398e7a3cc2a16037346000000000000000000000000000000000bd45f61f142bd78619fb520715320eb5e6ebafa8b078ce796ba62fe1a549d5fb9df57e92d8d2795988eb6ae18cf9d9300000000000000000000000000000000097db1314e064b8e670ec286958f17065bce644cf240ab1b1b220504560d36a0b43fc18453ff3a2bb315e219965f5bd3000000000000000000000000000000000e3165efe00f69aee84ac56d2161f07c017abfaadeaad34f8c96799d68bae0e6f9b557bbf9137e7826f49f29c58d1ef9000000000000000000000000000000000de0dce7ea371ad60f21f2cb61cb582b5072408a7efc91edf05b36a1a3b58fd9e6cf808d75157eedccc8f1c93a8ae07d0000000000000000000000000000000016d911943d80427385ebac1d1b293914a9e4dd9db06c1d6a758192d63c8fc9368e02eae7fb0e3a7859408f215cfa76ca0000000000000000000000000000000007bfdc6afb8acec625e50ecbc08a5cdb7862b795866323679885ba5cba3fd51f181078e03fe35e96e6383c077eed1bf5", "Expected": "0000000000000000000000000000000017f155ed9911ec56d71d63d57556de071ebe89be36e6bc9943ec068a70dd5a6f045dfb9fde5c1e29d52c9fc17579452e000000000000000000000000000000000a60d62ea549edf4b11f62f2321f39d41bf11f3c4f858dc7db85b1dab1b7644e27eeb1d022d6082f59c65155068d2c390000000000000000000000000000000009d309145fad15860e556ec4b4aecb415865954247c2034d5bc96026e4d6f7612af6e2db99f4e462acee2b303134b91b000000000000000000000000000000000114ed157e3d020c5397cba7e10cb864aabb47461f166a6724614e689274ae74c505fb6ebfe3e88da0d6c272a15a0527", "Name": "matter_g2_add_14", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000018244ab39a716e252cbfb986c7958b371e29ea9190010d1f5e1cfdb6ce4822d4055c37cd411fc9a0c46d728f2c13ecf0000000000000000000000000000000001985d3c667c8d68c9adb92bdc7a8af959c17146544997d97116120a0f55366bd7ad7ffa28d93ee51222ff9222779675000000000000000000000000000000000c70fd4e3c8f2a451f83fb6c046431b38251b7bae44cf8d36df69a03e2d3ce6137498523fcf0bcf29b5d69e8f265e24d00000000000000000000000000000000047b9163a218f7654a72e0d7c651a2cf7fd95e9784a59e0bf119d081de6c0465d374a55fbc1eff9828c9fd29abf4c4bd000000000000000000000000000000000a68dccbe3452731f075580fe6102b8ee5265007ee19c56d95bcb096a3a6ac444f4145b980f41afcb0a865853b279bc600000000000000000000000000000000164767ea55a9038ac2dd254d8c8a4970dba93dacdf5416aecaa407914719cab165e7a32784b2c41652a86358737d831f000000000000000000000000000000000da9441fbc6578c85fdeca49082c9ebbf183de894d67c65158380ee56132d3cdb44b100d72b6d3b82688defb75d2aa390000000000000000000000000000000017d570e4f6e46550679d5d12c347414da207060f594620e2f8db66df8e0b06c912290b207a268e782d4b45db19a199db", "Expected": "00000000000000000000000000000000118e0c81f9157395578f0fb83b179721de2af3326d13189cb8f43911d8c3268a11fd9702f09f14c115bbdc43d5fbc08b0000000000000000000000000000000016a548df8c87f432c31e4e32c3e5b4d48d6f29fbe391d1181174be9dddee450e7e96bffe8c9f23692ccc080116592944000000000000000000000000000000000eef72a5c698c58f1d2ae9415da256b54d7b1ac37a1d1b88727c0afcfd854a41973c6cb10ecbc3a90050fe3d8d3ce8780000000000000000000000000000000019b16ca8f955dfd21830a3f7fafcc97d7de977bafe1983892988aaedd430d22674d97897d24c1643e99bfa6256df4bf7", "Name": "matter_g2_add_15", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000eb3c91515d4a41209a73564741a8ccf901a624df9db22e195a5d02d24b7bc0a12756b15b8d006cb991a7e088eaef1000000000000000000000000000000000704ce8afc808b0161f6f61b22d990d713ae398779e6e74e9b5771daf006ce0bba3a8088edf75156f0e48b92ee8409b00000000000000000000000000000000018fe81e05aff0620f4bdbe4a715e015650497afab62921eba0ab86b649e5a2fd3d54041868928519f537e36448688a0d00000000000000000000000000000000162bd97161201ea3c26f8dd1204a9c6b61b762bdf573cb5d20b6b255f30208ca7d96aa47b46fb8c6bf0922075f1c1ca800000000000000000000000000000000197737f831d4dc7e708475f4ca7ca15284db2f3751fcaac0c17f517f1ddab35e1a37907d7b99b39d6c8d9001cd50e79e000000000000000000000000000000000af1a3f6396f0c983e7c2d42d489a3ae5a3ff0a553d93154f73ac770cd0af7467aa0cef79f10bbd34621b3ec9583a834000000000000000000000000000000001918cb6e448ed69fb906145de3f11455ee0359d030e90d673ce050a360d796de33ccd6a941c49a1414aca1c26f9e699e0000000000000000000000000000000019a915154a13249d784093facc44520e7f3a18410ab2a3093e0b12657788e9419eec25729944f7945e732104939e7a9e", "Expected": "000000000000000000000000000000000f2bf3f69276d390c9fc2c15e9f5f5d0b3cf9a6eb028c44811b481f376ab60e17d33a04b78348e46eaa94332c5f16ff8000000000000000000000000000000000bedd0437fb3f4baef87e56f33c77fcdff6a5512571cf11fd9605697abd8763315f1fe4bccf04acc6e971d6aeefd9c1500000000000000000000000000000000067c3ff69733baae2fb4ab77cddb7563047c428b40a257a375f8cf8c9d230a6619f7932b86e0836fff0c1c60d2c4dfd900000000000000000000000000000000057526faed8d62aa10e89add5a338320c748ca1f96ba5ceb579efec69d17475571fc4ce6fce3a93398ea88340f0e969d", "Name": "matter_g2_add_16", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000135aee0e30fbcad798738c10d4aebcdf50c89ce516325f655fe763dce54ffedf94dd74168611e5ae879b5bf5598d62dc000000000000000000000000000000000c728e672cd8b3bf9341bca929c34118b566cd3a80452d7015bee9d5cdc001b1f5c678d4b2cc4f7cac353e7bf326ca1e0000000000000000000000000000000014809aa22e2051e463fba6d49fbb060d0c7f599a0fc5409d34e71f34817e7beb1251810ae6eee1848c60796fb8647dea00000000000000000000000000000000145a4de777d86025d50e12f9a6615ecb9bdd41489992d1b643dd9aa549acbc63b04b0bdfd14b6e45c70f165e9a8c91be0000000000000000000000000000000001c2d8d353d5983f22a5313ddd58fdc0d9c994b2915dbc87a9b65b7b98ff00b62e140a27dc322d42b3ad190c1b3728dd0000000000000000000000000000000010412f3625947b38bb380a6ed059f1677b7a7afcb91517837c563dadd0e285b95740a200ddff6570d4d92bb636b625bb0000000000000000000000000000000015f4f9a480a57bd1b2388532ab045a1ba93d2f6589a3022c585fe06a1d611165c99d70be06251812405c9c37d6e9f7730000000000000000000000000000000001a78e6c5062a6634a56e9853ff5afacb2e7cf31fd0ea5f0d8c8ac6174c88133cf2f63450ec4590544c9a0e37daac1f9", "Expected": "0000000000000000000000000000000004fc19f8fe47e6acd37567016704b07f906e8741fcb196f697e1fc24b0204292693ff424bf1c5e407f5bcba5a3b1ab85000000000000000000000000000000001816f992c3c461fa6d2014ced382a35b0d70e61927d72b4d661434efff3dafe2f4b6cc91bb1a5dbf809f10f3ed7f36de000000000000000000000000000000000dadf7f7223ccedbeffef31c97df7e01f99299da71b589c8828b65715012aa343d7e041dacc57b34a6b5f84523a7938100000000000000000000000000000000167f7e73e22df81bd2a7a6f14e940a401bf414e5d18b3aa610b2a82ca8f46aecb5721d0092b27f8968b2302c37957268", "Name": "matter_g2_add_17", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000009a58b7116dbd6f550f8ca98071813130ecaa9ea86d5275eebc36860690fa048c9ebeb46600b2b63e847bff3e38ed0d00000000000000000000000000000000113ffc0932c041e0e34b2540c485eb74f5029b339cb60bc88a8a749310f33f330dea137e5f340044fd689264af66696d0000000000000000000000000000000002642da3c2c7b6688aba0b19ab29ac72e35caafa044863c364ea8833fca850289de52c0963bc33d7bba40cb5f568718a000000000000000000000000000000000552d35ca054da2f148c119454f6760607b351f2441921a2be17da2cc10902d71571c5554f132e60df79679428fa07e3000000000000000000000000000000000818e567aea83eaf3142984bb736b443743659626c407987b604a30c79756081fa6ae6beeb2e6c652dbfe9cf62d44e3900000000000000000000000000000000193f0317305fde1046acda2c9491e376aa67244f68ef6495845d049e1293082af91f880be935d9d8ad0e25ad918caae200000000000000000000000000000000109224b8178be58ea4e4a194ca66bef9d14f6fc2c625d25feaa4f32e0f4d72d91024d96839bc96e6a624c5ad6221bd94000000000000000000000000000000000e42decf8a987efaeb4ede37236b637e61249bf6245679be7fd4d633e2d814ed4748b73890ad3c4fcbcfb4960cb67ae7", "Expected": "00000000000000000000000000000000041a5783c748247f05457d30d16f93431e9046a236d5025cc07a27b9f2abaaa556e2df65cf0f0015107253fe94d8b4dd000000000000000000000000000000000193638bf69c7508c4b12808a62e89883c34f97ded6e1b5dcc3f28191e5c7fd901a72a85ae386acccc9865f8144b1bd500000000000000000000000000000000180e8184ab583da58b77b8a4d108a366dff3e3b336ebc5c9153fa815188edc95e7067ef25f7d79526c295d634bc98f5100000000000000000000000000000000125b147100f6df0cede8e22151b3423b1dd364899fdee103c71a44388ff002a367627a2342e15833644bcde61f2ef6b6", "Name": "matter_g2_add_18", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018fbbcba3d4b1e548ceaec4a48db62a2420ff29a67af332ee7ea3f902f84e6c375fd33abc33d945c5bca25603979f9a400000000000000000000000000000000072ff416994364bdc6535f36c82212afa822cd94fade69f11eb38dbdcd37c7e22af55fe05e6a826dad822073656eaac10000000000000000000000000000000017bba179b847278a4878b6faeaab3b1f4bd7540d22817cd9aff95557497f8b9d286657b6162c0f89f7820becc637dd550000000000000000000000000000000018e2bfed71aa9b11fefca2f0db8bd9b8c69540267de50bec4fc90a6e9741891465c9761d19282e1100b3707eeb598b31000000000000000000000000000000000ca0d865f8c8ce0a476f7a6edb3ce4bd5e6c3a8d905d8fb5a10e66542f4325a9963c2f8d96f804f4d295f8993b5204df0000000000000000000000000000000005a966f6254f0ef4f93f082a97abe07db56f00c2ade047d2f0027edef6f00a0dfecaa24d50faa778fa29087302211f7e00000000000000000000000000000000121c51da366557c09af1bbd927521da88dfab3e2e9a95b6effb0a968795486f281f0c887e37f51837557b9e3808987130000000000000000000000000000000001a5524975400b1e88f3fff8dd34dadf5d75564cfc0026df31ee9c2c1d48b0f69a48e1e4a48cc4b7db61f023a7915780", "Expected": "00000000000000000000000000000000095fda8adf3981f4468fb82aa0ccf80e55138c922c6422cd8e67f53ee63e7a390bc345469e9211a1f8d810cf4ba27d0a0000000000000000000000000000000015c19b6af21f75e8e53fcefbae1c8d7f97853a8aae5fa62e606cfc92ae71890702ef9dc5609d3ca8fefd415fbd820c04000000000000000000000000000000000007b7e908766d34c5d99cb7cc76d5d5ea83c29ae1d9b83b163741bc9962e293926b1e251b546ce0c1268def728da78100000000000000000000000000000000084fbd6253211f7d66d52b7f14360729d54b2f94c52f2b76e521dc3961c40b4f19944923f64c6425a44eb158a9727a4f", "Name": "matter_g2_add_19", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019efd37727dfaedf697fcda7a59847dbda8ca7cdc92f34e68691d682e20ae6545ac104d6660fdb8f64a051e69298eae8000000000000000000000000000000001225ace0fdce456dd888c9672503b68ef77b2d11caf1265a767a6ea14911e3ca03fc153f18dfe9d95e0cc68b7b8a3a8d0000000000000000000000000000000008a6b059c1c4da046cc0b1b5d7f33270aceffa607daf6d0d078c06f940604e1a0b4adf01a4091306e3c7eddcf3d95101000000000000000000000000000000000f79bae5260a2f114ffbb9273f3049d3ebb002500a57ee0a7d157d86957f43f87a2e026fb9892dacaadca5ee04fc8e170000000000000000000000000000000002b51851ef3b44481d13f42e5111fa4fec04be0bf6acc7e59dec3a8c8113e5bb7b604c6dbdc5e8eddc2a1ffb81bc2baf0000000000000000000000000000000018ddb483ae75402852b7f285277ff7308ff78a3364cca8b0e0e1fa9182de275fd55c1e8ec3dbde180379c4280787ba8000000000000000000000000000000000170539890c89a4f91acd59efd413b5d1059f0c8fd8718e8f722e865dd106a4eb02e6fb0cd71b34ebc4b94375b52e4dd60000000000000000000000000000000001c2e9392f5d4b75efc5ff10fe97f37e2671cad7e4710765866e92aec99b0130e6ff1314502d069fb7b5f86bfce4300e", "Expected": "00000000000000000000000000000000121e7f2eb906d0b31b8ce5cc46638428b6ee57a1ee70e4ec3c2bc044230b9b86875abe0862145b442c0e34308efc690f00000000000000000000000000000000139120d0a10b82737561d0b3fda01b6df69d9beb7dbabf3ddda036f9b4c317f3ac1eaf400013fe5ad664bea44a73b336000000000000000000000000000000000a923184b381027d8cb3f82708802b204566b2b8bb6a72767aa396324d8a26b4e0f0cb92fd1914d77a4e9af2f1ec31e3000000000000000000000000000000000409732f2225cb5e5c002bef17512519eb1a18bf6c3d7f834d0c7ac8a38433c88b550b3f443d259313eb1133620ebf0c", "Name": "matter_g2_add_20", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000016d2b73eeceee17d3bff3aacac9df9ac1c4248d9ea7d6a503a757f7bb22fa6970bb6f5cb5ec154785f7252e1508b382e00000000000000000000000000000000081edc68bbd8db7b10be06ee23d090bd54f9ca07ef24dfed7df7bb05f8cc26e6889dbd40ea203fd5cca5cb588199f9e40000000000000000000000000000000010d3478508619ea9493b4330e2fb9150024cd32dc1378f824788a884a4a30fbf39c630f465557bf0c6d69b4cbecf89f9000000000000000000000000000000000f20c9b134db5d8b7756800c031bf5962fc560ba95d4bd9157b16179f1a37ae08696a2be455ad8d018aead6adcc69b710000000000000000000000000000000011bbc566a10eadf16009c1d2655cfae6adfb0f56f5e55b31dc000414be1b4cee9a0b9f7d9eab4c6829037c327914d5640000000000000000000000000000000009b28329096d8644dfcba6e92477eafff29f7477da4581ce76d1493f03034d7f5d3acaadbe42c76a83ca51db79d456d10000000000000000000000000000000019f75a303fdede5d97f3e521b03ef6b9d7c008d770b59ce3ac38900b340895e008342701ad1b41830b9c010936f4ff1700000000000000000000000000000000161aa1853edbb56fa3bd685c9c6b88e466dfa3c4f194f6774b4d9b1f30b016993bd0d65e8e9d6dea6caa196ff735bd67", "Expected": "0000000000000000000000000000000006a200642d5cece5eaacacb36000b4b897e8d8c661c8282f90495002aa515c7638183cf1e80a0b35e953adb92b6bb845000000000000000000000000000000000e88d4cda34e98df4d727fda79b67961b5b8efb1b125ef2a8eafc481a2cb2fa1530e59a091f31c25cc49d38f545491ff00000000000000000000000000000000082f38c1a1c35981f537547dc3b59331ab8c5e8dd261df58fe6f0c44ef1e65d0cdc1980e1a62f6248f38d0afe91e5627000000000000000000000000000000000eda1002e202e9ee4df5354cb87760d4df32eba1eafdad27cb0636879370a8f93be0bf2a30f15f2fbcd7e52c1bdf6b05", "Name": "matter_g2_add_21", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003dce67181d23af9729e9fb0653d7f79c890fba27de42fada93123e112c4a468fa889921192db8047d86e4db77c60266000000000000000000000000000000000869a1e39d42d9bb0cc0568fdad16abbdac3194af893ebd8dd8f8c2c3c855abefa5fc215412168acadc88e658e83f5570000000000000000000000000000000001ef139a75194f3c4b1378c2b66dd304d179460bac0a289405cd8faa3ff66a7b6e54eb7b8742a68150b1e098630135c40000000000000000000000000000000003892b5a645af916be2c6c7fc0bb08fb5f39341d3c68598940554e1be11e1be75af920db0c8710ed13c78edbf683f17d000000000000000000000000000000000ae7289aa9bf20c4a9c807f2b3ac32f0db24e9a0a360c92e5ce4f8253f0e3e7853f771597c8141d705062bef12d4fea80000000000000000000000000000000001d2f610d79110f93145faad2e34f3408316b1dc3a72852e811b324577d9037035e24af25002ddd100cd9283b70ddcad0000000000000000000000000000000012947315d5c0ec670619125eed0de3dd259a008baee4379b82accf2391e70a2bdad264cda04c3bc1b5394a62559fa0ef000000000000000000000000000000001239e687c4d3417c3c9b655035f8d8a649c255f9a8e6f03b785eed0d416a1cd6ef7c8b45563acb4616af24f64dbccac4", "Expected": "000000000000000000000000000000001341cf3316152ae8d57ea2194224f04756690133d2e02d077dc271aa577278e346e0ff66e8a49ff8c983fd34546e1f6f0000000000000000000000000000000016c9093da650643f4b4061e1c6e55da6ebaf9f234bef8325aeecad3863a0a2f53e1cdb2d54aa8b075ce6e6632fb4cd660000000000000000000000000000000011eaf3dee010bf2a16c5fbb1f7aa559cd4d831f087d9dfad4e157a6d2b6495e370d9791cbaaae19339a65726ebfc3b910000000000000000000000000000000008476d793305204be414819fce2ca70754a532682876277bc0586514f2096ba9998ae848c722ead6722d5af9395ff77f", "Name": "matter_g2_add_22", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000264dd4b477f5db65edad28c7153ed919a863c5c5661e0125c5429b323e055fd69c33142dfc6ed9c87082e2be4675e1f00000000000000000000000000000000046ea088a2ec94d3a1f1f97949f1ebc49690c453d316cc46534fa253b34b30323b6071d147d64bb94e02fb4db07bb0c400000000000000000000000000000000013692a33bb1348486eec40a9e93a4ea3810c7b4d3188cd07e235a2c898aa87ee0d17682fd24f4d978f9fb028fd26e2900000000000000000000000000000000115f8b64c00cd5cd344a7b5edc0ef0bb85a3e8f0f9dfb28f8ffe12db3e0d222c2d45dcdba0fbdc161c5d558bc71aa097000000000000000000000000000000001179ee329771b5913d07818e70f6ce5a58d74ea0b573eaa1bd3d97e45d3eeb27fcc7d37dba127af7a38354cb6ff48f7c000000000000000000000000000000000c898abe6eb76ef99f5143cfb8d840a918bcc9096ce25caa45d0bf5d20814cb01b024f1fd2cbecb6bef65d9456070dd90000000000000000000000000000000008e2a4fd746e86f90484f9b9b7b47b6afe5833762e515ccb276c554f00df88dd9aa0fb792c5f419dda0465cfed838e7c0000000000000000000000000000000012b5e6f7070c0045ade96f548ed6428c5030fa20c6f6f37a42fde9dbb5cd01def0fd8585bf8aeef913e7d42b9ef22efa", "Expected": "0000000000000000000000000000000009792d98ab9b90c2467ad0d070ea44f382ec7ad5290a59d889313c5a55d7b8e837333ad7ecfd97221d405cd6c549dc8e0000000000000000000000000000000002b92dd07b61faec23f48b8a7893dae29509fefd688a978bc2e870d4cd6f963d708a0611b4aa65f5644fbc6ba4c5e66b0000000000000000000000000000000011e46a283946a8e033afbf7c14ce3162a05867809d7de94a090c8cc2cdca8bb79add21f6e2fa8d7f39ea6d26cd37ea850000000000000000000000000000000000fddb7cdf1f1126e7a6780e4892601121b289a386ebce0caf96cd392ddc57c47e3f9284889fd8a18fb330d6c40bdf67", "Name": "matter_g2_add_23", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000014c83d58d90db4821a0411fab45f83fbc05f7d0d7a67ce75da3ae568978d15f4c1886c6fa6086675c0045efb30d818400000000000000000000000000000000001e68691123451f4c3df6dae62c6a63855ec3597aae33a8a10ee274e902e9aab1460cc9c79726312df0ee0ce90c8d3c00000000000000000000000000000000018a39eb3e3c6c7fb8ee304e55d15e209afe2fe278dda93552a7b9f51fbd778da1502eb6775cbc3f832f8320fa0686240000000000000000000000000000000017c15910fad1ca5749aa82a5a2fa98b0ebb37e92912547fb1741f18c34e0d5fc3a307b928636c25f0320d71cb9d31062000000000000000000000000000000000fe2e61bc8e9085d2b472a6791d4851762d6401fd3e7d3f3ba61620dc70b773f2102df1c9d6f1462144662fb2f15359700000000000000000000000000000000031f160cde626ca11f67613884a977fb5d3248d78ddbf23e50e52c3ba4090268c1f6cd8156fa41d848a482a0ca39eb04000000000000000000000000000000000eb61ba51124be7f3ee9be1488aa83cbd2333aa7e09ae67fef63c890534cb37ca7de3d16046b984e72db21e1f5c57a8a0000000000000000000000000000000006bf6f5d65aa7d19613141018ac8bf5d1e6fe494a9f30da215a2313a0241779006bce33a776aeedae5de5ea6ee5a9b9e", "Expected": "00000000000000000000000000000000054dedc002c5f2da8c6e0a0146bfe5c83200b276b074e6d6f2c397e1208f152d3ea3e8f0da7da62cfd2a028d4c94fe5b0000000000000000000000000000000012ff307f86e266e7a212484a169d3e81df98217c6f715176913b0d383cbe4e790212da7feca0cea66df09d92544fae010000000000000000000000000000000009c211438dcf8ccb664b535e73eff304b92aa2f568aeaeb8e10ec142f92b211bb8147b250dad77d508cfe353667b6f150000000000000000000000000000000009d1734f4ecc88fd56f412f9243c387b9da659faa3fe7295580a6b7519b1980bd074339fa9b0bef44dcdd0cf0c4a629b", "Name": "matter_g2_add_24", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000fa96d9fe01c18732e8d6454df9bb1f482c4b9add837ce9c354c72d49c2d44ec694674aaf0e6d6a095cab7ebb57ccd9a0000000000000000000000000000000001f8ffe3fb7e9e311e0f6949c07c26a0febb181e37b2268bb5e125fc3a100323740d1ebaa5e635dba3770fdc2ce4ee860000000000000000000000000000000012ac42095fdb677720ab3f14bf0afc55c95b43d28d922a5f8cb0bd841306b978751d24546e3a6474976961d0768f29e9000000000000000000000000000000000baf9804d99039c9fe966a696c64bdacc9673b0906b4deab108d34fbbaa3b0905d50892278570564017b96828c7e1ac900000000000000000000000000000000196044a5cdbc5300ee837dca745a44379070e9297697f5db28df4a37307cc740abed45cc778a3f4e3b8c9890ab6c3c70000000000000000000000000000000001176f5de6a3577ad67863bd3d9152ab9e8184964c6ac276e95946788f5a76394047580077c0971d874a40d510eb0443e00000000000000000000000000000000147dd55dff69213c5760e8d22b700dd7a9c7c33c434a3be95bd5281b97b464fb934a3dff7c23f3e59c5d8d26faa426bf0000000000000000000000000000000019efcf03ddb0934b0f0dba3569809d5b48b863d50d3be4973b504244414e1e1db56adff51d33265ce102b320c552781f", "Expected": "000000000000000000000000000000000896a38ce734c550c178786092292e737d44fa5f503d6d3b66c75e6bb70b59d1db9e8baa1ea3e256e2dfd8a942311e75000000000000000000000000000000001231db96a35229a4c7507b0ec193491446a0b43115c27d18b3715fcd4aea14d4e5c99db5934e73bb0b86f1bb91ee96fa0000000000000000000000000000000000d6f95d5637b29ea889c028dacdcb484d8ccdb243da4d5ff49e5ad82f234d414dc1484e9ed6cba1b5940eaabd3066860000000000000000000000000000000007de052fbb76902e06e1783fa8afcbb54a5069b4c5e9cee78d43da2cf76f24843a740a9eec6fe9b8f9bc4ac9baea77a5", "Name": "matter_g2_add_25", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014ce6d88a7c5c782562aa101550f1af487296adebd9dae8252698ba04fbd58b92e2216de6ffd474d5992f97d9f22800d000000000000000000000000000000000ce92a04f5c8a99ca0e93992448222519fc454bda5d1d8638a7bfde968386e4ba0dcd1da59cd81d4c4dca3e584be0275000000000000000000000000000000000cb570796f5c8f7b8aa02e76cb8e870d3365fe4dce5df07ec286a0a821f922b4003d5b69c0f1588206d9544013e268c400000000000000000000000000000000098056a033d9cdae86aac02de3a444471854b909680719154b44d4f55f30087294e39e57643c692d6da725b8592390800000000000000000000000000000000005d8edbabf37a47a539d84393bb2747d0a35a52b80a7c99616c910479306e204e5db1f0fa3fe69f35af3164c7e5726b50000000000000000000000000000000005015082d6975649fbc172035da04f8aeb6d0dd88fdfac3fbd68ec925dc199413ed670488dc6588f9bd34c4ff527f149000000000000000000000000000000001312d53088ca58dfc325772b8dc0e1b20cebf7b2d5b6b4c560759987b44060bf4a59a68d1a5623bbb3cc5b0bc3986b810000000000000000000000000000000012110cd462c6fabf04f67d652639d19640c46f51aadd6c4f9a6dd7806cffb6192d95c198f4c8284151feaa2e2a0dbc1f", "Expected": "00000000000000000000000000000000156914a9137e52abd4579599dea4c0f857eed0457ee1d80635d3a6ccf0c766ba8ab1b6f989711fbdf125c4ff06b597ea000000000000000000000000000000000c60184e8ab32019ce20d2d137130f657c8964406fe4abb26da232c9c5dbfab243837d700c88d6b9ea4b8f0a2f514281000000000000000000000000000000000dc3e6e3acb898552791431859943d0a83fb4ccd62e4ab2a971370a93a99a9dfcdbe4c42535aa063354e0f2cd48308c300000000000000000000000000000000025be02da875d4990d1f0be626ce634c4856ea91f88f636bc27e313e73897c9c13a1e3ae70c1227dfd4fba97f521d6af", "Name": "matter_g2_add_26", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001214aacb0a5e6b7a40369a83c07fa8cf1786ce7cbde2b5a501d9c1292532df7822d4fde10a31fc0cecce3a7cfe3311850000000000000000000000000000000004f9669d8fe4f884ae93b2505710e6e45b19b7aa5df8cdd811f09e547efc27d21024cba05e2dc9d057055f30ec72d9df000000000000000000000000000000000a852b821b31cd27eca19712a636aa05ef2cd82c36ac1c2ca240edc7d0172b42a72c42d3cba583a5b5129ac1c9486e270000000000000000000000000000000007bd8419e791a5cea04993509e91a980d3ae4987a5b322400b6e4a4f2b636891a1c7ba4de96b53426dd556532403d5a300000000000000000000000000000000117fd5016ddb779a6979d2bffe18032d9a5cdc5a6c7feeaa412381983d49ab894cb067f671163ccbe6225c3d85219db6000000000000000000000000000000000dcf01077dcce35c283bea662f4e4d16f871717eb78e630d9f95a200cc104fe67b0d69d95f6704d9812b46c92b1bc9de00000000000000000000000000000000121f212cd7251697ef6a7e3aa93eb0d7d0157cf1247d4411430c36c7277bf8acfccc4ed8590b5e8d0f760e0e4ed7e95a0000000000000000000000000000000007d22d78b486f575e01e21e1239cbedc4628ba7e01ecf4a3459bd78a9716e2969f26ea3f2449685f60397e1ab2aa7352", "Expected": "0000000000000000000000000000000010124c1c1c10868b570d2969ebc3bf5cd6bfab13ddc93f0fd2b8a1742eb8e04d31063bb81c52b92e253128d4cb4413a60000000000000000000000000000000013f89997cd2ddae00cbf24cb66a92146c553c6fae41cdfaef14d49078729f239ad2661937dd0d4d6ffd7076b03e0aa84000000000000000000000000000000000ba2ecf990cd846c95b35ab60d4f97f5814c8189190df9d521b3dae462f2d44db006a0daecf6b82c1459006bf82ef7c90000000000000000000000000000000016dc129b83cca5b3c699628d081306c5fa61faf9dda5e92894931714037628fb829c595bf64d4a7fa295f136ae244601", "Name": "matter_g2_add_27", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005ef88bf38b2f998dec7302cde829076e6cf69df23aa0bf6bbb39fc0d3d8b5eafba74efb928b1de0eeb3d86ec82612300000000000000000000000000000000011f47e9583997b19c36616e4bf78d6ddd6d67937f493986250ff02aef6e6e7ff074559af2f20a5bf1d67158e4a199cdb000000000000000000000000000000000007777c8eb259a836e6459b7bdb642f878d869fdcb31b105d01f280938ef5377f2775874c099dcd394abe70f17d595b000000000000000000000000000000001607379d1cd34e2d0ed765a339b21433e9aa489609b92414c6b5a05d796085269c288d739717def9db3502e055086016000000000000000000000000000000000224cbea61c5136987d8dbc8deafa78ae002255c031bb54335bcf99e56a57768aa127506fca1761e8b835e67e88bb4dd0000000000000000000000000000000018cbf072b544df760c051d394ff68ad2dd5a8c731377fa2a5f61e61481ad5b42645704a2d083c7d45ed4774e5448141e000000000000000000000000000000000740b8b7d7bce78a51809713656c94cf98de72887676050f65f74c57cbe574278dd3634c44e057ea95babcc3d230e3c40000000000000000000000000000000006696058a191c7012a4ee7c973c2005ac51af02a85cbb60e3164809a583b4431dda2b59e1c9ceeb652b3ac7021d116a6", "Expected": "000000000000000000000000000000000a66f36f2437db57473bd8b7670994f1cfeb8b43c0ceae358e63a5e4e52b737fce6b3d24cc4de593bcd44c63f2c5935900000000000000000000000000000000070b7ad970f03a38c8a31452cf11422159cd3331d746031781a5861e26f54efbaba63dcb1db8bab997eada9c3dac39cc000000000000000000000000000000000ba4a9d7350adca1ae64e722df11baeea77c5fb75c5b52c8c46b9d863a70bfed1ec47888e907213f4ed4dcaedd37f20f0000000000000000000000000000000008a64244f1870a1dbcc4bd4d5c9eb5cd5225713dc73aa22bc46b1cea36c88a66f85251a8a9ba7279c88bd5dd37a06f7b", "Name": "matter_g2_add_28", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d6e3068c082b68312141aa68f1540ea1415e93e7f1762b6f06ff408a9995542da1c727a13355c19f8f418a44de1a95d000000000000000000000000000000000dcfcf2ab12b1a0e521ab402aaa4d32ff649a5a97892eb6ad98487c3c73c35601c313b8130ad12e9098d16eed3bcc2e00000000000000000000000000000000013777b1eefa4af03dc44e4e054eb7a3a980a9c55644900b80346be84b970e1754d1f4ab771adc9249e4accf88a23fb400000000000000000000000000000000002f53b231f1209c6f8b52f99a78bc2147c951ac89b341495f4a60a6572985ce2bc823625099ec214bc9ceedb2deea3ff000000000000000000000000000000001522e0a4ccd607f117fc6fc8f9abcd704e9850d96adb95d9bfaab210b76bfb2c5dc75163b922bd7a886541250bc1d8630000000000000000000000000000000018a6e4327d633108a292a51abed43e95230e951e4476dc385ceea9c72ed528bf3e06c42d10cefbd4aa75b134936e4747000000000000000000000000000000001198587188e793ad2ec2fa0fa1d0da9b61ed48444fe6722e523aeac270f17f73f56b1e726ab811bb54a6e42e506d70a20000000000000000000000000000000004bedd94182e0f16c71223ac3d68ab327d28ee0ccdcd2c2db07faf69e1babe3fbf3ba09c28b146eca7ab047b59294703", "Expected": "00000000000000000000000000000000079f89f2defd1f97efe0ba1db28523abc88cdf66efd39918a600a07c5ed5b72ab9d3354a172735e7749b5f6814a48f4f0000000000000000000000000000000009e361b8609be8057e5b3c99eaa1727fdac17edc59239af17f55d72c8b8daa89726f4ae240c742ec4b02fbd89d45c46400000000000000000000000000000000121b475a2ab50357ce80fe01fc461195029de20f61474b0773d80434253adfc268a775e1a0e3b7df5e85d1ff8c5008960000000000000000000000000000000019a76aef4e04136b1ad0d03586a3d8608ac4573715f18d5fd6907d03e5fec7c5659e15c19fd87f242da972b651dff5fa", "Name": "matter_g2_add_29", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000161c595d151a765c7dee03c9210414cdffab84b9078b4b98f9df09be5ec299b8f6322c692214f00ede97958f235c352b00000000000000000000000000000000106883e0937cb869e579b513bde8f61020fcf26be38f8b98eae3885cedec2e028970415fc653cf10e64727b7f6232e06000000000000000000000000000000000f351a82b733af31af453904874b7ca6252957a1ab51ec7f7b6fff85bbf3331f870a7e72a81594a9930859237e7a154d0000000000000000000000000000000012fcf20d1750901f2cfed64fd362f010ee64fafe9ddab406cc352b65829b929881a50514d53247d1cca7d6995d0bc9b200000000000000000000000000000000148b7dfc21521d79ff817c7a0305f1048851e283be13c07d5c04d28b571d48172838399ba539529e8d037ffd1f7295580000000000000000000000000000000003015abea326c15098f5205a8b2d3cd74d72dac59d60671ca6ef8c9c714ea61ffdacd46d1024b5b4f7e6b3b569fabaf20000000000000000000000000000000011f0c512fe7dc2dd8abdc1d22c2ecd2e7d1b84f8950ab90fc93bf54badf7bb9a9bad8c355d52a5efb110dca891e4cc3d0000000000000000000000000000000019774010814d1d94caf3ecda3ef4f5c5986e966eaf187c32a8a5a4a59452af0849690cf71338193f2d8435819160bcfb", "Expected": "000000000000000000000000000000000383ab7a17cc57e239e874af3f1aaabba0e64625b848676712f05f56132dbbd1cadfabeb3fe1f461daba3f1720057ddd00000000000000000000000000000000096967e9b3747f1b8e344535eaa0c51e70bc77412bfaa2a7ce76f11f570c9febb8f4227316866a416a50436d098e6f9a000000000000000000000000000000001079452b7519a7b090d668d54c266335b1cdd1080ed867dd17a2476b11c2617da829bf740e51cb7dfd60d73ed02c0c6700000000000000000000000000000000015fc3a972e05cbd9014882cfe6f2f16d0291c403bf28b05056ac625e4f71dfb1295c85d73145ef554614e6eb2d5bf02", "Name": "matter_g2_add_30", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000047f92d6306bed1cb840f58fd57b5b71a5df7f86dbfa55a36636cb495e08715cd57f2f3e7cd99a1efc28b1d684de1cb0000000000000000000000000000000000f4eb02d687a1a6105b4dbd740e2c7924689d558e6cbfee768dd303cc8dd0fd887f5eec24b54feccf00f473ca3f54ad000000000000000000000000000000000edad68c4d536912816cf6ef039c3dd0535dc52189583270b3b038e2c67b213d943bf384ce69c4a9dc526d7ef309f25a0000000000000000000000000000000006ff4a6b5129ef026d1d5704bf7fc0b474de92b5cf39722f165e73f4e7612d6d3bb40743e4b7b42d0dad5d5d6a2d4881000000000000000000000000000000000805892f21889cab3cfe62226eaff6a8d3586d4396692b379efc7e90b0eaad4c9afbdf0f56b30f0c07ae0bc4013343b30000000000000000000000000000000007853f0e75c8dee034c2444299da58c98f22de367a90550dbc635fb52c9a8f61ccc100f70f10208944e48d09507fdce100000000000000000000000000000000064afd6b3ef7ff7ec34f1fa330877b42958a46a7698c6d21adf73bfdfcab7793b312e21e5988652e655f2d42edb8a673000000000000000000000000000000000ea8a2217c3dbcc0f6e562de9cb2f334c896577d0b3a7108d96b1aba2d705dbf531e870d4023cec2c053345501324233", "Expected": "0000000000000000000000000000000013f8cdab447ef9be450b87f941c96d4e93d5efd811d80c6a910965728f7dc496dec132f3fbeee5d1e84ed7c24ca9c2a8000000000000000000000000000000001537d5caa13ddfac93f0f86729c743d9a68175a78c730528b581fb54b1f4d020473b3b766e3882a485ce5d02ab381c33000000000000000000000000000000000b370903684ede24f3df80e3834ed414a765cdbad98f20c49bef8663a82a468d3911d6bbcdc021e22c252e83a857e55800000000000000000000000000000000100cc8d05f071904753776c6092a38db84c5de751bf93216131a0f9a50bf78a722344a14b3be2a9207568d1f669d208d", "Name": "matter_g2_add_31", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017b32e613cb38b41dcdf3c8bb9187d731546977fbffd79fa7f66e3d6aaf9e1af6eca2fcdc260c8f90818d7148ba2f4960000000000000000000000000000000007e4d26606a47c874c20e8480a9f5815e5b577bccd783b775d10309eeb3d2102c7a0abc3324679e44362f09e7a4ada67000000000000000000000000000000000cb6f12ac8b49cfa36b957591293c87b21af0a949c55a28a90ab0fce88fb5cb7645e20ab2edd284f0ad1377dd95ac10e0000000000000000000000000000000014c96b5dcbd3150eeaea5c2bc27750cf88b30a91933a3233a4d1d9b357a80cc20d135e43a344e718dff5c79045c31f860000000000000000000000000000000011798ea9c137acf6ef9483b489c0273d4f69296959922a352b079857953263372b8d339115f0576cfabedc185abf2086000000000000000000000000000000001498b1412f52b07a0e4f91cbf5e1852ea38fc111613523f1e61b97ebf1fd7fd2cdf36d7f73f1e33719c0b63d7bf66b8f0000000000000000000000000000000004c56d3ee9931f7582d7eebeb598d1be208e3b333ab976dc7bb271969fa1d6caf8f467eb7cbee4af5d30e5c66d00a4e2000000000000000000000000000000000de29857dae126c0acbe966da6f50342837ef5dd9994ad929d75814f6f33f77e5b33690945bf6e980031ddd90ebc76ce", "Expected": "0000000000000000000000000000000003c5498b8c2d4765a270254dc927c6edf02acf0759540ddad951ea8c097bddb949ea0bf19942accd615bef21e8572dff0000000000000000000000000000000004c17bb648909bdddab4dd86560cb6b341e96f58c515ce471281f226181bded16b358b56d72e363f9ec491b8a9dcd92c000000000000000000000000000000001828973958204f8ab8cd13f5af5f3529f368a149bfe931a8002b61a61895457fbcb0cc6874631bb55799c884b998d8b9000000000000000000000000000000000f61460bf61bbf3ce38917850bfd3cece1e3955ce29d200c6f8aa89076c70919c02668678edc0bcf94efc9e9ff6a650e", "Name": "matter_g2_add_32", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001ca1141ba9542c56de8991b313c6ae42fcecb6751b0b81b8cb21ed70d5008f7ffe831766b89880a7fa6dfdb09a2cda3000000000000000000000000000000000e6766b17db165bba564ac63ab88d3f8f5eded07a40b48644e60d3223d30458e7dabe404cab8d6f9fe135712ef0b1a43000000000000000000000000000000000dda3e6c87382fa762510e5cac721fd2b654f002f5b9a3767a8c6d651ccc582e80e3f68d6913cda30f9f51ebcfc7c98600000000000000000000000000000000059a7dac5bb6b504f2bd603d486700fe22c14f25254537b2c9079c2b45d36c7ce56854c5699cc7649b533194f51a9045000000000000000000000000000000001755d8a095e087ca66f8a118e0d2c7d5e4d8427dda8fe3049080f4aff12a8746f8c2679c310f4be0d94c5bef0414a7a600000000000000000000000000000000069c84c6419ed5c0441975ee8410065a56c65f07a4b545ff596b657dc4620c7405fd4d092b281e272773d2281a6359a8000000000000000000000000000000000e751ccbd475fe7eda1c62df626c1d37e8ae6853cc9b2109beef3e8c6f26d41a5e4e0a91bbc3371c7ab6ba780b5db41600000000000000000000000000000000184097644c9b44d543ebc0934825610590cc9f8b17ed08e9c06592bf85591d2702b18cf48a70b378926057e541eb8ac5", "Expected": "0000000000000000000000000000000002c6104b3494fdef86d53f87bea68d313188c0908b935fb3b9f636ccd401c6e9cbd33bfcdd437e1a0150d0e4b9c3a881000000000000000000000000000000000bdc88396f807d1ba8d4d6e284d008b5e40445ce32c23a0178824fdbb6db3c5aede7687eaa2f12249125cded57052ad2000000000000000000000000000000000c7004365c1d3027997b55bd258dfc61ae07a762666fba2a14aa2ca116673fc03a6f694c069f53cd915fef6d37513101000000000000000000000000000000000ec17688d8f53e2c92502091c859cef4fe9a57ae984cb1e72686bf1f0656b10246293cae4b96214a38dc76cf2709bd59", "Name": "matter_g2_add_33", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000090f4b85961ce97cf7f99c342d3627105d790f611e19721a43d8a0febd67ae393d77a02b999108efb56f0397dac22703000000000000000000000000000000001112f23595d1613c47486eadc37f9b1ac3b3c3973b3fe964d3b67c3996fe2eacd9df5c287b0cea8e9475d146fabcf9e70000000000000000000000000000000018f46f7ba3c9af34c1025c2d460f0be966e68944928dbd55cc7fe00e5def598d80b0e3801e48a74963c974ab4727a52100000000000000000000000000000000096845338d5cd2ac44e097607d6a1a05c241eda1941991ae9edbba965d9029032c46da7218b5b2338e6c58898bc4a820000000000000000000000000000000000213e5d2d46523203ae07f36fdeb6c304fb86f552fb9adb566711c31262629efb0b1561585f85d2ac7be174682229bd8000000000000000000000000000000000b3336b5a4f7c0d16db9615e77bcdd55b7cb5b5c1591d835f34f5c1f1468e3cef954608667fb97a32e4595f43b845612000000000000000000000000000000001869606dde1688e5ae9f1c466c5897fce7794f3735234b5af1ad3617f0688529499bbdc9f0b911840a3d99fd9c49150d00000000000000000000000000000000001bfd33df4a6059608ada794e03d7456e78317145eb4d5677c00d482ac4cf470053d33583cf602feb67b6f972c99739", "Expected": "000000000000000000000000000000000a44e6a48ea0a95667f607ee66290cb0094c964baed779bd6656941db28e30a7e9effe49a617be9ab376af4f535cc28f000000000000000000000000000000001933b87310bf5fa60b1abcd13bb7ac3f2ec0a278f6a0a70c953a2905ac1d3bc5a70cf1da885af45d1c7680bb4f7ff74c000000000000000000000000000000000597ce9f1bf7efacdcb0250427d0341e142226aaea060983175ea149912c5c4f3019fe87be6d87d186a8f562fc3059eb00000000000000000000000000000000198b5a891722a237a5e23e3004798c8d3f069af3267152508e283b4549fc5e8388330343f80e606eba30af51c99c7020", "Name": "matter_g2_add_34", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000aafe45ea7cb8b450a51263eebc28c1ded662972bee512e24fddaf64f43b74b66032523b3b104a4e9f6b62394436c6710000000000000000000000000000000015cb27e1fedfba2d1679f78a388f90b22bbf3e7d090f0ba972fa8e72f6e31c446f628fff929953712ef6e425d16eba5c000000000000000000000000000000000df9931893cae713042bf722db6ce394b6f346587278a154c271d8511e690417eb6dc47efbcebb7c2fb9e77f1de9fde800000000000000000000000000000000106ffa395ef170c99bb5742428ae88fa4fd7a94476985c099e3b700b7403d083281fb71a19640c6bc2321e27bcb33fe20000000000000000000000000000000004ac6e6077d4eddd0e23f30cfd64b7aa1525c85424224e70c15d7535e02aea7a312ef24ba2dcf70b926acb851da2530c0000000000000000000000000000000006ad07d3e8f45cedfb4279913bf0a29e37604810463d6020b4fa8c8c4977d69cffaa33e1149706f04eb237194dcafa520000000000000000000000000000000002c536dd2f05f4a7eaa33fd884262b22a2ab2a88e7b63cb08ebb67fc0f143da7d6b18dd394c424161f7cf703acdc82f50000000000000000000000000000000002d1d9ff74e20ea9b03c478784f57e7a58a21ca2b1e552319f33305f367f5ae4daf8138505f953db4f86c0ec1d96d5f0", "Expected": "00000000000000000000000000000000047c2ccda315b9c013e87bc9168b3b8dd6d463403f1cefd824fa9f93a99f4c4f98fac5f97e4237f76b1ec91042f99bd600000000000000000000000000000000036861fd0a69cbc851741475905441b51af12c5b2aaee6ce9a27a01a43db810be9c7d6fa401406e98e327703404b83a5000000000000000000000000000000000310cbdf53f6cf8d87e2d178869bee4359a8dd666986d869761a79963680a33ea3ecefd40a1e558acae5ded2ca04447300000000000000000000000000000000108bbb28c73ed7e76a51a78e4d15a2c88c25e05c7127ae89d4347cda00be231b5e70e0b0562caddd4a7083efa4516722", "Name": "matter_g2_add_35", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010b1f8b1c492a56936da905b8738affba6bd29ae5fffd40ba6b31325181d3b489a81b23dcb69f6e71bd29bfb388e5a8f00000000000000000000000000000000116a115303b4774da59844e457844232d088062d920db67b2a8450a194be7e5340ebd4d106454fd9a03c8f50dbb1e119000000000000000000000000000000000eb521edd61b38006cffc43ab72d395d669dec196846fa4d6d43521da6c2fc3bf0994ce7556a3cffec7751b3bc5703ff00000000000000000000000000000000073cea36eccaa1c78deefb6029903c2b6598301bdefa9759719c3b590fcc5a6a4d3d4d19f552b33f4a3126a6e6a84486000000000000000000000000000000001913ce14bcd1d7bbb47f8efd92d7ffd155ed1990a1dbf1ee7d5e6d592a92bcbec6e865199362950afd6c8fc49b3e10a400000000000000000000000000000000020df729079e76cf06f84e3355e683e093dafad38c2ba92cf7a9faa0515f2f44d814f971046ea20116cc4b0014d7ec350000000000000000000000000000000018db123e05404eea8707f9356f417c3966312b9e41765a6fd8449879ddc4c9850c38434481b235a5bc35db1b8ee86d43000000000000000000000000000000000b4162715717e9065a3849a9294cfe39b351e57ab5a6790f3e725ad9fbf0e4b9d6a3554e872af9c37df33bb896dada5c", "Expected": "00000000000000000000000000000000137d23ed3fa0d7e5928af8d1f4bdfdef08e0b4c0f3bf6f51ed28960ce9805eb8fb254233bb18cbfecbadba95e112fdb80000000000000000000000000000000018615147d7a8cce1dfed6de25cf2fb52f54a243bed4913e20e66673f47ecddad9c5e4ff9653f522180de4b90ddb3ad17000000000000000000000000000000001521f12116b13f785b5211aaf438aa6668bbfa318cf0ed6d91aae963f6f00d32cc5f25d3a02bd902ccc25f847ee2db830000000000000000000000000000000014263b23396f4facdacf13c79864157823db724350bc640abf8fb6d62663cec1069eef9db56817660510e2417b51c616", "Name": "matter_g2_add_36", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e3925fa085db73c1e67b29ae90f8773f83be5ec684402e8e2360ffee8a8368911e584843e42b0d470de78591df6ea6300000000000000000000000000000000075c7efdeeb16609b4a47ea442af4d75238fb7534fd96cb236a7886809d6adc2b62c8ff72bdb041bc51c1a71b68219e300000000000000000000000000000000088b4eb0dd185e51b737d797334590e982b7b0a5f109fc7d0524b2465c2c0457964eba5a6d2d4d99fb628f21f15a776c000000000000000000000000000000000fc79f6b38f3356972669290eeadcd992a22bc1191606b663a1e148aa58db3938f0fc65e536bc5811c50d9c7f03d3e370000000000000000000000000000000008be924b49e05c45419e328340f1cbcdd3350bacf832a372417d8331c942df200493a3f7f2e46ad2cdaf3544cfd8cd8600000000000000000000000000000000028cd100457f4e930fc0f55996a6b588c5361816bb853d1f522806e5ec1c455eb200343476feeb07ca77e961fc2adc1f000000000000000000000000000000000f6adad0a3bab3610165be2fadb1b020f25488a0af3d418b7d7cf1165812e17aefcbc23308ebcd31d22ba4ca5773dd87000000000000000000000000000000001657ff792e3d89d5d35767bd0cc788411b0420665a5e0704f4d2399b9d9a5ad3c027ee030fdf495e5a6e2a4c69d05712", "Expected": "000000000000000000000000000000000038f9df6c14f84b8ef8045010c8973e5c2f8d2e37268f6a674298de7b15cae82361ebbfaa00ea1cb2653c5d00886b45000000000000000000000000000000001376f7e2d5621aa9d6f7ce45ed11de7e0e1095ebeea976f78eb83189c6852ee199840c14059c233bc3d40efbeeb5eb36000000000000000000000000000000000c7b0e53adf4f0fc5172f903e3fc479539348241edc3e277f30ae6b4fc419aadcfb73a8f8a09a1ae1dd885a6250de0040000000000000000000000000000000007a00b57ecc8b056436ecacd7e0fd346b906b15042e9a700f54f8c3b1d251c566e0c55bd34f7a9e30f1566b7f2ab16dd", "Name": "matter_g2_add_37", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b87c47605fc060a8e3677e84ce9d14b9309360a13c80d040c625fbf0108f829300cc1fca409a0f9c96311cd4a9a21e60000000000000000000000000000000014c4088f1e7935cf6a1d2475b84497ce6a250ee2c0c991fe51a2f2836388a354824b02d9cf215328dfce3f546713e21100000000000000000000000000000000120e59be3ecf35674eac6cdc559599b273f13f28a529770fa156f8e519734c451eefb35023639f32049cd19ea0d945a3000000000000000000000000000000000f97755b62a8cb8f861ea02c77819f0b58181aecf612d92180ba9b475f0b4888b922c57f6a1c619dd5514620a1cfd9e2000000000000000000000000000000000a5048d860b997a9fb352e58284ebbc026622d9be73de79b2807a0c9b431f41f379c255a2db0dd67413c18217cb21b7200000000000000000000000000000000045a701a3f46ca801c02a5419c836b2ab3d74ebd6f4fd1e7dddb1965b49c9a278f6e89950e7c35ebc6724569d34e364c0000000000000000000000000000000004cb55008ccb5b2b8ece69fac7283f5a9ef9e622e2a0e42bed5bdd77faa550882643afc1759b1a327c4f2277e13a3d4f000000000000000000000000000000001690dee40c6c824dc2588fc47dbf93f68ac250b9357e1112db72ded905ed7b101b5f877bdc42d56afb5b6202403a91c4", "Expected": "0000000000000000000000000000000012662e19e41bfacc0c792f5183596bc7f1986f9bea72c626e187d72111b6ef3f36f5afeeb640cfda99b7044c0d0b846900000000000000000000000000000000050ba08e1b9fe95dc67e6ee1ce60664b291c80fdb59729cdea75dfd18f22fb88f837b439fd119c46c996787d3008194b0000000000000000000000000000000004ea0f488fece967675abdd3c42f8fec25b547cfc45d42fba14bbc55ad7e1a75296a679113d0671cef0aec0c2165f4a0000000000000000000000000000000000f617f51800b09150a7560505079c785ab45cea4705992fc0325edaf4ceb30e1f0bec35a31898db5f810685e55634076", "Name": "matter_g2_add_38", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005860cfb6be6720118623d2d8ba05e686df22744b948421dd3cc1b1691e00d9b5d00d00195b4acf7a7b043f764f3f1c70000000000000000000000000000000012632a3313dd611e8d969bddd556c2d79ff387603462ac78ded3a842981697bdac34ee6f1f4744ed2ff16100874ac24000000000000000000000000000000000112b94c317586e343acadeca611c485c3ea172bc10dd39158c1e678007130062a921b53826d7be6286963ff822f1066c00000000000000000000000000000000040de8c0dadd2a6c2a7ea0fa43e1a5f2f5a6be3fcb0de6875d8cef1ee2daad87125d12f6869c4dd3d931b296f1df2fb300000000000000000000000000000000153cec9690a6420a10e5a5a8ca46fd9d9f90e2a139886a07b375eeecce9083a5f5418e6baf64ef0f34176e432bc5343a000000000000000000000000000000000d87c1f37f83ae78a51af9c420e2584a64337d2d2dd8dc3b64f252c521901924e5eec1d9899594db5e64c93c7a01ef020000000000000000000000000000000017078538092ace26cc88b94360871fc9a6bb9992172158ef3a16467919955083accf8d55d48c7ec462a743dbbca7b448000000000000000000000000000000000289b703157a02fc1d687a5aa595495be8bbb3eb0d70554728255a44b7820e0ee82d984d5493c800f1d9d8ca0c9381dc", "Expected": "0000000000000000000000000000000019c774e968049bde2188e844c3413203bfe2c4355edc8cbc2cf6f977c34c0a42a206194e6eecba3c97b24558048f3aa700000000000000000000000000000000081ccf6f111575a946341759b9faa13f3608998fbf4ea3b547804737e30fc7e33495caaf2aa328b19bd48315c5c7f9e2000000000000000000000000000000000a4098536041cfb808176c7cd8e980eda613a2b390e8d63d607caaac26db02fccad6d87412b90cb4b3e186bf9ccd31be000000000000000000000000000000000d3c784c6587b9f786c06099a62aa639f40535b512ac2440912f04dfcd1cb5851b7378f381fcdf02d4e58312eb7e442f", "Name": "matter_g2_add_39", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006fcd2c4fe848e9462ba1112baad39031c210952adbdd06293a622ffe2d1c6e4fcc8773ec8913717018b97bcb9a554fd00000000000000000000000000000000130a97442f3273b7b35464545e7351faf71ead9b8996c63889a45945ed82bba29bff5014776c6185219a5234d8475c92000000000000000000000000000000000491d571bac5487b866022a0714be11b38bfb296233845cc434a50be1d35f516b8c6b046fe3d0a8f4f95ac20eddea01b0000000000000000000000000000000017e34b04e6fdf152c848f2432b7bd84b3dba3915f06eb77efb8035750aca9d89e92e1d1bc4871105c440d639e8d8b05500000000000000000000000000000000057f975064a29ba6ad20d6e6d97a15bd314d6cd419948d974a16923d52b38b9203f95937a0a0493a693099e4fa17ea540000000000000000000000000000000014396ce4abfc32945a6b2b0eb4896a6b19a041d4eae320ba18507ec3828964e56719fffaa47e57ea4a2e3bd1a149b6b600000000000000000000000000000000048b3e4ba3e2d1e0dbf5955101cf038dc22e87b0855a57b631ef119d1bd19d56c38a1d72376284c8598e866b6dba37530000000000000000000000000000000007c0b98cda33be53cf4ef29d0500ff5e7a3c2df6f83dfc1c36211d7f9c696b77dfa6571169cf7935d2fb5a6463cceac6", "Expected": "0000000000000000000000000000000016fc7c743c5ba747640a6494fb3c30caad5a1e9719a1994d0ca73bd1645fec118a2887acc8876d105102241c10274cd300000000000000000000000000000000058a42a0095a7388fba7ce71dbef4ecfd2018c3fcdde14afd2be26588de4689d8de757e1e3ff22645fb8c17aa60265850000000000000000000000000000000010bb622f649e346834b95e82f93ae83c71c0a65df7842c4ba88df7f6eccb0217ca9377167a6d14777e0474c24821f8d70000000000000000000000000000000010c180c685ea3d0146eb82c007fec3efd129880f18f838f1cd2f80181f5a4884d6b5cc8247430fb0c1701a57f9d1d485", "Name": "matter_g2_add_40", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f1b8df4e8fdfe32eaf227f5af9f2befc85073468f10b81d32d0e126fe2b0cc8e8adb8afcac73213b6ed95e8e843b97c00000000000000000000000000000000004e3fb435ae0fb2d8bd091f250aefe5922b353a64e16abd75627737f3bc56639f8b40652cae69c73ff1969925b0afdf000000000000000000000000000000001003aed7cfb00efce49d6b1a8eba27df87479a4d37bd7fda6121549483b669a1a761204b0dd28262bf27e5c8e180540f00000000000000000000000000000000114fbca7caf782b3296d0b26b4c362bf50acaecb8bc5726b2c99f904ec3d092d5d40991d0d30c8e79fddaa45f04a75d3000000000000000000000000000000000b6069a2c375471d34029d2a776e56b86b0210c35d3eb530bf116205b70995e4929fc90349a7db057168dbe6c39857970000000000000000000000000000000014251a0a154731f73513b99d830f70b6fc4bcf05d11f52d2cbe9795ee8ffc5a5f717ad25770b8ecad6d0e9f8066e0cba000000000000000000000000000000001172684b21c4dfe02a55e13b57bbf105c954daec849d4c6df5276b02872c004fdf09d24f4eef366bc82eb72fe91bf70d000000000000000000000000000000001151aeb9441c5a8fabe80867b5c791420645241eae1400bbcc064d75bedd39de2ef585138fe9f65725efa1b1e5888d03", "Expected": "0000000000000000000000000000000019419b635c3742cecffee02ee7e2b1f18ee9ff15e647ca0abc4398ddc421ae7e0444e3c1ec377def9e832d8e64fd40e2000000000000000000000000000000000d9b4abfdaf3b4c7bf00fa07579befa10a3418d8fa0f3a9c31e59ae48b0de50fc8e6d583aaa4d0fe6048bdd1a9c60eb60000000000000000000000000000000003c96d57034ec97c4abef1c2c81f4d4b0f4b6eb1e9dc5464bcab28572555b9b874df80325941501c3766fd7e06bfe7360000000000000000000000000000000002dbb3d72385b562ddcb9a80400ab3770f00d22b880cce2fce1641042b9da669b22b2fbc97617648c25ab644e661e2fe", "Name": "matter_g2_add_41", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017faf481fd4cb0c373d21d7caad40e93d9a86e62d26136892fbcc6f6e48205543aff00c45e82fdd1d3e0e733de91e7000000000000000000000000000000000012e14fcb9ad4d9d15347cf004745ed4bd92097eeeb41c4cbcb728a234616363589d8f5ad4cbb61d31a8aa27627723c7e000000000000000000000000000000001513dad1ff27e053902e779e35d04cab648939317830144ea775c435a4b55e13fa2fef03a1256abf5c187487c25a774f00000000000000000000000000000000139da29de8587c7d0ca9237c37a116387385e9cea453b9e2003a37ede7aa0a3f4c1df55255897f5975b662be33622dbc00000000000000000000000000000000161b70d0f384e589d8117938602f3d696f941c24e3c1ca5a9be090b670456c9df315d6fde52daed55c9d8335928a7a3c00000000000000000000000000000000186bb9e6f5ba70dd2c66a641d3b711844977939904c59946d4e9f49ac2d8c00890a43ccb20d4a62bfff63ce4a0a44e8e000000000000000000000000000000001995b9d697bded656236430e78726f0f6ef963db9a5a24d455c12db38aeab0f8629e5dc2d04920156f2a057d69613096000000000000000000000000000000001119b13caf82c18fadcb65c9c166914bfd822534bb9def3feae6c9e572c97c84e97fab3b345cf59358436a404075493d", "Expected": "000000000000000000000000000000000d32b00154a5fe75c576c098419744ac36b911ee800f94bd598ff9b6adcaa39c836bc158c5d6af72c9e715a242d0fe710000000000000000000000000000000006e057c13885d6c05f5d92061fdc4d532f10d31d472c371e71367fef7c5fdd3741e665321d1119b895660fba3770431b000000000000000000000000000000000bfe695c3364e15479741e974f838649e789a76d073e552aaa60981fbc6d185eb7b297fd59e51535965214a02f5cd67e0000000000000000000000000000000014f0a27412248e3163e5f82fed02a25d953b336b0201692f08a3e8e9a9d223b736c70c1a39826a0888fb02a314e223fd", "Name": "matter_g2_add_42", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c118b147ee3489f30c6ecc0256a314ab674110588e8b69ca6d265fc270c3e5b767817f861140cca5d7c6be4012d1ffe0000000000000000000000000000000014800790654726959fd876b035bade0da744fb36ee5b304f228663a531345120267c55ac19fd66022752010e5bea7cb30000000000000000000000000000000000193ab7ac2f151750356b6e178557460c9c2672b1736d19a20e3fa28082479ca60021aa68edf2524f1aa826ee70b65a0000000000000000000000000000000015cee9ac55ab45abbc57d0ea6ec9ee49f6c59f6b94f99589dbc08ee877d3a261ad77f5473fedd72ed7206647eeafb6ea0000000000000000000000000000000017d1ffcad218efd8b09c68eba34dbbc30b0a62ae250368ee37e5f6fd40479b8580563416afdbd92c0622c341331e20a30000000000000000000000000000000009f0eb3805ed78aa3952a0a437966258ed38cb72912756253a7a2f9113f0dd9a4e187062b0423e0587d93e904d88f50d0000000000000000000000000000000001bca57e985906695e14882f2aaeef75de5009e8717eb59962e978aa11e9d0a4d9a9e203df774cb1e993b1c6ecd6048c000000000000000000000000000000000695b11cc32740c91546eb7d554ca8b1f3afc942ad977345031be8b94b78b57a87ab049ca2d3676e039efccbf24d0c47", "Expected": "000000000000000000000000000000001566022247ce012b7de92c8495876b4de91c36448f4f7e00f6e154185d38a735e701dda989ae9e37d332a5e60af5d06b00000000000000000000000000000000065aa42560df7990df2098827a55ceaabf3ec592c53d2f20e5dddc1481ee64381accbc8e58601428d33589b3af78a4b70000000000000000000000000000000002d9b0cf8bfd1adf76bca80ca351a4340f02434090518807e07ed76440497042f13a0cd7a9c30086872d6f145808fb290000000000000000000000000000000015daaa131431e3e78a6221091640811fcf88c835ac975a041a7ab50bc1d06b80e6a3c9ae77d2390fd14cc9bb009b47cc", "Name": "matter_g2_add_43", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ef203fab794a0ef29eb2ebf00076134e5932e27c99d6d445695b9df2afe7563602e318caf5d44724a21790ca0ab0d180000000000000000000000000000000013b9b1b1d3e98b61b0f1a0ef3a1a4ceed57b6c01849a4ad66a86332b3d27022cfccadd3567e6709d2de5b23b23dba43f000000000000000000000000000000000c1fbace49684f4be32ef6178ac3a95ea3f50b11494340fb73dc5391d50bcacafb3bf0f2631fea9c4ec47327d644489500000000000000000000000000000000040f82812855aa3e3aaba826d5810c1049cf44e86e44e23cc6da437971b529d2f2676c73e1fb9da52640c981fbd710be000000000000000000000000000000000546a0cb9d9f1ef9ec4a1e576fa0047557a56c0217baed8691c4085b88c84a0e12d44043aab8671393d02c4a764407ee00000000000000000000000000000000131884c1386980a181353548da9602db70ab495a661e76235c4b0a32b54acb0dfd8846e17bebd731e8041c4aebb8776600000000000000000000000000000000135b3db43511dbd8b3bd5a91880d6da1a2bd1383000e0d6f0a521bf88a5836a3b5f7cb9c0c02aa861a1c2d339f3c11f20000000000000000000000000000000000e1337271bd3302a1cab762161ccfbf2a18b7800e6efe58cf897d4adbfe4cb3bf14f4b59307fffc548179bda70c18bf", "Expected": "000000000000000000000000000000001290bff629c93d992ad2cc709317c48980b0e56a32fe239258c7aec75e4523e0bc0b81319e100d10568a44847869a8d000000000000000000000000000000000055d9098e08eabdf2b883df35efebec9f6afb16d651ebaca1067e2129146268664ec51c8a4f28f13a250f3e9883053780000000000000000000000000000000002424dab6f0d18ea8bdded2a72bcf87c13307d27d53e8ec35e91eeab97fcf3398135fd436c530c609fd47a3508472bad000000000000000000000000000000000b25d0db1e28b98d4f9d3c77c0b71489c51186105d93be7fc2cf8c72b8abd8959340114635e705e698b0f257855ea4bc", "Name": "matter_g2_add_44", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000060d7a718dd02b147c265f71eb136d1f31781b12a41866b4f86d7374b93dd10058c192cc0fba928373b1526e1a5d7d7f000000000000000000000000000000000cf29275373c0573ef22bf87919faf5444847203c7dc6d2e18986152cc294be04a5b1a4b0536797158113a15276c4fc6000000000000000000000000000000001016d5b9d4d200d7b4b7cc3836b85d6697fe14db350badba9978c7b56983dd1a7e572640ee0372b0a4e2079ff4c1abf2000000000000000000000000000000000f2768d104d895473ddf8c6b3cd0e7c22458d0037eca6365c766879a07c95037ee0de00d32c974d767080935abbe0be100000000000000000000000000000000113dc3354146ca79eb103b31b61fe8bc6f33dcb9c59a7c39d989bd9411c1afce4239034f84e6b00a084be061c73e69c0000000000000000000000000000000000ae33bf68f24978c7ea9fc58d8d76047ec45d01fdbc880e6a5ba02a22a49a3a8253afe0678ecfa6013f4849da3401df70000000000000000000000000000000012c5b00376a1dd31378ec44f2dc8e321e17185d903cfc5c15345a01c33f2f151b21b938d31816550594a7a1e7216c5b00000000000000000000000000000000013d79f825c44775c68e90932d0496a5cae53f04a1edb19f8abeb5948a3dd325dfec4a8b6f58c7fbca9cf3c09b909d8b2", "Expected": "000000000000000000000000000000000cb2998b4e634bc83b5585b0683b7b561f260eefb826719bdc3c95e8ae51f8f7b442d75d69e0f9228dacde2ce80ef4e60000000000000000000000000000000014d30d1c02122143868ea01b454a4f33432d875f8ba66e6bb1e02fc161bb5f9298e673339a9183a15759f8b94b519cad000000000000000000000000000000001068bf3c768e8c9e9058805050394ea820b5f60bea6d271f8e1fb665d3b7931ab0cc03dff4cbd24577b2c254a956e8200000000000000000000000000000000008b7f4148bd1f4926d2a84497b60a48701057ea08855bb9a2f838d2464e66360a59d058d9072f1416023cc72045af558", "Name": "matter_g2_add_45", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017b9ca4349fecaa43ce911c0b256680edb8a0906ef5460fc4d2004579336df1e19560fe960a7a7cd74bb6e8272e08960000000000000000000000000000000000d5b96dae738db59cc67a51c61bec6deaeefaaa51e3259243fa4b142ef59676231229ae386ce699fbe18c4c00bf9d49400000000000000000000000000000000111b79f4b68dad16550a13334d09dc38336a75a5da23a17b5064e2d591aa3dab4c2e982a9f730a7633070504663a24610000000000000000000000000000000018f6d3616a7eaf17c805a88c9710039644d01b61aefebf76717ddcda6f4bb34aa15702de1e92bdb27b27f3409638da900000000000000000000000000000000006ccaf6c08f831be9c99a97714f5257a985cc2a29b5f5c81bc8d794dd0d8d1a41eb5413bed654c0140dbacfd0dda9e1800000000000000000000000000000000144e9cf91580800dfaa47c98ff7d002a576be76d9e44ae1f8335a3f733e1162af0636372e143174d872c7ea89f4c743900000000000000000000000000000000101e143b838c8a3f5f80fb1412081091b875230f1e2f9cf374d4bcd595392f6daa9552dbb6d5834e27b1b3dafe061ed300000000000000000000000000000000072463400b3e875395a1cdd31d73d51396e34347cd86d9f6f43f42253b3cdb24b89ed7434b1522af95ba1ee2d29ed1bb", "Expected": "000000000000000000000000000000000a7843a1d67360b8a6976aeda2e4e98f1ea229a4d84b947dcf5ed8215173d5cf783920a7714f5b048778df30f01a0bed00000000000000000000000000000000035663ceafda9e5bfe934cff725b36b258f12afe749f907a560a06da4abf8380853f8de31adf14d62cdb310d8740e29b000000000000000000000000000000000f210d576aa5d4cdf5aefd8e55be099c422debc217ddf0151b8801f7d16456c97d1e134b40e6d71d296ee2518e50af9d000000000000000000000000000000000219efb35c68540c6bb0ef224e68dae6f7d48425c2908440072f5f63eec3c8e750b559c73e33464d0b5cdabb50fc4d3d", "Name": "matter_g2_add_46", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000aeb5c087644595d0912879f61959d2731ff55260c682ed2bc5fc55c13964ef7c1f70aeb55876d2264d558c31371ca69000000000000000000000000000000000e173848f4570525b03a2b2c86f4dcdb8b28dd6d18c1354cad31028eb1b8b44432c2346edaace093e3954c7fa6d338a4000000000000000000000000000000001949b0902506d111ef6318edcd7a58ca4d69f5804a028aee73c3786cb2db168c6a73b77194f7a021ae6ae43ac78ade340000000000000000000000000000000017c5e28ba6103d97e2f3d3611c0c78f06406e0da8a49ae29c7d460b52f75136920784cd500aa3593858b877697eb8424000000000000000000000000000000001354146aa546754e10ada6e0fe98f04f5f3a3f8a8350d0295e02b8e9c80735b04c3061412e08ddb13c80ac36e5638e540000000000000000000000000000000012ab26513534b4dc1b71eec46b73199c4157ba9369e66fbe4d2d8f62237fc7c6fad31854ebd878f989b8c5cf35c7cfe0000000000000000000000000000000000eb731bc99cdadf7f2280385c7e17d72d34bcbdbdc725d5bc94e841036115e8cb95df08084221696f9be479821fbdd7400000000000000000000000000000000143ba7d3f66445249d9a81a6949f24ff40e7c4d270fa044a8b80200a4369b07806c5497a0ef9e9dbb87b9e63694623ee", "Expected": "000000000000000000000000000000000ce704e650605f747cbc0bc76e82de8569ba7b3d897eac2bf5f79aba17ef4c989731e959c0bc0b7988000a9b0aef39430000000000000000000000000000000003cd3f3d978d6c85d98812ea0e3d21149bf4151ad1bef966ced124ad62dc7cde55f16e8d08bb1ad54d3a23bb73795d8f0000000000000000000000000000000019d37a20fcf6244c2898b271535e3b8f279eaac5d8fb1ba142096da383488eba28a21d038d7a9d3f9e8a008d6d3ee1d20000000000000000000000000000000001ba9c1720a4ef07ec752efa1ddb629505b3586af415c916fb0ed2953cd8943d9343268f438db860f0bced3e690a66b0", "Name": "matter_g2_add_47", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d4f09acd5f362e0a516d4c13c5e2f504d9bd49fdfb6d8b7a7ab35a02c391c8112b03270d5d9eefe9b659dd27601d18f000000000000000000000000000000000fd489cb75945f3b5ebb1c0e326d59602934c8f78fe9294a8877e7aeb95de5addde0cb7ab53674df8b2cfbb036b30b9900000000000000000000000000000000055dbc4eca768714e098bbe9c71cf54b40f51c26e95808ee79225a87fb6fa1415178db47f02d856fea56a752d185f86b000000000000000000000000000000001239b7640f416eb6e921fe47f7501d504fadc190d9cf4e89ae2b717276739a2f4ee9f637c35e23c480df029fd8d247c70000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000068edef3169c58920509ed4e7069229bd8038a45d2ce5773451cc18b396d2838c9539ecb52298a27eebd714afacb907c0000000000000000000000000000000004c5346765a62f2d2e700aadccf747acb3322c250435ce2cf358c08f1e286427cabace052327c4b30135c8482c5c0eb9", "Expected": "00000000000000000000000000000000160d8b4bef36fc3d09af09dcc8357067c22e421f3811deea66faec42a2f00fa4aceca8725cf99062613126a9fd7bf7210000000000000000000000000000000004e8691a42c8f3ce0e7c0470446689e9d2b3cf57d55fad7387d624857f977cb9c6864c87bb4b6a2c17538478ac5fb5960000000000000000000000000000000015e20f6baef033efbd38081d5a10eeb3c67d89ebe5cd652110b778313c9e86cffb45231616d5b67e9ec8b7be15980aa9000000000000000000000000000000000af75dc221050256015fecc2bd8113b42afc9c624e5d28d7ff8312af499e34a603d66a4304f263729b440b6266538316", "Name": "matter_g2_add_48", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f20a07526a082e88630a0256d134a8a5e8ada07b1cead39ee838dcbb30904e9016107fcbdf1f8ba182308dbe0b043d20000000000000000000000000000000014fb7732f67abf60c03ac902577532d0acadb5f3db0d6397a42ba693526ad74f2c61a0195bdc9704aaaf12e65aa6d88b000000000000000000000000000000000018cec4fb81c85d304588d11f8b9c51f5a053df11463e5812a1b2e6c7144522ba36bb91adf219892d0007cee470032e000000000000000000000000000000000b8e52d958a12a9037e8be9bc0d5045cade2d6ea05c6e68462b3a30b5d4ea34e5fbad173761e4e216b2e6958c8983b28000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000f6fdc4e5dceb555c9eb4c912fedbfb3cb1b842345f73ded02cfaf8d397c4378809721094aa4a4113a368e0787effeb500000000000000000000000000000000143ac06258c579c11c05569669a2a10babc63ecc86f85c91791d8ea48af700a2067c5f13d2700b8d5cf59bcca8fbf7c6", "Expected": "0000000000000000000000000000000013edd8f016f6af49e9bc461ca14c438a32eaa3d1270a5acec99a666aba3f0a7e7eccea81720971cf4432bfa94cd18392000000000000000000000000000000000dbea5617e44c82da828844a5a4a1426d43422fd0158204a99f53cf9821f82f0bb0130a2123297a6941f695e172d9c5e0000000000000000000000000000000005f65a445e9f2d57dff2b210209f9faeb1c8b446454de4724d990aab20bd68362dd7ceb5b95de361c129855abba83f7e000000000000000000000000000000001219ecae79d62d3039e642369353993b1ece049331f06be256f06b01a1c3b0c617221c8d8f0bf4b6a0abe1191a3ee8e2", "Name": "matter_g2_add_49", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001468cb35a60898ed129f30c261b8431df6a154c250ec16d85a22f8717593b2c21853d123da86d977a7938c5ed74ef23500000000000000000000000000000000011f4e28e31b5f9e6877192a5e632d8c1ed7ca0c42e6e9902ca68f1c2de0f648c6064436012c5c7b14bb8d1078e02f2c000000000000000000000000000000000b25114b2697ca7eb1e6effdd1054893a188fd382d387ec098f846c1137a9b9baad01653b963a0b0bf3cb50c3ce3563d000000000000000000000000000000000c1d241cb03e642c1752b1e1886472477c19a2801ec032dc220c3243952f882094119bb92b621b654b766bc900d2d4f7000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc500000000000000000000000000000000192f3e8ae2588f9223de77f5e872115f1edec96d6a0f403a47879410c2562e79853c9a706e423b83fbf3154234edb6f80000000000000000000000000000000015084258d58fd1a07bbdb2e90df5a56ae15a787037eff4fe55f660e45f04820c6fc8982303b5e82074cf0cdcbde61307", "Expected": "00000000000000000000000000000000158da32df45fe3e9102010bfd7faf3fde936bb8e52f68262ef479ee825a0d7169ff753aa042883a5403103a9bdafd2be000000000000000000000000000000001800a5776a47f52d2af08144364a6cd7442a0e2fc214a2d8d285a29bb7bd3a0293e89f0a1856223a527100d0abf12899000000000000000000000000000000000a6079d18ff3367c47fa61a57a967b782f3529bee93f452ecebd4f5c404b3e1769c100da9b8aee4258b5191ae1dad9a90000000000000000000000000000000011d3188a927e8f13aecf7f8637be6ddbbce309393a94fef77923c286244f8531d3e137e031d8c1af829891425afd53a3", "Name": "matter_g2_add_50", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c80d4474390fa791ea5f2f16b41506d8ae13ee0993c8d31a07712687298ee7978a724999500c42400d2f788a5a36067000000000000000000000000000000000592705cc5a8875750a4e6ceb42aa3bef5593eda9e8212702a2e08ea70277a2a66526bc5237be33c8449301544da35e60000000000000000000000000000000000facabfbd15284c6433f17b0e6035d4fdd84d3ad2dd30a27d52809652ff6e7a684d7724697919100567ad0c3e1a26320000000000000000000000000000000006a0fc4e2af69ce15a356656f5d182a2cf213d76a6047a05a1a3375909d245f5316b91333d2141c0817438f0d87bb52d000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f000000000000000000000000000000000477b55bd7fff14e0d1807bfc21edb9481be01c12abb1460d78b1aafe42953730167e32e694c2ddfb0d442e8cea57d460000000000000000000000000000000004b884c6ea36f189dbc3c0e9cf88f08baf5d868579998f63b752e61fcce3cf2c901bb9b51959d3597c4ef53cff41fc26", "Expected": "0000000000000000000000000000000019294d87be784f0f8fa29de80d45a697bcb694b32f3f6d7641d4b08d8a7ebdad0ef78ba5ccafd6b7f240e1cbde019c51000000000000000000000000000000000645f7851644e1e7e255d0b3dca769b987ec3ff2c9eda42cab65dc39be2f9858c31f307d59f6a2caf9dd932d873d2b08000000000000000000000000000000000e8e93f39ce05a11d40f3b52262980c79ecc52939dd02b94df3e5034a57061d040b0c8894189f4626f37bee485712dd00000000000000000000000000000000001e0b7c9c3d7456b2c0ad842083e9ce2a00da91cb1aaba371ff4b9370f0f2c08f4b53b8e5a3030c99b2957cbe5f9e967", "Name": "matter_g2_add_51", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003f629618e1fc3018bb836301ccdc59022f0a25cc9c5de6e4c31fa08feea525c83256235e4ec8364e77e5df478f5f62c000000000000000000000000000000001120d6af221ba6f4351bbee4c2c664a769adb17872646df2c408f70c99ea991ffced4eab50fa98be1bb9426915f125930000000000000000000000000000000015cd16b028ce3d58b10aeb84b783475d894ab3f0cfdf7104ebb4f3417a038107128f07518dce548271061cb8c97e88af0000000000000000000000000000000018379875b68bc26107f9a068e5034f29dc2ae7e8830f8e9ecddc53fe7991206646cda33d37b31a47a977b46be58d761800000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac800000000000000000000000000000000183b7b917aaaa94f0ea9959273ed4701102346be2a9d72531bd18fef908ecb0579a6ac10ed42a91f1147fc3a05b2e81900000000000000000000000000000000070983b1582a97d9797782e4f960a298aaa8ec509720495acdbf176d8ecb9ec9e041c2b5ed6b7dfb46fdeaae3fb34150", "Expected": "00000000000000000000000000000000040f355021ba50c9a3b2b4267668ac8d76dd88991be984ab5bab9c96faed6dcc6e8eac78ed29cd6f7d687dd55cc5d5b70000000000000000000000000000000017853cf0a39332e3c7d75b08b2940d693ac7cfdac46719787c22b55a2ab1036d6f95b68075f1c585942843aa486f17bf0000000000000000000000000000000008696feb333417a7262e8976d1546b6d0a9d5970095485b18efcdee8993b16f42e6dbfdd08d30c45fe4af6a5e203de07000000000000000000000000000000000ec26926720243124ca505c0e04923f3cf5eeca2abfdaf4388960b87c6c1713fc54cdd1c825e2ea359cc67b3bebfa2f9", "Name": "matter_g2_add_52", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000036570783711b381830e35878fbeb187b84884a9a0e88c38e84124515b470e6ac18157e1499026b27f4f731a961eaf330000000000000000000000000000000008382838c18d56c046a8db495babf8d14c915622d7917ebe10cf7da7ecb65f174cddb9e70d0262ada961b396c5511b410000000000000000000000000000000015f63ce982aa581dad5c71fc79251b7f6336c4e78a4a0f4cb6f87167cabd31cbec987d7af4f11dc6d693a0b0774864130000000000000000000000000000000015c001372fe0530a3f50fb8b30e75ff4b264d673e0448211d082c7a9018f583b4d01790019874596c59c68768cfa3e69000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b0000000000000000000000000000000010f7bf9f6711ba723bb71a004a90109ee22be6643d56d410da18103ef44a1b3d50f10c4b94222c7f05fd3c28acbdc8ee00000000000000000000000000000000007af41f09e6d0adcb1935d6a93ea1f6156fa0157a63f265a3a7ceffe82f6635b8511e7e8f21e8f3be7a73513ff597b1", "Expected": "000000000000000000000000000000000f3dd56c416db1c06fd27e18fb852c9e1662fed42005e253230a7a8f7c3e0b8ce637666e1d20952c219cd2068d6865f1000000000000000000000000000000000aff045afcbefcdcb5255805a86e8af3de881e5482188c487d15ad1b799cf551c1d48c7665028b05ceb2e82e15ea4ae5000000000000000000000000000000000e0e6ed04926aed1f8c6a4e13227bf2a99d9d6d349a9c86214373be693db702a0011b4423defdb7d842bcb6f722c70b100000000000000000000000000000000148b1af285c65b12eef498f1c9e57a673e7a3803088c56e32aaae13dad3977dda8d3e27809094f8d8ed607239610a1a6", "Name": "matter_g2_add_53", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000074d78cdd35ea17a3013e2301fe9f80f2d20d270a25fdead37eed7697a52d152612543781763e6035fa5452ab12cce25000000000000000000000000000000000e572236e1c203a1c0f99e6ec978458c1a143a6a650eee27cfbe406bb2858fe5f30222f468d119703c2f442bc644ff3000000000000000000000000000000000125384343fe132e16a9fc15efe1b3a9e47289e0afc4b44d492e33a6216edbc96d66c1ca66944a8296e7695f27f414c5b00000000000000000000000000000000084c2cbf0d7c932c3098ded7c70d4411eed882feb0f79e0f7f1c31f5fccb6d53fb57de179c3ba5754bc5e532c3784df10000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a0000000000000000000000000000000003a6cc74cc398f38d535b4341faa37c968daf2009c3f05ace1f938b33bbe4002d81d18d30c2c856b21afe7a22b83c37a000000000000000000000000000000000452d1b2da6392f9df1bfd35e4575c565333703b2f83f56e0a88a0c8195968c5321296b07f6750584e23597304a5472e", "Expected": "000000000000000000000000000000001220b3da7e7d03823458bcdcee82db56957e5aec335e9b543ebb0f3cf4fe3cf6ecacb6198c886b9abbdaa42f528b4963000000000000000000000000000000000138233b166547e9e9ee9d11048e2d2579b2b111af5cab372d36159c4c45e28d836d733a1265e8833da64f461c0a32cd00000000000000000000000000000000005f860a0c72034f1a928501d9f549e5c2a9dc72670272fbf35a0b301025c0fc751d55ef6fc2c5bf7ff42df7693f3dca0000000000000000000000000000000012c73105adf97bc0dfec1f56153c57c6fdb9d68341f4397b72f5b6c667873ff7ed5cc841451b391e33290cec256395c7", "Name": "matter_g2_add_54", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004d46066439c3ac559cce863c58316883651023990180470d2efd06e443a7caf3a514b54f15ce6e850d32779215bcf4a0000000000000000000000000000000019ce904b6c9c3de59f7d5017f60f1978d60c564f94a0f1964c24c876d1139a7ffbeb6d0d4884bbfaf5f2f189af6904a50000000000000000000000000000000015f1989719e69be95f25dda9358fb98aae2819e0deb7e2d291e2c01e85ba26a9da421896c6b6e2ed20f609b533154694000000000000000000000000000000000b287cfcf1dd7c6d735c1358dff15393ddd6c82e7a33c5d8005c4234cdf823c76a4725fd74cad74b3ec51df67f09af0f0000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf780000000000000000000000000000000007a9cf48dbe005c5c59b2c731cf4117e5fadc9cb2cd8f486f1ed58b2909092ee8f36d88b8f719db94715641b418ab4240000000000000000000000000000000004ba40d4766b91bf8da1cc2526f62791a1b5f6fc24ffc54b522dd30cde2d29a6a6f81e8429d518710843d43705f3b4e6", "Expected": "00000000000000000000000000000000014933a0923416428b5fe5be7120bf399ab62ca091b07d03da3fd2ff080b9c411c3cda3bfef40c8450ae31c412dc5feb000000000000000000000000000000000214229a73780d4f260364649e9eb2ed751ad3f687a832a3738ca2cc81a3acf12757651e88c4bcd79239bc0b0c40e5a6000000000000000000000000000000000548f20fa375e578084e085ee71df5f8ddaec1db03a1415938d9521b5d9c914b5295835fc07263cdbf49d7802551156a00000000000000000000000000000000063ecd9efe55229a76fc848728e940183c23bf47363cb34c5a49837e6df8a5f0dc29d7108cd10ea08e82ccf017d246d1", "Name": "matter_g2_add_55", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000006b37e2226957d639fcb0bcd6c20b3c7b8372e7347a14b970e01c67c1859fa97c754ce588d0f835ecc053549d963ab4000000000000000000000000000000000c6a5fae8be3a32e3f70a4202a1ab6d97183964b9f7b9a084c49922cd9e0e952b0bb66c5580f0e0c417e079493bcdb4e0000000000000000000000000000000017b6132f11adc0d5d693ae7f3a0f89f5779708083eba23e03b0c9265e4e60624e1fb6940e8ee49d31618fa6389b1b50b0000000000000000000000000000000000a45c5f6df71359648aecb6434bad1619c39f10e279a02b3cc9725d0256bcd126843fc9ed29cbe02a32cbbe79774a330000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c7952820000000000000000000000000000000008ceb842a17953578013ceee519a28ef1b37f73e13564def5ffe08a64dc53aa680784e26138176c89269477ee003d16700000000000000000000000000000000159791b6f2c26ed611ca40bfbd2059c15cfec9d073a84254ad9b509ef786d62d17fdc67ab13092cf0b7b3482866f4c32", "Expected": "0000000000000000000000000000000008a71a08d2c4e2ba3d8774dcb42d3e96c7f72d36fb3b880a4049b078d8257a7a9a51b0b34c093568baf4aa6de70e709d000000000000000000000000000000000daf83b5ad4b91b557982fc4b9b7dbed2998aa39fc4658ba671f5f27b3888dfec7602949cf626c9e6ef21171acb185600000000000000000000000000000000013a7ffca291d9ba8790ca0462c54c147aa22e03a2413b756f27583155932aee65060924e46db321b3fd6f22ff7f54041000000000000000000000000000000000289d7de10285285279aee024e52476fa6fca85550f7af183a161e395d72e1339b629c64127f96bc85858d80e73dcbe1", "Name": "matter_g2_add_56", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ffed009c78ba9af8cd33af7b7697ae4dff863bb92365055baedd2299b7f5b5e8abb84ed434f7223c3e309ca53c08aca0000000000000000000000000000000003b2370c837dd6291818efe7c9af62dd51295c418739ecc509d42c92e2c97d12a9fa582946e176e8153fc9a273140b2f0000000000000000000000000000000001e63438e8b4a0462cfdff64a281ab4a7f48d51b51325817139f8ee683484f8695f1defc0c3efcca81d5fbff06cf9c54000000000000000000000000000000000192fc391cdc1ed6ddbd317f2f366f2ce25ba27b8c0f09c733e7bc0c0697544399a3a4f1186d139a8f6399ffa88e89a6000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf000000000000000000000000000000001272c63693873e1dabe2c2739310f627d3d9b5bcaa615402c3849ffd8dfe72b40fea4a068064655f2c8f46f074e6518d0000000000000000000000000000000000161a8e5e1de10938e5bce241ae73d76173022127822d744b23e656095c28f2f8d142ceb48b72a1dbc36b6143f8af95", "Expected": "000000000000000000000000000000000a4ed8d613cfe4f5dbda1d0c6812d0edee45ffc2667323c3828f8ce4ab55c119e92a82f2c3d06afe3adaa4aaccc18f8d000000000000000000000000000000000fe10c5e185f3f8ba81c93754132d76e05eb3543d8aaa8a2d0c98833ce5fa9e2b84420d6e3412e005cf89d11f5400a510000000000000000000000000000000004ac5f8cc614e3833b3b6dd9eee9ac29501002ba9054554314a4c516bfc8cec870995e811f7892811346574f3c58b2ec000000000000000000000000000000000a6bed54d8ed4ccb09211ae7773c604edc6ce51a05c9acc94e8167026906d387af681fb33a40e72e85cb076e072db7d9", "Name": "matter_g2_add_57", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000002e105e0eaa418d58019a849b89accf665a94ffb0bdf308a11b99b521de7af8ddb150c0e3b2e9c54cf5456b6105bc81000000000000000000000000000000000691a3b3986fbe1c0ea22329364454f37f645d6abe9310e883b9191ce512347e074e18e28b88c2adcc76190a549b80b40000000000000000000000000000000003f3a37a763c8d0d99a3fe36923843a22cb0fa18ced48493b2510fc99afe5b7699bbaa6c2ecdad8aaf72969354f121a1000000000000000000000000000000000f4bbae00205f54eb10c83d928d908fbae342b76050e33c51b6e282e02b3c1f132a4728dee4ea95455c25fdfc112f254000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a220000000000000000000000000000000018a236ea02b1971d6e193a6eb92e1298956679d86864042fb6a0c36dd91c0e385944d779dedd0149fa8a1b3d6a07949d00000000000000000000000000000000048eac7d116b5a7906bce070e2b51ee7c4c493f1415abdb6fd2d35676036d3b741d14b7135419645a6906018e9d3f150", "Expected": "0000000000000000000000000000000004d145ad2575313a922667b897052063139eef8c61dd375eb055c4a5c52cfbed35391a85df915e1eea50d000b9b6bb5700000000000000000000000000000000071cc73c16a234e99faba9b04fafaca1a943f2bdbb68dcae0a1742acfca1f90c5f69464aba42be6c18be31f79ce30791000000000000000000000000000000000bf725a2f4d7d33c66fefeefce13fb5649a68a93fb7086c943a7bd5663b5788a5ceaad7fd2a219ade832dfb3c0022a5a000000000000000000000000000000000fef4a2610610afef43da2161b86b25a8f6e30ed90053d57f5ee0a10effcdd2af769d32ef6843804b2b6590f95eccb4c", "Name": "matter_g2_add_58", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009a3e98fe4a98582ce9f274965f376cb45e8583775dbadf626cb1327c1f8a25b293b97e7f8f31ff72ba7e8e769ff25ef0000000000000000000000000000000018e4785ccb76c4897087c8a4242ddc744c6a0a53a4a844254153c23d6f16d4ddb945252d13f93101613f4eb0b1e2b8320000000000000000000000000000000011b81d344eac04d3471b1edde5e51f31f97bea3396580839fa094db58cf6bee371bbdc045fb60c3ee5c6cd5d3f6d3c4700000000000000000000000000000000073476bc5b1d52ff4ca89c3afc099417f473543fab6e59cf9de8a19705dc4bf2a210b1e6de4dfbde035c312be0c70c5600000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c95384000000000000000000000000000000000003c96c6f20d7ac31ee7ca77d11e8d25ea78cdf13e5f4d317752320e059e19196f14c15b5a18ca712f3a7cc6f09be6d4000000000000000000000000000000000ebd71f61fcddf1652675f577bbaeec26b892dd954965b057ffb431d6e37cc5425a2a42a0059482c2bd75adb2a120b0b", "Expected": "00000000000000000000000000000000151ec7c35a67b878420e198ee7bf359d0668ab61ba1a0bc2e5e57b1b7b18838a015464f9910b659fb7d1e10af2801d86000000000000000000000000000000000511536f34067fe931c6e829e22443eb838f0c938eeef6f839eb322d72e2011dd1c33c504dd044e3cd721065d7075b520000000000000000000000000000000010c486f846242024f9bf40d805c8e33ecf1b44cfaa04455d5584db7ebc32c0d29e8742c61886d4ebae93f22c518ea87300000000000000000000000000000000072e184c836a853fd1153eabb1b645bd35ef72eefde4a52db169acdf2d8d68499398599cb4002994c6f4936de1da75ef", "Name": "matter_g2_add_59", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c414b95b298b9c673001173ba7e5ee3e03926f28068481cfa0b469ab556f8fceba9fd0a815180ae0b82c265fd4c6b7e00000000000000000000000000000000054a242c1cc1a9c710bc23305d09c2d613ee8eb3840b37943bfe83f9c1db456ab4436ad319fcdd8684db129d76c95320000000000000000000000000000000001683711c0c7f02e67374f190eed1ce6559479d6d199f43fb5b0ce7df7774a5cb21c86b3b3498855d9b69c5763acd8c4300000000000000000000000000000000062f87085dfec847af518bd71c078f994b090c3b27c6eaad79772ab58afa43993db52fb08649a32629d61c3db12c87310000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e4000000000000000000000000000000000174ffb89d7715866562d9882acb81ce40758644ca3e0decd546c8f5c349b24fce88214956e7540fac36bcfc105cf34a0000000000000000000000000000000003e06c5f607ccf1e2991828034fcdf91106295e7174b4dca21926169451ee58e737d535af45073e2378206e03c81c421", "Expected": "000000000000000000000000000000000642f215b772d17a3aa45ee3aee607321c02b4f7a7df3884259a25ce78c73e9536d46333fa388e506fdc79c708bfd9de00000000000000000000000000000000145864ce36521fdb641761be541a27bbd3f4797b923a870148bef1d5b4b0d463c0a7c8ef07954dad464510d836105e05000000000000000000000000000000000ca038e667fe68111b583dfaa95f88d3b9e46c0798abccd1476071435067e6c0e2fa81d25db6e1175e60efa1705538b9000000000000000000000000000000000cf1cb1b155e4ea47077c42a1a99c3f11f8b27516a808b5e73498ee12363652bb46eab7e55de93513cc2d6272f26a537", "Name": "matter_g2_add_60", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000083eea9b5b2d5ac5f7ef51ca889a4317322d098a408a741827fb3419eb12a51c07c788c2798cb37635e224e99bbc894c000000000000000000000000000000001312ec00f4b3a4305700b44b3f215779a9a8bfcf5b5d3a7f237a33c5484099ec9bc5c8537fae768e2c0ec62168f383d6000000000000000000000000000000000cf1d5d05d11e1d07074dd34211d0f00eae1df4dc550c55bd2fdafaffa1ad36abd5da30c5d3a5aa2845b1d95a5cb571e0000000000000000000000000000000015223baa9f2ea4b04fdb05b05bf3a94dcabc5e64189aeee39c380de9a34fe6b4253f5795f70bbe51b80e1aec1eab71960000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000b15d92f2301075ab0e3215aa72cf9b130bc8e1bcd9fa36375c4b9d7da430ae3e2b24f417336d8729f44542ee7f561d300000000000000000000000000000000197d90090501e8cdea28eb7963231f1a7b5f716cc3a086acb6e7626600d6544132cac943e8d5cefb5daf0a2f8d400629", "Expected": "00000000000000000000000000000000128c909854a20ccf9e8e396b617b36f233909a5f6c3524c93cc659d22afe0e7058a438a5ee4345bed914288c64802e29000000000000000000000000000000000239fc43718cd27855ee5450cc9be5be5d9bca8188c22601242a1bb4269ca0fe62ad5e12b2c65558cd3dfc89ea31205f000000000000000000000000000000000a0aec9527febbd35bf041a901b0b35e5e0d48a2d6d733bb557d0767798369a7ccf2f1c278710eb764f721821f9aeea300000000000000000000000000000000194931bad52daa16a648ccf1ba9a4768e5e2900fee4f9bf46ae07d1aa605aabbfe96684f5d2233c0b254cb4ad5517775", "Name": "matter_g2_add_61", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000011a960cf1978aa2ce1731b857fd91d2f59d4b8d7c6871ef6f4f85aeff549a2f397949d11a4793926fe7be37f3a83d11c0000000000000000000000000000000001954f056834d6e3b16043ef1acd0a47a353300257446e9a1db7e58bd0d7c4bc9ceb3db51ae01cfed9de99621e96934c0000000000000000000000000000000002e2fe460e71b65595ed93a0010e5ccd1a2c16fc4e0d345e7226c947f29720d2f3f54282f79cec086d3fb1999b9629b300000000000000000000000000000000060dd8a7ccb613f1521168a8a322aef9f84d9708a893f704f4fc9a19e2493f25620a47e0fff1bc1e212e65e92873b4f20000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf2300000000000000000000000000000000005c35f3372f1ec9845bd04ea722fbed2be1388abf59e622dd3dafb4b3af49bc5fba9e20235e7e58973fedf4b8b720691000000000000000000000000000000001111d18d621070509805d306a31c109701288fd55d4c0644349deb080c6591b6e852b4f7e009b80019513de7f2fce17d", "Expected": "00000000000000000000000000000000189ee5ac642bfd0b612058f96e63acb1feb6b4dce125bf0ea1e56e846775af1a8b0864d4ece6bd96c3b5dbb04e2f6c33000000000000000000000000000000000073d57ab79314e38267ee8015de3156f2c1d5dfcb6655a150b9ab4a3bc9eeddf7b37b3681c49611e02abb012770b3f5000000000000000000000000000000000cfa1363275c7bc5bbb9bb7c03e7bb7f6d6d365e39fccbe62cfe0bb93280527c9ea99079fdf9871abed035b62079856b0000000000000000000000000000000010048e4e96f26710d254110650de36460be2a8302badfc2da8b26147da498e4620e79b4329033fc3f3a9c99b1e12aad4", "Name": "matter_g2_add_62", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001472caba61c2f1fe4b1d0912b114c25de103ef4351668f22f3a158d7a347539a7b6656044bd490f036ca3e29dbdded370000000000000000000000000000000015f8cdf7786410b409f218164063c99e77d8f72f03882a6c9430ec725ae574547d3ea3cf30c3ad2c9c3febe6c30b1272000000000000000000000000000000000ccbbed85c2809433fbcf22d6490457dab800b21cb4de414c7dd1804a0bdeb7142f8ffbb2de921c2c9eabee6a6351026000000000000000000000000000000000a404f42c48e3ca408d3f92079b99805004da928f128206d8904ecd7fcb14121c7d9a9e7fb69accaff921315ef3d5372000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000000e7e532ee4b892af39f8a3db7a05cc77a6eb0b3d977c17076bac4a52d5ba003a0ac1f902a4257791a45370eb88426a70000000000000000000000000000000016a556050e4905fa74b5061e3874f05cc7a6c5b049bd3bb7c34adef5a77c393239a600542a4401c3e61978ee6515a30e", "Expected": "0000000000000000000000000000000005889133be5f447013d779f2b9b0033667c5af87e1c8a16d239ca3ed238920004d87e00119ded46658026c26988ee63a000000000000000000000000000000000d4ed8fd88f7e1394f2b5a65588bf1c461a292acafdb77703c2790ef249f2de695524293c826252c94967a3ea4a3a28500000000000000000000000000000000001b5ff0aa278c7e87a89d4748aef13b516c49b7dc9f7cd5e0448dc6fd860a7a8af7183a198eebe6c7dd549fef806db00000000000000000000000000000000003c9e40ed44427cc3cf886ca2db341ae31f015c542b857f6702d25cb5036e3e6abeb8d4bf9a0e203281ab85ad89ce0da", "Name": "matter_g2_add_63", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b52f05365c4df20a7290aee71a7e030615d1a2a971167884d835c24e756a0faf6ed0552341c561446c7fd3d5e887d830000000000000000000000000000000018718ef172c045cbf0bb132059754b62414097eef640a781db6ad521af5a24d78c622d9402033fa939f70aad0510a1ac0000000000000000000000000000000017e969e44b4910304b350b5d442bb6a0b71e1f226cb4603cc8b4dd48614622f3f4e1ddecb1894046649d40f261d94e030000000000000000000000000000000004dacaeb9e05b9d60ce56c17312a092cb988bff426b8a718cdff860186935507a06eddbc4a1a29e4ef88db83fc4b6e77000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d2900000000000000000000000000000000179c34ba9578d5ff90272a2c7f756794670a047f79a53215da69937152bad0f86576945b12176d3e13cac38d26335c51000000000000000000000000000000000dcc715907e4e17824e24c1f513c09597965941e3ed0aaad6d0c59029b54fb039d716a998c9c418110bd49c5e365507f", "Expected": "00000000000000000000000000000000093b692a68536b16913ef38c3bba7b19ba94a6af1c36a2e54b8ac1754a29c29882107cde142deb95365af00f2d1f537e000000000000000000000000000000001035e70852f38f860a1a04f33081e84f3ed17d83ad894a6800e7b8b9259067b755fe7e08d4c1b297c6d53064ab8209590000000000000000000000000000000013d38db0d8575131865bd7acb6cbe994812bdd8bc7f51b810bc382a6eb379d442c47be20a2c8e751fb08ccce8fea68690000000000000000000000000000000000bd114951193e3bd58cd0025e0b0c807ea073b1c1f7bb04a2a00771b6442e70ea20e1124572ef5b74d2bd87c93c82f5", "Name": "matter_g2_add_64", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019829d5799eed5a081042e4646d46fb6bead6d3b9893a4240867b25ed6af6a3e154514f244466d80e3b9311e060bbd7100000000000000000000000000000000156157a654db2813cb9c1b4da0a3ee192fad076bb2767020fc5fc00e967c1a35a367ffa375703e1181b3705ace9dd28000000000000000000000000000000000093385a6a9dd0ab996df54b23f47f4a49b3f379e11bc8331016ecee6161fcddd22f6d49fbb21f098873f1e17424dedca000000000000000000000000000000000d5b5b0f2ce81e755b4030b33fe3a8bdee38c2c60ed3b4a88bffb9207cb762c0a5c699ff424c000ab080d763abc5438d0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c853000000000000000000000000000000001643567a0f22b90fefee96c8e2f5851623384c2c68bce9589cdf64c933d494a8d805edce2fd18a6db80f4819391dd1f9000000000000000000000000000000000e4e40ab1969bf9f00ee3b984947ae95bf7b9579bdaeeee926638f9566f8ab26debb4c8d4009535cb6422b2c2ab7282d", "Expected": "0000000000000000000000000000000006db1eef1f614613ada8383e63d631484015224902ca38f58ee384a70af0a0575b0e7063675d2dd997ed8a140e2598470000000000000000000000000000000010d7b833f050f18ff4e3a8d0df227a9494dad9cbde88f68802b23e87387622a5333dfb7bcdcbfe2d4d137cb532ef4a150000000000000000000000000000000000c9c40ba972ee0be2823625a23345fe352d701cc8bf9a153d5a55c205ef1b7e5544d0a7f65aaa24bde8d77cb4c31ab3000000000000000000000000000000000402f170c4c3ebb9b1e7d64765b66ba9b8d45b2ea9fe9517626f38e00a11d180e1f8872bf80f6322bdf3a8dd90732ae9", "Name": "matter_g2_add_65", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003af8c25bdbd0dc1cc344d55366f15555709a74e1f0d8d7050cb6b487759db6200401b7868fca3c2ad26e6362a30e6250000000000000000000000000000000013f8b6ffe30f9a133fafe64461d305cc6b2cf5aededf68ba396d4e00df651531c750a3d94dd77bc5c6713b939b18fa19000000000000000000000000000000000dde97855d7728f409d873b83b6879b45ace5b73f317687fbf478e594a959ce21d4d751db646ceb20432e8311e67404f000000000000000000000000000000000fea997323cf29710cf0e3d44ce682e039d6cbda155e43c94dc8cefc5e94000de4b9525123b9615b5f1019a46ef37ad300000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000a27fe0a29c761ce29a731ead969b1db3ae9ef4c05493cc370a128d97ef956c55d9a500991b3e7bf9600383633778ebb000000000000000000000000000000000dbb997ef4970a472bfcf03e959acb90bb13671a3d27c91698975a407856505e93837f46afc965363f21c35a3d194ec0", "Expected": "0000000000000000000000000000000002dccab673b26be02d2c645c82a2c73290f0eb053e07d4f81d4d315d9483e57c58b65cfabeb0172934b9fbb52ad519210000000000000000000000000000000011c34a27c850fe319fe89399e7680064caf6dcbad171c3a23c45b9883ee06ccc3482b2b81e5777759ff81b16bcc1b0f500000000000000000000000000000000119adca3e2b052c045124f021fceb03c979e6eec0a270c7f4ab13674e461839a4d3a10fd48da4e9ae750a238a2649ace000000000000000000000000000000000fb5210677e1096cb5448bcda16646d6dd29ff8a0765c5aa51d83fc952a5ab8063aa96e97f33abf701cb8688c989c363", "Name": "matter_g2_add_66", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000cdf60e3bb018407eab162822468255bcffd54cad9127054bd1c30705a4ebf1afc7f539cca6ba4cd070b44410ec751150000000000000000000000000000000009a2e3e5993b6a7007dedbbd21737a8c0aef3ecd4607953c4a24bb3fed97ccae01ae1cec024443f300b570a66e9ac3bf0000000000000000000000000000000008a21fed19e9ec2a741ade7767b0c9f39b79c3fbe34aadc9eb3043583768d893bf927d26231759290c7dd9c4f158d5a10000000000000000000000000000000018eef4ff88d63149d2632c9db586a4af0606644b16c82fbb0a3b869f1ff924c59acc8efbfde7bc604497ff68939cdd0800000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000eb3f5d24d1a4f520032534f6f81a6806c54df33cbd10c30203423aa4f33620b474cda321e924802b636daaeb34400470000000000000000000000000000000016f004f1dfbf140de042e4f57303928a576d9064f2da5b3ad392331f5c43327c7d2a6fd57456d5ef58b54a3e5ec27508", "Expected": "00000000000000000000000000000000056489b2248ba672501069ab6742016cc8ab2af50a119239bbd3c0a4b9b56e014402b78bf62b2b37bf4645c3bd3d95b800000000000000000000000000000000046956432001feaba6d230da27a72e8db5c8eb3d52f00616f87b55c951217095f337a302562cda789e5714c4391ac27000000000000000000000000000000000172c2a583c9563fe02d43b2b767c4ee4e3990fbabe4ac536d64cfcf059f0e38672876289bc86915b6344eb398fbc4ddb0000000000000000000000000000000008915b0edade80caee9b386e4a560ff4b9dce33946ee992649466315786e139e3ce241ebbdfa7ee28fad7e6214e65666", "Name": "matter_g2_add_67", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f5d47911596c46c0c08cac5f5e7f6d0609874da4ac1bd4e0e59c393273a5fe31a756c7cfff2a01d19e79d209d7c6d3e000000000000000000000000000000001010f864eb6624132d4436d18db7f5b34727060dc426c109886be88031e3c155490cb3fb09e1fbccb7912875477c6d840000000000000000000000000000000005cfbf1c2ae1b80a8c7cfb2cefedd907b0552794f4fda101ca1a723b18de8cbce30eb54287e1847cee3f416cd8b45f2c00000000000000000000000000000000084fa63781f7eba9c7e911ae5866d485bc7e90603541c55d1ffad8b3cf7547fd57fb24b14002560e58410b828513e1090000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d0000000000000000000000000000000002a36d5efd3381c35ff4f361cd813a96c3e5185141c5985073b45d1319c5f392442b7aa6a253b7eb22d1b5052812be00000000000000000000000000000000000f745dd17966b6befa7f740ea360241162505d6269226ffda90546863d0fff124d8fea13c763cfb69c2f8f12b81d431f", "Expected": "0000000000000000000000000000000005b81843ef3f98c6a6686f1fbd26f77248497ec3d41aff4be5968d13ba86f86309b0ec4792d74220ad8ef147bdee9aa90000000000000000000000000000000019825376b243f3e374b6e9e7e51e0c969bc72b39cde1dfa09187a3c7c5c2c752ee16fa5a4c8fcf94464287419b3a3845000000000000000000000000000000001308cc0c77219034a9fc3018f1d668a41e6959476aaaa5461ec73d7155c6a68fb08e1fdf8140e18270cd338c266a83f4000000000000000000000000000000000fee2a6e245e3bb570c3b605f7ad805bcd68e9a1f2bb2282f92e2a2e83b69e275b21b923f33a65defa8c4224934aa588", "Name": "matter_g2_add_68", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000124870cfa469136c638e0cbf15802f2699aacb66d7e4c2965c6759dbca4b7e47941ad9ec37a84db1afeeeaa65a7418e4000000000000000000000000000000000d4503049a6a53536bdf41dd832a6ecf3f10554887da7e389cf940394e1d88db94369b7947436546eb6c6e82c48dfb9900000000000000000000000000000000053f9a6e1f05b67cf553073358009a172e2ab8b43572a974da1f3de85a29103b13d7e67b2a359297172d27dba5c61439000000000000000000000000000000000abc29f50ddc1c113c73700b9b9796890cbf48818ba981fdab2db27ef1c58f4c2e4595b99eae397d40990ce2f6c9317c000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000000397dbdcc3edf976e8c507f5e70299da8c7765772115bf8edf7dc9024050c2ed98746c2bf7dd4400ab1fb89af991e43f00000000000000000000000000000000139bd5f917f59e2cb6c41c59024c12cdaf95285f3947b80267f36e3bd2701f9548b561c49003fc5ddeee3fe7bc8f5b5b", "Expected": "00000000000000000000000000000000166414455bcd0e8e40397f4cafa9628d1a092beaef62d35211cf49779ba98df5c1d692f650c1fcf0893a9d4ae1926b1c0000000000000000000000000000000003dd898d0725ee899b913042da8566a1379aeb4dd5f0222ac784205b4e74f32858ae490f981801b166a01fb96266dbeb0000000000000000000000000000000019f0fe4f12b113b337361b977aff7cc7dce50bf37c2609b9f311ce340d30225de178999b73345ef49625518e52aa4d7800000000000000000000000000000000090bc07c6270901d706a8d28d512b07fd0e03013d94d4e43eafbee59677998bfb7c2a58aa93571fb49c35518b6331bca", "Name": "matter_g2_add_69", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000007d2aae9794b7a7de97f7146c0ee8415e09e56fd42535bce6773cadd6f7ac09c4eafe2e926cb7014377e54c703eaa9dd00000000000000000000000000000000172a4a33ccf99eb0473b2c44d30bd53159afae0c7706ad128bccf6258974d5e5761f9be43e618cdbd96027aede7fd5860000000000000000000000000000000012601bce2171c6e4c2968a3efdf1491285f9e4ab37cf973ab5c8e224ad5b40e1b6459ac89090c73deb8fc79fec7fb8e200000000000000000000000000000000112a6443116e6f98ab348e57daa3971b5fa506e40515e1611fbed3e7dd64c5c1e991e0d2539a70eb93e3da0f573d6b22000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b00000000000000000000000000000000197ed996d62fc0628d8ea4adee487df31c794e05e7c327aaa140c6be0109031bb763c5f84bc35a0597dc61e93d23a9bf000000000000000000000000000000001056c1f3c6ae36be26430d142d34b0e807685c79935496414e004cb85900d85a18454bde9c0f2650f19db35eb3dd468d", "Expected": "0000000000000000000000000000000019ce0f31d9ebaed0ea1d12d4e232bd3ad48373fa465af44f1c8015102b624d2f8330d1323fb2fec524e83de0f6699ad7000000000000000000000000000000000915d65fef96562ea3b76f3152aa1b8e445ef50fa66dc487ad0c04cfd7a33b5ee48aed919eb81fe83b1f4dca59b4990d000000000000000000000000000000000e4731ec887261f29475523f7dfc5d21cbbc1b883439701a33cd58bd24f5d447267707c2b60ea38b04510be7dd10d72b00000000000000000000000000000000146a679d7a81aac5952645b2635f24b96393529ab9571ecc1078c4c20a77e59acc4591b9f45df00428250c5e31b1a8e9", "Name": "matter_g2_add_70", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000030372914b83644fa4db1958831e9335c72ab7a811fb337696221a3290e4c54bc10c2225f8fdc3a9f62632ba2f1594500000000000000000000000000000000114205926609470b6022d24046a1997c048e6d2cf6043397892c967692161c0ceedf409bf5e1199a64eabb1ff8de23640000000000000000000000000000000017cdecbe73779855b7b94920d4bc8ad057ce51c5481a5579650df8a5bbc421030d2ac44568217c4dbb13d7c639760236000000000000000000000000000000000f194fa814bfa7396697bd812d9449d06fc61b580d7a86429fdd1ad376e21ceca139356d7d13964c3c684563675711c60000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f0000000000000000000000000000000008789ffe0a8676c6a56742a30a48e5e65b88aafd71859d704fb9f69e5e274ccb6942bc51ad36c5671406052aacf19df9000000000000000000000000000000000c7607f4fc69a25aff00a54369f213c4587404644358da4abf26d151dfa4905ba9731dcfb12e2a3f2c551cacd0f4e47f", "Expected": "0000000000000000000000000000000016790155e57f7103d9e325a1f3a64c0b8a1875365eaa0c01c515538b64bd8265e8392e755a2f7314c37ec09026f13d290000000000000000000000000000000007bfe690fc4ab166b29de35e341e8faec4bc3c2d4ea2d42c9f4166c0d748b92b743ba646c86ff9e570612c75bcd522a9000000000000000000000000000000000c11b9ccf990162b772099fdb4266716b11dcf46c5abd12d03caf222c571e2a9e28cfb47e11db05162967ad4b430930e0000000000000000000000000000000000bafe02785607bae144d9ef5391fef02b9f2fd5dcd436e2506bd40866d8726eb83c223e09c00f3b8895181c6710912f", "Name": "matter_g2_add_71", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015d4ae1521acf897344c3a76261754ff99742585af4a0ee86dc473a88fd408091404df1da9d8bb291db68bc9c07d6b2b0000000000000000000000000000000008ce160213875c661163990f3f7ac219ea295db5e828354864517ea8689ec15d35c6df78ff14cb276e0c97ffd7fbc09a00000000000000000000000000000000038a3ee211e777d6d6b7ca6c7a0d2130f1a071c030eebec412c3a0f14c3584e7c5cf15de254a8f141a8210a90249ee5a0000000000000000000000000000000019f7ec6b2fcd8b3190ab37a6e843340d3f3fc092f5772a042edbd5bdc967b96e8a1dc9e435b8463496aa1301f87d0e5a00000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000b060965391bfd4afe3271c6ddb91eecb8c7a60451c469d63bb178b1361617000f589c33c35b5deda2f072c6edf2eb370000000000000000000000000000000011c8c988379cd2b82cb8ebd81c3e14d2c01c09dde5690b97623c0876c7554f52ccbaa33d17fb0f0cf331cc85749340cd", "Expected": "000000000000000000000000000000000965966a8a463de1f3bc49d9873668e87f54d95612231458dc8b885681cee8e2835482b4bfc476153c41b206f427cbb400000000000000000000000000000000183639fa14dd74c33e8696496a3ee269160f88e5daca4fdc468724d9b6af8e7d0706867cdb1bcc608029b89b94c531a800000000000000000000000000000000026257fc32efaf241c7712b0a7e9f881763d8fa0711a452d9b71ea25e973bffd88433cba768f1e5b3ea15bdae9cb9428000000000000000000000000000000001527afbb6594dc0f472673606fb8f4797fc855bde4d308ac1acdaa26f19a70f80f2d2bbf3498b53b887b79fd6273231d", "Name": "matter_g2_add_72", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000fa7f8fbfa1d4ef5f001a451c55ed261dee344025e599884b29d086e15665867932120d33bee579d5eb1b7e6c7299f310000000000000000000000000000000001f06356f793350b17b47a623059a068800ca1eab6089c7c146182990063e8e23bbf40d95a42bf6e976224b680b75bfd0000000000000000000000000000000008807f6606d2302450bfd8b38fd4147b851ff59762c1ff48f9442c4d7b77a32c5e023821eb47fca839a27fde60e5f61d000000000000000000000000000000000c5b92f1ca9c20d4b6b11d794a5853824cff20d9267a20a7aaa4bed8bfdc728c4d4d50feb8f0b569757b97f473138db100000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000f05a111b41a54e0ca78c3a1fff3b80bee7c1505a06b9a4faf36a73b87121d2952cc4f4c4e0dcb6633cad12b0caffc620000000000000000000000000000000018daa0f9a2bb347517eee63463b9d6a5e850446e8a94d0986f2921bf81a9f7541e8fee9d7bbb6d9181021af945fce3e3", "Expected": "000000000000000000000000000000000018123e82a5572e6b6c62d5db07448838df9db7f7d15dac1adba1fd924892c8bb3c417354e838f706564a9ac282c2ac0000000000000000000000000000000016613fc38997d39b2761aed3485de4d7c273e8392e434185605e968ed942b9d4712cd0d538ed5ed1317870d0cafcae27000000000000000000000000000000000354365566b6e43f8b7f4b94a6343146f35ba3abf61a204e9c976b1ad1a90d4d493494c957def69ff270371c1c8d953100000000000000000000000000000000066adbadf1b69dd16cf19349c82e362be4a3768551599b81a4853ca524a24326e6c9dcc38b5a60ed6fdeb3cc4e7973bc", "Name": "matter_g2_add_73", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001191410ec6c5ff628bd25d35965f5e9fa7f3c3d8c0a9a1ee7ae37437a97c25e221110d892e2c7a0e9c8e386774eadb80000000000000000000000000000000003be30c25a18cdab139277232d8888f6d13112c9556895af8030f1893114d5845d895df9afe3c6f9ff7ffb1919adea9200000000000000000000000000000000197f6b4e38be0358a3f1722664c61e62587ecf5467f8aadc3a236b47682a75cb76bafb18a5c556b321d5da49cd4bfd4e0000000000000000000000000000000002e4ebf7f22d929b7421a600e67fa2e64a59edd87a2e2eb9dce1f06d3c793f1a812bcdd510e654d44fb4c1de8c64ba9f000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a9035050000000000000000000000000000000017d9e9e2008501981068cb0403e73c270d99defd468cc9dc2d5bbc57750a4a58236f8f7a8df4f8b607095b6a80e7de49000000000000000000000000000000000ebddf4fc74f25be3c358b72a20d1c093f980adfc943b898266592f691e11413c60151a0085d6c9aec8c2d329abbac0d", "Expected": "0000000000000000000000000000000018ba8af47c5cfa552374cb1b25ada1ac785381f2da0501f86c9e7b11cd4417e64095a5c4bdc2480ee10d215ae2296063000000000000000000000000000000000a2e09eff98280f6a9863d8b8faf8871b44650496eac1aaf90fc2b256f88e937101407d722c95fa76846776d4e6bf0dd0000000000000000000000000000000003824f5bf25fa4aec5a9e044703e5564122bec11da155c01ba8ab8344265516c1063983235863d826f68bac455327c65000000000000000000000000000000000ea72f8c6768736800b141b477610e37477d926acaffaa1951a5bfebb042c94c065e984a8812430153d529dbf07ce2bc", "Name": "matter_g2_add_74", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000011c6f1dbccde640f63ad7d40089779d01075e26269421b4ce12fa5341f58ee9110f17d08dc1052426f2d00da2dd70b4f000000000000000000000000000000000740b147bcdf06705971c113a5cc12fb37345dd59f2cbb5ff500ce2b347fc5a8199cb3007a871670d5093f28979cfade00000000000000000000000000000000046563ea98b5e85b3c42222d5e0d8481e6aefaf077a1b99f2b4eefb397ec846aa3659aacda569054c9c8b9b69750272b000000000000000000000000000000000812d887943506d68e3525ced9b979354539b7b14003a3169e0084c26326b92be67346920c9a99ef0f9638e8991296fe00000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000001fdc4256cc997934a65c68ab9767b09c7aad14b5765dbeedb72ab2429231cb333ab9f9143414359376d76857e8972d9000000000000000000000000000000001362f417875259b47cfd9e4c5feda52b949dcbf5b8178318428fd3e70c384020e58f515b9a24af5597cfa037d42491c6", "Expected": "0000000000000000000000000000000009f1339cff0b58b00a871add058929ffebdc58cd1bd8a9c2c965c63e1843945b28138008cca8bf7b7cc9afb69a11767100000000000000000000000000000000011f65b337710a4043e1fa58bb41d80d505e2aee434b6978129c80fa1b124db89e61617e89bc0e596507566f4a484e9f0000000000000000000000000000000017560f768496ed583b3522c4a013f8b96073197e5b53e9041db6dc935a266111e21d8c54fa33b7bda944a573f6e1f07d000000000000000000000000000000000168a0742af91f42058e6501e122b6fc50dc966c2f5981372704694544aaa68fba2b6483752fa2464526d5072f84d8dd", "Name": "matter_g2_add_75", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004c8078fe8567013e8d05a546934026cdeee7d485e30d739407db16fefaef53ed7bff0f9adaaf064aff014ac919d91c600000000000000000000000000000000107cc17f485af7f22e07cf14c5cad6368323f720511fc9dda677b360567f769e47a77f61274927ef9b7be48a77357ec40000000000000000000000000000000001487f0880a6cbdac33ca35b9b65e4ead9d8c2e9180c993bdb2052060325aff8c62668c643f0cd9b4bb1f06a3dc74285000000000000000000000000000000000d4b2d062e31fabe8d2a329dbd6417673a519f455739d140246f2b3e43e20f390088c08e545bf0419d796ac71aebb519000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000010fb029e35b3f6e156b8751415f180ee3960cd3bb6ba9b8e456715ec70b1ba1410b8bfb77998f744d3f462533b59e26c000000000000000000000000000000001472654d9aa210a41d74e3661e05a9eb6b292719b46aa65f94b6abd514bf05f679dae89d21008245d79a381b0d7f51be", "Expected": "0000000000000000000000000000000005daf8338637bddeba63c788d78faa622e014efb84d3ac1d655d15af06317fe31d1782b2990354bd507632844cc87f2700000000000000000000000000000000185550250e2d9eec798e8b8c483dc37e2a917b304a6036e8ee518a0738d6bf946d99f6b7ee352b1a259aa894d53a8e1300000000000000000000000000000000105a4865d66ed4bc4f51dc52ffcf284615593d573b6beac490c3ee8e08ab83a529c8dd062d762d1d70b9b3290b6e8bd50000000000000000000000000000000014f598e5d0e40090f29aec1ecaccbebbf2a2d6889bbb9439798924db41b70c0cacdcf1e8ff6906f61943e9a8a1ae4fb5", "Name": "matter_g2_add_76", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000811e9b0acfc10830c074c5a4d9f4d9382461eb523a61dda0b77f1c43b285fc5c1ef3a1fafd923addc9a6e904505a255000000000000000000000000000000001113102d015dbb509f0b8d0d0ebb4d3711c4f0e1e3d55fb0af247dd24be4fec9d6fe3ad73fbdcfe206891bcebefee4dd000000000000000000000000000000000085aae9e58fb97b96ca3c089acab7bdbd0c3adae141bf61075f5c13145b0d07113f1075dfb959bc7c2d3d3b3a06ab2a000000000000000000000000000000000bb5eac8125807c10270d94e5bcf278241d6fa82f68e41b5529b28aebc88870af55881db526f7bd221a8c4c0b29a1b7d00000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d7000000000000000000000000000000000520cfc8c536a1d4e685c4eacbc2000d70abd72e1bf8ce3839d79f5cfa069ed31aafb15542f23b8d1af678bab05a2d410000000000000000000000000000000017cfffda12d21c98b79ac31c5bb696783afb7d69c2bedf0fb070cf7714959db14957a4763564b65b7ed214d7b48d399c", "Expected": "0000000000000000000000000000000006b63929ce97554659ae731d60d11abe858383e39a67007877f68233cba8179777c0dfe511fc730448da3f1c4347f85c0000000000000000000000000000000016d4df414c287b0871c69f9745a9ae68ea3a1ff41ecd17d87623338bb8750bf12be52caa81537bacee06cebb86f894890000000000000000000000000000000007ad72c98e2428b90bead3616f1b31b26e978cd3f9b6b759ad53056098c18932c48ba78d3da112d7a738d7a9ba21d84e0000000000000000000000000000000010dfcfc53d0458296686fd7e0555593e0378d2cb176d456abebfd8322012bc9b408bb180d4237679985457e689131705", "Name": "matter_g2_add_77", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001335276775545fbb4c701beb57cb34312108c9f1d46b4aa4b09a16faf0e648b4e80848bf5e75ed8730715f0107afc9820000000000000000000000000000000006ffff8736bab41b4ee5681b741a81fc870e648001027161144254d04c678e4f954e9f191bd8b26201aec681cbf0654b00000000000000000000000000000000026ede90d14fa0885baad21f9631bae058573251cbef5757bb8cfad061f3bdc78834fa5862dea19a2236c014b0f1652e0000000000000000000000000000000009844d0cf7f6f3401145d8d720defa577ca46b49e04e39c4c139ec6811a574e7dd5ce3acd00d1ce9496f10dd15c6d94600000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000007f786ea1cc7cd69ae1061d6b914278dfc7ebe8a714aa8cd04323860314c3b4b36054169dd5c6c60e67bfa3902d216f50000000000000000000000000000000019675b09a4de34af3c6e79452b57b31b6d499200e996008a9e7d1c910ca0ad2a352dc39cb3fd7333182476095b7aeec3", "Expected": "0000000000000000000000000000000009b166f124b5b85875834b5b0c088ab79a2dcf262240b284f57722e78b6eb56a192cd32544c1bb93ef492fe6d7a6216b00000000000000000000000000000000189b9792982b51b13cc3fc1691e0569b6c8d998168d3a3376e63ca60de4b30a84ce8d04fb265bdcf73f158d8e316bdda0000000000000000000000000000000005b99948b635750040b5b59568f0e8bacbfd512db2ae52c5032cd23eac18ad58d83b8f78cd26ae979ce2abeae8e1f3c3000000000000000000000000000000000d0b6561a49c358101b30f714563bfefc72e0febea857b1ce78cfeb9508b0108c2089c9b35cd694bc8c0ea8afc8d047e", "Name": "matter_g2_add_78", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010192b925fca096682acf138833b12d96bf97c9a2e69e4266eaaae1785b9008f36082e23e2d42341427edce24449935f000000000000000000000000000000000d5b24a94adadbf542aa663114096bc670e1b6c99f3b661f55de121922452534faed7f68d6b431fcf6f3e379d7acf6b6000000000000000000000000000000000acdbcae49206b749d8c0d21017a33e689ebe26804d1fe7c863a2ea4210c3559805dcf73685702bc56e644b4e02614a9000000000000000000000000000000000092309d684fcdf44bfa321d473060dc2d8a8c66c51419894a3fbadbf1b56179c31dff25403b970d543f1dd0e19e56cf0000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000fbe421858e4109c51de57b77da4f9c4c1f950099532d9e30e2f7a8b8b4fb9f708cde1a497050d0944e089978b15321e0000000000000000000000000000000019f48a0bf0f27df65ba766a65e831a0801a4ebcd1995a6002a803f88aead1503b7c39fde8ef5c4672020307241958a88", "Expected": "000000000000000000000000000000000bbb59d3e6b0b4d86ffc89bbfcf543a5b8ff922f1999a1e06c501a734b19dabd54632132c865c53e5287f69f06942a58000000000000000000000000000000000a3bb94431530879a7fb46b317d4f3d65b5a790739b396c78521a20e1cfad9c44248c9576be11c70970a49a1914ceffd00000000000000000000000000000000198df068ac5d3cfb9bd6896ab64495f4b9933a72872679ac3a46764478f043e9fddf17a7ef85fb72a8dc1a722804198400000000000000000000000000000000155c1a9db0c90634a6d214e996b13252bd4db3a4ab84ca7456ac3e7899e6fa096904a90f1150026307a1cac8de00c6df", "Name": "matter_g2_add_79", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014441b14765eee30e8131a7ef62c3b59370f2f6f0dda20fb2a3654fa09492bf695de1d1a8f250bfde3c7d2ed805ffaeb0000000000000000000000000000000019d813f8be2519e89d42a9fd3fef09d44a996d6a4713a9c224bee10f0ebb196370d6231fad810edf9cb4c875f08357890000000000000000000000000000000001a5abea13e909bbefdb51ddc699614366f271b2f6490ac8efcca7759833f3feae11057ab1b9ea32311e7b6ea6de110c0000000000000000000000000000000003ac2bf3c5486ca176e34ec5212165cbe04fc9e8c375e3e999a31fe014eb824ea3f2d06b9cf8b86ce3a76960cf2eb4d70000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff148", "Expected": "0000000000000000000000000000000010684ea0303f0e76b60eb96c470e1f0466f1f2b073bbedc1a0c0df1d2f6c66d77cb90ef9bfa4fef6a6a9eff8f5c66f9b0000000000000000000000000000000010e7ced79bbf01ae9f65d26894c73a905514296f19561ab4d00c0cde31737d01e7b4e8b8e6050054a7a17e8acb74d49d00000000000000000000000000000000174f771a98e262825ff2db7571f5f5475007d2f73a2c265f24e2929671bd173596b8b163abd46b868a644dd464dcc7cc0000000000000000000000000000000001cbffc9bb3195672ea2d998b169f853d3d4b4e147379329b1bbe69ce76d08ad78f87fdd876af227a050c31884fda084", "Name": "matter_g2_add_80", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000598e111dcfeaaae66d1522be2a21131350577253a3f33bdd74a04b0bfba2940e73b62fefa8f0c34c4aa91b633f6bdfd0000000000000000000000000000000017fefff7d94afbeceb33714e9b5480c3a2f3eabf9d7f6e8507ae54cb65f69b21cd7d04d23f24e3a272c589f572b91864000000000000000000000000000000001652e3f5a99ba8dfbcd1f90de955ef527947642054be603c1b84b24bebb579b78e2a0be426ec21d32783a0e55f0178dc000000000000000000000000000000000a6c9ec91e8bc86ab198416cbc76239f0ac0b903f40310ee1f2066b01b08191538ca913c2736f53f23ef37fea13d527500000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f", "Expected": "000000000000000000000000000000000fa306f630d06c801e0203525c75fd6065bd12bcb3c4d45c7e02b597f85a53fae1e65a969feedca75068433547e4632d0000000000000000000000000000000004b1bdbc29f19f6484ea4648c70eaa47cf5bb07bbc255bb72dcf68a7b661de433dafb682d51321369cd3372288b2b9c400000000000000000000000000000000136671654b24e1ff2e8223ba747ded51f5c826b6e2c0f02e2865fc35d15045f41952835800406f60f966d1f241914726000000000000000000000000000000001007b5e8ed7f0d25091dd959d89732e9df02561a829ce013f5ad1adb8d6d828a8ce87b52d39fda1b5dc2b581ca420e22", "Name": "matter_g2_add_81", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000072e022c168461905f798e87425f2eebb517e473cef98c255d0fe434863ef5811920af65bc946b29d489b5dee1066c56000000000000000000000000000000000e7a9872caa82d191f6014c845e1b3ee4ea1ee89852b546a2c85ddbfa3c1d4ce99002e3d7732ccb8cfbd57d550285ab400000000000000000000000000000000144be65db373f6401d76e0ee64e51076b861e8fca596dd6a7f3b5735c23b0cd13248404fa0969ecaa701663a1032f48a0000000000000000000000000000000014c9e9c5cffc4518889f7742440053678ff1d9fb1a1a103d0c1f762b10655bd5849ce98f4bc5eae80bdd9e767aae452300000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf", "Expected": "000000000000000000000000000000000fb74d9ad4de11df81c48d10b9a14fde8353ac47dc902b4420be4c086332be480552e26fc42b7c0f30e34f740bf9a4e6000000000000000000000000000000000612a7e23bbb525f91084b122dd4cfce4074c9e6eedaa7cddb58a14e0b1eccc2f08296baea3eb3e003e576fab7c557ea0000000000000000000000000000000016dea145df47a2c5262893c273c6158ee14d44c3740981c161624a6e9ebb982a52c1eab6160c3849f2bf3821d953f4c3000000000000000000000000000000000e920661772b8b737f1a663badead0e89aec4cbb86e6dece5d4db8a673e75b844bfe81662dff671658cb8386c16a7f3c", "Name": "matter_g2_add_82", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000948d0f0c20715f8658e1f2b4f9d32d851e584287225a2f47735a1f4c241b07f8d7c5dd8c13bcdf84e97d49817d4d88a0000000000000000000000000000000013c064548cb756b48600dd535af8eb5b9138f984bac0391df2e90a204fcb6c36017df910031864d802a2ff719856b336000000000000000000000000000000000000b7eeb7c9a01be88e573f196c2a531635baecbc8cff9af385455af3757301436686596ec7fe3618af26953c49f7450000000000000000000000000000000001332f4dbd5461ab9e2c8b3c19c6ff407a071018c92d2c17c1d1d481c24565276c0f55eee8692016c1fd76d70f44627c0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77", "Expected": "0000000000000000000000000000000015930559743b21acaf390b557fb960d3021f3cde80630d8867a063d445f860c8a01037057de1929be16d879416b12a6c000000000000000000000000000000000c6074c54c83f717700f61c5b6bfc641502121b59b196a1f8c5f2945e5db1bca0d7a94fdae96bfeeb6204c8c3f4d048a000000000000000000000000000000000b3a78454479c0990e4c65e4f831606c7eeeaef0faa86596350c9e43e84ae959a0f32c8d03d1f631d9b2ecd046efcda6000000000000000000000000000000000aff797d7572f20b06bac75bcf8cef879df11599ba7f8b86eaa28692d1239cff22841b66e28662309e81a6a599e79ddb", "Name": "matter_g2_add_83", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d3ee70610b5029a28e586f0f3e65bb19a263db3438710fcb8073e1b25f83db50eb5bbb9d75cb20952a225023f747baa000000000000000000000000000000000682f7d5cf9d182b20ee88683f3915e8c9b03074a373e573aa57232de4e997bf155acf680e365aa0988989dfad102b2e00000000000000000000000000000000143962963e230a9154dc328f9583f5be6923a3b10ee7b1d0cd5f5cbff13913d8ff78ca315be7387900a50b94449884c0000000000000000000000000000000000f4f934b42452d41cc20d7b1ec547bcbcbcc10f215364ccf2b864db23a09d06e94c7a87165dcb691f4975323486757ad0000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee41", "Expected": "000000000000000000000000000000000351bad2f1fd9adc84280515c2d9e538b69dd63ac93514987ecace75d6bc4585199b742eae0d357d587924333721a1d90000000000000000000000000000000003e495b544aaf19a6415d5558170b8686968dc922367c5c8c212fa1f2785535fe0e71498b98b9a39c8b1f2384956170a000000000000000000000000000000000c7040f34872eea5f98ddc78737dd01fdafe75081cf66ad5c7c900674fa90257105b4f4fc59103dd5b92727a072ae462000000000000000000000000000000001312bdd27ef038d4a89b12c86281975bb34b435d42642fe0732709baf55e9a0ecc0ede8a4775a33e880aa2e1fa7b7ed3", "Name": "matter_g2_add_84", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005f0fd4080e26971ab16d33aeae04220ae23781da3179e38190082f1d167514bd73bc8ef976a2f333570e9f56a6c05e6000000000000000000000000000000000e159905d29b52ba61575c3a263093017783e1028b3701ccf060c165ba33a765b5265a9b1681c1759bfe2c9c401275e9000000000000000000000000000000000c5ac0bc29a49a7c37d772954da850e6b5e301e230552be9a94017d770ebe2cf4dcfaf104633623e024aef6db57892900000000000000000000000000000000002228e7f42a9409acab49cca82cacf306f6c6c29fd9f7e2ed12fef2d16383cdb7bb2b39ad598b301072c615232db1fa800000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f", "Expected": "000000000000000000000000000000000d521781f60198341d116fa5cd9e2b5c2fe51f91f6c8318f351df007c96086f6c3baa5cd2b9b4f442305695dd9b01ac70000000000000000000000000000000013454fc15b1d182bc98d75947547b3bbebef6d5e2d38ed7c67d76eee8da89ea2be19280af4760282fa7576412d5f2107000000000000000000000000000000000d866015c84de74c24dde252542d0d3823f435203c71cda140af235d88f3f4b736e9d75ec32c09ab73bf74083e76866e00000000000000000000000000000000147dfb5f53a9cc61b6788c911dd8649c09cfffbbba368c1872a31cfe3bd6d6427d7b00163d39f8e0b81fc4c40dc60b87", "Name": "matter_g2_add_85", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000180569ce03e4a0155285e733adb18fbca71225507a7adf01cb8e8648891525305e92087f58378f4fd8455d5632ad660e0000000000000000000000000000000011ab84e42f10154e306a568d7cf7bc381000f0add0500cb508f695a3b283ea69d140aa0ad48fce2d2d6fcafe60761078000000000000000000000000000000001136c3016474d6f475609606e8d0269fcdab9fd3188a512681cbc41eedeadfa3b3d9355e5b4503e8b5c3665e49fdf3ab0000000000000000000000000000000003f56cba1b9cb4302099b16b09c2602dfab80d1151685ef78e5054cd454b319adf8b5998053a5b9fddcffa020595e3bf000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c", "Expected": "00000000000000000000000000000000059fffdf2d79b4a297f6912e3035cf0b07db9372f3485150e00d60bbe2e7d86f45b5c2ef062dd92c7e8b1e2be5e9bd140000000000000000000000000000000016acdc57e7231b020268373ddc8b8a7318ead02a8c7181165ab045208409373eaf57ace9a6db1fdedcaa477c7a0ff6f40000000000000000000000000000000012fe630f7de8ef5a129b99faff2de080849bf3b59aae1af042c29b1cc49c8825a4f28c4ccffedc6d568f306416b5bb90000000000000000000000000000000000d86ab3e49ffdc7c2485ecbd00256af83e7f3f064d212ea91245d86ca75e3c7f28b42fa9496a5ccc0514cffc60c9fb83", "Name": "matter_g2_add_86", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004d79dab9eef873f3415d66172bab7166ce0c71f322529bdeffa915c1b0d3fcd645c91dd3450ba61593ffecb95edb91e000000000000000000000000000000000d611a207d3222bba199fa083d0459675cb5fa00839fb4c9034ad868fc1e79d653c18651771431d6fb6b6b5ce8cf6f7a000000000000000000000000000000000ce802ecb106a4f0ca4efdcc058dd0e29deb6a5d30a2c15c8eda896bcdd3ac19053c10105328d239b26c5ddbdb3a95fc0000000000000000000000000000000001073e142621ecbeff6f81453660362545751f992ffeec3a83477fed3e6215a709ffe0d17b65d3369f8f3913bf000e84000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb1", "Expected": "0000000000000000000000000000000012ba9a8fcb69d15eff147f663a5d7927b6f3f79330eb9ee625e0100b146597554debfcf97a3afb51387a73554522ed0e000000000000000000000000000000000a63a990d6454d4db6d58642eb3489f79e517fbbcabc06f2eaa00c4b6f9a07aae97991f169d90af3461b7a62db276e00000000000000000000000000000000000a95203a1628a6ae2551df832f7ab94ffcdbf985e4c9744e244214c8e8b8079af05a9321d1e49b7240c2bdeeb7b783280000000000000000000000000000000001ec747203be73526d3f943e0af814dbede34020144bf247eef9a6ac2cfc83ef63f18a73d3baae18bfd8d5e83d0519de", "Name": "matter_g2_add_87", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000bd84f04b3858b1138b1b429c7216d5d1b1e99c1e0fec26440d59b1ad79788c2d5583122c2ad769fcaa6d10d816a1f1e000000000000000000000000000000000387977ed1ce5da51dca230531bba53d17d3de5d593ec576cabfe6463d5164d7153025dbd4cb3525c4145c4f6b85fc76000000000000000000000000000000000a19c943a90fec6921367a2edc5bc38a5c59839cdb650766a2d2d068242463dd4460bd1d0e7a7fb0e3d2104704b8b3730000000000000000000000000000000011d99d44b200feebe00bd42809e3f67a23cce88a07165416cbfaf4db14420f99e54d62db4280d2c99ca0bc3dc41eddbe0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc", "Expected": "000000000000000000000000000000000eefda9046a950c232c6244a79c33e7135d0896bc57839a4f971030220e3ca8196cd0ad75269f3cb5586a384dcd17f9f00000000000000000000000000000000195ce623693996f5ce9e45b4e285adb969e6771e6b0701fb5c95715523c8cb93aa641583821a3b360ad6f4ea1aedcc9f000000000000000000000000000000001553a4d0f965d26fbaba56294591935bed63c84abfedbb9d5c61f3d43484ea71600935fe3c8b6b137d7a9074d907e86c000000000000000000000000000000001673c42c88e4acf8ca38680694b80458f988403a4bd667468506452303000d13649c4f610b738a94ff88b65053731c08", "Name": "matter_g2_add_88", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006a186aa584a466a860849c78e4922889c95a4ac6f39c99029fbb422c43d699a8baa51aa4ef51ff99557babeb3e9506800000000000000000000000000000000065fb15b5a0923bdb52dbefc7e9f1a898e32f17d610bac829235446fc5e1913fffc8176e0fbd33091505761f1d06d8920000000000000000000000000000000008bd358698fd073f660ed608462cfcef1da9a59b10905f1d98c4fe66958e56802814906430c10fc25a4d351d91f91cb0000000000000000000000000000000000a53638b1b6c6eeff468e099446300ca7c7bd899c6494682d14fdabfa9cead0bb37a0325d99e7d0ba6341cfa1d257ba800000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed", "Expected": "0000000000000000000000000000000007145ce58cbe48405392edda6022ba8942df055ab582ac402e7c9a0a951cc6a38cd147903f042273e736f30849996cd10000000000000000000000000000000011b457ba464ce818a34a11afc3c0007908091fb528836691e6eccaa9a23ea90cdc746769c4b7ec73efb1f2878413c3b70000000000000000000000000000000019ca519fa6a91cb7e83704daa9b92da9bb70b003f9e9bfe9f323430bfec9b19b01005aa9fcd19d5b1ac59dbdab0c0d84000000000000000000000000000000000ae356f5e5de0d7662bab8d947662bf87d792a3438ed477cf6ed4b27c935b1dd76a5aac446d4dc36db544d4aea40b505", "Name": "matter_g2_add_89", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001070b98c6348a67e996626ec2752f45e4c007e9c9668459a777c03fab633c10236a1c5be99f3fd950542d5648ef9e88400000000000000000000000000000000073a564401cb1a3a53334c0a55da261814d27b86ebf40b02a76b20973ba2db92e42c138ca7790261c2d70401c984bf470000000000000000000000000000000004212d8a9e4b01f5c6814a88561c2c6143eea61327b031a2e0e4bd056c12dd7098fdfe4d1511bb441ad42b55b584a7bc0000000000000000000000000000000005c5d23824b0fe05eb962194550681c57c1566b315efa8ebc90b3593d7d86ad18328baab8118c9f47eccc0757588591c0000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c5", "Expected": "00000000000000000000000000000000135c42c10ef97279e3d152b18cbb8dac11ca8c805dd1d80818851424f592e7522589ec7df6748b5c72d0808399e629cc00000000000000000000000000000000083ddf3843434937e05ba9e101096371fd8fb34f226bcd517716200003ab9855f7aea94980c57a6b933494cc57afc562000000000000000000000000000000000be9215d936a49538442189c9a0bd3be07d4b0b1d14aa45afcdebc1fde17d33b66f7dc36da1ea5411549577f5a1967ff00000000000000000000000000000000176a4a4962c4af75a712e5093ec2cd5cb5c0433aa0657809dffbc0bc02b1ce303ac084f39a5721d482d41412d391317c", "Name": "matter_g2_add_90", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b1b3053774ad5515a20bd4c556d2b3ba95fe74fd0c955069c7f933dfd718ede90ac295f5a675f1c29dcd9701978353700000000000000000000000000000000145746ce88686021a0635bf6f0aa2f77c48bdb364cf4ffa804a57f95bd69d24eead05fbee24021c1ef57e1c7c7b894b00000000000000000000000000000000010ec4795a0762b86f3b83de1198698af67fd1b1be3ddef48f35cf82bc96d886fbb4c75064f51a9cfc5f61630c95d0ad1000000000000000000000000000000001465e31f58892466b8ae4b76a239d9f8d1ecb1834886344013cd1df0be13591798868d224d38213a6d75b02a1fde0ff200000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de", "Expected": "000000000000000000000000000000000bcd916c5888735aa593466e6ab908a05af528f34a7901fb60feb1f51737c73612436c192dfdecf927019724ab2a9b7900000000000000000000000000000000187d4ccf6c22381d0c40c9d7820ff8efe6298c6dad0caa25402412661737cb482dba2719c3a50ec08cd022230952dfc600000000000000000000000000000000164510d4f2cf1e14e039561f1baf82bea678d0065e378d5bb7443fa782e6ab2a3bf7e4ea125d6415a8277c60f5346468000000000000000000000000000000000281f2e28b73eca4db9966456b75de9ae3830c74ac928fc4c36b4aeaaffd47ee587d948f68056df2826ca2775415a53a", "Name": "matter_g2_add_91", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f39e731e6ddb7496448c912ae314e833d28208252c7f8e27bcf7eeaf1da6e2310538b4ef0d55401c6552e91fd70691600000000000000000000000000000000069d3612f924961f827497028737000513548ad8e104acee28f014e730d4752a583cb9a893e6169b71966a1c4a4ad2dc00000000000000000000000000000000090899907edcbd336bd4fdad0dd67c578ced4481a25b864b32aef920842689a2c23265277a6e1d4a1dc1b5047a9f79a000000000000000000000000000000000055ba64e2502baf68e46c759fca30247a080464eda2b32e7cfe539e545d6aac6dafb731c2c45749e50513979cecbeb5400000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157", "Expected": "000000000000000000000000000000000cceccfefe04f94e0b67b29b5df8007930665006cb5a59504c3656b8c0bfb52324cdf50fa2722ce15b0ded0efa7fc85f000000000000000000000000000000000cdf34c330c0125f524f0711197639f8aca3e7c435f8c5ea30b78e9622c4bb72a7e584980cb4c3c6ecdd0689daf36b6a0000000000000000000000000000000004b1505d7fb65f6c06ef23aef85b16f3d991218187c5782fb635ba805da463cec9cfdd670c53d680c603adb827a4460a000000000000000000000000000000001104af6bef6482ae64b3b6b39664ec06c39bc18fa91b7b4e5bfcd444c827bab30ef548b28ef5487582d88fbc6d7983cd", "Name": "matter_g2_add_92", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000042f1c8b9fe81cdcabea047d0998a1354ce09d62a14f1d0e9d188e2f35f2e1845c2b090c5e157595b33108c67e6c184c0000000000000000000000000000000018e69d3564d4ccc0306e1e6b227b0f961aa9afcad59d4ee1737f980dc876609c59a4c6a3506f987467beba0764b857000000000000000000000000000000000012ce5883156588cfe0f4838f819f985b09f1eab40a5ea8e30fc5d70d029a01a4537641248f4c21dd203909e0170737c80000000000000000000000000000000002888eb9778a4045feb5899dda258657b9f41345731ba630fbbf186b3be4b58ffc7f48abb65b693b573a73f85440a7a70000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc0", "Expected": "000000000000000000000000000000000e1ef3003fe3181f690224cbc7008856e1251430ce3cff56a1965c89a892604398f5101d1bec7ff1590b0cc3d23b854600000000000000000000000000000000185b4d4b5fd8313c31542bd1bac034046ddc705b41a034a00570181503a6ea4c2d808bba0478900064270fadf3d655920000000000000000000000000000000005bed63ab9898b89f92027c04ba256569e6285c851753e12760129c98899bcbab34b62172906a1ea4cb056d4d0a5717c000000000000000000000000000000000961129a3e212c7412018d7407d7ad16412feba8c138f4f6ba69daa1a25c6b23f3466bfde6f5f0d09ab67248a2abdc68", "Name": "matter_g2_add_93", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000051982b46a819c74105cb36da871fb2415328a1531d155856f6551bd043eca62ddb61f24af429edda830fda31e22cd340000000000000000000000000000000006449e5bcdb5619aac542f6633ee3e06a4fd56a3e1ce4034efc608131ff6ead70ca63e70f494f519d5c577ae7119c8c200000000000000000000000000000000153f4f5dddd5801fbf7f88a735b9170d24d5b63861d50cde9644579dcff277cdb0d5fbfc3b3b819a1172de05afb9135b0000000000000000000000000000000010fdea84983fe6c08cdc4b4ccd462bae2ba791ab5209363b10b3ef342c9a5e92184e9d8be1419e3d88402bc05bad5fa2000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc01204", "Expected": "0000000000000000000000000000000001504c47ab0c410b32d5f1fe3d3996dbf1b21c5ef5aa3a2862a9d561b419f818f0b32b8e931c65fffc393ce7beec70ee000000000000000000000000000000000217e9fddd2551a171a13183ae3aba6bc5ce99e8f3587b92a7cffc738b478d8293b8c71989cabf9a55c5f5077249345d0000000000000000000000000000000003874de865d93650a95af4e153fe557c45bfdc4837bd6e209b8f05ad12b8fdee6432675cd92fd739b7e98e56e7ef16b60000000000000000000000000000000011303c0c7ec1f434cdf07c110da5f0bcd85935c3a0ce9fdf5546ca61edbc2d478562dbd9aa45a5f8d96e033feac2fdd6", "Name": "matter_g2_add_94", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009b011f793d9a939d916d058ffe91b58138820a646cc450389b3074ae3715d06ddec1075afecda71c65c7ca085210c740000000000000000000000000000000003d4d20f4b93c1e90a0a06bd534d8b4fd64e4c4aba77ae42cf4c5b2bd95f8b02ec4069ea246ff46404e6c9eac632fbac00000000000000000000000000000000051e88c3adfd4d6a02d3f03812362a6cfba3a6c69b9aeef75b51106cc7f1750293d61e31f0ea29b5d7aa56debb6d2aff00000000000000000000000000000000086d9c4ea6769cdf49ffbbf7351023b4aea640e8c90f9291222fd0b5984bca4d481bf7e10df921406a34804e6a09f99d000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6", "Expected": "00000000000000000000000000000000101ed22b16502de0d83303134a97db17ce956faedf47256a9ac86004bcd3ed112a71328a58f98a85977a7f22eb1352c3000000000000000000000000000000000e841a88d10493f301af54c5fe07a31ef90de106a6c87d5631b6967fd017f561a56176a5f3544dbb34b9f94040ebd2770000000000000000000000000000000001bde3c0076f26973651cedd3da97c7eda24451bda856026d1e22d3b65c66a3fcbfbf506b4b664b5fc06fca2d712d8a8000000000000000000000000000000000ce553ee3b7d5389798cdc5af8569aaf477b5b74ca1138454dc61badcf3ecf5e0ee8457e374b5735d0b8408b04fdbcdd", "Name": "matter_g2_add_95", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010d48bf523f3909cf90aa58a9517ef5421f1212accd5e8a0f830aeb15a587e215ca9c340bb846b1d0474e43840b2af79000000000000000000000000000000000cc1a3976caf97b9d59f448f6d9f413eef8904f360c0cf912fe942b38d7fcc637a17038973a133608ae769d3e389b18a00000000000000000000000000000000069a6122c6f0ec68834b7617c755a7eb33a80a25acf95859da5ff03316447182f122d20d993b04e79b6fe859b7adf5a8000000000000000000000000000000000058c6f8c297524319bae6722e0a957d1ba0f75ee3a8aaf06148641c67925d15780e419a38ed7e07410e82769da74f2d00000000000000000000000000000000030dfbb89bbe5c14a7a55e68edc4fc38eaee9fb539a6b2f941264c7dc295da5712b0af0f2bbcdb74f785dc9ba038b0aa00000000000000000000000000000000132b4e02fda605a69251a4a6289c47536f9735dd90908ed1fb619b3ab808b3a1f1ca3fcc8f4b35c9864ae311c15747f80000000000000000000000000000000005858ece0bb09e55e012450551025ad2a6d93a15d29619433742851a62d987e7f8bfa6c6faed76493a27060ef5f51805000000000000000000000000000000000dd6b393e6d1b8d546e3f5ce69bc1737399e6ababc628f25734030e10d82b5e9370edfb5da15566d80e23d2fbf8aad5f", "Expected": "00000000000000000000000000000000182f90f5d3ce3f5ff2d91430376144583247def83b3e83524094d57c0f1be98b1c4946964deccc25fc303d6450edfbac000000000000000000000000000000001844806f711735c5ca18ca48e559a9e327b87b91d22a5ef161da7874668130e21a9499728fbc2c88366bdb59f8ced0cf000000000000000000000000000000000815e7cff14b4ceaf26d1cda5c267f432fad294b6baa239b65d886ffb039321f9e24330ae738a35298c6d1ec1ce1c95f000000000000000000000000000000001188a4a2f0920ddeccde1a47a0636aa7c404fd77fb9c828e4fdb5406df80ee6c258c2d4a89dae5e2a2b05210df9100d7", "Name": "matter_g2_add_96", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000156ca5e80be8c8c03a5506ce9abd22a9d4958c372678c0caf6f1329898507dfcb1f06a9464cf080bc6881fa5b7df1ebe00000000000000000000000000000000088174d486b4086b931010da298a399e15b60a113e08f571e096d3a4e94b57b3a684711318796eeca9319119b201abb30000000000000000000000000000000000b96ff68505c088cc03a1c2dc363b05bc8544728a12b29569bed137780523123eb17e68f4632383c252d81bca0c5ca9000000000000000000000000000000000486fc6e5224c5fad56234c41856e60bee4a6c1046f673bf7d5c1bbb603b141fc91074da5f9d3d41b796a2ebcebd9e740000000000000000000000000000000017032b16be8656cf23bfe0abc8c9e6aade223fa9bea6fe25f95a025da79cea6adf38536eae3859b25ad1af1756b639cd0000000000000000000000000000000010975ed27cefbb43bafad0fd14c87ada8e84525e1d199fdf1e77caa0b718214b33e547a42a040ee3bfd51621a20d22fd00000000000000000000000000000000133d29aa41f92de37523d281eebfe91103f017e5fb390f6bad9a2a4419fa4702bfa04847edbca1da96eb1ad563a92c8a00000000000000000000000000000000014af850de7e800ebee4be1a33c7e3b30aa94106db7defa148568ca3c8d82edc97ab5769ac40162d3728687cdac201a5", "Expected": "000000000000000000000000000000000cf42f2ccff2e0cdda7e5f1d7652680650b4afa523c8f9a554ec18b905c837a189fff73982cbccf903ea492ea902b87f000000000000000000000000000000000d38219770f669557cdb623f2476b5f3f7478422b016123bf86a17bf75848548d1a1ce96a292637b8d52481321d80fbe00000000000000000000000000000000170d8722b824e3291b570ba8e4f9279c1dccdefb95cb5b7a94d27ad8a93513737f12d18ef3153c4e12b530bc457af34100000000000000000000000000000000021aee9e5f578328caee3177a4e08303c3b5533e288dcb75f94992db3520a6da16f4201e60367240b29c48d175942cef", "Name": "matter_g2_add_97", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000121fe97c62e068988ebff21d8129d52aa903afdbb62862c7fd99564d9ad72182ab1f3a1100223ae486cd76f6938e123f000000000000000000000000000000000968ddedb04f52140160061828b5f88dfd09aaf37df625ee6f66b9500d6608df31c7edf86296eccf8f9918b051a5e4df000000000000000000000000000000000b7491cb8f6252e3861d7160feb0afdd736d27886863ec0909a7cc711a9b71aace18b17a00a2999dd57ca1a74f148516000000000000000000000000000000000fdb280093ef45b12b694ca3390a865ee18e4c04b231e2c98cc28706d4cefaf4e654582ee03f34ecf1dfa9674489d55300000000000000000000000000000000185aefe71f24281e5b03dd41e6d6d45fbc8975beb175118de7568bff0a9ccf917e9df97dc26bca16e8da06b0e9a8e7bb000000000000000000000000000000000015b326d401b827fdf556e4a24a3dd6c8036b1c849751b5ae3c3728cad88f931b06e3a345523a723481193f7afeb67800000000000000000000000000000000054ca16b4c87293002c31e64ad303e8f040e11de8b45c5fb9aca9dbec59b29dfda8532a8ef5ae6a92ac8ea90ee4303e0000000000000000000000000000000000b65a233a7731366cf24c801724265215a8626b1290d86c60bf1e74b021b0b44d7d6552f936fac7b5e60cf1feaa1d82f", "Expected": "0000000000000000000000000000000010d1b2f595166929347e06c1debefead06334f554dc31f320cb844abdb1810b5f7c4b933ff8072dc03d303f4a6d0d09b0000000000000000000000000000000013ab41dfca0a7cb0c58c2c19e02f675a94d9e73312cfe2999dbac34e6a80bff9472506b48690f24ad3171ad495f445420000000000000000000000000000000015bfd0db53fd4da538caa3aee7a90a669cb84460365696ee79b190d09a6d4c3f08965de7fff4efeae435db52b97d213b000000000000000000000000000000000182ffc4304b911b47b092ab678edd63ed5f5e8a9069daf9247f3bf9c0dd149cc9992728a13b0a236fc9b37714b35882", "Name": "matter_g2_add_98", - "Gas": 4500, + "Gas": 800, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010d001a09cf5dc3276482185f26ef3f75d28cd6d2667eb08a7fe06c03b99f3b6c4d82390739b6867a314291cc642a8b2000000000000000000000000000000000587846a460b1f37c2e7f491f9a097b4e86e1943d9cd0999313f65627b3907f09b5d5ac1be376a313a959dd136f7e9b3000000000000000000000000000000000af439695556e86b102926d3b40e3e54cc84464e120de3b4e3c5541a6a5bca44151fb0594009663764c1824518b13f020000000000000000000000000000000003bfd9418c1e57269e222152d321b83ae090f216cb422956dd1fcc464f68526cb4a05cdaefc7bbe6e81d4ffe27d64db400000000000000000000000000000000085dd8bfc00ba517dc8d7ddb49d711d35bd36f9fe3843689019e779624a032d2f023533b8184b73042d1a1953d2885e50000000000000000000000000000000009ba8d5d36e6efe02097a3206bbed68529f0cb9875ab81deafd886d9243bfec8b403d2abe713a2ec929b93305dd2da220000000000000000000000000000000007f8f90ebb2771136a92023901ca85e87fb7c8b1a40f88ae564a124bdd0ff0bc27ea98612a817e2c871fb4bcea3bb06600000000000000000000000000000000152de417d02f1d14e5899201db8fd5db8ecb40ea8d415dcdedce8ac70c28d851db68e9aef94506a50ec28145547a2d68", "Expected": "0000000000000000000000000000000017555399f979745302f08210de5311a6401b6b181100b3bc6b6d450f0f62079d2f02d7badcb164f50dfc46a975cbd6720000000000000000000000000000000014aea86c06e4c1fbf0711a8cfced2544c7624abc7ae7906cd992bdf575a702540c45c2117e221446ba09960cbc9048ac0000000000000000000000000000000002fac56960c4989a84e02ce36e8970c2e847ee45579d31ca77f042bf96505af574af822da084ae64b22ff876610ba9a5000000000000000000000000000000000a481cfea2aef8975c80a297ce5a185dacd25649d41f8466d3c63d786e3c264a8e4ccab5ef6b80ab1260e86ab6d5b3f3", "Name": "matter_g2_add_99", - "Gas": 4500, + "Gas": 800, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", + "Name": "bls_g2add_g2+p2", + "Expected": "000000000000000000000000000000000b54a8a7b08bd6827ed9a797de216b8c9057b3a9ca93e2f88e7f04f19accc42da90d883632b9ca4dc38d013f71ede4db00000000000000000000000000000000077eba4eecf0bd764dce8ed5f45040dd8f3b3427cb35230509482c14651713282946306247866dfe39a8e33016fcbe520000000000000000000000000000000014e60a76a29ef85cbd69f251b9f29147b67cfe3ed2823d3f9776b3a0efd2731941d47436dc6d2b58d9e65f8438bad073000000000000000000000000000000001586c3c910d95754fef7a732df78e279c3d37431c6a2b77e67a00c7c130a8fcd4d19f159cbeb997a178108fffffcbd20", + "Gas": 800, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "Name": "bls_g2add_p2+g2", + "Expected": "000000000000000000000000000000000b54a8a7b08bd6827ed9a797de216b8c9057b3a9ca93e2f88e7f04f19accc42da90d883632b9ca4dc38d013f71ede4db00000000000000000000000000000000077eba4eecf0bd764dce8ed5f45040dd8f3b3427cb35230509482c14651713282946306247866dfe39a8e33016fcbe520000000000000000000000000000000014e60a76a29ef85cbd69f251b9f29147b67cfe3ed2823d3f9776b3a0efd2731941d47436dc6d2b58d9e65f8438bad073000000000000000000000000000000001586c3c910d95754fef7a732df78e279c3d37431c6a2b77e67a00c7c130a8fcd4d19f159cbeb997a178108fffffcbd20", + "Gas": 800, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2add_(g2+0=g2)", + "Expected": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "Gas": 800, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2add_(p2+0=p2)", + "Expected": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", + "Gas": 800, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", + "Name": "bls_g2add_(g2-g2=0)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 800, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845100000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000a6296409115572426717c73668335a949829d739cff2cb4ab043710d28f8e772f6ef41aac4806c9cb273c490384032d000000000000000000000000000000000cde4e850c721fa94e8890d500e3655b442d5c0dc4fff1b694c6f8dd68f6d8dc1bc3251a37d27e7af96f65a96278265a", + "Name": "bls_g2add_(p2-p2=0)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 800, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "Name": "bls_g2add_(g2+g2=2*g2)", + "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", + "Gas": 800, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d87845100000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", + "Name": "bls_g2add_(p2+p2=2*p2)", + "Expected": "000000000000000000000000000000000b76fcbb604082a4f2d19858a7befd6053fa181c5119a612dfec83832537f644e02454f2b70d40985ebb08042d1620d40000000000000000000000000000000019a4a02c0ae51365d964c73be7babb719db1c69e0ddbf9a8a335b5bed3b0a4b070d2d5df01d2da4a3f1e56aae2ec106d000000000000000000000000000000000d18322f821ac72d3ca92f92b000483cf5b7d9e5d06873a44071c4e7e81efd904f210208fe0b9b4824f01c65bc7e62080000000000000000000000000000000004e563d53609a2d1e216aaaee5fbc14ef460160db8d1fdc5e1bd4e8b54cd2f39abf6f925969fa405efb9e700b01c7085", + "Gas": 800, "NoBenchmark": false } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG2Mul.json b/core/vm/testdata/precompiles/blsG2Mul.json index 886b0c6adf3..19806b999c5 100644 --- a/core/vm/testdata/precompiles/blsG2Mul.json +++ b/core/vm/testdata/precompiles/blsG2Mul.json @@ -3,728 +3,777 @@ "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2mul_(0*g2=inf)", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2mul_(x*inf=inf)", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000", "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_g2mul_(1*g2=g2)", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000011", "Expected": "000000000000000000000000000000000ef786ebdcda12e142a32f091307f2fedf52f6c36beb278b0007a03ad81bf9fee3710a04928e43e541d02c9be44722e8000000000000000000000000000000000d05ceb0be53d2624a796a7a033aec59d9463c18d672c451ec4f2e679daef882cab7d8dd88789065156a1340ca9d426500000000000000000000000000000000118ed350274bc45e63eaaa4b8ddf119b3bf38418b5b9748597edfc456d9bc3e864ec7283426e840fd29fa84e7d89c934000000000000000000000000000000001594b866a28946b6d444bf0481558812769ea3222f5dfc961ca33e78e0ea62ee8ba63fd1ece9cc3e315abfa96d536944", "Name": "bls_g2mul_(17*g2)", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000039b10ccd664da6f273ea134bb55ee48f09ba585a7e2bb95b5aec610631ac49810d5d616f67ba0147e6d1be476ea220e0000000000000000000000000000000000fbcdff4e48e07d1f73ec42fe7eb026f5c30407cfd2f22bbbfe5b2a09e8a7bb4884178cb6afd1c95f80e646929d30040000000000000000000000000000000001ed3b0e71acb0adbf44643374edbf4405af87cfc0507db7e8978889c6c3afbe9754d1182e98ac3060d64994d31ef576000000000000000000000000000000001681a2bf65b83be5a2ca50430949b6e2a099977482e9405b593f34d2ed877a3f0d1bddc37d0cec4d59d7df74b2b8f2dfb3c940fe79b6966489b527955de7599194a9ac69a6ff58b8d99e7b1084f0464e", "Expected": "0000000000000000000000000000000006334ba1e361fd94bbd98f44b75ae9ec00ecb4d3467b5528870b1a1fa9a7d04449f12af90bd4c7a1e3f29e717d6d19d3000000000000000000000000000000000bf4cc1626393956915845ea7ca43d30a59c7196fbe309f2d5ee6de7e40c191d29821dd6aae46abecf634b904de8f7490000000000000000000000000000000014aeb09e252cc74610ab956057d4ac5af95cbea8a6baba9e5062643dc037d6841044cb38b22d7dfb978fe0b58f94cc3a0000000000000000000000000000000000fdcd73452fc1ced1c06e6271410a48dea05afbe889a692905e1baab8d72418c62531aab8b74842b51016f0a9cbb93d", "Name": "matter_g2_mul_0", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018c0ada6351b70661f053365deae56910798bd2ace6e2bf6ba4192d1a229967f6af6ca1c9a8a11ebc0a232344ee0f6d6000000000000000000000000000000000cc70a587f4652039d8117b6103858adcd9728f6aebe230578389a62da0042b7623b1c0436734f463cfdd187d20903240000000000000000000000000000000009f50bd7beedb23328818f9ffdafdb6da6a4dd80c5a9048ab8b154df3cad938ccede829f1156f769d9e149791e8e0cd900000000000000000000000000000000079ba50d2511631b20b6d6f3841e616e9d11b68ec3368cd60129d9d4787ab56c4e9145a38927e51c9cd6271d493d93884d0e25bf3f6fc9f4da25d21fdc71773f1947b7a8a775b8177f7eca990b05b71d", "Expected": "0000000000000000000000000000000010e70bef8eb893377e7ff92168d7acef11c9efab990fbded728b173b94e1d99e471a8357f16625d353287086543551850000000000000000000000000000000014043c1f00221c439e5febd12724a9224bccf0389914461644daf329208e869b1bf149880dccebccd440b1748d15e944000000000000000000000000000000000f7dee1e7d122e410b29a9eb011ee700c2f230cf8f611e196ec66e153c1fc331175532a8f9b060b573bddaa705430c2e000000000000000000000000000000000e1f659470eab7c0741bc8777ac9fc8dcd11a6f1b30ffb4265e96b879e795a4dbf851d1149429dcab95464e89f334627", "Name": "matter_g2_mul_1", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003632695b09dbf86163909d2bb25995b36ad1d137cf252860fd4bb6c95749e19eb0c1383e9d2f93f2791cb0cf6c8ed9d000000000000000000000000000000001688a855609b0bbff4452d146396558ff18777f329fd4f76a96859dabfc6a6f6977c2496280dbe3b1f8923990c1d6407000000000000000000000000000000000c8567fee05d05af279adc67179468a29d7520b067dbb348ee315a99504f70a206538b81a457cce855f4851ad48b7e80000000000000000000000000000000001238dcdfa80ea46e1500026ea5feadb421de4409f4992ffbf5ae59fa67fd82f38452642a50261b849e74b4a33eed70cc973f40c12c92b703d7b7848ef8b4466d40823aad3943a312b57432b91ff68be1", "Expected": "00000000000000000000000000000000119a5147fe9ddca7123f721b5662c1a44b0964c37a214cdf3a4fd34166e3b25210344e65220c38ec84d0e3b5ccc7e46d000000000000000000000000000000001642dad5dacf4295b871fe9b2787f0861f158807b2b6c01c2dce12ab053c9472bd3cb98de5dc33f40053ff45ce5c9af40000000000000000000000000000000005bb5761602b6639f2ecaf79f2d1f853fbdf75f4b3852b90808b858993a83f8a0da8a2ce7072aa91e3b6b3ffd0b3d1e20000000000000000000000000000000000a75143b9551d4ae41fb8bd71fdba7826b994c65904d9189a5ac5130a59cbb9d8dee0e016735565148fc49823d3969e", "Name": "matter_g2_mul_2", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000149704960cccf9d5ea414c73871e896b1d4cf0a946b0db72f5f2c5df98d2ec4f3adbbc14c78047961bc9620cb6cfb5900000000000000000000000000000000140c5d25e534fb1bfdc19ba4cecaabe619f6e0cd3d60b0f17dafd7bcd27b286d4f4477d00c5e1af22ee1a0c67fbf177c00000000000000000000000000000000029a1727041590b8459890de736df15c00d80ab007c3aee692ddcdf75790c9806d198e9f4502bec2f0a623491c3f877d0000000000000000000000000000000008a94c98baa9409151030d4fae2bd4a64c6f11ea3c99b9661fdaed226b9a7c2a7d609be34afda5d18b8911b6e015bf494c51f97bcdda93904ae26991b471e9ea942e2b5b8ed26055da11c58bc7b5002a", "Expected": "0000000000000000000000000000000017ebc9446f8c8e17dfeddab9188d0c808565da29c0bdbbc4138a44ca3196c4564853be28286b66660cda36832d6940010000000000000000000000000000000007f29a9583b4ae83d3913dcd72590a3f20f39eb5a6d36663c1ef433058e76550085b9c01bf797d98d0eef45cc22ff8c50000000000000000000000000000000016eeaeb123b12d1913ff1e50f974228c79f2b995609d2e3835c8e1d68773b0cd484df57b86111cdb75de1e19eaf062e500000000000000000000000000000000002f5688c1286aed42309896bd65d1826dc64dda615238fa9043669806968b8e0e1e3e77ef192b7df540aaf0ed282a9a", "Name": "matter_g2_mul_3", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001156d478661337478ab0cbc877a99d9e4d9824a2b3f605d41404d6b557b3ffabbf42635b0bbcb854cf9ed8b8637561a8000000000000000000000000000000001147ed317d5642e699787a7b47e6795c9a8943a34a694007e44f8654ba96390cf19f010dcf695e22c21874022c6ce291000000000000000000000000000000000c6dccdf920fd5e7fae284115511952633744c6ad94120d9cae6acda8a7c23c48bd912cba6c38de5159587e1e6cad519000000000000000000000000000000001944227d462bc2e5dcc6f6db0f83dad411ba8895262836f975b2b91e06fd0e2138862162acc04e9e65050b34ccbd1a4e8964d5867927bc3e35a0b4c457482373969bff5edff8a781d65573e07fd87b89", "Expected": "00000000000000000000000000000000042d0c1941ae0ed5e8787437ad5e2753bba02185317848e8ec2e425ac954e0efb1bca534725adfe87e8507851ee337af0000000000000000000000000000000002db55ae8126cbe86327aab880381a81205e33a351d172c883b9cc184799866a8db5a6b4321496e05d3ef62d00416d9a0000000000000000000000000000000012c45444403dd62d7be3e7658dd85909204751dd7d085f6edd38c0aa9185d3c32407d8c95bba371b380f788d0dc48e0900000000000000000000000000000000111421c6dd0db595ab731adfb4bc76c84a61197cb023b6f17e7176c443f20a4b6f8cd0a00cfa61e831ed20b3c6a84d98", "Name": "matter_g2_mul_4", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019c31e3ab8cc9c920aa8f56371f133b6cb8d7b0b74b23c0c7201aca79e5ae69dc01f1f74d2492dcb081895b17d106b4e000000000000000000000000000000001789b0d371bd63077ccde3dbbebf3531368feb775bced187fb31cc6821481664600978e323ff21085b8c08e0f21daf72000000000000000000000000000000000009eacfe8f4a2a9bae6573424d07f42bd6af8a9d55f71476a7e3c7a4b2b898550c1e72ec13afd4eff22421a03af1d31000000000000000000000000000000000410bd4ea74dcfa33f2976aa1b571c67cbb596ab10f76a8aaf4548f1097e55b3373bff02683f806cb84e1e0e877819e2787c38b944eadbd03fd3187f450571740f6cd00e5b2e560165846eb800e5c944", "Expected": "000000000000000000000000000000000ccdb2a0b670f199a9b61198e6a2ce2117075733e6a1568c53ca493dc3674c6ae85be2491d2ed983f52e2c7040824afc0000000000000000000000000000000004f52450d7e041c561c00200d5b142b32f2df2e2156e4f6c15d6c00e185e135037a1ed6be15e2ed920daa00e2f9bc8da000000000000000000000000000000000f39c38c18f03ce6baf1d016cf32d7387269940280f2e8d21db4da33dbd2d24ebb93ae3dff9f79b015eee25813d677c700000000000000000000000000000000189df61f7f1025fa6fdd0a4708ff1d53db7d414019c4828de2520af3d36776062350061c2261e46e746a6475fdeccb2b", "Name": "matter_g2_mul_5", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000147f09986691f2e57073378e8bfd58804241eed7934f6adfe6d0a6bac4da0b738495778a303e52113e1c80e698476d50000000000000000000000000000000000762348b84c92a8ca6de319cf1f8f11db296a71b90fe13e1e4bcd25903829c00a5d2ad4b1c8d98c37eaad7e042ab023d0000000000000000000000000000000011d1d94530d4a2daf0e902a5c3382cd135938557f94b04bccea5e16ea089c5e020e13524c854a316662bd68784fe31f300000000000000000000000000000000070828522bec75b6a492fd9bca7b54dac6fbbf4f0bc3179d312bb65c647439e3868e4d5b21af5a64c93aeee8a9b7e46eaaee7ae2a237e8e53560c79e7baa9adf9c00a0ea4d6f514e7a6832eb15cef1e1", "Expected": "000000000000000000000000000000001388a59c57ec8ca5e68b99631abdafca1b71352ac35003a55bbc415b48b8171857adda31123ec86a6ed9e1060d56aa67000000000000000000000000000000001471913b1ab5bcf9336665d3d44232b4e58da70285b7b8eb1dfd7c54442afb28c339f56e6389f89b84db0879e1ee058300000000000000000000000000000000022101b4de40b7180ea17bb36bad0a668a8def3e7361a96fbfabcfc4cdbe6f607ee4ee80d0eb2418b848ad056520092900000000000000000000000000000000103cda694792af5a51e04b6422600a0ea6f50808ca54423cd4f59dfba633daa5afea49c85b900f52e182610efb62fe7d", "Name": "matter_g2_mul_6", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000690a0869204c8dced5ba0ce13554b2703a3f18afb8fa8fa1c457d79c58fdc25471ae85bafad52e506fc1917fc3becff0000000000000000000000000000000010f7dbb16f8571ede1cec79e3f9ea03ae6468d7285984713f19607f5cab902b9a6b7cbcfd900be5c2e407cc093ea0e6700000000000000000000000000000000151caf87968433cb1f85fc1854c57049be22c26497a86bfbd66a2b3af121d894dba8004a17c6ff96a5843c2719fa32d10000000000000000000000000000000011f0270f2b039409f70392879bcc2c67c836c100cf9883d3dc48d7adbcd52037d270539e863a951acd47ecaa1ca4db12dac6ed3ef45c1d7d3028f0f89e5458797996d3294b95bebe049b76c7d0db317c", "Expected": "000000000000000000000000000000000cf5cb957a752ce9187940f63b13080790348814debf84b91e74fd6e822c2735941d61d50d492439475bb3ea7aa849ec00000000000000000000000000000000012e546ff33dee9875510a68301f46d89e6175f5cd9a6e179fb8599a580e9478fb8d92038982551dd29041d8185c7474000000000000000000000000000000000d52fb57bf2996dbbacdbcb4088df38e77e25598b91bcd5e41eaa27b1398eac150586b142f068d5b498e0ce458d3e8950000000000000000000000000000000012295e1d1039abe7a5fea51a04a34e9e8d44a0f24b8c032680703c119d54274d3bc2e548854021ab027b693e43964314", "Name": "matter_g2_mul_7", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017fae043c8fd4c520a90d4a6bd95f5b0484acc279b899e7b1d8f7f7831cc6ba37cd5965c4dc674768f5805842d433af30000000000000000000000000000000008ddd7b41b8fa4d29fb931830f29b46f4015ec202d51cb969d7c832aafc0995c875cd45eff4a083e2d5ecb5ad185b64f0000000000000000000000000000000015d384ab7e52420b83a69827257cb52b00f0199ed2240a142812b46cf67e92b99942ac59fb9f9efd7dd822f5a36c799f00000000000000000000000000000000074b3a16a9cc4be9da0ac8e2e7003d9c1ec89244d2c33441b31af76716cce439f805843a9a44701203231efdca551d5bbb30985756c3ca075114c92f231575d6befafe4084517f1166a47376867bd108", "Expected": "0000000000000000000000000000000008e4c57309339400ac9b6b5df16972c272d47cf69ba7baf89afa4f4e72703999c5885253cc35686f6c8d277399da2a390000000000000000000000000000000018ad4e1f105f16b0dbb4eb089c51e709c25e407e54b64346224b1abbe15d62fabb231e36a69eb05a9ba7860f772634200000000000000000000000000000000019994d20a7ecc0f234ccb6b1793fa7d1ece64b3e157c579fb05a8c6cfcdd6f5456ac1f4c1beadb69206988ab543bb8bb000000000000000000000000000000000d435e74bed382442ab83ec90dffb91336137932524bfcf9753fa5ddfe038d0b98a045c8ec9deb53172e5662d3fd67e6", "Name": "matter_g2_mul_8", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e25365988664e8b6ade2e5a40da49c11ff1e084cc0f8dca51f0d0578555d39e3617c8cadb2abc2633b28c5895ab0a9e00000000000000000000000000000000169f5fd768152169c403475dee475576fd2cc3788179453b0039ff3cb1b7a5a0fff8f82d03f56e65cad579218486c3b600000000000000000000000000000000087ccd7f92032febc1f75c7115111ede4acbb2e429cbccf3959524d0b79c449d431ff65485e1aecb442b53fec80ecb4000000000000000000000000000000000135d63f264360003b2eb28f126c6621a40088c6eb15acc4aea89d6068e9d5a47f842aa4b4300f5cda5cc5831edb81596fb730105809f64ea522983d6bbb62f7e2e8cbf702685e9be10e2ef71f8187672", "Expected": "000000000000000000000000000000001425890b6c46c5a07a79127de4ddbb751227dca4481ab7c2f601bf22b8f6a149767c73bfbf57ee399c0f2d0b12852a0a0000000000000000000000000000000012cce15f53fdfffb5f71de3567b0c0adea65b9321c85677c574787f7048c1bb5e2dc985b65fbc48115aa129e6000fe4100000000000000000000000000000000041398497f975289fb9fc6ffe671a19fdcd3753c82ffd3b2084574107bf7fadc8de462507f4484c32df39967c3751a480000000000000000000000000000000007514a7f246006e714d4a8cbb4e89d81b951b5c41a05bcf35f61283e888074fb3686fb6ecc1a66e491ea1e1ce0738102", "Name": "matter_g2_mul_9", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000159da74f15e4c614b418997f81a1b8a3d9eb8dd80d94b5bad664bff271bb0f2d8f3c4ceb947dc6300d5003a2f7d7a829000000000000000000000000000000000cdd4d1d4666f385dd54052cf5c1966328403251bebb29f0d553a9a96b5ade350c8493270e9b5282d8a06f9fa8d7b1d900000000000000000000000000000000189f8d3c94fdaa72cc67a7f93d35f91e22206ff9e97eed9601196c28d45b69c802ae92bcbf582754717b0355e08d37c000000000000000000000000000000000054b0a282610f108fc7f6736b8c22c8778d082bf4b0d0abca5a228198eba6a868910dd5c5c440036968e977955054196b6a9408625b0ca8fcbfb21d34eec2d8e24e9a30d2d3b32d7a37d110b13afbfea", "Expected": "000000000000000000000000000000000b24adeb2ca184c9646cb39f45e0cf8711e10bf308ddae06519562b0af3b43be44c2fcb90622726f7446ed690551d30e00000000000000000000000000000000069467c3edc19416067f572c51740ba8e0e7380121ade98e38ce26d907a2bf3a4e82af2bd195b6c3b7c9b29218880531000000000000000000000000000000000eb8c90d0727511be53ffcb6f3b144c07983ed4b76d31ab003e45b37c7bc1066910f5e29f5adad5757af979dd0d8351d0000000000000000000000000000000004760f8d814189dcd893949797a3c4f56f2b60964bba3a4fc741e7ead05eb886787b2502fc64b20363eeba44e65d0ca0", "Name": "matter_g2_mul_10", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f29b0d2b6e3466668e1328048e8dbc782c1111ab8cbe718c85d58ded992d97ca8ba20b9d048feb6ed0aa1b4139d02d3000000000000000000000000000000000d1f0dae940b99fbfc6e4a58480cac8c4e6b2fe33ce6f39c7ac1671046ce94d9e16cba2bb62c6749ef73d45bea21501a000000000000000000000000000000001902ccece1c0c763fd06934a76d1f2f056563ae6d8592bafd589cfebd6f057726fd908614ccd6518a21c66ecc2f78b660000000000000000000000000000000017f6b113f8872c3187d20b0c765d73b850b54244a719cf461fb318796c0b8f310b5490959f9d9187f99c8ed3e25e42a93b77283d0a7bb9e17a27e66851792fdd605cc0a339028b8985390fd024374c76", "Expected": "00000000000000000000000000000000048ea2c854a0df7b10a2147db6eabcb16eba340644f737fc99663d1ef26d8ed688c2baaa7d7699c5f540d7605eb48485000000000000000000000000000000000c959efb835d48d3e7a8ce643764f27c365f6248a88e39092e3a6498f04ed851c55b796dacd62ae73d7edf23aa45fefc00000000000000000000000000000000114337b8caa68cea6f22a25c0ce3b247cadae24c63fb02c6a98a728b54f97b12b1473c8e23f55338326b9575a637bb2e00000000000000000000000000000000033167b0668ec650581815cefab61d13661f4cbc6e01711af0aefb699e1979b551d0031c603ee5f6dd4f716ea7aa4a6e", "Name": "matter_g2_mul_11", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000576b8cf1e69efdc277465c344cadf7f8cceffacbeca83821f3ff81717308b97f4ac046f1926e7c2eb42677d7afc257c000000000000000000000000000000000cc1524531e96f3c00e4250dd351aedb5a4c3184aff52ec8c13d470068f5967f3674fe173ee239933e67501a9decc6680000000000000000000000000000000001610cfcaea414c241b44cf6f3cc319dcb51d6b8de29c8a6869ff7c1ebb7b747d881e922b42e8fab96bde7cf23e8e4cd0000000000000000000000000000000017d4444dc8b6893b681cf10dac8169054f9d2f61d3dd5fd785ae7afa49d18ebbde9ce8dde5641adc6b38173173459836dd994eae929aee7428fdda2e44f8cb12b10b91c83b22abc8bbb561310b62257c", "Expected": "00000000000000000000000000000000142f6b71471f3665ee6269cf598fc3587a62523f9753eec48a2461a2e313e376828cf6d1a9ffc9e64353c8a668718736000000000000000000000000000000000153647cc4a5aeb8ea52f845c415651e167ace9f331c1d73eccbbe20a4014f9e1158c281495206de4b841839438a595500000000000000000000000000000000151d07c3f83217e63b332a6c47e91ef2418e9c658353f8b644f23266f5fbc727562f0935b4d892db947cfbd0757ed61500000000000000000000000000000000035bce4bd2d8261e21476c325cb68e581f20513eb5e0e6a0ddbfd4ac4674bc323590b6f52d0cd50010c13642e7e03daa", "Name": "matter_g2_mul_12", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ca8f961f86ee6c46fc88fbbf721ba760186f13cd4cce743f19dc60a89fd985cb3feee34dcc4656735a326f515a729e400000000000000000000000000000000174baf466b809b1155d524050f7ee58c7c5cf728c674e0ce549f5551047a4479ca15bdf69b403b03fa74eb1b26bbff6c0000000000000000000000000000000000e8c8b587c171b1b292779abfef57202ed29e7fe94ade9634ec5a2b3b4692a4f3c15468e3f6418b144674be70780d5b000000000000000000000000000000001865e99cf97d88bdf56dae32314eb32295c39a1e755cd7d1478bea8520b9ff21c39b683b92ae15568420c390c42b123b7010b134989c8368c7f831f9dd9f9a890e2c1435681107414f2e8637153bbf6a", "Expected": "0000000000000000000000000000000014e83f87e7f66d8ed880ca46a76a5d3bbbacf2dafe1ee055f04af568738f4c6ddf2a93e1810b616da6f64f25c35a7b5a0000000000000000000000000000000003d14447254b61168d36f92710f95f7100cc8f278b0bc9528da763a18a5386b3f5b83b96f4dc426e4b0fbe755bc986790000000000000000000000000000000017f1a79ed64abfe5e960fda02cf3330e6ef5612c1b8639386959f86c970adb797bf077a468273d37996a65685f75ac30000000000000000000000000000000000d973499a7bf7132541c0976bf2e9bb26a2b6cfa5bda720352fa7a180a6b8fe95befcc13de5a2efe58be934cf7d8e664", "Name": "matter_g2_mul_13", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017eccd446f10018219a1bd111b8786cf9febd49f9e7e754e82dd155ead59b819f0f20e42f4635d5044ec5d550d847623000000000000000000000000000000000403969d2b8f914ff2ea3bf902782642e2c6157bd2a343acf60ff9125b48b558d990a74c6d4d6398e7a3cc2a16037346000000000000000000000000000000000bd45f61f142bd78619fb520715320eb5e6ebafa8b078ce796ba62fe1a549d5fb9df57e92d8d2795988eb6ae18cf9d9300000000000000000000000000000000097db1314e064b8e670ec286958f17065bce644cf240ab1b1b220504560d36a0b43fc18453ff3a2bb315e219965f5bd394c68bc8d91ac8c489ee87dbfc4b94c93c8bbd5fc04c27db8b02303f3a659054", "Expected": "0000000000000000000000000000000018bb69dd6db0beb468242265c382de5ac342d465b5f72d4e5a24c67a48272d9a1f3af28e0bd3712e16a854c5d91c616b00000000000000000000000000000000072fbcc86b7dee9c2dc177dbabdbbbddb630c98ac3bf3737fd22f99e2b2b690175d9c5aa4b577f78c545dc6a5d2d03c900000000000000000000000000000000161c4218143ab1f0387f19bccdcd08f9caeb2d1331ca890741799ff1b40533076b6a96a910714176c770b25d2c17715300000000000000000000000000000000063098cd9d1eeb899724b40a2d10ac951ba0277db09aad639957f58541dd391fffadc5d97833bb9666b054e12debfa92", "Name": "matter_g2_mul_14", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000018244ab39a716e252cbfb986c7958b371e29ea9190010d1f5e1cfdb6ce4822d4055c37cd411fc9a0c46d728f2c13ecf0000000000000000000000000000000001985d3c667c8d68c9adb92bdc7a8af959c17146544997d97116120a0f55366bd7ad7ffa28d93ee51222ff9222779675000000000000000000000000000000000c70fd4e3c8f2a451f83fb6c046431b38251b7bae44cf8d36df69a03e2d3ce6137498523fcf0bcf29b5d69e8f265e24d00000000000000000000000000000000047b9163a218f7654a72e0d7c651a2cf7fd95e9784a59e0bf119d081de6c0465d374a55fbc1eff9828c9fd29abf4c4bdb3682accc3939283b870357cf83683350baf73aa0d3d68bda82a0f6ae7e51746", "Expected": "000000000000000000000000000000000e43672f1bc25e7e0e64a3fd26cb246bdbd6fb5c9084afdc87c888634916e6a6cc9a351cc67a6ac77ab8e132ed6cbee3000000000000000000000000000000000dee9612527c8ee9c574a4c51f5d3504ccf1d5781b59c78ea15294332c6acfdcc7bc68853e70f1f72524c930e4c3d2eb0000000000000000000000000000000017eba629eb14a0636926275f1c2109318ce8818d8171c69fd371751b6de47bda5b00a0b0e3765d05bab7b8dea9add90900000000000000000000000000000000052f0a4cd9b91695e1e58ead1da1480fef08cecef63896aa51ab16da373b99b3b91767a374645ac5932d9c7fd21d4636", "Name": "matter_g2_mul_15", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000eb3c91515d4a41209a73564741a8ccf901a624df9db22e195a5d02d24b7bc0a12756b15b8d006cb991a7e088eaef1000000000000000000000000000000000704ce8afc808b0161f6f61b22d990d713ae398779e6e74e9b5771daf006ce0bba3a8088edf75156f0e48b92ee8409b00000000000000000000000000000000018fe81e05aff0620f4bdbe4a715e015650497afab62921eba0ab86b649e5a2fd3d54041868928519f537e36448688a0d00000000000000000000000000000000162bd97161201ea3c26f8dd1204a9c6b61b762bdf573cb5d20b6b255f30208ca7d96aa47b46fb8c6bf0922075f1c1ca807f80a5e502f63375d672379584e11e41d58d2ed58f3e5c3f67d9ea1138493cf", "Expected": "0000000000000000000000000000000019b7ea673dad96c8352870136ea262c9ed105550cb403eb1e64ad598b2145fe1b95e5d61f1b5a6ebec47568c67b68086000000000000000000000000000000000f06ff9bcf2ba284e705b12ef2311f1a9b867ed742ee0737567b5c878547b18394b82c2bb97e16586515728245692cef0000000000000000000000000000000019dfd2d8fc4f2c989c7e1016e147f336174c84d380bab992bf1adbffe96d93d4d2d1d1dacdba3adfaf283b184478229800000000000000000000000000000000068d230422006004cd88ab0dd46a84af3905c7a1d329446cc23c1c5adb401a86a9fa76aaf577f77c2678cd8de8685ed4", "Name": "matter_g2_mul_16", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000135aee0e30fbcad798738c10d4aebcdf50c89ce516325f655fe763dce54ffedf94dd74168611e5ae879b5bf5598d62dc000000000000000000000000000000000c728e672cd8b3bf9341bca929c34118b566cd3a80452d7015bee9d5cdc001b1f5c678d4b2cc4f7cac353e7bf326ca1e0000000000000000000000000000000014809aa22e2051e463fba6d49fbb060d0c7f599a0fc5409d34e71f34817e7beb1251810ae6eee1848c60796fb8647dea00000000000000000000000000000000145a4de777d86025d50e12f9a6615ecb9bdd41489992d1b643dd9aa549acbc63b04b0bdfd14b6e45c70f165e9a8c91bebb169138f94093d5c1c6b253cc001ce8baf78858dae053173fa812d2d1c800da", "Expected": "0000000000000000000000000000000015ffdd83355978ebfc386e13987effac0137ec628fff1667ede29cfcbd05e31cf8323959dd0247c20cf28978dc242c790000000000000000000000000000000016b1f810da2ae3c2ffbb6b83c47ef03eb0f298ff4c304ab0dd7b97207949d62858458d789c86c0cd474c34fa720ad3b70000000000000000000000000000000002a2e1463d5e795e6a25998a848b079363efc7d0337c3803385f4f17f11726b04108adfd87a811d709cbb6750c969526000000000000000000000000000000000289a3f472799c06a84bb1f377a36bad910220e1017884545159fe1b2505e8e7473882fcf324ba0d9125495bcbbc7226", "Name": "matter_g2_mul_17", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000009a58b7116dbd6f550f8ca98071813130ecaa9ea86d5275eebc36860690fa048c9ebeb46600b2b63e847bff3e38ed0d00000000000000000000000000000000113ffc0932c041e0e34b2540c485eb74f5029b339cb60bc88a8a749310f33f330dea137e5f340044fd689264af66696d0000000000000000000000000000000002642da3c2c7b6688aba0b19ab29ac72e35caafa044863c364ea8833fca850289de52c0963bc33d7bba40cb5f568718a000000000000000000000000000000000552d35ca054da2f148c119454f6760607b351f2441921a2be17da2cc10902d71571c5554f132e60df79679428fa07e3e40608bdaf3e7764358a64a920cbb33ab4d571c7b3092e1ae11d9697f82ed833", "Expected": "000000000000000000000000000000000b02ddcfbf391a2d6953261c786945093b09377352473a86cfac6456a811233809434b566b9301eea3105eb86922efcc0000000000000000000000000000000015430deba91113b841303120f0738012d77207e9408474998df5e68d0d61f1a64afb947ff93116ae766ca5325046e263000000000000000000000000000000000ab7094055919f6f707b458cda552f25104d95e4ec8d020ea4c17ac1d7efef5c4c3a769120718f1d5171eb8630a3018200000000000000000000000000000000161e7209f8c98e511a698fbf01735798cb632ae1afe00870654ffa0ba93a549edf4b97d60f03974ab0964cd39298401f", "Name": "matter_g2_mul_18", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018fbbcba3d4b1e548ceaec4a48db62a2420ff29a67af332ee7ea3f902f84e6c375fd33abc33d945c5bca25603979f9a400000000000000000000000000000000072ff416994364bdc6535f36c82212afa822cd94fade69f11eb38dbdcd37c7e22af55fe05e6a826dad822073656eaac10000000000000000000000000000000017bba179b847278a4878b6faeaab3b1f4bd7540d22817cd9aff95557497f8b9d286657b6162c0f89f7820becc637dd550000000000000000000000000000000018e2bfed71aa9b11fefca2f0db8bd9b8c69540267de50bec4fc90a6e9741891465c9761d19282e1100b3707eeb598b31d411519f2a33b07f65e7d721950e0f0d5161c71a402810e46817627a17c56c0f", "Expected": "0000000000000000000000000000000006cb218607a1f66ce361c89fd20edc3f00421611adc9aa52ec35d45e023174962c863f740ac36c984c2b466cfc4827a900000000000000000000000000000000152b22d46e9660da8b1be4c5b14da613731e750ff7eebaf879f7074bf3c33e1528a2c8479e0178707e3855b49f85f045000000000000000000000000000000000c928cf78cee2c8b9da8215d33d189c5636df1e8e9bdaf143aba7ed40f29490ca2328b4a20cfc56f62e4ce49d9e77f14000000000000000000000000000000001574b7a9c3931933160ad4eb17400b6297210db47bca034bc1b5d17a0cb8c41834636b9123e625e5eb0b01738cd6b9af", "Name": "matter_g2_mul_19", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019efd37727dfaedf697fcda7a59847dbda8ca7cdc92f34e68691d682e20ae6545ac104d6660fdb8f64a051e69298eae8000000000000000000000000000000001225ace0fdce456dd888c9672503b68ef77b2d11caf1265a767a6ea14911e3ca03fc153f18dfe9d95e0cc68b7b8a3a8d0000000000000000000000000000000008a6b059c1c4da046cc0b1b5d7f33270aceffa607daf6d0d078c06f940604e1a0b4adf01a4091306e3c7eddcf3d95101000000000000000000000000000000000f79bae5260a2f114ffbb9273f3049d3ebb002500a57ee0a7d157d86957f43f87a2e026fb9892dacaadca5ee04fc8e176bb3f9e512311699f110a5e6ae57e0a7d2caaa8f94e41ca71e4af069a93d08cc", "Expected": "0000000000000000000000000000000003e17452a80996203fdc4037db072c452f9eb2dae689c77c88b299d7ba266d111ab2b9c4b24149968d72cd143a34fc4e0000000000000000000000000000000014a057d7a50c9b0f34712ff8008770080bfa671650fef43c82726257da180dfb9672b266d4c54d65fdc677d917e6c5b80000000000000000000000000000000013b452c980bfc4a484637b578be100753aee9dda9487d5ee5c017c689dda838fc673804369328192d780d60a9a3de0f700000000000000000000000000000000103aa86d1807de242a6d4fa4a49be6c91cd757df5808501acfca44940733c6a524b851ac962b99a9be41bfc8d6254478", "Name": "matter_g2_mul_20", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000016d2b73eeceee17d3bff3aacac9df9ac1c4248d9ea7d6a503a757f7bb22fa6970bb6f5cb5ec154785f7252e1508b382e00000000000000000000000000000000081edc68bbd8db7b10be06ee23d090bd54f9ca07ef24dfed7df7bb05f8cc26e6889dbd40ea203fd5cca5cb588199f9e40000000000000000000000000000000010d3478508619ea9493b4330e2fb9150024cd32dc1378f824788a884a4a30fbf39c630f465557bf0c6d69b4cbecf89f9000000000000000000000000000000000f20c9b134db5d8b7756800c031bf5962fc560ba95d4bd9157b16179f1a37ae08696a2be455ad8d018aead6adcc69b712a0c988d97e86dccaeb8bd4e27f9e30fad5d5742202cdde17d800642db633c52", "Expected": "0000000000000000000000000000000007c616472f9ac60f749979c6f870b587425d514395ed07558ed287fccabc77f0c90872f3885d0780bcdfffedd124eb3d0000000000000000000000000000000019531e9c25e84a2a968a85d9f1ab61a372ebc59ba5bb7a2bbb3c0d6e4c9d04061b28fdc719735e97ccd5f7243a58cdc70000000000000000000000000000000007772d3cff12bbee916a6569edce0c6dbc2bd8a794919a4dd7bc37024c8273245210511b8f6da551fe626b7b840833f300000000000000000000000000000000186a3e858a83a7ea1bfdaac65c2df1076059aaa193961559792373886c68acd2f9fca61b166a0ee55084a6ea122ec3e8", "Name": "matter_g2_mul_21", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003dce67181d23af9729e9fb0653d7f79c890fba27de42fada93123e112c4a468fa889921192db8047d86e4db77c60266000000000000000000000000000000000869a1e39d42d9bb0cc0568fdad16abbdac3194af893ebd8dd8f8c2c3c855abefa5fc215412168acadc88e658e83f5570000000000000000000000000000000001ef139a75194f3c4b1378c2b66dd304d179460bac0a289405cd8faa3ff66a7b6e54eb7b8742a68150b1e098630135c40000000000000000000000000000000003892b5a645af916be2c6c7fc0bb08fb5f39341d3c68598940554e1be11e1be75af920db0c8710ed13c78edbf683f17d0b299c14892e0519b0accfa17e1a758c8aae54794fb61549f1396395c967e1b1", "Expected": "0000000000000000000000000000000008adebaa95d10b9fc0f1a1f0d52dd6741517d2ba23e3f9e7a9221039684ae226ea602dbb50df0efd44b2b5bf7495c0b50000000000000000000000000000000008e276e78ead2473602d37cb9f2f589f9c60514a1fc5c215acf487bf57c935467d29945d3d671b41a8e47c9495dbf5c9000000000000000000000000000000000fab06240cb8cbe9afcc4ebebde50c2881e4bc4d4f2ed09a1065e3620e6344fb3c5f3019250ca4edaeae4902abb7400d0000000000000000000000000000000003fa6c48ead374be1dd45c8417ca8234c15ddefc5039151e6cd7fb27f866e134cef2f59ac9b2ec1b26896eaec9213549", "Name": "matter_g2_mul_22", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000264dd4b477f5db65edad28c7153ed919a863c5c5661e0125c5429b323e055fd69c33142dfc6ed9c87082e2be4675e1f00000000000000000000000000000000046ea088a2ec94d3a1f1f97949f1ebc49690c453d316cc46534fa253b34b30323b6071d147d64bb94e02fb4db07bb0c400000000000000000000000000000000013692a33bb1348486eec40a9e93a4ea3810c7b4d3188cd07e235a2c898aa87ee0d17682fd24f4d978f9fb028fd26e2900000000000000000000000000000000115f8b64c00cd5cd344a7b5edc0ef0bb85a3e8f0f9dfb28f8ffe12db3e0d222c2d45dcdba0fbdc161c5d558bc71aa0977064d43d6802ad4c3794705065f870263fef19b81604839c9dea8648388094e9", "Expected": "000000000000000000000000000000001412bdb48546014adf3c4eac4dbe79ba700f90c8030b063828fb01be5977bd73107533a4e8030c8d9cbdde9bcf10649a00000000000000000000000000000000126d3e1006abfeddd810cb1e12c898cf5f543e414438e600ce4c94cd8dbd1e17c0f3b9831add397feda74362eeace6fb0000000000000000000000000000000005b3159638afa34f219513cbcbc51567b16fd5598b85e6ae0d232021133cec25a6269250df2ab7b5ace726e9e2fbf0b0000000000000000000000000000000000c35bfdd1c10e903da6d41e9afbe65b0cd66addd7893fde41dfda8e543a93938cdeab52cc9bbdbe61f93d651bd1c923d", "Name": "matter_g2_mul_23", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000014c83d58d90db4821a0411fab45f83fbc05f7d0d7a67ce75da3ae568978d15f4c1886c6fa6086675c0045efb30d818400000000000000000000000000000000001e68691123451f4c3df6dae62c6a63855ec3597aae33a8a10ee274e902e9aab1460cc9c79726312df0ee0ce90c8d3c00000000000000000000000000000000018a39eb3e3c6c7fb8ee304e55d15e209afe2fe278dda93552a7b9f51fbd778da1502eb6775cbc3f832f8320fa0686240000000000000000000000000000000017c15910fad1ca5749aa82a5a2fa98b0ebb37e92912547fb1741f18c34e0d5fc3a307b928636c25f0320d71cb9d31062686285a0e22f177fe3adbfc435e9c1786752dcf3c11b723539789b0cdeb0647b", "Expected": "000000000000000000000000000000000bcc781f144bc148687875789fd8c54dd820170984b6f8ae75855f7e45619c1d2ff85c330b7743e447b5fc831dce9277000000000000000000000000000000001409aaf3c94c9a6b5123c82a7f311af7c2f60e9b197d49fb5b010f84faff972151b383a83c106de43454f8097005f6c800000000000000000000000000000000064a91226da8b9cb587030f1f4afb0d422a51e4d55212f26c621abc06fc0c57a473a9be75518a5f4f9a7f8d4aaba69830000000000000000000000000000000002cf239343bb77865ceabfcc1fe34cc9be4a1ebc3a70f16f8b7cb84eed5843524f95673b01466d6cbb0d8d9dc00793e6", "Name": "matter_g2_mul_24", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000fa96d9fe01c18732e8d6454df9bb1f482c4b9add837ce9c354c72d49c2d44ec694674aaf0e6d6a095cab7ebb57ccd9a0000000000000000000000000000000001f8ffe3fb7e9e311e0f6949c07c26a0febb181e37b2268bb5e125fc3a100323740d1ebaa5e635dba3770fdc2ce4ee860000000000000000000000000000000012ac42095fdb677720ab3f14bf0afc55c95b43d28d922a5f8cb0bd841306b978751d24546e3a6474976961d0768f29e9000000000000000000000000000000000baf9804d99039c9fe966a696c64bdacc9673b0906b4deab108d34fbbaa3b0905d50892278570564017b96828c7e1ac93176b6724cf984632daf95c869d56838ab2baef94be3a4bd15df2dd8e49a90a6", "Expected": "0000000000000000000000000000000006bbdabfe104b62d22e78bc8f3446a86cd5f10c4c5a54501140768b55a7e6940b9952c9a90a14d8fdc7c04600195cd6500000000000000000000000000000000172e718c926cd393bf303984518432693c304a2758174dabba303ff4c0289b5bf5376b61e8821abab322d53e88f71d480000000000000000000000000000000000a2f84fbdb5b05107a0a340e81b56ddf6d03c23848448f841dc44f07cbf8a575289cf6d53986f581fddb0f2d07e38d70000000000000000000000000000000005cbc10f143a9a1fe23f670a4c47d385f5c7069d8c46580322d6939122b2d39d185d6a8c2e51e88a1d40fd2e82d08b8f", "Name": "matter_g2_mul_25", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014ce6d88a7c5c782562aa101550f1af487296adebd9dae8252698ba04fbd58b92e2216de6ffd474d5992f97d9f22800d000000000000000000000000000000000ce92a04f5c8a99ca0e93992448222519fc454bda5d1d8638a7bfde968386e4ba0dcd1da59cd81d4c4dca3e584be0275000000000000000000000000000000000cb570796f5c8f7b8aa02e76cb8e870d3365fe4dce5df07ec286a0a821f922b4003d5b69c0f1588206d9544013e268c400000000000000000000000000000000098056a033d9cdae86aac02de3a444471854b909680719154b44d4f55f30087294e39e57643c692d6da725b859239080d76db3dcb659eaf6c086be6b414a494dea4bd30aef8450ae639f473148c05b36", "Expected": "0000000000000000000000000000000011769e191fe258ffd1922295a9fe877ad5a52fde6e343730f8f5ec6cdcd584f8ed1dbe0f55b5dd81f5f78b7437f02abd000000000000000000000000000000001253689089e9192d10a45342214425de36740c120e49f596d24658941ce2b2ecfb50e879be0125e3d159088f88e234f10000000000000000000000000000000017b642d1b5a953f47fff8f0649263f16f41a0ec0397d5a81571174aeb85431c352e2bf6bafa6894d2e6cdb5eafff16d40000000000000000000000000000000017b3438d0ddbd2ace1e63802013b5bac00d31889dcb2d9653a6f6412d157aad2fc45267322a62129087380bec65ec169", "Name": "matter_g2_mul_26", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001214aacb0a5e6b7a40369a83c07fa8cf1786ce7cbde2b5a501d9c1292532df7822d4fde10a31fc0cecce3a7cfe3311850000000000000000000000000000000004f9669d8fe4f884ae93b2505710e6e45b19b7aa5df8cdd811f09e547efc27d21024cba05e2dc9d057055f30ec72d9df000000000000000000000000000000000a852b821b31cd27eca19712a636aa05ef2cd82c36ac1c2ca240edc7d0172b42a72c42d3cba583a5b5129ac1c9486e270000000000000000000000000000000007bd8419e791a5cea04993509e91a980d3ae4987a5b322400b6e4a4f2b636891a1c7ba4de96b53426dd556532403d5a39915646de2449b3cb78d142b6018f3da7a16769722ec2c7185aedafe2699a8bc", "Expected": "00000000000000000000000000000000089a07bf63b8029e0506393828d8593b94b73c750815552f9a3c74ef7470b5810bc27212ba02ca6fdcd97e1e28a52a1e00000000000000000000000000000000051a93291d4b912f0a594d45c0264a9073663a9ec75e6ee81e13e79383d96e9330bab845fd1e5163e5b28c41c4a854c40000000000000000000000000000000016610bf2b2006207046e489294a132937edbdf95caf508f0df3bf8502e641aab9c44903cde75cff3c1f86873e06cc58c0000000000000000000000000000000005d33669fd8a6256dc55f513bb93cce8bae62a593eb8903cb7d7902a7727efb8fb4bb2e5058441c30b99f146ff5394c3", "Name": "matter_g2_mul_27", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005ef88bf38b2f998dec7302cde829076e6cf69df23aa0bf6bbb39fc0d3d8b5eafba74efb928b1de0eeb3d86ec82612300000000000000000000000000000000011f47e9583997b19c36616e4bf78d6ddd6d67937f493986250ff02aef6e6e7ff074559af2f20a5bf1d67158e4a199cdb000000000000000000000000000000000007777c8eb259a836e6459b7bdb642f878d869fdcb31b105d01f280938ef5377f2775874c099dcd394abe70f17d595b000000000000000000000000000000001607379d1cd34e2d0ed765a339b21433e9aa489609b92414c6b5a05d796085269c288d739717def9db3502e0550860165061073223f066e35242772385c67aaefb3f7ea7df244d73369db1ea0b208792", "Expected": "0000000000000000000000000000000005aa23543088a9a833d773a71275e73fc3081e13c907b8a04a330df7d6c06618fe69e644e0ee55869e364d3561e40f300000000000000000000000000000000010eef9238d2c520f32243f07161f3e35b15fc949b9401baa1a9c5df7d50b2cb3bdd237747735b235862bb57322fd9d090000000000000000000000000000000012dcc16496c95e39ecfd8f0514b5ab2569d89826d957478cdecd4e827095034e974039b37e767a0f25bf057ed715aeb00000000000000000000000000000000000d0593865fd2172ebf1b94c7511ab7d433a276bf833515146adb6d79b6e09d7c18f4c7f4d3241c14d01a4ad0f31580f", "Name": "matter_g2_mul_28", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d6e3068c082b68312141aa68f1540ea1415e93e7f1762b6f06ff408a9995542da1c727a13355c19f8f418a44de1a95d000000000000000000000000000000000dcfcf2ab12b1a0e521ab402aaa4d32ff649a5a97892eb6ad98487c3c73c35601c313b8130ad12e9098d16eed3bcc2e00000000000000000000000000000000013777b1eefa4af03dc44e4e054eb7a3a980a9c55644900b80346be84b970e1754d1f4ab771adc9249e4accf88a23fb400000000000000000000000000000000002f53b231f1209c6f8b52f99a78bc2147c951ac89b341495f4a60a6572985ce2bc823625099ec214bc9ceedb2deea3fff396ee22209271ea0bda10fb5e2584e7536e8bb1d00a0dd7b852b0aa653cd86c", "Expected": "0000000000000000000000000000000015785bae0c27680cca2097ab52306207a61ba9903723f574091ef5e57c2e871e076d7f46e6e39f65a01e183e7bd822f000000000000000000000000000000000071110a384248664db46f21d87b455a3ad3c43782c68304ce17f52cc8579fb2e3378995d6eb3b8c97665e5fb7de665fd0000000000000000000000000000000019153a01c2b3c5d481474a71e5c67f27fae3232a0c8f1655ddd4da6b4c79870bfb0b6beb4af8c54aaf7e9251ad41d639000000000000000000000000000000000c58375439a93e0763467c6a11dada3e579ec53a968c9b9c1a446cf3224ea0c89c9ec218a8b78de91fc12f087e722f94", "Name": "matter_g2_mul_29", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000161c595d151a765c7dee03c9210414cdffab84b9078b4b98f9df09be5ec299b8f6322c692214f00ede97958f235c352b00000000000000000000000000000000106883e0937cb869e579b513bde8f61020fcf26be38f8b98eae3885cedec2e028970415fc653cf10e64727b7f6232e06000000000000000000000000000000000f351a82b733af31af453904874b7ca6252957a1ab51ec7f7b6fff85bbf3331f870a7e72a81594a9930859237e7a154d0000000000000000000000000000000012fcf20d1750901f2cfed64fd362f010ee64fafe9ddab406cc352b65829b929881a50514d53247d1cca7d6995d0bc9b2f0d3d4cf46265fc0f69e093181f8b02114e492485696c671b648450c4fcd97aa", "Expected": "0000000000000000000000000000000004c7495c03fc3fb4d0fd4e0e660d6424de9e060eac72eee3608ba95bac294a3a62d246f42dcf3b575ee1cf8e20a9106100000000000000000000000000000000091140aee42a9dc875f87f3ba29beff95138790140f8bb522c6c15281b3545995f9c13b0b73ae691317e674295db6526000000000000000000000000000000000a945a215b2861427e0fbbfc6fea04e79edeaa1eb87df5db8e5e017cf98fde7b8d5a04a1b2129a4aadd2e3924ecc0bb2000000000000000000000000000000000a43f8d3d92a03b7bd4c8a34ce31729ea0b8e6b051c30241dca2db31a02b6e537071a914d8f0876f944dfdb613540c6d", "Name": "matter_g2_mul_30", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000047f92d6306bed1cb840f58fd57b5b71a5df7f86dbfa55a36636cb495e08715cd57f2f3e7cd99a1efc28b1d684de1cb0000000000000000000000000000000000f4eb02d687a1a6105b4dbd740e2c7924689d558e6cbfee768dd303cc8dd0fd887f5eec24b54feccf00f473ca3f54ad000000000000000000000000000000000edad68c4d536912816cf6ef039c3dd0535dc52189583270b3b038e2c67b213d943bf384ce69c4a9dc526d7ef309f25a0000000000000000000000000000000006ff4a6b5129ef026d1d5704bf7fc0b474de92b5cf39722f165e73f4e7612d6d3bb40743e4b7b42d0dad5d5d6a2d4881915b717562844d59623bc582f1a95fc678cf0d39af32560c6c06e3a74023c89c", "Expected": "000000000000000000000000000000001821e14e70e12c7caf2a1ab651eb81dd61c4e1eec9a02fe4124abb865a7029e066f03b62e6ecfcf0fbae5151272b524f00000000000000000000000000000000044ac4a7399d6a67e7ee8cde3f5fe20b0a745462c870926f0ce8554061eba5bd62a8a08c798d8bfe30fba5567d47c7ec00000000000000000000000000000000178b8f061ad9282b3b2057f20c115c91df994ac40aacd05b7669e934bc7d650a0cd88f9fe17d7b766e34bed587ead58200000000000000000000000000000000188311eea279ddcf75f8dd82643ca3efd560ddbe6c8f2696cf7da03e65cc90d97b9f9ce99e29269644d8b881e624cca6", "Name": "matter_g2_mul_31", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017b32e613cb38b41dcdf3c8bb9187d731546977fbffd79fa7f66e3d6aaf9e1af6eca2fcdc260c8f90818d7148ba2f4960000000000000000000000000000000007e4d26606a47c874c20e8480a9f5815e5b577bccd783b775d10309eeb3d2102c7a0abc3324679e44362f09e7a4ada67000000000000000000000000000000000cb6f12ac8b49cfa36b957591293c87b21af0a949c55a28a90ab0fce88fb5cb7645e20ab2edd284f0ad1377dd95ac10e0000000000000000000000000000000014c96b5dcbd3150eeaea5c2bc27750cf88b30a91933a3233a4d1d9b357a80cc20d135e43a344e718dff5c79045c31f86d5c1c9fa11c36b86430cbb1f3ec10ebbe3787d0f5641d6d7fb96c810eda202dd", "Expected": "0000000000000000000000000000000012496dd3c1278b55bde81f6944c4bdb71869f5e5e21db7b1425ea32fa1dbc8c301e7f5e68cd7629c91650265d1361e690000000000000000000000000000000004a1251591efdbdbeda21eb89165ca61a2e090a73426451b6933d939161364c4064a67a90f859a7713fb6a9c5321d5a200000000000000000000000000000000163bcd07d030fd6ab8a8e0bf39b136dcb34f03925c3fdadf55e94a90bfde0ecde5c51d2f4d06954aa6a96c913f2ab4610000000000000000000000000000000016dc065a852ef9e038d93cc583b4a71db9b96a7e7a819dc530598f1ae256368438f52e4b709f15f56279b9c7f9db8785", "Name": "matter_g2_mul_32", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001ca1141ba9542c56de8991b313c6ae42fcecb6751b0b81b8cb21ed70d5008f7ffe831766b89880a7fa6dfdb09a2cda3000000000000000000000000000000000e6766b17db165bba564ac63ab88d3f8f5eded07a40b48644e60d3223d30458e7dabe404cab8d6f9fe135712ef0b1a43000000000000000000000000000000000dda3e6c87382fa762510e5cac721fd2b654f002f5b9a3767a8c6d651ccc582e80e3f68d6913cda30f9f51ebcfc7c98600000000000000000000000000000000059a7dac5bb6b504f2bd603d486700fe22c14f25254537b2c9079c2b45d36c7ce56854c5699cc7649b533194f51a9045c00eb20fe7c292f3ad820a074d8b3d8d24506612752d8677c2d6ca24f556cc45", "Expected": "000000000000000000000000000000000a2397fb3a3891d1703eb2112357c5fb8acb070ba9f3a39050be6f05b49b8d2488e94adfbf849c8b4a42e287077e9fff000000000000000000000000000000000cf2c02a97addbc1584091e411f9a07135f1fcf989dfc8ae29155ac90b214ce20dc11a1fc75dfb697694891d934abf0f0000000000000000000000000000000018fd4af647bf0456aff9ef80969613829f8eb837205df552aadca46bc3bf9838e0ff2515d3fe869f80d78e2357091d8b0000000000000000000000000000000003c5671ea4723498359f29d49ebe974099da3dd59d21065a721f7a4f14dc7fb1de3a67a707bfa4bad7058312632c6113", "Name": "matter_g2_mul_33", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000090f4b85961ce97cf7f99c342d3627105d790f611e19721a43d8a0febd67ae393d77a02b999108efb56f0397dac22703000000000000000000000000000000001112f23595d1613c47486eadc37f9b1ac3b3c3973b3fe964d3b67c3996fe2eacd9df5c287b0cea8e9475d146fabcf9e70000000000000000000000000000000018f46f7ba3c9af34c1025c2d460f0be966e68944928dbd55cc7fe00e5def598d80b0e3801e48a74963c974ab4727a52100000000000000000000000000000000096845338d5cd2ac44e097607d6a1a05c241eda1941991ae9edbba965d9029032c46da7218b5b2338e6c58898bc4a820f661d7b30fb11bef70e15b257d7073885468a380862202b2d705a84827644b5b", "Expected": "0000000000000000000000000000000000676bd7ce63d8b58cc1e5399ced9b495baba4cef9503c44760f92d6d9e092d6d5308fa88144491eda6c571a8c308786000000000000000000000000000000000605cebb4c20bc9dff0258f75a825f55f23a32cd0804dce56bf3cf2f19a3504f0345e0f1b839d4d5920aab19b363ae19000000000000000000000000000000001512f95f60a6dc79dd9261c321328ab8e22ff314e7582d8de83aa3bf280805cba8ba6d359a620fa6f0564396a45ca9760000000000000000000000000000000005837474ba78e0700c77141d70af1d8fb95a97cbadc95996faa93c2e81b7c8877d08d5287f83219a24bc0080e630e39a", "Name": "matter_g2_mul_34", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000aafe45ea7cb8b450a51263eebc28c1ded662972bee512e24fddaf64f43b74b66032523b3b104a4e9f6b62394436c6710000000000000000000000000000000015cb27e1fedfba2d1679f78a388f90b22bbf3e7d090f0ba972fa8e72f6e31c446f628fff929953712ef6e425d16eba5c000000000000000000000000000000000df9931893cae713042bf722db6ce394b6f346587278a154c271d8511e690417eb6dc47efbcebb7c2fb9e77f1de9fde800000000000000000000000000000000106ffa395ef170c99bb5742428ae88fa4fd7a94476985c099e3b700b7403d083281fb71a19640c6bc2321e27bcb33fe2346ce87c847376c8967cc18297e6007dcfacb6424e1d273930f38bb0e88fc5ca", "Expected": "0000000000000000000000000000000010b2a9b32e431c11ceb474942bbbd6915a3cff64a74d67570fadeb7447c5abcf1bb35c822d4441565322ebf75e61f64c000000000000000000000000000000000b75a0212232af0a59440482a1f953cc29bcd35272ef407925eccd70c1dc4705dc1e97d2da604996d3c52155d05d77500000000000000000000000000000000018751bc59f5907cbd7f1d503bc5aa266f4109fd3133a1c4c2e58e4a17250a40053b4489da4825b4c368b0f4947baa6240000000000000000000000000000000019b41fa1af9488596b09c587fc33e044d51674eb6087c647d5a762d85e38a587eb5482687d9346a1a701bd3a8bd36a61", "Name": "matter_g2_mul_35", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010b1f8b1c492a56936da905b8738affba6bd29ae5fffd40ba6b31325181d3b489a81b23dcb69f6e71bd29bfb388e5a8f00000000000000000000000000000000116a115303b4774da59844e457844232d088062d920db67b2a8450a194be7e5340ebd4d106454fd9a03c8f50dbb1e119000000000000000000000000000000000eb521edd61b38006cffc43ab72d395d669dec196846fa4d6d43521da6c2fc3bf0994ce7556a3cffec7751b3bc5703ff00000000000000000000000000000000073cea36eccaa1c78deefb6029903c2b6598301bdefa9759719c3b590fcc5a6a4d3d4d19f552b33f4a3126a6e6a8448639a142c443a666499a880aa1cb9f523411bbc8e5554de099ab485b6c2c2e57cc", "Expected": "00000000000000000000000000000000054836eb7ef9edbe914bc16d1498e0bc3c978bbed2518802c2f8e1c0b59fee482cce0ae8e805c33861d4cd595f6b8bf40000000000000000000000000000000007dda36d55aa7a890aeaecf2528a390c98d9ecfc8a5c78c2a6def30de55b90ae408ab770cf9a9a4663ba601c4f5765a00000000000000000000000000000000007ff7b24c8ed9fca572069e72b1e93978cea87a0fac7ba60f54aa573d881f21b73012b010e9c0fc9324aa7697bae0c4a0000000000000000000000000000000002d9773bf294efe64021e755e4dd2936a5060bbea5688b6369ffa3b94eadcc58cc3986c74ff365301be1e6c785939b69", "Name": "matter_g2_mul_36", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e3925fa085db73c1e67b29ae90f8773f83be5ec684402e8e2360ffee8a8368911e584843e42b0d470de78591df6ea6300000000000000000000000000000000075c7efdeeb16609b4a47ea442af4d75238fb7534fd96cb236a7886809d6adc2b62c8ff72bdb041bc51c1a71b68219e300000000000000000000000000000000088b4eb0dd185e51b737d797334590e982b7b0a5f109fc7d0524b2465c2c0457964eba5a6d2d4d99fb628f21f15a776c000000000000000000000000000000000fc79f6b38f3356972669290eeadcd992a22bc1191606b663a1e148aa58db3938f0fc65e536bc5811c50d9c7f03d3e372c01b7795c2d16b5bbbb1e107be36cc91b25130888956b0cdd344de9b4659447", "Expected": "000000000000000000000000000000000902c1082ff09bf93b91c9ef5e447bd6832fec9297cdb065f11fc5ee626e6e8834cb5d74775c586609a0394e6114e8820000000000000000000000000000000018e414a40c27430b98246fef556e74dd3dd7adc601e3c05b79f8c29169780a173be9a725df3318d71b6e82abf97930bd000000000000000000000000000000000f924fa88f43c86ec98b34379b9a649c7564ef0dc596c95df19522fd50fb3a37cae031e891a7a7aa6a5e6a9062c3726a0000000000000000000000000000000006bd3340412f64d02d0cb3ac44d1f31cdb1906e56dbfb66d86b60a74cd26c1e241963fcd8bba4109c428db0bb083e81f", "Name": "matter_g2_mul_37", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b87c47605fc060a8e3677e84ce9d14b9309360a13c80d040c625fbf0108f829300cc1fca409a0f9c96311cd4a9a21e60000000000000000000000000000000014c4088f1e7935cf6a1d2475b84497ce6a250ee2c0c991fe51a2f2836388a354824b02d9cf215328dfce3f546713e21100000000000000000000000000000000120e59be3ecf35674eac6cdc559599b273f13f28a529770fa156f8e519734c451eefb35023639f32049cd19ea0d945a3000000000000000000000000000000000f97755b62a8cb8f861ea02c77819f0b58181aecf612d92180ba9b475f0b4888b922c57f6a1c619dd5514620a1cfd9e2c712943d8795a6104f024b9701c70b09cdee9494755bbab0576e2c7f7c9d4828", "Expected": "0000000000000000000000000000000001415fbd8afeeb5796460a9095f14a8f3f6fe0374d4cc4160f030710a6d4d3a92febcf4dad770de3a3ba1a2efbd858210000000000000000000000000000000015792220c7e53262b56224d230a8a4b32019c77548704ec16da5ce167854305e6cdb9924c248f222d6fe95a8383af7890000000000000000000000000000000001694329d8e0f41256b703a8bb6548f1d9e0749a55c124c9b60361b4cb1daee24fcf272327ba598022a92815764fc8570000000000000000000000000000000003350658842c5b6fc5561a14df27d950a00c5bcc13d6d9d014bfd6dc95ec1a030594625f41d439b90b05275a0ffefdb1", "Name": "matter_g2_mul_38", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005860cfb6be6720118623d2d8ba05e686df22744b948421dd3cc1b1691e00d9b5d00d00195b4acf7a7b043f764f3f1c70000000000000000000000000000000012632a3313dd611e8d969bddd556c2d79ff387603462ac78ded3a842981697bdac34ee6f1f4744ed2ff16100874ac24000000000000000000000000000000000112b94c317586e343acadeca611c485c3ea172bc10dd39158c1e678007130062a921b53826d7be6286963ff822f1066c00000000000000000000000000000000040de8c0dadd2a6c2a7ea0fa43e1a5f2f5a6be3fcb0de6875d8cef1ee2daad87125d12f6869c4dd3d931b296f1df2fb3d4d77f6246c57d398c57848db8d3f986c475a41a23d424cd3cc2b362c1b99f2a", "Expected": "00000000000000000000000000000000054c6cb26c8b0a9a4700e0b95348e6fb1190c577eba03a44e84fe7744c543321d02c4d8f55c03f984b44ffbd899ac53a000000000000000000000000000000000e7ab8da5d573cb88a78f6a6ad2b307bf867777f79a643b6ec89d9cb208711c85d7d2cf8f8ac69a8b322000fc7866024000000000000000000000000000000000fbc5926b9dcd9e4d1ca1a2b43dab5c98aa20b37aff0868c54441de44eb014e5283010642717fafaa95000f4313e14840000000000000000000000000000000003671ee05bc20bead72f2306203dad55cf20b13d3bb2cca079bf4391411b85ed4df55e1426645d73b6935889d4450c58", "Name": "matter_g2_mul_39", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006fcd2c4fe848e9462ba1112baad39031c210952adbdd06293a622ffe2d1c6e4fcc8773ec8913717018b97bcb9a554fd00000000000000000000000000000000130a97442f3273b7b35464545e7351faf71ead9b8996c63889a45945ed82bba29bff5014776c6185219a5234d8475c92000000000000000000000000000000000491d571bac5487b866022a0714be11b38bfb296233845cc434a50be1d35f516b8c6b046fe3d0a8f4f95ac20eddea01b0000000000000000000000000000000017e34b04e6fdf152c848f2432b7bd84b3dba3915f06eb77efb8035750aca9d89e92e1d1bc4871105c440d639e8d8b05541776ed9d1029918af4c5113a6110139b8bd7f938caa204373a28ddaa51430eb", "Expected": "0000000000000000000000000000000013fdd394635f42a926a2324b8cb870b5995772ef4e25ebc1da41dc5bf724f747da8d95a28dd703b5ed65ada5555c8b5b00000000000000000000000000000000118fd550962d1de8f1e60c312643ec7cd306f0bbcc932739270595537c8d290ca7e20b962fcde570bd2ed7ea43009fe70000000000000000000000000000000018b25fef4b75fc7649a489d078311dfb6da9909f472de7bd9bee9c3ee353f345c83119269ab797fabdbede41e0fe6169000000000000000000000000000000000b7c2a73741f6944ef4ce8fa20b2900612645c224818b7faccf6597827fa07f7262295f42be5f34a751a6400495f7eaf", "Name": "matter_g2_mul_40", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f1b8df4e8fdfe32eaf227f5af9f2befc85073468f10b81d32d0e126fe2b0cc8e8adb8afcac73213b6ed95e8e843b97c00000000000000000000000000000000004e3fb435ae0fb2d8bd091f250aefe5922b353a64e16abd75627737f3bc56639f8b40652cae69c73ff1969925b0afdf000000000000000000000000000000001003aed7cfb00efce49d6b1a8eba27df87479a4d37bd7fda6121549483b669a1a761204b0dd28262bf27e5c8e180540f00000000000000000000000000000000114fbca7caf782b3296d0b26b4c362bf50acaecb8bc5726b2c99f904ec3d092d5d40991d0d30c8e79fddaa45f04a75d3fa64411438542922a7bac10806efaa633d31d37c0b223314a8b6221155b9c425", "Expected": "00000000000000000000000000000000177d29de8a81db2e515d4241e5f7e3d35de22bbcf9aaa616b057cbf2dab57ab8d98213cdec82a2034964f3e1def8a4e3000000000000000000000000000000000a0cce8113eecb064a60ee2c470dfae8b3921f8da2c7ad8dc918b355ff44542b007add28a44848fa8d8f8671617431ff0000000000000000000000000000000010470fcc723286327e951e758fd0474de394778d0c1ec5fe6f263dea1957c60f05dc8f9d82b3c6a7d73b3e783f35ade500000000000000000000000000000000098a6ed331f03da7ccc9148f07b19b132152e15d9fdaee5cc092524b33795edf2b458b4e8383c5e29affd3f025094033", "Name": "matter_g2_mul_41", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017faf481fd4cb0c373d21d7caad40e93d9a86e62d26136892fbcc6f6e48205543aff00c45e82fdd1d3e0e733de91e7000000000000000000000000000000000012e14fcb9ad4d9d15347cf004745ed4bd92097eeeb41c4cbcb728a234616363589d8f5ad4cbb61d31a8aa27627723c7e000000000000000000000000000000001513dad1ff27e053902e779e35d04cab648939317830144ea775c435a4b55e13fa2fef03a1256abf5c187487c25a774f00000000000000000000000000000000139da29de8587c7d0ca9237c37a116387385e9cea453b9e2003a37ede7aa0a3f4c1df55255897f5975b662be33622dbce7002f41c6acab677a0ad023bad2a61b11c1b7221d944018b5ce60bb61e87e96", "Expected": "0000000000000000000000000000000018a1f1a60172a65abc8f2d855ee7510c1e0af9bada084325027bd493ae86ea2c62c15ace7f63562a82cb80ee7095661b000000000000000000000000000000001736b977fb52eb1b466cec3d42df7e89047784f0e8362eb6425e37adb1e84d0438f5a6e82c7b31d59b0959a5f4aaf9310000000000000000000000000000000013ea0f849830f8e48161e840295637d8596b32eb576560289620b797b14bd395d835e8140b69039c904ef1d07a82127b000000000000000000000000000000000d7f58873701c138cb7e18ffc36cd0e47b07d70448ddd9fdc4b947003fb29cba0775916c752d531e527ab744c277e5da", "Name": "matter_g2_mul_42", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c118b147ee3489f30c6ecc0256a314ab674110588e8b69ca6d265fc270c3e5b767817f861140cca5d7c6be4012d1ffe0000000000000000000000000000000014800790654726959fd876b035bade0da744fb36ee5b304f228663a531345120267c55ac19fd66022752010e5bea7cb30000000000000000000000000000000000193ab7ac2f151750356b6e178557460c9c2672b1736d19a20e3fa28082479ca60021aa68edf2524f1aa826ee70b65a0000000000000000000000000000000015cee9ac55ab45abbc57d0ea6ec9ee49f6c59f6b94f99589dbc08ee877d3a261ad77f5473fedd72ed7206647eeafb6eac26e55f09b787c0542878e4d720027d9ea465f829a4e0164cf618c5d9cde49bc", "Expected": "000000000000000000000000000000000290fb3f38937ce4439ceaa21cf3b31db8a22f9f5ad9db0fd7d38ca978192bc05d41152f8f86ca7b2ee0bb58e125f57f000000000000000000000000000000001775913fc24699bf08f25fb946fc6527178ebb821c654b7bc69f6f86b5168fc42057a5d3bfdc53b3d57fa1ac05f7a0930000000000000000000000000000000017b9043cde8dbf500ad90463250a49f56b35713f2fd9a35d8391fc36c78c083e39674592a98cb857194ef9e73a62a397000000000000000000000000000000000e5e62e39433d443e7d2d32754d2ca2556cf6deea45e5076ac040e3d6de14e9965c53f8c65bd98ae7d17ad3a26f3accb", "Name": "matter_g2_mul_43", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ef203fab794a0ef29eb2ebf00076134e5932e27c99d6d445695b9df2afe7563602e318caf5d44724a21790ca0ab0d180000000000000000000000000000000013b9b1b1d3e98b61b0f1a0ef3a1a4ceed57b6c01849a4ad66a86332b3d27022cfccadd3567e6709d2de5b23b23dba43f000000000000000000000000000000000c1fbace49684f4be32ef6178ac3a95ea3f50b11494340fb73dc5391d50bcacafb3bf0f2631fea9c4ec47327d644489500000000000000000000000000000000040f82812855aa3e3aaba826d5810c1049cf44e86e44e23cc6da437971b529d2f2676c73e1fb9da52640c981fbd710bebba67cc47e38a129ab1140fbcf0386ddba2feefc919aacdce6059a27a1e2efca", "Expected": "000000000000000000000000000000000d9927347a9ac9b0290e68143fbc6a5f4476604c3fa5ae87e729a03ca055e4c6543f9245a4592e195180d88781e46ac900000000000000000000000000000000175e0ee8de4002b18f32f70f1bfa9e0be87288cddf1c436428c2969884112bef5db19e041cbaeb23596e25cabea3777300000000000000000000000000000000074ed9e981818102b9ba818d478ba27033eb38e3fa19cdeb9f5820e59a64dc451342a160359c54bc8ec7d866b62080ef000000000000000000000000000000000a853930020bf01e20816d3aed242e00792b0d0e78fb15403fc3cc255f0dbd99ea6ae1d59d5978e562be4862b3317324", "Name": "matter_g2_mul_44", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000060d7a718dd02b147c265f71eb136d1f31781b12a41866b4f86d7374b93dd10058c192cc0fba928373b1526e1a5d7d7f000000000000000000000000000000000cf29275373c0573ef22bf87919faf5444847203c7dc6d2e18986152cc294be04a5b1a4b0536797158113a15276c4fc6000000000000000000000000000000001016d5b9d4d200d7b4b7cc3836b85d6697fe14db350badba9978c7b56983dd1a7e572640ee0372b0a4e2079ff4c1abf2000000000000000000000000000000000f2768d104d895473ddf8c6b3cd0e7c22458d0037eca6365c766879a07c95037ee0de00d32c974d767080935abbe0be1705fb566367d9fc142c4194b0525c16672b843aac1160f9056ebb115e80d377a", "Expected": "000000000000000000000000000000000e9c290ba8a22f7bb3f7dfdcc9f5a221a5ce838d4fa85a00473a4dd830bacf583dd91a6a6f78d2ebb54a4c1bb217f793000000000000000000000000000000000dc51b0ae8bda6d28c51016764fc028258171d7c7646393228692aef7f1dda4a83e53553f63d6ba996d4c0a802bc967f0000000000000000000000000000000014ab155029dd35206811be9ca4efbf762a1673367e6b57528f79eb50008ce7c3b49a2d25da0ae68ac4030ab4bcc0daba0000000000000000000000000000000008cd743bb52e7908aa973c8518eaded75fc2858f4edb25fb7f2e09900f0abd3ac87e93cf1068bbe0c7d99619aa7a6b76", "Name": "matter_g2_mul_45", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017b9ca4349fecaa43ce911c0b256680edb8a0906ef5460fc4d2004579336df1e19560fe960a7a7cd74bb6e8272e08960000000000000000000000000000000000d5b96dae738db59cc67a51c61bec6deaeefaaa51e3259243fa4b142ef59676231229ae386ce699fbe18c4c00bf9d49400000000000000000000000000000000111b79f4b68dad16550a13334d09dc38336a75a5da23a17b5064e2d591aa3dab4c2e982a9f730a7633070504663a24610000000000000000000000000000000018f6d3616a7eaf17c805a88c9710039644d01b61aefebf76717ddcda6f4bb34aa15702de1e92bdb27b27f3409638da90f7bfd990cc4dac62a0d730f56b4eb1c1ad77ca9cd58b089c23c2f6efa00b7fa4", "Expected": "000000000000000000000000000000001746a449993b0684740630f3f0e46eddfa135371e33e8de4dfe553c78845399e63bb3da48798b35df48d27e1f991954400000000000000000000000000000000057e0fb1113968858981c9803166d8b3eacc91bfad320ea0e610fbc5b276da1b46d74fcc54183ba61d1b2fe6743097c90000000000000000000000000000000000b3a178ae3b739cae3e80f3f44db42d8c465a5cfe4943b449d4c3b7f4ad153916c6cf4fdfece14a00b271222c72764300000000000000000000000000000000041c8b293ded0c647f2e4d6f9b35304179b723c3e6e421a5cb103e561d1655b92e74877ce22c99f22a3700c3aba9ebb9", "Name": "matter_g2_mul_46", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000aeb5c087644595d0912879f61959d2731ff55260c682ed2bc5fc55c13964ef7c1f70aeb55876d2264d558c31371ca69000000000000000000000000000000000e173848f4570525b03a2b2c86f4dcdb8b28dd6d18c1354cad31028eb1b8b44432c2346edaace093e3954c7fa6d338a4000000000000000000000000000000001949b0902506d111ef6318edcd7a58ca4d69f5804a028aee73c3786cb2db168c6a73b77194f7a021ae6ae43ac78ade340000000000000000000000000000000017c5e28ba6103d97e2f3d3611c0c78f06406e0da8a49ae29c7d460b52f75136920784cd500aa3593858b877697eb8424807c5a41ae2baa1e10ebee15363d1d4569f731d77a418998108f5dfae0e90556", "Expected": "000000000000000000000000000000001103cc395acf81772955bda38f951a81c5a6a476c0b5e1543616a5a7a7be22dd487ab2a8586524891300adec5225b4020000000000000000000000000000000003479a08e2811ae9aab0301d66ada470935984d7466201f3fb28c610c0b5f67e7305f5ad3514cec5f30b51d0aae775d40000000000000000000000000000000005ea37a6d20c1ad0978da68ded3a5bfcc5ad8fe81e39b525fe7d1f2b2b1ab0be7ada80173b1d0b7fe1e06ab6354e64b10000000000000000000000000000000008f2093151a285dac511df1755e99a652a1cad0af3a019650fbdead1421ba8e84afc9eb0a4fea651f365d72f031a0ca6", "Name": "matter_g2_mul_47", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d4f09acd5f362e0a516d4c13c5e2f504d9bd49fdfb6d8b7a7ab35a02c391c8112b03270d5d9eefe9b659dd27601d18f000000000000000000000000000000000fd489cb75945f3b5ebb1c0e326d59602934c8f78fe9294a8877e7aeb95de5addde0cb7ab53674df8b2cfbb036b30b9900000000000000000000000000000000055dbc4eca768714e098bbe9c71cf54b40f51c26e95808ee79225a87fb6fa1415178db47f02d856fea56a752d185f86b000000000000000000000000000000001239b7640f416eb6e921fe47f7501d504fadc190d9cf4e89ae2b717276739a2f4ee9f637c35e23c480df029fd8d247c7a7e300bcb3c740fd1f693d4c8915c4c46dcb627f6de6e4847f123623cd23bac7", "Expected": "0000000000000000000000000000000019f79677ea0e011e5c9a892a407646798b05be05337c73135cb771abf101f450bbffd08e125f077f5ea989decc009b9f000000000000000000000000000000000ed15f35966024cf1de2926108151e976dcb0d51b2736b0877d79de81f6fccb9dd299d14855f4e257cae33ab7455b95100000000000000000000000000000000125e2fabb5cc95c0a7890e9ff2b70102a97a03f2d11d915cf4332dd049a467333e12ebb27955c0310ebdfe2afb3173ee0000000000000000000000000000000011718167000f9b749f1615610a30023db4b986364da5bbdc4506c726624a073548a94307b282590cd8a43b4900a1afb2", "Name": "matter_g2_mul_48", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f20a07526a082e88630a0256d134a8a5e8ada07b1cead39ee838dcbb30904e9016107fcbdf1f8ba182308dbe0b043d20000000000000000000000000000000014fb7732f67abf60c03ac902577532d0acadb5f3db0d6397a42ba693526ad74f2c61a0195bdc9704aaaf12e65aa6d88b000000000000000000000000000000000018cec4fb81c85d304588d11f8b9c51f5a053df11463e5812a1b2e6c7144522ba36bb91adf219892d0007cee470032e000000000000000000000000000000000b8e52d958a12a9037e8be9bc0d5045cade2d6ea05c6e68462b3a30b5d4ea34e5fbad173761e4e216b2e6958c8983b28b473df5e282565a0783d23e65e283a103ebbddb5c884183cceb62fc32d0e9602", "Expected": "0000000000000000000000000000000005af8fd9e79568b46fc42b2c1bac62d115365834e509dab032f66425b7a571a4bd3bf702299d3c5f36c372750b3281f30000000000000000000000000000000018499089f306b3c9f7a645ca2f9aabc4e57c046992fff87e832e21e21875c6adaca050ea8bd7043afec3a36ecf8eafae0000000000000000000000000000000000827fa0f46134e2dff80088129841f0469ec7360fd8b9864e9ed99c5fd3458e6360661ab4c671846681d491b8b823d200000000000000000000000000000000120f829e8d0ffc360a14eabaf52bc653b1e90a36c0a8af806ca745fa306a9739e31435039a377e0748caf5e80c2b0b09", "Name": "matter_g2_mul_49", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001468cb35a60898ed129f30c261b8431df6a154c250ec16d85a22f8717593b2c21853d123da86d977a7938c5ed74ef23500000000000000000000000000000000011f4e28e31b5f9e6877192a5e632d8c1ed7ca0c42e6e9902ca68f1c2de0f648c6064436012c5c7b14bb8d1078e02f2c000000000000000000000000000000000b25114b2697ca7eb1e6effdd1054893a188fd382d387ec098f846c1137a9b9baad01653b963a0b0bf3cb50c3ce3563d000000000000000000000000000000000c1d241cb03e642c1752b1e1886472477c19a2801ec032dc220c3243952f882094119bb92b621b654b766bc900d2d4f7a048ef7cf5d1f6f625ee3aba091147c389ebebc5b8f3d285e16ef4e8afe5c013", "Expected": "000000000000000000000000000000001745500b00e5ebc6f71c779ba0b0f8d6601a065c550ca19de9562455423d2ccb507e659b0dce982faa841267fb1a27d90000000000000000000000000000000009c36b54f12d130868ff9b9b61b714fb1067dc91637c09614c51b5aafa2cbe3ca7dce0f3e366d4200cbf603ad4fd630000000000000000000000000000000000172e543708bb853712d81c000c9f9f2378e628b4d13b074317e95deeae98e11e7f917f91e02a0b18cfe9b25f1b83f16700000000000000000000000000000000189fc572ff6a8c6606ba0cea7da7040898d9ee85a58f12fade8c5a22031ff26c2f9cc612bc6e1b82a0999fa93c6fdfca", "Name": "matter_g2_mul_50", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c80d4474390fa791ea5f2f16b41506d8ae13ee0993c8d31a07712687298ee7978a724999500c42400d2f788a5a36067000000000000000000000000000000000592705cc5a8875750a4e6ceb42aa3bef5593eda9e8212702a2e08ea70277a2a66526bc5237be33c8449301544da35e60000000000000000000000000000000000facabfbd15284c6433f17b0e6035d4fdd84d3ad2dd30a27d52809652ff6e7a684d7724697919100567ad0c3e1a26320000000000000000000000000000000006a0fc4e2af69ce15a356656f5d182a2cf213d76a6047a05a1a3375909d245f5316b91333d2141c0817438f0d87bb52da9b63c6bf36997118d58600c1e429c105a379b9e8b0de934ab9f433a4fa63dc8", "Expected": "00000000000000000000000000000000013c6f777df97ad3ddab9b7486d54d1bacb3b40ad3035b47a25a66c02e8866955e27a8ee52872c8222ff7466c1310bad0000000000000000000000000000000014a5eb510d7c743e824f4daab21c43db4d6de8ab2e825d13ae0e186aaba828d7b4a2343a11011a8ec4ea82f456e394a70000000000000000000000000000000017a55d3827b78a9c5ea792b705eba7777df74951930791b17ff5b861e98a4488f83007c073c3e904ed4ee328b6f6171c0000000000000000000000000000000019bae02f8d6f1e31dfa09f4feedd5217ade66f6e8248aa98b273574f72aef83d5048534ed38acab9e0eb4c64f4389af4", "Name": "matter_g2_mul_51", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003f629618e1fc3018bb836301ccdc59022f0a25cc9c5de6e4c31fa08feea525c83256235e4ec8364e77e5df478f5f62c000000000000000000000000000000001120d6af221ba6f4351bbee4c2c664a769adb17872646df2c408f70c99ea991ffced4eab50fa98be1bb9426915f125930000000000000000000000000000000015cd16b028ce3d58b10aeb84b783475d894ab3f0cfdf7104ebb4f3417a038107128f07518dce548271061cb8c97e88af0000000000000000000000000000000018379875b68bc26107f9a068e5034f29dc2ae7e8830f8e9ecddc53fe7991206646cda33d37b31a47a977b46be58d7618f228da17f49667c113d2bc2a2c8a338f80be68496f5145b4be21a5786ca6d46b", "Expected": "0000000000000000000000000000000006490c327790b4c451f93197d7db24211a3b4b5f573a6df409206b4bbfc36bd10d2d0c989889efffd8f4daa4a68b211c00000000000000000000000000000000168f224738db3f07af77494f52ea5e957812a1acd62615f0eaa95c1d363cfceff29be9cf3be5329bb41175a0231ced4f000000000000000000000000000000000321f06b55f7dbfd4900b329c914f9ab9be2794e51e54498e18f83ece5bfd205131fbc254bfbf624d57ec2954b05f6f00000000000000000000000000000000018ec54f3e09bb2a6b112b575f9481bf1c85666133051e9c0ab53369d14eb90e27d2ed02dcda1250d5d539df0d0cda37c", "Name": "matter_g2_mul_52", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000036570783711b381830e35878fbeb187b84884a9a0e88c38e84124515b470e6ac18157e1499026b27f4f731a961eaf330000000000000000000000000000000008382838c18d56c046a8db495babf8d14c915622d7917ebe10cf7da7ecb65f174cddb9e70d0262ada961b396c5511b410000000000000000000000000000000015f63ce982aa581dad5c71fc79251b7f6336c4e78a4a0f4cb6f87167cabd31cbec987d7af4f11dc6d693a0b0774864130000000000000000000000000000000015c001372fe0530a3f50fb8b30e75ff4b264d673e0448211d082c7a9018f583b4d01790019874596c59c68768cfa3e699431e18a462fba704216b516e819fb3392e315b0c92a7411a329cdafeb511244", "Expected": "0000000000000000000000000000000001641b4ad10da5089164809d82ae47f74e27eaebffc2a2ca3c1b924fc69c1ea80ba3da78c78e86957f6a24e7f75dcada0000000000000000000000000000000014e781e4fe79ea1654460f4b0daddaffb29b287efd8168cb20d7ac6c729f684c5f2a7cfa87885accee3a797febc904c200000000000000000000000000000000001c9a44547f0c5b1f4df190285644c5a31df61e3de7da085835ebda917d5e4163f2deea9a83d641a4759fa3108567ad0000000000000000000000000000000014c3d2a79d80687fd6e6aa423257644fa5d0cf641aaf6a7c5675a810767904166fabd9a2ced0727e3badb932e46fd181", "Name": "matter_g2_mul_53", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000074d78cdd35ea17a3013e2301fe9f80f2d20d270a25fdead37eed7697a52d152612543781763e6035fa5452ab12cce25000000000000000000000000000000000e572236e1c203a1c0f99e6ec978458c1a143a6a650eee27cfbe406bb2858fe5f30222f468d119703c2f442bc644ff3000000000000000000000000000000000125384343fe132e16a9fc15efe1b3a9e47289e0afc4b44d492e33a6216edbc96d66c1ca66944a8296e7695f27f414c5b00000000000000000000000000000000084c2cbf0d7c932c3098ded7c70d4411eed882feb0f79e0f7f1c31f5fccb6d53fb57de179c3ba5754bc5e532c3784df12051041bd2f12f6e6e29924139770fe209b7bbdbcd6c0bcabbf5021a7dff2d83", "Expected": "00000000000000000000000000000000129554de7de9a2b73340d94d96f0356a2d1c0524cfb007d76a75f462872e831f45553de05f5b6a1f9eeae37af7f6b4c9000000000000000000000000000000000b1ea2a649ca13a3dc7882f2423036670f68aa05792a8fcd72524420e37381a9ca80dfea701fa5e6da57afa534059617000000000000000000000000000000000b7ff27aba408f9759b5109600cff66c03cdb4bfb3dff64a4838d0516fa46bfcf429fcf9d5cbf74a27f70fdccdb1238c0000000000000000000000000000000005a99aec88967fe775c691d443e2dbd45080eec97e686ee6d7b32e801efe6563315bfafd5c7622d0543519cae4417029", "Name": "matter_g2_mul_54", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004d46066439c3ac559cce863c58316883651023990180470d2efd06e443a7caf3a514b54f15ce6e850d32779215bcf4a0000000000000000000000000000000019ce904b6c9c3de59f7d5017f60f1978d60c564f94a0f1964c24c876d1139a7ffbeb6d0d4884bbfaf5f2f189af6904a50000000000000000000000000000000015f1989719e69be95f25dda9358fb98aae2819e0deb7e2d291e2c01e85ba26a9da421896c6b6e2ed20f609b533154694000000000000000000000000000000000b287cfcf1dd7c6d735c1358dff15393ddd6c82e7a33c5d8005c4234cdf823c76a4725fd74cad74b3ec51df67f09af0fb96df57a600dc3b5aabff5b1034886d24f6fcf035bcacaaec738deb2cfb8f852", "Expected": "0000000000000000000000000000000007997a499b2194cab634750a189cca6783ff17d866d66f5998603f8639d2242e8039222c65b0d14001167a9b09afb58a0000000000000000000000000000000015050fe6b335884a225efcfea4acd025cfc05e8f5fe9a0e22a0c91b55664c118d79887de91f1ae6cbc081f6f55f0067000000000000000000000000000000000195b23c4c2c087082c30600ff00485d169dbd360643d163f1db363f270cd7d4f177c36b4c291d50da4101e67b229d0de000000000000000000000000000000000df596ba2350ff7d3e75b4cbe5f8d6b2cc0e14b3bd6dc021936e3371ba64031f6266fb1d2951801309f22bfb1c4b27e4", "Name": "matter_g2_mul_55", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000006b37e2226957d639fcb0bcd6c20b3c7b8372e7347a14b970e01c67c1859fa97c754ce588d0f835ecc053549d963ab4000000000000000000000000000000000c6a5fae8be3a32e3f70a4202a1ab6d97183964b9f7b9a084c49922cd9e0e952b0bb66c5580f0e0c417e079493bcdb4e0000000000000000000000000000000017b6132f11adc0d5d693ae7f3a0f89f5779708083eba23e03b0c9265e4e60624e1fb6940e8ee49d31618fa6389b1b50b0000000000000000000000000000000000a45c5f6df71359648aecb6434bad1619c39f10e279a02b3cc9725d0256bcd126843fc9ed29cbe02a32cbbe79774a3378176412b07eb7f423f23ffeaa0ee642590e0b7016bc063f3fffa93e1e35484c", "Expected": "0000000000000000000000000000000001fa243b548f8f5c2e5d7736ca6fa95b74dbfd31f95fd532b94f81a255c73e7c0e000e20f9ca6750cb0dfdcd2c1aea8a00000000000000000000000000000000132a893a2326bf61962e1855331a53667e6279ed7358bc84c4a7c218b6cff1d3f449954f56daea72bc2779c60f1113400000000000000000000000000000000000091dd23c75dd8266f556bf27ba54c95c3ccab06168e4e6d0747239722afb20f3db27454c6db3a88daab0ef10659a66000000000000000000000000000000000d3b2e3fd358aa3dae983e87b5d1fce6d5688e66ced6e3a2c96b8d48041557295d5932af6532c13965d4b383fb252518", "Name": "matter_g2_mul_56", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ffed009c78ba9af8cd33af7b7697ae4dff863bb92365055baedd2299b7f5b5e8abb84ed434f7223c3e309ca53c08aca0000000000000000000000000000000003b2370c837dd6291818efe7c9af62dd51295c418739ecc509d42c92e2c97d12a9fa582946e176e8153fc9a273140b2f0000000000000000000000000000000001e63438e8b4a0462cfdff64a281ab4a7f48d51b51325817139f8ee683484f8695f1defc0c3efcca81d5fbff06cf9c54000000000000000000000000000000000192fc391cdc1ed6ddbd317f2f366f2ce25ba27b8c0f09c733e7bc0c0697544399a3a4f1186d139a8f6399ffa88e89a69c4b5627d84e153f3a4ecc14ddd6baaf1d62253a0f88d3af51be18d991976da0", "Expected": "0000000000000000000000000000000005095d1becff61df906815842112c6508d6cade4ef5f4b7418f5f01e8c5a383addc1c572237613dfbbb88bcff80e4a44000000000000000000000000000000000bd2561e7bfbda8a48ee038855e37b03fee805689452e9afaf0da4185e0c194e407ce7149b713c689d25f953da36dd1f0000000000000000000000000000000015ba3ae4d4238175425ac5dcbd9e6e9e055b8c1b7752931b524fb546f7bee8723ef2e69351450c6d1ba3c366a22355e20000000000000000000000000000000008c17d77dcfda00a1d75ea0087c58e74263ce5ce4066e979c66397de8e236708831c3a9ca6b35ade8038a28930655eb6", "Name": "matter_g2_mul_57", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000002e105e0eaa418d58019a849b89accf665a94ffb0bdf308a11b99b521de7af8ddb150c0e3b2e9c54cf5456b6105bc81000000000000000000000000000000000691a3b3986fbe1c0ea22329364454f37f645d6abe9310e883b9191ce512347e074e18e28b88c2adcc76190a549b80b40000000000000000000000000000000003f3a37a763c8d0d99a3fe36923843a22cb0fa18ced48493b2510fc99afe5b7699bbaa6c2ecdad8aaf72969354f121a1000000000000000000000000000000000f4bbae00205f54eb10c83d928d908fbae342b76050e33c51b6e282e02b3c1f132a4728dee4ea95455c25fdfc112f2542ed270764791aff081f1dc8051d22b8e18803a7e310393f21bb4a495a445cd45", "Expected": "0000000000000000000000000000000005cabaf39b93d7fe15ef6a7a3031df58219bce702a5a77162551a3d916c22e8ec9af2aa20659e7c4ce5f6382a5f82726000000000000000000000000000000000dcefe1a48d8c239164b54771118f7520ac11a7a6b72d8e17be1cd788cad2f26d3a0d9113e6536426800a744be9f0d4000000000000000000000000000000000199d95a44a4334c87aed273a0184be9602ba443d5b8d34f3495b04e927f4687fb88487f586395c7babb4f218fdbecf8c0000000000000000000000000000000010972032f9cb3e8f45447bdd06df82656fbd3ce38a9f7564c6e5d62ea3596c9b7e0a94046f1c65bf0452ca25b15a885c", "Name": "matter_g2_mul_58", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009a3e98fe4a98582ce9f274965f376cb45e8583775dbadf626cb1327c1f8a25b293b97e7f8f31ff72ba7e8e769ff25ef0000000000000000000000000000000018e4785ccb76c4897087c8a4242ddc744c6a0a53a4a844254153c23d6f16d4ddb945252d13f93101613f4eb0b1e2b8320000000000000000000000000000000011b81d344eac04d3471b1edde5e51f31f97bea3396580839fa094db58cf6bee371bbdc045fb60c3ee5c6cd5d3f6d3c4700000000000000000000000000000000073476bc5b1d52ff4ca89c3afc099417f473543fab6e59cf9de8a19705dc4bf2a210b1e6de4dfbde035c312be0c70c56fbfb7606b64eef0460b8f33a0be54451fb655ce0b81db89eb7862f392450354f", "Expected": "000000000000000000000000000000000f250b5e47ef616be106a3334e2f516061eec8f7ac69f08f6dfaedecd76fb1c9685ecdac2c3ddd534e3947d007ab177000000000000000000000000000000000073819a6de38303725aa3a9e5a7a9122b4d1e60ee8deb3554b5e06ef5e60d71517c2279c5066af003b32cdf83b7fcdf200000000000000000000000000000000070721107ac6dac198f7ed1a7f84697cbbc3199a220d1aaf82e6f015963bad863f99190f18a482f730254cef753ba22d00000000000000000000000000000000169910eb30b8fe1ad8f84c4a132c6c74a6ff06ed6e792af3baa6619e3c8aa6cc3e6f687299467ec9554f9e91bee77aa8", "Name": "matter_g2_mul_59", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c414b95b298b9c673001173ba7e5ee3e03926f28068481cfa0b469ab556f8fceba9fd0a815180ae0b82c265fd4c6b7e00000000000000000000000000000000054a242c1cc1a9c710bc23305d09c2d613ee8eb3840b37943bfe83f9c1db456ab4436ad319fcdd8684db129d76c95320000000000000000000000000000000001683711c0c7f02e67374f190eed1ce6559479d6d199f43fb5b0ce7df7774a5cb21c86b3b3498855d9b69c5763acd8c4300000000000000000000000000000000062f87085dfec847af518bd71c078f994b090c3b27c6eaad79772ab58afa43993db52fb08649a32629d61c3db12c87318a29fcc442d0c2446697e94dc47181dca7a314f9073c06aba6dc55aa79978d7d", "Expected": "00000000000000000000000000000000106e892e336b2155909946ab73b980ea761cfe8c48b13ae8a5302eacea08b9cef3e60d5b33c6ec4033218ae5761433dd0000000000000000000000000000000015daeaee59f3b4cc26d3da745661e74db8fe1ea115d50ba49ef5e6151a9ac2f3135f0232235cac7a53e1e8a70eaf0476000000000000000000000000000000000ff494d17c735b934c2c7fb8f413103188fdb116fa8f4d4e43262968ab0fa1bdec23b0d4d8b1c2defe624092de36610d0000000000000000000000000000000008f70b7e9f2d7083774fbce3bff58a1c73fbcbcd9cb049cba71c0c3f0c363517c8956240bcacdfb7934d4c67b1bfdd2b", "Name": "matter_g2_mul_60", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000083eea9b5b2d5ac5f7ef51ca889a4317322d098a408a741827fb3419eb12a51c07c788c2798cb37635e224e99bbc894c000000000000000000000000000000001312ec00f4b3a4305700b44b3f215779a9a8bfcf5b5d3a7f237a33c5484099ec9bc5c8537fae768e2c0ec62168f383d6000000000000000000000000000000000cf1d5d05d11e1d07074dd34211d0f00eae1df4dc550c55bd2fdafaffa1ad36abd5da30c5d3a5aa2845b1d95a5cb571e0000000000000000000000000000000015223baa9f2ea4b04fdb05b05bf3a94dcabc5e64189aeee39c380de9a34fe6b4253f5795f70bbe51b80e1aec1eab7196d5b468797b4af1978983faebe59a28f34956dacf5b7f65d25548bcedb518f45a", "Expected": "00000000000000000000000000000000098f32b35e3b7dc1862ca1ca3c76d009f016c6b91c227f2cebe8f1fe87567d936bf1c54103bec31b3552c077c0242fb40000000000000000000000000000000005380a66d48d348487624a15b63d2ecf6976b5b599901101ea8b1f57736649b4397f6679ecab0ae29573695a921ac475000000000000000000000000000000001710c368f70a2b9cc92ec65c4c2ca35fd63440eb350f488e7c6646f9c42bf680eb62a887d533a91e47988221b46c868200000000000000000000000000000000033c3327da938dbe4630dbe16838229d7d427f3adf18dee6fa26b1c8067838922c1bce78cce08d590ee1acf2baebc7df", "Name": "matter_g2_mul_61", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000011a960cf1978aa2ce1731b857fd91d2f59d4b8d7c6871ef6f4f85aeff549a2f397949d11a4793926fe7be37f3a83d11c0000000000000000000000000000000001954f056834d6e3b16043ef1acd0a47a353300257446e9a1db7e58bd0d7c4bc9ceb3db51ae01cfed9de99621e96934c0000000000000000000000000000000002e2fe460e71b65595ed93a0010e5ccd1a2c16fc4e0d345e7226c947f29720d2f3f54282f79cec086d3fb1999b9629b300000000000000000000000000000000060dd8a7ccb613f1521168a8a322aef9f84d9708a893f704f4fc9a19e2493f25620a47e0fff1bc1e212e65e92873b4f2dbc6afcdd409e5d50d7b655580f1144de77f3efe5d6268032eccab7deaaad997", "Expected": "000000000000000000000000000000000404587c60a4bbd8b5b929ca2ec2a9ff2ba4733f4f2877478a669b238d65ca130cba398899f2910d6de04615f8ffc99f000000000000000000000000000000000940659b3e6de7c3d8de9169a28e68dad433bda78de0991fe4a1d404e5f4babcba9d57c7f3d638aef264642f87c61fc8000000000000000000000000000000001676ce240e1ff70ab03f94f3ba3acd31725ec306ce1fd707e29ec22cf91746216dd998d03ba13a79dedf878fae38d68e00000000000000000000000000000000098a81422511f77191ee15d402614c86f9447ab78a89cc348414108f36857a1929f2b92ced78752ab3604f276861803e", "Name": "matter_g2_mul_62", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001472caba61c2f1fe4b1d0912b114c25de103ef4351668f22f3a158d7a347539a7b6656044bd490f036ca3e29dbdded370000000000000000000000000000000015f8cdf7786410b409f218164063c99e77d8f72f03882a6c9430ec725ae574547d3ea3cf30c3ad2c9c3febe6c30b1272000000000000000000000000000000000ccbbed85c2809433fbcf22d6490457dab800b21cb4de414c7dd1804a0bdeb7142f8ffbb2de921c2c9eabee6a6351026000000000000000000000000000000000a404f42c48e3ca408d3f92079b99805004da928f128206d8904ecd7fcb14121c7d9a9e7fb69accaff921315ef3d5372807347519f114e78f99617f6b147ca833bff7be962c9b1e1f32b5babe6067d7a", "Expected": "0000000000000000000000000000000010a4ba6952d22a51dbb6762a3f9bd09712c2be5a98bf0ef298d7a7e3a9735ab0d3bf39e40b334895c73a36c218ad24b50000000000000000000000000000000002860f38ef61b497bdaf4faeee7b406007981c17246cfa36cee906452ae85e1c1c6385898ebadc3b4ef8887fff25b8240000000000000000000000000000000002dbbca9034fb17c3f37727d44c027cdf47c36f3f628ea9385fc9fc371d23f22d983656caafbf1cd1f8bdeff4ad7669d000000000000000000000000000000000b7e71b65765c4113a7884771952268a9fe10576f745038912e6877c78372cd261220793b888c43accba1646e902fe14", "Name": "matter_g2_mul_63", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b52f05365c4df20a7290aee71a7e030615d1a2a971167884d835c24e756a0faf6ed0552341c561446c7fd3d5e887d830000000000000000000000000000000018718ef172c045cbf0bb132059754b62414097eef640a781db6ad521af5a24d78c622d9402033fa939f70aad0510a1ac0000000000000000000000000000000017e969e44b4910304b350b5d442bb6a0b71e1f226cb4603cc8b4dd48614622f3f4e1ddecb1894046649d40f261d94e030000000000000000000000000000000004dacaeb9e05b9d60ce56c17312a092cb988bff426b8a718cdff860186935507a06eddbc4a1a29e4ef88db83fc4b6e77830630695c8dabe9aded1b5365bf93770aab7e9ef4140a2bbde2f0a7b109724d", "Expected": "000000000000000000000000000000000e9c1a6d591be4da37fd6dc283b8d899b625ccc96371dd3d7731aca66cd2a978810497171f2aeded64fa2b10e480de2100000000000000000000000000000000006d2ad7287847255002480627782d513eaf1f68a3d583d4762fc156b8eb40deae6969fa8a7d8f8aae923800091386a00000000000000000000000000000000003c7eae0eda08df9b9eee2605a44fbb486e3bf2e409aaa1c8f38c06f969ff1f74338004b01288dce99be26a837e45d3a00000000000000000000000000000000178174d2f569a9392eddd2715ceba8762c5bcc6325217db5e5f970d6fde069d0e48a824e5b6ca017891de175c92f6b29", "Name": "matter_g2_mul_64", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019829d5799eed5a081042e4646d46fb6bead6d3b9893a4240867b25ed6af6a3e154514f244466d80e3b9311e060bbd7100000000000000000000000000000000156157a654db2813cb9c1b4da0a3ee192fad076bb2767020fc5fc00e967c1a35a367ffa375703e1181b3705ace9dd28000000000000000000000000000000000093385a6a9dd0ab996df54b23f47f4a49b3f379e11bc8331016ecee6161fcddd22f6d49fbb21f098873f1e17424dedca000000000000000000000000000000000d5b5b0f2ce81e755b4030b33fe3a8bdee38c2c60ed3b4a88bffb9207cb762c0a5c699ff424c000ab080d763abc5438d184ef5eceadfd77b3a4092696ec34d0551c88e434567638623740b7d5f9e3616", "Expected": "000000000000000000000000000000000ce12c9010b4c4afbddb459c1b46063a8488277948188b4ec0b739e1cebb5653681d0e43a0d2c6b3f842bfc609bbdee3000000000000000000000000000000001123f60cedddaf4385e63758d64d4facdc443854176ec199ca0df0a9c258517f2512594f2441a4b9a68aa9a2b4a1f4bb0000000000000000000000000000000007cc6f77d181d13bd9736ee23a33b25b0bd969760642ee19004e095ebb8e2b3c0e09321eb15a2f7961803c0fb10b6ffd00000000000000000000000000000000004d8dbf2f0c14b07ebed2b9cb4bc87df78ac8a34ef0b05cbc2c6fb8e8156415399fa52dfb968ef0e6ec697030fb003c", "Name": "matter_g2_mul_65", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003af8c25bdbd0dc1cc344d55366f15555709a74e1f0d8d7050cb6b487759db6200401b7868fca3c2ad26e6362a30e6250000000000000000000000000000000013f8b6ffe30f9a133fafe64461d305cc6b2cf5aededf68ba396d4e00df651531c750a3d94dd77bc5c6713b939b18fa19000000000000000000000000000000000dde97855d7728f409d873b83b6879b45ace5b73f317687fbf478e594a959ce21d4d751db646ceb20432e8311e67404f000000000000000000000000000000000fea997323cf29710cf0e3d44ce682e039d6cbda155e43c94dc8cefc5e94000de4b9525123b9615b5f1019a46ef37ad3a80d9efab033e920061cee8f8d7ea6023cc05f08340642613628b39e7b7fd0af", "Expected": "00000000000000000000000000000000172805bc715a8cfb2e25c384214f4005aa6d3b809a0ad95322209851ef92151526a9d01a914c4d7f0c120b9bf3837010000000000000000000000000000000000473ceaa092a5ac12f38b4065477672deacc08e553d8e9e6391bac0d9ca50015934cdbc340deb05aca916cf50c7915b30000000000000000000000000000000012e85461fbd26c2d0235acf5c8665750656819bb939e8fae77a8d526ca23443aee395a985cdd4b1eb700311fb87e91a7000000000000000000000000000000000246d45fdd88448c93bedf4799becfc7c80e67abd483f2a0aa41e8bbb3f38cbc900314436364f1db6e1d88595544517a", "Name": "matter_g2_mul_66", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000cdf60e3bb018407eab162822468255bcffd54cad9127054bd1c30705a4ebf1afc7f539cca6ba4cd070b44410ec751150000000000000000000000000000000009a2e3e5993b6a7007dedbbd21737a8c0aef3ecd4607953c4a24bb3fed97ccae01ae1cec024443f300b570a66e9ac3bf0000000000000000000000000000000008a21fed19e9ec2a741ade7767b0c9f39b79c3fbe34aadc9eb3043583768d893bf927d26231759290c7dd9c4f158d5a10000000000000000000000000000000018eef4ff88d63149d2632c9db586a4af0606644b16c82fbb0a3b869f1ff924c59acc8efbfde7bc604497ff68939cdd0845111c860f6f5725f99b225c53b9fe1a70150e7ce922bfe214900aaa2790d145", "Expected": "00000000000000000000000000000000122e1f2081cbde0055fc34d2fe61307bc333b35a1e0772a0cd6fb25338c89824bcf2f066bc7b571b2fb314ca7f45106c00000000000000000000000000000000027ed81b54372d858a6ba2faa65fdc132efbca6ddcd56c3625bd9267cf0ae04f6d342209b995060f584be8d40020669500000000000000000000000000000000002a03427a093a3000a1bed9eba91a82dc2f2fcea1a16a1fb8af29c4988b589abe6a505ec87a82864b3c683beaa6420f00000000000000000000000000000000134bf64871d69a72e42766c2903fb4589b84d7772a62f7d2f8f8d02a914f4d3a278c680c626ef4d69de8aa88b57589a7", "Name": "matter_g2_mul_67", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f5d47911596c46c0c08cac5f5e7f6d0609874da4ac1bd4e0e59c393273a5fe31a756c7cfff2a01d19e79d209d7c6d3e000000000000000000000000000000001010f864eb6624132d4436d18db7f5b34727060dc426c109886be88031e3c155490cb3fb09e1fbccb7912875477c6d840000000000000000000000000000000005cfbf1c2ae1b80a8c7cfb2cefedd907b0552794f4fda101ca1a723b18de8cbce30eb54287e1847cee3f416cd8b45f2c00000000000000000000000000000000084fa63781f7eba9c7e911ae5866d485bc7e90603541c55d1ffad8b3cf7547fd57fb24b14002560e58410b828513e109c07041840216d60ff445cf53b273a46016c8ecefefb53550f8bafc79966f863a", "Expected": "0000000000000000000000000000000018fa44efeabbd1cc47dd9b1a1195ca921c99c77ed43a44502aad27b6c663f5ce2623382c3ddf208f42e3eea741281f4300000000000000000000000000000000138d11e497e3c5656bc8fc0ae4322a0bfb6fc20e249a47a103b164aa3d9fdbf7df4b1e3b0842b4b12568a31992a151f000000000000000000000000000000000182490d6ae35c1208c0d608984df4988d057f3ce5a25073c77cd5b224a5892768badb1ad5cef8f41d1d2022573098c320000000000000000000000000000000002a6e0523781ccdebb75063dc7ad1a9526f9ff8ea1364bae487914f254c0eebcbb2cfc3715fecb9599bfc2f5feaa62d2", "Name": "matter_g2_mul_68", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000124870cfa469136c638e0cbf15802f2699aacb66d7e4c2965c6759dbca4b7e47941ad9ec37a84db1afeeeaa65a7418e4000000000000000000000000000000000d4503049a6a53536bdf41dd832a6ecf3f10554887da7e389cf940394e1d88db94369b7947436546eb6c6e82c48dfb9900000000000000000000000000000000053f9a6e1f05b67cf553073358009a172e2ab8b43572a974da1f3de85a29103b13d7e67b2a359297172d27dba5c61439000000000000000000000000000000000abc29f50ddc1c113c73700b9b9796890cbf48818ba981fdab2db27ef1c58f4c2e4595b99eae397d40990ce2f6c9317c29b031b82dc8c9f4ea9524793b54207d4e13a548d73297f2aa6241aff57abfd0", "Expected": "000000000000000000000000000000000dc7488491433d5b3924105c01ffed4f30b755d7253d867fda595e7d80197823e56e4d182d5ecc72d8ef1ba9bca15a310000000000000000000000000000000007bfeeadd6fc468ef6340a2b394c155bf50808cb11e89adb0de5499fbdde91760e9531c1deb23050286a15e5910f1d5a000000000000000000000000000000000f096db706b08485fd577f37b7bd232b5a10c3f80c25bcf82f7a3b666c6efaac8e856bfe5f7dafb7457e33eadcb4133d0000000000000000000000000000000004460d1f25159ce6df59efbd7c693355af4634dadeaee2ced68124b2a887698c10e9c4b40c4f4f9c8444acb881ceff65", "Name": "matter_g2_mul_69", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000007d2aae9794b7a7de97f7146c0ee8415e09e56fd42535bce6773cadd6f7ac09c4eafe2e926cb7014377e54c703eaa9dd00000000000000000000000000000000172a4a33ccf99eb0473b2c44d30bd53159afae0c7706ad128bccf6258974d5e5761f9be43e618cdbd96027aede7fd5860000000000000000000000000000000012601bce2171c6e4c2968a3efdf1491285f9e4ab37cf973ab5c8e224ad5b40e1b6459ac89090c73deb8fc79fec7fb8e200000000000000000000000000000000112a6443116e6f98ab348e57daa3971b5fa506e40515e1611fbed3e7dd64c5c1e991e0d2539a70eb93e3da0f573d6b2263d26ae92119c7b06d83d7e2922e06559b1740eae315c6623d3e543c9bf54258", "Expected": "000000000000000000000000000000000f1aa4a7a22c568c41270d24824138bf9ffc763a5356b7c0bc1d051a0a0db12616700d9214972b63eeb2a398d27dc83f00000000000000000000000000000000020d0c2ff8f93db6b415c2a01712034e46bdeb6e665a5177a3877db9f5401d3dccb99907ef843062e394c1428983725a00000000000000000000000000000000088abeb6fc3ead45d5b261b7d684f168ca8f5f163cf338863e6b102dc40e2cd0ede97c47460ad6f560c27e95c8b71ca8000000000000000000000000000000000ca2e5cec212d581c737928512118e2f51a0d74070f40a998b7b06d22b9fc754bb2fa5499308058be9ab81521d057414", "Name": "matter_g2_mul_70", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000030372914b83644fa4db1958831e9335c72ab7a811fb337696221a3290e4c54bc10c2225f8fdc3a9f62632ba2f1594500000000000000000000000000000000114205926609470b6022d24046a1997c048e6d2cf6043397892c967692161c0ceedf409bf5e1199a64eabb1ff8de23640000000000000000000000000000000017cdecbe73779855b7b94920d4bc8ad057ce51c5481a5579650df8a5bbc421030d2ac44568217c4dbb13d7c639760236000000000000000000000000000000000f194fa814bfa7396697bd812d9449d06fc61b580d7a86429fdd1ad376e21ceca139356d7d13964c3c684563675711c67a02c61a7a75342ee7f0745886c0ea2a73c21500aef8078d21d20b7216c2990e", "Expected": "000000000000000000000000000000000cfa23c46881893f6c50d238a83669deb520a7fffab4f912f77df7cca43f6827a1a0ae0b3f36c8f116ecefa33b8bf37a0000000000000000000000000000000014b7e5c18d2f9bfe15b0c1af3bc6e230039a341e135837d123e91cde9cbcda298c66b93f692232c912e5d7d3d6331c430000000000000000000000000000000009c8984999ecd3a4144ccb925d3e5cae5c1662dfbf8871013b1cb2946482fcb075c489c61b8d6261f2574b44da3fc1ce00000000000000000000000000000000196e7feab383211e4825cf98219c63bf9f45a72d66030219cb585d5d25237a01a97f00e122db6a51325022e69e7d8cdb", "Name": "matter_g2_mul_71", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015d4ae1521acf897344c3a76261754ff99742585af4a0ee86dc473a88fd408091404df1da9d8bb291db68bc9c07d6b2b0000000000000000000000000000000008ce160213875c661163990f3f7ac219ea295db5e828354864517ea8689ec15d35c6df78ff14cb276e0c97ffd7fbc09a00000000000000000000000000000000038a3ee211e777d6d6b7ca6c7a0d2130f1a071c030eebec412c3a0f14c3584e7c5cf15de254a8f141a8210a90249ee5a0000000000000000000000000000000019f7ec6b2fcd8b3190ab37a6e843340d3f3fc092f5772a042edbd5bdc967b96e8a1dc9e435b8463496aa1301f87d0e5a81b0c87102055dc2901826875d5e85a794befd93fccca2b9c0a1f70ef5610d83", "Expected": "00000000000000000000000000000000005c0282830934ea09c9f51b52cb6dee75b874b155c63076dbac2cbbf220863d55557ff1b7d681fa185435df1522f49d000000000000000000000000000000000a1680ebbb185c8e7d8a197a523a7a5e618f97c46670622034d312b3eeef140150e03b00ae3dff8d9f1d872f3d3dca380000000000000000000000000000000019bd2eb4bc25f5aa6bce206f0683dbbbbb002098a118fcfb060c1353a310c2baa1063a782bafcf6ff6bb8edaf6f1597a00000000000000000000000000000000082edf49a0435e0b9f3dc7f207711d66004ae688b18f5b62fd1596899ee8edfaac7da38973d81f12200018fbe8151572", "Name": "matter_g2_mul_72", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000fa7f8fbfa1d4ef5f001a451c55ed261dee344025e599884b29d086e15665867932120d33bee579d5eb1b7e6c7299f310000000000000000000000000000000001f06356f793350b17b47a623059a068800ca1eab6089c7c146182990063e8e23bbf40d95a42bf6e976224b680b75bfd0000000000000000000000000000000008807f6606d2302450bfd8b38fd4147b851ff59762c1ff48f9442c4d7b77a32c5e023821eb47fca839a27fde60e5f61d000000000000000000000000000000000c5b92f1ca9c20d4b6b11d794a5853824cff20d9267a20a7aaa4bed8bfdc728c4d4d50feb8f0b569757b97f473138db1ebf66fce49c6beb12737fe05e3adc0a51ecfa9144ccf6253088dd1a7a483de07", "Expected": "000000000000000000000000000000000b8a715c1c2792a30f7ad752a808b621c34af1fb7f1e3392a36ca9481a019108a21e3ef338a1d05f2f23ac3e2cc42ed500000000000000000000000000000000101375c9de592031c55a7a62189fd3fa3c565abf7c64724796dca3b1c7a6e6834a16ef1c4e2afd6ce2e69487260f0028000000000000000000000000000000000cd385ec8245431d3b1aff88453db7f66a5d7888a5c1e0dd0abe9ac7db752933a343b8be53b7bfffb704768ef0a3dc5c0000000000000000000000000000000015d55c8cddb8715e25fa260d1e1fa672ff76eca7c80d19d00678fb9d08759b810cf266ef0a7e9dd749a576ce07240fa7", "Name": "matter_g2_mul_73", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001191410ec6c5ff628bd25d35965f5e9fa7f3c3d8c0a9a1ee7ae37437a97c25e221110d892e2c7a0e9c8e386774eadb80000000000000000000000000000000003be30c25a18cdab139277232d8888f6d13112c9556895af8030f1893114d5845d895df9afe3c6f9ff7ffb1919adea9200000000000000000000000000000000197f6b4e38be0358a3f1722664c61e62587ecf5467f8aadc3a236b47682a75cb76bafb18a5c556b321d5da49cd4bfd4e0000000000000000000000000000000002e4ebf7f22d929b7421a600e67fa2e64a59edd87a2e2eb9dce1f06d3c793f1a812bcdd510e654d44fb4c1de8c64ba9f0305523dc79dc4b905e65587fbd095ed57aa42403d2df5dd489db8f50c99e9b6", "Expected": "000000000000000000000000000000001311de31229f1825d0bd2c9d726fd71e05828a20406a4705ea65f441537486338022bac4e552bf3c25e15717bee00ba400000000000000000000000000000000052e082cbe36c854a028a041981fed87d39fb218a88208aa1096e260a3932a1155db7f306c32d133070b0a5bb6d161760000000000000000000000000000000003269d4afd20002873f4305018a4432c1925eea28486d657cb458198ff2df9d304bdfc7455233243b1712d8663591d460000000000000000000000000000000013376fb98929cbe7f7d090d1c9d5c4f6332bbf25470aa03c35a70481931e4bc91c937029a5e11d2a3418eab698361227", "Name": "matter_g2_mul_74", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000011c6f1dbccde640f63ad7d40089779d01075e26269421b4ce12fa5341f58ee9110f17d08dc1052426f2d00da2dd70b4f000000000000000000000000000000000740b147bcdf06705971c113a5cc12fb37345dd59f2cbb5ff500ce2b347fc5a8199cb3007a871670d5093f28979cfade00000000000000000000000000000000046563ea98b5e85b3c42222d5e0d8481e6aefaf077a1b99f2b4eefb397ec846aa3659aacda569054c9c8b9b69750272b000000000000000000000000000000000812d887943506d68e3525ced9b979354539b7b14003a3169e0084c26326b92be67346920c9a99ef0f9638e8991296feac23d04ee3acc757aae6795532ce4c9f34534e506a4d843a26b052a040c79659", "Expected": "00000000000000000000000000000000021166263d1a443d5b2eee9aeca3678ae4c2b44d556a7cb9631d47e4fa3bb05ecb94d6582f4ca0cd787027fb5f2efab60000000000000000000000000000000015335d034d1a0ce78e1246a16e35e0075f73d4a392da1e05c11388084cf80bf31d499e57c48f4be6e72d3abc7b387ec6000000000000000000000000000000000deac4ae1900a4e1814624fb4b8c7a3149fa9cff2ca97f02e7d6765e034a1532a7b8475ef7aef5ebb851063cf4b9e79500000000000000000000000000000000161e3af03f226278a07ff3b08e5788f6c5029b2c8293e7a7e3ae11c4d78676b60dc0208cec6b82e1714d976007fbb389", "Name": "matter_g2_mul_75", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004c8078fe8567013e8d05a546934026cdeee7d485e30d739407db16fefaef53ed7bff0f9adaaf064aff014ac919d91c600000000000000000000000000000000107cc17f485af7f22e07cf14c5cad6368323f720511fc9dda677b360567f769e47a77f61274927ef9b7be48a77357ec40000000000000000000000000000000001487f0880a6cbdac33ca35b9b65e4ead9d8c2e9180c993bdb2052060325aff8c62668c643f0cd9b4bb1f06a3dc74285000000000000000000000000000000000d4b2d062e31fabe8d2a329dbd6417673a519f455739d140246f2b3e43e20f390088c08e545bf0419d796ac71aebb5198586d7ad8fc3e4fb42981a4415224c0d976ebe1c342e9bc1cd66d35168bae33d", "Expected": "00000000000000000000000000000000120b4434babedbd8ff295a6e2ed5fc7af0548d7e60663110050be797584c0cb638988201ae7707cbedf0c8b3dc5ced85000000000000000000000000000000000d2de0a260bdd241a145e3f68a6de48da4c65107a500e02bfeae6ae7dc428026c7c3e9bdda9a3069d2744705df2eda9b0000000000000000000000000000000018a237906c0e277541c4f00c4c2feba7cb2c9b87709c18b62b7c36d78fc118cfd65c127765e01dc0ae5875b9552bb45300000000000000000000000000000000197485daf54e98e097b6bca24b0738682969256decbf3ebc05f6982e4608829f37e2877937b3f26b88efc3deeb4bfacb", "Name": "matter_g2_mul_76", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000811e9b0acfc10830c074c5a4d9f4d9382461eb523a61dda0b77f1c43b285fc5c1ef3a1fafd923addc9a6e904505a255000000000000000000000000000000001113102d015dbb509f0b8d0d0ebb4d3711c4f0e1e3d55fb0af247dd24be4fec9d6fe3ad73fbdcfe206891bcebefee4dd000000000000000000000000000000000085aae9e58fb97b96ca3c089acab7bdbd0c3adae141bf61075f5c13145b0d07113f1075dfb959bc7c2d3d3b3a06ab2a000000000000000000000000000000000bb5eac8125807c10270d94e5bcf278241d6fa82f68e41b5529b28aebc88870af55881db526f7bd221a8c4c0b29a1b7d6e7db0fbd2a7327c85054b4c0de9727dc0b051058f8bb4ecb1dcc7f825781712", "Expected": "0000000000000000000000000000000005de82540aa67c69b962d292133b09e6593961da8944ce02557141abd19ac471f766b4083db85c67a44b65dad2202488000000000000000000000000000000000cd999bf3cb004074fe9f355cd8dfaa7b9d3439d902fddd2fd0688419b5b7f8c4300ab26b658936a90c0b8e1488249d1000000000000000000000000000000000f97ae779429a5afaf7a3343586eea84a4e76f00a1852ce42a4940babd565bc8d61bf72fca9b123922f1ccfb1db8c06b000000000000000000000000000000000935960fa941c27e74234a07857ee680f53c31047235c6152d1669724bdef37ba642cf4e0dd355443ea470e6430def8d", "Name": "matter_g2_mul_77", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001335276775545fbb4c701beb57cb34312108c9f1d46b4aa4b09a16faf0e648b4e80848bf5e75ed8730715f0107afc9820000000000000000000000000000000006ffff8736bab41b4ee5681b741a81fc870e648001027161144254d04c678e4f954e9f191bd8b26201aec681cbf0654b00000000000000000000000000000000026ede90d14fa0885baad21f9631bae058573251cbef5757bb8cfad061f3bdc78834fa5862dea19a2236c014b0f1652e0000000000000000000000000000000009844d0cf7f6f3401145d8d720defa577ca46b49e04e39c4c139ec6811a574e7dd5ce3acd00d1ce9496f10dd15c6d94685cc8d88273d4aa822f44a447cc22f5a58c420bcfe757a459772825619669a72", "Expected": "0000000000000000000000000000000001b0aba02b0e907c03d2f4003083c824ce60f2f55f70dc6ec7c7f81f3d0ef4bf533b4c94833e36e8aa7aeec18b7255de0000000000000000000000000000000004fc227a6ae303f3006f75193cef7c653e6bddd28fdb843b41c7d39966a701ba8fcf611efa71abf059d7d98833480e69000000000000000000000000000000001077fddd0bf3d5c80eec653916f9095e900cf165315d74a872219285f62b5412536e43c4cdbc120ec5c7753318852dfe000000000000000000000000000000000ccd90e01c1d4a00f0d9e29a88e8134f2cf68162da66bd343645a998730190114a6921c9b048dda58b60b42a133287f2", "Name": "matter_g2_mul_78", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010192b925fca096682acf138833b12d96bf97c9a2e69e4266eaaae1785b9008f36082e23e2d42341427edce24449935f000000000000000000000000000000000d5b24a94adadbf542aa663114096bc670e1b6c99f3b661f55de121922452534faed7f68d6b431fcf6f3e379d7acf6b6000000000000000000000000000000000acdbcae49206b749d8c0d21017a33e689ebe26804d1fe7c863a2ea4210c3559805dcf73685702bc56e644b4e02614a9000000000000000000000000000000000092309d684fcdf44bfa321d473060dc2d8a8c66c51419894a3fbadbf1b56179c31dff25403b970d543f1dd0e19e56cf5b6e462d809f8bf1a62f276dcb27e42d9aa0ce33fc4e149e87181aca70a4ccc6", "Expected": "00000000000000000000000000000000185520023714580a3f235e24316478b8260565ffabd39670811519066844e131e337bd62ed2069bc6d2305e6638e539700000000000000000000000000000000055fc74cc7cd3fc393d5b5ab2419414effb783ff4da2516e5465a4acc195339c7b5238be4e0744b3d7fdbce46ca7f5dd0000000000000000000000000000000005f584a0311c02d611c15163529130a2fb3dc853083e7225b791ce5ff32d5ef7039c80edfff317ce9ddeef84443b5a51000000000000000000000000000000000f9d5acb355f767cc6286cc09f6df232532f9a0e9e4ed1fe28788abecb200e22066c23f3ac6c49c47071cbb023e70183", "Name": "matter_g2_mul_79", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014441b14765eee30e8131a7ef62c3b59370f2f6f0dda20fb2a3654fa09492bf695de1d1a8f250bfde3c7d2ed805ffaeb0000000000000000000000000000000019d813f8be2519e89d42a9fd3fef09d44a996d6a4713a9c224bee10f0ebb196370d6231fad810edf9cb4c875f08357890000000000000000000000000000000001a5abea13e909bbefdb51ddc699614366f271b2f6490ac8efcca7759833f3feae11057ab1b9ea32311e7b6ea6de110c0000000000000000000000000000000003ac2bf3c5486ca176e34ec5212165cbe04fc9e8c375e3e999a31fe014eb824ea3f2d06b9cf8b86ce3a76960cf2eb4d7535b53ab5f1c596eb966f57867e021d0f3b099e17bf384479c959794b17d6a4b", "Expected": "000000000000000000000000000000000ceb56d75f3aa1548c50d7780ea1e33c3d069b2f37e7f96be6a8ec03266fa8d0868822afb3b2e54750722266f6032a8000000000000000000000000000000000080f15b7f9f2c22f1afacf558267b5b84f3a6d199fd3349eefa2e46c4f332849c0955d19d4513151dc0f3b566c0058440000000000000000000000000000000013305f8ff6080f7da05c28155c0c2bc1c78d855cdcff0bb2c6b82cd5107d7a070d0830e6705f6832ed5baf75a659c8870000000000000000000000000000000018f4e136859b4ceb230450f9abde0325a4d59db98279d7fbab710305ff53250dae1c8789cccc27586c9b9df5c0c4722e", "Name": "matter_g2_mul_80", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000598e111dcfeaaae66d1522be2a21131350577253a3f33bdd74a04b0bfba2940e73b62fefa8f0c34c4aa91b633f6bdfd0000000000000000000000000000000017fefff7d94afbeceb33714e9b5480c3a2f3eabf9d7f6e8507ae54cb65f69b21cd7d04d23f24e3a272c589f572b91864000000000000000000000000000000001652e3f5a99ba8dfbcd1f90de955ef527947642054be603c1b84b24bebb579b78e2a0be426ec21d32783a0e55f0178dc000000000000000000000000000000000a6c9ec91e8bc86ab198416cbc76239f0ac0b903f40310ee1f2066b01b08191538ca913c2736f53f23ef37fea13d52756e0512ecbc5a1b02ab19bc9bee4d3d9c721278e07b7a6e389c4d6443232a4035", "Expected": "0000000000000000000000000000000002a0214be95f020c70221fb4fb6856af7ce3845a4b607340f85127b52f8a204efcd94a152835860a4ddeef84946671b1000000000000000000000000000000001767777740a9922a91c39a36e2cdfcd544df902b31812ffc88418dab7321f73406ab142055b5bb264c187f2d4f2d6f9d00000000000000000000000000000000026e6941364c74997506df0f9fbe6b2769839e8b7c7293f4e63d13bd7bee90ff779cf82adc2f23c569d1e13826cdb0e4000000000000000000000000000000001618ab2ffd4b823b9c9776baf849641240109b7a4c4e9269f3df69a06f85a777cb4463b456023b7001adac93243c26f5", "Name": "matter_g2_mul_81", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000072e022c168461905f798e87425f2eebb517e473cef98c255d0fe434863ef5811920af65bc946b29d489b5dee1066c56000000000000000000000000000000000e7a9872caa82d191f6014c845e1b3ee4ea1ee89852b546a2c85ddbfa3c1d4ce99002e3d7732ccb8cfbd57d550285ab400000000000000000000000000000000144be65db373f6401d76e0ee64e51076b861e8fca596dd6a7f3b5735c23b0cd13248404fa0969ecaa701663a1032f48a0000000000000000000000000000000014c9e9c5cffc4518889f7742440053678ff1d9fb1a1a103d0c1f762b10655bd5849ce98f4bc5eae80bdd9e767aae4523a79fd15e80b694122dddb01f836460b3eff99e61ea6309d6b395c94fb5a43dff", "Expected": "00000000000000000000000000000000054ce66b9b0b3cff6637d6cfdd788719d4e33516b98402d8fba54725309307711fb576299ba99104d4e7df0deac9ea2500000000000000000000000000000000055e06ff52cda9116a98ad3709f788d39db53844b7db58a57af52848ce1c59ec2a1f083efe79c5994b9291a2d1020fb900000000000000000000000000000000040c9ad63698ec78d06b41bdd6f5eed089b67f106348f9300f822a2d61ea1e5d2ddda0efd1025825c99cb0e243573f7700000000000000000000000000000000195dd00c48186f8d1337ca857aea02c4d199d638133e9cbd2dfc5f633502f656343746ec2a416465c3c0d4e9d53fd097", "Name": "matter_g2_mul_82", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000948d0f0c20715f8658e1f2b4f9d32d851e584287225a2f47735a1f4c241b07f8d7c5dd8c13bcdf84e97d49817d4d88a0000000000000000000000000000000013c064548cb756b48600dd535af8eb5b9138f984bac0391df2e90a204fcb6c36017df910031864d802a2ff719856b336000000000000000000000000000000000000b7eeb7c9a01be88e573f196c2a531635baecbc8cff9af385455af3757301436686596ec7fe3618af26953c49f7450000000000000000000000000000000001332f4dbd5461ab9e2c8b3c19c6ff407a071018c92d2c17c1d1d481c24565276c0f55eee8692016c1fd76d70f44627cbd012914a96253926fdaabec06944ffcdb4637a05e3e78a9bcf1b21b68b9dd9b", "Expected": "000000000000000000000000000000001141b59af8fe6cafdf2e247fcb0ee4642a9b4022b6d71163ec9b6ac2f7d10ee3c5c0173ac686b03cd6a7086b039ec786000000000000000000000000000000000f05ba6973c5d865ac5c037583b65eb4eac826b5a04a7ebed1e10bec6ec7dca93b1c2eba70ee0189fd552d5023f2a87c0000000000000000000000000000000002e54475940985ad2115223c5ea3a4c95890f3e9992e3e1a6df2170ab77143bcc5d29b9dcd1ed3bf16e545e9be21a8640000000000000000000000000000000019acc4705955761518cea482b83e3726dea8d1f66a5f19b06cd7ff95828e15d1b139077e0d274b0e6fb86c027844d97f", "Name": "matter_g2_mul_83", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d3ee70610b5029a28e586f0f3e65bb19a263db3438710fcb8073e1b25f83db50eb5bbb9d75cb20952a225023f747baa000000000000000000000000000000000682f7d5cf9d182b20ee88683f3915e8c9b03074a373e573aa57232de4e997bf155acf680e365aa0988989dfad102b2e00000000000000000000000000000000143962963e230a9154dc328f9583f5be6923a3b10ee7b1d0cd5f5cbff13913d8ff78ca315be7387900a50b94449884c0000000000000000000000000000000000f4f934b42452d41cc20d7b1ec547bcbcbcc10f215364ccf2b864db23a09d06e94c7a87165dcb691f4975323486757ada300c7e1041d94df0e0201e1135fa6eafc98bd33b2dfbe4c59b546a52538c07d", "Expected": "0000000000000000000000000000000016fb5839fde95111742255b33f040c41dbd0f142d1daa8abc7c63008ba9f63f07381d9d6128240ae9b6cac5befad84e5000000000000000000000000000000000389a11727c356b8f3bdb6a73bc2f6d2d73d33d287365283359521dcac64f17810bd58c0ec5bef4db253bf630bdd9599000000000000000000000000000000000629a8af1bd0c1b1b6d7e447bb779663d7bae8e895e09418bc350e644d7022fa877496f30e2018f5dd1c9683b2715adf000000000000000000000000000000001950185d2574fe0c8277e3f93f59dc5628ec3487911ba9c3194a2f716116ff0bb9a39dde802dcfaa61633ad7657a578f", "Name": "matter_g2_mul_84", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005f0fd4080e26971ab16d33aeae04220ae23781da3179e38190082f1d167514bd73bc8ef976a2f333570e9f56a6c05e6000000000000000000000000000000000e159905d29b52ba61575c3a263093017783e1028b3701ccf060c165ba33a765b5265a9b1681c1759bfe2c9c401275e9000000000000000000000000000000000c5ac0bc29a49a7c37d772954da850e6b5e301e230552be9a94017d770ebe2cf4dcfaf104633623e024aef6db57892900000000000000000000000000000000002228e7f42a9409acab49cca82cacf306f6c6c29fd9f7e2ed12fef2d16383cdb7bb2b39ad598b301072c615232db1fa833e9cdb10fc117afb17803b61a2bca7de1d190a325639eb23743f51f28294b33", "Expected": "000000000000000000000000000000000024c03edb9b54034eacca4b321d51397348c57f406b074b16a9d6215e03f842380f5358f5c095fcf5bf3cabcbabdc260000000000000000000000000000000014e62dc442135d729f65090475fb408ebae132cdf2c2932582af887ed54696f3cd15b163f11285b99e8d8f809aa2e65d000000000000000000000000000000000438a2c99df216c67d92b99d9ee8cbd0e9751e538074d146767bde9675ae3a05bdae051efcdc6bbddeb1b7a8288370ed0000000000000000000000000000000007c462a8f5720e442e1917bf75fc3c3dafab6c39c80d0b93d81d1db4080f6e199be092b4b025e7b02efce4f30d00299a", "Name": "matter_g2_mul_85", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000180569ce03e4a0155285e733adb18fbca71225507a7adf01cb8e8648891525305e92087f58378f4fd8455d5632ad660e0000000000000000000000000000000011ab84e42f10154e306a568d7cf7bc381000f0add0500cb508f695a3b283ea69d140aa0ad48fce2d2d6fcafe60761078000000000000000000000000000000001136c3016474d6f475609606e8d0269fcdab9fd3188a512681cbc41eedeadfa3b3d9355e5b4503e8b5c3665e49fdf3ab0000000000000000000000000000000003f56cba1b9cb4302099b16b09c2602dfab80d1151685ef78e5054cd454b319adf8b5998053a5b9fddcffa020595e3bfc48b98edd9c229037751d02e58f3d4234d9a3b0ad9ae4947ae14beebb274746f", "Expected": "000000000000000000000000000000000e8137c15436264b5960c27d0c22be7fc5d56a12f43b3832ad0d7f5abddbaaccefd140e2f7c476b99e6fd9b3a52743600000000000000000000000000000000019ee3caa56f0329a2e2acb8907b3edb21f4eee73e312352796b51282e097f9b10af61805d5c222332888737c7f8e227d0000000000000000000000000000000012cb9c610391940fed7882a5cba08eba4226c36eca8a2ed22fb5e752e0a1a5ec556673e47013258b499268f1de77bdf100000000000000000000000000000000031b769f606fa25b81a982db86a1cd442ed738019e7e64728ecf485cddcc17d9dc271146196178740b9f05f56627b061", "Name": "matter_g2_mul_86", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004d79dab9eef873f3415d66172bab7166ce0c71f322529bdeffa915c1b0d3fcd645c91dd3450ba61593ffecb95edb91e000000000000000000000000000000000d611a207d3222bba199fa083d0459675cb5fa00839fb4c9034ad868fc1e79d653c18651771431d6fb6b6b5ce8cf6f7a000000000000000000000000000000000ce802ecb106a4f0ca4efdcc058dd0e29deb6a5d30a2c15c8eda896bcdd3ac19053c10105328d239b26c5ddbdb3a95fc0000000000000000000000000000000001073e142621ecbeff6f81453660362545751f992ffeec3a83477fed3e6215a709ffe0d17b65d3369f8f3913bf000e844228758d2cf8105f2ef11d83018157a3119a44874dc34d5f0bddb533f50df52c", "Expected": "00000000000000000000000000000000080807a0570b628549629d2eeee39de773badaccefb76e01efaecb0ef0356f535d32c3947f0613bc7d847ef8c8778f02000000000000000000000000000000000e8c091ea30465d204ace72015cbef29645206390fd92ba7c4aa0fecae4ecee53c0b06e1fece99511efd8c7e9cff1a8c000000000000000000000000000000000c881c678c94d80164bb3295acf4341fe6c726ca64a1a015c890450e719b85720f41f80369f99ad3e7e3169ede0113e00000000000000000000000000000000008a2fe01a7100afda40091eb0b2b14cd00b7a4d8bb5cf9d9a3847970a94f2035fec7f292c04c38d7e49890e612830aeb", "Name": "matter_g2_mul_87", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000bd84f04b3858b1138b1b429c7216d5d1b1e99c1e0fec26440d59b1ad79788c2d5583122c2ad769fcaa6d10d816a1f1e000000000000000000000000000000000387977ed1ce5da51dca230531bba53d17d3de5d593ec576cabfe6463d5164d7153025dbd4cb3525c4145c4f6b85fc76000000000000000000000000000000000a19c943a90fec6921367a2edc5bc38a5c59839cdb650766a2d2d068242463dd4460bd1d0e7a7fb0e3d2104704b8b3730000000000000000000000000000000011d99d44b200feebe00bd42809e3f67a23cce88a07165416cbfaf4db14420f99e54d62db4280d2c99ca0bc3dc41eddbea417c96f0cf4355a78513c77cdc676a7b09125802c8045756da867e0025a36f1", "Expected": "000000000000000000000000000000000d17f6d9460566d0543df2666d6ade685565e668521a87fabc58148343085415fee92c32907311c9d04713c34bf7690d00000000000000000000000000000000185da28f07b86885031ff5cda913a85b0e4d07673f456ecf2a9f0fd1b21d99e22442f9b705039252d57380b6a42912050000000000000000000000000000000014a4bde5973ef43691b61b3c0f6c2fdb4bcd6ea88e53e2787a7d93ad6e05ee2e69f2799712520f72b3c577ee278008ec000000000000000000000000000000000d92a565b3d8d0fded054a75198b31c521e3223650cdf762fbf7b851f7ac0fc66b8c86c20b905117585704c23b27e7db", "Name": "matter_g2_mul_88", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006a186aa584a466a860849c78e4922889c95a4ac6f39c99029fbb422c43d699a8baa51aa4ef51ff99557babeb3e9506800000000000000000000000000000000065fb15b5a0923bdb52dbefc7e9f1a898e32f17d610bac829235446fc5e1913fffc8176e0fbd33091505761f1d06d8920000000000000000000000000000000008bd358698fd073f660ed608462cfcef1da9a59b10905f1d98c4fe66958e56802814906430c10fc25a4d351d91f91cb0000000000000000000000000000000000a53638b1b6c6eeff468e099446300ca7c7bd899c6494682d14fdabfa9cead0bb37a0325d99e7d0ba6341cfa1d257ba846561328b7689b0a89014823537cf9eeaca6ea5c56a3e58d2abfc2ee455dfccb", "Expected": "0000000000000000000000000000000008b1ebd753364a5a0a6296ab48b348f91668525c0d5f7edc4f2d29844592f34a209f9e77f94ebb38ba76bdb3f96063ec000000000000000000000000000000001062e0ff0a67372207052e2520d8b2823764a5075c94011afd6c60288e187ec77e08db01c95dfa195f2409b58c9dc4e5000000000000000000000000000000000cc2b87b613d97a716586f371c457fa869c2b8d1fa1cf4b9e8c34bae23e0544752b997df4711d0712ec11d3a9d96ac2600000000000000000000000000000000140eae891c87c2026f0b1293df2bd8ae2dcb0ab3f8de74676f37c905334ac1f53fe4b75511691dcf108fca51abcd524c", "Name": "matter_g2_mul_89", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001070b98c6348a67e996626ec2752f45e4c007e9c9668459a777c03fab633c10236a1c5be99f3fd950542d5648ef9e88400000000000000000000000000000000073a564401cb1a3a53334c0a55da261814d27b86ebf40b02a76b20973ba2db92e42c138ca7790261c2d70401c984bf470000000000000000000000000000000004212d8a9e4b01f5c6814a88561c2c6143eea61327b031a2e0e4bd056c12dd7098fdfe4d1511bb441ad42b55b584a7bc0000000000000000000000000000000005c5d23824b0fe05eb962194550681c57c1566b315efa8ebc90b3593d7d86ad18328baab8118c9f47eccc0757588591ccf6c3fcd4b9e6b72853934b306a078b1f2fb17879db4a0a93d484abbc2b746cf", "Expected": "000000000000000000000000000000000276a138edecfc9378be4e241d64cbb48bfa6fd4fb1788f8bda870d5ec8b2132fc9ec888ef84c43a50b7de0527def36800000000000000000000000000000000153e90d52c747859f88223555bc8bc4e8b6fc846fe7028de728a4dfa085c6e350f9f1d12b9dca4ca8e07377648544400000000000000000000000000000000000cef00e7217da6df0a6d85f40be69f154300c423e86e54e513b2491e65002e308445238082da69aa9e5e83b5f4fc17dd0000000000000000000000000000000008da1da2a0d1da9d2158b9408dd9b0eaf414d237b8219fa7661e40c1a88eac2f9735d0dd6ad67b85aab85952369e8287", "Name": "matter_g2_mul_90", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b1b3053774ad5515a20bd4c556d2b3ba95fe74fd0c955069c7f933dfd718ede90ac295f5a675f1c29dcd9701978353700000000000000000000000000000000145746ce88686021a0635bf6f0aa2f77c48bdb364cf4ffa804a57f95bd69d24eead05fbee24021c1ef57e1c7c7b894b00000000000000000000000000000000010ec4795a0762b86f3b83de1198698af67fd1b1be3ddef48f35cf82bc96d886fbb4c75064f51a9cfc5f61630c95d0ad1000000000000000000000000000000001465e31f58892466b8ae4b76a239d9f8d1ecb1834886344013cd1df0be13591798868d224d38213a6d75b02a1fde0ff2f6787b565e8d71be6fdb0c97c4659389c800a2047f668b366214adc716f402d5", "Expected": "000000000000000000000000000000001484993096c210c7bebbc4c0bda24b44a70e982b2528215c0e8578ea55f1181472758caf935aa0a3d6820cdad753e2f90000000000000000000000000000000011802324a6e03c3174bbe7261ecf3812c1a97e1be27269214f232274a3bf82775d47c5fdd70fe1c57155068b296d394200000000000000000000000000000000050f43c874c1cfb5fda81059cb7b4808492632fa20369dcfb611e503ded81a49dacff253e31d7e27ee84bab79e3c5d53000000000000000000000000000000000ef945b6f210fb09bf0ad5bbd4b5a6630f43304ddcb396807c967eb5146741f7432bfdcbd7e5f3d29917781efb62e6ff", "Name": "matter_g2_mul_91", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f39e731e6ddb7496448c912ae314e833d28208252c7f8e27bcf7eeaf1da6e2310538b4ef0d55401c6552e91fd70691600000000000000000000000000000000069d3612f924961f827497028737000513548ad8e104acee28f014e730d4752a583cb9a893e6169b71966a1c4a4ad2dc00000000000000000000000000000000090899907edcbd336bd4fdad0dd67c578ced4481a25b864b32aef920842689a2c23265277a6e1d4a1dc1b5047a9f79a000000000000000000000000000000000055ba64e2502baf68e46c759fca30247a080464eda2b32e7cfe539e545d6aac6dafb731c2c45749e50513979cecbeb5440ed91f6ceb2ccf87e4106a16227a3cd7b2821b4f3a6e629001f78ba1aa7346e", "Expected": "00000000000000000000000000000000028233bf12e8dbd8510f119be30ea1fc13b755c6ee3ca2a3637a3bf8f73776c9d1fe231b713396ffc579ef9320a05b150000000000000000000000000000000018e7c00b8047d64ca0c5df54486439c5fb3d1414c2f71cf8a3ed591b7c45bf18b37473daeeadcb625eda638885ddb9870000000000000000000000000000000018b89c9b6bf9ece36f1eac08fc35ffc9f7f964a0a9b19d495ae1361fb4bc98aef8770efb47d9961aff694b878d659818000000000000000000000000000000000eb2fda2c29c6761e35ca4c9772bb232ea0d297582af4f50ef76c0b74fefd414b535e356c069f54ef5224225e95be6e7", "Name": "matter_g2_mul_92", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000042f1c8b9fe81cdcabea047d0998a1354ce09d62a14f1d0e9d188e2f35f2e1845c2b090c5e157595b33108c67e6c184c0000000000000000000000000000000018e69d3564d4ccc0306e1e6b227b0f961aa9afcad59d4ee1737f980dc876609c59a4c6a3506f987467beba0764b857000000000000000000000000000000000012ce5883156588cfe0f4838f819f985b09f1eab40a5ea8e30fc5d70d029a01a4537641248f4c21dd203909e0170737c80000000000000000000000000000000002888eb9778a4045feb5899dda258657b9f41345731ba630fbbf186b3be4b58ffc7f48abb65b693b573a73f85440a7a7ae8ddfcdb4748981acb9b2037c017174a140f2457fb0148fe807fd194a9f7be5", "Expected": "000000000000000000000000000000001239935827fb2a269ab064a3ae2bff2555f89bb3a71a47ae815ef755fc1363a89d20326855cfdd0e13f6c85f727bbe120000000000000000000000000000000012fbba047478b5f5b07a582200271a0c331d6f76864f9b6c6ef8ae6b0965eda481eddaf72c7a887b21719164c633d39600000000000000000000000000000000017eb4353b413437244983554a639a9253d105395ff9652504df7700d879cd9a32d5f0824b1eaa532bcf2fea34f8f08800000000000000000000000000000000054ea45475c01ea0557fd143b21c7bdcab6d287bf6bf4f88b6fb06e02ac6fc5ba96f323bb1fda3a1c4d8f42d01d267b2", "Name": "matter_g2_mul_93", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000051982b46a819c74105cb36da871fb2415328a1531d155856f6551bd043eca62ddb61f24af429edda830fda31e22cd340000000000000000000000000000000006449e5bcdb5619aac542f6633ee3e06a4fd56a3e1ce4034efc608131ff6ead70ca63e70f494f519d5c577ae7119c8c200000000000000000000000000000000153f4f5dddd5801fbf7f88a735b9170d24d5b63861d50cde9644579dcff277cdb0d5fbfc3b3b819a1172de05afb9135b0000000000000000000000000000000010fdea84983fe6c08cdc4b4ccd462bae2ba791ab5209363b10b3ef342c9a5e92184e9d8be1419e3d88402bc05bad5fa21268803aeb58a2d57fc797358fb456d5cf96afecb1ee0d2b90782aa0d652b8c0", "Expected": "0000000000000000000000000000000015a145e379b7ecf4566a039b753f91e8ad75d9e9c9a20725ce34a900eb9a1bdf66cabee2100208d7792a963d1fb8c02f0000000000000000000000000000000007f0ca14fc4e34bbdf5008d632dd112c7368e037ce019b7c4ec412000ac02302c85ae64f9ab495361fa5b620e46420aa0000000000000000000000000000000017c00a08bba18426dda40e773d79733030b5b3b199a62436ed06b773fd1f10688e8af00e8a223cdf242bd1ebbedbf634000000000000000000000000000000000a17365cd9f7655793682b72e342227048da0cff88f6ace33ddab548ba126017e4b7f7439373a893e3b5803e662814b8", "Name": "matter_g2_mul_94", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009b011f793d9a939d916d058ffe91b58138820a646cc450389b3074ae3715d06ddec1075afecda71c65c7ca085210c740000000000000000000000000000000003d4d20f4b93c1e90a0a06bd534d8b4fd64e4c4aba77ae42cf4c5b2bd95f8b02ec4069ea246ff46404e6c9eac632fbac00000000000000000000000000000000051e88c3adfd4d6a02d3f03812362a6cfba3a6c69b9aeef75b51106cc7f1750293d61e31f0ea29b5d7aa56debb6d2aff00000000000000000000000000000000086d9c4ea6769cdf49ffbbf7351023b4aea640e8c90f9291222fd0b5984bca4d481bf7e10df921406a34804e6a09f99df9a8a4e5c65973b785c1e2637937de239bb0fde34b786dceea66f6bb12eb4169", "Expected": "000000000000000000000000000000000081b4dc78b74250a82da9d803876add659411cfb467860b2ac6f0f68929d6377deb71d6acc9ea8fc8c1286b8f92056e0000000000000000000000000000000002c5fde71346a255ee9dc896f654eb2e0c66f4cb4c51541d2bbccf2463ecf0085a22b9d2bdc5bef39d80c4477824f116000000000000000000000000000000000ebda0cd8bf6ac7e86a1bdbe44ed1e15f8ffa1fff92afd67fb564306882f35037b61cf0d93f278f15149c04a2e83041f000000000000000000000000000000000fc38aa811f5ec015f10a99bf175f1479d4983c9d2180a5e3da88b4e9b62ef50560ff0a6c2fb7bda4c46c54551f8390e", "Name": "matter_g2_mul_95", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010d48bf523f3909cf90aa58a9517ef5421f1212accd5e8a0f830aeb15a587e215ca9c340bb846b1d0474e43840b2af79000000000000000000000000000000000cc1a3976caf97b9d59f448f6d9f413eef8904f360c0cf912fe942b38d7fcc637a17038973a133608ae769d3e389b18a00000000000000000000000000000000069a6122c6f0ec68834b7617c755a7eb33a80a25acf95859da5ff03316447182f122d20d993b04e79b6fe859b7adf5a8000000000000000000000000000000000058c6f8c297524319bae6722e0a957d1ba0f75ee3a8aaf06148641c67925d15780e419a38ed7e07410e82769da74f2d070e7e2ae2751a1f71962726a31f77553c2da38f4fecda435b6e5459d5e833b4", "Expected": "0000000000000000000000000000000007b46fcfb2cd8efe32754306ff2f503d7434168c1c3cbd7c80470cc5a5c8bda10a80bfc0129da349724d2d6431c5ac90000000000000000000000000000000000e1078f4f4ca993d90accbfc036219507bd22d00930ffcfe1227780c00914fcff845698b2541510daf59cc83d8b947e7000000000000000000000000000000000b7c6d9951570e685d3a71b19a38f5485f974f85fe8cd4b4c196d33a18750b278b6d374483d81dc3e15c9b8b9b5dfdd6000000000000000000000000000000001003a239ea4a2f213f0f646bdb62cbe4f98cfaf7298d8b2e0eaa07bf3f939e779caab5ffa0033467c5b297166df657d7", "Name": "matter_g2_mul_96", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000156ca5e80be8c8c03a5506ce9abd22a9d4958c372678c0caf6f1329898507dfcb1f06a9464cf080bc6881fa5b7df1ebe00000000000000000000000000000000088174d486b4086b931010da298a399e15b60a113e08f571e096d3a4e94b57b3a684711318796eeca9319119b201abb30000000000000000000000000000000000b96ff68505c088cc03a1c2dc363b05bc8544728a12b29569bed137780523123eb17e68f4632383c252d81bca0c5ca9000000000000000000000000000000000486fc6e5224c5fad56234c41856e60bee4a6c1046f673bf7d5c1bbb603b141fc91074da5f9d3d41b796a2ebcebd9e74d16aa883a20307f5436354bab32b4633e83178f33626af3edb14f82724b8e125", "Expected": "0000000000000000000000000000000000ea29b1e059560fec21c3692d4e632a45c88a807c953fa23dbedb271b049d7fc717333b498ed12573a896f872e795dc000000000000000000000000000000000de0d10c47df92010a6635e3403dd6e91a1bf35bfcae82c1008998e86aa2d18a6cfd3f2f1207fde3bb39b723ec4d3ca60000000000000000000000000000000005e2aef9cd37430b15e5e76b2c7870630d255f630c12e865caefe308a39833e00319406746dbb2af3ed32135e91eed49000000000000000000000000000000000c229fad41b0d27ad7b5db33188fa70b97f22e323e429ef65fcf98f5339e908c31df8859b863356e0fc90538c5c49cf2", "Name": "matter_g2_mul_97", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000121fe97c62e068988ebff21d8129d52aa903afdbb62862c7fd99564d9ad72182ab1f3a1100223ae486cd76f6938e123f000000000000000000000000000000000968ddedb04f52140160061828b5f88dfd09aaf37df625ee6f66b9500d6608df31c7edf86296eccf8f9918b051a5e4df000000000000000000000000000000000b7491cb8f6252e3861d7160feb0afdd736d27886863ec0909a7cc711a9b71aace18b17a00a2999dd57ca1a74f148516000000000000000000000000000000000fdb280093ef45b12b694ca3390a865ee18e4c04b231e2c98cc28706d4cefaf4e654582ee03f34ecf1dfa9674489d553041390a2209b80f7c64d14965cc2f515d5fbdf37953f75c4a0203bf0d9fb674b", "Expected": "000000000000000000000000000000000444a00cfd258bd46f659b09eef17be9929008d3d1c65e46cdc762eeaa2f0b52abfd636e6094e21983fad8171194c71a00000000000000000000000000000000090833e68614be5bf298e04e44527480cb35128bbdecae15eb95d6931a718f66869ddb68352130b4dd8a921ab3f26d080000000000000000000000000000000000994015b1b55340c3839d48320d178b2ffaa0bbff038f7aa63d4dff41a217582fae9613bc537fdeac8d0670c0cf479a000000000000000000000000000000000fc486e2a1680c10ca28d4c3bb22dbccc9572036512645bf868e7693ae4591569c973f9ea26342a573e23a06c2fb4b70", "Name": "matter_g2_mul_98", - "Gas": 55000, + "Gas": 45000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010d001a09cf5dc3276482185f26ef3f75d28cd6d2667eb08a7fe06c03b99f3b6c4d82390739b6867a314291cc642a8b2000000000000000000000000000000000587846a460b1f37c2e7f491f9a097b4e86e1943d9cd0999313f65627b3907f09b5d5ac1be376a313a959dd136f7e9b3000000000000000000000000000000000af439695556e86b102926d3b40e3e54cc84464e120de3b4e3c5541a6a5bca44151fb0594009663764c1824518b13f020000000000000000000000000000000003bfd9418c1e57269e222152d321b83ae090f216cb422956dd1fcc464f68526cb4a05cdaefc7bbe6e81d4ffe27d64db47cf23dee8d95d94046678f3bdb4b0ea3d4e3a1a2f07f582e2a98ad6eb7562cbf", "Expected": "000000000000000000000000000000001375bd5ee66c330796bd8381a26cefa3f40f8cc8de42d4d59a7adbcd3852e6d632422e6ad9a06a6e497b23b17b1df87500000000000000000000000000000000165d8e7be17ecae9bf51a773da705aea42536d0fa3a2206267da50451f5104ee241811dd0e6710a80c38df77b126c009000000000000000000000000000000001559572407aff34969f83c394d2b095a7ae9f53a8e6c923910f256bb87b6ec076fa6acb85465102fd24d34031f88f7510000000000000000000000000000000015ff9ba89b55ef75f63732dec1e64106d7a912a6657fcc970dd011a03b5364117cca46d6cbafbc0c5049db10fa83fe6d", "Name": "matter_g2_mul_99", - "Gas": 55000, + "Gas": 45000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g2mul_(g2+g2=2*g2)", + "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", + "Gas": 45000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g2mul_(p2+p2=2*p2)", + "Expected": "000000000000000000000000000000000b76fcbb604082a4f2d19858a7befd6053fa181c5119a612dfec83832537f644e02454f2b70d40985ebb08042d1620d40000000000000000000000000000000019a4a02c0ae51365d964c73be7babb719db1c69e0ddbf9a8a335b5bed3b0a4b070d2d5df01d2da4a3f1e56aae2ec106d000000000000000000000000000000000d18322f821ac72d3ca92f92b000483cf5b7d9e5d06873a44071c4e7e81efd904f210208fe0b9b4824f01c65bc7e62080000000000000000000000000000000004e563d53609a2d1e216aaaee5fbc14ef460160db8d1fdc5e1bd4e8b54cd2f39abf6f925969fa405efb9e700b01c7085", + "Gas": 45000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_g2mul_(1*g2=g2)", + "Expected": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "Gas": 45000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_g2mul_(1*p2=p2)", + "Expected": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", + "Gas": 45000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2mul_(0*g2=inf)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 45000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2mul_(0*p2=inf)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 45000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", + "Name": "bls_g2mul_(x*inf=inf)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 45000, "NoBenchmark": false } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsG2MultiExp.json b/core/vm/testdata/precompiles/blsG2MultiExp.json index b5b63625ac9..2138db40925 100644 --- a/core/vm/testdata/precompiles/blsG2MultiExp.json +++ b/core/vm/testdata/precompiles/blsG2MultiExp.json @@ -3,721 +3,791 @@ "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000011", "Expected": "000000000000000000000000000000000ef786ebdcda12e142a32f091307f2fedf52f6c36beb278b0007a03ad81bf9fee3710a04928e43e541d02c9be44722e8000000000000000000000000000000000d05ceb0be53d2624a796a7a033aec59d9463c18d672c451ec4f2e679daef882cab7d8dd88789065156a1340ca9d426500000000000000000000000000000000118ed350274bc45e63eaaa4b8ddf119b3bf38418b5b9748597edfc456d9bc3e864ec7283426e840fd29fa84e7d89c934000000000000000000000000000000001594b866a28946b6d444bf0481558812769ea3222f5dfc961ca33e78e0ea62ee8ba63fd1ece9cc3e315abfa96d536944", "Name": "bls_g2multiexp_single", - "Gas": 66000, + "Gas": 54000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000019d5f05b4f134bb37d89a03e87c8b729e6bdc062f3ae0ddc5265b270e40a6a5691f51ff60b764ea760651caf395101840000000000000000000000000000000015532df6a12b7c160a0831ef8321b18feb6ce7997c0718b205873608085be3afeec5b5d5251a0f85f7f5b7271271e0660000000000000000000000000000000004623ac0df1e019d337dc9488c17ef9e214dc33c63f96a90fea288e836dbd85079cb3cec42ae693e9c16af3c3204d86e0000000000000000000000000000000011ba77f71923c1b6a711a48fa4085c4885290079448a4b597030cc84aa14647136513cec6d11c4453ca74e906bbca1e1000000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000176a7158b310c9ff1bfc21b81903de99c90440792ebe6d9637652ee34acf53b43c2f31738bbc96d71dcadbbf0e3190af000000000000000000000000000000000a592641967934a97e012f7d6412c4f6ff0f177a1b466b9b49c9deb7498decc80d0c809448aa9fa6fbbb6f537515703000000000000000000000000000000000031d84356ef619e688a10247f122e1aa0d3def3e35f94043f64c634198421487ca96af5f0160384bba92bd5494506c4d000000000000000000000000000000000db8fefe735779489c957785fa8e45d24e086ef0c2aba2e3adba888f0aeee51385a82898524c443f017ee40be635048c0000000000000000000000000000000000000000000000000000000000000034", "Expected": "00000000000000000000000000000000158d8ef3d5cdc8a1b5ce170f6eeadec450ca05952ea7457a638b8ff8b687c047799eb3dd89c2e3c6ca6c29290b64f5ab000000000000000000000000000000000807d135b6b007a101e97f5875e233b41f12bd2ffd77fe1195418a73a4c061248118ea1049aeea44750cd5ec83bcc1ae000000000000000000000000000000000f04136354f45a85a53fb68527bc8fbc7e8c1a0056878012b548a97bfdabcbd3fb8eb3ff187fbe65e1ce233afd2825050000000000000000000000000000000007b15428114e2ea094ba1e64df4c244f80aa2f75bbbf21a407bc84e80bf2a5ad787d02ae8a90cc1c137f0d898edb1684", "Name": "bls_g2multiexp_multiple", - "Gas": 126060, + "Gas": 103140, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000005b000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3000000000000000000000000000000000000000000000000000000000000205900000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e84900000000000000000000000000000000000000000000000000000000000b7fa3000000000000000000000000000000000e7a30979a8853a077454eb63b8dcee75f106221b262886bb8e01b0abb043368da82f60899cc1412e33e4120195fc55700000000000000000000000000000000070227d3f13684fdb7ce31b8065ba3acb35f7bde6fe2ddfefa359f8b35d08a9ab9537b43e24f4ffb720b5a0bda2a82f2000000000000000000000000000000000701377cb7da22789d032737eabcea2b2eee6bb4634c4365864511a43c2caad50422993ccd3e99636eb8a5f189454b18000000000000000000000000000000000782c14e2c4ee61cbe7be6e462a66b2e3509f42d53ff333efc9bfe9a00307cd2f68b007606446d98a75fb808a405d8b90000000000000000000000000000000000000000000000000000000004165ef1000000000000000000000000000000000411a5de6730ffece671a9f21d65028cc0f1102378de124562cb1ff49db6f004fcd14d683024b0548eff3d1468df26880000000000000000000000000000000000fb837804dba8213329db46608b6c121d973363c1234a86dd183baff112709cf97096c5e9a1a770ee9d7dc641a894d60000000000000000000000000000000019b5e8f5d4a72f2b75811ac084a7f814317360bac52f6aab15eed416b4ef9938e0bdc4865cc2c4d0fd947e7c6925fd1400000000000000000000000000000000093567b4228be17ee62d11a254edd041ee4b953bffb8b8c7f925bd6662b4298bac2822b446f5b5de3b893e1be5aa49860000000000000000000000000000000000000000000000000000000173f3bfab0000000000000000000000000000000019e384121b7d70927c49e6d044fd8517c36bc6ed2813a8956dd64f049869e8a77f7e46930240e6984abe26fa6a89658f0000000000000000000000000000000003f4b4e761936d90fd5f55f99087138a07a69755ad4a46e4dd1c2cfe6d11371e1cc033111a0595e3bba98d0f538db4510000000000000000000000000000000017a31a4fccfb5f768a2157517c77a4f8aaf0dee8f260d96e02e1175a8754d09600923beae02a019afc327b65a2fdbbfc00000000000000000000000000000000088bb5832f4a4a452edda646ebaa2853a54205d56329960b44b2450070734724a74daaa401879bad142132316e9b34010000000000000000000000000000000000000000000000000000008437a521c900000000000000000000000000000000049cd1dbb2d2c3581e54c088135fef36505a6823d61b859437bfc79b617030dc8b40e32bad1fa85b9c0f368af6d38d3c000000000000000000000000000000000d0273f6bf31ed37c3b8d68083ec3d8e20b5f2cc170fa24b9b5be35b34ed013f9a921f1cad1644d4bdb14674247234c80000000000000000000000000000000008b7ae4dbf802c17a6648842922c9467e460a71c88d393ee7af356da123a2f3619e80c3bdcc8e2b1da52f8cd9913ccdd0000000000000000000000000000000005ecf93654b7a1885695aaeeb7caf41b0239dc45e1022be55d37111af2aecef87799638bec572de86a7437898efa702000000000000000000000000000000000000000000000000000002effc7b302730000000000000000000000000000000002142a58bae275564a6d63cb6bd6266ca66bef07a6ab8ca37b9d0ba2d4effbccfd89c169649f7d0e8a3eb006846579ad0000000000000000000000000000000012be651a5fa620340d418834526d37a8c932652345400b4cd9d43c8f41c080f41a6d9558118ebeab9d4268bb73e850e10000000000000000000000000000000015f4b235c209d89ce833f8f296e4cfb748e8abce6990ce1a5a914b9416c08e0d3a26db89625915c821a5f152b7fa592e0000000000000000000000000000000006fcacb3ee6650a1044852d61c9c20bedc8ee90aad97de8e24670a9ef57483e678db11dd95428915088d76e30cb01a370000000000000000000000000000000000000000000000000010b4ebfca1dee100000000000000000000000000000000018405e4b67f957b6465ead9f5afc47832d45643dc3aa03af7314c6cf980fa23dd3bb8db3358693ad06011f6a6b1a5ff000000000000000000000000000000000c48e0d4f9404ae0a7f10774c55a9e838bb09d3bae85b5eaa6b16b0f4dc2354368117f3799c37f3f7126d8b54d3f83930000000000000000000000000000000007e61f4ec5bc9e2cc8ca471ce4ed40e729b1790cd2c0d9c1cb50e615ec7f346636e77e1cf632c881c07c5385898607620000000000000000000000000000000011dfaf9281901dd356fc5dfece21898a93d9ad9e4e246dd6e18d3ee46d58ab7e77401a3e8d04057e5638ed74fb95688100000000000000000000000000000000000000000000000005f04fe2cd8a39fb000000000000000000000000000000001796abe0d9e4a703962be528e6a5cb65c60725886f925db0e2a89107ec248bb39fa332bc63bd91d28ae66e0dfce8f754000000000000000000000000000000000fb665f5a7559cb0fa1300048a0e6f1ab5547226e86f8e752dd13c28eda4168492e3d3bf2f8a6b230dd57f79b1afa9910000000000000000000000000000000003422dbbe4a06a4c6c9fdf35e54f74b4ab1528abb7249e99898e6fd7affebc7aef95bf82d328dc01d63c25f6a735c35d0000000000000000000000000000000010aa5504b469427eb3584a286191149f5c3c5a745f338278dd95337cd2336d3c4e7532d98eb189fa543824953e7c1c170000000000000000000000000000000000000000000000021c6c659f10229c390000000000000000000000000000000009303f04d568e289a35102b6df883d5ed620355c0eb5d02236718cdaf99fba6e19ef5cee2996268eb9a53ae1ee09bce3000000000000000000000000000000000190be857d602284393305bfe0a29e29a6982ed3f04ccaabafb7e59cdc7eda85c22bc3e8690355c7a0fb7590ae40f1b00000000000000000000000000000000016efd497a0c5c6b59a1fdf2b590eb67a7da8cbe72f49084e7050783ff12a783cad1859e1a0b0ec8ff784c703617670330000000000000000000000000000000017a957ea4d53f4fc8412cb015ae91b38445cdb3e7078d875c465c941e0d9a852c78d90b31b6b6010efe8bd5117e831630000000000000000000000000000000000000000000000c01a881f8abc4d8843000000000000000000000000000000000173ed58056bec9874464d3f23c3e7d3d429d6c8a167fc7f39368830eca839d0eb8260d64ca823f6c785c71f85893d8400000000000000000000000000000000123372d7d4c91a249df8f3e4f8e669087b252ab5d8cf2529a87e4ed3622e4158cf17dc44b473d5debd273261383e8a0f0000000000000000000000000000000000c500eb55ab86381a1725f339f686c7e38ce9113493736f57e999badc661b5b8494d220ded0711e841228a389abdb820000000000000000000000000000000010a4025d823c4262367c53f50e67cffa046e4a1e7c69ff30373772e49ecb310de3b313d83cc41f40a00205722f233e270000000000000000000000000000000000000000000044496e633650ef8f6fd100000000000000000000000000000000152110e866f1a6e8c5348f6e005dbd93de671b7d0fbfa04d6614bcdd27a3cb2a70f0deacb3608ba95226268481a0be7c000000000000000000000000000000000bf78a97086750eb166986ed8e428ca1d23ae3bbf8b2ee67451d7dd84445311e8bc8ab558b0bc008199f577195fc39b7000000000000000000000000000000000845be51ad0d708657bfb0da8eec64cd7779c50d90b59a3ac6a2045cad0561d654af9a84dd105cea5409d2adf286b561000000000000000000000000000000000a298f69fd652551e12219252baacab101768fc6651309450e49c7d3bb52b7547f218d12de64961aa7f059025b8e0cb500000000000000000000000000000000000000000018461a3d444ec527fcbf4b000000000000000000000000000000000027513925b419f6c581788578379995290ab9478e08ecd1999d5e1a05c58144d2f9f06fb8c7fd1586f3ef6a973a3ed7000000000000000000000000000000001292b2ce751f6f859ec7882e14083eac9841b035f9d5ed938a81579dbce07dec2c0202b7f6b25226831cd9c578e893d00000000000000000000000000000000017f36da49414d7706209d52840250eea6f33970fd7eac448ee122f24c62f6a6e09757aa29761160be0f65ba3ce7a153a00000000000000000000000000000000086d471f958f3ff679805751b183fb6310e871ba72bbdefd59c58e95ea62de0820d5affe601757e318abaa5a0c2715bd000000000000000000000000000000000000000008a0eb53c748001536d7ffa900000000000000000000000000000000090721a089bbbb130c21a529be0ede9271a91a2dde9cb2a8e091a19fd2c0a40c390ac2bda8304085c2d6e38e520eae44000000000000000000000000000000000cc64109c67b342b6dbcf86cb60fca7ad378ed6398d89076ed108685c57a07d26e40ed3d5c4b3560b21e519db5875d49000000000000000000000000000000000b0ddd488f5a6f61f087cdbf011b50209a4460c8aa8c5f48c0b30d9cf6cf24259f4e7badc42e1b7a33352949ae566fc100000000000000000000000000000000038430e8db04d205d81aa1632d23919c06f89260c7ac5850bd8b780f8388e53db3a3ddfe98cc55d1c686e582f85b0c8900000000000000000000000000000000000000031133a6c7d698078a7ec7e113000000000000000000000000000000001800ecc167bb714100f31e7610cd3fd010ca299b394c01b1a89afd11b051e92989f6336db5e6d3212f6b04673526d83900000000000000000000000000000000070401d9bba01c0445e0a682406b099f21d16d9c348cc97156769084055ca328a145c134b8c8b58f019d62882b2965de000000000000000000000000000000000287f071bda99b0318e386b27a492a6823a9664084b12acddeda34cb53f827a362ba97c0e652c37bd9d6023041d8c8d8000000000000000000000000000000000fa708ca7dd917541cd02281e525d3367b5ebf5e9353103e1f83f3b894d03d8be7e4d819c123492788855d1fdb63f2e000000000000000000000000000000000000001171d5c4909480aae3b110d01c1000000000000000000000000000000000ef786ebdcda12e142a32f091307f2fedf52f6c36beb278b0007a03ad81bf9fee3710a04928e43e541d02c9be44722e8000000000000000000000000000000000d05ceb0be53d2624a796a7a033aec59d9463c18d672c451ec4f2e679daef882cab7d8dd88789065156a1340ca9d426500000000000000000000000000000000118ed350274bc45e63eaaa4b8ddf119b3bf38418b5b9748597edfc456d9bc3e864ec7283426e840fd29fa84e7d89c934000000000000000000000000000000001594b866a28946b6d444bf0481558812769ea3222f5dfc961ca33e78e0ea62ee8ba63fd1ece9cc3e315abfa96d53694400000000000000000000000000000000000063376fcdf64c9bcbeeff0f9f9f9b0000000000000000000000000000000004b6570b4a6affe97649b0dd7a0ad0df160b37c332a8a7348dd3994cc6b1eb65623b4a9f0a3f320e7278844e261546530000000000000000000000000000000005f8fb4cf5e5313f403f15c59c79b9cebaec78291f2053c49d6427f40f2db2aa659d3a8fed7c7b07b7a5680c7b95ab5800000000000000000000000000000000045cba5ec3fa9acd1b11e1f28a01ebc028f89f96f814513453c553f58785baca8abd4150f334b405fabb925b71f4f4dd0000000000000000000000000000000013daf00b8f53af776c2e8c08d55d164aa15027611188e294230477dc1c926102088f0451222fd2eff9802db8b884ab9c00000000000000000000000000000000002344b4be368d3b617df4aa8dbdbc190000000000000000000000000000000002b29192945df0a74eed138e431962f1d39978202d247335ffbf29d8a02e982c69e96b58d7d92528baf5c422ed633f1f000000000000000000000000000000000d52c7a82fece99279de7a49439c0ff8463a637cc6003320275d69549442c95184fd75ee5e7122e5575af7432e5159290000000000000000000000000000000006ddbaad6cc16c9e62b0da9ab0196dffe92253fcfb2df9aa2076d3f16b3284997d6558cc4432d2aa1705452c4e951e6e00000000000000000000000000000000175f906a99c9d65c4647807879e5eb781532db184d28a326ef9691f8738af067b6a80147bd69327d219fad7c850a7545000000000000000000000000000000000c896c3f9d64341ba7c5f8a06271dce3000000000000000000000000000000000c86c92c9598dde7e6fc5e05d70a34c7a14cff5f400f33cf6cc26e6bf6d9a0bbc421c00f3360721f51974d76be43bd38000000000000000000000000000000001137d93502ef32471f47890a181d7823b3a86dbfcadcc930ae53952f528d617e742a52e4f243c615cc28163dc31bd80600000000000000000000000000000000088f7f8bcbc6dfcc8005b8308cd4780d574d8530e95e7831e52eb2c9a88b846852e111a8389e3d3a67accf78b08326d200000000000000000000000000000000149e43fc675dd3bde8b89cfeb29456f130bbf674cea0266bd1b2e7de23f9a7294096327b452728411ca58acc949777fa0000000000000000000000000000000474d97a9cf29e85d4a35f6102fe7984b100000000000000000000000000000000186a1da343cacf1815b9c8b6c807f536249dbfdb59d77bf4920ad2198a0d83ada21f7c39de6f06a5599f22571cab288d000000000000000000000000000000000ba1ec44f95121bd622932b84bbb4b3d279f69c494ee44db68e3165c86b627ba5e397ee197313fb5b775972798997332000000000000000000000000000000000783e7493e9fb106fa0d085e7c03eb816468d12c65d9b77643ed07c02583d491f4db5db44e565d50d8ccaa9ad8f7f8e80000000000000000000000000000000010a6a5fd90cd5f4fb6545814f5df065b001074bb3f29f649dd2612815df3a19a320f7754dd3d458e48e7fb1b4953978f00000000000000000000000000000195894e95ca3e59929612e77c1075322aeb00000000000000000000000000000000129c4945fe62538d2806fff056adac24f3bba8e17e42d82122affe6ad2123d68784348a79755f194fde3b3d448924032000000000000000000000000000000000528590e82f409ea8ce953f0c59d15080185dc6e3219b69fcaa3a2c8fc9d0b9e0bc1e75ec6c52638e6eaa4584005b5380000000000000000000000000000000018dc3e893f74729d27dd44f45a5a4f433dcd09a3b485e9d1c2bd0eb5e0e4c9024d928ddc426fdecae931e89885ee4db4000000000000000000000000000000000d6ee02e1fc7e52a8e1ef17e753065882c6fcc14da61da7ffe955fe84a9d2af9ba57562c69db3088652931bf124b0d5300000000000000000000000000009027ceef3ee429d71b58b84919d9a8d5418900000000000000000000000000000000131747485cce9a5c32837a964b8c0689ff70cb4702c6520f2220ab95192d73ae9508c5b998ffb0be40520926846ce3f100000000000000000000000000000000101e147f8bd7682b47b3a6cc0c552c26ce90b9ce0daef21f7f634b3360483afa14a11e6745e7de01a35c65b396a1a12700000000000000000000000000000000090ca61ed16c4c1e80acfef736eea2db0d7425d9110cb53e6c4a2aa3f8a59ee6c60bdce8df5825011066d44bef84d29600000000000000000000000000000000028207394adcbf30250ac21a8f1db6283580bc5e39159930552e5edb25e6215c66b6450296edc80dbc3a2acd125dab1600000000000000000000000000333e268f0b5b1adf76b88981fc305f03ce4bb30000000000000000000000000000000016cfabbe60d1e55723a0ff72cf802f2d1cf13ed131e17729adc88522a657f320a336078a9399c8e61a3bbde3d52fd3640000000000000000000000000000000009aa9a3c2a6d49d286aa593c6ff644f1786fa9ae471bdb3fe70b150a9ed7584eaa886ac057c30005c3642f65ad5581cc0000000000000000000000000000000001d417894c0cce924955a795b188b27951f8438a5485404b921a42fa79dea03c10e29d0390df2f34d7be13f360a7fada00000000000000000000000000000000189b0b3a04e6c613899d51231dbf0cba6a8a8f507ebed99d24fba7ebac6c97a8859ffde88e6d95c1a9d6b4f0a8f3c417000000000000000000000000123717b4d909628d6f3398e134a531c65a54e8a10000000000000000000000000000000016cad7807d761f2c0c6ff11e786a9ed296442de8acc50f72a87139b9f1eb7c168e1c2f0b2a1ad7f9579e1e922d0eb309000000000000000000000000000000000d3577c713fcbc0648ca8fbdda0a0bf83c726a6205ee04d2d34cacff92b58725ca3c9766206e22d0791cb232fa8a9bc3000000000000000000000000000000000f5ea1957be1b9ca8956ba5f6b1c37ea72e2529f80d7a1c61df01afcc2df6f99ced81ac0052bd0e1e83f09d76ad8d33b000000000000000000000000000000000aabced4e2b9e4a473e72bf2b1cc0ce7ab13de533107df2205ed9e2bb50fa0217e6a13abcd12fce1bda1ccf84dac237a00000000000000000000000679956d49265608468757580db6b8b1821c2eb13b", "Expected": "000000000000000000000000000000000728c5e6e69b9103d82358cb6ba3a45a677df1c3eb3cdccf694fd71cee94f1e591b8021b0eef638cd9a1d878937b5b2d000000000000000000000000000000000ba9bcf9ccef956f2af8dc4c3fbf1cc8f3f284b04ae8710af6ef4fb36301254c777d4461858fb38fdeeb72c0d8589af5000000000000000000000000000000000224b80a57d30bce4c752664f3b5b5e3443aefa6d4e95dc334821f754b8b8d8fda4e73d03cbd4070d43b18324a686b500000000000000000000000000000000016909a02214c6c0f6682895aa99cf6cf0a22eab6f0b574437ef9c36e9df32ac3b8c5adb9f6b8827df0ccf51b16f824df", "Name": "bls_g2multiexp_larger", - "Gas": 409750, + "Gas": 335250, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000039b10ccd664da6f273ea134bb55ee48f09ba585a7e2bb95b5aec610631ac49810d5d616f67ba0147e6d1be476ea220e0000000000000000000000000000000000fbcdff4e48e07d1f73ec42fe7eb026f5c30407cfd2f22bbbfe5b2a09e8a7bb4884178cb6afd1c95f80e646929d30040000000000000000000000000000000001ed3b0e71acb0adbf44643374edbf4405af87cfc0507db7e8978889c6c3afbe9754d1182e98ac3060d64994d31ef576000000000000000000000000000000001681a2bf65b83be5a2ca50430949b6e2a099977482e9405b593f34d2ed877a3f0d1bddc37d0cec4d59d7df74b2b8f2dfb3c940fe79b6966489b527955de7599194a9ac69a6ff58b8d99e7b1084f0464e0000000000000000000000000000000018c0ada6351b70661f053365deae56910798bd2ace6e2bf6ba4192d1a229967f6af6ca1c9a8a11ebc0a232344ee0f6d6000000000000000000000000000000000cc70a587f4652039d8117b6103858adcd9728f6aebe230578389a62da0042b7623b1c0436734f463cfdd187d20903240000000000000000000000000000000009f50bd7beedb23328818f9ffdafdb6da6a4dd80c5a9048ab8b154df3cad938ccede829f1156f769d9e149791e8e0cd900000000000000000000000000000000079ba50d2511631b20b6d6f3841e616e9d11b68ec3368cd60129d9d4787ab56c4e9145a38927e51c9cd6271d493d93884d0e25bf3f6fc9f4da25d21fdc71773f1947b7a8a775b8177f7eca990b05b71d0000000000000000000000000000000003632695b09dbf86163909d2bb25995b36ad1d137cf252860fd4bb6c95749e19eb0c1383e9d2f93f2791cb0cf6c8ed9d000000000000000000000000000000001688a855609b0bbff4452d146396558ff18777f329fd4f76a96859dabfc6a6f6977c2496280dbe3b1f8923990c1d6407000000000000000000000000000000000c8567fee05d05af279adc67179468a29d7520b067dbb348ee315a99504f70a206538b81a457cce855f4851ad48b7e80000000000000000000000000000000001238dcdfa80ea46e1500026ea5feadb421de4409f4992ffbf5ae59fa67fd82f38452642a50261b849e74b4a33eed70cc973f40c12c92b703d7b7848ef8b4466d40823aad3943a312b57432b91ff68be1000000000000000000000000000000000149704960cccf9d5ea414c73871e896b1d4cf0a946b0db72f5f2c5df98d2ec4f3adbbc14c78047961bc9620cb6cfb5900000000000000000000000000000000140c5d25e534fb1bfdc19ba4cecaabe619f6e0cd3d60b0f17dafd7bcd27b286d4f4477d00c5e1af22ee1a0c67fbf177c00000000000000000000000000000000029a1727041590b8459890de736df15c00d80ab007c3aee692ddcdf75790c9806d198e9f4502bec2f0a623491c3f877d0000000000000000000000000000000008a94c98baa9409151030d4fae2bd4a64c6f11ea3c99b9661fdaed226b9a7c2a7d609be34afda5d18b8911b6e015bf494c51f97bcdda93904ae26991b471e9ea942e2b5b8ed26055da11c58bc7b5002a000000000000000000000000000000001156d478661337478ab0cbc877a99d9e4d9824a2b3f605d41404d6b557b3ffabbf42635b0bbcb854cf9ed8b8637561a8000000000000000000000000000000001147ed317d5642e699787a7b47e6795c9a8943a34a694007e44f8654ba96390cf19f010dcf695e22c21874022c6ce291000000000000000000000000000000000c6dccdf920fd5e7fae284115511952633744c6ad94120d9cae6acda8a7c23c48bd912cba6c38de5159587e1e6cad519000000000000000000000000000000001944227d462bc2e5dcc6f6db0f83dad411ba8895262836f975b2b91e06fd0e2138862162acc04e9e65050b34ccbd1a4e8964d5867927bc3e35a0b4c457482373969bff5edff8a781d65573e07fd87b890000000000000000000000000000000019c31e3ab8cc9c920aa8f56371f133b6cb8d7b0b74b23c0c7201aca79e5ae69dc01f1f74d2492dcb081895b17d106b4e000000000000000000000000000000001789b0d371bd63077ccde3dbbebf3531368feb775bced187fb31cc6821481664600978e323ff21085b8c08e0f21daf72000000000000000000000000000000000009eacfe8f4a2a9bae6573424d07f42bd6af8a9d55f71476a7e3c7a4b2b898550c1e72ec13afd4eff22421a03af1d31000000000000000000000000000000000410bd4ea74dcfa33f2976aa1b571c67cbb596ab10f76a8aaf4548f1097e55b3373bff02683f806cb84e1e0e877819e2787c38b944eadbd03fd3187f450571740f6cd00e5b2e560165846eb800e5c94400000000000000000000000000000000147f09986691f2e57073378e8bfd58804241eed7934f6adfe6d0a6bac4da0b738495778a303e52113e1c80e698476d50000000000000000000000000000000000762348b84c92a8ca6de319cf1f8f11db296a71b90fe13e1e4bcd25903829c00a5d2ad4b1c8d98c37eaad7e042ab023d0000000000000000000000000000000011d1d94530d4a2daf0e902a5c3382cd135938557f94b04bccea5e16ea089c5e020e13524c854a316662bd68784fe31f300000000000000000000000000000000070828522bec75b6a492fd9bca7b54dac6fbbf4f0bc3179d312bb65c647439e3868e4d5b21af5a64c93aeee8a9b7e46eaaee7ae2a237e8e53560c79e7baa9adf9c00a0ea4d6f514e7a6832eb15cef1e1000000000000000000000000000000000690a0869204c8dced5ba0ce13554b2703a3f18afb8fa8fa1c457d79c58fdc25471ae85bafad52e506fc1917fc3becff0000000000000000000000000000000010f7dbb16f8571ede1cec79e3f9ea03ae6468d7285984713f19607f5cab902b9a6b7cbcfd900be5c2e407cc093ea0e6700000000000000000000000000000000151caf87968433cb1f85fc1854c57049be22c26497a86bfbd66a2b3af121d894dba8004a17c6ff96a5843c2719fa32d10000000000000000000000000000000011f0270f2b039409f70392879bcc2c67c836c100cf9883d3dc48d7adbcd52037d270539e863a951acd47ecaa1ca4db12dac6ed3ef45c1d7d3028f0f89e5458797996d3294b95bebe049b76c7d0db317c0000000000000000000000000000000017fae043c8fd4c520a90d4a6bd95f5b0484acc279b899e7b1d8f7f7831cc6ba37cd5965c4dc674768f5805842d433af30000000000000000000000000000000008ddd7b41b8fa4d29fb931830f29b46f4015ec202d51cb969d7c832aafc0995c875cd45eff4a083e2d5ecb5ad185b64f0000000000000000000000000000000015d384ab7e52420b83a69827257cb52b00f0199ed2240a142812b46cf67e92b99942ac59fb9f9efd7dd822f5a36c799f00000000000000000000000000000000074b3a16a9cc4be9da0ac8e2e7003d9c1ec89244d2c33441b31af76716cce439f805843a9a44701203231efdca551d5bbb30985756c3ca075114c92f231575d6befafe4084517f1166a47376867bd108000000000000000000000000000000000e25365988664e8b6ade2e5a40da49c11ff1e084cc0f8dca51f0d0578555d39e3617c8cadb2abc2633b28c5895ab0a9e00000000000000000000000000000000169f5fd768152169c403475dee475576fd2cc3788179453b0039ff3cb1b7a5a0fff8f82d03f56e65cad579218486c3b600000000000000000000000000000000087ccd7f92032febc1f75c7115111ede4acbb2e429cbccf3959524d0b79c449d431ff65485e1aecb442b53fec80ecb4000000000000000000000000000000000135d63f264360003b2eb28f126c6621a40088c6eb15acc4aea89d6068e9d5a47f842aa4b4300f5cda5cc5831edb81596fb730105809f64ea522983d6bbb62f7e2e8cbf702685e9be10e2ef71f818767200000000000000000000000000000000159da74f15e4c614b418997f81a1b8a3d9eb8dd80d94b5bad664bff271bb0f2d8f3c4ceb947dc6300d5003a2f7d7a829000000000000000000000000000000000cdd4d1d4666f385dd54052cf5c1966328403251bebb29f0d553a9a96b5ade350c8493270e9b5282d8a06f9fa8d7b1d900000000000000000000000000000000189f8d3c94fdaa72cc67a7f93d35f91e22206ff9e97eed9601196c28d45b69c802ae92bcbf582754717b0355e08d37c000000000000000000000000000000000054b0a282610f108fc7f6736b8c22c8778d082bf4b0d0abca5a228198eba6a868910dd5c5c440036968e977955054196b6a9408625b0ca8fcbfb21d34eec2d8e24e9a30d2d3b32d7a37d110b13afbfea000000000000000000000000000000000f29b0d2b6e3466668e1328048e8dbc782c1111ab8cbe718c85d58ded992d97ca8ba20b9d048feb6ed0aa1b4139d02d3000000000000000000000000000000000d1f0dae940b99fbfc6e4a58480cac8c4e6b2fe33ce6f39c7ac1671046ce94d9e16cba2bb62c6749ef73d45bea21501a000000000000000000000000000000001902ccece1c0c763fd06934a76d1f2f056563ae6d8592bafd589cfebd6f057726fd908614ccd6518a21c66ecc2f78b660000000000000000000000000000000017f6b113f8872c3187d20b0c765d73b850b54244a719cf461fb318796c0b8f310b5490959f9d9187f99c8ed3e25e42a93b77283d0a7bb9e17a27e66851792fdd605cc0a339028b8985390fd024374c76000000000000000000000000000000000576b8cf1e69efdc277465c344cadf7f8cceffacbeca83821f3ff81717308b97f4ac046f1926e7c2eb42677d7afc257c000000000000000000000000000000000cc1524531e96f3c00e4250dd351aedb5a4c3184aff52ec8c13d470068f5967f3674fe173ee239933e67501a9decc6680000000000000000000000000000000001610cfcaea414c241b44cf6f3cc319dcb51d6b8de29c8a6869ff7c1ebb7b747d881e922b42e8fab96bde7cf23e8e4cd0000000000000000000000000000000017d4444dc8b6893b681cf10dac8169054f9d2f61d3dd5fd785ae7afa49d18ebbde9ce8dde5641adc6b38173173459836dd994eae929aee7428fdda2e44f8cb12b10b91c83b22abc8bbb561310b62257c000000000000000000000000000000000ca8f961f86ee6c46fc88fbbf721ba760186f13cd4cce743f19dc60a89fd985cb3feee34dcc4656735a326f515a729e400000000000000000000000000000000174baf466b809b1155d524050f7ee58c7c5cf728c674e0ce549f5551047a4479ca15bdf69b403b03fa74eb1b26bbff6c0000000000000000000000000000000000e8c8b587c171b1b292779abfef57202ed29e7fe94ade9634ec5a2b3b4692a4f3c15468e3f6418b144674be70780d5b000000000000000000000000000000001865e99cf97d88bdf56dae32314eb32295c39a1e755cd7d1478bea8520b9ff21c39b683b92ae15568420c390c42b123b7010b134989c8368c7f831f9dd9f9a890e2c1435681107414f2e8637153bbf6a0000000000000000000000000000000017eccd446f10018219a1bd111b8786cf9febd49f9e7e754e82dd155ead59b819f0f20e42f4635d5044ec5d550d847623000000000000000000000000000000000403969d2b8f914ff2ea3bf902782642e2c6157bd2a343acf60ff9125b48b558d990a74c6d4d6398e7a3cc2a16037346000000000000000000000000000000000bd45f61f142bd78619fb520715320eb5e6ebafa8b078ce796ba62fe1a549d5fb9df57e92d8d2795988eb6ae18cf9d9300000000000000000000000000000000097db1314e064b8e670ec286958f17065bce644cf240ab1b1b220504560d36a0b43fc18453ff3a2bb315e219965f5bd394c68bc8d91ac8c489ee87dbfc4b94c93c8bbd5fc04c27db8b02303f3a65905400000000000000000000000000000000018244ab39a716e252cbfb986c7958b371e29ea9190010d1f5e1cfdb6ce4822d4055c37cd411fc9a0c46d728f2c13ecf0000000000000000000000000000000001985d3c667c8d68c9adb92bdc7a8af959c17146544997d97116120a0f55366bd7ad7ffa28d93ee51222ff9222779675000000000000000000000000000000000c70fd4e3c8f2a451f83fb6c046431b38251b7bae44cf8d36df69a03e2d3ce6137498523fcf0bcf29b5d69e8f265e24d00000000000000000000000000000000047b9163a218f7654a72e0d7c651a2cf7fd95e9784a59e0bf119d081de6c0465d374a55fbc1eff9828c9fd29abf4c4bdb3682accc3939283b870357cf83683350baf73aa0d3d68bda82a0f6ae7e51746", "Expected": "00000000000000000000000000000000083ad744b34f6393bc983222b004657494232c5d9fbc978d76e2377a28a34c4528da5d91cbc0977dc953397a6d21eca20000000000000000000000000000000015aec6526e151cf5b8403353517dfb9a162087a698b71f32b266d3c5c936a83975d5567c25b3a5994042ec1379c8e526000000000000000000000000000000000e3647185d1a20efad19f975729908840dc33909a583600f7915025f906aef9c022fd34e618170b11178aaa824ae36b300000000000000000000000000000000159576d1d53f6cd12c39d651697e11798321f17cd287118d7ebeabf68281bc03109ee103ee8ef2ef93c71dd1dcbaf1e0", "Name": "matter_g2_multiexp_0", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000eb3c91515d4a41209a73564741a8ccf901a624df9db22e195a5d02d24b7bc0a12756b15b8d006cb991a7e088eaef1000000000000000000000000000000000704ce8afc808b0161f6f61b22d990d713ae398779e6e74e9b5771daf006ce0bba3a8088edf75156f0e48b92ee8409b00000000000000000000000000000000018fe81e05aff0620f4bdbe4a715e015650497afab62921eba0ab86b649e5a2fd3d54041868928519f537e36448688a0d00000000000000000000000000000000162bd97161201ea3c26f8dd1204a9c6b61b762bdf573cb5d20b6b255f30208ca7d96aa47b46fb8c6bf0922075f1c1ca807f80a5e502f63375d672379584e11e41d58d2ed58f3e5c3f67d9ea1138493cf00000000000000000000000000000000135aee0e30fbcad798738c10d4aebcdf50c89ce516325f655fe763dce54ffedf94dd74168611e5ae879b5bf5598d62dc000000000000000000000000000000000c728e672cd8b3bf9341bca929c34118b566cd3a80452d7015bee9d5cdc001b1f5c678d4b2cc4f7cac353e7bf326ca1e0000000000000000000000000000000014809aa22e2051e463fba6d49fbb060d0c7f599a0fc5409d34e71f34817e7beb1251810ae6eee1848c60796fb8647dea00000000000000000000000000000000145a4de777d86025d50e12f9a6615ecb9bdd41489992d1b643dd9aa549acbc63b04b0bdfd14b6e45c70f165e9a8c91bebb169138f94093d5c1c6b253cc001ce8baf78858dae053173fa812d2d1c800da00000000000000000000000000000000009a58b7116dbd6f550f8ca98071813130ecaa9ea86d5275eebc36860690fa048c9ebeb46600b2b63e847bff3e38ed0d00000000000000000000000000000000113ffc0932c041e0e34b2540c485eb74f5029b339cb60bc88a8a749310f33f330dea137e5f340044fd689264af66696d0000000000000000000000000000000002642da3c2c7b6688aba0b19ab29ac72e35caafa044863c364ea8833fca850289de52c0963bc33d7bba40cb5f568718a000000000000000000000000000000000552d35ca054da2f148c119454f6760607b351f2441921a2be17da2cc10902d71571c5554f132e60df79679428fa07e3e40608bdaf3e7764358a64a920cbb33ab4d571c7b3092e1ae11d9697f82ed8330000000000000000000000000000000018fbbcba3d4b1e548ceaec4a48db62a2420ff29a67af332ee7ea3f902f84e6c375fd33abc33d945c5bca25603979f9a400000000000000000000000000000000072ff416994364bdc6535f36c82212afa822cd94fade69f11eb38dbdcd37c7e22af55fe05e6a826dad822073656eaac10000000000000000000000000000000017bba179b847278a4878b6faeaab3b1f4bd7540d22817cd9aff95557497f8b9d286657b6162c0f89f7820becc637dd550000000000000000000000000000000018e2bfed71aa9b11fefca2f0db8bd9b8c69540267de50bec4fc90a6e9741891465c9761d19282e1100b3707eeb598b31d411519f2a33b07f65e7d721950e0f0d5161c71a402810e46817627a17c56c0f0000000000000000000000000000000019efd37727dfaedf697fcda7a59847dbda8ca7cdc92f34e68691d682e20ae6545ac104d6660fdb8f64a051e69298eae8000000000000000000000000000000001225ace0fdce456dd888c9672503b68ef77b2d11caf1265a767a6ea14911e3ca03fc153f18dfe9d95e0cc68b7b8a3a8d0000000000000000000000000000000008a6b059c1c4da046cc0b1b5d7f33270aceffa607daf6d0d078c06f940604e1a0b4adf01a4091306e3c7eddcf3d95101000000000000000000000000000000000f79bae5260a2f114ffbb9273f3049d3ebb002500a57ee0a7d157d86957f43f87a2e026fb9892dacaadca5ee04fc8e176bb3f9e512311699f110a5e6ae57e0a7d2caaa8f94e41ca71e4af069a93d08cc0000000000000000000000000000000016d2b73eeceee17d3bff3aacac9df9ac1c4248d9ea7d6a503a757f7bb22fa6970bb6f5cb5ec154785f7252e1508b382e00000000000000000000000000000000081edc68bbd8db7b10be06ee23d090bd54f9ca07ef24dfed7df7bb05f8cc26e6889dbd40ea203fd5cca5cb588199f9e40000000000000000000000000000000010d3478508619ea9493b4330e2fb9150024cd32dc1378f824788a884a4a30fbf39c630f465557bf0c6d69b4cbecf89f9000000000000000000000000000000000f20c9b134db5d8b7756800c031bf5962fc560ba95d4bd9157b16179f1a37ae08696a2be455ad8d018aead6adcc69b712a0c988d97e86dccaeb8bd4e27f9e30fad5d5742202cdde17d800642db633c520000000000000000000000000000000003dce67181d23af9729e9fb0653d7f79c890fba27de42fada93123e112c4a468fa889921192db8047d86e4db77c60266000000000000000000000000000000000869a1e39d42d9bb0cc0568fdad16abbdac3194af893ebd8dd8f8c2c3c855abefa5fc215412168acadc88e658e83f5570000000000000000000000000000000001ef139a75194f3c4b1378c2b66dd304d179460bac0a289405cd8faa3ff66a7b6e54eb7b8742a68150b1e098630135c40000000000000000000000000000000003892b5a645af916be2c6c7fc0bb08fb5f39341d3c68598940554e1be11e1be75af920db0c8710ed13c78edbf683f17d0b299c14892e0519b0accfa17e1a758c8aae54794fb61549f1396395c967e1b1000000000000000000000000000000000264dd4b477f5db65edad28c7153ed919a863c5c5661e0125c5429b323e055fd69c33142dfc6ed9c87082e2be4675e1f00000000000000000000000000000000046ea088a2ec94d3a1f1f97949f1ebc49690c453d316cc46534fa253b34b30323b6071d147d64bb94e02fb4db07bb0c400000000000000000000000000000000013692a33bb1348486eec40a9e93a4ea3810c7b4d3188cd07e235a2c898aa87ee0d17682fd24f4d978f9fb028fd26e2900000000000000000000000000000000115f8b64c00cd5cd344a7b5edc0ef0bb85a3e8f0f9dfb28f8ffe12db3e0d222c2d45dcdba0fbdc161c5d558bc71aa0977064d43d6802ad4c3794705065f870263fef19b81604839c9dea8648388094e900000000000000000000000000000000014c83d58d90db4821a0411fab45f83fbc05f7d0d7a67ce75da3ae568978d15f4c1886c6fa6086675c0045efb30d818400000000000000000000000000000000001e68691123451f4c3df6dae62c6a63855ec3597aae33a8a10ee274e902e9aab1460cc9c79726312df0ee0ce90c8d3c00000000000000000000000000000000018a39eb3e3c6c7fb8ee304e55d15e209afe2fe278dda93552a7b9f51fbd778da1502eb6775cbc3f832f8320fa0686240000000000000000000000000000000017c15910fad1ca5749aa82a5a2fa98b0ebb37e92912547fb1741f18c34e0d5fc3a307b928636c25f0320d71cb9d31062686285a0e22f177fe3adbfc435e9c1786752dcf3c11b723539789b0cdeb0647b000000000000000000000000000000000fa96d9fe01c18732e8d6454df9bb1f482c4b9add837ce9c354c72d49c2d44ec694674aaf0e6d6a095cab7ebb57ccd9a0000000000000000000000000000000001f8ffe3fb7e9e311e0f6949c07c26a0febb181e37b2268bb5e125fc3a100323740d1ebaa5e635dba3770fdc2ce4ee860000000000000000000000000000000012ac42095fdb677720ab3f14bf0afc55c95b43d28d922a5f8cb0bd841306b978751d24546e3a6474976961d0768f29e9000000000000000000000000000000000baf9804d99039c9fe966a696c64bdacc9673b0906b4deab108d34fbbaa3b0905d50892278570564017b96828c7e1ac93176b6724cf984632daf95c869d56838ab2baef94be3a4bd15df2dd8e49a90a60000000000000000000000000000000014ce6d88a7c5c782562aa101550f1af487296adebd9dae8252698ba04fbd58b92e2216de6ffd474d5992f97d9f22800d000000000000000000000000000000000ce92a04f5c8a99ca0e93992448222519fc454bda5d1d8638a7bfde968386e4ba0dcd1da59cd81d4c4dca3e584be0275000000000000000000000000000000000cb570796f5c8f7b8aa02e76cb8e870d3365fe4dce5df07ec286a0a821f922b4003d5b69c0f1588206d9544013e268c400000000000000000000000000000000098056a033d9cdae86aac02de3a444471854b909680719154b44d4f55f30087294e39e57643c692d6da725b859239080d76db3dcb659eaf6c086be6b414a494dea4bd30aef8450ae639f473148c05b36000000000000000000000000000000001214aacb0a5e6b7a40369a83c07fa8cf1786ce7cbde2b5a501d9c1292532df7822d4fde10a31fc0cecce3a7cfe3311850000000000000000000000000000000004f9669d8fe4f884ae93b2505710e6e45b19b7aa5df8cdd811f09e547efc27d21024cba05e2dc9d057055f30ec72d9df000000000000000000000000000000000a852b821b31cd27eca19712a636aa05ef2cd82c36ac1c2ca240edc7d0172b42a72c42d3cba583a5b5129ac1c9486e270000000000000000000000000000000007bd8419e791a5cea04993509e91a980d3ae4987a5b322400b6e4a4f2b636891a1c7ba4de96b53426dd556532403d5a39915646de2449b3cb78d142b6018f3da7a16769722ec2c7185aedafe2699a8bc0000000000000000000000000000000005ef88bf38b2f998dec7302cde829076e6cf69df23aa0bf6bbb39fc0d3d8b5eafba74efb928b1de0eeb3d86ec82612300000000000000000000000000000000011f47e9583997b19c36616e4bf78d6ddd6d67937f493986250ff02aef6e6e7ff074559af2f20a5bf1d67158e4a199cdb000000000000000000000000000000000007777c8eb259a836e6459b7bdb642f878d869fdcb31b105d01f280938ef5377f2775874c099dcd394abe70f17d595b000000000000000000000000000000001607379d1cd34e2d0ed765a339b21433e9aa489609b92414c6b5a05d796085269c288d739717def9db3502e0550860165061073223f066e35242772385c67aaefb3f7ea7df244d73369db1ea0b208792000000000000000000000000000000000d6e3068c082b68312141aa68f1540ea1415e93e7f1762b6f06ff408a9995542da1c727a13355c19f8f418a44de1a95d000000000000000000000000000000000dcfcf2ab12b1a0e521ab402aaa4d32ff649a5a97892eb6ad98487c3c73c35601c313b8130ad12e9098d16eed3bcc2e00000000000000000000000000000000013777b1eefa4af03dc44e4e054eb7a3a980a9c55644900b80346be84b970e1754d1f4ab771adc9249e4accf88a23fb400000000000000000000000000000000002f53b231f1209c6f8b52f99a78bc2147c951ac89b341495f4a60a6572985ce2bc823625099ec214bc9ceedb2deea3fff396ee22209271ea0bda10fb5e2584e7536e8bb1d00a0dd7b852b0aa653cd86c00000000000000000000000000000000161c595d151a765c7dee03c9210414cdffab84b9078b4b98f9df09be5ec299b8f6322c692214f00ede97958f235c352b00000000000000000000000000000000106883e0937cb869e579b513bde8f61020fcf26be38f8b98eae3885cedec2e028970415fc653cf10e64727b7f6232e06000000000000000000000000000000000f351a82b733af31af453904874b7ca6252957a1ab51ec7f7b6fff85bbf3331f870a7e72a81594a9930859237e7a154d0000000000000000000000000000000012fcf20d1750901f2cfed64fd362f010ee64fafe9ddab406cc352b65829b929881a50514d53247d1cca7d6995d0bc9b2f0d3d4cf46265fc0f69e093181f8b02114e492485696c671b648450c4fcd97aa000000000000000000000000000000000047f92d6306bed1cb840f58fd57b5b71a5df7f86dbfa55a36636cb495e08715cd57f2f3e7cd99a1efc28b1d684de1cb0000000000000000000000000000000000f4eb02d687a1a6105b4dbd740e2c7924689d558e6cbfee768dd303cc8dd0fd887f5eec24b54feccf00f473ca3f54ad000000000000000000000000000000000edad68c4d536912816cf6ef039c3dd0535dc52189583270b3b038e2c67b213d943bf384ce69c4a9dc526d7ef309f25a0000000000000000000000000000000006ff4a6b5129ef026d1d5704bf7fc0b474de92b5cf39722f165e73f4e7612d6d3bb40743e4b7b42d0dad5d5d6a2d4881915b717562844d59623bc582f1a95fc678cf0d39af32560c6c06e3a74023c89c", "Expected": "000000000000000000000000000000000153da66acafe91b6f13cd739ed3342197310e4824e7aef2e3414654c2678b8d09b296c3f928f3cc489893420031ab800000000000000000000000000000000010f501a96b86343a7c8d8c1250577cc9be6ffec81b5175ed07bd14988c5bbf7f2f3e7111df7d941d0cd267ea191d6ac70000000000000000000000000000000015e0d88894f7f83aacb6710f6c03ae60db8844dd3beec160fdb1df746b1f38a5e23def0893a0b39bee47c97af6535fcb000000000000000000000000000000000bcc275115e87f2f88c4afe8bf4faed46e6ad0c0357884356a26120591ba283f06b464c4853217865b1d2301965f2bd4", "Name": "matter_g2_multiexp_1", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017b32e613cb38b41dcdf3c8bb9187d731546977fbffd79fa7f66e3d6aaf9e1af6eca2fcdc260c8f90818d7148ba2f4960000000000000000000000000000000007e4d26606a47c874c20e8480a9f5815e5b577bccd783b775d10309eeb3d2102c7a0abc3324679e44362f09e7a4ada67000000000000000000000000000000000cb6f12ac8b49cfa36b957591293c87b21af0a949c55a28a90ab0fce88fb5cb7645e20ab2edd284f0ad1377dd95ac10e0000000000000000000000000000000014c96b5dcbd3150eeaea5c2bc27750cf88b30a91933a3233a4d1d9b357a80cc20d135e43a344e718dff5c79045c31f86d5c1c9fa11c36b86430cbb1f3ec10ebbe3787d0f5641d6d7fb96c810eda202dd0000000000000000000000000000000001ca1141ba9542c56de8991b313c6ae42fcecb6751b0b81b8cb21ed70d5008f7ffe831766b89880a7fa6dfdb09a2cda3000000000000000000000000000000000e6766b17db165bba564ac63ab88d3f8f5eded07a40b48644e60d3223d30458e7dabe404cab8d6f9fe135712ef0b1a43000000000000000000000000000000000dda3e6c87382fa762510e5cac721fd2b654f002f5b9a3767a8c6d651ccc582e80e3f68d6913cda30f9f51ebcfc7c98600000000000000000000000000000000059a7dac5bb6b504f2bd603d486700fe22c14f25254537b2c9079c2b45d36c7ce56854c5699cc7649b533194f51a9045c00eb20fe7c292f3ad820a074d8b3d8d24506612752d8677c2d6ca24f556cc4500000000000000000000000000000000090f4b85961ce97cf7f99c342d3627105d790f611e19721a43d8a0febd67ae393d77a02b999108efb56f0397dac22703000000000000000000000000000000001112f23595d1613c47486eadc37f9b1ac3b3c3973b3fe964d3b67c3996fe2eacd9df5c287b0cea8e9475d146fabcf9e70000000000000000000000000000000018f46f7ba3c9af34c1025c2d460f0be966e68944928dbd55cc7fe00e5def598d80b0e3801e48a74963c974ab4727a52100000000000000000000000000000000096845338d5cd2ac44e097607d6a1a05c241eda1941991ae9edbba965d9029032c46da7218b5b2338e6c58898bc4a820f661d7b30fb11bef70e15b257d7073885468a380862202b2d705a84827644b5b000000000000000000000000000000000aafe45ea7cb8b450a51263eebc28c1ded662972bee512e24fddaf64f43b74b66032523b3b104a4e9f6b62394436c6710000000000000000000000000000000015cb27e1fedfba2d1679f78a388f90b22bbf3e7d090f0ba972fa8e72f6e31c446f628fff929953712ef6e425d16eba5c000000000000000000000000000000000df9931893cae713042bf722db6ce394b6f346587278a154c271d8511e690417eb6dc47efbcebb7c2fb9e77f1de9fde800000000000000000000000000000000106ffa395ef170c99bb5742428ae88fa4fd7a94476985c099e3b700b7403d083281fb71a19640c6bc2321e27bcb33fe2346ce87c847376c8967cc18297e6007dcfacb6424e1d273930f38bb0e88fc5ca0000000000000000000000000000000010b1f8b1c492a56936da905b8738affba6bd29ae5fffd40ba6b31325181d3b489a81b23dcb69f6e71bd29bfb388e5a8f00000000000000000000000000000000116a115303b4774da59844e457844232d088062d920db67b2a8450a194be7e5340ebd4d106454fd9a03c8f50dbb1e119000000000000000000000000000000000eb521edd61b38006cffc43ab72d395d669dec196846fa4d6d43521da6c2fc3bf0994ce7556a3cffec7751b3bc5703ff00000000000000000000000000000000073cea36eccaa1c78deefb6029903c2b6598301bdefa9759719c3b590fcc5a6a4d3d4d19f552b33f4a3126a6e6a8448639a142c443a666499a880aa1cb9f523411bbc8e5554de099ab485b6c2c2e57cc000000000000000000000000000000000e3925fa085db73c1e67b29ae90f8773f83be5ec684402e8e2360ffee8a8368911e584843e42b0d470de78591df6ea6300000000000000000000000000000000075c7efdeeb16609b4a47ea442af4d75238fb7534fd96cb236a7886809d6adc2b62c8ff72bdb041bc51c1a71b68219e300000000000000000000000000000000088b4eb0dd185e51b737d797334590e982b7b0a5f109fc7d0524b2465c2c0457964eba5a6d2d4d99fb628f21f15a776c000000000000000000000000000000000fc79f6b38f3356972669290eeadcd992a22bc1191606b663a1e148aa58db3938f0fc65e536bc5811c50d9c7f03d3e372c01b7795c2d16b5bbbb1e107be36cc91b25130888956b0cdd344de9b4659447000000000000000000000000000000000b87c47605fc060a8e3677e84ce9d14b9309360a13c80d040c625fbf0108f829300cc1fca409a0f9c96311cd4a9a21e60000000000000000000000000000000014c4088f1e7935cf6a1d2475b84497ce6a250ee2c0c991fe51a2f2836388a354824b02d9cf215328dfce3f546713e21100000000000000000000000000000000120e59be3ecf35674eac6cdc559599b273f13f28a529770fa156f8e519734c451eefb35023639f32049cd19ea0d945a3000000000000000000000000000000000f97755b62a8cb8f861ea02c77819f0b58181aecf612d92180ba9b475f0b4888b922c57f6a1c619dd5514620a1cfd9e2c712943d8795a6104f024b9701c70b09cdee9494755bbab0576e2c7f7c9d48280000000000000000000000000000000005860cfb6be6720118623d2d8ba05e686df22744b948421dd3cc1b1691e00d9b5d00d00195b4acf7a7b043f764f3f1c70000000000000000000000000000000012632a3313dd611e8d969bddd556c2d79ff387603462ac78ded3a842981697bdac34ee6f1f4744ed2ff16100874ac24000000000000000000000000000000000112b94c317586e343acadeca611c485c3ea172bc10dd39158c1e678007130062a921b53826d7be6286963ff822f1066c00000000000000000000000000000000040de8c0dadd2a6c2a7ea0fa43e1a5f2f5a6be3fcb0de6875d8cef1ee2daad87125d12f6869c4dd3d931b296f1df2fb3d4d77f6246c57d398c57848db8d3f986c475a41a23d424cd3cc2b362c1b99f2a0000000000000000000000000000000006fcd2c4fe848e9462ba1112baad39031c210952adbdd06293a622ffe2d1c6e4fcc8773ec8913717018b97bcb9a554fd00000000000000000000000000000000130a97442f3273b7b35464545e7351faf71ead9b8996c63889a45945ed82bba29bff5014776c6185219a5234d8475c92000000000000000000000000000000000491d571bac5487b866022a0714be11b38bfb296233845cc434a50be1d35f516b8c6b046fe3d0a8f4f95ac20eddea01b0000000000000000000000000000000017e34b04e6fdf152c848f2432b7bd84b3dba3915f06eb77efb8035750aca9d89e92e1d1bc4871105c440d639e8d8b05541776ed9d1029918af4c5113a6110139b8bd7f938caa204373a28ddaa51430eb000000000000000000000000000000000f1b8df4e8fdfe32eaf227f5af9f2befc85073468f10b81d32d0e126fe2b0cc8e8adb8afcac73213b6ed95e8e843b97c00000000000000000000000000000000004e3fb435ae0fb2d8bd091f250aefe5922b353a64e16abd75627737f3bc56639f8b40652cae69c73ff1969925b0afdf000000000000000000000000000000001003aed7cfb00efce49d6b1a8eba27df87479a4d37bd7fda6121549483b669a1a761204b0dd28262bf27e5c8e180540f00000000000000000000000000000000114fbca7caf782b3296d0b26b4c362bf50acaecb8bc5726b2c99f904ec3d092d5d40991d0d30c8e79fddaa45f04a75d3fa64411438542922a7bac10806efaa633d31d37c0b223314a8b6221155b9c4250000000000000000000000000000000017faf481fd4cb0c373d21d7caad40e93d9a86e62d26136892fbcc6f6e48205543aff00c45e82fdd1d3e0e733de91e7000000000000000000000000000000000012e14fcb9ad4d9d15347cf004745ed4bd92097eeeb41c4cbcb728a234616363589d8f5ad4cbb61d31a8aa27627723c7e000000000000000000000000000000001513dad1ff27e053902e779e35d04cab648939317830144ea775c435a4b55e13fa2fef03a1256abf5c187487c25a774f00000000000000000000000000000000139da29de8587c7d0ca9237c37a116387385e9cea453b9e2003a37ede7aa0a3f4c1df55255897f5975b662be33622dbce7002f41c6acab677a0ad023bad2a61b11c1b7221d944018b5ce60bb61e87e96000000000000000000000000000000000c118b147ee3489f30c6ecc0256a314ab674110588e8b69ca6d265fc270c3e5b767817f861140cca5d7c6be4012d1ffe0000000000000000000000000000000014800790654726959fd876b035bade0da744fb36ee5b304f228663a531345120267c55ac19fd66022752010e5bea7cb30000000000000000000000000000000000193ab7ac2f151750356b6e178557460c9c2672b1736d19a20e3fa28082479ca60021aa68edf2524f1aa826ee70b65a0000000000000000000000000000000015cee9ac55ab45abbc57d0ea6ec9ee49f6c59f6b94f99589dbc08ee877d3a261ad77f5473fedd72ed7206647eeafb6eac26e55f09b787c0542878e4d720027d9ea465f829a4e0164cf618c5d9cde49bc000000000000000000000000000000000ef203fab794a0ef29eb2ebf00076134e5932e27c99d6d445695b9df2afe7563602e318caf5d44724a21790ca0ab0d180000000000000000000000000000000013b9b1b1d3e98b61b0f1a0ef3a1a4ceed57b6c01849a4ad66a86332b3d27022cfccadd3567e6709d2de5b23b23dba43f000000000000000000000000000000000c1fbace49684f4be32ef6178ac3a95ea3f50b11494340fb73dc5391d50bcacafb3bf0f2631fea9c4ec47327d644489500000000000000000000000000000000040f82812855aa3e3aaba826d5810c1049cf44e86e44e23cc6da437971b529d2f2676c73e1fb9da52640c981fbd710bebba67cc47e38a129ab1140fbcf0386ddba2feefc919aacdce6059a27a1e2efca00000000000000000000000000000000060d7a718dd02b147c265f71eb136d1f31781b12a41866b4f86d7374b93dd10058c192cc0fba928373b1526e1a5d7d7f000000000000000000000000000000000cf29275373c0573ef22bf87919faf5444847203c7dc6d2e18986152cc294be04a5b1a4b0536797158113a15276c4fc6000000000000000000000000000000001016d5b9d4d200d7b4b7cc3836b85d6697fe14db350badba9978c7b56983dd1a7e572640ee0372b0a4e2079ff4c1abf2000000000000000000000000000000000f2768d104d895473ddf8c6b3cd0e7c22458d0037eca6365c766879a07c95037ee0de00d32c974d767080935abbe0be1705fb566367d9fc142c4194b0525c16672b843aac1160f9056ebb115e80d377a0000000000000000000000000000000017b9ca4349fecaa43ce911c0b256680edb8a0906ef5460fc4d2004579336df1e19560fe960a7a7cd74bb6e8272e08960000000000000000000000000000000000d5b96dae738db59cc67a51c61bec6deaeefaaa51e3259243fa4b142ef59676231229ae386ce699fbe18c4c00bf9d49400000000000000000000000000000000111b79f4b68dad16550a13334d09dc38336a75a5da23a17b5064e2d591aa3dab4c2e982a9f730a7633070504663a24610000000000000000000000000000000018f6d3616a7eaf17c805a88c9710039644d01b61aefebf76717ddcda6f4bb34aa15702de1e92bdb27b27f3409638da90f7bfd990cc4dac62a0d730f56b4eb1c1ad77ca9cd58b089c23c2f6efa00b7fa4000000000000000000000000000000000aeb5c087644595d0912879f61959d2731ff55260c682ed2bc5fc55c13964ef7c1f70aeb55876d2264d558c31371ca69000000000000000000000000000000000e173848f4570525b03a2b2c86f4dcdb8b28dd6d18c1354cad31028eb1b8b44432c2346edaace093e3954c7fa6d338a4000000000000000000000000000000001949b0902506d111ef6318edcd7a58ca4d69f5804a028aee73c3786cb2db168c6a73b77194f7a021ae6ae43ac78ade340000000000000000000000000000000017c5e28ba6103d97e2f3d3611c0c78f06406e0da8a49ae29c7d460b52f75136920784cd500aa3593858b877697eb8424807c5a41ae2baa1e10ebee15363d1d4569f731d77a418998108f5dfae0e90556", "Expected": "0000000000000000000000000000000013b49054c3957d1e77ba2dc3ef75775bab9f0e9f76b33ff22e244e897b8ab80ee0749c81eceea259e99b5d2a72251e5f0000000000000000000000000000000012e017e4354ef86f73ec51921cbfdd01e3113cff044a049bdd34e36401712420790cf718bd28afa280ad12104c1851ed00000000000000000000000000000000097f28bee5d903e3c6de14e834d5beea5c847c3106742978e586ba7e913f8b631a69c473aa10e19df9795ebfa3ea6a98000000000000000000000000000000001953493daf65b974b549bb98e735da44b543d6fcfd97176fdc7f6f03617d90e6bb952a607fa8e5791df5dc1c9bba2286", "Name": "matter_g2_multiexp_2", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d4f09acd5f362e0a516d4c13c5e2f504d9bd49fdfb6d8b7a7ab35a02c391c8112b03270d5d9eefe9b659dd27601d18f000000000000000000000000000000000fd489cb75945f3b5ebb1c0e326d59602934c8f78fe9294a8877e7aeb95de5addde0cb7ab53674df8b2cfbb036b30b9900000000000000000000000000000000055dbc4eca768714e098bbe9c71cf54b40f51c26e95808ee79225a87fb6fa1415178db47f02d856fea56a752d185f86b000000000000000000000000000000001239b7640f416eb6e921fe47f7501d504fadc190d9cf4e89ae2b717276739a2f4ee9f637c35e23c480df029fd8d247c7a7e300bcb3c740fd1f693d4c8915c4c46dcb627f6de6e4847f123623cd23bac7000000000000000000000000000000000f20a07526a082e88630a0256d134a8a5e8ada07b1cead39ee838dcbb30904e9016107fcbdf1f8ba182308dbe0b043d20000000000000000000000000000000014fb7732f67abf60c03ac902577532d0acadb5f3db0d6397a42ba693526ad74f2c61a0195bdc9704aaaf12e65aa6d88b000000000000000000000000000000000018cec4fb81c85d304588d11f8b9c51f5a053df11463e5812a1b2e6c7144522ba36bb91adf219892d0007cee470032e000000000000000000000000000000000b8e52d958a12a9037e8be9bc0d5045cade2d6ea05c6e68462b3a30b5d4ea34e5fbad173761e4e216b2e6958c8983b28b473df5e282565a0783d23e65e283a103ebbddb5c884183cceb62fc32d0e9602000000000000000000000000000000001468cb35a60898ed129f30c261b8431df6a154c250ec16d85a22f8717593b2c21853d123da86d977a7938c5ed74ef23500000000000000000000000000000000011f4e28e31b5f9e6877192a5e632d8c1ed7ca0c42e6e9902ca68f1c2de0f648c6064436012c5c7b14bb8d1078e02f2c000000000000000000000000000000000b25114b2697ca7eb1e6effdd1054893a188fd382d387ec098f846c1137a9b9baad01653b963a0b0bf3cb50c3ce3563d000000000000000000000000000000000c1d241cb03e642c1752b1e1886472477c19a2801ec032dc220c3243952f882094119bb92b621b654b766bc900d2d4f7a048ef7cf5d1f6f625ee3aba091147c389ebebc5b8f3d285e16ef4e8afe5c013000000000000000000000000000000000c80d4474390fa791ea5f2f16b41506d8ae13ee0993c8d31a07712687298ee7978a724999500c42400d2f788a5a36067000000000000000000000000000000000592705cc5a8875750a4e6ceb42aa3bef5593eda9e8212702a2e08ea70277a2a66526bc5237be33c8449301544da35e60000000000000000000000000000000000facabfbd15284c6433f17b0e6035d4fdd84d3ad2dd30a27d52809652ff6e7a684d7724697919100567ad0c3e1a26320000000000000000000000000000000006a0fc4e2af69ce15a356656f5d182a2cf213d76a6047a05a1a3375909d245f5316b91333d2141c0817438f0d87bb52da9b63c6bf36997118d58600c1e429c105a379b9e8b0de934ab9f433a4fa63dc80000000000000000000000000000000003f629618e1fc3018bb836301ccdc59022f0a25cc9c5de6e4c31fa08feea525c83256235e4ec8364e77e5df478f5f62c000000000000000000000000000000001120d6af221ba6f4351bbee4c2c664a769adb17872646df2c408f70c99ea991ffced4eab50fa98be1bb9426915f125930000000000000000000000000000000015cd16b028ce3d58b10aeb84b783475d894ab3f0cfdf7104ebb4f3417a038107128f07518dce548271061cb8c97e88af0000000000000000000000000000000018379875b68bc26107f9a068e5034f29dc2ae7e8830f8e9ecddc53fe7991206646cda33d37b31a47a977b46be58d7618f228da17f49667c113d2bc2a2c8a338f80be68496f5145b4be21a5786ca6d46b00000000000000000000000000000000036570783711b381830e35878fbeb187b84884a9a0e88c38e84124515b470e6ac18157e1499026b27f4f731a961eaf330000000000000000000000000000000008382838c18d56c046a8db495babf8d14c915622d7917ebe10cf7da7ecb65f174cddb9e70d0262ada961b396c5511b410000000000000000000000000000000015f63ce982aa581dad5c71fc79251b7f6336c4e78a4a0f4cb6f87167cabd31cbec987d7af4f11dc6d693a0b0774864130000000000000000000000000000000015c001372fe0530a3f50fb8b30e75ff4b264d673e0448211d082c7a9018f583b4d01790019874596c59c68768cfa3e699431e18a462fba704216b516e819fb3392e315b0c92a7411a329cdafeb51124400000000000000000000000000000000074d78cdd35ea17a3013e2301fe9f80f2d20d270a25fdead37eed7697a52d152612543781763e6035fa5452ab12cce25000000000000000000000000000000000e572236e1c203a1c0f99e6ec978458c1a143a6a650eee27cfbe406bb2858fe5f30222f468d119703c2f442bc644ff3000000000000000000000000000000000125384343fe132e16a9fc15efe1b3a9e47289e0afc4b44d492e33a6216edbc96d66c1ca66944a8296e7695f27f414c5b00000000000000000000000000000000084c2cbf0d7c932c3098ded7c70d4411eed882feb0f79e0f7f1c31f5fccb6d53fb57de179c3ba5754bc5e532c3784df12051041bd2f12f6e6e29924139770fe209b7bbdbcd6c0bcabbf5021a7dff2d830000000000000000000000000000000004d46066439c3ac559cce863c58316883651023990180470d2efd06e443a7caf3a514b54f15ce6e850d32779215bcf4a0000000000000000000000000000000019ce904b6c9c3de59f7d5017f60f1978d60c564f94a0f1964c24c876d1139a7ffbeb6d0d4884bbfaf5f2f189af6904a50000000000000000000000000000000015f1989719e69be95f25dda9358fb98aae2819e0deb7e2d291e2c01e85ba26a9da421896c6b6e2ed20f609b533154694000000000000000000000000000000000b287cfcf1dd7c6d735c1358dff15393ddd6c82e7a33c5d8005c4234cdf823c76a4725fd74cad74b3ec51df67f09af0fb96df57a600dc3b5aabff5b1034886d24f6fcf035bcacaaec738deb2cfb8f85200000000000000000000000000000000006b37e2226957d639fcb0bcd6c20b3c7b8372e7347a14b970e01c67c1859fa97c754ce588d0f835ecc053549d963ab4000000000000000000000000000000000c6a5fae8be3a32e3f70a4202a1ab6d97183964b9f7b9a084c49922cd9e0e952b0bb66c5580f0e0c417e079493bcdb4e0000000000000000000000000000000017b6132f11adc0d5d693ae7f3a0f89f5779708083eba23e03b0c9265e4e60624e1fb6940e8ee49d31618fa6389b1b50b0000000000000000000000000000000000a45c5f6df71359648aecb6434bad1619c39f10e279a02b3cc9725d0256bcd126843fc9ed29cbe02a32cbbe79774a3378176412b07eb7f423f23ffeaa0ee642590e0b7016bc063f3fffa93e1e35484c000000000000000000000000000000000ffed009c78ba9af8cd33af7b7697ae4dff863bb92365055baedd2299b7f5b5e8abb84ed434f7223c3e309ca53c08aca0000000000000000000000000000000003b2370c837dd6291818efe7c9af62dd51295c418739ecc509d42c92e2c97d12a9fa582946e176e8153fc9a273140b2f0000000000000000000000000000000001e63438e8b4a0462cfdff64a281ab4a7f48d51b51325817139f8ee683484f8695f1defc0c3efcca81d5fbff06cf9c54000000000000000000000000000000000192fc391cdc1ed6ddbd317f2f366f2ce25ba27b8c0f09c733e7bc0c0697544399a3a4f1186d139a8f6399ffa88e89a69c4b5627d84e153f3a4ecc14ddd6baaf1d62253a0f88d3af51be18d991976da000000000000000000000000000000000002e105e0eaa418d58019a849b89accf665a94ffb0bdf308a11b99b521de7af8ddb150c0e3b2e9c54cf5456b6105bc81000000000000000000000000000000000691a3b3986fbe1c0ea22329364454f37f645d6abe9310e883b9191ce512347e074e18e28b88c2adcc76190a549b80b40000000000000000000000000000000003f3a37a763c8d0d99a3fe36923843a22cb0fa18ced48493b2510fc99afe5b7699bbaa6c2ecdad8aaf72969354f121a1000000000000000000000000000000000f4bbae00205f54eb10c83d928d908fbae342b76050e33c51b6e282e02b3c1f132a4728dee4ea95455c25fdfc112f2542ed270764791aff081f1dc8051d22b8e18803a7e310393f21bb4a495a445cd450000000000000000000000000000000009a3e98fe4a98582ce9f274965f376cb45e8583775dbadf626cb1327c1f8a25b293b97e7f8f31ff72ba7e8e769ff25ef0000000000000000000000000000000018e4785ccb76c4897087c8a4242ddc744c6a0a53a4a844254153c23d6f16d4ddb945252d13f93101613f4eb0b1e2b8320000000000000000000000000000000011b81d344eac04d3471b1edde5e51f31f97bea3396580839fa094db58cf6bee371bbdc045fb60c3ee5c6cd5d3f6d3c4700000000000000000000000000000000073476bc5b1d52ff4ca89c3afc099417f473543fab6e59cf9de8a19705dc4bf2a210b1e6de4dfbde035c312be0c70c56fbfb7606b64eef0460b8f33a0be54451fb655ce0b81db89eb7862f392450354f000000000000000000000000000000000c414b95b298b9c673001173ba7e5ee3e03926f28068481cfa0b469ab556f8fceba9fd0a815180ae0b82c265fd4c6b7e00000000000000000000000000000000054a242c1cc1a9c710bc23305d09c2d613ee8eb3840b37943bfe83f9c1db456ab4436ad319fcdd8684db129d76c95320000000000000000000000000000000001683711c0c7f02e67374f190eed1ce6559479d6d199f43fb5b0ce7df7774a5cb21c86b3b3498855d9b69c5763acd8c4300000000000000000000000000000000062f87085dfec847af518bd71c078f994b090c3b27c6eaad79772ab58afa43993db52fb08649a32629d61c3db12c87318a29fcc442d0c2446697e94dc47181dca7a314f9073c06aba6dc55aa79978d7d00000000000000000000000000000000083eea9b5b2d5ac5f7ef51ca889a4317322d098a408a741827fb3419eb12a51c07c788c2798cb37635e224e99bbc894c000000000000000000000000000000001312ec00f4b3a4305700b44b3f215779a9a8bfcf5b5d3a7f237a33c5484099ec9bc5c8537fae768e2c0ec62168f383d6000000000000000000000000000000000cf1d5d05d11e1d07074dd34211d0f00eae1df4dc550c55bd2fdafaffa1ad36abd5da30c5d3a5aa2845b1d95a5cb571e0000000000000000000000000000000015223baa9f2ea4b04fdb05b05bf3a94dcabc5e64189aeee39c380de9a34fe6b4253f5795f70bbe51b80e1aec1eab7196d5b468797b4af1978983faebe59a28f34956dacf5b7f65d25548bcedb518f45a0000000000000000000000000000000011a960cf1978aa2ce1731b857fd91d2f59d4b8d7c6871ef6f4f85aeff549a2f397949d11a4793926fe7be37f3a83d11c0000000000000000000000000000000001954f056834d6e3b16043ef1acd0a47a353300257446e9a1db7e58bd0d7c4bc9ceb3db51ae01cfed9de99621e96934c0000000000000000000000000000000002e2fe460e71b65595ed93a0010e5ccd1a2c16fc4e0d345e7226c947f29720d2f3f54282f79cec086d3fb1999b9629b300000000000000000000000000000000060dd8a7ccb613f1521168a8a322aef9f84d9708a893f704f4fc9a19e2493f25620a47e0fff1bc1e212e65e92873b4f2dbc6afcdd409e5d50d7b655580f1144de77f3efe5d6268032eccab7deaaad997000000000000000000000000000000001472caba61c2f1fe4b1d0912b114c25de103ef4351668f22f3a158d7a347539a7b6656044bd490f036ca3e29dbdded370000000000000000000000000000000015f8cdf7786410b409f218164063c99e77d8f72f03882a6c9430ec725ae574547d3ea3cf30c3ad2c9c3febe6c30b1272000000000000000000000000000000000ccbbed85c2809433fbcf22d6490457dab800b21cb4de414c7dd1804a0bdeb7142f8ffbb2de921c2c9eabee6a6351026000000000000000000000000000000000a404f42c48e3ca408d3f92079b99805004da928f128206d8904ecd7fcb14121c7d9a9e7fb69accaff921315ef3d5372807347519f114e78f99617f6b147ca833bff7be962c9b1e1f32b5babe6067d7a", "Expected": "0000000000000000000000000000000000fada9f43b29abe15693d047adc277814cb94694cab3be56b92312ab7666649b8e9d92aad81f8e487be0f74b9ce8c250000000000000000000000000000000007f6891775811a325cd7f548011ad4c705ca0327ea0484d938ce061c913a7ee6978293c3258c4b865d5c2325816c39990000000000000000000000000000000016761f859beb90ea03aa35e954d112da02daa8e76de80297afde9c29cbfe8ef4d42dad535917685a99b2a91b1f952ae50000000000000000000000000000000012a4f24ab88341dfb8a60c19993b8abea96dbd7033d3686c40903728b4fd4da7d07961f2584b51e9e6c05976d555757e", "Name": "matter_g2_multiexp_3", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b52f05365c4df20a7290aee71a7e030615d1a2a971167884d835c24e756a0faf6ed0552341c561446c7fd3d5e887d830000000000000000000000000000000018718ef172c045cbf0bb132059754b62414097eef640a781db6ad521af5a24d78c622d9402033fa939f70aad0510a1ac0000000000000000000000000000000017e969e44b4910304b350b5d442bb6a0b71e1f226cb4603cc8b4dd48614622f3f4e1ddecb1894046649d40f261d94e030000000000000000000000000000000004dacaeb9e05b9d60ce56c17312a092cb988bff426b8a718cdff860186935507a06eddbc4a1a29e4ef88db83fc4b6e77830630695c8dabe9aded1b5365bf93770aab7e9ef4140a2bbde2f0a7b109724d0000000000000000000000000000000019829d5799eed5a081042e4646d46fb6bead6d3b9893a4240867b25ed6af6a3e154514f244466d80e3b9311e060bbd7100000000000000000000000000000000156157a654db2813cb9c1b4da0a3ee192fad076bb2767020fc5fc00e967c1a35a367ffa375703e1181b3705ace9dd28000000000000000000000000000000000093385a6a9dd0ab996df54b23f47f4a49b3f379e11bc8331016ecee6161fcddd22f6d49fbb21f098873f1e17424dedca000000000000000000000000000000000d5b5b0f2ce81e755b4030b33fe3a8bdee38c2c60ed3b4a88bffb9207cb762c0a5c699ff424c000ab080d763abc5438d184ef5eceadfd77b3a4092696ec34d0551c88e434567638623740b7d5f9e36160000000000000000000000000000000003af8c25bdbd0dc1cc344d55366f15555709a74e1f0d8d7050cb6b487759db6200401b7868fca3c2ad26e6362a30e6250000000000000000000000000000000013f8b6ffe30f9a133fafe64461d305cc6b2cf5aededf68ba396d4e00df651531c750a3d94dd77bc5c6713b939b18fa19000000000000000000000000000000000dde97855d7728f409d873b83b6879b45ace5b73f317687fbf478e594a959ce21d4d751db646ceb20432e8311e67404f000000000000000000000000000000000fea997323cf29710cf0e3d44ce682e039d6cbda155e43c94dc8cefc5e94000de4b9525123b9615b5f1019a46ef37ad3a80d9efab033e920061cee8f8d7ea6023cc05f08340642613628b39e7b7fd0af000000000000000000000000000000000cdf60e3bb018407eab162822468255bcffd54cad9127054bd1c30705a4ebf1afc7f539cca6ba4cd070b44410ec751150000000000000000000000000000000009a2e3e5993b6a7007dedbbd21737a8c0aef3ecd4607953c4a24bb3fed97ccae01ae1cec024443f300b570a66e9ac3bf0000000000000000000000000000000008a21fed19e9ec2a741ade7767b0c9f39b79c3fbe34aadc9eb3043583768d893bf927d26231759290c7dd9c4f158d5a10000000000000000000000000000000018eef4ff88d63149d2632c9db586a4af0606644b16c82fbb0a3b869f1ff924c59acc8efbfde7bc604497ff68939cdd0845111c860f6f5725f99b225c53b9fe1a70150e7ce922bfe214900aaa2790d145000000000000000000000000000000000f5d47911596c46c0c08cac5f5e7f6d0609874da4ac1bd4e0e59c393273a5fe31a756c7cfff2a01d19e79d209d7c6d3e000000000000000000000000000000001010f864eb6624132d4436d18db7f5b34727060dc426c109886be88031e3c155490cb3fb09e1fbccb7912875477c6d840000000000000000000000000000000005cfbf1c2ae1b80a8c7cfb2cefedd907b0552794f4fda101ca1a723b18de8cbce30eb54287e1847cee3f416cd8b45f2c00000000000000000000000000000000084fa63781f7eba9c7e911ae5866d485bc7e90603541c55d1ffad8b3cf7547fd57fb24b14002560e58410b828513e109c07041840216d60ff445cf53b273a46016c8ecefefb53550f8bafc79966f863a00000000000000000000000000000000124870cfa469136c638e0cbf15802f2699aacb66d7e4c2965c6759dbca4b7e47941ad9ec37a84db1afeeeaa65a7418e4000000000000000000000000000000000d4503049a6a53536bdf41dd832a6ecf3f10554887da7e389cf940394e1d88db94369b7947436546eb6c6e82c48dfb9900000000000000000000000000000000053f9a6e1f05b67cf553073358009a172e2ab8b43572a974da1f3de85a29103b13d7e67b2a359297172d27dba5c61439000000000000000000000000000000000abc29f50ddc1c113c73700b9b9796890cbf48818ba981fdab2db27ef1c58f4c2e4595b99eae397d40990ce2f6c9317c29b031b82dc8c9f4ea9524793b54207d4e13a548d73297f2aa6241aff57abfd00000000000000000000000000000000007d2aae9794b7a7de97f7146c0ee8415e09e56fd42535bce6773cadd6f7ac09c4eafe2e926cb7014377e54c703eaa9dd00000000000000000000000000000000172a4a33ccf99eb0473b2c44d30bd53159afae0c7706ad128bccf6258974d5e5761f9be43e618cdbd96027aede7fd5860000000000000000000000000000000012601bce2171c6e4c2968a3efdf1491285f9e4ab37cf973ab5c8e224ad5b40e1b6459ac89090c73deb8fc79fec7fb8e200000000000000000000000000000000112a6443116e6f98ab348e57daa3971b5fa506e40515e1611fbed3e7dd64c5c1e991e0d2539a70eb93e3da0f573d6b2263d26ae92119c7b06d83d7e2922e06559b1740eae315c6623d3e543c9bf54258000000000000000000000000000000000030372914b83644fa4db1958831e9335c72ab7a811fb337696221a3290e4c54bc10c2225f8fdc3a9f62632ba2f1594500000000000000000000000000000000114205926609470b6022d24046a1997c048e6d2cf6043397892c967692161c0ceedf409bf5e1199a64eabb1ff8de23640000000000000000000000000000000017cdecbe73779855b7b94920d4bc8ad057ce51c5481a5579650df8a5bbc421030d2ac44568217c4dbb13d7c639760236000000000000000000000000000000000f194fa814bfa7396697bd812d9449d06fc61b580d7a86429fdd1ad376e21ceca139356d7d13964c3c684563675711c67a02c61a7a75342ee7f0745886c0ea2a73c21500aef8078d21d20b7216c2990e0000000000000000000000000000000015d4ae1521acf897344c3a76261754ff99742585af4a0ee86dc473a88fd408091404df1da9d8bb291db68bc9c07d6b2b0000000000000000000000000000000008ce160213875c661163990f3f7ac219ea295db5e828354864517ea8689ec15d35c6df78ff14cb276e0c97ffd7fbc09a00000000000000000000000000000000038a3ee211e777d6d6b7ca6c7a0d2130f1a071c030eebec412c3a0f14c3584e7c5cf15de254a8f141a8210a90249ee5a0000000000000000000000000000000019f7ec6b2fcd8b3190ab37a6e843340d3f3fc092f5772a042edbd5bdc967b96e8a1dc9e435b8463496aa1301f87d0e5a81b0c87102055dc2901826875d5e85a794befd93fccca2b9c0a1f70ef5610d83000000000000000000000000000000000fa7f8fbfa1d4ef5f001a451c55ed261dee344025e599884b29d086e15665867932120d33bee579d5eb1b7e6c7299f310000000000000000000000000000000001f06356f793350b17b47a623059a068800ca1eab6089c7c146182990063e8e23bbf40d95a42bf6e976224b680b75bfd0000000000000000000000000000000008807f6606d2302450bfd8b38fd4147b851ff59762c1ff48f9442c4d7b77a32c5e023821eb47fca839a27fde60e5f61d000000000000000000000000000000000c5b92f1ca9c20d4b6b11d794a5853824cff20d9267a20a7aaa4bed8bfdc728c4d4d50feb8f0b569757b97f473138db1ebf66fce49c6beb12737fe05e3adc0a51ecfa9144ccf6253088dd1a7a483de070000000000000000000000000000000001191410ec6c5ff628bd25d35965f5e9fa7f3c3d8c0a9a1ee7ae37437a97c25e221110d892e2c7a0e9c8e386774eadb80000000000000000000000000000000003be30c25a18cdab139277232d8888f6d13112c9556895af8030f1893114d5845d895df9afe3c6f9ff7ffb1919adea9200000000000000000000000000000000197f6b4e38be0358a3f1722664c61e62587ecf5467f8aadc3a236b47682a75cb76bafb18a5c556b321d5da49cd4bfd4e0000000000000000000000000000000002e4ebf7f22d929b7421a600e67fa2e64a59edd87a2e2eb9dce1f06d3c793f1a812bcdd510e654d44fb4c1de8c64ba9f0305523dc79dc4b905e65587fbd095ed57aa42403d2df5dd489db8f50c99e9b60000000000000000000000000000000011c6f1dbccde640f63ad7d40089779d01075e26269421b4ce12fa5341f58ee9110f17d08dc1052426f2d00da2dd70b4f000000000000000000000000000000000740b147bcdf06705971c113a5cc12fb37345dd59f2cbb5ff500ce2b347fc5a8199cb3007a871670d5093f28979cfade00000000000000000000000000000000046563ea98b5e85b3c42222d5e0d8481e6aefaf077a1b99f2b4eefb397ec846aa3659aacda569054c9c8b9b69750272b000000000000000000000000000000000812d887943506d68e3525ced9b979354539b7b14003a3169e0084c26326b92be67346920c9a99ef0f9638e8991296feac23d04ee3acc757aae6795532ce4c9f34534e506a4d843a26b052a040c796590000000000000000000000000000000004c8078fe8567013e8d05a546934026cdeee7d485e30d739407db16fefaef53ed7bff0f9adaaf064aff014ac919d91c600000000000000000000000000000000107cc17f485af7f22e07cf14c5cad6368323f720511fc9dda677b360567f769e47a77f61274927ef9b7be48a77357ec40000000000000000000000000000000001487f0880a6cbdac33ca35b9b65e4ead9d8c2e9180c993bdb2052060325aff8c62668c643f0cd9b4bb1f06a3dc74285000000000000000000000000000000000d4b2d062e31fabe8d2a329dbd6417673a519f455739d140246f2b3e43e20f390088c08e545bf0419d796ac71aebb5198586d7ad8fc3e4fb42981a4415224c0d976ebe1c342e9bc1cd66d35168bae33d000000000000000000000000000000000811e9b0acfc10830c074c5a4d9f4d9382461eb523a61dda0b77f1c43b285fc5c1ef3a1fafd923addc9a6e904505a255000000000000000000000000000000001113102d015dbb509f0b8d0d0ebb4d3711c4f0e1e3d55fb0af247dd24be4fec9d6fe3ad73fbdcfe206891bcebefee4dd000000000000000000000000000000000085aae9e58fb97b96ca3c089acab7bdbd0c3adae141bf61075f5c13145b0d07113f1075dfb959bc7c2d3d3b3a06ab2a000000000000000000000000000000000bb5eac8125807c10270d94e5bcf278241d6fa82f68e41b5529b28aebc88870af55881db526f7bd221a8c4c0b29a1b7d6e7db0fbd2a7327c85054b4c0de9727dc0b051058f8bb4ecb1dcc7f825781712000000000000000000000000000000001335276775545fbb4c701beb57cb34312108c9f1d46b4aa4b09a16faf0e648b4e80848bf5e75ed8730715f0107afc9820000000000000000000000000000000006ffff8736bab41b4ee5681b741a81fc870e648001027161144254d04c678e4f954e9f191bd8b26201aec681cbf0654b00000000000000000000000000000000026ede90d14fa0885baad21f9631bae058573251cbef5757bb8cfad061f3bdc78834fa5862dea19a2236c014b0f1652e0000000000000000000000000000000009844d0cf7f6f3401145d8d720defa577ca46b49e04e39c4c139ec6811a574e7dd5ce3acd00d1ce9496f10dd15c6d94685cc8d88273d4aa822f44a447cc22f5a58c420bcfe757a459772825619669a720000000000000000000000000000000010192b925fca096682acf138833b12d96bf97c9a2e69e4266eaaae1785b9008f36082e23e2d42341427edce24449935f000000000000000000000000000000000d5b24a94adadbf542aa663114096bc670e1b6c99f3b661f55de121922452534faed7f68d6b431fcf6f3e379d7acf6b6000000000000000000000000000000000acdbcae49206b749d8c0d21017a33e689ebe26804d1fe7c863a2ea4210c3559805dcf73685702bc56e644b4e02614a9000000000000000000000000000000000092309d684fcdf44bfa321d473060dc2d8a8c66c51419894a3fbadbf1b56179c31dff25403b970d543f1dd0e19e56cf5b6e462d809f8bf1a62f276dcb27e42d9aa0ce33fc4e149e87181aca70a4ccc6", "Expected": "000000000000000000000000000000000b219032a2461a5fd1e43361c46beeae92e30247acadcdd241692abe81691c295ba38a1f0a2a45ae76b1b95d7d0fdc460000000000000000000000000000000016905f64e581aafe928520adc27c24703e7adeb36dfbb416a159cdb9b9a26c9cef0821ccf52f5ea5253b7c9d78769e9d0000000000000000000000000000000015cfff195b2123aa140f963628c41deaf19dfff44d26a38de4547c3d15edef10fe9f65b1802dc374d7ba8fb62117c8880000000000000000000000000000000018dc725cc8d8919a7414b7866fdc54c4467b0f87cf99fc9b36cd65c0ec526e32649f9c57495657a93487f1f2f5769168", "Name": "matter_g2_multiexp_4", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014441b14765eee30e8131a7ef62c3b59370f2f6f0dda20fb2a3654fa09492bf695de1d1a8f250bfde3c7d2ed805ffaeb0000000000000000000000000000000019d813f8be2519e89d42a9fd3fef09d44a996d6a4713a9c224bee10f0ebb196370d6231fad810edf9cb4c875f08357890000000000000000000000000000000001a5abea13e909bbefdb51ddc699614366f271b2f6490ac8efcca7759833f3feae11057ab1b9ea32311e7b6ea6de110c0000000000000000000000000000000003ac2bf3c5486ca176e34ec5212165cbe04fc9e8c375e3e999a31fe014eb824ea3f2d06b9cf8b86ce3a76960cf2eb4d7535b53ab5f1c596eb966f57867e021d0f3b099e17bf384479c959794b17d6a4b000000000000000000000000000000000598e111dcfeaaae66d1522be2a21131350577253a3f33bdd74a04b0bfba2940e73b62fefa8f0c34c4aa91b633f6bdfd0000000000000000000000000000000017fefff7d94afbeceb33714e9b5480c3a2f3eabf9d7f6e8507ae54cb65f69b21cd7d04d23f24e3a272c589f572b91864000000000000000000000000000000001652e3f5a99ba8dfbcd1f90de955ef527947642054be603c1b84b24bebb579b78e2a0be426ec21d32783a0e55f0178dc000000000000000000000000000000000a6c9ec91e8bc86ab198416cbc76239f0ac0b903f40310ee1f2066b01b08191538ca913c2736f53f23ef37fea13d52756e0512ecbc5a1b02ab19bc9bee4d3d9c721278e07b7a6e389c4d6443232a403500000000000000000000000000000000072e022c168461905f798e87425f2eebb517e473cef98c255d0fe434863ef5811920af65bc946b29d489b5dee1066c56000000000000000000000000000000000e7a9872caa82d191f6014c845e1b3ee4ea1ee89852b546a2c85ddbfa3c1d4ce99002e3d7732ccb8cfbd57d550285ab400000000000000000000000000000000144be65db373f6401d76e0ee64e51076b861e8fca596dd6a7f3b5735c23b0cd13248404fa0969ecaa701663a1032f48a0000000000000000000000000000000014c9e9c5cffc4518889f7742440053678ff1d9fb1a1a103d0c1f762b10655bd5849ce98f4bc5eae80bdd9e767aae4523a79fd15e80b694122dddb01f836460b3eff99e61ea6309d6b395c94fb5a43dff000000000000000000000000000000000948d0f0c20715f8658e1f2b4f9d32d851e584287225a2f47735a1f4c241b07f8d7c5dd8c13bcdf84e97d49817d4d88a0000000000000000000000000000000013c064548cb756b48600dd535af8eb5b9138f984bac0391df2e90a204fcb6c36017df910031864d802a2ff719856b336000000000000000000000000000000000000b7eeb7c9a01be88e573f196c2a531635baecbc8cff9af385455af3757301436686596ec7fe3618af26953c49f7450000000000000000000000000000000001332f4dbd5461ab9e2c8b3c19c6ff407a071018c92d2c17c1d1d481c24565276c0f55eee8692016c1fd76d70f44627cbd012914a96253926fdaabec06944ffcdb4637a05e3e78a9bcf1b21b68b9dd9b000000000000000000000000000000000d3ee70610b5029a28e586f0f3e65bb19a263db3438710fcb8073e1b25f83db50eb5bbb9d75cb20952a225023f747baa000000000000000000000000000000000682f7d5cf9d182b20ee88683f3915e8c9b03074a373e573aa57232de4e997bf155acf680e365aa0988989dfad102b2e00000000000000000000000000000000143962963e230a9154dc328f9583f5be6923a3b10ee7b1d0cd5f5cbff13913d8ff78ca315be7387900a50b94449884c0000000000000000000000000000000000f4f934b42452d41cc20d7b1ec547bcbcbcc10f215364ccf2b864db23a09d06e94c7a87165dcb691f4975323486757ada300c7e1041d94df0e0201e1135fa6eafc98bd33b2dfbe4c59b546a52538c07d0000000000000000000000000000000005f0fd4080e26971ab16d33aeae04220ae23781da3179e38190082f1d167514bd73bc8ef976a2f333570e9f56a6c05e6000000000000000000000000000000000e159905d29b52ba61575c3a263093017783e1028b3701ccf060c165ba33a765b5265a9b1681c1759bfe2c9c401275e9000000000000000000000000000000000c5ac0bc29a49a7c37d772954da850e6b5e301e230552be9a94017d770ebe2cf4dcfaf104633623e024aef6db57892900000000000000000000000000000000002228e7f42a9409acab49cca82cacf306f6c6c29fd9f7e2ed12fef2d16383cdb7bb2b39ad598b301072c615232db1fa833e9cdb10fc117afb17803b61a2bca7de1d190a325639eb23743f51f28294b3300000000000000000000000000000000180569ce03e4a0155285e733adb18fbca71225507a7adf01cb8e8648891525305e92087f58378f4fd8455d5632ad660e0000000000000000000000000000000011ab84e42f10154e306a568d7cf7bc381000f0add0500cb508f695a3b283ea69d140aa0ad48fce2d2d6fcafe60761078000000000000000000000000000000001136c3016474d6f475609606e8d0269fcdab9fd3188a512681cbc41eedeadfa3b3d9355e5b4503e8b5c3665e49fdf3ab0000000000000000000000000000000003f56cba1b9cb4302099b16b09c2602dfab80d1151685ef78e5054cd454b319adf8b5998053a5b9fddcffa020595e3bfc48b98edd9c229037751d02e58f3d4234d9a3b0ad9ae4947ae14beebb274746f0000000000000000000000000000000004d79dab9eef873f3415d66172bab7166ce0c71f322529bdeffa915c1b0d3fcd645c91dd3450ba61593ffecb95edb91e000000000000000000000000000000000d611a207d3222bba199fa083d0459675cb5fa00839fb4c9034ad868fc1e79d653c18651771431d6fb6b6b5ce8cf6f7a000000000000000000000000000000000ce802ecb106a4f0ca4efdcc058dd0e29deb6a5d30a2c15c8eda896bcdd3ac19053c10105328d239b26c5ddbdb3a95fc0000000000000000000000000000000001073e142621ecbeff6f81453660362545751f992ffeec3a83477fed3e6215a709ffe0d17b65d3369f8f3913bf000e844228758d2cf8105f2ef11d83018157a3119a44874dc34d5f0bddb533f50df52c000000000000000000000000000000000bd84f04b3858b1138b1b429c7216d5d1b1e99c1e0fec26440d59b1ad79788c2d5583122c2ad769fcaa6d10d816a1f1e000000000000000000000000000000000387977ed1ce5da51dca230531bba53d17d3de5d593ec576cabfe6463d5164d7153025dbd4cb3525c4145c4f6b85fc76000000000000000000000000000000000a19c943a90fec6921367a2edc5bc38a5c59839cdb650766a2d2d068242463dd4460bd1d0e7a7fb0e3d2104704b8b3730000000000000000000000000000000011d99d44b200feebe00bd42809e3f67a23cce88a07165416cbfaf4db14420f99e54d62db4280d2c99ca0bc3dc41eddbea417c96f0cf4355a78513c77cdc676a7b09125802c8045756da867e0025a36f10000000000000000000000000000000006a186aa584a466a860849c78e4922889c95a4ac6f39c99029fbb422c43d699a8baa51aa4ef51ff99557babeb3e9506800000000000000000000000000000000065fb15b5a0923bdb52dbefc7e9f1a898e32f17d610bac829235446fc5e1913fffc8176e0fbd33091505761f1d06d8920000000000000000000000000000000008bd358698fd073f660ed608462cfcef1da9a59b10905f1d98c4fe66958e56802814906430c10fc25a4d351d91f91cb0000000000000000000000000000000000a53638b1b6c6eeff468e099446300ca7c7bd899c6494682d14fdabfa9cead0bb37a0325d99e7d0ba6341cfa1d257ba846561328b7689b0a89014823537cf9eeaca6ea5c56a3e58d2abfc2ee455dfccb000000000000000000000000000000001070b98c6348a67e996626ec2752f45e4c007e9c9668459a777c03fab633c10236a1c5be99f3fd950542d5648ef9e88400000000000000000000000000000000073a564401cb1a3a53334c0a55da261814d27b86ebf40b02a76b20973ba2db92e42c138ca7790261c2d70401c984bf470000000000000000000000000000000004212d8a9e4b01f5c6814a88561c2c6143eea61327b031a2e0e4bd056c12dd7098fdfe4d1511bb441ad42b55b584a7bc0000000000000000000000000000000005c5d23824b0fe05eb962194550681c57c1566b315efa8ebc90b3593d7d86ad18328baab8118c9f47eccc0757588591ccf6c3fcd4b9e6b72853934b306a078b1f2fb17879db4a0a93d484abbc2b746cf000000000000000000000000000000000b1b3053774ad5515a20bd4c556d2b3ba95fe74fd0c955069c7f933dfd718ede90ac295f5a675f1c29dcd9701978353700000000000000000000000000000000145746ce88686021a0635bf6f0aa2f77c48bdb364cf4ffa804a57f95bd69d24eead05fbee24021c1ef57e1c7c7b894b00000000000000000000000000000000010ec4795a0762b86f3b83de1198698af67fd1b1be3ddef48f35cf82bc96d886fbb4c75064f51a9cfc5f61630c95d0ad1000000000000000000000000000000001465e31f58892466b8ae4b76a239d9f8d1ecb1834886344013cd1df0be13591798868d224d38213a6d75b02a1fde0ff2f6787b565e8d71be6fdb0c97c4659389c800a2047f668b366214adc716f402d5000000000000000000000000000000000f39e731e6ddb7496448c912ae314e833d28208252c7f8e27bcf7eeaf1da6e2310538b4ef0d55401c6552e91fd70691600000000000000000000000000000000069d3612f924961f827497028737000513548ad8e104acee28f014e730d4752a583cb9a893e6169b71966a1c4a4ad2dc00000000000000000000000000000000090899907edcbd336bd4fdad0dd67c578ced4481a25b864b32aef920842689a2c23265277a6e1d4a1dc1b5047a9f79a000000000000000000000000000000000055ba64e2502baf68e46c759fca30247a080464eda2b32e7cfe539e545d6aac6dafb731c2c45749e50513979cecbeb5440ed91f6ceb2ccf87e4106a16227a3cd7b2821b4f3a6e629001f78ba1aa7346e00000000000000000000000000000000042f1c8b9fe81cdcabea047d0998a1354ce09d62a14f1d0e9d188e2f35f2e1845c2b090c5e157595b33108c67e6c184c0000000000000000000000000000000018e69d3564d4ccc0306e1e6b227b0f961aa9afcad59d4ee1737f980dc876609c59a4c6a3506f987467beba0764b857000000000000000000000000000000000012ce5883156588cfe0f4838f819f985b09f1eab40a5ea8e30fc5d70d029a01a4537641248f4c21dd203909e0170737c80000000000000000000000000000000002888eb9778a4045feb5899dda258657b9f41345731ba630fbbf186b3be4b58ffc7f48abb65b693b573a73f85440a7a7ae8ddfcdb4748981acb9b2037c017174a140f2457fb0148fe807fd194a9f7be500000000000000000000000000000000051982b46a819c74105cb36da871fb2415328a1531d155856f6551bd043eca62ddb61f24af429edda830fda31e22cd340000000000000000000000000000000006449e5bcdb5619aac542f6633ee3e06a4fd56a3e1ce4034efc608131ff6ead70ca63e70f494f519d5c577ae7119c8c200000000000000000000000000000000153f4f5dddd5801fbf7f88a735b9170d24d5b63861d50cde9644579dcff277cdb0d5fbfc3b3b819a1172de05afb9135b0000000000000000000000000000000010fdea84983fe6c08cdc4b4ccd462bae2ba791ab5209363b10b3ef342c9a5e92184e9d8be1419e3d88402bc05bad5fa21268803aeb58a2d57fc797358fb456d5cf96afecb1ee0d2b90782aa0d652b8c00000000000000000000000000000000009b011f793d9a939d916d058ffe91b58138820a646cc450389b3074ae3715d06ddec1075afecda71c65c7ca085210c740000000000000000000000000000000003d4d20f4b93c1e90a0a06bd534d8b4fd64e4c4aba77ae42cf4c5b2bd95f8b02ec4069ea246ff46404e6c9eac632fbac00000000000000000000000000000000051e88c3adfd4d6a02d3f03812362a6cfba3a6c69b9aeef75b51106cc7f1750293d61e31f0ea29b5d7aa56debb6d2aff00000000000000000000000000000000086d9c4ea6769cdf49ffbbf7351023b4aea640e8c90f9291222fd0b5984bca4d481bf7e10df921406a34804e6a09f99df9a8a4e5c65973b785c1e2637937de239bb0fde34b786dceea66f6bb12eb4169", "Expected": "0000000000000000000000000000000007638fa4e8823dacb40ece440f8f1e57cc5c3851f94357a5325207db92380dd57a7c8709e4d00b670e8af1b77368285a0000000000000000000000000000000005b66a6e6b13ea0eb367a61ffe7c620d9edf5563cb4cc0cdfa68b99d9691cf9a40efd967c1e880238eec313eaf4c92ad0000000000000000000000000000000004f7156c69ea88a71a0af2922d1caca24055d40df058eef02bbf95d864156f62fb0e17d9fccd193840c36ad8449bb4f7000000000000000000000000000000000b8f46fd695c5d96d939d42c65c3b709d32f134710a67909dc4bb43d752521a8d4f0465d0590f30f06ce42bf5f8cac28", "Name": "matter_g2_multiexp_5", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010d48bf523f3909cf90aa58a9517ef5421f1212accd5e8a0f830aeb15a587e215ca9c340bb846b1d0474e43840b2af79000000000000000000000000000000000cc1a3976caf97b9d59f448f6d9f413eef8904f360c0cf912fe942b38d7fcc637a17038973a133608ae769d3e389b18a00000000000000000000000000000000069a6122c6f0ec68834b7617c755a7eb33a80a25acf95859da5ff03316447182f122d20d993b04e79b6fe859b7adf5a8000000000000000000000000000000000058c6f8c297524319bae6722e0a957d1ba0f75ee3a8aaf06148641c67925d15780e419a38ed7e07410e82769da74f2d070e7e2ae2751a1f71962726a31f77553c2da38f4fecda435b6e5459d5e833b400000000000000000000000000000000156ca5e80be8c8c03a5506ce9abd22a9d4958c372678c0caf6f1329898507dfcb1f06a9464cf080bc6881fa5b7df1ebe00000000000000000000000000000000088174d486b4086b931010da298a399e15b60a113e08f571e096d3a4e94b57b3a684711318796eeca9319119b201abb30000000000000000000000000000000000b96ff68505c088cc03a1c2dc363b05bc8544728a12b29569bed137780523123eb17e68f4632383c252d81bca0c5ca9000000000000000000000000000000000486fc6e5224c5fad56234c41856e60bee4a6c1046f673bf7d5c1bbb603b141fc91074da5f9d3d41b796a2ebcebd9e74d16aa883a20307f5436354bab32b4633e83178f33626af3edb14f82724b8e12500000000000000000000000000000000121fe97c62e068988ebff21d8129d52aa903afdbb62862c7fd99564d9ad72182ab1f3a1100223ae486cd76f6938e123f000000000000000000000000000000000968ddedb04f52140160061828b5f88dfd09aaf37df625ee6f66b9500d6608df31c7edf86296eccf8f9918b051a5e4df000000000000000000000000000000000b7491cb8f6252e3861d7160feb0afdd736d27886863ec0909a7cc711a9b71aace18b17a00a2999dd57ca1a74f148516000000000000000000000000000000000fdb280093ef45b12b694ca3390a865ee18e4c04b231e2c98cc28706d4cefaf4e654582ee03f34ecf1dfa9674489d553041390a2209b80f7c64d14965cc2f515d5fbdf37953f75c4a0203bf0d9fb674b0000000000000000000000000000000010d001a09cf5dc3276482185f26ef3f75d28cd6d2667eb08a7fe06c03b99f3b6c4d82390739b6867a314291cc642a8b2000000000000000000000000000000000587846a460b1f37c2e7f491f9a097b4e86e1943d9cd0999313f65627b3907f09b5d5ac1be376a313a959dd136f7e9b3000000000000000000000000000000000af439695556e86b102926d3b40e3e54cc84464e120de3b4e3c5541a6a5bca44151fb0594009663764c1824518b13f020000000000000000000000000000000003bfd9418c1e57269e222152d321b83ae090f216cb422956dd1fcc464f68526cb4a05cdaefc7bbe6e81d4ffe27d64db47cf23dee8d95d94046678f3bdb4b0ea3d4e3a1a2f07f582e2a98ad6eb7562cbf00000000000000000000000000000000196f78b64fcc342ba4f4edf34a3080ec950532a5de21a875dd061f09351def5ba3b85745a561e38117a14c20d33a14610000000000000000000000000000000003929c2bc55f323d57dc3529bcf6644e61c941b72b424d69969c1cde7a804d157045bbf6d5b79a3e6686509e11ecdac0000000000000000000000000000000000f6b659818510cde463c52cf00bd99da045c80af4d5cd0e55f9bdd81f34169fe869c519f37a98ff20c56db554469087600000000000000000000000000000000129709e97757724e765f6600c2b1928286efab55ec8d16876a2a3210bf9d31cc5425265d0576a2d5469cbd9a6c8c27c012adc8edb64db5bf0ed6724f3b54140ed6c81ca65ef9d1b38c8bca6a62bfd3c60000000000000000000000000000000009f5f167c9b61a0ef76415fcceff04f3fa57071c2d79f443ef8a7e6049cb1352f650ebd8f358904bb432d42772c29afd000000000000000000000000000000001524a875d73e03c53b92465bafca582479110611bac6a98fc7d76966e9781308a10cb202289c0776cf5c36515733ccf900000000000000000000000000000000002b1acace94a6fe196b217a9aff413fe0bcb55122ce9e344942843e5afba0d5f2cd0bba14c9c8cb9dd1c3e9024918fc0000000000000000000000000000000018e4f85c7663e596182603862adb559635fdf16ba35fbce7278680ea289f871bcf6755d85654b2a37ae77a37e77ba06ed1535bfcd68e8136808edf89967fbbf76b7f58d1a8ac95ebd4944b9e440f20b20000000000000000000000000000000018ee4b4855f866781f38a618c2fe4214c63034620ea5b72361079b0a5c2b2d6fb9ea73fa202db3a2678cf07219cde81100000000000000000000000000000000180870513afef93870ca64e2363fa1aa43a599db97f3b807ada1c25ae331c80b8ead5cd69b6f5a65a083606591de90ff0000000000000000000000000000000010afd546703baa35a9eabaeb45d301bd5be115557bbb4ff2a0e493668ee790e947eeafcaa923f62ca00b8e635994e39b000000000000000000000000000000001089996b218aacde4ccfca4d2f66d79fe161d962baaf2d6696e1a76ea40af4ae7195e8cf9f6417ffd054f20b65ddfb104c576996d90abde581afb58903cde4b9443eeb65e21b0d68c578e04c8f28f3d30000000000000000000000000000000011757ad74a3fb341c8eb6862978ab3fb5e8cfc8fdbda7d82756532a890d61919cce931872ff339843805e00d8c62ec4200000000000000000000000000000000060783a06e93e82cb08e5dc1aa31202ba11676511300e186ae8e45248b7fdec3b7d5b6849f8b79b8f78ad84f36218544000000000000000000000000000000000ecfd8ab18066fe3408fd20f2a4478156e9a19a09b58da76486c9f6a013d861960b6b99bf49cbecfa8c9d01d5615c1bc000000000000000000000000000000000b45709845d35d7b560745375df79fb95df15e85b96cc1b98cc832c74621339c609018d153bff93f2f5493a52b7326073c558cc615b1c61c9a42b8b0ab4668ffcfc9e95bbe958e72e7a5500058e6b0bd0000000000000000000000000000000003f9de90222619216852356052e9819d7c6e8ff91e0c6f1d8cec832770ed9001db4569fbf579ab16964d76ae7d1b89e900000000000000000000000000000000010b7cf8f0d283cc22942ed73c599115763dcfc1ddc98d87979fc3dce2f33ca3531cc2909d94f86736dda2a4e94a4f0c000000000000000000000000000000000b0aa4d947644cbc7df8d1927cdec66a68862e5a806e25554f27cc1a3701f429fc7097497ad0419e21cc403b472c8ea900000000000000000000000000000000146270ecb66e1763437b824f2ae122f72f20eb93fb30474691a0a192ceb932b1dee111fa44954075335ab360d31ee68d61301b4957a468e2817db5914ff102bc96460a2c5c15e78bd42884b1223fa71a000000000000000000000000000000000c977cb8de4b6e2e33d916f74eb4e42f089d22b54b59fac9aab0e4cafc8aa2b0f8c55d7251662b3499ea140e322dbbff00000000000000000000000000000000106944a9c2d2ecd08e109de29095f3460128bb751051a1f079acb58b6a60b0bb5f52e63d47b688f4a382a77c3b039eb5000000000000000000000000000000000d2f8be1c78995d54fbccab61f816b6ec52dd19aee6aeedc0e4bde2898b2d07c2925da0440a38c4c965a823fff10389f00000000000000000000000000000000183b5d15b243cc5d9584842ab1a0a1e01ad87268728d72aa8c0d7ec6e7069063a11fdd1525d2b30b35e4568da7c44c5495cd2686d24a5bdda0bcb118a2c0eb5ccfe411ec452e1beb3adbda7e93ea367c000000000000000000000000000000000f65ad4c21fddadcc49a8f7bc281d2b7901707f51a67122179fe97da46ea5e1bc6e70d68eb4eb6776307510a67e972620000000000000000000000000000000009003dc68cb0cdec4a502436718f066348f1957ae65ecca8d32c5fd776215cb9a098c0ffe56c92d79dd68d251f49f13e00000000000000000000000000000000038ecf0bb98ff2e84b388c58059ba0de0cff3d5881ecf01d668495ce81b76b00323c665ba88309af5552b7950cc8c08f000000000000000000000000000000001924aa0f460659f552458fb469467a2925fcb2420d4fa6249310456853be3d08bd5c37a3f0a9d6e94e434391d20cccedfb81d555d1e2df92cdb487a888fbedad976dce54b5c46a39893edeac21a12d6e00000000000000000000000000000000189c3ee691387fbbcffdb147c880218c3e5c0bf78c44461ac1bd3ecd5d4b85225e46cdb068049607fedfcca14882e289000000000000000000000000000000000260efc08531083db2839d1413c90968e87d79bc1a2c730f0020e40beb92e84b73ef43e80f7c61e1a30c0cee11b3cb370000000000000000000000000000000005c852ca0aae2c575c65ef18b624f50a32c007d299f24a3ec6cacbcef1d6e3bdba9650fd7d639bdc60a3e107ee9c013c000000000000000000000000000000000321c01a9de69d6b89db4ed88dd48261ee28facc5e26511fb2833fa45edfb58051c8c3ce9501e8b4c3cab9c456705889bfeed84bd95fb955d1b1045c059ffd051324dc8966e504164e54f76f02eb1b8600000000000000000000000000000000183d50635b22e4d620130e0d4008e3bfffae5dadd7e34f4496899ca54eb4d9e3e95c54ae1d9664609c58d02ee5eff65500000000000000000000000000000000029e3b4496a379464302b1476a4549db371f5d6721704b1d6bd35e2344d7679f8a61a0c3b12f287fd86fd247f9652cea0000000000000000000000000000000012c6a3793fd23e955708f5aeb4d6efb670d25a38a67813ecc72f899cd5f926ab7ef198bf6d591328383aaf54f756c66b000000000000000000000000000000001914d3e4b6ea96bb91333468fe8f3bb74636e9a4f2ed198e9ff01b49ba02791d5bd63224f6a38538aceb777168bef688e3b308b95f6d496e6d5b910b6aabef8d9f868471653e8254ab4d49d593180d250000000000000000000000000000000007457f2601621a99050d8993244f026b9a62ff7055b325e6f1edd1cf54065785f003cf7c8a4bb1f7bdf14e220e490ada000000000000000000000000000000000928eb76b428dde37546a27f3d77605c293738f448fbdd6d618747b0de04004aa4419cc5601600419c6e1d470c15982e0000000000000000000000000000000008074e9f5473492dd2e536f7b305be4e5c564cfc9218934d03dde6dc5118064ebaa5c26fdd1123a9c31336c37c1234900000000000000000000000000000000002bba1f9b7da6abd2b322c8f11c749b2a284552eab25a77d21b38b028da477a3ffec1901a015e81fe2893576a41e4c0bd4ea92e0e776be341c8444d4040ec121a2847256c5c9bc918adb28618548b0480000000000000000000000000000000003760958eac45397eca1a1d951a80265a728dc3c584f7dae111e7ce04248885321b69b334b00cdb0334a362676c2d32f000000000000000000000000000000001031e4a63129ec40da5fe9dacfe148a67662eaa00e1fd5c30336462371c167348a10e50f4dc18469a1a6b76485f77e12000000000000000000000000000000001412dbf993c557323426b486f18a91d16b4baa2c497b30fb332a710ac901c96d46a577d04ea87afb08258aa6d204a1c9000000000000000000000000000000000da015ca09ac0c3245c090f39852218f46fea62198fba35ebc4a7f14887943c3bd1bbbfbfa300611e45f419b33988e404c07f5188e4c6270a7e9e2f551683c4f9dc943ffc7ec279d15816a7f4910b8d30000000000000000000000000000000015c9121f72e2425cc8aa4c878907628dfe75a903b7f756b9e13728372cba598859d20a92a8297d95e1fbe25fd1cd968300000000000000000000000000000000025a3faebfa53918efa733949f914be08b791794bd4963f0c3fd78df48b14ad214374b08299327575c0731b54eafed76000000000000000000000000000000000771782ecd9980da521618af2f9eb55d91d67b20ba615c7b3cb1a48d483ca405fe99a1cdd17e4dc7aeffce586987d41900000000000000000000000000000000136000da90a76d538f336608ce877be943025b4c8bf15880ea9c1c001c20c954292d362dac9783b7bf66b8d51ddaf0f2a819a0438efd7ec0c1e3eea07ba201af6a832fecec818adbb781ad0c23e81dae", "Expected": "0000000000000000000000000000000014cb24001bd933b1d5866cc3de9f4b8479fe23e4fc26dd210f9d06e7a05449b9f5ac4e2f48fb847599f625824336bf1e00000000000000000000000000000000033fdb2e899427f1cb9757022c5b614f08c64b53583486148b7431311a6f15aea3b968913fd5f3e9b624705351074be600000000000000000000000000000000035420be9c7ae3203d0dec61ecea70e22e62f50368be870e74f9a7349453647a7f61d2a42cec6522164cca0c7081d4de000000000000000000000000000000000fea43388e9f6e31d419c7f9fbb9839b4cec04163a7b401d8f7de73a4560fbfef4e272f1db9c9d5b37693378f139452a", "Name": "matter_g2_multiexp_6", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000039dc2b60389f6c893c44072f4db23e7df4c2f299d6b70b70784d9370d9ff8e5413872c227074d429db999d30dc9499a000000000000000000000000000000001702273db356abe7a3f91a9fe4bf56584f13de4069a91daa6c0b552089bef60da98d32c615aa5610842dd8a507f9477c00000000000000000000000000000000095285e8c508ff12da79e16e0391dadbe9a823c586a049e729596864c3cae117305c05f009f9e8ac032abaec8a63f8de00000000000000000000000000000000078fc70e926decf7aa4c2e4b395e88f367757dc47a4cedcd5e632c456a4c160393837196af474948ce6ad53f830ce8aeb15af019ea2de662bf187930caea19d0aa07a74b49fa7d1819a539e06e4c69ff000000000000000000000000000000000cc3cb5e7b033cff3e5cb01ba29ce8e9f4a93e836ddea7d417f7b07ba8aa71a0efae2e1d7a8ec70bdff12d84d229245200000000000000000000000000000000019ce3c830505324b9bc7cda1fbb328150d71310f06a8424dba861d67a7bc0428beaaf697646d22cae9e00477cc8066f000000000000000000000000000000000f6ff67efefa5636b104a0351c90fd3e89a32b8a9beb0d123d3d6ae42eb5e8bbc19c7a972e27762daf852259c65fce6f0000000000000000000000000000000018d98c43fe5b13b701749f4a5dc25f0e713d241d573639fcc73429226bb131d448283338a909670066045c65789bf9e7064a6af51c1d499c4c28556ad1255af7467bc750bf2db2842d626647bdb3346100000000000000000000000000000000003cf82958d68429503265dcc7d88a3763cca32baefe3c8d32564cf30e8e6b8255d4a9f6a76bce1da473b50287deda74000000000000000000000000000000000bfa9cde6c06b2a2ff8f877ca90b3827d0aa0408c4ccbed23ad461433dad71017d4dd387f49c5febdeafa17d06ba784e000000000000000000000000000000001770fe70513533d91c83449ea52964cd8b449aa81f71e71995db5b19ceddef18e2919439c80e10086e670be669696e4f00000000000000000000000000000000194c20491c9d5ed827cd9d370b9bbec55e4a7b1c34ddd1d80201e7019d9487a747b4fa57b480dbdd09af73aa4f5fa0e9a3daea5a083af43711fcb09282b66882ae5b5b8e1714e9186f33ac0dfe48b7ca000000000000000000000000000000000a79d9e0ff43249ff54526c5e1cd55a9bce93adf272508871326c933d526602dc9dae5b6f129a0f1c38139ed1c39be5c000000000000000000000000000000001458b554e0387c1ddb9dee9f4e9fba9c81c15807f496442f4b7210267912b9439a19f95dc80a1e09a0e5cfe750f43c8800000000000000000000000000000000012c06b19ed4e8d5d1b9fed56bc5bdaa3bf0112db997e33aa14899d53e1bddd6aa91dce7e9d25473b66b8578d398981f0000000000000000000000000000000015369b2228e728894f2fd7c2d8c41ac3550da4f297de445cc0f0ef7134c478f526987643cb5408a0bbb79f5f983c085ebd682acd154f6e16a583ca4968d28471653375ef79df078b17b2cd9634258dc10000000000000000000000000000000016649a8231407074af5ffa93f9db5a2ddce8785be8ee77149602d6afa24ab30b26d2f74bdb5f7464333924a817e242e50000000000000000000000000000000001b990f5ed0b23e113042ff004236646c6eacacd99d1d73fe0c3d9351ce8d622327e827b2c0556802c5657f8f06062a4000000000000000000000000000000000f002a2a5ca90285f9b2fd429721c2daffcae5fe48c571ebacaf475606f96cc8350ce88a850ed75e5aae59d445249bf00000000000000000000000000000000015157fe1a767dabc185a8dc8fea3cb208fd995ecd9acab762638faa987f8367ff7c1a60b657be6e9461acc9df16381e5562223d3fae1d303a01ee4642fb4cc70f21937ba7fe377260fe82262a8455a7700000000000000000000000000000000073884ffbe6deff99cb4b0ae1c0e91e2f4a8c2c7296339b1d7e117d5d47ab055743d643155680740befb379a1dcab666000000000000000000000000000000001995bdc23991dd4cbd973e915a16691fb860490bb54011384c553dd14afc37fe673d13950c1e7eaa29c324fd9304624c0000000000000000000000000000000012197a19a498cd94ecbb3a409337b04e76e1a52715c40203add20eb80f7eac66f3386242d51bea34ea016d778248836f00000000000000000000000000000000101069ff0af2ac4dc7a5bf7bf7b56d82a310d67cebc41a9abf1e1af489e1acef3e726fe9571b4382777573712663e26caf1d0fdab6185e1c3f9f621ddc169ba92584db0b40b6ace7ed563eee0090629f000000000000000000000000000000000849b88e7ff52d8136a120f924b20b45ea9ae654a0fa037b62f3c275f0661091038a4c1d6ce7d50512e628b6b397c9f6000000000000000000000000000000000e50e82e9b368f2e316d41febab6b0f626d6588b7217b4e28eedbdf50a4abc9039be9e66c97790d12cdedc90873993e2000000000000000000000000000000000bc5d2bdf06fda1e1d1f5c5eaa7988dfdd790bf4d952f5d3a532bb59edf619dafcbc29274fd3661a35a3f15933b1849300000000000000000000000000000000162e5ce45499e620d0977fa26a291a8e75943c4b5a2a80be395ac9b89767ea5a06606d6b75ee4c8a286d2ea5a197baa5e910487c91f3839d5961f02a67f3b357206e406ba207dde969498e40d4a26e880000000000000000000000000000000005c11afc970544b96fc1a4cbb27259e19b5fd588d1be1c8f19eb4f111882292a463c951521388cb8cb743e5a4a1b57cb00000000000000000000000000000000013dc433dadc122376b75fedc923386a7ba5a363678fcf9edf165a50e160dadcc151b6f402648193d9ef960f5e401030000000000000000000000000000000001893af155aca343bc29989ec2b5a583d020a7558c7663accf6f3e40d0a8eb98ac548e933eb8e2d5fe3550927acc2ed4900000000000000000000000000000000043a79bcbaf07bffe6c6890d95c7e74d127446bdea51a0ba3adb164ea39684bb3ac552020ca28b86e34692c9b36f4384396d32c2c9ef685120995d2244756bd45591618597306193422f3b5df4b075d2000000000000000000000000000000000e6946ddc8a9d73e5b140af80cc91b31b9a226a945a9574f0629566f7ee7650730c5ed758cc30442770ed1602b84175c000000000000000000000000000000000da0abb9f5bfcad73b3f24903e9ef887c660447332e5457e4a5764f6628c04d6fe903679b8dc8bb3aaacde410812286a000000000000000000000000000000000656016c01d3405dce9f7d40e47976bc8a84abc370e7e42849dd0bd93ef1da0bc88e428efea43dfea37dd834cf246d69000000000000000000000000000000001939b2c92c8299d7ec1dbeb9f291c5e1c9481e10df10e6ba18ae695a780aec5a185ed4c7e82dc2bb5af87a74552c2ea32087e21d775fbc2c20dda715e46c9c4970394e40e991c78ecc13a2a5d0b0f30f0000000000000000000000000000000000942901572722e5005a9ef5f948c8cd6f557be8d114d2810d3cca29933a94de3c7658e7e28675c2a49f138d9c98c524000000000000000000000000000000001908e8b815e95ec07a90861ce53f545f0cd44aacc47df40c24d6cbc61e7b28fb91cfb1cb3c67b6c5b38c34fcb2ca35710000000000000000000000000000000017bad3616d8e510e325d9166790239c8c817c68ba7fb937fd5fb70a4219265edf6625b52ff26f0a34c0bf481c482b2c600000000000000000000000000000000023ff8a50a9c0e9ee829ec81972386ea012df5e8476d8c342df6b98fa1faa1382ae921c2f1018a918868672450355c44f44043002a94560d725da2ac44f30cc5f14f52dff5671c6689efebd803b1df7a0000000000000000000000000000000014675ab3efd44bffae321791e6fb35a24b9c07405d9985c685795df2db183ee9dadf18c76cf4095e1e0695dc2c08c4c4000000000000000000000000000000000835f2cf09647061ced2bdf4211bdaea408148100f864f47ff76c0c63a43e44e8ddd9e01709b6ad129bd574d71a1a63c000000000000000000000000000000001017eaeaa6eba76923ff27e5848e5f3b09e7b2b9d55b2cb7068f39defa8628d1c8cedcbb0e1cb5810febc4ccea712b7100000000000000000000000000000000054c873449c738383e9fc2f0f74a6334904171fdb704f5ac35a483ba19a8f661187d36fb35014af9ecf88225466c86e48624c83d846ad2e53f3f8ff5ffd3fca8723e6cd431e89ca29a4d662e82004b60000000000000000000000000000000000439ae88636244d5e09607960fb033e4217343899d044b21e61335425b94a5067c941e83e5a77f4b0690e1de037325090000000000000000000000000000000003a67653818cece3ff0390d097f1bfbea9ba954a85710f5c24d1de1893f25f2863991fb9f330e60cad725708e70384b4000000000000000000000000000000000243394c3459a3af236189ec6155418c1916b854a20b980ca1044b48e23b725dab7c60a48e89f642423c805c117e64870000000000000000000000000000000004c8c9fd9f278dfe9f5e24e0f5b42699bb9751b56520827afc2fae8393c690a63f10e92f77c4a10b0c161408da9bf505b2b2a8a42887ca6dff5b5364d88962068496bee79cbe74de0e8a06209feb38320000000000000000000000000000000011ba67024503301ec72bfad101a48708e3521c8a23c6bf2994078690041cf7eb75675cf5f20c8e82d11145e31751a2300000000000000000000000000000000008ace953ed2eaef19595cc7c9fb1806d26cbf1e888075e3985b28f8d93b9c0b4c820c8e8b50fd4e0b23923d428da3efa00000000000000000000000000000000054ee6f7247296e0748d0b52148a97b930e69991a242767d80bd6434d42b0865a64d3ce60953fd2631aef873d8b2acf3000000000000000000000000000000000077748b724301a8bc48efd1cd66086e727e9872e4efdaf55ba90ad1bed7e229a9cfb79013333b50efb46090ac0bdab488ecb5976f63a38d7f3d8c8ec441b705563c5e3d899870ab5d2ff84467fffefb0000000000000000000000000000000005008a1d62dad51132ad38a226e8abd7421392414acda61111c728713a2ece284b04d75c2bc58d355bb1d3061415010200000000000000000000000000000000189725b7fc48b8a648237021e9a2334247f1cf18ca50008b813978db01667ba08f00b23b3aa0e015f549ff2d5e5c535f0000000000000000000000000000000010483cf2310f64cf0baf556cb2f2828a1c15922547bec03cdb182a316aa86b5473f03373cf7e59a9a78f73193c1caf520000000000000000000000000000000007f635394301441bdc57dd1f4f97656f4218ebb139c13a17e12839091e2e81327f3353c56880c608de824a07a17b2bdd951f4960d6614b098249eb9420077ea5ad11e38d1694f4df33719d1127338f44000000000000000000000000000000000daf4090a229a1ce946064cda1c4b19c88100c8785c69f2eeec3aed12065787ab0abd797ceed07617d55a9c70ac3020c0000000000000000000000000000000011d77fc28355f61037cae3a8342bdf8d11e963495ba3b5d67055f790b1fd632b23565cad77a3d9968d364e4e2a553c9d000000000000000000000000000000001038d7e8fedea873c864b79d1cf8045485299a2bd4d26c5ab5c8d4a073e2c3fcb38cb230dc6ab7e8e228cabc6ed97da50000000000000000000000000000000009de9209ed14d62625ffbf770e8c528594aeddcaf1aaeedb4f3ca973e7b9f9f1a40370cc74b154f3bc641665d8e4d96b7056c7d93d8453be369831dc0575df6438db488780d518a53d19b8f5d22d506a000000000000000000000000000000000a6b0dc04591cbbb1b82a059e08b488fd66edca0f2d264c352f81cb6ec45e50f0af16917fa4727ee9888f84b6c888c60000000000000000000000000000000001369ae16bb0743f65cdfc8082dbe0d588cf8aa5406a095c3deefc27eb3ed462dda9dd4921cde6a1d878a805cd144515800000000000000000000000000000000124e08d4de6e831229005663df4e4bd5bb7af56dfb13244c50410e6d0aea420ba19208bf1a774207e0e0170ad3a9b4f60000000000000000000000000000000011b2973743034a2c362281b11a1ac1c89f59ace09f0a53afb0c2ceb061726c7aaefe274f6dc04e5d0dea2b687a00609a8aa982de1583c25307e9e2c8cf2469a0b1076c6be2fbf12caa8584f34988221a", "Expected": "00000000000000000000000000000000136ff52e440da609b6b73aa838f2eb9791221291b7b14d902458aa7aa9e37114c573edbe8cef7a98dd07275a8c3fd650000000000000000000000000000000000ba625eb47be09ac8cd1e2ec9015640f416af0e3e0e79d39ccac600ea08bdae7a2bc9144f13168a8cec03ce66b9daadb00000000000000000000000000000000095c51e81b5881b009b28006286c704ce3b002e4ca50ac8ea8e574d1e9665a5b1efdd60568d4a4a656ca6a2d1750a39900000000000000000000000000000000143c0c4b3b720fcd0b044a6f420961e2b7eb5f9f1b0d200de56ca8b02709d819f47f0a6ea7d6b49c4f30520586a45616", "Name": "matter_g2_multiexp_7", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000da4cf56fdbaa9004bf8ffa12d5cfb3f296ba5262dab079c91bdbadd6e41ee5f89912bffd5df1643146bce1f0e021b3d00000000000000000000000000000000150227356e48f29443a0ab4536e7a2f86f9e63840e23bbf1b091a59f52c27978bd6a15b29b105132298de45e51134da50000000000000000000000000000000017f5271c97d84f55f8b7ee0d73267bb69cdc7565c470a4b531f9dcd29596eaedf46e61bd79e71e5ade7d000c1c1d81bc000000000000000000000000000000001322812590e6c22bd90511ed72553c1cdb0ba83487b00e3adcb01a9abb438f365ca23fae9ee4a953544253696ddb0bf1a18ca15f0d931619363f5ee56bd7657b2298f228cae8d185c9d062910193e9c40000000000000000000000000000000007c59f94693320b01b56b36f8d1c39fc9e01bad289577738e648771d8940778276cdbfd59f07926e516fcebb70592de0000000000000000000000000000000000aa71d6dcb0b225526eb92b79891ef920634a007b87986fc0f776f85195ad7ec2d84b9bc684add947df8ff42c33b034d000000000000000000000000000000001362cbd6cca3d5c1ec68928be38aca5de1f224e7cd4f5c3ab1c2cd589bbd7c31022d4adc51720bedf2580d2acfa0f06400000000000000000000000000000000162bf0f38e19ddca9aaa370f988be9b35461d2a0f46143e8663f1fa549d0afa1596f029cf2f800b027b90d1eda6ae8a2b54274927eb29fea0cdc464271c918826d5249b2180a52a5020480d1020c9795000000000000000000000000000000000eb12a92fe65f79c646ba508fa615d09d86e582c3337ae16f66cd3bd74a9caa9dc17defb4b4e67ad62f0665c9ad1b6cf00000000000000000000000000000000058b6ce2582c46c0fc108a37e1d2713ff21ec8b1d8c18da0e69f0dfec7f2f327043e174e16d9d64f9ed4d3818a302bea00000000000000000000000000000000068192bd2ebc0a23092bb98c23f5792e179913c4ff1f23eb27296a77e83729803764b8db3b7ba4fe154ca467475eefb2000000000000000000000000000000000482b16e876aa90da6da35e0d7495a04d5b0a1d084c61821f23e1ad63cb1e66ef5975a3cef9ecdf2e696e9d9b50bf9b65849bffc842c21277be88dfae0040c54b072ff526731947cbec0cfe963f2d0dd000000000000000000000000000000000b712fffce3e63362bcc246da566a14139a3d12807ba83ab3520b0aa3aa20cecd5718e2b7e00f24e6fa705315bc2175800000000000000000000000000000000057a66fb12f27e4a5268e56805fe2b61b5ef019b31fcdd861e2b0beecdffe1a3a69e8d193815f97740324aaa40ce34a8000000000000000000000000000000001080a9e1133f37288dbc3835e45b6611fe84ec4790e23e5ff84a2f72bfa2837f55cae9177e5a3a918adde777b7298a9200000000000000000000000000000000142dcaefd73d7f6342e87fff8c6cd161389b6049fa077f35076eadd2b4aa66f3a1819bf8272cac1c28cc02bb6440dc42aeff769da1b62fde321d46c66f8ee7f2129446d805ab7f7bd586268de8f57c4300000000000000000000000000000000034c0f8249d6aefe4cdbf84d151ea9f84add42ade087048bbbf9de4a412cc805dd9b608fdcfa34fa224066b5f06d18630000000000000000000000000000000009e235ce5eb936bae00d3fecead8859e6d909da3d57bbe0a8aefaa5efdc94969a1cb2e12642c0099bca4e7bbf9833469000000000000000000000000000000000b6fbab498c2706f0efdb4effaf79218cf4b652a5205eabeb84f05a060da8cd18c8154a3d37594485ba50a8228f27f6800000000000000000000000000000000130ab70e17dc73f773df99cbe3f978bcd3fcb92a8226a1450239d209cc6969e2cecdc0bf3cbbe9a9c1de072bffbccaa952c9e56cfe957b924c9c0294e1c1f12474331c662c8e86288c97e6a8b8b5b20200000000000000000000000000000000031a2c10e95b841ecfcbddee4b458385e5650dec9a2d1e50216d9fc261a9829eb5fe894e47f171c8fd2f4d5d89771341000000000000000000000000000000001378471c7f770672ee82b70fc87af5ccacdf8995df9ce48aa9fc2f638105a2fdfa48b615970665ae4869f1e2dc7988e8000000000000000000000000000000001969517c503df5560628555a8780138e4c340d9d49d8fac4a8a11c894d283d49fd06aa81e9f0db8f015d9372762dad75000000000000000000000000000000000f5c2d9b7fc33167a6e9b5a5fb8c5d16ca009282edc05cbc8a048b835b16ba33515c226174d6ce5f9836581611ab403bdecec569d223c724d162250ed1d074ed9f4080aaae3f44b77df05292be48ebd90000000000000000000000000000000000a6a32f2006c4b7804e99011d934ac91b1b3fa6f5d02c574cecd6570bde1e998f135449dfc148aaa8fb8757d0a7299b00000000000000000000000000000000198beb461b59f57b85d858b730fcf853d967a1592e5e5787fd81c6a3d9d9b40c1cd7912cae21a47aaf78df5540604cb4000000000000000000000000000000000955701e84721866683b4eaba82c2df8a89bc906fb0a3cde565d314cd7278b0c56936205cc8ada10b03e69b93c48067b0000000000000000000000000000000004740253653a0d6cb15c76e145dc0b1f811bdc964f7d595b6027bb012b42409deaa8da83e6ddc3f0f7b4b237eb62b537915ac9453b831c41becd3c1f412cdf5379e9cd5c80bc6df92ecfc5005356d2aa000000000000000000000000000000000f88e1e30674934bf1062ac619f1834f35f804a958e82121255f8087ae08f10525e740ee53d7514e0ee7c49e324513c700000000000000000000000000000000019d554645696b7beae881ef62297283c5b68ad3fa9a84a47c29cb53449d33d6ee7a5a3cb83b6acb75cd41ac3f52fec40000000000000000000000000000000004b32776966e52e8a72c88a689d6c56833296d384e2059d8f615ccd3616972074987f839b4689d5610a88addcd836d930000000000000000000000000000000000fd4d21b00d81ec993d2350f1fe360576fa983754a7159c2e81024a00931d84e419e8b5231ba8cf8f05a0ee6ccea7e558fa60bc7cff4edde18301af2348faa69ed4f31d437decb7d4fe51142d179e6000000000000000000000000000000000177830cf34186191fa295b7f279bc819d8a53452e2114dbfe709971584ec7a2da7453aae3e64f4b14c261e22314027c3000000000000000000000000000000000ebf2aac35fe070403a4b7a5c2f102c67300bfd68af7863b45185b37ade1bc53d46772062189f348647e74c77caca4a600000000000000000000000000000000128dc7846b2dc5c453ba5fe4675d0c22f4d7089624ede05b0910c34ae623d4671979fd73455b35b61a57c51fe2895adf0000000000000000000000000000000008e33a3c3735be035b550613c712b220595a83c1953b24b3efd38c5913fc23df823e00ae5a1c2ea8a8eebbb93c5c721dc29be0b271d4e22d39e9e06db9e50845515880f30c5bfac80bca39a2d8d61ea0000000000000000000000000000000000a060a957a8da4384e3436110657110653685bb621c32810b6516c690a00c13e37f70185958beb0ed886aae5cdd611a7000000000000000000000000000000000b5afbc85e274049985eac230b2aede7b2df1485c9539a4a4eb6aea406d0f6515ad8bbece7155fb0dfb2123919fb8af9000000000000000000000000000000000afa722987390440a33d5103445dcef42cc4a3c461daa076d56fd38e0b220016ed2bb8e99b9a8da4af96b7da64ba90950000000000000000000000000000000013ea6b8d327191e53bc71fe43fda305a4a0584cad04048afc0480f179955cb27f2ac8791d847036470ffeb47aae36877dc8c2e971a3a4b9909dcc5cc6a0de50286294ee15f441521e0f1d2c3ad3a76e900000000000000000000000000000000032b490f795ac3242b8c7185c9e19f0440ecee3a65263dd4e4c9a431571deb7339bc6e2d73ec43750f6f027bcfd674c400000000000000000000000000000000076ab4ab3e8ed6ea3b882fde5cacb3bd094567288699e11f368c3f60f4283c5bcee7b4c5debeac541ead983f5936d9f80000000000000000000000000000000012aa2060e421f4f4249e83ca0ae1752dfa2b7ca958821841a18f05071a35fb9c1448619bd96f8a7adb2202d3ffda8eb30000000000000000000000000000000008b24f29ee7571f31ff86574e654a5d849acbe92653ae1a1d2baf4c9ca6e67da4937bfda51a70931a6e60d90162efb4f21c9ae0132a4886820115e71e280d33378a04344f635c769fffe91e89fa7ea47000000000000000000000000000000000c8b41e5c47babd6ea113c0ad9f45a75d1ef6bd313b768ac01e6f581ef6630ada623c1a27d4aadf543af4055de7f6b73000000000000000000000000000000000a0f73af06f8f0115bf17f7c5db0a6bdea77a8e3d8fd0b52b0d4e2c558f1331f655dc272c86d98bf166b532ec8e45285000000000000000000000000000000000499b55964186bcc6986e7744c52babf47e274e47a202abf6f816bc748baf846df2b5ced2a5f61fbb0aa2047bbaf82db000000000000000000000000000000000d6c2a9a3fa5d0524f772cca2c7e72a5f2da1a6a1b9550997e7a6cac5b6b6c37693a01d30bebe4b9c742b63bd31487a1e1067c01d5565d0f387516d9721f7f4e5253d5af8353db4a55500e20a95f3c9600000000000000000000000000000000143220e1cd08ffaa6db4795ed4aa35f3b12cce724fcad005367328972f2364f34096e32f1f1cb7a4287ab636d0030322000000000000000000000000000000000f2de47a37a55edbb75ff0bcc446611d690d7f9efdd09ca1ebb6f1d64a330bed420bcc85aed8b95316fcac3aa7d1f2230000000000000000000000000000000016afb044b8b8c64547e000f80b25576aa329a4319dcd4f1bbe15d12e6f3bbdddbb52140e6297c637311ef0c7a31cafab0000000000000000000000000000000019e6803c07fbaa075093f6a69f9dde05ba3d3f58e67389d7f096e56df49f8270008ed422b64fcdadf7cbbc8334037682a23bf766a1e1c068e6e8e4b60391583ac197ade53caf0f8a43c53d1bae9f13e500000000000000000000000000000000134125416c7908cb4454ce6aadb30df46042ef2a6b4b69b19fafcb9ebafe8b5579046725590266cfd10fa26e1b5ff3dc00000000000000000000000000000000073f4147cce24e13b9eefad7c69b457acf126bf278a58a26a7c7c6b482edea6dca9725d7e5e4138b4ec81bc2505ce2e60000000000000000000000000000000006125caac1061cd6c556f4cfc122df8e949622a46ca707b48ef088ee5623df058bada1bc0cce1399f0be1ee86225f13000000000000000000000000000000000146e398c161e29c90c8a4fc44bfd5b3dba6f9e80ead561fa3d91ca5f416e06318dddcfe5147ab5def858fb025a1562352c505d4fd8287a897e01517ddbd7d7ea9d26ae4f58fbca172e5265e2b62858b6000000000000000000000000000000000944942effc77ad02c5ddb052acf86f3a9dc4127dd032181450295464b49ac1dc0047790acb378221fbeebd4c92886820000000000000000000000000000000018e1d201b38d88665696ee6cef11fb19f7daa7f11c5a5ccc73e6b66ac7b89df8437c9f07132ec8b69e13f63424ad694c000000000000000000000000000000001463117fdcf17f28956a42677b3ff431cc17ccbde067b91ecd6fae51e1e24ba8d594ea368d041656022611ad3ed44a6e0000000000000000000000000000000009715cc5add17395b7ddbcb961269fc5d4739d799fe9554b3c9e9f59c895ca5df8ec75bda05cbef3e6a165f7987e78662908006c06ceb9188651c59d434988cb5b51a5a75772ba71875444c65ddf0f4f00000000000000000000000000000000007c07cf1ac9b8b28e3d2f1f4ce22b8ee46e99914ba20c7362c679559a1618a906c6ea65c475ebbeca4947019cb6fbec0000000000000000000000000000000008b29f72cda71e0bc2246ead57b2f758b741b9232d87be75331275a5cd63afc9aa98b0e42c1b82cc258e93c97e596a81000000000000000000000000000000001512548a4bbd537a4d5baf673fb76ea7e35b2977216e7b29a6375e1f92049d7b7d5fd5d8b4ae6191f5592b738e149a5f000000000000000000000000000000000cc9d646428135296919808c6ac10c142e769bf71bc1490196dfdd4e1fc7b84e58155bfdbe77a9e684622ffd83e97ad3e8e8724c80f3527de5f0b2b98ecdf0b8d0471e63c0763a89da8a21a70dbf8399", "Expected": "000000000000000000000000000000000ae9da7d12d0a03cca3b41ad869f762784cacb988eac7ce904ec9ff47824e058e2e211e2285f9fe2aed0b4385949b4540000000000000000000000000000000005b0c873d20f7be1410d39885ce4f79884eb6ae2b2f27510d6f6874dacf2a66c64e56b7aacac61ec88261624936e695700000000000000000000000000000000076c6076175ad748dd68fee64431e5e4ad013797de4528287e7226c3df90233799ed5c8b36848c1a2e1c02591a013d270000000000000000000000000000000001f7f6972121d38ee2d10c621a38448ed12271f7e0e9e4567fe1b5fcb469c7906196fe92c66c37f8c5abc91160fea8ae", "Name": "matter_g2_multiexp_8", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000139cbf360b10e59c20dd4155af2023d5dfe0681c62351dd541cbed41b6a328aa44b862d1985b132a4d4ca61c95b61ebf0000000000000000000000000000000004af6b5a0f7a02d5c93304be0d31959bb4b1a7a5838dc3f9cf50180c4eaf3d32e68c006263d75f9735c8f0b5f811d3cb000000000000000000000000000000001644937e5ff3b8d2005a2f3b0984917837d44412362a121be481526173a4c61e20d61076aa10b4072b79743c5f7f4c4f0000000000000000000000000000000009bd399b55a59550dd876f35e54a5803058228bd6ab6c9a66e438cae473c63816c96bdf378ad426a236b58b90e737831e14282bc687a00264b4e4678ff238d5205f6b6fcc10040d9b4393e93f76297a8000000000000000000000000000000000f343e5118d7dc3a38e9975a5f40084ee5f2305e45a8aed28ef105f76345d9f5646b4f3924b92978846b4e605b78fdf400000000000000000000000000000000017e61a2ecf9b3403b43f5a10a97cf5088b4f98e5a4513b0912ea7ecef44e6809f10dee60367cf2fe3e903dd68c2a97c00000000000000000000000000000000039f37f414338cab0e12f99b2aa1e3c02cbdee3406d1bd17c359ba899b7cdcff605f894530895aecb469f41628c3da120000000000000000000000000000000001b78bf69f1b7168d735fb4b7b135fe70db79f50e792eedea23f83cee9b48e092536c2ed146c7499cf047c5b4f0a08735307650d6cfc681508fc7b8dcb5291837582eba6588132f46ab8fba674a1f5af000000000000000000000000000000001342346f1b553e29e661c9f6c0a24d8f788db98262d6af86af55d313a37eeabed1183e367ee3d83faa3f284b260e786c000000000000000000000000000000000960c8af3f7e6587cf83baae447491e73cf41e637e1efd730e3acd9793717e57b85530584942e7a030bad3b91a76996300000000000000000000000000000000166daca4ee2cb9516b5178cefef0553115dec8157f6194d24d191cfe6340406071883c89246c0cd5f89bbd5d0f1ee15b00000000000000000000000000000000187f668086b9b6307899d301bdbfec915cf24ac0be10d6897b0677e4f1de6a241f3dfb19225644858be0941530e67d0f7d6a25511ba63f0b7ebd2189cfc4c551083ac92b144e30dd81d27e59dd86e22600000000000000000000000000000000032c3783e701bcb651aef40c91682eda03f9d90f252740612c85a5727f8bcc41a886b328d5ce787031c08ace235ff465000000000000000000000000000000000b0eca06f9fb69ebb46d0af56d3d934b333514d7f31208b4ee2fb92009e6041749028a78246a0adc324034a94503e80d0000000000000000000000000000000019eb24ed35f6c7ae53047814cab14d51ae6cf336d140a17e794d5cf18450b7fac3e6f990e12d340291459197bd353861000000000000000000000000000000001983a596485e657deaedf01614dcd5f4ec515c0050e8068ea02c9833d0b165c0f467107a50da0d8cd43bfcb59db6e710eac8e5cf13de6db37982390c8b6b0474795f479584960748b7ffed881285e2df0000000000000000000000000000000002f1c29ffdf7bf20fb8a13363393d5f1cca5dd9af82888f0102030fdda641abd5532ffaa2669c0c4159a989cef1c5bdb000000000000000000000000000000000bd548079899d49cd368bf5c246aa168fc8c777bb84a7930258502c8424a4b68e1ab20dc9ef39c307e52bcafadb0c8e100000000000000000000000000000000070c18918f037d5fa1aa005e2c80ce6a80b4b24d33ce72a2bd824f9a061af1db236f04d6041314310b31b805b8a674800000000000000000000000000000000014422b173840da655aac6ea4b7a04313d5d0675bcd565258c73039f879176e51ec0c8a9deba9c78c33179a5ba54492012c134652c27da0a0272b0783551ae44db6bf592ff299b48c50c550367d470b5b000000000000000000000000000000000a1be8e39a47dbe0bd19b8108a5bdac582e1d11ef7fe28df1f12da52924e734e1d591e8e33ec20c6d5af5bc8c1161fca000000000000000000000000000000000eaa7a7cec93b8d5eb933103b52a35b3d58214feb8e2de0bba3a0e57e7993a9df0dcf8089142f57f8e0d1d303588ce9d000000000000000000000000000000000089fbfb389ba448eb77722994178ee3cfd15a27be4ed6f4d4ab6ea1a4c10d6ee8424beb17d08190fb18ab8498d4a4fb000000000000000000000000000000000ab02df2eb474735e28c45b915299230ce159816419fe9c99a7da397b7210590705262ee14c2a244f4922c35bcb119338dca9ff432bb483ad726bd20cf96b07ab6f07170a1449f0f1b50ddc6e1a0253800000000000000000000000000000000006508fbef44d36cdc6fb37b6324810ab2a1d94e39abdf09d530df34714168105e23a7d6f7fd9caf31f263b658f16b76000000000000000000000000000000000b5bb1802813f9f8a16991d41275ae6d18532e3dcd2eae091da7256aaddd501855e775b779959fcef2822685725cd43b00000000000000000000000000000000052146ee63ae277911fe491420651a96994a30c7d1b19bab32eded008a125369baed2ec5a963bfd863a83c29bc1afb23000000000000000000000000000000000a180d79335347a8be350a92491760c6bf1fd56604d4d99a1c49bcbe50b2d04b7cdde55b4aea8ddda4bfeb8e79ab6ce4146433a0738ab1b044e059f49a8af8d85546d0e34eaa0edf2b2a6ee466c0def80000000000000000000000000000000015dcdc17a9afbf88b54af22ed2168329bc43ba50d374c0507c790f37f9669d0af167328d50d322a827d45f39724d2b2600000000000000000000000000000000169b83f2567e921a4319fc03b2a7eeefd2aed79914bf608d9e0a54aa71b9cb3e09f1cbfbadaa520c0f77f547fd407ea50000000000000000000000000000000009b7a8ff8388c85a0fe3860f26b09b81b5dc51e00a8961fdba96eb462e1334e9e28a2cdc4be49dd8b96c548c64921718000000000000000000000000000000000243782436fe7cb20a3242a3a21402a43a2c4fcbe77cc7182ee3cc04f4795c269d8a64ddd25e89ba4fc796747b608092de0399ce1ed861c0ebce1d4e811ea0a3d87e21a54ae34e6b5e1284cbb94973680000000000000000000000000000000013ce6856b6df48e4c9e3fc0be0aca5b139e1b874de6ddc148c1c23a846d61e7a531cc889bab99706668a3b69d32b9160000000000000000000000000000000000a459676071c7f3065a6dd7632edd5842db34aeda8fa0e7d7a8ea29f842ebcf2c5fdfa74ee7685caa51481c4f46952240000000000000000000000000000000010c1d9ebf7bed9195cf0bfefad6ba45f1bd19a9a7d340b7c630b9953923efe4907bd75a3da066fe3d49d656f3ed91d2800000000000000000000000000000000039189de73332d5b5a160c296a195cb9d8a736cca23a92948d513da7e4fc46e1ed9c207e86751b3cf1310d8a7284877ec2b034594fa53a0951e2116db1b063345fa42dc8c870e1146f1b00f626dbcfdf00000000000000000000000000000000129821e97c65ad3801c011792f4c099e19919d7d03bf9fcba30b3735586bb7ead7d4f9bd10bc5f0e5cf1dae82d5651ef00000000000000000000000000000000038cfbe45bbdc494988a2dc72dea6a7e36652f5e5a2ecad41b4aeceec05dc4a389e54cd3aab349adbe32e65206eb481b000000000000000000000000000000000bbab53f2be2c471d6e9cbad719a73c00b582d0983e25e1969c0be1faa56b1dfa5b7b55797b3340cf8c7eabc560fac71000000000000000000000000000000000b0db19410e552a2f7889c2204a93c5cfc71c360329e3be3171e88fc7aa1e993a5d089c28b1a8f8fc80d93ba194c63ccc1e6d9c5f8911014f0f540211af5184d96fdfd47c03bf2d7bbbb3bf1a330017b0000000000000000000000000000000019320bb8d29b7b5a7130b87a39e87e271b96656b5a2749f13208520634009c26f9829401d3e21cee5a757782c6bbf9ca0000000000000000000000000000000009b37068d72463e72f3a89b9093c1b09f01770e647b5ff7daa50e0679bb76404cf7729d5575a39f5b9b3b371893967df0000000000000000000000000000000019ff29e41db50c736e12f62d76a28f4ca4f6b0f4f61aee00cc0e9dd4e5a75c0ca965b82698f704c604bb309aa5b457f100000000000000000000000000000000062c352a554dc4bb96b459378c21ec6446e15b868221b2fb745d31dece854bc281bc22827d84ea3b0fecfe5d156712ce6df5a133d3332e1f79f41201f8cb2c8c8d4d1ab0f640c4de6bd6e34884a77aa200000000000000000000000000000000021c52e82b0012537b57fd92fc276e8de842a59355cc15d69a52effcfaa7cc43dbda0c34e1b9af44c2db8e9356b9c71e000000000000000000000000000000000371a6da5dd39092b6108f631a0f4c4401464a109ea1e5d14e262c8a9577e1421d41734d2c3ed73645cc13ef3988e9e90000000000000000000000000000000004054159263ee60f6b1882ad7c376c738c7ed87e6b34dfb4be2fd7aa29ede414c2c6c3ff098c53f22a1c1cd836a6b0600000000000000000000000000000000012d7af6b57c688e1ce90e9f2796b0e525e775fcb6be65f5d2fbe3d1ce1e5d948dcb098c98d495a6e3dd813527b4635258e7219a9d431c597fe9700d43da8b545072f5a27a9f1af99053ac0494087dca1000000000000000000000000000000000e53128fa5392dbae9e40ab1ff0149d5b577d9d30dcb85eb5e4fcdc17c7daf2ff1d6fafd4a1aba88d2e7aeb45a01afc60000000000000000000000000000000012972781f214511e9b78d276767b1b64bfe5b43215c7680c0063b6974f703b209b2929470dbae16f9767a7cba5311fec000000000000000000000000000000000cf6b37c5a60851d03752f68eaeaf37ac67c661f644cf507c5458cb5404d0ce903c92ef66a657b25ce07e5cf5d956929000000000000000000000000000000001835f202705c8b984a4c7a6cd219c718ab27a96671574cf7cb618235d19e9046a15212e0da6233f15f18bbe192df29c38efb8a7a5e48d5f4a011a4aa0dbab22ede62c903414d005d507ea3d77bd47a6c000000000000000000000000000000000d01c6e8e34e646911391b012680f0dd8f4b8d77c10192ac09ce57b6524f0eb8c7f83ff8f26d856e0945d7a909eb790000000000000000000000000000000000070fca42e34dacce0051f9e26c7c0dc328fe652110976df6df77af04202831dd095715af1714b60a99f2177e86a3443d000000000000000000000000000000000063ba43df0155373df59b009a8083b9f62004327b16ad455037487c5b8325e7eaf57a4d05c533e284004be6de79ad1e000000000000000000000000000000000870c2e5a7d26ba54bf0d45ddf0a4c3011152dd12a5e01a80e42bc4dcc784c7ffdb66f9d6d69ac445c1d9aa29586245147f53e2c06664e1daffd7d9b114e12d4190d5d0fa2244d61a13da915c39b8d53000000000000000000000000000000000d84ca02ffb6d3cf6eb27a143ece73d5bf006ff61569f0eab00c5a512c5b46e1fc21e8031d1a578010c9582d75e1faa8000000000000000000000000000000000a41249cf01ecd23d06f6a3bb8573186fe47e5165ec0d447df62bfc236f4c203b4feb8e2a4785648af86646cfb0c4e32000000000000000000000000000000000244fa6caa86fd27e044145557697ea89baf718746711c8dde334a2c5ae3c73d7a0e04fed6289ddfaf26e47a9d26b09e0000000000000000000000000000000017db897060c0a8e3e5d8eca9970407b46dc2c2ca0c004d50a171450852f585268bfa8a379acd01b6d4685e04c0b8c106fb109d9a0a7b62c7c452bdf0a2853c4bf65e5439fdc83aedec8c0bf73a16b55800000000000000000000000000000000071e13963e20eb1dfb671aa4a090973e4a4b7ad3578f8630db8a865847be46c796e6f9e095a9ce558b93d702f8f8572a000000000000000000000000000000000dfc4c89ceaad07e3b4c35d96e8534122ae48421cd4443de478ddf9a8867ffdab279ad745e55c87b731afa7700bbdb110000000000000000000000000000000015dd6b0c26f6821177d0cfebb7f1481a971e7601fb24ea365a0c3127a5b1042eab69446de05b61cb6ac0576752f87aa900000000000000000000000000000000156326c52bc78c82f5cb4aec5de35e3c128c5561dc80da2cb24d68a7e912b1f2dac2078508fdd4ec38769102c082f0f74b0a931b894fbe61115fcf52be51d44afdcb96c94117c75adffcd8729b0a699a", "Expected": "000000000000000000000000000000000b537dc10a6f518122665f7d78326a4728a2889325e5be7da7e25e4752c680fd786cdaadfcc426343a9844efbbce8f2300000000000000000000000000000000085ba3a04aa8cea82b95dd994f5b3bdf0dcf63f13909aca2c2d61e4275a7ea22445c953b927ebc6b0987e98b553469d40000000000000000000000000000000019cec2e9fab640cc88073bd39e46cd571324904b1950fa8f626e2725936d80daacce2487f46ad23fa8af9c6ca0367fdb0000000000000000000000000000000007039a0e11cbb8bd940eaf4a192bb94ff8c6d6c79f775fa67821b5ba411641c09dfe9fac4cf45eb5fae52d2fc4beb6bf", "Name": "matter_g2_multiexp_9", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f73a297cd6444809aa11b0756167e71986ab31b52b57d3c0aac5637129b8702ff21ec649541e79644c27f0017c8ae3f0000000000000000000000000000000016f96d6ba02aab604dd918cc799cee61cda4c0164ed9f07d4932fc4ac3eeb92b1e6b40dd7b18cd8d26056b486e57ed290000000000000000000000000000000012156f3ca3aa1e79014dfd92fbb6c785cf0ee449a8920b89ad04355e0fb7c8ea804bbad082b4edc9abd3b24ab0df2b61000000000000000000000000000000000d51b5f62a6e70816d7671bcfc52f11bdac6221a23287286af78605b99ae8bd0c722e485bd0381b958a85f61e05de68368ce22e379ddb8352d12eb597c179c7089c6388542909876c69ee377b14054e7000000000000000000000000000000000acc52d0fca02c3228cd2e5202c4eda297b8227bf4e64308226bc487e5b64738efa4c07a3738397f90251ea9a1a9da29000000000000000000000000000000000b85b853826a28777a5767d5b1966ce12fa8999ceff5d6deab5c947fd19d19de9c103bb920bad615186d132ec22187320000000000000000000000000000000006b5a83827dc7b3580579ab7976a70ee160b712580919b6f5d4e180165e50f5a1698fa7cc63846eb1f5e6df955c3eefe0000000000000000000000000000000006c2957d8adc55931900145388583e5c2d5f6bd784e022702801c38534d2c92c6df9f95d022aa6d800e1e458eb7f313061529338195b665f1b80c4b95b7c3a26a7229884be1f4be9d49e1274a9ec3f810000000000000000000000000000000014e4c5991f9f2ee262019c1344a0843756157dc85aecb15718217a2fbe23fe0843992dcd3953ebe79acd85517acece0e00000000000000000000000000000000076a18fe710aca2875bc102f21782c9649f107684a4edcb0c4538f1a2890a2ae5b46a182d5470e620375327965b6d37700000000000000000000000000000000142a0fb19b28a034d326121458628356561e50cd3a471ee78bade0733597b8b90f647f5199d4b5b1ee6be4e1870bcd310000000000000000000000000000000018f8b5933848813cc2c1a0f079b095d565e7875ba6693eaa10967d496fb47257c9c674f301349dd8f2d22f8857f9d5ca44d740a72e6c8b5632314408022093618321c8c0a8cf2fcd9ebacbe43505a01c000000000000000000000000000000000db331d2b965dbc053b01a61e671d2ee6b04b072b6494e482f48f12221f23e3b1ccebf48046d92b4be2e4283c77f51380000000000000000000000000000000016704f3e1ce14f49df400592ce29627833ed1dbb91ae5f00779eef94fe9ab313c3e7c8da940085034e1a49158043599d000000000000000000000000000000001956d492f5764c6de0b8e9a716766c762620ebd3265a95b47a8ad2c0614c337692108800e22abbe321d77a6cc17f4b880000000000000000000000000000000017149865739d6aed0f2a4c3c71c2d02f8080d9339025b03f89a37a165fe6e5a4cbd489b5fc90bb2cc432e5baab213c8424872a78e340ccb077259aae65d6c448fe6bfb64daf4e2b6ecce2cc9525e35a700000000000000000000000000000000036804da102cce975f980ed5a69e0464241b5de87238f9892c77fc2b6e5ceb00d7a37a45b5520fce5f094f8b9510f49b00000000000000000000000000000000049da8b6c974f2d680a80d2007333f15702f1517d3dc11395662ca1db945c795bf64167840c4df0fda68a69e127b2d590000000000000000000000000000000000e94cc66f1ffb2112e37cbd5b4feb7d65032c2e57260504a42816aeac85648558f6997ef12028655103a8cb9de1297d000000000000000000000000000000000abf7703ddf6995d5c29124ba9a3f890854fe0622d547a4f24d6a60b036ec9e58f7ec2deca5a71e1fce2210cf810e2f901a1d84826bf78f493417a06a800d58dba688800026638316fcf9ae534436fc00000000000000000000000000000000008d22e456c643ce680f5ea14553a9c249a43d4f92d94135dfec85bc58967ec01135507bd8ac3954b5876c5bebcc1179800000000000000000000000000000000022029d4abec7fc9ab3bfddf2f462660bef7449c4093144d9b7d6f9e84f4f1c947855ca6e09bbb3bee4db096978ae0dd0000000000000000000000000000000014beddf6a3fbcd621e2a592e1c87952ed277163ebf390896f7c668944d6e0a026d3df74b0fc877ed560527a80b981d1e000000000000000000000000000000001414af918645ce0d4d1f670333fedf286b01213408019e327d3cb9321f06fae311b598c2f78bb578e85692e6cb787a52c5a3268a8ab5a12214b266aaa4eb562aa05dd19575a7f3ba2d549a25f1900cb800000000000000000000000000000000129f1e25d96b8c879710a81b727b31d27ce9887c245bf908a3768f3606870ca6bfa70dbf5135819d36582d55f230e94c000000000000000000000000000000000e91eaa33e7cacce4e1d6d0fe905c72221b534a72cd51e1de79a25ef0c06ab454a849a241c023b0f82aa07de28e35869000000000000000000000000000000001379e390f2f0f3636312465469b532d876529d58dda8b024b6b81d242af47b5720af4360d5a3172ad80fd9fd8a14ba2d000000000000000000000000000000000775992d5a8ae0640af845fae03dd0b2197699f413f90f6130d21db0dab042324094b36acda26ed86c65821d2d8a29d9e62a7b00d2be967df04ef56121c95c8736efa95e1faa0196e1f4485da82b3c3c000000000000000000000000000000000f5420156358ddbabf31fcc94678866f899e38747e79dba8ae280704c4b199a03eb423ceed18b5cba7e7ce84583c84a0000000000000000000000000000000001127669ef3ba3785a859aa4e942e8fc3181f2703b0ece6ddbee8830d7ffbfe498794f1ca2e67c3ad39ebd33e838dbc5300000000000000000000000000000000138113386846310db8e21fb8bfe40035cd89e51736b491d5f2d3cf5672e6836c25f62eab80f25ab49d16dbb83796aa5d000000000000000000000000000000001711d74ef4995b473239a574fb8ea6edc6eb7a88793a093df4652da240d069c5bf9249b58e9b1e11f7d6619cdc28a5787a883bf845d1ed04e0664d814cf0b49cf8c3e8b8594ae5d2834c753851ed7803000000000000000000000000000000000d32ccc6598af8156f1c5b35e69e7c7f57f9fe18748510605a2a81b4ee09882bf3fb26abf50206cd57c77924ebeda8010000000000000000000000000000000009043d364e0637c60223f9a5db8c50e983746fdf4c9f7986d27f5f4f3a6df487592ea42078f14efcb3eb1b7e81d058eb000000000000000000000000000000000233495c4961e71cffc2abcde4007c0d587687aea905f3ac5758d0f8d9020197adb6f9d7b86a542b8efffb05dce997130000000000000000000000000000000015b084e773e66ab1459825b6e6dba055a96e4dc1d94ac0b640e906e0a9f12d2124a58537c458e6e1b571311b93acc26c0f474e8f4051c4e91124c14895fe9e2516b315d805b79013caf830524fce8880000000000000000000000000000000000e4b859c679a90c03ea4d4b0b3d38211f685db053aede0f7f359f712e1ae808185758546877502d57200da2c2137f37100000000000000000000000000000000173b24ca19436b51aae22838674c41c752536eada3197de6efc98303eceb3e6e8e47ee6679e61e3cb5c8c734c96c98720000000000000000000000000000000005232b8c97a4860a23999d6ed6d173d300ed50b77c7b3ceb4e8407d9d6877a6004e2f76c553bf458b7cfd8d1e6fd364e0000000000000000000000000000000018a115201e3f4eb308c16656b3ca0635e6284169cee3f28101903ce1cab0659c3d83a449918df6e58e8af2e001036b8d9b3a5790750825ab75ab7422f833c671b95c6c58619189db66a6215ce907381c000000000000000000000000000000000131232788aa3038a6b8a055a896af4f8129e3dd3397dfd90ce86b3e09a775e5b5e19f4387f4c02200a36bc2a1e09d98000000000000000000000000000000000eb8cc0455cbaae97dfd05c1246d3d5ee58c286d263184ae342f5c0ef432355a574bb9fb8ec67634f999b6d1419f2b6900000000000000000000000000000000188b8a85a6b255408f074b3cab66b95e0e1a1b5b8965034246dcc196f2bb84aca3a78907409826370bd65cd4c4d0bcf30000000000000000000000000000000009603984f6d9876e9c235621fa817efe45727fd8c4f76abb7b0796ae721701161b39ff7cab4c57850014e7f1750954ab6607a48ba3fa5c033a1ef90260ada14ee50c95e5167bf801ddbd3acb77c3b3880000000000000000000000000000000009003b42c08b5c7d3ee9f6abb96e08e6f537da25cd0cf7eb85a49067746c03566e133b54153380286ef5725db5b41058000000000000000000000000000000000f09b7b754c255e0e3b8435ade64d6960285759495659dfdb9b117806397baf8d3c87e30bee02c9e1b22fa3efcc58f300000000000000000000000000000000003582c08a8de4bbd20ebfa833517a75682618fba2702b6c71a4785f70dbdede4e86ad8e04aae1f50a6bb75842ab74aea000000000000000000000000000000000ec013f22e64a4d4fb6f964e8319feb1ddbcfb71329186545d9b9d7f97d1f6a56c8aad03d20e9c30966ca932e1f2bc67030db724eadd2f487d31dd4354b5c0321a7983aead21759807bd893217c4d40500000000000000000000000000000000025809fb06c8a31f31ca5b4a5c795bc93355c78d9a2a4c1d707e32ff2a71d94cc1bf7b709cd5d6a183cb05fb6b5f360c00000000000000000000000000000000127bd8c9ee6388905ffe59bb0fec0e42b4aa44be74e5961dc2353e474baabfea86c41c6173db413ee28681a6bfd3ccbc00000000000000000000000000000000181f40dd8581b9adb2981dbcae27c7e906138569ff41a833ed3e6ee4fb0baccf2ccbe5b28ae2ff8e08c4f534116b58c40000000000000000000000000000000005cdd822cb47f35f31e0cbc26f6c957d51c6880369af94fd84daa1f1ca95e41e240b910f031585842fd2dfb170d618aa88e71d0be8fd050f6dbb8b2fb3ae2a9e593bef7a5163255aabeb07282e8793e30000000000000000000000000000000004a06984a3916820368076ab8cad6ffffded2cf1e67ac33f539ea8fc7a79580c1969e55b2a2fe3b31de912d6606c20780000000000000000000000000000000008a1152a581b6fad2a23aa8b0b51cbe523e701193207c896d08b99a672dc047498e565a568b79f8f9188767ba95212be0000000000000000000000000000000003539e82e5b88ef660b6593fdfd9591ec23e7109642f4aea0570f1f8f8e00822d2af277632ba74910459535b35ad47120000000000000000000000000000000015d3441f621c7e6922c489e474f80ebeefbef66cc59e4350b6f803e409034b7f498be2dedc97d902590fc1e296fe983c26989184bb87a586b8752733f9ce9ea06422c6a898f0f402cbcf760a7a21c95c000000000000000000000000000000000f775e13276c2e32dfde955009422557f332fb42dd9ccc3246d2b080e3ec44d910aa734478899698a9b04f6fb1a8f922000000000000000000000000000000000460ee4df6dd0184bcdae6d53cb66967c2213fa878a829c3196664f8d594ca6d60bb2a56f93bda3b0d2e6aac0a1a222d000000000000000000000000000000000fc9bf81d4cc80ba4e4df7307f976c2ec1ea2415df3c263cc970583824cd83703aa994daaa6e5c20450da2ba90a242830000000000000000000000000000000011f08ecbda9a192b232e8330ccbccb16a26bcf4791707f2cf52c2e11a8b3993221666563a772d82f4665804275b03b613d1dd9cc44b30a4623a4d14861688cb678bbb8b2f8ae3ba140f60e64c05514b100000000000000000000000000000000027fe7ca0fdf1cab9a52e304e55350195492abecce4289b0f1c02235412bb012803e7eb59e23c665ea86dd4f74c35c440000000000000000000000000000000011301ecfc78ada92885bcba8af75da6cbcb448e0c49511f3ea306f4ab944f5bc114e72f473cdadee2d0e84021905c5300000000000000000000000000000000010eea529fd3162ad7b49638a70f6f2c26a6844251b2c2f9f8ba54cd334914e84e5a1ba9c7b4e7a8b9cff1a909db78bc8000000000000000000000000000000000b8a6235a7310d52fc8050bcc484e6ecf299099e193f91bea9db31fae71fbd14978984a9e6de10939d0fbba96314b0a55639d80f55e24e05e3d943340e324f6738a593a915a6bddb40f01bf12f73daef", "Expected": "000000000000000000000000000000000de312093622aabdc7523cd72f568060f4236c7287d61c3372bf81d9bfebfda2795c3182d508f0268d8f445f6ea0a5f3000000000000000000000000000000000b027f117583406916a8f139d47227bbea28502ed0df91cf0841345435376c944a587c3b4bd60f8ae0be7c7bad1c8199000000000000000000000000000000000e9a7b96136b26b0044b11288d35969c17146241aa529e581a8fcf000c33fcfff2dfe1e55c0fb63f6032d0b6b0cf81180000000000000000000000000000000002a442e740ee390d87ec657fc218b76adad7f6a766cbe8f34f4824ecd1587deb3706af77a95c1d5f8e79eab1dc482c45", "Name": "matter_g2_multiexp_10", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f54bcf1637d03854cc2b785e52bde25de7e45308048ed8ec0169069c2124871782bd9d26471014d039c9aa022e1a99d00000000000000000000000000000000106698139b096a5a79d43321ea64adb783011f04e5779625c9f77e5c390b46ef0d249387e978e64529bba2db8d7aef2f000000000000000000000000000000001668d5261a4ba37d79c76f44eae9ce2aa3e216c5fbf6cd2e90c6a73cebd8b59600303afce70de3e83a08c20de4609b100000000000000000000000000000000004b1b122cb55e688f8297913b84d466c6f3d99c09f4b039660238c8bcd0b7f6977851a6ea4b1deb01346db06d75180c142fe1e5b3c0245e5cfaa1ee8dd8ccc4ea8878ce2272d152fd8b24032297ac01800000000000000000000000000000000192a28dbc40d5ceee4d33b5c2778cacf8c3ed7d3227e7ea0d6fbaa7cd4a81134b63415f4f1960656b1fed15023ce3a4400000000000000000000000000000000138f296c45594a930b949756d0ae14dc9a720bb2bd9e93c7895268121a086a9d55c10135962a172c02da1eabfcb8caa20000000000000000000000000000000001605ef8182fa13a09a6b7661472296af2b0fdcfd7b051e7cf1d9e6d7c7f4ad9521d7732733399bfd5d09a088f25d215000000000000000000000000000000001928f2e5d47d7273e035114cbdeabaca724409a56056b4e95a4ca3b2222716b3a5368da3ed406d73f43e9571d1e04902253bdc5565b6ebc219a75ab74dc5ffd304c94e67160389f87111899ac07a71b70000000000000000000000000000000009b35f132a903579d82cae6a321c1ec7fb0281c3e82e9af05c3b2830ecb4a941da5b1637c1bf0fe9a39fcc9ceb0d09d8000000000000000000000000000000000eef9c0846064c866ae07b3709091b8bd48bb6b20f995b44fb49e030b5cb6d78b7f8201704b53697190a5e36e9a4541c000000000000000000000000000000000a98a5d0d5640d6399a3580036f0e5cd693a7cfaa26438a00767d5ffc0777b83c516316d9cd4597cf8601544038f4d9a000000000000000000000000000000000e59541068a62f105a0d26a5f79fa5fa8b41b2211f1fe674d84dd853663962d64a7f70e785b51ac3cc07267c73400fe6acbf64f93f6f85805517ddf0358ecfea1fd58a3666b8dd9d3773a28590fb8a13000000000000000000000000000000000157f58b1c7152a7f931bccd9a79073967ec28855a6d74fb8727f59c5e3728fbf07a5032dccb28eb8d8b24229f2dc1880000000000000000000000000000000019f41bbbb853edc1fe3ee82f901e613107dd4ba1d880284ee95a2c4cfb2220ec1408f8bff14defe59775136bc75b4a1f0000000000000000000000000000000015538789157505a0798aa36fdd171e0bb14bdac75339b35805807c18bf9175d877360748f97a8570754af0e28e89df660000000000000000000000000000000010500aaa99216aa979acd66c5b0cea2a6a973f1cd10c412e823c61cb897bce54d783a6c0acee22cf9052166a4bb5adb8d9d3f97893eb4f14f21f68110f612a444815fbf2f76b8399ba6045c8a44270df000000000000000000000000000000000439729e13e6a9b5baafdaac65783ce79a5972791610a333224e61104d15c746d7cf8350e619f0f72cb73635f6795c5f00000000000000000000000000000000092e3c976a4a5424b09e50e6513a9e1f427356ce161e742be31f0e589e9ff862460d41281f0bb2d27b1837a70a5938fc000000000000000000000000000000000e0e51e92ac3cabfd999cd72b67cfc488e150b11b18f9a31b1c2338fd4f2c58937521b5a107752c342e67666b99fc42500000000000000000000000000000000023d8884aa3f556e98e006960293230ac966ad18f3f715e6ab31a6bf0872c04e6f115fb1608cd87ffb369ff31012a11705fb554531f53b8cef8d93566df80878baa96f92bb54aec19445980b1a1f6c34000000000000000000000000000000000be33bc145611afdbadc636e9d7cb7e3a9c92c32f6944a2b7b5f44c248a0754c174e3286ad307fcdb2ea02a3578aa588000000000000000000000000000000000457de1fa8642d302065319b1d32009c64e7d941fb43d1b3cf455248664b1db516379df87aee05a651c132eab8aaccb5000000000000000000000000000000000a711f3bf1bda60ca49271e8a3143330cf924328d3ac6f7a802c15be1d7413e300f398274f338e6bfd0225cd8ba25fff000000000000000000000000000000000a786c5c7b4f1701e292aaad9b2e47bb883409aae0c44ae813ba48f401f4e2146ea0b1d85f2ce862b6ac9ad3015d4b14d79ba2c485f0aa0e35212fd7fecf970258903bd2427c4c8b97c2c425ee1190990000000000000000000000000000000007d03697e195a6b714fc9785b49e54e219694250cf5fe77553434eeced15422de3985f8c736996c1763d4b9248a7a7e00000000000000000000000000000000015841a70a168d2f356a8ad929e2d1433b782351f4833c51b50f3a1af48a85468c2ec02699550d21bd919203df73abeeb00000000000000000000000000000000170902520080c46faae2bf35de396d56921bd0279fc889f0187adbabb9ae52b849269d8097d5b3f331dd5a817f9b2ff40000000000000000000000000000000016846a000f037eaf5953b7c4b477e441ca4fa738895aa24dfb0ef01a4c8fc21a318d40a9424e151380084578ca413b3344c7017258bb979cc9bb8acbd3a3e62eac7aa152db46cd7398ef07edd031e4f60000000000000000000000000000000001a50509bfb12040c0271b231c566d13510e6ba84448e59685f5bfbf5b008fdc64cd5e9456beabd23ac011b071e3a5fc0000000000000000000000000000000014a964c9faf1752170ca40cff1b9b4fa17f8d2b56a4c4bd7ffabb65798771cd624ba61ee43160e70731fb9b07af8ecc2000000000000000000000000000000001822ceaae7bd0a734f57b67e4834cfb00a6b415459d81c7d380a2e5b5c795eb1b6d63ddffb1131cdfdf0d76852c75a70000000000000000000000000000000000c5a1575b30e5470151ba055f577a0ea49cff869614c50194829e53a3e1a95847fa387a0f45d537cabef3a5925e61c432583e821328ae90a7db16b20525228e8d915bc8d46a642cb0a06dfb64168cf1c0000000000000000000000000000000018cab86a0d70fa30b4df3e05a91eef57f6505cbe4bb7284de56d420ef3bf315be9249eedfae92561c643bac2c92301ee00000000000000000000000000000000098ca598ccdffa9bc9d464d51b46ed8a8f22a87ef408cfa45fa7f78ae2dcb9f861d9d6a571f6fa702a71e783ee3395cb000000000000000000000000000000000c073c0a323c3051c302c0558463a5c030539d74b440fdcb16b42ad5ec097e10c16bd9a651d149dd719fb1fb865420a9000000000000000000000000000000000164e622bfb8ecd5eaf691abad9db38ccc64ff0fa1784d26db8c8fbebc929bc6d4dd471321e01233d55fb4a9661780b5506f22d323a740553d6107e651c192c1dc6e0a0161a82351f125f08c77e53fdb000000000000000000000000000000000fa48147388181e8d0033004118848c50c6425f2e5f91945a17abcff4d11928d298c092d60184e75e67c7ddb9eaa8255000000000000000000000000000000000c535bc54df050c1ba8d858a346d3a644e03fe24873b7dc3e23518d44b06fcb3f52b4be6f11d3b66f0180a0a95dddf680000000000000000000000000000000015e279a2893c205dadc8e1cdebd9c85454cd4b5d7537f984c8f9d451f8316620279357e218fef87339f1728fa317fad5000000000000000000000000000000000316e343ba68c8a762f4c8f2a5c20f16abc4a7a8365556c1625df832219670619b6dc70727e9bd9a64ed491dc22cb9d57f1bc0e1ebff8f935330c35573f9fc3b900606da9cca9a36b425977af47c7ca60000000000000000000000000000000011dc72100cdf676e41f21015fa7c57897da8260609467ffd38c17868a4dcd2bd5d4d72e89cd0db2de83618222ea3b5cd0000000000000000000000000000000007e074f73287faf304f618478566b91c8e191b229ab40743081342e676be09c2523681cf7ca6f7a396f8589a4ae18a6d000000000000000000000000000000000ff753a16c16bf0dd1de9fa9316694214aea6f99b81f66b6bffd58837c00d7f5632ed5f8f4cdf32ec59c29241ed5e28b000000000000000000000000000000000851e26675814612bcfa639fe567633e1960578a0c8d2e6568418f633eebc109e6c8af97e77bb28ddd47c6bba8a7ba724429b85fae16200da6eb8f62e95e027c24aa6ee2a145f6ef225139f29aaca29c0000000000000000000000000000000009eb2f172db0fe9ac0332381d929fa200a97047f6e732570d23fe27f5ea3013fdc52fd0b5ee74a4387af44647b75f956000000000000000000000000000000001355f8e1cf45443855f2d62dba0fe45b2bfc4e0d06aa7aec7e4f7f9c4e25b33d9c46a01c224517bac9a1390a9806ed4f00000000000000000000000000000000179d47a62a5c847f47341b1ba58f2c3b073c5282f925f57efed1fc43db04185955075255e4e4f6c209757ddae59101dd000000000000000000000000000000000ef5f74d4b13754ceb3b468879f1a8befb8bbbdbb143eceabf2dc8e68fe6cc8e1ea4f3eca1b23a1175c9f5f5c4c20d3454a852baf21df9f4ec8d711a48e6ffb36be8c09c8c60eaa090876236b2eae37a0000000000000000000000000000000005b70a4d5b91b85971aef26b1521e12904b7ad224f25e31ec6ef59856cc702043a3eb975bf21dc8e4fc55171a3865bbd0000000000000000000000000000000007cf7c3e75a837545b53ca3e175a275dc6fe42fb88678aad45910d150ea9c6c94eba615429540348bb2ba8efacbb20e60000000000000000000000000000000002eacb469f5f8ee6c9f557a6ddcc854e955c5b9203b4ca5dd2e097d3e021479e13629863eb5ff17db46a17d3b0227f58000000000000000000000000000000000905e66f3a051b304b110a8682169fa749ba0de7763d3af7edc3e40f2d22ce7b6aa00cd06d2c82d74f3a9709d955f44e13814a3c6386b19f7b93c2c4e0eb1568e8bd3f0012a1ae1357b127c33808aa0400000000000000000000000000000000060ac9ce51426d360eff0d911d9f97a86494340bc5c5ba31ef146b55ad3633ec57a700f04b0cb9d4e91e13c2cc5e68a8000000000000000000000000000000000df205ed85e27c25ce27270384d7c3e58c4e0a9f214d74cddfbc7904eb3115e7bf204375df7558c3e65f7a81a942c5160000000000000000000000000000000007a220d42ca8906013479442d7204457b3ff37c9ee70d64f9f6858ba788b7fc13b71d33ad527c6fc673ad8940b0f01cc000000000000000000000000000000000ad481ef549de13b174d82fe88fa57b7e31ecd8999bcdb0c7a8735ab619a13b1e684b9473f0c59c734567cc08c76ecd6aba0fb0440b2461ef64af6ec5f15db381714fce1da6e03ca962cfc94bba26d74000000000000000000000000000000000366f604228e2dff2348a462c56e0043037d1b415ffaf155e72c559d185c6b0a0d125585d060f159a8cdad959af631f5000000000000000000000000000000000f69e829a0995914ac122299d4424b4e2e120fa4913939d2f18f9d1496e7255d00ff0829c20521ef47bb0dee06c28dab000000000000000000000000000000000a3efb4a376281a60f5246d8fc10bc23cbb9cb71037f8f57271a9b01f5e0340a562f9acf0e9a95b8c65ab7a5cd95520a0000000000000000000000000000000004a4ec86e2b04bcb35c7840d85cd1dfaa88e17ffb557ac591640ed8e563cac891793b92e349a7903c6c1f88d26a01c88c01749cac36dbbdba5662687fd1ea5391ef9d0bbd24e05bb5904a20fa6a1e11e000000000000000000000000000000000f5bcc27c243ef65dfbfc0de6d431706ab20d6cf6408ca989a2bc1c52b78ab63de6f58b70bfcaf6878a2746f249b6b160000000000000000000000000000000016a4c9e8ad0634e8afa8606a1a7bd1d8cc0815dfc6906b6e6446e0ceddba4a4a2df979d27cd07b8982a12550bc700fce00000000000000000000000000000000051f8d972362caf0a8a39045bb468112f2e73afa392079f8a4dc4c3a3cbb8dc224c21b6633a5ffbad08796ba2f8df44b000000000000000000000000000000001825aeffda04705ded9c702ba30d24b9fe8eb7cb106ee5d4e4ba029dcb57bc42c74e74e92ef8360cf130590b838645429680fbd6e6c7b1b14b000d3d18bf93242c74662ef108d711d85d8d442e415ffd", "Expected": "000000000000000000000000000000000d0ab61b29ddea1aee0ca4e81b5369f37cf45be383f64ba0b1a5a74b790d7264016ee671959444c94b8e6291c5158ea90000000000000000000000000000000000152bf3709c56b3add8e3396d17abcfebbcfeb230529ea8144d6a120a0a6aa83cb284e40ffb9fd9a96f8a2f7244212400000000000000000000000000000000041f516a7cb2a7137746d028b0739c79ffd8f7535f20ba3728ede32504fe058baaf684cc7677967aa46777818b1fb6630000000000000000000000000000000009f1035729c55cf6ee090983a54d8c0574bf96342901f471a2e5380f11f235a075b0e157c38c456b6eeeaa10b87d3afe", "Name": "matter_g2_multiexp_11", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000011ada4731ae7df493e405383603a8d79ef77f3fd14fe7b8bd9d2afe068998cb712e84927d5e6ea6e94d7f10270fd193b0000000000000000000000000000000008a14eddf88826dc3be792a0c1f7395efdf91454cec7e26c89f6beda37b194b706dbdde8745129e821b6f4b4ea6118490000000000000000000000000000000011c29513e8a826e6b3eefaa20ad841605d04b813cca282fe02dca0f588b9a579b2195b0b080cb6d12c1a7881008117f8000000000000000000000000000000000689c67d05ca379367fec99439e3806f827218ffaae995bf38dd8e2919fb2e751f426525cc2c6ead3b9aff2e377fc99e1ddff10527bb64de6ee2e3ab4959ebef9e7a6964b7482f9fae396b2b9b0cff9e000000000000000000000000000000000dd683a8e4ad54b1a95826a3000750c6e3cb250ab5d6add63c21b182d736b220d917d4e70044ec7101c3bf8ac620e1dd000000000000000000000000000000000f3e411cc6800b304fda1373ffa60c7718e20bf3e2e5f9784a81b47e398888b366e1f04f48f5aa070a661b5e2148d4fa000000000000000000000000000000000b0f8d0b695e000158ba80881a9256ed9dda5a7f53b550bf3b5c67ab160060fcbf5ce07fe38253ce037abedf4c6f08d1000000000000000000000000000000000bb92d407c457e9ea7b9851770d2743758e162dc9cdff2dd54b8271c046f642729cd2f10576013adac84a46d38623b932943fa2957d267019309f4fe5b6725379d893dcc270ff7f35b3811ad1d8d12b100000000000000000000000000000000023e880685aa69b3480bf2b7f2aed1181e094322da9e79c9263d50a49ba4fca713740bdb55886fc81c81a51045b35139000000000000000000000000000000001707049fb8b7ad278be2949b9eae2e28bde9de1d9eb964eae582541c2d7a8afc4c1489624a0919047a167028b8c77e3c00000000000000000000000000000000062dbb2bfce2f67c32b87ec2fa01ebf7deddfcbeda2fcf0ef094b1be77b7411f657e745350b6d2da16fc83a96f6f20e500000000000000000000000000000000062daeba038c7bc379f56ac371745b91fdfd5b4cbbe50d9619bf1d077f3cde966f81f9b851ebd206f2609a780b6dbd681551a3c2d0391fd8dedade892e8e2171e652d2a9b52f2288451c55f77fac788a000000000000000000000000000000000b553826dd9e2252c9da74c2bf1bf850df3f9c37439859f93df3fbceb7cca4fd949dcaa7fff31c9e06f41e51ae0b30bc00000000000000000000000000000000187810711ea5911a437a62e2ca483983bf2535ff9301a1cfe1b4d41902ef689f8d86f817a2a7c77128e4ce1ef6b037d60000000000000000000000000000000010170cf5f2ce08211cfc41bf54cfaa16584f833f7b97b2f6bc436eecc56ef44463690ea1f5c8c2a8f69d93a25206282b0000000000000000000000000000000001e627a68dbab6b0d05c85e49b966a769461ec38c38fd94992839bd0d46e06410fa7a48d418d65a8285f7852e8af4b318eb2fa94a5c97c28d95008dd1fe60137b34c2e763292d1b86993c02790b8c91f0000000000000000000000000000000011ebe2edc3de58a57aa9ab4d6626d7b93235ed24efc3d75c1ecae376c00beffc5e89ec509d243f693d327f7a4551921f00000000000000000000000000000000088ca2fe0651e4d8f3958454640a58ea1cdd804bfd2700bb1bb8e26ac50f2d7fc8c292f94b0bccef5735c4548025735400000000000000000000000000000000154936de8932279cd39ae803a5d814864953f647a5334bad958222de765250e4bc847e02979689dc9cfe1993486b5750000000000000000000000000000000000c7ce07c9746c6d72dae11e243acbe12dc23423f870f3130b244eef34524d547fe0b2c4b704ecb6b2e6c32f5675ce67ff72ae1def6c988f9242bff0e683b8d2a5c1aecfd6ebb9442131ec5b5b825d0f600000000000000000000000000000000031ea855125d75321a2a86a93e72fb3869dede7531dbcc1cb07ea2a352f3c6cd913275d0d43ccc370f4539f668f205f50000000000000000000000000000000006c4cadb11361f164f5899c6b57c0c6d8af365d902f4575c9d2d14dfd880501ce9ce218544b44bf07f0f04ed68e8f315000000000000000000000000000000000131332638026fd25b1a849c984f9dedd71e64fb52a61968666ba80238673077ac00b9e09817426ceac8c308f475303c000000000000000000000000000000000c7634af796e7aea4d4d83c9972fc822dad951d2473210ad82706ae0aa023ea85c1c467bdda68881094ad2a4f54cb33f331451748146f0564ab0d91b09db87e8a6ba8b14f8329bc041911616195f9fc0000000000000000000000000000000000fcdbf0083065e13deee2020bb6e47cb9e482df3768ce569f1f7c0e1c6083c97d9f08444e67857c2dce40e4a7b8d50cf00000000000000000000000000000000010f246e8ffccc2e752049f638617e122773a6f10220cdcc0603d24f1a94ca7c100f8ee2d9bc7c0a931fa0385eee456f000000000000000000000000000000000f8b68941df75cac3d4b6b3bee43fb357c8f4e56309d8509fdc62620a085d7ee58f52c7dff28525a449cabfd3b7ab3dc00000000000000000000000000000000019f934ef0c7c40786b073d38cb3e4623544cad59cb63440d4a6e76944d491f6b982e3a5e84124996634687d4618418316d298bf591bd927aee24a37c5ba508c3bc121f5150fcd1a70c1f27a79da7d73000000000000000000000000000000000c0208c1f3653fb3a5e2acbbb42f2598b22db1a714d616ee6bb501c3338e80db34d517c7086d43ddc77e0134dc5a4f290000000000000000000000000000000000a528245342e44e36f8e02e7259749e63ecfb38cb0609075e871701f2b3bb0765277b78d28cc3ecb7aa8c9e3b27eaf10000000000000000000000000000000010446583a905864064400f9ef168a122d179d46a058525c9be8a65a5d2ac5e967d51185d4964f81a5571123717210d050000000000000000000000000000000017da91a1d0358271b11a0aa524341ba1ee8c31bed15efc4c9183d60c6e1842ec4383070a09914fda991a63d55efa8f2156be810c3fa86e35bc935fc2b27971c9c41d03c8ab7b6c8869db90b6e0986ef400000000000000000000000000000000176c64efbfc9958b9c8e71b55e9fdf525d4e5a0265ff01ba95bcd5c6093bd063726f8e277d00b138fa4d8c8f80afc4e200000000000000000000000000000000183eaa6c3c605828852ab5e8a9432bcb87411dd18d574cc2491f1a280e7a267ff9ccc80b06c22e95107a72f22ba2fafc0000000000000000000000000000000013319d3a8564ffcd6fc7accdded740127ef205e8299b390d21e96b2609cbb463569c878f36191d43927868b06dcb912b0000000000000000000000000000000000fbde0ad8e89f5458007ef6ba0f01d0aba04217e06745a5571eedaf544443150f59117b56937f533b4974e5d57c41cbaea4445926775a6baffb4dbeb249dfe3b3e0c29f2a579927f540d8f6451553ef000000000000000000000000000000000c044a5116e175ca1d1ae59d400de24e4f47132251b4b3dccdf458623c36b4d3d83abc644a2247ac4d0e3f195d12e7b000000000000000000000000000000000048dff6bf65f158b19b992167ff8adb5c858a154bd68bf0c84e41351bf47a8f870cc735d1be5d9afc62bbcda2fcdb1c20000000000000000000000000000000008c5539746d2610eea22e79b3fe5b33a47fd3bf9991d34c6f9d824a46458480b735c0051d7b4e4909fdb1f2a1a4e4b3a000000000000000000000000000000001936558ac97acd903a29d07c4aea399227ea13fd6dea820813c5519412c157e1a477fcfbab60a787c6b3834eac4522889ee0e58d08779add74b68dd75e82df172b719cb5a772b0bbb34d3401b9f212ea0000000000000000000000000000000017d978d60fc89b0429c1a6424231fe9274cedad5d78d9c4ac5aa2dd5e70e8238a0bb1904bb4b6ee5de5cd1ac514c62a8000000000000000000000000000000000d4ce85a95dbc40f405f4e7ebf9121cdcd22766737c39618ad0fb3e10a6e53be1faceaa96073b2a877ab808483ec9b6f0000000000000000000000000000000016c61599ae4da787fa6db233fc28f5c56f7133d403901800ab5fa19d058fb27ecb34ca2e56ffa7628ed004c9e62092700000000000000000000000000000000001e64e4adfdafbb423b1b9f8973738c690713911f68f658d234e57dc35b9554e0f7ba345dd7920b429a12b9c74775222773d07cb9d20744a2c3ac88082a8d6606acdc892666753793a2b8bb81116cc6d000000000000000000000000000000000908ebe27a1bdf0b9e56325c00ea3814527005793ea97eafec541c01cf2d7c909d2521a5fd475589a31e297cecfd5e7000000000000000000000000000000000017e3c40c60cd369ce5a90f6c4aff14896cf73fe06432e71940bd8086e36c2353d6bf9dd414bcf92889887e2d49fbbf5000000000000000000000000000000000ded856e5b2b139487b3816351584f06582a933af2bd4573a89aab0a41af01ec1cb928a7d8035228302032d399bc7caa000000000000000000000000000000000833b77c5d5c98ad95a144c0f167fd3bd62b03f4ad721561ed1d84c7137dcb19521f781bdd3ddc22afdd52c75146e101f6bb1445e9146b117bd0c95b009fba670a5391874dd314cefc884bdb0a4eba680000000000000000000000000000000005c6f28c5ebd981fff3aacd70eb18f134bffdc8507d1a3aa153e5787b68fba7f4a94c43045d2676aaa992754783ae87800000000000000000000000000000000148ff39e8062bd488accfead42a684f781c4ee579af6204b5b8dabad9022b029139b1f3670fc270710ced9a53253850c000000000000000000000000000000000ff50eca1a92f123e2534b3289f37ffd5d4e05f7678017ac20e35c2deca054dbe376c5529cddb5e58973f5c60914f251000000000000000000000000000000000b58298ba9496fe32891f4c1cff25395ac5a447205cedaadda4dcb929260ee55781916ef5e4e39793fa2831142111226d4158de4e23d793ba77c24a70f0ad07314927fff34361b0d74b25e8922512d7a00000000000000000000000000000000184d156f881f7d10d2f196b7599db85ee826c9c95383978ed68918756f642a2ed1c951503251b0778dcc39598d79fc8a000000000000000000000000000000000952168761380e8fc90a4966e94b8d2b88a784f6e607c99d9af1aa902506f59d6879153339fdb7b8acda178b9bce4ef90000000000000000000000000000000009997621d4e17c76b7798ef2f99d3c0a7519cce278cf718789cd8227b2b1459af7fbbc93078aa0aa361167b1d1c9363600000000000000000000000000000000005369eb3a77d2e26f9907a2d930f39dbb87634346cf10525733aac8ea10eb918d4043d2a05ff8e80b9c69a670e17f15c629ef41d5a2ce49fd81930406f19e760a47074e159ce372dd67e7ea46ad706b0000000000000000000000000000000019bdb390c66f7d28cfaa91bcb34c5c55bf93a9f2345ea396f18ed33ff2221a39cf68c5514fe091f7882e82470efb1fee0000000000000000000000000000000002d0b48d2c0377b0dffca247b7625f9901f86e2161626b4154bc25d6c643a48e9addd260298bedaa80e42caa5b9fc5b10000000000000000000000000000000018a2b0a760652e546eeb42e857ca48f59741eed91822c17692e9c41358b213c82537c9c6898713a13a241cca627a7dc400000000000000000000000000000000079c02f41fca45a56d9d8e305141b4fe8f98d102197e7864065d342e6b07f65b62632e0c12660f37de4d698c0df3d0f3c718651715ab786b4855092ed21be41b499b7824d0bcf68ad31b31ee4cb730d5000000000000000000000000000000000c0448fd4ebe9b5615653336fe0a618fa281b0fd7d72a8f956a5fde84f7d356b6be853bf823436bc0b61a603636db9ef000000000000000000000000000000000dc4f2b4d810c4290e263098576cac393fce137cc901b3be23507cecbda7d86d18022cf8e1a7df4b1298520ae5c9314c000000000000000000000000000000000a39413967b558dd8a6b2bed972687d984fb9abd0662a266680f8c90f1897e2aca1ba37b41d7d3fd47406bc5fa3c5b7f0000000000000000000000000000000000550fcbe5bb75afdd8d5f387798a8e83a8dbb6da4918c24eb2e5d2d8acd3512f6649a4ac9c8d3e6794e6f4f8a87687bc685a2872c4980518fe60c61e2276ef53c007166f7eceb355b4cd533f42c00b7", "Expected": "000000000000000000000000000000001654e242002aafa89c6fdb9e8fe2c197ad2f8aad11868568dd39d68ca35919f94308a80303655bc83fd130de6f9723a900000000000000000000000000000000062b5a064840a5a28b4991ae949f9508586447ad5e8c463593503c0e5857c5233b7ce7ac03e555c2675f2e320e8cee6a0000000000000000000000000000000017d65fbd7caa69629f66be8b201f53baee5ef2957a3c04fe384ae82959105342b52483eba6bcc1442763c677f515f6cf0000000000000000000000000000000002ef8f8ed1114cc9d299e59003c61d62edf8971d65b1b621779bd7b270c4123eb629f56dfa2e2723501588a0caf1847c", "Name": "matter_g2_multiexp_12", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001392409b92282bccbdaa0268e1173e60911754eb3cdc28a52e93f4d82ec99026f314dfdc59b39a4f988100f9c30cbd1e0000000000000000000000000000000016b3c555d5c196551ba715c6c334a668bcae80f5a17f038038d35dce34843f79968a90e2102f0faa22a93d3240b58d490000000000000000000000000000000002daf83727fdf45dcc1a15adf47de3f8a1724cf4d34116f52106a9e6b22dc24a288e89b940cc57e5a6bb87ee70f680a5000000000000000000000000000000000446009fa3555e4a056a820efa7da52117c15eb105af57985d8e9b33b0b22fde6aef9bad30480c2b8c1246519795f61fc067ecd54e9ef59996493f846ecca63bbd7ec28da586f0b8d41bfdc6d97a35cb00000000000000000000000000000000000372ead514d53007690843484c966361661816e0d3949b868176d7a9bea42064f49113a74f2572a6dca7afa0642fa5000000000000000000000000000000001199d3ea66fad87074e62a0b77d3fb962db17dd948f30c38f5beb0e44e1cd11d9172b878128e9a64a08394f13cd786f60000000000000000000000000000000018b7db157bb326ee2f72d4df2b1e0ddf0a90401ccfca1d4ffd6379c62acf5d6e4176a23ded2f81653038d56d848b4fbb000000000000000000000000000000000a932cc9740812c8bde33b68d94220690e0f55618b7e51d3e3fc29d0cb9a8d42b8f8e1efbba5984c3c1007c9a80fae408b5112baca5e0f2bfb885c5041189612918d203a117d886bcb3b27df7e64d17d0000000000000000000000000000000015798d10386f6d24caed3859875be5fb1a43ac753f725f28da6b3583bd9c0e404d36265c2305d7d194e2ad84bfd2bafe000000000000000000000000000000000ef2ea5f3b6e03e3c9693d6db60019f2efa4ea586bdb7623f03bd035c603e8996ef2ea7cf745aa31f60679ca04f93875000000000000000000000000000000001792a66785a3087a80c4b8652c1e4db8f602cf75c1a6955f480a977f92ea262965dad84061f6045177c831dc4a3bf8400000000000000000000000000000000006ea3862318974d6347639ec0d70afe748f4edf32b9e437fd98f38eaf72168a153cac180c2d67bac8a358e3a4d57a2b32db7ad39ec8129e9e9206bd46cec6a8ad3362ade1beaa97befe148f6c67a9c2b00000000000000000000000000000000000974da7500df70d888d5876e7c61bfffcdf830b49bdd40edf65a2ff476e9add35eaf9451a2166e9781805192ffd7ac000000000000000000000000000000000cb2e7152b5b40758b18caea356dd8e095f400282881207c4b79d10d741756e526be261b98b726d5cefb668dcf73a0a00000000000000000000000000000000014aeebb995d464f4d77bbb72f15d9078936b5ab68eb8022bdd97d050576dbe46e6010eb72250c8ccf2a59138efb38f9d000000000000000000000000000000000cf7162768e8eb50e21d3c0a076c7bac4920c70f334336037fb40e57e0efa91eb025356ac3f0988a6b127408a02eb53fe2400a11d9a67041824b97a96f0ea9da8848e7990373655d76e8bd4eb84df5dc000000000000000000000000000000000b1d6214796b4775c2b50e634a549ed104e6ebc0e032967b17eece6cf88c93aac23059f263faf3c3f38463270320135c0000000000000000000000000000000013ffa3894a36226664ff53ba9256d39c6312303f5cbda6847b4f68c56134b7d731e74bd711014fe374f909a081a7d02a000000000000000000000000000000000ae4590cdcb1367392635d0f8dc6b9557abd16290fd1abca6da354646d8585a7c9432978dc616e5fc38cd71d55f139c200000000000000000000000000000000124a7b5574ef52359b4beabcc56d3286db8c8fe4ca4718f75da28d89a8a95efb878c18b48360dbcb6fb50a9f18f0d559aa2d17c409ade92566ddb3913806723d41067540a36a9c283bdacb273c5b258a00000000000000000000000000000000148ab0e847ecac963f0156da025dbc52e765cd8827fd55ba2969da6775649529226ab13ab8537ad0b89e8f1ebc8648ea000000000000000000000000000000001395b1adb6a56b91c3621a4ac5886a7b13ec00f1c74d5317eb74a766eae655e09e269ec48cdf740abc38f4d6fe52dd0f000000000000000000000000000000000f70f77f07ef2909033665bc05cfeea7df6ed55f2f0b1b87d9f247b6c07c7e22f516840efe68005c3953a2702573a9b400000000000000000000000000000000166a334a711416cab180cc498308487b281711f2d1b832c410ebb4c591af54b154fc8c8d7ac9a49a241f7a3840acbc75e5e3d21862b64e09a0893ece646de60cd66aa483662125ffabc46cc52f1cdefa0000000000000000000000000000000008c19bcbdc2ef26a30dd88f3e35dc7fbb3c81c0224cbcd6b12c90883f3973bd7089636f997e5f213fbdcb79514c551c600000000000000000000000000000000058620cba8ed5b738167e809cf71392aadfe8f384a4cf397d10f674cfa914e9e02bb1518e42f16806214fec52d880f6100000000000000000000000000000000048ac1120d26e4173bb33a58c0ce86329cdbe9df6a6f268c8d5ee4f1d6110f9d81cd50c46256198a2462d50be3e781270000000000000000000000000000000010af13ba791d554720f5075d46d03b55c0c1dccd679cef5a7d439ae868d3ff2780cc3ab151feb72b8b92905a205e630449510ab1b7850badf58cacad67fe47135f6524f0d160f3013e8ff1c881e469e40000000000000000000000000000000005c30a126c94b87c54270d0f23a486c3b36a8b491bbd805ae0d5f2bea818a87ff5aaed2d5e6317b786ab5a23f1cb48da000000000000000000000000000000000eb2d4663eca7f8433f10e84984781a57fffcb8f9535518721521ddfc7a4958778915ea3c57bef399a453b8ebc10befb00000000000000000000000000000000161947f57d97a858e5b3e918dbb22dbf28629e51e81335a9bf105d0fd660ef80087c8d69d8db9841cc69fbb5e7f81487000000000000000000000000000000000c52b6a559928fe4ad984a0569c081f3f71eed3d5b0d3c14d1a23afa45594e0fbd94143348390bee178720fc603145ab713aa69664a8c721cefa7d6dd3fe9f92432b4d350621d5297805fcabb21ff8c600000000000000000000000000000000071aa47d392e1a7787b37c52acedbb4632d5549fc11b79919bab7d22f1bbf1c3a239df622b8824b07f6e35e627283b8500000000000000000000000000000000198e72e05388021919dfc1b2a58ca72bf7655cc6c9b62abe3b45cc782ccfd4a2334780e451b8a6b7c311887036813fe4000000000000000000000000000000000e20cbedbafd96c42612e146debae48c7fab4846b20ad0848c4c42c6aa0603e72f94dfc938ed9e3a9886d221ccbdef70000000000000000000000000000000000c861d1878e63e313e672bebdadd3fdbb691cff5fecbc24da895febce2eef0a3c774a8a9d751498e4fc8e2b71daeb40dc040d8bf0a787346560fa3b100b2dd9adb3f7ee716b8103abdd9609363345ae40000000000000000000000000000000005f7cd2205fa2e17fb9896efe3fbe110e1fa59db1ae5f8d6b5f4510abb4da867933d4fe3caaadc4457dcbb35f1b9c62b00000000000000000000000000000000126f2ef6022a7211fa865c1dbdd5b84d96cddff424b06647acc462408f2d31f34ce898d76e1e124db7c39e08dab0bff6000000000000000000000000000000000987f916ad6f718695f3c40703c59ca93eba38931b45d7c33c64c9f75556f075b744dfff8a5f21489b3db6c3846ba09e0000000000000000000000000000000013011b8c72f3853738e22957f742b05ec428ab0da28901800f787b7c3678449acd0359fee93c40c69623aa4acfc0a81017b811aeac4fb7d91abc655f8a4392176f9060346073c957ef903e25d10935a00000000000000000000000000000000014b88c0586fa18333ab11a79acab8e12c6257f82a4ed16d929768a60a3a5d780a22101c32ea9b0099aa2816f18a0351a000000000000000000000000000000000de0fde69efd2cea7ae08d6d2443883002e0b4e11da253222429f6ecc67ba8d282eee84d7f46e0ad00b039a2c2ad226f000000000000000000000000000000000aedfa0a5a8b7577dcc1094469233f8b07e6fc32af26841894d498d70c6a9a046ad636086def948d21e39833c5b6c5a70000000000000000000000000000000010ec6aa0efba4995582585bb67f997f60741648156324696312d17656baf6aeb3e2db0d1a272912fab2fe81d139e971cbd1f096026159218836a46b9801a4f0c43189324d20220aca777b826eaf2575200000000000000000000000000000000004a847c06abc8ae7ce6e6ff0ab856889dd3e9697a75e3cd4d2af9e06d4c2fc48c0562289348ff52f4d9855ad03d83aa00000000000000000000000000000000075673bc79bafa9a64de6bb0e9dd9fa29cdc9c82e90a7348593eec673cbbf22b1eca436ecf767d45852ed888a3f23949000000000000000000000000000000000f3f8543d1e667404b4564dddba4d7c11d13881fcd8ad774c8eab8fc599f55147c353cd6e163cd7b9d5da55ebc13c2e800000000000000000000000000000000069edec7e7d26962d88a89dfad213daa36046bb2851e5d67adbaa227220f29f83ea67cd3747e6724f148dac28308604cf221dedfc21098ff9a9507e493d0fdb1efa6029fcdab23a016515078c76f7627000000000000000000000000000000000c945e83822896974116663d3e2769f3df5a70d55b8392c1f6966e330951f3cc5688742d4588648a6988b928b9fe00100000000000000000000000000000000003e94b7ff7c71d633ce69bb44d0ba1bfc7c27a5ee618e703aef81a45ad61771a2fa8e3dadddf7c8038f1f65ad7513801000000000000000000000000000000001727d768c1b51066d2af87a9da3e24ea2a75b0f75b8ece70727f9f54ab77d841e7ae01c9c0760f4186d02a28d6f8ddfb0000000000000000000000000000000000a273f9395cd49b646e90fd2526d5c93fd46c7366b715546529c9edf5cb3d274c9947c21a03add3e7b20612636a6745ba5b30d1397bf28100f108b84e05107ddd6cae2e82f1973ce187e8c3a7d02f3e000000000000000000000000000000000c996c16a16879bd3194ac366bbd11b5863123ce6fdabeafe56407600e5d49c92ba68ac1256e1515dc9256de14ac26de0000000000000000000000000000000018c584d8a4f14900b2fee70b50b700199ec2372b731dd1380f42ec7fd3d01f0c9a007554059b85946c1c4f4e2fc504ad00000000000000000000000000000000073d6c7d671762e5398e4c9d57f6b68c3d97dfe0d01783f124256fac236f03b774db58b79cb4d5558e1ebf18bb9e19680000000000000000000000000000000008eb2b95e17fdda916b08ff2819cecd2eb031f41c8299b308339b7d9836382ced75e8eb1514a70356882d3a43227a9bc19aadc83d1db9140af303c0492d2b9bb9e2b53ddb62cd2132bdf8ef62aaed683000000000000000000000000000000001029fc28cd502caf3ea3619f6fd04bf457e6a452b5cad680ec2d4f8222a5ac2daa92b880bda76016973494e605ab28c60000000000000000000000000000000002c672c7571b5d8e99de6e47e0a2eb71c6d9bd12baf2b083e6f88598b32c4644d1486aef582c5936e622058bb141db1700000000000000000000000000000000033cda383a77d5b3adbb0809e834993c56717f81f8c66ad2d97f2b298d5a46f7b29a74d35da09271b7053a05af096393000000000000000000000000000000000132da041c6e3e1d68bbd2223f8531eabde8e180b36b2cd0ed4fca248f255cf3eeccdc5f61e1c581ce54edcfb2b73e0787eb6fc40b00246910626ab66bfbac96ea09242d1d70496466e4d681942050700000000000000000000000000000000009721f22bc49f68d703a4dfccc3bae791caaf0d73892bafa6e9da465ddaf0fb1a069ffdd55306acff2407da64c1c5a0200000000000000000000000000000000056c0a4804a19aeaf1b4fe52064e43de8e5d41a8d77de054e2cfdff078eaf468d123d7317818d1bad1bf3469c0070b680000000000000000000000000000000007f1f318aed043d9ad7bdd53eb6a8c3167240fca75925b04795210700463c93a66ed64851195df1bafbbe4227d7db5ff0000000000000000000000000000000007b8945e258311e7672e842b91b540fec9ef4a79296956a5cba3749c0ad95ed83d7b0b48384ffb3188459e997b86695d3bb5926f36808c0024ea7388998b4cc8c6c48d32917f6456b39d514143c6eded", "Expected": "00000000000000000000000000000000086a1ab4c19c27f70aa422e8292752c50b365d6fe3eba21e8f2ed51f283df0446020834ad27c18b5c7285d1156049bef0000000000000000000000000000000007288f40fde69bd350ce1f4d0f68e645f42de319cc032250b76fe4fa305341e244e5b2366751d5311105e3ccd30e701c0000000000000000000000000000000011d0c487c4eceaeac009b694931f8eafaf8eecd6028f14a4de33d2940bbb747025eecd509564721b50b7186910f81949000000000000000000000000000000000366f0c901fb859b4bae006fbcc9ec7e456eedc7366c899f68090fbd457c37b03ab99ae982872c7888b65c1a056c134c", "Name": "matter_g2_multiexp_13", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000072f3f03bb09ca30239dd8302b05e0d9dc4e43ea33e865864a82578c35eafcf6868bf0cd9431b92b76f00990b780ffa400000000000000000000000000000000170b76cfb7944ea5ea055aeedaface3e8f0fa4d0ff657fb9d5311f3af6e736da84a5e2bef5188e20f76fb42591267fd9000000000000000000000000000000000d85300009165a8da9cb8e590f7f8d372e4264df150b1551185c80e49dbedaaf872ef69c5763fc3713d0c087c89f21050000000000000000000000000000000003ba59b682174ee61630df95c8e2b1c48ffc8f7f8508c21f3bbe8f7bb3266521fcc06c8f90fe5126d872707872db6d59f44b0204792359895b448bfe6ffaedc14d54a6d72be7a49718c0a933807a399d0000000000000000000000000000000004e8f16480c2f080a13b9f2b66e6480132d76c4ef76e8bac995a8e33280073ed5610865260e154b32f75f527d89620b3000000000000000000000000000000000f9ca48d732a8055d22fbebf3d2bc1e1c9c815c184f594ad2337731709317ea6a205478ba05ee9271d35a19dcad4db5b00000000000000000000000000000000078013b9290284e7ad528a1bb9a2a64b3ef43964c7226ddff8ca16ab17b4a2e8a2a7d921ba924a718587954f586a954800000000000000000000000000000000004aa76bb1122116cc0c04d65265d8652f08b411632a732a9e66d7932801b77c4ad398d582e446968f7f4966e9167894de25977e7426cd5652559626ff8b195ab7ec679de987a6a22a6a0e366759dea000000000000000000000000000000000145de5d101498bfc7c57830eea2931663ca1165ec85b77654c866b04ba6a28bfe710c1aac9876a68cc6ca119708eaf0500000000000000000000000000000000096f9df9d5723e8379f2d09c76a3fd059be47d2c2ed8905d333b2464f72153c5f50b6345980626358839ac691c26c967000000000000000000000000000000001788ffa765c19758da6eb6c38e793190c64d4a7b116576f6827fc090b0f65304988f6a95cf4397f82b7691fc43960ee8000000000000000000000000000000000746e040d7aafdb06a31ba3d7b590dd28f0678badc261a93dc7bd9a605047ec67ba86b2b6dd72637a449872674d6b5982e7ae497b44f531fe203a599622954804c06d5348dc17eb1537e750006584b21000000000000000000000000000000000d8f3cfe1cbd2629f3899313cff16ca3d8f964ec1cc0508341936a7b3b49240db1116b2c3de28f9bc45cdfacdb5fd98c000000000000000000000000000000000fa642ed31293e44211b34bb28bd5b389ae6d0510cdab46c89756f31795506fccbdacafdff21b0127e80557e5ba9afdd000000000000000000000000000000000715a8951cb358b0d8cc63377799a9a61ecc85dac795d726fe60e429d492c9ca843be2a2633c17f830f199335e5d7741000000000000000000000000000000000b88a23fdac7d35fc135b45d7565854bf010a75f072b32c57ca4d0979c111aadd84c71df6792dbdc8e975ecd46a15df2e073adfb5ab96730c53015a4ab6210a35a37b2331ff5123e00798c33e040a913000000000000000000000000000000001171be5820b5a19c045abea399f2b8ab9905d2aa367c6c8c0f84eac132d26150b759a9c029414f1c8f7e4880214446c200000000000000000000000000000000147f0877321f2709183f0b617a7c5ce898db508a3ced4148cc9f7af011fe8040e90885ce817aa956d9f5d19dd968f6220000000000000000000000000000000000acb005c11481b214a17e3cca02c2af266e4c8cd928e3c4e221d866e9f296a2e913bf34c4e051c7503a5e4e7cd7449900000000000000000000000000000000125f45d0af1c010cdf8438bff0f406007853e566fa646df40a581f65496197755eeebaf4f0f77e1e936f399dc4c6c020e6e752d40d411f1ee6e67f48109c9a059226b446601047a2189ab815a3fe13c40000000000000000000000000000000019cce3f872af5cc515ac4cd7825a5318ead5b464d50349909a70b415a8950206974ee0d4203f208d8e6d14690158f5720000000000000000000000000000000002e08e8accede11afe3e2d085f35c08d7d414c26a9caa992d5a090a43c9b0c0cc1471f3693f9d342a973da65189c888b0000000000000000000000000000000008a984ad2ca60c492cff2e95d541d71e33b269b10d3df107c0513dad5af511c51806068da6cc7226df1cf5e5a2fbe707000000000000000000000000000000000fcd3ad75bb0a5c046cf83be3d973bb3685bc717d7b8262fb8205935db6e632472496907f7c965fc6b52042ce69999f9e657fda33cf4ed1aa89dbc19d58fbe3043acb5795dfb8c0cb97620f16f8f24350000000000000000000000000000000014ccaf7594d8ff6157f9439ba63480d3d07f44e62a86caaea510d0ec456cd8c6c4b42cf9e38713213eb4942ed45df2ca0000000000000000000000000000000015c2061c532cda006addd2fd6ebbae458197d55fb336f75ca7decc05dc6d421a65495b71ed11874aaf24a0ec13a7c65000000000000000000000000000000000101f953aed7f23b5b6208032f05b818e0147079b7764aa3134dd9e4a316bbef0309ac378ca3cff3bdeab9ca56cb78e60000000000000000000000000000000000c76a2bc721a4d3ead95af79ec24be9b7624bc80d7debc07e388e52ec621082b9a69f48d157b168af4aa73629697f784c73458e18d6f832f362dec7c49140e6523ead045131a1b719b0c836c1ef13a79000000000000000000000000000000000761832bb5b530b80c668234ab5996bdc225c0c696ea07dcc61c330320404827ada9d58d658e230fcb39a96b339b830e0000000000000000000000000000000001198b85418421d96ebfbf436193b411a3a89c206d006291bd23254ed5fe12ccdad15725a34d962005c0ae60e202bb86000000000000000000000000000000000c1d7ab83b1d2ad57a407e248492773a357c06b83c16c6ce1490e84bc4a3cbae395f160181d2bcca3edc34b764754ab0000000000000000000000000000000000f1e9f0cf96d7671763739b6c37fd442f0e816c49d9c8e001d322397e9d6741dbf8769ef9eb83d08ab024294e279a02838cb0a2b191f538b30187dc730a8c665bbfce8186883500baaa6c3242a0d147400000000000000000000000000000000063049bc3282934e29f3bb3dee432bdad6193a5d2247270e88887cac565f4b986e1b3b2af5387cfca64f0d50bc0ee1640000000000000000000000000000000019f0f05fc7f8bf2f0b8ed375690b53b6dafd0a07c49fa55d36e040798334700a3aafc4995bb90de9c4dc0e077ee18b58000000000000000000000000000000000fbe702d148609dc8feb3ac11c5eac8e32a2f7221aa135cc33a585e9f4c97afa1658d8962fd96e26e0c4c1d5108229ef00000000000000000000000000000000061fe418d3b440e84728091a4996119b515118900f54a6f2da2ad5592f48ebc17bba50b59ecf435de3cb892a123ae9d18a27de64d41d13ab67c1f7b1a7390ab4dbba7d219dfeb31255f9401d5b3c62f80000000000000000000000000000000011e8ecf1e341f0146c59a79a8428bb01d2399d3f87d90d057f63e6cb9837432154d17975f70df175a016735caf85120a0000000000000000000000000000000002a5bd53e4f4c5b9682e1af1f7e09dd305e7342d1688f62885b5e59f173a9fc731cec481559ad693030004a5fbd90a9d000000000000000000000000000000000f9601f95e12bf05c35deb204558d44a60fd630c05f4060b7bd9ff943946e8eab507422afe00a3e7706b8ed013f712c20000000000000000000000000000000003bf6fecc0c7414a69c2b48e2c16e88d988ea8ae9d8b59017ecb89394732a20e4321cb5e4fb071aec7d2736220a4553780030798960729d63db70b8bc3c0030e80d9b8ae766e3330128557e6c34442f6000000000000000000000000000000000549f6464b657eac28f838c6a8bcfcb7a189d6b3b9712e19c1a23503ac209da5f2ad4df83acd505b0231f00eb88515c70000000000000000000000000000000001bf4a46dfdd70542e9d8cd6d6215174cba28f9adbff31c02482ca38205cb4afa2f7fd65ecf57b39e4ee5cee320e33800000000000000000000000000000000012d04a693d565f96566b7c313c47d272fef0ecc828493b0841d58f6bf690a77cb72824a656442e288460ecca7cf05504000000000000000000000000000000000b33eefd5df8b098e6505cbe655a483ab5c6e417a4ed55420beab95e8614c8538dca9296a7848d6aa0495a173df6d0b80d32b6969af54dd345f42320ea96def3c6f4dfd4e22a82686b7a3c57a0df5250000000000000000000000000000000000fdd9702ed88aa857254c3ba50b484bfc324e583659c57055e4b09eb1662af2f70b547a1eec139193a0d3c75b565d3b200000000000000000000000000000000193df0fbc5f24065008b5e98c4c4bf9f1e743a6ee60c3700ae4a9108639e540384eaf1f9d7a60b8b6a5d79e1f34949f50000000000000000000000000000000001022f8a254d17e448cadfad35b7a54dd2fb319c8f9ba219874bd8280a5077301ff4332d731a75646cd93bbf31331154000000000000000000000000000000000ca1eb350844ddd0a65a4ad56e1a96821de2c6633a4a45be976577c223e367853e2b1ecf2cc40b8595ba5591ae8e40f3969848f1b8b36bd28967b762168edb451322e2f0c4b99b7f9112c9a66093fb3f0000000000000000000000000000000001f9cda056a0f8803be581634562e975223b5311f4752b189cb6bd6df1ca5e3824bbd2889b9b93da59e4f08d482734240000000000000000000000000000000009f43c25de25c5d76ee1a03691aa434de6a063bb3a1133b045797a279346fc938dd2636abf0c4bbcb528c9c28d3105c40000000000000000000000000000000012afc29245da8bcd3c0d96c4ee61617cd9ecf42a47c2ee822003af26aeb4e4de8e432ffb6b2d8241090b814401a8676100000000000000000000000000000000053edfd98742dc70d510f1836fcffa6a3ba9ffd4904c7f5559b48e49dd21071401362d0b39bc0d786b7ee2e84a76af0d957ee08a513c5e22bbec04722575a9b4f3a1343db0ae5beef4e66fbbe1ac90440000000000000000000000000000000001dc3f016ea1a74ae50c21c1955ca1eb4a911026a1e72b316c7bbdc708caef63f0c1efecbecce8901d65bbfcaae429da0000000000000000000000000000000016ce9301888808323c9baf6402d7073fb85ebcd389334cc69d7947e345748ee44b2d6aab3ef818beb21b54a19ae4f5b5000000000000000000000000000000000c49817753eb6459cdb4bc737d3710b5f044bc544c8d92c8ef138ec9d83889664267e1a5691f4bc3fa235ecca2a973a500000000000000000000000000000000074a8450e35f1da18e6de05960e21b7059ece8972c36f000bba9e24488730a44ce3ce200c437e06703addb3b442a790a8e0cf0f590f77d13819001916d2c58a654d0b9d3c47c842f2d649cb2570dc0d5000000000000000000000000000000000bc1f2e9af093ae8235c93af098e692e697ea0ab4c8f53019a6e950f7072b56d5eef6b3237710f1dd1cd1970668d06d0000000000000000000000000000000000d9a63f7a13ff9755c6a3832e3c4c852919514523092367fab7886cac317e564d57fb4042ef40e696edce868e697c45700000000000000000000000000000000129a30657466460db13575dca367105c27d631eead330319b084adfac591f5b3b94988925d778e6d4645d1d2816baad00000000000000000000000000000000005ad64d6e761a9a301589547929f4952ccbfead278cbf6658255a075966340f185d5f356679fb02ff2197468ed7de19a71a8c2a479dec43d644ec4113142e666bcefd6d729d4faccbc147effa836ddab00000000000000000000000000000000077d1e5b35c224e2cdc849c02e800c0b80d1c19f3d74d9eec34c40f56bbdb9e2b5d2ef274991dca843755f91a50826fd0000000000000000000000000000000014f3b653e0df0c608b75dee3496a7af04a828e6fc5604f16ed49c39686ec757e96adb0a667853006a8331c3d63ae4ec2000000000000000000000000000000000aae011375b337940f2a53d9091d3581e8197e79251b19c7fba01de987721a9d6fa694b7978f0abf877f46ec26147c98000000000000000000000000000000000aaffbd468a2eb86a3cff59e2e9b7ab88286d2bdd19c2e789b1a68810f0cdc76171a2661ab54e81b17643ff0275eafd72d2d59a7f138327a20263d6338d2a92fa5a2f741daefe9aa81d06f20a6fe3641", "Expected": "0000000000000000000000000000000010a2434fd3150f6b9b491d3a51226bdd457504077ef2ed5a11ceaa8284900d1b84039a34d5239a863809369bf20a704c0000000000000000000000000000000007934f34fd50a98225fe6578d3f34ae5e5ef5e104bb9cb398b2ca4f09048ec39cf52e7fdbac48d45212e9e4c1dcc6e120000000000000000000000000000000013ee70f1b52cb8b07ad957a7565b3e3c56306392cf7b5aa29047b23e5b41fb3239ac3611bcb16ba7c7ffc4213e3d9cc800000000000000000000000000000000035840f8ecf56359dc3239945720ad08702b4ea8d0fa9bea3bfb234431df4618e960a1eea87da72ba4d9443f14bb87a3", "Name": "matter_g2_multiexp_14", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d04bb9b75bc8078ccfa85e27d32e137ff5f05f9241b19ea835bba2fffc9255a4a3028c0caf9c32d3d27666e1394fe820000000000000000000000000000000013f59c3d8aaee34230cd7715a32e4a45487b9b16ce68d178f95461229a4d0fbe7d31edc7208a7338eed08e65847f8f29000000000000000000000000000000000d63ca2bafaa54e93ea54846b26f88b4c6749953f9cd00c670914cca279b794c1fb5e2664fce44b8c04f01c68698a8b9000000000000000000000000000000000b5188b4b7ef78d3662baa01b1813b4a0b0f855e11397584a460d56f594f11ff2e5d708a23a8e64d0ab337c7076872527740a826d524fdb7969776bede5ada468a0115229152907cb2b050760c18c8e20000000000000000000000000000000019bae57568c879cd743f7def43b6b994f29782c6a0c74734f35b97042a916da00daaea34f321481e6cc4749e23297c1c000000000000000000000000000000001853fd11d4688b027146a07edea647502e80750de4e5e2d105faad3f71ccc90badcc750f76f1b02db3bc0a1a635b2bbb000000000000000000000000000000000b1e45b90e6a7032179236f13f01ab664c32ee5728414ac0d6b9d79510e8c5bd0f5b62e6c59c1a3c88998bf45636cbab000000000000000000000000000000000ed16c2f88b5b8d29d7e01633e2876322caeb740251b034e5e898919f836ae73f0296c62253a0329ee8f71fdb5cac3a1d226f56bf3935ea95d976fde5790ba0584e5bbc78b37279aed8e50389899b9e9000000000000000000000000000000001455764f99e5eb0e0371e89f88bfee1c43224b9b5202746bd151f72336285556acc5ff36bd8ff87378249e82214cc5e500000000000000000000000000000000007fcee74e5335d96714e4d1a7c6f5c211b1a460efa283e0d0578c6c1f56dbd252198eebf0625362973c40d95fd890d3000000000000000000000000000000000ede26cf87e604507230ad996788e85799cc07245cf7191a6c3cecf0bfd5747b3a277cfbe41252808df6da19f005de9a000000000000000000000000000000001855991a4dd78dfc6088e6a43a64b56c8d86a0278b899bc8a1979a40a287979dee567217b006ca71374156a96b79c176c133e1989ac82e4d1c9852a6c7156a34b05784a58231d59e3cc875ac5834d5c8000000000000000000000000000000000cd032a7dfed029af020bfa249e6adccaaf5bcd2ccf33736281c4fce9c6e2b2e87fa828cc20301269d8e0579ffb866a1000000000000000000000000000000000765c4d6c4062cfbf7e24f9772dcd812f7e707f2b0ccf9043faf10018326834934df121924abb74d736b0da47554794a000000000000000000000000000000001540fa51e4580ff73e58def90a6f19557dec3c8306e2317ba0c25ece3eb4f8c39beb57741b3c4b9b8554fd2597743ce6000000000000000000000000000000000d875c822d0ce50dd638254cd4aad5dea1443813689a940d72cfa5db9309b171299ca3d69b137dfd37f0b7538a0852750fdae1b53f6442c4378774a981c90d282d5f8793feb2334470c873491e41740f0000000000000000000000000000000011c230689175cc672c25f3c56ef4eaf2bc5766ce424f6c596b40ab24fdbfa56a955205419c149058dffa4d86a48ad35d00000000000000000000000000000000078d493ce3a8038134541ae5f2a82b5e0590218a499dfd78c7a9c06b92307003fb62d6414d6c04b22f2877c3de0b65ca0000000000000000000000000000000001d53c22a622c5d91df934783f8c0cb7e370043ecaf99a0554987e6c5120a0e5f4ede023a9ad988d30d945a2132ba5770000000000000000000000000000000015b1f36a00fee95e13443c9f6e67935a840cedc7c3fb7833ece8e180991909922f59d4f4ecbbf23f16bf5ee7f0b5851b70f1de7cc5e6a2cf7dd4b6e60ada67ca47e7b9417bb5f599048fb0c9b2abf33d0000000000000000000000000000000014adff1607236910597a951ae169a7f56d6a3b4e0f44ac63a247716bbbf61feff7865d075f79e4108cda6c0731fdcfef000000000000000000000000000000000d740b13885c268da876898b77914bf4a002beef5bd2a3edefbf366e45ebcdf593ec6d9ab21e983fcae9a0832986182d0000000000000000000000000000000002a0827e812e983898351d9f03f660317d41669b0fa378e5c7667b73df299ddc4a32a529ca887a53245d7e1f946623b3000000000000000000000000000000000bf09a2de1a8ccf24a8a65dda72adcb96535ea7235de87f05d27341738b0b4ab16afbc5b37c97e255118dea9bf180ec2ca82cffdf59b742a736ae9a6d36f7840c46c20c126ec054f47ad52a22948d7210000000000000000000000000000000015fbbf7e8c26e2f41be32daee2c81390b9bc4413aabb053e3a88bc6117377bc16011e81ed167370b72f84f0e77c2b8680000000000000000000000000000000013d48a27d06ff00048b19879493a5f8ca52b7154be2fcb468b9de9edd1395750434b0e95ae6dd941e84fd6d8918455bc0000000000000000000000000000000012fd2bc91286dd46d68d87a3f8793db997ee684dec6b2de1c4202e5e7eb0e4a8a21222e3dcf80e1ae4a3a92474107d330000000000000000000000000000000004d8b71978c9025dabb3d1b1b3c7f4f13f166514b8b356fd064842269a36c6f1c07f150c03510af7d0913103afda4a68fad69492cab4ec7eb89ed37f1e7fe898ff49ffac4ef2aeb75d9c6b544109a08f0000000000000000000000000000000007d679ac21bd4634b415ef8e0e3670a8a1d673f6a4f7f3786b92d55458af980b035e4dab165a3b773ff3469fdd9d5135000000000000000000000000000000000fdb82db6e1096e73322050f828ba41b3012496a4fc4cb481f11fee338243aae20b205ee06887e28f6ba6dad00445f9d0000000000000000000000000000000017e6894b48f60b3d9b4184d58ab9554851e285a1d445b4d97cb1a7ed5a984ade8b0f62ab11ca75fdb280cc0e526108ca000000000000000000000000000000000c03b61690cdd9a4c6c83d03749db72c8946c21a944fb292866cf3a2dd1bf3dcd95743227709740ce8124319d0a540555af71c9baaf54967683f8553f72abf789da465041ee5a92c9ce1ad562c91c4d7000000000000000000000000000000000289f850c4834153f36bfc4855f89e9437a172c35a856117f8b841e5ad4ef973d3aa33fa73d8dbba4b9b2101708006bd000000000000000000000000000000000700025f22c0460613c05f8941f8a79a4319325c37c2b8f099cd910df5c0c27121a9de0e40adc7ba0fda61ea637b47d600000000000000000000000000000000069e17e00d4d726e8eaca8235c88967a7c093c70e5a46b1863ad097acbe233554048838a0a486a72cbed7001c83a27db00000000000000000000000000000000016ce4afb84c1a9e0216f23bcd2dda0bbada6a4acca78e1e0d765a5290f6f4929f6d0eeaf1306fed3c9766ca7c7268acc7effc9a7fe773a420ca430c58bb94e7baf26b9a97b618a15e7a18b31e5914f10000000000000000000000000000000018ca46a89dadcd3b54f60fdf9a7b97c95b9e0668ed9329bbe4121e588a1ba773c9d086dc35b699d65487f428c00ad8c30000000000000000000000000000000003ada6835a93310d0ada01bd7fd6778bd07e718d1ce05aee2b4990bf32322fa94ca898a531ec6e3b8cd7ae3bdc77e0b70000000000000000000000000000000004a8abd2b9f7449213e63ecdb435e5e13fe2aaa31a2c38673a6adb5e96f4dd383dacab391787f6c17579c78a1cefa5450000000000000000000000000000000002a8768d98ccda80149a767e9b5a3b0bbbc0ab4b5f696522c8f1c664f1d27f2f0a6690531672ba2070355c0e77095dc02d5a3d0370f4a58c21016d208609f1d3e7cdf43abdb85199bfc67dd12f589b8a00000000000000000000000000000000048fb58924bd5952d3bd7b1cd57a1dae6c1034df3a420c1151737f88760e4b0e78fa3f891a0dc32fcb50f89e67b0f08300000000000000000000000000000000073e9723c80eae7685db774d3e2bced53a52f24504fc3aff98e2becf8d59c6e83373ed024ec1ca50101d2d613abd286e0000000000000000000000000000000003b64c8e9a1341bc6a444a871843b3add7dbf04bd1810e1d6da7d31c7c2b7a264c362ac9a366dc8d93bcd9392c6056f000000000000000000000000000000000064462d424e54f50e9849a2bba1b0caae966a8618fda0f8965b1a841dd2173872a44a18ace1e2aecc8e3546a9558d7013549b86ed3fb880269be22b9cb8be6f24385bb5e24bba81bce9fd5b72ce2ab71000000000000000000000000000000000c40c8da9281a8b43478c28b2fe59a3cbad0a818e2077d40cfe44624dc2e46f72d4489cccf63eb8460d02f895e78edf5000000000000000000000000000000000735d768f6ac999a47c88bc2f3375f01052259dc69011480e468d8963ea8eda74726c4ef32c8feba52878eaf5c0147730000000000000000000000000000000010adb3ad214b17b963586a10701934727edf05fcbdc94d98255632647d73536decd0c91363840e1b55f29f7d32f650410000000000000000000000000000000019349045e6fd25960c03336888679cb53409027f35a1f211b40d24ebf724866c085a978ffa3a91d989da1a7902bca018c8f6dd56906fa13144dc87c31b53186b0683cad220ab2de89d2fb515bb269cbc000000000000000000000000000000000a5d2dcc05e218b0633e0a965b6d69a3c6c1c7837e1fff7ff75cc9ee93a112f8e34cbc95bd9dd8fe6ed22f2e9221aa110000000000000000000000000000000017d2e5d2c0578b1ec26b57c3305b209c979bba6925756892f031a7462ec44e8a4a2527e6aa2fc13bae91dcacb8c7a30f000000000000000000000000000000000d437edb45ace50700db548db68b9e8376b3039fa00cb98dd00cd197c14d0f92c8a3945127c43b10b34bef7894fa43410000000000000000000000000000000010d5a2e442a2eb35aa85fdaecf094c1e1f307dc9bcc540693d7206cc4e0d050ab900f17fbdd0754b59bd2aae705c60149ec934eddc44729d05f193ac927fbcb022288ffb2bc7d4f46d1bfcc7efacef940000000000000000000000000000000016c36464b426c3066aead1aaaf65ca637e93279e8ccc9d838b9b3ff1aa7b896f36de506efc2b0864763cb6ecca4926f30000000000000000000000000000000006d88d5764fc854ed7d7cf1c0e210496ce347bd887da2a149a09679469e98c453d85115afdd2fc4987b64a88c4a6f0a200000000000000000000000000000000053edcc0ca4c205423ee6a7031939379e552bd2d2657f8f25370c9f0ea0a947e77f18b5f218f98d12d720667844f3795000000000000000000000000000000001292909190854cee4499faa602af99dc49d1354a71278b439e983bd89e6c504fa5fcaaafb6ea26dbeba9850bcdfc1f69bd211ec887635ca841c4608fd00bdc0f5fd0f6365dcdfd7d6f4c36f4b25b5b1b000000000000000000000000000000000997e79a7549ada9ee0233b3bf9289df3ff797595f4b5eb2e7dda6977ca981c1c4a2b91b924812b95418f1b1d9d0cb830000000000000000000000000000000000256b830e80f238e8494387429d727a91cf5d323ea87f7dc143058c05e11858796adcdc677429d1db4dc2415cf23808000000000000000000000000000000000cab529c6b86beacc57c874f07108d1df7d98fbd59fce44c48afe9eb2dff823f4869b620bbafc121b4ead2cf244974de0000000000000000000000000000000002774906c1a0acd87de224a9450617db37f8f36a0a192f5daa2774eff0b73aa79b4804342999df761f8572974c697c6010bce61d4e35770e7737636c0f9a664eefa948662d3d22d1f1708fa48d3043de0000000000000000000000000000000012abd02540073017011e186586023adfca36fae454350b2015a796b7991eece65b63964fcdf581b4b51dbd7ddd506ec3000000000000000000000000000000000ccd3f2d9280908d4b30e924e4a862810a92e1a880cb56e842a94a2a5120956e8713f548ca279d66d06ab23e4976e54e0000000000000000000000000000000000c052ed00fde2cab515694d8c004de910e62d07c462345ffcfbd3904a0171b970bc58d99c5833059315283004f3390e00000000000000000000000000000000008fc4860366074ec0c7aed2c6ffae7c93ae0a81067edd8911b4c53393ebc0f23243823aa7aa2b2e987cb510f6e0a55a65c86930c1d142985bf85ce70bbad170947e850e5c6ac7803fc45980dd37a57d", "Expected": "0000000000000000000000000000000006ced307065868b6d082bd205bfbaea3b0a8cfdccf831bf154563b5a942154622b0d7689819b337479480d19aedd85e4000000000000000000000000000000000c0f04fbb26cf85c2c22763f3e78fe255d8d1f45ea47232ab58f5b785ad9f2458b0b28f3cdc25c4dfcb47d59957ae10700000000000000000000000000000000120e38740eebbc3eeea9beea483e70d6a9c30a5abd61b86e5f94bf65ffb40fb92c8d246edbeca425ace175f79c9c8afd000000000000000000000000000000000d5a503a26e50f9be34c2e64e4a80402ca6e17f09db1b334a9c1f6318f3e7e63b3847a7ca38ae6aa7c96ff94bf5de842", "Name": "matter_g2_multiexp_15", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000036480931a5a585ea54b6dbb01759eb1d86804e3f03326188c71f859613722e662c453096431171a49eecf8653f14d470000000000000000000000000000000015fcd6a30b9d59a90d8595ca1758eed7d6810d2916638dc2cb637aa09b16b5ba4920df7d21fc0b923453a6c7d32f056b0000000000000000000000000000000019aa4d8e98808c2fc1273d383e836876b087ad5a7d01743bded01314bc62ced94052d75d312a18839c1b33faa9e2e5160000000000000000000000000000000015747ce0f1171c0d0ff1fee9dbb2e5673b9db0b0c3618cc8bda474f378db58ea42184f907593f3d6fc2fa215cabb7b2308e559e394a9c1ff07a45bb3e022f9c212eea4ee5b77db1c5b93ce72c0512b79000000000000000000000000000000000222640c1d64948daac3ff93e86ecc96bcf9c93559266529a37ef1372a81952431673d69f1220e07b8aa0a4f3164c83b000000000000000000000000000000000db593156078821cd0ce0270e8a444d0d204dce0583774496620bd4752839f3451e505aeb3db568048739c7e71d279b40000000000000000000000000000000019932ad2c7e857c2dd51f7846534050b9243e388260cd47a91444fa050a9154eca88ab4d29a37def16d4a11d35683f2f0000000000000000000000000000000004d15ec653a72256ac6b616e9870b0acc7d46286893c0eec523dc27bbcf5fe596204cbf83ce71c2690af67b3616794225e55826db8d12169a31ca27beec80554954f522b56f7994c62bdb527c2438d5d00000000000000000000000000000000180622bfa9a1c452f343ed21a3e9c6fdf76589cebfb9a3f0a53782a3e7c9d066294e10699c386b5d0525003289f0ec580000000000000000000000000000000006615ff63c856302dba6d4e25d1070fe873e0c4950ee5ba8bbbd4b94ceeb181f1ee450acfd22f21010b88f0b88375777000000000000000000000000000000000cfd3940b5eeefa92d775792affa34371d13f3098ede3007e06510344ac8483debadd5a2baebafb5ddcb45a9449768b200000000000000000000000000000000145be0107a1e3acecc89a116668f9887579ed7a72abed3f4236930edd3f18974465c99ada86c4980c88768824216170f1362e8e39ec661cb3c5af64e0001cc94701194344a7404f1ecf7df0d5633eff9000000000000000000000000000000000820e74e6d0333b6b36590ebae78960d019065f1681ce68a2a01a2522496c840c668575a57f9fd0f50b87f928a41b0de000000000000000000000000000000000dee60d90e96019cf2bb552d016419e92dd358ff97039a61838b0a89ccbbd537f2b435cd11f7b6e75a4ec6675964e7fd0000000000000000000000000000000002ca767de9fbf8af7c73d41a07e1c0e38e3fc971472e11928b65393a27354b2d732012dc57f498f94c0b933565a7493200000000000000000000000000000000134fe97b24e153f0e9a27d3fe7b89999c6a19e353325e0746ead013198b8e00ca6472fcbd2a112aecb9ddf671aaedd9174d3d66cde7c4c8a4499708a0c6f7c4da458eb970b6ca87e23601c702365b6de00000000000000000000000000000000031a9c29323196ef31030ba73827d228e56fd5209eeef0803a189e0c0e5b186ca1f342483eeac99e1e1b12cf490856460000000000000000000000000000000010deea45a01370602bf57a1f81413e8d3b337d7a1a33f9525e4ff7003454d1da2cfb1a9b42c4a654320f91fe7d04b6200000000000000000000000000000000002bafb7b7452a173a3971c2ba1768061a043307d2c32767056f18c1bf8b066176937876a87055e54675876bc1b2d2fc3000000000000000000000000000000000b5c77dba3b4136a7efaa8c2e28f39e88afbf26a7313b52ad6e390da4d948209d96e39aa08eb52200dfb890d7e88b46a389e0d43f2006449fe2de506dcdba4cd0e6077e2228f7d8b6ec9d8a4129c494f0000000000000000000000000000000018bd1ea5ee8e39c43d442e9c6fd22706e582cd80051f18334c4db2ea91ab019f54bc0074c8f0e52e50367197a797e7520000000000000000000000000000000005c0bcd1b047fdbdff25b138248bf4da4c013beff7dd3030c348d6b2b8724a147cbc44d570db5c4b273c94d0b99bc2290000000000000000000000000000000018e033935c20be5940863f7e9e39fcbdc29ba031e58c10beea90cc48e9da9988fdbf108bcbd87948058f386928f81fa800000000000000000000000000000000107d179204db7b288315e8aed7b92ebfe53b7ad2366d5d7944b3df68d9d9faad023e477213f85214047645bc05fd4cde5f8dc332cb31e43bc2e551356cb8d1533c6e567d34622667e7e4e3ddef352f03000000000000000000000000000000000a7b364fbd3bac7e2f2e7ee501db2d248bd73a76c2a12a3e51718b56ca9a8ded14b83b8cf0b5bd46f0c26896a65fdb15000000000000000000000000000000000eafea7128fe20ddf740a6396bf18ff5f2652a0317ea9b6e934927c3ee95b59c7dcd51f7c895b3989d40ae5f78ca508f000000000000000000000000000000000bdce57be904236a8df532c2c0072165b5cbd4103e9061fcfc0a45a67e4b25d11b9f816f63fc0eac4d6d3e10d2764c4a0000000000000000000000000000000012419f94ddbd8275054f8f89fdc27a74afca2eef314393236fca65705354e5cc0a470818999c96b5087997813823e9be0dc7052044251fd360538fa6d5dec9fcee53faf2f07de5d8df212d04f968a0b60000000000000000000000000000000011e4010d0cd7855a92cd5d4954ad735363c0c2ab00053db5e078f34e772969d8c492892329cb95ea8893b4b7ff7aaa5e0000000000000000000000000000000013badc54d90a19b84d76b30fef8e3ad2cb268204fdaa50ae951b63e48aec9cc6d585751dd48e4a8d4659b835f38f8da8000000000000000000000000000000000460728f686b9b15cc19ef135af71312e174860284c3f0e7a84cf85a5c934e2bb6cadee8e482d88afe788a796605f79d0000000000000000000000000000000019a50c06ba307d83452a30fbd862270652cf5c7a09b150fcea858a8102ce3b1e9ec13b6abfb323d63d2c4edf209c7cafc579dd4f361fed9084d9c66a3ec4c6af5293710ba5299df3abc4cbaf5802b5360000000000000000000000000000000009faa74f66ec0384f0458893c0026f73688c764e8df9ce056a88a2ed0b84ed8f88d1b683443a3269a3db838f8aeb808a000000000000000000000000000000000949c4be2708c1aac86aff39290ab6a8e0f332e7a098bbd64227a175473d9dfe136e07548b282f69a94a15e2c32dada10000000000000000000000000000000014f2c7c7da781e2f50803e3a948381c3c439b127949f79824df1e5722c206efccd6c0ec5dd75ef63d8b1fa301c83356900000000000000000000000000000000176753460d241f38aff41bafdad51688ab0dc9a5fb3643977c7b9d282ad4532fcca1e725715227780ec28bf1c32bbc1d69f0f3c3f516ae34fbecf45f4636c22acffbee765952b332c0f3d8cadb9c93f10000000000000000000000000000000011982264c8c078518cd0adb05034761224e9063654904e06fb5e5a6eeb1f45e4ff3da661f1232693b79336215dcc0cc40000000000000000000000000000000010c96c872160d2de03a16e85f2828d0cf2dd16a3389effacce46b5b5eecfea1042a77de653da5a1c0380a84c435723fd000000000000000000000000000000000a4ad2d9956bd407c555b26c192c6bf59bf89e40d9c6f9c90780bba313a39db71a73e7633397d47a3f58f61c81edee77000000000000000000000000000000000a7f912530d27a7bf74e01d8e48890cc66f72d14950554991ed1edfc504062ff6bd3cb6941bb398df9fde3cefd33fc0676618f1954730111e572937cf0c9f7b3298a11d18cd890cb419f732c766bc6210000000000000000000000000000000015bc12aa9ecf417fa5bace8d9e5dc4a418555eeddde1da8b624bf7d6e1873ec4a257d5f6dfc058a8d9b02528e699abb70000000000000000000000000000000015b41567f8c780f83342449f27094bc20a839602ae482de14b92e40017e7acac8857db48a2d27f1f1a625883b6e5255e000000000000000000000000000000000cbe79ac0718555fd8fdc38b68eec8be83b32499d2654be44888e45a2d610b0e81ae12fd56550524ad85b5a632db32ce00000000000000000000000000000000069f46b5baf4357d8010869685b3828c0dbf6e2338598c9b42dfecf0b22d803f95fca716115f74c77778d414cbcbd881fbb9f2400ed1dec7ea63d2b26bb3e9c2acf70117e3026626f6f88a07876177880000000000000000000000000000000017ada4038189c544902167be958e43ee133730e5cd329e572dae2d853b694f5ff8032bd9ab41cddd11c51e8284970f810000000000000000000000000000000013eef75e6d28deec945ddff33128c199fa52565288d63677c824b8d56a6c29eb98d34c5834e84865be35d40c1c59a40c000000000000000000000000000000000e2fb4f9c7ba6bdac1d4ff5055be609abef7fecd7923a753a704da537c0ff41951552420bd78d14cf972dc84fa3f5dd9000000000000000000000000000000000805376b814b8a59435310d49a43081dd7ea36dc7dcb40d38068ae9085b3ea9a3b2249234234cacc76724d8ef84a2eaca0170d7b7604b8951a95d49b6697e2d0cd2a41c3671d8f96e936cca911dd516d0000000000000000000000000000000002288860f2d671c84c5239313b7f6b82e31c3976e6d310e15d3bfe1c566e2ab5d86ae6ed0df02530f9f7893ba419f1870000000000000000000000000000000017365bc096e260f8dd7b189fabe10eb66923783b41fff70a149251576b3b465c13230dd0af13cde562751dacd8298335000000000000000000000000000000000fa8eb9c818df27181b45a74b333ab481dc7212e417c4e12634816f9e177064f9e1101deff26156d26bc6574db9617080000000000000000000000000000000009379598bf02222e1ec37a721b9ea31a3adc33524c6a41bc58da06caa3da3bd730659f0a80f793a0fcb9c07b43ca929c2c2afc06f19e627e9ec0edf1083823d30ac569346040965e1c92e0c15011c90b00000000000000000000000000000000136870e08ff5fabf36410629ce5c23470eafbe73a7dceb633df5c1492e39445b86ce15c22bf4c421cfd0adc6518e78c30000000000000000000000000000000010aefa3cdf1225da09b796430d096807a83eb2fd5a58db3a4bfc5e500dcfcd472fea3077f0c059620f4ff708f37c95a90000000000000000000000000000000019ee2c62ff860338af623c535979ed31c42c0d0b2f82cd56c153e80e6d92bec9ce39bc8e8f285d1efd1c1e969521dbb50000000000000000000000000000000008ed69eb0a16c8a35d507bc3a50bfc97e18143fef611263715aacf5400cb1aa285b6d2ebf2ec219d2fec477360875a03141d0ff346e46a20c2498a74f910e9bb2d5d8530afc7ba47c3525861c9e8c5920000000000000000000000000000000014abc4eec64f2611197d0c1322c3248eadb725049379e64682f2b3d7f83f7bcea11358d88f52711b3020924b6ddd84790000000000000000000000000000000009fd78c5d1d2043d83be30a88f046f5b633c6dbb11bab25fa3037bd250b6b9d9394327aae25d1939f777fea9f3df46960000000000000000000000000000000010f413640aaa16a95afba98660f9e1b03a8f3e0a7a3d7f2b971f71b5e3d09016ac2b410f97d20471f48621d5a363e9e6000000000000000000000000000000000154b5df93298a5a14a6157819e38db33ae7f2d11dfd13f7f2a92b2fd9b053fbd25f10a8c45db3026f6f583bd56eee0f1d688a1aca2a837e0a353039294a9988a7111ac134a6a8a68e4f881e7486025c000000000000000000000000000000000f1893df99adeff5e4042c4c5e8557e53f7c34efcb2a7953d5347f81d2f4a75ca0273a3845f54e795ac1c1f8ae7240dc0000000000000000000000000000000004856b05d58898be6aba07fcffe487dd895144c7ac8fa8bb1a37c61e73bcd062ff541d510e24c5bf005c8351d3ddf61c00000000000000000000000000000000178b22c2c698dbc4929b119474a741ef44d6275fff5ba058d9debe9475e71398e464aa14a6712c5deeb5010d1c7758ba0000000000000000000000000000000005ad09389c35c45f349e6dcaf1cdb3b63648b3df427ea0c2a371f45634635f9253957ba6987df4aca6cba4cd472308a31b59c33ff02791031e7a9424c781ff17a209d132af06f5b825df363fbd902cd4", "Expected": "000000000000000000000000000000001090d83d501373cf07c75effb1c85852019b39eb0d77226823aa3c1054d4e408e82fbf0f4420a30144c611fbb856748c00000000000000000000000000000000120a1e3795f6d5c4ed5b886256c611bdd209677f8324b7091cdd7cab11788b1c0f780e8b4c38b84d7c2ea528123d4783000000000000000000000000000000000d250df34d906ed421eec2a78c2ff4ed4eedb717358d7ca879d58ff5b4d2d72521082dba6ac5d10859125e32c2c8b490000000000000000000000000000000000476adaed9d80cb1545be505496222dba1f0ea85d38d5bece0663461e0e9d47abbefe95303c926db008d08b8aa162e27", "Name": "matter_g2_multiexp_16", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e1a9066289392b0b0b8f0986366c2975463c9cbe7a74f2eafcb3b8b6d4ee3226ea5886aaae374341bc76b53b165e22a000000000000000000000000000000001557cd01b61b5f2361f6b558a87c67f2778e11c21734b7ed25f72a88cc62cbed396d583de4c2190ae6bbfd096c33bf73000000000000000000000000000000000eab68305118d7e7076043719ac1e13ecda4497df2cf392d6aae4b7753f114d30aae3e8535742947636901feac4b620a0000000000000000000000000000000002cfe5014446556b82d60adf874cef25e58eabd035deb4717c93bf0361f37a4a67aab70b95627326bd97f111efeed57f58fef5bc887b7caf72f2a533fe1455ae523841bd49b4adf16cfe87edc6f573eb000000000000000000000000000000000c8fa30f6055357f6b697f2115203428b8005ad03286d2b3c805bf3d4dbb461c30e6ee8b0973ef41f884b91e857c53500000000000000000000000000000000005e1c785feb4c4fb7e960233d431d51a4fe471f10321251d018a950374d2a686d52ee8cdd855a29e770bdc1bc565f471000000000000000000000000000000001158d31faab483832d39f5431a5d8aeb952d6a63b82ec019f235b5b2e5580df8cd91b46cd53d4a90b9db354b38c5a1710000000000000000000000000000000004a389b09be6fb7ffd14d7f3359b17991e93d92a1c0b9a89faceaf71f5ce77a1875aaeb7a0ec3b2dfb363c47dfc9875273b243b83d44158a66eb6d31e7c4ae1f4b3ddbba81b2cf9a654ca7c4ea2147ad0000000000000000000000000000000010587118c5f90b545ee707466ea2c5f378e6795c260235cdf9876aed8bd753aac592ee05e23882ee77f4a13bff97f5940000000000000000000000000000000000a0344aed244b90c4fb9ac337edb01429e09f951062b06025a5212300f5471a95f28e09bbc715417a6d98423b518c3a00000000000000000000000000000000128457cf374e5b8864b8241f476da093f48553d609a5f30c0f0f235ecf7127231237b6c8802f2904a8304c7c237842620000000000000000000000000000000004d55ff04eb09b33ebfe90f2a0966a1b59cc224215c0359a4ff0c09e60f9fe7ad8342868184d8cfcaa1d8c28328864241ea87af09f6e62111c48993c408efd3db9ebe218ac68f61a461ad9ec1306873d0000000000000000000000000000000019e6992c3da47715bf379a668a15668508e7ad27bac647490be8e82759b9b79c996735aa1bfdc3cef217750e4ed36fce000000000000000000000000000000000828f782c5bd4f2de3570a4930db2c020f75f93adc98aa0e48449d29c7a3b0d5c349963d956bab7f985ba6ffe59c90ec00000000000000000000000000000000062c7a730d286e895c57b75907713ebf1d20650b5e621f270f1d22a2ca480d022346def4102a62eebe867210e4b6122e000000000000000000000000000000000d6c29462ad449ee6cd122e3dc00d56dd5caf17a2510e5305aecfe85626cf73adb401ec2192eb693158650893fa67412a691b9635e38a46e2469811405ef6325ae7ef88a67c1d1c5b05806da329f27e000000000000000000000000000000000098de9ab41c289a05ba5a774eafe27d91aa8272fe9f81fadefba9a0cc0e31de20f808ff454a8647c44f5aa632742af9e000000000000000000000000000000000c96019bd5cdd62df1642656f0832ac8ff6aab86f671e18c1c7023dc16b8ff54a8e3e446b19682a23b73ccb90da2fdf0000000000000000000000000000000000178e3b4366b2517d4c19fb40551be6979d46319d7040682241b046f10ab88d269dfc097ae02952d46e69cb1cf159da50000000000000000000000000000000008341bfe1e2fb999f0c3f4e79523c720edd332401f9dfdb8dddba8d1342c2c1fb20ae2fd9dda92c7bde5a0c95ad971f80d9a35f474325d0f065442805cab3beae4a186b252ebae54a567dec6695588f1000000000000000000000000000000001004d60af8c21f7c62fcba1c5c41b94fc77f64b89abcd23a218f0da8f47d2ae6879ddcde52f3e6feeae2dc7b2720577d000000000000000000000000000000000b8e8a7da87aa62ca852e2984b0f12b85052fdd03883f01f4496df0835d1cafa48818b5ff1e3cb0e9ecd66054540a0d40000000000000000000000000000000009c16854580ad8191e3e80a0afa8da759a8b2bfa7e0d556418b5c96d97e88a12fb75a91cd68c2f4336c3ed7ac99199fe00000000000000000000000000000000195ce9c562c460c7e715908991ea8b017b81561b45133427f63cdfbe8f65202bdc8e8958ab0977b3a244cfa32fb35f37c20e998acda67d406a238f16bc2b3066a6d69d2436577b8900a180e6a71b0a01000000000000000000000000000000000107292f77666064b7d80d73ea8f3b623170ef79ccc7c228b8366675a422a0cb8491586a2e4ab1a067c31396cd670a8900000000000000000000000000000000126f8136dd61d61b2a9c0f4af3ed44a3cec3ccdedc74821f341d200601a7bf0a17079c824de6cfe28467e843d0c74d2a000000000000000000000000000000000bcec8afcc7ee56b36d6d08b51f61454c8fb15ec5baee1117ed55af8fc85f68674250334f79b0fce632e75623dd173210000000000000000000000000000000016624d64660b63b70ed197f6a675911b02b0bc6f880348faa6ce4727af74127c509ce8535d8dc8db5ae2d71aa497e0756fb773cde356e2edac3afd2bf703b59161162dc1e915873ecf606dfc0e6efec5000000000000000000000000000000000f57747c20e1b3923c7e1d8bd7d877736cccc0e0829837a086d62d48cb54f323d90b57ca3339fe4b256df529bff11363000000000000000000000000000000001940327a1b319dc4212e7a553d3f49904660722c89636f6a38604d96771fa0fc71f57674b7aa710db4275822c2b89903000000000000000000000000000000001956b81bcf961d16e50c053ca07ae67cb8597138f34a9dad4d82e0e8d23a7e08b751682d588f229311bc63f9598ef448000000000000000000000000000000000208981064443e8c72987945e399b45b74e529a0bb75e99b7d6744728e5c182a6b0a10e449147bcb0b0cbe70edcdd845bffc1a58dd06752a2a77abab835d089599b4781ae51ab998ff3c5b68329068bf0000000000000000000000000000000018c35ca3a63053fec853e8fda5920b560f1be28431f2f4b08789c7a202336c8905a5ffffbf69ae4427f267b1e13288d60000000000000000000000000000000019de96be76bd93886cc486c2671b5b0d731b568638b1b830a52dd4c481b9a1fbe2b3cef14b46e25f1188ddb3c158da6e000000000000000000000000000000001813ab16a11c79eb3d3d47ae7d9a7c05401ee91eb1183266d23077ec4c0c8f3ac7188eece06876025dc3fe271d65d4ba0000000000000000000000000000000004d2a416dc874e956fd6d29a3fb96195019f4136561b4c127541ac171b5a6b229746af6d6e535a8017e64ce06709e52e57f35cfd74f62fa39f919400f4d692855a4b4e9f91920e4306ebb2e772a484f4000000000000000000000000000000000623b7a8a1c24dcc603f01589e6679c74c4ed3452894e536a4cea69e99047092acc877dd0bb395b0cb693cb1702a64a00000000000000000000000000000000013de9dc75e42f12e905d729a52f25bb1a4125f5edb435734649281bdfd41083716d0797b0a80d842c2503d09cc61162a0000000000000000000000000000000006453c06f56dbaabd4530160bcd5312b8a148dbe19fdf9f1e44b7b047a73ee9ef9d981116d00269942ef73537885eb7a00000000000000000000000000000000075376135ff3acaecc0eeea32f8dc15add57e8f0297d053ffaa0fb0a8fc4418c5b142f96b6b9ce9eee2f949c960aed682d1f3709700634653374fba5a94d69163ef616a72a63d462afd9f01c9ddba84000000000000000000000000000000000120d088fc12210c1f5f6cc3d1091563f9a37d4d0e0d2c305b479f4d7e893c4d5c8170eb164e34e4843a21c9eb193d11d00000000000000000000000000000000159de80db3b1f0ffc5fa8c93e1bd54cf8ae19cbc9018a5dfed86179cdbc976c1c312212080ab221806bbe142d496e7a7000000000000000000000000000000001103abb75a78220218cde4bc4c59ddb5fb647ff808754dda200bdf586ee9c47a09e03762bb726b085928ddcc998af3ee000000000000000000000000000000000bff4bea17eae0f2ff3e7f99bfa91e6ae8aea28f6f3fb6080eb644861defdefc26befbb7874f612edac0cecf70dfb275614ed9a08dfd406df00719d5eeacfb0a96413b608974fd0aa1d4c6176b968dc00000000000000000000000000000000012dde607a2d4452c6c060054c8adb6307743edea3ccb6ac34c275717f177f0e454d9e33d4391208198cae39d7eb6f6c00000000000000000000000000000000014cb4d8bc98060ee68a8ddbc44b83db5cb6d09f09b0d608357629251c35e44383e97058d0d68fe2df3bc47424a5dda03000000000000000000000000000000000c14fbb6c844fbf896fbd3cb3464a83aa4c6e9a7f0450ad96a07527df6f1eeeaf587f60a990bd6abe7aeaf5eb46f362d0000000000000000000000000000000001d9468774318ea711b79f16303ce86288cee312af296f1c9f607ef5f97c7d1cb48a7218775c8aef00c227ccb586286e7c1dd2e5e5f630fb1d07e8934dd3ab029917e7775e401c0bcf7e1fd83aef728400000000000000000000000000000000181e7f8d0ec7a4a7858bc96b61484c24dbb9dfeb3746fd3a231a8e442369e3e83516ee6043b1c06e7e2043dc86f6c75e00000000000000000000000000000000184c1d667c0ece59f18fd2eeafc66f1ed530b7d5f4560a6c886429caa13255c63dea01c3e357e3408af58a39420a8b28000000000000000000000000000000000a8475ea694cf607246a1c50064cf90cbe50ad5cf8006934a1fdf1621ba38d20e70860a2b5aecc05acc60943224cadb60000000000000000000000000000000008afa03c2df8e83fb64523c57d0daa7cfbb7af6a4bf2960ebc64515a61a659b2c37ee661050cd538fa00cb34746a371b64e9d16cb61f2bcdef30cf544d97e078fccb999b96a1da0eeaa0bf232f01995f0000000000000000000000000000000008b33a297c8f86f1e9d7166f9e905283c8e1581e582b879caf48585d0bca3608fe46d8d9f6e7c90855aee9d92283d7a40000000000000000000000000000000016962410d6b4b6f91437617e84bfaaba49de0369b8748d2e2dacb63b421e0d7de4514e7fd3e0dcbcfba8baa4915610d0000000000000000000000000000000000efdab72953b870d0e113efa7c183d99aefc100ce59791aabc72423aff70a5b74c577c06ca94bfd6a7722199b4bc22660000000000000000000000000000000013b18e31700987dfa4344384f9b41e72afe92c39bc961333cad3e7d0a5efd3842a5e849cff5655c4673f720fd0127dca35bca9082d66c06761f702dd439faa4957caa70ce0343268787f41a2f4bc0cbf0000000000000000000000000000000008b86f70c8d8b03b0e9a8975776d7fb0d08f95eded0a0124551d363c2df57124e0e89bd45ddd1cc75c258a4ae2f87916000000000000000000000000000000001120eef9eaff7c308b629deafb060d2c12b20b57562007fa810a2191d99fabe9c7d3c364caec1724665ef556de66b57e0000000000000000000000000000000007698bbef6dcea67a2c643342ab2a0f830c329fb6244d4a98512daa8a3c9d808cd2acc0cebbe3da920053ad73eb7cdc7000000000000000000000000000000001155b6beb28fd88d252c6b407bb9f55d22103257287ce77353bea580c90173b5c3d49080b319ea28817d67c52bead96f7980eac6c8db86ef83748d10b210835e53baf8cc9f607915df272b6e28ac6b2800000000000000000000000000000000142b28509d72f9e3be9ee916827fc1a8dfc4ef7ae2b72eebad5db605fdb2dfa4492b50cc3e472df1b52baa6e2b0eff5500000000000000000000000000000000134d6821088ce4a8b42383d5a43a32bb0cdc96c85f304a2601292670633d5e231b9dc479d199829a9ba9f39c162318d5000000000000000000000000000000000636da344fcb0fe50ff3e22f8591418f64cfc722b2860b4a5047f973f42e4cefb93c2f8eb8a14b4d150758ecbf3cf712000000000000000000000000000000000e6fd06d5dca702cc9f199f7583add86c82f7b530d4dfb9faec36dbb669cf7c1cd1260c7e4f3026824eeb5b979e9fdaea256ebae4b204b3888d7bd244bbff26431ab5890098870f13800bb3be3e842ca", "Expected": "000000000000000000000000000000001684f447f8929ec0187811f66e985f0014eba46eaa87de2d4ac2347d10c0550e4044ec7792d9f315c50081dc2097ebdb000000000000000000000000000000000ee0c46efe930bc98f39dee8cc6a792744e84de4fadec035d25ee8ba82e1c53264d0885a1fb05b2b8dc9c6a1846c28320000000000000000000000000000000003a5ef98843099235a2ad9522c9cfce1908bef77b45794e7df9eb38a4854460031829e947a118e8160365fbec3725b85000000000000000000000000000000000dd205e195abef6a4cfa7da66f022a418235e1a1b2fefa6bd3ddf8a3851d8ca8c27652bf87ac644cd189ae55e3cc7808", "Name": "matter_g2_multiexp_17", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000064698182f90c20ed6f6da7248cea32a291f901876a900d344ce4dc1b07822b480519cb8d891b5ee4f33b4efd90742cb000000000000000000000000000000000e7e9d2e79ec4b07015baf69a283f6a4abc8d7c1699f3356fdad6ea9b1c70e41e73bc14e500634d73749f9900eeb65f5000000000000000000000000000000000002ddbf40619ea5123c100e2d6553213e37883fb34f0f0f2124795dd971892d5c9051cd4aa78b9d20f196301ca9bb4d0000000000000000000000000000000017a07b32fbffdbf7a80f0437eac1ec5fff5a68f3b053482f034064992158b604bc34489dfd41a24ffba806ccb871fff15805f2e8013007c4f6d8abf441728eda8d742ea2f1df545f85d092f50ca8275c0000000000000000000000000000000018b4de9c04fde8b708408efb3aa7f24b5f7bcec14e7d06fd5a5b36bab528e5adc0bbb1e378a5ff6fcbc95aea530ffc6a0000000000000000000000000000000010da98267770a47e5ed14ffb3dbcf537dd14ae5eb79522c772a7a2833be214690db0b4e86621de1842d88018fc0f348400000000000000000000000000000000135548e2eec9ae7c3d23618d8286db13a5a628fee04fb6ec9da980f3a46838899cf965c1cc6f562e71d5b5c7428cabc8000000000000000000000000000000001669fcee7804df9b7bef32e2ffeaf285e8501842efe87c9e827fce872dffbf92255d3c3a2fb5c382ab7aec0bba1ae0e5502d777b25f3112ba2264022e2f28dfb6e5d5239ba097e9d815928be44b6a62a0000000000000000000000000000000010ed20c069bb300a27571adabd239e70b767af90b91c4d0e93d88278a6da47b7c12fcfaf62ac0a7b9966968cc9f3770b0000000000000000000000000000000017273eddc25cf41f2d7734a3866711e83d4f2823ee6a036942799f837d5ceff10dd6022ea25e3c1e28c7b14ed8f4e7c5000000000000000000000000000000000f201f314f66f6b2c6e1365c0fac7b187d31bc45b5edaef5243b5488e26581dee24de4a5fe493bee44165cc31d8d72ef0000000000000000000000000000000009dfbdd86633edfacad6b78d292141a1e653a1bfd8c48a96b2f6bf8271ed6033c0511628caf2ef258eb64cc8b63d8e5be7d64b471cca34ab0c91f61ff26719c7186dfcdef13895d37ead407873736a740000000000000000000000000000000005c4a4a5ffcb4a39c8809821ff275360ff937070cb97a791cc9ec45f429256a6d2d6127248b6ab0b6c71c30c4fe84ff20000000000000000000000000000000019fa60f481c5be953c9c7dc86903a89af0ca2b4205be3a00d793d6de7103852e147ebc7d983c6d6e8cd99e681241ad440000000000000000000000000000000015b3b2eeb0f81ff8a2624e2ff2396bc69feffeef62b1b6a1e73ca4b9e60506c2950fdd23a37cf56387b8794449d3237f0000000000000000000000000000000017021a69ceba3446dad9fcfd8cbe5b89b61372f57d43a8d2e2c8f4534bef6b91408409dfda9438f24526f7e6bf1f4240e5723630020fdb48e44adda735943c91ad7d1e12f3c32d823833eacfcc8b02ba0000000000000000000000000000000007c8f07f22a3412fb4638cb704751959cda4e42e4612edaf5b1f22c8f9ea314508353445114bab6c07ccbb4b0d0bfa6b00000000000000000000000000000000062d087155c8722d0102c8e5084f95f5f58ed626d48197297d21d2108ee05f70f16d595ef73e8e1207a3c0b013fe16710000000000000000000000000000000003b6652934f3acd4c91c6c521c2476bcd2594a939ff2e7ebcbb0f451fcf0a656a518dbd4f36f165f9b2f58054e9f778f000000000000000000000000000000000bbf21158227e0ad5461de9ad8bd580f9e65327dd4e23f1ad55618f6b0aec45aa6076fa88557953ad15d385a074bc7d96e9e37bd811b76133c12268d325ebbd6656e7ed718cd777458867dc98b1b3bc50000000000000000000000000000000019e336d4d342f110eeeba9773b8e351f26bb56361c77fbf12fd9fc218fd075ae38b95f4a8a5ef830fc2cd92558b1711e000000000000000000000000000000000a112725046ca3b6cc43207e6b36f38d96ff98dfe3444d67ee3f4b0208f3b8543768dc9989f936637d7819e7dc5740fd000000000000000000000000000000000527682076572d8cca15e47a2faf62b129baad29afed22d32ea47983a8d0b138653c1353bfc6fbf9fdbec2efe36700f90000000000000000000000000000000007e3c5aff373b5154ae66f978fcd66d09cbebc7e0c96b4a4cf23c4fa5f2fa655410c7f1ce597a3f5f155017720f7c50f7d46516db284a3938e672ad3c6bd40313d77c5d643ffcc59e3f55ad983cdc0ed000000000000000000000000000000001865c265ed4606ed16056c0b28f953119751d7272bb33b9865eed312ba23b32d01733ad5446cea5873c2bbe37fdfce7e0000000000000000000000000000000007018aca1e7ac211921cab1cc6bb18874d2f39f00d916b8f3d46a088a378f3c9b49ab8a296d0aa21608f11b144a0c687000000000000000000000000000000000210561c0bbe5a9f4b2237e5bdf88bcd73326d395277deb2a883526978df90792993e6ee520c9d5ec0a6f7ef5c6b3542000000000000000000000000000000000cdd344124b7b5da556f64ac5d651a6f9b74427fd712007310d720f3236724e2284aab812d739a87f3a1bfe8737dcee7586cf63c5e52b44aaa79cdda6dd6fa92c6fce11d867b2ff5a04c9e44e0b3930000000000000000000000000000000000024494aab30849df790185a4f939954b724c387c9a366fbe833b628577654174f705d05e7d7dbcd29b8873aecd55df0b000000000000000000000000000000000863054fe3e4838d2caec7103e3d0453e86a17fff0dfdb84dd819f31756032e9e97b7be89b636e5e0b642718f6da217b0000000000000000000000000000000015c8bb4fcb6d9cf941b722136d8d76d847fd6d5c643f4c0049c9746e76e49726fd463ce7899f4df66d04e5d48e523e6a000000000000000000000000000000000f101bea4e1bf610d2782ede91da95eb2b0be9ce60485465b9e94cbb9530b416c4394862f0ba7ee8067bb48e94c07c53efaac96bc5f686d6b952e7082236622b737fda0dd3900bec71654bdebc8ba2e40000000000000000000000000000000002dd11f4dacf3d9c46579182df1c1c45a364a8dc1eb7aa7d54d0141306f1c23bed85235783a22b8e6dc4adc35f9193ab0000000000000000000000000000000010d1c642fce533039e98712bdfcda86eaa62d2d69b861ec4fd835488732fcea414cfb6f3f8414152f9d5398c73a74fd2000000000000000000000000000000000c6759b75b1e3fe86c00fa124d09c5b7438ad61fd1bb71695743ed7793f39b7a0fc99b055201ac1e3aa07ccec61b24a80000000000000000000000000000000017580c9341789484fb31386eccc9c344539a09f1c4421dd124b1a0ce61f2d0528942f7fe8df67c6b2bbf782996def47b39d6045573dafd09ab2a0d8ab6e97b0ade43bd79d820749ecf19cf7d99792ca8000000000000000000000000000000000d9c48a111c8c74bce8cd78d127999531e46a411b2f0be3507226766bc8abd088638a237674ac62e0fb7dd4a86d09b79000000000000000000000000000000000073675bb81e2bfe6adb5cd929e0b7280f5d60b3dee7f797d65ffbefc2c2944a9c7207648bb096f13292ff4440c3f03f00000000000000000000000000000000024d2e0d5ba1a804520c72331fa23a2a326d461177fa527473240dda130f4ef893870e893e1dbf7c5dbb0178dcd29b3b0000000000000000000000000000000002a4c9487485ec33f8fb347d246ab0d41b883bec30d2a5e88cccafa676569f25ffd8341cdf6c09f68afae442a574f3334c4a2ff4ce4b633ec8fe0bfea42ccc329b7d3fbce96c26989b3c7a391c9e806a000000000000000000000000000000000c1965a745e42853b4d54739b2dc507d68d80b330360a4020e4412ba5422daaae313fb9597c98575c66ccf351e62a527000000000000000000000000000000000844439e6f08a411e61d37b5b2b07921049432e1833e839b00d6cc11227dfc8770ad9ca06037043668fe7ce3bf3ce84200000000000000000000000000000000152ad6fabde2e0310c978404a5244209a9363cab1f3ac9f71339cdad6d40c84f8e5a8a196283b581d0209ce90e1e3c6c0000000000000000000000000000000010eb6af62c7dba122b0e24e8326dc906370bcb4ba791c47630f05f657a228c20e010c065b93537ec84fa14a756b199789af09ef1f27cb83189e4e13f3801c08d3a2adc8b5f88717954ee84499defc0c40000000000000000000000000000000001febb2cf2d664e4a277cbf08fc1fbacd05db415a12329f7be551ed56d67f0b5dcc917d1b02951657bff3a26bd8c178d000000000000000000000000000000000018af160555292b2f7ce27112c1d60038b564f5427d62604387de97dcf48e4473107f91936b5e8008065a1537f7ca340000000000000000000000000000000016bbad2a7f5451098294a7cab2fe10d206741a99b128dde5eade581d02ca849bab3662fc3400fbe055dd93a418aecf0b000000000000000000000000000000000b1e9586cc1b357da6e58621ce09288e62a79517144f6c6b867359251baad6d40217578d49c1501f23206b125282bdf4c72c1dc1efefb775a1bda754ff17389a6b6b6bb25e22697847d24a117eb8974b000000000000000000000000000000000b88892250c848e7bc7bb7e42cfe1048a1f61dc546929211846f49501ad8c7c8817f5b5b99ed092d5a2236d59d9c8eaf0000000000000000000000000000000011680c6549f6b7d9d187a6409d40cc26554df654083f1e8a47dde826149d68da756adfb1b65bbd219f79a10d8454e881000000000000000000000000000000000f9596121dad98bf7acb3fd65fe7e0bdc8924e2390341c11d9cc9cbb0517f988ff79a5e1d60bd89449b5f042f0d0b0c30000000000000000000000000000000008982832ef53bafc23ea817be378532b95b5872217093e7c7c2f4512d03a9c9a6dbb7950563a520781c7ae213fc82897b4a0c7c2e611a24c722975ae882dcb4b45e6f6b41cfc87e8c766beefd5b10bfd000000000000000000000000000000000ea5bc2f8bc2b4088d1fed7090ba389577b11a3ee0775cb3f0657ab5b07a6709d3a18fa5fc33554dea235c60baae4bb100000000000000000000000000000000196b6259b06a4c91a0bb0adecea134c8609cf983c2c87158a69c9de3b6768510fc56543a84d1266dda78d90c3b0516ac000000000000000000000000000000000d0222d8ef278cd0d85dc8765fa7c4256394a5ef61f91301af6c7422b4cb17889224c75ccecd2df3ddc9bac98b493863000000000000000000000000000000000548809ce26cd498816ef1222d062b1ebb7313a07e99e3aad1431f984e9b8ecfd43357ea57da7e0c6c011c5d5400f7ba986d48aa5b00fc16c36dcad061d10937b55ec4deee63cc2841b7ebab84f910d2000000000000000000000000000000000b95455351fbce6f73de0345a195f91bf96abee361908cea6c4dcde72048a13a9a23991a75b9c988ba0afd9491d15696000000000000000000000000000000000305f29b05fed06ffab484cb065d4852eb323fda8c9b7c0a78843bd7143effa95cbe5e50c1a0c3a9675bb5381709b6550000000000000000000000000000000016ebcb25f1b8e8d7a8f7131455ed2be084bdcce40034e7ef24a47fc29e447f912c20c7c9910e025aab975cd2c8cf1a96000000000000000000000000000000000d84a5de7a5fd8592f6cc2bc7c3d93c06e26185787856c922d95eeee345ddfb7cbbb60b6d992c5ea4dfb33101f2ef1dc979d4df836daac0960fbbb8919d2f90c3457cc987153def711d6e8a12fb14363000000000000000000000000000000001377d654f80e933c4598aba1f637d1e37d66a96680c3a89a762f412e187817ec08f0ae897b08206a73f1a423b742261900000000000000000000000000000000014b71954b9bc22ac22cb2d7d7f373c3238c923205b223cce6c219175df2bb6d7258ae46d6cdb019311bd386275499fb000000000000000000000000000000000a08ef83b67bc972a67b9174d0e5b1536af882d505d03464c9a97f68061aa319d612de9db84e1e7b12fc3015fc2973b20000000000000000000000000000000005f716d0ffc30005e4a744092704a9e29f58fb06bf7d8d6fdbb95a4c0eeb5c39452cf662721ea3e0bcc67f25931a109425ae495ba75cdd0bfe200ee24d813e1aa93c100ce861c9ed7fa5537e11778990", "Expected": "000000000000000000000000000000000c53f0ca8901f4751be4a478088b30dce70b9ecc382455049df9ce108eb0a8d2696bb325fe9ebfd7d967ab5b9b2c2bd800000000000000000000000000000000033460babd2984a5d8b7002409349972f518364e92648927e223d7a3b648e952482c06cc713bdc29ab83f2646e9398510000000000000000000000000000000007cb9dfe603dc070151cc477ec5bb5a2a949062e8442399597c5eff8f1decff538cd0aef1384256dec73746e63a6c66c0000000000000000000000000000000016b56ee9b21c533b9c464178d14ba5c92a90e6a54c3ed319f487c2082b1ce1d0ff81131a5fb3dd7d13e0fc1d9ad9e4a1", "Name": "matter_g2_multiexp_18", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000104e0b91821c59290be48b97936458af89078b176b5585ca9a79070c7050309b01df4b0bcd84f137f58304d90599212f0000000000000000000000000000000013b00ece925fd17a8effc43e21d982553ab2764b13defaae5e5419cb9a23ca7436cfc44088c2aded63785e4f07b6e186000000000000000000000000000000000267cdd42febf0706675b60af8c0953582ced84dd5ae870815654cffa46eb14b747fb8fbb3b014e59c929da49c6908050000000000000000000000000000000011c5384d7c3e0f4fd66ba4b4c2ab60f6f78f9930e1fed233263dad25294814d9e2aaba6388ee9f924e2a323693b6e43bbb2a329761a3d6a2e4d9d63d7bbf7fc6fd321ec0344cc4d7d1b6565c475ee9670000000000000000000000000000000018158ad70994584e6f2443b8b96c1e4772a00fa0bf74865c76000eae470eb02cff627579126cc465046d4e088782557b000000000000000000000000000000000d72979d455733756a0849baa8afd79e18960f3f6dc9676c33d1663961617831f3266015cb998fff28b78300c87c2a73000000000000000000000000000000000056192c20cbcbde6099256a8f40c78a32d3fd212fe9c511951c7523a3559f60662e070f5b5e5f87b1686be0bf6cc890000000000000000000000000000000000c7b7e8ab7486012d95af5b2474ce15db612bfe1508852b8d99f4402d0e4f075ba056c19df3caa3a93bb4db89443096143cbc3dd7ec63ac63618a9e5da1f9c3fb952c6fc6972dfec6caf1a415a0aa79e00000000000000000000000000000000005a2741902dab47e8d38992180a9670faf56d1849dbeaa75b2b4ded93ee5494184c8658232e9131a8b08ac9b5460bd400000000000000000000000000000000189077d5130b3a4d7d4c3074633fb12739f95b8b6ccb082dfa61d845a389e6ca7aff835fa0f194dc349e1584b3141507000000000000000000000000000000000f226324f242cbc5f616c4a897f82bc5503ab1963ca38f30070c7c9916ef6bef5caa7e2e26b3f9fe68a1d59f19a9831d000000000000000000000000000000000a999bdfa10e4838ca69694272b0187f7d0198d6db0fd85eae688424fb09baa165c623dc6da567fe034d7cf9f9a0087e733a3a84eddaf3af8c5009646a899f6ae8cf233f535e360e29e2952088ebd7b6000000000000000000000000000000000fe85d976befdae8fd0ad33a4404415304afad1c5698b91bdc15abb4f268807c906410a6ca827320f5271c8fd4c8d6fe000000000000000000000000000000000cbff7963daa20c1d20717bcd47b872b3ecd5f38de1a467ef50936f13d6aebd978116a736cb6c5d676c6a9525bb0b7fc000000000000000000000000000000000c3d20ba17a21bbfe873d88e9221571f1bae7f02f35b8e677c9c42907673d765150c737f0011fdbaf4faa883b0dbf0280000000000000000000000000000000013482c68a5e1084faf12e8aec92cd9f0692b173556ac8ac3c7519beb4bd75f847f41ab9432421c631b14c885c001dce25112b5912aa3cba657d8de3dc8138fec92b391d5f988b82e19f16fe52fafea71000000000000000000000000000000000f9091a0df2c989e12a844c447287b704803d1532a3ecbcc890e6f6a885a54b969c53323c105b3d14d12f2cf766b8ac8000000000000000000000000000000000e54f3a9def8b3a9f972726e606195849584b7197ab70a28cf5644cde15e70bb6e3044042b649825adaf5e37c2d5e614000000000000000000000000000000000cae412d8a3ee3c5af38d7a65bdf2440d9cc2d6348dce0791f4a7e71ac483d7487b6c789be0a401777de3f57ec65de820000000000000000000000000000000014df09fd2ff406707004f6afa366d06bcf8bf18f5fc4b444b07c98b3f358247c6056a6337f5b53c35db45904797fb4455683e0b33b5463bc71283f0625269b2b33ead69c1eb7b23a996c31c514d06937000000000000000000000000000000000a8aa422e1d58fccc84615f9ca4a4743cf5efe3a1066c9819f05042100bb8784fcceffc8b3a739f549b42f34d62629e7000000000000000000000000000000000c737cf78b10e82fc0cc9823891f1a5f1e9229d61e8f369c589512d01e5180246db46e4f09e811464c6e1ad930226d390000000000000000000000000000000016017354434899e2285da6ff4b27fbaab633d962197d2ff4fa5f688c4a85e1817434cbef13a6b018df4e359d7b9ab7cf0000000000000000000000000000000001433c364428ac69ce4f5678aadfed4e6d076241519310686de01572da5cf78af4a98b3502519beb0dcf04b748d08cac5bcc597c5ed7f79173942a0250e618c93cd0917b37b5f354d63a2c02a576080c0000000000000000000000000000000001f8b803f3f76aee9825a9a960cd2f9e8aa931568b32be6169036683b4e6d8c4abba6bb73b137c7c6d6b6ea92f2023ab000000000000000000000000000000000fe9edeab60bb55990ad2c85c8fc9341e81de54324652c08c615a745813f08153bab3849dbeffcf4073f087f7c0cf0f6000000000000000000000000000000001955289b1210fa31542bd89f95188d60751b32e8d54f1d4d280975850e57db7b151b872bd431c528c22fb89c9b8784af00000000000000000000000000000000079c8a56c72adb9fc9baa503db394635abb10264dd43c60f2c82d041d43240321ac1028688d92c4696395d8840d52f15f2613a8e50fbc6683ecdd7c7fd38b4caa8e5dc9778909fc8680a58b16ebf40da0000000000000000000000000000000000b0fd79e62c6129fa115d821b8f2a58a4564f5ccbb14088f59d5e6a17a64e803f32bf8e5a415aac4d6491612d95ee8f00000000000000000000000000000000008d837b6c70468e1e10f6b979b7c0694d65942aac48b5baa829c191579186314ea35fe440e6d843fded02b95f9816890000000000000000000000000000000015a05bbc4607b113b37dc0b4b8add23736e0f1bb1e48aabc15500fa6941b17153918d256b6442687a432dd9ca9a198c70000000000000000000000000000000003546953d97306266bdd359d4daa939e05c0466691de59d2dbe3584e2ebfd9a9e1516cdc9cb643c5d31731835dfb07c657a747bc919991ef9b7b10388bf3f301fd910f807ccd31e322be46580a71b7c60000000000000000000000000000000009a4366299290c3c6651b22865fb22cc972a05ca5981f5682574851e41096d531e375e981c4e1b1cbfebbc70a41bb6ad00000000000000000000000000000000001e6fe2097fca2afb8385a3100dbd5ee1b7ae972e06ef9f5e34eb9fbdc65455e1c822299e06a9dd5a3f71a0c1efd44a0000000000000000000000000000000005ad2ffa8861848c46722a7924ece68580fe44e03157c982b7133361e974b59dab7b75358fe498fcde9f68b5b99f23e0000000000000000000000000000000000adac33e0b7e6740c980a4f297917fc4fc13f53a71909f2eecd0067656c6f82c3b371cc638509151bf937f8257aa415d86ba09829f4bbb383e2e131d554c42edf1065022975655c07df2b3445a3e6cbb000000000000000000000000000000001462d509503d2c33829c3fb5380199b79b970c2ae7f944e54a6d0f0deab3571976916cfc311ea6ce6128c467665fbbd10000000000000000000000000000000017f6fe356cb0dd5bddd489c26669f0f365260bb48a5f862e9bfb778a7ff5392938b905759718d050f7d93f107236cc75000000000000000000000000000000000d9b3ca93c5133cabf3d3daa565bc6b51e63b7e37f68f3bcc43b9b3ee7db15f8bb33052eb7e332ae3e9ffafb17cb77d60000000000000000000000000000000017d6b898d9799385990c9dcc3f72ed93333486b98349ef106a230a71d768b75cf56cd946f5952075bc41f26dca9c83c003fd5e91f590fbe171aa3f006617b20ad645626c970c2351e048b2ac3773213600000000000000000000000000000000158e5e008796c10f6050826c29523864d06e68977cdc95d281a8606924aeed0b475ab152bec5bfca8e0ec53691b307f50000000000000000000000000000000006fe8e75328c067546eaba93f4be2b15513bae4a3458112c3ffa457d15c23636816fb469f071889380f31870d713e949000000000000000000000000000000000b9b21cd58f8742ed094e9b770182f6f3f855204d869e53c02d0c242a133e957c53c9fabc827d6379b39541170be313000000000000000000000000000000000014eaae1f0789f0b1e8ad3b452b4ed3ff87bed49ffedd13c8c35c35668c33537b63050c06a5bf3d88d516cddac13b4c935ee16785c004dd2a01920c52d3244e2160fec2d17a519974d4331527cc627910000000000000000000000000000000019f976b3584ffc188424614fd287eb79f060c55e9b3dd2f3eb99760a7cb5b70e2b62a0895b05e7cce2e390853fed61b3000000000000000000000000000000001117181241fead3865eba4804ec2c14f571aef5351d5bce29399113d007cd4e9c262af1c77daf9183346153e562864b2000000000000000000000000000000000f823f71035a4870be2ef20bc94e97d74d18c0a1be9895fb27c54df1f663df6f9e6e45ea5fe4502143a84c05e517b02b00000000000000000000000000000000141250f392fabd4566e0cd3a472a4b2971a432a3a5e1d9c924866c7a9516322bfa691e9dccdd5ef14c561bca6dd70ba204a6d6e29336015d99e107cd312e300bd54f815c785f6008c47c99fa008452700000000000000000000000000000000014d6827b9bc782863491bc7c544263f58dc04c18e08a87ca2fbb5799c4aa70bc039416a85dbba67dd83bcc27b70748670000000000000000000000000000000016c2816e93ea9d4bd6e42a9720cb89d637d88e00074da3300c6409be98a03403e9ac15f83167cdeb13800ad174ac47f10000000000000000000000000000000002aebc0116a62f93a6e86c7fce86745618e08f4aa9cebca7b520e9176bcdf1521cb2bf7eca7f7af9487fdc82dce76bb50000000000000000000000000000000010684e3254207c4ccdd49e4775198df981afcf7d9f89b894e204c5dd84ef42b89fe3e2f6b9278470e6cde4d3f4abb3b003f9cd3873dc6243748e16e4806f8eaa339edcfdbf4408a8e41a3df80c9816210000000000000000000000000000000010ab1d5494509060c9784b4744a0572a9466d6c374524a6d338ea12ac5ad89519217c462c3487e398325439311bea86400000000000000000000000000000000197568cb53ce03f00aeb04278f355da862be757366dad14ca6d30b3a537df9855a1196010773768a91cb4bb664a34f0f0000000000000000000000000000000001fee249315794d30eaf929f44b99e07927194c6015ff34a4530698d7d68239240c9cc48530d52ea06218a826a655cce000000000000000000000000000000000645b5d701bf3422228576467120935f014c754dd68bb3555b50aff5ca04001a26298982c97a64469aeac3432784efca34135a2e7853c74725bdaee1ceadead7b4c7d729650df6544bd525c05c94234200000000000000000000000000000000113e17730f8dd7258157085c30cd9d1950a26c848b55e3a8a55865eb567edecfb09f32ba27fb3e2096ea00c30f31ced8000000000000000000000000000000000076db9ccf8df9530b64cd43ef7b496d1f432885062406028901bbfc5882fd12533f84eb12aa2ce8b7adf9dd980db0870000000000000000000000000000000015e487de49f1e494ce9907cf0ed31fb0a159c5290538ad969b2c8a504986dc9cccf7c74a61f622154e928aa2dd689c0800000000000000000000000000000000195e887083a98fe3f50a9ff4b342e004398cdfee55c4b02a4db0f65a77d3c0b142a45201674726c96d5f79f8604d61860033fdcb731830951dc3c4b33f06310eca51762cb7279039b3d7d9ace93c5f2a000000000000000000000000000000000d80c7e50973205585b20a068c64957cf4572eea40e32ffa8b759c38c6ad6f4468421f2fd6a6f5da1b0d008f625b3e6600000000000000000000000000000000009242dc1de055aea82b3b917f88b6232c550c3aff41241a7e54caab4c234d29b5d8138968846f7c754d73ab3b4e7913000000000000000000000000000000001188c31a9d8359d737576f4ce7a7900314aca0eb3b51baeccfdc9245bffec49143a11b3331f9126b01de0c307aa4e44400000000000000000000000000000000104ef4835124fa6b30dd551653aca25db5a544af6782cd0b1e7d26178253e0e33cda77428fc1dbcfe6114a758cab5c814c8112ebfe12bf44e84796e8b0cd03a93d2164d6edf1f06a5c520330a177da87", "Expected": "000000000000000000000000000000000e79d18633c18ac818786bba87d09c9bb1571e179d8769f8fb82e2e2b7a6a8695c1f4f06deebcb84524e8facdcb49d0500000000000000000000000000000000149d0231fb030a1bec170decd307c10e72cf1cca55c8a1b67aa94ce61e4c7d2ddfd0b8e71598e1abb054355dbcac1528000000000000000000000000000000000090f5be784dbafb0a8aab1516c773720341de6176017e0fb43a275d60de54c1189144956d4876d989232b362b90851c0000000000000000000000000000000019dba28eaa6706361f285b3abebef68f764204c74ee93ea011db01c19591ddc6f98799fb3026c3c223effe4489a7c676", "Name": "matter_g2_multiexp_19", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018a6a982acce5693e632901f3136eded40071e8c7caa7887f302c32621c5bcf9478991ca519978b52f8f69415c0d070b0000000000000000000000000000000013420ab920c8ecad5b2f9aaf9b0074c2386b0b08c81923558770d4c4a6b206a865af8322e9755706cd5e595bf0ffe564000000000000000000000000000000000c0e5bf5465d564e3ce86d6b742ca687448e6952439b1ff44b86ee6461464e07f8039e8ae7a301c6caee7eb99e38fab10000000000000000000000000000000015eb8751b750af62f57971e88b436658758bd5712f98861fa07328d2b11e8725fb55a2a00252e0be06b0c73aac0f7b8cdbb32a4fd8b9dc58a382a7e436e23f49a134915372553eee8c605436221acc80000000000000000000000000000000001328927910ab502e573188271108706152f562b1d5f6ec074f8f9ec5eaecc6cd5e8284a060b65d26463d22c8290ea4ca0000000000000000000000000000000005a1fcc348122350981dd5090c865a2aeb851ba8b6e0443c32f48b157ba673ae5652a70390888b3458afe6fe975321700000000000000000000000000000000019edc749a9799c8d3df75d4024791943a8fa02ba0cac90b6819f0bc42687b044457bc7cc6073506e8fc19af37f224624000000000000000000000000000000000fff20fb2b554b63758963c1583b996ad450cfbd5ca9952e38f38a8994809096086ed86311f7d73a0a5898ac261ce09e57df9664d3e17d9d46a886efde4e37e38859893113558843bc019699eeed8ec00000000000000000000000000000000002a7005dd32bddf1031f27c2ab999604c048a37c39734db48a30baa86c61ef626cf82084651ae9ba8a265333060a408d000000000000000000000000000000000421bf913a25108b8f520b2becc6f8064029dc046d0d5effbef31f0af59eee71cfce83fec8dda7983d50c6d5cbc8329a0000000000000000000000000000000016c75708f1dbfbeae3b06e5e9a7fb676c27100b99deece14d979b32a9c3cde6e9e96c8560a00aafbe6e7decc84e7e2780000000000000000000000000000000000ce23c27b5128bcffa424fd1d181d21b06b77bd6549ca5eba9a28cf18bb9a979270f6a5807c640dde57a0cd4f3af8cbe2b433b7a95c26e598002cc00b7904816d59baaba79bae7c6a7c26dcc48a487e000000000000000000000000000000000690c7ab321c0c93b5ae4ed77843ff4030e4ffb504c685d28573e98836e8e56dc19d662ae9f496a346bf2a8be5396741000000000000000000000000000000000fbbe3861a8d202b10801cdd606b50db0ad6ec7b923b90ae81ff5443676c3399e249e9efeb47b72d2b0a54cb0594686500000000000000000000000000000000148a27016968f0258e5eafe0a8182c22091873a5a58b27aa2160674584e06d5b2f46fc57a00617af18d0688df75294cb000000000000000000000000000000000148449d00b3d1b5b43b08a0c6e909a2d9c66920b60224a2c6a2521f0bad35b99e3bff8be0effb2f7f34438662d7a4882897583b53567bcfdbc63ae3e864a9cda24bb732694a6b27415c5212c7f45a9400000000000000000000000000000000026b55509b81befaf6baa682a3e92a0ab423fdaa84d2897613fd31acd9e1590f81581ba0ba87d68af76b01c36093e183000000000000000000000000000000000c675e190570bc5173b8f508d5bd2768c83e7f56a08cddbc636792dd75386939942827617c4aff8628a74b74195adea20000000000000000000000000000000014f59f38ae9e77f3a76478ecd47f32200567bad11f191d303cf15d7801ae7b5a3286095fc8726acc9818914b27a776bb000000000000000000000000000000000da89fe9493b2d9d46596d80162f5831d4fd8cbb83b46e84e95d5d684eb927022ee62ebc3519442007fdc543701f97bd2f7ff17e54d759eb9c51e16cf6f12d645bf2d091427416b4edbe1dd21947b4d900000000000000000000000000000000170e52a240a7ccf2d57ae92ea8dabe62ca4b458a5da42319ae89cad22ebf13541b0daccafa1b1d3cfcffe81b500c4cf400000000000000000000000000000000174879425f3bfd40fb74a88e3dc578e45b0e0eaad94da009e4076dc42d234d78248ec3a035666dd6de235f87e1a47bcb0000000000000000000000000000000005aee47acc3260d11fe0ca16050a29f92763b3cf8ac78da52b3b2b3e26d8ce7b6ccc187fcd81695aa456e9b94a84269b0000000000000000000000000000000005eb297abf35b51d57474b4989dd8f793005bf8e82e49859c41b786ae39217b2321299829198bda4aaa261a2723d43d6ce0a097efee666c22d1dd0ae8c8e11283aae781e1deadceb3ebbcbc5e5280a61000000000000000000000000000000000e49e94cfa35d8ade2b76865cc8be04737d00b48b195078c8085cbe782232a544cdb548373bd8ad0282674ba5c96fe0700000000000000000000000000000000047d59661f095c41bcc27da5f260f13a3fce334bba216b45df548894bdebc691fe779ccd63d99a9872973ab165a90c01000000000000000000000000000000000772e9a9c22bc7352fdf74915bc464de99ecd96420ef1af6e8bd5a05d73fff89c78e28eb340d4967e906f28afe1320490000000000000000000000000000000018bccff27bf9d7cb2159b9f2d1faabbf8591b53ca8e67e661d9f44f6dba6296e3e46ac32c50128bb5fb076cb8f214e277b2baa349884b54b542e3993210ef002f70c6467c7d512801f0003da789c00580000000000000000000000000000000002d947e728a3b376de520bf78e56452930de42544241180906719a24d72df65f8250402ccaf14d69935b1ecbb0b4d34c000000000000000000000000000000000d5614ec77a9f31915dddb3e4bb533db001702891a45f0bbac49e73d9c19a235a00442b52d452d77018f883706a616f1000000000000000000000000000000000dfc6a73a8e36b7b2d0614b1c6f7bf1ae284ed740c768f08416c0c09a601fadf3e4d7b17a93601b1803d19a04ccd570b0000000000000000000000000000000010d6a8e4eca2e818d6dff13faf0fae44a7fb90be436a9ef3aab05515a35cebfbd53e9af866cde1745f0e2c3b045486dd2b94d087c3ea101649ed57ff308dd3ae0d25a1ad8884763cea1b0b7c56a3834e000000000000000000000000000000000d6c5a6fe9b4d4580f8e1d89f0510bf5dd04e113d6ae5db04af2553bc0eb3a32fb881300f638fb33f7c4bfaa10b063660000000000000000000000000000000013e001b08191707ad98e21b3e0830286c6f3bf587b971dd4ce39e55f06db427676626a5c31c4a67a996a5725ec8f402c0000000000000000000000000000000012f86ed85113ed1abe9dd3826423911e63df0dfb51ad3d1e0e0318ae95991a6a11150176cec77f9c83268a322cb7e934000000000000000000000000000000000dda719cd2cf1aa769f94c21af20ab076b8f024e0a4903e38ddaca21b6bcd6f00baf7e1ed23259f135eb8bcf9c3f97c44f8c35b920a35b71dcf8d15a8a826e5a7c2a2c4f1ac2c2e3a6d100363e7f541800000000000000000000000000000000195ccfb9038bf9e637b88c83c552ffbd562357792513b15f703bffbd373ebaed715a6772fa7e6e5678c2e6422811dae1000000000000000000000000000000000c5a110f31d71b12cc42974003ba39d99dfd91769c2e93393449083a9b84d31473e3a7dff7ca40164e6e7215b03f44ef0000000000000000000000000000000006233b2dcfed96559b565928a494f2a50c2c375b3d7c60ee6b286c538f4fd5ca6f8b2a61654fd04d679bb3e05b9bcb03000000000000000000000000000000000d42233b7b5ad809c735c89c455ba1e8fbd623e1602bc729c01d362368666e4f90e7b076e32468041f3f5665c6fddb0d0ae6101fac82c10267770e74a0ee16b5be6eae2d455d742303a3c624d52aa726000000000000000000000000000000000f6d53de4f8b20de19b2fcbe8a6b8b8ec4bb801bce7363f89b133532ca7ce4925312e23c618a0182d158037c0d0bf07e0000000000000000000000000000000006ce094e24eb14b9bb1b4a1838d8b6da5f53b5c5799ab8dc8934b488cbabf698b99abeb016259a4e1b0f626d27f2c950000000000000000000000000000000000874aec7c8ac360e3980a6e2cbf3f7468f1df7a8d9158f8bdbb0f387d19f3b05326a081129576251ec41a926f670e58f000000000000000000000000000000001711c9b2ed7e2f789b29073f180e46d0c373d6e75c587ece67b8aaca1e9d9b43a96d04dfdcd42f943eca48e240b72ba8002fb31d0372e7730499b26d617b53ea04821c6eae922326d755a0df31b559ae000000000000000000000000000000000e8ddf88269aebf190bf9bd7a8276de92ff6039e479e42a490fe4ef00f646b049eb8ec4b8e073caa000bfcd86ee8724a000000000000000000000000000000000a9623655c0121ea0575de714e53c9e304fa3309f00828ba0e786112781a38bd458cd67864ab17929448171b5937c1d900000000000000000000000000000000198fccc4a333322599697e904e9096240b9c54f89ee6db97475beead62ebf730da1a179409133698ef13abe1310689270000000000000000000000000000000017b059ac08a3fcebde5888bec4d7cc2c70b147b3b1483fd001330637ff1c036faebf292801204bf2ba49350795708dedaa846e68337f4e9c99dde506a3af792732342e3b836376d4816557fc1fc9b916000000000000000000000000000000000a36274f33b4dc09e03a5ad648af0913e5ee95af83df8b4f2a158456aedf0a0528f9b4832b11162dd67e4d22b26e9f940000000000000000000000000000000008ce96d8bc0aaf2dea732dea188870d398b1f3c266b9bf019e1046cca05002416c910e02e998a1604a17c333c65c99a0000000000000000000000000000000000c1a0e4a80bb0331a94ed14570053f941a0438794e6f19d976cc62b3806a565697720ea03c2531004f13453991bd99bf00000000000000000000000000000000184bdae93abbe4d931a6a51ec85bc330d6181da2d34f2cc530e56b6803515ba87f5719fd6fce6a1a8bf1ee5a968bbfbedf9035283f1afc294ee68b2668870aa45e483d208483d9e967b11990cb55d8600000000000000000000000000000000016c3782daa55312a7cfa02c3be73ed75f4b726df5592351fffae19121b5cba73f427d35d5a2df7c63e2a5c68bf57f3800000000000000000000000000000000018b608343616eff759d512c97257f2103cb0909afb4c24a1cc9d8204274b7c9ed51bc762a6280e223a6116a9b23d1f1e000000000000000000000000000000000c687c11a879ec285180cbae3d2e4219df4614e238d4cbdff148ce5a8d21647c489ade3bf6f738052f149fdbc76c8bf6000000000000000000000000000000000936b34fea3a2633b9aa32244329891e332745876d05f95e4efdef859b23ceab4869db562555e5c8edce87a6fd075ae54005df80aa522e889e7720a9f2e44e6e7e19c3160ea282ec87a4b446d7b1c45f0000000000000000000000000000000000d4636a5e13bb59878319af6bb7c98e5d247c2c9cc970b9cec98027de2d4a8ad12d50906fe302c3d055c499a3742ee30000000000000000000000000000000002b0214bb1ee887a7ff10d458fe35208573456f685ee2fb93bb470762c9e27595cb00f2eae7574c8467e417c63c2a960000000000000000000000000000000001710d130f91861230562cd7ab87984ef45916af8e1168fb17b9765183d9d3f9b2c81c649687842de495a757471e28067000000000000000000000000000000000dd15fe505b1364f134ee77e5e3c1a497a20849b6ec7e201813677a1569a9f5a9edbe3df4c36bdcf9ada139b20e048ec893c9daec43032946a9e892dce960e07d29b304000378145148b9a24afd151570000000000000000000000000000000009a48d7c55d24ba49f890791d0f6a8a5ae08a19177575dc0d734fa37b52c3adc45b31b5e485a5d4a5533470c3549f5f900000000000000000000000000000000090f680c6fc1f0588add04ee03bf821868b1ce588e3ebe384dae657ba7885ef74da0bdc98d9d9594a9b979d5b50b93df000000000000000000000000000000000314f6aae1e99dbe3ea9ef85db7e1693a30869f48e05cdb073bf8e14865a671e75abb875d1b41f13d4eb74fc802299c70000000000000000000000000000000013c698b76dd68d1b9ab41672c2b07cb9a63168497d1144b51509b602c5acd71ca6cd049616d949214d95ab7a906a8f8bf685e6bb7713f8fe202c05dfd18003eff261456026a5185ee9e68aa821fe7c5b", "Expected": "000000000000000000000000000000001747f6d3154e0717435fa023754f115ce2a2b3241b62525cb2833473d84a8ccf4c95e3ea030f2b8b0ccc61124095ac86000000000000000000000000000000001827ed7d84a61c21268857036e91c732b304f609f285cdc4736c951fd8954b10267a8505f25d8be666792358632058b400000000000000000000000000000000121ac61f59051e6e89a7c1e2fb4df4b3a5b7773f46495a99e55348454e1d9d42254e5e11b841a1654ff9c80b157389c70000000000000000000000000000000001bc60cd06879980bc6ef2ca109d31f12cac28ebe4d2a934076d720b12f430e1bc4d4260f40045cc7a862726521a69dc", "Name": "matter_g2_multiexp_20", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000012a6984f0f8967c5ae6b13569a62095b5fe61ec607daff1845961bdd827c00fd56ef864802673dd21d90560fef6cbea00000000000000000000000000000000085ececa080d0f4c996d46c80a1fbad2ac9cff8b3e324aabb67182d79f941927050f025b633fd5119f30bb29b8e4b6f2000000000000000000000000000000000987518a5edfd5ae2616fc60000e117a4f1dd1db68195c3fb68d8cc639e4200945b2864d41ad86fb3e11c504fc1f9766000000000000000000000000000000000310939c7e11b93e5773cfd36fa70020c85396e525840742f994110e20019769abcd339db6881291639c193b987b68ae94b3c88e51af5822177b85978526036a426c9ca1077d594618ebb8fac4cdfc89000000000000000000000000000000000ec6922dfc74009c3750ce2540558c7c1e05cb45a5d651b96427c615d8fc563219215a0ee431c0a4827e40b26c4f8d3900000000000000000000000000000000040a4189d002a0e1ec600e71303575e82414e6400f06b9abf57151a28835d454f56421a6dc4049902bfb94dc0e9967ee000000000000000000000000000000000dfefc7c163c34cc004e9d97d812b2717d4736d0d1c722b6bf1a29676a32c8b46878d05a2d137cb7fff5fed8c0f02474000000000000000000000000000000000e3f0c9cbc778693c8ba88af8306d45477493ed6be1bdd9c81c65341239eb510fc948142cc30b73f570819b38f13e20f6e456b39f4efe6581657f5c701c696fde8acb59e856943f15cdd639c1fa68ed70000000000000000000000000000000013705ca4ecca16559713df65b376c7c5825b4f63d001ebbfce9cd1b592af5f2ddb38ac7c5ce3c5f7af4f39f909887e8b00000000000000000000000000000000179efff38ea1044e91ccad467cd2b49438079ccb4d0fc692e79e0bc374abe064fb9979c4a1f4b92c15cd1b042b501d5f000000000000000000000000000000000b6fda2dbf6339af225515681184843f1a9bcd72f7b1389f186f8d0e048ac16e20967c28e087cf09d7bcac597a85398d000000000000000000000000000000001946fca8c816e1e11187aabc40dd2436533d537ce4639eb2d08630ed2ce402c1806b6c2b3e04a960408fd4d2049849bae5d306f46a31c14de7b2940104d0a4424ebaff805a81f1c4a910566057c81604000000000000000000000000000000001802064095d029d3897725eeb93ed6e3b090390769026120aab6977d0de264a262aa312c5777ba322c9eac29e5396fc6000000000000000000000000000000001410f17820941e6a67b1b4993496cdcf0d4fa2d4fda3d43ee985f2606b1408aa9c9ce412c80c90a0c876cb5ecb76878c000000000000000000000000000000001514e9b2c65ca86713447f2d5bb8395fe8552e059829afc68bc43ba9267ef41ec6d69d06e7407a731bcca77ed5d9716f00000000000000000000000000000000025b5bb18cad46179fab15b2ccef17858f9259a90ea4548852b8c6fca69f0ecdf0b175669bacff1625a7143e762514194ff6d13bb0967945ff3b6fbbc104296805e4fedc3c25bb55b75cc997834de6b700000000000000000000000000000000146eaf5da57b6ac788f8caeb4b2ebf7c8999e03dd839977046ca834fffa7e57cd949e3fd44999a007b5dcf3c8621ba2f000000000000000000000000000000000d859632d3424ffe4227ae14856e05c4e750545cf276c97aa9ec03ebde334144eea670dc68e92b61fc775e477a2154040000000000000000000000000000000010b44279c0c80886e52fde5e71726422da2f9457ff86b21426d80356fad95d5ff3a7491002364d9de5ca99c2500f344d000000000000000000000000000000000851b769a691f0ebb53ee3693833881fed8dc6d9e5f1dfeaf4ab1aa7ad54e2fcac246b70d81110451ed78044a98d1547de4fb2dea292b76d8130e6aa8aff5edf0097de935b252d42a777d4d9b8615ef100000000000000000000000000000000131c9a76109929fc977a0a6eda0a7c71cfc744f5f3654e2221ce84c70787598e24c5d8049f92a7c4d78fdb869cbdd1ed00000000000000000000000000000000049872d2c7d472e090d2975daa64fd96f33e7f934e739633b1d7fcd5e771673ed8820752a0d5c8b0c6933318293a4f27000000000000000000000000000000000dd68fbb592a3957ef893180dd758f75978042add36c91b7bf87c4493b0baa875e1854fbc09e6856688cc241b76ab5a20000000000000000000000000000000006143699816cad8ab7583a72b6064fadb6caeb51c8625ddbf7b2911426cf438534da1bdd13e22cd545495c486c9733f7bac5c50a3a8a37111114c22839c88ce4072940c06f0d8b6d53fed155d0399ed70000000000000000000000000000000006c14301984607d569ad1bd774135e7c9e328be1fe54c3b543276bd06bc0bfff11f299a5eb43b5218c3605011d0ea6d80000000000000000000000000000000012f0a848022f95f4884380a5b8e3637a41e3c399a8d2765aada85dcf4b7c2b559122f792850430681a58ca153be2768a0000000000000000000000000000000016b4cb233e1bd59b7b362c64620eaaa5029c173a05e2278774ad6ed746c70a2f6e76c237182f5d9d790966ae69da5d44000000000000000000000000000000000c277d54a7a72c8528188f6cf29d934cc66471607e5e30d493cd11be6b203bdf734aaf37b686cd7101e8599b69446991c3f37387bad1af3a896a7e66a80dfce2df1709fa252b6fbe4334d02bdced432900000000000000000000000000000000169a3928266375dd5793b7504727f939ef0ed52d69e569b1b75a0e094698b37bc70472578beaeebfd0c3df4bce6177810000000000000000000000000000000008936d470dbb86db1567bb2fe7c09971c6d12b07208d9b1b403c20fbdc05ef8984dd576457fc6989470e40ebfe4ceed30000000000000000000000000000000009cdec9d80f2bf3ebfa9a3316e4250741d0d089245df2fd3c9bba4bac1c2dadfe212682166a0962f78c4bf25b618da900000000000000000000000000000000016521411286cabf3fa2c8f72ca62ca311738fbe63717fd12916a4c9e6af9b05d1f5d65cf60e84d9fc5f7b7645fe9bad570fbf5da3959a49fab7e97b3df3f2a38d16d714dd798a1f04ec2cbf84fce76910000000000000000000000000000000006a827f6149a320a74d9d8c1ae8861c1cb963b3eff899710eda642dae6ed4dbc247a22131758d9f843c62710ce083208000000000000000000000000000000000c83a9fd96bcfd4adcfc6d5a47e84108bd763366e91bf06a7431c6c3a107cbe5647da99ee6c1e57c376d366b21a923df000000000000000000000000000000001604d5c0364afb5503b0e1d52226988d7f7f043ce95e7c0a09d7f96e24a58f089156f0e6d19022138170c1b4b7dd33560000000000000000000000000000000019a11c86f78ce462f46e0462052cc3d342596b329fb62a282a59bbd64c345bd266922b1540e40aac147681754643c2e3e538bcefab5d8d0be5fc143e632e86fc065af3f2f621f293b914980abfd6a0c70000000000000000000000000000000015635de295c16841bf44c73639f047f735175e8906301746837838d124bf0d2a1ebaee142393ce9a0d58107c7cb036e90000000000000000000000000000000004fbbd4252fb901d0737d1bf4da62010c06d690a9584c7631ef5d36f1d8c37486a83f2a1e2db21f05c993fd117c662e8000000000000000000000000000000000f4cfcec1545a08e0e0298753ebcef5f61bfdb7c1b9af71cb4c2f783e4fa3948945d357e8302d99aca96df0cb0fc01a3000000000000000000000000000000000f543dad6d4b797f6fe0b00215a5f70f6340ac6bf7cb0bdfc5bc7698dbf0647e4098413dd19ca7af01685edaaa190c6e30b921d8cd2ca46aa6f3e0dc6ff08d77972fb0a248bd39e90a1e9f32be9e892a000000000000000000000000000000000ed552e94021d0912a0e7563462570cb572b189569eb847bd12ebf976d22343b9ad04d400ae98fa184b10ff36720f12700000000000000000000000000000000178727c3e6ff33be9894ef26347b104023ea0bcf79c1a33afc26ac0ee9879344964fada757118829214cfcdbbc0c5a30000000000000000000000000000000000b0a6a575afe5b0c1e287815612fdd3838ab39e8ee7795855837588614715f6687910c42217ad52c1b8721a9e1c908dd0000000000000000000000000000000018cdbf244c78cae1993400ae164b42c09dab4d8e3707a69e25ffa8d0b96b8270c022c0375f933f16f45c9274132a0a633a5ccd9436b15d4d04a8ee9894c116190062c4e7cfabb047b585f3aa1eeb460500000000000000000000000000000000070636611f903f55cc9499481bc3415a6de62d5e6bf8bfa82a8ce665f85bcf01690118441961ff46ff701e361db208500000000000000000000000000000000013d22dff8f6f86f659ad17ef91d90a70c180538f03e10de20c445d22e637015d51a311a3daaed90712d04c9a3d992d12000000000000000000000000000000000db3535057db95fc262f8adfd7f08f3237fde5f0e2aab589d4ddcd9c23aadc437e13644dd3b3534dcb17936a7c610cf200000000000000000000000000000000044c177d4484c07fb04d1dd477b188a2c157973cf26075001d14d2b07ebb9dbf8e495dc23b32a2419621e1c129b08c5ac7a5bf2cfedd7048be7ac7d2ff19d4f8bf0a94295ebdc5e792393e0e4bc27d56000000000000000000000000000000000e10fd069f2f5fddaa0112e70ae89d1ecf034defb24e2923731a7c0068780177c186fde92a3c254a1cbdd255111a4b7c0000000000000000000000000000000018363e01e86e2e922ba435651ad892bf9288be14b54dda821c397ae6167f9478c8132e92b1c2cb0c4037a4e020f08291000000000000000000000000000000000301b5ad2d5c35ebdcc7e7cd1ebf0405cf204d6f5e30ae6f46d20534eb6d7013682c5ae1bba76d2811124ebded0d2a590000000000000000000000000000000015fb3a8afad778031d04e094cbde5f02dcc89ad7b7d452c6c8f41be336a4c8b26e75cfc685b8776cbe5a487f09c304083563651d5f5729a0ffca6b383d884823aa3b0215fa057bffd8142199a16e4ffe000000000000000000000000000000000a7880b00f6a3e959ff1bd207fa503eff6e7279e701e37b40735e2bc8bf49e355e92edcaf23aa3654bb26fbfb07b5fb100000000000000000000000000000000113d9b792f4e3dcd958664a8778dc4b177c430d8db9da7805595e40293ef2c0a40f7a843bfa70ec134ed89a453f9da50000000000000000000000000000000000d7f92148dca4a9c96c47a0eb284f1834cf3d141be7c0d9a7a060af6e28e45620d8255e465e9a0d8f78b2ffe17d6b04e0000000000000000000000000000000004e7917a8f3070c656d324c9a816236842fbd6147d326652667e7bca0666d214233ed136dd9464c4ac619d46c28e2393833323c3a668541ceba18375531c3781dd98525b49dafce4c4b3188c90f3f4b500000000000000000000000000000000160cb05390b54151f6b154b396bb400a91fa83d77fabdf31fba349d1bf3b5dfb6476ad4d714af2a2963e41b077bffcb90000000000000000000000000000000012885f7ec8e780cbaa90a465b5706cf07d45bda7755ae3477c79adbd7956b926e0ef5303fc13f0b97349ff8b754dab500000000000000000000000000000000009ad7509e9e7f5018ae3d1280e881ec12129cbf825cb6606459211ed7b358a97cbe430e94dd9f5e4f6b74fb7287f862e0000000000000000000000000000000014d5d2ac2dbc3d5a061f4e52dbfa68e1eb1d3c818ba26686a3171e310c63cfeb188030b83407070019dc5c42dd079413d422e21fbffa7d55270eca9c96bbefa29dd915aca266071673e970daa0ca9c050000000000000000000000000000000008ee93fc610712411634079be0bd96c3969b48955fe5478b7a31c3ba7639c18291034167eb62e6b15c16b0dd5145edf500000000000000000000000000000000158cb1731b71905d7b958c5407f090a2c8a9319017719da143a3f4f3fb3982abb83b8dfe14facb014321b4f5edb5e41d000000000000000000000000000000000a9f98f775f06055ac1f137cbc1f95f4afa0d1c4935f536ba2e0569d874d9d76b7b86f71afcea07e2e785c7a6ee1c84400000000000000000000000000000000072f8988dd1ab0fa8037d3620068b34848c65e20dfc90612d123b6f9dbcf9d9d699d5ea73739d31ad54c22116365ab983ba7ea9ffda87131452b24a9efcdc91d1262d0d7550e5a6b787eace3577159b0", "Expected": "00000000000000000000000000000000161203d8db1381722644f87b04f47e4be2ea2bb105ea0e67678bc8d29f8a8a3247f8c05e057af8f98032faa93d896aaa000000000000000000000000000000000d3af4842627a095a2dca99b52d802b2ef8c8f3d09873ffe39d224333fceae84bf74780956904df6c1dcf5ba31be218d0000000000000000000000000000000001c79fae014e55e5d0239645d618593bfd5aef665b3e636dac5d191a8b88949d207cf0ae9822ce8e1997de302b386b8800000000000000000000000000000000136314cc68b372b06e7771d82b7ce7bfd0e9fd306787e07629f831c7aee853bed80172121949a940bc59c4a0b76f0819", "Name": "matter_g2_multiexp_21", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000099434adf799099f2e6e2fda4c905e1543893462133ba216aace25836db37b3dd5bd80af1a8c31c7fee56b5ecf9a0acb0000000000000000000000000000000008a6890e5bcacc13e116e3fe2d772ff49839803e4f81d6b088ecb7835b1ed44f2bfa04de1d46dd352346cdee71774e37000000000000000000000000000000000e94fe40225e863b7bdfab4cdc0c1c8d1399554ebbfa3f2c95ddeda74b3dff03d5cc78e295accdc9f02f3f89b4953de3000000000000000000000000000000000b23f2912fdc7a5fd1de69c1f479228f8ffc9f97c40845808cf17a6fd8131ea60285640d32bcd64c9be71d419aae82fb16aa2cadacb129598aa459bb2e6b7fb26d1bcb7a49617b6ef8e57018c3db1f510000000000000000000000000000000004c6f5aaac90132b2d0c6a4e70354ed2e724df7c3e6298eb9ae4ea92e3c7981944c89140c52e893ef2edb2773ab36bcc00000000000000000000000000000000021e813378be9ec30395b917ded5a0424fc7eab0abfdcd2328f725bbd6a1dace0a5aadebe40e10470df0c09b3f4b68440000000000000000000000000000000014e3fee16a833f8c543860ca438d763f764f488463601741a2331fa90efce9f6d54ee0fb7978460a1ab838039d398918000000000000000000000000000000000dec8bb882fe6028a4155e6e2bf48ffd314b5519dc4560f8f7410209214c4a8e37b2b36facc53f4db11ee63ff11f9f228c02014d5392d30863a12102d1c9315839b5611dccfdb489207f9186625138500000000000000000000000000000000002d107029bea087a2d53b6b371aae06c695fa85631450f4ad92c8948b09ed568b28948f80f1455cd22e2ad44697290b00000000000000000000000000000000002fab10cdd8bf17a633c8b3ee8ed2ce783f64bf978c384fb7dbd7e4f0da50b65eb9530365d982bcc17ab91a29eabc065000000000000000000000000000000001369237fb3241ac291a868e6f4610a5103d93aa915e954f18bcf348ece1560a12451723b96ad5fe162a6107dabe1c986000000000000000000000000000000000cb70b7064a2f94efc86060431ba4dea38bc64822efa73c76f3a4500ad23c452c8f2e72713b066a45bfa49559d14a719d960ff678e1b46ada4f866adf354ba8c1514df10ebe7d88d2c8de117ef5ea2490000000000000000000000000000000005ebb9c8202cba234851cf5e060a4114c6fee0632f37e0c52aeb852637f362ce64403347d336c32617cc59f23cc7c93e000000000000000000000000000000001126827b6a0a8adb698854c0089276861e3cccfee420512f0966df78ea0d9c55e85a0536f14ad40e649b8fe4384c836c000000000000000000000000000000000998549680649b294d506c529ade746aeb087f75d62a246b7abfb69397ed67f0f2ccb4811219b35aa894b2f87e3fcddb000000000000000000000000000000001027b604f877ade32df8de6162251acf2751a9bd770c21f22dc819a4f5515bb276a246ad667fe7881965f0b083d1f76304753af76295f72295645243ffc87ffc2110c9d8dfd20b464760ad965d7a97940000000000000000000000000000000005d1484bad44069b16d1ef4e9ca1db70ec6cd82eca645c2fbd4029ab4ca33d79780ebc144d8774d82518c1fefaab38530000000000000000000000000000000019abc7063361ed64a5750b70bd59283e6a61d55d49d8c2ea2f1be8ea425f040d3865c399a66c253bf38355360f06cdd40000000000000000000000000000000010a97b13b3b579ab5f7fd9801d9e4fc40f3b2b2acb9f21bfcdc6b6a3168720fd0abc2f77ccad01be6a6e268fddf3759c0000000000000000000000000000000004126b5454050d761047e5da23c0b2f9370996589c04f255a1ce8ef37a3a7c8078788a0125e4aa86aafce8df33f322d3d1b8760cc40d093912fb073c5012f910ae90f0a979cfe6d81c603adbb98289030000000000000000000000000000000017aa7a3f1ebbdec6abe12abea12ef50a3daabbf96a5f2ebfb517885f0b7aba1e927c682b15521529cb9e1f87c59be99e0000000000000000000000000000000016e23f7effbb9dd34ec1f6974115e7f0d23cc4553d86e6d61a0c98f47d09510e06b3f987c5bcf4bc30e20ae9684da74e000000000000000000000000000000000f3905dd4f99cfcfa6152db53106b4d1f6e24518a822da9388d8ca1dd654a4b8315697328571691f105d1abe9aad3dae0000000000000000000000000000000006bfd10d33df9326a55b35aa6d2bc3e831d4c3b5959aaa35613156e5e19343b74e34ed2670c43ba1a45cd3d91f055c9aab79d640b042664b23667d6c60ef9a5d59de72aee57a78d75752b350ce56d8da0000000000000000000000000000000016ca071d741363e7c3297355e49cfbdcf03d419813ed7b329cb2b2a26fc6a46cc52149ca3e9ca3ccd7284cfed97b985d0000000000000000000000000000000018da360fdee88e806ea1a61c01e86687f8e5359730c36c876ad2acb0297bbc1ae13d790d1edaafdaed65db9dac02a74d0000000000000000000000000000000005a46e4572f667b46aee36b8d377c249de25e797b31b822474aa647ee68cc7d40b083fd0a1d938e2b8d85508004c73f40000000000000000000000000000000011701bf88d4287c98996ea561c1ab2f29a5da9138338c7c7539a5fc8355efab6f58e240df4b0e0cb7f01df74bc8010501d1a2965e995bd4380d4ec52fe8e65e7fd99b1ca9f4f0c656adf7051c4b9a99a000000000000000000000000000000000576e79e507d250eb4040197064b8898b0142b3a2551875935f91f22705bfec6da156c7858fbf77028d4a00957553bea0000000000000000000000000000000015d39a325181d6d1a809b1236f4a1ba66a9bfa6c448470425aa5c8ef9fd00b5481c51e8752088dad62e928b3180408df000000000000000000000000000000000aafabc2f68a4933c7d734660e422ba154e37dd90114272e948f79db4ca51d5ca75d504cf74f2dd0479871d69a08386f000000000000000000000000000000000b017c731f63bbaa8fd0b0d9c17140060429f515d2e85a938d10f6529deeae4818c29b9a628802d0ffbbff720339b7bf2cfbf2abd851d2c1f55c56d4f8b11b196c020c2584cb03764580d410d66784d400000000000000000000000000000000028c4dacba5f33ba66368c19491f4baa6aea4f309afafcc8f464f2886b1d05b6397142d02f0295fd50825819621673a1000000000000000000000000000000000849e1b630e8db8ef039f280f8d401957f807ca90479745b68c3db1b5ce3a02fe2c099ddf9c387d7ed76ba75d6a9be9700000000000000000000000000000000013b43fabc3d4df82058db215a69776ed5dfd4c773d7a013dba3b4ef5cf65e25f79d7f76a06ca99132d6fd1fdadb59d400000000000000000000000000000000072cde8eb3d3e1a7f7e4a9eedb8e56f5e103db6de6ccf833f818f02a0706b2043d4ba0d5473bbb6472e8aeb28364e1d8214edaf16742762baa58a3d22d5bb2305cb03a1326adc68adcd268428f82a1e00000000000000000000000000000000007a33b95f42cb1d1ddeff3a199ccfd9a5d47c9fcb89dc09b5b3f59dde2b47d24ff29931920b76ecf6deacd70e83576970000000000000000000000000000000014c0a63e0152f06cfc32e6034b7829f9d9d09aca0a6ef821dc61ae8d99b77d76c1b2fafb2a14938a82ec72c4041ebd9f000000000000000000000000000000001433135cd913b05b3f58b2e9c1a3bbb951d2cf6c92fddb21bd5e1d9c44e464d5fe98f0791044d56e50b81a83ef6cb271000000000000000000000000000000000be12ce3bc47bf69a13762343b5e39c2a2f285896e5d1b73c55203cae2f32cccbb4f7b8230b2026a0c8b2f63db5e5bedc1f38916d6bdd5d379967dcd058ebce5887ef2bccd5fb7c2bcd758e374a195e2000000000000000000000000000000001494984d478784b2ab3ba27464109f99172033fcd5780a48fbd5a2144354157f6fca2d70b15b0081dfd306ab4239cecc00000000000000000000000000000000078aebc22025af53c6542abe56cf72ce5eb11d3f19212a0f7442d0a0df907c8aabe0ec01d1245ca237a691e685011bb8000000000000000000000000000000000415a1804a46f4595014ef29b12d99b89600aab1d98352437ab8342abf479bb2215bc687532e75f140918b3d030ad4520000000000000000000000000000000015e7b0dae7e3e80eee3c7a9ed4c739288ac2192f7d80b2c8cf9934cea5719081803b207623c771051d7694e705744dbf1cb8c8303157f23987f8a2d206f3add697b9d0a303393008429e93cd35711f74000000000000000000000000000000001470f82372e197a21aaf46cb2bd3c0b77c3428bf2ba073311e75eb65471a8164753ff1d989560f1ce477952bb6555200000000000000000000000000000000001645b5e5b4bcb5f6d34ac841e3a80f09a86a5edcb7f2a7e7bf549b022c0073e01be82e4c9e5c8e8de76ba367595639af000000000000000000000000000000000b43f6572553154e2530fb448d5bf20c3a182cc190149d3b1d75b60e45baa048f44884500fd02c434f9f7eac01dbe4170000000000000000000000000000000014adef5a52d76a267f87d9a8b5e9f570e7775ca4f6a55a5afbf80baea311b1866fa0689271799a654eddcfe36a6bb64c61ca9ab9c3df673b7ff8be098cdadd8354c17becdf82e7e99ce264174653007a000000000000000000000000000000000345a2ffa21eb06fa1d76fd81b1239147688093c6a44a40cae37f2af26add812884bed3e8b4643675b1a45320c64f7a8000000000000000000000000000000000c58eeb5ffdf886d6319ead9e6e190300ceb91d58abfb79c0a322de3987eee73ab82092eea8e1249e83ab67e33b303e1000000000000000000000000000000000763a3fba513b6731fb501aab39a4697f3e4de89125c6884f9782bfb73e6e062f17d34555a04a8e2959ee4e1a2ee284100000000000000000000000000000000024180dde2d23cd88cd29c8142d32435d0db57b8ce8e309701fdb963533c1cdc2595e3bfc01d8c0d08d594e096afb34a681a0861df30946911d789a5da1f5b89c38fa1a8c0407b608122a18be05955da00000000000000000000000000000000022d2e7502c4d9587df7ecdbafcbb813b1812d76655cb7f9f57418d5ac83d4f60b84a0ab5b53a5eee3c3954aa9fc70cb00000000000000000000000000000000083212aa1316561a079cb8d027bc8f89161fc828d050c8837a24fca6f7f94b6dbf10d6032fed895a427f07827deaf3cb00000000000000000000000000000000021552b99dc02a051ea3af1b1bbd0a7ef64088c3aef4a58b18a29ca05e1f442f8ea2c8fdb3642ee94c5df501ff6898f40000000000000000000000000000000001015a7987d329cd1eb5f991c270643a05b8e1bc35467130e9f53c5d96fc3c8336a00c060dfa2d3165358b51b6a521e56f0798b448ea0d10c84e2a8896f153b1ac3b84c5fed6a4ba6c932260bf01d34e000000000000000000000000000000000c19c3b9d7c7f520968d8531966cccbe6f0c3fa0938480ca3591b7489febdabd56a70ae55cc309e04d7acb3de6f41a3d0000000000000000000000000000000002ddc64023f0de2730d3affb695927eaba50ecb91cdf1f369a511a8cc8dae8913ada2d8f27a65e75deb9b8b648e4e2e00000000000000000000000000000000000311ef260debf2310fc31fb8ecc802200e11400909eba24b14d9500ff47c1c36ec540eb970c9262dac947b0c2053d6200000000000000000000000000000000199c19645375dea7602b74301adcfd9af259e1c7c20f377fd10d56b719f7a6e0e57d780c976124e0675c2a54aae3e0f5a8b7de8f34053facf1338b54cfbe38dad73121a0429663f484277af9a230abe600000000000000000000000000000000123fce6b793de0ce2d31f2c7c4218fb20f9db68946a7d57914174ea773d6e6fe1fbb1de141c742e0a8154fa1d81a91f70000000000000000000000000000000019f75536e004a61c6d7f466bfa06ad0c9375a1028eb7746406e7c71e551dba249b5c6284f635fe26989aeea69075b3fa0000000000000000000000000000000013088eab16ec77c7ce7e84236337e395690169a4ed7e44e23d233d36d5d25e6afde794cca2bee88fe749851a71aabe24000000000000000000000000000000000e627130da43a6ede3bd6f2fcdf008c8f5c7b7b1fa56cd3b367d3096317948bda115d732346e73b731d1921a1da6aaa18823cdb73dd076ad95679a9d7b11145c12a81b825477f799300d1fd761417c2b", "Expected": "000000000000000000000000000000000e3b85a3d6628e097a3d962f3c9aa37e3c5be43faf2a12cd9830ab33c4a904eda23027735bba563d38ae5ae8b302864b000000000000000000000000000000000c92be62cb091056d981ab8872292017cc22ae4eeb0cee03a60cb5d57d37b264fbed2d752ae9dfd76c0bdde1f1dd10500000000000000000000000000000000019e172b23249a17924b890cda6a65287039d0c32b2c0833409816cb21ceb73ac95928234ccf566287400a2ed7d9de771000000000000000000000000000000001276e206235392fdf65e4ea6210d22eb7afd7783caa0777ff0af719cc1822579d5b82fb4c30f07dffe7d68c649b9e2fd", "Name": "matter_g2_multiexp_22", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000a3d974770eda8c742e5d380482d36fabe18901b0217485141c3841003aeac4459ee28b280550e4643d0f50862bf2e2000000000000000000000000000000000369c2bf3beae4e8761f6c06d9bf5261bbedb177e609c81c9bd81ed0a17573b6e10e7f0512e06109cacc3d483918ed9400000000000000000000000000000000030253d0a050986f49c77ee20ea8e3e07de3ba72c39ffda877bcfe569eeb29598588f5a7cedd9e2e34491a059ac4e707000000000000000000000000000000000ce201f07353bf82ec894ec66c7012d17f3c7968b28b45e88f091510e1646380f902c1c5b036084f9497e9a91476dc2c9f2e54f21b7f2116c30d6e444ca82fe800435cbbd72a98a6d22bac92039c54070000000000000000000000000000000018f493dadbcd93df2c614af310e5aec4fac9e502843b8ca8c3de739315d9e9a380f826e2470c96bffa8789133f458d0a000000000000000000000000000000001768f8c3da107b9ac30a12b99f2f3a0f21483c0be334377733cee6024d85af91b03c7ea1c548b42e7a7869141816917a00000000000000000000000000000000076cfc99c16c270d2f6e34aff84832f9ee6493ab757b6361cc921823fe9c30f1c9b1664b650548dba767616bec0fd5d80000000000000000000000000000000006c5f580c9556ed31847b1a3527ac0b5b5f15b9c9197d3cff061c1cf72dc5c96cb5fe98535a4dca8c4e20c8c02158466c8cecea241dd6a924c9b9cc3d390fbf40ab897208ce9d3e4a148b2c30c25e7eb0000000000000000000000000000000010e2d7eb4e874a9c72a98e4c36701a9fa11051b683ac8ab9ac20d14929d72ff7b92a9048a11bde92dc2696467fcb48e6000000000000000000000000000000000eb29e621e9d0af8f661eb1ba90b307eb542dd84a486568f85e19055bf7b8f0a76d34acf276897a01349eff2c36e4b43000000000000000000000000000000000b5f890f22658b207dea2d721d90a8f5991ea2c5ca06b8d1b293f60959ed424dbd7052e010e594a5ee0feda1e93bcef4000000000000000000000000000000000082cdd4d8452078e8b853f196dd76505ece5e98df3e6a8bbb21f422755af23c5ab261accea48d8e4193d6c884773cf6e428fab2c596f23bc3c9e9855b74295f52caf73cb7371c93c65370583f7fef4c00000000000000000000000000000000077501a457d5f0946d25a4c5eede1b7fd80d90d502bca47d8cc40ab2f9a6d827d7323e7d4035f3d32b02401141f0a89d000000000000000000000000000000000985410246c1db01b42728ea46758906883586cba5618b66c21a3cf58cb98e7c6e0dfbabc5505d1d11ca9d047fb6d25f000000000000000000000000000000001775f4008f688882d02355b6eaa1ab108f239890f71238b36c76228cf2f575cd15f15293a62a72f6ad0ff17d7e8ae79f0000000000000000000000000000000004b6967a5ee180d8b92e95c5ef26baa56d8509e1acc710237083d19269c1c5a1f2d1680e85f0bf040747be1d301300b0f7d3d755410f77a0e4b2fad0f184fa9312b559785fb04c6020432465799ebe22000000000000000000000000000000000fee170589e8a3d3fdd93b536347af5002e59e8ef2ac8327a7e9f382560ee9bc36b3f636a3f99fba8be7b5ea3dfbcfc600000000000000000000000000000000032380cb6c043e3f9ef7169da12df1c6529d776b049c7061df660df841840933e514eb7ea3152ddac38daa2c52d66191000000000000000000000000000000000620ebccfd931eb70ec688110975ea24b7ee0f9937841aa1b7bf4f45af88b732b76a26299f0fe48259fdf08abefb4314000000000000000000000000000000000dee6bb8c198363fa4107996331aac07216b82208242c73736be31e14e4e04d97a56a1c22479dd94997acb0d32abd3b0557b05efdd02ac9d8e1453c82a321d798f3106bd18764140faede610ae01fa80000000000000000000000000000000000eb60e98d6cb4e4b3e58271d47261d05be892eebb9a37f6831ff19d0bf2fc235e655f0eb9b01494868bc082c58ed82d40000000000000000000000000000000007254a64a0d94340bcc2b0142faab2d73e8189dbaf52ad0c3a9206e802193168b8eb03cb18b0e4f1cc95b98b943910db0000000000000000000000000000000001e0051fafaf454072051d2aa9512ba2367778aa1617cecf6a7f989d69c7627c9070c349d363f56711f172d43f5730cf000000000000000000000000000000000f4141c8a45448fecce09908ddb42f7b5f6b5bb53b9e1ede0417bee327644af5c98470e8b5364642fc7435f84be1ab443313884abc4d430c06ae843d263f2efc1bba35f6cc270de05551e1f86096bb7500000000000000000000000000000000049c28e0bc677ccf54f4cb46e953a057ffad624752332fb9ee5295438fd5bd61abd2199a0bb729bb7678cf3077e32ec10000000000000000000000000000000007138a996356ca3f5d63bb5a36dfe901254459ed515e18ec8d91fa747a691b40a19878d9a6f1dc74e4f18374a399d38f000000000000000000000000000000000a621b36a3cf04e6a5cb699fe4ff7fb8b3361207186848e81972fdaecf667ceb35f413bd68772f7c1f77c1d3f43a3d610000000000000000000000000000000010becda5a06f3f077218d4387158e4a1ca5e0ef24d4ed304723ed5dd96da7cc9325f7e4ae16d9d6c348577697aa6017b8faea236e782a8fbe27ab15f051ed007a61e25247f1f259b9300974f521f30c800000000000000000000000000000000163ee307e0d0c3b61ade05a022ce2bf315d820ee8ece60f93d63a150e02be843a2eb2240a4882c29be2c7403932c348e0000000000000000000000000000000001fc8e9ca23e8dc8457df8f255db3b434f52cddaf05819dba7df1c5bfed438f756c8b57442197af18bf83fe9ee2b765200000000000000000000000000000000109cbe5279ccb592bd0b33b1a482df53459c48cd0913549739b784ba7ad32872377c2e3924c4d45064b0cc4764220513000000000000000000000000000000000d789795d556a37a375d83120a022f57e26da6e6f9aa3e40e1f32ed04b50fafc4d40d0b9b20a26e4d230dd789e20823013994f5645c6ce83741e48ae472674921bb2d9b8abb7d04ddbbb85a3f2f7f090000000000000000000000000000000000960654bd6e6a6b2f7d87c3c4d6e3fe6c684a50b62f7acf82a67075139a614c056a41cd49769960e229cf07468fc2dcb000000000000000000000000000000001727f2dbcc8d889127060de0079207eed1e094259b59a20fa42ab2783bfd176da00e61a65709dcd60402398fadf30710000000000000000000000000000000000c17805a01e64c320601e0ef521b6573e9c2eb354157cf0412e5c2b13f826759310907c4b77164f5899958cd30f78c030000000000000000000000000000000010fb286ce797c0429ad3385c709259b55cc962ae02c814e537e5261e897b7ee1b7c660273ec908110f997b166c14f5c181eda24db328588e8c670ab70431ddeebb0749b431bc1bfbd992c91f35d59b180000000000000000000000000000000015d96a0f988f4951206aeda63af85910db49ab817c83e218ec74cbbf5f34f81279d8a3f2fd1f3000f73b8c5550af3fd600000000000000000000000000000000186d2eca1cac226227d8981324859126864b84e8dac563b4d92357591c2416c93989cfd9e1ab6ad257dfeb168d829a09000000000000000000000000000000000a8a7247a3b09583cd2d4949721160573f1f88221e6eae833128914555a594f21a3fb2bfe3b1f01f3dee90f7772dc97d00000000000000000000000000000000132361ac1950756549c957c174cab9ef586eb2057a4eb22f49252cae032975f56eb0cb7ea70810afaf5716afde5b88015bf25b5070829e3d5a66ad24ba9930f3ad64767c51e432b51bdbe2fab470688d000000000000000000000000000000001328e22bb83331adb09dbed0a8c58040a3564fcae0ec85794f26c077de69cc0a7555f011e028879cb3aafac4dbecab33000000000000000000000000000000000a93db348adb3886802bab1e993f5d7275360a5b0466845055d5274e44716f3e1d03a6e1796ed4de4c157dc8a2d92c39000000000000000000000000000000000dc0879a8e9556b7d9b6d5dffce5e648f835f10acad3afca7a73b0fdd5d5babaa74a1ca80aa4f6880d9b015501e218a20000000000000000000000000000000003f7ae8207de4a179ae48cffc8c6e926455e46ef9e109c08be3ae7401bd36e0876642ae9ac4fd75a74c67ffb7790e265a9535c082e11b366cda0000d8ed0f92ee30fd2c4364c163a718518321c5e85d2000000000000000000000000000000001078f43093602a2dacf9b5dd7ec41d47bff02e0dd27a996b58c73febca06e3d977c2fbd73f63508243696ab5d8b97b980000000000000000000000000000000001841869086e850ad97b3122fa51c437113d2bca14deaef5715c354d3845f6829f6aebe668844352d5af3509c0d8da7800000000000000000000000000000000047c42e83194143b9e977fa1babf80d455fc86cf6cb491ef8306a1c32bbf8c868e11bb3308dd5f65fc2942b3e49ff5c50000000000000000000000000000000000872ce87ecd22b39b14c9036e971a562d51c5122bb10939cdfd1945dd1445ac9f5de06b70931aa5c86cd0fda51b89952c4cb49adce0292e259e92b229bf7965864a945de86eda3ce0bc9f1a6dc8b7b200000000000000000000000000000000157820de2a134081eb47b1800ec72630348583d77d512b4c6a8c8e581810471a2f57a8eb6b0af87a91960424009ff124000000000000000000000000000000000378cf11b0a2848b06412aa754ddbee5660730001db073724caf902d4b4894959f035a8838e28554b0efc2388f2b4f27000000000000000000000000000000001301d15f290dd11c3f8e53407195e02dbf8f13e4fe25fe38e84740753b5a0032f8dd07df3ce46ba424f6772b3aa66f4f000000000000000000000000000000000d166040d457187232f8f38f2beb1e0e0864105595764022c282867346166e46eb789786a7ec7c00b0446207e9ac1ec05e927f57aa85b2df54b4bddaa041d43766c8929c8b9146d723806ee0cf042275000000000000000000000000000000000793797c5bce4b1cc3bcd751c5ae1d293477af96a0e7c6bd392ab4410f806a53088cafeed51754ee7e60e61dc200ccb00000000000000000000000000000000019d595730af1f3039e37494b86a638a528d8bd24c429e3f8bc97076c7463e7f2618e23bd3f300bc7e7a4674f14f8295d0000000000000000000000000000000008e245c7590888fd8dd58f93332b81f48b6e3acd3cfcf5f3b28df654eae1172f52ef5a121707aa9cb111b0b402d1bfa6000000000000000000000000000000000a7c6403659e1a0c2dc7cc2e9b57a452bf553e96388676f4bf4a6e26b3ca2d3cb82006850d8340dacd65aaa0d20e6fba606ee8a5fdd9890b8017f6c432a45517d65328f13f3a2bb42d7115c02929db7a00000000000000000000000000000000054c37e8acadcec8a795619647d4cf1081a0592de02bef916f847936a1736e74cc3b7ee018717495def8b4ef1d098fc9000000000000000000000000000000000291d89d152b414fb5e7139d6d0bdc7b5b9de1fc44b49f895ae08718b631f7652bb4a895fa11149b9a9db30c344108ed00000000000000000000000000000000107b30992ced35e4ba874e436bed5d88aadf0a0c944ca3eb8319539017bdd652feb7483ab6c705aa17e845723b2cb46a000000000000000000000000000000000895dd8e04114fde4a4cf19925004a72f617f2ff146dd650a2cdbeb12977dd2b34ea7d655dee16ad9560b144b81212f5c1a77ccb4b32a762d60b37827ad6c3448c33af6af861c131adb5920ba3c2b85100000000000000000000000000000000005cea2e036a8ce057e4dbe2d9d786eb759c2a75934580480f78d2e228c3150a0a1d8c95ac5013aae3ab6e35f524d37b0000000000000000000000000000000000e18c18884209f9e4fb17431248a5f8d29c616a58af16e949f4317c2e117b80d531a39800dc70f6b161b98ba040a8af0000000000000000000000000000000007c42ce885d1bae906128589b72f2e6c18e4eeacb78c853e923e6eb785c073b6490b2f6b3dff2276916d96770ad5019800000000000000000000000000000000132d809c37c341eb0304ec933a6b11bf9ac0d2a13ead818ab6ee03ccc94160b405066381dcdb13b6ee3f5dca48ee10ef47cde609c38eabf457cdbd1e0c5366bf523dd5801d66a0282bc187d80417f455", "Expected": "0000000000000000000000000000000009406918e2dd6f06f4782ed110e29516a911f47133ad8adc58f5780de916a8973ad60e05ba931d66de7545a92f388c20000000000000000000000000000000000041cbd52cad2a5f4c8353c7153b5711ec23fa8bfa2f34f5e1a16d8a14cfd47c237766880debb992a05ba9ed0353beea0000000000000000000000000000000017d4211c827379b310956371129011a92d62d11f0ee5b0cbad9eea2d3f2a95d364717713fd0c544747338725adf27248000000000000000000000000000000000a61903fb81064614c9c6894c7f3954aace7611cedf6bab8e751f0c203bcab827d296016947c071d7b6ccc742e28ee9f", "Name": "matter_g2_multiexp_23", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000007f90813f8c3eabcef04dc1bc9bbafe1dafe220e2db24e4b714aab2b164d7ec9df3e6a3f903e8b7b96df2ad8297381d2000000000000000000000000000000000e34371e51c4c952a0f38c4aaa5fc2324971ade310af2f36ed511fc5fd7a602a551ef77775fcd0f1fccc718710239561000000000000000000000000000000000787edf7a6ed6b50afcd7c0d3876d8919273428bc49833e3503f650e48e788b15cd82eab2672f612025d796bb62d72bb0000000000000000000000000000000006b49e631ace4f72c959919df5d64c537537ccaa3d1890ea9a1d70f9eacbaaa2ec361edf2d4880c9810976c6073028bc3c79fe6374bf8f91bf7851ff935a124b54fdb5db498d2d37939fcd43bb93d29a000000000000000000000000000000000cb63d7eef2d6614d1f629756b3a619a221033207d1621e4ce4791db4248500649b91ff07cd2f1f06eae3a9be5b6af080000000000000000000000000000000019aafbe56da1569959019033e8cc785c9b98bba6b069603969e7ff1150f023706b461913ea7949306a44c3b7d199e86e0000000000000000000000000000000005cdc3a7004f7a7f79ffbf4c4ba7c5dc30ecc62f270a5c231406fa63d82fc64f45e94779cac851ff8443040fd3b2ea6200000000000000000000000000000000040f30dc98e8668194c9278b189e0c0f7b76a4c686ce26a4a96b93190938f07c5b813670e206eb6b5da29624a1b6314ba59fcd2baa47621ebd90c5cd12b89f2a533ae86d537fbb61a14b1a80982c9257000000000000000000000000000000000a5a1bc231f803ae272e497f812ebb663c2ce8b43a366717fc6349264823ca93e29e30762c1a366d8680f81838907f59000000000000000000000000000000000a88fd59ee380449d632d7e1b926210d984d5298fa807570a63a63828cfa55c6e2f01b7745848281795dae36e562181b00000000000000000000000000000000025ad34537909e07beaaff09f22e91e76d93c668d1b45cf6845ab8ba0129e417b758e85a7100a31a9037e307f454bd370000000000000000000000000000000013590106126231b1c616a5dd7aa7ed6946aacdacec963b507907950d6ea11cf1f5b59f819a43eeebaf51a1faa7daa8e719ef9fdfc5f0c4ac41255eb172d485317c124211498a8b9a74c0bfda15b986c5000000000000000000000000000000000938d43b9747c926c3e2dfaca2d6f1e6d61d5a621ae08c66a5baf33d9241771509689f9ea7d75af607d76b66faa8fbc2000000000000000000000000000000001889a48a74966b9748f4a6128dc3d75a69499db1ba1bc9aa3a9428f0efa898b5f78a9e2dae942d3794ab3d1157a1d305000000000000000000000000000000001129c9bf343f476541980b85229c5c25289ca62173e29b75de431b572c8f01f64ec1aa4625dff9e7df535194c7f4e6e7000000000000000000000000000000000fe95c71f703dcc71cf409b332f66fd69c330758d41832236a510ec4bd9a28c4732434d4c3f97445e6301e3070153dbbb8ba028831f429d027319a92fc0f30def8b97a43da456ddc79443d9f8df72cc10000000000000000000000000000000007649efeb3e0bee49b9adb13f8e5d7db1c06d7fde08a3f3082194153bf4b3615aff1450e47fae88ac93f55a389a319da0000000000000000000000000000000008334731582fb1b6125d7ee1da0124fe88f0c70a0a3f6188636976c31ba6a72beed927fe598386f328e4ae534729a57c0000000000000000000000000000000010b57d80fce5cdc90bc93b3bc7a1affadd19fb00aeec2ca9a6287bf4e40fb74616986a44f2f7d945f58501a965f37f3000000000000000000000000000000000180dcae46ee41bccd422b3cc2b34cad26f6816dd08ba51b2f12835e7439ae2d46933de28ac04bbcad68a188e7e90ee8dedf8a6d86471f58c69c1a5e7518c69c34165e72ce84fbe0b7f69d9c2717e5d4d000000000000000000000000000000000b419b675ccee2509daf66e5da4031b08792e1181140b30489ae21f7925305d8cdd8a104580ae5938586d6b8e74f750f0000000000000000000000000000000012e070ab7118991a20b27f1a87fba1f5815665d76269f0d3d460a6b701e57ffdb4fed2c53fa63a3121c74f67e770f31100000000000000000000000000000000124218ca85f235eac3471e0acdabf73f79afdd4bbc159c1e34c641b97f03735e4c3430264f2d94f640486488dd1067380000000000000000000000000000000011c24f4fa1862779f22a628edf9d3cebe0f7593964b642f889201ae85e8fa01e00e48355053f5a7c6d920dcf6a7ee1d60dbaac3f5e25ca3d1d50ebb31258ec4450feca1e02c84672ef15c49b4de2cebd000000000000000000000000000000000266bf0d9d5a4fc713dc0fcc6ea6edae0b326e22cd97bc49c48a7ba398fc87d7a0c7141ba24d80df454de66c2b5a55fb000000000000000000000000000000000aa8f95c7cd61733b0a260149d6608a73d6c1f989afa8cb2aa4098e1fb5a66b4ad5a5c1c4d901aa79812385fd507f02e000000000000000000000000000000000a6b4929df13e1fe7f0a0cf699a7fbfaa97d7527cc3ea1f728ba59def2e75fcf3490199bd42e93b7d47985a307add07c000000000000000000000000000000001719321981d2085ba31c9fb131d6b79c7df5d10d6ad0b5015454329697860121e781093fdde1f19e897dd6f2c272f87a109ccbb8fcd4d4651b84f4708799d84ad0a717aedaf5a76d2970a7b93bd23d37000000000000000000000000000000000431002c9926aa7d2b06412f544a868a7d48fb5f077dfd098febeeafc28b876c434daec809e5cbf50ff2395ae7e456560000000000000000000000000000000005a15f713b6eafb09495cfb1c89e9421515a07a99ca0f208883f11c430ffe6f2592dbc41bcee5db36385a26f67cd26bb0000000000000000000000000000000008dd30fdd7767486844967c5da0803b52282178287b8ef28e14f07b487132fea3a82d86d414b4d0a25b3dc538be11b500000000000000000000000000000000002dcee67e2d17b3106dcb9f4117456a037ae1996e8f7a09b179baab1ee8345c6d01eae554d3f40da86bd79a04702fbf76326fded2b8a3fbf7637bc25bd201d20e3d4d724806cfa678ee039a39c24e86a000000000000000000000000000000001629fcc374e99fa8303a715fb5077f266b13367bbc0098b5463d3298c0892f83127d6b7f751446575b88858bc742586c000000000000000000000000000000001100783c10618752d25c235e1e76dc64db94adce05651fb8df0a5ee7c299d35b1319f7009b857892ddf9e90c91f7d23b0000000000000000000000000000000000ab6996e4935131becd5df288dacfad1e69b41e200ca7dc841ecc180a81b9d2ca14fc8a76a4e7bd6f924bb9f473de62000000000000000000000000000000000ae9b22f8dff29e5e0a2ec5b5641f53fb5e1ca03130b49d0c26696ca4b439a9d998d9a364ac9cc5ec52df699318cffeae005efa8ee75dec8a013029292976e107a507ec09e3c34fb4baf2979fb759f1d0000000000000000000000000000000019c557ae1c12ff8a7c00b7c9e4bc3d65c92753549c193311a38a84bccfc090052a2219461a9691affe2d67ea4357cdeb000000000000000000000000000000000cd35c5dd126bd4b90dd671f29953c5a49a14b6b3fe946991416edf235c3eb3d574613d27b05cd879518fa7dda3ed39a000000000000000000000000000000000224392063b0825fd332bbede23588c1912e7670a013a99da5507f650dc4284431698a5b4e8c180269af8bb30e4fc8450000000000000000000000000000000002ab8d3250d4bb8ceecc8ca2003f91420d0ef8a7dbc2361e5e7fbfcb59471a4c525856bf796a2c2608d219d215cf83fe3917f8baf17f71222166cb9b6c4beb2e57d0d054cba3f7fd3a28cd3dc4b409490000000000000000000000000000000000911417908c2bfe4f63a388f699b31b47df1ea0ec289ee3f96ffd0c71f3deade00d1841aa56b4bebc2adcd3068adf920000000000000000000000000000000005467c7e58e82089fa285c28ea22c759c7806d86fbdcdcc8e09e847d6330922a61bc331ae3b5acce777b7809ca98213f0000000000000000000000000000000010f376fb47933b1f701dd81cebaebb2d8d8f5510a26fb3e9e156ac5ecf2b943c5fa2812d52da542e6c335abad8ecce3c000000000000000000000000000000000dcbf467432acfa4eb9ba11a7cdf02f9110f44ac371128ff8f1f98fc70e4554f057a4608180bfa54d99fd2da010594f6f0f73e1b62561f5b0fbc409e6534ad9e37d1c0724b35cdd3f94bf6489e500fbf00000000000000000000000000000000179aaa7119f6fb986714c03b6db16f25eca7172d24cbdd318bebb633bf08920f9e2a8136c94e3ec7c19e57ab51531b3f0000000000000000000000000000000005937c484213ab5b2ca8ed1c5c90e8d2a2f1bac044b88c04b301ff2fdbe67dc4ea42779d919ad510cabfa2ccd178cd9f00000000000000000000000000000000183cc23fd64514ead63f55d375a07af7cf2a56aca64a887dcc542f8a396468a6abc776170a5d4b4bbcd4dbac285e7ffe000000000000000000000000000000000ce12228dec2f84219904d9ac7923f122a99803a9b34749ca68ba385c178811685c19a492aca2e1123ee82a8a9cb90fc3ea24fb6447f2493c78a267daa158eabb70c1b60af8175d0d4594c99122cb4420000000000000000000000000000000009612bf9130e17110f8b15aa6f3317071daf3433bf6d008c383bd5c2fdc7ca03f25ff4cdb483de3c84c0ef9e579f38c6000000000000000000000000000000000c40172540a7e20eeedfe02c37aabac07165cbf04830f20fa76fe8b05c826e7762c9f7567a0fb972212bf736e627948a000000000000000000000000000000000f49e5b1929ad3ed5c07670c471710baa24e8478a50f72a5b7bbc23a66cff91d30a3d68961fbc2e6e8003d08196f325c0000000000000000000000000000000004ba098f915ba9e934384682648ed8d4e1cbaae60d596655fcd9c05f4b049ba0d278730dba5ce3fd4892531a3153bb955ed307c01d9e29a0571de07c62d5fcfc80749f02b8dbaaee9f69dc9263e99188000000000000000000000000000000000449b15ecec6d6fe5cd32437b54218f62527157aa6344c635fcec8f8305c8b6e44c93105984e0832536237606f07792e0000000000000000000000000000000011e40e8aaf75f5ff8e4040f725ac27693d7b24805a2539ff54b3a6e90c048875ea9609fb8fb3d8de63ca1118876c172400000000000000000000000000000000006ef2a24445f728b53cbf01e5b076acfa7761a84d8261cf1a1b99cc32f330f32fa5ded83d5cd51cc284207adb2451ee000000000000000000000000000000000977966380e772670447b15ad9917035273eb71a21c37607a761aaec808909fcfed50679769aee1573d73cd241de6624877f31ddcb55d961bf9bc09903bd927451390922d647d589302855141cf5cef500000000000000000000000000000000074e475c0ff1a51a24be3c964c45c41f767f890dec82712d92a965be504fee43fcc6c0684b2b17c5b294a3eb7ceff1cb000000000000000000000000000000000597b7dd287f3fb27e35a9e4e1718b6b1a4addf9e95e93aeaa25aa34023669368b794a08fdb178d9bcda2738534d1962000000000000000000000000000000000a492d648393bfa317165ccb552e045fefce5b3444d5ff770f43a08a68efefe7fce1216114ed1495cd00f832538198180000000000000000000000000000000003d85cea8063828ff025ba599bdf1efe0412ed5ce06ad5faa841c6400e4eeb6aea1470d48f4e66fc768d7e7bfebedb37145c1442ab82241f56c27dec2cd4dbfa9fc3cf1ab72bc521ab32a82346f8f6070000000000000000000000000000000008ecc3dd40da2a7a348b4817d9c84242f2f07c5d0ef810dc08311e9d4090d6d96d68b6c725ee6c24de076c71754bc4b50000000000000000000000000000000018fb3a1dc4e0dd9227fba310236a6db7953f0b716fa995b928a2a8de38edb97eca09fe2ab385037dfdcda2ee577e677900000000000000000000000000000000062fce7fe7810273a80760d9f4b3be9e7c821f38ed3e075210d3aac6aa7a763e3cda56465f88b34540b408ac850742080000000000000000000000000000000006fa94466cc47990a80ae6a310ea765590a0e646b5988925f03cc7e30f04fc0a8044b403212290b2fc46c77e84a9028dde4d1470f6cbce027465b4dc2a3deaca14e34218910aa76cb45d47139b31df88", "Expected": "000000000000000000000000000000000f41bad0a932e28096e51482c646dbdf294aa7b91e0ec258670e7674864765c76989a936fb440bfbf4268a49f450d3230000000000000000000000000000000018282b76521db98f589b1c14e603b6f5d27af357553bca761189a38a944a11c66480f7ddd89d17e4aeddc8d78a2b3a0d00000000000000000000000000000000007efc4a90dd97f1312047ac78a3163dc014c42a44c7054daeefd5b72cd0488832cb6396e02ccff09e4171d790954fcd000000000000000000000000000000000e790fe8323fffc96705a42ca071532d5359641ff7cf8714789c9c578717a054c811cdb581df8b6a43729c6c3e3255ab", "Name": "matter_g2_multiexp_24", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001304e0ce6a4baa6e0545fdb314523fc91f73eee157249b94f284ba7390b12b23b1c849c45a563ac82b62a2c48aec24e1000000000000000000000000000000000a2d0e9e222db70d49d1e85f587d35bdf5e8328aad14343d296f95b152a79c83a4858cafc350a5df1ad0194c49bb929400000000000000000000000000000000199efb09b34d0699eb4bc1c57fef9cc5d98453bf522c504fe7897e22bd0596a3a6c310eb351e15e3f6609b074b240f7d0000000000000000000000000000000016b69f12ce30ad1a65150094e29d4cd82fbce5dc343517ba9e5d89245ec083c44af9a3dad2169f713d3b01fdf70d20642576b42e0728db912a78eec2b7b4c96575e341e86a7592a07a660c11e0044839000000000000000000000000000000000b3ce4ac12861052c602e71906a7c9f3e2186bd2b6eaaf222d8e80b48baee537065ce78372ed936e6728b9642ba1fdb9000000000000000000000000000000000e8186561d23515bc58c77769c93db76dc9c62bb715b283cbfb71462451120a6ded736cd8a292a6799fbad7617d9aa84000000000000000000000000000000000368a6dbc7daaab0a786257c813b1a25c97468732c27cc759fb921cbc3c9a37a46d7dd0298771c447d36ef0a10579ff5000000000000000000000000000000001348d5e34cbe54e3a6b357c4e651acb82d2dc40ef9ed8bb89f0cdf0882ec6a737998f4e4dd61e296d101cbaabccdc3e779f9205ef0e3a85199c60ad9267349fdc7b6fba4cb765ab21750eb3dcfc48d8b0000000000000000000000000000000004ebb53c462239a78bf13f29856ddc4d78645c457a656f3cccec9d3c032ec19c26488f39e0f5bf0d38424f9e3a9bcc870000000000000000000000000000000002fe1949365831f7c38b1cd6cf2e22345c4ce40cd73def77889c214d1077d70e39578e8be4fe5998f59d47cca7917280000000000000000000000000000000001152f2df1512013a42ac056b75802bc35c1883efb345cefda8276c594b061a0b0f4a49d8bafa6fe251658ee76b2493cc00000000000000000000000000000000094f90cb386f7933b2ffcdba5e46e09cbd7d537c12bc223e76d3a88ce9063a7b3574d3306365d65dd4c6505f1dceea53300679b7be7c71224247e8034f5d30a63f8707d92d843a703f0fa93160f6571500000000000000000000000000000000169d9469c53e55768c9312680ee82ee581727e28cdb1d6fcdca25d0c03f3da2ad6572039f12c90b09cdb843bc506e07200000000000000000000000000000000174528257f6d3542f754ecbe97eeeea7d196ee4dd01852f6cbad87fbeb4dd7d3799588f17aad129a15549bb787468772000000000000000000000000000000000c9ab635bdaca1c488538c0830453ec6ab3b2b62447c03ff6ffd2712bf62e02a63c76c79d41644ea412e733128685c45000000000000000000000000000000000172ef0fda359bab149c8c04f583f4ace4d1b148426e993996d278f79ed2c6d3933d6cc5fb62ec4869aadc773d3084ca0454b01910548432a0f706818a98151e38ff9e854f1faa95ad41a7239b5cc4910000000000000000000000000000000017060fa73b58957d12b3996d67b7baa8b7f0943ad52e80e5c4f8830d33dc74c0a39e08594b647945b402299ca861f7b10000000000000000000000000000000001efdc7f783f9977392e2797a3e0bed222d5b661d056aa0c7e04a493bb9b18048bf72aded134941ece78d63df0a0868d0000000000000000000000000000000011355198320af05f2121939e6489f31e9e13b3cbb2cb30c9e675854cb8ec038f80aa2f4b6f995774b36f5f1b6a84298f00000000000000000000000000000000172e18c490d0cd5ba2449362c0ab296212dbe69ac25515d0f91941d300051320f067f946dcaf999554f55f1f616adc0f3685617371b27ba8898ce7f30776d817ff09ef68a9d6721d4a923ed244ae82060000000000000000000000000000000005854f4dba62d1dbbf3ae16f70792f1bb39f111309b454a6400d2916e619d4f70764ecfda7eae5c28cf1d178ad53fe6d000000000000000000000000000000000ed0bad1f5d69a0e621d137746a9ecc764931ab89f24ca827e0340ddc03571ed697f63e79cc58b946e8462099ce4b1d70000000000000000000000000000000011de76edd1cc2f9ba06b98593a24a7a011f2701b451ea3ccd04361ddb678e06d91a676e3f11b62c68cfc05242cb8a859000000000000000000000000000000000599726b5f5b93d414f9310383ed9414e4675d644f83ebaa63dceb2bddc7dcfcbc17c7aaaccd0ee32b0875952554b4e660cb5aa2a0cd1e8c3fdc06a3a1f6f9b6d52a8cc2e98c85b8e258f72d03efc25400000000000000000000000000000000031110347cbea2756b5fdd549d6c0b8f4036f5718d41dcd6c854a91c9df29bd464774be479d0efcb8a3f82cc7441a6c8000000000000000000000000000000000e24a52dccfdda3689c87395e45dbd46156676d9eb2cc09dab22ef7ff0acf5ea243ff117c82b147994d65aee8605b2fb000000000000000000000000000000000e0cd6ea0bffc591c13c48bca0782fecf8e128b0b842aecb06f803a223d32cc350db869b7a77f8e31b05f36bddd587ea00000000000000000000000000000000042ff4ab4596d610638ad23eea904a82701cdf61f9e2dc5832a70e11e717711a2d0e72f32f74706d385a9567426b4713addb1fe778c84242953db87d2307b40eeb776f17767c3a4311b5d2ffd738f151000000000000000000000000000000001517efd853800946aa37868b525e58fb488bb69755ccec806afca2d21bd3a30ba46c39cdf694ad0ca92841760437c3c1000000000000000000000000000000000e5591c339e88544660380d6362f4119c5596f910d4ceb96ccd4c4d9672efc50805b6fedffa0a48d126aae69b241d3640000000000000000000000000000000010ea5babb0de734641f63eed2eba6124377b5c55e429987917c0bd109d7904766a10b0d2dd123413816d0fbabe25050b0000000000000000000000000000000000efc89ee2ffa56193129062ca55a3350bf50e8fc7d586fae3636a70e3577987fb0f8674d383def4b41225e490d3d81528416b4b4e965a5f024723fbad6ef2f65a1381e70201e26ccb40188dc3d0fae8000000000000000000000000000000000dae4277d62e3f3dfffb80818a5ba5c371a48d73b92d69a168ebab897ae8be206fdf776e9f955136d7f7f7b2903040270000000000000000000000000000000010ca635ee2e49cd6c951d75ffddd11557432726d26564239c611b139329a28812afe21f094c0585675f4f233233743050000000000000000000000000000000012378b2ec31119e508fd9ae0ccc4c2603b6820283284a278fe16864e5a18cf7992d850c1d6ebd1253103c219bd95ca4c0000000000000000000000000000000018cac4f0660240045214034cfd8a7e40bf0aa12f97a23c4e27db0e05bb25f4d755276a91a4e882a0be63437a522943ab78077a51f88236dba6d16d7fd681c631510106b0eb7448df456eb9ce758e74cb0000000000000000000000000000000002fd5571c818322d207d58fe0a898a045a26c95c2490765dc9ac663a0de78ef5fbd05b20ea96dc5388d5b2ccf13a5e320000000000000000000000000000000006ff29ccb768da45061ba4e01c90459ededa5e79513917401e7e37151095ccd4656aeb9cb7c083cf27b69377295934cc000000000000000000000000000000000414d34eac47430495be735eb5c4b1a68372abeb43658f27613a9c8b78f17d9074174a8deeeebb1f9cda5d6198bdf89d0000000000000000000000000000000010b11bf63b8c39c1370e8fdbfdcd149fea88eaf1c0a94a51bdd061e4c41abc626a448030bf9ba880032e9f1642caabae871716e790e1a0120fd26d169b8ffe3fcc0d03683dcdba7d2f953f05444076ce00000000000000000000000000000000023eaa08a44eebae674434b013ae9992c75690a3d0de53e4b05d1c0dff249feb24a12432bcb5defe25ee4e44a56b27eb000000000000000000000000000000000f146ac27e685cca04afe8fc58fe853825f5b0009e8831eb0d0121decec23b25bf8521da2fab1508a3ad8254865fbee70000000000000000000000000000000004af1a525d3c33e0b1629cbdb90c56a88d70a28037c87db81c59bcbc811c8f0b98aa9dd574436c9f600c0e8e2d194c0400000000000000000000000000000000170efb5e0e69e46a21ec3b972265bc04b9d5ee926254f61c0e18fed013922e00f1897cf69889576bb5d54810486e7f2776ed0a27553db6ac6d3959ff4c9bc5807fb7d4f0a56095ed2bbe31dbfa41827700000000000000000000000000000000111c832a96329d6db203fc8b6bb5b7db01521529c91c74d9cd71dc78d067b36cb7eabf1af80129a7a3f44b719235927400000000000000000000000000000000097339c17816795238629d4ca6c243a14e9e227e9bfc30370dbb9e1475f6d03020dc35559675121792436bacdf9eac4a000000000000000000000000000000000805870a1efd1fc34c9b576b77418ee8c0d36aa9caf9994a051e1d55b49275f34cdb55edc74ffc267c5776c8d0e113ed0000000000000000000000000000000001513afdfc2f000e3b725fcd0428fe72ab2413ff2aa91b44458a5249c9a160ee27bca01d2fc2e230f4a80454769961af95ce72b30d989889c8779c4056e441bbcd93629efc2877d36d27f670711e21c4000000000000000000000000000000000485b3b1f812b4a28ac87d16f86d8d634e85d49d6dc460646e1224de662e906002c44a1a269c3bc011fd22afeb2d58df0000000000000000000000000000000013ba0752444a794cd00c99eceae51e61c382d0abb26e5e0e595d59321447400e8a8f7d97390bd217fb50bc22cef34b2300000000000000000000000000000000184515a36024d0bf71d9fa4cc5165363ff94ee9f8579bca653ebc0620a9d3146fba70a2f4a9f6bd3777101de0d32e327000000000000000000000000000000000e041422088c0343f7704e726d65ccc4216c4a1bde3668108983643663cf0249e992f9acde2dd8ff478dd26cd8d9434d06d220f64de05bdd6e1140c1e409fdc13f43bd31cd94e633be38ecf22ebd77db0000000000000000000000000000000005bbb0c55fdbc59992c83fc0ff03f677e58b6de6f8649141d88963ebfead9383d692015a7b765b727eacb6de250351ad00000000000000000000000000000000183057eca610b8e07fffb60d21bf2eb87981e6e881bba04ceff420ca38228fce2f94d40a993e2aef09e209f3990dd14a000000000000000000000000000000001231bc55242bea6b589cedd1d82621fb71c606ca9306b268379dbf83ddb1420dea228ffc05cd8b67c38206f3f006ef18000000000000000000000000000000000f2c943e7a8b0ee00fc4e4ba912b94f68f504d2783babb90a3781b666b31bd161af2f97a77813eab9ebba76040b04155257da8ac7d23c5ed965d8bfc76a642a36ea6ec4c45baf6882021372e8643f09800000000000000000000000000000000054bd97b9cc979006f734ec433e215a4e8afe468e69173384bc895e10ead3749d991ff8ff203abff30bf5cc0d2fc8c6c00000000000000000000000000000000066b73a98d5f5ae140a5784c5594892c849aa7f2db3b5798643f755743d401ca745d810fad5f4a33e5b3cf0fd7d96f7b00000000000000000000000000000000007caea93ff5cc6ffc033717220a215ac4ed7283945ae77e62320a0bde13f2153dc8dd401297cd124b4c67a4f3839dfc00000000000000000000000000000000094568035ffff439e3d3201466f3a1d43414e3f6455627c5479c8b7c55130ccaa5007ace7ef6a2b3e2e5a4c9543dad9163d017ba8c7ed138b1bc70141abc5cdc3afbccd8b1db5a6b5f775efa62b8dbc30000000000000000000000000000000015eeef8bcbfac04112931e186f6fd48b7a8ea891ab364ce8266c5fd15f072f08fb3655e324795df182a5ed1c917a5db000000000000000000000000000000000028916fcb3b30a7f95321a0998e544f9f4f578be7a9f866cf72d6b8baccd93f8935f105ed26aceebb3f9c96073a8be180000000000000000000000000000000012b11f356a7e32f3d9281a8999363aca0ae5c1a058724cefb51583e5f217257d47ca76d21e54ab62260796b95f9d3ad0000000000000000000000000000000000d83c75c36cc8dea4aab47823edd26b4492da39b93a15fa454aed4175f28a025ad2c576ef2d76a66e666bedae95cef1a7a16e23e37ecffd514d47199cff249415a6d366fdfaa82450f0744520258955c", "Expected": "00000000000000000000000000000000059443f363ef0c65973d36469ac651eec6e52485a07a6d28112f4d0711802d182b7e6fc56d4f1aae51fe1c549247d885000000000000000000000000000000000d22118a6f1cd06ee14c63f0e005076bfb061bb85ed184b5444c08ed9dc35f77217b6daafeac89a973f2c73f00e0d3c800000000000000000000000000000000180430caa9917cbb40e3ada2de8d685b4daa99639669a643b8f5cf9a4a55d6162e9fd7f5d4989a1a6588feb0273669b90000000000000000000000000000000015d01fba1192f0f1acf8fb32fe790f0448c6563cf8ef5505d9378fa2fdd38bd99ba938077f71bb8eaa91a99e787e840b", "Name": "matter_g2_multiexp_25", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000012d948b5268524659e29cd407dbbe8f529e608193ab9452f936b2f6fc0b81d3a63a0e929329e2d89b5475dc2d73ebd8a000000000000000000000000000000001219e20a081837f4d4e33bdffda08a946bb9cd876e42e2f561ebfd18ec439e0104b43de61f47b8b7a0c346c33e632be60000000000000000000000000000000000a135c72c45f254cc1c260af803e14cd0f89c2ac3029629a86b05acd3440465aafa4cf84e69551ae772bb55802a90ef00000000000000000000000000000000052750c3a99974f9044531dee9129110b99572cf283b61e6606f1137a87de7344bf01d2ac2f8a1db8d815b6d9e7511fa26a9bd0a71fd58edf81459152782733536e960d27e35f9f84d00da256bdc118c00000000000000000000000000000000136b2f21aba94bbc8e5235951b1b186fd4ad221e6ecbea5c7279cc8ee8b01edecedddf48cca47624ee9b155a4c167f140000000000000000000000000000000019852d2bc9c8abc92503f3e7eec9fb20df108c23643ba8a2fe16c2cf085bb4ac079d3f065a1241067daaf401b662288b00000000000000000000000000000000018bf1a4e74ac9507b97a990f3a41cbae3f32e263e9937a8a62679bee93296ee5cd25110833eb5d136425bae0e9dcb8100000000000000000000000000000000096ae4bfaaf4f18d3e987d9f287fdd3dc9b497cc84867e757da52bd5f58688403e1c9cb432a2eb87e239879d52990ab5f1e168ab93674bd7f2bf73318a48ef17ef4464fbefd39f77c17ebfdb24d679b60000000000000000000000000000000016ebc2ee18515354b7af5d924c895ffd5556ad088560f89c59a4ceec229279d4075f732b884a6ef2bb2eddc11d27572500000000000000000000000000000000110282084ab6f3e76eeb9e5e8c56749992913c2404b003df9c2d01d72751f879538d23f612c8faabbccff45185f4c6a40000000000000000000000000000000017476677ebf052d13f60ac0ec5e572c398f1a478d60ce92a3de88a74a28688d786d30b1ea8008409e45697db0adc628c000000000000000000000000000000000a5e4239d938bfc7c05f3b3a850ebd5f7784eee7aca48c861eb4bdb1ce6321fc9c6bba997e143aba13a42f69ea14937397fb0d947d71a1b032070a12588b85065c19affd0db53e466f194f04f58dba2e000000000000000000000000000000000b6e16f2a6cb821abc43c447da207cc3013f2f750c844f42f0fdf47160a38501bf502073bbeb565122bb3de61b3a5ab800000000000000000000000000000000040f5f3aab5d416e9a084fa298814f894ba599315fe10af20f836e624680582413b4a54623cda8ae2663ee094e4db775000000000000000000000000000000000d32ac715a094813c7b46ce2e932365bfd62ec5e584e047b0c56ed6eca3c58268ae01be31b833be7ba5c2588ebb9859d000000000000000000000000000000000850b9044f129e51658a02cfa49d40a2b09239823cba4d8fe423fa1b4815750811daf745e7e02b317a7318aad0734ddc640f850bad2f22049f2f8aaf3ee57564fb38a847e428e252f003eaac465f7d670000000000000000000000000000000010c703e31f2d488812a387596c797d8d414e406bd82f238cea50a459d842502e11220ad82fce5dd36635792ff5770bc50000000000000000000000000000000010c11caa640708850e1dddd48bae22961a45029971d823b53030979b7d8ef2eaf2ed055436105697c5b0b31b1a9d0a7a0000000000000000000000000000000006b98568b2b7f0aada97310f7e14084a14bffe580ec65bc8fe5d19c6213c45dc1b8e1da5c6c1b8555729f6c781575278000000000000000000000000000000000f2c506f3e41c28a748656d1dfd87e812b3ba21815637e497a30eca4fc5de18257846f12b67919dd2d739477cf5ed0ae8bf91051da5bce0a51bcba6f4e1b3c9063743646f4e75e3e5a8cbc84e8112af400000000000000000000000000000000102b6d561172adc9316b3ec11f05e66e7affb1bdc70a364faffa57aa5938c2ac08863be8fe79ce3f627558fcb2ab1230000000000000000000000000000000000c5e72c271a1ee186d443a96d53f0ba0ce226c76aff2a7c3215c2110f96cb3301bd586f509edc45cd20e662756897b78000000000000000000000000000000000d546fbf485bb283a04fa05aa962ae8d77ec4d26f749d83b208f77247778e32a9a2f1483bd84488806e27b13eabf41d30000000000000000000000000000000005a42c6ce8d43d122bbf984e9777f5d1c15057f27e70fef44b97c2c6e7e2e303fcbad643027b7ff3167916f21a723ea98da771e0e827a52a2f7e79e0e5d93ebae04c1ed78cab87d4353f24ffc52099b3000000000000000000000000000000001788323aafb95f8761f87f771fa05a8e49be71e397849daef5877a7f486af13fa651be7a93bdd9465df7be4ff65825fd0000000000000000000000000000000014b7a56f3f7c12e39be76b3872c1ee648f62f9cb6a1842d869e00a5dc2ac8cb4ecd96ec2483d5eade5b0f9113133bb050000000000000000000000000000000009a30623632b757ae8d03ced0c1fdd1877718f8d84f34ebb42426284f73bb7e8abc31a5e5ded57a02d08adaa90abfb2600000000000000000000000000000000020b47acafefce7f617081e22b2bfc566acec6d2cad5063a79cf33e02cc8931bb698b72184a11fab73e0bb0aaec76c61d6cff707bff10fd53ffeff8e9400966d8ffba6d4ad6a8e7e456df10f8f5ebed2000000000000000000000000000000000d1190466f0e8f03d2cac4a5e63a13d7c6d0cac9f2065295e2de818773199d731f8cb7b2be5f6ef0a246401b345a2d560000000000000000000000000000000007d9c5d187494df79c25b6292527b0d6d8c50b6467bf76a1a1316556e48159a3b5dbdbd9fb0bb901d857f61f423d15db0000000000000000000000000000000013e4401fe76e3f1ef73bd244189cdc81fcc152f71449c11aab24c4fa1d123c5aa8c68a2d10fe88c1c6631778dc0bcd420000000000000000000000000000000004ccffb4296883b8690b2f3fe17e4e9ab24390084ac917ed28fa1e04b9758373abd348290d24c915dfcaf0649ddf5a87e00831cce307cb44e8dbd5edf24f1535b837277160d2cf6daa4e862e57fe73b10000000000000000000000000000000000f4baa5e531ae462b95362292d5366daa89f2fb2707c58568c094c58578e84a8d253fe1de26b917b84635c0aac3a63300000000000000000000000000000000109057e5c5451eb9f85b95aa5ed2615d2faccd0539b1e4481923e04cbdbd2ea9290969022cfa508d3fd050549c74940d0000000000000000000000000000000001c3e147ad9c31927207f2344fedd541316f4010e3de194f924c4a1450a221285b76ff1894f8b1670731007f44965100000000000000000000000000000000000909cdf5c56dc177daa1f3fd7cc31d79a4f6dfcd462c07812cdf629426b75bdaa297b9d7e67aefdbb58175a21e29edada8168d56385722f339a5b27fc25a88034d348e3d533ff4dc99d28536c1c09a770000000000000000000000000000000009b4c6bd1c460d2e93febfe523c1d54d6bf6af50838e7a10b732c1be8748a0752a517e7103d0ffa4507b086626fbfa8a0000000000000000000000000000000015bf2c13891dfa8dba35b5da1235563d4ee1dac33e89006f5c9fcf06f2fef7b31ca845bcaa8ac608046e8b01c8a61fd2000000000000000000000000000000001898dfd6a0618df821474b90542f261c1febbf2e566978b0fafca44f6dadc57202f88366b19d2c955e4291ac21beab520000000000000000000000000000000019287e1ac6b3eaf412e58511b40d87558e7cbf90dc8af2f5d33825b40fd2f2425d0be3a05d0a49076f4114350dcc601eb929ae82ded73a4876c041d2e52fa811882fb8e22690a27cb4ad3ca05169bbf0000000000000000000000000000000000c0993401c024d32cecc0d86d4cc52c200e59acb34fee2ae052837f467905e736a1118260ee12a963ca2df6e1a6c9d0a000000000000000000000000000000000103f78f0e7c9a5628a66efa91f150a87e67623ded2560aef278a8caab017fdcf181981952b450c67e3b4d3f362822a80000000000000000000000000000000000df01ff335f23652f1c34480d23c62d705572321c0e7fe92556e033dd3cf5b78a3d554585403a7f3c71744c20d17579000000000000000000000000000000000a0e2c9e2e34e5cb36e96b29231f702abb127a011c7ea3e21d59e5c55f745a02039a68d59ce8e29afac0752d1939106936999c516d4acdfbcd488d39e3073db9db6cdd0c0fd1d29d58294ace6d2d199f000000000000000000000000000000000eabff0e6ed9dc358881796441c48e722ea171f26011ab898c5a06758f61a629ae21d5a2595a22dc9855fd2e516b30fe0000000000000000000000000000000002732155a7a2791078dedfedfd3381281554c389bf9b5baa47593153a2acfd22a08557d7a1d49be298e416051b9137dd00000000000000000000000000000000116faa2e2a261e6a3e4de6ad80d75ee05aebae47872e2eed9cd91aafb94a706de673a05f1b86c0b0131cf148a90b2b7900000000000000000000000000000000009a04c09c2a4fce22d237bbe930392dfbbe5c82d480abefbb3be876015e2f5889a0922df6d00d4e94be0e9fb8d2f4a1fd0bc405e3970dc2bbd7dfe0c54b7c64543fc241000adeef4f7aa2f1dd2506770000000000000000000000000000000002a6402848507062e5c5d63b1207a1a41d3b941d21792391f2feff95035f1b4625541770fa5e0f87585cfca670976533000000000000000000000000000000000904095ce640605c957715e378ed733ddf1f94d3beb63543a50c8922ab9f8092755fcc65e2a1ed9232c8cddcb5816371000000000000000000000000000000000ec62b911b08d3e8618880c3784685b2c6cbb07a4aa4e348ab72e4f918152622ddd7748bfcd79f35675cb956d11fcd650000000000000000000000000000000013f651e9104d48a081cef2ae0648816b2b4b5f644a791514e94a8e3dd3001099c27d1f9860337ced1b177b4ad7cd5866c36afa3c8581df069292d53b8ce3e35ca136a0b3f95a894958105fde9c77e39d0000000000000000000000000000000016334abef2a21b9c1926b2086075471bc2d2d2f66b963a41623af91fd2fd50f254c008fa3bad6b53658c2486edcc94aa000000000000000000000000000000001063002a5d17aab2bbb5da49e8bde63a1f3c4dcbc8800f9487f47c6d707109c86d3cf7f9171643418b195e50d7483af4000000000000000000000000000000001213004f31fdd0b0df5d8e3677c4f48624691e2534c02881c6cc6875b9abaee56ed5739c2acd66cb1b10553ba066ef1a000000000000000000000000000000000fb7659081cfcf8beaed9c1daf9e92702977c37a54376597d897082a25f9882f1ae14e7724c0aeb9e002dee708c6b4eb0f0a2bd678c5858be2a49ca54de8716fdeec84e1935b8f44545c740417efa7e400000000000000000000000000000000078f06bdfcbc7c0cc491fdc8069314c8a395983f9a2e5c2d1bec360f36e365da377885f897d8d711e33270e3ef9dc4d80000000000000000000000000000000007d43394d5175e020b3a5d768b60ec763d60cb1bb37c0343930fa82e92fb1becde0a178c4565df320824bdadd54ecabb0000000000000000000000000000000012f9fc96355721c35a6f5439065d89cfca5345622b3f38041b41c036b9bc6bcc980498ddc7bcf807e1b97831c099505300000000000000000000000000000000105307b482467b881a59eda1434e31dffdea531603fd3c460aa8d4f58d32668228bfa585bbba2dae7346141af59190e2c8e420db340ef2c1b5c6a71645e303eee95cd93228770b639287b14b6a5c59ba000000000000000000000000000000001576521fb3be8c3178549969e54bb17b0a3546ac4aacb470e935359e36bea4f43dacc06c151a527f441ab9616e07f7b90000000000000000000000000000000018dff940a21768ee9b9450fee7259663bb29af645bda2acb4d43f4e9d631e0127073f2db04293266e6fd6fd3d005e3f0000000000000000000000000000000000ca6a977016c1ebf52827a5ad52e5efcf7517ccc3ff40df8141f6335fb6c77c3fb8f6b0dcdba2596ded7c3838577e28000000000000000000000000000000000150cc33b55586fac30d316cad6580cee0a070900fe7d540167560b79f4cf9690a5e02cfce9946cf67a95dedc9a7d9aa35398541eb5a03271e2ab5ec2aeb2da80e634f63a050c25de98ad13e9d63d09bc", "Expected": "000000000000000000000000000000000adf84ea7681c442731be8db9508a050d4689c42af8f7472491655356a86fd9a0afd91435bdbaee98db3b1d8f26203fe00000000000000000000000000000000090a7dadc0a14df481e44e2005c9ddc6e026ce2afaba7badd18492bd3a338dffc349b4a339f56221eb795314252d53640000000000000000000000000000000007390fbc06077cd167f53a16f347eaf50ce8c9d111afeabf3a672687441b80e66a66ba3fdb28e2ca8282f3ae3dc81be80000000000000000000000000000000001998f98e85285a428a2860c22a00d0b317854da4190dcb4dcd182ac249e13c51f5d5df5db6a0fd61d01232cbcacd5a1", "Name": "matter_g2_multiexp_26", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c868a2cce65692f83eedbfeef6f9823ae9382fa5ed23395ff2444807e72403d4f6ac861ecd3a51db841889fe22a033700000000000000000000000000000000111c9aa53da85a63ce1870b963415f0d5f812e061aa6bff57425038d1b65fff57a78bdb963bf2450001525a93011a28e0000000000000000000000000000000011770810c16367d075c695981dfa69b072b82b034f8ac371f26bb157f9f9d667aa555a5c6baca69d08f421cd569faec2000000000000000000000000000000000df6146b29bc8226dccfc95a325d791b30cba8ff2495434d75622b170a634ec7995c5b4c689c73582ca861dd21d8e1e49f99387baca30b9cf63ad10c445daa142fcae1ab3c0a366a068bb5efc9abb3a9000000000000000000000000000000000fb30aac6502ecdd3544f1879bf1b3f4c19fb897de6c3a7cbf08f36244aa8e9dea8aaf781f7509d3ece16ca144a601e40000000000000000000000000000000012304be931a1d7440d67740f50b1a281468b412e8b6c54c62b993ec609012c7056fc7e62405c7530e8f5136cacb5926f00000000000000000000000000000000182320f5d9211c08f3ba5d40ccca45cb0060a6d362b4422084617b9d8212e94a9b878294ac176b8f0e959bc124a753310000000000000000000000000000000010be6678910072ed9f932ab01a2d72f7374a2cc82bbd86a6006a495272aa89fd655e6719ab8b3a0643d002021f7b7ebb4283a1773995bbc97a6df107082fed4ba40e2d30c5472a25a7643ca9e78b8b8b000000000000000000000000000000000f1ffed9514ee81e9b3fef4162c8f4980fe0429e57bbc224a9c9976cef7d26ab61ea7b0cd42eda30da97e3f8f5ab5f0600000000000000000000000000000000035b9b349b531d85361a4618a172b510dbc924df671b3fa707b474d0d8b17d30dc8ed208d66be91dcb7632d2f05ce31d00000000000000000000000000000000010030dcf6695d44ad3236032e47f7aa25b9f55869f5207e7ac8641db8c01f5b59627dd3442a1834b8b1fc595e47cdcb000000000000000000000000000000000f91ad5c923572a75d32962567e7b1b0eb84a91d485c968b5aebf8b3a772c2f94e47bc1d5b333fe43574308a78e768ac7f4202d670fc3b48eaa92e925f48821d2ae057d90c5f184edcce9ea900ab51a6000000000000000000000000000000000ae11c60537bbcfa46a08cbc219122ed66fd0d42f90e68243c32010eb99942554c349c021f0e3635bb50f7ca3d106a3f0000000000000000000000000000000019a61254aaa5b51b4d354f444706ebb0bc3edb87ec2d83e830ffe0282bcaa3278e947d053d6678549a098129bace43da000000000000000000000000000000001100f48a07456f01e16bcc833ae0a2835c964e9b0aa850574dfd8b4a7f06d03059e9b4df8931740ce0621ec7eb31218400000000000000000000000000000000003072392a824c386859735e2d203c9d52c19796ccf8538bda3b1436b2f6815bc86d05287f29fd0bb0569a81a57f0c22a76cd8d292a7053c449cb98f13cf768c6e37da9d702af28c16dceacfaf9cdef5000000000000000000000000000000000392760f98883f9cf6c0f0a324b9a645cbae12b780896f6a3eee918c44a815daed156248d6afb25901521b323f6baa240000000000000000000000000000000006375c6629f30b7a36785269d691772afe1b95d6e1bfaaba9459c31086c2697e4ce77d148fe2ea166cc330373583f4730000000000000000000000000000000000aa8e338df7eac5a7b070a69d3ed1553a0c52fcd894c2bc8d1b8cf6ed38983c6c392a9a045ffe8ff40b39d18e7c87c9000000000000000000000000000000000cbc73b589cba1bd47161282642fe6f51f2b3edcdcad6020bdaef369d3f2c11ea9cafb9a7fdccfb89bbbe13560d42d1d97b7bf8acdfbb148814afee1df79aea17261dad6f78772111a6dcb021d8c79d0000000000000000000000000000000000e71692cc2342d1e93e0ce72be69013023d012dd2294249dfd69e1d610e2236ee2cdef22446f1996bd3309825989930700000000000000000000000000000000013a1bbd3237dcbe44e05234f7e41982f4fd951d3741a3e90345418af1c922d35edf776a27bfbeaf7a15658db67164bc000000000000000000000000000000001197a2ee5c2541e19b5368c97abf51fde3dd0b922c3d701d7d84552c9f47b38ca09a8aef8240abfdcb03292ade1ff04c0000000000000000000000000000000010ca3c22ff8a47b1c683a58086ed9d831a5c25b6ce5a1971989974b4760cc9e83a1bc8d819825989751405b242eba379efdbd5953bc33bfba09fe7b3ee22c46c3a86f557e4b5f272853e67fd95a0f9b0000000000000000000000000000000001306f8047ba1a3417e7993bba0dfee9077eabfc275af91d0b882a53199874e0777d8dfd29767186d922d49087fff38b20000000000000000000000000000000005371b760380a6d287e129b329e735413447969eb9048def44f5c5987a64323d2a5c81484c40b20206832b86a4af9c4d000000000000000000000000000000001552eeae620c42d0bc4593d7c8e2c8fb4d6dbfcdde68d57158a7dfe837a1870a73b45a97b02abdea174a475a7061331400000000000000000000000000000000033a6dec61540a5cd5773b76847dc5016b309c5a027639598f51ae5b1067b3f7a02f5ea11b0e1be77a3ac236cba15c929a331bb218b99fd38451483a10e8add23c9641b975af3897670884efef90d4520000000000000000000000000000000012ad5ff49459fd3a7940a69e2a78919876e9b3a4f0c142499e7b5dbcadb5c2b5d79c5dea972f0f0acdfd10ac53bcdd92000000000000000000000000000000000ec1be9cb379bf1e24bd5429a4a91857bc3ad45095d15bc5537c2ba39407e9f2edc5fbf711ef4287a73ea466d4f53c3800000000000000000000000000000000173605df66aaf51810793db1cf2021de6a7645ae84a5d439ee035b917d037d9f9ff072b5dfe8b9ac69feab60fe2d70bb000000000000000000000000000000000d0bd336825381ae1e18ca37bf6160ae32b653ec9f9dad159006e92c24b661f22b5629ba323e9e06ccc5887a962ec23fe9301dc826bfe2988cf93c29ca9f01421b75ba63c5ed2cee1599122012ada36e000000000000000000000000000000000f5e593c6588add92cac2c9467247fc6d900f20b4d3216c258f88f3334eecaccbf3eacda227e2da46cf520e5102a9cdd000000000000000000000000000000000458177ad6c190222e53e054546413c13216286d414e3509b7dc794dc0704afd26bae93ff630c6157d05d46d805a04470000000000000000000000000000000015df8a7720d389e6112707e37694afac2f97282676a89964deabefddbb3a0f1cbc885d4c875b945b8303c1ed2c0f46b8000000000000000000000000000000000e3c7f1af7cf5923dccfc1d25bd86088706a3a44f5fa7f97171228e8f2a2b18e9631b2a63bd5a75ee0bb83fcc91a45c30a1cb530e8b828542fa4114de6aa936bd2be5ef3a9b7a0e20e475022381d62d40000000000000000000000000000000017823fc8a56e6e5cb9924037ad6ad1b43237894a877572dfe3d3cdc1120fe83e01de112b55f7f334dcb5c6247c210613000000000000000000000000000000000daa01f90cd14d82d4fc40b60b463089fc6c0e567fa46bae69184d0e3cc5acdb1d759e3291e2781fe0b65c734ddde28700000000000000000000000000000000164e742b123c19e52e2d7a6727689181f323990a3f3238072f7cfd7fc0f55b7be4274c0df194d85060a81f3744d3978b0000000000000000000000000000000007c03a1678b6e91c1bfc66ce8fd419cea13c7cda3213856ad21823b06db94538153a15d43a9d4270edf77b9a5ed490e6cf2f0c33bd044e8c4468b4b7e137ae294c178e7b6c9f19878331fb93220db2cb000000000000000000000000000000001865bc91e645e2e24c3efa3afab8b0e278dcf16b29831f75b3eef0b342479e997b9c5f8ccf67c789c830609b3cc425400000000000000000000000000000000018dda7857f919a6a49f6bb465c27342c8fab6afe6350c43b98e91a3105276f3ac27268454e9a9c6dafeb2218ddc7d3cc000000000000000000000000000000000b098258ff8b185a5c59b46150954d52db5a5f68bc7975234491406131e4f1286ce79156dd1290aafe688f936ad34e31000000000000000000000000000000000b294e9ce904fb9e243d0790147b6070b10ff611a06e3f639aacb744154d02016ac08f6769732d4f6944ce9257680d49e5f460dacc592bb947ff6f1c15b8464824aa5c957a645a763138ac1581ac5768000000000000000000000000000000000e541a22a7a36adc06e445f42497596e1017a1d99de85bb945a195cb3cf0c14d39eb7a2aa994cf234eed77f6307cf6410000000000000000000000000000000002de753e41a16565e5ab1b61debdad54950e9930e04badc6e356f10711d7688befc6827040356c0f0a8ce4f8d7121b3a000000000000000000000000000000000f2202e34ca164f1a6c0afbe179b714b303d87ef14534fe3f4230180f709dc63af17f04487264b3dee6b24ec4d0a423f00000000000000000000000000000000004044d9e3b3a77d6a309780c870a65e05e1ac531c5420f6ed0056f5e728e2b83a968ca90d579db50c2dd395f7e40beaf26a9736f728e16d7b8ce0cc59e2ccc848c181459fff4321982c08e9cac5794600000000000000000000000000000000166d7692fd30dcd06b9f01ba2101870ed347840509b3242f7cecf91fbed91abc24b08b08cc39c508e6499a2f8bc3637700000000000000000000000000000000076ce6dcbc77812b4d5b44a50edba5a082cc36dc24a5cc348283a4ce1518198b56134c9807ef850edc9e36e9a282b9ff000000000000000000000000000000001261d9412245abd7ba3fc1597f34179e54766c49306725d42588545e14f4e450ee1c7af913ad7225275c57680c23aa6300000000000000000000000000000000096602b4eee053998555ce522c060d5e04c7961eeaab0145d38c9b13362624f54fcc8d0b77f2bbaf8c312a3279f06e4eccf0a9be4775d65bbfc894f8ca66fa6f69d4249ea7f6b076fe193f2805e64f940000000000000000000000000000000012be34c18145aac51a1494f4052edbeff14c2812ff494cb78198cd7d9db9e951aea80490c55c4ed926f6a96a2c337c880000000000000000000000000000000000536e46a63ec5ac0f2f4eaaad6df98322c6a981cf2fc8ef253269cef20a76ba1ad089c24cba4ad4680dc4192d66595d0000000000000000000000000000000005363b9acb66ee95713b63dad076529805c0dd8921c738e205e7b1d0410a3ecca0870aeb2e64cf45270d49b473371ddd0000000000000000000000000000000016749b2b09d889b883b6fdaf518345d4cf097a728b833e92c4d21b5c41c8d5cfc0758e895b60ad101a74bbb6be6ca0c5fc6bfb37cbfb10a1ffdfcb91d9a52883cb9a606f4ffa8849a6e07386dc9bb34000000000000000000000000000000000067a684b55fdeea39a29252b355700a4810f083909cf2c07a80b362ac1b4d58f5900c68d266f7ad81ea278c0931bc1ec0000000000000000000000000000000001b1f78d194d77cfb4a2116ce9e29438dbf38c52733b0295198159d7cadb2584d86a75c24aedeb36234a0becf9d38a870000000000000000000000000000000011fced2244cd959872a25c0c7bb4af6151d99e1aac079c606db4987b9ba111261d4a16e7d82362b865324824445a946f0000000000000000000000000000000002659e7016ad615ed80ea1ae020903431b470bc0341f8e0918de9b8d2e933dd9f2d9123e9e9d20bfb05d49f71c3c454cd94959e16f6d780628694075ba5aa1a476d89d8fffcf4b4ab7e6343c011fee920000000000000000000000000000000008f3c5de8c94a98dc5ad7846c53980384f997d1657f7349ad9b51376d41f4b21861d212fb6428bcf2347d8774f44156d00000000000000000000000000000000110b245b1e788da41dcbf60a3ac4987c1925696dfca85d450107f654fa1230adb9436d60c9e742dfb4e453ec4944c56c0000000000000000000000000000000011043b975e01df36a36307ba9234a18b97aadb9da509513b13e4f3c80432b0cc5e69a3bbb3cbab8df41bbcc92cdbf60200000000000000000000000000000000120aebda10c52a67d23842e2bd9a897cf38c58fcd11e4e8c5614db5e409a7c03111feebfe2f1212ae753497dc59d6ae9122f3a5e940ee7e5038421619daffb8a6f433605f37e78d863f814b51b2ec4e2", "Expected": "00000000000000000000000000000000021067690e6e001e3d0d01449a7257348c4ef68e66dd47b9014d7687d44749be1f33e6be95df6a204169ab7103dc2d3c00000000000000000000000000000000062efa0c36462ab0734128dab5da8635705bd1e1b540817c5805ed9417f176723eea92425db539e8763b1c79b9923e9700000000000000000000000000000000176c9af1970f026bcfa87e6f85a20ed498c28c6982e21bc050cdc29c0f0af832ed4424082e4862d985b78519cfa75b820000000000000000000000000000000018718b0d0fbdf4783cd0b01524ab153b891fbf08cad60241a3f3163d2c3496c36afdc6de62ab3c9a037f88ee408ce5f6", "Name": "matter_g2_multiexp_27", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018adf92d8da050c76118a3a3b2ee43955ae8b14ddc8ed64f5672f40de475f7e0ba6ff60c4b6ca3e863d7914e6de2cc330000000000000000000000000000000013d1e19011a1ea90389480d14fa608985d895e05edd9c28fb34646f70fd7bdb7857fa785b1e3c8a2997da6c3b5337ccf0000000000000000000000000000000015764827d9838c2b011660230ef9805af388fd997cc229c939bc5f4213d517dd837328c45b0b8ee1d6508cb70629b7bb000000000000000000000000000000000d58fa30a2d095ee8d946e50a027ac4cfdd557b3fd9c82dbf1536ddc0f42491a176ecbdb026306e6ebf1bb182a4e8199b3908c739d505a1d6fa85a6dfb7a155202710b45861f1a8a7ac7bb3274a180cb000000000000000000000000000000000cacfc8d0bc6f9db737c8a316043a6b52fd5946937467afc09ddd14e509a89f2445065ac8a8c56454d529d67793edb0400000000000000000000000000000000148b1b941f159d93170fed949d5f53bdd2603d78a49443ac0e2353130ff914376e018c3db3d12b807d105f2d50eded8c000000000000000000000000000000001382a3e98cfd072807214479900a8602bd666cac7f19be0443ba1354bfc05666f40384e9ccac314b5d0a2bec1c90ef0c000000000000000000000000000000000c12c2222f67a5adba78f2c0be5be95ed743e835857f4204cf47b67fa2eac45cd5985fd82c7a3904944e7b84737374b17e0e27a8a416eb38c989a66b84f037a5a24ef3358e20cd553f037a0a2461d31000000000000000000000000000000000197ff997d6c5efa3d7de8e16f26082bf13a2401d6df5f5c33c6614c36105f347e40216c907bdad9c1df6ebbd44f41c3f000000000000000000000000000000000f27a0bf92329730d776a83583177993b2b354a212a9c004f9f8892a750c477b8d1e68c13127f03b1629bc8392d06f5b0000000000000000000000000000000011b239cc6914a321385d907527b85713a0d842f5be80752f4c5758586dc1de944b6e4578bbe324f16838115e9c866bca0000000000000000000000000000000000cf93c5b48cd9de51ccaa45124217cabf466d07d6fdf4a7bb810443339ec4af5b74931bd07eb9fd31c284c05f3f539e0a3cbab01c34856b892aacdabe63d0a0c241ebc137a88c83ad22cf38997b211b00000000000000000000000000000000137b12f731ec925dc51e20a9c90323d14e1497e16b3a4b5651135054ef0e58e9b18167da15220b9a4f7d81e9a7648fc20000000000000000000000000000000000b2d3ac534e1e5b2c9ff4092c2d8dc5efd99121de7df953e5426eb33934ef07e41b196eca50f5a04a936881a05f2b2a0000000000000000000000000000000004feae2377d950717695606844a4873ed7b5f6703d7a63dc8b960b99b68efbba710c2db0f1371acbee314875b97ca054000000000000000000000000000000000f49ce3061e7254dc1bc8af3636a05e098cb96d81fb31e25da97c6266adf3c41a74d46ff32f4fbdb4cb7e4a3f69e827bb386bebe0e49b7f07b0ac61b15306c2515a1ad6fd76a1825dd29a60e845c0e4a00000000000000000000000000000000064ae3fd67250f2c6332e1e149ec09946147e12e0d871403e559b49aab68190a1454b3ae924727b6dcf6e1ab327c9d7c000000000000000000000000000000001131f91c7a0e1854bba3958b36083c27904cfbdb8b8cb3fe68cf578bd1cb6f7c6eff91d98e4b99086926c5d4272cc1f200000000000000000000000000000000071c6a92a8d460ff72d172c204c8a69d6b6752b8c1f731ec63f7f394c0c3a2a1bc15e865172f693f523c11cd4ab1f88e000000000000000000000000000000001193876df7f4a1cc9b337a41c9faebac2f209b9070bd75294c2a88d3091a1e55b51fad482fd2aee8f90458eeb7e981fb8902a82d33993a10c56b2fa3333cabf1c5d47a9c78354d58f70ce4807cf2062800000000000000000000000000000000025c20ed5572dd1c9a098f241d2965d8739878ddc57c017632afcf6e54964894adbd6d30f62f316c9c3ec7a08268afc70000000000000000000000000000000013bc3e930f4fd5766db8f04e1ebfaab2b67f620119c39d687c68619b3564f3e8b74666c9f8bed6c1f080a9e23e9c0f22000000000000000000000000000000000973a3cf19312f90843f1f013b05484064032557807ca67b2ded4a27fdac12d6cd0e1416c8998cc8635ce10046adfbb900000000000000000000000000000000108903617c78fc608eaf007aa13861c970557f2693b24e8a278920897be9694570ae6e6c7749c3eab84d5fa3af5164b1426a4e2317fee033a226a91a52a5830f9ac2cf5f329feb6bdb382438b8a39f2a0000000000000000000000000000000005695975c140fa14998e5916268bde2135cda80a45414fa85193fd6e13c6b5a6486898f590d76175d8ec2629c923e33600000000000000000000000000000000033f58b1cf67e51e9ad817b31919530cfdb5db5ca4a537d9b006b63399da49b2a5077bf5c3b3b4fb10b2478f466542540000000000000000000000000000000015c532e40ec04d9143e308895b2e7e3d3daee093a5840e1e76ab528fcfa5be57d9796ffd58ad5ab7df6f88aaf34706f2000000000000000000000000000000000b55747d1e8b66e2b2fea67229f2b7b17d58ef547ca841bea8db5b53fafaa18390f11b8170c41a5dd29331917fa2e348de0390c05fb0dc9b4a3f76b51cf952a11b909ce13f9abc9fed6a349b8efa98ad00000000000000000000000000000000001ee5ebf73bb40a5c0822350853bb5aeead3262380dc274faba6b04e58e7fb9d5a4ace109ffa5011e73e3d89ee6fd77000000000000000000000000000000001427659e5ab1f8b47edddd27c613b578890d4c66c835c0cf8e8daf19d0ae842f0bba5bc83ed7248adcd75cea5d222a270000000000000000000000000000000001d4560185690ac05e56c2d629d599bceee3ed2919c29e3d1ac54e80ae99b5eb2f93bab865e8c1eef7206f96b2bf4eb20000000000000000000000000000000016ecd3589e3703e5b0ef53790130d5074d2bc0fd5839d9c6ff905746a77e393f73edf53b98b99d9c87a1fee1086aa8657431db9e576643f93505b5b25836218759e736c0d650a5221a652338b0073eb600000000000000000000000000000000163850016261f34de2b831a0a8dd3f224adaa3cc279cdb40e0ae976bbf736dec26c55a6c79cb1c623870b62ea216274b000000000000000000000000000000000a79af5c054cd08608d4be1705058ef7b4ec38a8727560d960f0325d0ef915c049a89e76956d0296bcb6c96333c3470c000000000000000000000000000000000ca89379e558c7308edd25bf06dc05db857204e9351299ab66bf050c8f051341a6c15a02864c679f07373038de3fe87c000000000000000000000000000000001929f42ee5d9dbfd1f6656f61e6243ebf0eb491762b7f3608db3f3e9abf565ab1524f770cd2ade334885d7479342c92c6745a32591e359efa41e9ea93a016d2eedf1da112cddbf31818e8d687b36af2e00000000000000000000000000000000193b6cf7300e47ecd21a05a71b13a8de45418d3f67931789ce6111b8633b9f44063ca13ba8c8a598ee0725caaa3f277a0000000000000000000000000000000016884d982e2ec0fa7e59fb34ae8708d0bf4abfc260837ef4432e8e04474e504b85450db8af8e6809413c90268801fb3b000000000000000000000000000000000fb48a8331f278845979beb8cd21060355566af215ba44029455a03d0c016daf0f6b7c5773d1a99e893e76b4411a53c70000000000000000000000000000000007056e30143058eaea89a3065e1de768d49860b170d4c364a28d38475f90711fba62c1787adda90dd2d347da72680f4eed37a5f4bfca6b77ff9e4f7e03bfed52ecf02a8f84ed3da6da2787a4ee81ad9b000000000000000000000000000000000501fa9af88e28d4f0c0590a2624239bf1724ac7174b0f1d5fd7527cff1de9971d6aaf28ba4005e88e181daffee6b20f0000000000000000000000000000000007af5e30b5aa9ad206645ace12cb2b36cc1c6068e604184ca8bfaac5a4ca327f7c43a74d43417918da7df84e3bffd282000000000000000000000000000000000bfc0538d52f277d54749ed0b69697b4c60ef0c5483d21dda76533e15efedc9e2b2ef07618457d64bae8ef922c0b41f600000000000000000000000000000000048935cd352e999bffa613e3be0a9f9a063d5b5eb46cb5056e41ba214e87f871f216ff41ee297aaaf2994a7b6433f58d81633dd6e729bc17ddc596cb1f17dc6f0e50c052a0b8c5a4c83900d918a9eb560000000000000000000000000000000016ab1e8b6f41891e0b65f14397c0887b27ff27e7463333e0938a7a1a181dec603056afbefdb23b41bbfb2c05807289b8000000000000000000000000000000000980d0ea9ad5c87bbe1aefb708061f85faae1e1e3b01c55bd577631e5bea2b5ffaf5e2478f5a8df89447fb8a73559729000000000000000000000000000000000784d0c5fa243bf0125cb2c83a4040715197e99d507d71a3bd9ca396074cfda652c1ad0dd95c3cfae369e68d3431ee7c000000000000000000000000000000000e533bb33e6d269dfdeedf7d17c3e0c19f694d151e8eef801c326cbcbc463a42558f58cbc330bdff0d8d91e2974eb4cfc6b019d29219b57404baa955f66cf1b2ee6571ad5b80d471ff6db569e32a1a5000000000000000000000000000000000050f005b00f371a7308b5d7d7f67f7c00bf15acc518942607f32686feab5eb503391f964eb7ca711aa6c7b4e494d7eba000000000000000000000000000000000e2ee5092170ea3da0b1397023b2386c65ec8b090484353f2e5d64694aaeb8d5410ae22c92662fcfa21566d70173ef36000000000000000000000000000000001549723160fc7b8f5ef9a84bd1803f18b76698aa7a663d9c107c9ff6c6d02894edc80fd00d436f3a942c05593c5464ad000000000000000000000000000000001032f49e3527cc1f1355c65edb21220c6afc88919ff67ba99c65645cd3b8ca6662dd0146f6a90d92558b3f54815a361d6a76411ce02b4dfc84ddf62ed26508a2dfa5edb5a98a6a20dd69e8b8e7ad2f5900000000000000000000000000000000170b317e49f1304570a3a3e6bef78fcf8537a451ebcfef5afe3eac4aa1aa87dbf95d0f870fd3372d37efc9e663621cf7000000000000000000000000000000000269ae0677d71b2537078e96d2593482e4d41b6d1d2cbec755f307735faaf79c01fa27f1103cdfae1a9bdcb665f592c9000000000000000000000000000000000b115d5a9fb9fd9361d0573a8d68c5193f02edc1cf3fecf004c6603f118f28ff394220f6a9e1051a5d9d4b417290b7f800000000000000000000000000000000107b45614b18c2513f8c42a0032cf0f3f300157b39d2969ef7b126f17a9b5e8e9ecc5a61a2ed4db92134b0797f6a0ea35906098e4ad7e4eb2e996075c7cd660fbc399bc942f9080404b9d0758c4ae14c0000000000000000000000000000000003de39b056f8f0248b138437db1536b7bfee29af00c37fcd14c25c88f0f051eaa07c763d94c8ce497696311736c0b7140000000000000000000000000000000002b52981e828f8dc1cd371e6821d001e1f96d57a865a3c0a255298c43d52741b18fc60903d1a5ef6227061dcb243096c0000000000000000000000000000000016b5335f0f9516f52f2ed45fe723ded427206ba96af0879958f1f22795485b2867e953de3d9b3a9eed2c37f26838e1540000000000000000000000000000000004c860058c7ea2e6e4eb2a65c1dfc20b3070f89ff58ab99bb51a4eb9e7f0642f7b32d1d9f27c668a36a9e053a8d585f394ef8c281a9be3766fe784ae017d93f608dc2cb97cbb7dd3e3814b5ade845d370000000000000000000000000000000019cbbc125ca1b89330c21ef5b42fe0dc1e795271ce4a9ecabff04eec9029f756f180520f0e7b84be2e9fa4af395536ab000000000000000000000000000000001630cf0c4f3282689a3e01b5c8f9be3803f60238bbe9fecbb0d9e8e49f4ec9f6123c44840acb8cf55f8f6bd15579e6830000000000000000000000000000000012afb848bc0ade8f0c25c6c342bb651a7481be065a48944bbedbc14c095af8a4a048fd1e776126e2128f904afbcb17ff000000000000000000000000000000000dbc984f9ff907ce5553bb11a458deaaee0efea49d6816ed7abf1dee7b70cb18cc669d4808e75678bb898359c7ebedbe6feced33019b3b66d335f2118cd22b2952cdf9757fb3a0cff55b7c4f245fb438", "Expected": "000000000000000000000000000000000be6dee62b8c85e36a216d16c5477a7c58f03b992277af83d9b53b3b2169414b72bcb4a97e3667482e888738ff17c94900000000000000000000000000000000067337c69c37ef6f0ae59fddb84c46a2afe7fe047ddb57b3b80437609f1a21fa5a73420fa5b44704ca1cac6c7a99d9320000000000000000000000000000000017fe6f37d2410159e533374ff3812714dcd07610d75a53a5d502cf2f51e750c48858db1e109f6aaf724292c1402382f1000000000000000000000000000000000b8ecfe1f5f5d95777b0fe5d94fe81b82656e6e5a62b7591788baccd251d93e4bbc6857cc87cfe6b4ed470c33631ae22", "Name": "matter_g2_multiexp_28", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000126d4a9ae3550e31185aac9011e3f086517cf79a279326c264f51bee6615dbcc730d78055489b5602e91b08f96d23882000000000000000000000000000000000aeff5fc04fd06c26af8b048fb2d0d493525ba5c2bde30664e7371812d529ec7dbd584c056b05fe02179b7eefbbc45fe0000000000000000000000000000000017c6538d2801947cbb646d4ec8b70b1e24453f7a984db7ba73e3a5dcf595bdbad9703f2d846ab02491e5e3a5bcee0762000000000000000000000000000000000badf551dbedcefbe7c303a5c8a52151b5460caa22004028893af4d8a3fac30cb1da1e986f9124acd5db7a634657dbd0cb5e7df372d346fd13faa90b0d6961372ce2f32ec379e5e50e7ed8a13942cd9d000000000000000000000000000000000bed71c7d878e7ecccd8233e3e604e564cba0b1ce75f726f846f3a6e2f3b4f5b12a28b8638be647f5c33226edc2bc7fe000000000000000000000000000000001914c20aabaf1f6f82063223053809622ad82a3a54668bd600db1aafba22aeee5c8a07584e263c91cb0fc5fb809da63d00000000000000000000000000000000056d9cd8f79a90d16b36bde77e546f8b3064ba7dd0fde78d6bc538bd6ce12a4f32860205d5d396bab3d70deaaaccf9450000000000000000000000000000000012f7e420708b66132157a80753678de292998cb6c4f00244d3c47a6077b3401132b73c7f52369aa2a6a90892f7be4ed913a5fa1674c20c97d08608d200f3f7611010e6a25a790853ed4ba0c5aacf111b000000000000000000000000000000000339aa1471eddee8cc0a4e4db5a29c3e4e92cfbabe023995a79624614aca522cd459dfacc0cab346b1cedac347e1df100000000000000000000000000000000016cc4ee8cb72fe09e65616fbe9bea1a0077114ca841ae335f1f9eb5a0b129a4bdc77cc6dae8727d74fe21f0d870a43f2000000000000000000000000000000000098a21da6e983228ebbed0ec3704c9d2521e935506c0567e3bbf9b9c379ce6d33c3d0dd8f5e013b431f740964db634b000000000000000000000000000000000a7a38abe8e282544ec6c8740dce8559fd264393d0a5c9af9813b2430bdb92b3150eacb6732b9cc278d0d0e622b263ecace10870acf190b373c19ce615e20e5cb96d3c6be3ec155f2b29825f8476b7740000000000000000000000000000000019ed305bfe8d8bfcc20794832b3c117715b6a658c0bfeb629e5989f265cbb456e857e53d168932589e4ed2806db7c4b4000000000000000000000000000000000e2ffda25fc316a38f556b35a7a3acb1a2bfbc1f9469a1b6427ed1f216e113a379932b0547f5370be1017a1fa0266cfa000000000000000000000000000000000ebc493c9a79b8ba58f48b90b9d287c74f505dcb484eabda79ada987d63a4df04d671d4c4ae4b32f8ad5db6a1b80f37f0000000000000000000000000000000019fc715d26c0c7a0c291ad8319e2e8f2920c63b4d4ed3f0e2f376aeddd4f7bd9269175ac8d0f421b001e2e48634f3f238d9e38d9383f09cf0f8a8077f1d1dba091ff0abdf7e77c3b65c2df48d6c6f536000000000000000000000000000000001285ff533da833a3daae7d815b1b86feb6f20b7592af8b0eb76240f390ea48b69a75547b040e7282b71779f450d3510c000000000000000000000000000000000813d38fa21c1f3c87b9c97ac03e6aeb8fa23e0340a0dff4e3892c774595648743d0b8980a7bd21648ce9b16a245ac3400000000000000000000000000000000020a69dbfb736c64e4cbc800aa415729b24ec05e901f2c7ba38e49a21c3851dc03bd4f7ec829d4326fe6c13867069a07000000000000000000000000000000000d518f3944053c8f74c0aea1d054d89106312880de4479b3dfb45b00945ff8bb58b12f9a489fa9fcd87194a71475d0a1abeffecf9b404c6bb2e2d0c78fbb8609a38e3d3187587c3848e8f9781b7e9f440000000000000000000000000000000018c82052cd483eee7aaa421c2b998ab0b4b32326dadba03c1d923726697d3940b40d5109ba34de09439e833ebc19daca000000000000000000000000000000000e4feddc3eeb3fd1eff8316d5b0cba554714713e8a605a55909889970ea2c8c58bb6c568024709def73b29a5a76563c100000000000000000000000000000000098da4cd0281a16e2e3e542ebb92269c8208a3d373394b0af92dc8a2676f9f0b6e85fda9161e32558e0569cfc7b1f3df000000000000000000000000000000000b7b54b51821fc037f02167d2e640f8dbfd1472407278b4bdf47b958da39f28c64569c3199846c293bf60e86aa45f205adfe53846c0038203d8b8df0cb636aec7d4ed7f78b0b0c1734be448bace08f340000000000000000000000000000000003058abd4e3d49c86ffac9c95b1f07b66a22c42654dc4a2e3b07b87c22024a8bb0ee084a558ac22cc9fa286861fd77ff000000000000000000000000000000000fc9a89ee26c323df22add487a6bb278ca3f4c9a91eba4e067d5abc9dd3afededb4f98263e10083cc7ea224f28d3bbe100000000000000000000000000000000058eb015f1e14da860215d59165e12feb8d1317f652eeb76b3f08b38ed943c94e632dbf8145233dc93755e44e027553e0000000000000000000000000000000010897d5c2b481f9937d830b333e7649931e801a6bbffb7d9a3ee28ab1e27889691a9f0b9616a8437c3cda942bf07282206e9d4e41b628be51690b86aa8938db066c052f3adff774d35eee1e332312d3f0000000000000000000000000000000013b88963296d8c8197cafe160846ee11365b7a991b35cf5613dc57714aa48307f4dd9c6ff9704b29905c18a41a48010e0000000000000000000000000000000016a97fff65fca5ff282a818deb8100104308b8d9dfacddcae32fc2b6082331b44fa70580018930fe1ab9d9c1b13a59a20000000000000000000000000000000019cd2038acd84c2db1f0fa1b7eccc5f7ae3da803cb72c4a1e8390d49e0adff1d88a85696d9daaebce9c6b8a2f861fb36000000000000000000000000000000001271338587f06847770c72dfb3d9a657d05f8c7a012bec77a7d40a98cb1637ae99281c82668486119608b01feb25e6dab3d349b1546a8c235d60c41408c969a0fd42425f8b5ddc1fa5102d2821bde2c600000000000000000000000000000000173ed7c70f4683102cc6a276d192a8f3b189197d5ea5dc813c7d0162a1649e906f76a1c9a1cb1ace6e4d937934b72338000000000000000000000000000000000936d260b789b1a2a9d04388caab364049395be61d320aef66ce50f052eb462faaa2017731518675bb0e4a2f050e4f7900000000000000000000000000000000070bd1254cf4b209ecb40afe248f2e53c390636625460439952ca2977be021d93fbec264c31ced2a810e8a5e54d750230000000000000000000000000000000016ddc3312f8ed359792bd213d086a0ff1540e3e5a2dedf6c450fb96a9b6d1edff9bde31fbc04de382cf44694a631178229b83950e79750e9827ed92856e4d1e1b5f0b47c6bbf3611a1fef8f2fc47659c000000000000000000000000000000000aa4bc6e1a3e6c3c45a29db74b27af27b61856e2cf385ce0e5094ad53db4d31c4af45b5b234c66a21bf15018c13ece8000000000000000000000000000000000188affc993bf6c99103029c1e406bb1a693e4f1dc650907809ba3de1471d41095dc1866578962c72538ca85d09fcd22d000000000000000000000000000000000e487a7151916694b980e62b64ba49ffc54aaccfa0b0fbc5c14fa4a50d1bfda55698df5cd8570c07030f145c49a4ba9000000000000000000000000000000000084a05dced107d29a0fd4cf817ab67017ca33018d5c7302167d08c64c45c5c455fb5c907f21c39b8a86d037a126df4e76b5ac07fb4a184dfed685b93d2265cebd02a3296a3b0416cc6a115242079752e000000000000000000000000000000000ea7060a07dacd84287007a05b494bf19a03e5a759b0ba67624c54cac3562c0ca3fa6e444206614d00d6d6684b86bcb5000000000000000000000000000000000eb2f332f4481276f931d2192c1a9f6d7585e85f248a8ac95aed398cb61bda05230bf8b9c041c6f78be3b34668a9c1a0000000000000000000000000000000000faa038219f844e379d8cce55cb8f0fe2b55548a0a0e1e37e25ba4f432e6b1a6451b8f081c171490bf055f81cbfe5f8600000000000000000000000000000000037c70d4e8befff257c4bc98a4726a961f3e2e68e7e02f9f2c94aa8f5fc67a1da44d41394dfe376a6c04240e4cd5825f3a7a25ad9f02bf51fd73550ccde12374d9b151f2f6fe535bfaa43efc391f789700000000000000000000000000000000100a24d21c0ddb20d76b6d9fe642da5ac1de28afd642ab5c08574206b8b64d1fd822d295476bbdf2ca7e9267138034dd0000000000000000000000000000000000aa7e4f2f77acfe8b4c8f3fabd56b17415ee9bb182bca1db15c399479ec60382f980067b9d4c4ef7556d621259ae9110000000000000000000000000000000012f7a7f91a988fa661c661013736f0ec92b40f571ac15a47067bb847b09ba128d1dcaf8049b941a51cacece5db4e1eb40000000000000000000000000000000007528b0ea66b6ab8d5d318f5e4d1c0e9a4f504057dbb0397b614a1adb160032127f2ac35a1a98da70f023cd343a35ffd47944c8c814f143f746175ba0b2d75e2ae73730a265d869763f0e986c088bfcd0000000000000000000000000000000015d72b8d4e71cc092c2875de80f3d12e003804d980a4b1dd13cff34e9336397c4533b6ae3a03beb2f09312a605947a270000000000000000000000000000000005976027a98f7b0caf4cc7d0d71440d3e4fffb1ff65fbf32dc890b275b646f2a32600a6215d6b2f999eaec8e58cb6d5c00000000000000000000000000000000111583b7734be53a7d4d090486070cd3d9622156c52871ec79c83ca024880684eada56a36b58cfc3490e65de41e10579000000000000000000000000000000000fb670b553c2ed4c81962b149efd4b0c77edf6ee70eba88300cf264dda98190e550540fb9fb95748599bca3abadd752030f33b187df3516866f259ff959d57fa9c53323d5c851fdabb96e5ea470518ac0000000000000000000000000000000003900e7cc0a8e891dc4dfc45f08d97e73ccbe2021a560a92c493aacd9c0614ad100294b5d7ebd634ffe4e5ea301a26170000000000000000000000000000000011ccc136127189728a7036e85d233fd150d5483963c48074f9d8ff83a0791c950da380e717f2bd0bff8fc115e9e886290000000000000000000000000000000007d3e76bd1f22679d228b4ee50a60cf1bd1fdaa171372cfa34bf4136a091abf7e5ef3c6b3446fd41d5de68b563fc7ff3000000000000000000000000000000001107f636d9187155357bea75c943dafcfba2394a9300054026b46d6f9db31eacc06d1f64c2b139af297dc4783026d98f4da8401050f30459e026a207ca631f0684a10813c64ee86dbdf06b7b29cd9786000000000000000000000000000000000e3a4101f6af3cf0d5d5aa5a0ebc26852dc69f91c06e96c5f1c7f8e4528c3dd92cb6f629620136ec356f0657fd9ebc6a0000000000000000000000000000000008d34dc3e1fa8bc22258e23b504d442a11938370325c101f1cfa52f313724e0894be722646195fd078c1a49720cde8c900000000000000000000000000000000163730996c79787e7ab89030de2c26e26188187762fa128ba4378a398ebd906dc56d99cf228591f394396248665c196600000000000000000000000000000000008f0a8b3d003b6727834228798950fb7a3cb6b931bced4540693445a007b474f7459ede17f87158e932e4c9c094ab904d940555d48649f30026f70450b2caf2b8f7148b28bfd4349458ae89c323512e000000000000000000000000000000000cc2d30f7d3869abfc34719f40b0ddaf00f52bcee7ec09a16de51785d55531fa7fe3ca1544d7103b9caf7105d60d9e930000000000000000000000000000000002ebd8af0bd3f82dc9dca585feaa83071534b2bc2b3d2aadbe0d01d759ade77ecec3b3f7b72f82087365a14dc205add80000000000000000000000000000000011aa3734a4b9168d3c46944cd726bcb203b94b25a97437a6aaace9c84da708bb073ee10585f28bc41e0601567863c193000000000000000000000000000000000ceb4ae5a8b506d31e77e2a43f3af8ba9459b887a927ca5287edbc2ba7c7cbba85a6e4d35c099b7ec7bf7eb2814cc38ae140e30424d2cccc91be1fd3a62d9ee49c9d64fa062d9350b3fa567ec21bb06b", "Expected": "00000000000000000000000000000000192eb406b52075513584ae3c6093fb534270d716c79961d0a3c4bbc44096a2e8d28228363e2c8da54857945f1b983569000000000000000000000000000000000ee0d95748b13b531821ddd71a15fc529a2ce2c99a66f14e28f97478c3c2d524cb7c4cd7e71a1027030765554b8f50f7000000000000000000000000000000000610ab3e064532ce261aa2ba4f78721ac4f78661cc13fa09ccc279267e6f703f1bda17265a5eccb0061ce24d31e000ec000000000000000000000000000000001966a334b16e64e4dbd66119af97bd2b8d6afec0eb1b8207f437c00ab134ff369b3b3c1bf51b871a7fe8ad1ce93dca4e", "Name": "matter_g2_multiexp_29", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004c22bd94b82ed3b106532a58a0253daf51f579b9d746c624bbc6b58603942eb139c1b576241ca8fab5bf1c457112bd80000000000000000000000000000000010c6f7551d758d1128add57b110227296e060074e4cb934132368f079a794770ff406fc7717867df0f461f5c9fe56960000000000000000000000000000000000048f88afaf6eee5039b76c0c5b4b49671f6fd04f38bdee1b1c8f347a9dd4e6aef387b742c8f9a8aa387ab4d01fe4267000000000000000000000000000000000e7be987d0411dd7138e47ac00f9f07c4737d93aac501edd16362ea5a633c9071a6bf542d4db540d75edecdedc3a8f0ca57b2c351a7946a20cbae1fd789ecc5f77376b09e911749831e9b5680185b15300000000000000000000000000000000056a29b523b0cf85ab04b0a496e078dba5529cb9699e567ca42f9ee3e3f07b61ae29b0ce17cad23131375f624a366157000000000000000000000000000000000acb91d1f057c7aec1f7561614a95f8db2252cc879bbc2595a5f607d8b0ecd6e6e3ec19849eacfca62d870b049ce84910000000000000000000000000000000010d9459e07178af8e125c2f66de699cfafb5f87a63454e24d0ed88b6c804a9ff204f146ecf4d6db62234ace0a944acb20000000000000000000000000000000007256a68e23b43a3b6475b3cf209ec108bac13631ca448cc860672c65c1760a8299fe941ed5bcbbbcf63a683e86806ae8fbff9f8ac4ad10718d46a857ba28f182263bf2d13c8b6a00902af737dea56160000000000000000000000000000000003e33b840426a6bbe15b23fceba829bda9a5ab89d37e60133874f61bf1b10e05d460bb5d228cb178cfae2a5f41035d32000000000000000000000000000000000a9c5460c6443364d9f9440d101d92a0037343789ca0aab6dffcc2bf81e1aed312299a21556d16e55b1398334d9061f00000000000000000000000000000000015db251708253f7de13a5eeae5aa76fec415ecee1ffd88d882580da5da8d9f96c6ff90d920b329096a103dd71e7cfa580000000000000000000000000000000014c3a004cb6ab8465e05d965dc720b37084d98de424b160062f225dd0b67a8e62ae11a3c7bacaa129a568f3a243357ebb061de16f4f609c6947733b58c6444fa9549721fd9a2459652e8e4b8c69b5d61000000000000000000000000000000000c8fecac8bee21d916cc47b96a66b7a522ef4fea76fcc86ec490ff44b46fc01ac0446e3885e36ae7ab62a409ccffcca60000000000000000000000000000000011676ccef54bb27ab7db0b5ec025a9d1f29217030f3686e71564fa011d9fb598f44a8bed3da8fa7fcd10d01e3f66d86500000000000000000000000000000000093aecb91956215980854c6f19120777983a160e16026560c8076bdc4372f53065f9fee0f5830ea192aa5637590a745100000000000000000000000000000000035d773ef15d8d99b600a6a575eefd661aacb49d6540639223a454594570d0f00ba37340b63a2c8a0d4e53ee7dc2dd91355ed5b57b28451ad98fbacd5ae87551b7304e4ef5cf7b7dc443a66432406f9a0000000000000000000000000000000007b2891e9cea2a464742c7f962deb1566c9d4f9e4e7cbee1912a72c5b064211c39801bf42bd888bc239e6b4ba71d700300000000000000000000000000000000169cf5e706dff2945145d5ac14bd5fc8f7e7c3e5f7ce733c865e1882d236926c71853efbea26e13efe4eb0d0e7ed5db6000000000000000000000000000000000de9ee19c4bc2fac36debd4c91317e54f57e761866b134ba9a0e84a8d268b11674110ee8f91aa8a6b80eabee2e5e75ae0000000000000000000000000000000016d91408a670e4ee43ab8e21cc341596709113950d22bdf5073cd90f520667699e94f64f76290f1bebfecfd80a9e051430b6eeb01874ff4b0fb07dc9f23d8e45455c1480eba7fb3033942214e85a7720000000000000000000000000000000001982744a15e8163a6f2ee681bf27a68996682216037d67d91993fbbe040e16ea21a9cb600fc6a40e7289185393544c3f000000000000000000000000000000001131d7dd5a5b96ac1f4c4aa210afe7af8d371cc16d32289aad38c93afcc1d3be53716f82e9d14ce6b1c833f7f5871ad00000000000000000000000000000000009adedaf19fb8823ec55b803c9509ad98217730bfc6424c8b69a071e99d026492e7c8c4a06509491a3bbe5893988c357000000000000000000000000000000000cc60733a783c7df76541daddef2245e6d2b694b94649b13c21aaffdce124c1cec3fd8ed5a5d4d4eff3115ac933e5df989a697a0e8d2cf512edd2a3c3df354eb30a3eaf697779dd9270234b367c2b5ff000000000000000000000000000000000b366a80247a8e3797f1c711aebd60c99ec7caffda34514a3716154e900f2387c46f87f81af036a383e3f9234bd1b50e0000000000000000000000000000000004608b7cea13d08724a2cac691e61255ea7472537f7ff59894d511af7fd99ad72f0a7406271576300a7d1d56aea17bdb00000000000000000000000000000000141abedc914d3d1ed587162acbfddde60f7dbc1ee5e07fdb5f3515b87d1a29024c9e19f24e4c0e3979bd938aa4e798270000000000000000000000000000000010e72c6c0510495dd2c4ecaf13c1c6404654e1be369d1ca485c76d8c2304d60d69b90c2e171f18bf55668232e747825820b72463d54ac1d8f1b3f56f0f98861768b05d5174cf1883dd8eb0410420d56200000000000000000000000000000000081d5a229481fd297363e8e217bf1f94a00f54eb6e8a3f95f4de30081bb2b9edd82d53cf287e37b459afabcb73fea1d1000000000000000000000000000000000ab55f52ff7dc578ae8267fe3fa09bdb8174dc30bb835cab9851dbee7a1aeba82e83e07d5e79aafb34643d9fc9a0d1c100000000000000000000000000000000195245c7a762776bc1e81d7111e3b814088f1e0e7d686c3ee3e500cd0a7ad4015851563a1b8b592e491e00078187c66e000000000000000000000000000000001850c1e8edb0d6dab973a9975833cffee8b5243654bc4ebe64972e423799283707f9ad343bfa86548cd2acbe04ede5da3de7997113708f9d092836c2b0b59abf710d8401baea6de73ee0689436f035fe00000000000000000000000000000000000007e9191fa9057cd7df8fb83d497ad774735c242bce9bd34cfd21d3f8f2a8e37d1f38b592a61ac8a8d22a4287fc5b0000000000000000000000000000000010e36db1460fa65ea229402f558397c6fc57e9c8a4b0b9e85d9ba938196bfeffc951587353cb7c7d84479f60c087e3660000000000000000000000000000000004d86938bebb850fea82acd336c3900b241757dd937f831dd909ce548325955f103dd57611c0b75bf71412a6ac3d6ed30000000000000000000000000000000013990c82583007b693c1d6271c1e5820d7274c4a729da21a76eccbf7abab1f2bdd6c5d26e78d51476ecf154e4fecd1b87fc3d0560432dbb721f8a0610f0db31dfdfea8cd5ebe8da3fe3b8ac5358dd4400000000000000000000000000000000009104610d5887fb7cf6a866584cae30cfeb00e1241083b017ccb82ddc9d72fdc0d2b1d227c22ff6d8497495f44828efc0000000000000000000000000000000002235f959b071f21fd63282fdbb46b1dec27cc193f3e9988def691c73dddd789b6a1adb977a68e2661fb41d62280f229000000000000000000000000000000000ccd46984208f183f0b70c9152c01fdb8ac078ad1d85f41e3a24819da321d9dd9321a8d70103282abe6d8b981447f202000000000000000000000000000000001711057042a54ca76b0c3e7f36f2fd49e339b76cbd2e053d93ec2838848d359865fdbbeb9e75e408b4b316d60ce2741ef0b271f02031a126f8632e30d8b17cc5b57de7b8b873e0971ff392d4246a40f400000000000000000000000000000000001481684941fea0f66c78faa40aeb4b5254bf78c44df7e37b191c095ff12fc94248acf01d2aac5637e9536e73a82c9f0000000000000000000000000000000016b72eff2830f49b24b1e1317c95143cda8bc11b9dc4a91ff22a24e0bc1a244c7215ab1040fcfbc292ab236ac73cbd3d0000000000000000000000000000000013535421771fdad616171f7348cdf32bea7486bf4d836b8b95c69b71ea9915c099e256287aa119af53cf6320ad86664f0000000000000000000000000000000019ba0f36dc556fcf09f0a4a6cee53de485d03d846af7afb792d16220551fb5a42a4261f936b008babc096e6f8f68b63af8b5c136aa5e2d670edcfb5bee9ff6095d85a332ad55763fe1e5e8babd145c070000000000000000000000000000000014b2da0add872d6e61253d6022559f668bf192b4aafe0acfbbf341ada55b404d42b2b31182c1ad50c73673494ea5b7d40000000000000000000000000000000018b76b74e9e6cda8466a354ff66baeb935b5645cf9eca81f4b7342f7914c9bf35c57be402458c09781e66a89cba6e67e0000000000000000000000000000000019bc8c1f32ce934b7ccae6d8ca39a263939585d8f94414c3880fc7bb5a0a27d728708e7ebc42c5a935f769adcfc083f6000000000000000000000000000000001636b62bbbe34bec06253887b78ad5b3ccda1bc5d8baafe450f2d1a8e07334ca79a40c5c4a50b58aaed96408749e6f68285193e7c10646a4601787edfad3d76e19d5b013a0a954873d92bd5293d325820000000000000000000000000000000013c0fd7a8441b6eb2dabfe8c152aa480015f81139c46440741f3da1c50d18c17526c47e8b8c2fbcfaefabbad5f8a0b000000000000000000000000000000000009da839802e7c6759a87eeae5a05146e1d226dd828d4ef6d908b4a0431008f352539f3abcd3e4c532a3d8204e350a8510000000000000000000000000000000014709634973e4554d2379e439d099e9be8bc7ef031b6ea36a7a85d2ff5090b0e0de7cc1c6b6a004465edcf868ef5fd5b00000000000000000000000000000000146779393d82bde1eaa6205e69907a0536c782fa7fc6e11e5e62ad5468f4422b3688f2ff4da2af396741ca5e0f97de3835bb2175fff61894ccbb69d90375df627e925f1ac430a349e75580dd39546e44000000000000000000000000000000000ddb7d0380370830803a7eda2e9b694af71381990f182b5d1223992abb5afe9531bbef8b9dba239f411fc422210fdc930000000000000000000000000000000018b685009d012d72193043d09f8968f9a41ce2fed598a20536fe54cb26db1733214add38f73148e754e632f6d78f524d000000000000000000000000000000000b967a7b4ed1bcd9f3da16584b08e0c28d967cebe7a07069abfb3bbce94d26b6d95d8a807879b24fb1f5ea00091d6dc300000000000000000000000000000000039349785fdb7d38707d8136e9a8f650c4491c50d7425388b75fe30da56147992c3d662f22131ba7173b2550e613477fa25856e5fb9547c48d41783bf2cd13493a1fd71e56b9c7e62af84a1f6cdae1c8000000000000000000000000000000000455d7799cc1c2af1e219b23e8683113fec126bad1dd7a441c5d113b064b552ccb1e7314dfed1b11f42a18acace706e50000000000000000000000000000000014d2400aa3e2270714b656bd755c4bba55866d6e313f619e10f94de6d82b5343ae9a9483dc10c1a72a5a21e619a20a8b000000000000000000000000000000000a6caa6cf8609d23b7873c908e5321d064a9c107b5492d296d04f92c308ee705229dfecb1f908bca0024ca56bc125126000000000000000000000000000000000b31c384423c84316f65e03ba9e01a8f626236f76e4df4b8ce2fa053c1c1e6a9b8f0afbc253db8c9c5e2ce9f9dcf05c71155c0b9c4185025310e8020eb52abb6f2f1780da15e4ba81f3c9a88ed1b4a6400000000000000000000000000000000097938bb53db8d0aeca3f2bc180039a5dc5269748e9cf065cd88e59b30733d527e54cdfa224e9690581e8c7f0881241b0000000000000000000000000000000002d52d97d4dd415fb18348f4de78c65e2933fc45d5e5e1d8f0f0ca1cd52885704ab12609b91d6d2d1ce13eecc7fa0c2d0000000000000000000000000000000018b926a37a8e0ad836846d06c03a9b84db795fdfe5f15d1fd3e0f8fef1b2825b29ee3a503ffb2f75765cca49c2b3d4cd00000000000000000000000000000000073bac093e958a3a09543e060c81b35b6598521a8685629f77200cdc73b372588e66c247097e7c03492c0943bfac4d6bc5610b2707ce84ce67e82d5c0e5f5cd2c90925aefc1e39468ca86475012df045", "Expected": "000000000000000000000000000000000f79110c74f0e983f3d3618869af1d9b96dadba61f1d596294ef8a9412f946fa26cf63483528a57299dae48f85ada81e000000000000000000000000000000000e1a9cea3af1debcf7d6ef6f7b8566b5bb52d5548d4caf85925109228d7c9b50d65a1b24f089631e75a694f8e8dcaf040000000000000000000000000000000010efc1081f079e841eaa5a65cd7c945d4f37acc92c4ace9ae6c69a9a95d8cf569d604376b1c7e63558d022da90d269fd0000000000000000000000000000000010b7f55ffac8d57c89b664c36c20b2988a493de32f5a956c91b16ff67cb806298a59adcde12ead42d598b6ca3e1b94da", "Name": "matter_g2_multiexp_30", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017b139e5dddd53433362c49403838b3e2ecdd850a8df12d4dfacc0bb98f79d40966d62dfd0da1e721e7c0f298457d590000000000000000000000000000000000fa35e9c2e37bee1020ed99516174408ba2cf443fed115fe3a964ed86b5e5369e40291dbfbab477e339003ac85eb7405000000000000000000000000000000000e8fb87794860237066ed1b7ae7c2a783c48c52c2267f3e7295d1f17598b96232954e1eb6d6e80e716628f1db8afe48600000000000000000000000000000000083521e3a6d6e3f99570b747498520db5c89092b0077519c8421f9f41772c7a6e177c9cdca52f89a26c6036cadfafa8b32fac970e52778cc90396a5ba92ab98e26499eb1ff17d4bc4c1f78b64887d3f1000000000000000000000000000000000b1415e1dc2d4c1f5619b40e616d258867493d8624857e41d007f82ba8dc53f7ebb36d06f8348b94eedb794899e97df80000000000000000000000000000000001c01656fa47d62b4372361b80ea61501cfda47da5534e3e2aaa27b1e3c4de0bee0aa322e60c476fd4345340e5c00e130000000000000000000000000000000010caa407d9d265721d55f01dcfca52bde851ebd918e8fc4c752a41875940709c64599f36fae5e3ac7f211e1f67890d1c000000000000000000000000000000000b54a86474dd5f410290e4b4ac738fbba5e88c6debec17e38a52090b17ef371dc8feb0573e76c4b61d7688547a89f6a36583bac9672a77f2fe62bea4364aacf62d5e10eb3a757fa0595a81f76543e8630000000000000000000000000000000001649c78147fefa91100738e50034424244d22d8e1bb6a2bf471e4c9b29694a5c9476f4b129912bb09fece53aa87deeb00000000000000000000000000000000117a3e040c1f54b96c2435891a45fb9dd95774b5a55cfb306c22517e4ea72172332d893047f7eaa665fcc58dd21781f400000000000000000000000000000000105e8d80d46e6bab2bb9ce0525cbfc82e8b3320ee4a8b9c0086e21cf2b5895cb35abffedd1b5a9eef21f62a0a1dc48e8000000000000000000000000000000001437ee33abadc8ef6bfeca16c3edcf05480c3dd97db06e396e10d5180472f50074f43f9a031a04dcd11d803462fefadc5a8e1d77c9e42a187054c938a8a5b4bafa834021b727036ed3941b1c1deb9d030000000000000000000000000000000003b51b10efb54dbc2973e001f0bb634e36f689264484eb128de2882d6600a43ad548bc7d1def4541f0ed88a1fb37f3270000000000000000000000000000000009dd80dbfe6663ab04656856f192002593df9ef7f792dfa81f6a51c658c4c9ce5586a5edaffefd507f51ccb7e8c8101500000000000000000000000000000000144160d5ca6b2ad626e6a3424ff5139adadd3319940afa9bff7dc409ac1fc3775d5413ef4612b27fd22c02c1fe57bb86000000000000000000000000000000000e375ff490a626dd1d933a5c751c88cbd61803986fa8dc089ccbdeaa0a922758afbcdc30d29268fe0a34b7b79d0f76c139c02150e4e89b25563985c7802c0c43d00c721d521b54e767c1f509f584bf2b000000000000000000000000000000000997ade20fe9c0d3eb79e61a66a5c272d02af668b0f3c8201a1ea071737f3d2ee3b0764f859480e95be75ab8845b407f0000000000000000000000000000000003215194b6a363d31ece09b18700479e6093fa3472a23ef0133e3dce60a3d56b6fa984b900162c4ad56a6899aacf35c3000000000000000000000000000000001647647bbc399f40124c43510469cf613732d0919e22b478b2603d7553927584cd4b3a407e3ec6387c4a93e9e5373178000000000000000000000000000000000bacc8afdd70e927e21521b3f62264ad4f22adbc872439ff851d3d169a1c79a0d02bca2aabaa0b9941ab1c71d092fac12196ec0e9d2f572856217521fcc5e2869f16d5ec5fe76f7d350698f55ff0c565000000000000000000000000000000000b0c5981bf6ef5b85bbc504fb0196ba442fe87302346688165aa7df8cf2642548760e11daf5b3fe2e37b43379afbfd4a000000000000000000000000000000001086828b9560aaee5e28bcb50db8153c40e632b18c61ed4105bb7f472b6a69ddd8a2836f6605102931ee66b2f07e441f000000000000000000000000000000000f4d7aa3d1a281af6f8afb3d886774f4e4a64490232f63dbe16e3b8c4f626e9d07f7c668d09cadab3c92d6fe852427af000000000000000000000000000000000d92ea3318779b532cd81c9be44b1abb179a8411319a6f8fbd7e3f158bc970917d3e0b25f3f3f6c8e0764011f9bab0398df5017c9c35604f061a7095d976d08bb3570ef8fb518cb606cd39a3060157ab0000000000000000000000000000000000dbd83910f304d0fb2b6d8619c3a308c719f6454a357d9ced03b2882a50692c06cda7f4331f54eb293ed5aa079121fb00000000000000000000000000000000019c33ec829367dfd2610ccef9842ffaa5e4f35809657c22134fb09b024e07949d8370ba8ba1e9149060e9bd3babc19c000000000000000000000000000000000ac468b42925d2daacb8574d40064d393caa643f08767d20e72ac0fad1447a64d8743523312f3a91a118d3e51e1f52d7000000000000000000000000000000000202d1971fef2938cfd10bef5900b91cc4811939f66f1f5578a8ae0eacb2538d2a51c1e025449e1637b5173ab7fa3b6f7b82e7e565f8a521d1a9d0ecafc029f76b70042e1ec36c20e3789b49c7e50ef00000000000000000000000000000000008b6709123b9bd501360fa463dd08076c59177dc0e8035c49fa2f541eef3831e4c584c5a9410c68999dddda6c86fd9d5000000000000000000000000000000000fb94eb34355c636dca909cfa71f52471217b9bc241cd3e98907d4a5c7eb67d5bc9cdb0c73c1369d7950a014fe6069fc0000000000000000000000000000000002e2ee515a5dc96a664bb1f862f21a8d3b7f903fb87f6dac41c3541f3d83633f351ba8dc4661607d24b912dd1ab097da0000000000000000000000000000000008bee545e00e3fc283185a85511e09fd0253e191f52d5c0b440b10228041800c013db3c9322a835e4927c0ae0b21bc1e8260c1b7a249ba215f0dc127a41876f858b20f4422140bb7695c8f98e4c474d00000000000000000000000000000000006ba635e74538748c29aa7c5690a0530f2b1970554598a432d4ea6d2713a4d26786b6e80f67b2f39e218b19323654ea200000000000000000000000000000000133ca9e5e0d4a8200d3522d8e87dec3c72edc1cf16b7305af4abd466aa7a0e30159388d34c36ea030450ef45b7940ec20000000000000000000000000000000004724239afc773688ea92296bae8845f20793c05807a18d6f35f03bef295da06f8ac9dff438b720dbea7ea93f3ea9c4500000000000000000000000000000000149c12922fd69e1960274a8b91384e929fb354936c020911495e6e3c49faf16899ec0c6e87713ee2f0149bf808ac8abfcd68d2b074d038ee0d9887168dc16805ed55df26329a4c0e062c2124a6e5066700000000000000000000000000000000148a4fe6ca67b6c785d5d8a784d5e68fcd2bd08294ca37f296b6426433b805507b554eb9f0fadfa9d293e8cdb8547d4c0000000000000000000000000000000003700600c2b7bfea54801ac95ff7a2c069bace31ceadab2947a0641462089fb43f0b9697acc005a23007a923ffe97360000000000000000000000000000000001705a769ce3c9a7a91283e4068c602d85808980d6fb457345a5f9b2499ff8fb3ec8383049b9b7cae96bd2ac6106a07fd00000000000000000000000000000000052b1f4e8a48a5eb2b2580614c656393819b4f0ffea874be899e4964c7e32d54757f2d48ca7b50e47e8bf6d6ab8ee7572a40c2e796148ed1c539b0584b90cb386844fdcde5d3766cbfb1d1b58626fcd10000000000000000000000000000000012ff8ba50d587765e68f95d276e364c8c40c00b55abc929f9ec240985269eb096dd3cef5826cf6269ecf54bc67773510000000000000000000000000000000000959492d74cb34c8c9ca4a21ddee97df99c8a6e627db3ef72200f39e0402d56f0a9709596189c80aa3aa50793e0f1a68000000000000000000000000000000000f7e5dbe884597054d6dc5e80bf4d0d333025bddebc1fdb1d61482cf15bcb4c8a95ea29cdd0925b5b816cc0bb307387200000000000000000000000000000000194e940c041d71f43ffaa51fbb31eb63c23559069b42dbf8777f35eddf14edbc3f7762c7b354174a584507ad714948234a1e176fb26983e549aefff9aeb220f50e071222073422dc2c44abd85528ee2800000000000000000000000000000000101a8e54d1fc2357df60b0ef8872b729295218f29ff63f7a7b6a70b3ecdbfc6809eaa8dc1f62a664b9987e8e86154c6c0000000000000000000000000000000015b5ddd012b42e1a600d738e05b551d91e7fcf3cb36018ceda9b689b92022224990c11a6fa0b421d5610b7e59b7463c30000000000000000000000000000000016130be17fceab55387d43179cd943c85ce1ff1881c07c937b2cc0645ec9ebaf0e10718ec7fe0d720f49bed2b8caf15b0000000000000000000000000000000017d73650680856bc11619e6acc139e137f0a06476f5f8979b5ba7fb8123d85916915da60d1f2e8c84197eef518b350c2a62e07bb97ca3805ba2d30f39f44e70a7b2917889c26b84bac8f9739bdf764090000000000000000000000000000000007d26bf37a97d532ec93a3eac00d9d39b064ecd172ebd5e18228b1601eb7a2c272aff9d88d63781b4a587c2c8582eec4000000000000000000000000000000000108000e850bfbfb02d7acef97592e15ca721334eb51197511b0eb2bd3bb647fc8f07713487b0a0bedbafb106992de4b000000000000000000000000000000001868c0b2ba732731f7536851f8005e8bae7b16545b39190251eb2bf93dedbf0803a42ec24cebd151998b690c38c0346c0000000000000000000000000000000016faafe909a1f926333b12f5463231a71058aec31d73893687d3169c4c3588436f6178447eed307b642490199c507d63a14278fe7a08174660c08323de272b2110047a1d1d8bd0e3c7d76dde030e00a6000000000000000000000000000000000331338cbaeb8e304fbb9257bb80aff5d3e043d07dbc476dec2795347e4c25248caad06ad14f56183d2b6276c49ff98700000000000000000000000000000000167e9578304a1162de73914b02791468e14faa2e0f161aa57818b8a169b5933dfcab787ec0f4b23737011163dcaa02750000000000000000000000000000000010aadfd5cc781e73c31f2fb64e7981b2e28614aa18dc7b2d96d2bb4ed8c2ee9089d6ebe0cf85479b272cb049e934739900000000000000000000000000000000128d7ea54f338064cd2f041f42a1a1e77d8b9be4ee55f568786a36f87f965d8142207e518798061eb3e32fe3b0f1541d1f516ab5b36a59e6300a54d17363ffebba35fa0c64cadb21e541af5078545b400000000000000000000000000000000004539f22654b3182d4fda5ab8d4bce6f1268d4e402b6c29a4cdff3b5abe0618d33db55ccd1ff12b27b2cb0196ac53e0600000000000000000000000000000000177e80ab6aa8512cc9e4d65b06b2bd76e33bef9038cdc1ab97fbb9d896ae2ad884ea16407490653dbe972b14e9c30c0b000000000000000000000000000000000c280a4431e41df6515979a694ce292f220278178f7f36e23c8a4cb2b8a7ebc520901ebe34c72a26b2c8a60aa1a155100000000000000000000000000000000006a0b80538a6c8093f3655905af1c59c235567d22192758c28dad1b715045189a412e4c1edc26e1d8ac95a584277709b3bcdb23f9568e409271b5f907fd64b0cd81939a52a6db38fd8d95de76213f7b5000000000000000000000000000000000eb091007672a212dc4937b314576963d7561657cf1103820ce9bc34e4d46c24f4891a4a4ada648f8cdd2c30f670b86200000000000000000000000000000000166389a37e6e3c02317d68d54f29cc98d1d1df5853940555161d71df791cd92c483eaad87dc0e765b12408d6ac344f31000000000000000000000000000000000affd0d5734cbc27b192c0c0e464db48d3d76799d2c6a493b172127ef2df6ea18a33898828effeeaceb7a203e35ca41800000000000000000000000000000000155708b9756752c9b44048c91d71970fd2cf2a4cae6b0baec00629c81387c8261150e78f856093d81e816be6403f1ee91b716b02b3e94600867e019be166f4532d264e0aa65d723dc0e117aded59245d", "Expected": "0000000000000000000000000000000007ceeb14945414d96088a7900c1120ff182b2a93b09943c2fd1dc2b0b223f684b0d4c0b1b5803502582f2daf16d81d2d0000000000000000000000000000000008df450fb25534fdc456a8f41cc143a84729ccb082aaa2243c8f37e34a6670f5195750f8547444c49f7a898aa8567d980000000000000000000000000000000008c12d360078d5645b0e095c90d4fd37eb20f0ebbc6fa93fa5beda7e7c78eecc06e0d839268e2c303422ab1769402e0b0000000000000000000000000000000002bd594a21153d7c458b9f804050d05caf2d90bbf9d18def79eb8148b7f89e3a3ac21f84b87fd13c39df5b91cf73460d", "Name": "matter_g2_multiexp_31", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003e06e2dcfbd695e9bda0baee1276ceab637fd1fbe2d2d6458c923c35b00edc7edf4f9e797aea59ff8cfceada0615a02000000000000000000000000000000000a04a2ed5e42fac7f064b43d64151a6c517ecf22dbc7563a3e9f35f555a9992fe45cf6a728ba94607df7c96f7e0a334b00000000000000000000000000000000090fac97f9f524168bc930d26ea1627ceaf187398d6bfc5a019c8467d75cd31a41c7eb9fda35fc85bd92b4cfca92dbff000000000000000000000000000000000f37b91dc935c28668c27d38328a511148c1739b65f2816dc53e42a8f059c9b2be7417a6f97c9a2597b1a0f06b7afc65bcfdf0495e49dbb8a8f9a0dc517351f39a6d823dcd42715f329dc78400bd74fc00000000000000000000000000000000090b834a587521729426d5b134c6058bf7999f4d4bcc0812e8d8b3ebb050961321b5e93356e87171a6f12160749394ee000000000000000000000000000000000cd5148c7eeac4aaea4288b38a02b5a901a6e2805e2b1695ed98ed86cfa0d259d87b65bf3cc9d00b8548100a60a371d200000000000000000000000000000000026db1079b85411dea0b9fca383956af50b938a465f35347605c01f3b72b297630ee2fb5252da20ee0d8ba5071974ed70000000000000000000000000000000012ae26c193e02d7ae4a7a01181551085dec9fbcac811c45d5cef19abf736ca2514e1259811970af5913891abe22a75ecf095238bcee61ec1317c0f98ad4f8f9b39c5940cf37a8a3a676787d9dda99438000000000000000000000000000000000ed5d8a609aa4f3c65a89b8dbc9334bd3cec6c7763bff298acd6c260e4d3bec0088e15c5d82618571d13b74a2031eff1000000000000000000000000000000000c28f92f018e6f822912b6eccfab37432ab0ab9acab751f848401791bd2f16e32ac6d97948bd8a0bed2ddc1917f0db3b0000000000000000000000000000000014083be2539d914883172cdc70950512dfe7be8893b1ecf085d837c2e9ba7f03656c5a0e15373e04d300869620eb66d00000000000000000000000000000000002561b77cc2658c54d29f8d1988dd7448f59c80c02ee9256404d8ef5536ee50104cbc11b6ee1ab9ccbf0ca55e53c52aae45a6d64cac817cd479a501c77b6720c6777c6026dbee471b490fee9f242a6700000000000000000000000000000000000fff05aea33a9d1e8f7b227c80ae87c9e7589ba2804904b7d8386b24b0e5324e718f29531251969a972870a30c310630000000000000000000000000000000016ecb8f27a369df13e122c981e7ae37882b36d5492fccbc86d606aa1198f3e4ee7bb7ad0555e11949e6c1783d8f4cda100000000000000000000000000000000187f425b675cb12719a01ee3b78ea73d88f70805f72d6cabef6372ccb9d99008bdd7da54f155454c4c59f041deec86f800000000000000000000000000000000151c272d5cb67b3f801e103ee901deb4b3d3bef76ee4e1b2ce1b5e663ed292845ba012c732d38f9209f82e77f1f73cf354868215022673de608cb43a3cb74ef2073ffff34c54fbb43f19b22a02bcc2ad000000000000000000000000000000001791bd59815309f2aeb7b07df8afd89a288eb6f19c7e613f394353ac5398267e1388c97b17d83104446e57f94581a79c00000000000000000000000000000000154cc72ada5a9c99dea06ebec143a14271cf332b57c631725ab30e2d308d6b688ca08a79efb6fce632cb1216ac3d077e0000000000000000000000000000000012b4c6fe8c17274ef57539563a736c2f83c4cb473e9d075a976e18e193255057340f45de373c7d6e3fe5e08ad0dd97d20000000000000000000000000000000005aef16e11bd4e7787bd5ab4427276ecdf9c6c134b9fdb2ec39e87ae4a5b3b674b5ceee29bcdf804ebd7e83960d8d7ef7068c3ba82e52fce0223a9f28c1d42681c7863c94797d1786c1adbc3e6d10dbb0000000000000000000000000000000008e57f905fa202c7640500746b590791cf9d0f160a77e5eaa5a30280e513e8e801c4b6b04cc3f80d9403388571d180ba000000000000000000000000000000000da3c128ae234bc27824062832ac10aa9cd4978f37855a8b4cde3822f5b485fddb9a475a9805e795519d7f138a8199cf0000000000000000000000000000000000ec11b7e07710161fc557a56e04337f71aaa1a0f070cd84525965e53a1fe445c91ac07c618ec349997890ae893c165d000000000000000000000000000000000406b0eafbb8782d11f5dae2f6214282252af9ae9ebc5c17a81d4ddded40f05d0b534d14019bcb6cf4e49c4c182b90f00042b8005283c7b91ef4b3ff7e20a91349c8c3d1301c9b54b901e8348a7d186e000000000000000000000000000000000b1d456e66671dfa72ef3a56523eb939146226111fdbbeb697983928aebd5f50b0518db841a3d48912a7a780785c1f180000000000000000000000000000000007a15b2253496b78d270dd55b80bff90583a95283a89d40f6df71fadce56d103f0d365fe79256fa4f93b2d2bf4c06a2e0000000000000000000000000000000010829223166d38fd2c3041dd5643c9784da366a2ea8cbb3abdffb5fe43e975318c86de0ac9ec77c0126ee75bd209f7300000000000000000000000000000000004b124018e83e1e5e77bad42eb831798d450f8ff4a79c9b14f67f080047c491fbba45db79b2cf6015188f9fa6329e8be0a3eb64ce8fe140d94956b0685f91a5462dba1a90093e803dc617559a66d20da0000000000000000000000000000000011119be42b90c7857079a51695dd5be08e59374b0d1c7e12d0ffe870202e1f0c62bff84c9691679a82e610e788b7b5e1000000000000000000000000000000000c7a64524c5dd1bf10d16da7f15b39d05c9ee1620d4dcae79c60316a1f522b238e7934d1be897a441d0c8e621b67d44c0000000000000000000000000000000013045613a090d05d07310865d977c8e0bb1caa713b2249d6676e7cfd6f4e3ba8e667deabf9fdf7fd527685f7d251b178000000000000000000000000000000000dfee7f8259701b5726b6439a7ce77b92245499906502c7dfb384e29cafea61f3b1f21fcd7888231569ebf29d3035a61ec88ed0eac8d0f2f618530e91cdb9ea36b8d56c1001a6792a09e11ff65fc02aa0000000000000000000000000000000006d77669207bb2d064824cb56fc786c631936d30db630be3c08e18d7e95b1c26e2d4e7b2eddc2f946fba6e99acb2198a00000000000000000000000000000000168bd8f291f8bcdf8b5e9fa915f7f24856a62803bbbeb9bc38384149008d4e3129338035061631f1fbaceeccfaeef4a700000000000000000000000000000000146bf2dedc262557dec2b4545c94a37434e20e4900b1693e8fa9bda9a94dbd07e0a3bee5f3bedfa42148791f4951db7500000000000000000000000000000000138467700fd5088c76af2f77fea4b746f98701fc0578571997b0ac2fc343354ddc8b2dc57d5298dd4daf767573d8bd3d5f03e53ff983fe4886a3dfc03a353fb77927d7a0d1998a1c55ca7421a4bdac6f000000000000000000000000000000001536da0df7c91687339fc93608eb404c5f46adf4b9122b99b1e5cee0012e27ddf30934d8f669bd39091f8673aa3b3c490000000000000000000000000000000002deaa8f9349e7c551e39751b1454a00f8f7896d63110e8e42607e8023ae3070c4abc9885ed54ee37a82f6e5c68451e900000000000000000000000000000000079a62eb17f7b07d4117956d3dab5d16a7f90e98948d5c3caa124fcf755c73f060a90d002cf880f5246a87342717b4dd0000000000000000000000000000000001246f0f3ec2af7c0250ae14cc67b5a1d42309f06c6f47b89178ff7534c47e8413a26a43f27454c0f946c66634563d41cc1b04dc356bd348211ccc4c50d12cb382660a4f9526539c2a0c52b021ed216500000000000000000000000000000000046e4a08785de985c66c7417f9262d363b9acee07e250999a4a7124f101ec4d82e3e4b2b0d9736471329fd61d0cff13b0000000000000000000000000000000017bf1e20ac181780ced62a18c78b378fc0dad157cf30d6026680560b681f5755183bd30b4e454764c08edb93297590b5000000000000000000000000000000000a57cbe93254bb0796eafc0a57330e38bfca37f8b94c4d21ba656e5616239e1e18ba6d632c0129d30291736fe37a4ac90000000000000000000000000000000007f31df7dbe9abe15f4024d8f6bed93c92ff5bfbd7835e08e870eb1bc4a6f62b3809b922c6d5a7350e2e5a978c80a67397b584ee05c27d45390aba36772ed49d571837567e95f1fd3ba3fc1ba5916727000000000000000000000000000000001577abdf6e915c9c3b3fa50a4601709cd629397f2f91784528e4cdbb140065fc2a6ee3830983dcfd49a928e78cf530aa000000000000000000000000000000000d6f98df9e41009837cbb05bc3e3340d38e56a448fe396bd48acf03f061e7489d1402b36a84b3c56eb859437e9c406f1000000000000000000000000000000001912afae5361c3d8c6141755deeef26d1fadf6b0036b9d05b2e0c4d50f42328741f0423ac772fc66dbc922bd4a837ac40000000000000000000000000000000000616661f049b5c784ba05334b2931509e1e033bd203fe17f04cfe12e80e73eb7075beac9d379fc1c457bea1b6adf365752542cd551cafc5d50852526ba0a23d274317e1e4a6e75c0d19319e5853b8b6000000000000000000000000000000000f98fed7e4d67a513c746d2fb188597a605165d5d299072aad6d621e077845f93804d575a5796bfa726f529dbd90e014000000000000000000000000000000000adb2d0b6c02e4e8fcab11c7c8819e87f73aab673ff9dbc5c50fee751bc7a6a8d386c8f9fa830b5545f94a73ce6e1f1f000000000000000000000000000000000f08e05ac40655cf59ee3ea9f10fc900315c6f06ffd3b80853560559f580ecdd65aba5ba660c729e0bb9576eee3703710000000000000000000000000000000009da46469f4b8fcd8d2b016e96f6e6582fb01c75407c36c7f87b4a1cd8f08ad06e962a0ec2138ed6fabaa1cb0115f97e2f76a0fa585828f79553fbf3baac6a2776b782de66dedd6b734f9342e734ee3000000000000000000000000000000000047b45ad2ad4f7b5b72194f98b98b2150b5d73a9df2aeb2377beed9a1275a882fa2d849037ddb56af632489f892a48a7000000000000000000000000000000000e1b0d9b52c0c5324067857ba4701f5f20eec165be418871fc0f0adbc3a0bbdce5a33277a33b79013109b81e006c621400000000000000000000000000000000179c471e01e340d8e6fc0f737ec09f0180bd2dd2a86d0817f753d1e9a9f8cb18178e9de68c596dc6a824e6c3c151d8b80000000000000000000000000000000019405c1e571a9b200ff2949aa74647dae59d92a8669d4876ba23f1b4a12a1f9412412503c68acbd619cae3ff056bd346f638e6a70917c89811851109296a7225f9c7c5b3d7fe6d6ba6c7d1ee77db4458000000000000000000000000000000000ca8566b9bd088c471fd33fb7b1bf760ee12cc8b0cfa9ad92b45012cafef5c0772d9bd3bd9b266d6c3e3890c8f00057300000000000000000000000000000000055789839e786ecee7fb7d10f3876359fcc1bd6f2c5cf25c8337aff7fdeec9b43ffbe932cc4936bb708571a59e4339990000000000000000000000000000000013cf827bd57d8179d105f34c147665a072714ccbc114aa4e878d04ce66ca78bdabdc4867b3968c75dead147257197c6a0000000000000000000000000000000014a8dc5ac1858442ca627eaa194e1ba64091b5f9ace551338d770c92fb49ee12449dc200c8c35d70f9e0652b4d9b90da1c4ac944341dc68fee586d221db2a8167e833f18f012afa7c3844def6dfb26bc000000000000000000000000000000001124ea2b97a6d73c81387a51e814b9bdc951a773db2a32d50691be60f1d397cd4aadd9b06e4f49c32b12254e9f824fe80000000000000000000000000000000014cb365e9780feeeff3548f34a56548302ae0dc73402c40317fc819969ee9c4ea2a181381b94f82dd97a236671b456a000000000000000000000000000000000064b769c4b785d45472038aeeebd3ba9b28b3132d72023640ab2d7512cc6e31296c5330be5653ad6902e4e15e57e2c3e0000000000000000000000000000000014c7bfb1f142d69c17f73e23011aee0063a97a99d982d25ff72791a65c7a68941a80fc216cea8a49f3df2d0748b1f95db0eedaee9347b10ab7b346fbc16c10cc9db486f561f88b756c269ebbba23a7f4", "Expected": "000000000000000000000000000000000fb1227806c750e0eec0b865daaaf51afb74a88589d1c035c60dc1913f05c8ab18de24903ea876fda27b97a5eaa2fd7c0000000000000000000000000000000019903e1341f0285658164f9273b5c958060bf836264502b9dc298f75d4104d7a43b8d5dc0bb934a506ce1273ba839d830000000000000000000000000000000006e791347b54057195189e8b9f10fd42d170f37d455c0af5e92cc6a12e2c23990253be6855f4be6c84a708852c19a6f90000000000000000000000000000000005b72c361dca430fb2414b9d5a326cef8b77cfe5310153d6994dc1f8b9e74e8fbb43079e21956f428ed8aa48d6897e32", "Name": "matter_g2_multiexp_32", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000052acff88605f33a0cf1201e8101c95ca0befd443c087265821a7d954917a026d41ab24d29bdfd972bb52ff4ad6de14c000000000000000000000000000000000e134b2aac3f6270e43afd994302426796b1e362031638fe0263c0ec212b828a30d8321af34ef7bf260652150cf2293b000000000000000000000000000000000d6628f675008099e9a75e1294803e86417ab22670d36316798680289ae61a26821693f2f9efc8468721a1097c3bceb20000000000000000000000000000000006d66ffad1a2e0f39488fd3f6e0214c9407528c8bfb8d1ebe6d75596a3e3cc844d00fdf46ce7ff6cd6d67732874a24a484adc8cfd2e42abc2f0e0d7e9c4b378f73731905760bfeeef01c94f8d5c3cacd000000000000000000000000000000001160bf0f7f2915cfc64e12a5a91b7e2aac78d4c2ce362e7677dd0e9c0172b37fd1b52222a13c65819b87593ee32a9ba6000000000000000000000000000000000c8be2cbbd302b31b1ab6dcbeb57b4ad428447bca9159fdfd007f5375218d121673a010f2c7fdf83fb45883458fb068e000000000000000000000000000000000363d3d492e6e6901756bac13b5c32d55aabbedde878115aa41b57d27b49a0f017a61fc90b13a20e009989374b82f5dd0000000000000000000000000000000009302fc26e6d750ff9441d7471903cc296b320128de71f86c4eacc80ce0725e8eea6acd2af056abde2f61e0a349f9bb5bbd5d4a15998d733326ce23cced86ec5d5b410c29ee98a4de19f2662c3933dd1000000000000000000000000000000000b12aca17efc103cad500b3d773e43cb24df6be651963c0f30bca489f1dd7911ffc7204fcaa4511e161c6f75da4a5ff600000000000000000000000000000000179a36e9292d3f78a5fecbec1175f001bd4ac0ff3610f596aacdba29a12ea4844885a7c465e66d3883c7fc99d4a7e06a0000000000000000000000000000000016bfd0758b31f54f90eb8562bb693c45a92a297a3d302279c9e3cb8263efc0f31579a3af8e8f5a091d9a6a36776f445d00000000000000000000000000000000020f6c66fa554a5cb610ab05d194e7583e6798a113b8fff336c986f7358bb9fa6a7aab0b04be9b5c44a6fcfdd21999e83717aadf16301a9c8741d65c86ad7f849101e30b7b1a344643b100a8582a6ad10000000000000000000000000000000004bf40c1d2d3574ad7fe128ee376364591b6f647f939b0b556ac3fdb5a92873f17c007e926b8a39a97c814728f355bfa000000000000000000000000000000000b8669e10e0a538a421b717287455620b82574b96ed09f64db444ec73a67a3227503e1b4fd6869314214071399eeae0b0000000000000000000000000000000006ddea4adb703d7205b6d2af436b41b4bde3a8c5dbed9dd161c9b3b466ebf06beced64fca25c3bbb97f232315daa5565000000000000000000000000000000000d97248a25ddf0ebd0200c6abbcac9ecd9775cfc5ec8da91634e77488bb592e5ff277a9607fe721990f403dd73f746e622788b3597da7b9b106203dd0ea97527aa8f5149754bbb0c10bb6eca8a46d94000000000000000000000000000000000135bc4f28663a6d7d995f6b876ffb8e6ef1d2d0f232388aa5f390c57e8c48cb84d370ebc4bc267eae4466a019c9ed56e0000000000000000000000000000000008b6a9d13dd9d7014df6acb59f80b335a751fa2ba4dce63467aed18f68358f5cb743718112b3cb2d0b5add34bb6989000000000000000000000000000000000013a5389dba4da195f34fbe798b254403f0bc5632ed98bd6017ef24fff33640ae493c1bb7a77a0d3c97649230e455eb51000000000000000000000000000000000a69803a4cc237ddfebc51df2d90fa1ad03359f9635ac1646bc942546575d1558f5f2c3010f6e2207849ee697be41d093c21276fc1371060c226424eb9886de6897b15b075fc5a51aab4710e9dddd384000000000000000000000000000000001939c2431f8ac4ab19d2735f122c0424af2ef18c0028e155611237e86648bf1d74fcba3008f5c6aa30feb5d4a14a3f3f00000000000000000000000000000000174473eedb54aafc522973244ec2feb3f7e95e50a1e996d1100c8da4fa59428c280f76e9e7364906662c4d2802235aa5000000000000000000000000000000001021d15f8ae2f62dfd3862944bf3be88d86d8113f4be22544ae5e925d450044279c5bfa1bfca44cd5934b42a27096b510000000000000000000000000000000015e0f20efae92e1fe8dea2222ce808a7de9e9e861c333db139f8ac11d7c4fa9ae6e49f51095f6e16bc738dc6d094b4cfccbce4e92cf377f67244995badc72db0b80fe37c9b7d443595156fa41abea17a0000000000000000000000000000000012d70691721f5787ea2e2a652f9c65edaf763637f95c285a62d32dded18579b7257493e01eda19631d00ecdd4e27a9ff0000000000000000000000000000000014da9ef6076e646e7d5b52d1803d3a6d897664851c6de2a9b330e48695737e05f0369224c3eb357bf557625bb94e6ea2000000000000000000000000000000001554f68124a91be5b9f325394db23ed5db8f6c46eb46cb50e57947bae00819b151afbf4ab4949290ad41625499f42dc00000000000000000000000000000000009fc0d459e28cd1239d227e1d2f7d530b9d14ce5638cd308569300a791c997a51dd5a98aad703239a23cfe7cef7f47f6ff79345f31c107841ae388f6cf116d10bc696aec4933de56bb9affe7e20c649f000000000000000000000000000000000452580d6a37a07038ce3564a12c1c7391fdb002cf27a6df7e194b38f3c12a3026f2a8acfe5e634cf89140da256d0a420000000000000000000000000000000004b73c9a4f9d41b8b84e53de538e4b15198f50247e75c274c14f136d7d91dce4a62c5346bf11a105f035e29ccac3dbb70000000000000000000000000000000008a8a3b2705a82b551f8913853f682253e7f1f68c8e42f349337f4f1eaa5103f59430af0c4a124b6a739bf88298c5f6f0000000000000000000000000000000012f4220609899e8610809bb3a4da46e0688c285ba2e8750b4bf44a849cf15fbf5c016e8e8f9372239bb562e7f38916e921cf773387d5351aeab99971eaa3b207fa6a318ad60f1c3e16b7f68251f9c910000000000000000000000000000000001884558e709635c046bd6ea8872bda936ba4d5ebcf7a0208cd0a4ee08b69f36dd2e136ce655ddfd89a5b1cf8e48f5ef7000000000000000000000000000000001357e2dd9fb603e5190d7b7ee105668bca2ed23ec6a248aa71aa430c2b2755747b8dfa3b147eb51ea644bf0354a61ba000000000000000000000000000000000009b0b0a76c6980e62e4893157b85f59345e1ac81e1aad1e48acec44c4803e2a9080f0d193fb799e0277ae6f1058839e0000000000000000000000000000000014c984ae4ef5d9d319fc89895f34a7db02747f57b206b0b30e8c9757d4b47419e6c0c8378fdec5aba364936a3b1922ca2d69cfed6bb2d33fedcbd215dd4e9632a3cf86a4b2716406305f6a85e6090a050000000000000000000000000000000003e1bbb872db172a1fa615155f81aa75ee9760f8602e4135ef9f1640b7f9d54bda911a220d211dc4bb767bc2b5e6e23e0000000000000000000000000000000008464f23cf693b1d4545b6ce4aecdc8fd182cfb288c5ddb1f78ca578e9b16342c8178d886cbb6b8086c0fd1318c4ae09000000000000000000000000000000000af574c4d0fd86087e23daf6d9ce98765e1e445ef9152dbd68152fa4833ada0be440de4abfe7c07dbd4ee67f1a4aec9a000000000000000000000000000000000a8227b982f9286b03c4d49766687622206213d88cde007360df9b4ca5916c44ce44dbe6443577998b4b0d527d22593379cabae288f8a9a8cd54523c20825b8fb07886bbf0ba0c5c807956f268af4fa10000000000000000000000000000000012e31070a501a7df7be43dc23e23dafa32ebfbc10ffb4c53f5d36bab2af69db5a05ad64b9ed116560e40b71f9217189b0000000000000000000000000000000011cbcd38ec3c6a6d49df6a8d6e1029a0412b42bd3fe8b42ed625adeb5a2f631e97bfad302de82ae34f715962b5ba0289000000000000000000000000000000001019b1b619fde9fb885d3c5f03a4373358107af7509754ce1ab2deb67df536d05e07ca7d60d927c15b549502750054f90000000000000000000000000000000018f1768b7140484105cf3ad2daa7c565e18eaba834db3f6bdfc9ee37445f2d6f7dc2b4c986b7efd5373224d2c92aa5a81973977d8e8c592f9063c5a14a658990f9c3405643089eb58324cd3f05b5b5e4000000000000000000000000000000001847b14146cfa2e1700f368f414b6a66ccaa02ca2a90b40a8e2be2ee4eb66af77ba563d7507de63362fb18426b6149610000000000000000000000000000000005c028d2b344ccb6400b53134bd179028b8774000ace89369bc655bb9dcd1643aaeec830407ee941df5432ba27987e8f000000000000000000000000000000000c4a680e2157dbdb53ae761209d505b4cf6b18fef5aff1c5009ab41295e0ce2ca23bd7a4f983fb9d085e1d0dbc75ffe40000000000000000000000000000000013c0cc77a5d771f1df99d1530e65ba782604c1ecf67d08572609de9f18405b9b817c2643226cdc7c9ad35beebf87dab0a610bfd375a7b8d0b034c17c8fa27d4366b06c681131fa7daaeeeb08e25c2ca60000000000000000000000000000000009f32f2f83c21875963818872d243cc8c70b75234f53490eccffbf060cb3b9c53545c1c32025b271514f500b20b00ec10000000000000000000000000000000002491b571087a9e89dbdd039ccd2c37d5d8d25587495b2d7b0066e9dcca02d44b2c134b0128a9a1527396729f069df83000000000000000000000000000000000264e9c47f72b639597de8f26a42ca7d77324f8c0db705986fc3b40dfb46f47764b69c70037a68d76a5de49a278779a100000000000000000000000000000000090614b3bb302ed9fb78b8756524fb78d54a4390b27136087181342571f994b1a93faee28256d765a8ff4f448cc357c199ffe1dc2d7526338462860501d75380a5ed9d53e675125342afb6652a97437b0000000000000000000000000000000012c716ddf17fca0d974e8d6003d99aa90f06b201fd141c74d8fdf1167030d14dc732917d3c6f736c68fbde9df50c098a0000000000000000000000000000000000261ef2b47de8e1576aecc6e19ececf80ddc1f4e28b2ff27953a65199f65a6211db7326632cfe04d543895c727ef8b600000000000000000000000000000000044fd6b9b4a1bacb8b7d4c53c106b025ae78f17c3baebbccca4e18cfbdbcbf8b3ef88ed5bd9bb36d9aea9e24f4117e760000000000000000000000000000000007721612515fd075811ee804314acec9d389900c7ef883e866f71fba00c49d5c4dcc7a2b8e2366f5a93f4577926ed171fdd97465982b58e69993711a6a64134bc4e76b88ba1948af91ba3339e9b9d3e900000000000000000000000000000000122581659ab1712afc23c23c2986394de8e155bcf722e944ec05e7e42e05acc366d9a7abf2136b5dc68a8dcfd4a640bf000000000000000000000000000000000188842cf4ef54cf77c145acb685d3187cd9c842ba6705bfed846ace83dc4400c45120fc1d6a633ea879840d3d0c902f0000000000000000000000000000000005c8966862ed4458a753155ffe2c64655779860149641ee5511a46ec576798fdb5cd9521528df77bfebcdaae2f94b865000000000000000000000000000000000cc10d888d2b7a97666de99ac14a501b7e2171f074d30d947efd67d85226c312a7977cf923ddbc88c533f08a99f2045f786a2a3974c84752b32f29707805c71992d5d473f4b7bc1f0757d126607a1c07000000000000000000000000000000000e5af1420546c1a5a0e0c2bd9241bb7c7a26dd52f4f358fc868bea457a60bd4f6bc5b60b27069fb4f6760813a91ada740000000000000000000000000000000017426a65d239b1d9505bef2b476799c394fcc7bfdca36a1ee5a600351334dadc238b64cf8a667a25d4880a31b73c53a9000000000000000000000000000000000f151587944aad17429b51b1c16193c1e1c93cb412538d1475473666c997e012ce618eb841c4e9e064a08ab83d7fa60e0000000000000000000000000000000015c2e049c532db585807319c23ec077a51f288fcffb2cb6528d3697221e8542e3fc85d18b079ea1b217fae30858a36f285d33a7fbe6ac6eb42eb932dfbbca2f771ffad5e80fde686e5df9d34e9f83ad6", "Expected": "000000000000000000000000000000000c9be91da9bd8774f18efa3ae9248e4b03d11c49b377c372613b7e745882b2b23c49d518672e58eabd4d9b510a25d8fa0000000000000000000000000000000019687b9eaf5d68b0e795cd57055a74e44efb3e997cb038b7f1cbf08ca70e80a1655cdb04402c542a92ae4e435c22d0b90000000000000000000000000000000010aa1514402ce348d1d61b8d38b53017cd3977a84dc14445db64799cfe822b56a0adbfc5332093ce7ea1f0f438bf15590000000000000000000000000000000019ade30ba0faffcaede95aa272be042aef090f89d9ca25cb825846c4bf9e4c1dc575f8968c88ada51fac71f26fb01517", "Name": "matter_g2_multiexp_33", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000a1346771f8ba25fc44323d5290068e46b3f756de6d97aa934d511979a1486bc32173575639a7e54aea8eeb60f32a8c3000000000000000000000000000000001958ae7fce87db47a65a03402313b99f659ae02e8b62db3525d48dc9075aacc5e5abb50156e704701f3ceb18747e0431000000000000000000000000000000000f98778311e28b4081aa76a3f9546b94c29d86fe8e66b905265d74ee21928dc3ac463049f70d355d8caee5b59d65e07300000000000000000000000000000000185cc233ce72770ae26406476c1779858523e7c940d69adf2750695cb12440440686b6b918f4adb3b14aee9aceb6422119582dfd9cb80d44c17c5f62360e62f6736d186194f0f8483e34d8d18d832d37000000000000000000000000000000000ae2f565a44c8e07f2a136368798a44926cffd3c3a6d4c2fbf91763c20d2bd959271343b80eccec4d59a84394c7a3ce70000000000000000000000000000000009481a5fb276c938801133adf10dde3e7da2087d0bcecd3c9435b7de544271eb3b07a69efe7e168869e727868f24b0d90000000000000000000000000000000011774e0197866b1c8b3428d353d2c9f6326a77ab30d5595e2402a0486f03ca6ebb1e8dd335a60a772dfdd9a3dbdd3eeb0000000000000000000000000000000011ed2480d79f73a67a2adaa6da3ae4f1e1c28feaf0e4cb9aafac658901960129e40f6415ec80a31d72004899326f714bac0bd9b8746fd02aa70d8b8a2b5d3be46baecf9449d8cd3d620cf9efb3c615d1000000000000000000000000000000000a73b0d8c31af2deed481faec54095875639233bb09f31b1c7c745cb54778d1c8bd0a230e963ddd2ec8d178d31fc14740000000000000000000000000000000015a889b16be93d0b6dced01f5e2278ffde1cef0576d0b04b49996cc5252854f879e04b1ffeb90e222f4b9d5fa350767c000000000000000000000000000000000b53dc4d72e90330ffad17012bc7dd2e497cf8aa6ec73bf25c10427e23fd28137631249eabe9d0308c956dc7a9e92047000000000000000000000000000000000930cdc5d04ed2d1eb62937d9f72fdd733c07a5a0e392fd5216100216b1a2e3cde7053bf766f046cc470d92bebaf6290069d889881d5bb87dd65a9a02a7fe239bdb55ee54a6310bc987e7c5772404d7d00000000000000000000000000000000131c4e590400b69b3657f7c67272b1e3491983997993ee87c94043001d78e605965abf3c1a8c8c39cc08d5a5ef05520000000000000000000000000000000000124f71c136dbb032504da910958e8a7949f1dc5c061f21d50e439e01e67919891633b3bb84fa8a54c69b632f78560ca70000000000000000000000000000000014a4b1a05f1060853f4294e669a20b91f939793a6eada6dbc84fda8ab11509b256d8b785b252a3795f1d2b99a51df05d000000000000000000000000000000000be2489f1f91d7adff356236859679c46b6bf8c1b375e8bc8bd1e97830b5ac223ffbbda60ecda168bacc2c0b90ed25d3be658348e299bbf2438a0c013f86eeeb69a013b8004a4996189472f3372b326c00000000000000000000000000000000111ebb796e8770d5a69e724a8d3ca62ef1f13778baf4ba12bf462211d35e325ff8e455c85237a73a3046e531f2e2255e0000000000000000000000000000000004308b76b06067e0a07bda143341220809b481b40b78edb2e24e83aa0f003d209198825b5fa9bfd92597e27a4054d3ee000000000000000000000000000000000de74485713f5c95653e98b96aeefb79b59911a610c2a848a807653c19d50394fdb52178947c779134d24b6d396ca36800000000000000000000000000000000069f47a71ad765591f6335b962e7c2d87b556801e1e6c25b449edc83432612fefd405c952397a704e9aa5a924769ad4e9b9d0ec92ae7df3f52a95747659f8fa3ca2cd01e8d7ef6de384111246886bafb000000000000000000000000000000000a3f89408ee43c0ba6a7c9c479327ebab426d430e3ff212c65da6364b16195619d27eee83d701a2ec50bd4b7acfaa06300000000000000000000000000000000092715831af983f740ca2c673e7c9c47727d64165c59fce19dc3fbbdd0b6a7be66288ea1f033ebb5ae2b38b3762edaee00000000000000000000000000000000071ca6fa9e546d4bce965b2bd0f0fb97e6833f05cedcf66d43ec88aba411dc4d6db9f1591de22f493f49a1dab1a2701e0000000000000000000000000000000018f89932ec032fc28775d34d588169a1435bf4ad7e2ee11c9d6934dae31324ddb96b3ef88f95d1bb2e52c3c8d9c01516d2ffdf1237b4e03c219806f2dea745c94bf08924e1b9f11deeedf0db19da6f3f0000000000000000000000000000000011b5cc382164fc21c9a72cd85acf61c2a78d00a16a2dff938f0b36bfb3bb7075845a1616001ab53271a9a257a38312cc00000000000000000000000000000000139ba2f27e545d45027a0b11253532e28fa691170e08608472ce3b3f9a3e9398c5ee76953b1a1d01a5e79f194c32d1f5000000000000000000000000000000000d875f44829555cec695f3f4a28078b0a6f168bb0985793d003443b75a141936f3c7c633518890e0f7238416d46573cf000000000000000000000000000000000675420ed817ecd24bc5172d3e7df60ac4281b24ba91e8b5ca8bd6a8321f5c7312a6ba043fbcdc467c8a5c957590a692cca0751c9534cee7f14d11b7c8ccbb2c537a799df59f850bb125c6362d72e9c400000000000000000000000000000000107bde844286cd3958cc7a1314127322251699b51d8af8e6b57495497f21a84e05612b1569b54fc5639a75e9f9deef750000000000000000000000000000000002355b1a60e24e4879448437d2c1b12e58f02d7eba88583e96e9634f7e2c8c6886132ef0488918f665ae3f7b6977c7c4000000000000000000000000000000000fed531e437b70bc4a19ad63c61ccaab49afc50fad1f156b1c8ecba0e1b703f8aea61882c6327d4d8fdd072df9c4e73500000000000000000000000000000000182177409579ad53786539514753c696c8757b8c4d9b8360392f24b591e43ec20e84c0abe468061a9e5e879c5c81314217f890a1120daca4a1bc1bc0fa7529f0a87b5fd6ec385f12b270bc0f1a5281b40000000000000000000000000000000001fb25395089228772d6000025cb0356eb510c964bf7d0c12d47a6608fc18cc448e44880eb5ba8475cbe6418fc9d8fee000000000000000000000000000000000f3b9de9980e5afaebc59c56e02fd75fdad13013842ac035f8d5569a46cc67f0cee461a939aa5a3d8fec2966294207930000000000000000000000000000000009a223ac0edb164845eb8397e0cae4363fb2c8c996c3c5d722cb50be56cc3789c732763cfd4b61470886dc991be39f57000000000000000000000000000000001909f17b229eb351dfe8317a8273d846edf14ad5ee0ebe8cc2b595ebfed19b73983035e19ebaee3d05b1dea35968586961ca18257d9d989ec13d4f158b18ec17d59344f4558b6dae6c0aa0c2f37affb500000000000000000000000000000000081fa9eb8ca7d9db52380e4c408e6d5d668471bafbafd62ba9023fa08f6d300a45295b583677824c29ddc3254439cadc000000000000000000000000000000000e2e613043b1566674f791dca9d860a49a75dfa24dce3fe18f544a9b24ec5266a64e77386b672c93fc4d079eb8e76a01000000000000000000000000000000000f471b86ac5783d720e7d73e8871474c8665e8a109aba27c1172ca24217eefb0f66c53232df1672dc0af6ddf9640e10d0000000000000000000000000000000010667cb22a6a818fa7c729e40a7e70e1f31b0ecd568b54a4d352d5c9df8cf1072ebf2ef1e612efd96bddcbeedd8566430fc004ed8a135ad97cdd1bc4d0c3ccd15e65031ad7e3cc13ef2c260958bc43be000000000000000000000000000000000a0ed87b01f27f26380c6285e82bf2f12ef3016c7e7f3a13041d465825664573db47be6cf099cea615e21f6a5d759b6a0000000000000000000000000000000007afb2a1bd50fa0fd3174d70f1c8d5c229627a496bc9bb89d4f52d47b1862e14d704dddd80045e58d00336e898a996eb000000000000000000000000000000001698f30f824ee5cb71b3f2451953c371987433d2eda570f2a13262ff9e5e529e316b06ef6aadffc152803b076f22db9f0000000000000000000000000000000009eb1d5f3da7cfe9b40a70e1b3c3dae36436e8d068a79dcaa283905614676645c99a5a165630ad46b70bd6be8b1f21a8d8cfaa1037e2c81c6973b221dc7badf25ebe3fb4b42bbdef1124265df2c7ccc40000000000000000000000000000000005c4390b8f37cc3fb9f248470b505a5d9502d44e4a4459d1f56452cd9aec89d114f1402fa45935930fa00888a4860a9900000000000000000000000000000000163b0ca84b5cca4f124bfb5a13a4a3efa677a84dc89b6a61e69d0aad34fade528614e549a7b2326d1f6016bd0d35465a000000000000000000000000000000000bf450dc8af483a9f993a29cb47d5362c9f5ef38afc2fba8040e14514eb834fec6520a413fce5868aa9a2c7c3ff6617a000000000000000000000000000000001063619f384102949fa1f8353f0aaa5031234d736c54103df6ef6fcd0df02a19c3aef471f0413a1e19febed6395459a0c25ecc5d37659ebb0c9e21ea2f8fddc518e3d8faa99627b21faf105445f69d7d000000000000000000000000000000000e35db3017963d3a9d62b7e7fbfa13ce4f5fb46a90c1285ddc0fa481d9379b95a77e8cdd4aab5c33059bfcdcd82473fb0000000000000000000000000000000004fa27c663c8d21f041d15cb199d31cfcb96a56cd673b730dd111bf03cd954cc33799456674ed4d58e8e0dfa826a6b26000000000000000000000000000000000e0df4e7f943db5b5c27bafc7e1ce099b2caa64642bcd6336ef926352682fbe81a1945b266cba7eab52b16f4aa63eb8500000000000000000000000000000000020167756b8c68f535c4691b1249ca1ccf0a539f7274623ada824d0ba789ef44ebb20ec1ba51d46c0a42da78653d287e26cbb32382902d9b1963779070d749cbc4df1e7605f840819f2c04aaf89c732f00000000000000000000000000000000178037c6b5fd1c6c396d8aaadb712863557feb744d2cb9165ae5c36376d2c066f7b1648e083f81c2c96da6562e0b3c20000000000000000000000000000000000b805b4e1cd5d45d8b6ed9d4f604ac0b40f336b8123f7281df43a6e803f8688bd8087fc4d5fbae695d06efb0fa35e18400000000000000000000000000000000000a947562dde45f613ee1d15614940a2edfc770d733a60374f8e9188675d4cf973a5c1081c11fe5a1d93bbe85e6f47800000000000000000000000000000000059473d80c82c6ca06b4aa71d072f4751b3b053b53ffcfb4a84906ddfc36ec5918668a62f07054af1b241bdd4485edba699aa549077a80ff8732b5fc9df148a90f405bccc14bf7305266836566b7a98b0000000000000000000000000000000008b9d0916a9f5689b8fdac84bec3a49d0224dbadca6329ecc156da633e1332bcc6735ca3ecb228c22032dcb7b2f372d3000000000000000000000000000000000cac0c264add10bdc1217384a7379f65b93cf822418f7e4e2b48eeac45f068a61f805cedfb1665dda06e04cb726d245c000000000000000000000000000000001578e98a40a64da59154b1c3d757d8f1f8cdc500482c7b7d65b9997576f745442fbac654c19331977bd210df440372970000000000000000000000000000000015ef69f82e85c81d28893d94927068f14c6516eb7d09898d5d055cbb7a9b55c6d7f686f067ab164160e6d6a8f91ea19d40e2de1a2901f1380a383a741d79fbb0a041da5d7bfb92edab74cd483edf95230000000000000000000000000000000000a6a27b498285085139b8dd0c37b700997134337e696c84b5e0cf70ea3991cfb40ca3a3098a3b3a2fa31e91aac78eb2000000000000000000000000000000000bbd7ebf4301c5eabd4f448b89f1b227415cede3247a1c8dc56a02247efaa99dc78cf370f644ffc06cd2158fa25197dc0000000000000000000000000000000004535a402540474d53c084d4fb6d9e12dba6716ee13286ed758aedc1ef911b55c572640180a54cbc084ff57ceae8a4b4000000000000000000000000000000000759de2a9e0f3c04b4f629a682dbcadb2140e5b935845cb55bd267e230e08c6e8cc5426057473aa03ea2196203bbf6dc062b323592118868d547e83b731d15ba2c7bdb1ee4fdf73600c2584f1db0b45d", "Expected": "00000000000000000000000000000000134c29cc5c33c10f04b6c09b5db71b10304028d06ad6acd4f4b39b16823288085a84a0380a1549f04b3dc692cb8216d3000000000000000000000000000000000a0a9379d63527ab9b5f9c00be4acd54e5fd683a0a2f37c85ba570171c705eaadfb0f4e4be1a8836c9de86dff46138300000000000000000000000000000000006ce78f135dda5af34a0e069d7ef13fd589cec5a6128512bdae7f45f28b09c6e4b3cf638628c9f4783097cc00082aeea00000000000000000000000000000000141e710ce7a979dd1772150d0cb2d5b269d5cda50d1bf7bd0cd827b24f9cd8c1e2775f495cfec0428519627b7fede464", "Name": "matter_g2_multiexp_34", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018aba8353cc470b287a163fdb9b8b4cc46071543ee8261f928a7b856287946637d9b36b728a54e1df5f185a47f1556060000000000000000000000000000000001129541b2e3b2e1a553995b603dc3eee44a5ea440e687739ee9e1339dd79bd96c67231ac753d483e0ca96b27054997b000000000000000000000000000000000e1cdf3591aadeb56dbd80890ff7d5639a64847cec771a19c769df7da732a6d3179d3a89ce0052bd7c982af0304408120000000000000000000000000000000000f5f5f0ebfd2b632e15381ccbabfa88eb774f2c61801381ca73e6970965ecd54f5f3a9af7c152186af8fb75ffb5bc25764ab6f4c43630d5e79e8c474d76d8973a7b7bd1c7f1a985333cf1a6be5ccff2000000000000000000000000000000000e527e40c311edc5dcdbb4d0b70497eaee14533aa8ec57dc7cbd7d839fe6c6ae62b1fd0be2346a038de687d5cf5394d60000000000000000000000000000000005f9fc63027dbee5e0d55cd6c57daf5df7af0d138393a2dcdc71ef9aeeb204ea347f7d574e71f2ffdd37d8f05dc7979f000000000000000000000000000000000f8788034c9f1c9c2018a52326c046cdba8997199732152963819b663c6e58e9d6a0065289e2e25a97ce5627505900f20000000000000000000000000000000002a747bb3bcccdc6ea0af1bf1d0ce55de3f41b93060361b30c76063346b606322a76ed7eb260219c83aea0806ac7d8583280f1b1e78d2339f64b5b2f2bd77aa24623b79fe2c9debab4212f4ff564983b0000000000000000000000000000000002148c043e065132e978e89f018a5b728d278c95c9cd1a6f276bd13f0cb708422a62fa22f7b377adf33055fcb09a6a8100000000000000000000000000000000024c4c721a0574e53118bdcc3fd41f73176bc8264d2ff39673210525166bb3513016b5c9af67a47a7032b74a62effcef000000000000000000000000000000000797dfa8cad94896916b7d55fbbb3eb0eeb74f70231205388d0dda69dd8abb436c22addd22c1e3689093739af957b65200000000000000000000000000000000010dd2ea2d45528de8bf1b5c5dc3267fe8951e48ff5987e67ec52d58635521cf1905f1688894e3e23a659764880b2301d4d27ff9d03ab9120ac2adfeb36b070015f0e90782255ddc9111704c5fb11177000000000000000000000000000000000eecc0a4edd3cc3f70d3e0e43ba56b04cfb3f1ac23c657048a94318e622217572b0f929c73f545d6f5f5613920c0580200000000000000000000000000000000137a098ea8d3aed32c197a2d244a2e18753045b55cfe16874f79c728c664b7f23b10476f20dfffb2f80417c26dff4f860000000000000000000000000000000004a7789b02d7d95a2ce0c7bac39d5b057509200393450a47fd9d087a353f866921aa11185550537b98f3073650d9a1370000000000000000000000000000000006ed63730bae06403baf705da0e30c6c00739799eea4a312d06b8d7dc35cb43a4f1e941a69e55ddd7ab8ce42d8629fdcc66d5291311c7cdd1f33e5365ec0689608b3569427a8f6a9cd0b94b671472e66000000000000000000000000000000000ee7ddbf43f17f722dae84d34d26add8c1d732918b8c75c6b295f2f584075cea0c655911410b32c06868c1acf36aeaaf0000000000000000000000000000000018775682555d9f5a576cf9462170910bcdd083671ae2e4c8c6fa99a702548f1ce9afe90e681b00d194322b1a2a3be7ef000000000000000000000000000000000f3935bbbf58b91fe8176f3e25ad3fdeffdd6b369ae70b704d4e54d4fe32fe5987e73aa5aa975e958497340274577cf3000000000000000000000000000000000c088bc439d638d86aba6bb1e6e9f7540ac2da3b96080aed455edd1fbabfc141e26f125cc3a9cf72070a24f298dcc3ef4b718a5129659250640e333f4567043ca749063e63d87efd86a9995adfd3b8450000000000000000000000000000000018d8a47d1a13b9b8fb5a1625f9616ba120d5c677bcc996f694b7e15d251fc4bc938b0a7cb5b70f22b8e9f5b416c513210000000000000000000000000000000003d0646458bbee7ccab27f858b8ab0af0cf583da12a40ca5a954d7eaf97c897d379129a63d8131036f29c30c6e644149000000000000000000000000000000000d5466b50975c5a2dad96e4e24339eafc8c85c2497a6f19e12d96603596498654cabea6995a92c91b8319ce06f18d56d00000000000000000000000000000000191a96d62139f8219b9e4369a783400d045d72ab2dd83fd229e08a4ca73de59a11a5add86c739cb3bab4adc5e9f79685708891f45d7bee38fe382820260061e212c6cb9a8572b4d1854f3ab09409b05a00000000000000000000000000000000032eb1f7846b563e98fca0cd44ede4909b6e16a893f5ef01eaccbd7d8aa11710606bbbd0ee6480f7cdbdc9ffe66c3a9c000000000000000000000000000000000c31bb6fb537cfcbffe815d86ebfae1f5053ceb756818ede8a58cd84cb34d0eacc70ab9095f9db1691e4fb4bb816d570000000000000000000000000000000000a8fa1dc2f28277a4bf8fd9665d4b5c3baf1352d89890d4af94a3657cdac7fd72558da1e65cbc5bfac142f0e817be74f0000000000000000000000000000000005ff65c22ff0abfb33518791823c5f2202ea5f7258c0a507ab84460335ffc2cc8d7c7f670752a7647d6a6487ca0c9adb85ac0f94f300b004c7f20aafcfd9129d6c2590749504a3f08c4cc708fa30100300000000000000000000000000000000190379b7629f74bfb88096dc9ffcdecebae0d653410f032a35a811a09022679c9be19f3790af95c3205a396819e068e1000000000000000000000000000000000b6f114fc277ae8f0b5374dd349985bf955dff7fcb0095e0e1e137fb539814be78c924074bbab54f29dfb42f3e7df24a0000000000000000000000000000000002d86b0507c147142d03d3461bfea4c3af7e57a6edbb372387de24a27cfe27c44ee4b9571325a1b3f5e83eef450f2fc6000000000000000000000000000000000ac3b226d5e13c36c3a8ef0c8896d9af55bcc0cb67ac1cee57a5c6519617ec77af9af60ed44e0a8284a2d59816ebf848fdbb634bc0f99c5795f3c4d6a0efcda7f71427f1eaa1c5411caa6cb05ee3147800000000000000000000000000000000079cd4511e953e4d1b3f4f3bbbc66a62772018e809779fa39aaeeffac737cda9a6116293848f967577f03017f33231d2000000000000000000000000000000000ce3cf48be423a2fc0188b94f2a22579872e9ba140798e560ad107f63ab2b8c601831f89d06a4bb8e7a758cf836ddfb3000000000000000000000000000000000a6a90f735f215a79216fc4e7daffbf74775f38824952af72ac38c38a77a277483e34bc95031679494d76f109c0aecc4000000000000000000000000000000000d55fbce780d885cf817cd2126e7acf115ae9c72843af23c376f3a5d4307d1eefaa0f4691e7c09b5da1707aeaa5b675af5e4695c01849259fb969183de385ef30c2403e081067c2d9b6b5522c73fcf200000000000000000000000000000000008924efbdb46b9324bfb79b922ba8b7d83f5e5e4b3b736105e5339805838171801bcf17208f3dfe5c7475d4e45b6ad970000000000000000000000000000000007bc0096fd23f0c93f0dde8a3974ea3105574e031202f6316d5940c85164c6d6bb5b86078a0c68dc822c0fd1b3dc8cc10000000000000000000000000000000017276b3208b347388a5657b10e3c8e4a187b376e42352f76ee3ee88873217b6b8185022c93097cc116abdecf3cc64467000000000000000000000000000000001915ff932acbdeb52f07b664bcc47c3a5b096c6cec32da4d7044326dfe84358e49539fe50782538a901b99428446b0f50ea6fd588db5efc5fb2248634cca683d39d610886b59eb3077fa9612c368d7690000000000000000000000000000000009e295d229b543a17db1cc85c846111b7097bd169d19b410de78f8da9684e664922eae77c64b0db430aeb422016cfe7d000000000000000000000000000000000e29aab30a1da56b8590e9df67171cc1b9c847696b51147cc57ed6c3b55819cfa0992c67e15e4ca6de2573c9e16231c10000000000000000000000000000000007cc9990c6722645e320dd16a4be8adaab41f958f769ba0d22e235549a7457778cb9b14aa6ea5caa9e0bd43f8d04cacc000000000000000000000000000000000b2dab5cf37ae8e76b71dd8748c86e8823142792445fa0b140de31957d35bb7267e3d94e0dc92f4342d9f8560c5d9d86dc2060a3421c5a8336c80983c9a160345901a496c3a74fc5248fca081d09953900000000000000000000000000000000128e2aa795f8479da3ea2a4efd12aa90a6fb019d4da89fd372e6848ff7ee17da689d766c9e49c88c962eb4f682c56fff0000000000000000000000000000000000fd68bb80d6b2200297aacae1174275f864669e962d85c9105032d7a352fea548e9fa0629a6749c789fa0827a40190700000000000000000000000000000000175bc3918dcc972fb728f1d8cc30ce9887efc6e0b254d8d22af87f95cd4182129d494c43d11b028c4b9849f5520a4fc00000000000000000000000000000000007c5363f507a01c0b6935fee0413345bceaf1336cdd20f69060bdba2e411521a61a549e6159b2e006ffa16e3bd77e998e27e4afc3e6d59d0f5871b35eb83b46cf15da6c326e88dd8edf84031f58e23f90000000000000000000000000000000000efcd782b89fee74ebc037160c6653ccc104260b5f8989545b40d51ead6ad6ce6252e1232281c813e3c883af86e68ca000000000000000000000000000000000b68ed21f76ce131c089dc454dc48ef948cc7c6d5fd87d647db954c9eeab2f7f76ccc51a1cff8612e89bceed16ca03ba000000000000000000000000000000000cd776670d5171610046fa294fecefb42f9bb4d71baed4af65a09018b09ad9341789abc23c9feb85adf96b4203b0c0a0000000000000000000000000000000000ec4ca0091a28b73c9adbe7120f2bf1a84a62ebba1e86b1948389b1a1966c1de4c632a5e245ba634b53cb932f5847f6ecc7efff04f143e2d038de153861da5e04016a7eb17fbe6365de13069d088b1a100000000000000000000000000000000022f319bb5167c2b945a69a438f712df8975a0e262438ea687e2b0d824e2d1d14bff1065f50fd6ae92494f6f3aa9472b00000000000000000000000000000000198ce9e4ddb6b423788dbea82d75513f43cb43ecf1b27c8788f041248f01808644f60fd823e5862cd7afb4f7e8b6b6a100000000000000000000000000000000119dc1be1bbb7e678319db73055ccb88ef7efcf6119f8a9c43c69247ff264879a627f653a10a950e0dbe69155ebca4f1000000000000000000000000000000000692a0ef5a75d42524e3fd52ae073b0f2ddf6378f18a5dcef05af4868a899b93c7f1d2691883e5c85f97052ef1f4177d09a2c3dbb4ee4f485dc60dfbd94a358a7c62204c021f2d7b140187ee9ffdc4ce00000000000000000000000000000000102c92272571b73a7df754728d7293fd8050d9dd2b8605c3f7722e6de541b7fc6a81b01c1cf15e5241ee4ee1f81ab39d000000000000000000000000000000000af1cd6f23bbd3e9ef75eed6d6d99a7cdd24574881b3609e45c4adbf82e08259d14701fcc5b6338ecf52166aecca003700000000000000000000000000000000026a1a4c3eb54de2ba4509dc806db9efc7e26247d501cb59c525b8dd15d03b91abafa9ba5816c22e1f8ca159cda34bd500000000000000000000000000000000170b510ec227fe8534a2cbb0f405756491c4f6832df552bd23980ab0946725371b3c24fa8b93a38bdcd47e1026e1d2a0d9b15c065497392e4b477a556ad620d44e671137cfd570d53590b7528f8ff680000000000000000000000000000000001423d1707e49d2215f639df75ee0e13bc724efc7d099259179260ba0f17157c4efc4276844bfdc46c61ac2185f64beca0000000000000000000000000000000019ad06d215d3c819311938f89609ea7cc63fadaa11bcc86cf5f26370a966eaed1aca312c18176674b5aaca3ed8ca876e0000000000000000000000000000000013bf3f13e87f3ce29f0524094e2ab8e39679566add32e779256006dc92ce09f60d5bb9cf0452b90ece71a5f6981d77f300000000000000000000000000000000112e4901efca14686c30a883ecdafdc389303f4cf46345e229885c76d900b0aa084a957076009ce22ee36d4e285d410c9e2a72eff2ec29a65b417767e7090b73c2fb530de6c8f4e4ba30543946423b12", "Expected": "0000000000000000000000000000000016d1fce53fc4cf40acb0347c0983dda46383e4828c16985459ac89a2ce8d3c2a26cd9acfaa2ec899cc63b4c6bc351f560000000000000000000000000000000019c9626363b511a79f297dc79c5a3b7a2e5127fe49a2fac5bc43a4376f170404f044f9f84b82cd09a306012fc81e3bdb00000000000000000000000000000000062e324f3d7c5bd39808b762a5b009cb30bec14a9591477959339bf2de9ef27eb42a0eddb95aa5fdca9bb9d89b278cc20000000000000000000000000000000000f05225a4d3bf910b0ac0103594a90684ffc0c09e2c21744032e30470d5727be3c27621dc2377e9845ad78be67b856a", "Name": "matter_g2_multiexp_35", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c64577b78ff306186dc44131cf8bd946a68e65502c4af9613154a7e3ffea4fe4e59cac4a500894b470a74e66db1834e000000000000000000000000000000000b4311c295bd30174f17b9ab3544f1496b9655302a4b6026a113b1aca31b555ce7b2d812bf8fafb6b075f67cdc59b77f0000000000000000000000000000000012d7dc3db10ae6b4e3e99c655aadb71124a0bdcfa6e30ec13c7c977d39f83aba4979a1f45881813a3a68e149a40120a90000000000000000000000000000000001b958c47cfecd619c05a2c54315585d15fe377beff889602ecba6ea3b29d51f6480f09a0a8490e4c754045f0bfdc3eb7b9aa7e0bfaf135ff24720773ccd1e0a46fab6d678d91a14de137061e145fb9d00000000000000000000000000000000010db66653f2ca73e55d85254f62e8b558584d546913e4b8f530968088d90cd5c4bc164fdb77325fe0bb2fb1a5683896000000000000000000000000000000000a1af9bf84f0b351c8e8c082a79c7ccae768bd2ed40eede38666aab1901a6eab0cff258f440c8c8eb4854a824b9aab4b000000000000000000000000000000000444fa654afb57f1b01d10be08a330f23667af58e3a40c630a2e01c1809125b3ff8f76e8a39418688a023293ff1a45e90000000000000000000000000000000002ebb117ea107a3598b888dcbd5918dd0ca307b21d65843c6c28b3efab89d0e276e5d92283bbb345b674d4a300595425c6733c9bb7bd195622b96c4181e8c8837d1912fbadf77d6029f7fc44d793b48000000000000000000000000000000000105818a11efaeab4801d4fa7558b09bd56294be7f58e3e54fab1f4f7c243ceaf08c99a14c3128ccfd866b6f93caf989800000000000000000000000000000000091ca092e5f83a04e872e621e71d54dd6886d088718f60ed5b62d3e4c165d3ff2cea1e50fcb94fff251df0f5ee453cfc000000000000000000000000000000000b42051a1ef52f87536b9bca459fa7070ca17bf825950b13b3bbe9db183ef722f62af6c05c174c65d59b722e1d2f5b0e0000000000000000000000000000000002fdb4a5480418e43aea28e5041af6ad55a6c226e1eea1a0449a99b5a937375285feecabea95c2652da5113dc17d8ef4410bb66334c677397d04f59eade9630463065cd7da3c9d50580c7d66bbaf487d000000000000000000000000000000000d8f93b589678d4e93bdf8da7834bc8edab648ead731b7f5f0cc299488f07262877ee9bb1174ccc106204dcd3f1f416800000000000000000000000000000000160f740ffca48d3a10c43e591cf46c129507f10e65d76a031fded2930d6c2dca4c79d7813f63e4ff71aee09d672173680000000000000000000000000000000013c768a4889315faa3976c8e43b4d466ea594bd94773f270a198f2571ba9662d10435d1e541a492055c333eece9bb29a0000000000000000000000000000000003dcbcc9e6a0cd5741d77da88fbbc269202e8f944a5df5dc4f9145758654934d5e1eedd596325080382458961ed3d21ed97a16fc5b2c70829b15f73615286eba334de1f520b5f0f6a83d2578399cc0b3000000000000000000000000000000001344fb37c1d7dcab01a4bf6fa50c6bb7606f7db22b85a3888ffcc2e9f229f196881cd7c82160730727e49b9e6fea04320000000000000000000000000000000010c7b15a6355d3152eaada7a606031f28809f278a1d0e04d264b563185ac7d9e351295191a6a90ffc9c6dd33995265db0000000000000000000000000000000014438086226a061a1bd557dac24d9333e14cdfa3a7bb00ded4a450e8889a3028b174bf38ae1347e6aad19ebc1cf5ff7800000000000000000000000000000000105165703c4592cc4f1f489d78426a56434dc77327c13221b582dc25306f4c5bfe596f3e47abcb741ab553fa14cad374bdbac08202bbe5df1229e99c76c1727f7789e0f8c2002f0a2c195bdfc00acb36000000000000000000000000000000000ad8b55a198a5e788bb54c32112761ccba9863cba16d95ec9e30181376e7eccaa2741660f2c5f708300be058e566ae27000000000000000000000000000000000b9bbca7db413964d2ec113cdee2d7a7bcdb712d285655f6b2897dcac61456ba4d08e25e8c28627231824829bd7d13800000000000000000000000000000000001ae49c10675256651e3e038a2150d85993fa6f2a97b9bc02c693ed97ad52af34015176258b3b2546b81010a4381d85c000000000000000000000000000000000c8f9668a0a497420acff5207a07cf780e0b2ba78083eb0ed8eef76beea996210541bae2e64d825000f307d54cbe3b2b43da827b812ec6ac23b00208cbad0f2e8b3a32434aa61dde029683c34c1ab1900000000000000000000000000000000012990a66c132a31d60d182f729b52d9b57d9d1eb1988b6f0b4d9fa2847f26983078ef9bbfd0e888e14bf7d1f92d09e54000000000000000000000000000000000585215ffc2673a197bf9cc6c6424547886abc6ef5c6edfeab2ef0c42034a4a458fc7155c35c84a8e9e9d89fbd4aa25c00000000000000000000000000000000118fb4fe0d3498dd2b55e62272e95a1203f9fd22314921d3e044f1b162376aaa7e8154a4e2184b66451aba98729330c0000000000000000000000000000000000364b9032ab9cd9f599979c8a93acbdb831707f1f84fdc92844b58bc7e4d72472ca5b09c51b1b04271ed9f0e391552463c7a8f7bf434ce5e63ac9365448da8663745f66689b4b04968f9b8b1b6805893000000000000000000000000000000000ddf9e4e302169e195f4f88fed06e0c93fd1b542abbfeea5da5d47c662ad9a16b8f4aed7874354fb9008d073920e1e7e000000000000000000000000000000000043fd1a4b781f25e8747ecb3eec45ce90760e0d5dd701e8193a7e726684ccb8ff21f0219ba15e9e777d339a3d87a1ee000000000000000000000000000000001117d2ca429048056084e4847c7169b4c8ddaefe1d48079949f9f14e4d74f0e0b38a95d0f17389f61da7b2a6d8cabd1c0000000000000000000000000000000007adfc7d87b1c533b4439f6b30d38c694b65b3b321f3eec13cd7d923f1d5f117005be6c3ea901a9479d79fc553e34e6c51f2e2bcfa6ebf84d3ad83c57257b9032e5d62a8663ed5d77afce00f33382bc600000000000000000000000000000000115a81aebee0329b174c01458f8714b13ea3fb2dbfb051b27b29b940652f27e01a84e522626d12be80da7e1039e2baf6000000000000000000000000000000000d9e37d2e5e7160db30acf5593d1c282541a0d4ac0482f0759fef8704b9ec3ab1e3ed248e37c6be285e890ef1a520d0b000000000000000000000000000000000c198a22c2f590df2902c8dc2bb1ee427b33e9687767666140f9d3b51d73fef18a259d43d86fb3559b1ab0abacf547a70000000000000000000000000000000017e705af54ab76145a79e747167a4fec6ec3a16f3ceef86b1ddd1be144e616ea7d686bbccbd1c5c258e4546405be023d6d8b15ec8908bfe008414757c0c7f79b3079f9db86d91ac3ec8f38ae2c94d48b0000000000000000000000000000000007c4c31287ae0b3bb90475f84abdda36610f887aae311d8e97bf97bbdbdfb11d38c7de331cc9dd022926678e5180c0770000000000000000000000000000000017f4afe28adc4b24d16b9cd97aacd171c2104b13b079c643d664a7c924151a401c352832c4967c0e5cecec5f1d1dae290000000000000000000000000000000005a8aa8a3a91461e0ba256e44af56875f8d07e24628e738ffc057249d8380417884f40c84e76dc6ce5816ffc05c0d686000000000000000000000000000000000f84bb7385a6936b519e881a708541570a31a9d7897ab8b348a350adb0d30522567fb917c9b6db661b6f53f98b5e68aaf4723e85076d48389c3fb5a5df16b6bc6f7a69ca701632b1159677bd8a6f7bb1000000000000000000000000000000000a8726ea352582ed52ab4e440102963891f059cf5a3f4901615733ad560a99930efd8692f3c30256d58e5cfc4f0803bf0000000000000000000000000000000016a623dfeae872639d99e3b8209748642f20af796325630596b6ab6146783bd4f2247c7ae38d53ba9a3fc0cdd6f29087000000000000000000000000000000000e40709656e569e4fe90eb85d8761c6ce44a4272793ccb7635ce75d67d97464e8dcd8c32bd4ac9a36fcce706006915b20000000000000000000000000000000019e64802756896206a9600f2d888f3d307ebf958492b1b5153c06a11231e2d7d2f1786368447f380093a29117cc25da9a632938a6df169fb64daa55d2f874ef7629d5be41dfa0d50827c082333f0fca00000000000000000000000000000000019c7409cda6084edc6e559da9b361c96cf207f1e2cd63cabc9b86c5bcb07a59b43e9c6ae3e90a61c872f168ab89cb2c9000000000000000000000000000000001101bb63a452b766a085fb788937f6b751417dd8d905ee50ab5bf96cdbb9d7b68c1735460a71eaf9e9bf662734f495c20000000000000000000000000000000014a103871fe523cd01053a992eb9884ce83c6023bd6a8c2cd9ca60b8780118c88502c6980904f2d2bf9ccc9fb597d535000000000000000000000000000000001929f25d52ee6b9a44333237c732a63ce2abc80c5510bd67faad1d7adac96eac5449823f3a52ed18bb90b93d9640d0d1283a4da7f71bde54d4b7e28b2b23e2eb05d8b025e77e15810625d71faca6d6e50000000000000000000000000000000015b0a46692f57ccd2b7f53040dd75f30af0196aa3c5499049eb172b4d927f96a59c42a129117d6162a1bb31d2e8734a4000000000000000000000000000000001366dde2d9070a2c057744fffe78effdc328b122e356a6aadb10c3fd2e8badc0ff70bc6d18293b3c52428e2ba78766600000000000000000000000000000000016fd48b067b949ed75bae3e4db29b5785bf672bd01032a925d653f8a605998e1eff6c77ec39dcfccd417f1e0a9defa820000000000000000000000000000000004cf22bd706dbb1cf8b97187ed97636380871402b3ba9de58f174bf50a7a0b528749762c3f55f5f835a276e43b46e669d402b71c1fc5c3f3a4ed9edc73457a27ea427f83a784796e01b7a1451b3305b0000000000000000000000000000000000ff424ae9372af46de34210bb0bd670eb173bd49076df5caca4bc4293e742121267a20506f931a4ae77cc36fcbc8df4d0000000000000000000000000000000015a6815b47966fb84aad5de62e6d4280f9135e129f33fd01e667f4d6e1bf7204317fa7741f3cff3682e251437927131c000000000000000000000000000000000639dca43483b79ba8043130e508e91fe3f43bc362fd1dbb135a2eb8f3b94d5cc4af70f1101c790545a0eaf2408706e1000000000000000000000000000000000045f0a04a642bb6e4db34fbffc8adb19a24648554f36ca371fb1a851384a4516a57f1850f7d6be59ff67029ec4002de310bc47acb3aba7eaa490ec104ed9b2985f65c7347f69fdc67b76f6f43846a99000000000000000000000000000000000e796fd500cb1a25b834baf7335641f34ccf04ccf60f82367f0e5c8c7fce8e3030e7b916752bac8e3adc01cbf4b319ac00000000000000000000000000000000142e8bbac9cae69ba3dca48aec045e0c4d7028f73c254433f921b7240761c661cf8e774a21da249f7758234cf7607fbe00000000000000000000000000000000045a3d80767d116e89bab0e9de812ffe7ffdbc41b61f5f17ad16be5bdc9968e34f46b937c5f94f8197e21b358f44b5240000000000000000000000000000000006978b93018bfdbaef0d40f1278e831a1fc50b44fff39b7c93820a284d90b699981b1f422f751a33094ae7b5cedbbb2691b88ce9888e5dcfef70d6f960a456dbabc792571f2a98746b7d833e7fab98500000000000000000000000000000000003c3561f5d255cf1f83cb5f4df8e3b8d5655d965826d56867ae66da631f8e7d489f733f5824c36652ab00586d9c593be0000000000000000000000000000000010b3adb0017e2cea1b71680ca33aee368429880759660dce2d3cdf57b6cd7339bd8853e5efafb9a5aec3f7e22da676c2000000000000000000000000000000000cdf976e4c65edb79ff15178f6ec5bf0a77a30d97b799e433f216a2fe3eedb10bc6ecbee2974167128773cff43f1922c000000000000000000000000000000001599b60ee70d927849764880830b2e7355daf95eefef39ef61569a2b83b2bcced4dfb28047a1e5350cc87ef3cd5cf1d93e82cc1261ac3864266379b4d518e25c05bc492a8946b38b8a64acf47aeec4b8", "Expected": "00000000000000000000000000000000123af49ac2981e14a490a4a6792f21343497b562266a47487cf6c650769c810852e357445bc68f3460e7822e8cd1e3f000000000000000000000000000000000143e79853e4bf6d031e1116dac2c6eca4991b8a1f822fac1d352d2cf1b88df239d82df886f0b24b3e7f305286cc1257e000000000000000000000000000000000b621056a9de2d83c946b1e2c7a07f9beb8e053202407323e412c0d8f60123cfd5818067f57034fe1b1b5a3d1bb285a50000000000000000000000000000000001642fdff2c52d58d38201cf44c31e00df47ea1439e9896b5ac5e9372482f4ffcc698be46c2d375d57a72fc677a9fc8f", "Name": "matter_g2_multiexp_36", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000011f78204afa05c3717d3908dc7e4356ef96c426ef380b6abba3a5616d9ee01addeec3369967ed42e030c4b8ff9939c4e00000000000000000000000000000000175a19c86e7eff0f4e809a5105503ed223fe327ee4617f7f51257426fe408373899f39014821292a75e4cc4eb9f7f31e00000000000000000000000000000000052130dd3cd17840385db424802d869d7eac781365be25ba401b7b0e4025353c8dbf59e5997b5aac74c252192061299d000000000000000000000000000000000457f4fc7ac5d7d4fa07e8ed125df4c4e950e6ea926be9c04b6df3c3699a10e99af7ea8546b8ac70c3003468a75c821ca2a1148f1ba719b2da92c418fd137efe21a44dd4cce013ab36e57d97dfed92990000000000000000000000000000000005182a3af2b52102e09214d048a1a29d1e10b7ace6afbc4e6b1ebf16790be372dfb6d65cb8fe08c3dbbed8c5435a59a3000000000000000000000000000000000f2a1261463c09a88edac443ec3cea8aaa19659e8b7ec2e8a403dcffb1e50ebb3d07217a9ab057d8d097c075609c13900000000000000000000000000000000007d6525fea8fbb685fcf89bd772d48c406aff7377429fb199f27c3c3337f11f8e24c4d81c9026b469600d11e8cce51be0000000000000000000000000000000004b6d6102debaec16c34fecfeb444e7ba573b13b83ec375f14d2c541a0d1fa528ed6599a0eff4f8ca527c5baa579f762fec5d6167d7777169348cf81ad3eab5153f8f2f18fb5935c5ee5e3a759f9b5af000000000000000000000000000000000ba1f2b2c3f1c57afa0ab647d32af5d036ef18069a4abc9795dd9927ea274a718b67373230e337cb9374ef73b5e2303900000000000000000000000000000000016458ff2f5d600af9d2983f535c965a2a8aee48c0d95095bee642bb7bbab8bc87e3e7c3b52a787c53f0d1e00cb4ff32000000000000000000000000000000000d11324e812cd4fa65d20cf58f88a9bc9407657834d7a92f80bfd32c7085ffa2f9f78d7e18c1405a03de939bd0dbb06b00000000000000000000000000000000144a0f4d50bcb16942d22a12d28bf34d2b4c51512a3f11c130f1566aacbdb63ec3984df5569f41ef621f50d138883d0dda609e1c8fa42a993ff355a70d44dfeebc71a801daa36acd437daec5d7b645d10000000000000000000000000000000000d7b138fe445d7b7e130134db653022ebb389075ffb62ff9faa544cd0fdb9e78e313d0b1cb19bd812421d38d1e9996d00000000000000000000000000000000084411aa2719b729a1e299fe8a710f767009060f1b2becf2aaa92efdeea8c91239aa5d2504c6e7ad2e3f39d89ef00c1e00000000000000000000000000000000017e86dc0146c9bbfa5ea1e48f49918167dda13b31ba73311fd5cfdc12845b95b9e90972a9a4d36203be8c5920f8de5600000000000000000000000000000000150e4b6fa9cd9a609241d1de8a637c6ab25207bccf8e5eff4a97ed633b67826135172880b118037649407a3e1b1a0661bc5f7f5d096247ababa51852724ce9ddcc6acc7ab6180beaa1cda97dba94b4ea000000000000000000000000000000000ad7430b7778248d63a06e26119e5600ae97071fe8827b24440587e8bf6887b646f342741af69d20e243c9b45d7dcf24000000000000000000000000000000001230cba1a5a66197875240fe00c59b796ba1db5ea5653cc76bf43d6adce0db3a109168593beb39bb45688c1d124b9eb300000000000000000000000000000000144652474c58413cadf9b31715152052b7618e7093e931367a7ed0340e66d84c0471b6ec178e1730cf10e749e01815780000000000000000000000000000000009abdd0210f25d12146f2911a60035867f59cc341b35c73bbdf8f7a5a90d0bb6566c6ba0e868a3d62d3557436190f3f63222b41a59f9551e91572ae00582e1e41989ff5f8e2cd1ee1a78f55c2b28ecb40000000000000000000000000000000018ced3cd0c169693368fcf9c3dfc49fe248f0b9b5511e9407b8634d8ed7b54ae2dc4ac6ffde8b3dea70ca86ddc89449c0000000000000000000000000000000002f6b227e699dccf7ab1e0b1cba4cf9f05c4dcaf9fee6cd94bbb79f42bc9598fa23eb2c653a7654db73feb511b24829f0000000000000000000000000000000019785959766eb8b00ac2600d87240f2876e049725680f4504f59db6642ff8f82d4e1b856929643906c3be7807a2443180000000000000000000000000000000018285acdf25a475b37ee4da872debba4297fc8731eede6b22be3b0dff12117634de44b84a18042852ef419c3ae18a46b7431e5c1fe5f8d38c759bc48e8207695a3cdf07d4c1fd02f1009088539085da10000000000000000000000000000000019c7950b01e15669cc1f96fd94957535f32132ff6a5ae788f6f660024c332593942bd3e9603f862756edd4f3ab17b20b000000000000000000000000000000000bf3a6bbe10ad91d687a135f4863ba0332e9b04271d437a6a4770056e6b1ca34319dc895f9186482bbbc815aead03392000000000000000000000000000000000a3ef4d4f7a15da04a91ff079cc40040993a90e9ea21f53e31f7dede52dd513a97ece780374c5f3aa8c8b2e525ee31d10000000000000000000000000000000017749fc7761b06432632ac686d93484f08407504e58b04b3890cc2101f15d21f46ec0dc1e9028c8ef8df10f9ae929887d474e755f6ce9045baaed65c80f5a686547089e8cdf4ad2b7c2ce7c255cb5c730000000000000000000000000000000005a36af876edfdf26175c185c3ef005530e02474232ea659f5cf251c5de5721f1b44a25714967d283525632789331d2900000000000000000000000000000000130a6f5edf94736477143b1efc316f131b36d9658c484821be08e7f5b9c93f60cf34042858664db0ff0240addad8782f0000000000000000000000000000000004fedf49e6d49c074dcca96c01607da2105d8053861b4c677a69cff0f82e66a2a63f32f3d9fac8e6c844a1f77055bf31000000000000000000000000000000001528541de3a9d4a216c0e60c31d2b7c7cb91b839fc31307cc70f18e9b87b92bf5b9a9dc4eaacdec6e6bf7791e547d8a2976c8775b0eaa1e4aa384d222efc476305c7ea2d625cf5c67ea4368d7a9fccd10000000000000000000000000000000013faf7b2b8514f77021d8927a3b63bb7c57785e581f40ca82882341c13a9daf062a26b668844e58291366ea6ae2f179f0000000000000000000000000000000009060f9e1047f15f175fe95cb0914f4941bcaf071f24e856eae6f36263c812689a9217da277613c10c8e254a0933c80800000000000000000000000000000000154619e4ae3901789ed3ecdfc76069d8026a3e2cf142a144e8b58482233380690e378de6b81af0ed9b6536da1cc2a30b00000000000000000000000000000000040c1bce922503699e1fd5ac67725f11d7f9bb6903ff9204412f65355be69d73cd7330a3f7bfcacaa9b078ba6b9a9f839db274233c46caaa9c99690fd00fcbfa4eaaad7c41f8ae84313448c787165f6500000000000000000000000000000000103d91916d537379d6d8717b17ac5b7e9fedd98c24890b51c027cc086458259767d989b3ff9d6adad72bf977e4d378f400000000000000000000000000000000159c01ee371622378339518217dfc0570178aecc938b4a008dee1a6661ffa605c0f1472c107558ea791e0959d7dc1c70000000000000000000000000000000000ea3e10cbc3a55ef2dc7bde7a2e80666557e9e8fd9ce77e2e92c2c70777afe43c23072e263e1def56cae4b6d3772db96000000000000000000000000000000000cf1db638331c47f9080c04117ddab4ba79950563810d50e04af819f14ae0981f6e1e94a635fc90226c8d7beef0844354ac9f9ed46ae5aca33af9ba1c0fa5a2138d4ca02b962fd1d02b4636114ce19970000000000000000000000000000000000095c82c58182ae9a1ba14421c2966d687f7225ccd192b24097f997b471d13b46a048202712cb2d8b1be0ff40755dcc0000000000000000000000000000000017410aca05935a06942f673d1937a593423cbbd226f6707c5922306d28a60396baa08a941122dd4c583331c9481a734f0000000000000000000000000000000002c1d3a1262ce8aae42a6ed10d8020c31a468127e1a59d57d2d409ca9d14143d9fd21353b260edd8b387840580698846000000000000000000000000000000001512e29256b6b9f5a7ba4f79dde2c915b162e4881856258ac2050f02868842381518da4ed824243692b131710d7201f8ab300ee55e90ac046dbd772da788dacddf72c559d9378b39507987a9774301b0000000000000000000000000000000000ff83bf1d50fe35bb3d1bcb07b02d78a1b44d2e0c6bf82c600feec3897fae8b93c0ef05006c1322af0a732392dad86e8000000000000000000000000000000000d70c4957cb3615027cb950e4224d41849b9ff1b435ce936384fe17c4d7bc2883fdbba5123ca0c0c010651500557e1be0000000000000000000000000000000008b16fe9af45fa913aa7e5d01b5b58f946004eaaeeeb493759a5bc2b192d2dd71af24ecc5c6838b5e267ec2dfcf5c17d00000000000000000000000000000000038ca027c985af3cf60cda13e770fbe4919d3a5b413763c8ad155cb4903312822366eb986f2ec9e0804594ad4894e468275b22db781d5e8fd07f36788bc1219c4b4a13554c28d92a381adae111b265730000000000000000000000000000000003a313d6d41f1ebd6b98b2061a2d85943e52d89e4b8680611d41ea182385e154da24248faa1563e6ad79172f91a8763f00000000000000000000000000000000038d9388fe9169710e1a205ecfd03f674b47ba2275794469dbd5f193a55e00765c8eed026363b41afda417bdd8910ea60000000000000000000000000000000007a75f53d9b8e5eef19ef6f5fe8ce5d5308a1a7d02e0bf46f91a1e0cb22555752d82d8471c123269050fd8f35a272f600000000000000000000000000000000011f313127a036403652fb2f83c5122fd12c362ecba2251bd6c357a964dd758eb2a2c3053dc668b9a4bc071898d45cd46ec69b95dccdbf193d9ee4c51615c0b7be5ac6bed3f2559f0cb2755c634839ce7000000000000000000000000000000000a43335eb6ff3bf2daeeb1eaf44c2782eeb517e82e55203a247b7a396e26fdf85f93695753c52c68819b58c95f361820000000000000000000000000000000000c240b7896b3dd0c318dc9ffcaa001d20bff288def3ce42752d660fd705e1544e292a5a0aa3a9a80ae91cb47cb938989000000000000000000000000000000000e5195bcc4ee8b149a769322165b6a3157ee7d04546643390adc812b6296675dbd31168b268df869a6722a7c8f51c79d00000000000000000000000000000000004af7dc8a5c552f00d55b996d193a9571173ea829eba8fadfa7becc2f4149ee7c6c4d2c8c7b1970df33cc56e450657331e2bf1816a84c190eaa850ecfe1a9376123e0d0732d90ac3537668f8f18b9f70000000000000000000000000000000007860c3403607d4e13f738357e18bbcc4df10fad4aa25776f84d3c2758624a83aee0996146ba17a812384e1d67a7c54f0000000000000000000000000000000002169148d86b1f7a0ef75d9bd19b6d7cd66da4293fcf33fed9241544dc2564d980161a6bd959f3b43569312bff7a23cb0000000000000000000000000000000001897c121cbf5e82424cc50078ca7143a0c670f1217a9180cd2a4700e06aa895cf84c0af94b7c04bfce047a7d1f8443100000000000000000000000000000000040c1a0c4257f90bd83fece3c9372842a148132d2dffa956729e741ce996d229aacb04387d51a72630329230020b2235f4087feda4bd8205d96cd0bf6eee44c27a6669d7ae8e16c731849cfbb2324e1e00000000000000000000000000000000058c001ee1343c6cde55bbdc4c538f5d14b0e8c199fb822f080ad96ee764bd1908f92260ce60cd521919f223301ba1220000000000000000000000000000000000f8943c35e7fb8b58963719f1b9820153e0831cf81dd208176af7527781ceabcf6ed2e2276cbf374e0525952bace0c80000000000000000000000000000000003b43ea8c32a13c014b05326f7b4ad5b5fc1bb2367866a69373ba91402f4b45409c6d034898e8b0ec3b93c2878d59b72000000000000000000000000000000000101c371ab4d57ed2cf17dcb731117b1986bffc586529fc1edc630de1c6f4fdff1e10b0895907bb81d2ccd3eaa96c04a67b81583fcdc9afe5f35974dc9b6310ee8e1c92031a49c08b05555fc0d33517f", "Expected": "0000000000000000000000000000000007152d538d0f750901466c1ea34a16e7b0e1296a2a3740568812587affa5c0c76ca2055804e24f3415a403f06a717c0e00000000000000000000000000000000119c0c282d22a01524d87eb850789c4816e7dafdb2782b57c32409b1016615beeee2067443835466283543773cc8b427000000000000000000000000000000000d68137c3df081a519747c044950c3231ef82295eea5b7040843668195d4549c8ece4a91447e0ec89530bc51277535fb0000000000000000000000000000000000d81a4fa2d32ada3e08a7bd4471d45a6afd2cfad5bbfa3d378b1df2e0749f9b05b465be61cc9d1a0f4abd56dce03dbc", "Name": "matter_g2_multiexp_37", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004b153d6554c9879359052717457179d8318f8127eb73edc1d6ac2efb1ea9643c4357cc813d1df49730b77f995d6d449000000000000000000000000000000001533a450737b4bf8edada15446cf21ebf82aa7bec7943025dccc4784e1070fbce430699cf3a37a36a3ece692ce87639c0000000000000000000000000000000017b8afc300bd70a3221120f6fbc37a8e6158c48b476f00992c6f41808036765071bd0a76f7c641443b97ba523153947e0000000000000000000000000000000012f686b4759a3d5db2325508f148bfd6217e027fe261d3ed7b8fd0526036044dfb563e1c4399ec266e140ca372120e289f3c65c2c25c6c37aa45b1104745cb8ec511a165ffdb7e304f5478aa3add4d7e00000000000000000000000000000000061c8288b7bf2856c075a176d1086fc49f0359ca3e7c1aaf5f151e6462916a4e1b69b6decb18823759b620f7593079c0000000000000000000000000000000000877af18cfa0d029e7c9a5833b346c7fdec06e54d9641d3953d3cae0e8912bac7c990f8864c2adb6e576442c634865b6000000000000000000000000000000000331490f42993de3ce7cdd53afb4b310f25881710a23f601ed95961bad4e9cbf57d3077803908a91b65fc32d1a84130c0000000000000000000000000000000005aec079da804fc572bb8eb867acb93a24ffb6611eba920d2ce799c4c80cd8e73b3cefe989885167ab685365529b4f2a8fd50c46bade91a13d6dc5a06ee62e5e89e0ae7ee885e5516ca6c2dacc36f6f3000000000000000000000000000000000ecc7abf4f6f9692cf3a118cd01abaab4754c90d1a59468d402bd699992800c2994f47b2094878604bf7825f125133e4000000000000000000000000000000000662396427cc596458e880bb8a43dbe046deb85601e3c64556990de36e8637e8ea3b142a8195762910a83609ca311c3a00000000000000000000000000000000198b9c52be68d073910f5b26bdeada9e9b308e4541561a8ffb21fd8e69ec9d93b01ec966fba65be27ee53d4857a43e120000000000000000000000000000000005201975985cac810248e333ca714cbcac0ede46bb915d8c857837c80c805898d0f9ca0940819878a26d269faa02cb86128db1a106328916ca5d63c0b5722642febed26f00a89430d52ec3eae25a019b0000000000000000000000000000000004e61ad4818ea3c98ed3c0d247798a1a6ca6bcb35a1cb60bda9394272ec092c385661ab93a42af439f1b55ee8b9c0cd4000000000000000000000000000000000ee0b71ebf39e4009bdb310fe3b555cdc860abd47a67bf481ab36b5ed0c00bdca8082abfb75691d45e10c2f2d777be19000000000000000000000000000000000e9582e3b5bd580f3ca7ca1f58e39379918f2d04b82b418a91e133117a9703f7df4aad30d48a47e29aeaccf5b8e33559000000000000000000000000000000000113b4c068fd040cd3300a2d1ef658955b014e571e7c77594edd31968037c1fff241da88e7a88669a569462564e28cd7d45665afb6a864893e389511a0f7b2df74c9e45a86fb69f6bd79854e3a88c206000000000000000000000000000000000d8b0bf633072f19db61ea263a1dbeddb326738396caf1196e31e2cbe99a68e8c70f8db13cfdfa4fc4494e54c1ef28210000000000000000000000000000000009ceaf2a0c63604afb8a903195933fd1ada0e5314255be3d74a95679c7a7845785e22d2c0c206f3afd62110ac9810c2e0000000000000000000000000000000003a135b405f46ae3f5cbdd63f4964cdc5014c9f3405c2062ba17423dcd22b8f2011638d520ce0ec7bb0cb5b03e8ec01700000000000000000000000000000000066eafafe1cea67aa6de267c767f49d4a3fd44c28d45a920fe9b3cebdeded883d8960f5e9fa4cc179246918942b1428d28f5fd09c2c1819adf8e6d0e0f4e4681babff46757edeff3839e9691888c13220000000000000000000000000000000017e37a2f1c892fdc58ac3f72cc5a5e2b7c0c87333afb06de89f7a84b1267695bcd452925fb2f15f8b7b20aaa85a6b5650000000000000000000000000000000015b2919343962337a41b54076d6735a093190e1965faa33eee800f5eaa43c35f349aaf93f19977b6fcd19360b27edd6d00000000000000000000000000000000161afb1494482f953007038557c847e2cbf84c57c5f5b806e3b0178e71e3238305f733943bea7ad6f2bc290778638e6a000000000000000000000000000000000c27a2170fa584863697292e626e2539aa15f3c8eee65cbf1f1b7ced6297248d059fdaeb9c955437a51cb016d1ee97c3e6e61390ef88f20591570ec1fe71c3ed769ee8e234c7cc7303a4cdc065717736000000000000000000000000000000000313a30edffaf864d0f1c6bdafd7d1e563cef434d45e71489e9f9e4cc6700e44991a99220f53f0cf5e7de5f6e4098bf20000000000000000000000000000000010429081ebd2ed6fa07de6ab0b7bd559a26a43df99fca0a2252411b4554dc69821ccf3df1b05114da84a616ccee0a9c800000000000000000000000000000000131a31442f80da4621f7691664e9f8b467988fa039bd086a2d64f9810878b557614c27745b2e821016f648ec36ee797d000000000000000000000000000000001160cef9f5e4d022baeacdf10b3bf9d7ed5e50627a99e29df1be3667cb872b2af333f803bf426314369b490c2eca642aa83c5af2f9d10c06552ea7d1749cbfa7574b238433c1c0e4788efd0cafeffa57000000000000000000000000000000000b20ec53bc643bdfda1e3947b3773d748cce1992e2ae27c6b7460d90d48e08eb9240879a5a7d3dc3189f486706438dbe000000000000000000000000000000001024bae4a7f71d3d2fb8246e82d95664c4ee8bca4a380c293ea084f749911f984aa4c6f266ecfff69c4f57e20c0660ca000000000000000000000000000000000b58472d81a9f16d2fe7af87170ca0c8c51dada62a4b2a713cae053a0066fd268283a785ccf269e05d8873cd686d2f4a0000000000000000000000000000000016b68177bce92fedfbd90cdb752bc332f46fde6673911c016fb9cff4912d79d3267bf629c33097cf8979f2b913c0936d4bcc88d85a5a8a29dfad37ba97ab3a5defde4ec356146db8d10f33bfb36ddd37000000000000000000000000000000001030d5791bd2a27469d242c62403883ca167303d907839e608acd827b4118b752840a4eca0acbe5df0b447d6651e517800000000000000000000000000000000106d65f922581237f779ba3e66608729dfddb2c487bc927f34e5e39707f2c8a82e8c96af68e3257c7a9876a05a1b01d800000000000000000000000000000000115bec40b8fa914305b1d5a85b65f0811517d36839494ba69c929fc2422f7e8b85d78df4e1687ab0087287eff29c65430000000000000000000000000000000018d78a75ec057cfcf179fa2ffa7dba79cabf6525dabd69ab95b23dc8f293aa077e46e562caf447dd0913ac9dd60ec76b29d5d818e62c9791c320e01a3164e142d9804e9caa7f96b4c3b76baff38ee2e600000000000000000000000000000000023f7736d6de94b08d9e9efb6f32f8c17cafb1e1b9b1f3db6e58df72a451c3225d11f4304eb0d702b07a7966f95a11fb0000000000000000000000000000000007b3204f258c873a6fcb48d0b36c98ed5f99b424cf4f92a028174e0e93db2af549648ea95fa8c7bbb42b2a10eeceaf8500000000000000000000000000000000165d6e769b7df91374dfb44e18d43e03ae12ee10d8a618a20f67332cf96492ff514eb7de06ea53096e823770c686c32700000000000000000000000000000000012e69ca1e106411165c06ca15988362de583c4a05425e2f4aba4c14cef6d8d04c52c87b4fb26b1557801f55b02ee8ba971c8aad41e401ab6c49dccba28ef26acf4961978e94e633b72c581ac03621e4000000000000000000000000000000000e8e6bf1c8837c31446959242285e9b85978a5349e1f0b3447e380a7bcd6bce758bc6192cb880f9c09d6ad4a0ee36eea00000000000000000000000000000000199b361ad0b435d7a66b46a43d06e5898376a6c260b68c965f7b186fc75d2f321bf883646e7551eaba03181907d3aad1000000000000000000000000000000000a76e3f399f31cddc4dd4bc22187a68fba31fe2371291ab515d22730d320ae4240911c755750f687c7d26aed09da4210000000000000000000000000000000000cbc8dbc004b9253ba91b2238c92bbf7883360c7ce39f6e15592a8668654950a3fc5a94cfa97f5ddc60add40c32a3630659ff910eea5280dc5c24c542516053637a5dbea576a94a22acefc902e56568e0000000000000000000000000000000005448b623604262a9cf1a9a292c36738960e132bcf0ec8e61a510008c2ae0b51b31da25f2bcf0d7c0d4ce15b1d7179fc000000000000000000000000000000000b61df56ef891bac07a873571f68fe43f79438a31038cf8ff97393ba44cc47408e5a6d64e9ebddf0195bf914f141e668000000000000000000000000000000000d196ced22ddf11132bbebf6c85bb3006a194cebca975d74992ecfcbac546f0f25a39ed5d6100768c1f1a791f3604d12000000000000000000000000000000000f727cb947849d2d7b046218f084283e5513e8582229085f9f98fca522879543429cb8ab435aa3dbf01b68ed258d82c112ff32d44eb442a711250875d86a401d0dccc95e5ee39bec71738fd812d487c6000000000000000000000000000000001044bcb16b3384a1f350cbd62bae568c96932a364c16b34d91ab9b1035ddee93a02920ab4dbde2c6f254031909dc3a450000000000000000000000000000000004a29aae48210289e5f588aede0756ddf60724b8ac54de5d9159ea834d5da98b7a9d09a6f37bcaeaabc559dbdde58b6800000000000000000000000000000000112ca953b5ba652c715fd20e3b85c5bdfeaa7d577aa49aa4656d142c9c2afa3d8aee151338f59a199f3c0c3f6a430d6a0000000000000000000000000000000001ebc7a17da7809f9e744cf7f13fc437de34d3472f022493f58bb979e2282368f989ca0982098a7c377498f1d8d32583666b820fae2459b98f9bff20275a3c96ddcaf98a78f3f5fa4a2c0a26cea79352000000000000000000000000000000000e7c3d6bef4b1723479ab6724cf7858c221993357b194e5055db96b8168f8d78f72aaa4a2046be17ae9a7eb00695ec510000000000000000000000000000000015e85e85cec08133b86738e1f7a738de455930ffd5073997a1f1692c28044ac00b634b90eb24938cab56e286ca0dfaa400000000000000000000000000000000164646a4767ed69f9280f96be9a7f988d17c187162554239797436a0bf4c4ffa7e4f8387c3d2406a7528c021f56081df00000000000000000000000000000000197b1080bf3ac3ef7bd6123a55f20f1002f366d4efea9e14ed92fd2ef147e2b5d9251a302a85172235438bb2d35943a740a9181633a146d7f307ca7606cd45b8e721c46b955a6989d421baafd8e40139000000000000000000000000000000000db7cfdfd58a6ce9dbbcd5d65cbf22b5e1a81acc70f1c85651ba962d61fbd7ad83e5524fb9aa019c6bd75dade96f7d4e0000000000000000000000000000000011e269a390fd15ab1d52d38de78ec97eb6202604fab02c4598ecebc7635ac91ee564e751275a485fb43b933678f11fd8000000000000000000000000000000000b8597a00d2401664405dd1fc7d69786353c86cd4699af981fe869f266f9087b00df22a46ac34883173bead870798f650000000000000000000000000000000009117a49b3f2a8a850a0179b558319bdd19a5f1f4a45af0ccad0890e63b222d028536e9bb612093cb3f1068d262af90d662ac80797c633d8b9c8907acc2960ebdcb5bdad82d9fceb4411d5173b7411fd0000000000000000000000000000000002e1311abb9df5e4d76959276b6f725f13728844f8c7dfe5e25469cb95c6937a822282b3baa38817e24a6219601132bb0000000000000000000000000000000012820e6ddc50e19a8f98c15013ecc38901a4ef8ec2b79b85c7f7913da24404afa1c79045f1318cdf271028126f9420a5000000000000000000000000000000001794e653c5673e51a3ace631c1a1265dba07fb74235506b2149d42b90eb16afc26ec0ddc54d03f7ba2dd6a2503971fee00000000000000000000000000000000112479bdabb9dd057b325563c666910c01ef66adf47aa32f5a41bc9cb8234750985c266fcc329ea3704e2b8d9b15bfeb59401af15d9b83e2ad68cc8e2ad1508391516ba0b26fcc5ec6eda8b318a374b6", "Expected": "00000000000000000000000000000000168c90045dcccef35cfe8eb642924ec2629db886366fd9ebc082019690d103627865f0dc39ffdd2167111f68d8d03c89000000000000000000000000000000000b6f0928a32672983664ad15252b3f145afaa04f11d5f43a6169a2fbdc0b0a04902a183b25e38987c45579ac6d11011f00000000000000000000000000000000195c4d796989630f85df4594eb8353d44bcee76d82b73ff7a57069466337b49b875b3c1418d22d79716ffded7e704a6c00000000000000000000000000000000032db644ff8ca6a3b1ac7bc51ff783ce0cdb7bee8b2c21dcfd3adb56a3e210390756211f22feb3dd4f706e13e5cc163a", "Name": "matter_g2_multiexp_38", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c675cb5e90e45300619be91c752a5831ec47b4143c28330422cb57139882e776c1c5f000d6032cd87c16ab3b1c08ee0000000000000000000000000000000000aeb4e78724d46a55e5f101564bc05e0a1be1d80a781ce8a19607322e82c7ee59db9f53ec34c70bef0766a5b965f54b1000000000000000000000000000000000933e8d7c2420cc553afb1c88b5f64c7a39f78272b34b5611972dd5ced3f639ae2ed2aaba470abe829be6ca6d666ddaf000000000000000000000000000000000ac0a9b46323ccabf4b2024e3a5b4717cd8de9ed7de8a78e33a38037f802651a4b43380a746890d93289d547d94b61bb9c351c585d1920b8cfb89a5bcd72fe041b17f7bd091ba505b287778b0be4e87c000000000000000000000000000000000196597114fbaefb8108c185a85d0fff0f6bffecf056902b22d61cc70b49a747bb35638f5b663830a8d2ee15df9fd5a1000000000000000000000000000000000616ed44a5fe69da994e2ada03a1e09065964223333229f5f30ba7a452830848f599ee21810a95e3659cca495897bb710000000000000000000000000000000012d0631e524ee9d3c776c79137499f8c9fb752ca93e92497d89973033d60971da23f672f140c1a753b4d00d08a00babc00000000000000000000000000000000111159e95d131c8cbe8df75853fe9b3f24013daa083e57c5b716e77f6fd3872dcfe0156382c9d2778fe886621be19973ec42da11e95cebbeed0ebaecd31be24801fdec8b81f4046fea52f553c4e7910b000000000000000000000000000000000a7d253487591fbed97381b3a430404b87aac04073e5931ee0bfd9ea6e0d38a41090c6dc7f6a591336fc58a97a3bea8d000000000000000000000000000000000647c67f1816ae6fec39033c3169eb1ea89e5e20e755cfdea33572d6397e7e87635c7439eda4912361a32de313893206000000000000000000000000000000000e0cbd54634d070aa3c7a503df1171a5cc435d050def17395707bdf7a61cfd539348ee5a4c29c7845cbf0e5df0531f530000000000000000000000000000000007d006601dc1e092a616eb470be35b5d32742dc6a2a4d71cda8865f071dbba9d8a3a8cb10b486253b1633e4590e716dddfdd8996780460757702e34ad98f5f64a8c1e0bc8851d6c97f02749b8f77cd03000000000000000000000000000000000c502a19770a892b2fa1ba59900a36c0ed054a8bfa0c4e32bf471b90d0da9edca6c06b133c8f12e233b104262a81dbe00000000000000000000000000000000011801f159086d07833a691182595a42645513d316c084b2841445c4a63c6bbb402664a9a9a100e8d6436337ecbf398bb000000000000000000000000000000000f2b9bfd8ef6286bc41e9f47ffdd3efe437aad553c9da02b3c22ca04b5578d634c0543a07bea966bedf345562218c2190000000000000000000000000000000010be5ffe0cc9f580c74e027aad09c213189fa4b7aa92160ce813b8d398b2e2803294e1a730cf5c891cf1546c6bc91414f256ff23b38b3b986a62074c5a3e05e86ead9431fcdeb67512f6d502fcefe3c300000000000000000000000000000000132cd5220c125759a18c31313592eda774247f97b5134111b01ef28dad5c3ba4d3f13d1af9076d663f7e217258a6fdaf000000000000000000000000000000000f06a5b03daaf8f92f9a302f06413044ca0dcf2be81d9cf016120312fbd41b273650fbb542d419595fd2815a809c4b960000000000000000000000000000000001b11acf12cf46e40554a1d6a833566cec1b2750f3f72ef77496477831d5933f477d59463ba19c03dfbbbd02fcbb680b000000000000000000000000000000000b2aaf91827ba923c8a1c2fa1d6fb92384c9f48f8f77273056b94245114d1f3cf66fdcab330673ceb2e9dad6c1aed0d4c01b3c8bb0acb17198bde9adce3b0f7ed4cd8615f837aee928524b0984c99d0e00000000000000000000000000000000051858339be99d1271152bb390e9a2ec0c0760b7686804ba072c46db3cfc4472404a9f87d868a28f2aef16c9e989d6e90000000000000000000000000000000019a33f21d0bb8303f540bf26816f145360bd1e9a8229dbbe7981f1cb5b099e814f2691fadbeeed8e4c4b772bbd27e60600000000000000000000000000000000073eeb49aa7e601732dc0888ae6b0f5e8dde3d97b818155221f5ab8c599eda75b25c86f15ceecafdfb9ee4abe3419e10000000000000000000000000000000001507073b97d494de26e70f18bd1723d931cd2a88903ab6da2aac3b80fea78ce75caaa9b99375780d759fc4a1683950bd458f882b63c99ada33d8215111a6df21c8f7424eb2fe9f429256201d099413c10000000000000000000000000000000013b5422deb0e80bec71309d03fdba007eed33c3ce0fc6d4f9a0d063136b3b85a6fce90ee59956a9b91e1caa519f813e8000000000000000000000000000000000829a11eb50f3bb1a47b72cfeec9d1f63e02b9f7b2592174c481ea7b72a121645ecb36b3d1964b082bc6c7efb4483a180000000000000000000000000000000003d3aab53814f55fa97285af2dc6d32cfcf5a08032d2c15ac83ea036603e08a53e0d2b8d93a25dd969937c113e78064a000000000000000000000000000000000c938a68688138149cda64f168ac1466c401196eaaa44a464d9e345c422948767ad1e25d1ce4cc5996ac5d5dab61516b804d7a35e5731b111a6904e0998d90ce86cf612914152fe3d2fca0201a41166a0000000000000000000000000000000001ab96f0b60213855fe221fdbe2fb22da6bd6cad8bab8ecb747c9528d3511976236ffefb34afc462abfde13a99503cb900000000000000000000000000000000182fb121778cb002be3f90e2d6837a406edbb609bfae8fe59837aea6f5f6131a10791f92188958b57059b7b9a9d3a24500000000000000000000000000000000159cac269098d223ee6d145a4489f05875b6a546767c023dbea62b3cfba9f8518c9f4d2594d00ceac325f3d8ef551369000000000000000000000000000000000c0d2e4e7aaedec7e53bfebe8f7fe5115720e58768469b6673cee3473b08fb8cd1ebd0514689ef65d78d008889e3ed296f1629a801db6bb4066588ed79f75223120728c3a57f7129d88f7f877149223300000000000000000000000000000000079c40bd7fd2ce0f48806dd2e88850ba988e5adb0cc5120977da8110b07da264318fa034c0c213590a2616f0ebe40f21000000000000000000000000000000000905f41389be39361fbfe7641394d30870a079f230dacef89149fdcf81a4d1e0e10b9fa1c0c3ecadced9aaa19fa9dcc800000000000000000000000000000000192f50e08e497f902403df40a504a1b4b82f1957572a9ab7ef97f5ab93c6fb876d8b08f318244cba95ad5200fc2a6e34000000000000000000000000000000000be7ef45a14871dbb344a69c4036af4f994a22ef14540377d1144a92978a23c2d678cca47cbc18e8c036714112d11f7cfe80ddbcaeb784e24975b9a42801c89bdfb842cbde5fbc0c3d70c0632cfcdab80000000000000000000000000000000018d7410f0105ff03cc4ddd87a6e0b65ede4abd4609db5ae53720851c90255757e63c6482de4651eb1d3669b1e1a2f8d9000000000000000000000000000000000d4223be106693a672da890b64d2653135119983639f7052eb32051c34113022080ce2355a93a2f64a75d8e0578b2f95000000000000000000000000000000000764780391249d0c987270bd181a44f6260ef82eb00c06585db7ef09e8b069e46c4e0e659a081ab0fda491534b71b0ba000000000000000000000000000000000a8546031e6466ae43643462b7617703a63841d6d4cb0c09ce63b2fbe2c2ba7cc35367191d0313717b1daa665bcb54551aeff13de7bcc4bc2ac1b37e28ce466805757dda29c9c743eaea9da33f47f4fd000000000000000000000000000000001922491dee4e0f29a1dc090c9b48fe8e6d70c3441e532021985932005b22cedaeea7d9ce1796808d756b740ec63f8ca80000000000000000000000000000000005b34dae0e630be6a59ccae17b44eab4e7f10be2ee700bea15f9771a724f0979798617e129540901a8aa023630a446f800000000000000000000000000000000095bdf612289258b31cc79188566ceeef6fd66858b4dc060864d378cbbb69f951e9c6bfb3d1384014507ff29f9446f410000000000000000000000000000000019f06f11a833c06c1c9227255e3a1d74172e73b06675c547844065dbb909ad66bbc150ba396fa1ba22b7183c0fe80e96c4984739882bd2f882e12660815b96d2af7812d7ae87f5be034b88e9e04fa2890000000000000000000000000000000003de8082f828ec51e23c864a16147546ff60b5fa71897ff4c120556af5c6616bde96b6e53fa673cd1f8af503070bfacd00000000000000000000000000000000093013f75b6a19b5433b3b5ff044384ddfa258420c80fe81e0424e3102cbf9e550a946e56ba9746423ef745e33da51e7000000000000000000000000000000001227cfc3e9a8d6a71738c514c05766ed4f1f4605198f5a3ad8309c0a49499e4ecd34ba1ba7677d6d90203e54d7611807000000000000000000000000000000000a635221d514e58170ef299eb7f5b679050ee24c589cc7e348b2905a3cd1b7bcf2010cfe168f5aa60f4bfe15e59b4436e7f33141d383a1a927b7645656ff7a5795901a997e27003c5672ae4fbab4aecf0000000000000000000000000000000012ff0494d308d3e7321ad4c4000e9dcd19552d5e4bce8504760f066e2fb2509279b01f1568e3c3f6216bd5328cbf72db000000000000000000000000000000000038c6e8f0fab30b5c8e4323c1fd29527845c29e1a26c70b8e5284f7ca55fb55ad4ad5389b5280927b98907132f26b76000000000000000000000000000000000aef946b9b9e9fcabb36507c1cf441df2f5ccd71ef9281dafa5e25bf07d69556e4143ab402dfb38aa756bb6ee009a6890000000000000000000000000000000015f69bc7b0a6f2cb64fd0897b421e339fcc8637efced8bf33f5aed809a38b49a2e6376d18b1bff0ef70df1b7187ad048fba4674313a9727aa4b733832a0e06666d3e38184836edf786317de9dd055cbf0000000000000000000000000000000009e8450887137cf45b04184b3c6fedac6676cad416a7646e9980dc99a6d6b62164dbdfae7cc20edaacb84432627e6e550000000000000000000000000000000002acbd87ddca9dc775da01ae026f1c60f1cb5974ce40caef80cb0d2eb7839777c1f61eae0472c7568ec9d0ebb2ec7dd20000000000000000000000000000000017c295c458a9dd995d848e3ba585f8dcdec4185a953e4b8e3ca760eb3e815e39a8ff60416e1e6f974cf7e7b086ee4baf0000000000000000000000000000000003cd8725e1cadfbd80585bf5a19e086abd631d6787403edb4bbc785d1a81f6108f451ff642f4df17dfcf94dd6107352bdc0c4d0e34d8a16b3bfb51ffc9b3c353817e8e357c608b5075c173204963606e000000000000000000000000000000000b3cc99db523b3647937b694fc23281a74010079351b2c7d1ae4cc9167917f06c06e627c4ec44af6b09f2886ddf309b800000000000000000000000000000000001e2681dd123994627adc92e6ddd3ffb006521d8bb03040fe1989e4f709e4797d143cd0bb749de33c8109933c709e970000000000000000000000000000000017df13f532bc9894be932e72c609c0386d32390dee95dda45821bedbc1067043d46007b39b6ade871bd36d39a17dd04d00000000000000000000000000000000162db4d1e956fa5b5f9ef244dbc0c6d27718eca7dcc512d1d7b97bbfd2bd00cce7941d1b9a170da6341891773a729e9ae4e31f5b6629463311b9d3c8333c33c5b2e79761ffff9863acd9d636e1a9586a000000000000000000000000000000000f0e4b606ba0a175bf57d4478aa286640ce4b5507f9f9e354fd96c45443333f6889a93012d663d78956bbfa7c645bb9d000000000000000000000000000000000d85dc4d733f0498fcb10e1e814eb61245203d6c1a46181e5a388fda2680640a1271a68d645f8fb179c0dc3107fb788500000000000000000000000000000000185b02140f6314cb62bd7977042ffaaec41ba8788d356047488004d609ae680c2f0cdc94e59a3cf90b6651298b6a81d000000000000000000000000000000000038ce717d08d367a9f882f2241ae4cc0e8a31418498bf68d05805db2e162d053a10dcff85403dc473598089a78dec27e03f256e58f60307ac1888a1b0b14b56c7435213e271eecc79b4a6f88d102be4c", "Expected": "0000000000000000000000000000000004cb919a72e67c31b3409c28dca1d57833a5066c240d2889f5bbdd5540ab2a49484c2462b25da197ec8d93dc8f26ea83000000000000000000000000000000000e1ac1dfcfe22ed7ac52c701a7221b542ce72bf59d62cc49f95f8ba64c05060671098d40c83947dd1952494833a19b55000000000000000000000000000000001331f6ed8ea5ec9b9e1a14997c2c9bc9af2ca305b313e2bc5c5bd35308b7b451a362f8ad61d636dbf77d1b2388702d8f00000000000000000000000000000000186b85e656e45cb5ac9a2a2009353e45749b53dcdcdad4f378431a0e4a317652301f834617e14dfac9836c3c11512aca", "Name": "matter_g2_multiexp_39", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e6292b4d3031fcdeabe62921f0c562606b1ec6139b9c43938971d7851da4945cf69f39652425396ed1b2e70e65b9f55000000000000000000000000000000000e94bc63f3b8944ea6bd7bab811c013fd61303aa7713619faab85a271308bb220e2a94b26f5c7e4136a3d2761dffea610000000000000000000000000000000012313ef65ba41f8e0a57e9b810c13d23241e8430c6ab967a1a9bf5bd6308e89c135e00e789a5610694d146840fbd877300000000000000000000000000000000165ce83af7edc9e701eb57b332597305fedf4b939f3a13a95a0bb3d119c2a9204a4991388f7fb344ec8f15d32cab0eb5eb850f01feb55bb99e4accee0aea8fe6ed0bd29b2ca942ffe09456733aff10ea0000000000000000000000000000000005a88477765bbc8290b7eb137e6de78e62bbd929ca511cf0aa701f926440f21d33bcc6ac8f2ca5de57ee8116c685ba38000000000000000000000000000000000738074a9365c707190f882780b27dbe96179224103392b86c628b601e33b092a03e24a89bb6d1d1024862a9df6fce8d00000000000000000000000000000000188c713945046771bf852155ba412b4222173b6dec8320ffd1c59e9b36943c2c18b0dd3bd551b7b1367dde3e8031201a0000000000000000000000000000000017222294bacd664ec37e9b214407e5325eebe9753b430589de2eea13360783be52a479e2b0e9c5dc4907dd5f06a7fa822b373fd7e5806d227ca1f49ab0a7f8be2b5950906c8974de9f2cb4e13ed20a9a000000000000000000000000000000000c97299d7e18f41e538b91b75e962c3ce4e068202271b40469c58cfc477d7820e90a0e91d647e8ef5fc0cb822daefd29000000000000000000000000000000000bd1e11a3646c499a240bad708f97a49acaeb653aa5bafdcaba41c1c9d32d32c516c94a3db8816e0a43d1b1eceac7243000000000000000000000000000000001223ecf82c4622653ce84460c39afe8a967cbd87a2d75cbee1609161837c15b522480c4731c9e6de9c5c392ef1db18e10000000000000000000000000000000016c5e98d3d17c723548427868e3e6d7ef4bca339e41acef19e0710459bd4732de4a556b22cbb49b823c4ee656fa354f1babde7f3fdf9fba868b5eac61337be0d73517ac3f06c39b4eaceeb27ab6311db000000000000000000000000000000001125735092842142cb5387f1ef8fb69a3535e1f0ccce59661183d3104ec1ef79dd87a7fb36159bc67bd73ad403b46c1500000000000000000000000000000000162caf579539574199d56f4e756f1532c66278a55b4f67f4f4090368260f46023543a8a18d49e8c5783cb65f93d750480000000000000000000000000000000003accbc87996a220a625e36d5cdf05d8c16fb353068ad819f94ba8223cdf6436f8d822719153bdba620a07c5dd955fe5000000000000000000000000000000000b53c8a4b62466c998327e0c5ad65818ea383650bf0977d98a8a94fa9653fba276f7781af9f5a4e99052ee3ae65c283d5ba1635cf82b25b2d7e466717f5716c33f5f3e826bdedf19dbc1d95ff0c8052e000000000000000000000000000000001264608a59c0ee9a26568cdcea8801cc8cf6616773bcb0971234b2d987563270c7b2291fa035c8f2069ac99e16c68fc0000000000000000000000000000000000e839d8d982d6663ca4552527f4fcab6ad5e0a444e7b5921055c774871601d342a151133ae15bc76c023b7ea643182ba0000000000000000000000000000000012ffd0696b7e29b305412fb840c596b66b77ac2eed936fdbe0562541e4de6b3166a9991dbdfa0f79b78b4b86f11291de000000000000000000000000000000001777ece357f82d7303aa816237a0dbd3a1398574f4061dd2fbf6b32af38a65abf5ec9bc53bb8ede932db9cfa0842d53a1a0a832e5bbdf897553c1aed35fab43aa3f4510c1782115e14e5d56229de2dff0000000000000000000000000000000002b41743325db9550c3a84af80bc20c54b8b0b685d7f84d05d14dcabed2f450b91675aa8c5c650eb81151bcfbf1603b4000000000000000000000000000000000f3d3e69d475fe1d4259f18f193cd84a90b91589a6502588106f0a577d1c1dc4b2feeec20a4fc30b3e403d6ca9e03894000000000000000000000000000000000c10e2bd1335363fe958eb50981b99bfbadfd1c414830857b5257bc8fa6e26b50989d9adb5b3a2fa610b3151f8754309000000000000000000000000000000000008c825371319f4ebd684f76b567c4e9a389dce96068c101568dc8cafcc10896e3c20202b591a344d9a1c1be02310be9b75e0582e9ad7aa4a02ed5ffa22e55570c9f20e6a24e2186e8a2a2f838fa45300000000000000000000000000000000101d3f92fe64af93468229608007f50e3406719572acf265fb8b2a7051525a9cb67cf2e46fc8e098cf081e73f3b20c770000000000000000000000000000000017b1422f8208c2521e3896820b22a65bb2a9b47d7fdcd2ce57196123c1ce43c1db6d00f236d7582795d00ef33ad6d585000000000000000000000000000000000e261500a9c64f5ae107d6ccb57fa9151f5321ef4e80f0e271515f1eaaa5e3714c59bf97b39acca41b15d90c0505ba9a000000000000000000000000000000000c08c955b6df18444ce3726711d29c2088721fa0aa6e317c52a05f73ec7171ef8bd61047174c74afa1dea804c68a28e33b7252f8f3cc6341d490c5c4464bb36e012f1b05057f405aa907ebb2c983f646000000000000000000000000000000000985cdfb3934e0484805a1965984028d6c459654a3eea6ef66e867dfc737e1bbcd92e31020d5a4ddb7f8091cae2371f8000000000000000000000000000000001998c5682209153a261bf981e16bf1f7a6f8e5e566c1b0f975253ea62439e5b36c5e5060751f21941edf0d348bafd18a000000000000000000000000000000000c8822c1d6412bc45fea05faef33c65d5a6dd13aacf1279b9cfda2a2ee34df3146d45e3434ce8e5f242e9cf7d3ac27180000000000000000000000000000000019191b51d6664a3047aeb5590df2939b2cbb115ded70fafc2de4c2e8c2a955a957375314081a8838bf89d5a140b7b915f10427f6e461e7b63b781e116a4d5136ddc79ff86b71fa754f00c797c035412b00000000000000000000000000000000156fcfffbf01ff3c8a97e7bd99e59327d38c6f7f1083d068ae158d1901808b3c9ac96f95c2bcbdf5f74b36dd8ce58d7d0000000000000000000000000000000014c64256d1cce124c01fa727482caf8ccf007e4ae00e5277d984f31a11ce584e7633565c61d47bc8accdf7c28bb266b200000000000000000000000000000000052dc9f7fce4859c852d3d9e1e77bb7887ffd35d4d550726632acab3d4303ecf8b3ec7f4114dbd590ac20d748570899f0000000000000000000000000000000017abd1e5dad7ee06116a8131c05c9b48defaa92efc636ee34a2970d701c02b6be0345a58cd8749e582ebd105c02f10a06440c89f8b10ce15806938b7ad65ece194d2fa3cc8d7d5591bc1d52d010896af0000000000000000000000000000000018ce0fb077dfefd57f7943d432e12dc9bf92dfaa30f8341397ff8906b1abdf0c02b599edf85ba1e5bb6287aadc72d7a50000000000000000000000000000000019e5e9e3b0632ec10a26b7c1ec40248a9a8b230806c38aa24e47489a8aee5abb5450f6e5679e3f13c6ec7a79560689050000000000000000000000000000000006e257a74f45142817ea8044f403e98c99db8355d626c59e1d11c6859eb0dd1dc8af389f07562259c1f85411be6cbfe2000000000000000000000000000000000f463e345b004b1364894c6e8ab5d35bfbdf6b7544a576ed6b5c5398ca2074f67e2d80af1ff5b721fc126d3afadff1ef43f1bb26469b778edd10127e634fed4d749e25b41d8eba86eff2c068c33e714f00000000000000000000000000000000174231581338fc8c461c981d4949d18f5b753d27184ffb41568f11e178a271bfc69f8c73f2daed0fdbe5bdc7fdf8ef56000000000000000000000000000000001532474399d6a73501801e5f3fbfc6f13bdaff7a3ea7634568fe82745752ee15af23b16809be18788d295e044e29c05a000000000000000000000000000000000912eaef94ab1f3b3257b26c5e8bbe3f99eaceb8c7ae8da577ef98e24f3308abe6e6005ff674a2af01b4242f8ff87108000000000000000000000000000000001925cd635d0ce770f4925a3117721e96c316dd96708b096901ee04ce02e7b357428e4364cd488eeedf76352a26cc1d10a40251ec7a7e9f7cc29948b122010d9745752df3f4a9c67427a8b58122ad4e7e0000000000000000000000000000000005c4a7f26ef0416f34750badcbbb3bce075606435ee7f69b3589e21e37491f0b4a7a98c825ec222848f5e29618828258000000000000000000000000000000000381c5f6511c9f06ea1a76ca84adab4a26a3cde13e0825b3d81899d6ad3191628894d0f57787f854aeb9e4c57fd15d32000000000000000000000000000000000bd706a5b5ef0d4ee1b679a0af90c217ddf9242b7c39523c39657962952dc14e5e07d02154e05693bad08bfb24a2b19a0000000000000000000000000000000009f28a84aa5bd39eeb09f13fc8770fa7e2e053b6f5d7e6021da77f48b9c3807ad917ac671de88b28dd343c2847c5e8eee03e5eb477506c397bc1a5204b30872085a36b65b7a8df3e0e187f3022736329000000000000000000000000000000000a8ff1b15ddcc3684b4d4ecfb53473497feb8a04660350ab84e5719fdb0618d61acbb555174b0900b32341154eb7bec9000000000000000000000000000000001464d21df798c0242ac6aaaf3c579eb66eb8cd53eb1e5ab2727298ca61ea8ca4c7cf815bf5c9f94c2b76bf659a4e2da50000000000000000000000000000000003a25752a4360c84e9353b7f1ce74d5106cbd637ec5ecb03dd0752660fe5c7622fe2d0475a4db98f785307c6961f14b000000000000000000000000000000000163601a86f02900d214ff8fbd041934189503438c557138b6ebaca8ce3c109af50ac28074223fc81d6476a3a99559ac565cb04110bbfcdf00616c2826e253f61cf955756e94dffcbb6001f59ae4a93c100000000000000000000000000000000189597e6d618a20ecf9a87cc70b3e0eee69ffa4dba75056ebae93cfc3c2ebb368532b17d9f6c06f09e44d9f101397b2d00000000000000000000000000000000086ba610e490588e9385c8b6944c2bad1eb03058e927fb2f9740dbefb779bdf669a51af88b45985e8345b8cb168c13ec000000000000000000000000000000000db8b9cdd4a9bcfc9f7de144da0b33981e4dd53744cd260c4bf045d643a4ef5f25aa19edab7be0c7f8f5ab74a4b7f1820000000000000000000000000000000010198384a646807b16e2ed9186aed99ca3197b05964dd0348086f446d3ebb847907624f4e02f71a1e866d17a125e07e93ce1bb7cf7d7a55f0624bf5c4c35327b178923d88be748a9b079720c27b500e6000000000000000000000000000000000a293f07dc3f0da0da4bee671951175a4480a719d44cad3d627878ad2f17596f0dfbd6f43acc7a1f9857c5d1f453e5d5000000000000000000000000000000000be6382cc7a00d590f2aada3b4b75f01f8538caad2ade90227ec71e5661ae353e68789807a13f28b23b17dc0dafc19b70000000000000000000000000000000015a9ad5a6f1a511ffe1891ce260ce442996fe4d8515ca593e3e869cab9b18af57956b1daa43aec98a0281143b0c319fb000000000000000000000000000000001807a4ddb73a9aee58b54bab2b878bea8429cdc91384c8fa533a8c9d15c966350e892bdfce16d37a4048a763cbf25d71e2b4c64b363efef0c5525b0337bf407879755f060af451075f4345dea7e681a30000000000000000000000000000000015aa6b865796f88ffe770bf25612ad27942213131c566a446dc149fcc70a018230f1cc8b20461ba2c55300fd27930bb0000000000000000000000000000000000c39c4f229b23c0f65ed720d655121eab50f695864959a2aa49771b848730494d14597eb85ba35743f64eda897f95917000000000000000000000000000000000ad44cafa754f06e45dfab801998c40e5a9f56e4add5c8add1d7ed9e05d12459f2efe3f3367cbcd161f524c714f7782b000000000000000000000000000000001437b1f1a1399ce2a860f7c6517b14a2db264b2602c1c57b8eb04e165205842b483497e98e6b6f8a62e25ab8b0e722f04c85e47ebe2c26e0aa25661d3353b5d88c632182aaecb35303d8d47f01308a0d", "Expected": "00000000000000000000000000000000077b81fa5997de07738e1b34d8e17ef4a9bde516577a4290253cc759ceaae745e10a457204b9ed0069942e0b487d106e0000000000000000000000000000000015e79be67a752a46dd0605e9d07d738c5732b2b605457ce056deaa1f7093b0bdc91b4c81c4c5462a51bc713a7fbb86c3000000000000000000000000000000000cfd2e6043263bda2b97798e1a7dcb24c63aa7197f2749f92524329e97f93dcb56429d82c1d63c067d7ceb38e6c65b5a00000000000000000000000000000000026f352d2f93e6407c59d58742dbd91ced464a3746dc1ad9059e6bb9c146dc1e74235bd54b1d90bb3399865cd3102f3a", "Name": "matter_g2_multiexp_40", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001387fb972f997ed0cb97a5ccdaa759dcc3c2c7f4f15e5cc4fe74685e42cba75e778772d795847b45f274d32cd4960de600000000000000000000000000000000150b1ad31a3d434c1cbef877fde2e105d4a047dc34e3889d21544c2143e7b41b8e0024443a774bd1e09438293860a43f00000000000000000000000000000000065033cee91f5c4d429a074be3d2a8b001892455a11dc708ea73c0082bedb1cb8e8b567a6ea68a1296ad2b80e4b5b08f0000000000000000000000000000000001991ff6fb57e8cbf9d228f1a99697f785261ebce9d3c1f592389fc860b8d7a069896dd48debb8cbe0c43175cd2ecfff5bc589e7d89994400c511789cbcaea19b077e0b02d625e549bc6f2673ce40128000000000000000000000000000000000a0fa2d39d868737b9a0526296335256ab4894cc58ffd80bc6334e80d1314bdf017c8226b41ea135f6adefd07650ca1c0000000000000000000000000000000004334f7985211061dedc794ee8931ded12acd39d7e6a6ef44a749118d19ce8204d07935fe62fb2a8ea4f68f99d7c5f5d0000000000000000000000000000000018850a3fc8c851a06781511faaded1ce0752e7ef66da82c2464eccdf78c32fae306da3cfedaf76dad371cfbe012f2bee000000000000000000000000000000001296ca0b0e368429b122537b096fac77d6367988956a7f6cf70c7193b7033ce42fa0cccb8b84b9c78b16a68fd5f4c14c2c3d2a0cba111642a6354c117d494be805cad5b5c486bc47906a2d37a9cd9f850000000000000000000000000000000019deb7de7fa5254fdf5ef34fa616651ec70548187fb0bfae9f512e0bfe1f662783f06a9a99e434ced84229deddab9d240000000000000000000000000000000009c199ef916e6f6fe0677ab07beeff221a5687fa8da3ed3ad99a950b7f27159f857d1b561006bfffab551d240b764fb300000000000000000000000000000000148a211fb58b38072cf7c417c70d3ef92e9cbe22b31b2b626198add01dbe1ccfec32d333abf42140b9316312ac48aaa2000000000000000000000000000000000b551b57045365d842133e46814d5d0084248904960f8d2fb28e9623660bcee658582928703f86261cd70e95cd20cf3a530ff74626657262fb49460b2c6981155871f2eb5562581a74f968233c3cbe3d00000000000000000000000000000000185959a297a8f434cb9529a1f7bf9009fc1af3d09efb0a9dce1b9e7d30699da64e4b1d32cdb05b068621db092c1eb59c00000000000000000000000000000000106ef21e9031d108364e93ae4b5d21b0d6d78c2e86e0f8a7af27ed3d38dba0192954e8c716665333e5dcf21387d3f2b1000000000000000000000000000000000185d21efd7d613c409b6ddaa66eed70c235440974b2a9154f3711e3969061461f8824b4547c65e9db09ce875512ca2b0000000000000000000000000000000001aa46b22451afb12962bec5c6309feeb4acefdf3c98c1ea14275409b7111aacf7c92a8e024d01d4dcbfb1c91fc445a1d182ac912b005e90ab81d4f2a906da8309a69576a8afaa160fad2540ec049913000000000000000000000000000000000557370d81bc3da4c50980106b8e65ca2edc757a475194cef201c9edc0f50363cbebcf2750acab0b67e1020daf5660e7000000000000000000000000000000000462f1c1379be9bfed97a1a83a00428de63eadb6360393ba162af3762a99d7eae8549d0cee218e469e4997ada7b35cc00000000000000000000000000000000008aa5ead309fc703f6de980dd43c294530cc2b38b94d5281e9cd9b0d09f82f747a7107b700f1437f3abe36c01bcfed1b0000000000000000000000000000000014110a19d574f26e11e2163a981c3388c04854c5693e9033a474f1020d5f980666d84c60370950734c46663e194bf0ec42a002a460b51429e25f85ec4abaa580ac1a14315b1627bd52349b7b81a641d60000000000000000000000000000000015beff8cb3c79098bc73dc1ea4b240a4e0d094b3dbbd51592df6adc9c9847beb436ec83df6c55666e296fa843298446a000000000000000000000000000000000943aca2a6e57e9897ec764ee2911d9ff0a59d9e903c70a8494340cef2143895e79d3e6c03af2d6461ca199dfbd0ca0d000000000000000000000000000000000b812ba87c4989af07af44f3dfa87de119fea28ad598cb8e52247cf41bb8bd384c0d8913fc82e4cc2878065e797cc581000000000000000000000000000000000410ed148d1e354653f9d9d17c50026957fb03fec64964f2bee5eeea966b430e77f7b3538d9f4700a673fa07d0daac6b7a650dd3765032ac139d1b54ec7a5457c9e3caefa6af45d198433e5949d149ad000000000000000000000000000000000de0a9bbd63c59767938b555c7f9284d0885ca23019818c213a7d4f1594b028965da871cc5818240d155c05c69e4e25400000000000000000000000000000000079dee5649cc67700e9338799a9810d352a5c68098d0676e42e00bac31f37513944dcf47408288cb7f1cba121506a10500000000000000000000000000000000101a650e84352aaf3817b400da0aff40907aae3d2fcf16739f8ee8d5bfc62c2a0dd518201701932728a41134ea3f6278000000000000000000000000000000000f1f9dcc0b55d0ed327f667cebc052c4b6116fde5e3076dd6e447c3214d4c8847885be9547f95f341c42e7c7fa7e2c71bbedc44d54349cff199befba9531dd4120a51e2b830a3e356e68cff31bbe365b00000000000000000000000000000000148f706b4c93e739324e5db40d42025535cd33a32bb3f211add618c0e2022068384a5612da67150746896a2813a664e80000000000000000000000000000000007204ebcef495ca8232078fbf1539a4b46e89506a09dc008da457dee2792acafb6baac4f6cef2de15cbeb48bfd12bfd6000000000000000000000000000000000bf8900e48a4a56b653b1e02c3b9a7d81c2045dbf6297f1ac2acd69d1bf9e06480ea917e3a616243c3a30235abbc426f0000000000000000000000000000000005ebe0ddf4cd1aee76d0b3d03eab754664c8b36fb20ab1060900909e0e0a4abdb45bf74a0b1d40fece9bf73360f580bcbef3956ac71bfe97029b8e3f85923c2fdf9cf1ea6582b68d5a4eabc6b044c80d0000000000000000000000000000000007824d1c48bb2cc0f406e356f6e52b66392f6203f49dca7ce03ae6302ce3e8055d071cd812f97481acc654b318d6cae2000000000000000000000000000000000ae89f9eb1abe452efb7ca48f8f939d835f9a79e05211ed9f4abee06b93e34b17d920ddbca3d8bf18b96c3705c1a064500000000000000000000000000000000119ac787a7f3e9b7ee34070aac1a769430eaa8cc838f1752b573ac7f3c02a9f490de9600c856a55448598b149f5392e300000000000000000000000000000000193a3655a80e6e0b1278730600fd4f645d54947d193484131176b890ac197702333ea847317568230ad8af1280864096392f5b4291fbb18a93248e830b08fadbaad6434040c02b45cade73b77f22c2bc0000000000000000000000000000000012f66629836f0f57bdfd9bdeb2c9b7d6d5dc55c586e15d76aaa04aef06722bc8ca156fd1295b3063d738a85b3e8746d900000000000000000000000000000000097825c5db7289b1b9e640d19ecaaa81ee59e5b9884713f6d312604d8ac367634a264c316d73a9cf63358c8fb15f8c5700000000000000000000000000000000181133d027b97d8e2bef308a93b7ea2a35824dc7d01a3ed2f404fbe12ba3b3e51d94ec86cadf3da7dc9ecbaa23b411cc000000000000000000000000000000000a28a609d0bb015e375e74c087ce426dd3c20fbd8b374d3817c626faa81469cfd11a2a4e418a44f4d7ca621d0564bc4920a96f963375d7a294b584f2da699a6a00eb5781f46830987346cf4fe922a2f6000000000000000000000000000000000feca6f7e3cb286090fa3df9c5ebd10c06192fe14af58d46b827acf48fbd462f3f76d9d20670803946028437410ea52800000000000000000000000000000000183dc7085483bd05c27691c25588e33296fb610bddaac253af5b2262db38091650c1c3185d71a69d1a63770f95f381d7000000000000000000000000000000000189f9b9ea528bc2377ca3354fccf440fee059f5732dfdac320fb58541e74e444dbdcdc008c7b47681c05502f0b302f5000000000000000000000000000000000906162085e0e299a07e41b9d62668d4810b97d4be317bf376da537de7adb06de011f5f40af834593761b774771a80e4115cb4646c8996239f4fdda8c27a335361f0a19550d6eb0225c008408c47258800000000000000000000000000000000030cc52d7901d0360d10f344cecc8325412788cc30a912d5de3fa9bdab18db44efea235c5d34bab526f3b8ecee2cbb8d000000000000000000000000000000000cda35f561c19ebd85a445ce8bb1618b446c7013c07606ce58e0b5627a5c9e7cb200e2b8ee12a0564730279e75b469b500000000000000000000000000000000055ad0655a96f6dab5a432e7d2fef57a6a11113070444089df23b4b911e0994b90aaaaa2c62d06756f4704fa218f7c350000000000000000000000000000000011d22438d7c162d34802a664c254abaae07659902e1f1bfc2bdffa6c17eb11bff5276474cc3cec9507e28685f1c21bb0c8a8d98c93c392aefb64ce0c7ea455ba14c48bfbad0e3dc38d43abbc3276caab0000000000000000000000000000000001d04065373ce5d1ce47e00476f07708bb028040edb9ae7e8e00e2c6c460e1ab8b730ff510a25a3c8114c1753b7bf1ca00000000000000000000000000000000001c87217f150694a84a4e5aba8d188ebf7224e76b078dcaba4a91de6b4ab317966ce1a9267a5a27ce556c3386b086620000000000000000000000000000000003c8422590826e0999e7ae3ecba84edaed20fd7f1eba02b9daf1c46c2aec74d5fe63319047d37f5115f243ae0ddd4ffb00000000000000000000000000000000136ae093c3bd55ddaffc2494f3ba8176947cdf2f1ae408e7e786b23b6a65ba8c4131c83cd890386ba531b8637b3b042c8221622734dc6ccf6c7b84b387a3dfecafe187dab70ba373b4416ce3c505bef2000000000000000000000000000000000d09b92a559b8efe5224184fb4f43779d0b8c8f23587f4f74e2fc6fb1f94e8d2e0d591eb0702cf51a9eb402e79b46a0a0000000000000000000000000000000014ec2e4702f1ee1074cd1ad29791cf4903357e62570d16ac80c5e8ff73b255ee03a5ba070091cb2f984b2139de06a97d000000000000000000000000000000000d22fceaa48193756ce7331952a2d9a8057b67bede729e07cf8422bfc79f9ed2aeb99a9227af256deee9f8a6f227faba0000000000000000000000000000000015d9322c3a5a7ca404259c4cc7cb93dc3d46dd8dd9475756d2ce6fea527642f9230c7e94a804ecb0b4adec7963fa9cdcd3d1f427a25f5df025fa71244cb92dda9391d65b04756c41de0f67ea072c375d000000000000000000000000000000000e16fee11affc6714c7fc8fc5e7cce44d8afe645861dd2f0b8e58aa93d4f0de9b7e73020a1537bfbb0e2c8327c4aae03000000000000000000000000000000000b7745a4aaa8ab4593daa61e375d55f9043fbc7385ff229889fca514562168a4e769c5eeef4d564b41cff28b4efdb7bf0000000000000000000000000000000017f6c5b1fb00746b50ee4c7c743ae57fae2742617e5565241d012a0ef6067d9ce59be749a99886ce9836b648525d2e92000000000000000000000000000000000a3be81720e80f6aa0570c89613c78efe95d87ccb374e7f77065800590bc71d23ae097516ae1e97b498cd233221cf717b55c943fd9b11f2fb8a89f6c08a6eabe9434062354d845f1ac740e6043443f8b0000000000000000000000000000000008080a7d91caaf2470f9632575b43990a9523219d75994f1944979ed5b650be1e3c93eceeafb0875f66a40651f4c6dfc0000000000000000000000000000000007a19c4a6340e39230a33b12fe63e47bb0d1378420ec9e439f216699e512e4d70571a1670eaa6b60a5c899ac63360a250000000000000000000000000000000016898d22b2c123003480e3a01965a72de94cdfa39b20898c49e451dcf6a4727a1ebd629172aa1a1aa6897916cea192b4000000000000000000000000000000001217a373c78de9d3005690023b9e56bbed3073f13ca2408a27a3480578d8013fb9d3ee5cda95c3cdd091a5cc68d928da7b0c1d54e51b8572256aeb72bb032a5011a3e8ec5ad7e8b6e0397b9f6fc64c9f", "Expected": "0000000000000000000000000000000005829c932c80baa420602bf841ad9bb24fa25c61f33f5d88693207b81271c94eef54bb524aa830fdad8caf8c082bd4990000000000000000000000000000000000b8d184316c2471ec6875641ea83de4f9b7227041922415b38b07a0704d01f2585ec2701bb4ae0bf6a0c0522efc0c630000000000000000000000000000000001dd81e075620914254b38ca5a7287eb56f2f31f6f8fe02fa51488d45c7f4609bcf49972d0ae5ded76eed5a4c096939d0000000000000000000000000000000008067feba36999b58342ac54e48b0fe28245f8ac2498b60093082822d19854df5c3168dcd55ccb6b2cb397b77e712333", "Name": "matter_g2_multiexp_41", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000016ed84856b9f41be9bc6c025a9b79e2968e2ee6bbc27608093256c541096e2c9eda1159e6dcdaefe783aa59d52f28ee90000000000000000000000000000000014aabafdfe8c7369f93d5472a9c6c4d426e4b02c943488be993d04ed24aef5477f6d455f82b4af78381b8bd16f42b56f000000000000000000000000000000000af34789c6c923103633e5b1b9fb447b671ab05265c16488ca7224e49db21973487a5d3de4de40b9d8a97ac9b1966619000000000000000000000000000000001123a6601c5351a586f27f8264d4227f5e1df868a03e0c3df5c148cb523cdd178f96fbe52464fdab210564dfc22b29536f082a5ffb8baa38ffd684a4a70114343a1e723bfcbfeb57d0a85ad5e592d7410000000000000000000000000000000011b82d78cd9b53b8e7e5c14a7371f34f08546896bd59d1e7d8be15d21742180aacdd01b0d08da2cb24873ce75e166bd500000000000000000000000000000000161ae0d724085a6e801edf73443cca87995c2d6b37e962db5719f4c480cb830e379fa778fd2f29e75173e1c31daccaee000000000000000000000000000000000a2c2b89d00b7d19f2b0530889905c30cecbd4ed0b56ca82208d666e7576c32a6e90cf867ad87f19e4fd367a10c449a2000000000000000000000000000000000b65c0226743b573dad7ff25bf1885e3dec686cfd5da2862ab300fde4fc8fa9b587d0f2d11ebe1f6a6770bcaf2588f8f5160286a6d23c30595809dab6ee6523d7d235114d1b295087e024b4f6ffc80e50000000000000000000000000000000012d4f299998aa897db9e3194244fdd1dfb95225e3271383b5cc296bbc51c4e1af52e849d8244f82421cd198158918d8900000000000000000000000000000000110638a2f7cdb7104de8fffe29be32610063bc656e13168921501e1614f282bdc9fccff4eb3c479a42b240a2c8014864000000000000000000000000000000000b0adbcbaedbedd376efd20a417bcce562b87b7449cac1e90d44eb05930e6f558b35ef755457305da012a231b5675bc2000000000000000000000000000000000db6fa926c7e02f633730569732fd9239bbacf2042599e79a4bee76619872901c6f4ec4d4fbf3f84143a0d17b167130ebbca29b94b6583d46753473143d13a7aadb0b18d6d35d7423b8a004991fa1ce500000000000000000000000000000000166578f3087772545c0f47fe0b3efe32874d26463e4f262be65a3bb6b0fad7d0f779808f69362f3fe63c72f24ed03d70000000000000000000000000000000000a8e61e8193228fa1825cf14e94f68a5eecece9afb48b44871c5ad62510ee1fc4e9c60d5f2529b8685e6aa13ec91979b0000000000000000000000000000000008d25d81bc4bc92508c8cade33c305c11d71a06bd46f184b05dc406f0939f0e0967b02f15b4f7f6984c9fba0644ca8e800000000000000000000000000000000113660a7d2152346500a1578641aad4dac2919ce63d01d8ffa6dad72f524c888fc2e9d2876859859e47d8e884f170f86607c80069dab2a16e39370de32df20534aca46565cf573159a93c64f1f0c4a1a00000000000000000000000000000000160529ff217934c85cbaa8b347151539e252dbb502c015e8e45c128df2b8a737866737d5cf0eca6f76e4a16790cd02a200000000000000000000000000000000127f7b0e4f9351836db9c204386a199293955471dbcd7b4ee9186f0434b46dcacd1edc02fb46b4c377c4e62cec10cd6700000000000000000000000000000000094abac17b11600d7447f7ad0f21d98c14e439c4a4a6572b00c90e14d9fc54e85045d0576f74b054d384179afc0a70c80000000000000000000000000000000017165c32410a498add8e1dd55ae43f94be234ba3859fc6b4816d7436746add313f42b1fb49e0cb6c4b7341f0acd09db841c1f256e866d218b3ec20c132446945177d518573ae3f0e739ebcc8821bfbc700000000000000000000000000000000060e503ee1c5d3eae4bc0eb30fd86303a5c48c10cc7b4736d17b8774c78a8c97ee05b40d366b2cc9bc7781b1e4a192f200000000000000000000000000000000034e7012414edfc6a8f7b2c6049236b6fb77eb94b05d55b218851fc1e553514e6ad388fac08a24c33bea63ddabdfd8720000000000000000000000000000000004c832477a90683d417a00a698b69c643d6dbf82f5afbb83eb3946f8098d80de6f2d457c0a06d0051315f06e93b5e13b00000000000000000000000000000000048c3339996948974f2bac14d8a6b8430897644ec8e9cff9eb369557003aa2827a4f3fc3444c4df73663ebc9325ff317c72a47e2267010c532d676ee3c3ebfb2be2b7569f6f7a22f76733d7773ed383c00000000000000000000000000000000082466944ee7c62788b6fa77816094ea623d03c7aa2af249cfbfbf78eed26a76cff8c23c2295aac7ee1ef8dc84630003000000000000000000000000000000000a8f88adecc3f50d8eb329492f2c031e722f36627cb3b21415781156ef44954c5b8529ceed5978a37ae1248909d38b5d000000000000000000000000000000000e08f628aa014152b50a85bb6eb947d53c596d82c0d03594ed3b64c486b8630c880adf43fb1575b02e4eb8174a04034c000000000000000000000000000000000776844f28958d3e12a5c163dbd039e50df44b1c6215429381790175a609a339621475a5b9a06c3276c9177d2dd2b576c52f48e84a68d99124e678dabaf376c956dbe9603974283a9efc7c27e830e9590000000000000000000000000000000004477f153c0510d8e50bfdc2db69182c05d5ae9b94bb1880de239733e380e03d50001378432312b24b5bf0952c38396c0000000000000000000000000000000016663990dbe529a5658f2b3044bbd390ad430adaeffbd5306f758d86bd5422391bfa1d21e88c63300faad55e6a2d1d3200000000000000000000000000000000188f701658558033ce2c41101a611f74ad6d3cd075c195476bd2cd59a1a9dcfe937020737250fe418b4de435f8b3a0380000000000000000000000000000000013f8d3625309767841603329f56686a99e196d697802cfcf31f8b48f9c76f77a321276a0158a22b94e91d6907f6ff451e4fe662495bffd8ace4c1ddb39e612b361bf90a0f1bdf6c7fde2bcf63df1bbd2000000000000000000000000000000000f184d22f3c0431b031ee0ee7ae9598ffb511a2a56f5c9f15c9a4b0c53af2a10d22a311805786e303e234239326dd74b000000000000000000000000000000001062725b8c576e79e314f6a56ef9c41f05a65d7d0d57d8414e2ae9cb1a520b16ede7e418d3a9413c9c1660dd7508d5860000000000000000000000000000000012ef02fbe96f9a191804b6c4a0b65b6024e3e2b1f8cff986f5a950cde9a32ad50d4f7a72804b2d18b93250a63a7ae97800000000000000000000000000000000000b3b0333d61fc46653a7172f5a813d13ff5a48056f9689c78c4b18b8aa3afaeb7cec305d98dd600786351338a2185a651e67e96f64b80f4978fdc1cac90be538774e34c2f619f8b8e60cd2aa20f2690000000000000000000000000000000010c91e1dda48dc528f618f01abbe01db1a7b6dcb0d47b83c7b7db3331f7156f7b2d0f081458241467b0078935a7b4a4c0000000000000000000000000000000006f87f782979d2adc02e65b56a4906e50430cb4e0913636e9aa0364535c9d7ecd3b9433358e00caa8e90e84b7705bdfe0000000000000000000000000000000004635089c7706cfdb5a22ef643d1a9a5021847646ef01ea559d1b655299b65cd76a73b04149adbac612e7aa756cf30060000000000000000000000000000000002d83d82bc9fd66c558e00547a8c25633899584c9b855195c00eb3c8742d22c601982f244a03f8e0c5c21caee24405481a6ecd3db89a7f07344b5728efffd35a11f7380c740669f746fdf565905a1ca0000000000000000000000000000000000848f10eeba8ef9c7fd0e679767f6b6a2392922092916da8f13573661f84ec97c65717e55c65526cedd59dc1e096f0840000000000000000000000000000000013781974518487de12661bedfca5fe72205c51cab461b5757ff14f319d081e7845cf8e099892ea85470039713e8e48cd0000000000000000000000000000000004cc1a27d1aa88484fed40ceef72e6bd201e5ee276b5ec27624286dee112ece767b37c6f1f7846d71cc0f4042f04dc170000000000000000000000000000000004f7335d6a1463976d9fd86e2baa45d08ec65059b14449ebe4aae99971c5666cdc6e40cf0510ae99dbce97ae8b4598067db5ef4c1c174c2e5ffe5555f54f4e845c463bb5105381fb39eddc01103b1bf70000000000000000000000000000000003c1b1e0848bbe37e62f1ebacef1a574400d5048f1e09d935af2052da29140dc4074175e4d6ceb7c2c071331b2f3d1d3000000000000000000000000000000000e1c84d6b20553ddc5ab09049ec488ea2839c5818e31455a7b231cd0455e2945aefcbdc6c1979821a80bb4f77d46e91e00000000000000000000000000000000199ebb31e8800395a9c2e103c9340444c97004186929b52de33cb8d9396e7ab8d5af3fe6035d4463701ea41e341f577300000000000000000000000000000000081b3882bfdf83e67d2dc42b211069a4e93c0f173263f9f20579128391e7f2de70335df949b9c0e9b834b6e574f2f8cc14018f14c50d40d3324952ec22ed247c13c4cf10eacd32c3671757bd12b041e60000000000000000000000000000000018aa45c6b3898a5fa618f87f9a08a7234c1b94fbe38e2297a1f9c7a2e9de0ed83023deebd56560b1928c012c14dd7a860000000000000000000000000000000009ab80da6c519aee8aa1fa68c35bd0fac78b55f88d861e8fcd445f629054325d63cc4241f61e5596dad0d54c94511e4c00000000000000000000000000000000105f8253f37f5538a2c25587fd33ea61fdc744a7cdf4ff23a55e2c66a39040d4de5eeacb7e11c0d2a483d59e7c3186aa000000000000000000000000000000000f6b10cd6522a1e34c87c702f58a07858cb753d67da9625155bd433020775351a9ec4ff879f91a43f63be1c969afe675ed4a28dc3acaf2220ba56d026b292a7d017bcbe358dedc57556cf638517bbb14000000000000000000000000000000001618dd5de43a6bcde91a6a03fcd88fe59d1c8c51d3d85cd44a1920dabd2608a0b17a987b76eb8f5b20c7f1dc0abb383e00000000000000000000000000000000198034b7ab8fb8ff267a52a9423da95bc587eef8684f18639df5db44e50bae7fdea5c5e5ef37ff14937f86cc948a34e500000000000000000000000000000000106d1f017da463176bdf55e3ada78ce70da4486be42dd0095e3a8a0f6e59ed503324565b717b45ee38d90dd3ad13c10600000000000000000000000000000000112d425765fa2fc28486b95e49db63346188fc5a6bd0b7dffa4430dc82703eb44d98d726edfa4a275aa5db5028d01ef530fb17a38b7d0888eb02394eed26406bce9e92779251bdbcb432153a550c0850000000000000000000000000000000001326581ac1a1a960db1ff2e8b89b1debaae46d1e2d0aa6ffc6c7398f207abb699ac59186ae7222b5cae3abe64cb61c93000000000000000000000000000000000218753594c63ebe5fe503aab4dbe1e944b24138948542c7c43d92ccfeba5854b7bf1bbcf8078d85fb0b8701b8b092fa000000000000000000000000000000000c3ce8c17f75e78a8c9980e9fe125290d377a32ac46411876ef011e169e86e1458ac5e71cb4a446f6c640cceb8d5617300000000000000000000000000000000176966eac1e20586ad2a03b4a1598b4db1d7c66be70b1b22833e4afe0e0b3783572f791ddcd4eb70a88f4acc28b6fc7a980b5873a5d0f78c3b8582581349498fa997fe3c6b1abe0edaed594253359d8700000000000000000000000000000000099ac8430fa411e74082cf3282f9a456d3826a7df4f91ecf621e645a1abc057e1bcfaf9ee73f149bc447cf4230f2f6c90000000000000000000000000000000004e93d7fedc9e2d7423c9e111b4674a2bd83de28dcbbcc54ce4b324c96318a11603fc9ea385f1c02364ab1f6b5458481000000000000000000000000000000000bbb29d70fba5b12fadb02a24bfe3f6a5362c71fe5f964dcd0e01442781d0462a873501029192858027d612a8572e9d30000000000000000000000000000000010daa9960005562ca2d18eaf4b4bf081f194fa824cc77515c81b2c836627f21b732448f367e2cc1830ad0fa4ceb928e1619f5719c320320a3c45dcd6207575e0d8527c458c56d3decf1d12ead8a985a1", "Expected": "0000000000000000000000000000000002a61fead6801f41f2f27603cf34cfb4b917f2f85cba1f9c684995227653c9dde559e1e8497234fba9b2e4c119cbd9ec000000000000000000000000000000000085f73b8e835a10bcb9312931eb08d916d2b93a1da843fa2f4530cdb26e93b5dc95a555dbe8e50ca465b162661ce1d3000000000000000000000000000000001442fff9019b5476c217ff725ad95c92c17b42471ed7bcc121e8a0506755ec279d4e56d770a322d56f56bc6a6b0a41160000000000000000000000000000000017e7710c4639d51c4a79c5a2791101b52742df202b1827192872f168bd21020bd068160a587fc501782c1301c231a0d3", "Name": "matter_g2_multiexp_42", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001213b5d5704c454845824994769c8b300676e75bafdeb95202001161aede276ab7967ea7362d38e97ca1484cf9c342fd0000000000000000000000000000000008c7c1fa04bebe5a1fb8678370563db63e7a10b30747c2ddeb4aabd4fc0ec93220d578b8110c6bfe8a3a6ea2820f0db8000000000000000000000000000000000c4061a295120a00de52300ee625ac46566464e6702489467316e8c182ca2168052c50b5962ff47285866c17d213fc8400000000000000000000000000000000086c153169a9ed1aba10a6cbebff4911b37907d6398c441ad47da17988d512d822ee36f5217355b93c9d6dd8dcbc8e0b119d33d32affaadbf6c2b6243bb7b344a971270b488cf887334fcb15de2818cc0000000000000000000000000000000017929edde8f9940826ed739bc9f59099ce76e85950698ab0140784647023f96afa064aa4a49b9728f496515a0a807e5900000000000000000000000000000000198d98f430384c1e7fa9e2403d9c3d2f81873fb7b204378cec95b97e674e10a1a43af97db0488209904469989ce80a0a000000000000000000000000000000000afc9b5138999bcef35613e38bff4f81cf532e00346f5205405470b2424622826c746ddf0369c7bdf77467dcea5cff290000000000000000000000000000000019ccc05724b3e9966bf918f01312c80e8422b697be89365b6ca00eb31b0bd08fae942e90a75bf9da1b3d264e416060f1f1d832b355d7e0ac3653431528ad0a8f6819daaa19292a00c910ff0ff39f46d5000000000000000000000000000000001568e52c2760d895874527d1ac8597730578176bdcfc67aaf69ccda253f6616230811dac59bc27cc1e57b94b5743cb3f000000000000000000000000000000000a4ddeb8b56f105ed5f47a538052f3d38a23c0ceaa2dea241554e6508f82f47d32415ffeeafe5ae5664c936b78e07648000000000000000000000000000000000b3b335a390aa0090bfd6467d6cd02eea1ced347cdce3c9ed85dd46e38e9f2ae9642392c2875a27618ba8f2c555d5b190000000000000000000000000000000012baa4b29d116eec749353b7658af70d4d216189133db707e56068c8483af43ba86583862e6b39df13b88058536861b9e6dcfa50f6129544835b5a4568954264ea68d9e2e5d4370ee31026997a3fbfe90000000000000000000000000000000001888b83ca28c244a6178377b4ee6844dc916e28c3f56312ecc0e29d08e6254dcda39a36ccdc317d1908303db3c028dd000000000000000000000000000000000f4b73d9316fee42d60f8de402a7d07765508b84d8f2c1be1f3f9e802ed7b0c6c5fece3db95d5287225026e73de98ea4000000000000000000000000000000000f1b48122191e1bc421881de831293a80566b9a7f2c9836f7718afb69592d59d2a714cfddf88945b94fac7a50b743eee000000000000000000000000000000000f1c6b052dbd03795433d7ad122473f109484d50245021c8727d252145e7db7dadc015265d1547f9c748409d74f5aa33f7822767391d3b2331e8e1b81c659c6e0262f7355063decedabac9797a84f0f400000000000000000000000000000000011e8613c3a771a177b4b85f0c6f97a53fd7900cc23566aecbf115058d2863189c21be36dd5dd736f6d0ffbe88182b400000000000000000000000000000000017b2c4e8d8aad0a12fd7130789188bb63a08f2b243c8f7700599dd33d7e176f70f2b1818e56540ab3fa507878d96a46e000000000000000000000000000000000e2b5ad5ed3578dfdffa414a4a2142846b1232cd2de468725283e3f92b536d8ede74bacc236993f6f68a16fc6a7828d3000000000000000000000000000000000fdbf06ae4cfedc462f5913bba9bba2b5c86ecd0e298bf27a21317fe74af6ab15014c62cbfb617356548cf808599caf4b1ba1cd6a4a6c433624dec63547119c0d492e3f38afb04e5153d82e400631aef000000000000000000000000000000000b48aebc6525620b99cd83979658a35afa233d17849bd0dcabffcf3b550f875a386b6c0b4ddacf18a23843629072c0150000000000000000000000000000000010432e5abf862d3be10ac5677b9f296ccdcedf1480e45de631b6bfec42f20edf62034f7205f659f11fe5a6aa9d882c7a00000000000000000000000000000000011702a3590e7aedd6948bb94bcc874e0b8d77a18126ed4ba3753dc98953ff941495486c14c6d801c71fca3564ded9910000000000000000000000000000000009faa427c0a7da26c92b451c61f5b5e8804fe032a4cfa014397e430882cbfcff81bb22f9c15a8747ef455773c1ef65b0a41e184bcaa0721caa4114d6393ae2251fed84aef57c7927a170145308bb136700000000000000000000000000000000061a1ee841251bad461f89c52196bebb1cb4463298e88abd62cccd21bbd325ddb33d1306ffedb2734be76c18d80c8dfe000000000000000000000000000000000d05a5ce6372ce34b0bf4b19d8e05aab74abc1cedcc35a2d1d4db38813d1e5c1375d63ca0e8bbf29c510a4319d2aec27000000000000000000000000000000000dfc57aa8de28745b8d28db3769ab5ea26b5115d3e59e51ff19af8ba37efacdccf763ce682cfdc77685705781c3924870000000000000000000000000000000018c17d87411c4f8e0ca51b3eb4c3765d3846e0d1b75574f8e511b2f3e8c5ff53bf7618959ce18dfd9e4c6285e88f094f63cb451d8eb3565274793925a1869ca5a25fb19639449c71a761809f785568de000000000000000000000000000000000a0642094b89dc9c6c7c11c1e57ed542982bd246112884969d424a3e091ec4fd73dd40a5ac116f6c68216fd1e733cdc7000000000000000000000000000000000788c7a63eecd1cbc26ee6b14b09d0a3b7a17a848fc0551d50cb7497bc98287da2d9b898260eb678a8a0f446eef5c6670000000000000000000000000000000017a1298f90022ddff3fbbcca180e3f4da8760218dba595a067287a2473a6e10b93dcd54154cb64b6c078b083b42cd09000000000000000000000000000000000116e999b808dcaea0566c0fbef1807e160612dce91756b2cbcf4883b04a90320a0759bba21b41e6f4d8449b52e52f9a96a2f94d55f784ebfc6b6260327372217d6a5b9637ea5f9afc1a65f99c221c29f00000000000000000000000000000000064c95bc9c0e2be48849a349f16713791c37310f71b5d0613cf0706febeea3a56a0f0f1ac6b504524eba801e8b759f2900000000000000000000000000000000007088d2f41fc7e1147b92a2ee7062b9bec194d3a47eb9985ac1ceeef57e1a006571e7247a13dc95afcf9905be57e2a7000000000000000000000000000000000e6a0770f4315acd9e410fe58395ab8b20a08240a6948b762dfbbad3414bfca0ced4ec9da982bc9b8798b60dde78a96c000000000000000000000000000000000a70b53a6d71c83971167afe329ffacdd417bd7b228766851c3b43701a439f253a8659312db7e83a398142fe19332b527d889a3362f551b88e63463b7f0cc334fab3fdd302b630e419e362ec1eaaeec000000000000000000000000000000000002486eaf9b743d3aa6a1f3e1174c5f213bbf3e3cc0558d63ce40e3c03e1c2f6e8508248bb649aae1bc92f3eb8118a2000000000000000000000000000000000042b03959b40eb0641d39117f7af50dc7ff048697a57b80723aaca164e2dbc647ffe78fea0a6a4c07671f7db6d5b2dfa000000000000000000000000000000000e141eab29f52b9bd0ee44861f154ec1bd30abd715935a7958a19007e789a41cdb0f4b9cf7b3fac0b0d4d77637b510d00000000000000000000000000000000002cc2eaf89cb7a04d425d878a30b5e2e9858ae0b2a2ab28fb28a6db0c7283ad861bb6a92067e969e5721b43466e857db8bdd400ad873cd6ec546bff698171942d536b94e69dfef4bbf316a471d4b45cd000000000000000000000000000000000e0f7595e4c136b4d8bbd1eeb021df7dd2bcf1d9f98e4fa293f7edab635e019af87c138275fefacd806213177af40eca0000000000000000000000000000000005dc209d6c86f1871637998c10490a70371f9e00a68d1363dfaeb62046473dfb4bbd3b18b943439f75c45a1ee7f264a90000000000000000000000000000000003d215567d1e8f504a72658d48fa51374ac77234552c17db4033af780133d8516bb0769678ecb50b8b9eb950c2dd73e80000000000000000000000000000000004d780849b731012e1e5732d5f6d32c659a95c3e1c8f5ef4841fe82afc6f0aa309b1e02dc2554a4a4ee781be2be2149f63b496a64cfd15410192aee9912f869deea5a08eebd6b160667e12fdf23c44510000000000000000000000000000000007ecfb753be501d9f9b7ae7ceaabaa4fcb7b690ee04fa1a711a15dcf67e4422adef64a0f8118f93e67f24a2d1a2bcb36000000000000000000000000000000000a459e403d85972f7132641c05bb842416a7135009ff46b617bf0918e65cbbf33f76b98c10d901936e589bdf5de31ea4000000000000000000000000000000000bc6ec31a3ff92b4fae07cb73ad7bfa8423044048337b0ab9add09bf10fdf190a5f7996d157483d29fb29a681ed585520000000000000000000000000000000004c622e2bc606fefc8bd83c4a32f7353123205a6d3716b581c2c71360e5200ab069f60c256dfcb04b466c53cd61fc94470de38cb4627f53509eadb0918e562c6fa68a4cbdfa9f7578a8aaa8182f5315000000000000000000000000000000000125688e44f593c5f585765f30e9fee5e4f15247cf33ac78ed1744453385f49ac61128e23b1569ea33d74b207a5e72e930000000000000000000000000000000009d77360ea37298fe971569230159967012c4991255fb5337ca6d58cecc3cd44a024a9a044ac98a894cc97dea161844e00000000000000000000000000000000056b2dd9569f0698c732367cfb217af90a3d6dc15e2555ce0aa845616e4067a7fefb304f6525b539555a0a685f0ec5f20000000000000000000000000000000009acb138abacac351e03f7589d4bf29cbd331e93bf538578ca9466b759ea070931c786d35f74fad42261e2df431fd00316732c583e8049a5de38642cebab774d90d5f87601e3599ffc9af692ba532e620000000000000000000000000000000013515b0022ea946a8e679b9c0eac6cd67dbc4efc820f0b3d8984f12b7d154c0632a8d7207747284d49c498c79b6bb5c60000000000000000000000000000000004d6765ec6aa8744225c1e652ccddccc91fff7fa8182931c8648b3d8bd33b2177a9af03b2906da02bf117bea59aed3040000000000000000000000000000000006f1d858c4b223552f0aee466cff35d14b3ac6da35b8f482417e8f597514b065be315aec6662ea5c7784d3a9e2184090000000000000000000000000000000000345eaf0d72b9c11fe72261a2fddea318a8dab92a67ccb9438c11e61fd298a333cc42084d4ca127e09792e346cfe0f004a037e7562adfbad6b1ac48b8e4b6f277a788ea2f4416ed2900ed2791f09bc2400000000000000000000000000000000029ad10ed6d6d5bb591771cbd597a3a0b841c2347c89027126bfd1efee2ac403933beb99d08721232ab9b7354fcf9aa800000000000000000000000000000000198400d4e026c2463a07ba5a3974c869ed8ceb1f029bfc7f41b23dd7076cf4a83b17c27ad6506c852cd2cf7c4987f93100000000000000000000000000000000152bbf74cefb77fae8e825443e4ce09b4e223242187f563a236695294d0a5f540f0b29d6f93a54cf0a77900e936e61e000000000000000000000000000000000079f4759eaf044a80417345a1b4029f8d4cfc7e00fc625e815cb7daba2243a97d21e42b42ec968dc8647158fbe467088fa878f6a2e18b88d6badc5b42775e92c17974f3a18817b7769d44ceecac46b89000000000000000000000000000000000cf3148d0c30774104a097562cc83456d5d18643d5f7ad58aedd9327bf8e9450feee50ee893442b1cde87acb02b62045000000000000000000000000000000000011d4037dcc15d0c50337d71816a2b77428b8ddd530bc3b3c8550606229f88286ae94ba03578cbb5bbaf118916dddc90000000000000000000000000000000016160c8ec4e2fb780748aac279bc248b2e2f1092262f86d368d2f06a78ebcd27e929930c8f2be124e9d92dff5c6c6f42000000000000000000000000000000001980375281735390f48ddac9d00d4c6ee7312ed0797333a26a1684e09c9575e57bcecfc4a31b8d9597a8ecc703835e22c4f1a7d2b66e6202c957a649384cb277dbba769afd60708b457613f0f3372515", "Expected": "0000000000000000000000000000000019ff32d2901b7732df1a924eb3c099a9d36bf36cb32ab322f46a72d99d81c7942d0f2193a4aeb55cf079a2cc1707c7aa000000000000000000000000000000000193561d0433e1031fc51829504ca70e92e19bead2e0bad655aaffb6b41f5f75d18f04a162db7714f3f23da891ea91af000000000000000000000000000000000d010c36acbfb38d9dc2df6e6e21bd75deba5708fb1012eab23d06d78b1244d4daae38aa4f803d12441d91adfbaece7a000000000000000000000000000000001459ebfe65c3b2c9b2684042bd71201869db1a0248c740a54fbdafcf18fcdbcc7b677af43abe803362b462369237690c", "Name": "matter_g2_multiexp_43", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005b9860b565fc64146020647d1902e2a2d2fb2002b54bf5e21b6601124edf14d6e8836f938843fbd8c02ed8530953dac00000000000000000000000000000000104938181f16f16318d223febec3be3877bc57067fc23729d1f5552099125558cb21ee0eddc32ae0b0cc3555219eedba000000000000000000000000000000000211f809b624c4992a43e78a978ea32accf9e61fccef6bcd05155e52adbf4853340dfacebec9fa87e5417c045da25f9a0000000000000000000000000000000019bfe94a18da9ab4ea744389c17870ac96218d02178bf2ad502f166a3a1da8c14e3fc52038021503cd24042cde8f306d0241da9d8505208b4d3ba2521a42f28df7d06fc212e9e84931cbd30ae3ba2e150000000000000000000000000000000004fbb396eac2a1de9953febed9fb6e158a3b5a366f783d2105b562e8143031d7a1ef039e3fdcdb675b3d3aa4f4dcbe4f00000000000000000000000000000000155e23b5b70f1ce34fc229ad5c8bdfde7fb5dc0eca19596c658c1f8c38716a0a7b5ff59ff19a7a67e12760fa90eeafcd0000000000000000000000000000000002cc82cf87e7ac05be236104c1e668b5573674d9bd741f2d91d05c8a11af1f72aaa1dc20c73953fea38e6e069d2a43de000000000000000000000000000000000a7d1dcab00db0e7c0a239511d630526fb120defcd9453fbb57ee328f974a98721274144e48d22558edf25595b8ff4cc6fecab1334668102e47f1e7139059c1d715a1851a026a1580f93c2daa3f08a270000000000000000000000000000000010c9293b3c58d646a95c620a0e0a7a0a55cf43b4abaa0de1d5570fabca8d97c91afd67bd45aa234273715457da5a2894000000000000000000000000000000001454f8682f3736847cdb3f784a098f7c9e488629efc3820d49b36a2e928bbf736dcb3e1b30187c2c0090fff290dbf97f000000000000000000000000000000000a0fe3c635a81f20258db4f1031589afc8c7fd07f2fe1e5cfc8f3c40d08a958a3dbec537c51be2de99b849e006870b6c000000000000000000000000000000000728876e3fdc42273e8d71953de61dd5c03e7c31ab6ec56fc03cdf55c8f0aa4b4e5c8ed88c23c28568be0d864df026af4e2023c64a3b51cc3d82e262f83260ed4a5e9e3238b85077852fd501b52aceed000000000000000000000000000000000c9ba542189ec1828c397ace9639cf2ebbd1613356d8fb26d3c40dd00af1f43f5bbb25032561aeebba7b874bf39cb0d500000000000000000000000000000000175aa6e94a9e42cf809f48f51c48d60e74d61388dd217b55f3f63612c4565357581e5c39751a65afc3b7488caf5151720000000000000000000000000000000014c880d35d1d31793145803182584a8da003b0ee3c29c978b64bbfe4e1da82910a4539587ba350d393e1bf3169c5e4c70000000000000000000000000000000002a063b3fcd77180de632deca1ba89ec4ceeefefe9883ed9e7e06301a268bdf377c3a6e30859e5a39419e449dd27ebf5dc0a88f0aeb2b082dea6b50d591018330c2276830ed554840c10772403561ed700000000000000000000000000000000069edfb8a83760e09726f6d1c117d4bb3e499084b65e1e830ab30daf1625c37f851ac122f9f5c795912b5b6f7907ffe1000000000000000000000000000000000eb6e9b55869f65ecdf3ac46d0ee596d07c573f88724bcd802b4429392b9a56730a217a03286deb5103f70aba7a9bc46000000000000000000000000000000000e2803e1a646bd70c51806b676591b328cb20359aadc8e79d59e7c31e1ce2f1473b0b19f7a34f23aae09678b11b37432000000000000000000000000000000000b3c9fb5a39a6c40343259e12ff4fe5058f25619d145922e1d80c3f5d105a7495dd9a4da329a2e78afc31a87b2c5d5e2f68c9e76d9d8914f14007c968a31089041e67312c6a3e5d30e65efa55894ba740000000000000000000000000000000019da372143e30307a71c7b96ae0703301ed723814a35e270ef6a6b0c57144f494df1d3fa0ac369f59f3daf534070c9120000000000000000000000000000000006521d89d810c7542108de26bbc888482a3bcec8cb9b542db42d5d4af30d6c339a5b4e959da4f98dd6ef8075554f4017000000000000000000000000000000001387d9c684a0fbf615e7023c0f3ff47f4d2c5a9f748f0261656a09b23066c745420df0eb180c9716d6d0743aae7689a10000000000000000000000000000000014271b9d0b21cc69072333a6c03493321b9d9028149d24964a3773bcbe5045875c457aee11ab0682c2bdd44f098f363d80eb90c6cc25b3a48d93b94b698eff513da37210ba79d22d76a270aa97fd51070000000000000000000000000000000001dd881f3d2063adcc5638b4b3813a30e75fd308de3c9f42e5382fdbf097d5796ee9e03cb44752515b2459f131f58bb90000000000000000000000000000000010f491f4594dab938115343edb47b0087d1cd1bc12ef908e150ecbdb3a54d8dd51ab24a0e10c585f235ed99fbd3172270000000000000000000000000000000019d1665d452ce7fb6bb6da9782a55dcf12a1d9abdfd50435b8f2a1bc5b323c004fad35ff7e9aedfd414a9b68fb1eb1860000000000000000000000000000000013828087beeeb85e43e8540fbdf97af189878f5ddc1eb35c95aa06a26923330f3b8a2b43f835186865d6f5f6afdb2b9b067bfd893b12c79e13659ee9b5f22de71d806a85410c9a23dc43363915a606b100000000000000000000000000000000014964f3576b97c00a8c5f4372e2501944a1e4374a3c30e11376ea62e09d52d40d428887833bc2f06279b859c00c98a60000000000000000000000000000000019ed533a3bf469ce5b3e4e9035af177efe9e4f8b0a0e5dc9721dde49a7fc66fa31c8b1c8d5bcda1bf75a532bd2be356d00000000000000000000000000000000064ec4ed48d63ab62373adb7898bc904d246bf2b3790c3cd850524e50ec38e7fb4a364344a6a1dbd26f2ad2d0fccaa1600000000000000000000000000000000134aa3c6b72d39bedd8f9c619d206a295cbc05c611147d38aa7304e995089ce34ab1fa13c2d6c6807a88797dea20214b34abb11f7ed6d73fb81ce2777acd6bbe8839112c527ef4ad88b094cabdb4742a000000000000000000000000000000000a2a4c8b457d0d2554a2d439fd3b74b18843386aaa00d1b89a1c2d8ff7192cdd1d3a888994376bb7ddda4d16bfcaae3200000000000000000000000000000000155a7dc763caf6f0fe1ba9537c0f75d3e455c2d1c749dbb4aa7242b40a9740fe9e8e88af6017e8f743a9e4c5dc6ebc23000000000000000000000000000000000a693da3aee178e2f0489af77f671c734423032f30c0b7b48debd3b71e65dab7db12ab1e0e72d3ef686d6c1922aebbf700000000000000000000000000000000109c3476016884386d6206c94073c628375a02c8fcd3041e06b8b413508188a1d26ec5ddf84a77d059e9a039dc5470d08d6693acb1eb73f6ed1bb4f74f1062f720a7f2c0ecf2b5a944ff89feb2688e19000000000000000000000000000000000a07f457f5dee69e9ee746dd67f982914a2182b5cb2609d273d4122d57a32c195270c956361d78eb65449cf5e13907ba0000000000000000000000000000000011f149ce84c2a11ff818be3ff0f86c1b38a9555e169a8cf791c79828207b7aa89c84e8012a0c5d8cce4e89d758b90e22000000000000000000000000000000000d636e5b027e41809d7ec8bbbfd4bf641a56599a63a7678569404ec8d45c3b88c1d2969e6101528d4edf1ee9d8e793320000000000000000000000000000000011878eefa5ee49be83ea1f7a9cdcd4997ccc59a9669778b3f006429e1a22d3b2a051924f371a228856523e3a09bab59b29ca1b157e6a2b5b88d7467e851282491ed30382ba217b82ea5cc9ca0c6986930000000000000000000000000000000019e9a1950f663b258474b24c334bd256d3aedcd26dc971a745857bf1fe007da0aa00777db5c3e5d21294e99862bf8ea1000000000000000000000000000000000329a12fa0add36f259e401442bbe6e5f9139e4a46d5d091a2110d2561b5629211a1c1996f20d19327d1782340e7ce4200000000000000000000000000000000032782c94c6e45a88425438324f3a24ebf37f0be213424b1be52c878985633950a022f57f8d64af1470486aa3744f3f7000000000000000000000000000000000631556d52fdcee3529023cf20d46ea09ab3c642a7f4eca2878e4af88801d21b80b829c9aec9e73317252639c148676c40bb53575662fa0b726469da01c39df389efde3936d2eee18d7035704130ad6d0000000000000000000000000000000009eb122c61ec44afb56b64929040058a804311e0e97d3fa513a162748091304233480bbc883f6fb66080b563b308a24a0000000000000000000000000000000007d1d810fb8788b9f0cd04235771d7adbbdf8c6e67e8538b2c6f0f278755cc5e57ad720515ca558412ae1fe2cd40b74d000000000000000000000000000000000955496bdcbca8716245a130fe6eef44d13280b2d56f15bfc772f8ca66a52ca0a742e6bc273c28cfc858a3269f59beab0000000000000000000000000000000000b27aaa0d94633912c96f00ecc021773e5cf5e164e20c7a7222a58b0465e7baec4e67fb56ffe564c7a2904f36c265e61574a30a575138c44881c1c126be214c6b68335d7338875b8a398196f27510d70000000000000000000000000000000012e0572f5c84f6082dd05705a3fae738920ffff840c21e444f0ed002df16394afdc21c249b6f1837389c48719539f4c5000000000000000000000000000000000c26bb3ab52e3bddc219dc223daf472247547544e3a9ccc31123b82000b17ef325148935621edd36ced4e702ade1ee3e000000000000000000000000000000000c13a8f02dc3f209e9abf3d316fa843be9c4dd98ce1ca2edecf757bf2bb498750f6d96c28abd45d9c6cf5b8b6334b63600000000000000000000000000000000157a50d9034024dfc7b0f0db4ea0f45323d76c81bc844844ff9bdd0c13f2059066ec3060210aaba61bc074afd7ccaa286dd51553c4119255b31cb0aaad7391694f7dd29420420b513699747bee819a99000000000000000000000000000000001054edb092a7053eebc542f690e03139f2e25a0098c665741e8711c8a6b9582af47e467f74fff9aeea098b7732be72d400000000000000000000000000000000084f919e219de15e7f9ee122383c772415741e5b86be6ee7d2193a4f6be5c9cc9b2fe5e8beba26cd768bf2ea1b6ebffb0000000000000000000000000000000001822b4e8fae5bddbb36f5c226216471862af238be770d33c4fc1ec2777350db2f42e33a7ba468c317a128e8446ceff300000000000000000000000000000000130f704596ddb28ec6e335d9527707a75c97298407ff3fe17d3cba0cde4c21bfcfd1ae46272018c1db768c036f215182d88f049ab3ee2b01af449abce08ca14ea3b065f06a8665ae3510b4c04f42308200000000000000000000000000000000194dde06f8c54de9ab0ad72ba0de2241fef32fba30fd6f5e83fb7750bc120d51c461d75e495cee0d1e85f0f39aa9d3620000000000000000000000000000000010646496be02c658c82dc68eab86a4f784cf64494bd8441f884e8ff384cbb6ff3a4bf5126bbacaa556aafd652397a8a800000000000000000000000000000000109807bd4b6613acb3eb7d386e84166219e52e841c41185a269cc7cfc5f34e9ef5cd1fea29877749e0cef93a3b44eb1600000000000000000000000000000000020a388c668c9339e7aab15d03108317dea97720dd27a94cd3bb59b372b268d1a7d7d7409780bc4912c3f95acd42a57619d6e227185c538b122858ad5ae594720fa7f743f5805552152a213ebea64aeb00000000000000000000000000000000161506c4a2d57c852fe8c3dce63ec6673f05f99c1e032c8e591239616ef4469c4240482ce5985fdfd4a80f54dfa7024f000000000000000000000000000000000486c5b106393e544852c143c5ac4a882c79870363858b2c910ef4041d8803876cc55ef59cd6a41869bf5247f0db2c0a0000000000000000000000000000000000fe765ebf3c4edd3035c7bedd4aec918426898339d7aa004fd74bbf0e3236deeb7d2bbba56c31fd447816e301100a66000000000000000000000000000000001917c9cf16032e22cdd3f87f098a532a33c9fec560a88f9d4232f96cbe0fe945fbae6bcfdd2095cafe6e0b21071d6ec53f53123f01c4d0d4c18dd72ea87ebb5fcb559df255773fa0165f1432c229deb6", "Expected": "0000000000000000000000000000000015a88bcfa39f444cd66d0d7e15c4040561154c59b832c5ca895f8f8077659487581681cc8f13be136a35b4a573551ad00000000000000000000000000000000009fb6b87eba1edb3d1d23e566977eac68e8f1a28386fdca9d484c7e341c1b210390787418e2f2dff7a228e1cf10962d6000000000000000000000000000000000978de870dcd8d094072897707313b9f1a18d525e60a7cba2b2a395ffcc9d0f97f84e0784df36247d6c98824aaf3ec82000000000000000000000000000000000fbc6832c324d40f104bf82c8cda941212105131c26f630af1d3f7040ef43c6eb4486766b75a81433e46966f79953647", "Name": "matter_g2_multiexp_44", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000007517a941bec38d0e84d21508d8bdd6778a853d9fb4c5e953bcfe3c8fba3732ca0b7f6cb5c363f33d7718b1b1a68f8e800000000000000000000000000000000150c0d975481422ddec2a58a55b3d917b6b7c0510e75442c81ee856e267d7efa09641c6b79fb9e699c6b473cccde7f4d0000000000000000000000000000000009d37bf938ac30fae1cb3ffaa971ff3746ee4090d4bf8b11dff7710b3f2e4cc686813890e03643fd56fc99e847ae5e940000000000000000000000000000000010fabc4048e0fadad73d0481e290c81884f4578cfb66e0a83324739652ccf273b62204f126696a2fc6469ede39e00a9fcdf2bbbad52a3f5c0b3959d46a8c42f6f5250a93c3dcc636712a4a2baed289c900000000000000000000000000000000089b167ce7fa997ca0ad3f8bbbb358824cb41f525bf60352d5df99402af62cc6d768113d2c1ebc7fe8190c5f732fbfff0000000000000000000000000000000013dcd35865e27bf98f1f6508b32c7e9a989d528df0626228087bda0d8b456af3ea2f4be6732edf1bd8cfd0ab9576197a000000000000000000000000000000000333b0612d7068986d21e1cb67a1c7af423e98cb14aace2ce02f84d32a38f97bcdac465f2b22e5fafa6aaf0d40380e4a0000000000000000000000000000000010de7ba4f50b6654fdecc4fc6c41289bec50cff1be18be9d5c9d1f906ae843189bb43f144aad4d2a2cdebbc2697c974918adf5d8fbdf81f8e4bf2f622e2d481fb2dea06a1aaa289ce4f6e783eb9a98dd000000000000000000000000000000000fdddfceb29fd79c31b138ae8e41507f324abd5e3750da14f4f86176126a06380d53dd5f7efd00e7f94bc1370ac9816a000000000000000000000000000000000d8371c602e393a4be250583c299d069270a344953f7f07a5fe27f8617cbd3ebc91f423dc176b272339bb3bd8a9a348200000000000000000000000000000000193a260a417c9c46da0aaf139e3bbfbaa9f248943048396d95716b3be0b8a148a3f0ebcf7d6f9a318b16d2d850ec2f5c000000000000000000000000000000000be4d0f2bf6d746b930034eea8a19d73377617645c29153b6ae6d3ca6fb35a704b6a0bb658282cf93555c998f6fd054a650e995b73b63d068fd54f596cd9669fc3061f0c1da77ae7d0f5bec012f9ba69000000000000000000000000000000000731c0a5d076d6addb15c1e5d3143d41371f4835d77756418bee452d2f03b1e603230c59f87905fb67d5eccce65a45d20000000000000000000000000000000013bd198c023009190c65686468523eccb57c5fe7b159a1c5ba30c662a275fb24d69338ec9c023ee6a10a8ec9dc7968210000000000000000000000000000000018fb369923ee655839c7d996e264133c49f102978f18261faf2f8eef376eb0bdcb5af375ada2bc783e50df16737f78dc0000000000000000000000000000000009ab8e16e1d0b406adbb37e950bc3820ec13c882ec4483528ebac836726ba202bcf796e84abb3c16dbf6d1131b3854cc3350d4f13e25052b1162dad3ace76e5cda71680fdc89460d8fa88c0d157df426000000000000000000000000000000001401029d7cf8e7d2690a27c01b32008e273b5a33842dcf52d84f77dfa4b2a1fb290f56eb4ccddbb420b27e06a7a3a3b4000000000000000000000000000000000c464c6fdba702f2fbf4232b34d615e66dbb5bdf80233f695e9103272111a06a79f8972d1034176859d0e29400f5a9c10000000000000000000000000000000006cc97a29f4e694f0cdbb099278fa94140b40147f4f911de96a762f2bd28233598a892899a6329cc3cb854b56076787a000000000000000000000000000000000625811cad7c740758388f330c4a56ef30429ea4cdb9a00e2cd1b7f310184a2e6ba36ebdca57c87cebd5232f52c34d92283f0256766690c88df6cf7c968b9a96121d26d19672ce9adc84b699476a32db000000000000000000000000000000000d0a16b5d48eb062c71b91d74a0d25eca0d4bd7082de25199f33a9d3d598d137fbee2ac36e8f877c157be7438ebabd74000000000000000000000000000000000bf93533bf677050d9a77a5dbdbf7cf084b5d934d55318256712ec361693738d48ef27536476fdc93dd8e81f13d67a8e000000000000000000000000000000000696fbd8841e60300602aa5528391aa8b196d8c186d6124c842a0124a8d8dcbba637502f330c980b2f5a900be8e04d020000000000000000000000000000000017b0c51e699d2252f35619520af71775f9dd8c57c2ef146adeb72640bec2ca02a59680153e5c9f66bd513bd8559b9d66145cdeae7fd3f7455dfd2ea9a064c135f0a0a36990ea34929e292e4cdfa0f472000000000000000000000000000000000eee94b5148ccbb3642e582cf0a517b72e6ea019676a13b1484982de7f4be0346b7ed22979ba7303f6367294a3eb2716000000000000000000000000000000001502bb3964f6b3e862279e15fb105073e876c4e48c55c42f3737dc9efed82b10fe8e39438ccd39c933f5ac3c6768497e0000000000000000000000000000000016cd8c4b3be55474aef7081cb969b75ef5e7cca9bd0f9627928fe9931c6f869a9a49d0ae2cfb8346116eb3ced25d4a8e0000000000000000000000000000000012456eceaf32cbb6514e6211136475a750889caea18ff4f9d5ed7b378e6d1d265721a646715aee6b9f2098e954a88289d9cdaa979ab08b454dcb961e3cc4bb18f706bed93a72a9c1e105cd69c0b691af0000000000000000000000000000000007b5633f4a7dfe62f11065d44581f5060210f8e572d960eb85ffd0a903d8b989ce10449fc90b7e5646784a9f6df28699000000000000000000000000000000001710f252cb35d88f6bd151ed596f2d6455f050c5e25add394dbaf60fc036016ae07a5a8ed494b95875c02df3c523186a000000000000000000000000000000000bee19779dc6430ebee993f82a054fbd42e5b7265090017e5b2d2f1469bc96a5a188adf471d576a416f6a841081043df00000000000000000000000000000000038f9fb4159e4e6f596a17ddf45a00a9e4aede63b062af5eda045efacd3977e8dfd61c307834c08bb4c284638696e92ef262f9f7a26353193939bfbbdc50ee35614a3c099776f08b21e0c4c97521eb8e00000000000000000000000000000000197687895f22c4a639bcf2f494dd9e5a034610b0297528235f1d806cf032f5a86c5248a83ed6b12f0de27f5c6e6f49420000000000000000000000000000000011ccd5dd6d6ce553ade9b31503a9e6a6119ae329178706f051581e3cf0ee9d6fb527b340bab8c79fad1cd451c7edb4330000000000000000000000000000000011e9f051aacd69c8bfd2f0ecb566e6d38eabc43f276ba7a1b8e8ab093917dd1c672c61d6dac4651026823b9938d3601f000000000000000000000000000000001362c3b2e6fd9b3618df26ed28f96530c1915f0a4ecb647658d1ae4ccf4c000f3bd1797696c9ac5c5000dbe58dba8de44f0d2915e82c9a69f9e9af64a2c5cacf61ead492bf69912a35ad6a316f9914a8000000000000000000000000000000001819d13cf4522a9362bbeb0bbbb0a498c3f34da1c9e3b2c54d08f7c8acd9ee756983fe80405579effb79d673407390ef000000000000000000000000000000000f870e5978f4a6e3b655fb2a05541ac0673e7b10136adaf28be4dfc9022d4cc8a60e17d125dfe53fbe10c644ff37e02a0000000000000000000000000000000010207ef774cddd10db2bca0a051ceb12900c407ee265dea4615553c193d7475b5ba3198b7e0160740e4fd015dca33e1d0000000000000000000000000000000017937be546e06fd2eab4c969a029534c02fb770646d43edeb5e6c8bc0c2b5f35576c375bf860fd1087ce099d4377d24e25ed3f13198b69604c08b414562f67a67aa8dd4a7bd3c066874182d21ed9004d000000000000000000000000000000000db02fcda340fb27a3fd7da468c5cbed9c8dce8471843a8ddadae43dbec9957a0479aa52855d7a6dca99e7922432365c00000000000000000000000000000000163503d24f9af34058cb5afd8e9d5aaf29e141c8521eaac282f138466e834f0daa9ce14e0590b501680d5b47f866aa8c000000000000000000000000000000000fc9175e6d20afd9d194907f2eb311bf8134aeb96da72f6423610612f2ed20a074c113fe8bb632d9ad74b2f6e7e2417d000000000000000000000000000000000b4621f5e4465629648b62b7f2b77afe6470f9706f9bee5b3ccfa66c596842cbae26badc689f7f623360cb7fc1d416b84ae188cc115e9d492be64abefa4bd4c93b61dd42a7d213e1100b8108611a61630000000000000000000000000000000003c77c7efdab9a9e71283b034ef581a31faee417febfa99be3c18e8ab724c140be684ce719bc5a9ac5d3855ddbf3651a0000000000000000000000000000000011889b02b4a1150fc2b7191a95c5ee767f3c9b82a3a53591018242fa8685ee3b3542526dfdc00695a6cf046033b8eb760000000000000000000000000000000016d7463159c4e3cb635f24bfb944bc518369e894218bc49d7b7f0ea99240259f7ee2b4c26c6083dbc4559ffcfbd392bd0000000000000000000000000000000010a85df6294fd6406ca651f15494153e9802f0068bfa149e87fe4b1cc3071ba74940a21dfd55a8a77e7e2a193468a3d2eede725a693277356ce71ffd7814a77fcc30eeb3a2b8863fb91ca03da1cbe37a0000000000000000000000000000000016beec57d3049c382fc039ac96b890412c5e8075afcab599fb877f8639747a587e82241d9a8059a0bb45ad49959777d0000000000000000000000000000000000a70fba1b061dcf587f133035a3aaafcdace3b1e771d71887ae914919e5f52a99d9933307ec15b5f0a1623b9592824500000000000000000000000000000000005064161136c04f9f50e42a5cee5dce3fa0ce1dc0655b3785a852cb9741927f6c9b357ac1010d7212533d1593c83dba70000000000000000000000000000000000d50b992bc0eee37a15cfd32eda2c591fc4c4203ef84232d1a1e7a9888005bc00755d76b9d0345bb01ffa7525f2aa1e9d0618f898594b23ee3754fe390d6bdfa7d47fe749d6819e306935c1eab6b0460000000000000000000000000000000007617e60d8f67344ce6d2fb65cfd5b423a1fd091626da837dc8a51d6ffdeda9712864e8f30e45ae8df917e0e4625e59a00000000000000000000000000000000077c4aad14f870ba24703397ff0b33af2e50b026f3e0f13f3ec1aebc9ea3af98cc65ab56cce4045538ae6e5f410196f10000000000000000000000000000000004a31d0eff18afa87f9a53098cfd5d21e913c7519cb171f83d0b73abbf3e893a3ccd5aebb9f2bbdd3b0eb0326d37fd1b000000000000000000000000000000000393052e6dff65e01e79254af757f12eb1931e0b386f8cf0fa0782269f962ebc5d9bde46f5a4ad3806e88330aca59ff01e1c9420cfa91026286d7f986b538c13e8c97893995485308c69f053927f962200000000000000000000000000000000033aa108d252e9107f29cc7da79585d4525ff2a35d31479a099c7c011a9c4414d7bc5f8498f8a204134b2d14c5fcde5100000000000000000000000000000000121214465992bdefb970d420face6db75d531e67314a021d2877643ddf738fbe57625d286bde7f40efc1d329a2e85b6e0000000000000000000000000000000017e14f6cdd916b1fc949be8ba3ef9ae6cc16d64da4dd498b5458ea0c14eb7aab8f970f030aab26397110331da11a232d000000000000000000000000000000000c56ccda2a5cca61025253407e72967c767f0e7f2aa0b97d4e4a09420dcb882ff35039ae504a9c62b3f9e7bb0c2e7bbbe5095ed9a9181aee392888e3194ebf9c4a6d87b503f4668bb6cc0d290880a44f0000000000000000000000000000000010fb3396b0674b9285cc5d5a4e7a41ac002f2b43332c20a56f428d1e19e1d1bb6f886d3bf03f7b0fc509e52d75965e15000000000000000000000000000000001196b7c253c50da10815bdfd7930a69608187fc3ac5fbcfeb35b95754d3017a094afcdaea867c2f08346717dfce7bce8000000000000000000000000000000001021f178c53b7d7d2041a6419203d12ee162f27999dd8f79baa15c37a7401e7a6df6aa4192a310cc1a23bdb0b427d63c000000000000000000000000000000000953c75910165f11112583476574f3987495d33e5b1a5c650a2b30692592a442d9de36da49255b0c01a7bacaecc9b81adcece8ee33d3bf3188574e94a889794077035ee92473b7266d92a3c018771b4c", "Expected": "0000000000000000000000000000000014da1d424c936453600a4acbd3666c6188493d4da8b34d6bc508aab07e59e3680a9e3488e69d42a724c9486d70ed4fd000000000000000000000000000000000048c637348fb9a4c631a82ded1fa08d693cfa2cdd6cdffb8bffee63d1bb2ee8676512a1a8d375e7ab942b6d6bdda45c80000000000000000000000000000000000443264e7dfca91f17251c33cf72c56b045902b4db2eb10d1fd856f79b4130afa6f29f3283af7d3b8b2a9d8dd63718a000000000000000000000000000000000fb386f875190ac7a49d4742edb387f72c1ae0366ca5c71d5b7e385c11442941ce0fb9fe2014fc624fe93ab86ebc7aff", "Name": "matter_g2_multiexp_45", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000016a539a21320574fc25ffbc0ff10c821d6ad20674413eaeda6f4a31f9a028e21cbb3b224c225a2e3bc3dc221cec084cf00000000000000000000000000000000104e44989e2fba9ddce8e309f5d3fa3129f679d6456ed11137149b50adf8b22c1a148d47154450853e6797aba2b006850000000000000000000000000000000008b33b8cfc992efdf7d733803a6d08a4102e27fc4960ebe6ebdb7949c4ff5af76e55002d93a4f7204eff5f2dc4e37ef10000000000000000000000000000000017c35411c571c302c746a9b79cae892e988d50b4660564660de960ee09b3937b6f5b61fe37d09f1c02528f554210744aaddc845ad867f1e2664ef0e78bced8ff6904c5836e7c63ea3a9c858fd7b710b60000000000000000000000000000000009cd32594094d4744f59690cf8d7fd260b5ffb2a22945d938c035151861507ecaac9ea553e7b44fc4b3beb03b33783540000000000000000000000000000000006f4de33731b9b13b9cb395798769e54a0679d272c2d5175455e10c790debabae4ee02b6df08975efe806da9c4a208b20000000000000000000000000000000011859798a8383b7f994a1535bc0a96a114b90644d19921f0eec774ed58dbaa899dd3736cd1f4a4ff9bfacbc7370091d7000000000000000000000000000000000376c25b0f70427d4974c4fd1539d40996b6847fbb67822fa01cfd541cd3a3f8a9f3fe9f7ddcc3ce920a6ecb27dafca0c78cfc6a30cea34d3d3505f4f897631f67ba77913734f6c2895d871fd6d5581c0000000000000000000000000000000003a178f91a135d59dbd65eacebab293a3817d30e734c247f56a08812aa540a5c80e3f9908d86ad787bab27fbddd21517000000000000000000000000000000000672b3544dd2b91a626f37dbb389aff073777164e3e20dc572b18a2e5223bd323094e41bdbe2dec9bada227efb37dd22000000000000000000000000000000000f40f2d279c66f22bf0fedd129e02c96d8906f9f1ec19f5a5c1cbd5beb10942a066dd391b69920a0a697138f627a1b180000000000000000000000000000000016ef3caad858d323b752e5c437ee2043c8f691ca0f1862e80857f7cc478a689df97bde5b1d1350892c1adb03c5d2373ba1e40df9e1f7c84633cb3dc2223296887de7281ea66c5e1f2d5816334f7b280a000000000000000000000000000000001276e133fc5e708a3265646ef0a0122048ef95d7fb46f78b8dca57dabae0164ca986bdc74e581604ff31165f9f28dca50000000000000000000000000000000008a77611be0502d2ea7fbcf73774fbaec68eba36038e2f34f79caf07f2e4b7444efc49a4e85f88af585fd28a041f26c800000000000000000000000000000000181ab176e391190b1cae2e9b4105ca14cc82d15890b0ec127d8cdb46f30b704a089ac69e76f5b50575ed66176950e1120000000000000000000000000000000004031ce77fe9ee319b8db8f220ef4480c81568b3f6e4043c8710b559d25ad69dd38dda48b2e11d5aead18db0d1cc09b98810b9ce0020904dc1903338089c30e616ed0be03741572ce46946883874f4ea000000000000000000000000000000000f26e6d71e206c88dc81b8b8a5c05ee84a9f185e7b7f155253aa39104b5de5be7bb6cb6662df4f8e63b37fd1682721f20000000000000000000000000000000010058d13637c8da2e91c8cda7dc2cf1734a2f14b12b798e5c563ef9ef3624255a6e1c7550c37b547c35c55dc736a17ce0000000000000000000000000000000019ed470bd514f8bda8fdcd9c64f7626efdde0102907bd31551b1d1972aa14e1d361e1d58b17948909a669fa4d99cf3200000000000000000000000000000000013277afe1891807e269c22c9aa1598c12081809d888e0eb2513ca3f81308700893f74f176858ceed9c7955dcc0d8fc6893e7702da2ff9f3f14586a9ae80c8713743d61b915a7c379c1faa1b151406a9a00000000000000000000000000000000083664daa965c4173d6028e047794703a16e52ae459d3db0534d13c72d749d603edd668b9ce500677715e45216367c63000000000000000000000000000000000f4e87a65f4720cbfde7868eaadb34ec1916925ffd84e5407defbda0c39e1c7afcbc90855b275d528e7b63fd3707bd4a0000000000000000000000000000000004c9f689abe0d2dd3d927bad4b39ab44f6704014ef9a1dcd1966777129e1c72515b43c1b92ee60e9611245454683588b000000000000000000000000000000000ecc57b08b45037e62498135643cf077f01d216b5106551daab391446ce7bb37d40f41378c830081bb6a326f0105c2c4eca54e365faa35d2c9be259b53a1157b180a373813382f47c9154af18a2d83270000000000000000000000000000000012b84341bbad1eaf7fc8ebe56f67598821017365b6f3b4cc1f2355f868e8d55f9c0bed2943ada202a7d85cc884d8e6a20000000000000000000000000000000017693721988f73d77f7a41db108e428b0ba781ea88eab463693ec352cc13d394101b9a2792e0f30c77bebaa395a4776700000000000000000000000000000000093245e2919523cd57a0abd2e8a9c5cbe774bee957f26d3cb502b9c8c06483b850b031461dc2cb033d399651724f4fe4000000000000000000000000000000001530f7dbf6a0fbdc8b4f7a4d298b7824c15035428cb8df834907e25c64b8985186bb13f397b7b99ea7014ae65c428b12abe2079ecb3618de3accdf291d9479bec32bca1f9fe87b00b64a12d735f5b9a5000000000000000000000000000000000f323f01f2a63bc6eb1b565594ded14043c4ea5d1f0fbf20f39299052617c334e6126afd4273738aeb153c3561348b8a000000000000000000000000000000001525d1e1fa65f1b674feef74f6c81c82c3eeb709e597aedabbfc2b3262271b31d93818613ecdeb49c5d3a6a64f17a5d90000000000000000000000000000000010458c15bf46947a237dd1c61882b1561121f64890681bae5db6fbd24ef6c34b7fcb826eeee1fa328d9ef4d859faf238000000000000000000000000000000000e1f29275fe1805d02e069082d5e9a7acf69be17013e6c4c351277408d49383fe06f00137e777ba4aa49c29c25c6c0ddc541a44756ebda14aea95f1a1d05e7366dc0285305116b907fc89e777ce45f79000000000000000000000000000000000efb7373e11694b966d0182a9b01d1e52ec1e89cb18275921294e2d36333460b1e49fd420f1ab781b000d1491ccb0b11000000000000000000000000000000000cafcdc2c58fb3fad713ce1a38deadba8636c384243f9971e3930b961efaf303cac4eef1e8e4662636ff91eff1bf52a80000000000000000000000000000000007ea7441e1b2b0f1e42bd511c060b646c2d00bb3e6507beb5d17ab93ff68515b02f82c2dd43ce035ff660ddb0c104a77000000000000000000000000000000000bd04b88caf9dbd0ef5f89d12e72aa47d64212332b0ed871b7eb96b16295cf4810f6f20cc85fd4d1ce72119f80697c1b37d521d31de52681f1d9bbf64a12f9bc8fe0ac61aaef14d7e8d048ff09e6578b000000000000000000000000000000000c3d2d978e23a690e8422fd54f36fbee1f642611b6c3b2c2413844066159bdcd3703d1a392b030446af04b654f8f73b7000000000000000000000000000000000ae652fcdbd8e467ee9b447e61fcb811f8b6aa48840476c92daec3285785a06a81c1705fc2896c0843ab48eb92555b9300000000000000000000000000000000007088e6441cb85aeffcb4a9a0c81ebfc54a61f35c542be3870c2bb94d7081353322d4745747b0dfc3e5db07f9e48c560000000000000000000000000000000006c11f3e0941ea3bde0dd3a562dbbdad433f0b1e99ba34879e86f7951ddfb29b9e04ca62d54d7552a74e8cf1c3da3e704904a876d4ac1341e88fc4808508c89c19dd74aa8fb1dd7673cbc2d28e7d920e000000000000000000000000000000000c665f4417d0163820ac96c83cc2f09b1b3c000023d827e2690aad7357ff59e278832b992703f5f0016051ce0a4510cb0000000000000000000000000000000012f4b6688300b253fe868b3790f6d2f4fc16d81a49ff7a2edf821de16dc992d79482d66e443e0abb5da43df69f8d648d0000000000000000000000000000000009e033750a118d998b136cd671d0e760e3a617f1d6a994db8f6dfc391619f408720cc57fe550785306184b0c824705620000000000000000000000000000000018cbacd471e528535e22f714a841f110fb0484826e30f97842d65072b2790dadf0bd7b28df96bec531fbed1f3f93486b68911b04d8155f90c7c5c0cb519ee6ff14c0ae27ece0374f30fa148235e8cb49000000000000000000000000000000000c42b6fd52cc52034b04078a6565af2b43948695851393596e05f37f297dfaaea931a33f5b4c25980c093f8a742c0020000000000000000000000000000000000fdc7aa20e63743dd6ab32c82d2d6992b29779ec06eebd452c17d844159e90a7f3221f3e0e6b5805dc0f42dc3836d90f0000000000000000000000000000000003a2342a1bd528d701c2a6c72708a16df632f4e4b6cdb3ccc224b58b57af30b44556cc968ba3c0396a5e3f11568a73710000000000000000000000000000000019ccf76462668905c5687b7612a0bdfd4aac70f291d8b772e84fd5d4bcb591556317426471242fb5f44fd695c7d49279481e894ecd52a252cc76547513e2cf0a5cc6b20c3dc9c64c7f34f29a488258ef000000000000000000000000000000000c8fd4a171c5fbf584f567a1c10b20628e7e0d5d796eac4a9dd2376f8d488da25b9219c7c70709999b5553f8bba915ae0000000000000000000000000000000005d791c907984f2aaebf903a0ace52147745295f0c5e85964999a8fc74b64c8871dce358f26ed1b4af6c6f7f18e8f4c500000000000000000000000000000000110a453bbba72ac171876e0f6b4acd5b178816301e02586a143c2bcbfffcdbf593655408b9aaa4141b2a210599f452ed000000000000000000000000000000001025d5065f9801fcc1c1ebebdf67923b967ce985b5ca27ab5db8af7057fda23561a46b84fac5e793dd9af692c4d56cde72780ab3c48c8a102469799ba2f70d2fd9d324cf558a8c8b49e2ecdb71ae1c9b00000000000000000000000000000000023e5ea1909032676cdb79111a33da7ed788d2affbf4029b932eed843268f355dc92905db283d6617fbb530da3d704dd000000000000000000000000000000000b46f07de520aa17d597586cb0a6894a356757941ff9bdc2976f620e1bf1eec1dd9801d6baa2d7efbb3cc7073412ce8e0000000000000000000000000000000010022940611f418de9f9210b1be919d7506aca468fe5853675fe159d3e58685bcff6cbc2c1cb9e7d45a7bf305fca0eaf000000000000000000000000000000001888b5b0dd1648d9a27345f570a1278238957de1bd30c195d554750ea4b119e98b3989b912c4fad531de416c1533467f84ae1de8aaf498bd2d91bd828bc64e56482b225322b86529da703f47289c65670000000000000000000000000000000011dcc334a5037719256e514b2c3b0f36396d8cedcd77f33545842c686fa0f35558c397562a7e245f8cc412c776a2b3930000000000000000000000000000000006efd32c6afc56a07c813fe19e71f0248666c87e1df7e79b7afbd70178929e5660e85cea35d1c6f42b4c627a94ae0d150000000000000000000000000000000005a5fc2010798c793c1b407a577da0bf0e04b0478f19b7d0cfeff8e4e4fe2d581461831db165cfd17146c49a732c41460000000000000000000000000000000011dfe3b62eb87b039113152af74ae74137cba1762d4ae62d3cb0746272d1c42d3cb4a8fccd845a519fd0650a23a897a13256548db55ee9de70ebf6fa347d81bc50494b937ab1c3079977234a34cbfcfd00000000000000000000000000000000110e73e44734b7ab63f021727b75e735702f1acfa6669e0dc27111794ebee371734764bb165132af3a7e02f3605456480000000000000000000000000000000005fbcac7c7334cd0e6468feedebe077b80390833eaa4c28af80d29e75d692a10cf13058526fa5e5ab0fb635335ac8f220000000000000000000000000000000013f537ecc28685aba2cd60d0e3e787bc8104a3373177cb93107b63d39919c583ad3ad7a42e322249d7605ef035fe1af40000000000000000000000000000000014791f94aff42bfca13ab328a3e47b06f7da52e13436ad477cf55e53b54108d3aa531f0a5d73ae5ed7108d5cca1ecf7a575ae146524544307ee51e58a654d7324983a87e1b37d46cea1a4ec34114b44b", "Expected": "000000000000000000000000000000000bab02defb32b7938372d656feaebfb5431de1484361542c02519d20c6a500f0b0b112c331fe6f4eac3ec7f6ae4167e50000000000000000000000000000000000796b38c67df1361115bbf3a4afad2651664ef55b1ed02d3172f024f90a003fc3631753d7142aafffc64c6f6f57bf7800000000000000000000000000000000080d91637a93a9025e8691a400254af37cfde67eff7d3037d428596a808a01d9bda8025b7246fb00785cd1068b2752d400000000000000000000000000000000182a97624249f0c6d24672f04e2c93eff63fbe76cc11ace0f7193facd0655cc1e1ccb2d89d9547bc352a395efeb95afb", "Name": "matter_g2_multiexp_46", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000115b14c4eb9cc78eafedd2072be4555a3db9e61b5fe0139bf3e40a92cc37b4936c68576fee5692a80e4a9aef05a9b7a80000000000000000000000000000000019c828ea555a3c8d28cf0981e98609361b5bafa8b62e860d121c0f6d0f0dcef544784e8a5fa6a9f1d1a68b30e8e8a6f8000000000000000000000000000000000a2ef5146d2658609fd4eb98fcb5d42f6c6aac4fe53597128bbba3ba3539042ee5824f381c41dc76e2c6e4dbe0665657000000000000000000000000000000001807a12ae5f289ecde8ca0a913647d44209b13fae9dd6aa8fb4365a3beeb81652ec17cf92f6784c9ca5a077824ff6dc31129275f3ab3125db33d43b36c7de0ad60a6e9cb4457aa03275caea9635f0b0700000000000000000000000000000000186bfd109ea2369818ae2f466953eddfa763960caeee9d6f1ecbf6a3f854163342c26b56d3844bfedd8f227070f75546000000000000000000000000000000001877077daa2ea074b2868e86faf14efc6ed35a64161a77aec54624d9cb916c45de81b40acc3797c6e3338fcd7a42bb0d00000000000000000000000000000000054be1650d9bb6cae6a1ed08879668e4aa4cd139c8b07ce21d40fb1cf37f11de730ff13814a02d2d6d6df5eec4afe8470000000000000000000000000000000001612b5b7c613cb66d4134aa867d985682f6a544147e7865732887d4fbb191a9f5bdc27bfbefd397f38cb101a2d68b192dbcfd8680258eee451db60f3f42f02f388f87440d00badb0a725964042515c90000000000000000000000000000000015e2b23aa42f1e6a07b0a31dd4acc27e35ce1fb3333c3f330f2d88f112375cf24e6dd5afc4d245531e4e84f1f82230ea00000000000000000000000000000000193649f3b7efb346e0c1f7bc05b0910311270cd44b5803fa16e06655d6239f609363344bb7c16c2105e20709fb5ff0400000000000000000000000000000000002a6ee30841f471dd2ef13888ba03c9cb93c85cfd0f1d0a3927205e3f57fe291bba7eccbd2352f25cc4047097fbb63860000000000000000000000000000000005482d4a47d6e381f755c4756a761f0310d0d981523afcf288e47a1a643d6be62ac6410521e0f25828f469af6150f41e5a6f194abeb6b7c1c561aa820bba658f0277870e2a32f972f9d18ca361929b01000000000000000000000000000000000178ca460993d503e496633fe5230d895bfcdd0696d817a23ae94e529bb145a0861e4448d3bd48c55907be762192a8c4000000000000000000000000000000000015d2db77105a8ed6eadc05d3d1f26a54b3d1b812a58ab49a889f5b7fcf5ec08c2eea6ad09484fda29cc007037a1f6c000000000000000000000000000000000fd5628d61cd0835fe49fcbd2f17058f23d0ffaca4474923a2c0706d9333d9881125efa2fda56234a82158da3eddb5b70000000000000000000000000000000010ce4a0bcada5f92cc8898dbf5c108c0897322eb6a467662be569d9ed0f6e2c808e214b83969ebb86c84d38f67d20754579450b7aa155a3ab61e47e337ddbcd17b197de2dbb76008cfaa09d3fc806be4000000000000000000000000000000000fc4ed0ca43d5cb172deef02704579187a480cc977737070b8ed2dce48d3f3141619f37e985c220a2840ac01dc5667f900000000000000000000000000000000047a15e96760affa4e537a45aefaaab1e0e18052f63514a9f6544136c87b7cb4a5c8dfc0d9544518adc7932ce9cff5f1000000000000000000000000000000000c9be55c06f81e87de58a5c1df8d16174cf4115f81091937d98dad6c4780a9b8dae1081f8961fadc4f994ef62927664700000000000000000000000000000000165f9b1a8f23831a91be8077b18563c7648e54caf30895983cc26580241ca7c86b9b30408a9b27776286ed9f07bd8ecd4be94f96ec4a3d4e028644c63b2577a9ef849b403acc55e42432c3063a918d160000000000000000000000000000000006edc0d62ec31b14e87b2ccff3a21a7c8d38c3ba0ec48bbb8df27fb1acf58e1a87c4458dc2b770172460adfb9a9bd50b000000000000000000000000000000000ae80063df8d41d45fc43f3aa0881364ab5fcb9ac526ee22d3870f2edb0aa379e9d81780b0ab08a4cf308d819338deee000000000000000000000000000000000e0898453feebb51d9a1cd2bda36a307ff2eebf44dc8f4c694831218c42b51f723ffe521b356ad4e5f0dbbca9af9ab47000000000000000000000000000000000fd186dbc046dd02217cec3c7894972f71e5f00e00a40fb1521659a33e079b7a1f60b026d9055a50ae18aae5757ab8490983e6618e9e4208cfbaf647592e42b2d30de9e74e4943fb2bb49109a66302aa0000000000000000000000000000000012134b433877e0a7858e6c3b95b2a1dcfb0548b290b68c209642dadf550db1c636598ac43d101b13c2d8d5ed9602a73800000000000000000000000000000000102b5de123c449a078f6f06935c9537efc791ed8e5475ffc2d9e1d098c814abe56d4b7fc6501c315edf7e64a431c5183000000000000000000000000000000000bce703ba78f45a1c59c69429d3dda18243ba2413c5eab46d469f504da975c434eda451c85357738d6c7054755d5cec1000000000000000000000000000000000387724937bfd817a65c0e0411678cdc78df26ebd4a814d92b023710558701163349b56b80e6bb68a4401f2662a0525506615e300a924ab962e0b7fd0b044cae9516d96de603ee80695718c27d7fba0c0000000000000000000000000000000005abed9305bb79a0ef1cc70e7fc2eae35a8580cd3d1ffad73d3bdae541ad546b8f74b4ca76f8f374e31dbdaf1bd14be9000000000000000000000000000000000199b29da8d161ab3061a18debc8b7400415caf029ced47131e27d81a0f7f79b6ae5e570f34a4c74fb85fea1411bd6ea000000000000000000000000000000000b8a7c42f5289d20b1a55a42d53d49510d3871b6efbe560bb4d87029b85b930f787c3a42e225006ad62c68d5f96c2f8a000000000000000000000000000000000e74aad2b29a210cc316181863e71a1dce8866a088a072ad5972af57b813a2e968a5b16b294273acd6e81e9a5be2961dd77d3e9e64e00b9356cceb62209ad48fc89e69e2214aad2edeba1812272736390000000000000000000000000000000001587e32753adc85c98cf1322115772b0e282ef4e6a75944fc86091e81aad076508e3d727f4df0e30924fff6b67c312e000000000000000000000000000000000ae96d3a1b79985e56f80df8ac4d9792229ca580b156dbbe71a9db470447fa4dfa19fc8a8a2e2f0fae28a24b7d6153d100000000000000000000000000000000114101ad0d29ddfd2fc436d2a270711c444c8c257785f4b4c549e9c795f6dd9834d3744995d2188c0c968752a7f68892000000000000000000000000000000000d30d9cc1e2273af745dd47a596a2202ca4fb655f9f9beeb0a87631e2461f29206163fd921761fde69654cb02e23505c41f75c89ec973f65b11786e186f4d42ee2e85c40f29745d9f428af08a39d5681000000000000000000000000000000001611787ba658b64467b4a28e55ea24a3b230836af6c2a7072231045ee4ee38e02302a62688d6f988f76cb5e50eba40080000000000000000000000000000000008badcd59d6d30f26ca674753ae9257a853dbcf49a5641999634a9a35a97096b6096b7b058360bec2f9476a51eb0d781000000000000000000000000000000000d30154440d8bb5fa6538953a96ba404658817be8047fa7a3a86493f02399543220758e649948b804f2daf84fb86f7580000000000000000000000000000000014fbdd62f761fa675e4cbcb61083a910bcfbd1f8e37f1fb1915f60929b047c970b87be0730ddc20f9716ed8c9bea7f19c70cfb76a04d1a9e0d937292e5553ef371e20d5d3dd33611edc0da178e2e4a1600000000000000000000000000000000143d1f811644e3a51c735b708cb2f8a2a90311f9971c90b9ec8e45bdd6488638b6851dbc882205263887b4dd5dfb4e120000000000000000000000000000000015692a6b06e3bd3100e149c6be3cbf1566fb24531eb29036fc48f85d5da83316a38af4e714a17552024c1ca4a5e39d9d00000000000000000000000000000000172b9c88ed9a1fc2d5a7f147d034fa243d420b129343ff92b79bc4d836e380e5a7e388069e9af9026485e9d3f41a7aa300000000000000000000000000000000012e8453dc64f72653c4e9b3f6f43fdd01b896c642d21604f992dc5591f2cadf71de4099e1075a4ca4b7539f84dd5a908db878b7f5fe817599add432ecf262f19d80ac834bb0a0f983728f6e2c189c880000000000000000000000000000000003e9b6d23809781f50c0033e53d245dfebbba9e0c4d9f676ae61b80fb6e774509f62fad854fd9ea841d9905d48d943a30000000000000000000000000000000016a1ba62bc684bb1848b0ccba59597b19973b56fd9b1d9d06352de44aa79c6bf65409dafb54f859d4a7c32e188bbe19d000000000000000000000000000000000e782741a4b16c5838a8f6e542135221ab3c6ad180c85c08742992ddf0239388e273735eae76c656e61614da386ce2640000000000000000000000000000000001cf6752e88990c221af94e18744790c30aa6a158b10a1f6a56c2ee3c3f0fdb2fa7213f16764ac9e9f4f65e99e715ca170751fe88ad289c91dfcd3c3c61ce1e33f4146f03fc0dc77cde9b32b51c75fc0000000000000000000000000000000000810b0175d781256053c3c9188cee4f55620a6624bfbd2f4d2e70ee68a105bc7b60bafdb76794a048e9f25da976390d4000000000000000000000000000000000716095f8fd72d9350ca62ca3ec34d2228cb563d4e89b19b152787d42fbb750435aa6233d0a97196a9324319837be14f00000000000000000000000000000000178e939d87c37d4a2f49e1e5596945879f2f0f64419e3dfe2afa06bd58098e1ba57a9b60c32cd6527481ab3b325ca827000000000000000000000000000000000aed480a1da482e40ae610a9522f0a18399b0130202f9ca79e3573987f5f7ae30724feddb52fdd05817a96f7937aaf7984bf139cc0b6ac94697b7dc278063a74e478d47528da3f84f55fb0adfd851d09000000000000000000000000000000000133adb236d9eec3544fc91852278abe37a1da0f32a84477c0d93927d64af613b7452a5f64ddec7447779f42873cb157000000000000000000000000000000000f6bd940b51b7ec5a0d92ac77a55c296215e970e9a499793864dd69c3a8d583403e95c08b719b5d8eb0c37a8476d3b960000000000000000000000000000000007d4444062ae06e65b45c6105af53c487f6b275ecdb36f87ec7b71d5861a1bdd6d735e9a1fc5dfb476ab8c13a98b570a000000000000000000000000000000000e043cdc87c67157b5ea3e5ab1b243aef479b23861f8cd823bced140ee03dd1f8bc6cebb4bde4683ac3340823f4d55b8d19d9496e7ebca44354d5c6e1f6b8211eb06ca23a6444c307f92f5bc6dcc2dbe0000000000000000000000000000000018c35112c27caa6bfe9cf8ae55f51755ed349ee7e7141c99069dea07c21a6d8634778a91f4dc3d17da04966a9eaccab5000000000000000000000000000000001800c8a9b146dba27050ce63e78895bee2016255c59acc34fd5e6cb926c16a8fcd2e8a579fa02559b3c571cb08011bea0000000000000000000000000000000014afab23fd4ea54b1ef576a12a2a62d42b493612ef466483ee8c4e62908486c038598e72dbd9256166960db73259def8000000000000000000000000000000000899a99ae8b10da4bbffb6590d79aa33bb2adb2444a11627f05622c732b70f90cbd2779362349aede5b591e84b53a8a06940e3509e1fb090fa787fdf633a74380cd5de722678826224641e46a6e920df000000000000000000000000000000000567d6458d1a3e012c63adc8b9dcf32254c98c0b7021ec6a8d579dad47d501715d2e42a0837def225515d663e663c4f000000000000000000000000000000000178daae121366ce025c1dc2d3e72068fd40ba9d54b2b3724f7a2071a59d4f17d4766a82364540bc31a46398c66d0e7da00000000000000000000000000000000147b2851311913ea53662082acfba785d21915cf00cd154b1b495246e109ac37c3fb6c63aabc4fe71a0d37c81a40148d0000000000000000000000000000000000122b7b1a81888aee37fdd6c23d31c38e79f28945cd1798cee3f4d674e923fc68311eda8ce45a561abf9c5f0bfeb4297b27d21c1d6e06d9fba7b61fb87d364a7a6252c70b8ace2d3679ed87ce0fcf7e", "Expected": "000000000000000000000000000000000f5b941cda417cce69a30c1ba4a82cca71cb4b953d06d8e545c1b792ae22738dc006627da02b4344bb8be93a5a0dcf07000000000000000000000000000000000eebf4ac30fe0ffb905f81577466889666f801d4d6efe0fb8a663fbf1cbe76b2167243edfc6cde3f49d97d3040a9507400000000000000000000000000000000007ae6a99b86dc7ea95801776589472547ffc7a623009a592403a9710ca365510d85bbf20fa4519ca0e0ca208bf86a670000000000000000000000000000000004b5abf778c72bcc5b887855c582c042a4cfff489b0548785e4c1b735b19159be8a3f4cecf34c769a34cdefa722ba783", "Name": "matter_g2_multiexp_47", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017b47384e6302b140118d0a9247aeae2091607ebb413ffa232223bb42d16753b2ae48e5ad0265e33616b25f0c4234be600000000000000000000000000000000167be566292b835a42ac7c099d80e8a0b5d4ff91d842d4ff6026876aa1570ef9641e9c0cbd44d8578f6a758717bad6f10000000000000000000000000000000014f692d195979abd9c55ac132d0def925d4e158fe946fa7b0a010c475d60171a0951d4b68ae3c463bf1136600a1ddaed000000000000000000000000000000000ddba1f4236c5200aa52f8cb7e15fac1f20cc66dc65ed180745a3eb8308f2c851ed6c1e27e1507d3f902ce672d6f8d24facfcdf87c6ca0506b070abff83ce7812181c31729cc534497aa8dabe243351300000000000000000000000000000000023d08e255b244cffe911e43b9b48408f9fb3562edc2c27f405bb657731c885a58392ebbde9fc80cccee2404cc8547ec00000000000000000000000000000000088ef289adaf206afd2b72c93049fca2cf9292bf6471133c64ac4f42015b97bb9a23f6c34653e0218fd0abdefa56bcc60000000000000000000000000000000015cb78c1440f74b17125c547fe7a37611f01b83b91a351664c696e0f647bd2db3ffead880b96a327780026d74c9abca30000000000000000000000000000000004d1a63607b9a5c9ec31168d85fbbee77cea0ae93e98c8c1dde14d0baa72f91042b2b7ca489958344916ce79bcf286456546fa692d9cd61895526282193c90148099e2afa54f7903a5431f932bd5fa06000000000000000000000000000000000ea6cb7ff6a7f4ec38ba11e9945eb406dbb8517585fef6cdd64edc970efba244b071fa162f7c8e184acbf71c5d1e12160000000000000000000000000000000001ab80c0dced33cac8a6a085efce71dcd7021f6255684bb631cf5c1716021bece57b900b819e6eb6f5b755b74c677b6c0000000000000000000000000000000005465fdd51352cbcd8b804cd509526c3b6232976b8278cec3b7db7da14b77f78898c6240c30943d1418462cb7a5abf8f0000000000000000000000000000000006b6caa6a0d5f2d671b10217c0ce5b3962b0c3edb4f2918497c316ebbdbe1a15c803d7fc3413907346f0e7d03920005aa9c1460c1cbb2a552e3452d5c5535868ee9c2952ec3fdb52dd826c16ae3d00bc00000000000000000000000000000000170db23154805a04013052a388e14b5da00e65b35b8ce2dd967213a74735dcbfd28782cef1ffe9d384be3ecadd101e9300000000000000000000000000000000082dea309092976408a379f1dbed9d8cf91f768e2921e49ece458859c80a1d9efd4d5e588470bd669c777d16f9d2e7de000000000000000000000000000000000adba8ef34e197689228e6c4e13be75b3d4732872c99b865ce7733b7a42034d6d4d7520ef7ab712f60f1ff87bc4d9d8d0000000000000000000000000000000005df0788ec39430fcd0625f8e030d917d8e7c251ee6e3b0e79fc6fa5f6fac2ad736c818bd833e58ec61cfdff52c9c6ee2c36204b6a005a64819b06804eb94c311d78977b557e7acfa82e147b4d6ec62f0000000000000000000000000000000000922d8b5db6e415aa3acbd0d6065db1b492c92313260019ef1bda0fa091c4bf091de95846af1edb34516b1abf7d278e0000000000000000000000000000000019af4ecc4f278315ed90d67cf4d22ed6fc9af5c0d0ca654f6a74a3c4bc98588bf5347b4536f36ca8b4750c18464f9b7b00000000000000000000000000000000021eaceb11638bda8b4293991983f11cc60c1daa2287f4b4a6066374bac82d117ac3ea4ec73afc4372d254bfc433b8c3000000000000000000000000000000001037fe26a10305cc5dc11a65edc705be5a0082656cad53e63038ee57a79e16075df54331233229a129483c34d6dd92ec9160c5a553479a10996704c3eda8e57be88eaaf5d1efc8371e7e10d7d106e4810000000000000000000000000000000011e63dc251a5a1e2ec83741682d90588b6b185365b33dba45458b1f56324a4900b04d61af155a0edb0bdc2971b7aaa210000000000000000000000000000000002dc1bd5448a2ebb9a02509af8777616ba9657bd3be65519233f0187df77c49fc931bbd3ec0ad5856b2ec0dfde476a870000000000000000000000000000000019f0cf8baf100451313711bbb0a0fa318c14224933897e74fb727b585cc8620b7d741c9ca2f0d3cbe14a8749aa48ef3e0000000000000000000000000000000018448fa9e05f87d4991ae1c248413edc9a8c3ee789c9c005e691bfc9003191ff469e26db9e42e5758fac79309a62942c5e5a50e5dbabb7a56897935683f80a5b16dbef3c23461e241fbdfceea38e3ee200000000000000000000000000000000109b71c19cd36ef3078bbae25ce6d0e8f7b58e129407fe68ab09aa747bfb3e90c04ab804fa6b7a223c172146fdb14683000000000000000000000000000000000d297750ba112da88beb84b8bbf74ed134b59fc9496da3045aa6dbcd97c68425fd68b75508de113733602a5565f4c8a600000000000000000000000000000000149b8ba6e05b66d07b353f46ace4e583bb61ed18fdbcea0e941b8d9805d3168040186d1c961add494f98e4e7fe68824d0000000000000000000000000000000013a6877bd46557d23b9aaf371ee5a101227d7938c64503b04b39cc6cb4e8ddedcf5cb6865439c9f8b1bfebb807ce52e24a95b293daa2761cc456b9667517f499c4d9eb9eb1d82237e7a7819b5d44f7a200000000000000000000000000000000073f440c2704fae6c86aca3cee34591ec03c362c2c5153a5e82c7bcdece2af0c58a3484b448c8bf4da851800ead959df00000000000000000000000000000000075a2c26372b482a2420bd3c9952fdbf9e5fea906dc8a4deb9691f8745372805bacd68a4838a3fefc381a2ce946ed1780000000000000000000000000000000017575b016435782cd09901afd2ea6773b11f5a983bdd19d14668d75362f95d055b76e5bf6966b1bd7bfdfbe9a939e4b60000000000000000000000000000000001569d74258298fac89d0d91a9945780f4c08d7af7b942d06255ae590db6e8509c908c16bd2c2bb634279debb72f489b5e22ef32d111261dfcb5a2e8d23c8d920f013bd9602bbef45e6d4e0909abdef20000000000000000000000000000000017180e36b925e2ce23c46813d96b919ca181481efb5d1666c4a4e9c8031abdd9521eb8228c4e3f16de0b33da4c73588e00000000000000000000000000000000138965bff7c573546d80ef7efb3d45e87ed20f59adb0cd7ae148d09a97da7feaf1b0ef2455ca19381762768a7d82f486000000000000000000000000000000000360bd29c3f07c5b560e2ac226112a628839da9db18b052991eb2d9c54541c1b5ade9b3c2d7f446ad50050531228120f0000000000000000000000000000000007105978bcf13bbe2bf5c8f7d165998c3ad99b6a2794c90f5b61fb7bf2472d307df8fc9f4afe7ae1e40e7f0eee8ef9466e687c0ac8fab70de2416642afa1553bb38183d2914050602874491057f78786000000000000000000000000000000000f4434c5180ad10cd45dca62b8da790cdb912c255c0f33950f7039e3885b38fa9e9297c7b0a875380545839d8c4d4ada000000000000000000000000000000000d0dd1429e512884ac209f788b5832d31649a78a8966d3348a93f841be23c8e4e42d6ff0d6c27e8f43daf495c9582935000000000000000000000000000000001307377f55dfed30ac1a406671af1895218a01d063b025d25bdbc53f5f9d535e4cd8053c09b2cebb25d3a08365ab8ccb0000000000000000000000000000000004f5c06f505ed15aa7661249b7edd71855bbf47237e049aa951e1ea3ff88f98591518bac975ac628e417892f8e9e5523428f1a27ea15135f044643dc36a3f9c2b4446a3136bb11f696b0a430a7454b3f00000000000000000000000000000000083336fa0b79691b4875ed27b2bbd2d2586992940356f6ae5ddd2021c5ddd87f07f0a5c1e8d8a2654b99182cc2233e84000000000000000000000000000000001880f3824f7cef95ae5743de2e17191848d8d30f0469f455461c6559ebc75a7afbc86dfa3ee17f5470f74018ec335edd0000000000000000000000000000000007c2b26353e86223e5dbd4ed6d59f1170b9cc9dc600fdfbc6c73b96f2c667a82128b1ae5af0542b11a7d1efae87c75610000000000000000000000000000000002427b7eeb497a20cf15c10513cadc9ea612f3ae94e2ae833d281734e7b5d1d50e240659ac01da7864a95b4cdcf88744ae21ad8a6c9d75b51133e81ec34d66ca70a52529c5c3a2307b0e8d6f1c5e7d97000000000000000000000000000000000e72845430ebfb84f8e3cd3dd418f6dc528bf521aca4f9dbd798ed903ef0ea3cf21dd1409aa3759351be32b21d8e8cbd000000000000000000000000000000001457ad87f0957006192dff7d99815c35adb3635815e5d157542b9f52f1e9f8c0143a21a3be4dc1aea3a895689f4a316f0000000000000000000000000000000007e8544b1037ece2e5a9ea387e0f43b72e895e9c2ca4d205f12bf6df0b35ae62a4d62756221d6fff65b928b7358f48b00000000000000000000000000000000012c5c3167f6ef118c4044c0aafc85a337d305437d694a7bd6fb406dabb7364d9e90d74a8b327aba971421a5b3dd5d06988a23b118179ee2c34ad030993a2d2d70375311b95254c44254a32508abcb612000000000000000000000000000000001995d7cb79da7b6c5a0c8ccc5ba075d8d6d8ed3cfca85e8ecdd2b589986fa58c4cd4f045983e9184d79173678d618f310000000000000000000000000000000000f9f7f6bcff0f6fd621f3f8fcfebac132b3f0d52a34af33bb9830bd714d2982f3cc6674ad6ca668131a5062e5589df90000000000000000000000000000000017699b298a46829020e0299ab89ab6411af0a602dffb0e149053ff40ccaec71a908da02c8e611723cd06c16a8e5c0f2d000000000000000000000000000000000523b287383c1e47a6f31d397359941fe0bb8167aa11604ff8569969eb5ccddf4c4f432d2b6fe6f39204020e850d4f2b30eac099ededf0087275d1af828bbf79ef7fb0e77179a068f2ebfe4c749a98c90000000000000000000000000000000004760120239593cae5bdec813735ccc99a88129c707686cf43efbd48fb08d8da3086879a6042bf118879fcccce0736bc00000000000000000000000000000000105b8191431f701b365c66680cb4eb267681ee4da17ba55d47cf26d21ba1c0c3eeeabcafcc79dd87b6457bcc91e9fec600000000000000000000000000000000126ab502f66e732aabe02fdb2f7a665a9a43f6b4ff21c22fa976e7e434b08b606e9cf0f02459fd85f5a80a332fb3a62e000000000000000000000000000000000b2ef01adea6c00250f2f14c98ec6d6083c45019f3d166419e3a137667324f80c34b6b72e991daf72e2eaf9985d0f9287e8dcbf708682225fe3f71b7a687da23de5ed188e40585be0553358012132577000000000000000000000000000000000ff22a0db4f1b1679bde5853a7c2932501f191f4a9f25eed968a796219cef028e26070851a9036a05a04abd73bd6bd4e00000000000000000000000000000000097e9310749f52a4b645190069f4d52315f0eb2ff9cbbcd31f1781a68b2664bbbf27166e6e74fc2be2e5b1eb3f3d77a00000000000000000000000000000000015ca218d7d128095bd4f4b4f7bcf7666e92b905e551dd22745bc743ad0783b6ac44b841f87d3deac44617a7c9a341c55000000000000000000000000000000000a1cb723a4c378e5db2775f4dde9a6887ee3313401a64130a78b90d65dda3a5d9c8bcbc1a0d78c310c869a7fc4889954532cd42a9b698a2c2d22b1a620a7ec60daa9d1eb8ac36894603be7bb9b5e37be0000000000000000000000000000000018b30cc461a4e1fbefe209a709a21ae201bc6094b2d15f0d6dee5a55dd84ef56b62ab1b6bd513b27c84c638291f4205a0000000000000000000000000000000008a6f2082d6d510b280a270c09044ad31fb18b851ad2b38859138c9c2e4870fba6b607f682a798bf21a13bff116014d200000000000000000000000000000000150ef352d494a97d0a7ffe44903aba1611c8d81fa2788c0f42a6db48a71101e12f07318da5ceb1f0af3aa10cd4c26341000000000000000000000000000000000ffdf3b133cc926684e4624531569bfa09b1658e29ad9c3efbd5e9d18353ffbbfbf23a2ad80ccee88f8fa597416d47173ccd5e19892765e549a63238e664c732af781fddea558a117cb927bc4a1aceb5", "Expected": "00000000000000000000000000000000134f45e5409998e657923ca76ce92b7d2acc932308e0694bb22f121f8324d16bfce86f96c67111c8080289eada4b4fb40000000000000000000000000000000008d9063b7845ffc8400c0b7585e819043884f92e28f7e3ffa47a39e808cdbb034ef4230b6e19bebf083e939b6b686b0b000000000000000000000000000000000e95f8fcd6b5bcc9e00a580a99627d92fa7486ff5ea587df5dded24d1b0bb76d339f6765a5a2058a8e227f633ce36e91000000000000000000000000000000000393041eb33f2c63df3f40d8ea1e1a9eaa9eb0a46151294845e542054d503ef69b40b0b676b0e4f3e08f4d26c36a5d4b", "Name": "matter_g2_multiexp_48", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000042a220276f12fb4e81c40ecef3a0d86634b4d1c0acfdc463df4e7501289f0be385e03808d44be053e6ac98f403a8a930000000000000000000000000000000004e3dc92e155aeebdfccaaa1d24f49efc8b02e4d9ba8500a5b953a96e0fdd58519bbf1c279750eb8b98616e6bb9a3f6d00000000000000000000000000000000086bc212a83b09c7361540349767896058d5567d4342c607ae9c07fe5f123d9aaac95ded6cdff0825edb5acbce3e2b6d00000000000000000000000000000000062598cd6d5680a155b6349cd51d636c1350746d17fe0fff5195f164ba2fa51cf52f8662f43d555f7be6bb8bcacca39448da17551b2369b723bf932173a9167663f8389d2461b763d6a061df78d7ff1c00000000000000000000000000000000193e2c749e5bbe87dd5c306d822740969cd69ad6e156c323d217c08b18bb3f97c85aad63aed1e3a455ffa1b6d2a670340000000000000000000000000000000012a3dce63a88ae32a746e3812833569959021e1dd9518621793308f8f11d04829b2c3d0e0ec39fc48dfb8285b6852746000000000000000000000000000000001235488d01c380e91872fc57cbf618c3531a6bbf6cba9dddb9f07168cd459c9e866e44e9e5336369cffd8cc3a36cddc00000000000000000000000000000000010d85f85d6242b63f8421e92f1c37f64d33fed67e0cd3dc4b2b2cb4a7fc7637f9e049fc959720eae6d1f452159d48b78def52379c8b9e7c24d971c3456b85b51a63ab03761ec66c8dfac1018833e05940000000000000000000000000000000010889825c752d0ae8445a1d0f3510135b9672c30a781788698f637c2f535e35788d76492edce8ea091223d016b5cc141000000000000000000000000000000000577175035c86c022e634ccc9a5beb96a36aa068cdc36e5a4fc2028d5dd099c5296d30a916d3b720f2e051e7d72e4d490000000000000000000000000000000017b46e49ba08a0abb9394479d693d8097a140094d0ef1d1ba7761fb601a686b0b2b4d49abc2e393a99c5cb760299992b000000000000000000000000000000000820f8e52c1b09986a70bff04909b044f671c3933de43a6bdfcbe3712310274ed880d7adc4947490c7de095ea651e578b2225be6985b9c8fa59a2890da56427612a4334937761e24a33d37f0f951a794000000000000000000000000000000001776b92f683069fdc006904fef8e91f716d9f6bc46306b042228088545f0e11a41b40b60722d4f0483250391febc0ed90000000000000000000000000000000010d5052ef2504115e9d9d4ca81c7080c0868cbed605dc7673f7f94f5959c793c96aa5334175e58499102ff76f974ced80000000000000000000000000000000011d1e719bb69d842df4fc23e8dc4393067d00f6fa8ee42d89b462a546414b91f68dda5378fa093b3ffa764b5fc63b1aa00000000000000000000000000000000099d0784a200e5d2d38773912cf1a49e813c871ede8c50da03abff58ec1943d2adefe66bd2feed1c57f5a80253e091d0a64ce8ad619276bc7a00cb49faf6cc84b917ae6b37654363f5719a727a220291000000000000000000000000000000000d7287adbe0bc3cbb35ab8bfe69064faa83e3e64d73a0c64d960949e10070081a99c35d1dacea5a3b9bf312745acd6e600000000000000000000000000000000034f1995eb8631e080378b22a51ace902ebc9da4589c89ab557b6aaf685fcc74ec1fcf95f6b9a31b7a45cfc5a1610c640000000000000000000000000000000009f56712a46c0fbc199c12d5eb7abd60e660e2c6d437007c34954c6234a0496ad0adf68cf759f8ea30980c9a78175e1a00000000000000000000000000000000073fae1cb78c776188190a4d7223f7cdce9a36488193dc06898919ef4d5136099c3185d352028760c753e9eebb52ac240b891d638d7e76e0dcb230b1f9a7c3b35b35193c43a6c86f345f5a5bc9c708f500000000000000000000000000000000019944fc459fb601bddf10a3a7eb55f34713d396c3208a10089b8f21f4bf0a5e87e95ccf73e0bd90474d3e043f37a72300000000000000000000000000000000158445bd2b6d396a390a0bd5e26256587f980eae84d7a592b2b4d788c452d312b854427185a770084e1b4c7898962e50000000000000000000000000000000000ba44a1b912645354da7d8d9c694b1d5a9ff2d642fad31975171deef3adb0f8d92b2d3a8bef6ecbe0b8e90470b3938d00000000000000000000000000000000012a040a72ab035684bfdf57bf473ff59cd1ee01ec949dcc6066e5c8afad775ed55123859cdd74c7016a092bade7f991b571175eb91888222085fc2dfe0f4401ed6a1fc5df86c0c6b8e44fba6454305bf000000000000000000000000000000000317ca8fdec8c7c56fa3812157f9ca8e9bbf91013dfc7052c0795a04a1b4649b2147d9cb1a61f2c114a705e5133729920000000000000000000000000000000012b893d50fe5ea2eb528d1a04bc8596b10d4714a0dc38bdd5f0a275c07c846970106c3f7b5686685f5c809e93c57e2ff0000000000000000000000000000000014f018a0d13c4c494f4a6b7e836f0f2f46c4b7975d91adb93616a0555910f53574add03b905000f8492465c9b5488c1300000000000000000000000000000000146eb4ef1103b525dfb5c31bcb98e550245732fa252a814824258093a2397d1489df8ca0228d4f5df0a00d473d1566c454c9e7f7ca14c66b8431e25e6eddb4f20507d03bf124eb607957ca2f43a0c17b0000000000000000000000000000000010e9962dc19aae8e92abf32fb9c8eac44d77f587159af4e3b3a080748322715a958d953d3c057999839a47dcc840076a000000000000000000000000000000000ccafa9761e654ba54a46afff51384f1c6331264082e23f94fffd6c31a1b1b568a391eac79417657f40ce2fc9a154a670000000000000000000000000000000007276b111c94130b2608827156021815faf2be29ae42c454f3e2f95de98d2f5b98cea3eb18335a8fa00e5464f8089cf300000000000000000000000000000000053550896e867e237086098f4493caa2520e8c97a05e14d0ab7012d37b7fbbd42a90accbf0fe2ac99e78ccf0be5c9c58000579e1ad83015c8f02a9db5c38d0220368a80b309ee45bb952cac824817b6b0000000000000000000000000000000016b5bca8537059362147911da9e69ad3ecd3b4a7c43ee7d6d809f46c74c16bc7d69bfb5d7c727b4d5d8a356a0458b59e0000000000000000000000000000000010f3a7eefeb3033a733af7d20c3c5caff4c409305de8d71e08cb9cefbdfacda41bb975c92c5e5f2952c3c1e2bc6ca8cc00000000000000000000000000000000148f5b2bd65b71184ba6974678f709c5f9e3f1a020e3d4bedfa5f5f66478adac47f06ca2626c4a759b5eae09756cfe49000000000000000000000000000000001301306d1259059b5567154ef6e4779fedf98c29ea967ce34b78147c5730f202e1c12d5b5094219bf85fa62834329b45909a45c8b78350e3ca21697e9f56d5fc8fc2a01817b78a7f5daeda487768ed1e000000000000000000000000000000001741f739459f5d462fc9ab55c68101a5a3f2741c05b4c3eec6959b2aa5e12493a19d1b33a9aa89337add642458089eb6000000000000000000000000000000000300d8b7988522706c0690da52d0a67ae41344e43cfa05d22feb91eb8635bdb970810e993e0ebf8fd63ab8fe3e048d660000000000000000000000000000000007c003cfba125692b88feba85e7288bf61bb25e04b1462f7a39b4198737010224ce4b73a320c81b1f70119af34d381d1000000000000000000000000000000000a4870c9de67517f4353de23af21fcfadcfce55365ced33a61a19e5de52f98721b17c6eb382970e7c4acd81b80a7bd2f6d4e2277da617f0ad530b6209df6264e1288122b1b4d92da04fe334be17bd8320000000000000000000000000000000002eef52fc72d5aa0456c13808ba548cb765e11cd0bfd0599544793f57c8a27ee90880e6577af1b76b3fe32c4e71f4104000000000000000000000000000000000ea99a4f6772f8114cfb3ae9dc20f11a34880a86088511e5b7fe521d50470148b43f866eb5bf4f67c523266bb55117050000000000000000000000000000000004bd802b889e6d18df7dbd65f39a908cf5889e14be51b5ebd423ccb63e4e5b35e429eb0d4f384b811b47975143ea2ef60000000000000000000000000000000018dded357c546d709beffff2da0c08e8059c720023234c7b53d0ae85750b3e166cde7faf340697b546b8dd7c13b1ce7bdcba6bed6b8c42240c01df5fa0ea81dd96168c6d98ee9d5d4653edfa5172eb28000000000000000000000000000000001405ef521bcc60c55f8551fb2e2aa7b10117b2f96c03e8535e5bff48ae197b7e5fe69a40eecd25a67f430ca02edcc9d2000000000000000000000000000000000477d85a7dfffcc5a2a1048205362ec42b268e5fbd27ee7c8d4ca77b5c9db84dba482bc4b164f92db2c15cc518b3d32800000000000000000000000000000000060988548ede00aad3682fe827d1e993ed1cf118bec7cbe6f69bc160f030bf87c299d40047a4fb5ee27dc2814649a4580000000000000000000000000000000006b9e0579f82fcb8bc149e40b1199f5897ea48ae5eb58abd2002c923efd0f5275d24a579bd904e49b7447c4a03e3fbe423d168e01657e5c2da89a27e513bcbc6620b8c6082bd39880619bfe2b3a7317d0000000000000000000000000000000003cde2bfc5a865cac624d9018c37c1b5746b5394597d79c171b25f84d5fdbc76bb90ba5cf9db14b3b8e62ff91cfd79520000000000000000000000000000000017596885262075e45db62ca68ee5b99d12223bd476e36ed4ddbf5cd56a0c6e9db5d79e7f95b96b1bc323d7c9fc5447d800000000000000000000000000000000018333858871dd41cddb7ad2f179f1f341b2ef20bfc7a1d3cb235e3a1a181e0da7251911886f0788e0f868e16520c5a200000000000000000000000000000000098ce44092980cb14e89faa7efc2906051c9a51cf7b2757dbffa49fafa3a9ba145f809f1212c27aa620bf062e839f83c2a76fafc5e8e33852bbeb7ab8229305be84f5474427e0c6d2ed35c7bfe99faa1000000000000000000000000000000001180d554fd523a51e0decb92e0134c6064a17dd3aa7b11d590b9b6022f76763b1e20562da21e836e65374efafd78b77e000000000000000000000000000000000488686f793dde899a3f4936f07f9eda7918450966ca85b4715d6fee978d9d091bae1b5d2d04943365c076a849b3359c0000000000000000000000000000000014661fb2d305ec9e63d63e9951d0f081aeba99972b094c922d2797a1100759cfe150812821411205f563e22f01ef29c50000000000000000000000000000000013dd681200608466853cd3bfd20f146a6383151931079654962684d6c6fc3bd6900bb049483c1ca6d2819da456f67e3be3c7e4e95167faed1391e269785918a207490c6d186bf2537c02e52e414d564e0000000000000000000000000000000016c8c7a2a1a76ec05770f2d6c8df35003104c034c76323fedd49663daa759caf2f4fefbe8d44b3abf1dadfec2a06cb45000000000000000000000000000000000837305004aba2e322ae29e8f0109f1c756a44b21c72733019e63ff9886a639464090770d12d35553f0002ad028332370000000000000000000000000000000005c8f82ca2d4f6785e2d76ca3a3d1ac67aedf78e9ac833c52cfda6289e6f5d7a83befbeaf753abce12376889caec312f0000000000000000000000000000000013595cdc9181ca70845c613663367ff774f073774688dc58edfd0c58de5ae12df5acd04a673b645371940d7f7e1601045d335e3d96a9b25be7f3916e92fffd75abeef5b91a1ec577ced52a96f6a9b10c0000000000000000000000000000000010f1b8b39ea8ffcb6a96bacd1c00b413c93d3f8da64dcf9257a7cf0264831be23ca63ab8d3d1cea21ed8d83ecaa3a0c70000000000000000000000000000000017a9030fbee573cb71330007900723f85e9e82530283f713f72e68c1d9a5ff9552d0da469a4f38b66e30df1514f922a40000000000000000000000000000000018b9020986a49213d4f3b4b052cf2fb65f82b9bc2051f20b399f2784b984ccfa2752ca576d352c7d65ab218bb8d5df870000000000000000000000000000000015a375a3711f5e9f85ad7266b2d307cac09ace9ea36e149dde5e0d5acdbac3f62e1cecba8be51d88f2143c3070eddaf0fa563a70780837ffcf9a84456f0b4f6eda0d60cce6a8538ba10960eaf17362fc", "Expected": "000000000000000000000000000000000b668f602b9f56182b74be413d36b03d2266d7165386a7f1f0d25d336d06d2bc5659e80e54dc71f153883292df1cd8940000000000000000000000000000000013151d305bba39734538fe9a2717392bcd134ef1f8c1879740c8cce981a2d70c94b23f1a71a0596e7ead55a55eb186c80000000000000000000000000000000000e5e7c268f93d8a9d3ce45db2a95be906483aefa3831ed2ab2aa357eca0ca231927c0e5031daa200784cba33b96e51d0000000000000000000000000000000011d57d9a9123123f9fb56e990626346e5c76bbd1a4b3349c3f7bc44f05a899f9c4dddd67ce5a788f85b4fb172385faef", "Name": "matter_g2_multiexp_49", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006a7946b50749147573991c91f13cdef4e9558be37736e3d990c5750d31ba9711721b88eec529ea4b1dec1c935fafa9a00000000000000000000000000000000078d8a565b7f58b915c220882a73b6aaf100f2d54cce2524cc3a80d9b526c3058903668d17427a617ea045c3322ec502000000000000000000000000000000000733c6562cdcb28d740c64f50ee9d204af4ecc8de2c1719fb73c20f2580fcf01e1e494faf4386764e03920a4162049fb000000000000000000000000000000000421365fa828affe963d145d318065933d4d865f2a3d24469ab0db66dd09a574945f8a8b622d079a7ce1c6fb6c795a8f6e2ee781da12b984e7a08730a60f50c41cdd7c7c8b3f1f30f721923ddc34fb79000000000000000000000000000000000a4fdc68bda287bd819ebb0a296212ddd19cc76b042e134f1637c894ad64bcd8431392c9791f2eaaf94f6c8d189846760000000000000000000000000000000009d974fcb46fe81d81d62b24b805ab5108c9450e162454c3260ecd0d5356b7c263be5f78f6214cc7254e461166910d23000000000000000000000000000000001081fe3579cb4d8a7e7d43ca8cdda28e1f9ea8df83c6069f4162a2a0e68e0d5876b283193649018e754c5c8fef101f53000000000000000000000000000000000ca4faaddc4d14a6648e3515a8b9028190c17f771c7de086fe4624a3008d7e6e374c967f303d9511b9da1a95409e3cb3d51e0b65be993ddd2892ab8f47eab78352b177be4b3fb68f47c65f5c59fa866000000000000000000000000000000000117318e376f2c130e5bca89b3d700fe76e9603adb22a5ef353bb3b5a8f641c85deb4640fbaccf94e025a59fbf2a41370000000000000000000000000000000000433428497ed89a43ba07d816df224809a827194ca899924c3844650a3800952cda8db82f2f8e513994ed9893fac747400000000000000000000000000000000064889f1cb7d6ab216fcceef7c4abf89be14ef93be2d39bbba2b74d06999dec5ae1941b507709d093b28e030700cf866000000000000000000000000000000000957fcb8658497802e78b8250373f77acc4ec47fa2c87e78adbb2daef70240da640a7945895940f76bbb80bd36b4ba24fed4dd284df98923bfc3c41496d6e64a10815a8c474275e0cdbc9ed26e92b0ae0000000000000000000000000000000013f9771c105462fb6b975b0b2fd20d0accdd2d95d879c8019b08db394cd785ed9f151d0eb1adeaa63bbc2686d1172b0f0000000000000000000000000000000002062a5f2db0a01114a1c6e8c739f80f598f4e905952101a244853078298eb443be6839b59d4f0c7745b739cc89ad8220000000000000000000000000000000015b5485439f1b94fbb3a8f5ac6197f0dc0577863f39c44b34d4c5437b6a82a704dec17529654b3037a9ee1ebf14c8d8300000000000000000000000000000000154d750e2a660205812d428cfe79aef4e1059f4e231024a665889d112af37e6e17e04cd7c926b6240bf2f616a1f572dd7c36ec97c1eafc8a20a772fb7887d75568047ea32458b9ce74ad9ca058129949000000000000000000000000000000000231223930956bd2d36a89a0a0a47aa46b4763919455ad3a3581439d25a82c176569698fd5ca2b9429793ebb16c98e50000000000000000000000000000000000b5dd675af51c18d2dc76e3103da4409f6e8c1cc719a622d4a33aaae3f23e529c78b63c55b67fa999bdcc7095a4ece300000000000000000000000000000000010c971be55cd02e4c97031d3b25acfbf722e47e5179beb26eafaa72d4bd5f47cf280a99e0c3c4cdac05bf1572d01fcfc0000000000000000000000000000000002c1370919e6445994df1e25ff4a79c8cd8805f12e5d8c781e58f04dff68a97424b35d162d875ca2b3f805b4cd6d1fa641b2c0354d2f7d92b05043f193b718d78b457ae76e19069c8e1c2b77d7999d6500000000000000000000000000000000169938b4d3c859f97a0627bd1a83fde725eafb7ab77b22cae06d2a776569236d834702081e78d61386999c938c0259b900000000000000000000000000000000091e922f00828488e324f9fea652ce1edff83d9f479e843ed4bffee27805a5025e7a150719b354b5e61f381ebd24d4ea000000000000000000000000000000000334ba8044d7d47795b59eb089502808a7ab8f18e3d5e1cc49acdb5020b3973fd21d6d82557afd748dad88e45a7623730000000000000000000000000000000002299bf949ef249b5057c103ecd149444635b4f636a2fd0d073484404c1ff4ef71820260ea6529bee6f5b07f2ba94de35615370a76bb0a5f64d61b97bdb045b9669f6a0b7644b101d21a50483d8b04dc00000000000000000000000000000000076ab7838db87727fd653a3b561a2a5594518f296284bc24a7d215b1fbc0a6492d425078fd98f92a414dfcb3c92cc1d000000000000000000000000000000000022b71fb467dbd6d9b130763350bd06f52d20ff2cbd46cdea5e8b1525fd73bfd08f5ff171f9fa28050e9a3b296d3e9e00000000000000000000000000000000007e917cef0195fc589317d4a71c14022867dbc0db26c653052e2e382d0dbebe67a0f582bc0a27dd1dfb4703c545d0da30000000000000000000000000000000005b1d8651b86a403ad993c5cea4b6b82a0f8a9f8a59d4b94f10e68e9538a559efdde2007736aa9d04f585851a89af88fbcc38cfd3c6bdd32ed1d583f2bd14e175d61448c627f195559b751aab1ecf7cb000000000000000000000000000000000653c5f5b2d97239821d173036929dc716e78d835a80af55868dcc3e218bcebdc2a052d31f6a573572d13f3bbb14f241000000000000000000000000000000000cdbdc3cf52239a6d4bdadc273b00924de8730c03ea82bd20ec1f04375daa4497fff3a1726269a736706355e72be83870000000000000000000000000000000008e0285b177fcd768d3519062177fa1314c4370f872eaf10f3e0dc94e716dc6a67894d887f40104552336cbb5ed614f20000000000000000000000000000000000638db8269ea4c2fecd5b45955609ef6a1c2c6faf6ee5a8d777e0b38f16d1acab2da7fe7b6f6ebb315ccb345835a21d94c41471a2e4edf0f688c2f032036d41ef5f8a966871dd099dcdbced8b37e1c40000000000000000000000000000000005b4f74cd099eafa6ae59e7105873d4a46e8e5985faf2d26ca564125dca93b1c48187ed7afa02cde8b52df878e1aa618000000000000000000000000000000000cda7f9eeadda16ef757ee8a98be147d374d3a1d40790d20a1ae42c9ed38e4fe22be76ec4f807cf93fff5c6efdb50d1c00000000000000000000000000000000121219b0b0d236a89a857c02249cc04c22299d041d95296dd235b3639416337f5be4a2ebe92a50d192fb748d5d4dca0300000000000000000000000000000000112545a4677ca7d60645cb8bd98689c4aa85a68bb62dc68c0affca5a17ecf0a08fb9b91589d08712b5af4aadf31caad2dd297b192f1c907914ef949fd27a5ea5659aab659b83239c4433f7a4e24529f2000000000000000000000000000000001342460712b73ca0ef07d953c32d280a3441e108abdc2d133265160608986481df3563c5dca20f209ce078b13b49707e0000000000000000000000000000000003580a5b4a7f6d6e066ad9073f7105f6cc1ff35ef5e79a0aba7f48ff2b732c7aec72cc9c5f9233fc9c267d8aa37ac17c000000000000000000000000000000000bb7f32db8a4e341cd9f8dd3b5677dc650cef675f0923bf2e5c8b84c33d447daacbf68631c2388eac5698495e1ad5a3a0000000000000000000000000000000015bf9cd1aa585eda2910128f2b452569abc1c94bc8bd308ee92b6c7315a56fc92d6cba03334bc36c137c14eb1f198b07d30fdb174a3f5c06b78cbaee5b6e7a4c90551083d78c5164de6bb45ee5de23c100000000000000000000000000000000091bca266255d692cdfd10929802d79b474706d160033495decd11cb0758136ec3ae7fd4bb99081e44dd7f25224e009c0000000000000000000000000000000001fbba1ba796416ac22c92f3741e3b268d89fbf0307edf0f25c7c12b5cd230c41582ba69465686ffead9f8363dc0c297000000000000000000000000000000001139590315fc4d81e3e747a53e63ad856635050367ffc143c1422e324d5fe9e4fb90631ff8bba764a87b8077b571aa0a000000000000000000000000000000000dcbba28afd445a57db762d08338a26980b4efbd11668e4050d18234ce35a909d6b563a5d3e8e72892514431fabf0147aafc42f7fe6854866cb954367fa65c8072bd1b60173a2d45077421d6e25f2bb3000000000000000000000000000000001322b1f1388a9dd2853829bda1a5120250ed08f07c84fa398e59fa2577454f38f0a76a1e8db897bf15b4b50ff52a847c0000000000000000000000000000000017020d7de1dd424de53992c168d924c42f26231d184ea3cd9cfe64ad9c82ad067540b2d9ab18b0fd28477ac792a80c4a0000000000000000000000000000000000fabc0769b95e6feedc2165bd6d324b7d16247b79eebc1f09d849792255136538e628bd6ad9b86af7bcdfdd991fc31000000000000000000000000000000000144f39f792bf5585f4b49dcd3fcdbb61cc7ef471e08af4c15cfebb855f0ac8d5fd057c9486e53e8e1ee4f66bd5e943ad106da5f98d5e7cd9f4a1c8d6e50ea2236c2abdf1e08a0eca54555a59bcadbc6a000000000000000000000000000000000c27ac29db98fe3038fe5f537d5ca6faa240602abe11c6f530d9b18d763d6dda3fb25f9538d316e6527c114405ae54f00000000000000000000000000000000017ecc872183413d8065a99a2d1a73b70150e2c1fca2c13a731a39b52aebc6db79772e91f115a63f7b23e5fa231df697a0000000000000000000000000000000016b9715ce820b619274202b52d7e7bee9a17aaeb06c2ecab8bc77c670bd4c714789e4478178d94d2aad57e7bb0b7a4040000000000000000000000000000000002d0723a3386248d8597d2b63289300de6a16011a38985170a1652ff81ea70a78459b3ef252cc5ed26ff1ef1ecaf6a42c971deeba2f757970bcd4f5548a2767bd6c43e63f4c5fc4b157ef060a1f45aae000000000000000000000000000000000eb1ddb7306d8d2858fb57dac71f67473b813f37f02d73b17f375be86028176cc1dd84347f183cb7d427b861be34c3d70000000000000000000000000000000009a8811ec77eb21f2b33a591f2fe6d7b74b40c5045ceeee275912aeec664838f332bb49bedcd958ede0af0d0232e76ed00000000000000000000000000000000156e28ee3c40c6f18c6059e06ac8f7b39fa23e5962f640ef3afce13c169346a4c8e5c2bcdac8fa15921a4740cc5a0f2300000000000000000000000000000000084371522a6ebb1925c8fad3f20277c34e657aa71abf8ed7d323a10c14cbbb1a9e0e54bace32eb845e6709c1c58afc34a5262a021977dd79ab96606eb24a7c5ed650300dd68bc79f4b8378f58c6eed49000000000000000000000000000000000be2ef9ef38a5dcb42ad31b1415c8eceae625850db4306a26a0598d4a567936d75b701c81793fa7b42d158df2dcb0d5d000000000000000000000000000000000851b82b59fc15b89e33fb618c56d11a07116ea35850583a07066ed97b8a864f3766c0cf921d007a6cb43931ad4fcf8e000000000000000000000000000000000ea8bdfa3c5f000d7cb1b5cd69537e4104daa15ffcec06f40a91b972d8011e5fccfa911c55a07383cce6760c145c39e4000000000000000000000000000000000652a4165602978004ef702103ef18e8fe7decab1522a76486c742d29103e3bdf6dda2d3cd64ff1b5d5a76f4823bd363083b3720c20044fa41712039b6e9e776197391ef393c0935a0e9990fbc1b7a4600000000000000000000000000000000015ce5b43e1fd950b77e2baccae8c99b82f38bce09989fdc5d402420e7931a38b7fdac5a254b0cb9bd8fbb488d02493b00000000000000000000000000000000018c5b3ff46a04ed114bbf56399738e5d594ef8dd1d5e2e8dc23a0097893be3da4fa4662686a6dac04418fd2d344e36c000000000000000000000000000000000efa3e970a5cd0c7bdef6a2df3be9be18cce63c10c331a18d628bbeef30488ef73d866f3c8804acb3bd375542e99eae6000000000000000000000000000000000e966d9e2f2d47df5d661a89fafb6d4518fa1544ab7a56716df511cbcca99098f944a981c9da569cf95debb455842006d6f846581848f5dbb9e8d220b881d0327c4f3f5d4b79fb2c4dcbdb9bcf44b02d", "Expected": "000000000000000000000000000000000ef06b515addb951b24e5d61f6e6eededf5f93f9f17455e1b563f187f73394457b3b7c1b90ed454218f8782d2bc848be00000000000000000000000000000000167398608a87490fd17506166bf54636aa4dd6d3e8c4d42995bcb0262268eaf2a6d828b295434f45e3e53703aa67cdcf000000000000000000000000000000001602ec6519e4987a052f97eb222f505e241d99602c08ea9c41bc95796675ebf6a819aa0bf87319f29dfe47f45f3c8c7a0000000000000000000000000000000002ad4291ece7ea0fcc9f4440e88eef693b8dd53060ec847bd27d74cf71218eb6210a71895ff1f1f4537a901090f14de5", "Name": "matter_g2_multiexp_50", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000129cc9cf82aa30671e969148f058a0b8d275bcbb1c8da66e52998d9555dfaa075e2fcf39fc18f305940fbc972cc5c0c0000000000000000000000000000000001252482c1419ad72229a00d90f1c09d464e896f47db91e9680efe36822e99e1ca7a2b5ba8b17b5929fdbeff8993bb18e000000000000000000000000000000001287d5054bf5db038ec2f7b7a3b79848fcc8ca42f9e19d5e21d36d2256f97e0edc2608d19c17d3714024e1e9e86ae264000000000000000000000000000000000f6262669e30a5db67550cdce8a4611b9501d02cd4e950aeedd1c87c4f0f63c74f35c802dafcf91c988a154dd690103c67c44f7c8513472b51f96d526422bac628aad4c40c521cd7cf9e86eaf92838fd0000000000000000000000000000000019cccd010df3e668b1c3ec053e76c46e45d01a4fe02eb074e296df2a48e0e4eb647b06c40cf64a0048a8fcc2b0cfa6100000000000000000000000000000000018e07bc50657f3bbf736c38518933e91af29e3bafd776243296cca3a1d975116e8b428b050045a61069adb23baa22d3800000000000000000000000000000000154f51badda1b828346986264b01fb1be4c7e9b570ab63a5eb15cabe9412a2f9bbc6d5111c638ff5118a4f6d08ed055200000000000000000000000000000000064d4e607a8994c0bb65770a14a14ed1b68c766ac2aed45a44c0f7c7cd4c3ecdfa077206812cf9b24e35021060a3668d2d6f95d4b6216e4226f78e4fa5011c9becf98fe45a17dfd740fdd0ef36d8ba94000000000000000000000000000000000b9bae5f720d9bd3271a71d751e4c35c39ad30fa8a67846107ff769c455e42465b2a39dfa32861634d5e323878f56f4f000000000000000000000000000000000a1077046cf5c7a66452cec2193ee21c1ace50dfd79f707c9297737f13806dc05e9e1cc5d1fb4c87b250ebea5a4ca6c40000000000000000000000000000000013e1fbe1a9b5f2ccff51120590ac0cb00cab502726b43a6fc12459e27bad4aa41537d6f3cc94a81a170998768f6a0fc6000000000000000000000000000000000a02c551ecec1c7a415256caaec1b5485a42f9ca8d897cf26546ace1f2bc8c2d10a353b8b84495b8dab5e3c60881185a58c25d36216b811ee42d0ba629ab7a0f9ce7edd7234620c28e37bb3df3f042e700000000000000000000000000000000021b9ab3ad614816d7006efe688e1ae8cd99b0c4437d4363e557642a7cfda2000db6503b32db36b6d1ffe40d967c5efd000000000000000000000000000000000b7fb0ddd9eb2be9cdffaf8f8c593a9296c4c7deeb1c714c11863d71dab1e6fd309b75c41e25de3cb6089726b43427f0000000000000000000000000000000001277065ea9d208777d0fb7a6726e11c8330f0b3ed3c6716acd559aab19b2fdafceca8126c9facc43b9d80534c07035a20000000000000000000000000000000015e8c12065d601dd5ede75bcfceb7300bf6f9fbcdf68d2f093b7654d80d3e565135d64137dc401d691a45fe052f58a6850a5c6bb6b87fbe5ebfb0d182d425ee173973c6f2085c556b0fe60219b9f3c32000000000000000000000000000000000484c4f9652427d0649c33e93d666dcb15bc56669c00980c53357ecee874bcdbaa016236df65a4339dfbd44e4eb0823c0000000000000000000000000000000013836a7275c29c989891c94e756cee9d6c54a8f634fa570655ee44b7c1e34137edc33323dc0d1f3a0218039fd6f7013d0000000000000000000000000000000002e88c7d5fd87e97a0de1be95021821942a8004115fb4fdd9ad26b7e0fd171f9c7e6f962eb179bdb95ef960cf9396372000000000000000000000000000000001636e351a0ed1a260ffe0d1355e6da288792fc97a7310b040cb9fcd5c550d85d90572154d58a9847dd5a8a06456bb2e43b4bdeaf6643ed159f4a3e23c33ac486b33e1edbc5a097a47a6c2c753e5299d20000000000000000000000000000000007579785c14fa012cb5d6c116d34dcc15dfc908a29e90de3bbfb8c9b44e0b4258644440d7c78d751a007c10f98053bd10000000000000000000000000000000009f023538822ceba0883a0e3454121dafe8e5e61d4754b54e6417c989efa998334641d458591b3076b615937de065cfd00000000000000000000000000000000130fe7f2d5e0ffefa67ad3378690c53a6e68de5504f3691de0df3a24c309619bd3a345bc2bec4dcfb4b77255cbfe09980000000000000000000000000000000015bf85ed997eef4d97a81f1d75825bb4409cf86b8c8e5f4368cf1e4c803f9e1e23a2a96f7b0a08e5cff55a78761ebce21d18596bc392dd0b71e1216bbb20a0e5e2559a46789c36a146cb78c5aa8e3921000000000000000000000000000000000a95597e4402bbd17c20dda088f0134d42f14443bd519b3511b28fd8d395a0e50758386498388ea6ad0e7634587336c1000000000000000000000000000000000079f348d3de505875c5192f795cd77e2f7385ed447b06f2dbee18e85c832386b201cb3eeb21aac3f258d2c4b0434d48000000000000000000000000000000001895b1891a08ea42eb1f68698abc20394ffd66bf0c32979668950bfec5cfc8425314eec2ac17ba25f29133a8becc9f5e00000000000000000000000000000000146160336d881b24c6258a3a86c08d346900680324632b6d5d4582ee0865a7e5f2d01677e5e49c5a4179f8382e49d1566fb3669c0789ba6a5b00f14c14fe2edd15d37a742c9e36cae9ac010e632d75a40000000000000000000000000000000013cadc6c394efb2f93e00f3976dde34efe75adff34bfb6f5e1a150b79bb5baf6bf29fa149581fda48faa68653cb61e300000000000000000000000000000000005fd25362d87f9581a202b186d2786d2859faa9966a1ceae747dd7a48749abd424eb9813e44caada0e456ee8bd12e99c0000000000000000000000000000000018e6b279e2b545acf1da29dc0504caa5982522546f83d4d3389e1fd6cb5328d4a167926a00ccaca402b3a3cdc67d757400000000000000000000000000000000089a9992a36b476fee21abd50977dfee01d7c91b24b3e26d7c15b2301352069dad920f0ea93a3e477a48029eef35605f06c2988dd6b8e9aa116eea4e1f63dacf100019844d37d163c047567e8e1188620000000000000000000000000000000005200b78dba7e423bc23e87c5937b464e97405f6461d05bd9d1d0fbf8f3c8e64a39081f9e43b4ec416198dc44db897e7000000000000000000000000000000000bdba1ed07c4a570359863a1098a73830818b3fa5b222316a3e0692a4ec65e59ca6b4bf5f72f8c1384e73e807d272d6e00000000000000000000000000000000073fa3eef473707b6aff37fb6f829f0fdb7ae808e85ebba4d4924a185c3656eb2856896307b671080347cebc32e958bf00000000000000000000000000000000076b56330f07cfc0ab34e98e2fa0ce4702b296a00f6ffee07c3ab523fadc048a047ccea7a9003c090951e4ef698d14e5fbf8322f706b1972f73fe4e22a3dad29c4ede09163561b2810cfc3eb2ffbc7ab0000000000000000000000000000000007252747c8275f87b21bbac4071c1826d166d14e6205095e5299315d6b6a85aed995f9ba59a2163ce2c51a8e60eaaeeb000000000000000000000000000000000460a000fe29cca24dec469ba5fb729edf3e443bb032d488cc99102a614a5251915267db003dbf395132d815ba78f262000000000000000000000000000000000161c01cb4d0942faf2303c108604babbd4cabf5d3d30c13d7db9428a445c7f72d96a7405e22e4e451058a94e20068720000000000000000000000000000000010ccf8a8ec4e6515b20e07057fb8cbecc5defb87480f3e32a1bcd0cfe239e00daf6a390c4815ef6b85be1f07a4c4bfbc4a46618381ba6b991b2edfdeafa67aef1cfea066fbffdba24db25385963326bf000000000000000000000000000000000e6cf781162502d2a758d0f96946bab887591b7c9ec9f67a1b0b962e74ee514e84c14bf67ae3c0a9ea2a3e472b7ef59c0000000000000000000000000000000001542b4e97f1e8a64ffd51ca43137b0660f897f6b3d5c6fee598fc4dd03932c3658ea55e1e9e73376e51df278ddd3a3f0000000000000000000000000000000016dae882ba240343e752eac68122424320d1acb1fbc4bd26c3983dd91325f25e1b1f06213e0e06c142997a13fbeca597000000000000000000000000000000001138b71c95d4de320f02e68dae9bb0de3e5b317cb596532c5cc18ca588cc8566c21551d7d55d685591126b9d9e466455cd05fce871e4ff11e7a4e834061c65a0aab7bfa8a0128d460a493337c6e63ebf000000000000000000000000000000000904f6a09f3a5f5baac902c702b059835737c06f62c2ffe9101bac32f854e4d72f74031f5410a5941612b1aaacbb50920000000000000000000000000000000012f39e7022150b2be12cdd621ae23525581405021b21cb9e55972724a22b1aeb2e15b135ceade132d3310e050e607f65000000000000000000000000000000000a92b1daaf23524904d74c3f149fcd2c98e3a4c257113533e7cc59c4656b785aacbf0ba6b9df0dc17cf7c25f1ca698c5000000000000000000000000000000000a20a5d7c0aeb16ff498f46bf05e512784d120b9c3c8b2877411852d7da3abde9e83a6d00213bf69ed88bcbb051a486daba9e37ae0dbb733af820743d8e307fc02a3ce9b40032b16d0e9466903de9caa00000000000000000000000000000000153918807d7da07ec7014154f00a558ebe0d5fb48fba4c16488d61a826a1eec28e3828d6744300c04207e8ff1cb61211000000000000000000000000000000000a755480457896c5a3fde35658e73fae821151c43fb92e9ffedcb05fabad37cb68aa24e029fc33a2518398d723c4859100000000000000000000000000000000148798bdc5b14b90aefc38946db93be1754f15d78762f38971b1e64a53fda92b96b0a70ca2548baec882887ae7f636910000000000000000000000000000000012299fc413dbaa77cf8867e331bc0602c4fb32fe44a150217de9e6391374a9ed83781034e5775c4933e13cdfffd25a9e6ef151662cba4952416eaadebfe5e0fa0ca1d31380e1540c2d5e0181af9e317c000000000000000000000000000000000fdfcbcce1603198fa344487d2d4838b3ff23fc0a73a76222707d9f8623f0b87dfc816be8717b0b12667bee460ef40f70000000000000000000000000000000015036dff68139419db619912e2d19b7d2a2d637fbb8bffcd941aefe2eb4d24c1f7dc32f4f53d4cfce67785e7c328d6c4000000000000000000000000000000000fd575be9bf54128a9a1cbd366339c993ced315a840d60f8b77e035352bf705c01a9def713e8cae3001dc1062cc0723b0000000000000000000000000000000004015ed456125cf0f46fe0093b81ff9315d955d470ad756a9303f548819f339e137305c58e6f4d8db3c8bbfab90718d4f0a3851bd52ca52919dfd21efa6efc56f6dd5060ad969360b1a731e8f38f0f5d0000000000000000000000000000000016d31e68cfdc5823970c8c2ebc53c3d4517792c44e90c10f920a819e72e4a6966c59a691b905c8b0b612065c56d86ca40000000000000000000000000000000005096d516e416fdc0df552c2688c74f1c067a3e5e7fd782479bfa468096e6ee3e601bc23d2e38ae7500325765483250600000000000000000000000000000000092c994e9dae287bb6450607a4263bcf6267f0f66ba3e63436292af7f6bc8e4ba794a12792b6af49ef59b5fe50ff6d3400000000000000000000000000000000175a645988f33612e969e1d91b2c30e47ec655ad655d89cd8dac151c3bd194cd5a8c28b498b1cc2f2966b7fc37cfc8c532b41960417047a2258b6e9e228f3cc1130b296cafbb75f58731a81fcfe8c83a0000000000000000000000000000000008d09ee15c80facf7e32b15418fefbf7e80400acf37f2a1bc6ced88b1591bcb8f86b45b544646c5fafa71b5b103b927400000000000000000000000000000000060865ba68ed8fb3d0a05779c278352b22d4244edb7add23d985a2836d2772dbffc3c82c3134916e9b0900c9db6ead8f000000000000000000000000000000000dce53bf8aca1ed44bee47096dd988689c1e32e1e65a5f8dbabab7c4edba866132ee2c036aba5648d0dafa9a26405fe30000000000000000000000000000000003319995785be720860bbf48692d1507185d898187993865648ded74d3aaca45df939c6dd986db42a51bd13579a55b8f71a6f7f091a6a21dbfffcec2eecaa22d05252b60bf91b56811a833dde3fcfde6", "Expected": "0000000000000000000000000000000010643af30c3cdefc30144c5d7cab17c9c54adccb3294ae79fe5c69376011c159be1e43940640bf5d9012ccdbc997e2090000000000000000000000000000000002a22b08904ea9ca99103a01caad745dc2afb7b6d23e666770e81a97031de921f9d4d1c04fa941c433b8cd9cafced3a10000000000000000000000000000000010808e5518eb6cd61eec8820b9f279dba2423b1a3677e21fe3a0ca2ad49fbab2995de1c5adc9ac867de79e3b40ffddf30000000000000000000000000000000003ce1270644d71e0055345c7463d72dc119495bfa04a818dd398d944ca46deb0aee8c7936557754fa18225522fb79564", "Name": "matter_g2_multiexp_51", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000059234bb6d1b66985b79e6a2c6cd158d37fc50ccd6e50ad2fe3b6a02ae2ad35b8b2be92139265957ea698441e780532100000000000000000000000000000000066adc7083a7f3dd75a8e431a36632dfcecc2527f261e961335bbe8fc8329d992880736bb41fffe41484f68c38fda61a0000000000000000000000000000000006aa0794c27d3f60debbee292c28b430c159cb2874b9467312cb857a8777058580f8a2d3b9bf4b8b732edb185cca6ac10000000000000000000000000000000000d81f222ed6acdf29437adf26d2b785535cd6d61b329df98be04114c3ae68bc6854e275792fd48de3eedf6ba7f3849a2e56b63fc6ba87cf021c2f92baec248756ddae0a4f070df840db281283a4c9b20000000000000000000000000000000013dab8066757b8bcce2c9965e600c31b792463623cd5561f7f6d55c5a52c22efcbe48b8684fc2dca87e2945765bf565600000000000000000000000000000000198a0594b5e606b18201fe2706bddffe7bee6c583147513333230715d18295714055b984cd3ff8d1127f9420863e3a67000000000000000000000000000000000ef77ae1e991daea1fe8338cf236ba959b22df4b24f00c6c01483b6956c609b805ab89712f80892bc0160fa3775907890000000000000000000000000000000004d30f5a866a100dfe469d4d0c47872245c4cdcfb18d3ffa0de422691044b52d2b9335682dcbf67aafa9275712ae3f5512a50af55f47fdaf176d4885e4910c54428c8ef433ea0cb1d009ea77783559470000000000000000000000000000000008010bd5fb5e222618bf4f919c203dadf9a7b7597bf90e16772020614481a0963a8e8b1bd244661bd33e0d147be7663c0000000000000000000000000000000007e21f548efb869a28d6fe39b999ab7fedae9cd6cfa531fe608476ef30c8703951839476811838608dac1aaf9cd87eed0000000000000000000000000000000006cc674c464f80cacb2156fc1eb680938cb38cc166a99f72daa50f9d2c40f10ff07e447d7bd5e59b6b22f0dc407dd8df0000000000000000000000000000000010b160c58ea82bc3904302b1b4fe83d1883efe3c8f52c4e05a3d8681e604eabb1b7f533e61c51e9a172987383506e7b189a012158b3c18e19471fca6d5aba5fd004a337d49ddef5db177da187c8cf1c8000000000000000000000000000000000d4f8372d1138489913654a7567735be1eacf8c7fd497c2216bf77a94f483bd4a7daa2c8232581d6815af9898a7569b80000000000000000000000000000000013676a1f72cc2ed80fa24f70fe1c52aad9ac13ad6cad1f519649fda6ea3787d86ea164d9ac86de96436e9db4fb4aa44f0000000000000000000000000000000003f7644f7ddc9276ac36aea5c36451f3d5d6e4c508932b16d5677977108f04deace5e8cf0b3b3dee88c328b6030f3567000000000000000000000000000000001953cf03effb7de9e62937572850e9fdeecb74fb4aa655de1abdc6e065920e6d2e51ff28880f33341443b5e6652eff4827dd109f6df1d9851dae28bcb9e552c6b1e1b2dfb331aa955d3d0b6c4862253d000000000000000000000000000000000c76a5bcbd2a61172fdd53b351d143bd30d460e398c9d4b7094a604ab2c0d46d6112bd8a5483c9935f0bf6d84df04b9500000000000000000000000000000000116b15825b780c49fb24617dca620e939e2528e10c49f34971736c82cd35fd3965088595deb86eaca3d3239c6c78a84f000000000000000000000000000000000a0cdaa541dd96fefd46b303b88f1dd4d24257b910a596817f1d946873cfd60ae58a88aa687ba573832331e8fc158db50000000000000000000000000000000016259f7285de159a2c6d6d8687ed348ab97e8cf329ea5de49b6d708b6da5b806bd012ca3641c50f479d85921e20fbaefca96785c1ab66cc5c8e434f59cc1ddf76bd78b6fe660f7cf74cfb79d7f2c7f84000000000000000000000000000000000797e815a98d362e1d7e2ac1fdcb477ccdec8ecdf340d7bded36856ce30e92b661669b38ecbcfb0896b2fd75df9b734a0000000000000000000000000000000017916c559db6b4b28b798c2027e2c70ba1b940212df8a1649b9f6087120660d698bea81258e2007edd4aa7d0d535bccb00000000000000000000000000000000167170a76db0783a8c3228f8246502b15d342b019fb44a46b514f4ba2de3ac66e435941adc3d91874371561870ba87150000000000000000000000000000000010097a585eb9264ea96904d8534820be185d8d9e4b1616439a926c0ff8ceb6f2bc082e5712454690c9c05b8018a996235aabd1fba36142bd768339e091b15b7f5b4ea609b57947a7187c498bd9833c2900000000000000000000000000000000025eff57e1f37903056835d1b4133ce064c86947f35859817b2cccf1a5c3923ccca766b3e0affd20a4a6df62a45c31000000000000000000000000000000000011158fce4ade070629162b2b6cf1924696f1f7776f3d623cfa3d54c66fc17fa0299c6650b709a1472262fc0abe8d9557000000000000000000000000000000001828a65fb90dcebe25413566deacf0677a3993b39d68854b264fe7807097fbd3106ac618545d3a6a42e197c65f0d2a7100000000000000000000000000000000045eb8164b6ec874467286dc3626fad3c01be61f6a8a88e5f88797978463db648a9b8a1e1a2589364ef2879cb5f75423fbe608fefa5472c7d1611abfa402d2eddb1e54542f45d4012db8ac6d1e5016100000000000000000000000000000000011847bdf2f67b40aac3426716391da488a8f0462b68bd35a8c1c762591e2f426f48f979a646a094bce16bc99cef7fcfc00000000000000000000000000000000092d61e408120b1549fc8d2174572eb7ed3f679327cb89754f326fa72fbff79e98cf5ad9c94c14dd86135e9aacc98b98000000000000000000000000000000001440e2f4ee2ba254a780a31b02babca093a38e5a1ac09ff388080b6c60918ae5b26e1c0888ea0976527ba103b257d02d0000000000000000000000000000000019797e49808b756128866fae0d6aa7e755a1d6f07f7e6a877bee150fe9adf0cfe612350c5a0e31d68cbeed226fa56f2a28d57066cce439d8d0385f647ed5e9b29e8fd0528c1ed8455f37dcd81f4b62240000000000000000000000000000000016d723a64ee06a7a631509c6e64b1c8bbe199952da532dd92194147bce9942cb4a76f2358e6c7d263916fa36e2c0c09d0000000000000000000000000000000003d04ce655cad1d63748f6eaa9912d6474a34820986835f60c812aee9980d3ebc18d6fd856a6de9546be024b2e95126a000000000000000000000000000000000ea840bd7f76f8e944f95146cdc9692d97e6a2d7d16d4a7f054f81888472da4d60ae5faccb72d3a05781b399536ccb1e00000000000000000000000000000000155a1c43c39e9dfc6d96e01c981662900fadf1a46aa1c2fdb70bb34e94dcbe86c4f255e259c771ea8ede50b388ceb2f61208d8d328014a6b2c8b2b9edc70589cdd63d38f4e70abb41cff1b7693bf9a290000000000000000000000000000000008f189d97f7d82aad87fb71d090a5c99d94079c0b74beb3dc860d440c0f46727fc49104d671bdcbe5b9551552e18afc60000000000000000000000000000000010c4edfb64b8932a617c316820cd27d3f6ffa89b471949362762af8e10d25265b84ca2aafd3b14f33c39a4b533da60d60000000000000000000000000000000017ef3bb919b087fb6745bbf115e2929394fbc9c89f65e7d591f15da93ab785aa6828ebb6ced99d3506810647d28ed814000000000000000000000000000000001591d8213ab349017cc93f1fbe6aca6765dd33ac1f468621e2c79e30aa73bd7606a0e5ba1d97ff03e0029dbc8ab1c5f4d3a2044ed4f938c17684413625bdd281f685abea2e375bece77c03d697c82cc20000000000000000000000000000000019b3a2df3a9571b066eb451e34d8a38c0d90b6e365862bcd92ae76195956c21c59441f0cd03cc69abdf4ba069759b87f00000000000000000000000000000000082537ef7f4bba5f32db4443abc8eabceef643b0878ef83860d75ba508369a3b459cad96f1cfd872df99548f656b0f9b000000000000000000000000000000000b2fda5ba0c405c9481edd598181ed8a59a8a18462508af8c5d66988a7a58a5c9635d93b5e0ee310bd35e0091fcd4986000000000000000000000000000000000af7e15e0052576f82e36e7e2b614dd835a290e05f2ed9dad7f508b4c04e8d437e7e937a7f4c88b5e66b06e0beffc4df7fd81e27a577b5e79929614c069d6d52146a6183822d25cf1ef84d8afcc1f6b40000000000000000000000000000000017a1d5add5601010d138263b4793149a02e8f4f7cfaafb69fde7b843a51cf5f0634e26b6e5e3315420d44b0fd205230d0000000000000000000000000000000013ea863ebe1b1cfcf4164d78dbe8fc809d2b82ef3e5a2589ca1357e48dddf2696e910a90301ed910fae77a1e462a5b1000000000000000000000000000000000012b40d9f25dc5a61454ddf1fa9c38e87eee60e55938b411bff9cf2161ebd7d3fc930131a198e7e97dc90cc245164e7000000000000000000000000000000000054f19ed8e2682caeda10c252f11706e7f3b65c81e7ae0a617469babc5f3268fe5c0ce2e85d44fb6731e8ac132b97c3ac5d47ce35d4ede84a83c9860322f582ec00c872b4b035d5d340981fc29884f13000000000000000000000000000000000ef0378945ae4683666099be36de3e60b5bae9c3137b702e5e4e35afd5c1e81d033c3d6b1debf5bf36bdfc4e3af37759000000000000000000000000000000000c37074af84ff596ff2c7ff963d96968464d6c8d88b69af64ae883457d02ee9ec80720661f39019230a6531a0f2952bb000000000000000000000000000000000454e8aaa2830f07d86eac7aca1d7589fb06aed646146a1b90f4959b5caed73131ab231313b50c15213f89566ed87a3600000000000000000000000000000000143516cd7a1b8da41226cb828887a0b3314cf4f87c207d1d84e9c49f0f7e548ab99e635bd126d49fd2e4dcea98f3adf784ae256d47de2d49b1e755cb0e972f3b614f3e7ba779c65ce175ca3811021a7f0000000000000000000000000000000019384e15a8754c6d85bd298ed550a26b51b714745bf2980b4920d6e73f59e657d85d3e86baa9bcf7e971233daff99d02000000000000000000000000000000000229d233d605a1a9f060605ae366a263594d8fa2b7797358ffe4c62431b9718d155d24d80bf5af1c806f447b92fcfbab000000000000000000000000000000000bbfb66cc0c7bcf251141c540f712fe9a359d1ed36d228379a1f3791991cccb7dfe1a10d40667ca062cccd55c9e6b08d00000000000000000000000000000000150a4d7a003cb81423604c13d0c5175183ab5f459b96842939f5c4cfbb9196db4667bb4382d2d5c92b70800adf384569a09d0136d4dbb3abfabcac55db48b1ce302067f413283fc1a21744f1c16ef7b50000000000000000000000000000000016352fb8e2751f126fd0f889f2a62a85b95c50d6bda7704112e4487dc94417218b0daa1dd6b998662af2582c44b011c90000000000000000000000000000000016bf4c60eeaca103c90643fe0969c2c261e9697ddbc02279f0d5afb5c905a984ab2396db93555cc2dd5682a1525446d00000000000000000000000000000000014be742feb1215cbdcde21e974c74e23c7bbc2cbfaaace28cf1d4f2b5a77dde2f3910aea74bc200277e6fe0475208057000000000000000000000000000000000bf98dd3e3a8b13e487d8b1a35615b0c6b0f514f9b8da7d6402586f113974c8dc9561db797a96f4f8040c1765518d175650a6fba1a5eace6b455ee780ff266c324f49801832640856a80098f0eed0b7b000000000000000000000000000000000362935e552dd01b5fc5a15a76faae937d7ad086b0a67e9cd3558287274106623deb85b6410bb4e64c424d44335f3b1e00000000000000000000000000000000096f23a54cf57aa3306df0a0a4f45aecb9b09bfe83878d551a59c53e18efc5a9f177cb7fdaec1648f66cdfaebb15c61d00000000000000000000000000000000135271fbe0cc0987e82f3430eefa8e3cdcc1be4a441393bb3fac0b8e8f78dc47ba2b833d9dca4277bd60befdf33275cf000000000000000000000000000000000dc1b7512fa5f9d4ea3f4229d947f43d7dc46b7770aadbd7351b6d48d525d0144183f2c84293c63c68d5262851401ae0282cb1f8f6d6dd81e7c49176503a76837a96d7f2b084d29d11dd9c6548cf0a57", "Expected": "0000000000000000000000000000000001c11610b63eeaf9e00552a230bfee290ea49bf9c93cfea1b6f684c9b5a07f341b718a0070534e0da9e6ab1239d800830000000000000000000000000000000017e8107113714ebb1743c34d83be3acde096bfb6cf140e943ecd0831ecfcd097f58d25a45005db61551a01d9da46de10000000000000000000000000000000000c2eff6c7c25885c514aadecb8f0465a0fb4385eadffa082e8d4f497b10df2395be5e7760a87bc26772dd78701146b730000000000000000000000000000000011ad4e20f5c1518c72f75d67a897f30100dbb83365ef7729c3501c6f266d6002edcab8c8bc1f449c30ec3624cda13809", "Name": "matter_g2_multiexp_52", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010a26eda028649789d9e01232884e4e5a6b8e0b17169b9d64393e2568b09ac4d3e61a5996108655c24e76abe9e3fb7380000000000000000000000000000000015e4e36bcad524f8aac7f909fbb884e879caa735f80fe9890d7874be919ee727beb2a074984c047dac1d02b8712afa3a0000000000000000000000000000000012458946f1e853a7a45861a92d4ce707e5aebbf69edfe69190c0bb130141a10869e2a73e06785b568248d5b1f647e63e0000000000000000000000000000000004d8061f25edb5a510a2db9e1df850518156138c78ace50f4c9ce47734a0b14352f5283083a232602a070c3ce94c7bd93d7f8fbaa4225f3008649eebf42315785ccda2b9ce922170e606876881825cb90000000000000000000000000000000000baa40ea518227b007b9714ae6eb5a4e92883dc75e6328caa780bb2ffee7573dcd7e9ac47821ac449187569986bd2980000000000000000000000000000000009d43d61f070ae308c5c285915600dd9c17b7de63cfeee6fe33c9ba857b3c72e057bcb4d4ac2b492797e7d785997c18800000000000000000000000000000000185215a7fefb96b3ff9229cc3239c3ce5202a97e275ea9b1541d7bc0a2931d7e3b01942febb45c6e96e66e3605744afa00000000000000000000000000000000103ae58b8066dd62c46c14c593c768fda91b90e4840b5560c974ce69b86bd6d2c13f689b72cf9619e57c9dc8e3d3fb15e71e6cb3d4e19f4a70a4465df6eec6326f558ee1cb99aa540ad2a73c363a133900000000000000000000000000000000075585f862c0e0e031efe12f31e159f2a8b89825ce80fdf65906474f0155f397fdc666292f6a7384cab790f071335c49000000000000000000000000000000000eba3d37a5cae738ab99ed9475c2c7fbb88ff54edb8490017162dbb16c8225102158a266fd4ba7570ee6d5ff6cf3f5d400000000000000000000000000000000135a0b0a38c036919f8389eb7bdc505a375fd75d513eecf0cac134645d60fb6030a437ac6a0fbbd167b7a77a927b3b0e000000000000000000000000000000001688fabd4ad751598ca036ec5ef6d7b314980dce7d8652163e89fad01b233af64defbcf352743ec478af42587f58177dbdb2b3c3b8e91540dc2724537526fd8c0d4b85d2cc20323d71fa5a4f61b3f12a00000000000000000000000000000000062a74a9ba0e2e8d95fca478be8d18fc716243b1faf7365a55387fd7188021f53bbe780e973e7d16c9db236faff176cc000000000000000000000000000000000f949be3fcf9b38995624570fcc9e7df9964d038eca189336ec39d9e0bd05148ff7df0b48436a2cf6e249e52248ee8a40000000000000000000000000000000007472e7c366419a0cab844522c46356acdf6a12cffae941fae3d3b78e7a83f0446c945bdf7b247abccaeeaafec49026c0000000000000000000000000000000006a564e6860b97feff368fc9a349282112e591a7a6987fd10a2d4de8ae4384ce229b9db9a93445f727eeec55a6fe5a9def0c8574167a3bd3b794f057ed01865ea69c38023dbddb0afdc55dd9523ebab7000000000000000000000000000000000c073d2885eb125d3e7db48127178bea2c5bb0f09eec7081f15bc6fe6cba156914fe1b1fea6cf14a21a328d831523ec300000000000000000000000000000000010d93564b2facde13d29dac198c5f5fa314a0398f30c6fb7fc9575bc83d4e97edcc1c1d34f78728729442777718f54600000000000000000000000000000000136a4ffaacf0b4a607c677ed343c1ad41a1eca49c7c48fe73ab2f74084a07cff18f07f54a7f8ea1bfb7fa3667863bdc8000000000000000000000000000000000fb0c007a907ecdff7bfe2242097caf0c5001124d112689a74544fe4fd85be9771632e7267a1cc7e9f66d7e4bb4c954c3ccc75501428d3be8bb469ed0f2df7dec10e1d205e11a907cc30c4a76eee3cc000000000000000000000000000000000032bb9f20fdb19f578fac3008396f5dd0a70860f77f8ae7771fc6253569d47b72751cd56bd373dbc5eadf55b99578861000000000000000000000000000000000c4a4bfb5ca6f9c1bd69d7377c6da405afc3128338dfddd9aea19aec5e1e0f547e3febd28445af5e27469c87c4ac15280000000000000000000000000000000003b551547af253d07625028db4b9a8da2a857bc925620c5d561bbcd3e063eb460d9407cd4d4813800551e5d0d23a2ea40000000000000000000000000000000006d5c69a251e9a042c66bd4ee92d4f3cd4e79704b1b215c15b319e09cae0d798eb201be24f407340dbcefcf2cb87da5ae5e403f555fbc800f1342275f18a73dbb679bd31873ee87617090912a52d6a55000000000000000000000000000000000a5802e388f7605bbacd0bb65ba96689e223379214fd7a92de9a313f55d66cc71ffc9ab3f9979b75edf55647ad3b6c94000000000000000000000000000000000f86f968b5c20a81f18074803e1ec55ebd73bc87451c48d5bb61604ebae46538dcc9d21cce062abc07b4b9e89c85bf60000000000000000000000000000000000f9fceddfa8fb5bd76fb7c8986372c32ab9fae3c26e9fedae892bb55178fa2f3432e6eab5043496dcebef46b20bf5824000000000000000000000000000000000dcf7a118881aea4e6a0e4e305910d4e4a5f3d0a8800f52659ac26f122bd63c8aa2c5583f1121275adc9af1800a007fc97ea57a38598204c15bf65e7270a175460510848540ca4004286f3ca09eb59260000000000000000000000000000000003ee0ba2b1de438abe66769124b97a951ce18aedc8d9ed005628aeebd90efd316e7a3c60cb5a103d6f72e7a40ed8f44000000000000000000000000000000000119597c99a7a16d8d35937ea15539089741363153ef898d6bb177d9a9b6c5bb4b79728155eacc5d82571f398ac6c32a200000000000000000000000000000000116184ac845a28c4f96641ec19a07e1f8326bd45e2106148f40277ae6fcf200d64e326915cf5c927222def8deccd4ff8000000000000000000000000000000000f890258e70b973c0d69492b2e7d10ccb3997798503c0943af4255c13b3856ca4007b18cb9d638d5d9cca71c368cdfccc54dd8cbe68d5151e4428d35ec2d5b5cc7f5e455207c0788a695c2d7fff6735200000000000000000000000000000000171035755bd519af04efdd477d407267c5a8108bd32dd6d3f1b9555f15f37ce7598c096fb5301873809f0c000457a4a2000000000000000000000000000000000bd35595246a8337a426c50c02299f297036f710b0979c7f981c6909e835c0d9556cf64e2676baf952a787e10d604f210000000000000000000000000000000006600ff240aaa026941290f49ae8968e72293ae7c2af0df1b4ebb9373199b95fc91feedd2782ce819440286aeb2388c50000000000000000000000000000000015b2bbffac097c27944143cfb22e38ff8e50e79f2336e64c8496b0b25892834efb18a765e26f1408df1d64f4b9b78fb947ee5651c127d7c8ef65ec68fcd97d1dc228bffb5bf1278aed3eef8115a5ae72000000000000000000000000000000001064bd04edf96a3c76d2ace669ff72ee5edd87d32592213cb5a6a4a482154c1723bc19c7c530d164c31626dbf758d43f00000000000000000000000000000000176ac06390e3629bdfa282bf825c0bca9bc4e0b8fd90fcf2d4ee456d5bcb3ac2882d8406d2fd59faf10c8327b1962124000000000000000000000000000000000b58fbe4e14ee0af03d9aac4131abfaaba43c7cd92d530802516cb67343b382a6d2af9399d93b43d6e05f7ec827d5ae20000000000000000000000000000000000bfd241e3180cd5ce9de831b24ca50db23685bea7e008be0c6ead11abee338618728968c25a8e5a916cef8aa516667214ab6a1d0d3f87e7c9df0c14b6fd2f9d0cd755d5fce5f40bdc8174790901549b00000000000000000000000000000000183ccf0ddeb8573923694decc02b8f02162037156a8f6523ed178c13113d094521c3d9257febcfbd8f15acfe3d5d5c27000000000000000000000000000000000cf716097aabb07979ee435cf57ae36a3034283eeec0771bea24c9a1a15ea106201af8606d3fc28ad8ffbea2cf274458000000000000000000000000000000000b962565763c4cc155b2d9ea104e754e5fb4745303240688fee7e2256fbda82dfb515a51096be5ba0b111637b1a25438000000000000000000000000000000000df04aea745b9df2df0e34153269958d3640c1596fdff3fba696801c96371420a3619c5ace9210af7e0de4f408b09a7729b12cff5a72f27e15032844fae50e3cabbe31a69568bc4b5cfa884f62e7e204000000000000000000000000000000000e6be3275371e533a676f8d075bb2ab8b0216642ecde13425bce4ffa8ac51cb1b4c5c789d82387f5355c27f18da556400000000000000000000000000000000009fa3a3df5195203f967322cee54a15d1e0096922b6b881bb3bce54587fdb82931c0b87de7a9dd1a21b4389a34d161ba0000000000000000000000000000000014dd5455deaa5ea4f9b5a6241c2e8b2230fabff9e1ac08b359f029f4c7838201cb88a92a5b696ed47819e4866512fff300000000000000000000000000000000181085d630d1e24ebf79bfafa134c08c0e75626dd400ce500392adf4462028bc714ca07b28b8b8f15c9cf2934a299c3092c1b10d980826351c3d193a0f54a7dd78a3995efb02fe5b4525fca8791b1c4f0000000000000000000000000000000013b60e3be9d7d43eb42f7cc2c0a7efc81c175b696e82b034c87d1238db2798d9ad6534b86992653d86755b4f00cf989d0000000000000000000000000000000009dbb325624e698c76b9d697e4f7f03e502ae1cd43b49a0957fc067858e20e8c7ede3577f336eeccee58cad53eb727560000000000000000000000000000000007f2f50be2c6fbc500ea347cd14ca195af08b835814ca515d14dd2f6078eb6def2b9475c2ce370780acf394065032d0400000000000000000000000000000000109803d612b9e27be5725f162d061b9428f363493c17eb39c097032039387d96d0939a06466470ab62ff507ff762fba78f715f35fc967837facb515ebff3df502223c29e7089fe6d2e9120bd3ecfcd120000000000000000000000000000000008a9fcb462412c1065dc7c3623ba5a980e6f86cc813b5d8eca6b1b8a302ee4176cebc233411f2c9ff171332c66a0d46e00000000000000000000000000000000058d2e7ee02bbd4896b5bcaac0f2b09c16d1664209710945c1f7f1a53e24496d7eace99488debb32afe10d7fea442cb800000000000000000000000000000000084d7600bcb68d5e375457078672fa07ba2c87c8ec5f9eb7b61a0232988b197aff052e7125b33c6657729ce8a1c668e2000000000000000000000000000000000a07c42468c7c65fcc984bbfc2f05bf452daf17d57e669ee5992ce67517e1c93b5f7f4c9434d40f3b9bbdb3446ddb982a9e49fcb12c0b1e9bcdbda52e9852ee0e98fa0d43f7476b3d65ef5370c9460a3000000000000000000000000000000000ec380d15e0efd71958978b1f9298ced4cc3322e472d03830ebbaf2a4601c8371e6bc1cad047b0e1e429ecf6fc628208000000000000000000000000000000000b278fcc53b7527545ae1340c24158ff662683919717c220e7d2838a853fcc84ce3915f105a932872ca7f64b7cf096ba000000000000000000000000000000001520798dcd146c0b39ee727e8276fd998de0157a68587c2fde56cd82a9779b6ffbf745ec151210d1e9143856f24f01d600000000000000000000000000000000175d53b992d750b34f9daa39aec918a0ebb2f539db8057eff1409492c90f79a00f14a4c53445c028bef5d6372c9f80c680b0d6316c5d62d41fb0399256c5c46ebe2a12eaad835d2c7177bb7325e21d3b000000000000000000000000000000000fb3863bc7b468f1a0ab0e4701ea392bd820ec5cc2d7d86b58949002f24c972f51f0f82400fadebef13b750884b35f9e0000000000000000000000000000000008fca1b30d4e01991811679f261d11723086753e816239c8c7ebb60ce9ac0ea207011a69cdc29e3336e8f589b71bdfde0000000000000000000000000000000010696ff9d78b48743abdc6c1f4b44b4c960aa516623a24da515206d95e65286e453a8f275d98aaa09fefea29e71b5643000000000000000000000000000000000fb4b5eb18b6f6f8ee7dc734e8bdb625a403dcac6d0cae363e5a7f3a834c8eed5f01fbc4dc752e228c41f3f9d992bbe01b96434f34fa3e00ee0cfe548a2d2ca29a848cf1c52f940685caa9a227e32a61", "Expected": "00000000000000000000000000000000165baa8b143e3734169986e68a848739ca05330786012de260148cfd0810ffd5659210855f19ca92566ea0d6c48086ec000000000000000000000000000000001225672112e0476418288f381165292a9aabd009b0d9e44d9f8f00469b2c56698f5f985ab6292c9dbcf73bcf610080a20000000000000000000000000000000005418cba24a43fc7edaf2fe77422a0b2e8b38a45415e13654c6176c8f7cf6bb2b80401534154cd3b23e977af589eda9e00000000000000000000000000000000067126ad59105621cb0931ab8f386570b54977563ffd69c2231c56e7961f6df2c5d7b114e0b1ea176cbfc1d657127286", "Name": "matter_g2_multiexp_53", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000139cfd67c3365c5b4422063d7901108c9f33e233bf6413ba2e5b2ad62d188cb50dbd3dac0f298aef7c1d621249d4b0c50000000000000000000000000000000012fcc0d5d09cb3d86895f76ac3d3e9fa9b2495110b0276e7a039d7d2fc2e48fee646fe331c1d8e6f019898ddb43dd09b00000000000000000000000000000000159356eb3ed0d4f146dc929aa6c77057be5ffbb064432d3fc35d346f19f6c1f8552c7079e27f3188bcf29941375e62c9000000000000000000000000000000000fbd4e9a57aaaec40ef9bce8b76b529bd2261d373f05fd69af58d1f23c089497473e44e937b2617a92942af1a99d031f10e0acc22c43080ab9cea11a60866feedd57664bbe6c3f0366beff177f66318500000000000000000000000000000000022ce2d2bee57f7567e9b52ae8e913c79e3b2dad381802ccad317b525be0b503bdfa92722eb0c21fdaa31fce2421ae300000000000000000000000000000000001177074350288dff9dd85dbee758fee1400cebc173793198a96c0be3bb810d352720e94b9bdcc6f5a8951b3a86b2a0e000000000000000000000000000000000179e21de58ff76427f5ed7c8ca3058d0e5e81e436280aecc75a3d989d1cf11d41734de22bda74cf0dff175ac789532b0000000000000000000000000000000016abe94a49f071fcd5e24b5f3a837fe3fe7c7dc53416f59d0469d71f144f71ade4569bac3aaa202a8479c794bd251645cab0c230c354cbf1a3c13c23a36ae5f2d5d084d7aaeb427c580cb6b9bfd9df600000000000000000000000000000000018dee638031a3c9b1198cd4a4f267cdd66849e2b80e3d670897d9e058bbe772936d827eaa4e78283d42ecd25eb4b22e200000000000000000000000000000000009c04ef31cfda7c086a31341434a1698c1132fb5916d359a523b98d05d57bb38a1e2e2bb779d4762f9d4ec24fbf2564000000000000000000000000000000000a788450652e0bfae66889c66b0dab8d1972a626facb690f8e4ebfefc7e1a7b2b58f6eed02c1f10a74b140a49b6c5de50000000000000000000000000000000009e48b52f2b0548dab1c0d260144ad2e66a22e0f1781f94071b5a3a08311d11dcad6963b4339fa63bd82b4ff0dabe685290608899cce4b3d25f57519cc881eb748e9ee7e27f7b21d69f5d8ab3650c3e8000000000000000000000000000000001319607058637d4b796020cca79d62af5862b1c186f32d99c0ff53a830888f297ac4389582f9fd010534d824522e6fe3000000000000000000000000000000000608ca0b4806f17b59a805a3f9f75e7a33ac0791e05050d4eb19f2d4c845fa4e4c738c3309e24a4524b6bfe716949ab5000000000000000000000000000000000a6a6201ec077e113995acb81d4d07d0c4a085d367ed740d26c4a0c04ddf28697c1cf5e648b25148888617ba77ced5e50000000000000000000000000000000003eaff54800dfc8eb3ce647ec4ae8c1aab6a87d4853a1ea061a5e6367d8ebc94243837d4752a1933f7eee0ec1ffe68c8b71debbd9f3be5d6e65e837bd78605d5653fe63025c320cf49c035ae66d8ff5700000000000000000000000000000000122822c91bfc4f761b65f4066a94c0eb1f53133a1355c019f04003e84edc5095523b2ce87ff24bb42425ce979743ce31000000000000000000000000000000001928bc315800ae9936e5b763bf29b19a9aeb71268cb47706494598e0ea057f9dbdda6733d9ea165acade87bd89b3ec12000000000000000000000000000000000a87c1ee17bcd7d348ed1a5022bbc7438bfad06172584dd8e3b51db4b3b09645290382ba991df37db0ce562c950c0e6600000000000000000000000000000000127c80da591c3ff8d300bbdbe27e0aa21b5edc1c1fd8a5da27f58a4dec3971b3c4f9631bde244a7072d9c19f1c0a46be250f62ee2c2972e751b36d95a578efd2fa5e0a2c1e29475a3cee48a28080cb0b0000000000000000000000000000000004bcd0a0321c3c7e6161cd53254353905c27d965f57c9783c3fa7cd5c55a5820116415ce45491d5d1ccef6017ea4608c0000000000000000000000000000000013a30e19c43a1f466c0c3ebb5cf1b57c44434892b18a7fde18a2a29b09a5b4d13d26cef871d689d9855a73a43d22119a00000000000000000000000000000000066d6b3c9a949049413300ec0398d605277911d7be327b1d816cf25543d1b2d7c31d912f426021e612b56ca288b462450000000000000000000000000000000008549f4dfdf018073cc4e32ac930397659ae7a59ef42ca4f864b26e4635c2b7669186a107e9e91c35f04674d2be46051ad08c3d2c36085212542427c1760c72f22838be5286402ef87403f816f4fec950000000000000000000000000000000015900fb486bd2c066cea98e51d30424681fc3347a1cfaeeab65989d1adba104a362837bee51b8b953ebb520feb49aa6c00000000000000000000000000000000198ccab1f94fa910f755936e357a92d358e00cf406894b46adcfc301918c4fd7cf7200a1ea515343d577d920680c83640000000000000000000000000000000018d9380a8568adb92f8f9f67c315f2a837d542b32aa82d9bbf5db6dfea27260738bd0a03683a9988c6c3370563e7bb8f000000000000000000000000000000000528ad42f23c4e21a687f2303f495e962b0a90713d6ef3abbdce38ed166ffea9c132e50c5b002b2ddbbd4933e9a1aedf6ffa16b6fc4cc9509a2b8d8434fa0f4f38b4cb4eb1bf7f545f9f43b9190cad890000000000000000000000000000000017eb2587aef34b03943a170d91d99aa16ceb2a36df3068663382ff4c135083c998743f9145a2fd5dd4ce3bb8b64cf3fe000000000000000000000000000000001256fb29c7482e5469d64183e3e848e5bf32f9c495cc495c3f8cd8e46f71c3f9880f875cfe429677615a6803f849952500000000000000000000000000000000146e2f329f86ddf5b0b17c37aa2905122f457c2c812782bdc15e132468af48c49b715e3080da504d59414ceb367596f100000000000000000000000000000000022a8e385972592430e76bd952a700df8d35b32deaf06c60173d0048d6ea22dad95cc62300bc1a60c6452c41b32b504a1271d29abc5f972809461a1afa5eb186dff5e28f20311a1d8416f8d54fc4b2d90000000000000000000000000000000009c80b3191783d235814fc86653bf2f9a32cb7938111408087b6ab5bafc480583e7a2a32c6bee0ee4aa867ad5dbbf77a000000000000000000000000000000000a09af60eed6c47a6c2615cbfe62025530b35727b42fd812032671ca1eece6694aaae259b05906faf7fbb54362ea890900000000000000000000000000000000055c5f0818f41e5d73e8cd5f70fa77cf477cad8dca2a88b8970a3a25c8f38382268e439642518f1974c5b470cbf29699000000000000000000000000000000000834e44669043aed8ad47cccaaa7476ad830e38fc1def66aa7e8207e889ac0fa1a931eb1e90aa6e1cd694bb95056c3e63ce55b3b32ad29dca1a0c99771fc8f7179851995d5eac804458edede9b8dbcd000000000000000000000000000000000190f8da34caaf472ea9b0f41851f808bba402b9be4baa5d02d1bcb2f66acc3172abe78a49a653cd24dea402dfb972f670000000000000000000000000000000019931343d0e59f0f0a060bcbbeea92fc4670db510c017fd94e0650ace68c2925c627f373d8e755813c199b79c70369f20000000000000000000000000000000013ee811cbc036d2786d8ec0339627d6134b10517c8858f6c6db19a9319636459ebaa217649825ffba32a224175267de90000000000000000000000000000000011039d587f3323ea9d3c50027c427fbcbbf7e097533d8a5f7a61520f3eb548c399e401df0f51884395ad6a338c0a3500c6fa7aeb016b3e3f599846af83f426b9ab85b6857f901c49554d03d27a390f5c0000000000000000000000000000000011d5791e9bc632eb63bff86aa433e6df463a84570b779c913f67e77fcfefb6af48f3df2174096a511ac35eff64e0e5f3000000000000000000000000000000000282716505907931bc93748ba1729777b959d65aec5a78c9f829ae6f2a94a022116715a8c2a653a832a62625473a0cd1000000000000000000000000000000000f694a16ce7a69f0261a0ae19478003dcb61bf93a2ff39f940fc4718a38b9f4b6ab13527c5b438d22499ba29c0b5461700000000000000000000000000000000031eab53440757e4065804896e9e811d459665598546796d67472054fa60e5da8685d8e847eae342e44730056757c6287275a8d16c02389795d54ebdcb70a39fa885320d00cd4e5aa15967916e46c61500000000000000000000000000000000138862ee422bc0f38ce3e27ed3c1b71f71a03d61cc474d989b0cc824efc512ef173ef17bbfb2090997eb9435f4d23e0d000000000000000000000000000000000fabf1fac2ffa25d9c8cbd49b3db5dfdbee52adb947ebc1a3423c9fa2f9d3d29329b60ce0c1c739c7fc6d5a5d3b9e96400000000000000000000000000000000090d92e8763d4df49b8121a50affcecfcd632923b5fede480a3ee79128781f3f49b592d8f65d30adfc75d8a1922c41b0000000000000000000000000000000000074456b341565b13ee3862bd87b72f9d01754c7715751738c5b33ee85e3d8a6f731d7292bb485b5fb59bbf3ddf9b0d0dbec9767ed2dbde21fd8f315ed6292b5b0b1bb6daf2b62665c34daed00a679cb0000000000000000000000000000000007b85110889fed72b3654a8632625835cc041ff0a827f3e1b86c090d816d98cb3b4be66b6e573b3dc05b1998f2772f0e00000000000000000000000000000000160524507679ee021f4307e5a9fdaf01459cbb9a3fb9dc8be5599431e2a8bef38bf8a05d601580085da503dfcf57aab7000000000000000000000000000000000f98e2e7ae9cef2b1d954b7f26fa1755258112c496605c3c77408786d4b210e51c76f10870f558296993e0ddcec3d76e00000000000000000000000000000000068841825f5f5d8f622c1d43bfe090d11c6996688589c3d644ff5da47b94c0638128878d51dcf6d43637781f0ab21a68ff634fd89223733f407c242e52f034691036c7ca69f30e6cd444c561de9ebdaf0000000000000000000000000000000013ec97016dc3d6a3cf41edcc18f88f58b1b88cb2616bc2a8f96af3e7774ec1aaefe86a86135a20ab7592c874a33a8e1b000000000000000000000000000000000021dc7e4be6462d64ba6c09c2d326ca0164305dbf5ca1981f265a1e50f1a646748ce66ae07297230325937faf60709e00000000000000000000000000000000121bda2855503ef11b043301cf331a0fda6e5914e5ca657890ffba2542d908f8fb02c2c93cb4ac4fe5bb92eea757ca7b000000000000000000000000000000000386fdda56c778a7552dce451a6ade55cd24bf9eaeb837ebef898e2e868d05eb5edfe97bfa8eff8ab7cbfaca3c918910461d349e9711fa701b92b62dd3e3569d1203b6a35ac8600367a4df9a9484bdb0000000000000000000000000000000000763746ba87e8bb547180b0bf18699ff74f11154a06cd77a76cc9c264db7c48286fc52e3ef2d30ca914cdcc5c4ed46ad0000000000000000000000000000000018037afcabd273413eb4a712f5d1888249dc987a6fdb8befb92c02660604bd11deb33f283b37f88880cf1be2b2e71f1c0000000000000000000000000000000008ecca3d1652be4764720ef13a6ed6164a3ae89d160cc8c2c8c37bcbaa52db0fc0de84fbe2a19b93b8100556fce0fc80000000000000000000000000000000000c5727babfbc5c36c1d57b9f69c5b41823882e0196e9e0a89d5f4380c4257818d90b1fa6d782e774f2424209bf2e6b5fcc110fd7a6ae46ef78c0e26183e707eb5e0a2944e3afc09e435d56e91584b93d00000000000000000000000000000000142d41630fb9db2f9630e4d5f9c13069242fbcaf1dd02f93224174567c3f944fa02b9791a409d9236d89df6ad785e8ed0000000000000000000000000000000002fb5fa0b3a7cef16e5638f217bb946085fba870836c618a7db9b4394da9144850572daccbff8208f14c8082aaf1ef6f000000000000000000000000000000000a6be9b4a6a9b96d2096eb3a95780f11be1e13bcb6e625517191822403935c52cd40481bce2e782c42b11321cff2cb7f0000000000000000000000000000000019e2d94e35d608a50b5c8b371044f6410dd6c1988ec7a677016d4b52cc3f21b82fbaa7db897f7107d81a177c31f8e52467de5b9bee26b26b28f81d96e880a3f07dd04eb56c15314f1a789436e01adcda", "Expected": "000000000000000000000000000000000a6f3fcd812e3878cccc6967d49b104599fdaa80cb5dee7298c3fdc80477d277f2c68f1c941f6e03441eb176c222a448000000000000000000000000000000000a4007cc5586d677e7945dc8a5872b4839d5b256999166e7fe8efe4d56895f93be4659f43aaf68c6070babb6d3328168000000000000000000000000000000000cef5304a1077c8f31d72e6f1f91ef5a021d8ba64719b4527225b34e615af388d9b1391f65511eac209ff5e86244039f000000000000000000000000000000000c856e7847ea0b4a8334d124417b45a8689d5d9f113b99ebbe3af3f9aae1cefb236d751c40488a861a8f0e0326b42c4c", "Name": "matter_g2_multiexp_54", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001805009a7fc3d1705936696191c163a07ea992cbb4bec66884a2d58ac3fc0e16b6e0d2292caccb3541f39b7fd6098100000000000000000000000000000000000f3bcfcb0c400d3d06184563204bdee465de167c7d17bea2e2150fe12eb9bc3285f5693b222fcd224181f8d193b7d95f00000000000000000000000000000000028d60b7fc3790aac7f6b3ec32c4be626a2c64c6348fb8a1f39e58ee56b81469e04886ed9be1388958550c02ca9a75b9000000000000000000000000000000000b60ed8052e43e99d3c10a4b97ac3197ee3cc04ad857c5cf4d8ea1df2671084d02fb683f28f5d499910351354d5e6288624ab43047c02e30ba2ec671511d06f869bf736a9866192c5f2eea6c065acea40000000000000000000000000000000002ddb1a9a88e3a0697540cb008bceb075e87e2331f6e9b68f8ffec48752d93cfda5fee121155ad2a142c0ec42808fbc200000000000000000000000000000000144b694018840835fa9c50fdf62c2e32261a8350d2ef074dcf7d016af982316a0c6f9e5d15d29d3a54d8d25aac5534940000000000000000000000000000000010a3765089ada75e9eb61328756ab9ca7b8362cf86cc82af3cf43f390a0745954f28da72a6ea4eb904a040596795639100000000000000000000000000000000056b51dbefab453012b35fb6e06af06ee92e4e84e92a9967b379af760fdca4a3f10f938684a646fd70a2188721c92e98edfdf850c0d3e3903404fe3e0f523cd230cabc45946c4fcb6d0e5e05e388c23500000000000000000000000000000000169effb324d60b71dc7ba975e3d5f18700b34cb9017f482f64be37c4df01fb66ee9eb5870e43649225c9a88a0d499b890000000000000000000000000000000016c7ad9c5f7b65a9423f642d87621a5192d7548e1099d774a99a34dd4ec9623aa1168b9adab092b3cf450f369bcb627600000000000000000000000000000000123b35bbcd791ce0d00148cdb3d35ba39054a7126ca5ad3351fef1437461379ef639896b271276a9561b46e270f7501400000000000000000000000000000000161fca2deb729fc55f1102fb75ff466319f18510fc66d6cf95a8256118fca618682f00318b0a5297be873a2f7af1915afeb34852ce0f3b5730962023418ad6cb860716dcb526dc53e8ab6a74a6a3910b00000000000000000000000000000000073ad8c2f713288313185c3b2455ade93d58e70d5df6b8dfaac8eccd990fca6843778fe42cc8aa6f34ee44aefb49397100000000000000000000000000000000012eb9cf288a366adc58d40c9ea5f2cb5dcc5b04108e3822266ff20eed71f56bd74f1a2727f20d55917adf20b6c4d6a1000000000000000000000000000000001463db177fe5c0dcb899797f89da963731dd4e9e8b2eb77b465b98415dc95f6d5569df51bd2b08a13838f4cca4b62fcc0000000000000000000000000000000009c0bbadad98361209f36eb23a9eeff98f6eafc7d5327fddb6bf43898a2be704520a005b84c5b45c6a68bb7c98d65d6dcf25e64093bd92a8fb394511215a3fa674db86d7329ac5ea70ec77d24d4ac58e0000000000000000000000000000000013c63973ce6549ca3dfe8ea8e3bcd6b0bd88f7c73730834d9ffe2076cd4345090d0364d161ae8998af1048d102f22e5d00000000000000000000000000000000060cd24eea4177c9a5c37038d4cb62aeb709218fa8e64b9084e002f53a0c4c411825812c20df282345bc4a6aabfff6a100000000000000000000000000000000106ea864dd52933be02c1a79cbaf6dc81ae9a2d619bb368c4abc36226104f3b74fadfab906e36d4852a6412315223bdd00000000000000000000000000000000192e45153e4942c88bcce76098fa51782a81b53abddb4c07bd79a2391be68858e2d278969b9fe75bc652d02fe4db1a130b40db4f9e5c27a3208899f4f536880b97f4c69e7d889c0726d87c3fa27e097500000000000000000000000000000000101ca1625e9d4a51e08f5eb81387b361f6445eb307d9bc92acd29d62735d4e5078b1a9b36b94e4ea0a314703a85ac4cd000000000000000000000000000000000f134c460c6d931396a0aa397558975ee973e642f1c4a32a3d397051fe250daf4215ff5ac4b2863d570c87f0e32c8cb800000000000000000000000000000000008eeb127a38104351298ad77481c32bf51bc5d3910b03da0cc34062dd2a8766adba6891cb9fc579672276666e1242730000000000000000000000000000000010c896ecd4bdc1ce010da81a51dac96409079853635e57e5c3a5733956a5f5a9c3ea6838849e286ce0405dd54d7e32d6730bc7f68d8d371d0bc51d95f8a5899249b8db5cba0d21fd88ba6f86d8691659000000000000000000000000000000000be489a1c71246adaa1c1dd6d2ddfae9523fd1d58d00d4f189f56d08632dccc694e63b371db6922a7f3faa05afbf487500000000000000000000000000000000174212b6840a797f0fe9e209b41f55aa5dbf169a2e2ecf05de48c44e608f6cd6d98ff5269e5412defb431caadc8a09c3000000000000000000000000000000000f4501715c0c511703f6236caa82479b3368de430f2c2d95b39193537be0b990fec1ed8e4d94634ee6233cfa359b043d000000000000000000000000000000000f3b4712f95005004d99fd739affc532d2c4c45970316c1a43f76fa9b57f6676c709e8791c276237b92750f5bdc94492ef06360717cfcab15be966cba2836b97deeedd20a52f88c73e2a583b64c8e5f00000000000000000000000000000000003abd36736fec3e8b89863670666365b169d8510090a89007c7ff3a82fc62ed371544013a1444fedc4358e92ceec62470000000000000000000000000000000008229855468fc63f4024938cd6f41c6e6a5653319cb83f38ab7efb9e9d281166261e7c854bfc08f55a0a9ca47e54dd42000000000000000000000000000000000463ccacb341fc5874f6ba2d44efb5cd24e9409b2ce7f43e9d39466288dc833a45988261f45d34332f416a68c5d10ce80000000000000000000000000000000002baa086177394203a04ce1b46415983399e60986531967b690b1a13cf8ae039b56f0a00bf9aff357d51ac57f8fac8b282b7d8b8b9345bf13d0e113b662141f5ebfc5888a5ef8ea06f7d5d137324ebef000000000000000000000000000000000b25a203268100df0510e4155c594a144dbdefbb0ac95e02bb4b3799aee4e738ef4c52f03c6937cdfa7275c28f130778000000000000000000000000000000000c432347a2534e86e90ca346a7b8b40f45075727847fa3ae2f2e297baa14aca88ac6e08342f0d248a92e2c272841fddf00000000000000000000000000000000057ec8099e1e30329762ccf0641b45e1a226f7b66b80644fd551d6fb1f2136afb8e8ab5c6905ffc7c24e67d7f21863e4000000000000000000000000000000000a9e472aa993bea05961affd6782efe8f50d746928efb8fbd328fb50a254db861c90db8df7faa7da8266ceb47fa1a13a2396fe15751bca2c4a651445cef236a865269849908df53551802dd378b892cc00000000000000000000000000000000025484652f18e2b32e2bbe79916c8bad42902db5528fc45993e04daeca008f3c2ff38fe4b48c292f70a7dc57654233400000000000000000000000000000000008e403f472b60a6046fd190544a1d6b249dc97cbd8641c62613f4de0e0fa9f5456d843ece4ac2b9f4ffa2c0278e61829000000000000000000000000000000000824e0b9b03198597fa54252b3df9690df678e9c6d82301848939dc55ab25a7751bcc2b99786cd31960ee7030bf68ac80000000000000000000000000000000018d1d8c7f2b20f0ba66db616322e48ac8f1d6f4205f228ee8ee6cd13d1f64be9af338c11f511859baabea3e15d165fc09a5897c9596223ca4d6628ca1f793a000aa21a739a37faa28637692b754148f80000000000000000000000000000000002845c4255819ec6e97abddf4c9db7d91658dd1d55328ab0565144b377e20ca0743d93fddf68acc985ceb7f7431e30b0000000000000000000000000000000001577a5691f2425e65ffd59071c2bb167ad05a8fe23c11c7f7464764442ebb2f7a75a8d02594d4426c1ff022f7a6e19360000000000000000000000000000000012c6ffefcd3964362f1373348404d04d1849e98ffbef7b5ed5704d74b9550869e30a4df26e74b5304b85c7503f7487f1000000000000000000000000000000000faf3dc42113f27ac27aae36725221d04fb1ab46b59e16277be0758b8fad706fa237c0c7627771d8e8d3ad610f63619bf20a2973faf886556e5329363bd9b9c96424fcf2e953df90bfd011ec07bc66eb00000000000000000000000000000000044de166200ec06bcb88720e57b84cd8f9534d1fe303a26aca08cc35104ffd7e81a6473c08b28037118dd8a61d090e910000000000000000000000000000000000f4325ebaafc67945de2418c81f5da92da4e67866ab5965eff0f392cc527fc34ba4e7e16b91c26aa370b27eb6a07f6b000000000000000000000000000000000e1d77ccc1c196cf1cdf0dabbee4829d56e937372e9f5613e261ca07e19b3fcf10f7a45c490b98b5a64b955eab5c4f2a0000000000000000000000000000000004ba2e81f901b0da1ead004c76d43278d372456c0c0a8c6752597823d44994177734ed3f355aaa22f325ea36b7c9eba1f4ddb773155a27badba330ae5d26096f350e9ca2811feb227c4eee09d2baf32f000000000000000000000000000000000c115e270ffd6f2cb9bbb2a62e04c3bf7be9d7db783d292bed272c297773b39e9e51c75e5c79a6606ff7d0bb9ddd040a000000000000000000000000000000000a57b637126b16b23bdaa6a7cf2346f33778cebdc0c9943eb2985ba5c4114674cd596ecdb6959791139c36c22148ab8300000000000000000000000000000000177c7ed16c29d99d3d98c6facca9cb5ffe72e6aa63959dbb51d9382f0fa49b02a1652a398eb223e093516ebf134448c4000000000000000000000000000000000d6bd518678828f582fbb3b1bef725e66f442c4d3e6325fa571e13db492300d03c0188399a2ef9d5687a76e647873c0f52e4030b5a4bfa767ae20cdea7f464dd2dba51c9c698556d24b8f3d4d1afc82e00000000000000000000000000000000085d4f90336987f99d250067c2331e7de8f09a80d71fef0570ecfd99e409c1f405058bd3461c9f8ac5ccda406db89bca0000000000000000000000000000000015f310660ca6a0c06b458d0b840a5c1c476d5175d9ff6dce6334466d363d319939572a2b00662247be1ed0f4e6676f8b0000000000000000000000000000000011e9352c0f81bd3857806db678bceb2150848f2224ddfc43fb0c733f0689ab4fffde50d5ce04d54055d27d7702e5d2d40000000000000000000000000000000005d835d04dcf4199130d6a16e86cb97f4ccff58c496594b83524dcd88f5570212f06b744379288f2a737c7a82e897cedd32e0429e7934faa526475c5c7fb977c3030ed74e145eba21af2d2cc8461580f000000000000000000000000000000000f7c4e621c37bd3068a972b9d4211abf9026e438ac7f8cb341516f7e6aa4d8bfb3536389e9155029ce9e8d5d376eec1c0000000000000000000000000000000012a46cab2624797513f2acaefa26fb22c4bf29188881690c350593fd1949cbc243c9d1d7d27d9d76aaccd347359a45660000000000000000000000000000000002dc383d4f9b75907f74bace1769bb5bb1b27a597c9548310f2b5f90098596fcce6b5fe0c72bc8be9037fbf31050d74e000000000000000000000000000000001900deff7ddc62ac302c941e1d2a28a4bd2351edd7700042ea4c4a48145ef91688666d8d7de503913ea259f0b58809f21f700d651c67ca5b8d95fad1a8e412befdf691b074956bb8092938bda2ad26940000000000000000000000000000000018ac8048d58f7b1a9407d3101824e3640eb20633f8ffdcc97d43d1b25329a2a1e91added42801c03635ec904e627eb690000000000000000000000000000000000b499fbdbe2ed41dfd6c454796e1ba57021f355a4de8f60964c78dc685e2ffe9c90f5a1f6c9677514ae4a9c95c8d6450000000000000000000000000000000009d10e5e2bb69ea6fd820778f75a2a60627802a49128c3f999d8c1cc2ba56ed18acef354a2e06fbbdfa7e7a4ade7529a00000000000000000000000000000000082839d66a18763656c2ef7196a1d83bd162e1f109b54c5a6095cc7c436e8a4888c4001696958270f54f61b81b00b32d83052a3bd7a13bb1ccc22b9519c7ab12d2dec67924fd9f15f96069de22e7b692", "Expected": "000000000000000000000000000000001463ac5e269d286961036db48ae33fb868a28b0dd828c3a66592ff9dc115303bdf3ab78a8e1f5df68ed1f3b4c6c3f2440000000000000000000000000000000012c64ca0ac10ab616fc733f75fe6181814e9c204f9e4eb79487ba49e3a9746b9b7916a1d768f2ec573a4c4e226365f48000000000000000000000000000000000a06b5b745dd92adbe1f4cf30c79ce0c48428b3e3b05af1585c4ca12eb2e763ffff46b55a060913e1f77fc9b0b085c9f0000000000000000000000000000000006271931ce9c8b9cabdc932297f3c87128a5af25a9f77e71ea4e588f1e88686638e89a8e212c92f6472692be2e05fa5e", "Name": "matter_g2_multiexp_55", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000001bf5b74c1ac89d4bab4663943e19128619731e315d2d7b39675f7c43493b338020190a72cc7a6edf0b8838886a7fe6000000000000000000000000000000000713f413bab7919cd57c2de3349394121d6bace3c10df0e41a0ab895433d225b05cdb1587deb93ae6e56ec26a29c39f4000000000000000000000000000000000dfb11c9c0bab7e4d1ee39941d5f6b932ab473567be2329c94bb0b146c46fc1c2cda25dbef8ff9b0066bd4ca3b6da67a0000000000000000000000000000000014e399169243bd619be7f2120b2cae5d19b2f04185aebc7d948007c4d3345a9f45249273b6290c2e86448648868ac552c40774f67a651ad70f17393b386e9ea9e81682ffd78db7fbc17cc5084f3c7052000000000000000000000000000000000a67bca1f8a0b386b2a67158e80262f025b225535a294394584118f9a701e31e91b2c7eb8fc7e28538966b967c139dc400000000000000000000000000000000185e8aaeec9b9abb9f0d6f34e2480e9abc30208eb1c6e023d4986d544b356a387c323c9edb5c52f5a2f0bd59cca7df98000000000000000000000000000000001877ce1ca6e8b30df86de688d950755f2708fd6f933c07ae45fad1b3e43337f1a8454ca5d2a80940e8fee98fffe953a700000000000000000000000000000000117a0ac9d27292f967ff5bff2ebed5d2ddd9f453d6aeadd9106eb52b53447974561b621fdc1d973c055f1cdf824c367bccf1e36e063a5fdd4b735dc18bf07703b80c6b72f987c05641612d7ce73562c00000000000000000000000000000000009fc4e9e816ff495dbfd4f745106fc90c023d95bc64b809801d02dc7cead905177ede5016f537243660e4b7f54a02ea200000000000000000000000000000000180aceb6e9851a11a1e34502897299e7db3e09f4970337612634fd9848d1de2bb3de8ede690ca051a75add5810ff777600000000000000000000000000000000199f3c43d429fe8f73e20f81ea00c4e78294eaaa29fd67563664381db3cee2186b387b880089cf96fb99c2e22c95449d00000000000000000000000000000000040b20ec4e685f104be188d0f15a79f27cf34dd01f813275f6019a9ffac56e234b6c967c80745294d9fa46e0083cdd907ea75dd2f54fa6413ba77f10a11e12abea3a4b947116e1e7c9334a0a37c3963100000000000000000000000000000000189fba635109ca215bf3a09c3e44ad65f7eaf653e0929aed39042e3b9c8b1132c5fe7cfafddfdd0646514aa1f9e7e1c0000000000000000000000000000000000c28f598c80ac262ec7a0e0d1c867e01ef26f182c5df9ea7f88fdf8bcf3a5d2f06128526b1ce72cead8ab4286a0b8d030000000000000000000000000000000008051be3328df43b79dc9040ef0a0263d474acc0edc023f300cdf7c13088d1bb21b5f37ed81b38dcf8718bf6441605f8000000000000000000000000000000000d2d474723c6c246dc59e683be147b1a6bd6e7d3cf12aff7b636802a99954e7a13c9ea429b19833a985ca5649b1a998f6855c61bb7d72b022c16290c6d3ca9c1255cede8e0b827b43e40fbf01840397800000000000000000000000000000000058bf424fd68aac77c42a046f78a55729e6b5b3fcaf436d0d98354b426a95904b55cdffdd9a8892c9f56f170ca8811a600000000000000000000000000000000142c1ded08928fd155b89bcfaf9c8194f4569b4cdeb3bc7286f4dd79e822f5db497768220533b71be8c71d121e557020000000000000000000000000000000000a9c753686534bfcc295eba0a617f86d7f9e78d3fe6d52f26cede97a5b1f107210a757a2d89361645856b7b20e89185a000000000000000000000000000000000f745541841cc4b5352f659c2b7cfa8d51b07f91b0cb8c787b4492bb4b94ea27117695416e2806e57c38d7e565b9eac67fa8503101f392a6c6c27300b6992af3fcc48d47f73db67615a44de883770d4f0000000000000000000000000000000004445d4464b51d6b12f164a49ee3b610f11738d60cfa6e02f8c33b168d9d5db90e6cc558cd12c56069571567d91183a30000000000000000000000000000000009e4b96c2b533a16803a36f8d1f179313b7adbe6c4b90716855474ffb2fbe087df3fc0b4ef14cda7d958efc5c92574ac00000000000000000000000000000000104dff7c859eec61a0ff8e0d831bf9667226d5bdbe298400b4f9e3159a64b1bbc7cb9f4ff9604e3ced40bb0de0455ce300000000000000000000000000000000134bc2461459ed6f0d96aca02b62e3110c2009e1ba7d3258656e9cf97c2a1685faf1f61733ce6ac3af7ef4d73d0b43b1dd947617bcb7ca1c8fda0d49e6d950a84d60230bc2411d42ac32e3651f48524b00000000000000000000000000000000104e5709f8edd71f50eac1770ff1c2b21f5ee8cf5a310fd1201109d1b73cab69913bcfa2d27a8ba16d974e9841586ebd0000000000000000000000000000000003a4bedc6277c61825f6ea1f438c058a1afd494c384689a8479195646888eecc7953b8b8aec849fb5f19a20071261336000000000000000000000000000000000856ee8eafb9b3d25fde7e38da4acec624d1444337b87b0b1a660bf497ff37929b1ef9aed8e1fb0ffc6cacd8f0d1a1a00000000000000000000000000000000011b52192c88264df56de3d7b14372443e25183bb816ea1c0346f15a1f324527ef8531e27aac3112e2a497a0eff0d5485b4cbbc6d537ed2b69c2c32c84f3cea3d2db180b64861859368e98aca32bceea6000000000000000000000000000000000a696c83010719161b6624aa7756e6e84980518416554ac045a93b63c2561a68ca2ff2fd5b6d2d667822ae4e3b3a2ba2000000000000000000000000000000000fb8fdab4f177b0dee52bb5ba615b1d548130deb87b14d05d427984ec148a7a94efc4674804b3660d0f7aae2b49f7b1e0000000000000000000000000000000004914c0359c8e23a7e431e517cb83e5735cb2876e8b53ad45abf1e9eda06e736378ce03ff75002374d47f1bd45b08e8900000000000000000000000000000000139abe340c2d773cc45cfc75c47ff31b2dcdce27ada3e6d6c0823f37e4e693ca30342fe41eb96dde464d14668eb72c5e457bcb8c44a2d9d1facb39ba7ec8ede5d5962b3256d9fc2e68a1ee5a733ccbd100000000000000000000000000000000180345fc01e3fa349c45b1a7fdccde5f9ee70d7d65510e8b4bce654f2541fae7641ad86f9bbc1f02e93e94422433f8b40000000000000000000000000000000006cfe7026cd423be189c5ade8de197aecbc9aefd4cdbbd2aeacda816247ad59ae06a5c49b0e29bf1140f400d46845191000000000000000000000000000000000cc4f240a317ae9ce75b44fae87c92fe9b6de10e1191cdebdcc37ac200957683849d8a957216676db1af51fa0a2a1136000000000000000000000000000000000ba84d595661e5d9bdf9d268a3cc575fbb6b0d469b58b3e43f80694c78f4e9e501c4a4f9c42ee4518ed7189a1c36ca0c19f254dbf75f1c42046343b0060e71302bf6c94ca2fb8aec74fe7a47a3c9c3ff000000000000000000000000000000000fdf7e2372b01b5d926a18ddd06b4573248c02d7debf944312dc06f76ba08a7be460c451d296b71e9e81cf0956b974b80000000000000000000000000000000018326d0e1bfb4a62ab6f772b47ed7188035a62141e6b2eccf53a299028902a172771e8e46c0b1ac4833ab12045922b3600000000000000000000000000000000072107574145c6afdfc7d618f2dba2b8bb01d92007dafd476e4ca62e6053e5e9f2e34243ec2dd16ffdbe3488b925a0f000000000000000000000000000000000070e8491a835ae96087013b0f8da267a7ca5b0a600d71b8c76fee35f41d8b5c1ad82c5170b0e8d1cacfc7b7b13938e96f08cf27a47d89ae6e2ffb27870d613b9ae586857e4ea00670944a2883ba325af0000000000000000000000000000000018f4da37ff63f66d68c875def8c758d9a5adcdc408f0c12b3a60ee4a285e6702b1d5b9326c61f443dc71ae83c7bd21e80000000000000000000000000000000013a665e430141cff62c25577798473a645d20321490bae7689de6ea223a434c7d3b16ad004b24a82e2c62879b2408cf90000000000000000000000000000000011b0108562f53bd47d9f8ada54166854bf758ef3769ca1c3b7b006fec8707107fef0b6c7e59feb727646b74c27ec699600000000000000000000000000000000028799b52107d8965066e2f629b30c0edb490a0f4d0b6cdfff89a9f7763afbe6217bd42c2059042397b6c0443465fdc050aa333bb6b44086fe6211e89cb70b8467eccc228c09aaa1d589cfc24771a11b000000000000000000000000000000000c42cb42e389f32926ef09584516249ae332641b573ed29bc0884feda08d35c1bdc6c3d4a69fa15105de95010c6cc24600000000000000000000000000000000006c57fbf93c7959c562e0f3ef59966c1640c706fd18a6b539dfd711b0ad79643642038954bc866d42d1c04be375b95a00000000000000000000000000000000039ca3ad23b71693e02af36a4abe6ccd0dd4f4aa709f74d900b9fd015a2eaed55bdc2bc0749c995783a7615971e8a1f50000000000000000000000000000000009a08596b29da34466c8a7f46b805f1b6f2e48bbba614d728562981d3d4884de9a3c1980d398eadcf69e90c851d48526d9f7f74a5ccbd01afd985d3259739023cd012cd67fba3a4ab5597e94d8fad43400000000000000000000000000000000123dde5bb9b7ca11da9e08a9489cf07d147492be8041a5ad0b70715147e21d6017a58af23c47d77885a7830cfbbe5e0d0000000000000000000000000000000001527cec3c393d03e74ee8a7b1d6a8b6398945cd284b59a93fade9839863f0af591c287e89b3b45e6048f2f9b518208e0000000000000000000000000000000017ac3a2d9458bbd5f38d584b0fe4b35f3a452e22161564a7582465d2068b3ba4dc5e1e24a996596b1fb553d641996a4e000000000000000000000000000000000ee5ed5610a78dee181750e35a8ab91c001446f04124930c2ed85de74c6167009af45a6cbc3c59c4915334d7853ee12f85c00be7e66e318bed8e66cc41e7fd0593004bbca20f0dbc28efe4441acfc9ae0000000000000000000000000000000014d60c1d436e4486f35ec85bf2655ba6b752a36c86fd9088c0ce46363e75abd636052f876986fa0f4a59152998c0e4a800000000000000000000000000000000083328e38373f1de1049deaba78f568db818b1dc38d981ae92b968134d369ccc399bc3bd55c841755beb484cbbd60f4b000000000000000000000000000000001788850a5508d81df9af1f087356bf8e63b3c8a4e209403c4de7b3adda07684a08f9de6f1f8fd8dd4b2bb9b75be329cf000000000000000000000000000000001506a37d222173f0098f56b7c443e04ffe08b376e1563344e7bf22b1c9df0a1292f70ba51cbe554843fb93a7f535a4aabacef63d90ad11bbdf0c5fa2db2838c238ad3049a3f47b7f67361825efbc6526000000000000000000000000000000000d5f153952defdea9309269bc996a7714deab12e7644f8f8344140fe53034de538aae6c3af7b06687684edcd2c5dd19e0000000000000000000000000000000002da67345153c87ca65012b8703acbe777900953abaedca4770fd893275948d150ca3d6694d58bbbc9e62904448a8d2c0000000000000000000000000000000006e8c95d22f01fd9d56178d754f0892f46166282a27e6b02826478cd39119636e811c03fd835c714a59bd2f7da5ce5e1000000000000000000000000000000000b5ab6233d8dff50648d89cd65793640c06ea784d00aff329e882ae04fb466506cce3fb6c381b4eacef8b5305953f7b6473fa3d16e6431da14b8639d4fe316692db087a167a2c4f07307e770bb9e35ae000000000000000000000000000000000595edc440a5c94506a79f3b3fee818256d7c4185be40c1953b46765b2f925ed16a476b07a267570c727592dfc4a0d8d00000000000000000000000000000000079ad05473fca57f26fd068ed659e4aa4919847dd96e683e7d4b3a731cc9ae0562a693abeea4fd550e644b43b553118500000000000000000000000000000000176a9751dbfe727a442797551254cf904862c4d590892e019a54b72f6a5a124d268777b82e19d557690ccfb81cbe949d00000000000000000000000000000000164ab74c150cd151b70fdd7d63d0404214fc9cdafba3bc642aa798b1c301c287ff6d05ee7b3a3ce997072b8189d54aa62774741f87af1d6942dc4ed79b70b2d706f3db6b6d083eef0475334ef1e2410a", "Expected": "0000000000000000000000000000000017d73e29f1d555a10272043ac0900e80883c185ff7d087ee7f5a3b762213e658a42d1b4fdd435d1acb9d5587fa7e8243000000000000000000000000000000000ddc440795d0e4308577fe8439d43418641538711972c9744dfc8a4c206c193aa17958404bc387c7c2fa30bc678937f7000000000000000000000000000000000d7e43c0f99adcb02db99974e7615b4ca0de72117792ea515bb04c4bc8680a3fdb0afcf6a3bdfe16bf54c1d7336aa185000000000000000000000000000000000bcec1d7fc9f2210be80e90631810987801fdf60890ce197db041b6a62682fd7e181c6110956c5f5e9c196049e39100f", "Name": "matter_g2_multiexp_56", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015425cbb7075a97dfa9409d7b014127396056dee6d4bb63ea285309fd91280fb691f9cb9572b544b332324f6cb3b1276000000000000000000000000000000000c5b9634e6748d5819396051322d9b7e0377554613a7fd8dc0c71cfb7886dc0ac29add7265af84087a9df5ae3799ae30000000000000000000000000000000000534226ad7324ed5600b5438b659c7b1e96f27ee1d77163f2d3073418f7ded5c613ca4b1a686764ecc43ce3388e0c32600000000000000000000000000000000198267e2bd474dc0415f47f5c87a11fe0945a91cc0bfc37d504ac53f9b9b0d087cd5dbc9b03972be03d4b3f9d2123945d10ffdd3797ad13e65a1115cab6529d0f87b91eb41d6265e694eed8f02667214000000000000000000000000000000000389a084d95445af6e0afaef21d3676794e45986b9520035111ccdbac4ddc1b23974a686a900616f878f3a06eec90db500000000000000000000000000000000064c75d1129753b5f399c1a5166a0f6a8f427d65ec2fd84d0c7339218e0a396681797bab68b33653ffb9820a6005fa7500000000000000000000000000000000147e199e8c08b9af38cb457b623d0fff32242b11e695f2adc0f136c5596db313b03c2466fb58e37c94704152e5c8f9dd000000000000000000000000000000000e8fe5436baf3470a19891b85d15486d1269e1b13098d837b0a510e71b0e6260700ea85f0bc6476217cc73615370cf003e5da5568a9427e0cbd7973a34c147ac2f3577d06f68280caecf8588ebf1591a000000000000000000000000000000000a39a2032858a57ccbfb940741f4ae21b318a56d5567cc0088ed52dddf1e0d5de60bd2da9b675212a9a28ec17fca7c0600000000000000000000000000000000039e2a4bb1b417f8a94b02cad60a3e1c4c4bc5a86a23def7cfaecbfd97d89a5104e0cd13870c9fbd010dfec3ad9b1df9000000000000000000000000000000000bc29c5623f9f18ec2af5bc651a65d89554705a349923ee15a9bfb82c114246b404a1dc1c24d65c8749e7c9cf62d963a0000000000000000000000000000000001496d76f7b8583a64c1627151589af876a2f5e7677611ea15f14606538f6052c56e9fc3ed145c313acea69a51547fb6145b5f1f156f3c823cc129568e7602694107608c1f9545edaa897df58d27b18f0000000000000000000000000000000015f83b2f998691e504aa740b4db38f5b0236ece3bc1ca933b79999d55b737bfec51e590c2127d57625a9b7c2960c06280000000000000000000000000000000001b7b117f5d722e320b7e90307ac1423aec5e30c29602d314bac9e5272ad3990d31999bf3f516ac78b2be0e16c0375d8000000000000000000000000000000000fa7992cd7fb679eb5f9f9a9febe9c3cf41a717c8f6fffbab5748572098407174f09457e13468165f1c7275d52f6c84b000000000000000000000000000000000737e95f62aacd12f8aebc288c5cfe052f34c4d16e7b44df4497d9a713b77485fb0efc09aef11c7b86eec4d0cfd9b03ecf6760be82cefac2843265be5fc0fd6d308c1ed06fc684c4693de25372f09ed000000000000000000000000000000000004d48d72ad4e77954ec6a5a62299f0472bc52b556cf3857019f8efdd694758f13029f9d6832ed672cc210f32033da8d0000000000000000000000000000000009b2394755d0319741d131b012ba0ece7e2044def20ae73fe73bcc276af9d807ad75be79202963f9a5c512a6ca53197800000000000000000000000000000000128f856fc4790d9fa68cd2a3c152d675453dd81dd64f0ab084c6dabce456f78c2bab0e7f315439b34f86e8fa61a33ffd00000000000000000000000000000000173dbb908ed617ffffb6aeb212cfe6c03f7ee51c84134fde67de2ad9561a897e28a0efa66257ae0c21ebcee3fe4fa68cd9fca4d166149ac9e6159ce95a06f790a96243662373637f0c6a59764b77b45e000000000000000000000000000000000bb7b84476d4b17f4ada0b6f50d34dfaecd611356862895c8d2fee6707c4aedbf565560d4207e43c179c5cd33cbb739000000000000000000000000000000000112d8b10c775218d318090dfcef55a903953f7466c50417125ec0b2c20a24fb50bd172331c0377d4f47aec99bd87a3fc000000000000000000000000000000000cf4e4b3c600053f45f350c8860e47621f50f3849872a91ab115f71a2b04657991217e2f0844b296d3a6bc33ee66e6a80000000000000000000000000000000008f625da164bc9d96be3e78df63bd1633a2951dbea0b98e359c6317abe6ac5799c4bb00bbc2c5d02048539e753019a6241733039312347a0c9d760c1bb9a1209a34a02b359a9c52a57eddced1575867000000000000000000000000000000000028db057ab9421eefd1fd481c91153b5c1ceb0f2dacb0097298cac986f036572c6ab0c8709325b3bc25bd494bb46c55400000000000000000000000000000000024be09301c9be4f726fbf7796e8336c50897e8534614c25f65c37bcfc6e724d530c2782bf483668fd08e91ad09484af00000000000000000000000000000000037bfdaa11660111ce0a9c3e18b5da74c004cb44882b1aea4173e18d3a17f04fefa3b319afaf4af9dbf3d4b9ddb2c3a00000000000000000000000000000000008f2138bf621237a286229fe762968a224358b030f6c20db58043c13727b516097b42d47781bd0f0df2b155197ca3946b21b18d883ef62084ce4bd353d7434d7e220e9cf6bd0e8d0bed1ad0a4ad94c7e000000000000000000000000000000000b4e2b058d6e77cf95be093375233e5c9c8ee0cb2a3aa93172c08faea111df81b9721a506180b7b45bdde4b58b0b7368000000000000000000000000000000000f7025cc33424a7c11eef47baef888535d938d50c0f40eb83ae86791834770e5dd95b30aebdd2c13eda3447d5730ce3b00000000000000000000000000000000088270ef05480ef8aac5c284358d8e06c3482c26279734b8513000019924cefeb396ae79f5d9bd863bdd9b22e3ac3c54000000000000000000000000000000000df75afafb138fb06bfd905c87035bc5d18c45a29267c3965131083d7e0112e10556d7693d424172a53e8d3120f0cf2aeafb6aa11296facbc13936bd2ba09a2cf9bbd9dab6ec8cc5f73d78c90b471a3000000000000000000000000000000000122fdd3c83c01c7cbe71f54d783181860e7dcf8406e3966e910f4d0ccddae3a245d6b1f94b1182d1917fd63960cd75d400000000000000000000000000000000043592e5797cc1409d6d42dacad628448799b24320acbda83f6ea9d232968efd021058f540e3bd73a7f95761efbb5fc400000000000000000000000000000000025b5a8577ec1064b5c557415a50e84c2302df97eb65860f979e5b1e261f47c0f305461681beb07e521cf03f0e21fd030000000000000000000000000000000017e86f3ffe72bcb71d46661a1537918d52e886e362d78ed756140a6b5083a4eebb5280b9eeb8a25251dec43a5cf509b13d39a61323c07f9f4656a6c5e6ba139da8175ebfb8a641de50cfa2290884662900000000000000000000000000000000122f26b4561d1f79a70bd0e401f25d50891c0fa0320579ef21aeed7c191fe1c75403a09260c3872cf74b798eb1587ebe00000000000000000000000000000000039a261d9f48b9eab6e89046f333ac328cea287993166057e9b99fa8a7d7eb3e7c34ecbb353b7427b235084f47f45d1100000000000000000000000000000000015d5e297317684bd0169c795d9dcd209452d024ef9a450c41beb0f6c7e6dc5fa0f3ae24c7cf2d7eef97bdc51788188d000000000000000000000000000000001487564f0e9d3e0d2d30ec9930a00f10093e29f2f195344f567960be323ca21231efd8528108dbee4d5ae4de3930ddedf6374d0849a4471eca96c5e715b10505c4c49664f341d04705fc688c8479cda4000000000000000000000000000000001965ac3a520c1ac39b86832ecbe226ae0474b76659076ccbb550a0daf41c40d424ceda084dd991f22cc53779085828430000000000000000000000000000000002e970a4248823049bb4339d21583fdce9540ec103d6e9530b89e39ea875b1c333f7f5f859be39baad34b374055baa770000000000000000000000000000000003460eafb3e54ec03fd5cc1d460e1359b97f5543e6231d61614c1225ab7545fae079ac8e65668b83d022031a7a54746b000000000000000000000000000000000321394863e7c70df3934d874613b7c9d6c331e59a599be593c82edb7a26eff9bee8e4befbf122240d2deb2d527bd38c0b7cb52b99abe10d1367f8d3def38221c18657a1114ceaa1c0673ab13a6e10870000000000000000000000000000000001a5eebe200ec041476457f8585cb4ccdda936cca4977d7701c44e0d4fc5d9c206682a23348013a055117028c16914400000000000000000000000000000000003519bd1dea70245e521988336eb41870599a877380c0a9eb19301f9b2caf963eb559070e23eaeefa4de0173bb1fbd8a00000000000000000000000000000000125707f5a8e26b28968dab97ef4654c315b0a118c20935e38a5a526d9ac0a0e18355d8c9f3f58c082de98691957e2d5e0000000000000000000000000000000010b58dd683f73a16d8bd5557b35b7003a761bdf7d90ef576de8acd420bc74f5219fe7f9d35667feeb3ddf1d568b56bf1f49b1fa80a321d4d100069b2c4b94cbda255d8e9f1a7f14ddf4762b76e4a386f00000000000000000000000000000000018267d8b83ca59d4efce7ee3d73f7b984f09556ea4fa5cff5997a1eeeaeb8bdc9185176d77ad0f4d86f2e429f4015350000000000000000000000000000000014114344d6b7c976cdaf2418d7f72c120c2fddcc65c3ead067482e7073e2a3a239af19f862ad247e3181b13f5236d1040000000000000000000000000000000015db961a093b248e83deea0ceeebfc3dd57c7cf8b48cd627c5c566a4f9bea30ff0ef9cab9287a0f520a72b02d9092a0c0000000000000000000000000000000015159439fbfb91d1e24af611563aee3eb498fde666a1014a9f645037995d72dca0ed5569da7ecd084208b7c228e8a2b2ad3625b0839cc1ab8c9798b2e9706ba6d7aa623f3c0ce0985bccb2ee5c05a313000000000000000000000000000000000e1780b32a7b17464cf514efc4bdb02283af396ffcf6d1ae023e07fae02becdcc3c467f89f8edc9173a71aad27b200da000000000000000000000000000000000c3e7fd95dd823338bdf3d82fd46c265a3f794d4065d83873b1aca66da5f80c5962c9dcf537fc315d024d8cab7bed89d000000000000000000000000000000000e4eb722080e24f54fac7eed4b94e7b1eedb081c3edd7aaf5433d00829929d8bdef940aedbdd7dfb0376b3ad5544d9cf00000000000000000000000000000000158c1ff057f7ffe6492097e339cc4ce56bbefd39658ad55e08d5407619d1cbea7c83b977a1583ee48897a5e9c0d9ce3e150e53fb45ba8ce5ca917010f26451220be51141fe21cfc1cc06a5557e8e7afc00000000000000000000000000000000138e8bc8cfaecba9fd1322a3c1682c9fc1286d78e5b6718da00acc69f811fe9f94c9f0dc9d80e9002c0022c6dfcf156a00000000000000000000000000000000021da679a068b2f5f473ceed588f07adc7f485003f7d2286a18c07b09b835881f4ab94c7d4ec742c33a7cf01801116fe0000000000000000000000000000000018a62c2f4a02b73f5a91f503b53332304afc9cd8769f236259789277599a203b8b304b38993835a87d7cc970ad514d2400000000000000000000000000000000179396865f859386df7c1b8fa84c4ee71c14daf695fc0841c293618e6f8c87fb56b924f3f91a273b969e8635d7f90985d69ec73df67feb970f1c7a3880ee84d948eab4d8672a6c1481d61efc6cd710020000000000000000000000000000000004a8cb437297722c0c1a9471ff083ce60ec40c908af4ebb570c87133df705e725e3209152bcff26a0d6e4602030610d3000000000000000000000000000000001832e55a9e703d727156e4677ef4f82b86c6764123c3ed1dd94ae3b46d7eed459114993968eaf8e21cf24c59d042f41d000000000000000000000000000000000f606d5ee57b188636334ad60057cec4008ace88f14ea06324edaecb26da627670b44b6ac57b9fa2717d03096010785300000000000000000000000000000000145bf70f90a9d98f56ed38b3506556a48a1340ca6161806d055d7a1382eed54e294564de7fdbf525b0012de3d25ab5c838f8acba4782dfbc02a14d4b1d7b2b0a582f9bd75642169707a475b1a7d2d7e0", "Expected": "0000000000000000000000000000000018ca453b9d832f029ac8c7c70df846be97b530e6e42de3ba6943a7d0dc00296942f88eba6a9cc3352900ff124efaf7d90000000000000000000000000000000002e4514102aa3f772f2659ae9f1e2a91c7fb749ea590a3cea2c1a2e0f7236f71e182374cf7ebd2fa086dd921c29013910000000000000000000000000000000007c025696cdbf403494c5fc7f9a10ad0c549f84d1e06c5c4bb22f7a039486909c540776224bcdaaeb3880ae9d745dbe5000000000000000000000000000000000b5b5b70fae8b3953ee6661a0f4a1be25596839482d78710e584d3bcd93dff2b0bf4c8b20974744667e25fd8353cec0a", "Name": "matter_g2_multiexp_57", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001265e90c564693db716f17d1a8815a8449e43b5a2d5446ca65160d864718cdfd413d5aa024e7581421c7222c29eb452b00000000000000000000000000000000133a6558baa53a2b8d239198e1dcd81af1ee46d55137177be467a99edf282edcd47b7861a3c822f9bd0df2e86aeb5dc2000000000000000000000000000000000d8287564bcedb1e57c3d74b0d484a9b475ce3f5b0322bda0e980de8891e2e8663abda99744b58032b8d7d3adddbac9500000000000000000000000000000000013cc35410d7fe07eac96abd2b35ff656e17b6b1eba2bd1d75ce5c87c5e76755ef9c2cce70f05cdec15d1bc44bf902d4cacfb05e5d10c41b06a487e9f8afa38759eeb55f0a5bc8640164bbb081c1fd2a00000000000000000000000000000000193f0cd6b4051cfd89f358cf6643528f0f042ae30ba3627d297b4fa2c2936426a9c1b65145b8192f65dfaad1f2fbc358000000000000000000000000000000000a92ca8943e64a391aa39126f093f2b530f556c1e3ea1b55bef1c264909dc93d260eec6420fb7a4e4a45f932d57951500000000000000000000000000000000005c7dc5832f744089d5fe034bc93e0bcca042ddd1b221cdd5958be86214831906ddbf82508dd91dccee467fd1625dd740000000000000000000000000000000011b11b3d24f44bcafbcb9baf62cef3f18b56ded696b73577375dae8108dcfb663d437e4cd9e44b7e6bf49741e058f8cb9a0b88d946231cc484550a87a548719f0a543c0698411f230a966cf602dc4de300000000000000000000000000000000073872ce0d74ea368df132897617aa8f941b67cf3fb395ca6c2f5bb2c551f17d68b0c6ef11e742206d6559796f06426c00000000000000000000000000000000156cc28eece7bed943c8410a44af112edd8576807e25701093eac0c9726f93da68a19c1d7b294f3ae6c84e32e7c2d5ba00000000000000000000000000000000050fe5987d5fa678be3d34c50fa6c5296f883e65ac3201c333b97ec0de00dee6187d2790c357a3f8822a174a534539a900000000000000000000000000000000177fee6e2d3909c0536acdbbdfc716f6ca19b6bfee7920a78ac9725c85114c69cd13152467e72270e35006b3c6caee8c74e3b5ff944bbbbf808f1f469a3380ee7dc37ebecdd8fcdbbd2f2561e0dcd68e000000000000000000000000000000000dd147bec9e0d1727c9d7597dea4a5b6b15c0a603dd1b586835580468148a502289fcc38194b2fccdcd8fdf0d8ec1904000000000000000000000000000000000186501fa4f3a20e80bf297e8ef1885b7d157617701839a3b524d61f35b2eb843ff0af13e253bbdef653a83e07a5871e000000000000000000000000000000000023eda2ed9d34aa253c8bf2f3b66b3c0c2551cc0e74f43dde2e429d9dea113a62572d245b44708bed79d662d9cba487000000000000000000000000000000001041cdaeb244803556e9b20db95f2a66830cbe47a68aea262865da50ab15ba658116657625318fe46fef393eeb6f3e2ec23064970a4ae4ae648a79edb193d98208418d3489e9b5b8517ebe99cc32b4d7000000000000000000000000000000000c27b1feeeb38068ee52b0fa440af2e3bcfd16601c8af983d259f2d15316b513ac3e89069bc141f02b934f2e474253ba00000000000000000000000000000000183f966cdb28f344ccae4cfda63ba6a6f29d00ab942ae7db7572cc09305e4f80c11305527b8ba38c40aae5f23165cf9400000000000000000000000000000000049cf59bbd6c26ab3e25b3cb94878271c73c0b4436573d612311feceed0f1668f4d79aad92360c1c97d60b540239ae630000000000000000000000000000000015f35eb8e4c40cb1297f7128d99b109ca75944c1943abe9158813432145a4a2a5663b55dbabfa48bfd9dd01907e1e8d3972fb60ccab83b6ce042c09ead82fea3d2cb891e21ddc5af7b5d8e334d5a3264000000000000000000000000000000000e5d9a671862733804f517dc9cae2190ef0005f26394e3161fbe771b9a486368871f4b1f10f405e45048362f437238260000000000000000000000000000000008100c6f96ae7af5fc86d9d91fbbefcc1bf5873dacaba9c3adf1b2833dd529d87f303a55e5d4098153377effd0f8114500000000000000000000000000000000010e4863a9b037d4ae6dff827a34be04c7f1627670b40e5cafb1fbca2fbf56af9ea6b24548db58e3119db64553d18cf200000000000000000000000000000000036a298ad5e8b32041a18e3f6c5847eaef20a5b63ddece41bd7dc4c4a54deb9c6d7002e6621aa01d78d64ec9991f68fbdb68c389b94c82f006fdc637696d8085b24897177d2992f504d4bcf5ff04d173000000000000000000000000000000000f62c0bad83c41887bf1ebd2644cef0577d793c2f3d67cbe43974f460a4afaf2e412fbf9ec97404e5e882ca0b23bd1a400000000000000000000000000000000191562ec9ace63ad2aae1f7fa977b9e0606e1da9775a978b2caafada4f6b3d9104562f2055fe037cd06df6093123a08e00000000000000000000000000000000156702c3feef1baf5ba202a25b9dfd5c1fc620e837501b0c5bcb85ec8b6e3e92bad1fc842bd1a0dac363e4bdf0fac87c0000000000000000000000000000000013a4b7e869ed9bdbf9671a5d8ca9145a2e97b6885d2a93b33f378e649e0e576be65bfe849119381057337315363bab2f4510c100005f2306f4b474d3843b4a79d04f0171afc5c66df70f631b0481dd330000000000000000000000000000000000a4b273438168494f0db235f535bf31893bb70f4119dc4741aa3c5e63e93b9a8bc001faaca10e37f36e130ef53853900000000000000000000000000000000010936551b148e16249dd934fcc83dee55279495c2a70d46dfc45945a69549657c3dd7cce00d8136e28d64b0c800344cd00000000000000000000000000000000115c053ac0b68573c3abd5f047b8fcd897e3d514945c5fe6efebf1921563d0079eadf32f7428ecb703d9163bc7811ebf00000000000000000000000000000000162e86af01daf552589b62be849e6176d74fa5da9b214a5cf2285802dbc44f346eaee5cc3d93a085740f74cf7e1b17e1dc682a2be4d67852d119795988c52230d8273648cc176ddc012a4b4da5a8636b000000000000000000000000000000000d77cb5045f7d4578621c76bf5b3db076661c72174508279280de3e92f0aa57057ab50180f0f908561a87d412636d964000000000000000000000000000000001853f9cdccf5e6e4b87231b153ea5257f52ff10dcb24cbaaaa95426d0231dbb355f9c47475d125ec1079b9bf26b23b560000000000000000000000000000000000fab825e06c2329a19de853a05c4bc65f16fa047eadba8e79607bb31b84ed6541b00f7f14b15687d67cb4cae0ef9c600000000000000000000000000000000005deaebb5f31a62fc0bc1af13da63d0af3c716df8c9bf00f1e831af5882b88974c49e8d35db2545747c85ac35156bb668af6b200fc8e6a57a954226d9a0254c8bcbbc55fd6c3db5cf8532323d4c50b4b0000000000000000000000000000000016faa5e91048badedcb33e83684d2670051c82b7a1d0ead0e28f4dddccb141a8ed1fa7606e4b6a3a893c55344263eb4400000000000000000000000000000000019b2c8758abe5d339afade4ad0c1d44d651f185f8a0030b81b136d5972510b353d43cef616ce04827d56255419831a400000000000000000000000000000000124b1e87f343a890fd690e384cd156da57f4f0fc5b1ca99c73bb0571332ec4c12d3ebe955e3ae792efadc1d5c0c67a410000000000000000000000000000000014cef10e4a9a41bf117aacd2fca5f1364a46b0c4aa0723a369fc6ede09dc76dcd8cb67fdf87ac49bd4bd9981a2e589647e2036f73e8cd5e42ad86914e192dd969465aed0c3b752986b84a0c2444c90b80000000000000000000000000000000002862fd5f38154dd452f65de0d3c1d54403cdd2a397ef416fb92e570913c543d3368a95fa114fcf48c3bb4b68895ba33000000000000000000000000000000000e7185443e5dbb656fcb9ed100949f8f7052ee2cdcba4f5c687a65a1b45bf66ede5c60b0c04845b9a870e004f8af8450000000000000000000000000000000001817be6d13cf2a67225b2eaf073e9f1614f3bd32cf5572766ace4a91f6b6be56f498b989f1c3dd3dbc9a819c029431dc0000000000000000000000000000000001cf41fe428b088a17b8ea93a653677705d5c024db530b8300752c6b100f2abe4c46dfc24afdaa2b3d53cd8ce0df1b6a70cd5c1545e76027c389645da1089fa88f675b5b6ef9217b584d7202b797f8520000000000000000000000000000000002eed272430ca3176988272e6157a18df7151bbfed5b90979752a02619ef467af8083208dcc9c7d926490b1283baa21f000000000000000000000000000000000a644f6137bde232c3a909b742d30bba096ef88b711ef100144276d0944487f9ebe8331483978a47c07d3a42c441310900000000000000000000000000000000042c67cdc10efa8301ae95d6d4f21cf152f04b235bad2dc5a61724cba64083f690b3158676ee6ef10f52dcc7061f7c7d0000000000000000000000000000000007018d0aed5abb744cb998f84140331fb2cef8d9e09c76176def48a85370c6247c2ac6fc726eea891b2041ad5edca7f0244041bcfc21ede8023ad80b6d4af4b2777c0204ca5f61854e6da34ff5e1145f00000000000000000000000000000000141c0edc966b7c845d4e68272c6a71f8ffb7fd8d56b7cabcd556a98422f830d7a81d123d701ce1479e84047328ac1f3100000000000000000000000000000000105c1164d721b6dfb05b6b69955b2f25db0e9fdb58600a3229dd516076087aaec05b837ade68bd2a19917eee7b9a22bb000000000000000000000000000000000da3dd97e693948fd6955ae52d493b3a2d2896dd4ad00a0b549d4d392e81593472e4f9435a8b7977f3d58e324c5b9af800000000000000000000000000000000068c531ddb26a2299cc584b5bbfb0235fd774a2447134c06e7de8b94993804958bbf1ee80728cc6db647e8a244462372ad7572da641373708bef008057aa5af1cc76ccb882bacc50a77b37d7047b1bf3000000000000000000000000000000001881432f4742dbe41bf774930413c98d49a781a48d6c64ee1a18f3076bc6c0e1214f92d5bc84ac65ee1c586c437d697300000000000000000000000000000000067e0a95f3eb826f3efeedc1882ecfa30b8b96c92f626aa324f4044ee74531fbfd50a221b1b0e0182d759d149d51427d00000000000000000000000000000000173f5be7098b756ea84f030e374973feb4f8811118ea6673db1db75ec6909303e571ec5a1d55a6bddf32fc80480cf103000000000000000000000000000000000f28540976a6ddb277df5951fe58e7310861af837cf31fe31c24f7b979f72ef1549372e7ea1ced15b655d24293dade7854b51c78093cafcb57c4c1f172d08257c379a9caeb5b5478cacb4887119a08c600000000000000000000000000000000188f296e218719bb9cabefd4f33d5728a1d280bc59c3d826a0f3b5338f92e6544a4cf36f1a493458e0adb246c01a415a0000000000000000000000000000000007dc8e4222c7ba78190a8e72ec7e6980e2581f51a8d6c41669b6fc9e16d50a2bf4d422af73398e76b2f39705eaf8a6da000000000000000000000000000000000b25a44523323301cc01b50d58726768c2cf61e691203dd34a0ce8d58fe4f72c1c33abfb2a56e0425fa9b7e2fe48e870000000000000000000000000000000000c6f11ea269d9061d2f462ac37401def1b2b28c47b84344d04d1f026add3237d99a586e3fcbae347a4ecb5646c8c569fae3bbf55186a89740af4da6c073d8c0e331542a2c972a49dd3bf65261dda6e49000000000000000000000000000000000c41a02e937f8cacc0be5d9f2d9fff0d6d4302fd252f32145974206463854b3a7d09b3b147cdf2d7536e970dc13613ab0000000000000000000000000000000005f9367f4e31f7e4d6e21664ac13d55f501f5368c1ca77fc439db60e1846861e6c4c3c44909469f88e02cd973499992300000000000000000000000000000000131fe6df7fff97f132bfcba1d2599a862c1feb514a05b4b7b0bccf49e00aaad043edae9346bf726e2eee498dbadf2067000000000000000000000000000000000e59044f0950a741da3881282697f4a1a522b026e493f6009227da4c0a963de622d5e421c30e0023f4118c9a036274f859b43915b15c509ab8930979312dea2ec9cfa9f679b004ee526aa5dbb25759a4", "Expected": "00000000000000000000000000000000144433ad3afca0a9581e7e87220a4944e26ef2eef6b887ce77d2a2559ced058e7349b36efa66c492cc75b014b3448ef9000000000000000000000000000000000267b90e45d7001edae01fb198d16dd37c43cadcd2ca87bd7cd1f0f65a95148144f5ddfe75d344eb4573c1376aa2728600000000000000000000000000000000050ade28b09b0394b08d128c089808021e4c65dac49d9fb45efb93792a4faf210230b650fc3ce810fb8d11947e9af5060000000000000000000000000000000003b1d7dd7c6d944d16724fd1bbfe0f53b6b50a70e133dc5998c82b51f817f489bfe1e0c361be36fa41f5af7c1577f2ea", "Name": "matter_g2_multiexp_58", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000a081f037738b0d812da43a907e7c624e331108ffb72104d82725b9c14dec8449f5ba0e8c1a3f1379cad2c3e7aa99f70000000000000000000000000000000000937fb5d8b3c258b7b28555fb59620f114816f0fad46818a5f100bf7dc3332a03d285eda18e31e4047cb2606bc53b20c000000000000000000000000000000001574e355b7570043bf36ecd52f9c4d9ff556146d81a1e9d088444805db9b3b678fb55774865ad34d21022afea2c154590000000000000000000000000000000009f70a5cc658cdab280ed65e13aaa319049b9534a222217a08168047ee2491f25a9d2620c7343a6426bc54a0700bdb4fa53d5989b63ee5f157cc44c684ccc7cb4c74338b12fbfb534ea33db341fa6b460000000000000000000000000000000015a76e89c8938b8a27e4857aaae8c942371b6979605adf774827e9438ef739428fc53b65d32e4e152cbc6a4de42b8bf30000000000000000000000000000000019494030ae0507eeff20b69b4913596c1b9ea6927157945c8295e273707013ef1f2cd08c058f6b469a6c99ad73acc28700000000000000000000000000000000122ea7ac21a27ca7c4b00207538bf561f688429999332c45de7545046acbd6d9e96d31f5f6a00595eeb212918a28d2920000000000000000000000000000000018b023e7da67cb8d9159746bf700f9e151fa60ba8f5a28b3739de005822929cd28c49b9dbb4ca8a10729dd24771730ff4d840680013af06920dd06bacc0ce95cf0cf79e8ccc0b10027f2d28c1d0049980000000000000000000000000000000007811c759634904765029e955c3deca648fba6a9da6433b50a6d2086a59e65811d52d41ed8ff2e9bd63a4c0828bc702c00000000000000000000000000000000182c86cddf5e20697462c829f41c7b49e7976880311b01ed4d12d7174340799f19db0f295263a2617182bfd1b49e0d1b0000000000000000000000000000000011824bc20bd1b27876b4f48aa8fe3063f826b6b2c3dd777fb8999a25d9139f218f6f288955274884ce96ef2dc6d34d120000000000000000000000000000000000dd310d5e141e4eb13380db828caf74f62878959b6b2df998bebf9306965f723fcd4dae7c25bf2f79ece3e8e9b92de61b67d661ebc9008669bb4e5cffef81a32baabd71667a72f1d202ced823f09c740000000000000000000000000000000005667d8c4f8dc3f4aa0021d1026a1d0dd0bc3576c49339262e84d20198fffe33a389d28ab1d782e9d19af761a2f097b40000000000000000000000000000000002803d5ad6393d7072e149f1f2ebf70cd8961ba3bbefd648916a8ac5a5eb893b71bb6015e201dc241537ad5890024239000000000000000000000000000000000122e1d0e0859b04143f23c4d2d2ffec09ca2ce5eaa9429dd0c047032d180bcdb10c106071d9f9701c006e5eb8ef88130000000000000000000000000000000008347a7bdb3b4f381b58ed3a128134c09563b345380ec948943e738347de5b5737540b57c28d00b9d060c60942446617ee495199ebdebda02179432d42d5d9c76eead4d4993cd09a93d46cac997716a5000000000000000000000000000000000b26aaa46a279c482fb395ddb84d5b4c9c70102c336cd565ca9eecf62cb96f59f634adf46af748826590fe65beea752b0000000000000000000000000000000012cc63256a9f73f450e86ee38c54ea78baa5bf87d3bc01320f7fbd85bf11e19f75d787b9b12b8f2c7634368a9023de880000000000000000000000000000000006392fe611835f6fd50229725d71d435f704f78cabd1b5569e1c5a89d4b11f911f0e34ec034369f972a80eb407938b97000000000000000000000000000000000f4ff2d6a991fde9093000d7bd9cecb289383d259346d83bc9bf5389d4c39c82a0e1d7deb84b90ef370e0a19fce28d2b3e038e473d6f965751ebc5f69eea6f37be88cf001de0c4e4b700823d8326f17500000000000000000000000000000000193752c40fa0f466f7c8bd26658f133d0283d2ac3b02eadd27b3e9681329307f91a1512fbc53e537f9e1025a3d68a7ca000000000000000000000000000000001106d751c9e1637f00e51e0be856405e6b69421d81bb30b9b8718cbc9cfdc36c80d2848bab0d5246da84f10b478fe48e000000000000000000000000000000000827a83f28678c4e39c4963e95c2404a70691885788e5457e149c0c45d4e8c74eef55223ed15cd75fad9f7209a6ecaee00000000000000000000000000000000072667f02b781c8e0a75d0ed8f3d55e668ddcc8c61937c80653e240c3a744c961055c782ca41b15211c0f1e1ba800bf5ab2af2590309c9b9177e4f6f0fa06339fa720cf1c9fc7c001785d7145a3c9030000000000000000000000000000000001419629aaf0baf779feca264d0d9846b987506125b0049ebc8b307c4e3ffe00da1284a94a012bfd60456a4a937b2e0e000000000000000000000000000000000119a801bd0a5a1c1b25cebbbcccc7d2bed9baa4995483f4ae94121a8c6cd0c3f90a26234f51590d66cc38b8bef9020d3000000000000000000000000000000001125bd15fd9814ddd15be0997a6961b6f1c05ce7944514371f10c8e5bde271c4b936d6537d91ebed740fbefe6b281a0d000000000000000000000000000000000982a2904a524b1fafc50d540506b8fb07c3b4978310bf3cf53ce570b1b05e746981bcfc06d59a78d170573b09347f3fc9551f12084ad7d4ce346f841fef785d644821b5c2d3c8db3145fc26e65666bc000000000000000000000000000000000b1da333e508ec6b0329747fef35cb926d922091d4a45eab7cb5358f20496c66e17e46874ed9600cf4252432c29aeb07000000000000000000000000000000000c757daad8f3ed7dfd64782548eedfe904f7ef3bcc11eefc4781fb37159d07825a4c9f3fdf9cb3d8f3944277bf25f88c0000000000000000000000000000000011160e21503d6fd61a2ca0212a7d48317186f259a987a17cc3eb04a6d9251736e4a66b739a8f3095684b7d91ce6f79730000000000000000000000000000000007440ec0f9197352a3148f9bb3d3dba9b1d5add903e48b50ef3f6879859b22ea0e31b46ea4ce566930d8853520abdd14ef5823541696ecb88d0c71e00a15282c40d4826220a202be09c47fd6891b93ba00000000000000000000000000000000070ffa4d522df8b9f62aaf36132bb1b857e177280a7b6d3af6bfc79b73ad3848241df18ca7f8993ae3d67005ead9264d000000000000000000000000000000000e32b65bf035bcb11f86c60a334622d2367797d0226761b58a7db8c7324fc4bb498a558eec509c2326fbd0e7bb8d3d19000000000000000000000000000000000dd291a760393c6e962818986727e5ca5d46544dc47eb49dd828c6f74caf0599e88c4293881714c425b0697944faa861000000000000000000000000000000000f7ead0be081467f3371ab92c249cea73dedfefcb6aa16a162c06e30605e104844c3dd194b4a89ad5230f596bef64f19e32d695dd02323d40ac1eb9452cc53376ef941237563b1ee380c9824a565008d000000000000000000000000000000000ca545b53836899e507880329799e4c1a1acc17275f5d71d87b9e41ccd7a090da854f9936254448c988ec772a813bb6e0000000000000000000000000000000016c9b03fd01394560497d6a03add63c034f96744d96a13a4ec92d28719018d1eba1465e4332e53f37f2aec4d93d4ab7f0000000000000000000000000000000007019f5201dce326d5a6a1ebecf3fe50e22335593bc9d3e62256351c591f0a1a577d916055d79c0b4abe191b6b8011fe0000000000000000000000000000000017acbe72fe30c386e463f3e9b35a474b902f6712b30af88ef340e6fc6ec0fe2e606c7e26432c2a4de33a12e35ce41868f5e23ff8acf88d18e53bb31476f10fef288e20e818431f9f0d2ffe1265e8ea8200000000000000000000000000000000057f856ae648279f2b6dd17584e1388e4dfdc9e870db48ee6ef5f58389ccd4ba17e074b79ae12b728c59e2f91bac5709000000000000000000000000000000000e0f39f4beddbf05fd700458448067b52c11e963b22603f10d697d6b6286b1449b1663e032bf7bea48f2051d8ded923f000000000000000000000000000000000022cfadc1dc399ef5f12afe1349d9274cd595a9ab6ef7ffdd68f8bd2d170a4a783ce0a7303878d809a16bb8073d79860000000000000000000000000000000007e301565124eb66d59a70897f2ac356e7b0c1bfd4e3b57e508ba0cb5c9c881f9de86b91fd5133aa2977c8e81138d66971927817449ba5f053d0ed1e567b53b1179c6b62a554c8be6764d7ce203f74e4000000000000000000000000000000000edf3fdbfb03bc07871079aa4aade538a97e1619b54d0692a7f5f73d7fbc8abbf680ea3a99325e03c0501ef174deedd1000000000000000000000000000000000b8c1b5d3c926d7da6e0583f67d981af5286a04429e857b0aa4b1120604f9c8c93f04e763da169137416dc9ec4839a910000000000000000000000000000000006ca2aa4c7109f043da9cd90bc801404685db802eb8bc925d9d098e7af3d9f95ca490790b2b1c77995c050aaebb935db0000000000000000000000000000000001f40a2090b63f94f93e8b61b5ba1ac62a37548342ad81a9bd99ce8339435a7d7477c3b9cee9b531a1ecdc85a72041555ce5d6f0e44a20d0a0e2f1cc523455b001dbeef772d84b2599daec66b285027f00000000000000000000000000000000021464dded318cfa86db1e4329f302bbeca7095d910c4260799cd2a60ebb20e60152868e67a48b86f44000f267d11c33000000000000000000000000000000000ae45fa46fc8e043c3df99bc0d87ffc5867208fde0eaeda782230341a8624b101346f35fa24e1dd67ab200f5d6fbc8a7000000000000000000000000000000000795b9afedbb128a46c1eb25c52a71375903adf7d3520535372d9af5023dadb1dfefdcc0cb546e9d218890123252946d000000000000000000000000000000001852511855bb368cec51c54d95b430259f05dba6bae53b5c42d69f31371c30cb611037fbd81393a896cbdb6240114549d37f7bca1a59f65982294755ddf8af7f1c953b6e482fee854e0d89e9b269e0e900000000000000000000000000000000113b883c6bc41b0673145bfeccda414af45efe5710f436977712e7227f38911cbae851dbe03928f38e310033458eed72000000000000000000000000000000000853e32773ef1f95a3936aacbca50cdd5eed3d08dc467d7ee834487e445fbdaeddb0df394bd0c91fdb06d2883c4dadd60000000000000000000000000000000013a7f9cdebb2ec37fad172d31a717f4b538a8ee74432c5a5e6410460eaaa3b5f24d223b76bde4277097e93087b7136330000000000000000000000000000000003d6f141b56e1e2e400fe821524017cd972678a7d64f660c313e6a8910b72b5ac04328d45945077aa2946931c8dbd11706d0535e3728b9e358d9ea82df4f1137db7a02f79c0cd0dd672e24092bf7f6b40000000000000000000000000000000016adbeb3530f6b451d870b2d8292a01143986cd9890c79a64764383575771b8608ea61beb2de87bc034d3b8a085958be000000000000000000000000000000001125d7cf83239e4341c286fe0c8739e7013b234814b26a079ffbffa329ee4705da81fd12f34f49d821690a11b8f83c5e0000000000000000000000000000000005873dc5c0baf0f3297d884ac7b652c749abd0405b96ba60fe396efa179a79fa55be76924b0690c9a528c605ad4f9e120000000000000000000000000000000000fceec23f479c72e0fea0d10d3394d7121bf1673250cf1ebe72eca60af82f232fbee342e2c8705434394d4e519fbb40f56d6810620e8da932c202628c2fa9f0a9f3fda3aa07c262924aa51685d2c9af0000000000000000000000000000000005ec966cfa28e105f3496f977a2f046fb206a190fce1a6062df0fa1946f274cde9f6fa8a71089af8cc2fbc2b60746cf40000000000000000000000000000000013c77ab66fa92a2411391d366a331a40accd120db1c6a656bdd92858826fcbded296293c13ee189ea3f34635de56732c00000000000000000000000000000000162795b6feaf6a63e6ea2d34f2bff2a4985ad26463b8fac69f8525eb0a005bd377fe7ff4aae820d361592d2d88f98f5c00000000000000000000000000000000044c9d5d3bc0d99693f5a0605ed467cca8b5dc7c7093294d14015b59bfd8ac6bd479b73ed52fd30d8bd891ed971912c571e7f672ad398f5c02c989b475d12ce86e6e242d36784308e56178f2a6a1517c", "Expected": "000000000000000000000000000000000c3bed2f51a60f9afa6655853ec2f0e9d46bdc1277bfedffc468d9f36cfc7ad9e70365fecc84a5a40d863dcaadabf22a0000000000000000000000000000000008c5894a4f93b02fa1deda8b556798fb7d71f53046ccc305588bfc00b68bdfc34b3f0bf154ce7cb50c9536ad45e65f300000000000000000000000000000000003699501ebb9698e98dc998fcdac54dff895457d2e4e0a0e2d65d275b5798dc016e921bf1f65fec0f284a563aee66ca70000000000000000000000000000000010389c73de7f6d860c972c1f09dd24137c898e92935c45c10565ef3da3406cf521647ef80688f6e799eef4879ca9a6e8", "Name": "matter_g2_multiexp_59", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000114b9c33bd09899c684e81a5a4e620eefa4e620c01c391a4df5caa75be462ec7ab027a9ae2c31d6643c48e3d75b6ced6000000000000000000000000000000001925084d2a1f537329e23c77b8a820c385ec5e12e4a145888882ec611e99b05b789d79bcab48326db4424309c24d1688000000000000000000000000000000000a1dc78c25cd16211a38bd0c70d24c84da1b83adb219e1b9c06fe6a6669d6e0281a155b4cec32d32751fff653aeef1990000000000000000000000000000000001daa74f19cce1086a87232464ba903938465da5e3e1f9ddc05a4b4dc13f1026e1b07af7254d515d2ad6960ea62dca1f77f9a79850b2fd5a281b22f52de085f12bd34e56808496e1c1388804f534d2da0000000000000000000000000000000018810adf0cc793c21726e9a27b7c558aa16b81af73f22629c478d293208a107fbfed4511d9cbcc25fbc2826bf004e7dc000000000000000000000000000000000356b25cbc7cf65107438125c930dff24b7786cbd7eb744d7f27967619d5cc02799451ac8814782eaf9aa331e6f8dbe7000000000000000000000000000000001164ab32ddbeb11c2c8baf7f311ffb01bcc367395bc7ecbe5642d344a8e879c74a554b3f9e4b6ed7db4ea0f872cf96740000000000000000000000000000000017704b1dfb111807d1f5d90c370a5b2968008a5ee9fd72262b6543c93fa168285c04931198f5195f1abca648722ebdc5630c1fdad9338fa5236f817bada168a737dd3685b327fb59d8a37329920af4cb0000000000000000000000000000000000a336a04a8fd8e18dd9a582da897016983d9beb0fdbcea6c88b7c0640620be52bff32afbe700599e3c08669c457b760000000000000000000000000000000001765fe4faeeb13fc2c007682c031ea7ff2899090e16a9a11959c5c3ae7881a1dd2c6d2b7f5f708a92349a2b0de4b92d5000000000000000000000000000000000e7c57db660133ebeadc2cb2054ab4ed16355466932685d4d11038e1e1f47b0349b68bc4e918dd48ef8e1c5d7cc53f7800000000000000000000000000000000169b629ddd7add588b91d9866a750570dec58662e43409031a5e25f1b2913c5c5a7a7cf666953c99835431f091ab1b140969599bed4899c3c47e1d4081027203c73233536cc6e45aaa78a4f1150a51620000000000000000000000000000000017d03e9855f3bbee719a15208ae24324ebf1879972ac134b027c9e03444a5736863bc55604158e81b38c7fd78ba4bee7000000000000000000000000000000000468f7c5478cc0faab7098dbcc455bf18525b56272c2d02cc1febc1825579a613edc6b455764ffc71c903a0704224a4c00000000000000000000000000000000067104ba5366e7e11bd4d516565d9cdd93d4390f2af3c1ef2ea3b1e84ee8e5c0e0fd8ac11ec9d2553e4cc13b277d473e0000000000000000000000000000000012e10495ba15b29c669cb9683b2fc7a45fe7ddba743b4a39677fbf85aa738480eb9da967eee69b02ef14137e102e240eddd438de35651328de7183dd38820ea2983488ba31d401094e59cacfcd1d031900000000000000000000000000000000078f8c17427847ddaa1665d206866231a5f36d3a7b4e8fa13910161566163006b5aa5d9696f423d0c44195de65326f21000000000000000000000000000000001613c465b65940f43c61b5e3c93313ae49d92728518d9cdfc57b49d6924479b70e281e724e04fa5f165b5999f1c1ed3100000000000000000000000000000000031741b6830c16d730619457d42767a51037fb4118e00bfd6cfcd8baea35ae76a5159bf1f4639fc2951f0b57446110e70000000000000000000000000000000011a618ffbafe4bad0a435d04084233495e5f7fbeaeb66d0d49a8177f562329b52a5ed4fdc680b791f273a7b0d3d4b349191f2b2cc76d848e456d07c84c0826a8861981dc84bdc671bc9b5882d387a41a00000000000000000000000000000000043c09eea638e524661c60ae3704fd1c18c46443ae134a0ab7b9a98cd398377febd9026c28b3e1e50de98766aaf0083600000000000000000000000000000000105918aa1476cf52f91b9ddb7c23ac18af3bd5269dbafc369713687010720affed6b12af9414cecd521cf0c7f5416c350000000000000000000000000000000019ab4a3eca904a15782f560bbbc8819dc09275f1f6d7c3b8e98aa0a96ec33dcb528284636b0f42ad0d503489d17161ff000000000000000000000000000000000a2abada18e79c548d5829991a65491ebcfe0e1a2c89a1e05f06a0ecd197797c5ffea0ae90b61f54c6b3fc844e0eb3ddaa76094782d0c06f2080d699b81aa04a60891046e0053d2fa757c7029df8f848000000000000000000000000000000000d457cb2c77acc8ba4b19ade0c724a2b6b0966ecfbbec8cbea745439b9bb7f3dde2febf9fcd6c5e6139fd7175e57b1720000000000000000000000000000000003154466283addb0d0b5d86a9633f8300960cbe8bf6a1405a3a040472542e9da63fd4f79a43d641a47c2b69a31298d3c0000000000000000000000000000000006599794823797f8ccea9daf0459b9d26e0d207f5fb95383c6b61eba38516b272e8ae6ddff2a9fa791e69c0eb25f3e470000000000000000000000000000000018be316bbe0416ad7deced1486d4e31490f5dc7e379c17542b7d3e9dc77bbae9c992e657c884db320cd51c2141a4abd2049a751a406657dacceb3721461417571a0104e11c1e00805becf71ee77eadf10000000000000000000000000000000007ba1ec5293d169b88ca4d2d92eacd51f0b8cffdb403632ea8ffdebc37f3997baf736771231335d12717cb45b51be31a0000000000000000000000000000000013505cc24222fb2ba9e25f5f3497653462f5b10bdd0dc88f9b16d5643a99ddd4a7749dfa6b566f41cd2da7c2b1ae93d2000000000000000000000000000000001465fdced698ca76d5faaa7e4faf1260cd5c4fd2939b16d3593e3588c92de3d003540ec989be9632fdba4ecae889ef180000000000000000000000000000000013a20cecd5e8f161ac70e40b8e9ca4c23e2b267690a3abea941c293b03acbbe4fc68a1e7b6d35b79ac46f65edde73a3e0502d56084d1be7179fb735e233978a5a3c2756d780cc0ea6a8aa92b1d1f7c4f000000000000000000000000000000001936436783f02f3a5307bfc0bd8c0a00ed8013508a440d040ed4f45b37a4e89986102964a328e93fabde6d9dc7ca424900000000000000000000000000000000000f16408b869303181b4b4877b554353b26a7b4750b711f3c41cc4b6682b2113cc772cf9bfcd0cf60e59ef29a5d0814000000000000000000000000000000000d5880e2ef94663ead736687ee725f7ce98fdc594230c1ac9e8345d39754bd616e261076aa5362776a6026129bff105c0000000000000000000000000000000006865ce3cdb5081e86535beb990d95ec3d75f67c7e881306607e4876c42714d627f8d548849aece4382d1c8f2b693bdc9787a6720b8db1b4f0e1d535833ed20b519a0e4d2e9fef75022aafef523713750000000000000000000000000000000016d941b6a0dc023fa2699c836b74e16c31b4cd51538f73fbb271d163519d4de1cb0f6ec2f8efde22c74ffb532c576b16000000000000000000000000000000000d10a7bfe9541a7b22d455f1b68cfe2422a83a070d93476aa0844670f02aecb36e9f41b9d66e8e9d0d67c0ba85c99f44000000000000000000000000000000000d7873f96d45fa8c9ba9cb4913a7b01c8e38876b6bb2a05506d23df0491bcffb42983ef663db85bc3cf755f476291a79000000000000000000000000000000000c22fdb83f9991c85b3577d1ed5a171f28460d79dbc6167b0c30b200235c512f999066eb1fa449115aab55128f8f2dde10b47b662e8cc8dd005bdc81dc6d98d0eb98f86b46c0c8f24481af9120e84a820000000000000000000000000000000010faf9cb9d0fcb487c9e86a2d2123105baa8691d82ebae8f5bb7d5ae7b7d8154837120eea86dfcd35ea5482a7ebf7f8a0000000000000000000000000000000014e40640eb6e8e38651a2eac05165f6cf5e0178b3711f34828766ff9db951e1348f0cdc652a78840dc24ada8b1c835c600000000000000000000000000000000129db7482ec62873591018a8399a8c5e4bf00e8bd9dd78dfa3d0b4cd1d93ce5ec7531e56d58b7a1cb3e58f062f6895ee000000000000000000000000000000000d8db3b54b6e71497faed107b31f5e44f328780cf01c62cb5ca00f99f10385ebb22a367cc89505640d1106a9ceec98c4072460e3c5349c8fec9944dc99762625262e84c70f10d0a92077a351335127470000000000000000000000000000000011ae9bc3ce04df2add17e57f260a72f88f19a1e44b0b074cccb7fd547035038d19e5f2228db46843343a69823decda370000000000000000000000000000000015ea64b6147ef76212bb5223d6d5ab9ca866799365683720866d8ce1117f60bd552a8e9981c095894258ca3c1bb5150500000000000000000000000000000000173bd5cb455b80b78951b15180fa7f8fb4725c1a12e5c53df1b9b31b45a29083e66c7116741d9aa93448c81b5e6014610000000000000000000000000000000007eba059855ab058c2066c643ef5268c864d09ec9962537d65a1686322c374eb5ab8eba4c4260ad0919dc18b4289a694f3177c4d865caebf1ef6565bc85e0b0bd51365a6f321e26b97cce887bc3f44d6000000000000000000000000000000001598471460ae082c2e2568602c99923193c913b9e803cbb7a4503ceff369e8c4bb3a19ad245c08192e12a2e9b3e75c4e0000000000000000000000000000000013b289bec9d97c529382388f7037749c10a64f915746d23d8f37e15db9dcb173b3a6d00bf45e67b8c70959472148321d00000000000000000000000000000000094a99f9b031a51b7d54f7b8865621b204c85d23fd66fe8ce007f0b852f8b5b895010745b2fc469abb670e38fbc41e50000000000000000000000000000000000e36daddab2134f65696ede36c50f90f9a1c56165e09243cd56fd3d9902d3c78cd85e7028f6dd466f6a8655da62ecefd393654ef7ad8687c8878c55a8240ae9df04805d3e2f194e960d5e498ae3ca17700000000000000000000000000000000050a818ce247367e8b57673d205d6bff8c650bcab7bf794dd32494669eff865fd4e05d7b4d35eb579eb475a3a0320ff80000000000000000000000000000000017ae5d612bdd46e1351dd1367c08c16ceb002a29832eba75e48d4c82e364f17c58525ee653a0940955b874da6a5bcfcf000000000000000000000000000000000eb2075367b42a0b3dfa30799ce1ab327eb583316d15b8cae21b716e6c7fd8cab96c67bc39e353f5e842e74995356c070000000000000000000000000000000018ca4b533da1baab37f05afc3ae0afe976e4f4530401d2f97176f5c73de3eaa75b8a34e8c6c0543ca0a08aeed28e478bdb9f942124a381b150f00a59e4579d0a2b7b728f62715633288fd03d01dd12dd000000000000000000000000000000000b3f4bfec920018663bb39c5520491da5c538f82138f03390c768e088bbb2880287196af937f1f70e215edd49d1872ea000000000000000000000000000000000037e7607a60cf235d8e4ecbe69d378dc02f0a8e40b7f23745e15a73fdcfc971cc8707d55a8c5b91d9a5f42c2f49c455000000000000000000000000000000000467df75c2703ccff1a01fa5bdebde210b61b5f3fa33e76e55be5dc953f4758c3a2c499cbd42b256ff5a2005949d9bbf00000000000000000000000000000000010d574c69050ce9e909dc23a76e9a2106870e8d8ce2a0e30d42cbfeea56ce3167535a9af1d453d4d8e6a450eff870638e6eb65778a328cf899f66581ac7a4a89e0e824c15573bc68c02cdaad89cdf24000000000000000000000000000000000907fb825f247c85d93fca36dcede9c22a409fa82fcf540593e8247c17875a1385fe009f0ff43853c404f6c96e2809ce0000000000000000000000000000000012bff10bd4162207870f6363342f2541804adc6a4e3f7b8be51d361be34def7a85fb39357c85a4e8df670fe39233bed00000000000000000000000000000000014f7e61ccd52bbf6d050c9d506751e03c8771b320872179a9f0161ac5736edc13bc133bda6239abba1ae09bd6c16f0c3000000000000000000000000000000000ca78624563584f8929d72668da70218a2da12b42c4b894108e6b103201372554fdd6b3bbbf2d94a9d0cf4053eb07d460940e3620c59504062e4e98b5d4c8cbccdb017c47a094d06253743c29465731c", "Expected": "000000000000000000000000000000000de8e87899b294575392d523ff6e153a7c2038302ac74574bfae7fb222558f2b4c9556be1bc2757b83ebc180ae710187000000000000000000000000000000001881c7688debe3ff795788c90397c3fe3d6d9f56da9221778d7b12f5a54d8c0a00e1a8d4bb9c0b1d578dff862516b5dc0000000000000000000000000000000014cdfdffbb956a20d8521ccdb214adab14975d22ffbac107b2c15f42e97bb823c6a3945a5b299d3226e2044e64f8d1ed000000000000000000000000000000000eb769b301cb7c0c976623badda4db8ccb18dc7322472b5fdb969393d5d82b3ce94bfa59dae06ece424bfcb88e24207a", "Name": "matter_g2_multiexp_60", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000164227fbb787b2d47ceea93faf1cf7890f48107ffae3628192235aa57658d9a2861db13fec0e58c347571c2ab0cd11ea0000000000000000000000000000000015478417b6758826b1d6fe0c562d43451e289dd50de31ef365ec70faf961ebb65b510c4788b6c7da2dda9cf56d3c8a74000000000000000000000000000000000f9e50d802ca8cbf80caec6489fbb24a2761db1245d9f7e820e6747bdd0855902ff211c427c00157ed9b1bffdf39eea900000000000000000000000000000000128f69ef5dbea5f80dbb9558a25f133b9ad77492250e0654f8fa5b55266f2fd26826a5c373afcd74990ebf768d6d8fd20f2f697ef6783390724e04b81d0e18dde6533eea9f72c1e10bc72c7b954659660000000000000000000000000000000005f7cfb31492dacae51caf4036d99d917fa13b0d2353bbce4e6547ea744b3a49b162deac2f107149ebc2f79e74828f720000000000000000000000000000000015ed4627efa9b318cbb52f518b734327f5d1cfbb097adc6184c5034620504181a298ac7e52759586dae2e107f121a9b600000000000000000000000000000000023e832638849599d9d7854d3ae18648e67e8938ebf606a7c86c3a7ea21cab8d4dd5d9cda5c482e05d351ea3ccd854710000000000000000000000000000000001849665396bc36d0301f4c9adbce81fd2f2d0c7f89925487d91a25c6bd0730ce31678694a319666cf42162608ef15a834680b934e67bd7518f0d6a3a809dc7faf845eb71d0247291d61053d5cbe0ba20000000000000000000000000000000012c9b607e29e35f260f3c4617b4217d5dbc6953eaeffaaa903710195e080d593972e7794897eb176aae3539401a483b10000000000000000000000000000000019cdae8d1d9035d1fc4b4db09e7da3c20d3b8777523155d407cc6565a71a6c951eca609d328ddbb165c2b5a3e6b081da0000000000000000000000000000000009c4629b67c1c50e5fcf316136bc645e9e62ffadac8495c084f97e32b0a3990b3b1019261f78de576ff7ffc89e36e2af00000000000000000000000000000000070a49e8892c5b523f5914e2341dde63127b694eef556de6dcff603da109a53b342363d9a854dda3d2833e25afd5b57eefc024dbceb522c02b88810ada9a814bfd085fb63d570663a64bc0658e5ad0220000000000000000000000000000000018d3c9259f70312c803dd6bac6488541f92482f7eb61ead71fa42bd5e2cca9338218d62835051bd308799beeed3b422b0000000000000000000000000000000005e0da6859601b6ada82b1826a455a846f8b4e54d9f22c3c639835a8a89e17ea2d76e2f49fb151f519de3e9adb78f0590000000000000000000000000000000010113d2fdc1e8ce0027b651cee6f9f6832b531d843db3ef7bf209aa00018715c1c42c68a82c53247a267929ea3c9363f000000000000000000000000000000000e7d1152af6448aca78aa7983013395f0dfc298848d86def6f017780e9cb144bbb21540a14a4d47b61d7a9b8c62376fc2c136f00c97a515076f6a0b63faf7e378f2cf04f8a90ac942fd70e25e683cbe70000000000000000000000000000000014125c81d4d7a8ea18004d798311f0d80c41c8e3a08366f686145e867192bbb13244f9f77217559cae72a150faba12a6000000000000000000000000000000000fdcaaf79c0607ebe9c8ca309d29d32284f3567a18dbbd23da9d96bad7269395ec2445d153711df4c883e8e7f7b02ab2000000000000000000000000000000000d34dd6636ef18b14f011fbeb62d33ec4358166f96f38a54c36b8797b51c1bedafa43d9f51fa4afcc2acc0cdd991997f00000000000000000000000000000000017337fab49d545caba55b763c23ce9bb3d3cc475f5ca37a15322e94c37825fc800cc7ee67bdcac66f9b5c22b03bf6558b033f2270ad2416d03dedd4bafb78ddc598810768fafd349a42438923ddfc930000000000000000000000000000000013434d32deb96edafc9a0e855281970b7c748c92b3472b34cc758dc3c17c4e6fdcf3190c910fa54a0259ef8bec75a3b300000000000000000000000000000000137df92ec14dd2fc02c0ec15a4e63547492154b4d4809e25f3ebbf24fe84255babfd6949770ba61637cc67e8ff299a2b0000000000000000000000000000000012fb20ef106e8cf3c79173e15dcdddb216c25a4de6797e411fd11d5632aef1304b36f8135c915c8c38caa2d778788f060000000000000000000000000000000014ef5cbe5711a815b9ff845e9201745f4117149b54ea3c6d1606060a192d513aa8ffe73425e37a42537773796b6fac8f202d0d506bbcd56c92bfc6fbab36bc96716de1af02aa166e7db2e2a0a4c19cd7000000000000000000000000000000000b1581a5def94e95e565bfd402cb84f2f21c181639c047d8f91044da84bb7854f5cb4eb3a6cdeb66569d99410ca3ec6c000000000000000000000000000000000d8029828f4ca245cafa7f396c25592ef08f6768e1a5b806450be6ca5b548cfb212d8c4787c3f15fe922f466dbe518c0000000000000000000000000000000000f51e01a044b6da437e3850349476437e4ff8b94fa190387099b17e6462040918cb2eba3b10d6044ff2123242005bd6f000000000000000000000000000000000991201229a856f88348381e1f2e282f0487e7daf1e5a4ac3854e66fa3d1303e3c20eb9eca605859e7d46dcfdd7615cc8329762dde1c4c91043a740a8b9639e83e809f749fc8c4853966cb2ea520620a00000000000000000000000000000000011f1bff5df413ade311b0bc3b46c4ecb11e386b886b71226987f14bc1a3a4b986412c2bfe8a4618ad5d70afacf4a3b4000000000000000000000000000000001972f49fa8b36d11d9c9d4ed6197261506b892ce6dfa932b87e686cb197560dfb8718aa413c38ee1bb771a5618c17224000000000000000000000000000000000e563bd240f5e18b518a792750c00aa5dfbea1f79b80a71369238ef15df9885d341d6901fb9168a2e74249f036e9a688000000000000000000000000000000000670e59ebf6e30b458ea505075840ed5348563efd536c31003d8d0bafdacfec7ba1ed401c616a3bab431a0fa71bb6188ea46572fdb37fe282203172c147715bf0a16e02a62bc79f33cbfe36703c95a7300000000000000000000000000000000071319574a93739586eda876ffd3be5d982e6fa04f5667873dfabfab83ddf603513394e0dbb9f418e725b02d2dc7b876000000000000000000000000000000000c6a8e0261da2ab499bf9a639a6e261e8c479f3f2b2d12992b41a3267e034c25373d4da4645626e6343e867466bf3626000000000000000000000000000000000045a0312dd5fccdd19edb65e24d5ba50e44689a9748ed9ec208320bd9eddf8d606b9340cd34ebf983e69a65c242fed900000000000000000000000000000000090b3dbebc7dd49e9f764e99c43b5915b67bdebd00d22c80e36e08873e5c5186bcd082dbce94f4f230b237d60cab7107b9e49472b9b74cefe5a951febe595b0020c43fd54150445fcdc4292c5ffe65f60000000000000000000000000000000007b04063dc315025b8545cef11be6b601fb4ae02597d75979b4946f3872764ffdbfd309f5ab3b36fe47b810f8320c1b40000000000000000000000000000000009361927d02192433a8d3c3d7871d76c6d88361774913067d16b68625aaa60f5a4ca19b6fd4140a5a11f92dec57d783e0000000000000000000000000000000012501f19b73fc6ddb4d194895e5cc2b89ca84defb7ae94f3170f25417965102fc195f38dfb7a2d88aa4b24e4a2fcaa4300000000000000000000000000000000141d0a0be60c32247f6cb0e0114251ac68c90fd43651d58c3108c728601ad6efc27c27a331a2f086d55aed54b3585fd1b6bfa1ec877010aeab030b96e80d2e27b45a93c6a99e2aeb3ccef22527c6e47200000000000000000000000000000000043f74a82ebfbbcf4abf3fd02eaa4483108a3446c9cf041bc67f5078d1774308ddcb3f918d7999d1e2c0876177cab6790000000000000000000000000000000000da7d4fa72dabb314ad8f68b61fcfa38627d1d7719bc07767f596671c58cca16e005d36e42413d03da3c643eb46b1eb0000000000000000000000000000000019f3f8f1a4008f9db1b604373d3566ae7c14a9147f80597a31839b83f0f8dcdfd829f7fa933fef3499b671867c3121fc0000000000000000000000000000000018bba4bfcf7629fcfa47935e36462cef4fa3751c7affa2ee2cb2fe3e3532d46ca1d247393ea190fb3f48077270d6a8b22810705458845232e851b33fdbcaab01966b8ed53b455873a966c1d6b89363890000000000000000000000000000000005a1e0e3a023f67aa7ab0109814f130a05c8c739036b98c70c8a8ddc1828d2cc4e2fcd16de4ef038a7373d15c78e81f10000000000000000000000000000000019e2bb467409b3dfae0b06244b4140de7f75cb105ab897d1ffb999c6b53bf3b60a3d11354815621c5d9f07962a237ffe0000000000000000000000000000000012e745499d5ed626b4762b57923bbfae7f1209408e7ecb8813a545c4ece0ec7c48a4015e0e264b47fa08fa82c39d3a110000000000000000000000000000000008acfd3c2a2e17be41a70ebbd1ca2cff2eda8a359e0969a389ab0a6fa51db5601b386dd035b26232be08d704a02033a7175fa4954e56dabfd1808f93d2686e0b4fd285bcb78b80d15e10e63ea8c7b646000000000000000000000000000000000fb464af51161f9c2758acc09d16754d4d8ac52a37baf2fb6ccd3bca3058bd3cd204de6c8a0bfcce8822f16ecfcd0601000000000000000000000000000000001819075eaa6d9e3f0568ecc2e507370f938a65169cea1ecc40c9cb4d02c83d7964254602e3d041ba0f93c24369fdf3940000000000000000000000000000000016c179832739a8129d2ef184f4d1231d24bc8d4093670a63d73771983152ec322b6a8c954565d61c2af76c4f6ef5e8a2000000000000000000000000000000000f6623578a4fa45614f4b74768adf65a753a35dacc84af005fa4d7328d733a09f12f709a7bb7f89060f60d4fac85780ae7dda7e5373d0e0afc3da1507416f47ea8b467a5b6c2fbde484aec8777ab7559000000000000000000000000000000000189724a2a0723e7727d224ced126e4288f4743f6855b035722f2aa36cf2f0a6fc23f6835c25222b670c15248884451b0000000000000000000000000000000009a57d85140f31ca58e38b4a99c4ef103f0a4af0d5546d416134fa8adce6ecca6588c3c56ba06b2f59015acc1a081099000000000000000000000000000000000dfc67b7644851c3e928ea33aaa0f745a18983edb7488b148736e81ec0c62345c11e3f0dfce729d893dce27ea249860e000000000000000000000000000000001712009a81e06a85a225a46fac056b139c8da05e6b72074ee4079316e490a06f51c62241e380909b86239d867d631be16aa731f9393d2bb32adf04f19884dd1a5e7aa36e46408b847222a153da95aea5000000000000000000000000000000000976746ae4d9325d5e8300b57ce99650f28055b5e020700ee5f124fa76ef3bdb9923101c3a1f46b6985b8203b4e8c60600000000000000000000000000000000057310c3b6cff6c849938f533b401b0cbe10b6ff3736c79a968009b2c0b90708b6b9a98b8e594cce09c579a64ead846d000000000000000000000000000000000d39511e47f33e310332178b8a0210e76e4d4c7408ff5c2374f5e7bde8335525e03897cb3e2bdfe59bb76b21cc6411df0000000000000000000000000000000010c46a621b7fb2e7ceab8943b3371475d3d6f132fb658b8c6bf299888711f1b344ebd4a5793ffe6a7a7eec8c66c80303985f367919b0f3c667b1c1cacedeb0be1f9cb175c899992ef55f14e9b7aa6ad10000000000000000000000000000000011ffff38891ee56cb1fc062d02f6c9993100f991a556445b5ee1b1b0d56d8e64bc6eea4d7f69a6b6dc55ce7d8b4ba300000000000000000000000000000000000d6cdd95d1ab2a11ab424d7aa596cc7e5de025c57217da0da143887d7dccd6fda0addae7c2fd9e0996bdd0d23128e807000000000000000000000000000000000499b3e69214fdb4db7dbecd619ef9c6b5c8343c808e4953f593cc89adba02b5cbc56a5e7a3046c6023c5cf305e54e85000000000000000000000000000000000d267e21606c16479065e47da8e3c058cb59f55a1316a87117a73dbb067ec26f406eba6a40b30ecb00f506bfd3c32f4da3041cc52c6f1bf62dee4c61b1c5e35b72ebff7e8e89b05353388b551eb10010", "Expected": "000000000000000000000000000000000650fe9f3cb3620e0bf1654a7f1dee503b79fe2218739bad608dba9f1e5330f325b4fb7c340f118eb10dd0776fbfe63c000000000000000000000000000000000bcbf1c6a684dea5ad6c1a540b3525cbc64c7c431f37213bc8b08c8d8915a331c07bc899d3a2ea72a9a4bb2c539cf56b0000000000000000000000000000000008fca1c364333f558c7284afa1be486e84bb035b049a2108b0df99395149de83549de153a784e4df2b0134317c85292b0000000000000000000000000000000002784cc1d11667bbd0759bca35a16a1baf49a21765c6c2c3bcdd4fc9697ef20f1274be5caa0f820d37e843bc38c68957", "Name": "matter_g2_multiexp_61", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000051646993c3aba532988d7baa07eaabeb8366853436b8b19c0fe3e14ed45fdc65448d749adf745291ab5ee62d4e824880000000000000000000000000000000002cec01290d8e51ccf751183dcad20bac20b8231804a2b6f87f886aacb61d31b14f2335629e97af0ae0546a17a4cca49000000000000000000000000000000000762afa7b94ed580fd07d5141a8e1299c6ec439bbfc6c1a4d695d9aba4ab5d6dec93dc4de47096d72e5ad87d879eea190000000000000000000000000000000014769208ce8a9682c8e0340f68a0290a7782c2b04e3c13027f0b23966eada2ffb2156f6e20539738535fa0ef097f78d6709a2e80dd96eb12edc481e3d58893bd0d789a499d5289072d58c2ea80b036cb000000000000000000000000000000000acc4e3ccc3574285c19d2545839d1da9db6770b078aa399262b7c91a7c41fb4c83fe7dd0aad19f4e3eb2b56273f664f0000000000000000000000000000000017851c99881677b89956fcdf1b8c5ca5dd0997d810f3fb89f7378dbf7964926cfde315f8722531d6d715b4932179eeb40000000000000000000000000000000005e374a4c7118a76e59cdaadebb1c4e635b4dd18665010249f3bc78d559455d27d547856573e264c98ba39f6f3abea69000000000000000000000000000000000a532979cfd5263c774f629027f7624799dd0f9d6a77f675d790a85fccccad6e93c00ff2e5536b8e9a92443af14611e69ff35bc510c86a9e72c3e9c6b49d2abca546f7a62330156ec09c6fe6847a400e00000000000000000000000000000000056f109801b7a4a36fcadbee7219c06ac74e4a3f7b81616076c33ba2a71d7ca0776b596fb25d29992fa26d416272a4b4000000000000000000000000000000000c02d7e6ec50b778a7ff36fbe5751ba32beb1c2024b17bd99b46239e6dd5a708d2fc689e8e8924902e0d80287cdbd6e90000000000000000000000000000000016f18df97f48aba4d1b64e71eb894904d02ee7f6ba425e58f38a08542319e2498cb0dada8dbbb81bb398c9c924ae44270000000000000000000000000000000017dce98b335f536909ce01647aaabb918942ba2468d9a07c5516cfd347e1baa02029d39de1b2602932630e4819f2f00f391dd27628d0808d4a0773509737597230d7849418540e1fe4498fd70d39d16c00000000000000000000000000000000005b23d6f76b8bd4f334e91771383856794d1dc65b365fbc0c94f21fff049761d7379f0d512c42ce13f878e0661712d100000000000000000000000000000000009dcf70c16f524ff540f132b35074cec6ed7dcc1f319432a0dd09b3ded0778ec9ad0f05d67ecf3ebb7947951fc4b25d000000000000000000000000000000001075fb15240d532a9543dc59cb0098cbd03da77c3bf85a0ef8be1560958f8ab57d3777fab5836ba98d67c721a4a8cd460000000000000000000000000000000003511525fcf6fe224eb87b13999d2548b6b8bb8069fd354f298a025b04a33f48be72d8e82a99b9aa34ce5ccdc1f1a59c94f11b10e4c45f15d811e3db4b947ee6414e262965d7b5c23a731b019e63d5130000000000000000000000000000000019039c69d52a66330d2d8572a1308bd88159f0383c041ee7605d0aa86f1d0fe3e884d0a2ad9c72405149b5fd204ec3db000000000000000000000000000000000942163eca08672af3827dbd876b9c1adeefcd5ae74a2768fb55f1e8b342aefbf76bc6546853a2b33e26fa866e60a4e9000000000000000000000000000000000c60c6bd103ba5bb5323b5107373cd8d706038bf5ec2b367a43bab72411523bea35985b974c756184c346626ab2622d30000000000000000000000000000000016c4a2fc8a9b3c54f65cd150c80a3bf70ae8dbacdcd37128514b4a881239023e427f0b0c8984ce219207c458bb380da970f7a0ee05cfc3f63d46a3151c20da53604628bac70d7b521b3be65d7b2abedf0000000000000000000000000000000003e3df9a8ce220be05f15904a3321a6805ab68bbd539479be56b2a870c3d61234e9cda8190bdc89f48e7f0dd9374e1d800000000000000000000000000000000040446db3ec43e3e67dce62efd741a4157e8ea2597a143f7d6273b66c7045daf31f72397b4b9d374328520893157c1f1000000000000000000000000000000000c3a7dde5b02df5f7c1e750a9ee5314a580cc6ed53d326a9157b507ebd6c2da314c37a7f1837f7fcff7e8754ab603b7b0000000000000000000000000000000005e617ca4eced853f8f2e9fdefef810c97eb27d5c8bd06c5b4ea50c03761c01e8adddfe27d2d72eed8cb25ea7514a4aabd991eb5e8ac8ad7cbf8fe64a5889b715a2409305f2366b278adcd2144d7be8c00000000000000000000000000000000104ccaee210aa8196010a6478702a54cb7ba49c80a98ecbf5c0920408ff8b4a7568212bfbf3561b6a7790520bb73bd42000000000000000000000000000000000870ddd51dcc76c8a97ac4b4f23819df48dc8a8798df0450d7a45d273f830c908541dcaab7b066bcd668b289c846ea000000000000000000000000000000000012fdae32b020a346ad5edc3bab360fb5ba55004ef3dfe5f437e841b5dd7284ddb3880051956c8068e49a3fd165143ac50000000000000000000000000000000019081bf768dae314fbecec408d687df5b6ecb32ec24b41f9febd583c05693f80345e6b9d81322ddc72616c1cc39a86811a9caeccc2a2058c2f5a271c09036d73320f9bcb31b7296a796ef94ca4599757000000000000000000000000000000001316b5ce5bcc168d76d2c862230ce604d02cd3d242c51c250bc6b6fe5c380c9e83fe7041049f2272481ab38f44648f4700000000000000000000000000000000079acfc2b9629da9c9f3394874e64aa00527de21e726f02db180f86cc0b9a97138c2c567832e287635721ca40469e00c000000000000000000000000000000000e11807dcd4ac69fdcea71e3e6a93dafc27afedf12c2998dbbb2e4f33e37ea736df73af791eae69bff84f3bb212bab47000000000000000000000000000000000e834a34fb63d9df68d683a26d79ecf8ff67066586e5f760d4468ad196c66d4ebf8605ebfbb7bde201f47b35cfde3a5d8ed4eec02c2af286ae19ad5f05642587cb9ad93196756d269c783a11f23393bd000000000000000000000000000000000990f115519d2125d47b925b613edc3303110e9040fa705211e0d772edb2e0f7f88ce521d1738a5f65c9d158e9d360c2000000000000000000000000000000000bb951a16decf9be8381d0c88726b53d90bb32cd8aeff962d48e43863e4eab1839bd80d7434c7eb808bbc0e32e92a4290000000000000000000000000000000013dbd5bdb7caaecc42ffd81f14be0ff3d8fa228ff121ed4f2f3ad5961fbce617d7cbc8133fd49e03caa62f7d1567541b00000000000000000000000000000000195fd9b85e19d0e3e1c93bab0380cad6f6f3bdbdcbf5c6ec32b7de7972421d0065cf0b265f6250c02eada67e95284bce26f20eee9bd019f9e0f5c794e22e770128737198b5f5dbaf5b7d18040443a0bc0000000000000000000000000000000009ca977266277bdeb985750df47353a6b81c5f0c473eb3369d25a01df67610bebf66a6de5727a465131404025e90441a00000000000000000000000000000000054410a13287ecf4aa18f543916fcd65b15cd5d54617433217b0a2b91a79fea764b511b3b270de3e8985e8f6a2fd8c380000000000000000000000000000000009a9802a03a7c9fb63c1eb13972cd42ea2df614a0972b914c4015c2e8630af319d12fc8108b4c88db9508a9a77d9e57d00000000000000000000000000000000094d83483bca296b20b7bee124f538ae9c659a84541f5c9d9fd22e98251d2b48051ac55ebe07bcc9d2e9109f526d60a6c470a66cd3428a44a7d095ef410126257175597a333cd36ce6c9822d1ee9bb380000000000000000000000000000000003f2d93ddb6d5983fd5521c1d1726addf662af0945aee54788855037f47a013d2fe595231792a05e1259c5e5a8c553a900000000000000000000000000000000004f4f4e7df5dee975fb440b5a217c27d9d1eb83a5ae280a2b147896f6bb864abe04459c17ef56d784d3c4a0b7ad3f3900000000000000000000000000000000069da36057aaa89cda458af4ee27fd9ec969c8f7612cbb153da0e010d67bfdddadb2941cfbdba8c43019a9f1aaf9c296000000000000000000000000000000001545b8325a80176ea148a3d9301debd7046f33a1b419b4ed01916a3d0a072037fd617d96e0bad32b208983ac3be7dda4e53fa8fb708204e619c221b8ecee14fdbcb1f94731ac2c858787ab33906c9269000000000000000000000000000000001536a81b203df2640bbe7e695b5fde186021d21685f24c25966cf11dde554d49bcefca64f16697509a9ca86e58b75eff0000000000000000000000000000000014348a2bd4907cf081f2f7bc944a98d3fac671abde029995377df190f7f60319b8de1698b99be39c821328e32a449c760000000000000000000000000000000000e18d4da3823addb2a6cef8336c83f99f390e23d7129365d57035d4363aac7e9c4da9f8000f086f7d2206666f990dac000000000000000000000000000000000d6ba54e2af9afa57ff4536a35e9b61c8d8fb3d431b653a0c66a2a4b8f11d9b5c45389f894d64485233d4183895921f3abf8de43c54ed59b936e1d55032eab5c9d9e04e83e4696d969c24167b4239f62000000000000000000000000000000000d88d5719e07e2332c54ba41f330c7763d2b2b7c4140d19b8b0972fae6ef902415de5f2abcc2342fce24d3ed8ffe156300000000000000000000000000000000163aa2c768eca58194fb76822deffc37cefe04ceb70aba38a51f507be7cd64c0755abdc2e49e7db234cd5d68575c2d7a000000000000000000000000000000000e443d9953468b8cea4eca4f5968e214888e2b95bc20ece39483ac551d4e180c0b0a41c4668c8ddaf761a0ac03fbcad3000000000000000000000000000000000691930530ce86a1354d73cb21ee32d968e6d89b12e5a09a7991c7d27dec302348af7f49c3e0de91e1a1838aa11651e795f59041329b6c3e6aef01d3410836852f79cc436fcf23199e0985c56f65c4f0000000000000000000000000000000000d7c6f9d4aa794f34596bb9af4d62363462d9804898ebd7c7db7544be1f46b4bde488ec59004adaa0cbe40aef525ce3f000000000000000000000000000000001094629b1428c4c284b7a64d0623e10ca0c4d395bccbfaad89d1a737a3887c10b714541f2681c33e674c3b99a36b7a450000000000000000000000000000000000d6812fad9c5ea365a64ebd3150238349d88b76d041ccaa7e637fdfa6c715d9d6dc3d3315cb95fd6919fe419d028783000000000000000000000000000000000eee5cb772ce02fe2a4883008f17570aebb902ad7c40b4024a5b24ff75b3aaa2b54ace6fb4601b1c62837a20204194dd740e4a207ab5dd4a0621fd65697f5d30b8ee1440a5f5c5e74a0dbc6b6391c1b0000000000000000000000000000000001026d21e075fb8921dd849c98252a565d39ca9f5a62a825e7e3e77ab5be6620e76e45047e51350c48d9a4cf98a1222a9000000000000000000000000000000000f6459a8287bb2da77404a515dd7a35f46a4aa49ef72cd2cdefbc5e5242872df5f7b7aeae6848d59afa1dd142ae7caca0000000000000000000000000000000011e3545151d4e0b034b950cd2f1a3fc2d29e9d53250ade2482b7ea6075dacf7e8e777afa1e8e612b45028205235265970000000000000000000000000000000017a869d75144ece603c04d39cb56a487895cc882fec613f40f6a66601bdbbbb7748ec755553257d654d1558b1104a981f49a3f82d25c6e0d69207e6dff010d56f0d99b28fd986c5711878dcb6665b1f50000000000000000000000000000000011602a23c9b5cc091a700114e5d3557bd4857c4fc44cb8628ef327ddeeb728927347438f123e2011f9cfda9b6dfc42e4000000000000000000000000000000000c4fad264ca95827e9cbb9783e36cb0b683fcc33038d47bc7ab6b65998770325588e5b910e811cf7d61fce13c3378d6700000000000000000000000000000000009b4711aa67e84434cabc289a78fae48ea86641a162d48b79bbcbfd56237705dd2d1e9ba3a18d737eec29eb8e940e58000000000000000000000000000000001160fc9e2a488ad9385140bb62ab48ee613c2284208cf2f92912e1b973ff81a5d3de338d9aa6881cbe437907890258fc8390fa1b452f887ef3afc7129ad8ceb9a8397f7625c2b249d7442566814ae0a9", "Expected": "000000000000000000000000000000000cd0d8c746ecc8d92fcf2232793282d7e0e17e0ec27ee851487eb7788f590db3487296061075f36c24f67cd4c4bbf36f0000000000000000000000000000000010c5e1d05070c27f19c228813051c6a830254542eb71469664c842695b219670dba8ddff858e2d147019847866f01084000000000000000000000000000000001799ca7d8f2637da761622b793a3ed3317d50b902a1cabefdfc776b0d0ef88b707b8a5c36786d5ede3d8a381de4e069d00000000000000000000000000000000129881a3b56e0014bf1dac4775f509f309c33406f2cf22df9a0ccd15c87ea48a868d4437303923127bf580b8d6ed0a8f", "Name": "matter_g2_multiexp_62", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000d087c1b98f8c67c1bbc4389f21d9dab02faf46ee4223c609e7b9eb399132ae168bc12847c580f58edbb9255dca3b000000000000000000000000000000000065ded24bda39d2b830639fa511bce8dc770eb95e349d6874ce63b3355d23c1da3ee9771ad44e57c6c661b7453076fe7000000000000000000000000000000000fa3b2ef40a7c3d41f0c3a5f86afec252c6ce89bd1bf1f2192026e22fa256365360589c788753033658b1ba151797feb00000000000000000000000000000000105040ff4dc2bc435c2a82e1174e2ee0b94043d69074f01e8ed013da8c431f33c94a438a93b06774411780cdb72abbc8414ca9894bc15e6bca798544138689b2471f8171a5dc48eccfa36c83af142b7d00000000000000000000000000000000129c8c1db08ccd0dadd59b04df67a91fb6547d97ce23e59aa57cd3d38458e6baaa67285800809856e7e264d812e584390000000000000000000000000000000004a0be934248b4e142fc51745233b6d0ab2c46f53a8f9d4c84981e5eacff146ee6227de289c713e4ce24a4341572c9d70000000000000000000000000000000005916d14a8592af57a40418b10376e8e20f70929d2ba568c1fb70e343a1dfcf3e63c791cb639bec49c50aebd2f816fdf0000000000000000000000000000000018682c66a461a69b11d7c32f7aca07749e05a23fc46547bac121752aef64e9bb98a274d15a14faa93af8f284790acb9b99eac8ce85a1bc70c725a2f04aea3749d75d22c0df7c0755a5e76ab4d82ef9420000000000000000000000000000000001552053742eb89ae3d0b95be919c84e53919c898ada92d3eaf05605a19ac910091fc08a65e9764f3108877c837d478c00000000000000000000000000000000118e5d22f6df0e6bc7447177ce06659f94315478385372046b649fa6d39fefeeb492e6623e0160bc47233f4d3143e326000000000000000000000000000000000dd02c30cfdea5abd3550a9f28b546d82d5b3043f012de622d892062945847748ba820555fb811fb3382791ec43ce1f700000000000000000000000000000000050373898b396d9a641e2f2ed832c7619515fd9070852b891b4ce0b5bb5ea8b5e24248297d53e9db7cb946e76c4433fa49b25140d7967b0438e49f59a6b04b75bc8745b84d7350605be548c6b4b3aeee0000000000000000000000000000000006b465f4b9d60a3a14e119c54a7c35172bd648c86a7cf331e80ba849fc87b9dcd48410e3c9a07b634e83fc7dd71e5b9f000000000000000000000000000000000283ad9c77f549042f79c47b8a69e72164f0ee77aee50c20519d2b89029c63ea86dde2744cd21eb5d37e896c3abbdf56000000000000000000000000000000001668b08a87787928afe92d941240e503da07b646a34cf82ed09d4c2f4d479aa24358c8475eebd9bcfaa6bae17c430cfd00000000000000000000000000000000150e5b28bd901f7a2a9af44bfd6b78cc84900dc05e334de306f9a45f1e67708adddf4dcede8150a39670054f97a643436e30a51d55a1ac94089d0f3217c3a2182da6b02ce70ce7dd8e2d4e938bfefa9d00000000000000000000000000000000060d75764a92e30e80e7c1a6df1482585f4de901bbc36dd9d8978a76c12c739f85a9ba16741d0b19ed480fe2dc331e5b000000000000000000000000000000000024fd15c9e5b8872d2e9dae9ae96102bfb0e31d15e92a24316818862dd8ca7a6fef271d499fed5e0db6dfebc4c72e0200000000000000000000000000000000058cda551e1fcd701c6a3880b276a2f7536a26aa366a6425a1c42cf31eec678551f489a27f23ed5dbc76f19b0fbfae43000000000000000000000000000000001152e2cfdb584295563af8120c523a9f4c01cf72da64fcbe0a90a284d693a3089f299bc760166be062cf9f8efb6a951ad3da3db6492ff36102747d9d663bc6e9cf8f75b1cf77044989c7af3f11d66ae700000000000000000000000000000000116fc24e980b2e7ad6bf17bcd7c4f06e654bbf766ea0238a66d738bf3c2d41c8c63bd52f81553cca5fea91f5f9b74a2c0000000000000000000000000000000001078f19ecf785a5e0d3e764b7d6ea47b2d077b5eb222f4e6a9451f134ff0d77a0b9a3b53caf599705d131e3b17b6ca9000000000000000000000000000000000e44c07f00a1f198583a8ffca43da45d8e54e1f2a85bee7afff6c1c733b5d0b5712961c4b6d344869a8e4de3b34218e000000000000000000000000000000000083c78b3568cdf808b75d9ee2b03b98cd516bb16ca8cc35757f53f12119747bf6b5b0605bdffb2f079cbc69e99ee0bad6de8753f3df8be42b6d6ab578096426f852de4ff545d2e4ac12c3943b044b43800000000000000000000000000000000087ded6945bd6fae7a0aebb1ea68d3cd34588035531a6cb00fcf1b83e06f7ec21cd3486580165c1364027b43e238e34d00000000000000000000000000000000005a2fe8a9871273bb60cc7ebef44a361300a1033f3f0230a731f5723fca124ec9d305cfde45802482a45942154398cd00000000000000000000000000000000121eb94a41f9e133adf082ef651272c178d780a1c31ba8797f60a208ad36b4c703c9b6c08be845f8844dd14d6406734d000000000000000000000000000000000e5e3da7c91ab4cca1c9286020aab9795e64e667d55a5a700241f9589aa3519639f168d040a0027ac057f334a9f740aba28f7ef4b12c5097a15fa6394a4dcc3ceed6cf3c6240ec2ac949bc21a9f6447f00000000000000000000000000000000041f9117b426938acb40c905bbcba443c043bb55cf9b876edfa2ca051b6354124f0fa54d6a88ea172c3f5c10c6d921b3000000000000000000000000000000001828dc0b9533274db6afc802b2fadaacf57f28126094b6b9038ed5f6bbae0112c873fe5eed15bc49b970461abc2f5c3200000000000000000000000000000000107df6da02f106ae47718959aeba7b4fb4a8f0e2651560e2f2266a62566e13a5af86430b8800543f5eb6b1e96be79c69000000000000000000000000000000001628fd4a598813133de75cd7c96ff3711b6bc826806b96d07e5a89cd549592f0f51c84aa9ee0642cffae5630ca1ebae1a3d0eff3368b10d00566f35391bf43c9d204a4444b7eb91017f1b2d8a762d90c000000000000000000000000000000000e8fff44163cd9c2a4e148eef3cbbee19ab8f648da1a8d438be27d2b0bcab393fb7d49e096d9a7abed3d8f82c11c4e03000000000000000000000000000000001274335d8bde3d14924f8d7ba18fea82bbc85427892f18fb741c8ecc5f2d6d7bee74c68058164c55db3cb8da8597bfe40000000000000000000000000000000010c7fc728c094e47569f0e75446c399d20a1239b511e34d8d6193dd32df607dfaa4377a1825b3892a9f74ff4efa0d9df00000000000000000000000000000000067d904122a6581b5d5a60acfe8156dcb6c10ed083840e506487b5dd9117927663e0ad883fb91b4914778ae082de0a7eb90d76e660389e570bef756e9785e39b9748aecd7a34556bac8399aa5564d12d000000000000000000000000000000000a909706e3ce45c86f2c30de5e820c8c9eefef207e530fd504511827f5e6422714d3f4224afa6bbba22ffca533d647390000000000000000000000000000000013ff61472ddc0d70207692648087c283763ede668ae380b0b9d6ae6593498b0adc9d4e4fcc73b5cce250e7563f7577de000000000000000000000000000000000a81db69eca785373c4dcbafd8635b23a9f41265e91152f309fb2945622937e65b5c17656abf8aff042a1fd1e5e50341000000000000000000000000000000000c66269c3ccd9e91766d1a640789bde6de752d08ffe3b2955df8dad3d2a0b6cea9013af235cbfbccee8271a7242e310614f18dae096e4de75de3da284a5755efe51e912e180020a20adf1f5de43cb51800000000000000000000000000000000181f3f4a16696980bd0eb9bd10ff1084ffe90bcb65f12f505b25f0a26dc1d4e16987d486b2c0b117fd6f2e356b83a5250000000000000000000000000000000010d7be6788da3ec56c87acee68ea8a03e7d467f816060207bb163dfcf8a4e7721651bf2bb23d5bc390d50fb1ee6625a900000000000000000000000000000000196c1ac817493f51d9ca891b55fa65ad5192df83cdb63eb1a634ad54e2d627f7feaa68780418f5354e6cc09cdf2f6c5800000000000000000000000000000000190f36690b8d36f2e295b9625f23afef9d9babe87c1ba0303f60c6d44ec952ba6bf8356469cff9d952f8e26bdb86ca06e32d4645ce0172000fd74f30937261de89753caa716dd03a8b3269747f2349a1000000000000000000000000000000000f77df606f0611856c449c58393f4ee7a6225a5bee667382a48f59dfc747736a895d598f90ab26002dd0ed3a5a8f5a200000000000000000000000000000000012aa50d0ec440884fc6c2f7a0e8db8a5e79160f0c482209ae1a1aca2b9dfedfec6d6ea09252a373ea57905130220a4820000000000000000000000000000000004773f46165cdb19cae49cc42663316df39586c62be5b827535f138e1fca8dcf62ba42ab60ac6dcec85e8496f32b9eda0000000000000000000000000000000010c91923c2c7b3eb2cd9aaf0455c0eb035e38e5352d218b07ea23f50040ea58fd548b373c1bee9113d3d44fcb25f6ba08c8722e3e929ba21f1ed6c51fe5ad4940fb13d63e0293893135d0da5e6e0389300000000000000000000000000000000044b95fd5f0e049abfdc2adc699646afa5b0f64464779efacce85a5279477697090615933069992bf30036c6ac70dfe50000000000000000000000000000000002778e7dacc5566354c24ea1144613a5ce8a38eb56d53d230ca145ce83d5ed88596afe243df22cba10f423e64a7c103a0000000000000000000000000000000017e87cd2752d8674c373c557ab2b922e02620a070aacf6f5b3d3d07ca35d89ed2666da7246b800717c0e4763dc35f5f6000000000000000000000000000000000a3ed312e5f309eafaed486629d953970cb73f839bf30f506c2f393df4c283f299d6c643ae6c229430d919e8aeae8bd839bef6ccc893f6eed62e68f5f2a07812f2d3066b89653431e7e39e8596bc3652000000000000000000000000000000001082a0edac6267151c8ef11fac7614b74cf58b39b72fb71e4d66467ed4fb3264b177c691e569230f2a13a64b4a48c6fc000000000000000000000000000000000073a8d5f96ee580741bee1f82cacb6139d962fec34c44c648c8fcd0322796429bbaef083a11b4c8fa376d4c00cd79c00000000000000000000000000000000008d41e51dc2822e0f14b992511de799fe4db3783a05ddc1026a53faa89af000075ba5aa830ceb7551e51f0fff144c1360000000000000000000000000000000006bc4bf0bdf350af417160d06e8aebf2dde02c9b50be39b0c4dcb3a045f9e04f1f041f6de10328e287df6121247dd4e9c395ba8f2553e3eced8a42b221a710a5cd2a5ffe5834d3084dc260ae0f51698e000000000000000000000000000000000802e7b71127a15a279a629e89f194b51d19c4f329efd8ecf9fe69d340dd06068c8467da6ab39be25c194077d3ce2428000000000000000000000000000000000250172c787afe866b428748be8359d8e0bad161832abc108c850362c5839237483fb38678d77c94696260508907726a000000000000000000000000000000000d46223c1666f314f9a1e32a94f83d8150755d71252e19af91a3b460ab0ade2db2364d8c6217cb422095f0d9a1ed648a0000000000000000000000000000000002fc2849014717d1c07935efe601325e1842ed333897222f6de322dac8b50bf4d9859eed8880a34676af0d0e3277639053ef5568a766b6c39854ba059f3130b75d7fd870bfac2b00b626e2d71c4968e10000000000000000000000000000000004151d78d65b0c9eb26822e20d90ace8fac209a1f08f62ce722ae3effd7fcc476f4c0179e71b09fc181db96fb2ea4eec0000000000000000000000000000000013d17ef429483be98411947ca0771ce671fc38e27bd0aa4abcfd5ddf1af9e138404d86f4c2ed74702f80a573638d92f500000000000000000000000000000000178f2a7eb43b9f88acfa892b5868d7f7c5787a399c1c566de39ecedbfe88357fd5256ec57e1ba12e9784382c14331756000000000000000000000000000000000253a391373974beef746c4397654a30a68992fe9163f9518ff0ed9b7be37b858ac60c95259ab894bb6acfd123333b7fbadefc3880ca8dcff10b8b763f7d15f88965c2261b72ba879e3540a90c59effa", "Expected": "000000000000000000000000000000000710bfc39e92b0b9d15ee9bdb4959daa3a78f66aeae29eaeb50a0aa0460f3ff703c86eec8903011b4b61a0dea725ab08000000000000000000000000000000000856fe7a074d37786237cc14ff1bc53c735ee8133b231dd3fc63dfa0dbd1979304bcc7b55cd1bb66fd7529e15d15db5800000000000000000000000000000000014757f1fbfd4fa7935ebfe65e150519d6eb4f4831890df4b236dda98804b79862fb6699b587c3e568fd6de1e582409900000000000000000000000000000000000f7b54e4961dab9e94b1c4b897177dfa74be9937694a38207ddc9d6290dae1d5e122cfe4c8c31d853db3783999a7f0", "Name": "matter_g2_multiexp_63", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003bfd2535c6d8ffb44670bd02b5aa6f050f5cfae7266fc3225865bc3f34320820eaeaa952f80da51671f6d97b3df9d4f00000000000000000000000000000000026c1adc0ffc3fef9ccf018ff9a647ef5c69c5133fb4a6566cdcbd3180d9ee784f34d667edb1dd54ae292253b45576b4000000000000000000000000000000000ee90fb541becf96b4728f1859aee5ae74e30ba9193b90569b66b0e1d087eb81f30c21774298cb06e7dbee8f8aafb1930000000000000000000000000000000000a4361867bca952446f64c273735764e141eef43d156d6cbb6e68dbf3bc940e935f7bf3a77b57fca4bbc74bda2f26532c1a5abbddc02f453519563d6b6e05959d8de5feb493f7c58ea5e548cfec2df60000000000000000000000000000000004bdef85b0da28e0531734016e5953256c75c3620937736cf65de5f05b8beff294677668047a3b74f0f135b846a95bd6000000000000000000000000000000000b754df2aef855b4a0eb6f6aa03115ee8f38a31fc852381deef2b59bf23e2c885ae166030ccadd5673bacc35482f81e9000000000000000000000000000000000f1d760ac6dfb65b39c999211d4e4c3623c3fb8ea59cdcf926249a07285a8e4da1890327fed20ff07f12359f6d9035980000000000000000000000000000000009f2698239c8b452748126ffd83abec768edffb83dfa3dc7943fd499c8980e2d9aad76dc38b336a4a63eccf5c4150ce0b406eb0c097237556228f3a48b7e770c1707fd583b91b4b6b70f398b7dbb0d3c000000000000000000000000000000000cd724c51fd56528dfa688df46f71bbfc9144ff98958b559fca8fd05eda01c38c28630ee19579012b9913a393264cd90000000000000000000000000000000000aa1e55f2b6d9385ec6a9cbafcdbad157f7ebc06b2e30e2380ac54e71db5259cb919e17042d6ba6e045f1358aef276ea0000000000000000000000000000000010181ce9ffe235b6b271d570b3c2d6e1be60c53b4a98ef5e8d7d00b463e5bbc9d8d96dda881e58746090983d6f8edd35000000000000000000000000000000000333deb8b14f499319ad675f482fecd80f9a69ba369425decd441cd2ff5c3c77f11075f61bb1d90d0be850ff657d6b7cccc30cf1db4c6be6dbc5830ee37b5782c6dad215334163a9d9e4deb962186f80000000000000000000000000000000001581a5440fe892ee6eece5fc2227fe072dfbc440e0620a1e5fb505ff0b16d9e6033d83c83576b4b6ff87a807dc81b88400000000000000000000000000000000099b070a0d7497f33c1c478ac424d5564fa645d836a3d572d98782f08713d8e425b571433fee928475688db2b3a9a04c0000000000000000000000000000000011e1cbaa09a6361aff9e199e21bc52e98dfacc49ed83e732d4b4f2503b3bfdf85d029dead4412b6f3d7ea447e20d669b0000000000000000000000000000000005503e151d620e9a5a142e4f7940ed88375e7efc1109214141c191e9f38a32a40d3a92d6094584e763e0cf13cbb54bcc99461c0f12019b344a7f322900b64fe81e0d8a052c0ff5e977f58753b1b6edc60000000000000000000000000000000007c780f119bbccfd658f3f1b69ce9c56b1f5269bded713b6827d97d32b2a6deadcc02c410138d984d977527f3609cc2c00000000000000000000000000000000095aebacfa33928a916ca7b0ceac699c71620781b35cb2f3b254bdbd1544b728a2ec1fb35416ed7a8a3a630bc07ff8720000000000000000000000000000000012194abf7e411f4961b6f8a1e2ad052c27624ded863d7a9132d9c7ecd3b4074ef0060cd86adb73056323f4227ba5fa9e0000000000000000000000000000000002fde2be9ac1e8265f258a09eec85a70112ef1eadc3a91429c9206555933e2b89aaf7493fb833e33e5d61be28a12a1c2338ef9fa825e47b46483ed8fd2df64bc7b56da8aecbae704b7eff2e7d426f27d000000000000000000000000000000001586c65405e810e1d5b59304bb4555ca43c04a593671ec64d5ed2d2e626b1f8a89f48a4b21d38fb49909b8c614209a460000000000000000000000000000000014528cdf994e774b8fd54090cb45b68098c1ad9a351bc1f36a9393f3b4364f5beaf58fff6e5f8b21a85b67bc427c0e920000000000000000000000000000000000b48d8713aee51d80c79109fb8b4e0c6e32e25a7ca24dd3e7700f8f3195730375208b241b2c722af3c2295a1704cbb3000000000000000000000000000000001913cf6328429cf2966a48117dc74db0d45be7800f93cfbebf597fb48a8bdcae4fae2df7835f9536481f67261755da2a1dd6656a34f3b12e5568b9c348fbf4ecf50d65a89e63ec0936591f01e6cc7a4a0000000000000000000000000000000017e45a481449f167fd579accc896ac65aff6f1f7392df47d006b404de3cb7ebf6cb59d0913438f3a51e55a0ae3d446c9000000000000000000000000000000000cf4b7db343bea29af6e244a71880538b41b826bfd1d06a21512d00ce58f5d7500ab1ed77b446b1e3782df736bf3dbb6000000000000000000000000000000000525d08e134779ca7614784818876514e14b65e799b7832f61a63601fc491c8b9cb25430547f961cc1c22100170a2065000000000000000000000000000000000450cc2156c4716d0343f32aca82fd2d0712389b1aa984b31d51edc2aa0545c88ff52e470b15eb6b2c22e30f79864dc85202f32528e795e0fbe6deb4ef6e45efc70019520b01fa1d71d5505e42faa69a0000000000000000000000000000000004147c105ee8b4db68482b9d7f6a716ea1474b6c62efc41b9444ed1ef9e92e2b7010a1c1ecc59038ac37b385074a6bce0000000000000000000000000000000018a600a85c5c38be835d2e91a35cce4b59e5f5ac3b735fc007bf5498062beca9befc9c8ead58f9f21f6e08266b149d800000000000000000000000000000000012a476fcb81ab66e3101de2364cb609b17e06eabdff5246bf736eb9d5c87fddd404e8867578262f07a05731b04069164000000000000000000000000000000000c54a888678c28766ad17a18507e4bf5dc57dd394eb6e9b69abaf15e645cf4779bf6ccf4314d2756584647cf27af089ba2b39f2b893be03ab4da77ed518ef35b2e24278d707a20b67ab4d1e5972f9722000000000000000000000000000000000e809152c44cebdd8b40f0d22d57c3b31f29700e0cbc3e69f660bf7270e59093d84bf7ac358be7e45e799a75cf9c13df000000000000000000000000000000000c6c61f98bd4e3b7095fc7f1196baa98139087df00fae2a795e76544ca47e453f75929cab07c11cd3595de6ecbbbaff000000000000000000000000000000000171c70446c19fec3c152741925c8db28ab0d140720cb6a6c45e9bc66c012a421d12271889ea43fe1524944ff572fe6850000000000000000000000000000000006e4baa09b4660c69cace151e60320b771e56e7460b01442bfcf26823c17779034ac241b9365dbbfade770d2056eeecd892eb7c361f05e114a645caffce9437b7b43fa01dd66c1e75b30f3abd0209bcf000000000000000000000000000000001917a23350e94963e3a7488ac1dafefe9ab11856d405eff39d655e31ba808f02954b63e822613d3c6e5f358be04be4a4000000000000000000000000000000001620211b06288c16aa02f4404192e9f57a048e900f0ec5db9b478475f13b142f924c6de720031b3fc12cf869b422af470000000000000000000000000000000011e8ded9ad57e46713e7ac0044ee4edec12689cdfb98838a74adf1a35244e3d9a4a34c81323b089c10422abf26b044e70000000000000000000000000000000006f85c7478cec590fe3355a8d6e9557c5be084c161e090c72f1281be4ee56f36aa1e3c9c844eb45d9e295c15c4cd903efdafc3f57d6116163f1da9e70ea645243c5911cc4ad4a969a57c46c6b5c73acf000000000000000000000000000000000d555d9f23de97318dafb257cf444952bdd3e844e9ed5ce193c10b76f5179f0c6851f93af1553b128f34d3a7e75339f3000000000000000000000000000000000132704571a12a58f629dab48f1a3956392b40f801c2b3757c15f7be46ef1d9115d89920c460c0e2bb062b3cc1aaed7400000000000000000000000000000000152829eaef900fd2f19d6fdbb8f7eb3b02df35d218b494d075219b69016256e572eb7f555f6fbdbe17c59a666d190055000000000000000000000000000000000fe5c67c949b7c89a867301528f0ab24b04d31d6f18f575c475ab5a6098f7187eef20a9ed6e810684da9afd8de96ded6660a77b2be50eb72fd108644d913b9253209972fdec2d107213ba47357c96e9e00000000000000000000000000000000128bf3cbb5208d84dff719ced229921a889c9a4d02f5a508187662f03852531fb8be1f4c2aa9ef01de7720c352dbd19d00000000000000000000000000000000158d89a44b8fcf9ca8c96a8e516e130ae8af19ed71c2b8487ae300c3cdb546e248728bc58fd9cfef21107e0dabf44fc20000000000000000000000000000000012b70b42c8af4551267a94a795fe18e8d054291225438adaa33fe2edafa87742fc3709abcc7bada5d26e3a14649cb47f0000000000000000000000000000000015a853160b7666ea7d64aacd931314497ac7068a4b8bfe3a7deed85df2bb8dba277716a9d1ee50c56b2970016ada509d1ca575cca348dee9adfe68f8a78d39bb998205da2a5285c12141a77ee7af840900000000000000000000000000000000087c7bf08e085e19f0cb301d2e36478357e835620b1cde6e132c237ff6fc63e6fc16a8753550d50fb93a0a1741302cf9000000000000000000000000000000000615299ccefe4da879e5f4b01d6b6ef8358bb59ed8a2b365ec72003c16486d3266243db81f48855d81b6a25440bb861a0000000000000000000000000000000001498fd20640f39dbc03a474f4514e5e283256ac19468077af1c9ddaa40759dcf93afe256de1e49be6469fa106394193000000000000000000000000000000000cba50fc4919a29be2f4e74c261487dbf855db1856e8d5d008cc3f4ee5eb3babfdfaff878adae49b96db99d424bc4dab2e1e4537f855eb478274992cba4e3f50fd9e944f6246cd52dd1517b55bd7f71f000000000000000000000000000000001369dd82ed013474581ca1ab2d2133341d7c1d52065060d72b8317e899e79e9077bcefe6c76c3c7f67e54f76dd3c246c000000000000000000000000000000000405aa84d3ceb02bf8eae989a9cd65afa15451443af6f3cf5e70f5cd7bb8d413c57ac3893a7e8b888ae93a92dcfa2b20000000000000000000000000000000000378d003988f3c6c16d3b12ef47a4a49e2d3d2c7c67e384bcd510939581770aed92e06291ed3b7c742769f0d1ef740c100000000000000000000000000000000048bfa6550711a17d52f48377821baae6f3de6ad99ccfeb8302466047dfddee8005240cdc65b3ab11ed85b11f128624957f9a729aa01c8bf0271052202a077913a9e0c87201a367845f9b271c130e95d0000000000000000000000000000000013370ab697da0ff0a0efa8ebc7589b465374c983c13daee7b5451e8b299933eb5a4d255ffe4aa46782ae0916fd3990230000000000000000000000000000000002ee77be6e0b6fd260ad660a96100bf3259329faf2ff9796102928e70cd52c2bda8d0d1da1d484d7b023d3d59725d12b0000000000000000000000000000000014482fee88e02e61b847c08e61d7ae6fca2d993bbb69bf1653138150d5d7fed09cd5cd4097cb4b6368ea8023383477cf0000000000000000000000000000000009d0380d0d6fa39c9e242b9a67336d86445551658bc29fbd594239a76d7741ba388450caa244fb186afc36d35c8740e93017593cf311989ed8fedff72bb1f14f72cfe5bb7446ace5274d8ded54c1372f000000000000000000000000000000001537d4a47247af8f60f77d309666056c412ce089f3f011457e894f74fa4ad5168baafd36ed3294f5f61cc9cd8f87554500000000000000000000000000000000119e43382a846c8945e58dc7723a0f24b24d9cd487d436a156156a6da97795cf3f4ce382d21435695949b5137a2bf1d3000000000000000000000000000000000be5fd015998bd6043f124048c82e4d848e1b8c87442d0021390cba41c294de17648a47dacc06268606ba73cc95ae6e70000000000000000000000000000000000e05a3dbbf3da8320c40d51ac44c6380d56ecb460b0e7094819aa6af4d7c70d1541d4bc1fc5afd453b165f3d48d09a708bbe9e7a307e380c238ec1f8e2010a95fff8b03923ecd9b012f99e56c77a5cd", "Expected": "000000000000000000000000000000000b00b5c14685ddd17ee99c74598e6bfae5bb1c103f8ebfaec3a620ba57312f3093f9ad5eac820d81096dfece90e72ef8000000000000000000000000000000000dd81552160d449cd787ac27c76685ea0dc993a9fcf8ab182f1ff5d8a484a47c14c1c1a785285b44336c7f6fc0732a0c0000000000000000000000000000000003008b6d97a12868554d294faa26e2ebe2920add650f841adfbf0ee89af72fc4da5dc23b45b7ff191a58c17971b50ae50000000000000000000000000000000013f438d927f35b04bee8fc55693d5c97229c8548ff9de39fae6e26c26f89623d3b0c810b9be8dcf0445910e8eac5c58b", "Name": "matter_g2_multiexp_64", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e1f825b71cd9edcb231c178e160e37bea70108b369afb248edc7c6a59114c22e843fb5541e0f26c77a2b589ea88fb3d000000000000000000000000000000000d65d777e91920b17400955a4afecf82f67cd13f3e7c5d9c2076c4a4d8f7f26383d22d9977dfd0987f219a625c8a621200000000000000000000000000000000045716092850318c343f0dc5337df1a72f8c74dd729831d12103b46127c9180fb50cece34986a94fee6119e72d16a55e00000000000000000000000000000000083fac698ce800786719d1f6063c87d9f728da03cea2545b4ad8831f6c24bfff73e80f2c2fff1532f6d1fea60e7d438ccc5e9d01f6ea67dc3f943d57d9d8b5791d823592f7fae6719804c1ca097e651d00000000000000000000000000000000171d60b76698d4d3f14b4eacbdce9fa66b8c3cc7ecfb989439330fbf0d051d95f3007c389113346e614f5ec8cd170a2100000000000000000000000000000000151a96beb250bdeca3cdad1b07322040bf1cf2105dfa854bb24fa76c8abc25ef4fb924ff995da641244f9daccff2ff970000000000000000000000000000000007e5818778a8331cdcd1432b46abf1efcdf7e4aa8907fd42d5e7d14b57dbfc48125246b57587755ee1571be8b52d2c57000000000000000000000000000000000693eb562e22fa8ca4a655b76e43b50fe487ca1d65cc3867eaf793e50496f0b4658bd92199104c2ab92e4ac53c44db6f57b8fcb85e4dbc1969805d814e75b2b80f5cd1e5562bfc1e28becf731aadfc58000000000000000000000000000000001059d23ec6e472937d80829256db506d2d2deb37d4b750a980568cd5b0db085358a4d610d59009b64db1a9225f9f6f5300000000000000000000000000000000053d9ffc47672f1058856aa08e51aebd469111dcd129ed542454d6401e7893323f8a9c63641f499cd8617c7389518f8e0000000000000000000000000000000002b9b30a5e37b18af4bb02ae8cdd56f6a87820716ea1522a174a0d99c3716295ad0ff2daf663697cb56bc6053c9dba610000000000000000000000000000000019d3230c0bdc228fa0cfd5e0d8bb88be959e70e59d931d9f9e3683d5e65d8ba0d121fcea329b23c5905b80dac34de33b03edc53ced9ec5d7f302216fd30a81c3554a3fd04994f62b5e3da74c8b71bb870000000000000000000000000000000015a619addc75f425596f9a51c6cf2259087cf32afe9b1f07e346a2f4e1f8caa001dc10098d1287b89837f426d073982d000000000000000000000000000000001660598fcd3ab6a55423138ee72a4ca7b57277f6ce140f9f992dd9934bcda78513516df0d309a0e8ea151b2742dceddd0000000000000000000000000000000004cce7d84e0763fbbb54376833ddd7408afe3f741bc2b7e42fef3789a005134cc5540981a15a9f256e0e541ac58ff3b10000000000000000000000000000000019c20a0064f89d37548e06d63d8ff4fbf3584d5bcc2fc2757339b7c89db6d5da76d43b31da7364259187ed602e79bf4f976568ab779e335b8dc67a64f15b947e69cd3896ff393f51fbd3c3e3a157543f000000000000000000000000000000000d7ec5a27ac44daeebab7658011624c441e45924cce97d5bda354f1daf9362f5bce2ddf57151fa07f78740a7db170e8300000000000000000000000000000000121ee325f4252ae5cdd3e3495f36492d68d9dbe13249039d1185760e6e48a789744b2a9946a3d6478a64b378f76b0de300000000000000000000000000000000014c6c5b98c1e214f78b82f1b3be4c32c5013934b1231fec942b5591d3f0440bf63b1505cfbb7a8fa78a85ba58fd4aa90000000000000000000000000000000016aaea3bd0ae91b9d18ff89a40ae27b68d74f3a227383138ed737d59c19ac578da03df83f04c8d962cb9d6f84a15302f3aa5eeded490a17b1cfa66d409811741643b7beacf312b9d6c8e7e7e63579c8300000000000000000000000000000000188e5aed425a768f89f5ce09b2cc909b28c6a0165787c8e3750fca8e8162128ecf62ef0ff853d206d23bc076335008e70000000000000000000000000000000001cfd330da0d1b5b92b6533cf5a8b6b70bd93daec4373f28d669f5e970a947fd813ab1d1272b61afbd2748922b87c8c300000000000000000000000000000000002aec750fd085c99c3b9c3af62b6deddd85e49eba0293e6e8160b26a3945af546a760b8f8f85120d6a51d22313cd33800000000000000000000000000000000162a109abce2edef753ca6351aaa9cecdeac20919681c672dbb183b5b26649e885ff081b9d3687f802dbe20fda43462af9f1f9313bf966ea3b8f09bbe9dcb66a7f9e3e94e2024c49a72ccbbe03fe4662000000000000000000000000000000000f7ad6a1dd9f8cf52bef02ae1e82b0d20dcacfaa5c169a485bf8becec8b51373fae851ca29e64385f0b7024eb0bcf9270000000000000000000000000000000010412a7a710f842fe836414e2729d0ff2e145709d8f7b5e3964af3e0ae267ac53dac3db1e6d2b7f7671ec34b18c844a10000000000000000000000000000000002d3b96fab0e3b8fe44e316fcc5e35f06dab83f2c531a777e162f7521cdd5767ad0b6f877f876f73d2ff663d9b71f462000000000000000000000000000000000c09a98bf623e82a4d2d4b63fb867fab5d3bb1f85a0669c4c11cebaeb357c0717a0f246a9ce4064b7351dcf1e77cdbd393be64fc3763d06111961bb208a2b858aa1ff181781dda630ca41f0d45ef2a9000000000000000000000000000000000114270d35ebff55c0341776086d893513595aca3b200ab98c8b586029b19a360a04f2e77e90d382174296443ab8531d10000000000000000000000000000000008b88849c3cda9a23d37ec9f4700904edb24be95fbbe6d9e20ced0d52208b597d44bb9269830a1ac5cda35d0c0a03c9e000000000000000000000000000000001144466b13427c10ad7679567067dc47c671107064fbb9bad287924c9bdee653c395dc2654caa5b3013ade932fddd5e50000000000000000000000000000000008e14e3cff3bb57f0d87680a0c09d745c7272bd3c216ff9fde7c03df2caffc27e0bfd9f99912855c156a787200752c125d2a2b6008a3b4a4cb3a8c28864214c7fbe154fedab1f9ff8c96eab6a5f28fd30000000000000000000000000000000015cda76d42de9fa86f900a5180ff016155f31b9276c617ef664202848d2efd2876d412402516c0c3d26d49f71d894acf000000000000000000000000000000001307fa2b963fc19583b7e4ef2e9dddbe93e2505e8f4f00ec52db26ab411002136c1f646b1cda71e19480c767906a6d03000000000000000000000000000000000ba87b08173c841a2bfbe424584d4685c39bdd0f83f278f9fbafa8111102aa3acfad5aabbe032c7123631fb8b454255b0000000000000000000000000000000016c525c1dc247fdf34344168b7cc245579585fdbdd6fd783cbe60b727cd11ee97b87a86647f78dda207c98e65c2ee7e6854e742ef7c76ad438cbf30c30103741f57ebbcdca4d6c4f14e554dd1ed81b24000000000000000000000000000000000403887fd4429f44f8da7f17ca072f867e88ac046922ebe3e1e6c4f9d8e174399e7648aca924a557dbf7b29c540db33f000000000000000000000000000000000522324700fb6b2c43eb5b39e0da94cb60e234369543f530ea47f4aa510ec0fd79cdf4dd3ae046e21d78b9c0e35107900000000000000000000000000000000015e946b90984257ffe3814dcc3ef065fed1504f0790f3564c8bfad4e97cffdb61c0d73bb0b1dbe78c4266c773abd56b500000000000000000000000000000000078f604630074ebedbd836c463f3879cd5d4a2c947da0e47740ec369112f4fedd787ae59bea69aab61b91f05d92061036f4f00b2494a32844e01d0827ca78b06f5eb40b6769f36a04f20eea229c305f9000000000000000000000000000000000f722bfebd55f75f3bbd0a55492499c3a3f637ead0e54270042fcc88853df5bc5f11a3677efa26d31c28368e00c8713700000000000000000000000000000000182618bc8a4b3f6556d79848f90efd6883df90806a8358cb6852bde465a27a70644ac5d5040d4f64ec355763f1a384990000000000000000000000000000000015f717739a1cbb2eab30e7b1bd9b25f57ad56f36016b59128ea1f2089f2d1dd0128b455b1b0e9e3b320f68a38a1bdfac000000000000000000000000000000000b855788d6b6a7748aa923dea3163fe525a7b43f4619c1eff3f9219ec3d98ceaf34b97bfd19aa6f91f7fcff728728978191e47a0b0c72bd17319063abde7df51498cf0c980c46946bf80ae4c9864e2e200000000000000000000000000000000120048ace47bc1ab3fdc07713b91a9223fe0fffdcbeaabc8a61351d756f936e18177f672c5a4db7b9dc29bad16bb7c4c00000000000000000000000000000000101275492a6e843306f2927b6ab540d7a5ee925bdab40103b4ddd885e444e6a6ec2d6e99c061284a1967797d8a2e9e700000000000000000000000000000000002c12f17a5dd2c56aed0d308367f37510f83c94a4482e5f632161dd0517dc2d4f46a90bbc13034c63dbd04fe4c616e320000000000000000000000000000000000e4b9089155ce2178f26b058f4bfef57b73aafb83b0b78138a01890a167709f79100a1e4d797c5849473eb3486cffa4b7baf8816db56c0a602cfb4caa9089136ebde05722ad4838671e45ada5c716f20000000000000000000000000000000018180eee7e72b6a4bc2e60555236da335fe05fcbe2b3cca4937e73a550aeae6274122ba84ace78eff84d323b4196f58400000000000000000000000000000000147659347e0fac7a16c92950ea5fd115416072f339d7de3cc0f00ef369f5122ff050d8515effacc825c807f7e19650e10000000000000000000000000000000017bdbcae7f63052af9a7d8bd71dc98b6eca7ecf5eee7632959fe56ed51278099690c534ec33be4ace4612b0f516794aa000000000000000000000000000000000d6fa233be4d6d783bf973cca3740cbaf0f719827d7f9310f38d1dd9d1c1f125cdfca6d12fbf6a8e8104f79bf30b00647d9ac1699117bb9b8b90e2fb709eff4ea0f7882bdf6acc6885c9458703cbfb3500000000000000000000000000000000082f3beaafa575e86be53b4fe7b93835b00759f921933402282e5bb0e643a812e0e4b676ad51ff2c6f5332d777641cc3000000000000000000000000000000001760b87bc4d2c13122fd7acc6d629c9f9db9bc9a2c49634aaf33e258ceb3106bc2755b227c6660a1df1d92c60067cf5a0000000000000000000000000000000016a819d7109c9a12199eb98537a730908a693767cdb35a69b4c7329761939afea766f0b91ae405e273227330761a53dc0000000000000000000000000000000009d14d7138440349e83f5ded46d18b886ef3cd63e0e5bfa0a8b50985142b21a4733813ec347e40cabe28e6ec1e068c24a22b6c1a24eff71f0fc64b6aee8d3d2dd0827756f5c959f68f1216c2dea58503000000000000000000000000000000001676d7f489219b56c198f8494e156fc0672ae28dab20021b7a6018436c7c0f107efd2493ddc2a1cfb3ad490ef146348300000000000000000000000000000000001106e89fc098ce7bd8bead5d7f6432bc54501370ae6544f34cfd996b3b610f9cfc7ad366751ae1211b848aad7d93d30000000000000000000000000000000011f8f0bd037365b5427e76d57b018c1c644034b28d06c8f68c59bff45eb4a2c4d761d066d96c13f7e73dfd80c81704a0000000000000000000000000000000000fc826b5957613f35bfa36d3ce088dfbbd06c8f2e88056a22a9f35db561e06fa0378ccff29ba8b81cc12c7a504f8c704c0431e6877166686239f014008959332d9d009a801be6a1e68c2de52ee264bfc0000000000000000000000000000000014f0f64acb0d9638a68278099abf5b5da3aa087792bef15192cfe3689b69b7ec1aefbfa14e659358b5410d98d2eedac50000000000000000000000000000000015ca79c92e98cf8314a2f6319520e1eb7d4656ca6e51278710cefd9c768a25691fc58e983aaf858d3c8d0ed73e2beec300000000000000000000000000000000007a5192f1dc906693568291f163e9632c53e1f418a87cd25656064adffbf31863680468f3ea451fbd22ac990dc870b3000000000000000000000000000000000131d2e3f6956da8941e8340259b8a15aee9fc6f23573f9a348ee9a51bbca1308dc54e7b4675357e3a9c5971be3a5c16af833a784d22b99537236fb07ab7b59918783e35b89fc9692d7f76a03e024c94", "Expected": "00000000000000000000000000000000163da4bf7e159e05eec90318a8ddad4a59fb02d7ae2fe18795d38c3ccaf797188fa16577e6a421ccfb12ba1ed573c4e6000000000000000000000000000000001256654eef3352b09e0027277aec042519d99eb2567fce2cfa50a0c251c12d3593604739128171bfc13b3bfd1ce8f9e8000000000000000000000000000000000b8a46123bc863bed525f97166bcb77504eeeb66d2db207eb8342a3d18f7f5a99910fae3e6423c6e84e437a2c4b24363000000000000000000000000000000000b73cf08023c8572f48c132add67dda7a15def638a01b198361b9d21a4634ba76ceed9819b37c12e24f148d255483856", "Name": "matter_g2_multiexp_65", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003113ba8b216d933fe0c81f23f75942c0065d21d8f009d73b1f698281408874e33dd2750fd4298367b81827cf6fdad34000000000000000000000000000000000b8a921e840fc665a786d826f83ca5a9c8f00e7c802bce5473a7d1ebf63e8bb6cf5c4b426153508d874064d1f1dade09000000000000000000000000000000001492ab584088d23d3b0d1283904f9a8f29f9efe47950c6e9ffb9db2123f3f9820b906d672fc7f97f0bd38b8fc0ef44520000000000000000000000000000000010d321c2538f92aad4631af44ae39e63dc06becd2460f0cee0e526328d167fd6cfbcf4edfaafe32d13b5fe66c009533bb16c1bc60e1a9be9a82c93b7e0311e7516a57d687d8907599918df77b3b6caf3000000000000000000000000000000000ae75d01481a51294003041afc4802326ab878a3a75eafcda43cf873cc65e300d28aa986fb82a2d1d649e5be00f956820000000000000000000000000000000017640eeef8982250f88a4d187dcabfcc9adc3ee9194dbc3c04c741690fce5bc7cb07cd0b7c3497191d9ed8558fd0d24c0000000000000000000000000000000007527fd8dacb81b8d1abc746688db6a47211fa71556155d38361921c4bdb2a9e9921a3a540bcf55c6dd751b84c04a1040000000000000000000000000000000008de9109ba354d7426a5313d66cd747a54df347f0f86a3c0f99e9e4b68fc79641fcf98ab39fa23ef6f1a781c48f53f76cf301dfca76a83c70552c9cbc9c80cb20f0d82a70a9d887b04b150fa0764ce2e0000000000000000000000000000000017331b8367f07756e789f7edce4d22f6886656fed78ddacef6987a2751dd3d5d49011a050e7b2a3e11fc8d90266c9d710000000000000000000000000000000016959c303e11f23392f95c1402d1d1ad7f38343c711e96f18d03f832f76e3e81de789a6eaff797ae51079b13571334d40000000000000000000000000000000004266fd13db1ca80196a91263c79d1583b717fb61fd9ce5113e4cd94c59e605152b244e10e364b468c5a561c6fa9715800000000000000000000000000000000026f67cb263be83f3163856f091e9346651c29d4634e242da53b22eb6e66018d235b0f30f8833310dff9f3020e5bd3811cfb94c4e029a2126a9cf5561c677687f52059e4b7f8b7e7e73e5b1dd7f42129000000000000000000000000000000000114d8babd11c81ca2b8a7e193afbe0a8fce426b83996bae6f77201870e51c9355c319dd86b985272f73e0804c0f53700000000000000000000000000000000016f5ea7610891d0e72975816c08e6e25a75c7c42500655f26efdfb384241bbc825358a21caff347d00c8b2391501d15400000000000000000000000000000000199c8c74a79ee90c3606906bbb8cc163c214259e4d0127cee3283bcd9c1ebe4090ca7d7b180201910d3f6f51566d3bdc00000000000000000000000000000000032c785165ad4c1a2846e15318bd7cf5b42ce8b675cb18fcc4232e28701f225f1ea384b276e7a38b2c9e2e8b112f1911d8386fe6f4303959e58165b422e98c4813b1bad7808594473e4e66df09698cf0000000000000000000000000000000000842c65006caed9b53add048a2eea89e1b4584e1deb4365e3dcf8b9ecb02f337bccbe5d6929ef8c20461847f171fd4d600000000000000000000000000000000100dc23e6c1c6f6756419a9bad3133bba052f408a424c5239b8528ad4429a2bce64b72f1463625f7599ce43865581e9600000000000000000000000000000000125b4d71333274a16e52829ad5eaaecdda5c206063473dedec5a8ff4424def70e6f650926948dd2158b403f985a3421b0000000000000000000000000000000006a031e3c002702837e4ad28250b85cd94d42cf7b0d765b980fab95edded7636d13bdef1be63e66682c4e297d0cb2b0302e1c432f3b55ae87ab815647f196be3e138b2f6e9fe7acb9459650246187eb90000000000000000000000000000000003f7091a25da7d5afe6fa6b254604a1abe7a0c6ea11cc1a4167f5f648aa973d888383bc7e987b620d23e688868d318360000000000000000000000000000000016637f888efc3e057227cbefecb3037aebf8e330c3a794e51d691e3bc064237b98351beb746868aef977a83d1fe163ac00000000000000000000000000000000126d2884487984f851d1bd7d61bdb803321f263918e88e0677831563bacc9f5207358d1e9c76a5a25a66f0294f459e3900000000000000000000000000000000125c61b387a4462fa3bb2f06a4cfbd7df082d20cb23ee974aece2ec9a3b0c084d13a7ea83725a05d9f31b8033d2888ef9b0cc0ac499dffd627f5d19b87817dcd67e87561d5244a4b5698265f8c5b767e0000000000000000000000000000000006cf2bc7c691c4f8a64d0aa1ca3760d715b3188a2dd299ab09c723315acba8b0b4bbee819ba06cc564f0c875a63a415b000000000000000000000000000000000bded3d695e471f30f9d723f55826eda112eb0e3fbfb9a377cfa07d6233ed84108b92a79bb491a2971e9afdf83db8e9a0000000000000000000000000000000009b0e9928cb267508d4f9444c6ac3dc6f64f49a70c82c0bcaf4022e97854e5d9ec2612a2cd4d67642dc0451583bcb24d00000000000000000000000000000000009347dcfebe93a2f7674ad02ac48794e7cbffb04dd85b0c8c192fc85cfb9cef40fd11def6f63ae9a923960424eac6a02f3875f81fd39c9b3ec74eb269903dba4173d8eb0e41a196d3131252207ffa040000000000000000000000000000000013e8215c7bbdca445555c9fa0ae44e1905703334bade3294fc047ec262b9e4903880d52851967339eeadd666200b25ae0000000000000000000000000000000003b0bf4498103ac03601a8594b154b59a2a93d663f98ff8dbd2c85a1902e572a9456c629a12651aa87a1262102e1c770000000000000000000000000000000000e8bfd7d3fa0f773e6bcfd0d43a5c436862d1cb6a4ed715093c6782cd94699090c4bde597f65768e963fd0f8644e09b300000000000000000000000000000000064dab4d0d0c6b94c58b067337f2fac7d0d922cc822562b6bc941a794d96aac5ddb83d1d5844440d21d0a72a69303b8b2d8d4341822dba68c6fd58cfebd07b134c1d0c4e32ff63f7d59addff4df1ec3200000000000000000000000000000000098dd9a20f84fc26e78993a9de4d519aa2f8d343fbee501af945e5943e88425d29beb7ae54481b04175a07bf69b260a30000000000000000000000000000000007ef43e7a56e4e7d532420e152ce566d9055eadb4ef13d5698c49da905a4977fa8a7d3f51c8f5275582e1647984be61e0000000000000000000000000000000003755ee4432ea90f2197c7cc2e191dbbf7950c52a2c1b723f26d2aaf7a38c1b97efa29a312fed599f1199cf186400adc00000000000000000000000000000000150edc463f0a55fc70c2ffdd1f73a3abbdae459eb16adf79e96d18849ca638e6f41c6805b73755968be5cb110d81faa4efa3dab1d7cdf949bd938ca6ac371f953b3bbef1aec7ae76bda37db4c940b3d8000000000000000000000000000000000f7149602cbb3e5f2c5f8edfe59fc0fb8e1f03f89ea192bfe3990d87ccd28d4a80d7cd3003a8cfd669e1b6ff7e3cc5890000000000000000000000000000000006ffbc965bd06de07d8c0a9db8db5ab82d5f11afa1ad8eb92ed4453489f5899cc8c46ff02743956bed81229f64cf6efc00000000000000000000000000000000164cd3271ace4809eadeb1c0f769094272f3b66968690339bdb5da92e920cdc80c9d577ae4fa5b6426a5a6f46fba80bd00000000000000000000000000000000098f0a14a511ff424847d2b4d1b80a049b1f05ecd40af96b7a81def54486e4969011c122ca7dca3444029daeae2ecfc79848d3c53632dc461619c8c522013b83550ef3dc7fda197ba37c9cfe4340f5a50000000000000000000000000000000018409c0d0f37f4932cca87e24eb4d55e75dc98f938420ce036d43689fbdbbd839dc608b21d12a8af1d0a780aeac6617400000000000000000000000000000000109f2294669422a4946f926b1f106c2887893a042e3bf900559429c7fa484da4909216c8dcf826871534981021256741000000000000000000000000000000000a1ded19846e603b958d0bdcc9b554beca784b017d2a35ba117890fd0dbf729428bcd9823c7a378706220377c82a215c0000000000000000000000000000000000eafc89e30e4fc0544497e27674ec5b37ec0849fb382e608e09d0c1c94cb78bcb96ef4ea48e374aad1038881706fbcfcbfd192e917f2e0c4d6253c4e4755f30812149d1ce1ee4ae5540faf1dbfbc13a000000000000000000000000000000000e02cb3e099792ae7508321ce7afa323fd499de90c4006621ef5ce1054d0c934ae058a97ff8aeae0c88709c4d8ed0adf000000000000000000000000000000000e19318f5890320f17d5243adb4683a97e3e9763102c4fc93e3c3e3d24f4f61e0500be916c249dab00094b4ab048fe99000000000000000000000000000000000989faafcf6156472368b282313e076613cfe7ff135eb131b49e58932cbfafecf6585009d1f17ff8941d7f871be23e9e000000000000000000000000000000001167419d097ae8b96993b2e67da79b658adde1e12e43c71f27835845c7077f385612158d3e59fe2cb32b9418463e672679eaf11b3a30c7771ce63cec214416d798de20432670280d997b2f0631007d63000000000000000000000000000000001579b7d03d3d2c8a280e8ca113bcc98afa6a2705a5d228d92807a85cd5a1ee97510f632293a478c3fe0bd383f4b69cdd00000000000000000000000000000000107cc2e6bd02251bfd565b4b848adaa84babe9d4f083e827ceae6bacd9c9c221f0dbbef53278175bf27ebfe5949fcf8c00000000000000000000000000000000018d187c566690e4edd8d8abe5e0a448e352f622c96680378051228b6d081a4914aa51383326aedf45e351612ad6c5d000000000000000000000000000000000197427117a52f82aa6e931ecb0c5ffeec7f73ee8f44c5816935d26c06cc8285200ff9240d98cc244708e00669460f98b43077447b67f65e16a8aeb3564b2d13822e478dfb4a82a15a1c8fb7cc8170cc90000000000000000000000000000000019bd947df5a437a7f1ca2340bec628f2783cc1760dbc4a97ae10093aedd9f64e25ba79d9f4ce678f4fec91a3b1eef2d7000000000000000000000000000000000770e0c39988c9d8eca076464a3e10e274b06b1d2f6230e6dbd8dd59dd9c062f8958c6870c44ff196341bb9f65b8db38000000000000000000000000000000000a1833ef19e2b8e31577e5cd26e0a7fa46a5d25355d8b3dc0605f53714a60423556f3bcf17649745695f68f26570de0b000000000000000000000000000000000f449aed4120f3bef05506f2463f4546c7ea67b9e9110d3942dc256400d063dcc571305b1d4cd2bc3f18cf25319286e8eb64479b496c17d0587f6f26c62752881b6a9228643e8c43f21c441eeb643107000000000000000000000000000000000c1f9688ea64165f894e85b21761a9b2bfce891070103119ae71ff7acd164a57b0e054319631180c22f19eab8607f5b40000000000000000000000000000000005ba18dafcd3552af464acd469b133896e90c9ccd7e3bfc6e05db883f3c6aa1cc4610ec47f6354f6a7cff4385c56d2b3000000000000000000000000000000000fefbd9d78f48683b378d2d6311bf7ffaccaf7aa73a0bb4ce019a0c1d2e1673e52c724bf3a782729ec23d258043efff5000000000000000000000000000000000ea47ebbe3e858c5fcbf5b0cc9017d6ea23bda36e235d2aecbec827fdd2e4b042d1108d5f645b6dcdd786304e6bbf81b52b42f75aebdad1bf433917c025800c4f4e985cc077db3ba36f7484f95764e89000000000000000000000000000000000a313e1bf72d9a176bbad609631192c779e94c293463507edcd1c38bee8f33cfe6104d7169457ad5ffd9f045fce1cadf000000000000000000000000000000000af8db18938c51742b351fffddd74bf1137092ecb50a7e749391bacc9c1a19c7b9cf235b52ed577e7855d4ec1fadd940000000000000000000000000000000000febaa128de79274ef11d3e6378809d5b319796c653604723693c335eda175014b645604271429e3d449e756c85bcf6f0000000000000000000000000000000006adb29cc4ba053fea56d07225d2f7735651c0046f5cbe4a350dcc20431ed9457651d46a5d23d946959cadfc5500b7eae83106e9ea63791eb192e7a035bee27bd049b3a37f080076146eeeea6a769384", "Expected": "0000000000000000000000000000000019a5b588aff8853adcfa959afc5135807d00196a75acb3536ad4fc9a9df3803d919a2de7cbe9ff762913225577ebdbf6000000000000000000000000000000000ac8bde939ba2f164795804d96dfa8d3a1c4d9e4eafb000cfccd956c24f4d594b30bbf961917f625c86270cbe164cc5b0000000000000000000000000000000002de09fdf52aec0b91bbe99fe2eb9043b19975c6fd503815264ce030dd5e5444f0f4275ac9a07a49de775335d52ea3c40000000000000000000000000000000012457bb55876c482e5b907c765b476dfe6ebfe8e588cb7f630e58f78942bfca57e6c0d5d7b0ce80e48960e297863d212", "Name": "matter_g2_multiexp_66", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008f3f1f04fb80a23d348e3e25dac1d732265fd4a71ab8dad3718d268e49c79578e8e1ad1720e70357439e57df0791d64000000000000000000000000000000000fa4c15c76e395fa706a55d1909ede2163274a68b3e7afb8d2e0bb176f60c06f5a921c9ace35bd311bd79ae86340ba5000000000000000000000000000000000173633369e00c8c5528bd5ccf95c6af8b012e5a31941c134ad4541099c7c33c5ffd29a5a31e18be720f7ae85132cd6cf000000000000000000000000000000000800f5eaf7c8b1dd2787305ecc637a0bba8eac807a7b449410e48aed3dae2b4645b8459fcdd477fd92fa5ac6291b800ea4d710d2f632e3ed0ef69fa0219e16ba30d3efee99386f1a5c921f4548ebf64b000000000000000000000000000000000ea8057b2d609ac2130b21e0b4a41f0aca20ee7751f55d816ea42cfa4612b67c3c556b01b0bb1c5912a74c50a420407f0000000000000000000000000000000007fbccf8ce8d1a92756fe80b15c7d9342af4e166d3c1c7e35ea2fac34851cfd983633270c877224749365720fbcea54a0000000000000000000000000000000000885e173b73118721d28fd26f3a9c562bfbb878ce71091d7ae4b37c1f2625777d67955a2b7458af71077db7557171f2000000000000000000000000000000001754edbfc3f2af94c92e6754d6bb096bbc4b39bb1128dc6bba8b4d4d9fac6649598be90b06b9d5db44c4e77c0cd1537cbd9ae4597aaf582857b40096360ced0f044ea172551c6f9fe3a15e0ce290b56b0000000000000000000000000000000008a1a751b5f9a08e2bf5b2a58f62f0af6b8773f88e50f658ed220c0134e83c7031a288eb50a8a35016d2362b431d809d000000000000000000000000000000000d7f04d4a6c36cb3d105dc3915cd5d57f56692132681b3abca4b00e078c700931848e34ea1b7ec663f3886ff766fef41000000000000000000000000000000000a06c3ac81d6d0466e1ef21115150d04c8bd6dc3e4078e46eab213203c3226bb0c6500ae4fda591d6b8a791de598edb90000000000000000000000000000000014d849ddba2fa79b6a7107efeb46e9b6231d65384c69ed183acfb922d55b790d4fc7546afadc190b76f7da00103ef565efbcb4bad99b419820eec388f6f62ac8d87866d7beae6d431dfa48d4243b4a4b0000000000000000000000000000000014dfcb5fdb38cf09c1ecb284dd4f2de0c3d70f90d7c167a442d84e9a29bf43be62cd319b2dafdb6ead2c6596443a00090000000000000000000000000000000006220fc05c53f48e7e4104422b0660ab67fd88a695a201366de570f0ac0ad30421d5e37a1575e6b5ba35f45b441b297200000000000000000000000000000000077cb8ec1cb83c4974f6452ce0de630afc82e283eeb55d3b7e9969bb44bcf0404deae617393f82ac228b836c3cb6f95a000000000000000000000000000000000e2bdf539eb45a125112836008effd104e881aca397457004fbda4a40d152817801bd259434481f0509ab1838cdd1fd060d89acf5b49fd1f70fc54756c4bc1972cd8818e36efc37b422ba6a9318fa134000000000000000000000000000000000a09843630131cc6feeeee8aa8214408235655e4733badd6fe20c5cf1e45f6a61a5216e0cde937799437962706d3bfe2000000000000000000000000000000000ff518501614ed4a199ca9e9aad4e8efb8e9cffa9b4fa683093a49cef4669198a7893db998d5777f2cc8f4bb130c84360000000000000000000000000000000010ea66fb5224f4508ec100cdb611be133c4895a8de1b4c475b097494ff0f1ecdc1bf8fe467c630233cac2ddc07935fcf0000000000000000000000000000000009d22c0a45c82b0a19beb94eda0b93cbbe1f2e5f2d61279e1e1c93ba073cb766f5637195e6964a4814e588e44bb03f03386af376b9b393dde994da419d1f7aab60023546647f7b069ede939386bd6ee80000000000000000000000000000000015ca795fc7f0d169ba8abdafb1dee80b67e7dc616e824959f84c61284d6b2e0e8b9f99b414f5bd96d0e59b66ee706fd800000000000000000000000000000000042f473d1fa228961aad526efd003461935954abaae347dd6c9bc7fcd68b5f5138e57ab2a160cb19d1983089b58b51ab00000000000000000000000000000000188eb160cb968b4b048ce14bb72be27c228df1a6c014fa7dbec09a30aed8c71e8da59d3d5f8073b6a7d70d94c0e59dda000000000000000000000000000000000d467e6b05f033f3923667a82d5b489a5c90c99c5f68078aec700fc67a83d9bb4c09f3f00b9fc2cfd62bb098f885fe295ffca78eea65c00e1128f8dcfc96b39af1c4472b461ba5262307003bc972023d0000000000000000000000000000000003bec45d94f3073b2ca54d6332d36fdb8f5c801d9f70ccf6e3666b66ee06c0fdfd741f74cde1997aa205fb0318c9c4760000000000000000000000000000000014009b777b660264eedb35ec2e13ea586aa9438c47b3fbfd095ea3d8688a89c85bb4052bbd3edd450c19acea6372d0070000000000000000000000000000000017f26d3cfcb40fd6b4f3f1acb6d47a9b54c232aee484c7a8992a3d1accea794dc384fccefb0418d43e1fa7b399bdacaa00000000000000000000000000000000153c6cafbff3c53114c96d8caeee2880dc063d7db5edf5f14157117387f368c76b739553542bf6a9bc4ace3694de885a92837b4314e63ef5a153ea2ec4bd373cc3cecfa3e892c3a12aaac8ddcaf5905c0000000000000000000000000000000005d2481438c03493efc9f1e8e9ae6ab05b7430f7fb82e108aada0e886b14d769969d54b17b31e5bbb63d40836748f541000000000000000000000000000000000971deac599b2161a4baf1178feb81fd4798ad5cb063b1a0cbee7cc33b8fcec6c3f43d1d46d9ed45555187db636af99e000000000000000000000000000000000222acaf8df647744859e04104a5fcd546949feff6244e192a9031fc838f368aa465a3799779c637ef0087183f30731d000000000000000000000000000000000b8e8f1889816f89401b070db687aae47f7264c9be192a8d6e485ee71a5a688070d57ad8928d09d9a4925f1050e2c69e127ef2309c699a3602b0d86a070baef0eef90f539aac3cb6ff42cb19f284bd99000000000000000000000000000000000b8a5b0dd422469a8d6d7603e9f3179f443ef3fab0016afd94e93e2ea9e84b332da4b59f23a5257b99460efdf7d2aca7000000000000000000000000000000000c28e7068769c3a79bb8d92c3b89eca5d6eb42e3e18c2a7154f43a671f8670f878c4b110990c2e2b163ba4d1155319fe0000000000000000000000000000000001804302246fd07d86f4bb23f610af38deba8e324cdedbe5e61cf0941281cda8fb5dc211fbc0ce6fddf30aefa9563a0500000000000000000000000000000000015813fe0d6bbcfdc8e7e40b6141db21e1b490d846ffe82eeb3edcd9a024315193259612155b0179a4971e205738af74ba0f9a93c2fe35877ddccee5da39ce5ae60a6a19e72481319e3b3fa2eac614890000000000000000000000000000000011ac1ea4dad0f650fe0844ac3ab9434ebac6eb70a5f77c8f9c892cb4cb06639a15c63a9b820ef8f7a720040ae5b9e49500000000000000000000000000000000117da7999552e7886a25a939ada0944cdb15b5c468e9d1c3bf5b6af920e470bd648d24f3cb7f91e670f57a52cd65f7b3000000000000000000000000000000000a24147ef5f2b8ad888899c1db8df0a601eca9d76f1b934b1627e7eef3efe542f51205b96b5c00916688579ece81336900000000000000000000000000000000151863d964b12287ae4278c905341124985410f1ad6a72bd5c62230b7d8b0cddbea0c62cb2a7147afb5bfb03348be53363da2f227d636f10e814e360c2156e686e26ce3401dfd15f47c4ed277d05353f0000000000000000000000000000000001d32ea5faa6303c530790146df7cd5cdee93c0933b4cbc1c2b8030bf0a8d2600dba1907df1756152625cfccf8cc7fa90000000000000000000000000000000017b05f549751d090f42ce8a3ac5d959cf988ecdc485f51734d52c40a3e22a097917345978209fa74a0a05be0a66e5c6d000000000000000000000000000000001481fab7750380626b174602d9fcbc97555c516f4410193d2849443cf25ec22840e4fd00b225f98d81b38619e8844ce90000000000000000000000000000000001d56434066551c5bfbaf8c9007874abe57a6f78de9355a297bc117f2bc5e6e3f44b248037f400f7caf83fece0c00ba0ef79e3b6ce752d140c3dfb2007a08221d989038c921efff3bc4e150a6155a33e000000000000000000000000000000001667f1400973598ad3f56c2e49dcb5b556cc38ee3e5801ac4943f3c4554205d8fa69831e582a084aae1ef584feb0a1880000000000000000000000000000000003f0bb26ea548e498f05a5bbda8b8e536613f10e7165607ab77565b193f794664c8ab0a5ae2368d7483b77bc1173d14500000000000000000000000000000000176d8d294b4d975629c6a89bd6d45f9c3924a621259ab43d33a3d5aa1f423b68e3cef96dc103494bbb9036436c170f5600000000000000000000000000000000002f8ed87c584e69de59cdde02b6de9816c31a6efbebafb6ad9cecaf266f5bb9c8880f062dbc9235c91c668bae5051f4bc08091af8b8c6ea5c26f1a7d795132521350d774042d3a8c0523e86fdd23a3f00000000000000000000000000000000085fee95b859c52e44fcb2900a9aa590b1a5c2f981a388d6ad7b81ffbfe033f648c4a84e2119cb0484e178ebd3e220d100000000000000000000000000000000171e6ca074aa97981d2c2ab000a8bd12cbd5f5d574cb83158a6ed734e8f9b7aa4b74aaa43b7aae31b3f4fd3d82fd30ea00000000000000000000000000000000004fe6099a52fb491a0624a8d787d95617f6c64d16d20d1b3769f60d4721f7af66d7e3e905b3e08b2946ef7bff4806ed0000000000000000000000000000000004d3d1a56af91377ae6b00e192ad64fce6dd43a37592fa8706c9344b3d96b1f930e03be85a5ead3007f9016255d2df7570363101b87d685aa7314f6569fca0775bc6aaffabe136e6c336e8fa43dedb8a00000000000000000000000000000000155830eff04ec2f4dfca4f73403e408a68830bc031555433fd38ab3ce1035b5f882bcd6032aba69ecc43625546b4a3a8000000000000000000000000000000000ed5b698b1ae23769cf5b6dc2e39f8500fd8a881eb43452d67c6b84ef9f0b3c7d81db1909b646e92412acc7365923a940000000000000000000000000000000009f28ec2f949cddee9bbe2fac12c2c029f4e472afa1ea56d0edfeacdeb9f43a4a43b79ccdfbe8957b4cc16bbcac1857d000000000000000000000000000000001474b435131301db9e232ddf54569ba99bc476200ceefc15e4aaaf1a574c1de8bd2d63c8280e23127a7a036acae223b1997ff3852cd97c3a65bce9083ff66197fd5c70894641195514d556102f091e8800000000000000000000000000000000168475854829d47356d9a8dc13a94e8d169771ea0070d9ef45e666d5378dd676d603c2eb57a3cda072c11e0926b02d650000000000000000000000000000000008b493a9f4c19831341782fe6285db2f7e8250d72952351ddcfcae6f22a2ec0935e29d396ba32f72dfa4067d0e7ce7cb000000000000000000000000000000000d9e72e22f2a1522babc5f2e8dc7857ee690f60f7843ffe15a080d56bf63db86f124cac039cbfa16fc8ace4d6268a1180000000000000000000000000000000008f3db1f6c0e5e7b3bb27abd34bd877cc3c373c681a3abc88eaa91636924ee477ba5032801dda091dbc51936a90c84685ff95dfa306f91196849d752569b35812e1db7946708cd06df9db9ee75447bc30000000000000000000000000000000004e34bff7e9e3ede02df950aa0e8c5f4c5f85cd3be89d211e957a7de95b8e321cc11400c3dd5b2ba0d1a3008462cebe7000000000000000000000000000000000fc1047097f01fd2079e6357ed379ba39107ec41ed6c6dc17fa6248d52be2b1cc2593c9735a6cb48e6d6e0434028f755000000000000000000000000000000001896fc5e990aeb416cf21ccc73f02c41d019d0a2679bd533d0811b7c16ad3ad3a6988170fb2db030b5fa7c3e4df5acf4000000000000000000000000000000000b70e14ce1b54d7913b9f3782b2b8ff249967a6b871dfac7f54f959954febb2783cf20e20d1710e5526ef8aeafecb3d603c4308f0467520343825a91c0421f9c9c9d06957fa2fc051970f14085339e26", "Expected": "0000000000000000000000000000000008056d4dfcb593c10a877cc8a4accbf58f360256b76876ed2b33a07be3110f8e295ef459dd6fb10d12bd02a8276351f50000000000000000000000000000000005686da1a0da89074c6b13fe9913f5cd49e0ecfea46e06493510625f1393ba4cc2e13f023fbc7ec2e130bf9a4f7483ef0000000000000000000000000000000010cd660001f65876db5b2cb1a56d85171d4cbf037f3bfb0e01bf4430c479237cde5b6cce5839a4fb22b406846e757868000000000000000000000000000000000809d7711211d37df76cd1cf71001cbf02c76df67c83e4eccea3e05b11d196b5d52ad7c3d0a00d9f0ef5b018717fc3eb", "Name": "matter_g2_multiexp_67", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005d6cf50e3add0e5ac3016b394ec363d6145ed66ef56b07bcd33c90600e83b4277558695222062e02d1e2b0693858e73000000000000000000000000000000000de8caaa810d4ac39258e3d1656bf7f2fb7853a5963ecb989346abe90d5d35d3662f6e283cec7bc386a6a8638ac395ed000000000000000000000000000000001849ef86eec16b0612f214c5ed52c0d50a90bd65b623402879f2654fc578ab680d49af9afdeff546702304597a20f1fc00000000000000000000000000000000168707730c4e74eaa4e85e48e7239b9ba3e8cb74c24b7126a685da0fcc963b9f9180e252adf7d8c521deb1a2ce0099582849fab097a4f71bdfcfaf435994a0c6ac3671a4a9ed0402010be83ff95228fd0000000000000000000000000000000007d4fed2fbd9e9dd19e0af5c52637b2cd337e0bfbcef0384f182a56189a7e7304b9d2144266ffa79044be90cb7ede1b6000000000000000000000000000000000baabe8c23a10cfe85494c693d1b09fc8e43ef5f233052d5b6294dae14b4ff9e5ec240a1c00a16a9ddc27cf7b53bcc7c0000000000000000000000000000000001c595f193229da9acff04ef67ca444b0cec75db5b2c1921502e37eebdd2bb43ef47290fc6f1980abc75ef4c50034df00000000000000000000000000000000010fe7f3110ed3a240366ad7ba31d56ab993468dae2dc1b667a46c7759baa37b865d02834e14280a2ccc062af5bb2b7d6e6558521e301eabf09e80a509b46cf8ec118ee8586f4e46a7313a96dc37ba69900000000000000000000000000000000150350d8a771c79268606d6a5e1c147dc9d92e63fdc60b20be688bd52eac697aa5d90fe1b7b91321b2af87c47ac0d5060000000000000000000000000000000000fba8f4da448b8f2bbd99014bee2f9c581f2a974bb0b54f41a84a7fb359e9dbf88ba59a705504140284d486241e94e80000000000000000000000000000000003bb92d6a603bd93f8e987071a7385de68d10cfbde389eaf01ba6480caf1ad8aea03c84d1889b7d5b5c5f72e62a2d75a00000000000000000000000000000000193342a9f15109367030724946342e564507b26971caf75190e0b209e429a948d8b21ca16041a01010b68222db66a16b8f2f7c525fc0f353700fa823a5d32a93189699206c5ba5ed271a158ebb47674b000000000000000000000000000000000bc4a46eea57231cc64758560e3032a8ad8f1907b3cebd7a8faeb98c4216cb8a0c8fee09929ecefc4bee7955f4e799ba0000000000000000000000000000000009f9486257ae3f94a2ca48eb203e2ef44ecf866ddec7824e1a4bb3b89b320c38b3c46de8202480628c53c415433383a3000000000000000000000000000000000d8e2b5d0825b11344d16dbb2cc614c6b84eb1cb43f70d70e272123867b731775b429aacde611318b2700aa567a84c7a0000000000000000000000000000000007f720929287a70873e9f2f2031b66693eaa6e604668219aa5aff3f50e720b34c5fa3f5c66eced5c3e86e8b34a81b984c7e8adc0f0a042a32c733b5c3356cf4a7d648be51c1d78534ca65dd43a0c13e4000000000000000000000000000000001537ed68e203e56f31498efa314322694ebd74cd1dcc3145d534299fbdadd4256f20b9f74b895931a60753bde6ff9030000000000000000000000000000000000935c6ae847aa7f47bf427988665e5e18a32aa869e196cf9d5bac1349c650219a8d20e01bd8d49bc7e4bb8d464aee84300000000000000000000000000000000013e0661d7254428861cc3ed47c3fc9daae8b86db35d1c64f8ced3bc18a89202825f13163ff94ac0ebf046a0a99727e200000000000000000000000000000000039a6b0b2cb91e460d50eaf9600c29fd4f82a81c283ba4fbd9a7d103efdaeb1e82947f5cc1a7a1112ae6344c51119201650081a6720845a20164ef7c06ce1e73286a32dd64efbe57fe46765008dc9dd500000000000000000000000000000000071a6b0267806f2b9e0ba493960fe0e43f135c739a54c8daf5ef9ee348a281f19876f80c0dcea59dfe9457b49809c12a0000000000000000000000000000000009ac83690c30a4afd78f94b2493674668da4efc84007d2a08fc78bba271ed1f43e2a9e5909149bf0811c44dbe07c52f9000000000000000000000000000000000f5d523612fdb2e7dcf5da56720057dff6b0b80707cf5924d146c0c072edc0635c73fb04256e06c7c9355cfe77a7af0700000000000000000000000000000000168431fc569869ebba9b4a72371e3df232545b5fb95778baf3d9105930d9a89b4cb7eba430e9162a5589c7465e54ca3ac067d18b95591f7f14261f95513e1990f5a4f6908f94a015a93fe379726d5120000000000000000000000000000000000ce836522b983fe3ef6a502a0de4c599fad8a36a60d914218d5d2cc4d56d69eed8d27b2d50899639d1a0ea9dc7597f900000000000000000000000000000000014110ac048ac4c20e53f2214df8c06d77f0b3150077d027691cacd3715d4630a387d5819ef58eb1bce2e8669be330a3100000000000000000000000000000000178e5cb42f56df2f1b255a028a00df96c02eab0a79aa0ff3e9772fbe3eb62174728259b3a15e356e6d9666eb65fd6b7e00000000000000000000000000000000045197f136649b61d6e0e7b9a56674e769e2d26716ee7a63fd2b83b767a9ae96694e9cf81375d0377a1b27ea6dffaebbb448bb01a1963bf74e0fbf99329005af8e932074358d855ff43c213e02bf26bd0000000000000000000000000000000016a6a58301c243b0c59d6934bd926d6440b87b49f004f411ab0fdd924480175052f63f594c18007359055dc776e7f2d300000000000000000000000000000000176db4845cad46a13d9dd0f4077cd22b3458f64084c7325e9885f8ca341ce3ccd4f634f41efd6a70f16e1f0c9ae103a900000000000000000000000000000000068ba68f652c4f072a64d56618f93a1e148274b1b835433be878c06e11f65ff45b7cba0f67fbe80327abace68396da7e00000000000000000000000000000000047a699487964c98453207c98cc91c980c1ed37dc26e17748e6ee88e5f4c0ce424d87c82ca6db2264dc8aa9e437a5f25441fc4cb1ea8f86af8839aa40c35c0706f3a159b4bc902347009f744b73cee35000000000000000000000000000000000bf7e4a9751d4e3baa7ce9906f4378764e5384136944f6d3f3074dce66ed017759783c64fc381f0dd7512d6f6e55b4aa00000000000000000000000000000000006ae2a4fda156818cb5ea6120edf7ea39370eeecc3f306890f47a6dcfaffccbb69fd21f33fe491b7065838b277ad2b2000000000000000000000000000000000d3ce00c2f5febfeb232dbbb74fb0405bab86474d1d9c545c93b65c7892bdd58aa56225641074ec9b428efd9063085d00000000000000000000000000000000002552a8c1848fbefd6b039d6c4bd47c34dc34ab307163c4f6d337946f1d1b41aff2f7e37f5fd94012f0ebd21f97d18a83020a1ab853ef2018976e43cce2724105a2526b28d23b0226c49ff3d4a03d40c00000000000000000000000000000000105320cccd67b6ea78e96e66425a10a6911d2d348fac3231af583146273609fcd7fd27a19d4614fbdf05bcca0f92b927000000000000000000000000000000001204229ee1f66fb5a5dcc4ee978327e35d703ea310901be9c100af824e39d24a028ef8fce42370e5d734df02a26c145e000000000000000000000000000000000dd21f31f116681c1810bc36141cc18096cc113faee7db2c189abb7a746e398e272fa0cc61286aea0a5ec4008c8d03b60000000000000000000000000000000007911297718e98588844b9022c825bc4b37f2af30e1fc2d9cfb58b4500dffc8e9949afddd051e971fe78d4e1e7ad1b4a82702398b8c95c3a8cd163a8a3cb2a7a04030ef99404c325115e9a9312e8c1bf000000000000000000000000000000000760787190048e6ec8bc3bfc368f010e2f8aadd53164693a62b0d7207575bb2597bcec4bb382c57fe9053e90fe2f7159000000000000000000000000000000000ec525abbf13da64a8093c5d3fb800440f4c1fe798bcc71eb97bf2e0aa9e8be4b08afd2313f9143260058132d2607141000000000000000000000000000000000aa12c902084eb843daf7b351989bbab7a86acb62eb54eff0c7599bacaf44653c9fbf53f47f6ca72d22ea1671842eca800000000000000000000000000000000082f330d9a693f2bb9386fe5274aa79ac73a17688821f3c705120fb2aa76903627786a8614053f21a93e0aeb555de64e338468a325384a9367c90bd0450816a22849b845aadaf187c27b3f09800e791b0000000000000000000000000000000002ce7f08b8d5052d8bd07090744ca067700eaa1db61dad3e5086661850337bcab485c15fdd36c309a9e5169fd2a2b55e00000000000000000000000000000000073fa834cb4dc4ae120e738059749bfbd86b9e64fd71b1d372dcec8474f3341137ce8cb97a38955e9081f9bd5e07ab830000000000000000000000000000000001568df6806d8c3cfc9231802ebe5edc5d505198747a0adc24d0ac59f28d32b7b379d1f2c6b8352389057c7465692ded0000000000000000000000000000000004fb4b08a4fbfe197e924be3f7213a769a2bcd24109ae69a32a197b6212c5f50dbe8f46f5ab6044a4c779cd3e09d13bdd29136cbc4764346e7ae1af92fe64560f453821f96f32a42a2006b6edee75021000000000000000000000000000000000c07ff656904a47b0c7bf77540abc47cc6eee3e76b6ff0983151de9468ce3a860c427f3d5d489d096264159ab0567cd20000000000000000000000000000000008cce094ae1d9fff246a0e76cd67dbf9808c94554372fc4aed4879487ef240e45047dc201dd8bbccb613feb9c4623a0b0000000000000000000000000000000008a25297940a1bca1267fdce450b0cf43105eb4a21ab14562116039bc8379b1a3f58a7c117e9ba735bdec40f772465300000000000000000000000000000000000ae17a9b1fc3b0b7803ef48cb26643e8e78ef133f94bff5f87739182e662e2641e72383efab1f3ec58fa20fc816d56c675a59418f1462247d3bddda5937553e96d854b5df64a68145a193b2b1a7eb250000000000000000000000000000000002357e5a04b0dbd7f9a1709bce9b7afa12b10c7274b440b4dc3bf51a801d483804b1b4b9a096c3205a0e2aa7c0100c6e0000000000000000000000000000000002ff20af67f126c80293e44bb3c9ac74a94586a2de4146588c7ee8503530398eabc30f7e89322727739618087fa55de50000000000000000000000000000000013c6d06ce509fd557946479f2768f62474e6db04b2c92c5cfa86c023f79d05a387bd4c9aa618888476d4ecc93ba0995e00000000000000000000000000000000000fa477870c952f7506b879b17fb0a1c31771ee832ce0ab21a513fdd91b7a2a78a03d297c55558b834e255462b15520544a345719b40f973398a6fdaa2044037cacd7f6c361921c62053cd51f2e5ff700000000000000000000000000000000181336b8fdc03c02e23cd06ac975855caa2bbc1fe78a2fc7a9d0963c90a1f1f9330d50b88bf2526db6132d336ea5b8e6000000000000000000000000000000000f2d94d3fde2c0f67dae5a6ac12f713ccce2621303762e01961843eb9924d1d3c732b4c977d8cd0e5668adcd7dbf7dcc0000000000000000000000000000000005ac9ecab11c3368c75b0d396889dc34bd43ccf550d817c1dcdc7143c15d5c0e241add37328a7bd8556fde87d75d67fb000000000000000000000000000000000184704eeebead43f85b32d7f3efb9b9469f3ae10b73a2f034bd33e6e66da0bc36597d8e29ef5585443a655e24ffb68fbb38b4cd72eb18c3ac87860aa58b4b439712562f742f112b5d769415e9c19d0a00000000000000000000000000000000046751743f8f747e378738c265c1df3a368cd9570a2bd7636991045974c34039161fb0eddc6b813003e0908915b402170000000000000000000000000000000003341bea6cb81fc5e7baefd386a518d17a6f752c0e1ace5a9580a1b1649f5501c7b4639ba0cdbc33808d78b025a31f190000000000000000000000000000000016e3b9e8e189df73574a00a721440379589a7a6df09eca9a790e04c729400323b2110f63d547d83664c35227bd15b5760000000000000000000000000000000005ebd94e4640344e99e7e0f1619c6288665c985b90d99921ee61bbfce921265c4881a7e1034bcd840a665bae44467f5a94a849f6fb5a53bd5957e53ade1baee05702185b4d0fbb7c1cc0f46cb75614fc", "Expected": "000000000000000000000000000000000d993522760839abc960e99d62dca1021b52ddc8147929c4a064ec72570ffb3793205598cefab8490446453fb6da231600000000000000000000000000000000105db1e83fdff735d06d34574f962e70d84e2c1ceef4d8a8f14c2673633d7dbc7b97ba6dce9013f06fcfb134ffa2ef98000000000000000000000000000000000363be663cb0d36b8eb076df283b075ab9e568e460be804f197c51cf7ef611d8783ced304407d4c2540f1a4a04c18467000000000000000000000000000000000ab2c00473a2267682ecb356422aeafc893fab96a3bd27ae58d9b0786624c8fde446cf68bf8a003d9449702e345b1ace", "Name": "matter_g2_multiexp_68", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000a575d896b06c5ebd7459a70b9321cd0de082dce7dc0ce7e39581751d01b7db810bca80f39f521df0bf70ef642bd66a000000000000000000000000000000000ab497a9590deef40f6fdc0d4db2ae7b6ad9ab59f112a5a0671b48581f1f2b6a71602c73784ca6c0effce66a0a9c6500000000000000000000000000000000000af3812439e44981c91633f73d1a92298ca1ed426c98cfbdb50643cee36affd5fd02886349aa608f4b8a27452a51a96500000000000000000000000000000000013126db8b642d33dd988b745b07084ef86a228767f7e8bd45aac830dbce4136ca5febca5fda9644d3292203e27439d9f5b9d270fe31c772e9a0bb409d9f08a07887f045f906f30e2653d293b6c2c277000000000000000000000000000000000cc12f75fe5e6d6f082f9977dcce64c7858f3b6378112e7e083caf0c4b33b5811d62a1130c595937983905fbde8db1fe000000000000000000000000000000000308b803bcaf4f63affaea0206aa9f4770c21b4d191890602bb4151b80fdb42af0cd9f8dd2b1a3adfe28d0e49712d2290000000000000000000000000000000019f83af5cbee858fcbc9bca0f499222849b9e80dde7ac79b7c46785a484fecf274e0d4326469eca647cb223068a183d8000000000000000000000000000000000d0a8334171571bc63054c032299824523bd2476b1150a67eb17b84bba01d8a65295624202c3874e0302159951734702dcbf4fe86140c50618598be9185830bc1da11429162afe0528f00eb6698ec088000000000000000000000000000000000141cc01094391887f46391bd49fdedbaaf524cfc94d741cc7c8cf081dd7c425d81ea3e407be48127550012e39d2b0580000000000000000000000000000000014db31972eb242d6c2912b418ddf416fd7911f13aede9194559b05d1c9e12056deaa1e56c155cdbc231b39f4f9aa91ea0000000000000000000000000000000007b361beb6c156b5c8b92b489e6d6c05e32a4376d20ac3e1a54c94e678c88480779bb789c3e1ff7a021aa6d872c98551000000000000000000000000000000000215d270f2d3c5c5b9fa99a873fdc337f4edad6889f7a55556d8ccb5ee86b592453b74a720ef6a907bc342710cfd9cf91d7fb7121ef0baa85046567014620e1adfb9e8b3bc95adccbf2e0b0ea8f37c670000000000000000000000000000000017f5d31987655f8eaf046d6ea4025444924befa51c319b2bcb02dcdfde4d80a1c48049514e0b580e4bb59dd2fe40bb22000000000000000000000000000000000141ab771c08ad7c592725630aca0b2564de1ed8759eb3afb10a4bf451eb21d25e8d917f49bd5f7a06894baafdebbe790000000000000000000000000000000012dd82703c939cc5e7dd5bc3b924d744f0ef1a95fd0b9e57617e822e3fdda05b2e5a9959ec48cba0da40079da2253cc7000000000000000000000000000000000c53ff34d875fec4c7095af324d15921cd775873a3ba67740b2c123d6d482263b1cf93585dc810d19c68965cdbd9e102310d3b0535e78d803b477e5dc26c71bb18acfe66bd5ba5892d924d265afd6a16000000000000000000000000000000000a6514331035d42f58abf98b805f159921d8c4c935f88bb5493c580a6ce14a65e243424b41b3a9188e26a7f0c912a378000000000000000000000000000000001351e48b2d3f619887f4e83823dcd9dc15afb2800169ab78a2cd5ebdf25dcb6310f1051894bd2b549e509c55f5286f600000000000000000000000000000000007900972b84b6a76b2e686fa5757e98b8395bfc99da86eca122ce209afb39e8f3b07603cad92623774ed54d637e350d30000000000000000000000000000000002c68c42b3924b89a67764990478e48fc17aad4b5543bd38bcfee34fa1cae7535671f3b885852aecac53a30f28b0d4aa2fc9417e65cb76aa0093a7deb3d38c111c68f461a4aac57d8f09189f94407ee8000000000000000000000000000000000152d2c0e798d85e4dbf35dab808dd29d724e9b6c7ca7f53ffddfe1aef5976f2d3079eb1d3099e91b37d9fad7f1af5750000000000000000000000000000000015059423ee4e7201aa65e39116a2a49ba715b15e4b9547d18a0efd355de6f5a0159bc9047508bd3649407758d62887f0000000000000000000000000000000000e5a823fdc69f3928b22c542388f982f8131a978b08dde80d44e51d9eaed2ac4a1d5fa7392be6c7edfa33e833da4832c00000000000000000000000000000000044285f4e4ce526f96f9f512c5be754e0b0953744dcc04807ec6f041ba5c6fb9d5d395e93317064d50e61aae26810df0aa0b2d714aff175a0be2ba9e675a2be8936c42f15e304a146622a95dd6b3e3ef0000000000000000000000000000000019c457e369dbfaa130ee79bd33ca70d00a3797b6cf62126baec0c5d7c3fdcf5ba7f41195276dc412b6862b71560aeb77000000000000000000000000000000001206f67dee6521ede85573bbd5784d675fea42da16010544857d4e2d81b720b6f85f646fa23540880b44a6cde9a39f5d00000000000000000000000000000000142018ecd7c7acd4f4ae288e1c6a66594f1c7f31bdb9bade2b4dc4c6455cdc685b716382c54d67373831a19100185e850000000000000000000000000000000013b0b57463a3e4cbe063c0d4f4e998cbeb132a41c2877106ee60e83d4ef7d339a5432d30a3c149a42dfb1da9d61f34030227c3510ed6e4c7f84b11ddd2d6caa55e0e79ed59e1cc0cb325d55b5d145aa80000000000000000000000000000000008a463003900194e45fc2610fb461fde538b17c4fd516919000d423f5a1b582342ab9ec20d8eb6fda8fffc6a898e46420000000000000000000000000000000010eef0f7bf73e35dd75fb924bd9759c09aded9cce46b05e5d3c5eb3e93e5d5032ecc459e2220aa529d2f773c4b8b8c180000000000000000000000000000000002a0247f82a25468ee74da555218cdbb6405871f7097c24e89db3f3eab59b91ce48ac06e8eab2c049346436c846226a3000000000000000000000000000000001895b58a50c025e46a2cd0c59d5437f6eee75fac949adb7ee12d455c96206a33ec9ac17d5088fb773618fec131981ab6ad930000a9f82e082d408999b396aca2b0e435a66faba1d95e10fa0abc0625cc000000000000000000000000000000000cb0f13b0680c2f7de522a59f4e46fe1d4af3a64cd3ab97a2523ad3c3dc42f5e6760e06cf48e4db22ee64c5ed8273dd90000000000000000000000000000000016517038ecd2799d787c5b6ee93079c93f78de4a96449bc82699ddd6eebcedaa1d02981ab47c529652cc21663f1a665100000000000000000000000000000000067ae1dc093d4aa2ddd8b7127dc60745ce9c462a066106b099a7a07525597c72e4920bf64c2ea8a3fef3de51c703de8b0000000000000000000000000000000016374f51023e2448eee7c64115d85794996fadf4f76fd4266c45093c266f35be09e861d07ff194f3d15e310385705f0e1a6799cab8964c7b79b80e76be237ef49c2bdef5c99a38ea873af6e9d49790ec0000000000000000000000000000000017479396aeac06bd624a47e75b066d6daf5a37dbe515650cdf3e16be21e7d3a1f52a695c1c06382589eb7fc869c7d9250000000000000000000000000000000015c31ff36ed4eaec4d3927e62c111d062236e19fe6514236e6e3f7ff05ee96e3e4c084fcafcd21049a81faa1f84b7e7c000000000000000000000000000000000341b440e6c6273515fa7940d2f77018169bf6362b70a7b0cd6d66cd332ccc30e3ac48f7581edf47ebd137253a9c1369000000000000000000000000000000000cf424de046252efea9320b32b79bdab58e0e04f2916b4e8ef475da7b8ab85d8d5fc793a45ec6e6c035b6331a895d3efb206dbfd70e4b24bcc09ad35ce7b3aa62d17f18347f2bc5f15730202909c93770000000000000000000000000000000007c9111a85a6acb851e9cbdadf182096b720913ba3fb357dc2cbf2b8e796e9a8044b6df3ccadb740c73a16c3780c640b00000000000000000000000000000000059543a955c84a197d23cac22e15d82363c881026e41c57ee924da2a8c044f3021b29918d1db7926ddc2fc7a662ee7ab000000000000000000000000000000001355d8bcbea65a50c9b6ab59881e48e8e5f5592cee6aa69d5d01b033a84057cb6e74d911769bd2ab5f9722328aa204640000000000000000000000000000000011232571c95d0cbadf8e70454c851974efa4b326370249238db159a1224cc6d34eaad690e1840ad887a875b667ac1f193a607a7301bb7dc5b9c82d956ebb0bc54568d0654d725d4d5f13ceb6231e862e00000000000000000000000000000000088b7cbecf91721e01e5e4a08ea3b261febb58cdae3056d9316c3840b3e5720a289739568bec7b899f4b1f4f5372013b00000000000000000000000000000000001f8835d4b0e3b957e46b718b6bcd81acdb50ab85f10bb70c6343a23970efbe72bef89dbcb24d66e6a6be3eb55665a200000000000000000000000000000000046500afd292a31bb5a4a9bd7b5bd0fe608bb1265351edea69162e61f1623cf58e34e8e1a8ec58ca166e8203c86f84c00000000000000000000000000000000005d6cc367ff9c88fc8b6c35383f147b4f9e3eb21268a5a7405794441d449b3e1b44c8f66e30783e5f6c3567adf0d80171231e0fbbc2d98bfd1039a889acac471110d568b0a24ddf5eb3501adcbaac6fa0000000000000000000000000000000015bab57412cc5c7ee0147b0d2511b7836a14a82df06b4eb2b1baab102840ed04cad81da6e920ee000751e0727091c1460000000000000000000000000000000002f725e61e82980e6164cae7a2e30a36dd7245402f4933697607640d53fab2d5db57698be33a0c9b5dda14aa846db7c90000000000000000000000000000000007fdc589448887f6986efd817c63954d350511401333cb0df89214317dec0a82b06259ae9263f260fc7f21f98ad2630f000000000000000000000000000000001324e3bb46a1c69fc550fa8f2ae2d0ea74bc2d7159bed03c13a9d232233449e271ad1c3922dac5d84aae52606f77dcc0393c5c10d4bc4cd1567bca6960051f818e5c53704ce44dc4582767fef1092a870000000000000000000000000000000010adc26d73007e3b1cc58684fbdd7d197550658b4c66c702e9cd0f4e481f23a26c94c6798cdd9763110eefdca3d802050000000000000000000000000000000009138258ad1bdf6f9cdfb943fa32b42c4f1d834be536ed365d00126227c78b0df2776610fe5cf66a937cca3e0b088861000000000000000000000000000000001991db3a35bd2cd72377cd459502a84315422bed92890af906fefcc0acc4515fe7cacee1e4f360ba24efb23292482b8f000000000000000000000000000000000d10dfb682ae7a78b23b37b081efba32ff2011fcdae7b0f8a794a6ec33d71f5d6055f93e3b68a37086ab190d7d9bd7aed412195e347b680430c4528987859a1552ba8383cdc075c437ef19db6eff6e1a00000000000000000000000000000000182795b905320ee69281de833f37e040a3295e23be05ea7ae4563bd49d8b1fb02e95782c5c19645244633951cc29c5c900000000000000000000000000000000053368ee1412723b5c6465ee5ebddcfc00812e0e12e940f8485f44bce475c8897b324eaf7e66c0351ce9a6c92758c337000000000000000000000000000000000279f26c1e76e5f5d0fe1240c0956cd6025f6520ec303feb383b69525ebb6b2f199808a578a91368c3881a4044f37be50000000000000000000000000000000000ba4012c24dfe1038ec4b4565e1b321bbfc174cb197f0b0914bf1c126bdac9f423845f6742129670b7f3dfeaaa62df45b6701bc11c1ef3c9389710e4dd090e3db481c5400ecb91655c20694207a71f10000000000000000000000000000000016c27a3a950fc4857fc775441947f7ac02af9b3df6422874507b11f7b005c61d7d6a4a115d3759fcbd64633a8ad95611000000000000000000000000000000000e92954034df4f15450c32be31d4e146c4b0014a2b81e2afe755df79aa962afb05ca4d03577f15980fc6d8a34f2cc50200000000000000000000000000000000032db3e3c3617c16ceb1c8fae83e806744ca40cffb56bf9b79997cf48c55e5fea89db43b368cd922cd7ce30dd3984d82000000000000000000000000000000000d153fadc3854be49b2376ffcf4e5a46b9dfb4f54e580986767db13127e2d4d10e465f1ca932d79ca90f1971ddc0993dab45b07c059738ead9709bf36ab20b09fd3368f7aa12c6d9f3acf3f145c83fa5", "Expected": "000000000000000000000000000000000e1968e131e25d3f911284c369eb63aaf264ee82f4d9bd978b7d02470feab68ae82aed8509ffba875798a292f012c9180000000000000000000000000000000011488365570d9bff018ce6aa15e3d7e078368f09873ed5e0b827d1c25ef369d6571899c8df38a3df3135d0db814c87a700000000000000000000000000000000161973f4949bd72b9f010f017398778e0d7f0c8f77e12a87db1851af516b4540e3f4df314381f295c4d167fd9ac091a6000000000000000000000000000000000ae16f0a4a597159195aa47862585839485615095e538b745c1081ca73f202115a438d279dfa45bd3aef8d4043ec67c6", "Name": "matter_g2_multiexp_69", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000046eea8e5af344dc8600ba7e506e923f6c356f7ecb3b78bb3805c4561e808c1f570e122c4fc5a1fbe433b48ce0c15d510000000000000000000000000000000006f1ab405a46c825e104bc963d2b2f573f0d345bd2b08a952d8793c0297dce267a754b802ded4db478399cfa88e7e255000000000000000000000000000000000a5fc4a09019ac9649c07b623d2cbcd9f0cbb89d28c01b170b62544d8da8ba3f236ca3172ac754175a3db85d9b846cfd000000000000000000000000000000000f7580110db2549742f69bbc2850e4ab35a6e415bcd1b06220b9b009c1f4c99152289eedbcba2aa653f38f6b8460386b3ca13f8540eaf45ffdab5182883d32a1d35e7cd956092221cc40232efde6cd1e00000000000000000000000000000000026907ccf4d501265cfe67bc1c0b06840e9dd94a614c873d676b5416457d98a1dd744322887f1f1f86176b11a27d2830000000000000000000000000000000000cb08e541a5b32fdf51acb28ec64d3ea542c7bd75179fa3f74e9588156815bda9d027dcf5597d714aa001b2dd8a9553c00000000000000000000000000000000103ac1c03c16706d5936f216a6445577c96acd3a00a3d8a9c2c66e6ce568dd84a4c4db187a5fbde24e6ce60e037f53a90000000000000000000000000000000001da5cedccc02d0f8d1dd7e4d81c3ec47d432e81e941ea1452b112eaf40748a6634957c90f32fb0385dc5d642bf65acdb3c8b045ef559b76005875bce09a66b36f295070a73ec8dc66c86bca51fa5d4d000000000000000000000000000000000a0b8dd68918b58ca6b113e938f8a00b2595351777aaf32dfbf703ef3884f02c798f1b5bb78cfac32f196c1fe88aecaa00000000000000000000000000000000121a4104e374566f8d582f75a3c9b70f09628f116b7ab22679ee13a1691b0b0bdb0d737833fb606c746fafee5859f1ee0000000000000000000000000000000000b8bc89d718572ebdd6e3100769f2571cabdd79ef5ca9a4b9bbaa432b1a4dd752f9af9d2a9b1f1f32d76d4ec2d1636500000000000000000000000000000000129f1d760a12eb1a75fec1d2ca438189c933e87095b9fbf9a0371d64eb205d8f0932fde9ee2ab9f36f8b6e5d4b5dd31021953ea264f74bf64378a339461bff41c5193e17913c67be7e2a249c9737b825000000000000000000000000000000001499e5481ceeefcd2ff672df24e8987fb60872ed106c496178d71c68e9078409a80016e1f9727ed0d5922c93e821dcc80000000000000000000000000000000007bfb606c005c7da6b4ce2d974f9fdb2e3710c8f51f18257ced7663cc341ff81fe2e46308a2b62b13408965949a6f08800000000000000000000000000000000003fbd951e860e3a4724b667427fd9916ca4ba511a0dcac7b1125b14d8a4f4da82ddc0b0edab8ea50e911b0fcb5c200a000000000000000000000000000000000b43195a5f0263307e85408ae4eb046e06ddb1295a490ac4e0e654324de53d0dd023b8cc159d86b861dfcfdf7ebeee4a505655d72f1128ac0204539f0d823f076cb3a57a7e74e896b5019c9161d6486a000000000000000000000000000000000743bed2c17bea1ebddf750da504fe120f457cd3b1754c9413757cc48f7aef07eb4fa0572cb853cb72d68427e875456000000000000000000000000000000000102ddfe3dee27186a9484f74b3cb3aa366a79f0d2e36063af6e484f6a459e9168d7a4a6969bb720ec694a52db7ab34b40000000000000000000000000000000009bdf5b86aba4845adf9187ccf9c74b1fcabaa05764e41fcce4b38356b4a0ace8e7b16abfc7f7b96b785ad47fbf8e90f000000000000000000000000000000001934fa903b71d234c4341b2f49f8177334142e7c401553dad38e66a2c157fcdf7637165058955b7798a59051846dfb8cc4c861cde3f445e3a78d1498d98b2b947056cf578652e19be88da4a786af196f000000000000000000000000000000000ddde953f59b8591a83b0cdfce780ec23d052037c26d60cef36522d0f984f907315d7b41c8be9a9632f2b88e0ce950ce000000000000000000000000000000000b8d7bdd94a994901a434e6ea5d03ea45dcdb859e560833d8ea0bd9d20c7db9c16b2427eac27d8f1eb640b7d28a530fe0000000000000000000000000000000017b5b3a3097a74d9c1f1b23783723235b6148023b6b060234dd9e2f6fd05e38668167136c999d91249963e224f9bbcbd00000000000000000000000000000000133da0c217c31ca052800315aa8a3b934fc1f179e6247801904bcea1e28dec0b65632ab2690bcca3606bb1461aeb147b99762c5189cf154e24238e4b157caa1d8759002f69b289cfbf3f24f5dabf20bb0000000000000000000000000000000012778a6fe79b1f2b768432df036543cade95504bb7735ff547969faaa8db84e3588046a074838c9a551a4fb48f4a66140000000000000000000000000000000013288a3413d7e7edebd118463d5eea9f9ae2e10f51965480f9b5c244b05775d04079a1dc75ba0885aaa9e2e4bae1ac750000000000000000000000000000000005b766ad112b8d69f1a28079688942ea146f8f31616611909f539a57c58ec5e857da9fce415d683c1c6dcb5e74da9d17000000000000000000000000000000000907e5c3c83d3f12a68d6bf812e310f5a04f1417094301fab7d4f41007b9d01fc1bfbf739dceddef756417367ed5b1d0298b5f6b43074b8f0807086b03f5028709209310474c35c7ee232eec8579147c00000000000000000000000000000000090be6ce5ed09e45a6fd9ea3a9223fe43a835141c1c29d6b386e085846869f9c5798b80c3bddec8bc15171906dd417dc0000000000000000000000000000000019bdf67eb16f2708ca55fd20af8deca66e2ae270b2f2f9736fcf49dbdf7cee034cc956f6fb799f0e87c12f283a11448e00000000000000000000000000000000124a69c723cbd366d52919a72dfceb7e4cd9ca5b5cef1784bfad3f125b11d810328ea1c849602536af500261aa684f5b000000000000000000000000000000000bbf05318ffd81495efa4f4c271c8b1c669041a6446501788f49b8739a934f09de9d976fe7300b0ae861be567d35c992177bfb0218ecd8cdbc6dd9484e74e41be6971ec2911bacc8b53b9b4b8c70e5730000000000000000000000000000000010833a3e7329ad40c1a8cef296b015f6ac6542c612038ce00f13a99f673783cb7eeb14796485c168d21cc169065d051c000000000000000000000000000000000d3b1416b23453b893c92a6c7850cdc0e4a395459140391b1dce11055da10fb68f318c5561e1c12d991a28f3f544a5230000000000000000000000000000000014721dc58eada80f2d0574fb4e2c1c94c45fbd90c2d2fd666fd618a96f4736a5ecf34cab34fcbdcb19b6cf7b44098922000000000000000000000000000000001905d34029bf84617a956d1edae090853dc1b622f560c5289251447ab6bcea5700bdd80d6ffb2dc12fdf3b0267e74543cac52219796226385aebf9e85f5f179362d4149c33582a97b7d2aeb05a8e6a99000000000000000000000000000000000b4d380f4f4eb976e6121b933be8418c536f85994491b0b93695d50473615e41547ead326bab795d4d59524a61d607cb00000000000000000000000000000000104b7f4058c9b355d38908d715c311a53169b42d2434de0876f1c4ffce1c39603c4876b33fe3076528be15fe42849d3e0000000000000000000000000000000017e2fd647e7739366ebb606e8a326daa5c03cd2b726cc4cec7747cb3468419f1907126d7cba98bbbc659478ce3afee7700000000000000000000000000000000183be0a976dbb3b5385b544c194e111729c7a8d5aa98eba3fe1c0a5b69b5fe6e5d0164e96398cbc61eba5b86d91b3c94e03afb2efea85fcd035cb4ba09977b2e1c84a0d98edf88e9f8d2c4f116d0f50300000000000000000000000000000000023bc7eab817fcb9982cdac242cb6cc0ee1779bcefaecf144dbe57d5ae2b2ebfe9088f39f416a56de4b4dc04d4bbce7a000000000000000000000000000000001318e728c271746905788dd8f5ab22a3a10edce3fa063438e54ebadba22c29e461b2ed78a95a8f26a65b47022291b8df0000000000000000000000000000000010aab000b9c5de56623f18861b343ffa80da5ed4ae0d7767b7ed791bf3dd507fe7286447b6a07ea0fa12c19f2e4d8e8d000000000000000000000000000000000770e2909b5795a08d98dc66389655b1718e70b93c5bc6d805c3945cb5fc0092a5b390e6497b550988c28c58b6e016a3804dec43760dab29c161b8f4bddc52379a17f3168f684267cfbbc3505e32d5f1000000000000000000000000000000001259a4e36f5bce7d5f97184948d57fccd458cf7f2ae0c9e174f537bece01d744fef544447959cb73a678fe2c378ce3c900000000000000000000000000000000131aa575b2b94232e06879fa1f6f145a0bf5dd12456b698f731a72bc587e6def5054b3b2afb6dbbfc34fa5249dc673860000000000000000000000000000000011d64b923596c316b097a0752043efad8b61fbe068c58bec7a6766d9bc90ed965b3419dde3b96679426f72184adb8931000000000000000000000000000000001653af784cbad5a804e3f72716bb51e0c733014d587952c47395f953828566cbd7da811a3da1d48681998d569db00a7bed2d3daf616df3f0061f58c925e9dfbbf6e9cbfd4b0b3896a596919fb3d243db00000000000000000000000000000000077a9ab830f7683b7fb46676df09f72d773b65286c5f5ea86623306e5de51e63851c18d192c4c3b20af582bb7f017ff70000000000000000000000000000000016dc185f4158e249939541d35ae8230fd749988b9174c40c40b8c932aec625a7e94beaef9a07f492445d4675a01b7453000000000000000000000000000000000c107a895bfb45d33136db6251c76dc0461a235fa5d1ba7a5d216bfebe15691261b46c9816315c146becc328acb6b8c7000000000000000000000000000000001151cba240678efe61e3a36e169e314b3610e9d4df6650507f53ccf635d8f1277a80d86baa85a2d4c7e2af73934a7299e16797ed90581fd8c3cef1f30abaed10997f13461374ea649b29101959fd506400000000000000000000000000000000090a1ee6c611980e0421b72a122cb39257dc38d1e74ee41b809ad76e440fe307cf45e79afddd8d40b94382d48cdd4c450000000000000000000000000000000010f2e6e610eec7b7c2b95c1510af1af342ac19fd3b01dddf81b8961ead2cc57a8eca36c2f5747238eded5914e484c52e000000000000000000000000000000000acce0789cfff975b09d687ef79535c536f3b799157d3ff731915ea5b323ddd9f6f4750dc8e00a879d4e516bce8cb3e40000000000000000000000000000000008d8203dd13aee7363f6b10a9e1ae9b713bbc8b8fb2c56f05fa71e8d69ea571384d150e8fd01e855b1b0054fe7967a052f9f29432638c033ca84422b12ca80ac4ae85fa30ff56c913c5737aeb2c84d04000000000000000000000000000000000b332430c518d7dcd120b346440e5b6b48900b5c3656d84840823a96e5bf002816d583a989898cad9e09ba978ebc58a40000000000000000000000000000000004197b43877b833de7f69cc1a43ad8d6d3544cd10d42336d4b19a187f31337a37b10cbf48e72b77e4d8e1a1da68e5e4c0000000000000000000000000000000008887d5dd08f45034584f40a2a68254baf2104f9d6a4c2637ef79c5ff2503c246f7adc36559758a0c07533b66c3637d40000000000000000000000000000000009343819dec1d4569683de4596621c19785d5ed14ba13e57d94b1b1a108aa62cc8c55c58dfa18c06883ce50cc1364b95e6f1e5df7ff90c4a4fb9a071c0caf3a3997569538ab9837ed41d9d0a8d7305370000000000000000000000000000000003fc7f9a0804e7f1664f8cd3ca67b70ba128529a611c24214fd09674072a6b8d652ccd37bf5d4611424688213a41cb3100000000000000000000000000000000137a869cd7bde696035bd9353662e0d37d2aa0731ae55357df3bc43536b9210f360324cbb3670362cf9ef607b1919bca00000000000000000000000000000000045d9d39c04e257fcd912c54e57c86d2d4304e6a7cb95a83d2bff07964d0a5dd8b4e42bdb91a8b245e512395e6749f1f00000000000000000000000000000000120e5e4b04b8a744757812fc331e7c98b35624faa1cbabfc1470e4c0804248bfb0c53a484107a677a7d3f0d2b533e7530cf3283195707c30880e50ff5ef605b561c3c3c354fbe8108f93b36f212f9ef5", "Expected": "0000000000000000000000000000000002bed414afe9c7a630441e7b163280be10e502cf877e94b6521d14baca0087c5dcdfa39ff4a51c8376d99855e1e6f36a000000000000000000000000000000000dcd54727a7729408e682c6e213005687ed51fa7935c522312793fc58cdb273eec9c61cd8b056a26619fc8dc006b066800000000000000000000000000000000137286f4086763e6ccd5ee82d3bda712b26814a17c6a71006a3e6dbdd919e469bd0e744bcdb2074679e78a1e7d56ee7d0000000000000000000000000000000012d75de1310199c0e556d61d6c0395b406afba0f13bfb37486c05d66b446809e8b1a024e8fd2c55f1b82cf2aed99a5e1", "Name": "matter_g2_multiexp_70", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008b83142b22f6d6496cad0dea23c71355e7c5d98659580b5ee6e97eaccb9fbe523f7e3b925abbca3a38f67426f3fb35f00000000000000000000000000000000035f655a1b2d22ea21cf0081e78d7140bad08c4e66dd45230a113ff3b7a77e39f0f1a72991f85e2b00ff58b27d5cb54900000000000000000000000000000000105d04e38243ef1ad2f734a3c97e91506c5a7c5d95e9b8771b7fded8908f1be933a81a5769044b633d501c0df7b5d7fd000000000000000000000000000000000e670ae4af94d0df34a7f2d7cfbfcefa6eebcf2a6b2dc5b82068b023fe02ce8a279e1bb96d905ad4f2ffbd8214e47d702063b046a71c2674e35466657a85d8e02253b42517b033619e31a536659172120000000000000000000000000000000009051f1e636309016c5433cc7eb019c7dbb75b3a4a5b27f6927de08fdd9577e8eb9e12919157ed35bfd6607be7fc4de5000000000000000000000000000000001953b7a33695ede6d0792eba85567aa5052b8a58c1bdc94ee82b5001893c6b996d3e8f7af8b8effd6cf50656d8b85554000000000000000000000000000000000a2f769f00679b610bbe212c2f8045e7579a96dc6bff80899eb7715aabb1afe79421ad5000f2c7b85d4e0904e335ddfa000000000000000000000000000000000ec962a3d00fac14d05774adc49bbabaf46ae78325083c0020587fb85eb234387aaf6506f503fa988df8e9ecafb4a59992fa325cd07502c6576dfb93ee952fedb304022656597bf3bb03a2bbc471b32a0000000000000000000000000000000006823056a4da801cae430fb9e3a8663fc8f46bb6c180b743b7f9c7c7e3287f3feb1aad4be0e98409c74ff58004f8732e0000000000000000000000000000000015f7a3f692d55252fa5af5ec952f581b796d54089f13971fce2ef9062173664816dd9f37174294ed78681d8c8c5a9cd800000000000000000000000000000000154743c76f7de590a31cb96d46a0ec0fa88008b7d6684bd8f6fdaec70722afff7b6e88c1f0fb048714fb1072d30780e60000000000000000000000000000000006f3191946d0e7c1307a1a0d1ea9a26db195ec98ad88f9b8f08a03a3d48bbff1fa53ffc920f7db5ebd4c65911392bb834484e688799c3f0a3bbe00cec7322fba6245570685cd7df0d744473b72f03df8000000000000000000000000000000000355018079cd02dfcca15fbd2934a8e47c5ee89e679663488499ddd4abdaba7679fb1c9d2102317cf2798c47aff1ceec000000000000000000000000000000000c417d489a224fbba9999300eb65a23749194bf5302fdfaa33ff7daeb8d896e387e56600233038d5c5eb59f644a99b6a000000000000000000000000000000000f5a62e9d711293d4373bec1bc2637802938eb789c828939e6c42f10062ec171ac6110261165bd179206d649713f6fe3000000000000000000000000000000000b11f9fd0ef8dcac2e21ef09846ffe9f5a624ec246e31393b39082a47354fc9523dbd247f0059b6cc740d7a387b137f0fae2ef61a024e4d8c4ae277f6b1d834193df655ffb315da67afa4ee4ddcb7fbd000000000000000000000000000000000fbb5521cdb9c3a69d58e5c9cd7e4a50bf5469bda2603f5119f3209669eb3e374d700f851b0c7ac5ee3cc9de79e6a7ec00000000000000000000000000000000131ccc37581e64f6f9fdf675b9b63ceb67d9d5844bf512166f39b5bb09d8e031437c06b0ca01caae7ad6d8c9bbb9fd67000000000000000000000000000000000531cb0557fa18ef054dbff2e7e994f1af08aaea7557602a26fd6ff539ab3c0a73f1fe841177012dabed4a1223ffb5a7000000000000000000000000000000000a180e7a345d2b635be92888934608e8b6c17384c48c560f4cb9809ff995f8e70d83cd4cf0e96c458fc414e1275d2a993168a1007abd42bc398e317484149f2fa61174243fd1748deec6cc75e7c720a200000000000000000000000000000000125c83184f63dee35ffd2c0c7dad9010cd6a9735675099f24b465554ab3db727ee76b5b7ea603ead78795d33e37689a400000000000000000000000000000000141bdf7e270dcd356993327cdb5dabe38a5c5a9b53470d9a4aafc041c46fe8bc841089e337469bddab5d4f7fd3d6ccbd000000000000000000000000000000000f9613f6d05f38e3073f14d0c2557101a4864a7d6d0b5a2b931d0613f020adb99a1ab2037a39fea6e99fcfb47929827a00000000000000000000000000000000192d812e05a17d22c60b78c53fabcc55a0eef3656f8e84132faf16686ee18ab4d35767db9a384d42f392c40c7b0fe1c0f1525bba87baee35023d0976b4a2d87524ba74158f000e5501c6d06aed04adda000000000000000000000000000000000b6e1960e82586de19ffcf29a8c5f16cf2fcf5286bf42febef832767919abddc655a0d1bfa240cac8fdfaed5a1e8f389000000000000000000000000000000000fc1598454caf04414f1930f711d762f0d72f5cdc7a4053c92b916c742b00dd0f107aee111976c1b1218c4577deeb006000000000000000000000000000000000455d6e9e9bb848e0868c9d725edca1f50b279d0acef8c597927eda72763e3702f46b216919ac36b080b4865249fd961000000000000000000000000000000000174463cc7804796b4a6d8ff28d2e8cfd8361b2e38f368de30166cf3c20c474ea0a1e8d94749fc3e6468924a7d1369e62d3d7c014416f33724acaa46412348d350f93d334588d39c77dc0b8ffcb4cb1d00000000000000000000000000000000144e4b615ddb871bae85484c308423adceb5de387d0c7ffffdd2211b4ea28788eba9bfae96ffc46781e6d6343e2f501b000000000000000000000000000000000046e39cf43fd707ddc4b7ce9a8a22a2aa1e55aa63cae1eb23082f7b4b5dce49f32d2ff887b5108b40f98062c02d5613000000000000000000000000000000000b75b5460db2baca86528569b47209b5ac24930e2545cc6aa08c401a87ef2c4e233de537e5a857e533d0ba0981b24d7c000000000000000000000000000000000018f53b83072fe7daab226c831a89da63a0930ea86e301c97e639d0ee1609e298e2789d1a347bdb4afcd355fffd16d053bfbb1670b7045b6df689871d5d012dc93e8be65faa4a98a51db8501a4b7677000000000000000000000000000000000185b296e9c7209a9abcc3194b46be9a545666527ec9b0634a3e3be579447cb52330174c19e40e1667124552392a7a0c00000000000000000000000000000000158a053c788e5b914fcdcf1aebb4e21cc8bbfbcc20c4d692256b2ae48149f6644e1578f98d58b3e73d9768d0e7df643b000000000000000000000000000000001318ff4150bebd8fa612f4e84f89151d5c56c272969bc1f31a3c1fcbd8ded0e298914e98e1ca48248e9023cd12db0fd300000000000000000000000000000000076555254f382707fdb7419772a4978808a7409f59d1dbb8c9e648372e19c44573f5ce1888a2b570a83afc20e698ee44f944ee8d294d189226a6cff17456e2201d17d4dfcb78f58f8501870377a6e431000000000000000000000000000000000f4395e3f2e301ee3e18df3c23cdd142716c7fcfc23caed924f0561795948b0bfbed948a6f7c415ca615ee0ba4d5145c00000000000000000000000000000000176ad308c7fe8c3a1aa350fa82b8f8ec638f77bc703afe1042a6da22e5385cd8473ad789247f205214c9980532b12c7100000000000000000000000000000000092b0ec86c511992c66f320ad46c9d6d7c82df118a9ab2ce1f2c5611ff4e5cdc9193a39c3fc95f18ddf96e139688b00f000000000000000000000000000000000b4f671e334b7f22bd8d89d8c4eb8a52b04bbd4dd1259cc9caa1872093736680618930f3a469b3af4a00cb6e44b573f27de53613b7a31583ccb214726482b770029c0ed42f9528fa74da7d2d1dd915e100000000000000000000000000000000123b64561ebfe085238220eb1428b3a203acb01846d1e4428f3759db6cff4ed3c1b9d436706f28b77e3b92e2e39ecb41000000000000000000000000000000000ccdf1973693e4b43b6133563986f6c96e2b924895c813f8acdd0f39585e4ee95ef26c0d9d51d6ef88bb62305e51594d000000000000000000000000000000000f51693bd44b12188131ca84801bfee0ca853640c0a8d5b20123c97b369c98299ac04beeb27d75946cc6f45f8a07b5fd000000000000000000000000000000000804c6597810d2c75de94484873a67eae258fcc9577bafa778e13d4814ce099a5684b1cc94e0df5a59acc7b19328fb8bb0a9750cdfe0910c544668bc9b11ecdedf1b757ff69b61fcc838c502c2911bbc0000000000000000000000000000000009b02eea05c78a24adfb0187defb6810116e21894d8782605c1d590f8bdc10723bf71a1e5e5004b181504ac2deb142cb0000000000000000000000000000000015882389195128e20e50ec4f8d278e8b8791e362341be93c475064d640e1f8bb1c92a6c777d666f8644d471409bb9aa90000000000000000000000000000000000d89295f845f989e0fbc6e86e97400b08e39b2968fe6c9a141d1e92ec9c838a3d8e1ada5e44bb08189a5d514ebfc2f5000000000000000000000000000000000dea05d8e6ab50b8f8dd9632337948a60568724d5a03c7914e4a03e2af572dd8153effef1a7d5c2cb27765ef2c17bc5b4aadecb1111ff43894123648eea9e57685dcb7a25553233a374479c24f2f8899000000000000000000000000000000000bacd14447ede6af0e92e19b54c4f5b6ebfb94207efec3e9f385a4c84a7d670514ecbc28ab686b383e239ae7f9bd673d000000000000000000000000000000001698bc92d146049174b843dac8c5dadcee12d1d503b2d0e46ee68139dd43d3aa797fd5bd06e2b214cc9ae3647c98394a0000000000000000000000000000000018d20cf6c84446cadfa1a26192a04e16d2b2a053705a89abc51bfbfa35c2b03cd58021ad95a35364ae1e2da5d233208300000000000000000000000000000000113268e360006294fa0203ce58cbfd05d05fb625e1f9474c96c89c0ec1ea80fe834030592c2f1c182ef8a3d5c32caf71adde66cf749daf69a30f41ca00d251f7f1e93b0e7f916a1ba6b994d946b12ca0000000000000000000000000000000001727b6bfa9c601fe84a65c54f556887c4538cb5383a288156fec87420ae7f15da395886e1ac0e10b8fbbae8bf040f4ba0000000000000000000000000000000012127cdf02ada71f28ed036a417971b87fe443b8c65b7739795dc7067082cbc9f06f7bf10c709969281cd072490c06fb00000000000000000000000000000000134f1fa1d277d01e2811c118cf10e2de6324e2ba14efcf717a03c1a10dca0862ebde0f6328839da63d7d85f573e8501f000000000000000000000000000000000d20a036b715d18ac9e2dbe009dd0063a4b13b3ec6fd060a64c4ad2b98e05e069060179530410d154caa575d504c63b7b2f9b44c73a1a6dfba6462e1202166b63727f45dc3b8b3b73b5d06459a1beec20000000000000000000000000000000000bd5375e7f98d3972b93420a39fd6c31da86d0d9349ac3774bbef15c2240437cc0761b2f1245e805d2538cbca6f778600000000000000000000000000000000100232139641c8cd5bdaa75b77e1e1c8e33b3f9554e2ae00ec6315b82cc00a6a70d576d744e68938a299ee2b451558250000000000000000000000000000000004224691faacb007bde3e37db6c7486aa5d3b4259a24c8b7653238e7522604ef4ffc1eb3cecf719a1b7f52ff00c34399000000000000000000000000000000001156ceaccfe0396374c6dec5adb39f14b6f08a32b88ef7499756f5cc324a9f1553bf5dc106a97469f2c49be5d563e1100cdc89e668f7cbd53a2ef6597a48b93d7d9a78950d4f821f3935edf72649e0000000000000000000000000000000000010a549108e77f0ddeacdc795517ccdcb357f909264457cab22fac2b982d10064756d66d0e48af02a59f58eeb1e8ba14b000000000000000000000000000000000c68703ef1c1e93c78faebc5f7ccc69e39046fe8af92e12469e9fd6baee62a2e8cc06fbbb3def81ae5cc57f488fd9c9100000000000000000000000000000000064ffb6aeeed432629242c3843f8cbea5bf7fe78585763926c5c45dc3cb4d1c79b3715506d7cda18c531ef890b22a1f7000000000000000000000000000000000e0eeb69f28a552cc6563f5fdc9919423c4358a2b70ccd56b048c22111454f67107513cda2a5aa0efd2af25dc74a1c47e23b377ed80bc90a4645df09e825509eebf57f59d7a2aa1b9121ace80926ccf7", "Expected": "000000000000000000000000000000000b1913c672760f98fc6d4e96ad1ef200f99add6f233b17291036e187ac6692ab0a29a4083dcf86a532dd06efb3d9b8c6000000000000000000000000000000000323b703abed59a9824f34d97851546a5e78441accea4e3a933b9270f92a9dd1aa056858ebd1739659018a0ca13b96e0000000000000000000000000000000001603cb3ed75c09ae5da6b94eea6017dac0c40b17d9aa8b65b78f2ba17de051bf3f21109d9afb214d260a09391f5526c10000000000000000000000000000000019f3bcdb8f16d9a2bd11e3f9491266780aa9110f447e19f12f7a2d62dc4f2c7b5fa18e13792007f5f361e20656c8ffdb", "Name": "matter_g2_multiexp_71", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b7d06c16c77a57b5ed74d829ad6acd665e73d20f1d9285ebba67b60c0d1571e1b02cabe5dea44499ce6d40a83288aac0000000000000000000000000000000007e6ae768ee3d149c7130022f9883ed51e4fcf68c91327ac1fe85aec8083aa61a37e9afc25d3352e144aaf888f264ab20000000000000000000000000000000016f2423478e0388e8495a898c23d63a0929a2ee7cf848034e4c1adad3460c7070caf47631eb930678d3c85aaba044dae000000000000000000000000000000001587e63cdf50d6e0b6b3d7652ad0a0a2497e70259d73432831781641d3a76db4ac7cff1bef165fd8ba29200d7320e43475888762fd1de395fa80b6d8a751f280eca568de2947e953feac343fd6bd592d000000000000000000000000000000001181bebe3256dd6ed754b8a1d77ac07e9a341789b3f4a4988599c7c60a36f1e95d3e3cec52c54c0f0abe312ac358c28700000000000000000000000000000000189d224b2904bd45cd1e8fa72570a1e35c94680d03d30292892462664f9d7aca3cc45ecc0773e66a10248df28ba9a9a1000000000000000000000000000000000f654f4c8b02a891e14fccbd5a96228afaaf79ed8306c7c1267715bc934e5f2568ea06de2bcdc2a55ef708689d90108c000000000000000000000000000000000c0a413f16e1aab8b91a87e7027f067ffe7de65097da37d67f604a184c7e7a7af6fe59ced8c03fa32ab036862868b35018ce7941da132adec1eee8d81facdb5012a15ddfe0cd6751ebbf66ce6c495043000000000000000000000000000000000dc972d55b7e68f97191d988ae7be5f5301bce5c654b323d4c17bf6e070f7227c0789ee38af3ccc07b04f0793090c6130000000000000000000000000000000016288c405bb42b4e71d12fd0a798cfccc7d33aba0500f939f5fedbd0e071166169d3072befcc5549cc6963b6dacbef4100000000000000000000000000000000171ea4f6607d6efc875cd9cff203bc62eb83bdc05c07f702143c23ab2770f50f42738f748e6bb3bb5d6f51f40fea1d910000000000000000000000000000000000fb729cc9716bf2e9e30a598ee7c4281163b287422ab66b414da85b0b960102991c24cd023791e4241bda5b0f6ddd3424a0497c642dce3937d883ee25b0ea577c729366c7d67e2e5ff1ccde3b19a5dc0000000000000000000000000000000005720bcbc598c4eda697406dbb390c2aaf4bc22c794b4b664e9b85b7c2079b90f7678e69496a4a5cd3b46580b90a7a30000000000000000000000000000000001159788c3edf619cc5e6f77c4aeb4860764d46afac4cdce54cade63155040c631eed65c2fa11b9cdff14847950cddc2e000000000000000000000000000000000d61bf02587e2c61544ae8a98b4c742c26a3d6ca49c6ae1b19a9d69c7f8eca43cefd555c973145566f8332902217cec3000000000000000000000000000000000cc0da96623432a2c170f07a3aad2844c1c2aab9d1bb5d2183928c818e681c66cb3767be372be4ae65fa40bf5483258ce4e0ad0d478ccf5381470a3fc9b882639dde4a0147c7c82e50bb93431b07a1350000000000000000000000000000000016efffb5d4ecbd01567c1e6099c0f06644d4312c599579b4cb780fccc8a425f3d1263a5f0c957dda4508202a354162f600000000000000000000000000000000115686a37624ffa8272ec7dedb7a632ac568245918ed91be6c9116e0fde290c26b5291e5f57ba6a779750685b0f126ba000000000000000000000000000000001852662b92fb49b2f0359255db8a7a2d20bd37705b7994cef1eb8e318aed70fc37bb7af9fc0c32ab3efa8c0afad640570000000000000000000000000000000017a691c08724ccf0e668f2f4eeda692e9ac21385fea243dc62c37ca73421eaf51c3a60771da3fb3e3cb578de37d2d45d38573db9346a3c8de41af54048cc51a0edcb86f36372859d0d794f7560c8525b0000000000000000000000000000000006fe4276e8f2e23127853eb929ee4e0c6ec4a190d46ac222dceb995c2e1d8fc9f822806a877e6cf87cf579cb2862c25c00000000000000000000000000000000044dc671bcd516cf03ad98ccc55266688856a4e4e5a59d6a6bb93e9ca77c596b5ecd2db6f3cc6377a0086c53ceed5487000000000000000000000000000000000c3ca83688d20519423b2b5547afcccbfaaa088a90523272c7cdc9a9b0397340350f2a5ced2a8153d69c81cd79732bce00000000000000000000000000000000069916c468f22bad174522d7fb94b4b7d2a664743b4689daa5423f470014152387a29425642b50f9e50fb679ddafdafa02257ed12262d00e78bde574a9ebd2664484a446c03fe8cbb855bf92e56bc1630000000000000000000000000000000001fd452b8685b0806545e09783947551bc5f6446c9d15d079a8968a448a6fd6f8b7e91974b71a4b2c50954be299c4885000000000000000000000000000000000f28bdab0b0fd3e05d08ee2c51f1bc0d30380e3a7aa18d6e04b47018d6a8d2b35a8f06df3866ccb95ffbd9c5333ca94c00000000000000000000000000000000035f3aa1cff72df0bb10f1a6f8414aa2ad0289cd15f56d84061a7cc70562f1f12304c402c388e48dd3f34082aaf79eef00000000000000000000000000000000034730e3ad7a3373b97279a00dc7a053aadd088557e0da61b9aa132c5b402fd9aef73cc45dc1cb7f2076cb2ff27ae2fc76b9d21a3da0359a377c11a6d0a18bce7ea81d4128dc1e7618e6c35b9149d5c80000000000000000000000000000000009c91d800cb1d52501520b3625dd4c20173684bad8742c7ac4b35c0ce028556b6529de5cb7541e3c146b13f58ccae57800000000000000000000000000000000124259d345bf2f8c16215be4b6b7922f4e2d6b32f91c4b1c4f1d4974918fa9e6fcf10e46f0c0b55e2a7210d1a5336eed00000000000000000000000000000000072e6231244ed14aa0f5de06e2f953371995a567684b00e459113380c1434a8faaab8b28a0280336ae35bf1f90f1d4d10000000000000000000000000000000010289a63e0e5f1f35b7af22137e117a85df27874ba15df39b7c26801c169667a3afe9a14663d7ac0c2956f4eb70cf11fc9cd895d5d1ae0ae704e240c10d8ed4a01b319598d7885f7c3fffcd9b491f5fd000000000000000000000000000000000d0f22a9bcda47ffcd034618c15daebad8160f9ab6b3148f1cacb32e713df2ef19f706f14131f8ab1181b7ef7598e3e4000000000000000000000000000000001680314cd79fec583c8bc0842e1750b1318f94aa7700c6662aabd4c592ca61ad51a6876b686ac3fe3f508cb40192c31c000000000000000000000000000000000a172bd8e49637fd9eb611b590c68bda707931e403db35cde1c10bb74c389ed725aab54dcd7048285352c56c8bc5fd920000000000000000000000000000000012589683ff3f85ecb006c5c435ca7bfd9d5a6fd06eb625bcbcb18577cdef610d912e783f3986c965710269b1ff79ba972467604875028997efdf5139180a8d530a1e9f18c62ddac7753cc370bf25254b0000000000000000000000000000000009720c2b3a0658a4aba8e76e196a558bd155ff550b3e41bb5b43e7c5946bad803b1de64e342956a11627e7f24f69fef7000000000000000000000000000000000decf2262e8369d6a2b1ce07fdd257abe1c7610084ae2f347640c0cdb98c7cfa732dc609c18b7b6a51b47ebe4b07a586000000000000000000000000000000000e8a0158702ff6d6c3a7ed9fbc774bc329681130840d86ca3f26cf6642cb49e5f14ad95fff1c94151457b1d5a142bb5900000000000000000000000000000000035ae66137629e95539e09ee99b001d5b9a6ede79727d7deedcbeb5acf081cd05ad469ab06c265a5224fd5236db160b62f47637b64d28fb4facc31d5bed34b22e7b270431f54a689cd0fabd205e001ae000000000000000000000000000000000413d82d0b02ca706f0266051445c04f3ac594ad82e2f1fb4e8e0cf23a6c1087c29383238ad3677f170e99259e2fe93e00000000000000000000000000000000070af21f84895c0193f0b8174cb20b11f45c845a8d782b1f58182b149362e1368ba076ba702185fc54b5da94c3172f5500000000000000000000000000000000182e124ca29d66f9f6c370f6065f60928b6a8f445a74800d59209219add6cab0d1b79702c31d60e61cf56874a4eb6717000000000000000000000000000000000b94b733f76067a102cce9659292f31f3df2cf2770e3a83c1524536e29d0a84ea5c4883cb4e849830384dc7e157d8715474c3ac61d4fbece967fbd0599c9a92c3fe0e53899861f044308b0ea8df137880000000000000000000000000000000004b2feedd5badbbdff6fd0f33a4bee17b38cc8967fc72206246c349e1017ed0407fe08e0cd9208fa9e4e21eca4cfbc2a000000000000000000000000000000000df0d74d5cc17ea94457c0ee26ef24071700a0fd6bfc762e3ec69b8f1c096887f679e312f07cce8340686eb2716c9a96000000000000000000000000000000001878edbfff2efc5af64aa9a23589a52d63749b7ab2970f256874fe0cc15091c4511050b0a243d421dc6536f19b5977cb0000000000000000000000000000000015951da3b20494a266e4d014d0ec70fef4586c8656baf536a0ea9a48dfa041624e8154989a2fb106189217ca979ddbe8eaf9da65e0e1752a982601e9a070a7cc77d5007eb641fffbb78d2a1b02dcffec000000000000000000000000000000000657fdf40c829719db134acd6c2a9ff904681b1869f28512cbe2a64d93e5b62114a73bdc5260ad9a1f24a3ff191b7a3e0000000000000000000000000000000004e77bf63eb9c4741028dffd0591b4f525d533b455d35e51cd86c7884d63419a162b145752bde188d2a622251c087f870000000000000000000000000000000016cf02af01fa6750b4d862f0cdd5a87a79da7c3fbedb0fa356ef2e7419e25b3a2bc8cbfa97463d463d0ab349efaa3f2b000000000000000000000000000000000ea4468fe6a85d36ae990d0ba959ae050756805c4c769c829de475a2990ef1c46de20d5b466543978faae0f6045023e85158bfe535fbc342e31f32ab4723c0d9fe95a2c64cc4e59bd41d13a08ac811780000000000000000000000000000000018d42a2df8ca475be6bdc468a82c313599239b974ec3d27e8b8c534aa4d6b85d4ee9aceb15c38b3bade2bb1706a2c2cc000000000000000000000000000000000124d5dc60527faf48f5e9574308f8a328b410de1cb49f2cc6f76b8a1f2707f2d1a94bcbca0a97bc38f24545a8013b250000000000000000000000000000000018b690b3d1e3b22946a91ace004e1d8f92eb5beb284eb05b52ac5ba003d7bc387540d33d088a02711522e3aef7f74f4300000000000000000000000000000000103080d8bb379d961da06bc4c148cb5b056ae115b3a0e33f0a8c99a7fb7b7ceda35d3902e0733156d354dd0240e4bcabd66f5a8f37a7c6a32088897abfaf5a98bd4722c411bf4b52f0f5b5648e89df29000000000000000000000000000000000f4d068354cb5b51e5a86163978386533f8f9b6e388c5e75f7d9ff5e1ab6d1637717d251f2b723b7d683e26a274d610c00000000000000000000000000000000001ec5a0d408c55f247d62ffef172ef26e45c41029f1d04e36f0dbb4fe8af414b0f7fe7ec0cfda66a2855b58592486fc0000000000000000000000000000000000cb1b68045076f457746621cd415d743701bf3ecae8d52dd5582c3e0bfb38e6cf2651a5ebdf521afb1ec5b8066444210000000000000000000000000000000010f5672f813470378fa806abdff90edeb0239b00d85ff23a3fc6798779f46d6b43071d66f7742897a4e53ebf6c7dae719acdd24190589ae7823a42e8b59598eca12bf13b97aa9a0eec17f5f79a01e8df000000000000000000000000000000001422fbaf1bc2908be5900968af61ffa7b3af46e7250e4663ff321f42e2db057bcfb2106c433a9eef8fe20f7138b71d280000000000000000000000000000000002176e68cdb0ada2d7baea437bec8754ea293d14afb85a811f7a5d740d645a53e511b5605445b110174ceb5e6720e736000000000000000000000000000000000a69e992b6f4f7eaad2682cf9ac2e58faee9b3341e852543c2aafbff390ae067a641b2b5693319618fde413fdc64d6c10000000000000000000000000000000009440317af8f5c753b5de4648b06212256a39b7fb03678f1913b0a3d402a50e74e2da5d29c211cdf0b292c132759c36d0291be87a213b0a24c92df5ce42381ca378dc4b9aeb4cb9b6918263bea827bf8", "Expected": "000000000000000000000000000000000fa31d16d9625200c13a415fd61b7552646c62fb8db307e92c1ac3d2acc92336765a1db42407ab0f774ccf01291b9ee800000000000000000000000000000000156a77678873dcbe4832b9fc7f516eabc1a10f4a6576cfb15765cdf999a771a6a6d41021897dd783e9beb2db722a6fa2000000000000000000000000000000000ee4599a6ca9642cb4cf38f5f2af23271cc8c5bc6e2cf6bad572b618bff9f8677837104b93ca8942843fd5db5c30dcdf00000000000000000000000000000000138986714a4053618e66a85835d105f4aa2ef38ad18e34b2ee7ae30a4282f7e543c80c94bd12c244506e7fcba25f4c1b", "Name": "matter_g2_multiexp_72", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000083c515ef8509b12ab85ad7d0a816d986bcdefc14778efcb3bf7c2ab61991849f279ae6a9f5342880837c0d0f4a4eba700000000000000000000000000000000020cf5196b5d567fc429cb9ced7b55e4925e18c914caae216a736886a8d886c4bdf6d704bbd0ceebdc1975ef530c665a000000000000000000000000000000000f3d0a217c224434604d63cef559eed3864d2da62ac00d49fab8c2c6e22c688496adc30c8d591e21bc0be404b62083c20000000000000000000000000000000003d0bf7f25bab0bf2c768b44e10a6022650f7d5b7d568d502b9d0b28209ee69b1d952ed848572d3e966e8771c20becc4b14c6a38cc998df3583228080ea10f215a6e6a4b02ddb6d43e8f459d494a1ec1000000000000000000000000000000000cc4c4b7eb7e358d4133b65e635fc13b8a92229706a6dc5867171a60a99a8e343045a794c368f1133ae6cd2788c3a7db0000000000000000000000000000000019508aa39fda9c3efced287d2571db97045f8b7b0c7a9c9d51796aa8017fc0e5abb8fc994700dd5c9f755edb518e096600000000000000000000000000000000049f68b0ac142715cfb385161ee70e453f0e24e2e93f3f96c3d69447f3a28b180fe76989427b2e392c7ff939011e04ab0000000000000000000000000000000004903c0f8e0757dfd3f5edb4f54a0e292df15ff70757df7b0b04c99f590a3dd13c6ce7bbabf3e14daf9f3ec60e2379aafee8614394c8109338432ec72f2d9babba06f1e7b826b0f2558c3247c923b23500000000000000000000000000000000041128064ac768664f076116247e0f8a00adaaa824cd6fff33bf524d0c76e61203408ac13b294aa41f5c462cd42d3cec0000000000000000000000000000000005e150c27979ff1cbe307511816be900648957624caed1f08d88347061cd783179c615258fcf3619bc4bfa53d2513c610000000000000000000000000000000009d2b3d97d29386b93d7af014ea8f1cfe2c1db5a9aa0c17e8430b0fcde974a4e7b8b42ef041e9a7b1a8aecb97cefb52e000000000000000000000000000000000d86096ebd88b2cdaf5cda1e9ca6b7f12ed5def629354b0570eb084bc7139cf20bb8ebe4438f87937b8b554e2201344c28728d06cd90050e44a827b44f14ea35e83c9b58ce4c3a7a45aed6f31c94fb960000000000000000000000000000000018d677cd67e96b10b671d2ed9234d7708042ddfe6fb804d2e9371a80ad167004f9d6b92d26b3d3af34ab7caa0e03964e000000000000000000000000000000000e34a6c85187d328eb33c2d5b2ca96b5210d47a779ab810dcc380dcb7e6b3c334ac8fccd7354aa9108136e4f6dd4ea0a0000000000000000000000000000000000ab8f7274ee3fce1511c58661625c766ffb0ac68bdb835a948b09b7510bb573d49000000e3d3cea772bd71d79681e1800000000000000000000000000000000135ca42f2103905748a1c416d82170f7d24b49ff3f859d6cb7493cf89bbae0217529a9edc835be1f9890ce105877af630fda665c40d1da93b1f132070e0b7c8c2c0ea0e66993b5a3d7419a33d118d25f0000000000000000000000000000000007884edaacca499491580c8c7194c0d60ac6eba95f7a81f63742451c8ed21a223ca545d5cc1e648b9d2dd05016b4fea20000000000000000000000000000000014c78d5d1a93760096bf6da73bb41631e94d6a1b251ed0be7bda93e4c50568420bd4d49e4a46e5be4bb204cdb6b0ad5000000000000000000000000000000000128a860c23a183c5bdd18b4a1853cb53475f1a893420bdf3271cc4a65a827eba6b92e1f9e8ac0d10c73edec5160c640b000000000000000000000000000000000ac14b2170042ee6561c34f77fca40e1bd2d40d01798417dd954905135ed9b7772e5689e6d4e543d44a4563da8c3ca40c14f014117a74f21e0b698a257ae8e3d6091ba76bff7912abb6bd94d41886d0500000000000000000000000000000000144df2e76821c19167f60630f50c939b66867a82c2a5f807e943676c876aeaa2aef2126bef7fc431f0c7b39e648542fe0000000000000000000000000000000005e463627bb2d22c25520c27c05cdc75e1f2ee3b91e8088399ee42ad13ca217284596e5404b4370995f71fdbf1c1c7860000000000000000000000000000000012323010d6aba1bc6b1d6e7f7e8c7bbc0838564b279d5ae6279f7f7d3cb5d96273e27e7096e9a8540463ad16deb3780e0000000000000000000000000000000019102ac6bb33bd1c5a158a584ce32308b6ee5679dd6d2acdcfa4b9c54674fecad7489d1e39c05b1ded88e4ea93620724d81a1239ad2c945f1c560fd1674ac7e87d49aa41a1f4a5bfffeab1147c0ef7c6000000000000000000000000000000000faf210330693663c8a1d1fef78e211ed2542f7ffeddca3e19be3ba77ef211da1b8bb5abcfc96b692d74f8c7df40b0ce00000000000000000000000000000000134153a252fd8ec5d9aec08ba09a94c4416f95ff6f4ccce59bd400474c836af5bfd941f03384ca4bd5c56fbe81d96ea2000000000000000000000000000000000b4532ff1ceab2a3a177cb83a75c16a833a2ff28df447def351134ec4fcd608b2b75b1f8035ba7d40a737087f3e8c1c100000000000000000000000000000000127e3ed13384b69819b34ef8705fe9a66dd01b275f1f74c2c724420546b39c70cb7a8295a6c1ec4075ead4e3312b8b603a02689cfd2c353fc1b4d3913f5a43745fffe6a87a7c223ec3b25b321584a75c000000000000000000000000000000001351d0d5d531a63a5f56aaf1d7906b7ad2bfb4e9d823e2659bed4e05e7edc9179a7bbf13405ab5cf410b25c7d476c342000000000000000000000000000000000f0ec96128e058e8bfb6e0df1331887245dee87c4f9721fc7f1d20c20a2feea7a7078a4946803ac093477707598d59b70000000000000000000000000000000009399034e4aed13cbf197d8c4753285effa72fc53493ca316db11b39d5527b009aec6350d579f9dee22cd6d4cabd88ad000000000000000000000000000000000002f41ed0dcfa2437cad7b12a94501266d670ed6956196c438241aeb90474d17214eec5d5217090d28892d95f4e40055af95ab3fd062088ffbef6ed887fd39aa1d527fe7633b876187ae12e736fcf2f000000000000000000000000000000000ae208978a751f8921c6067ebab4190ac8d3608dbdf50222eec59460095b8ab2abadd97616c240edd0a9c53dd006e38c000000000000000000000000000000000905224b317a1e64d8af075b6db9de46ca4481458ad6bceaf726ba0f63e81e2a0322e79e70a5a82034abf00d47fccc300000000000000000000000000000000007173c3359f0c2e315d11d646a76e6f500c0922401e4bf9f4ccf2f0801a567fa653f287fdbfb878ba0d9ee12e25396ef000000000000000000000000000000000161d4cc71621e5df13d121c77105af195c2adff5fc6b656b0fc1dd6eb2518f474444d8bc526ae16387f23a4ab3f342f6541c6cf8217c2a95792900e8fc39581b177a57ca00162c57131ea4fb80a4c60000000000000000000000000000000000266af9991c393d3b55f9e0f22b0967d47dbc5b0c97947125e220c4bf9f4bc58d32ebc7bfb02b2e329c933ce41d0d8c00000000000000000000000000000000004cf5748aae8dbc1e4778dc85da575de2b6d9d346f5dc5ccbfd82513166384111f5e5f2f1c2f7ae367a22146d1fac027000000000000000000000000000000000095dbe68521b2cf51283a8cfea1f20eb7ae37e6e945c5f879ba4834d20918b74981f9e0eff4543a79ff4eb36d84a9c60000000000000000000000000000000007953cad14379ffd4309cef1ed6a2dbb73a93db0bd3a256753402e525bb62b10aaf22b662bb2c704865690af995e7d284b7c3f3c4ed10bced85f36fd6dac2646c65d3c810e6d2d116c38aa5e10b29c2d0000000000000000000000000000000010e99f318111baeb1b4611847fdaea7cbd5e3ae532af667ad2498fb2e97b1eee0297e2811c7ae854b882f616da7733fd000000000000000000000000000000000e56cea75b4c4e4c669a492a6723fd60e351a66dc5c34c46469dc36cb04d2c23cfd4aeaa23d0e9e83d5b78a1b77696ed0000000000000000000000000000000018f838d6a582a52a508cbd6bbbb9cf515e091deb7a640e141dea4018af6593c001dc43a8fe4819a7877d9ecf53d5752000000000000000000000000000000000119aaa2ebcdb6379f7ae972cb709990a3e8254f1025cef308281bf7057295e3099d1f3127f76bd2f9ce0a03ae0de8e8d7e33f394e96d17efa30d34f57eecc45d7b4ca150a31b8d0484578151d6e65c2b0000000000000000000000000000000008f837c478e874b857f1c939a26a02e13061d50728c10939ffcf5e862cb177993e204590699a28cabc7593056617d433000000000000000000000000000000000432d9e66dc78bb58ab98771e7e8b5fe51835f286b488e2df6c1991fd36c3c537f2ce30abf24f9d4fb13941189972e39000000000000000000000000000000000b202de3708984f44f7d05ccd9e574a2a93a285d5ca262017346580be273c58f13165437dc90d1d4103d3b9eaac536ce000000000000000000000000000000001873e1251d9ae9448de8e7ccb7ca59a21bcc0d07a2819d140c06ec33cbba559ba90647494a7ecdec8b609b58cf7995cbfde92a31e571ec03e509ac8a70ed5788869854eef0bf578efe6c5e6468315553000000000000000000000000000000000084e07b6576c73aaf43c0ef9c5666dc988ed93d1a106b71e4882fc0cfb5e710b91e5d5eff57327f5678f662f4a451d50000000000000000000000000000000008a29751f1653236a48adb5fbc59059c7137d36139574c6af97314bfbcc22f77a4c5162092762a26b5da7887b94f2da6000000000000000000000000000000000a4fd84c4d58cb9e18aeee180fb05f07c3e1d7ed8d09940182e9b4738744fa6faf600b6f720441e0ad6391a4d502ac040000000000000000000000000000000018b356be2aebca82c54988ab2a2ec58751ce7a815f3dd58a2218a638753d4734d38b74ca0e00bbc8681768f5d1a02b646f7de01ad0f7b4dcaee1123bb80a71d3bc1e63ca577a12b14ae2a11d8c0fde46000000000000000000000000000000000de0f22cf05620a5d4bdcf50ae179f23a9c089fd6eaeb14eca937d9e2480f1782a1c67df76e06191a9b87514daa8bbce000000000000000000000000000000001981cd1f260e7d96e55533b8e29867f37af507b4a58abd69e0ad6af2a55228ab1c82fc2de52deb7b7b7deae2fe621e10000000000000000000000000000000000d22a7a567ec8826391ee711768e612c403e3c16e20947ca5861185c24728b6c7e7756debb333e7acb53d86032d5748900000000000000000000000000000000016fad52e1e86b9e092955cefdf93a10f30db896fb519fd2ca12571d8dc8aa352cf4f8092e0e973d0b0c66df78433251e2c69d21d40813ee40a718f0ead36b51f3a50e9e4e4b2de8acd33add62bfc1d20000000000000000000000000000000000484bb2452158bca93dfeeedb40745bc5d9a9ad49afa20e6c29fc9ed1a8fde33ce508cc252ddd05fc486f8ef78738ac0000000000000000000000000000000003c2d6ff6f292b0f0e505fdfdd2940e72bf8c2837da4ec9c74fb593fe3318a9b9a8592524bb5d40f6c38ad871ab7b6150000000000000000000000000000000015f888ae2722713e1b5b02803a5b48d53116c1a4bb1191c9da77ded8c6ab49f1620b0f7c7867957d84503cfd3dca1be7000000000000000000000000000000000fd96baa382cceadc252eaf000d47d8c1e2085e9f274dd9dbb571bf85bba612836e1da2453fd914135842e2750796b54762d89025196aec4f87da2fcc5a9188b4dc7b1c014dd1d705223bf9fe1e7a7d1000000000000000000000000000000001820de289f62058920ac3d4bc60da023ac29c431ee429a10066f305d2b1a333ffaa906404af977cfd3212b53e66726b500000000000000000000000000000000094e448db84421e25cd03be3867125cedc7f77f286f404524757f3c1a9cfa28ab6771293da490a4d75852f515dfe1a6700000000000000000000000000000000097dec124970bc63d8f62f9133157d412f5ad3fd5eebb444568cf0fe2825d6ef6577ad302842f35570c9977638c6a827000000000000000000000000000000000490bdaabf4db27dce906cfacf3160c0fe25959df4af89301cbe6eeb29f72e4c55bb467841ba7d0750a59a32fc8b03d0ffb9f3e1d43aece3af1f59319a8228cd81e668b1e250d03350958dcac9e23843", "Expected": "00000000000000000000000000000000193358b283147ed5848559d4d1533734822b0248dd17b2effa80920a853b70e7fb683b08aad6ad4dbb91f964ad1b3bb6000000000000000000000000000000000649be60ba72734db4cc307a2fd8be57857f60660d0c496c0dad73794296552e17cb2eabb3537ce677edaac1c6997341000000000000000000000000000000000f91ce27345e86003c99d133eca50710c0722cb35af2ce442ebd74b46d659e0118be9bebf32111c258e4cb4ab795a2cf000000000000000000000000000000000d76ad65233522b1e079fcfef4dfa80f163682d7984d5062680a5dd4cbccd5044de4705013c6bce2140f7950032f90ec", "Name": "matter_g2_multiexp_73", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013fe4afb94d08ae311b7442de7291a11e733d8e555f2da6f72bf99da780a8f8d357cbf3d8959f6aeaca7bf3f5b5bd10500000000000000000000000000000000025af713b18cbdb5a960371c2dd0317f4bfd0182f4bfd6b88d588b56fadc1a0398412e7e0a786c326aca8779ae384243000000000000000000000000000000000581c277053c15df8eec05c34267f62e63faeefa2d124c2b4b84d2a739ce5484641ce955fbecb901d1e8ca816690189b0000000000000000000000000000000005355dd304b9b60498a3fb1f08e1ba0c98db327365ca9a0365a7f1e5cb56aec43b7fd2b4aa104eac7b1c30b6f53cd422be285a119dc8cb32b1a0c5380af736114a32e9d1ca870abdf278dfa84444f70e0000000000000000000000000000000016b5b3a6fdeffe5b9a0244a333ada4444a2e03771f94433832a4617be696e467b4e88ed80b174809dde4242bbb51248b0000000000000000000000000000000003dee846c5b84f89734016e547c63c02e4be07dbbecc86f811e2d8d3245f91205bfc055882565371db532240da1a845900000000000000000000000000000000194d53bbfa962def4da2a9bc7129fb6242a3922fe26cc4e603528ff31393a31d03dfc3463704250ea2ffa973ad175153000000000000000000000000000000000333768faee332d7468119b9e0469bbc7bc98a482562ff2fd9aeb6d9c67daac9c3da1db41c9e12224a2eff2feee51778bc0535bd504d7b9658e459c2e79b86bf4e718baa82b8d6e624fba0eb141c7260000000000000000000000000000000001910ded86d79f9b043bb79cc4049e0652c13d0fb8db2f070d695124d7a42cc3a2238282fc8a424fcd8d9ecdab4bb6fad000000000000000000000000000000000dc8d6caf97416928d2d58466219f054c6f28f49b2bc04d8a80cd46a308bc95aaca3a8df1914ab0c7da341862fdf47400000000000000000000000000000000004380ca7b1f7ef96295589f78a1683a51bce4b2afe50bd6076ccf5d07d35e6cb2ec7f74fa35097b2c0b9fff3f4797c1100000000000000000000000000000000054f492d7442b1c0d1293277d95efe822faa7d8881b9afde20db58d6267e049b90d0c8828a6c12540f4ba1e7c9ace6d84f3fa09243c01748954d84f4deeb460f3ef78f9c34296c6a092952bc463d7284000000000000000000000000000000000bba4761eda87a304a80180c2447a1d5a52f743015ea7c728e70d6a5defe3139c80696f842da3f06586be8d506ca4bc90000000000000000000000000000000019ea930d5733f4a1ace9fa0139d412d65b2886b659770e388894592de0694d38876fcd86d14580f9b92518d5496fd44c0000000000000000000000000000000002bf5d9a36d641d1259c1b30397aeb071b88844c4cf17e3de0984129d7b4d67865157ee2f682e7cf9d968fc07ce43618000000000000000000000000000000000f9a4f29868654abafc7ba935aa22d3d010023ef5112683a037a6c69b9e89374b256b8e1329eb5ad306d9f2063c22c335d84733ccc41f71a11d61852fa336df566109c5538c2c5f5cf2af961e93797fd00000000000000000000000000000000004f194f21373f09f8cb4984169890ad3855e814a4768c84e9fc97dfc181c60114aae534a27d3eb225b2125131c754ee000000000000000000000000000000000e6f88880e9645e35806d193f5d16799d63e2f9edd8ae28df54d19875c61857b0a34819a70ba3e9c31f00b5826b0cdc200000000000000000000000000000000193293c6cfae9ae4b24519fb23469e2f8dc4eda8524ee0b00c7141587b07c8a26a29841d41cafbd24bfbea2034a9c18e0000000000000000000000000000000017433efadfe9873dea9a68177af3d5dec4a13dcf4a710422d52020d4d145e2523ec0b48acc533a1ac7068c08ae6aa28bfeeb95c32362014caedf2a9e066a775e2db0d1322edc86759faa99bd70c05b580000000000000000000000000000000011dc003f7542f6822cb872117fa658638dee2a15429aaa9dd576a7e895bc0a2160bc120558a32aab9e646354233a1afd000000000000000000000000000000000fe9ed8ba572ef7d1176176a31fa92a5ff3dc38b0183ea1e22618e3b3214ee78c53074d4c60b5056901c6f046f8210070000000000000000000000000000000006ef1c20c3bd88bd6787598dcfca52da4e5e0e7c7643af983c709b916e71fd15475da30d763ddba0899b182cbc070ca20000000000000000000000000000000001a38a2e54a44ade572ecde076038f5244f266cd99532024a377829a64c20fb2cfe1633367c74b5990febb08e776bc34edee2ea28b93b2daf4ff927991769a9c69ba16490b5676074e64f5e91fa994a60000000000000000000000000000000011ce7b2cba037e5f3ff19b36371d34e287eec807178dad4118c6d43aba68623e182aedbf911a2ae5cf3d0e690ec3ba790000000000000000000000000000000017a617453f391e6e2437d56ee831ba895084f60d1a5f342e19a242b9661c703219d90a157e1b55f005f5059c15c179dd000000000000000000000000000000000746ab134c7f4bc19583a4ea4991c7cec3f651a60582b40c17b2d18cf6e252d93d2f3c2a1a3399be70512ec9eab251de000000000000000000000000000000000698daf214f2de44ebfaa36379862bd9ffb40987dfc8e632f14738c93c8e5c3fc7be9fa9100fb5f7440311cab34fe1897a07e50c1fbf1b388e9264c762798c31fe76761508d070f06adc63130df07641000000000000000000000000000000000e4ac65ce62180ac602ad68098ee31cb747886e95a183e4f819d54af99850d70496e6952076084dc7bc2d3f7a273383100000000000000000000000000000000182c718fc9e5cc961426258e82594a5cafc36270af0eb50646d161fcc192c30d40d06647e14a282421638b31f378de940000000000000000000000000000000002bf448ebd27cb6270e1b87087796ca6534ff51ba0962f3290ee1d06dc18ed39fb736ec95632b483f44d3a9d0e45d1d50000000000000000000000000000000018b956acc1300e60b22bb936b2b52e2ae82e256f15f1415263157965179855137715c321d3765c5227dacb63ba2d6225f0056903b4508cffb6334bb5f645cb553a8cc61ea6765283f933686f172f8360000000000000000000000000000000000f5372651ffb40bf853f6f8396a7c7483c401b89b67e098ea888fde8d19e7552a006a127af1f3311203434126ffad85800000000000000000000000000000000050d7e89b21c7484cc5831885422fe7aa8e898df85cf7a3a275370623eb9660611610cdb829d3935f0d0955e0ac97506000000000000000000000000000000000f83a3f79f1dd110bdb8521e18a64490d567210801d77fa3c0c6e5cbc7285840da325cab7ab08494c8d516511eb189dd000000000000000000000000000000000f72904131be66380c5a18af4857ada7c15e88572197e100de1cfcc9fdb4306e446f2f330fefcccb41b676f24e3e0bf88031f363c8b0062b34d48f4c2e5bdba884005e52f77ac04c2f29dc7ef10fac0c0000000000000000000000000000000009ba6bbf102d390638ceb9259205a1856def2b3a4b5209eb3e4e54074347f71b6c06b70764fe85c8dfc9074067b8d00d000000000000000000000000000000000339c30631229eabc1230240942bdbcfa6e18f23bfbf88b7b8a8fa92f18e35d2f7336f0b819e875ac643b43e6d931e68000000000000000000000000000000000600cfeda6033ff51c3bf9182d22abbfbeb6db46c0fbe15ba82e72fee483744ba5a57ab2eab6f35927b4ba6d2b150063000000000000000000000000000000001530bba4db8a60bb6b7a05f72dbcd23044011d75221d114b839aaa9535400874472f94c849597174322291b5cfec4974cb146e27a9d36dc698e1982afc945af9500fc5aeba719d06d0c4e4eb245034c6000000000000000000000000000000000c636ac98557e22897fd101dc6c54d87060f460b4cf2c5a88ea14641e2a8a9395492fc5a946eebbba36dbe38f6f5c0c60000000000000000000000000000000007fe3a557aa93f2e9aef4ffc55d39a9172475e6595fd57409df3a7fe3d11558c4d3dea3396ee62f61190add83b85813d0000000000000000000000000000000015b04e0daf4a10541623e7523ac5fbe57dfff9ac17afaf4293c493c1982f3395980ec63046cb1d424c6dec91899202c10000000000000000000000000000000019617b191e9e493751b0a02511a18757330bde56722a72a29a399ace983db7114f84795e2b70bc9d670cc0095220454ed983f98fe5112a55c23591bf4e259d072f893944741d9941a00f907749e3c9990000000000000000000000000000000017472b8c1cb3ec528400649fe7c39e3908b16ed69b42d967e4d225b694544e8bc7ce5bec87019db5539f1de39dc6807a0000000000000000000000000000000012b1c4884c37037a94f84c15061df5ca6c05c5a35ad9b37e3ab8e8297c9000e715fd2bdc3f2b485e86c415bf656392a10000000000000000000000000000000002c21af2933029f04b344be76e18ce499def4a0671a97dd9b6a108d0fb23852fcdc56f882be0319978952ef04a207a6a0000000000000000000000000000000015eb31e80fb162d5fa392fada8d43648ef54d4f9ebcb0e9652dd501f55a8875a16a148d42e283ea8bb2c5a38bfcc8843a62f99ac46f986f2f29f0ad3da0310f061e691955c711850a2816ad7464614a70000000000000000000000000000000015e68e011ed063a9fd9cc8a806d8e3561e4f449526ccb6e5ce983ebc4fc49d61d26dad7db64f56ad5ab0b54fbdb76e61000000000000000000000000000000001617d7387fedcdd772a34b267a44315212d21b798c0fe1e7a9ed3caafb678910d9c9c3bd1fff4a3c8e339d0c90a865b8000000000000000000000000000000000e2b3c9b9cc10f41c4c0129d34c62d526aea47c77ded91a5ca3afa0da1801bba81def3ca66a978ebb2d1f3227ea82a9700000000000000000000000000000000096b6caf7b6f29e91bea370f91c2576c188b08b95f9df6c7df995fc9879c11cdbe2af86809468d472fcac8a89716d1d87ee01b0c9c6a6ca1fdac35d89c803bee3595f03d9d200affc5292d8a7c6720b80000000000000000000000000000000016daa86ec04f57c72395d96b6ea5d6ba7cf2d9d4a50eb90f7121545f17c1ee16216f4086481d91e59fc5ed8542baeb7e0000000000000000000000000000000017a783d60be67206241e0bcad20e371d86d47d88ba1293b73f32999b0a1646967e5d031a5b28517f035168d7c7d7927800000000000000000000000000000000058f24fbe4e9befd8abe364c961f0ca4d9083260234a939bf6103a3e8f10a8381a9e3d74af7c13f159e5c7dcf456df00000000000000000000000000000000000485c9448fe3a069eb024ec43aaf563a98da09c02c294da2a94a98a95430e25b062e8ff886fb5fca240fba1abf7cee60297fc700698c56877be6764f48a836d210bb33e99b5735da9837882269af9b45000000000000000000000000000000001230577527a0fde2e8e66b8c4d17594bdab8be1339866819c8890c600b35889d1e3a749fe15fd8182001e30e6420ca6d000000000000000000000000000000000ce03cccfa87229fa8d560884d8c7963276d79ae9873a23d550b4555cc4bda35a242dd2e70cc730b70cdf898609b3d8400000000000000000000000000000000174aab1f142fbb7a45bcdffd64c2d38b99c8919baf9651aa430bcd39613d7565196c18f0f4ee6fe05f5c40ddbcd4a67a0000000000000000000000000000000011dd23f59ca2a033ee5dfa50afb0c7ddeaec6d4f50e1866cca3f061fa03594216f005bc65b2c97ed1109c305e16222671b7ac02db15cebb8af459290c35eb5a86cf98b86d8336764c6bdda6698b49b640000000000000000000000000000000014e1cdf4f10b11f47c15d0b6b7dfccb6081d05d116c8149989cce4f1c53dfcd2d0b7443677b03d037710eba813f6f597000000000000000000000000000000000c8415c7d5508010e0db1878ca663d359525b290b2f02c61436e945145a7a4e1b3ff4e27ea1b2c8d3adbe737d8291b14000000000000000000000000000000000e424ece68003cbfaf65a54dba51e7b0942cc53b2fa9794b4deb6aef1dc1ba1719cba285f9a1a59e71a881eebffe2eb9000000000000000000000000000000001404f9a3146b7201b09c5fd678fdbf2111c48130e82cc95012e5aec1df7e64a3b3c727afee4f603e620925686e126c0f5d1a3f78a2c2ab7b85cee68ee670f50a176e988a341303afb7722917f442fab6", "Expected": "000000000000000000000000000000000e9f6bedba1f6e2a3ff33e0e4b18fbf8e77558bf42e89023df6338b03a648c591486c63c2ecc8ecbbce23b3ff9a7ae6e0000000000000000000000000000000013d2526d83b4495b5af645d5a1af7bd40bd0ebff125e0fa14f10d1c08511dc29643dcfbd25ca0bee5705a56b26c558730000000000000000000000000000000003fa442ab532094d47f1a9111c87deacb15d80ca6e76bfb5f9b9a209bfe196643351d778b0c6d6b274b4799f733abacf000000000000000000000000000000001278d51523d5d9aefc0d3783e745da54f74a88620f2161090a398defdebf82d13d5b5a21a5cd466352ab8685b034fa89", "Name": "matter_g2_multiexp_74", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000a497e74635fde8caaa5c9dfe666b1b40732e58b93a72d39c8a60c1f4b262e1f18f62229a30fb8257bf895352ac4d249000000000000000000000000000000000c1b2fcbd7f78d85c73ae55f67110b575750bec353e55761de0ff09a9f8a2d916c336655d8f6a78dfbae13fded5a9c36000000000000000000000000000000000173893333d998dd32cc3e82fd7ad8ce77003192ad2bfa1b1d2b43f9466898313276b922f9fbd8e83e86b67acfd9ad780000000000000000000000000000000004ed01b702bbafc73dc1e6846bc944be297ff08d1dfef397603294c7fe11668cd0670d386a8fa0f0f02c52d47f54a11b34aaf86eb77ce03f1d8eacab84d5ff98a565fd33a9a2c40f2a19d7c041a7e2a6000000000000000000000000000000000b5ec74a2150dcf5ebe09f39234c4dfec623318889d92b0bc1f197a69650bc48d28a1112306be763176b691c6915dc7c00000000000000000000000000000000028db19af73ffdd0111dabf9c7d6879cc7389320a249f108b41be8b1d4c259d5889dbcbb48b30a288e26cd9926682d1900000000000000000000000000000000172fe526c62f9cae49e6d3284170e6339d5af256441590cae9507c61f987eb495d340500cb761896163cb8ec631434690000000000000000000000000000000013bbfcf9cd3167b47b48af5f5ed7e6d45a5fa38192756c9e140eb89a85c75602814f767c57108cfa2f726e71f31548f808ab2065f1d2278caece0939cbbab4bcbe3eacdc80cfae6e4500a5195883de0000000000000000000000000000000000052d7a0f93142b36489cfa21d76c0eb96904a3ddd946a53b8a6730036d88d30336fd8aae3ab29ebf62a48c6e849ca66200000000000000000000000000000000198350abe8cc91bd675f26516d771422c128d5dc0af844c6c1af07bf04a1d3ad9654cbddf2de5b7828d1446c45e7828b00000000000000000000000000000000198f35692d5face8dda4b464ff48d650145242852fe189748783b1a2e48806294368ae0a99481bfe739fb4962f3b86a4000000000000000000000000000000000e3cf2e018a7e0acfee25bc3a82cb282cb377bbd72ce3044dd20e109d948f68720c27aea3d4663ee45b2de6f178a00ac58c69b55bac97a633f3ed7816e77e2a26cccc029f7e7429c86145ca4645eb41500000000000000000000000000000000150e6b03a3052d043da6514bf4ee09baf1a35b2a909473db33ea0bd4c6af7d7aee9a8366c1d08d2adc5998635eb0dfb0000000000000000000000000000000001370c2976b0d36fcb955e797087e6ccffc851d2450cd63833d6cbf52e1fccbbbbf9dc695ee45c7df01c2828051bcd79700000000000000000000000000000000048b5fad2fe0af7ccdf675328d8ff5e63b564d8436d04c55b23b6ab7d2aedbd25d614d1780963fcd03d569bed2085bae00000000000000000000000000000000141f94b4e7ba542707d0c3cb69f8dd79e499602952be2374cead840dc669c5ac57089c5fd60c44291703b872098fa2daae7faf23e841bd53683521cb3cf215577fa51f0f751714b6aafe5c740f66208c000000000000000000000000000000000eec51e0ddb8cf9914304e7766a7418e2854ca71367c1d2b3875c12b7dc5c7cc2fbc136037bb7ff72458027104ed3f270000000000000000000000000000000009fe5e8d1918f9b5865a8b97c2c2cfc8bd750a0ccbe2942070827a09d8e41ca795a86b2262b10462795f833c73e788ec000000000000000000000000000000000b95c9146f3f560ad880ca905b5f297e48905680b4613e91f393f72ddb042f6a6201628fb5f75fc23f2298cde66a6df5000000000000000000000000000000000a29a8fba7644ac96d77ee73a93dae23b03d81a57f6cd8cb4594b23571cc1f658f163081ae50d72e09c6513d1cd2c8bf72022cdd6d942158bad47a53a9b0c3be910a41036874975724a5cdd22c012871000000000000000000000000000000001807dd8d2bb40a642fef693739b1df12fc787db0f031306f31970d0f59f0c97c0894afc34b9a9913726a20dcb7d5191200000000000000000000000000000000096fe8bb5e911c1ed9985ac08d864c7020367f4259a0d074973a26cc421a44e8034a7007f6d1639285cf8acb8b2d64a60000000000000000000000000000000014026d43eceb26b9ab5bdd4139d4f94349b273e43f27737f9ad26d23454cdb1d35ea793d21f057359d28328a82d5290b0000000000000000000000000000000003dda2a84bd1f92524a8ede9f5e81f0f64b41b24510f4e0b8146496a776d5b509968f188c12c2d66cf755e5000cddb3b800ae0b956e38bc34cce55bb7e88f1370a30fc8ed0e3f1126c68c30792a2cabc00000000000000000000000000000000011246ad07713d1916c662679ab757c053e33def437d7a976533f0ce80ff6ffc259489c26524ea96898c3747c4127539000000000000000000000000000000000acf66265811a57e47a4c98b40b12a37c6f439550b18215fcf856c167b7218397d7d559f852fb45077945a5074f460be0000000000000000000000000000000009badf2799f1c43a2e3859123aca91e894f86d6298a06a9127249100ba270f2bdc79cf511691bf2d7faa45ffa17490eb00000000000000000000000000000000069438b1d53efcc4277ea7b41cbd28a19f80b5380136f62121e766bd2845e13d5cb40b2f15d508414876ddde491a3830a57c3322133d6ffac661c888995e7cb067ca1309f3e9178a266f1a410a79c01300000000000000000000000000000000112c4cc34da9e83207b5ea8a9251ac5f004546596f2294b3fd51b77ad8d8e98239d53ec4f527c7280801233175500b1b0000000000000000000000000000000011dd8627748c9a2b08524f88e560cd3944bfd1fa17e1d6e2e9cd025b04f2e3ed35125197136afa2848d24fb5fd19508900000000000000000000000000000000093219f9ffbfdaa60c5965b45a5d5bd923eb5d3971542ac147de3f591a5fbe31b30704a0061a524e2ddd05a45dfcb6a10000000000000000000000000000000006407dffb5580790e250a72dfe68a488431f61f45ec9df279217b8800f0ac1ab585d84e486487d5688735fe5aae75bacebe67f3d067b0d011abb31588d1b2fa9fdf8a56bc46b1a0196e926d4ec73040500000000000000000000000000000000107ede23f8e4f273ac2647fc251008905966dde32339c023f1da3c4d35d483a55b54f4157a303e68e1dd7fa3f3b14c8d000000000000000000000000000000001739327f282812fbcbeccb12e40df049284562d8986b8d4559787e1d5247eb6c83d6b838d099f36d8d0e32da2a7999a10000000000000000000000000000000005e5b6b2baede3ceae776da5adf075c1d774e83d6129ccfe7e835862686bb4064b187cc0be0cbfed37e5cc039f3a3fb6000000000000000000000000000000000249554dcfa53f73ef8f08daabf20c55301f75c8ce095cd794061c55e195221602a54ba54260980bcdb35685e41d0f4ffa1d6d0d1876a67337d66c596fbcd7eb22ee308e4a5f66cedff584f1441be6a700000000000000000000000000000000048b7fc5a71787231f1c7ed2134be528fc8d8f77102bda806ccbadf4f9bed79ee94b43c0fd3e5b1d776fe73d786872d1000000000000000000000000000000000152a1f005a64e16949d7249c3b391d5c1e0ded4893d0ce926cc666f0f88b64e8dd6ec4f92ddda18127ec24cad7e40b40000000000000000000000000000000013a2e1e7958a53307adf3beb32a88b7c493df0e37e074c9105da3c09bbaa01fed092fce2b1800790c6e8af3d30ec5a81000000000000000000000000000000000e2d405806764c75122c1b5e410673b28759f26af7489cfa6f35c6c0dd16c508af045009853f3329cda4a67948232bcef0c4ac919efdf3d0e649126da7f8ca3daa30b6ca6f3be6854c0f447a63cf2110000000000000000000000000000000000a71d61dbb3ae37230a2dceb54061d5f8c1ce645e20ec39785c229cf79aefe238959b2745e3b50e4b3c20c7a8e2ae27f0000000000000000000000000000000010e82b8dd5faed6bbd5755c4e5a88edbb3511d3f4442d1e44b82cf72a6414bf6558d29e8907b07f71c00f537637605bb000000000000000000000000000000000d8c93f1984b742b5a02777b706970215c7d8eeeb7377cc26c3af9005648c2eaea7f7a3177b6e049b132ef6bb4b188da0000000000000000000000000000000000ff082a252082499d70eaeba6d5514fc8d641404b48b2ecb256eeb40d9c6b68ad5af58556c9dcfc5667621c549b8ee760d8bf380bc2223efc779a747c0a36f8c2b18c3e821e96163bae14b18f3739f9000000000000000000000000000000000f4cf354b8de6dd2231448bb235af3c84daac2db49abed345da6ded50eae93982a4f2c27b07ce725a062b07fdd9058fe00000000000000000000000000000000076cf19408f0f0379c7e65a6675b9856782990986f5c6d7002e9c9c74b95ab875924bd7ad5e4812844f6d1f530e58deb0000000000000000000000000000000007acffe32f96f5e56557965e3db8dce87eb7140d93608cc003bf4a43fb261bb7360c576da0b7c4dccdbdd9cc53b5c5f8000000000000000000000000000000000eba1c668fd9323d42d6a82d9f075cec2d278cc57122e25ccd72cf8b5a569552cc6b0e9f88d23b9b7af18f3bfa0cc820006c3a7b5ae971e4b0ec34a1007a02cf8c55f067115ba00c5967f70a7dcef9d60000000000000000000000000000000006157cb6e2dfa2733d4c489ec0334f0303ff1ad410f329cb59f99a5fa3ed2cf84eb7d2f231078ba5db0954badb58425f0000000000000000000000000000000003dfee394f4c140e2cad61e8675b26f91244880d9a0b6798d6111090dc9d080563db5c89b7293dcaadc74ea5849a08aa0000000000000000000000000000000001aa1e0683014d5b6f99f469a0b7beefaf05a7ac0298bd1a3e2da409f6cf856f70bc067610fd705a851cd70054df9562000000000000000000000000000000001571b129f69f3a6717272ff75351fa053f46294f68ba3f859208d6c91ba5eb9a0f2133a5e139d04e38c7f7aa303451768f29e330b48230de23e0393bf1614cd26685cafb899db5a164497955d3e98be4000000000000000000000000000000000c4e84b7c8e46daea67c8090b27dc28b7867b89b92f56232bfd8ecd9968b865a057957292e79c6dc08162f9e91e6a4b2000000000000000000000000000000000b8d1eadcf3f1de6ee608a4a0ebb7defeeaf4e251bf07717a6a8e50c07223ca32a2ef290f26d0de14b1942e02acba39a000000000000000000000000000000000e901b546a4d3c68e4432f376c97f42ecf0724777956c4ffb1e6ca4fda562e57be788ecfa45ba3afadb439c2ea546ff30000000000000000000000000000000007ffe01da4fbda9fe5d47c3bedb4b92fdd71ad73fa272b071a7a7d1cdce7743a535da7dfe05a43d03368eb97fff54b2d861ffae8f62572938925593f7271a56e0f559b56bf97c454c38547a2185e2ce70000000000000000000000000000000008da0fe413e31ca68f84032f23bdd5399e01eb3b5ae47033c6834a39645d7b5cc2ec937067b91ac6d83035a86fa841f9000000000000000000000000000000000b950b982323f747782d9065dddca5332940058a604829e31560a6bf9b03ec72b09cfb87a1cd244ec694c7cf192c37ac000000000000000000000000000000000f4afddd25eac15d2248c71d76c9aa27323f75141820efeef1ab4f5003141053f138d9a7d1a901961d0f2c210ade27ed000000000000000000000000000000000217b1800c53d53459b00b8e463df1882b2cbafe85043f08093a5414e58ea7fd4dd933c601acfd7c154d0e4ce187468a2dd907071c2d39fe710215d174452459cc31d36007a1b5570a27ca2e42c8be55000000000000000000000000000000000046aed1acd19201553bb6a88fd6a6c0525ed44822d2a4ed3bca48a0a2b75e76cfcdced8f342b81ce03ffa72e667b3bf0000000000000000000000000000000009a5adbac43cca3402db016a2138342fae89285ab1fa16d7acaa9c3ee2b4e3df2641f7392355996bef7b1578ce1ef119000000000000000000000000000000000c8ebbcbdf2ac3fbb553a2e589f4b7c259a1621b83b14fd1927f92d9f6cb27e82507d7943ff5930f0c14b9fc38c9857900000000000000000000000000000000105b729f678db31d04ceae0aa37f9cb0b0319c4da9a1a4702a11bfe3a5f2f1f2af09b9cbd5ded5a930e2e65f4279a31699893c06db2dab559f2c374df4298707dc1815e55034dce920ae7b1df2ec8d23", "Expected": "000000000000000000000000000000000708e9b926f2536731b02b6b75305c549da58e312d9c53701a993624697af2f3469af34dd4634467f8c98a0f721cd9c00000000000000000000000000000000019185b84fc0511a048e3c39bc10334c91dc1052d323a31c8bf325479a2fa3e4228f8260c0e725c2b89d5a0319e6fbed70000000000000000000000000000000013c7c441d5cca81b48d43e908d6a3bf8b5057cf19e4884227cefa9b235103b46edbe01bada06bb9b620ebbd016d537630000000000000000000000000000000000431182c8a1eed66073956fe5798a894be396403c072e766cdc262b719d1779f960f4aebf61c1bcd4d005d3c7413e52", "Name": "matter_g2_multiexp_75", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000199f555aa5c651183f52470e36cde438422f41c9b2d1947510665254b74ba0bb9cdc6e6a1283b0c8f58d8f009eec46900000000000000000000000000000000018f1d8f22f43b4649300aa23ac92a2e8f17e7e3853b912bbc8e90588125c371084cb224c2d54dcecb4946ff6db53cd02000000000000000000000000000000000efed0bcc83a52f0faf9e260815da8d4e5286396081268485aab052a96af8eea0112be6cce1486b10b60551ad6c810780000000000000000000000000000000013a3b1ca3b9b7d50083c10d36997f5f521d4426af8d2905aa5d074ff37e218a0c96c74387485c2dae24c0842b7a74cf0d8555388bcc6791802ddb6c0f4cde44f45ac0b5d7ecd918bc34fb9fdedb65b94000000000000000000000000000000000efc5a5c506e94ad2754e235e2da866d9c46342f14d518f12510c93f13a619f6bfefec50c146d6d6170f190497eff229000000000000000000000000000000000fb91f34356005f38c9804250549554cfe67ce195d5e218e4e1b1a4fb904257bdb68d6dfb013e8e85fb5a4cbdbf0f21a000000000000000000000000000000000f09903db4c41fe3f11c6f0cdb7c31a131033e30f52cb66ba10c2e7da1ed8a225ef280d313630121701f9a490e8a0f5c0000000000000000000000000000000003484f7e8f7d67ce40b4cccef110bc255d91f61a4e1968a9ad37e25058eeaf39e9f1ff89c9b2e515388a7c1b49a84a2c33e5999498978d14c9de06f7beb2fd870f6f16dc42125fa496606e65c7466c0f000000000000000000000000000000000444215c3d4a7d62201ea1b69890e2ab90b5f5c6ff56fdc9908634c7489e785521b8dcd7ed409cf09c585cae8414a3250000000000000000000000000000000002d70674251a0c9ba76b8bf3b70547da77cde5592da9204954abd6d8aec82799cc0fa4fcd42139357043fc867b3d0e0d0000000000000000000000000000000018c57fafbad2351a3da695f8b523443e8c763dd7ab875caaa6a494a498cc40b1c0d44488e2dc80d1f0bce00a2c90c67000000000000000000000000000000000125d5a87ee3f558b5e1e7664b0cb95c195bcebd5e43b930fb47d15eee4fd50b3fdd0a401c9bb011c326acc77645440137894a51dcfe5a8fa4da1745a696c870b353fb03a31238b8744840a78084bde480000000000000000000000000000000018790123ce8b3b72d626493a16936c47770a9b06ca45b17c6fa5c7759f088cf98de8ce7b3b5d6082e9e42b39acf76f79000000000000000000000000000000000fea86cad8b40f315d8378550f6d3d831149339a8e8dafa77295859ddd2417e8f5c0ae2baad25fcfe00de14f45a537170000000000000000000000000000000014ad78bb2bce966d52b1fe1a273bc07f2f24b354465edef6dbb1e0123c7c3d7550983b3793ff1c7db846e88eddbf33c4000000000000000000000000000000000c0daa6fba40ec59f6b34d413130df5d9137297d1b7b71b83114a6570fef8e7f83d6f5689527164782f92da4b1ea12e8fb6a294589c816e18859cec34262df6490a2af6acc7daa3de861198c5bcf4b13000000000000000000000000000000001186b7c78952e5c32a9393eab07ad4532471595bc2c5d8137c61dd7fe6b6ca3aaba82dc205a559bdc15421a001b7270d0000000000000000000000000000000012d56b6fcec3d6511d2d723601cb8c9faabdcdd12efdd0e2bfd7c9292f2c3bd7f39c6e9aa53e6955727f88ad69c5b4f10000000000000000000000000000000006a5e56e4a42b04c03619c78232104f1f1f39e755058a19354eb230f2f09bf486b2586817aa6b88f27b884957ea0226600000000000000000000000000000000118c8521dd4866df907ecb252d9ce7a489f17d0f240d054a5dbff6c35895ef20b205236aa6e5be6f0825f9df87878ab783c4a3460caa35fc0e7342dd2da5c7b6aae818eeaf5a2cbf4794387180b95dfa00000000000000000000000000000000092809d18926c20456857826491f55cec17803e9e7d43f22faf4da18ede3bda15e3319539017ab20ed1de2bff490a33f0000000000000000000000000000000018d736b967eca64234f4e0018e5d6c902608e265037d9b8ba42dcc923b84ac62599e153e1c7d00e552ecc5aac57d1a5d000000000000000000000000000000001804aee99219354d4a5c46328f0658a417c85c6bc89af6db29a4911c4b0cad5638fac5ca61cc997fef3450cfb4a6c666000000000000000000000000000000000bf99dc4a400adda5bc89762e9011dae8ada23b284e52e2d49f75f1c75247f6282c95a36f7a72f896ea308131215404bd2b65c1580bb46e3a4cd9d9c4eb7dc998168c66982448abf3a4e08cd12f612b1000000000000000000000000000000000604f8bde85c0b26894e0de155cf896c911bca47533362a0b59ccdad0dd64108d33af8262d3ca2ca399306723f2482a8000000000000000000000000000000000ec10d3777aa54cd0cfd84b4062092ca3ac840a24e8e8aaad5f4c275e4d45091f838ae522efb1b2a0fa42229157297d300000000000000000000000000000000132cc70638d02186116773b31ec0e571a55c1cd78ec055fc647ab09cf4d3c543e0552d559b3daa4e99cef031e583e61500000000000000000000000000000000194a6a32a269692906b64feef9e4e8cd204e560b98db8c66380758d2123babae871273b4c571a1570a317c13a51d0fe9120892aded230949b83bfb2dbac054b83a9dbb852bd0ad85dd1d7f715852306f0000000000000000000000000000000016d05912dfff44912bf34f242ac85eb55bbb8a21625d45496c76d057f518352528c6632d6e8adbbccdd5983d13c26953000000000000000000000000000000000b10aa1402c15fd601ce605ade8f25531ea8f95cf592bf4ed86c4a3aa847dc8aa2369655ce5348da30a897fa8d71ffd800000000000000000000000000000000183f5a2f40da0a0f4598c6b9ea7b99f8cda1d85cec0e6da5365d7eaad1e9a3167bd647e5e654985f395ea72257f61e5d0000000000000000000000000000000014e615e2d5072c1b536ffa607f3a826ce297800b0da329fff397b6327800ecdc879e91f1e3ebc26c18e188e1ca66bfd66af9777a58539e5aa8b1fce0994e0e1cdb5877d93ed4db715c5aaf74d6a8bb1a000000000000000000000000000000000f3cd275d72a637bcce855e2e20727c6e5a1f15bc8d799231d3a7f61311d4cd2f58cf38448675aee9910c1a3d0b576210000000000000000000000000000000019efca445312f568727948c803d06b8d4e2c5289015740f2626fedbc0047d344aead06ef521ff7e139312fa41d1c107200000000000000000000000000000000141384e1c9f79e38bbb0bc1025c079741b93f56e150df58cf9a61ec27c2877c4188866fa197242965e3feb47a78c68380000000000000000000000000000000010638286faa6c45cf028e8e3d200edcb348560e2e35902927391401b3155240b62a40784db88e02b874e128e3a2132b5f37e2ed8e96921a0f9bff8b43d432b382d7b59938e269c381351ea49b8c1ba2b000000000000000000000000000000000c7fc4216767ed298206bc142862c138d78726e2d39afa18fe5732616c73a965d95cd2032d4b2f5a4d562be48ba6885a000000000000000000000000000000000928bbbd76b87f58ecc850e1aa4a2be11b15a81786aa7ca8cf0f6cc342db87b66c435f009f88ad97b747400fbcc651e10000000000000000000000000000000019f5ae9f06f2bc27a39bafacc7f3745fcdf8c78c9ae8a3c066ffd704aa4117eba773691ae43387b93e86d2e2de3688700000000000000000000000000000000014360a7ed73c05ef5fe651321f7e839c920bbc1896636143b88357cbf76e15da839bc7e1f1e629768d447c9d313cec8e23f4a77a2c34a370a9b59ab1cfad77212e433464d0195f0d2fd20c69141389f50000000000000000000000000000000000b9d955f9d28f9485d0bc4a961f0acbf09ee5fef38ccd81a2c73cf87a461ff1bf28d4dd1e0db3ea522299af67bff93b000000000000000000000000000000000889061e71866001b0760f68e20c7c0c033d782e6e6752f11502a0e8b6b70277a985dd13dd83424d1e5cdb9eb96a01c0000000000000000000000000000000000e05a26686667f44de2bef53c36c82f1fdda13dd3f7f8fe1fb026273dc4dfad18241d732ccb757e2b46ed8317dc69fad00000000000000000000000000000000038b55685b02231905dd9a62a709c0f015cf5650b3fa469462b3e9d06e3af8092d998c8e08ee61db1fd5583b0809a38996c59b0bc6dbf66f42cfee34413cc4cbdae7a61e232757c75474818591764d6f0000000000000000000000000000000006649a8eabb25fb7793344a0b29325a88294343f6c69612ee9d9002154a49791f6cd7b37b2bec69fa8ce11722e9f8a03000000000000000000000000000000000e10f2f3de16fce9b9817085f0130e1839d9aae949170ec16834732a9b12f589a2b00f17d2fd3416ddd020b7421ca20500000000000000000000000000000000016b51112b3c7c42a8c2a0fa7f286ec05cd07b6cea5675bf1132de99cf42b450b3c2a8f02ec821529a14a2a0fac3a751000000000000000000000000000000000f471ec8b65bde22e003500d1d422dd0d163abb424dd261fac588333755cc5124acde328085d8df852c61e024155564781c180924f1d982bf4b6a2bb1cac590cdfe84198fdecd87364e163dd988f9b1c000000000000000000000000000000000ec162d22b6516c309efb6a4577c5631a5807bebddc5fd1be5446e4a64785d49eed80eba2e89cfefe484ecb8d50440a600000000000000000000000000000000070c252caf6c56018af6b281b829a4fb8dbab850ba0446d233dcd4d87bebac00e3e5070bd41898dd561526498b153199000000000000000000000000000000000a0d76d1205c1f520d82c85bac4473ea7cf5f68022d95b1f04d06062197973001234d86921e70a94e478eea85264f14a0000000000000000000000000000000014c6a07f0d568f2103ccf8f61278e916458820bcb61fd91479b0dee874fe36c063a34bcb14ee434b68681d297637b5bfe44748b9eb1f44b5fb143cc8deaad23047bc5ecb8059705e7905c37625d5e2d3000000000000000000000000000000000aabac129385d145243c3a1f357ccc963ff14867ad039827488128ac639dc62fba82ace66f889b47d8eac39802bc1af900000000000000000000000000000000062bbbe8c72cd6f8626484bac159b7e28c6c8c3261edc6a05a30c308cc9e56db17eb58f62ab755f04a5c87e58c04c7550000000000000000000000000000000011a4a439d18501142350229778f67bbe0c9b948229dcecf70a8b09d1df6c54801a111c603301da2377d4198d09dd51e70000000000000000000000000000000017de3d9bc6fc5f415d04ecec013a635fa200699c496f4d0bdb5cea7d446274dddd0a7f6b06058fde43fc4f1457361558ae04d7723b7c9cb0574ba744bfed8f8a347ab740bdab99136aa71a6d635d0d98000000000000000000000000000000000c86590a02fb5c9568af4e69611f09980cb5a7e040c94ecdbe64e40005783fd3305a5657a5c6bebca7d20ee123a872b4000000000000000000000000000000000bc873a9bc694171d2606f4efa409897e03198a61b1bb16ae90f0d12345d2650d93c46e0c22b717e2f0504b8983515990000000000000000000000000000000001df9160ac3bc54c0121a9c69e9065f4266202f755c961bcb8641d13720b82ebd73eb3804ba44769fb2d75144442f1c400000000000000000000000000000000045e9c8ed2fe1e5c9a2a5bda75dd60f6bb5dcd0a805f68c1f662a5960b025ff29c8e21857d2a61bcd65c747d2a2da8ef6a794685a342ff25dd706e4df725e3466889d8f08a27ed2f32523b117f01a84e000000000000000000000000000000000f94df8d267339bb4f51b21014ca6d685f7657d0f0bca189e53cf19e0e5e05bfad773c0553daafd80c86f302b1907ba5000000000000000000000000000000000d92905addc028a1dfdad50e909c77662e10e4689e7c8a4a0174a3e1c746b361665b65e17fce02b6c067a5b8d7a6a6f500000000000000000000000000000000183444f0665790c48bd3c07545115a11f82463a092774234e7b33aac1094761f213235895e5e61ac1b0a15603bffe2140000000000000000000000000000000003cc2cbbf181fb023a5f6088d8a9793b17984b3dddc8c3ef1a9f82f8f436002610df60b2d35be212da9945bc8108c0bced3f23c51953e46d400802dde46c374178ef379d5c1b04d25449891f0d5623e5", "Expected": "0000000000000000000000000000000011f85691799cb76213068ef4f997af66c349bf707295b969d85fe637d4eabf54f3f29e739152aba5027c1b55317a27210000000000000000000000000000000019627f9570f07f44f326b5b3ee19bc477e92d813be2865e00da93135645e02e6fe5507ac4d50085b02149667794609fd0000000000000000000000000000000018fdc97bf0f88b2348b436d70ac4e28b5ee5ba21e21e94808b8b9e401c0c7d688974fe203ebda0b23abe38018876f4930000000000000000000000000000000019e28c9c936ea5a0b3b41871c3afaaabd53a93902e44a96dcb7651bce7e6143d81cb695fea8b94aa32c09ec030dd9ac4", "Name": "matter_g2_multiexp_76", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000703481cf48efe78fe8dad34184edd1765a1d01846de74a45b43d4721bf1af116c229f969868b0e6e851f22bdfb0451300000000000000000000000000000000063d316d495b1e82380c5b73bd61ce7f2159e7714c50e374e8a91dd56731dbe03a3378bf8afeccaba5fda73b4c2dd166000000000000000000000000000000001012cb2f6578065c93aeb673f447ce95fb42927ef9d12e07968ec04b6a604d785944620043dee5de4de33d59e67d64f20000000000000000000000000000000018cc7cfc360801ecc420d77ee171fb3eac3be0cf26b3f36a6cfb7c6adae7bb74c18071daed8fc56b8fa639ea138267928c8e071da1ae8f615631759cf33fdb876ab289a6bcfa6fba2693a58f8601dfd10000000000000000000000000000000011e0dfc437a65c6fe37bb9e554b5138f68a3c52816807bdf7d98f13cfaf86b37e9669f4e0db1b7865d910a309f16cc200000000000000000000000000000000006f2323e01591a7db1d3c7fa1a2ce4540cbe0396cc55baa3a3e13650a6f6b926a7cde0eebb45d359edd52137152fe360000000000000000000000000000000000066bfec8df4ab5f5f5eb369b34e8e22fe32abfc00ac58b68f2d3841248fe5843d6d29ad012249fb9ee851e40b940dc2000000000000000000000000000000000f4ea977d9249bc05dafb682a863ed17f7fba0a06c4a13cdf5a836748664183272eed96bc4109bc5beff61c5469e221f8371fff9230243d2e6cb6bdc4cd97260a8cf0362d18b9ba8df512d2a6f5563dc000000000000000000000000000000000fa3e3e77112774fd6d6b560ff88cc92ef8d009675d0ed65705398ce727cfe786684da50bcdfaffae97d19bdaddd81c00000000000000000000000000000000019e98284b8b9f53faf3b73902cc322dd80fc330dcaff2a7fceb55db6a4b0f7f667297f5e4650c797ee337985dc6b54310000000000000000000000000000000004e30acf2ba66d842575c8679caec607fd090f0aa2350464f3b6eef22e2b9a1d9d5fabb0f3909f1c19f6b8f27c53b040000000000000000000000000000000000ad76b86e32f84ad74bac68909da0c271571606e071b13bd92e387a8a16a1c4002c5a5e94ecaa1e8d2d6e051e19a45c763016c9a9cfbf336ebda090d3f2a1a1b265787e1917f0148f82a9c0b66b21dc100000000000000000000000000000000019bd07479b234bba974ca2f39b317d5f4be33afef66c1d69e53c44cb5e44c679775ba141f82486424110d186561777f00000000000000000000000000000000130002de0d453abe9052a5f70a9d55de74939d1c8e6ad5871a669a867861b1359322eb98539f4a21597d806aeca62d18000000000000000000000000000000000b2f0c649fdb37216c10762f510c3bb4c789dbd29c4f9a8ff39f74ed1a96609c60473a50f5ce3f6535e4af0f2f0a150c000000000000000000000000000000000893b9af710787361a32fbd19c380161c9a214a1bcf3761563424b8546f6068ba650d9caff3e42be63ebf4b6afa2de516c9f679167d5fbb29250834c9f65d3025606e2af20aedec309718f95ba01e90c00000000000000000000000000000000019805c0de5e232632228e2772dc79712e3d863bd6fe56932b29ee99870d2ce5eaf90c73632d1dcddc093e9b6b5b0f1d000000000000000000000000000000000405d77f4b3c44f99a956ef375879e62df033aa408127e0fee013b74675a8c7d999c6abd30f459693086bfdb326d67af00000000000000000000000000000000110f2c231998aca3d76e40055a05feb37eba76cdd10106719f2300f57906424d7eb6d9f85115b78b7371ee60e26d02b5000000000000000000000000000000000593a4721a67caa7cbbe1566611a1d48532c68adcdbb67f362c9ec21e08aaddf6b5e09a9a96df9a89bc25f11665f3a36aaa3300f5a2fafab132f5f4662c1d288210e7502ca2472d060aeea6f2eab2d7100000000000000000000000000000000151758f1921743d116f1c4adfc09cb68b3ff911329e2f6d6bcd04beb9c109568c796f328e1f04381a995fe89aebbc49c000000000000000000000000000000001388c73b1db46bdbe70540c99db46b730e157a23afea97648d73f9d5f7e8b073ed665eed9e9e2500152c87715f1c4d4c000000000000000000000000000000000284ad228867ed14ade5a327ed951ca50c87f0a669e59b7a75d17feb54bc5d685245448a912590179db1e84f1eed1e5b0000000000000000000000000000000017d3da7c167733dd88f1c39315e47cc80c3310cc431989d4cc50ddb22e9fa481c5dc02d94dbf806c4c8da16ba5b24905f6608f7c036c8fdc335601ac55e869215eb4e626f52bae813d45b827df2afd490000000000000000000000000000000016064871cb68f748939a839800afbb018fd5836914a2b76c51818e764628a76817c7ea329e6b2f9de653c8162a2a2e0c00000000000000000000000000000000082fa03cda4c617a780caaecd7c859c5251b56b61f70fb3ea8c05b4c11c030adb8a96d715c1325ef3dce9b20e8065b6700000000000000000000000000000000174a245baedb7e1bf1368212620b850151be41ebb00c977d85da499223c207ab6f1a1d94a51aa9e90d07764ec3615b3a000000000000000000000000000000000df5b81cf4b008480775ff3d7644f546a60382e92a98b03deaa4a20f831e69e14a893ffa731c4ae9ee237d747149a9080cd68c59b1371c7063dee5732182961be90b95247511a5b564d7eee8d2c7c64700000000000000000000000000000000019d36b8dae5e1083e687743f7494b7f9dd0923024df81e2f83c78743e227ffce588a16630201b9909daa6c9207b5f430000000000000000000000000000000015659059cfee7850e1cf0e49abeef2fe5837cd128742e62de20dc734f1bba343aee1c9f1a59d920a0519995561891fdc00000000000000000000000000000000102b7221257c40d9adabd0db3ec9f6348487187ea1110773fcb2ac5ce210dfed167a4d15e605e9d9e666fd092147a1c7000000000000000000000000000000001402ff9770d27d2d82efa6abe4a181e3c1d944e97a06f670d9e46b24f9900fb4a838b32e17482f25be9b6f3240870c02ea52329555d9b79eb1fd6d186df80b25245ba9225553f402cfa6037592f0b10f0000000000000000000000000000000001745ea52686f87a39fa42ddb5b0f69368db3757394fa7a1a93eb20c398c26415c8a7edeec7334df5b15345d6174126b0000000000000000000000000000000012b580e6fd228f087c7584cd95826e56d1c074cf16c35286c45d2067a362529d241c1e24fd22cc9727d423551de1a1f700000000000000000000000000000000104b46c42a706c61610f8c0434894c7cb9ef878cd0234f8aec0825cbb8297bed3de349e7f6037dd19a159103ca7753390000000000000000000000000000000010b781b3cbe6f415af15e37be7c60dc6703e6e79618cb3d8d9a5ea3b17c00822aef1eddacad66a646c009dac887bb070caf39f2a517d432d1653c37fd9a6c4a8a811107dae428f4b2af3b12e4b6acea30000000000000000000000000000000004b172c360fca555e65860c7a294960f506b562e012ddebad5803bc3f4b93159c16cedb73f339def9cd1beaa0912c93c000000000000000000000000000000000242e37775a042ccf59e99da667c67fc49e80e54a1b438a74fe306d668059ab4dc7d9e457adb45e1f91b3e6bef0a130f00000000000000000000000000000000186eb83ce3abe66b8760dcc0d375eb783d175b0b2f36cc08793d8a86cf76b7618b826f50c6b02ed586394abe4efec2f1000000000000000000000000000000000bf780324df1cc5de325a796f1fde367eb52dac76c0632915dfcaf01f5acd6ae890dbfc2e505bafeba7fed8fd63018c2ff0bad6dae80d5f47dd8c208fef0f3046cf1040112d18c596eeb934762977cdc000000000000000000000000000000001231b52c8a081add6e5c250caeb9467335933c2ed66826e4ab44561eda9259acf926f22ad0df8e8756aa51279d12bc9600000000000000000000000000000000051c46bb04d3e035d324de681c772e4561cecc6a5bc4ef0a0cea56618e09b3f39f5085e208229e50164bcdcd4abdefd2000000000000000000000000000000000ad7ee610398935a02c3a7139185409d7fd4681ebb74a239e15d1c092ea913016d3f585d8224cb1d109ac111660a94aa000000000000000000000000000000000903bb16efb052b99e9c46f3478b4acf800a173b35b0079d7728fc25c9415c8b05ad520f31e6a3c867245f64355cbc080d0c40e5d422685c5c83716380eed82392ae1dc6074a7edb5759fa34a61db2d0000000000000000000000000000000001788efb21597aaac29b7bcb9ad6cecb89267c757cfcd8893c32fb13c0f3e1af7fcccb9573dcffe8d9220292b7861cac90000000000000000000000000000000015f85d3686148ad62d7fecb71920981117cb8759ab249d0ceb45f9e4687914536a1eb16ccd0e185d1352a8d2b4a8ee7a0000000000000000000000000000000015d8ed94c0415ee0f7c9854841bac5821253bb2ed4d86a61f494cbfbd61614983e4279fb17802ca68aba4a0302ec1d8a000000000000000000000000000000000f950a4c8aa18f4605e1252c367dba1e170ad00376a8560c2fccfa7d5487b0d1d5885cec16a0a17d81b5a584d473853f7e93a16a443d5f981a02f0b6866536dadd276abc0998bedd76b168ebc8e31b82000000000000000000000000000000000da25ed9154121205ab6843f603a38a6892887d2725f16ff87a5218586c6139188f46da5a42b5e05982468e8115713ce0000000000000000000000000000000013c13ffbed4a60bcb8659013b022012ef3a4400f506d65aff7ffb1bd5a9a5e030a298e417cc1ec8ee7ebc06455dbe61b00000000000000000000000000000000132d83bd141c434326d4772de7f8772c30a6456de7adee7de66a04bece4c0d20bae5526c8eca5af5ef2eebd72c90d54d00000000000000000000000000000000131355c5e359081dc86e0b15c8aedb4f2016b41e8428051f5132258eaf4392fdb63a91452dc56aca20b7ad3263ebc8c92a1d13a64c03585715908744481c79f340b5bdcdd88d685ab8b91722ee7ab7190000000000000000000000000000000012dbe1327162e4176b4988cec23df0c1b0075d0dc51ea8afbbf98f00891511d9023cf7538c5705d59b6d6ddcc90b101d00000000000000000000000000000000036c12c7f7627b6d6fcba9a303248c38d784a3d1d0ff02e550565efbab68c5116e9a88faaaf09bc72bcc3358e9dad0ee000000000000000000000000000000001578ffb68cf12dc9a5ae6fb5d822324cec9e3f576ce08d45e24fec9203d36a6461c5b8ea6ac50233e8893b07ea6e71e00000000000000000000000000000000015cdb43c82b20b8ab270b942b9e625ada9283962a7ce95eae156aa4355e1123ff87ddb1cc85b2a94bf36102ccbec33fb2bc6979fa2e386abec058683c6d74de31af3cac21283cd5e4244d7edd94da9600000000000000000000000000000000017041e16975850e6445c7b4896955eb5eab383ad3c3031aef04e8fdfb65a6d52c9e647330bfbb0f0eab630c9f9ef7a12000000000000000000000000000000000b62757ccfb913ac4264692053f766e142697f598a3fe26e998119b63a3abc7fee03db32a8af36aa21181fe9ea89d12c0000000000000000000000000000000006bbb842a889d7ff3c1eb5e0b16e3a921a11d28a251c488a8a17a29edd93672fd15974a7e972a34c47283c583cf2d29b000000000000000000000000000000000e94e685fb1751f8720b8af79aec7b245ae8daa195f11f485f2c0c5dd68cf39eef848a402ce2342a6b3398cc7879c6010f1937936cc3766184e47f39acfe5af4497e8edf77ab34083135a9ced61d25ed00000000000000000000000000000000100d3fee47ae6c8c7981c8cc615870924fbcb34c2ed817d6862e2e6d0b4612222a4c8332c7d51b58ec59df6832139e1d0000000000000000000000000000000017270fa71c34ec84043ef64c5dfd61614b5b3bd99204f9f70994d71498219818a5f16843c67c668b06aa5ad3a6ba8a0a00000000000000000000000000000000057948c0ebd14664bf33fb282e200fa0e641764a353e8347586465dab0c79ca2caffbdc2c6d60b2d7c8cb6b088bd16fc0000000000000000000000000000000012747eb070f2de18f517648395109bc08b4af3f04d98e23eb6b516199b4eefc5df7d57baec736987139c7b03b573941f639a8b60a1849c71688a11e612b315439161717f525b5deabbce75808470166e", "Expected": "00000000000000000000000000000000128c6c0283ea35c10330502d6aa849a909df6b8dd927a24f08072135b8e21e40c495c42e742160363772569189d73ef40000000000000000000000000000000016d78dba1e0feeab46f8cd38681a9c2f6490ecc3a6e79b31caead256611d133090a4eaed9691a87b66dd1c2ee50d5f470000000000000000000000000000000016de93e176c950975abcbc692384996315a98065db6d6a6214472e5a338e291b36abbcdea1b8be6162fe578acd669abf000000000000000000000000000000000d7155e239e9b15ab64a538b0a0bd53936df4ebdc3ec9b0b1d494e4df780bd014425759e9743c9b262cf48cda01e945a", "Name": "matter_g2_multiexp_77", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000a653e0c24eee1cdf8e3652809de0cd159f2c541981a4f43936e7d41c0f97ffe2f1e1e0d1032f0970023f1d27241a16a0000000000000000000000000000000012d1d8d2f96db0e5f97be096c961e3b90ef3d88492fb756894979d2e8104791a5b9a43888043ce9e543691f15d2fdb650000000000000000000000000000000006ffb94dc3c2d07830498260ebe4641b2cb64df61cebfffaf2d4ab5b6ba92cd75de209e8d7915ee744c4db5352ff239d0000000000000000000000000000000011f25722cf9db77ef8adb9caa250175e12412e6350b494395a86c31e1f5dee6c89cc6603f1dfd08a70344cdc44aa0c2df3efcda934ec9d2ab05f25d618e5a483e830d0452a88e980589fcd7cfc39e5d80000000000000000000000000000000006177a74e3551770e7d906222590108bae7b97a5dd3bdd2344fc12e7005f2c1a188ab9dffe68f5ffb0cc36294106f15800000000000000000000000000000000041b140c46868767119a6ebb58562570732198854c92bcc070f2a8d9be91282a70c5ab99e75cc9e5064ed628aa5c59de000000000000000000000000000000000f318ee33fccf455e46add44922bb6e99afd4354bbc79d7550f8d12d3de4f75e5ddf4e62624b116f91aaa80a148adaf9000000000000000000000000000000000fe012bf88e152eb62c0c906dccba469abe591687573a59d3debe747b7d895e4b0755f16e67fa9193a2fd338c04d243a4507a696cc57c0bc49fb4d1686752c71c9c816d7d09bd66910b23810d475aa02000000000000000000000000000000000b26c6e0106d4efbacf2dd0d15df17209b1306f388f493c096429c031bc4a6a535b64cb02b400433f948fd6004df2fa200000000000000000000000000000000061853cf1a32fdf4c370cd413754ea584d3722a08d58575075a7371e57a7bdef95386ed72f91c4893377f6b551dd6b1d000000000000000000000000000000000ebf17e60718c8563a1029ba035dbbba75e7191b4339d5d33f64bb35f34866081f26f4815e01b02e8330e7b7e9c428cd0000000000000000000000000000000008ce40f92efb5c5be48c814018fbbe45f1be45f5b607a6600cecd50d8f791de7d91939ab61204c2a1337c3f21b2c9d26518c1259f23de4cecd5e3a40abef5662b497ebaf16240f40ecd651d2ba50af0700000000000000000000000000000000123ef52cc44f36326b33234ab3348893bc722bac3674e43385b201f372fe4ea3569d69d4d561e26f8ea903e017d7376a0000000000000000000000000000000005b1707ef61ff9acb9e8b4dd6922daaaa2d8a7558cb55b1b9b96eb6d57c23f50a7955763c9b5ef04f52b09be8d55f4b50000000000000000000000000000000015b6e35d14da61e7a7fcbcb0dddaf0071d8d2d89f7179f44851947a2b9b0535d6fa86b5cae9713a73bbed909a4c6deaa0000000000000000000000000000000013463e135b1fd460cf042dcd0226e229d60cc2beccd8a1832df241e65a644159722a14297c0033eb499e5890f0caff1e5561616c195ccc1345421d8a6efec48f0a4dc8e89ee89599839efaf95c386551000000000000000000000000000000000fbdf4a533d355e232723fbc97352fc5d7d3d199934883a61a9ea116830bdf9e40d423256225d9a3458134332ef6e817000000000000000000000000000000001195f0ad227941c5e383c48f546be34762d158e6cee585650b6ee987f7b98e802f678abac6646832b30b6e12e90948cb000000000000000000000000000000001820d5fbb5a62140c6e8cd105a70fc2f1ed84e254c839deadae5eadbb75e1c33a07ad12ee92900f55478e91958a3147a0000000000000000000000000000000013849bdcae33fad27f16e91c6d46b9678a00491e3d70a8db905db4b1d2c6f02a29392b5b77c1472052d6f4d49f14a16737c77734125181c72454bb2d37c3725cf1f9b6d6f42b721bca469fec154b3e2600000000000000000000000000000000188fe1e394b567d71099fa13b5c8a5891636d83b6b8a08f410b080658a0663deaae4dca1afe8b9023b5e8e573c752c92000000000000000000000000000000000f66c65dab8e1b2912fd5285a4c87821888532f5107075cdfedacc4d7f75c6a74b4828d0b4c3a2c0ed94576654a7047d0000000000000000000000000000000016af44a6df79c8c9b6f1d8aeca24e024c454d7b94c9ed386858dd35c4158cddcad1207f9fc3ac9e3b748c2314f875dac000000000000000000000000000000000315e5e4f78e9fcb93aac78025e95b8bf82ce4c840cf565e0a868b0aac22950d62f7becbf8039a16ca3ea66a7498327d981483aa66e04351f4340fd2b461165b9a9983e91c148da78d3c8e0c69e77de4000000000000000000000000000000000f9a61dd1b3034b8cd7408b0a44c8d02f4fe0e87778d5d34f5e884ccc9e2d51eca6b6060b46b66843e8247b3c794e19d0000000000000000000000000000000005c47fa7799a0fffcafbbe4694dfe8d0f47b60f712d6319e9a56ac459a636460e700e2af80f9c688208978aec7c413af000000000000000000000000000000000ab1c55fe2207865ecf12e372a341c776d24c08dba10702fce1cd2c01eda314852d81d0ccf1c3423c2a12e8960677f060000000000000000000000000000000014f8a1964aa3240d788ea40bb51abc50fae2736a34120ca9585fb2d5bba4e5cfa201c83be1e00ecd1c46fcb2ebb4eb809913da6f756005ca8ab900ab686484483af07df768209a16d807f8b88b9334d30000000000000000000000000000000006441fcaf5e68b10e7e511a95e56b9613453ec6468bb126c5eb12f204c9681c69b5c296320f92a6fbb0b848f8ab5fcd1000000000000000000000000000000000141de16aeca0a2f991e9fca4b6ce8fbab3d66ee3ee4dffb0124384a7d4ba51864a53e005fd34516c92ecab33165944a0000000000000000000000000000000008543656b5495bdb726109cd98fa18e405648fa88cbe2e5fea5380b7d0ecb207f0343dc7888b9945e55156977336226b000000000000000000000000000000000b53d4e392f304225b1ef363a3528daca1d3a6ad64ee99d58491863ea432a29cde5edd4f390de45a567cf32112ca5929188fb33fb359f21bc5bdfc85d39676c2ca0a1e619bf8a8e8de62da8818bd6cfe0000000000000000000000000000000002e0c55a43078df575efb2c99b27c5632dd1c08bf28b6c0558081a78de58e4258d1b57d94ec6fa157add04aee06e7b6e0000000000000000000000000000000006d3f4f0791431a56fb386f4bb8e6744cd19b10bd0f2e65e927371ab488d3735e3b83400ddb25ef9d740a8620821b0ab0000000000000000000000000000000011e9cdfec8a8f8eba0de6809485911711149ca0ebd0cecc033e2e5ddfc195fa7de671a686edd2f56e5f7da7328dfbec000000000000000000000000000000000171f188afd5d9568cc5648aefb65cd715c0293344b9aceac1031f10b4a1e4b9fa2ab11114bd58f28aaa58c10ee0eeac65525ab4c4468a2ec0beecdb7fb072f28260ebb3d9da1a4c274b2c11a087e814a000000000000000000000000000000001651d9bddf61e5e54f86609c2479513ae84b000ad7defd840d9619a8361922dde81c999d0e95d8a3044c46fe0360c2030000000000000000000000000000000014a68c248808e826a3bb50f3c1c1438483cbb9da8dd67a0c9633a47f733e6aa7deb4a13aaebcd50de6e8e8f00000424a0000000000000000000000000000000010c8a94b9e0ec9965f6c8bd0c4279102ab682a14fc3c22e9640d68f240ccecfead9a2c6e69f7c8ed369cce7e2da50d5000000000000000000000000000000000181493e8137fcfae203e1b45189fb828dc9eb56887c89aaf9aad0380fffada423f0ab48ed068ba4e67a2b01a16abbfe55ab5a55a5cfc49cf6c36b5718e108f8d006bf7fa1ec3dc7a7f9c02a2d1e3fc57000000000000000000000000000000000e3e33fa4d85a35e8707419ca6d4fb6a61ee6b07ce152adfbaf6b5f1d7ccc253b59f91e4545848b3570bfaa804ad9767000000000000000000000000000000000c923a4de074dce3ccc94698bf6445af5847c0e6f22f225c589f744ec83ed0810913af2a6d04bd55200ffc738b31b01200000000000000000000000000000000186961ed1c6039476eb6f13bf1b5f6627b3b017ece57a4a5f33db8ef12347fd507398a421932d3d2a1d009f65d06e42c0000000000000000000000000000000011e10ae0139f95a2f1144810894fb98f6e5e86ce67877b949a2a7134c446dfe53c23dfbfd12919b24975f26eafa249216ce7aa7dcd01c1b7059ad3cc0ebf5d19ceaae633160a968c33aac5dc6adb942800000000000000000000000000000000029265ecf3c81aab289c98d9cdb917749ceef56e2e4d59de2d6c83907f394ddd1cce9d093a20206c2c1c215493c41c49000000000000000000000000000000000986ad139381e4dbabd6beba179600e1c782f436f84a7bd58cdd96a22269f1d937f88f25059214fe2a781ac519aa621d0000000000000000000000000000000019e296d5b17f78b3ffbdaa2ef5228fa9dd65abdf6b2c5b0f99a708c4721797b3b156b8df98a5a879f17f095548555da7000000000000000000000000000000000349677d4719445d5525cd65e2338463d232eb75721ca51c48fe52d0fbd299ddbd6cbc12546f056bf212d5700c3c4100854bce63dcdc0cf408b43690abbbbdacda5f3ebd9d9e462f89f9f50a9f7bd44b0000000000000000000000000000000016f5d5eb3fc3ff178843a7d21d3dd628bda120321ae44206d88f07ac001651428e0da95d3f0676e1bbb969a300406ce000000000000000000000000000000000029121c539ef1d7b9888497a362fda2f8402adf10a1bee11b53cf3dfcc6f99d5026bc386f86a2eecd0c276494878104f000000000000000000000000000000001320a402922f2a0bb287464854be6782046dd9dae4c0cd94efcb8ad8e0f37b7889bc97a3c8b4d3b3670a6924c8ee23ec00000000000000000000000000000000101fa8bb2c90b755bfba9cd7a98790b7bea2ede4c806fbd9f2006d10cf87c44172d4ba46ea40fb75afbbaa2abc3b6e9d7603824b834a83c1c408243b51cd2c2d31e2ee763d69e2ad6d369bb6aa2396fd0000000000000000000000000000000003285cb099b04b6acd333c7ac76c839b6c09388792d5fa1f2af0821e49dfbf40a06803c4cca92512bb76d073129a48a00000000000000000000000000000000005b2fdbb25381b3b67814bf6cc0a4cc17271416d16ee369b723b1711d968c355b755183f0bce519709723250515ba32a0000000000000000000000000000000002c7062ba4f642b95e028a364b0698b801f48af3c336fa09d13d83ec6cff10d210b55b23cad1d999889c83df7d1ab7e10000000000000000000000000000000012cdfdc10bf46097083294259754453e084010f7ee928cf540d44c80aa4f601247223a318700bc24114e7603922d15ae923c86e91c48582f19409b962be361da5936db02b6862eefc288f9a32d5f54760000000000000000000000000000000000669d760352e34a407aef8e141fcaa9468257b12ec08ec218f49f0769f3acd5068c6dc9d251a1b2af02a2d091f8ad0000000000000000000000000000000000064a7b4026ee3115cb730e56c4b9bf3e1527dd0f0ac6015f43d30a2f3d8d8c2659cf50247e70ca3c93d7e0a404d9faaa000000000000000000000000000000000979ca2e81663ed61486c1f841c19d83549388d798da72feda82283406d4964bc9991f876a6032382c35b605441ee7da0000000000000000000000000000000008d92cf77b44c516c243f3e6a8a8d3f9d3d7405820ab972338f700de1dd9a66d33b4a70540a30f630aa81fe1cb5bf057e1b3071b561a80aaaadb5cc24b348a2b6012340d3aebcca7e2f56983a8a13bf900000000000000000000000000000000198831a40fec54a210a63f5e00b132bb1eca6408335b85a75e28be6a111beea3b99d9f2fe5091ab0eba0f082c201c14d000000000000000000000000000000000fe457f8d215f390000efbb7fe7193ba02a2ef78e9bff6539995f01604fdca9fa3c010276afb90215890f5a5df3ae21500000000000000000000000000000000076771823180422495d89c301443a9d1fa141716e5e27205b8cb6b461a3ded7e6f196c3976cd6ad56b2e6ebb6b3a70860000000000000000000000000000000007f666efc677f6f767828e1291bde0ba0ca445ddb2d69d5d2fa090ca49e697ce4e00f55d2b706454be6d68f012d76efbb6863b755d3dee61328a60f585531c436663bbeab9afaffac49b6f0b57614eaa", "Expected": "000000000000000000000000000000000e1268a5e2f654c4038647a910e6cb4bab1d6ca3562ad4a9ac18444c8b8a3fdfbd35acf37f9203041fd587a5175ce86d0000000000000000000000000000000005e701a8ddd15ecb0231b7625f7868c81467c140b2617e60440a9b348a192e5248b1b3c087545cfb6d173fafe48d32f600000000000000000000000000000000071327f52b1325bb664d32c513fb12afb96dd8da23dd91bc4c3e8ae5f97d6bf673a5d03bb8bdeb6da3144dedac200dbd000000000000000000000000000000001852b86d3ef45aaeb691f454a345ed61104cecf0f444e4d841f2bc0402ea1291ef056eddb3fc3929ef4623f31016c3b5", "Name": "matter_g2_multiexp_78", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000fcd3f253d018ef09a7c6e8f36662ab4190867a197e0c42a0b425dfb5fe61d57596ada28dde0b093676ce15d03406d20000000000000000000000000000000000df00598337060d603607f3b8dd16f277ce1882a2e9ced48e1944662323efc29b33c807653f31583a5d2198426019ba70000000000000000000000000000000009876c81a76986435d34c6d44d51cf1016c19ceed2432ef1e68decd64da2e31e42372c1a41a514b0eac0ac103ab6f43800000000000000000000000000000000121cf298ff8f610c64ca4a887c52cbe940333506ef2afecffe266b5b585ff737395e2c64adc23b5bd232250e67c7a62613ca0cfc742607bee58988df361d7cd5d809ba4fddb209c898cd555369fff566000000000000000000000000000000001885d5cdc3e0e0c8cffa7519e6914e5d85962d07633970c4174ae4587853f13970a1f5d7ccba97458b9b5046847ad29800000000000000000000000000000000105b7c0ba96d5ce32d7447351ded3e3f491a0e741e921447b91f22a23b64c2d749055a0593e5b47f0ff7815e1a4c9943000000000000000000000000000000000cb88fc10c94642ae7e1d7275bbfd51a2d40e9b29f3d51a1ceda577beeb131eae4b17418f9f358d47b4b9c9ca4960a3b00000000000000000000000000000000131a3e080b1d4e936d97d255b07b09a6210b5fe6900da87b5cc595a72de2b6ddb01809e2dc63ad460a2926dd8d3b3b2ebcca8ab454fbc576a2b910f140b23c23b14301c19e1f47989d78eeecf279862a00000000000000000000000000000000066b31c0bc4b3b9fe420dc095d551903a2859556d86e210c96480f1d31d449d85ea292e2432babdb71c151c7b215cd6b0000000000000000000000000000000019d79a60793957745077f9233aee7a4f096515eefa7c49473f09bbc73fa0ee13a2a30a08bd7f3bc1d5c412d671fc37ff00000000000000000000000000000000006882160e4fa8ae2c2d48ae389d8f023e2775adb7a815edeba13728b8f6b343c45788c8e9116445e9989e01eb43e1500000000000000000000000000000000000ce53ab2d81ebaf4a85b3e12a6175ad7fb6cfbae207a69a0fe2195ab916fcb582b097f09d9fc565b837925f68855c4b59f82ceeb6160d3256228d7a41fb3caa6f305b23142ab979e728356a13309e27000000000000000000000000000000000a30d335c035afe459dc262fb1bd24dc0bafbc08fae0bed47e4e204280eb96595fada9c4332df1218748921bfb1274c7000000000000000000000000000000000e37eb189560211d6fe56faa3b6e710878a21907fdc1a9f8becabca290c24b8831e28ebb48d06bd822300fd09b4d103100000000000000000000000000000000104842b88b9df6a7b8243494eb11eb62c89d1ccbde9f55fe221c2366d6bc9149178f177628c6fe7c7661318640295e570000000000000000000000000000000011df8599d72b85ade11261076e02c036be5dfa3b6fab4ff72ed7413a879c0a0742be6c36a32d0829a4e3171b0341c6a3995f7d2038ad02deddca34399e5b5653fa471d998c52bd52241840cdb9202b2c0000000000000000000000000000000019f6634435be45b099cc739fe5c2dfa01f61fd2d466d5ea464053e2d5acf2e0e9448b1bb7770b5ad426f8a872c5764400000000000000000000000000000000002bbd52efecb10b3bb6f8bd04a5751042d8598cc34e2837184cea2b5953ec125dee871d1f2f57ebc84849e3a7ee5abe2000000000000000000000000000000001962b716342df9c13c21d89ab5b8c4c0ca191440fa709627e0f240a7ba518f4c95adfc5973b6ed0af591bb54bd00937f00000000000000000000000000000000089eec676276c52bfbb2593ef0362c12a5f3c1a0566d5aa862f5f5ba1580f4dadb36c15fdcf0c3910ee14487ff146c8997b67e68bfe2d7fc256e6aa610dd91dc1b02c64186d24702ad8fa9f715b582a5000000000000000000000000000000001556d081a489eba4fbb0c20e22b8cab432a9f6ff459ab9b0e7ceacbbd46c8e24a2ee70151b019a1b4bfe47d934afede30000000000000000000000000000000008fdd7391113e8d9865ef48b60acf921b17c50744e6ad62fa24abaae54836b3d59a7441371bdfdcdb251d252a43aed7b000000000000000000000000000000000cc66cdb1fe32beb91b05922f3920060e7a95467381d62f2f036e6268af4128c9516780ea53e873993744ce932b901f100000000000000000000000000000000151f94dec958859ecaeb810c4b1cc7a707d0e1671cd4a1e3c811910bc8b95c6c944167dd280c7fed22f92ce7650beef998115b9f84e3ed6947bd6f0e3c65361cf360a65bc059515da852a72ec5cd178100000000000000000000000000000000004f88568c7ede48d7476175f1d2e7ded4312c24934f0d47794705621f8aa8a5072b86cc41e187f4aeeb49bff17a4c9d000000000000000000000000000000000ca6c579e86a68b4041150fbbc36da744d359028993681c34e66c537eb8a0a0d55aeb9b8da7fecb844104dabeb507805000000000000000000000000000000000fec63c57d3d3ca98cd1735b2f59217e163ca53b07b4fabc4415b98377d87e75f0fcc9b51c99a57ff61ca8d0016a206d000000000000000000000000000000000940e9f93f3ccbe74c7be93236a2c440b213a014ed51cb57fa053495c3d6f6c8edc08ba8e10be26e5faa898162d67fe327370e1037b709015e0bf178a41ac55774a813368e11ef7a764eb48abe75dbf500000000000000000000000000000000055e4dd9da22201b5eb64e3b9eff2eab614c48450424491a85c18e05f50659b88e862490edd11ff980b06696b60c35b00000000000000000000000000000000018fab38f58d3d541666bc29b9e94cb3940f1794b2aa851d079b9aaa1cf742b07cd6dc7c985c7e4d7d3fe683bb15d618e000000000000000000000000000000000534de5e1c1181e951b437fd17993e995fd4aa2f6b28fc3612cd4db615de742e12d66c03b9ced538c1c7cde27752c190000000000000000000000000000000000aa8580f1da71f2ae9ec26f3b6466813a40ba5bd3f89ed0d42695d420032540194617fcc2f13e36219fc0cc3886a69c36bf5fb297948e0ddc60ba26e49ef2892ca008e64a22ff2bb21ff70c56112f710000000000000000000000000000000001804ed7677fa3842bdc3eba708bf4fb7f7d4eaf2f1a46193c861595f64196398622df4358b9526f33663138b24fef1310000000000000000000000000000000011fdd7e1d0c5adfbbbaa69ce63c7c54525091289e4dfdfb3de772a8d5a958581cc23933deadcb8856540e2d0dc564dbc0000000000000000000000000000000013fcf17235506fb194e3adaab881c7aba4b87e5aef739e0547b858410e3cdbff0dab1980b1b30a7d03d617179ae545c900000000000000000000000000000000004eed0ca479cc458231ff969ebdd4e33732953e9f5610d78d4753b99c5f8cf73c742387b8e71b9be074fcc67acd71cf6b488b6b63cb8bf34efeedd9f95dff4d3d8c067c0d807bd1e20bd267748275d0000000000000000000000000000000001082b7796d35e387df689bcdda6e0316d343dc907822d1a873adea050374962b164ed27cea0e1b834997f8274e4c5438000000000000000000000000000000000b1905979a90c7a61f4ee2cf3a9f4d6ed4c724c9e216981b8ec34fb9b528018d237771ad620020efc2c3cb104df667cd000000000000000000000000000000000752663e72390108288ef4de3c3ea409c74e7051505b12083c41a2e8937eaadbd8cd61f96f7991722226fdd02dd8d252000000000000000000000000000000000f8e4eb7a3c78b8040a115c42b5d2fc69405f8334e948b8553f444dfef29bf3920892da431cd8394cf61f24e356e95694f661845e91de1c09f581c7612a25bfa0889f77c2add31b493b37d20bcce11070000000000000000000000000000000010884516bb9916084709351ed8768c6105fa451e08d5acb233511254ddbf4e72baf9c43b56b4d7dd129a38f5b34ee5f0000000000000000000000000000000000228fc5fffef746419cc69abb17cdc63ded44892b8c5d02f0c72bc8506a61d15a74ec4ea0e1d78f555ddec07f418539500000000000000000000000000000000048a4192c204b7441e871076d91d4f610c347c2d71cf495ffcb2e2ab808a8c1a549eae96e657d756d9a3b94db2892a2f0000000000000000000000000000000017a94d2472df89104ed96e24d166f922bb852b5ad80f80188fce65b08d39cc3ecf94991c6bec5dc12f9337e7c087db2f8b3bf8d5e529912b1b6e445f592a6d151c6f5d01d3b021a31a2669df4ce02aa3000000000000000000000000000000000f6293fb0e19ec85f43a1a02df9f59ad4fb0e49b16a216ce097b8ec59e781fdf176360d8492e8b77674ae2c0ddb1da70000000000000000000000000000000000e354d09aad68fce6cde40c787ba1e4488999d5b9f3fec25c9994b56bcccaaa746c958bd16ba271485f461b0d4e983200000000000000000000000000000000014fca0851b0bfdf2c69fb346f23b46135d2b7914bb49e297a0c1304d8c2851ff6bd0a0bb364938dd44680fe86cfe12e300000000000000000000000000000000164e23a53103dfa332e5ae09c7c898b95773c20f019d8b794a6b49594040e2e090db6a8047c943885dca95188e89a63b30e1c8f222019b877e66df0b6201b5bfc5b6c10aae340c55e74410a536ffb9b200000000000000000000000000000000146d37241ce4f71017e4423dd0bf907a12c1364ae9fc6dfe535c25e5e99e03ce157cbba2675829b396a69f92668107280000000000000000000000000000000000d5a992f5357615f436d95fa516212812f6811dd1f1921ba4129e84e3d487b6c97520995d8a65f6771dbba9d150c7ab0000000000000000000000000000000007b01f86574a9cb7eb3b9a19b6040055a5c11b13e7071078d16b9ad71f714ed28ad25db9511964b156ee34db22385cdf00000000000000000000000000000000154c29c6e2b21a75b14159b183e625c98a04be1850b22d314225e94b313619f641ead73130c1d6feb85abd8c9e172f6323a258d66f2296fa1c71065cf23c994eb8c6c35d35120d16790fec791ad215fe00000000000000000000000000000000075be2703b8416fa07a7cb6ae8841dcab1e36b0ea24231dba617a2fed3bebf8d952d31f68c149dd17eed136fe37b01880000000000000000000000000000000001156563f1401b731cc23c4be59e69b0e6a0827df4889cd9ef9e11310f679c1603a0d9c9679c29b8dab75ae51f49bfe3000000000000000000000000000000000663faacfaa92fbc095a5dd6b1f2dd141e248f84eff1716ee71bdffd4d28ef1f4c88828e3457e8ebf0daba1416d2d6070000000000000000000000000000000018f2871f5897aad9ff6ac45a9c0e78be8f312f07af5f1dab2bc4705558070abf367f1782af896288a7754da82bf1a5141ef4055b85f37b548dac2b64608d99ca293548bebe1e24355393520c34eda60a0000000000000000000000000000000001618a284286899f501f46c4761c93b68bc8ab3157144e4013e242e1678cba20a2d978ab53b4b43145dd6062748df541000000000000000000000000000000000c25da737368775e41ddcd9c64cf99a824afacb1d404f1ef46ec7fe4ffd89673648c5207551914e6e0d12c57e7d7682c00000000000000000000000000000000097ff49c4872e2da1f6c24fd6dd4667f0bef4eb30fc197d13e8b66adc425e39841dea011d79e4d775106a19ea1978f4c00000000000000000000000000000000147426b7d9b0bdc2be051d8f6cc4249014e1bbc2369bc32eca94684483f50ced2c07be6a320effddcc1ed5cae455fc92212529248c51c95b5b26961f27e6d44ef1c2b9233bb2ed32c3eee79ca6c6eb750000000000000000000000000000000000cf68f7ab056c4689af95b361ee3e3b1c1c48f18b5aa655cce1a2be217010814b3f07dedf6f9a7b835cb13e2afd7136000000000000000000000000000000000dd6d0fb94048dab34410dba4e682f020ed54a655099fbb6f6e94a31511960f0447d7e94143eea88195291b225d11246000000000000000000000000000000001864c6ad3f2f794239a179647d68734e23b3520b79952bda20acf2f5afe1b76bc18e35b852d35a5cf3b02a3ce86f640700000000000000000000000000000000015ea24562d7bc59d813b77b2a4943f9e98842b5a41c0c7026077a02ddfd3d5fecf352d4399f507fb12ada4ac495ddece9888dd839d9b8c236394c44d358f452a4588ae65d24ffe2bd345fc745de9d37", "Expected": "00000000000000000000000000000000080f0e50f90e001a442965ba7900997fcc89246742590b99add6d90428d3b61516664654bc8fb423f701e85a342a668100000000000000000000000000000000003fa9e84ddd754047649b7cfcf5bd78852abb298b3bbe6575c4c7dbc2e7595499a9f42f379a2463aa74f29e5c73a9040000000000000000000000000000000009e72d3c418726f6400b8cd8b9b649005f3b25ade40cd6f77a0c3cbdbef461e917d4453c9e07ded45301d21df4ec44db0000000000000000000000000000000015a06cac223217602ccfba4f4586cb184994bf08b324bf977dbb3884c394aed0622da7dcf5712970554d73b18e2733c5", "Name": "matter_g2_multiexp_79", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000007340f432a5cd5aff1a1d98c6ea1c94be24de2d15a4e112925586c30979e23a5db93643308d3299e370b1f26bdd09eac00000000000000000000000000000000155027caae88381a60af71b2fa770e58efccfbb7642f5ef6b1591bf77e415eb117ab564aff8d9ebcd576f813b793ad2c000000000000000000000000000000000f604238d1b28f010ce8e45f2fe61d3ea20b902a4debbabcd54ce0ecd44a9540fe2bfe847178656fef0a5fd7e6d012b3000000000000000000000000000000000d7f503ede395dfa5682aadedc98bfe28d3fbfb52f42ecabc9eebc0e0a6616d3671604709f28255f50b62bee641d2711f812322dc2a7d5faa9e4877638faf8492d84e0f4c4c65ca3aadcb7eafed2106400000000000000000000000000000000176e1f9eac4dab0d253c0ff41b7600437b53a5ac5278d544a9620648e0bc4dc56aff0bda973fd1338f77fa174d8b13b90000000000000000000000000000000012919a18343cc166e2dfb92ff07bbf838779ef0479985bb85b3b82f9d0632b3f7a19d387f725a21729a77c58dd4d1d1d0000000000000000000000000000000017eb269ed75fe0403021ce70505bb60a711c91c551931605bb2a0773fafa07aeb47cdda382c0aa64f40f5e6e0e6bc77d000000000000000000000000000000000bed8ca999a4691646124a140fcc17dec02b74bd28b599c807abcaaff13bff65aff3892897652cd33b4ba5e4cc0198a9c1f6d538c5b4ae15c84581f8fd4c61160ed395816557fde197e1a013ba41ba0f000000000000000000000000000000001344d6902f5fdbb59a4c975847db0191beac284eb17cd92360e59f42cd7796cf2aa282bbd4cb074c4ee10b489ee3f2f60000000000000000000000000000000002158eb3429d0532792532fcceecc404e95a879be68b3685ae94016ca3762438b3320553ab6d5fbda3a0b615a04d996f00000000000000000000000000000000118f6fd8f60edf7088a0b4b49338bfcfc9c38be230460d7516f317b27c07600f504c8cc87acb0c95515c3acdc1b125ce0000000000000000000000000000000014eb422d44ec6931ac9860a6a017a907e8ed76de91bb7557e818dbacb19fb51457a1f45cca91f1d1d75a3567a3375b5cf2f6a4713eb692f7667fba2a3dc35363c3ba163519d95757daddefae11a95853000000000000000000000000000000000f2c72c53fdb1b0cd13a1f20407c64c46e4a0e461778b0e2d48c4f20be7c655c639b38f758fa9199b8395f706df10e7a0000000000000000000000000000000016e6c75cdfbc20c5dbc2dbd1caa66be92911264d407ce3c689ef3ae1dca44dffacb4c0d8a78ac959e47ac5c454f607bc0000000000000000000000000000000011c5d80d52e864b0a46fb48488f497fb85f51ac040c77b1d01336860b972858c0a6e59914112f6cd6c1612c604d26f56000000000000000000000000000000001136aa7eb63d6f85d665d0539975a9a51a9a3f5bd8731910c32130b1ec8b07c39eb42e4f61e7d22bed933d9fce1810581022e50c3fe7b2a65aab79de6d9e47c457d197e145592dd0611b1dc39941513b000000000000000000000000000000001306612f5119d33f177b8804443d14d04c8e059e28f63aa10ac6a1b25975327f378d5d24f0236e05849f07e99af93ae20000000000000000000000000000000017340f8887292264d498f84fce4af83573aa6cf1d57d99d364f2b84e1734fa4f9a1e07ddc81a2135ad5f5e0ed2989585000000000000000000000000000000000f65073250019ea69339379aacbeae7520c1ae10c8912ff827b702bdab2e15404cfc939389587364d811054b7d9f2b350000000000000000000000000000000019742f83ba0c9d36aa1d595fcedc3cdfa6c6f08579e66b8956fb32ac03530114ed4266738c57175e7a10313c8dd42deab80011c7a4aa905d4db6d4f6ae46eac9eb8bb18613d4ac5e5567990d7e8fdd96000000000000000000000000000000000b2513f906db531d052e8e6f1cb8d7d3c41c7ec3158b370268d1de204ed8fe7618b64ae35029d1718153b5bdb8439dd90000000000000000000000000000000001664c367a2d4170f463c90351cb321608e2a49fca6f3258bf10d32c39747084cf9d2c38d5241888aaad97985cb09a450000000000000000000000000000000014de15b86461cda9f1be69f43a9ceadfe7b7d1548a206f3237d93c7c01ee554c4245fb73827ed0ab72b99a62215faeae000000000000000000000000000000000b25e458522be9fbdde4554b1a0d9af157aeb7d3ec1f89185b193c0429125dafa554d7a531ef9502d443a26112b940b8f397789685a736375ead2312874174795586e12b230669a90d072fa636128c7d0000000000000000000000000000000006862c0b0e3d7bc4507bea1df82080745aff21b7549b372085776be2f88aedd4cff00ab8258aa21e63340963bd0d937b0000000000000000000000000000000017199c5ec3a2dbc1f1e8d74648cf8da247e35cb07df22629b3845274d29e473819a31bc344f2a2bd6c790530cfcc0126000000000000000000000000000000000e7fd1ff41d86a02014229c5085c886988dfaddcb60f5c7c81063e8289aba846337d61bdde57e276fe6c65bdfb48751f0000000000000000000000000000000010efa6aaf7650edb0c74d30125e36cb67cffd1c7f57932d92ab4aaf36f8d9245d7c75dc2b3bc8f3f328589b16e26230e28e325fea39d61269c576626984f85ea43cd683b08c3ce111aac0005adda39c5000000000000000000000000000000000935de4b16f5f9c0accee77b5820cf36c24aad9953d40a2409b7e6040f09f85da7d2252843f9f8005316146caae539800000000000000000000000000000000008a8c542111951b32bb0b50f7631f8938d22e298193edffefa3e0f5c861ac8205ea9b865f9420ad74cd22b37c5cb56200000000000000000000000000000000012ddd660879a1f52ae6284e14f2ae6ea381ff3f321458cb76bfa566b04ae19f3793468d0aab652a82671be74332a3b7a0000000000000000000000000000000005eb148c35732f7ababc73861b71fe4ea5e25bcdd675e975fadd0a9e0fc54e175b2e39dcf0323f4a9802a68baecd25df3cfd9bc41303803a0b4edd121b818a126bece309dfee4133aa5314cb8a91d08d000000000000000000000000000000000bc351eebfd3f3c332268055af1655c8729cea44eaae803607198cf747280adc0d3dedba137828834af3e7179ccff4c3000000000000000000000000000000000d8a6cca17e1c6ceace7c0ab1333ba76ed6c3b114bf99ff80127c6a17eb0585bf6fcce871deb7385e9a8896a21c065ba0000000000000000000000000000000013222db97e31e28946adecda10c9ccc9aa9fce33e0aca51d6483d2f0c5bc3f33994ad516215f8333e22167164ef5459500000000000000000000000000000000144d3707b1898d35c65ae2c89b1570971a9494e8bd23df835f565059554eb7b5cb66a6eec890058316aef43d6c6ff55c8e08fed30e422868f37c422d1efdcc93912d55b0a731479af863dca4705e0c5000000000000000000000000000000000138da93a9a4948d41a6fc6d057a217faf5efad863b45ae8eab311360c033362213edb0ff90bad6c95f60b8e1131336e6000000000000000000000000000000000f41766d9b57b3210d315a2b8f90aabe591c1de6037ec79c0d72a283f0ac3094436bb97b82b7ad12ff4f471a41227bb50000000000000000000000000000000009aa4f5b674782b7adce6bf75ad676480f96a58d68dd7ef8d1fa488cfab794f06e7754e9315430189eed265913db8b300000000000000000000000000000000004e2a4a48f02079c0ed50c1daa91b1216af481a982c7aa64d8ba90449ed886cdeddd0cc08f1f8764f7f8c5988fe677f5674ecdf795b48d62f0db0f9cce057fe570d15c78f2eb7a77b66e4895a45804880000000000000000000000000000000019c927bbffd96aeb9342666e1974d30f9dc215e8eca41c24244c63c106331ddad20d64c79faf8c5baa45cd30b561e167000000000000000000000000000000000523f063de96c9b77bfe5c5045a007e155b45dbe68c5f1162884f1d942bb385bd34c2a37e5e67e6dae4a23d600d75d1f000000000000000000000000000000000c221006f5bfc8baf43826258d0588d7c0fc345d68de1add1693bb897959c2cfdbb9c165e82c0c787529cd7be85afbc50000000000000000000000000000000004218e3d52b42a4504611929f94024326f38e78bba2aba105db3ffb4a51f8906b060ce2302e22ded60714d652a234c1f288fc80d07393f629ef2732879332a253b49d26ca7b2bef7cc49ee40530b2b3400000000000000000000000000000000189e5063a36b0edd736bcd9f997f4b08c62d33b27560e2e2b7b40039e7c63b75757f23746e70a330110d975ca683941300000000000000000000000000000000013393485ae494b1f1467cac9a8840c695d619aa1a78c40674038c053f264c1e20481f2005abc7f0545346f5a982d05e0000000000000000000000000000000003f2be501504f4d37e12acdc54b3280671ca0762a063fd3bc04473ed5a051cae3767044c002b7ed1abe88b2143af08750000000000000000000000000000000009d5952af88514996336e1ff19409e3e4eb3079f6dea22f9738f4a331ce842b151e0b842b68cddc10a711afa6d3242b256e69f4ce8fbd8f86f546fd6d129f9760edce7c5e178dffaf987bf565e9bb7e9000000000000000000000000000000000a79444c673e630f46bbc5a9e06e8c023978a78e3c58d72910a04c3733ad873c0d0de61448076b2fd3764cc17d86d94f00000000000000000000000000000000110cfd215d67d4a091578203855fa0e85feb4dfd0076fbfad20bd092fb91b528a4117850955f5fb6568fc5844e17bbfc0000000000000000000000000000000012ece0577512182c50dbb4a485256e705410108d9ba9c8d57780d49e2e25a0f89ed1fe917797b902aafcb8f7d98fe931000000000000000000000000000000000217cf1dffac7ae162181d43ef12e3e88da4840f1573d7ffa271f64d8d54861099be37b644e96e650dc613975d8a00a4ab40e86212189e6f5925df810141c132eab20c123166cd8d3c6f40f5dcf1b1cd0000000000000000000000000000000010bec428b2865aa7c077c168dc28dc549481c6f8367a5b84cbbad661b0225cf0fda3e840d96c4e4efc36c20d48f23d5d000000000000000000000000000000000ded3a1e9e2eded0a11211a217f9355070361f0a5887a7e19c74edc8768000311cb9dd8513977ecfb45416cda0908cca000000000000000000000000000000000b99ffddc79e825f0b73f2d0229d66e51624d854d00bdee5aa7a884dcafa1888963e2a2149db0f6e40ce3c67941a391000000000000000000000000000000000147618970c71965684bdf0d6cbe1de189bd23bddb2b861c9636efdcb7a96dff27bb1ac70485b562e78485a1e8e56531cb96a5b6129c58113bca713e6905c026c0bfdb6d679c203cbe2b256b0a49ecece0000000000000000000000000000000001a402aba8fb28dd37f1be11fca037baa99a6b57188ccab66208a50bb6967dcacd1943cca73e34f6b2e2f72407103a73000000000000000000000000000000000c0bd64d043fa4e3ea566cb84f9139091891231ff500b67e5fd451805f79003f6303352a4f0c236063d60d9088fae88c0000000000000000000000000000000002861fa7d0222711ffcadac86e7b9e7b494f5561c22544bd0876fb6e1b2e680d0f7074c2800312cb233de2412ccbbc8600000000000000000000000000000000015945f0c83e738a17cb1283d08d63ecf12a7272bc62812006ed78254bfc45ca7c42306cb79bb16ed17bea600a4d62b5d9d8147c4453cdeed971242d316e350abead3dd08e93ee54738a4a5aed23affb0000000000000000000000000000000002268793f6872f7715d802c0d96f3b3d850249d8e70aaa97f19793d2c92e7cef384aaac603eb51525c7ceccdd0211fc40000000000000000000000000000000002507d680a2db16746810e966d1ba5547ac98d08c8402aed0859203e6dae0cbd87a9ddcc05119c1ca08fca2fd733882200000000000000000000000000000000192426b6438b2abc7386599afbe09081ed4908fbeb807a65bcb7c6676aa76e5e0c2c87612cd109cb124c73b9c8e0591a0000000000000000000000000000000017f125a2ef5246e7a19e1b2741b31b9224511ffefe63ccfffaef1b7949e88af573e267d6c7617ea97bbaee6d50eef67e1ba8e52986d3bb0421eb53b18ca8c21b9f7e631f16b99ec56748baeb541b32e5", "Expected": "0000000000000000000000000000000018c2f533f464f9768308a56209711cf9b6653e8d38591d782ae2374905f99f75c0d42c63af4b534056c28599a9da874400000000000000000000000000000000071d4d708f00875545f381e164f77183e14faab599e472b2857c15091254ddaf5c2e9df809875336f92ebcf5b7628da500000000000000000000000000000000099b207cf6ed022289c27393c32d0b83aed6c7b57323e746374c1a8e2ade071a5293168e72f7aab82f6c2e39b97b03830000000000000000000000000000000005dada01b4dfb6a52d998210a67ccedc11d6aca2405e0836280e2f7c8fd7c8dd271c815a2e9ea1dba6f1ab0d6e89d756", "Name": "matter_g2_multiexp_80", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000195d3f440857011bf9b764ff270b8ba1d9d13daf48933e49c12ea20d335b58bcbef1353d9698a7e795b4370ee385f12b000000000000000000000000000000000716c151efc6e611b5b15c749eaf02816a86e267428750741b167404a21116f2025d0d07c447b9c7bee8edcc2c7b76d30000000000000000000000000000000012ba0bf62b35327111d09b402db2b75b2e835cbe581638af2fdd6d06034774533e6501be3de84e7075e4184e11fd81a8000000000000000000000000000000000329b14859d004c146047b03870371f53936e078ddc69294ff1fd6f42cf2a354a921e5f2e5c125c454e20af97dcf769e7d39b55aadd47afa3cd35cb85a89e729ca236ada965b99f64ab302a84952babd00000000000000000000000000000000042286dd205ac86fdec3fee779059e2ad59adb62505f7b78606c128244b031c53dc40ebc2f5afdba348892d5ef4c10e7000000000000000000000000000000000f960010d4818846b3a0291c6fe1aa53bf0eafbc0e0968e3ee82324452a7c1a8041c06b4db9cd36a07c119c9fd2f9038000000000000000000000000000000001876da0dca72869708b8ff9ea0b74ad6be25ba82ccc76660246413a04344f2b72e5a7f6fddb58e9dc0bfaa6b33a5fadf000000000000000000000000000000001538ad1673f117493d998941d9356fb9907f70c279bde8ae8813b9c7b371344456f8e67cf02bf3401ee06d55604cadf9c41ece17a6d8b4a22994227b37a9d73e17a88859683afd5d226e113246e70cb1000000000000000000000000000000000d91319b4a5e047ffc8a68e10c34b2b90e7f3f08f9e3ec53ed12bba5f66c168c20c6583ba2016f0137caed834845f7470000000000000000000000000000000018d5542919674d2fc32430175405d806ae4abe3e1236df2188bf4c9ddf66c0974036e28414890212ff8dad244d11e3c700000000000000000000000000000000160b128f1ffeb97edf0e62dff85e3f90fa48567ab777a7937a2c0e4659df180fae4565107c2236a5f2808e42a03a4ab40000000000000000000000000000000003ee74d214ec491331fb9db8243e75570daba9feb587671496cea4b480d80ee162c6294c082203534bee450c384f645e69700dfa3b6e5fba735d1fec3b3adc90719ec301c406ac40673f4e5677da3227000000000000000000000000000000001951afa33800a366944c43bb42b8c5c8beb9ea2e1cead8b84e0f94af51e4a156d9454c0f08d1b13c692c41cc480fdefb00000000000000000000000000000000077f4543fadad6f2f8ae8d5d98f64965bf9626971e7efef5221cb4d95d51b8764324cf4a11d0ff5330d58df70cb79d92000000000000000000000000000000000417251cd0c1b32505377e51bb30ac8a8a3c059644b9ddb5a058b3c6e1110e1c71ee19f549b15090144dcf4668d0d50100000000000000000000000000000000052133be345adc562238c4ecbaf76ca4159fc11ff563ab393317b03065ab668e7df401831baf7027f0577f5791b1ca3019e8eed297661c06c92075629e163e80a08835254f7af8c0f179400be114ba7b00000000000000000000000000000000067bd52b7a3193d31a4f1ffb76432c8d4108442616f17056d310fbfee2ffaade9437e2bdb8425cf83233f0c632efc1170000000000000000000000000000000011b045d6eebe1bc8218b696b5e81e78db78eadf1b5d987060c1bdd73aa65666f77e1d6bb6f3d939d64cb3e6bda08994c0000000000000000000000000000000016eb5ea5067413b72632f5300efbe0d01a284b2a59b68d0333c269da9302bf0f0cdc923acb27e51bbbbc1d4086e6b06a000000000000000000000000000000000ff37b8812963d9efaa1e6deb5cfd34eec70620fdb65808739295a819e03ebcc8f501b8194d0b3c72717fc922b785194199ca6fb7f6df8a2e72971c5738ad75d84935e922587acf3a6b6debf3c37bb5e00000000000000000000000000000000149b5e0df255281c1b518427094cc0903fe89eac9a6dcdc379b8ca30f3696d89824c201601fc4b0795a3c859a82893170000000000000000000000000000000016ee9e7d957f439d078f3c5da98d114a1b5bc4da9c17e117e1f540dcbf83a349bba94def4b87b63247f190e3b5813cb00000000000000000000000000000000005d4f56bea105be4bf1fcaf4f25df30f85968d59e60b1c438c28ea0f480851f5ab9c05a7ca6677e6f12c7dd3ed67c2e0000000000000000000000000000000000dc0e87ca5a8b339b485ff3da2b9854a07e9663c43344dfb5ecf3ea055eadf67405c43013e15367fbaa55f1bd8e222f98159c6b98bce6ed31c30957280d8f7820e9376093d1ec9ac68ce0777d02b084b000000000000000000000000000000000b0575fe2adc9ad66209cb2191efc2946672e4e81b96d50493d2125d9c83165f0c4d3f714539eecef9de0706cc20da9b000000000000000000000000000000001511649f0cb6b86111d2830812231ad37df5500d7ce1086241591dc3cf40b30f1c53dda3133b2f7fff253c94d5eb98720000000000000000000000000000000005b15e4e32f4f4e46c1560792a9973f6ad63f5176694734f379375f16a08c162a4a820385d3ea6c191bd87fea4f5c8cb00000000000000000000000000000000089218403fef08dcc6e679b49a74557dafed3278d41ff36a9801db091b91de0d46d779a40574fa4a3f2baaa1a14be098ef1bc580e0b52b10b049f07d5115a60ba96d14a39e48ddee3c219f11c3b2a82a0000000000000000000000000000000001c35a3fdea92b28c9ab4bd9ea592b998853a73be844b9dcb500ed6704bbf3ca4ed4216dc24b50254b6ca75c4ca3e7fc000000000000000000000000000000001815292d2a365dd7f41ecf3f9a89e040bab717241cefb3155a097eb9885d64fa55f5de7023f2ecfd33f483ff304666520000000000000000000000000000000013df522c72805b890aef97864ec6769f569504fca2d6a6beae97f80dc92643f8014daf3dafc0040dd7b985c0d9b2c462000000000000000000000000000000001155ad4373a8304fa6301cf48b4ace135d6a0c08cb06d624f42f88073e43612ced3cc37235422171b43af2b4ebbd5662d06f6ed682c56611fd060ed2b3b1dc48974769ed6dc504ca3e0b9f68b77e63c5000000000000000000000000000000000bb9afedf7417ca31beb96486b024af13c06007585d785efd1e78444daa9bc3c03e1d64b560e8d6a18ccf77a8c3c8d05000000000000000000000000000000001652d3adcf1612e487a9ca198801afb9ec30267148502684c2b91c05ebf6c48e2ce33f9c0a986daab81d5359ec1b503c000000000000000000000000000000000baf3d34bf4a78e3b9dfa637c6392c7f4d7ad0ec315d10748784b5b60221bd9da0f4b75c57c139ac2db329e270d559de0000000000000000000000000000000000c30e553fa2324d552bdbc7d2dc86531340c4894495ee9a38b64f5bb6f92314021a2a00c4bcd8837e55a0ae2676a9b761d7b314ae9d9e78f628ec5a207d12e2dcb690688d256fe46e0affdfcc9775ae00000000000000000000000000000000159a1e4e87c35aaaeacdf21efbf8ed99fd6a2ddd7e990c12407b1417edaf185b8f1df9bafbddfaf3d581b5d97d7718300000000000000000000000000000000012239ef7b1e1009c81098aa4aaad8ee9e003530db5afd49867aec47f46d5e29d44b5e62d80d9e832937a299633e863c80000000000000000000000000000000016af6f74392461a9294d9f848508651ca5c0cb50494ee7c6a334bd770580b924a17beb7824b489e7e101ccd50aa0d5cf000000000000000000000000000000001912a0f54ba4fbecaa55c150ae93455e1db6b238c032fa7992bc8456f183c09b6005dd6398a77ab91cf547919ce7485b03a0c47621401fc20d2c78f7e30814de9a6f838d4328a5b5be628b833c31a6fd000000000000000000000000000000000cf1cf7a09a12f51d10059425042ef8e140718ff11d2f17897a0156034f73ed29496d93b8695cdf609280d319c9bb742000000000000000000000000000000000b2c4d26fa1eb72eed1a24f27229d2675e0c6f91e3a4eba7d34b0fc1bf5a9b4eb49c3492d9586669abaf25a656e1f95d0000000000000000000000000000000012c5c83a03087b2449b71e9037591fa265d710ff6d869bfa18ac37cbdcc93024f673128db3dbad9e3517501af12f2540000000000000000000000000000000000ffe5824245e43953e3d0adcd5fdc1a97ffc87f8c5473fdb0fed57000fd126a9925ba7415c698248c51c1f3e12b270d5e4ac6a5e740e073c5ef8af389e70c2cb8ee8c4c04c2ab4c48c579e83e181005b00000000000000000000000000000000036aa888e40882b2d6ac71d66c88543e32b4a0a7c959eec560e3d26114d8aeca63fd87dcbb3171622c989a6c7a204ac60000000000000000000000000000000006a5e552e6d2dc95ab8636a8be16bc79572b47860bb88934bf04c195ec01fd71eb91e45f24c58bc2812ed5fa10c8dd7d0000000000000000000000000000000015fa3ffcbd4e562a4bc29975cf8c1eedf442e37374fc87128e6f68bcdf6e996f6f054e0b8c608e651753de96655b2c100000000000000000000000000000000019bba7c0b170dfc1f8fdbf7a2e09ca0c4027a6aa6930d15dc2772a0f20e5e56f0d11644094dc866595f801ba5552e6c4c1e20d8003fec60f68c03942185fed934ebc197c2863174442d1a1c8d1424d31000000000000000000000000000000000341f46ec06a8def4f044328bcdaa308798469c767d10e5db34b0ffb6f550421c67c6fab7b63cbc7504e55847cee419e0000000000000000000000000000000006952e5f791c37dfebcfe69cdef196dff66563b29e94927e3ab34365773b93e72251a63af4ff294af88d45fe0899a2c3000000000000000000000000000000000874dfe75b31450e99dea063c090e32d24fbff9b681b64a9dca5f967f82003005b003d17eb869bd3b37d4a412bcb28fb0000000000000000000000000000000014203b69e8af4e25232777f503d5e82d6121256fafdff1b037f65d5aaad0f09ce882151d6bb4705328400f00089dcc7a7713ea72a2ee99442232472ab3dea9307a02fa1279129d994af5588af4fe7af4000000000000000000000000000000001403fa3f418107e0bf7f3f4bfcf621812d32b1b744ab5a4c37b5cf946a5e5dabd675c2b70bd355590a9883436c5e32dd00000000000000000000000000000000069e006f168bed4439fb46db9ba4f279f72ed608c12a05eed172608693f42cb1f04aaa54191f4b0b35f967bf03d0e63b0000000000000000000000000000000003f9ce029f6fe605802de64701ccdf52bf4aa299400a6e1c36f5a1f9173bc11a38e7628f123fdcae01d2b260f77c577c0000000000000000000000000000000009c9732809f60635115cb479c80457c6cd8dad092111d663c0cda0da1fa71c9bd6795ad013d2efaa4599c8ac5c88e5f26f128420cf6ab4616a05b287191105f25c7212f2c39c3230fa56bc27cd06ebfd00000000000000000000000000000000115e08d8e4dff7adcfe46a416625be0ac26ea2d7900f5fed497809a6d46e7faa5b47c52ab3bbeb9fb16d82b549707ed6000000000000000000000000000000000dd1b31446e44f64ea5046dca5174ae854f6bb5d95886fb95aa136d432f1a8c03ef1a5f9320f89c82f764049a7f678a40000000000000000000000000000000014879783c07e6986cd393fa1e0ca8a7e23b2c9efa595229fc0b6a11b9c232ba33e92962a1087fe2ba0532d7b541827900000000000000000000000000000000013dc6e2bdb2801333e7f914b99f30b40125fa1ebd49b141d88a8c090b15ec3250a13812a19c3c0751a4e5ed100a6f0ba12bacb3419c34369dbfd1c968334f76bc50885028758a975cc812a04e6feabd6000000000000000000000000000000000a2cceef36ec78dc702b6731dbaf8cea1dc2b41fee1b235673c6941729bc5631e69ff37900479391a4d10b300fbf3eb40000000000000000000000000000000002f4881fd626f4ac434bc1e59716e5e5ee14dcb9adca4d639ebc9d86e323d274ad8ec0a4b1e6ff92e1fe7928d48924b000000000000000000000000000000000174cac80e7bc63989f58759e123513b611e9849b44d43a362f2eb84421ad008f3ae9e9f0f233e49fc8e10c1824ba948200000000000000000000000000000000143641099c8a6c8153dc8ce74debe795dd6c4487e8234f164f9f8dcdea6a53619c04a8fac215421f985557b5b956c20a5b00f26af6f59620c7130a6d12cf2091b5f52a6b638484fc1f242dc1773be256", "Expected": "0000000000000000000000000000000009807ffe8fa881b235b1181d2d3f147dbe21042524fb0c0b4c90fb122d160c7b895034ab32e20324dfca564ca6e3183c0000000000000000000000000000000010f6da88525da3e86ee56cd5514a436e3ce4128e437a876be130a70c42444a05ac269326c84dca532ca2e546860027c00000000000000000000000000000000011396a7317918841ba171ea46bbddc9bb5a08db7c82b90008c6982b4b79a4dafc151081bbdb7b9fb79784e603e15eb9e00000000000000000000000000000000070b8580f303b83c643a484dd031b780ff4ca2ec805d8c538a0b0c791cc7f8163654f5e5a41776a8681500a6690e24a4", "Name": "matter_g2_multiexp_81", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f38906bd058e4d32403fc3d39fa57bf49c0da65ef42fb129332b91c184185de4f9f0bfe8908a44833ff4ac4d65b88180000000000000000000000000000000014ea6fffa6dc462463c15feace841697698bc521f608ed0d16be5097bf42aefcd1f73182f37b6279f989e9668a8076d1000000000000000000000000000000000f56d296323177ce53c6977fb60e445278e59ed1cf92e3f68c570eb7a9e5f8afbec5e2ef64674bbb54d7016c829f72750000000000000000000000000000000001b29012ff3460cbe4a07bdc65885718f217cf177866823a7cbeae18bda67f65913ea20bb69e0ffb31bd82f19862113dacc5a8ec806f2f273120457865582b08697904a2c6510bfe9ea21eaf682fa4fd000000000000000000000000000000000a4126bff91ada057ceb9a75d577120c7ac8c9ba62151602414364cf88a3e12dfac90b5590db3e40c16163177ad4e7520000000000000000000000000000000004a3768d326c4ebcd5ffed89341e8d04f89e674f3f2aded3205a7193e11c20115b3c4d595b959d6e39a03d76f6b5925b0000000000000000000000000000000006e0ae4a9c45bb69c3a1c65e26e4869f2eb18fefe584e4598ba99c0044e8d911145a5db3f57194ceb6201e7eab9a81b20000000000000000000000000000000005be2ba6b147f3f2052c4877c90ca364427c6721ab64dd35e89f14f3179564d8812b9013e3e3db22f69afd739229682b98c15a259b4dbb8c300a39f0af558a9827112f6b4c5eae3d43bbfe057eb113cf0000000000000000000000000000000004c36cf955fc81bdba4ea8d2ecf934adaa57fa4073199f77bd0428d3ef80a7d7102179d4a44ef0de887bcb3ae915408900000000000000000000000000000000138bd3ec7a1b6fb65d1df6bc1d2ada35aa52b06729c10b5d45b9bb7cbbdf41677942b99eb9c2d32e3e73da7d5f9cfed40000000000000000000000000000000000b0291ca10245e2f7a963fa07ec62b15f6bf9e7a5a7839840ebcbe538dfecaf2114c7864a16564a5b3c85c15d97fb7a000000000000000000000000000000000b436e912b8a71cf8050d10d59017eca6e494e5440f02d2816924ac9cc2034bedb1cce6eff5c42f3dc57a74cf1b51cc0a0e68bdc97fd642581f7e62ecf134df2c05570713c96fa733d3db96ace88f0f0000000000000000000000000000000000c105ac7475ed9517a0b07f25a030a5616952d817f3893181e352907c7cf4ec9f5f3006e37b1da97e9cae4a1213584e20000000000000000000000000000000002c112c18268934823d5946d2322d0faec497d8e18736da91d2af744d90f74136c49370a4b43952152c62820d25e52ee000000000000000000000000000000000fe2818a397d70543e752e7022f12bab10f1b1289cee61a0230d545296ec872e34d8df6edf7ce9980f3c153e6e51d96d000000000000000000000000000000000f479e6a52bfaab3a31aa9a461adbec8a390daa8eb6273f9e425eeed764a6dbad44d12778bb888aa5808df272edde401e5512cac411cd103fcd7497fdf47d1221999bcecdba30467f06ec356483484fe00000000000000000000000000000000016106cb42ffc41d5b23bc5b06001473bdfe556d375fac6a0cb0a12494e9c02ca2dd6133356846e1759a2c485faf5e890000000000000000000000000000000003cec25b0f5d1db0ead5319d6dd15517657d1fec442facda4335ae0bbeff606fa9caa6a4c00445001180aaeef895d7fd0000000000000000000000000000000016ce3573fbe27a8d23b3ebd22aec989d61fbd0e41a519c5e2f1d650f2ad73adcfc8c840fb12bce83b722a0cc69164e21000000000000000000000000000000001434d13d44fd8dcf776c2a045734dff7c09ded31c9e3a4b5e765cf26fbfea4cbb4ac15c06599012a7f2cd572bfafd78ba32f6861298bcfd4668653544b4551d7357d64f733365a5f08ebf297a09fd4ca0000000000000000000000000000000019923ffba0d08ebf1bd43393142d61022430356081c18e37804172082c7ace987ece2594f4852e84604a77235c7795e000000000000000000000000000000000123acf9e1a86846ae27d5fc0358afa34fe9d6b68232c9ebf2d47cc169779c4bd24f225ad30886fdf68166adfd9898abf000000000000000000000000000000000a6061d4cef29d1e3535d54a2e36373e2c16f91543f53e1aca94c4abdabc663049673f2327ea8bb574244d7f5c99e981000000000000000000000000000000000b1f3e1d43575a74584ec7a3280f8b7196f9b99b5e911ed33ba6bde1188c82d906f0f8e6fc2b285fefa0ce59116e449524301fc5c3ab842d7f6a278fcd32249f1daf86a31dd254ab9a21941fffca98a1000000000000000000000000000000000373d36dd0fac76a0fc46ba5da279ca3be5a1f8d799570004e429256787110d4fb746f65a8527d0ba681a81b9980bd5c00000000000000000000000000000000057933c2b3e482ae026159211c4742264f7e890efbaeb6e14f3bf66c80923289af095dc97b751a117e181ef917d049b000000000000000000000000000000000068816ad2369bb57b3430c657284858d3736c327284e7410b61ed444786bcb34a66db9c16aca583aa9722aa8d7975b440000000000000000000000000000000007fcd7dbc062d28f6ef906f6a455337e517e1d6e6c02c7c0b2b2685b79f56ca3436c1bfa0ab96e4a5eb0c2e2c321c0dc17a920aef58100de67c482ae1fabf7ec87cf3447bde1e19d9aaff825695706740000000000000000000000000000000007bb0ab060cc12002e043724c0fd0c8bad30e08b65ba9f2fe5d09d18cac4bb2d50e29ee14590ca7bfc505f3ee3d4f93d000000000000000000000000000000000e680653d29eb5d90f21802f543eac3102a1de6d2a5bc943a53dd9b80bdcaa6951ced2eae5e2a25448b40468f1923ebc000000000000000000000000000000000b7494b494019e3ef36d5c620ac56483fc6b1c8fe5c6f67537b19f56ef01db327812095fdf805d3dfe678a3ed8bb6226000000000000000000000000000000000291e5b98ecaf7aef0374647d28fb9f8785a64d9165de407d062403047da14d4ecd19fad8575070b278608e16b71d387d76d5eebc3d099448ce4a8ea6dec047b0f062c6361ddb9e95ec898442423a31800000000000000000000000000000000186536e3ae3edd9cc6bc24fda6589ed26e72e06121e97e1ead65b200fa0578c6e53d1154dc7b14e7eccc3a53237685060000000000000000000000000000000012fefaf6c76ae7197b99571e41a19b14846fc4499e8e964ff750e7c3ffef6ab3dc19eeb42c5f6ba44a573bca7a15166b000000000000000000000000000000000a135db813a44a21174cea3a0b34fb49f273877203ccb66bce44b2b58794818d8bc1df27544ecbf780823467e2e4ee6b0000000000000000000000000000000009b08f70cdf4e349e1a73935de9fb2ad9f4feb8cf5f835be78383fda2af94d81af253ebce08cef825764151d5713ae60cd4cc1453dec7ae335db989886fc0964ee73e12bab69ce1f1458d1416471176a0000000000000000000000000000000007976df2d47c14374e554401c4d3330bbf6f1e6b8fafcea1e1974af61e8ebf493dc0473d34b30b0b1cbee082550d85c200000000000000000000000000000000177cd64db8334dccb17fb207e467e5b09e891b05df7658d9b439e3cb72bf3e0a70e84f96fb5e448f33c003c279cb38d800000000000000000000000000000000094d739a02b8ea6ff8113019597f41df4728b270770edc5e68b1f5c32775f0c706e3f31c0a82059c1ee150b89097376a0000000000000000000000000000000006ed888aa4bdbee94ec67500e30d654071774fe22464dd5b900fdc17b445754293504b10d044aac8fa0c289f0b2d9dce6d207c08e51d64a9a47f5353faac77fbb184e1123d38e39bbada85534cbcd3150000000000000000000000000000000014a16b856b04ac4b687c79f2b4e1dd6d45db25b382e0ba6687afac648c9b6384cdcfa89812f1a726bb4d1c22ebaa6668000000000000000000000000000000000764088e337df6db30ce8aa23aefd91d9e35be911c9e89ac62a1e06c3d06e28efac256490400fac4490f595cd03c127e000000000000000000000000000000000894856fa1c8488fce182a9c7749f7953e6a73879b6e743fdb8c780275447122f512806fa83d5ad528f8f61598ed01d20000000000000000000000000000000002b33bfd09e0ff452c3336bde08df0102162488bc83c27052447a1e5d16c9c68bc529f96ee3787a26d2009f22a1246342e1910b704d39b6a64cc7a44e44ba3e8b7e64ddfa90dfa6b5ef571f9ff7d7f0b00000000000000000000000000000000133e2d092352d3ecef5b67a09c2be268fcd4fe1f7360a8ce3ef5f33bf689242961a140d9c8afcc1e2fab3ad4e3dba49d00000000000000000000000000000000101eb285f0c462a22406846d82ca6a278520b65132d2008b124f6647a642c221b0c3bbd4a0abe8af7417e7aefb81b5b20000000000000000000000000000000010958cbc317f1186aab69ac24be87647b8013b678b0eabc6270167bdc9c0cefbaf4d9a34dc41524b709f1b881e6bfa34000000000000000000000000000000000d92c47257fd0c4d6baa4c81efe65852840479b9bfda5cc06b253f167069ca7367924c0c67d6497a1e9abcce7d0ce9502eda0eb154d5f9b0e25a828c6f77541701004cd0293c61ae4d36aa3038d0f1840000000000000000000000000000000014ad0f935ba129b47ecaad63b9dda44e7ef7933f182a0f5226141c8f0ede026ca2f11db7f4924b5c582461688dad6359000000000000000000000000000000001453716381f13bf6ebf8fff2ed7bcb90f7beb44269008af5880a355dd03de5c84c14f5aaf69fda043b422aab0c694784000000000000000000000000000000000e983c9e9b799eccfdb56444d31948067d46adf275d7f39a70aaa8bfd0fe1b83632c23d87f4e993c8191901e9a607217000000000000000000000000000000000267c8b8c5e09b59277736caad12ec6986f206d1c1f48023356d8bc877a594c8bbd98981cec6382bf9bdb9a5fa38275ecaf6dcd51a851eb200c7f5fc3e106ac5ffc432f756b942b1b9a5dde31cb2a3760000000000000000000000000000000002e28c245e71a7f6206427ee512f3250612785ce29b369682fbf767d06ac08f91de8ac9f82951574cce46cee1aa757720000000000000000000000000000000019b0dc35eacd961e0ca7d54a0e37c4ace37eb0200d5489316f3371412717c57c8f17c1379721f4dd67b3fde24f50d4cd0000000000000000000000000000000013b9741f7a32e5e5b1ae5400e32dd6fcc1fd43b68df54ade57c934720b1289a51deae77b1726e1955b6430f37928e2bf000000000000000000000000000000000693980b347ed7ee6cd93f565c87efb36fb304d7e9ae24e2b9f902bfc962b6c7fbab93287147f5ac892db2a709c9ab42106d4a893a68b7fcb8be96faedef65181c239dc2cd752c85ae7800ca84fc2dfd000000000000000000000000000000000ad6b7cfc6cefa5783093b7d700360b354d0698d27ecefb7d5928ac5bd6c299e4001474d205cf3b85a32c600ddaf1a360000000000000000000000000000000017172c3d5acf59b70b340fc703e9b7801aeb4857ffbe7a9d5daa0f32ad80d1c0ef2f0b3b7d1fd83a757c076872425fc7000000000000000000000000000000001291f55fa7d14b14c578d57178cc707cabcdc4bfb444cecabda271cbfba2ab361947d045ed46d9edbd215fa4c8164e56000000000000000000000000000000000f64ed6c989eec5222239d888d08dfd638a0e35eff2266410dab0498941fcd1683654064107fb7e53b8c02fbe98a25622b9e1cfbf140f4a3b1d06be656ad6ee5169a9cfa7cbe6efbf8173843d406acd30000000000000000000000000000000001d25b5bfcedc6d7ff7e9fcf729f858759936235d23ad45b14dfd0229bf3e50fc68799d19ef019b36728285bf7ecd0b4000000000000000000000000000000000326e300ba07935e0233a03ac891f18dc7b5a9ad9a28264136228e9e23e8f2aa31b7f5e5f3cb3354984f57a868a5d00c000000000000000000000000000000000dc92060e3403df3a92b15ba3e437ef0c403fcfc9c3545e544a78874e5d9b5e63b9ba6060c29022fe2594c2e6fbb6a840000000000000000000000000000000006a01e85f59dc45b1501309a350137d71147c30fb70da6b7637a9b1dd884aeb7e554215474784ecd3bef18d15d2c0524dbc68f77d40330ad5b8cfcda42edf57899454571c6c6465c4107e662a269aeb5", "Expected": "000000000000000000000000000000000b7fc0b44723ff0d1cb7c43e470d4d432fc4bbc7f9d98ddb3d91434a5574956fdf15f898e579236426ea44677998665d00000000000000000000000000000000176586b6f157e408138391e3767d0c1c8457857f4cfae571267ed64ac86ff8a4b61a28b406e1caecffaae6a399f4ec9c000000000000000000000000000000000a420992f850db20d4f7d2ddff33e4dc79bc0c39caee533920c5d03d1c2619d8ced769ac09f664c0921829bd7edb446b0000000000000000000000000000000017e4000f4d03a6707174c3adb74966896bcc0eaabf4ff83cce92a666fbd13b59efa2c767442062b6c8b1a3abd604f0ac", "Name": "matter_g2_multiexp_82", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000016ac5146ffc26d1f0c33645931bddfb84756e1c7b03f4838467d1b6701ee9478ae03c910b6b4f5c14135487bd2c14bf8000000000000000000000000000000000e1d082f16e4d5c5f0b6fbe5178aef6f781a6fb165f775cf0cd4dd55f2b498a79edf373007113dcdf6b977a87e1fded2000000000000000000000000000000000bb94be280df1aed761651c0292f88037d172b675bae1933ec12323b947023b437d080aac9e196fe5e06e5c4137284d200000000000000000000000000000000064190f9725bfd5d56c31aef7fd1590c975e2ce549fa6d5c71b254851149e0a0dab0b9de3acfc2d64231c79bc0ebaa37ebb3c942d3a1a15cee806fdb0fc3635483743a5b0ee9c40a48700bad5da53ae70000000000000000000000000000000012199d02d3f1bd8c4005878c3302e6a731ea69d69accdd690b4667e847b079563d32e18eb7a440b8005ca936da5e73cf00000000000000000000000000000000125b0dbdb0058639513b007a84d3a3e6302f5d846f22f99a55181f097e200981d9013c00d688a11eb976120f1a5da64200000000000000000000000000000000081e723506635433528fe4a40fe4ecb8a9c3d8cd701c043c0418d149951651e21632cd85f03db33b89efadd69e009ebe000000000000000000000000000000000956af2e67f8ae676abc783c4ec9f85c50ea130410cee8216fe036cd0521b8ea38966288afe7d35c28b30f7ca5c6edc0c193d751c4f24f4808621979f07f03b2eabba75f08bb49682b9df2da7a85a7730000000000000000000000000000000003e11a4e9dfe82cb495e9e698b16c257ea3f4ecb24749751e7334e0f31fbd6677545e4bf9ff78a82853560f7e7ba2ae2000000000000000000000000000000000caea2c527cb3aeae427e92fc364365b1f55e7128a544009be2ff7a5236d1cf8ffd5a5cefc87820bff5bdf1c6bfa165d00000000000000000000000000000000064a3186774da8bb5d013debf46ccb0d894592c414f32de6f77da47f4d42b0c8a13a2ba4f14b9883d564fd8ff6a4c90200000000000000000000000000000000072f6c48b6a05039e3a4dfc6b73501d6d4ca7e840b119da9c074bd4cd2adf4f2c6e9e6325ebf6f97c3f0b00e6b9bfac6dee4eef524f133183b4af95e4445f3ee5084b96c32e284ebebc5b87f3d76150b0000000000000000000000000000000019ddf708ab31f6f6f725f0e4f65d11248d3a79af30927a6f2673901fef9819b189502cb952bd4742d2b8e84acebb5196000000000000000000000000000000000d928535c47eafa5da4ce4f91467fc31aff8b86b850e4582a597b334491b14da71763f9aedb15ed32856382069c094ce0000000000000000000000000000000004d6b3545d067aa0768cda9dc3cca0f58eb546345b96f7d6b9355d47770e00286d962a6b3a64ca2ce22fdb4834a4bb6e000000000000000000000000000000000f4ef9366d342b309076299816c1ed9b424b68886a5c69e21e785f97cb0f99ae3a99ff6b5244dab817094449048a7552da514f21c8eab0edb2405e673297bb595edc21027890ad680f1663fd960ce478000000000000000000000000000000000236c5b4c57ee4facec5d4ff37a478c505217af66e029c3382613442c58875c75cb423789f6703ff3c1c0d80991c9e3a0000000000000000000000000000000016c052de3336002f362d9b0cb386b800860527e0fe81a1a6df0ccde31f3265e6246191b3febd1ea48e9391c44593ab0700000000000000000000000000000000078dcb04ca93c676a9a924e59f924d9d3af872849bc30ca633d4025aecd981ba12e626337635ea77886a45f4da84104f00000000000000000000000000000000027df6394b195222bb8357bd684088e3e2a398f0fb0cb812ca5dcdcd1fa1279cfd03db62e0f8b2800d4b8b48238931656aeac9a669c962817c01069cffbd948d9d8ce764e92859f31fdaf85f5aefab77000000000000000000000000000000000485ce58b387083172102145fdb3e26c6ffca8b35af0e1d84ce9cbd89055be083bddd3da56443924049a056fdb2ef092000000000000000000000000000000000d998b234a69d584c78ed054b1322ceb33f73cafb5b23c1703a9fd609edcabd44f1a642802b9c0b6fde6a6828b50c1200000000000000000000000000000000019235ff13567bd007d77e4dfab139cd57dbb309a3cf6a6198a548c4e6915778094ddf2b05a91f5478169757bf5a56cb300000000000000000000000000000000110f6ea19a7f62bc3e78f4c5c1c6d3efdf1a7f563576e758218b2c363fff8ad8fab0e72431619e4ebc93d2d739fc786c40273bda92c9b1b677edd905d76d75875e5b77841befb2bcaf1fca7674dffd5a0000000000000000000000000000000001d45da76e3016c00fe65bb50f7067e4f06364ad8348184831c4932ea0e0f3a170ab5147e4670ee1b16924105b6fdb6f000000000000000000000000000000000b3468206db0613369b2b0750c98da65b660fc07c30cab4e459c311dab683b6b313b99ec0fbe92ba07f8aab43a12a2c9000000000000000000000000000000000f58a57c449a41105837d5e2419a34201cc921ec77408d6c0c7a2eb227be98ec1f6f6eb9fc088daa0d4c78928a1eacda000000000000000000000000000000000ba53b872dcb9fcabf35e673b467523ea77accfc1b38a5f92d7b9d269c28aa00d00b08d70eae6ed4d2e82bdb06008f9ab77e16276f9464fa2063230d6c1a4152553536c610062f18565c030e80b5cb540000000000000000000000000000000002b82e2b582b247271543117b939fd17ba8bdd617a223873296f7bd75de4790f0d5d8fe523792bc7fb4764d3739669d80000000000000000000000000000000006eb554347efc5f2ee79949bafc012e6d9964ce19459b3867865709d903fe3d11bc617f30f6279a9e62ea104565953600000000000000000000000000000000006a543fe5cfbae629fd3256575e3eb4e0b65864aad6c7f359e169038bf090ed9bd92fef32fe1ac20b2a8c90fbb6081690000000000000000000000000000000013ee42b0693b2f3b9b977fbae5c856e9e4c5e70120b5c29e0a9f898f6d04b7fe351e17b02716a44febcf0a00a9cdd9220be15b654ce22ae4e32987babc4863ffe2bd8a459d0f01f68fe84a75326889900000000000000000000000000000000001ae7368f84e354e5758554aa9c72ab4b00a644cfb9a4ecba38dc72227d297749bbc98c8f5d6149143b31442359d8013000000000000000000000000000000000abf087f77c79cb8c69e4289fae87b2ed483442daec3851a5ba32c43e342be29433b2deac6dbfa7a787547a7361ed0a00000000000000000000000000000000000fa01cff7aea64b649951a8d85fef0bd475f31e47c706b96ee2753df9987508b5e5456cc49e88ec3aad720a2535f6940000000000000000000000000000000018874d020e2eec0e286dce324b91f15b2a4f293d32956b27524f478983f0e0c5b43df802b60f4f001753f12d449cd821c8f1fe94bce21966427380b6d357a3599e9db03a7694159335ffba26fe29e4650000000000000000000000000000000018f7d19362e2cba91023455e115cd90f02aeafcb026349393ca4105e270ab1cf589621b40965fdc9795f66ea0f6a053100000000000000000000000000000000170ce0eb304e0e1047617b709c834b67a8989212e5bf1cbd5a33242be94bb141d5366e636c01a229943bead9a7baf43900000000000000000000000000000000077a17356b3b31faf90f709042938b9e901817f7379b7bd486d18e47d22b0430ba70fb3006e9afa67d7dac71ffaf152400000000000000000000000000000000064aca92c41561e195fa8239800c97d5242ff0f8ce76b0d119063e2ffa09c26e01d23d5728765a59bb9587e885450ad1c6d34471ed00035a484f97f4e8123d40ca23b017b94df65540a5551b905e57b3000000000000000000000000000000000876a57dc24ad58416f910ee3ce220630a1297e6bc691c908e6cc16f975b146872d71661bbb869361623c61670627eb0000000000000000000000000000000000760fc65097d215ab9aeb3d5a5153977e1e399e2cc0b0cb9befb0266d98ac13512a0eadaba4e051bf56794621c551ec60000000000000000000000000000000003c8e205e53075a96c14ec26345c75881a0d67c7ce0d62d73c83dc353cd7b555cde52ffc5659ab0db2179a899f0fd694000000000000000000000000000000000d7e8a7fe6b751f7f478698f4f0d30cd0a435a2295a958cabedf4668769819b4cbd4e8b7721eeb5ced3f913156abcaaff3abd467168bf5e57f71017b5779bdd400dbf416f34f105fe747ea2f8cf4a21000000000000000000000000000000000180546f697349adb2918129f4d0a979bb114d1b58e5baa6cc221a09d7083469bfaa61f80f1e3a6ccde0da54b24d59db70000000000000000000000000000000004074338380e3d7c0facbbc71d83e78b53191af9ba13ba0cba6015bf4f28e4b0b52ffb34c7867a335848f57b5ce5ef5200000000000000000000000000000000148a800ec38cfc2386497d9aacb4327d5953a6612cd4067ac13fb977046688e80032125d4b0e7cb49913e489796a50ea00000000000000000000000000000000132438d18d942e6dd3f69d117abf83c2fa18418e5145cc43b3cb8d18c873935e41279a9e13596f2863be7aeae9b73d172809801eb18d38a61ef8a80f13086d6b1f85ba751cdb8d17fbb9ad5f8d0f835c0000000000000000000000000000000018b3102ce91af86cd10162d3a43e488a0d7b7807dfb9624c3cae76f342e86f8ef1200444a57e2ed7f819828357a6dfe80000000000000000000000000000000017137b470f3c8d1a03e7252e18f4466c9ff809408cbb2043d6b226ae2746d890b267ce3255114b2e073eb66e93c55eb200000000000000000000000000000000054dc1c981c9166d0bd3a54064c33f15ab856b240770ed44adaf9f32d4429babcd0baf2c5b8a1ff80728e9c63e806cd3000000000000000000000000000000001897595f836342ab54bc2e1b72f433bfe3b5bc989727de48575abe89386aaad9b1549af3ca55f39feec14355b29dc9e33521c9cf035b094d754db994fce3161842a9509ec8288699680c0ac7761eac68000000000000000000000000000000000467f1a3093c72aba4c2d9e8171057cf88146eb32f38db0761a5ab2027f2213c89e12c67a338b4b342a73384109988d2000000000000000000000000000000000ab26c871d140c9c4e0512afe9fb576409ffdcb95417f8c6cdc0d964011dfb1e745045766bbbc08ff7dbd6935934bba300000000000000000000000000000000183488902b886200e63465098be87a905810b2e8ebe0364316da798e423dbb267743a0d2e3d93303623fb17df0e74ce30000000000000000000000000000000012c7e79f9ba36cc47762139d191e6625c850a03d5b6e0648032d1669575704c91e48a9ae432bb3553ec66e86e082de689c8c2998d141b9cd3a82507b6dd97e8d32e9e759169c575eb484e9a1559427da0000000000000000000000000000000012ef4988956e026a79e5e904ad3d7ca56793321d62cad46de3cbde8570be5f0ac86d386216152b37053741fe342de7c60000000000000000000000000000000014ff7804312754d23b251a42aea65207695d4df65cac4f87fc96cb920843c022f24cd27731224db751cfb621886249540000000000000000000000000000000006ea693105a1b2afc79dbf75504c256c519f927ea0d79ddd1997a49638a67151dc81b84473208e8078cf71d456f2de0c00000000000000000000000000000000122d367c147c91517679432d3c7b56f2d529d70040109f803b89a04fd8540a6c565354ae420e1bd4ad4ff61427332629dc83c1ea9e4f4fc12a7190e6c71c4f35d1a676d39e30fe688a05820dd989664000000000000000000000000000000000156e7f8f1412cec315eb76f10c92143157313b8eda0677a6c0236de5fd27e5660ec3eb7369f1604082c59e1aa5f94dd900000000000000000000000000000000018ca9f505a88ed2bf595fa9b55d2356748770af16b35bd5db448990b7d41c3aac53aa490791f7ac09d2f5a087f938f70000000000000000000000000000000017c76ca9ddfcc26b028928364ee35829c6e57fda40773a6bc0c259a1b3cdea715c664d7bd0340192aaf7dec7ad20a2ed00000000000000000000000000000000082a255966c4f9d0ad6bd3d88b136cb2cfca09ed6ae378c914c28ff3338a2cd466cafd839f3fff4a30b33ee56e684f4e00be1b9098f1873ce155a66899877c7b48ddda363ae1d2353cb3816f1ab15ef0", "Expected": "00000000000000000000000000000000075c71e21ce327a97024c8ab5fcbef4fff76260a4f8c8489167166c4a85d25096c617cceef73097a4bb956be3eae8b780000000000000000000000000000000016270f3ac86c0ec43b9472499c4d845eab488a34ad9e2148c72cbb1db13623c5dbbc8327c47ce596521bd1f54f119a660000000000000000000000000000000007ad4914ceda9fbc161121c818bd05953836a581dcdc78bebcd82ef548671c899581681c908a337618a445f77c6b7cf400000000000000000000000000000000173f401cb78024e844adcc88fcf0e52d32de134f6300216ea0da7747752ae3ddf4d181b8d266b53d1b699921f9871425", "Name": "matter_g2_multiexp_83", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f40eea638a3d4fec417701c936d61c5b233c9d6b3e94ba9addd0fa0b20adf9f8e07c6b629977445c7750acfd18001c0000000000000000000000000000000005f1ca1ca9cf67c33e3ff174a65adfde2db62e74edf30b5b0156d6b9dc86dd619ad8863c055096685d611ac015ba884f0000000000000000000000000000000001683dc67710880b8af76b464291c17fb0ee4eff3f648ac0772f4a777025c8cda0342d8f5aae3123da7fac57b965685900000000000000000000000000000000143d919ce2cf00838b10fc65374e770bec3db8ecb17d2db08b6a10ac38657bb109f54c1b3040b661c3914ded6f7eb80fa9cbdaa0ddbf854861eac6621255b2102e5343666c735d0384049d5680d105d4000000000000000000000000000000000616299341f2921adf083d1190c212a7941bc0d9fee50b05b265f2e8c339fc3dd9f94607631f485e394f5a7d71ae73d00000000000000000000000000000000006b2f12e22369e8aff45b6c05a2bb72a706dc46a5d1393aaa9e5a7931ccff33a5df2967189114c3fc5dbf69d080e39dc000000000000000000000000000000000981e1b119d04343e075a80dfc189000b4cfb4e321575817aece6009e6b3a6233d1409e8e584f0ac9caaed1f43e40d7d0000000000000000000000000000000001ce4693e8c14032c35497e0f9a586a4541d8a1a68ad014b0850753a04215be2bb60cd7c2fa9be4f4f09a562d7b29f3892073d958260a55b70b580f3ee27c42553b5b858b66f6928fe74b4de91c34bda0000000000000000000000000000000012d634764207dd7a0201703f855365f7750291c810ff292b3e8dee682d7d8eebd6d6f3b3dc8b0c9e25bd2860e031311b0000000000000000000000000000000000eb0859d79fcdef546026fcd380f5c936e64a5665d73f56d92c03dfb50c534a00c857c86ec43275ce69cccc0b53137f000000000000000000000000000000000131bf000fd117ef722b33a1cebd28899fb012e1113f767d0ed46fdad82a32e4327b883fbe29abba1bb7ba3ecc1cbab2000000000000000000000000000000000e24ef1e44029366ae1daf06524d8beacb2b99f60f419cc2ec1a49013b79fb7a4781dbd37785f32ec67c0a28d61a3cea2117f11d78dfead915a94f11fa7e904a96204ddf1835d3501639b83cd5f716f500000000000000000000000000000000067b6eda41cb8da47a424a02a142e2b98b9c69e7023cf616040993f41507798882194229cb6572806e82e9e5eb837b37000000000000000000000000000000000e38693cddf130d3645fd60ade780db84fa700e5bfb74ebea49cc95ab001bde442f363b4e4c61f683b3e67f1ec8c2af80000000000000000000000000000000006d593005cbccc55c5e336e19aded70da65a7fe42b6a85070e491a4ae54e18ac213556a91d5d62786b6d4d1305525a76000000000000000000000000000000000ff86216f5388114dc06deffa7b52a273b22fe0bc8d50804b491fac83e13915c2dd1b8c2779a46b5c313c4e1c05eb2979087caa1e89e48f05bad1d720477199410941a6105f911d589e1f94a851e0715000000000000000000000000000000000262cf4727703fb227bd7fce6cd3f25c1897011ab892e79fa47446711d6867ca82b9b95f129f7ca24dcb60ac75173d4700000000000000000000000000000000136b5a304807e029d0a77b2ed505ee5c920248242f0f95aa07e9bc2e13d35f6f67451d028dc19d26095b55cdc2fae4fc000000000000000000000000000000000b511b2e19da7bfeb183f0aec91bc7db3e7c913f1c282e12d5d2f422a49e7fa78a5f35656dc9c980324717a5ad386dc30000000000000000000000000000000012eae443aae59fdf907bcfe3ee4366e252bb57e268fd569d742456f348429f009f67bf92f9dadd401104ccd2549cecc8255603b470c056b3dfb3acae0dd45bcb3d014765a5181760336deeabff3f00be0000000000000000000000000000000016a827938d8b98e3446445ce23f48a7ba0d634de826dd1ee3c71467eb57bd4c24e0d1b4190f47bd841183baceaa2593e0000000000000000000000000000000011d360e0c18b45ace82eaee902475127d8f18aa4a2ec2081a453f1c85ffe3c59c0f7016f966574a7c51bc14f1935568400000000000000000000000000000000186b5d452c6dcc1ddb4f47b07e01b6d64644f6d01cba8498c3059cc494a68bd25eef35cae05885b9f2689683e65161410000000000000000000000000000000000ff826e5a62affbfd6d2062bd329fcb561f287046870b8be461767759cb0d5f1ac904ecd1f136c5ccd784bc11088233e0eab0e2486316956291feb44de6389b20f8bafe9cc890d86d27a598bab0f3c4000000000000000000000000000000001010e75c52ed0acebe30fc588961c849b7b6298bb8d859f9a9401737c467921c5e3cda101cd4e38e4318233d12b6c7b9000000000000000000000000000000001884db518fbe4d621403ce00521878c0d419d8cf476a1dfda59b7d3c7af2bd91058bbbf54ac0c5cf9a217beb78e3f98e0000000000000000000000000000000001272cf0ad917738bba052e88baf88347d60f63f5b875d604cf0531c1ba7d43e868bc70a682b7274067106f611f08ae60000000000000000000000000000000006e3236f6a66bd37af4be230d4edda6eaaed661f206ca4852d3004b5f358f184d80be6af81c62e5bc8c88e7a1072fe21fb9436456262e5149d02b33a1078e198bbb681699b3f485625784df444bfff670000000000000000000000000000000004fd1e2fd0d28db08224fa7e880abb8c48dfd0e488df4d2ae5f6649f448193acbe943baf22af4b12fd763e3e4ddaa08d0000000000000000000000000000000008df68f276f356ade28500eeae3b755c9af9b5acac5f5f60827b5b2044b2405129b00e5271baf9a80847d3b720026b3a0000000000000000000000000000000005e683d1556f513e6d093704405f312687c3b9e2de3b2840fff32e88186c89b18d1ac558d960b1196594730a9bc107480000000000000000000000000000000018161f8d23c394d10ba576fb0ceee530ebb95a670f2589d84c0646f693086ecb7ed80e556f3ed9434d7fa488430ccf430e2724d3501e3d79b85266fd83a2a6156eeb48e749a61676a1c92ab9bdd6b8990000000000000000000000000000000017860708943449c2227c0f50cf1274652dd32e999d5f9b1a8d672feedde15e9f1af484a7b9462a62dd745bb6d3c7295a00000000000000000000000000000000064f8cb707494f82ffb6374641817a466af65f5c7d83cc2964e6cb8efd021e0c40934a3ffbb0d91bf8a7a616dbe8d220000000000000000000000000000000000eb37cc9d56fa0dbf050b557aaeec76f9f6d0a6c448ea298af78004e41ecd8a1df8fe8640e77cb76b593ee17658326ff00000000000000000000000000000000092ab597967544fda640b145edcb3ae6c3f027c2111dbc282ebdd48eb93287ae4729cb30e45c1c8999b3a45b099dbf0ca49344fe6ea9274a103f323f3d9381e91ae48233dd579944e12afdeaf854000f00000000000000000000000000000000124fa4d48ffc5732fb21d465b559e995891fef98370a1eb73c9264988f75caa93fc134fde7f93c794582ba5cbf6bc685000000000000000000000000000000000b71d012abc1558e49831f053757518643ae04f79234fa92023db9c5483bbd872d24eb87a78960f12930094c4f8fb70e000000000000000000000000000000000651cf0016efea086d98e5bda8e1959e20e4947e302eeb021d196897cffde3e2c28f783521b2a28b8de1ad1a131f5e67000000000000000000000000000000000555ff8a930cc11d320afc3e0635a6f93da1487a5764d56636be4e5803d740a73d84666f6141ed5ee6b778a463823fbeb44aeaf3ba8b03e7ef7201415de7365365b828f2c1a38d09153e51432d35b9a7000000000000000000000000000000000974e769869719f0ee30895df837cff50d47382461c557abc4b8806b04776f401b76a5e630a6ccbd3484980d03ff58d300000000000000000000000000000000098157f0190e6bacbf34c20310f6471166750ea1b235e46a5fae313f90dddc799f21548088322910bb0fd7e41beb23450000000000000000000000000000000007f00d7d18719db9d91e2c32f51083b42c4fcb43c38087f86879ad6bc99600d4c395586187d26d041ff49dbbe517fca2000000000000000000000000000000000510cea4a7463bc5882d0cc25fa967a0b02072627bd57f9a5863fe5255953732846d4907fa301789bf02af9c1b25211c53961d33104649cbfccecc7eaf33b7a2a486c77dca363ffc9fbc9ce4e8c1adff000000000000000000000000000000000bf264c0b7bf68c595b89453ebbd7fe2e64f4ae2c7268ad51f4578c35d48040277f3dac9021997af02e492039348efaa00000000000000000000000000000000083a4fea41cb1e02e5002259f5f7b335c81e15cca93cbc884dc1b08ee981c55f2dd3c0db1a35ac9907435edd7f0ba625000000000000000000000000000000001468e508a02ed7b61f752ac38313345338d2b2d018f719f391c0f3fa1dd1602d9476f3d8829720d17021a459a2732e96000000000000000000000000000000000629edb2530c38ead8717b289c08036c12630cd8c9ae875111749ed893b8cbce40bcaeaf13df4044147bb665ecc2319ea04e97c20b42dc265271740f27f1a833bc5b324bcb843a8f9f8a68231c663d57000000000000000000000000000000001635830ebf227be126e13c634a84f3649d498e0999ad2dc73b9c7360db120dc2216addfe18c00676ed185efa1e789d8c000000000000000000000000000000000471e3cfca449bde0ba2b1e2a5b63d53badcb34da3251313190a35daf694d70ba385976d1f875242386fc74ae0173d18000000000000000000000000000000000986cf3f1eef587bcc70f66f25c60f353e6b15bd105fde9254487e9b522159658d0fc6b6a8a3ea38c27865f1ea4d76490000000000000000000000000000000015a2eccb9c10bc273cb712ee04bef01a11e486bc6a4d220a0f653582af6ba1bac0b5108250626ddf126f16f4015c9d2cb688426bbe9ae054acb6c1fdd4195f8a113727f5617642a5b3c0c65566e22527000000000000000000000000000000001213cbd035615f09189171b3e22630d72df2df93fa8c14427bb00c34f5b55bc8d1b1a59404bed6549b582537a397eaab00000000000000000000000000000000161072d8ebec2841f0f34cb38a3e1b2094a597640a34178ee951e5c993646ecfc3a4c0dd753e7e76f3a6da5a091f9f7100000000000000000000000000000000077e9c95b6c6f726902392c3a16b5cc71cd9d4cec58c00eadca6091e45bc095e53006ce8ac8827565e867531013821950000000000000000000000000000000018cdf909bd9f38e57ee24c0f51a5f9f703eb3d190dfbf75be00969e9e8f8fee331cf32d93c3a956d12f374f8752c2c79cf365a86a8d08db5cd95f239a2f3d22279556975ecc3baae0b774b0323dbb1b6000000000000000000000000000000000cbc27995eaeef2bef14919d48a008a0b0467856f8a6659d6e68e47a2d9d41d217c5913aa1d67911325dbd4fc38e36eb0000000000000000000000000000000010639740654bad5c4ec93f2496f4dc54a7642bc92ed03372ad4edc5fedcdfcf37158d3f02279d4e15078e9d5a7f8b5df000000000000000000000000000000000155ff4d6dfa031b0cc2f57df41c1e1b1c81bf5a5cc1e3aa93920e93c2e2e7a71b56ac410a87855400025badf6dae8e60000000000000000000000000000000018e637da048e7e84b9d1654113978fb148a54d86e1d011d7f5a86cd4f1e5bc15abc5b67d00129f53c0c021cf933f399c528715199c9f47fd6337b6b0e807e230b1397885fded024431c70e453f55f3650000000000000000000000000000000015d8f6e47b8f07b3e07ae0952a7c8f79519ce2828e3e26b284b8f2fae7432b337de17089b5c32f0081ec6c6916f2f53f0000000000000000000000000000000010ecfcdb02cff772db667266cb3f99f1dc28004ffcadca7a9c64b3b5853c09b7793ca0aadb155257bd64fa7bccb390450000000000000000000000000000000011096a52f3272955947304ba037e8b3fce6b2f07f2352c08d5932f4d2306ca511a74dc044d0f0e1e260ff40b0fac5e0e00000000000000000000000000000000130facbe0c1c6d077e9dcab647a44b049a1aba3df500bf27d1c268f71a59635e702c9ee1bdd68fbfcff7ae5b3e6bd83bc32e8643f38f8177b788b8c2bdc25b668308d914fce35c6f9023a769334a51d1", "Expected": "000000000000000000000000000000000b47d58802579e662f34908a4060becd40434e4934ff58790df2a69a759223ca29f42e658ab475cb92bd9c46566811c7000000000000000000000000000000000091d3a4c58a669d3bf0377abfe28d1817168b2a86375928d95df3459c83334669a59aba95ab2b9957d5ded0bd8925910000000000000000000000000000000005aa9c3fe0067338675099ee32f93bc8a5e9ead94b120dfa391651da40cf1ef5ff79d193b0b14b5926f10660aca6c11500000000000000000000000000000000058200992b111461f4d737533301734a5c3731c9f2e7b55e18887ebff4d5b74dbbfd23773606f54cd6a930b85b89aabd", "Name": "matter_g2_multiexp_84", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000bc3eba5594666cec699a47fa13ee74722a80b4e5a1b28553de37c3163f2fdb8b801e35a19f6d99cd207d1642c0d4ad400000000000000000000000000000000104b334afeab36961824611f0fb58bcac55c9d36604ba73e9c8809085c019bd967cae7147c766df6565ddfcc0cd5fc9700000000000000000000000000000000026c3a6a4ace8638bf8ba7434b59c3aebd4bb274cbdcb898ec6a547b215f32d10395f3bb85a9eaecff5ef6d5ef2b50e000000000000000000000000000000000065bc419f9496b5e81ce72a13fc1bdce4738c2e3faacd80676be31db65ba3e7941ea75e370b6d6c0e7b2cdcce80a2fa14f8bfa3d47ed33a05fe3da738797f18ca5d5b8658055de5a9f85bafe6078f7fe000000000000000000000000000000000e7f1f5ead0f212439b4c47599581982712d2e6ba056f36cb04033ff5eebd81b5b41b874a78aeaa98562899418ab04c900000000000000000000000000000000095e45da9a4b2578cedd13af71e289d0067ecca1f09c014a294e0b250d1e8243ff98a9761030ac855a9d897cfe9fafdd00000000000000000000000000000000030b44b150d1337a3ed6a77f7b6332d7c8103da1aef0d445ff7467b4863e4c830fb782a81d01a6bf97e8d52bf333e78d0000000000000000000000000000000013bb76800375a45b847a96ef6edff3fc3c30e3d45bb4afe04230107f6a1802794e1dc23431797bc5e79e0d5ac6357eee4b0d302be94d437b8055586aa77ec1fe616e30552b4d7d3471ea219c148be069000000000000000000000000000000000602e0bd3d34415ddd517a73acaed5750dcfd68b633d51003edf79a169ad7a3ca2541d7a131c317c957a9597a753b5080000000000000000000000000000000007a964539081fff51e0ec24bb71257f6a1c513fb0047aad84b80180b22133246a1f62958ead75e4b2a68f973d17f1230000000000000000000000000000000000f48fe0f5b5a95e48bde4d8be1b2f352d748c1201b064bc88309a709b285f81260d4535d3e1dc7f1d6ee23ead35abd9f00000000000000000000000000000000135b480fc8a72248f7a4898fffc6c18b7f2f5b1af5cc3846610c299c8da252fb71190d9f761e037c6b47595bab6a03e56765d7f1079b142e513e604d577e7caf82cacae59fb98c6f8990522372dc906f0000000000000000000000000000000004773cd2884e52c2551c1ea0abb78fa17caacfffe13f18b75588484b8bfe781e623075bdf827fc82c6ed7e1d4d62081d0000000000000000000000000000000007e6023fc0e409bfc7d0b7ca65fa0e8d88bf1b4c202a8d1f0e1c3479b0963a646d16795fc5a128a54e624357050fed4000000000000000000000000000000000039f6eaaf99bcc9f4d8fb994a040af0d29c37960e9015d4e48466a9e554da30975c5534e76a1f08a55ed8ce7375b70100000000000000000000000000000000003d2b097d4afdde83a01cf2b4f9d12f77c8e92a8cadc225d40f974ccf385ae65bed1972a365d55e24231d58abed4395a2eeee02d9309af8c74c78e21836f4e6a7a6df5406617e2b4e9d300e37d8a2bfa00000000000000000000000000000000047b8c550310ae246e43b513d39e507f1dace7bcb543a49ae0854a397f62c408ae3632c94d172669ef3e013781796ecf000000000000000000000000000000001592914e260afaca80c0a240426c2828239ad5e256a707530f49cd65e9da2e4bb14a7d6d5978f52c04130a0d434cf4ca0000000000000000000000000000000006c0b8448ad87350db130373778d414deb738d3be97fba25c816826f59e3e926f44956c2e2056b7d769278cf56cf6fe0000000000000000000000000000000000a42d716fd83071bfa014a9b7af6c164d494f0347aed953bd2c1c97ade087a8bbea9f53c507fc0b22d520f28cc5d480cf8449caedd55f0a08825cc1a9e985201c8a7a54d1c4dd96f0ac54214743941810000000000000000000000000000000018026c9f6c86219d0be88955ce0afc3cb637b1c3a531aa2722c56816d368688181ef2fedf1525daec6d9b1651b71f27c000000000000000000000000000000000b40b15bb0621209bf9e33ebc27a7502d90fd3af62a1bb8f54a874a14c105df34ae34a43fc3805c1e4817ba30c048ac7000000000000000000000000000000000465262367e30ccc24632d39bf3af9cb160e97049d855176f665a185c138d5c529d11e53e56c65506e3e30be7b48c6730000000000000000000000000000000009485991319a311052d883b45911be12cf7648b5ca104ffe77594472f7047c803b8e9fb753b98645e630b9913bbc947e28ec5f9dc48931da70ba0cfa7251953e24c4c95cd019e00ac6fda095c1302a01000000000000000000000000000000000fcc0aca0d873cb8733ff7e2ea02b3736b737821af2db06ee6508e161f6159f9d944372c513a03cc4c9e30a707dca0930000000000000000000000000000000015c3774f4e0b30c9532beaa2f7f9b777f8d46bfd3888d6835f4a5a046153a98062efb17f78807fa17b3a995ce720c0b900000000000000000000000000000000083d48e01d2fb58244861a74a1261063f7d20b412c8a44f9945fbe373cb4b9a7ffd4c4ba4054ece0abddb6c14c013ceb00000000000000000000000000000000133c4976454b7be427c4c2ed437bc2e882854d2ddce42d2f97cd3fab1fcf60c3272aaa123a0cbecce1a774946bb7a8a0dc6046b43e6982f11f39412cbdef14f8e330d37fbe6dfa9ddf3656b86f4f60e7000000000000000000000000000000000f6ae7de1dba3b3030b208f61d182013231c4666f134b007b52d36bceb6f3cd77577be7b11abc097cf9618d351d61e270000000000000000000000000000000005803904e3e640e51900805f930638ddd8b86cc1bd50cbd32a142e10d85044cc52ff769bf1b40dcfb7269c913d00b01e000000000000000000000000000000000e6997b1f8bb649c56de5c4bf9968d19712abd22fb7dabee19e0aebd1b13adcd3e8b202975b4edc917d93adf087fb539000000000000000000000000000000000a32384fe03280962c5f575b47192e5ef3111fbbb0a01bda2db1e9733471f11eac0a37df8ae1a891de311770c482c06b0adf4625ec80149b7810767c985c2aa0187987b3649cab8c59a892404ff2aeb2000000000000000000000000000000000531fad86551ac6dee15fbd62cb13f38d8d5c89d23a031b9977f110efcf16501534757bc5b93f0250ff02d6cfdf2009a000000000000000000000000000000000e6d78343049a68514271fc785de053ed7f50a7774b87f264c42e03e6f8f86285477f8cc57ae066ef0fde237c8d1ddb30000000000000000000000000000000013e313484da4d6b85634c5306444bdbe45d7db823616d72821eb64a2bb5f352a4f7e4273fb6557039fa563ce1b091bea0000000000000000000000000000000009a40a984be66c3442fc8946cc42eca722187dd819be9ab34a9c3b4b0de7de3d5f126c175fe84c51a6f09e18623214f9345fd17367ecb06b29d764b22dc1e262ba1a339b6f0e0c77384245e3d41cda970000000000000000000000000000000008a76db551280cd43d4608e9fc629a021675bfdf9bc5a021546b92f3734acff1e97928850716b94d15b7dbcc4a1e0aee0000000000000000000000000000000000b2262872c268782e8f27ee8fefe0827d45131555e755c0a65a7c8b4185269bd621412b653348d7c1111d681f38d946000000000000000000000000000000000dabcf0f847045e01ef70ceaa32455f4c962e4657b840f97a1cff7cf5073cbf4ca8ea75a4887076f155e27e8d7406c95000000000000000000000000000000000a9c0ed94170eddfc485d9f1a770a8b493d4a59bd7156d6cd4b95b55bffa1b597ae9d6fbe529dc0833634d75906a4aba5ce5e62dd15958e6298cdf4a4e899e53644a48494d04fa6d1f73f2dbd645817c00000000000000000000000000000000170ac69c2bf9b48715f445524cab902b18ce6dea7b258481cc59986ae61c8fcb6708b1457be299a6e2f6f34dfd936fdb00000000000000000000000000000000107e855593b6f3bd2982a65167ecead47039065c9ae6e1bf963f81d441f0ebb411eec4b3ed1cff73044f68a4c114806a00000000000000000000000000000000063b470d158ebb4828e875c3dd0ca29a4fd2cd2af356233885a871cb5b77402090f29709c6d6a78f612c8ca4df2f4119000000000000000000000000000000000db75a60fa0b425b8cd2c955e21846ce3c407cb3f96c472cb412498143cc60212de0dfd0bf4de53ae3b345232180b4ad853396021d32530351deec5c266a65519471dce2087485781f33a1423755ef38000000000000000000000000000000000389e79154f627463a7966252deab10b5e809b0c2a9e90989c56d4076b834e2081ddae1c02a9e01b71d96b772766fc680000000000000000000000000000000009109473c7aa614334fde410951a69ac45967f7550890e01b05279b6dff394775dac51d583ae0aa82edda18ecc5e66240000000000000000000000000000000019dd51ec6783c1618a7f12298e38cc75d4fa32fc31438f67eb15419a2f0e9d4b5f70ea59b69e531c868475cada519569000000000000000000000000000000001121c7a6cbbb54d5e30a11a73c158237dedac46385aa15d93592a30fb64fcd94a674cc77afd21a611f704734337905596dfc62eb59bb84b3b6599bf3ce7af229096a8fd5925d4743a5ea386a26c9a6d000000000000000000000000000000000178670fb06f5eb8a4f182913f46f66147deb3f9f634d620ed55da2ccc88895e75f76f55b979e1ba3c3db29710050c7bd0000000000000000000000000000000011adec68ef139716ee081db7122e911ec5a6e1fd7f681a96a713dddc2b742b6e7cf7485b8f45e7ebdec8b1174c02eaf100000000000000000000000000000000089dac9a47cbdfead8536d6cfe8b94d316123bd92ddf30091e16711ff4651c4e2d8dcaf6c72bc159d7de9fd832c6f5be000000000000000000000000000000000c40b871930f0c6826a943a229112f8bf9a3b7d7e07139e1a7d99f97601b6ca8cf3638e0265743dd732cee17fadf996721d35ee6d29ee4816b91d1664b5957767b4b8066775b37c3b3d08729c949d6e5000000000000000000000000000000001040c4cd3c28a752295b115fd80c8ef0e538e1a3906e0d326e46585d633140bd6b8231f50d50c8e7a9018a625c4bdc530000000000000000000000000000000008b966d9433bfc3bede4ddb005cd0c256a168437c31b8ecc83e6fefa6f4b1f2bfd057c78f82bb76279b74a2f7de493b5000000000000000000000000000000000c0f75db7a17e4b712666b16c31b10bb935e7127eb9a0e59e35ec54814a9de9012210ff1862aef5f765d4f7f673c4962000000000000000000000000000000001015e63589a8b56aa643a79c5a433dcd8f4933a10edc9921bcaa7098af435f7879a40868e25d1ca6f7852800df29c2eb3d283067bac390f556891a531dfacfc4795358229bc9a651c0aa71d601bdd56d000000000000000000000000000000000fab22ab380043b01d312004057488ffc958168f8fe4d9c86af622030121e14a46c4308d711d5fa9a414b9ef75d51ba300000000000000000000000000000000047c738fe5272e695f421ed463ce0d6308e05c23b6bd0973df9b55ca96d89c0771a45d53b4d17f30d8cf08edbf94490c0000000000000000000000000000000017bcb3ed735e5a302f76002ae82f4ac74889fa0e966f0fb611fa6a6a09440bc923f447eb6aebe47eef917753b7427efe000000000000000000000000000000000b189d5b64578eb53ad850c826082265e506ab620a9ab9684cc2a53718f26befc35e9431af012306a6190f144a9632bf873724ba35e4e8b731db36f5067aeafd33f2e966977bd0962fd57cd5ccbfe87b00000000000000000000000000000000049fff545ac239696c995eacc560580a0328af07376f5ec819902e30d5e7e40d5fe07295c4ccf54d5c06134370373c1b000000000000000000000000000000000bff448d5ab544a8cae0cacd216a6b6d48f0abe1b4bc946d95c1a8c4ae44bf049c3b572675a5e20c1b4188fa27a867a70000000000000000000000000000000011dbc52baa00712f66def2fa8fc77bcb07431d3285774e2517dcca65e611f07aac265856cdef0c1637def44c382230fe00000000000000000000000000000000090af0898dd578123c65d1f818c3f33866e4acea19aeafbb31bd8da029ed1daa2d7ab3b22147eb32a09021f7a78fdf2acc5934c02b63797010cc8474e90fa5dc88d73dbe5f9be605bf335057fba47ea3", "Expected": "000000000000000000000000000000000d52fcbe9f1776477a9d2149ca55e0651fe9d098a67209ce2e7d772d4901ff2c70be432b53dc94886651865a81ba8c620000000000000000000000000000000006b54871379e2be969f86c72cda9acab9bc99f73de987f17ab8b25c63c55ffa2cff61b87e8c30d9f712afb62a2b9cfcb0000000000000000000000000000000005652612b19c38650d1babd4772722ae2c560e2914f2e246725cea86dbe1275a981a592eb55077ee4b7c6090e84d2ed3000000000000000000000000000000000ee37a6d42ce69aa67cdcacb19efc230c6c34969a2e081ac77e8f9d45128a6e8fff923c7647a0f168fee18342bc6d845", "Name": "matter_g2_multiexp_85", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f114e56d10dba7945d125fe1ab7871d9510771548d8388a2aec8a481de92572645b73631f9a60285c3eebcacb3bc0f5000000000000000000000000000000000667d3f31955df11e4e7896a1856fbd4e573f1cfc906b3953b5806a5d01dcdb96009d9f148156a3828e822435f722c5e000000000000000000000000000000000d7740ae776eb4766999f5671315c8965ccc84ff71757e361fbbb55babeefb96265c97df8892acdd6a9166641f656e62000000000000000000000000000000000166529d1a76ad784557384cb971728dba298baacc2f2a39ee36516bc7a761e9a7c29e385cf5784efb9f6e60e998b01e864a1ee754f6b0a86923e5501d54e6f47d7ab9e1483294ce98be13b7db52937100000000000000000000000000000000133e0b08430d9318d98bcf58b3d8f51c7b717fab56fe25f434bf521f830c7d4247d87d3df910490be2ad38adaa8eec26000000000000000000000000000000000e15afaee4f1ce6290ddfbc13cb887e540efc3fd8150dfbf3a5e7c759ccb8f334ba26953c7bbc43b5234b857159f6722000000000000000000000000000000000e4cc685524d42ea5e435afec7b3d7d025e93ea06407a28c246a39dee8ae77514a0bb2d5031f7367d658027299762bea0000000000000000000000000000000001b231237f7b0538d51adfa4ff92bf313507996cf5255f191875970ed4d946cffa8620b44045f4bcfd8f89baadd331fd93064d187f7d21b8b0a7092943de13b96c2e1ac9b578637a6e64331e2d40f53900000000000000000000000000000000084128f1848b2b244e4812eccba01287b9d07e85450459c8c42b01180bdd843058d9926f39e2fb5f610651a00233e31f000000000000000000000000000000000055ee70765f2cccac966dc08abd4bba0d004b379a2c6bf188f300f5d413f84e77ca1d462219bfb820d7f585b914a52f0000000000000000000000000000000002dd8f1d1cd85a5e6ac793f7e1e3cff887204aa4a5fed92f2088c06eae95842ab2c04d30d56f4b0fcfe61379e8e7c6940000000000000000000000000000000013e318f8b6f4165a8096c76ada440154901de42d69c38e66d9df4ffe5476666ecf7068e7163f29f04972682c43f3b0fd5e676b40c09f80be5d9398a9ec20cb811cf6819a130445203d792a4d34fc3e950000000000000000000000000000000003415c8bab713aa18d3f0d54e0101ba36793e6e9dd3471f8eed9a15e00d8312732a9ce88b5f0c30207aed92eb173ac680000000000000000000000000000000008a7e145e9576be8ba2fd980fb1735a2b73d1bf5f3e108878b721b6ed8378b5e0f03ecac179a6d148541096ba483b40200000000000000000000000000000000029e5554752db8bb87d58275268f24ccfcf3e0923744d57473d54a72e2cccb847eaa8f3bf638833a934c43930fbf30990000000000000000000000000000000000e0f2ead2697110a132c4ce1643b97fc652dd0660deadaa4e0c45e7ebfa64cb6a6fbbaac7c4e2b725beeadf6881ae5893f63a87972dd11f5239c35ce269e4b9239e3ae906ab117f1f045d3acfd16ca00000000000000000000000000000000014325fcc087aa108f152b42759cbc02cfa24e7e7cb995c78ccaa9a283ec2029c08cd747d599e0685d365ee99eeafca880000000000000000000000000000000011da603d3a1128329af19e596ebeaa4bad034c59581e9fa2e42a0260032f84654bf5ce22ee32c34eed7515d7fb0fade0000000000000000000000000000000000189cdb5b934cc1ec7ea0cf4b8158a1416712bb59c1650e6d244de33bebfffd3691b499b3ff8255b1b513deba709f7d3000000000000000000000000000000000e7ab2b279d0d5933df25d8fc4faeb8ca907e7bb8588e618b92737fcb6959380abc205118d2e3fc128b89a2ead5ca906145e3456d5ca6aa5910430e5a19567c327b757377aef98c4f46fe9a1f52cdc5e000000000000000000000000000000000895b6777e677732c74cfa82d5348c4c8ddd63ce10347836f5140b9a64dfe631804ea3be8e20bd4438f5e7fa14a121d80000000000000000000000000000000002422cc4781f007f732239ff9eedc126777d6ca0f0365dd90bab6b68c9e3d02ce726726a6d30d7d51a1f0b45aec1854100000000000000000000000000000000048af8a79663aefaff77a934f0af3a09ba02077c13a794ddb88e5c679ce348b3ab0fa217954ce1422f4e212d1383ebdc000000000000000000000000000000001190fec6c510b0b16e1505f737b25dc2401e9fc2c95bca92aa5d6e93b284b766bfed93a80b137e5fcb339983a86acd41ce27de5d3a5ef941d058a458f3ad2a386f1d66945789e51fa330fd65da4cd5080000000000000000000000000000000014fbf4d005f43563fb7408d1f20f672c8983120c66462ba9156b64a287e66960fecb41ca129b6b14466a5a0de91b81c50000000000000000000000000000000004fb283724950174d60f64af7bc8a7d059431332c8f17769df33f6607d72633aae3a8d595cb8d5af3f8909297844b3a0000000000000000000000000000000000e187476a19280ad9f33a55c50f37f765e343f92938e247ec9fe099c7f3df65e24af14885539bfcf3efe3bde9f2700ce000000000000000000000000000000000f086e6b9e845fe3b0c5100f82bc8aeaed166bed9fa4d34bc03ed86342a997101c508a4c096c4f67cb5791cc1a1fdb8187bf5c4624e86aaead712987f313e5db8f2fe6787fc33481ed6e5c4d3e96d5be0000000000000000000000000000000018dbe48c54347635d4b6bc17ff5ba390a73925f1b180d2c516eafc0936aa9bddaf7317cc0c211fb2a7f7bb096369a45d0000000000000000000000000000000015544c177a4b8018ed60c2639b43236957c2d995fb0f32523654584b0bf052e0930366a93406e1ec5c6d2edb955e811d000000000000000000000000000000000802d2cdbc5e15b25c77ded4bdba087f1d5760e6ebf9549a37f3314b1e88d3d6f58da9d8c6e9ef85028a271b83dd6242000000000000000000000000000000001577bfeaf213ca8b0983cb178e9634dd18f74baf02f6ca31b2e3b287d80a32d4cf11afc71df09ca5bb0bc8e60fc7ffa968cfa3fd0692c9ce56538bf70e77e2a47534d9472ac702c53f2dbe68217d53df0000000000000000000000000000000007c059044ce0c15bc527b19ce85cade8b1d5a9cc6dd304ce9a3c461e631e17c4feec52a0ab5cfab6a2270c75f73df86e00000000000000000000000000000000076344286cedc8c180e3bd762f12ac08f0ecc51293b9f9b8e7c0056ceba1bbb6fab4ee39cf559fdbd601db6c3d201199000000000000000000000000000000000bf6e708d0a4fd85c7566804e19f21f7a00bcc3bd7135f6639ad30aafef2ed1e72c84c8995b0e59738c2bf1e4040621b0000000000000000000000000000000018ff3d0ade15b690b6e306adaa5c10796b78ed7f8a984f637271cccfd39fd17c1e8288a11b051ca94de2a9bd04fa96d7a36b13ef742bfe88882a4e635b5fdbd9b079e1adf3423dd4962835c68c9617c500000000000000000000000000000000025cb808922f6deb0bed979b80a675d9324cf25c53de373534d771afd919a182af9aa1dc26a2d0284887121bf4d6b6470000000000000000000000000000000018970aa4f456c1b203817322df2e222516bce67ff9ace069599061c6229596e506c0286171f3551302e45b7d3b69a39f000000000000000000000000000000000a57d0da60f03fd4a5664546f9809c771ab6188aca5102c31f26b09950cadc26b0275417ddd9c4f4cf29794b739733cf0000000000000000000000000000000004ebf2bd93d7921d8bd97ee71cadf91145e064a33651da2604ed6fc8e08b1b8305005f12fd4e6b68b7b6a3b5cf123b1324c54daa7de8446e5a26cdbd6741cc90bfd26c544fdf221d47d509c978723c3b000000000000000000000000000000000c8ff29d0333e3f38fd8af91ecdca49e54ea5dced71b60d693b1bbade99ae668e4f994f7a5417a08a8ddafa410d437f300000000000000000000000000000000078ac1d0898a9e6cae29fe6b50e435e5f543d0ee233346728c46d659c4338295f27b42fc4b2851ad5035feab2bea8871000000000000000000000000000000000b3a566d2ef4467f21c27e4a3dec99a26c304b32ba1fcce8276a8518383a7de44de5b4011ba738dbb8761e67e36115560000000000000000000000000000000015a0aab8c3d51fc3fc8aa35dcd07f8a08188976883f9d3ccc87ee148525f2115ca46726a2e3c550167c169977b216d6217ff7a416011549f144a3a65238d62395f4f76afc09496902c064b27739c6d0a00000000000000000000000000000000115589e8e1440edcfe72c008f6e9cdf13fb7baaf70aee16166e7f32f4651db784f4c5cac15d91ee13001169fa777f0d00000000000000000000000000000000000f86710678b01c8f648bab2289e8f90648d9470cb13d5145ade526696d22508a4a59164290586c2c000dfc55b4a20350000000000000000000000000000000019b300961b40b0d9fe6e292e9357d04f0483ab3a8cc6f8f522153c51d22de8e96a812adf720d13ff7d05d1e68264638a000000000000000000000000000000000a80b61ab051ce413ec838167fce393f88c8a25f403bdf07cb60391fb15306a5271a7042d36f7c46b5978106a7b5293c4615de9bd7aebf1acedd9d40fddda34e4a85bc253c5e92c20d984f6c4cec533c000000000000000000000000000000000567c33d22805319418cb1ea7eca6205a6c44f1f881c03e37bf3c66a1baa5153473cc73b8c25d497b0b0057ceb0395960000000000000000000000000000000014d7a2bfeea6a746e709f6108eb32581ba38a617e4450b3567c77a992988d91f4da31b209286f8e9fd0d7b8628aa6c4e000000000000000000000000000000000ae6c9fbf0e06f2e38e91699cd21596ba90f92f6022a4f3c7c8a6557b7e1331283bd4d7a7d31d77d9d7cf70a2945ea1600000000000000000000000000000000066b8132c73e1da8ae7fec9169770a188b686f223fd0306441356040bc9070f34a47fe1bb8c94de9fd7606c18b1d2b1dd38f1a0417a5a366dd2d8f5ce229afb6f34c1b663ad6eb1d9ff12f38412f00f7000000000000000000000000000000001460040d0a19c37fb0736ebdac0324d8a38c94a73fc5f602b7ea5b7255be9d4b6ffc22fea5043d948420e9ae3476f56a000000000000000000000000000000000b37c0078ab8babcefa8874c6cd1c5184d713b976852d087ed84337073fab3054899859d0fac2f4351bb75ee0e534fa70000000000000000000000000000000004150f3b98e6166d9d6b0388342042dd8eff9b8e1239f479330b64c5b316f98fc7bb401b737efb87e1f6663ca4efa26700000000000000000000000000000000043e6131c1ff621fd6f8caf0939487a927550343e24425ada33cf622de757e6e75c9affff9f04373a954557181641617364da9c6b07aada98107447afbb189626180c5eef31f7f2cf26d5d76ab0c74590000000000000000000000000000000009fa1754bbc957d2a8317a2eed859457073571379cc7c6d65bc6a0b5829f8142db77654eb98a2bb0cfa5223a27d756cd000000000000000000000000000000000cfe8b8fbbff7507d3d74f4f550b4c85e19b8929d3728a462e12b4008c79014103153c69ed8dc6b743e1b6fb4720bad00000000000000000000000000000000017ca0c08c320c12502a1dbc841425694bde68b7806eddbb40702e58ed26c7e112f9a821a6c67afed174f51896ec2287300000000000000000000000000000000014d08df9cf825b07a387642ac9959e8cd15ea8e752231a3047fa30816acb1ecb79f1755484af9a98b993f50128c2bf5031aa8d860e3b598ad0c4e9f93f26d153f8a8d8d0dd614ba868ed055c517532f000000000000000000000000000000000273b64e867a9111e257c9b32484655e4d7e676ec50f174d9ebc9fc4262c037b176ada941dd8c1abf645e275dde04f4a0000000000000000000000000000000008a63b9604e96a5034d92e3790411f3112c2c7cdaa056f9f1bdfc0b164c37fc9f58dbb566337132cd1626f9ca2618f800000000000000000000000000000000006a661167c9fb6c26bfe0a3902f309fa683fd22729bfcb433756182e7e1a406bf44ae1d13ef0228534881daa339394e400000000000000000000000000000000193c6c5ec200d225c43c6e37cfd15e16e49b7d87e5515bb7b4c918903966f4f6ae0d42af6b98f6efdedc9b0301fa1c0f290c467c4827c9252b82ff523633ba116c52d15df9cd4e3121ff0e9f754ced5f", "Expected": "000000000000000000000000000000001403c7e3059135ebcf5e752011fdfaf66e348135314f3f4239b066e1c6192ffcaf89bad4228fcc2be19a64f4f5386f5e000000000000000000000000000000000aadbd8d0e53d5b409f7fa508089337bcf36212a3f613b37a95757793dd6b0ca99d1b3578ad8020d46e29c9c4197ea070000000000000000000000000000000019e43bb32f92ed187fc32d9dbe24a486e38316a3cec0fd7f7c19b313af43a10fd63738b78e609e04a083de6761d53a90000000000000000000000000000000001490da7d36ff16304b27f6e57412975497e9f3a6d35cb162464bcf69fe141d34ae27a33afc75a2802eb120e90d4897bb", "Name": "matter_g2_multiexp_86", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000038ee0c2c409d8832437ea450ed705589c82791b8319fd0ba6fb4d302d3c5b73ea0521a0253716e5810f03fca2e9dc720000000000000000000000000000000018c9d748aa685bf6e11e6e4b6ad2290ceff59c8837a088b41a08983fb2c5ef077adb0730b298c5df9aa02a820a19a4bd00000000000000000000000000000000015d248426e362ad2489c0c6a567d80b22d54d6a79e198198a771fae4c4e97eb317da9feba8eaafc9460ef45b1a5e5690000000000000000000000000000000005a2342412801cb37911a04d7ee3b1e5d3dce2a06e0658d59f2ddcaa9ba32804a1ddbe8f4d00f4436aad1346ed1ea5344aaa57782608de34c6334ce5039c67767f6da7b315dcfc772f03aaf3dd1e67b90000000000000000000000000000000019d49748f05458cb9b316e433b0d341e23bb5aaa724b824bd147596761c11efe8f4940eae09e302e563e14e96b814f4a0000000000000000000000000000000018011e7ee4988da168adbcf81cd14a9232edacc06bbfef0fc78dc0f96b5ac86ea67be8661442b5ef60e3889f3137182200000000000000000000000000000000175a2ae3bdade6551b23656c16884ba0fd4247df4ba7471cf81022d7e224b23490db153c8289f95467ddf9671f8b6cf90000000000000000000000000000000013c58c0f55c46bced98faf3865e3b6a836252f252e97b6d2a799b574dc569f09ce33082880a4d0c3b8a2c7c0d4c30eae22c1cde67b0e8ec7217c6ec72f36d8a1e73794297819de9ef6f1e52acbd3ec4a000000000000000000000000000000000ee45d5689a8ea6132d5ace000699a157c1cea3c0c98b38d504153d64fcaf1702ac7a1cb0889539d6b15489fef415aef000000000000000000000000000000000b320e0cdedbdc1fc5733488e6d2aece6386a030adc36b0a69dc3809827319947049f3861c2edc859797d30a3689322b00000000000000000000000000000000194096079b3a1d6ab1080dc71bf6d5734bc7b5e7f30bbb0f9b95c9495a6bc4adf76e198fc66accbbbaac215a8932d8c5000000000000000000000000000000000ec07be0cfa9b3d3a64c016471d9e6d25228b46dcaca6e197be00b9ca5087162c35f1d6326a3cf83f568cb06da8c5220895341f4363b688c4e9660fb0cd17f6c111a5c92e732205fab0d0da0175f6832000000000000000000000000000000000a7f3a3fcf2e7b0ada6d4fce179bdf229454002f1271a39d5e99daae72da549c6ccfc7c574f35bb9784100675c30b1120000000000000000000000000000000000fad14ab095fa09bea919ada313727e7aa5aa06a1cc7746d006e3eaf70f79c5e4001a8a8de03540b45e0598b22710e00000000000000000000000000000000015345ade62c5691690c181da09d8f39c1ead42046987b8c7c975d40690a286a816f8cca519731d0ca23349c54b30d8570000000000000000000000000000000019f0a32361bb6ecd8b1d87c2e15d31c0e0cf995eac9facd5eca123c0799c465f156b0142d98e0f315e9b3595974a7b824c5718fed7503c5e2a97fd6ab0294d6c42b1d35067e9d5ec1077176a4bd3126f0000000000000000000000000000000017af46e78904915e348734d2450fc6e1938bcf002989f855082e3b4ff3366d81ee8d28293609c3c3b11568668b1305f80000000000000000000000000000000018b0b3859763c2654fc00792a5193b7317fa5051bcfd15ea42be2fda0f43adf322219f34e54b2446ef73a4562151f9a70000000000000000000000000000000015c23509a1b324c649ff878d004ab5f253d041670ef172ec4dabec7a525d5ddb8f9f62f383e3f71b0e9c98532e247d560000000000000000000000000000000003a38564a55fdbe05b047281fa153f736edbf48c901749005473255333590f967171a6fc88751eaf57a5335bbfb6ebe86d055ad484f5054e8bd0d073cd556deba05418ef1235d08ecbf8717b550933fa00000000000000000000000000000000100322c4a92c136437714a6586c82a6842027ee218bf1fdfffaf95ce47c9c8b6c8f61115b092dff81ff2e645d0a7a4340000000000000000000000000000000013a91ed8629acb5e770683015c3c248255d673d4b2e6c96334d1c80326d1a8b4b655c81175e4a914a45fb37c1f178bd10000000000000000000000000000000019075c2eea3f64f42be82fdb8f83f2c68c08e858702a0225d869143c0b017b76a7a40d809116ffbdff6700b288f5ca3b000000000000000000000000000000000598ee9ba9d56400b59c7f5977aef1e179855a37179fbfe97b95f19137b6034568e5c7f616943b4aca804272955d42334cccbb062c27a67ae2783ab65a47ce166330cfced1f11b85f87483e0250b138400000000000000000000000000000000025a526b137aaab5ac1b5f8179a18b06feb7c905b4a843cd55e31b7464c2b6d432b569e9bfc3222511c18255102aba5b00000000000000000000000000000000090c20c9f78a242e52daa339d5cc1c3f35aff7ab802a3e4366597db8b6ca43d30fa0fe8d9484e49fa4fd0bf5509f19e6000000000000000000000000000000000e928b2173e32e5fc9c373a2a6f126e1a3a472c01a5e87677be0d29907022b9a7dbec3340cfc89e67377ce472c2d5d4c00000000000000000000000000000000147b4eaa2dcee39b918b7cdf24483b29466120677e5d42b51353a9b2fa207bd911d9b391142a13a212d0ab38adcbe10796111cb1181f048f51349aa2953bba2af50f7b7b5d2328d435bd63a7df5cfe5c00000000000000000000000000000000007790cde9ff8af2d7597d33909f00963eafa228817de1ebf4233ef0831202700b99641318186aec80ac913a1b1143eb0000000000000000000000000000000009d42ea1386d8b019dcd26068ab156f399c35b7d492722a20da0c915f7abe44ba688d9486f4bbb44268542c5a49168930000000000000000000000000000000010611f233bc1c4af0a14e1d1b945c91c077ec3dda592e2f852e2de41e09331664e1a92f9a0b7416c50327bc943a17b9e00000000000000000000000000000000048614243262dd070a754f40652b96a03326fc51273dddabed85df0654890ff38e0da7abb8190e4ebefdd6f78a5fec509d7f0c0c7e927bed3fb930fe2d0109f58678969ac8e14fabdf4ccdd0823f706d0000000000000000000000000000000008451d24fdc873c61db44e57372d43c35a2a8098255f9aad3a6b244913b86bff6444042e391685b1244f009c5ccde935000000000000000000000000000000001177c2da9972a2b96afaf866f97dc149482fbaaa93e194803c09c8334c2c7025e08cad4f7898959a57b07a545ecf76ad0000000000000000000000000000000016f40426cbd1f0f4ca5ae1dfa4c3960a6fbd51a1b5b24ff5d03fb9911e908406a0ecf4f20a78a280d24dc9bdd1c0799b00000000000000000000000000000000194a8c55f549da1842cc3173f3eb7bfd70df26b43a3059a3590992e34fb19b2caac4149f64d442965e166225b9013e2b11ce517fad2609f2ab8d44ae6263623a7903b2cbec683570949a96fad78fc6d3000000000000000000000000000000000a97664c1d7624cae0e969c728a84130fe260581305435ff8ec701cdc51a73977f58c891ecee637eb6b7c972069ebbb80000000000000000000000000000000003f4ed6a9e9f4229f0fb35394bbc10da9adbf4985d4453da64eb312ec88cb15bdc189a3b5df1af3107a36fc001ec92ad000000000000000000000000000000000ac552c5f6170a70563fcdca8e0c6a7c6135af2f9d5ae6f60a2c459d1be4cf76ebcdf9bcd891db8a1e2fc905a23a97b4000000000000000000000000000000001734a46c99e776d1ed4b807f5b313562e0989ad5c67dbcb961c134f8b7b7601c23308839569dc224bdf7c370c4498303b17d28cbcb9efde6d9cdc4c9cda385ce598ac8468d4fc94cc8e98ca3bfadf440000000000000000000000000000000000a523182c886671435ccc75cbc78293274802c6142465acb31a1809e43b1d656ed9c808068de167b1ab126ed0f73a4490000000000000000000000000000000007c4616080b5a002fea3589d54c7510884a3ece705d27dee315851746b1ee748e8a08d3516d8c6afe1c0482b960a9c62000000000000000000000000000000000dd1bd9b4b9c140aeb97887a0266bfb5696813fea034b78bb7d0cf1cca15b5bb0ed92a97841c8d8cc614f7721b8b7e040000000000000000000000000000000012a41a8941b6f0e4c87f8188718f9bc75305d41d6f4441eb9682473340fce0bbb463e1b922d3af8daea32b8a8ac9c3b4a9516e93416bc7b0f3c5ef5da6112abb73fc285a14093ed19d8eddf241169119000000000000000000000000000000001763ab2b361681955735ae00b69f26e06469391af993c8dc6f2e1dffb52ca01e49d58d6e2249e7433ccfb5ddaf8fead40000000000000000000000000000000003858f3bb01b2393aa4d4d7889bdeb0bb9bcde0dcb9b39c4ffe0fcd0b865baaff75b676c715be275929ff4303c416e0800000000000000000000000000000000086d64bd1302b0b3a620b87ac29cac3d9e606513ec8b47898cd852bf552c1364291aaa842616b92c8936e076e59451bd000000000000000000000000000000000967c9f59c15ed02c9b2da6e76fb0bf3d445ba849010afb7f9c994b1ef6a05ad577570d4adad043796eb90e51537ce5187fed462636eb57506f870ed1c8f66e211758327f4c19bf909a6419312c58945000000000000000000000000000000000e6b0da7b406bcac2dbb90fbf430fda6442cc2860ce633ab84404dfbb426949d55ecd72992da1a2e8e1ce229b599232c000000000000000000000000000000000fbe3a345ffc8fb85cedc4b8dedf9d952c41b4ff6f1c7ff4cf91b2276621969d905aa9aae5fc89bc516f96b9bd1bb3c10000000000000000000000000000000018c2a7fcc35099c41bb851ff66abb047e2af9cf4fa9fc45f030124ea2c7efd26e594abbfc7a7f258c8081a3a80d15105000000000000000000000000000000000a27cd33c2121c9c542e27b52a13275ef7e81dc0c6ece883b65e71d2bc3e7246f95aef7c6b41eace382a1400568cf298c373d64034c78482d6673c6906553151887c8aa28ab2930659671b8cb98a595700000000000000000000000000000000158bd8e6198d22b52efb7f3b945668666e1190a4a8e70307ba5c1b737316a8f8568092f219f683c0f53f56f25745d4e600000000000000000000000000000000097e64e4553371c81a9bf553ddd9719f59b329284eca0d76f023d603c29a034d123ab777cf173c5f2bbc66412d69d4ce000000000000000000000000000000001298cd5501e136a06ad4fcf87a75c0c7b96c73e844863b74bf6aa581a0ea98c2b1f608c668743a3e37ad5ca2074af9340000000000000000000000000000000017ff9f1336d7f2152f17daddde9d3e1679cab8120ed2c0288b0908d4e2099a08c9bc6f79425f004ea3ac4d684abff6dcf29c901f9769a42610958a8cd53eaacd9e5c4656106fab536052518b4989911700000000000000000000000000000000115baaab8f0331894da531ab557bb454e2003010ba1dc1d96e3d983d49b1312585c6d4c43d85dc074b23b2fb28c8a1d6000000000000000000000000000000000db1621b721c8a54ece26a355b190af5f3e1dc1b43e0827a1912ace651cbad4b980e77a4c3566aa809157229b234c808000000000000000000000000000000000c594e0ed3f7ee55886e251deef9732aea3de11f094ec53907a843b755add8fa5d00779a66621e615ba7772ee821c4030000000000000000000000000000000004e80aeff6c4b85188903b4d2dcac4f94f7cb4285a38f94b0becb556d83dce8735d1db5810b409d45a8dd1b9a6dde29c125c12599e84b7e648aab52cd68fcca7f1a5f56c854f3c36e0445ab7e2df2b740000000000000000000000000000000000371a74468ce2ad90e19b7fe3f57159dffb1b0422b32ad693b2fe6c45c5d371b97a90054095da887019d25c1ee8197800000000000000000000000000000000010575e1ec9a3e609ca086ef8bca679c4548482d9e0da2e51878158ac8e5b29d824c31ad7ff642041e748efc50c2514e000000000000000000000000000000000ef36130380f1e84b2f462b5f970abb8535431b79813015261015c6d7e74f038b47504de01794840d93fbbb4b386e17500000000000000000000000000000000018419e85fc2d75f007d1e0e02c1975332e03d42c3b41c50c3538c3625e702161cdcf8913babd2995aea7566ff15abf2bb9a1d051e33a617c25e17b7ca8ae6b02f16c759cae0df7fbd403372eb2407f6", "Expected": "00000000000000000000000000000000125406a942ae0119575453beb4c093d2696d3bea7bc031d7a586439197f848e1d5a82b925b4e96138a3460eecf198ffa000000000000000000000000000000000befcee6bd1412c54674a3d519dd2813b87b18f2ab3375a731197e9f539f8f8fff634f15647e7fea3c65b93594343c2000000000000000000000000000000000011e4d432ee6babd502a9cbbb5cf4839dc6da6176b6bb0ba51d99a3587465f5f3f83f4d4cf2c7e6187de93b859ca61d800000000000000000000000000000000168509010b867aa198fc294a5879ce14a51503c1d0e8fbc02ec08cf62afbd357ceac24b633bd0fa99f83dda92e10724b", "Name": "matter_g2_multiexp_87", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000070a0d060c6e9bad0d1bb15417578daaa8b7a5c984c4947dba10fd874d93fd1e3994337c87799d78a674087678d9168f00000000000000000000000000000000128985b69d5d6ea0ad0b19eba7c2b430f5242a7e89626c66fb83b58ca7cb65a479de4b2fca6886cf55b8cfb52394102a000000000000000000000000000000000bb0bced708571662af042d18956b5b7d797b61aba70823618682287deebe69bf1f9a94ca4059e0570e25a39e60b9a8b00000000000000000000000000000000193f0793324dc78c40f356dde030b632feeb1609a1bd75ce88f0d313a0864dbf1f5e92826870866ab9b3c98cd1c12aa508c35887835bf4497d673936f40ed44145c5d5009fae16eb0f3ee9168831abf7000000000000000000000000000000000a61a310f90a5ffde617b78f784b2e699cd77e7c3e7c483a2ccb768f94d68e59a2a4521410c22ef6f21ba589ec3abdcc000000000000000000000000000000000e6568c83e0f7e459b27a28e5bf954983c5dee478a009c244da16041e710ddc67479cdb3da6f47e7203fedb8f765b2490000000000000000000000000000000001c5cf6b948b85a1c426fe932cd87605f1fbf6c932756eb1bfb43beaf012bec4612d8dd0840efd4cba3f5394beb65112000000000000000000000000000000000e02d5bc20c40d7cc2165a21ab37c6e4eb71322c01a43f2085f93b5b02bcabcd668dab90323db0f9288737d757997631a0154f7f8d52319c9e5cd59052e91b84640efe83ac814d95370e46aff4334cf400000000000000000000000000000000165287d72eca1ecda5fe16a555245b0a34a04beaf9177466bfd88bbc675442d206e70f7a2063b6ed0e15e9406232f5ea0000000000000000000000000000000004c0608bd7e01e65a15716b0c505111a3abb0abac3efb846e05e8db59c063950dcee052f04d1c4e9e492bc6740fafe6d000000000000000000000000000000000de897f7ebaf9089f7e198ee41e1efd7d84fbec7327799b9293a489965cd36159442eb0dc1f79f6b1f122f592b013bb30000000000000000000000000000000009774586dc359e5d20486f00dcea6ff93948c5a8b74058645d1048fe46ae3330dd56d85204d328f43f15e674020f353ec252ac28ea29b5459cd2ae5bce4bf08a102280c093b9962cafb481016a212709000000000000000000000000000000000438ee51a560aa419ad6ae45e1014c38b7c43f1f6a512bccc2d4f10a35838369b71799fab4b6a754fd938c1a1b874fc0000000000000000000000000000000000c1491c85965c0b74d08f5866ca727fd30bf641a6ada0ab8363ff01916c37d10b1b7eccff79b396c587d9beca2c826c0000000000000000000000000000000001452f254ceae9626443265ba31a1a750a425f2a7789e69cde16b70eb319c744a6221e74a9e2881c6bafea161d29638df0000000000000000000000000000000011bd6a1bbded174e9cb95d74492f7b07a755339a6c40f2a1a76debccc0f3a32c7017ca4e6679fb2c038c751f19986f526d3bb5ee3410dfad575b0fbe71ac5df2048f74b52e777fe0955d6e244d434f3b00000000000000000000000000000000139157c34aaf70cbfaa82be655281b085e37d6406df4cf8e291b221394e91d9e3cf04d431f15436064d0bfc8cbe13701000000000000000000000000000000000353fcf6e587e71e59d8f05d4085961d37b1f62694dd5c7f40efb5875b90459dd66c4d2d6c01a40834307ae9e82c2e08000000000000000000000000000000000a4975c9872fd167d0ff4cc80a6ce179b1e6e1eb21c8de80321451b1deffe68d8a13db26218f14935b64af25d63644c10000000000000000000000000000000001e8a2824f21cda745a24844ac0336994fb18e30608ac61201a932c0a5a58f1acd56cbd9353bfab4944efcf2859ad5915c30684c596976bf46384e6afb2bad6f821c4a62338d7a6eb204ed75070b1973000000000000000000000000000000000537d7a9d7d9dc451cba4d50630caed32e182cbbd95212577b8c2855c327530e447a4f3d73c7d63fa3ad5111254c9ed90000000000000000000000000000000006984b32955fac4ad3c0d181c81b98534ebaddc316d51a40baa1028bacd6a93a20d4bd6cad6a0f8cf7ade96bcd4d68dd000000000000000000000000000000000720c392a663884ad4d8daeb7279ac41717ea602108c76519da13a45a77d2acafee842828f5ccfcd786bf7ea88afd01600000000000000000000000000000000081f1d3e37ebaacc11671bfe1670ed65ece2aee0e3b5d746a8d618b44bd4b7dea905eb8e958bc026a092b2bd5a7b87cb11009058bb8e23b0a4294b5cae63aff10265e729d3601d85dd7f1e8063ce260a00000000000000000000000000000000005af33731879a574f39dca99c5c1b9517eda13121221be77a0c1bac82fbf29b37889c15a9d32531a3f6bf9137ce82dc000000000000000000000000000000000c62939f00d70a07a85804cd97fd34b9764565bdba225cdd7549729ceb9735bf4d09a80ec3055c483e1e24b66c41e403000000000000000000000000000000000e415677988c9d4656e59f77c608926c83028f91bf4c0634120b5f774ba07180b98141ffdf727cf9d0fc7a4cb52f4393000000000000000000000000000000000c9c37eaca857151a0c4a49b079f2f061e6a8ebb77e11eb32b29227529562f8dc8e2646e25469491eec5a07b11943f203e5489447bb9a5b661bcff2d9a4153a5aad975abdec380301b6d4ce019bf2cdf00000000000000000000000000000000015113f8f9100cd18427ff48038e1070fd835fce6c0812b7bafa679ac733c80bef56492ec3ca08c1117bd0edf19cb26f000000000000000000000000000000000789cd90c0be1de5d0b359c030d4b9d8aef93951e26870e37c375b9e7879cf277971a05babd319a3a6ac53f00f3254e40000000000000000000000000000000019b1cb91c9a1b1ee49c3837339778806bf0c093f171c92c9931ad43e35fc61cc08dafaf55b7b9e0f49dac28a12bcf92d00000000000000000000000000000000066c7864631333226f191e313436453e59f48f91d42e68874fa4da45eeda1f6f7f6342204e64e124d5ecd861f02ef4f00444d520ee01d87407747a4ac37abb7bd4e4c4f1735ca7458cc2e4dcb1d6297c00000000000000000000000000000000129d887d694be0ef2f84c343a9aebd0a2aaf19a4e78586470351ffaf0b1309593363bd9c6e7fe39a6e59445d935414ef000000000000000000000000000000000596d7061c2399b6a9be7d4d495e58c0377b18db1e45cf3eb431d10cb8b15ae42548a86a26086d57b1a71cb5857d7917000000000000000000000000000000000cce7181fc87dfe1bb493043279a5d93cb2d980eed38dab2ace8c9fb335c2890447434d80df6e7c95729933ada7b9d8f000000000000000000000000000000000f0e1274ff70bc6d3f1d0d5b251ae528ed94aa3a1b9bbdb260892bfaa6213892071b8a6407abe26105b2f81df90569492035cab8f8120ea8e91389707a290db4ee69875d7429c6857e74e8bd40dc7360000000000000000000000000000000001192050735b114c19eb2bb9aa01f04d1fd9bed4df877113a14f7fbc9c31acc10db3ed0e0d15d8433e7408bc237c985b9000000000000000000000000000000000a8a66cda780790311b56836fe69479c7b94dbc6c82ed5886887dbb539a40390ebb2683c04078ed105e639a2ed8732a1000000000000000000000000000000001678ddff677b99011c73e0c9875b5b2ba063170f4d565d261b4c6d3263ccce0334b5bbb7ee08692568037fa96782e48b000000000000000000000000000000000ae15f79ad7f790f8ceaf7709f4b5da71642da0c1f7c442eeaeb165c7dacd8a4892fdfc8447a03a7c56e12513499e43c4bec711286827f0941ffbb451a8eba871239341a60e3aaef23487175c9d2e8260000000000000000000000000000000007fcb5ea5358074d06b64c5f46454e682dd9ac2127374c83f3ac5ad46bc5fd2fff7c5a80ffc669a1c159ee8c9a01bd37000000000000000000000000000000001010ada1bd493d6282ac2d3582480f50074a02fdf412c63e93c5857974626ff464150c20bdf23a87692bfe69a075eeb300000000000000000000000000000000086bb5664a8738f02af5517aec4c6db47653a6d76bd4b5e37ba4d8b27a7819e82e6a4c7ba4f8377e06a5878e7c0bffbc000000000000000000000000000000000be1463ab76e468e47e1711c158dc9bb10d1278f5cc676cff937f60ba457061bacdad7b8d3286f40219963b147cce4bd369d91a4d575d4c142b98a53115a792ec50a290608ad316465487762e83f3a86000000000000000000000000000000000c3329d1e1c76b0bcc7ca3766b2cc5ec8169690f45e0ea3e37b7173bfd6c884921c7523ff25391a85b47d5de395ca63b00000000000000000000000000000000081ff066c008d5a4c893a636d24e9752c6a06666dcbf80082167610e73a32d70aae3e58c88ffaa27f05260b86b11f72a000000000000000000000000000000001178e88c652d257888cda1c0b65ee2c0636184194fef9e6ae3791a85417c43a31fe75893773ff3e7b4d4cda9eafa8de40000000000000000000000000000000019657ec4604ab5e8812237a28e5ff320a0d728c60c541142ffd87fec2c703665638e5eebc33e308d5582cd043d08d788ee472561535a7710db521976cef0c92a4ed89861ecb397cbcfafa477756e8e120000000000000000000000000000000010789200f69d8acc70f108145804b62b521a30a04176c449f52bedff5975ad7b273aaf4a32f8461ced8e92b2229e2cef000000000000000000000000000000001178c36174cdb783b5b09d419ae4a154512bf9ce07368521d1576b2f1bf39f98be29bf533bad16ba9d96aae621612aa70000000000000000000000000000000002580f2115d1814667b6178b6bffca6a4d992eb66e9601c0d21e32a5f3b69e3f85e1205c877b2dc2696a0e872c5bbc6c0000000000000000000000000000000002c94d7ff016d57bd5f589971344c6499577bc2234e18e6c8dfd7d27a205442a4236ac54fe279d1bbca76467530140b42cfdcb8240f183abec526344e8ceca6a007c35b757928803f854225d3a6ca36100000000000000000000000000000000108b6fef7396ef71b46339d421726f83b08320599d66da18234011720d2b524d24075a255d2771f1ae904958c50a9046000000000000000000000000000000000723d5045b65c0887da1bb01d874714ac86d21441119a93a1d5758957215f399f5ef1cbc00558db01b295bf0cc988cab000000000000000000000000000000000994914a3df9d3094dab0c0c41a45315dce5968a99e6171fc609ac9e50bee5ccac771efaa04067467e95709bd924973f000000000000000000000000000000000ac746602f804f52e9a485c30412adf92eb9af3f6daa8f23b974339a0ffa6f5aa1b70a80a9f19cde2a69a4b7251ecf5d60659743dc1977a698371cc302b7579b6d7d13632a31b47df369365fb02aff790000000000000000000000000000000000a2ffeaff148dc5f70fcf53e7e8d7b6100cd6e7df5b3fa4aa33bced243f15b4f77f48d25f74366a693404b6ed7d3075000000000000000000000000000000000f3e1b34ac8fde4caedf3d8c3e24db02de3f91487db300f09c779e7e4e96ae55229288abd946abcc3a8adaf18a0c89e000000000000000000000000000000000166a68c5191dd7f9d44eade2ef1a9b522dc062bba9c55e2ff03aef400e5d2765a12816b4ba51e10bc21e06113c8ddc5100000000000000000000000000000000109c00de20f7e827375c1841348e684fdb248fad116e9643dbda8be2bd06b71db264e9f2c40dec2092e7d518540a6d82652a5d4fdf6d6703c857fc7b10a741b95fbce91fe823d827cc7203be3b3bce0a0000000000000000000000000000000014ddb61173359514226c150a3343576b04fb1b06fabd8fe2f921fb3b90baf5513447c107f6d2f96c8b03274bfe451dca0000000000000000000000000000000001d1064860f6c4d62a282147308e80ceb0c5dd62f39b3232a231b1b287e497df31cbc5a3905a7687eb2f24447e50a395000000000000000000000000000000000859611bb3962955f92bff861e03d07bab7fe1f69e90c6bc7928be8d1758c9194ff7a52b16472d04564607b742543eaf0000000000000000000000000000000008a3e8396901a205a071aad06ba9812207171f33775eb358de4232826a5f0ff50ec3e137b1344b583849e8a5b424b46676a30abda185e7d280804952fc0c074ad907fea2aa54da4c3190895270169b20", "Expected": "0000000000000000000000000000000008c9db83241e7f3ae6c2eac8fdcff5f2d35318e24c3b4130e9bb7048a3b84a52fa3f222a8190121d2a5b8835bf911bb200000000000000000000000000000000002db79cbcbabf41bd8c715e024f4687bc0d058d76b8dbe58ffdb80918212ab6e9b35256fde583c0fe903c34a4c41ba70000000000000000000000000000000019f37d05f5c9e65c6f004e1aef03ff0e1899f0739c9cc4e9038e18f9d45678388454d144495b2cd993eb3691bf3e96f5000000000000000000000000000000000d8e0d7715ed71291729bf480f5fee7ae04264015732677488472bedc0dbacf8b35eef7adcce196e3bba9cac0991be81", "Name": "matter_g2_multiexp_88", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000064a134260b753af73df3764ab662e3b1bd624c8f3248e9bcf7676d8fb0825ab85ea33387d4641c81fb8ba3757e0870a000000000000000000000000000000000d67eff1936a395cd3f808ed7fc89f8b6a227c4849a6941d4bf762af6e41ae41c8114aeccc2565ba01fd902df530df1e000000000000000000000000000000000110ca2339832e7a9468844b94b3ced0c9216654bef1c8a5cf66385a99d5d452f978bbb7fe15fb477f56753488fc909b00000000000000000000000000000000173210b548d1b98b926539049996713f53108cd2911105235c1d5258360d5620d330951db67219ffaa304a67fd6219f39f4db766964c7855daea58d1205fe8da572aef06e0ca64912cec7c87bcb2f51f000000000000000000000000000000000f7c3795ac3d511f93a3d85e65261e4c09cd316787f74ced6e472a3993b7b5b0ce5a7c91d99559a8e0791f712cb4e1700000000000000000000000000000000018eacb2c5fa9221881c6311256a69c7616748deb3235c61cc11412860450151a25e3d6a220bb23e0b3e3325044fba68300000000000000000000000000000000121827286873ad31f58cb3889fd01cb7d0f91ff1c241295f6ef2dd0e8aa8638b63a7e6061efc2e7ca1d3579b4868f0460000000000000000000000000000000003a57315175d70880b2b53c67d61831ab066b08d7ac68637364ab1c1f3efad96d42a3cf5189c45012c1f73a1b97bdb4c1deebc727d98bdec47b5a1fc48916dca1e42345ff5474a5fd6cab0ae99e9f10800000000000000000000000000000000180648e5d0bf727101417f515cb9578bdde3e9f6c4176d516454ea7c32c1712610cc8bbed303bd1afd48f580ec11b77c000000000000000000000000000000000d6ffa9b85d69b67abb77f5c8bd776eae82d1cb055d2dcdea31ac66b1825014ec7f7a2aea320ef9f6897c9aac8c0706900000000000000000000000000000000073214fedbade28cc60ecfa4e1fe2fbc05f3d71528aca315312d50214f680956bb9e0fc12783843b00b3f4f0f52efe2700000000000000000000000000000000128f87e7da7b53f28944aeb26ef0f6c99d84038af51a1d242501ec84b5a6a8593ef1a0f6b523478d9fa12e36c2fdbe694b964d74259c216c1eccd7f2b52ffa5fcf151d47bd69bd2768e6466b32eb4fe50000000000000000000000000000000001443980d7450af1e19949fb328776cb7238a9b26240cddc565aa9d52c5592083b1533e8103dc07eac80e4bd830f209f000000000000000000000000000000000afdbea7f1cec534c03d3269d50017372f7ccbcba9f096fdb2754af4d6b4956decbab2b0afb69f97a03beeb20b4ccc31000000000000000000000000000000000a83dfa3197dc65097601457a97d0df7710e001e90657b150e289515609f13997b454167a7589ef218893309460139f300000000000000000000000000000000029c362244510c342358130f877de947acad5a379295f3149d5c713274316e06a169501f889e4b9cbf86f10b9521c1bb124ceb1dbc8004a4b1f8b422d394b0480bca7c0f38aafd8f06ba090a98a1d3c60000000000000000000000000000000010a83f13a185c70ca3f724dd84efcfa3ec463d7c05360056f8b5304864b20025b0a82c9d542ba08b645e2334f176472d000000000000000000000000000000000848a6a18bcf64d083e118190805d68f7ffea8b5a66e0807b9cd3733d31ffa5cc25dbfa6ada604646dcd8dfa622e08a30000000000000000000000000000000009962205c0ba43e5101fc3d5353f429a57a97bcb84baa0942a7e7facdfb0d032b9307aed8bd2ac9094a2e5b1460db7140000000000000000000000000000000019b1012661a10d31a4a73d0cb31f7eec0e7be729a42baf560c1e90a9124fe8d5fe31ecbb6d4954dba7d943a7af773eaa5a2bf15b2ed08b33056a0733c920741f86730dcda9c06aa0e3c135a844cef916000000000000000000000000000000000e7f02c1d2ceae60f314f51374b338c329f2eaa82553c3fc1643c7f1910ca24e277f3d658f552a47f780d4d9e0ac5e030000000000000000000000000000000014b6b56afc4afed5199191ec13dbeedd797f14ed493c25658a9658f031ac8d43de12e6a8c4b1671c9e5ef78da1a55e2600000000000000000000000000000000194d8a50618ff55ba3fa5602d41cbbeadc01a348ad1484c5e9aee5fb7241fcd9018f436e3c6c6dc64beaa241513a6c8300000000000000000000000000000000052681eac4bd59e160b67ebb27582a6d3ad5286d652787a0e160026607acfbfc5b9f38b9b171375079d052cb242b87fe8c3c919f31d72ab414f91938089430bbbeaa53ad7a73224fd3f204b80fa1ab87000000000000000000000000000000000d96ce83d917204e674ad9f5e5728651f5f23df25236b0fe769be48adf482ed8c36ad9c9abb6efa3719bd35324bd700800000000000000000000000000000000107f55ab0e5b60dbcc0632c345a9e93818014d7657b264031709275744e1c6722ec63aa209e655878a57704ca6cb3bc10000000000000000000000000000000018d97fba324431fa28b8845d94f62fc9eacc0253134b923908f06889d375405b51610ac21a75bdfb27e3533dd4debc22000000000000000000000000000000001667856804a5471238ffd64bf3bf266ce3a2351ebc68265674bc86ce6faa8dd50a3dfa00c647fb4265951b3a9607ab99f749063165c6db0eb038cb9f1a573de25bf377e1fee94f31df5987f7b2450aff000000000000000000000000000000000fde2fd0349e7a47a9b6858014d551aea569ef9802629bd9520e303ef0487c9d2d399682ac16ce6fa03adb6f4b478fa5000000000000000000000000000000001858ae58920dd0abd8ad94d2f9f946c53e050fe89c61f62fccad37e17f8723a4fbecb6b1be1e3cb853f045d0dca8e53e00000000000000000000000000000000093615a7f9d12e92c90706a47abe9620c4db41e95e42e478949745d6b73e021422e40b969e9e34263778c8a4d4907445000000000000000000000000000000001006ae7963b1e1c4d8c2c85175aca958758fb380019825b09ca3f728b5356254ae4fc670aa29812320b921b48a069df622d292cbcb836843acdd5a3fb404024174cd5c1cef632d1b9b6a73f2c5f705a3000000000000000000000000000000000ac407b75ea77789748e7607b5d6edb1d891875aeef2802715ddc393818fc8cbe82cde9f96377e3ac60107ddcda7e6610000000000000000000000000000000006e63e49356c38b816736d1d7c360ceaaba875c53c98ec68cb825962531855dc6410a125b914b0ad99f6f4327f5450890000000000000000000000000000000018ffb4ac95b8ffde112c8bdbf07a1c97b1d30a42dd4a97c82617698617ceb169e8702437ff6082a2ae387b462cd86256000000000000000000000000000000000497c4b3788c4d6c9b4cd8b3d3569ac4b4332b2f76c5f03f112e089bb79d33152b2469f7ad3eadb8b954775aab73f47de816dd1bfe025685f2eff0856f9c162d73a58fdeae0dfbeb5ce076e9f9ec1a700000000000000000000000000000000003e16f2f5a2fe15fa02b6217aed7dc688dd2670c09c02791cafeccfceb7d99ce826bccf213f6a7c6064687519f9283de00000000000000000000000000000000095e6638ac74815dc451b3ec85a6a8cc18643b541e8be99052ff6dad39c971f2e8bee976ab2ed5e1cdacf92816249ded000000000000000000000000000000000f2703c08b1d707fb6de215de80b53ffbf2ac48f3dd059d2a952b1031189248fad27beec5c8591ac93625a08e3420f0200000000000000000000000000000000024ae36412ba6f2fdeb0777b892f1ed7bab0527879d93f7b71b62f437f5c1ad1f04a5a7380ae5990a455f11870c7208304f117d41a011d36f55d0cb53d4f98de3b1a6cb55dc8a76b29d393bc21826ea0000000000000000000000000000000000f7ab1908c6d4b152835f950b604b55fdda7eb55c6b90c05e98626ba7cd014683bd3e219fd0d5983e9dcfaaa5d389e560000000000000000000000000000000010b285c2884dbdd540d6dfeca704e00839337f12d2267f6a3fc731fa0f724cde19e268782b4b9c2e11ec3aef9a72a6ed0000000000000000000000000000000014a40cc55570e8f45369bd9dc622e05f03989bce6a98a0d87f4fa7add67eee3e2ad9a297615dde05e64203e86153ec230000000000000000000000000000000007f2b6a092adc595e4857e821579801301396321d4a20bccb3296a031d74a62bd79ea4ea094d2e545943138d2fc930fb6b6f5ee0549b28a1bb317cb020ae0e031dbc381075772ff582718fa49db486d200000000000000000000000000000000108834a685455dc0be10aaf54607a06100673140b012ef23a16d3df204a81dd8505d62ca3e0278a2581abc59e0fbc421000000000000000000000000000000000bca7130de9896e8d6858022f24308af7ca66fb4c91f38b30f717c5491996ef4cdb01f4d38a730f9ba9ca5af5ad1de7700000000000000000000000000000000007d60ded107a06114afaf741dc8826f9e14bac6014eba26089c4e31a73b0f30c4b6e22533ac0db7e73621cecf753590000000000000000000000000000000000b538213a703f7a0bbcffb4aa8ce25ba2a538bf599d3c0251f5e8acddfd596c9912d4cf9a1bd8d3ec070713328ca992205edf9812adf95c9844b2da06f75d96e742c0620d1cb0d47dfd9b68d0bb76128000000000000000000000000000000000cdf0b9bc829cd8537918d665e5bf344d309678d01ee80c71a6d6efb45ee8a7beca35bb5ee046e0a3fac76e1771520ff00000000000000000000000000000000014e5be9dca2f8ee4da18e5ec9c4caa891dd78acc47f553af584308c72988435b85ad21b14abf8421bdb9e25164d568f000000000000000000000000000000000accdde22a1c479e47a17b8da6f1d2b7f780ac278c68a68090e5402977d897bd734f5af8164118d613f480c1f65e5d8e00000000000000000000000000000000029614458afdf6b572bea02a0af987d178c43650ca1c80a297b1d31e259aabd3e2a2c8e4b2c044466924dd6e5e3483e6f64a71e4e7652860038df67c99d97b1e5a063370e65217531253419bf2e6365b0000000000000000000000000000000004e45cc43d4d10ed878e18df156062c799a687b8e6beedad9fa6f66ad855cd053af6918e234ff9a43561da7e67f3dee10000000000000000000000000000000009c9ae47a76c199c93c38e7213c8d6c030cfca709714c703839b9ae9b65207e83486f9c8c16373e2b37756f3fd4355fd0000000000000000000000000000000001594ce9c2e229491b22317452938115747515ce62a0d49f4dd12667f5b3e7b541b3775c9b1363cc185a539b9f7596330000000000000000000000000000000016bf68e05e32168c69ad67331d7bc88a6d130fe8aed3e42eddfeb1d92add266eb69487b246a3ca961ea6ac0a35f8da78059bebd962501b8381b67c22055ba01667d916932713d7ca427cd80d8f76b41900000000000000000000000000000000080d165c57354f87008eb97610d4a596f180e48ed3190779591a0f7e07278f8d2fa6cd21d1b10e6347f11bd9731fdfed0000000000000000000000000000000008d5a1e66ec76743ca366be80fd1cbd5efc9112dbcfa84ce6c44e8df03140ca5f07d4bafc6c6ce5f2f190ede55fe8718000000000000000000000000000000000d0e1d2e5ef384a4fb314fdce54ab7895f895b3bc669acffd48e92c6320024d4f371f42071fceea550c8cf68615b00960000000000000000000000000000000010beae4ffbb68cf6e5d0683dc0629411ee14563f84788d50b1c8755b0b06092cc0f0ef7b55a39d51945b5178e374f8e047b3448b9b404e184f7ff20466aef3dbd4e08375673ca31fdb303c88243fface00000000000000000000000000000000161486d422462460923bd98834f0cc270982087697747fe40eb9153a7923d48eda191e4e7a75964f18f1df9365901a360000000000000000000000000000000017ab168a4ec81c8db4a74d529670fe6332b3870004f696f3a143cd1a62abd747d94afac9485e5dc19b0f4262dd379c990000000000000000000000000000000001e9cc85f03039ea53253f0fa2420012171fe39ed8696ddfbed57b80b73476171e59631388d75fe43aafde52aa14a64100000000000000000000000000000000109a5d5449002f4bdca44c0bd141175d5ca1cee449302f0314fcb5f282f022a7a3cef77f4e9fb515107e797726ff51d767d9d30b38b252a0661c12dc69127ac380f3f756144801633e99bc2ffa2f463c", "Expected": "000000000000000000000000000000000aaa5de171664fcb45439b17a024806ff7e07d02294e0592ca74752a5b66f3365d1b49d6893b3bac3b8b0d10d026e48d000000000000000000000000000000000418354ce1820ecf848321a07ce22117303e5a15169a9cbfd141fb4797de8871d84d577e86270a9cbfe31c088ceed0250000000000000000000000000000000016884caa03ea641e0660a790975d77c5bb03568f873800d0559b69e3e0afcc10ddf031bb5c25c46f136f0791bbd3cc8f0000000000000000000000000000000002bdf659df76cbaaec030448e8f4bbd6b424037a8dfd7c4b8ccaa2224b0852c168f49c6f45c04f23abc85b8df21953ce", "Name": "matter_g2_multiexp_89", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000062bad6816308f1c8c6941980caf71929a4006083dd29827902ffc92ebd9b14f1ef662f3a0125b1e74dabd039f9106400000000000000000000000000000000118e4ae76e2c321a5b89eb19b58f58f44e80dcbc7bd6d619579da40e1156aab32fe81df8eeb1bd047f96d65aed8b3b6a000000000000000000000000000000000c8c93e1beeb4efe52a96e5d5612338721e3e487c13c18b02475f9ccd8fafc2c95101aed291951f2031bee5216dba26f0000000000000000000000000000000016fba44e9aa39a12ae27e3c36de1f14e3f37ffb0ceaf5fed2a0d9815eab02c5aae91b254812a8f3a2e3654cec01a341caaea75e63204e177d404898aa51555767f813c3f3ed283405ed1ee829b04c85c0000000000000000000000000000000013716488daf8586719c52fcec80d35f17d4c595b66c7f2138244f3c8cea69b819778bfb50e49ca1d092e57c51674fca00000000000000000000000000000000019cee25c4731bf48602ceab23b5fc4f764993443e3622107b4c33b29c23d1b5916380431b7ecd94a0ce99811fe6dadba000000000000000000000000000000000562b28b245b7c1ee531a320fa0f4e12d7c171c7e3932ffda6cfebb123fa7f5993e5ed5e7b7d295405e5031b339994bf00000000000000000000000000000000180c4a8158a26d34123c870bc694382352a8e4de712b650d3e45e6baa16d6950ec15d3a4e032c1d1ae8fea18faa6f3d8db48a90ddcd791e6a9debfabcb1c71c88e7ad98f9e739ee752b381b28d7656f20000000000000000000000000000000008472d40e0505d6b8b92500e8e9711112048611fcdcca2377481ae86a7f6da1571f179183301e2194a42dac3873a3ba5000000000000000000000000000000000e2c5b61c050a8a12298f76b5f15383e72b90b001fa26889b67a24bb374b63c1e00979b05450e44ed63e72042af6d46e000000000000000000000000000000000e8723eace9c7a72b3e6097afc9bcadde61462e2ee03fcd5ad1b1c0dcf39f437f80530c2a1c5e6ecdaac14e8715f02e30000000000000000000000000000000002e21e0f451d035a5257fb09e9ed17b27f0994e6d85ddaf8d33153628adb194c97db17656351c029be4d3125bd29dc22ad1795823d3834496b0a1c2c07431f9d76071db77834005fa1228393ad4ce3f40000000000000000000000000000000000dce49634595869d7858e95a301bcff8112eb73dca8a22042137456d6d4887998a541489ff09f8e006176e6beee4e300000000000000000000000000000000010835f7336dc49e62706da4ef21d8e3173629b16742c317c1b397d4f17ced40a56520ea63557d7ac7f251568f4eb3a220000000000000000000000000000000017446ebe659a4510a362ee3b406b636bea8f381503e51ac21031c7cc92acd23046d62c2f32cda01b680c0f107142ae7d0000000000000000000000000000000006ef82deabd8983ebe4255d8e06f4a1b3585c057b2a1ca3c3e1cf04b582b65792e9980e3a1735a8ad58b053b16ca03d036d56e38fe63e573b02203be04ef9e1a044e1754eb2db50c6f9804abc4a40f46000000000000000000000000000000000cd8e7422ee179a0499178c3848cc4fbc87fc25c8c882f036a03cd9d3f273f7f2bf71bd3c9cf5e30c42b1ee6e90b36fb0000000000000000000000000000000005005a471d77a35e922b6d6a45b13a90947c2b31d8e7a2e4b6388265b039ce23ed958495dbf904186bef60fd547b941c0000000000000000000000000000000006c337380065eb8a5f63cb20fc61a9eec4ccf0e23c4e0f231a5bc4d765271b9c5697bbde692b4828ae22ea12423ad932000000000000000000000000000000000f7a0080cbe72a6e6473f66ed729f58683a80815a1748e52f7b67a6bf2846b7df8e7dd8599f87fe63706e9823bfe00d21a6b36f4674ab19202037d59fd8e14369e5d3d71acc3c76985b813d81ca6e24a000000000000000000000000000000000c94834474ac91547546d7d179b2091e33c8812c1b582ff186e69b63011177283a74b549aa342a7f3882ee82ad8ecc03000000000000000000000000000000000d72c4308e9ae695acedb9413445bf6a40d59ca78bd4f74ddbc1bcd8508cfb521bfcca99c98dad8022d3d1ccdd98bca9000000000000000000000000000000001487d006830d00d84a567c5d031019035443fae4791a05253f91249b32a4b3e7b3ce7eae885b8caeaea411a90b3445e0000000000000000000000000000000000d94f17aa100503f605732a48e4f55c394a8df1421a3d7c78bc85f4cb7a53744eadcf76e1620fc54204b123d6071cd3bad85286877fa7e5a9a61dba9df5ce35083beca7c2f5ecad13d226fa32b9720e900000000000000000000000000000000101cfa8d9c7522277f2bb4bae6c09e8b93a876c749c91c61784feeb105be61c2479375abdaa81deafc2fe754ed6cd9da00000000000000000000000000000000089ebbdd489ff670a70218f5aaca78d4e7ade483c7f20de4a84d39217be8f560fbf7bbe36f3f8b8361ba16d17ce609d200000000000000000000000000000000094f094372b2315fabc219099200e7b9e2f3a2f6fef2ede6f83c82f44792da03aaad06b8cd06dc3f140746bee2a45706000000000000000000000000000000000cde6cf9a3a7018b2b1c0c26b5850820080c7e4b56e615d577a78565431c93de78348d2851d5ad9f120ddaa9ff3da31b8fa5387c5712832b52c9c72e10c6f69e9c1c5b278aa379140e75e404c4f50a2c00000000000000000000000000000000059bb8e5dc5f0cd31cf674ea78b80b67b8a8a753e51284a2ab37d3f29459250d904e70ed00481b73556970a7f5424e5900000000000000000000000000000000043c6a53c413bfa2f4bb14ef296afd97ce801a37fe63d11a842f8d66160794c1a651d70f4c836af2c73cb1bc58c706460000000000000000000000000000000003e7b67da1513656f7b08fc5a77682477349ac57e53687c82b6d98772b5f929a2b06b0c7e14481d522aa94fa3a6e1cde00000000000000000000000000000000109e07928216eaea36fbb20a38711e73fdc26e18a6967b54f308b10116a5c8af0c8411406ef6ab1050b61c23bb746b0a3023298162ebe7f4ae6aee45a8a6ba602c3942a8bd6b35636fc6b85596a582e000000000000000000000000000000000166f26d3d26cd48e498578900a8c830ce9b80f162c4b430749651b945d9f60ae6a26306ad7711a1f9d3428946074912d00000000000000000000000000000000165f1bc59c9c36d12754097ea83e9a63fb4ae5d1b93a1b9239a6f338cddf4a9b30415d58076852288c6a467ce9b6b9eb00000000000000000000000000000000198e73619cb93fa6a2bc700cd400519d11a7d3d6d945ffac9754a6faf37da8596b49b7a3a4f2cd899ec9c84f1e79b7ed000000000000000000000000000000000a4740820d60034d37bb85e3e622783852779d36d6e61f81a7eabcd094993dd7d81900277550bb4299d550d2805466aa8ff2430d2f82c6d5e7424836ecea15af0ba2d0bd6498e65c65b6cd281a7b8f28000000000000000000000000000000001714857b0ee07b94ea928ff57aae9fe003c0c85d8564456955d14fc8d4ae14a7c9bc303983af3e2999c6db2d000ea51d0000000000000000000000000000000016512cb60aa372cf5098ad514291d8168ed31bd755861dbd9ef020252c01379d343a9c058839cdec8d14f2fb9da0db80000000000000000000000000000000000af74d8ac711b6590e7041e80ca40dd4db659e42b950bdd68c56d676de654c1a47867bfe6483dfe1971eb7c1d1a70bd10000000000000000000000000000000019e56ca1ef3fffa9e131fc5bc93100577b062cf9b2acd234c79e5e54aa799a389f30002b4bd683edec5fb100f1800d66415eea22058493dbf6ac248fd2ad8b4734ebe33761f2177089a3feda396001c00000000000000000000000000000000019d1d1e1e2dd4ab86df81a8246c902a573d1fd1598050663342e411a1d1b3c8849473c689afcc8e0ce5e51a9dc9c3b6200000000000000000000000000000000190d7c923bdd6336fe3e0509563b2eb6067354d8807f66e6052e97d5997464b9f07f29f3022f78779a5c4ac155a703ce00000000000000000000000000000000128591bb699c18a7b9e6e4e894654853f6a68233dfe8c744b42e057711b8d0efb3a98bab6aaa40ae7675d9200a8427d600000000000000000000000000000000045e0560e0936b16d1e055d3d3f4e0fb42d129546abddebeb78e871d1442f4796d939929d354b0326b95e50fd5208fa9ff79e3ef5d32a751b713180be37d44ae55c59c5a8121c132c5098ff972d8a97400000000000000000000000000000000092373dfd7d4375d6bcffa415e5b36a31499e881a80be32400105a6d56b34d64f4fed09f12640a43289a710f034b71e6000000000000000000000000000000000fa75d6510b3b58a32635a7a6cb4b9255aa7af46905cafc893f29b7866e12565765bcde498dbe87df3d1dd53ab5628320000000000000000000000000000000010dfd3456cb6a8bc853b390380a13f045ab43abd289fd05e7f98839477dea1fb1fbe38ca4f5bdd6691446ac0219e453000000000000000000000000000000000112567397f3fda84db6042817a99aeccd0c46a11fd3ba44e2600deafaaab7014dba98cdcadf81b97272fb7f275ee8a4e039bc7274a3ab172285d853d368da0950203a48ef61b3c7564644762279c1ff30000000000000000000000000000000007b397f093e69874d2bd3592489d93c80d0191b157e71d08a6ebe73063f77e7c5e084a24b34da2aa6354b1815a694185000000000000000000000000000000000fcede3a39dd5f905d072dafdb6f56d85726f6f362f91f079fcd47a8c1d3bdcf199d64edf17e3db1dfc96a3e59f69bfe0000000000000000000000000000000010cfa13c84e750d8af8bbb88bd6d16adf3bc7b532447c2e6accb359a5576be08c1b25f336047fb8e01a4d7f9080d0392000000000000000000000000000000000ca0e88b5c2035bcd3a65e8bf1aa219cf428b6f80617040ae02a0ed41559804844df373ac61a85899bec83e5a6243ed42c47d0b1fd24c1c66a3cb0deb7d51ea19f0fc492f637ed5d4d03e102cbdd055500000000000000000000000000000000021f3b793680e0e3127fa53034e9fcf286f5279cd167ac1e8ba051c440aa265ec6d28fcc2f6d3bad126180efd4503fe900000000000000000000000000000000182b429f27996ee070ed27e7015bd70191b814bd02ca6558a9be81d6898161aa525197c1672ae75da92729f2fae9fa3c000000000000000000000000000000000a20b3922e07da4ef6696de85754eabf1f58f7f5d37accb6cde4f62066e789bc64bc8ad6ac827b8c955acc858b03d053000000000000000000000000000000000814faebd3b60fa1a8fb86b3cb57d36b9c85d4b28e97a2251e6bc1fed1ccb18f17664321f38f3723cf8b09a2161c6aeaab4aca860ae4bc20d33808533c9a70108b153bc4b2256003ad4bbc11dc92898500000000000000000000000000000000159f9d329f929a65e41c7a0d4c05e11db61ca7d6d82f8b92a780bac66568694656f4c845a730861fde9a313fa49bdf0e000000000000000000000000000000000d556bdc8dc959b00f74209dff27023c5521d387a40bf20ae2a98f3f55318eddd347bf1e9d856f43a4b5fcd26c3567ad0000000000000000000000000000000009b4b0cedf477ef1e0f99627bdd7a7afeb9e29afbac553a516fab479913b23a9be5e0b38994215a9e23849bb664201ee0000000000000000000000000000000010899f4dc55ac5d1f56a7b8d55ce7f6a5e0a8647bf1ef6e9050f00c5fcac9f679f138018b9aa611be73d3bdc0af2056e297500a2747f9a68b2d8d9ca5b0390369d919897c53d422cb76c5a283c38669e000000000000000000000000000000000226c8a6b27437972ce29c2ed7e5cca4b6691e3a5dbbe713b5d309ff2f4cbb95e8f1571314444d65ff5fbc3281f9354f000000000000000000000000000000000282a49d0c560d873676967700c1062013a2d4beee96a09af7e14436fda4e3d2a32ab8ee4e591decec39a811ddff130400000000000000000000000000000000167bfe499f1f4609e67134e12ad91aadc37bdabd0055ecf7f96162c39a02a86e62a7b3d39f514f63edd82d04beb1958a00000000000000000000000000000000191673ea5470e4704e361f5ead1c56371d6aee3035d92d9e1b96fd119c4f877cde6451411e441fb45aa9fcb90fe4c66ba87ca4cf226c212c80f3db5e4e781ad7391fb73b1124d01cf893169d1c50ca99", "Expected": "000000000000000000000000000000001488532d83fddf0bfd69b32f965790b3fe4cd9f64e8d17e78189c346518c91e69db2f0b742cdd5804b3db3777dd931230000000000000000000000000000000016205c470c6371d73b012a14d519bf214ff10de458605097da1b798977bd938727c5be19a10f4f492f301d2ab6c38ed000000000000000000000000000000000142cc08f61d3c9bd4c7bfd0b7a0b8693af6120898fcaff49a7fb5abdaf1d15bf70eb033d6ff09a75995547e6856c595f00000000000000000000000000000000164b2807e19135ca3b66bac9aceb371165c930ae063f3cb5a06efb8985a1e0c39023d8f01df517713796083e8c2cceb7", "Name": "matter_g2_multiexp_90", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000023bec14deefcc20a90e439bc16912e90191dc7142234b1870e4e8d70c56f695d5cd30a68930ff9b007bdcae8ca90d870000000000000000000000000000000000053a6e226f3bd82150e08ec3690f36616d5ab745b36a9990baac7ad3429a41bc60c7f7000ceda4cc9298b10043639e000000000000000000000000000000000b81b331589ac332093928faa60d6819d3b5559d32d37d2cc13c78aafa1cc34e32d317695c1c4b4979baa1865ced90150000000000000000000000000000000010dbac5e52f9a046ab88aa36b3c5f6952720e174bf8f1732e886e66e5803aab63642185aa24ea08c991edaf8375bcadd9abfe7e05e8a210604355a77f64386a01323407d9f25397769cc6dd141bc6643000000000000000000000000000000001875ef3f90df03d49ce6cede2c791b4d8503b75acff2dcb1c7c88026394dfe11481da72de4ff58ee9a98e75577b6398c000000000000000000000000000000000c8ee603d1404e64ea3ff08c70b3dbffd318736ae95f9a96ca07ddaa449818e6c5a17b2970f572f53c90be893e5c323b000000000000000000000000000000000f31af63c68481f527092b261d29d5c2daa95873b68899c28ac7753d95a64f455ebabedfe6e72246e494cc5fa2a9bd040000000000000000000000000000000009fd06bc51d4dc51de9fad6d1eb763809cdb5ccdba8e0427859d878904bdf295983b318f311856728078e7cbbecb0c5b64be08e7c2fd15ac0116ca941b85615c6deb38fe85e2c0fd22997e394b8a67690000000000000000000000000000000003ce75ecf6b605ce73f4e215b1aad4799f91e624daf0deae3a273968490bdbdbd0250686ee91a1c24c2e2f2b6024fa49000000000000000000000000000000000e4d9b65d71b7593310fb5145677d170663c0ca29636f7b7c50ec1988bd2d2f1c41d542d4cd8fa23fad94bd6a84aef5b000000000000000000000000000000000fa4accea53a6362651f6c6ad2a68d20b5f549f8eb961718e0c14cd05249a121e442a6a588eafc83d6a43d8baa66882400000000000000000000000000000000121e325406767852620ddc45677495fe3e0851fd3c70922896a3e92033347d2fe8d07f4db8f26b8127ec39d619d596030c391dff1c0c303c77b2a1fff24f50250dc793338f7d7f8f1d54bf7d87ab37da0000000000000000000000000000000003a0ac3ac37932b71672b9c48bdbd368d64c11f57ccb952f633bcd10ec19134c65fb2cbad655d773a90cbec2d9232b3b0000000000000000000000000000000007553c470bd8f38a48490dadea29df81ad901ecaaf1eab35b1f497bb58acce77b883e03e78702930dda72e2277139a2b00000000000000000000000000000000044973913824b3326b72e62ccbabd8c9f1b5dc81b423d0dca37b6f33972d993a681c326730717036bc6f0286da9177430000000000000000000000000000000017b0407d2864cfb39dbb0a5fa8deb4ed4a690a4042153e829f51c56bd0f2953a440d8305a318e6d6f67970d473753021a2d728e013e5fc3e1ca24c105a0c268cbb4f152a97e318f3aae33186ea6bc93a000000000000000000000000000000000b7478dda7053590ed013b7c23431a21626e748c3843e2332bde0bd3890ecea95b6104bac420a8be5f3dd9b075203616000000000000000000000000000000000e6dea641181cf796f62b196652f952ee2a26ba998cce1cfe9d65ae49198d10badffa561e2bd818eb2a7f350c122fa820000000000000000000000000000000003c79917ad5a9c7f046b34e5491ed015695aecb00760f3009dde4cfbf88ad1c03e44117fcb6cdbd5ecaa8df8760a3da100000000000000000000000000000000034e22ddbdeb9dea46c71ca2144ffcc8356c1a525c5ada69a6d5e5c1786aaaf0cf532e31a2f78371e04a72e8222ed4c7e8da0c8da19dc441f53c54551579fec5d820ce2e3599824b24b7c5bf1847c5890000000000000000000000000000000017964112272360a38d3bddf89da922ab50be076bf71a094fc8afde109d3817cc2db633e6408f5716b76d70e30ae00c0d0000000000000000000000000000000009bed28bbf43846ab97b92aab9ce094b077bbc59db648dbb469f21842058ef20318a1a8c18045b3de555bd8c76132ff0000000000000000000000000000000001297110789c7aecb0fec577f6f4a4de14608d9aa26a8de68289adea7f6b53b766b840d315152ea346f8c10b2d2729e730000000000000000000000000000000002b551c6a7846b96c6895e55ec435397af70eb435dc1c562ac71a44c36936c2c6d3e6a1e3545513516513391aedaf9ca76e90965adfc2fe52e4341895e6b6154fd7a097e052b59e4935c8267a6f0e63800000000000000000000000000000000003d463ee4d177d78849fdecba52b7e83ca90d54177ed39e82b4e80c17994a6a2bfd9c46edc0ddb256f8955428f30eca0000000000000000000000000000000011dd976dfeb8ecb7d7f5cd10c235131709fb16d8a827e83d7084266c2504cd1f5276ae3333bc7fbb4ebab48c0d97a9930000000000000000000000000000000005fd19477fffc246f5991603b48085d95256b273631bcfc16f19c6980a3ba01ac098061faa149b475bfce37d586464b800000000000000000000000000000000103ac3dd682aee109dd7fbf60b50c28cf7e37642f05b424773a06f6cfaf7e9fb01d5074ade97ef6cb0ace2e1fe07d54c7f3f352c7b7a9e2eb6c87edfc99e2df3148966760168f6abb13ee482f223a01d0000000000000000000000000000000003208ce7f51a96dee053cbaa66fbdb921c2c3b42ead78b39b4f1df7ab49f05cb88d0f4ac18de5839749416eba5535d4b0000000000000000000000000000000001ff7f9db52aaa0fddc8e96a67b99353b92d7032f59d200bf69da3b446d08435d2ddaeb93584d3b68a1934566187922b0000000000000000000000000000000005f05ccfa5704652cecfb42979c538823fb9d11a00222a963d00f1a4b9a040a0222dcf45baad40c6574d85e5617dbbea0000000000000000000000000000000018637b8c3ef111f6ad4538464c250d780e7f081802bdf720f4c925154f4667c5d50cdbc4dbb7d0b2747b97d2ba2280bfd35c4286f19a9fe8117e37132ce4ce76e28afee25ecca2f66de3cd5e1c83235f000000000000000000000000000000000eb400becfa5521b824a4288885fe46642c31576238e94f95e9b4bcbf62845ee9d9ee122f87d36fbe668f0e605fa2ce00000000000000000000000000000000003c8cbdeea0d09590e1719ddffa0a116723f0fe85585583f3f271ead66fbc2107873181915cc41eed3ec6e2c5669e9d3000000000000000000000000000000000e61c0768561517405952c6462f1c5df95be272251d8a7060624b62f9be310cef64436eb2c4c04e8352d7b75fea1756200000000000000000000000000000000036cd74a8efa8a1fce7587f07d5c2a6c4b7ef161b0faae037c9bbe63bd0c92b83e514c8c1bae4a5d9866c0889b1b914f3c2b40b7968a39fe8e4f24acc25b6c727887c3c44cc89cf62eb14a78ae47e8680000000000000000000000000000000013019d0fc8b93da2c79e473d713d94af33eaffda65a7a49d0cbae9f5259b8323e6f29b83da9608ba7d6ec004fb0710eb000000000000000000000000000000001505d30bf8f7c51994d896d91e8e2259782e2b49bda834015477f18c29e64da4d31f8b96edd080267b77a9539afca06a000000000000000000000000000000000eba929531615d9c0f59c4b33c1fc34b81e9c77cd8c6887099d850b3e39326d7caee1feeb101222f22bea1e9853d06ea0000000000000000000000000000000019d88f62cae047ddf2cefe497495f890d9ab8499e56f72488af65095e992427bf821f63555a67b0afb00d6fb441080a010325465403dbd4898beb740884cc325923ec3e1d7483540377d8bbd02c11382000000000000000000000000000000000b7c8f3d0c56b3b7d96c0a24fea3394551a186f87acbbbbce41d1313b23762945bae2e911725da4211614b456b508c0500000000000000000000000000000000125316f64bdd0c5bcd26a0e5bcfc3139045b3a44c8a8dd1cebbfaeb83b963c5a5abd4a5961465cff261c0e49189278d800000000000000000000000000000000095a327f488b901fe7dcc9f9ce6f4f25876bb09b053b64e9f4de9506a0fb95fc0cd443473c2cc5436750581d39b8e51f0000000000000000000000000000000015d406b31c791ae2d25ce462304c0bcf341686d7967c9dbb6734bc28b02123b1730d0a673fa8071dd90950d9411a2b3909545b90dbe35b0d5764bc72d45717e0c3aca6aa77c73178fa8a3ee9fec9cdb3000000000000000000000000000000000c7029af9422246d0a30784431d6bf9eca09481589438fe9a6d2fe1d5e526ec3d176a3d550204aadb85353d99bfe3ce50000000000000000000000000000000014a0dcb26c40693ad19a1edccda05055a27ca24544e933d01dfb964571071f94c94233f81e1ead0925d24e6d3df2c21500000000000000000000000000000000147a55ebd83c746128ba9c7ac57be125ca5c95f80f891e2c5893caa779484bdc1f9c3b3ccc4223b2343ba939251f7fdc00000000000000000000000000000000125622a040d8b157432ad81b8a83a9b1f0920b92680bbb65050b4862b89017b3bfaf81a3402ccb383265ba7200ce677feef0f8014102664a300ea9a30fdc7afeae3cc338fd45cd421a1bfea98e304c810000000000000000000000000000000013b394fd7a0f3d94e5fe4cf5cce3627d425ec848912395565b3e61ffe89e56be799c4779d3b9a0222ecc6538ca3346e40000000000000000000000000000000014ac1a87b333caed0f557fa5692d1138a8c1e92d1f9acdc9f357e2a46f27513dea42f367b046d389dc831610be4fbcf40000000000000000000000000000000011fa243a0aa8b0c01c7636387d60021afe6efc223b7deb69d030651c369643188b9dd5e08d6d031d71dd11eca1e825ac0000000000000000000000000000000015bf8fd7fe438407db7f1b0b586b2c285777c5b6dbef9e45b46cc0a50dc831f32a70e7d4316d4869bc769ff6de58ac30c8f1e08cdd72ed200253211e3b9947cb2a5fa24079b6920b4a4d3f1fd78146e80000000000000000000000000000000005ea57c269c9d43d3f17a83df04c95ea7e7bd85aad1dc2dd285ccdbd52bfe707a1d2476417e848ab119e62fea30520af000000000000000000000000000000000b99768ffbe95e315b244bf996cf34f8ac356664adda5aa7f4ff8d513b2eb5934b8ffe0fd9af94bc9b934e0a8bbd51ba0000000000000000000000000000000003b02c259df189370dd2700c5cccfc8b212a4b332a083adf9771503f5bd0c9ef040590320fe4a86c555a4ea87531268100000000000000000000000000000000003ebb1e610bd055d037a410cce3ae06aa654950aee0210ed0ee79f7a332be7342e308347d7b17a146a8b4c623029e08a7e25b1a60b6c6080ccf1bfdc37aabbc2bf92079d9356844f7f12867b3e2b2800000000000000000000000000000000015c4da691b5e6242af870e06b29bcde467b4644f01080eca60a28c7f941590192be30e6a4270a36dc8959b80235600aa00000000000000000000000000000000080f3d3d5c35ee24179f51ad854a37ac4ff867a2736a0e3e8f3312ac98c7016beea6ffe2bad1dd4842d6ec77995ff97600000000000000000000000000000000130c29dc633aaefc831b0bccb13fde1212fdce8cdd17beaaf1d06e74ef5b1b69bcc219c8d63f054690af1b6dc7c0d647000000000000000000000000000000000767290aaa1ed4c1dfa5603d976df0715b417599445ca577ded7d99e685118bbec71443fe1d9a65e0f23436353df152cdcb456eaad2b7c71ca32277206c1a1dbfa7e0e84950cbf14aadd455fb58e398a00000000000000000000000000000000133e997857f47f8d6278b8ad86f4692ba0dec9da336f2726704db593af368dda7aefc0b218ce1674f415e0d9e2dee5c60000000000000000000000000000000018db87da1272bd386f7d8b5245dc2de30e82739723b680dedd36f4ac4cf5042bcbada1e1bb307ba444431d73a4248f9c0000000000000000000000000000000006580be3e67c7a615408aaf9c95c0956678af0e2b1f536f1e69588193387f8a05b03d5e1060ca60c4fec9eaf3e72d39900000000000000000000000000000000050bd9879ef9eea147678f552cedacaee84562e6561b3b7338fa8f9d514099291c3f2a3723fdb22c88f1c9243d411ccba6e7b19245341fdfc5927cdae57f59de5f3fc8c37f8653e5aaca87db682034ce", "Expected": "000000000000000000000000000000000d8f69d90c871c08ae09e7b3e62e36514fd056c41fb596fec2fc9ce8509ab4f6675d7e85aa6b4b3197f5ab781f6f2e490000000000000000000000000000000011c4bd3cd156c34065e408efcaa5e13ad23d114458b71c2a6345f4aaf82af76cd4362db7ba9ee7e1e92ce72e242f570a000000000000000000000000000000000712dbbf20e9b24d20511d01717a3783608386408a258c2261fcdad5fbcab36c6bd21473c3d93ef8518975256c65a945000000000000000000000000000000000d13747be82153aea8076fd7813ecd7f60a214c31e88e25b14dee5cdb9336599e40b136d9ae6deb85606d35406b2675d", "Name": "matter_g2_multiexp_91", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017da08f2faa32570d95b9efd2d2fe358faec1ffe304750dca1dc3a273be3427c70904d58864f76afa19b0fe33ab1535f0000000000000000000000000000000017de677b713202f23baecef2b0618da140af624e56b876f2d7a20cd437c3868ea00ff6cd9c8908c1ef323ad294edd9670000000000000000000000000000000011d50aad957c54868aed6d848b2e67094b129282cc2df56c41d6ffe976d02ee83a592c33370d3715588a074db503b3e8000000000000000000000000000000000b8aeb019d120959b21627c1dcfdfb67ade22a948fe433172994d4a34084ac9e1c11333a9c663c87acf50962e21c728e92898d9cbad829a5346c0925c15b585de18869adfe796e46cbd56828540571b70000000000000000000000000000000001312ebeee36fff8152324a3ed24c37eee50b3099619a33c7a6316470ae722548b4b9e0f0640453caf53f374dba504830000000000000000000000000000000005ea81d2e5d9edeb3ed6c200b75beb731c31ad666e6e37db72ffd0265378bffc2724047c7c0c6e3f1598345fd390e9270000000000000000000000000000000017617a836beb12e637c5bbadd4fbf1ca2f5cc3280814ff5cbb5890b31cf2d2faee9e3ea8134af97ad4feace50aa194140000000000000000000000000000000002606deb5d57dce5b3d2e5f7ccec3ad036992beae238673641ad6042479ec3cf83bcc0fd03b7dacb9b4bb6c181ea9cc8c193fe87634fb0bdaa1700466881b557c470a62464e8521be311a95dff65eca6000000000000000000000000000000001203ef36896bfad2a2841689a964328fe4ce3d83798671630d0c8876e67ceda03d99555aac46d984f1d3bc38ffc134c50000000000000000000000000000000013e7461c256c8ff9144b17f8cc2e270aa94b64be62588280baca2ae6b6efc4d32b3800eb84da62561e0e96d5f0387a3f0000000000000000000000000000000009454b6a810647350cf0b364eb1c2b719670af45bdba9d7d1a534e23d4e810c3ef4d9318532e46fd104a83bb10159a30000000000000000000000000000000001034546c4288f642daeccf5b56beed2ca2d946bb4391d056df9c6fd6771048903fa330ec16d59d05540cd715333c4bc73dd9c99a5aea019436e3c91030d03ebefbf6ea6ac69222f1870fadae32f55ae6000000000000000000000000000000000d7782404dc6721f52648fc6969db33a9aa209f8baf5faa9678437c76c9e1635fa6d22d94aedefc90112223bb81ce33f0000000000000000000000000000000001e442e548d3045d1589817d0b57dfcd66fc64ff978186f784bd576faf57607170d49364a72189328c9837c9a2d8b0a0000000000000000000000000000000000da2b207bb7720aeca2e6ea02b65076770b960d4b7a96ed941a7f409757b952031a472384298acc3948bdc485088501c00000000000000000000000000000000048f85bc05ed78c692138f27c3541ced11b6b0ec158b43d133c3450a905416682fbb8c83dea06a06d294c48289ddb829e74ab390c3f73c62eb1435226e9b4f9b921ea1918a61a614b9bdbe9eebd1cd790000000000000000000000000000000017134f787c920bc15cf2228a186dfa1d10194087f28b6dd8f03e1c86226928f0eb1c27020a5cc74d94b50c4b4e36b8020000000000000000000000000000000012fa1fdcbaa81c4cc1e37447cae51beb29e55bb19b91e2b575afa3754589ee0151cd9e83573edaaefd341f381d34f4f8000000000000000000000000000000000ecafd00cc87a773a13909512466ed11288c842716e1ca5c37a4d9a4cd7585136c86f32140fdf02e2997a6e19e3d76a200000000000000000000000000000000104cf007ea863dbd473d7dbab6f55e74062b18986e9bc09bcfdc9c23e4bff8683f73aa998a5cce59ded10499d18a0ecc4dee3e2bfae3820f611c30df232c1d9c6bf58d40b3530858c79f840720d78d72000000000000000000000000000000000ffffc98e55f4ba9a642c40678d625690464bea39d085dbc9c99b4c36ea8bff5154eae3c315e1dec29aa669840accf290000000000000000000000000000000000a3df9595167048c52b8170596d4127968194aef7fbaea4594a27c6af05c54bb772928a7749d74311038d1c115e91b2000000000000000000000000000000000b317a3abd808e94a7197e0d3b2515a147774f78d0cd7d36e1156da28a26e33bfa76d75c6e3ae346f9ace050c9911cc6000000000000000000000000000000000fb5fbcc2f74fc30ae7e32143f219db7dfe5db6ecb09cedad8f087b6df56bf9693c8b7d78aace064e7c31785f6869541795fc8e20dd30622876a94afce1c1a76e3b689d6848903c21103cfce6a8a95680000000000000000000000000000000011e4b907a72f34af899a6c4de211af5fbe0265e5bf24d406798de53ecea273d5df4f4953d13fd7c9dc3bb0f0c143e3e4000000000000000000000000000000001623de5e87b6e1ee920e1b7d979fb9c431c12abb47b93876f9ddfaf28a7b673c18be634f96b813f7e0574c55b628a8790000000000000000000000000000000018ba994b02dad759ee79301b42ea20d7545844c0ea4bff2f95dc9420194cc4196fff12cc09bc0cef03cb7ba868c273700000000000000000000000000000000004b3527c8d148bd9e6006bd298ff8d7fe320748dd3f6d23449e874fc0c2f58d933c1e038a74f60fb6032cce41a3dbf5725b49f325e76733eb3c1a2cee5467157b2ee80987abae43d2c4b93e5157f083800000000000000000000000000000000129641af11fa92056236ef135843b2189d46d870381261d5781a5fd6f2c5cc1861ebb2e801f19f3adf2216609a9e196f0000000000000000000000000000000007b4007c55e47f6bf3aa420ad75fd191ffe0fe824fd30c3f1961a8168922476fdb3869822704999b044feead470e3b8f00000000000000000000000000000000174209113e2d8c363b04f49487176dc6d9eb4ecc0b22daa7ecaa5548d038b3b7c23ebda4f1b6845425cee13493385302000000000000000000000000000000000a58c80a02b7f93db01d2f8e0005839625e6c4f121f3d69115f435526a7f7cb53177caab4db86273bc2d2f0474235f31df49b30dd6aff459f64906eb1a9c9b2067d4f1b75057874b2fee17923bcb906e000000000000000000000000000000001738a03b46a8ca3f3d1f4f4447497c59f114005400f06813b24ff462ebc6f27c1c3c788b5f83f65958cadb34fddd08f40000000000000000000000000000000004dcfff2bc9ca0282016f38df484655cce7b872b1ff047351ae6b903e05f457d7fefae93104f9dfb549980394dfad2760000000000000000000000000000000017cd89434225dba07be137a73892faf0258b3fb19e6c8cec412fcda912c0613f2a925ad50ae485187020a371ff2dbc59000000000000000000000000000000000f1f9f87d3401e7b3b59331a89d9535adc973f869b81bfd8892a37117d8597ebab2800c966e623469792f4ae2a8eb232959e0a33b1fa12e0ba960761b09921b81746b8df23e808a8de09e7f5cbe2bf41000000000000000000000000000000000bdcb1d2a782541ff7884dde4167ba060fbd4b117944ae69aa2ff685b9bd7d475f45adce0c9f92695b4f4ecdd48cb9b50000000000000000000000000000000012a55432678043888bb9e7e47efb17700b3e702e389d0f58dd454224a02da3f190b2fef4c9d3e2074c7bef813fb56fb0000000000000000000000000000000000efa51ba64f1e7a1a269dc083179a222afac916778a967098582f55a41394bff3747f8d024261959f6d399f44a40d0fe000000000000000000000000000000000845dd0974c5789a85c3cb09ea441f2c433f0606928ee1b177eb851530d6e6b620b4fdcaffb8f75623435dff99b3ad9526ca68383528f6a871c237ae5214b49c18c4f3e2f3ef5dfba39e69eb181143d700000000000000000000000000000000180beba92bdb95c7803fca0407e29929ee64e03d61cad96ea0e6c469c5a888cc5ca5eb20983b3418a8da6596a5f1b2ba000000000000000000000000000000001322f7356eb3069fe20063f4be22c44426162dc8fc117e4e382bc4e33bdf3d971ef662fffc1d58ce187c33a43a4c853e000000000000000000000000000000001601a0aadaba846f11ba5c9f48e13bda1007ffdc1b8bbc9e85e83e569e9ee17a1e9e780a50ce617e6c780b8155675f2100000000000000000000000000000000105b2c213aa43ead42d9cfdf1d6c0559c25b4b86af43d4493bd75b76986d0d4f1d9b3bf9e3922b5c08a37a1629cab7d8f1f95a9d1d4e8e7d0f17a954177253709d988c3a77c77d35b8bf70294bb358c20000000000000000000000000000000017bc70346765b7160a0a5e556805c7944304acbecde06cadba474c51f05f22445c3d943674cc8215f973cdf11b9ea2e9000000000000000000000000000000000bfdbe202619a1d95359941c249b25462d3ecf09fabb878943a8a37cb9eb94abd7e6399f8d82f90ffcf904f4466cc5b1000000000000000000000000000000000f048db8530a288fef10a5ef9bb3cdd9f3d3b0ef4824609efad96bdf52d7c3b10ef628fa04f8b6513485e55f653f4b990000000000000000000000000000000004ec35f59287eadb1738bb50b0e2ad9d280bedfdb0a201e72594bfc4322ade0b7ffd6b532ebc7796cfc71f88a194bef4b481f986998d863c98e55a7661136a8f19d7d4c57f6036cd642ae16c82cdcfb30000000000000000000000000000000014424c77af7ace8ebf66f556cf219919712d96d24438466ad620221ce1ae9b2cd75b9c526e25df7fbf3c9250583757f500000000000000000000000000000000198aa00723781714152b3494b76ea3ee043b363b3fa81806cdf7e440b4cea907f226a3c038fb95c932710dc9aad4c9dd000000000000000000000000000000001360e4c775f6fa5e987231dce25ec67f61429ca9fd8160c3074383c30a8c0d7ff068b1d1215b2c0cc87129d9c9aecbc9000000000000000000000000000000001280ee6160800c4b0f82d5c2775238b4b223d8a0ac9a8f8013f138d554ba31c9fedb30e0eb5c330da17f5785b2717422ad872848d72367467094675a819f9aa6107183aa0c8685d5d84c27b3aaab33c1000000000000000000000000000000000f1f84251204d9f9328f79a45d15b311984df0715579633a82b5a9f680f6645cbe748b0fa64b9ce1e696e20a5645d6d300000000000000000000000000000000156901506e502a09917f76d825614824dfbc34d019ed53c2ec5395b51512da512b27541bc53331444eac2f618ffd5357000000000000000000000000000000000ea8736a97a33112bea9d07b729e973e3a942422f1d2b24c30e96637b535ccfc10cb5930bb59ed90bef604453df8772100000000000000000000000000000000187378477f60e3eaa225e89d8532bd95babd4a5c51729cca800d364b61575704992639dc5035138664e8e074ed0820033c2c60541fe17fa8e71d58184a055fa8b1dd0bfd16ac2baa912b4472c6056122000000000000000000000000000000000e5281c1c9210269a7f5ccd02cd5a7d3648b56d9ca6a4ee50beadf151c2601e0291fe7f1b89b694500e6c636d4e445c4000000000000000000000000000000000d5d5399f49697e46013558dfff544383b25f3b60681ba5fa2c5e6edfd3924267d0992abe65cbd5109ba8a1c6eadc7e30000000000000000000000000000000012a2104aa92871dd8e41ae1ae6dc18ceb7d0f361a5a4fc67936454b8866b8aec1602dd596459cccf6d9e1319ec3299d4000000000000000000000000000000000268795f6f9892f5b476c3a534673538647300203a51a8ff60b530094608b5fdf16297f02ab7ba41d6fe556885f064a4ff07c19ad4f10ab47e73b6698f9febf3f28087614759e082e6e717588c1caff7000000000000000000000000000000000a5585961328c52e0fefff16e66e3367e34339dac1a20cbc5e89b78804b8bc265e6e3fec1da6a62cd8a46be2f08a6d960000000000000000000000000000000016fbbd698784beec5a636332c0b20fdcb68fd3015cc6d18b541346a5e6af76613e6fcb14c888a2b8133c0f4132fc079300000000000000000000000000000000041805e0adf2a32153b89d1131226cf0ebd77cde3116a168e792ae8b88ba2edcb1fe7275658a384251b805d282ee039c00000000000000000000000000000000024213e4a8504cbae4875617b9b78473e7842ff72415ceacfaaf2e8b415f9f7e411989bada8101be72f9295dfbddfa3f240c881fdbfc414d3e85ead1cdf166ed6929d0b2ccbc35f0811473757b6b41af", "Expected": "0000000000000000000000000000000003c4f051d528166f256d9356aa9cb885db5680c51990d9474a948848888fb82a9b86daa7a2273725ac8ec564ebbf15db00000000000000000000000000000000010a6c4c7067f511ca8f1b66bf9ffcbb275c7575540909262f7c4332c3d75b2f6d2f3ad2848c0d455410afb1cd60c835000000000000000000000000000000000ee5e582554b3930c5670d4e3542bf32e8b871849d7859eafc077bb2b533e936d462f614057f9fc09c4010afab501c1f0000000000000000000000000000000017fdbcaa065d301adb94a60dd20dbae71512d369fc82c556ea0dff66843be768be942e060752591c6eb0718985d8e313", "Name": "matter_g2_multiexp_92", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001353960aff58d45691c5378a0676a8e837260f5819cbbac9cd75c8cc4c6f1e17b9dc9843eabc0b1dfb27ff7631e4e52d000000000000000000000000000000000d6279a43d3526c035e88b0b640b04d42ea573ed07323aaac1d9d5570a8be64782682892415ba2be5cbb13f56e3a44db000000000000000000000000000000001250fd14fd003f88eb6e0e80e9f2ebe204475fc6c06cd10fa45608a17b7039afe0326474ff80c357f86c2825cdf7a16d00000000000000000000000000000000186cd91cfc8ae625e302946f2b393ea67e1107c0bfe938f5f36d28879fa0c0780c847aac77d0310d43211152c1d5f5d314d5455ff1717bdd545f4daa37e145121e7bd9636d7a2b65633e5ca5a63f2d98000000000000000000000000000000000e55a98e8b1e59600e86cabb5e8db8ee622009b1618ff0df3e93fb55b80985bf2a8ed060aeaba53773274d4186934f75000000000000000000000000000000000bb7215fc43f465f51fc8265477fc8c79493966f040e02f0eacc4ebcb3414b84fd94ded822bd24dd5ad5720f12bb8313000000000000000000000000000000000b23328e15cda8a576ea352b5dd7ce382ec781deca6c23f646e42f0cf63e28669539579ea51e3c0afebbb58e1e8e3243000000000000000000000000000000001716019236169bdb4af7bf7d7ce0aeee7900b74023acbb16f6965c2abcf28917bf88d0f9d5bc26a81710496f7821fd4682cd8da62bd901355a60b37ca14ce65d427bcf9551203cae7c346a49b4fa8626000000000000000000000000000000001718a4d6f5e78524d8df23d2c589abf04e3567d2176539a30b9f73c6251de573caa60c2881f3da99c48d48e9aacd7402000000000000000000000000000000000ce0e35721379077e6eb3b572f7f7718bbf775b116521c14acbd3ff19549c75d50bf70ce84326cbc3f9e5e53605d8ecd0000000000000000000000000000000007cb3305ef0d2cd7de4dceaf25d2eff44d4f437e065f6b244bf1b0611c891626eafc4b759d55b45d76e94b85852df1de0000000000000000000000000000000011cb56d2ed32a46bd951836f8e0f92d3824a4cddf011eecf1e2d92d81bff407a04abdfcffd60ccecda6e9443b328d51eea2c7fc2050e9c1ebd05d15f197b4b1be61c6820c8d27ade57d85109d7f982490000000000000000000000000000000011ba705da23100f853882dd166d81ee1d7621550d156b14f7c2123e2681887ec3724626061db68b2c63987325b27d6230000000000000000000000000000000014271414fe078a80587269398afd127ce34c8dc2a4851f76613b81dc99d766d75c703949c1093b04d66a301a79d89bc30000000000000000000000000000000011b7935ff284b0f812b5da5b28ed338dc4c21ebbc7fee04db834732b11fd76092db0e8d80368255b0f1205129081e9af00000000000000000000000000000000104ff0ad2e3db08d3b4890b2e54f29e456e627cefc3a4f07c1109b764dae4142480e3e5312ada43fec9ba96ce587e8a4e3bf7e661d54796c71437354d7d3182770f10ab450827512a423d3dc82d5b43d000000000000000000000000000000000c60749ef36d63960022f3127d0ab4e12acf05ba1e1a136dec89be388b9d7144c1d78c04df658727763dbaa9725bd8b90000000000000000000000000000000019932b1c205a765bc9de0cc136999deb153222a9dd9e9ec3660fb6daef56242d08791d440888e69ca0da2bbe0fcb7d79000000000000000000000000000000001764790d12f5ff79ee4f2c9fadd5dfb1cf47db70b9e86018bbdbffd1be18df193c7dfa71533afa381053a77e02719c6400000000000000000000000000000000044b2b0211cbb407281ab2abc4725c2cd791b313bab8779954a2461ce445cdae60d4a9efad9f90f80e66b1438514e0f0d3a364e7b217dfd649d1e08f76393372d8768bb0fc85c79ef4652417ef1637fc00000000000000000000000000000000175cf9e7eead650e7ae4fd657bc288b6b6392773bf1bbea48e17172a5019637fbb2bc0a3d0d1e3b8054564935c908db200000000000000000000000000000000136da2a625cf72403d0861b9cd947cdad12b1f1e6cdefc4aab6756536425285a7953a1b892df40ec12ac3430fec889cd000000000000000000000000000000000c2d10c6d71cff4e1deba1984bfd17166571e64659ac91b64c343cdf587c29d52a2266c00a57c01feddb1df6439d21d1000000000000000000000000000000000384a782fb31278f49c840bb8f0552ac2734ef36bb3d115be7df20333aa747c92db990f7e879399235d122fdba0eed76eef7b05d5c725ed31269ae9c56dc7ae35048af39ab114319680d4af69be7e7c3000000000000000000000000000000000a9a821cc63e7c9857b0f39f7444a1e00a422f7cd5d0575c26bc5c6b98313abfde51e3f6d5f4c817193bdf391344e5ba0000000000000000000000000000000010daa8c7194a75cea757b6ae4eee85006eda459ff2cf155b1b5f19c3ad341972f72e28b781c4878e8919c7e5abe9a1d5000000000000000000000000000000001154d5d5764aa2b8818a9dc5dce30ba2197a86d0bdc7dee3e600462e295cc3a69dfbf8db34acf138e7a1f16b62a45717000000000000000000000000000000000b4243a09b05a958d78ba8ae25fd3fa85d520b95e56f1dff44e556b221a075f8dd3370313886d9dbfc56a75697454d72acecaee3dd4dc11e341b3dd0073842d90f641d4dd467a6596f337a6147bd30a9000000000000000000000000000000001820f953fd22b71ce00bbe9e9b78fcf5fb28bcb925f6b5dbf5711e00470ed7fd2f38d7291d40514ab4258807f29150270000000000000000000000000000000007b737b56a2ba33f76bcf66c0b26fb44d5f79879273f6ab21ecbfe6a5744da289464ca2b46c55edaadfe3210b907f3f7000000000000000000000000000000001735d1b39c5369bbf886c5063a96dd12b85e56fd9d8ff9d84520918e1dfeccb62bbbe1c2ab440ccecd0fe66f6ec55853000000000000000000000000000000000e591b7709bf00bb2a87e9edb95720de19adc41a42378cf9ebb930c6d3f5993a1d7b6320040d5c69908685d978be8f980cba585b847bec40515a257cb839c7e5d677d17b7313c258e83d630e65cfb5d2000000000000000000000000000000001732ac410b2a7d10110bbf7709dc6fdc91ce742f8cb9b2c3ba37ba5f0934f8622c675753a26d04a176e24a630d090d81000000000000000000000000000000001111a52da6aca10cf40127fa8ab7683505305e0d474eed28a5e1735ee6877aa00c1bd598420876f2154b814660f3fe7600000000000000000000000000000000098c6d19c2ff42c2c57a4924693325de1a91135e3474ec699b70439d034469e72e844a5511e23dff3948a66cc2a2165300000000000000000000000000000000175fb79e5e54963cdbb133f38dccea2d1abc3cdf005c17e8f2de6dba9b9dbdeff7719983aa9ddb602f0cf966fdd430e0b8cd305c650d2e1cfa91ef0aca9dd0d785d7570d6fb67e61fb9b6817116a05440000000000000000000000000000000004e88468d35d72dba6b3e4b9ca216b75b5d20c447064a48bee6a6ddf994b1e22fd6ee8abd60c627622daffcda219645a0000000000000000000000000000000015eb2ae16e3310b4c4ff557f0615519c13f29109d9863418fdfbe6309b5bac4463456df8ebb0b6d9022e294cc16265ea000000000000000000000000000000001288ffe0ffdb96708558d914bc412758770d048c4d50523e2b134f8468d11a57da97e42bea303ab7137e2d26c0b3b8f30000000000000000000000000000000003ce563b63c50b09a80b71a1a82995238a9de31aaf189c6d29307924b6f0990854507b7dc1644f689c5abcf931dd5a3c825e5f9d81273f306a065fd064ae24bc2c5ce8dbff6b22128753663a218da8a30000000000000000000000000000000009e39ce653485caf699ae1d1d9cf2b8c5ea85b80ea042279e57f0beb81056159e49f73d67e7b1f9ece9f9ece7dcd2cf50000000000000000000000000000000008d6492cc335660c54e4a34b29b337b5800f1ef992d124524c799c04c852ccd3cfc01bf39515cb8b96151753147e8c49000000000000000000000000000000000ca779d87aaa3a6552f9f1a10b0d2e635be90022326db04e6072f326b919ee55d4124b9268f55751dc0f18172bd327ae00000000000000000000000000000000112eea543d6609d0acfaeb7be98be609f03304f50c3814ee8a010283146e6b5dbf170c7314598cac06efb9ced1ac2930307ff9660ad0c24cbb139486638a2556687f88fb93a290a1d174bf87d780b3fd0000000000000000000000000000000006624dd7f6eb043da41a36a15752f370eeb3cb2e6bd88b337b370fe0660c5ba8fe64f62e112f91d2524e9324f3a049fb000000000000000000000000000000000415b964484c9246385cf95461ab955ed0390e20209ed405d84fa8c8af9fa7ab39ce89049691a63c61b12bbf6aa2a4e80000000000000000000000000000000014411d7b2db7c9ee78ea14c6a315df3d90827b511db2e2423d660176384d8f8afd284879b22f5aeed73afb2eca4be52200000000000000000000000000000000105bfb471340e76f28901edbdbfe2ba246a8824b501ae2d4a73cffd2690181347c1e6530804614e88e2bb13a8edef8f4bfa8ee3b44c70ba2512c00a1aaecede2180b08ac3ac8c550d70407f0c12e027d0000000000000000000000000000000002b17f4b0b0231be229d87f075998435560ce9046a8b0e8f15e3a9f07cd52f3316f6d8c00d6a872362e7066715cf990e0000000000000000000000000000000003110eb232154f8a06834e2ddd33c0207ea552f439a6127b652bc261158209a00654e50341d333cd1b206a915fe0691d0000000000000000000000000000000007940e209c8934c185e4392f12fc0afe3d234dd1ef3f92df18d76be8fc42bdcdd6d1ea8d5bb6f07b3f3caecbeb5ef27f00000000000000000000000000000000012ec903a8442f68c03300ab02ddd08ec935d97bec9050d26a5e276584592df3ab87d596f90768d2c0918099b28963be58aa85b50e5f4ffe375599cbb912f41d35acbb85a324880148f9b9003c4265bd0000000000000000000000000000000010fdc16bff0fea02b325c672fe06297e0669094e2710d0baf3838f3e234c3f776bb3fd41b967c9ebbc72a6bc6eca70850000000000000000000000000000000009d64ce322e39d5b2d0872760a61a831877c450b1cfac6cacec52d4070b0f179dce90afbdefdaa8466f6a6e2e83ee8da000000000000000000000000000000000cddca46f3b24e05b76e61b4584bc716ca7036afdd914731a61347e453a26d07549e9808e553ee056bd47e53c75eac8f000000000000000000000000000000000451cccaebe1a188d3eaadd40090ca594f071c8b6d0e0d82f5b2d43fa784f8437e4226104c4cfdb24ece1ed75375aa616810c6cd59b14ef4f6a4c2702cc53c65b3dc84988372c1195980417c583fd7ff0000000000000000000000000000000005832ad778dca8dfcfbe741dcf311024d76341d5920b6830cb75893a112c9d86719583d1dfa7287281fb73fe21650c3500000000000000000000000000000000044feb86b4816e45ffb98e9a670fcb039fd9d8844a2c7ff9b7752f20e619195fe6ab1148f30afa393936d3605fa4c8da0000000000000000000000000000000018db9365370a8c703364ba6d9c48b3512da46cc603a43c3fb91c0a8ee59777d7cf9ac646c3e4274bd950d7de92ebce840000000000000000000000000000000017bd82310e251701cafbf8c4dc5b9e6c88085b0df287b6dde7887e1f64f2d9487a25b31abe07aec7d99a75baa5983195c5ebc09190ba3df49d8ea55cfd18370b9d443f9d9084cf84f2236ef4723d2d470000000000000000000000000000000002c1df194f01dcb503dcc8a283f059b82d141274c8f37cdb6441aa33f84f16dd288d566752a93ca23d26ef5834c0658c000000000000000000000000000000001700fa4459dd4e609453284f4f7dab479342675a87c1cb42b601908296557f39256f1597ed3b9ec38ad0a40a2c728f0d00000000000000000000000000000000135ed4f475eb99397cf204f971215a0303316a3ed8b62b303b4bf756ff753410b7fe263c4e97fd4c4b399c319ff3ad98000000000000000000000000000000000a487e179bf1b73627af9d7d2b43bc0e43127a8fbfeaea7ce958ddd53ecb27741eda187745e3917f1cbb60adf0286f5413a56b176fc835b7e825c817d432b9ec6d51b0a66483dfbf12166ee979b664cc", "Expected": "000000000000000000000000000000001327c57e16f03fbf652bbacd16cf574113860eb87b8f2f6e498dc5dcc4f2fa63859d922d88ccd6683d503d0962db5336000000000000000000000000000000000cb06948c539cbf686f6936b6a1ebef2e148d98c531da36272e0334afca5c2b16a52da542a0fdbc3bf764eb877f5778a0000000000000000000000000000000003acddfb5bc4fd5579d3f592977365840be4d3cff96434e5ff4f01ea798e4401930a1f5d91f8de3ff98504dce398c2ef000000000000000000000000000000000a5a332805f704613eb085d6639f99667d0d9247cae34eabcfa399eed551f24c5d5cb05d6458530ae270b1be682e71f4", "Name": "matter_g2_multiexp_93", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b1b06a76e5bdcb6c1c2f1952b49e1820a9d8557229fbff8740269a0b819b91cfd0de20db0afd76a2cb0fbc5fac12ec5000000000000000000000000000000000347654df2084082efd32cba2b270f66b0ed30fa8713b27949fc9d270ee8eaa9b9a7896d7a52dfd8faa3e0cd112a24e0000000000000000000000000000000000bf5b7a2c0c8bc223ab334bd1df5d9fd4bc0c635379ed2b32da13f6178e07217bb88a4bc2eae0b975f2e566f657d23aa0000000000000000000000000000000017042f8585a07304995853270b1b03bb08484104f7498a12bc865f2a0e37e662fc4b0331b94ee5690efe74056567000bdedf65658ec3cca48fd48e844337159af090c5d1f5e9d713ac6d0fe1e1f193d2000000000000000000000000000000000fcbc73d0628537eae417f8efc67af0a4c9c375d82406086bdff669911fe1307576333c389f189f49677cbbfe2ee98730000000000000000000000000000000019d552b85b1445660ca49518d202afdc67b0eb5be02c8d3482dc1b12e5d40a4ff95a49ce47809e4d6644d04aeb67b3c2000000000000000000000000000000000ed536c0f19f592180291bbce59a72ce5e516199dcbd4fbba736cae2edbe3cfb860ead0325dcc8f8d9be1ac126dc6cda000000000000000000000000000000000f5d4f0c0ae3e76b1c41edbbebcf1ff17c7cefd41e7ef8f75dfc10170834d05820149d5f721a8c6460cd0181571fca97db65ad6bcd6f485eefebda0badfc64e9e7dfe7e911f3ccf4f4fb9528dfebdae6000000000000000000000000000000000d6207f6684f8d2f083c963551bbf0a674ba40e691a34ebe6164ff80ba9bab2cc23024a896d7b906fb74c95016a9adfb00000000000000000000000000000000145855e7d610b50cde39db8995b127145d68fc9bea3f075f65b7793acbb14bbb313a1a39bd96fbea6641baae02612b000000000000000000000000000000000005b533ee83cf72f0e4d9c9ddcc6b91f4364e50a106becf766987c490d559d0f733839ecc706bbc9c2c75b243814068a3000000000000000000000000000000000cd8fba13b9ba7557c7577da183bf50810fb14eec7380e3b3d4f2fed62bb36f2b5ff288736bed0578fb6f47fb6d22ac86e0fa09884a7ff4c801ea0722cf6bfa58a46fc3d36058e8c395ea8fe56d9fca4000000000000000000000000000000000fd6a466f2eb12f6337ae9f9b847ac1481820013142af1a474229c5f5f5e1c0bb2d9678c19c7a3a1aa22cfc7b5052e0e0000000000000000000000000000000002a0340f5a0caf5c66719f7d546972bb4b89147989280542787d281901ff036b7c69d41418c21c43127c0158593aa5cb000000000000000000000000000000000deeee37ef96f26a4907e1a8a8f3f030dc09102799bd0c6dbeb1d208a0c86a423d0da6313e0be03c026da5614a6a576b0000000000000000000000000000000007220475449add59b3cc6570701528dcbdedacb9a3d39674ad4aef4d94114f24d2bff32f40b25af97ba883905ea6838a27a3377d7b9ff3aee2ce1194a22d7115b09a9fd53fcfa5e7f76bd9fdd35559610000000000000000000000000000000009d7023ebb73df81455f74cb2708c14ccecacd49521a0cf67ecb6edc8756e286ede59eed54d89eee5f77f178ea8fdee900000000000000000000000000000000002ad48fc3192634e7b01604678473e286afb0efe67a4377bb885d38b59ea00202241fb28c93232ce7c9a3dabb136a53000000000000000000000000000000001934664f2bfffb254f0415d6769f4e2ac710ee88cd822bf5da5df3a2541f887e4155dbb7e8056efb2a0370d6f9173e3b0000000000000000000000000000000019df518e1ebafe95adf683279729a3298fc8d7eb39c9a3dfe4b6665153f970e243e50dfb16fb87b3be54192f69766659446a62ef5760c995cb3cd0984d607c232c1eb0df5516a501ce448a189a3134d8000000000000000000000000000000001870048d360f397877321904563d35bfd0817ce464e0078e9605a4744e2723f49f9cb21dd3d6f37f1f9aff5a6a99bc530000000000000000000000000000000000e29dd0da13ac451d013d4a38408827cb0e739772e1f250d31e4192ddc13d651ab576ed6b8f4ee44e928fa663244999000000000000000000000000000000001646183099579322e0115ab0b3bd6c814e216ae6b2b80206354925565b7bcd97bc12668b7f3530a95409456ac99bf01200000000000000000000000000000000092f6f594ad0d92c9c64f78c819c44320e6bb5dc1dc8fbe58acc7ce3c101e49a74ae6d50b1a668a3b7436dc445e3da345f0c1a7c2dd281f7d2f006497f99f65d6a1e22f1d9aacb08724b3576aa19e19f0000000000000000000000000000000000428ff447de18dcc11b2c5c679bc2efd125464f589013c6964ea6cab33d9b7cbcce3a5d6177bf43114ee256f23fefa10000000000000000000000000000000000d1ded695e88dae6dfa702375959831f4bda688fc0faa289dcfb90a07f3a7963f2c9070958561909a2051a852cc15e1000000000000000000000000000000000c39bf1d11fc5693167890246c81133faee93a8639f459429757965e0b62e372153ce53c61f2c539247dbe7747b27d1c000000000000000000000000000000000e84ecb6dd9cbd4133c22350f07a976ae13dcbe4c6ae09ccb023f2118fa2dec68c20ba2266f9b571bbe30dde97480e0a94c1476ae0a62c502aa096a371e30ca885dc13fc417e3dc9bc00bcdf516764100000000000000000000000000000000015e040fc8753f06ed1112cc06e2cb7142a4fc984834f01faae718c17cde782d5953547857ca9aeee1c4a7d91df060d330000000000000000000000000000000006789ac15d719a7159b650b757f7d3cf58fca02d3b8f3685478ad5e5b1dca0508dea7a8203ece97c7c6d32b2f194458d000000000000000000000000000000001824d75634043cac3fd17ff0bb141daf7010f70b5941d8f75f1ae076713afaa7e0a0a25fc71038baf1b1255d64c914c6000000000000000000000000000000000a2f71bf85af6392a8a070596e30225bec9e3dc12c70e8df7c545bd6bbcee56799db2c9a8d2504c4f90ecf6a5e18abc9b677bc9f1f7572f808e969aa50efc519192ab8653c71090e5cf8cdeb1a3544dd0000000000000000000000000000000008bd859ff1f22d682f86e1a0e3bdf3a332ae78d64814720687a3de44c9bdd7506d2696b4daf81a94d33f64983967fdc2000000000000000000000000000000000d7b4b958e0087f8edf18a4370ff98700764c126808d5c52afd3e71ee326c766c1e5712dfa351cf5b3c518e52133ce780000000000000000000000000000000013a145331bdd9c93e63edbabb9f6c541a7c4dccb1705f07eb353a0407074a76022a8e5f5f2535b41ecf6474649e257bf000000000000000000000000000000000a12e461b7439bff0dddb560dba21ec53ce88f71fd3dc10723f3d8742ed63a1ab725f7e9619ca1ccb729564dfbdb1be7f5ca580a25a5c87015f57f7c23cc51a0beb5926c84d44659e45512da51aa0cf4000000000000000000000000000000001430a8184c5055008a06ea22ca9c997d1a24ddce7e374937c32ed1e487c80537b238a589b5e50b86fa194666bd3410e80000000000000000000000000000000005c78c94f457bdda242deab79524bd2beac82bb1cb427dcb2872b56d1f46d11fc9d69ba132004958fabc5da7d6d103fc000000000000000000000000000000000e985e8ca038b5dadc9fcaf22699e75cad9d2effa47fe7d4c579ee056b1e34ccc540372111a665041062fc6c39e05d170000000000000000000000000000000018c865243534fbde740de0ffbdeab0d38ee878c20f5d84c0226d1f2b14ed3359f5b5b909808b6b3789bfcab3be75c4cdfa1cc45c35e266a82899d8ea0c9c1f96f96140eace41a8758a87975b088f0231000000000000000000000000000000000c5b10541ec34dc0a8b8e42d9d6fd6f4f71e1fe56b5afa323f4ade35c0170b5e224a66771326d9edbddf2bd38c6c68ce0000000000000000000000000000000019cf33c19936f7489a1bbc095d0f5c6ddc1f43bccf7e8d1b30fb8e8cd1ef747b483b9a8e9faf21cba7cb17fbee887ad70000000000000000000000000000000010e83916faa7bc9de9feb8a7f34ac6f2aced06a771b662cbce846107245edb9c07632782300e838957788a8d88c8253c00000000000000000000000000000000066127bed5ac9f2871500fdd68a03ade57c35449d4b4186b9fac7c89e91b4ebf2f2a02e94d0b578aaf60b32017f147a493d2908aa9266844eb265c2b1c17f8357a5ff039836ba83c837909f6a9d0bc03000000000000000000000000000000000cb5a734a28b44f04d39ffae049fe8b63b138411661ca6dba00c72cadd47b50ad4b71e858e817561682d6ca378ebbe870000000000000000000000000000000000baf4d689baa09aaf763ae7e142b801223c8ff58f2b541ee4c44ab2460fb8f6dfc1e9f61a8d73aeb92d7d08c281cf410000000000000000000000000000000008a0c736f19bd0005c9d25f88565b1355e53fa3403021577de536712ec986567184f4dd626127ee80dd03cdf9044b2ba00000000000000000000000000000000063ffb7a3b4e057a9ffe233296c11fb462136fc4b187be6f9e36f9e6d335a3d673ef8b9ae6f60c146a075a1789f389cf3b94325aad8a2c80971a781bf6f6bebad63ee37405ab7e903fb7094beef14d06000000000000000000000000000000000c33d89595d039722222b9b9ee7ff1a0dae896a8de97f202d3aca00bd81d0169f14676efc4b051bbd339dce862d8b60b000000000000000000000000000000001109a24dc6f70bea47e040b24df395bf561cf5f1ee79e90c9b0480fff0795677483a85e6f2e9ded4f36ca849ff39d6f60000000000000000000000000000000009c7878f3a4e4e3149b72149a7da91bf527c4d7c94b15ba80b02e0e50b02a2c482ecae9f458a881c87e669986514f6d70000000000000000000000000000000004284448e42187c128578b801f76d421fc508cfee9360a7203a91d6f9cc7ccb6ed3211fc5df9e15f14aea98bc298b2f95143a8e734824840346078aec03d6760564870c5ee2b2dc13f8a39ac452be9f5000000000000000000000000000000000271ec1a3f8e3364ba8e101b49c0bb17e2b7c7f27a4aa4d4db5c07203195050f30c1a05d33c524a84b1a2f0ce31a587200000000000000000000000000000000082ce9d1da5d7f192c537b2bd617b36b65f88b308fe1ff85e47c64b62dc62324458493d1cd1da9f5fe308d27545fb6510000000000000000000000000000000000b30356b59eb04258096d0c3f357fb04471583cfe6a060de5279bf2cff4413678c1716ba87d0b6de6b6e79a96ec26030000000000000000000000000000000003c02470a14211fef14d754f6f71efb33a06a76e099093a5b9512f907ff819e1e0e15f14995febe48852007bb5c380bd0dbee37fea759c2a58cf360c654f85298e8ff44b3f900e8229c3f838345d053b00000000000000000000000000000000172df3290c3c5044d590eea59980d02e02d4fc6fe7948168492362de8f0a85df0c3d09d8cd8b206cc4d1608311ef4c130000000000000000000000000000000010e4d14065315a0d9e48204e47955ee9652b08318251a7836f32e6fc015d4856444172de44b3b88efa1b54dad346e9b1000000000000000000000000000000001549b9c85cb2fc2c7495d7ef6aa1452e58937baf58717037069e6bc6d72ced3a163f800991cd26510e71aa64c44f66170000000000000000000000000000000007814c2f1734fcc8cbf9fcba06b936c86d0452a2370f8c9480b97105e42f9babfe0869cecda7e15500e9d8d868290201b92f9db82d0976f4c379622c4028002ede2ab17f647bca3bbfb159045cdb342b0000000000000000000000000000000014f849e9749a5ff6b7b10daac7f5934be5f783d49c8593367c4243664e01b1d3552e878802d7dfee823e0122e9fd46f90000000000000000000000000000000000d0b32d7904dbf08269ca3c6ae3fe582501f55e32337ae361fe4a58dada560db54205e56a399aed33bce8758a05ebcb000000000000000000000000000000000cb21440baba44c3cc6943c8cfa2fe544a652f06423d3de06c2ff734ebbb544da07ba8982b3009b6c4857b73ceca570100000000000000000000000000000000174ef591975fdaa0e3cb05bbb4140abcb38f685ce4de77c95e2cec1911985557b77d9229940b8c9157ccf9fb553e8e0d98df4ba50cd5cb5a02d5f50b3ba23e5f5b0172a46cc315a0a94fed05551a68af", "Expected": "0000000000000000000000000000000006da1222c7ae02843ff289931fcfcb315f621972f45e4fb4160b8bf48cd8102d50fb53d2c699afd36892d91f5e608784000000000000000000000000000000000523048c5de2d0139965c976d8c3328666e99c249104712719e992334442245e955cd6b14a1e3d666220617d78edcc630000000000000000000000000000000009f669d4e7d89fa8d999d8d5a6323da9445583344276bd6a29494a91174aeeb29132926a893d5a0eeee9c3048ebc0dd200000000000000000000000000000000099ee1c33d6f09a8d063393d2a8debeaba93027e31f7b23c5170b6747f56bd6e6494de966dc280dd67a38d39ae35a336", "Name": "matter_g2_multiexp_94", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b46cd281a09b85d977e88cb2251cc61cf13181522cf1c344b114783c4fa22d08f2d008faea3dfee8ea7c56aa35ee39a0000000000000000000000000000000012b530bd34f5b31161355436c7dc444d41d634b0ac3292c0096558618005fe82d189e4b208a48240dfdb4d50ad44dc620000000000000000000000000000000014d334e7835d4bcee2698ca4f643f9692f28d8090ebb8ed8f67c60639c64eb116067e5e8a6d04a0c88c765c608d57ef1000000000000000000000000000000000578cb4e243b4b20c99afefcdc0e0a9e308ab4bec6d655a8c4981a711515c807067472a6fca30060d776213b8ed98d74e49662df81f6bd455ee554704ff0c7d5a589d91e017d7ab4c500d36378c17c8900000000000000000000000000000000046ad1212696acdbb686543d284d7cf2e1e8e8c10af76c6ba51d55f060c006dbab25d3a789c71c428f5bdde9aafbf6d5000000000000000000000000000000000a6a880d52fed6a45bdc61d9ee78d8fe472e76ccbe155bddd0e2a967f4d116bb9f2dd4c62cc6f7224b835c8060213ecd000000000000000000000000000000000786544589eda15edc433edcbaa46d4953da72473f04169ea64dc114b99f0a58181d41dce1fcaf7f3109f66aef02e53900000000000000000000000000000000030759c3bdeafc94fc8fc0b03ddcd96869459bf54ace74582aa06c179323ef076aef89c09ce8e7bf9109ab2e8c8fb0be79eb26c79d78ab84c4d7e48e56889a601fda17901037a74fd79355e7536f3953000000000000000000000000000000000e6addfe0db96a7377fcab1fb92183fd7d7f13ec003fdfe0740bcc8cf03d8cc602d5d808b4bc874f34944a65b249997a0000000000000000000000000000000014a4337107e716113d8ba0fc7f75e85edd1c132e2b3dadb3f9cdec1440f261513646525314b5c0de6fd372472aafe877000000000000000000000000000000000d472ee0484ed831f8ddf7ad86faef5443df8b943c6fd4c3f94c8d52d9eed6fbb53107170a60f25be52219ca4816788f00000000000000000000000000000000035d06ffc452c65a31f80c3f8a0c1e2d15e32d993ec06c50499bc0fb8f669acd3d2182ba23d942489ea922baf61dd49cd2918ddc2bfb7f7cb3d7e74b43b9a972c5b51ac20ea83f41d5b51034b5714c0b000000000000000000000000000000000ef1f5f6b3041939557368d613279043d1aceaf5fee3ed90b3b756ad409d700fb41e62b3758c8c2d325db7a37f339c610000000000000000000000000000000004d66040a8e055399bacb6a1e762b698afbfabf789caeb957fb7a3dccb01d7dff5414e90f5a14961c4e980b298f834ec0000000000000000000000000000000006efe9e66078000c26d375e87ffaca643aae9cd3f8337f5718e0e268b74f4b7838f7661dc0ce60f557e162a21ff467160000000000000000000000000000000014ab782a3b2c06af7e9c2f28f1604cbfa8a676a874853bf38195780751d306936cefd1cc38c2192cb756e28793d2abb3e9a8159fd7915c15db69355514d9dd26c66fbd14af969ee576401b1b782fc6d300000000000000000000000000000000057270788a199a894b37a526a26bc4d293780d365a6b66247e7417884d543dd752ef7c89f2f4b38f4b51e6f9d86b45ad0000000000000000000000000000000000b59fedd6798487ec09d226a7406b27f04f7983075b4659ca6a78c6bb8aa83828fafdc6488518e2cba6fa4193de938c000000000000000000000000000000001105c18d92b4192833302814ee9b176831e57fb64b703ab3c2d3f440ab302c8fdf7ddc81933d3b1adaad16038dd6dc1f00000000000000000000000000000000020509b08e6ed980df29da649051c7095edcd4eed4ce95cd797da430cd09062a110bae21b6f73daff2053fc0289041fac818ce6e33e581595e83cf8d33a62edc26ed38c22f20c6949a94e2652bb954cc0000000000000000000000000000000007be348ccf6a76827d3b9b33e7a89378c133c9b226e47dcb205ee061423ee6e1b838bc262a7befae7c15aa385ced00bf000000000000000000000000000000000689787c19192ad55b9c6c260a5ec3aa203ef71f0b746eebf10f82526c4fadaa8570936d7049c1a46e7f3cdc455a63a6000000000000000000000000000000000306965b09678d481aa4c754d56a0bb4565f16f7523cd0b404fbd39dfc3b6ed483f5239fa30f13aa3e87918ca039d5ee0000000000000000000000000000000000a2586143f9610a96eb0ef86593988770db5ed49663eab72f8c368b9388bdfbcd02fc6bee09f4fe055813d140ca0fa89ab338e94b31d22947dbeb20fce3150127249d2db6107d95bdd032eb24c49645000000000000000000000000000000000018f46dfdde786a88e582ff6addbecb4f58e12c2625e3d6440f2e5b5781beaa95cad6f63b7d132e84700e7bd344fe3200000000000000000000000000000000185a4fc339a95a50551d53c18bb0dc3b74e9c164729c2b0d919392f7aad2be3ebae3b8f676ab81ea05233b3039918ab50000000000000000000000000000000015395b020a9d0bb336066c1347dd91c557b6ae7b8817cd8a2cba9e5bb149ca3401d661227c26d52a9be234faea894c8a00000000000000000000000000000000103d9d7e33a0767554e13b57dc756981488a3c7dfcc026ea84b35b0af21193e301226cb5a4760962707d19a95841be9296acb797236dbd0316fdd355f07b9b45c9bc626f73105e87c376af4d7dc075d30000000000000000000000000000000018359aad8af59cdda484232b885d1b14956ec04b5584684b13a64d97b8310c283e5d66637dd75de405f5f4bc65a6879a000000000000000000000000000000000849fd55e4f3d4dfc643dfede6356826eef21290b84f7e8e226deabbc84273d95f7be5479e9656dc907ec367a7ebf8f60000000000000000000000000000000006ee01b54eb7834b4de53f821ad46f467cadffce6df09751b728d0952bfe615253d7ad173892a52c6181810a815bd90600000000000000000000000000000000161472d45b56dd9fd276fc607f2eef84c5c843ea05799e732d7eb6dce96c632335949e1b3a06815e410e919f4cdc3fb360bc12a8b34e717b2c410d026660c14182250d7c66f8f88dd4cc94e550421caf00000000000000000000000000000000107ef91cf3a3068c4e5644676f7bc7c5f9ecc361524bf3fe2ebfc606f22f8f83b38c0d4bae89f3cdff6119cc27fedf820000000000000000000000000000000006a7f7cad2fa9db8824e4e30da7158f7737d2536554b904ed835c37add0341c07c5220db0f9801da2587a456300c7b75000000000000000000000000000000000f6dc3adda42dbccb1d1e3fea8918f5572e8b26ba3011429e754edd28559b731853761d33777f4e767094f80e63d417700000000000000000000000000000000107d93537a79173ba9367732fa3a28113ec37e053cdf31ce6970dedfa8a9b4cd55238289be9a6f40319e3dfedd132f95537f0f732fee8b882d254a81704d2310c05dde186232f3cffc05401fa98302150000000000000000000000000000000019dc19a1663bb05ebfc0b7cc23ea9e07376de413f77e15a685a3f11fc19bf0ddf38d5671e2a5e6e31624cbcd47a19cf60000000000000000000000000000000019e78aae57f327fbe8ce794afc22bddde08ff9bc9ad3527601cb1fd5dc0b8ed8fdf3b210f86760954b48bf61d74162220000000000000000000000000000000013954a533bf871e99f4a7d81a8b9931c480ce7fc47260c3708c590ade42e6b7bb887d4d24aa18642d010a8170cf85d34000000000000000000000000000000000a561d3f64ba31a6d45ffcf1bcac95f8f665133a1e962e31351ec78e369042bd3afb0c43d12b3087168c1142107241f31a22bc0bec2501a505cc8e00a24792bb380ed451ab6f56fde07ace8b6c9348a20000000000000000000000000000000007149094366e29537b0ad7239ce04bf49f253e4b746b9fe440dbf9b425bfff21064fce66e286e08c87dd83e22a3b499b00000000000000000000000000000000045ead132e0d03c842656cfc82a45c8b4a3b0cee7a5d071c5f235791ff7b5ead071b2c529b446a15aa8837aafc11222d00000000000000000000000000000000013159458f2123698ad4e7d41da47ad7d5083b928839e346a32f2307ee69f643ca11335d50e47d328b0079f1873cc7e800000000000000000000000000000000167edcf807ee723ba70e352367705448047c6b5223fe703381af6bb103cbb24da739ed005b14fab5699fbae6574505a7c7b10c801fb9d929432cbbe994b404d3baa5633628f396d20d047fe2c2ac2914000000000000000000000000000000000feb6f6f85903b3c8e4d6ec2ff234775f12727fdf7c35eade09c9773b004270f659b00248338f0b749d6715778f1f4d90000000000000000000000000000000003300794df19b9e472e8b869a2762c07a9251cdb96b508dfecdbd62fc3c3843b37118d216a64519bc3bdb71e40f9bd700000000000000000000000000000000005fa144135a5d6cf1c73055750ab6582b4c6d368566172b75902b1fc7a6f5de2a251ca7efc7ac6cc6c0bded14df02b700000000000000000000000000000000004239a7bfdefbe78116a588810328024b1bcebaf8f28f09387dcab66dcf2b02c94002df09d12db369fef9dd960783c0b84f2f3f31d9869799ed8bfc2cb129dbbeeb096d771730ae2863c4ddece66158d00000000000000000000000000000000007c8a24005575a3098c12ffa65095bfe227ee59e5e978a7ccab7a9a72391fea61690648c102ce24af723945bbcafece0000000000000000000000000000000000323d57bec7dfbb4614c8c3b286860fbadbf71901fa006149053ea614dafd56b1f3d6a86fa55bf1cbdfe8af4ff08dec000000000000000000000000000000001180b2b0b9c4c12f6d06eec07bbf6f5a220722015fe5365d1c4ca9e58ac9c8f67964d8230152d7a2220575c756bdf8b0000000000000000000000000000000001969a364c447f07d0820586bade587ccc816e50696aa0c5ea4f1daf6cd577769a890b44caa013d93e7f21f5ea269aa85c62206fadb762c23bf77f69f69bd492674bb92edb39248ad2a432f819304e6ea0000000000000000000000000000000008a51c01c3bbed13d42a4da626a8b89e2811db1d83d7de3332b36881ad14a5c8668ece4f5ed2b71204810457aa3d75cb000000000000000000000000000000000658a56aaf627e3f776d3f03caa2c00425bf197c6fa20c92f563f48260109a8f935d0d1638f5039486ce0c0100834fcd00000000000000000000000000000000126d1964f2d964c290cd7364e175ca4a855149e5c4ba488829a436b09ee5e21f6c964e439739f15317873088726bd51f000000000000000000000000000000001803186f88833393bd853970ca4fe414a43b7a619ded1f9c830444b4d43a94e9146146e2284d690436b395bf1e3fad15a6f950de53d07fda75ab43f73982c2684edb06317568df15b8712dff2ef782830000000000000000000000000000000002dc3756c7f4bb47559cd720a3acf4159290d7413e0498877d1fe321cbcb7cdda90b6c8b4ef8e27b2642b82ab9b3174d000000000000000000000000000000000c7490f1ccfdd91aa37a3044d265cb0612bfd9c065c370adb813b2d96f02d44041e79921d1b8935dcdb8c83ea4460ef30000000000000000000000000000000007beb34bfb9ba9b6fb590c7e830400888095d1958b252d187c184de91f165e12599d66345341292fdcb662deadcded030000000000000000000000000000000001ce203d58bebe1eb5b7cbc6038f75b2f7534bce9f50e7e4c91d6cc5ac1bb68d9fd8ce99206c5ec92bcabb71672c6ac195a373fab5176d124f783a36eb2346dddd5c4eba9e24e4c0cdc4f925e2e24cc9000000000000000000000000000000000765acace3e238e51bdaa08c0f6d737c9de55b5ce9ac3523335f0d35bfab6f4e7e2944b8aa4ee031ae9d39d4db96e9ac000000000000000000000000000000000b0fd488a6f9e92c4bdb5e82b52a0035f9a0aed7f69ec65303632017669f34d11552f849326e4dd204d58f50f3ad124800000000000000000000000000000000033991f66588b5e39eb78c7cbf62a74bbde2fa1b7c96164cb58040f0887c485b372e0ef4def9d38da9c6f5c4df2d59a700000000000000000000000000000000187d41fa7905739078d2c2f8775394f830d20352a9d91e97568c6929412f356009239bc9e1da3a8c766e89d09893b5b5319d855218eee020f9cf8e4c0b6004902f0b16eedba8a1c911476af34f65dd40", "Expected": "000000000000000000000000000000000dedf92894c567ee656051a7f02384edc7206152af6d3c5f662ca02559a3cc349c6b034c6fadceeccf652a396dbec6c900000000000000000000000000000000089deb173bda620678247a7218408594efff7ab0cebbf627b93ed37e553cf944e09232b92afe2f5f31d29bb9ae442c26000000000000000000000000000000000178bc39b2ca8b032d3cde53d2da3f8797026d78c76c51381b377c79992f027cf55ba4e182773c99c99ea6293a948e5c00000000000000000000000000000000195d9cb91537e77e7a4be4370b982b6d36190342ef6ebc2250a9cc8ef6ef45211736ce1f41da899178c1adcc4927a9ba", "Name": "matter_g2_multiexp_95", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004638ececd7f626a069b1bc3ad9d0f7cc71e5f0c1b11711fbfee1f81466b574f7a11de8161e55eb574ab367f56b9d6480000000000000000000000000000000013ef4f403f139771afe7e97815d3b3777818a3054d02125d3a25138e504c8c2c6696061572322aa19ace9ffd8e3ff308000000000000000000000000000000001910f776582f5acbaea626d2378e9da133b63afa087f25c2cfbcd1e7b34f6a237f2e9adccc303f9d5efe22496ee2ab75000000000000000000000000000000001963bd62098614c4ca2fc2a9e2d679c2b74bf9d322d34377cc63c3b8e7f8a4eb7d6d440d081e044606402fb3f51b0cee2a397c2f19a8c4e66df0e062f179be2f45a0c5e104588222a1a78447512f299b000000000000000000000000000000001935ecdf4f21cc6b510321b4ed2663e339954cd7399b9d67f1d9e2ea7fb9bfff8531f83ab59d3f0546393dc289ab2dd7000000000000000000000000000000000f390b86fb4cd4c1a072a83e1d1198a57a650fa6e94b69d983b693c592bc0c8fcd9a46c6883adacc4c7e2546dcd079fe00000000000000000000000000000000136beae11ea54ae26a8d69015ea7793675625b2013dbeb081a5ed877832849d67ac709b81fcc4fb322b262ec3776c0c00000000000000000000000000000000011f1df574f63f679b6464df463b58948fd337a4b3f159229ba0313cc040303345e75a3a2b0ed0dedfbefa89d8331d074f193d5a575c80a3e7599923bf5a8ba8a48e8f98322d1d8eb1da42e446d518c1b0000000000000000000000000000000001510378fdcde4027999edc99d49bfb46423ceb0d740829e310f8a381a7632fd0d6b6aa3533c2702a5ca76d386ac0145000000000000000000000000000000000bae237bfcc061552ca07eb14300cf557c974611885aa6894f7933f7dc7a0a1cc3b5587bbe1ea5fa604e3cee1db5f7c9000000000000000000000000000000001743207a1814990c798dc3de272a02b1b194a485bf09faea382dedd957861dc15cbf981f9906cda50cce2899785b9a6300000000000000000000000000000000106f902004c66c80437392e92cad73bed6b73010bdc7b6a75de4c01f0b6fbe5b8d1f47378279bfa42b3af05120854ced07f2013742ddf2d35448feb80b6b7aaf2925d3975ce28ed2b1ac789886ae26e400000000000000000000000000000000123362e41268f7821fcd2294b032c6a51c6d80506eb052ab6132267fa248a1a60c3e4eb2e75a1674bee1c9d46d82b9180000000000000000000000000000000006296670461ca67081cd76528446867e1a4905f88742d0ed8d1f7baf86e0a5e5ee86c8b0eeef07c14dd821dee0143bea00000000000000000000000000000000058bff9544e4e02c063158a52a68c93c7544e8157d37159dbb99b51b09e3d8f5b307bfe63a10fa409e20a35219ac244a000000000000000000000000000000000b135edfbf53187004d0977db94eeabf426ad7bea84ad76c6ac771fa186a073d430af76d717070e3c4057a7a2da095984e637a80a4eb1b2caba68b6828aa18f956c62baa7c5e9e591a15156c5abb605000000000000000000000000000000000133d3a223112dc5665e78fba8fc8d040d133858d984e66d2382d5e629f9369dd127e93c7a4da77fad98a0520ebedfeba000000000000000000000000000000000e88515db391bcdeeed2a9f64d27387af0391bf832164fba79100b560d8150debbd703c140dae3ba9b1ec35c1f45670600000000000000000000000000000000042583722c69a19f413392c6a2b75c8ca969be85eb951056d7e1d94e046dba49c346d5774009b8463a40b0576ccc1a6e000000000000000000000000000000000ee61a9eb6ad497c57405a44d798868e22b4fd5b8c480e9938cfdd3f1817eaaf331a9988368680158c59c2801add0a7a27671631f9afd9d2e86f263f5c17c3c11c7f6e43efb6d75cb2cb8250094f228900000000000000000000000000000000020352de9b4e8ea1acc8589bb22e23dfd0ae3a80de9e21bdb3f6391dd05a012e635de9e1f5f450bf4aab05728c054f8a000000000000000000000000000000001733593b94ec800bb59ed97dacbefda5ad882a8023346bdff8f471c5613c67247e27d72cb4ed8cdaa0f236018dd2128a0000000000000000000000000000000011f272a3b25bc519fc3e229211b846042031e22fbed22ecd0d1a4ef1d05feacf105772d71157e3d7293575aca257cd5f00000000000000000000000000000000153b4b4d7d65f7bd13d20fee4812f04706c96cd1a0d27b7e139c47299805e0ac86e8941aa38d90331c78a61c2dd56aa3c2decb1f482f3eb48e7f52b89f6452b659812ef79bb42fb25f03aa9969faf9bc00000000000000000000000000000000143e1f6dd9397f0e89a46c6ec995bf6c87ec8a72b309f050dc5b3134e00e2a16327767cb0573ca5ea9776215a5815df500000000000000000000000000000000186cb3af2cdb4562bf2d0c180079547cfb345cc3943fd7f9203fabbdc1547079cb9ed854f9b1a47f513e318cd409df83000000000000000000000000000000000c8c9197fa5a1e66b371a653c5d18c01fed8d17a8aa92d89b2cbd954b9fd2931fa61abb6676e4851dc9481732c6195610000000000000000000000000000000009026b259e840cb5264f6aad6ebbb09661f5b6d980389817309aef99e4e0cb228d3a7a06e6c25bdb1aeafe5acdc44441911eb1de54fa8ccb746336b681504fd08f995c864a8dae2aa866862f81f0e7850000000000000000000000000000000007bceb74ba86c07d0fca20e4febd3b12b1fe9f786c9a5da0531550244f40261d7ce728498fbfcfe16cc235db6ed42e11000000000000000000000000000000000883104ffcc0d040d70bda04dcf67c1197c39e200d4d9daf5f3c185638a13dffe3dcac94fce4175187dad867e8d2b78c000000000000000000000000000000001404e48e86f199486db7d40076cc8dc4e2aa2c1b6d4bed8f027512e2c71817905b26ff4f0551f9c08a2a7a27b2075b6c000000000000000000000000000000000b789a6addb98ea43c0f9e85831a75b8ee1977936c17929fb45d4c06b4f1ec33b9b41e32b52cde542c9e4b64d27c686cfd0a61dbcb0c657e824cbcf4670a31a95ecbd47a9b93812cd5124f3ac9450c1b000000000000000000000000000000000654e7f3985bf90dd1e3169382690fdc0f804eb6384ce407a060f539804fe6e0451094abaa0dad611c15d3ee52f31a92000000000000000000000000000000000deeec957d58a2246ff8f7b7448f5198647576c16c1717369ad155ae36d5a6bdb42c8d6a1f0a095891fb0890b6203f950000000000000000000000000000000013a01a6ca4c296f59cfa4a5f5399d28af76ffcb8b218c861d5e6dc603e140f730f632028c8da46c823d87bff5ca703280000000000000000000000000000000003698f659e86b96613ca74a480c81e749bce4b74324976c1d241a0911d078926fb2adfcc3f901a7a015a02f525ddbb808118e9c70cc5def8e7d258e05273937c514131f39e0cc9fd2a3620dbffc7ce3c0000000000000000000000000000000016ce72e1798ffd84b52ac664a184c6cf5ce1ca2aa263c9d056355cf610517e9c7bf7f057c342f6e3ae801b84c2082c0f0000000000000000000000000000000010992af1438eec10881b5e2e3fa3b1e91b6b5313ea58dcc0cd2159f8ba6ce5912d81b38956929620e04b3596f6835a6f0000000000000000000000000000000014315dbebd532d0c835e8e85a02c0814574cf040a20c18d06573718223c8ea15b7ea69f0cf342dd09037258398ba4bef00000000000000000000000000000000136d13a83e72525b2d4af54d14d5e21d8bd9bed18543836b02ae0a7e51d433c93aa1943e85f978a8a9ff4454d8c5d120c445931b79e2b826aca02d1bfbb00c2dfb6d30ac2ef97a4ded18243b1afce7730000000000000000000000000000000002c1bf7dc75006c2941b89a2de52fdcdd1b4fbda5b14fe3fc165915b90fd9d93cdb8105898ef59d5b374707f0afaccd600000000000000000000000000000000049a16efcf81de84e443666bf990f6aad2145f9c9c2c61a752e256e8f447dfb27b462e4553544971807f909a666af12f0000000000000000000000000000000000aa4702fb69d791ef958826753d3f74f61c7a591ab94bb6c1bd5d82d94c5877121ecfc1e769d0d16ebe491b775ad96e0000000000000000000000000000000008cd7f2562eca6c53a37382fcdb04be53998f45c2241bfebac3d1fb08d8e1d4df3182f2bd63861d0de72d58072356ccc982ae6de98df906922e660d461009ba6c04cc6497f3645a66385c775b21b210b000000000000000000000000000000000a6b30c4ddb692ae33c903693cdba00ba48efa48e90b9cec9dc747004e57a8d5a05b5522634fc0de306d38c28390dbf4000000000000000000000000000000000601341b3c4057767a910bf30dd16324ad7abcb55b7e98e73584f26d7f87d8a8d24ff2113c12ceb3077bf65e0912b2360000000000000000000000000000000019dc9c50f613470abdb5c763c0272e88e34ed38e617d6757f4e70d05b8ec9f67a023b4ec1363e7e60e38cff64e18f0510000000000000000000000000000000013fb1858f7efeec5fd03d9f7f4513e3e9103c340eee7bfe48ed3cd3dd073b96add9450a17f12e161f1d44669b1b2f813000674ac5d09c6c599173bbe9a43726c120c3a60a96d43954727a2f33ac4320d000000000000000000000000000000000d6c135bfe0fc7af93571a69b7c37ba691f051d69582cf159cbeb0bd59b48342172a82a3eec2e3d440805934e1574f2a0000000000000000000000000000000001b04e56cb3bb221caedd3582943f89a33b955f624f9e473941f1dd987f2898339142a654d11d87bf8bd2fd0fe0d4c1a000000000000000000000000000000000f185fd420b761a1e38d542558b0beffba916f369b37296fdd8878a7c3d2ac9d3ab1d8e45ad799f0d81bb439b5e5058100000000000000000000000000000000002d10ce460c414fa1094ef2b7de8f1ce024b6d086d10067be0fed4e45dc25c8e50bef361d39a2743be1e1ea4fb7e2ef773f8e9637886d795b75e7ecaee512005c1780e7ab17b9f20ae9232595478bb2000000000000000000000000000000001972ea36bae504d7047639ce6e0e6c3b16afe89fa3d6c6b33c910c8d4b70782d8165912e5bfbe8bd84f78f9f23f7f956000000000000000000000000000000000ae55c4fc1c01f1bbdb060191e8551a7ba5ebd3dbadd138202090d7dc6765fd1ef5fe8204ae76a8bcfa03ee5985a35280000000000000000000000000000000018ebed295805e0fc14f1c7b0e6ee12ca48cb7177c1d367a613e0d6cfaaac5128fefce0e8f38d4e2f11ae0d327be466a400000000000000000000000000000000157068d89fe48e77e0f62e3b5b0293423f35c5f4ffb9e0577f5aa49e91cea6bd312a0e65ec08af9c1f53de6499409c8d759d0bab12ac790cc3a16e88f1a108e670681f117d4fc7d01f8c5a2d6ca7fe8e00000000000000000000000000000000120e4a8935c08032dbfc19a43e2a770b12b05cf1dc229e12f683f0d7f604bc13666bf318fcc38038b618ef83c9448b870000000000000000000000000000000004e3f851be46bd85f37c8b1d84507f4ed63ea76bc305cc26a6f4cfa2135d5affcd3b319d9f57619e21c964c6246fc3f600000000000000000000000000000000138733f352029373b19e1c40d5958a04257e2b344770e1bbb8f377bcfb1c7225ae7a8b0b0e57795ec06a08e13c90d7de00000000000000000000000000000000093e85783c556a017829e28bc42b607b1035890fb9743bf0e279df4dd8a695c1dd07a76a213087c3a8a7e614b29b7a1ecce865074a8a41f8a3f40228046c5be68bdb50ced10bb73ac8472f0525302938000000000000000000000000000000000be1ae00f9ba0a2e57f94728508e0029b1bafd52c91ce718ba41790a3541117d1a9f846d68440978cdef016c3b9ae422000000000000000000000000000000001947683154204c9fc93e3aeac17b417453a24d01804e8acbf6f67947f5962dce875f49d05e6ae65384602828784f852c000000000000000000000000000000000859dc1c00b49cd1292cdc65c6aa4b11e27637b949c7db508930c557ee3ce00f98f9cd3dd0f6d73a646d176a91d75c070000000000000000000000000000000015a7a6984b5f42aadebba1e1f4682aaf1a2d01c9ce2afab7fed2269373467787bb1361b493dcdd862180e9159ec2ad5785e2f9597c9b687150864e90ab042f4f012a54d92cf9d2ece09e4a081ec9773f", "Expected": "00000000000000000000000000000000047cc33d9decfd059724bbb014fb9cd95de187e2dd29cf4a9bf9ad06d415e2cacb5a4e49266c13e0c38f2563d1a21d6a0000000000000000000000000000000011c79d93fa870d541e79ad4037c20b85d3cec053587f9df60dc11e7dc2727d79059f75bef76474c09fe61ed10b317cad0000000000000000000000000000000003df3f0db20c5ffea4dc9f4d9333d76141447bba50da18e521e89aae1e63750c71b392570d79e597967dfc9952e903c60000000000000000000000000000000014e83ea645b1019ac2dfafe370f616af0c5baeabe217ac1f9ecf78877717475b25911b339557422526a8163434439923", "Name": "matter_g2_multiexp_96", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000cd1d25f285c2073175ecad5bba4987cc52012eadc7b19dbaa20fa82d7a6cfb8a52f33469b6308d921eb4b3b23f7022d000000000000000000000000000000001707b67a23d9212d30c06f26f0040c38389b185057e80236d2c828a8d9ade4f72eee1d6eccd78e4f4d71e2c28ee9539e0000000000000000000000000000000008e5c04effd14d915b9afc2083afa2b6d4008cfa0e47144a41982d8b5a8e77922a2609384e2c5d18c871ae24a7d505b7000000000000000000000000000000000f414acb056fff2cd6d9b408adb6eb7f34c8f66a66ee93945a3381d46c2d181613047ca6d4067614c190da444223cab685431a1df7678e49ee049b75ea968ca255ef456dd58cce57b64edffac1ac223c0000000000000000000000000000000008ea841aced2d0b8dd688947648a8ff18d0f6f03f63ee1c331f126dd4fc0da3d386535156b80902bdc1f65add7769cd70000000000000000000000000000000017a32ad2763d99c38c954f62466e78c0332e48875e15afbbe9c78376f1bab12346c73a573738353e2162d3928091dede0000000000000000000000000000000010ea738884dbfe5bc35d031bde9aa4109b1fca529502e236aebb5ad0bf71dd2f3db250d924415b0bfca56519f8ca5d290000000000000000000000000000000013699e29cc1871f51a469898be8b3c732b5cf7860286e655e65bd8176832804d17b48d0ff85eb023360db78162581297b6ccbc0b600f11f1b89061d94c6fbdc9b1d389244fb29a5d140dab8842d44eaa00000000000000000000000000000000004d504e62b2825651381ae862fd33407309851d5291591cd0f541fd092800d709ede00a9134e65ee752eaceb0a344b50000000000000000000000000000000016481efba290c37aa4ecbf940c76ee5df199b0c1f90fddebd2db28120bb5a14dd9f4a067b6d4889aeb683cca0f6ab337000000000000000000000000000000001400c89942cc63417ca4cb05c9d81dda3251e5611c27fc7727c3e803170672f103bff26f7216a0b646533aac3171488d0000000000000000000000000000000019889641be9db08880543ff476b9d4c72167092548ba49a3f3ace4518d3874f4f7993ae7b8cec90f092f144ec9d66c1a54dfe31190469897c30ac3736ab166220dd3702df5bc897835347713d03a8d04000000000000000000000000000000001927fe80adc6dbb581349c603103ad8831e645d9275af8669939b83829182cc6e2a30df2fdeda6d3aa2e2a6126e00ba3000000000000000000000000000000000b6d7934d5ca1098a85a0c60acca075220105e221b802b1be97c2967820bffc2937fc3278ed0f26905c60d44d5fd8dc000000000000000000000000000000000057acc1379f23c0d1d37427d400eb1b0a89f3736c83d3ffd797ae279e01e2acddd84082f13f3c8b8f1bf7c275702a9c700000000000000000000000000000000038dbcd7e08d34c553850a52336991a7d48968e98057e930790d78b5c6368eb2fe01571b60c4aefb653ec04122953d56eff1ceff9e5184dd9fea44da4f07529823dc9b100f776cef6f6881120f7de11a00000000000000000000000000000000014052031b88af979b7edb06c99c2e46bd9df2c862c7e1b71321754841fad67fc3242b51141e49ad86b61344aec913f40000000000000000000000000000000014806a86d078ee9bdde99257b67f50dc2ddf9bbf01dde931742ee6f739aa986cfdca06cd32d23d86f2c14c3b09033d29000000000000000000000000000000000e0561e795d35ceb8bd9e3b276406ec1f697a38ada25d1dbe08715a28bdd3d6ce6e0aac01f7dfc7c2b403850ab213b4700000000000000000000000000000000146a65209b09487e00e356e3b29952280ebc6a06343c4ce14efa0c6281bc2482698bd02295bc35125275ff5f5bb867dfb273e4c6266c1f5cf022902fe1310d2191af91c47995486342bc61cd361eab8500000000000000000000000000000000021592cd7f4cf9cab3be53561c889c9ee865961aad51339f6393dd6a0b7dcc8a7c48b753c947b15cd3add01abd3d76d8000000000000000000000000000000000f9e1a80bad58055a8577700c177889c4d702de04343c1202eaed9485a76493158547b20bcb552b66c42a0c86df809ed0000000000000000000000000000000013908dcff1945cf06f038e3caac9a7fbb3a6466ca18627e93468a875759a2b5599a96834ff21fcd6bfbba82b79536b9a0000000000000000000000000000000001b6354665109c5a64613c3bd7d805b3a34098708f3d41c7b77db031ac6fa0b2d4e2f2f70c84ac78687b0c0f9bf334771342b5cd4ad3179f406941ef6ea15d0aecdf9f6d96dc334c39b7dca89d256d4f0000000000000000000000000000000019394063202186e141dcebce7b8f0f267ba6057a0f993bb1cbe22a5bc528323823bfd1597a87017d478186a18f09a47800000000000000000000000000000000148437bcc43d432d70b47dadac8e738616c97d38d0f84dc132599626612f7bba74988bb23ae47ac15e6f70c059d607ed00000000000000000000000000000000180851594710f4bb5be7ae0104a383081c50f59e4e048614660ab5a4e2661e171510f5b112d8cf97a6af27d56d137c860000000000000000000000000000000000599f3f82f29b493ffe9ee3a8363b9a599a5ef3c9c5c680d4e003f4ac5a7de0562cba8e2a4c6da7d07cbe86c3f7bfb85b36620f65ed84fc0bb344b4b73f4eba4b1680a47b28b47f6d10f9ee82398125000000000000000000000000000000000cfdce7997601afbe484901893a1b5fc0b83e8d238d41d2f889a58fd4d884df1c667a000b53b587df2c42ad46aa2c3e0000000000000000000000000000000000c50bf3e06400cb10494cd09bd89f3c96ff49c9f74dd5325f9489ed6be13b59bd7b0b2351411ac854d430405b8a2a3de0000000000000000000000000000000001db313a34ca4073e4fa2287e234ac32bc579742de22e5218f7873b922f5804894826e6054925a394f125fce850f33ef000000000000000000000000000000000e0627a66d286e8d4d3654b32fc5f552a7ca12f0bd47eb6dee0dde22ee48165247c067a0f4c3d422bf3562d38a3c0cf1249ca9bcf879a770b0a054422a6ea97ae795118ae45532c1523c842696de6d170000000000000000000000000000000005285ba39f5bd981fce2fdf853706d70992acab2dc6d4c4198144fab397392a60d631056b580d0d98f3f350414ce554e0000000000000000000000000000000013bddbc1180f155872376fcdfaff2fb12d3d9645b81bd1475a5323ea855cea820ed7eb693791caa9bd3fa5c66036439700000000000000000000000000000000125644d32df397def58dff875d7e3f14166e765ed49a3991f45b38d74db3985fc7f5052058d85594c8b97afcf850e11b000000000000000000000000000000000fca4662eb1b39f576ee820385fba88ddd2fc01fcfb9d9f874453ad725cd5defb357be028fae97ce71bc5ac26d11c1bac014a0aa616e809b674390b4553bf2d9bf325e73d3a935eba94488dddee4e8950000000000000000000000000000000015b97d7c74c8ec102083b41d7ce5490466e1c0e261b5ea5c756d3f9ae79dd2d8ec6eb5075cfb76dfcf7bfdd80442f7d10000000000000000000000000000000016812f845faf96b8b69ac7a6af3c8947aa25877199e3c12552527706a17b768bbea259ea61ea82c4624a96cbcdf4040d00000000000000000000000000000000123ad55e5cb5ac5bdd3ca0a5afa7c3f8e4b98ad91a205f073fb546fe799ffc57b3c1c3a6209547ffc6ef05fd24be6f5d00000000000000000000000000000000017719f31946aedabe0e9d88ef3f90eb6ceda884f5e3d2ece368373785b2d8bf0f9677731803b25accfcb6cb716e0aa4ab722a1c20f068b6955a44073914c418a082345796912ca634e79983a24ec4bb0000000000000000000000000000000000497e3480d58027c780f47cc35a121ee0cd76c4e84d9a2f9002c04a1c286be990167a0138049ad70467132818f48ec9000000000000000000000000000000000ec0ddf938553105400f70989140ca322d996f48ffb1b35641ca36a6ba9ac1daac1603c100822f80cf62ec3bfb442158000000000000000000000000000000000a0b6ebee28a792df46d2f727af812c15fc91a471e0d8e34b25b26048f3b9606d8375b5b268c40fb04ef8f098e1d03340000000000000000000000000000000017843dd19bfabbd0cfa41fb58e70a8900397d17ccea783087ece90962560f5cf090e8d9eaa873a6a6ebac45219ea97a68b314f83cc3ad501caa44b4c3ca8cf68c70ff6920f445d3a7ada212b6a19ba3e000000000000000000000000000000000b27c82d71f7e4aab9a68596669596df3f62071e921e131ba4d9e59d8d81d370e077e93a4a6a43e059661227f40b38c800000000000000000000000000000000093004917ceb2fb4a1b33960ff74943d520f86e83aa02b9a6c85e4b9a489e9331863cd30cb6ad6f099d03289b4ada5520000000000000000000000000000000016f04e35186c7deaf730708e1678089bf3e73c1164bca24bf8f70c4f6cccd5bbb34bbb5dc313ee428aec4ac9c638a01a00000000000000000000000000000000011052348cec9dc3e85e01abcca5a652461f08a9f5d72b3fc27140a6a571137f0065ed7ccf9ec8cebe314ad9a214d5ed94ffab83099c69845cc87727d459ae300a5725ec53176424ab0ec8bd3f80eaff0000000000000000000000000000000007083dfb0738d58ba8933a1f60283e5da8bf90af5aae4053ca573ee7223d3b80e4bdc30b4a831ce6af9f52f393e9742600000000000000000000000000000000130c627b7d3a527c94cfeba9f514e75eac047e1b6088c082229a8c95d0765a0898ce1e45694ca2c7935bb8e41e44e8b10000000000000000000000000000000009610645b074e652a08f2b89dbe594afa3009d795ef211f7c036a56274b1e1bd69a035c4f356b6b21f69b9cec2bf7c32000000000000000000000000000000001020f3cdef468af700269aa1e9d928e71b8c521f23586c9b0155314f0073da7de04ca41ececd5edcc052af72c05f0e4bb1d80be637e2abd98d0433150e14b629d98fc0918c7dfc179204669ab465e90300000000000000000000000000000000123540047f0768b0af841aa4aeceaf3dac31ea832daed86c8cbd1d33ed0282c6f697d5881f9022af032e90ff82efb6bc000000000000000000000000000000000113daffbe413075f5f4f6fb42f37b6e9d5e5822aa24d6f865792f63e6078584246bcf8b17117385db1d6233974f6ed9000000000000000000000000000000001067b46fd221b6995d25d4bf0adb088e0554d858d4e5d9d6b59e1ae2a7d57188d559b0208918a8944aedd62b1ebd4f4700000000000000000000000000000000087dae77e483d5c0baa37b9b96dad5ca92b5869fa253bffad24dd8747446f7ce60858b52438e58233210d86f470f765fe670a57ce4dcfa680e60ef33ba99c437e4fdb160ea1012de36f4b59613a6af8500000000000000000000000000000000039d09a094d655c139cb9714aa258d9548473162548048b0f07c9317a41a7e5dbaa5aca156992c8a509d4071d9ae4394000000000000000000000000000000000f0273a38b1b9d006efa43c15a53f026587a676912d0275968608519e97994ea9c6a147e377f68b1738ebeaa178f9c1000000000000000000000000000000000132cd92417578d2e46884f1c1a1080b1916c8c8404d2533a4de02bf8575c80ce7e8097c2ddd1f95737355521c0ec21ce0000000000000000000000000000000019adbf09a268a3ed8eff936d25fbe8af2874e44d2580c7941dc14fb89c5da963b468a7088c4a763eac89f4d15deaaf5e54a999fdf391d3944318c54680e69b58ce3778683b6f2c607d64450ed32c6d89000000000000000000000000000000000756dced467ea32c3c425590b7690a45e250e464ac6927ad3f5d2d8d2826961b8dd7572db609375c8d06cc3b9bc3a157000000000000000000000000000000000b79b4eecbaf1d0f8a89f9ef8fc144b3aff38148ae260da7c20e9dd3866d946585df7ed12c8b7005e7b0e1387c9db41d000000000000000000000000000000000afc403b008b70e19f17b1ef37c9c396577a585b6c34b23d09621b891efc00ef9460c3f4b5f3e851ef63620dc06c824300000000000000000000000000000000024e06f3f3b18c026a166c41f75d7bcf699480f5b6811463c27606c9ec1232fd249a46235b7f5b5a2ed3b53231b333150563ae7b444cca7ebaba36b8d59aaa5c0e6c1454a4a2907866247e752e640a7d", "Expected": "0000000000000000000000000000000004f2480d0b7e84a996965b76055f6879aab5bab26656e4e5ca7220adc17f14b5946047484327bbc5952d9f2ffa5f92af0000000000000000000000000000000002f7260c55c500b54df4391a55eb4adefa7d19bcbec82a107fc0d222c898b97360a679a02ab3023ce2ebdcffd125ddf30000000000000000000000000000000002cddfa94c8f6b3f29c2fe018b1f8679d0e98c8c2656f86f327b9cbcba574cc52643ab423b458994a03347460deef6570000000000000000000000000000000014eb4c84f71ef5935e707a11a92ba34780677ac7eb198e160585ad92aa5c1ea21e3a77be940fe344e7e170680e2a8d53", "Name": "matter_g2_multiexp_97", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c2c4c039047d297049afd0e8f0375bd4294d628d3a22078d93b684b737e8c4b6ad3ee544ecbeaad6b3c75d8d217f3a20000000000000000000000000000000004c77a2c0943c6f997ce2e785461f8ec253c47273ded4e1af43ae882766ef8c168e66d831abc2b3b3a0849bbc210cbd40000000000000000000000000000000004456a6c267a5cc6b7d9a9f573270855186a1b621cfdc465fe71ddb4d614565d9d36b13985b31396587919226843c6230000000000000000000000000000000009487cdd8a0cf7f40e9087fd3121cb480730f4302339d25fa12128033239662ed65579a59b837bf1bc5fa87db15b15335b59d128b5ac47106b4114cf225dceb621d177141ef5783943f40a54ad94e990000000000000000000000000000000000ba43205e8392168824f77bac344d60c1a9a0b14ab55538c3bfea4a64984cf381a2f61c64f1ba1bcfd8a7973e43f6e80000000000000000000000000000000000e95e5ac415c3e3e7c9feb6e7a2af3e8189afca06ae1fe54bbeb31783810860921ab3c76a475fb227b3c8299e3f1caf00000000000000000000000000000000001e3cb2106a23e77a126013087751c4d2a419a51beedc3a33faa6c933bedb3d34ee9c6450c583642426edb352e04da98000000000000000000000000000000000ab5af4c98aca1fc3fa55355351d12f3bc639662bf8b5b772152988d676b00ef39f767237a2fa3be936e83d1dd77da86a057c0405e24b7373f67197b2109b633a02589711b6a92ff49ca024f893d7ecc0000000000000000000000000000000012f3d927316ba638bd6294f7dd2f3f166d20285ee1662ae4dc145835704a17127078343d26042a5c397bfef31754186200000000000000000000000000000000162893d6252361c340057bcac31986458b8b55a8a4283f5a06ce1730098f9838dad1bca264374e7261bb9d08c177c1820000000000000000000000000000000017264aead0ec41a079827296f3d32c12adfca7cb6c674070d54087438d57b6ccca4822b2337263e60075d469b4ce0ccc000000000000000000000000000000000480cae035bd3bf1b4a4a766bcd5f188833e9587e1aff0e1f10e36ebbf2f3ae76bc0946e7c336efc3ee00bf42e7efbb9677b05905180182427efeb848b2ba2eafbabc7519ab33db14de0746afb607191000000000000000000000000000000000d13375356b1518e37a13b43b7d192eb74bd69636f91c570c41a741a8763c03caf8d13c7364f57c867a4a3983e88060f000000000000000000000000000000000f6f78dffb404faab88ac7373e0c765209c0af80514d438e18393bfcfeb60d9a5e13158d399f43162033571ee4a75dbc0000000000000000000000000000000010c379860638ccf3b6cb8479aa38881b0004197e3e367a1d5ef7c7fcf075689d283b87022e2825b5c789ac6a448467320000000000000000000000000000000002dc392872cf2fcd8e196f10c1ded175300070e4e38aa58c89c81e1aa5faa08d770a5ad90a8295a890551f9329a13cee53e7f69582f4c106ee5bfccba1d5f557736c1b75b6e3777cfde47d552e6bdcac0000000000000000000000000000000010383a21acda7c8f3f3be980bff2d57fa0a5b2dc424164dd2ce53c0b20ca399d6227913b7b550462180b01c231e4813200000000000000000000000000000000078aec90354721f0a31e1377b3652bcb1f388ab36f1866c955f3ea8dfe6ac2c25bc4cea14f54aee71595c2c1bd2dc4910000000000000000000000000000000007dfeec77213d952c183452b98ad936e8854608d950c0c1451262cdc7d6de5aed0db07a8d74b3e8f674967cb4839c4d00000000000000000000000000000000015c09e4ed2ea76d10d196f7a733ccc272b94dc436d6bb5fafad2fae4a96372c2c6f1325d1554746814ae292d8e6b1e3634c87bfb629b817e7ab97def7400b0a83e47af8d628787ff814733fdf34ba8d500000000000000000000000000000000138656fa091cc6613b1fcff04a3efb4f9c393985b2c78fa838eecbbbb8b6dafd88d9c72441f9bc735649480b5187acac000000000000000000000000000000000a35cec4819ca3321917cea5aa589db8cf61882fd1135031dc41a8207a8e71d326312799291b160a646148c382ed086b0000000000000000000000000000000005b6e4c02c9c54630c96271073513cac3a42d47a7272f62a21c7ad4c85c19b60b70d04719626cf4273f6c5691719931700000000000000000000000000000000166a20da734a47d7e28cce8f0c2d679fa6c738a7a1ca9089dc67ba2b1c92a83b024b8991f131e7e8802a617153de4554bebb60069acf431e1671e3d00e4da0d70fa11ed4099b21d45a2b811f99dd9cca000000000000000000000000000000000a4432a544deda931b1f62759320ada2963062e722bc1b748c9bd0d026ffae10f228be36ea0ab076358924f4c06b6feb0000000000000000000000000000000000e955b1b1b28d2044b6be371c58bc85097c77145b239e913bb0729757518c465d9e69338066f7496aa6a2038ea604f900000000000000000000000000000000017ca2a7d52c3a82ab8abf9fc1bc187389b6e4904e161541008e5b3ba0981870e01060d1272a6d59bfcfb294c942403f000000000000000000000000000000001870649a50e0978185551f213eefd9305d33e92b3f8c39752b6ebe18ae86ad97f92acef05971dceee3b3729becea18168b1ee2765e762f1b8c2451270cd5a755758fd733d7922a537aa9f1fd7d0c95960000000000000000000000000000000013713effa20d5039ced751ebafe1516f062f11ee05ffad37281cfee9d7a49ab14c065709832f6674bfbf2c9f379bc9c9000000000000000000000000000000000295f7ef148430209b48c292b024474f05036edfdee082c56aea05a62f1fba3ee7a540955423f78614c8385da8ef60040000000000000000000000000000000007408c97321b6d7c27e5e442a9e35b054e743c34d845874aeb1ccf4e903ca7803ed7fb1288327865f9e0ff0a388e92b400000000000000000000000000000000081808d03722a2d48846a693059c2662dee614f181dc406825544d30a6adc0f9d84a712eff80bddd4a27a036e4bf7359d5009fd559714d5692de5500ec8cae9c04ae1ab1c7c6e08c8738ef22da19ceca000000000000000000000000000000000880b646a674723c15b240ff56d2031e5db724251b1402a68df8b26261ffc9fb60a81abf165c6832137dc7a7293142d200000000000000000000000000000000172354b62bfb8d388b5a984411414738302725a508e8abeacdcb46454371d5e9cf762028fb65921d5c3dd8c67d42a981000000000000000000000000000000000a1af459bc3122dcef78359e468f4094d609ae3da09ca5aa6efb71a7494dafa2373a3906bac1f324d98b3eaa982a27d500000000000000000000000000000000092ac3b47253c7f090df076914cdc08a715faf153e8e365392b4859fca1db14d3f7fb998c97de9ad99b7d0b357252f086330c755ef708d8eb129475785f24be9e7836385ac918c60ad36e80e2f3281b80000000000000000000000000000000003b23eff722c078a781771d8b75d519e7a062ca3e4252ecca877845920158fb20d79a9ce449d9087426b113da0091826000000000000000000000000000000000c9026e8d3fee6282492393db504a2c41db19d8fbb83260624b05ba4107d6cb2c90d645a3c16862b27cc3fcce9bf89840000000000000000000000000000000018b8648d0a42285d474f809519696df9e1ad5c35d8e848ad74fbee37425aee8844a8be8cb4d3331670ee294ddb9a290200000000000000000000000000000000068cad37ee8578f4b502ac2ef4371a10e5432e57fe20d0cb074dc427831872113d3514a0b199d813b796b8357fa2a3dbc2431888d05cae840dde4c26911db1893659fdc345d5433556d9bf75e51fe3740000000000000000000000000000000013200f0aea4c60937be47213b6149b0ae76767f3559e0519f774af4a5d9431e2dd7ea74b42cc3ceb28ccf0d2f01116f30000000000000000000000000000000001c5bff08fd16ecb68f21289a3e7b9a2ec5da1357d604710a18e78ab780f8ef0343d5d9ee7f7988a009329b17e498beb00000000000000000000000000000000125453772eb9d1335ce4dbcc8f2ab8426fe89a0e49fec51d4e96718a38570aa82dbef452368141be2df260fb131c50b2000000000000000000000000000000000432cdd445519775b9914a986a0941cc829b4a15cd361df9ae7129547b24f7a6a15cd8fe9393fa1551db2d761a208b8ec9a72369cda74e5c86c6559cbc4f4db1b3ab24c5150c7decea862ede3c02c505000000000000000000000000000000000396cb6d7b44f92b716ed02985d351b4e8cd1bbb95f239e4f29d7379428470be395e2faeb8e3a910007aaa490d3c336d0000000000000000000000000000000000ad0c0623fdf50c2b504777554dbab3cde1b9705e976561873d7c22b81f49c7654a7c76e558fad1518ed73a0d3c3570000000000000000000000000000000001241d5bed68e02a2ddeb3ccbe109a161abe81edd7affb72182c5163851211c4763e6aecf766053b61ce575de893985f800000000000000000000000000000000183696d2a48feef6088f4e9f75a5055e8c54b3813658b593958490ddd4245ac495a8ff966861b20f26047f07fa8609a0c2f50989b04fc29c4c4a0090fb11e860c15f89a66f3bb8281e4678ba63ff3f9a000000000000000000000000000000000fe0ce41aa9e7cb2bcb4e01721b7b1d99fca4e9b7c4df09bec00bd346fc57c25118ba70d5333b7f3eef2659c64520a470000000000000000000000000000000005c932e09c62b7ddaf3f5c420c60740befa7cdff5bb812e0f089c45098d71b57004b7a207f0cdd34daaa3282cf6e9f7e000000000000000000000000000000001874200ead9776c1ecd6a54a57e5d0f9577910a4b3afb9b051622f658fe3ef6cc5070af60e7ef910562720e9716158d6000000000000000000000000000000000c2c657e58e400a67e59deee8c28234ff4688e781a2f6f2f0d0b186a5e4012695a522dfa0770cfd543f55939a05e20b09fc9abf1c76ff11ab538f46ce768ba597eb5f2f63073ec67e8de10aa1d666720000000000000000000000000000000000f0b561e5860321249b9ff434c604d26c3275824fc4ab9c1ce5c5858605ddaafae83ae27e523bf6006932f6c7f33d0a7000000000000000000000000000000000b47aab85bbd909599aa85c5eda363b67790ac6729fd8b1f4f53f66dd796cf2fa3496407b1bfaea4dc8eae53519054e70000000000000000000000000000000000cab1ebd23bc05c53bc9e8481c469eac3ee1b140af545bebed10a8fe50698d2ed883219881929207c0addf2f687198d0000000000000000000000000000000007742de55b799950e6f786f4eef45d0fb67e0475272ad68a183135b70047abab6c2ed51ede16c39be7b986df334e9e75d4167723682bc0e7476797b3be5e14b8de3e4e23b4ca33c50a2096cda8766dd7000000000000000000000000000000000923861332988bc843a65ec5dd4637f9dca8a15e71b82c780fe60d768213d118d8948ab554e30bb9253e900a9b7d87f200000000000000000000000000000000132b1faef49e7966a05783ba526e71134bfb577b13116548352da37e91e617d7c72ed2645e672ebbc517e079247dfb0e00000000000000000000000000000000000a46a8893a194ebfe077afd05fb25d4680f1e4991a3ec29475fa5651d086d20b38136155a65a4c70af31de5a78af59000000000000000000000000000000001344eb957594028b4228cbdb8efb03cc7cf49ec43b2ca5481eae1df6f2df3d5be9a7c4e4e78f8c39be546e29a83c92f49644c3727f78dd12811092190d5d10adcd5b9fc581dd783c97d4e7b5130f309a0000000000000000000000000000000012d7111303563a6358e5ce9155d7a153b5781062c2f6b919efc67ddfb4c61ef03be8828ca6339397b84763a5f8a7e8330000000000000000000000000000000010a2a0ea9973728d3fb1b5906ee84b2635c687c11398ebf605cad30216df3b7b4e3ee1653d4b323a690e6ba614ebec30000000000000000000000000000000000b93d5de37b892d4de9407a820c73ecfd6cd9fa565db82e7e8c14c8406823f705ff0adf6bd6add5ddc5f72c91e52e840000000000000000000000000000000000dcb320ceba5436df8f099c5a77f34376c96d830f5e8ab80667d156d89f6bf8998c148ef9a53847ed395871ab86f6d280df9846c84354ab7f947caca7800e12e38d8e6651527e6831f4d8b1bd66c4f3d", "Expected": "000000000000000000000000000000000ff3e299e6b9fc488d6db991cf9d226d330846e87c4a5cd3e5d4ac955bc2c3c2d1ee5ff230098b48f594d256495f489800000000000000000000000000000000097fdb8fc95d64c7070d8c71e0fd2a933d1e1ad3fefa230f079bc5743828317cd1b0c6d4253ba9c3c6ec6b12d53afa700000000000000000000000000000000002448bbb179d82eaa453cd5452752b9a083b52694cc65c5d9b47f72eff118d7aa06b0fba18eafe93d2937d7399c001af0000000000000000000000000000000009dec4c0aff2a46b07855c87e08832811633709ddfbbc30dbb7e78b3de43bd95e383baa6ff4c58188f0c7643e0ea5a40", "Name": "matter_g2_multiexp_98", - "Gas": 293920, + "Gas": 240480, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008afabec8a9985cbbc6246825785654c1d2eb7da5a01f76c4af4d0096b9baed3c33dbe492d14a6f9e762f06eb3d198f800000000000000000000000000000000027c592315dee4bcc892acc6f41a6eff5219c308253f7cd715d0e4a32c03c6d0d0e8568e146e9e799ac3025486c77fc30000000000000000000000000000000015b4ee27a3aa518a1ec1b447bb8f9128301c85b7176296d68dad3339b1dee78715b2f031a7fb6ba376145c97ceafeef60000000000000000000000000000000004b7e30ec7cc024ced863ce511cef3cabe954a4e5843dd636d776645a44225a36ed7e153ab5bf5d18f23c6444751875c8a71abe11a893fce872f6b8a020b6d84241df03eb934b50cbf3571df4800a83300000000000000000000000000000000119949d36d8d8e2bc1c26ded5f5fb01225a980a28b934ed3862480dc9297a3758e0f08ccaab3a09b5e5c0e4215e3246c0000000000000000000000000000000004a82dc22316ee6af39d937b662d1f1f2dc855c2ca8f33ec3274d833e87d594633fc7fab247911e0f46564397910d6ce00000000000000000000000000000000196900a09d8504ed960d41f4a8a2cde2e5dac61b008d3f6eb47e86d7b2ce6fcdc0f85157e3ab1571094d9fdaa75d0d500000000000000000000000000000000010c52ef9407eb4ec57844aebbcc3ea5000b1940d035dcc2a873327affaaabdd79e3560cbd29c63ce04f6279056d6eed1bbf28e5bca314391550d3a0fce50b1220965860e72c8c3865a2d4c599d31d3f1000000000000000000000000000000000e43655ae05dc6cfa93113dc26cea895d1c5bc73f20454c7b441dbc5ac80035b290514b13b31b41931ea5336d8d9a6a7000000000000000000000000000000001199a873958c63147e6b82625dfea15ce90dd41ceb4e315f67221eb874ef32c6a2953412e7e981659c72239a7a72bfe6000000000000000000000000000000001845af5936b4d7487ffe59137ba2f86daea3770cf37fd560969ee48243389941a1072205e049ddaa06c0ac56b7edc8930000000000000000000000000000000003cc831177f24614f93a118b896434105f05a277051a852fb9973a775fc54f779c2a1f3d64c457e5231dc22d6aef606b58b208a6845aeb2bf31999042c59b7b130a7ce5297e88023953b1aef63616fe400000000000000000000000000000000005e63584bc85ba58615985f6a466afe05268e545e0062cd7214e0b6fc8b87537c745b754cd9a1144948bc88b3c43acd000000000000000000000000000000000635b6a49090ccede3ed2ef203f0ed164783e3df4d9a7d93319515cb9230bd841b61a097f39e30175793b3e934d8e426000000000000000000000000000000001861e65f47a9da1584c45bc79a66045d86bc1709c2d1cf6cd2930a9fcc8c4efaa6536b5015be8d54789e8f574f93f9f70000000000000000000000000000000009290ce63d55eb436794acf11be9d896f03e7608a1bc8528f61ec9473f054bc9fbbda1072440e58e2f6ba080a01180173b53b6cf9e0ce1661c4960283be790abf956c2d6433529b8f3a32b92b227aebe0000000000000000000000000000000018feed9500bff884d2bb58554da2180c68267b6d3a45c2c7cee4c3f8524252d3faaa5eff971bf40123587e669fe66bbb000000000000000000000000000000001441bd3b58b4a4a87c2459f873c0692f5977b775af984bab46dd76cb9f775d2faebcb77b2854c9f1faa33f6c5de61c6a00000000000000000000000000000000123a890c3362c77e5b5cf9846d9c9e43fb3242d5a831e640ad080993fa0547854c8d11cc22f7f7b426528bf1154d2300000000000000000000000000000000000ff4a59ea98d13cfd353ae61e18d3c7018688f755561e6a1da5f09acc4277e8d49645087115acc64f992ea778a11f39bb049228435ade4c4c565e65f39f13a84c747c312afcdaff352560b9fb3cfebcc0000000000000000000000000000000006b019d005141e82393a2ca04469d1f6fd7b9456001ffef4c34eff6b2e91df58e99fd07944f52b108bd41ab6c4d6bbf200000000000000000000000000000000109ae87042029856befff0c916db5437e1e058a96f2970d8816b3becc93a1a50d6d336d5451303715f3e272147a36caa0000000000000000000000000000000000fc381b8dc9dc02d34db13e34732a10d0dfcf676c224a05a3bffd888b0af7c415b38af0b6afe6b464ffca42947c6ee5000000000000000000000000000000000087040d09c39ccd06c9ecc360fa02147a32e8036ad6e4b6bdf5b3883722a4e5a887dd022d53706d2585fe558696be6656197f5ad17062d2ecbdc8887bcdd32e5ed4c48cefd9e14d622a0b800d970330000000000000000000000000000000000e35c27b29df0fa9298bb9ab6a38b3450782223e2115d79152f9baa924d762d583b3ebe88e42f33028814ec78e5b319d00000000000000000000000000000000190c65667627a16f0af0ac7f23af0803bca810f3986b906b7b4f126d98473d52badf45e90e2e45bb390242fa8c40135100000000000000000000000000000000103f0283a5673c16bcc0f74f259c2eb077061947da04e467dfebf62aa005491e32b85cb73418b624a30dbaa01672921e000000000000000000000000000000000465466955c908607191faf15f0768dce42488c488eb4a065977f21ac7484766bc0abf23961ea2ba46dcc04956abf6c7721d9d7fe10104cafcad71307e785321ab87b2b69593535caecbf0e166cfda5b00000000000000000000000000000000082346e352e845a54cd4267f93b85b2c8623d4650e00c1c56082b73ee31f63588d2c117d3cdecc0378fbbf8956b082040000000000000000000000000000000001a7f43c2bb19cb32345c43c950536f8e85815b86364f278f6ec8169eca80917c2b8fc08d59b20cf55f25dc468e7bd7f00000000000000000000000000000000085a5cb020df10f9b4c7afc01b1d11700579dec1e85e766507def2e6cf5b714174f7be9cce3b18533a5ebfeec2b4e481000000000000000000000000000000001836d7506d1cc984fb777b8ee935d6f5b110644f59e96ff44d8329336d59a3e1d2b53a05d35e97f634baa4fdc11a6cd8461531ecb61365908019c1e8074a4c322df2b356eea3f3eea9aa1e0e1fc5525e000000000000000000000000000000000c1c59828ec6257a02679cff0bee0d665d449d2a158bc6d877e84cc0fe2161c297dde09b778d5e1249c515833e483004000000000000000000000000000000000f5e82589bfb7781e4110f1486752b00cbdf96cdf4191d75053c6d6d646e1c989add011361031a11559e156d64139fbf0000000000000000000000000000000015053afa7fb2b4e4b70f3c8a570fef8288fdc22dd951b6ba8a40b6087b9ab04ede21f0ddfa84d6d18914041bcf244c110000000000000000000000000000000003f399800cba51ab35624d866831ab6506392cb3acf549787153ffaf08cc451acea46c7a612821dd96c45f8b75133d88569c1c1ae2d18bbe36ed50db1bf30957802b09a982fbed49d4968815552e010d000000000000000000000000000000000e26242c8f73116079369ef4265f624abd4377e4e3485c28197663de9de9f5618c3b6ee602ff6bebd1c242aef7295b2200000000000000000000000000000000066ceb3ea6067220bd28fa1164237782859d27c1d3087a42b4d09bcc343611e4ed2be014a27f5b394c67643dc00f57cf00000000000000000000000000000000157f9d30de52110ea7a2a35ddfe67d9fad7223c5e3307e797dd0df3621520a421958a2835205e3c4777923f47d47e5310000000000000000000000000000000016ebb41beb85b9489a6d5482f8a3330a5c5c5e5718e8efb8b67362f9d8e9c313e9e563275ba38c207c5bf3d89c406ea62061d33b2f7e786effbd2e93101a56ba1bb62c1a773a08b72ca82f5183bea35b0000000000000000000000000000000005d1c9109b5b7409f94ae3f7dd9e8ae4908a9b378fea4ea284cbd33d1e59b605577b63892aaa8ec14d415f34e22fec520000000000000000000000000000000005afed05e62599f20f7eca019f41d770c630cf6359cb5601464be821691fba5205c16e7b580e6881047214f938e5104b00000000000000000000000000000000105637a2aa4725d8e080dec3b731a111ea4c94b79f898dfd51f645501ef0c8d68ea8e80fde28ff96e927e44306ebbb1d00000000000000000000000000000000080cfeea754474ceb37973234d5dc3269f8ca99bd862d4d2d1a602321fc709945a3209e5ff2cc962cfa6d03017c9a1354129b150752d2d5551a622231ab067931678454aaeb23f76168219406f0d50ee00000000000000000000000000000000137762ea5c80033aaf17570451b15a062feedde810f11ebdbe9a79a3275dc12613e0505835c122bd5f9afea7dba84203000000000000000000000000000000000d89c04e45e60769a63fcd73df2a138c457bb549195f2c4eebb3be1ea46149f286756795be8328b5b886f497d8167b34000000000000000000000000000000000be43d515083c8c10f467618685a43d4d5f6457204bacd278445943a9f44f7189b561a0e1bc59d2757fcfab2e3f93a4a0000000000000000000000000000000011a52583227c6dcdc1784d3633fd584612a9f3bbc1922477396dcd5af84413e5e9382a34a71b3a72491ea09fab2fc6bf366c32d5d3c132f32a6ac3cfe1dabb649c59ae224338f747ad98b193e8346729000000000000000000000000000000000073acefe33525dd2d5204cce72371ed82c7e4b58d1b4e7f4b4994f9c58b02d9d6206fefb3552446b6b355e860ace43c0000000000000000000000000000000007344eaeaae71e17930e769e02bcb4f44ddf3d040ffa0b081f25901cc125a37a58a6a5d13e7b0ba493802ccdaa054e29000000000000000000000000000000000a65fec6ad29ec3eee9ddc7ded2297f49d03ff18a255f1e6d29d2a67c20713f319d79d513af0c58ae3cddfd1f6240ff50000000000000000000000000000000019d5f00d9e2b271f4e9ac779a096386f08ae124f77fb8183405d48ea7f16e685805442dc67a392aefc643ea95b4f1fcfd997516cac28a3968ac6946b5bffaace0856a52e38fdcca11ddfa16cf5a568f50000000000000000000000000000000018230bf1a873aa04855af1426da30f1b3ef4b64eec613b9f660222e3827b325c318baea031b463c7e9f775165d22ec8f00000000000000000000000000000000017faafa1294fac53e1de8cae9601acc62d76a5f01a39ce49d65f3f5d2cd5cca33eb90bb4116b3ea36f912ae2b81b6cf000000000000000000000000000000000fc3ef5ea59849a87fcd45500989f1744cb5570ee88e34a952cec32cea2eb5900b64d8d0d04ef5c51e8fdcccd46412490000000000000000000000000000000001c53aa8aaae8422fa4fddc86cacdefa89c37592c8e67e472a23627514623a90901a619af79e93561a0dc65215837274e881ec65fdc2f58e46d3ee45a06d0c5ac844ee5b62872c7ba21f6b48621a3371000000000000000000000000000000000e3db6885c2db9244548e11b8c49b73f85e4104b413f54308497262fdff1957495859830114528a22c45d39a554ba82700000000000000000000000000000000181b1bfe2d9a1c563e73356d73f4ed3e7061a79c610bc97c911ab1a0213d123c9f83ed6706e862087a796ce14c5cf53d0000000000000000000000000000000013f5fdceddce771588869b945bd6025e5ce485fe78a362356720b474b83998f27e535cfd8d33ee51cfc68e5d514f915c0000000000000000000000000000000007e8fd7ba457a3cefd50c641847425cf2262deb1d6945a0bd740eadf38dcaa616edc48c3912508d663349f089b8b56fadcd9b95e49473277a665ca0f9a8309df9ed6ee4f25d803aa967fb8f688273e650000000000000000000000000000000004b20b0408da7b704694b47607928a655077015f2174fe01bac9a0b3a61dae087b0b593f58d2947d8d84f75bbfb327c900000000000000000000000000000000106d623b2007c5d7128e03e540325ba763e992a651e2e5c78936f82ee2ff72d89a1a914345486cd0a04440c75beb190b000000000000000000000000000000001847348e5ef429cfdf1ba4d265d8c5ebcbec3d5dd4611ba36e2754fbd3d327273bf2eb7b7ba4b3888d059dc87f034739000000000000000000000000000000000bcb0a9dfe5189bc965e9721407b4cb3ed4171510aa4d4e5d5f0823a1c2827643e1278f9c0ee960c54ef8f6c208eee7b334582482a9038ab906880e43a4a9d39e73b6c63604eba0c8f6399eb5c288638", "Expected": "000000000000000000000000000000001205b70b29ee04212589f8a70a71e004f517d3354e714c1b4fe42cf93faf1a8ed40dbc1b5089ddb53bb052c9cb74c0e8000000000000000000000000000000000f619082734dd9de653b61cf2fb927199f228637db70797bd2a21fdd48b6ecd4c4f712097037534024880a436fdd63680000000000000000000000000000000000592eca560be6ae256abe1796f7ec394a8085c127437f6590c8d41501a482c61456392cb320b9e801044dcba7802df9000000000000000000000000000000000a6d20b8009708ca01a274aed6dece732c5eed5aae5e4c2f3793b5fa1f8cb8c95037ce387bda2e7476e9c493507c7fbc", "Name": "matter_g2_multiexp_99", - "Gas": 293920, + "Gas": 240480, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g2multiexp_(g2+g2=2*g2)", + "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", + "Gas": 54000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g2multiexp_(p2+p2=2*p2)", + "Expected": "000000000000000000000000000000000b76fcbb604082a4f2d19858a7befd6053fa181c5119a612dfec83832537f644e02454f2b70d40985ebb08042d1620d40000000000000000000000000000000019a4a02c0ae51365d964c73be7babb719db1c69e0ddbf9a8a335b5bed3b0a4b070d2d5df01d2da4a3f1e56aae2ec106d000000000000000000000000000000000d18322f821ac72d3ca92f92b000483cf5b7d9e5d06873a44071c4e7e81efd904f210208fe0b9b4824f01c65bc7e62080000000000000000000000000000000004e563d53609a2d1e216aaaee5fbc14ef460160db8d1fdc5e1bd4e8b54cd2f39abf6f925969fa405efb9e700b01c7085", + "Gas": 54000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_g2multiexp_(1*g2=g2)", + "Expected": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", + "Gas": 54000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000001", + "Name": "bls_g2multiexp_(1*p2=p2)", + "Expected": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451", + "Gas": 54000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2multiexp_(0*g2=inf)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 54000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g2multiexp_(0*p2=inf)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 54000, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011", + "Name": "bls_g2multiexp_(x*inf=inf)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 54000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g2multiexp_(2g2+inf)", + "Expected": "000000000000000000000000000000001638533957d540a9d2370f17cc7ed5863bc0b995b8825e0ee1ea1e1e4d00dbae81f14b0bf3611b78c952aacab827a053000000000000000000000000000000000a4edef9c1ed7f729f520e47730a124fd70662a904ba1074728114d1031e1572c6c886f6b57ec72a6178288c47c33577000000000000000000000000000000000468fb440d82b0630aeb8dca2b5256789a66da69bf91009cbfe6bd221e47aa8ae88dece9764bf3bd999d95d71e4c9899000000000000000000000000000000000f6d4552fa65dd2638b361543f887136a43253d9c66c411697003f7a13c308f5422e1aa0a59c8967acdefd8b6e36ccf3", + "Gas": 79920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "Name": "bls_g2multiexp_(2p2+inf)", + "Expected": "000000000000000000000000000000000b76fcbb604082a4f2d19858a7befd6053fa181c5119a612dfec83832537f644e02454f2b70d40985ebb08042d1620d40000000000000000000000000000000019a4a02c0ae51365d964c73be7babb719db1c69e0ddbf9a8a335b5bed3b0a4b070d2d5df01d2da4a3f1e56aae2ec106d000000000000000000000000000000000d18322f821ac72d3ca92f92b000483cf5b7d9e5d06873a44071c4e7e81efd904f210208fe0b9b4824f01c65bc7e62080000000000000000000000000000000004e563d53609a2d1e216aaaee5fbc14ef460160db8d1fdc5e1bd4e8b54cd2f39abf6f925969fa405efb9e700b01c7085", + "Gas": 79920, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d878451000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103121a2ceaae586d240843a398967325f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f2700000000000000000000000000000000086b990f3da2aeac0a36143b7d7c824428215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b68000000000000000000000000000000000f9e7ba9a86a8f7624aa2b42dcc8772e1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e000000000000000000000000000000000d22c3652d0dc6f0fc9316e14268477c2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784510000000000000000000000000000000000000000000000000000000000000000", + "Name": "bls_g1multiexp_(inf+inf)", + "Expected": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gas": 79920, "NoBenchmark": false } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsMapG1.json b/core/vm/testdata/precompiles/blsMapG1.json index 07903a3125d..d2f32837a1f 100644 --- a/core/vm/testdata/precompiles/blsMapG1.json +++ b/core/vm/testdata/precompiles/blsMapG1.json @@ -698,5 +698,40 @@ "Name": "matter_fp_to_g1_99", "Gas": 5500, "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000156c8a6a2c184569d69a76be144b5cdc5141d2d2ca4fe341f011e25e3969c55ad9e9b9ce2eb833c81a908e5fa4ac5f03", + "Name": "bls_g1map_", + "Expected": "00000000000000000000000000000000184bb665c37ff561a89ec2122dd343f20e0f4cbcaec84e3c3052ea81d1834e192c426074b02ed3dca4e7676ce4ce48ba0000000000000000000000000000000004407b8d35af4dacc809927071fc0405218f1401a6d15af775810e4e460064bcc9468beeba82fdc751be70476c888bf3", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000147e1ed29f06e4c5079b9d14fc89d2820d32419b990c1c7bb7dbea2a36a045124b31ffbde7c99329c05c559af1c6cc82", + "Name": "bls_g1map_616263", + "Expected": "00000000000000000000000000000000009769f3ab59bfd551d53a5f846b9984c59b97d6842b20a2c565baa167945e3d026a3755b6345df8ec7e6acb6868ae6d000000000000000000000000000000001532c00cf61aa3d0ce3e5aa20c3b531a2abd2c770a790a2613818303c6b830ffc0ecf6c357af3317b9575c567f11cd2c", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000004090815ad598a06897dd89bcda860f25837d54e897298ce31e6947378134d3761dc59a572154963e8c954919ecfa82d", + "Name": "bls_g1map_6162636465663031", + "Expected": "000000000000000000000000000000001974dbb8e6b5d20b84df7e625e2fbfecb2cdb5f77d5eae5fb2955e5ce7313cae8364bc2fff520a6c25619739c6bdcb6a0000000000000000000000000000000015f9897e11c6441eaa676de141c8d83c37aab8667173cbe1dfd6de74d11861b961dccebcd9d289ac633455dfcc7013a3", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008dccd088ca55b8bfbc96fb50bb25c592faa867a8bb78d4e94a8cc2c92306190244532e91feba2b7fed977e3c3bb5a1f", + "Name": "bls_g1map_713132385f717171", + "Expected": "000000000000000000000000000000000a7a047c4a8397b3446450642c2ac64d7239b61872c9ae7a59707a8f4f950f101e766afe58223b3bff3a19a7f754027c000000000000000000000000000000001383aebba1e4327ccff7cf9912bda0dbc77de048b71ef8c8a81111d71dc33c5e3aa6edee9cf6f5fe525d50cc50b77cc9", + "Gas": 5500, + "NoBenchmark": false + }, + { + "Input": "000000000000000000000000000000000dd824886d2123a96447f6c56e3a3fa992fbfefdba17b6673f9f630ff19e4d326529db37e1c1be43f905bf9202e0278d", + "Name": "bls_g1map_613531325f616161", + "Expected": "000000000000000000000000000000000e7a16a975904f131682edbb03d9560d3e48214c9986bd50417a77108d13dc957500edf96462a3d01e62dc6cd468ef11000000000000000000000000000000000ae89e677711d05c30a48d6d75e76ca9fb70fe06c6dd6ff988683d89ccde29ac7d46c53bb97a59b1901abf1db66052db", + "Gas": 5500, + "NoBenchmark": false } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsMapG2.json b/core/vm/testdata/precompiles/blsMapG2.json index f30eef6564e..de88f1b4321 100644 --- a/core/vm/testdata/precompiles/blsMapG2.json +++ b/core/vm/testdata/precompiles/blsMapG2.json @@ -3,700 +3,735 @@ "Input": "0000000000000000000000000000000014406e5bfb9209256a3820879a29ac2f62d6aca82324bf3ae2aa7d3c54792043bd8c791fccdb080c1a52dc68b8b69350000000000000000000000000000000000e885bb33996e12f07da69073e2c0cc880bc8eff26d2a724299eb12d54f4bcf26f4748bb020e80a7e3794a7b0e47a641", "Expected": "000000000000000000000000000000000d029393d3a13ff5b26fe52bd8953768946c5510f9441f1136f1e938957882db6adbd7504177ee49281ecccba596f2bf000000000000000000000000000000001993f668fb1ae603aefbb1323000033fcb3b65d8ed3bf09c84c61e27704b745f540299a1872cd697ae45a5afd780f1d600000000000000000000000000000000079cb41060ef7a128d286c9ef8638689a49ca19da8672ea5c47b6ba6dbde193ee835d3b87a76a689966037c07159c10d0000000000000000000000000000000017c688ae9a8b59a7069c27f2d58dd2196cb414f4fb89da8510518a1142ab19d158badd1c3bad03408fafb1669903cd6c", "Name": "matter_fp2_to_g2_0", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ba1b6d79150bdc368a14157ebfe8b5f691cf657a6bbe30e79b6654691136577d2ef1b36bfb232e3336e7e4c9352a8ed000000000000000000000000000000000f12847f7787f439575031bcdb1f03cfb79f942f3a9709306e4bd5afc73d3f78fd1c1fef913f503c8cbab58453fb7df2", "Expected": "000000000000000000000000000000000a2bca68ca23f3f03c678140d87465b5b336dbd50926d1219fcc0def162280765fe1093c117d52483d3d8cdc7ab76529000000000000000000000000000000000fe83e3a958d6038569da6132bfa19f0e3dae3bee0d8a60e7cc33e4d7084a9e8c32fe31ec6e617277e2e450699eba1f80000000000000000000000000000000005602683f0ef231cc0b7c8c695765d7933f4efa7503ed9f2aa3c774284eabcdd32fd287b6a3539c9749f2e15b58f5cd50000000000000000000000000000000000b4f17de0db6e9d081723b613b23864c1eeae91b7cbda40ecd24823022aee7fc4068adc41947b97e17009fad9d0d4de", "Name": "matter_fp2_to_g2_1", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001632336631a3c666159b6e5e1fb62ffa21488e571cffb7bc3d75d55a837f242e789a75f0f583ce2b3a969c64c2b46de200000000000000000000000000000000184f1db9ac0fdd6b5ac0307e203d0b4237a50554eb7af37bb1894d9769609c96c8437e9d6d3679ebd5f979eb04035799", "Expected": "00000000000000000000000000000000184af3f8a359dd35dddd3dfcc6f5b55ed327907ed573378289209569244e3c9c02bdf278eb567186f8b64de380c115360000000000000000000000000000000012f5ba8e520c4730ac1fb75dabbfdc0181855e5ba2968a8c0ba36a47ab86ac45d19aa3d55f15a601e120be1f75eefe240000000000000000000000000000000004e313db704b103c2c1e3a58f8e95a470e7199081eb086e9524583131714c4a3db551fd51a3f2314a19a658e7b1765380000000000000000000000000000000004040eab7416a1703b0d103120506f1de2b26b0f48c7a0ea63dca4d9ad1c478ae03b5d7bfd51f4cd6f8cea26212c4edf", "Name": "matter_fp2_to_g2_2", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000732f171d8f6e283dd40a0324dae42ef0209c4caa0bd8ce2b12b206b6a9704f2c6015c918c79f0625fa791051b05c55c000000000000000000000000000000001139e8d932fc0ab10d6d4f6874c757c545b15be27cdb88056ed7c690aa6d924226d83e66b3e2484b2fc3dcd14418ee60", "Expected": "0000000000000000000000000000000017fc341e495bf4ef5da4c159a28320aca97ca28fe3a0441242cf506b0f89bb52f5b5d8c6e038d229ffe67d00151912f00000000000000000000000000000000007666300b7be3d904ae3d19019f7be5cf5ba6161b969c1a78aff639a24387d8fdcc4d0e3cd81ba6f063ebf2d859370f20000000000000000000000000000000007cc705dbfb5c0418beb1cfbd864fa0631bd60eccfdb16b5d55b6ef3558e2ec87dac3b45294dcf04a064d6d1eba5a6eb00000000000000000000000000000000052cb9c982e6b05c1d2ab4eed1d8082f96426b55615ebc6a53bdc320ccad0aad044395ed641b3176b554f19e62d46b73", "Name": "matter_fp2_to_g2_3", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019a9630cce5181fd0ad80677ed5ad8cd8bce3f284cd529175902b78ad4915f0df56f0d8b37c87c9ddb23d0342005f1570000000000000000000000000000000002cdd00b7662569c9f74553a7d0585312a776c8638e54ad016f8d9d25df98651789470b12ce2626fb3ad1373744387ac", "Expected": "0000000000000000000000000000000015ad9155037e03898cb3b706f7105e39d413ff3a5abb65812b8d21d003cab8fbb607d3938ccd6a774bc8debfa30f42760000000000000000000000000000000019d6382bb2d78180a8998a0536d67412d00ec0ef65f4cbce01340b8d6e781c0ff790296f8cada28966b147c69e02f366000000000000000000000000000000001290c2c205b748069d0875a89ca74a3b05ad8218ed46a1570696932302983c090d96e17e0b828a666fdfc3b72cd348bc000000000000000000000000000000000114f2f7ffaa9f90b547e86c863a5d3585819a78b095848dfa39576a10874a905488687b73e613f3d426510f5d1d1ce1", "Name": "matter_fp2_to_g2_4", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e63c4d12a38837354bbcdf4f844e5dfe727ebe292016748007d162e74c1f849787767f7e77fc57a42783fe0b06c24c80000000000000000000000000000000008d879e4891a891f2e7d27eb95aef70d5b785b796620ec43dfbb6ae550b4effb9f24210dc20f401d54420445e21cfdd3", "Expected": "0000000000000000000000000000000012084a53cde353a46af17cd2fb02c477e47b874d8ff58025b5015837759032ff98013dc5bf01253bb964f035183c9071000000000000000000000000000000001659272ab7e3a070a5c7b25a5d3402f7371ed67e58cac8438df41c39c1acd95ac5886b030384bf537d7c4bb8ddb2c538000000000000000000000000000000000852ddcc37a09a0a8f62dfbd1ba5064c1f6afacc9a279a4d998bed643eec5a0d96d6bad95701a04f52c83e8f87f48d5d00000000000000000000000000000000097a399370875398028d42bde8cf4e9641730af7a2971e2f59c95938120603a239c65030ded4323c955f7fd24bebf31b", "Name": "matter_fp2_to_g2_5", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000028d6de947a3958af5b53578b0ceacc7ef89d36526d8f3b6fbe787af69fed2c85cad3001643b81c575a741c4566e617e00000000000000000000000000000000182b56202f0494bd8baf5c03969288a1288b8ed8e6c7f49ec9f7493ee3369eeb42fa8f5fb7b243fb2bcee6be244f02be", "Expected": "0000000000000000000000000000000006f8191123f1e8f6a05e4e663fa763c8a0ade5de3c7cd38ec1c82e1c85f123ab51fffcebd677afec8e9adecd8d11263d0000000000000000000000000000000004fcd825bc55d044eb70e0bdd5ea2ac58ec1487e903b431c57a640c756265a382581b8450fb15dc649cf22a8539088220000000000000000000000000000000015259f83d76490bb868bb88c2a2c3e07a326bd3e97fc2f552adf85722a360a443d720c328076e35224328e09494746e0000000000000000000000000000000000f76b0b960a1343b4267f5aff44901fd6796a778b1a87666b95b773edd0e7ffb6656d4f0cc3b9b38bc6c0ed20cfce153", "Name": "matter_fp2_to_g2_6", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000016adb5935f32bafcccb81cf4d177dd8826013d85e11a4aad66e3aa596e1183aeb9d68eb8cf5b716a8a9445ea81b40d7a0000000000000000000000000000000018bee24b0c97af8aec210f15bbb6acbb76168dabe16e669d5558d8d32f00fdf5146471922fa98a28f238974d327996a3", "Expected": "0000000000000000000000000000000018bf5f93dbc2c37479b819f8edccd687c4d3c4dd04f8c73762fd89d0c003674e3b2ed749d23e775f925279b3112689f80000000000000000000000000000000008a033b197aa8ea2213dbd7ed478d98c25dc6e9f91b9924f3c14124da26a67bb196926e02da89b746f2a67b14ad226070000000000000000000000000000000006f7824bdc9c53212609512858278f79d9b094165ff178e3da8776e24311bebbd9deb29f366d4c7693a15c34df118403000000000000000000000000000000000edde25fc24b9ec58b3c317aa3ae48dd5fecdf6397ed9636ea042722d264db0b1a89a15a1e16e892755730ef52796527", "Name": "matter_fp2_to_g2_7", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000114285411713eafd395ee43bf1728f52d17ac512b9d0cddd38c904a9a3a1b30283a3918cd2cc3da6a7d6b4ff923cbb6e0000000000000000000000000000000018a067f91f94b2904c5bb6900f427ec4e93374b5079c84707feabeabde20b5e49801f1f3c7504dd27da94d5e754df4ad", "Expected": "0000000000000000000000000000000002d28025f4b798083aec3ca9a91a051ce27a374b115c944932026b4fe0dcf68b335d5e47212f800c241c2d42fd219635000000000000000000000000000000001742fb6ef8e9a5a7572b0d3fa4ae8ae56c9c6f4daa20d0b88212c40511c6f6b5ee98314a2d1cbe4bbbec907495a1ade8000000000000000000000000000000000d700a511a58c1b8f11153669cb21d88512dfdacbabe38e402431b4f7ba374b5f9a88614da2d56799d39324e9d19e27a000000000000000000000000000000000c6068bc7a43d614b8f1132b13e04f66d2fb5ac0c5bc8501b754a0bcf4f382db92b0994c4999e104c9d1111ef91d5edc", "Name": "matter_fp2_to_g2_8", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000dafa9fa843879038fd1566c319c24119989090c5fd34f6514e57f633d3709f0aa9954dfb289843a6990588e337b63e6000000000000000000000000000000001742a98dd7d3671c2c64aa71023a0040e936fd726c062d520626113bed471e53ff3e85737e5abf9ee8821bae53135f20", "Expected": "000000000000000000000000000000001350c68434a9b02392e60540a3985bae8daf9a170b30336ac73afae6f892c7ae8f5f1cadfb2780d6e5961ebf91cd69ee0000000000000000000000000000000000c20bd286fc1886b9b28dfa40d1a27395cf76a8b73946849ea0a7b5e12530de13c16acef8fe2a2c247ea65ca023eed70000000000000000000000000000000002d8ffd0235fb60fa573662034d46260e0c96396537b2a9d486dd03bdd13c5a1efd2d3cb9849ed11c4376b665f378226000000000000000000000000000000000d90ca1b73a6a9566832f9f19d8530a3b12f22bef853fc44088559b923ca108cebf4291e0d7de8f25c7429d455f5ae46", "Name": "matter_fp2_to_g2_9", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019cda532e5d94f3b193b3f286a038637a736c2b87b804efd4779359db5bd95320e06d6d28da3c229ae48ffc02303fab10000000000000000000000000000000018df89e4a545bfb825bcce2f4c25f2416a72e32633b3dead5205c8b7d69c78f119d0e940e5bde9ae1cf91574e5d6c175", "Expected": "0000000000000000000000000000000013f223602e8d12c3bb51cd393f6f59beb5c55fe80c3fc8fb0bc90eca533d9b7981563a30ebd727ab6cf0111fa2d3099d000000000000000000000000000000000962b0585c681894cb701f17ec06c0c240899db574c02d82d85ed4dabd4b8654c29b84c71d2921986fc2abc542a3ed9f0000000000000000000000000000000000f0e79245e645a6e3fb88b9103ede3e6ecdd7e45d61b5755d7a8d100d80719746af58bb23d3068cee7389b2acf17f8b0000000000000000000000000000000017fa0aac84c58283f34b9bf713cde98c175b38e92503c08205350822d778f3dd5bed8051e185c495831a628aa89335c7", "Name": "matter_fp2_to_g2_10", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008ad60829ff001404da40923806e496640a90c5c258a41ef5912f8a1a20eab84ce43b2b5aa4aa7dc4d8b281591d235020000000000000000000000000000000000f13dfef4b3b83aa7f9525eae9913e10502e77c03c55a7aa2de083dc5102c098b6f8e36cb5247b827e30fbcded9e2d3", "Expected": "000000000000000000000000000000001062c97c214b86518660c5e1c33a4e48923ae89ab7d8bc5c798e631de16fc1f104aa957d3e7915aee8551e24aaafc8e6000000000000000000000000000000000e42b785f17f25b87a0dc558a8d57b19d8f41767c3b4fd70c147e95443aff2d9a743003da41d578a2b56d7dc748cf59500000000000000000000000000000000111fd38cd2f5f681bb37f6239a5eea820ce3f01023c685f8e7e244fe9aa9dcbd18f0e50705faa5d8d66b28af9f371c630000000000000000000000000000000004726d3e452f6fcb180ce1d50bbee3a23f7949b635a058f12de1cf5abda19c042168feea53211dbed0bfca489a020930", "Name": "matter_fp2_to_g2_11", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010468e5421a72ec85b63f7f3070a949223105763868111424fd151c8365eb0307dbc9cbc92e5dfb296d06ddfb58d99000000000000000000000000000000000008149ce856d489050ea834452bc66f7f3478c2056969354dca8652f3d0a349e40fae0c4c57ff0f5e022aa93c61f8c844", "Expected": "000000000000000000000000000000001211bb8d3bf65b60efc7237ffecddb4e7e2f0dd36e2a704dfc9f4972897addff1a57182f8e0a0ac08c9af2c98eaa4c560000000000000000000000000000000007e9877280aad45a3b1453b6771ab509e4f53937cc6da73d3add50aff94869b27f49218fb479fe19a6176b9aadd36e35000000000000000000000000000000000ff915801695a281f6642751be77155a813847ae0237d77d2edf836aebac02b659b98d49842d4d10e82d9d146e63a3da000000000000000000000000000000000fae1c8c01a2dd94f17c660353d158ff6f3eed4e6375f1e414ade9d6fd040a48e3ff0d558c882e92e74bd6ef4ab06168", "Name": "matter_fp2_to_g2_12", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006295de7bfec61f06a56fe09afbb74be968329e88ba2e87afffe9ea9bf646ff5b4a03d6088e87644958ced95eceeea08000000000000000000000000000000001443e61dbf14b6c6ed99e1917ecfbe5a4a23ab9bdd3bb089fbba76d795d715d9d2e3c7d8db0b7a9434ad691b68bad3b2", "Expected": "000000000000000000000000000000000dd00d9f31cb5148048125668286c1790cb7294e740df978ac0bdaa6e1c4ba139a04f5770b194c9bcfb123d9b40b6acb00000000000000000000000000000000085d5f4cb831720fa13cef25464a1ba7af33abcc4079d2c5736a219ad9649ebb5dbb8687a2d3952390866587d7088f72000000000000000000000000000000000de377d773e40e1c76e218b969297d15f7819c525ce39aee5114e8405bd7361116682cf9d673574d415a7016b23b567d0000000000000000000000000000000018db26c2097f72b8788ef5aad2d7aa400627e224924afea1ac7c7a6b5cff4a55255e218572614519a536eaaf0f65533c", "Name": "matter_fp2_to_g2_13", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b14b12ecaa94f9656be54772be9b22a2495d4ff873b0bb971c27ab1d8b940c84cabcf921f6f75e93942c38cddeb87500000000000000000000000000000000019eca0daafbfdcd3b56be863dceb21e624b22c0d376fb92ba606456ce3825981713b88e40b7fd801e915f97d5c29ba75", "Expected": "000000000000000000000000000000001853b4c4e6fcdbed29c5d3aa4a9f6d447adc512f66a32fdef06c6ad316c42eb3ca47ffe6f21318ad610d0a68673d7bc300000000000000000000000000000000123d15c37fa8b1a95229e28500c9a767e6286b780138dcff2714bf1f8242f39bebb7d86e2811551914719ca90fb5615f000000000000000000000000000000000537498c2ec64b2ba58aa0a858b69990cac544d5cac29abdf6a42ae9c04061f83580b79c2a6104ebc55939d9a2bc5ae2000000000000000000000000000000000b348c19aad3b67c690512f372d995555ee38bffcdaf33bb827160d6929d2ce598523880f6136f11e1d6482a654cb016", "Name": "matter_fp2_to_g2_14", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000104a452343a4098e9bf07380a8e52050259da95f5fc88f31511a08090bda85f0a08d49cef95bd26c7181aa3eb0be122200000000000000000000000000000000012400aaec3d2f4a1a8cf3f28fd396133c3999c074a565c110354472ae29479b9b62ab67128521c2c6ec4869811ba760", "Expected": "000000000000000000000000000000000994e7b6ccafc996f672c42ab491105ffe1482e65aeb456de2213b531889773ad4d5e6ea1687d6a1f13e74878766f11e000000000000000000000000000000000b89030486a1d622c97970ee7da6189ac341b9cafbb4081463f579ab8b4b049c6e6c8b63157455770a79108424a14f24000000000000000000000000000000000ded43800a991f8c37282d803a39941d3bfbfbdc56dbf7500ef3d16750b27dcb1ad93f89714395fd3dffe318c1771375000000000000000000000000000000001994144b032e1f8c4d688754eef82cdba0018ac47030fcb77e8fd920e0b0336255d2cc8376c03e1074f91269cd2519d1", "Name": "matter_fp2_to_g2_15", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000093e04bfcbd77bc6bafeb77f02d0f794a20b155435ee3af1d667c025e7645d9387abe0ef281386339f461352da93fbe2000000000000000000000000000000000481ffec570d4e155ec10e0cc58effe7a5651795d604cfda6cdbf011676772fdce2c25227e7d5a1a26748d15b1668091", "Expected": "00000000000000000000000000000000195d99406baadc7d8740962cbbf4bc1f22b08eafb52f3cb3c588b6cb3cd89d16cb7b8d388563289f5b5ea466128525c80000000000000000000000000000000004809f70463633595dd763d658354df4f9b409911e1a0328fdaf486d76ffb410d7c6cfcc2d48fd6757d5c2a4834f81fd000000000000000000000000000000000654f8475562098a2cb27ce224674a383283cde35173e1c16b141998b641ac9ee663d766f045451a7f6d600973f0ec520000000000000000000000000000000013bac451a44982c7b1aaac7522dab598cb79b9a3dab77f4d5a4c1c97c154451499979af1f86ced8ce2099bccd400420d", "Name": "matter_fp2_to_g2_16", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013a3c5dd40f7d7fbba7563331917fe19a093d5d25ae7993200c39460e0c46d839e3958b672b4ed195300f398137faa18000000000000000000000000000000000255bc4d313fbd61a270dce8c851f1fa09e6ac5dff9b9e8dfc8a236a1d44548cb079023ee9b8f0f5756b39e44489c3f1", "Expected": "0000000000000000000000000000000016ea88d0bce32981f489438df1bc14e7ade7a45d449ee1ac1a041c1204460cf53ae5c0e111914d8af9e6b3b7fa394484000000000000000000000000000000000db571ca6a55bc8285421553a373048f7877ecb9683d52acf07d48e1026795993e4e7177490921bc6fe1e63d69c2de3c0000000000000000000000000000000011602919de1df6cc0dd36a59c84ebb8e209056534e336f5074c9ae5323f8a03b123dc6354cf85301d838b16518ab64390000000000000000000000000000000004407d30fbd632fd493055bd4d8cbed337767a2ac534411a3eabec570ba41d2ad28ef37512a7da3611ad60b6536b3f07", "Name": "matter_fp2_to_g2_17", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ab7b4dec955de92224b234c2d8bb2e3881806c2d36a9a21036e9412f0a8d3946027cbb65b5dd9c975e01b3f235b883f000000000000000000000000000000000ffbb55002d9e926b3d8e7d963ece82c14afaca8b4d8415df8f964a39db606ac99f9e442ff69f7ddbbc4ae563b836192", "Expected": "000000000000000000000000000000000c1e7b188697aa9a053f14e2d907f2c61a59e0b0c72f9cce30faf81dc714a50113500ca9bc3af6657a5d214f52c90616000000000000000000000000000000001544c35d712eaf79d8dd5a22fbab72f8a6843728898412a7f305b205f8a50e03c6c462b87b3ac165e9e6428e0a44a74a00000000000000000000000000000000029ebafd90a1a887669fd0ace762a66bca2bf0a216333b0ac97dedb6bff3dda2bca1e3d0ed5fa9081c2887fe6a8e24cf000000000000000000000000000000000e1a01ca93ed268e0291a937483f7f8e252c91f9bd8bde55271b0c97fcbbb9219009514217dd8bd7e0267f44e9927a93", "Name": "matter_fp2_to_g2_18", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000103469c08562f6f72152db58b48811b0098b68af8de00e652bd5a67246459664cc8c54e15705d702d51e3f1d8ff76a7700000000000000000000000000000000059b326dd567fb2f8a6ae87f41fb22b3edc25122138a5f6732edb48ed7fa1949eda6144297f54faf406d873a016a1510", "Expected": "0000000000000000000000000000000004e8ad9838e7e269cddf0ae5c8f0f57e7467e0b6f2b9e37e7c4bcae965e9582dc46c9c50aa01f5dc761bf2f1ad311eec0000000000000000000000000000000011b1438ccc668900914578c3ec6e1334d0823861c892608817498fe2e538deec73e0034a6e8ba9790f63fdd95af3714a0000000000000000000000000000000005b4c88196425d3ecd22bfc0cb1a95488493f85bb74f50315f0ffcdd57ad2de23c137cd6d2f6f6dca8af2e3f7bb0539c0000000000000000000000000000000017066344a0f345ecf6a2ba66c37ccbce26a3f551524f74636d4c4812bf5adfabffb0645b898b10c332e94e5f2ae2d1c2", "Name": "matter_fp2_to_g2_19", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000bd594d2f5e1472f85bfd550df3eb948085781459eb3037fab34186ad9a0204a0767c8fba571af858a054dc231931b8000000000000000000000000000000000087b8398406c1e707fe87a16118e2448d6a5f4fd1d6c9d7174c4d8a4314fc7b2c21f04178533480976dd20e28b278ad5", "Expected": "0000000000000000000000000000000010d393bf893d589c578df58f4d0098ad3cd10d3a1d0f112f51b132a369e68c0284a6b70a5673383ae24a27a9043b16cf0000000000000000000000000000000003402afb77b187b45906d9cce348976ed88c758d75b9962a53352a6c3ee37751a9928097c0d68c6f8a315def4ca875200000000000000000000000000000000019b98631e53a3ffda3fb9165ef7236dad5c0c8d57c3315617cbd3ce77430bd89b9e1d88a019042cae0075594514a5e67000000000000000000000000000000001783bf1c9b0ec44c9191dab01ef5bda0cb2f533dbcd3aeac2b7c6720dbc8e3f770a215ec8ea2035129711ce4b448ba87", "Name": "matter_fp2_to_g2_20", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000673dface7041c3d7503ce4a50af946d344ad48327b515740b45276403d91bf1ef9deba79c8ffa0126be990b62bf3072000000000000000000000000000000000adb42b7eb0f6759a04da7b933bbc2b6aedde47da8571d6fa32268c606dbafcbc810844017eb6377493a12d76ca56c03", "Expected": "00000000000000000000000000000000086ac901098212acd091d9c4d42a1318c3b343480f1130d6e52128d61df9e19fb61ef1ff35de0ef60062cd99202910ff0000000000000000000000000000000019109b7292f1a420f09a56dce9694cb4944808a2ce9f1964cbb6ffd14a710c35abe81300090ffcd9e95f33e0de9f879a0000000000000000000000000000000012660c4e114a215390c6f6eabc4bd6e3d062ee28d0c87e24351c7d43195253cb7b5bcfed2b4abb2fdeb3ac04ee228997000000000000000000000000000000000e56d35a7e40a86ffd2088c81488265ecc4468d6cf02d563c91611cdf8b4333cf66ef50b993fe651b1792d2b242cff94", "Name": "matter_fp2_to_g2_21", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f554e52c4a6c5a94fd09c617f57e8f87af57e73ceaee8997fc62c8ddcb2f875ee805e6594a0fb72738abd3cd4748ddb000000000000000000000000000000001876dd03316ff007a2efb4c5f452d8418edacc2881b20e8340895f6fc768d14fd89bd9db3dcfb53fa98a1e96055fa83e", "Expected": "00000000000000000000000000000000071d3e796fb15d63c2d5cf68f59f11792b0b580b85c8839a02fad96664f14735ede2edfd5ba5b64045b366904f54ab600000000000000000000000000000000013fd1ea38d32772458622731b9e2d9d749f2b747443f7e47ef5e041531b56f86d1775d42a548b2bb201228f49ec9f46800000000000000000000000000000000099c2bd996c8c5ee37de971e8b75a0bdd4f69299778ee3d216973c9dbba97c7a93e40b209d390024bc4b5e82560a1a83000000000000000000000000000000000c4922ed9af845467440b78efa3a53ba904f29adf66e8ac437c8bb6624b5e5ba0772a5639b45fe167b1fb9283747c50f", "Name": "matter_fp2_to_g2_22", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e8b2369fc2c584d78d52037b109aecc87dea0eefc2da46948b5535ad19c9abdb31aee66739f4852a2d3c51f2e7f74e900000000000000000000000000000000168b2d3e4b67390cb8ba5e48a7a823db08edee7d8eff41b88cd653cec1fc0df7a55303d3c91e92a2dc8ebdb327b225fe", "Expected": "000000000000000000000000000000000e413d72fdc3db6fc79ef26ae8b37fe5c4356a80b3598513b5173b3406ffb54708b8794dae158060a1accbe956a39ff30000000000000000000000000000000019ba9dfa74fd241a55a3b47c9f37c6ebd1e8b51f46197881abb64b7f57c0e2d8f18edee35bb9da03702c0dc5cc8749f700000000000000000000000000000000183525156fbc80cc67d6cd15fd2ddf7fb0528656ec1d31b4c275ef101dbb635424abbff1154a3ee04346ac53148fb1f70000000000000000000000000000000011da0dcd666d01180902d8a7fd7d2fbb39f9c7587540451045956108a8579d7c116385a81627dad9d4cb8cfe68927b6d", "Name": "matter_fp2_to_g2_23", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000016cf7b1a9ebafbd20c078948fc974bcca9b8069edc1ca5e8f364f8ca2a52e56e1a424ea6bcc4240f46dc7f262760bf480000000000000000000000000000000011a6a67d4501a8d9b3ab985be59ffc41e79c453bb5548299abff3b83ba9ff951025a68fe6a8ad3eef3c02d39fca8f909", "Expected": "000000000000000000000000000000001932acb1fd0708edf13c293007a035991bdfbfe0089b61c261258e8c5c10d82a5318b2af221b372f0f3f43c391421582000000000000000000000000000000000973650743f0ec8e2acca33f2ef230ee7a05635d14099cdce913ad8678458ec0dde5c5a941097af2ee0c8ffb937d09fd000000000000000000000000000000000bdaf319044101ee9aa27b3accd36a5ecaf8b80deda4548377ddeb97283537be3f7199ad3c190ed23cdb44abb8786a080000000000000000000000000000000006c448827e3fe4f274bfa55a66bc76c5b01e29ac6a8dbebd801855ba4e93bcbd03292ccf804f07f21481260c135b827b", "Name": "matter_fp2_to_g2_24", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010e53fe9fa94ca622cfa370129c1619b2426bd9d50f4b5eb8a3f681479128dbe92adde15477ad8a4463b08f1a02a62d50000000000000000000000000000000014d10a90709789b25369f0376f39b16860aee1ddc3a4340542abff0077a4af8da946cc29fb6afd9930b872ea98749be5", "Expected": "0000000000000000000000000000000004aee050b0ea07118d76f835218b77b39854f5ababc4e2a29d7c8cc7c18a69c30bb22437049a051d049c8a84f7868ad40000000000000000000000000000000003b1b809d5046054924c3814d26fd5fbdc59e03e5505813bab73bc212b0f5bc0d3fc34478311c5e1ac70fd16a01c52800000000000000000000000000000000002249a026af0b49f4659eca2c23dc790fb36a7b2996188828a17d5852003f1420f11699062932835cfe6543d454521e30000000000000000000000000000000008217aea2221f8748cd81cd37777605a95a63aba36a6ddad72c1e1ac57b24d79ff9d9c4ed71a6e3ac8a378129d5475ad", "Name": "matter_fp2_to_g2_25", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000194612afb777e39d0308a290bf823fe706487c3473412d1410dcb2c0016a70706e70e3a009c0bd61e755b1e4c65bcad0000000000000000000000000000000000ade016d06179faa8d44a9ee2542058bb81724d6af2954c0c09a897703d364ec25e62a3a917c5cecce5c96a7cfba924a", "Expected": "000000000000000000000000000000001274f676bcc05e54fa4b0cce234870ba97a0b1626543d6a9f09afebd5a752769000df404e4d434ebfd561f8335f36d0d0000000000000000000000000000000002877c9438fa319dd1a00f381834e8f3d3cdebf4e1f7690cb82559a2e978bedfd2455be020d0353aa56d435c0174b5b10000000000000000000000000000000009487cc9c7a09be901673cb1bd9a51f45e5d2ed30c90cbdd3e2b294c8f866f68da55533b78152e9ef6de30c345fde5b7000000000000000000000000000000000a3a8d4aabdb260203898655745cb695e6dc90c6e7bf0248784f8aa2340390fd5d8f1c6a98eb1990eb97c2a7f103e3fe", "Name": "matter_fp2_to_g2_26", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005aaeba19cb0baff9a8e46b901f15735a0c1f45116fe1f41c22fbe1aba22c0a7678bd4799db5cd9141f3112877e2c5f80000000000000000000000000000000003f54664746a5bc6f64021e2f18d8c175d96b1c8ce895809c0e6fcfbe896b3e8c1ac7f7556b9ef953371bb143bfbdafa", "Expected": "000000000000000000000000000000000ef415dfc1e47f39e9632ed21c9c2bfcc1959299710dcd7935a757e3756a42c8f6c627c720fd62f9c486a8e88a64c76d00000000000000000000000000000000088079108fe7d9ac93590c045be0d41396f3204d83793c4e862c5360ddb3268a63f704a9d14323943fc85874cdadaff1000000000000000000000000000000000cce908e8dbb7ec35820f2db5ae1174e0f675b21ae416fc89a7f242df3ee98764022744842999f65132229156d2627370000000000000000000000000000000011e0e2f8513d0a71b48599139a9a29c8eca090c5b02292baba58e07b1d3898fe158cdeb3bbe8edb4a805e695e896984a", "Name": "matter_fp2_to_g2_27", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010ca243fcabbdb219c5b30092d9d4595a4b8ad1cbed267229eb79a99aef9c5df03d8f24b71db77a5a76917c2fd960ffe00000000000000000000000000000000135d8d92f075c219f8012ce6aebc8e48443b2f33382479a4ca8db0a4f92041d5b6b1e5818b7a3de77a5d30be0e461d13", "Expected": "0000000000000000000000000000000007c6f133647745c312695439f1d8c251e941bad6e988cfe324ec7c959a9e0fb50618984429ff1841d4286922a26873170000000000000000000000000000000008edb220f77ed17fa1f4757a42ec66ad808c1acc25c4b9311be4c09703d547f648d9dd7c8109ffa89d01a35c69ec2685000000000000000000000000000000001595cc05b04f557ed569b19d64c09f4d82e6617437571fddd72a672d07ad94bfbaaed906b3a7e3db519159ec8d0a8c4400000000000000000000000000000000041157d4f40bfcef680af0143ccdd0c4bdd25e598a470dae844d887c398bc498edad715fd7383421fc78758cc9b00326", "Name": "matter_fp2_to_g2_28", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013e042ccfe0cbb7fa3b045a1fa1a86f199ae91721aaed488b96cc4f6de1899402f81842da2ab55c5bfa63f5b19ddce7300000000000000000000000000000000063cee89d1981f27a4f4d4f23c4d1229fd3333fc8f371ebd85c588e751307ccc75d71d151f7481ecba1ef0cffbfdea5b", "Expected": "000000000000000000000000000000000f983607a6d8a5c3b8a577cbd5d81ad2ae936e714199e3f4095cf280b8fd6d3699acf4d2ef251a571dd1ef4ba6d838bc00000000000000000000000000000000048c12f8b95f9537e56479b1bc43a121e4edfb6477fcb090a5ea60c5f4d01071776dd0264b0250902448f62800f4d2ea000000000000000000000000000000001644ba272d7003d0077991ccb4569638de0dcc48fd2e8e9a41cee1d2200aee1a849f2d620f60beeb06b08c31cd4eeacc0000000000000000000000000000000018892d773f7e48247215484ca0c8d996833c43a5291b0380c97607c86f4ab2784e692673a1da012ac4fec2713d156a49", "Name": "matter_fp2_to_g2_29", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e07265d2762e8e398c83efe1c43452d91b90b7a4271c09ff693c83745a6c01b73561ffe3da9300c8e7e1602dbaab0bc000000000000000000000000000000000375579c16a167fd9f9f61d5177705f157aa0df3451971029a9444432db119fb33b8c07de33fc822eab46ed4ae47cf82", "Expected": "000000000000000000000000000000000a06ea8e644d2d762520ad956d41ac2086a588450bc34f6d070b86fdfd73cd0734341a751d823935a009b7517770f86e00000000000000000000000000000000140ef0d6a0482537da7db8d775ac3c4a93b16c15fbe4602b5b1843ce757aada5f7776a74151d0bcf760f7284d4ffe56c000000000000000000000000000000000873c90f56a2b99da2f0a1528b8e376a5912f9cd81a159379ad70b7c10e6ebb7fea0a90d65543d968a34ebd539372e89000000000000000000000000000000000b05ff57079386e4e18e73cbff5f7b0efa329ef7355f083e8be258922203240dbb8926f7d11c22ab4c16d1df4bcbb600", "Name": "matter_fp2_to_g2_30", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000aaa37576af2101d090139f562edc2a6e7169b0150af831d053a3a87a3a5518889a51871e02deb3ec154ccbe9dda46df00000000000000000000000000000000158edaeb58b99d9442d608bc8e6024365e9a81e0aa23bbbd466c9ccc8d29415352a153e1f852666505ef097122592ecb", "Expected": "000000000000000000000000000000000e9d6f9e83a2584f2cdacc4711085bd251e060f8c87ff7538ce474d663c6f23361c88971c9da589586e754ed69699c820000000000000000000000000000000003fa90cc1dd81b815704e15c0448bd0e8e8d0cd7ad51237a25d4b8a0f78f532b18ec30a108930b7407b7486aad9824de0000000000000000000000000000000000cb97bce1f75b1df5a4b52745014eb632d2d2230e52a9767e3dfd76754e98252ca81ce274b92a2947f6a65fedbaa3e400000000000000000000000000000000090edabb37f411fae1764792083c8c7412fb470833a9f7399fb312c58687d4afbdc622ecf9d74cdfa3ea87382adcdd5f", "Name": "matter_fp2_to_g2_31", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000012bfaf34a8111a01d213f9a9fc90846335cda978b3df23de99cb7b764cf5db1a816f66adad1319aa7e25c0ab89e7de740000000000000000000000000000000000fed118654a128735fd39ffd3b381ad2d71479054b6bccc04dd58fbeed9b255ce2b925e2141a96a12edc3a19188d1f5", "Expected": "000000000000000000000000000000000cd234fcc729a4206233e46875a557027cb52c96322386b56d6e50d95dd9d23b6f8936ddc6f8475b1076a855c1ae23510000000000000000000000000000000010a774120f607bf9ad2d7bc498536cc9d35cefe384f88a2439a75f1a4f6a9e4b4253daff0d2c91b5915ee0e9a99b4582000000000000000000000000000000001496e7181495114abc0314f580c16038a04a8dab43b5564d518dba5f5e48112ce9daca4b16b6ad51c3af54ec9ce915d20000000000000000000000000000000002c61691a96a2120663c726d7fba3ed37524b58c92a024c15fccc659d1d2cdce077ba233a0d4419a6f237ee4e09abf52", "Name": "matter_fp2_to_g2_32", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b693fe53cbcd6f8d8c98900be1f9c85966cc644f0a900c70826c6573ee801ce7863a0b170ce0ef168fb1f0ea484b276000000000000000000000000000000000c6bd688fb883f3097f8b6fd6fd0bc5acef9341f21d62a0706fb3625a70459c45a5200ee36a3802d4bb4912030bfcfc7", "Expected": "00000000000000000000000000000000011cd454f16209b0b7040c744291f2df465ebc786946ce3cde77fe4d4bcc4b60a51573c45b8bb2d209da69107613764b0000000000000000000000000000000018a026f29fc2f81e82015ef8610b4396f2e3514ab1a213356953804d585c5cd6a3c5cffbf70d63d9dfca50129021f0e60000000000000000000000000000000015bdcc8c139e636b05ba7376c1ced4a183eb465df53b1996f4ddc8cbf42cdff4ae2bbc2d24831a8ec8b1134cff4444ee0000000000000000000000000000000017671fc3995babcd2c0a1d2a71c417fea84e29df67fa1096fe6d3ec77c45b64fb8da6ed08a57726ab314fb860899961d", "Name": "matter_fp2_to_g2_33", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ba7f82549ebfdc7f4959dc67cebde4720d76d5d4742af730d45d614133f0a7b0ae7b61ba5b914a997d9dde83b77b031000000000000000000000000000000000b4acd8c203ebd8e3ce12b10cc791b9a4183440309f24bbd60cb2991712c792ecac64d3f878cbe407fa8ca0d09548acb", "Expected": "00000000000000000000000000000000156d8823c37c81d8f03c0b2e61a2342aab6e6c9db36cadc9eb741e085de711e9fda08ca78f21753c4fdd8cec059b6c2800000000000000000000000000000000064d4fc2584c78f1e92f808d4457070b0470eb8de9d558885bba8b03efd8d8e195e4923d8e3382481a0ecee905371ae10000000000000000000000000000000008f1dc4d2ba12e7e3e1b0ef3855df4dbf29468bc99d5cb29fa3058a535af2ba038396bccaa238bba6d538498565c2809000000000000000000000000000000000fc9839b6ee876f7846b5086d487360b8faf133b6f5bd2dbc92a7fe2261b91b15aef8d90c227cd5f8ec05e32d807e022", "Name": "matter_fp2_to_g2_34", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000145f6f774d943a1bb753d5d4876b1a88a4021cb6a6607c0efb07eef2f90ba2a90a6e9dc94586de35f6047332553ce7b5000000000000000000000000000000000b892f1c8d001c8aeddf845c3845c51f2e06c3c77e543e9721d797951b6211a869da97325b569e0de35cf3beda853ac2", "Expected": "000000000000000000000000000000000d40f1c25dd57e36ed305276d4505cb250d2d9da0d5b954fe5e396b2c17a5399613243216586cedb19340e80f898873800000000000000000000000000000000063367c4a622fc925319fc6d119d8592f40f126ae05eed86ee5e4f6707b1d234c747e698c40f292dcb82ac5fe74ea80c00000000000000000000000000000000199ddbb5d4b6cd0fb9225a72c53f4596cf2597de63da56f4a9a18be8321a982de17367b0f3d794fa799657dd8ca10c5f000000000000000000000000000000000f1ed84e4fd958547d40cd2dbf16e2da4cb6d0d02763441067221890ae27ea1f689c26c900b695464ededf083667146d", "Name": "matter_fp2_to_g2_35", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001878e791993186ab76f785b2c6b0fe08588b048007c66fc00c695b55bd17b37bdba71f34ddf75ac441a0c2687711b2990000000000000000000000000000000016598f630f72a0e1f39678e1d0ec6530c4795d7565c5d026fea2389ec0ceb51b434b532466fbb1c92c1c958041283baf", "Expected": "000000000000000000000000000000000ee446310185ce76e31c13e4ca6c43166d971d9b9c539c7d0e8dd8ebbbdd9249922cb674bf6ad6840c203a5e208911fc00000000000000000000000000000000037344752896cff03bc39a9d09757a83c15fbd90f8bc1d8d58dca9b23bc00fa2b0f3f0bd7c9ed857d285825d40afde450000000000000000000000000000000003ef77f0220d1caa7538ecaef1ae2924ac1a180f11004034fc118aeac464fe1ce684b5fc90dae3370e3f79619889f3d7000000000000000000000000000000000fdfa434e7bedec071a1a333088d06299f55735f085a1e907a1c71c312bbb8d27ffa7de7ac69d421ebd675c4afd37594", "Name": "matter_fp2_to_g2_36", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000134725b4d43cb87d2e4d3c43ca98b8df257acfa612ccd61dc0aa1ca749f20bd42c38d933d39f8c3c1a14dd8fec43329200000000000000000000000000000000070ad61a7f5ff9f0b4e7483f5d56b0f315b5f6545b194565ebcf8f0b8d78519ec113af6d70550888be4d661a8403a036", "Expected": "0000000000000000000000000000000000ac465de3832452edcead434729be73be90785158617b5ec3ad53b12653e43721eda7de6742dc51d4d4bb58a291999f00000000000000000000000000000000147c39a5c162afa1f8eef400cfa1bdbe5436bc59d93973f50384022962f828ac934a4f88ab7c3d505b0bc3bb002f5efe00000000000000000000000000000000141bcdad53845a7eb2ec08189a55445059dad24ae5d39fedce869791aa28459f05a6cdf9575676cc6f3dd7d6faf077240000000000000000000000000000000010e9f539a9ced860661472f53147d0347927f065ec09bc32e00c5bc157b07f8b41b05aa4e0eedd1f73c7a287b2d0e5ab", "Name": "matter_fp2_to_g2_37", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000179bc843fecfe713f6e3ccdc8ca0f48759459b675c8b96f5403e1f6da92c2d60449638f564ce179373bce473669965d700000000000000000000000000000000082bd89b49aa62c94ecd4244b3077421569c71efccc62aed3d4bd492bdfe57c0d2cced568df5992a196a7b71bcbe5e3e", "Expected": "0000000000000000000000000000000016479eca30f48bfdaba4c8afca63ddbf59fe3367b2d3c17d15a5869dd2956fc67ebde964530926598cdcb62cfc993d32000000000000000000000000000000000650b4fd24ffbb953ccdb1b112799149d29e2377ee233b9ac97f4db432da63c98b8aad751f6060d04fe1f9262b75fca50000000000000000000000000000000004568dc0b9b430596f2fa59291ea6f923d552683ab9ab93000788145cd7c468c5576efd981c9ecee2ee0c16eca1ecdbe00000000000000000000000000000000154af1490463930d6b8261aa1d066eeda6d65b742cb53c65348e5cd766d86982a1489ad191d1b126233f193d24823b9c", "Name": "matter_fp2_to_g2_38", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000fb118c86e974734fc434c3bcb783e4a7f9251d9fcfb9f4419529354c8a7a3d9f2215de2d1b9f0927b185c5b4db838b60000000000000000000000000000000004da0ce78f3068bebd0a59bc2e41e7ade737375f07d6c9ce962be022856c569a33e8bd6ae60c4bb1b53b3ffc2dcc2aee", "Expected": "0000000000000000000000000000000000df692ca763a74877352af3609c8cdbc184eb71bd35fd86334cb88543637b40b3adbb5802dcd7b88f4d722b566aba7700000000000000000000000000000000181495e709d1617f2d912f43487ad3920ac5f8e47395ec4b58bcf0b2d986c674a0c7838830a039bfb5bb59cd2fee2f5c000000000000000000000000000000000d20b482dd8aad583bd5d08ba9c61b3e954f022d48f9f4f62ddc9f5015ac71dab7d206b1d8b885d5e605519bd33d93a20000000000000000000000000000000010d3deccb9364ee386eb35c7117bab373a76d024627b8a031f96465d5f75b029fa992e29ad4a170c4473cd1df585429b", "Name": "matter_fp2_to_g2_39", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001f43b86ec24ad40552dc4874a632b4ff4663eeefe1a8c613a19a798a0ebe321a3d543e2df28277944a941b4586ac770000000000000000000000000000000000baaca6bc34feac790807b5eb5fd173c86c12803b76b50be59b2707df765bd10eb467effe34f8dc3e1e79df8a54fde38", "Expected": "000000000000000000000000000000000a007c914ed40c7f2719fc70def0d4752cbaa775cedae9365c5afb61a5e1a2854f9e1ce19af9fc85bfbfd2c33f5bf095000000000000000000000000000000000d85b0d173c25c2915fee429d2468a9eae01ba43c0f1a661f2ef83c1acd726865c00c40ccbc3aae306f93074e5e7858e000000000000000000000000000000000b3df302ec532c8100c121c9a3455392c713ec60de1f9572b040b0966f8ffb888e8cd768dcf6d63d4835a52d13a730c0000000000000000000000000000000001123c43dda8717d03fbc02fa53c4b1c9a931db6b274162cfb02ef5eec602bd8161dedc37c7f6217c8e82236f06e49e2e", "Name": "matter_fp2_to_g2_40", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005e4751707f3ea7bc7a74d80eff27a0d65cea0c3d2e793425e79cdb0c41e6ad0cfcdbb4de604637c41dbaf30a1e816e60000000000000000000000000000000008f69021794d93826f8207b96d49214b46dfb1778603634a9f5194e92481465702a8be1bc49a7bb57527fe6f963ae04d", "Expected": "0000000000000000000000000000000016d8d9b1b59a22fd830f88b9850576488f75672a87ccb766e52da77f187a8e66071130c7e71f86675f8379b2a8802c4b000000000000000000000000000000000aa4ca84aa23f01ec536ffa25c4b7a6c822f588bc75a4a72ed9237c0588ab892c8474a0f23afc7ff0dbc3b08f8e35b60000000000000000000000000000000001425e759e2537d9e5f0f356ff1d38128eff3a771fa661a839f7a8d0f548347438574ef7d592cd4273ef9b7269c9c5d7f0000000000000000000000000000000012cf1c67d1ce244ae22eec0bf4a400a0f356b9dd075d87a6e61941933872d7c0e42c1d238b2c1704d2cdb2df75169f39", "Name": "matter_fp2_to_g2_41", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000116988a869cf552b2440e16569d8b6e30c6b15430855c4d6bbf80683c5497291bac7999c1f8f08f494fcb4a989451c3b000000000000000000000000000000000e26058d72875fd3d852aa4139f71d35e1edb58242a4939da7986645117d027d20baf85770fc909d537524244da59ce7", "Expected": "0000000000000000000000000000000017f6e2743cb30fb93816d0dc802c24509315363c3652b0244e1395cb9200efb4d7b9fa7642e8d165d28a00740f1a83be000000000000000000000000000000001483644fffd3989ac98cea71843e87b8e446a3d497630419afe99b3f1729a831fa6a49bf763b0c410cfc5390ac4ac1db0000000000000000000000000000000018ad20ae5012266d771b2c86f891f498c2e90a7df19561be240319edc1fbfb316948fb3f8a6b0e3720676b076eb372e10000000000000000000000000000000012f404211899d8fc1221ab5b82db9042ad37e63348871e5ac6cdbddacda0a564888f89d22712069b6096b58c5935edd2", "Name": "matter_fp2_to_g2_42", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000078c6cf89561533810b583a88149586b29da5228ced10a75257b2587904217f63499d8b9ad2d536617247e12f8d1657d0000000000000000000000000000000005b016ede9d892fbd7aea4e8ed0f1eab70713557311481735a91308fabf76fe71e44a06dc23ea66ac5d831e982f401b1", "Expected": "000000000000000000000000000000000d4d78f992f12aefb0e3a6b18fbe2411108327a9befe4a822618fecca4def3169972b4f1fb254cc4656a676529d554ad00000000000000000000000000000000145ef33250240a5c9434d4b2cf2404d9e7cc51b55e482ebc6a8aed85caa21ed00623b3cb2d76ce2d96b2f346d395dfc40000000000000000000000000000000011af2ee2514c58078da335c0273cd18b98d1ac6f0e67890677403f71b0e06863fc72611c0cfba39ac894ae500edbdbae00000000000000000000000000000000186863e7c24cbeb45f7a66b5dddc9b57c7e22c5139aa6bdb82e77cd8182bb8d2fb7bddd7d3516b5422f92e08d02606b5", "Name": "matter_fp2_to_g2_43", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000007160f36f0e5c4ccbcc7900c6504cd86fd6fd700bfa79af69841e4a6127eaad467ccc93c66baf7d767c3fdb1f31c527a00000000000000000000000000000000043fe62b0b9be76a375f3be0d6ec891d5bf5f2982cb2390125ff8d5db57b6b18c5616c526102e4f615963d601d13f122", "Expected": "0000000000000000000000000000000002af4a301e90c71eb375110e7fe23f8f05e2ede86b1a9b240e8d1d4d70e96f1dc3640fca7ebbcde9918deb91f3592de600000000000000000000000000000000058b5f36cfb6b0adb14b397dee4c3769c7446426eb5719aef4965cde2dcb70e6f2fa60101a5f03517c0040093453d092000000000000000000000000000000000f77b560469cd42c5cf3458ae13020c6678af3cddf9bc559372d12bc5d6b930795e1eb09f27cfdb8215f39fb2a11b30c0000000000000000000000000000000003308985946c742af7bd7d29abc2517ff1d225607b5f11fc66695cefabd8f25e294ebdb7339949d6bc4d98db19533966", "Name": "matter_fp2_to_g2_44", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b9590b1d0d292d9967d759060a551f4e8e4c1c0066a9a3c0be515085847fa26b77462e3bae9e2621f28e01f897df0be0000000000000000000000000000000006ee7c459bb4da96e87eb1d39bd7368de5f60104f85b7b4bcdd7761ce08d48babe1bf5e765282779803bfa972d0e668f", "Expected": "00000000000000000000000000000000093c936d57135b25900bd5dd55cd579aa8b85b9c1b5e8dac6196c4450b624734d9bfc3fda499cedf2e877d79f2da650b000000000000000000000000000000001832306d3ac1c1c61bdaa73c9b6e9c2ccb484c3baa1de6a217a2884c72b72618e864f75fcc2dfaca358181ecbd3347980000000000000000000000000000000002b2e5ff1ee02657fa88c7d6f23cd4c0465152a9daad8479b4b68c97930acb22e4e2eb0011ec4062b8ec46991a7cc630000000000000000000000000000000000712543547e9d24cc78d1c2e3fbe0b51222185f4c6e513256d1ee066ba50beee20321bfd60462e2587c375a0e9395715", "Name": "matter_fp2_to_g2_45", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000044612b42a2baa9d3e1d187b2a4e048773b4851bbd7d4025e0f7f61abee703b5a563397da4515c7379397dcde698228a00000000000000000000000000000000014cbff1000bc0f9b394b18e81124dc81f80e291e841dae6e96e0c86a6f618b9f6aa6103e0e7582e5136319a4dac92fb", "Expected": "000000000000000000000000000000000f52e2f8dff9a93b2985d5c2b8b980e4869af53ce55aa48bc1c9295e557e3b5ff78896e5e6342c2d535d18b11950bf390000000000000000000000000000000013d36cf2805d350c5b748e639d20e592deb4c5bcde99a94fb539dc56d48a862151b925314f21dce4c9130b32e44f54060000000000000000000000000000000017728f485d881b861f626c9de8b3df7d807b266de6cf8dfcba262f40a6248fb5e6506d11e88f460f0b5f1a1907ae5f3e000000000000000000000000000000000c0ab998f63f861c82106dc3ed5ea11a16e98139e8686f8442047a1cf9ac48c3d34b5129263767830144e9a13d4a1f44", "Name": "matter_fp2_to_g2_46", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013da827dd718d3736cfcec53f034d34bce253bc91f7cfd6cd2666819bdebbfc43a9363f82bf4b580a7739b5dda9c94360000000000000000000000000000000010e94039f37d218ad393e88a226dd324a37e8d5352dedf6d84fa2ed2cab2f874ccc5ce94599950f91b8dd6d6c8b84aba", "Expected": "0000000000000000000000000000000003463d887c4d0aaa21acaa308d77f2c7e13d10157efa9ec3fb1586a8db5ff1a9e807c91c86afc4df34c9fcf06e8561d700000000000000000000000000000000128a81efb9f30ed811ea3163c71b6a46ba2cbdbd3a9f93cb8d0f518747cc860431c6e93bdcdf36d00f83838965da4b50000000000000000000000000000000001777802b7c41111b38da3fd8092c280b4925827b2c1592f779a4ddca71f8268858855c413fd5c0057a652155261d75ba000000000000000000000000000000000c88b522d6dc2000cfbb7052e141ddfe15c6cd7fddc970edc4afc36fc59e7f8e31415706a8121e8e84348be0b50d0d88", "Name": "matter_fp2_to_g2_47", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000010416da7cfbed2768c77b80957053030d49d535b21a8a3297ab257dee0463c91b87a9e571b86bd874522149d9af0c2900000000000000000000000000000000197ef97f6d02a51b80e6f5629e88a3c60399bcc4a358ab103dac3a55a5877482558abed922585a1ce3228ffb507679b4", "Expected": "0000000000000000000000000000000014be96cfc0dbe09155ac8d8233b71ed584153e279b2b2be88471eb653aa4913fd2c33947547c61f7fd8bedbb552a8b1b00000000000000000000000000000000146b9a0011260e2646920894cf405bdebb101db12da7849b30868655fb5f972113cdf2fc322cc246d3dbd9f20b98fe2f00000000000000000000000000000000104bc20e104da5173dcff3e195f80960819a0d64e922bb484c2739c4b7c22535f7faeb1c85188aa853277740b389eac90000000000000000000000000000000019f5aec599f9ec286aefe48eedca3f929ac6c758c231182b92dc965d6ac1f3db53d93f57d733ca8425a5dde070b0dfa8", "Name": "matter_fp2_to_g2_48", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000025f1ac90f5b0748d57d8f7a928be875c5712801f70af0d057546228c1bf83d3a207884c0d66d0b5dbcaa736bfe0aa10000000000000000000000000000000017f66b472b36717ee0902d685c808bb5f190bbcb2c51d067f1cbec64669f10199a5868d7181dcec0498fcc71f5acaf79", "Expected": "0000000000000000000000000000000004ca0149527817b4df0f08acabd4e8c6329c0d1bd9f2e8211cbea25d69b84009ef158c770f948fd67e4609ccadc938680000000000000000000000000000000004101b351e2a9d34042291f38a289d8575872104bcf76f60bf888c60cca5101c34c247da30f7a8db4f0cf2f32abd302c00000000000000000000000000000000167e668de3207ddc60b8a5d5d246bf2f63ceae3bcbc4309e73eebf4d4234c2785bb13e4d5d8fff9c5f205e4fb942a2f6000000000000000000000000000000000491b965ed005065abdac53e3065781f2fd23f6159debc64f01c9f62073c651da33c05ed84617efcb5ffe08ce05e3b2c", "Name": "matter_fp2_to_g2_49", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003f2dd27e3f0ab503a8752c0802ee14c655271e8cfbc734905b4331fb4e70cdfe291ff71053fbaf91680b1dd108f458f000000000000000000000000000000000c62014b7694a3e81370761e0adcc32430547a1bbe33746637e7762dc24f8d04b4bb955f17ca901659482c622d777642", "Expected": "000000000000000000000000000000001541320fb6f8a8c3c67278a7ad05ae7927d3555ad562bc8addb54c6693c51fb1c7355d2e74ff10f6bc3eb182d8f5b88b00000000000000000000000000000000172b65b110935b116ee683c8680ef0a660afdee43b9b8fce08ef3a70b352f8710c06b820348c338fb903a165cc5376da000000000000000000000000000000000df529b0e274e2e8993dd89ffef487aff23d31f502a19dd7d383de08fc77f1308a59ac5bf7cc899e81d377b2422187850000000000000000000000000000000010b40c9063d174b358637ab710d15c80d9230a1b3a056cfac4d583ad8c5b79c3d9bf22a1b0a4e0f629cd09ff7586f886", "Name": "matter_fp2_to_g2_50", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014d1491a45b4b0914a6cb2e4dc7de9d0962f5c175cd571057cae1e17d2c943954d119690ea14f5815f858d277a9ad828000000000000000000000000000000001650771e0f7b33d235f229b7d49a7a5a0f00f78e5f4abaa70f39ec452370198a8532b5873e41f17c449f9c565e6adea5", "Expected": "000000000000000000000000000000000978ff68d94d33703488298658cf2c1b6034d3d8d21c175d71a0545bc2f99eaaf131f061f3e4f55622668e686e691f53000000000000000000000000000000001124804b252f8187178435761897d00c43cf67b588ca69f97c20b0ffad3ed94acc2c0f85f900713dd6ee9f38e5ca94490000000000000000000000000000000010ca2a8ce71b9a096c132c4a060a17365475b6556d4fc6284266ae787e217b3ceaa3a32bdf751375eaf6ab49800132fd000000000000000000000000000000000a43b435b116d9480497f6b2e1bb377550cb1a7ad59e4214bffacd517afc6b7bf91112fe57b17a02a86876ea07361bca", "Name": "matter_fp2_to_g2_51", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000aeb244909654b3e1df7cbeccf297223be57c2f514474edf0740dff48dcd5898b6e49eb65c787aa56ef79778249f4e07000000000000000000000000000000001007c89a66dab07f54313db8682f9e829baea229b030b4514d9c93686747207939c50a198e83ac2cf50315e02642a24f", "Expected": "000000000000000000000000000000000c3d87b1b78fab65cfc853304c682b39b6ec2b4ed005e9108f69daee5aecbd586c9818c37cdee865ba53eab9302320ce00000000000000000000000000000000062a7203cd2fd04a957cac8b6b6bb51e635ed7165c547ace10f93a32b7f37747a2e63d5767d966684409a6c748d4ee6c000000000000000000000000000000000526b44af8157dd68725aa8743684e020c1e385af7413c9dcebb320568663d18b6f29edea26f2628358852b794ffcc8e00000000000000000000000000000000098126f486ff55c21f64421e85b09a1b54f42d3499dc0e198db6f3bf7dd8476cad97c02b5b366e5ea20d8f83cc223f7c", "Name": "matter_fp2_to_g2_52", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000398d86b5206bae4ceef0bcc6335b1f6bf5d17863ef3a5e8463aaa69d9f73f8227263964659d4b770d6d9813f9399b9d00000000000000000000000000000000096bd18be1176e16a0d80e60f7d7ec9d3b6162f683440e3cde70082a73605da3783c8a058bf76d7e25056f5cd95c31ed", "Expected": "000000000000000000000000000000000f3e76e7d1cadfaad08d16457b02d89c40c157225eec7916d306faca8dbda008f41792888c647dff1acb4d4ba3b43c4900000000000000000000000000000000132bf730456e2afe745a58cdee689e37223292bf682d5b7dafa7df99e40d385559d0b3161bdda0bf5173c43ee46412dd00000000000000000000000000000000141b36ff6890e35db0054358bc0731b3aa0efac1a247a51daeff3515746456216975f44769174a4be41c109d35e4be33000000000000000000000000000000000ca401ee1addff8fe87b600e057ae34ba297886f92c5be8a8c00b360ada71831e31bc4ea1c309c7da31cb28d1011ecad", "Name": "matter_fp2_to_g2_53", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004ca5cb60c32edfa385baa911ccb7fd1f383824c22b945944b0f3f7011db8c123efd8fa70e4fe699d40c6716021f0151000000000000000000000000000000001339adb0dd8d83574c2008f0a7ed001b0808d2fb639b5e57e1d293884247d5c66c948ecc60caeea7bf440a3a44ed296d", "Expected": "0000000000000000000000000000000009d0af77517b654ad97de3ee1dbf69ec1eee901facd0f8c39b4af393d0e63957292a7529b461f7fa58909acad32ba3a2000000000000000000000000000000000fda17cd878ec0f8c294daec1bd1d56c63e875b002a81c9c41146dbb564bab6e4eae2717c9fd718af1ba816a1526e8fa0000000000000000000000000000000017563b7ff22b50b6d9e24b1e0d89ca5c72e68d4d3cc24cce36856191111d087c3dfb392070462dc7850ef5a1422931c600000000000000000000000000000000020001fcff638504055ba35230b360e6d3cb5777b959c194d6f9b038b58d3ead0b82b28bb215378abd85d357b85ea260", "Name": "matter_fp2_to_g2_54", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000089211892a61202b1ad3a85aab9f08f8d028f3e3deb16c1de4d62c1a403fa63c6dbbdf8cec37f0a9d6f346b1c7ee179d0000000000000000000000000000000012a9fc2070b326f4d7e64804b3a2e977f4bb36b6a4afcf27252af757d8535e8172a99dc909fad5a3ff8df23d6d6c5948", "Expected": "0000000000000000000000000000000000d51c77c2443f00d965c0d7ec9b5a8a8003c2a77b0ffce3e47bcb55420e8690a9c2ba9235b62a4b351d79d216a3aad40000000000000000000000000000000013cd46e3ee6cbb3bfb771ee30b5f5faf0a64a9efa1f8fc57024c83ad07a9b25e513f211ea604cfdf319dc42bf4c067d300000000000000000000000000000000009fbe1fffc67220067c948e0c80de23795e045fbe8031c9010eaa69356ffd8e5741cfe12731ec13aa236630f1b1dab4000000000000000000000000000000000e5ecdf808d10d47f041e4b078e79b32520ce9623b50059a3bd8b59daebf9103c31425659ecbaebfb2384d1c2f1b400d", "Name": "matter_fp2_to_g2_55", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b37365748fdb21fcb46f94edf86c586f17d0e042c4683e68c6cb83e7c0ed2c30ed260c15af2c9dce77bb705debfa7590000000000000000000000000000000010d7c02c6c1ba3cf6ac09a05dfe043905e1a7eb32b67f2e8a5dfe82eaca66ef46cce43aaadeff58ca85345dd0d3bf3cb", "Expected": "000000000000000000000000000000000f3e4d2559261829c0f4816f8b571170de1f74d75d74997cba56fdad42932db73504691f9e001f5b4604705a8c1a38e40000000000000000000000000000000018c72136bc7d3050ee693270668e706ebf70f990e447ecc6153a10625cccc9deaf5ae82d2a656b1376bf33b1c1fdc2c9000000000000000000000000000000001754f2725bfa76e92a74ad5b520ec2aa82a1f86e8623a054ebba489adfc9e71d1f14d4692ff9fdd8acc3d768b67e1b7000000000000000000000000000000000096f1373434a8822569cba0679dbd2abf619bd9a8c73e54e078688d4e2615d45431ac8cf3da5e15a83fe77d14b339e49", "Name": "matter_fp2_to_g2_56", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000aeee59421c8ee65f8070b9d036e6bacb39dd2537d02960a3a57da4f0985cc7b27784d60fc1613f5a83c34d2250395c1000000000000000000000000000000001715ddcbaed0a05b38b1c820724405a713cc0215a4c497892f00746c0f9af28b440a3686178d9bfcd41944a224311306", "Expected": "0000000000000000000000000000000018d515b8c99f541c7dd448c3564c1909b84517b662d6a2d1176d3bf5e70abc0a2995c73ae3f1614bfed2f64229e173e80000000000000000000000000000000012126ab671420933cc4fa9206311200cc5241ca3eec54f5d97a426a72642bdde32a65c79735446779cd1744d112d544100000000000000000000000000000000190d836312ffb0d6bf493f4c942263922659abec46ac4de639efc311753148b445509f808c2fd813729b1bd96e0e663f0000000000000000000000000000000006494f9a451460ac658ec17710bef79d59b6e0fca049804c0954c5fc472bbef520f75d34408ccc62cf2da3deeb79acc2", "Name": "matter_fp2_to_g2_57", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ca4b3e1a8351057ba4a2ffaf0cdf1c3c0717ccfe26433f6c40e2cc29e32ed884f63d25979580fb555a5a86c9147bcb00000000000000000000000000000000010c1db593af38aa14ca9dd588f54b219ff1fc9edd25b3d16c595662ffa7939879244326b14d978e0dfdd25e37776964c", "Expected": "00000000000000000000000000000000173fa567aa952bfaa9a60b8232a185475cbb36761ebef49ea5fce900a06043d0e2c1b6024e40eadc9f4bf04b077201450000000000000000000000000000000010fdc32ff84f79fe39351cee1ed6b67dbcf2956020e2518d5bb5b367b61f86f1bce36f75516d9551d74cc3a567e6c2be0000000000000000000000000000000007abdff8a8967eccc4de6b4ce142173841c0e8399f5a67dcf0f7b5e5b4133391b44bf4d41d3ae3426839b19aa4c5d40c000000000000000000000000000000000c99f160062566418c09f10eb80f005f2c8c12825435f354f1d65bec0322e9b8ee968c009a84ba792a7ee7334b32bb3d", "Name": "matter_fp2_to_g2_58", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017cd94e7e672f0dba9a3c1db742d87cb18b9401e8311c4badc24f811a8f40c27942da6485807701c1a12da58076c756b0000000000000000000000000000000012f6de4ac9883e78f9d658cede4c70b44bac6b4c9734cbf24298ddf0df0cf54164aca245d8e313be4aca66ba3cab5d70", "Expected": "0000000000000000000000000000000019dc92f1da66d0855ebc8e7a2ddec623a2f843a97c7385364a631671be7ee3387a0f98940b5a51c8d9e23eb27e3133b00000000000000000000000000000000008493903c5c68b2847869b8c3b0fa9b8ba15bf1f11a40a29e6e82942e2910901044254cc8e8c3c3bf56e1f1b6dab7e86000000000000000000000000000000000bd3c1e302a191094059a6493e59a11ab05a49faf333f36f7680ec9b1043e59dfd7f0fabe9f334b97cd638dbb8bb664b00000000000000000000000000000000141c9b07ff33b6ab55b320dda6be54320082f0057c446236cf3d3a51e674c26a5241f2c702d9989adbae9045942eeab6", "Name": "matter_fp2_to_g2_59", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001b2843d9852feae3145b242cd0999877c07785bc72cc2626f388dca32edfb112bb90f9aefd6953eb15a0babe748573d000000000000000000000000000000000a69bfe809a67ee853cb96b5a7a72798748cda56936e5664d509001544539730f57a7541ecd2396c9225818b9dbfa3c6", "Expected": "000000000000000000000000000000000d0922466c358cfd756727e134b5e64d211244587e4eea036f0959e78570dce3ee264c703cc356cde20637c7560369340000000000000000000000000000000011a66d618f79fb662ac2b2d3b50750a5567e36d7092dfcc72d8f340c04df75ecc0ce4a01b410ea775dc548b8dc66c3d8000000000000000000000000000000000cc49cf4be5e2df6b43054092afa2d6acd66f5a43ef0667f6a2d660beb7fec70558ce02d7acbcd090df91fe833326718000000000000000000000000000000001270b0519db083f903a3dbe0b1b1bd5ce0b0059ea2c2c50335dd80b4bf154fc23a3de1ea753b0e279145254d8e5bd045", "Name": "matter_fp2_to_g2_60", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002479a989dbf27141bd9f467447218dfa6ef60781a7231f089d5f1f1d8dca2ce9606a75c09f63f37f9cc1ee61dceb32500000000000000000000000000000000037c2f1b96170f6847138232bac663e4940bca602717c877f58ff7f5259778246085d499ec6bbeaade18f738df333cc7", "Expected": "0000000000000000000000000000000007826398b4ec35ab58ba9fda5c15ada2a41d3854677172ef6a4a54087b64d0f73fc875ad62236eb7fdcbd94f14c8895b0000000000000000000000000000000016b14fa92de5f6e43988829ea2f851746efd6680b0ea1283264f803c8ffbe85a343bdd42225caefd1b94b8b311d2f4950000000000000000000000000000000018797093ff82bc10e6db60b1da50b9a60da01d67673e9bee8c7af2bfa2d57f409f7b06f53944938e5c73b049c2d3c6500000000000000000000000000000000000c66dcc3d30f35c21b8a9369c8f6de28af404e8b30d3c9a7f09c461b0272ba6d5a29e716012536dbeac1d9672af8427", "Name": "matter_fp2_to_g2_61", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e6fcc48312831b910e52aebbf19869b3b32f05db8310b68905bb244ab784df5732db2e72183de5d231d803d92aacff9000000000000000000000000000000000f61f9e52fe3afc2a6bf12e420cebf83bc55a449d6a167779e5b6ba3281c51d790a045643aa75f2516eaf6ae2a816ac4", "Expected": "00000000000000000000000000000000191aacce60a1a83f2c453fe196bbe5839a3a1178b147580435f7de8a2b0b4f65b3e280ac7a67570aba0fdbce6c11ad9700000000000000000000000000000000075ddd6b256f53a6ae6758a5158508540aa99b78ca069378f0ae3f5621ec24b9acff1f9b61d378334a63682a33fb0561000000000000000000000000000000000b06e11c9f858446fcc90c69d05cc26c33bafed0feda19adbd838c9c24bbf567b673110a1b248d0ee97fc682e561298e0000000000000000000000000000000018c75dc203493e12e1523af50f85ed648130ce5d3e9757f713850c867cc95c7acbb66c9733dc4f53d6a0e64bfaad5832", "Name": "matter_fp2_to_g2_62", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018efc6d366d79a09b7d56c81c17c2eec2ef7395fdb5991f41273329cdcf4537d342bddd83c3994a40d5c18f6afa054c600000000000000000000000000000000127021ce28627a9d6a492720f728acef3b38c12b951f70a932c7fc0ce3f5b6c80783351cec55d7d1bc4ab964bb4913b2", "Expected": "0000000000000000000000000000000012931f51430bea6e96f8ec456ce6b3c9e058b0bd3bbfbfe8b6e84fd6110c3bbbe0001018064e8981797f9c93713a0e4400000000000000000000000000000000196b6093dd2276098853ef2bfac84f0cad06b67a12484e98915dcc756310b818d8136954de1b602eb825ab29a143cf4b0000000000000000000000000000000008284beaa877b25374571dccb218c401cd905b351dd96700853f01920e409d11c4e440e90dc175cdf0fa807cb9d1e93a00000000000000000000000000000000063c6c238485c291fbb60bd2824154a9e23dea374292966d271ae94875391b7ceeee813e3fb9504223bb86f0ea3b6cb4", "Name": "matter_fp2_to_g2_63", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000a0277228ab4e880c12f957a6fcdfe49e2155083f3f93d3f00c68622415cd1f5bae183b7df9e08328a8139392772cdc6000000000000000000000000000000000de0ab426e56029790a5ff72f34da97e11c028dc5d31e448c49ede004102804d2bcc36d509640247a4c8bfdf5104a781", "Expected": "0000000000000000000000000000000000f7bd0705cc4ea96ca38314cb85963044164b83a506ffeaea6e5eb8f7c4967cab1f1658f33b5435191427aaf9605bbb0000000000000000000000000000000007a93e2a5c118aff6ceaf2370ddad52a82854946ae595d384ee0b2b4935a574ba758736d84b0ae792f998ec6a707dfbe00000000000000000000000000000000090936add00fe5c7556610b28ecb4466ffc37b95b5cab43e072a585920b3cbe70faad01ef75d1dcb4f7d00d900bd99600000000000000000000000000000000006ae82539c68b7af3143e23229fe320924472c2b3e15a2e27e94cba674d30f083dce94706da094435c53285a43f89e56", "Name": "matter_fp2_to_g2_64", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000170b243c5aa49a0134bf3d6494cc1e55a1c6ebefc6117eca3b343a48ef0a2b077c443ec5b9201b198df015a38e66b7910000000000000000000000000000000019a8ac8a3be1d45318801bb0a654963b312540d24aafec46bb7661cebeec27b0b345275fd53c041d02b1ebfa27fc3854", "Expected": "00000000000000000000000000000000024c1b869fc13191b71d7159a07e869f1b13c11c73231b82e9bd0a7b4c32d7b376fb73d54f7231dd4974713179f235140000000000000000000000000000000012b9f95af661e8452aa5026302a7c28695307f75e9e4e32365caf378ed394fcecc831a3c47b443172188f4d18338fa75000000000000000000000000000000000f52675fb4d112d1d39ff953a253b22dfa0b73d972e756ea7fb673bf87aa992883c5baf32be6f50f880b03dcb740f06c0000000000000000000000000000000008b57726e17c873e12834dc291cff6bd95307f50e7b1d0caebd8c1eeb6eff4acc0520b135bc8e35a257133b7dc640db2", "Name": "matter_fp2_to_g2_65", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000fbbd5a10eeb2f358f2b167f1985d4084c4b12accb1520d780ef1c52f6fa80e97aaf190e7a7b241ef96fe8289fc0a9600000000000000000000000000000000155687114e7aa786ba27aeada830fc705aed069c4e3a07e88d7f33923319f416ff3caf6533cbb36e5bbb1b93a191bfd0", "Expected": "00000000000000000000000000000000061938df3365bf910884ccbd74d3cea7c30416bddc1a9b65e7723c15d89aa657da36a45fe10ed50bfa0c2769bb98aa2b0000000000000000000000000000000007b3981054255715826cf8f247210521ac681305aad3928b69804117fc143c5101383eab7017127c8452a79003a857d60000000000000000000000000000000004c745113480fd87212ed3ff30ba43c8716b32e62c1f0091bde53bd4a8fa8fe6bbcf0904144f4791ed1bf12dffa1f17a000000000000000000000000000000001237ba297c7f69e5e240846a12d86c8276a9a6ceb4af977edadc7ebfba3ad3f4ecc0b875da0ea578c83fc3b91f9f31a5", "Name": "matter_fp2_to_g2_66", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000115edef357ccc3432226d9bad796a42b1a278d9c8adfdddc5a0f8a36d32ea1787183877f8b7dfab71424cdd10b63441a0000000000000000000000000000000014b369ce61abe60d942346e049644b95a0fda96316446b2fe7ee427641af52fdd2a654bf125ff6c8c7f3dec98f6cbfb9", "Expected": "000000000000000000000000000000000a0cc3e328b4cfd01afe53dbf971ad78fc74d951050d76210e4c84438109622f0531747e762e185e3d7ecb9faa7c3255000000000000000000000000000000000622ad6092caa727d069b8921f4124d5996f3019705a908ef95d23092c5bb148873a22c227aa25ebee361d4184cc38a10000000000000000000000000000000002938d2ff50cffaab8c056c2844c50013f5bcdbb4f91b3f823836edabb39ba17ed1b8b5862301efad04bd2f5d5bf599b00000000000000000000000000000000072e96136afebbf8c06a37cf9b20c85ef8cb3f7f99d5c71b05a187c193711e5b76f52863c7ef080a1b64b2120ab2ed84", "Name": "matter_fp2_to_g2_67", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d22b7b36ac66b10adb4570f8e7521ed76de2df2a7b94b2d0b9ee4514cdff6fa7c74854d16e7e70f054a91df93c7ebaf0000000000000000000000000000000016867c9cba66dd9f1d0332d31c4e46f8e393eeeeb19af7e6e01effb29ad999b3086b599ee4b371de557d4fafd5da3794", "Expected": "00000000000000000000000000000000142ceeefa9fceb903b25d4dc68f6755833d7529752db0f125f7f65f2b7aeea8c90e599ac409576e82f7b9d6f83c43aa0000000000000000000000000000000001664acd89b482aed04ef40bd4d1ff9f39c80d7738771e2b3ca731af01aa230d865869cb05d83992e94ad99549fd0b8550000000000000000000000000000000013d6ace9b492c014d9a7504b5abe442e3bba13b1ada454aa53177990ec44f616e091f1382d36db87b7e794c11570a9bf00000000000000000000000000000000081b7a8a2906435f8a9242f573225ea62c5429e903bebda9fe9973a18ed2682185d72aaa6584b9848d1cc45ac907dd27", "Name": "matter_fp2_to_g2_68", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000db9258e1257e659e60bf8569ea90c8247a53a1d1eb958481623447a38d0f1f1686c3e40c8f15bd06cf5be9c02485452000000000000000000000000000000000517c87f3df032ff08d960f524939e66f7fa69b4168b0f2507baf7d7231a70dc5690a02d317b26f219365ac3255bee78", "Expected": "000000000000000000000000000000001182e4230f0c360c07913349f89f8436c01841c9615348a0d7057336c7483342024b0369ae52f39d4582f9885f552b5d000000000000000000000000000000000d15433ed130163a85f8ba87468c906aba88ef8610fcc1a8d6b3308cda29907acca351fd7fb19799184f1ad91c751b5e00000000000000000000000000000000111089005c4c5370863b0ea6b629197a865f978f71becb741f50f9b4e49b13162ca63c29aa26287faa9c923f57f4ad4c000000000000000000000000000000000dce405ed2a79ad433123105ad01a26ee85d1ba4e5f3b4e0339fea787058c06e9a6b10f5ec8f6eeb85b211e18b6ea076", "Name": "matter_fp2_to_g2_69", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000b6573c743989fc8613d4ea09c2e500ce965b50cf0c8975ff703116464082efff4b42828c8337809f6938d7cdd3f66e000000000000000000000000000000000896d316629c80ce6e5f240535863b9e064728665c0815f39b21675c236f6995e7dfff1e4aec9ad05861e2122469ea56", "Expected": "000000000000000000000000000000001694cb615d2994a903a13645ad44a63395320f286503902b6009e7c795dc8f024260e0c45bedd864edc9fcb9d1ca6bc1000000000000000000000000000000000f20538af015bd6d213f90fb1a1ebde4d9e2ab2defaf80d791a1f70af2ca7ea1598d43e9eef1cc982f468cf15d223c9d00000000000000000000000000000000046c62bec4c6876a67f5fe68107d677db8fa4d59ac0cb7afe6e706864c6e94744bedac6b34a68e8ebf89c231307b86d3000000000000000000000000000000001839f3b8a6dd8fe8028247670fe5b491bb43ea8fda53116dca87f97da96573a5e701a703fb5fa7bca457ef88a827e061", "Name": "matter_fp2_to_g2_70", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000011fd2ccf6883b78fe19cfe7beded503cdbe1cd5dc9ee452aa6b329d2237c2529df6774334b132cfeaa616f20335f88680000000000000000000000000000000009eacceef036ec500e7676f54af703016fac93d69ed19c8943b64ffed2db498b19cd255a0a3437b568eade0f497c7b17", "Expected": "0000000000000000000000000000000009d8725eb8757828a94969ebf40545a62835686897d4504a66484a3078b2f15e39fe918d8dc01bc7560dcb005a7a0dbb000000000000000000000000000000000954a6cc9b2dedca1cf280f72fd0625184b8f83b78ee1ffcaf0f9178ce97900d759e4a74b914c3ddc32f84c3f4c3a8d60000000000000000000000000000000014121b83d2a06390ce7359e570e1593d5ff097cb0e44c38bc74171fbd8a8da0dfffcc2bcb95fb2d80a55933f696a86cb0000000000000000000000000000000016f71d24256de70618a02b0f016c6f31a21d2cc42855886ba30176584a028c2e12367be19b834bf41356cdab21223314", "Name": "matter_fp2_to_g2_71", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004a851380536054f6b69ef7581b57dfd753d1e6201069bd1218ae5766aada087b4b08f65d43b3ce0215640e8d34633310000000000000000000000000000000013579671b64f2d9a2c3ac2737cf95c2148acce3dcecb3db6d019730010c50d1c0504ba4ed42d93771ba296b0b07487d7", "Expected": "000000000000000000000000000000000cd47f0982904ccaf4f3cdaa37091a08e67a5f04af09033b864631300bb6c2aacbad105eca6ddf68a643976fb555d3d80000000000000000000000000000000012332ddb0e91f0ef9e085f21634c6d69576e60d3d24732a0c91a560906791f60f79d09ac0ebf448bd39f047b1dd428450000000000000000000000000000000000a756a869b3cbc5624f0e08019170beda35fd2642a79108b284a503942f8267b75868636302e5a12b4f1505331b15f9000000000000000000000000000000000f60724f6c8200edff41f3299ca003e9ea03b97b01a3e8c63763bdf67b9f7677331a7144915312458c40d041be97b3c8", "Name": "matter_fp2_to_g2_72", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000021dc1dedded9b0dd90afa9ab7fa8f9c33930fe4ae68185ea4cce9ed97ce4cc9ff93f96377b11f8d42b02e759a10b06200000000000000000000000000000000034c963fda3bb80043d6d7887661ad59b3c31c88c958b451a8e11684770c132205db6655ad7cbd604ecc3225b0c128b0", "Expected": "00000000000000000000000000000000095cd509e53f10b1ee18b2120e2d18f0905a202a992a9c62480beb6588275fc8b5b151e6abf17a12b6d9cd03a8b37a59000000000000000000000000000000001723bf1a3d79935eb4b39f7feaa1e05cd8f3e7a32e2c406625053d8d8fde33eefec231ee00adb00b0acac16a83dc77fb0000000000000000000000000000000004af528e886dad3f9fa7232605936bc22a6a22622828367791920ec9d31cdb2f290e37f5fc79efaeaf96c86b3f6e39220000000000000000000000000000000015bada14a84fdb09b77397cd2e27836f9f88854924af0cafc6f9125d32be848c8325a3eee1a26de8be8eb80b601f1ad5", "Name": "matter_fp2_to_g2_73", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003e8d1be04f8dbe5c7e1c7553cde8355ae16d26c819dea92fb543cbd9fe9e726359e1e4be0483a7720343f34c6a3fb9200000000000000000000000000000000062bc5fdae812802bdea09e4130c3d9bf80c7518138b116a4b6a302c155b97226a6ccc8a3ace18744e7adece08781f72", "Expected": "000000000000000000000000000000000d8f14042f36bb377655b63dbc37c50e0eb5775d4e4399972a6758cdfa9751cb4b733745ed1a47fe5f2cc434efc5af81000000000000000000000000000000001384016829d028f823e6d062898c042a461bca13ae4627c983d9b5c9e8b4ffff7eb25daa1c52b39e309b9c1e7e4f2e920000000000000000000000000000000004f7904d491a0c2018b1361a9cfec4fc829e607402859fd9b9ded60adcee51e9b522d302f9064130a4eed1327f49bb4f000000000000000000000000000000000ef4fe949fca569b31fc57ae7d0166ea53318c5712311076e052c2967144116f5490fdf56f26adf64aa01beb4f6cd214", "Name": "matter_fp2_to_g2_74", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000014b922157b19ed9debd9ae95cd9435f7980b8d4ea33fd29f99d5e7fb1a96f6d99ae13f7f86239c4bc286c3927d3522a000000000000000000000000000000000f6d4badf78d9115d93783a59ec9576fcfd87a2c29e1c506b6f7e313e71723811a36d64b37650fb6f7b460105a7e13f1", "Expected": "000000000000000000000000000000000f20b3a6505784681331208b573d3a241706692db71b5daf4e9c80adb1fa9bb87023d7ba7f9c65158653c735dee9dfdd000000000000000000000000000000000f7f357407ca6cc5c5fae4b84509d71b2f4de9af226cb4038b4820c0541d4999b7396608efd2f322a00a768129f9800400000000000000000000000000000000138dcc1b9d978adb5eee6356980cec5d18cfbfbf18cf6fd14f4119a563f473f5027af06342e84ea858223ed63d1a16af00000000000000000000000000000000012b63f0d2e8ea361d55aa617a99e066b5feef3af1930b83d2a48b527e0ef304ceadf7cba1415db80c54fdcbbcf66d14", "Name": "matter_fp2_to_g2_75", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000005a54ee5e3dc05c38ade7a42c71baf5a1467938f97c0cdf0742441cd339f22542b1ca6cd215d385b3fd6ba74ec996a4d00000000000000000000000000000000051c6f0ce621e8e27e5017628690fb68f0fea27d67726a0a77b0caf9f524936e123ff096168ff2079b9990c07fa80354", "Expected": "0000000000000000000000000000000015ff2aa94f802d8f9c60ddcb43aee598239cf3ab7f90f8289a487b673f6065f8d9bc92bd4cd28df4a7b0d3bb78fad243000000000000000000000000000000000884b5d4ca3c8abea737cfca05878528890b6cee9bbac0bf027df5d4e0add431829caddf4c1e001818581ce08686eeed0000000000000000000000000000000019b91a7738fde9760240b335457955e963030848e85717858f22dc33ba5a4721156cfdd7341aa86d10d268e2fc9a1d26000000000000000000000000000000000af85e60161795906f3cf705f5e8cb8c15083a90836eac78445c6bc27ffbfc8c2df3009b436989b46b271dd8d1dbc282", "Name": "matter_fp2_to_g2_76", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000094e958d9b7dac39fa4f0143a333b2ccee09046cd23e6a1c0712470a3c2e61d2f8b85aeca37350f71d7ec75aea2b3b6b00000000000000000000000000000000080743cdb5e359e8b8ad3485d53ea286669ad66d841945296edf80dde77b20a158e2c1529dfc33a1fbecf177d75a0c69", "Expected": "0000000000000000000000000000000001bd1fe6a6c373cfdc2bfd488b0c942492b77d55b2560824edef3a91c711ee336bc1366690be40949d04edd39ad48a7500000000000000000000000000000000161476946a5687113c74a34284f49b0658e323fae57aba88b039eae584d6ef28adca669fb083a2fe8f0ef664eb5b957d0000000000000000000000000000000007aead870ae09a04cf9c9fa49d0888f7010782cdc5a0ade4c1340ff15d99cb39b7412d66d4147b95601fcf5a39c39bca00000000000000000000000000000000095cce83dbfec12973e27627bfb2d93fa9a027a2c2af4259a0879d6bda055d74559fc93fb3b4f6b0088f702af29a7643", "Name": "matter_fp2_to_g2_77", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000dec04526dbf7666d2c29db5de1ef0b3da85380a171d871a57ae3df364d2754fceabf9d4d2a3da1ecd94e377abc78430000000000000000000000000000000000d19875fe988ffbd0cf1e9bfefc7019579962ffa3a585ee232615e4a5fce0a07bce0537b203ea00010a90ec05d5b8de7", "Expected": "00000000000000000000000000000000133cdf684c3ff1cdaf07ff787b57a66c215eef06acc2aec4d726a086480e7b2a5dead2cb357d99e298df32d4c6f5029b0000000000000000000000000000000019cd65b830fb17880f40e104ed63a7d49b0fbad8eead7502f18f1b9f85f3f6ba6c275b8a242effc61a7a5d770a4fdaa700000000000000000000000000000000039aeacd163862e476b17a22c76042d7896a04f158489ae71afdd35d27106a3ec276baf5c08e3eed4b3f0a79c3c458d200000000000000000000000000000000125a9bd770c1fea2155a581211bd71d55eb1966645cc892a05d32cf1e4e5b23278ea2fb1336bba7f2c887debe4a93b52", "Name": "matter_fp2_to_g2_78", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000016dd03f0df71b183e42cc29c665f18d57637b65f05df85aed9a0f7b8aa37f7913f6606c10f24a7a8c570f485905583a00000000000000000000000000000000161e62d8be678a114fd4a99a6caeb9481f5eaef145571152fe8a6ed77a34c06a1b6ff66044102d19a94abcaaeb254e73", "Expected": "0000000000000000000000000000000007843268081f61ad2b3f6653336a99086381bb4da4c23b7d59b9c7827f2d4c196d136508c8a1f3d2f939e8c9799b95e10000000000000000000000000000000000e2c57ad95f762115d8230320810a4ea9978e26ca17decd6af4c112789608967a92fafe3fb3e79539d75d1c0bae97740000000000000000000000000000000010951c9839db9dd6ca5ef95bd1b1b9cf60bfd97cf88129fca23b24f19c9d5c71486dffb762e92f23d2a9e9d462556f620000000000000000000000000000000013d35c17b3763fc5db46ac8c44aef996f3f876c49f5278b7c97e844f23ac49f2d50b3af080322d30ead873af7b4257e1", "Name": "matter_fp2_to_g2_79", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000036efffcb0c6f42109bf9b8b7421e32fa3f855373345341e6000eccaca135ef3b2e1c0151bddbd46ae92185acb847d74000000000000000000000000000000000edbd7a40f3e688eaff5e29800159b8d799df07e81f65d59011e84329b4689a28a15ce11537fb560df705be26bf14b1e", "Expected": "0000000000000000000000000000000001aa1919a50b5bad62b839d672d5a11ad345fcc61f75eccc42990e113deb8a486423d1b27e7c81536d8a5799986b9408000000000000000000000000000000001879295d2f7bb3923ec61c063ee4f96d7d7cf7786259e2f4cbc3ccffe7e114af264b3527a5e06dcfad50ec1e2a9c1ae0000000000000000000000000000000001042632662e406c95f3fd44a6d956e526907147e7e6d4219c1c4b28a31e479974d00d4ad6e683f6a834d3d4a20830f4b000000000000000000000000000000000a29ea98ec25e7827bcb349ccdb2a57926809f3cce44d5ff6cd636460278c8103b0db78fa580e9edd4ecd0bdb21018ff", "Name": "matter_fp2_to_g2_80", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000974c7d17cbf91947ad435b30ad2b639671a43d67da6a4edc7f8bdc11fe817d4d42f687dd642a2be89c81bc36e8df592000000000000000000000000000000000efeeb85860877abdabae35672a77ca9d2cf0ed18ed209fb905b591a841c900ed06d2c32c56bed5f7efd469d369b05b8", "Expected": "000000000000000000000000000000000c67498c6751cc27d871b8711c4739398c501a5bfb688d7e1a73dc7db5c47c3e28b633078cb83745bf5b0d5d2dde3ce2000000000000000000000000000000000c205c03305422bd44082715b90e0a0ec178003d6f5e14a0d13bb0f2c38f2270816b884b4870b75db44ab080f88a35e2000000000000000000000000000000000257f378935772d326710ec6efeb22f8c9b6b549c8a4c0205b75740047d750d73da4e71aaa8ff33b9bd8ab7621b08e62000000000000000000000000000000000c386a15f09c849be9f449a59e1332a1e7f16a9394c8de198c01399a05b0f963921c4c57d49916407ae0d202af8da32a", "Name": "matter_fp2_to_g2_81", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015333364f4d0d173ef35e447fc189b9d65ef71b9fc4ecba25fb6c8c1bfe8467f26bb9c55ef10bb34125d714b94aa1df1000000000000000000000000000000000cbba9d8ac191032f03c0746f13108962130c9e2c01d47f01174a4c4d3daa7631268f7dcc08dfda317bd249fb6e73e8a", "Expected": "000000000000000000000000000000000864da537fd94a9ff1bdae733f01e145dc97a894733d0811cd67c2648ba61d0b187241f9ec69d8c011f514894a05a608000000000000000000000000000000000a53ea4ff9c0ff71541ee21127a33daff2b39e74301946a86e51dc7834717e7d8784cf92fa5845bc0613b6b869003f58000000000000000000000000000000000582f5a1fcef3067dfcdfabc6af33871114538abcb02fcad761cb496020c7b423fc52f0075916f160fbe03574df97ea4000000000000000000000000000000001244ede8ba0dc09aacdc5d9f886e59bf963a25885dbbe2c3d1f611bfae82debc556ec4c94f0606492c7b8c7bf976ec34", "Name": "matter_fp2_to_g2_82", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000781e980c167c982c2fc8d0baa3907bc5499eafca675ae20a10b25063c9088fd06f6769df505e5900bcaf99e266c052c00000000000000000000000000000000183c12798438ea92db75d5bf76cf29d320fab3653e4131989205f2817aebcb1b13f161864c084fd13a11459d7d5ccd92", "Expected": "0000000000000000000000000000000016c334aec0e19934665596f0ae37eb398f1d6f0d0c9f08189f1ccc219230395124a9da03858bdba13ec5366da54228af000000000000000000000000000000000b156ea34ae7b5c252dd90997f1c693773a463c26935a69bcc0599b95bde9e6aa31649c48b6ee4ec1f0a56b19273a5170000000000000000000000000000000014b2d69e02418844effcbc0d564b2721deae2872cd1f27f61d544fc0ebd5cadc77c6777ec944ef0500db181a5443618e0000000000000000000000000000000004f0d48a25c1eb81233f385af17ab6abf554e1285b669eeb5e884c64d5815fd5fa1350bb361997cf2e317f7c5e9cd19a", "Name": "matter_fp2_to_g2_83", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000879133a3c0e50c90abf1a6ac75bbeca1121c865ef39e9224ddb160eb725e0850a34aaf9014e42174966773e40e4c99a0000000000000000000000000000000004c66f8f5bd462cb27e9f5e1d93e322bd97582b9e81d07b2877103420262e4cfe6d0e3bc07f9f160701fd754793eae33", "Expected": "0000000000000000000000000000000003c0d6b721cee4e5fdc6a02095674a58075f81b1d28163f81d5b258c82634297009e6bfc8193969e23e196cf7a99ad6c0000000000000000000000000000000013229818411c8e55e50a63df6983150c1d5ead828711131d9c81841850ed76e4712954d3225eb6d7fffd3cb9924f7497000000000000000000000000000000000f42d6e4d5a28dbfda87c806cb0b1bbabb745e63e655c3c6be50411da4dcdc745ae50f71d56e88db8454d40375e325810000000000000000000000000000000000f663ab791b48f76d358e66e8cd8fa40848dff2bbec758ce1d7b3fe02d1f6b3f123cef644d4fd86d6a77b8155feae58", "Name": "matter_fp2_to_g2_84", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000a7e855324ef471b8fefb31967cec84d57953407ba555b672fa59364b303030cb02b6c77933cc63fcd1b8c107b263554000000000000000000000000000000000b50c3f7cebdcf538820113acdb017fcd5d41a4fd679af8dfde7b0c330e3576ca79d09eedc724a93a3f5c90d141e7524", "Expected": "00000000000000000000000000000000197865f685e78a8842fa79ddc728d507e9f31b31666d1952a46f6422c97c83fba3087be70e3bb588260556014523f74000000000000000000000000000000000131f5d85ad3beaabd129d5a5675d90ea911ebd02cddb5ddc7a8be28c33061430d684d123d5c516785d21ebf756c99195000000000000000000000000000000000c7a14948f3aa29f845e5ca9877db9f0477af376eaeb45324c21e6f99e738aeec96b89af4df942bffbabbf50172d8e5b000000000000000000000000000000000ed4aea3cb585b0d36972f9ad6943172ca7375b44d1d6e80e0bf97a0b25d74deca4d35ce865c8747f1c7a2771a37c667", "Name": "matter_fp2_to_g2_85", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001706830efca18d3e75ea0f1ca8af23a816017ceeb045694cdbad6d3d9aa5a9ddb123f5097a226a217166de3a82038393000000000000000000000000000000000402132ac383a2fcb17fe73398273ef0c2f2d0d6edabc78f31080d3ecbf7c249ffeef28bb8b37a6ef2a7d726c070dc41", "Expected": "000000000000000000000000000000000a795c2affaaecab6cd2cfd6c8fab6e35cdd646e9cfa7b5e02400ef4abf839a69924ea80152eca7810a5041d1bf58ee800000000000000000000000000000000121426bb945d6f6b385c98a5247b7dadaebd3375dd8b2bff7aa77fddfbe603de89e77baf0e8f36a924c707c53d29a1450000000000000000000000000000000007a6fcb486634186f001c8b99874f0a07a37f1ff4b30599d2f570f1bb4ff290b816547f6ce8b3c1ed33e57630a1d57ab000000000000000000000000000000000fa65924a8f17414eb7dcc54f2a4134568484e91533dd21fd33cbcc37a920f2804516a64f1986e9d887ca189179d07c8", "Name": "matter_fp2_to_g2_86", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024beda2b950efcee233435f0c748e33aa928f54ff29d3db217d7e32b1aac5f4ed11705da4fb8fd38481382486e4aef7000000000000000000000000000000000c85283ad6e35a72d07b74775df1a4660113d50b51426451f454a575adf9cbf9d7be3f521649f6c367c4f4c74b67ff6b", "Expected": "00000000000000000000000000000000049d9ac43e31faa3d02f8255d207b82e4b27e8a9a61ba45fc4f9ad8048e5f89b58d25d98253aabe29334e0dc09d1cd6b000000000000000000000000000000001544f90a0baea38b48d89bcb337cf5a80faaa79334733b7e6126f55358a7e498aeb61419065b9434cab9d10fe8e7fd9f00000000000000000000000000000000139bdd668462a1b5d3ef1299d47aa91ed141ccbeba5b08a8ee31b023aa78c16514a97ba08abf5c8bb1abbd85b3fe87350000000000000000000000000000000005c7dbb8a22403a96aee634cfc67ee6f1069cd61a1e1831e8faa9d7e1aa5e4f7623f51f2e5b739f7fcf3b4ba77c82ff1", "Name": "matter_fp2_to_g2_87", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000cb18f477abe58af92116101c3f52ad4f6074ed92a08c3adcc6660b555df9cff09dd8b34e032ed81e868a62bda50378d0000000000000000000000000000000013c4ab1558dc250c3b5d0f0fae3db62b8df969bb41e9ecc24c10e1e51cb399f1368bed7375a9b9ad9c7653c868eecfe3", "Expected": "000000000000000000000000000000000b8b8bf2b25c2386e5f3be4bdb387d8005cf055e68ab9a5606f17dbedc4fbd7a11314fd646d08bbd6e394485d4f56f5f00000000000000000000000000000000173a45d766682f82ec2d69aed1d80ede2477c276ddaa8fb97f5f4d0515b2c2e370c615cd81c1e361f95db855c9b1b6e200000000000000000000000000000000115868a9187a0465a9309054e865ef224ec3c88a5eafbcc25f9a912ee3b19084757a90b72a4038ba71b10f59fe2f93100000000000000000000000000000000006c5476eb8aa1a471d289af52c7d1df55f6bb1ad53d7eaba6bdc2a97fcb24ec480f9d8e12079d366f2213194c861f016", "Name": "matter_fp2_to_g2_88", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000188f650fdc51b970d16c0637ad5e97aade93c7f1398751439484ec6cc56613814908e51cfa7f68da9d980bb9dac47a400000000000000000000000000000000081834f86f1310135a2cb03265f37d9b7c9459bb149bc54b5a61319a7cde36c6a2a0fb49f8f1fb9d80f07b84f799119f", "Expected": "0000000000000000000000000000000016e8fea4d09831146fc35bcad28e441f2c02e4d17838e04dc7cf909b2133297a13f07ee927722f3d78e36721d6848e3400000000000000000000000000000000114dee8b3a47269e9ada05ee015a874d1cbdfff4acdf5310642f829efd08f78dd6110e1c7a514e7d76aff52046f4ed140000000000000000000000000000000017b9d23f7a865a3ca61197d841fd9195805a9e883d79dc7d36e82f504e6689ade0e84c70a5c5c516fac3e3c643942e160000000000000000000000000000000001ab82b2a0986dec3211507b8adca351829b0a13f25e281f98f54d9e0e32280ea4c638dcb74280eb747a0d9af43b6b74", "Name": "matter_fp2_to_g2_89", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006f66eb49f95f51ec90df86254580f0ae57862bdd8b5f2759ace63c5f14f8c5a762207f744bb82a8962f8c4fa410dfdb0000000000000000000000000000000004e02a80628c30ce336eab890fa37a227f77357a60be72cb87cc2b7442d2163d395fdc59350624ca1322bfe8619a2efd", "Expected": "0000000000000000000000000000000006bc2ae646a603a1f4524b445cdeb99914e4ed19cd0676d511764b828bfe126e81cad2cb566655f04de1a302c14d70bc00000000000000000000000000000000023bd509aabfa41385e90cd4b1cbbfa45d066c4defab56993aaa386dc5b7707b1a3a7d444b8bd295a30d0b8f4bdc572e0000000000000000000000000000000006f82e60e18cc958375cce6f465db461ff46ed9d15cfcc01a3aff455d54c77ebba5a654c2ec788b6ed8ac53c39defdd3000000000000000000000000000000000896fbe6492c4c297f8b6d60295a7f2565734d69eea67b2675211a203fec043f0d181b1348bea425a068b7bc12676ed0", "Name": "matter_fp2_to_g2_90", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001451bcd19495cea3a19393b77760f688fbf17b107dc131c88cbb503eee2a804e2978d6e8a4720d144083d28be73371d70000000000000000000000000000000017db715e8680a0e82e18b513f2c9c7ea136cefe8add71aac6baba146e3e33a498d025c7e0808ced306c915eb02900c61", "Expected": "0000000000000000000000000000000008604a06a198c3e11458de920176842221667d024f9c155892485a37ff56252be1dc629a6fd580fa41f5e598a23f3651000000000000000000000000000000000e008eed25eafeaa67f27e89e1f81b469724a4b00f08dc4ae672aa1587b19dc615330e3fce0fbd98d7526bc2c4afe69e0000000000000000000000000000000015bc1e4ea5ae2a7fde6d5e5c3e58f6ff5df5bcb125ab402f10edd09087bde39fa27dfcdce7d04fd18ce399729e155fae0000000000000000000000000000000006684e9be8bf9fa4badda842a1d8840f0820d9a797e482c64f4004a18cd63986f19abfc93f6bf068d38eb1e491cabbe6", "Name": "matter_fp2_to_g2_91", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013a6e129d4dd4aa93cff5489ee879763e2a2231939e609d2d72f07e630b37d09f3057a36fd5cdfc9c81675c996f8ba0f000000000000000000000000000000000e8d7ad082e8f9a718fc2ea712853ed9ab4e8b1a8ca9988f77c70fc759f1fe2d4bd73696e539f130be13b2862efbdf77", "Expected": "000000000000000000000000000000000f15c3d0b40735babb2e38a2471773faa16b2fa307c3a573ef4cfa5a5559574b2d26cf88b19dee204b77f6e11a1b927c000000000000000000000000000000000d224445f3d31d381bb29c4fdc8130174f5bcb957f451c92f4a652cc3d2b5df985017133a944849b5228a88f99bec771000000000000000000000000000000001338b48bc1fa229f251bcd4828654baec9d149f090b19596ad3b444eacc7bc583f97d9cfc40d5611fdcf89cc9a88e33b000000000000000000000000000000000c30dd2aa51f6577d57175edb3ccc1b324717bc195eb0073c1dff4e5b0d77cf5e41ec233527b3936994e86303f91b172", "Name": "matter_fp2_to_g2_92", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003379bc10acda5ed1014e2bba1e30cf83b72fe69259eb35476a031b8a898e0183bc32ee853a85fb3d738424208fc880900000000000000000000000000000000175a2e5a44ed62744fbbab9581ea7283470bff12436dfc414ad80b4070f895de3786022cbaed55bdbbc4f68db7460548", "Expected": "000000000000000000000000000000001735e1f2fe905839fd6534c95b95322f8cc86a4c482f1ad7691b9b9bb8f55015b4faaa1f243786aa33b5874817cd09c80000000000000000000000000000000013f1a27931ac513145f2601e009cf637ba4bdb18a7604f89534fa3ec8488f5b6eab9963c5d753fdd34cbe7d2f8eb8a5900000000000000000000000000000000092d8f800e7a4bf6f9a25ddd7f64fc403db53b1695ae59c15f229458f347a8e7c2ebc415af2d3849282b670c5cf6f8600000000000000000000000000000000019d22d694e559c55db63521e7b60a1a2342c3cce868d70951e5ed32ec0f5efaeab0e78b21359110f6e769776b745938a", "Name": "matter_fp2_to_g2_93", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b384a9db472c38a5d246da56059b7630f002b5f4663abce7c5f6e896222a1ca1ac02883a1ec95a4ef09bcfab7d0652a000000000000000000000000000000000de09ef45aafa56936e446e18ef9ff97ca8b81c295d35cf7b72416ebd80586d0fc479d86c23295ac54a23489af045ebc", "Expected": "000000000000000000000000000000000d7dc499e5213120b3ccc173c83d3c15dde9e13ef57238cad84889243b35c8e69eea2ac7ef7560051dcd7402b46b733e00000000000000000000000000000000063ad31c17eb17d39cb4b33e45a0b0e951becc11b685b10cb45cff268b6dca40b780f7e1532be91903372c413a11b5be00000000000000000000000000000000140da959456cbd34e041409350d6106ff65ce6dd2ac3149f04959b16eb83dd0456ca11e5990daf4a1e5c23d3f30a6c4b00000000000000000000000000000000195d07ab127d49baf89fcf5eea1f5e4cffea1a577a5c864c0e637fbdfa10182adc1d5d4ebb871949300193e45ae0fbdd", "Name": "matter_fp2_to_g2_94", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014df33e7d3ef2c339b958fee667097ccf146556261f7db4b0b0a3c29897b73a0ca249866cff1461488012bc16df43b0d00000000000000000000000000000000099dda253a43b8cfac580306267d9dfeb2c129ac1818fee43c6df5e582f5fa726ba73e1a2ef6a9e011a387c393529678", "Expected": "0000000000000000000000000000000013ec1ef25b303fe2f10a0bbe9bd77a4b2a055e176c2870c99e63b4baf2b313a835459263351dfbc25c22ea32946d8956000000000000000000000000000000000cb1c3292a2e0c9b1c1ff43cbf7595f39c00fd413b54782681fe75a6f5f231d13912f8d598dd8aaae8159de083dccd8e0000000000000000000000000000000005385f2d4bb6d94d67b2a3bacd3aae31da282707672252c0ab1a12fc85d8e9b9eb75454eb145937542099b860f9d6dce000000000000000000000000000000000e59506f7733a38a7e1da4ea5958de4755b52a9307ba2e5813131b33b86f0e401f97594d9674ff1667068a1ec3c9b145", "Name": "matter_fp2_to_g2_95", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000011c89c8d7e83155a308b2e517a23f05a4a55353332292b44b0a891b6f730fd126bd0b97eb87f0fbdb6c82779791d022f000000000000000000000000000000000da6f02450955bf26e236ec63aaf80a018ac34fd8784bb24a22a1fc5e8bd686244a923009a10cb38b1422534d0997afd", "Expected": "000000000000000000000000000000000f4392a41fb3e58dea97b97fd22e2fe6436c3f9bbcd944585a76a5f1a8f98ea4ee21639208d765b6c3a7d08f8cd3f3f00000000000000000000000000000000002c3d62794996dbb881b665eece98926f41a42c21539125fda6070d9f69e29e0557c886b42e4bcd97b14134d6e9d1d710000000000000000000000000000000004b93f315822aa1be8250c2e736727d390ae3a862c4c7dda452817f70f01c73e6f344df1b0f05f03bd574edecc70902e000000000000000000000000000000000731403981fd6243d00c23d0a42a759016f7907548847743f18421f51b1e72cea92f0c5580328babd4ae3e15bc9c56de", "Name": "matter_fp2_to_g2_96", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015bb227b5c9ccfb8390edcd158b04a69a88a3b99a10ae90e548182751a16448df25493061afde2c9790a0e75e6f409a20000000000000000000000000000000001d7b609155bf3939192eee9642032e6fb10f57d53916674c60211a37b4a7662759899a9569e2dc730febd23f747a7a3", "Expected": "000000000000000000000000000000000b35c6294b70336217eb9334ff1f1bde9d892d109e947de7f4f5681b3830ed00ad1b89ccd7cbad88ce1586449140697d00000000000000000000000000000000032691e5f4597c06496e9e37907041ddcadd18ca8ce64a8b400b1e2e8d63acce5533231edb66b69807fa2dc026c1d2be000000000000000000000000000000000773ccd132cb215cd98aa17d7fc432e0577b08d8faaa35199000d46fdeeb954e8652566384fa0cc5bcd1724942f7075b00000000000000000000000000000000112e951db3694944fc82fb980547cd8b7f2e5ec6fd2051b6aff2573797bd6a28437848ea0627054af1960ad1de0981e5", "Name": "matter_fp2_to_g2_97", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000017599d71686e817cf58b78dd7586d5b359999b32b0dec2d67e33fb6388411418ecfaa2670a2cc9dce3dadaed0fb3364000000000000000000000000000000001773995b540be9ffbfd276a92c0494e4eae296d094f9f7eca975cf4f73ae05e92bd64ea71ac47bba534044f4072a6591", "Expected": "0000000000000000000000000000000018f2eace212eacabd44ff01d886543410ef72b4d27f8d25cb080dbe4b1d4b2b4e57e4dd40723d15789d9b5104b088d9b00000000000000000000000000000000098e9e9b302876ce85ba486609fd028f357314149ce8b530778e6de586ab057fe59648d8c8ae80fe619c4c605b90784a0000000000000000000000000000000016d20a8ca43d37518c8a0f47566ba61a7aade9ea2cdd4a0907ff0ed862c6b7c64815d50397eebec262a05c6010cfaa790000000000000000000000000000000005a70c2fce25acdc4a95fc2bdedb007d71f24b0b5714fa14910ef590215d25442e91a66b6bfea5f7777f0c6d202eff32", "Name": "matter_fp2_to_g2_98", - "Gas": 110000, + "Gas": 75000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f470603a402bc134db1b389fd187460f9eb2dd001a2e99f730af386508c62f0e911d831a2562da84bce11d39f2ff13f000000000000000000000000000000000d8c45f4ab20642d0cba9764126e0818b7d731a6ba29ed234d9d6309a5e8ddfbd85193f1fa8b7cfeed3d31b23b904ee9", "Expected": "0000000000000000000000000000000012e74d5a0c005a86ca148e9eff8e34a00bfa8b6e6aadf633d65cd09bb29917e0ceb0d5c9d9650c162d7fe4aa274526850000000000000000000000000000000005f09101a2088712619f9c096403b66855a12f9016c55aef6047372fba933f02d9d59db1a86df7be57978021e245782100000000000000000000000000000000136975b37fe400d1d217a2b496c1552b39be4e9e71dd7ad482f5f0836d271d02959fdb698dda3d0530587fb86e0db1dd0000000000000000000000000000000000bad0aabd9309e92e2dd752f4dd73be07c0de2c5ddd57916b9ffa065d7440d03d44e7c042075cda694414a9fb639bb7", "Name": "matter_fp2_to_g2_99", - "Gas": 110000, + "Gas": 75000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000007355d25caf6e7f2f0cb2812ca0e513bd026ed09dda65b177500fa31714e09ea0ded3a078b526bed3307f804d4b93b040000000000000000000000000000000002829ce3c021339ccb5caf3e187f6370e1e2a311dec9b75363117063ab2015603ff52c3d3b98f19c2f65575e99e8b78c", + "Name": "bls_g2map_", + "Expected": "0000000000000000000000000000000000e7f4568a82b4b7dc1f14c6aaa055edf51502319c723c4dc2688c7fe5944c213f510328082396515734b6612c4e7bb700000000000000000000000000000000126b855e9e69b1f691f816e48ac6977664d24d99f8724868a184186469ddfd4617367e94527d4b74fc86413483afb35b000000000000000000000000000000000caead0fd7b6176c01436833c79d305c78be307da5f6af6c133c47311def6ff1e0babf57a0fb5539fce7ee12407b0a42000000000000000000000000000000001498aadcf7ae2b345243e281ae076df6de84455d766ab6fcdaad71fab60abb2e8b980a440043cd305db09d283c895e3d", + "Gas": 75000, + "NoBenchmark": false + }, + { + "Input": "00000000000000000000000000000000138879a9559e24cecee8697b8b4ad32cced053138ab913b99872772dc753a2967ed50aabc907937aefb2439ba06cc50c000000000000000000000000000000000a1ae7999ea9bab1dcc9ef8887a6cb6e8f1e22566015428d220b7eec90ffa70ad1f624018a9ad11e78d588bd3617f9f2", + "Name": "bls_g2map_616263", + "Expected": "00000000000000000000000000000000108ed59fd9fae381abfd1d6bce2fd2fa220990f0f837fa30e0f27914ed6e1454db0d1ee957b219f61da6ff8be0d6441f000000000000000000000000000000000296238ea82c6d4adb3c838ee3cb2346049c90b96d602d7bb1b469b905c9228be25c627bffee872def773d5b2a2eb57d00000000000000000000000000000000033f90f6057aadacae7963b0a0b379dd46750c1c94a6357c99b65f63b79e321ff50fe3053330911c56b6ceea08fee65600000000000000000000000000000000153606c417e59fb331b7ae6bce4fbf7c5190c33ce9402b5ebe2b70e44fca614f3f1382a3625ed5493843d0b0a652fc3f", + "Gas": 75000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000018c16fe362b7dbdfa102e42bdfd3e2f4e6191d479437a59db4eb716986bf08ee1f42634db66bde97d6c16bbfd342b3b8000000000000000000000000000000000e37812ce1b146d998d5f92bdd5ada2a31bfd63dfe18311aa91637b5f279dd045763166aa1615e46a50d8d8f475f184e", + "Name": "bls_g2map_6162636465663031", + "Expected": "00000000000000000000000000000000038af300ef34c7759a6caaa4e69363cafeed218a1f207e93b2c70d91a1263d375d6730bd6b6509dcac3ba5b567e85bf3000000000000000000000000000000000da75be60fb6aa0e9e3143e40c42796edf15685cafe0279afd2a67c3dff1c82341f17effd402e4f1af240ea90f4b659b0000000000000000000000000000000019b148cbdf163cf0894f29660d2e7bfb2b68e37d54cc83fd4e6e62c020eaa48709302ef8e746736c0e19342cc1ce3df4000000000000000000000000000000000492f4fed741b073e5a82580f7c663f9b79e036b70ab3e51162359cec4e77c78086fe879b65ca7a47d34374c8315ac5e", + "Gas": 75000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000008d4a0997b9d52fecf99427abb721f0fa779479963315fe21c6445250de7183e3f63bfdf86570da8929489e421d4ee950000000000000000000000000000000016cb4ccad91ec95aab070f22043916cd6a59c4ca94097f7f510043d48515526dc8eaaea27e586f09151ae613688d5a89", + "Name": "bls_g2map_713132385f717171", + "Expected": "000000000000000000000000000000000c5ae723be00e6c3f0efe184fdc0702b64588fe77dda152ab13099a3bacd3876767fa7bbad6d6fd90b3642e902b208f90000000000000000000000000000000012c8c05c1d5fc7bfa847f4d7d81e294e66b9a78bc9953990c358945e1f042eedafce608b67fdd3ab0cb2e6e263b9b1ad0000000000000000000000000000000004e77ddb3ede41b5ec4396b7421dd916efc68a358a0d7425bddd253547f2fb4830522358491827265dfc5bcc1928a5690000000000000000000000000000000011c624c56dbe154d759d021eec60fab3d8b852395a89de497e48504366feedd4662d023af447d66926a28076813dd646", + "Gas": 75000, + "NoBenchmark": false + }, + { + "Input": "0000000000000000000000000000000003f80ce4ff0ca2f576d797a3660e3f65b274285c054feccc3215c879e2c0589d376e83ede13f93c32f05da0f68fd6a1000000000000000000000000000000000006488a837c5413746d868d1efb7232724da10eca410b07d8b505b9363bdccf0a1fc0029bad07d65b15ccfe6dd25e20d", + "Name": "bls_g2map_613531325f616161", + "Expected": "000000000000000000000000000000000ea4e7c33d43e17cc516a72f76437c4bf81d8f4eac69ac355d3bf9b71b8138d55dc10fd458be115afa798b55dac34be1000000000000000000000000000000001565c2f625032d232f13121d3cfb476f45275c303a037faa255f9da62000c2c864ea881e2bcddd111edc4a3c0da3e88d00000000000000000000000000000000043b6f5fe4e52c839148dc66f2b3751e69a0f6ebb3d056d6465d50d4108543ecd956e10fa1640dfd9bc0030cc2558d28000000000000000000000000000000000f8991d2a1ad662e7b6f58ab787947f1fa607fce12dde171bc17903b012091b657e15333e11701edcf5b63ba2a561247", + "Gas": 75000, "NoBenchmark": false } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/blsPairing.json b/core/vm/testdata/precompiles/blsPairing.json index 138b13944ab..f41d375943d 100644 --- a/core/vm/testdata/precompiles/blsPairing.json +++ b/core/vm/testdata/precompiles/blsPairing.json @@ -3,700 +3,700 @@ "Input": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d2800000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e8490000000000000000000000000000000006e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb9090000000000000000000000000000000017d81038f7d60bee9110d9c0d6d1102fe2d998c957f28e31ec284cc04134df8e47e8f82ff3af2e60a6d9688a4563477c00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "bls_pairing_e(2*G1,3*G2)=e(6*G1,G2)", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d2800000000000000000000000000000000122915c824a0857e2ee414a3dccb23ae691ae54329781315a0c75df1c04d6d7a50a030fc866f09d516020ef82324afae0000000000000000000000000000000009380275bbc8e5dcea7dc4dd7e0550ff2ac480905396eda55062650f8d251c96eb480673937cc6d9d6a44aaa56ca66dc000000000000000000000000000000000b21da7955969e61010c7a1abc1a6f0136961d1e3b20b1a7326ac738fef5c721479dfd948b52fdf2455e44813ecfd8920000000000000000000000000000000008f239ba329b3967fe48d718a36cfe5f62a7e42e0bf1c1ed714150a166bfbd6bcf6b3b58b975b9edea56d53f23a0e8490000000000000000000000000000000010e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc0000000000000000000000000000000016ba437edcc6551e30c10512367494bfb6b01cc6681e8a4c3cd2501832ab5c4abc40b4578b85cbaffbf0bcd70d67c6e200000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_pairing_e(2*G1,3*G2)=e(5*G1,G2)", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a550000000000000000000000000000000004523f5a3915fc57ee889cdb057e3e76109112d125217546ccfe26810c99b130d1b27820595ad61c7527dc5bbb132a9000000000000000000000000000000000186a1da343cacf1815b9c8b6c807f536249dbfdb59d77bf4920ad2198a0d83ada21f7c39de6f06a5599f22571cab288d000000000000000000000000000000000ba1ec44f95121bd622932b84bbb4b3d279f69c494ee44db68e3165c86b627ba5e397ee197313fb5b775972798997332000000000000000000000000000000000783e7493e9fb106fa0d085e7c03eb816468d12c65d9b77643ed07c02583d491f4db5db44e565d50d8ccaa9ad8f7f8e80000000000000000000000000000000010a6a5fd90cd5f4fb6545814f5df065b001074bb3f29f649dd2612815df3a19a320f7754dd3d458e48e7fb1b4953978f000000000000000000000000000000000345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c00000000000000000000000000000000083d3baf25e42f2845d8fa594dda2e0f40a4d670dda40f30da0aff0d81c87ac3d687fe84eca72f34c7c755a045668cf100000000000000000000000000000000129c4945fe62538d2806fff056adac24f3bba8e17e42d82122affe6ad2123d68784348a79755f194fde3b3d448924032000000000000000000000000000000000528590e82f409ea8ce953f0c59d15080185dc6e3219b69fcaa3a2c8fc9d0b9e0bc1e75ec6c52638e6eaa4584005b5380000000000000000000000000000000018dc3e893f74729d27dd44f45a5a4f433dcd09a3b485e9d1c2bd0eb5e0e4c9024d928ddc426fdecae931e89885ee4db4000000000000000000000000000000000d6ee02e1fc7e52a8e1ef17e753065882c6fcc14da61da7ffe955fe84a9d2af9ba57562c69db3088652931bf124b0d5300000000000000000000000000000000051f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e000000000000000000000000000000000b6a63ac48b7d7666ccfcf1e7de0097c5e6e1aacd03507d23fb975d8daec42857b3a471bf3fc471425b63864e045f4df00000000000000000000000000000000131747485cce9a5c32837a964b8c0689ff70cb4702c6520f2220ab95192d73ae9508c5b998ffb0be40520926846ce3f100000000000000000000000000000000101e147f8bd7682b47b3a6cc0c552c26ce90b9ce0daef21f7f634b3360483afa14a11e6745e7de01a35c65b396a1a12700000000000000000000000000000000090ca61ed16c4c1e80acfef736eea2db0d7425d9110cb53e6c4a2aa3f8a59ee6c60bdce8df5825011066d44bef84d29600000000000000000000000000000000028207394adcbf30250ac21a8f1db6283580bc5e39159930552e5edb25e6215c66b6450296edc80dbc3a2acd125dab160000000000000000000000000000000019bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3000000000000000000000000000000000adb3250ba142db6a748a85e4e401fa0490dd10f27068d161bd47cb562cc189b3194ab53a998e48a48c65e071bb541170000000000000000000000000000000016cfabbe60d1e55723a0ff72cf802f2d1cf13ed131e17729adc88522a657f320a336078a9399c8e61a3bbde3d52fd3640000000000000000000000000000000009aa9a3c2a6d49d286aa593c6ff644f1786fa9ae471bdb3fe70b150a9ed7584eaa886ac057c30005c3642f65ad5581cc0000000000000000000000000000000001d417894c0cce924955a795b188b27951f8438a5485404b921a42fa79dea03c10e29d0390df2f34d7be13f360a7fada00000000000000000000000000000000189b0b3a04e6c613899d51231dbf0cba6a8a8f507ebed99d24fba7ebac6c97a8859ffde88e6d95c1a9d6b4f0a8f3c417000000000000000000000000000000000d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a414950835820000000000000000000000000000000009d0d1f706f1a85a98f3efaf5c35a41c9182afc129285cf2db3212f6ea0da586ca539bc66181f2ccb228485dd8aff0a70000000000000000000000000000000016cad7807d761f2c0c6ff11e786a9ed296442de8acc50f72a87139b9f1eb7c168e1c2f0b2a1ad7f9579e1e922d0eb309000000000000000000000000000000000d3577c713fcbc0648ca8fbdda0a0bf83c726a6205ee04d2d34cacff92b58725ca3c9766206e22d0791cb232fa8a9bc3000000000000000000000000000000000f5ea1957be1b9ca8956ba5f6b1c37ea72e2529f80d7a1c61df01afcc2df6f99ced81ac0052bd0e1e83f09d76ad8d33b000000000000000000000000000000000aabced4e2b9e4a473e72bf2b1cc0ce7ab13de533107df2205ed9e2bb50fa0217e6a13abcd12fce1bda1ccf84dac237a00000000000000000000000000000000073eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086000000000000000000000000000000001825bacd18f695351f843521ebeada20352c3c3965626f98bc4c68e6ff7c4eed38b48f328204bbb9cd461511d24ebfb3000000000000000000000000000000000029ea93c2f1eb48b195815571ea0148198ff1b19462618cab08d037646b592ecab5a66b4bc660ffd02d1b996ca377da000000000000000000000000000000000bb319a4550c981ee89e3c7e6dcc434283454847792807940f72fd2dbf3625b092e0a0c03e581fd9bd9cf74f95ccef15000000000000000000000000000000000abb072b8d9011e81c9f5b23ba86fdb6399c878aa4eadee45fb2486afe594dffc53be643598a23e5428894a36f5ac3ce0000000000000000000000000000000005d04aa0b644faae17d4c76a14aa680c69fdfc6b59fee3ef45641f566165fced60cbbda4ca096e132bb6f58ab4516686000000000000000000000000000000001098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a000000000000000000000000000000000ea923110b733b531006075f796cc9368f2477fe26020f465468efbb380ce1f8eebaf5c770f31d320f9bd378dc758436000000000000000000000000000000001065f2a2d29a997343765f239c99a018490eced40ac42fc93217dfe20d8b43ee2215f65166aff483b3dc042c5a43b196000000000000000000000000000000000766e4c66f4a442ff1f61a7a4d197d2b47dd226d0e7822a9b065108cfc643cd3f3d5ae59ed2ce4cde13fd9260bb5b7cc0000000000000000000000000000000012251cc6abbabeb7bbe1fdd63eaee10832a748fff24f7e3fdccaea87facb6e99f2e0407a38f27f90450a471b873104620000000000000000000000000000000011181e08c8fba91271adfee9d31681f8412ab7a3f754f7ba4709024c0ad2287e32dd455d71a296b4838072a8ab9d96f2000000000000000000000000000000001252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada0000000000000000000000000000000002a1bc189e36902d1a49b9965eca3cb818ab5c26dffca63ca9af032870f7bbc615ac65f21bed27bd77dd65f2e90f53580000000000000000000000000000000005a7445f55add1ed5c143424ceef3d594280e316c9441a8e68c3ad97377141d015bf878bdfcf0df9fbcd0529f4e8100800000000000000000000000000000000192b52ba08ed509fc84d5775a7182498fd1ff80941d673c53470c9c9f1192f9c0057d68a1dfee0c68fe5df3625cc43bf000000000000000000000000000000000d3fcaf2f727e0eb32c65da9b910dc681b948dda874d0db6f6ed3f063430fbf073385a9a14c2dd78568726124e2b3ea8000000000000000000000000000000001943ce22cdb2387bd5796950dc95d1ace4012ab9bb4afb46223760230c1709e075f1ae76d6b3f2e947ba6b16d458ccd1000000000000000000000000000000001271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4000000000000000000000000000000001407ffc2c1a2fe3b00d1f91e1f4febcda31004f7c301075c9031c55dd3dfa8104b156a6a3b7017fccd27f81c2af222ef000000000000000000000000000000000a29e38da2d42fd4712052800c7c8dd6e94fd9f506e946068aaac799d60b94c2d7515769ffdd32ea95d3910330ec47de000000000000000000000000000000000c60dae92451206390e30b5daa7151d63624dee496753c87dd54eadc92dc9602081fae02a1a53bac97e984a571923a5d00000000000000000000000000000000085f4fda4c72328895f20c683cb49603a37ff2c43d62f66602506dad5b8d1daebfbac7a7db3f50ccf4dfff277deb105c0000000000000000000000000000000005674d005457e0fe1f0fd978d63996c5f3d29f9149ee4eb04c464742dd329ccaef5e5f6b896d986ddfc9f1b2a3aec13100000000000000000000000000000000071bc66d6e2d244afc4a5ce4da1dce3d0c22c303ba61310fdf57843bbd97763ef496833dfa99d14be084bb1a039bb2da0000000000000000000000000000000012c22e047b0af8e2f4bf3bd3633ef0f8264004ca8ea5677a468857a1762f815235a479e53f4ad4741ffda3fb855021c900000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000d1b3cc2c7027888be51d9ef691d77bcb679afda66c73f17f9ee3837a55024f78c71363275a75d75d86bab79f74782aa0000000000000000000000000000000013fa4d4a0ad8b1ce186ed5061789213d993923066dddaf1040bc3ff59f825c78df74f2d75467e25e0f55f8a00fa030ed", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "bls_pairing_10paircheckstrue", - "Gas": 345000, + "Gas": 495000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000fd75ebcc0a21649e3177bcce15426da0e4f25d6828fbf4038d4d7ed3bd4421de3ef61d70f794687b12b2d571971a550000000000000000000000000000000004523f5a3915fc57ee889cdb057e3e76109112d125217546ccfe26810c99b130d1b27820595ad61c7527dc5bbb132a9000000000000000000000000000000000186a1da343cacf1815b9c8b6c807f536249dbfdb59d77bf4920ad2198a0d83ada21f7c39de6f06a5599f22571cab288d000000000000000000000000000000000ba1ec44f95121bd622932b84bbb4b3d279f69c494ee44db68e3165c86b627ba5e397ee197313fb5b775972798997332000000000000000000000000000000000783e7493e9fb106fa0d085e7c03eb816468d12c65d9b77643ed07c02583d491f4db5db44e565d50d8ccaa9ad8f7f8e80000000000000000000000000000000010a6a5fd90cd5f4fb6545814f5df065b001074bb3f29f649dd2612815df3a19a320f7754dd3d458e48e7fb1b4953978f000000000000000000000000000000000345dd80ffef0eaec8920e39ebb7f5e9ae9c1d6179e9129b705923df7830c67f3690cbc48649d4079eadf5397339580c00000000000000000000000000000000083d3baf25e42f2845d8fa594dda2e0f40a4d670dda40f30da0aff0d81c87ac3d687fe84eca72f34c7c755a045668cf100000000000000000000000000000000129c4945fe62538d2806fff056adac24f3bba8e17e42d82122affe6ad2123d68784348a79755f194fde3b3d448924032000000000000000000000000000000000528590e82f409ea8ce953f0c59d15080185dc6e3219b69fcaa3a2c8fc9d0b9e0bc1e75ec6c52638e6eaa4584005b5380000000000000000000000000000000018dc3e893f74729d27dd44f45a5a4f433dcd09a3b485e9d1c2bd0eb5e0e4c9024d928ddc426fdecae931e89885ee4db4000000000000000000000000000000000d6ee02e1fc7e52a8e1ef17e753065882c6fcc14da61da7ffe955fe84a9d2af9ba57562c69db3088652931bf124b0d5300000000000000000000000000000000051f8a0b82a6d86202a61cbc3b0f3db7d19650b914587bde4715ccd372e1e40cab95517779d840416e1679c84a6db24e000000000000000000000000000000000b6a63ac48b7d7666ccfcf1e7de0097c5e6e1aacd03507d23fb975d8daec42857b3a471bf3fc471425b63864e045f4df00000000000000000000000000000000131747485cce9a5c32837a964b8c0689ff70cb4702c6520f2220ab95192d73ae9508c5b998ffb0be40520926846ce3f100000000000000000000000000000000101e147f8bd7682b47b3a6cc0c552c26ce90b9ce0daef21f7f634b3360483afa14a11e6745e7de01a35c65b396a1a12700000000000000000000000000000000090ca61ed16c4c1e80acfef736eea2db0d7425d9110cb53e6c4a2aa3f8a59ee6c60bdce8df5825011066d44bef84d29600000000000000000000000000000000028207394adcbf30250ac21a8f1db6283580bc5e39159930552e5edb25e6215c66b6450296edc80dbc3a2acd125dab160000000000000000000000000000000019bef05aaba1ea467fcbc9c420f5e3153c9d2b5f9bf2c7e2e7f6946f854043627b45b008607b9a9108bb96f3c1c089d3000000000000000000000000000000000adb3250ba142db6a748a85e4e401fa0490dd10f27068d161bd47cb562cc189b3194ab53a998e48a48c65e071bb541170000000000000000000000000000000016cfabbe60d1e55723a0ff72cf802f2d1cf13ed131e17729adc88522a657f320a336078a9399c8e61a3bbde3d52fd3640000000000000000000000000000000009aa9a3c2a6d49d286aa593c6ff644f1786fa9ae471bdb3fe70b150a9ed7584eaa886ac057c30005c3642f65ad5581cc0000000000000000000000000000000001d417894c0cce924955a795b188b27951f8438a5485404b921a42fa79dea03c10e29d0390df2f34d7be13f360a7fada00000000000000000000000000000000189b0b3a04e6c613899d51231dbf0cba6a8a8f507ebed99d24fba7ebac6c97a8859ffde88e6d95c1a9d6b4f0a8f3c417000000000000000000000000000000000d9e19b3f4c7c233a6112e5397309f9812a4f61f754f11dd3dcb8b07d55a7b1dfea65f19a1488a14fef9a414950835820000000000000000000000000000000009d0d1f706f1a85a98f3efaf5c35a41c9182afc129285cf2db3212f6ea0da586ca539bc66181f2ccb228485dd8aff0a70000000000000000000000000000000016cad7807d761f2c0c6ff11e786a9ed296442de8acc50f72a87139b9f1eb7c168e1c2f0b2a1ad7f9579e1e922d0eb309000000000000000000000000000000000d3577c713fcbc0648ca8fbdda0a0bf83c726a6205ee04d2d34cacff92b58725ca3c9766206e22d0791cb232fa8a9bc3000000000000000000000000000000000f5ea1957be1b9ca8956ba5f6b1c37ea72e2529f80d7a1c61df01afcc2df6f99ced81ac0052bd0e1e83f09d76ad8d33b000000000000000000000000000000000aabced4e2b9e4a473e72bf2b1cc0ce7ab13de533107df2205ed9e2bb50fa0217e6a13abcd12fce1bda1ccf84dac237a00000000000000000000000000000000073eb991aa22cdb794da6fcde55a427f0a4df5a4a70de23a988b5e5fc8c4d844f66d990273267a54dd21579b7ba6a086000000000000000000000000000000001825bacd18f695351f843521ebeada20352c3c3965626f98bc4c68e6ff7c4eed38b48f328204bbb9cd461511d24ebfb3000000000000000000000000000000000029ea93c2f1eb48b195815571ea0148198ff1b19462618cab08d037646b592ecab5a66b4bc660ffd02d1b996ca377da000000000000000000000000000000000bb319a4550c981ee89e3c7e6dcc434283454847792807940f72fd2dbf3625b092e0a0c03e581fd9bd9cf74f95ccef15000000000000000000000000000000000abb072b8d9011e81c9f5b23ba86fdb6399c878aa4eadee45fb2486afe594dffc53be643598a23e5428894a36f5ac3ce0000000000000000000000000000000005d04aa0b644faae17d4c76a14aa680c69fdfc6b59fee3ef45641f566165fced60cbbda4ca096e132bb6f58ab4516686000000000000000000000000000000001098f178f84fc753a76bb63709e9be91eec3ff5f7f3a5f4836f34fe8a1a6d6c5578d8fd820573cef3a01e2bfef3eaf3a000000000000000000000000000000000ea923110b733b531006075f796cc9368f2477fe26020f465468efbb380ce1f8eebaf5c770f31d320f9bd378dc758436000000000000000000000000000000001065f2a2d29a997343765f239c99a018490eced40ac42fc93217dfe20d8b43ee2215f65166aff483b3dc042c5a43b196000000000000000000000000000000000766e4c66f4a442ff1f61a7a4d197d2b47dd226d0e7822a9b065108cfc643cd3f3d5ae59ed2ce4cde13fd9260bb5b7cc0000000000000000000000000000000012251cc6abbabeb7bbe1fdd63eaee10832a748fff24f7e3fdccaea87facb6e99f2e0407a38f27f90450a471b873104620000000000000000000000000000000011181e08c8fba91271adfee9d31681f8412ab7a3f754f7ba4709024c0ad2287e32dd455d71a296b4838072a8ab9d96f2000000000000000000000000000000001252a4ac3529f8b2b6e8189b95a60b8865f07f9a9b73f98d5df708511d3f68632c4c7d1e2b03e6b1d1e2c01839752ada0000000000000000000000000000000002a1bc189e36902d1a49b9965eca3cb818ab5c26dffca63ca9af032870f7bbc615ac65f21bed27bd77dd65f2e90f53580000000000000000000000000000000005a7445f55add1ed5c143424ceef3d594280e316c9441a8e68c3ad97377141d015bf878bdfcf0df9fbcd0529f4e8100800000000000000000000000000000000192b52ba08ed509fc84d5775a7182498fd1ff80941d673c53470c9c9f1192f9c0057d68a1dfee0c68fe5df3625cc43bf000000000000000000000000000000000d3fcaf2f727e0eb32c65da9b910dc681b948dda874d0db6f6ed3f063430fbf073385a9a14c2dd78568726124e2b3ea8000000000000000000000000000000001943ce22cdb2387bd5796950dc95d1ace4012ab9bb4afb46223760230c1709e075f1ae76d6b3f2e947ba6b16d458ccd1000000000000000000000000000000001271205227c7aa27f45f20b3ba380dfea8b51efae91fd32e552774c99e2a1237aa59c0c43f52aad99bba3783ea2f36a4000000000000000000000000000000001407ffc2c1a2fe3b00d1f91e1f4febcda31004f7c301075c9031c55dd3dfa8104b156a6a3b7017fccd27f81c2af222ef000000000000000000000000000000000a29e38da2d42fd4712052800c7c8dd6e94fd9f506e946068aaac799d60b94c2d7515769ffdd32ea95d3910330ec47de000000000000000000000000000000000c60dae92451206390e30b5daa7151d63624dee496753c87dd54eadc92dc9602081fae02a1a53bac97e984a571923a5d00000000000000000000000000000000085f4fda4c72328895f20c683cb49603a37ff2c43d62f66602506dad5b8d1daebfbac7a7db3f50ccf4dfff277deb105c0000000000000000000000000000000005674d005457e0fe1f0fd978d63996c5f3d29f9149ee4eb04c464742dd329ccaef5e5f6b896d986ddfc9f1b2a3aec13100000000000000000000000000000000071bc66d6e2d244afc4a5ce4da1dce3d0c22c303ba61310fdf57843bbd97763ef496833dfa99d14be084bb1a039bb2da0000000000000000000000000000000012c22e047b0af8e2f4bf3bd3633ef0f8264004ca8ea5677a468857a1762f815235a479e53f4ad4741ffda3fb855021c900000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "bls_pairing_10pairchecksfalse", - "Gas": 345000, + "Gas": 495000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000012196c5a43d69224d8713389285f26b98f86ee910ab3dd668e413738282003cc5b7357af9a7af54bb713d62255e80f560000000000000000000000000000000006ba8102bfbeea4416b710c73e8cce3032c31c6269c44906f8ac4f7874ce99fb17559992486528963884ce429a992fee0000000000000000000000000000000017c9fcf0504e62d3553b2f089b64574150aa5117bd3d2e89a8c1ed59bb7f70fb83215975ef31976e757abf60a75a1d9f0000000000000000000000000000000008f5a53d704298fe0cfc955e020442874fe87d5c729c7126abbdcbed355eef6c8f07277bee6d49d56c4ebaf334848624000000000000000000000000000000001302dcc50c6ce4c28086f8e1b43f9f65543cf598be440123816765ab6bc93f62bceda80045fbcad8598d4f32d03ee8fa000000000000000000000000000000000bbb4eb37628d60b035a3e0c45c0ea8c4abef5a6ddc5625e0560097ef9caab208221062e81cd77ef72162923a1906a40", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_0", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000117dbe419018f67844f6a5e1b78a1e597283ad7b8ee7ac5e58846f5a5fd68d0da99ce235a91db3ec1cf340fe6b7afcdb0000000000000000000000000000000013316f23de032d25e912ae8dc9b54c8dba1be7cecdbb9d2228d7e8f652011d46be79089dd0a6080a73c82256ce5e4ed200000000000000000000000000000000192fa5d8732ff9f38e0b1cf12eadfd2608f0c7a39aced7746837833ae253bb57ef9c0d98a4b69eeb2950901917e99d1e0000000000000000000000000000000009aeb10c372b5ef1010675c6a4762fda33636489c23b581c75220589afbc0cc46249f921eea02dd1b761e036ffdbae220000000000000000000000000000000002d225447600d49f932b9dd3ca1e6959697aa603e74d8666681a2dca8160c3857668ae074440366619eb8920256c4e4a00000000000000000000000000000000174882cdd3551e0ce6178861ff83e195fecbcffd53a67b6f10b4431e423e28a480327febe70276036f60bb9c99cf7633", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_1", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008ab7b556c672db7883ec47efa6d98bb08cec7902ebb421aac1c31506b177ac444ffa2d9b400a6f1cbdc6240c607ee110000000000000000000000000000000016b7fa9adf4addc2192271ce7ad3c8d8f902d061c43b7d2e8e26922009b777855bffabe7ed1a09155819eabfa87f276f000000000000000000000000000000000a69d6d9f79e19b38e6bf5a245dc820bddbdfe038d50932f76d0e4629d759f8ca6d573fcfc39256305daedf452f9fdf40000000000000000000000000000000015f5949369e58487afcecf8018775d1b0a73e913bf77e13d2e5a843bbbeba7d1978ca27ae8bfc87d30f567dd396b980e00000000000000000000000000000000182198bb38a0353b8db25389e56ab0d8679a1bda008a65dad77e4c95bc6804f6311eb16c761e1a5e2a5f87cfada49fa4000000000000000000000000000000000eb5483959e98c30e71db52615f63521378b156f142d46f3bb285b94aef39d80feacec335b797c5a68dc17ba89d43e0f", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_2", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015ff9a232d9b5a8020a85d5fe08a1dcfb73ece434258fe0e2fddf10ddef0906c42dcb5f5d62fc97f934ba900f17beb330000000000000000000000000000000009cfe4ee2241d9413c616462d7bac035a6766aeaab69c81e094d75b840df45d7e0dfac0265608b93efefb9a8728b98e4000000000000000000000000000000000286f09f931c07507ba4aafb7d43befe0b1d25b27ecc9199b19a9dc20bc7ec0329479ef224e00dece67ec0d61f1ca5ae0000000000000000000000000000000014e6ed154b5552be5c463b730b2134f83e0071dcdadfaa68e6c7c7f6e17dabb7daf06e409177bc4b38cfdb8248157618000000000000000000000000000000000f145e998dc6eb0c2b2be87db62949c7bfa63e8b01c8634248010fd623cfaec5d6c6c193331440957d333bf0c988b7b10000000000000000000000000000000002a1ab3eea343cfdea5779f64b3bddbf0769aded60e54a7507338f044310ba239430663394f110e560594d6042a99f1c", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_3", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017a17b82e3bfadf3250210d8ef572c02c3610d65ab4d7366e0b748768a28ee6a1b51f77ed686a64f087f36f641e7dca900000000000000000000000000000000077ea73d233ccea51dc4d5acecf6d9332bf17ae51598f4b394a5f62fb387e9c9aa1d6823b64a074f5873422ca57545d3000000000000000000000000000000000d1007ca90451229d3780d66d3aed7c9d8fc82e9d45549e8586600e38eb6763f3c466e2f6ba6ba1dafd8f00cc452dda20000000000000000000000000000000001d017d920a262b6d6597bab532f83270f41526409510e80278d1c3595ceabb9ceba8ae32b1817297ff78ea7a0d252e8000000000000000000000000000000000935b7a59d2e51bbb2f9b54ccb06ebee9d189fa82f0e97d10c8020badb3de7fe15731b5895faed8cad92ae76e2e1b649000000000000000000000000000000000792dadd48a20040ad43facedc109747411895180813349d41d0e5b389176bfb15895d41665be8d1afa80835ef818eca", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_4", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c1243478f4fbdc21ea9b241655947a28accd058d0cdb4f9f0576d32f09dddaf0850464550ff07cab5927b3e4c863ce90000000000000000000000000000000015fb54db10ffac0b6cd374eb7168a8cb3df0a7d5f872d8e98c1f623deb66df5dd08ff4c3658f2905ec8bd02598bd4f9000000000000000000000000000000000095353ad699b89ac82ca7ef631775b2b3a6e3ed8dd320440cdb929baa428e63cb902a83857cc0e2621470544c69e84aa000000000000000000000000000000000892559ade1060b0eef2cbc1c74de62a7ff076a3621e5f0f159672a549f1201f2ffb3ac12c8b12cb86ae3e386c33e219000000000000000000000000000000000750df4632a7126ddb08658a4001f949b9764d9cc43a9393cc55d8fdbb15d4a1186dd87a6433d111888a7804540ad9fc0000000000000000000000000000000017554bd444665df044b91b0b2614017bbfcd7acc7f8c5a16cea2861235578ce2b27dcced9fba234999fa478cd3f6e42d", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_5", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000328f09584b6d6c98a709fc22e184123994613aca95a28ac53df8523b92273eb6f4e2d9b2a7dcebb474604d54a210719000000000000000000000000000000001220ebde579911fe2e707446aaad8d3789fae96ae2e23670a4fd856ed82daaab704779eb4224027c1ed9460f39951a1b00000000000000000000000000000000175dadb6ee656ec6aebf8d0e5edaee3f119c74e0ea64e374be9e8ab9fd3d085fceeedf4ed8de676ebe9065d83b0542ad0000000000000000000000000000000005cd6a875329c23e4918976cf997e93e403957acfc999f8159a630d21ab6f1762925c063784237262bedc82402ad81bb0000000000000000000000000000000003274bcb8db35e50164d136c2a98b5a6d2fb5f9767d0ee11c1358bf7ca5ed96d9122f8c1051ba3c658cc89777d03dfa5000000000000000000000000000000000380a240443dff85b6542f75db28b87c39e278cdb8d9627efbbc63b229e6ce783f6fb0114c8e91c2fd6ea71c95bb99a4", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_6", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002ebfa98aa92c32a29ebe17fcb1819ba82e686abd9371fcee8ea793b4c72b6464085044f818f1f5902396df0122830cb00000000000000000000000000000000001184715b8432ed190b459113977289a890f68f6085ea111466af15103c9c02467da33e01d6bff87fd57db6ccba442a000000000000000000000000000000000834cf1b4149d100c41b1bca0495e455002eb6596bddcb94ae48d0c65957e8b313372f8e0d6e57504664b266f38293150000000000000000000000000000000000de2875fbd14760bac4c2cc7d3f239177efe9f7f61f767be420d44f24c9fb863efd60dcd732986db8c5b72470617ea60000000000000000000000000000000000bc9535ebf11c2dcc8c7d3bcd09d7d14035635fccb5fddb7df29ce8855e79f99809781d6ffbbcb33d1227314609abee00000000000000000000000000000000039bbfb4d969d702255e3be7f255a97529a19687ce38cb70637c37894d4102591feef428b0afe8c9ef50310ae3b83091", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_7", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009d6424e002439998e91cd509f85751ad25e574830c564e7568347d19e3f38add0cab067c0b4b0801785a78bcbeaf246000000000000000000000000000000000ef6d7db03ee654503b46ff0dbc3297536a422e963bda9871a8da8f4eeb98dedebd6071c4880b4636198f4c2375dc795000000000000000000000000000000000fc09c241899fa6e8cc3b31830e9c9f2777d2bc6758260c9f6af5fce56c9dc1a8daedb5bcb7d7669005ccf6bfacf71050000000000000000000000000000000018e95921a76bc37308e2f10afb36a812b622afe19c8db84465ab8b3293c7d371948ee0578dbb025eed7ed60686109aa0000000000000000000000000000000001558cdfbac6ea2c4c1f4b9a2e809b19e9f4ba47b78d2b18185ed8c97c2f9c2990beadc78b85c123b4c3c08d5c5b3bbef000000000000000000000000000000000ea4dfdd12b9a4b9a3172671a6eafed7508af296813ec5700b697d9239ae484bcf7ab630e5b6830d6d95675be5174bb2", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_8", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002d1cdb93191d1f9f0308c2c55d0208a071f5520faca7c52ab0311dbc9ba563bd33b5dd6baa77bf45ac2c3269e945f4800000000000000000000000000000000072a52106e6d7b92c594c4dacd20ef5fab7141e45c231457cd7e71463b2254ee6e72689e516fa6a8f29f2a173ce0a1900000000000000000000000000000000000b36d8fb9bd156f618ab8049d41dfe0698218764c0abb10e12fae43c8810b8e2a5201364e2778f6f433b199bb8f9a6800000000000000000000000000000000000707eb15411b63722b4308c0ed4288320078d2463ae659ad4fb3f9ef8124f379df92d64e077403e50727388adb59ac00000000000000000000000000000000158e1249d5b91614924acb23899c6bae408697dec0982c10d0459746499f4e6739afb9d5129568106ed1a1caefeaa9640000000000000000000000000000000019e841562e4aa75321143f8ce1e5ec6158fa5cb8b98c839a486188260c18ee8a7600930f23aa39eac2eb520d6a0fba90", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_9", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000641642f6801d39a09a536f506056f72a619c50d043673d6d39aa4af11d8e3ded38b9c3bbc970dbc1bd55d68f94b50d0000000000000000000000000000000009ab050de356a24aea90007c6b319614ba2f2ed67223b972767117769e3c8e31ee4056494628fb2892d3d37afb6ac94300000000000000000000000000000000186a9661d6fb539e8687ac214301b2d7623caedd76f4055089befba6ef2c96263d810921ad7783d229f82783c9def424000000000000000000000000000000000447f3e20caa1f99fbaccab7bde2bd37fe77cea691ebf2b9499f95bbbb77afe72b7039eb0c05970b61360fcf8ade73730000000000000000000000000000000005e11f828eda86c10a1d7929def547ac06885da278afae59c5d95453caf0a2d8ed186fa7c6d0a7ab6e9142cfa4b338190000000000000000000000000000000003d954e61b6ab71042b19e804efccd4956b56662f27f70a9255cec0c464b86c0e83721ad3785dec62dd4a9dd3d6d5d53", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_10", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000fd4893addbd58fb1bf30b8e62bef068da386edbab9541d198e8719b2de5beb9223d87387af82e8b55bd521ff3e47e2d000000000000000000000000000000000f3a923b76473d5b5a53501790cb02597bb778bdacb3805a9002b152d22241ad131d0f0d6a260739cbab2c2fe602870e0000000000000000000000000000000002b94534aa0ba923bda34cbe92b3cd7a3e263741b120240ff5bdb8b718f094d3867e3fcabeab4a7be39c8f8c4fdd10d900000000000000000000000000000000048711cf6a82534d64d072355cb8fe647808e7e8b2d9ac9ed52eb7fe121647a721dd1234c71ecd163d91701eb7331cac00000000000000000000000000000000141ef2e23a1ecc7ef2ed3ea915492e79cfffe60b5e0de8441e878bd0653843d79c724e3c5ebe2321361df99f8932ddc200000000000000000000000000000000085513b4009f29b3e00a91c2c4be418368560802ba4194cbd2f4fa3d72a55fcae547014434514a8b2a8fe3e0b28d2773", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_11", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002cb4b24c8aa799fd7cb1e4ab1aab1372113200343d8526ea7bc64dfaf926baf5d90756a40e35617854a2079cd07fba40000000000000000000000000000000003327ca22bd64ebd673cc6d5b02b2a8804d5353c9d251637c4273ad08d581cc0d58da9bea27c37a0b3f4961dbafd276b0000000000000000000000000000000009143507a24313ee33401955fc46562c9b20c9917df3b40ccbd7ed43b1349d4551cfd98a4976d6fec5fc289460c8d89900000000000000000000000000000000060566b79df5cc975e669da8ca3a7fa91bf3f5c9fb871c3d62f4a3e79dbc341b89d38b588e5414bc385d5e3cbf3ab9310000000000000000000000000000000016bf40b8cc4c01a87aafae0c4439b623a51ba9a383756a550b69d627d6f45209f0d87e4f9be9edff35c986f7b9c49e3f000000000000000000000000000000001842d9172bce51a164fbdbdb108d0faae07e4642f21c80e40ac31e737657472ae3dfe552b65349629c210a068c4afc0e", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_12", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024ad70f2b2105ca37112858e84c6f5e3ffd4a8b064522faae1ecba38fabd52a6274cb46b00075deb87472f11f2e67d90000000000000000000000000000000010a502c8b2a68aa30d2cb719273550b9a3c283c35b2e18a01b0b765344ffaaa5cb30a1e3e6ecd3a53ab67658a5787681000000000000000000000000000000000ab19bbddd661e9db8fe4cb307ecebdc5e03efbb95c5b44716c7075bd60efcfc67de0bfd7c46ad989a613946c90a4c1000000000000000000000000000000000120800e7f344cda816299fa37f603ade06beb3b10907f5af896d6b4e42f7f865b756f14164db84411c56cb2ea81f60be000000000000000000000000000000000f688ddd257e66362af1437b6922d3397a7c3dd6dea6bca8ebd6375e75bf2de40bc287cbf3434388191e56b92949c83b0000000000000000000000000000000005252465784aff8c1c707da58b5808c69583bf852d68f96912bc53f8dae4536b09ccbbd25a49d9e744118992b92b6792", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_13", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000000704cc57c8e0944326ddc7c747d9e7347a7f6918977132eea269f161461eb64066f773352f293a3ac458dc3ccd5026a000000000000000000000000000000001099d3c2bb2d082f2fdcbed013f7ac69e8624f4fcf6dfab3ee9dcf7fbbdb8c49ee79de40e887c0b6828d2496e3a6f768000000000000000000000000000000000e3165efe00f69aee84ac56d2161f07c017abfaadeaad34f8c96799d68bae0e6f9b557bbf9137e7826f49f29c58d1ef9000000000000000000000000000000000de0dce7ea371ad60f21f2cb61cb582b5072408a7efc91edf05b36a1a3b58fd9e6cf808d75157eedccc8f1c93a8ae07d0000000000000000000000000000000016d911943d80427385ebac1d1b293914a9e4dd9db06c1d6a758192d63c8fc9368e02eae7fb0e3a7859408f215cfa76ca0000000000000000000000000000000007bfdc6afb8acec625e50ecbc08a5cdb7862b795866323679885ba5cba3fd51f181078e03fe35e96e6383c077eed1bf5", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_14", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000130535a29392c77f045ac90e47f2e7b3cffff94494fe605aad345b41043f6663ada8e2e7ecd3d06f3b8854ef92212f42000000000000000000000000000000001699a3cc1f10cd2ed0dc68eb916b4402e4f12bf4746893bf70e26e209e605ea89e3d53e7ac52bd07713d3c8fc671931d000000000000000000000000000000000a68dccbe3452731f075580fe6102b8ee5265007ee19c56d95bcb096a3a6ac444f4145b980f41afcb0a865853b279bc600000000000000000000000000000000164767ea55a9038ac2dd254d8c8a4970dba93dacdf5416aecaa407914719cab165e7a32784b2c41652a86358737d831f000000000000000000000000000000000da9441fbc6578c85fdeca49082c9ebbf183de894d67c65158380ee56132d3cdb44b100d72b6d3b82688defb75d2aa390000000000000000000000000000000017d570e4f6e46550679d5d12c347414da207060f594620e2f8db66df8e0b06c912290b207a268e782d4b45db19a199db", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_15", - "Gas": 138000, + "Gas": 108000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001830f52d9bff64a623c6f5259e2cd2c2a08ea17a8797aaf83174ea1e8c3bd3955c2af1d39bfa474815bfe60714b7cd80000000000000000000000000000000000874389c02d4cf1c61bc54c4c24def11dfbe7880bc998a95e70063009451ee8226fec4b278aade3a7cea55659459f1d500000000000000000000000000000000197737f831d4dc7e708475f4ca7ca15284db2f3751fcaac0c17f517f1ddab35e1a37907d7b99b39d6c8d9001cd50e79e000000000000000000000000000000000af1a3f6396f0c983e7c2d42d489a3ae5a3ff0a553d93154f73ac770cd0af7467aa0cef79f10bbd34621b3ec9583a834000000000000000000000000000000001918cb6e448ed69fb906145de3f11455ee0359d030e90d673ce050a360d796de33ccd6a941c49a1414aca1c26f9e699e0000000000000000000000000000000019a915154a13249d784093facc44520e7f3a18410ab2a3093e0b12657788e9419eec25729944f7945e732104939e7a9e000000000000000000000000000000001830f52d9bff64a623c6f5259e2cd2c2a08ea17a8797aaf83174ea1e8c3bd3955c2af1d39bfa474815bfe60714b7cd8000000000000000000000000000000000118cd94e36ab177de95f52f180fdbdc584b8d30436eb882980306fa0625f07a1f7ad3b4c38a921c53d14aa9a6ba5b8d600000000000000000000000000000000197737f831d4dc7e708475f4ca7ca15284db2f3751fcaac0c17f517f1ddab35e1a37907d7b99b39d6c8d9001cd50e79e000000000000000000000000000000000af1a3f6396f0c983e7c2d42d489a3ae5a3ff0a553d93154f73ac770cd0af7467aa0cef79f10bbd34621b3ec9583a834000000000000000000000000000000001918cb6e448ed69fb906145de3f11455ee0359d030e90d673ce050a360d796de33ccd6a941c49a1414aca1c26f9e699e0000000000000000000000000000000019a915154a13249d784093facc44520e7f3a18410ab2a3093e0b12657788e9419eec25729944f7945e732104939e7a9e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_16", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000043c4ff154778330b4d5457b7811b551dbbf9701b402230411c527282fb5d2ba12cb445709718d5999e79fdd74c0a67000000000000000000000000000000000013a80ede40df002b72f6b33b1f0e3862d505efbe0721dce495d18920d542c98cdd2daf5164dbd1a2fee917ba943debe0000000000000000000000000000000001c2d8d353d5983f22a5313ddd58fdc0d9c994b2915dbc87a9b65b7b98ff00b62e140a27dc322d42b3ad190c1b3728dd0000000000000000000000000000000010412f3625947b38bb380a6ed059f1677b7a7afcb91517837c563dadd0e285b95740a200ddff6570d4d92bb636b625bb0000000000000000000000000000000015f4f9a480a57bd1b2388532ab045a1ba93d2f6589a3022c585fe06a1d611165c99d70be06251812405c9c37d6e9f7730000000000000000000000000000000001a78e6c5062a6634a56e9853ff5afacb2e7cf31fd0ea5f0d8c8ac6174c88133cf2f63450ec4590544c9a0e37daac1f900000000000000000000000000000000043c4ff154778330b4d5457b7811b551dbbf9701b402230411c527282fb5d2ba12cb445709718d5999e79fdd74c0a6700000000000000000000000000000000018c690fc5571f69793ec3c82915ac9513726ec891312f4f11dd3ba0ee95cc98b50d925099b0642e58a106e8456bbcbed0000000000000000000000000000000001c2d8d353d5983f22a5313ddd58fdc0d9c994b2915dbc87a9b65b7b98ff00b62e140a27dc322d42b3ad190c1b3728dd0000000000000000000000000000000010412f3625947b38bb380a6ed059f1677b7a7afcb91517837c563dadd0e285b95740a200ddff6570d4d92bb636b625bb0000000000000000000000000000000015f4f9a480a57bd1b2388532ab045a1ba93d2f6589a3022c585fe06a1d611165c99d70be06251812405c9c37d6e9f7730000000000000000000000000000000001a78e6c5062a6634a56e9853ff5afacb2e7cf31fd0ea5f0d8c8ac6174c88133cf2f63450ec4590544c9a0e37daac1f9", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_17", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009f9a78a70b9973c43182ba54bb6e363c6984d5f7920c1d347c5ff82e6093e73f4fb5e3cd985c9ddf9af936b16200e880000000000000000000000000000000008d7489c2d78f17b2b9b1d535f21588d8761b8fb323b08fa9af8a60f39b26e98af76aa883522f21e083c8a14c2e7edb6000000000000000000000000000000000818e567aea83eaf3142984bb736b443743659626c407987b604a30c79756081fa6ae6beeb2e6c652dbfe9cf62d44e3900000000000000000000000000000000193f0317305fde1046acda2c9491e376aa67244f68ef6495845d049e1293082af91f880be935d9d8ad0e25ad918caae200000000000000000000000000000000109224b8178be58ea4e4a194ca66bef9d14f6fc2c625d25feaa4f32e0f4d72d91024d96839bc96e6a624c5ad6221bd94000000000000000000000000000000000e42decf8a987efaeb4ede37236b637e61249bf6245679be7fd4d633e2d814ed4748b73890ad3c4fcbcfb4960cb67ae70000000000000000000000000000000009f9a78a70b9973c43182ba54bb6e363c6984d5f7920c1d347c5ff82e6093e73f4fb5e3cd985c9ddf9af936b16200e88000000000000000000000000000000001129c94e0c06f51f1f808a62e42a5449dd159289c14a09c4cc382c91bcfe878b6f3555767c310de1b1c275eb3d17bcf5000000000000000000000000000000000818e567aea83eaf3142984bb736b443743659626c407987b604a30c79756081fa6ae6beeb2e6c652dbfe9cf62d44e3900000000000000000000000000000000193f0317305fde1046acda2c9491e376aa67244f68ef6495845d049e1293082af91f880be935d9d8ad0e25ad918caae200000000000000000000000000000000109224b8178be58ea4e4a194ca66bef9d14f6fc2c625d25feaa4f32e0f4d72d91024d96839bc96e6a624c5ad6221bd94000000000000000000000000000000000e42decf8a987efaeb4ede37236b637e61249bf6245679be7fd4d633e2d814ed4748b73890ad3c4fcbcfb4960cb67ae7", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_18", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010fcfe8af8403a52400bf79e1bd0058f66b9cab583afe554aa1d82a3e794fffad5f0e19d385263b2dd9ef69d1154f10a000000000000000000000000000000000aba6a0b58b49f7c6c2802afd2a5ed1320bf062c7b93135f3c0ed7a1d7b1ee27b2b986cde732a60fa585ca6ab7cc154b000000000000000000000000000000000ca0d865f8c8ce0a476f7a6edb3ce4bd5e6c3a8d905d8fb5a10e66542f4325a9963c2f8d96f804f4d295f8993b5204df0000000000000000000000000000000005a966f6254f0ef4f93f082a97abe07db56f00c2ade047d2f0027edef6f00a0dfecaa24d50faa778fa29087302211f7e00000000000000000000000000000000121c51da366557c09af1bbd927521da88dfab3e2e9a95b6effb0a968795486f281f0c887e37f51837557b9e3808987130000000000000000000000000000000001a5524975400b1e88f3fff8dd34dadf5d75564cfc0026df31ee9c2c1d48b0f69a48e1e4a48cc4b7db61f023a79157800000000000000000000000000000000010fcfe8af8403a52400bf79e1bd0058f66b9cab583afe554aa1d82a3e794fffad5f0e19d385263b2dd9ef69d1154f10a000000000000000000000000000000000f46a7dee0cb471ddef3a50670a5bfc443b8455877f1ff602b21faff1eff07fc6bf27930ca2159f01479359548339560000000000000000000000000000000000ca0d865f8c8ce0a476f7a6edb3ce4bd5e6c3a8d905d8fb5a10e66542f4325a9963c2f8d96f804f4d295f8993b5204df0000000000000000000000000000000005a966f6254f0ef4f93f082a97abe07db56f00c2ade047d2f0027edef6f00a0dfecaa24d50faa778fa29087302211f7e00000000000000000000000000000000121c51da366557c09af1bbd927521da88dfab3e2e9a95b6effb0a968795486f281f0c887e37f51837557b9e3808987130000000000000000000000000000000001a5524975400b1e88f3fff8dd34dadf5d75564cfc0026df31ee9c2c1d48b0f69a48e1e4a48cc4b7db61f023a7915780", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_19", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013c5ebfb853f0c8741f12057b6b845c4cdbf72aecbeafc8f5b5978f186eead8685f2f3f125e536c465ade1a00f212b0900000000000000000000000000000000082543b58a13354d0cce5dc3fb1d91d1de6d5927290b2ff51e4e48f40cdf2d490730843b53a92865140153888d73d4af0000000000000000000000000000000002b51851ef3b44481d13f42e5111fa4fec04be0bf6acc7e59dec3a8c8113e5bb7b604c6dbdc5e8eddc2a1ffb81bc2baf0000000000000000000000000000000018ddb483ae75402852b7f285277ff7308ff78a3364cca8b0e0e1fa9182de275fd55c1e8ec3dbde180379c4280787ba8000000000000000000000000000000000170539890c89a4f91acd59efd413b5d1059f0c8fd8718e8f722e865dd106a4eb02e6fb0cd71b34ebc4b94375b52e4dd60000000000000000000000000000000001c2e9392f5d4b75efc5ff10fe97f37e2671cad7e4710765866e92aec99b0130e6ff1314502d069fb7b5f86bfce4300e0000000000000000000000000000000013c5ebfb853f0c8741f12057b6b845c4cdbf72aecbeafc8f5b5978f186eead8685f2f3f125e536c465ade1a00f212b090000000000000000000000000000000011dbce34af6cb14d3e4d49f2482e1b058609f25dca79e2ca48e289ace9d1c8db177b7bc35daad79aa5fdac77728bd5fc0000000000000000000000000000000002b51851ef3b44481d13f42e5111fa4fec04be0bf6acc7e59dec3a8c8113e5bb7b604c6dbdc5e8eddc2a1ffb81bc2baf0000000000000000000000000000000018ddb483ae75402852b7f285277ff7308ff78a3364cca8b0e0e1fa9182de275fd55c1e8ec3dbde180379c4280787ba8000000000000000000000000000000000170539890c89a4f91acd59efd413b5d1059f0c8fd8718e8f722e865dd106a4eb02e6fb0cd71b34ebc4b94375b52e4dd60000000000000000000000000000000001c2e9392f5d4b75efc5ff10fe97f37e2671cad7e4710765866e92aec99b0130e6ff1314502d069fb7b5f86bfce4300e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_20", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000053a12f6a1cb64272c34e042b7922fabe879275b837ba3b116adfe1eb2a6dc1c1fa6df40c779a7cdb8ed8689b8bc5ba800000000000000000000000000000000097ec91c728ae2d290489909bbee1a30048a7fa90bcfd96fe1d9297545867cbfee0939f20f1791329460a4fe1ac719290000000000000000000000000000000011bbc566a10eadf16009c1d2655cfae6adfb0f56f5e55b31dc000414be1b4cee9a0b9f7d9eab4c6829037c327914d5640000000000000000000000000000000009b28329096d8644dfcba6e92477eafff29f7477da4581ce76d1493f03034d7f5d3acaadbe42c76a83ca51db79d456d10000000000000000000000000000000019f75a303fdede5d97f3e521b03ef6b9d7c008d770b59ce3ac38900b340895e008342701ad1b41830b9c010936f4ff1700000000000000000000000000000000161aa1853edbb56fa3bd685c9c6b88e466dfa3c4f194f6774b4d9b1f30b016993bd0d65e8e9d6dea6caa196ff735bd6700000000000000000000000000000000053a12f6a1cb64272c34e042b7922fabe879275b837ba3b116adfe1eb2a6dc1c1fa6df40c779a7cdb8ed8689b8bc5ba800000000000000000000000000000000108248cdc6f503c7bad30eac875d92a75feccbdbe7b5394f8557a92bb12a796430a2c60ca23c6ecd259e5b01e53891820000000000000000000000000000000011bbc566a10eadf16009c1d2655cfae6adfb0f56f5e55b31dc000414be1b4cee9a0b9f7d9eab4c6829037c327914d5640000000000000000000000000000000009b28329096d8644dfcba6e92477eafff29f7477da4581ce76d1493f03034d7f5d3acaadbe42c76a83ca51db79d456d10000000000000000000000000000000019f75a303fdede5d97f3e521b03ef6b9d7c008d770b59ce3ac38900b340895e008342701ad1b41830b9c010936f4ff1700000000000000000000000000000000161aa1853edbb56fa3bd685c9c6b88e466dfa3c4f194f6774b4d9b1f30b016993bd0d65e8e9d6dea6caa196ff735bd67", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_21", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001354dd8a230fde7c983dcf06fa9ac075b3ab8f56cdd9f15bf870afce2ae6e7c65ba91a1df6255b6f640bb51d7fed302500000000000000000000000000000000130f139ca118869de846d1d938521647b7d27a95b127bbc53578c7b66d88d541adb525e7028a147bf332607bd760deac000000000000000000000000000000000ae7289aa9bf20c4a9c807f2b3ac32f0db24e9a0a360c92e5ce4f8253f0e3e7853f771597c8141d705062bef12d4fea80000000000000000000000000000000001d2f610d79110f93145faad2e34f3408316b1dc3a72852e811b324577d9037035e24af25002ddd100cd9283b70ddcad0000000000000000000000000000000012947315d5c0ec670619125eed0de3dd259a008baee4379b82accf2391e70a2bdad264cda04c3bc1b5394a62559fa0ef000000000000000000000000000000001239e687c4d3417c3c9b655035f8d8a649c255f9a8e6f03b785eed0d416a1cd6ef7c8b45563acb4616af24f64dbccac4000000000000000000000000000000001354dd8a230fde7c983dcf06fa9ac075b3ab8f56cdd9f15bf870afce2ae6e7c65ba91a1df6255b6f640bb51d7fed30250000000000000000000000000000000006f1fe4d98675ffc62d4d5dd0af9968faca4d0ef425d56fa31b80aea892820e270f6da17aec9eb83c6cc9f84289ecbff000000000000000000000000000000000ae7289aa9bf20c4a9c807f2b3ac32f0db24e9a0a360c92e5ce4f8253f0e3e7853f771597c8141d705062bef12d4fea80000000000000000000000000000000001d2f610d79110f93145faad2e34f3408316b1dc3a72852e811b324577d9037035e24af25002ddd100cd9283b70ddcad0000000000000000000000000000000012947315d5c0ec670619125eed0de3dd259a008baee4379b82accf2391e70a2bdad264cda04c3bc1b5394a62559fa0ef000000000000000000000000000000001239e687c4d3417c3c9b655035f8d8a649c255f9a8e6f03b785eed0d416a1cd6ef7c8b45563acb4616af24f64dbccac4", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_22", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003f76a6dc6da31a399b93f4431bfabb3e48d86745eaa4b24d6337305006e3c7fc7bfcc85c85e2f3514cd389fec4e70580000000000000000000000000000000010e4280374c532ed0df44ac0bac82572f839afcfb8b696eea617d5bd1261288dfa90a7190200687d470992fb4827ff32000000000000000000000000000000001179ee329771b5913d07818e70f6ce5a58d74ea0b573eaa1bd3d97e45d3eeb27fcc7d37dba127af7a38354cb6ff48f7c000000000000000000000000000000000c898abe6eb76ef99f5143cfb8d840a918bcc9096ce25caa45d0bf5d20814cb01b024f1fd2cbecb6bef65d9456070dd90000000000000000000000000000000008e2a4fd746e86f90484f9b9b7b47b6afe5833762e515ccb276c554f00df88dd9aa0fb792c5f419dda0465cfed838e7c0000000000000000000000000000000012b5e6f7070c0045ade96f548ed6428c5030fa20c6f6f37a42fde9dbb5cd01def0fd8585bf8aeef913e7d42b9ef22efa0000000000000000000000000000000003f76a6dc6da31a399b93f4431bfabb3e48d86745eaa4b24d6337305006e3c7fc7bfcc85c85e2f3514cd389fec4e705800000000000000000000000000000000091ce9e6c4bab3ad3d275cf5888387646c3d9bb53ace7bd0c118fce3e44fcd96241b58e5af53978272f56d04b7d7ab79000000000000000000000000000000001179ee329771b5913d07818e70f6ce5a58d74ea0b573eaa1bd3d97e45d3eeb27fcc7d37dba127af7a38354cb6ff48f7c000000000000000000000000000000000c898abe6eb76ef99f5143cfb8d840a918bcc9096ce25caa45d0bf5d20814cb01b024f1fd2cbecb6bef65d9456070dd90000000000000000000000000000000008e2a4fd746e86f90484f9b9b7b47b6afe5833762e515ccb276c554f00df88dd9aa0fb792c5f419dda0465cfed838e7c0000000000000000000000000000000012b5e6f7070c0045ade96f548ed6428c5030fa20c6f6f37a42fde9dbb5cd01def0fd8585bf8aeef913e7d42b9ef22efa", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_23", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009439f061c7d5fada6e5431c77fd093222285c98449951f6a6c4c8f225b316144875bc764be5ca51c7895773a9f1a640000000000000000000000000000000000ebdef273e2288c784c061bef6a45cd49b0306ac1e9faab263c6ff73dea4627189c8f10a823253d86a8752769cc4f8f2000000000000000000000000000000000fe2e61bc8e9085d2b472a6791d4851762d6401fd3e7d3f3ba61620dc70b773f2102df1c9d6f1462144662fb2f15359700000000000000000000000000000000031f160cde626ca11f67613884a977fb5d3248d78ddbf23e50e52c3ba4090268c1f6cd8156fa41d848a482a0ca39eb04000000000000000000000000000000000eb61ba51124be7f3ee9be1488aa83cbd2333aa7e09ae67fef63c890534cb37ca7de3d16046b984e72db21e1f5c57a8a0000000000000000000000000000000006bf6f5d65aa7d19613141018ac8bf5d1e6fe494a9f30da215a2313a0241779006bce33a776aeedae5de5ea6ee5a9b9e0000000000000000000000000000000009439f061c7d5fada6e5431c77fd093222285c98449951f6a6c4c8f225b316144875bc764be5ca51c7895773a9f1a640000000000000000000000000000000000b4322c2fb5d5dd2c65b45f74ca75002c97444d8d4e5680d0369d32d180c93b294e30ef42f21ac274f77ad89633ab1b9000000000000000000000000000000000fe2e61bc8e9085d2b472a6791d4851762d6401fd3e7d3f3ba61620dc70b773f2102df1c9d6f1462144662fb2f15359700000000000000000000000000000000031f160cde626ca11f67613884a977fb5d3248d78ddbf23e50e52c3ba4090268c1f6cd8156fa41d848a482a0ca39eb04000000000000000000000000000000000eb61ba51124be7f3ee9be1488aa83cbd2333aa7e09ae67fef63c890534cb37ca7de3d16046b984e72db21e1f5c57a8a0000000000000000000000000000000006bf6f5d65aa7d19613141018ac8bf5d1e6fe494a9f30da215a2313a0241779006bce33a776aeedae5de5ea6ee5a9b9e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_24", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001478ee0ffebf22708a6ab88855081daba5ee2f279b5a2ee5f5f8aec8f97649c8d5634fec3f8b28ad60981e6f29a091b10000000000000000000000000000000011efaeec0b1a4057b1e0053263afe40158790229c5bfb08062c90a252f59eca36085ab35e4cbc70483d29880c5c2f8c200000000000000000000000000000000196044a5cdbc5300ee837dca745a44379070e9297697f5db28df4a37307cc740abed45cc778a3f4e3b8c9890ab6c3c70000000000000000000000000000000001176f5de6a3577ad67863bd3d9152ab9e8184964c6ac276e95946788f5a76394047580077c0971d874a40d510eb0443e00000000000000000000000000000000147dd55dff69213c5760e8d22b700dd7a9c7c33c434a3be95bd5281b97b464fb934a3dff7c23f3e59c5d8d26faa426bf0000000000000000000000000000000019efcf03ddb0934b0f0dba3569809d5b48b863d50d3be4973b504244414e1e1db56adff51d33265ce102b320c552781f000000000000000000000000000000001478ee0ffebf22708a6ab88855081daba5ee2f279b5a2ee5f5f8aec8f97649c8d5634fec3f8b28ad60981e6f29a091b100000000000000000000000000000000081162fe2e65a642993ba283df9bc8d60bfe495b2dc5623f0467c87bc7570980be2654c8cc8838fb362c677f3a3cb1e900000000000000000000000000000000196044a5cdbc5300ee837dca745a44379070e9297697f5db28df4a37307cc740abed45cc778a3f4e3b8c9890ab6c3c70000000000000000000000000000000001176f5de6a3577ad67863bd3d9152ab9e8184964c6ac276e95946788f5a76394047580077c0971d874a40d510eb0443e00000000000000000000000000000000147dd55dff69213c5760e8d22b700dd7a9c7c33c434a3be95bd5281b97b464fb934a3dff7c23f3e59c5d8d26faa426bf0000000000000000000000000000000019efcf03ddb0934b0f0dba3569809d5b48b863d50d3be4973b504244414e1e1db56adff51d33265ce102b320c552781f", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_25", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000150d43c64cb1dbb7b981f455e90b740918e2d63453ca17d8eeecb68e662d2581f8aa1aea5b095cd8fc2a941d6e2728390000000000000000000000000000000006dc2ccb10213d3f6c3f10856888cb2bf6f1c7fcb2a17d6e63596c29281682cafd4c72696ecd6af3cce31c440144ebd10000000000000000000000000000000005d8edbabf37a47a539d84393bb2747d0a35a52b80a7c99616c910479306e204e5db1f0fa3fe69f35af3164c7e5726b50000000000000000000000000000000005015082d6975649fbc172035da04f8aeb6d0dd88fdfac3fbd68ec925dc199413ed670488dc6588f9bd34c4ff527f149000000000000000000000000000000001312d53088ca58dfc325772b8dc0e1b20cebf7b2d5b6b4c560759987b44060bf4a59a68d1a5623bbb3cc5b0bc3986b810000000000000000000000000000000012110cd462c6fabf04f67d652639d19640c46f51aadd6c4f9a6dd7806cffb6192d95c198f4c8284151feaa2e2a0dbc1f00000000000000000000000000000000150d43c64cb1dbb7b981f455e90b740918e2d63453ca17d8eeecb68e662d2581f8aa1aea5b095cd8fc2a941d6e272839000000000000000000000000000000001324e51f295ea95adedc9730dac2e1ab6d85838840e3955103d76677ce9a7359215f8d954286950bed1be3bbfebabeda0000000000000000000000000000000005d8edbabf37a47a539d84393bb2747d0a35a52b80a7c99616c910479306e204e5db1f0fa3fe69f35af3164c7e5726b50000000000000000000000000000000005015082d6975649fbc172035da04f8aeb6d0dd88fdfac3fbd68ec925dc199413ed670488dc6588f9bd34c4ff527f149000000000000000000000000000000001312d53088ca58dfc325772b8dc0e1b20cebf7b2d5b6b4c560759987b44060bf4a59a68d1a5623bbb3cc5b0bc3986b810000000000000000000000000000000012110cd462c6fabf04f67d652639d19640c46f51aadd6c4f9a6dd7806cffb6192d95c198f4c8284151feaa2e2a0dbc1f", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_26", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f46bb86e827aa9c0c570d93f4d7d6986668c0099e4853927571199e1ce9e756d9db951f5b0325acafb2bf6e8fec2a1b0000000000000000000000000000000006d38cc6cc1a950a18e92e16287f201af4c014aba1a17929dd407d0440924ce5f08fad8fe0c50f7f733b285bf282acfc00000000000000000000000000000000117fd5016ddb779a6979d2bffe18032d9a5cdc5a6c7feeaa412381983d49ab894cb067f671163ccbe6225c3d85219db6000000000000000000000000000000000dcf01077dcce35c283bea662f4e4d16f871717eb78e630d9f95a200cc104fe67b0d69d95f6704d9812b46c92b1bc9de00000000000000000000000000000000121f212cd7251697ef6a7e3aa93eb0d7d0157cf1247d4411430c36c7277bf8acfccc4ed8590b5e8d0f760e0e4ed7e95a0000000000000000000000000000000007d22d78b486f575e01e21e1239cbedc4628ba7e01ecf4a3459bd78a9716e2969f26ea3f2449685f60397e1ab2aa7352000000000000000000000000000000000f46bb86e827aa9c0c570d93f4d7d6986668c0099e4853927571199e1ce9e756d9db951f5b0325acafb2bf6e8fec2a1b00000000000000000000000000000000132d85236d655190323279a01acc8cbc6fb736d951e3999589f0559cb61ea93e2e1c526ed08ef08046c3d7a40d7cfdaf00000000000000000000000000000000117fd5016ddb779a6979d2bffe18032d9a5cdc5a6c7feeaa412381983d49ab894cb067f671163ccbe6225c3d85219db6000000000000000000000000000000000dcf01077dcce35c283bea662f4e4d16f871717eb78e630d9f95a200cc104fe67b0d69d95f6704d9812b46c92b1bc9de00000000000000000000000000000000121f212cd7251697ef6a7e3aa93eb0d7d0157cf1247d4411430c36c7277bf8acfccc4ed8590b5e8d0f760e0e4ed7e95a0000000000000000000000000000000007d22d78b486f575e01e21e1239cbedc4628ba7e01ecf4a3459bd78a9716e2969f26ea3f2449685f60397e1ab2aa7352", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_27", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010cde0dbf4e18009c94ba648477624bbfb3732481d21663dd13cea914d6c54ec060557010ebe333d5e4b266e1563c631000000000000000000000000000000000fb24d3d4063fd054cd5b7288498f107114ff323226aca58d3336444fc79c010db15094ceda6eb99770c168d459f0da0000000000000000000000000000000000224cbea61c5136987d8dbc8deafa78ae002255c031bb54335bcf99e56a57768aa127506fca1761e8b835e67e88bb4dd0000000000000000000000000000000018cbf072b544df760c051d394ff68ad2dd5a8c731377fa2a5f61e61481ad5b42645704a2d083c7d45ed4774e5448141e000000000000000000000000000000000740b8b7d7bce78a51809713656c94cf98de72887676050f65f74c57cbe574278dd3634c44e057ea95babcc3d230e3c40000000000000000000000000000000006696058a191c7012a4ee7c973c2005ac51af02a85cbb60e3164809a583b4431dda2b59e1c9ceeb652b3ac7021d116a60000000000000000000000000000000010cde0dbf4e18009c94ba648477624bbfb3732481d21663dd13cea914d6c54ec060557010ebe333d5e4b266e1563c631000000000000000000000000000000000a4ec4acf91be994fe45f08dbeb2bbd053275861d11a486693fd6e5bfa3736134396f6b1c3ad146642f2e972ba609d0b000000000000000000000000000000000224cbea61c5136987d8dbc8deafa78ae002255c031bb54335bcf99e56a57768aa127506fca1761e8b835e67e88bb4dd0000000000000000000000000000000018cbf072b544df760c051d394ff68ad2dd5a8c731377fa2a5f61e61481ad5b42645704a2d083c7d45ed4774e5448141e000000000000000000000000000000000740b8b7d7bce78a51809713656c94cf98de72887676050f65f74c57cbe574278dd3634c44e057ea95babcc3d230e3c40000000000000000000000000000000006696058a191c7012a4ee7c973c2005ac51af02a85cbb60e3164809a583b4431dda2b59e1c9ceeb652b3ac7021d116a6", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_28", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008c0a4c543b7506e9718658902982b4ab7926cd90d4986eceb17b149d8f5122334903300ad419b90c2cb56dc6d2fe976000000000000000000000000000000000824e1631f054b666893784b1e7edb44b9a53596f718a6e5ba606dc1020cb6e269e9edf828de1768df0dd8ab8440e053000000000000000000000000000000001522e0a4ccd607f117fc6fc8f9abcd704e9850d96adb95d9bfaab210b76bfb2c5dc75163b922bd7a886541250bc1d8630000000000000000000000000000000018a6e4327d633108a292a51abed43e95230e951e4476dc385ceea9c72ed528bf3e06c42d10cefbd4aa75b134936e4747000000000000000000000000000000001198587188e793ad2ec2fa0fa1d0da9b61ed48444fe6722e523aeac270f17f73f56b1e726ab811bb54a6e42e506d70a20000000000000000000000000000000004bedd94182e0f16c71223ac3d68ab327d28ee0ccdcd2c2db07faf69e1babe3fbf3ba09c28b146eca7ab047b592947030000000000000000000000000000000008c0a4c543b7506e9718658902982b4ab7926cd90d4986eceb17b149d8f5122334903300ad419b90c2cb56dc6d2fe9760000000000000000000000000000000011dc30871a7a9b33e2882f6b24ccd192aad215edfc6c6bd9acd064dff4a43f41b4c212068875e896daf127547bbeca58000000000000000000000000000000001522e0a4ccd607f117fc6fc8f9abcd704e9850d96adb95d9bfaab210b76bfb2c5dc75163b922bd7a886541250bc1d8630000000000000000000000000000000018a6e4327d633108a292a51abed43e95230e951e4476dc385ceea9c72ed528bf3e06c42d10cefbd4aa75b134936e4747000000000000000000000000000000001198587188e793ad2ec2fa0fa1d0da9b61ed48444fe6722e523aeac270f17f73f56b1e726ab811bb54a6e42e506d70a20000000000000000000000000000000004bedd94182e0f16c71223ac3d68ab327d28ee0ccdcd2c2db07faf69e1babe3fbf3ba09c28b146eca7ab047b59294703", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_29", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000159d94fb0cf6f4e3e26bdeb536d1ee9c511a29d32944da43420e86c3b5818e0f482a7a8af72880d4825a50fee6bc8cd8000000000000000000000000000000000c2ffe6be05eccd9170b6c181966bb8c1c3ed10e763613112238cabb41370e2a5bb5fef967f4f8f2af944dbef09d265e00000000000000000000000000000000148b7dfc21521d79ff817c7a0305f1048851e283be13c07d5c04d28b571d48172838399ba539529e8d037ffd1f7295580000000000000000000000000000000003015abea326c15098f5205a8b2d3cd74d72dac59d60671ca6ef8c9c714ea61ffdacd46d1024b5b4f7e6b3b569fabaf20000000000000000000000000000000011f0c512fe7dc2dd8abdc1d22c2ecd2e7d1b84f8950ab90fc93bf54badf7bb9a9bad8c355d52a5efb110dca891e4cc3d0000000000000000000000000000000019774010814d1d94caf3ecda3ef4f5c5986e966eaf187c32a8a5a4a59452af0849690cf71338193f2d8435819160bcfb00000000000000000000000000000000159d94fb0cf6f4e3e26bdeb536d1ee9c511a29d32944da43420e86c3b5818e0f482a7a8af72880d4825a50fee6bc8cd8000000000000000000000000000000000dd1137e592119c134103b9e29e4f14b48387a767d4effae44f807e5b579e7f9c2f60105495f070d0a6ab2410f62844d00000000000000000000000000000000148b7dfc21521d79ff817c7a0305f1048851e283be13c07d5c04d28b571d48172838399ba539529e8d037ffd1f7295580000000000000000000000000000000003015abea326c15098f5205a8b2d3cd74d72dac59d60671ca6ef8c9c714ea61ffdacd46d1024b5b4f7e6b3b569fabaf20000000000000000000000000000000011f0c512fe7dc2dd8abdc1d22c2ecd2e7d1b84f8950ab90fc93bf54badf7bb9a9bad8c355d52a5efb110dca891e4cc3d0000000000000000000000000000000019774010814d1d94caf3ecda3ef4f5c5986e966eaf187c32a8a5a4a59452af0849690cf71338193f2d8435819160bcfb", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_30", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000019c822a4d44ac22f6fbaef356c37ceff93c1d6933e8c8f3b55784cfe62e5705930be48607c3f7a4a2ca146945cad6242000000000000000000000000000000000353d6521a17474856ad69582ce225f27d60f5a8319bea8cefded2c3f6b862d76fe633c77ed8ccdf99d2b10430253fc8000000000000000000000000000000000805892f21889cab3cfe62226eaff6a8d3586d4396692b379efc7e90b0eaad4c9afbdf0f56b30f0c07ae0bc4013343b30000000000000000000000000000000007853f0e75c8dee034c2444299da58c98f22de367a90550dbc635fb52c9a8f61ccc100f70f10208944e48d09507fdce100000000000000000000000000000000064afd6b3ef7ff7ec34f1fa330877b42958a46a7698c6d21adf73bfdfcab7793b312e21e5988652e655f2d42edb8a673000000000000000000000000000000000ea8a2217c3dbcc0f6e562de9cb2f334c896577d0b3a7108d96b1aba2d705dbf531e870d4023cec2c0533455013242330000000000000000000000000000000019c822a4d44ac22f6fbaef356c37ceff93c1d6933e8c8f3b55784cfe62e5705930be48607c3f7a4a2ca146945cad62420000000000000000000000000000000016ad3b981f689f51f46e3e5e166986e4e71655dcc1e928327751ffdcfff8934caec5cc37327b3320202c4efbcfda6ae3000000000000000000000000000000000805892f21889cab3cfe62226eaff6a8d3586d4396692b379efc7e90b0eaad4c9afbdf0f56b30f0c07ae0bc4013343b30000000000000000000000000000000007853f0e75c8dee034c2444299da58c98f22de367a90550dbc635fb52c9a8f61ccc100f70f10208944e48d09507fdce100000000000000000000000000000000064afd6b3ef7ff7ec34f1fa330877b42958a46a7698c6d21adf73bfdfcab7793b312e21e5988652e655f2d42edb8a673000000000000000000000000000000000ea8a2217c3dbcc0f6e562de9cb2f334c896577d0b3a7108d96b1aba2d705dbf531e870d4023cec2c053345501324233", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_31", - "Gas": 161000, + "Gas": 151000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000d4441801d287ba8de0e2fb6b77f766dbff07b4027098ce463cab80e01eb31d9f5dbd7ac935703d68c7032fa5128ff170000000000000000000000000000000011798ea9c137acf6ef9483b489c0273d4f69296959922a352b079857953263372b8d339115f0576cfabedc185abf2086000000000000000000000000000000001498b1412f52b07a0e4f91cbf5e1852ea38fc111613523f1e61b97ebf1fd7fd2cdf36d7f73f1e33719c0b63d7bf66b8f0000000000000000000000000000000004c56d3ee9931f7582d7eebeb598d1be208e3b333ab976dc7bb271969fa1d6caf8f467eb7cbee4af5d30e5c66d00a4e2000000000000000000000000000000000de29857dae126c0acbe966da6f50342837ef5dd9994ad929d75814f6f33f77e5b33690945bf6e980031ddd90ebc76ce00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000cbcd06a1c576af16d0d77ff8bcc3669a486d044cc7b85db03661a92f4c5c44a28d028521dfcfc292d8ecd05aed6ab940000000000000000000000000000000011798ea9c137acf6ef9483b489c0273d4f69296959922a352b079857953263372b8d339115f0576cfabedc185abf2086000000000000000000000000000000001498b1412f52b07a0e4f91cbf5e1852ea38fc111613523f1e61b97ebf1fd7fd2cdf36d7f73f1e33719c0b63d7bf66b8f0000000000000000000000000000000004c56d3ee9931f7582d7eebeb598d1be208e3b333ab976dc7bb271969fa1d6caf8f467eb7cbee4af5d30e5c66d00a4e2000000000000000000000000000000000de29857dae126c0acbe966da6f50342837ef5dd9994ad929d75814f6f33f77e5b33690945bf6e980031ddd90ebc76ce00000000000000000000000000000000189bf269a72de2872706983835afcbd09f6f4dfcabe0241b4e9fe1965a250d230d6f793ab17ce7cac456af7be4376be6000000000000000000000000000000000d4441801d287ba8de0e2fb6b77f766dbff07b4027098ce463cab80e01eb31d9f5dbd7ac935703d68c7032fa5128ff170000000000000000000000000000000011798ea9c137acf6ef9483b489c0273d4f69296959922a352b079857953263372b8d339115f0576cfabedc185abf2086000000000000000000000000000000001498b1412f52b07a0e4f91cbf5e1852ea38fc111613523f1e61b97ebf1fd7fd2cdf36d7f73f1e33719c0b63d7bf66b8f00000000000000000000000000000000153ba4ab4fecc724c843b8f78db2db1943e91051b8cb9be2eb7e610a570f1f5925b7981334951b505cce1a3992ff05c9000000000000000000000000000000000c1e79925e9ebfd99e5d11489c56a994e0f855a759f0652cc9bb5151877cfea5c37896f56b949167b9cd2226f14333dd", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_32", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c8129292540000000000000000000000000000000013a3d49e58274c2b4a534b95b7071b6d2f42b17b887bf128627c0f8894c19d3d69c1a419373ca4bd1bb6d4efc78e1d3f000000000000000000000000000000001755d8a095e087ca66f8a118e0d2c7d5e4d8427dda8fe3049080f4aff12a8746f8c2679c310f4be0d94c5bef0414a7a600000000000000000000000000000000069c84c6419ed5c0441975ee8410065a56c65f07a4b545ff596b657dc4620c7405fd4d092b281e272773d2281a6359a8000000000000000000000000000000000e751ccbd475fe7eda1c62df626c1d37e8ae6853cc9b2109beef3e8c6f26d41a5e4e0a91bbc3371c7ab6ba780b5db41600000000000000000000000000000000184097644c9b44d543ebc0934825610590cc9f8b17ed08e9c06592bf85591d2702b18cf48a70b378926057e541eb8ac50000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c81292925400000000000000000000000000000000065d3d4be1589a6f00c85c208c44916a35349a096b09219704b4c31861ef58e6b4ea5be57a175b429e482b1038718d6c000000000000000000000000000000001755d8a095e087ca66f8a118e0d2c7d5e4d8427dda8fe3049080f4aff12a8746f8c2679c310f4be0d94c5bef0414a7a600000000000000000000000000000000069c84c6419ed5c0441975ee8410065a56c65f07a4b545ff596b657dc4620c7405fd4d092b281e272773d2281a6359a8000000000000000000000000000000000e751ccbd475fe7eda1c62df626c1d37e8ae6853cc9b2109beef3e8c6f26d41a5e4e0a91bbc3371c7ab6ba780b5db41600000000000000000000000000000000184097644c9b44d543ebc0934825610590cc9f8b17ed08e9c06592bf85591d2702b18cf48a70b378926057e541eb8ac50000000000000000000000000000000003299542a0c40efbb55d169a92ad11b4d6d7a6ed949cb0d6477803fbedcf74e4bd74de854c4c8b7f200c85c8129292540000000000000000000000000000000013a3d49e58274c2b4a534b95b7071b6d2f42b17b887bf128627c0f8894c19d3d69c1a419373ca4bd1bb6d4efc78e1d3f000000000000000000000000000000001755d8a095e087ca66f8a118e0d2c7d5e4d8427dda8fe3049080f4aff12a8746f8c2679c310f4be0d94c5bef0414a7a600000000000000000000000000000000069c84c6419ed5c0441975ee8410065a56c65f07a4b545ff596b657dc4620c7405fd4d092b281e272773d2281a6359a8000000000000000000000000000000000b8bf51e6509e81b70ff44d6e0df8f9f7bc8e33126e9f1b5a8419414878a2209c05df56cf590c8e33f484587f4a1f6950000000000000000000000000000000001c07a85ece4a1c5072fe722fb264bd1d3aaabf9db9809d5a6cb3fe17157d8fd1bfa730a26e34c87279ea81abe141fe6", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_33", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda0000000000000000000000000000000014a461f829e0a76ba89f42eb57dffb4f5544df2008163bd0ea1af824f7ff910b27418a0e4f86cb8046dc1f3139cab9af000000000000000000000000000000000213e5d2d46523203ae07f36fdeb6c304fb86f552fb9adb566711c31262629efb0b1561585f85d2ac7be174682229bd8000000000000000000000000000000000b3336b5a4f7c0d16db9615e77bcdd55b7cb5b5c1591d835f34f5c1f1468e3cef954608667fb97a32e4595f43b845612000000000000000000000000000000001869606dde1688e5ae9f1c466c5897fce7794f3735234b5af1ad3617f0688529499bbdc9f0b911840a3d99fd9c49150d00000000000000000000000000000000001bfd33df4a6059608ada794e03d7456e78317145eb4d5677c00d482ac4cf470053d33583cf602feb67b6f972c9973900000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda00000000000000000000000000000000055caff20f9f3f2ea27c64caeb6bb1880f326c64eb6ed6ee7d15da7bfeb16518f76a75f061cd347f7322e0cec634f0fc000000000000000000000000000000000213e5d2d46523203ae07f36fdeb6c304fb86f552fb9adb566711c31262629efb0b1561585f85d2ac7be174682229bd8000000000000000000000000000000000b3336b5a4f7c0d16db9615e77bcdd55b7cb5b5c1591d835f34f5c1f1468e3cef954608667fb97a32e4595f43b845612000000000000000000000000000000001869606dde1688e5ae9f1c466c5897fce7794f3735234b5af1ad3617f0688529499bbdc9f0b911840a3d99fd9c49150d00000000000000000000000000000000001bfd33df4a6059608ada794e03d7456e78317145eb4d5677c00d482ac4cf470053d33583cf602feb67b6f972c9973900000000000000000000000000000000121b540a0465b39f2f093112c20a9822fc82497105778937c9d5cdcfe039d62998d47d4f41c76482c31f39a79352beda0000000000000000000000000000000014a461f829e0a76ba89f42eb57dffb4f5544df2008163bd0ea1af824f7ff910b27418a0e4f86cb8046dc1f3139cab9af000000000000000000000000000000000213e5d2d46523203ae07f36fdeb6c304fb86f552fb9adb566711c31262629efb0b1561585f85d2ac7be174682229bd8000000000000000000000000000000000b3336b5a4f7c0d16db9615e77bcdd55b7cb5b5c1591d835f34f5c1f1468e3cef954608667fb97a32e4595f43b845612000000000000000000000000000000000197b17c5b695db49c7c8b6fd6f314da7cfdfc4dbe61c76475839c89064870fad5104234c09aee7bafc1660263b6959e0000000000000000000000000000000019e514b65a358640ea90cd3cf547d591f5ff1a13ad99c568ef70c558cbec26dd1e582cc92d849fcfce9749068d361372", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_34", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000016404bd07b6c6480af2d23301940e61817ee2e61fc625c100b31e1b324c369a583b61048dd57ab97b80b1fe6cd64c5c30000000000000000000000000000000004ac6e6077d4eddd0e23f30cfd64b7aa1525c85424224e70c15d7535e02aea7a312ef24ba2dcf70b926acb851da2530c0000000000000000000000000000000006ad07d3e8f45cedfb4279913bf0a29e37604810463d6020b4fa8c8c4977d69cffaa33e1149706f04eb237194dcafa520000000000000000000000000000000002c536dd2f05f4a7eaa33fd884262b22a2ab2a88e7b63cb08ebb67fc0f143da7d6b18dd394c424161f7cf703acdc82f50000000000000000000000000000000002d1d9ff74e20ea9b03c478784f57e7a58a21ca2b1e552319f33305f367f5ae4daf8138505f953db4f86c0ec1d96d5f0000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000003c0c619be1382199bee84862a0ac6bf4c891d22f722b6af5bfef0edd1ed8c7e9af5efb5d3fc546801f3e019329ae4e80000000000000000000000000000000004ac6e6077d4eddd0e23f30cfd64b7aa1525c85424224e70c15d7535e02aea7a312ef24ba2dcf70b926acb851da2530c0000000000000000000000000000000006ad07d3e8f45cedfb4279913bf0a29e37604810463d6020b4fa8c8c4977d69cffaa33e1149706f04eb237194dcafa520000000000000000000000000000000002c536dd2f05f4a7eaa33fd884262b22a2ab2a88e7b63cb08ebb67fc0f143da7d6b18dd394c424161f7cf703acdc82f50000000000000000000000000000000002d1d9ff74e20ea9b03c478784f57e7a58a21ca2b1e552319f33305f367f5ae4daf8138505f953db4f86c0ec1d96d5f0000000000000000000000000000000001383bc4d6c748d5c76ab4ba04f8fcd4c0fed9a49ea080c548893440819833ad72a8249f77391d5fbff78329eb319d3830000000000000000000000000000000016404bd07b6c6480af2d23301940e61817ee2e61fc625c100b31e1b324c369a583b61048dd57ab97b80b1fe6cd64c5c30000000000000000000000000000000004ac6e6077d4eddd0e23f30cfd64b7aa1525c85424224e70c15d7535e02aea7a312ef24ba2dcf70b926acb851da2530c0000000000000000000000000000000006ad07d3e8f45cedfb4279913bf0a29e37604810463d6020b4fa8c8c4977d69cffaa33e1149706f04eb237194dcafa5200000000000000000000000000000000173bdb0d0a79f1f2607867ddbf2581b4c1cc20fc0bced60ed8756aa4e79cb87c47fa722b1c8fdbe99a8208fc532327b600000000000000000000000000000000172f37eac49dd7f09adf602ebe562e5d0bd52ee2419fc08dc7fda241c0319b3f43b3ec79ab5aac246a783f13e268d4bb", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_35", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a0300000000000000000000000000000000053ee41f6a51c49b069f12de32e3e6b0b355cd2c3ba87a149c7de86136a5d9c5b7b59f2d1237964e548d1b62ec36c8db000000000000000000000000000000001913ce14bcd1d7bbb47f8efd92d7ffd155ed1990a1dbf1ee7d5e6d592a92bcbec6e865199362950afd6c8fc49b3e10a400000000000000000000000000000000020df729079e76cf06f84e3355e683e093dafad38c2ba92cf7a9faa0515f2f44d814f971046ea20116cc4b0014d7ec350000000000000000000000000000000018db123e05404eea8707f9356f417c3966312b9e41765a6fd8449879ddc4c9850c38434481b235a5bc35db1b8ee86d43000000000000000000000000000000000b4162715717e9065a3849a9294cfe39b351e57ab5a6790f3e725ad9fbf0e4b9d6a3554e872af9c37df33bb896dada5c0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a030000000000000000000000000000000014c22dcacf2e21ff447c94d81067c626b1217e58b7dc98aacab2ea3fc00b1c5e66f660d19f1c69b16571e49d13c8e1d0000000000000000000000000000000001913ce14bcd1d7bbb47f8efd92d7ffd155ed1990a1dbf1ee7d5e6d592a92bcbec6e865199362950afd6c8fc49b3e10a400000000000000000000000000000000020df729079e76cf06f84e3355e683e093dafad38c2ba92cf7a9faa0515f2f44d814f971046ea20116cc4b0014d7ec350000000000000000000000000000000018db123e05404eea8707f9356f417c3966312b9e41765a6fd8449879ddc4c9850c38434481b235a5bc35db1b8ee86d43000000000000000000000000000000000b4162715717e9065a3849a9294cfe39b351e57ab5a6790f3e725ad9fbf0e4b9d6a3554e872af9c37df33bb896dada5c0000000000000000000000000000000006bc68c6510c15a5d7bc6eebce04f7c5fce3bb02f9f89ea14ab0dfb43645b6346af7e25a8e044e842b7a3d06fe9b1a0300000000000000000000000000000000053ee41f6a51c49b069f12de32e3e6b0b355cd2c3ba87a149c7de86136a5d9c5b7b59f2d1237964e548d1b62ec36c8db000000000000000000000000000000001913ce14bcd1d7bbb47f8efd92d7ffd155ed1990a1dbf1ee7d5e6d592a92bcbec6e865199362950afd6c8fc49b3e10a400000000000000000000000000000000020df729079e76cf06f84e3355e683e093dafad38c2ba92cf7a9faa0515f2f44d814f971046ea20116cc4b0014d7ec35000000000000000000000000000000000125ffac343f97afc413ae80d40a309dfe461fe6b20eb84f8eec3a2718ec2c9f1273bcba2fa1ca59fdc924e471173d68000000000000000000000000000000000ebfaf78e267fd93f0e35e0d19feae9db125660a3dde99b028be77c6fac0116a4808aab02a29063c3c0bc4476924d04f", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_36", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000009cd91a281b96a881b20946fda164a987243c052378fcd8fee3926b75576dfa1d29a0aaca4b653da4e61da82577218080000000000000000000000000000000008be924b49e05c45419e328340f1cbcdd3350bacf832a372417d8331c942df200493a3f7f2e46ad2cdaf3544cfd8cd8600000000000000000000000000000000028cd100457f4e930fc0f55996a6b588c5361816bb853d1f522806e5ec1c455eb200343476feeb07ca77e961fc2adc1f000000000000000000000000000000000f6adad0a3bab3610165be2fadb1b020f25488a0af3d418b7d7cf1165812e17aefcbc23308ebcd31d22ba4ca5773dd87000000000000000000000000000000001657ff792e3d89d5d35767bd0cc788411b0420665a5e0704f4d2399b9d9a5ad3c027ee030fdf495e5a6e2a4c69d0571200000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000010338047b7c67c122ffb13466935623ef2338b32bbf5452f78f7abe9a13a16824c11f5520c9dac256b9d257da88d92a30000000000000000000000000000000008be924b49e05c45419e328340f1cbcdd3350bacf832a372417d8331c942df200493a3f7f2e46ad2cdaf3544cfd8cd8600000000000000000000000000000000028cd100457f4e930fc0f55996a6b588c5361816bb853d1f522806e5ec1c455eb200343476feeb07ca77e961fc2adc1f000000000000000000000000000000000f6adad0a3bab3610165be2fadb1b020f25488a0af3d418b7d7cf1165812e17aefcbc23308ebcd31d22ba4ca5773dd87000000000000000000000000000000001657ff792e3d89d5d35767bd0cc788411b0420665a5e0704f4d2399b9d9a5ad3c027ee030fdf495e5a6e2a4c69d0571200000000000000000000000000000000024ca57c2dc2a7deec3082f2f2110b6788c57a8cdc43515044d275fe7d6f20540055bde823b7b091134fb811d23468ce0000000000000000000000000000000009cd91a281b96a881b20946fda164a987243c052378fcd8fee3926b75576dfa1d29a0aaca4b653da4e61da82577218080000000000000000000000000000000008be924b49e05c45419e328340f1cbcdd3350bacf832a372417d8331c942df200493a3f7f2e46ad2cdaf3544cfd8cd8600000000000000000000000000000000028cd100457f4e930fc0f55996a6b588c5361816bb853d1f522806e5ec1c455eb200343476feeb07ca77e961fc2adc1f000000000000000000000000000000000a96371995c5333949b5e9869599fcb67222c2e44447d133e9b3e18a9e9e14a92ee03dcba86832cde7d35b35a88bcd240000000000000000000000000000000003a912710b425cc477c43ff93684249649732b1e99270bba725e990559169b505e8411fba174b6a15f90d5b3962f5399", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_37", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000011bf87b12734a6360d3dda4b452deede34470fba8e62a68f79153cc288a8e7fed98c74af862883b9861d2195a58262e0000000000000000000000000000000000a5048d860b997a9fb352e58284ebbc026622d9be73de79b2807a0c9b431f41f379c255a2db0dd67413c18217cb21b7200000000000000000000000000000000045a701a3f46ca801c02a5419c836b2ab3d74ebd6f4fd1e7dddb1965b49c9a278f6e89950e7c35ebc6724569d34e364c0000000000000000000000000000000004cb55008ccb5b2b8ece69fac7283f5a9ef9e622e2a0e42bed5bdd77faa550882643afc1759b1a327c4f2277e13a3d4f000000000000000000000000000000001690dee40c6c824dc2588fc47dbf93f68ac250b9357e1112db72ded905ed7b101b5f877bdc42d56afb5b6202403a91c4000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000008418a39124b40643dddcd6afe1dbdf930303bca65226c2fee1b95de6e080e25451f8b4f2b2b7c4633e1de6a5a7d47cb000000000000000000000000000000000a5048d860b997a9fb352e58284ebbc026622d9be73de79b2807a0c9b431f41f379c255a2db0dd67413c18217cb21b7200000000000000000000000000000000045a701a3f46ca801c02a5419c836b2ab3d74ebd6f4fd1e7dddb1965b49c9a278f6e89950e7c35ebc6724569d34e364c0000000000000000000000000000000004cb55008ccb5b2b8ece69fac7283f5a9ef9e622e2a0e42bed5bdd77faa550882643afc1759b1a327c4f2277e13a3d4f000000000000000000000000000000001690dee40c6c824dc2588fc47dbf93f68ac250b9357e1112db72ded905ed7b101b5f877bdc42d56afb5b6202403a91c4000000000000000000000000000000001305e1b9706c7fc132aea63f0926146557d4dd081b7a2913dae02bab75b0409a515d0f25ffa3eda81cf4764de15741f60000000000000000000000000000000011bf87b12734a6360d3dda4b452deede34470fba8e62a68f79153cc288a8e7fed98c74af862883b9861d2195a58262e0000000000000000000000000000000000a5048d860b997a9fb352e58284ebbc026622d9be73de79b2807a0c9b431f41f379c255a2db0dd67413c18217cb21b7200000000000000000000000000000000045a701a3f46ca801c02a5419c836b2ab3d74ebd6f4fd1e7dddb1965b49c9a278f6e89950e7c35ebc6724569d34e364c000000000000000000000000000000001535bce9acb48b6ebc4d3dbb7c236d7cc57d656210e42e9379d4f528fc0ba59bf868503d3bb8e5cd3dafdd881ec56d5c00000000000000000000000000000000037033062d13644c88c317f1c58c18e0d9b4facbbe0701ac8bbdf3c7f0c37b14034c7882d5112a94bea39dfdbfc518e7", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_38", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000f26fdf1af1b8ad442ef4494627c815ca01ae84510944788b87f4aa2c8600ed310b9579318bc617a689b916bb7731dcb00000000000000000000000000000000153cec9690a6420a10e5a5a8ca46fd9d9f90e2a139886a07b375eeecce9083a5f5418e6baf64ef0f34176e432bc5343a000000000000000000000000000000000d87c1f37f83ae78a51af9c420e2584a64337d2d2dd8dc3b64f252c521901924e5eec1d9899594db5e64c93c7a01ef020000000000000000000000000000000017078538092ace26cc88b94360871fc9a6bb9992172158ef3a16467919955083accf8d55d48c7ec462a743dbbca7b448000000000000000000000000000000000289b703157a02fc1d687a5aa595495be8bbb3eb0d70554728255a44b7820e0ee82d984d5493c800f1d9d8ca0c9381dc0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000ada13f88a645bc6082c6321e0cf2b7ac45c633fe2f0cb36aeb187fe2e50e7510df2a86b98979e8551636e94488c8ce000000000000000000000000000000000153cec9690a6420a10e5a5a8ca46fd9d9f90e2a139886a07b375eeecce9083a5f5418e6baf64ef0f34176e432bc5343a000000000000000000000000000000000d87c1f37f83ae78a51af9c420e2584a64337d2d2dd8dc3b64f252c521901924e5eec1d9899594db5e64c93c7a01ef020000000000000000000000000000000017078538092ace26cc88b94360871fc9a6bb9992172158ef3a16467919955083accf8d55d48c7ec462a743dbbca7b448000000000000000000000000000000000289b703157a02fc1d687a5aa595495be8bbb3eb0d70554728255a44b7820e0ee82d984d5493c800f1d9d8ca0c9381dc0000000000000000000000000000000012662b26f03fc8179f090f29894e86155cff4ec2def43393e054f417bbf375edd79f5032a5333ab4eba4418306ed0153000000000000000000000000000000000f26fdf1af1b8ad442ef4494627c815ca01ae84510944788b87f4aa2c8600ed310b9579318bc617a689b916bb7731dcb00000000000000000000000000000000153cec9690a6420a10e5a5a8ca46fd9d9f90e2a139886a07b375eeecce9083a5f5418e6baf64ef0f34176e432bc5343a000000000000000000000000000000000d87c1f37f83ae78a51af9c420e2584a64337d2d2dd8dc3b64f252c521901924e5eec1d9899594db5e64c93c7a01ef020000000000000000000000000000000002f98cb2305518737e92ee72e2c48d0dbdbbb1f2dc63b9d02d1a8c27dd1ba5a071dc72a8dcc7813b5757bc244357f6630000000000000000000000000000000017775ae72405e39e2db32d5b9db6637b7bbb9799e614bd783f0b785c3f2ee815367e67b15cc037fec8252735f36c28cf", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_39", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a370000000000000000000000000000000003d2c7fe67cada2213e842ac5ec0dec8ec205b762f2a9c05fa12fa120c80eba30676834f0560d11ce9939fe210ad6c6300000000000000000000000000000000057f975064a29ba6ad20d6e6d97a15bd314d6cd419948d974a16923d52b38b9203f95937a0a0493a693099e4fa17ea540000000000000000000000000000000014396ce4abfc32945a6b2b0eb4896a6b19a041d4eae320ba18507ec3828964e56719fffaa47e57ea4a2e3bd1a149b6b600000000000000000000000000000000048b3e4ba3e2d1e0dbf5955101cf038dc22e87b0855a57b631ef119d1bd19d56c38a1d72376284c8598e866b6dba37530000000000000000000000000000000007c0b98cda33be53cf4ef29d0500ff5e7a3c2df6f83dfc1c36211d7f9c696b77dfa6571169cf7935d2fb5a6463cceac6000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a3700000000000000000000000000000000162e49ebd1b50c7837336509e48ace0e7856f00ec45a76b96d1dd88eea300a8118357cafabf32ee2d06b601def523e4800000000000000000000000000000000057f975064a29ba6ad20d6e6d97a15bd314d6cd419948d974a16923d52b38b9203f95937a0a0493a693099e4fa17ea540000000000000000000000000000000014396ce4abfc32945a6b2b0eb4896a6b19a041d4eae320ba18507ec3828964e56719fffaa47e57ea4a2e3bd1a149b6b600000000000000000000000000000000048b3e4ba3e2d1e0dbf5955101cf038dc22e87b0855a57b631ef119d1bd19d56c38a1d72376284c8598e866b6dba37530000000000000000000000000000000007c0b98cda33be53cf4ef29d0500ff5e7a3c2df6f83dfc1c36211d7f9c696b77dfa6571169cf7935d2fb5a6463cceac6000000000000000000000000000000001837f0f18bed66841b4ff0b0411da3d5929e59b957a0872bce1c898a4ef0e13350bf4c7c8bcff4e61f24feca1acd5a370000000000000000000000000000000003d2c7fe67cada2213e842ac5ec0dec8ec205b762f2a9c05fa12fa120c80eba30676834f0560d11ce9939fe210ad6c6300000000000000000000000000000000057f975064a29ba6ad20d6e6d97a15bd314d6cd419948d974a16923d52b38b9203f95937a0a0493a693099e4fa17ea540000000000000000000000000000000014396ce4abfc32945a6b2b0eb4896a6b19a041d4eae320ba18507ec3828964e56719fffaa47e57ea4a2e3bd1a149b6b6000000000000000000000000000000001575d39e959d14b96f261265417ca949a248c3d46e2abb093541c103dadf58cd5b21e28c79f17b376070799492457358000000000000000000000000000000001240585d5f4c28467bccb5193e4aad78ea3b1d8dfb4716a3310fb5215a478aac3f05a8ed478486c9e703a59b9c32bfe5", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_40", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000b02ca2b0e6e0989ea917719b89caf1aa84b959e45b6238813bf02f40db95fbb3bf43d3017c3f9c57eab1be617f18032000000000000000000000000000000000b6069a2c375471d34029d2a776e56b86b0210c35d3eb530bf116205b70995e4929fc90349a7db057168dbe6c39857970000000000000000000000000000000014251a0a154731f73513b99d830f70b6fc4bcf05d11f52d2cbe9795ee8ffc5a5f717ad25770b8ecad6d0e9f8066e0cba000000000000000000000000000000001172684b21c4dfe02a55e13b57bbf105c954daec849d4c6df5276b02872c004fdf09d24f4eef366bc82eb72fe91bf70d000000000000000000000000000000001151aeb9441c5a8fabe80867b5c791420645241eae1400bbcc064d75bedd39de2ef585138fe9f65725efa1b1e5888d0300000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000efe47bf2b11dd10608a309c8aaefdbcbc2bb5e6adceef375371cface8f79668e2b7c2ce9990063a3b53e419e80e2a79000000000000000000000000000000000b6069a2c375471d34029d2a776e56b86b0210c35d3eb530bf116205b70995e4929fc90349a7db057168dbe6c39857970000000000000000000000000000000014251a0a154731f73513b99d830f70b6fc4bcf05d11f52d2cbe9795ee8ffc5a5f717ad25770b8ecad6d0e9f8066e0cba000000000000000000000000000000001172684b21c4dfe02a55e13b57bbf105c954daec849d4c6df5276b02872c004fdf09d24f4eef366bc82eb72fe91bf70d000000000000000000000000000000001151aeb9441c5a8fabe80867b5c791420645241eae1400bbcc064d75bedd39de2ef585138fe9f65725efa1b1e5888d0300000000000000000000000000000000181dc6fd3668d036a37d60b214d68f1a6ffe1949ec6b22f923e69fb373b9c70e8bcc5cdace068024c631c27f28d994e5000000000000000000000000000000000b02ca2b0e6e0989ea917719b89caf1aa84b959e45b6238813bf02f40db95fbb3bf43d3017c3f9c57eab1be617f18032000000000000000000000000000000000b6069a2c375471d34029d2a776e56b86b0210c35d3eb530bf116205b70995e4929fc90349a7db057168dbe6c39857970000000000000000000000000000000014251a0a154731f73513b99d830f70b6fc4bcf05d11f52d2cbe9795ee8ffc5a5f717ad25770b8ecad6d0e9f8066e0cba00000000000000000000000000000000088ea99f17bb06ba20c5c67aeb8fbbd19b2270986ee7c6517209679e6f84f5d43fa22daf6264c993f1d048d016e3b39e0000000000000000000000000000000008af6330f5638c0a9f339f4e8d841b955e322766457112039b2a852b37d3bc45efb67aeb216a09a8940f5e4e1a771da8", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_41", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c187229000000000000000000000000000000000096713619bf088bd9e12752cab83e9cdd58296ada8d338c86a749f00ba014087a3836ce10adaaf2e815f431235bff4f000000000000000000000000000000000161b70d0f384e589d8117938602f3d696f941c24e3c1ca5a9be090b670456c9df315d6fde52daed55c9d8335928a7a3c00000000000000000000000000000000186bb9e6f5ba70dd2c66a641d3b711844977939904c59946d4e9f49ac2d8c00890a43ccb20d4a62bfff63ce4a0a44e8e000000000000000000000000000000001995b9d697bded656236430e78726f0f6ef963db9a5a24d455c12db38aeab0f8629e5dc2d04920156f2a057d69613096000000000000000000000000000000001119b13caf82c18fadcb65c9c166914bfd822534bb9def3feae6c9e572c97c84e97fab3b345cf59358436a404075493d000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c1872290000000000000000000000000000000001099fe889d8f5ddcad09328997c7c3098ef4b4d74ab1d9f6fcbc33a03cafb59c7b28931da67950d1389fbcedca3fb5bb00000000000000000000000000000000161b70d0f384e589d8117938602f3d696f941c24e3c1ca5a9be090b670456c9df315d6fde52daed55c9d8335928a7a3c00000000000000000000000000000000186bb9e6f5ba70dd2c66a641d3b711844977939904c59946d4e9f49ac2d8c00890a43ccb20d4a62bfff63ce4a0a44e8e000000000000000000000000000000001995b9d697bded656236430e78726f0f6ef963db9a5a24d455c12db38aeab0f8629e5dc2d04920156f2a057d69613096000000000000000000000000000000001119b13caf82c18fadcb65c9c166914bfd822534bb9def3feae6c9e572c97c84e97fab3b345cf59358436a404075493d000000000000000000000000000000001329a75975b714c861064d743092866d61c4467e0c0316b78142e6db7e74538a376a09487cb09ee89583d547c187229000000000000000000000000000000000096713619bf088bd9e12752cab83e9cdd58296ada8d338c86a749f00ba014087a3836ce10adaaf2e815f431235bff4f000000000000000000000000000000000161b70d0f384e589d8117938602f3d696f941c24e3c1ca5a9be090b670456c9df315d6fde52daed55c9d8335928a7a3c00000000000000000000000000000000186bb9e6f5ba70dd2c66a641d3b711844977939904c59946d4e9f49ac2d8c00890a43ccb20d4a62bfff63ce4a0a44e8e00000000000000000000000000000000006b5813a1c1f934e8e564a7cad93dc7f57de7a9592aedeb116fa4ed6bc6452bbc0da23be10adfea4ad4fa82969e7a150000000000000000000000000000000008e760ad89fd250a9d5041ec81e51b8b66f5265037e7237f7c4a08bb83e7799f352c54c37cf70a6c61bb95bfbf8a616e", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_42", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a90000000000000000000000000000000002b03f02b45aa15b39e030c4b88c89a285dff5c4bbfe16f643f3f87d91db774f8ab7019285fda0b236ff7eec16496e5e0000000000000000000000000000000017d1ffcad218efd8b09c68eba34dbbc30b0a62ae250368ee37e5f6fd40479b8580563416afdbd92c0622c341331e20a30000000000000000000000000000000009f0eb3805ed78aa3952a0a437966258ed38cb72912756253a7a2f9113f0dd9a4e187062b0423e0587d93e904d88f50d0000000000000000000000000000000001bca57e985906695e14882f2aaeef75de5009e8717eb59962e978aa11e9d0a4d9a9e203df774cb1e993b1c6ecd6048c000000000000000000000000000000000695b11cc32740c91546eb7d554ca8b1f3afc942ad977345031be8b94b78b57a87ab049ca2d3676e039efccbf24d0c47000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a9000000000000000000000000000000001750d2e78525453f113b76f18abf2334de9755c03786fbc9233cda2364d57ed493f4fe6c2b565f4d82ff8113e9b63c4d0000000000000000000000000000000017d1ffcad218efd8b09c68eba34dbbc30b0a62ae250368ee37e5f6fd40479b8580563416afdbd92c0622c341331e20a30000000000000000000000000000000009f0eb3805ed78aa3952a0a437966258ed38cb72912756253a7a2f9113f0dd9a4e187062b0423e0587d93e904d88f50d0000000000000000000000000000000001bca57e985906695e14882f2aaeef75de5009e8717eb59962e978aa11e9d0a4d9a9e203df774cb1e993b1c6ecd6048c000000000000000000000000000000000695b11cc32740c91546eb7d554ca8b1f3afc942ad977345031be8b94b78b57a87ab049ca2d3676e039efccbf24d0c47000000000000000000000000000000001195502bc48c44b37e3f8f4e6f40295c1156f58dbc00b04b3018d237b574a20512599d18af01c50192db37cb8eb2c8a90000000000000000000000000000000002b03f02b45aa15b39e030c4b88c89a285dff5c4bbfe16f643f3f87d91db774f8ab7019285fda0b236ff7eec16496e5e0000000000000000000000000000000017d1ffcad218efd8b09c68eba34dbbc30b0a62ae250368ee37e5f6fd40479b8580563416afdbd92c0622c341331e20a30000000000000000000000000000000009f0eb3805ed78aa3952a0a437966258ed38cb72912756253a7a2f9113f0dd9a4e187062b0423e0587d93e904d88f50d0000000000000000000000000000000018446c6ba126e030ed071f87189cbd618627419c82065d26044759f6e4c7257f45021dfad1dcb34dd06b4e391329a61f00000000000000000000000000000000136b60cd7658a5d135d4bc38edff042570c7824245ed9f7a6414e9e7ab3840a99700fb620e809891b66003340db29e64", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_43", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb00000000000000000000000000000000185e8671e2ddb8e36380e39fe4eafefbac9769935603c28caac7d3f7f0f3e8ad14e925024b55aeb67d68b219875c9d79000000000000000000000000000000000546a0cb9d9f1ef9ec4a1e576fa0047557a56c0217baed8691c4085b88c84a0e12d44043aab8671393d02c4a764407ee00000000000000000000000000000000131884c1386980a181353548da9602db70ab495a661e76235c4b0a32b54acb0dfd8846e17bebd731e8041c4aebb8776600000000000000000000000000000000135b3db43511dbd8b3bd5a91880d6da1a2bd1383000e0d6f0a521bf88a5836a3b5f7cb9c0c02aa861a1c2d339f3c11f20000000000000000000000000000000000e1337271bd3302a1cab762161ccfbf2a18b7800e6efe58cf897d4adbfe4cb3bf14f4b59307fffc548179bda70c18bf000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb0000000000000000000000000000000001a28b7856a22db6e79ac4165e60addbb7dfe1f19d815032bc68fea905bd0d7709c2dafc65fe51493c964de678a30d32000000000000000000000000000000000546a0cb9d9f1ef9ec4a1e576fa0047557a56c0217baed8691c4085b88c84a0e12d44043aab8671393d02c4a764407ee00000000000000000000000000000000131884c1386980a181353548da9602db70ab495a661e76235c4b0a32b54acb0dfd8846e17bebd731e8041c4aebb8776600000000000000000000000000000000135b3db43511dbd8b3bd5a91880d6da1a2bd1383000e0d6f0a521bf88a5836a3b5f7cb9c0c02aa861a1c2d339f3c11f20000000000000000000000000000000000e1337271bd3302a1cab762161ccfbf2a18b7800e6efe58cf897d4adbfe4cb3bf14f4b59307fffc548179bda70c18bf000000000000000000000000000000000d7e1651f3e172dcca8774a7a0d58ab47178d3e759933289e1d3eb0da414160ff9e890a608bf8ccdf2820c4aea6e11cb00000000000000000000000000000000185e8671e2ddb8e36380e39fe4eafefbac9769935603c28caac7d3f7f0f3e8ad14e925024b55aeb67d68b219875c9d79000000000000000000000000000000000546a0cb9d9f1ef9ec4a1e576fa0047557a56c0217baed8691c4085b88c84a0e12d44043aab8671393d02c4a764407ee00000000000000000000000000000000131884c1386980a181353548da9602db70ab495a661e76235c4b0a32b54acb0dfd8846e17bebd731e8041c4aebb877660000000000000000000000000000000006a5d436046e0ac1975e4d24bb3e3f35c1ba3801f37705505cdeb6a86c58bf8068b43462a55155799fe2d2cc60c398b900000000000000000000000000000000191fde77c7c2b397a950f0542d2edd183a5e9404e516146697a755561ab2a9705f970b491e4c0003657d864258f391ec", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_44", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e2700000000000000000000000000000000123f973ab6bd3c2e5b0512a0c77ea0ac3003fd891e1262137f9444cd07b927b564e618205ba09220320ea1aa4564e82000000000000000000000000000000000113dc3354146ca79eb103b31b61fe8bc6f33dcb9c59a7c39d989bd9411c1afce4239034f84e6b00a084be061c73e69c0000000000000000000000000000000000ae33bf68f24978c7ea9fc58d8d76047ec45d01fdbc880e6a5ba02a22a49a3a8253afe0678ecfa6013f4849da3401df70000000000000000000000000000000012c5b00376a1dd31378ec44f2dc8e321e17185d903cfc5c15345a01c33f2f151b21b938d31816550594a7a1e7216c5b00000000000000000000000000000000013d79f825c44775c68e90932d0496a5cae53f04a1edb19f8abeb5948a3dd325dfec4a8b6f58c7fbca9cf3c09b909d8b2000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e270000000000000000000000000000000007c17aaf82c2aa6bf01695157bcd0c2b34734dfbd572b0abe79c8dd3eef7ce6eb9c5e7de55b36ddf87f05e55ba9ac28b00000000000000000000000000000000113dc3354146ca79eb103b31b61fe8bc6f33dcb9c59a7c39d989bd9411c1afce4239034f84e6b00a084be061c73e69c0000000000000000000000000000000000ae33bf68f24978c7ea9fc58d8d76047ec45d01fdbc880e6a5ba02a22a49a3a8253afe0678ecfa6013f4849da3401df70000000000000000000000000000000012c5b00376a1dd31378ec44f2dc8e321e17185d903cfc5c15345a01c33f2f151b21b938d31816550594a7a1e7216c5b00000000000000000000000000000000013d79f825c44775c68e90932d0496a5cae53f04a1edb19f8abeb5948a3dd325dfec4a8b6f58c7fbca9cf3c09b909d8b2000000000000000000000000000000001454d4a82163a155446467164904cefd7e1e3c67ae99bf65c581a75c72716fb011e2fd030eaf3d36977fbb0ff5156e2700000000000000000000000000000000123f973ab6bd3c2e5b0512a0c77ea0ac3003fd891e1262137f9444cd07b927b564e618205ba09220320ea1aa4564e82000000000000000000000000000000000113dc3354146ca79eb103b31b61fe8bc6f33dcb9c59a7c39d989bd9411c1afce4239034f84e6b00a084be061c73e69c0000000000000000000000000000000000ae33bf68f24978c7ea9fc58d8d76047ec45d01fdbc880e6a5ba02a22a49a3a8253afe0678ecfa6013f4849da3401df700000000000000000000000000000000073b61e6c2de0969138ce3671582c9b58305c5abefb54cfe13eb3284c2be04d26c906c717fd29aaf60b485e18de8e4fb0000000000000000000000000000000006297267dd3b6f3de2329e837302427ab6235b3ad4a9f8c6bb45795852d3c3c61fe75747bbc78043102fc3f646f5d1f9", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_45", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000002ec930fb58c898ede931384c5a5f9edd2f5c70b8c3794edb83a12f23be5400949f95e81c96c666c1a72dffb50b811580000000000000000000000000000000006ccaf6c08f831be9c99a97714f5257a985cc2a29b5f5c81bc8d794dd0d8d1a41eb5413bed654c0140dbacfd0dda9e1800000000000000000000000000000000144e9cf91580800dfaa47c98ff7d002a576be76d9e44ae1f8335a3f733e1162af0636372e143174d872c7ea89f4c743900000000000000000000000000000000101e143b838c8a3f5f80fb1412081091b875230f1e2f9cf374d4bcd595392f6daa9552dbb6d5834e27b1b3dafe061ed300000000000000000000000000000000072463400b3e875395a1cdd31d73d51396e34347cd86d9f6f43f42253b3cdb24b89ed7434b1522af95ba1ee2d29ed1bb000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000017147eda83f35d0b6c8894317da5b2e991818479674d7dd1aef6bfaebacbb61ad4b2a17ce7e799939f8c2004af4799530000000000000000000000000000000006ccaf6c08f831be9c99a97714f5257a985cc2a29b5f5c81bc8d794dd0d8d1a41eb5413bed654c0140dbacfd0dda9e1800000000000000000000000000000000144e9cf91580800dfaa47c98ff7d002a576be76d9e44ae1f8335a3f733e1162af0636372e143174d872c7ea89f4c743900000000000000000000000000000000101e143b838c8a3f5f80fb1412081091b875230f1e2f9cf374d4bcd595392f6daa9552dbb6d5834e27b1b3dafe061ed300000000000000000000000000000000072463400b3e875395a1cdd31d73d51396e34347cd86d9f6f43f42253b3cdb24b89ed7434b1522af95ba1ee2d29ed1bb000000000000000000000000000000000178e6828261ee6855b38234ed15c27551bb1648ac6ec9a9e70744643cd1f134b2309dd0c34b1e59ddfe3f831ab814c90000000000000000000000000000000002ec930fb58c898ede931384c5a5f9edd2f5c70b8c3794edb83a12f23be5400949f95e81c96c666c1a72dffb50b811580000000000000000000000000000000006ccaf6c08f831be9c99a97714f5257a985cc2a29b5f5c81bc8d794dd0d8d1a41eb5413bed654c0140dbacfd0dda9e1800000000000000000000000000000000144e9cf91580800dfaa47c98ff7d002a576be76d9e44ae1f8335a3f733e1162af0636372e143174d872c7ea89f4c74390000000000000000000000000000000009e2fdaeb5f35c5aeb9aaca231439c45ac022875d55575cbf25c15cb6177c6b67416ad22fa7e7cb1924d4c2501f98bd80000000000000000000000000000000012dcaeaa2e415f46b579d9e325d7d7c3cd94083d25fe38c872f1907bbb741aff660d28bb663edd502444e11d2d60d8f0", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_46", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f100000000000000000000000000000000033f481fc62ab0a249561d180da39ff641a540c9c109cde41946a0e85d18c9d60b41dbcdec370c5c9f22a9ee9de00ccd000000000000000000000000000000001354146aa546754e10ada6e0fe98f04f5f3a3f8a8350d0295e02b8e9c80735b04c3061412e08ddb13c80ac36e5638e540000000000000000000000000000000012ab26513534b4dc1b71eec46b73199c4157ba9369e66fbe4d2d8f62237fc7c6fad31854ebd878f989b8c5cf35c7cfe0000000000000000000000000000000000eb731bc99cdadf7f2280385c7e17d72d34bcbdbdc725d5bc94e841036115e8cb95df08084221696f9be479821fbdd7400000000000000000000000000000000143ba7d3f66445249d9a81a6949f24ff40e7c4d270fa044a8b80200a4369b07806c5497a0ef9e9dbb87b9e63694623ee0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f10000000000000000000000000000000016c1c9ca735535f801c58a9e35a80ce122d20abb327b44db4dea31b899982c4e136a2430c51cf3a31adc5611621f9dde000000000000000000000000000000001354146aa546754e10ada6e0fe98f04f5f3a3f8a8350d0295e02b8e9c80735b04c3061412e08ddb13c80ac36e5638e540000000000000000000000000000000012ab26513534b4dc1b71eec46b73199c4157ba9369e66fbe4d2d8f62237fc7c6fad31854ebd878f989b8c5cf35c7cfe0000000000000000000000000000000000eb731bc99cdadf7f2280385c7e17d72d34bcbdbdc725d5bc94e841036115e8cb95df08084221696f9be479821fbdd7400000000000000000000000000000000143ba7d3f66445249d9a81a6949f24ff40e7c4d270fa044a8b80200a4369b07806c5497a0ef9e9dbb87b9e63694623ee0000000000000000000000000000000001ea88d0f329135df49893406b4f9aee0abfd74b62e7eb5576d3ddb329fc4b1649b7c228ec39c6577a069c0811c952f100000000000000000000000000000000033f481fc62ab0a249561d180da39ff641a540c9c109cde41946a0e85d18c9d60b41dbcdec370c5c9f22a9ee9de00ccd000000000000000000000000000000001354146aa546754e10ada6e0fe98f04f5f3a3f8a8350d0295e02b8e9c80735b04c3061412e08ddb13c80ac36e5638e540000000000000000000000000000000012ab26513534b4dc1b71eec46b73199c4157ba9369e66fbe4d2d8f62237fc7c6fad31854ebd878f989b8c5cf35c7cfe0000000000000000000000000000000000b49e02d9fb238a258f3a4307b6a2f64912b7fa91712b5639de24e90c09f9797654e0f7e2d31e968c040b867de03cd370000000000000000000000000000000005c56a16431ba175ad81260faeac87d8238f86b2828b0e74dbb0b296b34745ac17e6b684a25a16240183619c96b986bd", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_47", - "Gas": 184000, + "Gas": 194000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be10000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe90000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000068edef3169c58920509ed4e7069229bd8038a45d2ce5773451cc18b396d2838c9539ecb52298a27eebd714afacb907c0000000000000000000000000000000004c5346765a62f2d2e700aadccf747acb3322c250435ce2cf358c08f1e286427cabace052327c4b30135c8482c5c0eb90000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be100000000000000000000000000000000084486ebc81878331aab7d6f53ca3c773fda7b181b56a93e5ee0bfa189afbb7fd7a05c5bea35ec1054c0e1ddc2e2dac20000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000068edef3169c58920509ed4e7069229bd8038a45d2ce5773451cc18b396d2838c9539ecb52298a27eebd714afacb907c0000000000000000000000000000000004c5346765a62f2d2e700aadccf747acb3322c250435ce2cf358c08f1e286427cabace052327c4b30135c8482c5c0eb90000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be10000000000000000000000000000000011bc8afe71676e6730702a46ef817060249cd06cd82e6981085012ff6d013aa4470ba3a2c71e13ef653e1e223d1ccfe90000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000137232f722e38e084611ba67d2e28a3b8c73c13f20b6bb4c22141115bd43cdeb555861335f2a75d7cb418eb505341a2f00000000000000000000000000000000153bdd82d3d9b76d1cab9d087654652ab1451f5fef4f449273d81211d88891fc53f131f98e2c3b4cb8c937b7d3a39bf20000000000000000000000000000000008d8c4a16fb9d8800cce987c0eadbb6b3b005c213d44ecb5adeed713bae79d606041406df26169c35df63cf972c94be100000000000000000000000000000000084486ebc81878331aab7d6f53ca3c773fda7b181b56a93e5ee0bfa189afbb7fd7a05c5bea35ec1054c0e1ddc2e2dac20000000000000000000000000000000013a3de1d25380c44ca06321151e89ca22210926c1cd4e3c1a9c3aa6c709ab5fdd00f8df19243ce058bc753ccf03424ed000000000000000000000000000000001657dbebf712cbda6f15d1d387c87b3fb9b386d5d754135049728a2a856ba2944c741024131a93c78655fdb7bfe3c80300000000000000000000000000000000137232f722e38e084611ba67d2e28a3b8c73c13f20b6bb4c22141115bd43cdeb555861335f2a75d7cb418eb505341a2f00000000000000000000000000000000153bdd82d3d9b76d1cab9d087654652ab1451f5fef4f449273d81211d88891fc53f131f98e2c3b4cb8c937b7d3a39bf2", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_48", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000fa57c1436615442bbb049d08ac46e501c07736cd239298752bb94d1904bd38cc687759987cadd99bd3c4d45ba07193a000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000f6fdc4e5dceb555c9eb4c912fedbfb3cb1b842345f73ded02cfaf8d397c4378809721094aa4a4113a368e0787effeb500000000000000000000000000000000143ac06258c579c11c05569669a2a10babc63ecc86f85c91791d8ea48af700a2067c5f13d2700b8d5cf59bcca8fbf7c600000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000a5b95d6031e92578f6b5de5b8873e87486fd818214be93814753dcf6665229758248a6529892265fcc2b2ba45f89171000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000f6fdc4e5dceb555c9eb4c912fedbfb3cb1b842345f73ded02cfaf8d397c4378809721094aa4a4113a368e0787effeb500000000000000000000000000000000143ac06258c579c11c05569669a2a10babc63ecc86f85c91791d8ea48af700a2067c5f13d2700b8d5cf59bcca8fbf7c600000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000fa57c1436615442bbb049d08ac46e501c07736cd239298752bb94d1904bd38cc687759987cadd99bd3c4d45ba07193a000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000a91359bdbb1314481305b25135ded23995bc761ad8dd4d264612313bd34b2ab9e14def566af5bee7fc871f8780fabf60000000000000000000000000000000005c65187e0ba6cd92f16511fd9a90bcbb8b10cb86c8cb62dee1343fc6bb9f582182fa0eadee3f4725d0964335703b2e500000000000000000000000000000000120ddc1cd9e3a7b298673b1036d162c31dbb35d6e83b39b2564b3be16e446a836c96907e8a6af1e677e906bf5ed73159000000000000000000000000000000000a5b95d6031e92578f6b5de5b8873e87486fd818214be93814753dcf6665229758248a6529892265fcc2b2ba45f89171000000000000000000000000000000000dd75b4aebed3bd6bd020c3af671aaed67bf1582aceb6c8b5a476968c0c500753e4d0f3276341b79d87af38850893d92000000000000000000000000000000000e9b3be06afd6157eb6df52be4f2db2bcccd650f720661f8d6fcff3f71d69e152e17100ce60b7b90a7f798c4cdd02209000000000000000000000000000000000a91359bdbb1314481305b25135ded23995bc761ad8dd4d264612313bd34b2ab9e14def566af5bee7fc871f8780fabf60000000000000000000000000000000005c65187e0ba6cd92f16511fd9a90bcbb8b10cb86c8cb62dee1343fc6bb9f582182fa0eadee3f4725d0964335703b2e5", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_49", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b600000000000000000000000000000000175bdd42583cbbf733242510c152380525aff7649273acef1ec20569804ffba7f029ca06878dbafde84540cece173822000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc500000000000000000000000000000000192f3e8ae2588f9223de77f5e872115f1edec96d6a0f403a47879410c2562e79853c9a706e423b83fbf3154234edb6f80000000000000000000000000000000015084258d58fd1a07bbdb2e90df5a56ae15a787037eff4fe55f660e45f04820c6fc8982303b5e82074cf0cdcbde61307000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b60000000000000000000000000000000002a534a7e1432aa317f782a581f974d23ec75420611165d0486ecd377660fa7c2e8235f829c64501d1b9bf3131e87289000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc500000000000000000000000000000000192f3e8ae2588f9223de77f5e872115f1edec96d6a0f403a47879410c2562e79853c9a706e423b83fbf3154234edb6f80000000000000000000000000000000015084258d58fd1a07bbdb2e90df5a56ae15a787037eff4fe55f660e45f04820c6fc8982303b5e82074cf0cdcbde61307000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b600000000000000000000000000000000175bdd42583cbbf733242510c152380525aff7649273acef1ec20569804ffba7f029ca06878dbafde84540cece173822000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc50000000000000000000000000000000000d1d35f57275708273d2fc05ad99b78459882178975d2851fa93e90345ac7aa996f658e4311c47bbe0beabdcb11f3b30000000000000000000000000000000004f8cf9163f014f9cf5df4cd3556076c831cd314bb951dc1113a71bc97ac7417aee367dbad9e17df452ff323421997a4000000000000000000000000000000000e3ccaa4fa358a5a885094cbb0b8baa106fbcca66edbe31511ac2f6f3d14edbd8701979d6e4690853555c625091392b60000000000000000000000000000000002a534a7e1432aa317f782a581f974d23ec75420611165d0486ecd377660fa7c2e8235f829c64501d1b9bf3131e87289000000000000000000000000000000000057bbf62cdf3c56e146f60f8ce6b6bdebe7aae7d9410c6902c7a505b589ae26ce3ab67d9b8da047185f9d37ab27595e000000000000000000000000000000000843e55c07bba3573592d3f649938654a5c51f9ced0f92bcb3e4f431141fe91a1de3695324b21e31dd2ae0a328055cc50000000000000000000000000000000000d1d35f57275708273d2fc05ad99b78459882178975d2851fa93e90345ac7aa996f658e4311c47bbe0beabdcb11f3b30000000000000000000000000000000004f8cf9163f014f9cf5df4cd3556076c831cd314bb951dc1113a71bc97ac7417aee367dbad9e17df452ff323421997a4", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_50", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000cbf7a31e6fef4f4664bca4bc87ec7c0b12ced7224300aa4e1a6a7cbdedfcef07482b5d20fa607e3f03fdd6dd03fd10c000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f000000000000000000000000000000000477b55bd7fff14e0d1807bfc21edb9481be01c12abb1460d78b1aafe42953730167e32e694c2ddfb0d442e8cea57d460000000000000000000000000000000004b884c6ea36f189dbc3c0e9cf88f08baf5d868579998f63b752e61fcce3cf2c901bb9b51959d3597c4ef53cff41fc260000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000d4197b85280f1a5e4cfdd6a7acce516b34a5e12cf55081a858a2ad517d12733aa294a2ca1adf81bc9bf22922fbfd99f000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f000000000000000000000000000000000477b55bd7fff14e0d1807bfc21edb9481be01c12abb1460d78b1aafe42953730167e32e694c2ddfb0d442e8cea57d460000000000000000000000000000000004b884c6ea36f189dbc3c0e9cf88f08baf5d868579998f63b752e61fcce3cf2c901bb9b51959d3597c4ef53cff41fc260000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000cbf7a31e6fef4f4664bca4bc87ec7c0b12ced7224300aa4e1a6a7cbdedfcef07482b5d20fa607e3f03fdd6dd03fd10c000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f0000000000000000000000000000000015895c8e617ff54c3e039ff6812cd142e2b949c3c8c9fe5e8fa5b7f11287a2b11d441cd04807d220092abd17315a2d650000000000000000000000000000000015488d234f48f5106f57e6cc73c2bc4bb519c4ff79eb835bafddec8129cd26f78e90464997fa2ca63db00ac300bdae850000000000000000000000000000000001bc359baeac07a93aca770174ea6444aac9f04affdaa77c8a47b30c60ee2b527c061a4344139264e541d4134f42bfd0000000000000000000000000000000000d4197b85280f1a5e4cfdd6a7acce516b34a5e12cf55081a858a2ad517d12733aa294a2ca1adf81bc9bf22922fbfd99f000000000000000000000000000000000bcec23e092111b38a2f7dc957cf455312ffd33528d084204314492440d29248cb5719346a4f7a490d17ba149e30de5200000000000000000000000000000000194605e5680cc80bd2685949efa3cce90d345b9151ba72f3adf226dd299c23464c4344a42b8834131a51a4156038585f0000000000000000000000000000000015895c8e617ff54c3e039ff6812cd142e2b949c3c8c9fe5e8fa5b7f11287a2b11d441cd04807d220092abd17315a2d650000000000000000000000000000000015488d234f48f5106f57e6cc73c2bc4bb519c4ff79eb835bafddec8129cd26f78e90464997fa2ca63db00ac300bdae85", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_51", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa0000000000000000000000000000000005aa892b0a056ff61706430f1daa3f0263dc01337eadabd8a7fd58152affd9aaa329e8c11ea98692134d9718cb4119bf00000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac800000000000000000000000000000000183b7b917aaaa94f0ea9959273ed4701102346be2a9d72531bd18fef908ecb0579a6ac10ed42a91f1147fc3a05b2e81900000000000000000000000000000000070983b1582a97d9797782e4f960a298aaa8ec509720495acdbf176d8ecb9ec9e041c2b5ed6b7dfb46fdeaae3fb341500000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa00000000000000000000000000000000145688bf2f7a76a4341564a725a16dd5009b4a5174d766e6bf337a8bcbb11c797b82173d92aa796da6b168e734be90ec00000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac800000000000000000000000000000000183b7b917aaaa94f0ea9959273ed4701102346be2a9d72531bd18fef908ecb0579a6ac10ed42a91f1147fc3a05b2e81900000000000000000000000000000000070983b1582a97d9797782e4f960a298aaa8ec509720495acdbf176d8ecb9ec9e041c2b5ed6b7dfb46fdeaae3fb341500000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa0000000000000000000000000000000005aa892b0a056ff61706430f1daa3f0263dc01337eadabd8a7fd58152affd9aaa329e8c11ea98692134d9718cb4119bf00000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac80000000000000000000000000000000001c59658bed53d4b3c721223cf5e65d6545404c6c8e7a06c4b5f42b166222b1ea50553edc41156e0a8b703c5fa4cc2920000000000000000000000000000000012f78e38e1554ec0d1a424d149eb0a3eb9ce5f345c64c9649971bb3367e5575a3e6a3d48c3e8820473011551c04c695b0000000000000000000000000000000006b06ae8cb0981bf5167ad51e19d132db77548c4376697f855c8397b835743c42771096ed7b0a4b18af9494e42ee89aa00000000000000000000000000000000145688bf2f7a76a4341564a725a16dd5009b4a5174d766e6bf337a8bcbb11c797b82173d92aa796da6b168e734be90ec00000000000000000000000000000000073341309b6fbabb18f3cf0842817905e9248db98b582dc0efb2b741a80cdbb13d0df4bce920f257996b95029891a36f0000000000000000000000000000000012d19e09dc254bd1e84afce75aa215c96dd38bcac3f6d4cf08d9e2e8d20345b7c534a0b14ffcdfd4fa3600730e2eeac80000000000000000000000000000000001c59658bed53d4b3c721223cf5e65d6545404c6c8e7a06c4b5f42b166222b1ea50553edc41156e0a8b703c5fa4cc2920000000000000000000000000000000012f78e38e1554ec0d1a424d149eb0a3eb9ce5f345c64c9649971bb3367e5575a3e6a3d48c3e8820473011551c04c695b", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_52", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a0300000000000000000000000000000000166ce33c0482b5957c6e746c16908ba579d6402b230bc977d3ff29ac2a4a800748d9c14608f2519e2ac4d1fe4daf29b2000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b0000000000000000000000000000000010f7bf9f6711ba723bb71a004a90109ee22be6643d56d410da18103ef44a1b3d50f10c4b94222c7f05fd3c28acbdc8ee00000000000000000000000000000000007af41f09e6d0adcb1935d6a93ea1f6156fa0157a63f265a3a7ceffe82f6635b8511e7e8f21e8f3be7a73513ff597b10000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a030000000000000000000000000000000003942eae34fd3104cead334a2cbb2131eaa10b59d07949479331a8f4cc66761cd5d23eb8a861ae618f3a2e01b25080f9000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b0000000000000000000000000000000010f7bf9f6711ba723bb71a004a90109ee22be6643d56d410da18103ef44a1b3d50f10c4b94222c7f05fd3c28acbdc8ee00000000000000000000000000000000007af41f09e6d0adcb1935d6a93ea1f6156fa0157a63f265a3a7ceffe82f6635b8511e7e8f21e8f3be7a73513ff597b10000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a0300000000000000000000000000000000166ce33c0482b5957c6e746c16908ba579d6402b230bc977d3ff29ac2a4a800748d9c14608f2519e2ac4d1fe4daf29b2000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b000000000000000000000000000000000909524ad26e2c280f648db5f8bb9c38824b6520b62e3eae8d18c2620266dae6cdbaf3b31d31d380b401c3d75341e1bd0000000000000000000000000000000019861dcb2f9915ec800271df9a0d0ae14f07ab6f79212059c38903a10e818fee665ae1802232170bfb848caec00a12fa0000000000000000000000000000000015dc9f87213e4781863ad43f6bbccd547967d9bcf6a35d95d530cbfbf0d7307981aee5bc4ccd41254841651717393a030000000000000000000000000000000003942eae34fd3104cead334a2cbb2131eaa10b59d07949479331a8f4cc66761cd5d23eb8a861ae618f3a2e01b25080f9000000000000000000000000000000000dca3b392f75583b5266a8def02bd66bf44f26b8a0a27aced57299756cffaf9e1af3538beb08b2a5939b745c8f016fee000000000000000000000000000000000d7feafc9ec0935d5b7be7cd5e2a3c57b667aba9fcc87fd5b8a585010be6958c4e7538a6d2a1f46c9641ff7b8598d74b000000000000000000000000000000000909524ad26e2c280f648db5f8bb9c38824b6520b62e3eae8d18c2620266dae6cdbaf3b31d31d380b401c3d75341e1bd0000000000000000000000000000000019861dcb2f9915ec800271df9a0d0ae14f07ab6f79212059c38903a10e818fee665ae1802232170bfb848caec00a12fa", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_53", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f6046300000000000000000000000000000000148b5454f9b9868aefd2accc3318ddabfe618c5026e8c04f8a6bce76cd88e350bebcd779f2021fe7ceda3e8b4d438a0b0000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a0000000000000000000000000000000003a6cc74cc398f38d535b4341faa37c968daf2009c3f05ace1f938b33bbe4002d81d18d30c2c856b21afe7a22b83c37a000000000000000000000000000000000452d1b2da6392f9df1bfd35e4575c565333703b2f83f56e0a88a0c8195968c5321296b07f6750584e23597304a5472e00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f60463000000000000000000000000000000000575bd953fc6600f5b48faea1032cf2b6615bf34cc9c526fdcc5042a292812d35fef2884bf51e017eb24c174b2bc20a00000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a0000000000000000000000000000000003a6cc74cc398f38d535b4341faa37c968daf2009c3f05ace1f938b33bbe4002d81d18d30c2c856b21afe7a22b83c37a000000000000000000000000000000000452d1b2da6392f9df1bfd35e4575c565333703b2f83f56e0a88a0c8195968c5321296b07f6750584e23597304a5472e00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f6046300000000000000000000000000000000148b5454f9b9868aefd2accc3318ddabfe618c5026e8c04f8a6bce76cd88e350bebcd779f2021fe7ceda3e8b4d438a0b0000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a00000000000000000000000000000000165a45756d46576175e5f38223a1750dfb9c598457460d12853799edbaf2b621468ee72ba5277a94984f185dd47be7310000000000000000000000000000000015ae40375f1c53a06bffaa805ef450811143db49c4011d515ca831d8dd578d5eec99694e31ecafa76bdba68cfb5a637d00000000000000000000000000000000171fbc9cec717964c4324aa0d7dcf56a59b947c24a9092157f4f8c78ae43b8e4222fd1e8acdbf5989d0d17ea10f60463000000000000000000000000000000000575bd953fc6600f5b48faea1032cf2b6615bf34cc9c526fdcc5042a292812d35fef2884bf51e017eb24c174b2bc20a00000000000000000000000000000000019e05ccf064f7cdad9748d328170b3e4bcfa6787dbfa93011d16f6d031648faa10dbfb7cc4d7c884d75480c4c864bb75000000000000000000000000000000001999d5f54ee66b3c0dedf9f46450e0ed463fa9c6cd9e0db317a35ec6ce78efae9bea9b64e3b2aaf7f70fbcace71b075a00000000000000000000000000000000165a45756d46576175e5f38223a1750dfb9c598457460d12853799edbaf2b621468ee72ba5277a94984f185dd47be7310000000000000000000000000000000015ae40375f1c53a06bffaa805ef450811143db49c4011d515ca831d8dd578d5eec99694e31ecafa76bdba68cfb5a637d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_54", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a00000000000000000000000000000000016d2c22eabd4a06a5ae67b890a25fbede7d0e96c625b80329b19be6aa861f44b6e85778130d0bdf69f2abd491ee9751a0000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf780000000000000000000000000000000007a9cf48dbe005c5c59b2c731cf4117e5fadc9cb2cd8f486f1ed58b2909092ee8f36d88b8f719db94715641b418ab4240000000000000000000000000000000004ba40d4766b91bf8da1cc2526f62791a1b5f6fc24ffc54b522dd30cde2d29a6a6f81e8429d518710843d43705f3b4e60000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a000000000000000000000000000000000032e4fbb8dab462ff0352c2d3925b0e97ca662189129928ccc1714364e4f01d8b026887d808342091ad442b6e11635910000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf780000000000000000000000000000000007a9cf48dbe005c5c59b2c731cf4117e5fadc9cb2cd8f486f1ed58b2909092ee8f36d88b8f719db94715641b418ab4240000000000000000000000000000000004ba40d4766b91bf8da1cc2526f62791a1b5f6fc24ffc54b522dd30cde2d29a6a6f81e8429d518710843d43705f3b4e60000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a00000000000000000000000000000000016d2c22eabd4a06a5ae67b890a25fbede7d0e96c625b80329b19be6aa861f44b6e85778130d0bdf69f2abd491ee9751a0000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf7800000000000000000000000000000000125742a15d9fe0d485807b4326579b5904c981b9c6ac1e38754379ee662063358f75277321e2624672e99be4be74f687000000000000000000000000000000001546d115c31454dabd79db911c558545c2c15488ce854d741502ff941883cc7d77b3e17a877ee78eb1bb2bc8fa0bf5c50000000000000000000000000000000018724e2b9a2f383329207ee85577805f35d5c5bb9f6903e3c962e57ab7eb9d1639d1e9adbde53499863b299f576325a000000000000000000000000000000000032e4fbb8dab462ff0352c2d3925b0e97ca662189129928ccc1714364e4f01d8b026887d808342091ad442b6e11635910000000000000000000000000000000004506802747afd8777904c46ad9bf0b06859a1b395ca3474a93ca4151ca158d2fd41b3a21e0ce0bc950b3241256e10d800000000000000000000000000000000115f41d2c173c3c2c7ecdff1a4aaa3c2e67c803db7a588d6143fe913961eef743d8b1f9d32e3ef1fc0475f41572faf7800000000000000000000000000000000125742a15d9fe0d485807b4326579b5904c981b9c6ac1e38754379ee662063358f75277321e2624672e99be4be74f687000000000000000000000000000000001546d115c31454dabd79db911c558545c2c15488ce854d741502ff941883cc7d77b3e17a877ee78eb1bb2bc8fa0bf5c5", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_55", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000f1afe9b199362f51cc84edb1d3cf2faf8e5bc0a734a646851ab83e213f73a3734114f255b611ec18db75694dcb0df910000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c7952820000000000000000000000000000000008ceb842a17953578013ceee519a28ef1b37f73e13564def5ffe08a64dc53aa680784e26138176c89269477ee003d16700000000000000000000000000000000159791b6f2c26ed611ca40bfbd2059c15cfec9d073a84254ad9b509ef786d62d17fdc67ab13092cf0b7b3482866f4c320000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000ae6134f1fec83a52e5358db260eb9dc6b918f7a803aae5715854ebee2b9bbecea9ab0d955f2e13e2c47a96b234ecb1a0000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c7952820000000000000000000000000000000008ceb842a17953578013ceee519a28ef1b37f73e13564def5ffe08a64dc53aa680784e26138176c89269477ee003d16700000000000000000000000000000000159791b6f2c26ed611ca40bfbd2059c15cfec9d073a84254ad9b509ef786d62d17fdc67ab13092cf0b7b3482866f4c320000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000f1afe9b199362f51cc84edb1d3cf2faf8e5bc0a734a646851ab83e213f73a3734114f255b611ec18db75694dcb0df910000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c79528200000000000000000000000000000000113259a798069342cb07d8c7f1b183e8493f5446e02ec4d00732c9faa8ebbb7d9e33b1d89dd289372795b8811ffbd944000000000000000000000000000000000469803346bd77c4395166f6862b5316077881b47fdcd06ab9958201ff2a1ff706ae398400236d30ae83cb7d79905e790000000000000000000000000000000010fcf5e5e478ac6442b218ce261878d8f61b405c0b9549512e23ead1f26a2240771993f8c039fbce4008a1707aeaaf25000000000000000000000000000000000ae6134f1fec83a52e5358db260eb9dc6b918f7a803aae5715854ebee2b9bbecea9ab0d955f2e13e2c47a96b234ecb1a0000000000000000000000000000000019cc0ec24da141f27b38a53aef0b3d93c4c2b981c1b248014be277002d39d7bde66f6957a659a89adcd3477dfe4f897a000000000000000000000000000000000e4c01d7425e35be84e3cf806aa76a079cf4557732980f7e8f8ce9a879483e28f223694ed8dd45706e12272f4c79528200000000000000000000000000000000113259a798069342cb07d8c7f1b183e8493f5446e02ec4d00732c9faa8ebbb7d9e33b1d89dd289372795b8811ffbd944000000000000000000000000000000000469803346bd77c4395166f6862b5316077881b47fdcd06ab9958201ff2a1ff706ae398400236d30ae83cb7d79905e79", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_56", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000019275491a51599736722295659dd5589f4e3f558e3d45137a66b4c8066c7514ae66ec35c862cd00bce809db528040c04000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf000000000000000000000000000000001272c63693873e1dabe2c2739310f627d3d9b5bcaa615402c3849ffd8dfe72b40fea4a068064655f2c8f46f074e6518d0000000000000000000000000000000000161a8e5e1de10938e5bce241ae73d76173022127822d744b23e656095c28f2f8d142ceb48b72a1dbc36b6143f8af95000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000000d9bd58946a4d26e3f97e5fe96e574d6f93562c0fb0c187c0c586208fe9a4d9383d3ca22b272ff3eb7e624ad7fb9ea7000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf000000000000000000000000000000001272c63693873e1dabe2c2739310f627d3d9b5bcaa615402c3849ffd8dfe72b40fea4a068064655f2c8f46f074e6518d0000000000000000000000000000000000161a8e5e1de10938e5bce241ae73d76173022127822d744b23e656095c28f2f8d142ceb48b72a1dbc36b6143f8af95000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000019275491a51599736722295659dd5589f4e3f558e3d45137a66b4c8066c7514ae66ec35c862cd00bce809db528040c04000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf00000000000000000000000000000000078e4bb3a5f8a87c9f38e542b03ab6af909d95c84923bebca3ac32a368b283700ec1b5f830ef9aa08d6fb90f8b19591e0000000000000000000000000000000019eaf75bdb6205911235ead4019d390003044963cc02e54b1c0cec4aed54cd3125dabd2ffcc88d5dde3b949ebc06fb16000000000000000000000000000000000f75bc9feb74110697c9f353686910c6246e587dd71d744aab99917f1aea7165b41deb333e6bd14843f28b2232f799830000000000000000000000000000000000d9bd58946a4d26e3f97e5fe96e574d6f93562c0fb0c187c0c586208fe9a4d9383d3ca22b272ff3eb7e624ad7fb9ea7000000000000000000000000000000000040d03956c821010969a67c91a6546800c5aa7ac392b16a9895136c941f4ca9f378c55446161562feace3b5b65f3c4f000000000000000000000000000000000e4b299f9fb25caec655d21c390bdad3c1256ca29faa33466a13aaa6d86310106d95fc8d8a0409fbd228fd3be7965cdf00000000000000000000000000000000078e4bb3a5f8a87c9f38e542b03ab6af909d95c84923bebca3ac32a368b283700ec1b5f830ef9aa08d6fb90f8b19591e0000000000000000000000000000000019eaf75bdb6205911235ead4019d390003044963cc02e54b1c0cec4aed54cd3125dabd2ffcc88d5dde3b949ebc06fb16", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_57", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000a896c5a84cbd03e52ae77000eb0285f5704993664a744a89ff6b346efd2efec1a519b67229a3b87e1f80e6aa17e2946000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a220000000000000000000000000000000018a236ea02b1971d6e193a6eb92e1298956679d86864042fb6a0c36dd91c0e385944d779dedd0149fa8a1b3d6a07949d00000000000000000000000000000000048eac7d116b5a7906bce070e2b51ee7c4c493f1415abdb6fd2d35676036d3b741d14b7135419645a6906018e9d3f150000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000f77a58fb4b4165bf86d30b6349b84780d72b24e8eddce16c73a1f5a06de0638045a64978eb9c477d806f1955e818165000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a220000000000000000000000000000000018a236ea02b1971d6e193a6eb92e1298956679d86864042fb6a0c36dd91c0e385944d779dedd0149fa8a1b3d6a07949d00000000000000000000000000000000048eac7d116b5a7906bce070e2b51ee7c4c493f1415abdb6fd2d35676036d3b741d14b7135419645a6906018e9d3f150000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000a896c5a84cbd03e52ae77000eb0285f5704993664a744a89ff6b346efd2efec1a519b67229a3b87e1f80e6aa17e2946000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a2200000000000000000000000000000000015edb0036ce4f7cdd026d478a1d9a3ecf10d1ac8b210e8fb0900f331d94e7ebc5672884d276feb5bf74e4c295f8160e000000000000000000000000000000001572656d28148c21445ec74560968def9fb2b793b22a55086a039d39967a226cdcdab48d7c1269ba136e9fe7162bb95b000000000000000000000000000000000a87d0ccfb9c01148703d48993de04059d22a4cc48c5dabd2571ad4f7e60d6abfbcc5fb3bf363fd311fec675486c2a20000000000000000000000000000000000f77a58fb4b4165bf86d30b6349b84780d72b24e8eddce16c73a1f5a06de0638045a64978eb9c477d806f1955e818165000000000000000000000000000000000b50dc0957eccf5ad941b148a3824e82464bb7345a05125a0aa64f6ba34e34e767d4f679e9916faaacf82b3c79c9bddc00000000000000000000000000000000087152b3cb0db88776a7144fbafc1b210d150b637ca7148e3df600989231bce613fcf8e310fcc53aa2dc934bcbf86a2200000000000000000000000000000000015edb0036ce4f7cdd026d478a1d9a3ecf10d1ac8b210e8fb0900f331d94e7ebc5672884d276feb5bf74e4c295f8160e000000000000000000000000000000001572656d28148c21445ec74560968def9fb2b793b22a55086a039d39967a226cdcdab48d7c1269ba136e9fe7162bb95b", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_58", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000001450bddfa14033ed8cdb94386715013ed9b2c4f9d65944e9d32c0b3545a085113e173e5afcfccb78878414a464d318400000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c95384000000000000000000000000000000000003c96c6f20d7ac31ee7ca77d11e8d25ea78cdf13e5f4d317752320e059e19196f14c15b5a18ca712f3a7cc6f09be6d4000000000000000000000000000000000ebd71f61fcddf1652675f577bbaeec26b892dd954965b057ffb431d6e37cc5425a2a42a0059482c2bd75adb2a120b0b000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000018bc060c3f6be35b724dee72bcda5cc376dc1f35561f7e70c9fe11eda256edd30aca8c19018433483186beb5b9b2792700000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c95384000000000000000000000000000000000003c96c6f20d7ac31ee7ca77d11e8d25ea78cdf13e5f4d317752320e059e19196f14c15b5a18ca712f3a7cc6f09be6d4000000000000000000000000000000000ebd71f61fcddf1652675f577bbaeec26b892dd954965b057ffb431d6e37cc5425a2a42a0059482c2bd75adb2a120b0b000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000001450bddfa14033ed8cdb94386715013ed9b2c4f9d65944e9d32c0b3545a085113e173e5afcfccb78878414a464d318400000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c9538400000000000000000000000000000000019c47b2347726bd72c33dd3e722d1fb179fe7d93b525c58defdea092f112dd0aaf973ea3573b358e8ac483390f63c3d7000000000000000000000000000000000b439ff419b20783f8b4485ec790be14f8ee1dab9eeeb7b9e7358f83887929cff9095bd4b0fab7d38e27a524d5ed9fa0000000000000000000000000000000000d35ffa284655a94c3050213f4f14e927c162818bbfd0480bad2e07000dd3081274056715c96408f243589d83365c9f20000000000000000000000000000000018bc060c3f6be35b724dee72bcda5cc376dc1f35561f7e70c9fe11eda256edd30aca8c19018433483186beb5b9b2792700000000000000000000000000000000094fdcc2119b4f674b5639653dfabcac59c2adb1ee2ec06c55c3f148c9361351ff0acb2519e4638cb2cde98efaec8f4400000000000000000000000000000000051d5edcbd6eadac808222f0423bada165fcb98f98a89f335c981262b0ca7ea1c536d41aa41b49b25f0c43f53c9538400000000000000000000000000000000019c47b2347726bd72c33dd3e722d1fb179fe7d93b525c58defdea092f112dd0aaf973ea3573b358e8ac483390f63c3d7000000000000000000000000000000000b439ff419b20783f8b4485ec790be14f8ee1dab9eeeb7b9e7358f83887929cff9095bd4b0fab7d38e27a524d5ed9fa0", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_59", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f35556500000000000000000000000000000000120935947070451885bf0c328bd83def193831ab9353844a01130074f16a1ff4d20df8459b5ad6a57d5f1959d37aae920000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e4000000000000000000000000000000000174ffb89d7715866562d9882acb81ce40758644ca3e0decd546c8f5c349b24fce88214956e7540fac36bcfc105cf34a0000000000000000000000000000000003e06c5f607ccf1e2991828034fcdf91106295e7174b4dca21926169451ee58e737d535af45073e2378206e03c81c421000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f3555650000000000000000000000000000000007f7dc55c90fa181c55c9b83b7736ee84b3f19d960318e75661dd22c0546d62f4c9e07b915f9295a3c9fe6a62c84fc190000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e4000000000000000000000000000000000174ffb89d7715866562d9882acb81ce40758644ca3e0decd546c8f5c349b24fce88214956e7540fac36bcfc105cf34a0000000000000000000000000000000003e06c5f607ccf1e2991828034fcdf91106295e7174b4dca21926169451ee58e737d535af45073e2378206e03c81c421000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f35556500000000000000000000000000000000120935947070451885bf0c328bd83def193831ab9353844a01130074f16a1ff4d20df8459b5ad6a57d5f1959d37aae920000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e400000000000000000000000000000000188c12319c08d113e5b8ce2e18802b092401c540294704d291ea09ab336743d45023deb55a6cabf00dc84303efa2b761000000000000000000000000000000001620a58ad903177c218a25360e4ecd465414b59ddc39c4f5459e7137b1921095ab2eaca3bd038c1d827cf91fc37de68a000000000000000000000000000000000344cafaca754db423544657de1b77025164ccc702f8d45697fb73602302a3cb4511c38f0a76a37415d683398f3555650000000000000000000000000000000007f7dc55c90fa181c55c9b83b7736ee84b3f19d960318e75661dd22c0546d62f4c9e07b915f9295a3c9fe6a62c84fc190000000000000000000000000000000014b0862ac988a169342a4abacfebc5e7e7e8f8ff1166c6ca8fa53613c5fc28fd8b02d9c8d5e7a264b2fa59cd33a0f33c000000000000000000000000000000000f0f79631e7790192c18187144388373d52653cf11dd076688877fa9b5cf58e65fe4332874c301563089b9b3fa2322e400000000000000000000000000000000188c12319c08d113e5b8ce2e18802b092401c540294704d291ea09ab336743d45023deb55a6cabf00dc84303efa2b761000000000000000000000000000000001620a58ad903177c218a25360e4ecd465414b59ddc39c4f5459e7137b1921095ab2eaca3bd038c1d827cf91fc37de68a", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_60", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce00000000000000000000000000000000144f438d86d1d808d528ea60c5d343b427124af6e43d4d9652368ddc508daab32fd9c9425cba44fba72e3449e366b1700000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000b15d92f2301075ab0e3215aa72cf9b130bc8e1bcd9fa36375c4b9d7da430ae3e2b24f417336d8729f44542ee7f561d300000000000000000000000000000000197d90090501e8cdea28eb7963231f1a7b5f716cc3a086acb6e7626600d6544132cac943e8d5cefb5daf0a2f8d4006290000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce0000000000000000000000000000000005b1ce5cb2ae0e9175f2bd557d7869233d65008e0f47c52914fa44c4a6234b70eed236bc5499bb0412d0cbb61c98f93b0000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000b15d92f2301075ab0e3215aa72cf9b130bc8e1bcd9fa36375c4b9d7da430ae3e2b24f417336d8729f44542ee7f561d300000000000000000000000000000000197d90090501e8cdea28eb7963231f1a7b5f716cc3a086acb6e7626600d6544132cac943e8d5cefb5daf0a2f8d4006290000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce00000000000000000000000000000000144f438d86d1d808d528ea60c5d343b427124af6e43d4d9652368ddc508daab32fd9c9425cba44fba72e3449e366b1700000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000eeb38bb167edf3f9a38865b9c1eb32633babd6925e56f5bf16c18c91c6deb403bf9b0bd3e1d278d1abaabd1180a48d800000000000000000000000000000000008381e1347dfdcc60f2bc3ce0288dbce917da182fe48c12b049703af5daa1e2ebe136bac87e31045c4ff5d072bfa4820000000000000000000000000000000008797f704442e133d3b77a5f0020aa304d36ce326ea75ca47e041e4d8a721754e0579ce82b96a69142cb7185998d18ce0000000000000000000000000000000005b1ce5cb2ae0e9175f2bd557d7869233d65008e0f47c52914fa44c4a6234b70eed236bc5499bb0412d0cbb61c98f93b0000000000000000000000000000000006a3a773638c0b4a13e7ea399ac319f5ea55ed533aca32a933d69d8198ae997a66d1e32a02683e7fc5c1ec597106848f00000000000000000000000000000000155ef036f60a5b11697581265293cc4c6eebd3fdf500540529b6997c27a3be31212aee5cdfea6cd95d6d5bf83a8ce5aa000000000000000000000000000000000eeb38bb167edf3f9a38865b9c1eb32633babd6925e56f5bf16c18c91c6deb403bf9b0bd3e1d278d1abaabd1180a48d800000000000000000000000000000000008381e1347dfdcc60f2bc3ce0288dbce917da182fe48c12b049703af5daa1e2ebe136bac87e31045c4ff5d072bfa482", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_61", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d000000000000000000000000000000001211464c91c7e78b00fe156da874407e4eeb7f422dbd698effb9a83357bf226d3f189f2db541eb17db3ed555084e91ec0000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf2300000000000000000000000000000000005c35f3372f1ec9845bd04ea722fbed2be1388abf59e622dd3dafb4b3af49bc5fba9e20235e7e58973fedf4b8b720691000000000000000000000000000000001111d18d621070509805d306a31c109701288fd55d4c0644349deb080c6591b6e852b4f7e009b80019513de7f2fce17d00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d0000000000000000000000000000000007efcb9da7b7ff0f4a1d92489ad76c59158bcc42c5c7a93067772a6d9ef1d3b6df9360d0fc1214e7dec02aaaf7b118bf0000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf2300000000000000000000000000000000005c35f3372f1ec9845bd04ea722fbed2be1388abf59e622dd3dafb4b3af49bc5fba9e20235e7e58973fedf4b8b720691000000000000000000000000000000001111d18d621070509805d306a31c109701288fd55d4c0644349deb080c6591b6e852b4f7e009b80019513de7f2fce17d00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d000000000000000000000000000000001211464c91c7e78b00fe156da874407e4eeb7f422dbd698effb9a83357bf226d3f189f2db541eb17db3ed555084e91ec0000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf23000000000000000000000000000000000143db2b6c68dfa02055ea2cbd11bee04a663c2d8fde6b0919355d755bbbc5a5e23021dfc7b6c1a76460020b4748da41a0000000000000000000000000000000008ef405cd76f7649b315d4afa02f9c40634ebbaf96390c7b3292e798ea4b646d36594b06d14a47ffa0adc2180d02c92e00000000000000000000000000000000000707c711f77bb425cddc71ecf96a18b6eb0bed7f012c4f6cc9431003f2e1ac17f7c1f68c4965a4fcc273a3db93451d0000000000000000000000000000000007efcb9da7b7ff0f4a1d92489ad76c59158bcc42c5c7a93067772a6d9ef1d3b6df9360d0fc1214e7dec02aaaf7b118bf0000000000000000000000000000000006a90568fa25b401756e3f86b5300c4d3b626dc6274f4685e8a9f56ec5ca2afce36a1fdc6d3414edc8780c4e650f10dc0000000000000000000000000000000012e41e8e0dd10b3ee31fa866753aa5d9db7669153b141114cdb2ef7fa6df5db27aef0cc70e76a741eae504b038ecf23000000000000000000000000000000000143db2b6c68dfa02055ea2cbd11bee04a663c2d8fde6b0919355d755bbbc5a5e23021dfc7b6c1a76460020b4748da41a0000000000000000000000000000000008ef405cd76f7649b315d4afa02f9c40634ebbaf96390c7b3292e798ea4b646d36594b06d14a47ffa0adc2180d02c92e", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_62", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000b4e7355aea3488234552d3dddfa2d1ad3164056407770e6c54f764193c9dc044cb7f2b157a1c4153b2045867d6f99c5000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000000e7e532ee4b892af39f8a3db7a05cc77a6eb0b3d977c17076bac4a52d5ba003a0ac1f902a4257791a45370eb88426a70000000000000000000000000000000016a556050e4905fa74b5061e3874f05cc7a6c5b049bd3bb7c34adef5a77c393239a600542a4401c3e61978ee6515a30e0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000eb29e948adc9e1816c67a7865517fbc91610b2eb30da1d8a1e15c5f62e71a1fd1f40d4d59b23bea7edeba79829010e6000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000000e7e532ee4b892af39f8a3db7a05cc77a6eb0b3d977c17076bac4a52d5ba003a0ac1f902a4257791a45370eb88426a70000000000000000000000000000000016a556050e4905fa74b5061e3874f05cc7a6c5b049bd3bb7c34adef5a77c393239a600542a4401c3e61978ee6515a30e0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000b4e7355aea3488234552d3dddfa2d1ad3164056407770e6c54f764193c9dc044cb7f2b157a1c4153b2045867d6f99c5000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000019192cb74b345d6f577c1d788bab500fea089ad11a0d514ef0760dfbc95556207dffe06e8711a8869fb9c8f1477b840400000000000000000000000000000000035bbbe52b36e09fd666a1980ad6bc7a9cd085d4a9c7d707a3e5f3ab4f34bcf1e505ffaa870ffe3bd3e587119aea079d0000000000000000000000000000000004b3c0e8b240b79c55f02833c2c20fa158e35c941e9e8e48247b96cb1d4923641b97e766637a3ced9fbef275ca9bd1ea000000000000000000000000000000000eb29e948adc9e1816c67a7865517fbc91610b2eb30da1d8a1e15c5f62e71a1fd1f40d4d59b23bea7edeba79829010e6000000000000000000000000000000001310a8cebed1491bb6399abe3a08fb25ad6ca00feb5db62069bc5bd45a57c167aaf06a628a3f18aa990bb389173855b100000000000000000000000000000000134655489380a9ae9cfbc3f4c6a1aa5b6dbe0a994e681915602c1d197c54bf3da6fb2df54eec3634ea87bf3fa92a69740000000000000000000000000000000019192cb74b345d6f577c1d788bab500fea089ad11a0d514ef0760dfbc95556207dffe06e8711a8869fb9c8f1477b840400000000000000000000000000000000035bbbe52b36e09fd666a1980ad6bc7a9cd085d4a9c7d707a3e5f3ab4f34bcf1e505ffaa870ffe3bd3e587119aea079d", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_63", - "Gas": 207000, + "Gas": 237000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d2900000000000000000000000000000000179c34ba9578d5ff90272a2c7f756794670a047f79a53215da69937152bad0f86576945b12176d3e13cac38d26335c51000000000000000000000000000000000dcc715907e4e17824e24c1f513c09597965941e3ed0aaad6d0c59029b54fb039d716a998c9c418110bd49c5e365507f000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d0000000000000000000000000000000002f2e4467cdc15f1e57d75d6f5c172637df589590863bb437cc5166314e6362b7cd0d7499176b94529979849624cb432000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d2900000000000000000000000000000000179c34ba9578d5ff90272a2c7f756794670a047f79a53215da69937152bad0f86576945b12176d3e13cac38d26335c51000000000000000000000000000000000dcc715907e4e17824e24c1f513c09597965941e3ed0aaad6d0c59029b54fb039d716a998c9c418110bd49c5e365507f000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d29000000000000000000000000000000000264dd2fa407109abaf47d89c3d64542fd6d470579dfe0a98cc73f2fa3f6252bb9356ba39f3c92c1a6343c72d9cc4e5a000000000000000000000000000000000c34a091319b052226395b96f20fa37deb11b766b4b46811fa24799e5b5bfb20813a956524b7be7ea941b63a1c9a5a2c000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d0000000000000000000000000000000002f2e4467cdc15f1e57d75d6f5c172637df589590863bb437cc5166314e6362b7cd0d7499176b94529979849624cb432000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d29000000000000000000000000000000000264dd2fa407109abaf47d89c3d64542fd6d470579dfe0a98cc73f2fa3f6252bb9356ba39f3c92c1a6343c72d9cc4e5a000000000000000000000000000000000c34a091319b052226395b96f20fa37deb11b766b4b46811fa24799e5b5bfb20813a956524b7be7ea941b63a1c9a5a2c000000000000000000000000000000001465358836eb5c6e173e425f675aa231f9c62e9b122584078f2ab9af7440a4ce4ac2cd21ce35a0017b01e4913b40f73d00000000000000000000000000000000170e2da3bca3d0a8659e31df4d8a3a73e681c22beb21577bea6bbc3de1cabff8a1db28b51fdd46ba906767b69db2f679000000000000000000000000000000001360612f80227a2fc50a2dbdb3a49db16bd9f0ae401e2fb69408d990284cec05a1c29696f98b16d83a3dab6eac8678310000000000000000000000000000000001223232338ce1ac91e28b4c00ef4e3561f21f34fc405e479599cced3a86b7c36f541370bfd0176f785326f741699d2900000000000000000000000000000000179c34ba9578d5ff90272a2c7f756794670a047f79a53215da69937152bad0f86576945b12176d3e13cac38d26335c51000000000000000000000000000000000dcc715907e4e17824e24c1f513c09597965941e3ed0aaad6d0c59029b54fb039d716a998c9c418110bd49c5e365507f", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_64", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c853000000000000000000000000000000001643567a0f22b90fefee96c8e2f5851623384c2c68bce9589cdf64c933d494a8d805edce2fd18a6db80f4819391dd1f9000000000000000000000000000000000e4e40ab1969bf9f00ee3b984947ae95bf7b9579bdaeeee926638f9566f8ab26debb4c8d4009535cb6422b2c2ab7282d000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000cab5ed8dc53e9c891df449bd199776adbfc193fc8d6bebf9716610fd4db6def608df059bf29fe43dbf1bf0aa52c1b7f0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c853000000000000000000000000000000001643567a0f22b90fefee96c8e2f5851623384c2c68bce9589cdf64c933d494a8d805edce2fd18a6db80f4819391dd1f9000000000000000000000000000000000e4e40ab1969bf9f00ee3b984947ae95bf7b9579bdaeeee926638f9566f8ab26debb4c8d4009535cb6422b2c2ab7282d000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c8530000000000000000000000000000000003bdbb702a5d2d8a5b2d10ed605627c1413eff588ac82966ca516dd7c2dc617b46a612308182759201efb7e6c6e1d8b2000000000000000000000000000000000bb2d13f201626fb4a2d6c1dfa03fe41a4fbb60b35d623d640cd430b8fb84afd3ff0b371714aaca303bcd4d3d548827e000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000cab5ed8dc53e9c891df449bd199776adbfc193fc8d6bebf9716610fd4db6def608df059bf29fe43dbf1bf0aa52c1b7f0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c8530000000000000000000000000000000003bdbb702a5d2d8a5b2d10ed605627c1413eff588ac82966ca516dd7c2dc617b46a612308182759201efb7e6c6e1d8b2000000000000000000000000000000000bb2d13f201626fb4a2d6c1dfa03fe41a4fbb60b35d623d640cd430b8fb84afd3ff0b371714aaca303bcd4d3d548827e000000000000000000000000000000000ab6e2a649ed97be4574603b3b4a210f0748d8cddf132079e0543ec776ceb63902e48598b7698cf79fd5130cebaf0250000000000000000000000000000000000d55b3115d2bfcd1b93c631a71b2356c887b32452aae53ffd01a719121d58834be1e0fa4f22a01bbde0d40f55ad38f2c0000000000000000000000000000000002fec3b2e25d9300b9757cbe77857d7220d91a53fc29f3b7a0da5c4e0815882d1cc51a40a60fa8e1ae01296c209eda0a00000000000000000000000000000000041ff1a77aca41f7aaeec13fb5238c24d038e2e566b611203c430d7ac6251d545ed4a60e9e0087d6baa36272c7b1c853000000000000000000000000000000001643567a0f22b90fefee96c8e2f5851623384c2c68bce9589cdf64c933d494a8d805edce2fd18a6db80f4819391dd1f9000000000000000000000000000000000e4e40ab1969bf9f00ee3b984947ae95bf7b9579bdaeeee926638f9566f8ab26debb4c8d4009535cb6422b2c2ab7282d", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_65", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f700000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000a27fe0a29c761ce29a731ead969b1db3ae9ef4c05493cc370a128d97ef956c55d9a500991b3e7bf9600383633778ebb000000000000000000000000000000000dbb997ef4970a472bfcf03e959acb90bb13671a3d27c91698975a407856505e93837f46afc965363f21c35a3d194ec0000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf1000000000000000000000000000000001528dcaae381eb764333992e28ed557034ba5413c5b64df40ef3150d2771e5d1cd8c211ca22075c7436e2582960ab3b400000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000a27fe0a29c761ce29a731ead969b1db3ae9ef4c05493cc370a128d97ef956c55d9a500991b3e7bf9600383633778ebb000000000000000000000000000000000dbb997ef4970a472bfcf03e959acb90bb13671a3d27c91698975a407856505e93837f46afc965363f21c35a3d194ec0000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f700000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000fd913e00fb884cc217475cb69e1fafc298d5c38ee3bd5fbf68fa9c777b79f5ec111aff51fa0184023fec7c9cc881bf0000000000000000000000000000000000c45786b44e8dc531f1eb777adb0e146a963e46ab65d49a8ce9978607e5aa5c58b2880b8018a9ac97add3ca5c2e65beb000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf1000000000000000000000000000000001528dcaae381eb764333992e28ed557034ba5413c5b64df40ef3150d2771e5d1cd8c211ca22075c7436e2582960ab3b400000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000fd913e00fb884cc217475cb69e1fafc298d5c38ee3bd5fbf68fa9c777b79f5ec111aff51fa0184023fec7c9cc881bf0000000000000000000000000000000000c45786b44e8dc531f1eb777adb0e146a963e46ab65d49a8ce9978607e5aa5c58b2880b8018a9ac97add3ca5c2e65beb000000000000000000000000000000001654e99ebd103ed5709ae412a6df1751add90d4d56025667a4640c1d51435e7cad5464ff2c8b08cca56e34517b05acf10000000000000000000000000000000004d8353f55fdfb2407e80e881a5e57672fbcf7712dcec4cb583dbd93cf3f1052511fdee20f338a387690da7d69f4f6f700000000000000000000000000000000123a19e1427bac55eabdaec2aeeefadfca6e2b7581a5726c393bede2efd78af04e6cb986aa8d8d5c845bbbc28d62e7a00000000000000000000000000000000018026687f43591dac03a16fce0c4b8020469ec309bdbf9f0f270cf75e262abf4ae55d46f0b4ff130b7bbe2430bd0c9f4000000000000000000000000000000000a27fe0a29c761ce29a731ead969b1db3ae9ef4c05493cc370a128d97ef956c55d9a500991b3e7bf9600383633778ebb000000000000000000000000000000000dbb997ef4970a472bfcf03e959acb90bb13671a3d27c91698975a407856505e93837f46afc965363f21c35a3d194ec0", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_66", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d200000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000eb3f5d24d1a4f520032534f6f81a6806c54df33cbd10c30203423aa4f33620b474cda321e924802b636daaeb34400470000000000000000000000000000000016f004f1dfbf140de042e4f57303928a576d9064f2da5b3ad392331f5c43327c7d2a6fd57456d5ef58b54a3e5ec275080000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c5100000000000000000000000000000000010ee94e9470765ac32b5648f1cd7d745a793dbd46dc95fa32db86929eec385e50cb35755120480be0956a2a342a46d900000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000eb3f5d24d1a4f520032534f6f81a6806c54df33cbd10c30203423aa4f33620b474cda321e924802b636daaeb34400470000000000000000000000000000000016f004f1dfbf140de042e4f57303928a576d9064f2da5b3ad392331f5c43327c7d2a6fd57456d5ef58b54a3e5ec275080000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d200000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000b4d1c17ec6597484ae95466d3ca0656f8226c5127b4068f46fcaef6a77d9418d75f25cc92c1b7fd03c825514cbbaa640000000000000000000000000000000003110cf859c0d28c6ad8c2c0d0481a4d0d09bb2000aab784939e9f819a6dc3a7a18190293cfd2a106149b5c1a13d35a30000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c5100000000000000000000000000000000010ee94e9470765ac32b5648f1cd7d745a793dbd46dc95fa32db86929eec385e50cb35755120480be0956a2a342a46d900000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000b4d1c17ec6597484ae95466d3ca0656f8226c5127b4068f46fcaef6a77d9418d75f25cc92c1b7fd03c825514cbbaa640000000000000000000000000000000003110cf859c0d28c6ad8c2c0d0481a4d0d09bb2000aab784939e9f819a6dc3a7a18190293cfd2a106149b5c1a13d35a30000000000000000000000000000000001bb1e11a1ccc0b70ce46114caca7ac1aba2a607fea8c6a0e01785e17559b271a0e8b5afbfa8705ecb77420473e81c510000000000000000000000000000000018f2289ba50f703f87f0516d517e2f6309fe0dc7aca87cc534554c0e57c4bdc5cde0ca896033b7f3d96995d5cbd563d200000000000000000000000000000000000353798691ffba215b6458a47823d149e4e2e48c9e5f65df61d6b995889f3b0e2b34824e4ffa73296d03148c607c26000000000000000000000000000000001190ba585a928413dc3cef3d77b2cff99b053cadcb13b2529c74171a094d479a259678dd43a3ef2a2e597223eb7fd35c000000000000000000000000000000000eb3f5d24d1a4f520032534f6f81a6806c54df33cbd10c30203423aa4f33620b474cda321e924802b636daaeb34400470000000000000000000000000000000016f004f1dfbf140de042e4f57303928a576d9064f2da5b3ad392331f5c43327c7d2a6fd57456d5ef58b54a3e5ec27508", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_67", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531f0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d0000000000000000000000000000000002a36d5efd3381c35ff4f361cd813a96c3e5185141c5985073b45d1319c5f392442b7aa6a253b7eb22d1b5052812be00000000000000000000000000000000000f745dd17966b6befa7f740ea360241162505d6269226ffda90546863d0fff124d8fea13c763cfb69c2f8f12b81d431f0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab0000000000000000000000000000000004acd0ba7577ffe37bdeeaf5810b5a8a4a6b51c3c02bec4e0c6f0cfb4f12283120d283c12ecb7e4be7063fefb37a578c0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d0000000000000000000000000000000002a36d5efd3381c35ff4f361cd813a96c3e5185141c5985073b45d1319c5f392442b7aa6a253b7eb22d1b5052812be00000000000000000000000000000000000f745dd17966b6befa7f740ea360241162505d6269226ffda90546863d0fff124d8fea13c763cfb69c2f8f12b81d431f0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531f0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d00000000000000000000000000000000175da48b3c4c64d6eb26b45475ca7240a0923333b1bf7a6ef37c758ddceb0291da8085580f004814972d4afad7ececab000000000000000000000000000000000a8cb418c0192fdb509c33a79feb88c60226ee228a62a2c1be2b8c1ab9a0f711d11c15eae9f030491dcf70ed47e2678c0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab0000000000000000000000000000000004acd0ba7577ffe37bdeeaf5810b5a8a4a6b51c3c02bec4e0c6f0cfb4f12283120d283c12ecb7e4be7063fefb37a578c0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d00000000000000000000000000000000175da48b3c4c64d6eb26b45475ca7240a0923333b1bf7a6ef37c758ddceb0291da8085580f004814972d4afad7ececab000000000000000000000000000000000a8cb418c0192fdb509c33a79feb88c60226ee228a62a2c1be2b8c1ab9a0f711d11c15eae9f030491dcf70ed47e2678c0000000000000000000000000000000012ecb4c2f259efb4416025e236108eff7862e54f796605cc7eb12f3e5275c80ef42aadd2acfbf84d5206f6884d8e3eab000000000000000000000000000000001554412fc407e6b6cf3cbcc0c240524d1a0bf9c1335926715ac1c5a5a79ecdf2fdd97c3d828881b3d2f8c0104c85531f0000000000000000000000000000000018b0cd0360c5d5bf8254725c19976345cd84d32d0d770286444fe29dfdbc495dd58407ee8d48ec1004971f249453b8460000000000000000000000000000000009a6ea13f5a5a279ec3bb86cc028a1685d84135ed5fe99cd6b6fb380a42c3af5497e3ba5ea558618487cf953172a376d0000000000000000000000000000000002a36d5efd3381c35ff4f361cd813a96c3e5185141c5985073b45d1319c5f392442b7aa6a253b7eb22d1b5052812be00000000000000000000000000000000000f745dd17966b6befa7f740ea360241162505d6269226ffda90546863d0fff124d8fea13c763cfb69c2f8f12b81d431f", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_68", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e7879000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000000397dbdcc3edf976e8c507f5e70299da8c7765772115bf8edf7dc9024050c2ed98746c2bf7dd4400ab1fb89af991e43f00000000000000000000000000000000139bd5f917f59e2cb6c41c59024c12cdaf95285f3947b80267f36e3bd2701f9548b561c49003fc5ddeee3fe7bc8f5b5b00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e20000000000000000000000000000000012ee6884c9d68bdabe8f4aa92aa613129993aad6a7aafffef1922c910cbd3f8b4ae8a810c59a0b9de0a79d4e5db13232000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000000397dbdcc3edf976e8c507f5e70299da8c7765772115bf8edf7dc9024050c2ed98746c2bf7dd4400ab1fb89af991e43f00000000000000000000000000000000139bd5f917f59e2cb6c41c59024c12cdaf95285f3947b80267f36e3bd2701f9548b561c49003fc5ddeee3fe7bc8f5b5b00000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e7879000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000001669360d7591ed2362569fc05c4912fcd7ffe60dd26f533087b3099eb6603336863793d2b976bbff0edf4765066dc66c0000000000000000000000000000000006653bf1218a486d94578b5d40ff9a09b4e22325ba3d5abcff3d64652440d68ed5f69e3a215003a1db10c01843704f5000000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e20000000000000000000000000000000012ee6884c9d68bdabe8f4aa92aa613129993aad6a7aafffef1922c910cbd3f8b4ae8a810c59a0b9de0a79d4e5db13232000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000001669360d7591ed2362569fc05c4912fcd7ffe60dd26f533087b3099eb6603336863793d2b976bbff0edf4765066dc66c0000000000000000000000000000000006653bf1218a486d94578b5d40ff9a09b4e22325ba3d5abcff3d64652440d68ed5f69e3a215003a1db10c01843704f5000000000000000000000000000000000010dac3e5885cc55f3e53b3fdd5d28b2d78ceeea2b669757a187de0ce3f28b586e451b119cdb7dc8b97d603f2bb700e2000000000000000000000000000000000712a9656fa95abf8c8c5d0d18a599c4cae3a0ae4bda12c0759ea60fe9f3b698d3c357edebb9f461d95762b1a24e7879000000000000000000000000000000001431c5161fc51024c5708496a1f9545c3d4c05ef9e2c91154e22ebfe251017fc61ba54c679ba2ad6b8314bfd8d6272c900000000000000000000000000000000098f2e8b6d3fcf9fb27e912af57b45d3d35a7c5471b9ea2c85262c0efb44c435cd949f23d7d40f14b6b6d4d92cb8412e000000000000000000000000000000000397dbdcc3edf976e8c507f5e70299da8c7765772115bf8edf7dc9024050c2ed98746c2bf7dd4400ab1fb89af991e43f00000000000000000000000000000000139bd5f917f59e2cb6c41c59024c12cdaf95285f3947b80267f36e3bd2701f9548b561c49003fc5ddeee3fe7bc8f5b5b", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_69", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b00000000000000000000000000000000197ed996d62fc0628d8ea4adee487df31c794e05e7c327aaa140c6be0109031bb763c5f84bc35a0597dc61e93d23a9bf000000000000000000000000000000001056c1f3c6ae36be26430d142d34b0e807685c79935496414e004cb85900d85a18454bde9c0f2650f19db35eb3dd468d000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e5590000000000000000000000000000000006abf7ef1d5e3484992225b5a59791a68cc7e1e0f8aaf2415a9f759f2dff53f62aecf23e0443fdf37bb3775be9f5c981000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b00000000000000000000000000000000197ed996d62fc0628d8ea4adee487df31c794e05e7c327aaa140c6be0109031bb763c5f84bc35a0597dc61e93d23a9bf000000000000000000000000000000001056c1f3c6ae36be26430d142d34b0e807685c79935496414e004cb85900d85a18454bde9c0f2650f19db35eb3dd468d000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b000000000000000000000000000000000082385363502637bd8d030855032ee447fdfd7f0bc1eb14c5f00be2f5a7f30867483a066590a5fa22229e16c2dc00ec0000000000000000000000000000000009aa4ff672d1afdc24d89aa21616fbef5d0eef0b60307c7e193085e89db01dca0666b4201544d9aec8614ca14c22641e000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e5590000000000000000000000000000000006abf7ef1d5e3484992225b5a59791a68cc7e1e0f8aaf2415a9f759f2dff53f62aecf23e0443fdf37bb3775be9f5c981000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b000000000000000000000000000000000082385363502637bd8d030855032ee447fdfd7f0bc1eb14c5f00be2f5a7f30867483a066590a5fa22229e16c2dc00ec0000000000000000000000000000000009aa4ff672d1afdc24d89aa21616fbef5d0eef0b60307c7e193085e89db01dca0666b4201544d9aec8614ca14c22641e000000000000000000000000000000001889ef0e20d5ddbeeb4380b97ed7d4be97ef0def051d232598b2459a72845d97fa5c1264802ab18d76b15d8fbd25e55900000000000000000000000000000000135519fb1c21b215b1f982009db41b30d7af69a3fada207e0c915d01c8b1a22df3bf0dc0ad10020c3e4b88a41609e12a000000000000000000000000000000000caecf650a12bb629ebd3b978ef9c2d4486f8ce21d515451ecdf01d27740f41b719d5a952e737c83641953a8c8b3a1bb000000000000000000000000000000001641ca29ff6016af335499dfc7167b3d961a25b7f61008c27b3cb13d3cb28fb5096413b1c7f1ca18e5d3b5017d6fed1b00000000000000000000000000000000197ed996d62fc0628d8ea4adee487df31c794e05e7c327aaa140c6be0109031bb763c5f84bc35a0597dc61e93d23a9bf000000000000000000000000000000001056c1f3c6ae36be26430d142d34b0e807685c79935496414e004cb85900d85a18454bde9c0f2650f19db35eb3dd468d", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_70", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f50000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f0000000000000000000000000000000008789ffe0a8676c6a56742a30a48e5e65b88aafd71859d704fb9f69e5e274ccb6942bc51ad36c5671406052aacf19df9000000000000000000000000000000000c7607f4fc69a25aff00a54369f213c4587404644358da4abf26d151dfa4905ba9731dcfb12e2a3f2c551cacd0f4e47f0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf9250000000000000000000000000000000001b7a86c4142843a854dd0937bdbfd833a34fb15303d753e3f41eaf19f4fd9a6af785804d5ae2c3b99044cc13e6ca4b60000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f0000000000000000000000000000000008789ffe0a8676c6a56742a30a48e5e65b88aafd71859d704fb9f69e5e274ccb6942bc51ad36c5671406052aacf19df9000000000000000000000000000000000c7607f4fc69a25aff00a54369f213c4587404644358da4abf26d151dfa4905ba9731dcfb12e2a3f2c551cacd0f4e47f0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f50000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f00000000000000000000000000000000118871ec2ef96fd3a5b465133902c6f108eea08781ff754f1776dc029889a958b56943ad041d3a98a5f8fad5530e0cb2000000000000000000000000000000000d8b09f53d16443f4c1b0272d95999130c034720b02c3874a80a014f170c65c87538e22f0025d5c08da9e3532f0ac62c0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf9250000000000000000000000000000000001b7a86c4142843a854dd0937bdbfd833a34fb15303d753e3f41eaf19f4fd9a6af785804d5ae2c3b99044cc13e6ca4b60000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f00000000000000000000000000000000118871ec2ef96fd3a5b465133902c6f108eea08781ff754f1776dc029889a958b56943ad041d3a98a5f8fad5530e0cb2000000000000000000000000000000000d8b09f53d16443f4c1b0272d95999130c034720b02c3874a80a014f170c65c87538e22f0025d5c08da9e3532f0ac62c0000000000000000000000000000000008726a32d489a5ea1c1b314dc4d400d995d0eb8b49d47e65a6ac8fd0e6ec0cda1c637ee314c0c5d1ad72cd3588ebf925000000000000000000000000000000001849697df83d625fc5cdd722c76faf542a42506fc3479d8127eee7af57611c7d6f33a7f9dba5d3c420fab33ec19305f50000000000000000000000000000000009c7164f8d40c7e9ca571c46f8edf1c4a961779e55f6b10ffc44d76da78adadb83195d757949be39631c6a53d2d67fae0000000000000000000000000000000012cd5149125e7cc21bb5349be7fe03d5854ee73ba515021b6dc87e81ce1e1fa3e386fcb0de80977b9329e72ad54f929f0000000000000000000000000000000008789ffe0a8676c6a56742a30a48e5e65b88aafd71859d704fb9f69e5e274ccb6942bc51ad36c5671406052aacf19df9000000000000000000000000000000000c7607f4fc69a25aff00a54369f213c4587404644358da4abf26d151dfa4905ba9731dcfb12e2a3f2c551cacd0f4e47f", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_71", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b2567300000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000b060965391bfd4afe3271c6ddb91eecb8c7a60451c469d63bb178b1361617000f589c33c35b5deda2f072c6edf2eb370000000000000000000000000000000011c8c988379cd2b82cb8ebd81c3e14d2c01c09dde5690b97623c0876c7554f52ccbaa33d17fb0f0cf331cc85749340cd000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000008151a15a13daeee49a82737118d488005fa7ed1869bc458f8af88e7341e0a48b5d8f129f6eb071fb07c11887f4d543800000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000b060965391bfd4afe3271c6ddb91eecb8c7a60451c469d63bb178b1361617000f589c33c35b5deda2f072c6edf2eb370000000000000000000000000000000011c8c988379cd2b82cb8ebd81c3e14d2c01c09dde5690b97623c0876c7554f52ccbaa33d17fb0f0cf331cc85749340cd000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b2567300000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000efb08850063e94f4ce935ef65928deaabafa580a1c0a8e92b7f59efc09adf240f5363caedf8a212170e8d39120cbf74000000000000000000000000000000000838486201e313e21e62bbde270d9804a45b41a70e1c072804f4ca2a2f5ba6d151f15cc19958f0f2c6cd337a8b6c69de000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000008151a15a13daeee49a82737118d488005fa7ed1869bc458f8af88e7341e0a48b5d8f129f6eb071fb07c11887f4d543800000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000efb08850063e94f4ce935ef65928deaabafa580a1c0a8e92b7f59efc09adf240f5363caedf8a212170e8d39120cbf74000000000000000000000000000000000838486201e313e21e62bbde270d9804a45b41a70e1c072804f4ca2a2f5ba6d151f15cc19958f0f2c6cd337a8b6c69de000000000000000000000000000000001688c63e325569855bc2e51d668cef112b2479efa33519fe7f45eab89e275e2c4652cf8c2814f179935ccf1d24d8bd0f0000000000000000000000000000000011ebf7d4984237ac0173807f31be64575e7cccb36ce94e666e8149b9c292ebdb68d30ed4ba68f8e00982ee7780b2567300000000000000000000000000000000093c423917d10edc429acd927def56ab4f07254b3892762aa7056f24224528aa0f528fe8538ca996ca63506c84af73270000000000000000000000000000000003fd3ba68878485e25ccaa2539eed0a97743ae9f5b848e9d83c8ea60f7ad0f1cc6d94a59498f79dcab2bfcc2fdbacfed000000000000000000000000000000000b060965391bfd4afe3271c6ddb91eecb8c7a60451c469d63bb178b1361617000f589c33c35b5deda2f072c6edf2eb370000000000000000000000000000000011c8c988379cd2b82cb8ebd81c3e14d2c01c09dde5690b97623c0876c7554f52ccbaa33d17fb0f0cf331cc85749340cd", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_72", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc300000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000f05a111b41a54e0ca78c3a1fff3b80bee7c1505a06b9a4faf36a73b87121d2952cc4f4c4e0dcb6633cad12b0caffc620000000000000000000000000000000018daa0f9a2bb347517eee63463b9d6a5e850446e8a94d0986f2921bf81a9f7541e8fee9d7bbb6d9181021af945fce3e3000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a07060000000000000000000000000000000000876cf6553b21053e0d7a4449cd137fd946f2de0f7032f535f54914a8ae7da5afbe765bdfa3a0cdea0a50e1ed43bce800000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000f05a111b41a54e0ca78c3a1fff3b80bee7c1505a06b9a4faf36a73b87121d2952cc4f4c4e0dcb6633cad12b0caffc620000000000000000000000000000000018daa0f9a2bb347517eee63463b9d6a5e850446e8a94d0986f2921bf81a9f7541e8fee9d7bbb6d9181021af945fce3e3000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc300000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000afb70d8856591b980a2e4144357f4cb75fb367f5319786fb7fa2b656f9ed8facbdfb0b26346349986342ed4f34fae4900000000000000000000000000000000012670f096c4b225332cc181df91d6317c27071668f04226f807b0e17506fed0001c11613598926e38fce506ba02c6c8000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a07060000000000000000000000000000000000876cf6553b21053e0d7a4449cd137fd946f2de0f7032f535f54914a8ae7da5afbe765bdfa3a0cdea0a50e1ed43bce800000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000afb70d8856591b980a2e4144357f4cb75fb367f5319786fb7fa2b656f9ed8facbdfb0b26346349986342ed4f34fae4900000000000000000000000000000000012670f096c4b225332cc181df91d6317c27071668f04226f807b0e17506fed0001c11613598926e38fce506ba02c6c8000000000000000000000000000000000bb6f731b345bb1319b9acab09c186449a51dad8b6526251bc58e958cfd933137067e6f778b019f131cc7b23e08a0706000000000000000000000000000000001979a4f3e444c5950d0e2d71f97e99578b3058a6e414dfca313b898c4e02787e6eed89a2d1b05f31cff4af1e12bbedc300000000000000000000000000000000039d8e90425810a0b2fb5c915905863eb2da363ad4188e42cedce678bdd0f51eca0a96b78ab9e082d59dcd10e3c3c97a000000000000000000000000000000001973250dc31d16f658323d021dddc5439ef4396b6ed735f108cd7b27feb1b508daf863ab6431a77ec0b10cf7e001244f000000000000000000000000000000000f05a111b41a54e0ca78c3a1fff3b80bee7c1505a06b9a4faf36a73b87121d2952cc4f4c4e0dcb6633cad12b0caffc620000000000000000000000000000000018daa0f9a2bb347517eee63463b9d6a5e850446e8a94d0986f2921bf81a9f7541e8fee9d7bbb6d9181021af945fce3e3", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_73", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a9035050000000000000000000000000000000017d9e9e2008501981068cb0403e73c270d99defd468cc9dc2d5bbc57750a4a58236f8f7a8df4f8b607095b6a80e7de49000000000000000000000000000000000ebddf4fc74f25be3c358b72a20d1c093f980adfc943b898266592f691e11413c60151a0085d6c9aec8c2d329abbac0d00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c2000000000000000000000000000000001093356407cff41779ce8f3d53dfe7a04edc8ce7192ddfeeb4329c38152cf1875d0df9ffeced95f1c7fae7d124649f21000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a9035050000000000000000000000000000000017d9e9e2008501981068cb0403e73c270d99defd468cc9dc2d5bbc57750a4a58236f8f7a8df4f8b607095b6a80e7de49000000000000000000000000000000000ebddf4fc74f25be3c358b72a20d1c093f980adfc943b898266592f691e11413c60151a0085d6c9aec8c2d329abbac0d00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a903505000000000000000000000000000000000227280838fae5023ab2dcb23f6470b056dd6c87acf848e339d5164981a6abcbfb3c7084235f0749b2f5a4957f17cc62000000000000000000000000000000000b43329a7230c0dc0ee61c43a13e90ce24df40a52a415a2740cb3faa64cfe21058aaae5ea8f69364cd72d2cd6543fe9e00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c2000000000000000000000000000000001093356407cff41779ce8f3d53dfe7a04edc8ce7192ddfeeb4329c38152cf1875d0df9ffeced95f1c7fae7d124649f21000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a903505000000000000000000000000000000000227280838fae5023ab2dcb23f6470b056dd6c87acf848e339d5164981a6abcbfb3c7084235f0749b2f5a4957f17cc62000000000000000000000000000000000b43329a7230c0dc0ee61c43a13e90ce24df40a52a415a2740cb3faa64cfe21058aaae5ea8f69364cd72d2cd6543fe9e00000000000000000000000000000000078cca0bfd6957f9aff9731b45fdbdbeca6691f6fe6bf0b7847859c77478037e14864b202b235953ac7da231367324c200000000000000000000000000000000096ddc8631aff282d14d1878ef6bc537159abe9dda5732d0b2fe3668e184049cc19e05fec4666a0df204182edb9b0b8a000000000000000000000000000000000eff44a5e3b9fc8ffe31771fbcabea6efbd68384c5931216a2b7465aaa2566ee116b7daeea632677f35379107f7334f0000000000000000000000000000000000c3c942373f69c2c9631cef1c6bbb1a4567d5b95500409d4f2c6bf4a66ee263e6f167e22790badea0eac4a541a9035050000000000000000000000000000000017d9e9e2008501981068cb0403e73c270d99defd468cc9dc2d5bbc57750a4a58236f8f7a8df4f8b607095b6a80e7de49000000000000000000000000000000000ebddf4fc74f25be3c358b72a20d1c093f980adfc943b898266592f691e11413c60151a0085d6c9aec8c2d329abbac0d", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_74", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa300000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000001fdc4256cc997934a65c68ab9767b09c7aad14b5765dbeedb72ab2429231cb333ab9f9143414359376d76857e8972d9000000000000000000000000000000001362f417875259b47cfd9e4c5feda52b949dcbf5b8178318428fd3e70c384020e58f515b9a24af5597cfa037d42491c6000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e0000000000000000000000000000000007007c89288b69f16870dc857a02cd071db8178e578fd2b78fcd5edb5050dcded107a1c1c0071d45e4c4af364bc9400800000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000001fdc4256cc997934a65c68ab9767b09c7aad14b5765dbeedb72ab2429231cb333ab9f9143414359376d76857e8972d9000000000000000000000000000000001362f417875259b47cfd9e4c5feda52b949dcbf5b8178318428fd3e70c384020e58f515b9a24af5597cfa037d42491c6000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa300000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000018034dc4ccb64f0700b5e12b89d531cd9ccc7a399c1f36d08bbe277ccd8dd970eb00606d6e12bca68291897a817637d200000000000000000000000000000000069e1dd2b22d8ce5ce1e0969e35e07abcfd97f8f3b6d8fa724a0feb9ea78b603391caea3172f50aa222f5fc82bdb18e5000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e0000000000000000000000000000000007007c89288b69f16870dc857a02cd071db8178e578fd2b78fcd5edb5050dcded107a1c1c0071d45e4c4af364bc9400800000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000018034dc4ccb64f0700b5e12b89d531cd9ccc7a399c1f36d08bbe277ccd8dd970eb00606d6e12bca68291897a817637d200000000000000000000000000000000069e1dd2b22d8ce5ce1e0969e35e07abcfd97f8f3b6d8fa724a0feb9ea78b603391caea3172f50aa222f5fc82bdb18e5000000000000000000000000000000000b3a1dfe2d1b62538ed49648cb2a8a1d66bdc4f7a492eee59942ab810a306876a7d49e5ac4c6bb1613866c158ded993e000000000000000000000000000000001300956110f47ca8e2aacb30c948dfd046bf33f69bf54007d76373c5a66019454da45e3cf14ce2b9d53a50c9b4366aa300000000000000000000000000000000081da74d812a6718e351c062e93f9edb24eff830be5c44c3f21cca606f5b1287de8ba65a60d42cbf9740c9522fcdc9eb000000000000000000000000000000000eb1d38fd394b7e78dfaeb3b3b97d3d928c16472ee74ae0be1ec3efa510b9bb64cec369793219ceab55a0ed0ece23de80000000000000000000000000000000001fdc4256cc997934a65c68ab9767b09c7aad14b5765dbeedb72ab2429231cb333ab9f9143414359376d76857e8972d9000000000000000000000000000000001362f417875259b47cfd9e4c5feda52b949dcbf5b8178318428fd3e70c384020e58f515b9a24af5597cfa037d42491c6", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_75", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c8000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000010fb029e35b3f6e156b8751415f180ee3960cd3bb6ba9b8e456715ec70b1ba1410b8bfb77998f744d3f462533b59e26c000000000000000000000000000000001472654d9aa210a41d74e3661e05a9eb6b292719b46aa65f94b6abd514bf05f679dae89d21008245d79a381b0d7f51be0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000a76ccda2ca736ce935b4b88e08bbf183f69e2b3f5a471662a5de571976e7d4264021db88b919c896bbbb8128732c3e3000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000010fb029e35b3f6e156b8751415f180ee3960cd3bb6ba9b8e456715ec70b1ba1410b8bfb77998f744d3f462533b59e26c000000000000000000000000000000001472654d9aa210a41d74e3661e05a9eb6b292719b46aa65f94b6abd514bf05f679dae89d21008245d79a381b0d7f51be0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c8000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000009060f4c03cbefb8f46332a22d5a2be92b167e493cca773121c9bcb485ff3c100df3404737bb08bae60a9dacc4a5c83f00000000000000000000000000000000058eac9c9eddd5f62da6c450254602ebf94e246b3f1a6c5fd27a26cbe1f1f02da4d1176190537db9e264c7e4f28058ed0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000a76ccda2ca736ce935b4b88e08bbf183f69e2b3f5a471662a5de571976e7d4264021db88b919c896bbbb8128732c3e3000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000009060f4c03cbefb8f46332a22d5a2be92b167e493cca773121c9bcb485ff3c100df3404737bb08bae60a9dacc4a5c83f00000000000000000000000000000000058eac9c9eddd5f62da6c450254602ebf94e246b3f1a6c5fd27a26cbe1f1f02da4d1176190537db9e264c7e4f28058ed0000000000000000000000000000000007c00b3e7e50a860e99cdc92235f45a555c343304a067a71b6aaade016ef99bc50e3b2c5e3335d4bdacb816d3c765630000000000000000000000000000000000f8a45100cd8afcbb7c05c2d62bfedbf250d68d0fde0a1593cd2ed2f5f4278e1baa9e24625c263764e4347ed78cce6c8000000000000000000000000000000000b8e764aa5afa4a6e8227d1bc720eeffd72d963458a4963a3bbe697d3da11186a30d90f7a4eda5630f6967095816913300000000000000000000000000000000085d05b570cd58def6ac2f7e80dc18658dc5d0e6a1f5a5cf4d18745e03494654eb1a6d5399ec2c5288890ade446317d00000000000000000000000000000000010fb029e35b3f6e156b8751415f180ee3960cd3bb6ba9b8e456715ec70b1ba1410b8bfb77998f744d3f462533b59e26c000000000000000000000000000000001472654d9aa210a41d74e3661e05a9eb6b292719b46aa65f94b6abd514bf05f679dae89d21008245d79a381b0d7f51be", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_76", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb21100000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d7000000000000000000000000000000000520cfc8c536a1d4e685c4eacbc2000d70abd72e1bf8ce3839d79f5cfa069ed31aafb15542f23b8d1af678bab05a2d410000000000000000000000000000000017cfffda12d21c98b79ac31c5bb696783afb7d69c2bedf0fb070cf7714959db14957a4763564b65b7ed214d7b48d399c000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c00000000000000000000000000000000124a601a06d5094945ec8528c5457ea3f8ca710137b6ad48ee7ad93db53c056059dbc8b02d9edf5e2786c575a0bff89a00000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d7000000000000000000000000000000000520cfc8c536a1d4e685c4eacbc2000d70abd72e1bf8ce3839d79f5cfa069ed31aafb15542f23b8d1af678bab05a2d410000000000000000000000000000000017cfffda12d21c98b79ac31c5bb696783afb7d69c2bedf0fb070cf7714959db14957a4763564b65b7ed214d7b48d399c000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb21100000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d70000000000000000000000000000000014e04221744944c56495e2cb7789acc9f3cb7456d78c44872d593343fcaa575103fc4ea96e61c4729f0887454fa57d6a000000000000000000000000000000000231121026adca019380e499e795165f297bce1b30c633afb6c00329e21b5872d5545b887bef49a43b2ceb284b72710f000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c00000000000000000000000000000000124a601a06d5094945ec8528c5457ea3f8ca710137b6ad48ee7ad93db53c056059dbc8b02d9edf5e2786c575a0bff89a00000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d70000000000000000000000000000000014e04221744944c56495e2cb7789acc9f3cb7456d78c44872d593343fcaa575103fc4ea96e61c4729f0887454fa57d6a000000000000000000000000000000000231121026adca019380e499e795165f297bce1b30c633afb6c00329e21b5872d5545b887bef49a43b2ceb284b72710f000000000000000000000000000000001517dd04b165c50d2b1ef2f470c821c080f604fe1a23f2fa5481f3a63e0f56e05c89c7403d4067a5f6e59d4a338d0b5c0000000000000000000000000000000007b6b1d032aadd51052f228d7e062e336bacda83bbce657678b5f9634174f0c3c4d0374e83b520a192783a8a5f3fb21100000000000000000000000000000000042280b112fdbbd94f647e5b1f4b51d864f85063a5b66e1f1fe5b1a8d280f9bf1db81ad3588f93f8801ff1a3f66b96330000000000000000000000000000000001e0887904228790d03d8b6d17bebdd8659deafa2ebd9b07069ce89fe228824a39966953d14dda1bd6ccce5faf16e4d7000000000000000000000000000000000520cfc8c536a1d4e685c4eacbc2000d70abd72e1bf8ce3839d79f5cfa069ed31aafb15542f23b8d1af678bab05a2d410000000000000000000000000000000017cfffda12d21c98b79ac31c5bb696783afb7d69c2bedf0fb070cf7714959db14957a4763564b65b7ed214d7b48d399c", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_77", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a00000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000007f786ea1cc7cd69ae1061d6b914278dfc7ebe8a714aa8cd04323860314c3b4b36054169dd5c6c60e67bfa3902d216f50000000000000000000000000000000019675b09a4de34af3c6e79452b57b31b6d499200e996008a9e7d1c910ca0ad2a352dc39cb3fd7333182476095b7aeec3000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c04200000000000000000000000000000000001b8c085fd1f34fb273da7d651602b326fef7c357c2fb7845f4c17ce95152042af9e51e7d7699b50f3605bacab563a100000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000007f786ea1cc7cd69ae1061d6b914278dfc7ebe8a714aa8cd04323860314c3b4b36054169dd5c6c60e67bfa3902d216f50000000000000000000000000000000019675b09a4de34af3c6e79452b57b31b6d499200e996008a9e7d1c910ca0ad2a352dc39cb3fd7333182476095b7aeec3000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a00000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000012098b001cb819309d0b45df8a37854967f88cfa823a69f262fe9a40c564bad8e8a6be94d3f7939ed38305c6fd2d93b6000000000000000000000000000000000099b6e094a1b1eb0ead2e7117f3f9bbf72db98409ef1234c8b3b60fea1048f9e97e3c61fd568ccca1da89f6a484bbe8000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c04200000000000000000000000000000000001b8c085fd1f34fb273da7d651602b326fef7c357c2fb7845f4c17ce95152042af9e51e7d7699b50f3605bacab563a100000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000012098b001cb819309d0b45df8a37854967f88cfa823a69f262fe9a40c564bad8e8a6be94d3f7939ed38305c6fd2d93b6000000000000000000000000000000000099b6e094a1b1eb0ead2e7117f3f9bbf72db98409ef1234c8b3b60fea1048f9e97e3c61fd568ccca1da89f6a484bbe8000000000000000000000000000000000475e66c9e4e434c4872b8537e0ab930165b39f41e04b208d74d3033e1d69dfb4b134ae3a9dc46347d30a6805508c0420000000000000000000000000000000019e585e1d9adf34a98a7cd38de35aa243d7853c19bc21747213c11240d5fa41ff3b21ae033dd664aaac8fa45354a470a00000000000000000000000000000000137e91115129cbaa1ae2bbb79abe5505436bb51ddceeb011d56dc5c3c396b6b00067d6e6108bafca40fc717737487b27000000000000000000000000000000001592fec7d33bffa7f3eebf038e3194513736cc41a143471fb8c55a44c7521c07e4d8368e5c6ee21ed0478f949f3e224e0000000000000000000000000000000007f786ea1cc7cd69ae1061d6b914278dfc7ebe8a714aa8cd04323860314c3b4b36054169dd5c6c60e67bfa3902d216f50000000000000000000000000000000019675b09a4de34af3c6e79452b57b31b6d499200e996008a9e7d1c910ca0ad2a352dc39cb3fd7333182476095b7aeec3", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_78", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b0000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000fbe421858e4109c51de57b77da4f9c4c1f950099532d9e30e2f7a8b8b4fb9f708cde1a497050d0944e089978b15321e0000000000000000000000000000000019f48a0bf0f27df65ba766a65e831a0801a4ebcd1995a6002a803f88aead1503b7c39fde8ef5c4672020307241958a880000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000c8bd020743550a6d27f0052d0037547db204e3fd752abf6758d899a3793fd3cd50c3073df6258c20a2f8e4797cbab700000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000fbe421858e4109c51de57b77da4f9c4c1f950099532d9e30e2f7a8b8b4fb9f708cde1a497050d0944e089978b15321e0000000000000000000000000000000019f48a0bf0f27df65ba766a65e831a0801a4ebcd1995a6002a803f88aead1503b7c39fde8ef5c4672020307241958a880000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b0000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000a42cfd1e09bd5fdf93d4ffec5a6b312a27dfb7b5e5238dc590158156b613c2d15de1e5a1a4ef2f6751e766874ea788d00000000000000000000000000000000000c87de488d68a3ef74410fe4c892cf62d25fb7d9ef6cbf3cb093184803e12066e86020225e3b9899decf8dbe6a20230000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000c8bd020743550a6d27f0052d0037547db204e3fd752abf6758d899a3793fd3cd50c3073df6258c20a2f8e4797cbab700000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000a42cfd1e09bd5fdf93d4ffec5a6b312a27dfb7b5e5238dc590158156b613c2d15de1e5a1a4ef2f6751e766874ea788d00000000000000000000000000000000000c87de488d68a3ef74410fe4c892cf62d25fb7d9ef6cbf3cb093184803e12066e86020225e3b9899decf8dbe6a20230000000000000000000000000000000002291ff240598e2c129ea12292e4a2fc86e03da9bd9fbbb8bddd6f25797003a4688ba2ed3bafd8dfcf0ddd44c3288c1e000000000000000000000000000000000d7541c9c54a95f3789ca7637348378f8956fd451c3266c8f1a34906bf1cf8e7499fcf8ad1f1a73dafcf71b86833ff3b0000000000000000000000000000000016aed55f56416b8f450283c4afea4c606100eed9bf7b8fea9ab4d04797a7bfe3bf0f10cf229f8ce3156869d75beabe6b0000000000000000000000000000000007e5c03e51a513c6f77179bcb5f7d147dcee32426b4365b1c95f434be7f83a5883d1ee5b0e01a636b3e5377542314b75000000000000000000000000000000000fbe421858e4109c51de57b77da4f9c4c1f950099532d9e30e2f7a8b8b4fb9f708cde1a497050d0944e089978b15321e0000000000000000000000000000000019f48a0bf0f27df65ba766a65e831a0801a4ebcd1995a6002a803f88aead1503b7c39fde8ef5c4672020307241958a88", "Expected": "0000000000000000000000000000000000000000000000000000000000000000", "Name": "matter_pairing_79", - "Gas": 230000, + "Gas": 280000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff1480000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb00000000000000000000000000000000094a36d86483ac6f068017e4b978c7ea1ee58c429aad5994287f809c69fd5235532487d81f6a46ab827f2e0cb4c6df9e0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff1480000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa0000000000000000000000000000000007cdcfd000a86a408f39ef7cb0a4060dff8965956fbf6b939576a69674fcd5c735056da7988943506f8c35c2de8feaaf0000000000000000000000000000000003484fbf03d06907efbf3eff8b95789484254dc09e42208b7457619a31f795356a2cdfb24bb6e95c192b49a11c6fb9630000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb00000000000000000000000000000000094a36d86483ac6f068017e4b978c7ea1ee58c429aad5994287f809c69fd5235532487d81f6a46ab827f2e0cb4c6df9e0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa0000000000000000000000000000000007cdcfd000a86a408f39ef7cb0a4060dff8965956fbf6b939576a69674fcd5c735056da7988943506f8c35c2de8feaaf0000000000000000000000000000000003484fbf03d06907efbf3eff8b95789484254dc09e42208b7457619a31f795356a2cdfb24bb6e95c192b49a11c6fb9630000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff1480000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb00000000000000000000000000000000094a36d86483ac6f068017e4b978c7ea1ee58c429aad5994287f809c69fd5235532487d81f6a46ab827f2e0cb4c6df9e0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa000000000000000000000000000000001233421a38d77c59bbe1b83992a7a6c964ede5ef83c5a72bd1ba2c0a81b4205ce9a6925718cabcaf4a72ca3d216fbffc0000000000000000000000000000000016b8c22b35af7d925b5c68b6b7b63442e051fdc45542f233f2d97106c4b960eeb47f204c659d16a3a0d3b65ee38ff1480000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb0000000000000000000000000000000010b6db11d4fc3a2b449b8fd189d2e4ed4591bf4258d7b92b3eb152048cb3a3eecb87782691e9b954377fd1f34b38cb0d0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa0000000000000000000000000000000007cdcfd000a86a408f39ef7cb0a4060dff8965956fbf6b939576a69674fcd5c735056da7988943506f8c35c2de8feaaf0000000000000000000000000000000003484fbf03d06907efbf3eff8b95789484254dc09e42208b7457619a31f795356a2cdfb24bb6e95c192b49a11c6fb9630000000000000000000000000000000018d31bd5a7e94ceb18d803969a2001c6eb3bfbcf82c27e88ca60d4c46807d12f116ca71c67d27270c2332205a4ea11bb00000000000000000000000000000000094a36d86483ac6f068017e4b978c7ea1ee58c429aad5994287f809c69fd5235532487d81f6a46ab827f2e0cb4c6df9e0000000000000000000000000000000016114be17b400ba35875d9009b4d8974023a57d32508c9f658a0d82a8efc6b379ce4a3dbf5ca7130c5581f5008806934000000000000000000000000000000000c68cd7b9d3c3d6c559fa3d52da48ebe68e40a44863c332bb90dd151d1281dd3faa34e6c7b07c277affbdbc1b0a43cfa0000000000000000000000000000000007cdcfd000a86a408f39ef7cb0a4060dff8965956fbf6b939576a69674fcd5c735056da7988943506f8c35c2de8feaaf0000000000000000000000000000000003484fbf03d06907efbf3eff8b95789484254dc09e42208b7457619a31f795356a2cdfb24bb6e95c192b49a11c6fb963", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_80", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d5000000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000db912ff1f62be087194f6503b3b273b48bd0907afde777109522329e54cde1092afd48366af3f334c0df42ee98d8d5b00000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d5000000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b56000000000000000000000000000000000337fa3e53480c7865182ecbc7252aa6f9987685dbb814182447183d9da514732157ccffa4188d31eee96bc89c33f3f00000000000000000000000000000000004c5340a5240c4d6f1e095290ac5b6b5d121c5cadc6f30e5dd4855a9cf985e357b1a847cc060bd86aaef85ccf35ee41c00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000db912ff1f62be087194f6503b3b273b48bd0907afde777109522329e54cde1092afd48366af3f334c0df42ee98d8d5b00000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b56000000000000000000000000000000000337fa3e53480c7865182ecbc7252aa6f9987685dbb814182447183d9da514732157ccffa4188d31eee96bc89c33f3f00000000000000000000000000000000004c5340a5240c4d6f1e095290ac5b6b5d121c5cadc6f30e5dd4855a9cf985e357b1a847cc060bd86aaef85ccf35ee41c00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d5000000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000db912ff1f62be087194f6503b3b273b48bd0907afde777109522329e54cde1092afd48366af3f334c0df42ee98d8d5b00000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b560000000000000000000000000000000016c917abe637da21e60378ea7c2682306aded4ff17ccfea742e9ba63590be1b0fd5432ff0d3b72cdcb15943763cbb6bb00000000000000000000000000000000153bdddfe73f21c3593b128d3885f621935585ba1715e1d989e87cf7271897eea3917b81f0f342790f0f7a330ca0c68f00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000c47feeb1a1d2891d986b1660810859c1bba427d43a69b4e5ddeaf77116418138bfc2b7b4aa4c0cc6df10bd116721d5000000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b56000000000000000000000000000000000337fa3e53480c7865182ecbc7252aa6f9987685dbb814182447183d9da514732157ccffa4188d31eee96bc89c33f3f00000000000000000000000000000000004c5340a5240c4d6f1e095290ac5b6b5d121c5cadc6f30e5dd4855a9cf985e357b1a847cc060bd86aaef85ccf35ee41c00000000000000000000000000000000190f4dc14439eccc46d46c5c9b15eeba0bbf2dbca11af4183408afdb15c7bfa26f107cf5fda0c1e0236aab95728eac2e000000000000000000000000000000000db912ff1f62be087194f6503b3b273b48bd0907afde777109522329e54cde1092afd48366af3f334c0df42ee98d8d5b00000000000000000000000000000000135b96feb4f1e712661ce0d13842de1198c589f335141ab1fd7ffc6b9d58de82c300e9fe6dacdefe8e68b6db9298da5100000000000000000000000000000000046a3563d167d8b0a9f74e0c6514fdabd795110cf48caa014947ca90a9eeda3d07dd7dce58d3f2b7b86fab1143946b56000000000000000000000000000000000337fa3e53480c7865182ecbc7252aa6f9987685dbb814182447183d9da514732157ccffa4188d31eee96bc89c33f3f00000000000000000000000000000000004c5340a5240c4d6f1e095290ac5b6b5d121c5cadc6f30e5dd4855a9cf985e357b1a847cc060bd86aaef85ccf35ee41c", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_81", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d800000000000000000000000000000000013d98eb6ddf8b68db36819b25d9a7b4a4ed2b1d2593dd6a6e79dc6adaaefd4d8d129d8d949c7421641374a5192b3fd5a00000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000f62f8cda209f1223a7695ed860de2c2b144bd6402ecd61838eded3f40d3df90fe10bd5d92245112e3ce822cb33f8d4b0000000000000000000000000000000018bb0bcf262b7f4583d1375ecce64bd6bb1fcc64fa4b6a93bd9ffbe870fe79df0f29baa92eb844e5c04d09c966e810dc00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d800000000000000000000000000000000013d98eb6ddf8b68db36819b25d9a7b4a4ed2b1d2593dd6a6e79dc6adaaefd4d8d129d8d949c7421641374a5192b3fd5a00000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000f62f8cda209f1223a7695ed860de2c2b144bd6402ecd61838eded3f40d3df90fe10bd5d92245112e3ce822cb33f8d4b0000000000000000000000000000000018bb0bcf262b7f4583d1375ecce64bd6bb1fcc64fa4b6a93bd9ffbe870fe79df0f29baa92eb844e5c04d09c966e810dc00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d800000000000000000000000000000000013d98eb6ddf8b68db36819b25d9a7b4a4ed2b1d2593dd6a6e79dc6adaaefd4d8d129d8d949c7421641374a5192b3fd5a00000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000a9e191c9775f57810a511c8bd3dca14b3328e20f0983ca72e42e561b5dd1693209b42a11f2faeecd6307dd34cc01d60000000000000000000000000000000000146061b13546754c74a705776656100a9577f1ff939a82ba990d6b885b27c450f824555829bbb19f9b1f636991799cf00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d8000000000000000000000000000000000062783335b87300c97b38e03e5b1318d15a499b29a473c187f930bf34bc1214b4d822725678cbde978c7b5ae6d4bad5100000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000f62f8cda209f1223a7695ed860de2c2b144bd6402ecd61838eded3f40d3df90fe10bd5d92245112e3ce822cb33f8d4b0000000000000000000000000000000018bb0bcf262b7f4583d1375ecce64bd6bb1fcc64fa4b6a93bd9ffbe870fe79df0f29baa92eb844e5c04d09c966e810dc00000000000000000000000000000000021203675e0ae188ec782160e21492a6ee39fa97d922c1ef9bbfd79b82b3fad54fab11ba633fb8f02cf92249d85d9d800000000000000000000000000000000013d98eb6ddf8b68db36819b25d9a7b4a4ed2b1d2593dd6a6e79dc6adaaefd4d8d129d8d949c7421641374a5192b3fd5a00000000000000000000000000000000117821e6c87bb0e04882e95d36dce18ca33a2c8bd0efd5532b33d597804c08ff1799b2d64a95cc84bd31ba45c3b1e822000000000000000000000000000000000887c07c8a9ebe3154950746a4506ff192bb4a05dccb0f4a1a8ac2b8ca0da07190129ba44d9bc8e6c2666027c67d2ddc000000000000000000000000000000000f62f8cda209f1223a7695ed860de2c2b144bd6402ecd61838eded3f40d3df90fe10bd5d92245112e3ce822cb33f8d4b0000000000000000000000000000000018bb0bcf262b7f4583d1375ecce64bd6bb1fcc64fa4b6a93bd9ffbe870fe79df0f29baa92eb844e5c04d09c966e810dc", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_82", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a800000000000000000000000000000000064be06bf988929a026a0ac78603eb822b9f6048ff829083cafc465aabb5e623509c8159ef889974c43634088195185a0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000b6a1b64528770227d79763e494d2d060d50a0530eacb8684147954b6ad194e0a0efd35ff457956b499f58f2177528ee00000000000000000000000000000000048431899516d3d0b8c327d80596e68cf41c94739c6e0fa7ef196332539f2aeeef71890a2db81b9a358e1b4f467a5b34000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a800000000000000000000000000000000064be06bf988929a026a0ac78603eb822b9f6048ff829083cafc465aabb5e623509c8159ef889974c43634088195185a0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000b6a1b64528770227d79763e494d2d060d50a0530eacb8684147954b6ad194e0a0efd35ff457956b499f58f2177528ee00000000000000000000000000000000048431899516d3d0b8c327d80596e68cf41c94739c6e0fa7ef196332539f2aeeef71890a2db81b9a358e1b4f467a5b34000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a800000000000000000000000000000000064be06bf988929a026a0ac78603eb822b9f6048ff829083cafc465aabb5e623509c8159ef889974c43634088195185a0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000e96f685e6f87677cda23177f9fe7fd15726ab31e4d85a5725e93d558bdf61437dbc2c9ebcfc6a94705fa70de88a81bd00000000000000000000000000000000157ce060a46912c992587fde3db4c64a705ab7115717031778176f6ea311cb352f3a76f4839be4658470e4b0b9854f77000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a80000000000000000000000000000000013b5317e3ff7540048b19ceebd47c15538d7eb3bf402823b9c348c464afb1000ce0f7ea4c1cb668af5c8cbf77e6a92510000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000b6a1b64528770227d79763e494d2d060d50a0530eacb8684147954b6ad194e0a0efd35ff457956b499f58f2177528ee00000000000000000000000000000000048431899516d3d0b8c327d80596e68cf41c94739c6e0fa7ef196332539f2aeeef71890a2db81b9a358e1b4f467a5b34000000000000000000000000000000000e4979375cd880e26d00461de629bac880c12e24ede4a7c702f151c34a728a69a021e37b6a1af520a5f47d3a33f8c8a800000000000000000000000000000000064be06bf988929a026a0ac78603eb822b9f6048ff829083cafc465aabb5e623509c8159ef889974c43634088195185a0000000000000000000000000000000011f9a369401d2c376c77b4b414e345e6108b11594b26521b51afe6318648af232bf9f1455a99dc2f9b0207cc78339510000000000000000000000000000000000863492499f4791e71bd8d58dd2444a34e66dd3e3ca1cb3669f4182fafc9ef080a1d8111b3dd754f2405032350732b32000000000000000000000000000000000b6a1b64528770227d79763e494d2d060d50a0530eacb8684147954b6ad194e0a0efd35ff457956b499f58f2177528ee00000000000000000000000000000000048431899516d3d0b8c327d80596e68cf41c94739c6e0fa7ef196332539f2aeeef71890a2db81b9a358e1b4f467a5b34", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_83", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f60000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee410000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000f20033541ee3c68655e2c49f5e2fc8afd33255764267e55b3985790d6bb531db7171fa81caae98449ae3c6bb49225b50000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee410000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f60000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e000000000000000000000000000000000400e7e4eda0a9c13465af099ece14d8b30662fea5e222c6ab71b8fb44562dcc42c5255319741ea56b7cbaa2eab957c9000000000000000000000000000000000b04a27de02c7e71bbc51fcf3268b1eb734b754ae6e1c86ceb2ae0c7d0b40851e24dd497a93abf96168f7a705aeebc6a0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000f20033541ee3c68655e2c49f5e2fc8afd33255764267e55b3985790d6bb531db7171fa81caae98449ae3c6bb49225b50000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e000000000000000000000000000000000400e7e4eda0a9c13465af099ece14d8b30662fea5e222c6ab71b8fb44562dcc42c5255319741ea56b7cbaa2eab957c9000000000000000000000000000000000b04a27de02c7e71bbc51fcf3268b1eb734b754ae6e1c86ceb2ae0c7d0b40851e24dd497a93abf96168f7a705aeebc6a0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f60000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee410000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000f20033541ee3c68655e2c49f5e2fc8afd33255764267e55b3985790d6bb531db7171fa81caae98449ae3c6bb49225b50000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e0000000000000000000000000000000016002a054bdf3cd916b5f8aca47d97feb170e8864da2eff8bbbf19a5b25ac857dbe6daab97dfe15a4e82455d154652e2000000000000000000000000000000000efc6f6c595368288f5687e710e2faebf12bd63a0ca34a527c05f1d925fcedd23c5e2b6708194069a36f858fa510ee410000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000ae10eb4f791aa31e5bd7b6c4d68b04c6744262d8f5e9469b3987b101ff5a3066794e05694a9167b7050c3944b6d84f60000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e000000000000000000000000000000000400e7e4eda0a9c13465af099ece14d8b30662fea5e222c6ab71b8fb44562dcc42c5255319741ea56b7cbaa2eab957c9000000000000000000000000000000000b04a27de02c7e71bbc51fcf3268b1eb734b754ae6e1c86ceb2ae0c7d0b40851e24dd497a93abf96168f7a705aeebc6a0000000000000000000000000000000017f16cffb737dadd52b3c5be258733dc47301474b7351c8dcb8ddb4c519018be08b64efea3336f2b6cfa78e0669dccf9000000000000000000000000000000000f20033541ee3c68655e2c49f5e2fc8afd33255764267e55b3985790d6bb531db7171fa81caae98449ae3c6bb49225b50000000000000000000000000000000000a8382a5f73a7d15c3ee35e5fcaf7142e6d91d71ef30ce7da9c8db2f80c95441dc93674bed244096b71aea40d43c318000000000000000000000000000000000733e9a022695ed6908caf6ec7e67211c6d5ac16ba3fb8e244227f5da787e69e7311fac1e8d102a2d84e6ba98903ff6e000000000000000000000000000000000400e7e4eda0a9c13465af099ece14d8b30662fea5e222c6ab71b8fb44562dcc42c5255319741ea56b7cbaa2eab957c9000000000000000000000000000000000b04a27de02c7e71bbc51fcf3268b1eb734b754ae6e1c86ceb2ae0c7d0b40851e24dd497a93abf96168f7a705aeebc6a", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_84", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886200000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a6168542000000000000000000000000000000000352645e60bb10bc86d6c65a7b0d1dc290ff759c1c2e729a081d4b508b165b46b552ddbcd57a3546658a2aa53b8c224900000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886200000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a10000000000000000000000000000000005f8533875eac92050d86039e855238880b460eeed8c645abfa580b2789a478ddd98b5643be0a68cde274ac22b35b6ec000000000000000000000000000000000b94a5563380e67aa08e1baf868e36e8d3633c3d748cea822ad21f9d579aa1e774c41be88fdc58b61b2390c024fe466c00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a6168542000000000000000000000000000000000352645e60bb10bc86d6c65a7b0d1dc290ff759c1c2e729a081d4b508b165b46b552ddbcd57a3546658a2aa53b8c224900000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a10000000000000000000000000000000005f8533875eac92050d86039e855238880b460eeed8c645abfa580b2789a478ddd98b5643be0a68cde274ac22b35b6ec000000000000000000000000000000000b94a5563380e67aa08e1baf868e36e8d3633c3d748cea822ad21f9d579aa1e774c41be88fdc58b61b2390c024fe466c00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886200000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a6168542000000000000000000000000000000000352645e60bb10bc86d6c65a7b0d1dc290ff759c1c2e729a081d4b508b165b46b552ddbcd57a3546658a2aa53b8c224900000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a1000000000000000000000000000000001408beb1c3951d79fa43477c5af6894ee3c2ea9605f8ae64a78b51ee7e16ae9641134a9a75735972dbd7b53dd4c9f3bf000000000000000000000000000000000e6c6c9405ff001faa8d8c06bcbd75ee91140f477ef8283d3c5eb3039f16543ca9e7e4162177a7499edb6f3fdb01643f00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a61685420000000000000000000000000000000016aead8bd8c4d5ddc444e15bc83e8f14d377d5e8d756a0255f1387506b9a9add69592241dbd9cab95474d55ac473886200000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a10000000000000000000000000000000005f8533875eac92050d86039e855238880b460eeed8c645abfa580b2789a478ddd98b5643be0a68cde274ac22b35b6ec000000000000000000000000000000000b94a5563380e67aa08e1baf868e36e8d3633c3d748cea822ad21f9d579aa1e774c41be88fdc58b61b2390c024fe466c00000000000000000000000000000000062168f0bfd29c44074430158708a1e3b6808bae633ce9506b32eb9124db1a0668d83f2076adffb568ccf289a6168542000000000000000000000000000000000352645e60bb10bc86d6c65a7b0d1dc290ff759c1c2e729a081d4b508b165b46b552ddbcd57a3546658a2aa53b8c224900000000000000000000000000000000050b449c2425926d961af37c4c88e671eac676a1f828def54b76dc04960d0222fb5832ed44c45d5fbb59549d9d24c236000000000000000000000000000000000c6e811987b30ed77c804e647f867186d425411e514e9bf31099cc0f695195729ae970766b2738a928e776511a44f8a10000000000000000000000000000000005f8533875eac92050d86039e855238880b460eeed8c645abfa580b2789a478ddd98b5643be0a68cde274ac22b35b6ec000000000000000000000000000000000b94a5563380e67aa08e1baf868e36e8d3633c3d748cea822ad21f9d579aa1e774c41be88fdc58b61b2390c024fe466c", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_85", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000000fc75b0eb2b6afed9d04e4c957ca64c2c595c1a00d295a23113cbb79f4e827b1ff0a40566039e32cd84024a9bd39fc3000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000001585d5f8db92696a596141237f5c78c524db68b482c469cca16c436c040d1d720387aafaa4282383c293d37eceb092d0000000000000000000000000000000013d1a7dfade2113a492ab236c090386e8d6d4ff5bf9ea02bfd80bd389d1b06fc72c00060d6fe3c74ac60775e1f45ae3f000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000000fc75b0eb2b6afed9d04e4c957ca64c2c595c1a00d295a23113cbb79f4e827b1ff0a40566039e32cd84024a9bd39fc3000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000001585d5f8db92696a596141237f5c78c524db68b482c469cca16c436c040d1d720387aafaa4282383c293d37eceb092d0000000000000000000000000000000013d1a7dfade2113a492ab236c090386e8d6d4ff5bf9ea02bfd80bd389d1b06fc72c00060d6fe3c74ac60775e1f45ae3f000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000000fc75b0eb2b6afed9d04e4c957ca64c2c595c1a00d295a23113cbb79f4e827b1ff0a40566039e32cd84024a9bd39fc3000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000018a8b48aabc6c003a58593a40b55e54b122994f9ab58cc229d1a0e6a3670244cfe73854f07117dc77dd5c2c81314a17e00000000000000000000000000000000062f6a0a8b9dd56001f0f57f82bb7468d709fb8f33e6729369b015685995ef27abebff9dda55c38b0d9e88a1e0b9fc6c000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000019049c394e547b9b714b5969adcf068b381def6af2b27d1d361d06e9576273a8febb5bf94b5061ccec7afdb5642c0ae8000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000001585d5f8db92696a596141237f5c78c524db68b482c469cca16c436c040d1d720387aafaa4282383c293d37eceb092d0000000000000000000000000000000013d1a7dfade2113a492ab236c090386e8d6d4ff5bf9ea02bfd80bd389d1b06fc72c00060d6fe3c74ac60775e1f45ae3f000000000000000000000000000000000c60b948942652a8214d8776b77a6c559ca77eb3a537b0a9abadc3058eac8c1d7840f091acd6c0056d5a71468a2b1ceb0000000000000000000000000000000000fc75b0eb2b6afed9d04e4c957ca64c2c595c1a00d295a23113cbb79f4e827b1ff0a40566039e32cd84024a9bd39fc3000000000000000000000000000000000a8679f08643ff1c4db54e58de15a4828fc80e3f9d80a932b26b49d5c13831b1dc5dc29af2e080eb08e71938e5010fc400000000000000000000000000000000110957f7e9f8e0806bb3d2a811b91c926feab046ef983495f3f768a6cc6e4a6d95bb92facb77d989e53ce5489aa64b3c0000000000000000000000000000000001585d5f8db92696a596141237f5c78c524db68b482c469cca16c436c040d1d720387aafaa4282383c293d37eceb092d0000000000000000000000000000000013d1a7dfade2113a492ab236c090386e8d6d4ff5bf9ea02bfd80bd389d1b06fc72c00060d6fe3c74ac60775e1f45ae3f", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_86", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb10000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000010093a3820fda13babfc82cc313c6e20c503af71d2c1940cb5b2c879da00bb5d3bfb3aa17c3bab75b99fd74a8b742b52000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb10000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000c7f7169a5067d4a6cf6c21254ce79f8b7b4ed0d0144107900749f2e0ead7c7cfc25c156a0f4cba09cf51b9d03a51e3f00000000000000000000000000000000185b5357fa6340abc3ae41a686a623684e425c1a6f85865a8a8be52a24d5ca7f975b6604571a5f603667ced874cf2afa0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000010093a3820fda13babfc82cc313c6e20c503af71d2c1940cb5b2c879da00bb5d3bfb3aa17c3bab75b99fd74a8b742b52000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000c7f7169a5067d4a6cf6c21254ce79f8b7b4ed0d0144107900749f2e0ead7c7cfc25c156a0f4cba09cf51b9d03a51e3f00000000000000000000000000000000185b5357fa6340abc3ae41a686a623684e425c1a6f85865a8a8be52a24d5ca7f975b6604571a5f603667ced874cf2afa0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb10000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000010093a3820fda13babfc82cc313c6e20c503af71d2c1940cb5b2c879da00bb5d3bfb3aa17c3bab75b99fd74a8b742b52000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000d81a0809479694fde24e5a3ee7d32deacc25e77f241024666bc3372e80379a722863ea8105f345f1d09e462fc5a8c6c0000000000000000000000000000000001a5be923f1ca5ee876d660fbca5896f1634ef6a83ff8c64dca4ed76d1db2ba4875099fa5a39a09f839731278b307fb10000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000009f7d7b21882455e9f1f24ea120f3eb69f739c1320c37eb2b17e0a271cb03ac6e2b0c55d3518548a005f28b5748b7f59000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000c7f7169a5067d4a6cf6c21254ce79f8b7b4ed0d0144107900749f2e0ead7c7cfc25c156a0f4cba09cf51b9d03a51e3f00000000000000000000000000000000185b5357fa6340abc3ae41a686a623684e425c1a6f85865a8a8be52a24d5ca7f975b6604571a5f603667ced874cf2afa0000000000000000000000000000000013fe38343072af8ef1d8247c3d46b4fd190086ceddfeb767787031368da6a6a6ae849cfc26a24ead499338e37fa337e30000000000000000000000000000000010093a3820fda13babfc82cc313c6e20c503af71d2c1940cb5b2c879da00bb5d3bfb3aa17c3bab75b99fd74a8b742b52000000000000000000000000000000000ba48cbd776dd03a5b69aed3a31b7d151a8d98cd9adc3b9987cf2ac94644a364ebf3d30cf31742e2152aeba0eebc9ceb0000000000000000000000000000000008793a44c730949a9e50e9439d579ff0991dfc49a67a29b1701989ab065e6e937b14ac1bbca5a3dbf79a61837ad18394000000000000000000000000000000000c7f7169a5067d4a6cf6c21254ce79f8b7b4ed0d0144107900749f2e0ead7c7cfc25c156a0f4cba09cf51b9d03a51e3f00000000000000000000000000000000185b5357fa6340abc3ae41a686a623684e425c1a6f85865a8a8be52a24d5ca7f975b6604571a5f603667ced874cf2afa", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_87", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000059a7b662af14e0d3c7016cbafedd42173501fc97199c07114f47acdabd930332af4dea84202253b42b6d947b33de27c0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b272000000000000000000000000000000001949a50c589ec63db98d39491100e8e407345f9b3874f3a28e9b77d2fc28bf31ef976841c4276cb669dc4f3cca42fffd0000000000000000000000000000000001cd05bfae784b11f1c102a7b0268fc480d19cd7c65a3583f4624fc0bc8aa3c97a4c164b3803bc6ccc4e5d5d928110cf0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000059a7b662af14e0d3c7016cbafedd42173501fc97199c07114f47acdabd930332af4dea84202253b42b6d947b33de27c0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b272000000000000000000000000000000001949a50c589ec63db98d39491100e8e407345f9b3874f3a28e9b77d2fc28bf31ef976841c4276cb669dc4f3cca42fffd0000000000000000000000000000000001cd05bfae784b11f1c102a7b0268fc480d19cd7c65a3583f4624fc0bc8aa3c97a4c164b3803bc6ccc4e5d5d928110cf0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000059a7b662af14e0d3c7016cbafedd42173501fc97199c07114f47acdabd930332af4dea84202253b42b6d947b33de27c0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b2720000000000000000000000000000000000b76cdde0e1205c918e6e6d324ac3f35d42ebe9bb101f1cd8955acdfa8836f22f1497bced2c93495022b0c335bcaaae0000000000000000000000000000000018340c2a8b079b88595aa50e93251d12e3a5aead2d2add3b72ce82e03a26525aa45fe9b379504392edb0a2a26d7e99dc0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000146696840e8e988d0eab90ea935dd8b5f1272bbb81eb524e523c57d34ad7c5f0f3b721566f51dac4774826b84cc1c82f0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b272000000000000000000000000000000001949a50c589ec63db98d39491100e8e407345f9b3874f3a28e9b77d2fc28bf31ef976841c4276cb669dc4f3cca42fffd0000000000000000000000000000000001cd05bfae784b11f1c102a7b0268fc480d19cd7c65a3583f4624fc0bc8aa3c97a4c164b3803bc6ccc4e5d5d928110cf0000000000000000000000000000000018c6df81d810deaac0b143edf79956c92af7941f7b279db345f838bd583177912fc2eb367616ae165e261014a4d7b1b900000000000000000000000000000000059a7b662af14e0d3c7016cbafedd42173501fc97199c07114f47acdabd930332af4dea84202253b42b6d947b33de27c0000000000000000000000000000000008691df5b245399f24118badfbef3e01a4acd53dc9ab149e407c733df6122fa91f5cbe2f9d247cdbac18b266d3d8f18300000000000000000000000000000000053e6eef4ffdbe239c8bbade8cfc90461d54f281ee6180c271412bf2d64e005d3f0291d3401c324e41067f4dfcc4b272000000000000000000000000000000001949a50c589ec63db98d39491100e8e407345f9b3874f3a28e9b77d2fc28bf31ef976841c4276cb669dc4f3cca42fffd0000000000000000000000000000000001cd05bfae784b11f1c102a7b0268fc480d19cd7c65a3583f4624fc0bc8aa3c97a4c164b3803bc6ccc4e5d5d928110cf", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_88", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab400000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d00000000000000000000000000000000102ba7f9db164318194ab17f615ca8cc741dab773e8609023c58a722f1e4f209eb4bc3cff7a2b71c08bdd421068b9ff700000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab400000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c66400000000000000000000000000000000082961f3752eb7324800bc217514792b2111abe52df54973615737b8ec3a9f2db36dc1782d20782df8efae4bd7b8559600000000000000000000000000000000075729f6b9337b3f25da9d33cdbed7207a589a342cee61e8e99e030244b814accc93b26a0ca6d9ba08acf29511ef15be000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d00000000000000000000000000000000102ba7f9db164318194ab17f615ca8cc741dab773e8609023c58a722f1e4f209eb4bc3cff7a2b71c08bdd421068b9ff700000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c66400000000000000000000000000000000082961f3752eb7324800bc217514792b2111abe52df54973615737b8ec3a9f2db36dc1782d20782df8efae4bd7b8559600000000000000000000000000000000075729f6b9337b3f25da9d33cdbed7207a589a342cee61e8e99e030244b814accc93b26a0ca6d9ba08acf29511ef15be000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab400000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d00000000000000000000000000000000102ba7f9db164318194ab17f615ca8cc741dab773e8609023c58a722f1e4f209eb4bc3cff7a2b71c08bdd421068b9ff700000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c6640000000000000000000000000000000011d7aff6c4512f68031aeb94ce3733ac43659f9fc58fc94c05d99ae80a7656f66b3e3e86843387d1c10f51b4284755150000000000000000000000000000000012a9e7f3804c6b5b25410a82758cd5b6ea1eb150c696b0d67d92cf9eb1f8e17752184d94a4ad2645b1520d6aee1094ed000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d0000000000000000000000000000000009d569f05e69a38231d0f636e1ef040af059a00db4ff09bd2ad82b7e04cc041a33603c2eb9b148e3b1412bdef9740ab400000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c66400000000000000000000000000000000082961f3752eb7324800bc217514792b2111abe52df54973615737b8ec3a9f2db36dc1782d20782df8efae4bd7b8559600000000000000000000000000000000075729f6b9337b3f25da9d33cdbed7207a589a342cee61e8e99e030244b814accc93b26a0ca6d9ba08acf29511ef15be000000000000000000000000000000000c6b634d90c2664b9fa4ccbca35913d23696825350e21f0a6dd5e9abb17497a0a499e1b7b928a57ba8c730158f63b75d00000000000000000000000000000000102ba7f9db164318194ab17f615ca8cc741dab773e8609023c58a722f1e4f209eb4bc3cff7a2b71c08bdd421068b9ff700000000000000000000000000000000042120affcefe4735ae25e192d1cf34e40afdc6d2ebdacde2e23d30709fecfb71960bc9131e3702b27b6fcd5c7a98d170000000000000000000000000000000001998caf5163b0dccec7c8423c4c56a7d0f0b26d9034f707ed07f636f42dac590a2674c1667d70be385c4e626815c66400000000000000000000000000000000082961f3752eb7324800bc217514792b2111abe52df54973615737b8ec3a9f2db36dc1782d20782df8efae4bd7b8559600000000000000000000000000000000075729f6b9337b3f25da9d33cdbed7207a589a342cee61e8e99e030244b814accc93b26a0ca6d9ba08acf29511ef15be", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_89", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c50000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000b760253acb4c395332c1e3584f60d965a4b0b4f5274f457d05bdafb08546282829ae2c61e482a43136afa03ca0102e90000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c50000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca000000000000000000000000000000000144811cb59ebf7e5a380ca9c2b30dc987778224453ea65ab9fcc5ddd0a91a47aac13a459cf5ecc5bffc5f3c0502e8cc0000000000000000000000000000000007b4c5f3cf21e53b36ed096b1d0998c2be68f6977cbe3e12a63ec77c545316c556bce0a891a762b8af6a4304d0d911e60000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000b760253acb4c395332c1e3584f60d965a4b0b4f5274f457d05bdafb08546282829ae2c61e482a43136afa03ca0102e90000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca000000000000000000000000000000000144811cb59ebf7e5a380ca9c2b30dc987778224453ea65ab9fcc5ddd0a91a47aac13a459cf5ecc5bffc5f3c0502e8cc0000000000000000000000000000000007b4c5f3cf21e53b36ed096b1d0998c2be68f6977cbe3e12a63ec77c545316c556bce0a891a762b8af6a4304d0d911e60000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c50000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000b760253acb4c395332c1e3584f60d965a4b0b4f5274f457d05bdafb08546282829ae2c61e482a43136afa03ca0102e90000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca0000000000000000000000000000000018bc90cd83e1271bf0e39b0c80989f0ddcffc960ae466c64ad340cc32607dbdc73eac5b9145e1339fa02a0c3fafcc1df00000000000000000000000000000000124c4bf66a5e015f142e9e4b26421414a60e54ed76c6d4acc0f20b24a25ddf5ec7ef1f561fac9d470a94bcfb2f2698c50000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000e8b0f968ccb230517ef8980be559f410a2c4035a1101e6796d4f7a5ee5c93a19c111d38930bd5bca69405fc35fea7c20000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca000000000000000000000000000000000144811cb59ebf7e5a380ca9c2b30dc987778224453ea65ab9fcc5ddd0a91a47aac13a459cf5ecc5bffc5f3c0502e8cc0000000000000000000000000000000007b4c5f3cf21e53b36ed096b1d0998c2be68f6977cbe3e12a63ec77c545316c556bce0a891a762b8af6a4304d0d911e60000000000000000000000000000000018129b2f00be24717c906d215beaaa136758aa1730bd0bbe9c0de9b3cbb3c0ea47911817fa322b907cc6fc720cabde05000000000000000000000000000000000b760253acb4c395332c1e3584f60d965a4b0b4f5274f457d05bdafb08546282829ae2c61e482a43136afa03ca0102e90000000000000000000000000000000001462f8080d9b51235a8aa652445f509e3e13e3073769e9a047e8b2bfa5b227f4354bef017d18bf06f7ec98c169abf1e000000000000000000000000000000000070fdbc18112b49bd83f4347922797f2bbd68bf2592ad59041c97948ba7a091bdb3622c804803ad605604ba364dbdca000000000000000000000000000000000144811cb59ebf7e5a380ca9c2b30dc987778224453ea65ab9fcc5ddd0a91a47aac13a459cf5ecc5bffc5f3c0502e8cc0000000000000000000000000000000007b4c5f3cf21e53b36ed096b1d0998c2be68f6977cbe3e12a63ec77c545316c556bce0a891a762b8af6a4304d0d911e6", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_90", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a600000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a470000000000000000000000000000000000cff9184748200fc11245bb213f9d00c3eef7f4698174e9e7a1ff6cf072a30d5f28173aed5fbbdf46b444282225790500000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a600000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca2000000000000000000000000000000000207d4a04d23b1cc880275ea6075f929ea097e464b208c94bf7cb545c76add5a557e5fe08ce4070c77be430e21b38e660000000000000000000000000000000017e907545d9a6a5733fd81aeea0dd92221328dc5b2e745b3102a28f9cbe013b548a061b1ffd55b18059e523a5908d7cd000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a470000000000000000000000000000000000cff9184748200fc11245bb213f9d00c3eef7f4698174e9e7a1ff6cf072a30d5f28173aed5fbbdf46b444282225790500000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca2000000000000000000000000000000000207d4a04d23b1cc880275ea6075f929ea097e464b208c94bf7cb545c76add5a557e5fe08ce4070c77be430e21b38e660000000000000000000000000000000017e907545d9a6a5733fd81aeea0dd92221328dc5b2e745b3102a28f9cbe013b548a061b1ffd55b18059e523a5908d7cd000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a600000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a470000000000000000000000000000000000cff9184748200fc11245bb213f9d00c3eef7f4698174e9e7a1ff6cf072a30d5f28173aed5fbbdf46b444282225790500000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca20000000000000000000000000000000017f93d49ec5c34cdc31931cbe2d5b3ad7a6dcd3ea864862aa7b41d5b2f4618c9c92da01e246ff8f34240bcf1de4c1c450000000000000000000000000000000002180a95dbe57c43171e2607593dd3b54344bdbf409dcd0c5706a9a72ad0e26ed60b9e4cb17ea4e7b460adc5a6f6d2de000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a4700000000000000000000000000000000193118d1f237c68a8a0961fb220c0fd6a08853908a039dd57f8ed334063e5316bf83e8c3c3f44420734abbd7ddda31a600000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca2000000000000000000000000000000000207d4a04d23b1cc880275ea6075f929ea097e464b208c94bf7cb545c76add5a557e5fe08ce4070c77be430e21b38e660000000000000000000000000000000017e907545d9a6a5733fd81aeea0dd92221328dc5b2e745b3102a28f9cbe013b548a061b1ffd55b18059e523a5908d7cd000000000000000000000000000000001667fdc9b89d12fb0704fdec910cab1b51ac04219ef6e50f996688b2ceb26dca0e9e8594c5b81fca2e8fc2c8d8fa9a470000000000000000000000000000000000cff9184748200fc11245bb213f9d00c3eef7f4698174e9e7a1ff6cf072a30d5f28173aed5fbbdf46b444282225790500000000000000000000000000000000156901359e5b399168e90ccad27a054d147aa9c4a731294180e395e8e2d458f5537fdac591cdc82fd8bffa4c9fa126ed00000000000000000000000000000000143872757c0a25d85e95a86c5e09175fdbeaf59bae3d1e8a367902d59c662cc3a293ae252443b3201671ad1dbaed8ca2000000000000000000000000000000000207d4a04d23b1cc880275ea6075f929ea097e464b208c94bf7cb545c76add5a557e5fe08ce4070c77be430e21b38e660000000000000000000000000000000017e907545d9a6a5733fd81aeea0dd92221328dc5b2e745b3102a28f9cbe013b548a061b1ffd55b18059e523a5908d7cd", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_91", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000012feb2cdef2060f089c32a68f91d4ac9e0a1461cbf4bd1bf8ed26782a700052ee2fb73af689490ba12233c8dd133158d00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c0130000000000000000000000000000000016b19dd160140ab5592e4e1f46ad0e3e413ceed148adfb0bf5b240a161b22b7dac5b45a389770a634bc8551f72dd12710000000000000000000000000000000009f439fffd4bbbf789bd0b5521a9dcea6e66282a167ce9b26d6543fba82101003d31f4a0ed3592f820d0a6d81c004954000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000012feb2cdef2060f089c32a68f91d4ac9e0a1461cbf4bd1bf8ed26782a700052ee2fb73af689490ba12233c8dd133158d00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c0130000000000000000000000000000000016b19dd160140ab5592e4e1f46ad0e3e413ceed148adfb0bf5b240a161b22b7dac5b45a389770a634bc8551f72dd12710000000000000000000000000000000009f439fffd4bbbf789bd0b5521a9dcea6e66282a167ce9b26d6543fba82101003d31f4a0ed3592f820d0a6d81c004954000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000012feb2cdef2060f089c32a68f91d4ac9e0a1461cbf4bd1bf8ed26782a700052ee2fb73af689490ba12233c8dd133158d00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c01300000000000000000000000000000000034f7418d96bdbe4f1ed5996fc9e9e99233a5cb3aad717b3717e91ff94fecaa67250ba5b27dcf59c6e36aae08d22983a00000000000000000000000000000000100cd7ea3c342aa2c15e9c6121a1cfecf611235add08290cf9cb8ea54e8ff523e17a0b5dc41e6d07992e5927e3ff6157000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000007025f1c4a5f85a9c1587d4d4a2e620d83d60568343940ffd85e6b1e4fb0f0f53bb08c4f48bf6f45a7dbc3722ecc951e00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c0130000000000000000000000000000000016b19dd160140ab5592e4e1f46ad0e3e413ceed148adfb0bf5b240a161b22b7dac5b45a389770a634bc8551f72dd12710000000000000000000000000000000009f439fffd4bbbf789bd0b5521a9dcea6e66282a167ce9b26d6543fba82101003d31f4a0ed3592f820d0a6d81c004954000000000000000000000000000000000217a4c563d730ef545e452038813301933ccc6638321ee5e217dad0be2e3ddc855a14054d0d72b6bcc692a5fb1ac7300000000000000000000000000000000012feb2cdef2060f089c32a68f91d4ac9e0a1461cbf4bd1bf8ed26782a700052ee2fb73af689490ba12233c8dd133158d00000000000000000000000000000000162ea8f985c83d59361ee6beb49cf2a797d8c909e2eccfc61fdc5359d5ac9b10fbaeef2eebea1667b5b9bf8f5d603d6e0000000000000000000000000000000018344ca9d4913e817264ed8119fe4d136f2041b0a99d4b5fe7f2b7f268256eec9fceb27fa61c4225f47babd17759c0130000000000000000000000000000000016b19dd160140ab5592e4e1f46ad0e3e413ceed148adfb0bf5b240a161b22b7dac5b45a389770a634bc8551f72dd12710000000000000000000000000000000009f439fffd4bbbf789bd0b5521a9dcea6e66282a167ce9b26d6543fba82101003d31f4a0ed3592f820d0a6d81c004954", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_92", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc00000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000c28402cd28b39ce814adfdb8453fd646f5ae3e41d718e5af1fd250e3b0cabf2efa01f045f3dce88c84f0b19b3fefbb00000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc00000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000006a9c650ba974e0fa2fdf6d3659220f47d76f581ec156662b4e9dc4470164e68df977370d2bcf1cad4191031fdc1476f000000000000000000000000000000001068554cf7ba1173150be2cfb7ab4503ecea55b5f29f7d24086ba68b610637b5f0192bf1fe04557b68c1eafa9736daeb0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000c28402cd28b39ce814adfdb8453fd646f5ae3e41d718e5af1fd250e3b0cabf2efa01f045f3dce88c84f0b19b3fefbb00000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000006a9c650ba974e0fa2fdf6d3659220f47d76f581ec156662b4e9dc4470164e68df977370d2bcf1cad4191031fdc1476f000000000000000000000000000000001068554cf7ba1173150be2cfb7ab4503ecea55b5f29f7d24086ba68b610637b5f0192bf1fe04557b68c1eafa9736daeb0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc00000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000c28402cd28b39ce814adfdb8453fd646f5ae3e41d718e5af1fd250e3b0cabf2efa01f045f3dce88c84f0b19b3fefbb00000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000013574b997ee8988aa81db0e2ddb98be2e7005603076fac5cb246f65c869aa7bb3f148c8dde970e34e5e5efce023e633c000000000000000000000000000000000998bc9d41c5d527360fc4e68ba067d3778cf5cf00e5959b5ec52c1595aabe6e2e92d40cb34faa84513d150568c8cfc00000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000dd8d1bd66f4accbc9d0c7dabef7af72f51c67a0d61384647533ad92bba44a312f0be0fa52163176f1aff4e64c00aefb0000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000006a9c650ba974e0fa2fdf6d3659220f47d76f581ec156662b4e9dc4470164e68df977370d2bcf1cad4191031fdc1476f000000000000000000000000000000001068554cf7ba1173150be2cfb7ab4503ecea55b5f29f7d24086ba68b610637b5f0192bf1fe04557b68c1eafa9736daeb0000000000000000000000000000000009ec00ea2da59d937d3154d86dbed2957667253401bce9de80e0ffe6df32f36b06404b9e3af08e912a0b4ef091f93efb000000000000000000000000000000000c28402cd28b39ce814adfdb8453fd646f5ae3e41d718e5af1fd250e3b0cabf2efa01f045f3dce88c84f0b19b3fefbb00000000000000000000000000000000001cdfae9234096578b9413f926ef8c6831f2c0f700e25d7553a746aef44238e493f8032e09f67f2fed9676c9611f60e70000000000000000000000000000000019c8bae08d3926997146f7827f00cde863684dd4050ea5da64f6798e7a930d3c1f34046bea0f44232594f5469db566280000000000000000000000000000000006a9c650ba974e0fa2fdf6d3659220f47d76f581ec156662b4e9dc4470164e68df977370d2bcf1cad4191031fdc1476f000000000000000000000000000000001068554cf7ba1173150be2cfb7ab4503ecea55b5f29f7d24086ba68b610637b5f0192bf1fe04557b68c1eafa9736daeb", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_93", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "0000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c3585000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc012040000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec00000000000000000000000000000000003b90ede51e98dd9163b911431789b534aef452b9bd1b423a5d8c2ea1652cd05aa308568a7031d958fc2f32e9cb37526000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc012040000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c3585000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000011396b6eafe9d8f61a831ef9d6688e586602c5138ddc65d1bf69a9916c1e8db31ddf432b1406a597c7dfb49c1339727900000000000000000000000000000000183398716b5783fb7971e27306f651b8a91efc0462ef799742c8eaeeaf919d08348e8c1700b1b850e220b0e0133f98a70000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec00000000000000000000000000000000003b90ede51e98dd9163b911431789b534aef452b9bd1b423a5d8c2ea1652cd05aa308568a7031d958fc2f32e9cb37526000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000011396b6eafe9d8f61a831ef9d6688e586602c5138ddc65d1bf69a9916c1e8db31ddf432b1406a597c7dfb49c1339727900000000000000000000000000000000183398716b5783fb7971e27306f651b8a91efc0462ef799742c8eaeeaf919d08348e8c1700b1b850e220b0e0133f98a70000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c3585000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc012040000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec00000000000000000000000000000000003b90ede51e98dd9163b911431789b534aef452b9bd1b423a5d8c2ea1652cd05aa308568a7031d958fc2f32e9cb37526000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000008c7a67b89960da4309888bc6ce31e7efe74867165a8aceda7c7290f8a92687100ccbcd39d4d5a67f21f4b63ecc638320000000000000000000000000000000001cd7978ce28629ed1a9c5433c555b1ebb584f80909599282467e7b2471f591bea1d73e7b0a247aed7de4f1fecc012040000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec0000000000000000000000000000000001648030be79658c134e016a211d311841988065957b35e9bc1580fb6e05e291e747b7a960a50e26a2a3c0cd1634c3585000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000011396b6eafe9d8f61a831ef9d6688e586602c5138ddc65d1bf69a9916c1e8db31ddf432b1406a597c7dfb49c1339727900000000000000000000000000000000183398716b5783fb7971e27306f651b8a91efc0462ef799742c8eaeeaf919d08348e8c1700b1b850e220b0e0133f98a70000000000000000000000000000000014153e01c9e495c5c01c82b3cad9eaf20cf78369ccbabf57fb160ded309cbd1caea3d3df38a7ea5490c67f168e9acec00000000000000000000000000000000003b90ede51e98dd9163b911431789b534aef452b9bd1b423a5d8c2ea1652cd05aa308568a7031d958fc2f32e9cb37526000000000000000000000000000000000c78d84157dc0b102c3843e4c8e88f244cc1b2a27043e07b2fab694a58f93d47e4cf9ca1158a8e30e3d43f94a20d33b50000000000000000000000000000000004842fe0df312f735a9d8af0c2ff7c561ed9cf4add5e3e9402bcff1190f3f36ca91de8edc9472b3ebd27ee2d9afdf8770000000000000000000000000000000011396b6eafe9d8f61a831ef9d6688e586602c5138ddc65d1bf69a9916c1e8db31ddf432b1406a597c7dfb49c1339727900000000000000000000000000000000183398716b5783fb7971e27306f651b8a91efc0462ef799742c8eaeeaf919d08348e8c1700b1b850e220b0e0133f98a7", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_94", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false }, { "Input": "000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d57950000000000000000000000000000000005bd0ff24e15f0682c6d1a09096fca081991bd3f9f10a2a18d3f1c7470e9a2bc0ac3b149b7750aedce9c1ae6bd773820000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd00000000000000000000000000000000189be781abc010602e9262930d8dfdb2d7df81be0de1656554cb5afa3d059f1cc389678008ea84ba23ed5a54e9b07827000000000000000000000000000000001476dab5bd29af19c4e8f947b4255e4b86625fd4451b902fd10180e9ce7ed639c6e65683fabf0824a2a00185e82c3df5000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d57950000000000000000000000000000000005bd0ff24e15f0682c6d1a09096fca081991bd3f9f10a2a18d3f1c7470e9a2bc0ac3b149b7750aedce9c1ae6bd773820000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd00000000000000000000000000000000189be781abc010602e9262930d8dfdb2d7df81be0de1656554cb5afa3d059f1cc389678008ea84ba23ed5a54e9b07827000000000000000000000000000000001476dab5bd29af19c4e8f947b4255e4b86625fd4451b902fd10180e9ce7ed639c6e65683fabf0824a2a00185e82c3df5000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d57950000000000000000000000000000000005bd0ff24e15f0682c6d1a09096fca081991bd3f9f10a2a18d3f1c7470e9a2bc0ac3b149b7750aedce9c1ae6bd773820000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd0000000000000000000000000000000001652a688dbfd63a1c89452335bdaf248c97c9c6e5a3ad5a126577a6b9ab57075b22987ea8697b459611a5ab164f328400000000000000000000000000000000058a37347c5637808632ae6e8f264e8bde14ebb0ae69828f962f51b728321fea57c5a97ab694f7db175efe7a17d36cb6000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d579500000000000000000000000000000000144401f7eb69f6321eae8dad39dbe2cf4ae58e455474701dd9f1b62c85c7536813e84eb4f9def511eb62e5194288728b000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd00000000000000000000000000000000189be781abc010602e9262930d8dfdb2d7df81be0de1656554cb5afa3d059f1cc389678008ea84ba23ed5a54e9b07827000000000000000000000000000000001476dab5bd29af19c4e8f947b4255e4b86625fd4451b902fd10180e9ce7ed639c6e65683fabf0824a2a00185e82c3df5000000000000000000000000000000001555535228eb9a24f460df9894d59aa06fc848a8bf8d6c3b51653b1d85734b3c5a2bece161309bd478d356fa198d57950000000000000000000000000000000005bd0ff24e15f0682c6d1a09096fca081991bd3f9f10a2a18d3f1c7470e9a2bc0ac3b149b7750aedce9c1ae6bd773820000000000000000000000000000000000e619d79792ac685030311a31a21203e5172d2e5d20ecf69a1e64158e7fe903b3695fd15432d3ca35562b5a8bd9cbdc20000000000000000000000000000000012394a621a503d1d92df3306649a6c6979816cabeb8f8d27450ec883c4e75f6f7411f3bfd068dc8dee58cdb8ebbd91bd00000000000000000000000000000000189be781abc010602e9262930d8dfdb2d7df81be0de1656554cb5afa3d059f1cc389678008ea84ba23ed5a54e9b07827000000000000000000000000000000001476dab5bd29af19c4e8f947b4255e4b86625fd4451b902fd10180e9ce7ed639c6e65683fabf0824a2a00185e82c3df5", "Expected": "0000000000000000000000000000000000000000000000000000000000000001", "Name": "matter_pairing_95", - "Gas": 299000, + "Gas": 409000, "NoBenchmark": false } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG1Add.json b/core/vm/testdata/precompiles/fail-blsG1Add.json index e58ec0e90ec..86bd3d660f6 100644 --- a/core/vm/testdata/precompiles/fail-blsG1Add.json +++ b/core/vm/testdata/precompiles/fail-blsG1Add.json @@ -21,12 +21,12 @@ }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g1add_invalid_field_element" }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", - "ExpectedError": "point is not on curve", + "ExpectedError": "invalid point: not on curve", "Name": "bls_g1add_point_not_on_curve" } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG1Mul.json b/core/vm/testdata/precompiles/fail-blsG1Mul.json index acb8228aaaf..7473d4d35ca 100644 --- a/core/vm/testdata/precompiles/fail-blsG1Mul.json +++ b/core/vm/testdata/precompiles/fail-blsG1Mul.json @@ -21,12 +21,12 @@ }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000000000000000000000000000000000007", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g1mul_invalid_field_element" }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "ExpectedError": "point is not on curve", + "ExpectedError": "invalid point: not on curve", "Name": "bls_g1mul_point_not_on_curve" } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG1MultiExp.json b/core/vm/testdata/precompiles/fail-blsG1MultiExp.json index 2cd28bd3b5c..24a46cc0d09 100644 --- a/core/vm/testdata/precompiles/fail-blsG1MultiExp.json +++ b/core/vm/testdata/precompiles/fail-blsG1MultiExp.json @@ -16,7 +16,7 @@ }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000000000000000000000000000000000007", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g1multiexp_invalid_field_element" }, { @@ -26,7 +26,7 @@ }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "ExpectedError": "point is not on curve", + "ExpectedError": "invalid point: not on curve", "Name": "bls_g1multiexp_point_not_on_curve" } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG2Add.json b/core/vm/testdata/precompiles/fail-blsG2Add.json index b1fe9d5b8d5..b28a052b25c 100644 --- a/core/vm/testdata/precompiles/fail-blsG2Add.json +++ b/core/vm/testdata/precompiles/fail-blsG2Add.json @@ -21,12 +21,12 @@ }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g2add_invalid_field_element" }, { "Input": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", - "ExpectedError": "point is not on curve", + "ExpectedError": "invalid point: not on curve", "Name": "bls_g2add_point_not_on_curve" } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG2Mul.json b/core/vm/testdata/precompiles/fail-blsG2Mul.json index c2f0b89c8a7..54a13c7f959 100644 --- a/core/vm/testdata/precompiles/fail-blsG2Mul.json +++ b/core/vm/testdata/precompiles/fail-blsG2Mul.json @@ -21,12 +21,12 @@ }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000000000000000000000000000000000007", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g2mul_invalid_field_element" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "ExpectedError": "point is not on curve", + "ExpectedError": "invalid point: not on curve", "Name": "bls_g2mul_point_not_on_curve" } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsG2MultiExp.json b/core/vm/testdata/precompiles/fail-blsG2MultiExp.json index 437f8dfca5c..1679f17b305 100644 --- a/core/vm/testdata/precompiles/fail-blsG2MultiExp.json +++ b/core/vm/testdata/precompiles/fail-blsG2MultiExp.json @@ -21,12 +21,12 @@ }, { "Input": "00000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac0000000000000000000000000000000000000000000000000000000000000007", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_g2multiexp_invalid_field_element" }, { "Input": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "ExpectedError": "point is not on curve", + "ExpectedError": "invalid point: not on curve", "Name": "bls_g2multiexp_point_not_on_curve" } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsMapG1.json b/core/vm/testdata/precompiles/fail-blsMapG1.json index 8550269f129..8eacca48655 100644 --- a/core/vm/testdata/precompiles/fail-blsMapG1.json +++ b/core/vm/testdata/precompiles/fail-blsMapG1.json @@ -16,7 +16,7 @@ }, { "Input": "000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_mapg1_invalid_fq_element" } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsMapG2.json b/core/vm/testdata/precompiles/fail-blsMapG2.json index 397a608b0a2..184d3ecbaa4 100644 --- a/core/vm/testdata/precompiles/fail-blsMapG2.json +++ b/core/vm/testdata/precompiles/fail-blsMapG2.json @@ -16,7 +16,7 @@ }, { "Input": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_mapg2_invalid_fq_element" } ] \ No newline at end of file diff --git a/core/vm/testdata/precompiles/fail-blsPairing.json b/core/vm/testdata/precompiles/fail-blsPairing.json index 084e55635c5..4314d7335d2 100644 --- a/core/vm/testdata/precompiles/fail-blsPairing.json +++ b/core/vm/testdata/precompiles/fail-blsPairing.json @@ -11,7 +11,7 @@ }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000001a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaac", - "ExpectedError": "must be less than modulus", + "ExpectedError": "invalid fp.Element encoding", "Name": "bls_pairing_invalid_field_element" }, { @@ -21,12 +21,12 @@ }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be", - "ExpectedError": "point is not on curve", + "ExpectedError": "invalid point: not on curve", "Name": "bls_pairing_g1_not_on_curve" }, { "Input": "0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80000000000000000000000000000000013e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e000000000000000000000000000000000ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801000000000000000000000000000000000606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "ExpectedError": "point is not on curve", + "ExpectedError": "invalid point: not on curve", "Name": "bls_pairing_g2_not_on_curve" }, { diff --git a/crypto/bls12381/arithmetic_decl.go b/crypto/bls12381/arithmetic_decl.go deleted file mode 100644 index aba0233c447..00000000000 --- a/crypto/bls12381/arithmetic_decl.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//go:build (amd64 && blsasm) || (amd64 && blsadx) - -package bls12381 - -import ( - "golang.org/x/sys/cpu" -) - -func init() { - if !enableADX || !cpu.X86.HasADX || !cpu.X86.HasBMI2 { - mul = mulNoADX - } -} - -// Use ADX backend for default -var mul func(c, a, b *fe) = mulADX - -func square(c, a *fe) { - mul(c, a, a) -} - -func neg(c, a *fe) { - if a.isZero() { - c.set(a) - } else { - _neg(c, a) - } -} - -//go:noescape -func add(c, a, b *fe) - -//go:noescape -func addAssign(a, b *fe) - -//go:noescape -func ladd(c, a, b *fe) - -//go:noescape -func laddAssign(a, b *fe) - -//go:noescape -func double(c, a *fe) - -//go:noescape -func doubleAssign(a *fe) - -//go:noescape -func ldouble(c, a *fe) - -//go:noescape -func sub(c, a, b *fe) - -//go:noescape -func subAssign(a, b *fe) - -//go:noescape -func lsubAssign(a, b *fe) - -//go:noescape -func _neg(c, a *fe) - -//go:noescape -func mulNoADX(c, a, b *fe) - -//go:noescape -func mulADX(c, a, b *fe) diff --git a/crypto/bls12381/arithmetic_fallback.go b/crypto/bls12381/arithmetic_fallback.go deleted file mode 100644 index b7774bebcb2..00000000000 --- a/crypto/bls12381/arithmetic_fallback.go +++ /dev/null @@ -1,566 +0,0 @@ -// Native go field arithmetic code is generated with 'goff' -// https://github.com/ConsenSys/goff -// Many function signature of field operations are renamed. - -// Copyright 2020 ConsenSys AG -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// field modulus q = -// -// 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787 -// Code generated by goff DO NOT EDIT -// goff version: v0.1.0 - build: 790f1f56eac432441e043abff8819eacddd1d668 -// fe are assumed to be in Montgomery form in all methods - -// /!\ WARNING /!\ -// this code has not been audited and is provided as-is. In particular, -// there is no security guarantees such as constant time implementation -// or side-channel attack resistance -// /!\ WARNING /!\ - -// Package bls (generated by goff) contains field arithmetics operations - -//go:build !amd64 || (!blsasm && !blsadx) - -package bls12381 - -import ( - "math/bits" -) - -func add(z, x, y *fe) { - var carry uint64 - - z[0], carry = bits.Add64(x[0], y[0], 0) - z[1], carry = bits.Add64(x[1], y[1], carry) - z[2], carry = bits.Add64(x[2], y[2], carry) - z[3], carry = bits.Add64(x[3], y[3], carry) - z[4], carry = bits.Add64(x[4], y[4], carry) - z[5], _ = bits.Add64(x[5], y[5], carry) - - // if z > q --> z -= q - // note: this is NOT constant time - if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { - var b uint64 - z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) - z[1], b = bits.Sub64(z[1], 2210141511517208575, b) - z[2], b = bits.Sub64(z[2], 7435674573564081700, b) - z[3], b = bits.Sub64(z[3], 7239337960414712511, b) - z[4], b = bits.Sub64(z[4], 5412103778470702295, b) - z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) - } -} - -func addAssign(x, y *fe) { - var carry uint64 - - x[0], carry = bits.Add64(x[0], y[0], 0) - x[1], carry = bits.Add64(x[1], y[1], carry) - x[2], carry = bits.Add64(x[2], y[2], carry) - x[3], carry = bits.Add64(x[3], y[3], carry) - x[4], carry = bits.Add64(x[4], y[4], carry) - x[5], _ = bits.Add64(x[5], y[5], carry) - - // if z > q --> z -= q - // note: this is NOT constant time - if !(x[5] < 1873798617647539866 || (x[5] == 1873798617647539866 && (x[4] < 5412103778470702295 || (x[4] == 5412103778470702295 && (x[3] < 7239337960414712511 || (x[3] == 7239337960414712511 && (x[2] < 7435674573564081700 || (x[2] == 7435674573564081700 && (x[1] < 2210141511517208575 || (x[1] == 2210141511517208575 && (x[0] < 13402431016077863595))))))))))) { - var b uint64 - x[0], b = bits.Sub64(x[0], 13402431016077863595, 0) - x[1], b = bits.Sub64(x[1], 2210141511517208575, b) - x[2], b = bits.Sub64(x[2], 7435674573564081700, b) - x[3], b = bits.Sub64(x[3], 7239337960414712511, b) - x[4], b = bits.Sub64(x[4], 5412103778470702295, b) - x[5], _ = bits.Sub64(x[5], 1873798617647539866, b) - } -} - -func ladd(z, x, y *fe) { - var carry uint64 - z[0], carry = bits.Add64(x[0], y[0], 0) - z[1], carry = bits.Add64(x[1], y[1], carry) - z[2], carry = bits.Add64(x[2], y[2], carry) - z[3], carry = bits.Add64(x[3], y[3], carry) - z[4], carry = bits.Add64(x[4], y[4], carry) - z[5], _ = bits.Add64(x[5], y[5], carry) -} - -func laddAssign(x, y *fe) { - var carry uint64 - x[0], carry = bits.Add64(x[0], y[0], 0) - x[1], carry = bits.Add64(x[1], y[1], carry) - x[2], carry = bits.Add64(x[2], y[2], carry) - x[3], carry = bits.Add64(x[3], y[3], carry) - x[4], carry = bits.Add64(x[4], y[4], carry) - x[5], _ = bits.Add64(x[5], y[5], carry) -} - -func double(z, x *fe) { - var carry uint64 - - z[0], carry = bits.Add64(x[0], x[0], 0) - z[1], carry = bits.Add64(x[1], x[1], carry) - z[2], carry = bits.Add64(x[2], x[2], carry) - z[3], carry = bits.Add64(x[3], x[3], carry) - z[4], carry = bits.Add64(x[4], x[4], carry) - z[5], _ = bits.Add64(x[5], x[5], carry) - - // if z > q --> z -= q - // note: this is NOT constant time - if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { - var b uint64 - z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) - z[1], b = bits.Sub64(z[1], 2210141511517208575, b) - z[2], b = bits.Sub64(z[2], 7435674573564081700, b) - z[3], b = bits.Sub64(z[3], 7239337960414712511, b) - z[4], b = bits.Sub64(z[4], 5412103778470702295, b) - z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) - } -} - -func doubleAssign(z *fe) { - var carry uint64 - - z[0], carry = bits.Add64(z[0], z[0], 0) - z[1], carry = bits.Add64(z[1], z[1], carry) - z[2], carry = bits.Add64(z[2], z[2], carry) - z[3], carry = bits.Add64(z[3], z[3], carry) - z[4], carry = bits.Add64(z[4], z[4], carry) - z[5], _ = bits.Add64(z[5], z[5], carry) - - // if z > q --> z -= q - // note: this is NOT constant time - if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { - var b uint64 - z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) - z[1], b = bits.Sub64(z[1], 2210141511517208575, b) - z[2], b = bits.Sub64(z[2], 7435674573564081700, b) - z[3], b = bits.Sub64(z[3], 7239337960414712511, b) - z[4], b = bits.Sub64(z[4], 5412103778470702295, b) - z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) - } -} - -func ldouble(z, x *fe) { - var carry uint64 - - z[0], carry = bits.Add64(x[0], x[0], 0) - z[1], carry = bits.Add64(x[1], x[1], carry) - z[2], carry = bits.Add64(x[2], x[2], carry) - z[3], carry = bits.Add64(x[3], x[3], carry) - z[4], carry = bits.Add64(x[4], x[4], carry) - z[5], _ = bits.Add64(x[5], x[5], carry) -} - -func sub(z, x, y *fe) { - var b uint64 - z[0], b = bits.Sub64(x[0], y[0], 0) - z[1], b = bits.Sub64(x[1], y[1], b) - z[2], b = bits.Sub64(x[2], y[2], b) - z[3], b = bits.Sub64(x[3], y[3], b) - z[4], b = bits.Sub64(x[4], y[4], b) - z[5], b = bits.Sub64(x[5], y[5], b) - if b != 0 { - var c uint64 - z[0], c = bits.Add64(z[0], 13402431016077863595, 0) - z[1], c = bits.Add64(z[1], 2210141511517208575, c) - z[2], c = bits.Add64(z[2], 7435674573564081700, c) - z[3], c = bits.Add64(z[3], 7239337960414712511, c) - z[4], c = bits.Add64(z[4], 5412103778470702295, c) - z[5], _ = bits.Add64(z[5], 1873798617647539866, c) - } -} - -func subAssign(z, x *fe) { - var b uint64 - z[0], b = bits.Sub64(z[0], x[0], 0) - z[1], b = bits.Sub64(z[1], x[1], b) - z[2], b = bits.Sub64(z[2], x[2], b) - z[3], b = bits.Sub64(z[3], x[3], b) - z[4], b = bits.Sub64(z[4], x[4], b) - z[5], b = bits.Sub64(z[5], x[5], b) - if b != 0 { - var c uint64 - z[0], c = bits.Add64(z[0], 13402431016077863595, 0) - z[1], c = bits.Add64(z[1], 2210141511517208575, c) - z[2], c = bits.Add64(z[2], 7435674573564081700, c) - z[3], c = bits.Add64(z[3], 7239337960414712511, c) - z[4], c = bits.Add64(z[4], 5412103778470702295, c) - z[5], _ = bits.Add64(z[5], 1873798617647539866, c) - } -} - -func lsubAssign(z, x *fe) { - var b uint64 - z[0], b = bits.Sub64(z[0], x[0], 0) - z[1], b = bits.Sub64(z[1], x[1], b) - z[2], b = bits.Sub64(z[2], x[2], b) - z[3], b = bits.Sub64(z[3], x[3], b) - z[4], b = bits.Sub64(z[4], x[4], b) - z[5], _ = bits.Sub64(z[5], x[5], b) -} - -func neg(z *fe, x *fe) { - if x.isZero() { - z.zero() - return - } - var borrow uint64 - z[0], borrow = bits.Sub64(13402431016077863595, x[0], 0) - z[1], borrow = bits.Sub64(2210141511517208575, x[1], borrow) - z[2], borrow = bits.Sub64(7435674573564081700, x[2], borrow) - z[3], borrow = bits.Sub64(7239337960414712511, x[3], borrow) - z[4], borrow = bits.Sub64(5412103778470702295, x[4], borrow) - z[5], _ = bits.Sub64(1873798617647539866, x[5], borrow) -} - -func mul(z, x, y *fe) { - var t [6]uint64 - var c [3]uint64 - { - // round 0 - v := x[0] - c[1], c[0] = bits.Mul64(v, y[0]) - m := c[0] * 9940570264628428797 - c[2] = madd0(m, 13402431016077863595, c[0]) - c[1], c[0] = madd1(v, y[1], c[1]) - c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) - c[1], c[0] = madd1(v, y[2], c[1]) - c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) - c[1], c[0] = madd1(v, y[3], c[1]) - c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) - c[1], c[0] = madd1(v, y[4], c[1]) - c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) - c[1], c[0] = madd1(v, y[5], c[1]) - t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) - } - { - // round 1 - v := x[1] - c[1], c[0] = madd1(v, y[0], t[0]) - m := c[0] * 9940570264628428797 - c[2] = madd0(m, 13402431016077863595, c[0]) - c[1], c[0] = madd2(v, y[1], c[1], t[1]) - c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) - c[1], c[0] = madd2(v, y[2], c[1], t[2]) - c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) - c[1], c[0] = madd2(v, y[3], c[1], t[3]) - c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) - c[1], c[0] = madd2(v, y[4], c[1], t[4]) - c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) - c[1], c[0] = madd2(v, y[5], c[1], t[5]) - t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) - } - { - // round 2 - v := x[2] - c[1], c[0] = madd1(v, y[0], t[0]) - m := c[0] * 9940570264628428797 - c[2] = madd0(m, 13402431016077863595, c[0]) - c[1], c[0] = madd2(v, y[1], c[1], t[1]) - c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) - c[1], c[0] = madd2(v, y[2], c[1], t[2]) - c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) - c[1], c[0] = madd2(v, y[3], c[1], t[3]) - c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) - c[1], c[0] = madd2(v, y[4], c[1], t[4]) - c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) - c[1], c[0] = madd2(v, y[5], c[1], t[5]) - t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) - } - { - // round 3 - v := x[3] - c[1], c[0] = madd1(v, y[0], t[0]) - m := c[0] * 9940570264628428797 - c[2] = madd0(m, 13402431016077863595, c[0]) - c[1], c[0] = madd2(v, y[1], c[1], t[1]) - c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) - c[1], c[0] = madd2(v, y[2], c[1], t[2]) - c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) - c[1], c[0] = madd2(v, y[3], c[1], t[3]) - c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) - c[1], c[0] = madd2(v, y[4], c[1], t[4]) - c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) - c[1], c[0] = madd2(v, y[5], c[1], t[5]) - t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) - } - { - // round 4 - v := x[4] - c[1], c[0] = madd1(v, y[0], t[0]) - m := c[0] * 9940570264628428797 - c[2] = madd0(m, 13402431016077863595, c[0]) - c[1], c[0] = madd2(v, y[1], c[1], t[1]) - c[2], t[0] = madd2(m, 2210141511517208575, c[2], c[0]) - c[1], c[0] = madd2(v, y[2], c[1], t[2]) - c[2], t[1] = madd2(m, 7435674573564081700, c[2], c[0]) - c[1], c[0] = madd2(v, y[3], c[1], t[3]) - c[2], t[2] = madd2(m, 7239337960414712511, c[2], c[0]) - c[1], c[0] = madd2(v, y[4], c[1], t[4]) - c[2], t[3] = madd2(m, 5412103778470702295, c[2], c[0]) - c[1], c[0] = madd2(v, y[5], c[1], t[5]) - t[5], t[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) - } - { - // round 5 - v := x[5] - c[1], c[0] = madd1(v, y[0], t[0]) - m := c[0] * 9940570264628428797 - c[2] = madd0(m, 13402431016077863595, c[0]) - c[1], c[0] = madd2(v, y[1], c[1], t[1]) - c[2], z[0] = madd2(m, 2210141511517208575, c[2], c[0]) - c[1], c[0] = madd2(v, y[2], c[1], t[2]) - c[2], z[1] = madd2(m, 7435674573564081700, c[2], c[0]) - c[1], c[0] = madd2(v, y[3], c[1], t[3]) - c[2], z[2] = madd2(m, 7239337960414712511, c[2], c[0]) - c[1], c[0] = madd2(v, y[4], c[1], t[4]) - c[2], z[3] = madd2(m, 5412103778470702295, c[2], c[0]) - c[1], c[0] = madd2(v, y[5], c[1], t[5]) - z[5], z[4] = madd3(m, 1873798617647539866, c[0], c[2], c[1]) - } - - // if z > q --> z -= q - // note: this is NOT constant time - if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { - var b uint64 - z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) - z[1], b = bits.Sub64(z[1], 2210141511517208575, b) - z[2], b = bits.Sub64(z[2], 7435674573564081700, b) - z[3], b = bits.Sub64(z[3], 7239337960414712511, b) - z[4], b = bits.Sub64(z[4], 5412103778470702295, b) - z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) - } -} - -func square(z, x *fe) { - - var p [6]uint64 - - var u, v uint64 - { - // round 0 - u, p[0] = bits.Mul64(x[0], x[0]) - m := p[0] * 9940570264628428797 - C := madd0(m, 13402431016077863595, p[0]) - var t uint64 - t, u, v = madd1sb(x[0], x[1], u) - C, p[0] = madd2(m, 2210141511517208575, v, C) - t, u, v = madd1s(x[0], x[2], t, u) - C, p[1] = madd2(m, 7435674573564081700, v, C) - t, u, v = madd1s(x[0], x[3], t, u) - C, p[2] = madd2(m, 7239337960414712511, v, C) - t, u, v = madd1s(x[0], x[4], t, u) - C, p[3] = madd2(m, 5412103778470702295, v, C) - _, u, v = madd1s(x[0], x[5], t, u) - p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) - } - { - // round 1 - m := p[0] * 9940570264628428797 - C := madd0(m, 13402431016077863595, p[0]) - u, v = madd1(x[1], x[1], p[1]) - C, p[0] = madd2(m, 2210141511517208575, v, C) - var t uint64 - t, u, v = madd2sb(x[1], x[2], p[2], u) - C, p[1] = madd2(m, 7435674573564081700, v, C) - t, u, v = madd2s(x[1], x[3], p[3], t, u) - C, p[2] = madd2(m, 7239337960414712511, v, C) - t, u, v = madd2s(x[1], x[4], p[4], t, u) - C, p[3] = madd2(m, 5412103778470702295, v, C) - _, u, v = madd2s(x[1], x[5], p[5], t, u) - p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) - } - { - // round 2 - m := p[0] * 9940570264628428797 - C := madd0(m, 13402431016077863595, p[0]) - C, p[0] = madd2(m, 2210141511517208575, p[1], C) - u, v = madd1(x[2], x[2], p[2]) - C, p[1] = madd2(m, 7435674573564081700, v, C) - var t uint64 - t, u, v = madd2sb(x[2], x[3], p[3], u) - C, p[2] = madd2(m, 7239337960414712511, v, C) - t, u, v = madd2s(x[2], x[4], p[4], t, u) - C, p[3] = madd2(m, 5412103778470702295, v, C) - _, u, v = madd2s(x[2], x[5], p[5], t, u) - p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) - } - { - // round 3 - m := p[0] * 9940570264628428797 - C := madd0(m, 13402431016077863595, p[0]) - C, p[0] = madd2(m, 2210141511517208575, p[1], C) - C, p[1] = madd2(m, 7435674573564081700, p[2], C) - u, v = madd1(x[3], x[3], p[3]) - C, p[2] = madd2(m, 7239337960414712511, v, C) - var t uint64 - t, u, v = madd2sb(x[3], x[4], p[4], u) - C, p[3] = madd2(m, 5412103778470702295, v, C) - _, u, v = madd2s(x[3], x[5], p[5], t, u) - p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) - } - { - // round 4 - m := p[0] * 9940570264628428797 - C := madd0(m, 13402431016077863595, p[0]) - C, p[0] = madd2(m, 2210141511517208575, p[1], C) - C, p[1] = madd2(m, 7435674573564081700, p[2], C) - C, p[2] = madd2(m, 7239337960414712511, p[3], C) - u, v = madd1(x[4], x[4], p[4]) - C, p[3] = madd2(m, 5412103778470702295, v, C) - _, u, v = madd2sb(x[4], x[5], p[5], u) - p[5], p[4] = madd3(m, 1873798617647539866, v, C, u) - } - { - // round 5 - m := p[0] * 9940570264628428797 - C := madd0(m, 13402431016077863595, p[0]) - C, z[0] = madd2(m, 2210141511517208575, p[1], C) - C, z[1] = madd2(m, 7435674573564081700, p[2], C) - C, z[2] = madd2(m, 7239337960414712511, p[3], C) - C, z[3] = madd2(m, 5412103778470702295, p[4], C) - u, v = madd1(x[5], x[5], p[5]) - z[5], z[4] = madd3(m, 1873798617647539866, v, C, u) - } - - // if z > q --> z -= q - // note: this is NOT constant time - if !(z[5] < 1873798617647539866 || (z[5] == 1873798617647539866 && (z[4] < 5412103778470702295 || (z[4] == 5412103778470702295 && (z[3] < 7239337960414712511 || (z[3] == 7239337960414712511 && (z[2] < 7435674573564081700 || (z[2] == 7435674573564081700 && (z[1] < 2210141511517208575 || (z[1] == 2210141511517208575 && (z[0] < 13402431016077863595))))))))))) { - var b uint64 - z[0], b = bits.Sub64(z[0], 13402431016077863595, 0) - z[1], b = bits.Sub64(z[1], 2210141511517208575, b) - z[2], b = bits.Sub64(z[2], 7435674573564081700, b) - z[3], b = bits.Sub64(z[3], 7239337960414712511, b) - z[4], b = bits.Sub64(z[4], 5412103778470702295, b) - z[5], _ = bits.Sub64(z[5], 1873798617647539866, b) - } -} - -// arith.go -// Copyright 2020 ConsenSys AG -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by goff DO NOT EDIT - -func madd(a, b, t, u, v uint64) (uint64, uint64, uint64) { - var carry uint64 - hi, lo := bits.Mul64(a, b) - v, carry = bits.Add64(lo, v, 0) - u, carry = bits.Add64(hi, u, carry) - t, _ = bits.Add64(t, 0, carry) - return t, u, v -} - -// madd0 hi = a*b + c (discards lo bits) -func madd0(a, b, c uint64) (hi uint64) { - var carry, lo uint64 - hi, lo = bits.Mul64(a, b) - _, carry = bits.Add64(lo, c, 0) - hi, _ = bits.Add64(hi, 0, carry) - return -} - -// madd1 hi, lo = a*b + c -func madd1(a, b, c uint64) (hi uint64, lo uint64) { - var carry uint64 - hi, lo = bits.Mul64(a, b) - lo, carry = bits.Add64(lo, c, 0) - hi, _ = bits.Add64(hi, 0, carry) - return -} - -// madd2 hi, lo = a*b + c + d -func madd2(a, b, c, d uint64) (hi uint64, lo uint64) { - var carry uint64 - hi, lo = bits.Mul64(a, b) - c, carry = bits.Add64(c, d, 0) - hi, _ = bits.Add64(hi, 0, carry) - lo, carry = bits.Add64(lo, c, 0) - hi, _ = bits.Add64(hi, 0, carry) - return -} - -// madd2s superhi, hi, lo = 2*a*b + c + d + e -func madd2s(a, b, c, d, e uint64) (superhi, hi, lo uint64) { - var carry, sum uint64 - - hi, lo = bits.Mul64(a, b) - lo, carry = bits.Add64(lo, lo, 0) - hi, superhi = bits.Add64(hi, hi, carry) - - sum, carry = bits.Add64(c, e, 0) - hi, _ = bits.Add64(hi, 0, carry) - lo, carry = bits.Add64(lo, sum, 0) - hi, _ = bits.Add64(hi, 0, carry) - hi, _ = bits.Add64(hi, 0, d) - return -} - -func madd1s(a, b, d, e uint64) (superhi, hi, lo uint64) { - var carry uint64 - - hi, lo = bits.Mul64(a, b) - lo, carry = bits.Add64(lo, lo, 0) - hi, superhi = bits.Add64(hi, hi, carry) - lo, carry = bits.Add64(lo, e, 0) - hi, _ = bits.Add64(hi, 0, carry) - hi, _ = bits.Add64(hi, 0, d) - return -} - -func madd2sb(a, b, c, e uint64) (superhi, hi, lo uint64) { - var carry, sum uint64 - - hi, lo = bits.Mul64(a, b) - lo, carry = bits.Add64(lo, lo, 0) - hi, superhi = bits.Add64(hi, hi, carry) - - sum, carry = bits.Add64(c, e, 0) - hi, _ = bits.Add64(hi, 0, carry) - lo, carry = bits.Add64(lo, sum, 0) - hi, _ = bits.Add64(hi, 0, carry) - return -} - -func madd1sb(a, b, e uint64) (superhi, hi, lo uint64) { - var carry uint64 - - hi, lo = bits.Mul64(a, b) - lo, carry = bits.Add64(lo, lo, 0) - hi, superhi = bits.Add64(hi, hi, carry) - lo, carry = bits.Add64(lo, e, 0) - hi, _ = bits.Add64(hi, 0, carry) - return -} - -func madd3(a, b, c, d, e uint64) (hi uint64, lo uint64) { - var carry uint64 - hi, lo = bits.Mul64(a, b) - c, carry = bits.Add64(c, d, 0) - hi, _ = bits.Add64(hi, 0, carry) - lo, carry = bits.Add64(lo, c, 0) - hi, _ = bits.Add64(hi, e, carry) - return -} diff --git a/crypto/bls12381/arithmetic_x86.s b/crypto/bls12381/arithmetic_x86.s deleted file mode 100644 index 2cebbc46f79..00000000000 --- a/crypto/bls12381/arithmetic_x86.s +++ /dev/null @@ -1,2150 +0,0 @@ -// +build amd64,blsasm amd64,blsadx - -#include "textflag.h" - -// addition w/ modular reduction -// a = (a + b) % p -TEXT ·addAssign(SB), NOSPLIT, $0-16 - // | - MOVQ a+0(FP), DI - MOVQ b+8(FP), SI - - // | - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - - // | - ADDQ (SI), R8 - ADCQ 8(SI), R9 - ADCQ 16(SI), R10 - ADCQ 24(SI), R11 - ADCQ 32(SI), R12 - ADCQ 40(SI), R13 - - // | - MOVQ R8, R14 - MOVQ R9, R15 - MOVQ R10, CX - MOVQ R11, DX - MOVQ R12, SI - MOVQ R13, BX - MOVQ $0xb9feffffffffaaab, AX - SUBQ AX, R14 - MOVQ $0x1eabfffeb153ffff, AX - SBBQ AX, R15 - MOVQ $0x6730d2a0f6b0f624, AX - SBBQ AX, CX - MOVQ $0x64774b84f38512bf, AX - SBBQ AX, DX - MOVQ $0x4b1ba7b6434bacd7, AX - SBBQ AX, SI - MOVQ $0x1a0111ea397fe69a, AX - SBBQ AX, BX - CMOVQCC R14, R8 - CMOVQCC R15, R9 - CMOVQCC CX, R10 - CMOVQCC DX, R11 - CMOVQCC SI, R12 - CMOVQCC BX, R13 - - // | - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET - -/* | end */ - - -// addition w/ modular reduction -// c = (a + b) % p -TEXT ·add(SB), NOSPLIT, $0-24 - // | - MOVQ a+8(FP), DI - MOVQ b+16(FP), SI - - // | - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - - // | - ADDQ (SI), R8 - ADCQ 8(SI), R9 - ADCQ 16(SI), R10 - ADCQ 24(SI), R11 - ADCQ 32(SI), R12 - ADCQ 40(SI), R13 - - // | - MOVQ R8, R14 - MOVQ R9, R15 - MOVQ R10, CX - MOVQ R11, DX - MOVQ R12, SI - MOVQ R13, BX - MOVQ $0xb9feffffffffaaab, DI - SUBQ DI, R14 - MOVQ $0x1eabfffeb153ffff, DI - SBBQ DI, R15 - MOVQ $0x6730d2a0f6b0f624, DI - SBBQ DI, CX - MOVQ $0x64774b84f38512bf, DI - SBBQ DI, DX - MOVQ $0x4b1ba7b6434bacd7, DI - SBBQ DI, SI - MOVQ $0x1a0111ea397fe69a, DI - SBBQ DI, BX - CMOVQCC R14, R8 - CMOVQCC R15, R9 - CMOVQCC CX, R10 - CMOVQCC DX, R11 - CMOVQCC SI, R12 - CMOVQCC BX, R13 - - // | - MOVQ c+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - - -// addition w/o reduction check -// c = (a + b) -TEXT ·ladd(SB), NOSPLIT, $0-24 - // | - MOVQ a+8(FP), DI - MOVQ b+16(FP), SI - - // | - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - - // | - ADDQ (SI), R8 - ADCQ 8(SI), R9 - ADCQ 16(SI), R10 - ADCQ 24(SI), R11 - ADCQ 32(SI), R12 - ADCQ 40(SI), R13 - - // | - MOVQ c+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - - -// addition w/o reduction check -// a = a + b -TEXT ·laddAssign(SB), NOSPLIT, $0-16 - // | - MOVQ a+0(FP), DI - MOVQ b+8(FP), SI - - // | - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - - // | - ADDQ (SI), R8 - ADCQ 8(SI), R9 - ADCQ 16(SI), R10 - ADCQ 24(SI), R11 - ADCQ 32(SI), R12 - ADCQ 40(SI), R13 - - // | - MOVQ a+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - - -// subtraction w/ modular reduction -// c = (a - b) % p -TEXT ·sub(SB), NOSPLIT, $0-24 - // | - MOVQ a+8(FP), DI - MOVQ b+16(FP), SI - XORQ AX, AX - - // | - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - SUBQ (SI), R8 - SBBQ 8(SI), R9 - SBBQ 16(SI), R10 - SBBQ 24(SI), R11 - SBBQ 32(SI), R12 - SBBQ 40(SI), R13 - - // | - MOVQ $0xb9feffffffffaaab, R14 - MOVQ $0x1eabfffeb153ffff, R15 - MOVQ $0x6730d2a0f6b0f624, CX - MOVQ $0x64774b84f38512bf, DX - MOVQ $0x4b1ba7b6434bacd7, SI - MOVQ $0x1a0111ea397fe69a, BX - CMOVQCC AX, R14 - CMOVQCC AX, R15 - CMOVQCC AX, CX - CMOVQCC AX, DX - CMOVQCC AX, SI - CMOVQCC AX, BX - ADDQ R14, R8 - ADCQ R15, R9 - ADCQ CX, R10 - ADCQ DX, R11 - ADCQ SI, R12 - ADCQ BX, R13 - - // | - MOVQ c+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - - -// subtraction w/ modular reduction -// a = (a - b) % p -TEXT ·subAssign(SB), NOSPLIT, $0-16 - // | - MOVQ a+0(FP), DI - MOVQ b+8(FP), SI - XORQ AX, AX - - // | - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - SUBQ (SI), R8 - SBBQ 8(SI), R9 - SBBQ 16(SI), R10 - SBBQ 24(SI), R11 - SBBQ 32(SI), R12 - SBBQ 40(SI), R13 - - // | - MOVQ $0xb9feffffffffaaab, R14 - MOVQ $0x1eabfffeb153ffff, R15 - MOVQ $0x6730d2a0f6b0f624, CX - MOVQ $0x64774b84f38512bf, DX - MOVQ $0x4b1ba7b6434bacd7, SI - MOVQ $0x1a0111ea397fe69a, BX - CMOVQCC AX, R14 - CMOVQCC AX, R15 - CMOVQCC AX, CX - CMOVQCC AX, DX - CMOVQCC AX, SI - CMOVQCC AX, BX - ADDQ R14, R8 - ADCQ R15, R9 - ADCQ CX, R10 - ADCQ DX, R11 - ADCQ SI, R12 - ADCQ BX, R13 - - // | - MOVQ a+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - - -// subtraction w/o reduction check -// a = (a - b) -TEXT ·lsubAssign(SB), NOSPLIT, $0-16 - // | - MOVQ a+0(FP), DI - MOVQ b+8(FP), SI - - // | - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - SUBQ (SI), R8 - SBBQ 8(SI), R9 - SBBQ 16(SI), R10 - SBBQ 24(SI), R11 - SBBQ 32(SI), R12 - SBBQ 40(SI), R13 - - // | - MOVQ a+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - -// doubling w/ reduction -// c = (2 * a) % p -TEXT ·double(SB), NOSPLIT, $0-16 - // | - MOVQ a+8(FP), DI - - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - ADDQ R8, R8 - ADCQ R9, R9 - ADCQ R10, R10 - ADCQ R11, R11 - ADCQ R12, R12 - ADCQ R13, R13 - - // | - MOVQ R8, R14 - MOVQ R9, R15 - MOVQ R10, CX - MOVQ R11, DX - MOVQ R12, SI - MOVQ R13, BX - MOVQ $0xb9feffffffffaaab, DI - SUBQ DI, R14 - MOVQ $0x1eabfffeb153ffff, DI - SBBQ DI, R15 - MOVQ $0x6730d2a0f6b0f624, DI - SBBQ DI, CX - MOVQ $0x64774b84f38512bf, DI - SBBQ DI, DX - MOVQ $0x4b1ba7b6434bacd7, DI - SBBQ DI, SI - MOVQ $0x1a0111ea397fe69a, DI - SBBQ DI, BX - CMOVQCC R14, R8 - CMOVQCC R15, R9 - CMOVQCC CX, R10 - CMOVQCC DX, R11 - CMOVQCC SI, R12 - CMOVQCC BX, R13 - - // | - MOVQ c+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - - -// doubling w/ reduction -// a = (2 * a) % p -TEXT ·doubleAssign(SB), NOSPLIT, $0-8 - // | - MOVQ a+0(FP), DI - - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - ADDQ R8, R8 - ADCQ R9, R9 - ADCQ R10, R10 - ADCQ R11, R11 - ADCQ R12, R12 - ADCQ R13, R13 - - // | - MOVQ R8, R14 - MOVQ R9, R15 - MOVQ R10, CX - MOVQ R11, DX - MOVQ R12, SI - MOVQ R13, BX - MOVQ $0xb9feffffffffaaab, AX - SUBQ AX, R14 - MOVQ $0x1eabfffeb153ffff, AX - SBBQ AX, R15 - MOVQ $0x6730d2a0f6b0f624, AX - SBBQ AX, CX - MOVQ $0x64774b84f38512bf, AX - SBBQ AX, DX - MOVQ $0x4b1ba7b6434bacd7, AX - SBBQ AX, SI - MOVQ $0x1a0111ea397fe69a, AX - SBBQ AX, BX - CMOVQCC R14, R8 - CMOVQCC R15, R9 - CMOVQCC CX, R10 - CMOVQCC DX, R11 - CMOVQCC SI, R12 - CMOVQCC BX, R13 - - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - - -// doubling w/o reduction -// c = 2 * a -TEXT ·ldouble(SB), NOSPLIT, $0-16 - // | - MOVQ a+8(FP), DI - - MOVQ (DI), R8 - MOVQ 8(DI), R9 - MOVQ 16(DI), R10 - MOVQ 24(DI), R11 - MOVQ 32(DI), R12 - MOVQ 40(DI), R13 - - // | - ADDQ R8, R8 - ADCQ R9, R9 - ADCQ R10, R10 - ADCQ R11, R11 - ADCQ R12, R12 - ADCQ R13, R13 - - // | - MOVQ c+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - - RET -/* | end */ - - -TEXT ·_neg(SB), NOSPLIT, $0-16 - // | - MOVQ a+8(FP), DI - - // | - MOVQ $0xb9feffffffffaaab, R8 - MOVQ $0x1eabfffeb153ffff, R9 - MOVQ $0x6730d2a0f6b0f624, R10 - MOVQ $0x64774b84f38512bf, R11 - MOVQ $0x4b1ba7b6434bacd7, R12 - MOVQ $0x1a0111ea397fe69a, R13 - SUBQ (DI), R8 - SBBQ 8(DI), R9 - SBBQ 16(DI), R10 - SBBQ 24(DI), R11 - SBBQ 32(DI), R12 - SBBQ 40(DI), R13 - - // | - MOVQ c+0(FP), DI - MOVQ R8, (DI) - MOVQ R9, 8(DI) - MOVQ R10, 16(DI) - MOVQ R11, 24(DI) - MOVQ R12, 32(DI) - MOVQ R13, 40(DI) - RET -/* | end */ - - -// multiplication without using MULX/ADX -// c = a * b % p -TEXT ·mulNoADX(SB), NOSPLIT, $24-24 - // | - -/* inputs */ - - MOVQ a+8(FP), DI - MOVQ b+16(FP), SI - MOVQ $0x00, R9 - MOVQ $0x00, R10 - MOVQ $0x00, R11 - MOVQ $0x00, R12 - MOVQ $0x00, R13 - MOVQ $0x00, R14 - MOVQ $0x00, R15 - - // | - -/* i0 */ - - // | a0 @ CX - MOVQ (DI), CX - - // | a0 * b0 - MOVQ (SI), AX - MULQ CX - MOVQ AX, (SP) - MOVQ DX, R8 - - // | a0 * b1 - MOVQ 8(SI), AX - MULQ CX - ADDQ AX, R8 - ADCQ DX, R9 - - // | a0 * b2 - MOVQ 16(SI), AX - MULQ CX - ADDQ AX, R9 - ADCQ DX, R10 - - // | a0 * b3 - MOVQ 24(SI), AX - MULQ CX - ADDQ AX, R10 - ADCQ DX, R11 - - // | a0 * b4 - MOVQ 32(SI), AX - MULQ CX - ADDQ AX, R11 - ADCQ DX, R12 - - // | a0 * b5 - MOVQ 40(SI), AX - MULQ CX - ADDQ AX, R12 - ADCQ DX, R13 - - // | - -/* i1 */ - - // | a1 @ CX - MOVQ 8(DI), CX - MOVQ $0x00, BX - - // | a1 * b0 - MOVQ (SI), AX - MULQ CX - ADDQ AX, R8 - ADCQ DX, R9 - ADCQ $0x00, R10 - ADCQ $0x00, BX - MOVQ R8, 8(SP) - MOVQ $0x00, R8 - - // | a1 * b1 - MOVQ 8(SI), AX - MULQ CX - ADDQ AX, R9 - ADCQ DX, R10 - ADCQ BX, R11 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a1 * b2 - MOVQ 16(SI), AX - MULQ CX - ADDQ AX, R10 - ADCQ DX, R11 - ADCQ BX, R12 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a1 * b3 - MOVQ 24(SI), AX - MULQ CX - ADDQ AX, R11 - ADCQ DX, R12 - ADCQ BX, R13 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a1 * b4 - MOVQ 32(SI), AX - MULQ CX - ADDQ AX, R12 - ADCQ DX, R13 - ADCQ BX, R14 - - // | a1 * b5 - MOVQ 40(SI), AX - MULQ CX - ADDQ AX, R13 - ADCQ DX, R14 - - // | - -/* i2 */ - - // | a2 @ CX - MOVQ 16(DI), CX - MOVQ $0x00, BX - - // | a2 * b0 - MOVQ (SI), AX - MULQ CX - ADDQ AX, R9 - ADCQ DX, R10 - ADCQ $0x00, R11 - ADCQ $0x00, BX - MOVQ R9, 16(SP) - MOVQ $0x00, R9 - - // | a2 * b1 - MOVQ 8(SI), AX - MULQ CX - ADDQ AX, R10 - ADCQ DX, R11 - ADCQ BX, R12 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a2 * b2 - MOVQ 16(SI), AX - MULQ CX - ADDQ AX, R11 - ADCQ DX, R12 - ADCQ BX, R13 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a2 * b3 - MOVQ 24(SI), AX - MULQ CX - ADDQ AX, R12 - ADCQ DX, R13 - ADCQ BX, R14 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a2 * b4 - MOVQ 32(SI), AX - MULQ CX - ADDQ AX, R13 - ADCQ DX, R14 - ADCQ BX, R15 - - // | a2 * b5 - MOVQ 40(SI), AX - MULQ CX - ADDQ AX, R14 - ADCQ DX, R15 - - // | - -/* i3 */ - - // | a3 @ CX - MOVQ 24(DI), CX - MOVQ $0x00, BX - - // | a3 * b0 - MOVQ (SI), AX - MULQ CX - ADDQ AX, R10 - ADCQ DX, R11 - ADCQ $0x00, R12 - ADCQ $0x00, BX - - // | a3 * b1 - MOVQ 8(SI), AX - MULQ CX - ADDQ AX, R11 - ADCQ DX, R12 - ADCQ BX, R13 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a3 * b2 - MOVQ 16(SI), AX - MULQ CX - ADDQ AX, R12 - ADCQ DX, R13 - ADCQ BX, R14 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a3 * b3 - MOVQ 24(SI), AX - MULQ CX - ADDQ AX, R13 - ADCQ DX, R14 - ADCQ BX, R15 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a3 * b4 - MOVQ 32(SI), AX - MULQ CX - ADDQ AX, R14 - ADCQ DX, R15 - ADCQ BX, R8 - - // | a3 * b5 - MOVQ 40(SI), AX - MULQ CX - ADDQ AX, R15 - ADCQ DX, R8 - - // | - -/* i4 */ - - // | a4 @ CX - MOVQ 32(DI), CX - MOVQ $0x00, BX - - // | a4 * b0 - MOVQ (SI), AX - MULQ CX - ADDQ AX, R11 - ADCQ DX, R12 - ADCQ $0x00, R13 - ADCQ $0x00, BX - - // | a4 * b1 - MOVQ 8(SI), AX - MULQ CX - ADDQ AX, R12 - ADCQ DX, R13 - ADCQ BX, R14 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a4 * b2 - MOVQ 16(SI), AX - MULQ CX - ADDQ AX, R13 - ADCQ DX, R14 - ADCQ BX, R15 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a4 * b3 - MOVQ 24(SI), AX - MULQ CX - ADDQ AX, R14 - ADCQ DX, R15 - ADCQ BX, R8 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a4 * b4 - MOVQ 32(SI), AX - MULQ CX - ADDQ AX, R15 - ADCQ DX, R8 - ADCQ BX, R9 - - // | a4 * b5 - MOVQ 40(SI), AX - MULQ CX - ADDQ AX, R8 - ADCQ DX, R9 - - // | - -/* i5 */ - - // | a5 @ CX - MOVQ 40(DI), CX - MOVQ $0x00, BX - - // | a5 * b0 - MOVQ (SI), AX - MULQ CX - ADDQ AX, R12 - ADCQ DX, R13 - ADCQ $0x00, R14 - ADCQ $0x00, BX - - // | a5 * b1 - MOVQ 8(SI), AX - MULQ CX - ADDQ AX, R13 - ADCQ DX, R14 - ADCQ BX, R15 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a5 * b2 - MOVQ 16(SI), AX - MULQ CX - ADDQ AX, R14 - ADCQ DX, R15 - ADCQ BX, R8 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a5 * b3 - MOVQ 24(SI), AX - MULQ CX - ADDQ AX, R15 - ADCQ DX, R8 - ADCQ BX, R9 - MOVQ $0x00, BX - ADCQ $0x00, BX - - // | a5 * b4 - MOVQ 32(SI), AX - MULQ CX - ADDQ AX, R8 - ADCQ DX, R9 - ADCQ $0x00, BX - - // | a5 * b5 - MOVQ 40(SI), AX - MULQ CX - ADDQ AX, R9 - ADCQ DX, BX - - // | - -/* */ - - // | - // | W - // | 0 (SP) | 1 8(SP) | 2 16(SP) | 3 R10 | 4 R11 | 5 R12 - // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 R9 | 11 BX - - - MOVQ (SP), CX - MOVQ 8(SP), DI - MOVQ 16(SP), SI - MOVQ BX, (SP) - MOVQ R9, 8(SP) - - // | - -/* montgomery reduction */ - - // | - -/* i0 */ - - // | - // | W - // | 0 CX | 1 DI | 2 SI | 3 R10 | 4 R11 | 5 R12 - // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) - - - // | | u0 = w0 * inp - MOVQ CX, AX - MULQ ·inp+0(SB) - MOVQ AX, R9 - MOVQ $0x00, BX - - // | - -/* */ - - // | j0 - - // | w0 @ CX - MOVQ ·modulus+0(SB), AX - MULQ R9 - ADDQ AX, CX - ADCQ DX, BX - - // | j1 - - // | w1 @ DI - MOVQ ·modulus+8(SB), AX - MULQ R9 - ADDQ AX, DI - ADCQ $0x00, DX - ADDQ BX, DI - MOVQ $0x00, BX - ADCQ DX, BX - - // | j2 - - // | w2 @ SI - MOVQ ·modulus+16(SB), AX - MULQ R9 - ADDQ AX, SI - ADCQ $0x00, DX - ADDQ BX, SI - MOVQ $0x00, BX - ADCQ DX, BX - - // | j3 - - // | w3 @ R10 - MOVQ ·modulus+24(SB), AX - MULQ R9 - ADDQ AX, R10 - ADCQ $0x00, DX - ADDQ BX, R10 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j4 - - // | w4 @ R11 - MOVQ ·modulus+32(SB), AX - MULQ R9 - ADDQ AX, R11 - ADCQ $0x00, DX - ADDQ BX, R11 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j5 - - // | w5 @ R12 - MOVQ ·modulus+40(SB), AX - MULQ R9 - ADDQ AX, R12 - ADCQ $0x00, DX - ADDQ BX, R12 - - // | w6 @ R13 - ADCQ DX, R13 - ADCQ $0x00, CX - - // | - -/* i1 */ - - // | - // | W - // | 0 - | 1 DI | 2 SI | 3 R10 | 4 R11 | 5 R12 - // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) - - - // | | u1 = w1 * inp - MOVQ DI, AX - MULQ ·inp+0(SB) - MOVQ AX, R9 - MOVQ $0x00, BX - - // | - -/* */ - - // | j0 - - // | w1 @ DI - MOVQ ·modulus+0(SB), AX - MULQ R9 - ADDQ AX, DI - ADCQ DX, BX - - // | j1 - - // | w2 @ SI - MOVQ ·modulus+8(SB), AX - MULQ R9 - ADDQ AX, SI - ADCQ $0x00, DX - ADDQ BX, SI - MOVQ $0x00, BX - ADCQ DX, BX - - // | j2 - - // | w3 @ R10 - MOVQ ·modulus+16(SB), AX - MULQ R9 - ADDQ AX, R10 - ADCQ $0x00, DX - ADDQ BX, R10 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j3 - - // | w4 @ R11 - MOVQ ·modulus+24(SB), AX - MULQ R9 - ADDQ AX, R11 - ADCQ $0x00, DX - ADDQ BX, R11 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j4 - - // | w5 @ R12 - MOVQ ·modulus+32(SB), AX - MULQ R9 - ADDQ AX, R12 - ADCQ $0x00, DX - ADDQ BX, R12 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j5 - - // | w6 @ R13 - MOVQ ·modulus+40(SB), AX - MULQ R9 - ADDQ AX, R13 - ADCQ DX, CX - ADDQ BX, R13 - - // | w7 @ R14 - ADCQ CX, R14 - MOVQ $0x00, CX - ADCQ $0x00, CX - - // | - -/* i2 */ - - // | - // | W - // | 0 - | 1 - | 2 SI | 3 R10 | 4 R11 | 5 R12 - // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) - - - // | | u2 = w2 * inp - MOVQ SI, AX - MULQ ·inp+0(SB) - MOVQ AX, R9 - MOVQ $0x00, BX - - // | - -/* */ - - // | j0 - - // | w2 @ SI - MOVQ ·modulus+0(SB), AX - MULQ R9 - ADDQ AX, SI - ADCQ DX, BX - - // | j1 - - // | w3 @ R10 - MOVQ ·modulus+8(SB), AX - MULQ R9 - ADDQ AX, R10 - ADCQ $0x00, DX - ADDQ BX, R10 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j2 - - // | w4 @ R11 - MOVQ ·modulus+16(SB), AX - MULQ R9 - ADDQ AX, R11 - ADCQ $0x00, DX - ADDQ BX, R11 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j3 - - // | w5 @ R12 - MOVQ ·modulus+24(SB), AX - MULQ R9 - ADDQ AX, R12 - ADCQ $0x00, DX - ADDQ BX, R12 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j4 - - // | w6 @ R13 - MOVQ ·modulus+32(SB), AX - MULQ R9 - ADDQ AX, R13 - ADCQ $0x00, DX - ADDQ BX, R13 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j5 - - // | w7 @ R14 - MOVQ ·modulus+40(SB), AX - MULQ R9 - ADDQ AX, R14 - ADCQ DX, CX - ADDQ BX, R14 - - // | w8 @ R15 - ADCQ CX, R15 - MOVQ $0x00, CX - ADCQ $0x00, CX - - // | - -/* i3 */ - - // | - // | W - // | 0 - | 1 - | 2 - | 3 R10 | 4 R11 | 5 R12 - // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) - - - // | | u3 = w3 * inp - MOVQ R10, AX - MULQ ·inp+0(SB) - MOVQ AX, R9 - MOVQ $0x00, BX - - // | - -/* */ - - // | j0 - - // | w3 @ R10 - MOVQ ·modulus+0(SB), AX - MULQ R9 - ADDQ AX, R10 - ADCQ DX, BX - - // | j1 - - // | w4 @ R11 - MOVQ ·modulus+8(SB), AX - MULQ R9 - ADDQ AX, R11 - ADCQ $0x00, DX - ADDQ BX, R11 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j2 - - // | w5 @ R12 - MOVQ ·modulus+16(SB), AX - MULQ R9 - ADDQ AX, R12 - ADCQ $0x00, DX - ADDQ BX, R12 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j3 - - // | w6 @ R13 - MOVQ ·modulus+24(SB), AX - MULQ R9 - ADDQ AX, R13 - ADCQ $0x00, DX - ADDQ BX, R13 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j4 - - // | w7 @ R14 - MOVQ ·modulus+32(SB), AX - MULQ R9 - ADDQ AX, R14 - ADCQ $0x00, DX - ADDQ BX, R14 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j5 - - // | w8 @ R15 - MOVQ ·modulus+40(SB), AX - MULQ R9 - ADDQ AX, R15 - ADCQ DX, CX - ADDQ BX, R15 - - // | w9 @ R8 - ADCQ CX, R8 - MOVQ $0x00, CX - ADCQ $0x00, CX - - // | - -/* i4 */ - - // | - // | W - // | 0 - | 1 - | 2 - | 3 - | 4 R11 | 5 R12 - // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 8(SP) | 11 (SP) - - - // | | u4 = w4 * inp - MOVQ R11, AX - MULQ ·inp+0(SB) - MOVQ AX, R9 - MOVQ $0x00, BX - - // | - -/* */ - - // | j0 - - // | w4 @ R11 - MOVQ ·modulus+0(SB), AX - MULQ R9 - ADDQ AX, R11 - ADCQ DX, BX - - // | j1 - - // | w5 @ R12 - MOVQ ·modulus+8(SB), AX - MULQ R9 - ADDQ AX, R12 - ADCQ $0x00, DX - ADDQ BX, R12 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j2 - - // | w6 @ R13 - MOVQ ·modulus+16(SB), AX - MULQ R9 - ADDQ AX, R13 - ADCQ $0x00, DX - ADDQ BX, R13 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j3 - - // | w7 @ R14 - MOVQ ·modulus+24(SB), AX - MULQ R9 - ADDQ AX, R14 - ADCQ $0x00, DX - ADDQ BX, R14 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j4 - - // | w8 @ R15 - MOVQ ·modulus+32(SB), AX - MULQ R9 - ADDQ AX, R15 - ADCQ $0x00, DX - ADDQ BX, R15 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j5 - - // | w9 @ R8 - MOVQ ·modulus+40(SB), AX - MULQ R9 - ADDQ AX, R8 - ADCQ DX, CX - ADDQ BX, R8 - - // | move to idle register - MOVQ 8(SP), DI - - // | w10 @ DI - ADCQ CX, DI - MOVQ $0x00, CX - ADCQ $0x00, CX - - // | - -/* i5 */ - - // | - // | W - // | 0 - | 1 - | 2 - | 3 - | 4 - | 5 R12 - // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 DI | 11 (SP) - - - // | | u5 = w5 * inp - MOVQ R12, AX - MULQ ·inp+0(SB) - MOVQ AX, R9 - MOVQ $0x00, BX - - // | - -/* */ - - // | j0 - - // | w5 @ R12 - MOVQ ·modulus+0(SB), AX - MULQ R9 - ADDQ AX, R12 - ADCQ DX, BX - - // | j1 - - // | w6 @ R13 - MOVQ ·modulus+8(SB), AX - MULQ R9 - ADDQ AX, R13 - ADCQ $0x00, DX - ADDQ BX, R13 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j2 - - // | w7 @ R14 - MOVQ ·modulus+16(SB), AX - MULQ R9 - ADDQ AX, R14 - ADCQ $0x00, DX - ADDQ BX, R14 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j3 - - // | w8 @ R15 - MOVQ ·modulus+24(SB), AX - MULQ R9 - ADDQ AX, R15 - ADCQ $0x00, DX - ADDQ BX, R15 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j4 - - // | w9 @ R8 - MOVQ ·modulus+32(SB), AX - MULQ R9 - ADDQ AX, R8 - ADCQ $0x00, DX - ADDQ BX, R8 - MOVQ $0x00, BX - ADCQ DX, BX - - // | j5 - - // | w10 @ DI - MOVQ ·modulus+40(SB), AX - MULQ R9 - ADDQ AX, DI - ADCQ DX, CX - ADDQ BX, DI - - // | w11 @ CX - ADCQ (SP), CX - - // | - // | W montgomerry reduction ends - // | 0 - | 1 - | 2 - | 3 - | 4 - | 5 - - // | 6 R13 | 7 R14 | 8 R15 | 9 R8 | 10 DI | 11 CX - - - // | - - -/* modular reduction */ - - MOVQ R13, R10 - SUBQ ·modulus+0(SB), R10 - MOVQ R14, R11 - SBBQ ·modulus+8(SB), R11 - MOVQ R15, R12 - SBBQ ·modulus+16(SB), R12 - MOVQ R8, AX - SBBQ ·modulus+24(SB), AX - MOVQ DI, BX - SBBQ ·modulus+32(SB), BX - MOVQ CX, R9 - SBBQ ·modulus+40(SB), R9 - // | - -/* out */ - - MOVQ c+0(FP), SI - CMOVQCC R10, R13 - MOVQ R13, (SI) - CMOVQCC R11, R14 - MOVQ R14, 8(SI) - CMOVQCC R12, R15 - MOVQ R15, 16(SI) - CMOVQCC AX, R8 - MOVQ R8, 24(SI) - CMOVQCC BX, DI - MOVQ DI, 32(SI) - CMOVQCC R9, CX - MOVQ CX, 40(SI) - RET - - // | - -/* end */ - - -// multiplication -// c = a * b % p -TEXT ·mulADX(SB), NOSPLIT, $16-24 - // | - -/* inputs */ - - MOVQ a+8(FP), DI - MOVQ b+16(FP), SI - XORQ AX, AX - - // | - -/* i0 */ - - // | a0 @ DX - MOVQ (DI), DX - - // | a0 * b0 - MULXQ (SI), AX, CX - MOVQ AX, (SP) - - // | a0 * b1 - MULXQ 8(SI), AX, R8 - ADCXQ AX, CX - - // | a0 * b2 - MULXQ 16(SI), AX, R9 - ADCXQ AX, R8 - - // | a0 * b3 - MULXQ 24(SI), AX, R10 - ADCXQ AX, R9 - - // | a0 * b4 - MULXQ 32(SI), AX, R11 - ADCXQ AX, R10 - - // | a0 * b5 - MULXQ 40(SI), AX, R12 - ADCXQ AX, R11 - ADCQ $0x00, R12 - - // | - -/* i1 */ - - // | a1 @ DX - MOVQ 8(DI), DX - XORQ R13, R13 - - // | a1 * b0 - MULXQ (SI), AX, BX - ADOXQ AX, CX - ADCXQ BX, R8 - MOVQ CX, 8(SP) - - // | a1 * b1 - MULXQ 8(SI), AX, BX - ADOXQ AX, R8 - ADCXQ BX, R9 - - // | a1 * b2 - MULXQ 16(SI), AX, BX - ADOXQ AX, R9 - ADCXQ BX, R10 - - // | a1 * b3 - MULXQ 24(SI), AX, BX - ADOXQ AX, R10 - ADCXQ BX, R11 - - // | a1 * b4 - MULXQ 32(SI), AX, BX - ADOXQ AX, R11 - ADCXQ BX, R12 - - // | a1 * b5 - MULXQ 40(SI), AX, BX - ADOXQ AX, R12 - ADOXQ R13, R13 - ADCXQ BX, R13 - - // | - -/* i2 */ - - // | a2 @ DX - MOVQ 16(DI), DX - XORQ R14, R14 - - // | a2 * b0 - MULXQ (SI), AX, BX - ADOXQ AX, R8 - ADCXQ BX, R9 - - // | a2 * b1 - MULXQ 8(SI), AX, BX - ADOXQ AX, R9 - ADCXQ BX, R10 - - // | a2 * b2 - MULXQ 16(SI), AX, BX - ADOXQ AX, R10 - ADCXQ BX, R11 - - // | a2 * b3 - MULXQ 24(SI), AX, BX - ADOXQ AX, R11 - ADCXQ BX, R12 - - // | a2 * b4 - MULXQ 32(SI), AX, BX - ADOXQ AX, R12 - ADCXQ BX, R13 - - // | a2 * b5 - MULXQ 40(SI), AX, BX - ADOXQ AX, R13 - ADOXQ R14, R14 - ADCXQ BX, R14 - - // | - -/* i3 */ - - // | a3 @ DX - MOVQ 24(DI), DX - XORQ R15, R15 - - // | a3 * b0 - MULXQ (SI), AX, BX - ADOXQ AX, R9 - ADCXQ BX, R10 - - // | a3 * b1 - MULXQ 8(SI), AX, BX - ADOXQ AX, R10 - ADCXQ BX, R11 - - // | a3 * b2 - MULXQ 16(SI), AX, BX - ADOXQ AX, R11 - ADCXQ BX, R12 - - // | a3 * b3 - MULXQ 24(SI), AX, BX - ADOXQ AX, R12 - ADCXQ BX, R13 - - // | a3 * b4 - MULXQ 32(SI), AX, BX - ADOXQ AX, R13 - ADCXQ BX, R14 - - // | a3 * b5 - MULXQ 40(SI), AX, BX - ADOXQ AX, R14 - ADOXQ R15, R15 - ADCXQ BX, R15 - - // | - -/* i4 */ - - // | a4 @ DX - MOVQ 32(DI), DX - XORQ CX, CX - - // | a4 * b0 - MULXQ (SI), AX, BX - ADOXQ AX, R10 - ADCXQ BX, R11 - - // | a4 * b1 - MULXQ 8(SI), AX, BX - ADOXQ AX, R11 - ADCXQ BX, R12 - - // | a4 * b2 - MULXQ 16(SI), AX, BX - ADOXQ AX, R12 - ADCXQ BX, R13 - - // | a4 * b3 - MULXQ 24(SI), AX, BX - ADOXQ AX, R13 - ADCXQ BX, R14 - - // | a4 * b4 - MULXQ 32(SI), AX, BX - ADOXQ AX, R14 - ADCXQ BX, R15 - - // | a4 * b5 - MULXQ 40(SI), AX, BX - ADOXQ AX, R15 - ADOXQ CX, CX - ADCXQ BX, CX - - // | - -/* i5 */ - - // | a5 @ DX - MOVQ 40(DI), DX - XORQ DI, DI - - // | a5 * b0 - MULXQ (SI), AX, BX - ADOXQ AX, R11 - ADCXQ BX, R12 - - // | a5 * b1 - MULXQ 8(SI), AX, BX - ADOXQ AX, R12 - ADCXQ BX, R13 - - // | a5 * b2 - MULXQ 16(SI), AX, BX - ADOXQ AX, R13 - ADCXQ BX, R14 - - // | a5 * b3 - MULXQ 24(SI), AX, BX - ADOXQ AX, R14 - ADCXQ BX, R15 - - // | a5 * b4 - MULXQ 32(SI), AX, BX - ADOXQ AX, R15 - ADCXQ BX, CX - - // | a5 * b5 - MULXQ 40(SI), AX, BX - ADOXQ AX, CX - ADOXQ BX, DI - ADCQ $0x00, DI - - // | - -/* */ - - // | - // | W - // | 0 (SP) | 1 8(SP) | 2 R8 | 3 R9 | 4 R10 | 5 R11 - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 DI - - - MOVQ (SP), BX - MOVQ 8(SP), SI - MOVQ DI, (SP) - - // | - // | W ready to mont - // | 0 BX | 1 SI | 2 R8 | 3 R9 | 4 R10 | 5 R11 - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) - - - // | - -/* montgomery reduction */ - - // | clear flags - XORQ AX, AX - - // | - -/* i0 */ - - // | - // | W - // | 0 BX | 1 SI | 2 R8 | 3 R9 | 4 R10 | 5 R11 - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) - - - // | | u0 = w0 * inp - MOVQ BX, DX - MULXQ ·inp+0(SB), DX, DI - - // | - -/* */ - - // | j0 - - // | w0 @ BX - MULXQ ·modulus+0(SB), AX, DI - ADOXQ AX, BX - ADCXQ DI, SI - - // | j1 - - // | w1 @ SI - MULXQ ·modulus+8(SB), AX, DI - ADOXQ AX, SI - ADCXQ DI, R8 - - // | j2 - - // | w2 @ R8 - MULXQ ·modulus+16(SB), AX, DI - ADOXQ AX, R8 - ADCXQ DI, R9 - - // | j3 - - // | w3 @ R9 - MULXQ ·modulus+24(SB), AX, DI - ADOXQ AX, R9 - ADCXQ DI, R10 - - // | j4 - - // | w4 @ R10 - MULXQ ·modulus+32(SB), AX, DI - ADOXQ AX, R10 - ADCXQ DI, R11 - - // | j5 - - // | w5 @ R11 - MULXQ ·modulus+40(SB), AX, DI - ADOXQ AX, R11 - ADCXQ DI, R12 - ADOXQ BX, R12 - ADCXQ BX, BX - MOVQ $0x00, AX - ADOXQ AX, BX - - // | clear flags - XORQ AX, AX - - // | - -/* i1 */ - - // | - // | W - // | 0 - | 1 SI | 2 R8 | 3 R9 | 4 R10 | 5 R11 - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) - - - // | | u1 = w1 * inp - MOVQ SI, DX - MULXQ ·inp+0(SB), DX, DI - - // | - -/* */ - - // | j0 - - // | w1 @ SI - MULXQ ·modulus+0(SB), AX, DI - ADOXQ AX, SI - ADCXQ DI, R8 - - // | j1 - - // | w2 @ R8 - MULXQ ·modulus+8(SB), AX, DI - ADOXQ AX, R8 - ADCXQ DI, R9 - - // | j2 - - // | w3 @ R9 - MULXQ ·modulus+16(SB), AX, DI - ADOXQ AX, R9 - ADCXQ DI, R10 - - // | j3 - - // | w4 @ R10 - MULXQ ·modulus+24(SB), AX, DI - ADOXQ AX, R10 - ADCXQ DI, R11 - - // | j4 - - // | w5 @ R11 - MULXQ ·modulus+32(SB), AX, DI - ADOXQ AX, R11 - ADCXQ DI, R12 - - // | j5 - - // | w6 @ R12 - MULXQ ·modulus+40(SB), AX, DI - ADOXQ AX, R12 - ADCXQ DI, R13 - ADOXQ BX, R13 - ADCXQ SI, SI - MOVQ $0x00, AX - ADOXQ AX, SI - - // | clear flags - XORQ AX, AX - - // | - -/* i2 */ - - // | - // | W - // | 0 - | 1 - | 2 R8 | 3 R9 | 4 R10 | 5 R11 - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) - - - // | | u2 = w2 * inp - MOVQ R8, DX - MULXQ ·inp+0(SB), DX, DI - - // | - -/* */ - - // | j0 - - // | w2 @ R8 - MULXQ ·modulus+0(SB), AX, DI - ADOXQ AX, R8 - ADCXQ DI, R9 - - // | j1 - - // | w3 @ R9 - MULXQ ·modulus+8(SB), AX, DI - ADOXQ AX, R9 - ADCXQ DI, R10 - - // | j2 - - // | w4 @ R10 - MULXQ ·modulus+16(SB), AX, DI - ADOXQ AX, R10 - ADCXQ DI, R11 - - // | j3 - - // | w5 @ R11 - MULXQ ·modulus+24(SB), AX, DI - ADOXQ AX, R11 - ADCXQ DI, R12 - - // | j4 - - // | w6 @ R12 - MULXQ ·modulus+32(SB), AX, DI - ADOXQ AX, R12 - ADCXQ DI, R13 - - // | j5 - - // | w7 @ R13 - MULXQ ·modulus+40(SB), AX, DI - ADOXQ AX, R13 - ADCXQ DI, R14 - ADOXQ SI, R14 - ADCXQ R8, R8 - MOVQ $0x00, AX - ADOXQ AX, R8 - - // | clear flags - XORQ AX, AX - - // | - -/* i3 */ - - // | - // | W - // | 0 - | 1 - | 2 - | 3 R9 | 4 R10 | 5 R11 - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) - - - // | | u3 = w3 * inp - MOVQ R9, DX - MULXQ ·inp+0(SB), DX, DI - - // | - -/* */ - - // | j0 - - // | w3 @ R9 - MULXQ ·modulus+0(SB), AX, DI - ADOXQ AX, R9 - ADCXQ DI, R10 - - // | j1 - - // | w4 @ R10 - MULXQ ·modulus+8(SB), AX, DI - ADOXQ AX, R10 - ADCXQ DI, R11 - - // | j2 - - // | w5 @ R11 - MULXQ ·modulus+16(SB), AX, DI - ADOXQ AX, R11 - ADCXQ DI, R12 - - // | j3 - - // | w6 @ R12 - MULXQ ·modulus+24(SB), AX, DI - ADOXQ AX, R12 - ADCXQ DI, R13 - - // | j4 - - // | w7 @ R13 - MULXQ ·modulus+32(SB), AX, DI - ADOXQ AX, R13 - ADCXQ DI, R14 - - // | j5 - - // | w8 @ R14 - MULXQ ·modulus+40(SB), AX, DI - ADOXQ AX, R14 - ADCXQ DI, R15 - ADOXQ R8, R15 - ADCXQ R9, R9 - MOVQ $0x00, AX - ADOXQ AX, R9 - - // | clear flags - XORQ AX, AX - - // | - -/* i4 */ - - // | - // | W - // | 0 - | 1 - | 2 - | 3 - | 4 R10 | 5 R11 - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) - - - // | | u4 = w4 * inp - MOVQ R10, DX - MULXQ ·inp+0(SB), DX, DI - - // | - -/* */ - - // | j0 - - // | w4 @ R10 - MULXQ ·modulus+0(SB), AX, DI - ADOXQ AX, R10 - ADCXQ DI, R11 - - // | j1 - - // | w5 @ R11 - MULXQ ·modulus+8(SB), AX, DI - ADOXQ AX, R11 - ADCXQ DI, R12 - - // | j2 - - // | w6 @ R12 - MULXQ ·modulus+16(SB), AX, DI - ADOXQ AX, R12 - ADCXQ DI, R13 - - // | j3 - - // | w7 @ R13 - MULXQ ·modulus+24(SB), AX, DI - ADOXQ AX, R13 - ADCXQ DI, R14 - - // | j4 - - // | w8 @ R14 - MULXQ ·modulus+32(SB), AX, DI - ADOXQ AX, R14 - ADCXQ DI, R15 - - // | j5 - - // | w9 @ R15 - MULXQ ·modulus+40(SB), AX, DI - ADOXQ AX, R15 - ADCXQ DI, CX - ADOXQ R9, CX - ADCXQ R10, R10 - MOVQ $0x00, AX - ADOXQ AX, R10 - - // | clear flags - XORQ AX, AX - - // | - -/* i5 */ - - // | - // | W - // | 0 - | 1 - | 2 - | 3 - | 4 - | 5 R11 - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 (SP) - - - // | | u5 = w5 * inp - MOVQ R11, DX - MULXQ ·inp+0(SB), DX, DI - - // | - -/* */ - - // | j0 - - // | w5 @ R11 - MULXQ ·modulus+0(SB), AX, DI - ADOXQ AX, R11 - ADCXQ DI, R12 - - // | j1 - - // | w6 @ R12 - MULXQ ·modulus+8(SB), AX, DI - ADOXQ AX, R12 - ADCXQ DI, R13 - - // | j2 - - // | w7 @ R13 - MULXQ ·modulus+16(SB), AX, DI - ADOXQ AX, R13 - ADCXQ DI, R14 - - // | j3 - - // | w8 @ R14 - MULXQ ·modulus+24(SB), AX, DI - ADOXQ AX, R14 - ADCXQ DI, R15 - - // | j4 - - // | w9 @ R15 - MULXQ ·modulus+32(SB), AX, DI - ADOXQ AX, R15 - ADCXQ DI, CX - - // | j5 - - // | w10 @ CX - MULXQ ·modulus+40(SB), AX, DI - ADOXQ AX, CX - - // | w11 @ (SP) - // | move to an idle register - MOVQ (SP), BX - ADCXQ DI, BX - ADOXQ R10, BX - - // | - // | W montgomery reduction ends - // | 0 - | 1 - | 2 - | 3 - | 4 - | 5 - - // | 6 R12 | 7 R13 | 8 R14 | 9 R15 | 10 CX | 11 BX - - - // | - -/* modular reduction */ - - MOVQ R12, AX - SUBQ ·modulus+0(SB), AX - MOVQ R13, DI - SBBQ ·modulus+8(SB), DI - MOVQ R14, SI - SBBQ ·modulus+16(SB), SI - MOVQ R15, R8 - SBBQ ·modulus+24(SB), R8 - MOVQ CX, R9 - SBBQ ·modulus+32(SB), R9 - MOVQ BX, R10 - SBBQ ·modulus+40(SB), R10 - - // | - -/* out */ - - MOVQ c+0(FP), R11 - CMOVQCC AX, R12 - MOVQ R12, (R11) - CMOVQCC DI, R13 - MOVQ R13, 8(R11) - CMOVQCC SI, R14 - MOVQ R14, 16(R11) - CMOVQCC R8, R15 - MOVQ R15, 24(R11) - CMOVQCC R9, CX - MOVQ CX, 32(R11) - CMOVQCC R10, BX - MOVQ BX, 40(R11) - RET - - // | - -/* end */ diff --git a/crypto/bls12381/arithmetic_x86_adx.go b/crypto/bls12381/arithmetic_x86_adx.go deleted file mode 100644 index 00ef35b33a8..00000000000 --- a/crypto/bls12381/arithmetic_x86_adx.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//go:build amd64 && blsadx - -package bls12381 - -// enableADX is true if the ADX/BMI2 instruction set was requested for the BLS -// implementation. The system may still fall back to plain ASM if the necessary -// instructions are unavailable on the CPU. -const enableADX = true diff --git a/crypto/bls12381/arithmetic_x86_noadx.go b/crypto/bls12381/arithmetic_x86_noadx.go deleted file mode 100644 index 5a0fdf08f51..00000000000 --- a/crypto/bls12381/arithmetic_x86_noadx.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//go:build amd64 && blsasm - -package bls12381 - -// enableADX is true if the ADX/BMI2 instruction set was requested for the BLS -// implementation. The system may still fall back to plain ASM if the necessary -// instructions are unavailable on the CPU. -const enableADX = false diff --git a/crypto/bls12381/bls12_381.go b/crypto/bls12381/bls12_381.go deleted file mode 100644 index c4b7715447f..00000000000 --- a/crypto/bls12381/bls12_381.go +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//nolint:gofmt -package bls12381 - -/* - Field Constants -*/ - -// Base field modulus -// p = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab - -// Size of six words -// r = 2 ^ 384 - -// modulus = p -var modulus = fe{0xb9feffffffffaaab, 0x1eabfffeb153ffff, 0x6730d2a0f6b0f624, 0x64774b84f38512bf, 0x4b1ba7b6434bacd7, 0x1a0111ea397fe69a} - -var ( - // -p^(-1) mod 2^64 - inp uint64 = 0x89f3fffcfffcfffd - // This value is used in assembly code - _ = inp -) - -// r mod p -var r1 = &fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493} - -// r^2 mod p -var r2 = &fe{ - 0xf4df1f341c341746, 0x0a76e6a609d104f1, 0x8de5476c4c95b6d5, 0x67eb88a9939d83c0, 0x9a793e85b519952d, 0x11988fe592cae3aa, -} - -// -1 + 0 * u -var negativeOne2 = &fe2{ - fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, -} - -// 2 ^ (-1) -var twoInv = &fe{0x1804000000015554, 0x855000053ab00001, 0x633cb57c253c276f, 0x6e22d1ec31ebb502, 0xd3916126f2d14ca2, 0x17fbb8571a006596} - -// (p - 3) / 4 -var pMinus3Over4 = bigFromHex("0x680447a8e5ff9a692c6e9ed90d2eb35d91dd2e13ce144afd9cc34a83dac3d8907aaffffac54ffffee7fbfffffffeaaa") - -// (p + 1) / 4 -var pPlus1Over4 = bigFromHex("0x680447a8e5ff9a692c6e9ed90d2eb35d91dd2e13ce144afd9cc34a83dac3d8907aaffffac54ffffee7fbfffffffeaab") - -// (p - 1) / 2 -var pMinus1Over2 = bigFromHex("0xd0088f51cbff34d258dd3db21a5d66bb23ba5c279c2895fb39869507b587b120f55ffff58a9ffffdcff7fffffffd555") - -// -1 -var nonResidue1 = &fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206} - -// (1 + 1 * u) -var nonResidue2 = &fe2{ - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, -} - -/* - Curve Constants -*/ - -// b coefficient for G1 -var b = &fe{0xaa270000000cfff3, 0x53cc0032fc34000a, 0x478fe97a6b0a807f, 0xb1d37ebee6ba24d7, 0x8ec9733bbf78ab2f, 0x09d645513d83de7e} - -// b coefficient for G2 -var b2 = &fe2{ - fe{0xaa270000000cfff3, 0x53cc0032fc34000a, 0x478fe97a6b0a807f, 0xb1d37ebee6ba24d7, 0x8ec9733bbf78ab2f, 0x09d645513d83de7e}, - fe{0xaa270000000cfff3, 0x53cc0032fc34000a, 0x478fe97a6b0a807f, 0xb1d37ebee6ba24d7, 0x8ec9733bbf78ab2f, 0x09d645513d83de7e}, -} - -// Curve order -var q = bigFromHex("0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001") - -// Efficient cofactor of G1 -var cofactorEFFG1 = bigFromHex("0xd201000000010001") - -// Efficient cofactor of G2 -var cofactorEFFG2 = bigFromHex("0x0bc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551") - -var g1One = PointG1{ - fe{0x5cb38790fd530c16, 0x7817fc679976fff5, 0x154f95c7143ba1c1, 0xf0ae6acdf3d0e747, 0xedce6ecc21dbf440, 0x120177419e0bfb75}, - fe{0xbaac93d50ce72271, 0x8c22631a7918fd8e, 0xdd595f13570725ce, 0x51ac582950405194, 0x0e1c8c3fad0059c0, 0x0bbc3efc5008a26a}, - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, -} - -var g2One = PointG2{ - fe2{ - fe{0xf5f28fa202940a10, 0xb3f5fb2687b4961a, 0xa1a893b53e2ae580, 0x9894999d1a3caee9, 0x6f67b7631863366b, 0x058191924350bcd7}, - fe{0xa5a9c0759e23f606, 0xaaa0c59dbccd60c3, 0x3bb17e18e2867806, 0x1b1ab6cc8541b367, 0xc2b6ed0ef2158547, 0x11922a097360edf3}, - }, - fe2{ - fe{0x4c730af860494c4a, 0x597cfa1f5e369c5a, 0xe7e6856caa0a635a, 0xbbefb5e96e0d495f, 0x07d3a975f0ef25a2, 0x083fd8e7e80dae5}, - fe{0xadc0fc92df64b05d, 0x18aa270a2b1461dc, 0x86adac6a3be4eba0, 0x79495c4ec93da33a, 0xe7175850a43ccaed, 0xb2bc2a163de1bf2}, - }, - fe2{ - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, -} - -/* - Frobenious Coeffs -*/ - -var frobeniusCoeffs61 = [6]fe2{ - { - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - fe{0xcd03c9e48671f071, 0x5dab22461fcda5d2, 0x587042afd3851b95, 0x8eb60ebe01bacb9e, 0x03f97d6e83d050d2, 0x18f0206554638741}, - }, - { - fe{0x30f1361b798a64e8, 0xf3b8ddab7ece5a2a, 0x16a8ca3ac61577f7, 0xc26a2ff874fd029b, 0x3636b76660701c6e, 0x051ba4ab241b6160}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - }, - { - fe{0xcd03c9e48671f071, 0x5dab22461fcda5d2, 0x587042afd3851b95, 0x8eb60ebe01bacb9e, 0x03f97d6e83d050d2, 0x18f0206554638741}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - fe{0x30f1361b798a64e8, 0xf3b8ddab7ece5a2a, 0x16a8ca3ac61577f7, 0xc26a2ff874fd029b, 0x3636b76660701c6e, 0x051ba4ab241b6160}, - }, -} - -var frobeniusCoeffs62 = [6]fe2{ - { - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x890dc9e4867545c3, 0x2af322533285a5d5, 0x50880866309b7e2c, 0xa20d1b8c7e881024, 0x14e4f04fe2db9068, 0x14e56d3f1564853a}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0xcd03c9e48671f071, 0x5dab22461fcda5d2, 0x587042afd3851b95, 0x8eb60ebe01bacb9e, 0x03f97d6e83d050d2, 0x18f0206554638741}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x30f1361b798a64e8, 0xf3b8ddab7ece5a2a, 0x16a8ca3ac61577f7, 0xc26a2ff874fd029b, 0x3636b76660701c6e, 0x051ba4ab241b6160}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0xecfb361b798dba3a, 0xc100ddb891865a2c, 0x0ec08ff1232bda8e, 0xd5c13cc6f1ca4721, 0x47222a47bf7b5c04, 0x0110f184e51c5f59}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, -} - -var frobeniusCoeffs12 = [12]fe2{ - { - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x07089552b319d465, 0xc6695f92b50a8313, 0x97e83cccd117228f, 0xa35baecab2dc29ee, 0x1ce393ea5daace4d, 0x08f2220fb0fb66eb}, - fe{0xb2f66aad4ce5d646, 0x5842a06bfc497cec, 0xcf4895d42599d394, 0xc11b9cba40a8e8d0, 0x2e3813cbe5a0de89, 0x110eefda88847faf}, - }, - { - fe{0xecfb361b798dba3a, 0xc100ddb891865a2c, 0x0ec08ff1232bda8e, 0xd5c13cc6f1ca4721, 0x47222a47bf7b5c04, 0x0110f184e51c5f59}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x3e2f585da55c9ad1, 0x4294213d86c18183, 0x382844c88b623732, 0x92ad2afd19103e18, 0x1d794e4fac7cf0b9, 0x0bd592fc7d825ec8}, - fe{0x7bcfa7a25aa30fda, 0xdc17dec12a927e7c, 0x2f088dd86b4ebef1, 0xd1ca2087da74d4a7, 0x2da2596696cebc1d, 0x0e2b7eedbbfd87d2}, - }, - { - fe{0x30f1361b798a64e8, 0xf3b8ddab7ece5a2a, 0x16a8ca3ac61577f7, 0xc26a2ff874fd029b, 0x3636b76660701c6e, 0x051ba4ab241b6160}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x3726c30af242c66c, 0x7c2ac1aad1b6fe70, 0xa04007fbba4b14a2, 0xef517c3266341429, 0x0095ba654ed2226b, 0x02e370eccc86f7dd}, - fe{0x82d83cf50dbce43f, 0xa2813e53df9d018f, 0xc6f0caa53c65e181, 0x7525cf528d50fe95, 0x4a85ed50f4798a6b, 0x171da0fd6cf8eebd}, - }, - { - fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0xb2f66aad4ce5d646, 0x5842a06bfc497cec, 0xcf4895d42599d394, 0xc11b9cba40a8e8d0, 0x2e3813cbe5a0de89, 0x110eefda88847faf}, - fe{0x07089552b319d465, 0xc6695f92b50a8313, 0x97e83cccd117228f, 0xa35baecab2dc29ee, 0x1ce393ea5daace4d, 0x08f2220fb0fb66eb}, - }, - { - fe{0xcd03c9e48671f071, 0x5dab22461fcda5d2, 0x587042afd3851b95, 0x8eb60ebe01bacb9e, 0x03f97d6e83d050d2, 0x18f0206554638741}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x7bcfa7a25aa30fda, 0xdc17dec12a927e7c, 0x2f088dd86b4ebef1, 0xd1ca2087da74d4a7, 0x2da2596696cebc1d, 0x0e2b7eedbbfd87d2}, - fe{0x3e2f585da55c9ad1, 0x4294213d86c18183, 0x382844c88b623732, 0x92ad2afd19103e18, 0x1d794e4fac7cf0b9, 0x0bd592fc7d825ec8}, - }, - { - fe{0x890dc9e4867545c3, 0x2af322533285a5d5, 0x50880866309b7e2c, 0xa20d1b8c7e881024, 0x14e4f04fe2db9068, 0x14e56d3f1564853a}, - fe{0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}, - }, - { - fe{0x82d83cf50dbce43f, 0xa2813e53df9d018f, 0xc6f0caa53c65e181, 0x7525cf528d50fe95, 0x4a85ed50f4798a6b, 0x171da0fd6cf8eebd}, - fe{0x3726c30af242c66c, 0x7c2ac1aad1b6fe70, 0xa04007fbba4b14a2, 0xef517c3266341429, 0x0095ba654ed2226b, 0x02e370eccc86f7dd}, - }, -} - -/* - x -*/ - -var x = bigFromHex("0xd201000000010000") diff --git a/crypto/bls12381/bls12_381_test.go b/crypto/bls12381/bls12_381_test.go deleted file mode 100644 index 6bf58341059..00000000000 --- a/crypto/bls12381/bls12_381_test.go +++ /dev/null @@ -1,13 +0,0 @@ -package bls12381 - -import ( - "crypto/rand" - "math/big" -) - -var fuz = 10 - -func randScalar(max *big.Int) *big.Int { - a, _ := rand.Int(rand.Reader, max) - return a -} diff --git a/crypto/bls12381/field_element.go b/crypto/bls12381/field_element.go deleted file mode 100644 index ffcfc5e185d..00000000000 --- a/crypto/bls12381/field_element.go +++ /dev/null @@ -1,342 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//nolint:stylecheck -package bls12381 - -import ( - "crypto/rand" - "encoding/hex" - "fmt" - "io" - "math/big" -) - -// fe is base field element representation -type fe [6]uint64 - -// fe2 is element representation of 'fp2' which is quadratic extension of base field 'fp' -// Representation follows c[0] + c[1] * u encoding order. -type fe2 [2]fe - -// fe6 is element representation of 'fp6' field which is cubic extension of 'fp2' -// Representation follows c[0] + c[1] * v + c[2] * v^2 encoding order. -type fe6 [3]fe2 - -// fe12 is element representation of 'fp12' field which is quadratic extension of 'fp6' -// Representation follows c[0] + c[1] * w encoding order. -type fe12 [2]fe6 - -func (fe *fe) setBytes(in []byte) *fe { - size := 48 - l := len(in) - if l >= size { - l = size - } - padded := make([]byte, size) - copy(padded[size-l:], in) - var a int - for i := 0; i < 6; i++ { - a = size - i*8 - fe[i] = uint64(padded[a-1]) | uint64(padded[a-2])<<8 | - uint64(padded[a-3])<<16 | uint64(padded[a-4])<<24 | - uint64(padded[a-5])<<32 | uint64(padded[a-6])<<40 | - uint64(padded[a-7])<<48 | uint64(padded[a-8])<<56 - } - return fe -} - -func (fe *fe) setBig(a *big.Int) *fe { - return fe.setBytes(a.Bytes()) -} - -func (fe *fe) setString(s string) (*fe, error) { - if s[:2] == "0x" { - s = s[2:] - } - bytes, err := hex.DecodeString(s) - if err != nil { - return nil, err - } - return fe.setBytes(bytes), nil -} - -func (fe *fe) set(fe2 *fe) *fe { - fe[0] = fe2[0] - fe[1] = fe2[1] - fe[2] = fe2[2] - fe[3] = fe2[3] - fe[4] = fe2[4] - fe[5] = fe2[5] - return fe -} - -func (fe *fe) bytes() []byte { - out := make([]byte, 48) - var a int - for i := 0; i < 6; i++ { - a = 48 - i*8 - out[a-1] = byte(fe[i]) - out[a-2] = byte(fe[i] >> 8) - out[a-3] = byte(fe[i] >> 16) - out[a-4] = byte(fe[i] >> 24) - out[a-5] = byte(fe[i] >> 32) - out[a-6] = byte(fe[i] >> 40) - out[a-7] = byte(fe[i] >> 48) - out[a-8] = byte(fe[i] >> 56) - } - return out -} - -func (fe *fe) big() *big.Int { - return new(big.Int).SetBytes(fe.bytes()) -} - -func (fe *fe) string() (s string) { - for i := 5; i >= 0; i-- { - s = fmt.Sprintf("%s%16.16x", s, fe[i]) - } - return "0x" + s -} - -func (fe *fe) zero() *fe { - fe[0] = 0 - fe[1] = 0 - fe[2] = 0 - fe[3] = 0 - fe[4] = 0 - fe[5] = 0 - return fe -} - -func (fe *fe) one() *fe { - return fe.set(r1) -} - -func (fe *fe) rand(r io.Reader) (*fe, error) { - bi, err := rand.Int(r, modulus.big()) - if err != nil { - return nil, err - } - return fe.setBig(bi), nil -} - -func (fe *fe) isValid() bool { - return fe.cmp(&modulus) < 0 -} - -func (fe *fe) isOdd() bool { - var mask uint64 = 1 - return fe[0]&mask != 0 -} - -func (fe *fe) isEven() bool { - var mask uint64 = 1 - return fe[0]&mask == 0 -} - -func (fe *fe) isZero() bool { - return (fe[5] | fe[4] | fe[3] | fe[2] | fe[1] | fe[0]) == 0 -} - -func (fe *fe) isOne() bool { - return fe.equal(r1) -} - -func (fe *fe) cmp(fe2 *fe) int { - for i := 5; i >= 0; i-- { - if fe[i] > fe2[i] { - return 1 - } else if fe[i] < fe2[i] { - return -1 - } - } - return 0 -} - -func (fe *fe) equal(fe2 *fe) bool { - return fe2[0] == fe[0] && fe2[1] == fe[1] && fe2[2] == fe[2] && fe2[3] == fe[3] && fe2[4] == fe[4] && fe2[5] == fe[5] -} - -func (e *fe) sign() bool { - r := new(fe) - fromMont(r, e) - return r[0]&1 == 0 -} - -//nolint:unparam -func (fe *fe) div2(e uint64) { - fe[0] = fe[0]>>1 | fe[1]<<63 - fe[1] = fe[1]>>1 | fe[2]<<63 - fe[2] = fe[2]>>1 | fe[3]<<63 - fe[3] = fe[3]>>1 | fe[4]<<63 - fe[4] = fe[4]>>1 | fe[5]<<63 - fe[5] = fe[5]>>1 | e<<63 -} - -func (fe *fe) mul2() uint64 { - e := fe[5] >> 63 - fe[5] = fe[5]<<1 | fe[4]>>63 - fe[4] = fe[4]<<1 | fe[3]>>63 - fe[3] = fe[3]<<1 | fe[2]>>63 - fe[2] = fe[2]<<1 | fe[1]>>63 - fe[1] = fe[1]<<1 | fe[0]>>63 - fe[0] = fe[0] << 1 - return e -} - -func (e *fe2) zero() *fe2 { - e[0].zero() - e[1].zero() - return e -} - -func (e *fe2) one() *fe2 { - e[0].one() - e[1].zero() - return e -} - -func (e *fe2) set(e2 *fe2) *fe2 { - e[0].set(&e2[0]) - e[1].set(&e2[1]) - return e -} - -func (e *fe2) rand(r io.Reader) (*fe2, error) { - a0, err := new(fe).rand(r) - if err != nil { - return nil, err - } - a1, err := new(fe).rand(r) - if err != nil { - return nil, err - } - return &fe2{*a0, *a1}, nil -} - -func (e *fe2) isOne() bool { - return e[0].isOne() && e[1].isZero() -} - -func (e *fe2) isZero() bool { - return e[0].isZero() && e[1].isZero() -} - -func (e *fe2) equal(e2 *fe2) bool { - return e[0].equal(&e2[0]) && e[1].equal(&e2[1]) -} - -func (e *fe2) sign() bool { - r := new(fe) - if !e[0].isZero() { - fromMont(r, &e[0]) - return r[0]&1 == 0 - } - fromMont(r, &e[1]) - return r[0]&1 == 0 -} - -func (e *fe6) zero() *fe6 { - e[0].zero() - e[1].zero() - e[2].zero() - return e -} - -func (e *fe6) one() *fe6 { - e[0].one() - e[1].zero() - e[2].zero() - return e -} - -func (e *fe6) set(e2 *fe6) *fe6 { - e[0].set(&e2[0]) - e[1].set(&e2[1]) - e[2].set(&e2[2]) - return e -} - -func (e *fe6) rand(r io.Reader) (*fe6, error) { - a0, err := new(fe2).rand(r) - if err != nil { - return nil, err - } - a1, err := new(fe2).rand(r) - if err != nil { - return nil, err - } - a2, err := new(fe2).rand(r) - if err != nil { - return nil, err - } - return &fe6{*a0, *a1, *a2}, nil -} - -func (e *fe6) isOne() bool { - return e[0].isOne() && e[1].isZero() && e[2].isZero() -} - -func (e *fe6) isZero() bool { - return e[0].isZero() && e[1].isZero() && e[2].isZero() -} - -func (e *fe6) equal(e2 *fe6) bool { - return e[0].equal(&e2[0]) && e[1].equal(&e2[1]) && e[2].equal(&e2[2]) -} - -func (e *fe12) zero() *fe12 { - e[0].zero() - e[1].zero() - return e -} - -func (e *fe12) one() *fe12 { - e[0].one() - e[1].zero() - return e -} - -func (e *fe12) set(e2 *fe12) *fe12 { - e[0].set(&e2[0]) - e[1].set(&e2[1]) - return e -} - -func (e *fe12) rand(r io.Reader) (*fe12, error) { - a0, err := new(fe6).rand(r) - if err != nil { - return nil, err - } - a1, err := new(fe6).rand(r) - if err != nil { - return nil, err - } - return &fe12{*a0, *a1}, nil -} - -func (e *fe12) isOne() bool { - return e[0].isOne() && e[1].isZero() -} - -func (e *fe12) isZero() bool { - return e[0].isZero() && e[1].isZero() -} - -func (e *fe12) equal(e2 *fe12) bool { - return e[0].equal(&e2[0]) && e[1].equal(&e2[1]) -} diff --git a/crypto/bls12381/field_element_test.go b/crypto/bls12381/field_element_test.go deleted file mode 100644 index 0f6abd280cb..00000000000 --- a/crypto/bls12381/field_element_test.go +++ /dev/null @@ -1,251 +0,0 @@ -package bls12381 - -import ( - "bytes" - "crypto/rand" - "math/big" - "testing" -) - -func TestFieldElementValidation(t *testing.T) { - zero := new(fe).zero() - if !zero.isValid() { - t.Fatal("zero must be valid") - } - one := new(fe).one() - if !one.isValid() { - t.Fatal("one must be valid") - } - if modulus.isValid() { - t.Fatal("modulus must be invalid") - } - n := modulus.big() - n.Add(n, big.NewInt(1)) - if new(fe).setBig(n).isValid() { - t.Fatal("number greater than modulus must be invalid") - } -} - -func TestFieldElementEquality(t *testing.T) { - // fe - zero := new(fe).zero() - if !zero.equal(zero) { - t.Fatal("0 == 0") - } - one := new(fe).one() - if !one.equal(one) { - t.Fatal("1 == 1") - } - a, _ := new(fe).rand(rand.Reader) - if !a.equal(a) { - t.Fatal("a == a") - } - b := new(fe) - add(b, a, one) - if a.equal(b) { - t.Fatal("a != a + 1") - } - // fe2 - zero2 := new(fe2).zero() - if !zero2.equal(zero2) { - t.Fatal("0 == 0") - } - one2 := new(fe2).one() - if !one2.equal(one2) { - t.Fatal("1 == 1") - } - a2, _ := new(fe2).rand(rand.Reader) - if !a2.equal(a2) { - t.Fatal("a == a") - } - b2 := new(fe2) - fp2 := newFp2() - fp2.add(b2, a2, one2) - if a2.equal(b2) { - t.Fatal("a != a + 1") - } - // fe6 - zero6 := new(fe6).zero() - if !zero6.equal(zero6) { - t.Fatal("0 == 0") - } - one6 := new(fe6).one() - if !one6.equal(one6) { - t.Fatal("1 == 1") - } - a6, _ := new(fe6).rand(rand.Reader) - if !a6.equal(a6) { - t.Fatal("a == a") - } - b6 := new(fe6) - fp6 := newFp6(fp2) - fp6.add(b6, a6, one6) - if a6.equal(b6) { - t.Fatal("a != a + 1") - } - // fe12 - zero12 := new(fe12).zero() - if !zero12.equal(zero12) { - t.Fatal("0 == 0") - } - one12 := new(fe12).one() - if !one12.equal(one12) { - t.Fatal("1 == 1") - } - a12, _ := new(fe12).rand(rand.Reader) - if !a12.equal(a12) { - t.Fatal("a == a") - } - b12 := new(fe12) - fp12 := newFp12(fp6) - fp12.add(b12, a12, one12) - if a12.equal(b12) { - t.Fatal("a != a + 1") - } - -} - -func TestFieldElementHelpers(t *testing.T) { - // fe - zero := new(fe).zero() - if !zero.isZero() { - t.Fatal("'zero' is not zero") - } - one := new(fe).one() - if !one.isOne() { - t.Fatal("'one' is not one") - } - odd := new(fe).setBig(big.NewInt(1)) - if !odd.isOdd() { - t.Fatal("1 must be odd") - } - if odd.isEven() { - t.Fatal("1 must not be even") - } - even := new(fe).setBig(big.NewInt(2)) - if !even.isEven() { - t.Fatal("2 must be even") - } - if even.isOdd() { - t.Fatal("2 must not be odd") - } - // fe2 - zero2 := new(fe2).zero() - if !zero2.isZero() { - t.Fatal("'zero' is not zero, 2") - } - one2 := new(fe2).one() - if !one2.isOne() { - t.Fatal("'one' is not one, 2") - } - // fe6 - zero6 := new(fe6).zero() - if !zero6.isZero() { - t.Fatal("'zero' is not zero, 6") - } - one6 := new(fe6).one() - if !one6.isOne() { - t.Fatal("'one' is not one, 6") - } - // fe12 - zero12 := new(fe12).zero() - if !zero12.isZero() { - t.Fatal("'zero' is not zero, 12") - } - one12 := new(fe12).one() - if !one12.isOne() { - t.Fatal("'one' is not one, 12") - } -} - -func TestFieldElementSerialization(t *testing.T) { - t.Run("zero", func(t *testing.T) { - in := make([]byte, 48) - fe := new(fe).setBytes(in) - if !fe.isZero() { - t.Fatal("bad serialization") - } - if !bytes.Equal(in, fe.bytes()) { - t.Fatal("bad serialization") - } - }) - t.Run("bytes", func(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b := new(fe).setBytes(a.bytes()) - if !a.equal(b) { - t.Fatal("bad serialization") - } - } - }) - t.Run("big", func(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b := new(fe).setBig(a.big()) - if !a.equal(b) { - t.Fatal("bad encoding or decoding") - } - } - }) - t.Run("string", func(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, err := new(fe).setString(a.string()) - if err != nil { - t.Fatal(err) - } - if !a.equal(b) { - t.Fatal("bad encoding or decoding") - } - } - }) -} - -func TestFieldElementByteInputs(t *testing.T) { - zero := new(fe).zero() - in := make([]byte, 0) - a := new(fe).setBytes(in) - if !a.equal(zero) { - t.Fatal("bad serialization") - } - in = make([]byte, 48) - a = new(fe).setBytes(in) - if !a.equal(zero) { - t.Fatal("bad serialization") - } - in = make([]byte, 64) - a = new(fe).setBytes(in) - if !a.equal(zero) { - t.Fatal("bad serialization") - } - in = make([]byte, 49) - in[47] = 1 - normalOne := &fe{1, 0, 0, 0, 0, 0} - a = new(fe).setBytes(in) - if !a.equal(normalOne) { - t.Fatal("bad serialization") - } -} - -func TestFieldElementCopy(t *testing.T) { - a, _ := new(fe).rand(rand.Reader) - b := new(fe).set(a) - if !a.equal(b) { - t.Fatal("bad copy, 1") - } - a2, _ := new(fe2).rand(rand.Reader) - b2 := new(fe2).set(a2) - if !a2.equal(b2) { - t.Fatal("bad copy, 2") - } - a6, _ := new(fe6).rand(rand.Reader) - b6 := new(fe6).set(a6) - if !a6.equal(b6) { - t.Fatal("bad copy, 6") - } - a12, _ := new(fe12).rand(rand.Reader) - b12 := new(fe12).set(a12) - if !a12.equal(b12) { - t.Fatal("bad copy, 12") - } -} diff --git a/crypto/bls12381/fp.go b/crypto/bls12381/fp.go deleted file mode 100644 index f3d590507c3..00000000000 --- a/crypto/bls12381/fp.go +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bls12381 - -import ( - "errors" - "math/big" -) - -func fromBytes(in []byte) (*fe, error) { - fe := &fe{} - if len(in) != 48 { - return nil, errors.New("input string should be equal 48 bytes") - } - fe.setBytes(in) - if !fe.isValid() { - return nil, errors.New("must be less than modulus") - } - toMont(fe, fe) - return fe, nil -} - -func fromBig(in *big.Int) (*fe, error) { - fe := new(fe).setBig(in) - if !fe.isValid() { - return nil, errors.New("invalid input string") - } - toMont(fe, fe) - return fe, nil -} - -func fromString(in string) (*fe, error) { - fe, err := new(fe).setString(in) - if err != nil { - return nil, err - } - if !fe.isValid() { - return nil, errors.New("invalid input string") - } - toMont(fe, fe) - return fe, nil -} - -func toBytes(e *fe) []byte { - e2 := new(fe) - fromMont(e2, e) - return e2.bytes() -} - -func toBig(e *fe) *big.Int { - e2 := new(fe) - fromMont(e2, e) - return e2.big() -} - -func toString(e *fe) (s string) { - e2 := new(fe) - fromMont(e2, e) - return e2.string() -} - -func toMont(c, a *fe) { - mul(c, a, r2) -} - -func fromMont(c, a *fe) { - mul(c, a, &fe{1}) -} - -func exp(c, a *fe, e *big.Int) { - z := new(fe).set(r1) - for i := e.BitLen(); i >= 0; i-- { - mul(z, z, z) - if e.Bit(i) == 1 { - mul(z, z, a) - } - } - c.set(z) -} - -func inverse(inv, e *fe) { - if e.isZero() { - inv.zero() - return - } - u := new(fe).set(&modulus) - v := new(fe).set(e) - s := &fe{1} - r := &fe{0} - var k int - var z uint64 - var found = false - // Phase 1 - for i := 0; i < 768; i++ { - if v.isZero() { - found = true - break - } - if u.isEven() { - u.div2(0) - s.mul2() - } else if v.isEven() { - v.div2(0) - z += r.mul2() - } else if u.cmp(v) == 1 { - lsubAssign(u, v) - u.div2(0) - laddAssign(r, s) - s.mul2() - } else { - lsubAssign(v, u) - v.div2(0) - laddAssign(s, r) - z += r.mul2() - } - k++ - } - - if !found { - inv.zero() - return - } - - if k < 381 || k > 381+384 { - inv.zero() - return - } - - if r.cmp(&modulus) != -1 || z > 0 { - lsubAssign(r, &modulus) - } - u.set(&modulus) - lsubAssign(u, r) - - // Phase 2 - for i := k; i < 384*2; i++ { - double(u, u) - } - inv.set(u) -} - -func sqrt(c, a *fe) bool { - u, v := new(fe).set(a), new(fe) - exp(c, a, pPlus1Over4) - square(v, c) - return u.equal(v) -} - -func isQuadraticNonResidue(elem *fe) bool { - result := new(fe) - exp(result, elem, pMinus1Over2) - return !result.isOne() -} diff --git a/crypto/bls12381/fp12.go b/crypto/bls12381/fp12.go deleted file mode 100644 index 3141c76c399..00000000000 --- a/crypto/bls12381/fp12.go +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bls12381 - -import ( - "errors" - "math/big" -) - -type fp12 struct { - fp12temp - fp6 *fp6 -} - -type fp12temp struct { - t2 [9]*fe2 - t6 [5]*fe6 - t12 *fe12 -} - -func newFp12Temp() fp12temp { - t2 := [9]*fe2{} - t6 := [5]*fe6{} - for i := 0; i < len(t2); i++ { - t2[i] = &fe2{} - } - for i := 0; i < len(t6); i++ { - t6[i] = &fe6{} - } - return fp12temp{t2, t6, &fe12{}} -} - -func newFp12(fp6 *fp6) *fp12 { - t := newFp12Temp() - if fp6 == nil { - return &fp12{t, newFp6(nil)} - } - return &fp12{t, fp6} -} - -func (e *fp12) fp2() *fp2 { - return e.fp6.fp2 -} - -func (e *fp12) fromBytes(in []byte) (*fe12, error) { - if len(in) != 576 { - return nil, errors.New("input string should be larger than 96 bytes") - } - fp6 := e.fp6 - c1, err := fp6.fromBytes(in[:288]) - if err != nil { - return nil, err - } - c0, err := fp6.fromBytes(in[288:]) - if err != nil { - return nil, err - } - return &fe12{*c0, *c1}, nil -} - -func (e *fp12) toBytes(a *fe12) []byte { - fp6 := e.fp6 - out := make([]byte, 576) - copy(out[:288], fp6.toBytes(&a[1])) - copy(out[288:], fp6.toBytes(&a[0])) - return out -} - -func (e *fp12) new() *fe12 { - return new(fe12) -} - -func (e *fp12) zero() *fe12 { - return new(fe12) -} - -func (e *fp12) one() *fe12 { - return new(fe12).one() -} - -func (e *fp12) add(c, a, b *fe12) { - fp6 := e.fp6 - fp6.add(&c[0], &a[0], &b[0]) - fp6.add(&c[1], &a[1], &b[1]) - -} - -func (e *fp12) double(c, a *fe12) { - fp6 := e.fp6 - fp6.double(&c[0], &a[0]) - fp6.double(&c[1], &a[1]) -} - -func (e *fp12) sub(c, a, b *fe12) { - fp6 := e.fp6 - fp6.sub(&c[0], &a[0], &b[0]) - fp6.sub(&c[1], &a[1], &b[1]) - -} - -func (e *fp12) neg(c, a *fe12) { - fp6 := e.fp6 - fp6.neg(&c[0], &a[0]) - fp6.neg(&c[1], &a[1]) -} - -func (e *fp12) conjugate(c, a *fe12) { - fp6 := e.fp6 - c[0].set(&a[0]) - fp6.neg(&c[1], &a[1]) -} - -func (e *fp12) square(c, a *fe12) { - fp6, t := e.fp6, e.t6 - fp6.add(t[0], &a[0], &a[1]) - fp6.mul(t[2], &a[0], &a[1]) - fp6.mulByNonResidue(t[1], &a[1]) - fp6.addAssign(t[1], &a[0]) - fp6.mulByNonResidue(t[3], t[2]) - fp6.mulAssign(t[0], t[1]) - fp6.subAssign(t[0], t[2]) - fp6.sub(&c[0], t[0], t[3]) - fp6.double(&c[1], t[2]) -} - -func (e *fp12) cyclotomicSquare(c, a *fe12) { - t, fp2 := e.t2, e.fp2() - e.fp4Square(t[3], t[4], &a[0][0], &a[1][1]) - fp2.sub(t[2], t[3], &a[0][0]) - fp2.doubleAssign(t[2]) - fp2.add(&c[0][0], t[2], t[3]) - fp2.add(t[2], t[4], &a[1][1]) - fp2.doubleAssign(t[2]) - fp2.add(&c[1][1], t[2], t[4]) - e.fp4Square(t[3], t[4], &a[1][0], &a[0][2]) - e.fp4Square(t[5], t[6], &a[0][1], &a[1][2]) - fp2.sub(t[2], t[3], &a[0][1]) - fp2.doubleAssign(t[2]) - fp2.add(&c[0][1], t[2], t[3]) - fp2.add(t[2], t[4], &a[1][2]) - fp2.doubleAssign(t[2]) - fp2.add(&c[1][2], t[2], t[4]) - fp2.mulByNonResidue(t[3], t[6]) - fp2.add(t[2], t[3], &a[1][0]) - fp2.doubleAssign(t[2]) - fp2.add(&c[1][0], t[2], t[3]) - fp2.sub(t[2], t[5], &a[0][2]) - fp2.doubleAssign(t[2]) - fp2.add(&c[0][2], t[2], t[5]) -} - -func (e *fp12) mul(c, a, b *fe12) { - t, fp6 := e.t6, e.fp6 - fp6.mul(t[1], &a[0], &b[0]) - fp6.mul(t[2], &a[1], &b[1]) - fp6.add(t[0], t[1], t[2]) - fp6.mulByNonResidue(t[2], t[2]) - fp6.add(t[3], t[1], t[2]) - fp6.add(t[1], &a[0], &a[1]) - fp6.add(t[2], &b[0], &b[1]) - fp6.mulAssign(t[1], t[2]) - c[0].set(t[3]) - fp6.sub(&c[1], t[1], t[0]) -} - -func (e *fp12) mulAssign(a, b *fe12) { - t, fp6 := e.t6, e.fp6 - fp6.mul(t[1], &a[0], &b[0]) - fp6.mul(t[2], &a[1], &b[1]) - fp6.add(t[0], t[1], t[2]) - fp6.mulByNonResidue(t[2], t[2]) - fp6.add(t[3], t[1], t[2]) - fp6.add(t[1], &a[0], &a[1]) - fp6.add(t[2], &b[0], &b[1]) - fp6.mulAssign(t[1], t[2]) - a[0].set(t[3]) - fp6.sub(&a[1], t[1], t[0]) -} - -func (e *fp12) fp4Square(c0, c1, a0, a1 *fe2) { - t, fp2 := e.t2, e.fp2() - fp2.square(t[0], a0) - fp2.square(t[1], a1) - fp2.mulByNonResidue(t[2], t[1]) - fp2.add(c0, t[2], t[0]) - fp2.add(t[2], a0, a1) - fp2.squareAssign(t[2]) - fp2.subAssign(t[2], t[0]) - fp2.sub(c1, t[2], t[1]) -} - -func (e *fp12) inverse(c, a *fe12) { - fp6, t := e.fp6, e.t6 - fp6.square(t[0], &a[0]) - fp6.square(t[1], &a[1]) - fp6.mulByNonResidue(t[1], t[1]) - fp6.sub(t[1], t[0], t[1]) - fp6.inverse(t[0], t[1]) - fp6.mul(&c[0], &a[0], t[0]) - fp6.mulAssign(t[0], &a[1]) - fp6.neg(&c[1], t[0]) -} - -func (e *fp12) mulBy014Assign(a *fe12, c0, c1, c4 *fe2) { - fp2, fp6, t, t2 := e.fp2(), e.fp6, e.t6, e.t2[0] - fp6.mulBy01(t[0], &a[0], c0, c1) - fp6.mulBy1(t[1], &a[1], c4) - fp2.add(t2, c1, c4) - fp6.add(t[2], &a[1], &a[0]) - fp6.mulBy01Assign(t[2], c0, t2) - fp6.subAssign(t[2], t[0]) - fp6.sub(&a[1], t[2], t[1]) - fp6.mulByNonResidue(t[1], t[1]) - fp6.add(&a[0], t[1], t[0]) -} - -func (e *fp12) exp(c, a *fe12, s *big.Int) { - z := e.one() - for i := s.BitLen() - 1; i >= 0; i-- { - e.square(z, z) - if s.Bit(i) == 1 { - e.mul(z, z, a) - } - } - c.set(z) -} - -func (e *fp12) cyclotomicExp(c, a *fe12, s *big.Int) { - z := e.one() - for i := s.BitLen() - 1; i >= 0; i-- { - e.cyclotomicSquare(z, z) - if s.Bit(i) == 1 { - e.mul(z, z, a) - } - } - c.set(z) -} - -func (e *fp12) frobeniusMap(c, a *fe12, power uint) { - fp6 := e.fp6 - fp6.frobeniusMap(&c[0], &a[0], power) - fp6.frobeniusMap(&c[1], &a[1], power) - switch power { - case 0: - return - case 6: - fp6.neg(&c[1], &c[1]) - default: - fp6.mulByBaseField(&c[1], &c[1], &frobeniusCoeffs12[power]) - } -} - -func (e *fp12) frobeniusMapAssign(a *fe12, power uint) { - fp6 := e.fp6 - fp6.frobeniusMapAssign(&a[0], power) - fp6.frobeniusMapAssign(&a[1], power) - switch power { - case 0: - return - case 6: - fp6.neg(&a[1], &a[1]) - default: - fp6.mulByBaseField(&a[1], &a[1], &frobeniusCoeffs12[power]) - } -} diff --git a/crypto/bls12381/fp2.go b/crypto/bls12381/fp2.go deleted file mode 100644 index 0f1c5a23ac5..00000000000 --- a/crypto/bls12381/fp2.go +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bls12381 - -import ( - "errors" - "math/big" -) - -type fp2Temp struct { - t [4]*fe -} - -type fp2 struct { - fp2Temp -} - -func newFp2Temp() fp2Temp { - t := [4]*fe{} - for i := 0; i < len(t); i++ { - t[i] = &fe{} - } - return fp2Temp{t} -} - -func newFp2() *fp2 { - t := newFp2Temp() - return &fp2{t} -} - -func (e *fp2) fromBytes(in []byte) (*fe2, error) { - if len(in) != 96 { - return nil, errors.New("length of input string should be 96 bytes") - } - c1, err := fromBytes(in[:48]) - if err != nil { - return nil, err - } - c0, err := fromBytes(in[48:]) - if err != nil { - return nil, err - } - return &fe2{*c0, *c1}, nil -} - -func (e *fp2) toBytes(a *fe2) []byte { - out := make([]byte, 96) - copy(out[:48], toBytes(&a[1])) - copy(out[48:], toBytes(&a[0])) - return out -} - -func (e *fp2) new() *fe2 { - return new(fe2).zero() -} - -func (e *fp2) zero() *fe2 { - return new(fe2).zero() -} - -func (e *fp2) one() *fe2 { - return new(fe2).one() -} - -func (e *fp2) add(c, a, b *fe2) { - add(&c[0], &a[0], &b[0]) - add(&c[1], &a[1], &b[1]) -} - -func (e *fp2) addAssign(a, b *fe2) { - addAssign(&a[0], &b[0]) - addAssign(&a[1], &b[1]) -} - -func (e *fp2) ladd(c, a, b *fe2) { - ladd(&c[0], &a[0], &b[0]) - ladd(&c[1], &a[1], &b[1]) -} - -func (e *fp2) double(c, a *fe2) { - double(&c[0], &a[0]) - double(&c[1], &a[1]) -} - -func (e *fp2) doubleAssign(a *fe2) { - doubleAssign(&a[0]) - doubleAssign(&a[1]) -} - -func (e *fp2) ldouble(c, a *fe2) { - ldouble(&c[0], &a[0]) - ldouble(&c[1], &a[1]) -} - -func (e *fp2) sub(c, a, b *fe2) { - sub(&c[0], &a[0], &b[0]) - sub(&c[1], &a[1], &b[1]) -} - -func (e *fp2) subAssign(c, a *fe2) { - subAssign(&c[0], &a[0]) - subAssign(&c[1], &a[1]) -} - -func (e *fp2) neg(c, a *fe2) { - neg(&c[0], &a[0]) - neg(&c[1], &a[1]) -} - -func (e *fp2) mul(c, a, b *fe2) { - t := e.t - mul(t[1], &a[0], &b[0]) - mul(t[2], &a[1], &b[1]) - add(t[0], &a[0], &a[1]) - add(t[3], &b[0], &b[1]) - sub(&c[0], t[1], t[2]) - addAssign(t[1], t[2]) - mul(t[0], t[0], t[3]) - sub(&c[1], t[0], t[1]) -} - -func (e *fp2) mulAssign(a, b *fe2) { - t := e.t - mul(t[1], &a[0], &b[0]) - mul(t[2], &a[1], &b[1]) - add(t[0], &a[0], &a[1]) - add(t[3], &b[0], &b[1]) - sub(&a[0], t[1], t[2]) - addAssign(t[1], t[2]) - mul(t[0], t[0], t[3]) - sub(&a[1], t[0], t[1]) -} - -func (e *fp2) square(c, a *fe2) { - t := e.t - ladd(t[0], &a[0], &a[1]) - sub(t[1], &a[0], &a[1]) - ldouble(t[2], &a[0]) - mul(&c[0], t[0], t[1]) - mul(&c[1], t[2], &a[1]) -} - -func (e *fp2) squareAssign(a *fe2) { - t := e.t - ladd(t[0], &a[0], &a[1]) - sub(t[1], &a[0], &a[1]) - ldouble(t[2], &a[0]) - mul(&a[0], t[0], t[1]) - mul(&a[1], t[2], &a[1]) -} - -func (e *fp2) mulByNonResidue(c, a *fe2) { - t := e.t - sub(t[0], &a[0], &a[1]) - add(&c[1], &a[0], &a[1]) - c[0].set(t[0]) -} - -func (e *fp2) mulByB(c, a *fe2) { - t := e.t - double(t[0], &a[0]) - double(t[1], &a[1]) - doubleAssign(t[0]) - doubleAssign(t[1]) - sub(&c[0], t[0], t[1]) - add(&c[1], t[0], t[1]) -} - -func (e *fp2) inverse(c, a *fe2) { - t := e.t - square(t[0], &a[0]) - square(t[1], &a[1]) - addAssign(t[0], t[1]) - inverse(t[0], t[0]) - mul(&c[0], &a[0], t[0]) - mul(t[0], t[0], &a[1]) - neg(&c[1], t[0]) -} - -func (e *fp2) mulByFq(c, a *fe2, b *fe) { - mul(&c[0], &a[0], b) - mul(&c[1], &a[1], b) -} - -func (e *fp2) exp(c, a *fe2, s *big.Int) { - z := e.one() - for i := s.BitLen() - 1; i >= 0; i-- { - e.square(z, z) - if s.Bit(i) == 1 { - e.mul(z, z, a) - } - } - c.set(z) -} - -func (e *fp2) frobeniusMap(c, a *fe2, power uint) { - c[0].set(&a[0]) - if power%2 == 1 { - neg(&c[1], &a[1]) - return - } - c[1].set(&a[1]) -} - -func (e *fp2) frobeniusMapAssign(a *fe2, power uint) { - if power%2 == 1 { - neg(&a[1], &a[1]) - return - } -} - -func (e *fp2) sqrt(c, a *fe2) bool { - u, x0, a1, alpha := &fe2{}, &fe2{}, &fe2{}, &fe2{} - u.set(a) - e.exp(a1, a, pMinus3Over4) - e.square(alpha, a1) - e.mul(alpha, alpha, a) - e.mul(x0, a1, a) - if alpha.equal(negativeOne2) { - neg(&c[0], &x0[1]) - c[1].set(&x0[0]) - return true - } - e.add(alpha, alpha, e.one()) - e.exp(alpha, alpha, pMinus1Over2) - e.mul(c, alpha, x0) - e.square(alpha, c) - return alpha.equal(u) -} - -func (e *fp2) isQuadraticNonResidue(a *fe2) bool { - // https://github.com/leovt/constructible/wiki/Taking-Square-Roots-in-quadratic-extension-Fields - c0, c1 := new(fe), new(fe) - square(c0, &a[0]) - square(c1, &a[1]) - add(c1, c1, c0) - return isQuadraticNonResidue(c1) -} diff --git a/crypto/bls12381/fp6.go b/crypto/bls12381/fp6.go deleted file mode 100644 index 304173baa3f..00000000000 --- a/crypto/bls12381/fp6.go +++ /dev/null @@ -1,351 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bls12381 - -import ( - "errors" - "math/big" -) - -type fp6Temp struct { - t [6]*fe2 -} - -type fp6 struct { - fp2 *fp2 - fp6Temp -} - -func newFp6Temp() fp6Temp { - t := [6]*fe2{} - for i := 0; i < len(t); i++ { - t[i] = &fe2{} - } - return fp6Temp{t} -} - -func newFp6(f *fp2) *fp6 { - t := newFp6Temp() - if f == nil { - return &fp6{newFp2(), t} - } - return &fp6{f, t} -} - -func (e *fp6) fromBytes(b []byte) (*fe6, error) { - if len(b) < 288 { - return nil, errors.New("input string should be larger than 288 bytes") - } - fp2 := e.fp2 - u2, err := fp2.fromBytes(b[:96]) - if err != nil { - return nil, err - } - u1, err := fp2.fromBytes(b[96:192]) - if err != nil { - return nil, err - } - u0, err := fp2.fromBytes(b[192:]) - if err != nil { - return nil, err - } - return &fe6{*u0, *u1, *u2}, nil -} - -func (e *fp6) toBytes(a *fe6) []byte { - fp2 := e.fp2 - out := make([]byte, 288) - copy(out[:96], fp2.toBytes(&a[2])) - copy(out[96:192], fp2.toBytes(&a[1])) - copy(out[192:], fp2.toBytes(&a[0])) - return out -} - -func (e *fp6) new() *fe6 { - return new(fe6) -} - -func (e *fp6) zero() *fe6 { - return new(fe6) -} - -func (e *fp6) one() *fe6 { - return new(fe6).one() -} - -func (e *fp6) add(c, a, b *fe6) { - fp2 := e.fp2 - fp2.add(&c[0], &a[0], &b[0]) - fp2.add(&c[1], &a[1], &b[1]) - fp2.add(&c[2], &a[2], &b[2]) -} - -func (e *fp6) addAssign(a, b *fe6) { - fp2 := e.fp2 - fp2.addAssign(&a[0], &b[0]) - fp2.addAssign(&a[1], &b[1]) - fp2.addAssign(&a[2], &b[2]) -} - -func (e *fp6) double(c, a *fe6) { - fp2 := e.fp2 - fp2.double(&c[0], &a[0]) - fp2.double(&c[1], &a[1]) - fp2.double(&c[2], &a[2]) -} - -func (e *fp6) doubleAssign(a *fe6) { - fp2 := e.fp2 - fp2.doubleAssign(&a[0]) - fp2.doubleAssign(&a[1]) - fp2.doubleAssign(&a[2]) -} - -func (e *fp6) sub(c, a, b *fe6) { - fp2 := e.fp2 - fp2.sub(&c[0], &a[0], &b[0]) - fp2.sub(&c[1], &a[1], &b[1]) - fp2.sub(&c[2], &a[2], &b[2]) -} - -func (e *fp6) subAssign(a, b *fe6) { - fp2 := e.fp2 - fp2.subAssign(&a[0], &b[0]) - fp2.subAssign(&a[1], &b[1]) - fp2.subAssign(&a[2], &b[2]) -} - -func (e *fp6) neg(c, a *fe6) { - fp2 := e.fp2 - fp2.neg(&c[0], &a[0]) - fp2.neg(&c[1], &a[1]) - fp2.neg(&c[2], &a[2]) -} - -func (e *fp6) mul(c, a, b *fe6) { - fp2, t := e.fp2, e.t - fp2.mul(t[0], &a[0], &b[0]) - fp2.mul(t[1], &a[1], &b[1]) - fp2.mul(t[2], &a[2], &b[2]) - fp2.add(t[3], &a[1], &a[2]) - fp2.add(t[4], &b[1], &b[2]) - fp2.mulAssign(t[3], t[4]) - fp2.add(t[4], t[1], t[2]) - fp2.subAssign(t[3], t[4]) - fp2.mulByNonResidue(t[3], t[3]) - fp2.add(t[5], t[0], t[3]) - fp2.add(t[3], &a[0], &a[1]) - fp2.add(t[4], &b[0], &b[1]) - fp2.mulAssign(t[3], t[4]) - fp2.add(t[4], t[0], t[1]) - fp2.subAssign(t[3], t[4]) - fp2.mulByNonResidue(t[4], t[2]) - fp2.add(&c[1], t[3], t[4]) - fp2.add(t[3], &a[0], &a[2]) - fp2.add(t[4], &b[0], &b[2]) - fp2.mulAssign(t[3], t[4]) - fp2.add(t[4], t[0], t[2]) - fp2.subAssign(t[3], t[4]) - fp2.add(&c[2], t[1], t[3]) - c[0].set(t[5]) -} - -func (e *fp6) mulAssign(a, b *fe6) { - fp2, t := e.fp2, e.t - fp2.mul(t[0], &a[0], &b[0]) - fp2.mul(t[1], &a[1], &b[1]) - fp2.mul(t[2], &a[2], &b[2]) - fp2.add(t[3], &a[1], &a[2]) - fp2.add(t[4], &b[1], &b[2]) - fp2.mulAssign(t[3], t[4]) - fp2.add(t[4], t[1], t[2]) - fp2.subAssign(t[3], t[4]) - fp2.mulByNonResidue(t[3], t[3]) - fp2.add(t[5], t[0], t[3]) - fp2.add(t[3], &a[0], &a[1]) - fp2.add(t[4], &b[0], &b[1]) - fp2.mulAssign(t[3], t[4]) - fp2.add(t[4], t[0], t[1]) - fp2.subAssign(t[3], t[4]) - fp2.mulByNonResidue(t[4], t[2]) - fp2.add(&a[1], t[3], t[4]) - fp2.add(t[3], &a[0], &a[2]) - fp2.add(t[4], &b[0], &b[2]) - fp2.mulAssign(t[3], t[4]) - fp2.add(t[4], t[0], t[2]) - fp2.subAssign(t[3], t[4]) - fp2.add(&a[2], t[1], t[3]) - a[0].set(t[5]) -} - -func (e *fp6) square(c, a *fe6) { - fp2, t := e.fp2, e.t - fp2.square(t[0], &a[0]) - fp2.mul(t[1], &a[0], &a[1]) - fp2.doubleAssign(t[1]) - fp2.sub(t[2], &a[0], &a[1]) - fp2.addAssign(t[2], &a[2]) - fp2.squareAssign(t[2]) - fp2.mul(t[3], &a[1], &a[2]) - fp2.doubleAssign(t[3]) - fp2.square(t[4], &a[2]) - fp2.mulByNonResidue(t[5], t[3]) - fp2.add(&c[0], t[0], t[5]) - fp2.mulByNonResidue(t[5], t[4]) - fp2.add(&c[1], t[1], t[5]) - fp2.addAssign(t[1], t[2]) - fp2.addAssign(t[1], t[3]) - fp2.addAssign(t[0], t[4]) - fp2.sub(&c[2], t[1], t[0]) -} - -func (e *fp6) mulBy01Assign(a *fe6, b0, b1 *fe2) { - fp2, t := e.fp2, e.t - fp2.mul(t[0], &a[0], b0) - fp2.mul(t[1], &a[1], b1) - fp2.add(t[5], &a[1], &a[2]) - fp2.mul(t[2], b1, t[5]) - fp2.subAssign(t[2], t[1]) - fp2.mulByNonResidue(t[2], t[2]) - fp2.add(t[5], &a[0], &a[2]) - fp2.mul(t[3], b0, t[5]) - fp2.subAssign(t[3], t[0]) - fp2.add(&a[2], t[3], t[1]) - fp2.add(t[4], b0, b1) - fp2.add(t[5], &a[0], &a[1]) - fp2.mulAssign(t[4], t[5]) - fp2.subAssign(t[4], t[0]) - fp2.sub(&a[1], t[4], t[1]) - fp2.add(&a[0], t[2], t[0]) -} - -func (e *fp6) mulBy01(c, a *fe6, b0, b1 *fe2) { - fp2, t := e.fp2, e.t - fp2.mul(t[0], &a[0], b0) - fp2.mul(t[1], &a[1], b1) - fp2.add(t[2], &a[1], &a[2]) - fp2.mulAssign(t[2], b1) - fp2.subAssign(t[2], t[1]) - fp2.mulByNonResidue(t[2], t[2]) - fp2.add(t[3], &a[0], &a[2]) - fp2.mulAssign(t[3], b0) - fp2.subAssign(t[3], t[0]) - fp2.add(&c[2], t[3], t[1]) - fp2.add(t[4], b0, b1) - fp2.add(t[3], &a[0], &a[1]) - fp2.mulAssign(t[4], t[3]) - fp2.subAssign(t[4], t[0]) - fp2.sub(&c[1], t[4], t[1]) - fp2.add(&c[0], t[2], t[0]) -} - -func (e *fp6) mulBy1(c, a *fe6, b1 *fe2) { - fp2, t := e.fp2, e.t - fp2.mul(t[0], &a[2], b1) - fp2.mul(&c[2], &a[1], b1) - fp2.mul(&c[1], &a[0], b1) - fp2.mulByNonResidue(&c[0], t[0]) -} - -func (e *fp6) mulByNonResidue(c, a *fe6) { - fp2, t := e.fp2, e.t - t[0].set(&a[0]) - fp2.mulByNonResidue(&c[0], &a[2]) - c[2].set(&a[1]) - c[1].set(t[0]) -} - -func (e *fp6) mulByBaseField(c, a *fe6, b *fe2) { - fp2 := e.fp2 - fp2.mul(&c[0], &a[0], b) - fp2.mul(&c[1], &a[1], b) - fp2.mul(&c[2], &a[2], b) -} - -func (e *fp6) exp(c, a *fe6, s *big.Int) { - z := e.one() - for i := s.BitLen() - 1; i >= 0; i-- { - e.square(z, z) - if s.Bit(i) == 1 { - e.mul(z, z, a) - } - } - c.set(z) -} - -func (e *fp6) inverse(c, a *fe6) { - fp2, t := e.fp2, e.t - fp2.square(t[0], &a[0]) - fp2.mul(t[1], &a[1], &a[2]) - fp2.mulByNonResidue(t[1], t[1]) - fp2.subAssign(t[0], t[1]) - fp2.square(t[1], &a[1]) - fp2.mul(t[2], &a[0], &a[2]) - fp2.subAssign(t[1], t[2]) - fp2.square(t[2], &a[2]) - fp2.mulByNonResidue(t[2], t[2]) - fp2.mul(t[3], &a[0], &a[1]) - fp2.subAssign(t[2], t[3]) - fp2.mul(t[3], &a[2], t[2]) - fp2.mul(t[4], &a[1], t[1]) - fp2.addAssign(t[3], t[4]) - fp2.mulByNonResidue(t[3], t[3]) - fp2.mul(t[4], &a[0], t[0]) - fp2.addAssign(t[3], t[4]) - fp2.inverse(t[3], t[3]) - fp2.mul(&c[0], t[0], t[3]) - fp2.mul(&c[1], t[2], t[3]) - fp2.mul(&c[2], t[1], t[3]) -} - -func (e *fp6) frobeniusMap(c, a *fe6, power uint) { - fp2 := e.fp2 - fp2.frobeniusMap(&c[0], &a[0], power) - fp2.frobeniusMap(&c[1], &a[1], power) - fp2.frobeniusMap(&c[2], &a[2], power) - switch power % 6 { - case 0: - return - case 3: - neg(&c[0][0], &a[1][1]) - c[1][1].set(&a[1][0]) - fp2.neg(&a[2], &a[2]) - default: - fp2.mul(&c[1], &c[1], &frobeniusCoeffs61[power%6]) - fp2.mul(&c[2], &c[2], &frobeniusCoeffs62[power%6]) - } -} - -func (e *fp6) frobeniusMapAssign(a *fe6, power uint) { - fp2 := e.fp2 - fp2.frobeniusMapAssign(&a[0], power) - fp2.frobeniusMapAssign(&a[1], power) - fp2.frobeniusMapAssign(&a[2], power) - t := e.t - switch power % 6 { - case 0: - return - case 3: - neg(&t[0][0], &a[1][1]) - a[1][1].set(&a[1][0]) - a[1][0].set(&t[0][0]) - fp2.neg(&a[2], &a[2]) - default: - fp2.mulAssign(&a[1], &frobeniusCoeffs61[power%6]) - fp2.mulAssign(&a[2], &frobeniusCoeffs62[power%6]) - } -} diff --git a/crypto/bls12381/fp_test.go b/crypto/bls12381/fp_test.go deleted file mode 100644 index e53fd00ca31..00000000000 --- a/crypto/bls12381/fp_test.go +++ /dev/null @@ -1,1412 +0,0 @@ -package bls12381 - -import ( - "bytes" - "crypto/rand" - "math/big" - "testing" -) - -func TestFpSerialization(t *testing.T) { - t.Run("zero", func(t *testing.T) { - in := make([]byte, 48) - fe, err := fromBytes(in) - if err != nil { - t.Fatal(err) - } - if !fe.isZero() { - t.Fatal("bad serialization") - } - if !bytes.Equal(in, toBytes(fe)) { - t.Fatal("bad serialization") - } - }) - t.Run("bytes", func(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, err := fromBytes(toBytes(a)) - if err != nil { - t.Fatal(err) - } - if !a.equal(b) { - t.Fatal("bad serialization") - } - } - }) - t.Run("string", func(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, err := fromString(toString(a)) - if err != nil { - t.Fatal(err) - } - if !a.equal(b) { - t.Fatal("bad encoding or decoding") - } - } - }) - t.Run("big", func(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, err := fromBig(toBig(a)) - if err != nil { - t.Fatal(err) - } - if !a.equal(b) { - t.Fatal("bad encoding or decoding") - } - } - }) -} - -func TestFpAdditionCrossAgainstBigInt(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, _ := new(fe).rand(rand.Reader) - c := new(fe) - big_a := toBig(a) - big_b := toBig(b) - big_c := new(big.Int) - add(c, a, b) - out_1 := toBytes(c) - out_2 := padBytes(big_c.Add(big_a, big_b).Mod(big_c, modulus.big()).Bytes(), 48) - if !bytes.Equal(out_1, out_2) { - t.Fatal("cross test against big.Int is not satisfied A") - } - double(c, a) - out_1 = toBytes(c) - out_2 = padBytes(big_c.Add(big_a, big_a).Mod(big_c, modulus.big()).Bytes(), 48) - if !bytes.Equal(out_1, out_2) { - t.Fatal("cross test against big.Int is not satisfied B") - } - sub(c, a, b) - out_1 = toBytes(c) - out_2 = padBytes(big_c.Sub(big_a, big_b).Mod(big_c, modulus.big()).Bytes(), 48) - if !bytes.Equal(out_1, out_2) { - t.Fatal("cross test against big.Int is not satisfied C") - } - neg(c, a) - out_1 = toBytes(c) - out_2 = padBytes(big_c.Neg(big_a).Mod(big_c, modulus.big()).Bytes(), 48) - if !bytes.Equal(out_1, out_2) { - t.Fatal("cross test against big.Int is not satisfied D") - } - } -} - -func TestFpAdditionCrossAgainstBigIntAssigned(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, _ := new(fe).rand(rand.Reader) - big_a, big_b := toBig(a), toBig(b) - addAssign(a, b) - out_1 := toBytes(a) - out_2 := padBytes(big_a.Add(big_a, big_b).Mod(big_a, modulus.big()).Bytes(), 48) - if !bytes.Equal(out_1, out_2) { - t.Fatal("cross test against big.Int is not satisfied A") - } - a, _ = new(fe).rand(rand.Reader) - big_a = toBig(a) - doubleAssign(a) - out_1 = toBytes(a) - out_2 = padBytes(big_a.Add(big_a, big_a).Mod(big_a, modulus.big()).Bytes(), 48) - if !bytes.Equal(out_1, out_2) { - t.Fatal("cross test against big.Int is not satisfied B") - } - a, _ = new(fe).rand(rand.Reader) - b, _ = new(fe).rand(rand.Reader) - big_a, big_b = toBig(a), toBig(b) - subAssign(a, b) - out_1 = toBytes(a) - out_2 = padBytes(big_a.Sub(big_a, big_b).Mod(big_a, modulus.big()).Bytes(), 48) - if !bytes.Equal(out_1, out_2) { - t.Fatal("cross test against big.Int is not satisfied A") - } - } -} - -func TestFpAdditionProperties(t *testing.T) { - for i := 0; i < fuz; i++ { - zero := new(fe).zero() - a, _ := new(fe).rand(rand.Reader) - b, _ := new(fe).rand(rand.Reader) - c_1, c_2 := new(fe), new(fe) - add(c_1, a, zero) - if !c_1.equal(a) { - t.Fatal("a + 0 == a") - } - sub(c_1, a, zero) - if !c_1.equal(a) { - t.Fatal("a - 0 == a") - } - double(c_1, zero) - if !c_1.equal(zero) { - t.Fatal("2 * 0 == 0") - } - neg(c_1, zero) - if !c_1.equal(zero) { - t.Fatal("-0 == 0") - } - sub(c_1, zero, a) - neg(c_2, a) - if !c_1.equal(c_2) { - t.Fatal("0-a == -a") - } - double(c_1, a) - add(c_2, a, a) - if !c_1.equal(c_2) { - t.Fatal("2 * a == a + a") - } - add(c_1, a, b) - add(c_2, b, a) - if !c_1.equal(c_2) { - t.Fatal("a + b = b + a") - } - sub(c_1, a, b) - sub(c_2, b, a) - neg(c_2, c_2) - if !c_1.equal(c_2) { - t.Fatal("a - b = - ( b - a )") - } - c_x, _ := new(fe).rand(rand.Reader) - add(c_1, a, b) - add(c_1, c_1, c_x) - add(c_2, a, c_x) - add(c_2, c_2, b) - if !c_1.equal(c_2) { - t.Fatal("(a + b) + c == (a + c ) + b") - } - sub(c_1, a, b) - sub(c_1, c_1, c_x) - sub(c_2, a, c_x) - sub(c_2, c_2, b) - if !c_1.equal(c_2) { - t.Fatal("(a - b) - c == (a - c ) -b") - } - } -} - -func TestFpAdditionPropertiesAssigned(t *testing.T) { - for i := 0; i < fuz; i++ { - zero := new(fe).zero() - a, b := new(fe), new(fe) - _, _ = a.rand(rand.Reader) - b.set(a) - addAssign(a, zero) - if !a.equal(b) { - t.Fatal("a + 0 == a") - } - subAssign(a, zero) - if !a.equal(b) { - t.Fatal("a - 0 == a") - } - a.set(zero) - doubleAssign(a) - if !a.equal(zero) { - t.Fatal("2 * 0 == 0") - } - a.set(zero) - subAssign(a, b) - neg(b, b) - if !a.equal(b) { - t.Fatal("0-a == -a") - } - _, _ = a.rand(rand.Reader) - b.set(a) - doubleAssign(a) - addAssign(b, b) - if !a.equal(b) { - t.Fatal("2 * a == a + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c_1, c_2 := new(fe).set(a), new(fe).set(b) - addAssign(c_1, b) - addAssign(c_2, a) - if !c_1.equal(c_2) { - t.Fatal("a + b = b + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c_1.set(a) - c_2.set(b) - subAssign(c_1, b) - subAssign(c_2, a) - neg(c_2, c_2) - if !c_1.equal(c_2) { - t.Fatal("a - b = - ( b - a )") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c, _ := new(fe).rand(rand.Reader) - a0 := new(fe).set(a) - addAssign(a, b) - addAssign(a, c) - addAssign(b, c) - addAssign(b, a0) - if !a.equal(b) { - t.Fatal("(a + b) + c == (b + c) + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - _, _ = c.rand(rand.Reader) - a0.set(a) - subAssign(a, b) - subAssign(a, c) - subAssign(a0, c) - subAssign(a0, b) - if !a.equal(a0) { - t.Fatal("(a - b) - c == (a - c) -b") - } - } -} - -func TestFpLazyOperations(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, _ := new(fe).rand(rand.Reader) - c, _ := new(fe).rand(rand.Reader) - c0 := new(fe) - c1 := new(fe) - ladd(c0, a, b) - add(c1, a, b) - mul(c0, c0, c) - mul(c1, c1, c) - if !c0.equal(c1) { - // l+ operator stands for lazy addition - t.Fatal("(a + b) * c == (a l+ b) * c") - } - _, _ = a.rand(rand.Reader) - b.set(a) - ldouble(a, a) - ladd(b, b, b) - if !a.equal(b) { - t.Fatal("2 l* a = a l+ a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - _, _ = c.rand(rand.Reader) - a0 := new(fe).set(a) - lsubAssign(a, b) - laddAssign(a, &modulus) - mul(a, a, c) - subAssign(a0, b) - mul(a0, a0, c) - if !a.equal(a0) { - t.Fatal("((a l- b) + p) * c = (a-b) * c") - } - } -} - -func TestFpMultiplicationCrossAgainstBigInt(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, _ := new(fe).rand(rand.Reader) - c := new(fe) - big_a := toBig(a) - big_b := toBig(b) - big_c := new(big.Int) - mul(c, a, b) - out_1 := toBytes(c) - out_2 := padBytes(big_c.Mul(big_a, big_b).Mod(big_c, modulus.big()).Bytes(), 48) - if !bytes.Equal(out_1, out_2) { - t.Fatal("cross test against big.Int is not satisfied") - } - } -} - -func TestFpMultiplicationProperties(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - b, _ := new(fe).rand(rand.Reader) - zero, one := new(fe).zero(), new(fe).one() - c_1, c_2 := new(fe), new(fe) - mul(c_1, a, zero) - if !c_1.equal(zero) { - t.Fatal("a * 0 == 0") - } - mul(c_1, a, one) - if !c_1.equal(a) { - t.Fatal("a * 1 == a") - } - mul(c_1, a, b) - mul(c_2, b, a) - if !c_1.equal(c_2) { - t.Fatal("a * b == b * a") - } - c_x, _ := new(fe).rand(rand.Reader) - mul(c_1, a, b) - mul(c_1, c_1, c_x) - mul(c_2, c_x, b) - mul(c_2, c_2, a) - if !c_1.equal(c_2) { - t.Fatal("(a * b) * c == (a * c) * b") - } - square(a, zero) - if !a.equal(zero) { - t.Fatal("0^2 == 0") - } - square(a, one) - if !a.equal(one) { - t.Fatal("1^2 == 1") - } - _, _ = a.rand(rand.Reader) - square(c_1, a) - mul(c_2, a, a) - if !c_1.equal(c_1) { - t.Fatal("a^2 == a*a") - } - } -} - -func TestFpExponentiation(t *testing.T) { - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - u := new(fe) - exp(u, a, big.NewInt(0)) - if !u.isOne() { - t.Fatal("a^0 == 1") - } - exp(u, a, big.NewInt(1)) - if !u.equal(a) { - t.Fatal("a^1 == a") - } - v := new(fe) - mul(u, a, a) - mul(u, u, u) - mul(u, u, u) - exp(v, a, big.NewInt(8)) - if !u.equal(v) { - t.Fatal("((a^2)^2)^2 == a^8") - } - p := modulus.big() - exp(u, a, p) - if !u.equal(a) { - t.Fatal("a^p == a") - } - exp(u, a, p.Sub(p, big.NewInt(1))) - if !u.isOne() { - t.Fatal("a^(p-1) == 1") - } - } -} - -func TestFpInversion(t *testing.T) { - for i := 0; i < fuz; i++ { - u := new(fe) - zero, one := new(fe).zero(), new(fe).one() - inverse(u, zero) - if !u.equal(zero) { - t.Fatal("(0^-1) == 0)") - } - inverse(u, one) - if !u.equal(one) { - t.Fatal("(1^-1) == 1)") - } - a, _ := new(fe).rand(rand.Reader) - inverse(u, a) - mul(u, u, a) - if !u.equal(one) { - t.Fatal("(r*a) * r*(a^-1) == r)") - } - v := new(fe) - p := modulus.big() - exp(u, a, p.Sub(p, big.NewInt(2))) - inverse(v, a) - if !v.equal(u) { - t.Fatal("a^(p-2) == a^-1") - } - } -} - -func TestFpSquareRoot(t *testing.T) { - r := new(fe) - if sqrt(r, nonResidue1) { - t.Fatal("non residue cannot have a sqrt") - } - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - aa, rr, r := &fe{}, &fe{}, &fe{} - square(aa, a) - if !sqrt(r, aa) { - t.Fatal("bad sqrt 1") - } - square(rr, r) - if !rr.equal(aa) { - t.Fatal("bad sqrt 2") - } - } -} - -func TestFpNonResidue(t *testing.T) { - if !isQuadraticNonResidue(nonResidue1) { - t.Fatal("element is quadratic non residue, 1") - } - if isQuadraticNonResidue(new(fe).one()) { - t.Fatal("one is not quadratic non residue") - } - if !isQuadraticNonResidue(new(fe).zero()) { - t.Fatal("should accept zero as quadratic non residue") - } - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - square(a, a) - if isQuadraticNonResidue(new(fe).one()) { - t.Fatal("element is not quadratic non residue") - } - } - for i := 0; i < fuz; i++ { - a, _ := new(fe).rand(rand.Reader) - if !sqrt(new(fe), a) { - if !isQuadraticNonResidue(a) { - t.Fatal("element is quadratic non residue, 2", i) - } - } else { - i-- - } - } - -} - -func TestFp2Serialization(t *testing.T) { - field := newFp2() - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - b, err := field.fromBytes(field.toBytes(a)) - if err != nil { - t.Fatal(err) - } - if !a.equal(b) { - t.Fatal("bad serialization") - } - } -} - -func TestFp2AdditionProperties(t *testing.T) { - field := newFp2() - for i := 0; i < fuz; i++ { - zero := field.zero() - a, _ := new(fe2).rand(rand.Reader) - b, _ := new(fe2).rand(rand.Reader) - c_1 := field.new() - c_2 := field.new() - field.add(c_1, a, zero) - if !c_1.equal(a) { - t.Fatal("a + 0 == a") - } - field.sub(c_1, a, zero) - if !c_1.equal(a) { - t.Fatal("a - 0 == a") - } - field.double(c_1, zero) - if !c_1.equal(zero) { - t.Fatal("2 * 0 == 0") - } - field.neg(c_1, zero) - if !c_1.equal(zero) { - t.Fatal("-0 == 0") - } - field.sub(c_1, zero, a) - field.neg(c_2, a) - if !c_1.equal(c_2) { - t.Fatal("0-a == -a") - } - field.double(c_1, a) - field.add(c_2, a, a) - if !c_1.equal(c_2) { - t.Fatal("2 * a == a + a") - } - field.add(c_1, a, b) - field.add(c_2, b, a) - if !c_1.equal(c_2) { - t.Fatal("a + b = b + a") - } - field.sub(c_1, a, b) - field.sub(c_2, b, a) - field.neg(c_2, c_2) - if !c_1.equal(c_2) { - t.Fatal("a - b = - ( b - a )") - } - c_x, _ := new(fe2).rand(rand.Reader) - field.add(c_1, a, b) - field.add(c_1, c_1, c_x) - field.add(c_2, a, c_x) - field.add(c_2, c_2, b) - if !c_1.equal(c_2) { - t.Fatal("(a + b) + c == (a + c ) + b") - } - field.sub(c_1, a, b) - field.sub(c_1, c_1, c_x) - field.sub(c_2, a, c_x) - field.sub(c_2, c_2, b) - if !c_1.equal(c_2) { - t.Fatal("(a - b) - c == (a - c ) -b") - } - } -} - -func TestFp2AdditionPropertiesAssigned(t *testing.T) { - field := newFp2() - for i := 0; i < fuz; i++ { - zero := new(fe2).zero() - a, b := new(fe2), new(fe2) - _, _ = a.rand(rand.Reader) - b.set(a) - field.addAssign(a, zero) - if !a.equal(b) { - t.Fatal("a + 0 == a") - } - field.subAssign(a, zero) - if !a.equal(b) { - t.Fatal("a - 0 == a") - } - a.set(zero) - field.doubleAssign(a) - if !a.equal(zero) { - t.Fatal("2 * 0 == 0") - } - a.set(zero) - field.subAssign(a, b) - field.neg(b, b) - if !a.equal(b) { - t.Fatal("0-a == -a") - } - _, _ = a.rand(rand.Reader) - b.set(a) - field.doubleAssign(a) - field.addAssign(b, b) - if !a.equal(b) { - t.Fatal("2 * a == a + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c_1, c_2 := new(fe2).set(a), new(fe2).set(b) - field.addAssign(c_1, b) - field.addAssign(c_2, a) - if !c_1.equal(c_2) { - t.Fatal("a + b = b + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c_1.set(a) - c_2.set(b) - field.subAssign(c_1, b) - field.subAssign(c_2, a) - field.neg(c_2, c_2) - if !c_1.equal(c_2) { - t.Fatal("a - b = - ( b - a )") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c, _ := new(fe2).rand(rand.Reader) - a0 := new(fe2).set(a) - field.addAssign(a, b) - field.addAssign(a, c) - field.addAssign(b, c) - field.addAssign(b, a0) - if !a.equal(b) { - t.Fatal("(a + b) + c == (b + c) + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - _, _ = c.rand(rand.Reader) - a0.set(a) - field.subAssign(a, b) - field.subAssign(a, c) - field.subAssign(a0, c) - field.subAssign(a0, b) - if !a.equal(a0) { - t.Fatal("(a - b) - c == (a - c) -b") - } - } -} - -func TestFp2LazyOperations(t *testing.T) { - field := newFp2() - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - b, _ := new(fe2).rand(rand.Reader) - c, _ := new(fe2).rand(rand.Reader) - c0 := new(fe2) - c1 := new(fe2) - field.ladd(c0, a, b) - field.add(c1, a, b) - field.mulAssign(c0, c) - field.mulAssign(c1, c) - if !c0.equal(c1) { - // l+ operator stands for lazy addition - t.Fatal("(a + b) * c == (a l+ b) * c") - } - _, _ = a.rand(rand.Reader) - b.set(a) - field.ldouble(a, a) - field.ladd(b, b, b) - if !a.equal(b) { - t.Fatal("2 l* a = a l+ a") - } - } -} - -func TestFp2MultiplicationProperties(t *testing.T) { - field := newFp2() - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - b, _ := new(fe2).rand(rand.Reader) - zero := field.zero() - one := field.one() - c_1, c_2 := field.new(), field.new() - field.mul(c_1, a, zero) - if !c_1.equal(zero) { - t.Fatal("a * 0 == 0") - } - field.mul(c_1, a, one) - if !c_1.equal(a) { - t.Fatal("a * 1 == a") - } - field.mul(c_1, a, b) - field.mul(c_2, b, a) - if !c_1.equal(c_2) { - t.Fatal("a * b == b * a") - } - c_x, _ := new(fe2).rand(rand.Reader) - field.mul(c_1, a, b) - field.mul(c_1, c_1, c_x) - field.mul(c_2, c_x, b) - field.mul(c_2, c_2, a) - if !c_1.equal(c_2) { - t.Fatal("(a * b) * c == (a * c) * b") - } - field.square(a, zero) - if !a.equal(zero) { - t.Fatal("0^2 == 0") - } - field.square(a, one) - if !a.equal(one) { - t.Fatal("1^2 == 1") - } - _, _ = a.rand(rand.Reader) - field.square(c_1, a) - field.mul(c_2, a, a) - if !c_2.equal(c_1) { - t.Fatal("a^2 == a*a") - } - } -} - -func TestFp2MultiplicationPropertiesAssigned(t *testing.T) { - field := newFp2() - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - zero, one := new(fe2).zero(), new(fe2).one() - field.mulAssign(a, zero) - if !a.equal(zero) { - t.Fatal("a * 0 == 0") - } - _, _ = a.rand(rand.Reader) - a0 := new(fe2).set(a) - field.mulAssign(a, one) - if !a.equal(a0) { - t.Fatal("a * 1 == a") - } - _, _ = a.rand(rand.Reader) - b, _ := new(fe2).rand(rand.Reader) - a0.set(a) - field.mulAssign(a, b) - field.mulAssign(b, a0) - if !a.equal(b) { - t.Fatal("a * b == b * a") - } - c, _ := new(fe2).rand(rand.Reader) - a0.set(a) - field.mulAssign(a, b) - field.mulAssign(a, c) - field.mulAssign(a0, c) - field.mulAssign(a0, b) - if !a.equal(a0) { - t.Fatal("(a * b) * c == (a * c) * b") - } - a0.set(a) - field.squareAssign(a) - field.mulAssign(a0, a0) - if !a.equal(a0) { - t.Fatal("a^2 == a*a") - } - } -} - -func TestFp2Exponentiation(t *testing.T) { - field := newFp2() - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - u := field.new() - field.exp(u, a, big.NewInt(0)) - if !u.equal(field.one()) { - t.Fatal("a^0 == 1") - } - field.exp(u, a, big.NewInt(1)) - if !u.equal(a) { - t.Fatal("a^1 == a") - } - v := field.new() - field.mul(u, a, a) - field.mul(u, u, u) - field.mul(u, u, u) - field.exp(v, a, big.NewInt(8)) - if !u.equal(v) { - t.Fatal("((a^2)^2)^2 == a^8") - } - } -} - -func TestFp2Inversion(t *testing.T) { - field := newFp2() - u := field.new() - zero := field.zero() - one := field.one() - field.inverse(u, zero) - if !u.equal(zero) { - t.Fatal("(0 ^ -1) == 0)") - } - field.inverse(u, one) - if !u.equal(one) { - t.Fatal("(1 ^ -1) == 1)") - } - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - field.inverse(u, a) - field.mul(u, u, a) - if !u.equal(one) { - t.Fatal("(r * a) * r * (a ^ -1) == r)") - } - } -} - -func TestFp2SquareRoot(t *testing.T) { - field := newFp2() - for z := 0; z < 1000; z++ { - zi := new(fe) - sub(zi, &modulus, &fe{uint64(z * z)}) - // r = (-z*z, 0) - r := &fe2{*zi, fe{0}} - toMont(&r[0], &r[0]) - toMont(&r[1], &r[1]) - c := field.new() - // sqrt((-z*z, 0)) = (0, z) - if !field.sqrt(c, r) { - t.Fatal("z*z does have a square root") - } - e := &fe2{fe{uint64(0)}, fe{uint64(z)}} - toMont(&e[0], &e[0]) - toMont(&e[1], &e[1]) - field.square(e, e) - field.square(c, c) - if !e.equal(c) { - t.Fatal("square root failed") - } - } - if field.sqrt(field.new(), nonResidue2) { - t.Fatal("non residue cannot have a sqrt") - } - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - aa, rr, r := field.new(), field.new(), field.new() - field.square(aa, a) - if !field.sqrt(r, aa) { - t.Fatal("bad sqrt 1") - } - field.square(rr, r) - if !rr.equal(aa) { - t.Fatal("bad sqrt 2") - } - } -} - -func TestFp2NonResidue(t *testing.T) { - field := newFp2() - if !field.isQuadraticNonResidue(nonResidue2) { - t.Fatal("element is quadratic non residue, 1") - } - if field.isQuadraticNonResidue(new(fe2).one()) { - t.Fatal("one is not quadratic non residue") - } - if !field.isQuadraticNonResidue(new(fe2).zero()) { - t.Fatal("should accept zero as quadratic non residue") - } - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - field.squareAssign(a) - if field.isQuadraticNonResidue(new(fe2).one()) { - t.Fatal("element is not quadratic non residue") - } - } - for i := 0; i < fuz; i++ { - a, _ := new(fe2).rand(rand.Reader) - if !field.sqrt(new(fe2), a) { - if !field.isQuadraticNonResidue(a) { - t.Fatal("element is quadratic non residue, 2", i) - } - } else { - i-- - } - } -} - -func TestFp6Serialization(t *testing.T) { - field := newFp6(nil) - for i := 0; i < fuz; i++ { - a, _ := new(fe6).rand(rand.Reader) - b, err := field.fromBytes(field.toBytes(a)) - if err != nil { - t.Fatal(err) - } - if !a.equal(b) { - t.Fatal("bad serialization") - } - } -} - -func TestFp6AdditionProperties(t *testing.T) { - field := newFp6(nil) - for i := 0; i < fuz; i++ { - zero := field.zero() - a, _ := new(fe6).rand(rand.Reader) - b, _ := new(fe6).rand(rand.Reader) - c_1 := field.new() - c_2 := field.new() - field.add(c_1, a, zero) - if !c_1.equal(a) { - t.Fatal("a + 0 == a") - } - field.sub(c_1, a, zero) - if !c_1.equal(a) { - t.Fatal("a - 0 == a") - } - field.double(c_1, zero) - if !c_1.equal(zero) { - t.Fatal("2 * 0 == 0") - } - field.neg(c_1, zero) - if !c_1.equal(zero) { - t.Fatal("-0 == 0") - } - field.sub(c_1, zero, a) - field.neg(c_2, a) - if !c_1.equal(c_2) { - t.Fatal("0-a == -a") - } - field.double(c_1, a) - field.add(c_2, a, a) - if !c_1.equal(c_2) { - t.Fatal("2 * a == a + a") - } - field.add(c_1, a, b) - field.add(c_2, b, a) - if !c_1.equal(c_2) { - t.Fatal("a + b = b + a") - } - field.sub(c_1, a, b) - field.sub(c_2, b, a) - field.neg(c_2, c_2) - if !c_1.equal(c_2) { - t.Fatal("a - b = - ( b - a )") - } - c_x, _ := new(fe6).rand(rand.Reader) - field.add(c_1, a, b) - field.add(c_1, c_1, c_x) - field.add(c_2, a, c_x) - field.add(c_2, c_2, b) - if !c_1.equal(c_2) { - t.Fatal("(a + b) + c == (a + c ) + b") - } - field.sub(c_1, a, b) - field.sub(c_1, c_1, c_x) - field.sub(c_2, a, c_x) - field.sub(c_2, c_2, b) - if !c_1.equal(c_2) { - t.Fatal("(a - b) - c == (a - c ) -b") - } - } -} - -func TestFp6AdditionPropertiesAssigned(t *testing.T) { - field := newFp6(nil) - for i := 0; i < fuz; i++ { - zero := new(fe6).zero() - a, b := new(fe6), new(fe6) - _, _ = a.rand(rand.Reader) - b.set(a) - field.addAssign(a, zero) - if !a.equal(b) { - t.Fatal("a + 0 == a") - } - field.subAssign(a, zero) - if !a.equal(b) { - t.Fatal("a - 0 == a") - } - a.set(zero) - field.doubleAssign(a) - if !a.equal(zero) { - t.Fatal("2 * 0 == 0") - } - a.set(zero) - field.subAssign(a, b) - field.neg(b, b) - if !a.equal(b) { - t.Fatal("0-a == -a") - } - _, _ = a.rand(rand.Reader) - b.set(a) - field.doubleAssign(a) - field.addAssign(b, b) - if !a.equal(b) { - t.Fatal("2 * a == a + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c_1, c_2 := new(fe6).set(a), new(fe6).set(b) - field.addAssign(c_1, b) - field.addAssign(c_2, a) - if !c_1.equal(c_2) { - t.Fatal("a + b = b + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c_1.set(a) - c_2.set(b) - field.subAssign(c_1, b) - field.subAssign(c_2, a) - field.neg(c_2, c_2) - if !c_1.equal(c_2) { - t.Fatal("a - b = - ( b - a )") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - c, _ := new(fe6).rand(rand.Reader) - a0 := new(fe6).set(a) - field.addAssign(a, b) - field.addAssign(a, c) - field.addAssign(b, c) - field.addAssign(b, a0) - if !a.equal(b) { - t.Fatal("(a + b) + c == (b + c) + a") - } - _, _ = a.rand(rand.Reader) - _, _ = b.rand(rand.Reader) - _, _ = c.rand(rand.Reader) - a0.set(a) - field.subAssign(a, b) - field.subAssign(a, c) - field.subAssign(a0, c) - field.subAssign(a0, b) - if !a.equal(a0) { - t.Fatal("(a - b) - c == (a - c) -b") - } - } -} - -func TestFp6SparseMultiplication(t *testing.T) { - fp6 := newFp6(nil) - var a, b, u *fe6 - for j := 0; j < fuz; j++ { - a, _ = new(fe6).rand(rand.Reader) - b, _ = new(fe6).rand(rand.Reader) - u, _ = new(fe6).rand(rand.Reader) - b[2].zero() - fp6.mul(u, a, b) - fp6.mulBy01(a, a, &b[0], &b[1]) - if !a.equal(u) { - t.Fatal("bad mul by 01") - } - } - for j := 0; j < fuz; j++ { - a, _ = new(fe6).rand(rand.Reader) - b, _ = new(fe6).rand(rand.Reader) - u, _ = new(fe6).rand(rand.Reader) - b[2].zero() - b[0].zero() - fp6.mul(u, a, b) - fp6.mulBy1(a, a, &b[1]) - if !a.equal(u) { - t.Fatal("bad mul by 1") - } - } -} - -func TestFp6MultiplicationProperties(t *testing.T) { - field := newFp6(nil) - for i := 0; i < fuz; i++ { - a, _ := new(fe6).rand(rand.Reader) - b, _ := new(fe6).rand(rand.Reader) - zero := field.zero() - one := field.one() - c_1, c_2 := field.new(), field.new() - field.mul(c_1, a, zero) - if !c_1.equal(zero) { - t.Fatal("a * 0 == 0") - } - field.mul(c_1, a, one) - if !c_1.equal(a) { - t.Fatal("a * 1 == a") - } - field.mul(c_1, a, b) - field.mul(c_2, b, a) - if !c_1.equal(c_2) { - t.Fatal("a * b == b * a") - } - c_x, _ := new(fe6).rand(rand.Reader) - field.mul(c_1, a, b) - field.mul(c_1, c_1, c_x) - field.mul(c_2, c_x, b) - field.mul(c_2, c_2, a) - if !c_1.equal(c_2) { - t.Fatal("(a * b) * c == (a * c) * b") - } - field.square(a, zero) - if !a.equal(zero) { - t.Fatal("0^2 == 0") - } - field.square(a, one) - if !a.equal(one) { - t.Fatal("1^2 == 1") - } - _, _ = a.rand(rand.Reader) - field.square(c_1, a) - field.mul(c_2, a, a) - if !c_2.equal(c_1) { - t.Fatal("a^2 == a*a") - } - } -} - -func TestFp6MultiplicationPropertiesAssigned(t *testing.T) { - field := newFp6(nil) - for i := 0; i < fuz; i++ { - a, _ := new(fe6).rand(rand.Reader) - zero, one := new(fe6).zero(), new(fe6).one() - field.mulAssign(a, zero) - if !a.equal(zero) { - t.Fatal("a * 0 == 0") - } - _, _ = a.rand(rand.Reader) - a0 := new(fe6).set(a) - field.mulAssign(a, one) - if !a.equal(a0) { - t.Fatal("a * 1 == a") - } - _, _ = a.rand(rand.Reader) - b, _ := new(fe6).rand(rand.Reader) - a0.set(a) - field.mulAssign(a, b) - field.mulAssign(b, a0) - if !a.equal(b) { - t.Fatal("a * b == b * a") - } - c, _ := new(fe6).rand(rand.Reader) - a0.set(a) - field.mulAssign(a, b) - field.mulAssign(a, c) - field.mulAssign(a0, c) - field.mulAssign(a0, b) - if !a.equal(a0) { - t.Fatal("(a * b) * c == (a * c) * b") - } - } -} - -func TestFp6Exponentiation(t *testing.T) { - field := newFp6(nil) - for i := 0; i < fuz; i++ { - a, _ := new(fe6).rand(rand.Reader) - u := field.new() - field.exp(u, a, big.NewInt(0)) - if !u.equal(field.one()) { - t.Fatal("a^0 == 1") - } - field.exp(u, a, big.NewInt(1)) - if !u.equal(a) { - t.Fatal("a^1 == a") - } - v := field.new() - field.mul(u, a, a) - field.mul(u, u, u) - field.mul(u, u, u) - field.exp(v, a, big.NewInt(8)) - if !u.equal(v) { - t.Fatal("((a^2)^2)^2 == a^8") - } - } -} - -func TestFp6Inversion(t *testing.T) { - field := newFp6(nil) - for i := 0; i < fuz; i++ { - u := field.new() - zero := field.zero() - one := field.one() - field.inverse(u, zero) - if !u.equal(zero) { - t.Fatal("(0^-1) == 0)") - } - field.inverse(u, one) - if !u.equal(one) { - t.Fatal("(1^-1) == 1)") - } - a, _ := new(fe6).rand(rand.Reader) - field.inverse(u, a) - field.mul(u, u, a) - if !u.equal(one) { - t.Fatal("(r*a) * r*(a^-1) == r)") - } - } -} - -func TestFp12Serialization(t *testing.T) { - field := newFp12(nil) - for i := 0; i < fuz; i++ { - a, _ := new(fe12).rand(rand.Reader) - b, err := field.fromBytes(field.toBytes(a)) - if err != nil { - t.Fatal(err) - } - if !a.equal(b) { - t.Fatal("bad serialization") - } - } -} - -func TestFp12AdditionProperties(t *testing.T) { - field := newFp12(nil) - for i := 0; i < fuz; i++ { - zero := field.zero() - a, _ := new(fe12).rand(rand.Reader) - b, _ := new(fe12).rand(rand.Reader) - c_1 := field.new() - c_2 := field.new() - field.add(c_1, a, zero) - if !c_1.equal(a) { - t.Fatal("a + 0 == a") - } - field.sub(c_1, a, zero) - if !c_1.equal(a) { - t.Fatal("a - 0 == a") - } - field.double(c_1, zero) - if !c_1.equal(zero) { - t.Fatal("2 * 0 == 0") - } - field.neg(c_1, zero) - if !c_1.equal(zero) { - t.Fatal("-0 == 0") - } - field.sub(c_1, zero, a) - field.neg(c_2, a) - if !c_1.equal(c_2) { - t.Fatal("0-a == -a") - } - field.double(c_1, a) - field.add(c_2, a, a) - if !c_1.equal(c_2) { - t.Fatal("2 * a == a + a") - } - field.add(c_1, a, b) - field.add(c_2, b, a) - if !c_1.equal(c_2) { - t.Fatal("a + b = b + a") - } - field.sub(c_1, a, b) - field.sub(c_2, b, a) - field.neg(c_2, c_2) - if !c_1.equal(c_2) { - t.Fatal("a - b = - ( b - a )") - } - c_x, _ := new(fe12).rand(rand.Reader) - field.add(c_1, a, b) - field.add(c_1, c_1, c_x) - field.add(c_2, a, c_x) - field.add(c_2, c_2, b) - if !c_1.equal(c_2) { - t.Fatal("(a + b) + c == (a + c ) + b") - } - field.sub(c_1, a, b) - field.sub(c_1, c_1, c_x) - field.sub(c_2, a, c_x) - field.sub(c_2, c_2, b) - if !c_1.equal(c_2) { - t.Fatal("(a - b) - c == (a - c ) -b") - } - } -} - -func TestFp12MultiplicationProperties(t *testing.T) { - field := newFp12(nil) - for i := 0; i < fuz; i++ { - a, _ := new(fe12).rand(rand.Reader) - b, _ := new(fe12).rand(rand.Reader) - zero := field.zero() - one := field.one() - c_1, c_2 := field.new(), field.new() - field.mul(c_1, a, zero) - if !c_1.equal(zero) { - t.Fatal("a * 0 == 0") - } - field.mul(c_1, a, one) - if !c_1.equal(a) { - t.Fatal("a * 1 == a") - } - field.mul(c_1, a, b) - field.mul(c_2, b, a) - if !c_1.equal(c_2) { - t.Fatal("a * b == b * a") - } - c_x, _ := new(fe12).rand(rand.Reader) - field.mul(c_1, a, b) - field.mul(c_1, c_1, c_x) - field.mul(c_2, c_x, b) - field.mul(c_2, c_2, a) - if !c_1.equal(c_2) { - t.Fatal("(a * b) * c == (a * c) * b") - } - field.square(a, zero) - if !a.equal(zero) { - t.Fatal("0^2 == 0") - } - field.square(a, one) - if !a.equal(one) { - t.Fatal("1^2 == 1") - } - _, _ = a.rand(rand.Reader) - field.square(c_1, a) - field.mul(c_2, a, a) - if !c_2.equal(c_1) { - t.Fatal("a^2 == a*a") - } - } -} - -func TestFp12MultiplicationPropertiesAssigned(t *testing.T) { - field := newFp12(nil) - for i := 0; i < fuz; i++ { - a, _ := new(fe12).rand(rand.Reader) - zero, one := new(fe12).zero(), new(fe12).one() - field.mulAssign(a, zero) - if !a.equal(zero) { - t.Fatal("a * 0 == 0") - } - _, _ = a.rand(rand.Reader) - a0 := new(fe12).set(a) - field.mulAssign(a, one) - if !a.equal(a0) { - t.Fatal("a * 1 == a") - } - _, _ = a.rand(rand.Reader) - b, _ := new(fe12).rand(rand.Reader) - a0.set(a) - field.mulAssign(a, b) - field.mulAssign(b, a0) - if !a.equal(b) { - t.Fatal("a * b == b * a") - } - c, _ := new(fe12).rand(rand.Reader) - a0.set(a) - field.mulAssign(a, b) - field.mulAssign(a, c) - field.mulAssign(a0, c) - field.mulAssign(a0, b) - if !a.equal(a0) { - t.Fatal("(a * b) * c == (a * c) * b") - } - } -} - -func TestFp12SparseMultiplication(t *testing.T) { - fp12 := newFp12(nil) - var a, b, u *fe12 - for j := 0; j < fuz; j++ { - a, _ = new(fe12).rand(rand.Reader) - b, _ = new(fe12).rand(rand.Reader) - u, _ = new(fe12).rand(rand.Reader) - b[0][2].zero() - b[1][0].zero() - b[1][2].zero() - fp12.mul(u, a, b) - fp12.mulBy014Assign(a, &b[0][0], &b[0][1], &b[1][1]) - if !a.equal(u) { - t.Fatal("bad mul by 01") - } - } -} - -func TestFp12Exponentiation(t *testing.T) { - field := newFp12(nil) - for i := 0; i < fuz; i++ { - a, _ := new(fe12).rand(rand.Reader) - u := field.new() - field.exp(u, a, big.NewInt(0)) - if !u.equal(field.one()) { - t.Fatal("a^0 == 1") - } - field.exp(u, a, big.NewInt(1)) - if !u.equal(a) { - t.Fatal("a^1 == a") - } - v := field.new() - field.mul(u, a, a) - field.mul(u, u, u) - field.mul(u, u, u) - field.exp(v, a, big.NewInt(8)) - if !u.equal(v) { - t.Fatal("((a^2)^2)^2 == a^8") - } - } -} - -func TestFp12Inversion(t *testing.T) { - field := newFp12(nil) - for i := 0; i < fuz; i++ { - u := field.new() - zero := field.zero() - one := field.one() - field.inverse(u, zero) - if !u.equal(zero) { - t.Fatal("(0^-1) == 0)") - } - field.inverse(u, one) - if !u.equal(one) { - t.Fatal("(1^-1) == 1)") - } - a, _ := new(fe12).rand(rand.Reader) - field.inverse(u, a) - field.mul(u, u, a) - if !u.equal(one) { - t.Fatal("(r*a) * r*(a^-1) == r)") - } - } -} - -func BenchmarkMultiplication(t *testing.B) { - a, _ := new(fe).rand(rand.Reader) - b, _ := new(fe).rand(rand.Reader) - c, _ := new(fe).rand(rand.Reader) - t.ResetTimer() - for i := 0; i < t.N; i++ { - mul(c, a, b) - } -} - -func BenchmarkInverse(t *testing.B) { - a, _ := new(fe).rand(rand.Reader) - b, _ := new(fe).rand(rand.Reader) - t.ResetTimer() - for i := 0; i < t.N; i++ { - inverse(a, b) - } -} - -func padBytes(in []byte, size int) []byte { - out := make([]byte, size) - if len(in) > size { - panic("bad input for padding") - } - copy(out[size-len(in):], in) - return out -} diff --git a/crypto/bls12381/g1.go b/crypto/bls12381/g1.go deleted file mode 100644 index cd6c71b0ce4..00000000000 --- a/crypto/bls12381/g1.go +++ /dev/null @@ -1,435 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//nolint:golint -package bls12381 - -import ( - "errors" - "math" - "math/big" -) - -// PointG1 is type for point in G1. -// PointG1 is both used for Affine and Jacobian point representation. -// If z is equal to one the point is considered as in affine form. -type PointG1 [3]fe - -func (p *PointG1) Set(p2 *PointG1) *PointG1 { - p[0].set(&p2[0]) - p[1].set(&p2[1]) - p[2].set(&p2[2]) - return p -} - -// Zero returns G1 point in point at infinity representation -func (p *PointG1) Zero() *PointG1 { - p[0].zero() - p[1].one() - p[2].zero() - return p -} - -type tempG1 struct { - t [9]*fe -} - -// G1 is struct for G1 group. -type G1 struct { - tempG1 -} - -// NewG1 constructs a new G1 instance. -func NewG1() *G1 { - t := newTempG1() - return &G1{t} -} - -func newTempG1() tempG1 { - t := [9]*fe{} - for i := 0; i < 9; i++ { - t[i] = &fe{} - } - return tempG1{t} -} - -// Q returns group order in big.Int. -func (g *G1) Q() *big.Int { - return new(big.Int).Set(q) -} - -func (g *G1) fromBytesUnchecked(in []byte) (*PointG1, error) { - p0, err := fromBytes(in[:48]) - if err != nil { - return nil, err - } - p1, err := fromBytes(in[48:]) - if err != nil { - return nil, err - } - p2 := new(fe).one() - return &PointG1{*p0, *p1, *p2}, nil -} - -// FromBytes constructs a new point given uncompressed byte input. -// FromBytes does not take zcash flags into account. -// Byte input expected to be larger than 96 bytes. -// First 96 bytes should be concatenation of x and y values. -// Point (0, 0) is considered as infinity. -func (g *G1) FromBytes(in []byte) (*PointG1, error) { - if len(in) != 96 { - return nil, errors.New("input string should be equal or larger than 96") - } - p0, err := fromBytes(in[:48]) - if err != nil { - return nil, err - } - p1, err := fromBytes(in[48:]) - if err != nil { - return nil, err - } - // check if given input points to infinity - if p0.isZero() && p1.isZero() { - return g.Zero(), nil - } - p2 := new(fe).one() - p := &PointG1{*p0, *p1, *p2} - if !g.IsOnCurve(p) { - return nil, errors.New("point is not on curve") - } - return p, nil -} - -// DecodePoint given encoded (x, y) coordinates in 128 bytes returns a valid G1 Point. -func (g *G1) DecodePoint(in []byte) (*PointG1, error) { - if len(in) != 128 { - return nil, errors.New("invalid g1 point length") - } - pointBytes := make([]byte, 96) - // decode x - xBytes, err := decodeFieldElement(in[:64]) - if err != nil { - return nil, err - } - // decode y - yBytes, err := decodeFieldElement(in[64:]) - if err != nil { - return nil, err - } - copy(pointBytes[:48], xBytes) - copy(pointBytes[48:], yBytes) - return g.FromBytes(pointBytes) -} - -// ToBytes serializes a point into bytes in uncompressed form. -// ToBytes does not take zcash flags into account. -// ToBytes returns (0, 0) if point is infinity. -func (g *G1) ToBytes(p *PointG1) []byte { - out := make([]byte, 96) - if g.IsZero(p) { - return out - } - g.Affine(p) - copy(out[:48], toBytes(&p[0])) - copy(out[48:], toBytes(&p[1])) - return out -} - -// EncodePoint encodes a point into 128 bytes. -func (g *G1) EncodePoint(p *PointG1) []byte { - outRaw := g.ToBytes(p) - out := make([]byte, 128) - // encode x - copy(out[16:], outRaw[:48]) - // encode y - copy(out[64+16:], outRaw[48:]) - return out -} - -// New creates a new G1 Point which is equal to zero in other words point at infinity. -func (g *G1) New() *PointG1 { - return g.Zero() -} - -// Zero returns a new G1 Point which is equal to point at infinity. -func (g *G1) Zero() *PointG1 { - return new(PointG1).Zero() -} - -// One returns a new G1 Point which is equal to generator point. -func (g *G1) One() *PointG1 { - p := &PointG1{} - return p.Set(&g1One) -} - -// IsZero returns true if given point is equal to zero. -func (g *G1) IsZero(p *PointG1) bool { - return p[2].isZero() -} - -// Equal checks if given two G1 point is equal in their affine form. -func (g *G1) Equal(p1, p2 *PointG1) bool { - if g.IsZero(p1) { - return g.IsZero(p2) - } - if g.IsZero(p2) { - return g.IsZero(p1) - } - t := g.t - square(t[0], &p1[2]) - square(t[1], &p2[2]) - mul(t[2], t[0], &p2[0]) - mul(t[3], t[1], &p1[0]) - mul(t[0], t[0], &p1[2]) - mul(t[1], t[1], &p2[2]) - mul(t[1], t[1], &p1[1]) - mul(t[0], t[0], &p2[1]) - return t[0].equal(t[1]) && t[2].equal(t[3]) -} - -// InCorrectSubgroup checks whether given point is in correct subgroup. -func (g *G1) InCorrectSubgroup(p *PointG1) bool { - tmp := &PointG1{} - g.MulScalar(tmp, p, q) - return g.IsZero(tmp) -} - -// IsOnCurve checks a G1 point is on curve. -func (g *G1) IsOnCurve(p *PointG1) bool { - if g.IsZero(p) { - return true - } - t := g.t - square(t[0], &p[1]) - square(t[1], &p[0]) - mul(t[1], t[1], &p[0]) - square(t[2], &p[2]) - square(t[3], t[2]) - mul(t[2], t[2], t[3]) - mul(t[2], b, t[2]) - add(t[1], t[1], t[2]) - return t[0].equal(t[1]) -} - -// IsAffine checks a G1 point whether it is in affine form. -func (g *G1) IsAffine(p *PointG1) bool { - return p[2].isOne() -} - -// Add adds two G1 points p1, p2 and assigns the result to point at first argument. -func (g *G1) Affine(p *PointG1) *PointG1 { - if g.IsZero(p) { - return p - } - if !g.IsAffine(p) { - t := g.t - inverse(t[0], &p[2]) - square(t[1], t[0]) - mul(&p[0], &p[0], t[1]) - mul(t[0], t[0], t[1]) - mul(&p[1], &p[1], t[0]) - p[2].one() - } - return p -} - -// Add adds two G1 points p1, p2 and assigns the result to point at first argument. -func (g *G1) Add(r, p1, p2 *PointG1) *PointG1 { - // http://www.hyperelliptic.org/EFD/gp/auto-shortw-jacobian-0.html#addition-add-2007-bl - if g.IsZero(p1) { - return r.Set(p2) - } - if g.IsZero(p2) { - return r.Set(p1) - } - t := g.t - square(t[7], &p1[2]) - mul(t[1], &p2[0], t[7]) - mul(t[2], &p1[2], t[7]) - mul(t[0], &p2[1], t[2]) - square(t[8], &p2[2]) - mul(t[3], &p1[0], t[8]) - mul(t[4], &p2[2], t[8]) - mul(t[2], &p1[1], t[4]) - if t[1].equal(t[3]) { - if t[0].equal(t[2]) { - return g.Double(r, p1) - } - return r.Zero() - } - sub(t[1], t[1], t[3]) - double(t[4], t[1]) - square(t[4], t[4]) - mul(t[5], t[1], t[4]) - sub(t[0], t[0], t[2]) - double(t[0], t[0]) - square(t[6], t[0]) - sub(t[6], t[6], t[5]) - mul(t[3], t[3], t[4]) - double(t[4], t[3]) - sub(&r[0], t[6], t[4]) - sub(t[4], t[3], &r[0]) - mul(t[6], t[2], t[5]) - double(t[6], t[6]) - mul(t[0], t[0], t[4]) - sub(&r[1], t[0], t[6]) - add(t[0], &p1[2], &p2[2]) - square(t[0], t[0]) - sub(t[0], t[0], t[7]) - sub(t[0], t[0], t[8]) - mul(&r[2], t[0], t[1]) - return r -} - -// Double doubles a G1 point p and assigns the result to the point at first argument. -func (g *G1) Double(r, p *PointG1) *PointG1 { - // http://www.hyperelliptic.org/EFD/gp/auto-shortw-jacobian-0.html#doubling-dbl-2009-l - if g.IsZero(p) { - return r.Set(p) - } - t := g.t - square(t[0], &p[0]) - square(t[1], &p[1]) - square(t[2], t[1]) - add(t[1], &p[0], t[1]) - square(t[1], t[1]) - sub(t[1], t[1], t[0]) - sub(t[1], t[1], t[2]) - double(t[1], t[1]) - double(t[3], t[0]) - add(t[0], t[3], t[0]) - square(t[4], t[0]) - double(t[3], t[1]) - sub(&r[0], t[4], t[3]) - sub(t[1], t[1], &r[0]) - double(t[2], t[2]) - double(t[2], t[2]) - double(t[2], t[2]) - mul(t[0], t[0], t[1]) - sub(t[1], t[0], t[2]) - mul(t[0], &p[1], &p[2]) - r[1].set(t[1]) - double(&r[2], t[0]) - return r -} - -// Neg negates a G1 point p and assigns the result to the point at first argument. -func (g *G1) Neg(r, p *PointG1) *PointG1 { - r[0].set(&p[0]) - r[2].set(&p[2]) - neg(&r[1], &p[1]) - return r -} - -// Sub subtracts two G1 points p1, p2 and assigns the result to point at first argument. -func (g *G1) Sub(c, a, b *PointG1) *PointG1 { - d := &PointG1{} - g.Neg(d, b) - g.Add(c, a, d) - return c -} - -// MulScalar multiplies a point by given scalar value in big.Int and assigns the result to point at first argument. -func (g *G1) MulScalar(c, p *PointG1, e *big.Int) *PointG1 { - q, n := &PointG1{}, &PointG1{} - n.Set(p) - l := e.BitLen() - for i := 0; i < l; i++ { - if e.Bit(i) == 1 { - g.Add(q, q, n) - } - g.Double(n, n) - } - return c.Set(q) -} - -// ClearCofactor maps given a G1 point to correct subgroup -func (g *G1) ClearCofactor(p *PointG1) { - g.MulScalar(p, p, cofactorEFFG1) -} - -// MultiExp calculates multi exponentiation. Given pairs of G1 point and scalar values -// (P_0, e_0), (P_1, e_1), ... (P_n, e_n) calculates r = e_0 * P_0 + e_1 * P_1 + ... + e_n * P_n -// Length of points and scalars are expected to be equal, otherwise an error is returned. -// Result is assigned to point at first argument. -func (g *G1) MultiExp(r *PointG1, points []*PointG1, powers []*big.Int) (*PointG1, error) { - if len(points) != len(powers) { - return nil, errors.New("point and scalar vectors should be in same length") - } - var c uint32 = 3 - if len(powers) >= 32 { - c = uint32(math.Ceil(math.Log10(float64(len(powers))))) - } - bucketSize, numBits := (1<= 0; i-- { - g.Add(sum, sum, bucket[i]) - g.Add(acc, acc, sum) - } - windows[j] = g.New() - windows[j].Set(acc) - j++ - cur += c - } - acc.Zero() - for i := len(windows) - 1; i >= 0; i-- { - for j := uint32(0); j < c; j++ { - g.Double(acc, acc) - } - g.Add(acc, acc, windows[i]) - } - return r.Set(acc), nil -} - -// MapToCurve given a byte slice returns a valid G1 point. -// This mapping function implements the Simplified Shallue-van de Woestijne-Ulas method. -// https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06 -// Input byte slice should be a valid field element, otherwise an error is returned. -func (g *G1) MapToCurve(in []byte) (*PointG1, error) { - u, err := fromBytes(in) - if err != nil { - return nil, err - } - x, y := swuMapG1(u) - isogenyMapG1(x, y) - one := new(fe).one() - p := &PointG1{*x, *y, *one} - g.ClearCofactor(p) - return g.Affine(p), nil -} diff --git a/crypto/bls12381/g1_test.go b/crypto/bls12381/g1_test.go deleted file mode 100644 index dda07098dfa..00000000000 --- a/crypto/bls12381/g1_test.go +++ /dev/null @@ -1,283 +0,0 @@ -package bls12381 - -import ( - "bytes" - "crypto/rand" - "math/big" - "testing" - - "github.com/ledgerwatch/erigon/common" -) - -func (g *G1) one() *PointG1 { - one, _ := g.fromBytesUnchecked( - common.FromHex("" + - "17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb" + - "08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", - ), - ) - return one -} - -func (g *G1) rand() *PointG1 { - k, err := rand.Int(rand.Reader, q) - if err != nil { - panic(err) - } - return g.MulScalar(&PointG1{}, g.one(), k) -} - -func TestG1Serialization(t *testing.T) { - g1 := NewG1() - for i := 0; i < fuz; i++ { - a := g1.rand() - buf := g1.ToBytes(a) - b, err := g1.FromBytes(buf) - if err != nil { - t.Fatal(err) - } - if !g1.Equal(a, b) { - t.Fatal("bad serialization from/to") - } - } - for i := 0; i < fuz; i++ { - a := g1.rand() - encoded := g1.EncodePoint(a) - b, err := g1.DecodePoint(encoded) - if err != nil { - t.Fatal(err) - } - if !g1.Equal(a, b) { - t.Fatal("bad serialization encode/decode") - } - } -} - -func TestG1IsOnCurve(t *testing.T) { - g := NewG1() - zero := g.Zero() - if !g.IsOnCurve(zero) { - t.Fatal("zero must be on curve") - } - one := new(fe).one() - p := &PointG1{*one, *one, *one} - if g.IsOnCurve(p) { - t.Fatal("(1, 1) is not on curve") - } -} - -func TestG1AdditiveProperties(t *testing.T) { - g := NewG1() - t0, t1 := g.New(), g.New() - zero := g.Zero() - for i := 0; i < fuz; i++ { - a, b := g.rand(), g.rand() - g.Add(t0, a, zero) - if !g.Equal(t0, a) { - t.Fatal("a + 0 == a") - } - g.Add(t0, zero, zero) - if !g.Equal(t0, zero) { - t.Fatal("0 + 0 == 0") - } - g.Sub(t0, a, zero) - if !g.Equal(t0, a) { - t.Fatal("a - 0 == a") - } - g.Sub(t0, zero, zero) - if !g.Equal(t0, zero) { - t.Fatal("0 - 0 == 0") - } - g.Neg(t0, zero) - if !g.Equal(t0, zero) { - t.Fatal("- 0 == 0") - } - g.Sub(t0, zero, a) - g.Neg(t0, t0) - if !g.Equal(t0, a) { - t.Fatal(" - (0 - a) == a") - } - g.Double(t0, zero) - if !g.Equal(t0, zero) { - t.Fatal("2 * 0 == 0") - } - g.Double(t0, a) - g.Sub(t0, t0, a) - if !g.Equal(t0, a) || !g.IsOnCurve(t0) { - t.Fatal(" (2 * a) - a == a") - } - g.Add(t0, a, b) - g.Add(t1, b, a) - if !g.Equal(t0, t1) { - t.Fatal("a + b == b + a") - } - g.Sub(t0, a, b) - g.Sub(t1, b, a) - g.Neg(t1, t1) - if !g.Equal(t0, t1) { - t.Fatal("a - b == - ( b - a )") - } - c := g.rand() - g.Add(t0, a, b) - g.Add(t0, t0, c) - g.Add(t1, a, c) - g.Add(t1, t1, b) - if !g.Equal(t0, t1) { - t.Fatal("(a + b) + c == (a + c ) + b") - } - g.Sub(t0, a, b) - g.Sub(t0, t0, c) - g.Sub(t1, a, c) - g.Sub(t1, t1, b) - if !g.Equal(t0, t1) { - t.Fatal("(a - b) - c == (a - c) -b") - } - } -} - -func TestG1MultiplicativeProperties(t *testing.T) { - g := NewG1() - t0, t1 := g.New(), g.New() - zero := g.Zero() - for i := 0; i < fuz; i++ { - a := g.rand() - s1, s2, s3 := randScalar(q), randScalar(q), randScalar(q) - sone := big.NewInt(1) - g.MulScalar(t0, zero, s1) - if !g.Equal(t0, zero) { - t.Fatal(" 0 ^ s == 0") - } - g.MulScalar(t0, a, sone) - if !g.Equal(t0, a) { - t.Fatal(" a ^ 1 == a") - } - g.MulScalar(t0, zero, s1) - if !g.Equal(t0, zero) { - t.Fatal(" 0 ^ s == a") - } - g.MulScalar(t0, a, s1) - g.MulScalar(t0, t0, s2) - s3.Mul(s1, s2) - g.MulScalar(t1, a, s3) - if !g.Equal(t0, t1) { - t.Errorf(" (a ^ s1) ^ s2 == a ^ (s1 * s2)") - } - g.MulScalar(t0, a, s1) - g.MulScalar(t1, a, s2) - g.Add(t0, t0, t1) - s3.Add(s1, s2) - g.MulScalar(t1, a, s3) - if !g.Equal(t0, t1) { - t.Errorf(" (a ^ s1) + (a ^ s2) == a ^ (s1 + s2)") - } - } -} - -func TestG1MultiExpExpected(t *testing.T) { - g := NewG1() - one := g.one() - var scalars [2]*big.Int - var bases [2]*PointG1 - scalars[0] = big.NewInt(2) - scalars[1] = big.NewInt(3) - bases[0], bases[1] = new(PointG1).Set(one), new(PointG1).Set(one) - expected, result := g.New(), g.New() - g.MulScalar(expected, one, big.NewInt(5)) - _, _ = g.MultiExp(result, bases[:], scalars[:]) - if !g.Equal(expected, result) { - t.Fatal("bad multi-exponentiation") - } -} - -func TestG1MultiExpBatch(t *testing.T) { - g := NewG1() - one := g.one() - n := 1000 - bases := make([]*PointG1, n) - scalars := make([]*big.Int, n) - // scalars: [s0,s1 ... s(n-1)] - // bases: [P0,P1,..P(n-1)] = [s(n-1)*G, s(n-2)*G ... s0*G] - for i, j := 0, n-1; i < n; i, j = i+1, j-1 { - scalars[j], _ = rand.Int(rand.Reader, big.NewInt(100000)) - bases[i] = g.New() - g.MulScalar(bases[i], one, scalars[j]) - } - // expected: s(n-1)*P0 + s(n-2)*P1 + s0*P(n-1) - expected, tmp := g.New(), g.New() - for i := 0; i < n; i++ { - g.MulScalar(tmp, bases[i], scalars[i]) - g.Add(expected, expected, tmp) - } - result := g.New() - _, _ = g.MultiExp(result, bases, scalars) - if !g.Equal(expected, result) { - t.Fatal("bad multi-exponentiation") - } -} - -func TestG1MapToCurve(t *testing.T) { - for i, v := range []struct { - u []byte - expected []byte - }{ - { - u: make([]byte, 48), - expected: common.FromHex("11a9a0372b8f332d5c30de9ad14e50372a73fa4c45d5f2fa5097f2d6fb93bcac592f2e1711ac43db0519870c7d0ea415" + "092c0f994164a0719f51c24ba3788de240ff926b55f58c445116e8bc6a47cd63392fd4e8e22bdf9feaa96ee773222133"), - }, - { - u: common.FromHex("07fdf49ea58e96015d61f6b5c9d1c8f277146a533ae7fbca2a8ef4c41055cd961fbc6e26979b5554e4b4f22330c0e16d"), - expected: common.FromHex("1223effdbb2d38152495a864d78eee14cb0992d89a241707abb03819a91a6d2fd65854ab9a69e9aacb0cbebfd490732c" + "0f925d61e0b235ecd945cbf0309291878df0d06e5d80d6b84aa4ff3e00633b26f9a7cb3523ef737d90e6d71e8b98b2d5"), - }, - { - u: common.FromHex("1275ab3adbf824a169ed4b1fd669b49cf406d822f7fe90d6b2f8c601b5348436f89761bb1ad89a6fb1137cd91810e5d2"), - expected: common.FromHex("179d3fd0b4fb1da43aad06cea1fb3f828806ddb1b1fa9424b1e3944dfdbab6e763c42636404017da03099af0dcca0fd6" + "0d037cb1c6d495c0f5f22b061d23f1be3d7fe64d3c6820cfcd99b6b36fa69f7b4c1f4addba2ae7aa46fb25901ab483e4"), - }, - { - u: common.FromHex("0e93d11d30de6d84b8578827856f5c05feef36083eef0b7b263e35ecb9b56e86299614a042e57d467fa20948e8564909"), - expected: common.FromHex("15aa66c77eded1209db694e8b1ba49daf8b686733afaa7b68c683d0b01788dfb0617a2e2d04c0856db4981921d3004af" + "0952bb2f61739dd1d201dd0a79d74cda3285403d47655ee886afe860593a8a4e51c5b77a22d2133e3a4280eaaaa8b788"), - }, - { - u: common.FromHex("015a41481155d17074d20be6d8ec4d46632a51521cd9c916e265bd9b47343b3689979b50708c8546cbc2916b86cb1a3a"), - expected: common.FromHex("06328ce5106e837935e8da84bd9af473422e62492930aa5f460369baad9545defa468d9399854c23a75495d2a80487ee" + "094bfdfe3e552447433b5a00967498a3f1314b86ce7a7164c8a8f4131f99333b30a574607e301d5f774172c627fd0bca"), - }, - } { - g := NewG1() - p0, err := g.MapToCurve(v.u) - if err != nil { - t.Fatal("map to curve fails", i, err) - } - if !bytes.Equal(g.ToBytes(p0), v.expected) { - t.Fatal("map to curve fails", i) - } - } -} - -func BenchmarkG1Add(t *testing.B) { - g1 := NewG1() - a, b, c := g1.rand(), g1.rand(), PointG1{} - t.ResetTimer() - for i := 0; i < t.N; i++ { - g1.Add(&c, a, b) - } -} - -func BenchmarkG1Mul(t *testing.B) { - g1 := NewG1() - a, e, c := g1.rand(), q, PointG1{} - t.ResetTimer() - for i := 0; i < t.N; i++ { - g1.MulScalar(&c, a, e) - } -} - -func BenchmarkG1MapToCurve(t *testing.B) { - a := make([]byte, 48) - g1 := NewG1() - t.ResetTimer() - for i := 0; i < t.N; i++ { - _, err := g1.MapToCurve(a) - if err != nil { - t.Fatal(err) - } - } -} diff --git a/crypto/bls12381/g2.go b/crypto/bls12381/g2.go deleted file mode 100644 index c869b096461..00000000000 --- a/crypto/bls12381/g2.go +++ /dev/null @@ -1,457 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//noling:golint -package bls12381 - -import ( - "errors" - "math" - "math/big" -) - -// PointG2 is type for point in G2. -// PointG2 is both used for Affine and Jacobian point representation. -// If z is equal to one the point is considered as in affine form. -type PointG2 [3]fe2 - -// Set copies valeus of one point to another. -func (p *PointG2) Set(p2 *PointG2) *PointG2 { - p[0].set(&p2[0]) - p[1].set(&p2[1]) - p[2].set(&p2[2]) - return p -} - -// Zero returns G2 point in point at infinity representation -func (p *PointG2) Zero() *PointG2 { - p[0].zero() - p[1].one() - p[2].zero() - return p - -} - -type tempG2 struct { - t [9]*fe2 -} - -// G2 is struct for G2 group. -type G2 struct { - f *fp2 - tempG2 -} - -// NewG2 constructs a new G2 instance. -func NewG2() *G2 { - return newG2(nil) -} - -func newG2(f *fp2) *G2 { - if f == nil { - f = newFp2() - } - t := newTempG2() - return &G2{f, t} -} - -func newTempG2() tempG2 { - t := [9]*fe2{} - for i := 0; i < 9; i++ { - t[i] = &fe2{} - } - return tempG2{t} -} - -// Q returns group order in big.Int. -func (g *G2) Q() *big.Int { - return new(big.Int).Set(q) -} - -func (g *G2) fromBytesUnchecked(in []byte) (*PointG2, error) { - p0, err := g.f.fromBytes(in[:96]) - if err != nil { - return nil, err - } - p1, err := g.f.fromBytes(in[96:]) - if err != nil { - return nil, err - } - p2 := new(fe2).one() - return &PointG2{*p0, *p1, *p2}, nil -} - -// FromBytes constructs a new point given uncompressed byte input. -// FromBytes does not take zcash flags into account. -// Byte input expected to be larger than 96 bytes. -// First 192 bytes should be concatenation of x and y values -// Point (0, 0) is considered as infinity. -func (g *G2) FromBytes(in []byte) (*PointG2, error) { - if len(in) != 192 { - return nil, errors.New("input string should be equal or larger than 192") - } - p0, err := g.f.fromBytes(in[:96]) - if err != nil { - return nil, err - } - p1, err := g.f.fromBytes(in[96:]) - if err != nil { - return nil, err - } - // check if given input points to infinity - if p0.isZero() && p1.isZero() { - return g.Zero(), nil - } - p2 := new(fe2).one() - p := &PointG2{*p0, *p1, *p2} - if !g.IsOnCurve(p) { - return nil, errors.New("point is not on curve") - } - return p, nil -} - -// DecodePoint given encoded (x, y) coordinates in 256 bytes returns a valid G1 Point. -func (g *G2) DecodePoint(in []byte) (*PointG2, error) { - if len(in) != 256 { - return nil, errors.New("invalid g2 point length") - } - pointBytes := make([]byte, 192) - x0Bytes, err := decodeFieldElement(in[:64]) - if err != nil { - return nil, err - } - x1Bytes, err := decodeFieldElement(in[64:128]) - if err != nil { - return nil, err - } - y0Bytes, err := decodeFieldElement(in[128:192]) - if err != nil { - return nil, err - } - y1Bytes, err := decodeFieldElement(in[192:]) - if err != nil { - return nil, err - } - copy(pointBytes[:48], x1Bytes) - copy(pointBytes[48:96], x0Bytes) - copy(pointBytes[96:144], y1Bytes) - copy(pointBytes[144:192], y0Bytes) - return g.FromBytes(pointBytes) -} - -// ToBytes serializes a point into bytes in uncompressed form, -// does not take zcash flags into account, -// returns (0, 0) if point is infinity. -func (g *G2) ToBytes(p *PointG2) []byte { - out := make([]byte, 192) - if g.IsZero(p) { - return out - } - g.Affine(p) - copy(out[:96], g.f.toBytes(&p[0])) - copy(out[96:], g.f.toBytes(&p[1])) - return out -} - -// EncodePoint encodes a point into 256 bytes. -func (g *G2) EncodePoint(p *PointG2) []byte { - // outRaw is 96 bytes - outRaw := g.ToBytes(p) - out := make([]byte, 256) - // encode x - copy(out[16:16+48], outRaw[48:96]) - copy(out[80:80+48], outRaw[:48]) - // encode y - copy(out[144:144+48], outRaw[144:]) - copy(out[208:208+48], outRaw[96:144]) - return out -} - -// New creates a new G2 Point which is equal to zero in other words point at infinity. -func (g *G2) New() *PointG2 { - return new(PointG2).Zero() -} - -// Zero returns a new G2 Point which is equal to point at infinity. -func (g *G2) Zero() *PointG2 { - return new(PointG2).Zero() -} - -// One returns a new G2 Point which is equal to generator point. -func (g *G2) One() *PointG2 { - p := &PointG2{} - return p.Set(&g2One) -} - -// IsZero returns true if given point is equal to zero. -func (g *G2) IsZero(p *PointG2) bool { - return p[2].isZero() -} - -// Equal checks if given two G2 point is equal in their affine form. -func (g *G2) Equal(p1, p2 *PointG2) bool { - if g.IsZero(p1) { - return g.IsZero(p2) - } - if g.IsZero(p2) { - return g.IsZero(p1) - } - t := g.t - g.f.square(t[0], &p1[2]) - g.f.square(t[1], &p2[2]) - g.f.mul(t[2], t[0], &p2[0]) - g.f.mul(t[3], t[1], &p1[0]) - g.f.mul(t[0], t[0], &p1[2]) - g.f.mul(t[1], t[1], &p2[2]) - g.f.mul(t[1], t[1], &p1[1]) - g.f.mul(t[0], t[0], &p2[1]) - return t[0].equal(t[1]) && t[2].equal(t[3]) -} - -// InCorrectSubgroup checks whether given point is in correct subgroup. -func (g *G2) InCorrectSubgroup(p *PointG2) bool { - tmp := &PointG2{} - g.MulScalar(tmp, p, q) - return g.IsZero(tmp) -} - -// IsOnCurve checks a G2 point is on curve. -func (g *G2) IsOnCurve(p *PointG2) bool { - if g.IsZero(p) { - return true - } - t := g.t - g.f.square(t[0], &p[1]) - g.f.square(t[1], &p[0]) - g.f.mul(t[1], t[1], &p[0]) - g.f.square(t[2], &p[2]) - g.f.square(t[3], t[2]) - g.f.mul(t[2], t[2], t[3]) - g.f.mul(t[2], b2, t[2]) - g.f.add(t[1], t[1], t[2]) - return t[0].equal(t[1]) -} - -// IsAffine checks a G2 point whether it is in affine form. -func (g *G2) IsAffine(p *PointG2) bool { - return p[2].isOne() -} - -// Affine calculates affine form of given G2 point. -func (g *G2) Affine(p *PointG2) *PointG2 { - if g.IsZero(p) { - return p - } - if !g.IsAffine(p) { - t := g.t - g.f.inverse(t[0], &p[2]) - g.f.square(t[1], t[0]) - g.f.mul(&p[0], &p[0], t[1]) - g.f.mul(t[0], t[0], t[1]) - g.f.mul(&p[1], &p[1], t[0]) - p[2].one() - } - return p -} - -// Add adds two G2 points p1, p2 and assigns the result to point at first argument. -func (g *G2) Add(r, p1, p2 *PointG2) *PointG2 { - // http://www.hyperelliptic.org/EFD/gp/auto-shortw-jacobian-0.html#addition-add-2007-bl - if g.IsZero(p1) { - return r.Set(p2) - } - if g.IsZero(p2) { - return r.Set(p1) - } - t := g.t - g.f.square(t[7], &p1[2]) - g.f.mul(t[1], &p2[0], t[7]) - g.f.mul(t[2], &p1[2], t[7]) - g.f.mul(t[0], &p2[1], t[2]) - g.f.square(t[8], &p2[2]) - g.f.mul(t[3], &p1[0], t[8]) - g.f.mul(t[4], &p2[2], t[8]) - g.f.mul(t[2], &p1[1], t[4]) - if t[1].equal(t[3]) { - if t[0].equal(t[2]) { - return g.Double(r, p1) - } - return r.Zero() - } - g.f.sub(t[1], t[1], t[3]) - g.f.double(t[4], t[1]) - g.f.square(t[4], t[4]) - g.f.mul(t[5], t[1], t[4]) - g.f.sub(t[0], t[0], t[2]) - g.f.double(t[0], t[0]) - g.f.square(t[6], t[0]) - g.f.sub(t[6], t[6], t[5]) - g.f.mul(t[3], t[3], t[4]) - g.f.double(t[4], t[3]) - g.f.sub(&r[0], t[6], t[4]) - g.f.sub(t[4], t[3], &r[0]) - g.f.mul(t[6], t[2], t[5]) - g.f.double(t[6], t[6]) - g.f.mul(t[0], t[0], t[4]) - g.f.sub(&r[1], t[0], t[6]) - g.f.add(t[0], &p1[2], &p2[2]) - g.f.square(t[0], t[0]) - g.f.sub(t[0], t[0], t[7]) - g.f.sub(t[0], t[0], t[8]) - g.f.mul(&r[2], t[0], t[1]) - return r -} - -// Double doubles a G2 point p and assigns the result to the point at first argument. -func (g *G2) Double(r, p *PointG2) *PointG2 { - // http://www.hyperelliptic.org/EFD/gp/auto-shortw-jacobian-0.html#doubling-dbl-2009-l - if g.IsZero(p) { - return r.Set(p) - } - t := g.t - g.f.square(t[0], &p[0]) - g.f.square(t[1], &p[1]) - g.f.square(t[2], t[1]) - g.f.add(t[1], &p[0], t[1]) - g.f.square(t[1], t[1]) - g.f.sub(t[1], t[1], t[0]) - g.f.sub(t[1], t[1], t[2]) - g.f.double(t[1], t[1]) - g.f.double(t[3], t[0]) - g.f.add(t[0], t[3], t[0]) - g.f.square(t[4], t[0]) - g.f.double(t[3], t[1]) - g.f.sub(&r[0], t[4], t[3]) - g.f.sub(t[1], t[1], &r[0]) - g.f.double(t[2], t[2]) - g.f.double(t[2], t[2]) - g.f.double(t[2], t[2]) - g.f.mul(t[0], t[0], t[1]) - g.f.sub(t[1], t[0], t[2]) - g.f.mul(t[0], &p[1], &p[2]) - r[1].set(t[1]) - g.f.double(&r[2], t[0]) - return r -} - -// Neg negates a G2 point p and assigns the result to the point at first argument. -func (g *G2) Neg(r, p *PointG2) *PointG2 { - r[0].set(&p[0]) - g.f.neg(&r[1], &p[1]) - r[2].set(&p[2]) - return r -} - -// Sub subtracts two G2 points p1, p2 and assigns the result to point at first argument. -func (g *G2) Sub(c, a, b *PointG2) *PointG2 { - d := &PointG2{} - g.Neg(d, b) - g.Add(c, a, d) - return c -} - -// MulScalar multiplies a point by given scalar value in big.Int and assigns the result to point at first argument. -func (g *G2) MulScalar(c, p *PointG2, e *big.Int) *PointG2 { - q, n := &PointG2{}, &PointG2{} - n.Set(p) - l := e.BitLen() - for i := 0; i < l; i++ { - if e.Bit(i) == 1 { - g.Add(q, q, n) - } - g.Double(n, n) - } - return c.Set(q) -} - -// ClearCofactor maps given a G2 point to correct subgroup -func (g *G2) ClearCofactor(p *PointG2) { - g.MulScalar(p, p, cofactorEFFG2) -} - -// MultiExp calculates multi exponentiation. Given pairs of G2 point and scalar values -// (P_0, e_0), (P_1, e_1), ... (P_n, e_n) calculates r = e_0 * P_0 + e_1 * P_1 + ... + e_n * P_n -// Length of points and scalars are expected to be equal, otherwise an error is returned. -// Result is assigned to point at first argument. -func (g *G2) MultiExp(r *PointG2, points []*PointG2, powers []*big.Int) (*PointG2, error) { - if len(points) != len(powers) { - return nil, errors.New("point and scalar vectors should be in same length") - } - var c uint32 = 3 - if len(powers) >= 32 { - c = uint32(math.Ceil(math.Log10(float64(len(powers))))) - } - bucketSize, numBits := (1<= 0; i-- { - g.Add(sum, sum, bucket[i]) - g.Add(acc, acc, sum) - } - windows[j] = g.New() - windows[j].Set(acc) - j++ - cur += c - } - acc.Zero() - for i := len(windows) - 1; i >= 0; i-- { - for j := uint32(0); j < c; j++ { - g.Double(acc, acc) - } - g.Add(acc, acc, windows[i]) - } - return r.Set(acc), nil -} - -// MapToCurve given a byte slice returns a valid G2 point. -// This mapping function implements the Simplified Shallue-van de Woestijne-Ulas method. -// https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-05#section-6.6.2 -// Input byte slice should be a valid field element, otherwise an error is returned. -func (g *G2) MapToCurve(in []byte) (*PointG2, error) { - fp2 := g.f - u, err := fp2.fromBytes(in) - if err != nil { - return nil, err - } - x, y := swuMapG2(fp2, u) - isogenyMapG2(fp2, x, y) - z := new(fe2).one() - q := &PointG2{*x, *y, *z} - g.ClearCofactor(q) - return g.Affine(q), nil -} diff --git a/crypto/bls12381/g2_test.go b/crypto/bls12381/g2_test.go deleted file mode 100644 index 8024dd1398d..00000000000 --- a/crypto/bls12381/g2_test.go +++ /dev/null @@ -1,286 +0,0 @@ -package bls12381 - -import ( - "bytes" - "crypto/rand" - "math/big" - "testing" - - "github.com/ledgerwatch/erigon/common" -) - -func (g *G2) one() *PointG2 { - one, _ := g.fromBytesUnchecked( - common.FromHex("" + - "13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e" + - "024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8" + - "0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be" + - "0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801", - ), - ) - return one -} - -func (g *G2) rand() *PointG2 { - k, err := rand.Int(rand.Reader, q) - if err != nil { - panic(err) - } - return g.MulScalar(&PointG2{}, g.one(), k) -} - -func TestG2Serialization(t *testing.T) { - g2 := NewG2() - for i := 0; i < fuz; i++ { - a := g2.rand() - buf := g2.ToBytes(a) - b, err := g2.FromBytes(buf) - if err != nil { - t.Fatal(err) - } - if !g2.Equal(a, b) { - t.Fatal("bad serialization from/to") - } - } - for i := 0; i < fuz; i++ { - a := g2.rand() - encoded := g2.EncodePoint(a) - b, err := g2.DecodePoint(encoded) - if err != nil { - t.Fatal(err) - } - if !g2.Equal(a, b) { - t.Fatal("bad serialization encode/decode") - } - } -} - -func TestG2IsOnCurve(t *testing.T) { - g := NewG2() - zero := g.Zero() - if !g.IsOnCurve(zero) { - t.Fatal("zero must be on curve") - } - one := new(fe2).one() - p := &PointG2{*one, *one, *one} - if g.IsOnCurve(p) { - t.Fatal("(1, 1) is not on curve") - } -} - -func TestG2AdditiveProperties(t *testing.T) { - g := NewG2() - t0, t1 := g.New(), g.New() - zero := g.Zero() - for i := 0; i < fuz; i++ { - a, b := g.rand(), g.rand() - _, _, _ = b, t1, zero - g.Add(t0, a, zero) - if !g.Equal(t0, a) { - t.Fatal("a + 0 == a") - } - g.Add(t0, zero, zero) - if !g.Equal(t0, zero) { - t.Fatal("0 + 0 == 0") - } - g.Sub(t0, a, zero) - if !g.Equal(t0, a) { - t.Fatal("a - 0 == a") - } - g.Sub(t0, zero, zero) - if !g.Equal(t0, zero) { - t.Fatal("0 - 0 == 0") - } - g.Neg(t0, zero) - if !g.Equal(t0, zero) { - t.Fatal("- 0 == 0") - } - g.Sub(t0, zero, a) - g.Neg(t0, t0) - if !g.Equal(t0, a) { - t.Fatal(" - (0 - a) == a") - } - g.Double(t0, zero) - if !g.Equal(t0, zero) { - t.Fatal("2 * 0 == 0") - } - g.Double(t0, a) - g.Sub(t0, t0, a) - if !g.Equal(t0, a) || !g.IsOnCurve(t0) { - t.Fatal(" (2 * a) - a == a") - } - g.Add(t0, a, b) - g.Add(t1, b, a) - if !g.Equal(t0, t1) { - t.Fatal("a + b == b + a") - } - g.Sub(t0, a, b) - g.Sub(t1, b, a) - g.Neg(t1, t1) - if !g.Equal(t0, t1) { - t.Fatal("a - b == - ( b - a )") - } - c := g.rand() - g.Add(t0, a, b) - g.Add(t0, t0, c) - g.Add(t1, a, c) - g.Add(t1, t1, b) - if !g.Equal(t0, t1) { - t.Fatal("(a + b) + c == (a + c ) + b") - } - g.Sub(t0, a, b) - g.Sub(t0, t0, c) - g.Sub(t1, a, c) - g.Sub(t1, t1, b) - if !g.Equal(t0, t1) { - t.Fatal("(a - b) - c == (a - c) -b") - } - } -} - -func TestG2MultiplicativeProperties(t *testing.T) { - g := NewG2() - t0, t1 := g.New(), g.New() - zero := g.Zero() - for i := 0; i < fuz; i++ { - a := g.rand() - s1, s2, s3 := randScalar(q), randScalar(q), randScalar(q) - sone := big.NewInt(1) - g.MulScalar(t0, zero, s1) - if !g.Equal(t0, zero) { - t.Fatal(" 0 ^ s == 0") - } - g.MulScalar(t0, a, sone) - if !g.Equal(t0, a) { - t.Fatal(" a ^ 1 == a") - } - g.MulScalar(t0, zero, s1) - if !g.Equal(t0, zero) { - t.Fatal(" 0 ^ s == a") - } - g.MulScalar(t0, a, s1) - g.MulScalar(t0, t0, s2) - s3.Mul(s1, s2) - g.MulScalar(t1, a, s3) - if !g.Equal(t0, t1) { - t.Errorf(" (a ^ s1) ^ s2 == a ^ (s1 * s2)") - } - g.MulScalar(t0, a, s1) - g.MulScalar(t1, a, s2) - g.Add(t0, t0, t1) - s3.Add(s1, s2) - g.MulScalar(t1, a, s3) - if !g.Equal(t0, t1) { - t.Errorf(" (a ^ s1) + (a ^ s2) == a ^ (s1 + s2)") - } - } -} - -func TestG2MultiExpExpected(t *testing.T) { - g := NewG2() - one := g.one() - var scalars [2]*big.Int - var bases [2]*PointG2 - scalars[0] = big.NewInt(2) - scalars[1] = big.NewInt(3) - bases[0], bases[1] = new(PointG2).Set(one), new(PointG2).Set(one) - expected, result := g.New(), g.New() - g.MulScalar(expected, one, big.NewInt(5)) - _, _ = g.MultiExp(result, bases[:], scalars[:]) - if !g.Equal(expected, result) { - t.Fatal("bad multi-exponentiation") - } -} - -func TestG2MultiExpBatch(t *testing.T) { - g := NewG2() - one := g.one() - n := 1000 - bases := make([]*PointG2, n) - scalars := make([]*big.Int, n) - // scalars: [s0,s1 ... s(n-1)] - // bases: [P0,P1,..P(n-1)] = [s(n-1)*G, s(n-2)*G ... s0*G] - for i, j := 0, n-1; i < n; i, j = i+1, j-1 { - scalars[j], _ = rand.Int(rand.Reader, big.NewInt(100000)) - bases[i] = g.New() - g.MulScalar(bases[i], one, scalars[j]) - } - // expected: s(n-1)*P0 + s(n-2)*P1 + s0*P(n-1) - expected, tmp := g.New(), g.New() - for i := 0; i < n; i++ { - g.MulScalar(tmp, bases[i], scalars[i]) - g.Add(expected, expected, tmp) - } - result := g.New() - _, _ = g.MultiExp(result, bases, scalars) - if !g.Equal(expected, result) { - t.Fatal("bad multi-exponentiation") - } -} - -func TestG2MapToCurve(t *testing.T) { - for i, v := range []struct { - u []byte - expected []byte - }{ - { - u: make([]byte, 96), - expected: common.FromHex("0a67d12118b5a35bb02d2e86b3ebfa7e23410db93de39fb06d7025fa95e96ffa428a7a27c3ae4dd4b40bd251ac658892" + "018320896ec9eef9d5e619848dc29ce266f413d02dd31d9b9d44ec0c79cd61f18b075ddba6d7bd20b7ff27a4b324bfce" + "04c69777a43f0bda07679d5805e63f18cf4e0e7c6112ac7f70266d199b4f76ae27c6269a3ceebdae30806e9a76aadf5c" + "0260e03644d1a2c321256b3246bad2b895cad13890cbe6f85df55106a0d334604fb143c7a042d878006271865bc35941"), - }, - { - u: common.FromHex("025fbc07711ba267b7e70c82caa70a16fbb1d470ae24ceef307f5e2000751677820b7013ad4e25492dcf30052d3e5eca" + "0e775d7827adf385b83e20e4445bd3fab21d7b4498426daf3c1d608b9d41e9edb5eda0df022e753b8bb4bc3bb7db4914"), - expected: common.FromHex("0d4333b77becbf9f9dfa3ca928002233d1ecc854b1447e5a71f751c9042d000f42db91c1d6649a5e0ad22bd7bf7398b8" + "027e4bfada0b47f9f07e04aec463c7371e68f2fd0c738cd517932ea3801a35acf09db018deda57387b0f270f7a219e4d" + "0cc76dc777ea0d447e02a41004f37a0a7b1fafb6746884e8d9fc276716ccf47e4e0899548a2ec71c2bdf1a2a50e876db" + "053674cba9ef516ddc218fedb37324e6c47de27f88ab7ef123b006127d738293c0277187f7e2f80a299a24d84ed03da7"), - }, - { - u: common.FromHex("1870a7dbfd2a1deb74015a3546b20f598041bf5d5202997956a94a368d30d3f70f18cdaa1d33ce970a4e16af961cbdcb" + "045ab31ce4b5a8ba7c4b2851b64f063a66cd1223d3c85005b78e1beee65e33c90ceef0244e45fc45a5e1d6eab6644fdb"), - expected: common.FromHex("18f0f87b40af67c056915dbaf48534c592524e82c1c2b50c3734d02c0172c80df780a60b5683759298a3303c5d942778" + "09349f1cb5b2e55489dcd45a38545343451cc30a1681c57acd4fb0a6db125f8352c09f4a67eb7d1d8242cb7d3405f97b" + "10a2ba341bc689ab947b7941ce6ef39be17acaab067bd32bd652b471ab0792c53a2bd03bdac47f96aaafe96e441f63c0" + "02f2d9deb2c7742512f5b8230bf0fd83ea42279d7d39779543c1a43b61c885982b611f6a7a24b514995e8a098496b811"), - }, - { - u: common.FromHex("088fe329b054db8a6474f21a7fbfdf17b4c18044db299d9007af582c3d5f17d00e56d99921d4b5640fce44b05219b5de" + "0b6e6135a4cd31ba980ddbd115ac48abef7ec60e226f264d7befe002c165f3a496f36f76dd524efd75d17422558d10b4"), - expected: common.FromHex("19808ec5930a53c7cf5912ccce1cc33f1b3dcff24a53ce1cc4cba41fd6996dbed4843ccdd2eaf6a0cd801e562718d163" + "149fe43777d34f0d25430dea463889bd9393bdfb4932946db23671727081c629ebb98a89604f3433fba1c67d356a4af7" + "04783e391c30c83f805ca271e353582fdf19d159f6a4c39b73acbb637a9b8ac820cfbe2738d683368a7c07ad020e3e33" + "04c0d6793a766233b2982087b5f4a254f261003ccb3262ea7c50903eecef3e871d1502c293f9e063d7d293f6384f4551"), - }, - { - u: common.FromHex("03df16a66a05e4c1188c234788f43896e0565bfb64ac49b9639e6b284cc47dad73c47bb4ea7e677db8d496beb907fbb6" + "0f45b50647d67485295aa9eb2d91a877b44813677c67c8d35b2173ff3ba95f7bd0806f9ca8a1436b8b9d14ee81da4d7e"), - expected: common.FromHex("0b8e0094c886487870372eb6264613a6a087c7eb9804fab789be4e47a57b29eb19b1983a51165a1b5eb025865e9fc63a" + "0804152cbf8474669ad7d1796ab92d7ca21f32d8bed70898a748ed4e4e0ec557069003732fc86866d938538a2ae95552" + "14c80f068ece15a3936bb00c3c883966f75b4e8d9ddde809c11f781ab92d23a2d1d103ad48f6f3bb158bf3e3a4063449" + "09e5c8242dd7281ad32c03fe4af3f19167770016255fb25ad9b67ec51d62fade31a1af101e8f6172ec2ee8857662be3a"), - }, - } { - g := NewG2() - p0, err := g.MapToCurve(v.u) - if err != nil { - t.Fatal("map to curve fails", i, err) - } - if !bytes.Equal(g.ToBytes(p0), v.expected) { - t.Fatal("map to curve fails", i) - } - } -} - -func BenchmarkG2Add(t *testing.B) { - g2 := NewG2() - a, b, c := g2.rand(), g2.rand(), PointG2{} - t.ResetTimer() - for i := 0; i < t.N; i++ { - g2.Add(&c, a, b) - } -} - -func BenchmarkG2Mul(t *testing.B) { - g2 := NewG2() - a, e, c := g2.rand(), q, PointG2{} - t.ResetTimer() - for i := 0; i < t.N; i++ { - g2.MulScalar(&c, a, e) - } -} - -func BenchmarkG2SWUMap(t *testing.B) { - a := make([]byte, 96) - g2 := NewG2() - t.ResetTimer() - for i := 0; i < t.N; i++ { - _, err := g2.MapToCurve(a) - if err != nil { - t.Fatal(err) - } - } -} diff --git a/crypto/bls12381/gt.go b/crypto/bls12381/gt.go deleted file mode 100644 index 8a4a28aad5a..00000000000 --- a/crypto/bls12381/gt.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//nolint:stylecheck -package bls12381 - -import ( - "errors" - "math/big" -) - -// E is type for target group element -type E = fe12 - -// GT is type for target multiplicative group GT. -type GT struct { - fp12 *fp12 -} - -func (e *E) Set(e2 *E) *E { - return e.set(e2) -} - -// One sets a new target group element to one -func (e *E) One() *E { - e = new(fe12).one() - return e -} - -// IsOne returns true if given element equals to one -func (e *E) IsOne() bool { - return e.isOne() -} - -// Equal returns true if given two element is equal, otherwise returns false -func (g *E) Equal(g2 *E) bool { - return g.equal(g2) -} - -// NewGT constructs new target group instance. -func NewGT() *GT { - fp12 := newFp12(nil) - return >{fp12} -} - -// Q returns group order in big.Int. -func (g *GT) Q() *big.Int { - return new(big.Int).Set(q) -} - -// FromBytes expects 576 byte input and returns target group element -// FromBytes returns error if given element is not on correct subgroup. -func (g *GT) FromBytes(in []byte) (*E, error) { - e, err := g.fp12.fromBytes(in) - if err != nil { - return nil, err - } - if !g.IsValid(e) { - return e, errors.New("invalid element") - } - return e, nil -} - -// ToBytes serializes target group element. -func (g *GT) ToBytes(e *E) []byte { - return g.fp12.toBytes(e) -} - -// IsValid checks whether given target group element is in correct subgroup. -func (g *GT) IsValid(e *E) bool { - r := g.New() - g.fp12.exp(r, e, q) - return r.isOne() -} - -// New initializes a new target group element which is equal to one -func (g *GT) New() *E { - return new(E).One() -} - -// Add adds two field element `a` and `b` and assigns the result to the element in first argument. -func (g *GT) Add(c, a, b *E) { - g.fp12.add(c, a, b) -} - -// Sub subtracts two field element `a` and `b`, and assigns the result to the element in first argument. -func (g *GT) Sub(c, a, b *E) { - g.fp12.sub(c, a, b) -} - -// Mul multiplies two field element `a` and `b` and assigns the result to the element in first argument. -func (g *GT) Mul(c, a, b *E) { - g.fp12.mul(c, a, b) -} - -// Square squares an element `a` and assigns the result to the element in first argument. -func (g *GT) Square(c, a *E) { - g.fp12.cyclotomicSquare(c, a) -} - -// Exp exponents an element `a` by a scalar `s` and assigns the result to the element in first argument. -func (g *GT) Exp(c, a *E, s *big.Int) { - g.fp12.cyclotomicExp(c, a, s) -} - -// Inverse inverses an element `a` and assigns the result to the element in first argument. -func (g *GT) Inverse(c, a *E) { - g.fp12.inverse(c, a) -} diff --git a/crypto/bls12381/isogeny.go b/crypto/bls12381/isogeny.go deleted file mode 100644 index c5428f0ff3a..00000000000 --- a/crypto/bls12381/isogeny.go +++ /dev/null @@ -1,228 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//nolint:gofmt -package bls12381 - -// isogenyMapG1 applies 11-isogeny map for BLS12-381 G1 defined at draft-irtf-cfrg-hash-to-curve-06. -func isogenyMapG1(x, y *fe) { - // https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#appendix-C.2 - params := isogenyConstansG1 - degree := 15 - xNum, xDen, yNum, yDen := new(fe), new(fe), new(fe), new(fe) - xNum.set(params[0][degree]) - xDen.set(params[1][degree]) - yNum.set(params[2][degree]) - yDen.set(params[3][degree]) - for i := degree - 1; i >= 0; i-- { - mul(xNum, xNum, x) - mul(xDen, xDen, x) - mul(yNum, yNum, x) - mul(yDen, yDen, x) - add(xNum, xNum, params[0][i]) - add(xDen, xDen, params[1][i]) - add(yNum, yNum, params[2][i]) - add(yDen, yDen, params[3][i]) - } - inverse(xDen, xDen) - inverse(yDen, yDen) - mul(xNum, xNum, xDen) - mul(yNum, yNum, yDen) - mul(yNum, yNum, y) - x.set(xNum) - y.set(yNum) -} - -// isogenyMapG2 applies 11-isogeny map for BLS12-381 G1 defined at draft-irtf-cfrg-hash-to-curve-06. -func isogenyMapG2(e *fp2, x, y *fe2) { - if e == nil { - e = newFp2() - } - // https://tools.ietf.org/html/draft-irtf-cfrg-hash-to-curve-06#appendix-C.2 - params := isogenyConstantsG2 - degree := 3 - xNum := new(fe2).set(params[0][degree]) - xDen := new(fe2).set(params[1][degree]) - yNum := new(fe2).set(params[2][degree]) - yDen := new(fe2).set(params[3][degree]) - for i := degree - 1; i >= 0; i-- { - e.mul(xNum, xNum, x) - e.mul(xDen, xDen, x) - e.mul(yNum, yNum, x) - e.mul(yDen, yDen, x) - e.add(xNum, xNum, params[0][i]) - e.add(xDen, xDen, params[1][i]) - e.add(yNum, yNum, params[2][i]) - e.add(yDen, yDen, params[3][i]) - } - e.inverse(xDen, xDen) - e.inverse(yDen, yDen) - e.mul(xNum, xNum, xDen) - e.mul(yNum, yNum, yDen) - e.mul(yNum, yNum, y) - x.set(xNum) - y.set(yNum) -} - -var isogenyConstansG1 = [4][16]*fe{ - { - {0x4d18b6f3af00131c, 0x19fa219793fee28c, 0x3f2885f1467f19ae, 0x23dcea34f2ffb304, 0xd15b58d2ffc00054, 0x0913be200a20bef4}, - {0x898985385cdbbd8b, 0x3c79e43cc7d966aa, 0x1597e193f4cd233a, 0x8637ef1e4d6623ad, 0x11b22deed20d827b, 0x07097bc5998784ad}, - {0xa542583a480b664b, 0xfc7169c026e568c6, 0x5ba2ef314ed8b5a6, 0x5b5491c05102f0e7, 0xdf6e99707d2a0079, 0x0784151ed7605524}, - {0x494e212870f72741, 0xab9be52fbda43021, 0x26f5577994e34c3d, 0x049dfee82aefbd60, 0x65dadd7828505289, 0x0e93d431ea011aeb}, - {0x90ee774bd6a74d45, 0x7ada1c8a41bfb185, 0x0f1a8953b325f464, 0x104c24211be4805c, 0x169139d319ea7a8f, 0x09f20ead8e532bf6}, - {0x6ddd93e2f43626b7, 0xa5482c9aa1ccd7bd, 0x143245631883f4bd, 0x2e0a94ccf77ec0db, 0xb0282d480e56489f, 0x18f4bfcbb4368929}, - {0x23c5f0c953402dfd, 0x7a43ff6958ce4fe9, 0x2c390d3d2da5df63, 0xd0df5c98e1f9d70f, 0xffd89869a572b297, 0x1277ffc72f25e8fe}, - {0x79f4f0490f06a8a6, 0x85f894a88030fd81, 0x12da3054b18b6410, 0xe2a57f6505880d65, 0xbba074f260e400f1, 0x08b76279f621d028}, - {0xe67245ba78d5b00b, 0x8456ba9a1f186475, 0x7888bff6e6b33bb4, 0xe21585b9a30f86cb, 0x05a69cdcef55feee, 0x09e699dd9adfa5ac}, - {0x0de5c357bff57107, 0x0a0db4ae6b1a10b2, 0xe256bb67b3b3cd8d, 0x8ad456574e9db24f, 0x0443915f50fd4179, 0x098c4bf7de8b6375}, - {0xe6b0617e7dd929c7, 0xfe6e37d442537375, 0x1dafdeda137a489e, 0xe4efd1ad3f767ceb, 0x4a51d8667f0fe1cf, 0x054fdf4bbf1d821c}, - {0x72db2a50658d767b, 0x8abf91faa257b3d5, 0xe969d6833764ab47, 0x464170142a1009eb, 0xb14f01aadb30be2f, 0x18ae6a856f40715d}, - {0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0}, - }, - { - {0xb962a077fdb0f945, 0xa6a9740fefda13a0, 0xc14d568c3ed6c544, 0xb43fc37b908b133e, 0x9c0b3ac929599016, 0x0165aa6c93ad115f}, - {0x23279a3ba506c1d9, 0x92cfca0a9465176a, 0x3b294ab13755f0ff, 0x116dda1c5070ae93, 0xed4530924cec2045, 0x083383d6ed81f1ce}, - {0x9885c2a6449fecfc, 0x4a2b54ccd37733f0, 0x17da9ffd8738c142, 0xa0fba72732b3fafd, 0xff364f36e54b6812, 0x0f29c13c660523e2}, - {0xe349cc118278f041, 0xd487228f2f3204fb, 0xc9d325849ade5150, 0x43a92bd69c15c2df, 0x1c2c7844bc417be4, 0x12025184f407440c}, - {0x587f65ae6acb057b, 0x1444ef325140201f, 0xfbf995e71270da49, 0xccda066072436a42, 0x7408904f0f186bb2, 0x13b93c63edf6c015}, - {0xfb918622cd141920, 0x4a4c64423ecaddb4, 0x0beb232927f7fb26, 0x30f94df6f83a3dc2, 0xaeedd424d780f388, 0x06cc402dd594bbeb}, - {0xd41f761151b23f8f, 0x32a92465435719b3, 0x64f436e888c62cb9, 0xdf70a9a1f757c6e4, 0x6933a38d5b594c81, 0x0c6f7f7237b46606}, - {0x693c08747876c8f7, 0x22c9850bf9cf80f0, 0x8e9071dab950c124, 0x89bc62d61c7baf23, 0xbc6be2d8dad57c23, 0x17916987aa14a122}, - {0x1be3ff439c1316fd, 0x9965243a7571dfa7, 0xc7f7f62962f5cd81, 0x32c6aa9af394361c, 0xbbc2ee18e1c227f4, 0x0c102cbac531bb34}, - {0x997614c97bacbf07, 0x61f86372b99192c0, 0x5b8c95fc14353fc3, 0xca2b066c2a87492f, 0x16178f5bbf698711, 0x12a6dcd7f0f4e0e8}, - {0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - {0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0}, - }, - { - {0x2b567ff3e2837267, 0x1d4d9e57b958a767, 0xce028fea04bd7373, 0xcc31a30a0b6cd3df, 0x7d7b18a682692693, 0x0d300744d42a0310}, - {0x99c2555fa542493f, 0xfe7f53cc4874f878, 0x5df0608b8f97608a, 0x14e03832052b49c8, 0x706326a6957dd5a4, 0x0a8dadd9c2414555}, - {0x13d942922a5cf63a, 0x357e33e36e261e7d, 0xcf05a27c8456088d, 0x0000bd1de7ba50f0, 0x83d0c7532f8c1fde, 0x13f70bf38bbf2905}, - {0x5c57fd95bfafbdbb, 0x28a359a65e541707, 0x3983ceb4f6360b6d, 0xafe19ff6f97e6d53, 0xb3468f4550192bf7, 0x0bb6cde49d8ba257}, - {0x590b62c7ff8a513f, 0x314b4ce372cacefd, 0x6bef32ce94b8a800, 0x6ddf84a095713d5f, 0x64eace4cb0982191, 0x0386213c651b888d}, - {0xa5310a31111bbcdd, 0xa14ac0f5da148982, 0xf9ad9cc95423d2e9, 0xaa6ec095283ee4a7, 0xcf5b1f022e1c9107, 0x01fddf5aed881793}, - {0x65a572b0d7a7d950, 0xe25c2d8183473a19, 0xc2fcebe7cb877dbd, 0x05b2d36c769a89b0, 0xba12961be86e9efb, 0x07eb1b29c1dfde1f}, - {0x93e09572f7c4cd24, 0x364e929076795091, 0x8569467e68af51b5, 0xa47da89439f5340f, 0xf4fa918082e44d64, 0x0ad52ba3e6695a79}, - {0x911429844e0d5f54, 0xd03f51a3516bb233, 0x3d587e5640536e66, 0xfa86d2a3a9a73482, 0xa90ed5adf1ed5537, 0x149c9c326a5e7393}, - {0x462bbeb03c12921a, 0xdc9af5fa0a274a17, 0x9a558ebde836ebed, 0x649ef8f11a4fae46, 0x8100e1652b3cdc62, 0x1862bd62c291dacb}, - {0x05c9b8ca89f12c26, 0x0194160fa9b9ac4f, 0x6a643d5a6879fa2c, 0x14665bdd8846e19d, 0xbb1d0d53af3ff6bf, 0x12c7e1c3b28962e5}, - {0xb55ebf900b8a3e17, 0xfedc77ec1a9201c4, 0x1f07db10ea1a4df4, 0x0dfbd15dc41a594d, 0x389547f2334a5391, 0x02419f98165871a4}, - {0xb416af000745fc20, 0x8e563e9d1ea6d0f5, 0x7c763e17763a0652, 0x01458ef0159ebbef, 0x8346fe421f96bb13, 0x0d2d7b829ce324d2}, - {0x93096bb538d64615, 0x6f2a2619951d823a, 0x8f66b3ea59514fa4, 0xf563e63704f7092f, 0x724b136c4cf2d9fa, 0x046959cfcfd0bf49}, - {0xea748d4b6e405346, 0x91e9079c2c02d58f, 0x41064965946d9b59, 0xa06731f1d2bbe1ee, 0x07f897e267a33f1b, 0x1017290919210e5f}, - {0x872aa6c17d985097, 0xeecc53161264562a, 0x07afe37afff55002, 0x54759078e5be6838, 0xc4b92d15db8acca8, 0x106d87d1b51d13b9}, - }, - { - {0xeb6c359d47e52b1c, 0x18ef5f8a10634d60, 0xddfa71a0889d5b7e, 0x723e71dcc5fc1323, 0x52f45700b70d5c69, 0x0a8b981ee47691f1}, - {0x616a3c4f5535b9fb, 0x6f5f037395dbd911, 0xf25f4cc5e35c65da, 0x3e50dffea3c62658, 0x6a33dca523560776, 0x0fadeff77b6bfe3e}, - {0x2be9b66df470059c, 0x24a2c159a3d36742, 0x115dbe7ad10c2a37, 0xb6634a652ee5884d, 0x04fe8bb2b8d81af4, 0x01c2a7a256fe9c41}, - {0xf27bf8ef3b75a386, 0x898b367476c9073f, 0x24482e6b8c2f4e5f, 0xc8e0bbd6fe110806, 0x59b0c17f7631448a, 0x11037cd58b3dbfbd}, - {0x31c7912ea267eec6, 0x1dbf6f1c5fcdb700, 0xd30d4fe3ba86fdb1, 0x3cae528fbee9a2a4, 0xb1cce69b6aa9ad9a, 0x044393bb632d94fb}, - {0xc66ef6efeeb5c7e8, 0x9824c289dd72bb55, 0x71b1a4d2f119981d, 0x104fc1aafb0919cc, 0x0e49df01d942a628, 0x096c3a09773272d4}, - {0x9abc11eb5fadeff4, 0x32dca50a885728f0, 0xfb1fa3721569734c, 0xc4b76271ea6506b3, 0xd466a75599ce728e, 0x0c81d4645f4cb6ed}, - {0x4199f10e5b8be45b, 0xda64e495b1e87930, 0xcb353efe9b33e4ff, 0x9e9efb24aa6424c6, 0xf08d33680a237465, 0x0d3378023e4c7406}, - {0x7eb4ae92ec74d3a5, 0xc341b4aa9fac3497, 0x5be603899e907687, 0x03bfd9cca75cbdeb, 0x564c2935a96bfa93, 0x0ef3c33371e2fdb5}, - {0x7ee91fd449f6ac2e, 0xe5d5bd5cb9357a30, 0x773a8ca5196b1380, 0xd0fda172174ed023, 0x6cb95e0fa776aead, 0x0d22d5a40cec7cff}, - {0xf727e09285fd8519, 0xdc9d55a83017897b, 0x7549d8bd057894ae, 0x178419613d90d8f8, 0xfce95ebdeb5b490a, 0x0467ffaef23fc49e}, - {0xc1769e6a7c385f1b, 0x79bc930deac01c03, 0x5461c75a23ede3b5, 0x6e20829e5c230c45, 0x828e0f1e772a53cd, 0x116aefa749127bff}, - {0x101c10bf2744c10a, 0xbbf18d053a6a3154, 0xa0ecf39ef026f602, 0xfc009d4996dc5153, 0xb9000209d5bd08d3, 0x189e5fe4470cd73c}, - {0x7ebd546ca1575ed2, 0xe47d5a981d081b55, 0x57b2b625b6d4ca21, 0xb0a1ba04228520cc, 0x98738983c2107ff3, 0x13dddbc4799d81d6}, - {0x09319f2e39834935, 0x039e952cbdb05c21, 0x55ba77a9a2f76493, 0xfd04e3dfc6086467, 0xfb95832e7d78742e, 0x0ef9c24eccaf5e0e}, - {0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - }, -} - -var isogenyConstantsG2 = [4][4]*fe2{ - { - { - fe{0x47f671c71ce05e62, 0x06dd57071206393e, 0x7c80cd2af3fd71a2, 0x048103ea9e6cd062, 0xc54516acc8d037f6, 0x13808f550920ea41}, - fe{0x47f671c71ce05e62, 0x06dd57071206393e, 0x7c80cd2af3fd71a2, 0x048103ea9e6cd062, 0xc54516acc8d037f6, 0x13808f550920ea41}, - }, - { - fe{0, 0, 0, 0, 0, 0}, - fe{0x5fe55555554c71d0, 0x873fffdd236aaaa3, 0x6a6b4619b26ef918, 0x21c2888408874945, 0x2836cda7028cabc5, 0x0ac73310a7fd5abd}, - }, - { - fe{0x0a0c5555555971c3, 0xdb0c00101f9eaaae, 0xb1fb2f941d797997, 0xd3960742ef416e1c, 0xb70040e2c20556f4, 0x149d7861e581393b}, - fe{0xaff2aaaaaaa638e8, 0x439fffee91b55551, 0xb535a30cd9377c8c, 0x90e144420443a4a2, 0x941b66d3814655e2, 0x0563998853fead5e}, - }, - { - fe{0x40aac71c71c725ed, 0x190955557a84e38e, 0xd817050a8f41abc3, 0xd86485d4c87f6fb1, 0x696eb479f885d059, 0x198e1a74328002d2}, - fe{0, 0, 0, 0, 0, 0}, - }, - }, - { - { - fe{0, 0, 0, 0, 0, 0}, - fe{0x1f3affffff13ab97, 0xf25bfc611da3ff3e, 0xca3757cb3819b208, 0x3e6427366f8cec18, 0x03977bc86095b089, 0x04f69db13f39a952}, - }, - { - fe{0x447600000027552e, 0xdcb8009a43480020, 0x6f7ee9ce4a6e8b59, 0xb10330b7c0a95bc6, 0x6140b1fcfb1e54b7, 0x0381be097f0bb4e1}, - fe{0x7588ffffffd8557d, 0x41f3ff646e0bffdf, 0xf7b1e8d2ac426aca, 0xb3741acd32dbb6f8, 0xe9daf5b9482d581f, 0x167f53e0ba7431b8}, - }, - { - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - fe{0, 0, 0, 0, 0, 0}, - }, - { - fe{0, 0, 0, 0, 0, 0}, - fe{0, 0, 0, 0, 0, 0}, - }, - }, - { - { - fe{0x96d8f684bdfc77be, 0xb530e4f43b66d0e2, 0x184a88ff379652fd, 0x57cb23ecfae804e1, 0x0fd2e39eada3eba9, 0x08c8055e31c5d5c3}, - fe{0x96d8f684bdfc77be, 0xb530e4f43b66d0e2, 0x184a88ff379652fd, 0x57cb23ecfae804e1, 0x0fd2e39eada3eba9, 0x08c8055e31c5d5c3}, - }, - { - fe{0, 0, 0, 0, 0, 0}, - fe{0xbf0a71c71c91b406, 0x4d6d55d28b7638fd, 0x9d82f98e5f205aee, 0xa27aa27b1d1a18d5, 0x02c3b2b2d2938e86, 0x0c7d13420b09807f}, - }, - { - fe{0xd7f9555555531c74, 0x21cffff748daaaa8, 0x5a9ad1866c9bbe46, 0x4870a2210221d251, 0x4a0db369c0a32af1, 0x02b1ccc429ff56af}, - fe{0xe205aaaaaaac8e37, 0xfcdc000768795556, 0x0c96011a8a1537dd, 0x1c06a963f163406e, 0x010df44c82a881e6, 0x174f45260f808feb}, - }, - { - fe{0xa470bda12f67f35c, 0xc0fe38e23327b425, 0xc9d3d0f2c6f0678d, 0x1c55c9935b5a982e, 0x27f6c0e2f0746764, 0x117c5e6e28aa9054}, - fe{0, 0, 0, 0, 0, 0}, - }, - }, - { - { - fe{0x0162fffffa765adf, 0x8f7bea480083fb75, 0x561b3c2259e93611, 0x11e19fc1a9c875d5, 0xca713efc00367660, 0x03c6a03d41da1151}, - fe{0x0162fffffa765adf, 0x8f7bea480083fb75, 0x561b3c2259e93611, 0x11e19fc1a9c875d5, 0xca713efc00367660, 0x03c6a03d41da1151}, - }, - { - fe{0, 0, 0, 0, 0, 0}, - fe{0x5db0fffffd3b02c5, 0xd713f52358ebfdba, 0x5ea60761a84d161a, 0xbb2c75a34ea6c44a, 0x0ac6735921c1119b, 0x0ee3d913bdacfbf6}, - }, - { - fe{0x66b10000003affc5, 0xcb1400e764ec0030, 0xa73e5eb56fa5d106, 0x8984c913a0fe09a9, 0x11e10afb78ad7f13, 0x05429d0e3e918f52}, - fe{0x534dffffffc4aae6, 0x5397ff174c67ffcf, 0xbff273eb870b251d, 0xdaf2827152870915, 0x393a9cbaca9e2dc3, 0x14be74dbfaee5748}, - }, - { - fe{0x760900000002fffd, 0xebf4000bc40c0002, 0x5f48985753c758ba, 0x77ce585370525745, 0x5c071a97a256ec6d, 0x15f65ec3fa80e493}, - fe{0, 0, 0, 0, 0, 0}, - }, - }, -} diff --git a/crypto/bls12381/pairing.go b/crypto/bls12381/pairing.go deleted file mode 100644 index a5620525993..00000000000 --- a/crypto/bls12381/pairing.go +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bls12381 - -type pair struct { - g1 *PointG1 - g2 *PointG2 -} - -func newPair(g1 *PointG1, g2 *PointG2) pair { - return pair{g1, g2} -} - -// Engine is BLS12-381 elliptic curve pairing engine -type Engine struct { - G1 *G1 - G2 *G2 - fp12 *fp12 - fp2 *fp2 - pairingEngineTemp - pairs []pair -} - -// NewPairingEngine creates new pairing engine instance. -func NewPairingEngine() *Engine { - fp2 := newFp2() - fp6 := newFp6(fp2) - fp12 := newFp12(fp6) - g1 := NewG1() - g2 := newG2(fp2) - return &Engine{ - fp2: fp2, - fp12: fp12, - G1: g1, - G2: g2, - pairingEngineTemp: newEngineTemp(), - } -} - -type pairingEngineTemp struct { - t2 [10]*fe2 - t12 [9]fe12 -} - -func newEngineTemp() pairingEngineTemp { - t2 := [10]*fe2{} - for i := 0; i < 10; i++ { - t2[i] = &fe2{} - } - t12 := [9]fe12{} - return pairingEngineTemp{t2, t12} -} - -// AddPair adds a g1, g2 point pair to pairing engine -func (e *Engine) AddPair(g1 *PointG1, g2 *PointG2) *Engine { - p := newPair(g1, g2) - if !e.isZero(p) { - e.affine(p) - e.pairs = append(e.pairs, p) - } - return e -} - -// AddPairInv adds a G1, G2 point pair to pairing engine. G1 point is negated. -func (e *Engine) AddPairInv(g1 *PointG1, g2 *PointG2) *Engine { - e.G1.Neg(g1, g1) - e.AddPair(g1, g2) - return e -} - -// Reset deletes added pairs. -func (e *Engine) Reset() *Engine { - e.pairs = []pair{} - return e -} - -func (e *Engine) isZero(p pair) bool { - return e.G1.IsZero(p.g1) || e.G2.IsZero(p.g2) -} - -func (e *Engine) affine(p pair) { - e.G1.Affine(p.g1) - e.G2.Affine(p.g2) -} - -func (e *Engine) doublingStep(coeff *[3]fe2, r *PointG2) { - // Adaptation of Formula 3 in https://eprint.iacr.org/2010/526.pdf - fp2 := e.fp2 - t := e.t2 - fp2.mul(t[0], &r[0], &r[1]) - fp2.mulByFq(t[0], t[0], twoInv) - fp2.square(t[1], &r[1]) - fp2.square(t[2], &r[2]) - fp2.double(t[7], t[2]) - fp2.add(t[7], t[7], t[2]) - fp2.mulByB(t[3], t[7]) - fp2.double(t[4], t[3]) - fp2.add(t[4], t[4], t[3]) - fp2.add(t[5], t[1], t[4]) - fp2.mulByFq(t[5], t[5], twoInv) - fp2.add(t[6], &r[1], &r[2]) - fp2.square(t[6], t[6]) - fp2.add(t[7], t[2], t[1]) - fp2.sub(t[6], t[6], t[7]) - fp2.sub(&coeff[0], t[3], t[1]) - fp2.square(t[7], &r[0]) - fp2.sub(t[4], t[1], t[4]) - fp2.mul(&r[0], t[4], t[0]) - fp2.square(t[2], t[3]) - fp2.double(t[3], t[2]) - fp2.add(t[3], t[3], t[2]) - fp2.square(t[5], t[5]) - fp2.sub(&r[1], t[5], t[3]) - fp2.mul(&r[2], t[1], t[6]) - fp2.double(t[0], t[7]) - fp2.add(&coeff[1], t[0], t[7]) - fp2.neg(&coeff[2], t[6]) -} - -func (e *Engine) additionStep(coeff *[3]fe2, r, q *PointG2) { - // Algorithm 12 in https://eprint.iacr.org/2010/526.pdf - fp2 := e.fp2 - t := e.t2 - fp2.mul(t[0], &q[1], &r[2]) - fp2.neg(t[0], t[0]) - fp2.add(t[0], t[0], &r[1]) - fp2.mul(t[1], &q[0], &r[2]) - fp2.neg(t[1], t[1]) - fp2.add(t[1], t[1], &r[0]) - fp2.square(t[2], t[0]) - fp2.square(t[3], t[1]) - fp2.mul(t[4], t[1], t[3]) - fp2.mul(t[2], &r[2], t[2]) - fp2.mul(t[3], &r[0], t[3]) - fp2.double(t[5], t[3]) - fp2.sub(t[5], t[4], t[5]) - fp2.add(t[5], t[5], t[2]) - fp2.mul(&r[0], t[1], t[5]) - fp2.sub(t[2], t[3], t[5]) - fp2.mul(t[2], t[2], t[0]) - fp2.mul(t[3], &r[1], t[4]) - fp2.sub(&r[1], t[2], t[3]) - fp2.mul(&r[2], &r[2], t[4]) - fp2.mul(t[2], t[1], &q[1]) - fp2.mul(t[3], t[0], &q[0]) - fp2.sub(&coeff[0], t[3], t[2]) - fp2.neg(&coeff[1], t[0]) - coeff[2].set(t[1]) -} - -func (e *Engine) preCompute(ellCoeffs *[68][3]fe2, twistPoint *PointG2) { - // Algorithm 5 in https://eprint.iacr.org/2019/077.pdf - if e.G2.IsZero(twistPoint) { - return - } - r := new(PointG2).Set(twistPoint) - j := 0 - for i := x.BitLen() - 2; i >= 0; i-- { - e.doublingStep(&ellCoeffs[j], r) - if x.Bit(i) != 0 { - j++ - ellCoeffs[j] = fe6{} - e.additionStep(&ellCoeffs[j], r, twistPoint) - } - j++ - } -} - -func (e *Engine) millerLoop(f *fe12) { - pairs := e.pairs - ellCoeffs := make([][68][3]fe2, len(pairs)) - for i := 0; i < len(pairs); i++ { - e.preCompute(&ellCoeffs[i], pairs[i].g2) - } - fp12, fp2 := e.fp12, e.fp2 - t := e.t2 - f.one() - j := 0 - for i := 62; /* x.BitLen() - 2 */ i >= 0; i-- { - if i != 62 { - fp12.square(f, f) - } - for i := 0; i <= len(pairs)-1; i++ { //nolint:govet - fp2.mulByFq(t[0], &ellCoeffs[i][j][2], &pairs[i].g1[1]) - fp2.mulByFq(t[1], &ellCoeffs[i][j][1], &pairs[i].g1[0]) - fp12.mulBy014Assign(f, &ellCoeffs[i][j][0], t[1], t[0]) - } - if x.Bit(i) != 0 { - j++ - for i := 0; i <= len(pairs)-1; i++ { //nolint:govet - fp2.mulByFq(t[0], &ellCoeffs[i][j][2], &pairs[i].g1[1]) - fp2.mulByFq(t[1], &ellCoeffs[i][j][1], &pairs[i].g1[0]) - fp12.mulBy014Assign(f, &ellCoeffs[i][j][0], t[1], t[0]) - } - } - j++ - } - fp12.conjugate(f, f) -} - -func (e *Engine) exp(c, a *fe12) { - fp12 := e.fp12 - fp12.cyclotomicExp(c, a, x) - fp12.conjugate(c, c) -} - -func (e *Engine) finalExp(f *fe12) { - fp12 := e.fp12 - t := e.t12 - // easy part - fp12.frobeniusMap(&t[0], f, 6) - fp12.inverse(&t[1], f) - fp12.mul(&t[2], &t[0], &t[1]) - t[1].set(&t[2]) - fp12.frobeniusMapAssign(&t[2], 2) - fp12.mulAssign(&t[2], &t[1]) - fp12.cyclotomicSquare(&t[1], &t[2]) - fp12.conjugate(&t[1], &t[1]) - // hard part - e.exp(&t[3], &t[2]) - fp12.cyclotomicSquare(&t[4], &t[3]) - fp12.mul(&t[5], &t[1], &t[3]) - e.exp(&t[1], &t[5]) - e.exp(&t[0], &t[1]) - e.exp(&t[6], &t[0]) - fp12.mulAssign(&t[6], &t[4]) - e.exp(&t[4], &t[6]) - fp12.conjugate(&t[5], &t[5]) - fp12.mulAssign(&t[4], &t[5]) - fp12.mulAssign(&t[4], &t[2]) - fp12.conjugate(&t[5], &t[2]) - fp12.mulAssign(&t[1], &t[2]) - fp12.frobeniusMapAssign(&t[1], 3) - fp12.mulAssign(&t[6], &t[5]) - fp12.frobeniusMapAssign(&t[6], 1) - fp12.mulAssign(&t[3], &t[0]) - fp12.frobeniusMapAssign(&t[3], 2) - fp12.mulAssign(&t[3], &t[1]) - fp12.mulAssign(&t[3], &t[6]) - fp12.mul(f, &t[3], &t[4]) -} - -func (e *Engine) calculate() *fe12 { - f := e.fp12.one() - if len(e.pairs) == 0 { - return f - } - e.millerLoop(f) - e.finalExp(f) - return f -} - -// Check computes pairing and checks if result is equal to one -func (e *Engine) Check() bool { - return e.calculate().isOne() -} - -// Result computes pairing and returns target group element as result. -func (e *Engine) Result() *E { - r := e.calculate() - e.Reset() - return r -} - -// GT returns target group instance. -func (e *Engine) GT() *GT { - return NewGT() -} diff --git a/crypto/bls12381/pairing_test.go b/crypto/bls12381/pairing_test.go deleted file mode 100644 index 4c9bf580405..00000000000 --- a/crypto/bls12381/pairing_test.go +++ /dev/null @@ -1,230 +0,0 @@ -package bls12381 - -import ( - "math/big" - "testing" - - "github.com/ledgerwatch/erigon/common" -) - -func TestPairingExpected(t *testing.T) { - bls := NewPairingEngine() - G1, G2 := bls.G1, bls.G2 - GT := bls.GT() - expected, err := GT.FromBytes( - common.FromHex("" + - "0f41e58663bf08cf068672cbd01a7ec73baca4d72ca93544deff686bfd6df543d48eaa24afe47e1efde449383b676631" + - "04c581234d086a9902249b64728ffd21a189e87935a954051c7cdba7b3872629a4fafc05066245cb9108f0242d0fe3ef" + - "03350f55a7aefcd3c31b4fcb6ce5771cc6a0e9786ab5973320c806ad360829107ba810c5a09ffdd9be2291a0c25a99a2" + - "11b8b424cd48bf38fcef68083b0b0ec5c81a93b330ee1a677d0d15ff7b984e8978ef48881e32fac91b93b47333e2ba57" + - "06fba23eb7c5af0d9f80940ca771b6ffd5857baaf222eb95a7d2809d61bfe02e1bfd1b68ff02f0b8102ae1c2d5d5ab1a" + - "19f26337d205fb469cd6bd15c3d5a04dc88784fbb3d0b2dbdea54d43b2b73f2cbb12d58386a8703e0f948226e47ee89d" + - "018107154f25a764bd3c79937a45b84546da634b8f6be14a8061e55cceba478b23f7dacaa35c8ca78beae9624045b4b6" + - "01b2f522473d171391125ba84dc4007cfbf2f8da752f7c74185203fcca589ac719c34dffbbaad8431dad1c1fb597aaa5" + - "193502b86edb8857c273fa075a50512937e0794e1e65a7617c90d8bd66065b1fffe51d7a579973b1315021ec3c19934f" + - "1368bb445c7c2d209703f239689ce34c0378a68e72a6b3b216da0e22a5031b54ddff57309396b38c881c4c849ec23e87" + - "089a1c5b46e5110b86750ec6a532348868a84045483c92b7af5af689452eafabf1a8943e50439f1d59882a98eaa0170f" + - "1250ebd871fc0a92a7b2d83168d0d727272d441befa15c503dd8e90ce98db3e7b6d194f60839c508a84305aaca1789b6", - ), - ) - if err != nil { - t.Fatal(err) - } - r := bls.AddPair(G1.One(), G2.One()).Result() - if !r.Equal(expected) { - t.Fatal("bad pairing") - } - if !GT.IsValid(r) { - t.Fatal("element is not in correct subgroup") - } -} - -func TestPairingNonDegeneracy(t *testing.T) { - bls := NewPairingEngine() - G1, G2 := bls.G1, bls.G2 - g1Zero, g2Zero, g1One, g2One := G1.Zero(), G2.Zero(), G1.One(), G2.One() - GT := bls.GT() - // e(g1^a, g2^b) != 1 - bls.Reset() - { - bls.AddPair(g1One, g2One) - e := bls.Result() - if e.IsOne() { - t.Fatal("pairing result is not expected to be one") - } - if !GT.IsValid(e) { - t.Fatal("pairing result is not valid") - } - } - // e(g1^a, 0) == 1 - bls.Reset() - { - bls.AddPair(g1One, g2Zero) - e := bls.Result() - if !e.IsOne() { - t.Fatal("pairing result is expected to be one") - } - } - // e(0, g2^b) == 1 - bls.Reset() - { - bls.AddPair(g1Zero, g2One) - e := bls.Result() - if !e.IsOne() { - t.Fatal("pairing result is expected to be one") - } - } - // - bls.Reset() - { - bls.AddPair(g1Zero, g2One) - bls.AddPair(g1One, g2Zero) - bls.AddPair(g1Zero, g2Zero) - e := bls.Result() - if !e.IsOne() { - t.Fatal("pairing result is expected to be one") - } - } - // - bls.Reset() - { - expected, err := GT.FromBytes( - common.FromHex("" + - "0f41e58663bf08cf068672cbd01a7ec73baca4d72ca93544deff686bfd6df543d48eaa24afe47e1efde449383b676631" + - "04c581234d086a9902249b64728ffd21a189e87935a954051c7cdba7b3872629a4fafc05066245cb9108f0242d0fe3ef" + - "03350f55a7aefcd3c31b4fcb6ce5771cc6a0e9786ab5973320c806ad360829107ba810c5a09ffdd9be2291a0c25a99a2" + - "11b8b424cd48bf38fcef68083b0b0ec5c81a93b330ee1a677d0d15ff7b984e8978ef48881e32fac91b93b47333e2ba57" + - "06fba23eb7c5af0d9f80940ca771b6ffd5857baaf222eb95a7d2809d61bfe02e1bfd1b68ff02f0b8102ae1c2d5d5ab1a" + - "19f26337d205fb469cd6bd15c3d5a04dc88784fbb3d0b2dbdea54d43b2b73f2cbb12d58386a8703e0f948226e47ee89d" + - "018107154f25a764bd3c79937a45b84546da634b8f6be14a8061e55cceba478b23f7dacaa35c8ca78beae9624045b4b6" + - "01b2f522473d171391125ba84dc4007cfbf2f8da752f7c74185203fcca589ac719c34dffbbaad8431dad1c1fb597aaa5" + - "193502b86edb8857c273fa075a50512937e0794e1e65a7617c90d8bd66065b1fffe51d7a579973b1315021ec3c19934f" + - "1368bb445c7c2d209703f239689ce34c0378a68e72a6b3b216da0e22a5031b54ddff57309396b38c881c4c849ec23e87" + - "089a1c5b46e5110b86750ec6a532348868a84045483c92b7af5af689452eafabf1a8943e50439f1d59882a98eaa0170f" + - "1250ebd871fc0a92a7b2d83168d0d727272d441befa15c503dd8e90ce98db3e7b6d194f60839c508a84305aaca1789b6", - ), - ) - if err != nil { - t.Fatal(err) - } - bls.AddPair(g1Zero, g2One) - bls.AddPair(g1One, g2Zero) - bls.AddPair(g1Zero, g2Zero) - bls.AddPair(g1One, g2One) - e := bls.Result() - if !e.Equal(expected) { - t.Fatal("bad pairing") - } - } -} - -func TestPairingBilinearity(t *testing.T) { - bls := NewPairingEngine() - g1, g2 := bls.G1, bls.G2 - gt := bls.GT() - // e(a*G1, b*G2) = e(G1, G2)^c - { - a, b := big.NewInt(17), big.NewInt(117) - c := new(big.Int).Mul(a, b) - G1, G2 := g1.One(), g2.One() - e0 := bls.AddPair(G1, G2).Result() - P1, P2 := g1.New(), g2.New() - g1.MulScalar(P1, G1, a) - g2.MulScalar(P2, G2, b) - e1 := bls.AddPair(P1, P2).Result() - gt.Exp(e0, e0, c) - if !e0.Equal(e1) { - t.Fatal("bad pairing, 1") - } - } - // e(a * G1, b * G2) = e((a + b) * G1, G2) - { - // scalars - a, b := big.NewInt(17), big.NewInt(117) - c := new(big.Int).Mul(a, b) - // LHS - G1, G2 := g1.One(), g2.One() - g1.MulScalar(G1, G1, c) - bls.AddPair(G1, G2) - // RHS - P1, P2 := g1.One(), g2.One() - g1.MulScalar(P1, P1, a) - g2.MulScalar(P2, P2, b) - bls.AddPairInv(P1, P2) - // should be one - if !bls.Check() { - t.Fatal("bad pairing, 2") - } - } - // e(a * G1, b * G2) = e((a + b) * G1, G2) - { - // scalars - a, b := big.NewInt(17), big.NewInt(117) - c := new(big.Int).Mul(a, b) - // LHS - G1, G2 := g1.One(), g2.One() - g2.MulScalar(G2, G2, c) - bls.AddPair(G1, G2) - // RHS - H1, H2 := g1.One(), g2.One() - g1.MulScalar(H1, H1, a) - g2.MulScalar(H2, H2, b) - bls.AddPairInv(H1, H2) - // should be one - if !bls.Check() { - t.Fatal("bad pairing, 3") - } - } -} - -func TestPairingMulti(t *testing.T) { - // e(G1, G2) ^ t == e(a01 * G1, a02 * G2) * e(a11 * G1, a12 * G2) * ... * e(an1 * G1, an2 * G2) - // where t = sum(ai1 * ai2) - bls := NewPairingEngine() - g1, g2 := bls.G1, bls.G2 - numOfPair := 100 - targetExp := new(big.Int) - // RHS - for i := 0; i < numOfPair; i++ { - // (ai1 * G1, ai2 * G2) - a1, a2 := randScalar(q), randScalar(q) - P1, P2 := g1.One(), g2.One() - g1.MulScalar(P1, P1, a1) - g2.MulScalar(P2, P2, a2) - bls.AddPair(P1, P2) - // accumulate targetExp - // t += (ai1 * ai2) - a1.Mul(a1, a2) - targetExp.Add(targetExp, a1) - } - // LHS - // e(t * G1, G2) - T1, T2 := g1.One(), g2.One() - g1.MulScalar(T1, T1, targetExp) - bls.AddPairInv(T1, T2) - if !bls.Check() { - t.Fatal("fail multi pairing") - } -} - -func TestPairingEmpty(t *testing.T) { - bls := NewPairingEngine() - if !bls.Check() { - t.Fatal("empty check should be accepted") - } - if !bls.Result().IsOne() { - t.Fatal("empty pairing result should be one") - } -} - -func BenchmarkPairing(t *testing.B) { - bls := NewPairingEngine() - g1, g2, gt := bls.G1, bls.G2, bls.GT() - bls.AddPair(g1.One(), g2.One()) - e := gt.New() - t.ResetTimer() - for i := 0; i < t.N; i++ { - e = bls.calculate() - } - _ = e -} diff --git a/crypto/bls12381/swu.go b/crypto/bls12381/swu.go deleted file mode 100644 index 40d8c9154db..00000000000 --- a/crypto/bls12381/swu.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bls12381 - -// swuMapG1 is implementation of Simplified Shallue-van de Woestijne-Ulas Method -// follows the implmentation at draft-irtf-cfrg-hash-to-curve-06. -func swuMapG1(u *fe) (*fe, *fe) { - var params = swuParamsForG1 - var tv [4]*fe - for i := 0; i < 4; i++ { - tv[i] = new(fe) - } - square(tv[0], u) - mul(tv[0], tv[0], params.z) - square(tv[1], tv[0]) - x1 := new(fe) - add(x1, tv[0], tv[1]) - inverse(x1, x1) - e1 := x1.isZero() - one := new(fe).one() - add(x1, x1, one) - if e1 { - x1.set(params.zInv) - } - mul(x1, x1, params.minusBOverA) - gx1 := new(fe) - square(gx1, x1) - add(gx1, gx1, params.a) - mul(gx1, gx1, x1) - add(gx1, gx1, params.b) - x2 := new(fe) - mul(x2, tv[0], x1) - mul(tv[1], tv[0], tv[1]) - gx2 := new(fe) - mul(gx2, gx1, tv[1]) - e2 := !isQuadraticNonResidue(gx1) - x, y2 := new(fe), new(fe) - if e2 { - x.set(x1) - y2.set(gx1) - } else { - x.set(x2) - y2.set(gx2) - } - y := new(fe) - sqrt(y, y2) - if y.sign() != u.sign() { - neg(y, y) - } - return x, y -} - -// swuMapG2 is implementation of Simplified Shallue-van de Woestijne-Ulas Method -// defined at draft-irtf-cfrg-hash-to-curve-06. -func swuMapG2(e *fp2, u *fe2) (*fe2, *fe2) { - if e == nil { - e = newFp2() - } - params := swuParamsForG2 - var tv [4]*fe2 - for i := 0; i < 4; i++ { - tv[i] = e.new() - } - e.square(tv[0], u) - e.mul(tv[0], tv[0], params.z) - e.square(tv[1], tv[0]) - x1 := e.new() - e.add(x1, tv[0], tv[1]) - e.inverse(x1, x1) - e1 := x1.isZero() - e.add(x1, x1, e.one()) - if e1 { - x1.set(params.zInv) - } - e.mul(x1, x1, params.minusBOverA) - gx1 := e.new() - e.square(gx1, x1) - e.add(gx1, gx1, params.a) - e.mul(gx1, gx1, x1) - e.add(gx1, gx1, params.b) - x2 := e.new() - e.mul(x2, tv[0], x1) - e.mul(tv[1], tv[0], tv[1]) - gx2 := e.new() - e.mul(gx2, gx1, tv[1]) - e2 := !e.isQuadraticNonResidue(gx1) - x, y2 := e.new(), e.new() - if e2 { - x.set(x1) - y2.set(gx1) - } else { - x.set(x2) - y2.set(gx2) - } - y := e.new() - e.sqrt(y, y2) - if y.sign() != u.sign() { - e.neg(y, y) - } - return x, y -} - -var swuParamsForG1 = struct { - z *fe - zInv *fe - a *fe - b *fe - minusBOverA *fe -}{ - a: &fe{0x2f65aa0e9af5aa51, 0x86464c2d1e8416c3, 0xb85ce591b7bd31e2, 0x27e11c91b5f24e7c, 0x28376eda6bfc1835, 0x155455c3e5071d85}, - b: &fe{0xfb996971fe22a1e0, 0x9aa93eb35b742d6f, 0x8c476013de99c5c4, 0x873e27c3a221e571, 0xca72b5e45a52d888, 0x06824061418a386b}, - z: &fe{0x886c00000023ffdc, 0x0f70008d3090001d, 0x77672417ed5828c3, 0x9dac23e943dc1740, 0x50553f1b9c131521, 0x078c712fbe0ab6e8}, - zInv: &fe{0x0e8a2e8ba2e83e10, 0x5b28ba2ca4d745d1, 0x678cd5473847377a, 0x4c506dd8a8076116, 0x9bcb227d79284139, 0x0e8d3154b0ba099a}, - minusBOverA: &fe{0x052583c93555a7fe, 0x3b40d72430f93c82, 0x1b75faa0105ec983, 0x2527e7dc63851767, 0x99fffd1f34fc181d, 0x097cab54770ca0d3}, -} - -var swuParamsForG2 = struct { - z *fe2 - zInv *fe2 - a *fe2 - b *fe2 - minusBOverA *fe2 -}{ - a: &fe2{ - fe{0, 0, 0, 0, 0, 0}, - fe{0xe53a000003135242, 0x01080c0fdef80285, 0xe7889edbe340f6bd, 0x0b51375126310601, 0x02d6985717c744ab, 0x1220b4e979ea5467}, - }, - b: &fe2{ - fe{0x22ea00000cf89db2, 0x6ec832df71380aa4, 0x6e1b94403db5a66e, 0x75bf3c53a79473ba, 0x3dd3a569412c0a34, 0x125cdb5e74dc4fd1}, - fe{0x22ea00000cf89db2, 0x6ec832df71380aa4, 0x6e1b94403db5a66e, 0x75bf3c53a79473ba, 0x3dd3a569412c0a34, 0x125cdb5e74dc4fd1}, - }, - z: &fe2{ - fe{0x87ebfffffff9555c, 0x656fffe5da8ffffa, 0x0fd0749345d33ad2, 0xd951e663066576f4, 0xde291a3d41e980d3, 0x0815664c7dfe040d}, - fe{0x43f5fffffffcaaae, 0x32b7fff2ed47fffd, 0x07e83a49a2e99d69, 0xeca8f3318332bb7a, 0xef148d1ea0f4c069, 0x040ab3263eff0206}, - }, - zInv: &fe2{ - fe{0xacd0000000011110, 0x9dd9999dc88ccccd, 0xb5ca2ac9b76352bf, 0xf1b574bcf4bc90ce, 0x42dab41f28a77081, 0x132fc6ac14cd1e12}, - fe{0xe396ffffffff2223, 0x4fbf332fcd0d9998, 0x0c4bbd3c1aff4cc4, 0x6b9c91267926ca58, 0x29ae4da6aef7f496, 0x10692e942f195791}, - }, - minusBOverA: &fe2{ - fe{0x903c555555474fb3, 0x5f98cc95ce451105, 0x9f8e582eefe0fade, 0xc68946b6aebbd062, 0x467a4ad10ee6de53, 0x0e7146f483e23a05}, - fe{0x29c2aaaaaab85af8, 0xbf133368e30eeefa, 0xc7a27a7206cffb45, 0x9dee04ce44c9425c, 0x04a15ce53464ce83, 0x0b8fcaf5b59dac95}, - }, -} diff --git a/crypto/bls12381/utils.go b/crypto/bls12381/utils.go deleted file mode 100644 index e5dd88f14bb..00000000000 --- a/crypto/bls12381/utils.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2020 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bls12381 - -import ( - "errors" - "math/big" - - "github.com/ledgerwatch/erigon/common" -) - -func bigFromHex(hex string) *big.Int { - return new(big.Int).SetBytes(common.FromHex(hex)) -} - -// decodeFieldElement expects 64 byte input with zero top 16 bytes, -// returns lower 48 bytes. -func decodeFieldElement(in []byte) ([]byte, error) { - if len(in) != 64 { - return nil, errors.New("invalid field element length") - } - // check top bytes - for i := 0; i < 16; i++ { - if in[i] != byte(0x00) { - return nil, errors.New("invalid field element top bytes") - } - } - out := make([]byte, 48) - copy(out, in[16:]) - return out, nil -} diff --git a/crypto/signature_test.go b/crypto/signature_test.go index 1a033a96766..98336d43505 100644 --- a/crypto/signature_test.go +++ b/crypto/signature_test.go @@ -71,7 +71,7 @@ func TestVerifySignature(t *testing.T) { wrongkey := common.CopyBytes(testpubkey) wrongkey[10]++ if VerifySignature(wrongkey, testmsg, sig) { - t.Errorf("signature valid with with wrong public key") + t.Errorf("signature valid with wrong public key") } } diff --git a/debug.Dockerfile b/debug.Dockerfile index 93218cb40b8..e5c7b08ff5f 100644 --- a/debug.Dockerfile +++ b/debug.Dockerfile @@ -1,5 +1,5 @@ # syntax = docker/dockerfile:1.2 -FROM docker.io/library/golang:1.20-alpine3.17 AS builder +FROM docker.io/library/golang:1.21-alpine3.17 AS builder RUN apk --no-cache add build-base linux-headers git bash ca-certificates libstdc++ @@ -16,7 +16,7 @@ RUN --mount=type=cache,target=/root/.cache \ make all -FROM docker.io/library/golang:1.20-alpine3.17 AS tools-builder +FROM docker.io/library/golang:1.21-alpine3.17 AS tools-builder RUN apk --no-cache add build-base linux-headers git bash ca-certificates libstdc++ WORKDIR /app diff --git a/diagnostics/block_body_download_stats.go b/diagnostics/block_body_download_stats.go index 4903e1a8c99..a97c4a6493c 100644 --- a/diagnostics/block_body_download_stats.go +++ b/diagnostics/block_body_download_stats.go @@ -10,6 +10,10 @@ import ( ) func SetupBlockBodyDownload(metricsMux *http.ServeMux) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/block_body_download", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") writeBlockBodyDownload(w, r) diff --git a/diagnostics/bodies_info.go b/diagnostics/bodies_info.go new file mode 100644 index 00000000000..795d23c38b2 --- /dev/null +++ b/diagnostics/bodies_info.go @@ -0,0 +1,25 @@ +package diagnostics + +import ( + "encoding/json" + "net/http" + + diaglib "github.com/ledgerwatch/erigon-lib/diagnostics" +) + +func SetupBodiesAccess(metricsMux *http.ServeMux, diag *diaglib.DiagnosticClient) { + if metricsMux == nil { + return + } + + metricsMux.HandleFunc("/bodies", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + writeBodies(w, diag) + }) + +} + +func writeBodies(w http.ResponseWriter, diag *diaglib.DiagnosticClient) { + json.NewEncoder(w).Encode(diag.GetBodiesInfo()) +} diff --git a/diagnostics/bootnodes.go b/diagnostics/bootnodes.go index fba0982881e..00fd24c25ed 100644 --- a/diagnostics/bootnodes.go +++ b/diagnostics/bootnodes.go @@ -8,6 +8,10 @@ import ( ) func SetupBootnodesAccess(metricsMux *http.ServeMux, node *node.ErigonNode) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/bootnodes", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Content-Type", "application/json") diff --git a/diagnostics/cmd_line.go b/diagnostics/cmd_line.go index db4d9dcfdf5..a2050ca4397 100644 --- a/diagnostics/cmd_line.go +++ b/diagnostics/cmd_line.go @@ -8,6 +8,10 @@ import ( ) func SetupCmdLineAccess(metricsMux *http.ServeMux) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/cmdline", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Content-Type", "application/json") diff --git a/diagnostics/db.go b/diagnostics/db.go index 6769b29425e..e0c7a629561 100644 --- a/diagnostics/db.go +++ b/diagnostics/db.go @@ -16,6 +16,10 @@ import ( ) func SetupDbAccess(ctx *cli.Context, metricsMux *http.ServeMux) { + if metricsMux == nil { + return + } + var dataDir string if ctx.IsSet("datadir") { dataDir = ctx.String("datadir") diff --git a/diagnostics/diagnostic.go b/diagnostics/diagnostic.go deleted file mode 100644 index dcd332d9929..00000000000 --- a/diagnostics/diagnostic.go +++ /dev/null @@ -1,221 +0,0 @@ -package diagnostics - -import ( - "context" - "net/http" - - "github.com/ledgerwatch/erigon-lib/common" - diaglib "github.com/ledgerwatch/erigon-lib/diagnostics" - "github.com/ledgerwatch/erigon/turbo/node" - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli/v2" -) - -type DiagnosticClient struct { - ctx *cli.Context - metricsMux *http.ServeMux - node *node.ErigonNode - - syncStats diaglib.SyncStatistics -} - -func NewDiagnosticClient(ctx *cli.Context, metricsMux *http.ServeMux, node *node.ErigonNode) *DiagnosticClient { - return &DiagnosticClient{ctx: ctx, metricsMux: metricsMux, node: node, syncStats: diaglib.SyncStatistics{}} -} - -func (d *DiagnosticClient) Setup() { - d.runSnapshotListener() - d.runSegmentDownloadingListener() - d.runSegmentIndexingListener() - d.runSegmentIndexingFinishedListener() - d.runCurrentSyncStageListener() - d.runSyncStagesListListener() -} - -func (d *DiagnosticClient) runSnapshotListener() { - go func() { - ctx, ch, cancel := diaglib.Context[diaglib.SnapshotDownloadStatistics](context.Background(), 1) - defer cancel() - - rootCtx, _ := common.RootContext() - - diaglib.StartProviders(ctx, diaglib.TypeOf(diaglib.SnapshotDownloadStatistics{}), log.Root()) - for { - select { - case <-rootCtx.Done(): - cancel() - return - case info := <-ch: - d.syncStats.SnapshotDownload.Downloaded = info.Downloaded - d.syncStats.SnapshotDownload.Total = info.Total - d.syncStats.SnapshotDownload.TotalTime = info.TotalTime - d.syncStats.SnapshotDownload.DownloadRate = info.DownloadRate - d.syncStats.SnapshotDownload.UploadRate = info.UploadRate - d.syncStats.SnapshotDownload.Peers = info.Peers - d.syncStats.SnapshotDownload.Files = info.Files - d.syncStats.SnapshotDownload.Connections = info.Connections - d.syncStats.SnapshotDownload.Alloc = info.Alloc - d.syncStats.SnapshotDownload.Sys = info.Sys - d.syncStats.SnapshotDownload.DownloadFinished = info.DownloadFinished - d.syncStats.SnapshotDownload.TorrentMetadataReady = info.TorrentMetadataReady - - if info.DownloadFinished { - return - } - } - } - - }() -} - -func (d *DiagnosticClient) SyncStatistics() diaglib.SyncStatistics { - return d.syncStats -} - -func (d *DiagnosticClient) runSegmentDownloadingListener() { - go func() { - ctx, ch, cancel := diaglib.Context[diaglib.SegmentDownloadStatistics](context.Background(), 1) - defer cancel() - - rootCtx, _ := common.RootContext() - - diaglib.StartProviders(ctx, diaglib.TypeOf(diaglib.SegmentDownloadStatistics{}), log.Root()) - for { - select { - case <-rootCtx.Done(): - cancel() - return - case info := <-ch: - if d.syncStats.SnapshotDownload.SegmentsDownloading == nil { - d.syncStats.SnapshotDownload.SegmentsDownloading = map[string]diaglib.SegmentDownloadStatistics{} - } - - d.syncStats.SnapshotDownload.SegmentsDownloading[info.Name] = info - } - } - }() -} - -func (d *DiagnosticClient) runSegmentIndexingListener() { - go func() { - ctx, ch, cancel := diaglib.Context[diaglib.SnapshotIndexingStatistics](context.Background(), 1) - defer cancel() - - rootCtx, _ := common.RootContext() - - diaglib.StartProviders(ctx, diaglib.TypeOf(diaglib.SnapshotIndexingStatistics{}), log.Root()) - for { - select { - case <-rootCtx.Done(): - cancel() - return - case info := <-ch: - d.addOrUpdateSegmentIndexingState(info) - } - } - }() -} - -func (d *DiagnosticClient) runSegmentIndexingFinishedListener() { - go func() { - ctx, ch, cancel := diaglib.Context[diaglib.SnapshotSegmentIndexingFinishedUpdate](context.Background(), 1) - defer cancel() - - rootCtx, _ := common.RootContext() - - diaglib.StartProviders(ctx, diaglib.TypeOf(diaglib.SnapshotSegmentIndexingFinishedUpdate{}), log.Root()) - for { - select { - case <-rootCtx.Done(): - cancel() - return - case info := <-ch: - found := false - for i := range d.syncStats.SnapshotIndexing.Segments { - if d.syncStats.SnapshotIndexing.Segments[i].SegmentName == info.SegmentName { - found = true - d.syncStats.SnapshotIndexing.Segments[i].Percent = 100 - } - } - - if !found { - d.syncStats.SnapshotIndexing.Segments = append(d.syncStats.SnapshotIndexing.Segments, diaglib.SnapshotSegmentIndexingStatistics{ - SegmentName: info.SegmentName, - Percent: 100, - Alloc: 0, - Sys: 0, - }) - } - } - } - }() -} - -func (d *DiagnosticClient) addOrUpdateSegmentIndexingState(upd diaglib.SnapshotIndexingStatistics) { - if d.syncStats.SnapshotIndexing.Segments == nil { - d.syncStats.SnapshotIndexing.Segments = []diaglib.SnapshotSegmentIndexingStatistics{} - } - - for i := range upd.Segments { - found := false - for j := range d.syncStats.SnapshotIndexing.Segments { - if d.syncStats.SnapshotIndexing.Segments[j].SegmentName == upd.Segments[i].SegmentName { - d.syncStats.SnapshotIndexing.Segments[j].Percent = upd.Segments[i].Percent - d.syncStats.SnapshotIndexing.Segments[j].Alloc = upd.Segments[i].Alloc - d.syncStats.SnapshotIndexing.Segments[j].Sys = upd.Segments[i].Sys - found = true - break - } - } - - if !found { - d.syncStats.SnapshotIndexing.Segments = append(d.syncStats.SnapshotIndexing.Segments, upd.Segments[i]) - } - } - - d.syncStats.SnapshotIndexing.TimeElapsed = upd.TimeElapsed -} - -func (d *DiagnosticClient) runSyncStagesListListener() { - go func() { - ctx, ch, cancel := diaglib.Context[diaglib.SyncStagesList](context.Background(), 1) - defer cancel() - - rootCtx, _ := common.RootContext() - - diaglib.StartProviders(ctx, diaglib.TypeOf(diaglib.SyncStagesList{}), log.Root()) - for { - select { - case <-rootCtx.Done(): - cancel() - return - case info := <-ch: - d.syncStats.SyncStages.StagesList = info.Stages - return - } - } - }() -} - -func (d *DiagnosticClient) runCurrentSyncStageListener() { - go func() { - ctx, ch, cancel := diaglib.Context[diaglib.CurrentSyncStage](context.Background(), 1) - defer cancel() - - rootCtx, _ := common.RootContext() - - diaglib.StartProviders(ctx, diaglib.TypeOf(diaglib.CurrentSyncStage{}), log.Root()) - for { - select { - case <-rootCtx.Done(): - cancel() - return - case info := <-ch: - d.syncStats.SyncStages.CurrentStage = info.Stage - if int(d.syncStats.SyncStages.CurrentStage) >= len(d.syncStats.SyncStages.StagesList) { - return - } - } - } - }() -} diff --git a/diagnostics/flags.go b/diagnostics/flags.go index 9cdf0267031..cbcc11b3228 100644 --- a/diagnostics/flags.go +++ b/diagnostics/flags.go @@ -8,6 +8,10 @@ import ( ) func SetupFlagsAccess(ctx *cli.Context, metricsMux *http.ServeMux) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/flags", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Content-Type", "application/json") diff --git a/diagnostics/header_downloader_stats.go b/diagnostics/header_downloader_stats.go index a388d6fb4ae..0b9c4b48a76 100644 --- a/diagnostics/header_downloader_stats.go +++ b/diagnostics/header_downloader_stats.go @@ -10,6 +10,10 @@ import ( ) func SetupHeaderDownloadStats(metricsMux *http.ServeMux) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/headers_download", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") writeHeaderDownload(w, r) diff --git a/diagnostics/headers.go b/diagnostics/headers.go new file mode 100644 index 00000000000..82066609368 --- /dev/null +++ b/diagnostics/headers.go @@ -0,0 +1,24 @@ +package diagnostics + +import ( + "encoding/json" + "net/http" + + diaglib "github.com/ledgerwatch/erigon-lib/diagnostics" +) + +func SetupHeadersAccess(metricsMux *http.ServeMux, diag *diaglib.DiagnosticClient) { + if metricsMux == nil { + return + } + + metricsMux.HandleFunc("/headers", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + writeHeaders(w, diag) + }) +} + +func writeHeaders(w http.ResponseWriter, diag *diaglib.DiagnosticClient) { + json.NewEncoder(w).Encode(diag.GetHeaders()) +} diff --git a/diagnostics/logs.go b/diagnostics/logs.go index 72196aa79a4..f3d44e5c178 100644 --- a/diagnostics/logs.go +++ b/diagnostics/logs.go @@ -15,10 +15,15 @@ import ( "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon/turbo/logging" ) func SetupLogsAccess(ctx *cli.Context, metricsMux *http.ServeMux) { + if metricsMux == nil { + return + } + dirPath := ctx.String(logging.LogDirPathFlag.Name) if dirPath == "" { datadir := ctx.String("datadir") @@ -40,7 +45,7 @@ func SetupLogsAccess(ctx *cli.Context, metricsMux *http.ServeMux) { } func writeLogsList(w http.ResponseWriter, dirPath string) { - entries, err := os.ReadDir(dirPath) + entries, err := dir.ReadDir(dirPath) if err != nil { http.Error(w, fmt.Sprintf("Failed to list directory %s: %v", dirPath, err), http.StatusInternalServerError) return @@ -65,7 +70,7 @@ func writeLogsList(w http.ResponseWriter, dirPath string) { Size int64 `json:"size"` } - files := make([]file, len(infos)) + files := make([]file, 0, len(infos)) for _, fileInfo := range infos { files = append(files, file{Name: fileInfo.Name(), Size: fileInfo.Size()}) diff --git a/diagnostics/mem.go b/diagnostics/mem.go new file mode 100644 index 00000000000..592b7fdbdcc --- /dev/null +++ b/diagnostics/mem.go @@ -0,0 +1,32 @@ +package diagnostics + +import ( + "encoding/json" + "net/http" + + "github.com/ledgerwatch/erigon-lib/common/mem" +) + +func SetupMemAccess(metricsMux *http.ServeMux) { + if metricsMux == nil { + return + } + + metricsMux.HandleFunc("/mem", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + writeMem(w) + }) +} + +func writeMem(w http.ResponseWriter) { + memStats, err := mem.ReadVirtualMemStats() //nolint + if err != nil { //nolint + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if err := json.NewEncoder(w).Encode(memStats); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} diff --git a/diagnostics/nodeinfo.go b/diagnostics/nodeinfo.go index 198aa77d7d2..fc09c170436 100644 --- a/diagnostics/nodeinfo.go +++ b/diagnostics/nodeinfo.go @@ -8,6 +8,10 @@ import ( ) func SetupNodeInfoAccess(metricsMux *http.ServeMux, node *node.ErigonNode) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/nodeinfo", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") writeNodeInfo(w, node) diff --git a/diagnostics/peers.go b/diagnostics/peers.go index e65e3713d2f..8f2d7847396 100644 --- a/diagnostics/peers.go +++ b/diagnostics/peers.go @@ -4,7 +4,7 @@ import ( "encoding/json" "net/http" - diagnint "github.com/ledgerwatch/erigon-lib/diagnostics" + diaglib "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon/turbo/node" "github.com/urfave/cli/v2" ) @@ -36,75 +36,28 @@ type PeerResponse struct { Protocols map[string]interface{} `json:"protocols"` // Sub-protocol specific metadata fields } -func SetupPeersAccess(ctxclient *cli.Context, metricsMux *http.ServeMux, node *node.ErigonNode) { +func SetupPeersAccess(ctxclient *cli.Context, metricsMux *http.ServeMux, node *node.ErigonNode, diag *diaglib.DiagnosticClient) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/peers", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Content-Type", "application/json") - writePeers(w, ctxclient, node) + writePeers(w, ctxclient, node, diag) }) } -func writePeers(w http.ResponseWriter, ctx *cli.Context, node *node.ErigonNode) { - sentinelPeers, err := sentinelPeers(node) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - - sentryPeers, err := sentryPeers(node) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } +func writePeers(w http.ResponseWriter, ctx *cli.Context, node *node.ErigonNode, diag *diaglib.DiagnosticClient) { + allPeers := peers(diag) + filteredPeers := filterPeersWithoutBytesIn(allPeers) - allPeers := append(sentryPeers, sentinelPeers...) - - json.NewEncoder(w).Encode(allPeers) + json.NewEncoder(w).Encode(filteredPeers) } -func sentinelPeers(node *node.ErigonNode) ([]*PeerResponse, error) { - if diag, ok := node.Backend().Sentinel().(diagnint.PeerStatisticsGetter); ok { - - statisticsArray := diag.GetPeersStatistics() - peers := make([]*PeerResponse, 0, len(statisticsArray)) - - for key, value := range statisticsArray { - peer := PeerResponse{ - ENR: "", //TODO: find a way how to get missing data - Enode: "", - ID: key, - Name: "", - Type: "Sentinel", - Caps: []string{}, - Network: PeerNetworkInfo{ - LocalAddress: "", - RemoteAddress: "", - Inbound: false, - Trusted: false, - Static: false, - BytesIn: value.BytesIn, - BytesOut: value.BytesOut, - CapBytesIn: value.CapBytesIn, - CapBytesOut: value.CapBytesOut, - TypeBytesIn: value.TypeBytesIn, - TypeBytesOut: value.TypeBytesOut, - }, - Protocols: nil, - } - - peers = append(peers, &peer) - } - - return peers, nil - } else { - return []*PeerResponse{}, nil - } -} - -func sentryPeers(node *node.ErigonNode) ([]*PeerResponse, error) { - - statisticsArray := node.Backend().DiagnosticsPeersData() +func peers(diag *diaglib.DiagnosticClient) []*PeerResponse { + statisticsArray := diag.Peers() peers := make([]*PeerResponse, 0, len(statisticsArray)) for key, value := range statisticsArray { @@ -113,7 +66,7 @@ func sentryPeers(node *node.ErigonNode) ([]*PeerResponse, error) { Enode: "", ID: key, Name: "", - Type: "Sentry", + Type: value.PeerType, Caps: []string{}, Network: PeerNetworkInfo{ LocalAddress: "", @@ -134,7 +87,7 @@ func sentryPeers(node *node.ErigonNode) ([]*PeerResponse, error) { peers = append(peers, &peer) } - return filterPeersWithoutBytesIn(peers), nil + return peers } func filterPeersWithoutBytesIn(peers []*PeerResponse) []*PeerResponse { diff --git a/diagnostics/setup.go b/diagnostics/setup.go index 44fc74570fc..7eb9363a3c6 100644 --- a/diagnostics/setup.go +++ b/diagnostics/setup.go @@ -1,35 +1,110 @@ package diagnostics import ( + "fmt" "net/http" "strings" - "github.com/ledgerwatch/erigon/turbo/node" "github.com/urfave/cli/v2" + + diaglib "github.com/ledgerwatch/erigon-lib/diagnostics" + "github.com/ledgerwatch/erigon/turbo/node" + "github.com/ledgerwatch/log/v3" ) -func Setup(ctx *cli.Context, metricsMux *http.ServeMux, node *node.ErigonNode) { - debugMux := http.NewServeMux() +var ( + diagnosticsDisabledFlag = "diagnostics.disabled" + diagnosticsAddrFlag = "diagnostics.endpoint.addr" + diagnosticsPortFlag = "diagnostics.endpoint.port" + metricsHTTPFlag = "metrics.addr" + metricsPortFlag = "metrics.port" + pprofPortFlag = "pprof.port" + pprofAddrFlag = "pprof.addr" + diagnoticsSpeedTestFlag = "diagnostics.speedtest" +) - diagnostic := NewDiagnosticClient(ctx, debugMux, node) - diagnostic.Setup() +func Setup(ctx *cli.Context, node *node.ErigonNode, metricsMux *http.ServeMux, pprofMux *http.ServeMux) { + if ctx.Bool(diagnosticsDisabledFlag) { + return + } - metricsMux.HandleFunc("/debug/", func(w http.ResponseWriter, r *http.Request) { - r.URL.Path = strings.TrimPrefix(r.URL.Path, "/debug") - r.URL.RawPath = strings.TrimPrefix(r.URL.RawPath, "/debug") - debugMux.ServeHTTP(w, r) - }) + var diagMux *http.ServeMux + + diagHost := ctx.String(diagnosticsAddrFlag) + diagPort := ctx.Int(diagnosticsPortFlag) + diagAddress := fmt.Sprintf("%s:%d", diagHost, diagPort) + + metricsHost := ctx.String(metricsHTTPFlag) + metricsPort := ctx.Int(metricsPortFlag) + metricsAddress := fmt.Sprintf("%s:%d", metricsHost, metricsPort) + pprofHost := ctx.String(pprofAddrFlag) + pprofPort := ctx.Int(pprofPortFlag) + pprofAddress := fmt.Sprintf("%s:%d", pprofHost, pprofPort) + + if diagAddress == metricsAddress { + diagMux = SetupDiagnosticsEndpoint(metricsMux, diagAddress) + } else if diagAddress == pprofAddress && pprofMux != nil { + diagMux = SetupDiagnosticsEndpoint(pprofMux, diagAddress) + } else { + diagMux = SetupDiagnosticsEndpoint(nil, diagAddress) + } + + speedTest := ctx.Bool(diagnoticsSpeedTestFlag) + diagnostic, err := diaglib.NewDiagnosticClient(ctx.Context, diagMux, node.Backend().DataDir(), speedTest) + if err == nil { + diagnostic.Setup() + SetupEndpoints(ctx, node, diagMux, diagnostic) + } else { + log.Error("[Diagnostics] Failure in setting up diagnostics", "err", err) + } +} - SetupLogsAccess(ctx, debugMux) - SetupDbAccess(ctx, debugMux) - SetupCmdLineAccess(debugMux) - SetupFlagsAccess(ctx, debugMux) - SetupVersionAccess(debugMux) - SetupBlockBodyDownload(debugMux) - SetupHeaderDownloadStats(debugMux) - SetupNodeInfoAccess(debugMux, node) - SetupPeersAccess(ctx, debugMux, node) - SetupBootnodesAccess(debugMux, node) - SetupStagesAccess(debugMux, diagnostic) +func SetupDiagnosticsEndpoint(metricsMux *http.ServeMux, addres string) *http.ServeMux { + diagMux := http.NewServeMux() + + if metricsMux != nil { + SetupMiddleMuxHandler(diagMux, metricsMux, "/debug/diag") + } else { + middleMux := http.NewServeMux() + SetupMiddleMuxHandler(diagMux, middleMux, "/debug/diag") + + diagServer := &http.Server{ + Addr: addres, + Handler: middleMux, + } + + go func() { + if err := diagServer.ListenAndServe(); err != nil { + log.Error("[Diagnostics] Failure in running diagnostics server", "err", err) + } + }() + + } + + return diagMux +} + +func SetupMiddleMuxHandler(mux *http.ServeMux, middleMux *http.ServeMux, path string) { + middleMux.HandleFunc(path+"/", func(w http.ResponseWriter, r *http.Request) { + r.URL.Path = strings.TrimPrefix(r.URL.Path, path) + r.URL.RawPath = strings.TrimPrefix(r.URL.RawPath, path) + mux.ServeHTTP(w, r) + }) +} +func SetupEndpoints(ctx *cli.Context, node *node.ErigonNode, diagMux *http.ServeMux, diagnostic *diaglib.DiagnosticClient) { + SetupLogsAccess(ctx, diagMux) + SetupDbAccess(ctx, diagMux) + SetupCmdLineAccess(diagMux) + SetupFlagsAccess(ctx, diagMux) + SetupVersionAccess(diagMux) + SetupBlockBodyDownload(diagMux) + SetupHeaderDownloadStats(diagMux) + SetupNodeInfoAccess(diagMux, node) + SetupPeersAccess(ctx, diagMux, node, diagnostic) + SetupBootnodesAccess(diagMux, node) + SetupStagesAccess(diagMux, diagnostic) + SetupMemAccess(diagMux) + SetupHeadersAccess(diagMux, diagnostic) + SetupBodiesAccess(diagMux, diagnostic) } diff --git a/diagnostics/snapshot_sync.go b/diagnostics/snapshot_sync.go index 6e99b8ba4c1..265f8496124 100644 --- a/diagnostics/snapshot_sync.go +++ b/diagnostics/snapshot_sync.go @@ -3,16 +3,72 @@ package diagnostics import ( "encoding/json" "net/http" + + diaglib "github.com/ledgerwatch/erigon-lib/diagnostics" ) -func SetupStagesAccess(metricsMux *http.ServeMux, diag *DiagnosticClient) { +func SetupStagesAccess(metricsMux *http.ServeMux, diag *diaglib.DiagnosticClient) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/snapshot-sync", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Content-Type", "application/json") writeStages(w, diag) }) + + metricsMux.HandleFunc("/snapshot-files-list", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + writeFilesList(w, diag) + }) + + metricsMux.HandleFunc("/hardware-info", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + writeHardwareInfo(w, diag) + }) + + metricsMux.HandleFunc("/resources-usage", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + writeResourcesUsage(w, diag) + }) + + metricsMux.HandleFunc("/network-speed", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + writeNetworkSpeed(w, diag) + }) + + metricsMux.HandleFunc("/sync-stages", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") + writeSyncStages(w, diag) + }) +} + +func writeNetworkSpeed(w http.ResponseWriter, diag *diaglib.DiagnosticClient) { + json.NewEncoder(w).Encode(diag.GetNetworkSpeed()) } -func writeStages(w http.ResponseWriter, diag *DiagnosticClient) { +func writeResourcesUsage(w http.ResponseWriter, diag *diaglib.DiagnosticClient) { + json.NewEncoder(w).Encode(diag.GetResourcesUsage()) +} + +func writeStages(w http.ResponseWriter, diag *diaglib.DiagnosticClient) { json.NewEncoder(w).Encode(diag.SyncStatistics()) } + +func writeFilesList(w http.ResponseWriter, diag *diaglib.DiagnosticClient) { + json.NewEncoder(w).Encode(diag.SnapshotFilesList()) +} + +func writeHardwareInfo(w http.ResponseWriter, diag *diaglib.DiagnosticClient) { + json.NewEncoder(w).Encode(diag.HardwareInfo()) +} + +func writeSyncStages(w http.ResponseWriter, diag *diaglib.DiagnosticClient) { + json.NewEncoder(w).Encode(diag.GetSyncStages()) +} diff --git a/diagnostics/version.go b/diagnostics/version.go index f54bfa73b64..6bf869e835f 100644 --- a/diagnostics/version.go +++ b/diagnostics/version.go @@ -10,6 +10,10 @@ import ( const Version = 3 func SetupVersionAccess(metricsMux *http.ServeMux) { + if metricsMux == nil { + return + } + metricsMux.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Content-Type", "application/json") diff --git a/docker-compose.yml b/docker-compose.yml index 36ecaa115ad..00717ed7aaf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -72,7 +72,7 @@ services: prometheus: - image: prom/prometheus:v2.47.2 + image: prom/prometheus:v2.51.2 user: ${DOCKER_UID:-1000}:${DOCKER_GID:-1000} # Uses erigon user from Dockerfile command: --log.level=warn --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --storage.tsdb.retention.time=150d --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles ports: [ "9090:9090" ] @@ -82,7 +82,7 @@ services: restart: unless-stopped grafana: - image: grafana/grafana:10.2.1 + image: grafana/grafana:10.4.2 user: "472:0" # required for grafana version >= 7.3 ports: [ "3000:3000" ] volumes: diff --git a/docs/readthedocs/source/etl.rst b/docs/readthedocs/source/etl.rst index 4e12ddbcdf2..e72fce050d4 100644 --- a/docs/readthedocs/source/etl.rst +++ b/docs/readthedocs/source/etl.rst @@ -11,7 +11,7 @@ Inserting entries into our KV storage sorted by keys helps to minimize write amplification, hence it is much faster, even considering additional I/O that is generated by storing files. -It behaves similarly to enterprise [Extract, Tranform, Load] frameworks, hence the name. +It behaves similarly to enterprise [Extract, Transform, Load] frameworks, hence the name. We use temporary files because that helps keep RAM usage predictable and allows using ETL on large amounts of data. @@ -61,7 +61,7 @@ Transform On Extraction type ExtractFunc func(k []byte, v []byte, next ExtractNextFunc) error -Transform on extraction function receives the currenk key and value from the +Transform on extraction function receives the current key and value from the source bucket. Transform On Loading @@ -81,7 +81,7 @@ Buffer Types ============ Before the data is being flushed into temp files, it is getting collected into -a buffer until if overflows (`etl.ExtractArgs.BufferSize`). +a buffer until it overflows (`etl.ExtractArgs.BufferSize`). There are different types of buffers available with different behaviour. diff --git a/docs/readthedocs/source/rpc/index.rst b/docs/readthedocs/source/rpc/index.rst index 78c2c520476..1c53661348a 100644 --- a/docs/readthedocs/source/rpc/index.rst +++ b/docs/readthedocs/source/rpc/index.rst @@ -446,19 +446,19 @@ Object - An object of type Transaction or ``null`` when no transaction was found - The number of transactions made by the sender prior to this one * - ``DATA, 32 BYTES`` - ``blockHash`` - - hash of the block where this transaction was in. null when its pending + - hash of the block where this transaction was in. null when it's pending * - ``QUANTITY`` - ``blockNumber`` - - block number where this transaction was in. null when its pending + - block number where this transaction was in. null when it's pending * - ``QUANTITY`` - ``transactionIndex`` - - Integer of the transactions index position in the block. null when its pending + - Integer of the transactions index position in the block. null when it's pending * - ``DATA, 20 BYTES`` - ``from`` - address of the sender * - ``DATA, 20 BYTES`` - ``to`` - - address of the receiver. null when its a contract creation transaction + - address of the receiver. null when it's a contract creation transaction * - ``QUANTITY`` - ``value`` - value transferred in Wei @@ -984,22 +984,22 @@ Object - An object of type FilterLog is defined as - Description * - ``BOOLEAN`` - ``removed`` - - ``true`` when the log was removed, due to a chain reorganization. ``false`` if its a valid log + - ``true`` when the log was removed, due to a chain reorganization. ``false`` if it's a valid log * - ``QUANTITY`` - ``logIndex`` - - Integer of the log index position in the block. null when its pending log + - Integer of the log index position in the block. null when it's pending log * - ``QUANTITY`` - ``transactionIndex`` - - Integer of the transactions index position log was created from. null when its pending log + - Integer of the transactions index position log was created from. null when it's pending log * - ``DATA, 32 BYTES`` - ``transactionHash`` - - hash of the transactions this log was created from. null when its pending log + - hash of the transactions this log was created from. null when it's pending log * - ``DATA, 32 BYTES`` - ``blockHash`` - - hash of the block where this log was in. null when its pending. null when its pending log + - hash of the block where this log was in. null when it's pending. null when it's pending log * - ``QUANTITY`` - ``blockNumber`` - - The block number where this log was in. null when its pending. null when its pending log + - The block number where this log was in. null when it's pending. null when it's pending log * - ``DATA, 20 BYTES`` - ``address`` - address from which this log originated diff --git a/docs/readthedocs/source/rpc/tutorial.rst b/docs/readthedocs/source/rpc/tutorial.rst index 55e19ba5234..c212288c6e7 100644 --- a/docs/readthedocs/source/rpc/tutorial.rst +++ b/docs/readthedocs/source/rpc/tutorial.rst @@ -47,7 +47,7 @@ our daemon will only contain one method: `myNamespace_getBlockNumberByHash` whic The type `Api` is the type that is going to contain the methods for our custom daemon. This type has one member: `db` object used to interact with the Erigon node remotely. Member `db` behave like normal db object and can be used alongside with the rawdb package. -In our example we are making an rpcdaemon call that by receiving a certain block hash, it give the block number associated as an output. this is all done in `GetBlockNumberByHash`. +In our example we are making an rpcdaemon call that by receiving a certain block hash, it gives the block number associated as an output. this is all done in `GetBlockNumberByHash`. Now we are going to make our `main.go` where we are going to serve the api we made in `api.go`. diff --git a/docs/readthedocs/source/snappy.rst b/docs/readthedocs/source/snappy.rst index dbe2444ba31..2dbb7d06767 100644 --- a/docs/readthedocs/source/snappy.rst +++ b/docs/readthedocs/source/snappy.rst @@ -4,7 +4,7 @@ Block Bodies Compression: Snappy Issue ===== -Block bodies represent the biggest portion of the database as a bucket and they we need to make such space more efficient. Thus, we use compression through snappy. +Block bodies represent the biggest portion of the database as a bucket and we need to make such space more efficient. Thus, we use compression through snappy. Snappy ====== diff --git a/docs/readthedocs/source/stagedsync.rst b/docs/readthedocs/source/stagedsync.rst index fef78f79c08..453040ca15a 100644 --- a/docs/readthedocs/source/stagedsync.rst +++ b/docs/readthedocs/source/stagedsync.rst @@ -26,7 +26,7 @@ Stage 1 : Download Block Headers }, }, -This stage uses two processes, a fetcher method and a processer method. +This stage uses two processes, a fetcher method and a processor method. .. code-block:: go @@ -77,7 +77,7 @@ This stage takes the data written in stage 1, and by using the ETL framework, it func extractHeaders(k []byte, v []byte, next etl.ExtractNextFunc) error -The function above its used with ETL to extract blockHashes and blockNumber from the key of the headers bucket. In fact, since the key of the headers bucket are a concatenation of blockNumber and blockHash, they can be used in such process. +The function above is used with ETL to extract blockHashes and blockNumber from the key of the headers bucket. In fact, since the key of the headers bucket are a concatenation of blockNumber and blockHash, they can be used in such process. Changes in DB: @@ -116,13 +116,13 @@ This stage, downloads block bodies and put them into the database. This stage is `processBodiesStage` takes the bodies downloaded and those the following with them: - * Verifiy them. + * Verify them. * RLP-encode them. * compress the rlp-encoded bodies using `snappy`. - * put the commpressed RLP into the database. + * put the compressed RLP into the database. -in order for Erigon to reaccess the block bodies, it decompress the and rlp-decode them. the entries in the db for block bodies are a concatenation of [block number] + [block hash] in order to pre-sort them before inserting them into the database. +in order for Erigon to reaccess the block bodies, it decompresses them and rlp-decode them. the entries in the db for block bodies are a concatenation of [block number] + [block hash] in order to pre-sort them before inserting them into the database. Changes in DB: - * [block number] + [block hash] => Block bodies are written in bucket `dbutils.BlockBodyPrefix` \ No newline at end of file + * [block number] + [block hash] => Block bodies are written in bucket `dbutils.BlockBodyPrefix` diff --git a/docs/readthedocs/source/types.rst b/docs/readthedocs/source/types.rst index 2af774f3b4d..2a0811380cf 100644 --- a/docs/readthedocs/source/types.rst +++ b/docs/readthedocs/source/types.rst @@ -125,7 +125,7 @@ an alias for an array of Transaction. Instead of []Transaction, Transactions can type Transactions []*Transaction -repressent an Ethereum Transaction. +represent an Ethereum Transaction. Block Header ============ @@ -276,4 +276,4 @@ Hash of the bytecode (deployed code) of a smart contract. a digit which increases each SELFDESTRUCT or CREATE2 opcodes. In fact, it would be possible to create Account with very big storage (increase storage size during many blocks). Then delete this account (SELFDESTRUCT). This attack vector would cause nodes to hang for several minutes. -**Important Note: Accounts are not directly linked to their addresses, they are linked as key-value in the database** \ No newline at end of file +**Important Note: Accounts are not directly linked to their addresses, they are linked as key-value in the database** diff --git a/erigon-lib/.github/workflows/ci.yml b/erigon-lib/.github/workflows/ci.yml index bf30c413573..565508452a2 100644 --- a/erigon-lib/.github/workflows/ci.yml +++ b/erigon-lib/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: fetch-depth: 0 # fetch git tags for "git describe" - uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: Install deps if: matrix.os == 'ubuntu-20.04' @@ -46,9 +46,9 @@ jobs: - name: Lint if: matrix.os == 'ubuntu-20.04' - uses: golangci/golangci-lint-action@v3 + uses: golangci/golangci-lint-action@v4 with: - version: v1.54 + version: v1.57.2 skip-build-cache: true - name: Lint source code licenses diff --git a/erigon-lib/.gitignore b/erigon-lib/.gitignore index 1155933ce5d..5025f8f6724 100644 --- a/erigon-lib/.gitignore +++ b/erigon-lib/.gitignore @@ -73,3 +73,5 @@ libmdbx/build/* tests/testdata/* go.work* + +coverage.out diff --git a/erigon-lib/.golangci.yml b/erigon-lib/.golangci.yml index 4e45c12cb03..43932734cea 100644 --- a/erigon-lib/.golangci.yml +++ b/erigon-lib/.golangci.yml @@ -1,5 +1,5 @@ run: - deadline: 10m + timeout: 10m build-tags: - nosqlite - noboltdb @@ -20,6 +20,7 @@ linters: - unparam - makezero - testifylint #TODO: enable me + - perfsprint #TODO: enable me - protogetter enable: - unconvert @@ -33,45 +34,42 @@ linters: # - stylecheck linters-settings: - gocritic: - # Which checks should be enabled; can't be combined with 'disabled-checks'; - # See https://go-critic.github.io/overview#checks-overview - # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` - # By default list of stable checks is used. + gocritic: # see https://golangci-lint.run/usage/linters/#gocritic and https://go-critic.github.io/overview#checks-overview + enabled-tags: + - performance + - diagnostic enabled-checks: - ruleguard - - truncateCmp - # - defaultCaseOrder - - # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty disabled-checks: - - regexpMust - # - hugeParam - rangeValCopy - exitAfterDefer - elseif - dupBranchBody - assignOp - singleCaseSwitch - - unlambda - captLocal - commentFormatting - ifElseChain - appendAssign + - preferFprint + + # diagnostigs tag: possible bugs. need enable checks in future + - sloppyReassign + - sprintfQuotedString + - deferInLoop + - nilValReturn + - evalOrder + - commentedOutCode + - returnAfterHttpError + - weakCond + - builtinShadowDecl + - unnecessaryDefer + - uncheckedInlineErr + - preferStringWriter - # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. - # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". - enabled-tags: - - performance - - diagnostic - # - style - # - experimental - # - opinionated - disabled-tags: - - experimental - ruleguard: - rules: "rules.go" settings: + ruleguard: + rules: "rules.go" hugeParam: # size in bytes that makes the warning trigger (default 80) sizeThreshold: 1000 @@ -80,9 +78,6 @@ linters-settings: sizeThreshold: 512 # whether to check test functions (default true) skipTestFuncs: true - truncateCmp: - # whether to skip int/uint/uintptr types (default true) - skipArchDependent: true underef: # whether to skip (*x).method() calls where x is a pointer receiver (default true) skipRecvDeref: true @@ -96,7 +91,7 @@ linters-settings: min-len: 2 min-occurrences: 2 gofmt: - auto-fix: false + simplify: false issues: exclude-rules: @@ -114,20 +109,17 @@ issues: linters: - gosec - unused - - deadcode - gocritic - perfsprint - path: hack\.go linters: - gosec - unused - - deadcode - gocritic - path: cmd/devp2p linters: - gosec - unused - - deadcode - gocritic - path: metrics/sample\.go linters: diff --git a/erigon-lib/Makefile b/erigon-lib/Makefile index 078cac4aa07..662b52a7e78 100644 --- a/erigon-lib/Makefile +++ b/erigon-lib/Makefile @@ -72,13 +72,14 @@ grpc: protoc-all txpool/txpool.proto txpool/mining.proto rm -rf vendor -$(GOBINREL)/moq: | $(GOBINREL) - $(GOBUILD) -o "$(GOBIN)/moq" github.com/matryer/moq +build-mockgen: + $(GOBUILD) -o "$(GOBIN)/mockgen" go.uber.org/mock/mockgen -mocks: $(GOBINREL)/moq - rm -f gointerfaces/remote/mocks.go - rm -f gointerfaces/sentry/mocks.go - PATH="$(GOBIN):$(PATH)" go generate ./... +mocks-clean: + grep -r -l --exclude-dir="*$(GOBINREL)*" "^// Code generated by MockGen. DO NOT EDIT.$$" . | xargs rm -r + +mocks: build-mockgen mocks-clean + PATH="$(GOBIN):$(PATH)" go generate -run "mockgen" ./... lintci-deps: @./tools/golangci_lint.sh --install-deps @@ -97,7 +98,7 @@ lint-deps: lintci-deps lint-licenses-deps lint: lintci lint-licenses lint-mod-tidy test: - $(GOTEST) --count 1 -p 2 ./... + $(GOTEST) --count 1 -p 2 -coverprofile=coverage.out ./... test-no-fuzz: $(GOTEST_NOFUZZ) --count 1 -p 2 ./... diff --git a/erigon-lib/chain/chain_config.go b/erigon-lib/chain/chain_config.go index cbe9bd4b91f..443ba1f54e5 100644 --- a/erigon-lib/chain/chain_config.go +++ b/erigon-lib/chain/chain_config.go @@ -32,8 +32,8 @@ import ( // that any network, identified by its genesis block, can have its own // set of configuration options. type Config struct { - ChainName string - ChainID *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection + ChainName string `json:"chainName"` // chain name, eg: mainnet, sepolia, bor-mainnet + ChainID *big.Int `json:"chainId"` // chainId identifies the current chain and is used for replay protection Consensus ConsensusName `json:"consensus,omitempty"` // aura, ethash or clique @@ -67,6 +67,7 @@ type Config struct { ShanghaiTime *big.Int `json:"shanghaiTime,omitempty"` CancunTime *big.Int `json:"cancunTime,omitempty"` PragueTime *big.Int `json:"pragueTime,omitempty"` + OsakaTime *big.Int `json:"osakaTime,omitempty"` BedrockBlock *big.Int `json:"bedrockBlock,omitempty"` // Bedrock switch block (nil = no fork, 0 = already on optimism bedrock) RegolithTime *big.Int `json:"regolithTime,omitempty"` // Regolith switch time (nil = no fork, 0 = already on optimism regolith) @@ -94,6 +95,11 @@ type Config struct { Bor BorConfig `json:"-"` BorJSON json.RawMessage `json:"bor,omitempty"` + + // For not pruning the logs of these contracts + // For deposit contract logs are needed by CL to validate/produce blocks. + // All logs should be available to a validating node through eth_getLogs + NoPruneContracts map[common.Address]bool `json:"noPruneContracts,omitempty"` } // OptimismConfig is the optimism config. @@ -119,7 +125,7 @@ type BorConfig interface { func (c *Config) String() string { engine := c.getEngine() - return fmt.Sprintf("{ChainID: %v, Homestead: %v, DAO: %v, Tangerine Whistle: %v, Spurious Dragon: %v, Byzantium: %v, Constantinople: %v, Petersburg: %v, Istanbul: %v, Muir Glacier: %v, Berlin: %v, London: %v, Arrow Glacier: %v, Gray Glacier: %v, Terminal Total Difficulty: %v, Merge Netsplit: %v, Shanghai: %v, Cancun: %v, Prague: %v, BedrockBlock: %v, RegolithTime: %v, CanyonTime: %v, EcotoneTime: %v, FjordTime: %v, Engine: %v}", + return fmt.Sprintf("{ChainID: %v, Homestead: %v, DAO: %v, Tangerine Whistle: %v, Spurious Dragon: %v, Byzantium: %v, Constantinople: %v, Petersburg: %v, Istanbul: %v, Muir Glacier: %v, Berlin: %v, London: %v, Arrow Glacier: %v, Gray Glacier: %v, Terminal Total Difficulty: %v, Merge Netsplit: %v, Shanghai: %v, Cancun: %v, Prague: %v, Osaka: %v, BedrockBlock: %v, RegolithTime: %v, CanyonTime: %v, EcotoneTime: %v, FjordTime: %v, Engine: %v , NoPruneContracts: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -139,12 +145,14 @@ func (c *Config) String() string { c.ShanghaiTime, c.CancunTime, c.PragueTime, + c.OsakaTime, c.BedrockBlock, c.RegolithTime, c.CanyonTime, c.EcotoneTime, c.FjordTime, engine, + c.NoPruneContracts, ) } @@ -260,6 +268,11 @@ func (c *Config) IsPrague(time uint64) bool { return isForked(c.PragueTime, time) } +// IsOsaka returns whether time is either equal to the Osaka fork time or greater. +func (c *Config) IsOsaka(time uint64) bool { + return isForked(c.OsakaTime, time) +} + func (c *Config) IsBedrock(num uint64) bool { return isForked(c.BedrockBlock, num) } @@ -595,7 +608,7 @@ type Rules struct { IsByzantium, IsConstantinople, IsPetersburg bool IsIstanbul, IsBerlin, IsLondon, IsShanghai bool IsCancun, IsNapoli bool - IsPrague bool + IsPrague, IsOsaka bool IsAura bool IsOptimismBedrock, IsOptimismRegolith bool IsOptimismCanyon, IsOptimismFjord bool @@ -623,6 +636,7 @@ func (c *Config) Rules(num uint64, time uint64) *Rules { IsCancun: c.IsCancun(time), IsNapoli: c.IsNapoli(num), IsPrague: c.IsPrague(time), + IsOsaka: c.IsOsaka(time), IsAura: c.Aura != nil, IsOptimismBedrock: c.IsOptimismBedrock(num), IsOptimismRegolith: c.IsOptimismRegolith(time), diff --git a/erigon-lib/chain/snapcfg/util.go b/erigon-lib/chain/snapcfg/util.go index db1e42d3276..51a0e84577e 100644 --- a/erigon-lib/chain/snapcfg/util.go +++ b/erigon-lib/chain/snapcfg/util.go @@ -2,15 +2,19 @@ package snapcfg import ( _ "embed" + "encoding/json" "path/filepath" + "slices" + "sort" "strconv" "strings" "github.com/ledgerwatch/erigon-lib/chain/networkname" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" snapshothashes "github.com/ledgerwatch/erigon-snapshot" "github.com/ledgerwatch/erigon-snapshot/webseed" "github.com/pelletier/go-toml/v2" - "golang.org/x/exp/slices" + "github.com/tidwall/btree" ) var ( @@ -30,74 +34,171 @@ type PreverifiedItem struct { Hash string } type Preverified []PreverifiedItem -type preverified map[string]string -func fromToml(in []byte) (out Preverified) { - var outMap preverified - if err := toml.Unmarshal(in, &outMap); err != nil { - panic(err) - } - return doSort(outMap) +func Merge(p0 Preverified, p1 []PreverifiedItem) Preverified { + merged := append(p0, p1...) + slices.SortFunc(merged, func(i, j PreverifiedItem) int { return strings.Compare(i.Name, j.Name) }) + return merged } -func doSort(in preverified) Preverified { - out := make(Preverified, 0, len(in)) - for k, v := range in { - out = append(out, PreverifiedItem{k, v}) + +func (p Preverified) Get(name string) (PreverifiedItem, bool) { + i := sort.Search(len(p), func(i int) bool { return p[i].Name >= name }) + if i >= len(p) || p[i].Name != name { + return PreverifiedItem{}, false } - slices.SortFunc(out, func(i, j PreverifiedItem) int { return strings.Compare(i.Name, j.Name) }) - return out + + return p[i], true } -var ( - isDefaultVersion bool = true - snapshotVersion uint8 = 1 -) +func (p Preverified) Contains(name string, ignoreVersion ...bool) bool { + if len(ignoreVersion) > 0 && ignoreVersion[0] { + _, name, _ := strings.Cut(name, "-") + for _, item := range p { + _, noVersion, _ := strings.Cut(item.Name, "-") + if noVersion == name { + return true + } + } + return false + } -func SnapshotVersion(version uint8) { - snapshotVersion = version - isDefaultVersion = false + i := sort.Search(len(p), func(i int) bool { return p[i].Name >= name }) + return i < len(p) && p[i].Name == name } -func newCfg(preverified Preverified, version uint8) *Cfg { +func (p Preverified) Typed(types []snaptype.Type) Preverified { + var bestVersions btree.Map[string, PreverifiedItem] - if version == 0 { - version = snapshotVersion + for _, p := range p { + v, name, ok := strings.Cut(p.Name, "-") + if !ok { + continue + } - var pv Preverified + var preferredVersion, minVersion snaptype.Version - for _, p := range preverified { - if v, _, ok := strings.Cut(p.Name, "-"); ok && strings.HasPrefix(v, "v") { - if v, err := strconv.ParseUint(v[1:], 10, 8); err == nil && uint64(version) == v { - pv = append(pv, p) - } + parts := strings.Split(name, "-") + if len(parts) < 3 { + continue + } + typeName, _ := strings.CutSuffix(parts[2], filepath.Ext(parts[2])) + include := false + + for _, typ := range types { + if typeName == typ.Name() { + preferredVersion = typ.Versions().Current + minVersion = typ.Versions().MinSupported + include = true + break } } - // don't do this check if the SnapshotVersion has been explicitly set - if len(pv) == 0 && isDefaultVersion { - version = maxVersion(preverified) + if !include { + continue + } + + version, err := snaptype.ParseVersion(v) + if err != nil { + continue + } + + if version < minVersion { + continue + } + + if version > preferredVersion { + continue + } + + if current, ok := bestVersions.Get(name); ok { + v, _, _ := strings.Cut(current.Name, "-") + cv, _ := snaptype.ParseVersion(v) + + if version > cv { + bestVersions.Set(name, p) + } + } else { + bestVersions.Set(name, p) + } + } - for _, p := range preverified { - if v, _, ok := strings.Cut(p.Name, "-"); ok && strings.HasPrefix(v, "v") { - if v, err := strconv.ParseUint(v[1:], 10, 8); err == nil && uint64(version) == v { - pv = append(pv, p) - } + var versioned Preverified + + bestVersions.Scan(func(key string, value PreverifiedItem) bool { + versioned = append(versioned, value) + return true + }) + + return versioned +} + +func (p Preverified) Versioned(preferredVersion snaptype.Version, minVersion snaptype.Version, types ...snaptype.Enum) Preverified { + var bestVersions btree.Map[string, PreverifiedItem] + + for _, p := range p { + v, name, ok := strings.Cut(p.Name, "-") + + if !ok { + continue + } + + parts := strings.Split(name, "-") + typeName, _ := strings.CutSuffix(parts[2], filepath.Ext(parts[2])) + include := false + + if len(types) > 0 { + for _, typ := range types { + if typeName == typ.String() { + include = true + break } } + + if !include { + continue + } + } + + version, err := snaptype.ParseVersion(v) + + if err != nil { + continue + } + + if version < minVersion { + continue } - preverified = pv + if version > preferredVersion { + continue + } + + if current, ok := bestVersions.Get(name); ok { + v, _, _ := strings.Cut(current.Name, "-") + cv, _ := snaptype.ParseVersion(v) + + if version > cv { + bestVersions.Set(name, p) + } + } else { + bestVersions.Set(name, p) + } } - maxBlockNum, version := cfgInfo(preverified, version) - return &Cfg{ExpectBlocks: maxBlockNum, Preverified: preverified, Version: version} + var versioned Preverified + + bestVersions.Scan(func(key string, value PreverifiedItem) bool { + versioned = append(versioned, value) + return true + }) + + return versioned } -func cfgInfo(preverified Preverified, defaultVersion uint8) (uint64, uint8) { +func (p Preverified) MaxBlock(version snaptype.Version) (uint64, error) { max := uint64(0) - version := defaultVersion - for _, p := range preverified { + for _, p := range p { _, fileName := filepath.Split(p.Name) ext := filepath.Ext(fileName) if ext != ".seg" { @@ -105,33 +206,123 @@ func cfgInfo(preverified Preverified, defaultVersion uint8) (uint64, uint8) { } onlyName := fileName[:len(fileName)-len(ext)] parts := strings.Split(onlyName, "-") - if parts[3] != "headers" { - continue - } + to, err := strconv.ParseUint(parts[2], 10, 64) if err != nil { - panic(err) + return 0, err } + + if version != 0 { + if v, err := snaptype.ParseVersion(parts[0]); err != nil || v != version { + continue + } + } + if max < to { max = to } - if vp := parts[0]; strings.HasPrefix(vp, "v") { - if v, err := strconv.ParseUint(vp[1:], 10, 8); err == nil { - version = uint8(v) - } - } } if max == 0 { // to prevent underflow - return 0, version + return 0, nil } - return max*1_000 - 1, version + + return max*1_000 - 1, nil +} + +func (p Preverified) MarshalJSON() ([]byte, error) { + out := map[string]string{} + + for _, i := range p { + out[i.Name] = i.Hash + } + + return json.Marshal(out) +} + +func (p *Preverified) UnmarshalJSON(data []byte) error { + var outMap map[string]string + + if err := json.Unmarshal(data, &outMap); err != nil { + return err + } + + *p = doSort(outMap) + return nil +} + +func fromToml(in []byte) (out Preverified) { + var outMap map[string]string + if err := toml.Unmarshal(in, &outMap); err != nil { + panic(err) + } + return doSort(outMap) +} + +func doSort(in map[string]string) Preverified { + out := make(Preverified, 0, len(in)) + for k, v := range in { + out = append(out, PreverifiedItem{k, v}) + } + slices.SortFunc(out, func(i, j PreverifiedItem) int { return strings.Compare(i.Name, j.Name) }) + return out +} + +func newCfg(networkName string, preverified Preverified) *Cfg { + maxBlockNum, _ := preverified.MaxBlock(0) + return &Cfg{ExpectBlocks: maxBlockNum, Preverified: preverified, networkName: networkName} } type Cfg struct { ExpectBlocks uint64 - Version uint8 Preverified Preverified + networkName string +} + +func (c Cfg) Seedable(info snaptype.FileInfo) bool { + mergeLimit := c.MergeLimit(info.Type.Enum(), info.From) + return info.To-info.From == mergeLimit +} + +func (c Cfg) MergeLimit(t snaptype.Enum, fromBlock uint64) uint64 { + hasType := t == snaptype.MinCoreEnum + + for _, p := range c.Preverified { + info, _, ok := snaptype.ParseFileName("", p.Name) + if !ok { + continue + } + + if info.Ext != ".seg" || (t != snaptype.Unknown && t != info.Type.Enum()) { + continue + } + + hasType = true + + if fromBlock < info.From || fromBlock >= info.To { + continue + } + + if info.Len() == snaptype.Erigon2MergeLimit || + info.Len() == snaptype.Erigon2OldMergeLimit { + return info.Len() + } + + break + } + + // This should only get called the first time a new type is added and created - as it will + // not have previous history to check against + + // BeaconBlocks && BlobSidecars follow their own slot based sharding scheme which is + // not the same as other snapshots which follow a block based sharding scheme + // TODO: If we add any more sharding schemes (we currently have blocks, state & beacon block schemes) + // - we may need to add some kind of sharding scheme identifier to snaptype.Type + if hasType || snaptype.IsCaplinType(t) { + return snaptype.Erigon2MergeLimit + } + + return c.MergeLimit(snaptype.MinCoreEnum, fromBlock) } var knownPreverified = map[string]Preverified{ @@ -146,25 +337,30 @@ var knownPreverified = map[string]Preverified{ networkname.ChiadoChainName: Chiado, } -// KnownCfg return list of preverified hashes for given network, but apply whiteList filter if it's not empty -func KnownCfg(networkName string, version uint8) *Cfg { - c, ok := knownPreverified[networkName] - if !ok { - return newCfg(Preverified{}, version) +func RegisterKnownTypes(networkName string, types []snaptype.Type) { + knownTypes[networkName] = types +} + +var knownTypes = map[string][]snaptype.Type{} + +func Seedable(networkName string, info snaptype.FileInfo) bool { + if networkName == "" { + panic("empty network name") } - return newCfg(c, version) + return KnownCfg(networkName).Seedable(info) } -func maxVersion(pv Preverified) uint8 { - var max uint8 +func MergeLimit(networkName string, snapType snaptype.Enum, fromBlock uint64) uint64 { + return KnownCfg(networkName).MergeLimit(snapType, fromBlock) +} - for _, p := range pv { - if v, _, ok := strings.Cut(p.Name, "-"); ok && strings.HasPrefix(v, "v") { - if v, err := strconv.ParseUint(v[1:], 10, 8); err == nil { - version := uint8(v) - if max < version { - max = version - } +func MaxSeedableSegment(chain string, dir string) uint64 { + var max uint64 + + if list, err := snaptype.Segments(dir); err == nil { + for _, info := range list { + if Seedable(chain, info) && info.Type.Enum() == snaptype.MinCoreEnum && info.To > max { + max = info.To } } } @@ -172,6 +368,39 @@ func maxVersion(pv Preverified) uint8 { return max } +var oldMergeSteps = append([]uint64{snaptype.Erigon2OldMergeLimit}, snaptype.MergeSteps...) + +func MergeSteps(networkName string, snapType snaptype.Enum, fromBlock uint64) []uint64 { + mergeLimit := MergeLimit(networkName, snapType, fromBlock) + + if mergeLimit == snaptype.Erigon2OldMergeLimit { + return oldMergeSteps + } + + return snaptype.MergeSteps +} + +// KnownCfg return list of preverified hashes for given network, but apply whiteList filter if it's not empty +func KnownCfg(networkName string) *Cfg { + c, ok := knownPreverified[networkName] + + if !ok { + return newCfg(networkName, Preverified{}) + } + + return newCfg(networkName, c.Typed(knownTypes[networkName])) +} + +func VersionedCfg(networkName string, preferred snaptype.Version, min snaptype.Version) *Cfg { + c, ok := knownPreverified[networkName] + + if !ok { + return newCfg(networkName, Preverified{}) + } + + return newCfg(networkName, c.Versioned(preferred, min)) +} + var KnownWebseeds = map[string][]string{ networkname.MainnetChainName: webseedsParse(webseed.Mainnet), networkname.SepoliaChainName: webseedsParse(webseed.Sepolia), diff --git a/erigon-lib/commitment/bin_patricia_hashed_test.go b/erigon-lib/commitment/bin_patricia_hashed_test.go index 2c16bcbf5d9..941b638f5d8 100644 --- a/erigon-lib/commitment/bin_patricia_hashed_test.go +++ b/erigon-lib/commitment/bin_patricia_hashed_test.go @@ -3,10 +3,10 @@ package commitment import ( "encoding/hex" "fmt" + "slices" "testing" "github.com/stretchr/testify/require" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon-lib/common/length" ) diff --git a/erigon-lib/commitment/patricia_state_mock_test.go b/erigon-lib/commitment/patricia_state_mock_test.go index 82dc932a2cb..6bbb71ddb0b 100644 --- a/erigon-lib/commitment/patricia_state_mock_test.go +++ b/erigon-lib/commitment/patricia_state_mock_test.go @@ -4,11 +4,11 @@ import ( "encoding/binary" "encoding/hex" "fmt" + "slices" "testing" "github.com/holiman/uint256" "golang.org/x/crypto/sha3" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/length" diff --git a/erigon-lib/common/chan.go b/erigon-lib/common/chan.go index ac9fdbf6fc7..7201943a542 100644 --- a/erigon-lib/common/chan.go +++ b/erigon-lib/common/chan.go @@ -16,11 +16,27 @@ package common -import "errors" +import ( + "errors" + + "golang.org/x/net/context" +) var ErrStopped = errors.New("stopped") var ErrUnwind = errors.New("unwound") +// FastContextErr is faster than ctx.Err() because usually it doesn't lock an internal mutex. +// It locks it only if the context is done and at the first call. +// See implementation of cancelCtx in context/context.go. +func FastContextErr(ctx context.Context) error { + select { + case <-ctx.Done(): + return ctx.Err() + default: + return nil + } +} + func Stopped(ch <-chan struct{}) error { if ch == nil { return nil diff --git a/erigon-lib/common/collections.go b/erigon-lib/common/collections.go index 1e5a13856d2..737ae6a24dc 100644 --- a/erigon-lib/common/collections.go +++ b/erigon-lib/common/collections.go @@ -1,5 +1,7 @@ package common +import "math/rand" + func SliceReverse[T any](s []T) { for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i], s[j] = s[j], s[i] @@ -13,3 +15,9 @@ func SliceMap[T any, U any](s []T, mapFunc func(T) U) []U { } return out } + +func SliceShuffle[T any](s []T) { + rand.Shuffle(len(s), func(i, j int) { + s[i], s[j] = s[j], s[i] + }) +} diff --git a/erigon-lib/common/datadir/dirs.go b/erigon-lib/common/datadir/dirs.go index 161d381c17f..c56faea87eb 100644 --- a/erigon-lib/common/datadir/dirs.go +++ b/erigon-lib/common/datadir/dirs.go @@ -44,7 +44,7 @@ type Dirs struct { Downloader string TxPool string Nodes string - CaplinHistory string + CaplinBlobs string CaplinIndexing string } @@ -72,13 +72,13 @@ func New(datadir string) Dirs { Downloader: filepath.Join(datadir, "downloader"), TxPool: filepath.Join(datadir, "txpool"), Nodes: filepath.Join(datadir, "nodes"), - CaplinHistory: filepath.Join(datadir, "caplin/history"), - CaplinIndexing: filepath.Join(datadir, "caplin/indexing"), + CaplinBlobs: filepath.Join(datadir, "caplin", "blobs"), + CaplinIndexing: filepath.Join(datadir, "caplin", "indexing"), } dir.MustExist(dirs.Chaindata, dirs.Tmp, dirs.SnapIdx, dirs.SnapHistory, dirs.SnapDomain, dirs.SnapAccessors, - dirs.Downloader, dirs.TxPool, dirs.Nodes, dirs.CaplinHistory, dirs.CaplinIndexing) + dirs.Downloader, dirs.TxPool, dirs.Nodes, dirs.CaplinBlobs, dirs.CaplinIndexing) return dirs } @@ -151,7 +151,7 @@ func downloaderV2Migration(dirs Dirs) error { // nolint func moveFiles(from, to string, ext string) error { - files, err := os.ReadDir(from) + files, err := dir.ReadDir(from) if err != nil { return fmt.Errorf("ReadDir: %w, %s", err, from) } diff --git a/erigon-lib/common/dbg/dbg_ctx.go b/erigon-lib/common/dbg/dbg_ctx.go new file mode 100644 index 00000000000..f9c996e4165 --- /dev/null +++ b/erigon-lib/common/dbg/dbg_ctx.go @@ -0,0 +1,23 @@ +package dbg + +import ( + "context" +) + +type debugContextKey struct{} + +// Enabling detailed debugging logs for given context +func ContextWithDebug(ctx context.Context, v bool) context.Context { + return context.WithValue(ctx, debugContextKey{}, v) +} +func Enabled(ctx context.Context) bool { + v := ctx.Value(debugContextKey{}) + if v == nil { + return false + } + return v.(bool) +} + +// https://stackoverflow.com/a/3561399 -> https://www.rfc-editor.org/rfc/rfc6648 +// https://stackoverflow.com/a/65241869 -> https://www.odata.org/documentation/odata-version-3-0/abnf/ -> https://docs.oasis-open.org/odata/odata/v4.01/cs01/abnf/odata-abnf-construction-rules.txt +var HTTPHeader = "dbg" // curl --header "dbg: true" www.google.com diff --git a/erigon-lib/common/dbg/experiments.go b/erigon-lib/common/dbg/experiments.go index e9df7ace44e..56a115ab441 100644 --- a/erigon-lib/common/dbg/experiments.go +++ b/erigon-lib/common/dbg/experiments.go @@ -26,6 +26,11 @@ import ( "github.com/ledgerwatch/log/v3" ) +var ( + // force skipping of any non-Erigon2 .torrent files + DownloaderOnlyBlocks = EnvBool("DOWNLOADER_ONLY_BLOCKS", false) +) + var StagesOnlyBlocks = EnvBool("STAGES_ONLY_BLOCKS", false) var doMemstat = true @@ -299,3 +304,19 @@ func SnapshotVersion() uint8 { }) return snapshotVersion } + +var ( + logHashMismatchReason bool + logHashMismatchReasonOnce sync.Once +) + +func LogHashMismatchReason() bool { + logHashMismatchReasonOnce.Do(func() { + v, _ := os.LookupEnv("LOG_HASH_MISMATCH_REASON") + if v == "true" { + logHashMismatchReason = true + log.Info("[Experiment]", "LOG_HASH_MISMATCH_REASON", logHashMismatchReason) + } + }) + return logHashMismatchReason +} diff --git a/erigon-lib/common/dir/rw_dir.go b/erigon-lib/common/dir/rw_dir.go index 2d0e7066493..6e07f6665b1 100644 --- a/erigon-lib/common/dir/rw_dir.go +++ b/erigon-lib/common/dir/rw_dir.go @@ -19,11 +19,17 @@ package dir import ( "os" "path/filepath" + "strings" + + "golang.org/x/sync/errgroup" ) func MustExist(path ...string) { const perm = 0764 // user rwx, group rw, other r for _, p := range path { + if Exist(p) { + continue + } if err := os.MkdirAll(p, perm); err != nil { panic(err) } @@ -86,7 +92,7 @@ func Recreate(dir string) { } func HasFileOfType(dir, ext string) bool { - files, err := os.ReadDir(dir) + files, err := ReadDir(dir) if err != nil { return false } @@ -103,30 +109,34 @@ func HasFileOfType(dir, ext string) bool { // nolint func DeleteFiles(dirs ...string) error { + g := errgroup.Group{} for _, dir := range dirs { files, err := ListFiles(dir) if err != nil { return err } for _, fPath := range files { - if err := os.Remove(fPath); err != nil { - return err - } + fPath := fPath + g.Go(func() error { return os.Remove(fPath) }) } } - return nil + return g.Wait() } -func ListFiles(dir string, extensions ...string) ([]string, error) { - files, err := os.ReadDir(dir) +func ListFiles(dir string, extensions ...string) (paths []string, err error) { + files, err := ReadDir(dir) if err != nil { return nil, err } - res := make([]string, 0, len(files)) + + paths = make([]string, 0, len(files)) for _, f := range files { if f.IsDir() && !f.Type().IsRegular() { continue } + if strings.HasPrefix(f.Name(), ".") { + continue + } match := false if len(extensions) == 0 { match = true @@ -139,7 +149,7 @@ func ListFiles(dir string, extensions ...string) ([]string, error) { if !match { continue } - res = append(res, filepath.Join(dir, f.Name())) + paths = append(paths, filepath.Join(dir, f.Name())) } - return res, nil + return paths, nil } diff --git a/erigon-lib/common/dir/rw_dir_generic.go b/erigon-lib/common/dir/rw_dir_generic.go new file mode 100644 index 00000000000..1ac4a3008ca --- /dev/null +++ b/erigon-lib/common/dir/rw_dir_generic.go @@ -0,0 +1,9 @@ +//go:build !windows + +package dir + +import "os" + +func ReadDir(name string) ([]os.DirEntry, error) { + return os.ReadDir(name) +} diff --git a/erigon-lib/common/dir/rw_dir_windows.go b/erigon-lib/common/dir/rw_dir_windows.go new file mode 100644 index 00000000000..73bd4e989e8 --- /dev/null +++ b/erigon-lib/common/dir/rw_dir_windows.go @@ -0,0 +1,24 @@ +//go:build windows + +package dir + +import ( + "errors" + "os" + + "golang.org/x/sys/windows" +) + +func ReadDir(name string) ([]os.DirEntry, error) { + files, err := os.ReadDir(name) + if err != nil { + // some windows remote drived return this error + // when they are empty - should really be handled + // in os.ReadDir but is not + // - looks likey fixed in go 1.22 + if errors.Is(err, windows.ERROR_NO_MORE_FILES) { + return nil, nil + } + } + return files, err +} diff --git a/erigon-lib/common/disk/common.go b/erigon-lib/common/disk/common.go new file mode 100644 index 00000000000..066f1825589 --- /dev/null +++ b/erigon-lib/common/disk/common.go @@ -0,0 +1,25 @@ +package disk + +import ( + "context" + "time" + + "github.com/ledgerwatch/log/v3" +) + +func UpdateDiskStats(ctx context.Context, logger log.Logger) { + logEvery := time.NewTicker(5 * time.Second) + defer logEvery.Stop() + + for { + select { + case <-ctx.Done(): + return + case <-logEvery.C: + + if err := UpdatePrometheusDiskStats(); err != nil { + logger.Warn("[disk] error disk fault stats", "err", err) + } + } + } +} diff --git a/erigon-lib/common/disk/disk.go b/erigon-lib/common/disk/disk.go new file mode 100644 index 00000000000..d5f7cd0975b --- /dev/null +++ b/erigon-lib/common/disk/disk.go @@ -0,0 +1,44 @@ +//go:build !linux && !darwin + +package disk + +import ( + "os" + "runtime" + + "github.com/shirou/gopsutil/v3/process" + + "github.com/ledgerwatch/erigon-lib/metrics" +) + +var ( + writeBytes = metrics.NewGauge(`process_io_storage_written_bytes_total`) + readBytes = metrics.NewGauge(`process_io_storage_read_bytes_total`) + + writeCount = metrics.NewGauge(`process_io_write_syscalls_total`) + readCount = metrics.NewGauge(`process_io_read_syscalls_total`) + + cgoCount = metrics.NewGauge(`go_cgo_calls_count`) +) + +func UpdatePrometheusDiskStats() error { + p, err := process.NewProcess(int32(os.Getpid())) + if err != nil { + return err + } + + counters, err := p.IOCounters() + if err != nil { + return err + } + + writeBytes.SetUint64(counters.WriteBytes) + readBytes.SetUint64(counters.ReadBytes) + + writeCount.SetUint64(counters.WriteCount) + readCount.SetUint64(counters.ReadCount) + + cgoCount.SetUint64(uint64(runtime.NumCgoCall())) + + return nil +} diff --git a/erigon-lib/common/disk/disk_darwin.go b/erigon-lib/common/disk/disk_darwin.go new file mode 100644 index 00000000000..02a9ba6c0c5 --- /dev/null +++ b/erigon-lib/common/disk/disk_darwin.go @@ -0,0 +1,17 @@ +//go:build darwin + +package disk + +import ( + "runtime" + + "github.com/ledgerwatch/erigon-lib/metrics" +) + +var cgoCount = metrics.NewGauge(`go_cgo_calls_count`) + +func UpdatePrometheusDiskStats() error { + cgoCount.SetUint64(uint64(runtime.NumCgoCall())) + + return nil +} diff --git a/erigon-lib/common/disk/disk_linux.go b/erigon-lib/common/disk/disk_linux.go new file mode 100644 index 00000000000..07062fa9c9a --- /dev/null +++ b/erigon-lib/common/disk/disk_linux.go @@ -0,0 +1,55 @@ +//go:build linux + +package disk + +import ( + "os" + "runtime" + + "github.com/shirou/gopsutil/v3/process" + + "github.com/ledgerwatch/erigon-lib/metrics" +) + +var ( + diskMajorFaults = metrics.NewGauge(`process_major_pagefaults_total`) + diskMinorFaults = metrics.NewGauge(`process_minor_pagefaults_total`) + + writeCount = metrics.NewGauge(`process_io_write_syscalls_total`) + readCount = metrics.NewGauge(`process_io_read_syscalls_total`) + + writeBytes = metrics.NewGauge(`process_io_storage_written_bytes_total`) + readBytes = metrics.NewGauge(`process_io_storage_read_bytes_total`) + + cgoCount = metrics.NewGauge(`go_cgo_calls_count`) +) + +func UpdatePrometheusDiskStats() error { + p, err := process.NewProcess(int32(os.Getpid())) + if err != nil { + return err + } + + faults, err := p.PageFaults() + if err != nil { + return err + } + + counters, err := p.IOCounters() + if err != nil { + return err + } + + diskMajorFaults.SetUint64(faults.MajorFaults) + diskMinorFaults.SetUint64(faults.MinorFaults) + + writeCount.SetUint64(counters.WriteCount) + readCount.SetUint64(counters.ReadCount) + + writeBytes.SetUint64(counters.WriteBytes) + readBytes.SetUint64(counters.ReadBytes) + + cgoCount.SetUint64(uint64(runtime.NumCgoCall())) + + return nil +} diff --git a/erigon-lib/common/mem/common.go b/erigon-lib/common/mem/common.go new file mode 100644 index 00000000000..0396da6a064 --- /dev/null +++ b/erigon-lib/common/mem/common.go @@ -0,0 +1,83 @@ +package mem + +import ( + "context" + "errors" + "reflect" + "runtime" + "time" + + "github.com/ledgerwatch/log/v3" + "github.com/shirou/gopsutil/v3/process" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/erigon-lib/diagnostics" +) + +var ErrorUnsupportedPlatform = errors.New("unsupported platform") + +type VirtualMemStat struct { + process.MemoryMapsStat +} + +// Fields converts VirtualMemStat to slice +func (m VirtualMemStat) Fields() []interface{} { + typ := reflect.TypeOf(m.MemoryMapsStat) + val := reflect.ValueOf(m.MemoryMapsStat) + + var s []interface{} + for i := 0; i < typ.NumField(); i++ { + t := typ.Field(i).Name + if t == "Path" { // always empty for aggregated smap statistics + continue + } + + value := val.Field(i).Interface() + if uint64Val, ok := value.(uint64); ok { + value = common.ByteCount(uint64Val) + } + + s = append(s, t, value) + } + + return s +} + +func LogMemStats(ctx context.Context, logger log.Logger) { + logEvery := time.NewTicker(180 * time.Second) + defer logEvery.Stop() + + for { + select { + case <-ctx.Done(): + return + case <-logEvery.C: + vm, err := ReadVirtualMemStats() + if err != nil { + // suppress error if platform is unsupported, we just print out heap stats + if errors.Is(err, ErrorUnsupportedPlatform) { + logger.Warn("[mem] error reading virtual memory stats", "err", err) + continue + } + } + + var m runtime.MemStats + dbg.ReadMemStats(&m) + + v := VirtualMemStat{vm} + l := v.Fields() + l = append(l, "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys)) + + diagnostics.Send(diagnostics.MemoryStats{ + Alloc: m.Alloc, + Sys: m.Sys, + OtherFields: v.Fields(), + Timestamp: time.Now(), + }) + + logger.Info("[mem] memory stats", l...) + UpdatePrometheusVirtualMemStats(vm) + } + } +} diff --git a/erigon-lib/common/mem/mem.go b/erigon-lib/common/mem/mem.go new file mode 100644 index 00000000000..968872449cd --- /dev/null +++ b/erigon-lib/common/mem/mem.go @@ -0,0 +1,15 @@ +//go:build !linux + +package mem + +import ( + "errors" + + "github.com/shirou/gopsutil/v3/process" +) + +func ReadVirtualMemStats() (process.MemoryMapsStat, error) { + return process.MemoryMapsStat{}, errors.New("unsupported platform") +} + +func UpdatePrometheusVirtualMemStats(p process.MemoryMapsStat) {} diff --git a/erigon-lib/common/mem/mem_linux.go b/erigon-lib/common/mem/mem_linux.go new file mode 100644 index 00000000000..7bdbcf873df --- /dev/null +++ b/erigon-lib/common/mem/mem_linux.go @@ -0,0 +1,65 @@ +//go:build linux + +package mem + +import ( + "os" + "reflect" + + "github.com/shirou/gopsutil/v3/process" + + "github.com/ledgerwatch/erigon-lib/metrics" +) + +var ( + memRssGauge = metrics.NewGauge(`mem_rss`) + memSizeGauge = metrics.NewGauge(`mem_size`) + memPssGauge = metrics.NewGauge(`mem_pss`) + memSharedCleanGauge = metrics.NewGauge(`mem_shared{type="clean"}`) + memSharedDirtyGauge = metrics.NewGauge(`mem_shared{type="dirty"}`) + memPrivateCleanGauge = metrics.NewGauge(`mem_private{type="clean"}`) + memPrivateDirtyGauge = metrics.NewGauge(`mem_private{type="dirty"}`) + memReferencedGauge = metrics.NewGauge(`mem_referenced`) + memAnonymousGauge = metrics.NewGauge(`mem_anonymous`) + memSwapGauge = metrics.NewGauge(`mem_swap`) +) + +func ReadVirtualMemStats() (process.MemoryMapsStat, error) { + pid := os.Getpid() + proc, err := process.NewProcess(int32(pid)) + if err != nil { + return process.MemoryMapsStat{}, err + } + + memoryMaps, err := proc.MemoryMaps(true) + if err != nil { + return process.MemoryMapsStat{}, err + } + + m := (*memoryMaps)[0] + + // convert from kilobytes to bytes + val := reflect.ValueOf(&m).Elem() + for i := 0; i < val.NumField(); i++ { + field := val.Field(i) + + if field.Kind() == reflect.Uint64 { + field.SetUint(field.Interface().(uint64) * 1024) + } + } + + return m, nil +} + +func UpdatePrometheusVirtualMemStats(p process.MemoryMapsStat) { + memRssGauge.SetUint64(p.Rss) + memSizeGauge.SetUint64(p.Size) + memPssGauge.SetUint64(p.Pss) + memSharedCleanGauge.SetUint64(p.SharedClean) + memSharedDirtyGauge.SetUint64(p.SharedDirty) + memPrivateCleanGauge.SetUint64(p.PrivateClean) + memPrivateDirtyGauge.SetUint64(p.PrivateDirty) + memReferencedGauge.SetUint64(p.Referenced) + memAnonymousGauge.SetUint64(p.Anonymous) + memSwapGauge.SetUint64(p.Swap) +} diff --git a/erigon-lib/common/metrics/block_metrics.go b/erigon-lib/common/metrics/block_metrics.go new file mode 100644 index 00000000000..5ba547221e0 --- /dev/null +++ b/erigon-lib/common/metrics/block_metrics.go @@ -0,0 +1,64 @@ +package metrics + +import ( + "time" + + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/metrics" +) + +var ( + DelayLoggingEnabled bool + + BlockConsumerHeaderDownloadDelay = metrics.NewSummary(`block_consumer_delay{type="header_download"}`) + BlockConsumerBodyDownloadDelay = metrics.NewSummary(`block_consumer_delay{type="body_download"}`) + BlockConsumerPreExecutionDelay = metrics.NewSummary(`block_consumer_delay{type="pre_execution"}`) + BlockConsumerPostExecutionDelay = metrics.NewSummary(`block_consumer_delay{type="post_execution"}`) + BlockProducerProductionDelay = metrics.NewSummary(`block_producer_delay{type="production"}`) +) + +func UpdateBlockConsumerHeaderDownloadDelay(parentTime uint64, blockNumber uint64, log log.Logger) { + t := time.Unix(int64(parentTime), 0) + BlockConsumerHeaderDownloadDelay.ObserveDuration(t) + + if DelayLoggingEnabled { + log.Info("[consumer-delay] Header", "blockNumber", blockNumber, "delay", time.Since(t)) + } +} + +func UpdateBlockConsumerBodyDownloadDelay(parentTime uint64, blockNumber uint64, log log.Logger) { + t := time.Unix(int64(parentTime), 0) + BlockConsumerBodyDownloadDelay.ObserveDuration(t) + + if DelayLoggingEnabled { + log.Info("[consumer-delay] Body", "blockNumber", blockNumber, "delay", time.Since(t)) + } +} + +func UpdateBlockConsumerPreExecutionDelay(parentTime uint64, blockNumber uint64, log log.Logger) { + t := time.Unix(int64(parentTime), 0) + BlockConsumerPreExecutionDelay.ObserveDuration(t) + + if DelayLoggingEnabled { + log.Info("[consumer-delay] Pre-execution", "blockNumber", blockNumber, "delay", time.Since(t)) + } +} + +func UpdateBlockConsumerPostExecutionDelay(parentTime uint64, blockNumber uint64, log log.Logger) { + t := time.Unix(int64(parentTime), 0) + BlockConsumerPostExecutionDelay.ObserveDuration(t) + + if DelayLoggingEnabled { + log.Info("[consumer-delay] Post-execution", "blockNumber", blockNumber, "delay", time.Since(t)) + } +} + +func UpdateBlockProducerProductionDelay(parentTime uint64, blockNumber uint64, log log.Logger) { + t := time.Unix(int64(parentTime), 0) + BlockProducerProductionDelay.ObserveDuration(t) + + if DelayLoggingEnabled { + log.Info("[producer-delay] Production", "blockNumber", blockNumber, "delay", time.Since(t)) + } +} diff --git a/erigon-lib/common/metrics/metrics_enabled.go b/erigon-lib/common/metrics/metrics_enabled.go index dff5154390b..0f3b89bd6d6 100644 --- a/erigon-lib/common/metrics/metrics_enabled.go +++ b/erigon-lib/common/metrics/metrics_enabled.go @@ -28,6 +28,6 @@ type Config struct { //nolint:maligned var DefaultConfig = Config{ Enabled: false, EnabledExpensive: false, - HTTP: "127.0.0.1", + HTTP: "0.0.0.0", Port: 6060, } diff --git a/erigon-lib/common/sorted.go b/erigon-lib/common/sorted.go index 2c077fffaeb..0d185383ede 100644 --- a/erigon-lib/common/sorted.go +++ b/erigon-lib/common/sorted.go @@ -17,8 +17,9 @@ package common import ( + "slices" + "golang.org/x/exp/constraints" - "golang.org/x/exp/slices" ) func SortedKeys[K constraints.Ordered, V any](m map[K]V) []K { diff --git a/erigon-lib/config3/config3.go b/erigon-lib/config3/config3.go new file mode 100644 index 00000000000..d371cafeafa --- /dev/null +++ b/erigon-lib/config3/config3.go @@ -0,0 +1,4 @@ +package config3 + +// AggregationStep number of transactions in smallest static file +const HistoryV3AggregationStep = 3_125_000 // 100M / 32 diff --git a/eth/ethconfig/erigon3_test_disable.go b/erigon-lib/config3/erigon3_test_disable.go similarity index 86% rename from eth/ethconfig/erigon3_test_disable.go rename to erigon-lib/config3/erigon3_test_disable.go index 77d80ace942..2857c940b11 100644 --- a/eth/ethconfig/erigon3_test_disable.go +++ b/erigon-lib/config3/erigon3_test_disable.go @@ -1,6 +1,6 @@ //go:build !erigon3 && !e3 && !erigon4 && !e4 -package ethconfig +package config3 const EnableHistoryV3InTest = false const EnableHistoryV4InTest = false diff --git a/eth/ethconfig/erigon3_test_enable.go b/erigon-lib/config3/erigon3_test_enable.go similarity index 84% rename from eth/ethconfig/erigon3_test_enable.go rename to erigon-lib/config3/erigon3_test_enable.go index ae1ee98d27a..39eb00b1fb7 100644 --- a/eth/ethconfig/erigon3_test_enable.go +++ b/erigon-lib/config3/erigon3_test_enable.go @@ -1,6 +1,6 @@ //go:build erigon3 || e3 -package ethconfig +package config3 const EnableHistoryV3InTest = true const EnableHistoryV4InTest = false diff --git a/eth/ethconfig/erigon4_test_enable.go b/erigon-lib/config3/erigon4_test_enable.go similarity index 84% rename from eth/ethconfig/erigon4_test_enable.go rename to erigon-lib/config3/erigon4_test_enable.go index 15d417ed914..2e6255a4067 100644 --- a/eth/ethconfig/erigon4_test_enable.go +++ b/erigon-lib/config3/erigon4_test_enable.go @@ -1,6 +1,6 @@ //go:build erigon4 || e4 -package ethconfig +package config3 const EnableHistoryV3InTest = true const EnableHistoryV4InTest = true diff --git a/erigon-lib/diagnostics/block_execution.go b/erigon-lib/diagnostics/block_execution.go new file mode 100644 index 00000000000..fcb448376a8 --- /dev/null +++ b/erigon-lib/diagnostics/block_execution.go @@ -0,0 +1,34 @@ +package diagnostics + +import ( + "context" + + "github.com/ledgerwatch/log/v3" +) + +func (d *DiagnosticClient) setupBlockExecutionDiagnostics(rootCtx context.Context) { + d.runBlockExecutionListener(rootCtx) +} + +func (d *DiagnosticClient) runBlockExecutionListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[BlockExecutionStatistics](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(BlockExecutionStatistics{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + d.syncStats.BlockExecution = info + d.mu.Unlock() + + if d.syncStats.SyncFinished { + return + } + } + } + }() +} diff --git a/erigon-lib/diagnostics/bodies.go b/erigon-lib/diagnostics/bodies.go new file mode 100644 index 00000000000..6c8c50916e6 --- /dev/null +++ b/erigon-lib/diagnostics/bodies.go @@ -0,0 +1,100 @@ +package diagnostics + +import ( + "context" + + "github.com/ledgerwatch/log/v3" +) + +func (d *DiagnosticClient) setupBodiesDiagnostics(rootCtx context.Context) { + d.runBodiesBlockDownloadListener(rootCtx) + d.runBodiesBlockWriteListener(rootCtx) + d.runBodiesProcessingListener(rootCtx) + d.runBodiesProcessedListener(rootCtx) +} + +func (d *DiagnosticClient) runBodiesBlockDownloadListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[BodiesDownloadBlockUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(BodiesDownloadBlockUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.bodiesMutex.Lock() + d.bodies.BlockDownload = info + d.bodiesMutex.Unlock() + } + } + + }() +} + +func (d *DiagnosticClient) runBodiesBlockWriteListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[BodiesWriteBlockUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(BodiesWriteBlockUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.bodiesMutex.Lock() + d.bodies.BlockWrite = info + d.bodiesMutex.Unlock() + } + } + + }() +} + +func (d *DiagnosticClient) runBodiesProcessedListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[BodiesProcessedUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(BodiesProcessedUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.bodiesMutex.Lock() + d.bodies.Processed = info + d.bodiesMutex.Unlock() + } + } + + }() +} + +func (d *DiagnosticClient) runBodiesProcessingListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[BodiesProcessingUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(BodiesProcessingUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.bodiesMutex.Lock() + d.bodies.Processing = info + d.bodiesMutex.Unlock() + } + } + + }() +} + +func (d *DiagnosticClient) GetBodiesInfo() BodiesInfo { + d.bodiesMutex.Lock() + defer d.bodiesMutex.Unlock() + return d.bodies +} diff --git a/erigon-lib/diagnostics/client.go b/erigon-lib/diagnostics/client.go new file mode 100644 index 00000000000..ecadc345126 --- /dev/null +++ b/erigon-lib/diagnostics/client.go @@ -0,0 +1,135 @@ +package diagnostics + +import ( + "context" + "net/http" + "path/filepath" + "sync" + + "github.com/c2h5oh/datasize" + "golang.org/x/sync/semaphore" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/mdbx" + "github.com/ledgerwatch/log/v3" +) + +type DiagnosticClient struct { + ctx context.Context + db kv.RwDB + metricsMux *http.ServeMux + dataDirPath string + speedTest bool + + syncStages []SyncStage + syncStats SyncStatistics + snapshotFileList SnapshoFilesList + mu sync.Mutex + headerMutex sync.Mutex + hardwareInfo HardwareInfo + peersStats *PeerStats + headers Headers + bodies BodiesInfo + bodiesMutex sync.Mutex + resourcesUsage ResourcesUsage + resourcesUsageMutex sync.Mutex + networkSpeed NetworkSpeedTestResult + networkSpeedMutex sync.Mutex +} + +func NewDiagnosticClient(ctx context.Context, metricsMux *http.ServeMux, dataDirPath string, speedTest bool) (*DiagnosticClient, error) { + dirPath := filepath.Join(dataDirPath, "diagnostics") + db, err := createDb(ctx, dirPath) + if err != nil { + return nil, err + } + + hInfo := ReadSysInfo(db) + ss := ReadSyncStages(db) + snpdwl := ReadSnapshotDownloadInfo(db) + snpidx := ReadSnapshotIndexingInfo(db) + + return &DiagnosticClient{ + ctx: ctx, + db: db, + metricsMux: metricsMux, + dataDirPath: dataDirPath, + speedTest: speedTest, + syncStages: ss, + syncStats: SyncStatistics{ + SnapshotDownload: snpdwl, + SnapshotIndexing: snpidx, + }, + hardwareInfo: hInfo, + snapshotFileList: SnapshoFilesList{}, + bodies: BodiesInfo{}, + resourcesUsage: ResourcesUsage{ + MemoryUsage: []MemoryStats{}, + }, + peersStats: NewPeerStats(1000), // 1000 is the limit of peers; TODO: make it configurable through a flag + }, nil +} + +func createDb(ctx context.Context, dbDir string) (db kv.RwDB, err error) { + db, err = mdbx.NewMDBX(log.New()). + Label(kv.DiagnosticsDB). + WithTableCfg(func(defaultBuckets kv.TableCfg) kv.TableCfg { return kv.DiagnosticsTablesCfg }). + GrowthStep(4 * datasize.MB). + MapSize(16 * datasize.GB). + PageSize(uint64(4 * datasize.KB)). + RoTxsLimiter(semaphore.NewWeighted(9_000)). + Path(dbDir). + Open(ctx) + if err != nil { + return nil, err + } + + return db, nil +} + +func (d *DiagnosticClient) Setup() { + + rootCtx, _ := common.RootContext() + + d.setupSnapshotDiagnostics(rootCtx) + d.setupStagesDiagnostics(rootCtx) + d.setupSysInfoDiagnostics() + d.setupNetworkDiagnostics(rootCtx) + d.setupBlockExecutionDiagnostics(rootCtx) + d.setupHeadersDiagnostics(rootCtx) + d.setupBodiesDiagnostics(rootCtx) + d.setupResourcesUsageDiagnostics(rootCtx) + d.setupSpeedtestDiagnostics(rootCtx) + + //d.logDiagMsgs() +} + +/*func (d *DiagnosticClient) logDiagMsgs() { + ticker := time.NewTicker(20 * time.Second) + quit := make(chan struct{}) + go func() { + for { + select { + case <-ticker.C: + d.logStr() + case <-quit: + ticker.Stop() + return + } + } + }() +} +func (d *DiagnosticClient) logStr() { + d.mu.Lock() + defer d.mu.Unlock() + log.Info("SyncStatistics", "stats", interfaceToJSONString(d.syncStats)) +} + +func interfaceToJSONString(i interface{}) string { + b, err := json.Marshal(i) + if err != nil { + return "" + } + return string(b) +}*/ diff --git a/erigon-lib/diagnostics/entities.go b/erigon-lib/diagnostics/entities.go index fe8656249de..5eaea58f081 100644 --- a/erigon-lib/diagnostics/entities.go +++ b/erigon-lib/diagnostics/entities.go @@ -16,11 +16,29 @@ package diagnostics -type PeerStatisticsGetter interface { - GetPeersStatistics() map[string]*PeerStatistics -} +import ( + "time" +) + +type SyncStageType string + +const ( + Snapshots SyncStageType = "Snapshots" + BlockHashes SyncStageType = "BlockHashes" + Senders SyncStageType = "Senders" + Execution SyncStageType = "Execution" + HashState SyncStageType = "HashState" + IntermediateHashes SyncStageType = "IntermediateHashes" + CallTraces SyncStageType = "CallTraces" + AccountHistoryIndex SyncStageType = "AccountHistoryIndex" + StorageHistoryIndex SyncStageType = "StorageHistoryIndex" + LogIndex SyncStageType = "LogIndex" + TxLookup SyncStageType = "TxLookup" + Finish SyncStageType = "Finish" +) type PeerStatistics struct { + PeerType string BytesIn uint64 BytesOut uint64 CapBytesIn map[string]uint64 @@ -29,10 +47,30 @@ type PeerStatistics struct { TypeBytesOut map[string]uint64 } +type PeerDataUpdate struct { + PeerID string + ENR string + Enode string + ID string + Name string + Type string + Caps []string +} + +type PeerStatisticMsgUpdate struct { + PeerType string + PeerID string + Inbound bool + MsgType string + MsgCap string + Bytes int +} + type SyncStatistics struct { - SyncStages SyncStages `json:"syncStages"` SnapshotDownload SnapshotDownloadStatistics `json:"snapshotDownload"` SnapshotIndexing SnapshotIndexingStatistics `json:"snapshotIndexing"` + BlockExecution BlockExecutionStatistics `json:"blockExecution"` + SyncFinished bool `json:"syncFinished"` } type SnapshotDownloadStatistics struct { @@ -52,13 +90,28 @@ type SnapshotDownloadStatistics struct { } type SegmentDownloadStatistics struct { - Name string `json:"name"` - TotalBytes uint64 `json:"totalBytes"` - DownloadedBytes uint64 `json:"downloadedBytes"` - WebseedsCount int `json:"webseedsCount"` - PeersCount int `json:"peersCount"` - WebseedsRate uint64 `json:"webseedsRate"` - PeersRate uint64 `json:"peersRate"` + Name string `json:"name"` + TotalBytes uint64 `json:"totalBytes"` + DownloadedBytes uint64 `json:"downloadedBytes"` + Webseeds []SegmentPeer `json:"webseeds"` + Peers []SegmentPeer `json:"peers"` + DownloadedStats FileDownloadedStatistics `json:"downloadedStats"` +} + +type FileDownloadedStatistics struct { + TimeTook float64 `json:"timeTook"` + AverageRate uint64 `json:"averageRate"` +} + +type FileDownloadedStatisticsUpdate struct { + FileName string `json:"fileName"` + TimeTook float64 `json:"timeTook"` + AverageRate uint64 `json:"averageRate"` +} + +type SegmentPeer struct { + Url string `json:"url"` + DownloadRate uint64 `json:"downloadRate"` } type SnapshotIndexingStatistics struct { @@ -77,17 +130,170 @@ type SnapshotSegmentIndexingFinishedUpdate struct { SegmentName string `json:"segmentName"` } -type SyncStagesList struct { - Stages []string `json:"stages"` +type BlockExecutionStatistics struct { + From uint64 `json:"from"` + To uint64 `json:"to"` + BlockNumber uint64 `json:"blockNumber"` + BlkPerSec float64 `json:"blkPerSec"` + TxPerSec float64 `json:"txPerSec"` + MgasPerSec float64 `json:"mgasPerSec"` + GasState float64 `json:"gasState"` + Batch uint64 `json:"batch"` + Alloc uint64 `json:"alloc"` + Sys uint64 `json:"sys"` + TimeElapsed float64 `json:"timeElapsed"` +} + +type SnapshoFilesList struct { + Files []string `json:"files"` +} + +type HardwareInfo struct { + Disk DiskInfo `json:"disk"` + RAM RAMInfo `json:"ram"` + CPU CPUInfo `json:"cpu"` +} + +type RAMInfo struct { + Total uint64 `json:"total"` + Free uint64 `json:"free"` +} + +type DiskInfo struct { + FsType string `json:"fsType"` + Total uint64 `json:"total"` + Free uint64 `json:"free"` +} + +type CPUInfo struct { + Cores int `json:"cores"` + ModelName string `json:"modelName"` + Mhz float64 `json:"mhz"` +} + +type BlockHeadersUpdate struct { + CurrentBlockNumber uint64 `json:"blockNumber"` + PreviousBlockNumber uint64 `json:"previousBlockNumber"` + Speed float64 `json:"speed"` + Alloc uint64 `json:"alloc"` + Sys uint64 `json:"sys"` + InvalidHeaders int `json:"invalidHeaders"` + RejectedBadHeaders int `json:"rejectedBadHeaders"` +} + +type HeadersWaitingUpdate struct { + From uint64 `json:"from"` +} + +type HeaderCanonicalMarkerUpdate struct { + AncestorHeight uint64 `json:"ancestorHeight"` + AncestorHash string `json:"ancestorHash"` +} +type HeadersProcessedUpdate struct { + Highest uint64 `json:"highest"` + Age int `json:"age"` + Headers uint64 `json:"headers"` + In float64 `json:"in"` + BlkPerSec uint64 `json:"blkPerSec"` +} + +type Headers struct { + WaitingForHeaders uint64 `json:"waitingForHeaders"` + WriteHeaders BlockHeadersUpdate `json:"writeHeaders"` + CanonicalMarker HeaderCanonicalMarkerUpdate `json:"canonicalMarker"` + Processed HeadersProcessedUpdate `json:"processed"` +} +type BodiesInfo struct { + BlockDownload BodiesDownloadBlockUpdate `json:"blockDownload"` + BlockWrite BodiesWriteBlockUpdate `json:"blockWrite"` + Processed BodiesProcessedUpdate `json:"processed"` + Processing BodiesProcessingUpdate `json:"processing"` +} + +type BodiesDownloadBlockUpdate struct { + BlockNumber uint64 `json:"blockNumber"` + DeliveryPerSec uint64 `json:"deliveryPerSec"` + WastedPerSec uint64 `json:"wastedPerSec"` + Remaining uint64 `json:"remaining"` + Delivered uint64 `json:"delivered"` + BlockPerSec uint64 `json:"blockPerSec"` + Cache uint64 `json:"cache"` + Alloc uint64 `json:"alloc"` + Sys uint64 `json:"sys"` +} + +type BodiesWriteBlockUpdate struct { + BlockNumber uint64 `json:"blockNumber"` + Remaining uint64 `json:"remaining"` + Alloc uint64 `json:"alloc"` + Sys uint64 `json:"sys"` +} + +type BodiesProcessedUpdate struct { + HighestBlock uint64 `json:"highestBlock"` + Blocks uint64 `json:"blocks"` + TimeElapsed float64 `json:"timeElapsed"` + BlkPerSec float64 `json:"blkPerSec"` +} + +type BodiesProcessingUpdate struct { + From uint64 `json:"from"` + To uint64 `json:"to"` +} + +type ResourcesUsage struct { + MemoryUsage []MemoryStats `json:"memoryUsage"` +} + +type MemoryStats struct { + Alloc uint64 `json:"alloc"` + Sys uint64 `json:"sys"` + OtherFields []interface{} + Timestamp time.Time `json:"timestamp"` + StageIndex CurrentSyncStagesIdxs `json:"stageIndex"` +} + +type NetworkSpeedTestResult struct { + Latency time.Duration `json:"latency"` + DownloadSpeed float64 `json:"downloadSpeed"` + UploadSpeed float64 `json:"uploadSpeed"` + PacketLoss float64 `json:"packetLoss"` +} + +func (ti FileDownloadedStatisticsUpdate) Type() Type { + return TypeOf(ti) +} + +func (ti MemoryStats) Type() Type { + return TypeOf(ti) +} + +func (ti BodiesProcessingUpdate) Type() Type { + return TypeOf(ti) +} + +func (ti BodiesProcessedUpdate) Type() Type { + return TypeOf(ti) +} + +func (ti BodiesWriteBlockUpdate) Type() Type { + return TypeOf(ti) +} + +func (ti BodiesDownloadBlockUpdate) Type() Type { + return TypeOf(ti) +} + +func (ti BlockHeadersUpdate) Type() Type { + return TypeOf(ti) } -type CurrentSyncStage struct { - Stage uint `json:"stage"` +func (ti SnapshoFilesList) Type() Type { + return TypeOf(ti) } -type SyncStages struct { - StagesList []string `json:"stagesList"` - CurrentStage uint `json:"currentStage"` +func (ti BlockExecutionStatistics) Type() Type { + return TypeOf(ti) } func (ti SnapshotDownloadStatistics) Type() Type { @@ -106,10 +312,18 @@ func (ti SnapshotSegmentIndexingFinishedUpdate) Type() Type { return TypeOf(ti) } -func (ti SyncStagesList) Type() Type { +func (ti PeerStatisticMsgUpdate) Type() Type { + return TypeOf(ti) +} + +func (ti HeadersWaitingUpdate) Type() Type { + return TypeOf(ti) +} + +func (ti HeaderCanonicalMarkerUpdate) Type() Type { return TypeOf(ti) } -func (ti CurrentSyncStage) Type() Type { +func (ti HeadersProcessedUpdate) Type() Type { return TypeOf(ti) } diff --git a/erigon-lib/diagnostics/headers.go b/erigon-lib/diagnostics/headers.go new file mode 100644 index 00000000000..9bf60521949 --- /dev/null +++ b/erigon-lib/diagnostics/headers.go @@ -0,0 +1,102 @@ +package diagnostics + +import ( + "context" + + "github.com/ledgerwatch/log/v3" +) + +func (d *DiagnosticClient) setupHeadersDiagnostics(rootCtx context.Context) { + d.runHeadersWaitingListener(rootCtx) + d.runWriteHeadersListener(rootCtx) + d.runCanonicalMarkerListener(rootCtx) + d.runProcessedListener(rootCtx) +} + +func (d *DiagnosticClient) GetHeaders() Headers { + return d.headers +} + +func (d *DiagnosticClient) runHeadersWaitingListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[HeadersWaitingUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(HeadersWaitingUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.headerMutex.Lock() + d.headers.WaitingForHeaders = info.From + d.headerMutex.Unlock() + + return + } + } + }() +} + +func (d *DiagnosticClient) runWriteHeadersListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[BlockHeadersUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(BlockHeadersUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.headerMutex.Lock() + d.headers.WriteHeaders = info + d.headerMutex.Unlock() + + return + } + } + }() +} + +func (d *DiagnosticClient) runCanonicalMarkerListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[HeaderCanonicalMarkerUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(HeaderCanonicalMarkerUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.headerMutex.Lock() + d.headers.CanonicalMarker = info + d.headerMutex.Unlock() + + return + } + } + }() +} + +func (d *DiagnosticClient) runProcessedListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[HeadersProcessedUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(HeadersProcessedUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.headerMutex.Lock() + d.headers.Processed = info + d.headerMutex.Unlock() + + return + } + } + }() +} diff --git a/erigon-lib/diagnostics/network.go b/erigon-lib/diagnostics/network.go index 7436a4b9166..2306aa997bf 100644 --- a/erigon-lib/diagnostics/network.go +++ b/erigon-lib/diagnostics/network.go @@ -1,21 +1,193 @@ -/* - Copyright 2021 Erigon contributors +package diagnostics - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at +import ( + "context" + "sort" + "sync" + "time" - http://www.apache.org/licenses/LICENSE-2.0 + "github.com/ledgerwatch/log/v3" +) - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ +type PeerStats struct { + peersInfo *sync.Map + recordsCount int + lastUpdateMap map[string]time.Time + limit int +} -package diagnostics +func NewPeerStats(peerLimit int) *PeerStats { + return &PeerStats{ + peersInfo: &sync.Map{}, + recordsCount: 0, + lastUpdateMap: make(map[string]time.Time), + limit: peerLimit, + } +} + +func (p *PeerStats) AddOrUpdatePeer(peerID string, peerInfo PeerStatisticMsgUpdate) { + if value, ok := p.peersInfo.Load(peerID); ok { + p.UpdatePeer(peerID, peerInfo, value) + } else { + p.AddPeer(peerID, peerInfo) + if p.GetPeersCount() > p.limit { + p.RemovePeersWhichExceedLimit(p.limit) + } + } +} + +func (p *PeerStats) AddPeer(peerID string, peerInfo PeerStatisticMsgUpdate) { + pv := PeerStatisticsFromMsgUpdate(peerInfo, nil) + p.peersInfo.Store(peerID, pv) + p.recordsCount++ + p.lastUpdateMap[peerID] = time.Now() +} + +func (p *PeerStats) UpdatePeer(peerID string, peerInfo PeerStatisticMsgUpdate, prevValue any) { + pv := PeerStatisticsFromMsgUpdate(peerInfo, prevValue) + + p.peersInfo.Store(peerID, pv) + p.lastUpdateMap[peerID] = time.Now() +} + +func PeerStatisticsFromMsgUpdate(msg PeerStatisticMsgUpdate, prevValue any) PeerStatistics { + ps := PeerStatistics{ + PeerType: msg.PeerType, + BytesIn: 0, + BytesOut: 0, + CapBytesIn: make(map[string]uint64), + CapBytesOut: make(map[string]uint64), + TypeBytesIn: make(map[string]uint64), + TypeBytesOut: make(map[string]uint64), + } + + if stats, ok := prevValue.(PeerStatistics); ok { + if msg.Inbound { + ps.BytesIn = stats.BytesIn + uint64(msg.Bytes) + ps.CapBytesIn[msg.MsgCap] = stats.CapBytesIn[msg.MsgCap] + uint64(msg.Bytes) + ps.TypeBytesIn[msg.MsgType] = stats.TypeBytesIn[msg.MsgType] + uint64(msg.Bytes) + } else { + ps.BytesOut = stats.BytesOut + uint64(msg.Bytes) + ps.CapBytesOut[msg.MsgCap] = stats.CapBytesOut[msg.MsgCap] + uint64(msg.Bytes) + ps.TypeBytesOut[msg.MsgType] = stats.TypeBytesOut[msg.MsgType] + uint64(msg.Bytes) + } + } else { + if msg.Inbound { + ps.BytesIn += uint64(msg.Bytes) + ps.CapBytesIn[msg.MsgCap] += uint64(msg.Bytes) + ps.TypeBytesIn[msg.MsgType] += uint64(msg.Bytes) + } else { + ps.BytesOut += uint64(msg.Bytes) + ps.CapBytesOut[msg.MsgCap] += uint64(msg.Bytes) + ps.TypeBytesOut[msg.MsgType] += uint64(msg.Bytes) + } + + } + + return ps +} + +func (p *PeerStats) GetPeersCount() int { + return p.recordsCount +} + +func (p *PeerStats) GetPeers() map[string]*PeerStatistics { + stats := make(map[string]*PeerStatistics) + + p.peersInfo.Range(func(key, value interface{}) bool { + if loadedKey, ok := key.(string); ok { + if loadedValue, ok := value.(PeerStatistics); ok { + stats[loadedKey] = &loadedValue + } else { + log.Debug("Failed to cast value to PeerStatistics struct", value) + } + } else { + log.Debug("Failed to cast key to string", key) + } + + return true + }) + + return stats +} + +func (p *PeerStats) GetPeerStatistics(peerID string) PeerStatistics { + if value, ok := p.peersInfo.Load(peerID); ok { + if peerStats, ok := value.(PeerStatistics); ok { + return peerStats + } + } + + return PeerStatistics{} +} + +func (p *PeerStats) GetLastUpdate(peerID string) time.Time { + if lastUpdate, ok := p.lastUpdateMap[peerID]; ok { + return lastUpdate + } + + return time.Time{} +} + +func (p *PeerStats) RemovePeer(peerID string) { + p.peersInfo.Delete(peerID) + p.recordsCount-- + delete(p.lastUpdateMap, peerID) +} + +type PeerUpdTime struct { + PeerID string + Time time.Time +} + +func (p *PeerStats) GetOldestUpdatedPeersWithSize(size int) []PeerUpdTime { + timeArray := make([]PeerUpdTime, 0, p.GetPeersCount()) + for k, v := range p.lastUpdateMap { + timeArray = append(timeArray, PeerUpdTime{k, v}) + } + + sort.Slice(timeArray, func(i, j int) bool { + return timeArray[i].Time.Before(timeArray[j].Time) + }) + + if len(timeArray) < size { + return timeArray + } else { + return timeArray[:size] + } +} + +func (p *PeerStats) RemovePeersWhichExceedLimit(limit int) { + peersToRemove := p.GetPeersCount() - limit + if peersToRemove > 0 { + peers := p.GetOldestUpdatedPeersWithSize(peersToRemove) + for _, peer := range peers { + p.RemovePeer(peer.PeerID) + } + } +} + +func (d *DiagnosticClient) setupNetworkDiagnostics(rootCtx context.Context) { + d.runCollectPeersStatistics(rootCtx) +} + +func (d *DiagnosticClient) runCollectPeersStatistics(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[PeerStatisticMsgUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(PeerStatisticMsgUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.peersStats.AddOrUpdatePeer(info.PeerID, info) + } + } + }() +} -func (p PeerStatistics) Type() Type { - return TypeOf(p) +func (d *DiagnosticClient) Peers() map[string]*PeerStatistics { + return d.peersStats.GetPeers() } diff --git a/erigon-lib/diagnostics/network_test.go b/erigon-lib/diagnostics/network_test.go new file mode 100644 index 00000000000..122c2e117e4 --- /dev/null +++ b/erigon-lib/diagnostics/network_test.go @@ -0,0 +1,212 @@ +package diagnostics_test + +import ( + "strconv" + "testing" + "time" + + "github.com/ledgerwatch/erigon-lib/diagnostics" + "github.com/stretchr/testify/require" +) + +var mockInboundPeerStats = diagnostics.PeerStatistics{ + PeerType: "Sentinel", + BytesIn: 10, + CapBytesIn: map[string]uint64{"msgCap1": 10}, + TypeBytesIn: map[string]uint64{"msgType1": 10}, + BytesOut: 0, + CapBytesOut: map[string]uint64{}, + TypeBytesOut: map[string]uint64{}, +} + +var mockOutboundPeerStats = diagnostics.PeerStatistics{ + PeerType: "Sentinel", + BytesIn: 0, + CapBytesIn: map[string]uint64{}, + TypeBytesIn: map[string]uint64{}, + BytesOut: 10, + CapBytesOut: map[string]uint64{"msgCap1": 10}, + TypeBytesOut: map[string]uint64{"msgType1": 10}, +} + +var mockInboundUpdMsg = diagnostics.PeerStatisticMsgUpdate{ + PeerType: "Sentinel", + PeerID: "test1", + Inbound: true, + MsgType: "msgType1", + MsgCap: "msgCap1", + Bytes: 10, +} + +var mockOutboundUpdMsg = diagnostics.PeerStatisticMsgUpdate{ + PeerType: "Sentinel", + PeerID: "test1", + Inbound: false, + MsgType: "msgType1", + MsgCap: "msgCap1", + Bytes: 10, +} + +func TestPeerStatisticsFromMsgUpdate(t *testing.T) { + //test handing inbound message + inboundPeerStats := diagnostics.PeerStatisticsFromMsgUpdate(mockInboundUpdMsg, nil) + require.Equal(t, mockInboundPeerStats, inboundPeerStats) + + inboundPeerStats = diagnostics.PeerStatisticsFromMsgUpdate(mockInboundUpdMsg, inboundPeerStats) + + require.Equal(t, diagnostics.PeerStatistics{ + PeerType: "Sentinel", + BytesIn: 20, + CapBytesIn: map[string]uint64{"msgCap1": 20}, + TypeBytesIn: map[string]uint64{"msgType1": 20}, + BytesOut: 0, + CapBytesOut: map[string]uint64{}, + TypeBytesOut: map[string]uint64{}, + }, inboundPeerStats) + + //test handing outbound message + outboundPeerStats := diagnostics.PeerStatisticsFromMsgUpdate(mockOutboundUpdMsg, nil) + require.Equal(t, mockOutboundPeerStats, outboundPeerStats) + + outboundPeerStats = diagnostics.PeerStatisticsFromMsgUpdate(mockOutboundUpdMsg, outboundPeerStats) + + require.Equal(t, diagnostics.PeerStatistics{ + PeerType: "Sentinel", + BytesIn: 0, + CapBytesIn: map[string]uint64{}, + TypeBytesIn: map[string]uint64{}, + BytesOut: 20, + CapBytesOut: map[string]uint64{"msgCap1": 20}, + TypeBytesOut: map[string]uint64{"msgType1": 20}, + }, outboundPeerStats) + +} + +func TestAddPeer(t *testing.T) { + var peerStats = diagnostics.NewPeerStats(100) + + peerStats.AddPeer("test1", mockInboundUpdMsg) + require.Equal(t, 1, peerStats.GetPeersCount()) + + require.Equal(t, mockInboundPeerStats, peerStats.GetPeerStatistics("test1")) +} + +func TestUpdatePeer(t *testing.T) { + peerStats := diagnostics.NewPeerStats(1000) + + peerStats.AddPeer("test1", mockInboundUpdMsg) + peerStats.UpdatePeer("test1", mockInboundUpdMsg, mockInboundPeerStats) + require.Equal(t, 1, peerStats.GetPeersCount()) + + require.Equal(t, diagnostics.PeerStatistics{ + PeerType: "Sentinel", + BytesIn: 20, + CapBytesIn: map[string]uint64{"msgCap1": 20}, + TypeBytesIn: map[string]uint64{"msgType1": 20}, + BytesOut: 0, + CapBytesOut: map[string]uint64{}, + TypeBytesOut: map[string]uint64{}, + }, peerStats.GetPeerStatistics("test1")) +} + +func TestAddOrUpdatePeer(t *testing.T) { + peerStats := diagnostics.NewPeerStats(100) + + peerStats.AddOrUpdatePeer("test1", mockInboundUpdMsg) + require.Equal(t, 1, peerStats.GetPeersCount()) + + require.Equal(t, mockInboundPeerStats, peerStats.GetPeerStatistics("test1")) + + peerStats.AddOrUpdatePeer("test1", mockInboundUpdMsg) + require.Equal(t, 1, peerStats.GetPeersCount()) + + require.Equal(t, diagnostics.PeerStatistics{ + PeerType: "Sentinel", + BytesIn: 20, + CapBytesIn: map[string]uint64{"msgCap1": 20}, + TypeBytesIn: map[string]uint64{"msgType1": 20}, + BytesOut: 0, + CapBytesOut: map[string]uint64{}, + TypeBytesOut: map[string]uint64{}, + }, peerStats.GetPeerStatistics("test1")) + + peerStats.AddOrUpdatePeer("test2", mockInboundUpdMsg) + require.Equal(t, 2, peerStats.GetPeersCount()) +} + +func TestGetPeers(t *testing.T) { + peerStats := diagnostics.NewPeerStats(10) + + peerStats.AddOrUpdatePeer("test1", mockInboundUpdMsg) + peerStats.AddOrUpdatePeer("test2", mockInboundUpdMsg) + peerStats.AddOrUpdatePeer("test3", mockInboundUpdMsg) + + peers := peerStats.GetPeers() + require.Equal(t, 3, len(peers)) + require.Equal(t, &mockInboundPeerStats, peers["test1"]) +} + +func TestLastUpdated(t *testing.T) { + peerStats := diagnostics.NewPeerStats(1000) + + peerStats.AddOrUpdatePeer("test1", mockInboundUpdMsg) + require.NotEmpty(t, peerStats.GetLastUpdate("test1")) + + for i := 1; i < 20; i++ { + pid := "test" + strconv.Itoa(i) + peerStats.AddOrUpdatePeer(pid, mockInboundUpdMsg) + //wait for 1 milisecond to make sure that the last update time is different + time.Sleep(10 * time.Millisecond) + } + + require.True(t, peerStats.GetLastUpdate("test2").After(peerStats.GetLastUpdate("test1"))) + + oldestPeers := peerStats.GetOldestUpdatedPeersWithSize(10) + + // we have 100 peers, but we should get only 10 oldest + require.Equal(t, len(oldestPeers), 10) + // the oldest peer should be test1 + require.Equal(t, "test1", oldestPeers[0].PeerID) + + // update test1 to + peerStats.AddOrUpdatePeer("test1", mockInboundUpdMsg) + oldestPeers = peerStats.GetOldestUpdatedPeersWithSize(10) + + // the oldest peer should not be test1 + require.NotEqual(t, "test1", oldestPeers[0].PeerID) +} + +func TestRemovePeersWhichExceedLimit(t *testing.T) { + limit := 100 + peerStats := diagnostics.NewPeerStats(limit) + + for i := 1; i < 105; i++ { + pid := "test" + strconv.Itoa(i) + peerStats.AddOrUpdatePeer(pid, mockInboundUpdMsg) + } + + peerStats.RemovePeersWhichExceedLimit(limit) + + require.Equal(t, limit, peerStats.GetPeersCount()) + + limit = 1000 + peerStats.RemovePeersWhichExceedLimit(limit) + + require.Equal(t, 100, peerStats.GetPeersCount()) +} + +func TestAddingPeersAboveTheLimit(t *testing.T) { + limit := 100 + peerStats := diagnostics.NewPeerStats(limit) + + for i := 1; i < 105; i++ { + pid := "test" + strconv.Itoa(i) + peerStats.AddOrUpdatePeer(pid, mockInboundUpdMsg) + } + + require.Equal(t, limit, peerStats.GetPeersCount()) + + peerStats.AddOrUpdatePeer("test105", mockInboundUpdMsg) + + require.Equal(t, limit, peerStats.GetPeersCount()) +} diff --git a/erigon-lib/diagnostics/provider.go b/erigon-lib/diagnostics/provider.go index 1ff14ab4b03..fe27c22f5d4 100644 --- a/erigon-lib/diagnostics/provider.go +++ b/erigon-lib/diagnostics/provider.go @@ -80,30 +80,6 @@ type registry struct { var providers = map[Type]*registry{} var providerMutex sync.RWMutex -func RegisterProvider(provider Provider, infoType Type, logger log.Logger) { - providerMutex.Lock() - defer providerMutex.Unlock() - - reg := providers[infoType] - - if reg != nil { - for _, p := range reg.providers { - if p == provider { - return - } - } - } else { - reg = ®istry{} - providers[infoType] = reg - } - - reg.providers = append(reg.providers, provider) - - if reg.context != nil { - go startProvider(reg.context, infoType, provider, logger) - } -} - func StartProviders(ctx context.Context, infoType Type, logger log.Logger) { providerMutex.Lock() @@ -140,17 +116,21 @@ func startProvider(ctx context.Context, infoType Type, provider Provider, logger } } -func Send[I Info](info I) error { +func Send[I Info](info I) { + defer func() { + if r := recover(); r != nil { + log.Debug("diagnostic Send panic recovered: %v, stack: %s", r, dbg.Stack()) + } + }() + ctx := info.Type().Context() if ctx.Err() != nil { - if !errors.Is(ctx.Err(), context.Canceled) { - // drop the diagnostic message if there is - // no active diagnostic context for the type - return nil + if errors.Is(ctx.Err(), context.Canceled) { + return } - return ctx.Err() + log.Debug("diagnostic send failed: context error", "err", ctx.Err()) } cval := ctx.Value(ckChan) @@ -165,10 +145,12 @@ func Send[I Info](info I) error { } } } else { - return fmt.Errorf("unexpected channel type: %T", cval) - } + if cval == nil { + return + } - return nil + log.Debug(fmt.Sprintf("unexpected channel type: %T", cval)) + } } func Context[I Info](ctx context.Context, buffer int) (context.Context, <-chan I, context.CancelFunc) { diff --git a/erigon-lib/diagnostics/provider_test.go b/erigon-lib/diagnostics/provider_test.go index b5f2fefc7f4..5329e7de4ea 100644 --- a/erigon-lib/diagnostics/provider_test.go +++ b/erigon-lib/diagnostics/provider_test.go @@ -17,10 +17,7 @@ func (ti testInfo) Type() diagnostics.Type { return diagnostics.TypeOf(ti) } -type testProvider struct { -} - -func (t *testProvider) StartDiagnostics(ctx context.Context) error { +func StartDiagnostics(ctx context.Context) error { timer := time.NewTicker(1 * time.Second) defer timer.Stop() @@ -39,64 +36,11 @@ func (t *testProvider) StartDiagnostics(ctx context.Context) error { func TestProviderRegistration(t *testing.T) { - // diagnostics provider - provider := &testProvider{} - diagnostics.RegisterProvider(provider, diagnostics.TypeOf(testInfo{}), log.Root()) - - // diagnostics receiver - ctx, ch, cancel := diagnostics.Context[testInfo](context.Background(), 1) - diagnostics.StartProviders(ctx, diagnostics.TypeOf(testInfo{}), log.Root()) - - for info := range ch { - if info.count == 3 { - cancel() - } - } -} - -func TestDelayedProviderRegistration(t *testing.T) { - - time.AfterFunc(1*time.Second, func() { - // diagnostics provider - provider := &testProvider{} - diagnostics.RegisterProvider(provider, diagnostics.TypeOf(testInfo{}), log.Root()) - }) - // diagnostics receiver ctx, ch, cancel := diagnostics.Context[testInfo](context.Background(), 1) diagnostics.StartProviders(ctx, diagnostics.TypeOf(testInfo{}), log.Root()) - for info := range ch { - if info.count == 3 { - cancel() - } - } -} - -func TestProviderFuncRegistration(t *testing.T) { - - // diagnostics provider - diagnostics.RegisterProvider(diagnostics.ProviderFunc(func(ctx context.Context) error { - timer := time.NewTicker(1 * time.Second) - defer timer.Stop() - - var count int - - for { - select { - case <-ctx.Done(): - return nil - case <-timer.C: - diagnostics.Send(testInfo{count}) - count++ - } - } - }), diagnostics.TypeOf(testInfo{}), log.Root()) - - // diagnostics receiver - ctx, ch, cancel := diagnostics.Context[testInfo](context.Background(), 1) - - diagnostics.StartProviders(ctx, diagnostics.TypeOf(testInfo{}), log.Root()) + go StartDiagnostics(ctx) for info := range ch { if info.count == 3 { diff --git a/erigon-lib/diagnostics/resources_usage.go b/erigon-lib/diagnostics/resources_usage.go new file mode 100644 index 00000000000..36064ce44b8 --- /dev/null +++ b/erigon-lib/diagnostics/resources_usage.go @@ -0,0 +1,40 @@ +package diagnostics + +import ( + "context" + + "github.com/ledgerwatch/log/v3" +) + +func (d *DiagnosticClient) setupResourcesUsageDiagnostics(rootCtx context.Context) { + d.runMemoryStatsListener(rootCtx) +} + +func (d *DiagnosticClient) GetResourcesUsage() ResourcesUsage { + d.resourcesUsageMutex.Lock() + defer d.resourcesUsageMutex.Unlock() + + returnObj := d.resourcesUsage + d.resourcesUsage = ResourcesUsage{} + return returnObj +} + +func (d *DiagnosticClient) runMemoryStatsListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[MemoryStats](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(MemoryStats{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.resourcesUsageMutex.Lock() + info.StageIndex = d.getCurrentSyncIdxs() + d.resourcesUsage.MemoryUsage = append(d.resourcesUsage.MemoryUsage, info) + d.resourcesUsageMutex.Unlock() + } + } + }() +} diff --git a/erigon-lib/diagnostics/snapshots.go b/erigon-lib/diagnostics/snapshots.go new file mode 100644 index 00000000000..f042510c6d4 --- /dev/null +++ b/erigon-lib/diagnostics/snapshots.go @@ -0,0 +1,398 @@ +package diagnostics + +import ( + "context" + "encoding/json" + "fmt" + "time" + + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/log/v3" +) + +var ( + SnapshotDownloadStatisticsKey = []byte("diagSnapshotDownloadStatistics") + SnapshotIndexingStatisticsKey = []byte("diagSnapshotIndexingStatistics") +) + +func (d *DiagnosticClient) setupSnapshotDiagnostics(rootCtx context.Context) { + d.runSnapshotListener(rootCtx) + d.runSegmentDownloadingListener(rootCtx) + d.runSegmentIndexingListener(rootCtx) + d.runSegmentIndexingFinishedListener(rootCtx) + d.runSnapshotFilesListListener(rootCtx) + d.runFileDownloadedListener(rootCtx) +} + +func (d *DiagnosticClient) runSnapshotListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[SnapshotDownloadStatistics](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(SnapshotDownloadStatistics{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + + d.mu.Lock() + d.syncStats.SnapshotDownload.Downloaded = info.Downloaded + d.syncStats.SnapshotDownload.Total = info.Total + d.syncStats.SnapshotDownload.TotalTime = info.TotalTime + d.syncStats.SnapshotDownload.DownloadRate = info.DownloadRate + d.syncStats.SnapshotDownload.UploadRate = info.UploadRate + d.syncStats.SnapshotDownload.Peers = info.Peers + d.syncStats.SnapshotDownload.Files = info.Files + d.syncStats.SnapshotDownload.Connections = info.Connections + d.syncStats.SnapshotDownload.Alloc = info.Alloc + d.syncStats.SnapshotDownload.Sys = info.Sys + d.syncStats.SnapshotDownload.DownloadFinished = info.DownloadFinished + d.syncStats.SnapshotDownload.TorrentMetadataReady = info.TorrentMetadataReady + + downloadedPercent := getPercentDownloaded(info.Downloaded, info.Total) + remainingBytes := info.Total - info.Downloaded + downloadTimeLeft := CalculateTime(remainingBytes, info.DownloadRate) + totalDownloadTimeString := time.Duration(info.TotalTime) * time.Second + + d.updateSnapshotStageStats(SyncStageStats{ + TimeElapsed: totalDownloadTimeString.String(), + TimeLeft: downloadTimeLeft, + Progress: downloadedPercent, + }, "Downloading snapshots") + + if err := d.db.Update(d.ctx, SnapshotDownloadUpdater(d.syncStats.SnapshotDownload)); err != nil { + log.Error("[Diagnostics] Failed to update snapshot download info", "err", err) + } + + d.saveSyncStagesToDB() + + d.mu.Unlock() + + if d.snapshotStageFinished() { + return + } + } + } + }() +} + +func getPercentDownloaded(downloaded, total uint64) string { + percent := float32(downloaded) / float32(total/100) + + if percent > 100 { + percent = 100 + } + + return fmt.Sprintf("%.2f%%", percent) +} + +func (d *DiagnosticClient) updateSnapshotStageStats(stats SyncStageStats, subStageInfo string) { + idxs := d.getCurrentSyncIdxs() + if idxs.Stage == -1 || idxs.SubStage == -1 { + log.Warn("[Diagnostics] Can't find running stage or substage while updating Snapshots stage stats.", "stages:", d.syncStages, "stats:", stats, "subStageInfo:", subStageInfo) + return + } + + d.syncStages[idxs.Stage].SubStages[idxs.SubStage].Stats = stats +} + +func (d *DiagnosticClient) snapshotStageFinished() bool { + idx := d.getCurrentSyncIdxs() + if idx.Stage > 0 { + return true + } else { + return false + } +} + +func (d *DiagnosticClient) runSegmentDownloadingListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[SegmentDownloadStatistics](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(SegmentDownloadStatistics{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + if d.syncStats.SnapshotDownload.SegmentsDownloading == nil { + d.syncStats.SnapshotDownload.SegmentsDownloading = map[string]SegmentDownloadStatistics{} + } + + if val, ok := d.syncStats.SnapshotDownload.SegmentsDownloading[info.Name]; ok { + val.TotalBytes = info.TotalBytes + val.DownloadedBytes = info.DownloadedBytes + val.Webseeds = info.Webseeds + val.Peers = info.Peers + + d.syncStats.SnapshotDownload.SegmentsDownloading[info.Name] = val + } else { + d.syncStats.SnapshotDownload.SegmentsDownloading[info.Name] = info + } + + if err := d.db.Update(d.ctx, SnapshotDownloadUpdater(d.syncStats.SnapshotDownload)); err != nil { + log.Error("[Diagnostics] Failed to update snapshot download info", "err", err) + } + + d.mu.Unlock() + } + } + }() +} + +func (d *DiagnosticClient) runSegmentIndexingListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[SnapshotIndexingStatistics](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(SnapshotIndexingStatistics{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.addOrUpdateSegmentIndexingState(info) + if err := d.db.Update(d.ctx, SnapshotIndexingUpdater(d.syncStats.SnapshotIndexing)); err != nil { + log.Error("[Diagnostics] Failed to update snapshot indexing info", "err", err) + } + } + } + }() +} + +func (d *DiagnosticClient) runSegmentIndexingFinishedListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[SnapshotSegmentIndexingFinishedUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(SnapshotSegmentIndexingFinishedUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + found := false + for i := range d.syncStats.SnapshotIndexing.Segments { + if d.syncStats.SnapshotIndexing.Segments[i].SegmentName == info.SegmentName { + found = true + d.syncStats.SnapshotIndexing.Segments[i].Percent = 100 + } + } + + if !found { + d.syncStats.SnapshotIndexing.Segments = append(d.syncStats.SnapshotIndexing.Segments, SnapshotSegmentIndexingStatistics{ + SegmentName: info.SegmentName, + Percent: 100, + Alloc: 0, + Sys: 0, + }) + } + + if err := d.db.Update(d.ctx, SnapshotIndexingUpdater(d.syncStats.SnapshotIndexing)); err != nil { + log.Error("[Diagnostics] Failed to update snapshot indexing info", "err", err) + } + + d.mu.Unlock() + } + } + }() +} + +func (d *DiagnosticClient) addOrUpdateSegmentIndexingState(upd SnapshotIndexingStatistics) { + d.mu.Lock() + defer d.mu.Unlock() + if d.syncStats.SnapshotIndexing.Segments == nil { + d.syncStats.SnapshotIndexing.Segments = []SnapshotSegmentIndexingStatistics{} + } + + for i := range upd.Segments { + found := false + for j := range d.syncStats.SnapshotIndexing.Segments { + if d.syncStats.SnapshotIndexing.Segments[j].SegmentName == upd.Segments[i].SegmentName { + d.syncStats.SnapshotIndexing.Segments[j].Percent = upd.Segments[i].Percent + d.syncStats.SnapshotIndexing.Segments[j].Alloc = upd.Segments[i].Alloc + d.syncStats.SnapshotIndexing.Segments[j].Sys = upd.Segments[i].Sys + found = true + break + } + } + + if !found { + d.syncStats.SnapshotIndexing.Segments = append(d.syncStats.SnapshotIndexing.Segments, upd.Segments[i]) + } + } + + d.syncStats.SnapshotIndexing.TimeElapsed = upd.TimeElapsed + + totalProgress := 0 + for _, seg := range d.syncStats.SnapshotIndexing.Segments { + totalProgress += seg.Percent + } + + d.updateSnapshotStageStats(SyncStageStats{ + TimeElapsed: SecondsToHHMMString(uint64(upd.TimeElapsed)), + TimeLeft: "unknown", + Progress: fmt.Sprintf("%d%%", totalProgress/len(d.syncStats.SnapshotIndexing.Segments)), + }, "Indexing snapshots") + + d.saveSyncStagesToDB() +} + +func (d *DiagnosticClient) runSnapshotFilesListListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[SnapshoFilesList](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(SnapshoFilesList{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + d.snapshotFileList = info + d.mu.Unlock() + + if len(info.Files) > 0 { + return + } + } + } + }() +} + +func (d *DiagnosticClient) runFileDownloadedListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[FileDownloadedStatisticsUpdate](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(FileDownloadedStatisticsUpdate{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + + if d.syncStats.SnapshotDownload.SegmentsDownloading == nil { + d.syncStats.SnapshotDownload.SegmentsDownloading = map[string]SegmentDownloadStatistics{} + } + + if val, ok := d.syncStats.SnapshotDownload.SegmentsDownloading[info.FileName]; ok { + val.DownloadedStats = FileDownloadedStatistics{ + TimeTook: info.TimeTook, + AverageRate: info.AverageRate, + } + + d.syncStats.SnapshotDownload.SegmentsDownloading[info.FileName] = val + } else { + d.syncStats.SnapshotDownload.SegmentsDownloading[info.FileName] = SegmentDownloadStatistics{ + Name: info.FileName, + TotalBytes: 0, + DownloadedBytes: 0, + Webseeds: nil, + Peers: nil, + DownloadedStats: FileDownloadedStatistics{ + TimeTook: info.TimeTook, + AverageRate: info.AverageRate, + }, + } + } + + d.mu.Unlock() + } + } + }() +} + +func (d *DiagnosticClient) UpdateFileDownloadedStatistics(downloadedInfo *FileDownloadedStatisticsUpdate, downloadingInfo *SegmentDownloadStatistics) { + if d.syncStats.SnapshotDownload.SegmentsDownloading == nil { + d.syncStats.SnapshotDownload.SegmentsDownloading = map[string]SegmentDownloadStatistics{} + } + + if downloadedInfo != nil { + dwStats := FileDownloadedStatistics{ + TimeTook: downloadedInfo.TimeTook, + AverageRate: downloadedInfo.AverageRate, + } + if val, ok := d.syncStats.SnapshotDownload.SegmentsDownloading[downloadedInfo.FileName]; ok { + val.DownloadedStats = dwStats + + d.syncStats.SnapshotDownload.SegmentsDownloading[downloadedInfo.FileName] = val + } else { + d.syncStats.SnapshotDownload.SegmentsDownloading[downloadedInfo.FileName] = SegmentDownloadStatistics{ + Name: downloadedInfo.FileName, + TotalBytes: 0, + DownloadedBytes: 0, + Webseeds: make([]SegmentPeer, 0), + Peers: make([]SegmentPeer, 0), + DownloadedStats: dwStats, + } + } + } else { + if val, ok := d.syncStats.SnapshotDownload.SegmentsDownloading[downloadingInfo.Name]; ok { + val.TotalBytes = downloadingInfo.TotalBytes + val.DownloadedBytes = downloadingInfo.DownloadedBytes + val.Webseeds = downloadingInfo.Webseeds + val.Peers = downloadingInfo.Peers + + d.syncStats.SnapshotDownload.SegmentsDownloading[downloadingInfo.Name] = val + } else { + d.syncStats.SnapshotDownload.SegmentsDownloading[downloadingInfo.Name] = *downloadingInfo + } + } +} + +func (d *DiagnosticClient) SyncStatistics() SyncStatistics { + return d.syncStats +} + +func (d *DiagnosticClient) SnapshotFilesList() SnapshoFilesList { + return d.snapshotFileList +} + +func ReadSnapshotDownloadInfo(db kv.RoDB) (info SnapshotDownloadStatistics) { + data := ReadDataFromTable(db, kv.DiagSyncStages, SnapshotDownloadStatisticsKey) + + if len(data) == 0 { + return SnapshotDownloadStatistics{} + } + + err := json.Unmarshal(data, &info) + + if err != nil { + log.Error("[Diagnostics] Failed to read snapshot download info", "err", err) + return SnapshotDownloadStatistics{} + } else { + return info + } +} + +func ReadSnapshotIndexingInfo(db kv.RoDB) (info SnapshotIndexingStatistics) { + data := ReadDataFromTable(db, kv.DiagSyncStages, SnapshotIndexingStatisticsKey) + + if len(data) == 0 { + return SnapshotIndexingStatistics{} + } + + err := json.Unmarshal(data, &info) + + if err != nil { + log.Error("[Diagnostics] Failed to read snapshot indexing info", "err", err) + return SnapshotIndexingStatistics{} + } else { + return info + } +} + +func SnapshotDownloadUpdater(info SnapshotDownloadStatistics) func(tx kv.RwTx) error { + return PutDataToTable(kv.DiagSyncStages, SnapshotDownloadStatisticsKey, info) +} + +func SnapshotIndexingUpdater(info SnapshotIndexingStatistics) func(tx kv.RwTx) error { + return PutDataToTable(kv.DiagSyncStages, SnapshotIndexingStatisticsKey, info) +} diff --git a/erigon-lib/diagnostics/snapshots_test.go b/erigon-lib/diagnostics/snapshots_test.go new file mode 100644 index 00000000000..3c8fef60d4c --- /dev/null +++ b/erigon-lib/diagnostics/snapshots_test.go @@ -0,0 +1,57 @@ +package diagnostics_test + +import ( + "testing" + + "github.com/ledgerwatch/erigon-lib/diagnostics" + "github.com/stretchr/testify/require" +) + +func NewTestDiagnosticClient() (*diagnostics.DiagnosticClient, error) { + return &diagnostics.DiagnosticClient{}, nil +} + +func TestUpdateFileDownloadingStats(t *testing.T) { + d, err := NewTestDiagnosticClient() + + require.NoError(t, err) + + d.UpdateFileDownloadedStatistics(nil, &segmentDownloadStatsMock) + + sd := d.SyncStatistics().SnapshotDownload.SegmentsDownloading + require.NotNil(t, sd) + require.NotEqual(t, len(sd), 0) + + require.Equal(t, sd["test"], segmentDownloadStatsMock) + + d.UpdateFileDownloadedStatistics(&fileDownloadedUpdMock, nil) + + require.Equal(t, sd["test"], diagnostics.SegmentDownloadStatistics{ + Name: "test", + TotalBytes: 1, + DownloadedBytes: 1, + Webseeds: make([]diagnostics.SegmentPeer, 0), + Peers: make([]diagnostics.SegmentPeer, 0), + DownloadedStats: diagnostics.FileDownloadedStatistics{ + TimeTook: 1.0, + AverageRate: 1, + }, + }) +} + +var ( + fileDownloadedUpdMock = diagnostics.FileDownloadedStatisticsUpdate{ + FileName: "test", + TimeTook: 1.0, + AverageRate: 1, + } + + segmentDownloadStatsMock = diagnostics.SegmentDownloadStatistics{ + Name: "test", + TotalBytes: 1, + DownloadedBytes: 1, + Webseeds: make([]diagnostics.SegmentPeer, 0), + Peers: make([]diagnostics.SegmentPeer, 0), + DownloadedStats: diagnostics.FileDownloadedStatistics{}, + } +) diff --git a/erigon-lib/diagnostics/speedtest.go b/erigon-lib/diagnostics/speedtest.go new file mode 100644 index 00000000000..54fad6f161d --- /dev/null +++ b/erigon-lib/diagnostics/speedtest.go @@ -0,0 +1,75 @@ +package diagnostics + +import ( + "context" + "time" + + "github.com/showwin/speedtest-go/speedtest" + "github.com/showwin/speedtest-go/speedtest/transport" +) + +func (d *DiagnosticClient) setupSpeedtestDiagnostics(rootCtx context.Context) { + go func() { + if d.speedTest { + d.networkSpeedMutex.Lock() + d.networkSpeed = d.runSpeedTest(rootCtx) + d.networkSpeedMutex.Unlock() + } + }() +} + +var cacheServerList speedtest.Servers + +func (d *DiagnosticClient) runSpeedTest(rootCtx context.Context) NetworkSpeedTestResult { + var speedtestClient = speedtest.New() + + serverList, err := speedtestClient.FetchServers() + // Ensure that the server list can rolled back to the previous cache. + if err == nil { + cacheServerList = serverList + } + targets, _ := cacheServerList.FindServer([]int{}) + + latency := time.Duration(0) + downloadSpeed := float64(0) + uploadSpeed := float64(0) + packetLoss := float64(-1) + + analyzer := speedtest.NewPacketLossAnalyzer(nil) + + if len(targets) > 0 { + s := targets[0] + err = s.PingTestContext(rootCtx, nil) + if err == nil { + latency = s.Latency + } + + err = s.DownloadTestContext(rootCtx) + if err == nil { + downloadSpeed = s.DLSpeed.Mbps() + } + + err = s.UploadTestContext(rootCtx) + if err == nil { + uploadSpeed = s.ULSpeed.Mbps() + } + + ctx, cancel := context.WithTimeout(rootCtx, time.Second*15) + + defer cancel() + _ = analyzer.RunWithContext(ctx, s.Host, func(pl *transport.PLoss) { + packetLoss = pl.Loss() + }) + } + + return NetworkSpeedTestResult{ + Latency: latency, + DownloadSpeed: downloadSpeed, + UploadSpeed: uploadSpeed, + PacketLoss: packetLoss, + } +} + +func (d *DiagnosticClient) GetNetworkSpeed() NetworkSpeedTestResult { + return d.networkSpeed +} diff --git a/erigon-lib/diagnostics/stages.go b/erigon-lib/diagnostics/stages.go new file mode 100644 index 00000000000..bc7670609e2 --- /dev/null +++ b/erigon-lib/diagnostics/stages.go @@ -0,0 +1,294 @@ +package diagnostics + +import ( + "context" + "encoding/json" + + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/log/v3" +) + +var ( + StagesListKey = []byte("diagStagesList") + CurrentStageKey = []byte("diagCurrentStage") +) + +type CurrentSyncStagesIdxs struct { + Stage int `json:"currentStage"` + SubStage int `json:"currentSubStage"` +} + +type SyncStage struct { + ID string `json:"id"` + State StageState `json:"state"` + SubStages []SyncSubStage `json:"subStages"` + Stats SyncStageStats `json:"stats"` +} + +type SyncSubStage struct { + ID string `json:"id"` + State StageState `json:"state"` + Stats SyncStageStats `json:"stats"` +} + +type SyncStageStats struct { + TimeElapsed string `json:"timeElapsed"` + TimeLeft string `json:"timeLeft"` + Progress string `json:"progress"` +} + +type SetSyncSubStageList struct { + Stage string + List []SyncSubStage +} + +func (ti SetSyncSubStageList) Type() Type { + return TypeOf(ti) +} + +type SyncStageList struct { + StagesList []SyncStage `json:"stages"` +} + +func (ti SyncStageList) Type() Type { + return TypeOf(ti) +} + +type StageState int + +const ( + Queued StageState = iota + Running + Completed +) + +func (s StageState) String() string { + return [...]string{"Queued", "Running", "Completed"}[s] +} + +type CurrentSyncStage struct { + Stage string `json:"stage"` +} + +func (ti CurrentSyncStage) Type() Type { + return TypeOf(ti) +} + +type CurrentSyncSubStage struct { + SubStage string `json:"subStage"` +} + +func (ti CurrentSyncSubStage) Type() Type { + return TypeOf(ti) +} + +func (d *DiagnosticClient) setupStagesDiagnostics(rootCtx context.Context) { + d.runSyncStagesListListener(rootCtx) + d.runCurrentSyncStageListener(rootCtx) + d.runCurrentSyncSubStageListener(rootCtx) + d.runSubStageListener(rootCtx) +} + +func (d *DiagnosticClient) runSyncStagesListListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[SyncStageList](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(SyncStageList{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + d.SetStagesList(info.StagesList) + d.mu.Unlock() + + d.saveSyncStagesToDB() + } + } + }() +} + +func (d *DiagnosticClient) runCurrentSyncStageListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[CurrentSyncStage](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(CurrentSyncStage{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + d.SetCurrentSyncStage(info) + d.mu.Unlock() + + d.saveSyncStagesToDB() + } + } + }() +} + +func (d *DiagnosticClient) runCurrentSyncSubStageListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[CurrentSyncSubStage](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(CurrentSyncSubStage{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + d.SetCurrentSyncSubStage(info) + d.mu.Unlock() + + d.saveSyncStagesToDB() + } + } + }() +} + +func (d *DiagnosticClient) runSubStageListener(rootCtx context.Context) { + go func() { + ctx, ch, closeChannel := Context[SetSyncSubStageList](rootCtx, 1) + defer closeChannel() + + StartProviders(ctx, TypeOf(SetSyncSubStageList{}), log.Root()) + for { + select { + case <-rootCtx.Done(): + return + case info := <-ch: + d.mu.Lock() + d.SetSubStagesList(info.Stage, info.List) + d.mu.Unlock() + + d.saveSyncStagesToDB() + } + } + }() +} + +func (d *DiagnosticClient) saveSyncStagesToDB() { + if err := d.db.Update(d.ctx, StagesListUpdater(d.syncStages)); err != nil { + log.Error("[Diagnostics] Failed to update stages list", "err", err) + } +} + +func (d *DiagnosticClient) getCurrentSyncIdxs() CurrentSyncStagesIdxs { + currentIdxs := CurrentSyncStagesIdxs{ + Stage: -1, + SubStage: -1, + } + + for sIdx, stage := range d.syncStages { + if stage.State == Running { + currentIdxs.Stage = sIdx + + for subIdx, subStage := range stage.SubStages { + if subStage.State == Running { + currentIdxs.SubStage = subIdx + } + } + break + } + } + + return currentIdxs +} + +func (d *DiagnosticClient) SetStagesList(stages []SyncStage) { + if len(d.syncStages) != len(stages) { + d.syncStages = stages + } +} + +func (d *DiagnosticClient) SetSubStagesList(stageId string, subStages []SyncSubStage) { + for idx, stage := range d.syncStages { + if stage.ID == stageId { + if len(d.syncStages[idx].SubStages) != len(subStages) { + d.syncStages[idx].SubStages = subStages + break + } + } + } +} + +func (d *DiagnosticClient) SetCurrentSyncStage(css CurrentSyncStage) { + isSet := false + for idx, stage := range d.syncStages { + if !isSet { + if stage.ID == css.Stage { + d.syncStages[idx].State = Running + isSet = true + } else { + d.setStagesState(idx, Completed) + } + } else { + d.setStagesState(idx, Queued) + } + } +} + +func (d *DiagnosticClient) setStagesState(stadeIdx int, state StageState) { + d.syncStages[stadeIdx].State = state + d.setSubStagesState(stadeIdx, state) +} + +func (d *DiagnosticClient) setSubStagesState(stadeIdx int, state StageState) { + for subIdx := range d.syncStages[stadeIdx].SubStages { + d.syncStages[stadeIdx].SubStages[subIdx].State = state + } +} + +func (d *DiagnosticClient) SetCurrentSyncSubStage(css CurrentSyncSubStage) { + for idx, stage := range d.syncStages { + if stage.State == Running { + for subIdx, subStage := range stage.SubStages { + if subStage.ID == css.SubStage { + if d.syncStages[idx].SubStages[subIdx].State == Completed { + return + } + + if subIdx > 0 { + d.syncStages[idx].SubStages[subIdx-1].State = Completed + } + + d.syncStages[idx].SubStages[subIdx].State = Running + } + } + + break + } + } +} + +func ReadSyncStages(db kv.RoDB) []SyncStage { + data := ReadDataFromTable(db, kv.DiagSyncStages, StagesListKey) + + if len(data) == 0 { + return []SyncStage{} + } + + var info []SyncStage + err := json.Unmarshal(data, &info) + + if err != nil { + log.Error("[Diagnostics] Failed to read stages list", "err", err) + return []SyncStage{} + } else { + return info + } +} + +func StagesListUpdater(info []SyncStage) func(tx kv.RwTx) error { + return PutDataToTable(kv.DiagSyncStages, StagesListKey, info) +} + +func (d *DiagnosticClient) GetSyncStages() []SyncStage { + return d.syncStages +} diff --git a/erigon-lib/diagnostics/stages_test.go b/erigon-lib/diagnostics/stages_test.go new file mode 100644 index 00000000000..2f49816a5fd --- /dev/null +++ b/erigon-lib/diagnostics/stages_test.go @@ -0,0 +1,109 @@ +package diagnostics_test + +import ( + "testing" + + "github.com/ledgerwatch/erigon-lib/diagnostics" + "github.com/stretchr/testify/require" +) + +func TestInitSyncStages(t *testing.T) { + d, err := NewTestDiagnosticClient() + require.NoError(t, err) + + stages := diagnostics.InitStagesFromList(nodeStages) + d.SetStagesList(stages) + require.Equal(t, d.GetSyncStages(), stagesListMock) + + subStages := diagnostics.InitSubStagesFromList(snapshotsSubStages) + require.Equal(t, subStages, subStagesListMock) + d.SetSubStagesList("Snapshots", subStages) + + require.Equal(t, d.GetSyncStages(), stagesListWithSnapshotsSubStagesMock) +} + +func TestSetCurrentSyncStage(t *testing.T) { + d, err := NewTestDiagnosticClient() + require.NoError(t, err) + + stages := diagnostics.InitStagesFromList(nodeStages) + d.SetStagesList(stages) + subStages := diagnostics.InitSubStagesFromList(snapshotsSubStages) + d.SetSubStagesList("Snapshots", subStages) + + d.SetCurrentSyncStage(diagnostics.CurrentSyncStage{Stage: "Snapshots"}) + require.Equal(t, d.GetSyncStages()[0].State, diagnostics.Running) + + d.SetCurrentSyncStage(diagnostics.CurrentSyncStage{Stage: "BlockHashes"}) + require.Equal(t, d.GetSyncStages()[0].State, diagnostics.Completed) + require.Equal(t, d.GetSyncStages()[1].State, diagnostics.Running) + + d.SetCurrentSyncStage(diagnostics.CurrentSyncStage{Stage: "Snapshots"}) + require.Equal(t, d.GetSyncStages()[0].State, diagnostics.Running) + require.Equal(t, d.GetSyncStages()[1].State, diagnostics.Queued) + require.Equal(t, d.GetSyncStages()[2].State, diagnostics.Queued) +} + +func TestSetCurrentSyncSubStage(t *testing.T) { + d, err := NewTestDiagnosticClient() + require.NoError(t, err) + + stages := diagnostics.InitStagesFromList(nodeStages) + d.SetStagesList(stages) + subStages := diagnostics.InitSubStagesFromList(snapshotsSubStages) + d.SetSubStagesList("Snapshots", subStages) + + d.SetCurrentSyncStage(diagnostics.CurrentSyncStage{Stage: "Snapshots"}) + d.SetCurrentSyncSubStage(diagnostics.CurrentSyncSubStage{SubStage: "Download header-chain"}) + require.Equal(t, d.GetSyncStages()[0].SubStages[0].State, diagnostics.Running) + + d.SetCurrentSyncSubStage(diagnostics.CurrentSyncSubStage{SubStage: "Download snapshots"}) + require.Equal(t, d.GetSyncStages()[0].SubStages[0].State, diagnostics.Completed) + require.Equal(t, d.GetSyncStages()[0].SubStages[1].State, diagnostics.Running) + + d.SetCurrentSyncSubStage(diagnostics.CurrentSyncSubStage{SubStage: "Download header-chain"}) + require.Equal(t, d.GetSyncStages()[0].SubStages[0].State, diagnostics.Completed) + require.Equal(t, d.GetSyncStages()[0].SubStages[1].State, diagnostics.Running) + require.Equal(t, d.GetSyncStages()[0].SubStages[2].State, diagnostics.Queued) +} + +var ( + nodeStages = []string{"Snapshots", "BlockHashes", "Senders"} + snapshotsSubStages = []string{"Download header-chain", "Download snapshots", "Indexing", "Fill DB"} + + stagesListMock = []diagnostics.SyncStage{ + {ID: "Snapshots", State: diagnostics.Queued, SubStages: []diagnostics.SyncSubStage{}}, + {ID: "BlockHashes", State: diagnostics.Queued, SubStages: []diagnostics.SyncSubStage{}}, + {ID: "Senders", State: diagnostics.Queued, SubStages: []diagnostics.SyncSubStage{}}, + } + + subStagesListMock = []diagnostics.SyncSubStage{ + { + ID: "Download header-chain", + State: diagnostics.Queued, + }, + { + ID: "Download snapshots", + State: diagnostics.Queued, + }, + { + ID: "Indexing", + State: diagnostics.Queued, + }, + { + ID: "Fill DB", + State: diagnostics.Queued, + }, + } + + stagesListWithSnapshotsSubStagesMock = []diagnostics.SyncStage{ + {ID: "Snapshots", State: diagnostics.Queued, SubStages: []diagnostics.SyncSubStage{ + {ID: "Download header-chain", State: diagnostics.Queued}, + {ID: "Download snapshots", State: diagnostics.Queued}, + {ID: "Indexing", State: diagnostics.Queued}, + {ID: "Fill DB", State: diagnostics.Queued}, + }}, + {ID: "BlockHashes", State: diagnostics.Queued, SubStages: []diagnostics.SyncSubStage{}}, + {ID: "Senders", State: diagnostics.Queued, SubStages: []diagnostics.SyncSubStage{}}, + } +) diff --git a/erigon-lib/diagnostics/sys_info.go b/erigon-lib/diagnostics/sys_info.go new file mode 100644 index 00000000000..b870e649324 --- /dev/null +++ b/erigon-lib/diagnostics/sys_info.go @@ -0,0 +1,208 @@ +package diagnostics + +import ( + "encoding/json" + + "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v3/disk" + "github.com/shirou/gopsutil/v3/mem" + + "github.com/ledgerwatch/erigon-lib/diskutils" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/log/v3" +) + +var ( + SystemRamInfoKey = []byte("diagSystemRamInfo") + SystemCpuInfoKey = []byte("diagSystemCpuInfo") + SystemDiskInfoKey = []byte("diagSystemDiskInfo") +) + +func (d *DiagnosticClient) setupSysInfoDiagnostics() { + sysInfo := GetSysInfo(d.dataDirPath) + if err := d.db.Update(d.ctx, RAMInfoUpdater(sysInfo.RAM)); err != nil { + log.Error("[Diagnostics] Failed to update RAM info", "err", err) + } + + if err := d.db.Update(d.ctx, CPUInfoUpdater(sysInfo.CPU)); err != nil { + log.Error("[Diagnostics] Failed to update CPU info", "err", err) + } + + if err := d.db.Update(d.ctx, DiskInfoUpdater(sysInfo.Disk)); err != nil { + log.Error("[Diagnostics] Failed to update Disk info", "err", err) + } + + d.mu.Lock() + d.hardwareInfo = sysInfo + d.mu.Unlock() +} + +func (d *DiagnosticClient) HardwareInfo() HardwareInfo { + return d.hardwareInfo +} + +func findNodeDisk(dirPath string) string { + mountPoint := diskutils.MountPointForDirPath(dirPath) + + return mountPoint +} + +func GetSysInfo(dirPath string) HardwareInfo { + nodeDisk := findNodeDisk(dirPath) + + ramInfo := GetRAMInfo() + diskInfo := GetDiskInfo(nodeDisk) + cpuInfo := GetCPUInfo() + + return HardwareInfo{ + RAM: ramInfo, + Disk: diskInfo, + CPU: cpuInfo, + } +} + +func GetRAMInfo() RAMInfo { + totalRAM := uint64(0) + freeRAM := uint64(0) + + vmStat, err := mem.VirtualMemory() + if err == nil { + totalRAM = vmStat.Total + freeRAM = vmStat.Free + } + + return RAMInfo{ + Total: totalRAM, + Free: freeRAM, + } +} + +func GetDiskInfo(nodeDisk string) DiskInfo { + fsType := "" + total := uint64(0) + free := uint64(0) + + partitions, err := disk.Partitions(false) + + if err == nil { + for _, partition := range partitions { + if partition.Mountpoint == nodeDisk { + iocounters, err := disk.Usage(partition.Mountpoint) + if err == nil { + fsType = partition.Fstype + total = iocounters.Total + free = iocounters.Free + + break + } + } + } + } + + return DiskInfo{ + FsType: fsType, + Total: total, + Free: free, + } +} + +func GetCPUInfo() CPUInfo { + modelName := "" + cores := 0 + mhz := float64(0) + + cpuInfo, err := cpu.Info() + if err == nil { + for _, info := range cpuInfo { + modelName = info.ModelName + cores = int(info.Cores) + mhz = info.Mhz + + break + } + } + + return CPUInfo{ + ModelName: modelName, + Cores: cores, + Mhz: mhz, + } +} + +func ReadSysInfo(db kv.RoDB) (info HardwareInfo) { + ram := ReadRAMInfo(db) + cpu := ReadCPUInfo(db) + disk := ReadDickInfo(db) + + return HardwareInfo{ + RAM: ram, + CPU: cpu, + Disk: disk, + } +} + +func ReadRAMInfo(db kv.RoDB) RAMInfo { + data := ReadDataFromTable(db, kv.DiagSystemInfo, SystemRamInfoKey) + + if len(data) == 0 { + return RAMInfo{} + } + + var info RAMInfo + err := json.Unmarshal(data, &info) + + if err != nil { + log.Error("[Diagnostics] Failed to read RAM info", "err", err) + return RAMInfo{} + } else { + return info + } +} + +func ReadCPUInfo(db kv.RoDB) CPUInfo { + data := ReadDataFromTable(db, kv.DiagSystemInfo, SystemCpuInfoKey) + + if len(data) == 0 { + return CPUInfo{} + } + + var info CPUInfo + err := json.Unmarshal(data, &info) + + if err != nil { + log.Error("[Diagnostics] Failed to read CPU info", "err", err) + return CPUInfo{} + } else { + return info + } +} + +func ReadDickInfo(db kv.RoDB) DiskInfo { + data := ReadDataFromTable(db, kv.DiagSystemInfo, SystemDiskInfoKey) + + if len(data) == 0 { + return DiskInfo{} + } + + var info DiskInfo + err := json.Unmarshal(data, &info) + + if err != nil { + log.Error("[Diagnostics] Failed to read Disk info", "err", err) + return DiskInfo{} + } else { + return info + } +} + +func RAMInfoUpdater(info RAMInfo) func(tx kv.RwTx) error { + return PutDataToTable(kv.DiagSystemInfo, SystemRamInfoKey, info) +} + +func CPUInfoUpdater(info CPUInfo) func(tx kv.RwTx) error { + return PutDataToTable(kv.DiagSystemInfo, SystemCpuInfoKey, info) +} + +func DiskInfoUpdater(info DiskInfo) func(tx kv.RwTx) error { + return PutDataToTable(kv.DiagSystemInfo, SystemDiskInfoKey, info) +} diff --git a/erigon-lib/diagnostics/utils.go b/erigon-lib/diagnostics/utils.go new file mode 100644 index 00000000000..055bcb9ee71 --- /dev/null +++ b/erigon-lib/diagnostics/utils.go @@ -0,0 +1,91 @@ +package diagnostics + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/ledgerwatch/erigon-lib/kv" +) + +func ReadDataFromTable(db kv.RoDB, table string, key []byte) (data []byte) { + if err := db.View(context.Background(), func(tx kv.Tx) error { + bytes, err := tx.GetOne(table, key) + + if err != nil { + return err + } + + data = bytes + + return nil + }); err != nil { + return []byte{} + } + return data +} + +func PutDataToTable(table string, key []byte, info any) func(tx kv.RwTx) error { + return func(tx kv.RwTx) error { + infoBytes, err := json.Marshal(info) + + if err != nil { + return err + } + + return tx.Put(table, key, infoBytes) + } +} + +func InitStagesFromList(list []string) []SyncStage { + stages := make([]SyncStage, 0, len(list)) + + for _, stage := range list { + stages = append(stages, SyncStage{ + ID: stage, + State: Queued, + SubStages: []SyncSubStage{}, + Stats: SyncStageStats{}, + }) + } + + return stages +} + +func InitSubStagesFromList(list []string) []SyncSubStage { + subStages := make([]SyncSubStage, 0, len(list)) + + for _, subStage := range list { + subStages = append(subStages, + SyncSubStage{ + ID: subStage, + State: Queued, + }, + ) + } + + return subStages +} + +func CalculateTime(amountLeft, rate uint64) string { + if rate == 0 { + return "999hrs:99m" + } + timeLeftInSeconds := amountLeft / rate + + hours := timeLeftInSeconds / 3600 + minutes := (timeLeftInSeconds / 60) % 60 + + return fmt.Sprintf("%dhrs:%dm", hours, minutes) +} + +func SecondsToHHMMString(seconds uint64) string { + if seconds == 0 { + return "0hrs:0m" + } + + hours := seconds / 3600 + minutes := (seconds / 60) % 60 + + return fmt.Sprintf("%dhrs:%dm", hours, minutes) +} diff --git a/erigon-lib/direct/execution_client.go b/erigon-lib/direct/execution_client.go index e2e8d8da1c9..74d56b2281b 100644 --- a/erigon-lib/direct/execution_client.go +++ b/erigon-lib/direct/execution_client.go @@ -45,6 +45,10 @@ func (s *ExecutionClientDirect) GetBodiesByRange(ctx context.Context, in *execut return s.server.GetBodiesByRange(ctx, in) } +func (s *ExecutionClientDirect) HasBlock(ctx context.Context, in *execution.GetSegmentRequest, opts ...grpc.CallOption) (*execution.HasBlockResponse, error) { + return s.server.HasBlock(ctx, in) +} + func (s *ExecutionClientDirect) GetAssembledBlock(ctx context.Context, in *execution.GetAssembledBlockRequest, opts ...grpc.CallOption) (*execution.GetAssembledBlockResponse, error) { return s.server.GetAssembledBlock(ctx, in) } diff --git a/erigon-lib/direct/sentinel_client.go b/erigon-lib/direct/sentinel_client.go index 4a196bddb33..f029ec60f40 100644 --- a/erigon-lib/direct/sentinel_client.go +++ b/erigon-lib/direct/sentinel_client.go @@ -20,7 +20,6 @@ import ( "context" "io" - "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" "google.golang.org/grpc" ) @@ -62,6 +61,14 @@ func (s *SentinelClientDirect) PublishGossip(ctx context.Context, in *sentinel.G return s.server.PublishGossip(ctx, in) } +func (s *SentinelClientDirect) Identity(ctx context.Context, in *sentinel.EmptyMessage, opts ...grpc.CallOption) (*sentinel.IdentityResponse, error) { + return s.server.Identity(ctx, in) +} + +func (s *SentinelClientDirect) PeersInfo(ctx context.Context, in *sentinel.PeersInfoRequest, opts ...grpc.CallOption) (*sentinel.PeersInfoResponse, error) { + return s.server.PeersInfo(ctx, in) +} + // Subscribe gossip part. the only complex section of this bullshit func (s *SentinelClientDirect) SubscribeGossip(ctx context.Context, in *sentinel.SubscriptionData, opts ...grpc.CallOption) (sentinel.Sentinel_SubscribeGossipClient, error) { @@ -74,6 +81,10 @@ func (s *SentinelClientDirect) SubscribeGossip(ctx context.Context, in *sentinel return &SentinelSubscribeGossipC{ch: ch, ctx: ctx}, nil } +func (s *SentinelClientDirect) SetSubscribeExpiry(ctx context.Context, expiryReq *sentinel.RequestSubscribeExpiry, opts ...grpc.CallOption) (*sentinel.EmptyMessage, error) { + return s.server.SetSubscribeExpiry(ctx, expiryReq) +} + type SentinelSubscribeGossipC struct { ch chan *gossipReply ctx context.Context @@ -111,12 +122,3 @@ func (s *SentinelSubscribeGossipS) Err(err error) { } s.ch <- &gossipReply{err: err} } - -func (s *SentinelClientDirect) GetPeersStatistics() map[string]*diagnostics.PeerStatistics { - - if diag, ok := s.server.(diagnostics.PeerStatisticsGetter); ok { - return diag.GetPeersStatistics() - } - - return map[string]*diagnostics.PeerStatistics{} -} diff --git a/erigon-lib/direct/sentry_client.go b/erigon-lib/direct/sentry_client.go index cf01003e71d..9655d062654 100644 --- a/erigon-lib/direct/sentry_client.go +++ b/erigon-lib/direct/sentry_client.go @@ -100,6 +100,7 @@ var ProtoIds = map[uint]map[sentry.MessageId]struct{}{ }, } +//go:generate mockgen -typed=true -destination=./sentry_client_mock.go -package=direct . SentryClient type SentryClient interface { sentry.SentryClient Protocol() uint diff --git a/erigon-lib/direct/sentry_client_mock.go b/erigon-lib/direct/sentry_client_mock.go new file mode 100644 index 00000000000..48074023d41 --- /dev/null +++ b/erigon-lib/direct/sentry_client_mock.go @@ -0,0 +1,816 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon-lib/direct (interfaces: SentryClient) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./sentry_client_mock.go -package=direct . SentryClient +// + +// Package direct is a generated GoMock package. +package direct + +import ( + "context" + "reflect" + + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + "go.uber.org/mock/gomock" + "google.golang.org/grpc" + "google.golang.org/protobuf/types/known/emptypb" +) + +// MockSentryClient is a mock of SentryClient interface. +type MockSentryClient struct { + ctrl *gomock.Controller + recorder *MockSentryClientMockRecorder +} + +// MockSentryClientMockRecorder is the mock recorder for MockSentryClient. +type MockSentryClientMockRecorder struct { + mock *MockSentryClient +} + +// NewMockSentryClient creates a new mock instance. +func NewMockSentryClient(ctrl *gomock.Controller) *MockSentryClient { + mock := &MockSentryClient{ctrl: ctrl} + mock.recorder = &MockSentryClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSentryClient) EXPECT() *MockSentryClientMockRecorder { + return m.recorder +} + +// AddPeer mocks base method. +func (m *MockSentryClient) AddPeer(arg0 context.Context, arg1 *sentry.AddPeerRequest, arg2 ...grpc.CallOption) (*sentry.AddPeerReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AddPeer", varargs...) + ret0, _ := ret[0].(*sentry.AddPeerReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddPeer indicates an expected call of AddPeer. +func (mr *MockSentryClientMockRecorder) AddPeer(arg0, arg1 any, arg2 ...any) *MockSentryClientAddPeerCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddPeer", reflect.TypeOf((*MockSentryClient)(nil).AddPeer), varargs...) + return &MockSentryClientAddPeerCall{Call: call} +} + +// MockSentryClientAddPeerCall wrap *gomock.Call +type MockSentryClientAddPeerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientAddPeerCall) Return(arg0 *sentry.AddPeerReply, arg1 error) *MockSentryClientAddPeerCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientAddPeerCall) Do(f func(context.Context, *sentry.AddPeerRequest, ...grpc.CallOption) (*sentry.AddPeerReply, error)) *MockSentryClientAddPeerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientAddPeerCall) DoAndReturn(f func(context.Context, *sentry.AddPeerRequest, ...grpc.CallOption) (*sentry.AddPeerReply, error)) *MockSentryClientAddPeerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// HandShake mocks base method. +func (m *MockSentryClient) HandShake(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*sentry.HandShakeReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "HandShake", varargs...) + ret0, _ := ret[0].(*sentry.HandShakeReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HandShake indicates an expected call of HandShake. +func (mr *MockSentryClientMockRecorder) HandShake(arg0, arg1 any, arg2 ...any) *MockSentryClientHandShakeCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HandShake", reflect.TypeOf((*MockSentryClient)(nil).HandShake), varargs...) + return &MockSentryClientHandShakeCall{Call: call} +} + +// MockSentryClientHandShakeCall wrap *gomock.Call +type MockSentryClientHandShakeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientHandShakeCall) Return(arg0 *sentry.HandShakeReply, arg1 error) *MockSentryClientHandShakeCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientHandShakeCall) Do(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*sentry.HandShakeReply, error)) *MockSentryClientHandShakeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientHandShakeCall) DoAndReturn(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*sentry.HandShakeReply, error)) *MockSentryClientHandShakeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MarkDisconnected mocks base method. +func (m *MockSentryClient) MarkDisconnected() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "MarkDisconnected") +} + +// MarkDisconnected indicates an expected call of MarkDisconnected. +func (mr *MockSentryClientMockRecorder) MarkDisconnected() *MockSentryClientMarkDisconnectedCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MarkDisconnected", reflect.TypeOf((*MockSentryClient)(nil).MarkDisconnected)) + return &MockSentryClientMarkDisconnectedCall{Call: call} +} + +// MockSentryClientMarkDisconnectedCall wrap *gomock.Call +type MockSentryClientMarkDisconnectedCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientMarkDisconnectedCall) Return() *MockSentryClientMarkDisconnectedCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientMarkDisconnectedCall) Do(f func()) *MockSentryClientMarkDisconnectedCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientMarkDisconnectedCall) DoAndReturn(f func()) *MockSentryClientMarkDisconnectedCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Messages mocks base method. +func (m *MockSentryClient) Messages(arg0 context.Context, arg1 *sentry.MessagesRequest, arg2 ...grpc.CallOption) (sentry.Sentry_MessagesClient, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Messages", varargs...) + ret0, _ := ret[0].(sentry.Sentry_MessagesClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Messages indicates an expected call of Messages. +func (mr *MockSentryClientMockRecorder) Messages(arg0, arg1 any, arg2 ...any) *MockSentryClientMessagesCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Messages", reflect.TypeOf((*MockSentryClient)(nil).Messages), varargs...) + return &MockSentryClientMessagesCall{Call: call} +} + +// MockSentryClientMessagesCall wrap *gomock.Call +type MockSentryClientMessagesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientMessagesCall) Return(arg0 sentry.Sentry_MessagesClient, arg1 error) *MockSentryClientMessagesCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientMessagesCall) Do(f func(context.Context, *sentry.MessagesRequest, ...grpc.CallOption) (sentry.Sentry_MessagesClient, error)) *MockSentryClientMessagesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientMessagesCall) DoAndReturn(f func(context.Context, *sentry.MessagesRequest, ...grpc.CallOption) (sentry.Sentry_MessagesClient, error)) *MockSentryClientMessagesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// NodeInfo mocks base method. +func (m *MockSentryClient) NodeInfo(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*types.NodeInfoReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "NodeInfo", varargs...) + ret0, _ := ret[0].(*types.NodeInfoReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NodeInfo indicates an expected call of NodeInfo. +func (mr *MockSentryClientMockRecorder) NodeInfo(arg0, arg1 any, arg2 ...any) *MockSentryClientNodeInfoCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeInfo", reflect.TypeOf((*MockSentryClient)(nil).NodeInfo), varargs...) + return &MockSentryClientNodeInfoCall{Call: call} +} + +// MockSentryClientNodeInfoCall wrap *gomock.Call +type MockSentryClientNodeInfoCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientNodeInfoCall) Return(arg0 *types.NodeInfoReply, arg1 error) *MockSentryClientNodeInfoCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientNodeInfoCall) Do(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*types.NodeInfoReply, error)) *MockSentryClientNodeInfoCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientNodeInfoCall) DoAndReturn(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*types.NodeInfoReply, error)) *MockSentryClientNodeInfoCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerById mocks base method. +func (m *MockSentryClient) PeerById(arg0 context.Context, arg1 *sentry.PeerByIdRequest, arg2 ...grpc.CallOption) (*sentry.PeerByIdReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PeerById", varargs...) + ret0, _ := ret[0].(*sentry.PeerByIdReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerById indicates an expected call of PeerById. +func (mr *MockSentryClientMockRecorder) PeerById(arg0, arg1 any, arg2 ...any) *MockSentryClientPeerByIdCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerById", reflect.TypeOf((*MockSentryClient)(nil).PeerById), varargs...) + return &MockSentryClientPeerByIdCall{Call: call} +} + +// MockSentryClientPeerByIdCall wrap *gomock.Call +type MockSentryClientPeerByIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeerByIdCall) Return(arg0 *sentry.PeerByIdReply, arg1 error) *MockSentryClientPeerByIdCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeerByIdCall) Do(f func(context.Context, *sentry.PeerByIdRequest, ...grpc.CallOption) (*sentry.PeerByIdReply, error)) *MockSentryClientPeerByIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeerByIdCall) DoAndReturn(f func(context.Context, *sentry.PeerByIdRequest, ...grpc.CallOption) (*sentry.PeerByIdReply, error)) *MockSentryClientPeerByIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerCount mocks base method. +func (m *MockSentryClient) PeerCount(arg0 context.Context, arg1 *sentry.PeerCountRequest, arg2 ...grpc.CallOption) (*sentry.PeerCountReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PeerCount", varargs...) + ret0, _ := ret[0].(*sentry.PeerCountReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerCount indicates an expected call of PeerCount. +func (mr *MockSentryClientMockRecorder) PeerCount(arg0, arg1 any, arg2 ...any) *MockSentryClientPeerCountCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerCount", reflect.TypeOf((*MockSentryClient)(nil).PeerCount), varargs...) + return &MockSentryClientPeerCountCall{Call: call} +} + +// MockSentryClientPeerCountCall wrap *gomock.Call +type MockSentryClientPeerCountCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeerCountCall) Return(arg0 *sentry.PeerCountReply, arg1 error) *MockSentryClientPeerCountCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeerCountCall) Do(f func(context.Context, *sentry.PeerCountRequest, ...grpc.CallOption) (*sentry.PeerCountReply, error)) *MockSentryClientPeerCountCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeerCountCall) DoAndReturn(f func(context.Context, *sentry.PeerCountRequest, ...grpc.CallOption) (*sentry.PeerCountReply, error)) *MockSentryClientPeerCountCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerEvents mocks base method. +func (m *MockSentryClient) PeerEvents(arg0 context.Context, arg1 *sentry.PeerEventsRequest, arg2 ...grpc.CallOption) (sentry.Sentry_PeerEventsClient, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PeerEvents", varargs...) + ret0, _ := ret[0].(sentry.Sentry_PeerEventsClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerEvents indicates an expected call of PeerEvents. +func (mr *MockSentryClientMockRecorder) PeerEvents(arg0, arg1 any, arg2 ...any) *MockSentryClientPeerEventsCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerEvents", reflect.TypeOf((*MockSentryClient)(nil).PeerEvents), varargs...) + return &MockSentryClientPeerEventsCall{Call: call} +} + +// MockSentryClientPeerEventsCall wrap *gomock.Call +type MockSentryClientPeerEventsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeerEventsCall) Return(arg0 sentry.Sentry_PeerEventsClient, arg1 error) *MockSentryClientPeerEventsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeerEventsCall) Do(f func(context.Context, *sentry.PeerEventsRequest, ...grpc.CallOption) (sentry.Sentry_PeerEventsClient, error)) *MockSentryClientPeerEventsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeerEventsCall) DoAndReturn(f func(context.Context, *sentry.PeerEventsRequest, ...grpc.CallOption) (sentry.Sentry_PeerEventsClient, error)) *MockSentryClientPeerEventsCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerMinBlock mocks base method. +func (m *MockSentryClient) PeerMinBlock(arg0 context.Context, arg1 *sentry.PeerMinBlockRequest, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PeerMinBlock", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerMinBlock indicates an expected call of PeerMinBlock. +func (mr *MockSentryClientMockRecorder) PeerMinBlock(arg0, arg1 any, arg2 ...any) *MockSentryClientPeerMinBlockCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerMinBlock", reflect.TypeOf((*MockSentryClient)(nil).PeerMinBlock), varargs...) + return &MockSentryClientPeerMinBlockCall{Call: call} +} + +// MockSentryClientPeerMinBlockCall wrap *gomock.Call +type MockSentryClientPeerMinBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeerMinBlockCall) Return(arg0 *emptypb.Empty, arg1 error) *MockSentryClientPeerMinBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeerMinBlockCall) Do(f func(context.Context, *sentry.PeerMinBlockRequest, ...grpc.CallOption) (*emptypb.Empty, error)) *MockSentryClientPeerMinBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeerMinBlockCall) DoAndReturn(f func(context.Context, *sentry.PeerMinBlockRequest, ...grpc.CallOption) (*emptypb.Empty, error)) *MockSentryClientPeerMinBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Peers mocks base method. +func (m *MockSentryClient) Peers(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*sentry.PeersReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Peers", varargs...) + ret0, _ := ret[0].(*sentry.PeersReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Peers indicates an expected call of Peers. +func (mr *MockSentryClientMockRecorder) Peers(arg0, arg1 any, arg2 ...any) *MockSentryClientPeersCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Peers", reflect.TypeOf((*MockSentryClient)(nil).Peers), varargs...) + return &MockSentryClientPeersCall{Call: call} +} + +// MockSentryClientPeersCall wrap *gomock.Call +type MockSentryClientPeersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeersCall) Return(arg0 *sentry.PeersReply, arg1 error) *MockSentryClientPeersCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeersCall) Do(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*sentry.PeersReply, error)) *MockSentryClientPeersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeersCall) DoAndReturn(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*sentry.PeersReply, error)) *MockSentryClientPeersCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PenalizePeer mocks base method. +func (m *MockSentryClient) PenalizePeer(arg0 context.Context, arg1 *sentry.PenalizePeerRequest, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PenalizePeer", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PenalizePeer indicates an expected call of PenalizePeer. +func (mr *MockSentryClientMockRecorder) PenalizePeer(arg0, arg1 any, arg2 ...any) *MockSentryClientPenalizePeerCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PenalizePeer", reflect.TypeOf((*MockSentryClient)(nil).PenalizePeer), varargs...) + return &MockSentryClientPenalizePeerCall{Call: call} +} + +// MockSentryClientPenalizePeerCall wrap *gomock.Call +type MockSentryClientPenalizePeerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPenalizePeerCall) Return(arg0 *emptypb.Empty, arg1 error) *MockSentryClientPenalizePeerCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPenalizePeerCall) Do(f func(context.Context, *sentry.PenalizePeerRequest, ...grpc.CallOption) (*emptypb.Empty, error)) *MockSentryClientPenalizePeerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPenalizePeerCall) DoAndReturn(f func(context.Context, *sentry.PenalizePeerRequest, ...grpc.CallOption) (*emptypb.Empty, error)) *MockSentryClientPenalizePeerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Protocol mocks base method. +func (m *MockSentryClient) Protocol() uint { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Protocol") + ret0, _ := ret[0].(uint) + return ret0 +} + +// Protocol indicates an expected call of Protocol. +func (mr *MockSentryClientMockRecorder) Protocol() *MockSentryClientProtocolCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Protocol", reflect.TypeOf((*MockSentryClient)(nil).Protocol)) + return &MockSentryClientProtocolCall{Call: call} +} + +// MockSentryClientProtocolCall wrap *gomock.Call +type MockSentryClientProtocolCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientProtocolCall) Return(arg0 uint) *MockSentryClientProtocolCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientProtocolCall) Do(f func() uint) *MockSentryClientProtocolCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientProtocolCall) DoAndReturn(f func() uint) *MockSentryClientProtocolCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Ready mocks base method. +func (m *MockSentryClient) Ready() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Ready") + ret0, _ := ret[0].(bool) + return ret0 +} + +// Ready indicates an expected call of Ready. +func (mr *MockSentryClientMockRecorder) Ready() *MockSentryClientReadyCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Ready", reflect.TypeOf((*MockSentryClient)(nil).Ready)) + return &MockSentryClientReadyCall{Call: call} +} + +// MockSentryClientReadyCall wrap *gomock.Call +type MockSentryClientReadyCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientReadyCall) Return(arg0 bool) *MockSentryClientReadyCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientReadyCall) Do(f func() bool) *MockSentryClientReadyCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientReadyCall) DoAndReturn(f func() bool) *MockSentryClientReadyCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageById mocks base method. +func (m *MockSentryClient) SendMessageById(arg0 context.Context, arg1 *sentry.SendMessageByIdRequest, arg2 ...grpc.CallOption) (*sentry.SentPeers, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SendMessageById", varargs...) + ret0, _ := ret[0].(*sentry.SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageById indicates an expected call of SendMessageById. +func (mr *MockSentryClientMockRecorder) SendMessageById(arg0, arg1 any, arg2 ...any) *MockSentryClientSendMessageByIdCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageById", reflect.TypeOf((*MockSentryClient)(nil).SendMessageById), varargs...) + return &MockSentryClientSendMessageByIdCall{Call: call} +} + +// MockSentryClientSendMessageByIdCall wrap *gomock.Call +type MockSentryClientSendMessageByIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSendMessageByIdCall) Return(arg0 *sentry.SentPeers, arg1 error) *MockSentryClientSendMessageByIdCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSendMessageByIdCall) Do(f func(context.Context, *sentry.SendMessageByIdRequest, ...grpc.CallOption) (*sentry.SentPeers, error)) *MockSentryClientSendMessageByIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSendMessageByIdCall) DoAndReturn(f func(context.Context, *sentry.SendMessageByIdRequest, ...grpc.CallOption) (*sentry.SentPeers, error)) *MockSentryClientSendMessageByIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageByMinBlock mocks base method. +func (m *MockSentryClient) SendMessageByMinBlock(arg0 context.Context, arg1 *sentry.SendMessageByMinBlockRequest, arg2 ...grpc.CallOption) (*sentry.SentPeers, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SendMessageByMinBlock", varargs...) + ret0, _ := ret[0].(*sentry.SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageByMinBlock indicates an expected call of SendMessageByMinBlock. +func (mr *MockSentryClientMockRecorder) SendMessageByMinBlock(arg0, arg1 any, arg2 ...any) *MockSentryClientSendMessageByMinBlockCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageByMinBlock", reflect.TypeOf((*MockSentryClient)(nil).SendMessageByMinBlock), varargs...) + return &MockSentryClientSendMessageByMinBlockCall{Call: call} +} + +// MockSentryClientSendMessageByMinBlockCall wrap *gomock.Call +type MockSentryClientSendMessageByMinBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSendMessageByMinBlockCall) Return(arg0 *sentry.SentPeers, arg1 error) *MockSentryClientSendMessageByMinBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSendMessageByMinBlockCall) Do(f func(context.Context, *sentry.SendMessageByMinBlockRequest, ...grpc.CallOption) (*sentry.SentPeers, error)) *MockSentryClientSendMessageByMinBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSendMessageByMinBlockCall) DoAndReturn(f func(context.Context, *sentry.SendMessageByMinBlockRequest, ...grpc.CallOption) (*sentry.SentPeers, error)) *MockSentryClientSendMessageByMinBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageToAll mocks base method. +func (m *MockSentryClient) SendMessageToAll(arg0 context.Context, arg1 *sentry.OutboundMessageData, arg2 ...grpc.CallOption) (*sentry.SentPeers, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SendMessageToAll", varargs...) + ret0, _ := ret[0].(*sentry.SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageToAll indicates an expected call of SendMessageToAll. +func (mr *MockSentryClientMockRecorder) SendMessageToAll(arg0, arg1 any, arg2 ...any) *MockSentryClientSendMessageToAllCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageToAll", reflect.TypeOf((*MockSentryClient)(nil).SendMessageToAll), varargs...) + return &MockSentryClientSendMessageToAllCall{Call: call} +} + +// MockSentryClientSendMessageToAllCall wrap *gomock.Call +type MockSentryClientSendMessageToAllCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSendMessageToAllCall) Return(arg0 *sentry.SentPeers, arg1 error) *MockSentryClientSendMessageToAllCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSendMessageToAllCall) Do(f func(context.Context, *sentry.OutboundMessageData, ...grpc.CallOption) (*sentry.SentPeers, error)) *MockSentryClientSendMessageToAllCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSendMessageToAllCall) DoAndReturn(f func(context.Context, *sentry.OutboundMessageData, ...grpc.CallOption) (*sentry.SentPeers, error)) *MockSentryClientSendMessageToAllCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageToRandomPeers mocks base method. +func (m *MockSentryClient) SendMessageToRandomPeers(arg0 context.Context, arg1 *sentry.SendMessageToRandomPeersRequest, arg2 ...grpc.CallOption) (*sentry.SentPeers, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SendMessageToRandomPeers", varargs...) + ret0, _ := ret[0].(*sentry.SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageToRandomPeers indicates an expected call of SendMessageToRandomPeers. +func (mr *MockSentryClientMockRecorder) SendMessageToRandomPeers(arg0, arg1 any, arg2 ...any) *MockSentryClientSendMessageToRandomPeersCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageToRandomPeers", reflect.TypeOf((*MockSentryClient)(nil).SendMessageToRandomPeers), varargs...) + return &MockSentryClientSendMessageToRandomPeersCall{Call: call} +} + +// MockSentryClientSendMessageToRandomPeersCall wrap *gomock.Call +type MockSentryClientSendMessageToRandomPeersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSendMessageToRandomPeersCall) Return(arg0 *sentry.SentPeers, arg1 error) *MockSentryClientSendMessageToRandomPeersCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSendMessageToRandomPeersCall) Do(f func(context.Context, *sentry.SendMessageToRandomPeersRequest, ...grpc.CallOption) (*sentry.SentPeers, error)) *MockSentryClientSendMessageToRandomPeersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSendMessageToRandomPeersCall) DoAndReturn(f func(context.Context, *sentry.SendMessageToRandomPeersRequest, ...grpc.CallOption) (*sentry.SentPeers, error)) *MockSentryClientSendMessageToRandomPeersCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SetStatus mocks base method. +func (m *MockSentryClient) SetStatus(arg0 context.Context, arg1 *sentry.StatusData, arg2 ...grpc.CallOption) (*sentry.SetStatusReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SetStatus", varargs...) + ret0, _ := ret[0].(*sentry.SetStatusReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetStatus indicates an expected call of SetStatus. +func (mr *MockSentryClientMockRecorder) SetStatus(arg0, arg1 any, arg2 ...any) *MockSentryClientSetStatusCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetStatus", reflect.TypeOf((*MockSentryClient)(nil).SetStatus), varargs...) + return &MockSentryClientSetStatusCall{Call: call} +} + +// MockSentryClientSetStatusCall wrap *gomock.Call +type MockSentryClientSetStatusCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSetStatusCall) Return(arg0 *sentry.SetStatusReply, arg1 error) *MockSentryClientSetStatusCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSetStatusCall) Do(f func(context.Context, *sentry.StatusData, ...grpc.CallOption) (*sentry.SetStatusReply, error)) *MockSentryClientSetStatusCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSetStatusCall) DoAndReturn(f func(context.Context, *sentry.StatusData, ...grpc.CallOption) (*sentry.SetStatusReply, error)) *MockSentryClientSetStatusCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/erigon-lib/diskutils/diskutils.go b/erigon-lib/diskutils/diskutils.go new file mode 100644 index 00000000000..8a908716af4 --- /dev/null +++ b/erigon-lib/diskutils/diskutils.go @@ -0,0 +1,12 @@ +//go:build !darwin + +package diskutils + +import ( + "github.com/ledgerwatch/log/v3" +) + +func MountPointForDirPath(dirPath string) string { + log.Debug("[diskutils] Implemented only for darwin") + return "/" +} diff --git a/erigon-lib/diskutils/diskutils_darwin.go b/erigon-lib/diskutils/diskutils_darwin.go new file mode 100644 index 00000000000..a1383766d0a --- /dev/null +++ b/erigon-lib/diskutils/diskutils_darwin.go @@ -0,0 +1,51 @@ +//go:build darwin + +package diskutils + +import ( + "os" + "syscall" + + "github.com/ledgerwatch/log/v3" +) + +func MountPointForDirPath(dirPath string) string { + actualPath := SmlinkForDirPath(dirPath) + + var stat syscall.Statfs_t + if err := syscall.Statfs(actualPath, &stat); err != nil { + log.Debug("[diskutils] Error getting mount point for dir path:", actualPath, "Error:", err) + return "/" + } + + mountPointBytes := []byte{} + for _, b := range &stat.Mntonname { + if b == 0 { + break + } + mountPointBytes = append(mountPointBytes, byte(b)) + } + mountPoint := string(mountPointBytes) + + return mountPoint +} + +func SmlinkForDirPath(dirPath string) string { + fileInfo, err := os.Lstat(dirPath) + if err != nil { + log.Debug("[diskutils] Error getting file info for dir path:", dirPath, "Error:", err) + return dirPath + } + + if fileInfo.Mode()&os.ModeSymlink != 0 { + targetPath, err := os.Readlink(dirPath) + if err != nil { + log.Debug("[diskutils] Error getting target path for symlink:", dirPath, "Error:", err) + return dirPath + } else { + return targetPath + } + } else { + return dirPath + } +} diff --git a/erigon-lib/downloader/README.md b/erigon-lib/downloader/README.md new file mode 100644 index 00000000000..9624e0b759d --- /dev/null +++ b/erigon-lib/downloader/README.md @@ -0,0 +1,80 @@ +# Downloader Components + +The diagram below shows the components used to manage downloads between torrents and webpeers. + +![components](components.png) + +# Operations + +By default the downloader will try to use the underlying bittorrent library to download files from peers and web peers. + +However this can result in slow or stalled downloads. When this happens [rclone](https://rclone.org/) can be used as an auxiliary process to aid the download process. When it is availible the download library will pass downloads to rclone under the following circumstances: + +* There are no torrent peers available for a file +* There is not torrent info available for a file, but a torrent file with a matching info hash can be found on the webseeds + +To enable [rclone](https://rclone.org/) should be installed on the local machine and its executable added to the `PATH` in the environment so that it can be launched by erigon. + +For web downloading no additional configuration is necessary as the downloader will auto configure rclone to use the webseeds which are discovered via the torrent library. + +# Configuration/Control Files + +The sections below describe the roles of the various control structures shown in the diagram above. They combine to perform the following management and control functions: + +* Definition of verified well know hashes for segment files - which identifies a known trusted universe of files (**chain.toml**) + +* Management of the competion state of the local download process (**BittorrentInfo**) + +* Definition of the accepted local hash set which are used to ensure that the local snapshots retain a consistent specified view as other defenitions in the environment changes. i.e. chain.toml gets re-versioned or BittorentInfo gets reset (**snapshot-lock.json**). + +* Ability to override downloaded files with locally defined alternatives, for development or to fix errors and omissions (**snapshot-lock.json**) + +## chain.toml + +This is an embedded file which gets its contents from the [erigon snapshots repository](!https://github.com/ledgerwatch/erigon-snapshot) during the erigon build process. It contains +the `well know` hash for a particular segment file in the following format. + +```toml +'v1-000000-000100-beaconblocks.seg' = 'eaee23c3db187c8be69e332b4ff50aa73380d0ef' +'v1-000000-000500-bodies.seg' = 'e9b5c5d1885ee3c6ab6005919e511e1e04c7e34e' +'v1-000000-000500-headers.seg' = 'df09957d8a28af3bc5137478885a8003677ca878' +'v1-000000-000500-transactions.seg' = '92bb09068baa8eab9d5ad5e69c1eecd404a82258' +``` + +Where multiple version of files exists there may be several likes per segment and the code in the released Erigon version will select the version that it is interesting. + +As this file ise versioned as part of the Erigon release process the file to hash mapping can potentially change between releases. This can potentially cause an issue for running Erigon node which expect the downloads in the snapshots directory to remain constant, which is why a seperate file is used to record the hases used by the process when it originally downloaded its files. + +## snapshot-lock.json + +This is a file which resides in the /snapshots directory for an Erigon node. It is created when the node performs its initial download. It contains the list of downloaded files and their respective hashes. + +When a `snapshot-lock` file exists it is used reather than the chain.toml file to determine which files should be downloaded. This means that the directory contents can be maintained event if Erigon is re-versioned and the chain.toml contents change. + +### Deleting snapshot-lock.json + +If the snapshot-lock file is deleted it will be reacreated from the `chain.toml` file embeded in the Erigon process. If the hashes change then the associated files will be re-downloaded. + +### How to override downloads + +As the `snapshot-lock` is used as the master hash list by the executing process the `.seg` file used by the process can be changes by changing its associated hash. there are two models of operation here: + +* If the associated `.seg.` file is deleted and the hash changes and new file will be deleted. + +* If a replacement file is incerted into the directory and the hash changes to the hash of that file, the file will be used - with no download. + * If no other method to determing the file hash exists, the hash of the new file will be printed by the process on start-up if it does not match the `snapshot-lock` entry and this can be used to insert the hash into the ``snapshot-lock` + +## BittorrentInfo (in the downloader db) + +This is an internal db table used for managing the state of the download from either the torrent or its associated web host. It has been created to manage the fact that the internal torrent library does not necessarily manage the overall download state of the file assocaited with a has completely consistently. + +It contains the following entries + +||| +|----|------| +| Name | The unqualified name of the file being downloaded. e.g. `v1-000000-000500-transactions.seg`. This field is treated as the primary key for the table, there can only be one download per file. | +| Hash | The hash of the file being downloaded. This value can change if the external hash received either from `chain.toml` or `snapshot-lock.json` changes. If the hash changes the entry is treated as a new download and the `Length` and `Completed` fields are reset. +| Length | The length of the file downloaded. This may be avilible from the torrent info - but in general is only completed once the file has been downloaded. | +| Created | The date and time that this record was created, or that the `Hash` field changed, effectively making this an new download. | +| Completed | This is the date and time that the download was completed. The presence of a completion date is also used as an indication of completion. If the field is nil then the download is treated as incomplete | + diff --git a/erigon-lib/downloader/components.png b/erigon-lib/downloader/components.png new file mode 100644 index 00000000000..4dca436e59c Binary files /dev/null and b/erigon-lib/downloader/components.png differ diff --git a/erigon-lib/downloader/downloader.go b/erigon-lib/downloader/downloader.go index 8a42ed2c21f..fb44565afe0 100644 --- a/erigon-lib/downloader/downloader.go +++ b/erigon-lib/downloader/downloader.go @@ -17,13 +17,25 @@ package downloader import ( + "bufio" + "bytes" "context" + "encoding/hex" + "encoding/json" "errors" "fmt" + "math" + "math/rand" + "net/http" "net/url" "os" + "path" "path/filepath" + "reflect" "runtime" + "slices" + "sort" + "strconv" "strings" "sync" "sync/atomic" @@ -32,12 +44,15 @@ import ( "github.com/anacrolix/torrent" "github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/storage" + "github.com/anacrolix/torrent/types/infohash" "github.com/c2h5oh/datasize" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" + "github.com/tidwall/btree" "golang.org/x/sync/errgroup" "golang.org/x/sync/semaphore" + "golang.org/x/time/rate" + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/common/dbg" @@ -51,14 +66,16 @@ import ( // Downloader - component which downloading historical files. Can use BitTorrent, or other protocols type Downloader struct { - db kv.RwDB - pieceCompletionDB storage.PieceCompletion - torrentClient *torrent.Client + db kv.RwDB + pieceCompletionDB storage.PieceCompletion + torrentClient *torrent.Client + webDownloadClient *RCloneClient + webDownloadSessions map[string]*RCloneSession cfg *downloadercfg.Cfg - statsLock *sync.RWMutex - stats AggStats + lock *sync.RWMutex + stats AggStats folder storage.ClientImplCloser @@ -66,17 +83,37 @@ type Downloader struct { stopMainLoop context.CancelFunc wg sync.WaitGroup - webseeds *WebSeeds + webseeds *WebSeeds + webseedsDiscover bool + logger log.Logger verbosity log.Lvl - torrentFiles *TorrentFiles + torrentFS *AtomicTorrentFS + snapshotLock *snapshotLock + webDownloadInfo map[string]webDownloadInfo + downloading map[string]struct{} + downloadLimit *rate.Limit +} + +type webDownloadInfo struct { + url *url.URL + length int64 + md5 string + torrent *torrent.Torrent +} + +type downloadProgress struct { + time time.Time + progress float32 } type AggStats struct { MetadataReady, FilesTotal int32 + LastMetadataUpdate *time.Time PeersUnique int32 ConnectionsTotal uint64 + Downloading int32 Completed bool Progress float32 @@ -86,9 +123,153 @@ type AggStats struct { BytesDownload, BytesUpload uint64 UploadRate, DownloadRate uint64 + LocalFileHashes int + LocalFileHashTime time.Duration + + WebseedTripCount *atomic.Int64 + WebseedDiscardCount *atomic.Int64 + WebseedServerFails *atomic.Int64 + WebseedBytesDownload *atomic.Int64 + + lastTorrentStatus time.Time + downloadProgress map[string]downloadProgress +} + +type requestHandler struct { + http.Transport + downloader *Downloader +} + +var cloudflareHeaders = http.Header{ + "lsjdjwcush6jbnjj3jnjscoscisoc5s": []string{"I%OSJDNFKE783DDHHJD873EFSIVNI7384R78SSJBJBCCJBC32JABBJCBJK45"}, +} + +func insertCloudflareHeaders(req *http.Request) { + for key, value := range cloudflareHeaders { + req.Header[key] = value + } +} + +// retryBackoff performs exponential backoff based on the attempt number and limited +// by the provided minimum and maximum durations. +// +// It also tries to parse Retry-After response header when a http.StatusTooManyRequests +// (HTTP Code 429) is found in the resp parameter. Hence it will return the number of +// seconds the server states it may be ready to process more requests from this client. +func calcBackoff(min, max time.Duration, attemptNum int, resp *http.Response) time.Duration { + if resp != nil { + if resp.StatusCode == http.StatusTooManyRequests || resp.StatusCode == http.StatusServiceUnavailable { + if s, ok := resp.Header["Retry-After"]; ok { + if sleep, err := strconv.ParseInt(s[0], 10, 64); err == nil { + return time.Second * time.Duration(sleep) + } + } + } + } + + mult := math.Pow(2, float64(attemptNum)) * float64(min) + sleep := time.Duration(mult) + if float64(sleep) != mult || sleep > max { + sleep = max + } + + return sleep +} + +func (r *requestHandler) RoundTrip(req *http.Request) (resp *http.Response, err error) { + defer func() { + if r := recover(); r != nil { + if resp != nil && resp.Body != nil { + resp.Body.Close() + resp.Body = nil + } + + err = fmt.Errorf("http client panic: %s", r) + } + }() + + insertCloudflareHeaders(req) + + resp, err = r.Transport.RoundTrip(req) + + attempts := 1 + retry := true + + const minDelay = 500 * time.Millisecond + const maxDelay = 5 * time.Second + const maxAttempts = 10 + + for err == nil && retry { + r.downloader.stats.WebseedTripCount.Add(1) + + switch resp.StatusCode { + case http.StatusOK: + if len(req.Header.Get("Range")) > 0 { + // the torrent lib is expecting http.StatusPartialContent so it will discard this + // if this count is higher than 0, its likely there is a server side config issue + // as it implies that the server is not handling range requests correctly and is just + // returning the whole file - which the torrent lib can't handle + // + // TODO: We could count the bytes - probably need to take this from the req though + // as its not clear the amount of the content which will be read. This needs + // further investigation - if required. + r.downloader.stats.WebseedDiscardCount.Add(1) + } + + r.downloader.stats.WebseedBytesDownload.Add(resp.ContentLength) + retry = false + + // the first two statuses here have been observed from cloudflare + // during testing. The remainder are generally understood to be + // retriable http responses, calcBackoff will use the Retry-After + // header if its availible + case http.StatusInternalServerError, http.StatusBadGateway, + http.StatusRequestTimeout, http.StatusTooEarly, + http.StatusTooManyRequests, http.StatusServiceUnavailable, + http.StatusGatewayTimeout: + + r.downloader.stats.WebseedServerFails.Add(1) + + if resp.Body != nil { + resp.Body.Close() + resp.Body = nil + } + + attempts++ + delayTimer := time.NewTimer(calcBackoff(minDelay, maxDelay, attempts, resp)) + + select { + case <-delayTimer.C: + // Note this assumes the req.Body is nil + resp, err = r.Transport.RoundTrip(req) + r.downloader.stats.WebseedTripCount.Add(1) + + case <-req.Context().Done(): + err = req.Context().Err() + } + retry = attempts < maxAttempts + + default: + r.downloader.stats.WebseedBytesDownload.Add(resp.ContentLength) + retry = false + } + } + + return resp, err } -func New(ctx context.Context, cfg *downloadercfg.Cfg, dirs datadir.Dirs, logger log.Logger, verbosity log.Lvl, discover bool) (*Downloader, error) { +func New(ctx context.Context, cfg *downloadercfg.Cfg, logger log.Logger, verbosity log.Lvl, discover bool) (*Downloader, error) { + requestHandler := &requestHandler{ + Transport: http.Transport{ + Proxy: cfg.ClientConfig.HTTPProxy, + DialContext: cfg.ClientConfig.HTTPDialContext, + // I think this value was observed from some webseeds. It seems reasonable to extend it + // to other uses of HTTP from the client. + MaxConnsPerHost: 10, + }} + + cfg.ClientConfig.WebTransport = requestHandler + db, c, m, torrentClient, err := openClient(ctx, cfg.Dirs.Downloader, cfg.Dirs.Snap, cfg.ClientConfig) if err != nil { return nil, fmt.Errorf("openClient: %w", err) @@ -105,67 +286,484 @@ func New(ctx context.Context, cfg *downloadercfg.Cfg, dirs datadir.Dirs, logger } } + mutex := &sync.RWMutex{} + stats := AggStats{ + WebseedTripCount: &atomic.Int64{}, + WebseedBytesDownload: &atomic.Int64{}, + WebseedDiscardCount: &atomic.Int64{}, + WebseedServerFails: &atomic.Int64{}, + downloadProgress: map[string]downloadProgress{}, + } + + lock, err := getSnapshotLock(ctx, cfg, db, &stats, mutex, logger) + if err != nil { + return nil, fmt.Errorf("can't initialize snapshot lock: %w", err) + } + d := &Downloader{ - cfg: cfg, - db: db, - pieceCompletionDB: c, - folder: m, - torrentClient: torrentClient, - statsLock: &sync.RWMutex{}, - webseeds: &WebSeeds{logger: logger, verbosity: verbosity, downloadTorrentFile: cfg.DownloadTorrentFilesFromWebseed, torrentsWhitelist: cfg.ExpectedTorrentFilesHashes}, - logger: logger, - verbosity: verbosity, - torrentFiles: &TorrentFiles{dir: cfg.Dirs.Snap}, - } - d.webseeds.torrentFiles = d.torrentFiles + cfg: cfg, + db: db, + pieceCompletionDB: c, + folder: m, + torrentClient: torrentClient, + lock: mutex, + stats: stats, + webseeds: NewWebSeeds(cfg.WebSeedUrls, verbosity, logger), + logger: logger, + verbosity: verbosity, + torrentFS: &AtomicTorrentFS{dir: cfg.Dirs.Snap}, + snapshotLock: lock, + webDownloadInfo: map[string]webDownloadInfo{}, + webDownloadSessions: map[string]*RCloneSession{}, + downloading: map[string]struct{}{}, + webseedsDiscover: discover, + } + d.webseeds.SetTorrent(d.torrentFS, lock.Downloads, cfg.DownloadTorrentFilesFromWebseed) + + requestHandler.downloader = d + + if cfg.ClientConfig.DownloadRateLimiter != nil { + downloadLimit := cfg.ClientConfig.DownloadRateLimiter.Limit() + d.downloadLimit = &downloadLimit + } + d.ctx, d.stopMainLoop = context.WithCancel(ctx) if cfg.AddTorrentsFromDisk { - if err := d.BuildTorrentFilesIfNeed(d.ctx); err != nil { + for _, download := range lock.Downloads { + if info, err := d.torrentInfo(download.Name); err == nil { + if info.Completed != nil { + if hash := hex.EncodeToString(info.Hash); download.Hash != hash { + fileInfo, _, ok := snaptype.ParseFileName(d.SnapDir(), download.Name) + + if !ok { + d.logger.Debug("[snapshots] Can't parse download filename", "file", download.Name) + continue + } + + // this is lazy as it can be expensive for large files + fileHashBytes, err := fileHashBytes(d.ctx, fileInfo, &d.stats, d.lock) + + if errors.Is(err, os.ErrNotExist) { + hashBytes, _ := hex.DecodeString(download.Hash) + if err := d.db.Update(d.ctx, torrentInfoReset(download.Name, hashBytes, 0)); err != nil { + d.logger.Debug("[snapshots] Can't update torrent info", "file", download.Name, "hash", download.Hash, "err", err) + } + continue + } + + fileHash := hex.EncodeToString(fileHashBytes) + + if fileHash != download.Hash && fileHash != hash { + d.logger.Debug("[snapshots] download db mismatch", "file", download.Name, "lock", download.Hash, "db", hash, "disk", fileHash, "downloaded", *info.Completed) + } else { + d.logger.Debug("[snapshots] lock hash does not match completed download", "file", download.Name, "lock", hash, "download", download.Hash, "downloaded", *info.Completed) + } + } + } + } + } + + if err := d.BuildTorrentFilesIfNeed(d.ctx, lock.Chain, lock.Downloads); err != nil { return nil, err } + if err := d.addTorrentFilesFromDisk(false); err != nil { return nil, err } } - // CornerCase: no peers -> no anoncments to trackers -> no magnetlink resolution (but magnetlink has filename) - // means we can start adding weebseeds without waiting for `<-t.GotInfo()` - d.wg.Add(1) + return d, nil +} - go func() { - defer d.wg.Done() - if !discover { - return +const SnapshotsLockFileName = "snapshot-lock.json" + +type snapshotLock struct { + Chain string `json:"chain"` + Downloads snapcfg.Preverified `json:"downloads"` +} + +func getSnapshotLock(ctx context.Context, cfg *downloadercfg.Cfg, db kv.RoDB, stats *AggStats, statsLock *sync.RWMutex, logger log.Logger) (*snapshotLock, error) { + //TODO: snapshots-lock.json must be created after 1-st download done + //TODO: snapshots-lock.json is not compatible with E3 .kv files - because they are not immutable (merging to infinity) + return initSnapshotLock(ctx, cfg, db, stats, statsLock, logger) + /* + if !cfg.SnapshotLock { + return initSnapshotLock(ctx, cfg, db, logger) + } + + snapDir := cfg.Dirs.Snap + + lockPath := filepath.Join(snapDir, SnapshotsLockFileName) + + file, err := os.Open(lockPath) + if err != nil { + if !errors.Is(err, os.ErrNotExist) { + return nil, err + } } - d.webseeds.Discover(d.ctx, d.cfg.WebSeedS3Tokens, d.cfg.WebSeedUrls, d.cfg.WebSeedFiles, d.cfg.Dirs.Snap) - // webseeds.Discover may create new .torrent files on disk - if err := d.addTorrentFilesFromDisk(true); err != nil && !errors.Is(err, context.Canceled) { - d.logger.Warn("[snapshots] addTorrentFilesFromDisk", "err", err) + + var data []byte + + if file != nil { + defer file.Close() + + data, err = io.ReadAll(file) + + if err != nil { + return nil, err + } } - }() - return d, nil + + if file == nil || len(data) == 0 { + f, err := os.Create(lockPath) + if err != nil { + return nil, err + } + defer f.Close() + + lock, err := initSnapshotLock(ctx, cfg, db, logger) + + if err != nil { + return nil, err + } + + data, err := json.Marshal(lock) + + if err != nil { + return nil, err + } + + _, err = f.Write(data) + + if err != nil { + return nil, err + } + + if err := f.Sync(); err != nil { + return nil, err + } + + return lock, nil + } + + var lock snapshotLock + + if err = json.Unmarshal(data, &lock); err != nil { + return nil, err + } + + if lock.Chain != cfg.ChainName { + return nil, fmt.Errorf("unexpected chain name:%q expecting: %q", lock.Chain, cfg.ChainName) + } + + prevHashes := map[string]string{} + prevNames := map[string]string{} + + for _, current := range lock.Downloads { + if prev, ok := prevHashes[current.Hash]; ok { + if prev != current.Name { + return nil, fmt.Errorf("invalid snapshot_lock: %s duplicated at: %s and %s", current.Hash, current.Name, prev) + } + } + + if prev, ok := prevNames[current.Name]; ok { + if prev != current.Hash { + return nil, fmt.Errorf("invalid snapshot_lock: %s duplicated at: %s and %s", current.Name, current.Hash, prev) + } + } + + prevHashes[current.Name] = current.Hash + prevNames[current.Hash] = current.Name + } + return &lock, nil + */ } -const ProhibitNewDownloadsFileName = "prohibit_new_downloads.lock" +func initSnapshotLock(ctx context.Context, cfg *downloadercfg.Cfg, db kv.RoDB, stats *AggStats, statsLock *sync.RWMutex, logger log.Logger) (*snapshotLock, error) { + lock := &snapshotLock{ + Chain: cfg.ChainName, + } -// Erigon "download once" - means restart/upgrade/downgrade will not download files (and will be fast) -// After "download once" - Erigon will produce and seed new files -// Downloader will able: seed new files (already existing on FS), download uncomplete parts of existing files (if Verify found some bad parts) -func (d *Downloader) prohibitNewDownloads() error { - fPath := filepath.Join(d.SnapDir(), ProhibitNewDownloadsFileName) - f, err := os.Create(fPath) + files, err := SeedableFiles(cfg.Dirs, cfg.ChainName) if err != nil { - return err + return nil, err } - defer f.Close() - if err := f.Sync(); err != nil { - return err + + snapCfg := cfg.SnapshotConfig + + if snapCfg == nil { + snapCfg = snapcfg.KnownCfg(cfg.ChainName) } - return nil + + //if len(files) == 0 { + lock.Downloads = snapCfg.Preverified + //} + + // if files exist on disk we assume that the lock file has been removed + // or was never present so compare them against the known config to + // recreate the lock file + // + // if the file is above the ExpectBlocks in the snapCfg we ignore it + // if the file is the same version of the known file we: + // check if its mid upload + // - in which case we compare the hash in the db to the known hash + // - if they are different we delete the local file and include the + // know file in the hash which will force a re-upload + // otherwise + // - if the file has a different hash to the known file we include + // the files hash in the upload to preserve the local copy + // if the file is a different version - we see if the version for the + // file is available in know config - and if so we follow the procedure + // above, but we use the matching version from the known config. If there + // is no matching version just use the one discovered for the file + + versionedCfg := map[snaptype.Version]*snapcfg.Cfg{} + versionedCfgLock := sync.Mutex{} + + snapDir := cfg.Dirs.Snap + + var downloadMap btree.Map[string, snapcfg.PreverifiedItem] + var downloadsMutex sync.Mutex + + g, ctx := errgroup.WithContext(ctx) + g.SetLimit(runtime.GOMAXPROCS(-1) * 4) + var i atomic.Int32 + + logEvery := time.NewTicker(20 * time.Second) + defer logEvery.Stop() + + for _, file := range files { + file := file + + g.Go(func() error { + i.Add(1) + + fileInfo, isStateFile, ok := snaptype.ParseFileName(snapDir, file) + + if !ok { + return nil + } + + if isStateFile { + if preverified, ok := snapCfg.Preverified.Get(file); ok { + downloadsMutex.Lock() + defer downloadsMutex.Unlock() + downloadMap.Set(file, preverified) + } + return nil //TODO: we don't create + } + + if fileInfo.From > snapCfg.ExpectBlocks { + return nil + } + + if preverified, ok := snapCfg.Preverified.Get(fileInfo.Name()); ok { + hashBytes, err := localHashBytes(ctx, fileInfo, db, stats, statsLock) + + if err != nil { + return fmt.Errorf("localHashBytes: %w", err) + } + + downloadsMutex.Lock() + defer downloadsMutex.Unlock() + + if hash := hex.EncodeToString(hashBytes); preverified.Hash == hash { + downloadMap.Set(fileInfo.Name(), preverified) + } else { + logger.Debug("[downloader] local file hash does not match known", "file", fileInfo.Name(), "local", hash, "known", preverified.Hash) + // TODO: check if it has an index - if not use the known hash and delete the file + downloadMap.Set(fileInfo.Name(), snapcfg.PreverifiedItem{Name: fileInfo.Name(), Hash: hash}) + } + } else { + versioned := func() *snapcfg.Cfg { + versionedCfgLock.Lock() + defer versionedCfgLock.Unlock() + + versioned, ok := versionedCfg[fileInfo.Version] + + if !ok { + versioned = snapcfg.VersionedCfg(cfg.ChainName, fileInfo.Version, fileInfo.Version) + versionedCfg[fileInfo.Version] = versioned + } + + return versioned + }() + + hashBytes, err := localHashBytes(ctx, fileInfo, db, stats, statsLock) + + if err != nil { + return fmt.Errorf("localHashBytes: %w", err) + } + + downloadsMutex.Lock() + defer downloadsMutex.Unlock() + + if preverified, ok := versioned.Preverified.Get(fileInfo.Name()); ok { + if hash := hex.EncodeToString(hashBytes); preverified.Hash == hash { + downloadMap.Set(preverified.Name, preverified) + } else { + logger.Debug("[downloader] local file hash does not match known", "file", fileInfo.Name(), "local", hash, "known", preverified.Hash) + // TODO: check if it has an index - if not use the known hash and delete the file + downloadMap.Set(fileInfo.Name(), snapcfg.PreverifiedItem{Name: fileInfo.Name(), Hash: hash}) + } + } else { + versioned := func() *snapcfg.Cfg { + versionedCfgLock.Lock() + defer versionedCfgLock.Unlock() + + versioned, ok := versionedCfg[fileInfo.Version] + + if !ok { + versioned = snapcfg.VersionedCfg(cfg.ChainName, fileInfo.Version, fileInfo.Version) + versionedCfg[fileInfo.Version] = versioned + } + + return versioned + }() + + hashBytes, err := localHashBytes(ctx, fileInfo, db, stats, statsLock) + + if err != nil { + return err + } + + if preverified, ok := versioned.Preverified.Get(fileInfo.Name()); ok { + if hash := hex.EncodeToString(hashBytes); preverified.Hash == hash { + downloadMap.Set(preverified.Name, preverified) + } else { + logger.Debug("[downloader] local file hash does not match known", "file", fileInfo.Name(), "local", hash, "known", preverified.Hash) + // TODO: check if it has an index - if not use the known hash and delete the file + downloadMap.Set(fileInfo.Name(), snapcfg.PreverifiedItem{Name: fileInfo.Name(), Hash: hash}) + } + } else { + downloadMap.Set(fileInfo.Name(), snapcfg.PreverifiedItem{Name: fileInfo.Name(), Hash: hex.EncodeToString(hashBytes)}) + } + } + } + + return nil + }) + } + + func() { + for int(i.Load()) < len(files) { + select { + case <-ctx.Done(): + return // g.Wait() will return right error + case <-logEvery.C: + if int(i.Load()) == len(files) { + return + } + log.Info("[snapshots] Initiating snapshot-lock", "progress", fmt.Sprintf("%d/%d", i.Load(), len(files))) + } + } + }() + + if err := g.Wait(); err != nil { + return nil, err + } + + var missingItems []snapcfg.PreverifiedItem + var downloads snapcfg.Preverified + + downloadMap.Scan(func(key string, value snapcfg.PreverifiedItem) bool { + downloads = append(downloads, value) + return true + }) + + for _, item := range snapCfg.Preverified { + _, _, ok := snaptype.ParseFileName(snapDir, item.Name) + if !ok { + continue + } + + if !downloads.Contains(item.Name, true) { + missingItems = append(missingItems, item) + } + } + + lock.Downloads = snapcfg.Merge(downloads, missingItems) + return lock, nil +} + +func localHashBytes(ctx context.Context, fileInfo snaptype.FileInfo, db kv.RoDB, stats *AggStats, statsLock *sync.RWMutex) ([]byte, error) { + var hashBytes []byte + + if db != nil { + err := db.View(ctx, func(tx kv.Tx) (err error) { + infoBytes, err := tx.GetOne(kv.BittorrentInfo, []byte(fileInfo.Name())) + + if err != nil { + return err + } + + if len(infoBytes) == 20 { + hashBytes = infoBytes + return nil + } + + var info torrentInfo + + if err = json.Unmarshal(infoBytes, &info); err == nil { + hashBytes = info.Hash + } + + return nil + }) + + if err != nil { + return nil, err + } + } + + if len(hashBytes) != 0 { + return hashBytes, nil + } + + meta, err := metainfo.LoadFromFile(fileInfo.Path + ".torrent") + + if err == nil { + if spec, err := torrent.TorrentSpecFromMetaInfoErr(meta); err == nil { + return spec.InfoHash.Bytes(), nil + } + } + + return fileHashBytes(ctx, fileInfo, stats, statsLock) } -func (d *Downloader) newDownloadsAreProhibited() bool { - return dir.FileExist(filepath.Join(d.SnapDir(), ProhibitNewDownloadsFileName)) + +func fileHashBytes(ctx context.Context, fileInfo snaptype.FileInfo, stats *AggStats, statsLock *sync.RWMutex) ([]byte, error) { + + if !dir.FileExist(fileInfo.Path) { + return nil, os.ErrNotExist + } + + defer func(t time.Time) { + statsLock.Lock() + defer statsLock.Unlock() + stats.LocalFileHashes++ + stats.LocalFileHashTime += time.Since(t) + }(time.Now()) + + info := &metainfo.Info{PieceLength: downloadercfg.DefaultPieceSize, Name: fileInfo.Name()} + + if err := info.BuildFromFilePath(fileInfo.Path); err != nil { + return nil, fmt.Errorf("can't get local hash for %s: %w", fileInfo.Name(), err) + } + + meta, err := CreateMetaInfo(info, nil) + + if err != nil { + return nil, fmt.Errorf("can't get local hash for %s: %w", fileInfo.Name(), err) + } + + spec, err := torrent.TorrentSpecFromMetaInfoErr(meta) + + if err != nil { + return nil, fmt.Errorf("can't get local hash for %s: %w", fileInfo.Name(), err) + } + + return spec.InfoHash.Bytes(), nil } func (d *Downloader) MainLoopInBackground(silent bool) { @@ -180,170 +778,1019 @@ func (d *Downloader) MainLoopInBackground(silent bool) { }() } +type downloadStatus struct { + name string + length int64 + infoHash infohash.T + spec *torrent.TorrentSpec + err error +} + +type seedHash struct { + url *url.URL + hash *infohash.T + reported bool +} + func (d *Downloader) mainLoop(silent bool) error { + if d.webseedsDiscover { + // CornerCase: no peers -> no anoncments to trackers -> no magnetlink resolution (but magnetlink has filename) + // means we can start adding weebseeds without waiting for `<-t.GotInfo()` + d.wg.Add(1) + go func() { + defer d.wg.Done() + // webseeds.Discover may create new .torrent files on disk + d.webseeds.Discover(d.ctx, d.cfg.WebSeedFiles, d.cfg.Dirs.Snap) + // apply webseeds to existing torrents + if err := d.addTorrentFilesFromDisk(true); err != nil && !errors.Is(err, context.Canceled) { + d.logger.Warn("[snapshots] addTorrentFilesFromDisk", "err", err) + } + + d.lock.Lock() + defer d.lock.Unlock() + + for _, t := range d.torrentClient.Torrents() { + if urls, ok := d.webseeds.ByFileName(t.Name()); ok { + t.AddWebSeeds(urls) + } + } + }() + } + var sem = semaphore.NewWeighted(int64(d.cfg.DownloadSlots)) + //TODO: feature is not ready yet + //d.webDownloadClient, _ = NewRCloneClient(d.logger) + d.webDownloadClient = nil + d.wg.Add(1) go func() { defer d.wg.Done() - // Torrents that are already taken care of - //// First loop drops torrents that were downloaded or are already complete - //// This improves efficiency of download by reducing number of active torrent (empirical observation) - //for torrents := d.torrentClient.Torrents(); len(torrents) > 0; torrents = d.torrentClient.Torrents() { - // select { - // case <-d.ctx.Done(): - // return - // default: - // } - // for _, t := range torrents { - // if _, already := torrentMap[t.InfoHash()]; already { - // continue - // } - // select { - // case <-d.ctx.Done(): - // return - // case <-t.GotInfo(): - // } - // if t.Complete.Bool() { - // atomic.AddUint64(&d.stats.DroppedCompleted, uint64(t.BytesCompleted())) - // atomic.AddUint64(&d.stats.DroppedTotal, uint64(t.Length())) - // t.Drop() - // torrentMap[t.InfoHash()] = struct{}{} - // continue - // } - // if err := sem.Acquire(d.ctx, 1); err != nil { - // return - // } - // t.AllowDataDownload() - // t.DownloadAll() - // torrentMap[t.InfoHash()] = struct{}{} - // d.wg.Add(1) - // go func(t *torrent.Torrent) { - // defer d.wg.Done() - // defer sem.Release(1) - // select { - // case <-d.ctx.Done(): - // return - // case <-t.Complete.On(): - // } - // atomic.AddUint64(&d.stats.DroppedCompleted, uint64(t.BytesCompleted())) - // atomic.AddUint64(&d.stats.DroppedTotal, uint64(t.Length())) - // t.Drop() - // }(t) - // } - //} - //atomic.StoreUint64(&d.stats.DroppedCompleted, 0) - //atomic.StoreUint64(&d.stats.DroppedTotal, 0) - //d.addTorrentFilesFromDisk(false) + complete := map[string]struct{}{} + checking := map[string]struct{}{} + failed := map[string]struct{}{} + waiting := map[string]struct{}{} + + downloadComplete := make(chan downloadStatus, 100) + seedHashMismatches := map[infohash.T][]*seedHash{} + + // set limit here to make load predictable, not to control Disk/CPU consumption + // will impact start times depending on the amount of non complete files - should + // be low unless the download db is deleted - in which case all files may be checked + checkGroup, _ := errgroup.WithContext(d.ctx) + checkGroup.SetLimit(runtime.GOMAXPROCS(-1) * 4) + for { torrents := d.torrentClient.Torrents() - select { - case <-d.ctx.Done(): - return - default: - } + + var pending []*torrent.Torrent + for _, t := range torrents { - if t.Complete.Bool() { + if _, ok := complete[t.Name()]; ok { continue } - if err := sem.Acquire(d.ctx, 1); err != nil { - return + + if isComplete, length, completionTime := d.checkComplete(t.Name()); isComplete && completionTime != nil { + if _, ok := checking[t.Name()]; !ok { + fileInfo, _, ok := snaptype.ParseFileName(d.SnapDir(), t.Name()) + + if !ok { + downloadComplete <- downloadStatus{ + name: fileInfo.Name(), + err: fmt.Errorf("can't parse file name: %s", fileInfo.Name()), + } + } + + stat, err := os.Stat(fileInfo.Path) + + if err != nil { + downloadComplete <- downloadStatus{ + name: fileInfo.Name(), + err: err, + } + } + + if completionTime != nil { + if !stat.ModTime().Equal(*completionTime) { + checking[t.Name()] = struct{}{} + + go func(fileInfo snaptype.FileInfo, infoHash infohash.T, length int64, completionTime time.Time) { + checkGroup.Go(func() error { + fileHashBytes, _ := fileHashBytes(d.ctx, fileInfo, &d.stats, d.lock) + + if bytes.Equal(infoHash.Bytes(), fileHashBytes) { + downloadComplete <- downloadStatus{ + name: fileInfo.Name(), + length: length, + infoHash: infoHash, + } + } else { + downloadComplete <- downloadStatus{ + name: fileInfo.Name(), + err: fmt.Errorf("hash check failed"), + } + + d.logger.Warn("[snapshots] Torrent hash does not match file", "file", fileInfo.Name(), "torrent-hash", infoHash, "file-hash", hex.EncodeToString(fileHashBytes)) + } + + return nil + }) + }(fileInfo, t.InfoHash(), length, *completionTime) + + } else { + complete[t.Name()] = struct{}{} + continue + } + } + } + } else { + delete(failed, t.Name()) } - t.AllowDataDownload() - select { - case <-d.ctx.Done(): - return - case <-t.GotInfo(): + + if _, ok := failed[t.Name()]; ok { + continue } - t.DownloadAll() - d.wg.Add(1) - go func(t *torrent.Torrent) { - defer d.wg.Done() - defer sem.Release(1) + + d.lock.RLock() + _, downloading := d.downloading[t.Name()] + d.lock.RUnlock() + + if downloading && t.Complete.Bool() { select { case <-d.ctx.Done(): return - case <-t.Complete.On(): + case <-t.GotInfo(): + } + + var completionTime *time.Time + fileInfo, _, ok := snaptype.ParseFileName(d.SnapDir(), t.Name()) + + if !ok { + d.logger.Debug("[snapshots] Can't parse downloaded filename", "file", t.Name()) + failed[t.Name()] = struct{}{} + continue + } + + info, err := d.torrentInfo(t.Name()) + + if err == nil { + completionTime = info.Completed + } + + if completionTime == nil { + now := time.Now() + completionTime = &now + } + + if statInfo, _ := os.Stat(fileInfo.Path); statInfo != nil { + if !statInfo.ModTime().Equal(*completionTime) { + os.Chtimes(fileInfo.Path, time.Time{}, *completionTime) + } + + if statInfo, _ := os.Stat(fileInfo.Path); statInfo != nil { + // round completion time to os granularity + modTime := statInfo.ModTime() + completionTime = &modTime + } + } + + if err := d.db.Update(d.ctx, + torrentInfoUpdater(t.Info().Name, nil, t.Info().Length, completionTime)); err != nil { + d.logger.Warn("[snapshots] Failed to update file info", "file", t.Info().Name, "err", err) + } + + d.lock.Lock() + delete(d.downloading, t.Name()) + d.lock.Unlock() + complete[t.Name()] = struct{}{} + continue + } + + if downloading { + continue + } + + pending = append(pending, t) + } + + select { + case <-d.ctx.Done(): + return + case status := <-downloadComplete: + d.lock.Lock() + delete(d.downloading, status.name) + d.lock.Unlock() + + delete(checking, status.name) + + if status.spec != nil { + _, _, err := d.torrentClient.AddTorrentSpec(status.spec) + + if err != nil { + d.logger.Warn("Can't re-add spec after download", "file", status.name, "err", err) + } + + } + + if status.err == nil { + var completionTime *time.Time + fileInfo, _, ok := snaptype.ParseFileName(d.SnapDir(), status.name) + + if !ok { + d.logger.Debug("[snapshots] Can't parse downloaded filename", "file", status.name) + continue + } + + if info, err := d.torrentInfo(status.name); err == nil { + completionTime = info.Completed + } + + if completionTime == nil { + now := time.Now() + completionTime = &now + } + + if statInfo, _ := os.Stat(fileInfo.Path); statInfo != nil { + if !statInfo.ModTime().Equal(*completionTime) { + os.Chtimes(fileInfo.Path, time.Time{}, *completionTime) + } + + if statInfo, _ := os.Stat(fileInfo.Path); statInfo != nil { + // round completion time to os granularity + modTime := statInfo.ModTime() + completionTime = &modTime + } + } + + if err := d.db.Update(context.Background(), + torrentInfoUpdater(status.name, status.infoHash.Bytes(), status.length, completionTime)); err != nil { + d.logger.Warn("[snapshots] Failed to update file info", "file", status.name, "err", err) + } + + complete[status.name] = struct{}{} + continue + } else { + delete(complete, status.name) + } + + default: + } + + d.lock.RLock() + webDownloadInfoLen := len(d.webDownloadInfo) + d.lock.RUnlock() + + if len(pending)+webDownloadInfoLen == 0 { + select { + case <-d.ctx.Done(): + return + case <-time.After(10 * time.Second): + continue + } + } + + d.lock.RLock() + downloadingLen := len(d.downloading) + d.stats.Downloading = int32(downloadingLen) + d.lock.RUnlock() + + available := availableTorrents(d.ctx, pending, d.cfg.DownloadSlots-downloadingLen) + + d.lock.RLock() + for _, webDownload := range d.webDownloadInfo { + _, downloading := d.downloading[webDownload.torrent.Name()] + + if downloading { + continue + } + + addDownload := true + + for _, t := range available { + if t.Name() == webDownload.torrent.Name() { + addDownload = false + break + } + } + + if addDownload { + if len(available) < d.cfg.DownloadSlots-downloadingLen { + available = append(available, webDownload.torrent) + } + } else { + if wi, _, ok := snaptype.ParseFileName(d.SnapDir(), webDownload.torrent.Name()); ok { + for i, t := range available { + if ai, _, ok := snaptype.ParseFileName(d.SnapDir(), t.Name()); ok { + if ai.CompareTo(wi) > 0 { + available[i] = webDownload.torrent + break + } + } + } } - }(t) + } + } + d.lock.RUnlock() + + for _, t := range available { + + torrentInfo, err := d.torrentInfo(t.Name()) + + if err != nil { + if err := d.db.Update(d.ctx, torrentInfoReset(t.Name(), t.InfoHash().Bytes(), 0)); err != nil { + d.logger.Debug("[snapshots] Can't update torrent info", "file", t.Name(), "hash", t.InfoHash(), "err", err) + } + } + + fileInfo, _, ok := snaptype.ParseFileName(d.SnapDir(), t.Name()) + + if !ok { + d.logger.Debug("[snapshots] Can't parse download filename", "file", t.Name()) + failed[t.Name()] = struct{}{} + continue + } + + if torrentInfo != nil { + if torrentInfo.Completed != nil { + // is the last completed download for this file is the same as the current torrent + // check if we can re-use the existing file rather than re-downloading it + if bytes.Equal(t.InfoHash().Bytes(), torrentInfo.Hash) { + // has the local file changed since we downloaded it - if it has just download it otherwise + // do a hash check as if we already have the file - we don't need to download it again + if fi, err := os.Stat(filepath.Join(d.SnapDir(), t.Name())); err == nil && fi.ModTime().Equal(*torrentInfo.Completed) { + localHash, complete := localHashCompletionCheck(d.ctx, t, fileInfo, downloadComplete, &d.stats, d.lock) + + if complete { + d.logger.Trace("[snapshots] Ignoring download request - already complete", "file", t.Name(), "hash", t.InfoHash()) + continue + } + + failed[t.Name()] = struct{}{} + d.logger.Debug("[snapshots] NonCanonical hash", "file", t.Name(), "got", hex.EncodeToString(localHash), "expected", t.InfoHash(), "downloaded", *torrentInfo.Completed) + continue + } else { + if err := d.db.Update(d.ctx, torrentInfoReset(t.Name(), t.InfoHash().Bytes(), 0)); err != nil { + d.logger.Debug("[snapshots] Can't reset torrent info", "file", t.Name(), "hash", t.InfoHash(), "err", err) + } + } + } else { + if err := d.db.Update(d.ctx, torrentInfoReset(t.Name(), t.InfoHash().Bytes(), 0)); err != nil { + d.logger.Debug("[snapshots] Can't update torrent info", "file", t.Name(), "hash", t.InfoHash(), "err", err) + } + + if _, complete := localHashCompletionCheck(d.ctx, t, fileInfo, downloadComplete, &d.stats, d.lock); complete { + d.logger.Trace("[snapshots] Ignoring download request - already complete", "file", t.Name(), "hash", t.InfoHash()) + continue + } + } + } + } else { + if _, ok := waiting[t.Name()]; !ok { + if _, complete := localHashCompletionCheck(d.ctx, t, fileInfo, downloadComplete, &d.stats, d.lock); complete { + d.logger.Trace("[snapshots] Ignoring download request - already complete", "file", t.Name(), "hash", t.InfoHash()) + continue + } + + waiting[t.Name()] = struct{}{} + } + } + + switch { + case len(t.PeerConns()) > 0: + d.logger.Debug("[snapshots] Downloading from BitTorrent", "file", t.Name(), "peers", len(t.PeerConns()), "webpeers", len(t.WebseedPeerConns())) + delete(waiting, t.Name()) + d.torrentDownload(t, downloadComplete, sem) + case len(t.WebseedPeerConns()) > 0: + if d.webDownloadClient != nil { + var peerUrls []*url.URL + + for _, peer := range t.WebseedPeerConns() { + if peerUrl, err := webPeerUrl(peer); err == nil { + peerUrls = append(peerUrls, peerUrl) + } + } + + d.logger.Debug("[snapshots] Downloading from webseed", "file", t.Name(), "webpeers", len(t.WebseedPeerConns())) + delete(waiting, t.Name()) + session, err := d.webDownload(peerUrls, t, nil, downloadComplete, sem) + + if err != nil { + d.logger.Warn("Can't complete web download", "file", t.Info().Name, "err", err) + + if session == nil { + delete(waiting, t.Name()) + d.torrentDownload(t, downloadComplete, sem) + } + + continue + } + } else { + d.logger.Debug("[snapshots] Downloading from torrent", "file", t.Name(), "peers", len(t.PeerConns()), "webpeers", len(t.WebseedPeerConns())) + delete(waiting, t.Name()) + d.torrentDownload(t, downloadComplete, sem) + } + default: + if d.webDownloadClient != nil { + d.lock.RLock() + webDownload, ok := d.webDownloadInfo[t.Name()] + d.lock.RUnlock() + + if !ok { + var mismatches []*seedHash + var err error + + webDownload, mismatches, err = d.getWebDownloadInfo(t) + + if err != nil { + if len(mismatches) > 0 { + seedHashMismatches[t.InfoHash()] = append(seedHashMismatches[t.InfoHash()], mismatches...) + logSeedHashMismatches(t.InfoHash(), t.Name(), seedHashMismatches, d.logger) + } + + d.logger.Warn("Can't complete web download", "file", t.Info().Name, "err", err) + continue + } + } + + root, _ := path.Split(webDownload.url.String()) + peerUrl, err := url.Parse(root) + + if err != nil { + d.logger.Warn("Can't complete web download", "file", t.Info().Name, "err", err) + continue + } + + d.lock.Lock() + delete(d.webDownloadInfo, t.Name()) + d.lock.Unlock() + + d.logger.Debug("[snapshots] Downloading from web", "file", t.Name(), "webpeers", len(t.WebseedPeerConns())) + delete(waiting, t.Name()) + d.webDownload([]*url.URL{peerUrl}, t, &webDownload, downloadComplete, sem) + continue + } + + d.logger.Debug("[snapshots] Downloading from torrent", "file", t.Name(), "peers", len(t.PeerConns())) + delete(waiting, t.Name()) + d.torrentDownload(t, downloadComplete, sem) + } + } + + d.lock.Lock() + lastMetadatUpdate := d.stats.LastMetadataUpdate + d.lock.Unlock() + + if lastMetadatUpdate != nil && + ((len(available) == 0 && time.Since(*lastMetadatUpdate) > 30*time.Second) || + time.Since(*lastMetadatUpdate) > 5*time.Minute) { + + for _, t := range d.torrentClient.Torrents() { + if t.Info() == nil { + if isComplete, _, _ := d.checkComplete(t.Name()); isComplete { + continue + } + + d.lock.RLock() + _, ok := d.webDownloadInfo[t.Name()] + d.lock.RUnlock() + + if !ok { + if _, ok := seedHashMismatches[t.InfoHash()]; ok { + continue + } + + info, mismatches, err := d.getWebDownloadInfo(t) + + seedHashMismatches[t.InfoHash()] = append(seedHashMismatches[t.InfoHash()], mismatches...) + + if err != nil { + if len(mismatches) > 0 { + logSeedHashMismatches(t.InfoHash(), t.Name(), seedHashMismatches, d.logger) + } + continue + } + + d.lock.Lock() + d.webDownloadInfo[t.Name()] = info + d.lock.Unlock() + } + } else { + d.lock.Lock() + delete(d.webDownloadInfo, t.Name()) + d.lock.Unlock() + } + } + } + } + }() + + logEvery := time.NewTicker(20 * time.Second) + defer logEvery.Stop() + + statInterval := 20 * time.Second + statEvery := time.NewTicker(statInterval) + defer statEvery.Stop() + + var m runtime.MemStats + for { + select { + case <-d.ctx.Done(): + return d.ctx.Err() + case <-statEvery.C: + d.ReCalcStats(statInterval) + + case <-logEvery.C: + if silent { + continue + } + + stats := d.Stats() + + dbg.ReadMemStats(&m) + if stats.Completed { + d.logger.Info("[snapshots] Seeding", + "up", common.ByteCount(stats.UploadRate)+"/s", + "peers", stats.PeersUnique, + "conns", stats.ConnectionsTotal, + "files", stats.FilesTotal, + "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), + ) + continue + } + + d.logger.Info("[snapshots] Downloading", + "progress", fmt.Sprintf("%.2f%% %s/%s", stats.Progress, common.ByteCount(stats.BytesCompleted), common.ByteCount(stats.BytesTotal)), + "downloading", stats.Downloading, + "download", common.ByteCount(stats.DownloadRate)+"/s", + "upload", common.ByteCount(stats.UploadRate)+"/s", + "peers", stats.PeersUnique, + "conns", stats.ConnectionsTotal, + "files", stats.FilesTotal, + "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), + ) + + if stats.PeersUnique == 0 { + ips := d.TorrentClient().BadPeerIPs() + if len(ips) > 0 { + d.logger.Info("[snapshots] Stats", "banned", ips) + } + } + } + } +} + +func localHashCompletionCheck(ctx context.Context, t *torrent.Torrent, fileInfo snaptype.FileInfo, statusChan chan downloadStatus, stats *AggStats, statsLock *sync.RWMutex) ([]byte, bool) { + localHash, err := fileHashBytes(ctx, fileInfo, stats, statsLock) + + if err == nil { + if bytes.Equal(t.InfoHash().Bytes(), localHash) { + statusChan <- downloadStatus{ + name: t.Name(), + length: t.Length(), + infoHash: t.InfoHash(), + spec: nil, + err: nil, + } + + return localHash, true + } + } + + return localHash, false +} + +func logSeedHashMismatches(torrentHash infohash.T, name string, seedHashMismatches map[infohash.T][]*seedHash, logger log.Logger) { + var nohash []*seedHash + var mismatch []*seedHash + + for _, entry := range seedHashMismatches[torrentHash] { + if !entry.reported { + if entry.hash == nil { + nohash = append(nohash, entry) + } else { + mismatch = append(mismatch, entry) + } + + entry.reported = true + } + } + + if len(nohash) > 0 { + var webseeds string + for _, entry := range nohash { + if len(webseeds) > 0 { + webseeds += ", " + } + + webseeds += strings.TrimSuffix(entry.url.String(), "/") + } + + logger.Warn("No webseed entry for torrent", "name", name, "hash", torrentHash.HexString(), "webseeds", webseeds) + } + + if len(mismatch) > 0 { + var webseeds string + for _, entry := range mismatch { + if len(webseeds) > 0 { + webseeds += ", " } + webseeds += strings.TrimSuffix(entry.url.String(), "/") + "#" + entry.hash.HexString() + } + + logger.Warn("Webseed hash mismatch for torrent", "name", name, "hash", torrentHash.HexString(), "webseeds", webseeds) + } +} + +func (d *Downloader) checkComplete(name string) (bool, int64, *time.Time) { + if info, err := d.torrentInfo(name); err == nil { + if info.Completed != nil && info.Completed.Before(time.Now()) { + if info.Length != nil { + if fi, err := os.Stat(filepath.Join(d.SnapDir(), name)); err == nil { + return fi.Size() == *info.Length && fi.ModTime().Equal(*info.Completed), *info.Length, info.Completed + } + } + } + } + + return false, 0, nil +} + +func (d *Downloader) getWebDownloadInfo(t *torrent.Torrent) (webDownloadInfo, []*seedHash, error) { + d.lock.RLock() + info, ok := d.webDownloadInfo[t.Name()] + d.lock.RUnlock() + + if ok { + return info, nil, nil + } + + // todo this function does not exit on first matched webseed hash, could make unexpected results + infos, seedHashMismatches, err := d.webseeds.getWebDownloadInfo(d.ctx, t) + if err != nil || len(infos) == 0 { + return webDownloadInfo{}, seedHashMismatches, fmt.Errorf("can't find download info: %w", err) + } + return infos[0], seedHashMismatches, nil +} + +func getWebpeerTorrentInfo(ctx context.Context, downloadUrl *url.URL) (*metainfo.MetaInfo, error) { + torrentRequest, err := http.NewRequestWithContext(ctx, http.MethodGet, downloadUrl.String()+".torrent", nil) + + if err != nil { + return nil, err + } + + torrentResponse, err := http.DefaultClient.Do(torrentRequest) + + if err != nil { + return nil, err + } + + defer torrentResponse.Body.Close() + + if torrentResponse.StatusCode != http.StatusOK { + return nil, fmt.Errorf("can't get webpeer torrent unexpected http response: %s", torrentResponse.Status) + } + + return metainfo.Load(torrentResponse.Body) +} + +func (d *Downloader) torrentDownload(t *torrent.Torrent, statusChan chan downloadStatus, sem *semaphore.Weighted) { + + d.lock.Lock() + d.downloading[t.Name()] = struct{}{} + d.lock.Unlock() + + if err := sem.Acquire(d.ctx, 1); err != nil { + d.logger.Warn("Failed to acquire download semaphore", "err", err) + return + } + + d.wg.Add(1) + + go func(t *torrent.Torrent) { + defer d.wg.Done() + defer sem.Release(1) + + t.AllowDataDownload() + + select { + case <-d.ctx.Done(): + return + case <-t.GotInfo(): + } + + t.DownloadAll() + + idleCount := 0 + var lastRead int64 + + for { select { case <-d.ctx.Done(): return + case <-t.Complete.On(): + return case <-time.After(10 * time.Second): + bytesRead := t.Stats().BytesReadData + + if lastRead-bytesRead.Int64() == 0 { + idleCount++ + } else { + lastRead = bytesRead.Int64() + idleCount = 0 + } + + //fallback to webDownloadClient, but only if it's enabled + if d.webDownloadClient != nil && idleCount > 6 { + t.DisallowDataDownload() + return + } } } - }() + }(t) +} + +func (d *Downloader) webDownload(peerUrls []*url.URL, t *torrent.Torrent, i *webDownloadInfo, statusChan chan downloadStatus, sem *semaphore.Weighted) (*RCloneSession, error) { + if d.webDownloadClient == nil { + return nil, fmt.Errorf("webdownload client not enabled") + } + + peerUrl, err := selectDownloadPeer(d.ctx, peerUrls, t) + + if err != nil { + return nil, err + } + + peerUrl = strings.TrimSuffix(peerUrl, "/") + + session, ok := d.webDownloadSessions[peerUrl] + + if !ok { + var err error + session, err = d.webDownloadClient.NewSession(d.ctx, d.SnapDir(), peerUrl, cloudflareHeaders) + + if err != nil { + return nil, err + } + + d.webDownloadSessions[peerUrl] = session + } + + name := t.Name() + mi := t.Metainfo() + infoHash := t.InfoHash() + + var length int64 + + if i != nil { + length = i.length + } else { + length = t.Length() + } + + magnet := mi.Magnet(&infoHash, &metainfo.Info{Name: name}) + spec, err := torrent.TorrentSpecFromMagnetUri(magnet.String()) + + if err != nil { + return session, fmt.Errorf("can't get torrent spec for %s from info: %w", t.Info().Name, err) + } + + spec.ChunkSize = downloadercfg.DefaultNetworkChunkSize + spec.DisallowDataDownload = true + + info, _, ok := snaptype.ParseFileName(d.SnapDir(), name) + + if !ok { + return nil, fmt.Errorf("can't parse filename: %s", name) + } + + d.lock.Lock() + t.Drop() + d.downloading[name] = struct{}{} + d.lock.Unlock() + + d.wg.Add(1) + + if err := sem.Acquire(d.ctx, 1); err != nil { + d.logger.Warn("Failed to acquire download semaphore", "err", err) + return nil, err + } + + go func() { + defer d.wg.Done() + defer sem.Release(1) + + if dir.FileExist(info.Path) { + if err := os.Remove(info.Path); err != nil { + d.logger.Warn("Couldn't remove previous file before download", "file", name, "path", info.Path, "err", err) + } + } + + if d.downloadLimit != nil { + limit := float64(*d.downloadLimit) / float64(d.cfg.DownloadSlots) + + func() { + d.lock.Lock() + defer d.lock.Unlock() + + torrentLimit := d.cfg.ClientConfig.DownloadRateLimiter.Limit() + rcloneLimit := d.webDownloadClient.GetBwLimit() + + d.cfg.ClientConfig.DownloadRateLimiter.SetLimit(torrentLimit - rate.Limit(limit)) + d.webDownloadClient.SetBwLimit(d.ctx, rcloneLimit+rate.Limit(limit)) + }() + + defer func() { + d.lock.Lock() + defer d.lock.Unlock() + + torrentLimit := d.cfg.ClientConfig.DownloadRateLimiter.Limit() + rcloneLimit := d.webDownloadClient.GetBwLimit() + + d.cfg.ClientConfig.DownloadRateLimiter.SetLimit(torrentLimit + rate.Limit(limit)) + d.webDownloadClient.SetBwLimit(d.ctx, rcloneLimit-rate.Limit(limit)) + }() + } + + err := session.Download(d.ctx, name) + + if err != nil { + d.logger.Error("Web download failed", "file", name, "err", err) + } + + localHash, err := fileHashBytes(d.ctx, info, &d.stats, d.lock) + + if err == nil { + if !bytes.Equal(infoHash.Bytes(), localHash) { + err = fmt.Errorf("hash mismatch: expected: 0x%x, got: 0x%x", infoHash.Bytes(), localHash) + + d.logger.Error("Web download failed", "file", name, "url", peerUrl, "err", err) + + if ferr := os.Remove(info.Path); ferr != nil { + d.logger.Warn("Couldn't remove invalid file", "file", name, "path", info.Path, "err", ferr) + } + } + } else { + d.logger.Error("Web download failed", "file", name, "url", peerUrl, "err", err) + } + + statusChan <- downloadStatus{ + name: name, + length: length, + infoHash: infoHash, + spec: spec, + err: err, + } + }() + + return session, nil +} + +func selectDownloadPeer(ctx context.Context, peerUrls []*url.URL, t *torrent.Torrent) (string, error) { + switch len(peerUrls) { + case 0: + return "", fmt.Errorf("no download peers") + + case 1: + downloadUrl := peerUrls[0].JoinPath(t.Name()) + peerInfo, err := getWebpeerTorrentInfo(ctx, downloadUrl) + + if err == nil && bytes.Equal(peerInfo.HashInfoBytes().Bytes(), t.InfoHash().Bytes()) { + return peerUrls[0].String(), nil + } + + default: + peerIndex := rand.Intn(len(peerUrls)) + peerUrl := peerUrls[peerIndex] + downloadUrl := peerUrl.JoinPath(t.Name()) + peerInfo, err := getWebpeerTorrentInfo(ctx, downloadUrl) + + if err == nil && bytes.Equal(peerInfo.HashInfoBytes().Bytes(), t.InfoHash().Bytes()) { + return peerUrl.String(), nil + } + + for i := range peerUrls { + if i == peerIndex { + continue + } + peerInfo, err := getWebpeerTorrentInfo(ctx, downloadUrl) + + if err == nil && bytes.Equal(peerInfo.HashInfoBytes().Bytes(), t.InfoHash().Bytes()) { + return peerUrl.String(), nil + } + } + } + + return "", fmt.Errorf("can't find download peer") +} + +func availableTorrents(ctx context.Context, pending []*torrent.Torrent, slots int) []*torrent.Torrent { + if slots == 0 { + select { + case <-ctx.Done(): + return nil + case <-time.After(10 * time.Second): + return nil + } + } + + slices.SortFunc(pending, func(i, j *torrent.Torrent) int { + in, _, _ := snaptype.ParseFileName("", i.Name()) + jn, _, _ := snaptype.ParseFileName("", j.Name()) + return in.CompareTo(jn) + }) + + var available []*torrent.Torrent + + for len(pending) > 0 && pending[0].Info() != nil { + available = append(available, pending[0]) + + if len(available) == slots { + return available + } - logEvery := time.NewTicker(20 * time.Second) - defer logEvery.Stop() + pending = pending[1:] + } - statInterval := 20 * time.Second - statEvery := time.NewTicker(statInterval) - defer statEvery.Stop() + if len(pending) == 0 { + return available + } - var m runtime.MemStats - justCompleted := true - for { - select { - case <-d.ctx.Done(): - return d.ctx.Err() - case <-statEvery.C: - d.ReCalcStats(statInterval) + cases := make([]reflect.SelectCase, 0, len(pending)+2) - case <-logEvery.C: - if silent { - continue - } + for _, t := range pending { + cases = append(cases, reflect.SelectCase{ + Dir: reflect.SelectRecv, + Chan: reflect.ValueOf(t.GotInfo()), + }) + } - stats := d.Stats() + if len(cases) == 0 { + return nil + } - dbg.ReadMemStats(&m) - if stats.Completed { - if justCompleted { - justCompleted = false - // force fsync of db. to not loose results of downloading on power-off - _ = d.db.Update(d.ctx, func(tx kv.RwTx) error { return nil }) - } + cases = append(cases, reflect.SelectCase{ + Dir: reflect.SelectRecv, + Chan: reflect.ValueOf(ctx.Done()), + }, + reflect.SelectCase{ + Dir: reflect.SelectRecv, + Chan: reflect.ValueOf(time.After(10 * time.Second)), + }) - d.logger.Info("[snapshots] Seeding", - "up", common.ByteCount(stats.UploadRate)+"/s", - "peers", stats.PeersUnique, - "conns", stats.ConnectionsTotal, - "files", stats.FilesTotal, - "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), - ) - continue - } + for { + selected, _, _ := reflect.Select(cases) - d.logger.Info("[snapshots] Downloading", - "progress", fmt.Sprintf("%.2f%% %s/%s", stats.Progress, common.ByteCount(stats.BytesCompleted), common.ByteCount(stats.BytesTotal)), - "download", common.ByteCount(stats.DownloadRate)+"/s", - "upload", common.ByteCount(stats.UploadRate)+"/s", - "peers", stats.PeersUnique, - "conns", stats.ConnectionsTotal, - "files", stats.FilesTotal, - "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), - ) + switch selected { + case len(cases) - 2: + return nil + case len(cases) - 1: + return available + default: + available = append(available, pending[selected]) - if stats.PeersUnique == 0 { - ips := d.TorrentClient().BadPeerIPs() - if len(ips) > 0 { - d.logger.Info("[snapshots] Stats", "banned", ips) - } + if len(available) == slots { + return available } + + pending = append(pending[:selected], pending[selected+1:]...) + cases = append(cases[:selected], cases[selected+1:]...) } } } func (d *Downloader) SnapDir() string { return d.cfg.Dirs.Snap } +func (d *Downloader) torrentInfo(name string) (*torrentInfo, error) { + var info torrentInfo + + err := d.db.View(d.ctx, func(tx kv.Tx) (err error) { + infoBytes, err := tx.GetOne(kv.BittorrentInfo, []byte(name)) + + if err != nil { + return err + } + + if err = json.Unmarshal(infoBytes, &info); err != nil { + return err + } + + return nil + }) + + if err != nil { + return nil, err + } + + return &info, nil +} + func (d *Downloader) ReCalcStats(interval time.Duration) { - d.statsLock.Lock() - defer d.statsLock.Unlock() - //Call this methods outside of `statsLock` critical section, because they have own locks with contention + d.lock.Lock() + defer d.lock.Unlock() + //Call this methods outside of `lock` critical section, because they have own locks with contention torrents := d.torrentClient.Torrents() connStats := d.torrentClient.ConnStats() peers := make(map[torrent.PeerID]struct{}, 16) @@ -354,62 +1801,212 @@ func (d *Downloader) ReCalcStats(interval time.Duration) { stats.BytesDownload = uint64(connStats.BytesReadUsefulIntendedData.Int64()) stats.BytesUpload = uint64(connStats.BytesWrittenData.Int64()) - stats.BytesTotal, stats.BytesCompleted, stats.ConnectionsTotal, stats.MetadataReady = atomic.LoadUint64(&stats.DroppedTotal), atomic.LoadUint64(&stats.DroppedCompleted), 0, 0 + lastMetadataReady := stats.MetadataReady + + stats.BytesTotal, stats.BytesCompleted, stats.ConnectionsTotal, stats.MetadataReady = + atomic.LoadUint64(&stats.DroppedTotal), atomic.LoadUint64(&stats.DroppedCompleted), 0, 0 var zeroProgress []string var noMetadata []string + isDiagEnabled := diagnostics.TypeOf(diagnostics.SnapshoFilesList{}).Enabled() + if isDiagEnabled { + filesList := make([]string, 0, len(torrents)) + for _, t := range torrents { + filesList = append(filesList, t.Name()) + } + diagnostics.Send(diagnostics.SnapshoFilesList{Files: filesList}) + } + + downloading := map[string]float32{} + + for file := range d.downloading { + downloading[file] = 0 + } + + var dbInfo int + var tComplete int + var torrentInfo int + for _, t := range torrents { select { case <-t.GotInfo(): - stats.MetadataReady++ + default: // if some torrents have no metadata, we are for-sure uncomplete + stats.Completed = false + noMetadata = append(noMetadata, t.Name()) + continue + } + + torrentName := t.Name() + torrentComplete := t.Complete.Bool() + torrentInfo++ + stats.MetadataReady++ + + // call methods once - to reduce internal mutex contention + peersOfThisFile := t.PeerConns() + weebseedPeersOfThisFile := t.WebseedPeerConns() + + tLen := t.Length() + + var bytesCompleted int64 + + if torrentComplete { + tComplete++ + bytesCompleted = t.Length() + delete(downloading, torrentName) + } else { + bytesCompleted = t.BytesCompleted() + } + progress := float32(float64(100) * (float64(bytesCompleted) / float64(tLen))) + + if _, ok := downloading[torrentName]; ok { + + if progress != stats.downloadProgress[torrentName].progress { + stats.downloadProgress[torrentName] = downloadProgress{time: time.Now(), progress: progress} + } + } else { + // we only care about progress of downloading files + delete(stats.downloadProgress, torrentName) + } - // call methods once - to reduce internal mutex contention - peersOfThisFile := t.PeerConns() - weebseedPeersOfThisFile := t.WebseedPeerConns() - bytesCompleted := t.BytesCompleted() - tLen := t.Length() - torrentName := t.Name() + stats.BytesCompleted += uint64(bytesCompleted) + stats.BytesTotal += uint64(tLen) - for _, peer := range peersOfThisFile { - stats.ConnectionsTotal++ - peers[peer.PeerID] = struct{}{} + for _, peer := range peersOfThisFile { + stats.ConnectionsTotal++ + peers[peer.PeerID] = struct{}{} + } + + webseedRates, webseeds := getWebseedsRatesForlogs(weebseedPeersOfThisFile, torrentName, t.Complete.Bool()) + rates, peers := getPeersRatesForlogs(peersOfThisFile, torrentName) + + if !torrentComplete { + if info, err := d.torrentInfo(torrentName); err == nil { + if info != nil { + dbInfo++ + } + } else if _, ok := d.webDownloadInfo[torrentName]; ok { + stats.MetadataReady++ + } else { + noMetadata = append(noMetadata, torrentName) } - stats.BytesCompleted += uint64(bytesCompleted) - stats.BytesTotal += uint64(tLen) - progress := float32(float64(100) * (float64(bytesCompleted) / float64(tLen))) if progress == 0 { zeroProgress = append(zeroProgress, torrentName) } + } + + // more detailed statistic: download rate of each peer (for each file) + if !torrentComplete && progress != 0 { + if _, ok := downloading[torrentName]; ok { + downloading[torrentName] = progress + } + + d.logger.Log(d.verbosity, "[snapshots] progress", "file", torrentName, "progress", fmt.Sprintf("%.2f%%", progress), "peers", len(peersOfThisFile), "webseeds", len(weebseedPeersOfThisFile)) + d.logger.Log(d.verbosity, "[snapshots] webseed peers", webseedRates...) + d.logger.Log(d.verbosity, "[snapshots] bittorrent peers", rates...) + } + + diagnostics.Send(diagnostics.SegmentDownloadStatistics{ + Name: torrentName, + TotalBytes: uint64(tLen), + DownloadedBytes: uint64(bytesCompleted), + Webseeds: webseeds, + Peers: peers, + }) + + stats.Completed = stats.Completed && torrentComplete + } + + var webTransfers int32 - webseedRates, websRates := getWebseedsRatesForlogs(weebseedPeersOfThisFile, torrentName) - rates, peersRates := getPeersRatesForlogs(peersOfThisFile, torrentName) - // more detailed statistic: download rate of each peer (for each file) - if !t.Complete.Bool() && progress != 0 { - d.logger.Log(d.verbosity, "[snapshots] progress", "file", torrentName, "progress", fmt.Sprintf("%.2f%%", progress), "peers", len(peersOfThisFile), "webseeds", len(weebseedPeersOfThisFile)) - d.logger.Log(d.verbosity, "[snapshots] webseed peers", webseedRates...) - d.logger.Log(d.verbosity, "[snapshots] bittorrent peers", rates...) + if d.webDownloadClient != nil { + webStats, _ := d.webDownloadClient.Stats(d.ctx) + + if webStats != nil { + if len(webStats.Transferring) != 0 && stats.Completed { + stats.Completed = false } - isDiagEnabled := diagnostics.TypeOf(diagnostics.SegmentDownloadStatistics{}).Enabled() - if isDiagEnabled { + for _, transfer := range webStats.Transferring { + stats.MetadataReady++ + webTransfers++ + + bytesCompleted := transfer.Bytes + tLen := transfer.Size + transferName := transfer.Name + + delete(downloading, transferName) + + if bytesCompleted > tLen { + bytesCompleted = tLen + } + + stats.BytesCompleted += bytesCompleted + stats.BytesTotal += tLen + + stats.BytesDownload += bytesCompleted + + if transfer.Percentage == 0 { + zeroProgress = append(zeroProgress, transferName) + } + + var seeds []diagnostics.SegmentPeer + var webseedRates []interface{} + if peerUrl, err := url.Parse(transfer.Group); err == nil { + rate := uint64(transfer.SpeedAvg) + seeds = []diagnostics.SegmentPeer{ + { + Url: peerUrl.Host, + DownloadRate: rate, + }} + + if shortUrl, err := url.JoinPath(peerUrl.Host, peerUrl.Path); err == nil { + webseedRates = []interface{}{strings.TrimSuffix(shortUrl, "/"), fmt.Sprintf("%s/s", common.ByteCount(rate))} + } + } + + // more detailed statistic: download rate of each peer (for each file) + if transfer.Percentage != 0 { + d.logger.Log(d.verbosity, "[snapshots] progress", "file", transferName, "progress", fmt.Sprintf("%.2f%%", float32(transfer.Percentage)), "webseeds", 1) + d.logger.Log(d.verbosity, "[snapshots] web peers", webseedRates...) + } + diagnostics.Send(diagnostics.SegmentDownloadStatistics{ - Name: torrentName, - TotalBytes: uint64(tLen), - DownloadedBytes: uint64(bytesCompleted), - WebseedsCount: len(weebseedPeersOfThisFile), - PeersCount: len(peersOfThisFile), - WebseedsRate: websRates, - PeersRate: peersRates, + Name: transferName, + TotalBytes: tLen, + DownloadedBytes: bytesCompleted, + Webseeds: seeds, }) } + } + } - default: - noMetadata = append(noMetadata, t.Name()) + if len(downloading) > 0 { + if d.webDownloadClient != nil { + webTransfers += int32(len(downloading)) } - stats.Completed = stats.Completed && t.Complete.Bool() + stats.Completed = false + } + + if !stats.Completed { + d.logger.Debug("[snapshots] info", + "len", len(torrents), + "webTransfers", webTransfers, + "torrent", torrentInfo, + "db", dbInfo, + "t-complete", tComplete, + "webseed-trips", stats.WebseedTripCount.Load(), + "webseed-discards", stats.WebseedDiscardCount.Load(), + "webseed-fails", stats.WebseedServerFails.Load(), + "webseed-bytes", common.ByteCount(uint64(stats.WebseedBytesDownload.Load())), + "localHashes", stats.LocalFileHashes, "localHashTime", stats.LocalFileHashTime) + } + + if lastMetadataReady != stats.MetadataReady { + now := time.Now() + stats.LastMetadataUpdate = &now } if len(noMetadata) > 0 { @@ -417,75 +2014,181 @@ func (d *Downloader) ReCalcStats(interval time.Duration) { if len(noMetadata) > 5 { noMetadata = append(noMetadata[:5], "...") } - d.logger.Log(d.verbosity, "[snapshots] no metadata yet", "files", amount, "list", strings.Join(noMetadata, ",")) + d.logger.Info("[snapshots] no metadata yet", "files", amount, "list", strings.Join(noMetadata, ",")) } + + var noDownloadProgress []string + if len(zeroProgress) > 0 { amount := len(zeroProgress) + + for _, file := range zeroProgress { + if _, ok := downloading[file]; ok { + noDownloadProgress = append(noDownloadProgress, file) + } + } + if len(zeroProgress) > 5 { zeroProgress = append(zeroProgress[:5], "...") } - d.logger.Log(d.verbosity, "[snapshots] no progress yet", "files", amount, "list", strings.Join(zeroProgress, ",")) + + d.logger.Info("[snapshots] no progress yet", "files", amount, "list", strings.Join(zeroProgress, ",")) + } + + if len(downloading) > 0 { + amount := len(downloading) + + files := make([]string, 0, len(downloading)) + for file, progress := range downloading { + files = append(files, fmt.Sprintf("%s (%.0f%%)", file, progress)) + + if dp, ok := stats.downloadProgress[file]; ok { + if time.Since(dp.time) > 30*time.Minute { + noDownloadProgress = append(noDownloadProgress, file) + } + } + } + sort.Strings(files) + + d.logger.Log(d.verbosity, "[snapshots] downloading", "files", amount, "list", strings.Join(files, ", ")) + } + + if time.Since(stats.lastTorrentStatus) > 5*time.Minute { + stats.lastTorrentStatus = time.Now() + + if len(noDownloadProgress) > 0 { + progressStatus := getProgressStatus(d.torrentClient, noDownloadProgress) + for file, status := range progressStatus { + d.logger.Debug(fmt.Sprintf("[snapshots] torrent status: %s\n %s", file, + string(bytes.TrimRight(bytes.ReplaceAll(status, []byte("\n"), []byte("\n ")), "\n ")))) + } + } + } + + if stats.BytesDownload > prevStats.BytesDownload { + stats.DownloadRate = (stats.BytesDownload - prevStats.BytesDownload) / uint64(interval.Seconds()) + } else { + stats.DownloadRate = prevStats.DownloadRate / 2 } - stats.DownloadRate = (stats.BytesDownload - prevStats.BytesDownload) / uint64(interval.Seconds()) - stats.UploadRate = (stats.BytesUpload - prevStats.BytesUpload) / uint64(interval.Seconds()) + if stats.BytesUpload > prevStats.BytesUpload { + stats.UploadRate = (stats.BytesUpload - prevStats.BytesUpload) / uint64(interval.Seconds()) + } else { + stats.UploadRate = prevStats.UploadRate / 2 + } if stats.BytesTotal == 0 { stats.Progress = 0 } else { stats.Progress = float32(float64(100) * (float64(stats.BytesCompleted) / float64(stats.BytesTotal))) if int(stats.Progress) == 100 && !stats.Completed { - stats.Progress = 99.99 + stats.Progress = 99.9 } } + stats.PeersUnique = int32(len(peers)) - stats.FilesTotal = int32(len(torrents)) + stats.FilesTotal = int32(len(torrents)) + webTransfers d.stats = stats } -func getWebseedsRatesForlogs(weebseedPeersOfThisFile []*torrent.Peer, fName string) ([]interface{}, uint64) { - totalRate := uint64(0) - averageRate := uint64(0) +type filterWriter struct { + files map[string][]byte + remainder []byte + file string +} + +func (f *filterWriter) Write(p []byte) (n int, err error) { + written := len(p) + + p = append(f.remainder, p...) + + for len(p) > 0 { + scanned, line, _ := bufio.ScanLines(p, false) + + if scanned > 0 { + if len(f.file) > 0 { + if len(line) == 0 { + f.file = "" + } else { + line = append(line, '\n') + f.files[f.file] = append(f.files[f.file], line...) + } + } else { + if _, ok := f.files[string(line)]; ok { + f.file = string(line) + } + } + + p = p[scanned:] + } else { + f.remainder = p + p = nil + } + } + return written, nil +} + +func getProgressStatus(torrentClient *torrent.Client, noDownloadProgress []string) map[string][]byte { + writer := filterWriter{ + files: map[string][]byte{}, + } + + for _, file := range noDownloadProgress { + writer.files[file] = nil + } + + torrentClient.WriteStatus(&writer) + + return writer.files +} + +func getWebseedsRatesForlogs(weebseedPeersOfThisFile []*torrent.Peer, fName string, finished bool) ([]interface{}, []diagnostics.SegmentPeer) { + seeds := make([]diagnostics.SegmentPeer, 0, len(weebseedPeersOfThisFile)) webseedRates := make([]interface{}, 0, len(weebseedPeersOfThisFile)*2) webseedRates = append(webseedRates, "file", fName) for _, peer := range weebseedPeersOfThisFile { - urlS := strings.Trim(strings.TrimPrefix(peer.String(), "webseed peer for "), "\"") - if urlObj, err := url.Parse(urlS); err == nil { - if shortUrl, err := url.JoinPath(urlObj.Host, urlObj.Path); err == nil { + if peerUrl, err := webPeerUrl(peer); err == nil { + if shortUrl, err := url.JoinPath(peerUrl.Host, peerUrl.Path); err == nil { rate := uint64(peer.DownloadRate()) - totalRate += rate - webseedRates = append(webseedRates, shortUrl, fmt.Sprintf("%s/s", common.ByteCount(rate))) + if !finished { + seed := diagnostics.SegmentPeer{ + Url: peerUrl.Host, + DownloadRate: rate, + } + seeds = append(seeds, seed) + } + webseedRates = append(webseedRates, strings.TrimSuffix(shortUrl, "/"), fmt.Sprintf("%s/s", common.ByteCount(rate))) } } } - lenght := uint64(len(weebseedPeersOfThisFile)) - if lenght > 0 { - averageRate = totalRate / lenght - } + return webseedRates, seeds +} - return webseedRates, averageRate +func webPeerUrl(peer *torrent.Peer) (*url.URL, error) { + root, _ := path.Split(strings.Trim(strings.TrimPrefix(peer.String(), "webseed peer for "), "\"")) + return url.Parse(root) } -func getPeersRatesForlogs(peersOfThisFile []*torrent.PeerConn, fName string) ([]interface{}, uint64) { - totalRate := uint64(0) - averageRate := uint64(0) +func getPeersRatesForlogs(peersOfThisFile []*torrent.PeerConn, fName string) ([]interface{}, []diagnostics.SegmentPeer) { + peers := make([]diagnostics.SegmentPeer, 0, len(peersOfThisFile)) rates := make([]interface{}, 0, len(peersOfThisFile)*2) rates = append(rates, "file", fName) for _, peer := range peersOfThisFile { dr := uint64(peer.DownloadRate()) - rates = append(rates, peer.PeerClientName.Load(), fmt.Sprintf("%s/s", common.ByteCount(dr))) - totalRate += dr - } + url := fmt.Sprintf("%v", peer.PeerClientName.Load()) - lenght := uint64(len(peersOfThisFile)) - if lenght > 0 { - averageRate = totalRate / uint64(len(peersOfThisFile)) + segPeer := diagnostics.SegmentPeer{ + Url: url, + DownloadRate: dr, + } + peers = append(peers, segPeer) + rates = append(rates, peer.PeerClientName.Load(), fmt.Sprintf("%s/s", common.ByteCount(dr))) } - return rates, averageRate + return rates, peers } func (d *Downloader) VerifyData(ctx context.Context, whiteList []string, failFast bool) error { @@ -494,9 +2197,15 @@ func (d *Downloader) VerifyData(ctx context.Context, whiteList []string, failFas toVerify := make([]*torrent.Torrent, 0, len(allTorrents)) for _, t := range allTorrents { select { - case <-t.GotInfo(): case <-ctx.Done(): return ctx.Err() + case <-t.GotInfo(): //files to verify already have .torrent on disk. means must have `Info()` already + default: // skip other files + continue + } + + if !dir.FileExist(filepath.Join(d.SnapDir(), t.Name())) { + continue } if len(whiteList) > 0 { @@ -514,7 +2223,7 @@ func (d *Downloader) VerifyData(ctx context.Context, whiteList []string, failFas d.logger.Info("[snapshots] Verify start") defer d.logger.Info("[snapshots] Verify done", "files", len(toVerify), "whiteList", whiteList) - completedPieces := &atomic.Uint64{} + completedPieces, completedFiles := &atomic.Uint64{}, &atomic.Uint64{} { logEvery := time.NewTicker(20 * time.Second) @@ -527,7 +2236,11 @@ func (d *Downloader) VerifyData(ctx context.Context, whiteList []string, failFas case <-ctx.Done(): return case <-logEvery.C: - d.logger.Info("[snapshots] Verify", "progress", fmt.Sprintf("%.2f%%", 100*float64(completedPieces.Load())/float64(total))) + d.logger.Info("[snapshots] Verify", + "progress", fmt.Sprintf("%.2f%%", 100*float64(completedPieces.Load())/float64(total)), + "files", fmt.Sprintf("%d/%d", completedFiles.Load(), len(toVerify)), + "sz_gb", downloadercfg.DefaultPieceSize*completedPieces.Load()/1024/1024/1024, + ) } } }() @@ -540,45 +2253,56 @@ func (d *Downloader) VerifyData(ctx context.Context, whiteList []string, failFas for _, t := range toVerify { t := t g.Go(func() error { + defer completedFiles.Add(1) if failFast { return VerifyFileFailFast(ctx, t, d.SnapDir(), completedPieces) } - return ScheduleVerifyFile(ctx, t, completedPieces) + + err := ScheduleVerifyFile(ctx, t, completedPieces) + + if err != nil || !t.Complete.Bool() { + if err := d.db.Update(ctx, torrentInfoReset(t.Name(), t.InfoHash().Bytes(), 0)); err != nil { + return fmt.Errorf("verify data: %s: reset failed: %w", t.Name(), err) + } + } + + return err }) } if err := g.Wait(); err != nil { return err } - // force fsync of db. to not loose results of validation on power-off - return d.db.Update(context.Background(), func(tx kv.RwTx) error { return nil }) + return nil } // AddNewSeedableFile decides what we do depending on wether we have the .seg file or the .torrent file // have .torrent no .seg => get .seg file from .torrent // have .seg no .torrent => get .torrent from .seg func (d *Downloader) AddNewSeedableFile(ctx context.Context, name string) error { - ff, ok := snaptype.ParseFileName("", name) + ff, isStateFile, ok := snaptype.ParseFileName("", name) if ok { - if !ff.Seedable() { - return nil - } - } else { - if !e3seedable(name) { - return nil + if isStateFile { + if !snaptype.E3Seedable(name) { + return nil + } + } else { + if !d.cfg.SnapshotConfig.Seedable(ff) { + return nil + } } } // if we don't have the torrent file we build it if we have the .seg file - err := BuildTorrentIfNeed(ctx, name, d.SnapDir(), d.torrentFiles) + _, err := BuildTorrentIfNeed(ctx, name, d.SnapDir(), d.torrentFS) if err != nil { return fmt.Errorf("AddNewSeedableFile: %w", err) } - ts, err := d.torrentFiles.LoadByName(name) + ts, err := d.torrentFS.LoadByName(name) if err != nil { return fmt.Errorf("AddNewSeedableFile: %w", err) } - _, _, err = addTorrentFile(ctx, ts, d.torrentClient, d.webseeds) + _, _, err = addTorrentFile(ctx, ts, d.torrentClient, d.db, d.webseeds) if err != nil { return fmt.Errorf("addTorrentFile: %w", err) } @@ -587,12 +2311,10 @@ func (d *Downloader) AddNewSeedableFile(ctx context.Context, name string) error func (d *Downloader) alreadyHaveThisName(name string) bool { for _, t := range d.torrentClient.Torrents() { - select { - case <-t.GotInfo(): + if t.Info() != nil { if t.Name() == name { return true } - default: } } return false @@ -602,20 +2324,27 @@ func (d *Downloader) AddMagnetLink(ctx context.Context, infoHash metainfo.Hash, // Paranoic Mode on: if same file changed infoHash - skip it // Example: // - Erigon generated file X with hash H1. User upgraded Erigon. New version has preverified file X with hash H2. Must ignore H2 (don't send to Downloader) - if d.alreadyHaveThisName(name) { + if d.alreadyHaveThisName(name) || !IsSnapNameAllowed(name) { return nil } - if d.newDownloadsAreProhibited() { + isProhibited, err := d.torrentFS.NewDownloadsAreProhibited(name) + if err != nil { + return err + } + + if isProhibited && !d.torrentFS.Exists(name) { return nil } mi := &metainfo.MetaInfo{AnnounceList: Trackers} magnet := mi.Magnet(&infoHash, &metainfo.Info{Name: name}) spec, err := torrent.TorrentSpecFromMagnetUri(magnet.String()) + if err != nil { return err } - t, ok, err := addTorrentFile(ctx, spec, d.torrentClient, d.webseeds) + + t, ok, err := addTorrentFile(ctx, spec, d.torrentClient, d.db, d.webseeds) if err != nil { return err } @@ -629,13 +2358,34 @@ func (d *Downloader) AddMagnetLink(ctx context.Context, infoHash metainfo.Hash, case <-ctx.Done(): return case <-t.GotInfo(): + case <-time.After(30 * time.Second): //fallback to r2 + // TOOD: handle errors + // TOOD: add `d.webseeds.Complete` chan - to prevent race - Discover is also async + // TOOD: maybe run it in goroutine and return channel - to select with p2p + + ts, ok, err := d.webseeds.DownloadAndSaveTorrentFile(ctx, name) + if ok && err == nil { + _, _, err = addTorrentFile(ctx, ts, d.torrentClient, d.db, d.webseeds) + if err != nil { + return + } + return + } + + // wait for p2p + select { + case <-ctx.Done(): + return + case <-t.GotInfo(): + } } mi := t.Metainfo() - if err := CreateTorrentFileIfNotExists(d.SnapDir(), t.Info(), &mi, d.torrentFiles); err != nil { + if _, err := d.torrentFS.CreateWithMetaInfo(t.Info(), &mi); err != nil { d.logger.Warn("[snapshots] create torrent file", "err", err) return } + urls, ok := d.webseeds.ByFileName(t.Name()) if ok { t.AddWebSeeds(urls) @@ -645,61 +2395,122 @@ func (d *Downloader) AddMagnetLink(ctx context.Context, infoHash metainfo.Hash, return nil } -func seedableFiles(dirs datadir.Dirs) ([]string, error) { - files, err := seedableSegmentFiles(dirs.Snap) +func SeedableFiles(dirs datadir.Dirs, chainName string) ([]string, error) { + files, err := seedableSegmentFiles(dirs.Snap, chainName) if err != nil { return nil, fmt.Errorf("seedableSegmentFiles: %w", err) } - l1, err := seedableSnapshotsBySubDir(dirs.Snap, "idx") + l1, err := seedableStateFilesBySubDir(dirs.Snap, "idx") if err != nil { return nil, err } - l2, err := seedableSnapshotsBySubDir(dirs.Snap, "history") + l2, err := seedableStateFilesBySubDir(dirs.Snap, "history") if err != nil { return nil, err } - l3, err := seedableSnapshotsBySubDir(dirs.Snap, "domain") + l3, err := seedableStateFilesBySubDir(dirs.Snap, "domain") if err != nil { return nil, err } files = append(append(append(files, l1...), l2...), l3...) return files, nil } + +const ParallelVerifyFiles = 4 // keep it small, to allow big `PieceHashersPerTorrent`. More `PieceHashersPerTorrent` - faster handling of big files. + func (d *Downloader) addTorrentFilesFromDisk(quiet bool) error { logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() - files, err := AllTorrentSpecs(d.cfg.Dirs, d.torrentFiles) + eg, ctx := errgroup.WithContext(d.ctx) + eg.SetLimit(ParallelVerifyFiles) + + files, err := AllTorrentSpecs(d.cfg.Dirs, d.torrentFS) if err != nil { return err } + + // reduce mutex contention inside torrentClient - by enabling in/out peers connection after addig all files + for _, ts := range files { + ts.Trackers = nil + ts.DisallowDataDownload = true + } + defer func() { + tl := d.torrentClient.Torrents() + for _, t := range tl { + t.AllowDataUpload() + t.AddTrackers(Trackers) + } + }() + for i, ts := range files { - _, _, err := addTorrentFile(d.ctx, ts, d.torrentClient, d.webseeds) - if err != nil { - return err + d.lock.RLock() + _, downloading := d.downloading[ts.DisplayName] + d.lock.RUnlock() + + if downloading { + continue } - select { - case <-logEvery.C: - if !quiet { - log.Info("[snapshots] Adding .torrent files", "progress", fmt.Sprintf("%d/%d", i, len(files))) + + // this check is performed here becuase t.MergeSpec in addTorrentFile will do a file + // update in place when it opens its MemMap. This is non destructive for the data + // but casues an update to the file which changes its size to the torrent length which + // invalidated the file length check + if info, err := d.torrentInfo(ts.DisplayName); err == nil { + if info.Completed != nil { + fi, serr := os.Stat(filepath.Join(d.SnapDir(), info.Name)) + if serr != nil || fi.Size() != *info.Length || !fi.ModTime().Equal(*info.Completed) { + if err := d.db.Update(d.ctx, torrentInfoReset(info.Name, info.Hash, *info.Length)); err != nil { + if serr != nil { + log.Error("[snapshots] Failed to reset db entry after stat error", "file", info.Name, "err", err, "stat-err", serr) + } else { + log.Error("[snapshots] Failed to reset db entry after stat mismatch", "file", info.Name, "err", err) + } + } + } + } + } + + if whitelisted, ok := d.webseeds.torrentsWhitelist.Get(ts.DisplayName); ok { + if ts.InfoHash.HexString() != whitelisted.Hash { + continue } - default: } + + ts := ts + i := i + eg.Go(func() error { + _, _, err := addTorrentFile(ctx, ts, d.torrentClient, d.db, d.webseeds) + if err != nil { + return err + } + select { + case <-logEvery.C: + if !quiet { + log.Info("[snapshots] Adding .torrent files", "progress", fmt.Sprintf("%d/%d", i, len(files))) + } + default: + } + return nil + }) } - return nil + return eg.Wait() } -func (d *Downloader) BuildTorrentFilesIfNeed(ctx context.Context) error { - return BuildTorrentFilesIfNeed(ctx, d.cfg.Dirs, d.torrentFiles) +func (d *Downloader) BuildTorrentFilesIfNeed(ctx context.Context, chain string, ignore snapcfg.Preverified) error { + _, err := BuildTorrentFilesIfNeed(ctx, d.cfg.Dirs, d.torrentFS, chain, ignore) + return err } func (d *Downloader) Stats() AggStats { - d.statsLock.RLock() - defer d.statsLock.RUnlock() + d.lock.RLock() + defer d.lock.RUnlock() return d.stats } func (d *Downloader) Close() { + d.logger.Debug("[snapshots] stopping downloader") d.stopMainLoop() d.wg.Wait() + d.logger.Debug("[snapshots] closing torrents") d.torrentClient.Close() if err := d.folder.Close(); err != nil { d.logger.Warn("[snapshots] folder.close", "err", err) @@ -707,7 +2518,9 @@ func (d *Downloader) Close() { if err := d.pieceCompletionDB.Close(); err != nil { d.logger.Warn("[snapshots] pieceCompletionDB.close", "err", err) } + d.logger.Debug("[snapshots] closing db") d.db.Close() + d.logger.Debug("[snapshots] downloader stopped") } func (d *Downloader) PeerID() []byte { @@ -734,23 +2547,45 @@ func openClient(ctx context.Context, dbDir, snapDir string, cfg *torrent.ClientC WithTableCfg(func(defaultBuckets kv.TableCfg) kv.TableCfg { return kv.DownloaderTablesCfg }). GrowthStep(16 * datasize.MB). MapSize(16 * datasize.GB). - PageSize(uint64(8 * datasize.KB)). + PageSize(uint64(4 * datasize.KB)). + //WriteMap(). + //LifoReclaim(). + RoTxsLimiter(semaphore.NewWeighted(9_000)). Path(dbDir). Open(ctx) if err != nil { return nil, nil, nil, nil, fmt.Errorf("torrentcfg.openClient: %w", err) } - c, err = NewMdbxPieceCompletion(db) + //c, err = NewMdbxPieceCompletion(db) + c, err = NewMdbxPieceCompletionBatch(db) if err != nil { return nil, nil, nil, nil, fmt.Errorf("torrentcfg.NewMdbxPieceCompletion: %w", err) } + + //Reasons why using MMAP instead of files-API: + // - i see "10K threads exchaused" error earlier (on `--torrent.download.slots=500` and `pd-ssd`) + // - "sig-bus" at disk-full - may happen anyway, because DB is mmap + // - MMAP - means less GC pressure, more zero-copy + // - MMAP files are pre-allocated - which is not cool, but: 1. we can live with it 2. maybe can just resize MMAP in future + // See also: https://github.com/ledgerwatch/erigon/pull/10074 m = storage.NewMMapWithCompletion(snapDir, c) + //m = storage.NewFileOpts(storage.NewFileClientOpts{ + // ClientBaseDir: snapDir, + // PieceCompletion: c, + //}) cfg.DefaultStorage = m + dnsResolver := &downloadercfg.DnsCacheResolver{RefreshTimeout: 24 * time.Hour} + cfg.TrackerDialContext = dnsResolver.DialContext + torrentClient, err = torrent.NewClient(cfg) if err != nil { return nil, nil, nil, nil, fmt.Errorf("torrent.NewClient: %w", err) } + go func() { + dnsResolver.Run(ctx) + }() + return db, c, m, torrentClient, nil } diff --git a/erigon-lib/downloader/downloader_grpc_server.go b/erigon-lib/downloader/downloader_grpc_server.go index 33410793475..4e0aa0edd34 100644 --- a/erigon-lib/downloader/downloader_grpc_server.go +++ b/erigon-lib/downloader/downloader_grpc_server.go @@ -45,11 +45,8 @@ type GrpcServer struct { d *Downloader } -func (s *GrpcServer) ProhibitNewDownloads(context.Context, *proto_downloader.ProhibitNewDownloadsRequest) (*emptypb.Empty, error) { - if err := s.d.prohibitNewDownloads(); err != nil { - return nil, err - } - return nil, nil +func (s *GrpcServer) ProhibitNewDownloads(ctx context.Context, req *proto_downloader.ProhibitNewDownloadsRequest) (*emptypb.Empty, error) { + return &emptypb.Empty{}, s.d.torrentFS.ProhibitNewDownloads(req.Type) } // Erigon "download once" - means restart/upgrade/downgrade will not download files (and will be fast) @@ -110,7 +107,7 @@ func (s *GrpcServer) Delete(ctx context.Context, request *proto_downloader.Delet fPath := filepath.Join(s.d.SnapDir(), name) _ = os.Remove(fPath) - s.d.torrentFiles.Delete(name) + s.d.torrentFS.Delete(name) } return &emptypb.Empty{}, nil } diff --git a/erigon-lib/downloader/downloader_test.go b/erigon-lib/downloader/downloader_test.go index 5fd4153a9e1..6a908374809 100644 --- a/erigon-lib/downloader/downloader_test.go +++ b/erigon-lib/downloader/downloader_test.go @@ -16,9 +16,9 @@ import ( func TestChangeInfoHashOfSameFile(t *testing.T) { require := require.New(t) dirs := datadir.New(t.TempDir()) - cfg, err := downloadercfg2.New(dirs, "", lg.Info, 0, 0, 0, 0, 0, nil, nil, "testnet") + cfg, err := downloadercfg2.New(dirs, "", lg.Info, 0, 0, 0, 0, 0, nil, nil, "testnet", false) require.NoError(err) - d, err := New(context.Background(), cfg, dirs, log.New(), log.LvlInfo, true) + d, err := New(context.Background(), cfg, log.New(), log.LvlInfo, true) require.NoError(err) defer d.Close() err = d.AddMagnetLink(d.ctx, snaptype.Hex2InfoHash("aa"), "a.seg") @@ -48,20 +48,20 @@ func TestNoEscape(t *testing.T) { dirs := datadir.New(t.TempDir()) ctx := context.Background() - tf := NewAtomicTorrentFiles(dirs.Snap) + tf := NewAtomicTorrentFS(dirs.Snap) // allow adding files only if they are inside snapshots dir - err := BuildTorrentIfNeed(ctx, "a.seg", dirs.Snap, tf) + _, err := BuildTorrentIfNeed(ctx, "a.seg", dirs.Snap, tf) require.NoError(err) - err = BuildTorrentIfNeed(ctx, "b/a.seg", dirs.Snap, tf) + _, err = BuildTorrentIfNeed(ctx, "b/a.seg", dirs.Snap, tf) require.NoError(err) - err = BuildTorrentIfNeed(ctx, filepath.Join(dirs.Snap, "a.seg"), dirs.Snap, tf) + _, err = BuildTorrentIfNeed(ctx, filepath.Join(dirs.Snap, "a.seg"), dirs.Snap, tf) require.NoError(err) - err = BuildTorrentIfNeed(ctx, filepath.Join(dirs.Snap, "b", "a.seg"), dirs.Snap, tf) + _, err = BuildTorrentIfNeed(ctx, filepath.Join(dirs.Snap, "b", "a.seg"), dirs.Snap, tf) require.NoError(err) // reject escaping snapshots dir - err = BuildTorrentIfNeed(ctx, filepath.Join(dirs.Chaindata, "b", "a.seg"), dirs.Snap, tf) + _, err = BuildTorrentIfNeed(ctx, filepath.Join(dirs.Chaindata, "b", "a.seg"), dirs.Snap, tf) require.Error(err) - err = BuildTorrentIfNeed(ctx, "./../a.seg", dirs.Snap, tf) + _, err = BuildTorrentIfNeed(ctx, "./../a.seg", dirs.Snap, tf) require.Error(err) } diff --git a/erigon-lib/downloader/downloadercfg/dns_cache_resolver.go b/erigon-lib/downloader/downloadercfg/dns_cache_resolver.go new file mode 100644 index 00000000000..1aab7c41f7d --- /dev/null +++ b/erigon-lib/downloader/downloadercfg/dns_cache_resolver.go @@ -0,0 +1,49 @@ +package downloadercfg + +import ( + "context" + "net" + "time" + + "github.com/rs/dnscache" +) + +// DnsCacheResolver resolves DNS requests for an HTTP client using an in-memory cache. +type DnsCacheResolver struct { + RefreshTimeout time.Duration + + resolver dnscache.Resolver +} + +func (r *DnsCacheResolver) DialContext(ctx context.Context, network, address string) (net.Conn, error) { + host, port, err := net.SplitHostPort(address) + if err != nil { + return nil, err + } + ips, err := r.resolver.LookupHost(ctx, host) + if err != nil { + return nil, err + } + var conn net.Conn + for _, ip := range ips { + var dialer net.Dialer + conn, err = dialer.DialContext(ctx, network, net.JoinHostPort(ip, port)) + if err == nil { + break + } + } + return conn, err +} + +func (r *DnsCacheResolver) Run(ctx context.Context) { + ticker := time.NewTicker(r.RefreshTimeout) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + r.resolver.Refresh(true) + } + } +} diff --git a/erigon-lib/downloader/downloadercfg/downloadercfg.go b/erigon-lib/downloader/downloadercfg/downloadercfg.go index 6a466c2fea5..a9aaf1beccc 100644 --- a/erigon-lib/downloader/downloadercfg/downloadercfg.go +++ b/erigon-lib/downloader/downloadercfg/downloadercfg.go @@ -51,10 +51,10 @@ type Cfg struct { WebSeedUrls []*url.URL WebSeedFiles []string - WebSeedS3Tokens []string - ExpectedTorrentFilesHashes snapcfg.Preverified + SnapshotConfig *snapcfg.Cfg DownloadTorrentFilesFromWebseed bool AddTorrentsFromDisk bool + SnapshotLock bool ChainName string Dirs datadir.Dirs @@ -70,6 +70,10 @@ func Default() *torrent.ClientConfig { torrentConfig.MinDialTimeout = 6 * time.Second //default: 3s torrentConfig.HandshakesTimeout = 8 * time.Second //default: 4s + // default limit is 1MB, but we have 2MB pieces which brings us to: + // *torrent.PeerConn: waiting for alloc limit reservation: reservation for 1802972 exceeds limiter max 1048576 + torrentConfig.MaxAllocPeerRequestDataPerConn = int64(DefaultPieceSize) + // enable dht torrentConfig.NoDHT = true //torrentConfig.DisableTrackers = true @@ -92,7 +96,7 @@ func Default() *torrent.ClientConfig { return torrentConfig } -func New(dirs datadir.Dirs, version string, verbosity lg.Level, downloadRate, uploadRate datasize.ByteSize, port, connsPerFile, downloadSlots int, staticPeers, webseeds []string, chainName string) (*Cfg, error) { +func New(dirs datadir.Dirs, version string, verbosity lg.Level, downloadRate, uploadRate datasize.ByteSize, port, connsPerFile, downloadSlots int, staticPeers, webseeds []string, chainName string, lockSnapshots bool) (*Cfg, error) { torrentConfig := Default() torrentConfig.DataDir = dirs.Snap // `DataDir` of torrent-client-lib is different from Erigon's `DataDir`. Just same naming. @@ -105,8 +109,15 @@ func New(dirs datadir.Dirs, version string, verbosity lg.Level, downloadRate, up // check if ipv6 is enabled torrentConfig.DisableIPv6 = !getIpv6Enabled() - torrentConfig.UploadRateLimiter = rate.NewLimiter(rate.Limit(uploadRate.Bytes()), DefaultNetworkChunkSize) // default: unlimited - if downloadRate.Bytes() < 500_000_000 { + if uploadRate > 512*datasize.MB { + torrentConfig.UploadRateLimiter = rate.NewLimiter(rate.Inf, DefaultNetworkChunkSize) // default: unlimited + } else { + torrentConfig.UploadRateLimiter = rate.NewLimiter(rate.Limit(uploadRate.Bytes()), DefaultNetworkChunkSize) // default: unlimited + } + + if downloadRate > 512*datasize.MB { + torrentConfig.DownloadRateLimiter = rate.NewLimiter(rate.Inf, DefaultNetworkChunkSize) // default: unlimited + } else { torrentConfig.DownloadRateLimiter = rate.NewLimiter(rate.Limit(downloadRate.Bytes()), DefaultNetworkChunkSize) // default: unlimited } @@ -154,7 +165,6 @@ func New(dirs datadir.Dirs, version string, verbosity lg.Level, downloadRate, up webseedUrlsOrFiles := webseeds webseedHttpProviders := make([]*url.URL, 0, len(webseedUrlsOrFiles)) webseedFileProviders := make([]string, 0, len(webseedUrlsOrFiles)) - webseedS3Providers := make([]string, 0, len(webseedUrlsOrFiles)) for _, webseed := range webseedUrlsOrFiles { if !strings.HasPrefix(webseed, "v") { // has marker v1/v2/... uri, err := url.ParseRequestURI(webseed) @@ -171,7 +181,6 @@ func New(dirs datadir.Dirs, version string, verbosity lg.Level, downloadRate, up if strings.HasPrefix(webseed, "v1:") { withoutVerisonPrefix := webseed[3:] if !strings.HasPrefix(withoutVerisonPrefix, "https:") { - webseedS3Providers = append(webseedS3Providers, webseed) continue } uri, err := url.ParseRequestURI(withoutVerisonPrefix) @@ -188,12 +197,12 @@ func New(dirs datadir.Dirs, version string, verbosity lg.Level, downloadRate, up if dir.FileExist(localCfgFile) { webseedFileProviders = append(webseedFileProviders, localCfgFile) } - //TODO: if don't pass "downloaded files list here" (which we store in db) - synced erigon will download new .torrent files. And erigon can't work with "unfinished" files. - snapCfg := snapcfg.KnownCfg(chainName, 0) + return &Cfg{Dirs: dirs, ChainName: chainName, ClientConfig: torrentConfig, DownloadSlots: downloadSlots, - WebSeedUrls: webseedHttpProviders, WebSeedFiles: webseedFileProviders, WebSeedS3Tokens: webseedS3Providers, - DownloadTorrentFilesFromWebseed: true, AddTorrentsFromDisk: true, ExpectedTorrentFilesHashes: snapCfg.Preverified, + WebSeedUrls: webseedHttpProviders, WebSeedFiles: webseedFileProviders, + DownloadTorrentFilesFromWebseed: true, AddTorrentsFromDisk: true, SnapshotLock: lockSnapshots, + SnapshotConfig: snapcfg.KnownCfg(chainName), }, nil } diff --git a/erigon-lib/downloader/mdbx_piece_completion.go b/erigon-lib/downloader/mdbx_piece_completion.go index 6f209cd19c9..32e38ea4d2d 100644 --- a/erigon-lib/downloader/mdbx_piece_completion.go +++ b/erigon-lib/downloader/mdbx_piece_completion.go @@ -24,6 +24,7 @@ import ( "github.com/anacrolix/torrent/storage" "github.com/anacrolix/torrent/types/infohash" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/mdbx" ) const ( @@ -115,3 +116,59 @@ func (m *mdbxPieceCompletion) Close() error { m.db.Close() return nil } + +type mdbxPieceCompletionBatch struct { + db *mdbx.MdbxKV +} + +var _ storage.PieceCompletion = (*mdbxPieceCompletionBatch)(nil) + +func NewMdbxPieceCompletionBatch(db kv.RwDB) (ret storage.PieceCompletion, err error) { + ret = &mdbxPieceCompletionBatch{db: db.(*mdbx.MdbxKV)} + return +} + +func (m *mdbxPieceCompletionBatch) Get(pk metainfo.PieceKey) (cn storage.Completion, err error) { + err = m.db.View(context.Background(), func(tx kv.Tx) error { + var key [infohash.Size + 4]byte + copy(key[:], pk.InfoHash[:]) + binary.BigEndian.PutUint32(key[infohash.Size:], uint32(pk.Index)) + cn.Ok = true + v, err := tx.GetOne(kv.BittorrentCompletion, key[:]) + if err != nil { + return err + } + switch string(v) { + case complete: + cn.Complete = true + case incomplete: + cn.Complete = false + default: + cn.Ok = false + } + return nil + }) + return +} + +func (m *mdbxPieceCompletionBatch) Set(pk metainfo.PieceKey, b bool) error { + if c, err := m.Get(pk); err == nil && c.Ok && c.Complete == b { + return nil + } + var key [infohash.Size + 4]byte + copy(key[:], pk.InfoHash[:]) + binary.BigEndian.PutUint32(key[infohash.Size:], uint32(pk.Index)) + + v := []byte(incomplete) + if b { + v = []byte(complete) + } + return m.db.Batch(func(tx kv.RwTx) error { + return tx.Put(kv.BittorrentCompletion, key[:], v) + }) +} + +func (m *mdbxPieceCompletionBatch) Close() error { + m.db.Close() + return nil +} diff --git a/erigon-lib/downloader/mdbx_piece_completion_test.go b/erigon-lib/downloader/mdbx_piece_completion_test.go index c2035501ad4..a594e3dd897 100644 --- a/erigon-lib/downloader/mdbx_piece_completion_test.go +++ b/erigon-lib/downloader/mdbx_piece_completion_test.go @@ -51,3 +51,28 @@ func TestMdbxPieceCompletion(t *testing.T) { require.NoError(t, err) assert.Equal(t, storage.Completion{Complete: true, Ok: true}, b) } + +func TestMdbxPieceCompletionBatch(t *testing.T) { + db := memdb.NewTestDownloaderDB(t) + pc, err := NewMdbxPieceCompletionBatch(db) + require.NoError(t, err) + defer pc.Close() + + pk := metainfo.PieceKey{} + + b, err := pc.Get(pk) + require.NoError(t, err) + assert.False(t, b.Ok) + + require.NoError(t, pc.Set(pk, false)) + + b, err = pc.Get(pk) + require.NoError(t, err) + assert.Equal(t, storage.Completion{Complete: false, Ok: true}, b) + + require.NoError(t, pc.Set(pk, true)) + + b, err = pc.Get(pk) + require.NoError(t, err) + assert.Equal(t, storage.Completion{Complete: true, Ok: true}, b) +} diff --git a/erigon-lib/downloader/rclone.go b/erigon-lib/downloader/rclone.go index 4f43eaba6fd..cb70db97113 100644 --- a/erigon-lib/downloader/rclone.go +++ b/erigon-lib/downloader/rclone.go @@ -14,6 +14,7 @@ import ( "os/exec" "os/signal" "path/filepath" + "slices" "strconv" "strings" "sync" @@ -21,9 +22,11 @@ import ( "syscall" "time" - "golang.org/x/exp/slices" + "golang.org/x/time/rate" + "github.com/c2h5oh/datasize" "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/log/v3" "github.com/spaolacci/murmur3" @@ -38,7 +41,7 @@ type rcloneInfo struct { localInfo fs.FileInfo } -func (i *rcloneInfo) Version() uint8 { +func (i *rcloneInfo) Version() snaptype.Version { if i.snapInfo != nil { return i.snapInfo.Version } @@ -64,10 +67,10 @@ func (i *rcloneInfo) To() uint64 { func (i *rcloneInfo) Type() snaptype.Type { if i.snapInfo != nil { - return i.snapInfo.T + return i.snapInfo.Type } - return snaptype.Unknown + return nil } type RCloneClient struct { @@ -75,6 +78,13 @@ type RCloneClient struct { rcloneUrl string rcloneSession *http.Client logger log.Logger + bwLimit *rate.Limit + optionsQueue chan RCloneOptions +} + +type RCloneOptions struct { + BwLimit string `json:"BwLimit,omitempty"` + BwLimitFile string `json:"BwLimitFile,omitempty"` } func (c *RCloneClient) start(logger log.Logger) error { @@ -83,33 +93,42 @@ func (c *RCloneClient) start(logger log.Logger) error { rclone, _ := exec.LookPath("rclone") if len(rclone) == 0 { - logger.Warn("[rclone] Uploading disabled: rclone not found in PATH") return fmt.Errorf("rclone not found in PATH") } + logger.Info("[downloader] rclone found in PATH: enhanced upload/download enabled") + if p, err := freePort(); err == nil { ctx, cancel := context.WithCancel(context.Background()) addr := fmt.Sprintf("127.0.0.1:%d", p) - c.rclone = exec.CommandContext(ctx, rclone, "rcd", "--rc-addr", addr, "--rc-no-auth") + c.rclone = exec.CommandContext(ctx, rclone, "rcd", "--rc-addr", addr, "--rc-no-auth", "--multi-thread-streams", "1") c.rcloneUrl = "http://" + addr c.rcloneSession = &http.Client{} // no timeout - we're doing sync calls + c.optionsQueue = make(chan RCloneOptions, 100) if err := c.rclone.Start(); err != nil { cancel() - logger.Warn("[rclone] Uploading disabled: rclone didn't start", "err", err) + logger.Warn("[downloader] Uploading disabled: rclone didn't start", "err", err) return fmt.Errorf("rclone didn't start: %w", err) } else { - logger.Info("[rclone] rclone started", "addr", addr) + logger.Info("[downloader] rclone started", "addr", addr) } go func() { signalCh := make(chan os.Signal, 1) signal.Notify(signalCh, syscall.SIGTERM, syscall.SIGINT) - switch s := <-signalCh; s { - case syscall.SIGTERM, syscall.SIGINT: - cancel() + for { + select { + case s := <-signalCh: + switch s { + case syscall.SIGTERM, syscall.SIGINT: + cancel() + } + case o := <-c.optionsQueue: + c.setOptions(ctx, o) + } } }() } @@ -137,17 +156,97 @@ func (c *RCloneClient) ListRemotes(ctx context.Context) ([]string, error) { return remotes.Remotes, nil } +type RCloneTransferStats struct { + Bytes uint64 `json:"bytes"` + Eta uint `json:"eta"` // secs + Group string `json:"group"` + Name string `json:"name"` + Percentage uint `json:"percentage"` + Size uint64 `json:"size"` //bytes + Speed float64 `json:"speed"` //bytes/sec + SpeedAvg float64 `json:"speedAvg"` //bytes/sec +} + +type RCloneStats struct { + Bytes uint64 `json:"bytes"` + Checks uint `json:"checks"` + DeletedDirs uint `json:"deletedDirs"` + Deletes uint `json:"deletes"` + ElapsedTime float64 `json:"elapsedTime"` // seconds + Errors uint `json:"errors"` + Eta uint `json:"eta"` // seconds + FatalError bool `json:"fatalError"` + Renames uint `json:"renames"` + RetryError bool `json:"retryError"` + ServerSideCopies uint `json:"serverSideCopies"` + ServerSideCopyBytes uint `json:"serverSideCopyBytes"` + ServerSideMoveBytes uint `json:"serverSideMoveBytes"` + ServerSideMoves uint `json:"serverSideMoves"` + Speed float64 `json:"speed"` // bytes/sec + TotalBytes uint64 `json:"totalBytes"` + TotalChecks uint `json:"totalChecks"` + TotalTransfers uint `json:"totalTransfers"` + TransferTime float64 `json:"transferTime"` // seconds + Transferring []RCloneTransferStats `json:"transferring"` + Transfers uint `json:"transfers"` +} + +func (c *RCloneClient) Stats(ctx context.Context) (*RCloneStats, error) { + result, err := c.cmd(ctx, "core/stats", nil) + + if err != nil { + return nil, err + } + + var stats RCloneStats + + err = json.Unmarshal(result, &stats) + + if err != nil { + return nil, err + } + + return &stats, nil +} + +func (c *RCloneClient) GetBwLimit() rate.Limit { + if c.bwLimit != nil { + return *c.bwLimit + } + + return 0 +} + +func (c *RCloneClient) SetBwLimit(ctx context.Context, limit rate.Limit) { + if c.bwLimit == nil || limit != *c.bwLimit { + c.bwLimit = &limit + bwLimit := datasize.ByteSize(limit).KBytes() + c.logger.Trace("Setting rclone bw limit", "kbytes", int64(bwLimit)) + c.optionsQueue <- RCloneOptions{ + BwLimit: fmt.Sprintf("%dK", int64(bwLimit)), + } + } +} + +func (c *RCloneClient) setOptions(ctx context.Context, options RCloneOptions) error { + _, err := c.cmd(ctx, "options/set", struct { + Main RCloneOptions `json:"main"` + }{ + Main: options, + }) + + return err +} + func (u *RCloneClient) sync(ctx context.Context, request *rcloneRequest) error { _, err := u.cmd(ctx, "sync/sync", request) return err } -/* -return retryConnects(ctx, func(ctx context.Context) error { - return client.CallContext(ctx, result, string(method), args...) -}) +func (u *RCloneClient) copyFile(ctx context.Context, request *rcloneRequest) error { + _, err := u.cmd(ctx, "operations/copyfile", request) + return err } -*/ func isConnectionError(err error) bool { var opErr *net.OpError @@ -184,20 +283,27 @@ func retry(ctx context.Context, op func(context.Context) error, isRecoverableErr } func (u *RCloneClient) cmd(ctx context.Context, path string, args interface{}) ([]byte, error) { - requestBody, err := json.Marshal(args) + var requestBodyReader io.Reader - if err != nil { - return nil, err + if args != nil { + requestBody, err := json.Marshal(args) + + if err != nil { + return nil, err + } + + requestBodyReader = bytes.NewBuffer(requestBody) } - request, err := http.NewRequestWithContext(ctx, http.MethodPost, - u.rcloneUrl+"/"+path, bytes.NewBuffer(requestBody)) + request, err := http.NewRequestWithContext(ctx, http.MethodPost, u.rcloneUrl+"/"+path, requestBodyReader) if err != nil { return nil, err } - request.Header.Set("Content-Type", "application/json") + if requestBodyReader != nil { + request.Header.Set("Content-Type", "application/json") + } ctx, cancel := context.WithTimeout(ctx, connectionTimeout) defer cancel() @@ -221,12 +327,24 @@ func (u *RCloneClient) cmd(ctx context.Context, path string, args interface{}) ( }{} if err := json.NewDecoder(response.Body).Decode(&responseBody); err == nil && len(responseBody.Error) > 0 { - u.logger.Warn("[rclone] cmd failed", "path", path, "status", response.Status, "err", responseBody.Error) + var argsJson string + + if bytes, err := json.Marshal(args); err == nil { + argsJson = string(bytes) + } + + u.logger.Warn("[downloader] rclone cmd failed", "path", path, "args", argsJson, "status", response.Status, "err", responseBody.Error) return nil, fmt.Errorf("cmd: %s failed: %s: %s", path, response.Status, responseBody.Error) - } else { - u.logger.Warn("[rclone] cmd failed", "path", path, "status", response.Status) - return nil, fmt.Errorf("cmd: %s failed: %s", path, response.Status) } + + var argsJson string + + if bytes, err := json.Marshal(args); err == nil { + argsJson = string(bytes) + } + + u.logger.Warn("[downloader] rclone cmd failed", "path", path, "args", argsJson, "status", response.Status) + return nil, fmt.Errorf("cmd: %s failed: %s", path, response.Status) } return io.ReadAll(response.Body) @@ -243,6 +361,7 @@ type RCloneSession struct { syncScheduled atomic.Bool activeSyncCount atomic.Int32 cancel context.CancelFunc + headers http.Header } var rcClient RCloneClient @@ -275,7 +394,7 @@ func freePort() (port int, err error) { } } -func (c *RCloneClient) NewSession(ctx context.Context, localFs string, remoteFs string) (*RCloneSession, error) { +func (c *RCloneClient) NewSession(ctx context.Context, localFs string, remoteFs string, headers http.Header) (*RCloneSession, error) { ctx, cancel := context.WithCancel(ctx) session := &RCloneSession{ @@ -285,12 +404,17 @@ func (c *RCloneClient) NewSession(ctx context.Context, localFs string, remoteFs localFs: localFs, cancel: cancel, syncQueue: make(chan syncRequest, 100), + headers: headers, } go func() { - if _, err := session.ReadRemoteDir(ctx, true); err == nil { - session.syncFiles(ctx) + if !strings.HasPrefix(remoteFs, "http") { + if _, err := session.ReadRemoteDir(ctx, true); err != nil { + return + } } + + session.syncFiles(ctx) }() return session, nil @@ -312,7 +436,7 @@ type syncRequest struct { ctx context.Context info map[string]*rcloneInfo cerr chan error - request *rcloneRequest + requests []*rcloneRequest retryTime time.Duration } @@ -345,8 +469,12 @@ func (c *RCloneSession) Upload(ctx context.Context, files ...string) error { localInfo: localInfo, } - if snapInfo, ok := snaptype.ParseFileName(c.localFs, file); ok { - info.snapInfo = &snapInfo + if snapInfo, isStateFile, ok := snaptype.ParseFileName(c.localFs, file); ok { + if isStateFile { + //TODO + } else { + info.snapInfo = &snapInfo + } } c.files[file] = info @@ -361,53 +489,88 @@ func (c *RCloneSession) Upload(ctx context.Context, files ...string) error { cerr := make(chan error, 1) c.syncQueue <- syncRequest{ctx, reqInfo, cerr, - &rcloneRequest{ + []*rcloneRequest{{ Group: c.Label(), SrcFs: c.localFs, DstFs: c.remoteFs, Filter: rcloneFilter{ IncludeRule: files, - }}, 0} + }}}, 0} return <-cerr } func (c *RCloneSession) Download(ctx context.Context, files ...string) error { - c.Lock() - - if len(c.files) == 0 { - c.Unlock() - _, err := c.ReadRemoteDir(ctx, false) - if err != nil { - return fmt.Errorf("can't download: %s: %w", files, err) - } - c.Lock() - } reqInfo := map[string]*rcloneInfo{} - for _, file := range files { - info, ok := c.files[file] + var fileRequests []*rcloneRequest - if !ok || info.remoteInfo.Size == 0 { + if strings.HasPrefix(c.remoteFs, "http") { + var headers string + var comma string + + for header, values := range c.headers { + for _, value := range values { + headers += fmt.Sprintf("%s%s=%s", comma, header, value) + comma = "," + } + } + + for _, file := range files { + reqInfo[file] = &rcloneInfo{ + file: file, + } + fileRequests = append(fileRequests, + &rcloneRequest{ + Group: c.remoteFs, + SrcFs: rcloneFs{ + Type: "http", + Url: c.remoteFs, + Headers: headers, + }, + SrcRemote: file, + DstFs: c.localFs, + DstRemote: file, + }) + } + } else { + c.Lock() + + if len(c.files) == 0 { c.Unlock() - return fmt.Errorf("can't download: %s: %w", file, os.ErrNotExist) + _, err := c.ReadRemoteDir(ctx, false) + if err != nil { + return fmt.Errorf("can't download: %s: %w", files, err) + } + c.Lock() } - reqInfo[file] = info - } + for _, file := range files { + info, ok := c.files[file] - c.Unlock() + if !ok || info.remoteInfo.Size == 0 { + c.Unlock() + return fmt.Errorf("can't download: %s: %w", file, os.ErrNotExist) + } - cerr := make(chan error, 1) + reqInfo[file] = info + } - c.syncQueue <- syncRequest{ctx, reqInfo, cerr, - &rcloneRequest{ + c.Unlock() + + fileRequests = append(fileRequests, &rcloneRequest{ + Group: c.Label(), SrcFs: c.remoteFs, DstFs: c.localFs, Filter: rcloneFilter{ IncludeRule: files, - }}, 0} + }}) + } + + cerr := make(chan error, 1) + + c.syncQueue <- syncRequest{ctx, reqInfo, cerr, fileRequests, 0} return <-cerr } @@ -435,7 +598,7 @@ func (c *RCloneSession) Cat(ctx context.Context, file string) (io.Reader, error) } func (c *RCloneSession) ReadLocalDir(ctx context.Context) ([]fs.DirEntry, error) { - return os.ReadDir(c.localFs) + return dir.ReadDir(c.localFs) } func (c *RCloneSession) Label() string { @@ -449,7 +612,7 @@ type remoteInfo struct { } type SnapInfo interface { - Version() uint8 + Version() snaptype.Version From() uint64 To() uint64 Type() snaptype.Type @@ -586,8 +749,12 @@ func (c *RCloneSession) ReadRemoteDir(ctx context.Context, refresh bool) ([]fs.D rcinfo.localInfo = localInfo rcinfo.remoteInfo = fi - if snapInfo, ok := snaptype.ParseFileName(c.localFs, fi.Name); ok { - rcinfo.snapInfo = &snapInfo + if snapInfo, isStateFile, ok := snaptype.ParseFileName(c.localFs, fi.Name); ok { + if isStateFile { + //TODO + } else { + rcinfo.snapInfo = &snapInfo + } } else { rcinfo.snapInfo = nil } @@ -599,8 +766,12 @@ func (c *RCloneSession) ReadRemoteDir(ctx context.Context, refresh bool) ([]fs.D remoteInfo: fi, } - if snapInfo, ok := snaptype.ParseFileName(c.localFs, fi.Name); ok { - info.snapInfo = &snapInfo + if snapInfo, isStateFile, ok := snaptype.ParseFileName(c.localFs, fi.Name); ok { + if isStateFile { + //TODO + } else { + info.snapInfo = &snapInfo + } } c.files[fi.Name] = info @@ -628,13 +799,22 @@ type rcloneFilter struct { IncludeRule []string `json:"IncludeRule"` } +type rcloneFs struct { + Type string `json:"type"` + Url string `json:"url,omitempty"` + Headers string `json:"headers,omitempty"` //comma separated list of key,value pairs, standard CSV encoding may be used. +} + type rcloneRequest struct { - Async bool `json:"_async,omitempty"` - Config map[string]interface{} `json:"_config,omitempty"` - Group string `json:"group"` - SrcFs string `json:"srcFs"` - DstFs string `json:"dstFs"` - Filter rcloneFilter `json:"_filter"` + Async bool `json:"_async,omitempty"` + Config *RCloneOptions `json:"_config,omitempty"` + Group string `json:"_group"` + SrcFs interface{} `json:"srcFs"` + SrcRemote string `json:"srcRemote,omitempty"` + DstFs string `json:"dstFs"` + DstRemote string `json:"dstRemote,omitempty"` + + Filter rcloneFilter `json:"_filter"` } func (c *RCloneSession) syncFiles(ctx context.Context) { @@ -685,7 +865,7 @@ func (c *RCloneSession) syncFiles(ctx context.Context) { select { case <-gctx.Done(): if syncCount := int(c.activeSyncCount.Load()) + len(c.syncQueue); syncCount > 0 { - log.Info("[rclone] Synced files", "processed", fmt.Sprintf("%d/%d", c.activeSyncCount.Load(), syncCount)) + log.Debug("[rclone] Synced files", "processed", fmt.Sprintf("%d/%d", c.activeSyncCount.Load(), syncCount)) } c.Lock() @@ -700,7 +880,7 @@ func (c *RCloneSession) syncFiles(ctx context.Context) { return case <-logEvery.C: if syncCount := int(c.activeSyncCount.Load()) + len(c.syncQueue); syncCount > 0 { - log.Info("[rclone] Syncing files", "progress", fmt.Sprintf("%d/%d", c.activeSyncCount.Load(), syncCount)) + log.Debug("[rclone] Syncing files", "progress", fmt.Sprintf("%d/%d", c.activeSyncCount.Load(), syncCount)) } } }() @@ -744,15 +924,30 @@ func (c *RCloneSession) syncFiles(ctx context.Context) { return nil //nolint:nilerr } - if err := c.sync(gctx, req.request); err != nil { + for _, fileReq := range req.requests { + if _, ok := fileReq.SrcFs.(rcloneFs); ok { + if err := c.copyFile(gctx, fileReq); err != nil { + + if gctx.Err() != nil { + req.cerr <- gctx.Err() + } else { + go retry(req) + } - if gctx.Err() != nil { - req.cerr <- gctx.Err() + return nil //nolint:nilerr + } } else { - go retry(req) - } + if err := c.sync(gctx, fileReq); err != nil { - return nil //nolint:nilerr + if gctx.Err() != nil { + req.cerr <- gctx.Err() + } else { + go retry(req) + } + + return nil //nolint:nilerr + } + } } for _, info := range req.info { @@ -777,7 +972,7 @@ func (c *RCloneSession) syncFiles(ctx context.Context) { c.syncScheduled.Store(false) if err := g.Wait(); err != nil { - c.logger.Debug("[rclone] uploading failed", "err", err) + c.logger.Debug("[rclone] sync failed", "err", err) } }() } diff --git a/erigon-lib/downloader/rclone_test.go b/erigon-lib/downloader/rclone_test.go index 9e58dc333a7..aae97788211 100644 --- a/erigon-lib/downloader/rclone_test.go +++ b/erigon-lib/downloader/rclone_test.go @@ -14,12 +14,7 @@ import ( func hasRClone() bool { rclone, _ := exec.LookPath("rclone") - - if len(rclone) == 0 { - return false - } - - return true + return len(rclone) != 0 } func TestDownload(t *testing.T) { @@ -39,7 +34,7 @@ func TestDownload(t *testing.T) { t.Fatal(err) } - rcc, err := cli.NewSession(ctx, tmpDir, remoteDir) + rcc, err := cli.NewSession(ctx, tmpDir, remoteDir, nil) if err != nil { t.Fatal(err) diff --git a/erigon-lib/downloader/snaptype/caplin_types.go b/erigon-lib/downloader/snaptype/caplin_types.go new file mode 100644 index 00000000000..adae4e7af34 --- /dev/null +++ b/erigon-lib/downloader/snaptype/caplin_types.go @@ -0,0 +1,35 @@ +package snaptype + +var ( + BeaconBlocks = snapType{ + enum: CaplinEnums.BeaconBlocks, + name: "beaconblocks", + versions: Versions{ + Current: 1, + MinSupported: 1, + }, + indexes: []Index{CaplinIndexes.BeaconBlockSlot}, + } + BlobSidecars = snapType{ + enum: CaplinEnums.BlobSidecars, + name: "blobsidecars", + versions: Versions{ + Current: 1, + MinSupported: 1, + }, + indexes: []Index{CaplinIndexes.BlobSidecarSlot}, + } + + CaplinSnapshotTypes = []Type{BeaconBlocks, BlobSidecars} +) + +func IsCaplinType(t Enum) bool { + + for _, ct := range CaplinSnapshotTypes { + if t == ct.Enum() { + return true + } + } + + return false +} diff --git a/erigon-lib/downloader/snaptype/caplin_types_test.go b/erigon-lib/downloader/snaptype/caplin_types_test.go new file mode 100644 index 00000000000..d4567ea8bd5 --- /dev/null +++ b/erigon-lib/downloader/snaptype/caplin_types_test.go @@ -0,0 +1,30 @@ +package snaptype_test + +import ( + "testing" + + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" +) + +func TestEnumeration(t *testing.T) { + + if snaptype.BlobSidecars.Enum() != snaptype.CaplinEnums.BlobSidecars { + t.Fatal("enum mismatch", snaptype.BlobSidecars, snaptype.BlobSidecars.Enum(), snaptype.CaplinEnums.BlobSidecars) + } + + if snaptype.BeaconBlocks.Enum() != snaptype.CaplinEnums.BeaconBlocks { + t.Fatal("enum mismatch", snaptype.BeaconBlocks, snaptype.BeaconBlocks.Enum(), snaptype.CaplinEnums.BeaconBlocks) + } +} + +func TestNames(t *testing.T) { + + if snaptype.BeaconBlocks.Name() != snaptype.CaplinEnums.BeaconBlocks.String() { + t.Fatal("name mismatch", snaptype.BeaconBlocks, snaptype.BeaconBlocks.Name(), snaptype.CaplinEnums.BeaconBlocks.String()) + } + + if snaptype.BlobSidecars.Name() != snaptype.CaplinEnums.BlobSidecars.String() { + t.Fatal("name mismatch", snaptype.BlobSidecars, snaptype.BlobSidecars.Name(), snaptype.CaplinEnums.BlobSidecars.String()) + } + +} diff --git a/erigon-lib/downloader/snaptype/files.go b/erigon-lib/downloader/snaptype/files.go index 274c91bd35f..7628ff3e1e7 100644 --- a/erigon-lib/downloader/snaptype/files.go +++ b/erigon-lib/downloader/snaptype/files.go @@ -22,6 +22,8 @@ import ( "fmt" "os" "path/filepath" + "regexp" + "slices" "strconv" "strings" @@ -29,86 +31,23 @@ import ( "github.com/ledgerwatch/erigon-lib/common/cmp" "github.com/ledgerwatch/erigon-lib/common/dir" - "golang.org/x/exp/slices" ) -type Type int - -const ( - Unknown Type = -1 - Headers Type = iota - Bodies - Transactions - BorEvents - BorSpans - BeaconBlocks -) - -func (ft Type) String() string { - switch ft { - case Headers: - return "headers" - case Bodies: - return "bodies" - case Transactions: - return "transactions" - case BorEvents: - return "borevents" - case BorSpans: - return "borspans" - case BeaconBlocks: - return "beaconblocks" - default: - panic(fmt.Sprintf("unknown file type: %d", ft)) - } -} - -func ParseFileType(s string) (Type, bool) { - switch s { - case "headers": - return Headers, true - case "bodies": - return Bodies, true - case "transactions": - return Transactions, true - case "borevents": - return BorEvents, true - case "borspans": - return BorSpans, true - case "beaconblocks": - return BeaconBlocks, true - default: - return Unknown, false - } -} - -type IdxType string - -const ( - Transactions2Block IdxType = "transactions-to-block" -) - -func (it IdxType) String() string { return string(it) } - -var BlockSnapshotTypes = []Type{Headers, Bodies, Transactions} - -var BorSnapshotTypes = []Type{BorEvents, BorSpans} - var ( ErrInvalidFileName = fmt.Errorf("invalid compressed file name") ) -func FileName(version uint8, from, to uint64, fileType string) string { +func FileName(version Version, from, to uint64, fileType string) string { return fmt.Sprintf("v%d-%06d-%06d-%s", version, from/1_000, to/1_000, fileType) } -func SegmentFileName(version uint8, from, to uint64, t Type) string { +func SegmentFileName(version Version, from, to uint64, t Enum) string { return FileName(version, from, to, t.String()) + ".seg" } -func DatFileName(version uint8, from, to uint64, fType string) string { +func DatFileName(version Version, from, to uint64, fType string) string { return FileName(version, from, to, fType) + ".dat" } -func IdxFileName(version uint8, from, to uint64, fType string) string { +func IdxFileName(version Version, from, to uint64, fType string) string { return FileName(version, from, to, fType) + ".idx" } @@ -119,10 +58,33 @@ func FilterExt(in []FileInfo, expectExt string) (out []FileInfo) { } out = append(out, f) } + + slices.SortFunc(out, func(a, b FileInfo) int { + if cmp := strings.Compare(a.Type.Name(), b.Type.Name()); cmp != 0 { + return cmp + } + + switch { + case a.From > b.From: + return +1 + case b.From > a.From: + return -1 + } + + switch { + case a.To > b.To: + return +1 + case b.To > a.To: + return -1 + } + + return int(a.Version) - int(b.Version) + }) + return out } -func FilesWithExt(dir string, version uint8, expectExt string) ([]FileInfo, error) { - files, err := ParseDir(dir, version) +func FilesWithExt(dir string, expectExt string) ([]FileInfo, error) { + files, err := ParseDir(dir) if err != nil { return nil, err } @@ -139,37 +101,100 @@ func IsCorrectHistoryFileName(name string) bool { return len(parts) == 3 } -func ParseFileName(dir, fileName string) (res FileInfo, ok bool) { +func ParseFileName(dir, fileName string) (res FileInfo, isE3Seedable bool, ok bool) { + res, ok = parseFileName(dir, fileName) + if ok { + return res, false, true + } + isStateFile := IsStateFile(fileName) + return res, isStateFile, isStateFile +} + +func parseFileName(dir, fileName string) (res FileInfo, ok bool) { ext := filepath.Ext(fileName) onlyName := fileName[:len(fileName)-len(ext)] parts := strings.Split(onlyName, "-") + res = FileInfo{Path: filepath.Join(dir, fileName), name: fileName, Ext: ext} if len(parts) < 4 { return res, ok } - var version uint8 - if len(parts[0]) > 1 && parts[0][0] == 'v' { - v, err := strconv.ParseUint(parts[0][1:], 10, 64) - if err != nil { - return - } - version = uint8(v) + var err error + res.Version, err = ParseVersion(parts[0]) + if err != nil { + return } from, err := strconv.ParseUint(parts[1], 10, 64) if err != nil { return } + res.From = from * 1_000 to, err := strconv.ParseUint(parts[2], 10, 64) if err != nil { return } - ft, ok := ParseFileType(parts[3]) + res.To = to * 1_000 + res.Type, ok = ParseFileType(parts[3]) if !ok { return res, ok } + return res, ok +} + +var stateFileRegex = regexp.MustCompile("^v([0-9]+)-([[:lower:]]+).([0-9]+)-([0-9]+).(.*)$") + +func E3Seedable(name string) bool { + _, name = filepath.Split(name) // remove absolute path, or `history/` prefixes + subs := stateFileRegex.FindStringSubmatch(name) + if len(subs) != 6 { + return false + } + // Check that it's seedable + from, err := strconv.ParseUint(subs[3], 10, 64) + if err != nil { + return false + } + to, err := strconv.ParseUint(subs[4], 10, 64) + if err != nil { + return false + } + if (to-from)%Erigon3SeedableSteps != 0 { + return false + } + return true +} +func IsStateFile(name string) (ok bool) { + _, name = filepath.Split(name) // remove absolute path, or `history/` prefixes + subs := stateFileRegex.FindStringSubmatch(name) + if len(subs) != 6 { + return false + } + // Check that it's seedable + _, err := strconv.ParseUint(subs[3], 10, 64) + if err != nil { + return false + } + _, err = strconv.ParseUint(subs[4], 10, 64) + + return err == nil +} + +func SeedableV2Extensions() []string { + return []string{".seg"} +} - return FileInfo{Version: version, From: from * 1_000, To: to * 1_000, Path: filepath.Join(dir, fileName), T: ft, Ext: ext}, ok +func SeedableV3Extensions() []string { + return []string{".kv", ".v", ".ef"} +} + +func IsSeedableExtension(name string) bool { + for _, ext := range append(SeedableV2Extensions(), SeedableV3Extensions()...) { + if strings.HasSuffix(name, ext) { + return true + } + } + return false } const Erigon3SeedableSteps = 32 @@ -188,27 +213,54 @@ var MergeSteps = []uint64{100_000, 10_000} // FileInfo - parsed file metadata type FileInfo struct { - Version uint8 - From, To uint64 - Path, Ext string - T Type + Version Version + From, To uint64 + name, Path, Ext string + Type Type } func (f FileInfo) TorrentFileExists() bool { return dir.FileExist(f.Path + ".torrent") } -func (f FileInfo) Seedable() bool { - return f.To-f.From == Erigon2MergeLimit || f.To-f.From == Erigon2OldMergeLimit + +func (f FileInfo) Name() string { return f.name } +func (f FileInfo) Dir() string { return filepath.Dir(f.Path) } +func (f FileInfo) Len() uint64 { return f.To - f.From } + +func (f FileInfo) CompareTo(o FileInfo) int { + if res := cmp.Compare(f.From, o.From); res != 0 { + return res + } + + if res := cmp.Compare(f.To, o.To); res != 0 { + return res + } + + // this is a lexical comparison (don't use enum) + return strings.Compare(f.Type.Name(), o.Type.Name()) } -func (f FileInfo) NeedTorrentFile() bool { return f.Seedable() && !f.TorrentFileExists() } -func (f FileInfo) Name() string { return filepath.Base(f.Path) } -func IdxFiles(dir string, version uint8) (res []FileInfo, err error) { - return FilesWithExt(dir, version, ".idx") +func (f FileInfo) As(t Type) FileInfo { + name := fmt.Sprintf("v%d-%06d-%06d-%s%s", f.Version, f.From/1_000, f.To/1_000, t, f.Ext) + return FileInfo{ + Version: f.Version, + From: f.From, + To: f.To, + Ext: f.Ext, + Type: t, + name: name, + Path: filepath.Join(f.Dir(), name), + } } -func Segments(dir string, version uint8) (res []FileInfo, err error) { - return FilesWithExt(dir, version, ".seg") + +func IdxFiles(dir string) (res []FileInfo, err error) { + return FilesWithExt(dir, ".idx") +} + +func Segments(dir string) (res []FileInfo, err error) { + return FilesWithExt(dir, ".seg") } -func TmpFiles(dir string, version uint8) (res []string, err error) { - files, err := os.ReadDir(dir) + +func TmpFiles(name string) (res []string, err error) { + files, err := dir.ReadDir(name) if err != nil { if errors.Is(err, os.ErrNotExist) { return []string{}, nil @@ -216,24 +268,22 @@ func TmpFiles(dir string, version uint8) (res []string, err error) { return nil, err } - v := fmt.Sprint("v", version) - for _, f := range files { - if f.IsDir() || len(f.Name()) < 3 || !strings.HasPrefix(f.Name(), v) { + if f.IsDir() || len(f.Name()) < 3 { continue } if filepath.Ext(f.Name()) != ".tmp" { continue } - res = append(res, filepath.Join(dir, f.Name())) + res = append(res, filepath.Join(name, f.Name())) } return res, nil } // ParseDir - reading dir ( -func ParseDir(dir string, version uint8) (res []FileInfo, err error) { - files, err := os.ReadDir(dir) +func ParseDir(name string) (res []FileInfo, err error) { + files, err := dir.ReadDir(name) if err != nil { if errors.Is(err, os.ErrNotExist) { return []FileInfo{}, nil @@ -241,36 +291,36 @@ func ParseDir(dir string, version uint8) (res []FileInfo, err error) { return nil, err } - v := fmt.Sprint("v", version) - for _, f := range files { fileInfo, err := f.Info() if err != nil { return nil, err } - if f.IsDir() || fileInfo.Size() == 0 || len(f.Name()) < 3 || !strings.HasPrefix(f.Name(), v) { + if f.IsDir() || fileInfo.Size() == 0 || len(f.Name()) < 3 { continue } - meta, ok := ParseFileName(dir, f.Name()) + meta, _, ok := ParseFileName(name, f.Name()) if !ok { continue } res = append(res, meta) } slices.SortFunc(res, func(i, j FileInfo) int { - if i.Version != j.Version { + switch { + case i.Version != j.Version: return cmp.Compare(i.Version, j.Version) - } - if i.From != j.From { + + case i.From != j.From: return cmp.Compare(i.From, j.From) - } - if i.To != j.To { + + case i.To != j.To: return cmp.Compare(i.To, j.To) + + case i.Type.Enum() != j.Type.Enum(): + return cmp.Compare(i.Type.Enum(), j.Type.Enum()) } - if i.T != j.T { - return cmp.Compare(i.T, j.T) - } + return cmp.Compare(i.Ext, j.Ext) }) diff --git a/erigon-lib/downloader/snaptype/type.go b/erigon-lib/downloader/snaptype/type.go new file mode 100644 index 00000000000..cd8d76db83c --- /dev/null +++ b/erigon-lib/downloader/snaptype/type.go @@ -0,0 +1,477 @@ +package snaptype + +import ( + "context" + "encoding/binary" + "errors" + "fmt" + "math/rand" + "os" + "path/filepath" + "strconv" + "strings" + "sync" + + "github.com/ledgerwatch/erigon-lib/chain" + "github.com/ledgerwatch/erigon-lib/common/background" + "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/erigon-lib/common/dir" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" + "github.com/ledgerwatch/log/v3" +) + +type Version uint8 + +func ParseVersion(v string) (Version, error) { + if strings.HasPrefix(v, "v") { + v, err := strconv.ParseUint(v[1:], 10, 8) + + if err != nil { + return 0, fmt.Errorf("invalid version: %w", err) + } + + return Version(v), nil + } + + if len(v) == 0 { + return 0, fmt.Errorf("invalid version: no prefix") + } + + return 0, fmt.Errorf("invalid version prefix: %s", v[0:1]) +} + +func (v Version) String() string { + return "v" + strconv.Itoa(int(v)) +} + +type Versions struct { + Current Version + MinSupported Version +} + +type FirstKeyGetter func(ctx context.Context) uint64 + +type RangeExtractor interface { + Extract(ctx context.Context, blockFrom, blockTo uint64, firstKey FirstKeyGetter, db kv.RoDB, chainConfig *chain.Config, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) +} + +type RangeExtractorFunc func(ctx context.Context, blockFrom, blockTo uint64, firstKey FirstKeyGetter, db kv.RoDB, chainConfig *chain.Config, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) + +func (f RangeExtractorFunc) Extract(ctx context.Context, blockFrom, blockTo uint64, firstKey FirstKeyGetter, db kv.RoDB, chainConfig *chain.Config, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + return f(ctx, blockFrom, blockTo, firstKey, db, chainConfig, collect, workers, lvl, logger) +} + +type IndexBuilder interface { + Build(ctx context.Context, info FileInfo, salt uint32, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) error +} + +type IndexBuilderFunc func(ctx context.Context, info FileInfo, salt uint32, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) error + +func (f IndexBuilderFunc) Build(ctx context.Context, info FileInfo, salt uint32, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) error { + return f(ctx, info, salt, chainConfig, tmpDir, p, lvl, logger) +} + +var saltMap = map[string]uint32{} +var saltLock sync.RWMutex + +// GetIndicesSalt - try read salt for all indices from DB. Or fall-back to new salt creation. +// if db is Read-Only (for example remote RPCDaemon or utilities) - we will not create new indices - +// and existing indices have salt in metadata. +func GetIndexSalt(baseDir string) (uint32, error) { + saltLock.RLock() + salt, ok := saltMap[baseDir] + saltLock.RUnlock() + + if ok { + return salt, nil + } + + fpath := filepath.Join(baseDir, "salt-blocks.txt") + if !dir.FileExist(fpath) { + dir.MustExist(baseDir) + + saltBytes := make([]byte, 4) + binary.BigEndian.PutUint32(saltBytes, rand.Uint32()) + if err := dir.WriteFileWithFsync(fpath, saltBytes, os.ModePerm); err != nil { + return 0, err + } + } + saltBytes, err := os.ReadFile(fpath) + if err != nil { + return 0, err + } + + salt = binary.BigEndian.Uint32(saltBytes) + + saltLock.Lock() + saltMap[baseDir] = salt + saltLock.Unlock() + + return salt, nil +} + +type Index struct { + Name string + Offset int +} + +var CaplinIndexes = struct { + BeaconBlockSlot, + BlobSidecarSlot Index +}{ + BeaconBlockSlot: Index{Name: "beaconblocks"}, + BlobSidecarSlot: Index{Name: "blocksidecars"}, +} + +func (i Index) HasFile(info FileInfo, logger log.Logger) bool { + dir := info.Dir() + fName := IdxFileName(info.Version, info.From, info.To, i.Name) + + segment, err := seg.NewDecompressor(info.Path) + + if err != nil { + return false + } + + defer segment.Close() + + idx, err := recsplit.OpenIndex(filepath.Join(dir, fName)) + + if err != nil { + return false + } + + defer idx.Close() + + return idx.ModTime().After(segment.ModTime()) +} + +type Type interface { + Enum() Enum + Versions() Versions + Name() string + FileName(version Version, from uint64, to uint64) string + FileInfo(dir string, from uint64, to uint64) FileInfo + IdxFileName(version Version, from uint64, to uint64, index ...Index) string + IdxFileNames(version Version, from uint64, to uint64) []string + Indexes() []Index + HasIndexFiles(info FileInfo, logger log.Logger) bool + BuildIndexes(ctx context.Context, info FileInfo, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) error + ExtractRange(ctx context.Context, info FileInfo, firstKeyGetter FirstKeyGetter, db kv.RoDB, chainConfig *chain.Config, tmpDir string, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) +} + +type snapType struct { + enum Enum + name string + versions Versions + indexes []Index + indexBuilder IndexBuilder + rangeExtractor RangeExtractor +} + +// These are raw maps with no mutex protection becuase they are +// expected to be written to once during program initialization +// and them be readonly +var registeredTypes = map[Enum]Type{} +var namedTypes = map[string]Type{} + +func RegisterType(enum Enum, name string, versions Versions, rangeExtractor RangeExtractor, indexes []Index, indexBuilder IndexBuilder) Type { + t := snapType{ + enum: enum, name: name, versions: versions, indexes: indexes, rangeExtractor: rangeExtractor, indexBuilder: indexBuilder, + } + + registeredTypes[enum] = t + namedTypes[strings.ToLower(name)] = t + + return t +} + +func (s snapType) Enum() Enum { + return s.enum +} + +func (s snapType) Versions() Versions { + return s.versions +} + +func (s snapType) Name() string { + return s.name +} + +func (s snapType) String() string { + return s.Name() +} + +func (s snapType) FileName(version Version, from uint64, to uint64) string { + if version == 0 { + version = s.versions.Current + } + + return SegmentFileName(version, from, to, s.enum) +} + +func (s snapType) FileInfo(dir string, from uint64, to uint64) FileInfo { + f, _, _ := ParseFileName(dir, s.FileName(s.versions.Current, from, to)) + return f +} + +func (s snapType) ExtractRange(ctx context.Context, info FileInfo, firstKeyGetter FirstKeyGetter, db kv.RoDB, chainConfig *chain.Config, tmpDir string, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + return ExtractRange(ctx, info, s.rangeExtractor, firstKeyGetter, db, chainConfig, tmpDir, workers, lvl, logger) +} + +func (s snapType) Indexes() []Index { + return s.indexes +} + +func (s snapType) BuildIndexes(ctx context.Context, info FileInfo, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) error { + salt, err := GetIndexSalt(info.Dir()) + + if err != nil { + return err + } + + return s.indexBuilder.Build(ctx, info, salt, chainConfig, tmpDir, p, lvl, logger) +} + +func (s snapType) HasIndexFiles(info FileInfo, logger log.Logger) bool { + for _, index := range s.indexes { + if !index.HasFile(info, logger) { + return false + } + } + + return true +} + +func (s snapType) IdxFileNames(version Version, from uint64, to uint64) []string { + fileNames := make([]string, len(s.indexes)) + for i, index := range s.indexes { + fileNames[i] = IdxFileName(version, from, to, index.Name) + } + + return fileNames +} + +func (s snapType) IdxFileName(version Version, from uint64, to uint64, index ...Index) string { + if len(index) == 0 { + if len(s.indexes) == 0 { + return "" + } + + index = []Index{s.indexes[0]} + } else { + i := index[0] + found := false + + for _, index := range s.indexes { + if i == index { + found = true + break + } + } + + if !found { + return "" + } + } + + return IdxFileName(version, from, to, index[0].Name) +} + +func ParseFileType(s string) (Type, bool) { + enum, ok := ParseEnum(s) + + if !ok { + return nil, false + } + + return enum.Type(), true +} + +type Enum int + +const Unknown Enum = 0 + +type Enums struct { + Unknown Enum +} + +const MinCoreEnum = 1 +const MinBorEnum = 4 +const MinCaplinEnum = 8 + +var CaplinEnums = struct { + Enums + BeaconBlocks, + BlobSidecars Enum +}{ + Enums: Enums{}, + BeaconBlocks: MinCaplinEnum, + BlobSidecars: MinCaplinEnum + 1, +} + +func (ft Enum) String() string { + switch ft { + case CaplinEnums.BeaconBlocks: + return "beaconblocks" + case CaplinEnums.BlobSidecars: + return "blobsidecars" + default: + if t, ok := registeredTypes[ft]; ok { + return t.Name() + } + + panic(fmt.Sprintf("unknown file type: %d", ft)) + } +} + +func (ft Enum) Type() Type { + switch ft { + case CaplinEnums.BeaconBlocks: + return BeaconBlocks + case CaplinEnums.BlobSidecars: + return BlobSidecars + default: + return registeredTypes[ft] + } +} + +func (e Enum) FileName(from uint64, to uint64) string { + return SegmentFileName(e.Type().Versions().Current, from, to, e) +} + +func (e Enum) FileInfo(dir string, from uint64, to uint64) FileInfo { + f, _, _ := ParseFileName(dir, e.FileName(from, to)) + return f +} + +func (e Enum) HasIndexFiles(info FileInfo, logger log.Logger) bool { + return e.Type().HasIndexFiles(info, logger) +} + +func (e Enum) BuildIndexes(ctx context.Context, info FileInfo, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) error { + return e.Type().BuildIndexes(ctx, info, chainConfig, tmpDir, p, lvl, logger) +} + +func ParseEnum(s string) (Enum, bool) { + s = strings.ToLower(s) + switch s { + case "beaconblocks": + return CaplinEnums.BeaconBlocks, true + case "blobsidecars": + return CaplinEnums.BlobSidecars, true + default: + if t, ok := namedTypes[s]; ok { + return t.Enum(), true + } + return Enums{}.Unknown, false + } +} + +// Idx - iterate over segment and building .idx file +func BuildIndex(ctx context.Context, info FileInfo, salt uint32, firstDataId uint64, tmpDir string, lvl log.Lvl, p *background.Progress, walker func(idx *recsplit.RecSplit, i, offset uint64, word []byte) error, logger log.Logger) (err error) { + defer func() { + if rec := recover(); rec != nil { + err = fmt.Errorf("index panic: at=%s, %v, %s", info.Name(), rec, dbg.Stack()) + } + }() + + d, err := seg.NewDecompressor(info.Path) + + if err != nil { + return fmt.Errorf("can't open %s for indexing: %w", info.Name(), err) + } + + defer d.Close() + + if p != nil { + fname := info.Name() + p.Name.Store(&fname) + p.Total.Store(uint64(d.Count())) + } + + rs, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ + KeyCount: d.Count(), + Enums: true, + BucketSize: 2000, + LeafSize: 8, + TmpDir: tmpDir, + IndexFile: filepath.Join(info.Dir(), info.Type.IdxFileName(info.Version, info.From, info.To)), + BaseDataID: firstDataId, + Salt: salt, + }, logger) + if err != nil { + return err + } + rs.LogLvl(log.LvlDebug) + + defer d.EnableMadvNormal().DisableReadAhead() + + for { + g := d.MakeGetter() + var i, offset, nextPos uint64 + word := make([]byte, 0, 4096) + + for g.HasNext() { + word, nextPos = g.Next(word[:0]) + if err := walker(rs, i, offset, word); err != nil { + return err + } + i++ + offset = nextPos + + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + } + + if err = rs.Build(ctx); err != nil { + if errors.Is(err, recsplit.ErrCollision) { + logger.Info("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) + rs.ResetNextSalt() + continue + } + return err + } + + return nil + } +} + +func ExtractRange(ctx context.Context, f FileInfo, extractor RangeExtractor, firstKey FirstKeyGetter, chainDB kv.RoDB, chainConfig *chain.Config, tmpDir string, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + var lastKeyValue uint64 + + sn, err := seg.NewCompressor(ctx, "Snapshot "+f.Type.Name(), f.Path, tmpDir, seg.MinPatternScore, workers, log.LvlTrace, logger) + + if err != nil { + return lastKeyValue, err + } + defer sn.Close() + + lastKeyValue, err = extractor.Extract(ctx, f.From, f.To, firstKey, chainDB, chainConfig, func(v []byte) error { + return sn.AddWord(v) + }, workers, lvl, logger) + + if err != nil { + return lastKeyValue, fmt.Errorf("ExtractRange: %w", err) + } + + ext := filepath.Ext(f.Name()) + logger.Log(lvl, "[snapshots] Compression start", "file", f.Name()[:len(f.Name())-len(ext)], "workers", sn.Workers()) + + if err := sn.Compress(); err != nil { + return lastKeyValue, fmt.Errorf("compress: %w", err) + } + + p := &background.Progress{} + + if err := f.Type.BuildIndexes(ctx, f, chainConfig, tmpDir, p, lvl, logger); err != nil { + return lastKeyValue, err + } + + return lastKeyValue, nil +} diff --git a/erigon-lib/downloader/torrent_files.go b/erigon-lib/downloader/torrent_files.go index 51d1c8ddd1a..4007713c5f9 100644 --- a/erigon-lib/downloader/torrent_files.go +++ b/erigon-lib/downloader/torrent_files.go @@ -1,57 +1,83 @@ package downloader import ( + "encoding/json" "fmt" + "io" "os" "path/filepath" + "slices" + "strings" "sync" "github.com/anacrolix/torrent" "github.com/anacrolix/torrent/metainfo" - dir2 "github.com/ledgerwatch/erigon-lib/common/dir" + "github.com/ledgerwatch/erigon-lib/common/dir" ) -// TorrentFiles - does provide thread-safe CRUD operations on .torrent files -type TorrentFiles struct { +// AtomicTorrentFS - does provide thread-safe CRUD operations on .torrent files +type AtomicTorrentFS struct { lock sync.Mutex dir string } -func NewAtomicTorrentFiles(dir string) *TorrentFiles { - return &TorrentFiles{dir: dir} +func NewAtomicTorrentFS(dir string) *AtomicTorrentFS { + return &AtomicTorrentFS{dir: dir} } -func (tf *TorrentFiles) Exists(name string) bool { +func (tf *AtomicTorrentFS) Exists(name string) bool { tf.lock.Lock() defer tf.lock.Unlock() return tf.exists(name) } -func (tf *TorrentFiles) exists(name string) bool { - fPath := filepath.Join(tf.dir, name) - return dir2.FileExist(fPath + ".torrent") +func (tf *AtomicTorrentFS) exists(name string) bool { + if !strings.HasSuffix(name, ".torrent") { + name += ".torrent" + } + return dir.FileExist(filepath.Join(tf.dir, name)) } -func (tf *TorrentFiles) Delete(name string) error { +func (tf *AtomicTorrentFS) Delete(name string) error { tf.lock.Lock() defer tf.lock.Unlock() return tf.delete(name) } -func (tf *TorrentFiles) delete(name string) error { - fPath := filepath.Join(tf.dir, name) - return os.Remove(fPath + ".torrent") +func (tf *AtomicTorrentFS) delete(name string) error { + if !strings.HasSuffix(name, ".torrent") { + name += ".torrent" + } + return os.Remove(filepath.Join(tf.dir, name)) } -func (tf *TorrentFiles) Create(torrentFilePath string, res []byte) error { +func (tf *AtomicTorrentFS) Create(name string, res []byte) (ts *torrent.TorrentSpec, created bool, err error) { tf.lock.Lock() defer tf.lock.Unlock() - return tf.create(torrentFilePath, res) + + if !tf.exists(name) { + err = tf.create(name, res) + if err != nil { + return nil, false, err + } + } + + ts, err = tf.load(filepath.Join(tf.dir, name)) + if err != nil { + return nil, false, err + } + return ts, false, nil } -func (tf *TorrentFiles) create(torrentFilePath string, res []byte) error { + +func (tf *AtomicTorrentFS) create(name string, res []byte) error { + if !strings.HasSuffix(name, ".torrent") { + name += ".torrent" + } if len(res) == 0 { - return fmt.Errorf("try to write 0 bytes to file: %s", torrentFilePath) + return fmt.Errorf("try to write 0 bytes to file: %s", name) } - f, err := os.Create(torrentFilePath) + + fPath := filepath.Join(tf.dir, name) + f, err := os.Create(fPath + ".tmp") if err != nil { return err } @@ -62,15 +88,17 @@ func (tf *TorrentFiles) create(torrentFilePath string, res []byte) error { if err = f.Sync(); err != nil { return err } + if err := f.Close(); err != nil { + return err + } + if err := os.Rename(fPath+".tmp", fPath); err != nil { + return err + } + return nil } -func (tf *TorrentFiles) CreateTorrentFromMetaInfo(fPath string, mi *metainfo.MetaInfo) error { - tf.lock.Lock() - defer tf.lock.Unlock() - return tf.createTorrentFromMetaInfo(fPath, mi) -} -func (tf *TorrentFiles) createTorrentFromMetaInfo(fPath string, mi *metainfo.MetaInfo) error { +func (tf *AtomicTorrentFS) createFromMetaInfo(fPath string, mi *metainfo.MetaInfo) error { file, err := os.Create(fPath + ".tmp") if err != nil { return err @@ -91,20 +119,44 @@ func (tf *TorrentFiles) createTorrentFromMetaInfo(fPath string, mi *metainfo.Met return nil } -func (tf *TorrentFiles) LoadByName(fName string) (*torrent.TorrentSpec, error) { +func (tf *AtomicTorrentFS) CreateWithMetaInfo(info *metainfo.Info, additionalMetaInfo *metainfo.MetaInfo) (created bool, err error) { + name := info.Name + if !strings.HasSuffix(name, ".torrent") { + name += ".torrent" + } + mi, err := CreateMetaInfo(info, additionalMetaInfo) + if err != nil { + return false, err + } + tf.lock.Lock() defer tf.lock.Unlock() - fPath := filepath.Join(tf.dir, fName+".torrent") - return tf.load(fPath) + + if tf.exists(name) { + return false, nil + } + if err = tf.createFromMetaInfo(filepath.Join(tf.dir, name), mi); err != nil { + return false, err + } + return true, nil +} + +func (tf *AtomicTorrentFS) LoadByName(name string) (*torrent.TorrentSpec, error) { + tf.lock.Lock() + defer tf.lock.Unlock() + return tf.load(filepath.Join(tf.dir, name)) } -func (tf *TorrentFiles) LoadByPath(fPath string) (*torrent.TorrentSpec, error) { +func (tf *AtomicTorrentFS) LoadByPath(fPath string) (*torrent.TorrentSpec, error) { tf.lock.Lock() defer tf.lock.Unlock() return tf.load(fPath) } -func (tf *TorrentFiles) load(fPath string) (*torrent.TorrentSpec, error) { +func (tf *AtomicTorrentFS) load(fPath string) (*torrent.TorrentSpec, error) { + if !strings.HasSuffix(fPath, ".torrent") { + fPath += ".torrent" + } mi, err := metainfo.LoadFromFile(fPath) if err != nil { return nil, fmt.Errorf("LoadFromFile: %w, file=%s", err, fPath) @@ -112,3 +164,84 @@ func (tf *TorrentFiles) load(fPath string) (*torrent.TorrentSpec, error) { mi.AnnounceList = Trackers return torrent.TorrentSpecFromMetaInfoErr(mi) } + +const ProhibitNewDownloadsFileName = "prohibit_new_downloads.lock" + +// Erigon "download once" - means restart/upgrade/downgrade will not download files (and will be fast) +// After "download once" - Erigon will produce and seed new files +// Downloader will able: seed new files (already existing on FS), download uncomplete parts of existing files (if Verify found some bad parts) +func (tf *AtomicTorrentFS) ProhibitNewDownloads(t string) error { + tf.lock.Lock() + defer tf.lock.Unlock() + return tf.prohibitNewDownloads(t) +} + +func (tf *AtomicTorrentFS) prohibitNewDownloads(t string) error { + // open or create file ProhibitNewDownloadsFileName + f, err := os.OpenFile(filepath.Join(tf.dir, ProhibitNewDownloadsFileName), os.O_CREATE|os.O_RDONLY, 0644) + if err != nil { + return fmt.Errorf("open file: %w", err) + } + defer f.Close() + var prohibitedList []string + torrentListJsonBytes, err := io.ReadAll(f) + if err != nil { + return fmt.Errorf("read file: %w", err) + } + if len(torrentListJsonBytes) > 0 { + if err := json.Unmarshal(torrentListJsonBytes, &prohibitedList); err != nil { + return fmt.Errorf("unmarshal: %w", err) + } + } + if slices.Contains(prohibitedList, t) { + return nil + } + prohibitedList = append(prohibitedList, t) + f.Close() + + // write new prohibited list by opening the file in truncate mode + f, err = os.OpenFile(filepath.Join(tf.dir, ProhibitNewDownloadsFileName), os.O_TRUNC|os.O_WRONLY, 0644) + if err != nil { + return fmt.Errorf("open file for writing: %w", err) + } + defer f.Close() + prohibitedListJsonBytes, err := json.Marshal(prohibitedList) + if err != nil { + return fmt.Errorf("marshal: %w", err) + } + if _, err := f.Write(prohibitedListJsonBytes); err != nil { + return fmt.Errorf("write: %w", err) + } + + return f.Sync() +} + +func (tf *AtomicTorrentFS) NewDownloadsAreProhibited(name string) (bool, error) { + tf.lock.Lock() + defer tf.lock.Unlock() + return tf.newDownloadsAreProhibited(name) +} + +func (tf *AtomicTorrentFS) newDownloadsAreProhibited(name string) (bool, error) { + f, err := os.OpenFile(filepath.Join(tf.dir, ProhibitNewDownloadsFileName), os.O_CREATE|os.O_RDONLY, 0644) + if err != nil { + return false, err + } + defer f.Close() + var prohibitedList []string + torrentListJsonBytes, err := io.ReadAll(f) + if err != nil { + return false, fmt.Errorf("NewDownloadsAreProhibited: read file: %w", err) + } + if len(torrentListJsonBytes) > 0 { + if err := json.Unmarshal(torrentListJsonBytes, &prohibitedList); err != nil { + return false, fmt.Errorf("NewDownloadsAreProhibited: unmarshal: %w", err) + } + } + for _, p := range prohibitedList { + if strings.Contains(name, p) { + return true, nil + } + } + return false, nil +} diff --git a/erigon-lib/downloader/util.go b/erigon-lib/downloader/util.go index b7ee2525756..c6dd54dd611 100644 --- a/erigon-lib/downloader/util.go +++ b/erigon-lib/downloader/util.go @@ -20,27 +20,26 @@ import ( "bytes" "context" "crypto/sha1" + "encoding/json" "fmt" "io" "os" "path/filepath" - "regexp" "runtime" - "strconv" + "strings" "sync/atomic" "time" "github.com/anacrolix/torrent" "github.com/anacrolix/torrent/bencode" "github.com/anacrolix/torrent/metainfo" - "github.com/anacrolix/torrent/mmap_span" - "github.com/anacrolix/torrent/storage" - "github.com/edsrzf/mmap-go" "github.com/ledgerwatch/log/v3" "golang.org/x/sync/errgroup" + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" common2 "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" + "github.com/ledgerwatch/erigon-lib/common/dbg" dir2 "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/downloader/downloadercfg" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" @@ -50,13 +49,10 @@ import ( // udpOrHttpTrackers - torrent library spawning several goroutines and producing many requests for each tracker. So we limit amout of trackers by 8 var udpOrHttpTrackers = []string{ "udp://tracker.opentrackr.org:1337/announce", - "udp://9.rarbg.com:2810/announce", "udp://tracker.openbittorrent.com:6969/announce", - "http://tracker.openbittorrent.com:80/announce", "udp://opentracker.i2p.rocks:6969/announce", - "https://opentracker.i2p.rocks:443/announce", "udp://tracker.torrent.eu.org:451/announce", - "udp://tracker.moeking.me:6969/announce", + "udp://open.stealth.si:80/announce", } // nolint @@ -70,22 +66,31 @@ var Trackers = [][]string{ //websocketTrackers // TODO: Ws protocol producing too many errors and flooding logs. But it's also very fast and reactive. } -func seedableSegmentFiles(dir string) ([]string, error) { - files, err := dir2.ListFiles(dir, ".seg") +type torrentInfo struct { + Name string `json:"name"` + Hash []byte `json:"hash"` + Length *int64 `json:"length,omitempty"` + Created *time.Time `json:"created,omitempty"` + Completed *time.Time `json:"completed,omitempty"` +} + +func seedableSegmentFiles(dir string, chainName string) ([]string, error) { + files, err := dir2.ListFiles(dir, snaptype.SeedableV2Extensions()...) if err != nil { return nil, err } res := make([]string, 0, len(files)) for _, fPath := range files { + _, name := filepath.Split(fPath) if !snaptype.IsCorrectFileName(name) { continue } - ff, ok := snaptype.ParseFileName(dir, name) + ff, _, ok := snaptype.ParseFileName(dir, name) if !ok { continue } - if !ff.Seedable() { + if !snapcfg.Seedable(chainName, ff) { continue } res = append(res, name) @@ -93,19 +98,17 @@ func seedableSegmentFiles(dir string) ([]string, error) { return res, nil } -var historyFileRegex = regexp.MustCompile("^([[:lower:]]+).([0-9]+)-([0-9]+).(.*)$") - -func seedableSnapshotsBySubDir(dir, subDir string) ([]string, error) { +func seedableStateFilesBySubDir(dir, subDir string) ([]string, error) { historyDir := filepath.Join(dir, subDir) dir2.MustExist(historyDir) - files, err := dir2.ListFiles(historyDir, ".kv", ".v", ".ef") + files, err := dir2.ListFiles(historyDir, snaptype.SeedableV3Extensions()...) if err != nil { return nil, err } res := make([]string, 0, len(files)) for _, fPath := range files { _, name := filepath.Split(fPath) - if !e3seedable(name) { + if !snaptype.E3Seedable(name) { continue } res = append(res, filepath.Join(subDir, name)) @@ -113,25 +116,6 @@ func seedableSnapshotsBySubDir(dir, subDir string) ([]string, error) { return res, nil } -func e3seedable(name string) bool { - subs := historyFileRegex.FindStringSubmatch(name) - if len(subs) != 5 { - return false - } - // Check that it's seedable - from, err := strconv.ParseUint(subs[2], 10, 64) - if err != nil { - return false - } - to, err := strconv.ParseUint(subs[3], 10, 64) - if err != nil { - return false - } - if (to-from)%snaptype.Erigon3SeedableSteps != 0 { - return false - } - return true -} func ensureCantLeaveDir(fName, root string) (string, error) { if filepath.IsAbs(fName) { newFName, err := filepath.Rel(root, fName) @@ -149,56 +133,67 @@ func ensureCantLeaveDir(fName, root string) (string, error) { return fName, nil } -func BuildTorrentIfNeed(ctx context.Context, fName, root string, torrentFiles *TorrentFiles) (err error) { +func BuildTorrentIfNeed(ctx context.Context, fName, root string, torrentFiles *AtomicTorrentFS) (ok bool, err error) { select { case <-ctx.Done(): - return ctx.Err() + return false, ctx.Err() default: } fName, err = ensureCantLeaveDir(fName, root) if err != nil { - return err + return false, err } if torrentFiles.Exists(fName) { - return nil + return false, nil } fPath := filepath.Join(root, fName) if !dir2.FileExist(fPath) { - return nil + return false, nil } info := &metainfo.Info{PieceLength: downloadercfg.DefaultPieceSize, Name: fName} if err := info.BuildFromFilePath(fPath); err != nil { - return fmt.Errorf("createTorrentFileFromSegment: %w", err) + return false, fmt.Errorf("createTorrentFileFromSegment: %w", err) } info.Name = fName - return CreateTorrentFileFromInfo(root, info, nil, torrentFiles) + return torrentFiles.CreateWithMetaInfo(info, nil) } // BuildTorrentFilesIfNeed - create .torrent files from .seg files (big IO) - if .seg files were added manually -func BuildTorrentFilesIfNeed(ctx context.Context, dirs datadir.Dirs, torrentFiles *TorrentFiles) error { +func BuildTorrentFilesIfNeed(ctx context.Context, dirs datadir.Dirs, torrentFiles *AtomicTorrentFS, chain string, ignore snapcfg.Preverified) (int, error) { logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() - files, err := seedableFiles(dirs) + files, err := SeedableFiles(dirs, chain) if err != nil { - return err + return 0, err } g, ctx := errgroup.WithContext(ctx) - g.SetLimit(runtime.GOMAXPROCS(-1) * 4) + g.SetLimit(runtime.GOMAXPROCS(-1) * 16) var i atomic.Int32 + var createdAmount atomic.Int32 for _, file := range files { file := file + + if ignore.Contains(file) { + i.Add(1) + continue + } + g.Go(func() error { defer i.Add(1) - if err := BuildTorrentIfNeed(ctx, file, dirs.Snap, torrentFiles); err != nil { + ok, err := BuildTorrentIfNeed(ctx, file, dirs.Snap, torrentFiles) + if err != nil { return err } + if ok { + createdAmount.Add(1) + } return nil }) } @@ -216,19 +211,9 @@ Loop: } } if err := g.Wait(); err != nil { - return err - } - return nil -} - -func CreateTorrentFileIfNotExists(root string, info *metainfo.Info, mi *metainfo.MetaInfo, torrentFiles *TorrentFiles) error { - if torrentFiles.Exists(info.Name) { - return nil - } - if err := CreateTorrentFileFromInfo(root, info, mi, torrentFiles); err != nil { - return err + return int(createdAmount.Load()), err } - return nil + return int(createdAmount.Load()), nil } func CreateMetaInfo(info *metainfo.Info, mi *metainfo.MetaInfo) (*metainfo.MetaInfo, error) { @@ -248,14 +233,6 @@ func CreateMetaInfo(info *metainfo.Info, mi *metainfo.MetaInfo) (*metainfo.MetaI } return mi, nil } -func CreateTorrentFileFromInfo(root string, info *metainfo.Info, mi *metainfo.MetaInfo, torrentFiles *TorrentFiles) (err error) { - mi, err = CreateMetaInfo(info, mi) - if err != nil { - return err - } - fPath := filepath.Join(root, info.Name+".torrent") - return torrentFiles.CreateTorrentFromMetaInfo(fPath, mi) -} func AllTorrentPaths(dirs datadir.Dirs) ([]string, error) { files, err := dir2.ListFiles(dirs.Snap, ".torrent") @@ -270,7 +247,7 @@ func AllTorrentPaths(dirs datadir.Dirs) ([]string, error) { return files, nil } -func AllTorrentSpecs(dirs datadir.Dirs, torrentFiles *TorrentFiles) (res []*torrent.TorrentSpec, err error) { +func AllTorrentSpecs(dirs datadir.Dirs, torrentFiles *AtomicTorrentFS) (res []*torrent.TorrentSpec, err error) { files, err := AllTorrentPaths(dirs) if err != nil { return nil, err @@ -288,11 +265,23 @@ func AllTorrentSpecs(dirs datadir.Dirs, torrentFiles *TorrentFiles) (res []*torr return res, nil } +// if $DOWNLOADER_ONLY_BLOCKS!="" filters out all non-v1 snapshots +func IsSnapNameAllowed(name string) bool { + if dbg.DownloaderOnlyBlocks { + for _, p := range []string{"domain", "history", "idx"} { + if strings.HasPrefix(name, p) { + return false + } + } + } + return true +} + // addTorrentFile - adding .torrent file to torrentClient (and checking their hashes), if .torrent file // added first time - pieces verification process will start (disk IO heavy) - Progress // kept in `piece completion storage` (surviving reboot). Once it done - no disk IO needed again. // Don't need call torrent.VerifyData manually -func addTorrentFile(ctx context.Context, ts *torrent.TorrentSpec, torrentClient *torrent.Client, webseeds *WebSeeds) (t *torrent.Torrent, ok bool, err error) { +func addTorrentFile(ctx context.Context, ts *torrent.TorrentSpec, torrentClient *torrent.Client, db kv.RwDB, webseeds *WebSeeds) (t *torrent.Torrent, ok bool, err error) { ts.ChunkSize = downloadercfg.DefaultNetworkChunkSize ts.DisallowDataDownload = true ts.DisableInitialPieceCheck = true @@ -301,49 +290,140 @@ func addTorrentFile(ctx context.Context, ts *torrent.TorrentSpec, torrentClient rec := recover() if rec != nil { ts.ChunkSize = 0 - t, ok, err = _addTorrentFile(ctx, ts, torrentClient, webseeds) + t, ok, err = _addTorrentFile(ctx, ts, torrentClient, db, webseeds) } }() - t, ok, err = _addTorrentFile(ctx, ts, torrentClient, webseeds) + t, ok, err = _addTorrentFile(ctx, ts, torrentClient, db, webseeds) + if err != nil { ts.ChunkSize = 0 - return _addTorrentFile(ctx, ts, torrentClient, webseeds) + return _addTorrentFile(ctx, ts, torrentClient, db, webseeds) } return t, ok, err } -func _addTorrentFile(ctx context.Context, ts *torrent.TorrentSpec, torrentClient *torrent.Client, webseeds *WebSeeds) (t *torrent.Torrent, ok bool, err error) { +func _addTorrentFile(ctx context.Context, ts *torrent.TorrentSpec, torrentClient *torrent.Client, db kv.RwDB, webseeds *WebSeeds) (t *torrent.Torrent, ok bool, err error) { select { case <-ctx.Done(): return nil, false, ctx.Err() default: } - + if !IsSnapNameAllowed(ts.DisplayName) { + return nil, false, nil + } ts.Webseeds, _ = webseeds.ByFileName(ts.DisplayName) var have bool t, have = torrentClient.Torrent(ts.InfoHash) + if !have { t, _, err := torrentClient.AddTorrentSpec(ts) if err != nil { return nil, false, fmt.Errorf("addTorrentFile %s: %w", ts.DisplayName, err) } + + if t.Complete.Bool() { + if err := db.Update(ctx, torrentInfoUpdater(ts.DisplayName, ts.InfoHash.Bytes(), 0, nil)); err != nil { + return nil, false, fmt.Errorf("addTorrentFile %s: update failed: %w", ts.DisplayName, err) + } + } else { + t.AddWebSeeds(ts.Webseeds) + if err := db.Update(ctx, torrentInfoReset(ts.DisplayName, ts.InfoHash.Bytes(), 0)); err != nil { + return nil, false, fmt.Errorf("addTorrentFile %s: reset failed: %w", ts.DisplayName, err) + } + } + return t, true, nil } - select { - case <-t.GotInfo(): + if t.Info() != nil { t.AddWebSeeds(ts.Webseeds) - default: + if err := db.Update(ctx, torrentInfoUpdater(ts.DisplayName, ts.InfoHash.Bytes(), t.Info().Length, nil)); err != nil { + return nil, false, fmt.Errorf("update torrent info %s: %w", ts.DisplayName, err) + } + } else { t, _, err = torrentClient.AddTorrentSpec(ts) if err != nil { - return nil, false, fmt.Errorf("addTorrentFile %s: %w", ts.DisplayName, err) + return nil, false, fmt.Errorf("add torrent file %s: %w", ts.DisplayName, err) } + + db.Update(ctx, torrentInfoUpdater(ts.DisplayName, ts.InfoHash.Bytes(), 0, nil)) } return t, true, nil } +func torrentInfoUpdater(fileName string, infoHash []byte, length int64, completionTime *time.Time) func(tx kv.RwTx) error { + return func(tx kv.RwTx) error { + infoBytes, err := tx.GetOne(kv.BittorrentInfo, []byte(fileName)) + + if err != nil { + return err + } + + var info torrentInfo + + err = json.Unmarshal(infoBytes, &info) + + changed := false + + if err != nil || (len(infoHash) > 0 && !bytes.Equal(info.Hash, infoHash)) { + now := time.Now() + info.Name = fileName + info.Hash = infoHash + info.Created = &now + info.Completed = nil + changed = true + } + + if length > 0 && (info.Length == nil || *info.Length != length) { + info.Length = &length + changed = true + } + + if completionTime != nil { + info.Completed = completionTime + changed = true + } + + if !changed { + return nil + } + + infoBytes, err = json.Marshal(info) + + if err != nil { + return err + } + + return tx.Put(kv.BittorrentInfo, []byte(fileName), infoBytes) + } +} + +func torrentInfoReset(fileName string, infoHash []byte, length int64) func(tx kv.RwTx) error { + return func(tx kv.RwTx) error { + now := time.Now() + + info := torrentInfo{ + Name: fileName, + Hash: infoHash, + Created: &now, + } + + if length > 0 { + info.Length = &length + } + + infoBytes, err := json.Marshal(info) + + if err != nil { + return err + } + + return tx.Put(kv.BittorrentInfo, []byte(fileName), infoBytes) + } +} + func savePeerID(db kv.RwDB, peerID torrent.PeerID) error { return db.Update(context.Background(), func(tx kv.RwTx) error { return tx.Put(kv.BittorrentInfo, []byte(kv.BittorrentPeerID), peerID[:]) @@ -370,41 +450,75 @@ func IsLocal(path string) bool { } func ScheduleVerifyFile(ctx context.Context, t *torrent.Torrent, completePieces *atomic.Uint64) error { + ctx, cancel := context.WithCancel(ctx) + wg, wgctx := errgroup.WithContext(ctx) + wg.SetLimit(16) + + // piece changes happen asynchronously - we need to wait from them to complete + pieceChanges := t.SubscribePieceStateChanges() + inprogress := map[int]struct{}{} + for i := 0; i < t.NumPieces(); i++ { - t.Piece(i).VerifyData() + inprogress[i] = struct{}{} - completePieces.Add(1) + i := i + wg.Go(func() error { + t.Piece(i).VerifyData() + return nil + }) + } + + for { select { - case <-ctx.Done(): - return ctx.Err() - default: + case <-wgctx.Done(): + cancel() + return wg.Wait() + case change := <-pieceChanges.Values: + if !change.Ok { + var err error + + if change.Err != nil { + err = change.Err + } else { + err = fmt.Errorf("unexpected piece change error") + } + + cancel() + return fmt.Errorf("piece %s:%d verify failed: %w", t.Name(), change.Index, err) + } + + if change.Complete && !(change.Checking || change.Hashing || change.QueuedForHash || change.Marking) { + completePieces.Add(1) + delete(inprogress, change.Index) + } + + if len(inprogress) == 0 { + cancel() + return wg.Wait() + } } } - return nil } func VerifyFileFailFast(ctx context.Context, t *torrent.Torrent, root string, completePieces *atomic.Uint64) error { - span := new(mmap_span.MMapSpan) - defer span.Close() info := t.Info() - for _, file := range info.UpvertedFiles() { - filename := filepath.Join(append([]string{root, info.Name}, file.Path...)...) - mm, err := mmapFile(filename) + file := info.UpvertedFiles()[0] + fPath := filepath.Join(append([]string{root, info.Name}, file.Path...)...) + f, err := os.Open(fPath) + if err != nil { + return err + } + defer func() { if err != nil { - return err - } - if int64(len(mm.Bytes())) != file.Length { - return fmt.Errorf("file %q has wrong length", filename) + f.Close() } - span.Append(mm) - } - span.InitIndex() + }() hasher := sha1.New() for i := 0; i < info.NumPieces(); i++ { p := info.Piece(i) hasher.Reset() - _, err := io.Copy(hasher, io.NewSectionReader(span, p.Offset(), p.Length())) + _, err := io.Copy(hasher, io.NewSectionReader(f, p.Offset(), p.Length())) if err != nil { return err } @@ -422,27 +536,3 @@ func VerifyFileFailFast(ctx context.Context, t *torrent.Torrent, root string, co } return nil } - -func mmapFile(name string) (mm storage.FileMapping, err error) { - f, err := os.Open(name) - if err != nil { - return - } - defer func() { - if err != nil { - f.Close() - } - }() - fi, err := f.Stat() - if err != nil { - return - } - if fi.Size() == 0 { - return - } - reg, err := mmap.MapRegion(f, -1, mmap.RDONLY, mmap.COPY, 0) - if err != nil { - return - } - return storage.WrapFileMapping(reg, f), nil -} diff --git a/erigon-lib/downloader/webseed.go b/erigon-lib/downloader/webseed.go index f6433103356..579fd09e7e7 100644 --- a/erigon-lib/downloader/webseed.go +++ b/erigon-lib/downloader/webseed.go @@ -3,26 +3,24 @@ package downloader import ( "bytes" "context" + "errors" "fmt" "io" "net/http" "net/url" "os" "path/filepath" + "sort" "strings" "sync" - "github.com/aws/aws-sdk-go-v2/aws" - "github.com/aws/aws-sdk-go-v2/config" - "github.com/aws/aws-sdk-go-v2/credentials" - "github.com/aws/aws-sdk-go-v2/service/s3" + "github.com/anacrolix/torrent" "github.com/c2h5oh/datasize" "github.com/ledgerwatch/erigon-lib/chain/snapcfg" "golang.org/x/sync/errgroup" "github.com/anacrolix/torrent/bencode" "github.com/anacrolix/torrent/metainfo" - "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/log/v3" "github.com/pelletier/go-toml/v2" @@ -37,48 +35,316 @@ type WebSeeds struct { torrentUrls snaptype.TorrentUrls // HTTP urls of .torrent files downloadTorrentFile bool torrentsWhitelist snapcfg.Preverified + seeds []*url.URL logger log.Logger verbosity log.Lvl - torrentFiles *TorrentFiles + torrentFiles *AtomicTorrentFS } -func (d *WebSeeds) Discover(ctx context.Context, s3tokens []string, urls []*url.URL, files []string, rootDir string) { - d.downloadWebseedTomlFromProviders(ctx, s3tokens, urls, files) - d.downloadTorrentFilesFromProviders(ctx, rootDir) +func NewWebSeeds(seeds []*url.URL, verbosity log.Lvl, logger log.Logger) *WebSeeds { + return &WebSeeds{ + seeds: seeds, + logger: logger, + verbosity: verbosity, + } } -func (d *WebSeeds) downloadWebseedTomlFromProviders(ctx context.Context, s3Providers []string, httpProviders []*url.URL, diskProviders []string) { - log.Debug("[snapshots] webseed providers", "http", len(httpProviders), "s3", len(s3Providers), "disk", len(diskProviders)) - list := make([]snaptype.WebSeedsFromProvider, 0, len(httpProviders)+len(diskProviders)) - for _, webSeedProviderURL := range httpProviders { +func (d *WebSeeds) getWebDownloadInfo(ctx context.Context, t *torrent.Torrent) (infos []webDownloadInfo, seedHashMismatches []*seedHash, err error) { + torrentHash := t.InfoHash().Bytes() + + for _, webseed := range d.seeds { + downloadUrl := webseed.JoinPath(t.Name()) + + if headRequest, err := http.NewRequestWithContext(ctx, http.MethodHead, downloadUrl.String(), nil); err == nil { + insertCloudflareHeaders(headRequest) + + headResponse, err := http.DefaultClient.Do(headRequest) + if err != nil { + continue + } + headResponse.Body.Close() + + if headResponse.StatusCode != http.StatusOK { + d.logger.Debug("[snapshots.webseed] getWebDownloadInfo: HEAD request failed", + "webseed", webseed.String(), "name", t.Name(), "status", headResponse.Status) + continue + } + if meta, err := getWebpeerTorrentInfo(ctx, downloadUrl); err == nil { + if bytes.Equal(torrentHash, meta.HashInfoBytes().Bytes()) { + md5tag := headResponse.Header.Get("Etag") + if md5tag != "" { + md5tag = strings.Trim(md5tag, "\"") + } + + infos = append(infos, webDownloadInfo{ + url: downloadUrl, + length: headResponse.ContentLength, + md5: md5tag, + torrent: t, + }) + } else { + hash := meta.HashInfoBytes() + seedHashMismatches = append(seedHashMismatches, &seedHash{url: webseed, hash: &hash}) + } + } + } + seedHashMismatches = append(seedHashMismatches, &seedHash{url: webseed}) + } + + return infos, seedHashMismatches, nil +} + +func (d *WebSeeds) SetTorrent(torrentFS *AtomicTorrentFS, whiteList snapcfg.Preverified, downloadTorrentFile bool) { + d.downloadTorrentFile = downloadTorrentFile + d.torrentsWhitelist = whiteList + d.torrentFiles = torrentFS +} + +func (d *WebSeeds) checkHasTorrents(manifestResponse snaptype.WebSeedsFromProvider, report *WebSeedCheckReport) { + // check that for each file in the manifest, there is a corresponding .torrent file + torrentNames := make(map[string]struct{}) + for name := range manifestResponse { + if strings.HasSuffix(name, ".torrent") { + torrentNames[name] = struct{}{} + } + } + hasTorrents := len(torrentNames) > 0 + report.missingTorrents = make([]string, 0) + for name := range manifestResponse { + // skip non-seedable files. maybe will need extend list of seedable files in future. + if !snaptype.IsSeedableExtension(name) { + continue + } + tname := name + ".torrent" + if _, ok := torrentNames[tname]; !ok { + report.missingTorrents = append(report.missingTorrents, name) + continue + } + delete(torrentNames, tname) + } + + if len(torrentNames) > 0 { + report.danglingTorrents = make([]string, 0, len(torrentNames)) + for file := range torrentNames { + report.danglingTorrents = append(report.danglingTorrents, file) + } + } + report.torrentsOK = len(report.missingTorrents) == 0 && len(report.danglingTorrents) == 0 && hasTorrents +} + +func (d *WebSeeds) fetchFileEtags(ctx context.Context, manifestResponse snaptype.WebSeedsFromProvider) (tags map[string]string, invalidTags, etagFetchFailed []string, err error) { + etagFetchFailed = make([]string, 0) + tags = make(map[string]string) + invalidTagsMap := make(map[string]string) + + for name, wurl := range manifestResponse { + u, err := url.Parse(wurl) + if err != nil { + return nil, nil, nil, fmt.Errorf("webseed.fetchFileEtags: %w", err) + } + md5Tag, err := d.retrieveFileEtag(ctx, u) + if err != nil { + if errors.Is(err, ErrInvalidEtag) { + invalidTagsMap[name] = md5Tag + continue + } + if errors.Is(err, ErrEtagNotFound) { + etagFetchFailed = append(etagFetchFailed, name) + continue + } + d.logger.Debug("[snapshots.webseed] get file ETag", "err", err, "url", u.String()) + return nil, nil, nil, fmt.Errorf("webseed.fetchFileEtags: %w", err) + } + tags[name] = md5Tag + } + + invalidTags = make([]string, 0) + if len(invalidTagsMap) > 0 { + for name, tag := range invalidTagsMap { + invalidTags = append(invalidTags, fmt.Sprintf("%-50s %s", name, tag)) + } + } + return tags, invalidTags, etagFetchFailed, nil +} + +func (d *WebSeeds) VerifyManifestedBuckets(ctx context.Context, failFast bool) error { + supErr := make([]error, 0, len(d.seeds)) + reports := make([]*WebSeedCheckReport, 0, len(d.seeds)) + + for _, webSeedProviderURL := range d.seeds { select { case <-ctx.Done(): - break + return ctx.Err() default: } - response, err := d.callHttpProvider(ctx, webSeedProviderURL) - if err != nil { // don't fail on error - d.logger.Debug("[snapshots.webseed] get from HTTP provider", "err", err, "url", webSeedProviderURL.EscapedPath()) + d.logger.Debug("[snapshots.webseed] verify manifest", "url", webSeedProviderURL.String()) + + rep, err := d.VerifyManifestedBucket(ctx, webSeedProviderURL) + if err != nil { + d.logger.Warn("[snapshots.webseed] verify manifest", "err", err) + if failFast { + return err + } else { + supErr = append(supErr, err) + } + } + + reports = append(reports, rep) + } + + failed := len(supErr) > 0 + + fmt.Println("-----------------------REPORTS OVERVIEW--------------------------") + for _, rep := range reports { + if !rep.OK() { + failed = true + } + fmt.Printf("%s\n", rep.ToString(false)) + } + if failed { + merr := "error list:\n" + for _, err := range supErr { + merr += fmt.Sprintf("%s\n", err) + } + return fmt.Errorf("webseed: some webseeds are not OK, details above| %s", merr) + } + return nil +} + +type WebSeedCheckReport struct { + seed *url.URL + manifestExist bool + torrentsOK bool + missingTorrents []string + danglingTorrents []string + totalEtags int + invalidEtags []string + etagFetchFailed []string +} + +func (w *WebSeedCheckReport) sort() { + sort.Strings(w.missingTorrents) + sort.Strings(w.invalidEtags) + sort.Strings(w.etagFetchFailed) + sort.Strings(w.danglingTorrents) +} + +func (w *WebSeedCheckReport) OK() bool { + return w.torrentsOK && w.manifestExist && len(w.invalidEtags) == 0 && len(w.etagFetchFailed) == 0 +} + +func (w *WebSeedCheckReport) ToString(full bool) string { + br := "BAD" + if w.OK() { + br = "OK" + } + + if !w.manifestExist { + return fmt.Sprintf("## REPORT [%s] on %s: manifest not found\n", br, w.seed) + } + w.sort() + var b strings.Builder + b.WriteString(fmt.Sprintf("## REPORT [%s] on %s\n", br, w.seed)) + b.WriteString(fmt.Sprintf(" - manifest exist: %t\n", w.manifestExist)) + b.WriteString(fmt.Sprintf(" - missing torrents (files without torrents): %d\n", len(w.missingTorrents))) + b.WriteString(fmt.Sprintf(" - dangling (data file not found) torrents: %d\n", len(w.danglingTorrents))) + b.WriteString(fmt.Sprintf(" - invalid ETags format: %d/%d\n", len(w.invalidEtags), w.totalEtags)) + b.WriteString(fmt.Sprintf(" - ETag fetch failed: %d/%d\n", len(w.etagFetchFailed), w.totalEtags)) + + if !full { + return b.String() + } + + titles := []string{ + "Missing torrents", + "Dangling torrents", + "Invalid ETags format", + "ETag fetch failed", + } + + fnamess := [][]string{ + w.missingTorrents, + w.danglingTorrents, + w.invalidEtags, + w.etagFetchFailed, + } + + for ti, names := range fnamess { + if len(names) == 0 { continue } - list = append(list, response) + if ti == 0 { + b.WriteByte(10) + } + b.WriteString(fmt.Sprintf("# %s\n", titles[ti])) + for _, name := range names { + b.WriteString(fmt.Sprintf("%s\n", name)) + } + if ti != len(fnamess)-1 { + b.WriteByte(10) + } + } + b.WriteString(fmt.Sprintf("SEED [%s] %s\n", br, w.seed.String())) + return b.String() +} + +func (d *WebSeeds) VerifyManifestedBucket(ctx context.Context, webSeedProviderURL *url.URL) (report *WebSeedCheckReport, err error) { + report = &WebSeedCheckReport{seed: webSeedProviderURL} + defer func() { fmt.Printf("%s\n", report.ToString(true)) }() + + manifestResponse, err := d.retrieveManifest(ctx, webSeedProviderURL) + report.manifestExist = len(manifestResponse) != 0 + if err != nil { + return report, err + } + + d.checkHasTorrents(manifestResponse, report) + remoteTags, invalidTags, noTags, err := d.fetchFileEtags(ctx, manifestResponse) + if err != nil { + return report, err } - for _, webSeedProviderURL := range s3Providers { + report.invalidEtags = invalidTags + report.etagFetchFailed = noTags + report.totalEtags = len(remoteTags) + len(noTags) + return report, nil +} + +func (d *WebSeeds) Discover(ctx context.Context, files []string, rootDir string) { + listsOfFiles := d.constructListsOfFiles(ctx, d.seeds, files) + torrentMap := d.makeTorrentUrls(listsOfFiles) + webSeedMap := d.downloadTorrentFilesFromProviders(ctx, rootDir, torrentMap) + d.makeWebSeedUrls(listsOfFiles, webSeedMap) +} + +func (d *WebSeeds) constructListsOfFiles(ctx context.Context, httpProviders []*url.URL, diskProviders []string) []snaptype.WebSeedsFromProvider { + log.Debug("[snapshots.webseed] providers", "http", len(httpProviders), "disk", len(diskProviders)) + listsOfFiles := make([]snaptype.WebSeedsFromProvider, 0, len(httpProviders)+len(diskProviders)) + + for _, webSeedProviderURL := range httpProviders { select { case <-ctx.Done(): - break + return listsOfFiles default: } - response, err := d.callS3Provider(ctx, webSeedProviderURL) + manifestResponse, err := d.retrieveManifest(ctx, webSeedProviderURL) if err != nil { // don't fail on error - d.logger.Debug("[snapshots.webseed] get from S3 provider", "err", err) + d.logger.Debug("[snapshots.webseed] get from HTTP provider", "err", err, "url", webSeedProviderURL.EscapedPath()) continue } - list = append(list, response) + // check if we need to prohibit new downloads for some files + for name := range manifestResponse { + prohibited, err := d.torrentFiles.NewDownloadsAreProhibited(name) + if prohibited || err != nil { + delete(manifestResponse, name) + } + } + + listsOfFiles = append(listsOfFiles, manifestResponse) } + // add to list files from disk for _, webSeedFile := range diskProviders { response, err := d.readWebSeedsFile(webSeedFile) @@ -86,14 +352,24 @@ func (d *WebSeeds) downloadWebseedTomlFromProviders(ctx context.Context, s3Provi d.logger.Debug("[snapshots.webseed] get from File provider", "err", err) continue } - list = append(list, response) + // check if we need to prohibit new downloads for some files + for name := range response { + prohibited, err := d.torrentFiles.NewDownloadsAreProhibited(name) + if prohibited || err != nil { + delete(response, name) + } + } + listsOfFiles = append(listsOfFiles, response) } + return listsOfFiles +} - webSeedUrls, torrentUrls := snaptype.WebSeedUrls{}, snaptype.TorrentUrls{} - for _, urls := range list { +func (d *WebSeeds) makeTorrentUrls(listsOfFiles []snaptype.WebSeedsFromProvider) map[url.URL]string { + torrentMap := map[url.URL]string{} + torrentUrls := snaptype.TorrentUrls{} + for _, urls := range listsOfFiles { for name, wUrl := range urls { if !strings.HasSuffix(name, ".torrent") { - webSeedUrls[name] = append(webSeedUrls[name], wUrl) continue } if !nameWhitelisted(name, d.torrentsWhitelist) { @@ -105,13 +381,32 @@ func (d *WebSeeds) downloadWebseedTomlFromProviders(ctx context.Context, s3Provi continue } torrentUrls[name] = append(torrentUrls[name], uri) + torrentMap[*uri] = strings.TrimSuffix(name, ".torrent") } } d.lock.Lock() defer d.lock.Unlock() - d.byFileName = webSeedUrls d.torrentUrls = torrentUrls + return torrentMap +} + +func (d *WebSeeds) makeWebSeedUrls(listsOfFiles []snaptype.WebSeedsFromProvider, webSeedMap map[string]struct{}) { + webSeedUrls := snaptype.WebSeedUrls{} + for _, urls := range listsOfFiles { + for name, wUrl := range urls { + if strings.HasSuffix(name, ".torrent") { + continue + } + if _, ok := webSeedMap[name]; ok { + webSeedUrls[name] = append(webSeedUrls[name], wUrl) + } + } + } + + d.lock.Lock() + d.byFileName = webSeedUrls + d.lock.Unlock() } func (d *WebSeeds) TorrentUrls() snaptype.TorrentUrls { @@ -132,86 +427,94 @@ func (d *WebSeeds) ByFileName(name string) (metainfo.UrlList, bool) { v, ok := d.byFileName[name] return v, ok } -func (d *WebSeeds) callHttpProvider(ctx context.Context, webSeedProviderUrl *url.URL) (snaptype.WebSeedsFromProvider, error) { - baseUrl := webSeedProviderUrl.String() - ref, err := url.Parse("manifest.txt") + +var ErrInvalidEtag = fmt.Errorf("invalid etag") +var ErrEtagNotFound = fmt.Errorf("not found") + +func (d *WebSeeds) retrieveFileEtag(ctx context.Context, file *url.URL) (string, error) { + request, err := http.NewRequest(http.MethodHead, file.String(), nil) if err != nil { - return nil, err - } - u := webSeedProviderUrl.ResolveReference(ref) - request, err := http.NewRequest(http.MethodGet, u.String(), nil) - if err != nil { - return nil, err + return "", err } request = request.WithContext(ctx) resp, err := http.DefaultClient.Do(request) if err != nil { - return nil, fmt.Errorf("webseed.http: %w, host=%s, url=%s", err, webSeedProviderUrl.Hostname(), webSeedProviderUrl.EscapedPath()) + return "", fmt.Errorf("webseed.http: %w, url=%s", err, file.String()) } defer resp.Body.Close() - b, err := io.ReadAll(resp.Body) - if err != nil { - return nil, fmt.Errorf("webseed.http: %w, host=%s, url=%s, ", err, webSeedProviderUrl.Hostname(), webSeedProviderUrl.EscapedPath()) - } - response := snaptype.WebSeedsFromProvider{} - fileNames := strings.Split(string(b), "\n") - for _, f := range fileNames { - response[f], err = url.JoinPath(baseUrl, f) - if err != nil { - return nil, err + if resp.StatusCode != http.StatusOK { + if resp.StatusCode == http.StatusNotFound { + return "", ErrEtagNotFound } + return "", fmt.Errorf("webseed.http: status code %d, url=%s", resp.StatusCode, file.String()) } - d.logger.Debug("[snapshots.webseed] get from HTTP provider", "urls", len(response), "host", webSeedProviderUrl.Hostname(), "url", webSeedProviderUrl.EscapedPath()) - return response, nil + + etag := resp.Header.Get("Etag") // file md5 + if etag == "" { + return "", fmt.Errorf("webseed.http: file has no etag, url=%s", file.String()) + } + // Todo(awskii): figure out reason why multipart etags contains "-" and remove this check + //etag = strings.Trim(etag, "\"") + //if strings.Contains(etag, "-") { + // return etag, ErrInvalidEtag + //} + return etag, nil } -func (d *WebSeeds) callS3Provider(ctx context.Context, token string) (snaptype.WebSeedsFromProvider, error) { - //v1:bucketName:accID:accessKeyID:accessKeySecret - l := strings.Split(token, ":") - if len(l) != 5 { - return nil, fmt.Errorf("[snapshots] webseed token has invalid format. expeting 5 parts, found %d", len(l)) - } - version, bucketName, accountId, accessKeyId, accessKeySecret := strings.TrimSpace(l[0]), strings.TrimSpace(l[1]), strings.TrimSpace(l[2]), strings.TrimSpace(l[3]), strings.TrimSpace(l[4]) - if version != "v1" { - return nil, fmt.Errorf("not supported version: %s", version) - } - var fileName = "webseeds.toml" - - r2Resolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) { - return aws.Endpoint{ - URL: fmt.Sprintf("https://%s.r2.cloudflarestorage.com", accountId), - }, nil - }) - cfg, err := config.LoadDefaultConfig(ctx, - config.WithEndpointResolverWithOptions(r2Resolver), - config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(accessKeyId, accessKeySecret, "")), - ) + +func (d *WebSeeds) retrieveManifest(ctx context.Context, webSeedProviderUrl *url.URL) (snaptype.WebSeedsFromProvider, error) { + baseUrl := webSeedProviderUrl.String() + + webSeedProviderUrl.Path += "/manifest.txt" // allow: host.com/v2/manifest.txt + u := webSeedProviderUrl + request, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), nil) if err != nil { return nil, err } - client := s3.NewFromConfig(cfg) - // { - // "ChecksumAlgorithm": null, - // "ETag": "\"eb2b891dc67b81755d2b726d9110af16\"", - // "Key": "ferriswasm.png", - // "LastModified": "2022-05-18T17:20:21.67Z", - // "Owner": null, - // "Size": 87671, - // "StorageClass": "STANDARD" - // } - resp, err := client.GetObject(ctx, &s3.GetObjectInput{Bucket: &bucketName, Key: &fileName}) + insertCloudflareHeaders(request) + + request = request.WithContext(ctx) + resp, err := http.DefaultClient.Do(request) if err != nil { - return nil, fmt.Errorf("webseed.s3: bucket=%s, %w", bucketName, err) + return nil, fmt.Errorf("webseed.http: make request: %w, url=%s", err, u.String()) } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + d.logger.Debug("[snapshots.webseed] /manifest.txt retrieval failed, no downloads from this webseed", + "webseed", webSeedProviderUrl.String(), "status", resp.Status) + return nil, fmt.Errorf("webseed.http: status=%d, url=%s", resp.StatusCode, u.String()) + } + + b, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("webseed.http: read: %w, url=%s, ", err, u.String()) + } + response := snaptype.WebSeedsFromProvider{} - if err := toml.NewDecoder(resp.Body).Decode(&response); err != nil { - return nil, fmt.Errorf("webseed.s3: bucket=%s, %w", bucketName, err) + fileNames := strings.Split(string(b), "\n") + for fi, f := range fileNames { + trimmed := strings.TrimSpace(f) + switch trimmed { + case "": + if fi != len(fileNames)-1 { + d.logger.Debug("[snapshots.webseed] empty line in manifest.txt", "webseed", webSeedProviderUrl.String(), "lineNum", fi) + } + continue + case "manifest.txt": + continue + default: + response[trimmed], err = url.JoinPath(baseUrl, trimmed) + if err != nil { + return nil, err + } + } } - d.logger.Debug("[snapshots.webseed] get from S3 provider", "urls", len(response), "bucket", bucketName) + + d.logger.Debug("[snapshots.webseed] get from HTTP provider", "manifest-len", len(response), "url", webSeedProviderUrl.String()) return response, nil } + func (d *WebSeeds) readWebSeedsFile(webSeedProviderPath string) (snaptype.WebSeedsFromProvider, error) { _, fileName := filepath.Split(webSeedProviderPath) data, err := os.ReadFile(webSeedProviderPath) @@ -227,47 +530,45 @@ func (d *WebSeeds) readWebSeedsFile(webSeedProviderPath string) (snaptype.WebSee } // downloadTorrentFilesFromProviders - if they are not exist on file-system -func (d *WebSeeds) downloadTorrentFilesFromProviders(ctx context.Context, rootDir string) { +func (d *WebSeeds) downloadTorrentFilesFromProviders(ctx context.Context, rootDir string, torrentMap map[url.URL]string) map[string]struct{} { // TODO: need more tests, need handle more forward-compatibility and backward-compatibility case // - now, if add new type of .torrent files to S3 bucket - existing nodes will start downloading it. maybe need whitelist of file types // - maybe need download new files if --snap.stop=true + webSeedMap := map[string]struct{}{} + var webSeeMapLock sync.RWMutex if !d.downloadTorrentFile { - return + return webSeedMap } if len(d.TorrentUrls()) == 0 { - return + return webSeedMap } var addedNew int e, ctx := errgroup.WithContext(ctx) e.SetLimit(1024) urlsByName := d.TorrentUrls() - //TODO: - // - what to do if node already synced? - for name, tUrls := range urlsByName { - tPath := filepath.Join(rootDir, name) - if dir.FileExist(tPath) { - continue - } + + for fileName, tUrls := range urlsByName { + name := fileName addedNew++ if !strings.HasSuffix(name, ".seg.torrent") { _, fName := filepath.Split(name) d.logger.Log(d.verbosity, "[snapshots] webseed has .torrent, but we skip it because this file-type not supported yet", "name", fName) continue } - name := name + tUrls := tUrls e.Go(func() error { for _, url := range tUrls { - res, err := d.callTorrentHttpProvider(ctx, url, name) + //validation happens inside + _, err := d.callTorrentHttpProvider(ctx, url, name) if err != nil { - d.logger.Log(d.verbosity, "[snapshots] got from webseed", "name", name, "err", err) - continue - } - d.logger.Log(d.verbosity, "[snapshots] got from webseed", "name", name) - if err := d.torrentFiles.Create(tPath, res); err != nil { - d.logger.Debug("[snapshots] saveTorrent", "err", err) + d.logger.Log(d.verbosity, "[snapshots] got from webseed", "name", name, "err", err, "url", url) continue } + //don't save .torrent here - do it inside downloader.Add + webSeeMapLock.Lock() + webSeedMap[torrentMap[*url]] = struct{}{} + webSeeMapLock.Unlock() return nil } return nil @@ -276,13 +577,44 @@ func (d *WebSeeds) downloadTorrentFilesFromProviders(ctx context.Context, rootDi if err := e.Wait(); err != nil { d.logger.Debug("[snapshots] webseed discover", "err", err) } + return webSeedMap +} + +func (d *WebSeeds) DownloadAndSaveTorrentFile(ctx context.Context, name string) (ts *torrent.TorrentSpec, ok bool, err error) { + urls, ok := d.ByFileName(name) + if !ok { + return nil, false, nil + } + for _, urlStr := range urls { + urlStr += ".torrent" + parsedUrl, err := url.Parse(urlStr) + if err != nil { + d.logger.Log(d.verbosity, "[snapshots] callTorrentHttpProvider parse url", "err", err) + continue // it's ok if some HTTP provider failed - try next one + } + res, err := d.callTorrentHttpProvider(ctx, parsedUrl, name) + if err != nil { + d.logger.Log(d.verbosity, "[snapshots] .torrent from webseed rejected", "name", name, "err", err) + continue // it's ok if some HTTP provider failed - try next one + } + ts, _, err = d.torrentFiles.Create(name, res) + return ts, ts != nil, err + } + + return nil, false, nil } func (d *WebSeeds) callTorrentHttpProvider(ctx context.Context, url *url.URL, fileName string) ([]byte, error) { - request, err := http.NewRequest(http.MethodGet, url.String(), nil) + if !strings.HasSuffix(url.Path, ".torrent") { + return nil, fmt.Errorf("seems not-torrent url passed: %s", url.String()) + } + request, err := http.NewRequestWithContext(ctx, http.MethodGet, url.String(), nil) if err != nil { return nil, err } + + insertCloudflareHeaders(request) + request = request.WithContext(ctx) resp, err := http.DefaultClient.Do(request) if err != nil { @@ -291,7 +623,7 @@ func (d *WebSeeds) callTorrentHttpProvider(ctx context.Context, url *url.URL, fi defer resp.Body.Close() //protect against too small and too big data if resp.ContentLength == 0 || resp.ContentLength > int64(128*datasize.MB) { - return nil, nil + return nil, fmt.Errorf(".torrent downloading size attack prevention: resp.ContentLength=%d, url=%s", resp.ContentLength, url.EscapedPath()) } res, err := io.ReadAll(resp.Body) if err != nil { @@ -317,17 +649,12 @@ func validateTorrentBytes(fileName string, b []byte, whitelist snapcfg.Preverifi } func nameWhitelisted(fileName string, whitelist snapcfg.Preverified) bool { - fileName = strings.TrimSuffix(fileName, ".torrent") - for i := 0; i < len(whitelist); i++ { - if whitelist[i].Name == fileName { - return true - } - } - return false + return whitelist.Contains(strings.TrimSuffix(fileName, ".torrent")) } func nameAndHashWhitelisted(fileName, fileHash string, whitelist snapcfg.Preverified) bool { fileName = strings.TrimSuffix(fileName, ".torrent") + for i := 0; i < len(whitelist); i++ { if whitelist[i].Name == fileName && whitelist[i].Hash == fileHash { return true diff --git a/erigon-lib/etl/collector.go b/erigon-lib/etl/collector.go index 4a77ba2d368..be0ad101358 100644 --- a/erigon-lib/etl/collector.go +++ b/erigon-lib/etl/collector.go @@ -30,6 +30,7 @@ import ( "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/kv" ) @@ -49,6 +50,11 @@ type Collector struct { allFlushed bool autoClean bool logger log.Logger + + // sortAndFlushInBackground increase insert performance, but make RAM use less-predictable: + // - if disk is over-loaded - app may have much background threads which waiting for flush - and each thread whill hold own `buf` (can't free RAM until flush is done) + // - enable it only when writing to `etl` is a bottleneck and unlikely to have many parallel collectors (to not overload CPU/Disk) + sortAndFlushInBackground bool } // NewCollectorFromFiles creates collector from existing files (left over from previous unsuccessful loading) @@ -56,7 +62,7 @@ func NewCollectorFromFiles(logPrefix, tmpdir string, logger log.Logger) (*Collec if _, err := os.Stat(tmpdir); os.IsNotExist(err) { return nil, nil } - dirEntries, err := os.ReadDir(tmpdir) + dirEntries, err := dir.ReadDir(tmpdir) if err != nil { return nil, fmt.Errorf("collector from files - reading directory %s: %w", tmpdir, err) } @@ -90,6 +96,8 @@ func NewCollector(logPrefix, tmpdir string, sortableBuffer Buffer, logger log.Lo return &Collector{autoClean: true, bufType: getTypeByBuffer(sortableBuffer), buf: sortableBuffer, logPrefix: logPrefix, tmpdir: tmpdir, logLvl: log.LvlInfo, logger: logger} } +func (c *Collector) SortAndFlushInBackground(v bool) { c.sortAndFlushInBackground = v } + func (c *Collector) extractNextFunc(originalK, k []byte, v []byte) error { c.buf.Put(k, v) if !c.buf.CheckFlushSize() { @@ -115,17 +123,26 @@ func (c *Collector) flushBuffer(canStoreInRam bool) error { provider = KeepInRAM(c.buf) c.allFlushed = true } else { - fullBuf := c.buf - prevLen, prevSize := fullBuf.Len(), fullBuf.SizeLimit() - c.buf = getBufferByType(c.bufType, datasize.ByteSize(c.buf.SizeLimit()), c.buf) - doFsync := !c.autoClean /* is critical collector */ var err error - provider, err = FlushToDisk(c.logPrefix, fullBuf, c.tmpdir, doFsync, c.logLvl) - if err != nil { - return err + + if c.sortAndFlushInBackground { + fullBuf := c.buf // can't `.Reset()` because this `buf` will move to another goroutine + prevLen, prevSize := fullBuf.Len(), fullBuf.SizeLimit() + c.buf = getBufferByType(c.bufType, datasize.ByteSize(c.buf.SizeLimit()), c.buf) + + provider, err = FlushToDiskAsync(c.logPrefix, fullBuf, c.tmpdir, doFsync, c.logLvl) + if err != nil { + return err + } + c.buf.Prealloc(prevLen/8, prevSize/8) + } else { + provider, err = FlushToDisk(c.logPrefix, c.buf, c.tmpdir, doFsync, c.logLvl) + if err != nil { + return err + } + c.buf.Reset() } - c.buf.Prealloc(prevLen/8, prevSize/8) } if provider != nil { c.dataProviders = append(c.dataProviders, provider) diff --git a/erigon-lib/etl/dataprovider.go b/erigon-lib/etl/dataprovider.go index 25387da38f1..af192059635 100644 --- a/erigon-lib/etl/dataprovider.go +++ b/erigon-lib/etl/dataprovider.go @@ -41,41 +41,19 @@ type fileDataProvider struct { wg *errgroup.Group } -// FlushToDisk - `doFsync` is true only for 'critical' collectors (which should not loose). -func FlushToDisk(logPrefix string, b Buffer, tmpdir string, doFsync bool, lvl log.Lvl) (dataProvider, error) { +// FlushToDiskAsync - `doFsync` is true only for 'critical' collectors (which should not loose). +func FlushToDiskAsync(logPrefix string, b Buffer, tmpdir string, doFsync bool, lvl log.Lvl) (dataProvider, error) { if b.Len() == 0 { return nil, nil } provider := &fileDataProvider{reader: nil, wg: &errgroup.Group{}} - provider.wg.Go(func() error { - b.Sort() - - // if we are going to create files in the system temp dir, we don't need any - // subfolders. - if tmpdir != "" { - if err := os.MkdirAll(tmpdir, 0755); err != nil { - return err - } - } - - bufferFile, err := os.CreateTemp(tmpdir, "erigon-sortable-buf-") + provider.wg.Go(func() (err error) { + provider.file, err = sortAndFlush(b, tmpdir, doFsync) if err != nil { return err } - provider.file = bufferFile - - if doFsync { - defer bufferFile.Sync() //nolint:errcheck - } - - w := bufio.NewWriterSize(bufferFile, BufIOSize) - defer w.Flush() //nolint:errcheck - - _, fName := filepath.Split(bufferFile.Name()) - if err = b.Write(w); err != nil { - return fmt.Errorf("error writing entries to disk: %w", err) - } + _, fName := filepath.Split(provider.file.Name()) log.Log(lvl, fmt.Sprintf("[%s] Flushed buffer file", logPrefix), "name", fName) return nil }) @@ -83,6 +61,52 @@ func FlushToDisk(logPrefix string, b Buffer, tmpdir string, doFsync bool, lvl lo return provider, nil } +// FlushToDisk - `doFsync` is true only for 'critical' collectors (which should not loose). +func FlushToDisk(logPrefix string, b Buffer, tmpdir string, doFsync bool, lvl log.Lvl) (dataProvider, error) { + if b.Len() == 0 { + return nil, nil + } + + var err error + provider := &fileDataProvider{reader: nil, wg: &errgroup.Group{}} + provider.file, err = sortAndFlush(b, tmpdir, doFsync) + if err != nil { + return nil, err + } + _, fName := filepath.Split(provider.file.Name()) + log.Log(lvl, fmt.Sprintf("[%s] Flushed buffer file", logPrefix), "name", fName) + return provider, nil +} + +func sortAndFlush(b Buffer, tmpdir string, doFsync bool) (*os.File, error) { + b.Sort() + + // if we are going to create files in the system temp dir, we don't need any + // subfolders. + if tmpdir != "" { + if err := os.MkdirAll(tmpdir, 0755); err != nil { + return nil, err + } + } + + bufferFile, err := os.CreateTemp(tmpdir, "erigon-sortable-buf-") + if err != nil { + return nil, err + } + + if doFsync { + defer bufferFile.Sync() //nolint:errcheck + } + + w := bufio.NewWriterSize(bufferFile, BufIOSize) + defer w.Flush() //nolint:errcheck + + if err = b.Write(w); err != nil { + return bufferFile, fmt.Errorf("error writing entries to disk: %w", err) + } + return bufferFile, nil +} + func (p *fileDataProvider) Next(keyBuf, valBuf []byte) ([]byte, []byte, error) { if p.reader == nil { _, err := p.file.Seek(0, 0) diff --git a/erigon-lib/go.mod b/erigon-lib/go.mod index f1c9a70e70a..06f461cf5cb 100644 --- a/erigon-lib/go.mod +++ b/erigon-lib/go.mod @@ -1,58 +1,67 @@ module github.com/ledgerwatch/erigon-lib -go 1.20 +go 1.21 require ( - github.com/erigontech/mdbx-go v0.27.21 - github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240115083615-b5feeb63e191 - github.com/ledgerwatch/interfaces v0.0.0-20240105174738-fe57049f198c + github.com/erigontech/mdbx-go v0.27.24 + github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240619030755-1e16b374e6cb + github.com/ledgerwatch/interfaces v0.0.0-20240320062914-b57f05746087 github.com/ledgerwatch/log/v3 v3.9.0 github.com/ledgerwatch/secp256k1 v1.0.0 + github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 ) require ( github.com/RoaringBitmap/roaring v1.2.3 - github.com/anacrolix/dht/v2 v2.20.0 + github.com/anacrolix/dht/v2 v2.21.1 github.com/anacrolix/go-libutp v1.3.1 - github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4 + github.com/anacrolix/log v0.15.2 github.com/anacrolix/torrent v1.52.6-0.20231201115409-7ea994b6bbd8 - github.com/aws/aws-sdk-go-v2 v1.21.2 - github.com/aws/aws-sdk-go-v2/config v1.19.0 - github.com/aws/aws-sdk-go-v2/credentials v1.13.43 - github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2 - github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b - github.com/containerd/cgroups/v3 v3.0.2 + github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 + github.com/containerd/cgroups/v3 v3.0.3 github.com/crate-crypto/go-kzg-4844 v0.7.0 github.com/deckarep/golang-set/v2 v2.3.1 github.com/edsrzf/mmap-go v1.1.0 github.com/go-stack/stack v1.8.1 github.com/gofrs/flock v0.8.1 - github.com/golang/mock v1.6.0 github.com/google/btree v1.1.2 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 - github.com/hashicorp/golang-lru/v2 v2.0.6 - github.com/holiman/uint256 v1.2.3 - github.com/matryer/moq v0.3.3 + github.com/hashicorp/golang-lru/v2 v2.0.7 + github.com/holiman/uint256 v1.2.4 github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 - github.com/pelletier/go-toml/v2 v2.1.0 - github.com/prometheus/client_golang v1.18.0 - github.com/prometheus/client_model v0.5.0 + github.com/pelletier/go-toml/v2 v2.2.1 + github.com/prometheus/client_golang v1.19.0 + github.com/prometheus/client_model v0.6.1 github.com/quasilyte/go-ruleguard/dsl v0.3.22 + github.com/shirou/gopsutil/v3 v3.24.3 github.com/spaolacci/murmur3 v1.1.0 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/tidwall/btree v1.6.0 - golang.org/x/crypto v0.17.0 - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 - golang.org/x/sync v0.6.0 - golang.org/x/sys v0.16.0 + go.uber.org/mock v0.4.0 + golang.org/x/crypto v0.22.0 + golang.org/x/exp v0.0.0-20231226003508-02704c960a9b + golang.org/x/sync v0.7.0 + golang.org/x/sys v0.19.0 golang.org/x/time v0.5.0 - google.golang.org/grpc v1.60.1 + google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.32.0 + google.golang.org/protobuf v1.33.0 +) + +require ( + github.com/cespare/xxhash v1.1.0 // indirect + github.com/opencontainers/runtime-spec v1.2.0 // indirect + github.com/pion/udp v0.1.4 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/tools v0.20.0 // indirect + modernc.org/libc v1.50.4 // indirect + modernc.org/memory v1.8.0 // indirect + modernc.org/sqlite v1.29.8 // indirect ) require ( github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0 // indirect + github.com/alecthomas/assert/v2 v2.8.1 // indirect github.com/alecthomas/atomic v0.1.0-alpha2 // indirect github.com/anacrolix/chansync v0.3.0 // indirect github.com/anacrolix/envpprof v1.3.0 // indirect @@ -63,51 +72,37 @@ require ( github.com/anacrolix/mmsg v1.0.0 // indirect github.com/anacrolix/multiless v0.3.1-0.20221221005021-2d12701f83f7 // indirect github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496 // indirect - github.com/anacrolix/sync v0.4.0 // indirect + github.com/anacrolix/sync v0.5.1 // indirect github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 // indirect github.com/anacrolix/utp v0.1.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 // indirect - github.com/aws/smithy-go v1.15.0 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/benbjohnson/immutable v0.4.1-0.20221220213129-8932b999621d // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.7.0 // indirect + github.com/bits-and-blooms/bitset v1.12.0 // indirect github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cilium/ebpf v0.9.1 // indirect + github.com/cilium/ebpf v0.11.0 // indirect github.com/consensys/bavard v0.1.13 // indirect github.com/consensys/gnark-crypto v0.12.1 // indirect - github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/docker/go-units v0.4.0 // indirect + github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/go-llsqlite/adapter v0.0.0-20230912124304-94ed0e573c23 // indirect - github.com/go-llsqlite/crawshaw v0.0.0-20230910110433-7e901377eb6c // indirect + github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 // indirect + github.com/go-llsqlite/crawshaw v0.4.0 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/godbus/dbus/v5 v5.0.4 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/huandu/xstrings v1.4.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/mschoch/smat v0.2.0 // indirect - github.com/opencontainers/runtime-spec v1.0.2 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect github.com/pion/datachannel v1.5.2 // indirect github.com/pion/dtls/v2 v2.2.4 // indirect github.com/pion/ice/v2 v2.2.6 // indirect @@ -124,32 +119,31 @@ require ( github.com/pion/transport v0.13.1 // indirect github.com/pion/transport/v2 v2.0.0 // indirect github.com/pion/turn/v2 v2.0.8 // indirect - github.com/pion/udp v0.1.4 // indirect github.com/pion/webrtc/v3 v3.1.42 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/common v0.45.0 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/showwin/speedtest-go v1.7.7 + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/tklauser/go-sysconf v0.3.14 // indirect + github.com/tklauser/numcpus v0.8.0 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.opentelemetry.io/otel v1.8.0 // indirect go.opentelemetry.io/otel/trace v1.8.0 // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect + golang.org/x/net v0.24.0 golang.org/x/text v0.14.0 // indirect - golang.org/x/tools v0.16.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - modernc.org/libc v1.24.1 // indirect modernc.org/mathutil v1.6.0 // indirect - modernc.org/memory v1.6.0 // indirect - modernc.org/sqlite v1.26.0 // indirect rsc.io/tmplfunc v0.0.3 // indirect zombiezen.com/go/sqlite v0.13.1 // indirect ) -replace github.com/ledgerwatch/interfaces => github.com/bobanetwork/v3-erigon-interfaces v0.0.0-20240209204708-d76c58717dca +replace github.com/anacrolix/torrent => github.com/erigontech/torrent v1.54.2-alpha-8 -// replace github.com/ledgerwatch/interfaces => ../erigon-interfaces +replace github.com/ledgerwatch/interfaces => github.com/bobanetwork/v3-erigon-interfaces v0.0.0-20240209204708-d76c58717dca diff --git a/erigon-lib/go.sum b/erigon-lib/go.sum index 8c31bee951e..b2b52c57a3e 100644 --- a/erigon-lib/go.sum +++ b/erigon-lib/go.sum @@ -1,10 +1,12 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797 h1:yDf7ARQc637HoxDho7xjqdvO5ZA2Yb+xzv/fOnnvZzw= crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797/go.mod h1:sXBiorCo8c46JlQV3oXPKINnZ8mcqnye1EkVkqsectk= crawshaw.io/sqlite v0.3.2/go.mod h1:igAO5JulrQ1DbdZdtVq48mnZUBAPOeFzer7VhDWNtW4= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= +filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= github.com/RoaringBitmap/roaring v0.4.17/go.mod h1:D3qVegWTmfCaX4Bl5CrBE9hfrSrrXIr8KVNvRsDi1NI= github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo= @@ -14,18 +16,20 @@ github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWX github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0 h1:byYvvbfSo3+9efR4IeReh77gVs4PnNDR3AMOE9NJ7a0= github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0/go.mod h1:q37NoqncT41qKc048STsifIt69LfUJ8SrWWcz/yam5k= -github.com/alecthomas/assert/v2 v2.0.0-alpha3 h1:pcHeMvQ3OMstAWgaeaXIAL8uzB9xMm2zlxt+/4ml8lk= +github.com/alecthomas/assert/v2 v2.8.1 h1:YCxnYR6jjpfnEK5AK5SysALKdUEBPGH4Y7As6tBnDw0= +github.com/alecthomas/assert/v2 v2.8.1/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/atomic v0.1.0-alpha2 h1:dqwXmax66gXvHhsOS4pGPZKqYOlTkapELkLb3MNdlH8= github.com/alecthomas/atomic v0.1.0-alpha2/go.mod h1:zD6QGEyw49HIq19caJDc2NMXAy8rNi9ROrxtMXATfyI= -github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142 h1:8Uy0oSf5co/NZXje7U1z8Mpep++QJOldL2hs/sBQf48= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= 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= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/anacrolix/chansync v0.3.0 h1:lRu9tbeuw3wl+PhMu/r+JJCRu5ArFXIluOgdF0ao6/U= github.com/anacrolix/chansync v0.3.0/go.mod h1:DZsatdsdXxD0WiwcGl0nJVwyjCKMDv+knl1q2iBjA2k= -github.com/anacrolix/dht/v2 v2.20.0 h1:eDx9lfE9iCSf5sPK0290GToHURNhEFuUGN8iyvhvJDk= -github.com/anacrolix/dht/v2 v2.20.0/go.mod h1:SDGC+sEs1pnO2sJGYuhvIis7T8749dDHNfcjtdH4e3g= +github.com/anacrolix/dht/v2 v2.21.1 h1:s1rKkfLLcmBHKv4v/mtMkIeHIEptzEFiB6xVu54+5/o= +github.com/anacrolix/dht/v2 v2.21.1/go.mod h1:SDGC+sEs1pnO2sJGYuhvIis7T8749dDHNfcjtdH4e3g= github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= github.com/anacrolix/envpprof v1.0.0/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= github.com/anacrolix/envpprof v1.1.0/go.mod h1:My7T5oSqVfEn4MD4Meczkw/f5lSIndGAKu/0SM/rkf4= @@ -39,8 +43,8 @@ github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgw github.com/anacrolix/log v0.6.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU= github.com/anacrolix/log v0.10.1-0.20220123034749-3920702c17f8/go.mod h1:GmnE2c0nvz8pOIPUSC9Rawgefy1sDXqposC2wgtBZE4= github.com/anacrolix/log v0.13.1/go.mod h1:D4+CvN8SnruK6zIFS/xPoRJmtvtnxs+CSfDQ+BFxZ68= -github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4 h1:01OE3pdiBGIZGyQb6cIAu+QfaNhBR9k5MVmLsl+DVbE= -github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4/go.mod h1:1OmJESOtxQGNMlUO5rcv96Vpp9mfMqXXbe2RdinFLdY= +github.com/anacrolix/log v0.15.2 h1:LTSf5Wm6Q4GNWPFMBP7NPYV6UBVZzZLKckL+/Lj72Oo= +github.com/anacrolix/log v0.15.2/go.mod h1:m0poRtlr41mriZlXBQ9SOVZ8yZBkLjOkDhd5Li5pITA= github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62 h1:P04VG6Td13FHMgS5ZBcJX23NPC/fiC4cp9bXwYujdYM= github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62/go.mod h1:66cFKPCO7Sl4vbFnAaSq7e4OXtdMhRSBagJGWgmpJbM= github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s= @@ -66,54 +70,16 @@ github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496 h1:aMiRi2kOOd+nG64 github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496/go.mod h1:DBm8/1OXm4A4RZ6Xa9u/eOsjeAXCaoRYvd2JzlskXeM= github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778/go.mod h1:s735Etp3joe/voe2sdaXLcqDdJSay1O0OPnM0ystjqk= github.com/anacrolix/sync v0.3.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g= -github.com/anacrolix/sync v0.4.0 h1:T+MdO/u87ir/ijWsTFsPYw5jVm0SMm4kVpg8t4KF38o= -github.com/anacrolix/sync v0.4.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g= +github.com/anacrolix/sync v0.5.1 h1:FbGju6GqSjzVoTgcXTUKkF041lnZkG5P0C3T5RL3SGc= +github.com/anacrolix/sync v0.5.1/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g= github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= github.com/anacrolix/tagflag v1.0.0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= github.com/anacrolix/tagflag v1.1.0/go.mod h1:Scxs9CV10NQatSmbyjqmqmeQNwGzlNe0CMUMIxqHIG8= -github.com/anacrolix/torrent v1.52.6-0.20231201115409-7ea994b6bbd8 h1:6EyYT2DsEOZ/WwTDsQ0HXHI996IdT0MZCGP2L6xvfNg= -github.com/anacrolix/torrent v1.52.6-0.20231201115409-7ea994b6bbd8/go.mod h1:Ma/WtLey9lU97u2i55LUJ8AnXaL2GfEK6pWh7/9v1hI= github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 h1:QAVZ3pN/J4/UziniAhJR2OZ9Ox5kOY2053tBbbqUPYA= github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96/go.mod h1:Wa6n8cYIdaG35x15aH3Zy6d03f7P728QfdcDeD/IEOs= github.com/anacrolix/utp v0.1.0 h1:FOpQOmIwYsnENnz7tAGohA+r6iXpRjrq8ssKSre2Cp4= github.com/anacrolix/utp v0.1.0/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/aws/aws-sdk-go-v2 v1.21.2 h1:+LXZ0sgo8quN9UOKXXzAWRT3FWd4NxeXWOZom9pE7GA= -github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 h1:Sc82v7tDQ/vdU1WtuSyzZ1I7y/68j//HJ6uozND1IDs= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14/go.mod h1:9NCTOURS8OpxvoAVHq79LK81/zC78hfRWFn+aL0SPcY= -github.com/aws/aws-sdk-go-v2/config v1.19.0 h1:AdzDvwH6dWuVARCl3RTLGRc4Ogy+N7yLFxVxXe1ClQ0= -github.com/aws/aws-sdk-go-v2/config v1.19.0/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= -github.com/aws/aws-sdk-go-v2/credentials v1.13.43 h1:LU8vo40zBlo3R7bAvBVy/ku4nxGEyZe9N8MqAeFTzF8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 h1:PIktER+hwIG286DqXyvVENjgLTAwGgoeriLDD5C+YlQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 h1:nFBQlGtkbPzp/NjZLuFxRqmT91rLJkgvsEQs68h962Y= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 h1:JRVhO25+r3ar2mKGP7E0LDl8K9/G36gjlqca5iQbaqc= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 h1:hze8YsjSh8Wl1rYa1CJpRmXP21BvOBuc76YhW0HsuQ4= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6 h1:wmGLw2i8ZTlHLw7a9ULGfQbuccw8uIiNr6sol5bFzc8= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6/go.mod h1:Q0Hq2X/NuL7z8b1Dww8rmOFl+jzusKEcyvkKspwdpyc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 h1:7R8uRYyXzdD71KWVCL78lJZltah6VVznXBazvKjfH58= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15/go.mod h1:26SQUPcTNgV1Tapwdt4a1rOsYRsnBsJHLMPoxK2b0d8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38 h1:skaFGzv+3kA+v2BPKhuekeb1Hbb105+44r8ASC+q5SE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38/go.mod h1:epIZoRSSbRIwLPJU5F+OldHhwZPBdpDeQkRdCeY3+00= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 h1:WWZA/I2K4ptBS1kg0kV1JbBtG/umed0vwHRrmcr9z7k= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6 h1:9ulSU5ClouoPIYhDQdg9tpl83d5Yb91PXTKK+17q+ow= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6/go.mod h1:lnc2taBsR9nTlz9meD+lhFZZ9EWY712QHrRflWpTcOA= -github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2 h1:Ll5/YVCOzRB+gxPqs2uD0R7/MyATC0w85626glSKmp4= -github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2/go.mod h1:Zjfqt7KhQK+PO1bbOsFNzKgaq7TcxzmEoDWN8lM0qzQ= -github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 h1:JuPGc7IkOP4AaqcZSIcyqLpFSqBWK32rM9+a1g6u73k= -github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 h1:HFiiRkf1SdaAmV3/BHOFZ9DjFynPHj8G/UIO1lQS+fk= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= -github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 h1:0BkLfgeDjfZnZ+MhB3ONb01u9pwFYTCZVhlsSSBvlbU= -github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= -github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8= -github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -125,32 +91,34 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= -github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.12.0 h1:U/q1fAF7xXRhFCrhROzIfffYnu+dlS38vCZtmFVPHmA= +github.com/bits-and-blooms/bitset v1.12.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bobanetwork/v3-erigon-interfaces v0.0.0-20240209204708-d76c58717dca h1:PAwKCwu28Jdr5nErdgYJgdtkWENyijS0OviNW0gxIm8= github.com/bobanetwork/v3-erigon-interfaces v0.0.0-20240209204708-d76c58717dca/go.mod h1:ugQv1QllJzBny3cKZKxUrSnykkjkBgm27eQM6dnGAcc= github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo= github.com/bradfitz/iter v0.0.0-20190303215204-33e6a9893b0c/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo= github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 h1:GKTyiRCL6zVf5wWaqKnf+7Qs6GbEPfd4iMOitWzXJx8= github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8/go.mod h1:spo1JLcs67NmW1aVLEgtA8Yy1elc+X8y5SRW1sFW4Og= -github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY= -github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= +github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 h1:6lhrsTEnloDPXyeZBvSYvQf8u86jbKehZPVDDlkgDl4= +github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +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/cilium/ebpf v0.9.1 h1:64sn2K3UKw8NbP/blsixRpF3nXuyhz/VjRlRzvlBRu4= -github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY= +github.com/cilium/ebpf v0.11.0 h1:V8gS/bTCCjX9uUnkUFUpPsksM8n1lXBAvHcpiFk1X2Y= +github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0= -github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE= -github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= +github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -159,8 +127,8 @@ 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/deckarep/golang-set/v2 v2.3.1 h1:vjmkvJt/IV27WXPyYQpAh4bRyWJc5Y435D17XQ9QU5A= github.com/deckarep/golang-set/v2 v2.3.1/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -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/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -175,10 +143,13 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/erigontech/mdbx-go v0.27.21 h1:Pv47QIiRXR8Nv+nltZteLm4xkRwuvqmOCjzZj9X0s1A= -github.com/erigontech/mdbx-go v0.27.21/go.mod h1:FAMxbOgqOnRDx51j8HjuJZIgznbDwjX7LItd+/UWyA4= +github.com/erigontech/mdbx-go v0.27.24 h1:jNsRE/4jC1F3S5SpAbmgT5jrEkfrdFk2MKEL9toVPxo= +github.com/erigontech/mdbx-go v0.27.24/go.mod h1:FAMxbOgqOnRDx51j8HjuJZIgznbDwjX7LItd+/UWyA4= +github.com/erigontech/torrent v1.54.2-alpha-8 h1:MQobu6sUZCFbmWpsB7GqAh0IWs7VAZ370POaVxlApIk= +github.com/erigontech/torrent v1.54.2-alpha-8/go.mod h1:nYNeuR4xPlEl4CturFD9/KRXBRJEcJGqjegDNWakwG4= github.com/frankban/quicktest v1.9.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= @@ -190,10 +161,10 @@ github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1T github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-llsqlite/adapter v0.0.0-20230912124304-94ed0e573c23 h1:7krbnPREaxbmEaAkZovTNCMjmiZXEy/Gz9isFbqFK0I= -github.com/go-llsqlite/adapter v0.0.0-20230912124304-94ed0e573c23/go.mod h1:DADrR88ONKPPeSGjFp5iEN55Arx3fi2qXZeKCYDpbmU= -github.com/go-llsqlite/crawshaw v0.0.0-20230910110433-7e901377eb6c h1:pm7z8uwA2q3s8fAsJmKuGckNohqIrw2PRtv6yJ6z0Ro= -github.com/go-llsqlite/crawshaw v0.0.0-20230910110433-7e901377eb6c/go.mod h1:UdTSzmN3nr5dJNuZCsbPLfhSQB76u16rWh8pn+WFx9Q= +github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 h1:OyQmpAN302wAopDgwVjgs2HkFawP9ahIEqkUYz7V7CA= +github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916/go.mod h1:DADrR88ONKPPeSGjFp5iEN55Arx3fi2qXZeKCYDpbmU= +github.com/go-llsqlite/crawshaw v0.4.0 h1:L02s2jZBBJj80xm1VkkdyB/JlQ/Fi0kLbNHfXA8yrec= +github.com/go-llsqlite/crawshaw v0.4.0/go.mod h1:/YJdV7uBQaYDE0fwe4z3wwJIZBJxdYzd38ICggWqtaE= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -202,6 +173,8 @@ github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= @@ -217,8 +190,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -231,8 +202,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.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -244,13 +215,15 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190309154008-847fc94819f9/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -262,11 +235,12 @@ github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru/v2 v2.0.6 h1:3xi/Cafd1NaoEnS/yDssIiuVeDVywU0QdFGl3aQaQHM= -github.com/hashicorp/golang-lru/v2 v2.0.6/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= -github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= -github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= @@ -275,8 +249,6 @@ github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -290,27 +262,28 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240115083615-b5feeb63e191 h1:X/mHEyh0xEuhixj6hKCNQl04NuNDToYWJ08vr66e6L0= -github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240115083615-b5feeb63e191/go.mod h1:3AuPxZc85jkehh/HA9h8gabv5MSi3kb/ddtzBsTVJFo= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240619030755-1e16b374e6cb h1:aGbaiFpYmDfj+D0qJF+wJ9MbkftG0MbGNUwf6XClnFY= +github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240619030755-1e16b374e6cb/go.mod h1:3AuPxZc85jkehh/HA9h8gabv5MSi3kb/ddtzBsTVJFo= github.com/ledgerwatch/log/v3 v3.9.0 h1:iDwrXe0PVwBC68Dd94YSsHbMgQ3ufsgjzXtFNFVZFRk= github.com/ledgerwatch/log/v3 v3.9.0/go.mod h1:EiAY6upmI/6LkNhOVxb4eVsmsP11HZCnZ3PlJMjYiqE= github.com/ledgerwatch/secp256k1 v1.0.0 h1:Usvz87YoTG0uePIV8woOof5cQnLXGYa162rFf3YnwaQ= github.com/ledgerwatch/secp256k1 v1.0.0/go.mod h1:SPmqJFciiF/Q0mPt2jVs2dTr/1TZBTIA+kPMmKgBAak= -github.com/matryer/moq v0.3.3 h1:pScMH9VyrdT4S93yiLpVyU8rCDqGQr24uOyBxmktG5Q= -github.com/matryer/moq v0.3.3/go.mod h1:RJ75ZZZD71hejp39j4crZLsEDszGk6iH4v4YsWFKH4s= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= @@ -322,6 +295,8 @@ github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -333,14 +308,14 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= +github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pelletier/go-toml/v2 v2.2.1 h1:9TA9+T8+8CUCO2+WYnDLCgrYi9+omqKXyjDtosvtEhg= +github.com/pelletier/go-toml/v2 v2.2.1/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pion/datachannel v1.5.2 h1:piB93s8LGmbECrpO84DnkIVWasRMk3IimbcXkTQLE6E= @@ -393,24 +368,26 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= -github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= +github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -426,25 +403,36 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 h1:Lt9DzQALzHoDwMBGJ6v8ObDPR0dzr2a6sXTB1Fq7IHs= github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417/go.mod h1:qe5TWALJ8/a1Lqznoc5BDHpYX/8HU60Hm2AwRmqzxqA= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE= +github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/showwin/speedtest-go v1.7.7 h1:VmK75SZOTKiuWjIVrs+mo7ZoKEw0utiGCvpnurS0olU= +github.com/showwin/speedtest-go v1.7.7/go.mod h1:uLgdWCNarXxlYsL2E5TOZpCIwpgSWnEANZp7gfHXHu0= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= github.com/smartystreets/goconvey v0.0.0-20190306220146-200a235640ff/go.mod h1:KSQcGKpxUMHk3nbYzs/tIBAM2iDooCn0BmttHOJEbLs= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -455,19 +443,27 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +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= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= +github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= +github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -480,6 +476,9 @@ go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaT go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -491,11 +490,11 @@ golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/exp v0.0.0-20231226003508-02704c960a9b h1:kLiC65FbiHWFAOu+lxwNPujcsl8VYyTYYEZnsOO1WK4= +golang.org/x/exp v0.0.0-20231226003508-02704c960a9b/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -503,10 +502,9 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -524,7 +522,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201201195509-5d6afe98e0b7/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -536,8 +533,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -547,10 +544,9 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -561,6 +557,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -570,10 +567,9 @@ golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -587,9 +583,11 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.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.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -619,10 +617,9 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -635,8 +632,8 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -644,8 +641,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -656,13 +653,14 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 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/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= @@ -681,14 +679,30 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -modernc.org/libc v1.24.1 h1:uvJSeCKL/AgzBo2yYIPPTy82v21KgGnizcGYfBHaNuM= -modernc.org/libc v1.24.1/go.mod h1:FmfO1RLrU3MHJfyi9eYYmZBfi/R+tqZ6+hQ3yQQUkak= +modernc.org/cc/v4 v4.21.0 h1:D/gLKtcztomvWbsbvBKo3leKQv+86f+DdqEZBBXhnag= +modernc.org/cc/v4 v4.21.0/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.17.3 h1:t2CQci84jnxKw3GGnHvjGKjiNZeZqyQx/023spkk4hU= +modernc.org/ccgo/v4 v4.17.3/go.mod h1:1FCbAtWYJoKuc+AviS+dH+vGNtYmFJqBeRWjmnDWsIg= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= +modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/libc v1.50.4 h1:GeqBes21PQHbVitLewzkhLXLFnQ1AWxOlHI+g5InUnQ= +modernc.org/libc v1.50.4/go.mod h1:rhzrUx5oePTSTIzBgM0mTftwWHK8tiT9aNFUt1mldl0= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= -modernc.org/memory v1.6.0 h1:i6mzavxrE9a30whzMfwf7XWVODx2r5OYXvU46cirX7o= -modernc.org/memory v1.6.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/sqlite v1.26.0 h1:SocQdLRSYlA8W99V8YH0NES75thx19d9sB/aFc4R8Lw= -modernc.org/sqlite v1.26.0/go.mod h1:FL3pVXie73rg3Rii6V/u5BoHlSoyeZeIgKZEgHARyCU= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= +modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= +modernc.org/sqlite v1.29.8 h1:nGKglNx9K5v0As+zF0/Gcl1kMkmaU1XynYyq92PbsC8= +modernc.org/sqlite v1.29.8/go.mod h1:lQPm27iqa4UNZpmr4Aor0MH0HkCLbt1huYDfWylLZFk= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= zombiezen.com/go/sqlite v0.13.1 h1:qDzxyWWmMtSSEH5qxamqBFmqA2BLSSbtODi3ojaE02o= diff --git a/erigon-lib/gointerfaces/downloader/downloader.pb.go b/erigon-lib/gointerfaces/downloader/downloader.pb.go index 3c1ec9b2d4f..dec9c5cc3e7 100644 --- a/erigon-lib/gointerfaces/downloader/downloader.pb.go +++ b/erigon-lib/gointerfaces/downloader/downloader.pb.go @@ -255,6 +255,8 @@ type ProhibitNewDownloadsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` } func (x *ProhibitNewDownloadsRequest) Reset() { @@ -289,6 +291,13 @@ func (*ProhibitNewDownloadsRequest) Descriptor() ([]byte, []int) { return file_downloader_downloader_proto_rawDescGZIP(), []int{5} } +func (x *ProhibitNewDownloadsRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + type StatsReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -434,56 +443,57 @@ var file_downloader_downloader_proto_rawDesc = []byte{ 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0x0f, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x0e, 0x0a, 0x0c, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x1d, 0x0a, 0x1b, 0x50, 0x72, 0x6f, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x31, 0x0a, 0x1b, 0x50, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, 0x4e, 0x65, 0x77, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xee, 0x02, 0x0a, 0x0a, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, - 0x21, 0x0a, 0x0c, 0x70, 0x65, 0x65, 0x72, 0x73, 0x5f, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x65, 0x65, 0x72, 0x73, 0x55, 0x6e, 0x69, 0x71, - 0x75, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6f, - 0x74, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x61, - 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x32, 0xdb, 0x02, 0x0a, 0x0a, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x68, - 0x69, 0x62, 0x69, 0x74, 0x4e, 0x65, 0x77, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x73, - 0x12, 0x27, 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x50, 0x72, - 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, 0x4e, 0x65, 0x77, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x16, 0x2e, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x06, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x06, 0x56, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x19, 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x05, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x19, 0x5a, 0x17, 0x2e, 0x2f, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x3b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xee, 0x02, 0x0a, + 0x0a, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x61, + 0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x65, 0x65, 0x72, 0x73, 0x5f, 0x75, 0x6e, 0x69, + 0x71, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x65, 0x65, 0x72, 0x73, + 0x55, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x27, 0x0a, + 0x0f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x75, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x32, 0xdb, 0x02, + 0x0a, 0x0a, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x14, + 0x50, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, 0x4e, 0x65, 0x77, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, + 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, 0x4e, 0x65, 0x77, 0x44, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x37, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x12, 0x16, + 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, + 0x12, 0x3d, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x64, 0x6f, 0x77, + 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, + 0x3d, 0x0a, 0x06, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x19, 0x2e, 0x64, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x3b, + 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x19, 0x5a, 0x17, 0x2e, + 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x3b, 0x64, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/erigon-lib/gointerfaces/execution/execution.pb.go b/erigon-lib/gointerfaces/execution/execution.pb.go index c6ff79329fe..285af917a26 100644 --- a/erigon-lib/gointerfaces/execution/execution.pb.go +++ b/erigon-lib/gointerfaces/execution/execution.pb.go @@ -87,6 +87,7 @@ type ForkChoiceReceipt struct { Status ExecutionStatus `protobuf:"varint,1,opt,name=status,proto3,enum=execution.ExecutionStatus" json:"status,omitempty"` LatestValidHash *types.H256 `protobuf:"bytes,2,opt,name=latest_valid_hash,json=latestValidHash,proto3" json:"latest_valid_hash,omitempty"` // Return latest valid hash in case of halt of execution. + ValidationError string `protobuf:"bytes,3,opt,name=validation_error,json=validationError,proto3" json:"validation_error,omitempty"` } func (x *ForkChoiceReceipt) Reset() { @@ -135,6 +136,13 @@ func (x *ForkChoiceReceipt) GetLatestValidHash() *types.H256 { return nil } +func (x *ForkChoiceReceipt) GetValidationError() string { + if x != nil { + return x.ValidationError + } + return "" +} + // Result we receive after validation type ValidationReceipt struct { state protoimpl.MessageState @@ -143,6 +151,7 @@ type ValidationReceipt struct { ValidationStatus ExecutionStatus `protobuf:"varint,1,opt,name=validation_status,json=validationStatus,proto3,enum=execution.ExecutionStatus" json:"validation_status,omitempty"` LatestValidHash *types.H256 `protobuf:"bytes,2,opt,name=latest_valid_hash,json=latestValidHash,proto3" json:"latest_valid_hash,omitempty"` + ValidationError string `protobuf:"bytes,3,opt,name=validation_error,json=validationError,proto3" json:"validation_error,omitempty"` } func (x *ValidationReceipt) Reset() { @@ -191,6 +200,13 @@ func (x *ValidationReceipt) GetLatestValidHash() *types.H256 { return nil } +func (x *ValidationReceipt) GetValidationError() string { + if x != nil { + return x.ValidationError + } + return "" +} + type IsCanonicalResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1646,6 +1662,53 @@ func (x *FrozenBlocksResponse) GetFrozenBlocks() uint64 { return 0 } +type HasBlockResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HasBlock bool `protobuf:"varint,1,opt,name=has_block,json=hasBlock,proto3" json:"has_block,omitempty"` +} + +func (x *HasBlockResponse) Reset() { + *x = HasBlockResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_execution_execution_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HasBlockResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HasBlockResponse) ProtoMessage() {} + +func (x *HasBlockResponse) ProtoReflect() protoreflect.Message { + mi := &file_execution_execution_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HasBlockResponse.ProtoReflect.Descriptor instead. +func (*HasBlockResponse) Descriptor() ([]byte, []int) { + return file_execution_execution_proto_rawDescGZIP(), []int{25} +} + +func (x *HasBlockResponse) GetHasBlock() bool { + if x != nil { + return x.HasBlock + } + return false +} + var File_execution_execution_proto protoreflect.FileDescriptor var file_execution_execution_proto_rawDesc = []byte{ @@ -1654,7 +1717,7 @@ var file_execution_execution_proto_rawDesc = []byte{ 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x11, 0x46, 0x6f, 0x72, 0x6b, 0x43, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xab, 0x01, 0x0a, 0x11, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, @@ -1662,335 +1725,348 @@ var file_execution_execution_proto_rawDesc = []byte{ 0x12, 0x37, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x48, 0x61, 0x73, 0x68, 0x22, 0x95, 0x01, 0x0a, 0x11, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, - 0x47, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, - 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x48, 0x61, 0x73, - 0x68, 0x22, 0x33, 0x0a, 0x13, 0x49, 0x73, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x6f, - 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x61, 0x6e, - 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x22, 0xe4, 0x08, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x12, 0x2c, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, - 0x32, 0x35, 0x36, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x27, 0x0a, 0x08, 0x63, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x31, 0x36, 0x30, 0x52, 0x08, - 0x63, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x2e, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, - 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, - 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x62, 0x6c, 0x6f, - 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x48, 0x32, 0x30, 0x34, 0x38, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x73, 0x42, 0x6c, 0x6f, 0x6f, - 0x6d, 0x12, 0x2c, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, - 0x32, 0x35, 0x36, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x52, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x12, - 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x67, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, - 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0a, - 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x0a, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x09, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x0a, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x5f, - 0x68, 0x61, 0x73, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x09, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x48, 0x61, - 0x73, 0x68, 0x12, 0x36, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x12, 0x39, 0x0a, 0x10, 0x62, 0x61, - 0x73, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, - 0x36, 0x48, 0x00, 0x52, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x46, 0x65, 0x65, 0x50, 0x65, 0x72, 0x47, - 0x61, 0x73, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x01, 0x52, 0x0e, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x27, 0x0a, 0x0d, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, - 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x48, 0x02, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x47, - 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x65, 0x78, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x04, 0x48, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x42, 0x6c, 0x6f, 0x62, - 0x47, 0x61, 0x73, 0x88, 0x01, 0x01, 0x12, 0x49, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, - 0x6f, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x04, 0x52, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x75, 0x72, 0x61, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x04, 0x48, 0x05, 0x52, 0x08, 0x61, 0x75, 0x72, 0x61, 0x53, 0x74, 0x65, 0x70, - 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x75, 0x72, 0x61, 0x5f, 0x73, 0x65, 0x61, 0x6c, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x06, 0x52, 0x08, 0x61, 0x75, 0x72, 0x61, 0x53, 0x65, - 0x61, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x66, - 0x65, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x67, 0x61, 0x73, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x42, 0x10, - 0x0a, 0x0e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, - 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, - 0x5f, 0x67, 0x61, 0x73, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, - 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x75, 0x72, 0x61, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x42, - 0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x75, 0x72, 0x61, 0x5f, 0x73, 0x65, 0x61, 0x6c, 0x22, 0xde, 0x01, - 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x2a, 0x0a, 0x0a, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x09, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, - 0x0a, 0x06, 0x75, 0x6e, 0x63, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x52, 0x06, 0x75, 0x6e, 0x63, 0x6c, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x77, 0x69, 0x74, - 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, - 0x6c, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x22, 0x5c, - 0x0a, 0x05, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x29, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x12, 0x28, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x4e, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x88, 0x01, - 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x38, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x54, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, - 0x02, 0x74, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x00, 0x52, 0x02, 0x74, 0x64, 0x88, 0x01, 0x01, 0x42, - 0x05, 0x0a, 0x03, 0x5f, 0x74, 0x64, 0x22, 0x49, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x62, 0x6f, 0x64, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x79, 0x48, 0x00, 0x52, - 0x04, 0x62, 0x6f, 0x64, 0x79, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x62, 0x6f, 0x64, - 0x79, 0x22, 0x56, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, - 0x73, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x26, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x8c, 0x01, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x26, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x01, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x22, 0x3f, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x65, - 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x28, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0x86, 0x02, 0x0a, 0x0a, 0x46, 0x6f, - 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x0f, 0x68, 0x65, 0x61, 0x64, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0d, - 0x68, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x42, 0x0a, 0x14, 0x66, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, - 0x35, 0x36, 0x48, 0x00, 0x52, 0x12, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x0f, 0x73, - 0x61, 0x66, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, - 0x36, 0x48, 0x01, 0x52, 0x0d, 0x73, 0x61, 0x66, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, - 0x73, 0x68, 0x88, 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x42, 0x12, - 0x0a, 0x10, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, - 0x73, 0x68, 0x22, 0x45, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x22, 0xc0, 0x01, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x47, 0x0a, 0x11, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, - 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xe0, 0x03, 0x0a, 0x14, 0x41, 0x73, 0x73, 0x65, - 0x6d, 0x62, 0x6c, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2c, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, + 0x73, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0f, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x29, 0x0a, 0x10, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x33, 0x0a, 0x13, 0x49, 0x73, 0x43, 0x61, 0x6e, + 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x22, 0xe4, 0x08, 0x0a, + 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x27, 0x0a, 0x08, 0x63, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x48, 0x31, 0x36, 0x30, 0x52, 0x08, 0x63, 0x6f, 0x69, 0x6e, 0x62, 0x61, 0x73, 0x65, 0x12, 0x2a, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, + 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x2e, 0x0a, 0x0c, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0b, 0x72, + 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x2b, 0x0a, 0x0a, 0x6c, 0x6f, + 0x67, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x30, 0x34, 0x38, 0x52, 0x09, 0x6c, 0x6f, + 0x67, 0x73, 0x42, 0x6c, 0x6f, 0x6f, 0x6d, 0x12, 0x2c, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, + 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x52, + 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, + 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, + 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, + 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x48, 0x32, 0x35, 0x36, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, + 0x12, 0x2a, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, + 0x36, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x2a, 0x0a, 0x0a, + 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x09, 0x6f, + 0x6d, 0x6d, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, 0x36, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x39, 0x0a, 0x10, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x65, 0x72, + 0x5f, 0x67, 0x61, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x00, 0x52, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x46, + 0x65, 0x65, 0x50, 0x65, 0x72, 0x47, 0x61, 0x73, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x0f, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, + 0x36, 0x48, 0x01, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x48, + 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0d, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, + 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x48, 0x02, 0x52, + 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x47, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, + 0x2b, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, + 0x61, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x48, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x65, + 0x73, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x47, 0x61, 0x73, 0x88, 0x01, 0x01, 0x12, 0x49, 0x0a, 0x18, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x04, 0x52, 0x15, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x6f, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x75, 0x72, 0x61, 0x5f, + 0x73, 0x74, 0x65, 0x70, 0x18, 0x16, 0x20, 0x01, 0x28, 0x04, 0x48, 0x05, 0x52, 0x08, 0x61, 0x75, + 0x72, 0x61, 0x53, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x61, 0x75, 0x72, + 0x61, 0x5f, 0x73, 0x65, 0x61, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x06, 0x52, 0x08, + 0x61, 0x75, 0x72, 0x61, 0x53, 0x65, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, + 0x62, 0x61, 0x73, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x67, 0x61, 0x73, + 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, + 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x73, + 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x67, 0x61, 0x73, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x75, 0x72, 0x61, + 0x5f, 0x73, 0x74, 0x65, 0x70, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x61, 0x75, 0x72, 0x61, 0x5f, 0x73, + 0x65, 0x61, 0x6c, 0x22, 0xde, 0x01, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x2a, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, - 0x35, 0x36, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x0b, - 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0a, - 0x70, 0x72, 0x65, 0x76, 0x52, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x12, 0x43, 0x0a, 0x17, 0x73, 0x75, - 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, - 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x48, 0x31, 0x36, 0x30, 0x52, 0x15, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, + 0x35, 0x36, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x21, 0x0a, + 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x06, 0x75, 0x6e, 0x63, 0x6c, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x75, 0x6e, 0x63, 0x6c, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, - 0x77, 0x61, 0x6c, 0x73, 0x12, 0x49, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, - 0x32, 0x35, 0x36, 0x48, 0x00, 0x52, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, - 0x22, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x65, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x18, - 0x66, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x12, - 0x1f, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x67, 0x20, 0x01, 0x28, - 0x04, 0x48, 0x01, 0x52, 0x08, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, - 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x42, 0x0b, 0x0a, - 0x09, 0x5f, 0x67, 0x61, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x3b, 0x0a, 0x15, 0x41, 0x73, - 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, 0x73, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x62, 0x75, 0x73, 0x79, 0x22, 0x2a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x73, - 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x02, 0x69, 0x64, 0x22, 0xa9, 0x02, 0x0a, 0x12, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, - 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x11, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x10, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x2c, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, - 0x35, 0x36, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, - 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f, - 0x62, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x56, 0x31, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, - 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, - 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x00, 0x52, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x88, - 0x01, 0x01, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x22, - 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, 0x73, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x04, 0x62, 0x75, 0x73, 0x79, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x46, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x62, - 0x6f, 0x64, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, - 0x79, 0x52, 0x06, 0x62, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, - 0x35, 0x36, 0x52, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x45, 0x0a, 0x17, 0x47, 0x65, - 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x22, 0x25, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x64, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x22, 0x3b, 0x0a, 0x14, 0x46, 0x72, 0x6f, 0x7a, - 0x65, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2a, 0x71, 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x6f, 0x6f, 0x46, 0x61, 0x72, 0x41, 0x77, 0x61, - 0x79, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x46, 0x6f, 0x72, 0x6b, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x10, 0x04, 0x12, 0x08, - 0x0a, 0x04, 0x42, 0x75, 0x73, 0x79, 0x10, 0x05, 0x32, 0xbf, 0x09, 0x0a, 0x09, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1e, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x4b, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, - 0x47, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, - 0x69, 0x63, 0x65, 0x12, 0x15, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x1a, 0x1c, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x52, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, - 0x6d, 0x62, 0x6c, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1f, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x23, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, + 0x77, 0x61, 0x6c, 0x73, 0x22, 0x5c, 0x0a, 0x05, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x29, 0x0a, + 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x22, 0x4e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x22, 0x38, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x54, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x02, 0x74, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x00, 0x52, 0x02, + 0x74, 0x64, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x74, 0x64, 0x22, 0x49, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2d, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, + 0x6f, 0x64, 0x79, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x88, 0x01, 0x01, 0x42, 0x07, + 0x0a, 0x05, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x56, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, + 0x8c, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, + 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x01, + 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, + 0x0d, 0x0a, 0x0b, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x22, 0x3f, + 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, + 0x86, 0x02, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x33, + 0x0a, 0x0f, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x48, 0x32, 0x35, 0x36, 0x52, 0x0d, 0x68, 0x65, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x42, 0x0a, + 0x14, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x00, 0x52, 0x12, 0x66, 0x69, 0x6e, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, + 0x01, 0x12, 0x38, 0x0a, 0x0f, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x01, 0x52, 0x0d, 0x73, 0x61, 0x66, 0x65, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x88, 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, + 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x73, 0x61, 0x66, 0x65, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x22, 0x45, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x65, + 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x4c, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, + 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xe4, 0x03, + 0x0a, 0x14, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x61, + 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x48, 0x32, 0x35, 0x36, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x52, 0x61, 0x6e, 0x64, 0x61, 0x6f, + 0x12, 0x43, 0x0a, 0x17, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, + 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x31, 0x36, 0x30, 0x52, 0x15, + 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x46, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, + 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x61, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x52, 0x0b, 0x77, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x12, 0x49, 0x0a, 0x18, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x48, 0x00, 0x52, 0x15, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, + 0x6f, 0x74, 0x88, 0x01, 0x01, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x0a, 0x6e, 0x6f, 0x5f, + 0x74, 0x78, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, + 0x6f, 0x54, 0x78, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x20, 0x0a, 0x09, 0x67, 0x61, 0x73, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x48, 0x01, 0x52, 0x08, 0x67, 0x61, + 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x42, 0x1b, 0x0a, 0x19, 0x5f, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x67, 0x61, 0x73, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x22, 0x3b, 0x0a, 0x15, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x62, 0x75, 0x73, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x62, 0x75, 0x73, + 0x79, 0x22, 0x2a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, + 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xa9, 0x02, + 0x0a, 0x12, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2c, 0x0a, 0x0b, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0a, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x62, + 0x73, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x56, 0x31, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x12, 0x49, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, + 0x48, 0x00, 0x52, 0x15, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x6f, 0x6f, 0x74, 0x88, 0x01, 0x01, 0x42, 0x1b, 0x0a, 0x19, + 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x22, 0x70, 0x0a, 0x19, 0x47, 0x65, 0x74, + 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x12, + 0x0a, 0x04, 0x62, 0x75, 0x73, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x62, 0x75, + 0x73, 0x79, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x22, 0x46, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x62, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x06, 0x62, 0x6f, 0x64, + 0x69, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, + 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x23, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x06, 0x68, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x22, 0x45, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, + 0x73, 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x25, 0x0a, 0x0d, 0x52, + 0x65, 0x61, 0x64, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, + 0x64, 0x79, 0x22, 0x3b, 0x0a, 0x14, 0x46, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, + 0x6f, 0x7a, 0x65, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0c, 0x66, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, + 0x2f, 0x0a, 0x10, 0x48, 0x61, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x2a, 0x71, 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, + 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x61, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x10, 0x01, 0x12, 0x0e, + 0x0a, 0x0a, 0x54, 0x6f, 0x6f, 0x46, 0x61, 0x72, 0x41, 0x77, 0x61, 0x79, 0x10, 0x02, 0x12, 0x12, + 0x0a, 0x0e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, + 0x6b, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x75, 0x73, + 0x79, 0x10, 0x05, 0x32, 0x86, 0x0a, 0x0a, 0x09, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x4a, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x12, 0x1e, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x4b, 0x0a, + 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1c, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x47, 0x0a, 0x10, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x15, + 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, + 0x68, 0x6f, 0x69, 0x63, 0x65, 0x1a, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x46, 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x70, 0x74, 0x12, 0x52, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1f, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x73, + 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x23, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, + 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x64, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0d, - 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x54, 0x44, 0x12, 0x1c, 0x2e, 0x65, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, + 0x0a, 0x05, 0x47, 0x65, 0x74, 0x54, 0x44, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x47, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x44, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x59, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, - 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x22, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x79, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, - 0x65, 0x73, 0x12, 0x23, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, - 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0f, 0x49, 0x73, - 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x48, 0x61, 0x73, 0x68, 0x12, 0x0b, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x1a, 0x1e, 0x2e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x73, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x47, 0x65, - 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x1a, 0x26, - 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, - 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x15, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x6f, 0x72, 0x6b, - 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x46, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1f, 0x2e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x17, 0x5a, 0x15, 0x2e, 0x2f, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x42, + 0x6f, 0x64, 0x79, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, + 0x74, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, + 0x08, 0x48, 0x61, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1c, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x61, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, + 0x73, 0x42, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x22, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x79, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, + 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x79, 0x48, 0x61, + 0x73, 0x68, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x64, 0x69, 0x65, 0x73, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0f, + 0x49, 0x73, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x48, 0x61, 0x73, 0x68, 0x12, + 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x1a, 0x1e, 0x2e, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x73, 0x43, 0x61, 0x6e, 0x6f, 0x6e, + 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, + 0x1a, 0x26, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, + 0x6f, 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x15, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x6f, + 0x72, 0x6b, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, + 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x46, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1f, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x46, 0x72, 0x6f, 0x7a, 0x65, 0x6e, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x17, 0x5a, 0x15, + 0x2e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2006,7 +2082,7 @@ func file_execution_execution_proto_rawDescGZIP() []byte { } var file_execution_execution_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_execution_execution_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_execution_execution_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_execution_execution_proto_goTypes = []interface{}{ (ExecutionStatus)(0), // 0: execution.ExecutionStatus (*ForkChoiceReceipt)(nil), // 1: execution.ForkChoiceReceipt @@ -2034,93 +2110,96 @@ var file_execution_execution_proto_goTypes = []interface{}{ (*GetBodiesByRangeRequest)(nil), // 23: execution.GetBodiesByRangeRequest (*ReadyResponse)(nil), // 24: execution.ReadyResponse (*FrozenBlocksResponse)(nil), // 25: execution.FrozenBlocksResponse - (*types.H256)(nil), // 26: types.H256 - (*types.H160)(nil), // 27: types.H160 - (*types.H2048)(nil), // 28: types.H2048 - (*types.Withdrawal)(nil), // 29: types.Withdrawal - (*types.ExecutionPayload)(nil), // 30: types.ExecutionPayload - (*types.BlobsBundleV1)(nil), // 31: types.BlobsBundleV1 - (*emptypb.Empty)(nil), // 32: google.protobuf.Empty + (*HasBlockResponse)(nil), // 26: execution.HasBlockResponse + (*types.H256)(nil), // 27: types.H256 + (*types.H160)(nil), // 28: types.H160 + (*types.H2048)(nil), // 29: types.H2048 + (*types.Withdrawal)(nil), // 30: types.Withdrawal + (*types.ExecutionPayload)(nil), // 31: types.ExecutionPayload + (*types.BlobsBundleV1)(nil), // 32: types.BlobsBundleV1 + (*emptypb.Empty)(nil), // 33: google.protobuf.Empty } var file_execution_execution_proto_depIdxs = []int32{ 0, // 0: execution.ForkChoiceReceipt.status:type_name -> execution.ExecutionStatus - 26, // 1: execution.ForkChoiceReceipt.latest_valid_hash:type_name -> types.H256 + 27, // 1: execution.ForkChoiceReceipt.latest_valid_hash:type_name -> types.H256 0, // 2: execution.ValidationReceipt.validation_status:type_name -> execution.ExecutionStatus - 26, // 3: execution.ValidationReceipt.latest_valid_hash:type_name -> types.H256 - 26, // 4: execution.Header.parent_hash:type_name -> types.H256 - 27, // 5: execution.Header.coinbase:type_name -> types.H160 - 26, // 6: execution.Header.state_root:type_name -> types.H256 - 26, // 7: execution.Header.receipt_root:type_name -> types.H256 - 28, // 8: execution.Header.logs_bloom:type_name -> types.H2048 - 26, // 9: execution.Header.prev_randao:type_name -> types.H256 - 26, // 10: execution.Header.difficulty:type_name -> types.H256 - 26, // 11: execution.Header.block_hash:type_name -> types.H256 - 26, // 12: execution.Header.ommer_hash:type_name -> types.H256 - 26, // 13: execution.Header.transaction_hash:type_name -> types.H256 - 26, // 14: execution.Header.base_fee_per_gas:type_name -> types.H256 - 26, // 15: execution.Header.withdrawal_hash:type_name -> types.H256 - 26, // 16: execution.Header.parent_beacon_block_root:type_name -> types.H256 - 26, // 17: execution.BlockBody.block_hash:type_name -> types.H256 + 27, // 3: execution.ValidationReceipt.latest_valid_hash:type_name -> types.H256 + 27, // 4: execution.Header.parent_hash:type_name -> types.H256 + 28, // 5: execution.Header.coinbase:type_name -> types.H160 + 27, // 6: execution.Header.state_root:type_name -> types.H256 + 27, // 7: execution.Header.receipt_root:type_name -> types.H256 + 29, // 8: execution.Header.logs_bloom:type_name -> types.H2048 + 27, // 9: execution.Header.prev_randao:type_name -> types.H256 + 27, // 10: execution.Header.difficulty:type_name -> types.H256 + 27, // 11: execution.Header.block_hash:type_name -> types.H256 + 27, // 12: execution.Header.ommer_hash:type_name -> types.H256 + 27, // 13: execution.Header.transaction_hash:type_name -> types.H256 + 27, // 14: execution.Header.base_fee_per_gas:type_name -> types.H256 + 27, // 15: execution.Header.withdrawal_hash:type_name -> types.H256 + 27, // 16: execution.Header.parent_beacon_block_root:type_name -> types.H256 + 27, // 17: execution.BlockBody.block_hash:type_name -> types.H256 4, // 18: execution.BlockBody.uncles:type_name -> execution.Header - 29, // 19: execution.BlockBody.withdrawals:type_name -> types.Withdrawal + 30, // 19: execution.BlockBody.withdrawals:type_name -> types.Withdrawal 4, // 20: execution.Block.header:type_name -> execution.Header 5, // 21: execution.Block.body:type_name -> execution.BlockBody 4, // 22: execution.GetHeaderResponse.header:type_name -> execution.Header - 26, // 23: execution.GetTDResponse.td:type_name -> types.H256 + 27, // 23: execution.GetTDResponse.td:type_name -> types.H256 5, // 24: execution.GetBodyResponse.body:type_name -> execution.BlockBody - 26, // 25: execution.GetSegmentRequest.block_hash:type_name -> types.H256 + 27, // 25: execution.GetSegmentRequest.block_hash:type_name -> types.H256 6, // 26: execution.InsertBlocksRequest.blocks:type_name -> execution.Block - 26, // 27: execution.ForkChoice.head_block_hash:type_name -> types.H256 - 26, // 28: execution.ForkChoice.finalized_block_hash:type_name -> types.H256 - 26, // 29: execution.ForkChoice.safe_block_hash:type_name -> types.H256 + 27, // 27: execution.ForkChoice.head_block_hash:type_name -> types.H256 + 27, // 28: execution.ForkChoice.finalized_block_hash:type_name -> types.H256 + 27, // 29: execution.ForkChoice.safe_block_hash:type_name -> types.H256 0, // 30: execution.InsertionResult.result:type_name -> execution.ExecutionStatus - 26, // 31: execution.ValidationRequest.hash:type_name -> types.H256 - 26, // 32: execution.AssembleBlockRequest.parent_hash:type_name -> types.H256 - 26, // 33: execution.AssembleBlockRequest.prev_randao:type_name -> types.H256 - 27, // 34: execution.AssembleBlockRequest.suggested_fee_recipient:type_name -> types.H160 - 29, // 35: execution.AssembleBlockRequest.withdrawals:type_name -> types.Withdrawal - 26, // 36: execution.AssembleBlockRequest.parent_beacon_block_root:type_name -> types.H256 - 30, // 37: execution.AssembledBlockData.execution_payload:type_name -> types.ExecutionPayload - 26, // 38: execution.AssembledBlockData.block_value:type_name -> types.H256 - 31, // 39: execution.AssembledBlockData.blobs_bundle:type_name -> types.BlobsBundleV1 - 26, // 40: execution.AssembledBlockData.parent_beacon_block_root:type_name -> types.H256 + 27, // 31: execution.ValidationRequest.hash:type_name -> types.H256 + 27, // 32: execution.AssembleBlockRequest.parent_hash:type_name -> types.H256 + 27, // 33: execution.AssembleBlockRequest.prev_randao:type_name -> types.H256 + 28, // 34: execution.AssembleBlockRequest.suggested_fee_recipient:type_name -> types.H160 + 30, // 35: execution.AssembleBlockRequest.withdrawals:type_name -> types.Withdrawal + 27, // 36: execution.AssembleBlockRequest.parent_beacon_block_root:type_name -> types.H256 + 31, // 37: execution.AssembledBlockData.execution_payload:type_name -> types.ExecutionPayload + 27, // 38: execution.AssembledBlockData.block_value:type_name -> types.H256 + 32, // 39: execution.AssembledBlockData.blobs_bundle:type_name -> types.BlobsBundleV1 + 27, // 40: execution.AssembledBlockData.parent_beacon_block_root:type_name -> types.H256 19, // 41: execution.GetAssembledBlockResponse.data:type_name -> execution.AssembledBlockData 5, // 42: execution.GetBodiesBatchResponse.bodies:type_name -> execution.BlockBody - 26, // 43: execution.GetBodiesByHashesRequest.hashes:type_name -> types.H256 + 27, // 43: execution.GetBodiesByHashesRequest.hashes:type_name -> types.H256 12, // 44: execution.Execution.InsertBlocks:input_type -> execution.InsertBlocksRequest 15, // 45: execution.Execution.ValidateChain:input_type -> execution.ValidationRequest 13, // 46: execution.Execution.UpdateForkChoice:input_type -> execution.ForkChoice 16, // 47: execution.Execution.AssembleBlock:input_type -> execution.AssembleBlockRequest 18, // 48: execution.Execution.GetAssembledBlock:input_type -> execution.GetAssembledBlockRequest - 32, // 49: execution.Execution.CurrentHeader:input_type -> google.protobuf.Empty + 33, // 49: execution.Execution.CurrentHeader:input_type -> google.protobuf.Empty 11, // 50: execution.Execution.GetTD:input_type -> execution.GetSegmentRequest 11, // 51: execution.Execution.GetHeader:input_type -> execution.GetSegmentRequest 11, // 52: execution.Execution.GetBody:input_type -> execution.GetSegmentRequest - 23, // 53: execution.Execution.GetBodiesByRange:input_type -> execution.GetBodiesByRangeRequest - 22, // 54: execution.Execution.GetBodiesByHashes:input_type -> execution.GetBodiesByHashesRequest - 26, // 55: execution.Execution.IsCanonicalHash:input_type -> types.H256 - 26, // 56: execution.Execution.GetHeaderHashNumber:input_type -> types.H256 - 32, // 57: execution.Execution.GetForkChoice:input_type -> google.protobuf.Empty - 32, // 58: execution.Execution.Ready:input_type -> google.protobuf.Empty - 32, // 59: execution.Execution.FrozenBlocks:input_type -> google.protobuf.Empty - 14, // 60: execution.Execution.InsertBlocks:output_type -> execution.InsertionResult - 2, // 61: execution.Execution.ValidateChain:output_type -> execution.ValidationReceipt - 1, // 62: execution.Execution.UpdateForkChoice:output_type -> execution.ForkChoiceReceipt - 17, // 63: execution.Execution.AssembleBlock:output_type -> execution.AssembleBlockResponse - 20, // 64: execution.Execution.GetAssembledBlock:output_type -> execution.GetAssembledBlockResponse - 7, // 65: execution.Execution.CurrentHeader:output_type -> execution.GetHeaderResponse - 8, // 66: execution.Execution.GetTD:output_type -> execution.GetTDResponse - 7, // 67: execution.Execution.GetHeader:output_type -> execution.GetHeaderResponse - 9, // 68: execution.Execution.GetBody:output_type -> execution.GetBodyResponse - 21, // 69: execution.Execution.GetBodiesByRange:output_type -> execution.GetBodiesBatchResponse - 21, // 70: execution.Execution.GetBodiesByHashes:output_type -> execution.GetBodiesBatchResponse - 3, // 71: execution.Execution.IsCanonicalHash:output_type -> execution.IsCanonicalResponse - 10, // 72: execution.Execution.GetHeaderHashNumber:output_type -> execution.GetHeaderHashNumberResponse - 13, // 73: execution.Execution.GetForkChoice:output_type -> execution.ForkChoice - 24, // 74: execution.Execution.Ready:output_type -> execution.ReadyResponse - 25, // 75: execution.Execution.FrozenBlocks:output_type -> execution.FrozenBlocksResponse - 60, // [60:76] is the sub-list for method output_type - 44, // [44:60] is the sub-list for method input_type + 11, // 53: execution.Execution.HasBlock:input_type -> execution.GetSegmentRequest + 23, // 54: execution.Execution.GetBodiesByRange:input_type -> execution.GetBodiesByRangeRequest + 22, // 55: execution.Execution.GetBodiesByHashes:input_type -> execution.GetBodiesByHashesRequest + 27, // 56: execution.Execution.IsCanonicalHash:input_type -> types.H256 + 27, // 57: execution.Execution.GetHeaderHashNumber:input_type -> types.H256 + 33, // 58: execution.Execution.GetForkChoice:input_type -> google.protobuf.Empty + 33, // 59: execution.Execution.Ready:input_type -> google.protobuf.Empty + 33, // 60: execution.Execution.FrozenBlocks:input_type -> google.protobuf.Empty + 14, // 61: execution.Execution.InsertBlocks:output_type -> execution.InsertionResult + 2, // 62: execution.Execution.ValidateChain:output_type -> execution.ValidationReceipt + 1, // 63: execution.Execution.UpdateForkChoice:output_type -> execution.ForkChoiceReceipt + 17, // 64: execution.Execution.AssembleBlock:output_type -> execution.AssembleBlockResponse + 20, // 65: execution.Execution.GetAssembledBlock:output_type -> execution.GetAssembledBlockResponse + 7, // 66: execution.Execution.CurrentHeader:output_type -> execution.GetHeaderResponse + 8, // 67: execution.Execution.GetTD:output_type -> execution.GetTDResponse + 7, // 68: execution.Execution.GetHeader:output_type -> execution.GetHeaderResponse + 9, // 69: execution.Execution.GetBody:output_type -> execution.GetBodyResponse + 26, // 70: execution.Execution.HasBlock:output_type -> execution.HasBlockResponse + 21, // 71: execution.Execution.GetBodiesByRange:output_type -> execution.GetBodiesBatchResponse + 21, // 72: execution.Execution.GetBodiesByHashes:output_type -> execution.GetBodiesBatchResponse + 3, // 73: execution.Execution.IsCanonicalHash:output_type -> execution.IsCanonicalResponse + 10, // 74: execution.Execution.GetHeaderHashNumber:output_type -> execution.GetHeaderHashNumberResponse + 13, // 75: execution.Execution.GetForkChoice:output_type -> execution.ForkChoice + 24, // 76: execution.Execution.Ready:output_type -> execution.ReadyResponse + 25, // 77: execution.Execution.FrozenBlocks:output_type -> execution.FrozenBlocksResponse + 61, // [61:78] is the sub-list for method output_type + 44, // [44:61] is the sub-list for method input_type 44, // [44:44] is the sub-list for extension type_name 44, // [44:44] is the sub-list for extension extendee 0, // [0:44] is the sub-list for field type_name @@ -2432,6 +2511,18 @@ func file_execution_execution_proto_init() { return nil } } + file_execution_execution_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HasBlockResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_execution_execution_proto_msgTypes[3].OneofWrappers = []interface{}{} file_execution_execution_proto_msgTypes[6].OneofWrappers = []interface{}{} @@ -2449,7 +2540,7 @@ func file_execution_execution_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_execution_execution_proto_rawDesc, NumEnums: 1, - NumMessages: 25, + NumMessages: 26, NumExtensions: 0, NumServices: 1, }, diff --git a/erigon-lib/gointerfaces/execution/execution_grpc.pb.go b/erigon-lib/gointerfaces/execution/execution_grpc.pb.go index 065a305e8fc..ad2dd2fa94c 100644 --- a/erigon-lib/gointerfaces/execution/execution_grpc.pb.go +++ b/erigon-lib/gointerfaces/execution/execution_grpc.pb.go @@ -30,6 +30,7 @@ const ( Execution_GetTD_FullMethodName = "/execution.Execution/GetTD" Execution_GetHeader_FullMethodName = "/execution.Execution/GetHeader" Execution_GetBody_FullMethodName = "/execution.Execution/GetBody" + Execution_HasBlock_FullMethodName = "/execution.Execution/HasBlock" Execution_GetBodiesByRange_FullMethodName = "/execution.Execution/GetBodiesByRange" Execution_GetBodiesByHashes_FullMethodName = "/execution.Execution/GetBodiesByHashes" Execution_IsCanonicalHash_FullMethodName = "/execution.Execution/IsCanonicalHash" @@ -57,6 +58,7 @@ type ExecutionClient interface { GetTD(ctx context.Context, in *GetSegmentRequest, opts ...grpc.CallOption) (*GetTDResponse, error) GetHeader(ctx context.Context, in *GetSegmentRequest, opts ...grpc.CallOption) (*GetHeaderResponse, error) GetBody(ctx context.Context, in *GetSegmentRequest, opts ...grpc.CallOption) (*GetBodyResponse, error) + HasBlock(ctx context.Context, in *GetSegmentRequest, opts ...grpc.CallOption) (*HasBlockResponse, error) // Ranges GetBodiesByRange(ctx context.Context, in *GetBodiesByRangeRequest, opts ...grpc.CallOption) (*GetBodiesBatchResponse, error) GetBodiesByHashes(ctx context.Context, in *GetBodiesByHashesRequest, opts ...grpc.CallOption) (*GetBodiesBatchResponse, error) @@ -160,6 +162,15 @@ func (c *executionClient) GetBody(ctx context.Context, in *GetSegmentRequest, op return out, nil } +func (c *executionClient) HasBlock(ctx context.Context, in *GetSegmentRequest, opts ...grpc.CallOption) (*HasBlockResponse, error) { + out := new(HasBlockResponse) + err := c.cc.Invoke(ctx, Execution_HasBlock_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *executionClient) GetBodiesByRange(ctx context.Context, in *GetBodiesByRangeRequest, opts ...grpc.CallOption) (*GetBodiesBatchResponse, error) { out := new(GetBodiesBatchResponse) err := c.cc.Invoke(ctx, Execution_GetBodiesByRange_FullMethodName, in, out, opts...) @@ -241,6 +252,7 @@ type ExecutionServer interface { GetTD(context.Context, *GetSegmentRequest) (*GetTDResponse, error) GetHeader(context.Context, *GetSegmentRequest) (*GetHeaderResponse, error) GetBody(context.Context, *GetSegmentRequest) (*GetBodyResponse, error) + HasBlock(context.Context, *GetSegmentRequest) (*HasBlockResponse, error) // Ranges GetBodiesByRange(context.Context, *GetBodiesByRangeRequest) (*GetBodiesBatchResponse, error) GetBodiesByHashes(context.Context, *GetBodiesByHashesRequest) (*GetBodiesBatchResponse, error) @@ -287,6 +299,9 @@ func (UnimplementedExecutionServer) GetHeader(context.Context, *GetSegmentReques func (UnimplementedExecutionServer) GetBody(context.Context, *GetSegmentRequest) (*GetBodyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetBody not implemented") } +func (UnimplementedExecutionServer) HasBlock(context.Context, *GetSegmentRequest) (*HasBlockResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HasBlock not implemented") +} func (UnimplementedExecutionServer) GetBodiesByRange(context.Context, *GetBodiesByRangeRequest) (*GetBodiesBatchResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetBodiesByRange not implemented") } @@ -483,6 +498,24 @@ func _Execution_GetBody_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _Execution_HasBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSegmentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ExecutionServer).HasBlock(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Execution_HasBlock_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ExecutionServer).HasBlock(ctx, req.(*GetSegmentRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Execution_GetBodiesByRange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetBodiesByRangeRequest) if err := dec(in); err != nil { @@ -652,6 +685,10 @@ var Execution_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetBody", Handler: _Execution_GetBody_Handler, }, + { + MethodName: "HasBlock", + Handler: _Execution_HasBlock_Handler, + }, { MethodName: "GetBodiesByRange", Handler: _Execution_GetBodiesByRange_Handler, diff --git a/erigon-lib/gointerfaces/remote/kv_client_mock.go b/erigon-lib/gointerfaces/remote/kv_client_mock.go new file mode 100644 index 00000000000..8d0b208e92f --- /dev/null +++ b/erigon-lib/gointerfaces/remote/kv_client_mock.go @@ -0,0 +1,483 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon-lib/gointerfaces/remote (interfaces: KVClient) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./kv_client_mock.go -package=remote . KVClient +// + +// Package remote is a generated GoMock package. +package remote + +import ( + context "context" + reflect "reflect" + + types "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + gomock "go.uber.org/mock/gomock" + grpc "google.golang.org/grpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// MockKVClient is a mock of KVClient interface. +type MockKVClient struct { + ctrl *gomock.Controller + recorder *MockKVClientMockRecorder +} + +// MockKVClientMockRecorder is the mock recorder for MockKVClient. +type MockKVClientMockRecorder struct { + mock *MockKVClient +} + +// NewMockKVClient creates a new mock instance. +func NewMockKVClient(ctrl *gomock.Controller) *MockKVClient { + mock := &MockKVClient{ctrl: ctrl} + mock.recorder = &MockKVClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockKVClient) EXPECT() *MockKVClientMockRecorder { + return m.recorder +} + +// DomainGet mocks base method. +func (m *MockKVClient) DomainGet(arg0 context.Context, arg1 *DomainGetReq, arg2 ...grpc.CallOption) (*DomainGetReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DomainGet", varargs...) + ret0, _ := ret[0].(*DomainGetReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DomainGet indicates an expected call of DomainGet. +func (mr *MockKVClientMockRecorder) DomainGet(arg0, arg1 any, arg2 ...any) *MockKVClientDomainGetCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DomainGet", reflect.TypeOf((*MockKVClient)(nil).DomainGet), varargs...) + return &MockKVClientDomainGetCall{Call: call} +} + +// MockKVClientDomainGetCall wrap *gomock.Call +type MockKVClientDomainGetCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientDomainGetCall) Return(arg0 *DomainGetReply, arg1 error) *MockKVClientDomainGetCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientDomainGetCall) Do(f func(context.Context, *DomainGetReq, ...grpc.CallOption) (*DomainGetReply, error)) *MockKVClientDomainGetCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientDomainGetCall) DoAndReturn(f func(context.Context, *DomainGetReq, ...grpc.CallOption) (*DomainGetReply, error)) *MockKVClientDomainGetCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// DomainRange mocks base method. +func (m *MockKVClient) DomainRange(arg0 context.Context, arg1 *DomainRangeReq, arg2 ...grpc.CallOption) (*Pairs, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DomainRange", varargs...) + ret0, _ := ret[0].(*Pairs) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DomainRange indicates an expected call of DomainRange. +func (mr *MockKVClientMockRecorder) DomainRange(arg0, arg1 any, arg2 ...any) *MockKVClientDomainRangeCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DomainRange", reflect.TypeOf((*MockKVClient)(nil).DomainRange), varargs...) + return &MockKVClientDomainRangeCall{Call: call} +} + +// MockKVClientDomainRangeCall wrap *gomock.Call +type MockKVClientDomainRangeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientDomainRangeCall) Return(arg0 *Pairs, arg1 error) *MockKVClientDomainRangeCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientDomainRangeCall) Do(f func(context.Context, *DomainRangeReq, ...grpc.CallOption) (*Pairs, error)) *MockKVClientDomainRangeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientDomainRangeCall) DoAndReturn(f func(context.Context, *DomainRangeReq, ...grpc.CallOption) (*Pairs, error)) *MockKVClientDomainRangeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// HistoryGet mocks base method. +func (m *MockKVClient) HistoryGet(arg0 context.Context, arg1 *HistoryGetReq, arg2 ...grpc.CallOption) (*HistoryGetReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "HistoryGet", varargs...) + ret0, _ := ret[0].(*HistoryGetReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HistoryGet indicates an expected call of HistoryGet. +func (mr *MockKVClientMockRecorder) HistoryGet(arg0, arg1 any, arg2 ...any) *MockKVClientHistoryGetCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HistoryGet", reflect.TypeOf((*MockKVClient)(nil).HistoryGet), varargs...) + return &MockKVClientHistoryGetCall{Call: call} +} + +// MockKVClientHistoryGetCall wrap *gomock.Call +type MockKVClientHistoryGetCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientHistoryGetCall) Return(arg0 *HistoryGetReply, arg1 error) *MockKVClientHistoryGetCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientHistoryGetCall) Do(f func(context.Context, *HistoryGetReq, ...grpc.CallOption) (*HistoryGetReply, error)) *MockKVClientHistoryGetCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientHistoryGetCall) DoAndReturn(f func(context.Context, *HistoryGetReq, ...grpc.CallOption) (*HistoryGetReply, error)) *MockKVClientHistoryGetCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// HistoryRange mocks base method. +func (m *MockKVClient) HistoryRange(arg0 context.Context, arg1 *HistoryRangeReq, arg2 ...grpc.CallOption) (*Pairs, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "HistoryRange", varargs...) + ret0, _ := ret[0].(*Pairs) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HistoryRange indicates an expected call of HistoryRange. +func (mr *MockKVClientMockRecorder) HistoryRange(arg0, arg1 any, arg2 ...any) *MockKVClientHistoryRangeCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HistoryRange", reflect.TypeOf((*MockKVClient)(nil).HistoryRange), varargs...) + return &MockKVClientHistoryRangeCall{Call: call} +} + +// MockKVClientHistoryRangeCall wrap *gomock.Call +type MockKVClientHistoryRangeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientHistoryRangeCall) Return(arg0 *Pairs, arg1 error) *MockKVClientHistoryRangeCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientHistoryRangeCall) Do(f func(context.Context, *HistoryRangeReq, ...grpc.CallOption) (*Pairs, error)) *MockKVClientHistoryRangeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientHistoryRangeCall) DoAndReturn(f func(context.Context, *HistoryRangeReq, ...grpc.CallOption) (*Pairs, error)) *MockKVClientHistoryRangeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// IndexRange mocks base method. +func (m *MockKVClient) IndexRange(arg0 context.Context, arg1 *IndexRangeReq, arg2 ...grpc.CallOption) (*IndexRangeReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "IndexRange", varargs...) + ret0, _ := ret[0].(*IndexRangeReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// IndexRange indicates an expected call of IndexRange. +func (mr *MockKVClientMockRecorder) IndexRange(arg0, arg1 any, arg2 ...any) *MockKVClientIndexRangeCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IndexRange", reflect.TypeOf((*MockKVClient)(nil).IndexRange), varargs...) + return &MockKVClientIndexRangeCall{Call: call} +} + +// MockKVClientIndexRangeCall wrap *gomock.Call +type MockKVClientIndexRangeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientIndexRangeCall) Return(arg0 *IndexRangeReply, arg1 error) *MockKVClientIndexRangeCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientIndexRangeCall) Do(f func(context.Context, *IndexRangeReq, ...grpc.CallOption) (*IndexRangeReply, error)) *MockKVClientIndexRangeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientIndexRangeCall) DoAndReturn(f func(context.Context, *IndexRangeReq, ...grpc.CallOption) (*IndexRangeReply, error)) *MockKVClientIndexRangeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Range mocks base method. +func (m *MockKVClient) Range(arg0 context.Context, arg1 *RangeReq, arg2 ...grpc.CallOption) (*Pairs, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Range", varargs...) + ret0, _ := ret[0].(*Pairs) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Range indicates an expected call of Range. +func (mr *MockKVClientMockRecorder) Range(arg0, arg1 any, arg2 ...any) *MockKVClientRangeCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Range", reflect.TypeOf((*MockKVClient)(nil).Range), varargs...) + return &MockKVClientRangeCall{Call: call} +} + +// MockKVClientRangeCall wrap *gomock.Call +type MockKVClientRangeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientRangeCall) Return(arg0 *Pairs, arg1 error) *MockKVClientRangeCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientRangeCall) Do(f func(context.Context, *RangeReq, ...grpc.CallOption) (*Pairs, error)) *MockKVClientRangeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientRangeCall) DoAndReturn(f func(context.Context, *RangeReq, ...grpc.CallOption) (*Pairs, error)) *MockKVClientRangeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Snapshots mocks base method. +func (m *MockKVClient) Snapshots(arg0 context.Context, arg1 *SnapshotsRequest, arg2 ...grpc.CallOption) (*SnapshotsReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Snapshots", varargs...) + ret0, _ := ret[0].(*SnapshotsReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Snapshots indicates an expected call of Snapshots. +func (mr *MockKVClientMockRecorder) Snapshots(arg0, arg1 any, arg2 ...any) *MockKVClientSnapshotsCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Snapshots", reflect.TypeOf((*MockKVClient)(nil).Snapshots), varargs...) + return &MockKVClientSnapshotsCall{Call: call} +} + +// MockKVClientSnapshotsCall wrap *gomock.Call +type MockKVClientSnapshotsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientSnapshotsCall) Return(arg0 *SnapshotsReply, arg1 error) *MockKVClientSnapshotsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientSnapshotsCall) Do(f func(context.Context, *SnapshotsRequest, ...grpc.CallOption) (*SnapshotsReply, error)) *MockKVClientSnapshotsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientSnapshotsCall) DoAndReturn(f func(context.Context, *SnapshotsRequest, ...grpc.CallOption) (*SnapshotsReply, error)) *MockKVClientSnapshotsCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// StateChanges mocks base method. +func (m *MockKVClient) StateChanges(arg0 context.Context, arg1 *StateChangeRequest, arg2 ...grpc.CallOption) (KV_StateChangesClient, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "StateChanges", varargs...) + ret0, _ := ret[0].(KV_StateChangesClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateChanges indicates an expected call of StateChanges. +func (mr *MockKVClientMockRecorder) StateChanges(arg0, arg1 any, arg2 ...any) *MockKVClientStateChangesCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateChanges", reflect.TypeOf((*MockKVClient)(nil).StateChanges), varargs...) + return &MockKVClientStateChangesCall{Call: call} +} + +// MockKVClientStateChangesCall wrap *gomock.Call +type MockKVClientStateChangesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientStateChangesCall) Return(arg0 KV_StateChangesClient, arg1 error) *MockKVClientStateChangesCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientStateChangesCall) Do(f func(context.Context, *StateChangeRequest, ...grpc.CallOption) (KV_StateChangesClient, error)) *MockKVClientStateChangesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientStateChangesCall) DoAndReturn(f func(context.Context, *StateChangeRequest, ...grpc.CallOption) (KV_StateChangesClient, error)) *MockKVClientStateChangesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Tx mocks base method. +func (m *MockKVClient) Tx(arg0 context.Context, arg1 ...grpc.CallOption) (KV_TxClient, error) { + m.ctrl.T.Helper() + varargs := []any{arg0} + for _, a := range arg1 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Tx", varargs...) + ret0, _ := ret[0].(KV_TxClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Tx indicates an expected call of Tx. +func (mr *MockKVClientMockRecorder) Tx(arg0 any, arg1 ...any) *MockKVClientTxCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0}, arg1...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Tx", reflect.TypeOf((*MockKVClient)(nil).Tx), varargs...) + return &MockKVClientTxCall{Call: call} +} + +// MockKVClientTxCall wrap *gomock.Call +type MockKVClientTxCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientTxCall) Return(arg0 KV_TxClient, arg1 error) *MockKVClientTxCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientTxCall) Do(f func(context.Context, ...grpc.CallOption) (KV_TxClient, error)) *MockKVClientTxCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientTxCall) DoAndReturn(f func(context.Context, ...grpc.CallOption) (KV_TxClient, error)) *MockKVClientTxCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Version mocks base method. +func (m *MockKVClient) Version(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*types.VersionReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Version", varargs...) + ret0, _ := ret[0].(*types.VersionReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Version indicates an expected call of Version. +func (mr *MockKVClientMockRecorder) Version(arg0, arg1 any, arg2 ...any) *MockKVClientVersionCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Version", reflect.TypeOf((*MockKVClient)(nil).Version), varargs...) + return &MockKVClientVersionCall{Call: call} +} + +// MockKVClientVersionCall wrap *gomock.Call +type MockKVClientVersionCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKVClientVersionCall) Return(arg0 *types.VersionReply, arg1 error) *MockKVClientVersionCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKVClientVersionCall) Do(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*types.VersionReply, error)) *MockKVClientVersionCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKVClientVersionCall) DoAndReturn(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*types.VersionReply, error)) *MockKVClientVersionCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/erigon-lib/gointerfaces/remote/kv_state_changes_client_mock.go b/erigon-lib/gointerfaces/remote/kv_state_changes_client_mock.go new file mode 100644 index 00000000000..02b061aab16 --- /dev/null +++ b/erigon-lib/gointerfaces/remote/kv_state_changes_client_mock.go @@ -0,0 +1,309 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon-lib/gointerfaces/remote (interfaces: KV_StateChangesClient) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./kv_state_changes_client_mock.go -package=remote . KV_StateChangesClient +// + +// Package remote is a generated GoMock package. +package remote + +import ( + context "context" + reflect "reflect" + + gomock "go.uber.org/mock/gomock" + metadata "google.golang.org/grpc/metadata" +) + +// MockKV_StateChangesClient is a mock of KV_StateChangesClient interface. +type MockKV_StateChangesClient struct { + ctrl *gomock.Controller + recorder *MockKV_StateChangesClientMockRecorder +} + +// MockKV_StateChangesClientMockRecorder is the mock recorder for MockKV_StateChangesClient. +type MockKV_StateChangesClientMockRecorder struct { + mock *MockKV_StateChangesClient +} + +// NewMockKV_StateChangesClient creates a new mock instance. +func NewMockKV_StateChangesClient(ctrl *gomock.Controller) *MockKV_StateChangesClient { + mock := &MockKV_StateChangesClient{ctrl: ctrl} + mock.recorder = &MockKV_StateChangesClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockKV_StateChangesClient) EXPECT() *MockKV_StateChangesClientMockRecorder { + return m.recorder +} + +// CloseSend mocks base method. +func (m *MockKV_StateChangesClient) CloseSend() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CloseSend") + ret0, _ := ret[0].(error) + return ret0 +} + +// CloseSend indicates an expected call of CloseSend. +func (mr *MockKV_StateChangesClientMockRecorder) CloseSend() *MockKV_StateChangesClientCloseSendCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseSend", reflect.TypeOf((*MockKV_StateChangesClient)(nil).CloseSend)) + return &MockKV_StateChangesClientCloseSendCall{Call: call} +} + +// MockKV_StateChangesClientCloseSendCall wrap *gomock.Call +type MockKV_StateChangesClientCloseSendCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKV_StateChangesClientCloseSendCall) Return(arg0 error) *MockKV_StateChangesClientCloseSendCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKV_StateChangesClientCloseSendCall) Do(f func() error) *MockKV_StateChangesClientCloseSendCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKV_StateChangesClientCloseSendCall) DoAndReturn(f func() error) *MockKV_StateChangesClientCloseSendCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Context mocks base method. +func (m *MockKV_StateChangesClient) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockKV_StateChangesClientMockRecorder) Context() *MockKV_StateChangesClientContextCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockKV_StateChangesClient)(nil).Context)) + return &MockKV_StateChangesClientContextCall{Call: call} +} + +// MockKV_StateChangesClientContextCall wrap *gomock.Call +type MockKV_StateChangesClientContextCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKV_StateChangesClientContextCall) Return(arg0 context.Context) *MockKV_StateChangesClientContextCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKV_StateChangesClientContextCall) Do(f func() context.Context) *MockKV_StateChangesClientContextCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKV_StateChangesClientContextCall) DoAndReturn(f func() context.Context) *MockKV_StateChangesClientContextCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Header mocks base method. +func (m *MockKV_StateChangesClient) Header() (metadata.MD, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Header") + ret0, _ := ret[0].(metadata.MD) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Header indicates an expected call of Header. +func (mr *MockKV_StateChangesClientMockRecorder) Header() *MockKV_StateChangesClientHeaderCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Header", reflect.TypeOf((*MockKV_StateChangesClient)(nil).Header)) + return &MockKV_StateChangesClientHeaderCall{Call: call} +} + +// MockKV_StateChangesClientHeaderCall wrap *gomock.Call +type MockKV_StateChangesClientHeaderCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKV_StateChangesClientHeaderCall) Return(arg0 metadata.MD, arg1 error) *MockKV_StateChangesClientHeaderCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKV_StateChangesClientHeaderCall) Do(f func() (metadata.MD, error)) *MockKV_StateChangesClientHeaderCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKV_StateChangesClientHeaderCall) DoAndReturn(f func() (metadata.MD, error)) *MockKV_StateChangesClientHeaderCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Recv mocks base method. +func (m *MockKV_StateChangesClient) Recv() (*StateChangeBatch, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Recv") + ret0, _ := ret[0].(*StateChangeBatch) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Recv indicates an expected call of Recv. +func (mr *MockKV_StateChangesClientMockRecorder) Recv() *MockKV_StateChangesClientRecvCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Recv", reflect.TypeOf((*MockKV_StateChangesClient)(nil).Recv)) + return &MockKV_StateChangesClientRecvCall{Call: call} +} + +// MockKV_StateChangesClientRecvCall wrap *gomock.Call +type MockKV_StateChangesClientRecvCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKV_StateChangesClientRecvCall) Return(arg0 *StateChangeBatch, arg1 error) *MockKV_StateChangesClientRecvCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKV_StateChangesClientRecvCall) Do(f func() (*StateChangeBatch, error)) *MockKV_StateChangesClientRecvCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKV_StateChangesClientRecvCall) DoAndReturn(f func() (*StateChangeBatch, error)) *MockKV_StateChangesClientRecvCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// RecvMsg mocks base method. +func (m *MockKV_StateChangesClient) RecvMsg(arg0 any) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RecvMsg", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockKV_StateChangesClientMockRecorder) RecvMsg(arg0 any) *MockKV_StateChangesClientRecvMsgCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockKV_StateChangesClient)(nil).RecvMsg), arg0) + return &MockKV_StateChangesClientRecvMsgCall{Call: call} +} + +// MockKV_StateChangesClientRecvMsgCall wrap *gomock.Call +type MockKV_StateChangesClientRecvMsgCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKV_StateChangesClientRecvMsgCall) Return(arg0 error) *MockKV_StateChangesClientRecvMsgCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKV_StateChangesClientRecvMsgCall) Do(f func(any) error) *MockKV_StateChangesClientRecvMsgCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKV_StateChangesClientRecvMsgCall) DoAndReturn(f func(any) error) *MockKV_StateChangesClientRecvMsgCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMsg mocks base method. +func (m *MockKV_StateChangesClient) SendMsg(arg0 any) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendMsg", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockKV_StateChangesClientMockRecorder) SendMsg(arg0 any) *MockKV_StateChangesClientSendMsgCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockKV_StateChangesClient)(nil).SendMsg), arg0) + return &MockKV_StateChangesClientSendMsgCall{Call: call} +} + +// MockKV_StateChangesClientSendMsgCall wrap *gomock.Call +type MockKV_StateChangesClientSendMsgCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKV_StateChangesClientSendMsgCall) Return(arg0 error) *MockKV_StateChangesClientSendMsgCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKV_StateChangesClientSendMsgCall) Do(f func(any) error) *MockKV_StateChangesClientSendMsgCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKV_StateChangesClientSendMsgCall) DoAndReturn(f func(any) error) *MockKV_StateChangesClientSendMsgCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Trailer mocks base method. +func (m *MockKV_StateChangesClient) Trailer() metadata.MD { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Trailer") + ret0, _ := ret[0].(metadata.MD) + return ret0 +} + +// Trailer indicates an expected call of Trailer. +func (mr *MockKV_StateChangesClientMockRecorder) Trailer() *MockKV_StateChangesClientTrailerCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Trailer", reflect.TypeOf((*MockKV_StateChangesClient)(nil).Trailer)) + return &MockKV_StateChangesClientTrailerCall{Call: call} +} + +// MockKV_StateChangesClientTrailerCall wrap *gomock.Call +type MockKV_StateChangesClientTrailerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockKV_StateChangesClientTrailerCall) Return(arg0 metadata.MD) *MockKV_StateChangesClientTrailerCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockKV_StateChangesClientTrailerCall) Do(f func() metadata.MD) *MockKV_StateChangesClientTrailerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockKV_StateChangesClientTrailerCall) DoAndReturn(f func() metadata.MD) *MockKV_StateChangesClientTrailerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/erigon-lib/gointerfaces/remote/mockgen.go b/erigon-lib/gointerfaces/remote/mockgen.go new file mode 100644 index 00000000000..b56c4e01b44 --- /dev/null +++ b/erigon-lib/gointerfaces/remote/mockgen.go @@ -0,0 +1,4 @@ +package remote + +//go:generate mockgen -typed=true -destination=./kv_client_mock.go -package=remote . KVClient +//go:generate mockgen -typed=true -destination=./kv_state_changes_client_mock.go -package=remote . KV_StateChangesClient diff --git a/erigon-lib/gointerfaces/remote/mocks.go b/erigon-lib/gointerfaces/remote/mocks.go deleted file mode 100644 index 8300eb434d2..00000000000 --- a/erigon-lib/gointerfaces/remote/mocks.go +++ /dev/null @@ -1,947 +0,0 @@ -// Code generated by moq; DO NOT EDIT. -// github.com/matryer/moq - -package remote - -import ( - context "context" - types "github.com/ledgerwatch/erigon-lib/gointerfaces/types" - grpc "google.golang.org/grpc" - "google.golang.org/grpc/metadata" - emptypb "google.golang.org/protobuf/types/known/emptypb" - sync "sync" -) - -// Ensure, that KVClientMock does implement KVClient. -// If this is not the case, regenerate this file with moq. -var _ KVClient = &KVClientMock{} - -// KVClientMock is a mock implementation of KVClient. -// -// func TestSomethingThatUsesKVClient(t *testing.T) { -// -// // make and configure a mocked KVClient -// mockedKVClient := &KVClientMock{ -// DomainGetFunc: func(ctx context.Context, in *DomainGetReq, opts ...grpc.CallOption) (*DomainGetReply, error) { -// panic("mock out the DomainGet method") -// }, -// DomainRangeFunc: func(ctx context.Context, in *DomainRangeReq, opts ...grpc.CallOption) (*Pairs, error) { -// panic("mock out the DomainRange method") -// }, -// HistoryGetFunc: func(ctx context.Context, in *HistoryGetReq, opts ...grpc.CallOption) (*HistoryGetReply, error) { -// panic("mock out the HistoryGet method") -// }, -// HistoryRangeFunc: func(ctx context.Context, in *HistoryRangeReq, opts ...grpc.CallOption) (*Pairs, error) { -// panic("mock out the HistoryRange method") -// }, -// IndexRangeFunc: func(ctx context.Context, in *IndexRangeReq, opts ...grpc.CallOption) (*IndexRangeReply, error) { -// panic("mock out the IndexRange method") -// }, -// RangeFunc: func(ctx context.Context, in *RangeReq, opts ...grpc.CallOption) (*Pairs, error) { -// panic("mock out the Range method") -// }, -// SnapshotsFunc: func(ctx context.Context, in *SnapshotsRequest, opts ...grpc.CallOption) (*SnapshotsReply, error) { -// panic("mock out the Snapshots method") -// }, -// StateChangesFunc: func(ctx context.Context, in *StateChangeRequest, opts ...grpc.CallOption) (KV_StateChangesClient, error) { -// panic("mock out the StateChanges method") -// }, -// TxFunc: func(ctx context.Context, opts ...grpc.CallOption) (KV_TxClient, error) { -// panic("mock out the Tx method") -// }, -// VersionFunc: func(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*types.VersionReply, error) { -// panic("mock out the Version method") -// }, -// } -// -// // use mockedKVClient in code that requires KVClient -// // and then make assertions. -// -// } -type KVClientMock struct { - // DomainGetFunc mocks the DomainGet method. - DomainGetFunc func(ctx context.Context, in *DomainGetReq, opts ...grpc.CallOption) (*DomainGetReply, error) - - // DomainRangeFunc mocks the DomainRange method. - DomainRangeFunc func(ctx context.Context, in *DomainRangeReq, opts ...grpc.CallOption) (*Pairs, error) - - // HistoryGetFunc mocks the HistoryGet method. - HistoryGetFunc func(ctx context.Context, in *HistoryGetReq, opts ...grpc.CallOption) (*HistoryGetReply, error) - - // HistoryRangeFunc mocks the HistoryRange method. - HistoryRangeFunc func(ctx context.Context, in *HistoryRangeReq, opts ...grpc.CallOption) (*Pairs, error) - - // IndexRangeFunc mocks the IndexRange method. - IndexRangeFunc func(ctx context.Context, in *IndexRangeReq, opts ...grpc.CallOption) (*IndexRangeReply, error) - - // RangeFunc mocks the Range method. - RangeFunc func(ctx context.Context, in *RangeReq, opts ...grpc.CallOption) (*Pairs, error) - - // SnapshotsFunc mocks the Snapshots method. - SnapshotsFunc func(ctx context.Context, in *SnapshotsRequest, opts ...grpc.CallOption) (*SnapshotsReply, error) - - // StateChangesFunc mocks the StateChanges method. - StateChangesFunc func(ctx context.Context, in *StateChangeRequest, opts ...grpc.CallOption) (KV_StateChangesClient, error) - - // TxFunc mocks the Tx method. - TxFunc func(ctx context.Context, opts ...grpc.CallOption) (KV_TxClient, error) - - // VersionFunc mocks the Version method. - VersionFunc func(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*types.VersionReply, error) - - // calls tracks calls to the methods. - calls struct { - // DomainGet holds details about calls to the DomainGet method. - DomainGet []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *DomainGetReq - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // DomainRange holds details about calls to the DomainRange method. - DomainRange []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *DomainRangeReq - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // HistoryGet holds details about calls to the HistoryGet method. - HistoryGet []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *HistoryGetReq - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // HistoryRange holds details about calls to the HistoryRange method. - HistoryRange []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *HistoryRangeReq - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // IndexRange holds details about calls to the IndexRange method. - IndexRange []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *IndexRangeReq - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // Range holds details about calls to the Range method. - Range []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *RangeReq - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // Snapshots holds details about calls to the Snapshots method. - Snapshots []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *SnapshotsRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // StateChanges holds details about calls to the StateChanges method. - StateChanges []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *StateChangeRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // Tx holds details about calls to the Tx method. - Tx []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // Version holds details about calls to the Version method. - Version []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *emptypb.Empty - // Opts is the opts argument value. - Opts []grpc.CallOption - } - } - lockDomainGet sync.RWMutex - lockDomainRange sync.RWMutex - lockHistoryGet sync.RWMutex - lockHistoryRange sync.RWMutex - lockIndexRange sync.RWMutex - lockRange sync.RWMutex - lockSnapshots sync.RWMutex - lockStateChanges sync.RWMutex - lockTx sync.RWMutex - lockVersion sync.RWMutex -} - -// DomainGet calls DomainGetFunc. -func (mock *KVClientMock) DomainGet(ctx context.Context, in *DomainGetReq, opts ...grpc.CallOption) (*DomainGetReply, error) { - callInfo := struct { - Ctx context.Context - In *DomainGetReq - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockDomainGet.Lock() - mock.calls.DomainGet = append(mock.calls.DomainGet, callInfo) - mock.lockDomainGet.Unlock() - if mock.DomainGetFunc == nil { - var ( - domainGetReplyOut *DomainGetReply - errOut error - ) - return domainGetReplyOut, errOut - } - return mock.DomainGetFunc(ctx, in, opts...) -} - -// DomainGetCalls gets all the calls that were made to DomainGet. -// Check the length with: -// -// len(mockedKVClient.DomainGetCalls()) -func (mock *KVClientMock) DomainGetCalls() []struct { - Ctx context.Context - In *DomainGetReq - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *DomainGetReq - Opts []grpc.CallOption - } - mock.lockDomainGet.RLock() - calls = mock.calls.DomainGet - mock.lockDomainGet.RUnlock() - return calls -} - -// DomainRange calls DomainRangeFunc. -func (mock *KVClientMock) DomainRange(ctx context.Context, in *DomainRangeReq, opts ...grpc.CallOption) (*Pairs, error) { - callInfo := struct { - Ctx context.Context - In *DomainRangeReq - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockDomainRange.Lock() - mock.calls.DomainRange = append(mock.calls.DomainRange, callInfo) - mock.lockDomainRange.Unlock() - if mock.DomainRangeFunc == nil { - var ( - pairsOut *Pairs - errOut error - ) - return pairsOut, errOut - } - return mock.DomainRangeFunc(ctx, in, opts...) -} - -// DomainRangeCalls gets all the calls that were made to DomainRange. -// Check the length with: -// -// len(mockedKVClient.DomainRangeCalls()) -func (mock *KVClientMock) DomainRangeCalls() []struct { - Ctx context.Context - In *DomainRangeReq - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *DomainRangeReq - Opts []grpc.CallOption - } - mock.lockDomainRange.RLock() - calls = mock.calls.DomainRange - mock.lockDomainRange.RUnlock() - return calls -} - -// HistoryGet calls HistoryGetFunc. -func (mock *KVClientMock) HistoryGet(ctx context.Context, in *HistoryGetReq, opts ...grpc.CallOption) (*HistoryGetReply, error) { - callInfo := struct { - Ctx context.Context - In *HistoryGetReq - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockHistoryGet.Lock() - mock.calls.HistoryGet = append(mock.calls.HistoryGet, callInfo) - mock.lockHistoryGet.Unlock() - if mock.HistoryGetFunc == nil { - var ( - historyGetReplyOut *HistoryGetReply - errOut error - ) - return historyGetReplyOut, errOut - } - return mock.HistoryGetFunc(ctx, in, opts...) -} - -// HistoryGetCalls gets all the calls that were made to HistoryGet. -// Check the length with: -// -// len(mockedKVClient.HistoryGetCalls()) -func (mock *KVClientMock) HistoryGetCalls() []struct { - Ctx context.Context - In *HistoryGetReq - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *HistoryGetReq - Opts []grpc.CallOption - } - mock.lockHistoryGet.RLock() - calls = mock.calls.HistoryGet - mock.lockHistoryGet.RUnlock() - return calls -} - -// HistoryRange calls HistoryRangeFunc. -func (mock *KVClientMock) HistoryRange(ctx context.Context, in *HistoryRangeReq, opts ...grpc.CallOption) (*Pairs, error) { - callInfo := struct { - Ctx context.Context - In *HistoryRangeReq - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockHistoryRange.Lock() - mock.calls.HistoryRange = append(mock.calls.HistoryRange, callInfo) - mock.lockHistoryRange.Unlock() - if mock.HistoryRangeFunc == nil { - var ( - pairsOut *Pairs - errOut error - ) - return pairsOut, errOut - } - return mock.HistoryRangeFunc(ctx, in, opts...) -} - -// HistoryRangeCalls gets all the calls that were made to HistoryRange. -// Check the length with: -// -// len(mockedKVClient.HistoryRangeCalls()) -func (mock *KVClientMock) HistoryRangeCalls() []struct { - Ctx context.Context - In *HistoryRangeReq - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *HistoryRangeReq - Opts []grpc.CallOption - } - mock.lockHistoryRange.RLock() - calls = mock.calls.HistoryRange - mock.lockHistoryRange.RUnlock() - return calls -} - -// IndexRange calls IndexRangeFunc. -func (mock *KVClientMock) IndexRange(ctx context.Context, in *IndexRangeReq, opts ...grpc.CallOption) (*IndexRangeReply, error) { - callInfo := struct { - Ctx context.Context - In *IndexRangeReq - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockIndexRange.Lock() - mock.calls.IndexRange = append(mock.calls.IndexRange, callInfo) - mock.lockIndexRange.Unlock() - if mock.IndexRangeFunc == nil { - var ( - indexRangeReplyOut *IndexRangeReply - errOut error - ) - return indexRangeReplyOut, errOut - } - return mock.IndexRangeFunc(ctx, in, opts...) -} - -// IndexRangeCalls gets all the calls that were made to IndexRange. -// Check the length with: -// -// len(mockedKVClient.IndexRangeCalls()) -func (mock *KVClientMock) IndexRangeCalls() []struct { - Ctx context.Context - In *IndexRangeReq - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *IndexRangeReq - Opts []grpc.CallOption - } - mock.lockIndexRange.RLock() - calls = mock.calls.IndexRange - mock.lockIndexRange.RUnlock() - return calls -} - -// Range calls RangeFunc. -func (mock *KVClientMock) Range(ctx context.Context, in *RangeReq, opts ...grpc.CallOption) (*Pairs, error) { - callInfo := struct { - Ctx context.Context - In *RangeReq - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockRange.Lock() - mock.calls.Range = append(mock.calls.Range, callInfo) - mock.lockRange.Unlock() - if mock.RangeFunc == nil { - var ( - pairsOut *Pairs - errOut error - ) - return pairsOut, errOut - } - return mock.RangeFunc(ctx, in, opts...) -} - -// RangeCalls gets all the calls that were made to Range. -// Check the length with: -// -// len(mockedKVClient.RangeCalls()) -func (mock *KVClientMock) RangeCalls() []struct { - Ctx context.Context - In *RangeReq - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *RangeReq - Opts []grpc.CallOption - } - mock.lockRange.RLock() - calls = mock.calls.Range - mock.lockRange.RUnlock() - return calls -} - -// Snapshots calls SnapshotsFunc. -func (mock *KVClientMock) Snapshots(ctx context.Context, in *SnapshotsRequest, opts ...grpc.CallOption) (*SnapshotsReply, error) { - callInfo := struct { - Ctx context.Context - In *SnapshotsRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockSnapshots.Lock() - mock.calls.Snapshots = append(mock.calls.Snapshots, callInfo) - mock.lockSnapshots.Unlock() - if mock.SnapshotsFunc == nil { - var ( - snapshotsReplyOut *SnapshotsReply - errOut error - ) - return snapshotsReplyOut, errOut - } - return mock.SnapshotsFunc(ctx, in, opts...) -} - -// SnapshotsCalls gets all the calls that were made to Snapshots. -// Check the length with: -// -// len(mockedKVClient.SnapshotsCalls()) -func (mock *KVClientMock) SnapshotsCalls() []struct { - Ctx context.Context - In *SnapshotsRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *SnapshotsRequest - Opts []grpc.CallOption - } - mock.lockSnapshots.RLock() - calls = mock.calls.Snapshots - mock.lockSnapshots.RUnlock() - return calls -} - -// StateChanges calls StateChangesFunc. -func (mock *KVClientMock) StateChanges(ctx context.Context, in *StateChangeRequest, opts ...grpc.CallOption) (KV_StateChangesClient, error) { - callInfo := struct { - Ctx context.Context - In *StateChangeRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockStateChanges.Lock() - mock.calls.StateChanges = append(mock.calls.StateChanges, callInfo) - mock.lockStateChanges.Unlock() - if mock.StateChangesFunc == nil { - var ( - kV_StateChangesClientOut KV_StateChangesClient - errOut error - ) - return kV_StateChangesClientOut, errOut - } - return mock.StateChangesFunc(ctx, in, opts...) -} - -// StateChangesCalls gets all the calls that were made to StateChanges. -// Check the length with: -// -// len(mockedKVClient.StateChangesCalls()) -func (mock *KVClientMock) StateChangesCalls() []struct { - Ctx context.Context - In *StateChangeRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *StateChangeRequest - Opts []grpc.CallOption - } - mock.lockStateChanges.RLock() - calls = mock.calls.StateChanges - mock.lockStateChanges.RUnlock() - return calls -} - -// Tx calls TxFunc. -func (mock *KVClientMock) Tx(ctx context.Context, opts ...grpc.CallOption) (KV_TxClient, error) { - callInfo := struct { - Ctx context.Context - Opts []grpc.CallOption - }{ - Ctx: ctx, - Opts: opts, - } - mock.lockTx.Lock() - mock.calls.Tx = append(mock.calls.Tx, callInfo) - mock.lockTx.Unlock() - if mock.TxFunc == nil { - var ( - kV_TxClientOut KV_TxClient - errOut error - ) - return kV_TxClientOut, errOut - } - return mock.TxFunc(ctx, opts...) -} - -// TxCalls gets all the calls that were made to Tx. -// Check the length with: -// -// len(mockedKVClient.TxCalls()) -func (mock *KVClientMock) TxCalls() []struct { - Ctx context.Context - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - Opts []grpc.CallOption - } - mock.lockTx.RLock() - calls = mock.calls.Tx - mock.lockTx.RUnlock() - return calls -} - -// Version calls VersionFunc. -func (mock *KVClientMock) Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*types.VersionReply, error) { - callInfo := struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockVersion.Lock() - mock.calls.Version = append(mock.calls.Version, callInfo) - mock.lockVersion.Unlock() - if mock.VersionFunc == nil { - var ( - versionReplyOut *types.VersionReply - errOut error - ) - return versionReplyOut, errOut - } - return mock.VersionFunc(ctx, in, opts...) -} - -// VersionCalls gets all the calls that were made to Version. -// Check the length with: -// -// len(mockedKVClient.VersionCalls()) -func (mock *KVClientMock) VersionCalls() []struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption - } - mock.lockVersion.RLock() - calls = mock.calls.Version - mock.lockVersion.RUnlock() - return calls -} - -// Ensure, that KV_StateChangesClientMock does implement KV_StateChangesClient. -// If this is not the case, regenerate this file with moq. -var _ KV_StateChangesClient = &KV_StateChangesClientMock{} - -// KV_StateChangesClientMock is a mock implementation of KV_StateChangesClient. -// -// func TestSomethingThatUsesKV_StateChangesClient(t *testing.T) { -// -// // make and configure a mocked KV_StateChangesClient -// mockedKV_StateChangesClient := &KV_StateChangesClientMock{ -// CloseSendFunc: func() error { -// panic("mock out the CloseSend method") -// }, -// ContextFunc: func() context.Context { -// panic("mock out the Context method") -// }, -// HeaderFunc: func() (metadata.MD, error) { -// panic("mock out the Header method") -// }, -// RecvFunc: func() (*StateChangeBatch, error) { -// panic("mock out the Recv method") -// }, -// RecvMsgFunc: func(m any) error { -// panic("mock out the RecvMsg method") -// }, -// SendMsgFunc: func(m any) error { -// panic("mock out the SendMsg method") -// }, -// TrailerFunc: func() metadata.MD { -// panic("mock out the Trailer method") -// }, -// } -// -// // use mockedKV_StateChangesClient in code that requires KV_StateChangesClient -// // and then make assertions. -// -// } -type KV_StateChangesClientMock struct { - // CloseSendFunc mocks the CloseSend method. - CloseSendFunc func() error - - // ContextFunc mocks the Context method. - ContextFunc func() context.Context - - // HeaderFunc mocks the Header method. - HeaderFunc func() (metadata.MD, error) - - // RecvFunc mocks the Recv method. - RecvFunc func() (*StateChangeBatch, error) - - // RecvMsgFunc mocks the RecvMsg method. - RecvMsgFunc func(m any) error - - // SendMsgFunc mocks the SendMsg method. - SendMsgFunc func(m any) error - - // TrailerFunc mocks the Trailer method. - TrailerFunc func() metadata.MD - - // calls tracks calls to the methods. - calls struct { - // CloseSend holds details about calls to the CloseSend method. - CloseSend []struct { - } - // Context holds details about calls to the Context method. - Context []struct { - } - // Header holds details about calls to the Header method. - Header []struct { - } - // Recv holds details about calls to the Recv method. - Recv []struct { - } - // RecvMsg holds details about calls to the RecvMsg method. - RecvMsg []struct { - // M is the m argument value. - M any - } - // SendMsg holds details about calls to the SendMsg method. - SendMsg []struct { - // M is the m argument value. - M any - } - // Trailer holds details about calls to the Trailer method. - Trailer []struct { - } - } - lockCloseSend sync.RWMutex - lockContext sync.RWMutex - lockHeader sync.RWMutex - lockRecv sync.RWMutex - lockRecvMsg sync.RWMutex - lockSendMsg sync.RWMutex - lockTrailer sync.RWMutex -} - -// CloseSend calls CloseSendFunc. -func (mock *KV_StateChangesClientMock) CloseSend() error { - callInfo := struct { - }{} - mock.lockCloseSend.Lock() - mock.calls.CloseSend = append(mock.calls.CloseSend, callInfo) - mock.lockCloseSend.Unlock() - if mock.CloseSendFunc == nil { - var ( - errOut error - ) - return errOut - } - return mock.CloseSendFunc() -} - -// CloseSendCalls gets all the calls that were made to CloseSend. -// Check the length with: -// -// len(mockedKV_StateChangesClient.CloseSendCalls()) -func (mock *KV_StateChangesClientMock) CloseSendCalls() []struct { -} { - var calls []struct { - } - mock.lockCloseSend.RLock() - calls = mock.calls.CloseSend - mock.lockCloseSend.RUnlock() - return calls -} - -// Context calls ContextFunc. -func (mock *KV_StateChangesClientMock) Context() context.Context { - callInfo := struct { - }{} - mock.lockContext.Lock() - mock.calls.Context = append(mock.calls.Context, callInfo) - mock.lockContext.Unlock() - if mock.ContextFunc == nil { - var ( - contextOut context.Context - ) - return contextOut - } - return mock.ContextFunc() -} - -// ContextCalls gets all the calls that were made to Context. -// Check the length with: -// -// len(mockedKV_StateChangesClient.ContextCalls()) -func (mock *KV_StateChangesClientMock) ContextCalls() []struct { -} { - var calls []struct { - } - mock.lockContext.RLock() - calls = mock.calls.Context - mock.lockContext.RUnlock() - return calls -} - -// Header calls HeaderFunc. -func (mock *KV_StateChangesClientMock) Header() (metadata.MD, error) { - callInfo := struct { - }{} - mock.lockHeader.Lock() - mock.calls.Header = append(mock.calls.Header, callInfo) - mock.lockHeader.Unlock() - if mock.HeaderFunc == nil { - var ( - mDOut metadata.MD - errOut error - ) - return mDOut, errOut - } - return mock.HeaderFunc() -} - -// HeaderCalls gets all the calls that were made to Header. -// Check the length with: -// -// len(mockedKV_StateChangesClient.HeaderCalls()) -func (mock *KV_StateChangesClientMock) HeaderCalls() []struct { -} { - var calls []struct { - } - mock.lockHeader.RLock() - calls = mock.calls.Header - mock.lockHeader.RUnlock() - return calls -} - -// Recv calls RecvFunc. -func (mock *KV_StateChangesClientMock) Recv() (*StateChangeBatch, error) { - callInfo := struct { - }{} - mock.lockRecv.Lock() - mock.calls.Recv = append(mock.calls.Recv, callInfo) - mock.lockRecv.Unlock() - if mock.RecvFunc == nil { - var ( - stateChangeBatchOut *StateChangeBatch - errOut error - ) - return stateChangeBatchOut, errOut - } - return mock.RecvFunc() -} - -// RecvCalls gets all the calls that were made to Recv. -// Check the length with: -// -// len(mockedKV_StateChangesClient.RecvCalls()) -func (mock *KV_StateChangesClientMock) RecvCalls() []struct { -} { - var calls []struct { - } - mock.lockRecv.RLock() - calls = mock.calls.Recv - mock.lockRecv.RUnlock() - return calls -} - -// RecvMsg calls RecvMsgFunc. -func (mock *KV_StateChangesClientMock) RecvMsg(m any) error { - callInfo := struct { - M any - }{ - M: m, - } - mock.lockRecvMsg.Lock() - mock.calls.RecvMsg = append(mock.calls.RecvMsg, callInfo) - mock.lockRecvMsg.Unlock() - if mock.RecvMsgFunc == nil { - var ( - errOut error - ) - return errOut - } - return mock.RecvMsgFunc(m) -} - -// RecvMsgCalls gets all the calls that were made to RecvMsg. -// Check the length with: -// -// len(mockedKV_StateChangesClient.RecvMsgCalls()) -func (mock *KV_StateChangesClientMock) RecvMsgCalls() []struct { - M any -} { - var calls []struct { - M any - } - mock.lockRecvMsg.RLock() - calls = mock.calls.RecvMsg - mock.lockRecvMsg.RUnlock() - return calls -} - -// SendMsg calls SendMsgFunc. -func (mock *KV_StateChangesClientMock) SendMsg(m any) error { - callInfo := struct { - M any - }{ - M: m, - } - mock.lockSendMsg.Lock() - mock.calls.SendMsg = append(mock.calls.SendMsg, callInfo) - mock.lockSendMsg.Unlock() - if mock.SendMsgFunc == nil { - var ( - errOut error - ) - return errOut - } - return mock.SendMsgFunc(m) -} - -// SendMsgCalls gets all the calls that were made to SendMsg. -// Check the length with: -// -// len(mockedKV_StateChangesClient.SendMsgCalls()) -func (mock *KV_StateChangesClientMock) SendMsgCalls() []struct { - M any -} { - var calls []struct { - M any - } - mock.lockSendMsg.RLock() - calls = mock.calls.SendMsg - mock.lockSendMsg.RUnlock() - return calls -} - -// Trailer calls TrailerFunc. -func (mock *KV_StateChangesClientMock) Trailer() metadata.MD { - callInfo := struct { - }{} - mock.lockTrailer.Lock() - mock.calls.Trailer = append(mock.calls.Trailer, callInfo) - mock.lockTrailer.Unlock() - if mock.TrailerFunc == nil { - var ( - mDOut metadata.MD - ) - return mDOut - } - return mock.TrailerFunc() -} - -// TrailerCalls gets all the calls that were made to Trailer. -// Check the length with: -// -// len(mockedKV_StateChangesClient.TrailerCalls()) -func (mock *KV_StateChangesClientMock) TrailerCalls() []struct { -} { - var calls []struct { - } - mock.lockTrailer.RLock() - calls = mock.calls.Trailer - mock.lockTrailer.RUnlock() - return calls -} diff --git a/erigon-lib/gointerfaces/remote/sort_test.go b/erigon-lib/gointerfaces/remote/sort_test.go index 8a32e5a6e17..c9455d9aa9c 100644 --- a/erigon-lib/gointerfaces/remote/sort_test.go +++ b/erigon-lib/gointerfaces/remote/sort_test.go @@ -1,12 +1,12 @@ package remote_test import ( + "slices" "testing" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" "github.com/ledgerwatch/erigon-lib/gointerfaces/types" "github.com/stretchr/testify/assert" - "golang.org/x/exp/slices" ) func TestSort(t *testing.T) { diff --git a/erigon-lib/gointerfaces/sentinel/sentinel.pb.go b/erigon-lib/gointerfaces/sentinel/sentinel.pb.go index 0e4aec4df7a..3feb6ff3531 100644 --- a/erigon-lib/gointerfaces/sentinel/sentinel.pb.go +++ b/erigon-lib/gointerfaces/sentinel/sentinel.pb.go @@ -111,7 +111,12 @@ type Peer struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pid string `protobuf:"bytes,1,opt,name=pid,proto3" json:"pid,omitempty"` + Pid string `protobuf:"bytes,1,opt,name=pid,proto3" json:"pid,omitempty"` + State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + Direction string `protobuf:"bytes,3,opt,name=direction,proto3" json:"direction,omitempty"` + Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` + Enr string `protobuf:"bytes,5,opt,name=enr,proto3" json:"enr,omitempty"` + AgentVersion string `protobuf:"bytes,6,opt,name=agent_version,json=agentVersion,proto3" json:"agent_version,omitempty"` } func (x *Peer) Reset() { @@ -153,20 +158,158 @@ func (x *Peer) GetPid() string { return "" } +func (x *Peer) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *Peer) GetDirection() string { + if x != nil { + return x.Direction + } + return "" +} + +func (x *Peer) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *Peer) GetEnr() string { + if x != nil { + return x.Enr + } + return "" +} + +func (x *Peer) GetAgentVersion() string { + if x != nil { + return x.AgentVersion + } + return "" +} + +type PeersInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Direction *string `protobuf:"bytes,1,opt,name=direction,proto3,oneof" json:"direction,omitempty"` + State *string `protobuf:"bytes,2,opt,name=state,proto3,oneof" json:"state,omitempty"` +} + +func (x *PeersInfoRequest) Reset() { + *x = PeersInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_p2psentinel_sentinel_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PeersInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PeersInfoRequest) ProtoMessage() {} + +func (x *PeersInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_p2psentinel_sentinel_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PeersInfoRequest.ProtoReflect.Descriptor instead. +func (*PeersInfoRequest) Descriptor() ([]byte, []int) { + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{3} +} + +func (x *PeersInfoRequest) GetDirection() string { + if x != nil && x.Direction != nil { + return *x.Direction + } + return "" +} + +func (x *PeersInfoRequest) GetState() string { + if x != nil && x.State != nil { + return *x.State + } + return "" +} + +type PeersInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Peers []*Peer `protobuf:"bytes,1,rep,name=peers,proto3" json:"peers,omitempty"` +} + +func (x *PeersInfoResponse) Reset() { + *x = PeersInfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_p2psentinel_sentinel_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PeersInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PeersInfoResponse) ProtoMessage() {} + +func (x *PeersInfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_p2psentinel_sentinel_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PeersInfoResponse.ProtoReflect.Descriptor instead. +func (*PeersInfoResponse) Descriptor() ([]byte, []int) { + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{4} +} + +func (x *PeersInfoResponse) GetPeers() []*Peer { + if x != nil { + return x.Peers + } + return nil +} + type GossipData struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // SSZ encoded data - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Peer *Peer `protobuf:"bytes,3,opt,name=peer,proto3,oneof" json:"peer,omitempty"` + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // SSZ encoded data + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Peer *Peer `protobuf:"bytes,3,opt,name=peer,proto3,oneof" json:"peer,omitempty"` + SubnetId *uint64 `protobuf:"varint,4,opt,name=subnet_id,json=subnetId,proto3,oneof" json:"subnet_id,omitempty"` } func (x *GossipData) Reset() { *x = GossipData{} if protoimpl.UnsafeEnabled { - mi := &file_p2psentinel_sentinel_proto_msgTypes[3] + mi := &file_p2psentinel_sentinel_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -179,7 +322,7 @@ func (x *GossipData) String() string { func (*GossipData) ProtoMessage() {} func (x *GossipData) ProtoReflect() protoreflect.Message { - mi := &file_p2psentinel_sentinel_proto_msgTypes[3] + mi := &file_p2psentinel_sentinel_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -192,7 +335,7 @@ func (x *GossipData) ProtoReflect() protoreflect.Message { // Deprecated: Use GossipData.ProtoReflect.Descriptor instead. func (*GossipData) Descriptor() ([]byte, []int) { - return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{3} + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{5} } func (x *GossipData) GetData() []byte { @@ -216,6 +359,13 @@ func (x *GossipData) GetPeer() *Peer { return nil } +func (x *GossipData) GetSubnetId() uint64 { + if x != nil && x.SubnetId != nil { + return *x.SubnetId + } + return 0 +} + type Status struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -231,7 +381,7 @@ type Status struct { func (x *Status) Reset() { *x = Status{} if protoimpl.UnsafeEnabled { - mi := &file_p2psentinel_sentinel_proto_msgTypes[4] + mi := &file_p2psentinel_sentinel_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -244,7 +394,7 @@ func (x *Status) String() string { func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_p2psentinel_sentinel_proto_msgTypes[4] + mi := &file_p2psentinel_sentinel_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -257,7 +407,7 @@ func (x *Status) ProtoReflect() protoreflect.Message { // Deprecated: Use Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { - return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{4} + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{6} } func (x *Status) GetForkDigest() uint32 { @@ -300,13 +450,17 @@ type PeerCount struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Amount uint64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"` + Active uint64 `protobuf:"varint,1,opt,name=active,proto3" json:"active,omitempty"` // Amount of peers that are active. + Connected uint64 `protobuf:"varint,2,opt,name=connected,proto3" json:"connected,omitempty"` + Disconnected uint64 `protobuf:"varint,3,opt,name=disconnected,proto3" json:"disconnected,omitempty"` + Connecting uint64 `protobuf:"varint,4,opt,name=connecting,proto3" json:"connecting,omitempty"` + Disconnecting uint64 `protobuf:"varint,5,opt,name=disconnecting,proto3" json:"disconnecting,omitempty"` } func (x *PeerCount) Reset() { *x = PeerCount{} if protoimpl.UnsafeEnabled { - mi := &file_p2psentinel_sentinel_proto_msgTypes[5] + mi := &file_p2psentinel_sentinel_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -319,7 +473,7 @@ func (x *PeerCount) String() string { func (*PeerCount) ProtoMessage() {} func (x *PeerCount) ProtoReflect() protoreflect.Message { - mi := &file_p2psentinel_sentinel_proto_msgTypes[5] + mi := &file_p2psentinel_sentinel_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -332,12 +486,40 @@ func (x *PeerCount) ProtoReflect() protoreflect.Message { // Deprecated: Use PeerCount.ProtoReflect.Descriptor instead. func (*PeerCount) Descriptor() ([]byte, []int) { - return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{5} + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{7} +} + +func (x *PeerCount) GetActive() uint64 { + if x != nil { + return x.Active + } + return 0 +} + +func (x *PeerCount) GetConnected() uint64 { + if x != nil { + return x.Connected + } + return 0 +} + +func (x *PeerCount) GetDisconnected() uint64 { + if x != nil { + return x.Disconnected + } + return 0 +} + +func (x *PeerCount) GetConnecting() uint64 { + if x != nil { + return x.Connecting + } + return 0 } -func (x *PeerCount) GetAmount() uint64 { +func (x *PeerCount) GetDisconnecting() uint64 { if x != nil { - return x.Amount + return x.Disconnecting } return 0 } @@ -354,7 +536,7 @@ type RequestData struct { func (x *RequestData) Reset() { *x = RequestData{} if protoimpl.UnsafeEnabled { - mi := &file_p2psentinel_sentinel_proto_msgTypes[6] + mi := &file_p2psentinel_sentinel_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -367,7 +549,7 @@ func (x *RequestData) String() string { func (*RequestData) ProtoMessage() {} func (x *RequestData) ProtoReflect() protoreflect.Message { - mi := &file_p2psentinel_sentinel_proto_msgTypes[6] + mi := &file_p2psentinel_sentinel_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -380,7 +562,7 @@ func (x *RequestData) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestData.ProtoReflect.Descriptor instead. func (*RequestData) Descriptor() ([]byte, []int) { - return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{6} + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{8} } func (x *RequestData) GetData() []byte { @@ -410,7 +592,7 @@ type ResponseData struct { func (x *ResponseData) Reset() { *x = ResponseData{} if protoimpl.UnsafeEnabled { - mi := &file_p2psentinel_sentinel_proto_msgTypes[7] + mi := &file_p2psentinel_sentinel_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -423,7 +605,7 @@ func (x *ResponseData) String() string { func (*ResponseData) ProtoMessage() {} func (x *ResponseData) ProtoReflect() protoreflect.Message { - mi := &file_p2psentinel_sentinel_proto_msgTypes[7] + mi := &file_p2psentinel_sentinel_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -436,7 +618,7 @@ func (x *ResponseData) ProtoReflect() protoreflect.Message { // Deprecated: Use ResponseData.ProtoReflect.Descriptor instead. func (*ResponseData) Descriptor() ([]byte, []int) { - return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{7} + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{9} } func (x *ResponseData) GetData() []byte { @@ -460,6 +642,203 @@ func (x *ResponseData) GetPeer() *Peer { return nil } +type Metadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Seq uint64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` + Attnets string `protobuf:"bytes,2,opt,name=attnets,proto3" json:"attnets,omitempty"` + Syncnets string `protobuf:"bytes,3,opt,name=syncnets,proto3" json:"syncnets,omitempty"` +} + +func (x *Metadata) Reset() { + *x = Metadata{} + if protoimpl.UnsafeEnabled { + mi := &file_p2psentinel_sentinel_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Metadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Metadata) ProtoMessage() {} + +func (x *Metadata) ProtoReflect() protoreflect.Message { + mi := &file_p2psentinel_sentinel_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Metadata.ProtoReflect.Descriptor instead. +func (*Metadata) Descriptor() ([]byte, []int) { + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{10} +} + +func (x *Metadata) GetSeq() uint64 { + if x != nil { + return x.Seq + } + return 0 +} + +func (x *Metadata) GetAttnets() string { + if x != nil { + return x.Attnets + } + return "" +} + +func (x *Metadata) GetSyncnets() string { + if x != nil { + return x.Syncnets + } + return "" +} + +type IdentityResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pid string `protobuf:"bytes,1,opt,name=pid,proto3" json:"pid,omitempty"` + Enr string `protobuf:"bytes,2,opt,name=enr,proto3" json:"enr,omitempty"` + P2PAddresses []string `protobuf:"bytes,3,rep,name=p2p_addresses,json=p2pAddresses,proto3" json:"p2p_addresses,omitempty"` + DiscoveryAddresses []string `protobuf:"bytes,4,rep,name=discovery_addresses,json=discoveryAddresses,proto3" json:"discovery_addresses,omitempty"` + Metadata *Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *IdentityResponse) Reset() { + *x = IdentityResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_p2psentinel_sentinel_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityResponse) ProtoMessage() {} + +func (x *IdentityResponse) ProtoReflect() protoreflect.Message { + mi := &file_p2psentinel_sentinel_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdentityResponse.ProtoReflect.Descriptor instead. +func (*IdentityResponse) Descriptor() ([]byte, []int) { + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{11} +} + +func (x *IdentityResponse) GetPid() string { + if x != nil { + return x.Pid + } + return "" +} + +func (x *IdentityResponse) GetEnr() string { + if x != nil { + return x.Enr + } + return "" +} + +func (x *IdentityResponse) GetP2PAddresses() []string { + if x != nil { + return x.P2PAddresses + } + return nil +} + +func (x *IdentityResponse) GetDiscoveryAddresses() []string { + if x != nil { + return x.DiscoveryAddresses + } + return nil +} + +func (x *IdentityResponse) GetMetadata() *Metadata { + if x != nil { + return x.Metadata + } + return nil +} + +type RequestSubscribeExpiry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"` + ExpiryUnixSecs uint64 `protobuf:"varint,2,opt,name=expiry_unix_secs,json=expiryUnixSecs,proto3" json:"expiry_unix_secs,omitempty"` +} + +func (x *RequestSubscribeExpiry) Reset() { + *x = RequestSubscribeExpiry{} + if protoimpl.UnsafeEnabled { + mi := &file_p2psentinel_sentinel_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RequestSubscribeExpiry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequestSubscribeExpiry) ProtoMessage() {} + +func (x *RequestSubscribeExpiry) ProtoReflect() protoreflect.Message { + mi := &file_p2psentinel_sentinel_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequestSubscribeExpiry.ProtoReflect.Descriptor instead. +func (*RequestSubscribeExpiry) Descriptor() ([]byte, []int) { + return file_p2psentinel_sentinel_proto_rawDescGZIP(), []int{12} +} + +func (x *RequestSubscribeExpiry) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *RequestSubscribeExpiry) GetExpiryUnixSecs() uint64 { + if x != nil { + return x.ExpiryUnixSecs + } + return 0 +} + var File_p2psentinel_sentinel_proto protoreflect.FileDescriptor var file_p2psentinel_sentinel_proto_rawDesc = []byte{ @@ -471,75 +850,142 @@ var file_p2psentinel_sentinel_proto_rawDesc = []byte{ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x18, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, - 0x66, 0x0a, 0x0a, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, - 0x65, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x07, - 0x0a, 0x05, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x22, 0xcd, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, - 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x0d, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x12, 0x28, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, - 0x52, 0x08, 0x68, 0x65, 0x61, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x65, - 0x61, 0x64, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x68, - 0x65, 0x61, 0x64, 0x53, 0x6c, 0x6f, 0x74, 0x22, 0x23, 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x37, 0x0a, 0x0b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x5c, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x22, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, - 0x65, 0x65, 0x72, 0x32, 0x94, 0x04, 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, - 0x12, 0x45, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x47, 0x6f, 0x73, - 0x73, 0x69, 0x70, 0x12, 0x1a, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x1a, - 0x14, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x6f, 0x73, 0x73, 0x69, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x3c, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, - 0x6c, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x16, 0x2e, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, - 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, - 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x1a, 0x13, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x42, 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72, - 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, - 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x55, 0x6e, 0x62, 0x61, - 0x6e, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x9d, 0x01, 0x0a, 0x04, 0x50, 0x65, 0x65, 0x72, 0x12, 0x10, + 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x65, 0x6e, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x72, + 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x68, 0x0a, 0x10, 0x50, 0x65, 0x65, 0x72, 0x73, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x09, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x39, 0x0a, 0x11, 0x50, 0x65, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x70, 0x65, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, + 0x65, 0x65, 0x72, 0x52, 0x05, 0x70, 0x65, 0x65, 0x72, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x0a, 0x47, + 0x6f, 0x73, 0x73, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x27, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x48, + 0x00, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x48, 0x01, 0x52, + 0x08, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, + 0x5f, 0x70, 0x65, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x22, 0xcd, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x32, 0x0a, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x6f, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x48, 0x32, 0x35, 0x36, 0x52, 0x0d, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x52, + 0x6f, 0x6f, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x66, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x28, 0x0a, 0x09, + 0x68, 0x65, 0x61, 0x64, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0b, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x48, 0x32, 0x35, 0x36, 0x52, 0x08, 0x68, 0x65, + 0x61, 0x64, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x68, 0x65, 0x61, 0x64, 0x53, + 0x6c, 0x6f, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x09, 0x50, 0x65, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, + 0x67, 0x22, 0x37, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x5c, 0x0a, 0x0c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, + 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x22, 0x52, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x74, 0x74, 0x6e, 0x65, 0x74, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x79, 0x6e, 0x63, 0x6e, 0x65, 0x74, 0x73, 0x22, 0xbc, 0x01, 0x0a, + 0x10, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x70, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x65, 0x6e, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x32, 0x70, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x32, + 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x58, 0x0a, 0x16, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x45, + 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x73, 0x65, 0x63, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x55, 0x6e, 0x69, + 0x78, 0x53, 0x65, 0x63, 0x73, 0x32, 0xea, 0x05, 0x0a, 0x08, 0x53, 0x65, 0x6e, 0x74, 0x69, 0x6e, + 0x65, 0x6c, 0x12, 0x4e, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x20, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, + 0x6e, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, + 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x47, + 0x6f, 0x73, 0x73, 0x69, 0x70, 0x12, 0x1a, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, + 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x1a, 0x14, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x6f, 0x73, + 0x73, 0x69, 0x70, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x3c, 0x0a, 0x0b, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, + 0x6e, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x1a, + 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x35, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, + 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, + 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x73, 0x65, 0x6e, + 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x13, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, + 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x42, 0x61, 0x6e, 0x50, 0x65, + 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, + 0x65, 0x72, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x55, 0x6e, + 0x62, 0x61, 0x6e, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, + 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, + 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x36, 0x0a, 0x0c, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, + 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, + 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, - 0x0c, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, - 0x65, 0x65, 0x72, 0x12, 0x0e, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, - 0x65, 0x65, 0x72, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x0d, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x12, 0x14, 0x2e, 0x73, - 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x44, 0x61, - 0x74, 0x61, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x15, 0x5a, 0x13, 0x2e, 0x2f, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x3b, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, - 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, + 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x12, 0x14, + 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x47, 0x6f, 0x73, 0x73, 0x69, 0x70, + 0x44, 0x61, 0x74, 0x61, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x08, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x16, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, + 0x6e, 0x65, 0x6c, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x1a, 0x1a, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, + 0x50, 0x65, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x73, 0x65, 0x6e, 0x74, + 0x69, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, + 0x2e, 0x50, 0x65, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x15, 0x5a, 0x13, 0x2e, 0x2f, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, + 0x3b, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -554,46 +1000,59 @@ func file_p2psentinel_sentinel_proto_rawDescGZIP() []byte { return file_p2psentinel_sentinel_proto_rawDescData } -var file_p2psentinel_sentinel_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_p2psentinel_sentinel_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_p2psentinel_sentinel_proto_goTypes = []interface{}{ - (*EmptyMessage)(nil), // 0: sentinel.EmptyMessage - (*SubscriptionData)(nil), // 1: sentinel.SubscriptionData - (*Peer)(nil), // 2: sentinel.Peer - (*GossipData)(nil), // 3: sentinel.GossipData - (*Status)(nil), // 4: sentinel.Status - (*PeerCount)(nil), // 5: sentinel.PeerCount - (*RequestData)(nil), // 6: sentinel.RequestData - (*ResponseData)(nil), // 7: sentinel.ResponseData - (*types.H256)(nil), // 8: types.H256 + (*EmptyMessage)(nil), // 0: sentinel.EmptyMessage + (*SubscriptionData)(nil), // 1: sentinel.SubscriptionData + (*Peer)(nil), // 2: sentinel.Peer + (*PeersInfoRequest)(nil), // 3: sentinel.PeersInfoRequest + (*PeersInfoResponse)(nil), // 4: sentinel.PeersInfoResponse + (*GossipData)(nil), // 5: sentinel.GossipData + (*Status)(nil), // 6: sentinel.Status + (*PeerCount)(nil), // 7: sentinel.PeerCount + (*RequestData)(nil), // 8: sentinel.RequestData + (*ResponseData)(nil), // 9: sentinel.ResponseData + (*Metadata)(nil), // 10: sentinel.Metadata + (*IdentityResponse)(nil), // 11: sentinel.IdentityResponse + (*RequestSubscribeExpiry)(nil), // 12: sentinel.RequestSubscribeExpiry + (*types.H256)(nil), // 13: types.H256 } var file_p2psentinel_sentinel_proto_depIdxs = []int32{ - 2, // 0: sentinel.GossipData.peer:type_name -> sentinel.Peer - 8, // 1: sentinel.Status.finalized_root:type_name -> types.H256 - 8, // 2: sentinel.Status.head_root:type_name -> types.H256 - 2, // 3: sentinel.ResponseData.peer:type_name -> sentinel.Peer - 1, // 4: sentinel.Sentinel.SubscribeGossip:input_type -> sentinel.SubscriptionData - 6, // 5: sentinel.Sentinel.SendRequest:input_type -> sentinel.RequestData - 4, // 6: sentinel.Sentinel.SetStatus:input_type -> sentinel.Status - 0, // 7: sentinel.Sentinel.GetPeers:input_type -> sentinel.EmptyMessage - 2, // 8: sentinel.Sentinel.BanPeer:input_type -> sentinel.Peer - 2, // 9: sentinel.Sentinel.UnbanPeer:input_type -> sentinel.Peer - 2, // 10: sentinel.Sentinel.PenalizePeer:input_type -> sentinel.Peer - 2, // 11: sentinel.Sentinel.RewardPeer:input_type -> sentinel.Peer - 3, // 12: sentinel.Sentinel.PublishGossip:input_type -> sentinel.GossipData - 3, // 13: sentinel.Sentinel.SubscribeGossip:output_type -> sentinel.GossipData - 7, // 14: sentinel.Sentinel.SendRequest:output_type -> sentinel.ResponseData - 0, // 15: sentinel.Sentinel.SetStatus:output_type -> sentinel.EmptyMessage - 5, // 16: sentinel.Sentinel.GetPeers:output_type -> sentinel.PeerCount - 0, // 17: sentinel.Sentinel.BanPeer:output_type -> sentinel.EmptyMessage - 0, // 18: sentinel.Sentinel.UnbanPeer:output_type -> sentinel.EmptyMessage - 0, // 19: sentinel.Sentinel.PenalizePeer:output_type -> sentinel.EmptyMessage - 0, // 20: sentinel.Sentinel.RewardPeer:output_type -> sentinel.EmptyMessage - 0, // 21: sentinel.Sentinel.PublishGossip:output_type -> sentinel.EmptyMessage - 13, // [13:22] is the sub-list for method output_type - 4, // [4:13] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name + 2, // 0: sentinel.PeersInfoResponse.peers:type_name -> sentinel.Peer + 2, // 1: sentinel.GossipData.peer:type_name -> sentinel.Peer + 13, // 2: sentinel.Status.finalized_root:type_name -> types.H256 + 13, // 3: sentinel.Status.head_root:type_name -> types.H256 + 2, // 4: sentinel.ResponseData.peer:type_name -> sentinel.Peer + 10, // 5: sentinel.IdentityResponse.metadata:type_name -> sentinel.Metadata + 12, // 6: sentinel.Sentinel.SetSubscribeExpiry:input_type -> sentinel.RequestSubscribeExpiry + 1, // 7: sentinel.Sentinel.SubscribeGossip:input_type -> sentinel.SubscriptionData + 8, // 8: sentinel.Sentinel.SendRequest:input_type -> sentinel.RequestData + 6, // 9: sentinel.Sentinel.SetStatus:input_type -> sentinel.Status + 0, // 10: sentinel.Sentinel.GetPeers:input_type -> sentinel.EmptyMessage + 2, // 11: sentinel.Sentinel.BanPeer:input_type -> sentinel.Peer + 2, // 12: sentinel.Sentinel.UnbanPeer:input_type -> sentinel.Peer + 2, // 13: sentinel.Sentinel.PenalizePeer:input_type -> sentinel.Peer + 2, // 14: sentinel.Sentinel.RewardPeer:input_type -> sentinel.Peer + 5, // 15: sentinel.Sentinel.PublishGossip:input_type -> sentinel.GossipData + 0, // 16: sentinel.Sentinel.Identity:input_type -> sentinel.EmptyMessage + 3, // 17: sentinel.Sentinel.PeersInfo:input_type -> sentinel.PeersInfoRequest + 0, // 18: sentinel.Sentinel.SetSubscribeExpiry:output_type -> sentinel.EmptyMessage + 5, // 19: sentinel.Sentinel.SubscribeGossip:output_type -> sentinel.GossipData + 9, // 20: sentinel.Sentinel.SendRequest:output_type -> sentinel.ResponseData + 0, // 21: sentinel.Sentinel.SetStatus:output_type -> sentinel.EmptyMessage + 7, // 22: sentinel.Sentinel.GetPeers:output_type -> sentinel.PeerCount + 0, // 23: sentinel.Sentinel.BanPeer:output_type -> sentinel.EmptyMessage + 0, // 24: sentinel.Sentinel.UnbanPeer:output_type -> sentinel.EmptyMessage + 0, // 25: sentinel.Sentinel.PenalizePeer:output_type -> sentinel.EmptyMessage + 0, // 26: sentinel.Sentinel.RewardPeer:output_type -> sentinel.EmptyMessage + 0, // 27: sentinel.Sentinel.PublishGossip:output_type -> sentinel.EmptyMessage + 11, // 28: sentinel.Sentinel.Identity:output_type -> sentinel.IdentityResponse + 4, // 29: sentinel.Sentinel.PeersInfo:output_type -> sentinel.PeersInfoResponse + 18, // [18:30] is the sub-list for method output_type + 6, // [6:18] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_p2psentinel_sentinel_proto_init() } @@ -639,7 +1098,7 @@ func file_p2psentinel_sentinel_proto_init() { } } file_p2psentinel_sentinel_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GossipData); i { + switch v := v.(*PeersInfoRequest); i { case 0: return &v.state case 1: @@ -651,7 +1110,7 @@ func file_p2psentinel_sentinel_proto_init() { } } file_p2psentinel_sentinel_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Status); i { + switch v := v.(*PeersInfoResponse); i { case 0: return &v.state case 1: @@ -663,7 +1122,7 @@ func file_p2psentinel_sentinel_proto_init() { } } file_p2psentinel_sentinel_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PeerCount); i { + switch v := v.(*GossipData); i { case 0: return &v.state case 1: @@ -675,7 +1134,7 @@ func file_p2psentinel_sentinel_proto_init() { } } file_p2psentinel_sentinel_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RequestData); i { + switch v := v.(*Status); i { case 0: return &v.state case 1: @@ -687,6 +1146,30 @@ func file_p2psentinel_sentinel_proto_init() { } } file_p2psentinel_sentinel_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PeerCount); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2psentinel_sentinel_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RequestData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2psentinel_sentinel_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResponseData); i { case 0: return &v.state @@ -698,16 +1181,53 @@ func file_p2psentinel_sentinel_proto_init() { return nil } } + file_p2psentinel_sentinel_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Metadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2psentinel_sentinel_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_p2psentinel_sentinel_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RequestSubscribeExpiry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_p2psentinel_sentinel_proto_msgTypes[1].OneofWrappers = []interface{}{} file_p2psentinel_sentinel_proto_msgTypes[3].OneofWrappers = []interface{}{} + file_p2psentinel_sentinel_proto_msgTypes[5].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_p2psentinel_sentinel_proto_rawDesc, NumEnums: 0, - NumMessages: 8, + NumMessages: 13, NumExtensions: 0, NumServices: 1, }, diff --git a/erigon-lib/gointerfaces/sentinel/sentinel_grpc.pb.go b/erigon-lib/gointerfaces/sentinel/sentinel_grpc.pb.go index 34a47f5e43e..f0092b9b6ac 100644 --- a/erigon-lib/gointerfaces/sentinel/sentinel_grpc.pb.go +++ b/erigon-lib/gointerfaces/sentinel/sentinel_grpc.pb.go @@ -19,21 +19,25 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Sentinel_SubscribeGossip_FullMethodName = "/sentinel.Sentinel/SubscribeGossip" - Sentinel_SendRequest_FullMethodName = "/sentinel.Sentinel/SendRequest" - Sentinel_SetStatus_FullMethodName = "/sentinel.Sentinel/SetStatus" - Sentinel_GetPeers_FullMethodName = "/sentinel.Sentinel/GetPeers" - Sentinel_BanPeer_FullMethodName = "/sentinel.Sentinel/BanPeer" - Sentinel_UnbanPeer_FullMethodName = "/sentinel.Sentinel/UnbanPeer" - Sentinel_PenalizePeer_FullMethodName = "/sentinel.Sentinel/PenalizePeer" - Sentinel_RewardPeer_FullMethodName = "/sentinel.Sentinel/RewardPeer" - Sentinel_PublishGossip_FullMethodName = "/sentinel.Sentinel/PublishGossip" + Sentinel_SetSubscribeExpiry_FullMethodName = "/sentinel.Sentinel/SetSubscribeExpiry" + Sentinel_SubscribeGossip_FullMethodName = "/sentinel.Sentinel/SubscribeGossip" + Sentinel_SendRequest_FullMethodName = "/sentinel.Sentinel/SendRequest" + Sentinel_SetStatus_FullMethodName = "/sentinel.Sentinel/SetStatus" + Sentinel_GetPeers_FullMethodName = "/sentinel.Sentinel/GetPeers" + Sentinel_BanPeer_FullMethodName = "/sentinel.Sentinel/BanPeer" + Sentinel_UnbanPeer_FullMethodName = "/sentinel.Sentinel/UnbanPeer" + Sentinel_PenalizePeer_FullMethodName = "/sentinel.Sentinel/PenalizePeer" + Sentinel_RewardPeer_FullMethodName = "/sentinel.Sentinel/RewardPeer" + Sentinel_PublishGossip_FullMethodName = "/sentinel.Sentinel/PublishGossip" + Sentinel_Identity_FullMethodName = "/sentinel.Sentinel/Identity" + Sentinel_PeersInfo_FullMethodName = "/sentinel.Sentinel/PeersInfo" ) // SentinelClient is the client API for Sentinel service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type SentinelClient interface { + SetSubscribeExpiry(ctx context.Context, in *RequestSubscribeExpiry, opts ...grpc.CallOption) (*EmptyMessage, error) SubscribeGossip(ctx context.Context, in *SubscriptionData, opts ...grpc.CallOption) (Sentinel_SubscribeGossipClient, error) SendRequest(ctx context.Context, in *RequestData, opts ...grpc.CallOption) (*ResponseData, error) SetStatus(ctx context.Context, in *Status, opts ...grpc.CallOption) (*EmptyMessage, error) @@ -43,6 +47,8 @@ type SentinelClient interface { PenalizePeer(ctx context.Context, in *Peer, opts ...grpc.CallOption) (*EmptyMessage, error) RewardPeer(ctx context.Context, in *Peer, opts ...grpc.CallOption) (*EmptyMessage, error) PublishGossip(ctx context.Context, in *GossipData, opts ...grpc.CallOption) (*EmptyMessage, error) + Identity(ctx context.Context, in *EmptyMessage, opts ...grpc.CallOption) (*IdentityResponse, error) + PeersInfo(ctx context.Context, in *PeersInfoRequest, opts ...grpc.CallOption) (*PeersInfoResponse, error) } type sentinelClient struct { @@ -53,6 +59,15 @@ func NewSentinelClient(cc grpc.ClientConnInterface) SentinelClient { return &sentinelClient{cc} } +func (c *sentinelClient) SetSubscribeExpiry(ctx context.Context, in *RequestSubscribeExpiry, opts ...grpc.CallOption) (*EmptyMessage, error) { + out := new(EmptyMessage) + err := c.cc.Invoke(ctx, Sentinel_SetSubscribeExpiry_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *sentinelClient) SubscribeGossip(ctx context.Context, in *SubscriptionData, opts ...grpc.CallOption) (Sentinel_SubscribeGossipClient, error) { stream, err := c.cc.NewStream(ctx, &Sentinel_ServiceDesc.Streams[0], Sentinel_SubscribeGossip_FullMethodName, opts...) if err != nil { @@ -157,10 +172,29 @@ func (c *sentinelClient) PublishGossip(ctx context.Context, in *GossipData, opts return out, nil } +func (c *sentinelClient) Identity(ctx context.Context, in *EmptyMessage, opts ...grpc.CallOption) (*IdentityResponse, error) { + out := new(IdentityResponse) + err := c.cc.Invoke(ctx, Sentinel_Identity_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sentinelClient) PeersInfo(ctx context.Context, in *PeersInfoRequest, opts ...grpc.CallOption) (*PeersInfoResponse, error) { + out := new(PeersInfoResponse) + err := c.cc.Invoke(ctx, Sentinel_PeersInfo_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // SentinelServer is the server API for Sentinel service. // All implementations must embed UnimplementedSentinelServer // for forward compatibility type SentinelServer interface { + SetSubscribeExpiry(context.Context, *RequestSubscribeExpiry) (*EmptyMessage, error) SubscribeGossip(*SubscriptionData, Sentinel_SubscribeGossipServer) error SendRequest(context.Context, *RequestData) (*ResponseData, error) SetStatus(context.Context, *Status) (*EmptyMessage, error) @@ -170,6 +204,8 @@ type SentinelServer interface { PenalizePeer(context.Context, *Peer) (*EmptyMessage, error) RewardPeer(context.Context, *Peer) (*EmptyMessage, error) PublishGossip(context.Context, *GossipData) (*EmptyMessage, error) + Identity(context.Context, *EmptyMessage) (*IdentityResponse, error) + PeersInfo(context.Context, *PeersInfoRequest) (*PeersInfoResponse, error) mustEmbedUnimplementedSentinelServer() } @@ -177,6 +213,9 @@ type SentinelServer interface { type UnimplementedSentinelServer struct { } +func (UnimplementedSentinelServer) SetSubscribeExpiry(context.Context, *RequestSubscribeExpiry) (*EmptyMessage, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetSubscribeExpiry not implemented") +} func (UnimplementedSentinelServer) SubscribeGossip(*SubscriptionData, Sentinel_SubscribeGossipServer) error { return status.Errorf(codes.Unimplemented, "method SubscribeGossip not implemented") } @@ -204,6 +243,12 @@ func (UnimplementedSentinelServer) RewardPeer(context.Context, *Peer) (*EmptyMes func (UnimplementedSentinelServer) PublishGossip(context.Context, *GossipData) (*EmptyMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method PublishGossip not implemented") } +func (UnimplementedSentinelServer) Identity(context.Context, *EmptyMessage) (*IdentityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Identity not implemented") +} +func (UnimplementedSentinelServer) PeersInfo(context.Context, *PeersInfoRequest) (*PeersInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PeersInfo not implemented") +} func (UnimplementedSentinelServer) mustEmbedUnimplementedSentinelServer() {} // UnsafeSentinelServer may be embedded to opt out of forward compatibility for this service. @@ -217,6 +262,24 @@ func RegisterSentinelServer(s grpc.ServiceRegistrar, srv SentinelServer) { s.RegisterService(&Sentinel_ServiceDesc, srv) } +func _Sentinel_SetSubscribeExpiry_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequestSubscribeExpiry) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SentinelServer).SetSubscribeExpiry(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Sentinel_SetSubscribeExpiry_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SentinelServer).SetSubscribeExpiry(ctx, req.(*RequestSubscribeExpiry)) + } + return interceptor(ctx, in, info, handler) +} + func _Sentinel_SubscribeGossip_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(SubscriptionData) if err := stream.RecvMsg(m); err != nil { @@ -382,6 +445,42 @@ func _Sentinel_PublishGossip_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Sentinel_Identity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(EmptyMessage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SentinelServer).Identity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Sentinel_Identity_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SentinelServer).Identity(ctx, req.(*EmptyMessage)) + } + return interceptor(ctx, in, info, handler) +} + +func _Sentinel_PeersInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PeersInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SentinelServer).PeersInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Sentinel_PeersInfo_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SentinelServer).PeersInfo(ctx, req.(*PeersInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Sentinel_ServiceDesc is the grpc.ServiceDesc for Sentinel service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -389,6 +488,10 @@ var Sentinel_ServiceDesc = grpc.ServiceDesc{ ServiceName: "sentinel.Sentinel", HandlerType: (*SentinelServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "SetSubscribeExpiry", + Handler: _Sentinel_SetSubscribeExpiry_Handler, + }, { MethodName: "SendRequest", Handler: _Sentinel_SendRequest_Handler, @@ -421,6 +524,14 @@ var Sentinel_ServiceDesc = grpc.ServiceDesc{ MethodName: "PublishGossip", Handler: _Sentinel_PublishGossip_Handler, }, + { + MethodName: "Identity", + Handler: _Sentinel_Identity_Handler, + }, + { + MethodName: "PeersInfo", + Handler: _Sentinel_PeersInfo_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/erigon-lib/gointerfaces/sentry/mockgen.go b/erigon-lib/gointerfaces/sentry/mockgen.go new file mode 100644 index 00000000000..cf7315d280e --- /dev/null +++ b/erigon-lib/gointerfaces/sentry/mockgen.go @@ -0,0 +1,4 @@ +package sentry + +//go:generate mockgen -typed=true -destination=./sentry_client_mock.go -package=sentry . SentryClient +//go:generate mockgen -typed=true -destination=./sentry_server_mock.go -package=sentry . SentryServer diff --git a/erigon-lib/gointerfaces/sentry/mocks.go b/erigon-lib/gointerfaces/sentry/mocks.go deleted file mode 100644 index 37a446b4470..00000000000 --- a/erigon-lib/gointerfaces/sentry/mocks.go +++ /dev/null @@ -1,1801 +0,0 @@ -// Code generated by moq; DO NOT EDIT. -// github.com/matryer/moq - -package sentry - -import ( - context "context" - types "github.com/ledgerwatch/erigon-lib/gointerfaces/types" - grpc "google.golang.org/grpc" - emptypb "google.golang.org/protobuf/types/known/emptypb" - sync "sync" -) - -// Ensure, that SentryServerMock does implement SentryServer. -// If this is not the case, regenerate this file with moq. -var _ SentryServer = &SentryServerMock{} - -// SentryServerMock is a mock implementation of SentryServer. -// -// func TestSomethingThatUsesSentryServer(t *testing.T) { -// -// // make and configure a mocked SentryServer -// mockedSentryServer := &SentryServerMock{ -// AddPeerFunc: func(contextMoqParam context.Context, addPeerRequest *AddPeerRequest) (*AddPeerReply, error) { -// panic("mock out the AddPeer method") -// }, -// HandShakeFunc: func(contextMoqParam context.Context, empty *emptypb.Empty) (*HandShakeReply, error) { -// panic("mock out the HandShake method") -// }, -// MessagesFunc: func(messagesRequest *MessagesRequest, sentry_MessagesServer Sentry_MessagesServer) error { -// panic("mock out the Messages method") -// }, -// NodeInfoFunc: func(contextMoqParam context.Context, empty *emptypb.Empty) (*types.NodeInfoReply, error) { -// panic("mock out the NodeInfo method") -// }, -// PeerByIdFunc: func(contextMoqParam context.Context, peerByIdRequest *PeerByIdRequest) (*PeerByIdReply, error) { -// panic("mock out the PeerById method") -// }, -// PeerCountFunc: func(contextMoqParam context.Context, peerCountRequest *PeerCountRequest) (*PeerCountReply, error) { -// panic("mock out the PeerCount method") -// }, -// PeerEventsFunc: func(peerEventsRequest *PeerEventsRequest, sentry_PeerEventsServer Sentry_PeerEventsServer) error { -// panic("mock out the PeerEvents method") -// }, -// PeerMinBlockFunc: func(contextMoqParam context.Context, peerMinBlockRequest *PeerMinBlockRequest) (*emptypb.Empty, error) { -// panic("mock out the PeerMinBlock method") -// }, -// PeersFunc: func(contextMoqParam context.Context, empty *emptypb.Empty) (*PeersReply, error) { -// panic("mock out the Peers method") -// }, -// PenalizePeerFunc: func(contextMoqParam context.Context, penalizePeerRequest *PenalizePeerRequest) (*emptypb.Empty, error) { -// panic("mock out the PenalizePeer method") -// }, -// SendMessageByIdFunc: func(contextMoqParam context.Context, sendMessageByIdRequest *SendMessageByIdRequest) (*SentPeers, error) { -// panic("mock out the SendMessageById method") -// }, -// SendMessageByMinBlockFunc: func(contextMoqParam context.Context, sendMessageByMinBlockRequest *SendMessageByMinBlockRequest) (*SentPeers, error) { -// panic("mock out the SendMessageByMinBlock method") -// }, -// SendMessageToAllFunc: func(contextMoqParam context.Context, outboundMessageData *OutboundMessageData) (*SentPeers, error) { -// panic("mock out the SendMessageToAll method") -// }, -// SendMessageToRandomPeersFunc: func(contextMoqParam context.Context, sendMessageToRandomPeersRequest *SendMessageToRandomPeersRequest) (*SentPeers, error) { -// panic("mock out the SendMessageToRandomPeers method") -// }, -// SetStatusFunc: func(contextMoqParam context.Context, statusData *StatusData) (*SetStatusReply, error) { -// panic("mock out the SetStatus method") -// }, -// mustEmbedUnimplementedSentryServerFunc: func() { -// panic("mock out the mustEmbedUnimplementedSentryServer method") -// }, -// } -// -// // use mockedSentryServer in code that requires SentryServer -// // and then make assertions. -// -// } -type SentryServerMock struct { - // AddPeerFunc mocks the AddPeer method. - AddPeerFunc func(contextMoqParam context.Context, addPeerRequest *AddPeerRequest) (*AddPeerReply, error) - - // HandShakeFunc mocks the HandShake method. - HandShakeFunc func(contextMoqParam context.Context, empty *emptypb.Empty) (*HandShakeReply, error) - - // MessagesFunc mocks the Messages method. - MessagesFunc func(messagesRequest *MessagesRequest, sentry_MessagesServer Sentry_MessagesServer) error - - // NodeInfoFunc mocks the NodeInfo method. - NodeInfoFunc func(contextMoqParam context.Context, empty *emptypb.Empty) (*types.NodeInfoReply, error) - - // PeerByIdFunc mocks the PeerById method. - PeerByIdFunc func(contextMoqParam context.Context, peerByIdRequest *PeerByIdRequest) (*PeerByIdReply, error) - - // PeerCountFunc mocks the PeerCount method. - PeerCountFunc func(contextMoqParam context.Context, peerCountRequest *PeerCountRequest) (*PeerCountReply, error) - - // PeerEventsFunc mocks the PeerEvents method. - PeerEventsFunc func(peerEventsRequest *PeerEventsRequest, sentry_PeerEventsServer Sentry_PeerEventsServer) error - - // PeerMinBlockFunc mocks the PeerMinBlock method. - PeerMinBlockFunc func(contextMoqParam context.Context, peerMinBlockRequest *PeerMinBlockRequest) (*emptypb.Empty, error) - - // PeersFunc mocks the Peers method. - PeersFunc func(contextMoqParam context.Context, empty *emptypb.Empty) (*PeersReply, error) - - // PenalizePeerFunc mocks the PenalizePeer method. - PenalizePeerFunc func(contextMoqParam context.Context, penalizePeerRequest *PenalizePeerRequest) (*emptypb.Empty, error) - - // SendMessageByIdFunc mocks the SendMessageById method. - SendMessageByIdFunc func(contextMoqParam context.Context, sendMessageByIdRequest *SendMessageByIdRequest) (*SentPeers, error) - - // SendMessageByMinBlockFunc mocks the SendMessageByMinBlock method. - SendMessageByMinBlockFunc func(contextMoqParam context.Context, sendMessageByMinBlockRequest *SendMessageByMinBlockRequest) (*SentPeers, error) - - // SendMessageToAllFunc mocks the SendMessageToAll method. - SendMessageToAllFunc func(contextMoqParam context.Context, outboundMessageData *OutboundMessageData) (*SentPeers, error) - - // SendMessageToRandomPeersFunc mocks the SendMessageToRandomPeers method. - SendMessageToRandomPeersFunc func(contextMoqParam context.Context, sendMessageToRandomPeersRequest *SendMessageToRandomPeersRequest) (*SentPeers, error) - - // SetStatusFunc mocks the SetStatus method. - SetStatusFunc func(contextMoqParam context.Context, statusData *StatusData) (*SetStatusReply, error) - - // mustEmbedUnimplementedSentryServerFunc mocks the mustEmbedUnimplementedSentryServer method. - mustEmbedUnimplementedSentryServerFunc func() - - // calls tracks calls to the methods. - calls struct { - // AddPeer holds details about calls to the AddPeer method. - AddPeer []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // AddPeerRequest is the addPeerRequest argument value. - AddPeerRequest *AddPeerRequest - } - // HandShake holds details about calls to the HandShake method. - HandShake []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // Empty is the empty argument value. - Empty *emptypb.Empty - } - // Messages holds details about calls to the Messages method. - Messages []struct { - // MessagesRequest is the messagesRequest argument value. - MessagesRequest *MessagesRequest - // Sentry_MessagesServer is the sentry_MessagesServer argument value. - Sentry_MessagesServer Sentry_MessagesServer - } - // NodeInfo holds details about calls to the NodeInfo method. - NodeInfo []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // Empty is the empty argument value. - Empty *emptypb.Empty - } - // PeerById holds details about calls to the PeerById method. - PeerById []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // PeerByIdRequest is the peerByIdRequest argument value. - PeerByIdRequest *PeerByIdRequest - } - // PeerCount holds details about calls to the PeerCount method. - PeerCount []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // PeerCountRequest is the peerCountRequest argument value. - PeerCountRequest *PeerCountRequest - } - // PeerEvents holds details about calls to the PeerEvents method. - PeerEvents []struct { - // PeerEventsRequest is the peerEventsRequest argument value. - PeerEventsRequest *PeerEventsRequest - // Sentry_PeerEventsServer is the sentry_PeerEventsServer argument value. - Sentry_PeerEventsServer Sentry_PeerEventsServer - } - // PeerMinBlock holds details about calls to the PeerMinBlock method. - PeerMinBlock []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // PeerMinBlockRequest is the peerMinBlockRequest argument value. - PeerMinBlockRequest *PeerMinBlockRequest - } - // Peers holds details about calls to the Peers method. - Peers []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // Empty is the empty argument value. - Empty *emptypb.Empty - } - // PenalizePeer holds details about calls to the PenalizePeer method. - PenalizePeer []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // PenalizePeerRequest is the penalizePeerRequest argument value. - PenalizePeerRequest *PenalizePeerRequest - } - // SendMessageById holds details about calls to the SendMessageById method. - SendMessageById []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // SendMessageByIdRequest is the sendMessageByIdRequest argument value. - SendMessageByIdRequest *SendMessageByIdRequest - } - // SendMessageByMinBlock holds details about calls to the SendMessageByMinBlock method. - SendMessageByMinBlock []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // SendMessageByMinBlockRequest is the sendMessageByMinBlockRequest argument value. - SendMessageByMinBlockRequest *SendMessageByMinBlockRequest - } - // SendMessageToAll holds details about calls to the SendMessageToAll method. - SendMessageToAll []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // OutboundMessageData is the outboundMessageData argument value. - OutboundMessageData *OutboundMessageData - } - // SendMessageToRandomPeers holds details about calls to the SendMessageToRandomPeers method. - SendMessageToRandomPeers []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // SendMessageToRandomPeersRequest is the sendMessageToRandomPeersRequest argument value. - SendMessageToRandomPeersRequest *SendMessageToRandomPeersRequest - } - // SetStatus holds details about calls to the SetStatus method. - SetStatus []struct { - // ContextMoqParam is the contextMoqParam argument value. - ContextMoqParam context.Context - // StatusData is the statusData argument value. - StatusData *StatusData - } - // mustEmbedUnimplementedSentryServer holds details about calls to the mustEmbedUnimplementedSentryServer method. - mustEmbedUnimplementedSentryServer []struct { - } - } - lockAddPeer sync.RWMutex - lockHandShake sync.RWMutex - lockMessages sync.RWMutex - lockNodeInfo sync.RWMutex - lockPeerById sync.RWMutex - lockPeerCount sync.RWMutex - lockPeerEvents sync.RWMutex - lockPeerMinBlock sync.RWMutex - lockPeers sync.RWMutex - lockPenalizePeer sync.RWMutex - lockSendMessageById sync.RWMutex - lockSendMessageByMinBlock sync.RWMutex - lockSendMessageToAll sync.RWMutex - lockSendMessageToRandomPeers sync.RWMutex - lockSetStatus sync.RWMutex - lockmustEmbedUnimplementedSentryServer sync.RWMutex -} - -// AddPeer calls AddPeerFunc. -func (mock *SentryServerMock) AddPeer(contextMoqParam context.Context, addPeerRequest *AddPeerRequest) (*AddPeerReply, error) { - callInfo := struct { - ContextMoqParam context.Context - AddPeerRequest *AddPeerRequest - }{ - ContextMoqParam: contextMoqParam, - AddPeerRequest: addPeerRequest, - } - mock.lockAddPeer.Lock() - mock.calls.AddPeer = append(mock.calls.AddPeer, callInfo) - mock.lockAddPeer.Unlock() - if mock.AddPeerFunc == nil { - var ( - addPeerReplyOut *AddPeerReply - errOut error - ) - return addPeerReplyOut, errOut - } - return mock.AddPeerFunc(contextMoqParam, addPeerRequest) -} - -// AddPeerCalls gets all the calls that were made to AddPeer. -// Check the length with: -// -// len(mockedSentryServer.AddPeerCalls()) -func (mock *SentryServerMock) AddPeerCalls() []struct { - ContextMoqParam context.Context - AddPeerRequest *AddPeerRequest -} { - var calls []struct { - ContextMoqParam context.Context - AddPeerRequest *AddPeerRequest - } - mock.lockAddPeer.RLock() - calls = mock.calls.AddPeer - mock.lockAddPeer.RUnlock() - return calls -} - -// HandShake calls HandShakeFunc. -func (mock *SentryServerMock) HandShake(contextMoqParam context.Context, empty *emptypb.Empty) (*HandShakeReply, error) { - callInfo := struct { - ContextMoqParam context.Context - Empty *emptypb.Empty - }{ - ContextMoqParam: contextMoqParam, - Empty: empty, - } - mock.lockHandShake.Lock() - mock.calls.HandShake = append(mock.calls.HandShake, callInfo) - mock.lockHandShake.Unlock() - if mock.HandShakeFunc == nil { - var ( - handShakeReplyOut *HandShakeReply - errOut error - ) - return handShakeReplyOut, errOut - } - return mock.HandShakeFunc(contextMoqParam, empty) -} - -// HandShakeCalls gets all the calls that were made to HandShake. -// Check the length with: -// -// len(mockedSentryServer.HandShakeCalls()) -func (mock *SentryServerMock) HandShakeCalls() []struct { - ContextMoqParam context.Context - Empty *emptypb.Empty -} { - var calls []struct { - ContextMoqParam context.Context - Empty *emptypb.Empty - } - mock.lockHandShake.RLock() - calls = mock.calls.HandShake - mock.lockHandShake.RUnlock() - return calls -} - -// Messages calls MessagesFunc. -func (mock *SentryServerMock) Messages(messagesRequest *MessagesRequest, sentry_MessagesServer Sentry_MessagesServer) error { - callInfo := struct { - MessagesRequest *MessagesRequest - Sentry_MessagesServer Sentry_MessagesServer - }{ - MessagesRequest: messagesRequest, - Sentry_MessagesServer: sentry_MessagesServer, - } - mock.lockMessages.Lock() - mock.calls.Messages = append(mock.calls.Messages, callInfo) - mock.lockMessages.Unlock() - if mock.MessagesFunc == nil { - var ( - errOut error - ) - return errOut - } - return mock.MessagesFunc(messagesRequest, sentry_MessagesServer) -} - -// MessagesCalls gets all the calls that were made to Messages. -// Check the length with: -// -// len(mockedSentryServer.MessagesCalls()) -func (mock *SentryServerMock) MessagesCalls() []struct { - MessagesRequest *MessagesRequest - Sentry_MessagesServer Sentry_MessagesServer -} { - var calls []struct { - MessagesRequest *MessagesRequest - Sentry_MessagesServer Sentry_MessagesServer - } - mock.lockMessages.RLock() - calls = mock.calls.Messages - mock.lockMessages.RUnlock() - return calls -} - -// NodeInfo calls NodeInfoFunc. -func (mock *SentryServerMock) NodeInfo(contextMoqParam context.Context, empty *emptypb.Empty) (*types.NodeInfoReply, error) { - callInfo := struct { - ContextMoqParam context.Context - Empty *emptypb.Empty - }{ - ContextMoqParam: contextMoqParam, - Empty: empty, - } - mock.lockNodeInfo.Lock() - mock.calls.NodeInfo = append(mock.calls.NodeInfo, callInfo) - mock.lockNodeInfo.Unlock() - if mock.NodeInfoFunc == nil { - var ( - nodeInfoReplyOut *types.NodeInfoReply - errOut error - ) - return nodeInfoReplyOut, errOut - } - return mock.NodeInfoFunc(contextMoqParam, empty) -} - -// NodeInfoCalls gets all the calls that were made to NodeInfo. -// Check the length with: -// -// len(mockedSentryServer.NodeInfoCalls()) -func (mock *SentryServerMock) NodeInfoCalls() []struct { - ContextMoqParam context.Context - Empty *emptypb.Empty -} { - var calls []struct { - ContextMoqParam context.Context - Empty *emptypb.Empty - } - mock.lockNodeInfo.RLock() - calls = mock.calls.NodeInfo - mock.lockNodeInfo.RUnlock() - return calls -} - -// PeerById calls PeerByIdFunc. -func (mock *SentryServerMock) PeerById(contextMoqParam context.Context, peerByIdRequest *PeerByIdRequest) (*PeerByIdReply, error) { - callInfo := struct { - ContextMoqParam context.Context - PeerByIdRequest *PeerByIdRequest - }{ - ContextMoqParam: contextMoqParam, - PeerByIdRequest: peerByIdRequest, - } - mock.lockPeerById.Lock() - mock.calls.PeerById = append(mock.calls.PeerById, callInfo) - mock.lockPeerById.Unlock() - if mock.PeerByIdFunc == nil { - var ( - peerByIdReplyOut *PeerByIdReply - errOut error - ) - return peerByIdReplyOut, errOut - } - return mock.PeerByIdFunc(contextMoqParam, peerByIdRequest) -} - -// PeerByIdCalls gets all the calls that were made to PeerById. -// Check the length with: -// -// len(mockedSentryServer.PeerByIdCalls()) -func (mock *SentryServerMock) PeerByIdCalls() []struct { - ContextMoqParam context.Context - PeerByIdRequest *PeerByIdRequest -} { - var calls []struct { - ContextMoqParam context.Context - PeerByIdRequest *PeerByIdRequest - } - mock.lockPeerById.RLock() - calls = mock.calls.PeerById - mock.lockPeerById.RUnlock() - return calls -} - -// PeerCount calls PeerCountFunc. -func (mock *SentryServerMock) PeerCount(contextMoqParam context.Context, peerCountRequest *PeerCountRequest) (*PeerCountReply, error) { - callInfo := struct { - ContextMoqParam context.Context - PeerCountRequest *PeerCountRequest - }{ - ContextMoqParam: contextMoqParam, - PeerCountRequest: peerCountRequest, - } - mock.lockPeerCount.Lock() - mock.calls.PeerCount = append(mock.calls.PeerCount, callInfo) - mock.lockPeerCount.Unlock() - if mock.PeerCountFunc == nil { - var ( - peerCountReplyOut *PeerCountReply - errOut error - ) - return peerCountReplyOut, errOut - } - return mock.PeerCountFunc(contextMoqParam, peerCountRequest) -} - -// PeerCountCalls gets all the calls that were made to PeerCount. -// Check the length with: -// -// len(mockedSentryServer.PeerCountCalls()) -func (mock *SentryServerMock) PeerCountCalls() []struct { - ContextMoqParam context.Context - PeerCountRequest *PeerCountRequest -} { - var calls []struct { - ContextMoqParam context.Context - PeerCountRequest *PeerCountRequest - } - mock.lockPeerCount.RLock() - calls = mock.calls.PeerCount - mock.lockPeerCount.RUnlock() - return calls -} - -// PeerEvents calls PeerEventsFunc. -func (mock *SentryServerMock) PeerEvents(peerEventsRequest *PeerEventsRequest, sentry_PeerEventsServer Sentry_PeerEventsServer) error { - callInfo := struct { - PeerEventsRequest *PeerEventsRequest - Sentry_PeerEventsServer Sentry_PeerEventsServer - }{ - PeerEventsRequest: peerEventsRequest, - Sentry_PeerEventsServer: sentry_PeerEventsServer, - } - mock.lockPeerEvents.Lock() - mock.calls.PeerEvents = append(mock.calls.PeerEvents, callInfo) - mock.lockPeerEvents.Unlock() - if mock.PeerEventsFunc == nil { - var ( - errOut error - ) - return errOut - } - return mock.PeerEventsFunc(peerEventsRequest, sentry_PeerEventsServer) -} - -// PeerEventsCalls gets all the calls that were made to PeerEvents. -// Check the length with: -// -// len(mockedSentryServer.PeerEventsCalls()) -func (mock *SentryServerMock) PeerEventsCalls() []struct { - PeerEventsRequest *PeerEventsRequest - Sentry_PeerEventsServer Sentry_PeerEventsServer -} { - var calls []struct { - PeerEventsRequest *PeerEventsRequest - Sentry_PeerEventsServer Sentry_PeerEventsServer - } - mock.lockPeerEvents.RLock() - calls = mock.calls.PeerEvents - mock.lockPeerEvents.RUnlock() - return calls -} - -// PeerMinBlock calls PeerMinBlockFunc. -func (mock *SentryServerMock) PeerMinBlock(contextMoqParam context.Context, peerMinBlockRequest *PeerMinBlockRequest) (*emptypb.Empty, error) { - callInfo := struct { - ContextMoqParam context.Context - PeerMinBlockRequest *PeerMinBlockRequest - }{ - ContextMoqParam: contextMoqParam, - PeerMinBlockRequest: peerMinBlockRequest, - } - mock.lockPeerMinBlock.Lock() - mock.calls.PeerMinBlock = append(mock.calls.PeerMinBlock, callInfo) - mock.lockPeerMinBlock.Unlock() - if mock.PeerMinBlockFunc == nil { - var ( - emptyOut *emptypb.Empty - errOut error - ) - return emptyOut, errOut - } - return mock.PeerMinBlockFunc(contextMoqParam, peerMinBlockRequest) -} - -// PeerMinBlockCalls gets all the calls that were made to PeerMinBlock. -// Check the length with: -// -// len(mockedSentryServer.PeerMinBlockCalls()) -func (mock *SentryServerMock) PeerMinBlockCalls() []struct { - ContextMoqParam context.Context - PeerMinBlockRequest *PeerMinBlockRequest -} { - var calls []struct { - ContextMoqParam context.Context - PeerMinBlockRequest *PeerMinBlockRequest - } - mock.lockPeerMinBlock.RLock() - calls = mock.calls.PeerMinBlock - mock.lockPeerMinBlock.RUnlock() - return calls -} - -// Peers calls PeersFunc. -func (mock *SentryServerMock) Peers(contextMoqParam context.Context, empty *emptypb.Empty) (*PeersReply, error) { - callInfo := struct { - ContextMoqParam context.Context - Empty *emptypb.Empty - }{ - ContextMoqParam: contextMoqParam, - Empty: empty, - } - mock.lockPeers.Lock() - mock.calls.Peers = append(mock.calls.Peers, callInfo) - mock.lockPeers.Unlock() - if mock.PeersFunc == nil { - var ( - peersReplyOut *PeersReply - errOut error - ) - return peersReplyOut, errOut - } - return mock.PeersFunc(contextMoqParam, empty) -} - -// PeersCalls gets all the calls that were made to Peers. -// Check the length with: -// -// len(mockedSentryServer.PeersCalls()) -func (mock *SentryServerMock) PeersCalls() []struct { - ContextMoqParam context.Context - Empty *emptypb.Empty -} { - var calls []struct { - ContextMoqParam context.Context - Empty *emptypb.Empty - } - mock.lockPeers.RLock() - calls = mock.calls.Peers - mock.lockPeers.RUnlock() - return calls -} - -// PenalizePeer calls PenalizePeerFunc. -func (mock *SentryServerMock) PenalizePeer(contextMoqParam context.Context, penalizePeerRequest *PenalizePeerRequest) (*emptypb.Empty, error) { - callInfo := struct { - ContextMoqParam context.Context - PenalizePeerRequest *PenalizePeerRequest - }{ - ContextMoqParam: contextMoqParam, - PenalizePeerRequest: penalizePeerRequest, - } - mock.lockPenalizePeer.Lock() - mock.calls.PenalizePeer = append(mock.calls.PenalizePeer, callInfo) - mock.lockPenalizePeer.Unlock() - if mock.PenalizePeerFunc == nil { - var ( - emptyOut *emptypb.Empty - errOut error - ) - return emptyOut, errOut - } - return mock.PenalizePeerFunc(contextMoqParam, penalizePeerRequest) -} - -// PenalizePeerCalls gets all the calls that were made to PenalizePeer. -// Check the length with: -// -// len(mockedSentryServer.PenalizePeerCalls()) -func (mock *SentryServerMock) PenalizePeerCalls() []struct { - ContextMoqParam context.Context - PenalizePeerRequest *PenalizePeerRequest -} { - var calls []struct { - ContextMoqParam context.Context - PenalizePeerRequest *PenalizePeerRequest - } - mock.lockPenalizePeer.RLock() - calls = mock.calls.PenalizePeer - mock.lockPenalizePeer.RUnlock() - return calls -} - -// SendMessageById calls SendMessageByIdFunc. -func (mock *SentryServerMock) SendMessageById(contextMoqParam context.Context, sendMessageByIdRequest *SendMessageByIdRequest) (*SentPeers, error) { - callInfo := struct { - ContextMoqParam context.Context - SendMessageByIdRequest *SendMessageByIdRequest - }{ - ContextMoqParam: contextMoqParam, - SendMessageByIdRequest: sendMessageByIdRequest, - } - mock.lockSendMessageById.Lock() - mock.calls.SendMessageById = append(mock.calls.SendMessageById, callInfo) - mock.lockSendMessageById.Unlock() - if mock.SendMessageByIdFunc == nil { - var ( - sentPeersOut *SentPeers - errOut error - ) - return sentPeersOut, errOut - } - return mock.SendMessageByIdFunc(contextMoqParam, sendMessageByIdRequest) -} - -// SendMessageByIdCalls gets all the calls that were made to SendMessageById. -// Check the length with: -// -// len(mockedSentryServer.SendMessageByIdCalls()) -func (mock *SentryServerMock) SendMessageByIdCalls() []struct { - ContextMoqParam context.Context - SendMessageByIdRequest *SendMessageByIdRequest -} { - var calls []struct { - ContextMoqParam context.Context - SendMessageByIdRequest *SendMessageByIdRequest - } - mock.lockSendMessageById.RLock() - calls = mock.calls.SendMessageById - mock.lockSendMessageById.RUnlock() - return calls -} - -// SendMessageByMinBlock calls SendMessageByMinBlockFunc. -func (mock *SentryServerMock) SendMessageByMinBlock(contextMoqParam context.Context, sendMessageByMinBlockRequest *SendMessageByMinBlockRequest) (*SentPeers, error) { - callInfo := struct { - ContextMoqParam context.Context - SendMessageByMinBlockRequest *SendMessageByMinBlockRequest - }{ - ContextMoqParam: contextMoqParam, - SendMessageByMinBlockRequest: sendMessageByMinBlockRequest, - } - mock.lockSendMessageByMinBlock.Lock() - mock.calls.SendMessageByMinBlock = append(mock.calls.SendMessageByMinBlock, callInfo) - mock.lockSendMessageByMinBlock.Unlock() - if mock.SendMessageByMinBlockFunc == nil { - var ( - sentPeersOut *SentPeers - errOut error - ) - return sentPeersOut, errOut - } - return mock.SendMessageByMinBlockFunc(contextMoqParam, sendMessageByMinBlockRequest) -} - -// SendMessageByMinBlockCalls gets all the calls that were made to SendMessageByMinBlock. -// Check the length with: -// -// len(mockedSentryServer.SendMessageByMinBlockCalls()) -func (mock *SentryServerMock) SendMessageByMinBlockCalls() []struct { - ContextMoqParam context.Context - SendMessageByMinBlockRequest *SendMessageByMinBlockRequest -} { - var calls []struct { - ContextMoqParam context.Context - SendMessageByMinBlockRequest *SendMessageByMinBlockRequest - } - mock.lockSendMessageByMinBlock.RLock() - calls = mock.calls.SendMessageByMinBlock - mock.lockSendMessageByMinBlock.RUnlock() - return calls -} - -// SendMessageToAll calls SendMessageToAllFunc. -func (mock *SentryServerMock) SendMessageToAll(contextMoqParam context.Context, outboundMessageData *OutboundMessageData) (*SentPeers, error) { - callInfo := struct { - ContextMoqParam context.Context - OutboundMessageData *OutboundMessageData - }{ - ContextMoqParam: contextMoqParam, - OutboundMessageData: outboundMessageData, - } - mock.lockSendMessageToAll.Lock() - mock.calls.SendMessageToAll = append(mock.calls.SendMessageToAll, callInfo) - mock.lockSendMessageToAll.Unlock() - if mock.SendMessageToAllFunc == nil { - var ( - sentPeersOut *SentPeers - errOut error - ) - return sentPeersOut, errOut - } - return mock.SendMessageToAllFunc(contextMoqParam, outboundMessageData) -} - -// SendMessageToAllCalls gets all the calls that were made to SendMessageToAll. -// Check the length with: -// -// len(mockedSentryServer.SendMessageToAllCalls()) -func (mock *SentryServerMock) SendMessageToAllCalls() []struct { - ContextMoqParam context.Context - OutboundMessageData *OutboundMessageData -} { - var calls []struct { - ContextMoqParam context.Context - OutboundMessageData *OutboundMessageData - } - mock.lockSendMessageToAll.RLock() - calls = mock.calls.SendMessageToAll - mock.lockSendMessageToAll.RUnlock() - return calls -} - -// SendMessageToRandomPeers calls SendMessageToRandomPeersFunc. -func (mock *SentryServerMock) SendMessageToRandomPeers(contextMoqParam context.Context, sendMessageToRandomPeersRequest *SendMessageToRandomPeersRequest) (*SentPeers, error) { - callInfo := struct { - ContextMoqParam context.Context - SendMessageToRandomPeersRequest *SendMessageToRandomPeersRequest - }{ - ContextMoqParam: contextMoqParam, - SendMessageToRandomPeersRequest: sendMessageToRandomPeersRequest, - } - mock.lockSendMessageToRandomPeers.Lock() - mock.calls.SendMessageToRandomPeers = append(mock.calls.SendMessageToRandomPeers, callInfo) - mock.lockSendMessageToRandomPeers.Unlock() - if mock.SendMessageToRandomPeersFunc == nil { - var ( - sentPeersOut *SentPeers - errOut error - ) - return sentPeersOut, errOut - } - return mock.SendMessageToRandomPeersFunc(contextMoqParam, sendMessageToRandomPeersRequest) -} - -// SendMessageToRandomPeersCalls gets all the calls that were made to SendMessageToRandomPeers. -// Check the length with: -// -// len(mockedSentryServer.SendMessageToRandomPeersCalls()) -func (mock *SentryServerMock) SendMessageToRandomPeersCalls() []struct { - ContextMoqParam context.Context - SendMessageToRandomPeersRequest *SendMessageToRandomPeersRequest -} { - var calls []struct { - ContextMoqParam context.Context - SendMessageToRandomPeersRequest *SendMessageToRandomPeersRequest - } - mock.lockSendMessageToRandomPeers.RLock() - calls = mock.calls.SendMessageToRandomPeers - mock.lockSendMessageToRandomPeers.RUnlock() - return calls -} - -// SetStatus calls SetStatusFunc. -func (mock *SentryServerMock) SetStatus(contextMoqParam context.Context, statusData *StatusData) (*SetStatusReply, error) { - callInfo := struct { - ContextMoqParam context.Context - StatusData *StatusData - }{ - ContextMoqParam: contextMoqParam, - StatusData: statusData, - } - mock.lockSetStatus.Lock() - mock.calls.SetStatus = append(mock.calls.SetStatus, callInfo) - mock.lockSetStatus.Unlock() - if mock.SetStatusFunc == nil { - var ( - setStatusReplyOut *SetStatusReply - errOut error - ) - return setStatusReplyOut, errOut - } - return mock.SetStatusFunc(contextMoqParam, statusData) -} - -// SetStatusCalls gets all the calls that were made to SetStatus. -// Check the length with: -// -// len(mockedSentryServer.SetStatusCalls()) -func (mock *SentryServerMock) SetStatusCalls() []struct { - ContextMoqParam context.Context - StatusData *StatusData -} { - var calls []struct { - ContextMoqParam context.Context - StatusData *StatusData - } - mock.lockSetStatus.RLock() - calls = mock.calls.SetStatus - mock.lockSetStatus.RUnlock() - return calls -} - -// mustEmbedUnimplementedSentryServer calls mustEmbedUnimplementedSentryServerFunc. -func (mock *SentryServerMock) mustEmbedUnimplementedSentryServer() { - callInfo := struct { - }{} - mock.lockmustEmbedUnimplementedSentryServer.Lock() - mock.calls.mustEmbedUnimplementedSentryServer = append(mock.calls.mustEmbedUnimplementedSentryServer, callInfo) - mock.lockmustEmbedUnimplementedSentryServer.Unlock() - if mock.mustEmbedUnimplementedSentryServerFunc == nil { - return - } - mock.mustEmbedUnimplementedSentryServerFunc() -} - -// mustEmbedUnimplementedSentryServerCalls gets all the calls that were made to mustEmbedUnimplementedSentryServer. -// Check the length with: -// -// len(mockedSentryServer.mustEmbedUnimplementedSentryServerCalls()) -func (mock *SentryServerMock) mustEmbedUnimplementedSentryServerCalls() []struct { -} { - var calls []struct { - } - mock.lockmustEmbedUnimplementedSentryServer.RLock() - calls = mock.calls.mustEmbedUnimplementedSentryServer - mock.lockmustEmbedUnimplementedSentryServer.RUnlock() - return calls -} - -// Ensure, that SentryClientMock does implement SentryClient. -// If this is not the case, regenerate this file with moq. -var _ SentryClient = &SentryClientMock{} - -// SentryClientMock is a mock implementation of SentryClient. -// -// func TestSomethingThatUsesSentryClient(t *testing.T) { -// -// // make and configure a mocked SentryClient -// mockedSentryClient := &SentryClientMock{ -// AddPeerFunc: func(ctx context.Context, in *AddPeerRequest, opts ...grpc.CallOption) (*AddPeerReply, error) { -// panic("mock out the AddPeer method") -// }, -// HandShakeFunc: func(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*HandShakeReply, error) { -// panic("mock out the HandShake method") -// }, -// MessagesFunc: func(ctx context.Context, in *MessagesRequest, opts ...grpc.CallOption) (Sentry_MessagesClient, error) { -// panic("mock out the Messages method") -// }, -// NodeInfoFunc: func(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*types.NodeInfoReply, error) { -// panic("mock out the NodeInfo method") -// }, -// PeerByIdFunc: func(ctx context.Context, in *PeerByIdRequest, opts ...grpc.CallOption) (*PeerByIdReply, error) { -// panic("mock out the PeerById method") -// }, -// PeerCountFunc: func(ctx context.Context, in *PeerCountRequest, opts ...grpc.CallOption) (*PeerCountReply, error) { -// panic("mock out the PeerCount method") -// }, -// PeerEventsFunc: func(ctx context.Context, in *PeerEventsRequest, opts ...grpc.CallOption) (Sentry_PeerEventsClient, error) { -// panic("mock out the PeerEvents method") -// }, -// PeerMinBlockFunc: func(ctx context.Context, in *PeerMinBlockRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { -// panic("mock out the PeerMinBlock method") -// }, -// PeersFunc: func(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*PeersReply, error) { -// panic("mock out the Peers method") -// }, -// PenalizePeerFunc: func(ctx context.Context, in *PenalizePeerRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { -// panic("mock out the PenalizePeer method") -// }, -// SendMessageByIdFunc: func(ctx context.Context, in *SendMessageByIdRequest, opts ...grpc.CallOption) (*SentPeers, error) { -// panic("mock out the SendMessageById method") -// }, -// SendMessageByMinBlockFunc: func(ctx context.Context, in *SendMessageByMinBlockRequest, opts ...grpc.CallOption) (*SentPeers, error) { -// panic("mock out the SendMessageByMinBlock method") -// }, -// SendMessageToAllFunc: func(ctx context.Context, in *OutboundMessageData, opts ...grpc.CallOption) (*SentPeers, error) { -// panic("mock out the SendMessageToAll method") -// }, -// SendMessageToRandomPeersFunc: func(ctx context.Context, in *SendMessageToRandomPeersRequest, opts ...grpc.CallOption) (*SentPeers, error) { -// panic("mock out the SendMessageToRandomPeers method") -// }, -// SetStatusFunc: func(ctx context.Context, in *StatusData, opts ...grpc.CallOption) (*SetStatusReply, error) { -// panic("mock out the SetStatus method") -// }, -// } -// -// // use mockedSentryClient in code that requires SentryClient -// // and then make assertions. -// -// } -type SentryClientMock struct { - // AddPeerFunc mocks the AddPeer method. - AddPeerFunc func(ctx context.Context, in *AddPeerRequest, opts ...grpc.CallOption) (*AddPeerReply, error) - - // HandShakeFunc mocks the HandShake method. - HandShakeFunc func(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*HandShakeReply, error) - - // MessagesFunc mocks the Messages method. - MessagesFunc func(ctx context.Context, in *MessagesRequest, opts ...grpc.CallOption) (Sentry_MessagesClient, error) - - // NodeInfoFunc mocks the NodeInfo method. - NodeInfoFunc func(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*types.NodeInfoReply, error) - - // PeerByIdFunc mocks the PeerById method. - PeerByIdFunc func(ctx context.Context, in *PeerByIdRequest, opts ...grpc.CallOption) (*PeerByIdReply, error) - - // PeerCountFunc mocks the PeerCount method. - PeerCountFunc func(ctx context.Context, in *PeerCountRequest, opts ...grpc.CallOption) (*PeerCountReply, error) - - // PeerEventsFunc mocks the PeerEvents method. - PeerEventsFunc func(ctx context.Context, in *PeerEventsRequest, opts ...grpc.CallOption) (Sentry_PeerEventsClient, error) - - // PeerMinBlockFunc mocks the PeerMinBlock method. - PeerMinBlockFunc func(ctx context.Context, in *PeerMinBlockRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - - // PeersFunc mocks the Peers method. - PeersFunc func(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*PeersReply, error) - - // PenalizePeerFunc mocks the PenalizePeer method. - PenalizePeerFunc func(ctx context.Context, in *PenalizePeerRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - - // SendMessageByIdFunc mocks the SendMessageById method. - SendMessageByIdFunc func(ctx context.Context, in *SendMessageByIdRequest, opts ...grpc.CallOption) (*SentPeers, error) - - // SendMessageByMinBlockFunc mocks the SendMessageByMinBlock method. - SendMessageByMinBlockFunc func(ctx context.Context, in *SendMessageByMinBlockRequest, opts ...grpc.CallOption) (*SentPeers, error) - - // SendMessageToAllFunc mocks the SendMessageToAll method. - SendMessageToAllFunc func(ctx context.Context, in *OutboundMessageData, opts ...grpc.CallOption) (*SentPeers, error) - - // SendMessageToRandomPeersFunc mocks the SendMessageToRandomPeers method. - SendMessageToRandomPeersFunc func(ctx context.Context, in *SendMessageToRandomPeersRequest, opts ...grpc.CallOption) (*SentPeers, error) - - // SetStatusFunc mocks the SetStatus method. - SetStatusFunc func(ctx context.Context, in *StatusData, opts ...grpc.CallOption) (*SetStatusReply, error) - - // calls tracks calls to the methods. - calls struct { - // AddPeer holds details about calls to the AddPeer method. - AddPeer []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *AddPeerRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // HandShake holds details about calls to the HandShake method. - HandShake []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *emptypb.Empty - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // Messages holds details about calls to the Messages method. - Messages []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *MessagesRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // NodeInfo holds details about calls to the NodeInfo method. - NodeInfo []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *emptypb.Empty - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // PeerById holds details about calls to the PeerById method. - PeerById []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *PeerByIdRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // PeerCount holds details about calls to the PeerCount method. - PeerCount []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *PeerCountRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // PeerEvents holds details about calls to the PeerEvents method. - PeerEvents []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *PeerEventsRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // PeerMinBlock holds details about calls to the PeerMinBlock method. - PeerMinBlock []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *PeerMinBlockRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // Peers holds details about calls to the Peers method. - Peers []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *emptypb.Empty - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // PenalizePeer holds details about calls to the PenalizePeer method. - PenalizePeer []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *PenalizePeerRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // SendMessageById holds details about calls to the SendMessageById method. - SendMessageById []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *SendMessageByIdRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // SendMessageByMinBlock holds details about calls to the SendMessageByMinBlock method. - SendMessageByMinBlock []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *SendMessageByMinBlockRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // SendMessageToAll holds details about calls to the SendMessageToAll method. - SendMessageToAll []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *OutboundMessageData - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // SendMessageToRandomPeers holds details about calls to the SendMessageToRandomPeers method. - SendMessageToRandomPeers []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *SendMessageToRandomPeersRequest - // Opts is the opts argument value. - Opts []grpc.CallOption - } - // SetStatus holds details about calls to the SetStatus method. - SetStatus []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // In is the in argument value. - In *StatusData - // Opts is the opts argument value. - Opts []grpc.CallOption - } - } - lockAddPeer sync.RWMutex - lockHandShake sync.RWMutex - lockMessages sync.RWMutex - lockNodeInfo sync.RWMutex - lockPeerById sync.RWMutex - lockPeerCount sync.RWMutex - lockPeerEvents sync.RWMutex - lockPeerMinBlock sync.RWMutex - lockPeers sync.RWMutex - lockPenalizePeer sync.RWMutex - lockSendMessageById sync.RWMutex - lockSendMessageByMinBlock sync.RWMutex - lockSendMessageToAll sync.RWMutex - lockSendMessageToRandomPeers sync.RWMutex - lockSetStatus sync.RWMutex -} - -// AddPeer calls AddPeerFunc. -func (mock *SentryClientMock) AddPeer(ctx context.Context, in *AddPeerRequest, opts ...grpc.CallOption) (*AddPeerReply, error) { - callInfo := struct { - Ctx context.Context - In *AddPeerRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockAddPeer.Lock() - mock.calls.AddPeer = append(mock.calls.AddPeer, callInfo) - mock.lockAddPeer.Unlock() - if mock.AddPeerFunc == nil { - var ( - addPeerReplyOut *AddPeerReply - errOut error - ) - return addPeerReplyOut, errOut - } - return mock.AddPeerFunc(ctx, in, opts...) -} - -// AddPeerCalls gets all the calls that were made to AddPeer. -// Check the length with: -// -// len(mockedSentryClient.AddPeerCalls()) -func (mock *SentryClientMock) AddPeerCalls() []struct { - Ctx context.Context - In *AddPeerRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *AddPeerRequest - Opts []grpc.CallOption - } - mock.lockAddPeer.RLock() - calls = mock.calls.AddPeer - mock.lockAddPeer.RUnlock() - return calls -} - -// HandShake calls HandShakeFunc. -func (mock *SentryClientMock) HandShake(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*HandShakeReply, error) { - callInfo := struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockHandShake.Lock() - mock.calls.HandShake = append(mock.calls.HandShake, callInfo) - mock.lockHandShake.Unlock() - if mock.HandShakeFunc == nil { - var ( - handShakeReplyOut *HandShakeReply - errOut error - ) - return handShakeReplyOut, errOut - } - return mock.HandShakeFunc(ctx, in, opts...) -} - -// HandShakeCalls gets all the calls that were made to HandShake. -// Check the length with: -// -// len(mockedSentryClient.HandShakeCalls()) -func (mock *SentryClientMock) HandShakeCalls() []struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption - } - mock.lockHandShake.RLock() - calls = mock.calls.HandShake - mock.lockHandShake.RUnlock() - return calls -} - -// Messages calls MessagesFunc. -func (mock *SentryClientMock) Messages(ctx context.Context, in *MessagesRequest, opts ...grpc.CallOption) (Sentry_MessagesClient, error) { - callInfo := struct { - Ctx context.Context - In *MessagesRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockMessages.Lock() - mock.calls.Messages = append(mock.calls.Messages, callInfo) - mock.lockMessages.Unlock() - if mock.MessagesFunc == nil { - var ( - sentry_MessagesClientOut Sentry_MessagesClient - errOut error - ) - return sentry_MessagesClientOut, errOut - } - return mock.MessagesFunc(ctx, in, opts...) -} - -// MessagesCalls gets all the calls that were made to Messages. -// Check the length with: -// -// len(mockedSentryClient.MessagesCalls()) -func (mock *SentryClientMock) MessagesCalls() []struct { - Ctx context.Context - In *MessagesRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *MessagesRequest - Opts []grpc.CallOption - } - mock.lockMessages.RLock() - calls = mock.calls.Messages - mock.lockMessages.RUnlock() - return calls -} - -// NodeInfo calls NodeInfoFunc. -func (mock *SentryClientMock) NodeInfo(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*types.NodeInfoReply, error) { - callInfo := struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockNodeInfo.Lock() - mock.calls.NodeInfo = append(mock.calls.NodeInfo, callInfo) - mock.lockNodeInfo.Unlock() - if mock.NodeInfoFunc == nil { - var ( - nodeInfoReplyOut *types.NodeInfoReply - errOut error - ) - return nodeInfoReplyOut, errOut - } - return mock.NodeInfoFunc(ctx, in, opts...) -} - -// NodeInfoCalls gets all the calls that were made to NodeInfo. -// Check the length with: -// -// len(mockedSentryClient.NodeInfoCalls()) -func (mock *SentryClientMock) NodeInfoCalls() []struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption - } - mock.lockNodeInfo.RLock() - calls = mock.calls.NodeInfo - mock.lockNodeInfo.RUnlock() - return calls -} - -// PeerById calls PeerByIdFunc. -func (mock *SentryClientMock) PeerById(ctx context.Context, in *PeerByIdRequest, opts ...grpc.CallOption) (*PeerByIdReply, error) { - callInfo := struct { - Ctx context.Context - In *PeerByIdRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockPeerById.Lock() - mock.calls.PeerById = append(mock.calls.PeerById, callInfo) - mock.lockPeerById.Unlock() - if mock.PeerByIdFunc == nil { - var ( - peerByIdReplyOut *PeerByIdReply - errOut error - ) - return peerByIdReplyOut, errOut - } - return mock.PeerByIdFunc(ctx, in, opts...) -} - -// PeerByIdCalls gets all the calls that were made to PeerById. -// Check the length with: -// -// len(mockedSentryClient.PeerByIdCalls()) -func (mock *SentryClientMock) PeerByIdCalls() []struct { - Ctx context.Context - In *PeerByIdRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *PeerByIdRequest - Opts []grpc.CallOption - } - mock.lockPeerById.RLock() - calls = mock.calls.PeerById - mock.lockPeerById.RUnlock() - return calls -} - -// PeerCount calls PeerCountFunc. -func (mock *SentryClientMock) PeerCount(ctx context.Context, in *PeerCountRequest, opts ...grpc.CallOption) (*PeerCountReply, error) { - callInfo := struct { - Ctx context.Context - In *PeerCountRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockPeerCount.Lock() - mock.calls.PeerCount = append(mock.calls.PeerCount, callInfo) - mock.lockPeerCount.Unlock() - if mock.PeerCountFunc == nil { - var ( - peerCountReplyOut *PeerCountReply - errOut error - ) - return peerCountReplyOut, errOut - } - return mock.PeerCountFunc(ctx, in, opts...) -} - -// PeerCountCalls gets all the calls that were made to PeerCount. -// Check the length with: -// -// len(mockedSentryClient.PeerCountCalls()) -func (mock *SentryClientMock) PeerCountCalls() []struct { - Ctx context.Context - In *PeerCountRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *PeerCountRequest - Opts []grpc.CallOption - } - mock.lockPeerCount.RLock() - calls = mock.calls.PeerCount - mock.lockPeerCount.RUnlock() - return calls -} - -// PeerEvents calls PeerEventsFunc. -func (mock *SentryClientMock) PeerEvents(ctx context.Context, in *PeerEventsRequest, opts ...grpc.CallOption) (Sentry_PeerEventsClient, error) { - callInfo := struct { - Ctx context.Context - In *PeerEventsRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockPeerEvents.Lock() - mock.calls.PeerEvents = append(mock.calls.PeerEvents, callInfo) - mock.lockPeerEvents.Unlock() - if mock.PeerEventsFunc == nil { - var ( - sentry_PeerEventsClientOut Sentry_PeerEventsClient - errOut error - ) - return sentry_PeerEventsClientOut, errOut - } - return mock.PeerEventsFunc(ctx, in, opts...) -} - -// PeerEventsCalls gets all the calls that were made to PeerEvents. -// Check the length with: -// -// len(mockedSentryClient.PeerEventsCalls()) -func (mock *SentryClientMock) PeerEventsCalls() []struct { - Ctx context.Context - In *PeerEventsRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *PeerEventsRequest - Opts []grpc.CallOption - } - mock.lockPeerEvents.RLock() - calls = mock.calls.PeerEvents - mock.lockPeerEvents.RUnlock() - return calls -} - -// PeerMinBlock calls PeerMinBlockFunc. -func (mock *SentryClientMock) PeerMinBlock(ctx context.Context, in *PeerMinBlockRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - callInfo := struct { - Ctx context.Context - In *PeerMinBlockRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockPeerMinBlock.Lock() - mock.calls.PeerMinBlock = append(mock.calls.PeerMinBlock, callInfo) - mock.lockPeerMinBlock.Unlock() - if mock.PeerMinBlockFunc == nil { - var ( - emptyOut *emptypb.Empty - errOut error - ) - return emptyOut, errOut - } - return mock.PeerMinBlockFunc(ctx, in, opts...) -} - -// PeerMinBlockCalls gets all the calls that were made to PeerMinBlock. -// Check the length with: -// -// len(mockedSentryClient.PeerMinBlockCalls()) -func (mock *SentryClientMock) PeerMinBlockCalls() []struct { - Ctx context.Context - In *PeerMinBlockRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *PeerMinBlockRequest - Opts []grpc.CallOption - } - mock.lockPeerMinBlock.RLock() - calls = mock.calls.PeerMinBlock - mock.lockPeerMinBlock.RUnlock() - return calls -} - -// Peers calls PeersFunc. -func (mock *SentryClientMock) Peers(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*PeersReply, error) { - callInfo := struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockPeers.Lock() - mock.calls.Peers = append(mock.calls.Peers, callInfo) - mock.lockPeers.Unlock() - if mock.PeersFunc == nil { - var ( - peersReplyOut *PeersReply - errOut error - ) - return peersReplyOut, errOut - } - return mock.PeersFunc(ctx, in, opts...) -} - -// PeersCalls gets all the calls that were made to Peers. -// Check the length with: -// -// len(mockedSentryClient.PeersCalls()) -func (mock *SentryClientMock) PeersCalls() []struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *emptypb.Empty - Opts []grpc.CallOption - } - mock.lockPeers.RLock() - calls = mock.calls.Peers - mock.lockPeers.RUnlock() - return calls -} - -// PenalizePeer calls PenalizePeerFunc. -func (mock *SentryClientMock) PenalizePeer(ctx context.Context, in *PenalizePeerRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - callInfo := struct { - Ctx context.Context - In *PenalizePeerRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockPenalizePeer.Lock() - mock.calls.PenalizePeer = append(mock.calls.PenalizePeer, callInfo) - mock.lockPenalizePeer.Unlock() - if mock.PenalizePeerFunc == nil { - var ( - emptyOut *emptypb.Empty - errOut error - ) - return emptyOut, errOut - } - return mock.PenalizePeerFunc(ctx, in, opts...) -} - -// PenalizePeerCalls gets all the calls that were made to PenalizePeer. -// Check the length with: -// -// len(mockedSentryClient.PenalizePeerCalls()) -func (mock *SentryClientMock) PenalizePeerCalls() []struct { - Ctx context.Context - In *PenalizePeerRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *PenalizePeerRequest - Opts []grpc.CallOption - } - mock.lockPenalizePeer.RLock() - calls = mock.calls.PenalizePeer - mock.lockPenalizePeer.RUnlock() - return calls -} - -// SendMessageById calls SendMessageByIdFunc. -func (mock *SentryClientMock) SendMessageById(ctx context.Context, in *SendMessageByIdRequest, opts ...grpc.CallOption) (*SentPeers, error) { - callInfo := struct { - Ctx context.Context - In *SendMessageByIdRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockSendMessageById.Lock() - mock.calls.SendMessageById = append(mock.calls.SendMessageById, callInfo) - mock.lockSendMessageById.Unlock() - if mock.SendMessageByIdFunc == nil { - var ( - sentPeersOut *SentPeers - errOut error - ) - return sentPeersOut, errOut - } - return mock.SendMessageByIdFunc(ctx, in, opts...) -} - -// SendMessageByIdCalls gets all the calls that were made to SendMessageById. -// Check the length with: -// -// len(mockedSentryClient.SendMessageByIdCalls()) -func (mock *SentryClientMock) SendMessageByIdCalls() []struct { - Ctx context.Context - In *SendMessageByIdRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *SendMessageByIdRequest - Opts []grpc.CallOption - } - mock.lockSendMessageById.RLock() - calls = mock.calls.SendMessageById - mock.lockSendMessageById.RUnlock() - return calls -} - -// SendMessageByMinBlock calls SendMessageByMinBlockFunc. -func (mock *SentryClientMock) SendMessageByMinBlock(ctx context.Context, in *SendMessageByMinBlockRequest, opts ...grpc.CallOption) (*SentPeers, error) { - callInfo := struct { - Ctx context.Context - In *SendMessageByMinBlockRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockSendMessageByMinBlock.Lock() - mock.calls.SendMessageByMinBlock = append(mock.calls.SendMessageByMinBlock, callInfo) - mock.lockSendMessageByMinBlock.Unlock() - if mock.SendMessageByMinBlockFunc == nil { - var ( - sentPeersOut *SentPeers - errOut error - ) - return sentPeersOut, errOut - } - return mock.SendMessageByMinBlockFunc(ctx, in, opts...) -} - -// SendMessageByMinBlockCalls gets all the calls that were made to SendMessageByMinBlock. -// Check the length with: -// -// len(mockedSentryClient.SendMessageByMinBlockCalls()) -func (mock *SentryClientMock) SendMessageByMinBlockCalls() []struct { - Ctx context.Context - In *SendMessageByMinBlockRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *SendMessageByMinBlockRequest - Opts []grpc.CallOption - } - mock.lockSendMessageByMinBlock.RLock() - calls = mock.calls.SendMessageByMinBlock - mock.lockSendMessageByMinBlock.RUnlock() - return calls -} - -// SendMessageToAll calls SendMessageToAllFunc. -func (mock *SentryClientMock) SendMessageToAll(ctx context.Context, in *OutboundMessageData, opts ...grpc.CallOption) (*SentPeers, error) { - callInfo := struct { - Ctx context.Context - In *OutboundMessageData - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockSendMessageToAll.Lock() - mock.calls.SendMessageToAll = append(mock.calls.SendMessageToAll, callInfo) - mock.lockSendMessageToAll.Unlock() - if mock.SendMessageToAllFunc == nil { - var ( - sentPeersOut *SentPeers - errOut error - ) - return sentPeersOut, errOut - } - return mock.SendMessageToAllFunc(ctx, in, opts...) -} - -// SendMessageToAllCalls gets all the calls that were made to SendMessageToAll. -// Check the length with: -// -// len(mockedSentryClient.SendMessageToAllCalls()) -func (mock *SentryClientMock) SendMessageToAllCalls() []struct { - Ctx context.Context - In *OutboundMessageData - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *OutboundMessageData - Opts []grpc.CallOption - } - mock.lockSendMessageToAll.RLock() - calls = mock.calls.SendMessageToAll - mock.lockSendMessageToAll.RUnlock() - return calls -} - -// SendMessageToRandomPeers calls SendMessageToRandomPeersFunc. -func (mock *SentryClientMock) SendMessageToRandomPeers(ctx context.Context, in *SendMessageToRandomPeersRequest, opts ...grpc.CallOption) (*SentPeers, error) { - callInfo := struct { - Ctx context.Context - In *SendMessageToRandomPeersRequest - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockSendMessageToRandomPeers.Lock() - mock.calls.SendMessageToRandomPeers = append(mock.calls.SendMessageToRandomPeers, callInfo) - mock.lockSendMessageToRandomPeers.Unlock() - if mock.SendMessageToRandomPeersFunc == nil { - var ( - sentPeersOut *SentPeers - errOut error - ) - return sentPeersOut, errOut - } - return mock.SendMessageToRandomPeersFunc(ctx, in, opts...) -} - -// SendMessageToRandomPeersCalls gets all the calls that were made to SendMessageToRandomPeers. -// Check the length with: -// -// len(mockedSentryClient.SendMessageToRandomPeersCalls()) -func (mock *SentryClientMock) SendMessageToRandomPeersCalls() []struct { - Ctx context.Context - In *SendMessageToRandomPeersRequest - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *SendMessageToRandomPeersRequest - Opts []grpc.CallOption - } - mock.lockSendMessageToRandomPeers.RLock() - calls = mock.calls.SendMessageToRandomPeers - mock.lockSendMessageToRandomPeers.RUnlock() - return calls -} - -// SetStatus calls SetStatusFunc. -func (mock *SentryClientMock) SetStatus(ctx context.Context, in *StatusData, opts ...grpc.CallOption) (*SetStatusReply, error) { - callInfo := struct { - Ctx context.Context - In *StatusData - Opts []grpc.CallOption - }{ - Ctx: ctx, - In: in, - Opts: opts, - } - mock.lockSetStatus.Lock() - mock.calls.SetStatus = append(mock.calls.SetStatus, callInfo) - mock.lockSetStatus.Unlock() - if mock.SetStatusFunc == nil { - var ( - setStatusReplyOut *SetStatusReply - errOut error - ) - return setStatusReplyOut, errOut - } - return mock.SetStatusFunc(ctx, in, opts...) -} - -// SetStatusCalls gets all the calls that were made to SetStatus. -// Check the length with: -// -// len(mockedSentryClient.SetStatusCalls()) -func (mock *SentryClientMock) SetStatusCalls() []struct { - Ctx context.Context - In *StatusData - Opts []grpc.CallOption -} { - var calls []struct { - Ctx context.Context - In *StatusData - Opts []grpc.CallOption - } - mock.lockSetStatus.RLock() - calls = mock.calls.SetStatus - mock.lockSetStatus.RUnlock() - return calls -} diff --git a/erigon-lib/gointerfaces/sentry/sentry_client_mock.go b/erigon-lib/gointerfaces/sentry/sentry_client_mock.go new file mode 100644 index 00000000000..f17b8731e8a --- /dev/null +++ b/erigon-lib/gointerfaces/sentry/sentry_client_mock.go @@ -0,0 +1,703 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon-lib/gointerfaces/sentry (interfaces: SentryClient) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./sentry_client_mock.go -package=sentry . SentryClient +// + +// Package sentry is a generated GoMock package. +package sentry + +import ( + context "context" + reflect "reflect" + + types "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + gomock "go.uber.org/mock/gomock" + grpc "google.golang.org/grpc" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// MockSentryClient is a mock of SentryClient interface. +type MockSentryClient struct { + ctrl *gomock.Controller + recorder *MockSentryClientMockRecorder +} + +// MockSentryClientMockRecorder is the mock recorder for MockSentryClient. +type MockSentryClientMockRecorder struct { + mock *MockSentryClient +} + +// NewMockSentryClient creates a new mock instance. +func NewMockSentryClient(ctrl *gomock.Controller) *MockSentryClient { + mock := &MockSentryClient{ctrl: ctrl} + mock.recorder = &MockSentryClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSentryClient) EXPECT() *MockSentryClientMockRecorder { + return m.recorder +} + +// AddPeer mocks base method. +func (m *MockSentryClient) AddPeer(arg0 context.Context, arg1 *AddPeerRequest, arg2 ...grpc.CallOption) (*AddPeerReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AddPeer", varargs...) + ret0, _ := ret[0].(*AddPeerReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddPeer indicates an expected call of AddPeer. +func (mr *MockSentryClientMockRecorder) AddPeer(arg0, arg1 any, arg2 ...any) *MockSentryClientAddPeerCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddPeer", reflect.TypeOf((*MockSentryClient)(nil).AddPeer), varargs...) + return &MockSentryClientAddPeerCall{Call: call} +} + +// MockSentryClientAddPeerCall wrap *gomock.Call +type MockSentryClientAddPeerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientAddPeerCall) Return(arg0 *AddPeerReply, arg1 error) *MockSentryClientAddPeerCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientAddPeerCall) Do(f func(context.Context, *AddPeerRequest, ...grpc.CallOption) (*AddPeerReply, error)) *MockSentryClientAddPeerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientAddPeerCall) DoAndReturn(f func(context.Context, *AddPeerRequest, ...grpc.CallOption) (*AddPeerReply, error)) *MockSentryClientAddPeerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// HandShake mocks base method. +func (m *MockSentryClient) HandShake(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*HandShakeReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "HandShake", varargs...) + ret0, _ := ret[0].(*HandShakeReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HandShake indicates an expected call of HandShake. +func (mr *MockSentryClientMockRecorder) HandShake(arg0, arg1 any, arg2 ...any) *MockSentryClientHandShakeCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HandShake", reflect.TypeOf((*MockSentryClient)(nil).HandShake), varargs...) + return &MockSentryClientHandShakeCall{Call: call} +} + +// MockSentryClientHandShakeCall wrap *gomock.Call +type MockSentryClientHandShakeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientHandShakeCall) Return(arg0 *HandShakeReply, arg1 error) *MockSentryClientHandShakeCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientHandShakeCall) Do(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*HandShakeReply, error)) *MockSentryClientHandShakeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientHandShakeCall) DoAndReturn(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*HandShakeReply, error)) *MockSentryClientHandShakeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Messages mocks base method. +func (m *MockSentryClient) Messages(arg0 context.Context, arg1 *MessagesRequest, arg2 ...grpc.CallOption) (Sentry_MessagesClient, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Messages", varargs...) + ret0, _ := ret[0].(Sentry_MessagesClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Messages indicates an expected call of Messages. +func (mr *MockSentryClientMockRecorder) Messages(arg0, arg1 any, arg2 ...any) *MockSentryClientMessagesCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Messages", reflect.TypeOf((*MockSentryClient)(nil).Messages), varargs...) + return &MockSentryClientMessagesCall{Call: call} +} + +// MockSentryClientMessagesCall wrap *gomock.Call +type MockSentryClientMessagesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientMessagesCall) Return(arg0 Sentry_MessagesClient, arg1 error) *MockSentryClientMessagesCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientMessagesCall) Do(f func(context.Context, *MessagesRequest, ...grpc.CallOption) (Sentry_MessagesClient, error)) *MockSentryClientMessagesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientMessagesCall) DoAndReturn(f func(context.Context, *MessagesRequest, ...grpc.CallOption) (Sentry_MessagesClient, error)) *MockSentryClientMessagesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// NodeInfo mocks base method. +func (m *MockSentryClient) NodeInfo(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*types.NodeInfoReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "NodeInfo", varargs...) + ret0, _ := ret[0].(*types.NodeInfoReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NodeInfo indicates an expected call of NodeInfo. +func (mr *MockSentryClientMockRecorder) NodeInfo(arg0, arg1 any, arg2 ...any) *MockSentryClientNodeInfoCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeInfo", reflect.TypeOf((*MockSentryClient)(nil).NodeInfo), varargs...) + return &MockSentryClientNodeInfoCall{Call: call} +} + +// MockSentryClientNodeInfoCall wrap *gomock.Call +type MockSentryClientNodeInfoCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientNodeInfoCall) Return(arg0 *types.NodeInfoReply, arg1 error) *MockSentryClientNodeInfoCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientNodeInfoCall) Do(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*types.NodeInfoReply, error)) *MockSentryClientNodeInfoCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientNodeInfoCall) DoAndReturn(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*types.NodeInfoReply, error)) *MockSentryClientNodeInfoCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerById mocks base method. +func (m *MockSentryClient) PeerById(arg0 context.Context, arg1 *PeerByIdRequest, arg2 ...grpc.CallOption) (*PeerByIdReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PeerById", varargs...) + ret0, _ := ret[0].(*PeerByIdReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerById indicates an expected call of PeerById. +func (mr *MockSentryClientMockRecorder) PeerById(arg0, arg1 any, arg2 ...any) *MockSentryClientPeerByIdCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerById", reflect.TypeOf((*MockSentryClient)(nil).PeerById), varargs...) + return &MockSentryClientPeerByIdCall{Call: call} +} + +// MockSentryClientPeerByIdCall wrap *gomock.Call +type MockSentryClientPeerByIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeerByIdCall) Return(arg0 *PeerByIdReply, arg1 error) *MockSentryClientPeerByIdCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeerByIdCall) Do(f func(context.Context, *PeerByIdRequest, ...grpc.CallOption) (*PeerByIdReply, error)) *MockSentryClientPeerByIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeerByIdCall) DoAndReturn(f func(context.Context, *PeerByIdRequest, ...grpc.CallOption) (*PeerByIdReply, error)) *MockSentryClientPeerByIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerCount mocks base method. +func (m *MockSentryClient) PeerCount(arg0 context.Context, arg1 *PeerCountRequest, arg2 ...grpc.CallOption) (*PeerCountReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PeerCount", varargs...) + ret0, _ := ret[0].(*PeerCountReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerCount indicates an expected call of PeerCount. +func (mr *MockSentryClientMockRecorder) PeerCount(arg0, arg1 any, arg2 ...any) *MockSentryClientPeerCountCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerCount", reflect.TypeOf((*MockSentryClient)(nil).PeerCount), varargs...) + return &MockSentryClientPeerCountCall{Call: call} +} + +// MockSentryClientPeerCountCall wrap *gomock.Call +type MockSentryClientPeerCountCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeerCountCall) Return(arg0 *PeerCountReply, arg1 error) *MockSentryClientPeerCountCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeerCountCall) Do(f func(context.Context, *PeerCountRequest, ...grpc.CallOption) (*PeerCountReply, error)) *MockSentryClientPeerCountCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeerCountCall) DoAndReturn(f func(context.Context, *PeerCountRequest, ...grpc.CallOption) (*PeerCountReply, error)) *MockSentryClientPeerCountCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerEvents mocks base method. +func (m *MockSentryClient) PeerEvents(arg0 context.Context, arg1 *PeerEventsRequest, arg2 ...grpc.CallOption) (Sentry_PeerEventsClient, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PeerEvents", varargs...) + ret0, _ := ret[0].(Sentry_PeerEventsClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerEvents indicates an expected call of PeerEvents. +func (mr *MockSentryClientMockRecorder) PeerEvents(arg0, arg1 any, arg2 ...any) *MockSentryClientPeerEventsCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerEvents", reflect.TypeOf((*MockSentryClient)(nil).PeerEvents), varargs...) + return &MockSentryClientPeerEventsCall{Call: call} +} + +// MockSentryClientPeerEventsCall wrap *gomock.Call +type MockSentryClientPeerEventsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeerEventsCall) Return(arg0 Sentry_PeerEventsClient, arg1 error) *MockSentryClientPeerEventsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeerEventsCall) Do(f func(context.Context, *PeerEventsRequest, ...grpc.CallOption) (Sentry_PeerEventsClient, error)) *MockSentryClientPeerEventsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeerEventsCall) DoAndReturn(f func(context.Context, *PeerEventsRequest, ...grpc.CallOption) (Sentry_PeerEventsClient, error)) *MockSentryClientPeerEventsCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerMinBlock mocks base method. +func (m *MockSentryClient) PeerMinBlock(arg0 context.Context, arg1 *PeerMinBlockRequest, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PeerMinBlock", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerMinBlock indicates an expected call of PeerMinBlock. +func (mr *MockSentryClientMockRecorder) PeerMinBlock(arg0, arg1 any, arg2 ...any) *MockSentryClientPeerMinBlockCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerMinBlock", reflect.TypeOf((*MockSentryClient)(nil).PeerMinBlock), varargs...) + return &MockSentryClientPeerMinBlockCall{Call: call} +} + +// MockSentryClientPeerMinBlockCall wrap *gomock.Call +type MockSentryClientPeerMinBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeerMinBlockCall) Return(arg0 *emptypb.Empty, arg1 error) *MockSentryClientPeerMinBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeerMinBlockCall) Do(f func(context.Context, *PeerMinBlockRequest, ...grpc.CallOption) (*emptypb.Empty, error)) *MockSentryClientPeerMinBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeerMinBlockCall) DoAndReturn(f func(context.Context, *PeerMinBlockRequest, ...grpc.CallOption) (*emptypb.Empty, error)) *MockSentryClientPeerMinBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Peers mocks base method. +func (m *MockSentryClient) Peers(arg0 context.Context, arg1 *emptypb.Empty, arg2 ...grpc.CallOption) (*PeersReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "Peers", varargs...) + ret0, _ := ret[0].(*PeersReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Peers indicates an expected call of Peers. +func (mr *MockSentryClientMockRecorder) Peers(arg0, arg1 any, arg2 ...any) *MockSentryClientPeersCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Peers", reflect.TypeOf((*MockSentryClient)(nil).Peers), varargs...) + return &MockSentryClientPeersCall{Call: call} +} + +// MockSentryClientPeersCall wrap *gomock.Call +type MockSentryClientPeersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPeersCall) Return(arg0 *PeersReply, arg1 error) *MockSentryClientPeersCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPeersCall) Do(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*PeersReply, error)) *MockSentryClientPeersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPeersCall) DoAndReturn(f func(context.Context, *emptypb.Empty, ...grpc.CallOption) (*PeersReply, error)) *MockSentryClientPeersCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PenalizePeer mocks base method. +func (m *MockSentryClient) PenalizePeer(arg0 context.Context, arg1 *PenalizePeerRequest, arg2 ...grpc.CallOption) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "PenalizePeer", varargs...) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PenalizePeer indicates an expected call of PenalizePeer. +func (mr *MockSentryClientMockRecorder) PenalizePeer(arg0, arg1 any, arg2 ...any) *MockSentryClientPenalizePeerCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PenalizePeer", reflect.TypeOf((*MockSentryClient)(nil).PenalizePeer), varargs...) + return &MockSentryClientPenalizePeerCall{Call: call} +} + +// MockSentryClientPenalizePeerCall wrap *gomock.Call +type MockSentryClientPenalizePeerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientPenalizePeerCall) Return(arg0 *emptypb.Empty, arg1 error) *MockSentryClientPenalizePeerCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientPenalizePeerCall) Do(f func(context.Context, *PenalizePeerRequest, ...grpc.CallOption) (*emptypb.Empty, error)) *MockSentryClientPenalizePeerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientPenalizePeerCall) DoAndReturn(f func(context.Context, *PenalizePeerRequest, ...grpc.CallOption) (*emptypb.Empty, error)) *MockSentryClientPenalizePeerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageById mocks base method. +func (m *MockSentryClient) SendMessageById(arg0 context.Context, arg1 *SendMessageByIdRequest, arg2 ...grpc.CallOption) (*SentPeers, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SendMessageById", varargs...) + ret0, _ := ret[0].(*SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageById indicates an expected call of SendMessageById. +func (mr *MockSentryClientMockRecorder) SendMessageById(arg0, arg1 any, arg2 ...any) *MockSentryClientSendMessageByIdCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageById", reflect.TypeOf((*MockSentryClient)(nil).SendMessageById), varargs...) + return &MockSentryClientSendMessageByIdCall{Call: call} +} + +// MockSentryClientSendMessageByIdCall wrap *gomock.Call +type MockSentryClientSendMessageByIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSendMessageByIdCall) Return(arg0 *SentPeers, arg1 error) *MockSentryClientSendMessageByIdCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSendMessageByIdCall) Do(f func(context.Context, *SendMessageByIdRequest, ...grpc.CallOption) (*SentPeers, error)) *MockSentryClientSendMessageByIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSendMessageByIdCall) DoAndReturn(f func(context.Context, *SendMessageByIdRequest, ...grpc.CallOption) (*SentPeers, error)) *MockSentryClientSendMessageByIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageByMinBlock mocks base method. +func (m *MockSentryClient) SendMessageByMinBlock(arg0 context.Context, arg1 *SendMessageByMinBlockRequest, arg2 ...grpc.CallOption) (*SentPeers, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SendMessageByMinBlock", varargs...) + ret0, _ := ret[0].(*SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageByMinBlock indicates an expected call of SendMessageByMinBlock. +func (mr *MockSentryClientMockRecorder) SendMessageByMinBlock(arg0, arg1 any, arg2 ...any) *MockSentryClientSendMessageByMinBlockCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageByMinBlock", reflect.TypeOf((*MockSentryClient)(nil).SendMessageByMinBlock), varargs...) + return &MockSentryClientSendMessageByMinBlockCall{Call: call} +} + +// MockSentryClientSendMessageByMinBlockCall wrap *gomock.Call +type MockSentryClientSendMessageByMinBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSendMessageByMinBlockCall) Return(arg0 *SentPeers, arg1 error) *MockSentryClientSendMessageByMinBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSendMessageByMinBlockCall) Do(f func(context.Context, *SendMessageByMinBlockRequest, ...grpc.CallOption) (*SentPeers, error)) *MockSentryClientSendMessageByMinBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSendMessageByMinBlockCall) DoAndReturn(f func(context.Context, *SendMessageByMinBlockRequest, ...grpc.CallOption) (*SentPeers, error)) *MockSentryClientSendMessageByMinBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageToAll mocks base method. +func (m *MockSentryClient) SendMessageToAll(arg0 context.Context, arg1 *OutboundMessageData, arg2 ...grpc.CallOption) (*SentPeers, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SendMessageToAll", varargs...) + ret0, _ := ret[0].(*SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageToAll indicates an expected call of SendMessageToAll. +func (mr *MockSentryClientMockRecorder) SendMessageToAll(arg0, arg1 any, arg2 ...any) *MockSentryClientSendMessageToAllCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageToAll", reflect.TypeOf((*MockSentryClient)(nil).SendMessageToAll), varargs...) + return &MockSentryClientSendMessageToAllCall{Call: call} +} + +// MockSentryClientSendMessageToAllCall wrap *gomock.Call +type MockSentryClientSendMessageToAllCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSendMessageToAllCall) Return(arg0 *SentPeers, arg1 error) *MockSentryClientSendMessageToAllCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSendMessageToAllCall) Do(f func(context.Context, *OutboundMessageData, ...grpc.CallOption) (*SentPeers, error)) *MockSentryClientSendMessageToAllCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSendMessageToAllCall) DoAndReturn(f func(context.Context, *OutboundMessageData, ...grpc.CallOption) (*SentPeers, error)) *MockSentryClientSendMessageToAllCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageToRandomPeers mocks base method. +func (m *MockSentryClient) SendMessageToRandomPeers(arg0 context.Context, arg1 *SendMessageToRandomPeersRequest, arg2 ...grpc.CallOption) (*SentPeers, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SendMessageToRandomPeers", varargs...) + ret0, _ := ret[0].(*SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageToRandomPeers indicates an expected call of SendMessageToRandomPeers. +func (mr *MockSentryClientMockRecorder) SendMessageToRandomPeers(arg0, arg1 any, arg2 ...any) *MockSentryClientSendMessageToRandomPeersCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageToRandomPeers", reflect.TypeOf((*MockSentryClient)(nil).SendMessageToRandomPeers), varargs...) + return &MockSentryClientSendMessageToRandomPeersCall{Call: call} +} + +// MockSentryClientSendMessageToRandomPeersCall wrap *gomock.Call +type MockSentryClientSendMessageToRandomPeersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSendMessageToRandomPeersCall) Return(arg0 *SentPeers, arg1 error) *MockSentryClientSendMessageToRandomPeersCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSendMessageToRandomPeersCall) Do(f func(context.Context, *SendMessageToRandomPeersRequest, ...grpc.CallOption) (*SentPeers, error)) *MockSentryClientSendMessageToRandomPeersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSendMessageToRandomPeersCall) DoAndReturn(f func(context.Context, *SendMessageToRandomPeersRequest, ...grpc.CallOption) (*SentPeers, error)) *MockSentryClientSendMessageToRandomPeersCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SetStatus mocks base method. +func (m *MockSentryClient) SetStatus(arg0 context.Context, arg1 *StatusData, arg2 ...grpc.CallOption) (*SetStatusReply, error) { + m.ctrl.T.Helper() + varargs := []any{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SetStatus", varargs...) + ret0, _ := ret[0].(*SetStatusReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetStatus indicates an expected call of SetStatus. +func (mr *MockSentryClientMockRecorder) SetStatus(arg0, arg1 any, arg2 ...any) *MockSentryClientSetStatusCall { + mr.mock.ctrl.T.Helper() + varargs := append([]any{arg0, arg1}, arg2...) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetStatus", reflect.TypeOf((*MockSentryClient)(nil).SetStatus), varargs...) + return &MockSentryClientSetStatusCall{Call: call} +} + +// MockSentryClientSetStatusCall wrap *gomock.Call +type MockSentryClientSetStatusCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryClientSetStatusCall) Return(arg0 *SetStatusReply, arg1 error) *MockSentryClientSetStatusCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryClientSetStatusCall) Do(f func(context.Context, *StatusData, ...grpc.CallOption) (*SetStatusReply, error)) *MockSentryClientSetStatusCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryClientSetStatusCall) DoAndReturn(f func(context.Context, *StatusData, ...grpc.CallOption) (*SetStatusReply, error)) *MockSentryClientSetStatusCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/erigon-lib/gointerfaces/sentry/sentry_server_mock.go b/erigon-lib/gointerfaces/sentry/sentry_server_mock.go new file mode 100644 index 00000000000..b8b7c87039c --- /dev/null +++ b/erigon-lib/gointerfaces/sentry/sentry_server_mock.go @@ -0,0 +1,661 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon-lib/gointerfaces/sentry (interfaces: SentryServer) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./sentry_server_mock.go -package=sentry . SentryServer +// + +// Package sentry is a generated GoMock package. +package sentry + +import ( + context "context" + reflect "reflect" + + types "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + gomock "go.uber.org/mock/gomock" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// MockSentryServer is a mock of SentryServer interface. +type MockSentryServer struct { + ctrl *gomock.Controller + recorder *MockSentryServerMockRecorder +} + +// MockSentryServerMockRecorder is the mock recorder for MockSentryServer. +type MockSentryServerMockRecorder struct { + mock *MockSentryServer +} + +// NewMockSentryServer creates a new mock instance. +func NewMockSentryServer(ctrl *gomock.Controller) *MockSentryServer { + mock := &MockSentryServer{ctrl: ctrl} + mock.recorder = &MockSentryServerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSentryServer) EXPECT() *MockSentryServerMockRecorder { + return m.recorder +} + +// AddPeer mocks base method. +func (m *MockSentryServer) AddPeer(arg0 context.Context, arg1 *AddPeerRequest) (*AddPeerReply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddPeer", arg0, arg1) + ret0, _ := ret[0].(*AddPeerReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddPeer indicates an expected call of AddPeer. +func (mr *MockSentryServerMockRecorder) AddPeer(arg0, arg1 any) *MockSentryServerAddPeerCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddPeer", reflect.TypeOf((*MockSentryServer)(nil).AddPeer), arg0, arg1) + return &MockSentryServerAddPeerCall{Call: call} +} + +// MockSentryServerAddPeerCall wrap *gomock.Call +type MockSentryServerAddPeerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerAddPeerCall) Return(arg0 *AddPeerReply, arg1 error) *MockSentryServerAddPeerCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerAddPeerCall) Do(f func(context.Context, *AddPeerRequest) (*AddPeerReply, error)) *MockSentryServerAddPeerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerAddPeerCall) DoAndReturn(f func(context.Context, *AddPeerRequest) (*AddPeerReply, error)) *MockSentryServerAddPeerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// HandShake mocks base method. +func (m *MockSentryServer) HandShake(arg0 context.Context, arg1 *emptypb.Empty) (*HandShakeReply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HandShake", arg0, arg1) + ret0, _ := ret[0].(*HandShakeReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// HandShake indicates an expected call of HandShake. +func (mr *MockSentryServerMockRecorder) HandShake(arg0, arg1 any) *MockSentryServerHandShakeCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HandShake", reflect.TypeOf((*MockSentryServer)(nil).HandShake), arg0, arg1) + return &MockSentryServerHandShakeCall{Call: call} +} + +// MockSentryServerHandShakeCall wrap *gomock.Call +type MockSentryServerHandShakeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerHandShakeCall) Return(arg0 *HandShakeReply, arg1 error) *MockSentryServerHandShakeCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerHandShakeCall) Do(f func(context.Context, *emptypb.Empty) (*HandShakeReply, error)) *MockSentryServerHandShakeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerHandShakeCall) DoAndReturn(f func(context.Context, *emptypb.Empty) (*HandShakeReply, error)) *MockSentryServerHandShakeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Messages mocks base method. +func (m *MockSentryServer) Messages(arg0 *MessagesRequest, arg1 Sentry_MessagesServer) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Messages", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// Messages indicates an expected call of Messages. +func (mr *MockSentryServerMockRecorder) Messages(arg0, arg1 any) *MockSentryServerMessagesCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Messages", reflect.TypeOf((*MockSentryServer)(nil).Messages), arg0, arg1) + return &MockSentryServerMessagesCall{Call: call} +} + +// MockSentryServerMessagesCall wrap *gomock.Call +type MockSentryServerMessagesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerMessagesCall) Return(arg0 error) *MockSentryServerMessagesCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerMessagesCall) Do(f func(*MessagesRequest, Sentry_MessagesServer) error) *MockSentryServerMessagesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerMessagesCall) DoAndReturn(f func(*MessagesRequest, Sentry_MessagesServer) error) *MockSentryServerMessagesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// NodeInfo mocks base method. +func (m *MockSentryServer) NodeInfo(arg0 context.Context, arg1 *emptypb.Empty) (*types.NodeInfoReply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NodeInfo", arg0, arg1) + ret0, _ := ret[0].(*types.NodeInfoReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NodeInfo indicates an expected call of NodeInfo. +func (mr *MockSentryServerMockRecorder) NodeInfo(arg0, arg1 any) *MockSentryServerNodeInfoCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeInfo", reflect.TypeOf((*MockSentryServer)(nil).NodeInfo), arg0, arg1) + return &MockSentryServerNodeInfoCall{Call: call} +} + +// MockSentryServerNodeInfoCall wrap *gomock.Call +type MockSentryServerNodeInfoCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerNodeInfoCall) Return(arg0 *types.NodeInfoReply, arg1 error) *MockSentryServerNodeInfoCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerNodeInfoCall) Do(f func(context.Context, *emptypb.Empty) (*types.NodeInfoReply, error)) *MockSentryServerNodeInfoCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerNodeInfoCall) DoAndReturn(f func(context.Context, *emptypb.Empty) (*types.NodeInfoReply, error)) *MockSentryServerNodeInfoCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerById mocks base method. +func (m *MockSentryServer) PeerById(arg0 context.Context, arg1 *PeerByIdRequest) (*PeerByIdReply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PeerById", arg0, arg1) + ret0, _ := ret[0].(*PeerByIdReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerById indicates an expected call of PeerById. +func (mr *MockSentryServerMockRecorder) PeerById(arg0, arg1 any) *MockSentryServerPeerByIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerById", reflect.TypeOf((*MockSentryServer)(nil).PeerById), arg0, arg1) + return &MockSentryServerPeerByIdCall{Call: call} +} + +// MockSentryServerPeerByIdCall wrap *gomock.Call +type MockSentryServerPeerByIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerPeerByIdCall) Return(arg0 *PeerByIdReply, arg1 error) *MockSentryServerPeerByIdCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerPeerByIdCall) Do(f func(context.Context, *PeerByIdRequest) (*PeerByIdReply, error)) *MockSentryServerPeerByIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerPeerByIdCall) DoAndReturn(f func(context.Context, *PeerByIdRequest) (*PeerByIdReply, error)) *MockSentryServerPeerByIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerCount mocks base method. +func (m *MockSentryServer) PeerCount(arg0 context.Context, arg1 *PeerCountRequest) (*PeerCountReply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PeerCount", arg0, arg1) + ret0, _ := ret[0].(*PeerCountReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerCount indicates an expected call of PeerCount. +func (mr *MockSentryServerMockRecorder) PeerCount(arg0, arg1 any) *MockSentryServerPeerCountCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerCount", reflect.TypeOf((*MockSentryServer)(nil).PeerCount), arg0, arg1) + return &MockSentryServerPeerCountCall{Call: call} +} + +// MockSentryServerPeerCountCall wrap *gomock.Call +type MockSentryServerPeerCountCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerPeerCountCall) Return(arg0 *PeerCountReply, arg1 error) *MockSentryServerPeerCountCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerPeerCountCall) Do(f func(context.Context, *PeerCountRequest) (*PeerCountReply, error)) *MockSentryServerPeerCountCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerPeerCountCall) DoAndReturn(f func(context.Context, *PeerCountRequest) (*PeerCountReply, error)) *MockSentryServerPeerCountCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerEvents mocks base method. +func (m *MockSentryServer) PeerEvents(arg0 *PeerEventsRequest, arg1 Sentry_PeerEventsServer) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PeerEvents", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// PeerEvents indicates an expected call of PeerEvents. +func (mr *MockSentryServerMockRecorder) PeerEvents(arg0, arg1 any) *MockSentryServerPeerEventsCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerEvents", reflect.TypeOf((*MockSentryServer)(nil).PeerEvents), arg0, arg1) + return &MockSentryServerPeerEventsCall{Call: call} +} + +// MockSentryServerPeerEventsCall wrap *gomock.Call +type MockSentryServerPeerEventsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerPeerEventsCall) Return(arg0 error) *MockSentryServerPeerEventsCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerPeerEventsCall) Do(f func(*PeerEventsRequest, Sentry_PeerEventsServer) error) *MockSentryServerPeerEventsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerPeerEventsCall) DoAndReturn(f func(*PeerEventsRequest, Sentry_PeerEventsServer) error) *MockSentryServerPeerEventsCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerMinBlock mocks base method. +func (m *MockSentryServer) PeerMinBlock(arg0 context.Context, arg1 *PeerMinBlockRequest) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PeerMinBlock", arg0, arg1) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PeerMinBlock indicates an expected call of PeerMinBlock. +func (mr *MockSentryServerMockRecorder) PeerMinBlock(arg0, arg1 any) *MockSentryServerPeerMinBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerMinBlock", reflect.TypeOf((*MockSentryServer)(nil).PeerMinBlock), arg0, arg1) + return &MockSentryServerPeerMinBlockCall{Call: call} +} + +// MockSentryServerPeerMinBlockCall wrap *gomock.Call +type MockSentryServerPeerMinBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerPeerMinBlockCall) Return(arg0 *emptypb.Empty, arg1 error) *MockSentryServerPeerMinBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerPeerMinBlockCall) Do(f func(context.Context, *PeerMinBlockRequest) (*emptypb.Empty, error)) *MockSentryServerPeerMinBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerPeerMinBlockCall) DoAndReturn(f func(context.Context, *PeerMinBlockRequest) (*emptypb.Empty, error)) *MockSentryServerPeerMinBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Peers mocks base method. +func (m *MockSentryServer) Peers(arg0 context.Context, arg1 *emptypb.Empty) (*PeersReply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Peers", arg0, arg1) + ret0, _ := ret[0].(*PeersReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Peers indicates an expected call of Peers. +func (mr *MockSentryServerMockRecorder) Peers(arg0, arg1 any) *MockSentryServerPeersCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Peers", reflect.TypeOf((*MockSentryServer)(nil).Peers), arg0, arg1) + return &MockSentryServerPeersCall{Call: call} +} + +// MockSentryServerPeersCall wrap *gomock.Call +type MockSentryServerPeersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerPeersCall) Return(arg0 *PeersReply, arg1 error) *MockSentryServerPeersCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerPeersCall) Do(f func(context.Context, *emptypb.Empty) (*PeersReply, error)) *MockSentryServerPeersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerPeersCall) DoAndReturn(f func(context.Context, *emptypb.Empty) (*PeersReply, error)) *MockSentryServerPeersCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PenalizePeer mocks base method. +func (m *MockSentryServer) PenalizePeer(arg0 context.Context, arg1 *PenalizePeerRequest) (*emptypb.Empty, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PenalizePeer", arg0, arg1) + ret0, _ := ret[0].(*emptypb.Empty) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PenalizePeer indicates an expected call of PenalizePeer. +func (mr *MockSentryServerMockRecorder) PenalizePeer(arg0, arg1 any) *MockSentryServerPenalizePeerCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PenalizePeer", reflect.TypeOf((*MockSentryServer)(nil).PenalizePeer), arg0, arg1) + return &MockSentryServerPenalizePeerCall{Call: call} +} + +// MockSentryServerPenalizePeerCall wrap *gomock.Call +type MockSentryServerPenalizePeerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerPenalizePeerCall) Return(arg0 *emptypb.Empty, arg1 error) *MockSentryServerPenalizePeerCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerPenalizePeerCall) Do(f func(context.Context, *PenalizePeerRequest) (*emptypb.Empty, error)) *MockSentryServerPenalizePeerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerPenalizePeerCall) DoAndReturn(f func(context.Context, *PenalizePeerRequest) (*emptypb.Empty, error)) *MockSentryServerPenalizePeerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageById mocks base method. +func (m *MockSentryServer) SendMessageById(arg0 context.Context, arg1 *SendMessageByIdRequest) (*SentPeers, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendMessageById", arg0, arg1) + ret0, _ := ret[0].(*SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageById indicates an expected call of SendMessageById. +func (mr *MockSentryServerMockRecorder) SendMessageById(arg0, arg1 any) *MockSentryServerSendMessageByIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageById", reflect.TypeOf((*MockSentryServer)(nil).SendMessageById), arg0, arg1) + return &MockSentryServerSendMessageByIdCall{Call: call} +} + +// MockSentryServerSendMessageByIdCall wrap *gomock.Call +type MockSentryServerSendMessageByIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerSendMessageByIdCall) Return(arg0 *SentPeers, arg1 error) *MockSentryServerSendMessageByIdCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerSendMessageByIdCall) Do(f func(context.Context, *SendMessageByIdRequest) (*SentPeers, error)) *MockSentryServerSendMessageByIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerSendMessageByIdCall) DoAndReturn(f func(context.Context, *SendMessageByIdRequest) (*SentPeers, error)) *MockSentryServerSendMessageByIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageByMinBlock mocks base method. +func (m *MockSentryServer) SendMessageByMinBlock(arg0 context.Context, arg1 *SendMessageByMinBlockRequest) (*SentPeers, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendMessageByMinBlock", arg0, arg1) + ret0, _ := ret[0].(*SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageByMinBlock indicates an expected call of SendMessageByMinBlock. +func (mr *MockSentryServerMockRecorder) SendMessageByMinBlock(arg0, arg1 any) *MockSentryServerSendMessageByMinBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageByMinBlock", reflect.TypeOf((*MockSentryServer)(nil).SendMessageByMinBlock), arg0, arg1) + return &MockSentryServerSendMessageByMinBlockCall{Call: call} +} + +// MockSentryServerSendMessageByMinBlockCall wrap *gomock.Call +type MockSentryServerSendMessageByMinBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerSendMessageByMinBlockCall) Return(arg0 *SentPeers, arg1 error) *MockSentryServerSendMessageByMinBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerSendMessageByMinBlockCall) Do(f func(context.Context, *SendMessageByMinBlockRequest) (*SentPeers, error)) *MockSentryServerSendMessageByMinBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerSendMessageByMinBlockCall) DoAndReturn(f func(context.Context, *SendMessageByMinBlockRequest) (*SentPeers, error)) *MockSentryServerSendMessageByMinBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageToAll mocks base method. +func (m *MockSentryServer) SendMessageToAll(arg0 context.Context, arg1 *OutboundMessageData) (*SentPeers, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendMessageToAll", arg0, arg1) + ret0, _ := ret[0].(*SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageToAll indicates an expected call of SendMessageToAll. +func (mr *MockSentryServerMockRecorder) SendMessageToAll(arg0, arg1 any) *MockSentryServerSendMessageToAllCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageToAll", reflect.TypeOf((*MockSentryServer)(nil).SendMessageToAll), arg0, arg1) + return &MockSentryServerSendMessageToAllCall{Call: call} +} + +// MockSentryServerSendMessageToAllCall wrap *gomock.Call +type MockSentryServerSendMessageToAllCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerSendMessageToAllCall) Return(arg0 *SentPeers, arg1 error) *MockSentryServerSendMessageToAllCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerSendMessageToAllCall) Do(f func(context.Context, *OutboundMessageData) (*SentPeers, error)) *MockSentryServerSendMessageToAllCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerSendMessageToAllCall) DoAndReturn(f func(context.Context, *OutboundMessageData) (*SentPeers, error)) *MockSentryServerSendMessageToAllCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SendMessageToRandomPeers mocks base method. +func (m *MockSentryServer) SendMessageToRandomPeers(arg0 context.Context, arg1 *SendMessageToRandomPeersRequest) (*SentPeers, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendMessageToRandomPeers", arg0, arg1) + ret0, _ := ret[0].(*SentPeers) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SendMessageToRandomPeers indicates an expected call of SendMessageToRandomPeers. +func (mr *MockSentryServerMockRecorder) SendMessageToRandomPeers(arg0, arg1 any) *MockSentryServerSendMessageToRandomPeersCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMessageToRandomPeers", reflect.TypeOf((*MockSentryServer)(nil).SendMessageToRandomPeers), arg0, arg1) + return &MockSentryServerSendMessageToRandomPeersCall{Call: call} +} + +// MockSentryServerSendMessageToRandomPeersCall wrap *gomock.Call +type MockSentryServerSendMessageToRandomPeersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerSendMessageToRandomPeersCall) Return(arg0 *SentPeers, arg1 error) *MockSentryServerSendMessageToRandomPeersCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerSendMessageToRandomPeersCall) Do(f func(context.Context, *SendMessageToRandomPeersRequest) (*SentPeers, error)) *MockSentryServerSendMessageToRandomPeersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerSendMessageToRandomPeersCall) DoAndReturn(f func(context.Context, *SendMessageToRandomPeersRequest) (*SentPeers, error)) *MockSentryServerSendMessageToRandomPeersCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// SetStatus mocks base method. +func (m *MockSentryServer) SetStatus(arg0 context.Context, arg1 *StatusData) (*SetStatusReply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetStatus", arg0, arg1) + ret0, _ := ret[0].(*SetStatusReply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetStatus indicates an expected call of SetStatus. +func (mr *MockSentryServerMockRecorder) SetStatus(arg0, arg1 any) *MockSentryServerSetStatusCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetStatus", reflect.TypeOf((*MockSentryServer)(nil).SetStatus), arg0, arg1) + return &MockSentryServerSetStatusCall{Call: call} +} + +// MockSentryServerSetStatusCall wrap *gomock.Call +type MockSentryServerSetStatusCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServerSetStatusCall) Return(arg0 *SetStatusReply, arg1 error) *MockSentryServerSetStatusCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServerSetStatusCall) Do(f func(context.Context, *StatusData) (*SetStatusReply, error)) *MockSentryServerSetStatusCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServerSetStatusCall) DoAndReturn(f func(context.Context, *StatusData) (*SetStatusReply, error)) *MockSentryServerSetStatusCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// mustEmbedUnimplementedSentryServer mocks base method. +func (m *MockSentryServer) mustEmbedUnimplementedSentryServer() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "mustEmbedUnimplementedSentryServer") +} + +// mustEmbedUnimplementedSentryServer indicates an expected call of mustEmbedUnimplementedSentryServer. +func (mr *MockSentryServerMockRecorder) mustEmbedUnimplementedSentryServer() *MockSentryServermustEmbedUnimplementedSentryServerCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "mustEmbedUnimplementedSentryServer", reflect.TypeOf((*MockSentryServer)(nil).mustEmbedUnimplementedSentryServer)) + return &MockSentryServermustEmbedUnimplementedSentryServerCall{Call: call} +} + +// MockSentryServermustEmbedUnimplementedSentryServerCall wrap *gomock.Call +type MockSentryServermustEmbedUnimplementedSentryServerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSentryServermustEmbedUnimplementedSentryServerCall) Return() *MockSentryServermustEmbedUnimplementedSentryServerCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSentryServermustEmbedUnimplementedSentryServerCall) Do(f func()) *MockSentryServermustEmbedUnimplementedSentryServerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSentryServermustEmbedUnimplementedSentryServerCall) DoAndReturn(f func()) *MockSentryServermustEmbedUnimplementedSentryServerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/erigon-lib/gointerfaces/test_util.go b/erigon-lib/gointerfaces/test_util.go deleted file mode 100644 index 25e9b45751d..00000000000 --- a/erigon-lib/gointerfaces/test_util.go +++ /dev/null @@ -1,4 +0,0 @@ -package gointerfaces - -//go:generate moq -stub -out ./sentry/mocks.go ./sentry SentryServer SentryClient -//go:generate moq -stub -out ./remote/mocks.go ./remote KVClient KV_StateChangesClient diff --git a/turbo/backup/backup.go b/erigon-lib/kv/backup/backup.go similarity index 100% rename from turbo/backup/backup.go rename to erigon-lib/kv/backup/backup.go diff --git a/erigon-lib/kv/bitmapdb/fixed_size.go b/erigon-lib/kv/bitmapdb/fixed_size.go deleted file mode 100644 index 97bc501b7e7..00000000000 --- a/erigon-lib/kv/bitmapdb/fixed_size.go +++ /dev/null @@ -1,320 +0,0 @@ -/* -Copyright 2022 Erigon contributors - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package bitmapdb - -import ( - "bufio" - "encoding/binary" - "fmt" - "os" - "path/filepath" - "reflect" - "time" - "unsafe" - - "github.com/c2h5oh/datasize" - mmap2 "github.com/edsrzf/mmap-go" - "github.com/ledgerwatch/log/v3" -) - -type FixedSizeBitmaps struct { - f *os.File - filePath, fileName string - - data []uint64 - metaData []byte - amount uint64 - version uint8 - - m mmap2.MMap - bitsPerBitmap int - size int - modTime time.Time -} - -func OpenFixedSizeBitmaps(filePath string, bitsPerBitmap int) (*FixedSizeBitmaps, error) { - _, fName := filepath.Split(filePath) - idx := &FixedSizeBitmaps{ - filePath: filePath, - fileName: fName, - bitsPerBitmap: bitsPerBitmap, - } - - var err error - idx.f, err = os.Open(filePath) - if err != nil { - return nil, fmt.Errorf("OpenFile: %w", err) - } - var stat os.FileInfo - if stat, err = idx.f.Stat(); err != nil { - return nil, err - } - idx.size = int(stat.Size()) - idx.modTime = stat.ModTime() - idx.m, err = mmap2.MapRegion(idx.f, idx.size, mmap2.RDONLY, 0, 0) - if err != nil { - return nil, err - } - idx.metaData = idx.m[:MetaHeaderSize] - idx.data = castToArrU64(idx.m[MetaHeaderSize:]) - - idx.version = idx.metaData[0] - idx.amount = binary.BigEndian.Uint64(idx.metaData[1 : 8+1]) - - return idx, nil -} - -func (bm *FixedSizeBitmaps) FileName() string { return bm.fileName } -func (bm *FixedSizeBitmaps) FilePath() string { return bm.filePath } -func (bm *FixedSizeBitmaps) Close() { - if bm.m != nil { - if err := bm.m.Unmap(); err != nil { - log.Trace("unmap", "err", err, "file", bm.FileName()) - } - bm.m = nil - } - if bm.f != nil { - if err := bm.f.Close(); err != nil { - log.Trace("close", "err", err, "file", bm.FileName()) - } - bm.f = nil - } -} - -func (bm *FixedSizeBitmaps) At(item uint64) (res []uint64, err error) { - if item > bm.amount { - return nil, fmt.Errorf("too big item number: %d > %d", item, bm.amount) - } - - n := bm.bitsPerBitmap * int(item) - blkFrom, bitFrom := n/64, n%64 - blkTo := (n+bm.bitsPerBitmap)/64 + 1 - bitTo := 64 - - var j uint64 - for i := blkFrom; i < blkTo; i++ { - if i == blkTo-1 { - bitTo = (n + bm.bitsPerBitmap) % 64 - } - for bit := bitFrom; bit < bitTo; bit++ { - if bm.data[i]&(1< bm.amount { - return 0, 0, false, false, fmt.Errorf("too big item number: %d > %d", item, bm.amount) - } - n := bm.bitsPerBitmap * int(item) - blkFrom, bitFrom := n/64, n%64 - blkTo := (n+bm.bitsPerBitmap)/64 + 1 - bitTo := 64 - - var j uint64 - for i := blkFrom; i < blkTo; i++ { - if i == blkTo-1 { - bitTo = (n + bm.bitsPerBitmap) % 64 - } - for bit := bitFrom; bit < bitTo; bit++ { - if bm.data[i]&(1<= after { - if !ok { - ok = true - fst = j - } else { - ok2 = true - snd = j - return - } - } - } - j++ - } - bitFrom = 0 - } - - return -} - -type FixedSizeBitmapsWriter struct { - f *os.File - - indexFile, tmpIdxFilePath string - data []uint64 // slice of correct size for the index to work with - metaData []byte - m mmap2.MMap - - version uint8 - amount uint64 - size int - bitsPerBitmap uint64 - - logger log.Logger - noFsync bool // fsync is enabled by default, but tests can manually disable -} - -const MetaHeaderSize = 64 - -func NewFixedSizeBitmapsWriter(indexFile string, bitsPerBitmap int, amount uint64, logger log.Logger) (*FixedSizeBitmapsWriter, error) { - pageSize := os.Getpagesize() - //TODO: use math.SafeMul() - bytesAmount := MetaHeaderSize + (bitsPerBitmap*int(amount))/8 - size := (bytesAmount/pageSize + 1) * pageSize // must be page-size-aligned - idx := &FixedSizeBitmapsWriter{ - indexFile: indexFile, - tmpIdxFilePath: indexFile + ".tmp", - bitsPerBitmap: uint64(bitsPerBitmap), - size: size, - amount: amount, - version: 1, - logger: logger, - } - - _ = os.Remove(idx.tmpIdxFilePath) - - var err error - idx.f, err = os.Create(idx.tmpIdxFilePath) - if err != nil { - return nil, err - } - - if err := growFileToSize(idx.f, idx.size); err != nil { - return nil, err - } - - idx.m, err = mmap2.MapRegion(idx.f, idx.size, mmap2.RDWR, 0, 0) - if err != nil { - return nil, err - } - - idx.metaData = idx.m[:MetaHeaderSize] - idx.data = castToArrU64(idx.m[MetaHeaderSize:]) - //if err := mmap.MadviseNormal(idx.m); err != nil { - // return nil, err - //} - idx.metaData[0] = idx.version - binary.BigEndian.PutUint64(idx.metaData[1:], idx.amount) - idx.amount = binary.BigEndian.Uint64(idx.metaData[1 : 8+1]) - - return idx, nil -} -func (w *FixedSizeBitmapsWriter) Close() { - if w.m != nil { - if err := w.m.Unmap(); err != nil { - log.Trace("unmap", "err", err, "file", w.f.Name()) - } - w.m = nil - } - if w.f != nil { - if err := w.f.Close(); err != nil { - log.Trace("close", "err", err, "file", w.f.Name()) - } - w.f = nil - } -} -func growFileToSize(f *os.File, size int) error { - pageSize := os.Getpagesize() - pages := size / pageSize - wr := bufio.NewWriterSize(f, int(4*datasize.MB)) - page := make([]byte, pageSize) - for i := 0; i < pages; i++ { - if _, err := wr.Write(page); err != nil { - return err - } - } - if err := wr.Flush(); err != nil { - return err - } - return nil -} - -// Create a []uint64 view of the file -func castToArrU64(in []byte) []uint64 { - var view []uint64 - header := (*reflect.SliceHeader)(unsafe.Pointer(&view)) - header.Data = (*reflect.SliceHeader)(unsafe.Pointer(&in)).Data - header.Len = len(in) / 8 - header.Cap = header.Len - return view -} - -func (w *FixedSizeBitmapsWriter) AddArray(item uint64, listOfValues []uint64) error { - if item > w.amount { - return fmt.Errorf("too big item number: %d > %d", item, w.amount) - } - offset := item * w.bitsPerBitmap - for _, v := range listOfValues { - if v > w.bitsPerBitmap { - return fmt.Errorf("too big value: %d > %d", v, w.bitsPerBitmap) - } - n := offset + v - blkAt, bitAt := int(n/64), int(n%64) - if blkAt > len(w.data) { - return fmt.Errorf("too big value: %d, %d, max: %d", item, listOfValues, len(w.data)) - } - w.data[blkAt] |= (1 << bitAt) - } - return nil -} - -func (w *FixedSizeBitmapsWriter) Build() error { - if err := w.m.Flush(); err != nil { - return err - } - if err := w.fsync(); err != nil { - return err - } - - if err := w.m.Unmap(); err != nil { - return err - } - w.m = nil - - if err := w.f.Close(); err != nil { - return err - } - w.f = nil - - _ = os.Remove(w.indexFile) - if err := os.Rename(w.tmpIdxFilePath, w.indexFile); err != nil { - return err - } - return nil -} - -func (w *FixedSizeBitmapsWriter) DisableFsync() { w.noFsync = true } - -// fsync - other processes/goroutines must see only "fully-complete" (valid) files. No partial-writes. -// To achieve it: write to .tmp file then `rename` when file is ready. -// Machine may power-off right after `rename` - it means `fsync` must be before `rename` -func (w *FixedSizeBitmapsWriter) fsync() error { - if w.noFsync { - return nil - } - if err := w.f.Sync(); err != nil { - w.logger.Warn("couldn't fsync", "err", err, "file", w.tmpIdxFilePath) - return err - } - return nil -} diff --git a/erigon-lib/kv/bitmapdb/fixed_size_test.go b/erigon-lib/kv/bitmapdb/fixed_size_test.go deleted file mode 100644 index 9f513c5833b..00000000000 --- a/erigon-lib/kv/bitmapdb/fixed_size_test.go +++ /dev/null @@ -1,108 +0,0 @@ -/* - Copyright 2021 Erigon contributors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package bitmapdb - -import ( - "os" - "path/filepath" - "testing" - - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/require" -) - -func TestFixedSizeBitmaps(t *testing.T) { - - tmpDir, require := t.TempDir(), require.New(t) - must := require.NoError - idxPath := filepath.Join(tmpDir, "idx.tmp") - wr, err := NewFixedSizeBitmapsWriter(idxPath, 14, 7, log.New()) - require.NoError(err) - defer wr.Close() - - must(wr.AddArray(0, []uint64{3, 9, 11})) - must(wr.AddArray(1, []uint64{1, 2, 3})) - must(wr.AddArray(2, []uint64{4, 8, 13})) - must(wr.AddArray(3, []uint64{1, 13})) - must(wr.AddArray(4, []uint64{1, 13})) - must(wr.AddArray(5, []uint64{1, 13})) - must(wr.AddArray(6, []uint64{0, 9, 13})) - must(wr.AddArray(7, []uint64{7})) - - require.Error(wr.AddArray(8, []uint64{8})) - err = wr.Build() - require.NoError(err) - - bm, err := OpenFixedSizeBitmaps(idxPath, 14) - require.NoError(err) - defer bm.Close() - - at := func(item uint64) []uint64 { - n, err := bm.At(item) - require.NoError(err) - return n - } - - require.Equal([]uint64{3, 9, 11}, at(0)) - require.Equal([]uint64{1, 2, 3}, at(1)) - require.Equal([]uint64{4, 8, 13}, at(2)) - require.Equal([]uint64{1, 13}, at(3)) - require.Equal([]uint64{1, 13}, at(4)) - require.Equal([]uint64{1, 13}, at(5)) - require.Equal([]uint64{0, 9, 13}, at(6)) - require.Equal([]uint64{7}, at(7)) - - fst, snd, ok, ok2, err := bm.First2At(7, 0) - require.NoError(err) - require.Equal(uint64(7), fst) - require.Equal(uint64(0), snd) - require.Equal(true, ok) - require.Equal(false, ok2) - - fst, snd, ok, ok2, err = bm.First2At(2, 8) - require.NoError(err) - require.Equal(uint64(8), fst) - require.Equal(uint64(13), snd) - require.Equal(true, ok) - require.Equal(true, ok2) - - fst, snd, ok, ok2, err = bm.First2At(2, 9) - require.NoError(err) - require.Equal(uint64(13), fst) - require.Equal(uint64(0), snd) - require.Equal(true, ok) - require.Equal(false, ok2) - - _, err = bm.At(8) - require.Error(err) -} - -func TestPageAlined(t *testing.T) { - tmpDir, require := t.TempDir(), require.New(t) - idxPath := filepath.Join(tmpDir, "idx.tmp") - - bm2, err := NewFixedSizeBitmapsWriter(idxPath, 128, 100, log.New()) - require.NoError(err) - require.Equal((128/8*100/os.Getpagesize()+1)*os.Getpagesize(), bm2.size) - defer bm2.Close() - bm2.Close() - - bm3, err := NewFixedSizeBitmapsWriter(idxPath, 128, 1000, log.New()) - require.NoError(err) - require.Equal((128/8*1000/os.Getpagesize()+1)*os.Getpagesize(), bm3.size) - defer bm3.Close() -} diff --git a/erigon-lib/kv/iter/iter.go b/erigon-lib/kv/iter/iter.go index d722caed15e..64c825f1d39 100644 --- a/erigon-lib/kv/iter/iter.go +++ b/erigon-lib/kv/iter/iter.go @@ -18,10 +18,10 @@ package iter import ( "bytes" + "slices" "github.com/ledgerwatch/erigon-lib/kv/order" "golang.org/x/exp/constraints" - "golang.org/x/exp/slices" ) type Closer interface { diff --git a/erigon-lib/kv/kv_interface.go b/erigon-lib/kv/kv_interface.go index 852e08601f6..5a02dc3cd49 100644 --- a/erigon-lib/kv/kv_interface.go +++ b/erigon-lib/kv/kv_interface.go @@ -29,12 +29,12 @@ import ( //Variables Naming: // tx - Database Transaction -// txn - Ethereum Transaction (and TxNum - is also number of Etherum Transaction) -// blockNum - Ethereum block number - same across all nodes. blockID - auto-increment ID - which can be differrent across all nodes +// txn - Ethereum Transaction (and TxNum - is also number of Ethereum Transaction) +// blockNum - Ethereum block number - same across all nodes. blockID - auto-increment ID - which can be different across all nodes // txNum/txID - same // RoTx - Read-Only Database Transaction. RwTx - read-write // k, v - key, value -// ts - TimeStamp. Usually it's Etherum's TransactionNumber (auto-increment ID). Or BlockNumber. +// ts - TimeStamp. Usually it's Ethereum's TransactionNumber (auto-increment ID). Or BlockNumber. // Cursor - low-level mdbx-tide api to navigate over Table // Iter - high-level iterator-like api over Table/InvertedIndex/History/Domain. Has less features than Cursor. See package `iter`. @@ -60,11 +60,11 @@ import ( // // MediumLevel: // 1. TemporalDB - abstracting DB+Snapshots. Target is: -// - provide 'time-travel' API for data: consistan snapshot of data as of given Timestamp. +// - provide 'time-travel' API for data: consistent snapshot of data as of given Timestamp. // - auto-close iterators on Commit/Rollback -// - auto-open/close agg.MakeContext() on Begin/Commit/Rollback +// - auto-open/close agg.BeginFilesRo() on Begin/Commit/Rollback // - to keep DB small - only for Hot/Recent data (can be update/delete by re-org). -// - And TemporalRoTx/TemporalRwTx actaully open Read-Only files view (MakeContext) - no concept of "Read-Write view of snapshot files". +// - And TemporalRoTx/TemporalRwTx actually open Read-Only files view (BeginFilesRo) - no concept of "Read-Write view of snapshot files". // - using next entities: // - InvertedIndex: supports range-scans // - History: can return value of key K as of given TimeStamp. Doesn't know about latest/current @@ -149,12 +149,13 @@ type DBVerbosityLvl int8 type Label uint8 const ( - ChainDB Label = 0 - TxPoolDB Label = 1 - SentryDB Label = 2 - ConsensusDB Label = 3 - DownloaderDB Label = 4 - InMem Label = 5 + ChainDB Label = 0 + TxPoolDB Label = 1 + SentryDB Label = 2 + ConsensusDB Label = 3 + DownloaderDB Label = 4 + InMem Label = 5 + DiagnosticsDB Label = 6 ) func (l Label) String() string { @@ -171,6 +172,8 @@ func (l Label) String() string { return "downloader" case InMem: return "inMem" + case DiagnosticsDB: + return "diagnostics" default: return "unknown" } @@ -189,6 +192,8 @@ func UnmarshalLabel(s string) Label { return DownloaderDB case "inMem": return InMem + case "diagnostics": + return DiagnosticsDB default: panic(fmt.Sprintf("unexpected label: %s", s)) } diff --git a/erigon-lib/kv/mdbx/kv_mdbx.go b/erigon-lib/kv/mdbx/kv_mdbx.go index 58ff2f4a00b..8d5bb64e7b8 100644 --- a/erigon-lib/kv/mdbx/kv_mdbx.go +++ b/erigon-lib/kv/mdbx/kv_mdbx.go @@ -20,6 +20,7 @@ import ( "bytes" "context" "encoding/binary" + "errors" "fmt" "os" "path/filepath" @@ -191,6 +192,10 @@ func (opts MdbxOpts) WriteMap() MdbxOpts { opts.flags |= mdbx.WriteMap return opts } +func (opts MdbxOpts) LifoReclaim() MdbxOpts { + opts.flags |= mdbx.LifoReclaim + return opts +} func (opts MdbxOpts) WriteMergeThreshold(v uint64) MdbxOpts { opts.mergeThreshold = v @@ -263,7 +268,7 @@ func (opts MdbxOpts) Open(ctx context.Context) (kv.RwDB, error) { if err != nil { return nil, err } - if opts.verbosity != -1 { + if opts.label == kv.ChainDB && opts.verbosity != -1 { err = env.SetDebug(mdbx.LogLvl(opts.verbosity), mdbx.DbgDoNotChange, mdbx.LoggerDoNotChange) // temporary disable error, because it works if call it 1 time, but returns error if call it twice in same process (what often happening in tests) if err != nil { return nil, fmt.Errorf("db verbosity set: %w", err) @@ -361,9 +366,9 @@ func (opts MdbxOpts) Open(ctx context.Context) (kv.RwDB, error) { opts.pageSize = uint64(in.PageSize) opts.mapSize = datasize.ByteSize(in.MapSize) if opts.label == kv.ChainDB { - opts.log.Info("[db] open", "lable", opts.label, "sizeLimit", opts.mapSize, "pageSize", opts.pageSize) + opts.log.Info("[db] open", "label", opts.label, "sizeLimit", opts.mapSize, "pageSize", opts.pageSize) } else { - opts.log.Debug("[db] open", "lable", opts.label, "sizeLimit", opts.mapSize, "pageSize", opts.pageSize) + opts.log.Debug("[db] open", "label", opts.label, "sizeLimit", opts.mapSize, "pageSize", opts.pageSize) } dirtyPagesLimit, err := env.GetOption(mdbx.OptTxnDpLimit) @@ -400,6 +405,9 @@ func (opts MdbxOpts) Open(ctx context.Context) (kv.RwDB, error) { txsAllDoneOnCloseCond: sync.NewCond(txsCountMutex), leakDetector: dbg.NewLeakDetector("db."+opts.label.String(), dbg.SlowTx()), + + MaxBatchSize: DefaultMaxBatchSize, + MaxBatchDelay: DefaultMaxBatchDelay, } customBuckets := opts.bucketsCfg(kv.ChaindataTablesCfg) @@ -474,8 +482,161 @@ type MdbxKV struct { txsAllDoneOnCloseCond *sync.Cond leakDetector *dbg.LeakDetector + + // MaxBatchSize is the maximum size of a batch. Default value is + // copied from DefaultMaxBatchSize in Open. + // + // If <=0, disables batching. + // + // Do not change concurrently with calls to Batch. + MaxBatchSize int + + // MaxBatchDelay is the maximum delay before a batch starts. + // Default value is copied from DefaultMaxBatchDelay in Open. + // + // If <=0, effectively disables batching. + // + // Do not change concurrently with calls to Batch. + MaxBatchDelay time.Duration + + batchMu sync.Mutex + batch *batch } +// Default values if not set in a DB instance. +const ( + DefaultMaxBatchSize int = 1000 + DefaultMaxBatchDelay = 10 * time.Millisecond +) + +type batch struct { + db *MdbxKV + timer *time.Timer + start sync.Once + calls []call +} + +type call struct { + fn func(kv.RwTx) error + err chan<- error +} + +// trigger runs the batch if it hasn't already been run. +func (b *batch) trigger() { + b.start.Do(b.run) +} + +// run performs the transactions in the batch and communicates results +// back to DB.Batch. +func (b *batch) run() { + b.db.batchMu.Lock() + b.timer.Stop() + // Make sure no new work is added to this batch, but don't break + // other batches. + if b.db.batch == b { + b.db.batch = nil + } + b.db.batchMu.Unlock() + +retry: + for len(b.calls) > 0 { + var failIdx = -1 + err := b.db.Update(context.Background(), func(tx kv.RwTx) error { + for i, c := range b.calls { + if err := safelyCall(c.fn, tx); err != nil { + failIdx = i + return err + } + } + return nil + }) + + if failIdx >= 0 { + // take the failing transaction out of the batch. it's + // safe to shorten b.calls here because db.batch no longer + // points to us, and we hold the mutex anyway. + c := b.calls[failIdx] + b.calls[failIdx], b.calls = b.calls[len(b.calls)-1], b.calls[:len(b.calls)-1] + // tell the submitter re-run it solo, continue with the rest of the batch + c.err <- trySolo + continue retry + } + + // pass success, or bolt internal errors, to all callers + for _, c := range b.calls { + c.err <- err + } + break retry + } +} + +// trySolo is a special sentinel error value used for signaling that a +// transaction function should be re-run. It should never be seen by +// callers. +var trySolo = errors.New("batch function returned an error and should be re-run solo") + +type panicked struct { + reason interface{} +} + +func (p panicked) Error() string { + if err, ok := p.reason.(error); ok { + return err.Error() + } + return fmt.Sprintf("panic: %v", p.reason) +} + +func safelyCall(fn func(tx kv.RwTx) error, tx kv.RwTx) (err error) { + defer func() { + if p := recover(); p != nil { + err = panicked{p} + } + }() + return fn(tx) +} + +// Batch is only useful when there are multiple goroutines calling it. +// It behaves similar to Update, except: +// +// 1. concurrent Batch calls can be combined into a single RwTx. +// +// 2. the function passed to Batch may be called multiple times, +// regardless of whether it returns error or not. +// +// This means that Batch function side effects must be idempotent and +// take permanent effect only after a successful return is seen in +// caller. +// +// Example of bad side-effects: print messages, mutate external counters `i++` +// +// The maximum batch size and delay can be adjusted with DB.MaxBatchSize +// and DB.MaxBatchDelay, respectively. +func (db *MdbxKV) Batch(fn func(tx kv.RwTx) error) error { + errCh := make(chan error, 1) + + db.batchMu.Lock() + if (db.batch == nil) || (db.batch != nil && len(db.batch.calls) >= db.MaxBatchSize) { + // There is no existing batch, or the existing batch is full; start a new one. + db.batch = &batch{ + db: db, + } + db.batch.timer = time.AfterFunc(db.MaxBatchDelay, db.batch.trigger) + } + db.batch.calls = append(db.batch.calls, call{fn: fn, err: errCh}) + if len(db.batch.calls) >= db.MaxBatchSize { + // wake up batch, it's ready to run + go db.batch.trigger() + } + db.batchMu.Unlock() + + err := <-errCh + if errors.Is(err, trySolo) { + err = db.Update(context.Background(), fn) + } + return err +} + +func (db *MdbxKV) Path() string { return db.opts.path } func (db *MdbxKV) PageSize() uint64 { return db.opts.pageSize } func (db *MdbxKV) ReadOnly() bool { return db.opts.HasFlag(mdbx.Readonly) } func (db *MdbxKV) Accede() bool { return db.opts.HasFlag(mdbx.Accede) } @@ -589,7 +750,7 @@ func (db *MdbxKV) BeginRo(ctx context.Context) (txn kv.Tx, err error) { // will return nil err if context is cancelled (may appear to acquire the semaphore) if semErr := db.roTxsLimiter.Acquire(ctx, 1); semErr != nil { db.trackTxEnd() - return nil, semErr + return nil, fmt.Errorf("mdbx.MdbxKV.BeginRo: roTxsLimiter error %w", semErr) } defer func() { @@ -651,14 +812,17 @@ func (db *MdbxKV) beginRw(ctx context.Context, flags uint) (txn kv.RwTx, err err type MdbxTx struct { tx *mdbx.Txn + id uint64 // set only if TRACE_TX=true db *MdbxKV - cursors map[uint64]*mdbx.Cursor - streams []kv.Closer statelessCursors map[string]kv.RwCursor readOnly bool - cursorID uint64 ctx context.Context - id uint64 // set only if TRACE_TX=true + + cursors map[uint64]*mdbx.Cursor + cursorID uint64 + + streams map[int]kv.Closer + streamID int } type MdbxCursor struct { @@ -904,7 +1068,7 @@ func (tx *MdbxTx) Commit() error { latency, err := tx.tx.Commit() if err != nil { - return fmt.Errorf("lable: %s, %w", tx.db.opts.label, err) + return fmt.Errorf("label: %s, %w", tx.db.opts.label, err) } if tx.db.opts.label == kv.ChainDB { @@ -991,6 +1155,7 @@ func (tx *MdbxTx) closeCursors() { c.Close() } } + tx.streams = nil tx.statelessCursors = nil } @@ -1343,6 +1508,9 @@ func (c *MdbxCursor) Next() (k, v []byte, err error) { b := c.bucketCfg if b.AutoDupSortKeysConversion && len(k) == b.DupToLen { keyPart := b.DupFromLen - b.DupToLen + if len(v) == 0 { + return nil, nil, fmt.Errorf("key with empty value: k=%x, len(k)=%d, v=%x", k, len(k), v) + } k = append(k, v[:keyPart]...) v = v[keyPart:] } @@ -1795,17 +1963,23 @@ func (tx *MdbxTx) RangeDescend(table string, fromPrefix, toPrefix []byte, limit } type cursor2iter struct { - c kv.Cursor + c kv.Cursor + id int + tx *MdbxTx + fromPrefix, toPrefix, nextK, nextV []byte - err error orderAscend order.By limit int64 ctx context.Context } func (tx *MdbxTx) rangeOrderLimit(table string, fromPrefix, toPrefix []byte, orderAscend order.By, limit int) (*cursor2iter, error) { - s := &cursor2iter{ctx: tx.ctx, fromPrefix: fromPrefix, toPrefix: toPrefix, orderAscend: orderAscend, limit: int64(limit)} - tx.streams = append(tx.streams, s) + s := &cursor2iter{ctx: tx.ctx, tx: tx, fromPrefix: fromPrefix, toPrefix: toPrefix, orderAscend: orderAscend, limit: int64(limit), id: tx.streamID} + tx.streamID++ + if tx.streams == nil { + tx.streams = map[int]kv.Closer{} + } + tx.streams[s.id] = s return s.init(table, tx) } func (s *cursor2iter) init(table string, tx kv.Tx) (*cursor2iter, error) { @@ -1823,42 +1997,51 @@ func (s *cursor2iter) init(table string, tx kv.Tx) (*cursor2iter, error) { if s.fromPrefix == nil { // no initial position if s.orderAscend { - s.nextK, s.nextV, s.err = s.c.First() + s.nextK, s.nextV, err = s.c.First() } else { - s.nextK, s.nextV, s.err = s.c.Last() + s.nextK, s.nextV, err = s.c.Last() } - return s, s.err + return s, err } if s.orderAscend { - s.nextK, s.nextV, s.err = s.c.Seek(s.fromPrefix) - return s, s.err + s.nextK, s.nextV, err = s.c.Seek(s.fromPrefix) + return s, err } else { // seek exactly to given key or previous one - s.nextK, s.nextV, s.err = s.c.SeekExact(s.fromPrefix) - if s.err != nil { - return s, s.err + s.nextK, s.nextV, err = s.c.SeekExact(s.fromPrefix) + if err != nil { + return s, err } if s.nextK != nil { // go to last value of this key if casted, ok := s.c.(kv.CursorDupSort); ok { - s.nextV, s.err = casted.LastDup() + s.nextV, err = casted.LastDup() } } else { // key not found, go to prev one - s.nextK, s.nextV, s.err = s.c.Prev() + s.nextK, s.nextV, err = s.c.Prev() } - return s, s.err + return s, err + } +} + +func (s *cursor2iter) advance() (err error) { + if s.orderAscend { + s.nextK, s.nextV, err = s.c.Next() + } else { + s.nextK, s.nextV, err = s.c.Prev() } + return err } func (s *cursor2iter) Close() { if s.c != nil { s.c.Close() + delete(s.tx.streams, s.id) + s.c = nil } } + func (s *cursor2iter) HasNext() bool { - if s.err != nil { // always true, then .Next() call will return this error - return true - } if s.limit == 0 { // limit reached return false } @@ -1874,6 +2057,7 @@ func (s *cursor2iter) HasNext() bool { cmp := bytes.Compare(s.nextK, s.toPrefix) return (bool(s.orderAscend) && cmp < 0) || (!bool(s.orderAscend) && cmp > 0) } + func (s *cursor2iter) Next() (k, v []byte, err error) { select { case <-s.ctx.Done(): @@ -1881,26 +2065,30 @@ func (s *cursor2iter) Next() (k, v []byte, err error) { default: } s.limit-- - k, v, err = s.nextK, s.nextV, s.err - if s.orderAscend { - s.nextK, s.nextV, s.err = s.c.Next() - } else { - s.nextK, s.nextV, s.err = s.c.Prev() + k, v = s.nextK, s.nextV + if err = s.advance(); err != nil { + return nil, nil, err } - return k, v, err + return k, v, nil } func (tx *MdbxTx) RangeDupSort(table string, key []byte, fromPrefix, toPrefix []byte, asc order.By, limit int) (iter.KV, error) { - s := &cursorDup2iter{ctx: tx.ctx, key: key, fromPrefix: fromPrefix, toPrefix: toPrefix, orderAscend: bool(asc), limit: int64(limit)} - tx.streams = append(tx.streams, s) + s := &cursorDup2iter{ctx: tx.ctx, tx: tx, key: key, fromPrefix: fromPrefix, toPrefix: toPrefix, orderAscend: bool(asc), limit: int64(limit), id: tx.streamID} + tx.streamID++ + if tx.streams == nil { + tx.streams = map[int]kv.Closer{} + } + tx.streams[s.id] = s return s.init(table, tx) } type cursorDup2iter struct { - c kv.CursorDupSort + c kv.CursorDupSort + id int + tx *MdbxTx + key []byte fromPrefix, toPrefix, nextV []byte - err error orderAscend bool limit int64 ctx context.Context @@ -1928,35 +2116,43 @@ func (s *cursorDup2iter) init(table string, tx kv.Tx) (*cursorDup2iter, error) { if s.fromPrefix == nil { // no initial position if s.orderAscend { - s.nextV, s.err = s.c.FirstDup() + s.nextV, err = s.c.FirstDup() } else { - s.nextV, s.err = s.c.LastDup() + s.nextV, err = s.c.LastDup() } - return s, s.err + return s, err } if s.orderAscend { - s.nextV, s.err = s.c.SeekBothRange(s.key, s.fromPrefix) - return s, s.err + s.nextV, err = s.c.SeekBothRange(s.key, s.fromPrefix) + return s, err } else { // seek exactly to given key or previous one - _, s.nextV, s.err = s.c.SeekBothExact(s.key, s.fromPrefix) + _, s.nextV, err = s.c.SeekBothExact(s.key, s.fromPrefix) if s.nextV == nil { // no such key - _, s.nextV, s.err = s.c.PrevDup() + _, s.nextV, err = s.c.PrevDup() } - return s, s.err + return s, err } } +func (s *cursorDup2iter) advance() (err error) { + if s.orderAscend { + _, s.nextV, err = s.c.NextDup() + } else { + _, s.nextV, err = s.c.PrevDup() + } + return err +} + func (s *cursorDup2iter) Close() { if s.c != nil { s.c.Close() + delete(s.tx.streams, s.id) + s.c = nil } } func (s *cursorDup2iter) HasNext() bool { - if s.err != nil { // always true, then .Next() call will return this error - return true - } if s.limit == 0 { // limit reached return false } @@ -1979,13 +2175,11 @@ func (s *cursorDup2iter) Next() (k, v []byte, err error) { default: } s.limit-- - v, err = s.nextV, s.err - if s.orderAscend { - _, s.nextV, s.err = s.c.NextDup() - } else { - _, s.nextV, s.err = s.c.PrevDup() + v = s.nextV + if err = s.advance(); err != nil { + return nil, nil, err } - return s.key, v, err + return s.key, v, nil } func (tx *MdbxTx) ForAmount(bucket string, fromPrefix []byte, amount uint32, walker func(k, v []byte) error) error { diff --git a/erigon-lib/kv/mdbx/kv_mdbx_test.go b/erigon-lib/kv/mdbx/kv_mdbx_test.go index 66506ef720f..d30d8a5624d 100644 --- a/erigon-lib/kv/mdbx/kv_mdbx_test.go +++ b/erigon-lib/kv/mdbx/kv_mdbx_test.go @@ -18,6 +18,8 @@ package mdbx import ( "context" + "encoding/binary" + "errors" "sync/atomic" "testing" "time" @@ -31,7 +33,7 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/order" ) -func BaseCase(t *testing.T) (kv.RwDB, kv.RwTx, kv.RwCursorDupSort) { +func BaseCaseDB(t *testing.T) kv.RwDB { t.Helper() path := t.TempDir() logger := log.New() @@ -43,6 +45,13 @@ func BaseCase(t *testing.T) (kv.RwDB, kv.RwTx, kv.RwCursorDupSort) { } }).MapSize(128 * datasize.MB).MustOpen() t.Cleanup(db.Close) + return db +} + +func BaseCase(t *testing.T) (kv.RwDB, kv.RwTx, kv.RwCursorDupSort) { + t.Helper() + db := BaseCaseDB(t) + table := "Table" tx, err := db.BeginRw(context.Background()) require.NoError(t, err) @@ -897,3 +906,184 @@ func TestCloseWaitsAfterTxBegin(t *testing.T) { ) }) } + +// u64tob converts a uint64 into an 8-byte slice. +func u64tob(v uint64) []byte { + b := make([]byte, 8) + binary.BigEndian.PutUint64(b, v) + return b +} + +// Ensure two functions can perform updates in a single batch. +func TestDB_Batch(t *testing.T) { + _db := BaseCaseDB(t) + table := "Table" + db := _db.(*MdbxKV) + + // Iterate over multiple updates in separate goroutines. + n := 2 + ch := make(chan error, n) + for i := 0; i < n; i++ { + go func(i int) { + ch <- db.Batch(func(tx kv.RwTx) error { + return tx.Put(table, u64tob(uint64(i)), []byte{}) + }) + }(i) + } + + // Check all responses to make sure there's no error. + for i := 0; i < n; i++ { + if err := <-ch; err != nil { + t.Fatal(err) + } + } + + // Ensure data is correct. + if err := db.View(context.Background(), func(tx kv.Tx) error { + for i := 0; i < n; i++ { + v, err := tx.GetOne(table, u64tob(uint64(i))) + if err != nil { + panic(err) + } + if v == nil { + t.Errorf("key not found: %d", i) + } + } + return nil + }); err != nil { + t.Fatal(err) + } +} + +func TestDB_Batch_Panic(t *testing.T) { + _db := BaseCaseDB(t) + db := _db.(*MdbxKV) + + var sentinel int + var bork = &sentinel + var problem interface{} + var err error + + // Execute a function inside a batch that panics. + func() { + defer func() { + if p := recover(); p != nil { + problem = p + } + }() + err = db.Batch(func(tx kv.RwTx) error { + panic(bork) + }) + }() + + // Verify there is no error. + if g, e := err, error(nil); !errors.Is(g, e) { + t.Fatalf("wrong error: %v != %v", g, e) + } + // Verify the panic was captured. + if g, e := problem, bork; g != e { + t.Fatalf("wrong error: %v != %v", g, e) + } +} + +func TestDB_BatchFull(t *testing.T) { + _db := BaseCaseDB(t) + table := "Table" + db := _db.(*MdbxKV) + + const size = 3 + // buffered so we never leak goroutines + ch := make(chan error, size) + put := func(i int) { + ch <- db.Batch(func(tx kv.RwTx) error { + return tx.Put(table, u64tob(uint64(i)), []byte{}) + }) + } + + db.MaxBatchSize = size + // high enough to never trigger here + db.MaxBatchDelay = 1 * time.Hour + + go put(1) + go put(2) + + // Give the batch a chance to exhibit bugs. + time.Sleep(10 * time.Millisecond) + + // not triggered yet + select { + case <-ch: + t.Fatalf("batch triggered too early") + default: + } + + go put(3) + + // Check all responses to make sure there's no error. + for i := 0; i < size; i++ { + if err := <-ch; err != nil { + t.Fatal(err) + } + } + + // Ensure data is correct. + if err := db.View(context.Background(), func(tx kv.Tx) error { + for i := 1; i <= size; i++ { + v, err := tx.GetOne(table, u64tob(uint64(i))) + if err != nil { + panic(err) + } + if v == nil { + t.Errorf("key not found: %d", i) + } + } + return nil + }); err != nil { + t.Fatal(err) + } +} + +func TestDB_BatchTime(t *testing.T) { + _db := BaseCaseDB(t) + table := "Table" + db := _db.(*MdbxKV) + + const size = 1 + // buffered so we never leak goroutines + ch := make(chan error, size) + put := func(i int) { + ch <- db.Batch(func(tx kv.RwTx) error { + return tx.Put(table, u64tob(uint64(i)), []byte{}) + }) + } + + db.MaxBatchSize = 1000 + db.MaxBatchDelay = 0 + + go put(1) + + // Batch must trigger by time alone. + + // Check all responses to make sure there's no error. + for i := 0; i < size; i++ { + if err := <-ch; err != nil { + t.Fatal(err) + } + } + + // Ensure data is correct. + if err := db.View(context.Background(), func(tx kv.Tx) error { + for i := 1; i <= size; i++ { + v, err := tx.GetOne(table, u64tob(uint64(i))) + if err != nil { + return err + } + if v == nil { + t.Errorf("key not found: %d", i) + } + } + return nil + }); err != nil { + t.Fatal(err) + } +} diff --git a/erigon-lib/kv/membatch/mapmutation.go b/erigon-lib/kv/membatch/mapmutation.go index 994a042f67f..ed2d9d07c10 100644 --- a/erigon-lib/kv/membatch/mapmutation.go +++ b/erigon-lib/kv/membatch/mapmutation.go @@ -149,7 +149,7 @@ func (m *Mapmutation) Put(table string, k, v []byte) error { stringKey := string(k) var ok bool - if _, ok = m.puts[table][stringKey]; !ok { + if _, ok = m.puts[table][stringKey]; ok { m.size += len(v) - len(m.puts[table][stringKey]) m.puts[table][stringKey] = v return nil @@ -200,10 +200,13 @@ func (m *Mapmutation) doCommit(tx kv.RwTx) error { count := 0 total := float64(m.count) for table, bucket := range m.puts { - collector := etl.NewCollector("", m.tmpdir, etl.NewSortableBuffer(etl.BufferOptimalSize), m.logger) + collector := etl.NewCollector("", m.tmpdir, etl.NewSortableBuffer(etl.BufferOptimalSize/2), m.logger) defer collector.Close() + collector.SortAndFlushInBackground(true) for key, value := range bucket { - collector.Collect([]byte(key), value) + if err := collector.Collect([]byte(key), value); err != nil { + return err + } count++ select { default: @@ -216,6 +219,7 @@ func (m *Mapmutation) doCommit(tx kv.RwTx) error { if err := collector.Load(tx, table, etl.IdentityLoadFunc, etl.TransformArgs{Quit: m.quit}); err != nil { return err } + collector.Close() } tx.CollectMetrics() diff --git a/erigon-lib/kv/membatch/mapmutation_test.go b/erigon-lib/kv/membatch/mapmutation_test.go index a658c834fa7..5d357ca6cef 100644 --- a/erigon-lib/kv/membatch/mapmutation_test.go +++ b/erigon-lib/kv/membatch/mapmutation_test.go @@ -8,6 +8,7 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -22,10 +23,16 @@ func TestMapmutation_Flush_Close(t *testing.T) { defer func() { batch.Close() }() + assert.Equal(t, batch.size, 0) err = batch.Put(kv.ChaindataTables[0], []byte{1}, []byte{1}) require.NoError(t, err) + assert.Equal(t, batch.size, 2) err = batch.Put(kv.ChaindataTables[0], []byte{2}, []byte{2}) require.NoError(t, err) + assert.Equal(t, batch.size, 4) + err = batch.Put(kv.ChaindataTables[0], []byte{1}, []byte{3, 2, 1, 0}) + require.NoError(t, err) + assert.Equal(t, batch.size, 7) err = batch.Flush(context.Background(), tx) require.NoError(t, err) batch.Close() diff --git a/erigon-lib/kv/membatchwithdb/memory_mutation.go b/erigon-lib/kv/membatchwithdb/memory_mutation.go index 173e44b232a..16b397736ae 100644 --- a/erigon-lib/kv/membatchwithdb/memory_mutation.go +++ b/erigon-lib/kv/membatchwithdb/memory_mutation.go @@ -48,7 +48,7 @@ type MemoryMutation struct { // batch.Commit() func NewMemoryBatch(tx kv.Tx, tmpDir string, logger log.Logger) *MemoryMutation { tmpDB := mdbx.NewMDBX(logger).InMem(tmpDir).GrowthStep(64 * datasize.MB).MapSize(512 * datasize.GB).MustOpen() - memTx, err := tmpDB.BeginRw(context.Background()) + memTx, err := tmpDB.BeginRw(context.Background()) // nolint:gocritic if err != nil { panic(err) } @@ -507,37 +507,47 @@ func (m *MemoryMutation) Flush(tx kv.RwTx) error { // Iterate over each bucket and apply changes accordingly. for _, bucket := range buckets { if isTablePurelyDupsort(bucket) { - cbucket, err := m.memTx.CursorDupSort(bucket) - if err != nil { - return err - } - defer cbucket.Close() - dbCursor, err := tx.RwCursorDupSort(bucket) - if err != nil { - return err - } - defer dbCursor.Close() - for k, v, err := cbucket.First(); k != nil; k, v, err = cbucket.Next() { + if err := func() error { + cbucket, err := m.memTx.CursorDupSort(bucket) if err != nil { return err } - if err := dbCursor.Put(k, v); err != nil { + defer cbucket.Close() + dbCursor, err := tx.RwCursorDupSort(bucket) + if err != nil { return err } - } - } else { - cbucket, err := m.memTx.Cursor(bucket) - if err != nil { + defer dbCursor.Close() + for k, v, err := cbucket.First(); k != nil; k, v, err = cbucket.Next() { + if err != nil { + return err + } + if err := dbCursor.Put(k, v); err != nil { + return err + } + } + return nil + }(); err != nil { return err } - defer cbucket.Close() - for k, v, err := cbucket.First(); k != nil; k, v, err = cbucket.Next() { + } else { + if err := func() error { + cbucket, err := m.memTx.Cursor(bucket) if err != nil { return err } - if err := tx.Put(bucket, k, v); err != nil { - return err + defer cbucket.Close() + for k, v, err := cbucket.First(); k != nil; k, v, err = cbucket.Next() { + if err != nil { + return err + } + if err := tx.Put(bucket, k, v); err != nil { + return err + } } + return nil + }(); err != nil { + return err } } } diff --git a/erigon-lib/kv/memdb/memory_database.go b/erigon-lib/kv/memdb/memory_database.go index 57b90680d5f..b87450802d4 100644 --- a/erigon-lib/kv/memdb/memory_database.go +++ b/erigon-lib/kv/memdb/memory_database.go @@ -50,7 +50,7 @@ func NewTestDB(tb testing.TB) kv.RwDB { func BeginRw(tb testing.TB, db kv.RwDB) kv.RwTx { tb.Helper() - tx, err := db.BeginRw(context.Background()) + tx, err := db.BeginRw(context.Background()) //nolint:gocritic if err != nil { tb.Fatal(err) } @@ -60,7 +60,7 @@ func BeginRw(tb testing.TB, db kv.RwDB) kv.RwTx { func BeginRo(tb testing.TB, db kv.RoDB) kv.Tx { tb.Helper() - tx, err := db.BeginRo(context.Background()) + tx, err := db.BeginRo(context.Background()) //nolint:gocritic if err != nil { tb.Fatal(err) } @@ -97,7 +97,7 @@ func NewTestTx(tb testing.TB) (kv.RwDB, kv.RwTx) { tmpDir := tb.TempDir() db := New(tmpDir) tb.Cleanup(db.Close) - tx, err := db.BeginRw(context.Background()) + tx, err := db.BeginRw(context.Background()) //nolint:gocritic if err != nil { tb.Fatal(err) } diff --git a/erigon-lib/kv/remotedb/kv_remote.go b/erigon-lib/kv/remotedb/kv_remote.go index 7df14ae88de..54acca4e55f 100644 --- a/erigon-lib/kv/remotedb/kv_remote.go +++ b/erigon-lib/kv/remotedb/kv_remote.go @@ -24,13 +24,14 @@ import ( "runtime" "unsafe" - "github.com/ledgerwatch/erigon-lib/kv/iter" - "github.com/ledgerwatch/erigon-lib/kv/order" "github.com/ledgerwatch/log/v3" "golang.org/x/sync/semaphore" "google.golang.org/grpc" "google.golang.org/protobuf/types/known/emptypb" + "github.com/ledgerwatch/erigon-lib/kv/iter" + "github.com/ledgerwatch/erigon-lib/kv/order" + "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/grpcutil" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" @@ -160,7 +161,7 @@ func (db *DB) BeginRo(ctx context.Context) (txn kv.Tx, err error) { } if semErr := db.roTxsLimiter.Acquire(ctx, 1); semErr != nil { - return nil, semErr + return nil, fmt.Errorf("remotedb.DB.BeginRo: roTxsLimiter error %w", semErr) } defer func() { @@ -184,7 +185,7 @@ func (db *DB) BeginRo(ctx context.Context) (txn kv.Tx, err error) { return &tx{ctx: ctx, db: db, stream: stream, streamCancelFn: streamCancelFn, viewID: msg.ViewId, id: msg.TxId}, nil } func (db *DB) BeginTemporalRo(ctx context.Context) (kv.TemporalTx, error) { - t, err := db.BeginRo(ctx) + t, err := db.BeginRo(ctx) //nolint:gocritic if err != nil { return nil, err } diff --git a/erigon-lib/kv/remotedbserver/remotedbserver.go b/erigon-lib/kv/remotedbserver/remotedbserver.go index f276674cb78..59f3b58e678 100644 --- a/erigon-lib/kv/remotedbserver/remotedbserver.go +++ b/erigon-lib/kv/remotedbserver/remotedbserver.go @@ -91,7 +91,7 @@ type threadSafeTx struct { sync.Mutex } -//go:generate mockgen -destination=./mock/snapshots_mock.go -package=mock . Snapshots +//go:generate mockgen -typed=true -destination=./snapshots_mock.go -package=remotedbserver . Snapshots type Snapshots interface { Files() []string } @@ -136,7 +136,7 @@ func (s *KvServer) begin(ctx context.Context) (id uint64, err error) { } s.txsMapLock.Lock() defer s.txsMapLock.Unlock() - tx, errBegin := s.kv.BeginRo(ctx) + tx, errBegin := s.kv.BeginRo(ctx) //nolint:gocritic if errBegin != nil { return 0, errBegin } @@ -158,7 +158,7 @@ func (s *KvServer) renew(ctx context.Context, id uint64) (err error) { defer tx.Unlock() tx.Rollback() } - newTx, errBegin := s.kv.BeginRo(ctx) + newTx, errBegin := s.kv.BeginRo(ctx) //nolint:gocritic if errBegin != nil { return fmt.Errorf("kvserver: %w", err) } @@ -458,17 +458,27 @@ func (s *KvServer) SendStateChanges(_ context.Context, sc *remote.StateChangeBat s.stateChangeStreams.Pub(sc) } -func (s *KvServer) Snapshots(_ context.Context, _ *remote.SnapshotsRequest) (*remote.SnapshotsReply, error) { +func (s *KvServer) Snapshots(_ context.Context, _ *remote.SnapshotsRequest) (reply *remote.SnapshotsReply, err error) { + defer func() { + if rec := recover(); rec != nil { + err = fmt.Errorf("%v, %s", rec, dbg.Stack()) + } + }() if s.blockSnapshots == nil || reflect.ValueOf(s.blockSnapshots).IsNil() { // nolint return &remote.SnapshotsReply{BlocksFiles: []string{}, HistoryFiles: []string{}}, nil } blockFiles := s.blockSnapshots.Files() - if s.borSnapshots != nil { + if s.borSnapshots != nil && !reflect.ValueOf(s.borSnapshots).IsNil() { // nolint blockFiles = append(blockFiles, s.borSnapshots.Files()...) } - return &remote.SnapshotsReply{BlocksFiles: blockFiles, HistoryFiles: s.historySnapshots.Files()}, nil + reply = &remote.SnapshotsReply{BlocksFiles: blockFiles} + if s.historySnapshots != nil && !reflect.ValueOf(s.historySnapshots).IsNil() { // nolint + reply.HistoryFiles = s.historySnapshots.Files() + } + + return reply, nil } type StateChangePubSub struct { diff --git a/erigon-lib/kv/remotedbserver/remotedbserver_test.go b/erigon-lib/kv/remotedbserver/remotedbserver_test.go index 4e233638862..1f965771ff1 100644 --- a/erigon-lib/kv/remotedbserver/remotedbserver_test.go +++ b/erigon-lib/kv/remotedbserver/remotedbserver_test.go @@ -21,14 +21,13 @@ import ( "runtime" "testing" - "github.com/golang/mock/gomock" "github.com/ledgerwatch/log/v3" "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" "golang.org/x/sync/errgroup" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" - "github.com/ledgerwatch/erigon-lib/kv/remotedbserver/mock" ) func TestKvServer_renew(t *testing.T) { @@ -103,9 +102,9 @@ func TestKvServer_renew(t *testing.T) { func TestKVServerSnapshotsReturnsSnapshots(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) - blockSnapshots := mock.NewMockSnapshots(ctrl) + blockSnapshots := NewMockSnapshots(ctrl) blockSnapshots.EXPECT().Files().Return([]string{"headers.seg", "bodies.seg"}).Times(1) - historySnapshots := mock.NewMockSnapshots(ctrl) + historySnapshots := NewMockSnapshots(ctrl) historySnapshots.EXPECT().Files().Return([]string{"history"}).Times(1) s := NewKvServer(ctx, nil, blockSnapshots, nil, historySnapshots, log.New()) @@ -118,11 +117,11 @@ func TestKVServerSnapshotsReturnsSnapshots(t *testing.T) { func TestKVServerSnapshotsReturnsBorSnapshots(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) - blockSnapshots := mock.NewMockSnapshots(ctrl) + blockSnapshots := NewMockSnapshots(ctrl) blockSnapshots.EXPECT().Files().Return([]string{"headers.seg", "bodies.seg"}).Times(1) - borSnapshots := mock.NewMockSnapshots(ctrl) + borSnapshots := NewMockSnapshots(ctrl) borSnapshots.EXPECT().Files().Return([]string{"borevents.seg", "borspans.seg"}).Times(1) - historySnapshots := mock.NewMockSnapshots(ctrl) + historySnapshots := NewMockSnapshots(ctrl) historySnapshots.EXPECT().Files().Return([]string{"history"}).Times(1) s := NewKvServer(ctx, nil, blockSnapshots, borSnapshots, historySnapshots, log.New()) diff --git a/erigon-lib/kv/remotedbserver/mock/snapshots_mock.go b/erigon-lib/kv/remotedbserver/snapshots_mock.go similarity index 50% rename from erigon-lib/kv/remotedbserver/mock/snapshots_mock.go rename to erigon-lib/kv/remotedbserver/snapshots_mock.go index 538b5aa4323..cdd66394fec 100644 --- a/erigon-lib/kv/remotedbserver/mock/snapshots_mock.go +++ b/erigon-lib/kv/remotedbserver/snapshots_mock.go @@ -1,13 +1,18 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/ledgerwatch/erigon-lib/kv/remotedbserver (interfaces: Snapshots) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./snapshots_mock.go -package=remotedbserver . Snapshots +// -// Package mock is a generated GoMock package. -package mock +// Package remotedbserver is a generated GoMock package. +package remotedbserver import ( reflect "reflect" - gomock "github.com/golang/mock/gomock" + gomock "go.uber.org/mock/gomock" ) // MockSnapshots is a mock of Snapshots interface. @@ -42,7 +47,31 @@ func (m *MockSnapshots) Files() []string { } // Files indicates an expected call of Files. -func (mr *MockSnapshotsMockRecorder) Files() *gomock.Call { +func (mr *MockSnapshotsMockRecorder) Files() *MockSnapshotsFilesCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Files", reflect.TypeOf((*MockSnapshots)(nil).Files)) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Files", reflect.TypeOf((*MockSnapshots)(nil).Files)) + return &MockSnapshotsFilesCall{Call: call} +} + +// MockSnapshotsFilesCall wrap *gomock.Call +type MockSnapshotsFilesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSnapshotsFilesCall) Return(arg0 []string) *MockSnapshotsFilesCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSnapshotsFilesCall) Do(f func() []string) *MockSnapshotsFilesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSnapshotsFilesCall) DoAndReturn(f func() []string) *MockSnapshotsFilesCall { + c.Call = c.Call.DoAndReturn(f) + return c } diff --git a/erigon-lib/kv/tables.go b/erigon-lib/kv/tables.go index 75435eef207..67586e060bf 100644 --- a/erigon-lib/kv/tables.go +++ b/erigon-lib/kv/tables.go @@ -356,13 +356,17 @@ const ( StateCommitment = "StateCommitment" // BOR - BorReceipts = "BorReceipt" - BorFinality = "BorFinality" - BorTxLookup = "BlockBorTransactionLookup" // transaction_hash -> block_num_u64 - BorSeparate = "BorSeparate" // persisted snapshots of the Validator Sets, with their proposer priorities - BorEvents = "BorEvents" // event_id -> event_payload - BorEventNums = "BorEventNums" // block_num -> event_id (first event_id in that block) - BorSpans = "BorSpans" // span_id -> span (in JSON encoding) + BorReceipts = "BorReceipt" + BorFinality = "BorFinality" + BorTxLookup = "BlockBorTransactionLookup" // transaction_hash -> block_num_u64 + BorSeparate = "BorSeparate" // persisted snapshots of the Validator Sets, with their proposer priorities + BorEvents = "BorEvents" // event_id -> event_payload + BorEventNums = "BorEventNums" // block_num -> event_id (first event_id in that block) + BorSpans = "BorSpans" // span_id -> span (in JSON encoding) + BorMilestones = "BorMilestones" // milestone_id -> milestone (in JSON encoding) + BorMilestoneEnds = "BorMilestoneEnds" // start block_num -> milestone_id (first block of milestone) + BorCheckpoints = "BorCheckpoints" // checkpoint_id -> checkpoint (in JSON encoding) + BorCheckpointEnds = "BorCheckpointEnds" // start block_num -> checkpoint_id (first block of checkpoint) // Downloader BittorrentCompletion = "BittorrentCompletion" @@ -428,6 +432,9 @@ const ( BeaconState = "BeaconState" // [slot] => [signature + block without execution payload] BeaconBlocks = "BeaconBlock" + + EffectiveBalancesDump = "EffectiveBalancesDump" + BalancesDump = "BalancesDump" // [slot] => [attestation list (custom encoding)] Attestetations = "Attestetations" @@ -445,6 +452,9 @@ const ( LastBeaconSnapshot = "LastBeaconSnapshot" LastBeaconSnapshotKey = "LastBeaconSnapshotKey" + BlockRootToKzgCommitments = "BlockRootToKzgCommitments" + KzgCommitmentToBlob = "KzgCommitmentToBlob" + // [Block Root] => [Parent Root] BlockRootToParentRoot = "BlockRootToParentRoot" @@ -453,10 +463,6 @@ const ( // BlockRoot => Beacon Block Header BeaconBlockHeaders = "BeaconBlockHeaders" - // LightClientStore => LightClientStore object - // LightClientFinalityUpdate => latest finality update - // LightClientOptimisticUpdate => latest optimistic update - LightClient = "LightClient" // Period (one every 27 hours) => LightClientUpdate LightClientUpdates = "LightClientUpdates" // Beacon historical data @@ -485,8 +491,6 @@ const ( CurrentSyncCommittee = "CurrentSyncCommittee" HistoricalRoots = "HistoricalRoots" HistoricalSummaries = "HistoricalSummaries" - CurrentEpochAttestations = "EpochAttestations" - PreviousEpochAttestations = "PreviousAttestations" Eth1DataVotes = "Eth1DataVotes" IntraRandaoMixes = "IntraRandaoMixes" // [validator_index+slot] => [randao_mix] @@ -494,6 +498,10 @@ const ( Proposers = "BlockProposers" // epoch => proposers indicies StatesProcessingProgress = "StatesProcessingProgress" + + //Diagnostics tables + DiagSystemInfo = "DiagSystemInfo" + DiagSyncStages = "DiagSyncStages" ) // Keys @@ -593,6 +601,10 @@ var ChaindataTables = []string{ BorEvents, BorEventNums, BorSpans, + BorMilestones, + BorMilestoneEnds, + BorCheckpoints, + BorCheckpointEnds, TblAccountKeys, TblAccountVals, TblAccountHistoryKeys, @@ -650,11 +662,13 @@ var ChaindataTables = []string{ BeaconBlockHeaders, HighestFinalized, Attestetations, - LightClient, LightClientUpdates, BlockRootToBlockHash, BlockRootToBlockNumber, LastBeaconSnapshot, + // Blob Storage + BlockRootToKzgCommitments, + KzgCommitmentToBlob, // State Reconstitution ValidatorPublicKeys, InvertedValidatorPublicKeys, @@ -678,16 +692,16 @@ var ChaindataTables = []string{ CurrentSyncCommittee, HistoricalRoots, HistoricalSummaries, - CurrentEpochAttestations, - PreviousEpochAttestations, Eth1DataVotes, IntraRandaoMixes, ActiveValidatorIndicies, + EffectiveBalancesDump, + BalancesDump, } const ( RecentLocalTransaction = "RecentLocalTransaction" // sequence_u64 -> tx_hash - PoolTransaction = "PoolTransaction" // txHash -> sender_id_u64+tx_rlp + PoolTransaction = "PoolTransaction" // txHash -> sender+tx_rlp PoolInfo = "PoolInfo" // option_key -> option_value ) @@ -716,6 +730,11 @@ var ChaindataDeprecatedTables = []string{ TransitionBlockKey, } +var DiagnosticsTables = []string{ + DiagSystemInfo, + DiagSyncStages, +} + type CmpFunc func(k1, k2, v1, v2 []byte) int type TableCfg map[string]TableCfgItem @@ -798,17 +817,22 @@ var ChaindataTablesCfg = TableCfg{ } var BorTablesCfg = TableCfg{ - BorReceipts: {Flags: DupSort}, - BorFinality: {Flags: DupSort}, - BorTxLookup: {Flags: DupSort}, - BorEvents: {Flags: DupSort}, - BorEventNums: {Flags: DupSort}, - BorSpans: {Flags: DupSort}, + BorReceipts: {Flags: DupSort}, + BorFinality: {Flags: DupSort}, + BorTxLookup: {Flags: DupSort}, + BorEvents: {Flags: DupSort}, + BorEventNums: {Flags: DupSort}, + BorSpans: {Flags: DupSort}, + BorCheckpoints: {Flags: DupSort}, + BorCheckpointEnds: {Flags: DupSort}, + BorMilestones: {Flags: DupSort}, + BorMilestoneEnds: {Flags: DupSort}, } var TxpoolTablesCfg = TableCfg{} var SentryTablesCfg = TableCfg{} var DownloaderTablesCfg = TableCfg{} +var DiagnosticsTablesCfg = TableCfg{} var ReconTablesCfg = TableCfg{ PlainStateD: {Flags: DupSort}, CodeD: {Flags: DupSort}, @@ -825,6 +849,8 @@ func TablesCfgByLabel(label Label) TableCfg { return SentryTablesCfg case DownloaderDB: return DownloaderTablesCfg + case DiagnosticsDB: + return DiagnosticsTablesCfg default: panic(fmt.Sprintf("unexpected label: %s", label)) } @@ -886,6 +912,13 @@ func reinit() { ReconTablesCfg[name] = TableCfgItem{} } } + + for _, name := range DiagnosticsTables { + _, ok := DiagnosticsTablesCfg[name] + if !ok { + DiagnosticsTablesCfg[name] = TableCfgItem{} + } + } } // Temporal diff --git a/core/state/temporal/kv_temporal.go b/erigon-lib/kv/temporal/kv_temporal.go similarity index 60% rename from core/state/temporal/kv_temporal.go rename to erigon-lib/kv/temporal/kv_temporal.go index 8be4940df75..e6be7340fe6 100644 --- a/core/state/temporal/kv_temporal.go +++ b/erigon-lib/kv/temporal/kv_temporal.go @@ -2,36 +2,24 @@ package temporal import ( "context" - "encoding/binary" "fmt" - "testing" "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon-lib/common/dir" - "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/iter" "github.com/ledgerwatch/erigon-lib/kv/kvcfg" "github.com/ledgerwatch/erigon-lib/kv/mdbx" - "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/erigon-lib/kv/order" - "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" "github.com/ledgerwatch/erigon-lib/state" - "github.com/ledgerwatch/erigon/core/state/historyv2read" - "github.com/ledgerwatch/erigon/core/systemcontracts" - "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/core/types/accounts" - "github.com/ledgerwatch/erigon/eth/ethconfig" - "github.com/ledgerwatch/log/v3" ) //Variables Naming: // tx - Database Transaction -// txn - Ethereum Transaction (and TxNum - is also number of Etherum Transaction) +// txn - Ethereum Transaction (and TxNum - is also number of Ethereum Transaction) // RoTx - Read-Only Database Transaction. RwTx - read-write // k, v - key, value -// ts - TimeStamp. Usually it's Etherum's TransactionNumber (auto-increment ID). Or BlockNumber. +// ts - TimeStamp. Usually it's Ethereum's TransactionNumber (auto-increment ID). Or BlockNumber. // Cursor - low-level mdbx-tide api to navigate over Table // Iter - high-level iterator-like api over Table/InvertedIndex/History/Domain. Has less features than Cursor. See package `iter` @@ -47,7 +35,7 @@ import ( // start or auto-generate by moving old data from DB to Snapshots. // MediumLevel: // 1. TemporalDB - abstracting DB+Snapshots. Target is: -// - provide 'time-travel' API for data: consistan snapshot of data as of given Timestamp. +// - provide 'time-travel' API for data: consistent snapshot of data as of given Timestamp. // - to keep DB small - only for Hot/Recent data (can be update/delete by re-org). // - using next entities: // - InvertedIndex: supports range-scans @@ -59,50 +47,19 @@ import ( // HighLevel: // 1. Application - rely on TemporalDB (Ex: ExecutionLayer) or just DB (Ex: TxPool, Sentry, Downloader). -type tRestoreCodeHash func(tx kv.Getter, key, v []byte, force *common.Hash) ([]byte, error) -type tConvertAccount func(v []byte) ([]byte, error) -type tParseIncarnation func(v []byte) (uint64, error) - type DB struct { kv.RwDB - agg *state.AggregatorV3 - - convertV3toV2 tConvertAccount - convertV2toV3 tConvertAccount - restoreCodeHash tRestoreCodeHash - parseInc tParseIncarnation - systemContractLookup map[common.Address][]common.CodeRecord + agg *state.Aggregator } -func New(db kv.RwDB, agg *state.AggregatorV3, systemContractLookup map[common.Address][]common.CodeRecord) (*DB, error) { +func New(db kv.RwDB, agg *state.Aggregator) (*DB, error) { if !kvcfg.HistoryV3.FromDB(db) { panic("not supported") } - if systemContractLookup != nil { - if err := db.View(context.Background(), func(tx kv.Tx) error { - var err error - for _, list := range systemContractLookup { - for i := range list { - list[i].TxNumber, err = rawdbv3.TxNums.Min(tx, list[i].BlockNumber) - if err != nil { - return err - } - } - } - return nil - }); err != nil { - return nil, err - } - } - - return &DB{RwDB: db, agg: agg, - convertV3toV2: accounts.ConvertV3toV2, convertV2toV3: accounts.ConvertV2toV3, - restoreCodeHash: historyv2read.RestoreCodeHash, parseInc: accounts.DecodeIncarnationFromStorage, - systemContractLookup: systemContractLookup, - }, nil + return &DB{RwDB: db, agg: agg}, nil } -func (db *DB) Agg() *state.AggregatorV3 { return db.agg } -func (db *DB) InternalDB() kv.RwDB { return db.RwDB } +func (db *DB) Agg() *state.Aggregator { return db.agg } +func (db *DB) InternalDB() kv.RwDB { return db.RwDB } func (db *DB) BeginTemporalRo(ctx context.Context) (kv.TemporalTx, error) { kvTx, err := db.RwDB.BeginRo(ctx) //nolint:gocritic @@ -111,7 +68,7 @@ func (db *DB) BeginTemporalRo(ctx context.Context) (kv.TemporalTx, error) { } tx := &Tx{MdbxTx: kvTx.(*mdbx.MdbxTx), db: db} - tx.aggCtx = db.agg.MakeContext() + tx.aggCtx = db.agg.BeginFilesRo() return tx, nil } func (db *DB) ViewTemporal(ctx context.Context, f func(tx kv.TemporalTx) error) error { @@ -143,7 +100,7 @@ func (db *DB) BeginTemporalRw(ctx context.Context) (kv.RwTx, error) { } tx := &Tx{MdbxTx: kvTx.(*mdbx.MdbxTx), db: db} - tx.aggCtx = db.agg.MakeContext() + tx.aggCtx = db.agg.BeginFilesRo() return tx, nil } func (db *DB) BeginRw(ctx context.Context) (kv.RwTx, error) { @@ -168,7 +125,7 @@ func (db *DB) BeginTemporalRwNosync(ctx context.Context) (kv.RwTx, error) { } tx := &Tx{MdbxTx: kvTx.(*mdbx.MdbxTx), db: db} - tx.aggCtx = db.agg.MakeContext() + tx.aggCtx = db.agg.BeginFilesRo() return tx, nil } func (db *DB) BeginRwNosync(ctx context.Context) (kv.RwTx, error) { @@ -189,12 +146,12 @@ func (db *DB) UpdateNosync(ctx context.Context, f func(tx kv.RwTx) error) error type Tx struct { *mdbx.MdbxTx db *DB - aggCtx *state.AggregatorV3Context + aggCtx *state.AggregatorRoTx resourcesToClose []kv.Closer } -func (tx *Tx) AggCtx() *state.AggregatorV3Context { return tx.aggCtx } -func (tx *Tx) Agg() *state.AggregatorV3 { return tx.db.agg } +func (tx *Tx) AggCtx() *state.AggregatorRoTx { return tx.aggCtx } +func (tx *Tx) Agg() *state.Aggregator { return tx.db.agg } func (tx *Tx) Rollback() { tx.autoClose() tx.MdbxTx.Rollback() @@ -225,26 +182,10 @@ func (tx *Tx) DomainRange(name kv.Domain, fromKey, toKey []byte, asOfTs uint64, if len(v) == 0 { return k[:20], v, nil } - v, err = tx.db.convertV3toV2(v) - if err != nil { - return nil, nil, err - } - /* - var force *common.Hash - if tx.db.systemContractLookup != nil { - if records, ok := tx.db.systemContractLookup[common.BytesToAddress(k)]; ok { - p := sort.Search(len(records), func(i int) bool { - return records[i].TxNumber > asOfTs - }) - hash := records[p-1].CodeHash - force = &hash - } - } - v, err = tx.db.restoreCodeHash(tx.MdbxTx, k, v, force) - if err != nil { - return nil, nil, err - } - */ + //v, err = tx.db.convertV3toV2(v) + //if err != nil { + // return nil, nil, err + //} return k[:20], common.Copy(v), nil }) lastestStateIt, err := tx.RangeAscend(kv.PlainState, fromKey, toKey, -1) // don't apply limit, because need filter @@ -257,36 +198,36 @@ func (tx *Tx) DomainRange(name kv.Domain, fromKey, toKey []byte, asOfTs uint64, }) it = iter.UnionKV(histStateIt2, latestStateIt2, limit) case kv.StorageDomain: - storageIt := tx.aggCtx.StorageHistoricalStateRange(asOfTs, fromKey, toKey, limit, tx) - storageIt1 := iter.TransformKV(storageIt, func(k, v []byte) ([]byte, []byte, error) { - return k, v, nil - }) - - accData, err := tx.GetOne(kv.PlainState, fromKey[:20]) - if err != nil { - return nil, err - } - inc, err := tx.db.parseInc(accData) - if err != nil { - return nil, err - } - startkey := make([]byte, length.Addr+length.Incarnation+length.Hash) - copy(startkey, fromKey[:20]) - binary.BigEndian.PutUint64(startkey[length.Addr:], inc) - copy(startkey[length.Addr+length.Incarnation:], fromKey[20:]) - - toPrefix := make([]byte, length.Addr+length.Incarnation) - copy(toPrefix, fromKey[:20]) - binary.BigEndian.PutUint64(toPrefix[length.Addr:], inc+1) - - it2, err := tx.RangeAscend(kv.PlainState, startkey, toPrefix, limit) - if err != nil { - return nil, err - } - it3 := iter.TransformKV(it2, func(k, v []byte) ([]byte, []byte, error) { - return append(append([]byte{}, k[:20]...), k[28:]...), v, nil - }) - it = iter.UnionKV(storageIt1, it3, limit) + //storageIt := tx.aggCtx.StorageHistoricalStateRange(asOfTs, fromKey, toKey, limit, tx) + //storageIt1 := iter.TransformKV(storageIt, func(k, v []byte) ([]byte, []byte, error) { + // return k, v, nil + //}) + + //accData, err := tx.GetOne(kv.PlainState, fromKey[:20]) + //if err != nil { + // return nil, err + //} + //inc, err := tx.db.parseInc(accData) + //if err != nil { + // return nil, err + //} + //startkey := make([]byte, length.Addr+length.Incarnation+length.Hash) + //copy(startkey, fromKey[:20]) + //binary.BigEndian.PutUint64(startkey[length.Addr:], inc) + //copy(startkey[length.Addr+length.Incarnation:], fromKey[20:]) + // + //toPrefix := make([]byte, length.Addr+length.Incarnation) + //copy(toPrefix, fromKey[:20]) + //binary.BigEndian.PutUint64(toPrefix[length.Addr:], inc+1) + + //it2, err := tx.RangeAscend(kv.PlainState, startkey, toPrefix, limit) + //if err != nil { + // return nil, err + //} + //it3 := iter.TransformKV(it2, func(k, v []byte) ([]byte, []byte, error) { + // return append(append([]byte{}, k[:20]...), k[28:]...), v, nil + //}) + //it = iter.UnionKV(storageIt1, it3, limit) case kv.CodeDomain: panic("not implemented yet") default: @@ -300,7 +241,7 @@ func (tx *Tx) DomainRange(name kv.Domain, fromKey, toKey []byte, asOfTs uint64, return it, nil } func (tx *Tx) DomainGet(name kv.Domain, key, key2 []byte) (v []byte, ok bool, err error) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") } switch name { @@ -318,49 +259,52 @@ func (tx *Tx) DomainGet(name kv.Domain, key, key2 []byte) (v []byte, ok bool, er } } func (tx *Tx) DomainGetAsOf(name kv.Domain, key, key2 []byte, ts uint64) (v []byte, ok bool, err error) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") } - switch name { - case kv.AccountsDomain: - v, ok, err = tx.HistoryGet(kv.AccountsHistory, key, ts) - if err != nil { - return nil, false, err - } - if ok { - return v, true, nil - } - v, err = tx.GetOne(kv.PlainState, key) - if len(v) > 0 { - v, err = accounts.ConvertV2toV3(v) + /* + switch name { + case kv.AccountsDomain: + v, ok, err = tx.HistoryGet(kv.AccountsHistory, key, ts) if err != nil { return nil, false, err } + if ok { + return v, true, nil + } + v, err = tx.GetOne(kv.PlainState, key) + if len(v) > 0 { + v, err = accounts.ConvertV2toV3(v) + if err != nil { + return nil, false, err + } + } + return v, v != nil, err + case kv.StorageDomain: + v, ok, err = tx.HistoryGet(kv.StorageHistory, append(key[:20], key2...), ts) + if err != nil { + return nil, false, err + } + if ok { + return v, true, nil + } + v, err = tx.GetOne(kv.PlainState, append(key, key2...)) + return v, v != nil, err + case kv.CodeDomain: + v, ok, err = tx.HistoryGet(kv.CodeHistory, key, ts) + if err != nil { + return nil, false, err + } + if ok { + return v, true, nil + } + v, err = tx.GetOne(kv.Code, key2) + return v, v != nil, err + default: + panic(fmt.Sprintf("unexpected: %s", name)) } - return v, v != nil, err - case kv.StorageDomain: - v, ok, err = tx.HistoryGet(kv.StorageHistory, append(key[:20], key2...), ts) - if err != nil { - return nil, false, err - } - if ok { - return v, true, nil - } - v, err = tx.GetOne(kv.PlainState, append(key, key2...)) - return v, v != nil, err - case kv.CodeDomain: - v, ok, err = tx.HistoryGet(kv.CodeHistory, key, ts) - if err != nil { - return nil, false, err - } - if ok { - return v, true, nil - } - v, err = tx.GetOne(kv.Code, key2) - return v, v != nil, err - default: - panic(fmt.Sprintf("unexpected: %s", name)) - } + */ + panic("not implemented yet") } func (tx *Tx) HistoryGet(name kv.History, key []byte, ts uint64) (v []byte, ok bool, err error) { @@ -445,43 +389,3 @@ func (tx *Tx) HistoryRange(name kv.History, fromTs, toTs int, asc order.By, limi } return it, err } - -// TODO: need remove `gspec` param (move SystemContractCodeLookup feature somewhere) -func NewTestDB(tb testing.TB, dirs datadir.Dirs, gspec *types.Genesis) (histV3 bool, db kv.RwDB, agg *state.AggregatorV3) { - historyV3 := ethconfig.EnableHistoryV3InTest - logger := log.New() - ctx := context.Background() - - if tb != nil { - db = memdb.NewTestDB(tb) - } else { - db = memdb.New(dirs.DataDir) - } - _ = db.UpdateNosync(context.Background(), func(tx kv.RwTx) error { - _, _ = kvcfg.HistoryV3.WriteOnce(tx, historyV3) - return nil - }) - - if historyV3 { - var err error - dir.MustExist(dirs.SnapHistory) - agg, err = state.NewAggregatorV3(ctx, dirs.SnapHistory, dirs.Tmp, ethconfig.HistoryV3AggregationStep, db, logger) - if err != nil { - panic(err) - } - if err := agg.OpenFolder(); err != nil { - panic(err) - } - - var sc map[common.Address][]common.CodeRecord - if gspec != nil { - sc = systemcontracts.SystemContractCodeLookup[gspec.Config.ChainName] - } - - db, err = New(db, agg, sc) - if err != nil { - panic(err) - } - } - return historyV3, db, agg -} diff --git a/erigon-lib/kv/temporal/temporaltest/kv_temporal_testdb.go b/erigon-lib/kv/temporal/temporaltest/kv_temporal_testdb.go new file mode 100644 index 00000000000..baab298e2d4 --- /dev/null +++ b/erigon-lib/kv/temporal/temporaltest/kv_temporal_testdb.go @@ -0,0 +1,51 @@ +package temporaltest + +import ( + "context" + "testing" + + "github.com/ledgerwatch/erigon-lib/common/datadir" + "github.com/ledgerwatch/erigon-lib/common/dir" + "github.com/ledgerwatch/erigon-lib/config3" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/kvcfg" + "github.com/ledgerwatch/erigon-lib/kv/memdb" + "github.com/ledgerwatch/erigon-lib/kv/temporal" + "github.com/ledgerwatch/erigon-lib/state" + "github.com/ledgerwatch/log/v3" +) + +//nolint:thelper +func NewTestDB(tb testing.TB, dirs datadir.Dirs) (histV3 bool, db kv.RwDB, agg *state.Aggregator) { + historyV3 := config3.EnableHistoryV3InTest + logger := log.New() + ctx := context.Background() + + if tb != nil { + db = memdb.NewTestDB(tb) + } else { + db = memdb.New(dirs.DataDir) + } + _ = db.UpdateNosync(context.Background(), func(tx kv.RwTx) error { + _, _ = kvcfg.HistoryV3.WriteOnce(tx, historyV3) + return nil + }) + + if historyV3 { + var err error + dir.MustExist(dirs.SnapHistory) + agg, err = state.NewAggregator(ctx, dirs.SnapHistory, dirs.Tmp, config3.HistoryV3AggregationStep, db, logger) + if err != nil { + panic(err) + } + if err := agg.OpenFolder(); err != nil { + panic(err) + } + + db, err = temporal.New(db, agg) + if err != nil { + panic(err) + } + } + return historyV3, db, agg +} diff --git a/erigon-lib/recsplit/index.go b/erigon-lib/recsplit/index.go index c10fa0205d4..eb36a3f6b3e 100644 --- a/erigon-lib/recsplit/index.go +++ b/erigon-lib/recsplit/index.go @@ -19,6 +19,7 @@ package recsplit import ( "bufio" "encoding/binary" + "errors" "fmt" "math" "math/bits" @@ -37,6 +38,36 @@ import ( "github.com/ledgerwatch/erigon-lib/recsplit/eliasfano32" ) +type Features byte + +const ( + No Features = 0b0 + + // Enums - To build 2-lvl index with perfect hash table pointing to enumeration and enumeration pointing to offsets + Enums Features = 0b1 + // LessFalsePositives - Reduce false-positives to 1/256=0.4% in cost of 1byte per key + // Implementation: + // PerfectHashMap - does false-positives if unknown key is requested. But "false-positives itself" is not a problem. + // Problem is "nature of false-positives" - they are randomly/smashed across .seg files. + // It makes .seg files "warm" - which is bad because they are big and + // data-locality of touches is bad (and maybe need visit a lot of shards to find key). + // Can add build-in "existence filter" (like bloom/cucko/ribbon/xor-filter/fuse-filter) it will improve + // data-locality - filters are small-enough and existance-chekcs will be co-located on disk. + // But there are 2 additional properties we have in our data: + // "keys are known", "keys are hashed" (.idx works on murmur3), ".idx can calc key-number by key". + // It means: if we rely on this properties then we can do better than general-purpose-existance-filter. + // Seems just an "array of 1-st bytes of key-hashes" is great alternative: + // general-purpose-filter: 9bits/key, 0.3% false-positives, 3 mem access + // first-bytes-array: 8bits/key, 1/256=0.4% false-positives, 1 mem access + // + // See also: https://github.com/ledgerwatch/erigon/issues/9486 + LessFalsePositives Features = 0b10 // +) + +// SupportedFeaturs - if see feature not from this list (likely after downgrade) - return IncompatibleErr and recommend for user manually delete file +var SupportedFeatures = []Features{Enums, LessFalsePositives} +var IncompatibleErr = errors.New("incompatible. can re-build such files by command 'erigon snapshots index'") + // Index implements index lookup from the file created by the RecSplit type Index struct { offsetEf *eliasfano32.EliasFano @@ -64,6 +95,9 @@ type Index struct { primaryAggrBound uint16 // The lower bound for primary key aggregation (computed from leafSize) enums bool + lessFalsePositives bool + existence []byte + readers *sync.Pool } @@ -106,7 +140,7 @@ func OpenIndex(indexFilePath string) (*Index, error) { offset := 16 + 1 + int(idx.keyCount)*idx.bytesPerRec if offset < 0 { - return nil, fmt.Errorf("offset is: %d which is below zero, the file: %s is broken", offset, indexFilePath) + return nil, fmt.Errorf("file %s %w. offset is: %d which is below zero", fName, IncompatibleErr, offset) } // Bucket count, bucketSize, leafSize @@ -133,12 +167,28 @@ func OpenIndex(indexFilePath string) (*Index, error) { idx.startSeed[i] = binary.BigEndian.Uint64(idx.data[offset:]) offset += 8 } - idx.enums = idx.data[offset] != 0 + features := Features(idx.data[offset]) + if err := onlyKnownFeatures(features); err != nil { + return nil, fmt.Errorf("file %s %w", fName, err) + } + + idx.enums = features&Enums != No + idx.lessFalsePositives = features&LessFalsePositives != No offset++ - if idx.enums { + if idx.enums && idx.keyCount > 0 { var size int idx.offsetEf, size = eliasfano32.ReadEliasFano(idx.data[offset:]) offset += size + + if idx.lessFalsePositives { + arrSz := binary.BigEndian.Uint64(idx.data[offset:]) + offset += 8 + if arrSz != idx.keyCount { + return nil, fmt.Errorf("%w. size of existence filter %d != keys count %d", IncompatibleErr, arrSz, idx.keyCount) + } + idx.existence = idx.data[offset : offset+int(arrSz)] + offset += int(arrSz) + } } // Size of golomb rice params golombParamSize := binary.BigEndian.Uint16(idx.data[offset:]) @@ -169,6 +219,16 @@ func OpenIndex(indexFilePath string) (*Index, error) { return idx, nil } +func onlyKnownFeatures(features Features) error { + for _, f := range SupportedFeatures { + features = features &^ f + } + if features != No { + return fmt.Errorf("%w. unknown features bitmap: %b", IncompatibleErr, features) + } + return nil +} + func (idx *Index) DataHandle() unsafe.Pointer { return unsafe.Pointer(&idx.data[0]) } @@ -219,13 +279,13 @@ func (idx *Index) KeyCount() uint64 { } // Lookup is not thread-safe because it used id.hasher -func (idx *Index) Lookup(bucketHash, fingerprint uint64) uint64 { +func (idx *Index) Lookup(bucketHash, fingerprint uint64) (uint64, bool) { if idx.keyCount == 0 { _, fName := filepath.Split(idx.filePath) panic("no Lookup should be done when keyCount==0, please use Empty function to guard " + fName) } if idx.keyCount == 1 { - return 0 + return 0, true } var gr GolombRiceReader gr.data = idx.grData @@ -282,7 +342,11 @@ func (idx *Index) Lookup(bucketHash, fingerprint uint64) uint64 { rec := int(cumKeys) + int(remap16(remix(fingerprint+idx.startSeed[level]+b), m)) pos := 1 + 8 + idx.bytesPerRec*(rec+1) - return binary.BigEndian.Uint64(idx.data[pos:]) & idx.recMask + found := binary.BigEndian.Uint64(idx.data[pos:]) & idx.recMask + if idx.lessFalsePositives { + return found, idx.existence[found] == byte(bucketHash) + } + return found, true } // OrdinalLookup returns the offset of i-th element in the index @@ -292,6 +356,13 @@ func (idx *Index) OrdinalLookup(i uint64) uint64 { return idx.offsetEf.Get(i) } +func (idx *Index) Has(bucketHash, i uint64) bool { + if idx.lessFalsePositives { + return idx.existence[i] == byte(bucketHash) + } + return true +} + func (idx *Index) ExtractOffsets() map[uint64]uint64 { m := map[uint64]uint64{} pos := 1 + 8 + idx.bytesPerRec diff --git a/erigon-lib/recsplit/index_reader.go b/erigon-lib/recsplit/index_reader.go index 0ad10ea0960..412e4485afe 100644 --- a/erigon-lib/recsplit/index_reader.go +++ b/erigon-lib/recsplit/index_reader.go @@ -55,20 +55,20 @@ func (r *IndexReader) sum2(key1, key2 []byte) (uint64, uint64) { } // Lookup wraps index Lookup -func (r *IndexReader) Lookup(key []byte) uint64 { +func (r *IndexReader) Lookup(key []byte) (uint64, bool) { bucketHash, fingerprint := r.sum(key) if r.index != nil { return r.index.Lookup(bucketHash, fingerprint) } - return 0 + return 0, true } -func (r *IndexReader) Lookup2(key1, key2 []byte) uint64 { +func (r *IndexReader) Lookup2(key1, key2 []byte) (uint64, bool) { bucketHash, fingerprint := r.sum2(key1, key2) if r.index != nil { return r.index.Lookup(bucketHash, fingerprint) } - return 0 + return 0, true } func (r *IndexReader) Empty() bool { diff --git a/erigon-lib/recsplit/index_test.go b/erigon-lib/recsplit/index_test.go index 849cdb710be..3e23dc4233b 100644 --- a/erigon-lib/recsplit/index_test.go +++ b/erigon-lib/recsplit/index_test.go @@ -25,6 +25,7 @@ import ( "testing" "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -72,9 +73,28 @@ func TestReWriteIndex(t *testing.T) { defer reidx.Close() for i := 0; i < 100; i++ { reader := NewIndexReader(reidx) - offset := reader.Lookup([]byte(fmt.Sprintf("key %d", i))) + offset, _ := reader.Lookup([]byte(fmt.Sprintf("key %d", i))) if offset != uint64(i*3965) { t.Errorf("expected offset: %d, looked up: %d", i*3965, offset) } } } + +func TestForwardCompatibility(t *testing.T) { + t.Run("features_are_optional", func(t *testing.T) { + var features Features + err := onlyKnownFeatures(features) + assert.NoError(t, err) + }) + t.Run("allow_known", func(t *testing.T) { + features := No | Enums + err := onlyKnownFeatures(features) + assert.NoError(t, err) + assert.Equal(t, No|Enums, features) //no side-effects + }) + t.Run("disallow_unknown", func(t *testing.T) { + features := Features(0xff) + err := onlyKnownFeatures(features) + assert.ErrorIs(t, err, IncompatibleErr) + }) +} diff --git a/erigon-lib/recsplit/recsplit.go b/erigon-lib/recsplit/recsplit.go index be44bd20f48..baf93e8e676 100644 --- a/erigon-lib/recsplit/recsplit.go +++ b/erigon-lib/recsplit/recsplit.go @@ -66,11 +66,15 @@ func remix(z uint64) uint64 { type RecSplit struct { hasher murmur3.Hash128 // Salted hash function to use for splitting into initial buckets and mapping to 64-bit fingerprints offsetCollector *etl.Collector // Collector that sorts by offsets + indexW *bufio.Writer indexF *os.File offsetEf *eliasfano32.EliasFano // Elias Fano instance for encoding the offsets bucketCollector *etl.Collector // Collector that sorts by buckets + existenceF *os.File + existenceW *bufio.Writer + indexFileName string indexFile, tmpFilePath string @@ -86,7 +90,7 @@ type RecSplit struct { golombRice []uint32 bucketSizeAcc []uint64 // Bucket size accumulator // Helper object to encode the sequence of cumulative number of keys in the buckets - // and the sequence of of cumulative bit offsets of buckets in the Golomb-Rice code. + // and the sequence of cumulative bit offsets of buckets in the Golomb-Rice code. ef eliasfano16.DoubleEliasFano lvl log.Lvl bytesPerRec int @@ -108,6 +112,7 @@ type RecSplit struct { numBuf [8]byte collision bool enums bool // Whether to build two level index with perfect hash table pointing to enumeration and enumeration pointing to offsets + lessFalsePositives bool built bool // Flag indicating that the hash function has been built and no more keys can be added trace bool logger log.Logger @@ -119,7 +124,8 @@ type RecSplitArgs struct { // Whether two level index needs to be built, where perfect hash map points to an enumeration, and enumeration points to offsets // if Enum=false: can have unsorted and duplicated values // if Enum=true: must have sorted values (can have duplicates) - monotonically growing sequence - Enums bool + Enums bool + LessFalsePositives bool IndexFile string // File name where the index and the minimal perfect hash function will be written to TmpDir string @@ -174,6 +180,15 @@ func NewRecSplit(args RecSplitArgs, logger log.Logger) (*RecSplit, error) { rs.offsetCollector = etl.NewCollector(RecSplitLogPrefix+" "+fname, rs.tmpDir, etl.NewSortableBuffer(rs.etlBufLimit), logger) rs.offsetCollector.LogLvl(log.LvlDebug) } + rs.lessFalsePositives = args.LessFalsePositives + if rs.enums && args.KeyCount > 0 && rs.lessFalsePositives { + bufferFile, err := os.CreateTemp(rs.tmpDir, "erigon-lfp-buf-") + if err != nil { + return nil, err + } + rs.existenceF = bufferFile + rs.existenceW = bufio.NewWriter(rs.existenceF) + } rs.currentBucket = make([]uint64, 0, args.BucketSize) rs.currentBucketOffs = make([]uint64, 0, args.BucketSize) rs.maxOffset = 0 @@ -198,6 +213,9 @@ func (rs *RecSplit) Close() { if rs.indexF != nil { rs.indexF.Close() } + if rs.existenceF != nil { + rs.existenceF.Close() + } if rs.bucketCollector != nil { rs.bucketCollector.Close() } @@ -214,8 +232,8 @@ func (rs *RecSplit) SetTrace(trace bool) { // remap converts the number x which is assumed to be uniformly distributed over the range [0..2^64) to the number that is uniformly // distributed over the range [0..n) -func remap(x uint64, n uint64) uint64 { - hi, _ := bits.Mul64(x, n) +func remap(x uint64, n uint64) (hi uint64) { + hi, _ = bits.Mul64(x, n) return hi } @@ -264,6 +282,8 @@ func splitParams(m, leafSize, primaryAggrBound, secondaryAggrBound uint16) (fano return } +var golombBaseLog2 = -math.Log((math.Sqrt(5) + 1.0) / 2.0) + func computeGolombRice(m uint16, table []uint32, leafSize, primaryAggrBound, secondaryAggrBound uint16) { fanout, unit := splitParams(m, leafSize, primaryAggrBound, secondaryAggrBound) k := make([]uint16, fanout) @@ -277,7 +297,7 @@ func computeGolombRice(m uint16, table []uint32, leafSize, primaryAggrBound, sec sqrtProd *= math.Sqrt(float64(k[i])) } p := math.Sqrt(float64(m)) / (math.Pow(2*math.Pi, (float64(fanout)-1.)/2.0) * sqrtProd) - golombRiceLength := uint32(math.Ceil(math.Log2(-math.Log((math.Sqrt(5)+1.0)/2.0) / math.Log1p(-p)))) // log2 Golomb modulus + golombRiceLength := uint32(math.Ceil(math.Log2(golombBaseLog2 / math.Log1p(-p)))) // log2 Golomb modulus if golombRiceLength > 0x1F { panic("golombRiceLength > 0x1F") } @@ -303,8 +323,7 @@ func computeGolombRice(m uint16, table []uint32, leafSize, primaryAggrBound, sec // salt for the part of the hash function separating m elements. It is based on // calculations with assumptions that we draw hash functions at random func (rs *RecSplit) golombParam(m uint16) int { - s := uint16(len(rs.golombRice)) - for m >= s { + for s := uint16(len(rs.golombRice)); m >= s; s++ { rs.golombRice = append(rs.golombRice, 0) // For the case where bucket is larger than planned if s == 0 { @@ -314,7 +333,6 @@ func (rs *RecSplit) golombParam(m uint16) int { } else { computeGolombRice(s, rs.golombRice, rs.leafSize, rs.primaryAggrBound, rs.secondaryAggrBound) } - s++ } return int(rs.golombRice[m] >> 27) } @@ -350,6 +368,12 @@ func (rs *RecSplit) AddKey(key []byte, offset uint64) error { if err := rs.bucketCollector.Collect(rs.bucketKeyBuf[:], rs.numBuf[:]); err != nil { return err } + if rs.lessFalsePositives { + //1 byte from each hashed key + if err := rs.existenceW.WriteByte(byte(hi)); err != nil { + return err + } + } } else { if err := rs.bucketCollector.Collect(rs.bucketKeyBuf[:], rs.numBuf[:]); err != nil { return err @@ -430,7 +454,7 @@ func (rs *RecSplit) recsplit(level int, bucket []uint64, offsets []uint64, unary salt := rs.startSeed[level] m := uint16(len(bucket)) if m <= rs.leafSize { - // No need to build aggregation levels - just find find bijection + // No need to build aggregation levels - just find bijection var mask uint32 for { mask = 0 @@ -561,7 +585,7 @@ func (rs *RecSplit) Build(ctx context.Context) error { return fmt.Errorf("create index file %s: %w", rs.indexFile, err) } - rs.logger.Debug("[index] created", "file", rs.tmpFilePath, "fs", rs.indexF) + rs.logger.Debug("[index] created", "file", rs.tmpFilePath) defer rs.indexF.Close() rs.indexW = bufio.NewWriterSize(rs.indexF, etl.BufIOSize) @@ -607,7 +631,7 @@ func (rs *RecSplit) Build(ctx context.Context) error { if rs.lvl < log.LvlTrace { log.Log(rs.lvl, "[index] write", "file", rs.indexFileName) } - if rs.enums { + if rs.enums && rs.keysAdded > 0 { rs.offsetEf = eliasfano32.NewEliasFano(rs.keysAdded, rs.maxOffset) defer rs.offsetCollector.Close() if err := rs.offsetCollector.Load(nil, "", rs.loadFuncOffset, etl.TransformArgs{}); err != nil { @@ -649,21 +673,26 @@ func (rs *RecSplit) Build(ctx context.Context) error { } } + var features Features if rs.enums { - if err := rs.indexW.WriteByte(1); err != nil { - return fmt.Errorf("writing enums = true: %w", err) - } - } else { - if err := rs.indexW.WriteByte(0); err != nil { - return fmt.Errorf("writing enums = true: %w", err) + features |= Enums + if rs.lessFalsePositives { + features |= LessFalsePositives } } - if rs.enums { + if err := rs.indexW.WriteByte(byte(features)); err != nil { + return fmt.Errorf("writing enums = true: %w", err) + } + if rs.enums && rs.keysAdded > 0 { // Write out elias fano for offsets if err := rs.offsetEf.Write(rs.indexW); err != nil { return fmt.Errorf("writing elias fano for offsets: %w", err) } } + if err := rs.flushExistenceFilter(); err != nil { + return err + } + // Write out the size of golomb rice params binary.BigEndian.PutUint16(rs.numBuf[:], uint16(len(rs.golombRice))) if _, err := rs.indexW.Write(rs.numBuf[:4]); err != nil { @@ -696,6 +725,31 @@ func (rs *RecSplit) Build(ctx context.Context) error { return nil } +func (rs *RecSplit) flushExistenceFilter() error { + if !rs.enums || rs.keysAdded == 0 || !rs.lessFalsePositives { + return nil + } + defer rs.existenceF.Close() + + //Write len of array + binary.BigEndian.PutUint64(rs.numBuf[:], rs.keysAdded) + if _, err := rs.indexW.Write(rs.numBuf[:]); err != nil { + return err + } + + // flush bufio and rewind before io.Copy, but no reason to fsync the file - it temporary + if err := rs.existenceW.Flush(); err != nil { + return err + } + if _, err := rs.existenceF.Seek(0, io.SeekStart); err != nil { + return err + } + if _, err := io.CopyN(rs.indexW, rs.existenceF, int64(rs.keysAdded)); err != nil { + return err + } + return nil +} + func (rs *RecSplit) DisableFsync() { rs.noFsync = true } // Fsync - other processes/goroutines must see only "fully-complete" (valid) files. No partial-writes. diff --git a/erigon-lib/recsplit/recsplit_fuzz_test.go b/erigon-lib/recsplit/recsplit_fuzz_test.go index ef2f58b9dc0..c31dbee4bc8 100644 --- a/erigon-lib/recsplit/recsplit_fuzz_test.go +++ b/erigon-lib/recsplit/recsplit_fuzz_test.go @@ -83,7 +83,7 @@ func FuzzRecSplit(f *testing.F) { bits := make([]uint64, bitCount) reader := NewIndexReader(idx) for i = 0; i < len(in)-l; i += l { - off = reader.Lookup(in[i : i+l]) + off, _ = reader.Lookup(in[i : i+l]) if int(off) >= count { t.Errorf("off %d >= count %d", off, count) } diff --git a/erigon-lib/recsplit/recsplit_test.go b/erigon-lib/recsplit/recsplit_test.go index ab4f818ebb1..9d4c4c4cc2f 100644 --- a/erigon-lib/recsplit/recsplit_test.go +++ b/erigon-lib/recsplit/recsplit_test.go @@ -127,7 +127,7 @@ func TestIndexLookup(t *testing.T) { defer idx.Close() for i := 0; i < 100; i++ { reader := NewIndexReader(idx) - offset := reader.Lookup([]byte(fmt.Sprintf("key %d", i))) + offset, _ := reader.Lookup([]byte(fmt.Sprintf("key %d", i))) if offset != uint64(i*17) { t.Errorf("expected offset: %d, looked up: %d", i*17, offset) } @@ -138,14 +138,16 @@ func TestTwoLayerIndex(t *testing.T) { logger := log.New() tmpDir := t.TempDir() indexFile := filepath.Join(tmpDir, "index") + salt := uint32(1) rs, err := NewRecSplit(RecSplitArgs{ - KeyCount: 100, - BucketSize: 10, - Salt: 0, - TmpDir: tmpDir, - IndexFile: indexFile, - LeafSize: 8, - Enums: true, + KeyCount: 100, + BucketSize: 10, + Salt: salt, + TmpDir: tmpDir, + IndexFile: indexFile, + LeafSize: 8, + Enums: true, + LessFalsePositives: true, }, logger) if err != nil { t.Fatal(err) @@ -163,7 +165,7 @@ func TestTwoLayerIndex(t *testing.T) { defer idx.Close() for i := 0; i < 100; i++ { reader := NewIndexReader(idx) - e := reader.Lookup([]byte(fmt.Sprintf("key %d", i))) + e, _ := reader.Lookup([]byte(fmt.Sprintf("key %d", i))) if e != uint64(i) { t.Errorf("expected enumeration: %d, lookup up: %d", i, e) } diff --git a/erigon-lib/sais/README.md b/erigon-lib/sais/README.md deleted file mode 100644 index 60b21535685..00000000000 --- a/erigon-lib/sais/README.md +++ /dev/null @@ -1,2 +0,0 @@ -sais C code is a fork of sais-lite-LCP by Johannes Fischer: -https://github.com/elventear/sais-lite-lcp diff --git a/erigon-lib/sais/gsa/LICENSE b/erigon-lib/sais/gsa/LICENSE deleted file mode 100644 index 6bce52f179b..00000000000 --- a/erigon-lib/sais/gsa/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Felipe A. Louza, Simon Gog, Guilherme P. Telles - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/erigon-lib/sais/gsa/README.md b/erigon-lib/sais/gsa/README.md deleted file mode 100644 index ec6eb0b3f1c..00000000000 --- a/erigon-lib/sais/gsa/README.md +++ /dev/null @@ -1,2 +0,0 @@ -gsacak C code is a fork of gsa-is: -https://github.com/felipelouza/gsa-is diff --git a/erigon-lib/sais/gsa/gsa_test.go b/erigon-lib/sais/gsa/gsa_test.go deleted file mode 100644 index 20bb9a68422..00000000000 --- a/erigon-lib/sais/gsa/gsa_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package gsa - -import ( - "fmt" - "testing" - - "github.com/ledgerwatch/erigon-lib/sais" - "github.com/stretchr/testify/assert" -) - -func TestExampleGSA(t *testing.T) { - R := [][]byte{ - []byte("hihi"), - []byte("alexhihialex"), - []byte("alex"), - } - str, n := ConcatAll(R) - sa := make([]uint, n) - lcp := make([]int, n) - da := make([]int32, n) - _ = GSA(str, sa, lcp, da) - - fmt.Printf("sa: %d, lcp: %d\n", sa, lcp) - PrintArrays(str, sa, lcp, da) - PrintRepeats(str, sa, da) - gsa := SA2GSA(sa, da) - fmt.Printf("gsa: %d, da: %d\n", gsa, da) -} - -func TestGSA(t *testing.T) { - R := [][]byte{{4, 5, 6, 4, 5, 6, 4, 5, 6}} - str, n := ConcatAll(R) - sa := make([]uint, n) - lcp := make([]int, n) - da := make([]int32, n) - _ = GSA(str, sa, lcp, da) - assert.Equal(t, []uint{10, 9, 6, 3, 0, 7, 4, 1, 8, 5, 2}, sa[:n]) -} - -const N = 100_000 - -func BenchmarkName(b *testing.B) { - R := make([][]byte, 0, N) - for i := 0; i < N; i++ { - R = append(R, []byte("hihihi")) - } - superstring := make([]byte, 0, 1024) - - for _, a := range R { - for _, b := range a { - superstring = append(superstring, 1, b) - } - superstring = append(superstring, 0, 0) - } - - sa := make([]int32, len(superstring)) - b.ResetTimer() - for i := 0; i < b.N; i++ { - err := sais.Sais(superstring, sa) - if err != nil { - panic(err) - } - } -} -func BenchmarkName2(b *testing.B) { - R := make([][]byte, 0, N) - for i := 0; i < N; i++ { - R = append(R, []byte("hihihi")) - } - str, n := ConcatAll(R) - sa := make([]uint, n) - lcp := make([]int, n) - da := make([]int32, n) - b.ResetTimer() - for i := 0; i < b.N; i++ { - _ = GSA(str, sa, lcp, da) - } -} diff --git a/erigon-lib/sais/gsa/gsaca.go b/erigon-lib/sais/gsa/gsaca.go deleted file mode 100644 index fe8facdbe23..00000000000 --- a/erigon-lib/sais/gsa/gsaca.go +++ /dev/null @@ -1,169 +0,0 @@ -package gsa - -/* -#include "gsacak.h" -#cgo CFLAGS: -DTERMINATOR=0 -DM64=1 -Dm64=1 -std=c99 -*/ -import "C" -import ( - "fmt" - "unsafe" -) - -// Implementation from https://github.com/felipelouza/gsufsort -// see also: https://almob.biomedcentral.com/track/pdf/10.1186/s13015-020-00177-y.pdf -// see also: https://almob.biomedcentral.com/track/pdf/10.1186/s13015-017-0117-9.pdf -func PrintArrays(str []byte, sa []uint, lcp []int, da []int32) { - // remove terminator - n := len(sa) - 1 - sa = sa[1:] - lcp = lcp[1:] - da = da[1:] - - fmt.Printf("i\t") - fmt.Printf("sa\t") - if lcp != nil { - fmt.Printf("lcp\t") - } - if da != nil { - fmt.Printf("gsa\t") - } - fmt.Printf("suffixes\t") - fmt.Printf("\n") - for i := 0; i < n; i++ { - fmt.Printf("%d\t", i) - fmt.Printf("%d\t", sa[i]) - if lcp != nil { - fmt.Printf("%d\t", lcp[i]) - } - - if da != nil { // gsa - value := sa[i] - if da[i] != 0 { - value = sa[i] - sa[da[i]-1] - 1 - } - fmt.Printf("(%d %d)\t", da[i], value) - } - //bwt - // char c = (SA[i])? T[SA[i]-1]-1:terminal; - // if(c==0) c = '$'; - // printf("%c\t",c); - - for j := sa[i]; int(j) < n; j++ { - if str[j] == 1 { - fmt.Printf("$") - break - } else if str[j] == 0 { - fmt.Printf("#") - } else { - fmt.Printf("%c", str[j]-1) - } - } - fmt.Printf("\n") - } -} - -// nolint -// SA2GSA - example func to convert SA+DA to GSA -func SA2GSA(sa []uint, da []int32) []uint { - // remove terminator - sa = sa[1:] - da = da[1:] - n := len(sa) - 1 - - gsa := make([]uint, n) - copy(gsa, sa) - - for i := 0; i < n; i++ { - if da[i] != 0 { - gsa[i] = sa[i] - sa[da[i]-1] - 1 - } - } - return gsa -} - -func PrintRepeats(str []byte, sa []uint, da []int32) { - sa = sa[1:] - da = da[1:] - n := len(sa) - 1 - var repeats int - for i := 0; i < len(da)-1; i++ { - repeats++ - if da[i] < da[i+1] { // same suffix - continue - } - - // new suffix - fmt.Printf(" repeats: %d\t", repeats) - for j := sa[i]; int(j) < n; j++ { - if str[j] == 1 { - //fmt.Printf("$") - break - } else if str[j] == 0 { - fmt.Printf("#") - } else { - fmt.Printf("%c", str[j]-1) - } - } - fmt.Printf("\n") - - repeats = 0 - } -} - -func GSA(data []byte, sa []uint, lcp []int, da []int32) error { - tPtr := unsafe.Pointer(&data[0]) // source "text" - var lcpPtr, saPtr, daPtr unsafe.Pointer - if sa != nil { - saPtr = unsafe.Pointer(&sa[0]) - } - if lcp != nil { - lcpPtr = unsafe.Pointer(&lcp[0]) - } - if da != nil { - daPtr = unsafe.Pointer(&da[0]) - } - depth := C.gsacak( - (*C.uchar)(tPtr), - (*C.uint_t)(saPtr), - (*C.int_t)(lcpPtr), - (*C.int_da)(daPtr), - C.uint_t(len(data)), - ) - _ = depth - return nil -} - -func ConcatAll(R [][]byte) (str []byte, n int) { - for i := 0; i < len(R); i++ { - n += len(R[i]) + 1 - } - - n++ //add 0 at the end - str = make([]byte, n) - var l, max int - k := len(R) - - for i := 0; i < k; i++ { - m := len(R[i]) - if m > max { - max = m - } - for j := 0; j < m; j++ { - if R[i][j] < 255 && R[i][j] > 1 { - str[l] = R[i][j] + 1 - l++ - } - } - if m > 0 { - if str[l-1] > 1 { - str[l] = 1 - l++ - } //add 1 as separator (ignores empty entries) - } - } - str[l] = 0 - l++ - n = l - return str, n -} diff --git a/erigon-lib/sais/gsa/gsacak.c b/erigon-lib/sais/gsa/gsacak.c deleted file mode 100644 index 054ec216676..00000000000 --- a/erigon-lib/sais/gsa/gsacak.c +++ /dev/null @@ -1,2536 +0,0 @@ -// vim: noai:ts=2:sw=2 - -#include "gsacak.h" - -// set only the highest bit as 1, i.e. 1000... -//const unsigned int EMPTY_k=((unsigned int)1)<<(sizeof(unsigned int)*8-1); -const uint_t EMPTY_k=((uint_t)1)<<(sizeof(uint_t)*8-1); - -// get s[i] at a certain level -#define chr(i) (cs==sizeof(int_t)?((int_t*)s)[i]:(cs==sizeof(int_text)?((int_text*)s)[i]:((unsigned char *)s)[i])) - -#define true 1 -#define false 0 - -#define DEPTH 0 // compute time and size of reduced problem for each recursion call -#define PHASES 0 // compute time for each phase -#define RMQ_L 2 //variants = (1, trivial) (2, using Gog's stack) -#define RMQ_S 2 //variants = (1, trivial) (2, using Gog's stack) - -#define STACK_SIZE_L 894 //to use 10Kb of working space -#define STACK_SIZE_S 894 //to use 10Kb of working space - -#define EMPTY_STRING 0 //check if there is an empty string in the input collection - -typedef struct _pair{ - uint_t idx; - int_t lcp; -} t_pair_k; - -int compare_k (const void * a, const void * b){ - if(*(const uint_t *)a < *(const uint_t *)b) return -1; - if(*(const uint_t *)a > *(const uint_t *)b) return 1; -return 0; -} - -void stack_push_k(t_pair_k* STACK, int_t *top, uint_t idx, int_t lcp){ - - STACK[*top].idx=idx; - STACK[*top].lcp=lcp; - - (*top)++; -} - -void compute_lcp_phi_sparse(int_t *s, uint_t *SA1, - uint_t *RA, int_t *LCP, int_t *PLCP, - uint_t n1, int cs, uint_t separator) { - - uint_t i; - - PLCP[SA1[0]]=0;//PLCP* (lms) is stored in PLCP array - for(i=1; i0; i--) { - j=SA[i]; SA[i]=0; - SA[bkt[chr(j)]--]=j; - } - SA[0]=n-1; // set the single sentinel suffix. -} - -void putSuffix0_generalized(uint_t *SA, - uint_t *s, uint_t *bkt, - uint_t n, unsigned int K, int_t n1, int cs, uint_t separator) { - uint_t i, j; - - // find the end of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, true, cs); - - int_t tmp=bkt[separator]--;// shifts one position left of bkt[separator] - - // put the suffixes into their buckets. - for(i=n1-1; i>0; i--) { - j=SA[i]; SA[i]=0; - SA[bkt[chr(j)]--]=j; - } - - // SA[0]=n-1; // set the single sentinel suffix. - - SA[tmp]=SA[0]-1;// insert the last separator at the end of bkt[separator] - -} - -void putSuffix0_generalized_LCP(uint_t *SA, int_t *LCP, - uint_t *s, uint_t *bkt, - uint_t n, unsigned int K, int_t n1, int cs, uint_t separator) { - uint_t i, j; - int_t l; - - // find the end of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, true, cs); - - int_t tmp=bkt[separator]--;// shifts one position left of bkt[separator] - - // put the suffixes into their buckets. - for(i=n1-1; i>0; i--) { - j=SA[i]; SA[i]=U_MAX; - l=LCP[i]; LCP[i]=0; - - SA[bkt[chr(j)]]=j; - LCP[bkt[chr(j)]--]=l; - } - - // SA[0]=n-1; // set the single sentinel suffix. - - SA[tmp]=SA[0]-1;// insert the last separator at the end of bkt[separator] - -} - -void putSuffix0_generalized_DA(uint_t *SA, int_da *DA, - uint_t *s, uint_t *bkt, - uint_t n, unsigned int K, int_t n1, int cs, uint_t separator) { - uint_t i, j; - - // find the end of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, true, cs); - - int_t tmp=bkt[separator]--;// shifts one position left of bkt[separator] - - // put the suffixes into their buckets. - for(i=n1-1; i>0; i--) { - j=SA[i]; SA[i]=0; - SA[bkt[chr(j)]]=j; - DA[bkt[chr(j)]--]=DA[i]; - } - - // SA[0]=n-1; // set the single sentinel suffix. - - SA[tmp]=SA[0]-1;// insert the last separator at the end of bkt[separator] - DA[tmp]= (int_da) tmp-1; - -} - - -void putSuffix0_generalized_LCP_DA(uint_t *SA, int_t *LCP, int_da *DA, - uint_t *s, uint_t *bkt, - uint_t n, unsigned int K, int_t n1, int cs, uint_t separator) { - uint_t i, j; - int_t l; - - // find the end of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, true, cs); - - int_t tmp=bkt[separator]--;// shifts one position left of bkt[separator] - - // put the suffixes into their buckets. - for(i=n1-1; i>0; i--) { - j=SA[i]; SA[i]=U_MAX; - l=LCP[i]; LCP[i]=0; - - SA[bkt[chr(j)]]=j; - DA[bkt[chr(j)]]=DA[i]; - LCP[bkt[chr(j)]--]=l; - } - - // SA[0]=n-1; // set the single sentinel suffix. - - SA[tmp]=SA[0]-1;// insert the last separator at the end of bkt[separator] - DA[tmp]= (int_da) tmp-1; -} - -/*****************************************************************************/ - -void induceSAl0(uint_t *SA, - int_t *s, uint_t *bkt, - uint_t n, unsigned int K, int_t suffix, int cs) { - uint_t i, j; - - // find the head of each bucket. - getBuckets_k(s, bkt, n, K, false, cs); - - bkt[0]++; // skip the virtual sentinel. - for(i=0; i0) { - j=SA[i]-1; - if(chr(j)>=chr(j+1)) { - SA[bkt[chr(j)]]=j; - bkt[chr(j)]++; - if(!suffix && i>0) SA[i]=0; - } - } -} - -void induceSAs0(uint_t *SA, - int_t *s, uint_t *bkt, - uint_t n, unsigned int K, int_t suffix, int cs) { - uint_t i, j; - - // find the end of each bucket. - getBuckets_k(s, bkt, n, K, true, cs); - - for(i=n-1; i>0; i--) - if(SA[i]>0) { - j=SA[i]-1; - if(chr(j)<=chr(j+1) && bkt[chr(j)]0) { - j=SA[i]-1; - if(chr(j)>=chr(j+1) ) { - if(chr(j)!=separator)//gsa-is - SA[bkt[chr(j)]++]=j; - if(!suffix && i>0) SA[i]=0; - } - } -} - -void induceSAs0_generalized(uint_t *SA, - uint_t *s, uint_t *bkt, - uint_t n, uint_t K, int_t suffix, int cs, uint_t separator) { - uint_t i, j; - - // find the end of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, true, cs); - - for(i=n-1; i>0; i--) - if(SA[i]>0) { - j=SA[i]-1; - if(chr(j)<=chr(j+1) && bkt[chr(j)]LCP[i]) M[k] = max(0,LCP[i]); - #elif RMQ_L == 2 - int_t min_lcp=0; - uint_t last; - - if(!SA[i]) last = 0; - else{ - last = last_occ[chr(SA[i]-1)]; - last_occ[chr(SA[i]-1)] = i+1; - } - - int_t lcp=max(0,LCP[i]); - while(STACK[(top)-1].lcp>=lcp) (top)--; - - stack_push_k(STACK, &top, i+1, lcp); - j = top-1; - - while(STACK[j].idx>last) j--; - min_lcp=STACK[(j+1)].lcp; - - #endif - - if(SA[i]>0) { - j=SA[i]-1; - if(chr(j)>=chr(j+1)) - if(chr(j)!=separator){//gsa-is - SA[bkt[chr(j)]]=j; - - #if RMQ_L == 1 - LCP[bkt[chr(j)]]+=M[chr(j)]+1; - M[chr(j)] = I_MAX; - #elif RMQ_L == 2 - LCP[bkt[chr(j)]]+=min_lcp+1; - #endif - - bkt[chr(j)]++; - } - if(bkt[chr(SA[i])]-1STACK_SIZE_L){//if stack is full - - int_t j; - memcpy(tmp, last_occ, K*sizeof(uint_t)); - qsort(tmp, K, sizeof(uint_t), compare_k); - - int_t curr=1, end=1; - STACK[top].idx=U_MAX; - for(j=0;j=STACK_SIZE_L){ - fprintf(stderr,"ERROR: induceSAl0_LCP\n"); - exit(1); - } - - top = end; - } - #endif - } - } - #if RMQ_L == 1 - free(M); - #elif RMQ_L == 2 - free(STACK); - free(last_occ); - free(tmp); - #endif - -} - -void induceSAs0_generalized_LCP(uint_t *SA, int_t* LCP, - uint_t *s, uint_t *bkt, - uint_t n, uint_t K, int cs, uint_t separator) { - uint_t i, j; - - // find the end of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, true, cs); - - #if RMQ_S == 1 - int_t *M=(int_t *)malloc(sizeof(int_t)*K); - for(i=0;i0; i--){ - if(SA[i]>0) { - j=SA[i]-1; - if(chr(j)<=chr(j+1) && bkt[chr(j)]=0) - LCP[bkt[chr(j)]+1]=M[chr(j)]+1; - - if(LCP[bkt[chr(j)]]>0) - LCP[bkt[chr(j)]]=I_MAX; - - #elif RMQ_S == 2 - int_t min = I_MAX, end = top-1; - - int_t last=last_occ[chr(j)]; - while(STACK[end].idx<=last) end--; - - min=STACK[(end+1)].lcp; - last_occ[chr(j)] = i; - - if(LCP[bkt[chr(j)]+1]>=0) - LCP[bkt[chr(j)]+1]=min+1; - #endif - - - #if RMQ_S == 1 - M[chr(j)] = I_MAX; - #endif - - bkt[chr(j)]--; - - if(SA[bkt[chr(j)]]!=U_MAX) {//L/S-seam - int_t l=0; - while(chr(SA[bkt[chr(j)]+1]+l)==chr(SA[bkt[chr(j)]]+l))++l; - LCP[bkt[chr(j)]+1]=l; - } - } - } - - if(LCP[i]<0) LCP[i]=0; - #if RMQ_S == 1 - int_t k; - for(k=0; kLCP[i]) M[k] = LCP[i]; - #elif RMQ_S == 2 - - int_t lcp=max(0,LCP[i]); - - while(STACK[(top)-1].lcp>=lcp) (top)--; - stack_push_k(STACK, &top, i, lcp); - - if(top>=STACK_SIZE_S){ - - int_t j; - memcpy(tmp, last_occ, K*sizeof(uint_t)); - qsort(tmp, K, sizeof(uint_t), compare_k); - - int_t curr=1, end=1; - - for(j=K-1;j>=0; j--){ - - if(tmp[j] < STACK[end-1].idx){ - - while(STACK[curr].idx>tmp[j] && curr < top) curr++; - if(curr>=top) break; - stack_push_k(STACK, &end, STACK[curr].idx, STACK[curr].lcp); - curr++; - } - } - - if(end>=STACK_SIZE_S){ - fprintf(stderr,"ERROR: induceSAl0_LCP\n"); - exit(1); - } - top = end; - } - #endif - - } - - LCP[0]=0; - - //variant 1 - #if RMQ_S == 1 - free(M); - #elif RMQ_S == 2 - free(STACK); - free(last_occ); - free(tmp); - #endif -} - - -/*****************************************************************************/ - -void induceSAl0_generalized_DA(uint_t *SA, int_da* DA, - uint_t *s, uint_t *bkt, - uint_t n, unsigned int K, int cs, uint_t separator) { - uint_t i, j; - - // find the head of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, false, cs); - - bkt[0]++; // skip the virtual sentinel. - for(i=0; i0) { - j=SA[i]-1; - if(chr(j)>=chr(j+1) ) { - if(chr(j)!=separator){//gsa-is - SA[bkt[chr(j)]]=j; - DA[bkt[chr(j)]++]=DA[i]; - } - } - } -} - -void induceSAs0_generalized_DA(uint_t *SA, int_da* DA, - uint_t *s, uint_t *bkt, - uint_t n, uint_t K, int cs, uint_t separator) { - uint_t i, j; - - // find the end of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, true, cs); - - for(i=n-1; i>0; i--) - if(SA[i]>0) { - j=SA[i]-1; - if(chr(j)<=chr(j+1) && bkt[chr(j)]LCP[i]) M[k] = max(0,LCP[i]); - #elif RMQ_L == 2 - int_t min_lcp=0; - uint_t last; - - if(!SA[i]) last = 0; - else{ - last = last_occ[chr(SA[i]-1)]; - last_occ[chr(SA[i]-1)] = i+1; - } - - int_t lcp=max(0,LCP[i]); - while(STACK[(top)-1].lcp>=lcp) (top)--; - - stack_push_k(STACK, &top, i+1, lcp); - j = top-1; - - while(STACK[j].idx>last) j--; - min_lcp=STACK[(j+1)].lcp; - - #endif - - if(SA[i]>0) { - j=SA[i]-1; - if(chr(j)>=chr(j+1)) - if(chr(j)!=separator){//gsa-is - SA[bkt[chr(j)]]=j; - DA[bkt[chr(j)]]=DA[i]; - - #if RMQ_L == 1 - LCP[bkt[chr(j)]]+=M[chr(j)]+1; - M[chr(j)] = I_MAX; - #elif RMQ_L == 2 - LCP[bkt[chr(j)]]+=min_lcp+1; - #endif - - bkt[chr(j)]++; - } - if(bkt[chr(SA[i])]-1STACK_SIZE_L){//if stack is full - - int_t j; - memcpy(tmp, last_occ, K*sizeof(uint_t)); - qsort(tmp, K, sizeof(uint_t), compare_k); - - int_t curr=1, end=1; - STACK[top].idx=U_MAX; - for(j=0;j=STACK_SIZE_L){ - fprintf(stderr,"ERROR: induceSAl0_LCP\n"); - exit(1); - } - - top = end; - } - #endif - } - } - #if RMQ_L == 1 - free(M); - #elif RMQ_L == 2 - free(STACK); - free(last_occ); - free(tmp); - #endif - -} - -void induceSAs0_generalized_LCP_DA(uint_t *SA, int_t* LCP, int_da* DA, - uint_t *s, uint_t *bkt, - uint_t n, uint_t K, int cs, uint_t separator) { - uint_t i, j; - - // find the end of each bucket. - getBuckets_k((int_t*)s, bkt, n, K, true, cs); - - #if RMQ_S == 1 - int_t *M=(int_t *)malloc(sizeof(int_t)*K); - for(i=0;i0; i--){ - if(SA[i]>0) { - j=SA[i]-1; - if(chr(j)<=chr(j+1) && bkt[chr(j)]=0) - LCP[bkt[chr(j)]+1]=M[chr(j)]+1; - - if(LCP[bkt[chr(j)]]>0) - LCP[bkt[chr(j)]]=I_MAX; - - #elif RMQ_S == 2 - int_t min = I_MAX, end = top-1; - - int_t last=last_occ[chr(j)]; - while(STACK[end].idx<=last) end--; - - min=STACK[(end+1)].lcp; - last_occ[chr(j)] = i; - - if(LCP[bkt[chr(j)]+1]>=0) - LCP[bkt[chr(j)]+1]=min+1; - #endif - - - #if RMQ_S == 1 - M[chr(j)] = I_MAX; - #endif - - bkt[chr(j)]--; - - if(SA[bkt[chr(j)]]!=U_MAX) {//L/S-seam - int_t l=0; - while(chr(SA[bkt[chr(j)]+1]+l)==chr(SA[bkt[chr(j)]]+l))++l; - LCP[bkt[chr(j)]+1]=l; - } - } - } - - if(LCP[i]<0) LCP[i]=0; - #if RMQ_S == 1 - int_t k; - for(k=0; kLCP[i]) M[k] = LCP[i]; - #elif RMQ_S == 2 - - int_t lcp=max(0,LCP[i]); - - while(STACK[(top)-1].lcp>=lcp) (top)--; - stack_push_k(STACK, &top, i, lcp); - - if(top>=STACK_SIZE_S){ - - int_t j; - memcpy(tmp, last_occ, K*sizeof(uint_t)); - qsort(tmp, K, sizeof(uint_t), compare_k); - - int_t curr=1, end=1; - - for(j=K-1;j>=0; j--){ - - if(tmp[j] < STACK[end-1].idx){ - - while(STACK[curr].idx>tmp[j] && curr < top) curr++; - if(curr>=top) break; - stack_push_k(STACK, &end, STACK[curr].idx, STACK[curr].lcp); - curr++; - } - } - - if(end>=STACK_SIZE_S){ - fprintf(stderr,"ERROR: induceSAl0_LCP\n"); - exit(1); - } - top = end; - } - #endif - - } - - LCP[0]=0; - - //variant 1 - #if RMQ_S == 1 - free(M); - #elif RMQ_S == 2 - free(STACK); - free(last_occ); - free(tmp); - #endif -} - - -/*****************************************************************************/ - - -void putSubstr0(uint_t *SA, - int_t *s, uint_t *bkt, - uint_t n, unsigned int K, int cs) { - uint_t i, cur_t, succ_t; - - // find the end of each bucket. - getBuckets_k(s, bkt, n, K, true, cs); - - // set each item in SA as empty. - for(i=0; i0; i--) { - cur_t=(chr(i-1)0; i--) { - cur_t=(chr(i-1)0; i--) { - j=SA[i]; SA[i]=EMPTY_k; - cur=chr(j); - if(cur!=pre) { - pre=cur; pos=cur; - } - SA[pos--]=j; - } -} - -void induceSAl1(int_t *SA, int_t *s, - int_t n, int_t suffix, int cs) { - int_t h, i, j, step=1; - - for(i=0; i=c1; - if(!isL) continue; - - // s[j] is L-type. - - int_t d=SA[c]; - if(d>=0) { - // SA[c] is borrowed by the left - // neighbor bucket. - // shift-left the items in the - // left neighbor bucket. - int_t foo, bar; - foo=SA[c]; - for(h=c-1; SA[h]>=0||SA[h]==EMPTY_k; h--) - { bar=SA[h]; SA[h]=foo; foo=bar; } - SA[h]=foo; - if(hn-1 || SA[pos]!=EMPTY_k) { - // we are running into the right - // neighbor bucket. - // shift-left one step the items - // of bucket(SA, S, j). - for(h=0; h<-d; h++) - SA[c+h]=SA[c+h+1]; - pos--; - if(c(c2=chr(j+2)) || (c1==c2 && c10) { - int_t i1=(step==0)?i-1:i; - SA[i1]=EMPTY_k; - } - } - - // scan to shift-left the items in each bucket - // with its head being reused as a counter. - for(i=1; i0; i-=step) { - step=1; j=SA[i]-1; - if(SA[i]<=0) continue; - int_t c=chr(j), c1=chr(j+1); - int_t isS=(ci); - if(!isS) continue; - - // s[j] is S-type - - int_t d=SA[c]; - if(d>=0) { - // SA[c] is borrowed by the right - // neighbor bucket. - // shift-right the items in the - // right neighbor bucket. - int_t foo, bar; - foo=SA[c]; - for(h=c+1; SA[h]>=0||SA[h]==EMPTY_k; h++) - { bar=SA[h]; SA[h]=foo; foo=bar; } - SA[h]=foo; - if(h>i) step=0; - - d=EMPTY_k; - } - - if(d==EMPTY_k) { // SA[c] is empty. - if(SA[c-1]==EMPTY_k) { - SA[c]=-1; // init the counter. - SA[c-1]=j; - } - else - SA[c]=j; // a size-1 bucket. - } - else { // SA[c] is reused as a counter. - int_t pos=c+d-1; - if(SA[pos]!=EMPTY_k) { - // we are running into the left - // neighbor bucket. - // shift-right one step the items - // of bucket(SA, S, j). - for(h=0; h<-d; h++) - SA[c-h]=SA[c-h-1]; - pos++; - if(c>i) step=0; - } - else - SA[c]--; - - SA[pos]=j; - } - - if(!suffix) { - int_t i1=(step==0)?i+1:i; - SA[i1]=EMPTY_k; - } - } - - // scan to shift-right the items in each bucket - // with its head being reused as a counter. - if(!suffix) - for(i=n-1; i>0; i--) { - j=SA[i]; - if(j<0 && j!=EMPTY_k) { // is SA[i] a counter? - for(h=0; h<-j; h++) - SA[i-h]=SA[i-h-1]; - SA[i-h]=EMPTY_k; - } - } -} - -void putSubstr1(int_t *SA, int_t *s, int_t n, int cs) { - int_t h, i, j; - - for(i=0; i0; i--) { - c=c1; t=t1; - c1=chr(i-1); - t1=c1=0) { - // SA[c] is borrowed by the right - // neighbor bucket. - // shift-right the items in the - // right neighbor bucket. - int_t foo, bar; - foo=SA[c]; - for(h=c+1; SA[h]>=0; h++) - { bar=SA[h]; SA[h]=foo; foo=bar; } - SA[h]=foo; - - SA[c]=EMPTY_k; - } - - int_t d=SA[c]; - if(d==EMPTY_k) { // SA[c] is empty. - if(SA[c-1]==EMPTY_k) { - SA[c]=-1; // init the counter. - SA[c-1]=i; - } - else - SA[c]=i; // a size-1 bucket. - } - else { // SA[c] is reused as a counter - int_t pos=c+d-1; - if(SA[pos]!=EMPTY_k) { - // we are running into the left - // neighbor bucket. - // shift-right one step the items - // of bucket(SA, S, i). - for(h=0; h<-d; h++) - SA[c-h]=SA[c-h-1]; - pos++; - } - else - SA[c]--; - - SA[pos]=i; - } - } - } - - // scan to shift-right the items in each bucket - // with its head being reused as a counter. - for(i=n-1; i>0; i--) { - j=SA[i]; - if(j<0 && j!=EMPTY_k) { // is SA[i] a counter? - for(h=0; h<-j; h++) - SA[i-h]=SA[i-h-1]; - SA[i-h]=EMPTY_k; - } - } - - // put the single sentinel LMS-substring. - SA[0]=n-1; -} - -uint_t getLengthOfLMS(int_t *s, - uint_t n, int level, uint_t x, int cs) { - if(x==n-1) return 1; - - uint_t dist=0, i=1; - while(1) { - if(chr(x+i)n-1 || chr(x+i)>chr(x+i-1)) break; - if(x+i==n-1 || chr(x+i)=n1; i--) - if(SA[i]!=EMPTY_k) SA[j--]=SA[i]; - - // rename each S-type character of the - // interim s1 as the end of its bucket - // to produce the final s1. - succ_t=1; - for(i=n1-1; i>0; i--) { - int_t ch=s1[i], ch1=s1[i-1]; - cur_t=(ch1< ch || (ch1==ch && succ_t==1))?1:0; - if(cur_t==1) { - s1[i-1]+=SA[s1[i-1]]-1; - } - succ_t=cur_t; - } - - return name_ctr; -} - -/*****************************************************************************/ - -uint_t nameSubstr_generalized(uint_t *SA, - uint_t *s, uint_t *s1, uint_t n, - uint_t m, uint_t n1, int level, int cs, uint_t separator) { - uint_t i, j, cur_t, succ_t; - - // init the name array buffer - for(i=n1; i=n1; i--) - if(SA[i]!=EMPTY_k) SA[j--]=SA[i]; - - // rename each S-type character of the - // interim s1 as the end of its bucket - // to produce the final s1. - succ_t=1; - for(i=n1-1; i>0; i--) { - int_t ch=s1[i], ch1=s1[i-1]; - cur_t=(ch1< ch || (ch1==ch && succ_t==1))?1:0; - if(cur_t==1) { - s1[i-1]+=SA[s1[i-1]]-1; - } - succ_t=cur_t; - } - - return name_ctr; -} - -/*****************************************************************************/ - -uint_t nameSubstr_generalized_LCP(uint_t *SA, int_t *LCP, - uint_t *s, uint_t *s1, uint_t n, - uint_t m, uint_t n1, int level, int cs, uint_t separator) { - uint_t i, j, cur_t, succ_t; - - // init the name array buffer - for(i=n1; i=n1; i--) - if(SA[i]!=EMPTY_k) SA[j--]=SA[i]; - - // rename each S-type character of the - // interim s1 as the end of its bucket - // to produce the final s1. - succ_t=1; - for(i=n1-1; i>0; i--) { - int_t ch=s1[i], ch1=s1[i-1]; - cur_t=(ch1< ch || (ch1==ch && succ_t==1))?1:0; - if(cur_t==1) { - s1[i-1]+=SA[s1[i-1]]-1; - } - succ_t=cur_t; - } - - return name_ctr; -} - -/*****************************************************************************/ - -void getSAlms(uint_t *SA, - int_t *s, - uint_t *s1, uint_t n, - uint_t n1, int level, int cs) { - uint_t i, j, cur_t, succ_t; - - j=n1-1; s1[j--]=n-1; - succ_t=0; // s[n-2] must be L-type - for(i=n-2; i>0; i--) { - cur_t=(chr(i-1)0; i--) if(chr(i)==separator)k++; - DA[n1-1]=(int_da) k; -/**/ - - j=n1-1; s1[j--]=n-1; - succ_t=0; // s[n-2] must be L-type - for(i=n-2; i>0; i--) { - - if(chr(i)==separator)k--; - - cur_t=(chr(i-1)0) || (level&&((int_t *)SA)[i]>0)) - SA[n1++]=SA[i]; - - uint_t *SA1=SA, *s1=SA+m-n1; - uint_t name_ctr; - name_ctr=nameSubstr(SA,s,s1,n,m,n1,level,cs); - - #if PHASES - if(!level){ - printf("phase 1:\n"); - time_stop(t_start_phase, c_start_phase); - } - #endif - - #if PHASES - if(!level){ - t_start_phase = time(NULL); - c_start_phase = clock(); - } - #endif - - // stage 2: solve the reduced problem. - int_t depth=1; - // recurse if names are not yet unique. - if(name_ctr0; i--) - if(chr(i)==separator) - SA[bkt[chr(i)]--]=i; - - // now, all the LMS-substrings are sorted and - // stored sparsely in SA. - - // compact all the sorted substrings into - // the first n1 items of SA. - // 2*n1 must be not larger than n. - uint_t n1=0; - for(i=0; i0)) - SA[n1++]=SA[i]; - - uint_t *SA1=SA, *s1=SA+m-n1; - uint_t name_ctr; - name_ctr=nameSubstr_generalized(SA,s,s1,n,m,n1,level,cs,separator); - - #if PHASES - printf("phase 1:\n"); - time_stop(t_start_phase, c_start_phase); - #endif - - #if PHASES - t_start_phase = time(NULL); - c_start_phase = clock(); - #endif - - // stage 2: solve the reduced problem. - int_t depth=1; - // recurse if names are not yet unique. - if(name_ctr0; i--) - if(chr(i)==separator) - SA[bkt[chr(i)]--]=i; - - #if DEBUG - printf("S-type (separators)\n"); - for(i=0; i0)) - SA[n1++]=SA[i]; - - uint_t *SA1=SA, *s1=SA+m-n1; - uint_t name_ctr; - - #if DEBUG - printf("\nSA\n"); - for(i=0; i0; i--) - if(chr(i)==separator) - SA[bkt[chr(i)]--]=i; - - #if DEBUG - printf("S-type (separators)\n"); - for(i=0; i0)) - SA[n1++]=SA[i]; - - uint_t *SA1=SA, *s1=SA+m-n1; - uint_t name_ctr; - - #if DEBUG - printf("\nSA\n"); - for(i=0; i0; i--) - if(chr(i)==separator) - SA[bkt[chr(i)]--]=i; - - #if DEBUG - printf("S-type (separators)\n"); - for(i=0; i0)) - SA[n1++]=SA[i]; - - uint_t *SA1=SA, *s1=SA+m-n1; - uint_t name_ctr; - - #if DEBUG - printf("\nSA\n"); - for(i=0; i -#include -#include -#include -#include -#include - -#define max(a,b) ((a) > (b) ? (a) : (b)) - -#ifndef DEBUG - #define DEBUG 0 -#endif - -#ifndef M64 - #define M64 1 -#endif - -#if M64 - typedef int64_t int_t; - typedef uint64_t uint_t; - #define PRIdN PRId64 - #define U_MAX UINT64_MAX - #define I_MAX INT64_MAX - #define I_MIN INT64_MIN -#else - typedef int32_t int_t; - typedef uint32_t uint_t; - #define PRIdN PRId32 - #define U_MAX UINT32_MAX - #define I_MAX INT32_MAX - #define I_MIN INT32_MIN -#endif - -/*! @option type of s[0,n-1] for integer alphabets - * - * @constraint sizeof(int_t) >= sizeof(int_text) - */ -typedef uint32_t int_text; //4N bytes for s[0..n-1] -#define PRIdT PRIu32 - -/*! @option type for array DA - */ -typedef int32_t int_da; -#define PRIdA PRId32 - -/******************************************************************************/ - -/** @brief computes the suffix array of string s[0..n-1] - * - * @param s input string with s[n-1]=0 - * @param SA suffix array - * @param n string length - * @return -1 if an error occured, otherwise the depth of the recursive calls. - */ -int sacak(unsigned char *s, uint_t *SA, uint_t n); - -/** @brief computes the suffix array of string s[0..n-1] - * - * @param k alphabet size+1 (0 is reserved) - */ -int sacak_int(int_text *s, uint_t *SA, uint_t n, uint_t k); - -/******************************************************************************/ - -/** @brief Computes the suffix array SA (LCP, DA) of T^cat in s[0..n-1] - * - * @param s input concatenated string, using separators s[i]=1 and with s[n-1]=0 - * @param SA Suffix array - * @param LCP LCP array - * @param DA Document array - * @param n String length - * - * @return depth of the recursive calls. - */ -int gsacak(unsigned char *s, uint_t *SA, int_t *LCP, int_da *DA, uint_t n); - -/** @brief Computes the suffix array SA (LCP, DA) of T^cat in s[0..n-1] - * - * @param s input concatenated string, using separators s[i]=1 and with s[n-1]=0 - * @param SA Suffix array - * @param LCP LCP array - * @param DA Document array - * @param n String length - * @param k alphabet size+2 (0 and 1 are reserved) - * - * @return depth of the recursive calls. - */ -int gsacak_int(int_text *s, uint_t *SA, int_t *LCP, int_da *DA, uint_t n, uint_t k); - -/******************************************************************************/ - - - -int_t SACA_K(int_t *s, uint_t *SA, - uint_t n, unsigned int K, - uint_t m, int cs, int level); - -int_t gSACA_K(uint_t *s, uint_t *SA, - uint_t n, unsigned int K, - int cs, uint_t separator, int level); - -#endif diff --git a/erigon-lib/compress/compress.go b/erigon-lib/seg/compress.go similarity index 92% rename from erigon-lib/compress/compress.go rename to erigon-lib/seg/compress.go index d2b57d458d4..187e8f43ae2 100644 --- a/erigon-lib/compress/compress.go +++ b/erigon-lib/seg/compress.go @@ -14,7 +14,7 @@ limitations under the License. */ -package compress +package seg import ( "bufio" @@ -28,16 +28,17 @@ import ( "math/bits" "os" "path/filepath" + "slices" "sync" "time" "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/cmp" dir2 "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/etl" - "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" ) // Compressor is the main operating type for performing per-word compression @@ -52,7 +53,7 @@ type Compressor struct { ctx context.Context wg *sync.WaitGroup superstrings chan []byte - uncompressedFile *DecompressedFile + uncompressedFile *RawWordsFile tmpDir string // temporary directory to use for ETL when building dictionary logPrefix string outputFile string // File where to output the dictionary and compressed data @@ -77,14 +78,13 @@ type Compressor struct { func NewCompressor(ctx context.Context, logPrefix, outputFile, tmpDir string, minPatternScore uint64, workers int, lvl log.Lvl, logger log.Logger) (*Compressor, error) { dir2.MustExist(tmpDir) dir, fileName := filepath.Split(outputFile) + + // tmpOutFilePath is a ".seg.tmp" file which will be renamed to ".seg" if everything succeeds. + // It allows to atomically create a ".seg" file (the downloader will not see partial ".seg" files). tmpOutFilePath := filepath.Join(dir, fileName) + ".tmp" - // UncompressedFile - it's intermediate .idt file, outputFile it's final .seg (or .dat) file. - // tmpOutFilePath - it's ".seg.tmp" (".idt.tmp") file which will be renamed to .seg file if everything succeed. - // It allow atomically create .seg file (downloader will not see partially ready/ non-ready .seg files). - // I didn't create ".seg.tmp" file in tmpDir, because I think tmpDir and snapsthoDir may be mounted to different drives - uncompressedPath := filepath.Join(tmpDir, fileName) + ".idt" - uncompressedFile, err := NewUncompressedFile(uncompressedPath) + uncompressedPath := filepath.Join(tmpDir, fileName) + ".idt" + uncompressedFile, err := NewRawWordsFile(uncompressedPath) if err != nil { return nil, err } @@ -95,11 +95,11 @@ func NewCompressor(ctx context.Context, logPrefix, outputFile, tmpDir string, mi wg.Add(workers) suffixCollectors := make([]*etl.Collector, workers) for i := 0; i < workers; i++ { - collector := etl.NewCollector(logPrefix+"_dict", tmpDir, etl.NewSortableBuffer(etl.BufferOptimalSize/2), logger) + collector := etl.NewCollector(logPrefix+"_dict", tmpDir, etl.NewSortableBuffer(etl.BufferOptimalSize/2), logger) //nolint:gocritic collector.LogLvl(lvl) suffixCollectors[i] = collector - go processSuperstring(ctx, superstrings, collector, minPatternScore, wg, logger) + go extractPatternsInSuperstrings(ctx, superstrings, collector, minPatternScore, wg, logger) } return &Compressor{ @@ -119,7 +119,7 @@ func NewCompressor(ctx context.Context, logPrefix, outputFile, tmpDir string, mi } func (c *Compressor) Close() { - c.uncompressedFile.Close() + c.uncompressedFile.CloseAndRemove() for _, collector := range c.suffixCollectors { collector.Close() } @@ -172,7 +172,10 @@ func (c *Compressor) AddUncompressedWord(word []byte) error { } func (c *Compressor) Compress() error { - c.uncompressedFile.w.Flush() + if err := c.uncompressedFile.Flush(); err != nil { + return err + } + logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() if len(c.superstring) > 0 { @@ -192,7 +195,7 @@ func (c *Compressor) Compress() error { } if c.trace { _, fileName := filepath.Split(c.outputFile) - if err := PersistDictrionary(filepath.Join(c.tmpDir, fileName)+".dictionary.txt", db); err != nil { + if err := PersistDictionary(filepath.Join(c.tmpDir, fileName)+".dictionary.txt", db); err != nil { return err } } @@ -207,7 +210,7 @@ func (c *Compressor) Compress() error { } defer cf.Close() t = time.Now() - if err := reducedict(c.ctx, c.trace, c.logPrefix, c.tmpOutFilePath, cf, c.uncompressedFile, c.workers, db, c.lvl, c.logger); err != nil { + if err := compressWithPatternCandidates(c.ctx, c.trace, c.logPrefix, c.tmpOutFilePath, cf, c.uncompressedFile, c.workers, db, c.lvl, c.logger); err != nil { return err } if err = c.fsync(cf); err != nil { @@ -598,13 +601,13 @@ func (ph *PositionHeap) Pop() interface{} { return x } -type HuffmanCoder struct { +type BitWriter struct { w *bufio.Writer outputBits int outputByte byte } -func (hf *HuffmanCoder) encode(code uint64, codeBits int) error { +func (hf *BitWriter) encode(code uint64, codeBits int) error { for codeBits > 0 { var bitsUsed int if hf.outputBits+codeBits > 8 { @@ -628,7 +631,7 @@ func (hf *HuffmanCoder) encode(code uint64, codeBits int) error { return nil } -func (hf *HuffmanCoder) flush() error { +func (hf *BitWriter) flush() error { if hf.outputBits > 0 { if e := hf.w.WriteByte(hf.outputByte); e != nil { return e @@ -784,8 +787,8 @@ func Ratio(f1, f2 string) (CompressionRatio, error) { return CompressionRatio(float64(s1.Size()) / float64(s2.Size())), nil } -// DecompressedFile - .dat file format - simple format for temporary data store -type DecompressedFile struct { +// RawWordsFile - .idt file format - simple format for temporary data store +type RawWordsFile struct { f *os.File w *bufio.Writer filePath string @@ -793,20 +796,34 @@ type DecompressedFile struct { count uint64 } -func NewUncompressedFile(filePath string) (*DecompressedFile, error) { +func NewRawWordsFile(filePath string) (*RawWordsFile, error) { f, err := os.Create(filePath) if err != nil { return nil, err } w := bufio.NewWriterSize(f, 2*etl.BufIOSize) - return &DecompressedFile{filePath: filePath, f: f, w: w, buf: make([]byte, 128)}, nil + return &RawWordsFile{filePath: filePath, f: f, w: w, buf: make([]byte, 128)}, nil +} +func OpenRawWordsFile(filePath string) (*RawWordsFile, error) { + f, err := os.Open(filePath) + if err != nil { + return nil, err + } + w := bufio.NewWriterSize(f, 2*etl.BufIOSize) + return &RawWordsFile{filePath: filePath, f: f, w: w, buf: make([]byte, 128)}, nil } -func (f *DecompressedFile) Close() { +func (f *RawWordsFile) Flush() error { + return f.w.Flush() +} +func (f *RawWordsFile) Close() { f.w.Flush() f.f.Close() +} +func (f *RawWordsFile) CloseAndRemove() { + f.Close() os.Remove(f.filePath) } -func (f *DecompressedFile) Append(v []byte) error { +func (f *RawWordsFile) Append(v []byte) error { f.count++ // For compressed words, the length prefix is shifted to make lowest bit zero n := binary.PutUvarint(f.buf, 2*uint64(len(v))) @@ -820,7 +837,7 @@ func (f *DecompressedFile) Append(v []byte) error { } return nil } -func (f *DecompressedFile) AppendUncompressed(v []byte) error { +func (f *RawWordsFile) AppendUncompressed(v []byte) error { f.count++ // For uncompressed words, the length prefix is shifted to make lowest bit one n := binary.PutUvarint(f.buf, 2*uint64(len(v))+1) @@ -837,7 +854,7 @@ func (f *DecompressedFile) AppendUncompressed(v []byte) error { // ForEach - Read keys from the file and generate superstring (with extra byte 0x1 prepended to each character, and with 0x0 0x0 pair inserted between keys and values) // We only consider values with length > 2, because smaller values are not compressible without going into bits -func (f *DecompressedFile) ForEach(walker func(v []byte, compressed bool) error) error { +func (f *RawWordsFile) ForEach(walker func(v []byte, compressed bool) error) error { _, err := f.f.Seek(0, 0) if err != nil { return err diff --git a/erigon-lib/compress/compress_fuzz_test.go b/erigon-lib/seg/compress_fuzz_test.go similarity index 99% rename from erigon-lib/compress/compress_fuzz_test.go rename to erigon-lib/seg/compress_fuzz_test.go index f9403ef8457..ee6eac0d7f7 100644 --- a/erigon-lib/compress/compress_fuzz_test.go +++ b/erigon-lib/seg/compress_fuzz_test.go @@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -package compress +package seg import ( "context" diff --git a/erigon-lib/compress/compress_test.go b/erigon-lib/seg/compress_test.go similarity index 99% rename from erigon-lib/compress/compress_test.go rename to erigon-lib/seg/compress_test.go index d8044b03344..6c7090c690e 100644 --- a/erigon-lib/compress/compress_test.go +++ b/erigon-lib/seg/compress_test.go @@ -14,7 +14,7 @@ limitations under the License. */ -package compress +package seg import ( "context" diff --git a/erigon-lib/compress/decompress.go b/erigon-lib/seg/decompress.go similarity index 83% rename from erigon-lib/compress/decompress.go rename to erigon-lib/seg/decompress.go index 7f058628691..a9f7e11bfa9 100644 --- a/erigon-lib/compress/decompress.go +++ b/erigon-lib/seg/decompress.go @@ -14,11 +14,12 @@ limitations under the License. */ -package compress +package seg import ( "bytes" "encoding/binary" + "errors" "fmt" "os" "path/filepath" @@ -26,9 +27,13 @@ import ( "time" "unsafe" + "github.com/ledgerwatch/erigon-lib/common/assert" + + "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/mmap" - "github.com/ledgerwatch/log/v3" ) type word []byte // plain text word associated with code from dictionary @@ -98,6 +103,20 @@ type posTable struct { bitLen int } +type ErrCompressedFileCorrupted struct { + FileName string + Reason string +} + +func (e ErrCompressedFileCorrupted) Error() string { + return fmt.Sprintf("compressed file %q dictionary is corrupted: %s", e.FileName, e.Reason) +} + +func (e ErrCompressedFileCorrupted) Is(err error) bool { + var e1 *ErrCompressedFileCorrupted + return errors.As(err, &e1) +} + // Decompressor provides access to the superstrings in a file produced by a compressor type Decompressor struct { f *os.File @@ -115,6 +134,14 @@ type Decompressor struct { filePath, fileName string } +const ( + // Maximal Huffman tree depth + // Note: mainnet has patternMaxDepth 31 + maxAllowedDepth = 50 + + compressedMinSize = 32 +) + // Tables with bitlen greater than threshold will be condensed. // Condensing reduces size of decompression table but leads to slower reads. // To disable condesning at all set to 9 (we dont use tables larger than 2^9) @@ -144,17 +171,23 @@ func SetDecompressionTableCondensity(fromBitSize int) { condensePatternTableBitThreshold = fromBitSize } -func NewDecompressor(compressedFilePath string) (d *Decompressor, err error) { +func NewDecompressor(compressedFilePath string) (*Decompressor, error) { _, fName := filepath.Split(compressedFilePath) - d = &Decompressor{ + var err error + var closeDecompressor = true + d := &Decompressor{ filePath: compressedFilePath, fileName: fName, } - defer func() { + defer func() { if rec := recover(); rec != nil { err = fmt.Errorf("decompressing file: %s, %+v, trace: %s", compressedFilePath, rec, dbg.Stack()) } + if (err != nil || closeDecompressor) && d != nil { + d.Close() + d = nil + } }() d.f, err = os.Open(compressedFilePath) @@ -167,9 +200,13 @@ func NewDecompressor(compressedFilePath string) (d *Decompressor, err error) { return nil, err } d.size = stat.Size() - if d.size < 32 { - return nil, fmt.Errorf("compressed file is too short: %d", d.size) + if d.size < compressedMinSize { + return nil, &ErrCompressedFileCorrupted{ + FileName: fName, + Reason: fmt.Sprintf("invalid file size %s, expected at least %s", + datasize.ByteSize(d.size).HR(), datasize.ByteSize(compressedMinSize).HR())} } + d.modTime = stat.ModTime() if d.mmapHandle1, d.mmapHandle2, err = mmap.Mmap(d.f, int(d.size)); err != nil { return nil, err @@ -180,29 +217,42 @@ func NewDecompressor(compressedFilePath string) (d *Decompressor, err error) { d.wordsCount = binary.BigEndian.Uint64(d.data[:8]) d.emptyWordsCount = binary.BigEndian.Uint64(d.data[8:16]) - dictSize := binary.BigEndian.Uint64(d.data[16:24]) - data := d.data[24 : 24+dictSize] + + pos := uint64(24) + dictSize := binary.BigEndian.Uint64(d.data[16:pos]) + + if pos+dictSize > uint64(d.size) { + return nil, &ErrCompressedFileCorrupted{ + FileName: fName, + Reason: fmt.Sprintf("invalid patterns dictSize=%s while file size is just %s", + datasize.ByteSize(dictSize).HR(), datasize.ByteSize(d.size).HR())} + } + + // todo awskii: want to move dictionary reading to separate function? + data := d.data[pos : pos+dictSize] var depths []uint64 var patterns [][]byte - var i uint64 + var dictPos uint64 var patternMaxDepth uint64 - for i < dictSize { - d, ns := binary.Uvarint(data[i:]) - if d > 64 { // mainnet has maxDepth 31 - return nil, fmt.Errorf("dictionary is invalid: patternMaxDepth=%d", d) + for dictPos < dictSize { + depth, ns := binary.Uvarint(data[dictPos:]) + if depth > maxAllowedDepth { + return nil, &ErrCompressedFileCorrupted{ + FileName: fName, + Reason: fmt.Sprintf("depth=%d > patternMaxDepth=%d ", depth, maxAllowedDepth)} } - depths = append(depths, d) - if d > patternMaxDepth { - patternMaxDepth = d + depths = append(depths, depth) + if depth > patternMaxDepth { + patternMaxDepth = depth } - i += uint64(ns) - l, n := binary.Uvarint(data[i:]) - i += uint64(n) - patterns = append(patterns, data[i:i+l]) - //fmt.Printf("depth = %d, pattern = [%x]\n", d, data[i:i+l]) - i += l + dictPos += uint64(ns) + l, n := binary.Uvarint(data[dictPos:]) + dictPos += uint64(n) + patterns = append(patterns, data[dictPos:dictPos+l]) + //fmt.Printf("depth = %d, pattern = [%x]\n", depth, data[dictPos:dictPos+l]) + dictPos += l } if dictSize > 0 { @@ -214,32 +264,46 @@ func NewDecompressor(compressedFilePath string) (d *Decompressor, err error) { } // fmt.Printf("pattern maxDepth=%d\n", tree.maxDepth) d.dict = newPatternTable(bitLen) - buildCondensedPatternTable(d.dict, depths, patterns, 0, 0, 0, patternMaxDepth) + if _, err = buildCondensedPatternTable(d.dict, depths, patterns, 0, 0, 0, patternMaxDepth); err != nil { + return nil, &ErrCompressedFileCorrupted{FileName: fName, Reason: err.Error()} + } } + if assert.Enable && pos != 24 { + panic("pos != 24") + } + pos += dictSize // offset patterns // read positions - pos := 24 + dictSize dictSize = binary.BigEndian.Uint64(d.data[pos : pos+8]) - data = d.data[pos+8 : pos+8+dictSize] + pos += 8 + + if pos+dictSize > uint64(d.size) { + return nil, &ErrCompressedFileCorrupted{ + FileName: fName, + Reason: fmt.Sprintf("invalid dictSize=%s overflows file size of %s", + datasize.ByteSize(dictSize).HR(), datasize.ByteSize(d.size).HR())} + } + + data = d.data[pos : pos+dictSize] var posDepths []uint64 var poss []uint64 var posMaxDepth uint64 - i = 0 - for i < dictSize { - d, ns := binary.Uvarint(data[i:]) - if d > 2048 { - return nil, fmt.Errorf("dictionary is invalid: posMaxDepth=%d", d) + dictPos = 0 + for dictPos < dictSize { + depth, ns := binary.Uvarint(data[dictPos:]) + if depth > maxAllowedDepth { + return nil, &ErrCompressedFileCorrupted{FileName: fName, Reason: fmt.Sprintf("posMaxDepth=%d", depth)} } - posDepths = append(posDepths, d) - if d > posMaxDepth { - posMaxDepth = d + posDepths = append(posDepths, depth) + if depth > posMaxDepth { + posMaxDepth = depth } - i += uint64(ns) - pos, n := binary.Uvarint(data[i:]) - i += uint64(n) - poss = append(poss, pos) + dictPos += uint64(ns) + dp, n := binary.Uvarint(data[dictPos:]) + dictPos += uint64(n) + poss = append(poss, dp) } if dictSize > 0 { @@ -257,22 +321,34 @@ func NewDecompressor(compressedFilePath string) (d *Decompressor, err error) { lens: make([]byte, tableSize), ptrs: make([]*posTable, tableSize), } - buildPosTable(posDepths, poss, d.posDict, 0, 0, 0, posMaxDepth) + if _, err = buildPosTable(posDepths, poss, d.posDict, 0, 0, 0, posMaxDepth); err != nil { + return nil, &ErrCompressedFileCorrupted{FileName: fName, Reason: err.Error()} + } + } + d.wordsStart = pos + dictSize + + if d.Count() == 0 && dictSize == 0 && d.size > compressedMinSize { + return nil, &ErrCompressedFileCorrupted{ + FileName: fName, Reason: fmt.Sprintf("size %v but no words in it", datasize.ByteSize(d.size).HR())} } - d.wordsStart = pos + 8 + dictSize + closeDecompressor = false return d, nil } -func buildCondensedPatternTable(table *patternTable, depths []uint64, patterns [][]byte, code uint16, bits int, depth uint64, maxDepth uint64) int { +func buildCondensedPatternTable(table *patternTable, depths []uint64, patterns [][]byte, code uint16, bits int, depth uint64, maxDepth uint64) (int, error) { + if maxDepth > maxAllowedDepth { + return 0, fmt.Errorf("buildCondensedPatternTable: maxDepth=%d is too deep", maxDepth) + } + if len(depths) == 0 { - return 0 + return 0, nil } if depth == depths[0] { pattern := word(patterns[0]) //fmt.Printf("depth=%d, maxDepth=%d, code=[%b], codeLen=%d, pattern=[%x]\n", depth, maxDepth, code, bits, pattern) cw := &codeword{code: code, pattern: &pattern, len: byte(bits), ptr: nil} table.insertWord(cw) - return 1 + return 1, nil } if bits == 9 { var bitLen int @@ -285,13 +361,23 @@ func buildCondensedPatternTable(table *patternTable, depths []uint64, patterns [ table.insertWord(cw) return buildCondensedPatternTable(cw.ptr, depths, patterns, 0, 0, depth, maxDepth) } - b0 := buildCondensedPatternTable(table, depths, patterns, code, bits+1, depth+1, maxDepth-1) - return b0 + buildCondensedPatternTable(table, depths[b0:], patterns[b0:], (uint16(1)< maxAllowedDepth { + return 0, fmt.Errorf("buildPosTable: maxDepth=%d is too deep", maxDepth) + } if len(depths) == 0 { - return 0 + return 0, nil } if depth == depths[0] { p := poss[0] @@ -310,7 +396,7 @@ func buildPosTable(depths []uint64, poss []uint64, table *posTable, code uint16, table.ptrs[c] = nil } } - return 1 + return 1, nil } if bits == 9 { var bitLen int @@ -331,8 +417,15 @@ func buildPosTable(depths []uint64, poss []uint64, table *posTable, code uint16, table.ptrs[code] = newTable return buildPosTable(depths, poss, newTable, 0, 0, depth, maxDepth) } - b0 := buildPosTable(depths, poss, table, code, bits+1, depth+1, maxDepth-1) - return b0 + buildPosTable(depths[b0:], poss[b0:], table, (uint16(1)< cap(buf) { newBuf := make([]byte, len(buf)+int(wordLen)) copy(newBuf, buf) @@ -559,7 +655,10 @@ func (g *Getter) Next(buf []byte) ([]byte, uint64) { // Expand buffer buf = buf[:len(buf)+int(wordLen)] } + // Loop below fills in the patterns + // Tracking position in buf where to insert part of the word + bufPos := bufOffset for pos := g.nextPos(false /* clean */); pos != 0; pos = g.nextPos(false) { bufPos += int(pos) - 1 // Positions where to insert patterns are encoded relative to one another pt := g.nextPattern() @@ -573,7 +672,11 @@ func (g *Getter) Next(buf []byte) ([]byte, uint64) { g.dataP = savePos g.dataBit = 0 g.nextPos(true /* clean */) // Reset the state of huffman reader - bufPos = lastUncovered // Restore to the beginning of buf + + // Restore to the beginning of buf + bufPos = bufOffset + lastUncovered := bufOffset + // Loop below fills the data which is not in the patterns for pos := g.nextPos(false); pos != 0; pos = g.nextPos(false) { bufPos += int(pos) - 1 // Positions where to insert patterns are encoded relative to one another @@ -584,9 +687,9 @@ func (g *Getter) Next(buf []byte) ([]byte, uint64) { } lastUncovered = bufPos + len(g.nextPattern()) } - if int(wordLen) > lastUncovered { - dif := wordLen - uint64(lastUncovered) - copy(buf[lastUncovered:wordLen], g.data[postLoopPos:postLoopPos+dif]) + if bufOffset+int(wordLen) > lastUncovered { + dif := uint64(bufOffset + int(wordLen) - lastUncovered) + copy(buf[lastUncovered:lastUncovered+int(dif)], g.data[postLoopPos:postLoopPos+dif]) postLoopPos += dif } g.dataP = postLoopPos diff --git a/erigon-lib/compress/decompress_bench_test.go b/erigon-lib/seg/decompress_bench_test.go similarity index 99% rename from erigon-lib/compress/decompress_bench_test.go rename to erigon-lib/seg/decompress_bench_test.go index 9f6cd4b5d9b..394b4fd227a 100644 --- a/erigon-lib/compress/decompress_bench_test.go +++ b/erigon-lib/seg/decompress_bench_test.go @@ -14,7 +14,7 @@ limitations under the License. */ -package compress +package seg import ( "fmt" diff --git a/erigon-lib/compress/decompress_fuzz_test.go b/erigon-lib/seg/decompress_fuzz_test.go similarity index 99% rename from erigon-lib/compress/decompress_fuzz_test.go rename to erigon-lib/seg/decompress_fuzz_test.go index e127a6240e0..65fc6bfd2fc 100644 --- a/erigon-lib/compress/decompress_fuzz_test.go +++ b/erigon-lib/seg/decompress_fuzz_test.go @@ -1,4 +1,4 @@ -package compress +package seg import ( "bytes" diff --git a/erigon-lib/compress/decompress_test.go b/erigon-lib/seg/decompress_test.go similarity index 80% rename from erigon-lib/compress/decompress_test.go rename to erigon-lib/seg/decompress_test.go index 0becd5bb58a..7b5de1e9f95 100644 --- a/erigon-lib/compress/decompress_test.go +++ b/erigon-lib/seg/decompress_test.go @@ -14,11 +14,13 @@ limitations under the License. */ -package compress +package seg import ( "bytes" "context" + "encoding/binary" + "errors" "fmt" "math/rand" "os" @@ -323,6 +325,162 @@ func TestUncompressed(t *testing.T) { } } +func TestDecompressor_OpenCorrupted(t *testing.T) { + t.Helper() + logger := log.New() + tmpDir := t.TempDir() + + t.Run("uncompressed", func(t *testing.T) { + file := filepath.Join(tmpDir, "unc") + c, err := NewCompressor(context.Background(), t.Name(), file, tmpDir, 1, 2, log.LvlDebug, logger) + require.NoError(t, err) + defer c.Close() + for k, w := range loremStrings { + if err = c.AddUncompressedWord([]byte(fmt.Sprintf("%s %d", w, k))); err != nil { + t.Fatal(err) + } + } + err = c.Compress() + require.NoError(t, err) + + d, err := NewDecompressor(file) + require.NoError(t, err) + require.NotNil(t, d) + d.Close() + }) + + t.Run("uncompressed_empty", func(t *testing.T) { + file := filepath.Join(tmpDir, "unc_empty") + c, err := NewCompressor(context.Background(), t.Name(), file, tmpDir, 1, 2, log.LvlDebug, logger) + require.NoError(t, err) + defer c.Close() + err = c.Compress() + require.NoError(t, err) + + // this file is empty and its size will be 32 bytes, it's not corrupted + d, err := NewDecompressor(file) + require.NoError(t, err) + require.NotNil(t, d) + d.Close() + }) + + t.Run("compressed", func(t *testing.T) { + file := filepath.Join(tmpDir, "comp") + c, err := NewCompressor(context.Background(), t.Name(), file, tmpDir, 1, 2, log.LvlDebug, logger) + require.NoError(t, err) + defer c.Close() + for k, w := range loremStrings { + if err = c.AddWord([]byte(fmt.Sprintf("%s %d", w, k))); err != nil { + t.Fatal(err) + } + } + err = c.Compress() + require.NoError(t, err) + + d, err := NewDecompressor(file) + require.NoError(t, err) + require.NotNil(t, d) + d.Close() + }) + + t.Run("compressed_empty", func(t *testing.T) { + file := filepath.Join(tmpDir, "comp_empty") + c, err := NewCompressor(context.Background(), t.Name(), file, tmpDir, 1, 2, log.LvlDebug, logger) + require.NoError(t, err) + defer c.Close() + err = c.Compress() + require.NoError(t, err) + + d, err := NewDecompressor(file) + require.NoError(t, err) + require.NotNil(t, d) + d.Close() + }) + + t.Run("notExist", func(t *testing.T) { + file := filepath.Join(tmpDir, "comp_bad") + d, err := NewDecompressor(file) + require.Error(t, err, "file is not exist") + require.Nil(t, d) + }) + + t.Run("fileSize 0 { if compression { - output, patterns, uncovered = optimiseCluster(trace, v, mf2, output[:0], uncovered, patterns, cellRing, uncompPosMap) + output, patterns, uncovered = coverWordByPatterns(trace, v, mf2, output[:0], uncovered, patterns, cellRing, uncompPosMap) if _, e := intermediateW.Write(output); e != nil { return e } @@ -650,7 +650,7 @@ func reducedict(ctx context.Context, trace bool, logPrefix, segmentFilePath stri } // Re-encode all the words with the use of optimised (via Huffman coding) dictionaries wc := 0 - var hc HuffmanCoder + var hc BitWriter hc.w = cw r := bufio.NewReaderSize(intermediateFile, 2*etl.BufIOSize) var l uint64 @@ -741,11 +741,11 @@ func reducedict(ctx context.Context, trace bool, logPrefix, segmentFilePath stri return nil } -// processSuperstring is the worker that processes one superstring and puts results +// extractPatternsInSuperstrings is the worker that processes one superstring and puts results // into the collector, using lock to mutual exclusion. At the end (when the input channel is closed), // it notifies the waitgroup before exiting, so that the caller known when all work is done // No error channels for now -func processSuperstring(ctx context.Context, superstringCh chan []byte, dictCollector *etl.Collector, minPatternScore uint64, completion *sync.WaitGroup, logger log.Logger) { +func extractPatternsInSuperstrings(ctx context.Context, superstringCh chan []byte, dictCollector *etl.Collector, minPatternScore uint64, completion *sync.WaitGroup, logger log.Logger) { defer completion.Done() dictVal := make([]byte, 8) dictKey := make([]byte, maxPatternLen) @@ -803,6 +803,7 @@ func processSuperstring(ctx context.Context, superstringCh chan []byte, dictColl defined for this substring, we put zero. */ if inv[i] == int32(n-1) { k = 0 + lcp[inv[i]] = 0 continue } @@ -906,7 +907,7 @@ func processSuperstring(ctx context.Context, superstringCh chan []byte, dictColl } binary.BigEndian.PutUint64(dictVal, score) if err := dictCollector.Collect(dictKey, dictVal); err != nil { - logger.Error("processSuperstring", "collect", err) + logger.Error("extractPatternsInSuperstrings", "collect", err) } prevSkipped = false //nolint break @@ -940,7 +941,7 @@ func DictionaryBuilderFromCollectors(ctx context.Context, logPrefix, tmpDir stri return db, nil } -func PersistDictrionary(fileName string, db *DictionaryBuilder) error { +func PersistDictionary(fileName string, db *DictionaryBuilder) error { df, err := os.Create(fileName) if err != nil { return err diff --git a/erigon-lib/patricia/patricia.go b/erigon-lib/seg/patricia/patricia.go similarity index 95% rename from erigon-lib/patricia/patricia.go rename to erigon-lib/seg/patricia/patricia.go index f2ccc86c51b..113854c2e63 100644 --- a/erigon-lib/patricia/patricia.go +++ b/erigon-lib/seg/patricia/patricia.go @@ -19,11 +19,11 @@ package patricia import ( "fmt" "math/bits" + "slices" "strings" "github.com/ledgerwatch/erigon-lib/common/cmp" - "github.com/ledgerwatch/erigon-lib/sais" - "golang.org/x/exp/slices" + "github.com/ledgerwatch/erigon-lib/seg/sais" ) // Implementation of paticia tree for efficient search of substrings from a dictionary in a given string @@ -73,7 +73,7 @@ func (n *node) String() string { return sb.String() } -// state represent a position anywhere inside patricia tree +// pathWalker represents a position anywhere inside patricia tree // position can be identified by combination of node, and the partitioning // of that node's p0 or p1 into head and tail. // As with p0 and p1, head and tail are encoded as follows: @@ -82,29 +82,29 @@ func (n *node) String() string { // For example, if the position is at the beginning of a node, // head would be zero, and tail would be equal to either p0 or p1, // depending on whether the position corresponds to going left (0) or right (1). -type state struct { +type pathWalker struct { n *node head uint32 tail uint32 } -func (s *state) String() string { +func (s *pathWalker) String() string { return fmt.Sprintf("%p head %s tail %s", s.n, tostr(s.head), tostr(s.tail)) } -func (s *state) reset(n *node) { +func (s *pathWalker) reset(n *node) { s.n = n s.head = 0 s.tail = 0 } -func makestate(n *node) *state { - return &state{n: n, head: 0, tail: 0} +func newPathWalker(n *node) *pathWalker { + return &pathWalker{n: n, head: 0, tail: 0} } -// transition consumes next byte of the key, moves the state to corresponding +// transition consumes next byte of the key, moves the path walker to corresponding // node of the patricia tree and returns divergence prefix (0 if there is no divergence) -func (s *state) transition(b byte, readonly bool) uint32 { +func (s *pathWalker) transition(b byte, readonly bool) uint32 { bitsLeft := 8 // Bits in b to process b32 := uint32(b) << 24 for bitsLeft > 0 { @@ -117,7 +117,7 @@ func (s *state) transition(b byte, readonly bool) uint32 { } } if s.tail == 0 { - // state positioned at the end of the current node + // positioned at the end of the current node return b32 | uint32(bitsLeft) } tailLen := int(s.tail & 0x1f) @@ -214,7 +214,7 @@ func (s *state) transition(b byte, readonly bool) uint32 { return 0 } -func (s *state) diverge(divergence uint32) { +func (s *pathWalker) diverge(divergence uint32) { if s.tail == 0 { // try to add to the existing head //fmt.Printf("adding divergence to existing head\n") @@ -288,7 +288,7 @@ func (s *state) diverge(divergence uint32) { } func (n *node) insert(key []byte, value interface{}) { - s := makestate(n) + s := newPathWalker(n) for _, b := range key { divergence := s.transition(b, false /* readonly */) if divergence != 0 { @@ -298,7 +298,7 @@ func (n *node) insert(key []byte, value interface{}) { s.insert(value) } -func (s *state) insert(value interface{}) { +func (s *pathWalker) insert(value interface{}) { if s.tail != 0 { s.diverge(0) } @@ -317,10 +317,10 @@ func (s *state) insert(value interface{}) { } func (n *node) get(key []byte) (interface{}, bool) { - s := makestate(n) + s := newPathWalker(n) for _, b := range key { divergence := s.transition(b, true /* readonly */) - //fmt.Printf("get %x, b = %x, divergence = %s\nstate=%s\n", key, b, tostr(divergence), s) + //fmt.Printf("get %x, b = %x, divergence = %s\npath walker state=%s\n", key, b, tostr(divergence), s) if divergence != 0 { return nil, false } @@ -366,7 +366,7 @@ func (m *Matches) Swap(i, j int) { type MatchFinder struct { pt *PatriciaTree - s state + s pathWalker matches []Match } @@ -392,7 +392,7 @@ func NewMatchFinder2(pt *PatriciaTree) *MatchFinder2 { return &MatchFinder2{pt: pt, top: &pt.root, nodeStack: []*node{&pt.root}, side: 2} } -// unfold consumes next byte of the key, moves the state to corresponding +// unfold consumes next byte of the key, moves the pathWalker to corresponding // node of the patricia tree and returns divergence prefix (0 if there is no divergence) func (mf2 *MatchFinder2) unfold(b byte) uint32 { //fmt.Printf("unfold %x, headLen = %d, tailLen = %d, nodeStackLen = %d\n", b, mf2.headLen, mf2.tailLen, len(mf2.nodeStack)) @@ -412,7 +412,7 @@ func (mf2 *MatchFinder2) unfold(b byte) uint32 { mf2.tailLen = int(mf2.top.p1 & 0x1f) } if mf2.tailLen == 0 { - // state positioned at the end of the current node + // positioned at the end of the current node mf2.side = 2 //fmt.Fprintf(&sb, "1 ") //fmt.Printf("%s\n", sb.String()) diff --git a/erigon-lib/patricia/patricia_fuzz_test.go b/erigon-lib/seg/patricia/patricia_fuzz_test.go similarity index 100% rename from erigon-lib/patricia/patricia_fuzz_test.go rename to erigon-lib/seg/patricia/patricia_fuzz_test.go diff --git a/erigon-lib/patricia/patricia_test.go b/erigon-lib/seg/patricia/patricia_test.go similarity index 99% rename from erigon-lib/patricia/patricia_test.go rename to erigon-lib/seg/patricia/patricia_test.go index 1cf2e85a0e4..2e68b283a56 100644 --- a/erigon-lib/patricia/patricia_test.go +++ b/erigon-lib/seg/patricia/patricia_test.go @@ -24,7 +24,7 @@ import ( func TestInserts1(t *testing.T) { n := &node{} - s := makestate(n) + s := newPathWalker(n) d := s.transition(0x34, true) fmt.Printf("1 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d)) s.diverge(d) @@ -42,7 +42,7 @@ func TestInserts1(t *testing.T) { s.diverge(d) fmt.Printf("8 tree:\n%sstate: %s\n\n", n, s) s.insert(nil) - s = makestate(n) + s = newPathWalker(n) d = s.transition(0x34, true) fmt.Printf("9 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d)) d = s.transition(0x66, true) diff --git a/erigon-lib/patricia/testdata/fuzz/FuzzLongestMatch/3a5198b65396851670329467bf211856973858cf006ef30532d6871ea859a12a b/erigon-lib/seg/patricia/testdata/fuzz/FuzzLongestMatch/3a5198b65396851670329467bf211856973858cf006ef30532d6871ea859a12a similarity index 100% rename from erigon-lib/patricia/testdata/fuzz/FuzzLongestMatch/3a5198b65396851670329467bf211856973858cf006ef30532d6871ea859a12a rename to erigon-lib/seg/patricia/testdata/fuzz/FuzzLongestMatch/3a5198b65396851670329467bf211856973858cf006ef30532d6871ea859a12a diff --git a/erigon-lib/patricia/testdata/fuzz/FuzzLongestMatch/50e6d6e88241b5d113eeb578e3f53211f9d4c2605391a92b5314b1522ddd6613 b/erigon-lib/seg/patricia/testdata/fuzz/FuzzLongestMatch/50e6d6e88241b5d113eeb578e3f53211f9d4c2605391a92b5314b1522ddd6613 similarity index 100% rename from erigon-lib/patricia/testdata/fuzz/FuzzLongestMatch/50e6d6e88241b5d113eeb578e3f53211f9d4c2605391a92b5314b1522ddd6613 rename to erigon-lib/seg/patricia/testdata/fuzz/FuzzLongestMatch/50e6d6e88241b5d113eeb578e3f53211f9d4c2605391a92b5314b1522ddd6613 diff --git a/erigon-lib/patricia/testdata/fuzz/FuzzLongestMatch/a6e7cfd5b704609ef4eae0891c8bd6f60cfbe3da1bf98f71ce0c3e107042154e b/erigon-lib/seg/patricia/testdata/fuzz/FuzzLongestMatch/a6e7cfd5b704609ef4eae0891c8bd6f60cfbe3da1bf98f71ce0c3e107042154e similarity index 100% rename from erigon-lib/patricia/testdata/fuzz/FuzzLongestMatch/a6e7cfd5b704609ef4eae0891c8bd6f60cfbe3da1bf98f71ce0c3e107042154e rename to erigon-lib/seg/patricia/testdata/fuzz/FuzzLongestMatch/a6e7cfd5b704609ef4eae0891c8bd6f60cfbe3da1bf98f71ce0c3e107042154e diff --git a/erigon-lib/patricia/testdata/fuzz/FuzzLongestMatch/eae7318dcf13903566ac6ce58a3188dd26cc3216cdb8a4c398871feb71d79749 b/erigon-lib/seg/patricia/testdata/fuzz/FuzzLongestMatch/eae7318dcf13903566ac6ce58a3188dd26cc3216cdb8a4c398871feb71d79749 similarity index 100% rename from erigon-lib/patricia/testdata/fuzz/FuzzLongestMatch/eae7318dcf13903566ac6ce58a3188dd26cc3216cdb8a4c398871feb71d79749 rename to erigon-lib/seg/patricia/testdata/fuzz/FuzzLongestMatch/eae7318dcf13903566ac6ce58a3188dd26cc3216cdb8a4c398871feb71d79749 diff --git a/erigon-lib/patricia/testdata/fuzz/FuzzPatricia/1ac0f70817537550272339767003fa71f827da8ab9b1466b539a97b48b0bec89 b/erigon-lib/seg/patricia/testdata/fuzz/FuzzPatricia/1ac0f70817537550272339767003fa71f827da8ab9b1466b539a97b48b0bec89 similarity index 100% rename from erigon-lib/patricia/testdata/fuzz/FuzzPatricia/1ac0f70817537550272339767003fa71f827da8ab9b1466b539a97b48b0bec89 rename to erigon-lib/seg/patricia/testdata/fuzz/FuzzPatricia/1ac0f70817537550272339767003fa71f827da8ab9b1466b539a97b48b0bec89 diff --git a/erigon-lib/patricia/testdata/fuzz/FuzzPatricia/77fc7eba78cd0b1fa2a157aa2cc7e164eed8ca2c71f13d4e103e5a76887a341b b/erigon-lib/seg/patricia/testdata/fuzz/FuzzPatricia/77fc7eba78cd0b1fa2a157aa2cc7e164eed8ca2c71f13d4e103e5a76887a341b similarity index 100% rename from erigon-lib/patricia/testdata/fuzz/FuzzPatricia/77fc7eba78cd0b1fa2a157aa2cc7e164eed8ca2c71f13d4e103e5a76887a341b rename to erigon-lib/seg/patricia/testdata/fuzz/FuzzPatricia/77fc7eba78cd0b1fa2a157aa2cc7e164eed8ca2c71f13d4e103e5a76887a341b diff --git a/erigon-lib/patricia/testdata/fuzz/FuzzPatricia/82c51172146d16d565cd6de38398aba6284e6acc17a97edccb0be3a97624f967 b/erigon-lib/seg/patricia/testdata/fuzz/FuzzPatricia/82c51172146d16d565cd6de38398aba6284e6acc17a97edccb0be3a97624f967 similarity index 100% rename from erigon-lib/patricia/testdata/fuzz/FuzzPatricia/82c51172146d16d565cd6de38398aba6284e6acc17a97edccb0be3a97624f967 rename to erigon-lib/seg/patricia/testdata/fuzz/FuzzPatricia/82c51172146d16d565cd6de38398aba6284e6acc17a97edccb0be3a97624f967 diff --git a/erigon-lib/seg/sais/README.md b/erigon-lib/seg/sais/README.md new file mode 100644 index 00000000000..cd34ebf8bd2 --- /dev/null +++ b/erigon-lib/seg/sais/README.md @@ -0,0 +1,7 @@ +sais.c is taken from sais-lite-2.4.1 by Yuta Mori + +The original upstream is not available, but the source code exists in forks, for example: + +* https://github.com/ecnerwala/cp-book/tree/master/third_party/sais-lite-2.4.1 +* https://github.com/kurpicz/saca-bench/tree/master/sais-lite +* https://github.com/play-co/gcif/tree/master/refs/sais-lite-2.4.1 diff --git a/erigon-lib/sais/sais.c b/erigon-lib/seg/sais/sais.c similarity index 100% rename from erigon-lib/sais/sais.c rename to erigon-lib/seg/sais/sais.c diff --git a/erigon-lib/sais/sais.go b/erigon-lib/seg/sais/sais.go similarity index 100% rename from erigon-lib/sais/sais.go rename to erigon-lib/seg/sais/sais.go diff --git a/erigon-lib/sais/sais.h b/erigon-lib/seg/sais/sais.h similarity index 64% rename from erigon-lib/sais/sais.h rename to erigon-lib/seg/sais/sais.h index 6f282cb4ef1..55bcd12db31 100644 --- a/erigon-lib/sais/sais.h +++ b/erigon-lib/seg/sais/sais.h @@ -27,25 +27,9 @@ #ifndef _SAIS_H #define _SAIS_H 1 -// #ifdef __cplusplus -// extern "C" -// { -// #endif /* __cplusplus */ - -// /* find the suffix array SA of T[0..n-1] -// use a working space (excluding T and SA) of at most 2n+O(lg n) */ -// int sais(const unsigned char *T, int *SA, int n); -// /* find the suffix array SA of T[0..n-1] in {0..k-1}^n -// use a working space (excluding T and SA) of at most MAX(4k,2n) */ -// int sais_int(const int *T, int *SA, int n, int k); - -// /* burrows-wheeler transform */ -// int sais_bwt(const unsigned char *T, unsigned char *U, int *A, int n); -// int sais_int_bwt(const int *T, int *U, int *A, int n, int k); - -// #ifdef __cplusplus -// } /* extern "C" */ -// #endif /* __cplusplus */ +/* find the suffix array SA of T[0..n-1] + use a working space (excluding T and SA) of at most 2n+O(lg n) */ extern int sais(const unsigned char *T, int *SA, int n); + #endif /* _SAIS_H */ diff --git a/erigon-lib/sais/sais_test.go b/erigon-lib/seg/sais/sais_test.go similarity index 100% rename from erigon-lib/sais/sais_test.go rename to erigon-lib/seg/sais/sais_test.go diff --git a/erigon-lib/sais/utils.c b/erigon-lib/seg/sais/utils.c similarity index 100% rename from erigon-lib/sais/utils.c rename to erigon-lib/seg/sais/utils.c diff --git a/erigon-lib/sais/utils.h b/erigon-lib/seg/sais/utils.h similarity index 100% rename from erigon-lib/sais/utils.h rename to erigon-lib/seg/sais/utils.h diff --git a/erigon-lib/seg/silkworm_seg_fuzz_test.go b/erigon-lib/seg/silkworm_seg_fuzz_test.go new file mode 100644 index 00000000000..cf38cd22867 --- /dev/null +++ b/erigon-lib/seg/silkworm_seg_fuzz_test.go @@ -0,0 +1,223 @@ +//go:build silkworm_seg_fuzz + +package seg + +import ( + "context" + "math/rand" + "os" + "os/exec" + "path/filepath" + "strings" + "testing" + + "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/erigon-lib/common/cmp" +) + +func makeSegFilePath(path string, suffix string) string { + return strings.TrimSuffix(path, filepath.Ext(path)) + suffix + ".seg" +} + +func SegZipEx(ctx context.Context, words *RawWordsFile, outPath string, tmpDirPath string, logger log.Logger) error { + compressor, err := NewCompressor(ctx, "SegZip", outPath, tmpDirPath, MinPatternScore, 1, log.LvlDebug, logger) + if err != nil { + return err + } + defer compressor.Close() + + err = words.ForEach(func(word []byte, isCompressed bool) error { + if isCompressed { + return compressor.AddWord(word) + } else { + return compressor.AddUncompressedWord(word) + } + }) + if err != nil { + return err + } + + return compressor.Compress() +} + +func SegZip(path string, tmpDirPath string) error { + words, err := OpenRawWordsFile(path) + if err != nil { + return err + } + defer words.Close() + return SegZipEx(context.Background(), words, makeSegFilePath(path, ""), tmpDirPath, log.New()) +} + +func SegUnzip(path string) error { + decompressor, err := NewDecompressor(path) + if err != nil { + return err + } + defer decompressor.Close() + + outPath := strings.TrimSuffix(path, filepath.Ext(path)) + ".idt" + words, err := NewRawWordsFile(outPath) + if err != nil { + return err + } + + err = decompressor.WithReadAhead(func() error { + word := make([]byte, 0) + getter := decompressor.MakeGetter() + for getter.HasNext() { + word, _ = getter.Next(word[:0]) + appendErr := words.Append(word) + if appendErr != nil { + return appendErr + } + } + return nil + }) + if err != nil { + words.CloseAndRemove() + return err + } + + words.Close() + return nil +} + +func SegZipSilkworm(path string, cmdPath string) error { + cmd := exec.Command(cmdPath, "seg_zip", path) + return cmd.Run() +} + +type RandPattern struct { + pattern []byte +} + +func NewRandPattern(r *rand.Rand, patternLen int) RandPattern { + pattern := make([]byte, patternLen) + r.Read(pattern) + return RandPattern{pattern} +} + +func (p RandPattern) CopyTo(word []byte, offset int) { + copy(word[offset:cmp.Min(offset+len(p.pattern), len(word))], p.pattern) +} + +func generatePatterns(r *rand.Rand) []RandPattern { + const minPatternLen = 64 + const maxPatternLen = 256 + const patternsCount = 16 + + patterns := make([]RandPattern, 0, patternsCount) + for i := 0; i < patternsCount; i++ { + patternLen := r.Intn(maxPatternLen+1-minPatternLen) + minPatternLen + pattern := NewRandPattern(r, patternLen) + patterns = append(patterns, pattern) + } + return patterns +} + +func generateRawWordsFile(path string, seed int64) (*RawWordsFile, error) { + const maxTotalSize = int(512 * datasize.KB) + const maxWordLen = int(1 * datasize.KB) + const maxWordPatterns = 3 + + words, err := NewRawWordsFile(path) + if err != nil { + return nil, err + } + + r := rand.New(rand.NewSource(seed)) + totalSizeLimit := maxTotalSize // r.Intn(maxTotalSize + 1) + var wordLen int + + patterns := generatePatterns(r) + + for totalSize := 0; totalSize < totalSizeLimit; totalSize += wordLen + 1 { + // generate a random word + wordLen = r.Intn(maxWordLen + 1) + word := make([]byte, wordLen) + r.Read(word) + + // fill it with some patterns at random offsets + if wordLen > 0 { + patternsCount := r.Intn(maxWordPatterns + 1) + for i := 0; i < patternsCount; i++ { + pattern := patterns[r.Intn(len(patterns))] + offset := r.Intn(wordLen) + pattern.CopyTo(word, offset) + } + } + + isCompressed := r.Intn(100) > 0 + if isCompressed { + err = words.Append(word) + } else { + err = words.AppendUncompressed(word) + } + if err != nil { + words.CloseAndRemove() + return nil, err + } + } + + err = words.Flush() + if err != nil { + words.CloseAndRemove() + return nil, err + } + + return words, nil +} + +func copyFiles(sourceFilePaths []string, targetDirPath string) { + if len(targetDirPath) == 0 { + return + } + for _, path := range sourceFilePaths { + _ = exec.Command("cp", path, targetDirPath).Run() + } +} + +func FuzzSilkwormCompress(f *testing.F) { + ctx := context.Background() + logger := log.New() + + cmdPath, _ := os.LookupEnv("SILKWORM_SNAPSHOTS_CMD") + require.NotEmpty(f, cmdPath, "Build silkworm snapshots command and set SILKWORM_SNAPSHOTS_CMD environment variable to the executable path, e.g. $HOME/silkworm/build/cmd/dev/snapshots") + investigationDir, _ := os.LookupEnv("INVESTIGATION_DIR") + + f.Add(int64(0)) + f.Fuzz(func(t *testing.T, seed int64) { + t.Helper() + workDir := t.TempDir() + + path := filepath.Join(workDir, "words.idt") + words, err := generateRawWordsFile(path, seed) + require.Nil(t, err) + + // compress using erigon + outPath := makeSegFilePath(path, "_erigon") + err = SegZipEx(ctx, words, outPath, t.TempDir(), logger) + words.Close() + require.Nil(t, err) + + // compress using silkworm + outPathSilkworm := makeSegFilePath(path, "") + err = SegZipSilkworm(path, cmdPath) + if err != nil { + copyFiles([]string{path, outPath}, investigationDir) + } + require.Nil(t, err) + + outPathCRC := checksum(outPath) + outPathSilkwormCRC := checksum(outPathSilkworm) + if outPathCRC != outPathSilkwormCRC { + assert.Equal(t, outPathCRC, outPathSilkwormCRC) + copyFiles([]string{path, outPath}, investigationDir) + } + }) +} diff --git a/erigon-lib/state/aggregator.go b/erigon-lib/state/aggregator.go index e992e27c96a..766a308eb47 100644 --- a/erigon-lib/state/aggregator.go +++ b/erigon-lib/state/aggregator.go @@ -1,5 +1,5 @@ /* - Copyright 2022 The Erigon contributors + Copyright 2022 Erigon contributors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,170 +17,124 @@ package state import ( - "bytes" "context" + "encoding/binary" + "errors" "fmt" - "math" - "math/bits" - "os" + math2 "math" + "runtime" + "strings" "sync" "sync/atomic" "time" - "github.com/holiman/uint256" - "github.com/ledgerwatch/log/v3" - "golang.org/x/sync/errgroup" - - "github.com/ledgerwatch/erigon-lib/commitment" - "github.com/ledgerwatch/erigon-lib/common" + "github.com/RoaringBitmap/roaring/roaring64" + common2 "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/background" - "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/common/cmp" + "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" "github.com/ledgerwatch/erigon-lib/kv/iter" "github.com/ledgerwatch/erigon-lib/kv/order" - "github.com/ledgerwatch/erigon-lib/metrics" -) - -// StepsInBiggestFile - files of this size are completely frozen/immutable. -// files of smaller size are also immutable, but can be removed after merge to bigger files. -const StepsInBiggestFile = 32 - -var ( - mxCurrentTx = metrics.GetOrCreateGauge("domain_tx_processed") - mxCurrentBlock = metrics.GetOrCreateGauge("domain_block_current") - mxRunningMerges = metrics.GetOrCreateGauge("domain_running_merges") - mxRunningCollations = metrics.GetOrCreateGauge("domain_running_collations") - mxCollateTook = metrics.GetOrCreateHistogram("domain_collate_took") - mxPruneTook = metrics.GetOrCreateHistogram("domain_prune_took") - mxPruneHistTook = metrics.GetOrCreateHistogram("domain_prune_hist_took") - mxPruningProgress = metrics.GetOrCreateGauge("domain_pruning_progress") - mxCollationSize = metrics.GetOrCreateGauge("domain_collation_size") - mxCollationSizeHist = metrics.GetOrCreateGauge("domain_collation_hist_size") - mxPruneSize = metrics.GetOrCreateCounter("domain_prune_size") - mxBuildTook = metrics.GetOrCreateSummary("domain_build_files_took") - mxStepCurrent = metrics.GetOrCreateGauge("domain_step_current") - mxStepTook = metrics.GetOrCreateHistogram("domain_step_took") - mxCommitmentKeys = metrics.GetOrCreateCounter("domain_commitment_keys") - mxCommitmentRunning = metrics.GetOrCreateGauge("domain_running_commitment") - mxCommitmentTook = metrics.GetOrCreateSummary("domain_commitment_took") - mxCommitmentWriteTook = metrics.GetOrCreateHistogram("domain_commitment_write_took") - mxCommitmentUpdates = metrics.GetOrCreateCounter("domain_commitment_updates") - mxCommitmentUpdatesApplied = metrics.GetOrCreateCounter("domain_commitment_updates_applied") + "github.com/ledgerwatch/log/v3" + "golang.org/x/sync/errgroup" ) type Aggregator struct { - db kv.RwDB - aggregationStep uint64 - accounts *Domain - storage *Domain - code *Domain - commitment *DomainCommitted - logAddrs *InvertedIndex - logTopics *InvertedIndex - tracesFrom *InvertedIndex - tracesTo *InvertedIndex - txNum uint64 - seekTxNum uint64 - blockNum uint64 - stepDoneNotice chan [length.Hash]byte - rwTx kv.RwTx - stats FilesStats - tmpdir string - defaultCtx *AggregatorContext - - ps *background.ProgressSet - logger log.Logger -} - -//type exposedMetrics struct { -// CollationSize *metrics.Gauge -// CollationSizeHist *metrics.Gauge -// PruneSize *metrics.Gauge -// -// lastCollSize int -// lastColHistSize int -// lastPruneSize int -//} -// -//func (e exposedMetrics) init() { -// e.CollationSize = metrics.GetOrCreateGauge("domain_collation_size", func() float64 { return 0 }) -// e.CollationSizeHist = metrics.GetOrCreateGauge("domain_collation_hist_size", func() float64 { return 0 }) -// e.PruneSize = metrics.GetOrCreateGauge("domain_prune_size", func() float64 { return e.lastPruneSize }) -//} - -func NewAggregator(dir, tmpdir string, aggregationStep uint64, commitmentMode CommitmentMode, commitTrieVariant commitment.TrieVariant, logger log.Logger) (*Aggregator, error) { - a := &Aggregator{aggregationStep: aggregationStep, ps: background.NewProgressSet(), tmpdir: tmpdir, stepDoneNotice: make(chan [length.Hash]byte, 1), logger: logger} - - closeAgg := true - defer func() { - if closeAgg { - a.Close() - } - }() - err := os.MkdirAll(dir, 0764) - if err != nil { - return nil, err + rwTx kv.RwTx + db kv.RoDB + storage *History + tracesTo *InvertedIndex + backgroundResult *BackgroundResult + code *History + logAddrs *InvertedIndex + logTopics *InvertedIndex + tracesFrom *InvertedIndex + accounts *History + logPrefix string + dir string + tmpdir string + aggregationStep uint64 + keepInDB uint64 + + minimaxTxNumInFiles atomic.Uint64 + + filesMutationLock sync.Mutex + + // To keep DB small - need move data to small files ASAP. + // It means goroutine which creating small files - can't be locked by merge or indexing. + buildingFiles atomic.Bool + mergeingFiles atomic.Bool + buildingOptionalIndices atomic.Bool + + //warmupWorking atomic.Bool + ctx context.Context + ctxCancel context.CancelFunc + + needSaveFilesListInDB atomic.Bool + wg sync.WaitGroup + + onFreeze OnFreezeFunc + walLock sync.RWMutex + + ps *background.ProgressSet + + // next fields are set only if agg.doTraceCtx is true. can enable by env: TRACE_AGG=true + leakDetector *dbg.LeakDetector + logger log.Logger +} + +type OnFreezeFunc func(frozenFileNames []string) + +func NewAggregator(ctx context.Context, dir, tmpdir string, aggregationStep uint64, db kv.RoDB, logger log.Logger) (*Aggregator, error) { + ctx, ctxCancel := context.WithCancel(ctx) + a := &Aggregator{ + ctx: ctx, + ctxCancel: ctxCancel, + onFreeze: func(frozenFileNames []string) {}, + dir: dir, + tmpdir: tmpdir, + aggregationStep: aggregationStep, + db: db, + keepInDB: 2 * aggregationStep, + leakDetector: dbg.NewLeakDetector("agg", dbg.SlowTx()), + ps: background.NewProgressSet(), + backgroundResult: &BackgroundResult{}, + logger: logger, } - if a.accounts, err = NewDomain(dir, tmpdir, aggregationStep, "accounts", kv.TblAccountKeys, kv.TblAccountVals, kv.TblAccountHistoryKeys, kv.TblAccountHistoryVals, kv.TblAccountIdx, false, false, logger); err != nil { - return nil, err - } - if a.storage, err = NewDomain(dir, tmpdir, aggregationStep, "storage", kv.TblStorageKeys, kv.TblStorageVals, kv.TblStorageHistoryKeys, kv.TblStorageHistoryVals, kv.TblStorageIdx, false, false, logger); err != nil { + var err error + if a.accounts, err = NewHistory(dir, a.tmpdir, aggregationStep, "accounts", kv.TblAccountHistoryKeys, kv.TblAccountIdx, kv.TblAccountHistoryVals, false, nil, false, logger); err != nil { return nil, err } - if a.code, err = NewDomain(dir, tmpdir, aggregationStep, "code", kv.TblCodeKeys, kv.TblCodeVals, kv.TblCodeHistoryKeys, kv.TblCodeHistoryVals, kv.TblCodeIdx, true, true, logger); err != nil { + if a.storage, err = NewHistory(dir, a.tmpdir, aggregationStep, "storage", kv.TblStorageHistoryKeys, kv.TblStorageIdx, kv.TblStorageHistoryVals, false, nil, false, logger); err != nil { return nil, err } - - commitd, err := NewDomain(dir, tmpdir, aggregationStep, "commitment", kv.TblCommitmentKeys, kv.TblCommitmentVals, kv.TblCommitmentHistoryKeys, kv.TblCommitmentHistoryVals, kv.TblCommitmentIdx, false, true, logger) - if err != nil { + if a.code, err = NewHistory(dir, a.tmpdir, aggregationStep, "code", kv.TblCodeHistoryKeys, kv.TblCodeIdx, kv.TblCodeHistoryVals, true, nil, true, logger); err != nil { return nil, err } - a.commitment = NewCommittedDomain(commitd, commitmentMode, commitTrieVariant, logger) - - if a.logAddrs, err = NewInvertedIndex(dir, tmpdir, aggregationStep, "logaddrs", kv.TblLogAddressKeys, kv.TblLogAddressIdx, false, nil, logger); err != nil { + if a.logAddrs, err = NewInvertedIndex(dir, a.tmpdir, aggregationStep, "logaddrs", kv.TblLogAddressKeys, kv.TblLogAddressIdx, false, nil, logger); err != nil { return nil, err } - if a.logTopics, err = NewInvertedIndex(dir, tmpdir, aggregationStep, "logtopics", kv.TblLogTopicsKeys, kv.TblLogTopicsIdx, false, nil, logger); err != nil { + if a.logTopics, err = NewInvertedIndex(dir, a.tmpdir, aggregationStep, "logtopics", kv.TblLogTopicsKeys, kv.TblLogTopicsIdx, false, nil, logger); err != nil { return nil, err } - if a.tracesFrom, err = NewInvertedIndex(dir, tmpdir, aggregationStep, "tracesfrom", kv.TblTracesFromKeys, kv.TblTracesFromIdx, false, nil, logger); err != nil { + if a.tracesFrom, err = NewInvertedIndex(dir, a.tmpdir, aggregationStep, "tracesfrom", kv.TblTracesFromKeys, kv.TblTracesFromIdx, false, nil, logger); err != nil { return nil, err } - if a.tracesTo, err = NewInvertedIndex(dir, tmpdir, aggregationStep, "tracesto", kv.TblTracesToKeys, kv.TblTracesToIdx, false, nil, logger); err != nil { + if a.tracesTo, err = NewInvertedIndex(dir, a.tmpdir, aggregationStep, "tracesto", kv.TblTracesToKeys, kv.TblTracesToIdx, false, nil, logger); err != nil { return nil, err } - closeAgg = false + a.recalcMaxTxNum() - a.seekTxNum = a.EndTxNumMinimax() return a, nil } +func (a *Aggregator) OnFreeze(f OnFreezeFunc) { a.onFreeze = f } -func (a *Aggregator) SetDB(db kv.RwDB) { a.db = db } - -func (a *Aggregator) buildMissedIdxBlocking(d *Domain) error { - eg, ctx := errgroup.WithContext(context.Background()) - eg.SetLimit(32) - if err := d.BuildMissedIndices(ctx, eg, a.ps); err != nil { - return err - } - return eg.Wait() -} -func (a *Aggregator) ReopenFolder() (err error) { - { - if err = a.buildMissedIdxBlocking(a.accounts); err != nil { - return err - } - if err = a.buildMissedIdxBlocking(a.storage); err != nil { - return err - } - if err = a.buildMissedIdxBlocking(a.code); err != nil { - return err - } - if err = a.buildMissedIdxBlocking(a.commitment.Domain); err != nil { - return err - } - } - +func (a *Aggregator) OpenFolder() error { + a.filesMutationLock.Lock() + defer a.filesMutationLock.Unlock() + var err error if err = a.accounts.OpenFolder(); err != nil { return fmt.Errorf("OpenFolder: %w", err) } @@ -190,9 +144,6 @@ func (a *Aggregator) ReopenFolder() (err error) { if err = a.code.OpenFolder(); err != nil { return fmt.Errorf("OpenFolder: %w", err) } - if err = a.commitment.OpenFolder(); err != nil { - return fmt.Errorf("OpenFolder: %w", err) - } if err = a.logAddrs.OpenFolder(); err != nil { return fmt.Errorf("OpenFolder: %w", err) } @@ -205,10 +156,13 @@ func (a *Aggregator) ReopenFolder() (err error) { if err = a.tracesTo.OpenFolder(); err != nil { return fmt.Errorf("OpenFolder: %w", err) } + a.recalcMaxTxNum() return nil } +func (a *Aggregator) OpenList(fNames []string) error { + a.filesMutationLock.Lock() + defer a.filesMutationLock.Unlock() -func (a *Aggregator) ReopenList(fNames []string) error { var err error if err = a.accounts.OpenList(fNames); err != nil { return err @@ -219,9 +173,6 @@ func (a *Aggregator) ReopenList(fNames []string) error { if err = a.code.OpenList(fNames); err != nil { return err } - if err = a.commitment.OpenList(fNames); err != nil { - return err - } if err = a.logAddrs.OpenList(fNames); err != nil { return err } @@ -234,69 +185,162 @@ func (a *Aggregator) ReopenList(fNames []string) error { if err = a.tracesTo.OpenList(fNames); err != nil { return err } + a.recalcMaxTxNum() return nil } -func (a *Aggregator) GetAndResetStats() DomainStats { - stats := DomainStats{HistoryQueries: &atomic.Uint64{}, TotalQueries: &atomic.Uint64{}} - stats.Accumulate(a.accounts.GetAndResetStats()) - stats.Accumulate(a.storage.GetAndResetStats()) - stats.Accumulate(a.code.GetAndResetStats()) - stats.Accumulate(a.commitment.GetAndResetStats()) - - var tto, tfrom, ltopics, laddr DomainStats - tto.FilesCount, tto.DataSize, tto.IndexSize = a.tracesTo.collectFilesStat() - tfrom.FilesCount, tfrom.DataSize, tfrom.DataSize = a.tracesFrom.collectFilesStat() - ltopics.FilesCount, ltopics.DataSize, ltopics.IndexSize = a.logTopics.collectFilesStat() - laddr.FilesCount, laddr.DataSize, laddr.IndexSize = a.logAddrs.collectFilesStat() +func (a *Aggregator) Close() { + a.ctxCancel() + a.wg.Wait() + + a.filesMutationLock.Lock() + defer a.filesMutationLock.Unlock() + + a.accounts.Close() + a.storage.Close() + a.code.Close() + a.logAddrs.Close() + a.logTopics.Close() + a.tracesFrom.Close() + a.tracesTo.Close() +} + +// CleanDir - call it manually on startup of Main application (don't call it from utilities or nother processes) +// - remove files ignored during opening of aggregator +// - remove files which marked as deleted but have no readers (usually last reader removing files marked as deleted) +func (a *Aggregator) CleanDir() { + a.accounts.deleteGarbageFiles() + a.storage.deleteGarbageFiles() + a.code.deleteGarbageFiles() + a.logAddrs.deleteGarbageFiles() + a.logTopics.deleteGarbageFiles() + a.tracesFrom.deleteGarbageFiles() + a.tracesTo.deleteGarbageFiles() + + ac := a.BeginFilesRo() + defer ac.Close() + ac.a.accounts.cleanAfterFreeze(ac.accounts.frozenTo()) + ac.a.storage.cleanAfterFreeze(ac.storage.frozenTo()) + ac.a.code.cleanAfterFreeze(ac.code.frozenTo()) + ac.a.logAddrs.cleanAfterFreeze(ac.logAddrs.frozenTo()) + ac.a.logTopics.cleanAfterFreeze(ac.logTopics.frozenTo()) + ac.a.tracesFrom.cleanAfterFreeze(ac.tracesFrom.frozenTo()) + ac.a.tracesTo.cleanAfterFreeze(ac.tracesTo.frozenTo()) +} - stats.Accumulate(tto) - stats.Accumulate(tfrom) - stats.Accumulate(ltopics) - stats.Accumulate(laddr) - return stats +func (a *Aggregator) SetWorkers(i int) { + a.accounts.compressWorkers = i + a.storage.compressWorkers = i + a.code.compressWorkers = i + a.logAddrs.compressWorkers = i + a.logTopics.compressWorkers = i + a.tracesFrom.compressWorkers = i + a.tracesTo.compressWorkers = i } -func (a *Aggregator) Close() { - if a.defaultCtx != nil { - a.defaultCtx.Close() - } - if a.stepDoneNotice != nil { - close(a.stepDoneNotice) - } - if a.accounts != nil { - a.accounts.Close() - } - if a.storage != nil { - a.storage.Close() - } - if a.code != nil { - a.code.Close() +func (a *Aggregator) HasBackgroundFilesBuild() bool { return a.ps.Has() } +func (a *Aggregator) BackgroundProgress() string { return a.ps.String() } + +func (a *Aggregator) Files() (res []string) { + if a == nil { + return res } - if a.commitment != nil { - a.commitment.Close() + a.filesMutationLock.Lock() + defer a.filesMutationLock.Unlock() + + res = append(res, a.accounts.Files()...) + res = append(res, a.storage.Files()...) + res = append(res, a.code.Files()...) + res = append(res, a.logAddrs.Files()...) + res = append(res, a.logTopics.Files()...) + res = append(res, a.tracesFrom.Files()...) + res = append(res, a.tracesTo.Files()...) + return res +} +func (a *Aggregator) BuildOptionalMissedIndicesInBackground(ctx context.Context, workers int) { + if ok := a.buildingOptionalIndices.CompareAndSwap(false, true); !ok { + return } + a.wg.Add(1) + go func() { + defer a.wg.Done() + defer a.buildingOptionalIndices.Store(false) + filesTx := a.BeginFilesRo() + defer filesTx.Close() + if err := filesTx.BuildOptionalMissedIndices(ctx, workers); err != nil { + if errors.Is(err, context.Canceled) { + return + } + log.Warn("[snapshots] merge", "err", err) + } + }() +} - if a.logAddrs != nil { - a.logAddrs.Close() +func (ac *AggregatorRoTx) BuildOptionalMissedIndices(ctx context.Context, workers int) error { + g, ctx := errgroup.WithContext(ctx) + g.SetLimit(workers) + if ac.accounts != nil { + g.Go(func() error { return ac.accounts.BuildOptionalMissedIndices(ctx) }) } - if a.logTopics != nil { - a.logTopics.Close() + if ac.storage != nil { + g.Go(func() error { return ac.storage.BuildOptionalMissedIndices(ctx) }) } - if a.tracesFrom != nil { - a.tracesFrom.Close() + if ac.code != nil { + g.Go(func() error { return ac.code.BuildOptionalMissedIndices(ctx) }) } - if a.tracesTo != nil { - a.tracesTo.Close() + return g.Wait() +} + +func (a *Aggregator) BuildMissedIndices(ctx context.Context, workers int) error { + startIndexingTime := time.Now() + { + ps := background.NewProgressSet() + + g, ctx := errgroup.WithContext(ctx) + g.SetLimit(workers) + go func() { + logEvery := time.NewTicker(20 * time.Second) + defer logEvery.Stop() + for { + select { + case <-ctx.Done(): + return + case <-logEvery.C: + var m runtime.MemStats + dbg.ReadMemStats(&m) + log.Info("[snapshots] Indexing", "progress", ps.String(), "total-indexing-time", time.Since(startIndexingTime).Round(time.Second).String(), "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys)) + } + } + }() + + a.accounts.BuildMissedIndices(ctx, g, ps) + a.storage.BuildMissedIndices(ctx, g, ps) + a.code.BuildMissedIndices(ctx, g, ps) + a.logAddrs.BuildMissedIndices(ctx, g, ps) + a.logTopics.BuildMissedIndices(ctx, g, ps) + a.tracesFrom.BuildMissedIndices(ctx, g, ps) + a.tracesTo.BuildMissedIndices(ctx, g, ps) + + if err := g.Wait(); err != nil { + return err + } + if err := a.OpenFolder(); err != nil { + return err + } } + + ac := a.BeginFilesRo() + defer ac.Close() + return ac.BuildOptionalMissedIndices(ctx, workers) } +func (a *Aggregator) SetLogPrefix(v string) { a.logPrefix = v } + func (a *Aggregator) SetTx(tx kv.RwTx) { a.rwTx = tx a.accounts.SetTx(tx) a.storage.SetTx(tx) a.code.SetTx(tx) - a.commitment.SetTx(tx) a.logAddrs.SetTx(tx) a.logTopics.SetTx(tx) a.tracesFrom.SetTx(tx) @@ -304,290 +348,277 @@ func (a *Aggregator) SetTx(tx kv.RwTx) { } func (a *Aggregator) SetTxNum(txNum uint64) { - mxCurrentTx.SetUint64(txNum) - - a.txNum = txNum a.accounts.SetTxNum(txNum) a.storage.SetTxNum(txNum) a.code.SetTxNum(txNum) - a.commitment.SetTxNum(txNum) a.logAddrs.SetTxNum(txNum) a.logTopics.SetTxNum(txNum) a.tracesFrom.SetTxNum(txNum) a.tracesTo.SetTxNum(txNum) } -func (a *Aggregator) SetBlockNum(blockNum uint64) { - a.blockNum = blockNum - mxCurrentBlock.SetUint64(blockNum) -} - -func (a *Aggregator) SetWorkers(i int) { - a.accounts.compressWorkers = i - a.storage.compressWorkers = i - a.code.compressWorkers = i - a.commitment.compressWorkers = i - a.logAddrs.compressWorkers = i - a.logTopics.compressWorkers = i - a.tracesFrom.compressWorkers = i - a.tracesTo.compressWorkers = i +type AggV3Collation struct { + logAddrs map[string]*roaring64.Bitmap + logTopics map[string]*roaring64.Bitmap + tracesFrom map[string]*roaring64.Bitmap + tracesTo map[string]*roaring64.Bitmap + accounts HistoryCollation + storage HistoryCollation + code HistoryCollation } -func (a *Aggregator) SetCommitmentMode(mode CommitmentMode) { - a.commitment.mode = mode -} +func (c AggV3Collation) Close() { + c.accounts.Close() + c.storage.Close() + c.code.Close() -func (a *Aggregator) EndTxNumMinimax() uint64 { - min := a.accounts.endTxNumMinimax() - if txNum := a.storage.endTxNumMinimax(); txNum < min { - min = txNum - } - if txNum := a.code.endTxNumMinimax(); txNum < min { - min = txNum + for _, b := range c.logAddrs { + bitmapdb.ReturnToPool64(b) } - if txNum := a.commitment.endTxNumMinimax(); txNum < min { - min = txNum - } - if txNum := a.logAddrs.endTxNumMinimax(); txNum < min { - min = txNum + for _, b := range c.logTopics { + bitmapdb.ReturnToPool64(b) } - if txNum := a.logTopics.endTxNumMinimax(); txNum < min { - min = txNum - } - if txNum := a.tracesFrom.endTxNumMinimax(); txNum < min { - min = txNum + for _, b := range c.tracesFrom { + bitmapdb.ReturnToPool64(b) } - if txNum := a.tracesTo.endTxNumMinimax(); txNum < min { - min = txNum + for _, b := range c.tracesTo { + bitmapdb.ReturnToPool64(b) } - return min } -func (a *Aggregator) DomainEndTxNumMinimax() uint64 { - min := a.accounts.endTxNumMinimax() - if txNum := a.storage.endTxNumMinimax(); txNum < min { - min = txNum +func (a *Aggregator) buildFiles(ctx context.Context, step, txFrom, txTo uint64) (AggV3StaticFiles, error) { + //logEvery := time.NewTicker(60 * time.Second) + //defer logEvery.Stop() + //defer func(t time.Time) { + // log.Info(fmt.Sprintf("[snapshot] build %d-%d", step, step+1), "took", time.Since(t)) + //}(time.Now()) + var sf AggV3StaticFiles + var ac AggV3Collation + closeColl := true + defer func() { + if closeColl { + ac.Close() + } + }() + //var wg sync.WaitGroup + //wg.Add(7) + //errCh := make(chan error, 7) + //go func() { + // defer wg.Done() + var err error + if err = a.db.View(ctx, func(tx kv.Tx) error { + ac.accounts, err = a.accounts.collate(step, txFrom, txTo, tx) + return err + }); err != nil { + return sf, err + //errCh <- err } - if txNum := a.code.endTxNumMinimax(); txNum < min { - min = txNum + + if sf.accounts, err = a.accounts.buildFiles(ctx, step, ac.accounts, a.ps); err != nil { + return sf, err + //errCh <- err } - if txNum := a.commitment.endTxNumMinimax(); txNum < min { - min = txNum + //}() + // + //go func() { + // defer wg.Done() + // var err error + if err = a.db.View(ctx, func(tx kv.Tx) error { + ac.storage, err = a.storage.collate(step, txFrom, txTo, tx) + return err + }); err != nil { + return sf, err + //errCh <- err } - return min -} -func (a *Aggregator) SeekCommitment() (blockNum, txNum uint64, err error) { - filesTxNum := a.EndTxNumMinimax() - blockNum, txNum, err = a.commitment.SeekCommitment(a.aggregationStep, filesTxNum) - if err != nil { - return 0, 0, err + if sf.storage, err = a.storage.buildFiles(ctx, step, ac.storage, a.ps); err != nil { + return sf, err + //errCh <- err } - if txNum == 0 { - return + //}() + //go func() { + // defer wg.Done() + // var err error + if err = a.db.View(ctx, func(tx kv.Tx) error { + ac.code, err = a.code.collate(step, txFrom, txTo, tx) + return err + }); err != nil { + return sf, err + //errCh <- err } - a.seekTxNum = txNum + 1 - return blockNum, txNum + 1, nil -} -func (a *Aggregator) mergeDomainSteps(ctx context.Context) error { - mergeStartedAt := time.Now() - maxEndTxNum := a.DomainEndTxNumMinimax() - - var upmerges int - for { - a.defaultCtx.Close() - a.defaultCtx = a.MakeContext() - - somethingMerged, err := a.mergeLoopStep(ctx, maxEndTxNum, 1) - if err != nil { - return err - } + if sf.code, err = a.code.buildFiles(ctx, step, ac.code, a.ps); err != nil { + return sf, err + //errCh <- err + } + //}() + //go func() { + // defer wg.Done() + // var err error + if err = a.db.View(ctx, func(tx kv.Tx) error { + ac.logAddrs, err = a.logAddrs.collate(ctx, txFrom, txTo, tx) + return err + }); err != nil { + return sf, err + //errCh <- err + } - if !somethingMerged { - break - } - upmerges++ + if sf.logAddrs, err = a.logAddrs.buildFiles(ctx, step, ac.logAddrs, a.ps); err != nil { + return sf, err + //errCh <- err + } + //}() + //go func() { + // defer wg.Done() + // var err error + if err = a.db.View(ctx, func(tx kv.Tx) error { + ac.logTopics, err = a.logTopics.collate(ctx, txFrom, txTo, tx) + return err + }); err != nil { + return sf, err + //errCh <- err } - if upmerges > 1 { - a.logger.Info("[stat] aggregation merged", - "upto_tx", maxEndTxNum, - "merge_took", time.Since(mergeStartedAt), - "merges_count", upmerges) + if sf.logTopics, err = a.logTopics.buildFiles(ctx, step, ac.logTopics, a.ps); err != nil { + return sf, err + //errCh <- err + } + //}() + //go func() { + // defer wg.Done() + // var err error + if err = a.db.View(ctx, func(tx kv.Tx) error { + ac.tracesFrom, err = a.tracesFrom.collate(ctx, txFrom, txTo, tx) + return err + }); err != nil { + return sf, err + //errCh <- err } - return nil + if sf.tracesFrom, err = a.tracesFrom.buildFiles(ctx, step, ac.tracesFrom, a.ps); err != nil { + return sf, err + //errCh <- err + } + //}() + //go func() { + // defer wg.Done() + // var err error + if err = a.db.View(ctx, func(tx kv.Tx) error { + ac.tracesTo, err = a.tracesTo.collate(ctx, txFrom, txTo, tx) + return err + }); err != nil { + return sf, err + //errCh <- err + } + + if sf.tracesTo, err = a.tracesTo.buildFiles(ctx, step, ac.tracesTo, a.ps); err != nil { + return sf, err + // errCh <- err + } + //}() + //go func() { + // wg.Wait() + //close(errCh) + //}() + //var lastError error + //for err := range errCh { + // if err != nil { + // lastError = err + // } + //} + //if lastError == nil { + closeColl = false + //} + return sf, nil } -func (a *Aggregator) aggregate(ctx context.Context, step uint64) error { - var ( - logEvery = time.NewTicker(time.Second * 30) - wg sync.WaitGroup - errCh = make(chan error, 8) - maxSpan = StepsInBiggestFile * a.aggregationStep - txFrom = step * a.aggregationStep - txTo = (step + 1) * a.aggregationStep - workers = 1 - - stepStartedAt = time.Now() - ) - - defer logEvery.Stop() - - for _, d := range []*Domain{a.accounts, a.storage, a.code, a.commitment.Domain} { - wg.Add(1) - - mxRunningCollations.Inc() - start := time.Now() - collation, err := d.collateStream(ctx, step, txFrom, txTo, d.tx) - mxRunningCollations.Dec() - mxCollateTook.ObserveDuration(start) - - //mxCollationSize.Set(uint64(collation.valuesComp.Count())) - mxCollationSizeHist.SetInt(collation.historyComp.Count()) - - if err != nil { - collation.Close() - return fmt.Errorf("domain collation %q has failed: %w", d.filenameBase, err) - } - - go func(wg *sync.WaitGroup, d *Domain, collation Collation) { - defer wg.Done() - mxRunningMerges.Inc() - - start := time.Now() - sf, err := d.buildFiles(ctx, step, collation, a.ps) - collation.Close() - - if err != nil { - errCh <- err - - sf.Close() - mxRunningMerges.Dec() - return - } - - mxRunningMerges.Dec() - - d.integrateFiles(sf, step*a.aggregationStep, (step+1)*a.aggregationStep) - d.stats.LastFileBuildingTook = time.Since(start) - }(&wg, d, collation) +type AggV3StaticFiles struct { + accounts HistoryFiles + storage HistoryFiles + code HistoryFiles + logAddrs InvertedFiles + logTopics InvertedFiles + tracesFrom InvertedFiles + tracesTo InvertedFiles +} - mxPruningProgress.Add(2) // domain and history - if err := d.prune(ctx, step, txFrom, txTo, math.MaxUint64, logEvery); err != nil { - return err - } - mxPruningProgress.Dec() - mxPruningProgress.Dec() +func (sf AggV3StaticFiles) Close() { + sf.accounts.Close() + sf.storage.Close() + sf.code.Close() + sf.logAddrs.Close() + sf.logTopics.Close() + sf.tracesFrom.Close() + sf.tracesTo.Close() +} - mxPruneTook.Observe(d.stats.LastPruneTook.Seconds()) - mxPruneHistTook.Observe(d.stats.LastPruneHistTook.Seconds()) +func (a *Aggregator) BuildFiles(toTxNum uint64) (err error) { + a.BuildFilesInBackground(toTxNum) + if !(a.buildingFiles.Load() || a.mergeingFiles.Load() || a.buildingOptionalIndices.Load()) { + return nil } - // when domain files are build and db is pruned, we can merge them - wg.Add(1) - go func(wg *sync.WaitGroup) { - defer wg.Done() - - if err := a.mergeDomainSteps(ctx); err != nil { - errCh <- err - } - }(&wg) - - // indices are built concurrently - for _, d := range []*InvertedIndex{a.logTopics, a.logAddrs, a.tracesFrom, a.tracesTo} { - wg.Add(1) - - mxRunningCollations.Inc() - start := time.Now() - collation, err := d.collate(ctx, step*a.aggregationStep, (step+1)*a.aggregationStep, d.tx) - mxRunningCollations.Dec() - mxCollateTook.ObserveDuration(start) - - if err != nil { - return fmt.Errorf("index collation %q has failed: %w", d.filenameBase, err) - } - - go func(wg *sync.WaitGroup, d *InvertedIndex, tx kv.Tx) { - defer wg.Done() - - mxRunningMerges.Inc() - start := time.Now() - - sf, err := d.buildFiles(ctx, step, collation, a.ps) - if err != nil { - errCh <- err - sf.Close() - return + logEvery := time.NewTicker(20 * time.Second) + defer logEvery.Stop() +Loop: + for { + select { + case <-a.ctx.Done(): + return a.ctx.Err() + case <-logEvery.C: + if !(a.buildingFiles.Load() || a.mergeingFiles.Load() || a.buildingOptionalIndices.Load()) { + break Loop } - - mxRunningMerges.Dec() - mxBuildTook.ObserveDuration(start) - - d.integrateFiles(sf, step*a.aggregationStep, (step+1)*a.aggregationStep) - - icx := d.MakeContext() - mxRunningMerges.Inc() - - if err := d.mergeRangesUpTo(ctx, d.endTxNumMinimax(), maxSpan, workers, icx, a.ps); err != nil { - errCh <- err - - mxRunningMerges.Dec() - icx.Close() - return + if a.HasBackgroundFilesBuild() { + log.Info("[snapshots] Files build", "progress", a.BackgroundProgress()) } - - mxRunningMerges.Dec() - icx.Close() - }(&wg, d, d.tx) - - mxPruningProgress.Inc() - startPrune := time.Now() - if err := d.prune(ctx, txFrom, txTo, math.MaxUint64, logEvery); err != nil { - return err } - mxPruneTook.ObserveDuration(startPrune) - mxPruningProgress.Dec() } - go func() { - wg.Wait() - close(errCh) - }() + return nil +} - for err := range errCh { - a.logger.Warn("domain collate-buildFiles failed", "err", err) - return fmt.Errorf("domain collate-build failed: %w", err) +func (a *Aggregator) buildFilesInBackground(ctx context.Context, step uint64) (err error) { + closeAll := true + //log.Info("[snapshots] history build", "step", fmt.Sprintf("%d-%d", step, step+1)) + sf, err := a.buildFiles(ctx, step, step*a.aggregationStep, (step+1)*a.aggregationStep) + if err != nil { + return err } + defer func() { + if closeAll { + sf.Close() + } + }() + a.integrateFiles(sf, step*a.aggregationStep, (step+1)*a.aggregationStep) + //a.notifyAboutNewSnapshots() - a.logger.Info("[stat] aggregation is finished", - "range", fmt.Sprintf("%.2fM-%.2fM", float64(txFrom)/10e5, float64(txTo)/10e5), - "took", time.Since(stepStartedAt)) - - mxStepTook.ObserveDuration(stepStartedAt) - + closeAll = false return nil } -func (a *Aggregator) mergeLoopStep(ctx context.Context, maxEndTxNum uint64, workers int) (somethingDone bool, err error) { - closeAll := true - mergeStartedAt := time.Now() +func (a *Aggregator) mergeLoopStep(ctx context.Context, workers int) (somethingDone bool, err error) { + ac := a.BeginFilesRo() // this need, to ensure we do all operations on files in "transaction-style", maybe we will ensure it on type-level in future + defer ac.Close() + closeAll := true maxSpan := a.aggregationStep * StepsInBiggestFile - r := a.findMergeRange(maxEndTxNum, maxSpan) + r := ac.findMergeRange(a.minimaxTxNumInFiles.Load(), maxSpan) if !r.any() { return false, nil } - outs := a.staticFilesInRange(r, a.defaultCtx) + outs, err := ac.staticFilesInRange(r) defer func() { if closeAll { outs.Close() } }() + if err != nil { + return false, err + } - in, err := a.mergeFiles(ctx, outs, r, workers) + in, err := ac.mergeFiles(ctx, outs, r, workers) if err != nil { return true, err } @@ -597,546 +628,768 @@ func (a *Aggregator) mergeLoopStep(ctx context.Context, maxEndTxNum uint64, work } }() a.integrateMergedFiles(outs, in) - a.cleanAfterNewFreeze(in) + a.onFreeze(in.FrozenList()) closeAll = false - - for _, s := range []DomainStats{a.accounts.stats, a.code.stats, a.storage.stats} { - mxBuildTook.Observe(s.LastFileBuildingTook.Seconds()) - } - - a.logger.Info("[stat] finished merge step", - "upto_tx", maxEndTxNum, "merge_step_took", time.Since(mergeStartedAt)) - return true, nil } - -type Ranges struct { - accounts DomainRanges - storage DomainRanges - code DomainRanges - commitment DomainRanges -} - -func (r Ranges) String() string { - return fmt.Sprintf("accounts=%s, storage=%s, code=%s, commitment=%s", r.accounts.String(), r.storage.String(), r.code.String(), r.commitment.String()) -} - -func (r Ranges) any() bool { - return r.accounts.any() || r.storage.any() || r.code.any() || r.commitment.any() +func (a *Aggregator) MergeLoop(ctx context.Context, workers int) error { + for { + somethingMerged, err := a.mergeLoopStep(ctx, workers) + if err != nil { + return err + } + if !somethingMerged { + return nil + } + } } -func (a *Aggregator) findMergeRange(maxEndTxNum, maxSpan uint64) Ranges { - var r Ranges - r.accounts = a.accounts.findMergeRange(maxEndTxNum, maxSpan) - r.storage = a.storage.findMergeRange(maxEndTxNum, maxSpan) - r.code = a.code.findMergeRange(maxEndTxNum, maxSpan) - r.commitment = a.commitment.findMergeRange(maxEndTxNum, maxSpan) - //if r.any() { - //log.Info(fmt.Sprintf("findMergeRange(%d, %d)=%+v\n", maxEndTxNum, maxSpan, r)) - //} - return r +func (a *Aggregator) integrateFiles(sf AggV3StaticFiles, txNumFrom, txNumTo uint64) { + a.filesMutationLock.Lock() + defer a.filesMutationLock.Unlock() + defer a.needSaveFilesListInDB.Store(true) + defer a.recalcMaxTxNum() + a.accounts.integrateFiles(sf.accounts, txNumFrom, txNumTo) + a.storage.integrateFiles(sf.storage, txNumFrom, txNumTo) + a.code.integrateFiles(sf.code, txNumFrom, txNumTo) + a.logAddrs.integrateFiles(sf.logAddrs, txNumFrom, txNumTo) + a.logTopics.integrateFiles(sf.logTopics, txNumFrom, txNumTo) + a.tracesFrom.integrateFiles(sf.tracesFrom, txNumFrom, txNumTo) + a.tracesTo.integrateFiles(sf.tracesTo, txNumFrom, txNumTo) } -type SelectedStaticFiles struct { - accounts []*filesItem - accountsIdx []*filesItem - accountsHist []*filesItem - storage []*filesItem - storageIdx []*filesItem - storageHist []*filesItem - code []*filesItem - codeIdx []*filesItem - codeHist []*filesItem - commitment []*filesItem - commitmentIdx []*filesItem - commitmentHist []*filesItem - codeI int - storageI int - accountsI int - commitmentI int -} - -func (sf SelectedStaticFiles) Close() { - for _, group := range [][]*filesItem{ - sf.accounts, sf.accountsIdx, sf.accountsHist, - sf.storage, sf.storageIdx, sf.storageHist, - sf.code, sf.codeIdx, sf.codeHist, - sf.commitment, sf.commitmentIdx, sf.commitmentHist, - } { - for _, item := range group { - if item != nil { - if item.decompressor != nil { - item.decompressor.Close() - } - if item.index != nil { - item.index.Close() - } - if item.bindex != nil { - item.bindex.Close() - } - } - } +func (a *Aggregator) HasNewFrozenFiles() bool { + if a == nil { + return false } + return a.needSaveFilesListInDB.CompareAndSwap(true, false) } -func (a *Aggregator) staticFilesInRange(r Ranges, ac *AggregatorContext) SelectedStaticFiles { - var sf SelectedStaticFiles - if r.accounts.any() { - sf.accounts, sf.accountsIdx, sf.accountsHist, sf.accountsI = ac.accounts.staticFilesInRange(r.accounts) +func (a *Aggregator) Unwind(ctx context.Context, txUnwindTo uint64) error { + logEvery := time.NewTicker(30 * time.Second) + defer logEvery.Stop() + if err := a.accounts.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { + return err } - if r.storage.any() { - sf.storage, sf.storageIdx, sf.storageHist, sf.storageI = ac.storage.staticFilesInRange(r.storage) + if err := a.storage.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { + return err } - if r.code.any() { - sf.code, sf.codeIdx, sf.codeHist, sf.codeI = ac.code.staticFilesInRange(r.code) + if err := a.code.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { + return err } - if r.commitment.any() { - sf.commitment, sf.commitmentIdx, sf.commitmentHist, sf.commitmentI = ac.commitment.staticFilesInRange(r.commitment) + if err := a.logAddrs.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { + return err } - return sf -} - -type MergedFiles struct { - accounts *filesItem - accountsIdx, accountsHist *filesItem - storage *filesItem - storageIdx, storageHist *filesItem - code *filesItem - codeIdx, codeHist *filesItem - commitment *filesItem - commitmentIdx, commitmentHist *filesItem + if err := a.logTopics.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { + return err + } + if err := a.tracesFrom.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { + return err + } + if err := a.tracesTo.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { + return err + } + return nil } -func (mf MergedFiles) Close() { - for _, item := range []*filesItem{ - mf.accounts, mf.accountsIdx, mf.accountsHist, - mf.storage, mf.storageIdx, mf.storageHist, - mf.code, mf.codeIdx, mf.codeHist, - mf.commitment, mf.commitmentIdx, mf.commitmentHist, - //mf.logAddrs, mf.logTopics, mf.tracesFrom, mf.tracesTo, - } { - if item != nil { - if item.decompressor != nil { - item.decompressor.Close() - } - if item.decompressor != nil { - item.index.Close() - } - if item.bindex != nil { - item.bindex.Close() - } - } +func (a *Aggregator) Warmup(ctx context.Context, txFrom, limit uint64) error { + if a.db == nil { + return nil } + e, ctx := errgroup.WithContext(ctx) + e.Go(func() error { + return a.db.View(ctx, func(tx kv.Tx) error { return a.accounts.warmup(ctx, txFrom, limit, tx) }) + }) + e.Go(func() error { + return a.db.View(ctx, func(tx kv.Tx) error { return a.storage.warmup(ctx, txFrom, limit, tx) }) + }) + e.Go(func() error { + return a.db.View(ctx, func(tx kv.Tx) error { return a.code.warmup(ctx, txFrom, limit, tx) }) + }) + e.Go(func() error { + return a.db.View(ctx, func(tx kv.Tx) error { return a.logAddrs.warmup(ctx, txFrom, limit, tx) }) + }) + e.Go(func() error { + return a.db.View(ctx, func(tx kv.Tx) error { return a.logTopics.warmup(ctx, txFrom, limit, tx) }) + }) + e.Go(func() error { + return a.db.View(ctx, func(tx kv.Tx) error { return a.tracesFrom.warmup(ctx, txFrom, limit, tx) }) + }) + e.Go(func() error { + return a.db.View(ctx, func(tx kv.Tx) error { return a.tracesTo.warmup(ctx, txFrom, limit, tx) }) + }) + return e.Wait() } -func (a *Aggregator) mergeFiles(ctx context.Context, files SelectedStaticFiles, r Ranges, workers int) (MergedFiles, error) { - started := time.Now() - defer func(t time.Time) { - a.logger.Info("[snapshots] domain files has been merged", - "range", fmt.Sprintf("%d-%d", r.accounts.valuesStartTxNum/a.aggregationStep, r.accounts.valuesEndTxNum/a.aggregationStep), - "took", time.Since(t)) - }(started) - - var mf MergedFiles - closeFiles := true - defer func() { - if closeFiles { - mf.Close() - } - }() - - var ( - errCh = make(chan error, 4) - wg sync.WaitGroup - predicates sync.WaitGroup - ) - - wg.Add(4) - predicates.Add(2) +// StartWrites - pattern: `defer agg.StartWrites().FinishWrites()` +func (a *Aggregator) DiscardHistory() *Aggregator { + a.accounts.DiscardHistory() + a.storage.DiscardHistory() + a.code.DiscardHistory() + a.logAddrs.DiscardHistory(a.tmpdir) + a.logTopics.DiscardHistory(a.tmpdir) + a.tracesFrom.DiscardHistory(a.tmpdir) + a.tracesTo.DiscardHistory(a.tmpdir) + return a +} - go func() { - mxRunningMerges.Inc() - defer mxRunningMerges.Dec() - defer wg.Done() - - var err error - if r.code.any() { - if mf.code, mf.codeIdx, mf.codeHist, err = a.code.mergeFiles(ctx, files.code, files.codeIdx, files.codeHist, r.code, workers, a.ps); err != nil { - errCh <- err - } - } - }() +// StartWrites - pattern: `defer agg.StartWrites().FinishWrites()` +func (a *Aggregator) StartWrites() *Aggregator { + a.walLock.Lock() + defer a.walLock.Unlock() + a.accounts.StartWrites() + a.storage.StartWrites() + a.code.StartWrites() + a.logAddrs.StartWrites() + a.logTopics.StartWrites() + a.tracesFrom.StartWrites() + a.tracesTo.StartWrites() + return a +} +func (a *Aggregator) StartUnbufferedWrites() *Aggregator { + a.walLock.Lock() + defer a.walLock.Unlock() + a.accounts.StartWrites() + a.storage.StartWrites() + a.code.StartWrites() + a.logAddrs.StartWrites() + a.logTopics.StartWrites() + a.tracesFrom.StartWrites() + a.tracesTo.StartWrites() + return a +} +func (a *Aggregator) FinishWrites() { + a.walLock.Lock() + defer a.walLock.Unlock() + a.accounts.FinishWrites() + a.storage.FinishWrites() + a.code.FinishWrites() + a.logAddrs.FinishWrites() + a.logTopics.FinishWrites() + a.tracesFrom.FinishWrites() + a.tracesTo.FinishWrites() +} - go func(predicates *sync.WaitGroup) { - mxRunningMerges.Inc() - defer mxRunningMerges.Dec() +type flusher interface { + Flush(ctx context.Context, tx kv.RwTx) error +} - defer wg.Done() - defer predicates.Done() - var err error - if r.accounts.any() { - if mf.accounts, mf.accountsIdx, mf.accountsHist, err = a.accounts.mergeFiles(ctx, files.accounts, files.accountsIdx, files.accountsHist, r.accounts, workers, a.ps); err != nil { - errCh <- err - } - } - }(&predicates) - go func(predicates *sync.WaitGroup) { - mxRunningMerges.Inc() - defer mxRunningMerges.Dec() - - defer wg.Done() - defer predicates.Done() - var err error - if r.storage.any() { - if mf.storage, mf.storageIdx, mf.storageHist, err = a.storage.mergeFiles(ctx, files.storage, files.storageIdx, files.storageHist, r.storage, workers, a.ps); err != nil { - errCh <- err - } +func (a *Aggregator) rotate() []flusher { + a.walLock.Lock() + defer a.walLock.Unlock() + return []flusher{ + a.accounts.Rotate(), + a.storage.Rotate(), + a.code.Rotate(), + a.logAddrs.Rotate(), + a.logTopics.Rotate(), + a.tracesFrom.Rotate(), + a.tracesTo.Rotate(), + } +} +func (a *Aggregator) Flush(ctx context.Context, tx kv.RwTx) error { + flushers := a.rotate() + defer func(t time.Time) { log.Debug("[snapshots] history flush", "took", time.Since(t)) }(time.Now()) + for _, f := range flushers { + if err := f.Flush(ctx, tx); err != nil { + return err } - }(&predicates) - - go func(predicates *sync.WaitGroup) { - defer wg.Done() - predicates.Wait() + } + return nil +} - mxRunningMerges.Inc() - defer mxRunningMerges.Dec() +func (a *Aggregator) CanPrune(tx kv.Tx) bool { + return a.CanPruneFrom(tx) < a.minimaxTxNumInFiles.Load() +} +func (a *Aggregator) CanPruneFrom(tx kv.Tx) uint64 { + fst, _ := kv.FirstKey(tx, kv.TblTracesToKeys) + fst2, _ := kv.FirstKey(tx, kv.TblStorageHistoryKeys) + if len(fst) > 0 && len(fst2) > 0 { + fstInDb := binary.BigEndian.Uint64(fst) + fstInDb2 := binary.BigEndian.Uint64(fst2) + return cmp.Min(fstInDb, fstInDb2) + } + return math2.MaxUint64 +} - var err error - // requires storage|accounts to be merged at this point - if r.commitment.any() { - if mf.commitment, mf.commitmentIdx, mf.commitmentHist, err = a.commitment.mergeFiles(ctx, files, mf, r.commitment, workers, a.ps); err != nil { - errCh <- err - } +func (a *Aggregator) PruneWithTiemout(ctx context.Context, timeout time.Duration) error { + t := time.Now() + for a.CanPrune(a.rwTx) && time.Since(t) < timeout { + if err := a.Prune(ctx, 1_000); err != nil { // prune part of retired data, before commit + return err } - }(&predicates) - - go func() { - wg.Wait() - close(errCh) - }() - - var lastError error - for err := range errCh { - lastError = err } - if lastError == nil { - closeFiles = false - } - return mf, lastError + return nil } -func (a *Aggregator) integrateMergedFiles(outs SelectedStaticFiles, in MergedFiles) { - a.accounts.integrateMergedFiles(outs.accounts, outs.accountsIdx, outs.accountsHist, in.accounts, in.accountsIdx, in.accountsHist) - a.storage.integrateMergedFiles(outs.storage, outs.storageIdx, outs.storageHist, in.storage, in.storageIdx, in.storageHist) - a.code.integrateMergedFiles(outs.code, outs.codeIdx, outs.codeHist, in.code, in.codeIdx, in.codeHist) - a.commitment.integrateMergedFiles(outs.commitment, outs.commitmentIdx, outs.commitmentHist, in.commitment, in.commitmentIdx, in.commitmentHist) +func (a *Aggregator) StepsRangeInDBAsStr(tx kv.Tx) string { + return strings.Join([]string{ + a.accounts.stepsRangeInDBAsStr(tx), + a.storage.stepsRangeInDBAsStr(tx), + a.code.stepsRangeInDBAsStr(tx), + a.logAddrs.stepsRangeInDBAsStr(tx), + a.logTopics.stepsRangeInDBAsStr(tx), + a.tracesFrom.stepsRangeInDBAsStr(tx), + a.tracesTo.stepsRangeInDBAsStr(tx), + }, ", ") +} + +func (a *Aggregator) Prune(ctx context.Context, limit uint64) error { + //if limit/a.aggregationStep > StepsInBiggestFile { + // ctx, cancel := context.WithCancel(ctx) + // defer cancel() + // + // a.wg.Add(1) + // go func() { + // defer a.wg.Done() + // _ = a.Warmup(ctx, 0, cmp.Max(a.aggregationStep, limit)) // warmup is asyn and moving faster than data deletion + // }() + //} + return a.prune(ctx, 0, a.minimaxTxNumInFiles.Load(), limit) } -func (a *Aggregator) cleanAfterNewFreeze(in MergedFiles) { - a.accounts.cleanAfterFreeze(in.accountsHist.endTxNum) - a.storage.cleanAfterFreeze(in.storageHist.endTxNum) - a.code.cleanAfterFreeze(in.codeHist.endTxNum) - a.commitment.cleanAfterFreeze(in.commitment.endTxNum) +func (a *Aggregator) prune(ctx context.Context, txFrom, txTo, limit uint64) error { + logEvery := time.NewTicker(30 * time.Second) + defer logEvery.Stop() + if err := a.accounts.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { + return err + } + if err := a.storage.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { + return err + } + if err := a.code.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { + return err + } + if err := a.logAddrs.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { + return err + } + if err := a.logTopics.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { + return err + } + if err := a.tracesFrom.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { + return err + } + if err := a.tracesTo.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { + return err + } + return nil } -// ComputeCommitment evaluates commitment for processed state. -// If `saveStateAfter`=true, then trie state will be saved to DB after commitment evaluation. -func (a *Aggregator) ComputeCommitment(saveStateAfter, trace bool) (rootHash []byte, err error) { - // if commitment mode is Disabled, there will be nothing to compute on. - mxCommitmentRunning.Inc() - rootHash, branchNodeUpdates, err := a.commitment.ComputeCommitment(trace) - mxCommitmentRunning.Dec() +func (a *Aggregator) LogStats(tx kv.Tx, tx2block func(endTxNumMinimax uint64) uint64) { + if a.minimaxTxNumInFiles.Load() == 0 { + return + } + histBlockNumProgress := tx2block(a.minimaxTxNumInFiles.Load()) + str := make([]string, 0, a.accounts.InvertedIndex.dirtyFiles.Len()) + a.accounts.InvertedIndex.dirtyFiles.Walk(func(items []*filesItem) bool { + for _, item := range items { + bn := tx2block(item.endTxNum) + str = append(str, fmt.Sprintf("%d=%dK", item.endTxNum/a.aggregationStep, bn/1_000)) + } + return true + }) + c, err := tx.CursorDupSort(a.accounts.InvertedIndex.indexTable) if err != nil { - return nil, err + // TODO pass error properly around + panic(err) } - if a.seekTxNum > a.txNum { - saveStateAfter = false + _, v, err := c.First() + if err != nil { + // TODO pass error properly around + panic(err) + } + var firstHistoryIndexBlockInDB uint64 + if len(v) != 0 { + firstHistoryIndexBlockInDB = tx2block(binary.BigEndian.Uint64(v)) + } + + var m runtime.MemStats + dbg.ReadMemStats(&m) + log.Info("[snapshots] History Stat", + "blocks", fmt.Sprintf("%dk", (histBlockNumProgress+1)/1000), + "txs", fmt.Sprintf("%dm", a.minimaxTxNumInFiles.Load()/1_000_000), + "txNum2blockNum", strings.Join(str, ","), + "first_history_idx_in_db", firstHistoryIndexBlockInDB, + "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys)) +} + +func (a *Aggregator) EndTxNumMinimax() uint64 { return a.minimaxTxNumInFiles.Load() } +func (a *Aggregator) EndTxNumFrozenAndIndexed() uint64 { + return cmp.Min( + cmp.Min( + a.accounts.endIndexedTxNumMinimax(true), + a.storage.endIndexedTxNumMinimax(true), + ), + a.code.endIndexedTxNumMinimax(true), + ) +} +func (a *Aggregator) recalcMaxTxNum() { + min := a.accounts.endTxNumMinimax() + if txNum := a.storage.endTxNumMinimax(); txNum < min { + min = txNum } + if txNum := a.code.endTxNumMinimax(); txNum < min { + min = txNum + } + if txNum := a.logAddrs.endTxNumMinimax(); txNum < min { + min = txNum + } + if txNum := a.logTopics.endTxNumMinimax(); txNum < min { + min = txNum + } + if txNum := a.tracesFrom.endTxNumMinimax(); txNum < min { + min = txNum + } + if txNum := a.tracesTo.endTxNumMinimax(); txNum < min { + min = txNum + } + a.minimaxTxNumInFiles.Store(min) +} + +type RangesV3 struct { + accounts HistoryRanges + storage HistoryRanges + code HistoryRanges + logTopicsStartTxNum uint64 + logAddrsEndTxNum uint64 + logAddrsStartTxNum uint64 + logTopicsEndTxNum uint64 + tracesFromStartTxNum uint64 + tracesFromEndTxNum uint64 + tracesToStartTxNum uint64 + tracesToEndTxNum uint64 + logAddrs bool + logTopics bool + tracesFrom bool + tracesTo bool +} + +func (r RangesV3) any() bool { + return r.accounts.any() || r.storage.any() || r.code.any() || r.logAddrs || r.logTopics || r.tracesFrom || r.tracesTo +} + +func (ac *AggregatorRoTx) findMergeRange(maxEndTxNum, maxSpan uint64) RangesV3 { + var r RangesV3 + r.accounts = ac.a.accounts.findMergeRange(maxEndTxNum, maxSpan) + r.storage = ac.a.storage.findMergeRange(maxEndTxNum, maxSpan) + r.code = ac.a.code.findMergeRange(maxEndTxNum, maxSpan) + r.logAddrs, r.logAddrsStartTxNum, r.logAddrsEndTxNum = ac.a.logAddrs.findMergeRange(maxEndTxNum, maxSpan) + r.logTopics, r.logTopicsStartTxNum, r.logTopicsEndTxNum = ac.a.logTopics.findMergeRange(maxEndTxNum, maxSpan) + r.tracesFrom, r.tracesFromStartTxNum, r.tracesFromEndTxNum = ac.a.tracesFrom.findMergeRange(maxEndTxNum, maxSpan) + r.tracesTo, r.tracesToStartTxNum, r.tracesToEndTxNum = ac.a.tracesTo.findMergeRange(maxEndTxNum, maxSpan) + //log.Info(fmt.Sprintf("findMergeRange(%d, %d)=%+v\n", maxEndTxNum, maxSpan, r)) + return r +} - mxCommitmentKeys.AddUint64(a.commitment.comKeys) - mxCommitmentTook.Observe(a.commitment.comTook.Seconds()) - - defer func(t time.Time) { mxCommitmentWriteTook.ObserveDuration(t) }(time.Now()) - - for pref, update := range branchNodeUpdates { - prefix := []byte(pref) +type SelectedStaticFilesV3 struct { + logTopics []*filesItem + accountsHist []*filesItem + tracesTo []*filesItem + storageIdx []*filesItem + storageHist []*filesItem + tracesFrom []*filesItem + codeIdx []*filesItem + codeHist []*filesItem + accountsIdx []*filesItem + logAddrs []*filesItem + codeI int + logAddrsI int + logTopicsI int + storageI int + tracesFromI int + accountsI int + tracesToI int +} + +func (sf SelectedStaticFilesV3) Close() { + for _, group := range [][]*filesItem{sf.accountsIdx, sf.accountsHist, sf.storageIdx, sf.accountsHist, sf.codeIdx, sf.codeHist, + sf.logAddrs, sf.logTopics, sf.tracesFrom, sf.tracesTo} { + for _, item := range group { + if item != nil { + if item.decompressor != nil { + item.decompressor.Close() + } + if item.index != nil { + item.index.Close() + } + } + } + } +} - stateValue, err := a.defaultCtx.ReadCommitment(prefix, a.rwTx) +func (ac *AggregatorRoTx) staticFilesInRange(r RangesV3) (sf SelectedStaticFilesV3, err error) { + if r.accounts.any() { + sf.accountsIdx, sf.accountsHist, sf.accountsI, err = ac.accounts.staticFilesInRange(r.accounts) if err != nil { - return nil, err + return sf, err } - mxCommitmentUpdates.Inc() - stated := commitment.BranchData(stateValue) - merged, err := a.commitment.branchMerger.Merge(stated, update) + } + if r.storage.any() { + sf.storageIdx, sf.storageHist, sf.storageI, err = ac.storage.staticFilesInRange(r.storage) if err != nil { - return nil, err - } - if bytes.Equal(stated, merged) { - continue - } - if trace { - fmt.Printf("computeCommitment merge [%x] [%x]+[%x]=>[%x]\n", prefix, stated, update, merged) - } - if err = a.UpdateCommitmentData(prefix, merged); err != nil { - return nil, err + return sf, err } - mxCommitmentUpdatesApplied.Inc() } - - if saveStateAfter { - if err := a.commitment.storeCommitmentState(a.blockNum, a.txNum); err != nil { - return nil, err + if r.code.any() { + sf.codeIdx, sf.codeHist, sf.codeI, err = ac.code.staticFilesInRange(r.code) + if err != nil { + return sf, err } } - - return rootHash, nil -} - -// AggregatedRoots Provides channel which receives commitment hash each time aggregation is occured -func (a *Aggregator) AggregatedRoots() chan [length.Hash]byte { - return a.stepDoneNotice -} - -func (a *Aggregator) notifyAggregated(rootHash []byte) { - rh := (*[length.Hash]byte)(rootHash) - select { - case a.stepDoneNotice <- *rh: - default: + if r.logAddrs { + sf.logAddrs, sf.logAddrsI = ac.logAddrs.staticFilesInRange(r.logAddrsStartTxNum, r.logAddrsEndTxNum) + } + if r.logTopics { + sf.logTopics, sf.logTopicsI = ac.logTopics.staticFilesInRange(r.logTopicsStartTxNum, r.logTopicsEndTxNum) + } + if r.tracesFrom { + sf.tracesFrom, sf.tracesFromI = ac.tracesFrom.staticFilesInRange(r.tracesFromStartTxNum, r.tracesFromEndTxNum) + } + if r.tracesTo { + sf.tracesTo, sf.tracesToI = ac.tracesTo.staticFilesInRange(r.tracesToStartTxNum, r.tracesToEndTxNum) } + return sf, err } -func (a *Aggregator) ReadyToFinishTx() bool { - return (a.txNum+1)%a.aggregationStep == 0 && a.seekTxNum < a.txNum +type MergedFilesV3 struct { + accountsIdx, accountsHist *filesItem + storageIdx, storageHist *filesItem + codeIdx, codeHist *filesItem + logAddrs *filesItem + logTopics *filesItem + tracesFrom *filesItem + tracesTo *filesItem } -func (a *Aggregator) FinishTx() (err error) { - atomic.AddUint64(&a.stats.TxCount, 1) - - if !a.ReadyToFinishTx() { - return nil +func (mf MergedFilesV3) FrozenList() (frozen []string) { + if mf.accountsHist != nil && mf.accountsHist.frozen { + frozen = append(frozen, mf.accountsHist.decompressor.FileName()) } - - mxRunningMerges.Inc() - defer mxRunningMerges.Dec() - - a.commitment.patriciaTrie.ResetFns(a.defaultCtx.branchFn, a.defaultCtx.accountFn, a.defaultCtx.storageFn) - rootHash, err := a.ComputeCommitment(true, false) - if err != nil { - return err + if mf.accountsIdx != nil && mf.accountsIdx.frozen { + frozen = append(frozen, mf.accountsIdx.decompressor.FileName()) } - step := a.txNum / a.aggregationStep - mxStepCurrent.SetUint64(step) - if step == 0 { - a.notifyAggregated(rootHash) - return nil + if mf.storageHist != nil && mf.storageHist.frozen { + frozen = append(frozen, mf.storageHist.decompressor.FileName()) } - step-- // Leave one step worth in the DB - - ctx := context.Background() - if err := a.Flush(ctx); err != nil { - return err + if mf.storageIdx != nil && mf.storageIdx.frozen { + frozen = append(frozen, mf.storageIdx.decompressor.FileName()) } - if err := a.aggregate(ctx, step); err != nil { - return err + if mf.codeHist != nil && mf.codeHist.frozen { + frozen = append(frozen, mf.codeHist.decompressor.FileName()) + } + if mf.codeIdx != nil && mf.codeIdx.frozen { + frozen = append(frozen, mf.codeIdx.decompressor.FileName()) } - a.notifyAggregated(rootHash) - return nil + if mf.logAddrs != nil && mf.logAddrs.frozen { + frozen = append(frozen, mf.logAddrs.decompressor.FileName()) + } + if mf.logTopics != nil && mf.logTopics.frozen { + frozen = append(frozen, mf.logTopics.decompressor.FileName()) + } + if mf.tracesFrom != nil && mf.tracesFrom.frozen { + frozen = append(frozen, mf.tracesFrom.decompressor.FileName()) + } + if mf.tracesTo != nil && mf.tracesTo.frozen { + frozen = append(frozen, mf.tracesTo.decompressor.FileName()) + } + return frozen } - -func (a *Aggregator) UpdateAccountData(addr []byte, account []byte) error { - a.commitment.TouchPlainKey(addr, account, a.commitment.TouchPlainKeyAccount) - return a.accounts.Put(addr, nil, account) +func (mf MergedFilesV3) Close() { + for _, item := range []*filesItem{mf.accountsIdx, mf.accountsHist, mf.storageIdx, mf.storageHist, mf.codeIdx, mf.codeHist, + mf.logAddrs, mf.logTopics, mf.tracesFrom, mf.tracesTo} { + if item != nil { + if item.decompressor != nil { + item.decompressor.Close() + } + if item.index != nil { + item.index.Close() + } + } + } } -func (a *Aggregator) UpdateAccountCode(addr []byte, code []byte) error { - a.commitment.TouchPlainKey(addr, code, a.commitment.TouchPlainKeyCode) - if len(code) == 0 { - return a.code.Delete(addr, nil) +func (ac *AggregatorRoTx) mergeFiles(ctx context.Context, files SelectedStaticFilesV3, r RangesV3, workers int) (MergedFilesV3, error) { + var mf MergedFilesV3 + g, ctx := errgroup.WithContext(ctx) + g.SetLimit(workers) + closeFiles := true + defer func() { + if closeFiles { + mf.Close() + } + }() + if r.accounts.any() { + g.Go(func() error { + var err error + mf.accountsIdx, mf.accountsHist, err = ac.a.accounts.mergeFiles(ctx, files.accountsIdx, files.accountsHist, r.accounts, workers, ac.a.ps) + return err + }) } - return a.code.Put(addr, nil, code) -} -func (a *Aggregator) UpdateCommitmentData(prefix []byte, code []byte) error { - return a.commitment.Put(prefix, nil, code) + if r.storage.any() { + g.Go(func() error { + var err error + mf.storageIdx, mf.storageHist, err = ac.a.storage.mergeFiles(ctx, files.storageIdx, files.storageHist, r.storage, workers, ac.a.ps) + return err + }) + } + if r.code.any() { + g.Go(func() error { + var err error + mf.codeIdx, mf.codeHist, err = ac.a.code.mergeFiles(ctx, files.codeIdx, files.codeHist, r.code, workers, ac.a.ps) + return err + }) + } + if r.logAddrs { + g.Go(func() error { + var err error + mf.logAddrs, err = ac.a.logAddrs.mergeFiles(ctx, files.logAddrs, r.logAddrsStartTxNum, r.logAddrsEndTxNum, workers, ac.a.ps) + return err + }) + } + if r.logTopics { + g.Go(func() error { + var err error + mf.logTopics, err = ac.a.logTopics.mergeFiles(ctx, files.logTopics, r.logTopicsStartTxNum, r.logTopicsEndTxNum, workers, ac.a.ps) + return err + }) + } + if r.tracesFrom { + g.Go(func() error { + var err error + mf.tracesFrom, err = ac.a.tracesFrom.mergeFiles(ctx, files.tracesFrom, r.tracesFromStartTxNum, r.tracesFromEndTxNum, workers, ac.a.ps) + return err + }) + } + if r.tracesTo { + g.Go(func() error { + var err error + mf.tracesTo, err = ac.a.tracesTo.mergeFiles(ctx, files.tracesTo, r.tracesToStartTxNum, r.tracesToEndTxNum, workers, ac.a.ps) + return err + }) + } + err := g.Wait() + if err == nil { + closeFiles = false + } + return mf, err +} + +func (a *Aggregator) integrateMergedFiles(outs SelectedStaticFilesV3, in MergedFilesV3) (frozen []string) { + a.filesMutationLock.Lock() + defer a.filesMutationLock.Unlock() + defer a.needSaveFilesListInDB.Store(true) + defer a.recalcMaxTxNum() + a.accounts.integrateMergedFiles(outs.accountsIdx, outs.accountsHist, in.accountsIdx, in.accountsHist) + a.storage.integrateMergedFiles(outs.storageIdx, outs.storageHist, in.storageIdx, in.storageHist) + a.code.integrateMergedFiles(outs.codeIdx, outs.codeHist, in.codeIdx, in.codeHist) + a.logAddrs.integrateMergedFiles(outs.logAddrs, in.logAddrs) + a.logTopics.integrateMergedFiles(outs.logTopics, in.logTopics) + a.tracesFrom.integrateMergedFiles(outs.tracesFrom, in.tracesFrom) + a.tracesTo.integrateMergedFiles(outs.tracesTo, in.tracesTo) + a.cleanAfterNewFreeze(in) + return frozen } - -func (a *Aggregator) DeleteAccount(addr []byte) error { - a.commitment.TouchPlainKey(addr, nil, a.commitment.TouchPlainKeyAccount) - - if err := a.accounts.Delete(addr, nil); err != nil { - return err +func (a *Aggregator) cleanAfterNewFreeze(in MergedFilesV3) { + if in.accountsHist != nil && in.accountsHist.frozen { + a.accounts.cleanAfterFreeze(in.accountsHist.endTxNum) } - if err := a.code.Delete(addr, nil); err != nil { - return err + if in.storageHist != nil && in.storageHist.frozen { + a.storage.cleanAfterFreeze(in.storageHist.endTxNum) } - var e error - if err := a.storage.defaultDc.IteratePrefix(addr, func(k, _ []byte) { - a.commitment.TouchPlainKey(k, nil, a.commitment.TouchPlainKeyStorage) - if e == nil { - e = a.storage.Delete(k, nil) - } - }); err != nil { - return err + if in.codeHist != nil && in.codeHist.frozen { + a.code.cleanAfterFreeze(in.codeHist.endTxNum) + } + if in.logAddrs != nil && in.logAddrs.frozen { + a.logAddrs.cleanAfterFreeze(in.logAddrs.endTxNum) + } + if in.logTopics != nil && in.logTopics.frozen { + a.logTopics.cleanAfterFreeze(in.logTopics.endTxNum) + } + if in.tracesFrom != nil && in.tracesFrom.frozen { + a.tracesFrom.cleanAfterFreeze(in.tracesFrom.endTxNum) + } + if in.tracesTo != nil && in.tracesTo.frozen { + a.tracesTo.cleanAfterFreeze(in.tracesTo.endTxNum) } - return e } -func (a *Aggregator) WriteAccountStorage(addr, loc []byte, value []byte) error { - composite := make([]byte, len(addr)+len(loc)) - copy(composite, addr) - copy(composite[length.Addr:], loc) +// KeepInDB - usually equal to one a.aggregationStep, but when we exec blocks from snapshots +// we can set it to 0, because no re-org on this blocks are possible +func (a *Aggregator) KeepInDB(v uint64) { a.keepInDB = v } - a.commitment.TouchPlainKey(composite, value, a.commitment.TouchPlainKeyStorage) - if len(value) == 0 { - return a.storage.Delete(addr, loc) +func (a *Aggregator) BuildFilesInBackground(txNum uint64) { + if (txNum + 1) <= a.minimaxTxNumInFiles.Load()+a.aggregationStep+a.keepInDB { // Leave one step worth in the DB + return } - return a.storage.Put(addr, loc, value) -} -func (a *Aggregator) AddTraceFrom(addr []byte) error { - return a.tracesFrom.Add(addr) -} + if ok := a.buildingFiles.CompareAndSwap(false, true); !ok { + return + } -func (a *Aggregator) AddTraceTo(addr []byte) error { - return a.tracesTo.Add(addr) -} + step := a.minimaxTxNumInFiles.Load() / a.aggregationStep + toTxNum := (step + 1) * a.aggregationStep + hasData := false + a.wg.Add(1) + go func() { + defer a.wg.Done() + defer a.buildingFiles.Store(false) -func (a *Aggregator) AddLogAddr(addr []byte) error { - return a.logAddrs.Add(addr) -} + // check if db has enough data (maybe we didn't commit them yet) + lastInDB := lastIdInDB(a.db, a.accounts.indexKeysTable) + hasData = lastInDB >= toTxNum + if !hasData { + return + } -func (a *Aggregator) AddLogTopic(topic []byte) error { - return a.logTopics.Add(topic) -} + // trying to create as much small-step-files as possible: + // - to reduce amount of small merges + // - to remove old data from db as early as possible + // - during files build, may happen commit of new data. on each loop step getting latest id in db + for step < lastIdInDB(a.db, a.accounts.indexKeysTable)/a.aggregationStep { + if err := a.buildFilesInBackground(a.ctx, step); err != nil { + if errors.Is(err, context.Canceled) { + return + } + log.Warn("[snapshots] buildFilesInBackground", "err", err) + break + } + step++ + } -// StartWrites - pattern: `defer agg.StartWrites().FinishWrites()` -func (a *Aggregator) StartWrites() *Aggregator { - a.accounts.StartWrites() - a.storage.StartWrites() - a.code.StartWrites() - a.commitment.StartWrites() - a.logAddrs.StartWrites() - a.logTopics.StartWrites() - a.tracesFrom.StartWrites() - a.tracesTo.StartWrites() + if ok := a.mergeingFiles.CompareAndSwap(false, true); !ok { + return + } + a.wg.Add(1) + go func() { + defer a.wg.Done() + defer a.mergeingFiles.Store(false) + if err := a.MergeLoop(a.ctx, 1); err != nil { + if errors.Is(err, context.Canceled) { + return + } + log.Warn("[snapshots] merge", "err", err) + } - if a.defaultCtx != nil { - a.defaultCtx.Close() - } - a.defaultCtx = &AggregatorContext{ - a: a, - accounts: a.accounts.defaultDc, - storage: a.storage.defaultDc, - code: a.code.defaultDc, - commitment: a.commitment.defaultDc, - logAddrs: a.logAddrs.MakeContext(), - logTopics: a.logTopics.MakeContext(), - tracesFrom: a.tracesFrom.MakeContext(), - tracesTo: a.tracesTo.MakeContext(), - } - a.commitment.patriciaTrie.ResetFns(a.defaultCtx.branchFn, a.defaultCtx.accountFn, a.defaultCtx.storageFn) + a.BuildOptionalMissedIndicesInBackground(a.ctx, 1) + }() + }() +} + +func (a *Aggregator) BatchHistoryWriteStart() *Aggregator { + a.walLock.RLock() return a } +func (a *Aggregator) BatchHistoryWriteEnd() { + a.walLock.RUnlock() +} -func (a *Aggregator) FinishWrites() { - a.accounts.FinishWrites() - a.storage.FinishWrites() - a.code.FinishWrites() - a.commitment.FinishWrites() - a.logAddrs.FinishWrites() - a.logTopics.FinishWrites() - a.tracesFrom.FinishWrites() - a.tracesTo.FinishWrites() +func (a *Aggregator) AddAccountPrev(addr []byte, prev []byte) error { + return a.accounts.AddPrevValue(addr, nil, prev) } -// Flush - must be called before Collate, if you did some writes -func (a *Aggregator) Flush(ctx context.Context) error { - flushers := []flusher{ - a.accounts.Rotate(), - a.storage.Rotate(), - a.code.Rotate(), - a.commitment.Domain.Rotate(), - a.logAddrs.Rotate(), - a.logTopics.Rotate(), - a.tracesFrom.Rotate(), - a.tracesTo.Rotate(), - } - defer func(t time.Time) { a.logger.Debug("[snapshots] history flush", "took", time.Since(t)) }(time.Now()) - for _, f := range flushers { - if err := f.Flush(ctx, a.rwTx); err != nil { - return err - } - } - return nil +func (a *Aggregator) AddStoragePrev(addr []byte, loc []byte, prev []byte) error { + return a.storage.AddPrevValue(addr, loc, prev) } -type FilesStats struct { - HistoryReads uint64 - TotalReads uint64 - IdxAccess time.Duration - TxCount uint64 - FilesCount uint64 - IdxSize uint64 - DataSize uint64 -} - -func (a *Aggregator) Stats() FilesStats { - res := a.stats - stat := a.GetAndResetStats() - res.IdxSize = stat.IndexSize - res.DataSize = stat.DataSize - res.FilesCount = stat.FilesCount - res.HistoryReads = stat.HistoryQueries.Load() - res.TotalReads = stat.TotalQueries.Load() - res.IdxAccess = stat.EfSearchTime - return res +// AddCodePrev - addr+inc => code +func (a *Aggregator) AddCodePrev(addr []byte, prev []byte) error { + return a.code.AddPrevValue(addr, nil, prev) } -type AggregatorContext struct { - a *Aggregator - accounts *DomainContext - storage *DomainContext - code *DomainContext - commitment *DomainContext - logAddrs *InvertedIndexContext - logTopics *InvertedIndexContext - tracesFrom *InvertedIndexContext - tracesTo *InvertedIndexContext - keyBuf []byte +// nolint +func (a *Aggregator) PutIdx(idx kv.InvertedIdx, key []byte) error { + switch idx { + case kv.TblTracesFromIdx: + return a.tracesFrom.Add(key) + case kv.TblTracesToIdx: + return a.tracesTo.Add(key) + case kv.TblLogAddressIdx: + return a.logAddrs.Add(key) + case kv.LogTopicIndex: + return a.logTopics.Add(key) + default: + panic(idx) + } +} + +// DisableReadAhead - usage: `defer d.EnableReadAhead().DisableReadAhead()`. Please don't use this funcs without `defer` to avoid leak. +func (a *Aggregator) DisableReadAhead() { + a.accounts.DisableReadAhead() + a.storage.DisableReadAhead() + a.code.DisableReadAhead() + a.logAddrs.DisableReadAhead() + a.logTopics.DisableReadAhead() + a.tracesFrom.DisableReadAhead() + a.tracesTo.DisableReadAhead() +} +func (a *Aggregator) EnableReadAhead() *Aggregator { + a.accounts.EnableReadAhead() + a.storage.EnableReadAhead() + a.code.EnableReadAhead() + a.logAddrs.EnableReadAhead() + a.logTopics.EnableReadAhead() + a.tracesFrom.EnableReadAhead() + a.tracesTo.EnableReadAhead() + return a +} +func (a *Aggregator) EnableMadvWillNeed() *Aggregator { + a.accounts.EnableMadvWillNeed() + a.storage.EnableMadvWillNeed() + a.code.EnableMadvWillNeed() + a.logAddrs.EnableMadvWillNeed() + a.logTopics.EnableMadvWillNeed() + a.tracesFrom.EnableMadvWillNeed() + a.tracesTo.EnableMadvWillNeed() + return a +} +func (a *Aggregator) EnableMadvNormal() *Aggregator { + a.accounts.EnableMadvNormalReadAhead() + a.storage.EnableMadvNormalReadAhead() + a.code.EnableMadvNormalReadAhead() + a.logAddrs.EnableMadvNormalReadAhead() + a.logTopics.EnableMadvNormalReadAhead() + a.tracesFrom.EnableMadvNormalReadAhead() + a.tracesTo.EnableMadvNormalReadAhead() + return a } -func (a *Aggregator) MakeContext() *AggregatorContext { - return &AggregatorContext{ - a: a, - accounts: a.accounts.MakeContext(), - storage: a.storage.MakeContext(), - code: a.code.MakeContext(), - commitment: a.commitment.MakeContext(), - logAddrs: a.logAddrs.MakeContext(), - logTopics: a.logTopics.MakeContext(), - tracesFrom: a.tracesFrom.MakeContext(), - tracesTo: a.tracesTo.MakeContext(), +func (ac *AggregatorRoTx) IndexRange(name kv.InvertedIdx, k []byte, fromTs, toTs int, asc order.By, limit int, tx kv.Tx) (timestamps iter.U64, err error) { + switch name { + case kv.AccountsHistoryIdx: + return ac.accounts.IdxRange(k, fromTs, toTs, asc, limit, tx) + case kv.StorageHistoryIdx: + return ac.storage.IdxRange(k, fromTs, toTs, asc, limit, tx) + case kv.CodeHistoryIdx: + return ac.code.IdxRange(k, fromTs, toTs, asc, limit, tx) + case kv.LogTopicIdx: + return ac.logTopics.IdxRange(k, fromTs, toTs, asc, limit, tx) + case kv.LogAddrIdx: + return ac.logAddrs.IdxRange(k, fromTs, toTs, asc, limit, tx) + case kv.TracesFromIdx: + return ac.tracesFrom.IdxRange(k, fromTs, toTs, asc, limit, tx) + case kv.TracesToIdx: + return ac.tracesTo.IdxRange(k, fromTs, toTs, asc, limit, tx) + default: + return nil, fmt.Errorf("unexpected history name: %s", name) } } -func (ac *AggregatorContext) ReadAccountData(addr []byte, roTx kv.Tx) ([]byte, error) { - return ac.accounts.Get(addr, nil, roTx) -} +// -- range end -func (ac *AggregatorContext) ReadAccountDataBeforeTxNum(addr []byte, txNum uint64, roTx kv.Tx) ([]byte, error) { - v, err := ac.accounts.GetBeforeTxNum(addr, txNum, roTx) - return v, err +func (ac *AggregatorRoTx) ReadAccountDataNoStateWithRecent(addr []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { + return ac.accounts.GetNoStateWithRecent(addr, txNum, tx) } -func (ac *AggregatorContext) ReadAccountStorage(addr []byte, loc []byte, roTx kv.Tx) ([]byte, error) { - return ac.storage.Get(addr, loc, roTx) +func (ac *AggregatorRoTx) ReadAccountDataNoState(addr []byte, txNum uint64) ([]byte, bool, error) { + return ac.accounts.GetNoState(addr, txNum) } -func (ac *AggregatorContext) ReadAccountStorageBeforeTxNum(addr []byte, loc []byte, txNum uint64, roTx kv.Tx) ([]byte, error) { +func (ac *AggregatorRoTx) ReadAccountStorageNoStateWithRecent(addr []byte, loc []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { if cap(ac.keyBuf) < len(addr)+len(loc) { ac.keyBuf = make([]byte, len(addr)+len(loc)) } else if len(ac.keyBuf) != len(addr)+len(loc) { @@ -1144,225 +1397,252 @@ func (ac *AggregatorContext) ReadAccountStorageBeforeTxNum(addr []byte, loc []by } copy(ac.keyBuf, addr) copy(ac.keyBuf[len(addr):], loc) - v, err := ac.storage.GetBeforeTxNum(ac.keyBuf, txNum, roTx) - return v, err + return ac.storage.GetNoStateWithRecent(ac.keyBuf, txNum, tx) } - -func (ac *AggregatorContext) ReadAccountCode(addr []byte, roTx kv.Tx) ([]byte, error) { - return ac.code.Get(addr, nil, roTx) +func (ac *AggregatorRoTx) ReadAccountStorageNoStateWithRecent2(key []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { + return ac.storage.GetNoStateWithRecent(key, txNum, tx) } -func (ac *AggregatorContext) ReadCommitment(addr []byte, roTx kv.Tx) ([]byte, error) { - return ac.commitment.Get(addr, nil, roTx) +func (ac *AggregatorRoTx) ReadAccountStorageNoState(addr []byte, loc []byte, txNum uint64) ([]byte, bool, error) { + if cap(ac.keyBuf) < len(addr)+len(loc) { + ac.keyBuf = make([]byte, len(addr)+len(loc)) + } else if len(ac.keyBuf) != len(addr)+len(loc) { + ac.keyBuf = ac.keyBuf[:len(addr)+len(loc)] + } + copy(ac.keyBuf, addr) + copy(ac.keyBuf[len(addr):], loc) + return ac.storage.GetNoState(ac.keyBuf, txNum) } -func (ac *AggregatorContext) ReadCommitmentBeforeTxNum(addr []byte, txNum uint64, roTx kv.Tx) ([]byte, error) { - v, err := ac.commitment.GetBeforeTxNum(addr, txNum, roTx) - return v, err +func (ac *AggregatorRoTx) ReadAccountCodeNoStateWithRecent(addr []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { + return ac.code.GetNoStateWithRecent(addr, txNum, tx) } - -func (ac *AggregatorContext) ReadAccountCodeBeforeTxNum(addr []byte, txNum uint64, roTx kv.Tx) ([]byte, error) { - v, err := ac.code.GetBeforeTxNum(addr, txNum, roTx) - return v, err +func (ac *AggregatorRoTx) ReadAccountCodeNoState(addr []byte, txNum uint64) ([]byte, bool, error) { + return ac.code.GetNoState(addr, txNum) } -func (ac *AggregatorContext) ReadAccountCodeSize(addr []byte, roTx kv.Tx) (int, error) { - code, err := ac.code.Get(addr, nil, roTx) +func (ac *AggregatorRoTx) ReadAccountCodeSizeNoStateWithRecent(addr []byte, txNum uint64, tx kv.Tx) (int, bool, error) { + code, noState, err := ac.code.GetNoStateWithRecent(addr, txNum, tx) if err != nil { - return 0, err + return 0, false, err } - return len(code), nil + return len(code), noState, nil } - -func (ac *AggregatorContext) ReadAccountCodeSizeBeforeTxNum(addr []byte, txNum uint64, roTx kv.Tx) (int, error) { - code, err := ac.code.GetBeforeTxNum(addr, txNum, roTx) +func (ac *AggregatorRoTx) ReadAccountCodeSizeNoState(addr []byte, txNum uint64) (int, bool, error) { + code, noState, err := ac.code.GetNoState(addr, txNum) if err != nil { - return 0, err + return 0, false, err } - return len(code), nil + return len(code), noState, nil } -func (ac *AggregatorContext) branchFn(prefix []byte) ([]byte, error) { - // Look in the summary table first - stateValue, err := ac.ReadCommitment(prefix, ac.a.rwTx) - if err != nil { - return nil, fmt.Errorf("failed read branch %x: %w", commitment.CompactedKeyToHex(prefix), err) - } - if stateValue == nil { - return nil, nil - } - // fmt.Printf("Returning branch data prefix [%x], mergeVal=[%x]\n", commitment.CompactedKeyToHex(prefix), stateValue) - return stateValue[2:], nil // Skip touchMap but keep afterMap +func (ac *AggregatorRoTx) AccountHistoryRange(startTxNum, endTxNum int, asc order.By, limit int, tx kv.Tx) (iter.KV, error) { + return ac.accounts.HistoryRange(startTxNum, endTxNum, asc, limit, tx) } -func (ac *AggregatorContext) accountFn(plainKey []byte, cell *commitment.Cell) error { - encAccount, err := ac.ReadAccountData(plainKey, ac.a.rwTx) - if err != nil { - return err - } - cell.Nonce = 0 - cell.Balance.Clear() - copy(cell.CodeHash[:], commitment.EmptyCodeHash) - if len(encAccount) > 0 { - nonce, balance, chash := DecodeAccountBytes(encAccount) - cell.Nonce = nonce - cell.Balance.Set(balance) - if chash != nil { - copy(cell.CodeHash[:], chash) - } - } +func (ac *AggregatorRoTx) StorageHistoryRange(startTxNum, endTxNum int, asc order.By, limit int, tx kv.Tx) (iter.KV, error) { + return ac.storage.HistoryRange(startTxNum, endTxNum, asc, limit, tx) +} - code, err := ac.ReadAccountCode(plainKey, ac.a.rwTx) - if err != nil { - return err - } - if code != nil { - ac.a.commitment.keccak.Reset() - ac.a.commitment.keccak.Write(code) - copy(cell.CodeHash[:], ac.a.commitment.keccak.Sum(nil)) - } - cell.Delete = len(encAccount) == 0 && len(code) == 0 - return nil +func (ac *AggregatorRoTx) CodeHistoryRange(startTxNum, endTxNum int, asc order.By, limit int, tx kv.Tx) (iter.KV, error) { + return ac.code.HistoryRange(startTxNum, endTxNum, asc, limit, tx) } -func (ac *AggregatorContext) storageFn(plainKey []byte, cell *commitment.Cell) error { - // Look in the summary table first - enc, err := ac.ReadAccountStorage(plainKey[:length.Addr], plainKey[length.Addr:], ac.a.rwTx) - if err != nil { - return err - } - cell.StorageLen = len(enc) - copy(cell.Storage[:], enc) - cell.Delete = cell.StorageLen == 0 - return nil +func (ac *AggregatorRoTx) AccountHistoricalStateRange(startTxNum uint64, from, to []byte, limit int, tx kv.Tx) iter.KV { + return ac.accounts.WalkAsOf(startTxNum, from, to, tx, limit) } -func (ac *AggregatorContext) LogAddrIterator(addr []byte, startTxNum, endTxNum int, roTx kv.Tx) (iter.U64, error) { - return ac.logAddrs.IdxRange(addr, startTxNum, endTxNum, order.Asc, -1, roTx) +func (ac *AggregatorRoTx) StorageHistoricalStateRange(startTxNum uint64, from, to []byte, limit int, tx kv.Tx) iter.KV { + return ac.storage.WalkAsOf(startTxNum, from, to, tx, limit) } -func (ac *AggregatorContext) LogTopicIterator(topic []byte, startTxNum, endTxNum int, roTx kv.Tx) (iter.U64, error) { - return ac.logTopics.IdxRange(topic, startTxNum, endTxNum, order.Asc, -1, roTx) +func (ac *AggregatorRoTx) CodeHistoricalStateRange(startTxNum uint64, from, to []byte, limit int, tx kv.Tx) iter.KV { + return ac.code.WalkAsOf(startTxNum, from, to, tx, limit) } -func (ac *AggregatorContext) TraceFromIterator(addr []byte, startTxNum, endTxNum int, roTx kv.Tx) (iter.U64, error) { - return ac.tracesFrom.IdxRange(addr, startTxNum, endTxNum, order.Asc, -1, roTx) +type FilesStats22 struct { } -func (ac *AggregatorContext) TraceToIterator(addr []byte, startTxNum, endTxNum int, roTx kv.Tx) (iter.U64, error) { - return ac.tracesTo.IdxRange(addr, startTxNum, endTxNum, order.Asc, -1, roTx) +func (a *Aggregator) Stats() FilesStats22 { + var fs FilesStats22 + return fs } -func (ac *AggregatorContext) Close() { +type AggregatorRoTx struct { + a *Aggregator + accounts *HistoryRoTx + storage *HistoryRoTx + code *HistoryRoTx + logAddrs *InvertedIndexRoTx + logTopics *InvertedIndexRoTx + tracesFrom *InvertedIndexRoTx + tracesTo *InvertedIndexRoTx + keyBuf []byte + + id uint64 // set only if TRACE_AGG=true +} + +func (a *Aggregator) BeginFilesRo() *AggregatorRoTx { + ac := &AggregatorRoTx{ + a: a, + accounts: a.accounts.BeginFilesRo(), + storage: a.storage.BeginFilesRo(), + code: a.code.BeginFilesRo(), + logAddrs: a.logAddrs.BeginFilesRo(), + logTopics: a.logTopics.BeginFilesRo(), + tracesFrom: a.tracesFrom.BeginFilesRo(), + tracesTo: a.tracesTo.BeginFilesRo(), + + id: a.leakDetector.Add(), + } + + return ac +} +func (ac *AggregatorRoTx) Close() { + ac.a.leakDetector.Del(ac.id) ac.accounts.Close() ac.storage.Close() ac.code.Close() - ac.commitment.Close() ac.logAddrs.Close() ac.logTopics.Close() ac.tracesFrom.Close() ac.tracesTo.Close() } -func DecodeAccountBytes(enc []byte) (nonce uint64, balance *uint256.Int, hash []byte) { - balance = new(uint256.Int) +// BackgroundResult - used only indicate that some work is done +// no much reason to pass exact results by this object, just get latest state when need +type BackgroundResult struct { + err error + has bool +} + +func (br *BackgroundResult) Has() bool { return br.has } +func (br *BackgroundResult) Set(err error) { br.has, br.err = true, err } +func (br *BackgroundResult) GetAndReset() (bool, error) { + has, err := br.has, br.err + br.has, br.err = false, nil + return has, err +} - if len(enc) > 0 { - pos := 0 - nonceBytes := int(enc[pos]) - pos++ - if nonceBytes > 0 { - nonce = bytesToUint64(enc[pos : pos+nonceBytes]) - pos += nonceBytes - } - balanceBytes := int(enc[pos]) - pos++ - if balanceBytes > 0 { - balance.SetBytes(enc[pos : pos+balanceBytes]) - pos += balanceBytes +func lastIdInDB(db kv.RoDB, table string) (lstInDb uint64) { + if err := db.View(context.Background(), func(tx kv.Tx) error { + lst, _ := kv.LastKey(tx, table) + if len(lst) > 0 { + lstInDb = binary.BigEndian.Uint64(lst) } - codeHashBytes := int(enc[pos]) - pos++ - if codeHashBytes > 0 { - codeHash := make([]byte, length.Hash) - copy(codeHash, enc[pos:pos+codeHashBytes]) + return nil + }); err != nil { + log.Warn("[snapshots] lastIdInDB", "err", err) + } + return lstInDb +} + +// AggregatorStep is used for incremental reconstitution, it allows +// accessing history in isolated way for each step +type AggregatorStep struct { + a *Aggregator + accounts *HistoryStep + storage *HistoryStep + code *HistoryStep + keyBuf []byte +} + +func (a *Aggregator) MakeSteps() ([]*AggregatorStep, error) { + frozenAndIndexed := a.EndTxNumFrozenAndIndexed() + accountSteps := a.accounts.MakeSteps(frozenAndIndexed) + codeSteps := a.code.MakeSteps(frozenAndIndexed) + storageSteps := a.storage.MakeSteps(frozenAndIndexed) + if len(accountSteps) != len(storageSteps) || len(storageSteps) != len(codeSteps) { + return nil, fmt.Errorf("different limit of steps (try merge snapshots): accountSteps=%d, storageSteps=%d, codeSteps=%d", len(accountSteps), len(storageSteps), len(codeSteps)) + } + steps := make([]*AggregatorStep, len(accountSteps)) + for i, accountStep := range accountSteps { + steps[i] = &AggregatorStep{ + a: a, + accounts: accountStep, + storage: storageSteps[i], + code: codeSteps[i], } } - return + return steps, nil } -func EncodeAccountBytes(nonce uint64, balance *uint256.Int, hash []byte, incarnation uint64) []byte { - l := 1 - if nonce > 0 { - l += common.BitLenToByteLen(bits.Len64(nonce)) - } - l++ - if !balance.IsZero() { - l += balance.ByteLen() - } - l++ - if len(hash) == length.Hash { - l += 32 - } - l++ - if incarnation > 0 { - l += common.BitLenToByteLen(bits.Len64(incarnation)) +func (as *AggregatorStep) TxNumRange() (uint64, uint64) { + return as.accounts.indexFile.startTxNum, as.accounts.indexFile.endTxNum +} + +func (as *AggregatorStep) IterateAccountsTxs() *ScanIteratorInc { + return as.accounts.iterateTxs() +} + +func (as *AggregatorStep) IterateStorageTxs() *ScanIteratorInc { + return as.storage.iterateTxs() +} + +func (as *AggregatorStep) IterateCodeTxs() *ScanIteratorInc { + return as.code.iterateTxs() +} + +func (as *AggregatorStep) ReadAccountDataNoState(addr []byte, txNum uint64) ([]byte, bool, uint64) { + return as.accounts.GetNoState(addr, txNum) +} + +func (as *AggregatorStep) ReadAccountStorageNoState(addr []byte, loc []byte, txNum uint64) ([]byte, bool, uint64) { + if cap(as.keyBuf) < len(addr)+len(loc) { + as.keyBuf = make([]byte, len(addr)+len(loc)) + } else if len(as.keyBuf) != len(addr)+len(loc) { + as.keyBuf = as.keyBuf[:len(addr)+len(loc)] } - value := make([]byte, l) - pos := 0 + copy(as.keyBuf, addr) + copy(as.keyBuf[len(addr):], loc) + return as.storage.GetNoState(as.keyBuf, txNum) +} - if nonce == 0 { - value[pos] = 0 - pos++ - } else { - nonceBytes := common.BitLenToByteLen(bits.Len64(nonce)) - value[pos] = byte(nonceBytes) - var nonce = nonce - for i := nonceBytes; i > 0; i-- { - value[pos+i] = byte(nonce) - nonce >>= 8 - } - pos += nonceBytes + 1 - } - if balance.IsZero() { - value[pos] = 0 - pos++ - } else { - balanceBytes := balance.ByteLen() - value[pos] = byte(balanceBytes) - pos++ - balance.WriteToSlice(value[pos : pos+balanceBytes]) - pos += balanceBytes - } - if len(hash) == 0 { - value[pos] = 0 - pos++ - } else { - value[pos] = 32 - pos++ - copy(value[pos:pos+32], hash) - pos += 32 - } - if incarnation == 0 { - value[pos] = 0 - } else { - incBytes := common.BitLenToByteLen(bits.Len64(incarnation)) - value[pos] = byte(incBytes) - var inc = incarnation - for i := incBytes; i > 0; i-- { - value[pos+i] = byte(inc) - inc >>= 8 - } +func (as *AggregatorStep) ReadAccountCodeNoState(addr []byte, txNum uint64) ([]byte, bool, uint64) { + return as.code.GetNoState(addr, txNum) +} + +func (as *AggregatorStep) ReadAccountCodeSizeNoState(addr []byte, txNum uint64) (int, bool, uint64) { + code, noState, stateTxNum := as.code.GetNoState(addr, txNum) + return len(code), noState, stateTxNum +} + +func (as *AggregatorStep) MaxTxNumAccounts(addr []byte) (bool, uint64) { + return as.accounts.MaxTxNum(addr) +} + +func (as *AggregatorStep) MaxTxNumStorage(addr []byte, loc []byte) (bool, uint64) { + if cap(as.keyBuf) < len(addr)+len(loc) { + as.keyBuf = make([]byte, len(addr)+len(loc)) + } else if len(as.keyBuf) != len(addr)+len(loc) { + as.keyBuf = as.keyBuf[:len(addr)+len(loc)] } - return value + copy(as.keyBuf, addr) + copy(as.keyBuf[len(addr):], loc) + return as.storage.MaxTxNum(as.keyBuf) } -func bytesToUint64(buf []byte) (x uint64) { - for i, b := range buf { - x = x<<8 + uint64(b) - if i == 7 { - return - } +func (as *AggregatorStep) MaxTxNumCode(addr []byte) (bool, uint64) { + return as.code.MaxTxNum(addr) +} + +func (as *AggregatorStep) IterateAccountsHistory(txNum uint64) *HistoryIteratorInc { + return as.accounts.interateHistoryBeforeTxNum(txNum) +} + +func (as *AggregatorStep) IterateStorageHistory(txNum uint64) *HistoryIteratorInc { + return as.storage.interateHistoryBeforeTxNum(txNum) +} + +func (as *AggregatorStep) IterateCodeHistory(txNum uint64) *HistoryIteratorInc { + return as.code.interateHistoryBeforeTxNum(txNum) +} + +func (as *AggregatorStep) Clone() *AggregatorStep { + return &AggregatorStep{ + a: as.a, + accounts: as.accounts.Clone(), + storage: as.storage.Clone(), + code: as.code.Clone(), } - return } diff --git a/erigon-lib/state/aggregator_bench_test.go b/erigon-lib/state/aggregator_bench_test.go index 16b748fd997..e2c31e62dc6 100644 --- a/erigon-lib/state/aggregator_bench_test.go +++ b/erigon-lib/state/aggregator_bench_test.go @@ -2,7 +2,6 @@ package state import ( "bytes" - "context" "fmt" "math/rand" "os" @@ -14,85 +13,11 @@ import ( "github.com/ledgerwatch/log/v3" "github.com/stretchr/testify/require" - "github.com/ledgerwatch/erigon-lib/commitment" "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/compress" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" ) -func testDbAndAggregatorBench(b *testing.B, aggStep uint64) (string, kv.RwDB, *Aggregator) { - b.Helper() - logger := log.New() - path := b.TempDir() - b.Cleanup(func() { os.RemoveAll(path) }) - db := mdbx.NewMDBX(logger).InMem(path).WithTableCfg(func(defaultBuckets kv.TableCfg) kv.TableCfg { - return kv.ChaindataTablesCfg - }).MustOpen() - b.Cleanup(db.Close) - agg, err := NewAggregator(path, path, aggStep, CommitmentModeDirect, commitment.VariantHexPatriciaTrie, logger) - require.NoError(b, err) - b.Cleanup(agg.Close) - return path, db, agg -} - -func BenchmarkAggregator_Processing(b *testing.B) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - longKeys := queueKeys(ctx, 64, length.Addr+length.Hash) - vals := queueKeys(ctx, 53, length.Hash) - - aggStep := uint64(100_00) - _, db, agg := testDbAndAggregatorBench(b, aggStep) - - tx, err := db.BeginRw(ctx) - require.NoError(b, err) - defer func() { - if tx != nil { - tx.Rollback() - } - }() - - agg.SetTx(tx) - defer agg.StartWrites().FinishWrites() - require.NoError(b, err) - - b.ReportAllocs() - b.ResetTimer() - - for i := 0; i < b.N; i++ { - key := <-longKeys - val := <-vals - txNum := uint64(i) - agg.SetTxNum(txNum) - err := agg.WriteAccountStorage(key[:length.Addr], key[length.Addr:], val) - require.NoError(b, err) - err = agg.FinishTx() - require.NoError(b, err) - } -} - -func queueKeys(ctx context.Context, seed, ofSize uint64) <-chan []byte { - rnd := rand.New(rand.NewSource(int64(seed))) - keys := make(chan []byte, 1) - go func() { - for { - if ctx.Err() != nil { - break - } - bb := make([]byte, ofSize) - rnd.Read(bb) - - keys <- bb - } - close(keys) - }() - return keys -} - func Benchmark_BtreeIndex_Allocation(b *testing.B) { rnd := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < b.N; i++ { @@ -223,7 +148,7 @@ func Benchmark_Recsplit_Find_ExternalFile(b *testing.B) { require.NoError(b, err) idxr := recsplit.NewIndexReader(idx) - decomp, err := compress.NewDecompressor(dataPath) + decomp, err := seg.NewDecompressor(dataPath) require.NoError(b, err) defer decomp.Close() @@ -235,7 +160,7 @@ func Benchmark_Recsplit_Find_ExternalFile(b *testing.B) { for i := 0; i < b.N; i++ { p := rnd.Intn(len(keys)) - offset := idxr.Lookup(keys[p]) + offset, _ := idxr.Lookup(keys[p]) getter.Reset(offset) require.True(b, getter.HasNext()) diff --git a/erigon-lib/state/aggregator_files.go b/erigon-lib/state/aggregator_files.go new file mode 100644 index 00000000000..95ab6a71d93 --- /dev/null +++ b/erigon-lib/state/aggregator_files.go @@ -0,0 +1,231 @@ +/* + Copyright 2022 The Erigon contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package state + +import ( + "math/bits" + + "github.com/holiman/uint256" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/metrics" +) + +// StepsInBiggestFile - files of this size are completely frozen/immutable. +// files of smaller size are also immutable, but can be removed after merge to bigger files. +const StepsInBiggestFile = 32 + +var ( + mxCurrentTx = metrics.GetOrCreateGauge("domain_tx_processed") //nolint + mxCurrentBlock = metrics.GetOrCreateGauge("domain_block_current") //nolint + mxRunningMerges = metrics.GetOrCreateGauge("domain_running_merges") //nolint + mxRunningCollations = metrics.GetOrCreateGauge("domain_running_collations") //nolint + mxCollateTook = metrics.GetOrCreateHistogram("domain_collate_took") //nolint + mxPruneTook = metrics.GetOrCreateHistogram("domain_prune_took") //nolint + mxPruneHistTook = metrics.GetOrCreateHistogram("domain_prune_hist_took") //nolint + mxPruningProgress = metrics.GetOrCreateGauge("domain_pruning_progress") //nolint + mxCollationSize = metrics.GetOrCreateGauge("domain_collation_size") //nolint + mxCollationSizeHist = metrics.GetOrCreateGauge("domain_collation_hist_size") //nolint + mxPruneSize = metrics.GetOrCreateCounter("domain_prune_size") //nolint + mxBuildTook = metrics.GetOrCreateSummary("domain_build_files_took") //nolint + mxStepCurrent = metrics.GetOrCreateGauge("domain_step_current") //nolint + mxStepTook = metrics.GetOrCreateHistogram("domain_step_took") //nolint + mxCommitmentKeys = metrics.GetOrCreateCounter("domain_commitment_keys") //nolint + mxCommitmentRunning = metrics.GetOrCreateGauge("domain_running_commitment") //nolint + mxCommitmentTook = metrics.GetOrCreateSummary("domain_commitment_took") //nolint + mxCommitmentWriteTook = metrics.GetOrCreateHistogram("domain_commitment_write_took") //nolint + mxCommitmentUpdates = metrics.GetOrCreateCounter("domain_commitment_updates") //nolint + mxCommitmentUpdatesApplied = metrics.GetOrCreateCounter("domain_commitment_updates_applied") //nolint +) + +type SelectedStaticFiles struct { + accounts []*filesItem + accountsIdx []*filesItem + accountsHist []*filesItem + storage []*filesItem + storageIdx []*filesItem + storageHist []*filesItem + code []*filesItem + codeIdx []*filesItem + codeHist []*filesItem + commitment []*filesItem + commitmentIdx []*filesItem + commitmentHist []*filesItem + codeI int //nolint + storageI int //nolint + accountsI int //nolint + commitmentI int //nolint +} + +func (sf SelectedStaticFiles) Close() { + for _, group := range [][]*filesItem{ + sf.accounts, sf.accountsIdx, sf.accountsHist, + sf.storage, sf.storageIdx, sf.storageHist, + sf.code, sf.codeIdx, sf.codeHist, + sf.commitment, sf.commitmentIdx, sf.commitmentHist, + } { + for _, item := range group { + if item != nil { + if item.decompressor != nil { + item.decompressor.Close() + } + if item.index != nil { + item.index.Close() + } + if item.bindex != nil { + item.bindex.Close() + } + } + } + } +} + +type MergedFiles struct { + accounts *filesItem + accountsIdx, accountsHist *filesItem + storage *filesItem + storageIdx, storageHist *filesItem + code *filesItem + codeIdx, codeHist *filesItem + commitment *filesItem + commitmentIdx, commitmentHist *filesItem +} + +func (mf MergedFiles) Close() { + for _, item := range []*filesItem{ + mf.accounts, mf.accountsIdx, mf.accountsHist, + mf.storage, mf.storageIdx, mf.storageHist, + mf.code, mf.codeIdx, mf.codeHist, + mf.commitment, mf.commitmentIdx, mf.commitmentHist, + //mf.logAddrs, mf.logTopics, mf.tracesFrom, mf.tracesTo, + } { + if item != nil { + if item.decompressor != nil { + item.decompressor.Close() + } + if item.decompressor != nil { + item.index.Close() + } + if item.bindex != nil { + item.bindex.Close() + } + } + } +} + +func DecodeAccountBytes(enc []byte) (nonce uint64, balance *uint256.Int, hash []byte) { + balance = new(uint256.Int) + + if len(enc) > 0 { + pos := 0 + nonceBytes := int(enc[pos]) + pos++ + if nonceBytes > 0 { + nonce = bytesToUint64(enc[pos : pos+nonceBytes]) + pos += nonceBytes + } + balanceBytes := int(enc[pos]) + pos++ + if balanceBytes > 0 { + balance.SetBytes(enc[pos : pos+balanceBytes]) + pos += balanceBytes + } + codeHashBytes := int(enc[pos]) + pos++ + if codeHashBytes > 0 { + codeHash := make([]byte, length.Hash) + copy(codeHash, enc[pos:pos+codeHashBytes]) + } + } + return +} + +func EncodeAccountBytes(nonce uint64, balance *uint256.Int, hash []byte, incarnation uint64) []byte { + l := 1 + if nonce > 0 { + l += common.BitLenToByteLen(bits.Len64(nonce)) + } + l++ + if !balance.IsZero() { + l += balance.ByteLen() + } + l++ + if len(hash) == length.Hash { + l += 32 + } + l++ + if incarnation > 0 { + l += common.BitLenToByteLen(bits.Len64(incarnation)) + } + value := make([]byte, l) + pos := 0 + + if nonce == 0 { + value[pos] = 0 + pos++ + } else { + nonceBytes := common.BitLenToByteLen(bits.Len64(nonce)) + value[pos] = byte(nonceBytes) + var nonce = nonce + for i := nonceBytes; i > 0; i-- { + value[pos+i] = byte(nonce) + nonce >>= 8 + } + pos += nonceBytes + 1 + } + if balance.IsZero() { + value[pos] = 0 + pos++ + } else { + balanceBytes := balance.ByteLen() + value[pos] = byte(balanceBytes) + pos++ + balance.WriteToSlice(value[pos : pos+balanceBytes]) + pos += balanceBytes + } + if len(hash) == 0 { + value[pos] = 0 + pos++ + } else { + value[pos] = 32 + pos++ + copy(value[pos:pos+32], hash) + pos += 32 + } + if incarnation == 0 { + value[pos] = 0 + } else { + incBytes := common.BitLenToByteLen(bits.Len64(incarnation)) + value[pos] = byte(incBytes) + var inc = incarnation + for i := incBytes; i > 0; i-- { + value[pos+i] = byte(inc) + inc >>= 8 + } + } + return value +} + +func bytesToUint64(buf []byte) (x uint64) { + for i, b := range buf { + x = x<<8 + uint64(b) + if i == 7 { + return + } + } + return +} diff --git a/erigon-lib/state/aggregator_test.go b/erigon-lib/state/aggregator_test.go index 1db7ca3a48b..cf5f5b1e2f9 100644 --- a/erigon-lib/state/aggregator_test.go +++ b/erigon-lib/state/aggregator_test.go @@ -8,459 +8,17 @@ import ( "os" "path" "path/filepath" - "sync/atomic" "testing" - "time" - "github.com/holiman/uint256" - "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/log/v3" "github.com/stretchr/testify/require" - "github.com/ledgerwatch/erigon-lib/commitment" + "github.com/ledgerwatch/erigon-lib/common/background" + "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/compress" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon-lib/kv/mdbx" + "github.com/ledgerwatch/erigon-lib/seg" ) -func testDbAndAggregator(t *testing.T, aggStep uint64) (string, kv.RwDB, *Aggregator) { - t.Helper() - path := t.TempDir() - logger := log.New() - db := mdbx.NewMDBX(logger).InMem(filepath.Join(path, "db4")).WithTableCfg(func(defaultBuckets kv.TableCfg) kv.TableCfg { - return kv.ChaindataTablesCfg - }).MustOpen() - t.Cleanup(db.Close) - agg, err := NewAggregator(filepath.Join(path, "e4"), filepath.Join(path, "e4tmp"), aggStep, CommitmentModeDirect, commitment.VariantHexPatriciaTrie, logger) - require.NoError(t, err) - return path, db, agg -} - -func TestAggregator_WinAccess(t *testing.T) { - _, db, agg := testDbAndAggregator(t, 100) - defer agg.Close() - - tx, err := db.BeginRwNosync(context.Background()) - require.NoError(t, err) - defer func() { - if tx != nil { - tx.Rollback() - } - }() - agg.SetTx(tx) - - agg.StartWrites() - - rnd := rand.New(rand.NewSource(time.Now().UnixNano())) - for txNum := uint64(1); txNum <= 100; txNum++ { - agg.SetTxNum(txNum) - - addr := make([]byte, length.Addr) - n, err := rnd.Read(addr) - require.NoError(t, err) - require.EqualValues(t, length.Addr, n) - - buf := EncodeAccountBytes(1, uint256.NewInt(uint64(rand.Intn(10e9))), nil, 0) - err = agg.UpdateAccountData(addr, buf) - require.NoError(t, err) - - var v [8]byte - binary.BigEndian.PutUint64(v[:], txNum) - require.NoError(t, err) - require.NoError(t, agg.FinishTx()) - } - agg.FinishWrites() - - require.NoError(t, err) - err = tx.Commit() - require.NoError(t, err) - tx = nil -} - -func TestAggregator_Merge(t *testing.T) { - _, db, agg := testDbAndAggregator(t, 1000) - defer agg.Close() - - tx, err := db.BeginRwNosync(context.Background()) - require.NoError(t, err) - defer func() { - if tx != nil { - tx.Rollback() - } - }() - agg.SetTx(tx) - - agg.StartWrites() - - txs := uint64(10000) - rnd := rand.New(rand.NewSource(time.Now().UnixNano())) - - // keys are encodings of numbers 1..31 - // each key changes value on every txNum which is multiple of the key - var maxWrite, otherMaxWrite uint64 - for txNum := uint64(1); txNum <= txs; txNum++ { - agg.SetTxNum(txNum) - - addr, loc := make([]byte, length.Addr), make([]byte, length.Hash) - - n, err := rnd.Read(addr) - require.NoError(t, err) - require.EqualValues(t, length.Addr, n) - - n, err = rnd.Read(loc) - require.NoError(t, err) - require.EqualValues(t, length.Hash, n) - //keys[txNum-1] = append(addr, loc...) - - buf := EncodeAccountBytes(1, uint256.NewInt(0), nil, 0) - err = agg.UpdateAccountData(addr, buf) - require.NoError(t, err) - - err = agg.WriteAccountStorage(addr, loc, []byte{addr[0], loc[0]}) - require.NoError(t, err) - - var v [8]byte - binary.BigEndian.PutUint64(v[:], txNum) - if txNum%135 == 0 { - err = agg.UpdateCommitmentData([]byte("otherroothash"), v[:]) - otherMaxWrite = txNum - } else { - err = agg.UpdateCommitmentData([]byte("roothash"), v[:]) - maxWrite = txNum - } - require.NoError(t, err) - require.NoError(t, agg.FinishTx()) - } - agg.FinishWrites() - require.NoError(t, err) - err = tx.Commit() - require.NoError(t, err) - tx = nil - - // Check the history - roTx, err := db.BeginRo(context.Background()) - require.NoError(t, err) - defer roTx.Rollback() - - dc := agg.MakeContext() - - v, err := dc.ReadCommitment([]byte("roothash"), roTx) - require.NoError(t, err) - - require.EqualValues(t, maxWrite, binary.BigEndian.Uint64(v[:])) - - v, err = dc.ReadCommitment([]byte("otherroothash"), roTx) - require.NoError(t, err) - dc.Close() - - require.EqualValues(t, otherMaxWrite, binary.BigEndian.Uint64(v[:])) -} - -// here we create a bunch of updates for further aggregation. -// FinishTx should merge underlying files several times -// Expected that: -// - we could close first aggregator and open another with previous data still available -// - new aggregator SeekCommitment must return txNum equal to amount of total txns -func TestAggregator_RestartOnDatadir(t *testing.T) { - logger := log.New() - aggStep := uint64(50) - path, db, agg := testDbAndAggregator(t, aggStep) - - tx, err := db.BeginRw(context.Background()) - require.NoError(t, err) - defer func() { - if tx != nil { - tx.Rollback() - } - }() - agg.SetTx(tx) - agg.StartWrites() - - var latestCommitTxNum uint64 - - rnd := rand.New(rand.NewSource(time.Now().Unix())) - - txs := (aggStep / 2) * 19 - t.Logf("step=%d tx_count=%d", aggStep, txs) - var aux [8]byte - // keys are encodings of numbers 1..31 - // each key changes value on every txNum which is multiple of the key - var maxWrite uint64 - for txNum := uint64(1); txNum <= txs; txNum++ { - agg.SetTxNum(txNum) - binary.BigEndian.PutUint64(aux[:], txNum) - - addr, loc := make([]byte, length.Addr), make([]byte, length.Hash) - n, err := rnd.Read(addr) - require.NoError(t, err) - require.EqualValues(t, length.Addr, n) - - n, err = rnd.Read(loc) - require.NoError(t, err) - require.EqualValues(t, length.Hash, n) - //keys[txNum-1] = append(addr, loc...) - - buf := EncodeAccountBytes(1, uint256.NewInt(0), nil, 0) - err = agg.UpdateAccountData(addr, buf) - require.NoError(t, err) - - err = agg.WriteAccountStorage(addr, loc, []byte{addr[0], loc[0]}) - require.NoError(t, err) - - err = agg.UpdateCommitmentData([]byte("key"), aux[:]) - require.NoError(t, err) - maxWrite = txNum - - require.NoError(t, agg.FinishTx()) - } - agg.FinishWrites() - agg.Close() - - err = tx.Commit() - require.NoError(t, err) - tx = nil - - // Start another aggregator on same datadir - anotherAgg, err := NewAggregator(filepath.Join(path, "e4"), filepath.Join(path, "e4tmp"), aggStep, CommitmentModeDirect, commitment.VariantHexPatriciaTrie, logger) - require.NoError(t, err) - require.NoError(t, anotherAgg.ReopenFolder()) - - defer anotherAgg.Close() - - rwTx, err := db.BeginRw(context.Background()) - require.NoError(t, err) - defer func() { - if rwTx != nil { - rwTx.Rollback() - } - }() - - anotherAgg.SetTx(rwTx) - startTx := anotherAgg.EndTxNumMinimax() - _, sstartTx, err := anotherAgg.SeekCommitment() - require.NoError(t, err) - require.GreaterOrEqual(t, sstartTx, startTx) - require.GreaterOrEqual(t, sstartTx, latestCommitTxNum) - _ = sstartTx - rwTx.Rollback() - rwTx = nil - - // Check the history - roTx, err := db.BeginRo(context.Background()) - require.NoError(t, err) - defer roTx.Rollback() - - dc := anotherAgg.MakeContext() - v, err := dc.ReadCommitment([]byte("key"), roTx) - require.NoError(t, err) - dc.Close() - - require.EqualValues(t, maxWrite, binary.BigEndian.Uint64(v[:])) -} - -func TestAggregator_RestartOnFiles(t *testing.T) { - logger := log.New() - aggStep := uint64(100) - - path, db, agg := testDbAndAggregator(t, aggStep) - - tx, err := db.BeginRw(context.Background()) - require.NoError(t, err) - defer func() { - if tx != nil { - tx.Rollback() - } - }() - agg.SetTx(tx) - agg.StartWrites() - - txs := aggStep * 5 - t.Logf("step=%d tx_count=%d\n", aggStep, txs) - - rnd := rand.New(rand.NewSource(0)) - keys := make([][]byte, txs) - - for txNum := uint64(1); txNum <= txs; txNum++ { - agg.SetTxNum(txNum) - - addr, loc := make([]byte, length.Addr), make([]byte, length.Hash) - n, err := rnd.Read(addr) - require.NoError(t, err) - require.EqualValues(t, length.Addr, n) - - n, err = rnd.Read(loc) - require.NoError(t, err) - require.EqualValues(t, length.Hash, n) - - buf := EncodeAccountBytes(txNum, uint256.NewInt(1000000000000), nil, 0) - err = agg.UpdateAccountData(addr, buf[:]) - require.NoError(t, err) - - err = agg.WriteAccountStorage(addr, loc, []byte{addr[0], loc[0]}) - require.NoError(t, err) - - keys[txNum-1] = append(addr, loc...) - - err = agg.FinishTx() - require.NoError(t, err) - } - agg.FinishWrites() - - err = tx.Commit() - require.NoError(t, err) - tx = nil - db.Close() - agg.Close() - - require.NoError(t, os.RemoveAll(filepath.Join(path, "db4"))) - - newDb, err := mdbx.NewMDBX(logger).InMem(filepath.Join(path, "db4")).WithTableCfg(func(defaultBuckets kv.TableCfg) kv.TableCfg { - return kv.ChaindataTablesCfg - }).Open(context.Background()) - require.NoError(t, err) - t.Cleanup(newDb.Close) - - newTx, err := newDb.BeginRw(context.Background()) - require.NoError(t, err) - defer newTx.Rollback() - - newAgg, err := NewAggregator(path, path, aggStep, CommitmentModeDirect, commitment.VariantHexPatriciaTrie, logger) - require.NoError(t, err) - require.NoError(t, newAgg.ReopenFolder()) - - newAgg.SetTx(newTx) - newAgg.StartWrites() - - _, latestTx, err := newAgg.SeekCommitment() - require.NoError(t, err) - t.Logf("seek to latest_tx=%d", latestTx) - - ctx := newAgg.defaultCtx - miss := uint64(0) - for i, key := range keys { - if uint64(i+1) >= txs-aggStep { - continue // finishtx always stores last agg step in db which we deleted, so missing values which were not aggregated is expected - } - stored, err := ctx.ReadAccountData(key[:length.Addr], newTx) - require.NoError(t, err) - if len(stored) == 0 { - miss++ - fmt.Printf("%x [%d/%d]", key, miss, i+1) // txnum starts from 1 - continue - } - - nonce, _, _ := DecodeAccountBytes(stored) - require.EqualValues(t, i+1, nonce) - - storedV, err := ctx.ReadAccountStorage(key[:length.Addr], key[length.Addr:], newTx) - require.NoError(t, err) - require.EqualValues(t, key[0], storedV[0]) - require.EqualValues(t, key[length.Addr], storedV[1]) - } - newAgg.FinishWrites() - ctx.Close() - newAgg.Close() - - require.NoError(t, err) -} - -func TestAggregator_ReplaceCommittedKeys(t *testing.T) { - aggStep := uint64(500) - - _, db, agg := testDbAndAggregator(t, aggStep) - t.Cleanup(agg.Close) - - tx, err := db.BeginRw(context.Background()) - require.NoError(t, err) - defer func() { - if tx != nil { - tx.Rollback() - } - }() - agg.SetTx(tx) - defer agg.StartWrites().FinishWrites() - - var latestCommitTxNum uint64 - commit := func(txn uint64) error { - err = tx.Commit() - require.NoError(t, err) - tx, err = db.BeginRw(context.Background()) - require.NoError(t, err) - t.Logf("commit to db txn=%d", txn) - - atomic.StoreUint64(&latestCommitTxNum, txn) - agg.SetTx(tx) - return nil - } - - roots := agg.AggregatedRoots() - txs := (aggStep) * StepsInBiggestFile - t.Logf("step=%d tx_count=%d", aggStep, txs) - - rnd := rand.New(rand.NewSource(0)) - keys := make([][]byte, txs/2) - - for txNum := uint64(1); txNum <= txs/2; txNum++ { - agg.SetTxNum(txNum) - - addr, loc := make([]byte, length.Addr), make([]byte, length.Hash) - n, err := rnd.Read(addr) - require.NoError(t, err) - require.EqualValues(t, length.Addr, n) - - n, err = rnd.Read(loc) - require.NoError(t, err) - require.EqualValues(t, length.Hash, n) - keys[txNum-1] = append(addr, loc...) - - buf := EncodeAccountBytes(1, uint256.NewInt(0), nil, 0) - err = agg.UpdateAccountData(addr, buf) - require.NoError(t, err) - - err = agg.WriteAccountStorage(addr, loc, []byte{addr[0], loc[0]}) - require.NoError(t, err) - - err = agg.FinishTx() - require.NoError(t, err) - select { - case <-roots: - require.NoError(t, commit(txNum)) - default: - continue - } - } - - half := txs / 2 - for txNum := txs/2 + 1; txNum <= txs; txNum++ { - agg.SetTxNum(txNum) - - addr, loc := keys[txNum-1-half][:length.Addr], keys[txNum-1-half][length.Addr:] - - err = agg.WriteAccountStorage(addr, loc, []byte{addr[0], loc[0]}) - require.NoError(t, err) - - err = agg.FinishTx() - require.NoError(t, err) - } - - err = tx.Commit() - tx = nil - - tx, err = db.BeginRw(context.Background()) - require.NoError(t, err) - - ctx := agg.defaultCtx - for _, key := range keys { - storedV, err := ctx.ReadAccountStorage(key[:length.Addr], key[length.Addr:], tx) - require.NoError(t, err) - require.EqualValues(t, key[0], storedV[0]) - require.EqualValues(t, key[length.Addr], storedV[1]) - } - require.NoError(t, err) -} - func Test_EncodeCommitmentState(t *testing.T) { cs := commitmentState{ txNum: rand.Uint64(), @@ -524,7 +82,7 @@ func Test_BtreeIndex_Seek(t *testing.T) { } func pivotKeysFromKV(dataPath string) ([][]byte, error) { - decomp, err := compress.NewDecompressor(dataPath) + decomp, err := seg.NewDecompressor(dataPath) if err != nil { return nil, err } @@ -566,7 +124,7 @@ func generateCompressedKV(tb testing.TB, tmp string, keySize, valueSize, keyCoun values := make([]byte, valueSize) dataPath := path.Join(tmp, fmt.Sprintf("%dk.kv", keyCount/1000)) - comp, err := compress.NewCompressor(context.Background(), "cmp", dataPath, tmp, compress.MinPatternScore, 1, log.LvlDebug, logger) + comp, err := seg.NewCompressor(context.Background(), "cmp", dataPath, tmp, seg.MinPatternScore, 1, log.LvlDebug, logger) require.NoError(tb, err) for i := 0; i < keyCount; i++ { @@ -589,7 +147,7 @@ func generateCompressedKV(tb testing.TB, tmp string, keySize, valueSize, keyCoun require.NoError(tb, err) comp.Close() - decomp, err := compress.NewDecompressor(dataPath) + decomp, err := seg.NewDecompressor(dataPath) require.NoError(tb, err) getter := decomp.MakeGetter() @@ -623,7 +181,7 @@ func Test_InitBtreeIndex(t *testing.T) { keyCount, M := 100, uint64(4) compPath := generateCompressedKV(t, tmp, 52, 300, keyCount, logger) - decomp, err := compress.NewDecompressor(compPath) + decomp, err := seg.NewDecompressor(compPath) require.NoError(t, err) defer decomp.Close() diff --git a/erigon-lib/state/aggregator_v3.go b/erigon-lib/state/aggregator_v3.go deleted file mode 100644 index ae7bd5ad31d..00000000000 --- a/erigon-lib/state/aggregator_v3.go +++ /dev/null @@ -1,1648 +0,0 @@ -/* - Copyright 2022 Erigon contributors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package state - -import ( - "context" - "encoding/binary" - "errors" - "fmt" - math2 "math" - "runtime" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/RoaringBitmap/roaring/roaring64" - common2 "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/background" - "github.com/ledgerwatch/erigon-lib/common/cmp" - "github.com/ledgerwatch/erigon-lib/common/dbg" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" - "github.com/ledgerwatch/erigon-lib/kv/iter" - "github.com/ledgerwatch/erigon-lib/kv/order" - "github.com/ledgerwatch/log/v3" - "golang.org/x/sync/errgroup" -) - -type AggregatorV3 struct { - rwTx kv.RwTx - db kv.RoDB - storage *History - tracesTo *InvertedIndex - backgroundResult *BackgroundResult - code *History - logAddrs *InvertedIndex - logTopics *InvertedIndex - tracesFrom *InvertedIndex - accounts *History - logPrefix string - dir string - tmpdir string - aggregationStep uint64 - keepInDB uint64 - - minimaxTxNumInFiles atomic.Uint64 - - filesMutationLock sync.Mutex - - // To keep DB small - need move data to small files ASAP. - // It means goroutine which creating small files - can't be locked by merge or indexing. - buildingFiles atomic.Bool - mergeingFiles atomic.Bool - buildingOptionalIndices atomic.Bool - - //warmupWorking atomic.Bool - ctx context.Context - ctxCancel context.CancelFunc - - needSaveFilesListInDB atomic.Bool - wg sync.WaitGroup - - onFreeze OnFreezeFunc - walLock sync.RWMutex - - ps *background.ProgressSet - - // next fields are set only if agg.doTraceCtx is true. can enable by env: TRACE_AGG=true - leakDetector *dbg.LeakDetector - logger log.Logger -} - -type OnFreezeFunc func(frozenFileNames []string) - -func NewAggregatorV3(ctx context.Context, dir, tmpdir string, aggregationStep uint64, db kv.RoDB, logger log.Logger) (*AggregatorV3, error) { - ctx, ctxCancel := context.WithCancel(ctx) - a := &AggregatorV3{ - ctx: ctx, - ctxCancel: ctxCancel, - onFreeze: func(frozenFileNames []string) {}, - dir: dir, - tmpdir: tmpdir, - aggregationStep: aggregationStep, - db: db, - keepInDB: 2 * aggregationStep, - leakDetector: dbg.NewLeakDetector("agg", dbg.SlowTx()), - ps: background.NewProgressSet(), - backgroundResult: &BackgroundResult{}, - logger: logger, - } - var err error - if a.accounts, err = NewHistory(dir, a.tmpdir, aggregationStep, "accounts", kv.TblAccountHistoryKeys, kv.TblAccountIdx, kv.TblAccountHistoryVals, false, nil, false, logger); err != nil { - return nil, err - } - if a.storage, err = NewHistory(dir, a.tmpdir, aggregationStep, "storage", kv.TblStorageHistoryKeys, kv.TblStorageIdx, kv.TblStorageHistoryVals, false, nil, false, logger); err != nil { - return nil, err - } - if a.code, err = NewHistory(dir, a.tmpdir, aggregationStep, "code", kv.TblCodeHistoryKeys, kv.TblCodeIdx, kv.TblCodeHistoryVals, true, nil, true, logger); err != nil { - return nil, err - } - if a.logAddrs, err = NewInvertedIndex(dir, a.tmpdir, aggregationStep, "logaddrs", kv.TblLogAddressKeys, kv.TblLogAddressIdx, false, nil, logger); err != nil { - return nil, err - } - if a.logTopics, err = NewInvertedIndex(dir, a.tmpdir, aggregationStep, "logtopics", kv.TblLogTopicsKeys, kv.TblLogTopicsIdx, false, nil, logger); err != nil { - return nil, err - } - if a.tracesFrom, err = NewInvertedIndex(dir, a.tmpdir, aggregationStep, "tracesfrom", kv.TblTracesFromKeys, kv.TblTracesFromIdx, false, nil, logger); err != nil { - return nil, err - } - if a.tracesTo, err = NewInvertedIndex(dir, a.tmpdir, aggregationStep, "tracesto", kv.TblTracesToKeys, kv.TblTracesToIdx, false, nil, logger); err != nil { - return nil, err - } - a.recalcMaxTxNum() - - return a, nil -} -func (a *AggregatorV3) OnFreeze(f OnFreezeFunc) { a.onFreeze = f } - -func (a *AggregatorV3) OpenFolder() error { - a.filesMutationLock.Lock() - defer a.filesMutationLock.Unlock() - var err error - if err = a.accounts.OpenFolder(); err != nil { - return fmt.Errorf("OpenFolder: %w", err) - } - if err = a.storage.OpenFolder(); err != nil { - return fmt.Errorf("OpenFolder: %w", err) - } - if err = a.code.OpenFolder(); err != nil { - return fmt.Errorf("OpenFolder: %w", err) - } - if err = a.logAddrs.OpenFolder(); err != nil { - return fmt.Errorf("OpenFolder: %w", err) - } - if err = a.logTopics.OpenFolder(); err != nil { - return fmt.Errorf("OpenFolder: %w", err) - } - if err = a.tracesFrom.OpenFolder(); err != nil { - return fmt.Errorf("OpenFolder: %w", err) - } - if err = a.tracesTo.OpenFolder(); err != nil { - return fmt.Errorf("OpenFolder: %w", err) - } - a.recalcMaxTxNum() - return nil -} -func (a *AggregatorV3) OpenList(fNames []string) error { - a.filesMutationLock.Lock() - defer a.filesMutationLock.Unlock() - - var err error - if err = a.accounts.OpenList(fNames); err != nil { - return err - } - if err = a.storage.OpenList(fNames); err != nil { - return err - } - if err = a.code.OpenList(fNames); err != nil { - return err - } - if err = a.logAddrs.OpenList(fNames); err != nil { - return err - } - if err = a.logTopics.OpenList(fNames); err != nil { - return err - } - if err = a.tracesFrom.OpenList(fNames); err != nil { - return err - } - if err = a.tracesTo.OpenList(fNames); err != nil { - return err - } - a.recalcMaxTxNum() - return nil -} - -func (a *AggregatorV3) Close() { - a.ctxCancel() - a.wg.Wait() - - a.filesMutationLock.Lock() - defer a.filesMutationLock.Unlock() - - a.accounts.Close() - a.storage.Close() - a.code.Close() - a.logAddrs.Close() - a.logTopics.Close() - a.tracesFrom.Close() - a.tracesTo.Close() -} - -// CleanDir - call it manually on startup of Main application (don't call it from utilities or nother processes) -// - remove files ignored during opening of aggregator -// - remove files which marked as deleted but have no readers (usually last reader removing files marked as deleted) -func (a *AggregatorV3) CleanDir() { - a.accounts.deleteGarbageFiles() - a.storage.deleteGarbageFiles() - a.code.deleteGarbageFiles() - a.logAddrs.deleteGarbageFiles() - a.logTopics.deleteGarbageFiles() - a.tracesFrom.deleteGarbageFiles() - a.tracesTo.deleteGarbageFiles() - - ac := a.MakeContext() - defer ac.Close() - ac.a.accounts.cleanAfterFreeze(ac.accounts.frozenTo()) - ac.a.storage.cleanAfterFreeze(ac.storage.frozenTo()) - ac.a.code.cleanAfterFreeze(ac.code.frozenTo()) - ac.a.logAddrs.cleanAfterFreeze(ac.logAddrs.frozenTo()) - ac.a.logTopics.cleanAfterFreeze(ac.logTopics.frozenTo()) - ac.a.tracesFrom.cleanAfterFreeze(ac.tracesFrom.frozenTo()) - ac.a.tracesTo.cleanAfterFreeze(ac.tracesTo.frozenTo()) -} - -func (a *AggregatorV3) SetWorkers(i int) { - a.accounts.compressWorkers = i - a.storage.compressWorkers = i - a.code.compressWorkers = i - a.logAddrs.compressWorkers = i - a.logTopics.compressWorkers = i - a.tracesFrom.compressWorkers = i - a.tracesTo.compressWorkers = i -} - -func (a *AggregatorV3) HasBackgroundFilesBuild() bool { return a.ps.Has() } -func (a *AggregatorV3) BackgroundProgress() string { return a.ps.String() } - -func (a *AggregatorV3) Files() (res []string) { - if a == nil { - return res - } - a.filesMutationLock.Lock() - defer a.filesMutationLock.Unlock() - - res = append(res, a.accounts.Files()...) - res = append(res, a.storage.Files()...) - res = append(res, a.code.Files()...) - res = append(res, a.logAddrs.Files()...) - res = append(res, a.logTopics.Files()...) - res = append(res, a.tracesFrom.Files()...) - res = append(res, a.tracesTo.Files()...) - return res -} -func (a *AggregatorV3) BuildOptionalMissedIndicesInBackground(ctx context.Context, workers int) { - if ok := a.buildingOptionalIndices.CompareAndSwap(false, true); !ok { - return - } - a.wg.Add(1) - go func() { - defer a.wg.Done() - defer a.buildingOptionalIndices.Store(false) - aggCtx := a.MakeContext() - defer aggCtx.Close() - if err := aggCtx.BuildOptionalMissedIndices(ctx, workers); err != nil { - if errors.Is(err, context.Canceled) { - return - } - log.Warn("[snapshots] merge", "err", err) - } - }() -} - -func (ac *AggregatorV3Context) BuildOptionalMissedIndices(ctx context.Context, workers int) error { - g, ctx := errgroup.WithContext(ctx) - g.SetLimit(workers) - if ac.accounts != nil { - g.Go(func() error { return ac.accounts.BuildOptionalMissedIndices(ctx) }) - } - if ac.storage != nil { - g.Go(func() error { return ac.storage.BuildOptionalMissedIndices(ctx) }) - } - if ac.code != nil { - g.Go(func() error { return ac.code.BuildOptionalMissedIndices(ctx) }) - } - return g.Wait() -} - -func (a *AggregatorV3) BuildMissedIndices(ctx context.Context, workers int) error { - startIndexingTime := time.Now() - { - ps := background.NewProgressSet() - - g, ctx := errgroup.WithContext(ctx) - g.SetLimit(workers) - go func() { - logEvery := time.NewTicker(20 * time.Second) - defer logEvery.Stop() - for { - select { - case <-ctx.Done(): - return - case <-logEvery.C: - var m runtime.MemStats - dbg.ReadMemStats(&m) - log.Info("[snapshots] Indexing", "progress", ps.String(), "total-indexing-time", time.Since(startIndexingTime).Round(time.Second).String(), "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys)) - } - } - }() - - a.accounts.BuildMissedIndices(ctx, g, ps) - a.storage.BuildMissedIndices(ctx, g, ps) - a.code.BuildMissedIndices(ctx, g, ps) - a.logAddrs.BuildMissedIndices(ctx, g, ps) - a.logTopics.BuildMissedIndices(ctx, g, ps) - a.tracesFrom.BuildMissedIndices(ctx, g, ps) - a.tracesTo.BuildMissedIndices(ctx, g, ps) - - if err := g.Wait(); err != nil { - return err - } - if err := a.OpenFolder(); err != nil { - return err - } - } - - ac := a.MakeContext() - defer ac.Close() - return ac.BuildOptionalMissedIndices(ctx, workers) -} - -func (a *AggregatorV3) SetLogPrefix(v string) { a.logPrefix = v } - -func (a *AggregatorV3) SetTx(tx kv.RwTx) { - a.rwTx = tx - a.accounts.SetTx(tx) - a.storage.SetTx(tx) - a.code.SetTx(tx) - a.logAddrs.SetTx(tx) - a.logTopics.SetTx(tx) - a.tracesFrom.SetTx(tx) - a.tracesTo.SetTx(tx) -} - -func (a *AggregatorV3) SetTxNum(txNum uint64) { - a.accounts.SetTxNum(txNum) - a.storage.SetTxNum(txNum) - a.code.SetTxNum(txNum) - a.logAddrs.SetTxNum(txNum) - a.logTopics.SetTxNum(txNum) - a.tracesFrom.SetTxNum(txNum) - a.tracesTo.SetTxNum(txNum) -} - -type AggV3Collation struct { - logAddrs map[string]*roaring64.Bitmap - logTopics map[string]*roaring64.Bitmap - tracesFrom map[string]*roaring64.Bitmap - tracesTo map[string]*roaring64.Bitmap - accounts HistoryCollation - storage HistoryCollation - code HistoryCollation -} - -func (c AggV3Collation) Close() { - c.accounts.Close() - c.storage.Close() - c.code.Close() - - for _, b := range c.logAddrs { - bitmapdb.ReturnToPool64(b) - } - for _, b := range c.logTopics { - bitmapdb.ReturnToPool64(b) - } - for _, b := range c.tracesFrom { - bitmapdb.ReturnToPool64(b) - } - for _, b := range c.tracesTo { - bitmapdb.ReturnToPool64(b) - } -} - -func (a *AggregatorV3) buildFiles(ctx context.Context, step, txFrom, txTo uint64) (AggV3StaticFiles, error) { - //logEvery := time.NewTicker(60 * time.Second) - //defer logEvery.Stop() - //defer func(t time.Time) { - // log.Info(fmt.Sprintf("[snapshot] build %d-%d", step, step+1), "took", time.Since(t)) - //}(time.Now()) - var sf AggV3StaticFiles - var ac AggV3Collation - closeColl := true - defer func() { - if closeColl { - ac.Close() - } - }() - //var wg sync.WaitGroup - //wg.Add(7) - //errCh := make(chan error, 7) - //go func() { - // defer wg.Done() - var err error - if err = a.db.View(ctx, func(tx kv.Tx) error { - ac.accounts, err = a.accounts.collate(step, txFrom, txTo, tx) - return err - }); err != nil { - return sf, err - //errCh <- err - } - - if sf.accounts, err = a.accounts.buildFiles(ctx, step, ac.accounts, a.ps); err != nil { - return sf, err - //errCh <- err - } - //}() - // - //go func() { - // defer wg.Done() - // var err error - if err = a.db.View(ctx, func(tx kv.Tx) error { - ac.storage, err = a.storage.collate(step, txFrom, txTo, tx) - return err - }); err != nil { - return sf, err - //errCh <- err - } - - if sf.storage, err = a.storage.buildFiles(ctx, step, ac.storage, a.ps); err != nil { - return sf, err - //errCh <- err - } - //}() - //go func() { - // defer wg.Done() - // var err error - if err = a.db.View(ctx, func(tx kv.Tx) error { - ac.code, err = a.code.collate(step, txFrom, txTo, tx) - return err - }); err != nil { - return sf, err - //errCh <- err - } - - if sf.code, err = a.code.buildFiles(ctx, step, ac.code, a.ps); err != nil { - return sf, err - //errCh <- err - } - //}() - //go func() { - // defer wg.Done() - // var err error - if err = a.db.View(ctx, func(tx kv.Tx) error { - ac.logAddrs, err = a.logAddrs.collate(ctx, txFrom, txTo, tx) - return err - }); err != nil { - return sf, err - //errCh <- err - } - - if sf.logAddrs, err = a.logAddrs.buildFiles(ctx, step, ac.logAddrs, a.ps); err != nil { - return sf, err - //errCh <- err - } - //}() - //go func() { - // defer wg.Done() - // var err error - if err = a.db.View(ctx, func(tx kv.Tx) error { - ac.logTopics, err = a.logTopics.collate(ctx, txFrom, txTo, tx) - return err - }); err != nil { - return sf, err - //errCh <- err - } - - if sf.logTopics, err = a.logTopics.buildFiles(ctx, step, ac.logTopics, a.ps); err != nil { - return sf, err - //errCh <- err - } - //}() - //go func() { - // defer wg.Done() - // var err error - if err = a.db.View(ctx, func(tx kv.Tx) error { - ac.tracesFrom, err = a.tracesFrom.collate(ctx, txFrom, txTo, tx) - return err - }); err != nil { - return sf, err - //errCh <- err - } - - if sf.tracesFrom, err = a.tracesFrom.buildFiles(ctx, step, ac.tracesFrom, a.ps); err != nil { - return sf, err - //errCh <- err - } - //}() - //go func() { - // defer wg.Done() - // var err error - if err = a.db.View(ctx, func(tx kv.Tx) error { - ac.tracesTo, err = a.tracesTo.collate(ctx, txFrom, txTo, tx) - return err - }); err != nil { - return sf, err - //errCh <- err - } - - if sf.tracesTo, err = a.tracesTo.buildFiles(ctx, step, ac.tracesTo, a.ps); err != nil { - return sf, err - // errCh <- err - } - //}() - //go func() { - // wg.Wait() - //close(errCh) - //}() - //var lastError error - //for err := range errCh { - // if err != nil { - // lastError = err - // } - //} - //if lastError == nil { - closeColl = false - //} - return sf, nil -} - -type AggV3StaticFiles struct { - accounts HistoryFiles - storage HistoryFiles - code HistoryFiles - logAddrs InvertedFiles - logTopics InvertedFiles - tracesFrom InvertedFiles - tracesTo InvertedFiles -} - -func (sf AggV3StaticFiles) Close() { - sf.accounts.Close() - sf.storage.Close() - sf.code.Close() - sf.logAddrs.Close() - sf.logTopics.Close() - sf.tracesFrom.Close() - sf.tracesTo.Close() -} - -func (a *AggregatorV3) BuildFiles(toTxNum uint64) (err error) { - a.BuildFilesInBackground(toTxNum) - if !(a.buildingFiles.Load() || a.mergeingFiles.Load() || a.buildingOptionalIndices.Load()) { - return nil - } - - logEvery := time.NewTicker(20 * time.Second) - defer logEvery.Stop() -Loop: - for { - select { - case <-a.ctx.Done(): - return a.ctx.Err() - case <-logEvery.C: - if !(a.buildingFiles.Load() || a.mergeingFiles.Load() || a.buildingOptionalIndices.Load()) { - break Loop - } - if a.HasBackgroundFilesBuild() { - log.Info("[snapshots] Files build", "progress", a.BackgroundProgress()) - } - } - } - - return nil -} - -func (a *AggregatorV3) buildFilesInBackground(ctx context.Context, step uint64) (err error) { - closeAll := true - //log.Info("[snapshots] history build", "step", fmt.Sprintf("%d-%d", step, step+1)) - sf, err := a.buildFiles(ctx, step, step*a.aggregationStep, (step+1)*a.aggregationStep) - if err != nil { - return err - } - defer func() { - if closeAll { - sf.Close() - } - }() - a.integrateFiles(sf, step*a.aggregationStep, (step+1)*a.aggregationStep) - //a.notifyAboutNewSnapshots() - - closeAll = false - return nil -} - -func (a *AggregatorV3) mergeLoopStep(ctx context.Context, workers int) (somethingDone bool, err error) { - ac := a.MakeContext() // this need, to ensure we do all operations on files in "transaction-style", maybe we will ensure it on type-level in future - defer ac.Close() - - closeAll := true - maxSpan := a.aggregationStep * StepsInBiggestFile - r := ac.findMergeRange(a.minimaxTxNumInFiles.Load(), maxSpan) - if !r.any() { - return false, nil - } - - outs, err := ac.staticFilesInRange(r) - defer func() { - if closeAll { - outs.Close() - } - }() - if err != nil { - return false, err - } - - in, err := ac.mergeFiles(ctx, outs, r, workers) - if err != nil { - return true, err - } - defer func() { - if closeAll { - in.Close() - } - }() - a.integrateMergedFiles(outs, in) - a.onFreeze(in.FrozenList()) - closeAll = false - return true, nil -} -func (a *AggregatorV3) MergeLoop(ctx context.Context, workers int) error { - for { - somethingMerged, err := a.mergeLoopStep(ctx, workers) - if err != nil { - return err - } - if !somethingMerged { - return nil - } - } -} - -func (a *AggregatorV3) integrateFiles(sf AggV3StaticFiles, txNumFrom, txNumTo uint64) { - a.filesMutationLock.Lock() - defer a.filesMutationLock.Unlock() - defer a.needSaveFilesListInDB.Store(true) - defer a.recalcMaxTxNum() - a.accounts.integrateFiles(sf.accounts, txNumFrom, txNumTo) - a.storage.integrateFiles(sf.storage, txNumFrom, txNumTo) - a.code.integrateFiles(sf.code, txNumFrom, txNumTo) - a.logAddrs.integrateFiles(sf.logAddrs, txNumFrom, txNumTo) - a.logTopics.integrateFiles(sf.logTopics, txNumFrom, txNumTo) - a.tracesFrom.integrateFiles(sf.tracesFrom, txNumFrom, txNumTo) - a.tracesTo.integrateFiles(sf.tracesTo, txNumFrom, txNumTo) -} - -func (a *AggregatorV3) HasNewFrozenFiles() bool { - if a == nil { - return false - } - return a.needSaveFilesListInDB.CompareAndSwap(true, false) -} - -func (a *AggregatorV3) Unwind(ctx context.Context, txUnwindTo uint64) error { - logEvery := time.NewTicker(30 * time.Second) - defer logEvery.Stop() - if err := a.accounts.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { - return err - } - if err := a.storage.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { - return err - } - if err := a.code.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { - return err - } - if err := a.logAddrs.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { - return err - } - if err := a.logTopics.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { - return err - } - if err := a.tracesFrom.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { - return err - } - if err := a.tracesTo.prune(ctx, txUnwindTo, math2.MaxUint64, math2.MaxUint64, logEvery); err != nil { - return err - } - return nil -} - -func (a *AggregatorV3) Warmup(ctx context.Context, txFrom, limit uint64) error { - if a.db == nil { - return nil - } - e, ctx := errgroup.WithContext(ctx) - e.Go(func() error { - return a.db.View(ctx, func(tx kv.Tx) error { return a.accounts.warmup(ctx, txFrom, limit, tx) }) - }) - e.Go(func() error { - return a.db.View(ctx, func(tx kv.Tx) error { return a.storage.warmup(ctx, txFrom, limit, tx) }) - }) - e.Go(func() error { - return a.db.View(ctx, func(tx kv.Tx) error { return a.code.warmup(ctx, txFrom, limit, tx) }) - }) - e.Go(func() error { - return a.db.View(ctx, func(tx kv.Tx) error { return a.logAddrs.warmup(ctx, txFrom, limit, tx) }) - }) - e.Go(func() error { - return a.db.View(ctx, func(tx kv.Tx) error { return a.logTopics.warmup(ctx, txFrom, limit, tx) }) - }) - e.Go(func() error { - return a.db.View(ctx, func(tx kv.Tx) error { return a.tracesFrom.warmup(ctx, txFrom, limit, tx) }) - }) - e.Go(func() error { - return a.db.View(ctx, func(tx kv.Tx) error { return a.tracesTo.warmup(ctx, txFrom, limit, tx) }) - }) - return e.Wait() -} - -// StartWrites - pattern: `defer agg.StartWrites().FinishWrites()` -func (a *AggregatorV3) DiscardHistory() *AggregatorV3 { - a.accounts.DiscardHistory() - a.storage.DiscardHistory() - a.code.DiscardHistory() - a.logAddrs.DiscardHistory(a.tmpdir) - a.logTopics.DiscardHistory(a.tmpdir) - a.tracesFrom.DiscardHistory(a.tmpdir) - a.tracesTo.DiscardHistory(a.tmpdir) - return a -} - -// StartWrites - pattern: `defer agg.StartWrites().FinishWrites()` -func (a *AggregatorV3) StartWrites() *AggregatorV3 { - a.walLock.Lock() - defer a.walLock.Unlock() - a.accounts.StartWrites() - a.storage.StartWrites() - a.code.StartWrites() - a.logAddrs.StartWrites() - a.logTopics.StartWrites() - a.tracesFrom.StartWrites() - a.tracesTo.StartWrites() - return a -} -func (a *AggregatorV3) StartUnbufferedWrites() *AggregatorV3 { - a.walLock.Lock() - defer a.walLock.Unlock() - a.accounts.StartWrites() - a.storage.StartWrites() - a.code.StartWrites() - a.logAddrs.StartWrites() - a.logTopics.StartWrites() - a.tracesFrom.StartWrites() - a.tracesTo.StartWrites() - return a -} -func (a *AggregatorV3) FinishWrites() { - a.walLock.Lock() - defer a.walLock.Unlock() - a.accounts.FinishWrites() - a.storage.FinishWrites() - a.code.FinishWrites() - a.logAddrs.FinishWrites() - a.logTopics.FinishWrites() - a.tracesFrom.FinishWrites() - a.tracesTo.FinishWrites() -} - -type flusher interface { - Flush(ctx context.Context, tx kv.RwTx) error -} - -func (a *AggregatorV3) rotate() []flusher { - a.walLock.Lock() - defer a.walLock.Unlock() - return []flusher{ - a.accounts.Rotate(), - a.storage.Rotate(), - a.code.Rotate(), - a.logAddrs.Rotate(), - a.logTopics.Rotate(), - a.tracesFrom.Rotate(), - a.tracesTo.Rotate(), - } -} -func (a *AggregatorV3) Flush(ctx context.Context, tx kv.RwTx) error { - flushers := a.rotate() - defer func(t time.Time) { log.Debug("[snapshots] history flush", "took", time.Since(t)) }(time.Now()) - for _, f := range flushers { - if err := f.Flush(ctx, tx); err != nil { - return err - } - } - return nil -} - -func (a *AggregatorV3) CanPrune(tx kv.Tx) bool { - return a.CanPruneFrom(tx) < a.minimaxTxNumInFiles.Load() -} -func (a *AggregatorV3) CanPruneFrom(tx kv.Tx) uint64 { - fst, _ := kv.FirstKey(tx, kv.TblTracesToKeys) - fst2, _ := kv.FirstKey(tx, kv.TblStorageHistoryKeys) - if len(fst) > 0 && len(fst2) > 0 { - fstInDb := binary.BigEndian.Uint64(fst) - fstInDb2 := binary.BigEndian.Uint64(fst2) - return cmp.Min(fstInDb, fstInDb2) - } - return math2.MaxUint64 -} - -func (a *AggregatorV3) PruneWithTiemout(ctx context.Context, timeout time.Duration) error { - t := time.Now() - for a.CanPrune(a.rwTx) && time.Since(t) < timeout { - if err := a.Prune(ctx, 1_000); err != nil { // prune part of retired data, before commit - return err - } - } - return nil -} - -func (a *AggregatorV3) StepsRangeInDBAsStr(tx kv.Tx) string { - return strings.Join([]string{ - a.accounts.stepsRangeInDBAsStr(tx), - a.storage.stepsRangeInDBAsStr(tx), - a.code.stepsRangeInDBAsStr(tx), - a.logAddrs.stepsRangeInDBAsStr(tx), - a.logTopics.stepsRangeInDBAsStr(tx), - a.tracesFrom.stepsRangeInDBAsStr(tx), - a.tracesTo.stepsRangeInDBAsStr(tx), - }, ", ") -} - -func (a *AggregatorV3) Prune(ctx context.Context, limit uint64) error { - //if limit/a.aggregationStep > StepsInBiggestFile { - // ctx, cancel := context.WithCancel(ctx) - // defer cancel() - // - // a.wg.Add(1) - // go func() { - // defer a.wg.Done() - // _ = a.Warmup(ctx, 0, cmp.Max(a.aggregationStep, limit)) // warmup is asyn and moving faster than data deletion - // }() - //} - return a.prune(ctx, 0, a.minimaxTxNumInFiles.Load(), limit) -} - -func (a *AggregatorV3) prune(ctx context.Context, txFrom, txTo, limit uint64) error { - logEvery := time.NewTicker(30 * time.Second) - defer logEvery.Stop() - if err := a.accounts.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { - return err - } - if err := a.storage.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { - return err - } - if err := a.code.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { - return err - } - if err := a.logAddrs.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { - return err - } - if err := a.logTopics.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { - return err - } - if err := a.tracesFrom.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { - return err - } - if err := a.tracesTo.prune(ctx, txFrom, txTo, limit, logEvery); err != nil { - return err - } - return nil -} - -func (a *AggregatorV3) LogStats(tx kv.Tx, tx2block func(endTxNumMinimax uint64) uint64) { - if a.minimaxTxNumInFiles.Load() == 0 { - return - } - histBlockNumProgress := tx2block(a.minimaxTxNumInFiles.Load()) - str := make([]string, 0, a.accounts.InvertedIndex.files.Len()) - a.accounts.InvertedIndex.files.Walk(func(items []*filesItem) bool { - for _, item := range items { - bn := tx2block(item.endTxNum) - str = append(str, fmt.Sprintf("%d=%dK", item.endTxNum/a.aggregationStep, bn/1_000)) - } - return true - }) - - c, err := tx.CursorDupSort(a.accounts.InvertedIndex.indexTable) - if err != nil { - // TODO pass error properly around - panic(err) - } - _, v, err := c.First() - if err != nil { - // TODO pass error properly around - panic(err) - } - var firstHistoryIndexBlockInDB uint64 - if len(v) != 0 { - firstHistoryIndexBlockInDB = tx2block(binary.BigEndian.Uint64(v)) - } - - var m runtime.MemStats - dbg.ReadMemStats(&m) - log.Info("[snapshots] History Stat", - "blocks", fmt.Sprintf("%dk", (histBlockNumProgress+1)/1000), - "txs", fmt.Sprintf("%dm", a.minimaxTxNumInFiles.Load()/1_000_000), - "txNum2blockNum", strings.Join(str, ","), - "first_history_idx_in_db", firstHistoryIndexBlockInDB, - "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys)) -} - -func (a *AggregatorV3) EndTxNumMinimax() uint64 { return a.minimaxTxNumInFiles.Load() } -func (a *AggregatorV3) EndTxNumFrozenAndIndexed() uint64 { - return cmp.Min( - cmp.Min( - a.accounts.endIndexedTxNumMinimax(true), - a.storage.endIndexedTxNumMinimax(true), - ), - a.code.endIndexedTxNumMinimax(true), - ) -} -func (a *AggregatorV3) recalcMaxTxNum() { - min := a.accounts.endTxNumMinimax() - if txNum := a.storage.endTxNumMinimax(); txNum < min { - min = txNum - } - if txNum := a.code.endTxNumMinimax(); txNum < min { - min = txNum - } - if txNum := a.logAddrs.endTxNumMinimax(); txNum < min { - min = txNum - } - if txNum := a.logTopics.endTxNumMinimax(); txNum < min { - min = txNum - } - if txNum := a.tracesFrom.endTxNumMinimax(); txNum < min { - min = txNum - } - if txNum := a.tracesTo.endTxNumMinimax(); txNum < min { - min = txNum - } - a.minimaxTxNumInFiles.Store(min) -} - -type RangesV3 struct { - accounts HistoryRanges - storage HistoryRanges - code HistoryRanges - logTopicsStartTxNum uint64 - logAddrsEndTxNum uint64 - logAddrsStartTxNum uint64 - logTopicsEndTxNum uint64 - tracesFromStartTxNum uint64 - tracesFromEndTxNum uint64 - tracesToStartTxNum uint64 - tracesToEndTxNum uint64 - logAddrs bool - logTopics bool - tracesFrom bool - tracesTo bool -} - -func (r RangesV3) any() bool { - return r.accounts.any() || r.storage.any() || r.code.any() || r.logAddrs || r.logTopics || r.tracesFrom || r.tracesTo -} - -func (ac *AggregatorV3Context) findMergeRange(maxEndTxNum, maxSpan uint64) RangesV3 { - var r RangesV3 - r.accounts = ac.a.accounts.findMergeRange(maxEndTxNum, maxSpan) - r.storage = ac.a.storage.findMergeRange(maxEndTxNum, maxSpan) - r.code = ac.a.code.findMergeRange(maxEndTxNum, maxSpan) - r.logAddrs, r.logAddrsStartTxNum, r.logAddrsEndTxNum = ac.a.logAddrs.findMergeRange(maxEndTxNum, maxSpan) - r.logTopics, r.logTopicsStartTxNum, r.logTopicsEndTxNum = ac.a.logTopics.findMergeRange(maxEndTxNum, maxSpan) - r.tracesFrom, r.tracesFromStartTxNum, r.tracesFromEndTxNum = ac.a.tracesFrom.findMergeRange(maxEndTxNum, maxSpan) - r.tracesTo, r.tracesToStartTxNum, r.tracesToEndTxNum = ac.a.tracesTo.findMergeRange(maxEndTxNum, maxSpan) - //log.Info(fmt.Sprintf("findMergeRange(%d, %d)=%+v\n", maxEndTxNum, maxSpan, r)) - return r -} - -type SelectedStaticFilesV3 struct { - logTopics []*filesItem - accountsHist []*filesItem - tracesTo []*filesItem - storageIdx []*filesItem - storageHist []*filesItem - tracesFrom []*filesItem - codeIdx []*filesItem - codeHist []*filesItem - accountsIdx []*filesItem - logAddrs []*filesItem - codeI int - logAddrsI int - logTopicsI int - storageI int - tracesFromI int - accountsI int - tracesToI int -} - -func (sf SelectedStaticFilesV3) Close() { - for _, group := range [][]*filesItem{sf.accountsIdx, sf.accountsHist, sf.storageIdx, sf.accountsHist, sf.codeIdx, sf.codeHist, - sf.logAddrs, sf.logTopics, sf.tracesFrom, sf.tracesTo} { - for _, item := range group { - if item != nil { - if item.decompressor != nil { - item.decompressor.Close() - } - if item.index != nil { - item.index.Close() - } - } - } - } -} - -func (ac *AggregatorV3Context) staticFilesInRange(r RangesV3) (sf SelectedStaticFilesV3, err error) { - if r.accounts.any() { - sf.accountsIdx, sf.accountsHist, sf.accountsI, err = ac.accounts.staticFilesInRange(r.accounts) - if err != nil { - return sf, err - } - } - if r.storage.any() { - sf.storageIdx, sf.storageHist, sf.storageI, err = ac.storage.staticFilesInRange(r.storage) - if err != nil { - return sf, err - } - } - if r.code.any() { - sf.codeIdx, sf.codeHist, sf.codeI, err = ac.code.staticFilesInRange(r.code) - if err != nil { - return sf, err - } - } - if r.logAddrs { - sf.logAddrs, sf.logAddrsI = ac.logAddrs.staticFilesInRange(r.logAddrsStartTxNum, r.logAddrsEndTxNum) - } - if r.logTopics { - sf.logTopics, sf.logTopicsI = ac.logTopics.staticFilesInRange(r.logTopicsStartTxNum, r.logTopicsEndTxNum) - } - if r.tracesFrom { - sf.tracesFrom, sf.tracesFromI = ac.tracesFrom.staticFilesInRange(r.tracesFromStartTxNum, r.tracesFromEndTxNum) - } - if r.tracesTo { - sf.tracesTo, sf.tracesToI = ac.tracesTo.staticFilesInRange(r.tracesToStartTxNum, r.tracesToEndTxNum) - } - return sf, err -} - -type MergedFilesV3 struct { - accountsIdx, accountsHist *filesItem - storageIdx, storageHist *filesItem - codeIdx, codeHist *filesItem - logAddrs *filesItem - logTopics *filesItem - tracesFrom *filesItem - tracesTo *filesItem -} - -func (mf MergedFilesV3) FrozenList() (frozen []string) { - if mf.accountsHist != nil && mf.accountsHist.frozen { - frozen = append(frozen, mf.accountsHist.decompressor.FileName()) - } - if mf.accountsIdx != nil && mf.accountsIdx.frozen { - frozen = append(frozen, mf.accountsIdx.decompressor.FileName()) - } - - if mf.storageHist != nil && mf.storageHist.frozen { - frozen = append(frozen, mf.storageHist.decompressor.FileName()) - } - if mf.storageIdx != nil && mf.storageIdx.frozen { - frozen = append(frozen, mf.storageIdx.decompressor.FileName()) - } - - if mf.codeHist != nil && mf.codeHist.frozen { - frozen = append(frozen, mf.codeHist.decompressor.FileName()) - } - if mf.codeIdx != nil && mf.codeIdx.frozen { - frozen = append(frozen, mf.codeIdx.decompressor.FileName()) - } - - if mf.logAddrs != nil && mf.logAddrs.frozen { - frozen = append(frozen, mf.logAddrs.decompressor.FileName()) - } - if mf.logTopics != nil && mf.logTopics.frozen { - frozen = append(frozen, mf.logTopics.decompressor.FileName()) - } - if mf.tracesFrom != nil && mf.tracesFrom.frozen { - frozen = append(frozen, mf.tracesFrom.decompressor.FileName()) - } - if mf.tracesTo != nil && mf.tracesTo.frozen { - frozen = append(frozen, mf.tracesTo.decompressor.FileName()) - } - return frozen -} -func (mf MergedFilesV3) Close() { - for _, item := range []*filesItem{mf.accountsIdx, mf.accountsHist, mf.storageIdx, mf.storageHist, mf.codeIdx, mf.codeHist, - mf.logAddrs, mf.logTopics, mf.tracesFrom, mf.tracesTo} { - if item != nil { - if item.decompressor != nil { - item.decompressor.Close() - } - if item.index != nil { - item.index.Close() - } - } - } -} - -func (ac *AggregatorV3Context) mergeFiles(ctx context.Context, files SelectedStaticFilesV3, r RangesV3, workers int) (MergedFilesV3, error) { - var mf MergedFilesV3 - g, ctx := errgroup.WithContext(ctx) - g.SetLimit(workers) - closeFiles := true - defer func() { - if closeFiles { - mf.Close() - } - }() - if r.accounts.any() { - g.Go(func() error { - var err error - mf.accountsIdx, mf.accountsHist, err = ac.a.accounts.mergeFiles(ctx, files.accountsIdx, files.accountsHist, r.accounts, workers, ac.a.ps) - return err - }) - } - - if r.storage.any() { - g.Go(func() error { - var err error - mf.storageIdx, mf.storageHist, err = ac.a.storage.mergeFiles(ctx, files.storageIdx, files.storageHist, r.storage, workers, ac.a.ps) - return err - }) - } - if r.code.any() { - g.Go(func() error { - var err error - mf.codeIdx, mf.codeHist, err = ac.a.code.mergeFiles(ctx, files.codeIdx, files.codeHist, r.code, workers, ac.a.ps) - return err - }) - } - if r.logAddrs { - g.Go(func() error { - var err error - mf.logAddrs, err = ac.a.logAddrs.mergeFiles(ctx, files.logAddrs, r.logAddrsStartTxNum, r.logAddrsEndTxNum, workers, ac.a.ps) - return err - }) - } - if r.logTopics { - g.Go(func() error { - var err error - mf.logTopics, err = ac.a.logTopics.mergeFiles(ctx, files.logTopics, r.logTopicsStartTxNum, r.logTopicsEndTxNum, workers, ac.a.ps) - return err - }) - } - if r.tracesFrom { - g.Go(func() error { - var err error - mf.tracesFrom, err = ac.a.tracesFrom.mergeFiles(ctx, files.tracesFrom, r.tracesFromStartTxNum, r.tracesFromEndTxNum, workers, ac.a.ps) - return err - }) - } - if r.tracesTo { - g.Go(func() error { - var err error - mf.tracesTo, err = ac.a.tracesTo.mergeFiles(ctx, files.tracesTo, r.tracesToStartTxNum, r.tracesToEndTxNum, workers, ac.a.ps) - return err - }) - } - err := g.Wait() - if err == nil { - closeFiles = false - } - return mf, err -} - -func (a *AggregatorV3) integrateMergedFiles(outs SelectedStaticFilesV3, in MergedFilesV3) (frozen []string) { - a.filesMutationLock.Lock() - defer a.filesMutationLock.Unlock() - defer a.needSaveFilesListInDB.Store(true) - defer a.recalcMaxTxNum() - a.accounts.integrateMergedFiles(outs.accountsIdx, outs.accountsHist, in.accountsIdx, in.accountsHist) - a.storage.integrateMergedFiles(outs.storageIdx, outs.storageHist, in.storageIdx, in.storageHist) - a.code.integrateMergedFiles(outs.codeIdx, outs.codeHist, in.codeIdx, in.codeHist) - a.logAddrs.integrateMergedFiles(outs.logAddrs, in.logAddrs) - a.logTopics.integrateMergedFiles(outs.logTopics, in.logTopics) - a.tracesFrom.integrateMergedFiles(outs.tracesFrom, in.tracesFrom) - a.tracesTo.integrateMergedFiles(outs.tracesTo, in.tracesTo) - a.cleanAfterNewFreeze(in) - return frozen -} -func (a *AggregatorV3) cleanAfterNewFreeze(in MergedFilesV3) { - if in.accountsHist != nil && in.accountsHist.frozen { - a.accounts.cleanAfterFreeze(in.accountsHist.endTxNum) - } - if in.storageHist != nil && in.storageHist.frozen { - a.storage.cleanAfterFreeze(in.storageHist.endTxNum) - } - if in.codeHist != nil && in.codeHist.frozen { - a.code.cleanAfterFreeze(in.codeHist.endTxNum) - } - if in.logAddrs != nil && in.logAddrs.frozen { - a.logAddrs.cleanAfterFreeze(in.logAddrs.endTxNum) - } - if in.logTopics != nil && in.logTopics.frozen { - a.logTopics.cleanAfterFreeze(in.logTopics.endTxNum) - } - if in.tracesFrom != nil && in.tracesFrom.frozen { - a.tracesFrom.cleanAfterFreeze(in.tracesFrom.endTxNum) - } - if in.tracesTo != nil && in.tracesTo.frozen { - a.tracesTo.cleanAfterFreeze(in.tracesTo.endTxNum) - } -} - -// KeepInDB - usually equal to one a.aggregationStep, but when we exec blocks from snapshots -// we can set it to 0, because no re-org on this blocks are possible -func (a *AggregatorV3) KeepInDB(v uint64) { a.keepInDB = v } - -func (a *AggregatorV3) BuildFilesInBackground(txNum uint64) { - if (txNum + 1) <= a.minimaxTxNumInFiles.Load()+a.aggregationStep+a.keepInDB { // Leave one step worth in the DB - return - } - - if ok := a.buildingFiles.CompareAndSwap(false, true); !ok { - return - } - - step := a.minimaxTxNumInFiles.Load() / a.aggregationStep - toTxNum := (step + 1) * a.aggregationStep - hasData := false - a.wg.Add(1) - go func() { - defer a.wg.Done() - defer a.buildingFiles.Store(false) - - // check if db has enough data (maybe we didn't commit them yet) - lastInDB := lastIdInDB(a.db, a.accounts.indexKeysTable) - hasData = lastInDB >= toTxNum - if !hasData { - return - } - - // trying to create as much small-step-files as possible: - // - to reduce amount of small merges - // - to remove old data from db as early as possible - // - during files build, may happen commit of new data. on each loop step getting latest id in db - for step < lastIdInDB(a.db, a.accounts.indexKeysTable)/a.aggregationStep { - if err := a.buildFilesInBackground(a.ctx, step); err != nil { - if errors.Is(err, context.Canceled) { - return - } - log.Warn("[snapshots] buildFilesInBackground", "err", err) - break - } - step++ - } - - if ok := a.mergeingFiles.CompareAndSwap(false, true); !ok { - return - } - a.wg.Add(1) - go func() { - defer a.wg.Done() - defer a.mergeingFiles.Store(false) - if err := a.MergeLoop(a.ctx, 1); err != nil { - if errors.Is(err, context.Canceled) { - return - } - log.Warn("[snapshots] merge", "err", err) - } - - a.BuildOptionalMissedIndicesInBackground(a.ctx, 1) - }() - }() -} - -func (a *AggregatorV3) BatchHistoryWriteStart() *AggregatorV3 { - a.walLock.RLock() - return a -} -func (a *AggregatorV3) BatchHistoryWriteEnd() { - a.walLock.RUnlock() -} - -func (a *AggregatorV3) AddAccountPrev(addr []byte, prev []byte) error { - return a.accounts.AddPrevValue(addr, nil, prev) -} - -func (a *AggregatorV3) AddStoragePrev(addr []byte, loc []byte, prev []byte) error { - return a.storage.AddPrevValue(addr, loc, prev) -} - -// AddCodePrev - addr+inc => code -func (a *AggregatorV3) AddCodePrev(addr []byte, prev []byte) error { - return a.code.AddPrevValue(addr, nil, prev) -} - -// nolint -func (a *AggregatorV3) PutIdx(idx kv.InvertedIdx, key []byte) error { - switch idx { - case kv.TblTracesFromIdx: - return a.tracesFrom.Add(key) - case kv.TblTracesToIdx: - return a.tracesTo.Add(key) - case kv.TblLogAddressIdx: - return a.logAddrs.Add(key) - case kv.LogTopicIndex: - return a.logTopics.Add(key) - default: - panic(idx) - } -} - -// DisableReadAhead - usage: `defer d.EnableReadAhead().DisableReadAhead()`. Please don't use this funcs without `defer` to avoid leak. -func (a *AggregatorV3) DisableReadAhead() { - a.accounts.DisableReadAhead() - a.storage.DisableReadAhead() - a.code.DisableReadAhead() - a.logAddrs.DisableReadAhead() - a.logTopics.DisableReadAhead() - a.tracesFrom.DisableReadAhead() - a.tracesTo.DisableReadAhead() -} -func (a *AggregatorV3) EnableReadAhead() *AggregatorV3 { - a.accounts.EnableReadAhead() - a.storage.EnableReadAhead() - a.code.EnableReadAhead() - a.logAddrs.EnableReadAhead() - a.logTopics.EnableReadAhead() - a.tracesFrom.EnableReadAhead() - a.tracesTo.EnableReadAhead() - return a -} -func (a *AggregatorV3) EnableMadvWillNeed() *AggregatorV3 { - a.accounts.EnableMadvWillNeed() - a.storage.EnableMadvWillNeed() - a.code.EnableMadvWillNeed() - a.logAddrs.EnableMadvWillNeed() - a.logTopics.EnableMadvWillNeed() - a.tracesFrom.EnableMadvWillNeed() - a.tracesTo.EnableMadvWillNeed() - return a -} -func (a *AggregatorV3) EnableMadvNormal() *AggregatorV3 { - a.accounts.EnableMadvNormalReadAhead() - a.storage.EnableMadvNormalReadAhead() - a.code.EnableMadvNormalReadAhead() - a.logAddrs.EnableMadvNormalReadAhead() - a.logTopics.EnableMadvNormalReadAhead() - a.tracesFrom.EnableMadvNormalReadAhead() - a.tracesTo.EnableMadvNormalReadAhead() - return a -} - -func (ac *AggregatorV3Context) IndexRange(name kv.InvertedIdx, k []byte, fromTs, toTs int, asc order.By, limit int, tx kv.Tx) (timestamps iter.U64, err error) { - switch name { - case kv.AccountsHistoryIdx: - return ac.accounts.IdxRange(k, fromTs, toTs, asc, limit, tx) - case kv.StorageHistoryIdx: - return ac.storage.IdxRange(k, fromTs, toTs, asc, limit, tx) - case kv.CodeHistoryIdx: - return ac.code.IdxRange(k, fromTs, toTs, asc, limit, tx) - case kv.LogTopicIdx: - return ac.logTopics.IdxRange(k, fromTs, toTs, asc, limit, tx) - case kv.LogAddrIdx: - return ac.logAddrs.IdxRange(k, fromTs, toTs, asc, limit, tx) - case kv.TracesFromIdx: - return ac.tracesFrom.IdxRange(k, fromTs, toTs, asc, limit, tx) - case kv.TracesToIdx: - return ac.tracesTo.IdxRange(k, fromTs, toTs, asc, limit, tx) - default: - return nil, fmt.Errorf("unexpected history name: %s", name) - } -} - -// -- range end - -func (ac *AggregatorV3Context) ReadAccountDataNoStateWithRecent(addr []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { - return ac.accounts.GetNoStateWithRecent(addr, txNum, tx) -} - -func (ac *AggregatorV3Context) ReadAccountDataNoState(addr []byte, txNum uint64) ([]byte, bool, error) { - return ac.accounts.GetNoState(addr, txNum) -} - -func (ac *AggregatorV3Context) ReadAccountStorageNoStateWithRecent(addr []byte, loc []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { - if cap(ac.keyBuf) < len(addr)+len(loc) { - ac.keyBuf = make([]byte, len(addr)+len(loc)) - } else if len(ac.keyBuf) != len(addr)+len(loc) { - ac.keyBuf = ac.keyBuf[:len(addr)+len(loc)] - } - copy(ac.keyBuf, addr) - copy(ac.keyBuf[len(addr):], loc) - return ac.storage.GetNoStateWithRecent(ac.keyBuf, txNum, tx) -} -func (ac *AggregatorV3Context) ReadAccountStorageNoStateWithRecent2(key []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { - return ac.storage.GetNoStateWithRecent(key, txNum, tx) -} - -func (ac *AggregatorV3Context) ReadAccountStorageNoState(addr []byte, loc []byte, txNum uint64) ([]byte, bool, error) { - if cap(ac.keyBuf) < len(addr)+len(loc) { - ac.keyBuf = make([]byte, len(addr)+len(loc)) - } else if len(ac.keyBuf) != len(addr)+len(loc) { - ac.keyBuf = ac.keyBuf[:len(addr)+len(loc)] - } - copy(ac.keyBuf, addr) - copy(ac.keyBuf[len(addr):], loc) - return ac.storage.GetNoState(ac.keyBuf, txNum) -} - -func (ac *AggregatorV3Context) ReadAccountCodeNoStateWithRecent(addr []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { - return ac.code.GetNoStateWithRecent(addr, txNum, tx) -} -func (ac *AggregatorV3Context) ReadAccountCodeNoState(addr []byte, txNum uint64) ([]byte, bool, error) { - return ac.code.GetNoState(addr, txNum) -} - -func (ac *AggregatorV3Context) ReadAccountCodeSizeNoStateWithRecent(addr []byte, txNum uint64, tx kv.Tx) (int, bool, error) { - code, noState, err := ac.code.GetNoStateWithRecent(addr, txNum, tx) - if err != nil { - return 0, false, err - } - return len(code), noState, nil -} -func (ac *AggregatorV3Context) ReadAccountCodeSizeNoState(addr []byte, txNum uint64) (int, bool, error) { - code, noState, err := ac.code.GetNoState(addr, txNum) - if err != nil { - return 0, false, err - } - return len(code), noState, nil -} - -func (ac *AggregatorV3Context) AccountHistoryRange(startTxNum, endTxNum int, asc order.By, limit int, tx kv.Tx) (iter.KV, error) { - return ac.accounts.HistoryRange(startTxNum, endTxNum, asc, limit, tx) -} - -func (ac *AggregatorV3Context) StorageHistoryRange(startTxNum, endTxNum int, asc order.By, limit int, tx kv.Tx) (iter.KV, error) { - return ac.storage.HistoryRange(startTxNum, endTxNum, asc, limit, tx) -} - -func (ac *AggregatorV3Context) CodeHistoryRange(startTxNum, endTxNum int, asc order.By, limit int, tx kv.Tx) (iter.KV, error) { - return ac.code.HistoryRange(startTxNum, endTxNum, asc, limit, tx) -} - -func (ac *AggregatorV3Context) AccountHistoricalStateRange(startTxNum uint64, from, to []byte, limit int, tx kv.Tx) iter.KV { - return ac.accounts.WalkAsOf(startTxNum, from, to, tx, limit) -} - -func (ac *AggregatorV3Context) StorageHistoricalStateRange(startTxNum uint64, from, to []byte, limit int, tx kv.Tx) iter.KV { - return ac.storage.WalkAsOf(startTxNum, from, to, tx, limit) -} - -func (ac *AggregatorV3Context) CodeHistoricalStateRange(startTxNum uint64, from, to []byte, limit int, tx kv.Tx) iter.KV { - return ac.code.WalkAsOf(startTxNum, from, to, tx, limit) -} - -type FilesStats22 struct { -} - -func (a *AggregatorV3) Stats() FilesStats22 { - var fs FilesStats22 - return fs -} - -type AggregatorV3Context struct { - a *AggregatorV3 - accounts *HistoryContext - storage *HistoryContext - code *HistoryContext - logAddrs *InvertedIndexContext - logTopics *InvertedIndexContext - tracesFrom *InvertedIndexContext - tracesTo *InvertedIndexContext - keyBuf []byte - - id uint64 // set only if TRACE_AGG=true -} - -func (a *AggregatorV3) MakeContext() *AggregatorV3Context { - ac := &AggregatorV3Context{ - a: a, - accounts: a.accounts.MakeContext(), - storage: a.storage.MakeContext(), - code: a.code.MakeContext(), - logAddrs: a.logAddrs.MakeContext(), - logTopics: a.logTopics.MakeContext(), - tracesFrom: a.tracesFrom.MakeContext(), - tracesTo: a.tracesTo.MakeContext(), - - id: a.leakDetector.Add(), - } - - return ac -} -func (ac *AggregatorV3Context) Close() { - ac.a.leakDetector.Del(ac.id) - ac.accounts.Close() - ac.storage.Close() - ac.code.Close() - ac.logAddrs.Close() - ac.logTopics.Close() - ac.tracesFrom.Close() - ac.tracesTo.Close() -} - -// BackgroundResult - used only indicate that some work is done -// no much reason to pass exact results by this object, just get latest state when need -type BackgroundResult struct { - err error - has bool -} - -func (br *BackgroundResult) Has() bool { return br.has } -func (br *BackgroundResult) Set(err error) { br.has, br.err = true, err } -func (br *BackgroundResult) GetAndReset() (bool, error) { - has, err := br.has, br.err - br.has, br.err = false, nil - return has, err -} - -func lastIdInDB(db kv.RoDB, table string) (lstInDb uint64) { - if err := db.View(context.Background(), func(tx kv.Tx) error { - lst, _ := kv.LastKey(tx, table) - if len(lst) > 0 { - lstInDb = binary.BigEndian.Uint64(lst) - } - return nil - }); err != nil { - log.Warn("[snapshots] lastIdInDB", "err", err) - } - return lstInDb -} - -// AggregatorStep is used for incremental reconstitution, it allows -// accessing history in isolated way for each step -type AggregatorStep struct { - a *AggregatorV3 - accounts *HistoryStep - storage *HistoryStep - code *HistoryStep - keyBuf []byte -} - -func (a *AggregatorV3) MakeSteps() ([]*AggregatorStep, error) { - frozenAndIndexed := a.EndTxNumFrozenAndIndexed() - accountSteps := a.accounts.MakeSteps(frozenAndIndexed) - codeSteps := a.code.MakeSteps(frozenAndIndexed) - storageSteps := a.storage.MakeSteps(frozenAndIndexed) - if len(accountSteps) != len(storageSteps) || len(storageSteps) != len(codeSteps) { - return nil, fmt.Errorf("different limit of steps (try merge snapshots): accountSteps=%d, storageSteps=%d, codeSteps=%d", len(accountSteps), len(storageSteps), len(codeSteps)) - } - steps := make([]*AggregatorStep, len(accountSteps)) - for i, accountStep := range accountSteps { - steps[i] = &AggregatorStep{ - a: a, - accounts: accountStep, - storage: storageSteps[i], - code: codeSteps[i], - } - } - return steps, nil -} - -func (as *AggregatorStep) TxNumRange() (uint64, uint64) { - return as.accounts.indexFile.startTxNum, as.accounts.indexFile.endTxNum -} - -func (as *AggregatorStep) IterateAccountsTxs() *ScanIteratorInc { - return as.accounts.iterateTxs() -} - -func (as *AggregatorStep) IterateStorageTxs() *ScanIteratorInc { - return as.storage.iterateTxs() -} - -func (as *AggregatorStep) IterateCodeTxs() *ScanIteratorInc { - return as.code.iterateTxs() -} - -func (as *AggregatorStep) ReadAccountDataNoState(addr []byte, txNum uint64) ([]byte, bool, uint64) { - return as.accounts.GetNoState(addr, txNum) -} - -func (as *AggregatorStep) ReadAccountStorageNoState(addr []byte, loc []byte, txNum uint64) ([]byte, bool, uint64) { - if cap(as.keyBuf) < len(addr)+len(loc) { - as.keyBuf = make([]byte, len(addr)+len(loc)) - } else if len(as.keyBuf) != len(addr)+len(loc) { - as.keyBuf = as.keyBuf[:len(addr)+len(loc)] - } - copy(as.keyBuf, addr) - copy(as.keyBuf[len(addr):], loc) - return as.storage.GetNoState(as.keyBuf, txNum) -} - -func (as *AggregatorStep) ReadAccountCodeNoState(addr []byte, txNum uint64) ([]byte, bool, uint64) { - return as.code.GetNoState(addr, txNum) -} - -func (as *AggregatorStep) ReadAccountCodeSizeNoState(addr []byte, txNum uint64) (int, bool, uint64) { - code, noState, stateTxNum := as.code.GetNoState(addr, txNum) - return len(code), noState, stateTxNum -} - -func (as *AggregatorStep) MaxTxNumAccounts(addr []byte) (bool, uint64) { - return as.accounts.MaxTxNum(addr) -} - -func (as *AggregatorStep) MaxTxNumStorage(addr []byte, loc []byte) (bool, uint64) { - if cap(as.keyBuf) < len(addr)+len(loc) { - as.keyBuf = make([]byte, len(addr)+len(loc)) - } else if len(as.keyBuf) != len(addr)+len(loc) { - as.keyBuf = as.keyBuf[:len(addr)+len(loc)] - } - copy(as.keyBuf, addr) - copy(as.keyBuf[len(addr):], loc) - return as.storage.MaxTxNum(as.keyBuf) -} - -func (as *AggregatorStep) MaxTxNumCode(addr []byte) (bool, uint64) { - return as.code.MaxTxNum(addr) -} - -func (as *AggregatorStep) IterateAccountsHistory(txNum uint64) *HistoryIteratorInc { - return as.accounts.interateHistoryBeforeTxNum(txNum) -} - -func (as *AggregatorStep) IterateStorageHistory(txNum uint64) *HistoryIteratorInc { - return as.storage.interateHistoryBeforeTxNum(txNum) -} - -func (as *AggregatorStep) IterateCodeHistory(txNum uint64) *HistoryIteratorInc { - return as.code.interateHistoryBeforeTxNum(txNum) -} - -func (as *AggregatorStep) Clone() *AggregatorStep { - return &AggregatorStep{ - a: as.a, - accounts: as.accounts.Clone(), - storage: as.storage.Clone(), - code: as.code.Clone(), - } -} diff --git a/erigon-lib/state/btree_index.go b/erigon-lib/state/btree_index.go index 00d2b9e1374..3f389cf50af 100644 --- a/erigon-lib/state/btree_index.go +++ b/erigon-lib/state/btree_index.go @@ -16,15 +16,16 @@ import ( "github.com/c2h5oh/datasize" "github.com/edsrzf/mmap-go" - "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/etl" + "github.com/ledgerwatch/erigon-lib/seg" ) func logBase(n, base uint64) uint64 { @@ -823,8 +824,8 @@ type BtIndex struct { bytesPerRec int dataoffset uint64 auxBuf []byte - decompressor *compress.Decompressor - getter *compress.Getter + decompressor *seg.Decompressor + getter *seg.Getter } func CreateBtreeIndex(indexPath, dataPath string, M uint64, logger log.Logger) (*BtIndex, error) { @@ -837,7 +838,7 @@ func CreateBtreeIndex(indexPath, dataPath string, M uint64, logger log.Logger) ( var DefaultBtreeM = uint64(2048) -func CreateBtreeIndexWithDecompressor(indexPath string, M uint64, decompressor *compress.Decompressor, p *background.Progress, tmpdir string, logger log.Logger) (*BtIndex, error) { +func CreateBtreeIndexWithDecompressor(indexPath string, M uint64, decompressor *seg.Decompressor, p *background.Progress, tmpdir string, logger log.Logger) (*BtIndex, error) { err := BuildBtreeIndexWithDecompressor(indexPath, decompressor, p, tmpdir, logger) if err != nil { return nil, err @@ -845,7 +846,7 @@ func CreateBtreeIndexWithDecompressor(indexPath string, M uint64, decompressor * return OpenBtreeIndexWithDecompressor(indexPath, M, decompressor) } -func BuildBtreeIndexWithDecompressor(indexPath string, kv *compress.Decompressor, p *background.Progress, tmpdir string, logger log.Logger) error { +func BuildBtreeIndexWithDecompressor(indexPath string, kv *seg.Decompressor, p *background.Progress, tmpdir string, logger log.Logger) error { defer kv.EnableReadAhead().DisableReadAhead() args := BtIndexWriterArgs{ @@ -891,7 +892,7 @@ func BuildBtreeIndexWithDecompressor(indexPath string, kv *compress.Decompressor // Opens .kv at dataPath and generates index over it to file 'indexPath' func BuildBtreeIndex(dataPath, indexPath string, logger log.Logger) error { - decomp, err := compress.NewDecompressor(dataPath) + decomp, err := seg.NewDecompressor(dataPath) if err != nil { return err } @@ -934,7 +935,7 @@ func BuildBtreeIndex(dataPath, indexPath string, logger log.Logger) error { return nil } -func OpenBtreeIndexWithDecompressor(indexPath string, M uint64, kv *compress.Decompressor) (*BtIndex, error) { +func OpenBtreeIndexWithDecompressor(indexPath string, M uint64, kv *seg.Decompressor) (*BtIndex, error) { s, err := os.Stat(indexPath) if err != nil { return nil, err @@ -1021,7 +1022,7 @@ func OpenBtreeIndex(indexPath, dataPath string, M uint64) (*BtIndex, error) { //p := (*[]byte)(unsafe.Pointer(&idx.data[pos])) //l := int(idx.keyCount)*idx.bytesPerRec + (16 * int(idx.keyCount)) - idx.decompressor, err = compress.NewDecompressor(dataPath) + idx.decompressor, err = seg.NewDecompressor(dataPath) if err != nil { idx.Close() return nil, err diff --git a/erigon-lib/state/domain.go b/erigon-lib/state/domain.go index 93dfd13082b..48973c1cf01 100644 --- a/erigon-lib/state/domain.go +++ b/erigon-lib/state/domain.go @@ -21,9 +21,9 @@ import ( "container/heap" "context" "encoding/binary" + "errors" "fmt" "math" - "os" "path/filepath" "regexp" "strconv" @@ -39,104 +39,11 @@ import ( "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/erigon-lib/common/dir" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" ) -// filesItem corresponding to a pair of files (.dat and .idx) -type filesItem struct { - decompressor *compress.Decompressor - index *recsplit.Index - bindex *BtIndex - startTxNum uint64 - endTxNum uint64 - - // Frozen: file of size StepsInBiggestFile. Completely immutable. - // Cold: file of size < StepsInBiggestFile. Immutable, but can be closed/removed after merge to bigger file. - // Hot: Stored in DB. Providing Snapshot-Isolation by CopyOnWrite. - frozen bool // immutable, don't need atomic - refcount atomic.Int32 // only for `frozen=false` - - // file can be deleted in 2 cases: 1. when `refcount == 0 && canDelete == true` 2. on app startup when `file.isSubsetOfFrozenFile()` - // other processes (which also reading files, may have same logic) - canDelete atomic.Bool -} - -func newFilesItem(startTxNum, endTxNum uint64, stepSize uint64) *filesItem { - startStep := startTxNum / stepSize - endStep := endTxNum / stepSize - frozen := endStep-startStep == StepsInBiggestFile - return &filesItem{startTxNum: startTxNum, endTxNum: endTxNum, frozen: frozen} -} - -func (i *filesItem) isSubsetOf(j *filesItem) bool { - return (j.startTxNum <= i.startTxNum && i.endTxNum <= j.endTxNum) && (j.startTxNum != i.startTxNum || i.endTxNum != j.endTxNum) -} - -func filesItemLess(i, j *filesItem) bool { - if i.endTxNum == j.endTxNum { - return i.startTxNum > j.startTxNum - } - return i.endTxNum < j.endTxNum -} -func (i *filesItem) closeFilesAndRemove() { - if i.decompressor != nil { - i.decompressor.Close() - // paranoic-mode on: don't delete frozen files - if !i.frozen { - if err := os.Remove(i.decompressor.FilePath()); err != nil { - log.Trace("close", "err", err, "file", i.decompressor.FileName()) - } - } - i.decompressor = nil - } - if i.index != nil { - i.index.Close() - // paranoic-mode on: don't delete frozen files - if !i.frozen { - if err := os.Remove(i.index.FilePath()); err != nil { - log.Trace("close", "err", err, "file", i.index.FileName()) - } - } - i.index = nil - } - if i.bindex != nil { - i.bindex.Close() - if err := os.Remove(i.bindex.FilePath()); err != nil { - log.Trace("close", "err", err, "file", i.bindex.FileName()) - } - i.bindex = nil - } -} - -type DomainStats struct { - MergesCount uint64 - LastCollationTook time.Duration - LastPruneTook time.Duration - LastPruneHistTook time.Duration - LastFileBuildingTook time.Duration - LastCollationSize uint64 - LastPruneSize uint64 - - HistoryQueries *atomic.Uint64 - TotalQueries *atomic.Uint64 - EfSearchTime time.Duration - DataSize uint64 - IndexSize uint64 - FilesCount uint64 -} - -func (ds *DomainStats) Accumulate(other DomainStats) { - ds.HistoryQueries.Add(other.HistoryQueries.Load()) - ds.TotalQueries.Add(other.TotalQueries.Load()) - ds.EfSearchTime += other.EfSearchTime - ds.IndexSize += other.IndexSize - ds.DataSize += other.DataSize - ds.FilesCount += other.FilesCount -} - // Domain is a part of the state (examples are Accounts, Storage, Code) // Domain should not have any go routines or locks type Domain struct { @@ -150,15 +57,14 @@ type Domain struct { */ *History - files *btree2.BTreeG[*filesItem] // thread-safe, but maybe need 1 RWLock for all trees in AggregatorV3 + dirtyFiles *btree2.BTreeG[*filesItem] // thread-safe, but maybe need 1 RWLock for all trees in Aggregator // roFiles derivative from field `file`, but without garbage (canDelete=true, overlaps, etc...) - // MakeContext() using this field in zero-copy way - roFiles atomic.Pointer[[]ctxItem] - defaultDc *DomainContext - keysTable string // key -> invertedStep , invertedStep = ^(txNum / aggregationStep), Needs to be table with DupSort - valsTable string // key + invertedStep -> values - stats DomainStats - mergesCount uint64 + // BeginFilesRo() using this field in zero-copy way + visibleFiles atomic.Pointer[[]ctxItem] + defaultDc *DomainRoTx + keysTable string // key -> invertedStep , invertedStep = ^(txNum / aggregationStep), Needs to be table with DupSort + valsTable string // key + invertedStep -> values + stats DomainStats garbageFiles []*filesItem // files that exist on disk, but ignored on opening folder - because they are garbage logger log.Logger @@ -168,13 +74,13 @@ func NewDomain(dir, tmpdir string, aggregationStep uint64, filenameBase, keysTable, valsTable, indexKeysTable, historyValsTable, indexTable string, compressVals, largeValues bool, logger log.Logger) (*Domain, error) { d := &Domain{ - keysTable: keysTable, - valsTable: valsTable, - files: btree2.NewBTreeGOptions[*filesItem](filesItemLess, btree2.Options{Degree: 128, NoLocks: false}), - stats: DomainStats{HistoryQueries: &atomic.Uint64{}, TotalQueries: &atomic.Uint64{}}, - logger: logger, + keysTable: keysTable, + valsTable: valsTable, + dirtyFiles: btree2.NewBTreeGOptions[*filesItem](filesItemLess, btree2.Options{Degree: 128, NoLocks: false}), + stats: DomainStats{HistoryQueries: &atomic.Uint64{}, TotalQueries: &atomic.Uint64{}}, + logger: logger, } - d.roFiles.Store(&[]ctxItem{}) + d.visibleFiles.Store(&[]ctxItem{}) var err error if d.History, err = NewHistory(dir, tmpdir, aggregationStep, filenameBase, indexKeysTable, indexTable, historyValsTable, compressVals, []string{"kv"}, largeValues, logger); err != nil { @@ -194,7 +100,7 @@ func (d *Domain) LastStepInDB(tx kv.Tx) (lstInDb uint64) { } func (d *Domain) StartWrites() { - d.defaultDc = d.MakeContext() + d.defaultDc = d.BeginFilesRo() d.History.StartWrites() } @@ -218,7 +124,7 @@ func (d *Domain) openList(fNames []string) error { d.closeWhatNotInList(fNames) d.garbageFiles = d.scanStateFiles(fNames) if err := d.openFiles(); err != nil { - return fmt.Errorf("History.OpenList: %s, %w", d.filenameBase, err) + return fmt.Errorf("Domain.openList: %w, %s", err, d.filenameBase) } return nil } @@ -277,13 +183,13 @@ Loop: } } - if _, has := d.files.Get(newFile); has { + if _, has := d.dirtyFiles.Get(newFile); has { continue } addNewFile := true var subSets []*filesItem - d.files.Walk(func(items []*filesItem) bool { + d.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.isSubsetOf(newFile) { subSets = append(subSets, item) @@ -301,7 +207,7 @@ Loop: return true }) if addNewFile { - d.files.Set(newFile) + d.dirtyFiles.Set(newFile) } } return garbageFiles @@ -311,7 +217,7 @@ func (d *Domain) openFiles() (err error) { var totalKeys uint64 invalidFileItems := make([]*filesItem, 0) - d.files.Walk(func(items []*filesItem) bool { + d.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.decompressor != nil { continue @@ -322,7 +228,12 @@ func (d *Domain) openFiles() (err error) { invalidFileItems = append(invalidFileItems, item) continue } - if item.decompressor, err = compress.NewDecompressor(datPath); err != nil { + if item.decompressor, err = seg.NewDecompressor(datPath); err != nil { + d.logger.Debug("Domain.openFiles:", "err", err, "file", datPath) + if errors.Is(err, &seg.ErrCompressedFileCorrupted{}) { + err = nil + continue + } return false } @@ -332,7 +243,7 @@ func (d *Domain) openFiles() (err error) { idxPath := filepath.Join(d.dir, fmt.Sprintf("%s.%d-%d.kvi", d.filenameBase, fromStep, toStep)) if dir.FileExist(idxPath) { if item.index, err = recsplit.OpenIndex(idxPath); err != nil { - d.logger.Debug("InvertedIndex.openFiles: %w, %s", err, idxPath) + d.logger.Debug("InvertedIndex.openFiles:", "err", err, "file", idxPath) return false } totalKeys += item.index.KeyCount() @@ -340,7 +251,11 @@ func (d *Domain) openFiles() (err error) { if item.bindex == nil { bidxPath := filepath.Join(d.dir, fmt.Sprintf("%s.%d-%d.bt", d.filenameBase, fromStep, toStep)) if item.bindex, err = OpenBtreeIndexWithDecompressor(bidxPath, 2048, item.decompressor); err != nil { - d.logger.Debug("InvertedIndex.openFiles: %w, %s", err, bidxPath) + d.logger.Debug("InvertedIndex.openFiles:", "err", err, "file", bidxPath) + if errors.Is(err, &seg.ErrCompressedFileCorrupted{}) { + err = nil + continue + } return false } //totalKeys += item.bindex.KeyCount() @@ -352,7 +267,7 @@ func (d *Domain) openFiles() (err error) { return err } for _, item := range invalidFileItems { - d.files.Delete(item) + d.dirtyFiles.Delete(item) } d.reCalcRoFiles() @@ -361,7 +276,7 @@ func (d *Domain) openFiles() (err error) { func (d *Domain) closeWhatNotInList(fNames []string) { var toDelete []*filesItem - d.files.Walk(func(items []*filesItem) bool { + d.dirtyFiles.Walk(func(items []*filesItem) bool { Loop1: for _, item := range items { for _, protectName := range fNames { @@ -386,13 +301,13 @@ func (d *Domain) closeWhatNotInList(fNames []string) { item.bindex.Close() item.bindex = nil } - d.files.Delete(item) + d.dirtyFiles.Delete(item) } } func (d *Domain) reCalcRoFiles() { - roFiles := ctxFiles(d.files) - d.roFiles.Store(&roFiles) + roFiles := calcVisibleFiles(d.dirtyFiles) + d.visibleFiles.Store(&roFiles) } func (d *Domain) Close() { @@ -401,13 +316,13 @@ func (d *Domain) Close() { d.reCalcRoFiles() } -func (dc *DomainContext) get(key []byte, fromTxNum uint64, roTx kv.Tx) ([]byte, bool, error) { +func (dt *DomainRoTx) get(key []byte, fromTxNum uint64, roTx kv.Tx) ([]byte, bool, error) { //var invertedStep [8]byte - dc.d.stats.TotalQueries.Add(1) + dt.d.stats.TotalQueries.Add(1) - invertedStep := dc.numBuf - binary.BigEndian.PutUint64(invertedStep[:], ^(fromTxNum / dc.d.aggregationStep)) - keyCursor, err := roTx.CursorDupSort(dc.d.keysTable) + invertedStep := dt.numBuf + binary.BigEndian.PutUint64(invertedStep[:], ^(fromTxNum / dt.d.aggregationStep)) + keyCursor, err := roTx.CursorDupSort(dt.d.keysTable) if err != nil { return nil, false, err } @@ -417,29 +332,29 @@ func (dc *DomainContext) get(key []byte, fromTxNum uint64, roTx kv.Tx) ([]byte, return nil, false, err } if len(foundInvStep) == 0 { - dc.d.stats.HistoryQueries.Add(1) - return dc.readFromFiles(key, fromTxNum) + dt.d.stats.HistoryQueries.Add(1) + return dt.readFromFiles(key, fromTxNum) } //keySuffix := make([]byte, len(key)+8) - copy(dc.keyBuf[:], key) - copy(dc.keyBuf[len(key):], foundInvStep) - v, err := roTx.GetOne(dc.d.valsTable, dc.keyBuf[:len(key)+8]) + copy(dt.keyBuf[:], key) + copy(dt.keyBuf[len(key):], foundInvStep) + v, err := roTx.GetOne(dt.d.valsTable, dt.keyBuf[:len(key)+8]) if err != nil { return nil, false, err } return v, true, nil } -func (dc *DomainContext) Get(key1, key2 []byte, roTx kv.Tx) ([]byte, error) { +func (dt *DomainRoTx) Get(key1, key2 []byte, roTx kv.Tx) ([]byte, error) { //key := make([]byte, len(key1)+len(key2)) - copy(dc.keyBuf[:], key1) - copy(dc.keyBuf[len(key1):], key2) + copy(dt.keyBuf[:], key1) + copy(dt.keyBuf[len(key1):], key2) // keys larger than 52 bytes will panic - v, _, err := dc.get(dc.keyBuf[:len(key1)+len(key2)], dc.d.txNum, roTx) + v, _, err := dt.get(dt.keyBuf[:len(key1)+len(key2)], dt.d.txNum, roTx) return v, err } -func (d *Domain) update(key, original []byte) error { +func (d *Domain) update(key, _ []byte) error { var invertedStep [8]byte binary.BigEndian.PutUint64(invertedStep[:], ^(d.txNum / d.aggregationStep)) if err := d.tx.Put(d.keysTable, key, invertedStep[:]); err != nil { @@ -515,8 +430,8 @@ const ( // over storage of a given account type CursorItem struct { c kv.CursorDupSort - dg *compress.Getter - dg2 *compress.Getter + dg *seg.Getter + dg2 *seg.Getter key []byte val []byte endTxNum uint64 @@ -559,67 +474,43 @@ func (ch *CursorHeap) Pop() interface{} { return x } -// filesItem corresponding to a pair of files (.dat and .idx) -type ctxItem struct { - getter *compress.Getter - reader *recsplit.IndexReader - startTxNum uint64 - endTxNum uint64 - - i int - src *filesItem -} - -type ctxLocalityIdx struct { - reader *recsplit.IndexReader - bm *bitmapdb.FixedSizeBitmaps - file *ctxItem -} - -func ctxItemLess(i, j ctxItem) bool { //nolint - if i.endTxNum == j.endTxNum { - return i.startTxNum > j.startTxNum - } - return i.endTxNum < j.endTxNum -} - -// DomainContext allows accesing the same domain from multiple go-routines -type DomainContext struct { +// DomainRoTx allows accesing the same domain from multiple go-routines +type DomainRoTx struct { d *Domain files []ctxItem - getters []*compress.Getter + getters []*seg.Getter readers []*BtIndex - hc *HistoryContext + ht *HistoryRoTx keyBuf [60]byte // 52b key and 8b for inverted step numBuf [8]byte } -func (dc *DomainContext) statelessGetter(i int) *compress.Getter { - if dc.getters == nil { - dc.getters = make([]*compress.Getter, len(dc.files)) +func (dt *DomainRoTx) statelessGetter(i int) *seg.Getter { + if dt.getters == nil { + dt.getters = make([]*seg.Getter, len(dt.files)) } - r := dc.getters[i] + r := dt.getters[i] if r == nil { - r = dc.files[i].src.decompressor.MakeGetter() - dc.getters[i] = r + r = dt.files[i].src.decompressor.MakeGetter() + dt.getters[i] = r } return r } -func (dc *DomainContext) statelessBtree(i int) *BtIndex { - if dc.readers == nil { - dc.readers = make([]*BtIndex, len(dc.files)) +func (dt *DomainRoTx) statelessBtree(i int) *BtIndex { + if dt.readers == nil { + dt.readers = make([]*BtIndex, len(dt.files)) } - r := dc.readers[i] + r := dt.readers[i] if r == nil { - r = dc.files[i].src.bindex - dc.readers[i] = r + r = dt.files[i].src.bindex + dt.readers[i] = r } return r } func (d *Domain) collectFilesStats() (datsz, idxsz, files uint64) { - d.History.files.Walk(func(items []*filesItem) bool { + d.History.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.index == nil { return false @@ -631,7 +522,7 @@ func (d *Domain) collectFilesStats() (datsz, idxsz, files uint64) { return true }) - d.files.Walk(func(items []*filesItem) bool { + d.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.index == nil { return false @@ -651,11 +542,11 @@ func (d *Domain) collectFilesStats() (datsz, idxsz, files uint64) { return } -func (d *Domain) MakeContext() *DomainContext { - dc := &DomainContext{ +func (d *Domain) BeginFilesRo() *DomainRoTx { + dc := &DomainRoTx{ d: d, - hc: d.History.MakeContext(), - files: *d.roFiles.Load(), + ht: d.History.BeginFilesRo(), + files: *d.visibleFiles.Load(), } for _, item := range dc.files { if !item.src.frozen { @@ -668,8 +559,8 @@ func (d *Domain) MakeContext() *DomainContext { // Collation is the set of compressors created after aggregation type Collation struct { - valuesComp *compress.Compressor - historyComp *compress.Compressor + valuesComp *seg.Compressor + historyComp *seg.Compressor indexBitmaps map[string]*roaring64.Bitmap valuesPath string historyPath string @@ -686,170 +577,10 @@ func (c Collation) Close() { } } -type kvpair struct { - k, v []byte -} - -func (d *Domain) writeCollationPair(valuesComp *compress.Compressor, pairs chan kvpair) (count int, err error) { - for kv := range pairs { - if err = valuesComp.AddUncompressedWord(kv.k); err != nil { - return count, fmt.Errorf("add %s values key [%x]: %w", d.filenameBase, kv.k, err) - } - mxCollationSize.Inc() - count++ // Only counting keys, not values - if err = valuesComp.AddUncompressedWord(kv.v); err != nil { - return count, fmt.Errorf("add %s values val [%x]=>[%x]: %w", d.filenameBase, kv.k, kv.v, err) - } - } - return count, nil -} - -// nolint -func (d *Domain) aggregate(ctx context.Context, step uint64, txFrom, txTo uint64, tx kv.Tx, ps *background.ProgressSet) (err error) { - mxRunningCollations.Inc() - start := time.Now() - collation, err := d.collateStream(ctx, step, txFrom, txTo, tx) - mxRunningCollations.Dec() - mxCollateTook.ObserveDuration(start) - - mxCollationSize.SetInt(collation.valuesComp.Count()) - mxCollationSizeHist.SetInt(collation.historyComp.Count()) - - if err != nil { - collation.Close() - //return fmt.Errorf("domain collation %q has failed: %w", d.filenameBase, err) - return err - } - - mxRunningMerges.Inc() - - start = time.Now() - sf, err := d.buildFiles(ctx, step, collation, ps) - collation.Close() - defer sf.Close() - - if err != nil { - sf.Close() - mxRunningMerges.Dec() - return - } - - mxRunningMerges.Dec() - - d.integrateFiles(sf, step*d.aggregationStep, (step+1)*d.aggregationStep) - d.stats.LastFileBuildingTook = time.Since(start) - return nil -} - -// collate gathers domain changes over the specified step, using read-only transaction, -// and returns compressors, elias fano, and bitmaps -// [txFrom; txTo) -func (d *Domain) collateStream(ctx context.Context, step, txFrom, txTo uint64, roTx kv.Tx) (Collation, error) { - started := time.Now() - defer func() { - d.stats.LastCollationTook = time.Since(started) - }() - - hCollation, err := d.History.collate(step, txFrom, txTo, roTx) - if err != nil { - return Collation{}, err - } - - var valuesComp *compress.Compressor - closeComp := true - defer func() { - if closeComp { - if valuesComp != nil { - valuesComp.Close() - } - } - }() - - valuesPath := filepath.Join(d.dir, fmt.Sprintf("%s.%d-%d.kv", d.filenameBase, step, step+1)) - if valuesComp, err = compress.NewCompressor(context.Background(), "collate values", valuesPath, d.tmpdir, compress.MinPatternScore, 1, log.LvlTrace, d.logger); err != nil { - return Collation{}, fmt.Errorf("create %s values compressor: %w", d.filenameBase, err) - } - - keysCursor, err := roTx.CursorDupSort(d.keysTable) - if err != nil { - return Collation{}, fmt.Errorf("create %s keys cursor: %w", d.filenameBase, err) - } - defer keysCursor.Close() - - var ( - k, v []byte - pos uint64 - valCount int - pairs = make(chan kvpair, 1024) - ) - - //totalKeys, err := keysCursor.Count() - //if err != nil { - // return Collation{}, fmt.Errorf("failed to obtain keys count for domain %q", d.filenameBase) - //} - - eg, _ := errgroup.WithContext(ctx) - eg.Go(func() error { - valCount, err = d.writeCollationPair(valuesComp, pairs) - return err - }) - - var ( - stepBytes = make([]byte, 8) - keySuffix = make([]byte, 256+8) - ) - binary.BigEndian.PutUint64(stepBytes, ^step) - - for k, _, err = keysCursor.First(); err == nil && k != nil; k, _, err = keysCursor.NextNoDup() { - pos++ - - if v, err = keysCursor.LastDup(); err != nil { - return Collation{}, fmt.Errorf("find last %s key for aggregation step k=[%x]: %w", d.filenameBase, k, err) - } - if bytes.Equal(v, stepBytes) { - copy(keySuffix, k) - copy(keySuffix[len(k):], v) - ks := len(k) + len(v) - - v, err := roTx.GetOne(d.valsTable, keySuffix[:ks]) - if err != nil { - return Collation{}, fmt.Errorf("find last %s value for aggregation step k=[%x]: %w", d.filenameBase, k, err) - } - - select { - case <-ctx.Done(): - return Collation{}, ctx.Err() - default: - } - - pairs <- kvpair{k: k, v: v} - } - } - close(pairs) - if err != nil { - return Collation{}, fmt.Errorf("iterate over %s keys cursor: %w", d.filenameBase, err) - } - - if err := eg.Wait(); err != nil { - return Collation{}, fmt.Errorf("collate over %s keys cursor: %w", d.filenameBase, err) - } - - closeComp = false - return Collation{ - valuesPath: valuesPath, - valuesComp: valuesComp, - valuesCount: valCount, - historyPath: hCollation.historyPath, - historyComp: hCollation.historyComp, - historyCount: hCollation.historyCount, - indexBitmaps: hCollation.indexBitmaps, - }, nil -} - // collate gathers domain changes over the specified step, using read-only transaction, // and returns compressors, elias fano, and bitmaps // [txFrom; txTo) -func (d *Domain) collate(ctx context.Context, step, txFrom, txTo uint64, roTx kv.Tx, logEvery *time.Ticker) (Collation, error) { +func (d *Domain) collate(ctx context.Context, step, txFrom, txTo uint64, roTx kv.Tx, _ *time.Ticker) (Collation, error) { started := time.Now() defer func() { d.stats.LastCollationTook = time.Since(started) @@ -859,7 +590,7 @@ func (d *Domain) collate(ctx context.Context, step, txFrom, txTo uint64, roTx kv if err != nil { return Collation{}, err } - var valuesComp *compress.Compressor + var valuesComp *seg.Compressor closeComp := true defer func() { if closeComp { @@ -870,7 +601,7 @@ func (d *Domain) collate(ctx context.Context, step, txFrom, txTo uint64, roTx kv } }() valuesPath := filepath.Join(d.dir, fmt.Sprintf("%s.%d-%d.kv", d.filenameBase, step, step+1)) - if valuesComp, err = compress.NewCompressor(context.Background(), "collate values", valuesPath, d.tmpdir, compress.MinPatternScore, 1, log.LvlTrace, d.logger); err != nil { + if valuesComp, err = seg.NewCompressor(context.Background(), "collate values", valuesPath, d.tmpdir, seg.MinPatternScore, 1, log.LvlTrace, d.logger); err != nil { return Collation{}, fmt.Errorf("create %s values compressor: %w", d.filenameBase, err) } keysCursor, err := roTx.CursorDupSort(d.keysTable) @@ -939,12 +670,12 @@ func (d *Domain) collate(ctx context.Context, step, txFrom, txTo uint64, roTx kv } type StaticFiles struct { - valuesDecomp *compress.Decompressor + valuesDecomp *seg.Decompressor valuesIdx *recsplit.Index valuesBt *BtIndex - historyDecomp *compress.Decompressor + historyDecomp *seg.Decompressor historyIdx *recsplit.Index - efHistoryDecomp *compress.Decompressor + efHistoryDecomp *seg.Decompressor efHistoryIdx *recsplit.Index } @@ -985,7 +716,7 @@ func (d *Domain) buildFiles(ctx context.Context, step uint64, collation Collatio return StaticFiles{}, err } valuesComp := collation.valuesComp - var valuesDecomp *compress.Decompressor + var valuesDecomp *seg.Decompressor var valuesIdx *recsplit.Index closeComp := true defer func() { @@ -1010,7 +741,7 @@ func (d *Domain) buildFiles(ctx context.Context, step uint64, collation Collatio } valuesComp.Close() valuesComp = nil - if valuesDecomp, err = compress.NewDecompressor(collation.valuesPath); err != nil { + if valuesDecomp, err = seg.NewDecompressor(collation.valuesPath); err != nil { return StaticFiles{}, fmt.Errorf("open %s values decompressor: %w", d.filenameBase, err) } @@ -1049,7 +780,7 @@ func (d *Domain) buildFiles(ctx context.Context, step uint64, collation Collatio } func (d *Domain) missedIdxFiles() (l []*filesItem) { - d.files.Walk(func(items []*filesItem) bool { // don't run slow logic while iterating on btree + d.dirtyFiles.Walk(func(items []*filesItem) bool { // don't run slow logic while iterating on btree for _, item := range items { fromStep, toStep := item.startTxNum/d.aggregationStep, item.endTxNum/d.aggregationStep if !dir.FileExist(filepath.Join(d.dir, fmt.Sprintf("%s.%d-%d.bt", d.filenameBase, fromStep, toStep))) { @@ -1083,14 +814,14 @@ func (d *Domain) BuildMissedIndices(ctx context.Context, g *errgroup.Group, ps * return nil } -func buildIndexThenOpen(ctx context.Context, d *compress.Decompressor, idxPath, tmpdir string, count int, values bool, p *background.Progress, logger log.Logger, noFsync bool) (*recsplit.Index, error) { +func buildIndexThenOpen(ctx context.Context, d *seg.Decompressor, idxPath, tmpdir string, count int, values bool, p *background.Progress, logger log.Logger, noFsync bool) (*recsplit.Index, error) { if err := buildIndex(ctx, d, idxPath, tmpdir, count, values, p, logger, noFsync); err != nil { return nil, err } return recsplit.OpenIndex(idxPath) } -func buildIndex(ctx context.Context, d *compress.Decompressor, idxPath, tmpdir string, count int, values bool, p *background.Progress, logger log.Logger, noFsync bool) error { +func buildIndex(ctx context.Context, d *seg.Decompressor, idxPath, tmpdir string, count int, values bool, p *background.Progress, logger log.Logger, noFsync bool) error { var rs *recsplit.RecSplit var err error if rs, err = recsplit.NewRecSplit(recsplit.RecSplitArgs{ @@ -1161,7 +892,7 @@ func (d *Domain) integrateFiles(sf StaticFiles, txNumFrom, txNumTo uint64) { fi.decompressor = sf.valuesDecomp fi.index = sf.valuesIdx fi.bindex = sf.valuesBt - d.files.Set(fi) + d.dirtyFiles.Set(fi) d.reCalcRoFiles() } @@ -1357,15 +1088,15 @@ func (d *Domain) warmup(ctx context.Context, txFrom, limit uint64, tx kv.Tx) err var COMPARE_INDEXES = false // if true, will compare values from Btree and INvertedIndex -func (dc *DomainContext) readFromFiles(filekey []byte, fromTxNum uint64) ([]byte, bool, error) { +func (dt *DomainRoTx) readFromFiles(filekey []byte, fromTxNum uint64) ([]byte, bool, error) { var val []byte var found bool - for i := len(dc.files) - 1; i >= 0; i-- { - if dc.files[i].endTxNum < fromTxNum { + for i := len(dt.files) - 1; i >= 0; i-- { + if dt.files[i].endTxNum < fromTxNum { break } - reader := dc.statelessBtree(i) + reader := dt.statelessBtree(i) if reader.Empty() { continue } @@ -1389,10 +1120,10 @@ func (dc *DomainContext) readFromFiles(filekey []byte, fromTxNum uint64) ([]byte // historyBeforeTxNum searches history for a value of specified key before txNum // second return value is true if the value is found in the history (even if it is nil) -func (dc *DomainContext) historyBeforeTxNum(key []byte, txNum uint64, roTx kv.Tx) ([]byte, bool, error) { - dc.d.stats.HistoryQueries.Add(1) +func (dt *DomainRoTx) historyBeforeTxNum(key []byte, txNum uint64, roTx kv.Tx) ([]byte, bool, error) { + dt.d.stats.HistoryQueries.Add(1) - v, found, err := dc.hc.GetNoState(key, txNum) + v, found, err := dt.ht.GetNoState(key, txNum) if err != nil { return nil, false, err } @@ -1402,7 +1133,7 @@ func (dc *DomainContext) historyBeforeTxNum(key []byte, txNum uint64, roTx kv.Tx var anyItem bool var topState ctxItem - for _, item := range dc.hc.ic.files { + for _, item := range dt.ht.iit.files { if item.endTxNum < txNum { continue } @@ -1413,17 +1144,17 @@ func (dc *DomainContext) historyBeforeTxNum(key []byte, txNum uint64, roTx kv.Tx if anyItem { // If there were no changes but there were history files, the value can be obtained from value files var val []byte - for i := len(dc.files) - 1; i >= 0; i-- { - if dc.files[i].startTxNum > topState.startTxNum { + for i := len(dt.files) - 1; i >= 0; i-- { + if dt.files[i].startTxNum > topState.startTxNum { continue } - reader := dc.statelessBtree(i) + reader := dt.statelessBtree(i) if reader.Empty() { continue } cur, err := reader.Seek(key) if err != nil { - dc.d.logger.Warn("failed to read history before from file", "key", key, "err", err) + dt.d.logger.Warn("failed to read history before from file", "key", key, "err", err) return nil, false, err } if cur == nil { @@ -1440,13 +1171,13 @@ func (dc *DomainContext) historyBeforeTxNum(key []byte, txNum uint64, roTx kv.Tx if roTx == nil { return nil, false, fmt.Errorf("roTx is nil") } - return dc.hc.getNoStateFromDB(key, txNum, roTx) + return dt.ht.getNoStateFromDB(key, txNum, roTx) } // GetBeforeTxNum does not always require usage of roTx. If it is possible to determine // historical value based only on static files, roTx will not be used. -func (dc *DomainContext) GetBeforeTxNum(key []byte, txNum uint64, roTx kv.Tx) ([]byte, error) { - v, hOk, err := dc.historyBeforeTxNum(key, txNum, roTx) +func (dt *DomainRoTx) GetBeforeTxNum(key []byte, txNum uint64, roTx kv.Tx) ([]byte, error) { + v, hOk, err := dt.historyBeforeTxNum(key, txNum, roTx) if err != nil { return nil, err } @@ -1458,14 +1189,14 @@ func (dc *DomainContext) GetBeforeTxNum(key []byte, txNum uint64, roTx kv.Tx) ([ } return v, nil } - if v, _, err = dc.get(key, txNum-1, roTx); err != nil { + if v, _, err = dt.get(key, txNum-1, roTx); err != nil { return nil, err } return v, nil } -func (dc *DomainContext) Close() { - for _, item := range dc.files { +func (dt *DomainRoTx) Close() { + for _, item := range dt.files { if item.src.frozen { continue } @@ -1475,21 +1206,21 @@ func (dc *DomainContext) Close() { item.src.closeFilesAndRemove() } } - dc.hc.Close() + dt.ht.Close() } // IteratePrefix iterates over key-value pairs of the domain that start with given prefix // Such iteration is not intended to be used in public API, therefore it uses read-write transaction // inside the domain. Another version of this for public API use needs to be created, that uses // roTx instead and supports ending the iterations before it reaches the end. -func (dc *DomainContext) IteratePrefix(prefix []byte, it func(k, v []byte)) error { - dc.d.stats.HistoryQueries.Add(1) +func (dt *DomainRoTx) IteratePrefix(prefix []byte, it func(k, v []byte)) error { + dt.d.stats.HistoryQueries.Add(1) var cp CursorHeap heap.Init(&cp) var k, v []byte var err error - keysCursor, err := dc.d.tx.CursorDupSort(dc.d.keysTable) + keysCursor, err := dt.d.tx.CursorDupSort(dt.d.keysTable) if err != nil { return err } @@ -1502,15 +1233,15 @@ func (dc *DomainContext) IteratePrefix(prefix []byte, it func(k, v []byte)) erro copy(keySuffix, k) copy(keySuffix[len(k):], v) step := ^binary.BigEndian.Uint64(v) - txNum := step * dc.d.aggregationStep - if v, err = dc.d.tx.GetOne(dc.d.valsTable, keySuffix); err != nil { + txNum := step * dt.d.aggregationStep + if v, err = dt.d.tx.GetOne(dt.d.valsTable, keySuffix); err != nil { return err } heap.Push(&cp, &CursorItem{t: DB_CURSOR, key: common.Copy(k), val: common.Copy(v), c: keysCursor, endTxNum: txNum, reverse: true}) } - for i, item := range dc.files { - bg := dc.statelessBtree(i) + for i, item := range dt.files { + bg := dt.statelessBtree(i) if bg.Empty() { continue } @@ -1520,7 +1251,7 @@ func (dc *DomainContext) IteratePrefix(prefix []byte, it func(k, v []byte)) erro continue } - g := dc.statelessGetter(i) + g := dt.statelessGetter(i) key := cursor.Key() if bytes.HasPrefix(key, prefix) { val := cursor.Value() @@ -1556,7 +1287,7 @@ func (dc *DomainContext) IteratePrefix(prefix []byte, it func(k, v []byte)) erro keySuffix := make([]byte, len(k)+8) copy(keySuffix, k) copy(keySuffix[len(k):], v) - if v, err = dc.d.tx.GetOne(dc.d.valsTable, keySuffix); err != nil { + if v, err = dt.d.tx.GetOne(dt.d.valsTable, keySuffix); err != nil { return err } ci1.val = common.Copy(v) @@ -1572,3 +1303,29 @@ func (dc *DomainContext) IteratePrefix(prefix []byte, it func(k, v []byte)) erro } return nil } + +type DomainStats struct { + MergesCount uint64 + LastCollationTook time.Duration + LastPruneTook time.Duration + LastPruneHistTook time.Duration + LastFileBuildingTook time.Duration + LastCollationSize uint64 + LastPruneSize uint64 + + HistoryQueries *atomic.Uint64 + TotalQueries *atomic.Uint64 + EfSearchTime time.Duration + DataSize uint64 + IndexSize uint64 + FilesCount uint64 +} + +func (ds *DomainStats) Accumulate(other DomainStats) { + ds.HistoryQueries.Add(other.HistoryQueries.Load()) + ds.TotalQueries.Add(other.TotalQueries.Load()) + ds.EfSearchTime += other.EfSearchTime + ds.IndexSize += other.IndexSize + ds.DataSize += other.DataSize + ds.FilesCount += other.FilesCount +} diff --git a/erigon-lib/state/domain_committed.go b/erigon-lib/state/domain_committed.go index 9c046975c7d..8ae5ebcbce6 100644 --- a/erigon-lib/state/domain_committed.go +++ b/erigon-lib/state/domain_committed.go @@ -18,24 +18,18 @@ package state import ( "bytes" - "container/heap" - "context" "encoding/binary" "fmt" "hash" - "path/filepath" - "strings" "time" "github.com/google/btree" - "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/log/v3" "golang.org/x/crypto/sha3" "github.com/ledgerwatch/erigon-lib/commitment" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/compress" ) // Defines how to evaluate commitments @@ -78,7 +72,6 @@ type ValueMerger func(prev, current []byte) (merged []byte, err error) type DomainCommitted struct { *Domain mode CommitmentMode - trace bool commTree *btree.BTreeG[*CommitmentItem] keccak hash.Hash patriciaTrie commitment.Trie @@ -221,335 +214,6 @@ func (d *DomainCommitted) hashAndNibblizeKey(key []byte) []byte { return nibblized } -func (d *DomainCommitted) storeCommitmentState(blockNum, txNum uint64) error { - var state []byte - var err error - - switch trie := (d.patriciaTrie).(type) { - case *commitment.HexPatriciaHashed: - state, err = trie.EncodeCurrentState(nil) - if err != nil { - return err - } - default: - return fmt.Errorf("unsupported state storing for patricia trie type: %T", d.patriciaTrie) - } - cs := &commitmentState{txNum: txNum, trieState: state, blockNum: blockNum} - encoded, err := cs.Encode() - if err != nil { - return err - } - - var stepbuf [2]byte - step := uint16(txNum / d.aggregationStep) - binary.BigEndian.PutUint16(stepbuf[:], step) - if err = d.Domain.Put(keyCommitmentState, stepbuf[:], encoded); err != nil { - return err - } - return nil -} - -// nolint -func (d *DomainCommitted) replaceKeyWithReference(fullKey, shortKey []byte, typeAS string, list ...*filesItem) bool { - numBuf := [2]byte{} - var found bool - for _, item := range list { - //g := item.decompressor.MakeGetter() - //index := recsplit.NewIndexReader(item.index) - - cur, err := item.bindex.Seek(fullKey) - if err != nil { - continue - } - step := uint16(item.endTxNum / d.aggregationStep) - binary.BigEndian.PutUint16(numBuf[:], step) - - shortKey = encodeU64(cur.Ordinal(), numBuf[:]) - - if d.trace { - fmt.Printf("replacing %s [%x] => {%x} [step=%d, offset=%d, file=%s.%d-%d]\n", typeAS, fullKey, shortKey, step, cur.Ordinal(), typeAS, item.startTxNum, item.endTxNum) - } - found = true - break - } - //if !found { - // log.Warn("bt index key replacement seek failed", "key", fmt.Sprintf("%x", fullKey)) - //} - return found -} - -// nolint -func (d *DomainCommitted) lookupShortenedKey(shortKey, fullKey []byte, typAS string, list []*filesItem) bool { - fileStep, offset := shortenedKey(shortKey) - expected := uint64(fileStep) * d.aggregationStep - - var found bool - for _, item := range list { - if item.startTxNum > expected || item.endTxNum < expected { - continue - } - - cur := item.bindex.OrdinalLookup(offset) - //nolint - fullKey = cur.Key() - if d.trace { - fmt.Printf("offsetToKey %s [%x]=>{%x} step=%d offset=%d, file=%s.%d-%d.kv\n", typAS, fullKey, shortKey, fileStep, offset, typAS, item.startTxNum, item.endTxNum) - } - found = true - break - } - return found -} - -// commitmentValTransform parses the value of the commitment record to extract references -// to accounts and storage items, then looks them up in the new, merged files, and replaces them with -// the updated references -func (d *DomainCommitted) commitmentValTransform(files *SelectedStaticFiles, merged *MergedFiles, val commitment.BranchData) ([]byte, error) { - if len(val) == 0 { - return nil, nil - } - accountPlainKeys, storagePlainKeys, err := val.ExtractPlainKeys() - if err != nil { - return nil, err - } - - transAccountPks := make([][]byte, 0, len(accountPlainKeys)) - var apkBuf, spkBuf []byte - for _, accountPlainKey := range accountPlainKeys { - if len(accountPlainKey) == length.Addr { - // Non-optimised key originating from a database record - apkBuf = append(apkBuf[:0], accountPlainKey...) - } else { - f := d.lookupShortenedKey(accountPlainKey, apkBuf, "account", files.accounts) - if !f { - fmt.Printf("lost key %x\n", accountPlainKeys) - } - } - d.replaceKeyWithReference(apkBuf, accountPlainKey, "account", merged.accounts) - transAccountPks = append(transAccountPks, accountPlainKey) - } - - transStoragePks := make([][]byte, 0, len(storagePlainKeys)) - for _, storagePlainKey := range storagePlainKeys { - if len(storagePlainKey) == length.Addr+length.Hash { - // Non-optimised key originating from a database record - spkBuf = append(spkBuf[:0], storagePlainKey...) - } else { - // Optimised key referencing a state file record (file number and offset within the file) - f := d.lookupShortenedKey(storagePlainKey, spkBuf, "storage", files.storage) - if !f { - fmt.Printf("lost skey %x\n", storagePlainKey) - } - } - - d.replaceKeyWithReference(spkBuf, storagePlainKey, "storage", merged.storage) - transStoragePks = append(transStoragePks, storagePlainKey) - } - - transValBuf, err := val.ReplacePlainKeys(transAccountPks, transStoragePks, nil) - if err != nil { - return nil, err - } - return transValBuf, nil -} - -func (d *DomainCommitted) mergeFiles(ctx context.Context, oldFiles SelectedStaticFiles, mergedFiles MergedFiles, r DomainRanges, workers int, ps *background.ProgressSet) (valuesIn, indexIn, historyIn *filesItem, err error) { - if !r.any() { - return - } - - domainFiles := oldFiles.commitment - indexFiles := oldFiles.commitmentIdx - historyFiles := oldFiles.commitmentHist - - var comp *compress.Compressor - var closeItem bool = true - defer func() { - if closeItem { - if comp != nil { - comp.Close() - } - if indexIn != nil { - if indexIn.decompressor != nil { - indexIn.decompressor.Close() - } - if indexIn.index != nil { - indexIn.index.Close() - } - if indexIn.bindex != nil { - indexIn.bindex.Close() - } - } - if historyIn != nil { - if historyIn.decompressor != nil { - historyIn.decompressor.Close() - } - if historyIn.index != nil { - historyIn.index.Close() - } - if historyIn.bindex != nil { - historyIn.bindex.Close() - } - } - if valuesIn != nil { - if valuesIn.decompressor != nil { - valuesIn.decompressor.Close() - } - if valuesIn.index != nil { - valuesIn.index.Close() - } - if valuesIn.bindex != nil { - valuesIn.bindex.Close() - } - } - } - }() - if indexIn, historyIn, err = d.History.mergeFiles(ctx, indexFiles, historyFiles, - HistoryRanges{ - historyStartTxNum: r.historyStartTxNum, - historyEndTxNum: r.historyEndTxNum, - history: r.history, - indexStartTxNum: r.indexStartTxNum, - indexEndTxNum: r.indexEndTxNum, - index: r.index}, workers, ps); err != nil { - return nil, nil, nil, err - } - - if r.values { - datFileName := fmt.Sprintf("%s.%d-%d.kv", d.filenameBase, r.valuesStartTxNum/d.aggregationStep, r.valuesEndTxNum/d.aggregationStep) - datPath := filepath.Join(d.dir, datFileName) - p := ps.AddNew(datFileName, 1) - defer ps.Delete(p) - - if comp, err = compress.NewCompressor(ctx, "merge", datPath, d.dir, compress.MinPatternScore, workers, log.LvlTrace, d.logger); err != nil { - return nil, nil, nil, fmt.Errorf("merge %s compressor: %w", d.filenameBase, err) - } - var cp CursorHeap - heap.Init(&cp) - for _, item := range domainFiles { - g := item.decompressor.MakeGetter() - g.Reset(0) - if g.HasNext() { - key, _ := g.NextUncompressed() - var val []byte - if d.compressVals { - val, _ = g.Next(nil) - } else { - val, _ = g.NextUncompressed() - } - if d.trace { - fmt.Printf("merge: read value '%x'\n", key) - } - heap.Push(&cp, &CursorItem{ - t: FILE_CURSOR, - dg: g, - key: key, - val: val, - endTxNum: item.endTxNum, - reverse: true, - }) - } - } - keyCount := 0 - // In the loop below, the pair `keyBuf=>valBuf` is always 1 item behind `lastKey=>lastVal`. - // `lastKey` and `lastVal` are taken from the top of the multi-way merge (assisted by the CursorHeap cp), but not processed right away - // instead, the pair from the previous iteration is processed first - `keyBuf=>valBuf`. After that, `keyBuf` and `valBuf` are assigned - // to `lastKey` and `lastVal` correspondingly, and the next step of multi-way merge happens. Therefore, after the multi-way merge loop - // (when CursorHeap cp is empty), there is a need to process the last pair `keyBuf=>valBuf`, because it was one step behind - var keyBuf, valBuf []byte - for cp.Len() > 0 { - lastKey := common.Copy(cp[0].key) - lastVal := common.Copy(cp[0].val) - // Advance all the items that have this key (including the top) - for cp.Len() > 0 && bytes.Equal(cp[0].key, lastKey) { - ci1 := cp[0] - if ci1.dg.HasNext() { - ci1.key, _ = ci1.dg.NextUncompressed() - if d.compressVals { - ci1.val, _ = ci1.dg.Next(ci1.val[:0]) - } else { - ci1.val, _ = ci1.dg.NextUncompressed() - } - heap.Fix(&cp, 0) - } else { - heap.Pop(&cp) - } - } - // For the rest of types, empty value means deletion - skip := r.valuesStartTxNum == 0 && len(lastVal) == 0 - if !skip { - if keyBuf != nil { - if err = comp.AddUncompressedWord(keyBuf); err != nil { - return nil, nil, nil, err - } - keyCount++ // Only counting keys, not values - switch d.compressVals { - case true: - if err = comp.AddWord(valBuf); err != nil { - return nil, nil, nil, err - } - default: - if err = comp.AddUncompressedWord(valBuf); err != nil { - return nil, nil, nil, err - } - } - } - keyBuf = append(keyBuf[:0], lastKey...) - valBuf = append(valBuf[:0], lastVal...) - } - } - if keyBuf != nil { - if err = comp.AddUncompressedWord(keyBuf); err != nil { - return nil, nil, nil, err - } - keyCount++ // Only counting keys, not values - //fmt.Printf("last heap key %x\n", keyBuf) - valBuf, err = d.commitmentValTransform(&oldFiles, &mergedFiles, valBuf) - if err != nil { - return nil, nil, nil, fmt.Errorf("merge: 2valTransform [%x] %w", valBuf, err) - } - if d.compressVals { - if err = comp.AddWord(valBuf); err != nil { - return nil, nil, nil, err - } - } else { - if err = comp.AddUncompressedWord(valBuf); err != nil { - return nil, nil, nil, err - } - } - } - if err = comp.Compress(); err != nil { - return nil, nil, nil, err - } - comp.Close() - comp = nil - valuesIn = newFilesItem(r.valuesStartTxNum, r.valuesEndTxNum, d.aggregationStep) - if valuesIn.decompressor, err = compress.NewDecompressor(datPath); err != nil { - return nil, nil, nil, fmt.Errorf("merge %s decompressor [%d-%d]: %w", d.filenameBase, r.valuesStartTxNum, r.valuesEndTxNum, err) - } - ps.Delete(p) - - idxFileName := fmt.Sprintf("%s.%d-%d.kvi", d.filenameBase, r.valuesStartTxNum/d.aggregationStep, r.valuesEndTxNum/d.aggregationStep) - idxPath := filepath.Join(d.dir, idxFileName) - - p = ps.AddNew(datFileName, uint64(keyCount)) - defer ps.Delete(p) - if valuesIn.index, err = buildIndexThenOpen(ctx, valuesIn.decompressor, idxPath, d.dir, keyCount, false /* values */, p, d.logger, d.noFsync); err != nil { - return nil, nil, nil, fmt.Errorf("merge %s buildIndex [%d-%d]: %w", d.filenameBase, r.valuesStartTxNum, r.valuesEndTxNum, err) - } - - btPath := strings.TrimSuffix(idxPath, "kvi") + "bt" - valuesIn.bindex, err = CreateBtreeIndexWithDecompressor(btPath, 2048, valuesIn.decompressor, p, d.tmpdir, d.logger) - if err != nil { - return nil, nil, nil, fmt.Errorf("create btindex %s [%d-%d]: %w", d.filenameBase, r.valuesStartTxNum, r.valuesEndTxNum, err) - } - } - closeItem = false - d.stats.MergesCount++ - d.mergesCount++ - return -} - // Evaluates commitment for processed state. Commit=true - store trie state after evaluation func (d *DomainCommitted) ComputeCommitment(trace bool) (rootHash []byte, branchNodeUpdates map[string]commitment.BranchData, err error) { defer func(s time.Time) { d.comTook = time.Since(s) }(time.Now()) @@ -603,7 +267,7 @@ func (d *DomainCommitted) SeekCommitment(aggStep, sinceTx uint64) (blockNum, txN ) d.SetTxNum(latestTxNum) - ctx := d.MakeContext() + ctx := d.BeginFilesRo() defer ctx.Close() for { @@ -680,39 +344,3 @@ func (cs *commitmentState) Encode() ([]byte, error) { } return buf.Bytes(), nil } - -func decodeU64(from []byte) uint64 { - var i uint64 - for _, b := range from { - i = (i << 8) | uint64(b) - } - return i -} - -func encodeU64(i uint64, to []byte) []byte { - // writes i to b in big endian byte order, using the least number of bytes needed to represent i. - switch { - case i < (1 << 8): - return append(to, byte(i)) - case i < (1 << 16): - return append(to, byte(i>>8), byte(i)) - case i < (1 << 24): - return append(to, byte(i>>16), byte(i>>8), byte(i)) - case i < (1 << 32): - return append(to, byte(i>>24), byte(i>>16), byte(i>>8), byte(i)) - case i < (1 << 40): - return append(to, byte(i>>32), byte(i>>24), byte(i>>16), byte(i>>8), byte(i)) - case i < (1 << 48): - return append(to, byte(i>>40), byte(i>>32), byte(i>>24), byte(i>>16), byte(i>>8), byte(i)) - case i < (1 << 56): - return append(to, byte(i>>48), byte(i>>40), byte(i>>32), byte(i>>24), byte(i>>16), byte(i>>8), byte(i)) - default: - return append(to, byte(i>>56), byte(i>>48), byte(i>>40), byte(i>>32), byte(i>>24), byte(i>>16), byte(i>>8), byte(i)) - } -} - -// Optimised key referencing a state file record (file number and offset within the file) -func shortenedKey(apk []byte) (step uint16, offset uint64) { - step = binary.BigEndian.Uint16(apk[:2]) - return step, decodeU64(apk[1:]) -} diff --git a/erigon-lib/state/domain_test.go b/erigon-lib/state/domain_test.go index 4dd41f8b6f6..d141b19445a 100644 --- a/erigon-lib/state/domain_test.go +++ b/erigon-lib/state/domain_test.go @@ -63,6 +63,30 @@ func testDbAndDomain(t *testing.T, logger log.Logger) (string, kv.RwDB, *Domain) return path, db, d } +func TestDomain_OpenFolder(t *testing.T) { + fp, db, d, txs := filledDomain(t, log.New()) + defer db.Close() + defer d.Close() + defer os.RemoveAll(fp) + + collateAndMerge(t, db, nil, d, txs) + + list := d.visibleFiles.Load() + require.NotEmpty(t, list) + ff := (*list)[len(*list)-1] + fn := ff.src.decompressor.FilePath() + d.Close() + + err := os.Remove(fn) + require.NoError(t, err) + err = os.WriteFile(fn, make([]byte, 33), 0644) + require.NoError(t, err) + + err = d.OpenFolder() + require.NoError(t, err) + d.Close() +} + // btree index should work correctly if K < m func TestCollationBuild(t *testing.T) { logger := log.New() @@ -124,7 +148,7 @@ func TestCollationBuild(t *testing.T) { r := recsplit.NewIndexReader(sf.valuesIdx) defer r.Close() for i := 0; i < len(words); i += 2 { - offset := r.Lookup([]byte(words[i])) + offset, _ := r.Lookup([]byte(words[i])) g.Reset(offset) w, _ := g.Next(nil) require.Equal(t, words[i], string(w)) @@ -161,7 +185,7 @@ func TestIterationBasic(t *testing.T) { require.NoError(t, err) var keys, vals []string - dc := d.MakeContext() + dc := d.BeginFilesRo() defer dc.Close() err = dc.IteratePrefix([]byte("addr2"), func(k, v []byte) { keys = append(keys, string(k)) @@ -217,7 +241,7 @@ func TestAfterPrune(t *testing.T) { d.integrateFiles(sf, 0, 16) var v []byte - dc := d.MakeContext() + dc := d.BeginFilesRo() defer dc.Close() v, err = dc.Get([]byte("key1"), nil, tx) require.NoError(t, err) @@ -286,7 +310,7 @@ func checkHistory(t *testing.T, db kv.RwDB, d *Domain, txs uint64) { var err error // Check the history var roTx kv.Tx - dc := d.MakeContext() + dc := d.BeginFilesRo() defer dc.Close() for txNum := uint64(0); txNum <= txs; txNum++ { if txNum == 976 { @@ -408,7 +432,7 @@ func TestIterationMultistep(t *testing.T) { var keys []string var vals []string - dc := d.MakeContext() + dc := d.BeginFilesRo() defer dc.Close() err = dc.IteratePrefix([]byte("addr2"), func(k, v []byte) { keys = append(keys, string(k)) @@ -449,7 +473,7 @@ func collateAndMerge(t *testing.T, db kv.RwDB, tx kv.RwTx, d *Domain, txs uint64 for { if stop := func() bool { - dc := d.MakeContext() + dc := d.BeginFilesRo() defer dc.Close() r = d.findMergeRange(maxEndTxNum, maxSpan) if !r.any() { @@ -491,7 +515,7 @@ func collateAndMergeOnce(t *testing.T, d *Domain, step uint64) { maxEndTxNum := d.endTxNumMinimax() maxSpan := d.aggregationStep * StepsInBiggestFile for r = d.findMergeRange(maxEndTxNum, maxSpan); r.any(); r = d.findMergeRange(maxEndTxNum, maxSpan) { - dc := d.MakeContext() + dc := d.BeginFilesRo() valuesOuts, indexOuts, historyOuts, _ := dc.staticFilesInRange(r) valuesIn, indexIn, historyIn, err := d.mergeFiles(ctx, valuesOuts, indexOuts, historyOuts, r, 1, background.NewProgressSet()) require.NoError(t, err) @@ -549,7 +573,7 @@ func TestDomain_Delete(t *testing.T) { require.NoError(err) collateAndMerge(t, db, tx, d, 1000) // Check the history - dc := d.MakeContext() + dc := d.BeginFilesRo() defer dc.Close() for txNum := uint64(0); txNum < 1000; txNum++ { label := fmt.Sprintf("txNum=%d", txNum) @@ -630,7 +654,7 @@ func TestDomain_Prune_AfterAllWrites(t *testing.T) { defer roTx.Rollback() // Check the history - dc := dom.MakeContext() + dc := dom.BeginFilesRo() defer dc.Close() for txNum := uint64(1); txNum <= txCount; txNum++ { for keyNum := uint64(1); keyNum <= keyCount; keyNum++ { @@ -723,7 +747,7 @@ func TestDomain_PruneOnWrite(t *testing.T) { require.NoError(t, err) // Check the history - dc := d.MakeContext() + dc := d.BeginFilesRo() defer dc.Close() for txNum := uint64(1); txNum <= txCount; txNum++ { for keyNum := uint64(1); keyNum <= keysCount; keyNum++ { @@ -768,8 +792,8 @@ func TestDomain_PruneOnWrite(t *testing.T) { func TestScanStaticFilesD(t *testing.T) { logger := log.New() ii := &Domain{History: &History{InvertedIndex: &InvertedIndex{filenameBase: "test", aggregationStep: 1, logger: logger}, logger: logger}, - files: btree2.NewBTreeG[*filesItem](filesItemLess), - logger: logger, + dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess), + logger: logger, } files := []string{ "test.0-1.kv", @@ -781,7 +805,7 @@ func TestScanStaticFilesD(t *testing.T) { } ii.scanStateFiles(files) var found []string - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { found = append(found, fmt.Sprintf("%d-%d", item.startTxNum, item.endTxNum)) } diff --git a/erigon-lib/state/files_item.go b/erigon-lib/state/files_item.go new file mode 100644 index 00000000000..77f899ea273 --- /dev/null +++ b/erigon-lib/state/files_item.go @@ -0,0 +1,98 @@ +package state + +import ( + "os" + "sync/atomic" + + "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" + "github.com/ledgerwatch/log/v3" +) + +// filesItem is "dirty" file - means file which can be: +// - uncomplete +// - not_indexed +// - overlaped_by_bigger_file +// - marked_as_ready_for_delete +// - can also be "good" file +// +// such files must be hiddend from user (reader), but may be useful for background merging process, etc... +// list of filesItem must be represented as Tree - because they may overlap + +// ctxItem - class is used for good/visible files +type filesItem struct { + decompressor *seg.Decompressor + index *recsplit.Index + bindex *BtIndex + startTxNum uint64 + endTxNum uint64 + + // Frozen: file of size StepsInBiggestFile. Completely immutable. + // Cold: file of size < StepsInBiggestFile. Immutable, but can be closed/removed after merge to bigger file. + // Hot: Stored in DB. Providing Snapshot-Isolation by CopyOnWrite. + frozen bool // immutable, don't need atomic + refcount atomic.Int32 // only for `frozen=false` + + // file can be deleted in 2 cases: 1. when `refcount == 0 && canDelete == true` 2. on app startup when `file.isSubsetOfFrozenFile()` + // other processes (which also reading files, may have same logic) + canDelete atomic.Bool +} + +func newFilesItem(startTxNum, endTxNum uint64, stepSize uint64) *filesItem { + startStep := startTxNum / stepSize + endStep := endTxNum / stepSize + frozen := endStep-startStep == StepsInBiggestFile + return &filesItem{startTxNum: startTxNum, endTxNum: endTxNum, frozen: frozen} +} + +func (i *filesItem) isSubsetOf(j *filesItem) bool { + return (j.startTxNum <= i.startTxNum && i.endTxNum <= j.endTxNum) && (j.startTxNum != i.startTxNum || i.endTxNum != j.endTxNum) +} + +func filesItemLess(i, j *filesItem) bool { + if i.endTxNum == j.endTxNum { + return i.startTxNum > j.startTxNum + } + return i.endTxNum < j.endTxNum +} +func (i *filesItem) closeFilesAndRemove() { + if i.decompressor != nil { + i.decompressor.Close() + // paranoic-mode on: don't delete frozen files + if !i.frozen { + if err := os.Remove(i.decompressor.FilePath()); err != nil { + log.Trace("close", "err", err, "file", i.decompressor.FileName()) + } + } + i.decompressor = nil + } + if i.index != nil { + i.index.Close() + // paranoic-mode on: don't delete frozen files + if !i.frozen { + if err := os.Remove(i.index.FilePath()); err != nil { + log.Trace("close", "err", err, "file", i.index.FileName()) + } + } + i.index = nil + } + if i.bindex != nil { + i.bindex.Close() + if err := os.Remove(i.bindex.FilePath()); err != nil { + log.Trace("close", "err", err, "file", i.bindex.FileName()) + } + i.bindex = nil + } +} + +// ctxItem is like filesItem but only for good/visible files (indexed, not overlaped, not marked for deletion, etc...) +// it's ok to store ctxItem in array +type ctxItem struct { + getter *seg.Getter + reader *recsplit.IndexReader + startTxNum uint64 + endTxNum uint64 + + i int + src *filesItem +} diff --git a/erigon-lib/state/gc_test.go b/erigon-lib/state/gc_test.go index a159b766da1..381b635e3ff 100644 --- a/erigon-lib/state/gc_test.go +++ b/erigon-lib/state/gc_test.go @@ -32,9 +32,9 @@ func TestGCReadAfterRemoveFile(t *testing.T) { // - close view // - open new view // - make sure there is no canDelete file - hc := h.MakeContext() + hc := h.BeginFilesRo() _ = hc - lastOnFs, _ := h.files.Max() + lastOnFs, _ := h.dirtyFiles.Max() require.False(lastOnFs.frozen) // prepared dataset must have some non-frozen files. or it's bad dataset. h.integrateMergedFiles(nil, []*filesItem{lastOnFs}, nil, nil) require.NotNil(lastOnFs.decompressor) @@ -51,18 +51,15 @@ func TestGCReadAfterRemoveFile(t *testing.T) { } require.NotNil(lastOnFs.decompressor) - loc := hc.ic.loc // replace of locality index must not affect current HistoryContext, but expect to be closed after last reader - h.localityIndex.integrateFiles(LocalityIndexFiles{}, 0, 0) - require.NotNil(loc.file) + //replace of locality index must not affect current HistoryRoTx, but expect to be closed after last reader hc.Close() require.Nil(lastOnFs.decompressor) - require.NotNil(loc.file) - nonDeletedOnFs, _ := h.files.Max() + nonDeletedOnFs, _ := h.dirtyFiles.Max() require.False(nonDeletedOnFs.frozen) require.NotNil(nonDeletedOnFs.decompressor) // non-canDelete files are not closed - hc = h.MakeContext() + hc = h.BeginFilesRo() newLastInView := hc.files[len(hc.files)-1] require.False(lastOnFs.frozen) require.False(lastInView.startTxNum == newLastInView.startTxNum && lastInView.endTxNum == newLastInView.endTxNum) @@ -77,8 +74,8 @@ func TestGCReadAfterRemoveFile(t *testing.T) { // - del cold file // - new reader must not see canDelete file - hc := h.MakeContext() - lastOnFs, _ := h.files.Max() + hc := h.BeginFilesRo() + lastOnFs, _ := h.dirtyFiles.Max() require.False(lastOnFs.frozen) // prepared dataset must have some non-frozen files. or it's bad dataset. h.integrateMergedFiles(nil, []*filesItem{lastOnFs}, nil, nil) @@ -118,9 +115,9 @@ func TestDomainGCReadAfterRemoveFile(t *testing.T) { // - close view // - open new view // - make sure there is no canDelete file - hc := h.MakeContext() + hc := h.BeginFilesRo() _ = hc - lastOnFs, _ := h.files.Max() + lastOnFs, _ := h.dirtyFiles.Max() require.False(lastOnFs.frozen) // prepared dataset must have some non-frozen files. or it's bad dataset. h.integrateMergedFiles([]*filesItem{lastOnFs}, nil, nil, nil, nil, nil) require.NotNil(lastOnFs.decompressor) @@ -140,11 +137,11 @@ func TestDomainGCReadAfterRemoveFile(t *testing.T) { hc.Close() require.Nil(lastOnFs.decompressor) - nonDeletedOnFs, _ := h.files.Max() + nonDeletedOnFs, _ := h.dirtyFiles.Max() require.False(nonDeletedOnFs.frozen) require.NotNil(nonDeletedOnFs.decompressor) // non-canDelete files are not closed - hc = h.MakeContext() + hc = h.BeginFilesRo() newLastInView := hc.files[len(hc.files)-1] require.False(lastOnFs.frozen) require.False(lastInView.startTxNum == newLastInView.startTxNum && lastInView.endTxNum == newLastInView.endTxNum) @@ -159,8 +156,8 @@ func TestDomainGCReadAfterRemoveFile(t *testing.T) { // - del cold file // - new reader must not see canDelete file - hc := h.MakeContext() - lastOnFs, _ := h.files.Max() + hc := h.BeginFilesRo() + lastOnFs, _ := h.dirtyFiles.Max() require.False(lastOnFs.frozen) // prepared dataset must have some non-frozen files. or it's bad dataset. h.integrateMergedFiles([]*filesItem{lastOnFs}, nil, nil, nil, nil, nil) diff --git a/erigon-lib/state/history.go b/erigon-lib/state/history.go index ba6206d5637..78378cfdabd 100644 --- a/erigon-lib/state/history.go +++ b/erigon-lib/state/history.go @@ -21,10 +21,12 @@ import ( "container/heap" "context" "encoding/binary" + "errors" "fmt" "math" "path/filepath" "regexp" + "slices" "strconv" "sync/atomic" "time" @@ -32,14 +34,12 @@ import ( "github.com/RoaringBitmap/roaring/roaring64" "github.com/ledgerwatch/log/v3" btree2 "github.com/tidwall/btree" - "golang.org/x/exp/slices" "golang.org/x/sync/errgroup" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/erigon-lib/common/cmp" "github.com/ledgerwatch/erigon-lib/common/dir" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/etl" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" @@ -47,6 +47,7 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/order" "github.com/ledgerwatch/erigon-lib/recsplit" "github.com/ledgerwatch/erigon-lib/recsplit/eliasfano32" + "github.com/ledgerwatch/erigon-lib/seg" ) type History struct { @@ -55,11 +56,11 @@ type History struct { // Files: // .v - list of values // .vi - txNum+key -> offset in .v - files *btree2.BTreeG[*filesItem] // thread-safe, but maybe need 1 RWLock for all trees in AggregatorV3 + dirtyFiles *btree2.BTreeG[*filesItem] // thread-safe, but maybe need 1 RWLock for all trees in Aggregator // roFiles derivative from field `file`, but without garbage (canDelete=true, overlaps, etc...) - // MakeContext() using this field in zero-copy way - roFiles atomic.Pointer[[]ctxItem] + // BeginFilesRo() using this field in zero-copy way + visibleFiles atomic.Pointer[[]ctxItem] historyValsTable string // key1+key2+txnNum -> oldValue , stores values BEFORE change compressWorkers int @@ -84,7 +85,7 @@ func NewHistory(dir, tmpdir string, aggregationStep uint64, filenameBase, indexKeysTable, indexTable, historyValsTable string, compressVals bool, integrityFileExtensions []string, largeValues bool, logger log.Logger) (*History, error) { h := History{ - files: btree2.NewBTreeGOptions[*filesItem](filesItemLess, btree2.Options{Degree: 128, NoLocks: false}), + dirtyFiles: btree2.NewBTreeGOptions[*filesItem](filesItemLess, btree2.Options{Degree: 128, NoLocks: false}), historyValsTable: historyValsTable, compressVals: compressVals, compressWorkers: 1, @@ -92,7 +93,7 @@ func NewHistory(dir, tmpdir string, aggregationStep uint64, largeValues: largeValues, logger: logger, } - h.roFiles.Store(&[]ctxItem{}) + h.visibleFiles.Store(&[]ctxItem{}) var err error h.InvertedIndex, err = NewInvertedIndex(dir, tmpdir, aggregationStep, filenameBase, indexKeysTable, indexTable, true, append(slices.Clone(h.integrityFileExtensions), "v"), logger) if err != nil { @@ -117,7 +118,7 @@ func (h *History) openList(fNames []string) error { h.closeWhatNotInList(fNames) h.garbageFiles = h.scanStateFiles(fNames) if err := h.openFiles(); err != nil { - return fmt.Errorf("History.OpenList: %s, %w", h.filenameBase, err) + return fmt.Errorf("History.OpenList: %w, %s", err, h.filenameBase) } return nil } @@ -170,13 +171,13 @@ Loop: } } - if _, has := h.files.Get(newFile); has { + if _, has := h.dirtyFiles.Get(newFile); has { continue } addNewFile := true var subSets []*filesItem - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.isSubsetOf(newFile) { subSets = append(subSets, item) @@ -194,7 +195,7 @@ Loop: return true }) if addNewFile { - h.files.Set(newFile) + h.dirtyFiles.Set(newFile) } } return garbageFiles @@ -204,7 +205,7 @@ func (h *History) openFiles() error { var totalKeys uint64 var err error invalidFileItems := make([]*filesItem, 0) - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.decompressor != nil { continue @@ -215,8 +216,12 @@ func (h *History) openFiles() error { invalidFileItems = append(invalidFileItems, item) continue } - if item.decompressor, err = compress.NewDecompressor(datPath); err != nil { - h.logger.Debug("Hisrory.openFiles: %w, %s", err, datPath) + if item.decompressor, err = seg.NewDecompressor(datPath); err != nil { + h.logger.Debug("History.openFiles:", "err", err, "file", datPath) + if errors.Is(err, &seg.ErrCompressedFileCorrupted{}) { + err = nil + continue + } return false } @@ -226,7 +231,7 @@ func (h *History) openFiles() error { idxPath := filepath.Join(h.dir, fmt.Sprintf("%s.%d-%d.vi", h.filenameBase, fromStep, toStep)) if dir.FileExist(idxPath) { if item.index, err = recsplit.OpenIndex(idxPath); err != nil { - h.logger.Debug(fmt.Errorf("Hisrory.openFiles: %w, %s", err, idxPath).Error()) + h.logger.Debug("History.openFiles:", "err", err, "file", idxPath) return false } totalKeys += item.index.KeyCount() @@ -238,7 +243,7 @@ func (h *History) openFiles() error { return err } for _, item := range invalidFileItems { - h.files.Delete(item) + h.dirtyFiles.Delete(item) } h.reCalcRoFiles() @@ -247,7 +252,7 @@ func (h *History) openFiles() error { func (h *History) closeWhatNotInList(fNames []string) { var toDelete []*filesItem - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { Loop1: for _, item := range items { for _, protectName := range fNames { @@ -268,7 +273,7 @@ func (h *History) closeWhatNotInList(fNames []string) { item.index.Close() item.index = nil } - h.files.Delete(item) + h.dirtyFiles.Delete(item) } } @@ -279,7 +284,7 @@ func (h *History) Close() { } func (h *History) Files() (res []string) { - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.decompressor != nil { res = append(res, item.decompressor.FileName()) @@ -292,7 +297,7 @@ func (h *History) Files() (res []string) { } func (h *History) missedIdxFiles() (l []*filesItem) { - h.files.Walk(func(items []*filesItem) bool { // don't run slow logic while iterating on btree + h.dirtyFiles.Walk(func(items []*filesItem) bool { // don't run slow logic while iterating on btree for _, item := range items { fromStep, toStep := item.startTxNum/h.aggregationStep, item.endTxNum/h.aggregationStep if !dir.FileExist(filepath.Join(h.dir, fmt.Sprintf("%s.%d-%d.vi", h.filenameBase, fromStep, toStep))) { @@ -305,13 +310,13 @@ func (h *History) missedIdxFiles() (l []*filesItem) { } // BuildMissedIndices - produce .efi/.vi/.kvi from .ef/.v/.kv -func (hc *HistoryContext) BuildOptionalMissedIndices(ctx context.Context) (err error) { - return hc.h.localityIndex.BuildMissedIndices(ctx, hc.ic) +func (ht *HistoryRoTx) BuildOptionalMissedIndices(ctx context.Context) (err error) { + return nil } func (h *History) buildVi(ctx context.Context, item *filesItem, p *background.Progress) (err error) { search := &filesItem{startTxNum: item.startTxNum, endTxNum: item.endTxNum} - iiItem, ok := h.InvertedIndex.files.Get(search) + iiItem, ok := h.InvertedIndex.dirtyFiles.Get(search) if !ok { return nil } @@ -636,7 +641,7 @@ func (h *historyWAL) addPrevValue(key1, key2, original []byte) error { } type HistoryCollation struct { - historyComp *compress.Compressor + historyComp *seg.Compressor indexBitmaps map[string]*roaring64.Bitmap historyPath string historyCount int @@ -652,7 +657,7 @@ func (c HistoryCollation) Close() { } func (h *History) collate(step, txFrom, txTo uint64, roTx kv.Tx) (HistoryCollation, error) { - var historyComp *compress.Compressor + var historyComp *seg.Compressor var err error closeComp := true defer func() { @@ -663,7 +668,7 @@ func (h *History) collate(step, txFrom, txTo uint64, roTx kv.Tx) (HistoryCollati } }() historyPath := filepath.Join(h.dir, fmt.Sprintf("%s.%d-%d.v", h.filenameBase, step, step+1)) - if historyComp, err = compress.NewCompressor(context.Background(), "collate history", historyPath, h.tmpdir, compress.MinPatternScore, h.compressWorkers, log.LvlTrace, h.logger); err != nil { + if historyComp, err = seg.NewCompressor(context.Background(), "collate history", historyPath, h.tmpdir, seg.MinPatternScore, h.compressWorkers, log.LvlTrace, h.logger); err != nil { return HistoryCollation{}, fmt.Errorf("create %s history compressor: %w", h.filenameBase, err) } keysCursor, err := roTx.CursorDupSort(h.indexKeysTable) @@ -761,9 +766,9 @@ func (h *History) collate(step, txFrom, txTo uint64, roTx kv.Tx) (HistoryCollati } type HistoryFiles struct { - historyDecomp *compress.Decompressor + historyDecomp *seg.Decompressor historyIdx *recsplit.Index - efHistoryDecomp *compress.Decompressor + efHistoryDecomp *seg.Decompressor efHistoryIdx *recsplit.Index } @@ -782,8 +787,8 @@ func (sf HistoryFiles) Close() { } } func (h *History) reCalcRoFiles() { - roFiles := ctxFiles(h.files) - h.roFiles.Store(&roFiles) + roFiles := calcVisibleFiles(h.dirtyFiles) + h.visibleFiles.Store(&roFiles) } // buildFiles performs potentially resource intensive operations of creating @@ -793,9 +798,9 @@ func (h *History) buildFiles(ctx context.Context, step uint64, collation History if h.noFsync { historyComp.DisableFsync() } - var historyDecomp, efHistoryDecomp *compress.Decompressor + var historyDecomp, efHistoryDecomp *seg.Decompressor var historyIdx, efHistoryIdx *recsplit.Index - var efHistoryComp *compress.Compressor + var efHistoryComp *seg.Compressor var rs *recsplit.RecSplit closeComp := true defer func() { @@ -847,7 +852,7 @@ func (h *History) buildFiles(ctx context.Context, step uint64, collation History { var err error - if historyDecomp, err = compress.NewDecompressor(collation.historyPath); err != nil { + if historyDecomp, err = seg.NewDecompressor(collation.historyPath); err != nil { return HistoryFiles{}, fmt.Errorf("open %s history decompressor: %w", h.filenameBase, err) } @@ -857,7 +862,7 @@ func (h *History) buildFiles(ctx context.Context, step uint64, collation History p := ps.AddNew(efHistoryFileName, 1) defer ps.Delete(p) efHistoryPath = filepath.Join(h.dir, efHistoryFileName) - efHistoryComp, err = compress.NewCompressor(ctx, "ef history", efHistoryPath, h.tmpdir, compress.MinPatternScore, h.compressWorkers, log.LvlTrace, h.logger) + efHistoryComp, err = seg.NewCompressor(ctx, "ef history", efHistoryPath, h.tmpdir, seg.MinPatternScore, h.compressWorkers, log.LvlTrace, h.logger) if err != nil { return HistoryFiles{}, fmt.Errorf("create %s ef history compressor: %w", h.filenameBase, err) } @@ -891,7 +896,7 @@ func (h *History) buildFiles(ctx context.Context, step uint64, collation History } var err error - if efHistoryDecomp, err = compress.NewDecompressor(efHistoryPath); err != nil { + if efHistoryDecomp, err = seg.NewDecompressor(efHistoryPath); err != nil { return HistoryFiles{}, fmt.Errorf("open %s ef history decompressor: %w", h.filenameBase, err) } efHistoryIdxFileName := fmt.Sprintf("%s.%d-%d.efi", h.filenameBase, step, step+1) @@ -969,7 +974,7 @@ func (h *History) integrateFiles(sf HistoryFiles, txNumFrom, txNumTo uint64) { fi := newFilesItem(txNumFrom, txNumTo, h.aggregationStep) fi.decompressor = sf.historyDecomp fi.index = sf.historyIdx - h.files.Set(fi) + h.dirtyFiles.Set(fi) h.reCalcRoFiles() } @@ -1048,7 +1053,7 @@ func (h *History) isEmpty(tx kv.Tx) (bool, error) { return k == nil && k2 == nil, nil } -func (h *History) prune(ctx context.Context, txFrom, txTo, limit uint64, logEvery *time.Ticker) error { +func (h *History) prune(ctx context.Context, txFrom, txTo, limit uint64, _ *time.Ticker) error { historyKeysCursorForDeletes, err := h.tx.RwCursorDupSort(h.indexKeysTable) if err != nil { return fmt.Errorf("create %s history cursor: %w", h.filenameBase, err) @@ -1116,23 +1121,23 @@ func (h *History) prune(ctx context.Context, txFrom, txTo, limit uint64, logEver return nil } -type HistoryContext struct { - h *History - ic *InvertedIndexContext +type HistoryRoTx struct { + h *History + iit *InvertedIndexRoTx files []ctxItem // have no garbage (canDelete=true, overlaps, etc...) - getters []*compress.Getter + getters []*seg.Getter readers []*recsplit.IndexReader trace bool } -func (h *History) MakeContext() *HistoryContext { +func (h *History) BeginFilesRo() *HistoryRoTx { - var hc = HistoryContext{ + var hc = HistoryRoTx{ h: h, - ic: h.InvertedIndex.MakeContext(), - files: *h.roFiles.Load(), + iit: h.InvertedIndex.BeginFilesRo(), + files: *h.visibleFiles.Load(), trace: false, } @@ -1145,52 +1150,52 @@ func (h *History) MakeContext() *HistoryContext { return &hc } -func (hc *HistoryContext) statelessGetter(i int) *compress.Getter { - if hc.getters == nil { - hc.getters = make([]*compress.Getter, len(hc.files)) +func (ht *HistoryRoTx) statelessGetter(i int) *seg.Getter { + if ht.getters == nil { + ht.getters = make([]*seg.Getter, len(ht.files)) } - r := hc.getters[i] + r := ht.getters[i] if r == nil { - r = hc.files[i].src.decompressor.MakeGetter() - hc.getters[i] = r + r = ht.files[i].src.decompressor.MakeGetter() + ht.getters[i] = r } return r } -func (hc *HistoryContext) statelessIdxReader(i int) *recsplit.IndexReader { - if hc.readers == nil { - hc.readers = make([]*recsplit.IndexReader, len(hc.files)) +func (ht *HistoryRoTx) statelessIdxReader(i int) *recsplit.IndexReader { + if ht.readers == nil { + ht.readers = make([]*recsplit.IndexReader, len(ht.files)) } - r := hc.readers[i] + r := ht.readers[i] if r == nil { - r = hc.files[i].src.index.GetReaderFromPool() - hc.readers[i] = r + r = ht.files[i].src.index.GetReaderFromPool() + ht.readers[i] = r } return r } -func (hc *HistoryContext) Close() { - hc.ic.Close() - for _, item := range hc.files { +func (ht *HistoryRoTx) Close() { + ht.iit.Close() + for _, item := range ht.files { if item.src.frozen { continue } refCnt := item.src.refcount.Add(-1) - //if hc.h.filenameBase == "accounts" && item.src.canDelete.Load() { - // log.Warn("[history] HistoryContext.Close: check file to remove", "refCnt", refCnt, "name", item.src.decompressor.FileName()) + //if ht.h.filenameBase == "accounts" && item.src.canDelete.Load() { + // log.Warn("[history] HistoryRoTx.Close: check file to remove", "refCnt", refCnt, "name", item.src.decompressor.FileName()) //} //GC: last reader responsible to remove useles files: close it and delete if refCnt == 0 && item.src.canDelete.Load() { item.src.closeFilesAndRemove() } } - for _, r := range hc.readers { + for _, r := range ht.readers { r.Close() } } -func (hc *HistoryContext) getFile(from, to uint64) (it ctxItem, ok bool) { - for _, item := range hc.files { +func (ht *HistoryRoTx) getFile(from, to uint64) (it ctxItem, ok bool) { + for _, item := range ht.files { if item.startTxNum == from && item.endTxNum == to { return item, true } @@ -1198,8 +1203,8 @@ func (hc *HistoryContext) getFile(from, to uint64) (it ctxItem, ok bool) { return it, false } -func (hc *HistoryContext) GetNoState(key []byte, txNum uint64) ([]byte, bool, error) { - exactStep1, exactStep2, lastIndexedTxNum, foundExactShard1, foundExactShard2 := hc.h.localityIndex.lookupIdxFiles(hc.ic.loc, key, txNum) +func (ht *HistoryRoTx) GetNoState(key []byte, txNum uint64) ([]byte, bool, error) { + exactStep1, exactStep2, lastIndexedTxNum, foundExactShard1, foundExactShard2 := uint64(0), uint64(0), uint64(0), false, false //fmt.Printf("GetNoState [%x] %d\n", key, txNum) var foundTxNum uint64 @@ -1207,28 +1212,31 @@ func (hc *HistoryContext) GetNoState(key []byte, txNum uint64) ([]byte, bool, er var foundStartTxNum uint64 var found bool var findInFile = func(item ctxItem) bool { - reader := hc.ic.statelessIdxReader(item.i) + reader := ht.iit.statelessIdxReader(item.i) if reader.Empty() { return true } - offset := reader.Lookup(key) - g := hc.ic.statelessGetter(item.i) + offset, ok := reader.Lookup(key) + if !ok { + return false + } + g := ht.iit.statelessGetter(item.i) g.Reset(offset) k, _ := g.NextUncompressed() if !bytes.Equal(k, key) { //if bytes.Equal(key, hex.MustDecodeString("009ba32869045058a3f05d6f3dd2abb967e338f6")) { - // fmt.Printf("not in this shard: %x, %d, %d-%d\n", k, txNum, item.startTxNum/hc.h.aggregationStep, item.endTxNum/hc.h.aggregationStep) + // fmt.Printf("not in this shard: %x, %d, %d-%d\n", k, txNum, item.startTxNum/ht.h.aggregationStep, item.endTxNum/ht.h.aggregationStep) //} return true } eliasVal, _ := g.NextUncompressed() ef, _ := eliasfano32.ReadEliasFano(eliasVal) n, ok := ef.Search(txNum) - if hc.trace { + if ht.trace { n2, _ := ef.Search(n + 1) n3, _ := ef.Search(n - 1) - fmt.Printf("hist: files: %s %d<-%d->%d->%d, %x\n", hc.h.filenameBase, n3, txNum, n, n2, key) + fmt.Printf("hist: files: %s %d<-%d->%d->%d, %x\n", ht.h.filenameBase, n3, txNum, n, n2, key) } if ok { foundTxNum = n @@ -1243,28 +1251,28 @@ func (hc *HistoryContext) GetNoState(key []byte, txNum uint64) ([]byte, bool, er // -- LocaliyIndex opimization -- // check up to 2 exact files if foundExactShard1 { - from, to := exactStep1*hc.h.aggregationStep, (exactStep1+StepsInBiggestFile)*hc.h.aggregationStep - item, ok := hc.ic.getFile(from, to) + from, to := exactStep1*ht.h.aggregationStep, (exactStep1+StepsInBiggestFile)*ht.h.aggregationStep + item, ok := ht.iit.getFile(from, to) if ok { findInFile(item) } - //for _, item := range hc.invIndexFiles { + //for _, item := range ht.invIndexFiles { // if item.startTxNum == from && item.endTxNum == to { // findInFile(item) // } //} - //exactShard1, ok := hc.invIndexFiles.Get(ctxItem{startTxNum: exactStep1 * hc.h.aggregationStep, endTxNum: (exactStep1 + StepsInBiggestFile) * hc.h.aggregationStep}) + //exactShard1, ok := ht.invIndexFiles.Get(ctxItem{startTxNum: exactStep1 * ht.h.aggregationStep, endTxNum: (exactStep1 + StepsInBiggestFile) * ht.h.aggregationStep}) //if ok { // findInFile(exactShard1) //} } if !found && foundExactShard2 { - from, to := exactStep2*hc.h.aggregationStep, (exactStep2+StepsInBiggestFile)*hc.h.aggregationStep - item, ok := hc.ic.getFile(from, to) + from, to := exactStep2*ht.h.aggregationStep, (exactStep2+StepsInBiggestFile)*ht.h.aggregationStep + item, ok := ht.iit.getFile(from, to) if ok { findInFile(item) } - //exactShard2, ok := hc.invIndexFiles.Get(ctxItem{startTxNum: exactStep2 * hc.h.aggregationStep, endTxNum: (exactStep2 + StepsInBiggestFile) * hc.h.aggregationStep}) + //exactShard2, ok := ht.invIndexFiles.Get(ctxItem{startTxNum: exactStep2 * ht.h.aggregationStep, endTxNum: (exactStep2 + StepsInBiggestFile) * ht.h.aggregationStep}) //if ok { // findInFile(exactShard2) //} @@ -1275,7 +1283,7 @@ func (hc *HistoryContext) GetNoState(key []byte, txNum uint64) ([]byte, bool, er // -- LocaliyIndex opimization End -- if !found { - for _, item := range hc.ic.files { + for _, item := range ht.iit.files { if item.endTxNum <= lastIndexedTxNum { continue } @@ -1283,22 +1291,25 @@ func (hc *HistoryContext) GetNoState(key []byte, txNum uint64) ([]byte, bool, er break } } - //hc.invIndexFiles.AscendGreaterOrEqual(ctxItem{startTxNum: lastIndexedTxNum, endTxNum: lastIndexedTxNum}, findInFile) + //ht.invIndexFiles.AscendGreaterOrEqual(ctxItem{startTxNum: lastIndexedTxNum, endTxNum: lastIndexedTxNum}, findInFile) } if found { - historyItem, ok := hc.getFile(foundStartTxNum, foundEndTxNum) + historyItem, ok := ht.getFile(foundStartTxNum, foundEndTxNum) if !ok { - return nil, false, fmt.Errorf("hist file not found: key=%x, %s.%d-%d", key, hc.h.filenameBase, foundStartTxNum/hc.h.aggregationStep, foundEndTxNum/hc.h.aggregationStep) + return nil, false, fmt.Errorf("hist file not found: key=%x, %s.%d-%d", key, ht.h.filenameBase, foundStartTxNum/ht.h.aggregationStep, foundEndTxNum/ht.h.aggregationStep) } var txKey [8]byte binary.BigEndian.PutUint64(txKey[:], foundTxNum) - reader := hc.statelessIdxReader(historyItem.i) - offset := reader.Lookup2(txKey[:], key) + reader := ht.statelessIdxReader(historyItem.i) + offset, ok := reader.Lookup2(txKey[:], key) + if !ok { + return nil, false, nil + } //fmt.Printf("offset = %d, txKey=[%x], key=[%x]\n", offset, txKey[:], key) - g := hc.statelessGetter(historyItem.i) + g := ht.statelessGetter(historyItem.i) g.Reset(offset) - if hc.h.compressVals { + if ht.h.compressVals { v, _ := g.Next(nil) return v, true, nil } @@ -1313,7 +1324,10 @@ func (hs *HistoryStep) GetNoState(key []byte, txNum uint64) ([]byte, bool, uint6 if hs.indexFile.reader.Empty() { return nil, false, txNum } - offset := hs.indexFile.reader.Lookup(key) + offset, ok := hs.indexFile.reader.Lookup(key) + if !ok { + return nil, false, txNum + } g := hs.indexFile.getter g.Reset(offset) k, _ := g.NextUncompressed() @@ -1329,7 +1343,10 @@ func (hs *HistoryStep) GetNoState(key []byte, txNum uint64) ([]byte, bool, uint6 } var txKey [8]byte binary.BigEndian.PutUint64(txKey[:], n) - offset = hs.historyFile.reader.Lookup2(txKey[:], key) + offset, ok = hs.historyFile.reader.Lookup2(txKey[:], key) + if !ok { + return nil, false, txNum + } //fmt.Printf("offset = %d, txKey=[%x], key=[%x]\n", offset, txKey[:], key) g = hs.historyFile.getter g.Reset(offset) @@ -1345,7 +1362,10 @@ func (hs *HistoryStep) MaxTxNum(key []byte) (bool, uint64) { if hs.indexFile.reader.Empty() { return false, 0 } - offset := hs.indexFile.reader.Lookup(key) + offset, ok := hs.indexFile.reader.Lookup(key) + if !ok { + return false, 0 + } g := hs.indexFile.getter g.Reset(offset) k, _ := g.NextUncompressed() @@ -1359,8 +1379,8 @@ func (hs *HistoryStep) MaxTxNum(key []byte) (bool, uint64) { // GetNoStateWithRecent searches history for a value of specified key before txNum // second return value is true if the value is found in the history (even if it is nil) -func (hc *HistoryContext) GetNoStateWithRecent(key []byte, txNum uint64, roTx kv.Tx) ([]byte, bool, error) { - v, ok, err := hc.GetNoState(key, txNum) +func (ht *HistoryRoTx) GetNoStateWithRecent(key []byte, txNum uint64, roTx kv.Tx) ([]byte, bool, error) { + v, ok, err := ht.GetNoState(key, txNum) if err != nil { return nil, ok, err } @@ -1372,12 +1392,12 @@ func (hc *HistoryContext) GetNoStateWithRecent(key []byte, txNum uint64, roTx kv if roTx == nil { return nil, false, fmt.Errorf("roTx is nil") } - return hc.getNoStateFromDB(key, txNum, roTx) + return ht.getNoStateFromDB(key, txNum, roTx) } -func (hc *HistoryContext) getNoStateFromDB(key []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { - if hc.h.largeValues { - c, err := tx.Cursor(hc.h.historyValsTable) +func (ht *HistoryRoTx) getNoStateFromDB(key []byte, txNum uint64, tx kv.Tx) ([]byte, bool, error) { + if ht.h.largeValues { + c, err := tx.Cursor(ht.h.historyValsTable) if err != nil { return nil, false, err } @@ -1395,7 +1415,7 @@ func (hc *HistoryContext) getNoStateFromDB(key []byte, txNum uint64, tx kv.Tx) ( // val == []byte{},m eans key was created in this txNum and doesn't exists before. return val, true, nil } - c, err := tx.CursorDupSort(hc.h.historyValsTable) + c, err := tx.CursorDupSort(ht.h.historyValsTable) if err != nil { return nil, false, err } @@ -1414,15 +1434,15 @@ func (hc *HistoryContext) getNoStateFromDB(key []byte, txNum uint64, tx kv.Tx) ( return val[8:], true, nil } -func (hc *HistoryContext) WalkAsOf(startTxNum uint64, from, to []byte, roTx kv.Tx, limit int) iter.KV { +func (ht *HistoryRoTx) WalkAsOf(startTxNum uint64, from, to []byte, roTx kv.Tx, limit int) iter.KV { hi := &StateAsOfIterF{ from: from, to: to, limit: limit, - hc: hc, - compressVals: hc.h.compressVals, + hc: ht, + compressVals: ht.h.compressVals, startTxNum: startTxNum, } - for _, item := range hc.ic.files { + for _, item := range ht.iit.files { if item.endTxNum <= startTxNum { continue } @@ -1440,9 +1460,9 @@ func (hc *HistoryContext) WalkAsOf(startTxNum uint64, from, to []byte, roTx kv.T } dbit := &StateAsOfIterDB{ - largeValues: hc.h.largeValues, + largeValues: ht.h.largeValues, roTx: roTx, - valsTable: hc.h.historyValsTable, + valsTable: ht.h.historyValsTable, from: from, to: to, limit: limit, startTxNum: startTxNum, @@ -1456,7 +1476,7 @@ func (hc *HistoryContext) WalkAsOf(startTxNum uint64, from, to []byte, roTx kv.T // StateAsOfIter - returns state range at given time in history type StateAsOfIterF struct { - hc *HistoryContext + hc *HistoryRoTx limit int from, to []byte @@ -1516,7 +1536,10 @@ func (hi *StateAsOfIterF) advanceInFiles() error { return fmt.Errorf("no %s file found for [%x]", hi.hc.h.filenameBase, hi.nextKey) } reader := hi.hc.statelessIdxReader(historyItem.i) - offset := reader.Lookup2(hi.txnKey[:], hi.nextKey) + offset, ok := reader.Lookup2(hi.txnKey[:], hi.nextKey) + if !ok { + continue + } g := hi.hc.statelessGetter(historyItem.i) g.Reset(offset) if hi.compressVals { @@ -1687,21 +1710,21 @@ func (hi *StateAsOfIterDB) Next() ([]byte, []byte, error) { return hi.kBackup, hi.vBackup, nil } -func (hc *HistoryContext) iterateChangedFrozen(fromTxNum, toTxNum int, asc order.By, limit int) (iter.KV, error) { +func (ht *HistoryRoTx) iterateChangedFrozen(fromTxNum, toTxNum int, asc order.By, limit int) (iter.KV, error) { if asc == false { panic("not supported yet") } - if len(hc.ic.files) == 0 { + if len(ht.iit.files) == 0 { return iter.EmptyKV, nil } - if fromTxNum >= 0 && hc.ic.files[len(hc.ic.files)-1].endTxNum <= uint64(fromTxNum) { + if fromTxNum >= 0 && ht.iit.files[len(ht.iit.files)-1].endTxNum <= uint64(fromTxNum) { return iter.EmptyKV, nil } hi := &HistoryChangesIterFiles{ - hc: hc, - compressVals: hc.h.compressVals, + hc: ht, + compressVals: ht.h.compressVals, startTxNum: cmp.Max(0, uint64(fromTxNum)), endTxNum: toTxNum, limit: limit, @@ -1709,7 +1732,7 @@ func (hc *HistoryContext) iterateChangedFrozen(fromTxNum, toTxNum int, asc order if fromTxNum >= 0 { binary.BigEndian.PutUint64(hi.startTxKey[:], uint64(fromTxNum)) } - for _, item := range hc.ic.files { + for _, item := range ht.iit.files { if fromTxNum >= 0 && item.endTxNum <= uint64(fromTxNum) { continue } @@ -1729,19 +1752,19 @@ func (hc *HistoryContext) iterateChangedFrozen(fromTxNum, toTxNum int, asc order return hi, nil } -func (hc *HistoryContext) iterateChangedRecent(fromTxNum, toTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.KV, error) { +func (ht *HistoryRoTx) iterateChangedRecent(fromTxNum, toTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.KV, error) { if asc == order.Desc { panic("not supported yet") } - rangeIsInFiles := toTxNum >= 0 && len(hc.ic.files) > 0 && hc.ic.files[len(hc.ic.files)-1].endTxNum >= uint64(toTxNum) + rangeIsInFiles := toTxNum >= 0 && len(ht.iit.files) > 0 && ht.iit.files[len(ht.iit.files)-1].endTxNum >= uint64(toTxNum) if rangeIsInFiles { return iter.EmptyKV, nil } dbi := &HistoryChangesIterDB{ endTxNum: toTxNum, roTx: roTx, - largeValues: hc.h.largeValues, - valsTable: hc.h.historyValsTable, + largeValues: ht.h.largeValues, + valsTable: ht.h.historyValsTable, limit: limit, } if fromTxNum >= 0 { @@ -1753,15 +1776,15 @@ func (hc *HistoryContext) iterateChangedRecent(fromTxNum, toTxNum int, asc order return dbi, nil } -func (hc *HistoryContext) HistoryRange(fromTxNum, toTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.KV, error) { +func (ht *HistoryRoTx) HistoryRange(fromTxNum, toTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.KV, error) { if asc == order.Desc { panic("not supported yet") } - itOnFiles, err := hc.iterateChangedFrozen(fromTxNum, toTxNum, asc, limit) + itOnFiles, err := ht.iterateChangedFrozen(fromTxNum, toTxNum, asc, limit) if err != nil { return nil, err } - itOnDB, err := hc.iterateChangedRecent(fromTxNum, toTxNum, asc, limit, roTx) + itOnDB, err := ht.iterateChangedRecent(fromTxNum, toTxNum, asc, limit, roTx) if err != nil { return nil, err } @@ -1770,7 +1793,7 @@ func (hc *HistoryContext) HistoryRange(fromTxNum, toTxNum int, asc order.By, lim } type HistoryChangesIterFiles struct { - hc *HistoryContext + hc *HistoryRoTx nextVal []byte nextKey []byte h ReconHeap @@ -1826,7 +1849,10 @@ func (hi *HistoryChangesIterFiles) advance() error { return fmt.Errorf("HistoryChangesIterFiles: no %s file found for [%x]", hi.hc.h.filenameBase, hi.nextKey) } reader := hi.hc.statelessIdxReader(historyItem.i) - offset := reader.Lookup2(hi.txnKey[:], hi.nextKey) + offset, ok := reader.Lookup2(hi.txnKey[:], hi.nextKey) + if !ok { + continue + } g := hi.hc.statelessGetter(historyItem.i) g.Reset(offset) if hi.compressVals { @@ -2019,7 +2045,7 @@ func (hi *HistoryChangesIterDB) Next() ([]byte, []byte, error) { func (h *History) DisableReadAhead() { h.InvertedIndex.DisableReadAhead() - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { item.decompressor.DisableReadAhead() if item.index != nil { @@ -2032,7 +2058,7 @@ func (h *History) DisableReadAhead() { func (h *History) EnableReadAhead() *History { h.InvertedIndex.EnableReadAhead() - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { item.decompressor.EnableReadAhead() if item.index != nil { @@ -2045,9 +2071,9 @@ func (h *History) EnableReadAhead() *History { } func (h *History) EnableMadvWillNeed() *History { h.InvertedIndex.EnableMadvWillNeed() - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { - item.decompressor.EnableWillNeed() + item.decompressor.EnableMadvWillNeed() if item.index != nil { item.index.EnableWillNeed() } @@ -2058,7 +2084,7 @@ func (h *History) EnableMadvWillNeed() *History { } func (h *History) EnableMadvNormalReadAhead() *History { h.InvertedIndex.EnableMadvNormalReadAhead() - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { item.decompressor.EnableMadvNormal() if item.index != nil { @@ -2082,7 +2108,7 @@ type HistoryStep struct { // MakeSteps [0, toTxNum) func (h *History) MakeSteps(toTxNum uint64) []*HistoryStep { var steps []*HistoryStep - h.InvertedIndex.files.Walk(func(items []*filesItem) bool { + h.InvertedIndex.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.index == nil || !item.frozen || item.startTxNum >= toTxNum { continue @@ -2103,7 +2129,7 @@ func (h *History) MakeSteps(toTxNum uint64) []*HistoryStep { return true }) i := 0 - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.index == nil || !item.frozen || item.startTxNum >= toTxNum { continue @@ -2142,9 +2168,9 @@ func (hs *HistoryStep) Clone() *HistoryStep { } } -func (hc *HistoryContext) idxRangeRecent(key []byte, startTxNum, endTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.U64, error) { +func (ht *HistoryRoTx) idxRangeRecent(key []byte, startTxNum, endTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.U64, error) { var dbIt iter.U64 - if hc.h.largeValues { + if ht.h.largeValues { if asc { from := make([]byte, len(key)+8) copy(from, key) @@ -2161,7 +2187,7 @@ func (hc *HistoryContext) idxRangeRecent(key []byte, startTxNum, endTxNum int, a } binary.BigEndian.PutUint64(to[len(key):], toTxNum) - it, err := roTx.RangeAscend(hc.h.historyValsTable, from, to, limit) + it, err := roTx.RangeAscend(ht.h.historyValsTable, from, to, limit) if err != nil { return nil, err } @@ -2182,7 +2208,7 @@ func (hc *HistoryContext) idxRangeRecent(key []byte, startTxNum, endTxNum int, a to = make([]byte, 8) binary.BigEndian.PutUint64(to, uint64(endTxNum)) } - it, err := roTx.RangeDupSort(hc.h.historyValsTable, key, from, to, asc, limit) + it, err := roTx.RangeDupSort(ht.h.historyValsTable, key, from, to, asc, limit) if err != nil { return nil, err } @@ -2196,12 +2222,12 @@ func (hc *HistoryContext) idxRangeRecent(key []byte, startTxNum, endTxNum int, a return dbIt, nil } -func (hc *HistoryContext) IdxRange(key []byte, startTxNum, endTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.U64, error) { - frozenIt, err := hc.ic.iterateRangeFrozen(key, startTxNum, endTxNum, asc, limit) +func (ht *HistoryRoTx) IdxRange(key []byte, startTxNum, endTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.U64, error) { + frozenIt, err := ht.iit.iterateRangeFrozen(key, startTxNum, endTxNum, asc, limit) if err != nil { return nil, err } - recentIt, err := hc.idxRangeRecent(key, startTxNum, endTxNum, asc, limit, roTx) + recentIt, err := ht.idxRangeRecent(key, startTxNum, endTxNum, asc, limit, roTx) if err != nil { return nil, err } diff --git a/erigon-lib/state/history_test.go b/erigon-lib/state/history_test.go index f1ca17d1f74..56d457b0d8b 100644 --- a/erigon-lib/state/history_test.go +++ b/erigon-lib/state/history_test.go @@ -21,6 +21,7 @@ import ( "encoding/binary" "fmt" "math" + "os" "strings" "testing" "time" @@ -38,7 +39,7 @@ import ( btree2 "github.com/tidwall/btree" ) -func testDbAndHistory(tb testing.TB, largeValues bool, logger log.Logger) (string, kv.RwDB, *History) { +func testDbAndHistory(tb testing.TB, _ bool, logger log.Logger) (string, kv.RwDB, *History) { tb.Helper() path := tb.TempDir() keysTable := "AccountKeys" @@ -143,7 +144,7 @@ func TestHistoryCollationBuild(t *testing.T) { require.Equal([][]uint64{{2, 6}, {3, 6, 7}, {7}}, intArrs) r := recsplit.NewIndexReader(sf.efHistoryIdx) for i := 0; i < len(keyWords); i++ { - offset := r.Lookup([]byte(keyWords[i])) + offset, _ := r.Lookup([]byte(keyWords[i])) g.Reset(offset) w, _ := g.Next(nil) require.Equal(keyWords[i], string(w)) @@ -156,7 +157,10 @@ func TestHistoryCollationBuild(t *testing.T) { for j := 0; j < len(ints); j++ { var txKey [8]byte binary.BigEndian.PutUint64(txKey[:], ints[j]) - offset := r.Lookup2(txKey[:], []byte(keyWords[i])) + offset, ok := r.Lookup2(txKey[:], []byte(keyWords[i])) + if !ok { + continue + } g.Reset(offset) w, _ := g.Next(nil) require.Equal(valWords[vi], string(w)) @@ -301,7 +305,7 @@ func filledHistory(tb testing.TB, largeValues bool, logger log.Logger) (string, func checkHistoryHistory(t *testing.T, h *History, txs uint64) { t.Helper() // Check the history - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() for txNum := uint64(0); txNum <= txs; txNum++ { @@ -396,7 +400,7 @@ func collateAndMergeHistory(tb testing.TB, db kv.RwDB, h *History, txs uint64) { for { if stop := func() bool { - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r = h.findMergeRange(maxEndTxNum, maxSpan) if !r.any() { @@ -413,7 +417,7 @@ func collateAndMergeHistory(tb testing.TB, db kv.RwDB, h *History, txs uint64) { } } - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() err = hc.BuildOptionalMissedIndices(ctx) require.NoError(err) @@ -483,7 +487,7 @@ func TestIterateChanged(t *testing.T) { require.NoError(err) defer tx.Rollback() var keys, vals []string - ic := h.MakeContext() + ic := h.BeginFilesRo() defer ic.Close() it, err := ic.HistoryRange(2, 20, order.Asc, -1, tx) @@ -638,7 +642,7 @@ func TestIterateChanged2(t *testing.T) { } var keys, vals []string t.Run("before merge", func(t *testing.T) { - hc, require := h.MakeContext(), require.New(t) + hc, require := h.BeginFilesRo(), require.New(t) defer hc.Close() it, err := hc.HistoryRange(2, 20, order.Asc, -1, roTx) @@ -745,7 +749,7 @@ func TestIterateChanged2(t *testing.T) { }) t.Run("after merge", func(t *testing.T) { collateAndMergeHistory(t, db, h, txs) - hc, require := h.MakeContext(), require.New(t) + hc, require := h.BeginFilesRo(), require.New(t) defer hc.Close() keys = keys[:0] @@ -810,8 +814,8 @@ func TestIterateChanged2(t *testing.T) { func TestScanStaticFilesH(t *testing.T) { logger := log.New() h := &History{InvertedIndex: &InvertedIndex{filenameBase: "test", aggregationStep: 1, logger: logger}, - files: btree2.NewBTreeG[*filesItem](filesItemLess), - logger: logger, + dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess), + logger: logger, } files := []string{ "test.0-1.v", @@ -822,11 +826,35 @@ func TestScanStaticFilesH(t *testing.T) { "test.4-5.v", } h.scanStateFiles(files) - require.Equal(t, 6, h.files.Len()) + require.Equal(t, 6, h.dirtyFiles.Len()) - h.files.Clear() + h.dirtyFiles.Clear() h.integrityFileExtensions = []string{"kv"} h.scanStateFiles(files) - require.Equal(t, 0, h.files.Len()) + require.Equal(t, 0, h.dirtyFiles.Len()) + +} + +func TestHistory_OpenFolder(t *testing.T) { + fp, db, h, txs := filledHistory(t, false, log.New()) + defer db.Close() + defer h.Close() + defer os.RemoveAll(fp) + + collateAndMergeHistory(t, db, h, txs) + + list := h.visibleFiles.Load() + require.NotEmpty(t, list) + ff := (*list)[len(*list)-1] + fn := ff.src.decompressor.FilePath() + h.Close() + + err := os.Remove(fn) + require.NoError(t, err) + err = os.WriteFile(fn, make([]byte, 33), 0644) + require.NoError(t, err) + err = h.OpenFolder() + require.NoError(t, err) + h.Close() } diff --git a/erigon-lib/state/inverted_index.go b/erigon-lib/state/inverted_index.go index 4fe6ba6c03b..084b3a492ec 100644 --- a/erigon-lib/state/inverted_index.go +++ b/erigon-lib/state/inverted_index.go @@ -21,21 +21,26 @@ import ( "container/heap" "context" "encoding/binary" + "errors" "fmt" "math" "os" "path/filepath" "regexp" + "slices" "strconv" "sync/atomic" "time" "github.com/RoaringBitmap/roaring/roaring64" "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/log/v3" + btree2 "github.com/tidwall/btree" + "golang.org/x/sync/errgroup" + "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/erigon-lib/common/cmp" "github.com/ledgerwatch/erigon-lib/common/dir" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/etl" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" @@ -43,18 +48,15 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/order" "github.com/ledgerwatch/erigon-lib/recsplit" "github.com/ledgerwatch/erigon-lib/recsplit/eliasfano32" - "github.com/ledgerwatch/log/v3" - btree2 "github.com/tidwall/btree" - "golang.org/x/exp/slices" - "golang.org/x/sync/errgroup" + "github.com/ledgerwatch/erigon-lib/seg" ) type InvertedIndex struct { - files *btree2.BTreeG[*filesItem] // thread-safe, but maybe need 1 RWLock for all trees in AggregatorV3 + dirtyFiles *btree2.BTreeG[*filesItem] // thread-safe, but maybe need 1 RWLock for all trees in Aggregator // roFiles derivative from field `file`, but without garbage (canDelete=true, overlaps, etc...) - // MakeContext() using this field in zero-copy way - roFiles atomic.Pointer[[]ctxItem] + // BeginFilesRo() using this field in zero-copy way + visibleFiles atomic.Pointer[[]ctxItem] indexKeysTable string // txnNum_u64 -> key (k+auto_increment) indexTable string // k -> txnNum_u64 , Needs to be table with DupSort @@ -65,7 +67,6 @@ type InvertedIndex struct { integrityFileExtensions []string withLocalityIndex bool - localityIndex *LocalityIndex tx kv.RwTx garbageFiles []*filesItem // files that exist on disk, but ignored on opening folder - because they are garbage @@ -92,7 +93,7 @@ func NewInvertedIndex( ii := InvertedIndex{ dir: dir, tmpdir: tmpdir, - files: btree2.NewBTreeGOptions[*filesItem](filesItemLess, btree2.Options{Degree: 128, NoLocks: false}), + dirtyFiles: btree2.NewBTreeGOptions[*filesItem](filesItemLess, btree2.Options{Degree: 128, NoLocks: false}), aggregationStep: aggregationStep, filenameBase: filenameBase, indexKeysTable: indexKeysTable, @@ -102,20 +103,13 @@ func NewInvertedIndex( withLocalityIndex: withLocalityIndex, logger: logger, } - ii.roFiles.Store(&[]ctxItem{}) + ii.visibleFiles.Store(&[]ctxItem{}) - if ii.withLocalityIndex { - var err error - ii.localityIndex, err = NewLocalityIndex(ii.dir, ii.tmpdir, ii.aggregationStep, ii.filenameBase, ii.logger) - if err != nil { - return nil, fmt.Errorf("NewHistory: %s, %w", ii.filenameBase, err) - } - } return &ii, nil } func (ii *InvertedIndex) fileNamesOnDisk() ([]string, error) { - files, err := os.ReadDir(ii.dir) + files, err := dir.ReadDir(ii.dir) if err != nil { return nil, err } @@ -130,13 +124,10 @@ func (ii *InvertedIndex) fileNamesOnDisk() ([]string, error) { } func (ii *InvertedIndex) OpenList(fNames []string) error { - if err := ii.localityIndex.OpenList(fNames); err != nil { - return err - } ii.closeWhatNotInList(fNames) ii.garbageFiles = ii.scanStateFiles(fNames) if err := ii.openFiles(); err != nil { - return fmt.Errorf("NewHistory.openFiles: %s, %w", ii.filenameBase, err) + return fmt.Errorf("NewHistory.openFiles: %w, %s", err, ii.filenameBase) } return nil } @@ -187,13 +178,13 @@ Loop: } } - if _, has := ii.files.Get(newFile); has { + if _, has := ii.dirtyFiles.Get(newFile); has { continue } addNewFile := true var subSets []*filesItem - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.isSubsetOf(newFile) { subSets = append(subSets, item) @@ -214,14 +205,14 @@ Loop: // ii.files.Delete(subSet) //} if addNewFile { - ii.files.Set(newFile) + ii.dirtyFiles.Set(newFile) } } return garbageFiles } -func ctxFiles(files *btree2.BTreeG[*filesItem]) (roItems []ctxItem) { +func calcVisibleFiles(files *btree2.BTreeG[*filesItem]) (roItems []ctxItem) { roFiles := make([]ctxItem, 0, files.Len()) files.Walk(func(items []*filesItem) bool { for _, item := range items { @@ -250,13 +241,13 @@ func ctxFiles(files *btree2.BTreeG[*filesItem]) (roItems []ctxItem) { return roFiles } -func (ii *InvertedIndex) reCalcRoFiles() { - roFiles := ctxFiles(ii.files) - ii.roFiles.Store(&roFiles) +func (ii *InvertedIndex) reCalcVisibleFiles() { + roFiles := calcVisibleFiles(ii.dirtyFiles) + ii.visibleFiles.Store(&roFiles) } func (ii *InvertedIndex) missedIdxFiles() (l []*filesItem) { - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { fromStep, toStep := item.startTxNum/ii.aggregationStep, item.endTxNum/ii.aggregationStep if !dir.FileExist(filepath.Join(ii.dir, fmt.Sprintf("%s.%d-%d.efi", ii.filenameBase, fromStep, toStep))) { @@ -296,7 +287,7 @@ func (ii *InvertedIndex) openFiles() error { var err error var totalKeys uint64 var invalidFileItems []*filesItem - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.decompressor != nil { continue @@ -308,8 +299,11 @@ func (ii *InvertedIndex) openFiles() error { continue } - if item.decompressor, err = compress.NewDecompressor(datPath); err != nil { - ii.logger.Debug("InvertedIndex.openFiles: %w, %s", err, datPath) + if item.decompressor, err = seg.NewDecompressor(datPath); err != nil { + ii.logger.Debug("InvertedIndex.openFiles:", "err", err, "file", datPath) + if errors.Is(err, &seg.ErrCompressedFileCorrupted{}) { + err = nil + } continue } @@ -319,7 +313,7 @@ func (ii *InvertedIndex) openFiles() error { idxPath := filepath.Join(ii.dir, fmt.Sprintf("%s.%d-%d.efi", ii.filenameBase, fromStep, toStep)) if dir.FileExist(idxPath) { if item.index, err = recsplit.OpenIndex(idxPath); err != nil { - ii.logger.Debug("InvertedIndex.openFiles: %w, %s", err, idxPath) + ii.logger.Debug("InvertedIndex.openFiles:", "err", err, "file", idxPath) return false } totalKeys += item.index.KeyCount() @@ -328,19 +322,19 @@ func (ii *InvertedIndex) openFiles() error { return true }) for _, item := range invalidFileItems { - ii.files.Delete(item) + ii.dirtyFiles.Delete(item) } if err != nil { return err } - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() return nil } func (ii *InvertedIndex) closeWhatNotInList(fNames []string) { var toDelete []*filesItem - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { Loop1: for _, item := range items { for _, protectName := range fNames { @@ -361,21 +355,20 @@ func (ii *InvertedIndex) closeWhatNotInList(fNames []string) { item.index.Close() item.index = nil } - ii.files.Delete(item) + ii.dirtyFiles.Delete(item) } } func (ii *InvertedIndex) Close() { - ii.localityIndex.Close() ii.closeWhatNotInList([]string{}) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() } // DisableFsync - just for tests func (ii *InvertedIndex) DisableFsync() { ii.noFsync = true } func (ii *InvertedIndex) Files() (res []string) { - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.decompressor != nil { res = append(res, item.decompressor.FileName()) @@ -520,11 +513,10 @@ func (ii *invertedIndexWAL) add(key, indexKey []byte) error { return nil } -func (ii *InvertedIndex) MakeContext() *InvertedIndexContext { - var ic = InvertedIndexContext{ +func (ii *InvertedIndex) BeginFilesRo() *InvertedIndexRoTx { + var ic = InvertedIndexRoTx{ ii: ii, - files: *ii.roFiles.Load(), - loc: ii.localityIndex.MakeContext(), + files: *ii.visibleFiles.Load(), } for _, item := range ic.files { if !item.src.frozen { @@ -533,8 +525,8 @@ func (ii *InvertedIndex) MakeContext() *InvertedIndexContext { } return &ic } -func (ic *InvertedIndexContext) Close() { - for _, item := range ic.files { +func (iit *InvertedIndexRoTx) Close() { + for _, item := range iit.files { if item.src.frozen { continue } @@ -545,46 +537,43 @@ func (ic *InvertedIndexContext) Close() { } } - for _, r := range ic.readers { + for _, r := range iit.readers { r.Close() } - - ic.loc.Close(ic.ii.logger) } -type InvertedIndexContext struct { +type InvertedIndexRoTx struct { ii *InvertedIndex files []ctxItem // have no garbage (overlaps, etc...) - getters []*compress.Getter + getters []*seg.Getter readers []*recsplit.IndexReader - loc *ctxLocalityIdx } -func (ic *InvertedIndexContext) statelessGetter(i int) *compress.Getter { - if ic.getters == nil { - ic.getters = make([]*compress.Getter, len(ic.files)) +func (iit *InvertedIndexRoTx) statelessGetter(i int) *seg.Getter { + if iit.getters == nil { + iit.getters = make([]*seg.Getter, len(iit.files)) } - r := ic.getters[i] + r := iit.getters[i] if r == nil { - r = ic.files[i].src.decompressor.MakeGetter() - ic.getters[i] = r + r = iit.files[i].src.decompressor.MakeGetter() + iit.getters[i] = r } return r } -func (ic *InvertedIndexContext) statelessIdxReader(i int) *recsplit.IndexReader { - if ic.readers == nil { - ic.readers = make([]*recsplit.IndexReader, len(ic.files)) +func (iit *InvertedIndexRoTx) statelessIdxReader(i int) *recsplit.IndexReader { + if iit.readers == nil { + iit.readers = make([]*recsplit.IndexReader, len(iit.files)) } - r := ic.readers[i] + r := iit.readers[i] if r == nil { - r = ic.files[i].src.index.GetReaderFromPool() - ic.readers[i] = r + r = iit.files[i].src.index.GetReaderFromPool() + iit.readers[i] = r } return r } -func (ic *InvertedIndexContext) getFile(from, to uint64) (it ctxItem, ok bool) { - for _, item := range ic.files { +func (iit *InvertedIndexRoTx) getFile(from, to uint64) (it ctxItem, ok bool) { + for _, item := range iit.files { if item.startTxNum == from && item.endTxNum == to { return item, true } @@ -596,27 +585,27 @@ func (ic *InvertedIndexContext) getFile(from, to uint64) (it ctxItem, ok bool) { // is to be used in public API, therefore it relies on read-only transaction // so that iteration can be done even when the inverted index is being updated. // [startTxNum; endNumTx) -func (ic *InvertedIndexContext) IdxRange(key []byte, startTxNum, endTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.U64, error) { - frozenIt, err := ic.iterateRangeFrozen(key, startTxNum, endTxNum, asc, limit) +func (iit *InvertedIndexRoTx) IdxRange(key []byte, startTxNum, endTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.U64, error) { + frozenIt, err := iit.iterateRangeFrozen(key, startTxNum, endTxNum, asc, limit) if err != nil { return nil, err } - recentIt, err := ic.recentIterateRange(key, startTxNum, endTxNum, asc, limit, roTx) + recentIt, err := iit.recentIterateRange(key, startTxNum, endTxNum, asc, limit, roTx) if err != nil { return nil, err } return iter.Union[uint64](frozenIt, recentIt, asc, limit), nil } -func (ic *InvertedIndexContext) recentIterateRange(key []byte, startTxNum, endTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.U64, error) { +func (iit *InvertedIndexRoTx) recentIterateRange(key []byte, startTxNum, endTxNum int, asc order.By, limit int, roTx kv.Tx) (iter.U64, error) { //optimization: return empty pre-allocated iterator if range is frozen if asc { - isFrozenRange := len(ic.files) > 0 && endTxNum >= 0 && ic.files[len(ic.files)-1].endTxNum >= uint64(endTxNum) + isFrozenRange := len(iit.files) > 0 && endTxNum >= 0 && iit.files[len(iit.files)-1].endTxNum >= uint64(endTxNum) if isFrozenRange { return iter.EmptyU64, nil } } else { - isFrozenRange := len(ic.files) > 0 && startTxNum >= 0 && ic.files[len(ic.files)-1].endTxNum >= uint64(startTxNum) + isFrozenRange := len(iit.files) > 0 && startTxNum >= 0 && iit.files[len(iit.files)-1].endTxNum >= uint64(startTxNum) if isFrozenRange { return iter.EmptyU64, nil } @@ -634,7 +623,7 @@ func (ic *InvertedIndexContext) recentIterateRange(key []byte, startTxNum, endTx binary.BigEndian.PutUint64(to, uint64(endTxNum)) } - it, err := roTx.RangeDupSort(ic.ii.indexTable, key, from, to, asc, limit) + it, err := roTx.RangeDupSort(iit.ii.indexTable, key, from, to, asc, limit) if err != nil { return nil, err } @@ -646,7 +635,7 @@ func (ic *InvertedIndexContext) recentIterateRange(key []byte, startTxNum, endTx // IdxRange is to be used in public API, therefore it relies on read-only transaction // so that iteration can be done even when the inverted index is being updated. // [startTxNum; endNumTx) -func (ic *InvertedIndexContext) iterateRangeFrozen(key []byte, startTxNum, endTxNum int, asc order.By, limit int) (*FrozenInvertedIdxIter, error) { +func (iit *InvertedIndexRoTx) iterateRangeFrozen(key []byte, startTxNum, endTxNum int, asc order.By, limit int) (*FrozenInvertedIdxIter, error) { if asc && (startTxNum >= 0 && endTxNum >= 0) && startTxNum > endTxNum { return nil, fmt.Errorf("startTxNum=%d epected to be lower than endTxNum=%d", startTxNum, endTxNum) } @@ -658,36 +647,36 @@ func (ic *InvertedIndexContext) iterateRangeFrozen(key []byte, startTxNum, endTx key: key, startTxNum: startTxNum, endTxNum: endTxNum, - indexTable: ic.ii.indexTable, + indexTable: iit.ii.indexTable, orderAscend: asc, limit: limit, ef: eliasfano32.NewEliasFano(1, 1), } if asc { - for i := len(ic.files) - 1; i >= 0; i-- { + for i := len(iit.files) - 1; i >= 0; i-- { // [from,to) && from < to - if endTxNum >= 0 && int(ic.files[i].startTxNum) >= endTxNum { + if endTxNum >= 0 && int(iit.files[i].startTxNum) >= endTxNum { continue } - if startTxNum >= 0 && ic.files[i].endTxNum <= uint64(startTxNum) { + if startTxNum >= 0 && iit.files[i].endTxNum <= uint64(startTxNum) { break } - it.stack = append(it.stack, ic.files[i]) + it.stack = append(it.stack, iit.files[i]) it.stack[len(it.stack)-1].getter = it.stack[len(it.stack)-1].src.decompressor.MakeGetter() it.stack[len(it.stack)-1].reader = it.stack[len(it.stack)-1].src.index.GetReaderFromPool() it.hasNext = true } } else { - for i := 0; i < len(ic.files); i++ { + for i := 0; i < len(iit.files); i++ { // [from,to) && from > to - if endTxNum >= 0 && int(ic.files[i].endTxNum) <= endTxNum { + if endTxNum >= 0 && int(iit.files[i].endTxNum) <= endTxNum { continue } - if startTxNum >= 0 && ic.files[i].startTxNum > uint64(startTxNum) { + if startTxNum >= 0 && iit.files[i].startTxNum > uint64(startTxNum) { break } - it.stack = append(it.stack, ic.files[i]) + it.stack = append(it.stack, iit.files[i]) it.stack[len(it.stack)-1].getter = it.stack[len(it.stack)-1].src.decompressor.MakeGetter() it.stack[len(it.stack)-1].reader = it.stack[len(it.stack)-1].src.index.GetReaderFromPool() it.hasNext = true @@ -725,14 +714,8 @@ func (it *FrozenInvertedIdxIter) Close() { } func (it *FrozenInvertedIdxIter) advance() { - if it.orderAscend { - if it.hasNext { - it.advanceInFiles() - } - } else { - if it.hasNext { - it.advanceInFiles() - } + if it.hasNext { + it.advanceInFiles() } } @@ -764,7 +747,10 @@ func (it *FrozenInvertedIdxIter) advanceInFiles() { } item := it.stack[len(it.stack)-1] it.stack = it.stack[:len(it.stack)-1] - offset := item.reader.Lookup(it.key) + offset, ok := item.reader.Lookup(it.key) + if !ok { + continue + } g := item.getter g.Reset(offset) k, _ := g.NextUncompressed() @@ -938,14 +924,8 @@ func (it *RecentInvertedIdxIter) advanceInDB() { } func (it *RecentInvertedIdxIter) advance() { - if it.orderAscend { - if it.hasNext { - it.advanceInDB() - } - } else { - if it.hasNext { - it.advanceInDB() - } + if it.hasNext { + it.advanceInDB() } } @@ -1088,12 +1068,12 @@ func (it *InvertedIterator1) Next(keyBuf []byte) []byte { return result } -func (ic *InvertedIndexContext) IterateChangedKeys(startTxNum, endTxNum uint64, roTx kv.Tx) InvertedIterator1 { +func (iit *InvertedIndexRoTx) IterateChangedKeys(startTxNum, endTxNum uint64, roTx kv.Tx) InvertedIterator1 { var ii1 InvertedIterator1 ii1.hasNextInDb = true ii1.roTx = roTx - ii1.indexTable = ic.ii.indexTable - for _, item := range ic.files { + ii1.indexTable = iit.ii.indexTable + for _, item := range iit.files { if item.endTxNum <= startTxNum { continue } @@ -1155,7 +1135,7 @@ func (ii *InvertedIndex) collate(ctx context.Context, txFrom, txTo uint64, roTx } type InvertedFiles struct { - decomp *compress.Decompressor + decomp *seg.Decompressor index *recsplit.Index } @@ -1169,9 +1149,9 @@ func (sf InvertedFiles) Close() { } func (ii *InvertedIndex) buildFiles(ctx context.Context, step uint64, bitmaps map[string]*roaring64.Bitmap, ps *background.ProgressSet) (InvertedFiles, error) { - var decomp *compress.Decompressor + var decomp *seg.Decompressor var index *recsplit.Index - var comp *compress.Compressor + var comp *seg.Compressor var err error closeComp := true defer func() { @@ -1199,7 +1179,7 @@ func (ii *InvertedIndex) buildFiles(ctx context.Context, step uint64, bitmaps ma { p := ps.AddNew(datFileName, 1) defer ps.Delete(p) - comp, err = compress.NewCompressor(ctx, "ef", datPath, ii.tmpdir, compress.MinPatternScore, ii.compressWorkers, log.LvlTrace, ii.logger) + comp, err = seg.NewCompressor(ctx, "ef", datPath, ii.tmpdir, seg.MinPatternScore, ii.compressWorkers, log.LvlTrace, ii.logger) if err != nil { return InvertedFiles{}, fmt.Errorf("create %s compressor: %w", ii.filenameBase, err) } @@ -1227,7 +1207,7 @@ func (ii *InvertedIndex) buildFiles(ctx context.Context, step uint64, bitmaps ma comp = nil ps.Delete(p) } - if decomp, err = compress.NewDecompressor(datPath); err != nil { + if decomp, err = seg.NewDecompressor(datPath); err != nil { return InvertedFiles{}, fmt.Errorf("open %s decompressor: %w", ii.filenameBase, err) } @@ -1246,9 +1226,9 @@ func (ii *InvertedIndex) integrateFiles(sf InvertedFiles, txNumFrom, txNumTo uin fi := newFilesItem(txNumFrom, txNumTo, ii.aggregationStep) fi.decompressor = sf.decomp fi.index = sf.index - ii.files.Set(fi) + ii.dirtyFiles.Set(fi) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() } func (ii *InvertedIndex) warmup(ctx context.Context, txFrom, limit uint64, tx kv.Tx) error { @@ -1399,7 +1379,7 @@ func (ii *InvertedIndex) prune(ctx context.Context, txFrom, txTo, limit uint64, } func (ii *InvertedIndex) DisableReadAhead() { - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { item.decompressor.DisableReadAhead() if item.index != nil { @@ -1411,7 +1391,7 @@ func (ii *InvertedIndex) DisableReadAhead() { } func (ii *InvertedIndex) EnableReadAhead() *InvertedIndex { - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { item.decompressor.EnableReadAhead() if item.index != nil { @@ -1423,9 +1403,9 @@ func (ii *InvertedIndex) EnableReadAhead() *InvertedIndex { return ii } func (ii *InvertedIndex) EnableMadvWillNeed() *InvertedIndex { - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { - item.decompressor.EnableWillNeed() + item.decompressor.EnableMadvWillNeed() if item.index != nil { item.index.EnableWillNeed() } @@ -1435,7 +1415,7 @@ func (ii *InvertedIndex) EnableMadvWillNeed() *InvertedIndex { return ii } func (ii *InvertedIndex) EnableMadvNormalReadAhead() *InvertedIndex { - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { item.decompressor.EnableMadvNormal() if item.index != nil { @@ -1448,10 +1428,10 @@ func (ii *InvertedIndex) EnableMadvNormalReadAhead() *InvertedIndex { } func (ii *InvertedIndex) collectFilesStat() (filesCount, filesSize, idxSize uint64) { - if ii.files == nil { + if ii.dirtyFiles == nil { return 0, 0, 0 } - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.index == nil { return false diff --git a/erigon-lib/state/inverted_index_test.go b/erigon-lib/state/inverted_index_test.go index c23dcb5d0a0..4154c921a1a 100644 --- a/erigon-lib/state/inverted_index_test.go +++ b/erigon-lib/state/inverted_index_test.go @@ -126,7 +126,7 @@ func TestInvIndexCollationBuild(t *testing.T) { require.Equal(t, [][]uint64{{2, 6}, {3}, {6}}, intArrs) r := recsplit.NewIndexReader(sf.index) for i := 0; i < len(words); i++ { - offset := r.Lookup([]byte(words[i])) + offset, _ := r.Lookup([]byte(words[i])) g.Reset(offset) w, _ := g.Next(nil) require.Equal(t, words[i], string(w)) @@ -255,7 +255,7 @@ func filledInvIndexOfSize(tb testing.TB, txs, aggStep, module uint64, logger log func checkRanges(t *testing.T, db kv.RwDB, ii *InvertedIndex, txs uint64) { t.Helper() ctx := context.Background() - ic := ii.MakeContext() + ic := ii.BeginFilesRo() defer ic.Close() // Check the iterator ranges first without roTx @@ -361,7 +361,7 @@ func mergeInverted(tb testing.TB, db kv.RwDB, ii *InvertedIndex, txs uint64) { for { if stop := func() bool { - ic := ii.MakeContext() + ic := ii.BeginFilesRo() defer ic.Close() found, startTxNum, endTxNum = ii.findMergeRange(maxEndTxNum, maxSpan) if !found { @@ -444,7 +444,7 @@ func TestChangedKeysIterator(t *testing.T) { defer func() { roTx.Rollback() }() - ic := ii.MakeContext() + ic := ii.BeginFilesRo() defer ic.Close() it := ic.IterateChangedKeys(0, 20, roTx) defer func() { @@ -499,8 +499,8 @@ func TestChangedKeysIterator(t *testing.T) { func TestScanStaticFiles(t *testing.T) { logger := log.New() ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, - files: btree2.NewBTreeG[*filesItem](filesItemLess), - logger: logger, + dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess), + logger: logger, } files := []string{ "test.0-1.ef", @@ -511,20 +511,20 @@ func TestScanStaticFiles(t *testing.T) { "test.4-5.ef", } ii.scanStateFiles(files) - require.Equal(t, 6, ii.files.Len()) + require.Equal(t, 6, ii.dirtyFiles.Len()) //integrity extension case - ii.files.Clear() + ii.dirtyFiles.Clear() ii.integrityFileExtensions = []string{"v"} ii.scanStateFiles(files) - require.Equal(t, 0, ii.files.Len()) + require.Equal(t, 0, ii.dirtyFiles.Len()) } func TestCtxFiles(t *testing.T) { logger := log.New() ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, - files: btree2.NewBTreeG[*filesItem](filesItemLess), - logger: logger, + dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess), + logger: logger, } files := []string{ "test.0-1.ef", // overlap with same `endTxNum=4` @@ -539,9 +539,9 @@ func TestCtxFiles(t *testing.T) { "test.480-512.ef", } ii.scanStateFiles(files) - require.Equal(t, 10, ii.files.Len()) + require.Equal(t, 10, ii.dirtyFiles.Len()) - roFiles := ctxFiles(ii.files) + roFiles := calcVisibleFiles(ii.dirtyFiles) for i, item := range roFiles { if item.src.canDelete.Load() { require.Failf(t, "deleted file", "%d-%d", item.src.startTxNum, item.src.endTxNum) @@ -564,3 +564,27 @@ func TestCtxFiles(t *testing.T) { require.Equal(t, 480, int(roFiles[2].startTxNum)) require.Equal(t, 512, int(roFiles[2].endTxNum)) } + +func TestInvIndex_OpenFolder(t *testing.T) { + fp, db, ii, txs := filledInvIndex(t, log.New()) + defer db.Close() + defer ii.Close() + defer os.RemoveAll(fp) + + mergeInverted(t, db, ii, txs) + + list := ii.visibleFiles.Load() + require.NotEmpty(t, list) + ff := (*list)[len(*list)-1] + fn := ff.src.decompressor.FilePath() + ii.Close() + + err := os.Remove(fn) + require.NoError(t, err) + err = os.WriteFile(fn, make([]byte, 33), 0644) + require.NoError(t, err) + + err = ii.OpenFolder() + require.NoError(t, err) + ii.Close() +} diff --git a/erigon-lib/state/locality_index.go b/erigon-lib/state/locality_index.go deleted file mode 100644 index 8d126a08751..00000000000 --- a/erigon-lib/state/locality_index.go +++ /dev/null @@ -1,504 +0,0 @@ -/* - Copyright 2022 Erigon contributors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package state - -import ( - "bytes" - "container/heap" - "context" - "fmt" - "os" - "path/filepath" - "regexp" - "strconv" - "sync/atomic" - "time" - - "github.com/ledgerwatch/erigon-lib/common/assert" - "github.com/ledgerwatch/erigon-lib/common/dir" - "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" - "github.com/ledgerwatch/erigon-lib/recsplit" - "github.com/ledgerwatch/log/v3" -) - -const LocalityIndexUint64Limit = 64 //bitmap spend 1 bit per file, stored as uint64 - -// LocalityIndex - has info in which .ef files exists given key -// Format: key -> bitmap(step_number_list) -// step_number_list is list of .ef files where exists given key -type LocalityIndex struct { - filenameBase string - dir, tmpdir string // Directory where static files are created - aggregationStep uint64 // immutable - - file *filesItem - bm *bitmapdb.FixedSizeBitmaps - - roFiles atomic.Pointer[ctxItem] - roBmFile atomic.Pointer[bitmapdb.FixedSizeBitmaps] - logger log.Logger -} - -func NewLocalityIndex( - dir, tmpdir string, - aggregationStep uint64, - filenameBase string, - logger log.Logger, -) (*LocalityIndex, error) { - li := &LocalityIndex{ - dir: dir, - tmpdir: tmpdir, - aggregationStep: aggregationStep, - filenameBase: filenameBase, - logger: logger, - } - return li, nil -} -func (li *LocalityIndex) closeWhatNotInList(fNames []string) { - if li == nil || li.bm == nil { - return - } - - for _, protectName := range fNames { - if li.bm.FileName() == protectName { - return - } - } - li.closeFiles() -} - -func (li *LocalityIndex) OpenList(fNames []string) error { - if li == nil { - return nil - } - li.closeWhatNotInList(fNames) - _ = li.scanStateFiles(fNames) - if err := li.openFiles(); err != nil { - return fmt.Errorf("NewHistory.openFiles: %s, %w", li.filenameBase, err) - } - return nil -} - -func (li *LocalityIndex) scanStateFiles(fNames []string) (uselessFiles []*filesItem) { - if li == nil { - return nil - } - - re := regexp.MustCompile("^" + li.filenameBase + ".([0-9]+)-([0-9]+).li$") - var err error - for _, name := range fNames { - subs := re.FindStringSubmatch(name) - if len(subs) != 3 { - if len(subs) != 0 { - li.logger.Warn("File ignored by inverted index scan, more than 3 submatches", "name", name, "submatches", len(subs)) - } - continue - } - var startStep, endStep uint64 - if startStep, err = strconv.ParseUint(subs[1], 10, 64); err != nil { - li.logger.Warn("File ignored by inverted index scan, parsing startTxNum", "error", err, "name", name) - continue - } - if endStep, err = strconv.ParseUint(subs[2], 10, 64); err != nil { - li.logger.Warn("File ignored by inverted index scan, parsing endTxNum", "error", err, "name", name) - continue - } - if startStep > endStep { - li.logger.Warn("File ignored by inverted index scan, startTxNum > endTxNum", "name", name) - continue - } - - if startStep != 0 { - li.logger.Warn("LocalityIndex must always starts from step 0") - continue - } - if endStep > StepsInBiggestFile*LocalityIndexUint64Limit { - li.logger.Warn("LocalityIndex does store bitmaps as uint64, means it can't handle > 2048 steps. But it's possible to implement") - continue - } - - startTxNum, endTxNum := startStep*li.aggregationStep, endStep*li.aggregationStep - if li.file == nil { - li.file = newFilesItem(startTxNum, endTxNum, li.aggregationStep) - li.file.frozen = false // LocalityIndex files are never frozen - } else if li.file.endTxNum < endTxNum { - uselessFiles = append(uselessFiles, li.file) - li.file = newFilesItem(startTxNum, endTxNum, li.aggregationStep) - li.file.frozen = false // LocalityIndex files are never frozen - } - } - return uselessFiles -} - -func (li *LocalityIndex) openFiles() (err error) { - if li == nil || li.file == nil { - return nil - } - - fromStep, toStep := li.file.startTxNum/li.aggregationStep, li.file.endTxNum/li.aggregationStep - if li.bm == nil { - dataPath := filepath.Join(li.dir, fmt.Sprintf("%s.%d-%d.l", li.filenameBase, fromStep, toStep)) - if dir.FileExist(dataPath) { - li.bm, err = bitmapdb.OpenFixedSizeBitmaps(dataPath, int((toStep-fromStep)/StepsInBiggestFile)) - if err != nil { - return err - } - } - } - if li.file.index == nil { - idxPath := filepath.Join(li.dir, fmt.Sprintf("%s.%d-%d.li", li.filenameBase, fromStep, toStep)) - if dir.FileExist(idxPath) { - li.file.index, err = recsplit.OpenIndex(idxPath) - if err != nil { - return fmt.Errorf("LocalityIndex.openFiles: %w, %s", err, idxPath) - } - } - } - li.reCalcRoFiles() - return nil -} - -func (li *LocalityIndex) closeFiles() { - if li == nil { - return - } - if li.file != nil && li.file.index != nil { - li.file.index.Close() - li.file = nil - } - if li.bm != nil { - li.bm.Close() - li.bm = nil - } -} -func (li *LocalityIndex) reCalcRoFiles() { - if li == nil || li.file == nil { - return - } - li.roFiles.Store(&ctxItem{ - startTxNum: li.file.startTxNum, - endTxNum: li.file.endTxNum, - i: 0, - src: li.file, - }) - li.roBmFile.Store(li.bm) -} - -func (li *LocalityIndex) MakeContext() *ctxLocalityIdx { - if li == nil { - return nil - } - x := &ctxLocalityIdx{ - file: li.roFiles.Load(), - bm: li.roBmFile.Load(), - } - if x.file != nil && x.file.src != nil { - x.file.src.refcount.Add(1) - } - return x -} - -func (out *ctxLocalityIdx) Close(logger log.Logger) { - if out == nil || out.file == nil || out.file.src == nil { - return - } - refCnt := out.file.src.refcount.Add(-1) - if refCnt == 0 && out.file.src.canDelete.Load() { - closeLocalityIndexFilesAndRemove(out, logger) - } -} - -func closeLocalityIndexFilesAndRemove(i *ctxLocalityIdx, logger log.Logger) { - if i.file.src != nil { - i.file.src.closeFilesAndRemove() - i.file.src = nil - } - if i.bm != nil { - i.bm.Close() - if err := os.Remove(i.bm.FilePath()); err != nil { - logger.Trace("os.Remove", "err", err, "file", i.bm.FileName()) - } - i.bm = nil - } -} - -func (li *LocalityIndex) Close() { - li.closeWhatNotInList([]string{}) - li.reCalcRoFiles() -} -func (li *LocalityIndex) Files() (res []string) { return res } -func (li *LocalityIndex) NewIdxReader() *recsplit.IndexReader { - if li != nil && li.file != nil && li.file.index != nil { - return recsplit.NewIndexReader(li.file.index) - } - return nil -} - -// LocalityIndex return exactly 2 file (step) -// prevents searching key in many files -func (li *LocalityIndex) lookupIdxFiles(loc *ctxLocalityIdx, key []byte, fromTxNum uint64) (exactShard1, exactShard2 uint64, lastIndexedTxNum uint64, ok1, ok2 bool) { - if li == nil || loc == nil || loc.bm == nil { - return 0, 0, 0, false, false - } - if loc.reader == nil { - loc.reader = recsplit.NewIndexReader(loc.file.src.index) - } - - if fromTxNum >= loc.file.endTxNum { - return 0, 0, fromTxNum, false, false - } - - fromFileNum := fromTxNum / li.aggregationStep / StepsInBiggestFile - fn1, fn2, ok1, ok2, err := loc.bm.First2At(loc.reader.Lookup(key), fromFileNum) - if err != nil { - panic(err) - } - return fn1 * StepsInBiggestFile, fn2 * StepsInBiggestFile, loc.file.endTxNum, ok1, ok2 -} - -func (li *LocalityIndex) missedIdxFiles(ii *InvertedIndexContext) (toStep uint64, idxExists bool) { - if len(ii.files) == 0 { - return 0, true - } - var item *ctxItem - for i := len(ii.files) - 1; i >= 0; i-- { - if ii.files[i].src.frozen { - item = &ii.files[i] - break - } - } - if item != nil { - toStep = item.endTxNum / li.aggregationStep - } - fName := fmt.Sprintf("%s.%d-%d.li", li.filenameBase, 0, toStep) - return toStep, dir.FileExist(filepath.Join(li.dir, fName)) -} -func (li *LocalityIndex) buildFiles(ctx context.Context, ic *InvertedIndexContext, toStep uint64) (files *LocalityIndexFiles, err error) { - defer ic.ii.EnableMadvNormalReadAhead().DisableReadAhead() - - logEvery := time.NewTicker(30 * time.Second) - defer logEvery.Stop() - - fromStep := uint64(0) - count := 0 - it := ic.iterateKeysLocality(toStep * li.aggregationStep) - for it.HasNext() { - _, _ = it.Next() - count++ - } - - fName := fmt.Sprintf("%s.%d-%d.li", li.filenameBase, fromStep, toStep) - idxPath := filepath.Join(li.dir, fName) - filePath := filepath.Join(li.dir, fmt.Sprintf("%s.%d-%d.l", li.filenameBase, fromStep, toStep)) - - rs, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ - KeyCount: count, - Enums: false, - BucketSize: 2000, - LeafSize: 8, - TmpDir: li.tmpdir, - IndexFile: idxPath, - }, li.logger) - if err != nil { - return nil, fmt.Errorf("create recsplit: %w", err) - } - defer rs.Close() - rs.LogLvl(log.LvlTrace) - - i := uint64(0) - for { - dense, err := bitmapdb.NewFixedSizeBitmapsWriter(filePath, int(it.FilesAmount()), uint64(count), li.logger) - if err != nil { - return nil, err - } - defer dense.Close() - - it = ic.iterateKeysLocality(toStep * li.aggregationStep) - for it.HasNext() { - k, inFiles := it.Next() - if err := dense.AddArray(i, inFiles); err != nil { - return nil, err - } - if err = rs.AddKey(k, 0); err != nil { - return nil, err - } - i++ - - select { - case <-ctx.Done(): - return nil, ctx.Err() - case <-logEvery.C: - li.logger.Info("[LocalityIndex] build", "name", li.filenameBase, "progress", fmt.Sprintf("%.2f%%", 50+it.Progress()/2)) - default: - } - } - - if err := dense.Build(); err != nil { - return nil, err - } - - if err = rs.Build(ctx); err != nil { - if rs.Collision() { - li.logger.Debug("Building recsplit. Collision happened. It's ok. Restarting...") - rs.ResetNextSalt() - } else { - return nil, fmt.Errorf("build idx: %w", err) - } - } else { - break - } - } - - idx, err := recsplit.OpenIndex(idxPath) - if err != nil { - return nil, err - } - bm, err := bitmapdb.OpenFixedSizeBitmaps(filePath, int(it.FilesAmount())) - if err != nil { - return nil, err - } - return &LocalityIndexFiles{index: idx, bm: bm}, nil -} - -func (li *LocalityIndex) integrateFiles(sf LocalityIndexFiles, txNumFrom, txNumTo uint64) { - if li.file != nil { - li.file.canDelete.Store(true) - } - li.file = &filesItem{ - startTxNum: txNumFrom, - endTxNum: txNumTo, - index: sf.index, - frozen: false, - } - li.bm = sf.bm - li.reCalcRoFiles() -} - -func (li *LocalityIndex) BuildMissedIndices(ctx context.Context, ii *InvertedIndexContext) error { - if li == nil { - return nil - } - toStep, idxExists := li.missedIdxFiles(ii) - if idxExists || toStep == 0 { - return nil - } - fromStep := uint64(0) - f, err := li.buildFiles(ctx, ii, toStep) - if err != nil { - return err - } - li.integrateFiles(*f, fromStep*li.aggregationStep, toStep*li.aggregationStep) - return nil -} - -type LocalityIndexFiles struct { - index *recsplit.Index - bm *bitmapdb.FixedSizeBitmaps -} - -func (sf LocalityIndexFiles) Close() { - if sf.index != nil { - sf.index.Close() - } - if sf.bm != nil { - sf.bm.Close() - } -} - -type LocalityIterator struct { - hc *InvertedIndexContext - h ReconHeapOlderFirst - files, nextFiles []uint64 - key, nextKey []byte - progress uint64 - hasNext bool - - totalOffsets, filesAmount uint64 -} - -func (si *LocalityIterator) advance() { - for si.h.Len() > 0 { - top := heap.Pop(&si.h).(*ReconItem) - key := top.key - _, offset := top.g.NextUncompressed() - si.progress += offset - top.lastOffset - top.lastOffset = offset - inStep := uint32(top.startTxNum / si.hc.ii.aggregationStep) - if top.g.HasNext() { - top.key, _ = top.g.NextUncompressed() - heap.Push(&si.h, top) - } - - inFile := inStep / StepsInBiggestFile - - if !bytes.Equal(key, si.key) { - if si.key == nil { - si.key = key - si.files = append(si.files, uint64(inFile)) - continue - } - - si.nextFiles, si.files = si.files, si.nextFiles[:0] - si.nextKey = si.key - - si.files = append(si.files, uint64(inFile)) - si.key = key - si.hasNext = true - return - } - si.files = append(si.files, uint64(inFile)) - } - si.nextFiles, si.files = si.files, si.nextFiles[:0] - si.nextKey = si.key - si.hasNext = false -} - -func (si *LocalityIterator) HasNext() bool { return si.hasNext } -func (si *LocalityIterator) Progress() float64 { - return (float64(si.progress) / float64(si.totalOffsets)) * 100 -} -func (si *LocalityIterator) FilesAmount() uint64 { return si.filesAmount } - -func (si *LocalityIterator) Next() ([]byte, []uint64) { - si.advance() - return si.nextKey, si.nextFiles -} - -func (ic *InvertedIndexContext) iterateKeysLocality(uptoTxNum uint64) *LocalityIterator { - si := &LocalityIterator{hc: ic} - for _, item := range ic.files { - if !item.src.frozen || item.startTxNum > uptoTxNum { - continue - } - if assert.Enable { - if (item.endTxNum-item.startTxNum)/ic.ii.aggregationStep != StepsInBiggestFile { - panic(fmt.Errorf("frozen file of small size: %s", item.src.decompressor.FileName())) - } - } - g := item.src.decompressor.MakeGetter() - if g.HasNext() { - key, offset := g.NextUncompressed() - - heapItem := &ReconItem{startTxNum: item.startTxNum, endTxNum: item.endTxNum, g: g, txNum: ^item.endTxNum, key: key, startOffset: offset, lastOffset: offset} - heap.Push(&si.h, heapItem) - } - si.totalOffsets += uint64(g.Size()) - si.filesAmount++ - } - si.advance() - return si -} diff --git a/erigon-lib/state/locality_index_test.go b/erigon-lib/state/locality_index_test.go deleted file mode 100644 index ef70496972c..00000000000 --- a/erigon-lib/state/locality_index_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package state - -import ( - "context" - "encoding/binary" - "math" - "sync/atomic" - "testing" - - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/require" -) - -func BenchmarkName2(b *testing.B) { - b.Run("1", func(b *testing.B) { - j := atomic.Int32{} - for i := 0; i < b.N; i++ { - j.Add(1) - } - }) - b.Run("2", func(b *testing.B) { - j := &atomic.Int32{} - for i := 0; i < b.N; i++ { - j.Add(1) - } - }) -} - -func TestLocality(t *testing.T) { - logger := log.New() - ctx, require := context.Background(), require.New(t) - const Module uint64 = 31 - path, db, ii, txs := filledInvIndexOfSize(t, 300, 4, Module, logger) - mergeInverted(t, db, ii, txs) - ic := ii.MakeContext() - defer ic.Close() - li, _ := NewLocalityIndex(path, path, 4, "inv", logger) - defer li.Close() - err := li.BuildMissedIndices(ctx, ic) - require.NoError(err) - t.Run("locality iterator", func(t *testing.T) { - ic := ii.MakeContext() - defer ic.Close() - it := ic.iterateKeysLocality(math.MaxUint64) - require.True(it.HasNext()) - key, bitmap := it.Next() - require.Equal(uint64(2), binary.BigEndian.Uint64(key)) - require.Equal([]uint64{0, 1}, bitmap) - require.True(it.HasNext()) - key, bitmap = it.Next() - require.Equal(uint64(3), binary.BigEndian.Uint64(key)) - require.Equal([]uint64{0, 1}, bitmap) - - var last []byte - for it.HasNext() { - key, _ = it.Next() - last = key - } - require.Equal(Module, binary.BigEndian.Uint64(last)) - }) - - files, err := li.buildFiles(ctx, ic, ii.endTxNumMinimax()/ii.aggregationStep) - require.NoError(err) - defer files.Close() - t.Run("locality index: get full bitamp", func(t *testing.T) { - res, err := files.bm.At(0) - require.NoError(err) - require.Equal([]uint64{0, 1}, res) - res, err = files.bm.At(1) - require.NoError(err) - require.Equal([]uint64{0, 1}, res) - res, err = files.bm.At(32) //too big, must error - require.Error(err) - require.Empty(res) - }) - - t.Run("locality index: search from given position", func(t *testing.T) { - fst, snd, ok1, ok2, err := files.bm.First2At(0, 1) - require.NoError(err) - require.True(ok1) - require.False(ok2) - require.Equal(uint64(1), fst) - require.Zero(snd) - }) - t.Run("locality index: search from given position in future", func(t *testing.T) { - fst, snd, ok1, ok2, err := files.bm.First2At(0, 2) - require.NoError(err) - require.False(ok1) - require.False(ok2) - require.Zero(fst) - require.Zero(snd) - }) - t.Run("locality index: lookup", func(t *testing.T) { - liCtx := li.MakeContext() - defer liCtx.Close(logger) - var k [8]byte - binary.BigEndian.PutUint64(k[:], 1) - v1, v2, from, ok1, ok2 := li.lookupIdxFiles(liCtx, k[:], 1*li.aggregationStep*StepsInBiggestFile) - require.True(ok1) - require.False(ok2) - require.Equal(uint64(1*StepsInBiggestFile), v1) - require.Equal(uint64(0*StepsInBiggestFile), v2) - require.Equal(2*li.aggregationStep*StepsInBiggestFile, from) - }) -} diff --git a/erigon-lib/state/merge.go b/erigon-lib/state/merge.go index 1a45bb55021..6d42b53e298 100644 --- a/erigon-lib/state/merge.go +++ b/erigon-lib/state/merge.go @@ -26,19 +26,20 @@ import ( "path/filepath" "strings" - "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common/background" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/cmp" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/recsplit" "github.com/ledgerwatch/erigon-lib/recsplit/eliasfano32" + "github.com/ledgerwatch/erigon-lib/seg" ) func (d *Domain) endTxNumMinimax() uint64 { minimax := d.History.endTxNumMinimax() - if max, ok := d.files.Max(); ok { + if max, ok := d.dirtyFiles.Max(); ok { endTxNum := max.endTxNum if minimax == 0 || endTxNum < minimax { minimax = endTxNum @@ -49,7 +50,7 @@ func (d *Domain) endTxNumMinimax() uint64 { func (ii *InvertedIndex) endTxNumMinimax() uint64 { var minimax uint64 - if max, ok := ii.files.Max(); ok { + if max, ok := ii.dirtyFiles.Max(); ok { endTxNum := max.endTxNum if minimax == 0 || endTxNum < minimax { minimax = endTxNum @@ -59,7 +60,7 @@ func (ii *InvertedIndex) endTxNumMinimax() uint64 { } func (ii *InvertedIndex) endIndexedTxNumMinimax(needFrozen bool) uint64 { var max uint64 - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.index == nil || (needFrozen && !item.frozen) { continue @@ -73,7 +74,7 @@ func (ii *InvertedIndex) endIndexedTxNumMinimax(needFrozen bool) uint64 { func (h *History) endTxNumMinimax() uint64 { minimax := h.InvertedIndex.endTxNumMinimax() - if max, ok := h.files.Max(); ok { + if max, ok := h.dirtyFiles.Max(); ok { endTxNum := max.endTxNum if minimax == 0 || endTxNum < minimax { minimax = endTxNum @@ -83,7 +84,7 @@ func (h *History) endTxNumMinimax() uint64 { } func (h *History) endIndexedTxNumMinimax(needFrozen bool) uint64 { var max uint64 - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.index == nil || (needFrozen && !item.frozen) { continue @@ -143,7 +144,7 @@ func (d *Domain) findMergeRange(maxEndTxNum, maxSpan uint64) DomainRanges { indexEndTxNum: hr.indexEndTxNum, index: hr.index, } - d.files.Walk(func(items []*filesItem) bool { + d.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.endTxNum > maxEndTxNum { return false @@ -175,7 +176,7 @@ func (d *Domain) findMergeRange(maxEndTxNum, maxSpan uint64) DomainRanges { func (ii *InvertedIndex) findMergeRange(maxEndTxNum, maxSpan uint64) (bool, uint64, uint64) { var minFound bool var startTxNum, endTxNum uint64 - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.endTxNum > maxEndTxNum { continue @@ -202,39 +203,6 @@ func (ii *InvertedIndex) findMergeRange(maxEndTxNum, maxSpan uint64) (bool, uint return minFound, startTxNum, endTxNum } -func (ii *InvertedIndex) mergeRangesUpTo(ctx context.Context, maxTxNum, maxSpan uint64, workers int, ictx *InvertedIndexContext, ps *background.ProgressSet) (err error) { - closeAll := true - for updated, startTx, endTx := ii.findMergeRange(maxSpan, maxTxNum); updated; updated, startTx, endTx = ii.findMergeRange(maxTxNum, maxSpan) { - staticFiles, _ := ictx.staticFilesInRange(startTx, endTx) - defer func() { - if closeAll { - for _, i := range staticFiles { - i.decompressor.Close() - i.index.Close() - } - } - }() - - mergedIndex, err := ii.mergeFiles(ctx, staticFiles, startTx, endTx, workers, ps) - if err != nil { - return err - } - defer func() { - if closeAll { - mergedIndex.decompressor.Close() - mergedIndex.index.Close() - } - }() - - ii.integrateMergedFiles(staticFiles, mergedIndex) - if mergedIndex.frozen { - ii.cleanAfterFreeze(mergedIndex.endTxNum) - } - } - closeAll = false - return nil -} - type HistoryRanges struct { historyStartTxNum uint64 historyEndTxNum uint64 @@ -261,7 +229,7 @@ func (r HistoryRanges) any() bool { func (h *History) findMergeRange(maxEndTxNum, maxSpan uint64) HistoryRanges { var r HistoryRanges r.index, r.indexStartTxNum, r.indexEndTxNum = h.InvertedIndex.findMergeRange(maxEndTxNum, maxSpan) - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.endTxNum > maxEndTxNum { continue @@ -305,10 +273,10 @@ func (h *History) findMergeRange(maxEndTxNum, maxSpan uint64) HistoryRanges { // staticFilesInRange returns list of static files with txNum in specified range [startTxNum; endTxNum) // files are in the descending order of endTxNum -func (dc *DomainContext) staticFilesInRange(r DomainRanges) (valuesFiles, indexFiles, historyFiles []*filesItem, startJ int) { +func (dt *DomainRoTx) staticFilesInRange(r DomainRanges) (valuesFiles, indexFiles, historyFiles []*filesItem, startJ int) { if r.index || r.history { var err error - indexFiles, historyFiles, startJ, err = dc.hc.staticFilesInRange(HistoryRanges{ + indexFiles, historyFiles, startJ, err = dt.ht.staticFilesInRange(HistoryRanges{ historyStartTxNum: r.historyStartTxNum, historyEndTxNum: r.historyEndTxNum, history: r.history, @@ -321,7 +289,7 @@ func (dc *DomainContext) staticFilesInRange(r DomainRanges) (valuesFiles, indexF } } if r.values { - for _, item := range dc.files { + for _, item := range dt.files { if item.startTxNum < r.valuesStartTxNum { startJ++ continue @@ -341,14 +309,14 @@ func (dc *DomainContext) staticFilesInRange(r DomainRanges) (valuesFiles, indexF } // nolint -func (d *Domain) staticFilesInRange(r DomainRanges, dc *DomainContext) (valuesFiles, indexFiles, historyFiles []*filesItem, startJ int) { - panic("deprecated: use DomainContext.staticFilesInRange") +func (d *Domain) staticFilesInRange(r DomainRanges, dc *DomainRoTx) (valuesFiles, indexFiles, historyFiles []*filesItem, startJ int) { + panic("deprecated: use DomainRoTx.staticFilesInRange") } -func (ic *InvertedIndexContext) staticFilesInRange(startTxNum, endTxNum uint64) ([]*filesItem, int) { - files := make([]*filesItem, 0, len(ic.files)) +func (iit *InvertedIndexRoTx) staticFilesInRange(startTxNum, endTxNum uint64) ([]*filesItem, int) { + files := make([]*filesItem, 0, len(iit.files)) var startJ int - for _, item := range ic.files { + for _, item := range iit.files { if item.startTxNum < startTxNum { startJ++ continue @@ -368,21 +336,21 @@ func (ic *InvertedIndexContext) staticFilesInRange(startTxNum, endTxNum uint64) } // nolint -func (ii *InvertedIndex) staticFilesInRange(startTxNum, endTxNum uint64, ic *InvertedIndexContext) ([]*filesItem, int) { - panic("deprecated: use InvertedIndexContext.staticFilesInRange") +func (ii *InvertedIndex) staticFilesInRange(startTxNum, endTxNum uint64, ic *InvertedIndexRoTx) ([]*filesItem, int) { + panic("deprecated: use InvertedIndexRoTx.staticFilesInRange") } -func (hc *HistoryContext) staticFilesInRange(r HistoryRanges) (indexFiles, historyFiles []*filesItem, startJ int, err error) { +func (ht *HistoryRoTx) staticFilesInRange(r HistoryRanges) (indexFiles, historyFiles []*filesItem, startJ int, err error) { if !r.history && r.index { - indexFiles, startJ = hc.ic.staticFilesInRange(r.indexStartTxNum, r.indexEndTxNum) + indexFiles, startJ = ht.iit.staticFilesInRange(r.indexStartTxNum, r.indexEndTxNum) return indexFiles, historyFiles, startJ, nil } if r.history { - // Get history files from HistoryContext (no "garbage/overalps"), but index files not from InvertedIndexContext - // because index files may already be merged (before `kill -9`) and it means not visible in InvertedIndexContext + // Get history files from HistoryRoTx (no "garbage/overalps"), but index files not from InvertedIndexRoTx + // because index files may already be merged (before `kill -9`) and it means not visible in InvertedIndexRoTx startJ = 0 - for _, item := range hc.files { + for _, item := range ht.files { if item.startTxNum < r.historyStartTxNum { startJ++ continue @@ -392,11 +360,11 @@ func (hc *HistoryContext) staticFilesInRange(r HistoryRanges) (indexFiles, histo } historyFiles = append(historyFiles, item.src) - idxFile, ok := hc.h.InvertedIndex.files.Get(item.src) + idxFile, ok := ht.h.InvertedIndex.dirtyFiles.Get(item.src) if ok { indexFiles = append(indexFiles, idxFile) } else { - walkErr := fmt.Errorf("History.staticFilesInRange: required file not found: %s.%d-%d.efi", hc.h.filenameBase, item.startTxNum/hc.h.aggregationStep, item.endTxNum/hc.h.aggregationStep) + walkErr := fmt.Errorf("History.staticFilesInRange: required file not found: %s.%d-%d.efi", ht.h.filenameBase, item.startTxNum/ht.h.aggregationStep, item.endTxNum/ht.h.aggregationStep) return nil, nil, 0, walkErr } } @@ -427,8 +395,8 @@ func (hc *HistoryContext) staticFilesInRange(r HistoryRanges) (indexFiles, histo } // nolint -func (h *History) staticFilesInRange(r HistoryRanges, hc *HistoryContext) (indexFiles, historyFiles []*filesItem, startJ int, err error) { - panic("deprecated: use HistoryContext.staticFilesInRange") +func (h *History) staticFilesInRange(r HistoryRanges, hc *HistoryRoTx) (indexFiles, historyFiles []*filesItem, startJ int, err error) { + panic("deprecated: use HistoryRoTx.staticFilesInRange") } func mergeEfs(preval, val, buf []byte) ([]byte, error) { @@ -459,7 +427,7 @@ func (d *Domain) mergeFiles(ctx context.Context, valuesFiles, indexFiles, histor if !r.any() { return } - var comp *compress.Compressor + var comp *seg.Compressor closeItem := true defer func() { @@ -518,7 +486,7 @@ func (d *Domain) mergeFiles(ctx context.Context, valuesFiles, indexFiles, histor } datFileName := fmt.Sprintf("%s.%d-%d.kv", d.filenameBase, r.valuesStartTxNum/d.aggregationStep, r.valuesEndTxNum/d.aggregationStep) datPath := filepath.Join(d.dir, datFileName) - if comp, err = compress.NewCompressor(ctx, "merge", datPath, d.tmpdir, compress.MinPatternScore, workers, log.LvlTrace, d.logger); err != nil { + if comp, err = seg.NewCompressor(ctx, "merge", datPath, d.tmpdir, seg.MinPatternScore, workers, log.LvlTrace, d.logger); err != nil { return nil, nil, nil, fmt.Errorf("merge %s history compressor: %w", d.filenameBase, err) } if d.noFsync { @@ -621,7 +589,7 @@ func (d *Domain) mergeFiles(ctx context.Context, valuesFiles, indexFiles, histor comp = nil ps.Delete(p) valuesIn = newFilesItem(r.valuesStartTxNum, r.valuesEndTxNum, d.aggregationStep) - if valuesIn.decompressor, err = compress.NewDecompressor(datPath); err != nil { + if valuesIn.decompressor, err = seg.NewDecompressor(datPath); err != nil { return nil, nil, nil, fmt.Errorf("merge %s decompressor [%d-%d]: %w", d.filenameBase, r.valuesStartTxNum, r.valuesEndTxNum, err) } @@ -662,8 +630,8 @@ func (ii *InvertedIndex) mergeFiles(ctx context.Context, files []*filesItem, sta } var outItem *filesItem - var comp *compress.Compressor - var decomp *compress.Decompressor + var comp *seg.Compressor + var decomp *seg.Decompressor var err error var closeItem = true defer func() { @@ -691,7 +659,7 @@ func (ii *InvertedIndex) mergeFiles(ctx context.Context, files []*filesItem, sta datFileName := fmt.Sprintf("%s.%d-%d.ef", ii.filenameBase, startTxNum/ii.aggregationStep, endTxNum/ii.aggregationStep) datPath := filepath.Join(ii.dir, datFileName) - if comp, err = compress.NewCompressor(ctx, "Snapshots merge", datPath, ii.tmpdir, compress.MinPatternScore, workers, log.LvlTrace, ii.logger); err != nil { + if comp, err = seg.NewCompressor(ctx, "Snapshots merge", datPath, ii.tmpdir, seg.MinPatternScore, workers, log.LvlTrace, ii.logger); err != nil { return nil, fmt.Errorf("merge %s inverted index compressor: %w", ii.filenameBase, err) } if ii.noFsync { @@ -780,7 +748,7 @@ func (ii *InvertedIndex) mergeFiles(ctx context.Context, files []*filesItem, sta comp.Close() comp = nil outItem = newFilesItem(startTxNum, endTxNum, ii.aggregationStep) - if outItem.decompressor, err = compress.NewDecompressor(datPath); err != nil { + if outItem.decompressor, err = seg.NewDecompressor(datPath); err != nil { return nil, fmt.Errorf("merge %s decompressor [%d-%d]: %w", ii.filenameBase, startTxNum, endTxNum, err) } ps.Delete(p) @@ -820,8 +788,8 @@ func (h *History) mergeFiles(ctx context.Context, indexFiles, historyFiles []*fi defer f.decompressor.EnableMadvNormal().DisableReadAhead() } - var comp *compress.Compressor - var decomp *compress.Decompressor + var comp *seg.Compressor + var decomp *seg.Decompressor var rs *recsplit.RecSplit var index *recsplit.Index var closeItem = true @@ -853,7 +821,7 @@ func (h *History) mergeFiles(ctx context.Context, indexFiles, historyFiles []*fi idxFileName := fmt.Sprintf("%s.%d-%d.vi", h.filenameBase, r.historyStartTxNum/h.aggregationStep, r.historyEndTxNum/h.aggregationStep) datPath := filepath.Join(h.dir, datFileName) idxPath := filepath.Join(h.dir, idxFileName) - if comp, err = compress.NewCompressor(ctx, "merge", datPath, h.tmpdir, compress.MinPatternScore, workers, log.LvlTrace, h.logger); err != nil { + if comp, err = seg.NewCompressor(ctx, "merge", datPath, h.tmpdir, seg.MinPatternScore, workers, log.LvlTrace, h.logger); err != nil { return nil, nil, fmt.Errorf("merge %s history compressor: %w", h.filenameBase, err) } if h.noFsync { @@ -867,7 +835,7 @@ func (h *History) mergeFiles(ctx context.Context, indexFiles, historyFiles []*fi g := item.decompressor.MakeGetter() g.Reset(0) if g.HasNext() { - var g2 *compress.Getter + var g2 *seg.Getter for _, hi := range historyFiles { // full-scan, because it's ok to have different amount files. by unclean-shutdown. if hi.startTxNum == item.startTxNum && hi.endTxNum == item.endTxNum { g2 = hi.decompressor.MakeGetter() @@ -935,7 +903,7 @@ func (h *History) mergeFiles(ctx context.Context, indexFiles, historyFiles []*fi } comp.Close() comp = nil - if decomp, err = compress.NewDecompressor(datPath); err != nil { + if decomp, err = seg.NewDecompressor(datPath); err != nil { return nil, nil, err } ps.Delete(p) @@ -1016,12 +984,12 @@ func (h *History) mergeFiles(ctx context.Context, indexFiles, historyFiles []*fi func (d *Domain) integrateMergedFiles(valuesOuts, indexOuts, historyOuts []*filesItem, valuesIn, indexIn, historyIn *filesItem) { d.History.integrateMergedFiles(indexOuts, historyOuts, indexIn, historyIn) if valuesIn != nil { - d.files.Set(valuesIn) + d.dirtyFiles.Set(valuesIn) // `kill -9` may leave some garbage // but it still may be useful for merges, until we finish merge frozen file if historyIn != nil && historyIn.frozen { - d.files.Walk(func(items []*filesItem) bool { + d.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.frozen || item.endTxNum > valuesIn.endTxNum { continue @@ -1036,7 +1004,7 @@ func (d *Domain) integrateMergedFiles(valuesOuts, indexOuts, historyOuts []*file if out == nil { panic("must not happen") } - d.files.Delete(out) + d.dirtyFiles.Delete(out) out.canDelete.Store(true) } d.reCalcRoFiles() @@ -1044,12 +1012,12 @@ func (d *Domain) integrateMergedFiles(valuesOuts, indexOuts, historyOuts []*file func (ii *InvertedIndex) integrateMergedFiles(outs []*filesItem, in *filesItem) { if in != nil { - ii.files.Set(in) + ii.dirtyFiles.Set(in) // `kill -9` may leave some garbage // but it still may be useful for merges, until we finish merge frozen file if in.frozen { - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.frozen || item.endTxNum > in.endTxNum { continue @@ -1064,22 +1032,22 @@ func (ii *InvertedIndex) integrateMergedFiles(outs []*filesItem, in *filesItem) if out == nil { panic("must not happen: " + ii.filenameBase) } - ii.files.Delete(out) + ii.dirtyFiles.Delete(out) out.canDelete.Store(true) } - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() } func (h *History) integrateMergedFiles(indexOuts, historyOuts []*filesItem, indexIn, historyIn *filesItem) { h.InvertedIndex.integrateMergedFiles(indexOuts, indexIn) //TODO: handle collision if historyIn != nil { - h.files.Set(historyIn) + h.dirtyFiles.Set(historyIn) // `kill -9` may leave some garbage // but it still may be useful for merges, until we finish merge frozen file if historyIn.frozen { - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.frozen || item.endTxNum > historyIn.endTxNum { continue @@ -1094,49 +1062,49 @@ func (h *History) integrateMergedFiles(indexOuts, historyOuts []*filesItem, inde if out == nil { panic("must not happen: " + h.filenameBase) } - h.files.Delete(out) + h.dirtyFiles.Delete(out) out.canDelete.Store(true) } h.reCalcRoFiles() } // nolint -func (dc *DomainContext) frozenTo() uint64 { - if len(dc.files) == 0 { +func (dt *DomainRoTx) frozenTo() uint64 { + if len(dt.files) == 0 { return 0 } - for i := len(dc.files) - 1; i >= 0; i-- { - if dc.files[i].src.frozen { - return cmp.Min(dc.files[i].endTxNum, dc.hc.frozenTo()) + for i := len(dt.files) - 1; i >= 0; i-- { + if dt.files[i].src.frozen { + return cmp.Min(dt.files[i].endTxNum, dt.ht.frozenTo()) } } return 0 } -func (hc *HistoryContext) frozenTo() uint64 { - if len(hc.files) == 0 { +func (ht *HistoryRoTx) frozenTo() uint64 { + if len(ht.files) == 0 { return 0 } - for i := len(hc.files) - 1; i >= 0; i-- { - if hc.files[i].src.frozen { - return cmp.Min(hc.files[i].endTxNum, hc.ic.frozenTo()) + for i := len(ht.files) - 1; i >= 0; i-- { + if ht.files[i].src.frozen { + return cmp.Min(ht.files[i].endTxNum, ht.iit.frozenTo()) } } return 0 } -func (ic *InvertedIndexContext) frozenTo() uint64 { - if len(ic.files) == 0 { +func (iit *InvertedIndexRoTx) frozenTo() uint64 { + if len(iit.files) == 0 { return 0 } - for i := len(ic.files) - 1; i >= 0; i-- { - if ic.files[i].src.frozen { - return ic.files[i].endTxNum + for i := len(iit.files) - 1; i >= 0; i-- { + if iit.files[i].src.frozen { + return iit.files[i].endTxNum } } return 0 } -func (d *Domain) cleanAfterFreeze(frozenTo uint64) { +func (d *Domain) cleanAfterFreeze(frozenTo uint64) { //nolint if frozenTo == 0 { return } @@ -1144,7 +1112,7 @@ func (d *Domain) cleanAfterFreeze(frozenTo uint64) { var outs []*filesItem // `kill -9` may leave some garbage // but it may be useful for merges, until merge `frozen` file - d.files.Walk(func(items []*filesItem) bool { + d.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.frozen || item.endTxNum > frozenTo { continue @@ -1158,7 +1126,7 @@ func (d *Domain) cleanAfterFreeze(frozenTo uint64) { if out == nil { panic("must not happen: " + d.filenameBase) } - d.files.Delete(out) + d.dirtyFiles.Delete(out) if out.refcount.Load() == 0 { // if it has no readers (invisible even for us) - it's safe to remove file right here out.closeFilesAndRemove() @@ -1169,7 +1137,7 @@ func (d *Domain) cleanAfterFreeze(frozenTo uint64) { } // cleanAfterFreeze - mark all small files before `f` as `canDelete=true` -func (h *History) cleanAfterFreeze(frozenTo uint64) { +func (h *History) cleanAfterFreeze(frozenTo uint64) { //nolint if frozenTo == 0 { return } @@ -1179,7 +1147,7 @@ func (h *History) cleanAfterFreeze(frozenTo uint64) { var outs []*filesItem // `kill -9` may leave some garbage // but it may be useful for merges, until merge `frozen` file - h.files.Walk(func(items []*filesItem) bool { + h.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.frozen || item.endTxNum > frozenTo { continue @@ -1209,7 +1177,7 @@ func (h *History) cleanAfterFreeze(frozenTo uint64) { if out.refcount.Load() == 0 { out.closeFilesAndRemove() } - h.files.Delete(out) + h.dirtyFiles.Delete(out) } h.InvertedIndex.cleanAfterFreeze(frozenTo) } @@ -1222,7 +1190,7 @@ func (ii *InvertedIndex) cleanAfterFreeze(frozenTo uint64) { var outs []*filesItem // `kill -9` may leave some garbage // but it may be useful for merges, until merge `frozen` file - ii.files.Walk(func(items []*filesItem) bool { + ii.dirtyFiles.Walk(func(items []*filesItem) bool { for _, item := range items { if item.frozen || item.endTxNum > frozenTo { continue @@ -1241,7 +1209,7 @@ func (ii *InvertedIndex) cleanAfterFreeze(frozenTo uint64) { // if it has no readers (invisible even for us) - it's safe to remove file right here out.closeFilesAndRemove() } - ii.files.Delete(out) + ii.dirtyFiles.Delete(out) } } diff --git a/erigon-lib/state/merge_test.go b/erigon-lib/state/merge_test.go index 24b63de76a3..25865e65373 100644 --- a/erigon-lib/state/merge_test.go +++ b/erigon-lib/state/merge_test.go @@ -13,15 +13,15 @@ import ( func TestFindMergeRangeCornerCases(t *testing.T) { t.Run("> 2 unmerged files", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-2.ef", "test.2-3.ef", "test.3-4.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() - ic := ii.MakeContext() + ic := ii.BeginFilesRo() defer ic.Close() needMerge, from, to := ii.findMergeRange(4, 32) @@ -32,15 +32,15 @@ func TestFindMergeRangeCornerCases(t *testing.T) { idxF, _ := ic.staticFilesInRange(from, to) assert.Equal(t, 3, len(idxF)) - ii = &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii = &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-1.ef", "test.1-2.ef", "test.2-3.ef", "test.3-4.ef", }) - ii.reCalcRoFiles() - ic = ii.MakeContext() + ii.reCalcVisibleFiles() + ic = ii.BeginFilesRo() defer ic.Close() needMerge, from, to = ii.findMergeRange(4, 32) @@ -48,7 +48,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { assert.Equal(t, 0, int(from)) assert.Equal(t, 2, int(to)) - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", @@ -56,7 +56,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { "test.3-4.v", }) h.reCalcRoFiles() - ic = ii.MakeContext() + ic = ii.BeginFilesRo() defer ic.Close() r := h.findMergeRange(4, 32) @@ -65,23 +65,23 @@ func TestFindMergeRangeCornerCases(t *testing.T) { assert.Equal(t, 2, int(r.indexEndTxNum)) }) t.Run("not equal amount of files", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-1.ef", "test.1-2.ef", "test.2-3.ef", "test.3-4.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", }) h.reCalcRoFiles() - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r := h.findMergeRange(4, 32) @@ -92,22 +92,22 @@ func TestFindMergeRangeCornerCases(t *testing.T) { assert.Equal(t, 2, int(r.indexEndTxNum)) }) t.Run("idx merged, history not yet", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-2.ef", "test.2-3.ef", "test.3-4.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", }) h.reCalcRoFiles() - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r := h.findMergeRange(4, 32) @@ -117,7 +117,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { assert.Equal(t, 2, int(r.historyEndTxNum)) }) t.Run("idx merged, history not yet, 2", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-1.ef", "test.1-2.ef", @@ -125,9 +125,9 @@ func TestFindMergeRangeCornerCases(t *testing.T) { "test.3-4.ef", "test.0-4.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", @@ -136,7 +136,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { }) h.reCalcRoFiles() - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r := h.findMergeRange(4, 32) @@ -149,13 +149,13 @@ func TestFindMergeRangeCornerCases(t *testing.T) { require.Equal(t, 2, len(histFiles)) }) t.Run("idx merged and small files lost", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-4.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", @@ -164,7 +164,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { }) h.reCalcRoFiles() - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r := h.findMergeRange(4, 32) @@ -176,15 +176,15 @@ func TestFindMergeRangeCornerCases(t *testing.T) { }) t.Run("history merged, but index not and history garbage left", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-1.ef", "test.1-2.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() // `kill -9` may leave small garbage files, but if big one already exists we assume it's good(fsynced) and no reason to merge again - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", @@ -192,7 +192,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { }) h.reCalcRoFiles() - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r := h.findMergeRange(4, 32) @@ -205,7 +205,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { require.Equal(t, 0, len(histFiles)) }) t.Run("history merge progress ahead of idx", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-1.ef", "test.1-2.ef", @@ -213,9 +213,9 @@ func TestFindMergeRangeCornerCases(t *testing.T) { "test.2-3.ef", "test.3-4.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", @@ -225,7 +225,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { }) h.reCalcRoFiles() - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r := h.findMergeRange(4, 32) @@ -238,16 +238,16 @@ func TestFindMergeRangeCornerCases(t *testing.T) { require.Equal(t, 3, len(histFiles)) }) t.Run("idx merge progress ahead of history", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-1.ef", "test.1-2.ef", "test.0-2.ef", "test.2-3.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", @@ -255,7 +255,7 @@ func TestFindMergeRangeCornerCases(t *testing.T) { }) h.reCalcRoFiles() - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r := h.findMergeRange(4, 32) @@ -268,15 +268,15 @@ func TestFindMergeRangeCornerCases(t *testing.T) { require.Equal(t, 2, len(histFiles)) }) t.Run("idx merged, but garbage left", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-1.ef", "test.1-2.ef", "test.0-2.ef", }) - ii.reCalcRoFiles() + ii.reCalcVisibleFiles() - h := &History{InvertedIndex: ii, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + h := &History{InvertedIndex: ii, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} h.scanStateFiles([]string{ "test.0-1.v", "test.1-2.v", @@ -285,14 +285,14 @@ func TestFindMergeRangeCornerCases(t *testing.T) { }) h.reCalcRoFiles() - hc := h.MakeContext() + hc := h.BeginFilesRo() defer hc.Close() r := h.findMergeRange(4, 32) assert.False(t, r.index) assert.False(t, r.history) }) t.Run("idx merged, but garbage left2", func(t *testing.T) { - ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, files: btree2.NewBTreeG[*filesItem](filesItemLess)} + ii := &InvertedIndex{filenameBase: "test", aggregationStep: 1, dirtyFiles: btree2.NewBTreeG[*filesItem](filesItemLess)} ii.scanStateFiles([]string{ "test.0-1.ef", "test.1-2.ef", @@ -300,8 +300,8 @@ func TestFindMergeRangeCornerCases(t *testing.T) { "test.2-3.ef", "test.3-4.ef", }) - ii.reCalcRoFiles() - ic := ii.MakeContext() + ii.reCalcVisibleFiles() + ic := ii.BeginFilesRo() defer ic.Close() needMerge, from, to := ii.findMergeRange(4, 32) assert.True(t, needMerge) diff --git a/erigon-lib/state/state_recon.go b/erigon-lib/state/state_recon.go index 31babca99a4..2b8d0629ac6 100644 --- a/erigon-lib/state/state_recon.go +++ b/erigon-lib/state/state_recon.go @@ -20,15 +20,15 @@ import ( "bytes" "encoding/binary" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/recsplit" "github.com/ledgerwatch/erigon-lib/recsplit/eliasfano32" + "github.com/ledgerwatch/erigon-lib/seg" ) // Algorithms for reconstituting the state from state history type ReconItem struct { - g *compress.Getter + g *seg.Getter key []byte txNum uint64 startTxNum uint64 @@ -92,7 +92,7 @@ func (rh ReconHeapOlderFirst) Less(i, j int) bool { } type ScanIteratorInc struct { - g *compress.Getter + g *seg.Getter key []byte nextTxNum uint64 hasNext bool @@ -142,8 +142,8 @@ func (hs *HistoryStep) iterateTxs() *ScanIteratorInc { type HistoryIteratorInc struct { uptoTxNum uint64 - indexG *compress.Getter - historyG *compress.Getter + indexG *seg.Getter + historyG *seg.Getter r *recsplit.IndexReader key []byte nextKey []byte @@ -185,13 +185,15 @@ func (hii *HistoryIteratorInc) advance() { if n, ok := ef.Search(hii.uptoTxNum); ok { var txKey [8]byte binary.BigEndian.PutUint64(txKey[:], n) - offset := hii.r.Lookup2(txKey[:], hii.key) - hii.historyG.Reset(offset) - hii.nextKey = hii.key - if hii.compressVals { - hii.nextVal, _ = hii.historyG.Next(nil) - } else { - hii.nextVal, _ = hii.historyG.NextUncompressed() + offset, ok := hii.r.Lookup2(txKey[:], hii.key) + if ok { + hii.historyG.Reset(offset) + hii.nextKey = hii.key + if hii.compressVals { + hii.nextVal, _ = hii.historyG.Next(nil) + } else { + hii.nextVal, _ = hii.historyG.NextUncompressed() + } } } if hii.indexG.HasNext() { diff --git a/erigon-lib/tools.go b/erigon-lib/tools.go index 5188efdc85c..cc5eef6637f 100644 --- a/erigon-lib/tools.go +++ b/erigon-lib/tools.go @@ -26,6 +26,7 @@ import ( _ "github.com/ledgerwatch/interfaces/txpool" _ "github.com/ledgerwatch/interfaces/types" _ "github.com/ledgerwatch/interfaces/web3" - _ "github.com/matryer/moq" + _ "go.uber.org/mock/mockgen" + _ "go.uber.org/mock/mockgen/model" _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" ) diff --git a/erigon-lib/tools/golangci_lint.sh b/erigon-lib/tools/golangci_lint.sh index b569f88e239..0421f1be6d7 100755 --- a/erigon-lib/tools/golangci_lint.sh +++ b/erigon-lib/tools/golangci_lint.sh @@ -2,7 +2,7 @@ scriptDir=$(dirname "${BASH_SOURCE[0]}") scriptName=$(basename "${BASH_SOURCE[0]}") -version="v1.55.2" +version="v1.57.2" if [[ "$1" == "--install-deps" ]] then diff --git a/erigon-lib/tools/licenses_check.sh b/erigon-lib/tools/licenses_check.sh index 264c2599b25..6a285c1eff1 100755 --- a/erigon-lib/tools/licenses_check.sh +++ b/erigon-lib/tools/licenses_check.sh @@ -21,7 +21,7 @@ fi # enable build tags to cover maximum .go files export GOFLAGS="-tags=gorules,linux,tools" -output=$(find "$projectDir" -type 'd' -maxdepth 1 \ +output=$(find "$projectDir" -maxdepth 1 -type 'd' \ -not -name ".*" \ -not -name tools \ -not -name build \ @@ -30,9 +30,10 @@ output=$(find "$projectDir" -type 'd' -maxdepth 1 \ | grep -v "erigon-lib has empty version" `# self` \ | grep -v "golang.org/x/" `# a part of Go` \ | grep -v "crawshaw.io/sqlite" `# ISC` \ - | grep -v "erigon-lib/sais" `# MIT` \ + | grep -v "erigon-lib/seg/sais" `# MIT` \ | grep -v "github.com/anacrolix/go-libutp" `# MIT` \ | grep -v "github.com/cespare/xxhash/v2" `# MIT` \ + | grep -v "github.com/cespare/xxhash" `# MIT` \ | grep -v "github.com/anacrolix/mmsg" `# MPL-2.0` \ | grep -v "github.com/anacrolix/multiless" `# MPL-2.0` \ | grep -v "github.com/anacrolix/sync" `# MPL-2.0` \ diff --git a/erigon-lib/txpool/fetch.go b/erigon-lib/txpool/fetch.go index a4ca77bff1a..dd2cf359142 100644 --- a/erigon-lib/txpool/fetch.go +++ b/erigon-lib/txpool/fetch.go @@ -111,6 +111,7 @@ func (f *Fetch) ConnectSentries() { }(i) } } + func (f *Fetch) ConnectCore() { go func() { for { diff --git a/erigon-lib/txpool/fetch_test.go b/erigon-lib/txpool/fetch_test.go index b000f7d38e9..b03f474fc30 100644 --- a/erigon-lib/txpool/fetch_test.go +++ b/erigon-lib/txpool/fetch_test.go @@ -24,29 +24,35 @@ import ( "sync" "testing" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + "google.golang.org/grpc" + "github.com/ledgerwatch/erigon-lib/common/u256" "github.com/ledgerwatch/erigon-lib/direct" "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" - "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" - types3 "github.com/ledgerwatch/erigon-lib/types" - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" + erigonlibtypes "github.com/ledgerwatch/erigon-lib/types" ) func TestFetch(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - m := NewMockSentry(ctx) - sentryClient := direct.NewSentryClientDirect(direct.ETH66, m) - pool := &PoolMock{} + ctrl := gomock.NewController(t) + remoteKvClient := remote.NewMockKVClient(ctrl) + sentryServer := sentry.NewMockSentryServer(ctrl) + pool := NewMockPool(ctrl) + pool.EXPECT().Started().Return(true) - fetch := NewFetch(ctx, []direct.SentryClient{sentryClient}, pool, &remote.KVClientMock{}, nil, nil, *u256.N1, log.New()) + m := NewMockSentry(ctx, sentryServer) + sentryClient := direct.NewSentryClientDirect(direct.ETH66, m) + fetch := NewFetch(ctx, []direct.SentryClient{sentryClient}, pool, remoteKvClient, nil, nil, *u256.N1, log.New()) var wg sync.WaitGroup fetch.SetWaitGroup(&wg) m.StreamWg.Add(2) @@ -65,33 +71,58 @@ func TestFetch(t *testing.T) { } } wg.Wait() - } func TestSendTxPropagate(t *testing.T) { ctx, cancelFn := context.WithCancel(context.Background()) defer cancelFn() t.Run("few remote byHash", func(t *testing.T) { - m := NewMockSentry(ctx) + ctrl := gomock.NewController(t) + sentryServer := sentry.NewMockSentryServer(ctrl) + + times := 2 + requests := make([]*sentry.SendMessageToRandomPeersRequest, 0, times) + sentryServer.EXPECT(). + SendMessageToRandomPeers(gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, r *sentry.SendMessageToRandomPeersRequest) (*sentry.SentPeers, error) { + requests = append(requests, r) + return nil, nil + }). + Times(times) + + m := NewMockSentry(ctx, sentryServer) send := NewSend(ctx, []direct.SentryClient{direct.NewSentryClientDirect(direct.ETH68, m)}, nil, log.New()) send.BroadcastPooledTxs(testRlps(2), 100) send.AnnouncePooledTxs([]byte{0, 1}, []uint32{10, 15}, toHashes(1, 42), 100) - calls := m.SendMessageToRandomPeersCalls() - require.Equal(t, 2, len(calls)) + require.Equal(t, 2, len(requests)) - txsMessage := calls[0].SendMessageToRandomPeersRequest.Data + txsMessage := requests[0].Data assert.Equal(t, sentry.MessageId_TRANSACTIONS_66, txsMessage.Id) assert.Equal(t, 3, len(txsMessage.Data)) - txnHashesMessage := calls[1].SendMessageToRandomPeersRequest.Data + txnHashesMessage := requests[1].Data assert.Equal(t, sentry.MessageId_NEW_POOLED_TRANSACTION_HASHES_68, txnHashesMessage.Id) assert.Equal(t, 76, len(txnHashesMessage.Data)) }) + t.Run("much remote byHash", func(t *testing.T) { - m := NewMockSentry(ctx) + ctrl := gomock.NewController(t) + sentryServer := sentry.NewMockSentryServer(ctrl) + + times := 2 + requests := make([]*sentry.SendMessageToRandomPeersRequest, 0, times) + sentryServer.EXPECT(). + SendMessageToRandomPeers(gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, r *sentry.SendMessageToRandomPeersRequest) (*sentry.SentPeers, error) { + requests = append(requests, r) + return nil, nil + }). + Times(times) + + m := NewMockSentry(ctx, sentryServer) send := NewSend(ctx, []direct.SentryClient{direct.NewSentryClientDirect(direct.ETH68, m)}, nil, log.New()) - list := make(types3.Hashes, p2pTxPacketLimit*3) + list := make(erigonlibtypes.Hashes, p2pTxPacketLimit*3) for i := 0; i < len(list); i += 32 { b := []byte(fmt.Sprintf("%x", i)) copy(list[i:i+32], b) @@ -99,52 +130,69 @@ func TestSendTxPropagate(t *testing.T) { send.BroadcastPooledTxs(testRlps(len(list)/32), 100) send.AnnouncePooledTxs([]byte{0, 1, 2}, []uint32{10, 12, 14}, list, 100) - calls := m.SendMessageToRandomPeersCalls() - require.Equal(t, 2, len(calls)) + require.Equal(t, 2, len(requests)) - txsMessage := calls[0].SendMessageToRandomPeersRequest.Data + txsMessage := requests[0].Data require.Equal(t, sentry.MessageId_TRANSACTIONS_66, txsMessage.Id) require.True(t, len(txsMessage.Data) > 0) - txnHashesMessage := calls[1].SendMessageToRandomPeersRequest.Data + txnHashesMessage := requests[1].Data require.Equal(t, sentry.MessageId_NEW_POOLED_TRANSACTION_HASHES_68, txnHashesMessage.Id) require.True(t, len(txnHashesMessage.Data) > 0) }) + t.Run("few local byHash", func(t *testing.T) { - m := NewMockSentry(ctx) - m.SendMessageToAllFunc = func(contextMoqParam context.Context, outboundMessageData *sentry.OutboundMessageData) (*sentry.SentPeers, error) { - return &sentry.SentPeers{Peers: make([]*types.H512, 5)}, nil - } + ctrl := gomock.NewController(t) + sentryServer := sentry.NewMockSentryServer(ctrl) + + times := 2 + requests := make([]*sentry.SendMessageToRandomPeersRequest, 0, times) + sentryServer.EXPECT(). + SendMessageToRandomPeers(gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, r *sentry.SendMessageToRandomPeersRequest) (*sentry.SentPeers, error) { + requests = append(requests, r) + return nil, nil + }). + Times(times) + + m := NewMockSentry(ctx, sentryServer) send := NewSend(ctx, []direct.SentryClient{direct.NewSentryClientDirect(direct.ETH68, m)}, nil, log.New()) send.BroadcastPooledTxs(testRlps(2), 100) send.AnnouncePooledTxs([]byte{0, 1}, []uint32{10, 15}, toHashes(1, 42), 100) - calls := m.SendMessageToRandomPeersCalls() - require.Equal(t, 2, len(calls)) + require.Equal(t, 2, len(requests)) - txsMessage := calls[0].SendMessageToRandomPeersRequest.Data + txsMessage := requests[0].Data assert.Equal(t, sentry.MessageId_TRANSACTIONS_66, txsMessage.Id) assert.True(t, len(txsMessage.Data) > 0) - txnHashesMessage := calls[1].SendMessageToRandomPeersRequest.Data + txnHashesMessage := requests[1].Data assert.Equal(t, sentry.MessageId_NEW_POOLED_TRANSACTION_HASHES_68, txnHashesMessage.Id) assert.Equal(t, 76, len(txnHashesMessage.Data)) }) + t.Run("sync with new peer", func(t *testing.T) { - m := NewMockSentry(ctx) + ctrl := gomock.NewController(t) + sentryServer := sentry.NewMockSentryServer(ctrl) - m.SendMessageToAllFunc = func(contextMoqParam context.Context, outboundMessageData *sentry.OutboundMessageData) (*sentry.SentPeers, error) { - return &sentry.SentPeers{Peers: make([]*types.H512, 5)}, nil - } + times := 3 + requests := make([]*sentry.SendMessageByIdRequest, 0, times) + sentryServer.EXPECT(). + SendMessageById(gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, r *sentry.SendMessageByIdRequest) (*sentry.SentPeers, error) { + requests = append(requests, r) + return nil, nil + }). + Times(times) + + m := NewMockSentry(ctx, sentryServer) send := NewSend(ctx, []direct.SentryClient{direct.NewSentryClientDirect(direct.ETH68, m)}, nil, log.New()) expectPeers := toPeerIDs(1, 2, 42) send.PropagatePooledTxsToPeersList(expectPeers, []byte{0, 1}, []uint32{10, 15}, toHashes(1, 42)) - calls := m.SendMessageByIdCalls() - require.Equal(t, 3, len(calls)) - for i, call := range calls { - req := call.SendMessageByIdRequest - assert.Equal(t, expectPeers[i], types3.PeerID(req.PeerId)) + require.Equal(t, 3, len(requests)) + for i, req := range requests { + assert.Equal(t, expectPeers[i], erigonlibtypes.PeerID(req.PeerId)) assert.Equal(t, sentry.MessageId_NEW_POOLED_TRANSACTION_HASHES_68, req.Data.Id) assert.True(t, len(req.Data.Data) > 0) } @@ -162,10 +210,13 @@ func TestOnNewBlock(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() coreDB, db := memdb.NewTestDB(t), memdb.NewTestDB(t) + ctrl := gomock.NewController(t) + stream := remote.NewMockKV_StateChangesClient(ctrl) i := 0 - stream := &remote.KV_StateChangesClientMock{ - RecvFunc: func() (*remote.StateChangeBatch, error) { + stream.EXPECT(). + Recv(). + DoAndReturn(func() (*remote.StateChangeBatch, error) { if i > 0 { return nil, io.EOF } @@ -173,20 +224,57 @@ func TestOnNewBlock(t *testing.T) { return &remote.StateChangeBatch{ StateVersionId: 1, ChangeBatch: []*remote.StateChange{ - {Txs: [][]byte{decodeHex(types3.TxParseMainnetTests[0].PayloadStr), decodeHex(types3.TxParseMainnetTests[1].PayloadStr), decodeHex(types3.TxParseMainnetTests[2].PayloadStr)}, BlockHeight: 1, BlockHash: gointerfaces.ConvertHashToH256([32]byte{})}, + { + Txs: [][]byte{ + decodeHex(erigonlibtypes.TxParseMainnetTests[0].PayloadStr), + decodeHex(erigonlibtypes.TxParseMainnetTests[1].PayloadStr), + decodeHex(erigonlibtypes.TxParseMainnetTests[2].PayloadStr), + }, + BlockHeight: 1, + BlockHash: gointerfaces.ConvertHashToH256([32]byte{}), + }, }, }, nil - }, - } - stateChanges := &remote.KVClientMock{ - StateChangesFunc: func(ctx context.Context, in *remote.StateChangeRequest, opts ...grpc.CallOption) (remote.KV_StateChangesClient, error) { + }). + AnyTimes() + + stateChanges := remote.NewMockKVClient(ctrl) + stateChanges. + EXPECT(). + StateChanges(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, _ *remote.StateChangeRequest, _ ...grpc.CallOption) (remote.KV_StateChangesClient, error) { return stream, nil - }, - } - pool := &PoolMock{} + }) + + pool := NewMockPool(ctrl) + + pool.EXPECT(). + ValidateSerializedTxn(gomock.Any()). + DoAndReturn(func(_ []byte) error { + return nil + }). + Times(3) + + var minedTxs erigonlibtypes.TxSlots + pool.EXPECT(). + OnNewBlock(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn( + func( + _ context.Context, + _ *remote.StateChangeBatch, + _ erigonlibtypes.TxSlots, + _ erigonlibtypes.TxSlots, + minedTxsArg erigonlibtypes.TxSlots, + _ kv.Tx, + ) error { + minedTxs = minedTxsArg + return nil + }, + ). + Times(1) + fetch := NewFetch(ctx, nil, pool, stateChanges, coreDB, db, *u256.N1, log.New()) err := fetch.handleStateChanges(ctx, stateChanges) assert.ErrorIs(t, io.EOF, err) - assert.Equal(t, 1, len(pool.OnNewBlockCalls())) - assert.Equal(t, 3, len(pool.OnNewBlockCalls()[0].MinedTxs.Txs)) + assert.Equal(t, 3, len(minedTxs.Txs)) } diff --git a/erigon-lib/txpool/mocks_test.go b/erigon-lib/txpool/mocks_test.go deleted file mode 100644 index 502b4a69002..00000000000 --- a/erigon-lib/txpool/mocks_test.go +++ /dev/null @@ -1,515 +0,0 @@ -// Code generated by moq; DO NOT EDIT. -// github.com/matryer/moq - -package txpool - -import ( - "context" - "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg" - types2 "github.com/ledgerwatch/erigon-lib/types" - "sync" -) - -// Ensure, that PoolMock does implement Pool. -// If this is not the case, regenerate this file with moq. -var _ Pool = &PoolMock{} - -// PoolMock is a mock implementation of Pool. -// -// func TestSomethingThatUsesPool(t *testing.T) { -// -// // make and configure a mocked Pool -// mockedPool := &PoolMock{ -// AddLocalTxsFunc: func(ctx context.Context, newTxs types2.TxSlots, tx kv.Tx) ([]txpoolcfg.DiscardReason, error) { -// panic("mock out the AddLocalTxs method") -// }, -// AddNewGoodPeerFunc: func(peerID types2.PeerID) { -// panic("mock out the AddNewGoodPeer method") -// }, -// AddRemoteTxsFunc: func(ctx context.Context, newTxs types2.TxSlots) { -// panic("mock out the AddRemoteTxs method") -// }, -// FilterKnownIdHashesFunc: func(tx kv.Tx, hashes types2.Hashes) (types2.Hashes, error) { -// panic("mock out the FilterKnownIdHashes method") -// }, -// GetRlpFunc: func(tx kv.Tx, hash []byte) ([]byte, error) { -// panic("mock out the GetRlp method") -// }, -// IdHashKnownFunc: func(tx kv.Tx, hash []byte) (bool, error) { -// panic("mock out the IdHashKnown method") -// }, -// OnNewBlockFunc: func(ctx context.Context, stateChanges *remote.StateChangeBatch, unwindTxs types2.TxSlots, unwindBlobTxs types2.TxSlots, minedTxs types2.TxSlots, tx kv.Tx) error { -// panic("mock out the OnNewBlock method") -// }, -// StartedFunc: func() bool { -// panic("mock out the Started method") -// }, -// ValidateSerializedTxnFunc: func(serializedTxn []byte) error { -// panic("mock out the ValidateSerializedTxn method") -// }, -// } -// -// // use mockedPool in code that requires Pool -// // and then make assertions. -// -// } -type PoolMock struct { - // AddLocalTxsFunc mocks the AddLocalTxs method. - AddLocalTxsFunc func(ctx context.Context, newTxs types2.TxSlots, tx kv.Tx) ([]txpoolcfg.DiscardReason, error) - - // AddNewGoodPeerFunc mocks the AddNewGoodPeer method. - AddNewGoodPeerFunc func(peerID types2.PeerID) - - // AddRemoteTxsFunc mocks the AddRemoteTxs method. - AddRemoteTxsFunc func(ctx context.Context, newTxs types2.TxSlots) - - // FilterKnownIdHashesFunc mocks the FilterKnownIdHashes method. - FilterKnownIdHashesFunc func(tx kv.Tx, hashes types2.Hashes) (types2.Hashes, error) - - // GetRlpFunc mocks the GetRlp method. - GetRlpFunc func(tx kv.Tx, hash []byte) ([]byte, error) - - // IdHashKnownFunc mocks the IdHashKnown method. - IdHashKnownFunc func(tx kv.Tx, hash []byte) (bool, error) - - // OnNewBlockFunc mocks the OnNewBlock method. - OnNewBlockFunc func(ctx context.Context, stateChanges *remote.StateChangeBatch, unwindTxs types2.TxSlots, unwindBlobTxs types2.TxSlots, minedTxs types2.TxSlots, tx kv.Tx) error - - // StartedFunc mocks the Started method. - StartedFunc func() bool - - // ValidateSerializedTxnFunc mocks the ValidateSerializedTxn method. - ValidateSerializedTxnFunc func(serializedTxn []byte) error - - // calls tracks calls to the methods. - calls struct { - // AddLocalTxs holds details about calls to the AddLocalTxs method. - AddLocalTxs []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // NewTxs is the newTxs argument value. - NewTxs types2.TxSlots - // Tx is the tx argument value. - Tx kv.Tx - } - // AddNewGoodPeer holds details about calls to the AddNewGoodPeer method. - AddNewGoodPeer []struct { - // PeerID is the peerID argument value. - PeerID types2.PeerID - } - // AddRemoteTxs holds details about calls to the AddRemoteTxs method. - AddRemoteTxs []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // NewTxs is the newTxs argument value. - NewTxs types2.TxSlots - } - // FilterKnownIdHashes holds details about calls to the FilterKnownIdHashes method. - FilterKnownIdHashes []struct { - // Tx is the tx argument value. - Tx kv.Tx - // Hashes is the hashes argument value. - Hashes types2.Hashes - } - // GetRlp holds details about calls to the GetRlp method. - GetRlp []struct { - // Tx is the tx argument value. - Tx kv.Tx - // Hash is the hash argument value. - Hash []byte - } - // IdHashKnown holds details about calls to the IdHashKnown method. - IdHashKnown []struct { - // Tx is the tx argument value. - Tx kv.Tx - // Hash is the hash argument value. - Hash []byte - } - // OnNewBlock holds details about calls to the OnNewBlock method. - OnNewBlock []struct { - // Ctx is the ctx argument value. - Ctx context.Context - // StateChanges is the stateChanges argument value. - StateChanges *remote.StateChangeBatch - // UnwindTxs is the unwindTxs argument value. - UnwindTxs types2.TxSlots - // UnwindBlobTxs is the unwindBlobTxs argument value. - UnwindBlobTxs types2.TxSlots - // MinedTxs is the minedTxs argument value. - MinedTxs types2.TxSlots - // Tx is the tx argument value. - Tx kv.Tx - } - // Started holds details about calls to the Started method. - Started []struct { - } - // ValidateSerializedTxn holds details about calls to the ValidateSerializedTxn method. - ValidateSerializedTxn []struct { - // SerializedTxn is the serializedTxn argument value. - SerializedTxn []byte - } - } - lockAddLocalTxs sync.RWMutex - lockAddNewGoodPeer sync.RWMutex - lockAddRemoteTxs sync.RWMutex - lockFilterKnownIdHashes sync.RWMutex - lockGetRlp sync.RWMutex - lockIdHashKnown sync.RWMutex - lockOnNewBlock sync.RWMutex - lockStarted sync.RWMutex - lockValidateSerializedTxn sync.RWMutex -} - -// AddLocalTxs calls AddLocalTxsFunc. -func (mock *PoolMock) AddLocalTxs(ctx context.Context, newTxs types2.TxSlots, tx kv.Tx) ([]txpoolcfg.DiscardReason, error) { - callInfo := struct { - Ctx context.Context - NewTxs types2.TxSlots - Tx kv.Tx - }{ - Ctx: ctx, - NewTxs: newTxs, - Tx: tx, - } - mock.lockAddLocalTxs.Lock() - mock.calls.AddLocalTxs = append(mock.calls.AddLocalTxs, callInfo) - mock.lockAddLocalTxs.Unlock() - if mock.AddLocalTxsFunc == nil { - var ( - discardReasonsOut []txpoolcfg.DiscardReason - errOut error - ) - return discardReasonsOut, errOut - } - return mock.AddLocalTxsFunc(ctx, newTxs, tx) -} - -// AddLocalTxsCalls gets all the calls that were made to AddLocalTxs. -// Check the length with: -// -// len(mockedPool.AddLocalTxsCalls()) -func (mock *PoolMock) AddLocalTxsCalls() []struct { - Ctx context.Context - NewTxs types2.TxSlots - Tx kv.Tx -} { - var calls []struct { - Ctx context.Context - NewTxs types2.TxSlots - Tx kv.Tx - } - mock.lockAddLocalTxs.RLock() - calls = mock.calls.AddLocalTxs - mock.lockAddLocalTxs.RUnlock() - return calls -} - -// AddNewGoodPeer calls AddNewGoodPeerFunc. -func (mock *PoolMock) AddNewGoodPeer(peerID types2.PeerID) { - callInfo := struct { - PeerID types2.PeerID - }{ - PeerID: peerID, - } - mock.lockAddNewGoodPeer.Lock() - mock.calls.AddNewGoodPeer = append(mock.calls.AddNewGoodPeer, callInfo) - mock.lockAddNewGoodPeer.Unlock() - if mock.AddNewGoodPeerFunc == nil { - return - } - mock.AddNewGoodPeerFunc(peerID) -} - -// AddNewGoodPeerCalls gets all the calls that were made to AddNewGoodPeer. -// Check the length with: -// -// len(mockedPool.AddNewGoodPeerCalls()) -func (mock *PoolMock) AddNewGoodPeerCalls() []struct { - PeerID types2.PeerID -} { - var calls []struct { - PeerID types2.PeerID - } - mock.lockAddNewGoodPeer.RLock() - calls = mock.calls.AddNewGoodPeer - mock.lockAddNewGoodPeer.RUnlock() - return calls -} - -// AddRemoteTxs calls AddRemoteTxsFunc. -func (mock *PoolMock) AddRemoteTxs(ctx context.Context, newTxs types2.TxSlots) { - callInfo := struct { - Ctx context.Context - NewTxs types2.TxSlots - }{ - Ctx: ctx, - NewTxs: newTxs, - } - mock.lockAddRemoteTxs.Lock() - mock.calls.AddRemoteTxs = append(mock.calls.AddRemoteTxs, callInfo) - mock.lockAddRemoteTxs.Unlock() - if mock.AddRemoteTxsFunc == nil { - return - } - mock.AddRemoteTxsFunc(ctx, newTxs) -} - -// AddRemoteTxsCalls gets all the calls that were made to AddRemoteTxs. -// Check the length with: -// -// len(mockedPool.AddRemoteTxsCalls()) -func (mock *PoolMock) AddRemoteTxsCalls() []struct { - Ctx context.Context - NewTxs types2.TxSlots -} { - var calls []struct { - Ctx context.Context - NewTxs types2.TxSlots - } - mock.lockAddRemoteTxs.RLock() - calls = mock.calls.AddRemoteTxs - mock.lockAddRemoteTxs.RUnlock() - return calls -} - -// FilterKnownIdHashes calls FilterKnownIdHashesFunc. -func (mock *PoolMock) FilterKnownIdHashes(tx kv.Tx, hashes types2.Hashes) (types2.Hashes, error) { - callInfo := struct { - Tx kv.Tx - Hashes types2.Hashes - }{ - Tx: tx, - Hashes: hashes, - } - mock.lockFilterKnownIdHashes.Lock() - mock.calls.FilterKnownIdHashes = append(mock.calls.FilterKnownIdHashes, callInfo) - mock.lockFilterKnownIdHashes.Unlock() - if mock.FilterKnownIdHashesFunc == nil { - var ( - unknownHashesOut types2.Hashes - errOut error - ) - return unknownHashesOut, errOut - } - return mock.FilterKnownIdHashesFunc(tx, hashes) -} - -// FilterKnownIdHashesCalls gets all the calls that were made to FilterKnownIdHashes. -// Check the length with: -// -// len(mockedPool.FilterKnownIdHashesCalls()) -func (mock *PoolMock) FilterKnownIdHashesCalls() []struct { - Tx kv.Tx - Hashes types2.Hashes -} { - var calls []struct { - Tx kv.Tx - Hashes types2.Hashes - } - mock.lockFilterKnownIdHashes.RLock() - calls = mock.calls.FilterKnownIdHashes - mock.lockFilterKnownIdHashes.RUnlock() - return calls -} - -// GetRlp calls GetRlpFunc. -func (mock *PoolMock) GetRlp(tx kv.Tx, hash []byte) ([]byte, error) { - callInfo := struct { - Tx kv.Tx - Hash []byte - }{ - Tx: tx, - Hash: hash, - } - mock.lockGetRlp.Lock() - mock.calls.GetRlp = append(mock.calls.GetRlp, callInfo) - mock.lockGetRlp.Unlock() - if mock.GetRlpFunc == nil { - var ( - bytesOut []byte - errOut error - ) - return bytesOut, errOut - } - return mock.GetRlpFunc(tx, hash) -} - -// GetRlpCalls gets all the calls that were made to GetRlp. -// Check the length with: -// -// len(mockedPool.GetRlpCalls()) -func (mock *PoolMock) GetRlpCalls() []struct { - Tx kv.Tx - Hash []byte -} { - var calls []struct { - Tx kv.Tx - Hash []byte - } - mock.lockGetRlp.RLock() - calls = mock.calls.GetRlp - mock.lockGetRlp.RUnlock() - return calls -} - -// IdHashKnown calls IdHashKnownFunc. -func (mock *PoolMock) IdHashKnown(tx kv.Tx, hash []byte) (bool, error) { - callInfo := struct { - Tx kv.Tx - Hash []byte - }{ - Tx: tx, - Hash: hash, - } - mock.lockIdHashKnown.Lock() - mock.calls.IdHashKnown = append(mock.calls.IdHashKnown, callInfo) - mock.lockIdHashKnown.Unlock() - if mock.IdHashKnownFunc == nil { - var ( - bOut bool - errOut error - ) - return bOut, errOut - } - return mock.IdHashKnownFunc(tx, hash) -} - -// IdHashKnownCalls gets all the calls that were made to IdHashKnown. -// Check the length with: -// -// len(mockedPool.IdHashKnownCalls()) -func (mock *PoolMock) IdHashKnownCalls() []struct { - Tx kv.Tx - Hash []byte -} { - var calls []struct { - Tx kv.Tx - Hash []byte - } - mock.lockIdHashKnown.RLock() - calls = mock.calls.IdHashKnown - mock.lockIdHashKnown.RUnlock() - return calls -} - -// OnNewBlock calls OnNewBlockFunc. -func (mock *PoolMock) OnNewBlock(ctx context.Context, stateChanges *remote.StateChangeBatch, unwindTxs types2.TxSlots, unwindBlobTxs types2.TxSlots, minedTxs types2.TxSlots, tx kv.Tx) error { - callInfo := struct { - Ctx context.Context - StateChanges *remote.StateChangeBatch - UnwindTxs types2.TxSlots - UnwindBlobTxs types2.TxSlots - MinedTxs types2.TxSlots - Tx kv.Tx - }{ - Ctx: ctx, - StateChanges: stateChanges, - UnwindTxs: unwindTxs, - UnwindBlobTxs: unwindBlobTxs, - MinedTxs: minedTxs, - Tx: tx, - } - mock.lockOnNewBlock.Lock() - mock.calls.OnNewBlock = append(mock.calls.OnNewBlock, callInfo) - mock.lockOnNewBlock.Unlock() - if mock.OnNewBlockFunc == nil { - var ( - errOut error - ) - return errOut - } - return mock.OnNewBlockFunc(ctx, stateChanges, unwindTxs, unwindBlobTxs, minedTxs, tx) -} - -// OnNewBlockCalls gets all the calls that were made to OnNewBlock. -// Check the length with: -// -// len(mockedPool.OnNewBlockCalls()) -func (mock *PoolMock) OnNewBlockCalls() []struct { - Ctx context.Context - StateChanges *remote.StateChangeBatch - UnwindTxs types2.TxSlots - UnwindBlobTxs types2.TxSlots - MinedTxs types2.TxSlots - Tx kv.Tx -} { - var calls []struct { - Ctx context.Context - StateChanges *remote.StateChangeBatch - UnwindTxs types2.TxSlots - UnwindBlobTxs types2.TxSlots - MinedTxs types2.TxSlots - Tx kv.Tx - } - mock.lockOnNewBlock.RLock() - calls = mock.calls.OnNewBlock - mock.lockOnNewBlock.RUnlock() - return calls -} - -// Started calls StartedFunc. -func (mock *PoolMock) Started() bool { - callInfo := struct { - }{} - mock.lockStarted.Lock() - mock.calls.Started = append(mock.calls.Started, callInfo) - mock.lockStarted.Unlock() - if mock.StartedFunc == nil { - var ( - bOut bool - ) - return bOut - } - return mock.StartedFunc() -} - -// StartedCalls gets all the calls that were made to Started. -// Check the length with: -// -// len(mockedPool.StartedCalls()) -func (mock *PoolMock) StartedCalls() []struct { -} { - var calls []struct { - } - mock.lockStarted.RLock() - calls = mock.calls.Started - mock.lockStarted.RUnlock() - return calls -} - -// ValidateSerializedTxn calls ValidateSerializedTxnFunc. -func (mock *PoolMock) ValidateSerializedTxn(serializedTxn []byte) error { - callInfo := struct { - SerializedTxn []byte - }{ - SerializedTxn: serializedTxn, - } - mock.lockValidateSerializedTxn.Lock() - mock.calls.ValidateSerializedTxn = append(mock.calls.ValidateSerializedTxn, callInfo) - mock.lockValidateSerializedTxn.Unlock() - if mock.ValidateSerializedTxnFunc == nil { - var ( - errOut error - ) - return errOut - } - return mock.ValidateSerializedTxnFunc(serializedTxn) -} - -// ValidateSerializedTxnCalls gets all the calls that were made to ValidateSerializedTxn. -// Check the length with: -// -// len(mockedPool.ValidateSerializedTxnCalls()) -func (mock *PoolMock) ValidateSerializedTxnCalls() []struct { - SerializedTxn []byte -} { - var calls []struct { - SerializedTxn []byte - } - mock.lockValidateSerializedTxn.RLock() - calls = mock.calls.ValidateSerializedTxn - mock.lockValidateSerializedTxn.RUnlock() - return calls -} diff --git a/erigon-lib/txpool/pool.go b/erigon-lib/txpool/pool.go index be769bdcc74..efcdc8e4f8f 100644 --- a/erigon-lib/txpool/pool.go +++ b/erigon-lib/txpool/pool.go @@ -52,7 +52,7 @@ import ( "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/grpcutil" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" - proto_txpool "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" + txpoolproto "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcache" "github.com/ledgerwatch/erigon-lib/kv/mdbx" @@ -61,8 +61,11 @@ import ( "github.com/ledgerwatch/erigon-lib/rlp" "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg" "github.com/ledgerwatch/erigon-lib/types" + types2 "github.com/ledgerwatch/erigon-lib/types" ) +const DefaultBlockGasLimit = uint64(30000000) + var ( processBatchTxsTimer = metrics.NewSummary(`pool_process_remote_txs`) addRemoteTxsTimer = metrics.NewSummary(`pool_add_remote_txs`) @@ -81,6 +84,8 @@ var TraceAll = false // Pool is interface for the transaction pool // This interface exists for the convenience of testing, and not yet because // there are multiple implementations +// +//go:generate mockgen -typed=true -destination=./pool_mock.go -package=txpool . Pool type Pool interface { ValidateSerializedTxn(serializedTxn []byte) error @@ -219,6 +224,7 @@ type TxPool struct { pendingBaseFee atomic.Uint64 pendingBlobFee atomic.Uint64 // For gas accounting for blobs, which has its own dimension blockGasLimit atomic.Uint64 + totalBlobsInPool atomic.Uint64 shanghaiTime *uint64 isPostShanghai atomic.Bool agraBlock *uint64 @@ -233,7 +239,7 @@ type TxPool struct { } type FeeCalculator interface { - CurrentFees(chainConfig *chain.Config, db kv.Getter) (baseFee uint64, blobFee uint64, minBlobGasPrice uint64, err error) + CurrentFees(chainConfig *chain.Config, db kv.Getter) (baseFee uint64, blobFee uint64, minBlobGasPrice, blockGasLimit uint64, err error) } func New(newTxs chan types.Announcements, coreDB kv.RoDB, cfg txpoolcfg.Config, cache kvcache.Cache, @@ -477,7 +483,37 @@ func (p *TxPool) OnNewBlock(ctx context.Context, stateChanges *remote.StateChang pendingBlobFee := stateChanges.PendingBlobFeePerGas p.setBlobFee(pendingBlobFee) - p.blockGasLimit.Store(stateChanges.BlockGasLimit) + oldGasLimit := p.blockGasLimit.Swap(stateChanges.BlockGasLimit) + if oldGasLimit != stateChanges.BlockGasLimit { + p.all.ascendAll(func(mt *metaTx) bool { + var updated bool + if mt.Tx.Gas < stateChanges.BlockGasLimit { + updated = (mt.subPool & NotTooMuchGas) > 0 + mt.subPool |= NotTooMuchGas + } else { + updated = (mt.subPool & NotTooMuchGas) == 0 + mt.subPool &^= NotTooMuchGas + } + + if mt.Tx.Traced { + p.logger.Info("TX TRACING: on block gas limit update", "idHash", fmt.Sprintf("%x", mt.Tx.IDHash), "senderId", mt.Tx.SenderID, "nonce", mt.Tx.Nonce, "subPool", mt.currentSubPool, "updated", updated) + } + + if !updated { + return true + } + + switch mt.currentSubPool { + case PendingSubPool: + p.pending.Updated(mt) + case BaseFeeSubPool: + p.baseFee.Updated(mt) + case QueuedSubPool: + p.queued.Updated(mt) + } + return true + }) + } for i, txn := range unwindBlobTxs.Txs { if txn.Type == types.BlobTxType { @@ -727,14 +763,15 @@ func (p *TxPool) getCachedBlobTxnLocked(tx kv.Tx, hash []byte) (*metaTx, error) return nil, nil } - txn, err := tx.GetOne(kv.PoolTransaction, hash) + v, err := tx.GetOne(kv.PoolTransaction, hash) if err != nil { return nil, err } + txRlp := common.Copy(v[20:]) parseCtx := types.NewTxParseContext(p.chainID) parseCtx.WithSender(false) txSlot := &types.TxSlot{} - parseCtx.ParseTransaction(txn, 0, txSlot, nil, false, true, nil) + parseCtx.ParseTransaction(txRlp, 0, txSlot, nil, false, true, nil) return newMetaTx(txSlot, false, 0), nil } @@ -887,10 +924,8 @@ func (p *TxPool) validateTx(txn *types.TxSlot, isLocal bool, stateCache kvcache. } isShanghai := p.isShanghai() || p.isAgra() - if isShanghai { - if txn.DataLen > fixedgas.MaxInitCodeSize { - return txpoolcfg.InitCodeTooLarge - } + if isShanghai && txn.Creation && txn.DataLen > fixedgas.MaxInitCodeSize { + return txpoolcfg.InitCodeTooLarge // EIP-3860 } if txn.Type == types.BlobTxType { if !p.isCancun() { @@ -926,6 +961,19 @@ func (p *TxPool) validateTx(txn *types.TxSlot, isLocal bool, stateCache kvcache. if err != nil { return txpoolcfg.UnmatchedBlobTxExt } + + if !isLocal && (p.all.blobCount(txn.SenderID)+uint64(len(txn.BlobHashes))) > p.cfg.BlobSlots { + if txn.Traced { + p.logger.Info(fmt.Sprintf("TX TRACING: validateTx marked as spamming (too many blobs) idHash=%x slots=%d, limit=%d", txn.IDHash, p.all.count(txn.SenderID), p.cfg.AccountSlots)) + } + return txpoolcfg.Spammer + } + if p.totalBlobsInPool.Load() >= p.cfg.TotalBlobPoolLimit { + if txn.Traced { + p.logger.Info(fmt.Sprintf("TX TRACING: validateTx total blobs limit reached in pool limit=%x current blobs=%d", p.cfg.TotalBlobPoolLimit, p.totalBlobsInPool.Load())) + } + return txpoolcfg.BlobPoolOverflow + } } // Drop non-local transactions under our own minimal accepted gas price or tip @@ -957,14 +1005,8 @@ func (p *TxPool) validateTx(txn *types.TxSlot, isLocal bool, stateCache kvcache. } return txpoolcfg.Spammer } - if !isLocal && p.all.blobCount(txn.SenderID) > p.cfg.BlobSlots { - if txn.Traced { - p.logger.Info(fmt.Sprintf("TX TRACING: validateTx marked as spamming (too many blobs) idHash=%x slots=%d, limit=%d", txn.IDHash, p.all.count(txn.SenderID), p.cfg.AccountSlots)) - } - return txpoolcfg.Spammer - } - // check nonce and balance + // Check nonce and balance senderNonce, senderBalance, _ := p.senders.info(stateCache, txn.SenderID) if senderNonce > txn.Nonce { if txn.Traced { @@ -1102,7 +1144,7 @@ func (p *TxPool) isCancun() bool { return activated } -// Check that that the serialized txn should not exceed a certain max size +// Check that the serialized txn should not exceed a certain max size func (p *TxPool) ValidateSerializedTxn(serializedTxn []byte) error { const ( // txSlotSize is used to calculate how many data slots a single transaction @@ -1405,7 +1447,7 @@ func (p *TxPool) setBaseFee(baseFee uint64) (uint64, bool) { func (p *TxPool) setBlobFee(blobFee uint64) { if blobFee > 0 { - p.pendingBaseFee.Store(blobFee) + p.pendingBlobFee.Store(blobFee) } } @@ -1486,6 +1528,11 @@ func (p *TxPool) addLocked(mt *metaTx, announcements *types.Announcements) txpoo } // All transactions are first added to the queued pool and then immediately promoted from there if required p.queued.Add(mt, "addLocked", p.logger) + if mt.Tx.Type == types.BlobTxType { + t := p.totalBlobsInPool.Load() + p.totalBlobsInPool.Store(t + (uint64(len(mt.Tx.BlobHashes)))) + } + // Remove from mined cache as we are now "resurrecting" it to a sub-pool p.deleteMinedBlobTxn(hashStr) return txpoolcfg.NotSet @@ -1499,6 +1546,10 @@ func (p *TxPool) discardLocked(mt *metaTx, reason txpoolcfg.DiscardReason) { p.deletedTxs = append(p.deletedTxs, mt) p.all.delete(mt, reason, p.logger) p.discardReasonsLRU.Add(hashStr, reason) + if mt.Tx.Type == types.BlobTxType { + t := p.totalBlobsInPool.Load() + p.totalBlobsInPool.Store(t - uint64(len(mt.Tx.BlobHashes))) + } } // Cache recently mined blobs in anticipation of reorg, delete finalized ones @@ -1905,6 +1956,11 @@ func MainLoop(ctx context.Context, db kv.RwDB, p *TxPool, newTxs chan types.Anno if len(slotRlp) == 0 { continue } + // Strip away blob wrapper, if applicable + slotRlp, err2 := types2.UnwrapTxPlayloadRlp(slotRlp) + if err2 != nil { + continue + } // Empty rlp can happen if a transaction we want to broadcast has just been mined, for example slotsRlp = append(slotsRlp, slotRlp) @@ -1935,8 +1991,7 @@ func MainLoop(ctx context.Context, db kv.RwDB, p *TxPool, newTxs chan types.Anno return } if newSlotsStreams != nil { - // TODO(eip-4844) What is this for? Is it OK to broadcast blob transactions? - newSlotsStreams.Broadcast(&proto_txpool.OnAddReply{RplTxs: slotsRlp}, p.logger) + newSlotsStreams.Broadcast(&txpoolproto.OnAddReply{RplTxs: slotsRlp}, p.logger) } // broadcast local transactions @@ -2106,7 +2161,7 @@ func (p *TxPool) fromDB(ctx context.Context, tx kv.Tx, coreTx kv.Tx) error { p.lastSeenBlock.Store(lastSeenBlock) } - // this is neccessary as otherwise best - which waits for sync events + // this is necessary as otherwise best - which waits for sync events // may wait for ever if blocks have been process before the txpool // starts with an empty db lastSeenProgress, err := getExecutionProgress(coreTx) @@ -2180,11 +2235,14 @@ func (p *TxPool) fromDB(ctx context.Context, tx kv.Tx, coreTx kv.Tx) error { i++ } - var pendingBaseFee, pendingBlobFee, minBlobGasPrice uint64 + var pendingBaseFee, pendingBlobFee, minBlobGasPrice, blockGasLimit uint64 if p.feeCalculator != nil { if chainConfig, _ := ChainConfig(tx); chainConfig != nil { - pendingBaseFee, pendingBlobFee, minBlobGasPrice, _ = p.feeCalculator.CurrentFees(chainConfig, coreTx) + pendingBaseFee, pendingBlobFee, minBlobGasPrice, blockGasLimit, err = p.feeCalculator.CurrentFees(chainConfig, coreTx) + if err != nil { + return err + } } } @@ -2212,16 +2270,21 @@ func (p *TxPool) fromDB(ctx context.Context, tx kv.Tx, coreTx kv.Tx) error { pendingBlobFee = minBlobGasPrice } + if blockGasLimit == 0 { + blockGasLimit = DefaultBlockGasLimit + } + err = p.senders.registerNewSenders(&txs, p.logger) if err != nil { return err } if _, _, err := p.addTxs(p.lastSeenBlock.Load(), cacheView, p.senders, txs, - pendingBaseFee, pendingBlobFee, math.MaxUint64 /* blockGasLimit */, false, p.logger); err != nil { + pendingBaseFee, pendingBlobFee, blockGasLimit, false, p.logger); err != nil { return err } p.pendingBaseFee.Store(pendingBaseFee) p.pendingBlobFee.Store(pendingBlobFee) + p.blockGasLimit.Store(blockGasLimit) return nil } diff --git a/erigon-lib/txpool/pool_mock.go b/erigon-lib/txpool/pool_mock.go new file mode 100644 index 00000000000..8d34190039e --- /dev/null +++ b/erigon-lib/txpool/pool_mock.go @@ -0,0 +1,386 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon-lib/txpool (interfaces: Pool) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./pool_mock.go -package=txpool . Pool +// + +// Package txpool is a generated GoMock package. +package txpool + +import ( + context "context" + reflect "reflect" + + remote "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" + kv "github.com/ledgerwatch/erigon-lib/kv" + txpoolcfg "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg" + types "github.com/ledgerwatch/erigon-lib/types" + gomock "go.uber.org/mock/gomock" +) + +// MockPool is a mock of Pool interface. +type MockPool struct { + ctrl *gomock.Controller + recorder *MockPoolMockRecorder +} + +// MockPoolMockRecorder is the mock recorder for MockPool. +type MockPoolMockRecorder struct { + mock *MockPool +} + +// NewMockPool creates a new mock instance. +func NewMockPool(ctrl *gomock.Controller) *MockPool { + mock := &MockPool{ctrl: ctrl} + mock.recorder = &MockPoolMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockPool) EXPECT() *MockPoolMockRecorder { + return m.recorder +} + +// AddLocalTxs mocks base method. +func (m *MockPool) AddLocalTxs(arg0 context.Context, arg1 types.TxSlots, arg2 kv.Tx) ([]txpoolcfg.DiscardReason, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddLocalTxs", arg0, arg1, arg2) + ret0, _ := ret[0].([]txpoolcfg.DiscardReason) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddLocalTxs indicates an expected call of AddLocalTxs. +func (mr *MockPoolMockRecorder) AddLocalTxs(arg0, arg1, arg2 any) *MockPoolAddLocalTxsCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddLocalTxs", reflect.TypeOf((*MockPool)(nil).AddLocalTxs), arg0, arg1, arg2) + return &MockPoolAddLocalTxsCall{Call: call} +} + +// MockPoolAddLocalTxsCall wrap *gomock.Call +type MockPoolAddLocalTxsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolAddLocalTxsCall) Return(arg0 []txpoolcfg.DiscardReason, arg1 error) *MockPoolAddLocalTxsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolAddLocalTxsCall) Do(f func(context.Context, types.TxSlots, kv.Tx) ([]txpoolcfg.DiscardReason, error)) *MockPoolAddLocalTxsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolAddLocalTxsCall) DoAndReturn(f func(context.Context, types.TxSlots, kv.Tx) ([]txpoolcfg.DiscardReason, error)) *MockPoolAddLocalTxsCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// AddNewGoodPeer mocks base method. +func (m *MockPool) AddNewGoodPeer(arg0 types.PeerID) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "AddNewGoodPeer", arg0) +} + +// AddNewGoodPeer indicates an expected call of AddNewGoodPeer. +func (mr *MockPoolMockRecorder) AddNewGoodPeer(arg0 any) *MockPoolAddNewGoodPeerCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddNewGoodPeer", reflect.TypeOf((*MockPool)(nil).AddNewGoodPeer), arg0) + return &MockPoolAddNewGoodPeerCall{Call: call} +} + +// MockPoolAddNewGoodPeerCall wrap *gomock.Call +type MockPoolAddNewGoodPeerCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolAddNewGoodPeerCall) Return() *MockPoolAddNewGoodPeerCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolAddNewGoodPeerCall) Do(f func(types.PeerID)) *MockPoolAddNewGoodPeerCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolAddNewGoodPeerCall) DoAndReturn(f func(types.PeerID)) *MockPoolAddNewGoodPeerCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// AddRemoteTxs mocks base method. +func (m *MockPool) AddRemoteTxs(arg0 context.Context, arg1 types.TxSlots) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "AddRemoteTxs", arg0, arg1) +} + +// AddRemoteTxs indicates an expected call of AddRemoteTxs. +func (mr *MockPoolMockRecorder) AddRemoteTxs(arg0, arg1 any) *MockPoolAddRemoteTxsCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddRemoteTxs", reflect.TypeOf((*MockPool)(nil).AddRemoteTxs), arg0, arg1) + return &MockPoolAddRemoteTxsCall{Call: call} +} + +// MockPoolAddRemoteTxsCall wrap *gomock.Call +type MockPoolAddRemoteTxsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolAddRemoteTxsCall) Return() *MockPoolAddRemoteTxsCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolAddRemoteTxsCall) Do(f func(context.Context, types.TxSlots)) *MockPoolAddRemoteTxsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolAddRemoteTxsCall) DoAndReturn(f func(context.Context, types.TxSlots)) *MockPoolAddRemoteTxsCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FilterKnownIdHashes mocks base method. +func (m *MockPool) FilterKnownIdHashes(arg0 kv.Tx, arg1 types.Hashes) (types.Hashes, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FilterKnownIdHashes", arg0, arg1) + ret0, _ := ret[0].(types.Hashes) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FilterKnownIdHashes indicates an expected call of FilterKnownIdHashes. +func (mr *MockPoolMockRecorder) FilterKnownIdHashes(arg0, arg1 any) *MockPoolFilterKnownIdHashesCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilterKnownIdHashes", reflect.TypeOf((*MockPool)(nil).FilterKnownIdHashes), arg0, arg1) + return &MockPoolFilterKnownIdHashesCall{Call: call} +} + +// MockPoolFilterKnownIdHashesCall wrap *gomock.Call +type MockPoolFilterKnownIdHashesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolFilterKnownIdHashesCall) Return(arg0 types.Hashes, arg1 error) *MockPoolFilterKnownIdHashesCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolFilterKnownIdHashesCall) Do(f func(kv.Tx, types.Hashes) (types.Hashes, error)) *MockPoolFilterKnownIdHashesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolFilterKnownIdHashesCall) DoAndReturn(f func(kv.Tx, types.Hashes) (types.Hashes, error)) *MockPoolFilterKnownIdHashesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetRlp mocks base method. +func (m *MockPool) GetRlp(arg0 kv.Tx, arg1 []byte) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRlp", arg0, arg1) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRlp indicates an expected call of GetRlp. +func (mr *MockPoolMockRecorder) GetRlp(arg0, arg1 any) *MockPoolGetRlpCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRlp", reflect.TypeOf((*MockPool)(nil).GetRlp), arg0, arg1) + return &MockPoolGetRlpCall{Call: call} +} + +// MockPoolGetRlpCall wrap *gomock.Call +type MockPoolGetRlpCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolGetRlpCall) Return(arg0 []byte, arg1 error) *MockPoolGetRlpCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolGetRlpCall) Do(f func(kv.Tx, []byte) ([]byte, error)) *MockPoolGetRlpCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolGetRlpCall) DoAndReturn(f func(kv.Tx, []byte) ([]byte, error)) *MockPoolGetRlpCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// IdHashKnown mocks base method. +func (m *MockPool) IdHashKnown(arg0 kv.Tx, arg1 []byte) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "IdHashKnown", arg0, arg1) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// IdHashKnown indicates an expected call of IdHashKnown. +func (mr *MockPoolMockRecorder) IdHashKnown(arg0, arg1 any) *MockPoolIdHashKnownCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IdHashKnown", reflect.TypeOf((*MockPool)(nil).IdHashKnown), arg0, arg1) + return &MockPoolIdHashKnownCall{Call: call} +} + +// MockPoolIdHashKnownCall wrap *gomock.Call +type MockPoolIdHashKnownCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolIdHashKnownCall) Return(arg0 bool, arg1 error) *MockPoolIdHashKnownCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolIdHashKnownCall) Do(f func(kv.Tx, []byte) (bool, error)) *MockPoolIdHashKnownCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolIdHashKnownCall) DoAndReturn(f func(kv.Tx, []byte) (bool, error)) *MockPoolIdHashKnownCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// OnNewBlock mocks base method. +func (m *MockPool) OnNewBlock(arg0 context.Context, arg1 *remote.StateChangeBatch, arg2, arg3, arg4 types.TxSlots, arg5 kv.Tx) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnNewBlock", arg0, arg1, arg2, arg3, arg4, arg5) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnNewBlock indicates an expected call of OnNewBlock. +func (mr *MockPoolMockRecorder) OnNewBlock(arg0, arg1, arg2, arg3, arg4, arg5 any) *MockPoolOnNewBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnNewBlock", reflect.TypeOf((*MockPool)(nil).OnNewBlock), arg0, arg1, arg2, arg3, arg4, arg5) + return &MockPoolOnNewBlockCall{Call: call} +} + +// MockPoolOnNewBlockCall wrap *gomock.Call +type MockPoolOnNewBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolOnNewBlockCall) Return(arg0 error) *MockPoolOnNewBlockCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolOnNewBlockCall) Do(f func(context.Context, *remote.StateChangeBatch, types.TxSlots, types.TxSlots, types.TxSlots, kv.Tx) error) *MockPoolOnNewBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolOnNewBlockCall) DoAndReturn(f func(context.Context, *remote.StateChangeBatch, types.TxSlots, types.TxSlots, types.TxSlots, kv.Tx) error) *MockPoolOnNewBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Started mocks base method. +func (m *MockPool) Started() bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Started") + ret0, _ := ret[0].(bool) + return ret0 +} + +// Started indicates an expected call of Started. +func (mr *MockPoolMockRecorder) Started() *MockPoolStartedCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Started", reflect.TypeOf((*MockPool)(nil).Started)) + return &MockPoolStartedCall{Call: call} +} + +// MockPoolStartedCall wrap *gomock.Call +type MockPoolStartedCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolStartedCall) Return(arg0 bool) *MockPoolStartedCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolStartedCall) Do(f func() bool) *MockPoolStartedCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolStartedCall) DoAndReturn(f func() bool) *MockPoolStartedCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// ValidateSerializedTxn mocks base method. +func (m *MockPool) ValidateSerializedTxn(arg0 []byte) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ValidateSerializedTxn", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// ValidateSerializedTxn indicates an expected call of ValidateSerializedTxn. +func (mr *MockPoolMockRecorder) ValidateSerializedTxn(arg0 any) *MockPoolValidateSerializedTxnCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ValidateSerializedTxn", reflect.TypeOf((*MockPool)(nil).ValidateSerializedTxn), arg0) + return &MockPoolValidateSerializedTxnCall{Call: call} +} + +// MockPoolValidateSerializedTxnCall wrap *gomock.Call +type MockPoolValidateSerializedTxnCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockPoolValidateSerializedTxnCall) Return(arg0 error) *MockPoolValidateSerializedTxnCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockPoolValidateSerializedTxnCall) Do(f func([]byte) error) *MockPoolValidateSerializedTxnCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockPoolValidateSerializedTxnCall) DoAndReturn(f func([]byte) error) *MockPoolValidateSerializedTxnCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/erigon-lib/txpool/pool_test.go b/erigon-lib/txpool/pool_test.go index 98dc31c2893..e6cb599e68b 100644 --- a/erigon-lib/txpool/pool_test.go +++ b/erigon-lib/txpool/pool_test.go @@ -645,26 +645,43 @@ func TestShanghaiValidateTx(t *testing.T) { expected txpoolcfg.DiscardReason dataLen int isShanghai bool + creation bool }{ "no shanghai": { expected: txpoolcfg.Success, dataLen: 32, isShanghai: false, + creation: true, }, "shanghai within bounds": { expected: txpoolcfg.Success, dataLen: 32, isShanghai: true, + creation: true, }, - "shanghai exactly on bound": { + "shanghai exactly on bound - create tx": { expected: txpoolcfg.Success, dataLen: fixedgas.MaxInitCodeSize, isShanghai: true, + creation: true, }, - "shanghai one over bound": { + "shanghai one over bound - create tx": { expected: txpoolcfg.InitCodeTooLarge, dataLen: fixedgas.MaxInitCodeSize + 1, isShanghai: true, + creation: true, + }, + "shanghai exactly on bound - calldata tx": { + expected: txpoolcfg.Success, + dataLen: fixedgas.MaxInitCodeSize, + isShanghai: true, + creation: false, + }, + "shanghai one over bound - calldata tx": { + expected: txpoolcfg.Success, + dataLen: fixedgas.MaxInitCodeSize + 1, + isShanghai: true, + creation: false, }, } @@ -700,7 +717,7 @@ func TestShanghaiValidateTx(t *testing.T) { FeeCap: *uint256.NewInt(21000), Gas: 500000, SenderID: 0, - Creation: true, + Creation: test.creation, } txns := types.TxSlots{ @@ -873,23 +890,15 @@ func TestBlobTxReplacement(t *testing.T) { // Todo, make the tx more realistic with good values func makeBlobTx() types.TxSlot { - // Some arbitrary hardcoded example - bodyRlpHex := "f9012705078502540be4008506fc23ac008357b58494811a752c8cd697e3cb27" + - "279c330ed1ada745a8d7808204f7f872f85994de0b295669a9fd93d5f28d9ec85e40f4cb697b" + - "aef842a00000000000000000000000000000000000000000000000000000000000000003a000" + - "00000000000000000000000000000000000000000000000000000000000007d694bb9bc244d7" + - "98123fde783fcc1c72d3bb8c189413c07bf842a0c6bdd1de713471bd6cfa62dd8b5a5b42969e" + - "d09e26212d3377f3f8426d8ec210a08aaeccaf3873d07cef005aca28c39f8a9f8bdb1ec8d79f" + - "fc25afc0a4fa2ab73601a036b241b061a36a32ab7fe86c7aa9eb592dd59018cd0443adc09035" + - "90c16b02b0a05edcc541b4741c5cc6dd347c5ed9577ef293a62787b4510465fadbfe39ee4094" - bodyRlp := hexutility.MustDecodeHex(bodyRlpHex) + + bodyRlp := hexutility.MustDecodeHex(BodyRlpHex) blobsRlpPrefix := hexutility.MustDecodeHex("fa040008") blobRlpPrefix := hexutility.MustDecodeHex("ba020000") var blob0, blob1 = gokzg4844.Blob{}, gokzg4844.Blob{} - copy(blob0[:], hexutility.MustDecodeHex(validBlob1)) - copy(blob1[:], hexutility.MustDecodeHex(validBlob2)) + copy(blob0[:], hexutility.MustDecodeHex(ValidBlob1Hex)) + copy(blob1[:], hexutility.MustDecodeHex(ValidBlob2Hex)) var err error proofsRlpPrefix := hexutility.MustDecodeHex("f862") @@ -1045,3 +1054,153 @@ func TestDropRemoteAtNoGossip(t *testing.T) { // no announcement because unprocessedRemoteTxs is already empty assert.True(checkAnnouncementEmpty()) } + +func TestBlobSlots(t *testing.T) { + assert, require := assert.New(t), require.New(t) + ch := make(chan types.Announcements, 5) + db, coreDB := memdb.NewTestPoolDB(t), memdb.NewTestDB(t) + cfg := txpoolcfg.DefaultConfig + + //Setting limits for blobs in the pool + cfg.TotalBlobPoolLimit = 20 + + sendersCache := kvcache.New(kvcache.DefaultCoherentConfig) + pool, err := New(ch, coreDB, cfg, sendersCache, *u256.N1, common.Big0, nil, common.Big0, fixedgas.DefaultMaxBlobsPerBlock, nil, log.New()) + assert.NoError(err) + require.True(pool != nil) + ctx := context.Background() + var stateVersionID uint64 = 0 + + h1 := gointerfaces.ConvertHashToH256([32]byte{}) + change := &remote.StateChangeBatch{ + StateVersionId: stateVersionID, + PendingBlockBaseFee: 200_000, + BlockGasLimit: 1000000, + PendingBlobFeePerGas: 100_000, + ChangeBatch: []*remote.StateChange{ + {BlockHeight: 0, BlockHash: h1}, + }, + } + var addr [20]byte + + // Add 1 eth to the user account, as a part of change + v := make([]byte, types.EncodeSenderLengthForStorage(0, *uint256.NewInt(1 * common.Ether))) + types.EncodeSender(0, *uint256.NewInt(1 * common.Ether), v) + + for i := 0; i < 11; i++ { + addr[0] = uint8(i + 1) + change.ChangeBatch[0].Changes = append(change.ChangeBatch[0].Changes, &remote.AccountChange{ + Action: remote.Action_UPSERT, + Address: gointerfaces.ConvertAddressToH160(addr), + Data: v, + }) + } + + tx, err := db.BeginRw(ctx) + require.NoError(err) + defer tx.Rollback() + err = pool.OnNewBlock(ctx, change, types.TxSlots{}, types.TxSlots{}, types.TxSlots{}, tx) + assert.NoError(err) + + //Adding 20 blobs from 10 different accounts + for i := 0; i < int(cfg.TotalBlobPoolLimit/2); i++ { + txSlots := types.TxSlots{} + addr[0] = uint8(i + 1) + blobTxn := makeBlobTx() // makes a txn with 2 blobs + blobTxn.IDHash[0] = uint8(2*i + 1) + blobTxn.Nonce = 0 + txSlots.Append(&blobTxn, addr[:], true) + reasons, err := pool.AddLocalTxs(ctx, txSlots, tx) + assert.NoError(err) + for _, reason := range reasons { + assert.Equal(txpoolcfg.Success, reason, reason.String()) + } + } + + // Adding another blob tx should reject + txSlots := types.TxSlots{} + addr[0] = 11 + blobTxn := makeBlobTx() + blobTxn.IDHash[0] = uint8(21) + blobTxn.Nonce = 0 + + txSlots.Append(&blobTxn, addr[:], true) + reasons, err := pool.AddLocalTxs(ctx, txSlots, tx) + assert.NoError(err) + for _, reason := range reasons { + assert.Equal(txpoolcfg.BlobPoolOverflow, reason, reason.String()) + } +} + +func TestGasLimitChanged(t *testing.T) { + assert, require := assert.New(t), require.New(t) + ch := make(chan types.Announcements, 100) + db, coreDB := memdb.NewTestPoolDB(t), memdb.NewTestDB(t) + + cfg := txpoolcfg.DefaultConfig + sendersCache := kvcache.New(kvcache.DefaultCoherentConfig) + pool, err := New(ch, coreDB, cfg, sendersCache, *u256.N1, nil, nil, nil, fixedgas.DefaultMaxBlobsPerBlock, nil, log.New()) + assert.NoError(err) + require.True(pool != nil) + ctx := context.Background() + var stateVersionID uint64 = 0 + pendingBaseFee := uint64(200000) + // start blocks from 0, set empty hash - then kvcache will also work on this + h1 := gointerfaces.ConvertHashToH256([32]byte{}) + var addr [20]byte + addr[0] = 1 + v := make([]byte, types.EncodeSenderLengthForStorage(2, *uint256.NewInt(1 * common.Ether))) + types.EncodeSender(2, *uint256.NewInt(1 * common.Ether), v) + tx, err := db.BeginRw(ctx) + require.NoError(err) + defer tx.Rollback() + + change := &remote.StateChangeBatch{ + StateVersionId: stateVersionID, + PendingBlockBaseFee: pendingBaseFee, + BlockGasLimit: 50_000, + ChangeBatch: []*remote.StateChange{ + {BlockHeight: 0, BlockHash: h1}, + }, + } + change.ChangeBatch[0].Changes = append(change.ChangeBatch[0].Changes, &remote.AccountChange{ + Action: remote.Action_UPSERT, + Address: gointerfaces.ConvertAddressToH160(addr), + Data: v, + }) + err = pool.OnNewBlock(ctx, change, types.TxSlots{}, types.TxSlots{}, types.TxSlots{}, tx) + assert.NoError(err) + + var txSlots types.TxSlots + txSlot1 := &types.TxSlot{ + Tip: *uint256.NewInt(300000), + FeeCap: *uint256.NewInt(300000), + Gas: 100_000, + Nonce: 3, + } + txSlot1.IDHash[0] = 1 + txSlots.Append(txSlot1, addr[:], true) + + reasons, err := pool.AddLocalTxs(ctx, txSlots, tx) + assert.NoError(err) + for _, reason := range reasons { + assert.Equal(txpoolcfg.Success, reason, reason.String()) + } + + mtx, ok := pool.byHash[string(txSlot1.IDHash[:])] + assert.True(ok) + assert.Zero(mtx.subPool&NotTooMuchGas, "Should be insufficient block space for the tx") + + change.ChangeBatch[0].Changes = nil + change.BlockGasLimit = 150_000 + err = pool.OnNewBlock(ctx, change, types.TxSlots{}, types.TxSlots{}, types.TxSlots{}, tx) + assert.NoError(err) + + assert.NotZero(mtx.subPool&NotTooMuchGas, "Should now have block space for the tx") + + change.BlockGasLimit = 50_000 + err = pool.OnNewBlock(ctx, change, types.TxSlots{}, types.TxSlots{}, types.TxSlots{}, tx) + assert.NoError(err) + + assert.Zero(mtx.subPool&NotTooMuchGas, "Should now have block space (again) for the tx") +} diff --git a/erigon-lib/txpool/test_util.go b/erigon-lib/txpool/test_util.go index 93c52f810a9..695c23a4a86 100644 --- a/erigon-lib/txpool/test_util.go +++ b/erigon-lib/txpool/test_util.go @@ -20,25 +20,27 @@ import ( "context" "sync" + "google.golang.org/protobuf/types/known/emptypb" + "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" "github.com/ledgerwatch/erigon-lib/types" - "google.golang.org/protobuf/types/known/emptypb" ) -//go:generate moq -stub -out mocks_test.go . Pool - type MockSentry struct { ctx context.Context - *sentry.SentryServerMock + *sentry.MockSentryServer streams map[sentry.MessageId][]sentry.Sentry_MessagesServer peersStreams []sentry.Sentry_PeerEventsServer StreamWg sync.WaitGroup lock sync.RWMutex } -func NewMockSentry(ctx context.Context) *MockSentry { - return &MockSentry{ctx: ctx, SentryServerMock: &sentry.SentryServerMock{}} +func NewMockSentry(ctx context.Context, sentryServer *sentry.MockSentryServer) *MockSentry { + return &MockSentry{ + ctx: ctx, + MockSentryServer: sentryServer, + } } var peerID types.PeerID = gointerfaces.ConvertHashToH512([64]byte{0x12, 0x34, 0x50}) // "12345" diff --git a/erigon-lib/txpool/testdata.go b/erigon-lib/txpool/testdata.go index 9668ee688ab..5e1b1dc849b 100644 --- a/erigon-lib/txpool/testdata.go +++ b/erigon-lib/txpool/testdata.go @@ -1,8 +1,19 @@ package txpool const ( + + // Some arbitrary hardcoded example + BodyRlpHex string = "f9012705078502540be4008506fc23ac008357b58494811a752c8cd697e3cb27" + + "279c330ed1ada745a8d7808204f7f872f85994de0b295669a9fd93d5f28d9ec85e40f4cb697b" + + "aef842a00000000000000000000000000000000000000000000000000000000000000003a000" + + "00000000000000000000000000000000000000000000000000000000000007d694bb9bc244d7" + + "98123fde783fcc1c72d3bb8c189413c07bf842a0c6bdd1de713471bd6cfa62dd8b5a5b42969e" + + "d09e26212d3377f3f8426d8ec210a08aaeccaf3873d07cef005aca28c39f8a9f8bdb1ec8d79f" + + "fc25afc0a4fa2ab73601a036b241b061a36a32ab7fe86c7aa9eb592dd59018cd0443adc09035" + + "90c16b02b0a05edcc541b4741c5cc6dd347c5ed9577ef293a62787b4510465fadbfe39ee4094" + // Just an encoded valid blob txn - validBlob1 string = "824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffc6092c566b31415be66313fbfb2f13fd56212dfe8000d200800000007fffffff84d37e37a3c8aae349928a7775c40a7a570681bcd001be41100000010ffffffef26821fa14f77df20ff1776e6aedf77458d12939700396c2300000022ffffffdd4d043f429eefbe41fe2eedcd5dbeee8b1a25272e0072d84600000045ffffffba261ad7321441ff3bc9240392b1dc0510e08caa5900e7548d0000008cffffff734c35ae642883fe779248072563b80a21c11954b201cea91a00000119fffffee6247db575276a7fa6f1563642bdce3c3e2e750561039ef63500000234fffffdcb48fb6aea4ed4ff4de2ac6c857b9c787c5cea0ac2073dec6a00000469fffffb961e092e81740c8153921f0102ed9718f3661671810e7d7cd5000008d4fffff72b3c125d02e81902a7243e0205db2e31e6cc2ce3021cfaf9aa000011a9ffffee56043712b2a694880615422c03acba8bc8449c220139f7975500002354ffffdcab086e25654d29100c2a845807597517908938440273ef2eaa000046a9ffffb95610dc4aca9a5220185508b00eb2ea2f2112708804e7de5d5400008d53ffff72ac21b8959534a44030aa11601d65d45e4224e11009cfbcbaa800011aa7fffee55843712b2a694880615422c03acba8bc8449c220139f7975500002354ffffdcab012f4af01a8f3837a750ba86d8dafa1033fc69c243ef48ea100046aa0fffb955f25e95e0351e706f4ea1750db1b5f42067f8d38487de91d420008d541fff72abe4bd2bc06a3ce0de9d42ea1b636be840cff1a7090fbd23a840011aa83ffee557c23b7d0ba1dfe9e8b75236b6463db3014aa773d1ef7a6190900235508ffdcaaf7476fa1743bfd3d16ea46d6c8c7b6602954ee7a3def4c32120046aa11ffb955ee1af19b954e5cfce5a153d58985cae84d561f5078de9a0825008d5424ff72abdb35e3372a9cb9f9cb42a7ab130b95d09aac3ea0f1bd34104a011aa849fee557b66bc66e553973f396854f5626172ba135587d41e37a68209402355093fdcaaf6c639f3557494a69e4d764d44424b56a655d3cdfc3f4d1e529046aa128fb955ed75350c35b68f756817b8fd0803fc8fcc566bc1b84e9a56e5308d54252f72abdad32b3df63a8512fbac3e5c8f875f0218579ba9306d34c80a711aa84a6ee557b596567bec750a25f7587cb91f0ebe0430af375260da699014e2355094ddcaaf6b256e1d63b77a741a2dc5d4bd9ce1eae10932ca8184d33a69d46aa129cb955ed6339d60523c5b105fd8580bfab929b841bd29bac2d9a68f13b8d54253a72abdac573ac0a478b620bfb0b017f5725370837a537585b34d1e2771aa84a74e557b58a736a6d3bed269aade2c926a640cc3869f6b10cb369a568ef355094eacaaf6b1372e73324b0afb8139258754477f698ce99a47563d34c75df6aa129d6955ed62571e0bef637c1f2def1771280e64b5997df8b46c4a69a8fbfd54253ae2abdac496fd3d69945e66875afb44cf9c2f4db2a6b58e9864d36c380aa84a75d557b58916bba05df622f53a32c2ec1eb7c47de4f82f42f099a6f2b0255094ebbaaf6b1216386646b9ac129fe2523abceeeede499b22aba1034dffa05aa129d7855ed6241531f21840be4d6b4170d7f95d439f12e1097d01d69c1980c54253af1abdac48132509bb4ee2c301ffae127239ed20a56cd71fc37d384d419a84a75e457b5890164a13769dc58603ff5c24e473da414ad9ae3f86fa709a8335094ebc8af6b12025554c7808f134337b84ac48671a65155e20a4cdc4e14f467a129d7925ed6240336bbe7adf48909273d5bb104d9aacaa67056f5b59c2b8cd04253af25bdac48056d77cf5be912124e7ab76209b355954ce0adeb6b385719a084a75e4b7b58900a6701f764a886a754c234ec0b5d0952946d9e32d370afd742094ebc97f6b120135a164776276fd1615130000eb070cd23877ec1a3e1615285129d7930ed624025403ee7992542257a6f262815573fc241bb3fdf44c2c4490b253af262dac480490c9027df20e6cdacab127822a4ddac7e22c21a86858a36174a75e4c6b589009119204fbe41cd9b595624f04549bb58fc4584350d0b146c2e94ebc98d6b12012232409f7c839b36b2ac49e08a9376b1f88b086a1a1628d85d29d7931ad624024464813ef907366d655893c11526ed63f11610d4342c51b0ba53af2635ac4804885514d69ee4cf5d827dedaa224438efdcd864046558a50575a75e4c6c5890090f363c05eaa0013dbcc8a17c3c7ed007b45d0a64c7b14baeec4ebc98d9b120121d6c780bd540027b799142f878fda00f68ba14c98f62975dd89d7931b36240243a65027057566779aaef4c18e9f19e46cc206bef1bc5305fb23af26367c48048735617395b8331760dab5e59cbd99ab592ed1a3a348a62636575e4c6d0890090e53840cb63dcc56ed32382db8fa99393208676d06614c66acbebc98da2120121c9708196c7b98adda64705b71f532726410ceda0cc298cd597d7931b44240243926d15863c49783e045ad196369cac747cc61d9d95531b4f30af26368948048723663d65256952fec0826954652fb710f4387d9727a63842625e4c6d1390090e45588d22f7a9088038d198d0c255cc49e31d3d8a4c4c7228c5bc98da2820121c893d2c9e9c287383296ff7c97ca1f6bbc0e6bd709598e5f58c7931b45140243911066b95e52749890aacb5baf13a4b9f7c79bd3d2831cd8f19f26368a3804872210cd72bca4e931215596b75e274973ef8f37a7a50639b1e33e4c6d1470090e44219ae57949d26242ab2d6ebc4e92e7df1e6f4f4a0c7363c67c98da28e0121c884335caf293a4c485565add789d25cfbe3cde9e9418e6c78cf931b451c0243910866b95e52749890aacb5baf13a4b9f7c79bd3d2831cd8f19f26368a380487221059851551bf93a40d637d861f3fd21789e3ea010339b3873f4c6d1471090e441f3f1c83505589cad293c134367602570e74165e037368b27f98da28e3121c883d0a4b5f4d8176185cf4489064e262d617946f1803e6d3090031b451c7243910791496be9b02ec30b9e89120c9c4c5ac2f28de3007cda612006368a38e487220f2292d7d3605d86173d1224193898b585e51bc600f9b4c2400c6d1471c90e441e4525afa6c0bb0c2e7a24483271316b0bca378c01f369848018da28e3921c883c830c84d84edc40887114f2e461c8b8973f333dc3b6d3234041b451c734391078f61909b09db88110e229e5c8c391712e7e667b876da646808368a38e687220f1e4f338ec08d72a4d41202e110688c4dca7911cceab4ca74116d1471ce0e441e3b2a79762df147cc5ff0cbea18c776c38f9e65f5d269968c23da28e39d1c883c7554f2ec5be28f98bfe197d4318eed871f3ccbeba4d32d1847b451c73a391078ea35f831649b81b4378ff5d05b1439363925da3346a65bd49068a38e757220f1d36bf062c93703686f1feba0b628726c724bb4668d4cb7a920d1471ceae441e3a663f31e3f446953960c9d6964474300df43ab29179970f642a28e39d6c883c74b53f8952b5f3529e3e600fac084e429b93398ae2c32e39086451c73ae91078e953403830394ccd67f98c81d7900267b6d1373b85565c8c50d8a38e75e220f1d29680706072999acff31903af2004cf6da26e770aacb918a1b1471cebc441e3a525c2064bb2995dcb62fe69ddbf6f815aefa113d529724b83728e39d79883c74a344532223298e3c242c9363afe44e5358a064d6a22e4b146f51c73af41078e94514b89cf3297efb0025ecef57befaceabed0c09415c97ccdfa38e75e920f1d289297139e652fdf6004bd9deaf7df59d57da181282b92f99bf471cebd241e3a51252e273cca5fbec0097b3bd5efbeb3aafb4302505725f337e8e39d7a483c74a2431d74046225a5ab8fc2da2b5ee349d5a14a2a607e4c00afe1c73af4a078e944763ae808c44b4b571f85b456bdc693ab429454c0fc98015fc38e75e940f1d288e536f59c55fcbed9bbd7cb2cfaf309d62feccf41c9301cff971cebd291e3a511b32f10c3795fa5def47bf8d9754bf62c0a9dc4436260543f3e39d7a533c74a23565e2186f2bf4bbde8f7f1b2ea97ec58153b8886c4c0a87e7c73af4a678e9446a57d6898b2e4bfa74ebc45e55495bb2fd53b36cd59816b3d08e75e94df1d288d33bbf6bc332fa77a1a44ee4a289158df553a935a8302f0ba21cebd29ce3a511a5039130333c5771fb1563f13d088943e55394c74d605fbb4539d7a53ac74a23490722606678aee3f62ac7e27a111287caa7298e9ac0bf768a73af4a758e9446920e44c0ccf15dc7ec558fc4f422250f954e531d35817eed14e75e94eb1d288d241c898199e2bb8fd8ab1f89e8444a1f2a9ca63a6b02fdda29cebd29d63a511a4839130333c5771fb1563f13d088943e55394c74d605fbb4539d7a53ac74a23490722606678aee3f62ac7e27a111287caa7298e9ac0bf768a73af4a758e9446920705e657bec3f017d25c2773a18af214f91742f5517f0754f75e94eb2d288d23f6ccf23a4aee085b2184b166c27bc6a99cf2abaa72fe28e9febd29d66a511a47d65b09ff634238e1bfd5c54d045d6fd2e4a97d14b5fc6c140d7a53ace4a2348f9577398993ea99eefc77ed198820c22574171fe93bf8f2682af4a759d944691f13af989df53b5c0975bc3cb28fa766ca92f2659247f1ff1065e94eb3c288d23e102056c6b7dce03e6844dbe49eb4b014d0a8f0e45fe41860dbd29d679511a47c1040ad8d6fb9c07cd089b7c93d696029a151e1c8bfc830c1b7a53acf2a2348f820815b1adf7380f9a1136f927ad2c05342a3c3917f9061836f4a759e544691f04102b635bee701f34226df24f5a580a685478722ff20c306de94eb3ca88d23e082056c6b7dce03e6844dbe49eb4b014d0a8f0e45fe41860dbd29d679511a47c1040ad8d6fb9c07cd089b7c93d696029a151e1c8bfc830c1b7a53acf2a2348f8200d6d738c49e37c58e035ba72c91e7b3d5005ed7c906327704a759e554691f03f1adae71893c6f8b1c06b74e5923cf67aa00bdaf920c64ee094eb3caa8d23e07e35b5ce31278df16380d6e9cb2479ecf54017b5f2418c9dc129d679551a47c0fc6b6b9c624f1be2c701add39648f3d9ea802f6be483193b8253acf2aa348f81f862e99171749a4845d021cf248845dbcfaca133c606341b05a759e555691f03ef51e57b8fbf9713436d09c64106e9df9a0584c3890c69da0c4eb3caabd23e07dd2fdd4fcc5590a93ea6d9b47a0431e72eb74be30f18d558199d679558a47c0fb95fba9f98ab21527d4db368f40863ce5d6e97c61e31aab0333acf2ab148f81f724b8797de2ca527b2682cf9e00725c4b58971e83963570467759e556391f03ee3232188692facd21c9d201bb804a9b165bf262c6fc6afaccfeb3caac823e07dc5464310d25f59a4393a403770095362cb7e4c58df8d5f599fd679559047c0fb8a18987a519515cb2a414696d80904ed91a8db0dbc1ac05740acf2ab218f81f7133130f4a32a2b9654828d2db01209db2351b61b783580ae8159e556431f03ee266261e94654572ca9051a5b602413b646a36c36f06b015d02b3caac863e07dc4c50d62b397f10dc09d6fadeb83e859487f31ac9ddd6045e066795590d7c0fb8972dbeaf1fd4843acb7abbe5687369510a9277efb8ac0a600dcf2ab21bf81f712d5b7d5e3fa9087596f577cad0e6d2a21524efdf715814c01b9e556437f03ee25a430d152c28736de5b7b5bd99c4036c24f6221adfb02b24383caac870e07dc4b3122c830527495e833c31a32b7e650044988691bc6057ec71795590e2c0fb89652459060a4e92bd0678634656fcca0089310d2378c0afd8e2f2ab21c581f712ca48b20c149d257a0cf0c68cadf9940112621a46f1815fb1c5e556438b03ee25941d7670d610ad76d1ae534153e9862a1f7076e9e002c1078ccaac871707dc4b273aece1ac215aeda35ca682a7d30c543ee0edd3c005820f1995590e2e0fb8964e01ec1c0519185dfe86132d479c76d0786e1e037d0b05c2342ab21c5d1f712c9b03d8380a3230bbfd0c265a8f38eda0f0dc3c06fa160b8468556438ba3ee2593607b07014646177fa184cb51e71db41e1b8780df42c1708d0aac871747dc4b26c0f60e028c8c2eff430996a3ce3b683c370f01be8582e11a15590e2e8fb8964d81ec1c0519185dfe86132d479c76d0786e1e037d0b05c2342ab21c5d1f712c9b03d8380a3230bbfd0c265a8f38eda0f0dc3c06fa160b8468556438ba3ee259360071959f31c7a0259519179df1412461633c33b3fc172310bac871748dc4b26bf0e32b3e638f404b2a322f3be28248c2c6786767f82e46217590e2e91b8964d7e1c6567cc71e809654645e77c50491858cf0cecff05c8c42eb21c5d23712c9afc38cacf98e3d012ca8c8bcef8a09230b19e19d9fe0b91885d6438ba46e25935f871959f31c7a0259519179df1412461633c33b3fc172310bac871748dc4b26bf06f3d971065a2cde1fef563da78a6eac124a9c3f52e47c57690e2e91c8964d7df6a8d86cda1a81e7bcab0eface7abfd7cf595e3e75c912eee21c5d23a12c9afbd612d664819b2bfaf62280751c5b622f4976e23cbb92401dd438ba47525935f794e6d253d09c802169116369b81ca6de3db1ea3947249a7bb871748eb4b26bef128eca326e9f286e4eef2952ef9f303c2627fa325e494f3780e2e91d7964d7de151d9464dd3e50dc9dde52a5df3e60784c4ff464bc929e6f01c5d23af2c9afbc22fc4e5487e2c9e4b88907cb3de2a37043640e894925571e138ba475f5935f7835f89ca90fc593c971120f967bc546e086c81d12924aae3c271748ebeb26bef064b25edcecf14fbe5ef081ac76f07040b8545fe4f49576b85e2e91d7e64d7de0b225e344a748c7a83aad65d86d46c3011b6ce589b92b07b0cc5d23afdc9afbc1544bc6894e918f50755acbb0da8d860236d9cb1372560f6198ba475fb935f782a158b29d6a8946cc6781f9e13480ee841877bbe6b4ac390341748ebf826bef0532b1653ad5128d98cf03f3c26901dd0830ef77cd6958720682e91d7f04d7de0a6562ca75aa251b319e07e784d203ba1061deef9ad2b0e40d05d23afe09afbc14c386ba7621b05e8eb8dc3189236d56a06e8204f57561e25a1ba475fc235f7829770d74ec4360bd1d71b8631246daad40dd0409eaeac3c4b43748ebf846bef052e6dc0f635427a266603d28a40d1b3d0164cc3995a587a3a87e91d7f09d7de0a5b679445175b56cf83d46b3c7999c5c82745c98eb1b0f61910d23afe14afbc14b55b3ae2db8d1021bf759ca0eb29e9b84937d5796061edd622a475fc2a5f78296942881e63f082c636b7ff69ce4a31988d1bed4ebdc3dd504648ebf855bef052d111229574b7680f253cc4fb948ac15914e41cf97887bc448d91d7f0ac7de0a5a122452ae96ed01e4a7989f7291582b229c839f2f10f78891b23afe158fbc14b42448a55d2dda03c94f313ee522b0564539073e5e21ef11236475fc2b1f78296841527045291a2fbe1b2ee049c4c68f0a1cd2a27c13de3c86d8ebf8564ef052d072a4e08a52345f7c365dc093898d1e1439a544f827bc790db1d7f0ac9de0a5a0e549c114a468bef86cbb8127131a3c28734a89f04f78f21b63afe1593bc14b41c354a7b41637a61c564364cda59a5ad0915939a06ef1fe76d75fc2b28782968376a94f682c6f4c38ac86c99b4b34b5a122b27340dde3fcedaebf85650f052d06e613c45b2644c09cd5d9f5b615cf4dc1f0290c418bc8141b6d7f0aca2e0a5a0db4e8ae4119efa96528804debab047e038b163e42e7904276eafe15946c14b41b5292820d01457af5cdccfe56d56ede86c0f0a2459f209f2de5fc2b28e82968369525041a028af5eb9b99fcadaaddbd0d81e1448b3e413e5bcbf85651d052d06d230b2dbed27c1402b4005bdad5215c9aae86aed64c8296f7a7f0aca3b0a5a0da36165b7da4f828056800b7b5aa42b9355d0d5dac99052def4fe15947614b41b464eddc86175678364ccdd1ead3eb54ea64dee119020a761eafc2b28ed2968368b29cde96fc13189816680655273c8c547481e7f1d415067d6f85651db52d06d15539bd2df82631302cd00caa4e7918a8e903cfe3a82a0cfadf0aca3b6a5a0da2a3349fe6bdb28a8bd66c7bd41c5813d17ccbc58720543435ce159476e4b41b4536693fcd7b651517acd8f7a838b027a2f9978b0e40a8686b9c2b28edc968368a6593a525c430525ad67e51cff0c631c59df33bdc5150eb17485651dba2d06d14b3e86fd655c6cce129c9061f60f2460ae6aa9d7872a1f06ea0aca3b755a0da295092053778f3c1edd05e6ebe414a6e95781960b0b543fb1d5159476ebb41b45291240a6ef1e783dba0bcdd7c8294dd2af032c1616a87f63aa2b28edd768368a5224814dde3cf07b74179baf90529ba55e06582c2d50fec7545651dbaed06d14a449029bbc79e0f6e82f375f20a5374abc0cb0585aa1fd8ea8aca3b75da0da29481e179025ca2470882b34e63940ccbd72c5a30cb243fcc15259476ebc41b4528f3c2f204b9448e1105669cc7281997ae58b46196487f982a4b28edd788368a51e04709943fef444d87999c0dcf9911dc5c2ce8ec60ff4a94a651dbaf206d14a3b08e13287fde889b0f33381b9f3223b8b859d1d8c1fe95294ca3b75e40da2947611c2650ffbd11361e6670373e64477170b3a3b183fd2a5299476ebc81b4528ec2384ca1ff7a226c3ccce06e7cc88ee2e167476307fa54a5328edd790368a51d84709943fef444d87999c0dcf9911dc5c2ce8ec60ff4a94a651dbaf206d14a3b01a25812cb4eb1dc6fffe43972881e0b3061434befe96cd4da3b75e41da29475f344b025969d63b8dfffc872e5103c1660c28697dfd2d9a9b476ebc83b4528ebe689604b2d3ac771bfff90e5ca20782cc1850d2fbfa5b35368edd790768a51d7c5d3e62127dbb70efccb844b13a6d2d92dce401f4f4b80e6e1dbaf20fd14a3af7468f1cd1d1d964976636b15a6b388320660a5fe6e971c0dd3b75e420a29475ed193092507a154be699338aaccccf2e3b78571bcad2e525bb76ebc8424528ebd9326124a0f42a97cd32671559999e5c76f0ae3795a5ca4b76edd790848a51d7b264c24941e8552f9a64ce2ab3333cb8ede15c6f2b4b9496eddbaf210914a3af645596eb30a70ce1ec96627d5e5cd799d66efb3a53972ad1dcb75e421329475ec737402f0e247c4690f98b22b4b00d5ba78a38d0a42e5747ba6ebc8427528ebd8d6e805e1c48f88d21f3164569601ab74f1471a1485cae8f74dd79084ea51d7b1a691314e568539cfbb2f2b2cab6939698d5259e8db95ec2eabaf2109e4a3af6335e388277a709bcaf32ab8d8d6385552c568d991872bf29d675e4213d9475ec6548835d9c2475fc16321d4312bd68d253595d8e2de57ff7adebc8427c28ebd8c91d1913e51f4e7ae43100ae1d712fcca15efd7858cb01935cd79084f951d7b1913a3227ca3e9cf5c862015c3ae25f9942bdfaf0b1960326b9af2109f2a3af63220076a841539c6e4890c8e06dbb1d5a8028383d602c07f1745e4213e6475ec64300ed5082a738dc912191c0db763ab50050707ac0580fe2e8bc8427cc8ebd8c8601daa1054e71b922432381b6ec756a00a0e0f580b01fc5d179084f991d7b190c03b5420a9ce372448647036dd8ead40141c1eb01603f8ba2f2109f323af63218076a841539c6e4890c8e06dbb1d5a8028383d602c07f1745e4213e6475ec64300ed5082a738dc912191c0db763ab50050707ac0580fe2e8bc8427cc8ebd8c8601daa1054e71b922432381b6ec756a00a0e0f580b01fc5d179084f991d7b190c03b5420a9ce372448647036dd8ead40141c1eb01603f8ba2f2109f323af63218002ba9a0072d0cb4895a695b313b8a822e47fbc2907f3185f4213e6485ec642ff05753400e5a196912b4d2b6627715045c8ff78520fe630be8427cc90bd8c85fe0aea6801cb432d22569a56cc4ee2a08b91fef0a41fcc617d084f99217b190bfc15d4d00396865a44ad34ad989dc5411723fde1483f98c2fa109f3242f63217f82ba9a0072d0cb4895a695b313b8a822e47fbc2907f3185f4213e6485ec642ff05753400e5a196912b4d2b6627715045c8ff78520fe630be8427cc90bd8c85fe03ab8d8c98a9554dd366b94bce48830b3cc31663efcc7bbd184f99218b190bfbf01840a3feb8d2c72399d5171bf6e896244a5287af9911ba409f3243263217f7d0308147fd71a58e4733aa2e37edd12c4894a50f5f322374813e64864c642fefa061028ffae34b1c8e67545c6fdba25891294a1ebe6446e9027cc90c98c85fdf40c2051ff5c696391ccea8b8dfb744b12252943d7cc88dd204f992193190bfbe81840a3feb8d2c72399d5171bf6e896244a5287af9911ba409f3243263217f7d0308147fd71a58e4733aa2e37edd12c4894a50f5f322374813e64864c642fefa061028ffae34b1c8e67545c6fdba25891294a1ebe6446e9027cc90c98c85fdf404e1778a29cf8bbd49b6ee0d7ada2d91cfed69979c88f7605f992193290bfbe7f284149f21053fa6103a3e9a751a3da34a9ef8ef09120900cf3243266217f7cfd508293e420a7f4c20747d34ea347b46953df1de122412019e64864cc42fef9fa2d17807517b26c3bdb55ce953ced90cd540097bf4483e434cc90c99985fdf3f35a2f00ea2f64d877b6ab9d2a79db219aa8012f7e8907c869992193330bfbe7e640705a81352c33a73a1d624cea146b2ffc44bafa121134d43243266717f7cfcb0cf30daf40baea064100ec91ca86fe5aa4cbd1f124240da964864ccf2fef9f9519e61b5e8175d40c8201d923950dfcb54997a3e248481b52c90c999e5fdf3f2a33cc36bd02eba8190403b2472a1bf96a932f47c4909036a59219333cbfbe7e5467986d7a05d750320807648e5437f2d5265e8f8921206d4b243266797f7cfca85b4333a0e211231bdcd4f1149ece0da4f8ff7b0f42427e974864ccf3fef9f94f4298bfee9a84c8ef86700a2133fa43449e41521b8486a12f90c999e8fdf3f29d1143d88a0b6c1496d9a63c3a5e52ae83e8c50034090ee660219333d2fbe7e5392287b11416d8292db34c7874bca55d07d18a0068121dccc0432667a5f7cfca72450f62282db0525b6698f0e9794aba0fa31400d0243b9980864ccf4bef9f94e416311cfd31c3276e99f809cae8f39c19f26a5d9d4878d7020c999e98df3f29c72c6239fa63864edd33f01395d1e73833e4d4bb3a90f1ae0419333d31be7e538e58c473f4c70c9dba67e0272ba3ce7067c9a9767521e35c0832667a637cfca71c3d9b4096647bbe2c9c86764f3dfb08ca3f9548e743c85c1164ccf4c7f9f94e370748d9d99f59ff1105d314967254398f2b6cedcb87925c23c999e990f3f29c6d0e91b3b33eb3fe220ba6292ce4a8731e56d9db970f24b8479333d321e7e538da1d2367667d67fc44174c5259c950e63cadb3b72e1e49708f2667a643cfca71b43a46ceccfacff8882e98a4b392a1cc795b676e5c3c92e11e4ccf4c879f94e368009ff646cc0273c829f7715f1ba1c0ed631138b57927663d999e99103f29c6cf013fec8d9804e79053eee2be374381dac622716af24ecc7b333d32207e538d9e027fd91b3009cf20a7ddc57c6e8703b58c44e2d5e49d98f6667a6440fca71b3c04ffb23660139e414fbb8af8dd0e076b1889c5abc93b31ecccf4c881f94e367809ff646cc0273c829f7715f1ba1c0ed631138b57927663d999e99103f29c6cf013fec8d9804e79053eee2be374381dac622716af24ecc7b333d32207e538d9e027fd91b3009cf20a7ddc57c6e8703b58c44e2d5e49d98f6667a6440fca71b3c04ffb23660139e414fbb8af8dd0e076b1889c5abc93b31ecccf4c881f94e367802c089f78d8d64ae1c4378713981f155dbd7b11762767e19a9e99104029c6ceff58113ef1b1ac95c3886f0e27303e2abb7af622ec4ecfc3353d322080538d9dfe3c34d69039bbae3edda4444656da7d71a22ea1d59da12a6b7a644101a71b3bfb047c05cd49d9df35880eb084a41322ddf09f9fa83b43f8d7f4c882044e3677f508f80b9a93b3be6b101d6109482645bbe13f3f507687f1afe99104089c6cefea11f0173527677cd6203ac212904c8b77c27e7ea0ed0fe35fd322081138d9dfd423e02e6a4ecef9ac40758425209916ef84fcfd41da1fc6bfa644102271b3bfa847c05cd49d9df35880eb084a41322ddf09f9fa83b43f8d7f4c882044e3677f501b931256119e6968ce9c388c78c283b8c03651046880beff9910408ac6cefe9f372624ac233cd2d19d387118f1850771806ca208d1017dff322081158d9dfd3e6e4c49584679a5a33a70e231e30a0ee300d94411a202fbfe6441022b1b3bfa7c68aaeb5d6355cdfe41a7ec5bbc7245c0adf4e42044079bfdc88204573677f4f75d682f679d0e1eb4501600af6f42b37c082c243d8810dbfc910408af6cefe9ed46e2b77c107ec0206cf22956d4e38ef2bc9aa47810235bfa2208115fd9dfd3d919d7c7a4f76002f8a6aa7aa5a02545e02577a4ed20485bf5441022c0b3bfa7b133af8f49eec005f14d54f54b404a8bc04aef49da4090b7ea88204581677f4f62675f1e93dd800be29aa9ea968095178095de93b481216fd510408b02cefe9ec45ad095d491629a7d0219fd24f78856fbd7ff8366024483ab208116069dfd3d8741b38455f927b7b1d0fa2241e56ed5f25c4162c9048aab5741022c0e3bfa7b0d0f796158c8b1f21b6eba6c7bc13bd3df64c5218f0916faaf8204581d77f4f6191ef2c2b19163e436dd74d8f78277a7bec98a431e122df55f0408b03aefe9ec323de5856322c7c86dbae9b1ef04ef4f7d9314863c245beabe08116075dfd3d86407dd63731bf2139342998bd6003cc6f5d26b687548b9797d1022c0ecbfa7b0c70fbac6e637e42726853317ac00798deba4d6d0ea9172f2fa204581d97f4f618e1f758dcc6fc84e4d0a662f5800f31bd749ada1d522e5e5f4408b03b2fe9ec31c3eeb1b98df909c9a14cc5eb001e637ae935b43aa45cbcbe881160765fd3d863809e88fde9583bbebf65ee557fa2a9757d2f8e3518b993bd2022c0eccfa7b0c6f13d11fbd2b0777d7ecbdcaaff4552eafa5f1c6a3173277a404581d99f4f618de27a23f7a560eefafd97b955fe8aa5d5f4be38d462e64ef4808b03b33e9ec31bc4f447ef4ac1ddf5fb2f72abfd154babe97c71a8c5cc9de9011607667d3d863782a9b56962e9e417732b47d7799079d77dbd09115b995612122c0ecd0a7b0c6ef5536ad2c5d3c82ee6568faef320f3aefb7a1222b732ac2424581d9a14f618dde367fb30590db889497981dd65a7c9dda1b84a053e65728858b03b3439ec31bbb6cff660b21b711292f303bacb4f93bb4370940a7ccae510b160766873d863776661124c319d0a50a2b269f5160509f631a54dd4c995e46172c0ecd0f7b0c6eeb5834a2330a03cccc2313669ab6ff66c0e0ec169632be302f581d9a1ff618ddd53c7b9d12ea6a1c5012ecf52d645cf57c6e1a8929657e045fb03b3440ec31bba9050992d2ab36bb57f2a01252bf1812f388776e4fcafdacc060766882d86377510a1325a5566d76afe54024a57e3025e710eedc9f95fb5980c0ecd105b0c6eea214264b4aacdaed5fca80494afc604bce21ddb93f2bf6b30181d9a20b618ddd44284c969559b5dabf95009295f8c0979c43bb727e57ed660303b34416c31bba8850992d2ab36bb57f2a01252bf1812f388776e4fcafdacc060766882d863775102d44b3023d39edb620c8724fd960866bbb3025f65fb73c0d0ecd105c0c6eea1f5a8966047a73db6c4190e49fb2c10cd776604becbf6e781a1d9a20b818ddd43e412524b5cb4a39904fe7f1375be041a99902f3d67ede94353b34417131bba87b0e5ca2186cf6f5d86c960a66ae1eab4dde4843a9fdbecc6b766882e3637750f51cb94430d9edebb0d92c14cd5c3d569bbc908753fb7d98d6ecd105c6c6eea1ea39728861b3dbd761b258299ab87aad3779210ea7f6fb31add9a20b8d8ddd43d472e510c367b7aec364b0533570f55a6ef2421d4fedf6635bb344171b1bba87a871dc7a33a5d1e03e9626ce62d848dcd890c6969cdbee6ab866882e3737750f4f6fcb4d1422064334f913c4bda6efe1abcdcf8936b7de7971cd105c6f6eea1e9d6ba8f2d51a6f0921beedb173443deb5247e16e6a6fbe96e49a20b8dfddd43d3963643e570b4094fb4aa18ade7ed9fe9f3c0538d1df7ed1ca344171c0bba87a7152dad55aece3acae62093db4f4122539244ccda0beff47956882e3827750f4e131c80362b029dc1490d8a361de82726cf4dbf73e7e00332bd105c705eea1e9c1639006c56053b82921b146c3bd04e4d9e9b7ee7cfc006657a20b8e0bdd43d382533266379709f30a1028b57f7067f1ae7fb238f6f80270b044171c18ba87a7033277251c047668cbed1792f6d72e0b57aba6cdeaf0068561882e3832750f4e0564ee4a3808ecd197da2f25edae5c16af574d9bd5e00d0ac3105c7064ea1e9c0a55eeed1ce83c25e7812473d3531655595add93a8c01bb98720b8e0cad43d381337f032e6a6dace86cf0f0f9e9c8ad2ad61fd834e8039170f4171c196a87a70256fe065cd4db59d0d9e1e1f3d3915a55ac3fb069d00722e1e82e3832d50f4e04a6bd3244771cdbcd309026672688972b03438693700e6003e05c7065ba1e9c09363b8a13bb9fdfc5ddecaf4dcc7710d5b14b32e6b01cda47d0b8e0cb843d3812553839b244a5e7b738a5c11b1854042b0d5a8b8d3039cecfb171c197187a7024933198ef56b1f799ee17e4b5b00dead5c5793cda3073b7df72e3832e40f4e049166331dead63ef33dc2fc96b601bd5ab8af279b460e76fbee5c7065c81e9c09225878948282e0693352bf5563f9d8dd6c0a9192891cef9bddb8e0cb913d3812433d0381b1dc23551e7244d2bfea0fe2d2c165810f39e0dbbc71c197237a70248506195c108ea92cf4b14fcd77ca7deda02f0d5e1b73c35b79e3832e47f4e049090c32b8211d5259e9629f9aef94fbdb405e1abc36e786b6f3c7065c8fe9c09212186570423aa4b3d2c53f35df29f7b680bc35786dcf0d6de78e0cb91fd381242430cae084754967a58a7e6bbe53ef6d01786af0db9e1adbcf1c19723fa70248486195c108ea92cf4b14fcd77ca7deda02f0d5e1b73c35b79e3832e47f4e0490904f3ddabeab88214df6bfd6f1461bdc008dee1f6b786d133d7065c8ff9c09211f2a8e0e2a2d72c553ba45d5da8295dffbc81e9ad3f0dbca7be0cb92003812423d551c1c545ae58aa7748babb5052bbff7903d35a7e1b794f7c19724007024847a364a91558c2d9806b5dd7f6200b5a7e9ccbcc74cc370cdf0832e4801e04908f36c9522ab185b300d6bbafec4016b4fd399798e9986e19be1065c9003c09211e6653c9e030718e2d2a43c257ff934c7a1df3579300dc4dbc30cb92008812423cb568b94b2e494485d153e72f7e8c7b73e6aad4e5d1b8b5b871972401202484795392982129f8b1371f7430de7c7ed9677819cf8b737185b0f32e4802504908f29725304253f1626e3ee861bcf8fdb2cef0339f16e6e30b61e65c9004a09211e5270b860f7548ed07fa9d25f97161481d8b2b63ed9dc63103dcb92009512423ca36d831a9b7f8023b7206ae72622872bac11aed9b0b8c7c47c9724012b2484794567188de3d562ca260d9bf6443b6c7f52cfa00f5e71912cfa2e4802574908f2895a43747481281703e7fe14806d3726a04b827ab9e323fdf55c9004af9211e51140994195d8b2b0bf9cc250f8d0cc753b43475170c6499febb92009602423ca210d44dbd887c7e437064ac9e997f7127132d0fede8c94e3d8724012c1484794411a89b7b10f8fc86e0c9593d32fee24e265a1fdbd1929c7b0e4802582908f288235136f621f1f90dc192b27a65fdc49c4cb43fb7a32538f61c9004b05211e51046a26dec43e3f21b832564f4cbfb893899687f6f464a71ec39200960a423ca2086060163552e0c6283172c69175cf4f0dd95249e5c94fe18824012c158479440f4cd285177c240f082fabb51ae1fcc6165ee6efc892a167114802582c08f2881d25b762dbceaaa0c82c1d922dba57b4276a103b8e254472239004b05911e510394b6ec5b79d554190583b245b74af684ed420771c4a88e447200960b223ca207222efe41c110d05d87d3c70aedfbcf89854834a3595136c8f4012c165479440e345dfc838221a0bb0fa78e15dbf79f130a906946b2a26d91e802582ca8f2881c617d1e91d1a969a19c1b7eab375520a5bfe4f84d3544f563e004b05961e51038b2fa3d23a352d3433836fd566eaa414b7fc9f09a6a89eac7c00960b2c3ca207165f47a4746a5a686706dfaacdd548296ff93e134d513d58f8012c165879440e2c4aa1a195ab175385da857d93a0ee7ada9ebe8297a27c55f102582cb1f2881c5721559bd82c9129c381d1231f383b1dafe9bf612c44fa4fe304b05964e51038ad42ab37b05922538703a2463e70763b5fd37ec25889f49fc60960b2c9ca20715a1168c80d88a729c5d40ab474d74a9eba533fe0ae13eae38d12c165949440e2b322d1901b114e538ba81568e9ae953d74a67fc15c27d5c71a2582cb292881c56645a32036229ca717502ad1d35d2a7ae94cff82b84fab8e344b05965251038acc175899191b9bd0e66d1bcb9eb0b31dcd4641616d9f58c069960b2ca5a20715972eb132323737a1ccda37973d61663b9a8c82c2db3eb180d32c16594b440e2b2e5d6264646e6f4399b46f2e7ac2cc7735190585b67d6301a6582cb296881c565c46d72175b34109eb35a484ed7bf71664de4d6769fac7a74db059652e1038acb719c09b983ce4968e380f31d2ee4c54c468dd2ad0f590f29c60b2ca5d2071596d3381373079c92d1c701e63a5dc98a988d1ba55a1eb21e538c16594ba40e2b2da67026e60f3925a38e03cc74bb9315311a374ab43d643ca7182cb297481c565b45a17356ebd8737298d3fb68f68c0ce1df32bb284ac8938e4059652ea038acb674040c38a5170f10ae7459516c7dfc4369299c106591415c90b2ca5d5071596cd0c93dfc1794464cd9b515225861db067d175de09b229cf9316594bab0e2b2d991927bf82f288c99b36a2a44b0c3b60cfa2ebbc1364539f262cb297561c565b32324f7f05e51193366d4548961876c19f45d77826c8a73e4c59652eac38acb664649efe0bca23266cda8a912c30ed833e8baef04d914e7c98b2ca5d5871596cc8555054c46aa8cf9181db4a5058392e77c3a03c98229e9d326594bab1e2b2d98f36b30235abb421dad07cbc98a6d084ea3382d52d453ede65cb297564c565b31d6d66046b576843b5a0f979314da109d46705aa5a8a7dbccb9652eac98acb663a66de618385330a230eb91a5a91a03ba37a4db0b214fd1d982ca5d5941596cc7359cf1bb3e0c896fdea385cad199e9f41a0ddbd6129fbdf31594bab292b2d98e53fb0901497f3b0b3a136e152299b667dedfdd6bf53f96263b2975653565b31c90b7378d60649e41f0f33ea9c4994f4f6883e097ba7f468c8652eaca7acb6639116e6f1ac0c93c83e1e67d5389329e9ed107c12f74fe8d190ca5d594f596cc7222dcde3581927907c3ccfaa712653d3da20f825ee9fd1a32194bab29eb2d98e445b9bc6b0324f20f8799f54e24ca7a7b441f04bdd3fa346432975653d65b31c884349e60d3b00c4a8c004d1bc8fad77633022f3b77f48308752eaca7bcb66390f12a624c74c640c094ccfcb7115b916c10c88436bfe92050fa5d594f896cc721d254c498e98c81812999f96e22b722d82191086d7fd240a1f4bab29f12d98e43a4a98931d31903025333f2dc456e45b0432210daffa48143e975653e25b31c87421437ee73982e30233448380a426de031084775cf491cc7e2eaca7c5b66390e74286fdce7305c60466890701484dbc062108eeb9e92398fc5d594f8b6cc721ce11205449bc6e0ec099d835fa86f9a006ee543970d248d5f9bab29f17d98e439b2240a89378dc1d8133b06bf50df3400ddca872e1a491abf375653e2fb31c873644815126f1b83b026760d7ea1be6801bb950e5c3492357e6eaca7c5f66390e6c1514fafab9d2f8bc9b87d7cc2e2b28321ee42783924853ced594f8bfcc721cd72a29f5f573a5f179370faf985c5650643dc84f072490a79dab29f17f98e439ae5453ebeae74be2f26e1f5f30b8aca0c87b909e0e49214f3b5653e2ff31c8735c34ba3082a4fa489ca904e65967b7698ba363981992444277aca7c5ff6390e6b76974610549f491395209ccb2cf6ed31746c73033248884ef594f8bfec721cd6e5efb1ab76a4ba52a70d9c15d953bce2939d0bc634912addfb29f17fe8e439adb4a088e1baaf9cd0cae79aab320d5c44d1fe3d4c39226ffc0653e2ffe1c8735b5202374e42c561cd129b97d5e3809b094ec0a0584244fa381ca7c5ffd390e6b694046e9c858ac39a25372fabc70136129d8140b08489f470394f8bffa721cd6d20ca02c3d87baf5fc73ac1d70d684ea4e5c6a720d9140320829f17ff5e439ada31940587b0f75ebf8e7583ae1ad09d49cb8d4e41b2280641053e2ffebc8735b463280b0f61eebd7f1ceb075c35a13a93971a9c8364500c820a7c5ffd790e6b68c650161ec3dd7afe39d60eb86b4275272e353906c8a0190414f8bffaf21cd6d1856151c855211e27f0787ff055eaccce072e97cd61404c4839f17ff5f439ada2f383c91b77a8647b5dbd62602b3b7c1bb921555a9280b2d083e2ffebf8735b45d7079236ef50c8f6bb7ac4c05676f8377242aab5250165a107c5ffd7f0e6b68ba6d049f8ac07ba18f3c1ec002c53d2ee8f497b2a1a02e5821f8bffaff1cd6d173661b97c25759c5d64503a7fd80d885cc9571c140405e5444f17ff5ff39ada2e55849883185160e6456cd77f2f80f3393d725de7d80be4c8ae2ffebff735b45c93ca5690fe08e9f807a6117dde67c8f225a8e18f8017e3d16c5ffd7ffe6b68b91055d2acc977fc1b8c18857b3c357463f615e8ded02fe1e2e8bffb000cd6d17210aba55992eff83718310af6786ae8c7ec2bd1bda05fc3c5d17ff60019ada2e421574ab325dff06e306215ecf0d5d18fd857a37b40bf878ba2ffec00335b45c842ae95664bbfe0dc60c42bd9e1aba31fb0af46f6817f0f1745ffd80066b68b90855d2acc977fc1b8c18857b3c357463f615e8ded02fe1e2e8bffb000cd6d1721037b7b23fc65ab9cffdd11e706146efe6d814199d5fc569d27ff6001aada2e41f6f6f647f8cb5739ffba23ce0c28ddfcdb028333abf8ad3a4ffec00355b45c83e6af121abefcd69f7c40aa1b97b79e7960c92c2727f174b4affd8006bb68b907b61f49c04b5fd56a754db6b6aed51f726c567e0e1fe303a96ffb000d86d1720f54ffb90b6425d3006767cfecdd102164837121dc0fc62192eff6001b1da2e41e92c097a195b1ce2c4b9c025939862548b1a66977ef8c5d65efec00364b45c83d15812f432b639c58973804b2730c4a91634cd2efdf18bacbdfd8006c968b907a23c38411242d60dcab3c6be4657e77a2715dcb9f8e318fd7cfb000d93d1720f430482dad15c0e9e4d3453a484a62d1c48d7fbcfeec6339efaf6001b28a2e41e850905b5a2b81d3c9a68a749094c5a3891aff79fdd8c673df5ec00365145c83d0a120b6b45703a7934d14e921298b471235fef3fbb18ce7bebd8006ca28b907a142416d68ae074f269a29d24253168e246bfde7f76319cf7d7b000d9451720f428482dad15c0e9e4d3453a484a62d1c48d7fbcfeec6339efaf6001b28a2e41e8501c6db2d858364c5e573ab88cbc01b115abbc59d5c675835fc00365155c83d09f38db65b0b06c98bcae7571197803622b5778b3ab8ceb06bf8006ca2ab907a13e71b6cb6160d931795ceae232f006c456aef1675719d60d7f000d9455720f427c6f7fef6f9814e5aa869bec5dd66bb0a80a252aab33adbeff001b28abe41e84f76b12378c068c4e0cd9fe00b3a335894ac08cb153675d21ff00365158c83d09ed6236c7c4e37b1ed180c2295f3cc93a902d5bbea3cebbe7ff006ca2b2907a13d9507fe8369d58c05ace4a7ab66ff09d1b06f9d9449d7973ff00d9456620f427b12d12291a1114036d695b1d64d63f6230ba360e863af48bff01b28acd41e84f615a245234222806dad2b63ac9ac7ec461746c1d0c75e917fe0365159a83d09ec2405afd151ab2906d72329d8b4f5bb0bd951a9615ebd3d3fd06ca2b3607a13d830cc852d70bc7a392b12b630e95158975d6778828d7a94bfb0d94566d0f427b051990a5ae178f47256256c61d2a2b12ebacef1051af5297f61b28acda1e84f60a33214b5c2f1e8e4ac4ad8c3a545625d759de20a35ea52fec365159b43d09ec14664296b85e3d1c95895b1874a8ac4baeb3bc4146bd4a5fd86ca2b3687a13d8285897861d92dcbbe2df7c58e147b6bf5813bade8a7a9663b1d94566d1f427b04f3d4164e7fc1bfa7d8bbed9ba85cba6aad3b81911f52e6b64b28acda4e84f609d0695227cce9a77b2e443db6d01f5755053b28e20ea5e7aca65159b4ad09ec1390d2a44f99d34ef65c887b6da03eaeaa0a7651c41d4bcf594ca2b3695a13d82721a5489f33a69decb910f6db407d5d5414eca3883a979eb2994566d2b427b04e434a913e674d3bd97221edb680fabaa829d94710752f3d65328acda5684f609c8695227cce9a77b2e443db6d01f5755053b28e20ea5e7aca65159b4ad09ec13905eb6a846a9b1791455419598350cd2052294201a4bd0fd4da2b3695b13d8271f497fa93a29c574e0774953286077cc04f16a9c3197a39e9c4566d2b727b04e3d1f11ab2129ed6c78bb58ce48b74dc0048f1794602f48e1398acda56f4f609c793e23564253dad8f176b19c916e9b80091e2f28c05e91c273159b4ade9ec138f2085905317e18349aba29611ad395280ce8a0ad7dbd2528e72b3695be3d8271e310b20a62fc3069357452c235a72a5019d1415afb7a4a51ce566d2b7c7b04e3c6216414c5f860d26ae8a5846b4e54a033a282b5f6f494a39cacda56f8f609c78c42c8298bf0c1a4d5d14b08d69ca9406745056bede929473959b4adf1ec138f1811a2abc4b7e5cc636f5c39a52fb0a8c9364d33d8d2543273b3695be4d8271e2f234557896fcb98c6deb8734a5f6151926c9a67b1a4a864e766d2b7c9b04e3c5e468aaf12df97318dbd70e694bec2a324d934cf634950c9cecda56f93609c78bc1927b6d29590e5d347a7f52173e36e445eabfac392a3379e9b4adf27c138f177324f6da52b21cba68f4fea42e7c6dc88bd57f58725466f3d3695be4f8271e2ee649edb4a5643974d1e9fd485cf8db9117aafeb0e4a8cde7a6d2b7c9f04e3c5dc55500f4182e9b1520a05d10395799a1da1a23219951b60f5da56f93f09c78bb736b2772fdc35e55be0d1c9ff21515c35ef86c0302a3865ecb4adf27f138f176d6d64ee5fb86bcab7c1a393fe42a2b86bdf0d80605470cbd9695be4fe271e2eda66dc356c473a1827500d4ff47ba398d26a5d5cbda8e33bb3d2b7c9fd4e3c5db359cac38564d6b3066ce0c7e0eda5599f80fd157851c81b68a56f93fb9c78bb653fa7dfb7a00fe8c4a687b7b9d1a8db39ae3c86eda391dad24adf27f838f176c90b62181c1682544119d5976b99afde6e08bb69d8472559a595be4ff171e2ed9116c430382d04a88233ab2ed7335fbcdc1176d3b08e4ab34b2b7c9fe2e3c5db222d8860705a09510467565dae66bf79b822eda7611c95669656f93fc5c78bb6445b10c0e0b412a208ceacbb5ccd7ef37045db4ec2392acd2cadf27f8b8f176c884233da6e3e87c6c96a1f9eb1915c0edb37f8f98172573e5a5be4ff181e2ed90f107a0d895372104aa105655b191645b11c344effe4b020b5b7c9fe313c5db21d20f41b12a6e42095420acab6322c8b6238689dffc960416b6f93fc6278bb643a41e836254dc8412a8415956c645916c470d13bff92c082d6df27f8c4f176c8740fe2c4f771f3050cd4f152d0bf1055838de4d3fc2582a9aebe4ff18ae2ed90e71fc589eee3e60a19a9e2a5a17e20ab071bc9a7f84b05535d7c9fe315c5db21ce3f8b13ddc7cc143353c54b42fc41560e37934ff0960aa6baf93fc62b8bb6439c0b28806865faab1e7450be7deee0d4171b68fbde2c16f176f27f8c58176c8737165100d0cbf5563ce8a17cfbddc1a82e36d1f7bc582de2ede4ff18b02ed90e6e2ca201a197eaac79d142f9f7bb83505c6da3ef78b05bc5dbc9fe31605db21cdc594403432fd558f3a285f3ef7706a0b8db47def160b78bb793fc62c0bb6439b83e9a5f33360d349f11d20fd6e46b696c62d219dfc170bb7027f8c58276c8736f09471713427cebf5f06a47a5bf34fad371e68fbc82e31ae14ff18b05ed90e6dd128e2e2684f9d7ebe0d48f4b7e69f5a6e3cd1f7905c635c29fe3160bdb21cdba251c5c4d09f3afd7c1a91e96fcd3eb4dc79a3ef20b8c6b853fc62c17b6439b744a38b89a13e75faf83523d2df9a7d69b8f347de41718d70a7f8c582f6c8736e82083c9e0fe314216d36aa253e9add531caab57c52e335215ff18b05fd90e6dcf410793c1fc62842da6d544a7d35baa639556af8a5c66a42bfe3160bfb21cdb9e0e218030cf278b131a70b1479d157cc1d6efbb11b8ceec58fc62c1806439b73b1c4300619e4f162634e1628f3a2af983addf7623719dd8b1f8c58300c8736e76388600c33c9e2c4c69c2c51e7455f3075bbeec46e33bb163f18b060190e6dcec710c0186793c5898d3858a3ce8abe60eb77dd88dc67762c7e3160c0321cdb9d86e2a5bb9c8db33e973d13c71c7b5f4181b3e0d188cf06990c62c1807439b73af686710206818ea8ab468a0db85ca102ae2be762e19e277228c58300f8736e75d5ce078eda69457cd359769af01f2485071bf485933c6924618b060200e6dceb945d34a88238b325237f4fb55fa42b89b8fc0ecaf678ec88d3160c0411cdb9d7117b8edbd1d78e75c3cb01ea3eae39931cbc4355bcf1f351b62c1808339b73ae12f71db7a3af1ceb879603d47d5c7326397886ab79e3e6a36c5830106736e75c25ee3b6f475e39d70f2c07a8fab8e64c72f10d56f3c7cd46d8b06020ce6dceb8449d9c695c229bd99b2471d174d7af1890a6406db78fb4cdc160c041acdb9d7071fc5e5d85ab5fdeb3154622691540b0cc10a69b3f1f83db92c1808369b73ae0d3f8bcbb0b56bfbd662a8c44d22a816198214d367e3f07b725830106d36e75c1a0b29f00e413a7a649217b0923bae542db06c02ccc7e29ae5b06020db6dceb8331653e01c8274f4c9242f6124775ca85b60d805998fc535cb60c041b6db9d70662ca7c03904e9e992485ec248eeb950b6c1b00b331f8a6b96c180836db73ae0cc594f807209d3d32490bd8491dd72a16d836016663f14d72d830106db6e75c1983eb15990ea0a2900ee41311bb1436ad5b30288c97e2b525c06020db7dceb832f09750bceaa76d4b9a9488a2f58e4fda612476d8ffc5848b90c041b70b9d7065d12ea179d54eda9735291145eb1c9fb4c248edb1ff8b09172180836e173ae0cba25d42f3aa9db52e6a52228bd6393f698491db63ff16122e430106dc2e75c19744ba85e7553b6a5cd4a44517ac727ed30923b6c7fe2c245c86020db85ceb832e8236315977dcfce52614ecaed84ae025bd0b934fcc5862f91c041b70c9d7065cf46c62b2efb9f9ca4c29d95db095c04b7a17269f98b0c5f2380836e193ae0cb9e199eaf0acda1bc01520153ae09163169ef272ff0161a62480106dc3375c1973b333d5e159b437802a402a75c122c62d3de4e5fe02c34c490020db866eb832e76667abc2b3686f00548054eb82458c5a7bc9cbfc058698920041b70cdd7065cec5907d103437062c25cd0c5683f0fb34a257bdb7db0d4b6410836e19cae0cb9d73e21fab35d43483c8667b2c8747d8e8ef73a12f861ab1083106dc33a5c1973ad08564e1390e91330d9958d88df5945189ab681edc357c50720db8675b832e75910ac9c2721d22661b32b1b11beb28a31356d03db86af8a0e41b70ceb7065ceb22159384e43a44cc3665636237d6514626ada07b70d5f141c836e19d6e0cb9d6442b2709c87489986ccac6c46faca28c4d5b40f6e1abe283906dc33adc1973ac8117739e5e4f3b5c5661f0085ebf2798457aa7ad9357df4730db8675c832e758f22ee73cbc9e76b8acc3e010bd7e4f308af54f5b26afbe8e61b70ceb9065ceb1e45dce79793ced715987c0217afc9e6115ea9eb64d5f7d1cc36e19d720cb9d63c17cc27dbfe0030e2fdbe2c2755f1f41d699632c6abf147996dc33ae51973ac772f984fb7fc0061c5fb7c584eabe3e83ad32c658d57e28f32db8675ca32e758ee5f309f6ff800c38bf6f8b09d57c7d075a658cb1aafc51e65b70ceb9465ceb1dc4a73978cc66409cfbab78932a5edc8e5f8f3f2325f8be0cc6e19d729cb9d63b720f987c6632a965742353a5d4239b9c69e2a4061bf196599dc33ae54973ac76d41f30f8cc6552cae846a74ba8473738d3c5480c37e32cb33b8675ca92e758eda0ff877c6630cdc14d59b116cff450f1524eb5d83fc673a6870ceb9535ceb1db31ff0ef8cc619b829ab3622d9fe8a1e2a49d6bb07f8ce74d0e19d72a6b9d63b663fe1df198c337053566c45b3fd143c5493ad760ff19ce9a1c33ae54d73ac76cc0bd616dfeec9635e799eb35ff086a0a3d39d481ce33b77448675ca9be758ed9717ac2dbfdd92c6bcf33d66bfe10d4147a73a9039c676ee890ceb9537ceb1db2e2f585b7fbb258d79e67acd7fc21a828f4e7520738ceddd1219d72a6f9d63b65c5eb0b6ff764b1af3ccf59aff8435051e9cea40e719dbba2433ae54df3ac76cb84973c6abc2f8b89f66b15df6fec83237e616ddcb33b91849675ca9bf758ed96f1ef9e6045c53f3f69a28e3e5f3ee8c6a787017936773d493ceb9537feb1db2dd3df3cc08b8a7e7ed3451c7cbe7dd18d4f0e02f26cee7a9279d72a6ffd63b65ba07f9f0be47b252923569b78fc61859a48e02ba4a9dd0f6503ae54e00ac76cb730ff3e17c8f64a5246ad36f1f8c30b3491c0574953ba1eca075ca9c0158ed96e61fe7c2f91ec94a48d5a6de3f18616692380ae92a7743d940eb953802b1db2dcc3fcf85f23d929491ab4dbc7e30c2cd247015d254ee87b281d72a700563b65b980bb164915187abdb2361a0f457e3c2438c6e00a6dd110904ae54e00bc76cb72f1762c922a30f57b646c341e8afc7848718dc014dba2212095ca9c0178ed96e5e2ec59245461eaf6c8d8683d15f8f090e31b8029b74442412b953802f1db2dcbc5d8b248a8c3d5ed91b0d07a2bf1e121c63700536e888482572a7005e3b65b9784728a1c1eedd406a02e0373d749a4c337322666ad112344be54e00bd76cb72ef1a639c30b41d038bd2869672df92c061928728d2a2260c98ca9c017bed96e5dd34c73861683a0717a50d2ce5bf2580c3250e51a5444c1931953802f7db2dcbba698e70c2d0740e2f4a1a59cb7e4b01864a1ca34a889832632a7005efb65b97745f2f3a32774a9f1660fadb8ef2f42b07407ba292113208c754e00be06cb72ee74a70cd11c4f7c0e48ebbdf15dc467e092d39a1212265b58fa9c017c1d96e5dcd20f3f2d060520480ea3de623aeeb240d06b59e3f44cd0f2053802f84b2dcbb9941e7e5a0c0a40901d47bcc475dd6481a0d6b3c7e899a1e40a7005f0965b977320fe223ee57aa94bb75bdc086b20ab82ec718d4fa1335e0824e00be13cb72ee631fc447dcaf552976eb7b810d6415705d8e31a9f4266bc1049c017c2796e5dcc63f888fb95eaa52edd6f7021ac82ae0bb1c6353e84cd782093802f84f2dcbb98c0b23781f93b728937ab42c2d86b3e970e50903cd99b0a8137005f09f5b9773171646f03f276e5126f568585b0d67d2e1ca12079b33615026e00be13eb72ee62e2c8de07e4edca24dead0b0b61acfa5c394240f3666c2a04dc017c27d6e5dcc5c591bc0fc9db9449bd5a1616c359f4b8728481e6ccd85409b802f84fadcbb98b83e49daa611d50bef7808ead0619cbf08fcd298d69b0c2538005f09f6b977316f08a60df8fa0c9a96bcd7fd98b997a60ca5e78daa3619ee7100be13ee72ee62dd114c1bf1f419352d79affb31732f4c194bcf1b546c33dce2017c27dce5dcc5ba229837e3e8326a5af35ff662e65e9832979e36a8d867b9c402f84fb9cbb98b7445306fc7d064d4b5e6bfecc5ccbd30652f3c6d51b0cf738805f09f73977316e81673383c772c2c239a4601838fd888c50abb36a061a08b110be13ee82ee62dcf2ce67078ee585847348c03071fb1118a15766d40c341162217c27dd05dcc5b9e59cce0f1dcb0b08e6918060e3f6223142aecda8186822c442f84fba0bb98b73c3fac1a908fc3e3d49ef6341475226e23021c11000d05fc895f09f74277316e770b6a8dcdf5ea4a610ab29020e0a30440b07a7dfd1a0d9d13be13ee85ee62dced16d51b9bebd494c215652041c146088160f4fbfa341b3a277c27dd0bdcc5b9da2daa3737d7a929842aca4083828c1102c1e9f7f46836744ef84fba17b98b73b45b546e6faf525308559481070518220583d3efe8d06ce89df09f742f7316e76842bb358c350728c877ef2a06008e6c05b3ea3bcea0db753ce13ee85fe62dcecf1188c3c54070d448bca47c03f77b00061416d39a41b88e7ac27dd0c0cc5b9d9d2311878a80e1a8917948f807eef6000c282da73483711cf584fba18198b73b3a46230f1501c35122f291f00fddec0018505b4e6906e239eb09f74303316e7674185876d6d9e924fdb1ea0817b236282b4cf8f8cf0dc617d713ee860762dcece730b0edadb3d249fb63d4102f646c505699f1f19e1b8c2fae27dd0c0ec5b9d9ce6161db5b67a493f6c7a8205ec8d8a0ad33e3e33c37185f5c4fba181d8b73b39c4ed60f63a5abaaa55c1668b5880f6955140a22756e3262b99f74303c16e7673729be777421b9d80284f2f963067cfaa4d456a0e7dc6669743ee860792dcece6d537ceee84373b00509e5f2c60cf9f549a8ad41cfb8ccd2e87dd0c0f25b9d9cda330c367d5d49e2c1e0920d841052128dfd9cdf9c719b49d1fba181e5b73b39b366186cfaba93c583c1241b0820a4251bfb39bf38e33693a3f74303cb6e767366584332a24b8a0dbf4f0e5e0837a67232a2b5da6ec66ecb48ee860797dcece6cb3c98bdf16d769e366ae2e40865ab0c5ff1ae10da8cdf3a92dd0c0f30b9d9cd950543d48fb14fbf24a28bf008c1b440ba8f9e7db219c01926ba181e6273b39b290a87a91f629f7e494517e011836881751f3cfb643380324d74303cc4e7673652150f523ec53efc928a2fc02306d102ea3e79f6c86700649ae8607989cece6ca42a1ea47d8a7df925145f80460da205d47cf3ed90ce00c935d0c0f3139d9cd948543d48fb14fbf24a28bf008c1b440ba8f9e7db219c01926ba181e6273b39b290348ceaa3005a674c1e4429102ce63f4ca01212403804c8d84303cc4f7673651f6919d54600b4ce983c88522059cc7e9940242480700991b08607989eece6ca3e5e460338d7cc1fe845d6cc38a9f7252d2c8aa4fde014c7620c0f313ed9cd947b489e5f1e85fac2885873c0694a4c72550557a5f8c02b32c5181e627eb39b28f51d4f16e9e25807c87dada8ca8af70ca4b6f1a7ee8058098b303cc4fe673651e93a9e2dd3c4b00f90fb5b519515ee19496de34fdd00b01316607989fcce6ca3d2014eb4545fc2a1d9c37ccb22223a5a8d8808fbb70161ca2dc0f313fa9cd947a3029d68a8bf8543b386f996444474b51b1011f76e02c3945b81e627f539b28f46053ad1517f0a87670df32c8888e96a362023eedc058728b703cc4fea73651e8c0a75a2a2fe150ece1be6591111d2d46c4047ddb80b0e516e07989fd4e6ca3d1814eb4545fc2a1d9c37ccb22223a5a8d8808fbb70161ca2dc0f313fa9cd947a3029d68a8bf8543b386f996444474b51b1011f76e02c3945b81e627f539b28f46053ad1517f0a87670df32c8888e96a362023eedc058728b703cc4fea73651e8c0336c82dcb7b36f998b2bb909138b6ebeb0c0377db0e6bae17989fd4f6ca3d17f66d905b96f66df33165772122716dd7d61806efb61cd75c2f313fa9ed947a2fe59c4641fb530411df9750c1c448be2f56f4339f3c39c8f86e627f53eb28f45fb3f9b20ec40c304f3bfb040307f75ede58ac8cfe4873ac30ecc4fea7e651e8bf50b489a8557e88c9f4c26a858f54a03c5c1d3fbc60e772a1e989fd4fdca3d17e91691350aafd1193e984d50b1ea94078b83a7f78c1cee543d313fa9fb947a2fd22d226a155fa2327d309aa163d5280f17074fef1839dca87a627f53f728f45fa45a44d42abf4464fa613542c7aa501e2e0e9fde3073b950f4c4fea7ee51e8bf48409c010254eb4cac8f30ad874afe6456c982185de77445ea89fd4fdda3d17e8f0d4a5ab180391c10eb2783068c5af0a83f468cb8ceea2fd613fa9fbc47a2fd1d1a94b56300723821d64f060d18b5e1507e8d19719dd45fac27f53f788f45fa3a35296ac600e47043ac9e0c1a316bc2a0fd1a32e33ba8bf584fea7ef11e8bf4746a52d58c01c8e087593c183462d78541fa3465c677517eb09fd4fde23d17e8e860b803c4d9f443c67f3e5860bc0d327ea0ab2789eea4a1623fa9fbc57a2fd1cf4d8260368a4b0a44cb42d8b96e788cf7ed98ab10dd4ae6c57f53f78bf45fa39d27171919eaf89741634bd96ad34f41ea8773b21eba97718bfea7ef18e8bf47394e2e3233d5f12e82c697b2d5a69e83d50ee7643d752ee317fd4fde31d17e8e72286ebd148244dfbd59f58da3439b2fa4ca112477ea5f6a30fa9fbc64a2fd1ce350dd7a290489bf7ab3eb1b4687365f49942248efd4bed461f53f78c945fa39c62dcd4cfedf7601ad349c5e8504cae68dd486eddca97f4cc4ea7ef1938bf4738b5b9a99fdbeec035a6938bd0a0995cd1ba90ddbb952fe9989d4fde32717e8e71643478ca8543a896c9f37a20c0989c231fe5e136fa5fed714a9fbc64f2fd1ce2b12a171fd7ed795910b356c100971ac5ea8fe82dc4bff522a53f78c9f5fa39c552542e3fafdaf2b22166ad82012e358bd51fd05b897fea454a7ef193ebf4738aa4a85c7f5fb5e56442cd5b04025c6b17aa3fa0b712ffd48a94fde327d7e8e7154211de898cd1f2f402671887841eb8aeff43672df5ffc35539fbc64fbfd1ce2a7423bd1319a3e5e804ce310f083d715dfe86ce5bebff86aa73f78c9f7fa39c54e1089fb100adf3fb8668c49d8fe0c53ba7d1c277a7ff2794f7ef193f0f4738a9b2113f62015be7f70cd1893b1fc18a774fa384ef4ffe4f29efde327e1e8e715364227ec402b7cfee19a312763f8314ee9f4709de9ffc9e53dfbc64fc3d1ce2a6c1062312d2d5c807b012876bfe6c0c5ce952397d0ff956e7cf78c9f88a39c54d720c4625a5ab900f60250ed7fcd818b9d2a472fa1ff2adcf9ef193f114738a9ae4188c4b4b57201ec04a1daff9b03173a548e5f43fe55b9f3de327e228e71535c0f23e2164146868fd609ddf72c64566f555f1a84fcad17e8bc64fc461ce2a6b71e47c42c828d0d1fac13bbee58c8acdeaabe3509f95a2fd178c9f88c39c54d6e3c8f8859051a1a3f582777dcb19159bd557c6a13f2b45fa2f193f118738a9adc0531695ee096b7367d1517b15980db75573b3024e56a6346e327e231e71535b70a62d2bdc12d6e6cfa2a2f62b301b6eaae766049cad4c68dc64fc463ce2a6b6e14c5a57b825adcd9f4545ec566036dd55cecc09395a98d1b8c9f88c79c54d6dc298b4af704b5b9b3e8a8bd8acc06dbaab9d981272b531a37193f118f38a9adb8531695ee096b7367d1517b15980db75573b3024e56a6346e327e231e71535b70323f8488e93969876f691e23267996a593a86099ad4e0cdd64fc463de2a6b6df647f0911d272d30eded23c464cf32d4b2750c1335a9c19bac9f88c7bc54d6dbe55106ad07b4828d58a6aa08490448290fae3de63b539d77693f118f88a9adb7b36332e4dccf2d462e19b690116e72d1ca20a18c46a7552ee27e231f21535b6f56c665c9b99e5a8c5c336d2022dce5a3944143188d4eaa5dc4fc463e42a6b6dea64df11e40a2dd4435333cbfc51fadc6d346abf0ea9d6efb99f88c7c954d6dbd355d07c74eabe2b3e732dbff09a53e0d51517da1a53af83743f118f93a9adb7a537b35196abded934b321a7d92b05e9a4d6721031a760aae97e231f28535b6f496f66a32d57bdb26966434fb2560bd349ace420634ec155d2fc463e50a6b6de926adf9f0785dde78a994cc75ca275ce8e060a9cc39d844fa6f88c7ca24d6dbd2361d196bbe21e51ccff5fb6b13b49c516b85795843b0a434ef118f9459adb7a454fb586249a9f2651cb85955a6cf1b2281cf1870576162a9ee231f28c35b6f4892b7d64f60ba0cf5b63d152acd0418c4ae6256a07ec2df93ec463e5196b6de91156fac9ec17419eb6c7a2a559a0831895cc4ad40fd85bf27d88c7ca32d6dbd2223a07ec8504e5c0255c0b72ab3764592644d8041cb0b988fc118f9466adb7a443002231b6e02e030284dd0d4e6526da4735f264366174b5f9231f28ce5b6f48850044636dc05c060509ba1a9cca4db48e6be4c86cc2e96bf2463e519cb6de910a0088c6db80b80c0a13743539949b691cd7c990d985d2d7e48c7ca3396dbd221401118db70170181426e86a732936d239af9321b30ba5afc918f94672db7a442802231b6e02e030284dd0d4e6526da4735f264366174b5f9231f28ce5b6f48850044636dc05c060509ba1a9cca4db48e6be4c86cc2e96bf2463e519cb6de910a0088c6db80b80c0a13743539949b691cd7c990d985d2d7e48c7ca3396dbd221401118db70170181426e86a732936d239af9321b30ba5afc918f94672db7a442802231b6e02e030284dd0d4e6526da4735f264366174b5f9231f28ce5b6f48850044636dc05c060509ba1a9cca4db48e6be4c86cc2e96bf2463e519cb6de910a0014d9342d8e6e8ccb40fb618c91c744d275d33582d2d9888d7ca3396ebd2213ff29b2685b1cdd199681f6c319238e89a4eba66b05a5b3111af94672dd7a4427fe5364d0b639ba332d03ed8632471d1349d74cd60b4b662235f28ce5baf4884ffc32dbfa1949d6e911d4a1345c84984e8e5adc081396cde86ce519cb76e9109ff765b7f43293add223a94268b909309d1cb5b810272d9bd0d9ca3396edd2213fee57824111fdbe26ff1f4af96a08bf623417b27c4b5b3945b494672ddca4427fdb3b16dad0d1ded0b60b5c1acc07dcec62dba75493b6742f6a28ce5bba4884ffb502400e4e7a202423e37e5d90061800c0639105246cea02d5519cb7759109ff6904801c9cf4404847c6fcbb200c300180c7220a48d9d405aaa3396eeb2213fed209003939e880908f8df97640186003018e441491b3a80b554672ddd64427fda412007273d101211f1bf2ec8030c006031c882923675016aa8ce5bbac884ffb482400e4e7a202423e37e5d90061800c0639105246cea02d5519cb7759109ff6904801c9cf4404847c6fcbb200c300180c7220a48d9d405aaa3396eeb2213fed201c15ec4b5e6b8bb0ac5d8bf97c5e58139083a5183a825955672ddd65427fda3f382bd896bcd7176158bb17f2f8bcb02721074a307504b2aace5bbaca84ffb47e7057b12d79ae2ec2b1762fe5f179604e420e9460ea0965559cb7759509ff68fc6cc1bb07c9bee03d2fb287c3d950e897305f84bed4146eac396eeb2b13fed1f76595cebc69e043322c2b377fa8fff9290d01657aa82a815972ddd65727fda3ed573df625aa23091c251c96f7485e1a4cc64526f25056a6b3e5bbacaf4ffb47d93a8e44f82aa894f016ff55e6871a5c9438cca9e1a0aef168cb77595f9ff68fb1012ee29d2bb3ac97fac4d3c50492e1231ddbafc0415f86d296eeb2c03fed1f61025dc53a5767592ff589a78a0925c2463bb75f8082bf0da52ddd65807fda3ec204bb8a74aeceb25feb134f14124b848c776ebf01057e1b4a5bbacb00ffb47d84097714e95d9d64bfd6269e2824970918eedd7e020afc3694b7759601ff68fb0812ee29d2bb3ac97fac4d3c50492e1231ddbafc0415f86d296eeb2c03fed1f61025dc53a5767592ff589a78a0925c2463bb75f8082bf0da52ddd65807fda3ec204bb8a74aeceb25feb134f14124b848c776ebf01057e1b4a5bbacb00ffb47d8402383a742b038ceb52f300a7a3fceb9899a1a3c1dafc50d4c77596020f68fb07f47074e8560719d6a5e6014f47f9d73133434783b5f8a1a98eeb2c041ed1f60fe1a20f5b79745bd8c898651e0f5990e2114ab4c73bf15d932dd658084da3ec1fb3441eb6f2e8b7b19130ca3c1eb321c42295698e77e2bb265bacb0109b47d83f66883d6de5d16f63226194783d664388452ad31cefc5764cb7596021368fb07ec5d1a066990906f1c18f8b6ffa3269903519cbf9af8b06d97eb2c0427d1f60fd74646657ff78360effeb795f73cab5a014f7bdb32f1627f30d6580850a3ec1fad189f23acc5694497ca3553e66fb4dbfd4b3a1262e2c6a262acb010a247d83f59313e47598ad2892f946aa7ccdf69b7fa967424c5c58d44c5596021448fb07eb2627c8eb315a5125f28d54f99bed36ff52ce8498b8b1a898ab2c042891f60fd64510b761301aca7761e70c72b740507e50612ef141636b716658085133ec1fac72e2944d2d9bbd1a409a7b64ede6837c4b8683a252c6f122dcb010a277d83f58d5c5289a5b377a348134f6c9dbcd06f8970d0744a58de245b9602144efb07eb1a44b76bf83d51c947f36501336fff070d8de34491b1bdecb82c04289ef60fd6331581309d51061547b3902a5ed65c3615c808e520637d7d715808513eec1fac652b02613aa20c2a8f672054bdacb86c2b9011ca40c6fafae2b010a27dd83f58ca5604c2754418551ece40a97b5970d857202394818df5f5c5602144fbb07eb194381bdd975e932cf569477aeea93fd8a8ec8985001bed8f8bc04289f860fd63277037bb2ebd2659ead28ef5dd527fb151d9130a0037db1f17808513f0c1fac64e6c81cf0a50af368d71e413b29b5d8a9e5e686ffd6fb7e230010a27e283f58c9b6515f6c177c0efd2b08e4f5d2d193d3769133bf7df71686102144fc607eb1935563e462fc5e4625d2de2c6b25090a2697e68d3ecbee474c304289f8d0fd63269388ee50c622b4772288bb55c977f6ccda91403d67dca8d8708513f1b1fac64d1711dca18c4568ee451176ab92efed99b522807acfb951b0e10a27e363f58c9a26e4decde5f0fa0806ef4fd6a545bdb3150926b56f72bda1d2144fc6d7eb1934368ae32699481c3b8aab022cc9f15de5d4d6732aaee59583b4289f8dbfd6326855d6ebd7fff660a2922266d913489e4b54710c152dcb454778513f1b8fac64d0946efd3acd52e970a1113031a5f71f1653a63dea2b96a4cf00a27e372f58c9a1119f2000680bfb0cbeeec2e2cb5420ac5210a194272d63de1144fc6e6eb19342133e4000d017f6197ddd85c596a84158a42143284e5ac7bc2289f8dcdd632684267c8001a02fec32fbbb0b8b2d5082b1484286509cb58f784513f1b9bac64d0845ba258e0dc6009174427995da06e7e23b493261096b39309a27e373858c9a10743570a6e8f2294e655155ab3373b24421568a81e2d68ca1444fc6e71b193420d12c06d89f4a7ac8476f0dd5e64d4707ed713ac395ad3382989f8dce4632684192580db13e94f5908ede1babcc9a8e0fdae275872b5a6705313f1b9c8c64d08324b01b627d29eb211dbc375799351c1fb5c4eb0e56b4ce0a627e373918c9a10642215c4fc7b9fe6db844d12eb1d01abf164dfbdc7d69b654d4fc6e724193420c7442b89f8f73fcdb7089a25d63a0357e2c9bf7b8fad36ca9a9f8dce483268418e14696c9ec4e21e25ddfa73a46a64d7c03fc1531c5a6f39363f1b9c9164d0831b28d2d93d89c43c4bbbf4e748d4c9af807f82a638b4de726c7e373922c9a1063651a5b27b1388789777e9ce91a9935f00ff054c7169bce4d8fc6e724593420c6c2f5dbda2fd7373e6bc99c51b4984e5fcaa4cf4dfd37b6db2f8dce48c268418d75ebb7b45fae6e7cd79338a369309cbf95499e9bfa6f6db65f1b9c9184d0831ae49894f38cc305252bf2d3c651c71bfed55762f7c4def5acce37392319a10635b1f24f71e6ec3275d4b20a0c22f41a7d5572ebaf59be0599ac6e724643420c6b53e49ee3cdd864eba964141845e834faaae5d75eb37c0b3358dce48c868418d6a08a63526916f202cf948ab00b364c75008fd47d36f830a6c1b9c9191d0831ad3114c6a4d22de4059f291560166c98ea011fa8fa6df0614d837392323a10635a62298d49a45bc80b3e522ac02cd931d4023f51f4dbe0c29b06e724647420c6b4c4531a9348b790167ca4558059b263a8047ea3e9b7c185360dce48c8e8418d6981675ab15ed5485876150d8032caa9cfb3c16d933f8324ac2b9c9191e0831ad2f2ceb562bdaa90b0ec2a1b006595539f6782db267f06495857392323c10635a5e59d6ac57b552161d8543600cb2aa73ecf05b64cfe0c92b0ae724647820c6b4bc3fbfb15c4106aef2d74ce8115bb30fd48cf9259cc193fa16ce48c8f1418d69770b91bb65586fe09d7b5ff81aadc447a3c634a7368329982e9c9191e3831ad2ed172376cab0dfc13af6bff0355b888f478c694e6d0653305d392323c70635a5da2e46ed9561bf8275ed7fe06ab7111e8f18d29cda0ca660ba7246478e0c6b4bb45c8ddb2ac37f04ebdaffc0d56e223d1e31a539b4194cc174e48c8f1c18d69768452e0f025d608c8f82c5a9a2d2a2a2370f8ccf65329b26eac9191e3931ad2ecf166e76b191239bd6d2517b3d9ba36c68cb5bfac76537f1d692323c73635a5d9d2cdced63224737ada4a2f67b3746d8d196b7f58eca6fe3ad246478e6c6b4bb3a59b9dac6448e6f5b4945ecf66e8db1a32d6feb1d94dfc75a48c8f1cd8d6976743f860e395f7f616e5f5201e4d3798b410722323829c132b59191e39c1ad2ece70b1e751f956145948b6a2bc19d513e7cba86c06d5384096c2323c73935a5d9cd163cea3f2ac28b2916d457833aa27cf9750d80daa70812d846478e726b4bb39a2c79d47e558516522da8af067544f9f2ea1b01b54e1025b08c8f1ce4d697673458f3a8fcab0a2ca45b515e0cea89f3e5d436036a9c204b61191e39c9ad2ece683df9aaa62c76dc008368e411cb720fc654ae62d238423ac3323c73945a5d9ccf0805adf92f503ab8d397f01b8d424787559f21a1708619876478e729b4bb399d100b5bf25ea07571a72fe0371a848f0eab3e4342e10c330ec8f1ce536976733a2016b7e4bd40eae34e5fc06e35091e1d567c8685c218661d91e39ca6d2ece674402d6fc97a81d5c69cbf80dc6a123c3aacf90d0b8430cc3b23c7394da5d9cce80c6d383fcb662e45064529b0ca82a0700634761408633c77478e729c4bb399cf18da707f96cc5c8a0c8a5361950540e00c68ec2810c678ee8f1ce5389767339e31b4e0ff2d98b9141914a6c32a0a81c018d1d850218cf1dd1e39ca712ece673c6369c1fe5b31722832294d865415038031a3b0a04319e3ba3c7394e25d9cce7852e5dca98cc567083118c3049e882efb0f89bd3d86356b7578e729c5bb399cef31de11ffefed50c82ef7ae01336e85f0cb55d6780c6c7aebf1ce538c767339dd63bc23ffdfdaa1905def5c0266dd0be196abacf018d8f5d7e39ca718ece673ba538aa0ac9617c5d888a4dffcc4183fbdd999b5dd31b38fb0c7394e32d9cce77333279a0602920e68de0fe7f17e8ea7765f75c7b76368c3628e729c66b399cee5664f340c05241cd1bc1fcfe2fd1d4eecbeeb8f6ec6d186c51ce538cd67339dca58b0c0c4e0aabc5b4505c7bdf098c5d42a197ada8da4b18b39ca719bce673b933d73da3697b7fb6e56d1b773d78fb3a3007551b21b4b07177394e3389cce772506fa0d1a05d279947a6996dfa57d8f40ad2cff613697b22fe729c672399cee490df41a340ba4f328f4d32dbf4afb1e815a59fec26d2f645fce538ce47339dc921be834681749e651e9a65b7e95f63d02b4b3fd84da5ec8bf9ca719c8e673b92437d068d02e93cca3d34cb6fd2bec7a056967fb09b4bd917f394e3391cce772486fa0d1a05d279947a6996dfa57d8f40ad2cff613697b22fe729c672399cee4906b53fbed90b1b54719f903eca610101051e24823d2f7e9fde538ce48339dc91f62ba5087f7c5ed4600b82fd1427e481b5006ec44a5f177fcca719c91673b923d5186f9bcc5ee5d43ce36879a7b5ab8314c5034864be493fa94e33923ce7724792f204c26623f3d3f6933372ced13985d44e2c50997cacbf629c672489cee48f15e40984cc47e7a7ed2666e59da2730ba89c58a132f9597ec538ce49139dc91e2489389465f5f77b5719304abaaac896fbfcd70235f2cd3d9a719c92373b923c31d396b3995217222afec314f4bb73ada2bdd3c43be5b4bb44e339247e77247853a72d6732a42e4455fd8629e976e75b457ba78877cb697689c67248fcee48f0a00f805932ae84b428c76ed35253b13635bb74d0bf96ed2d238ce49209dc91e1301f00b2655d0968518edda6a4a7626c6b76e9a17f2dda5a4719c92413b923c2603e0164caba12d0a31dbb4d494ec4d8d6edd342fe5bb4b48e33924827724784c07c02c9957425a1463b769a929d89b1addba685fcb769691c6724904ee48f0980f805932ae84b428c76ed35253b13635bb74d0bf96ed2d238ce49209dc91e1301f00b2655d0968518edda6a4a7626c6b76e9a17f2dda5a4719c92413b923c2603e0164caba12d0a31dbb4d494ec4d8d6edd342fe5bb4b48e33924827724784c0081522424a8823fe083cc28a93e7d9a887e8e1f9b76b0d1d6724904fe48f097f102a4484951047fc1079851527cfb3510fd1c3f36ed61a3ace49209fc91e12fe205489092a208ff820f30a2a4f9f66a21fa387e6ddac34759c92413f923c25fc40a9121254411ff041e614549f3ecd443f470fcdbb5868eb3924827f24784bf80d647cd17ee4c298509250a134dbc2832ad07b9876b275d7724904ff48f097ef1ac8f9a2fdc98530a124a14269b7850655a0f730ed64ebaee49209fe91e12fde3591f345fb930a6142494284d36f0a0cab41ee61dac9d75dc92413fd23c25fbc6b23e68bf72614c284928509a6de14195683dcc3b593aebb924827fa4784bf78625a25c4c4aeac3cd5eb320b441a502d594a15846b29017824904ff58f097eef50c6a4365fbfdb31789c8c0e7e92c8555ed68705d653a6f149209fec1e12fddd2d9fa11995e2391abdff4014f383b8a569ef6a08aca8f1e392413fd93c25fbb95b3f42332bc472357bfe8029e707714ad3ded4115951e3c724827fb2784bf7724290dd132deb6722c4c3284bc46d0a905400041fb2a56b8f4904ff65f097eee3113412d3323950fd564c788f7f383d1b5442643c654c7b1f9209fecce12fddc5226825a66472a1faac98f11efe707a36a884c878ca98f63f2413fd99c25fbb8a44d04b4cc8e543f55931e23dfce0f46d510990f19531ec7e4827fb3384bf771415b2ef46682d0aa27f29ec73f02010d54e557de02a657cfd904ff668097eee272b65de8cd05a1544fe53d8e7e04021aa9caafbc054caf9fb209fecd012fddc4e56cbbd19a0b42a89fca7b1cfc08043553955f780a995f3f6413fd9a025fbb89c39a9d2e017cad7cbc6158b97775eaea51eee4afe532d8bed827fb3414bf771377353a5c02f95af978c2b172eeebd5d4a3ddc95fca65b17db04ff668297eee26e72b9a42d358de1e6e51c5655d3d8e28f27fb87f64cb7d3b709fecd062fddc4db7185a107417e468596fed4a39e0fed18fc396be999714b6f13fd9a0d5fbb89b56f1d9abb595f0fc2fac3d13f327e022ca4b533d032e43adf27fb341bbf7713696a4d8e238920a23dc24dca765b5a2c53f5acc39d65ca19bf4ff668387eee26d160ad74f3e8a3c7335161bce4ad1280a2979be337cb95d77f9fecd071fddc4da14d6d4294a7aa111e6f89a1c15083293fdb7a226c972d53003fd9a0e4fbb89b4126ecddd625b6a4f4abd96b7a97647a7a6336a0d62e5c4a017fb341caf77136814dd9bbac4b6d49e957b2d6f52ec8f4f4c66d41ac5cb89402ff668395eee26d0227c5d0056d3d168a7c2bd5e253f011e4391cdf55b972cc06fecd072cddc4da034f8ba00ada7a2d14f857abc4a7e023c87239beab72e5980dfd9a0e59bb89b4062b2998c28b56dce1bd757f81461e6f8b90b5d953e5ccd41cfb341cb47713680b5653318516adb9c37aeaff028c3cdf17216bb2a7cb99a839f6683968ee26d01638b8bbb703bdf63ec29c25fd0ed7e628ef19c14c9734f474ecd072d2dc4da02b7171776e077bec7d85384bfa1dafcc51de3382992e69e8e9d9a0e5a5b89b40566ef54788e55a5bb2d736bfec31bdc09e68a9612f5cd575d4b341cb4c713680ab69fce7bea1173a1d7b33a7d059d9a9377d951e5bb9ac8faa66839699e26d0155600c282a1890f6f2c32d7798aa117a69a76c98b4735ac355cd072d34c4da02a94c2aa9010784709d532117294a811ccdfb1b8d65e6b72aac9a0e5a6a89b405512467aaaee56b63f27308564a8b606196a27976c8cd6ff95a341cb4d613680aa148cf555dcad6c7e4e610ac9516c0c32d44f2ed919adff2b4683969ac26d015421db103686c10128198e7812223dfae553628372035c18969d072d3594da02a833b6206d0d820250331cf024447bf5caa6c506e406b8312d3a0e5a6b29b40550602d6664e86a2ccbe30642c8085dce14f84e3387dd707c9a841cb4d663680aa0b05accc9d0d45997c60c859010bb9c29f09c670fbae0f935083969acc6d0154160b59993a1a8b32f8c190b2021773853e138ce1f75c1f26a1072d3598da02a82c16b33274351665f1832164042ee70a7c2719c3eeb83e4d420e5a6b31b40550582d6664e86a2ccbe30642c8085dce14f84e3387dd707c9a841cb4d663680aa0b05accc9d0d45997c60c859010bb9c29f09c670fbae0f935083969acc6d015416041abec4e7f15b243e5d148196d967bdbe5107b72c1f40e1172d3598ea02a82bf0f6a3149d48de73f9868b82ad18b1fb2766352e283e9c023e5a6b31e4055057d1ed46293a91bce7f30d17055a3163f64ecc6a5c507d38047cb4d663c80aa0afa3da8c52752379cfe61a2e0ab462c7ec9d98d4b8a0fa7008f969acc79015415f40763e2fb7ad1bcb4900be94e82b7258e5f5cf3111f4fa5202d3598f302a82be70ec7c5f6f5a379692017d29d056e4b1cbeb9e6223e9f4a405a6b31e6055057ce1d8f8bedeb46f2d2402fa53a0adc96397d73cc447d3e9480b4d663cc0aa0af9c3b1f17dbd68de5a4805f4a7415b92c72fae79888fa7d290169acc79815415f3802508864837e4e00cd84bce021d080e0a2118d0ef4fbf603d3598f312a82be6f04a110c906fc9c019b0979c043a101c144231a1de9f7ec07a6b31e6255057cde094221920df938033612f380874203828846343bd3efd80f4d663cc4aa0af9bc128443241bf270066c25e7010e840705108c6877a7dfb01e9acc79895415f3782508864837e4e00cd84bce021d080e0a2118d0ef4fbf603d3598f312a82be6f04a110c906fc9c019b0979c043a101c144231a1de9f7ec07a6b31e6255057cde0203471cdb5f602eb2df560006a7e602330a59fba3eff24f5d663cc4ba0af9bbf4068e39b6bec05d65beac000d4fcc046614b3f747dfe49ebacc79897415f377e0ce41fe3ae3a8e64849ba7f9a057a8876ed8dae5fbfe37d8598f312f82be6efb19c83fc75c751cc909374ff340af510eddb1b5cbf7fc6fb0b31e625f057cddf633907f8eb8ea3992126e9fe6815ea21dbb636b97eff8df61663cc4be0af9bbec6720ff1d71d4732424dd3fcd02bd443b76c6d72fdff1bec2cc79897c15f377d85a5456e7ba0b69001680a791fbd8b07199d00a5cbfe5218698f312f92be6efaf40bb067c4a7954b7f9c7771bee0f88dddfe270b67fcbe70e31e625f357cddf5d0d8865a56b552c27c055162fd27d39b66c073d69ff99721d63cc4be7af9bbeb91b10cb4ad6aa584f80aa2c5fa4fa736cd80e7ad3ff32e43ac79897cf5f377d7236219695ad54b09f015458bf49f4e6d9b01cf5a7fe65c8758f312f9ebe6efae46c432d2b5aa9613e02a8b17e93e9cdb36039eb4ffccb90eb1e625f3d7cddf5c86498b3038bb54533d2178af51e31c3616cb6329cf998c5d73cc4be7bf9bbeb8f5543beb3edcd0d1f70f53de232c1aebd85aec136f3332faf79897cf8f377d71d3699d614b1fc9cf6aeb0a3bc5be18575b79fde6ae668035ff312f9f2e6efae396d33ac2963f939ed5d614778b7c30aeb6f3fbcd5ccd006bfe625f3e5cddf5c726679b0ff9e54f6928788b6e965e43dd18ac1d5a899a1b180cc4be7cc9bbeb8e35905baac130c6fdcdbd795cac226a39dc1c6074e334507029897cf9a377d71c53e1dce04fc7b62718475538d7aab6f362fce6a99668bb206312f9f356efae389084df4b6cf59479ad5b0cf12ebb506670bdf312fcd19080d625f3e6bddf5c711109be96d9eb28f35ab619e25d76a0cce17be625f9a32101ac4be7cd7bbeb8e222137d2db3d651e6b56c33c4baed4199c2f7cc4bf34642035897cf9af77d71c44426fa5b67aca3cd6ad8678975da833385ef9897e68c8406b12f9f35eefae388810f1a419cbf6fc6527d31926b1ae8e6b6a356ef9d19224d725f3e6bedf5c710f21e3483397edf8ca4fa6324d635d1cd6d46addf3a32449ae4be7cd7dbeb8e21e43c690672fdbf1949f4c649ac6ba39ada8d5bbe74648935c97cf9afb7d71c43c139f797b361a65e10b5ef12d83d29b55fdedd3cb8c92caba2f9f35f7fae38877273ef2f66c34cbc216bde25b07a536abfbdba797192595745f3e6beff5c710ee4e7de5ecd86997842d7bc4b60f4a6d57f7b74f2e324b2ae8be7cd7dfeb8e21dc290e24868735b1c027bdb16414f302aa9bb0fa596497f9d27cf9afc0d71c43b7521c490d0e6b63804f7b62c829e605553761f4b2c92ff3a4f9f35f81ae38876e304aeac6f33949b86bbced884a2a32a51b06456292618b4af3e6bf045c710edb6095d58de6729370d779db109454654a360c8ac524c31695e7cd7e08b8e21db64d3e03c8a347a9997bb9de191f06f28f185b71874987d12ccf9afc1271c43b6b268e603e1cf1d5eac439e42a346c0d18dcf93f0b9311465a9f35f825e38876d54d1cc07c39e3abd58873c85468d81a31b9f27e1726228cb53e6bf04bc710edaa264bd9a54a29da62ddadb8a0c80e5c5e2027582b4c46bd6b7cd7e0988e21db534c97b34a9453b4c5bb5b7141901cb8bc404eb056988d7ad6f9afc1311c43b6a62541bf41ff09ec43437d0a7b169799732cdfbcaa311c99aef35f826338876d4b4a837e83fe13d88686fa14f62d2f32e659bf79546239335de6bf04c6710eda96211955b4d28a33c4daba51e450bc8dc75fc14ea5c4740abccd7e098de21db52b4232ab69a5146789b574a3c8a1791b8ebf829d4b88e815799afc131bc43b6a561077af80208b51cb37af6f8939505f182b47969411d1cef435f826388876d4ab20ef5f004116a3966f5edf1272a0be30568f2d2823a39de86bf04c7110eda95641debe00822d472cdebdbe24e5417c60ad1e5a5047473bd0d7e098e221db52ac0fcfd4addabd11118a41a441c0e120bc067f109d8e901ba2afc131c543b6a5571f9fa95bb57a22231483488381c241780cfe213b1d2037455f82638a876d4aae3f3f52b76af4444629069107038482f019fc42763a406e8abf04c7150eda955c0a90fe1bac4b0b441ed34a05fd672ddae03ae0e9748281167e098e2b1db52ab71521fc37589616883da6940bface5bb5c075c1d2e905022cfc131c563b6a556e2a43f86eb12c2d107b4d2817f59cb76b80eb83a5d20a0459f82638ac76d4aadc5487f0dd62585a20f69a502feb396ed701d7074ba41408b3f04c7158eda955b835223a679b1336f9b9fac857ccd105a8aff06a944829b568e098e2b2db52ab6f6a4474cf36266df373f590af99a20b515fe0d52890536ad1c131c565b6a556de609b424b42af5e9eb4b1495729a23e9d6c04064e20a879a482638acc6d4aadbb4d48dd435bc13ff53628baa649a2a535844a68994152974a04c71599da955b7526a413338de502a239179d4489a37265b4d72d2f82a6d295098e2b34b52ab6e94d4826671bca0544722f3a891346e4cb69ae5a5f054da52a131c56696a556dd226a2a57b0df68d40b1249d0a1cebf1917f9f10bb0a9cee552638acd3d4aadba34d454af61bed1a8162493a1439d7e322ff3e21761539dcaa4c7159a7a955b746269cee990e3cb7ba91589c206a0dee40aabe9ee92a755d5598e2b35052ab6e8b4d39dd321c796f7522b13840d41bdc81557d3dd254eabaab31c566a0a556dd16268613110f5561a2122898799e95e0fd573cd7a1a9d71957638acd424aadba2b4d0c26221eaac344245130f33d2bc1faae79af4353ae32aec7159a84955b7456262aa4f113b80940156889de70b5abf00935ba83a75e095e8e2b350a2ab6e8ab4c5549e2277012802ad113bce16b57e0126b75074ebc12bd1c566a14556dd15624bcec712542a7b822684f71b934d7bad119460b9d79c97b38acd429aadba2ab4979d8e24a854f7044d09ee37269af75a2328c173af392f67159a85355b745561f060a716b6d2198566765bedb3186e5f0a7742b75e8c9ede2b350a7ab6e8aab3e0c14e2d6da4330accecb7db6630dcbe14ee856ebd193dbc566a14f56dd1556082a8272841709192663bef3632443926ee02caad7a4cbb88acd429fadba2aab105504e5082e12324cc77de6c6488724ddc05955af499771159a853f5b74555620aa09ca105c2464998efbcd8c910e49bb80b2ab5e932ee22b350a7eb6e8aaac4154139420b848c9331df79b19221c9377016556bd265dc4566a14fd6dd155580eba7fd517d3144a3302172e28a261219a4526aa7a4e5f89acd429fbdba2aaaf1d74ffaa2fa6289466042e5c5144c243348a4d54f49cbf1359a853f7b745555e3ae9ff545f4c5128cc085cb8a289848669149aa9e9397e26b350a7ef6e8aaabc01e6575594fb250964d6e1693b7131077e6b9150d274a04e66a14fdfdd15557703ccaeab29f64a12c9adc2d276e2620efcd722a1a4e9409ccd429fbfba2aaaee07995d5653ec9425935b85a4edc4c41df9ae454349d281399a853f7f745555dc0f32baaca7d9284b26b70b49db89883bf35c8a8693a50273350a7efee8aaabb81e6575594fb250964d6e1693b7131077e6b9150d274a04e66a14fdfdd15557703ccaeab29f64a12c9adc2d276e2620efcd722a1a4e9409ccd429fbfba2aaaee005a82e12152bc511027e8246d2aa69da4726b0319d29b79aa853f7f845555dbf0b505c242a578a2204fd048da554d3b48e4d60633a536f3550a7eff08aaabb7e16a0b84854af144409fa091b4aa9a7691c9ac0c674a6de6aa14fdfe1155576fc2d417090a95e288813f4123695534ed23935818ce94dbcd5429fbfc22aaaedf85a82e12152bc511027e8246d2aa69da4726b0319d29b79aa853f7f845555dbf041181aef7bdb24d81c9670d24bab634391186230a53897560a7eff09aaabb7df0e428e8bce18cc6805f3099c8db4ee81ce73205e4a72d2ad14fdfe1455576fbd1c851d179c3198d00be613391b69dd039ce640bc94e5a55a29fbfc28aaaedf7a390a3a2f386331a017cc267236d3ba0739cc817929cb4ab453f7f851555dbef47214745e70c663402f984ce46da7740e739902f253969568a7eff0a2aabb7de8703b4169b7ef49382bf6c1c0d1ad1017937461e1a72eced24fdfe1465576fbcf6c88db804641152824b3ab7999b84829d32b1fc04e5f41a59fbfc28daaedf79d65240fad62e4ad08162d7eeb29ceb84e52989b7d9cc0274c3f7f851c55dbef39565a78079c2bdcc7f92125ce49fb9897517392f83981f2997eff0a39abb7de7138c748bc0eba3c47bf0873948a5559294f2981ed73058933fdfe1474576fbce1718e91781d74788f7e10e72914aab2529e5303dae60b1267fbfc28e8aedf79c26f2f7b9d114b73d6c8e7f64a1fb38c9fe8e863b2cc17c8d0f7f851d25dbef3836a714fe6f8f96a655e96148c35c5413a7e132362983135a2eff0a3a5bb7de70560f4f87ac855578289f2511061e8aa6fa868a2c230640f46dfe1474c76fbce094dfc49a2670d31bce0aaca18ba2f7cd9fd13a18160c9c28ebfc28e99edf79c11280aebf1a47ce6318e1bbc296abd21aea6699effc195291e7f851d34dbef38215015d7e348f9cc631c377852d57a435d4cd33dff832a523cff0a3a69b7de70422c3e087368561b7e0535189da152aeb545e8d7fc0656487afe1474d46fbce083587c10e6d0ac36fc0a6a313b42a55d6a8bd1aff80cac90f5fc28e9a8df79c1063d0a7a7a77baf0afe19a8a6e7ba8e2cfc3e5bbed195ac5ecf851d352bef3820b06274da1c5d864178ffb3cd4edafed9a340dd3d732b72fdaf0a3a6a67de704150c4e9b438bb0c82f1ff679a9db5fdb34681ba7ae656e5fb5e1474d4cfbce082a189d36871761905e3fecf353b6bfb668d0374f5ccadcbf6bc28e9a99f79c1054313a6d0e2ec320bc7fd9e6a76d7f6cd1a06e9eb995b97ed7851d3533ef3820a86274da1c5d864178ffb3cd4edafed9a340dd3d732b72fdaf0a3a6a67de70415050fc0ce5916f05a9cc2dc295ac5bdb412dfcd6e356e79f5f1474d4d0bce0829f2e0a7277f9408e0b6521ad234f15de7d083c09c3add0e2bf28e9a9a279c1053d5c14e4eff2811c16ca435a469e2bbcfa107813875ba1c57e51d35344f3820a7a443c228cbb64bae5614cdc8532b5a1eecd32830bb7452efda3a6a68ae70414f3148a9dc64d2bf8828f5fe1025bc96bd846a762146e8c01fc474d4d16ce0829e529153b8c9a57f1051ebfc204b792d7b08d4ec428dd1803f88e9a9a2d9c1053ca522a771934afe20a3d7f84096f25af611a9d8851ba3007f11d35345b3820a794306746df3fc246cc47c5300ad4a986bce17d6ca07461b3e33a6a68b770414f2760ce8dbe7f848d988f8a6015a9530d79c2fad940e8c367c674d4d16ee0829e4e4daf7429d56b9de8ebdae823490442ee32380e7ed188738de9a9a2dec1053c9b277141008139be89a47bf83e8866add710b278faa3128b1cd35345be820a79354ee2820102737d1348f7f07d10cd5bae2164f1f546251639a6a68b7d0414f26a29d75caedb497cde5eb608f217f8df56ef0c3fe78c4bd0744d4d16fb0829e4d353aeb95db692f9bcbd6c11e42ff1beadde187fcf1897a0e89a9a2df61053c9a6336fcb6843887631479e4bc05641a55668735b9b3130e5d235345bed20a7934b66df96d08710ec628f3c9780ac834aacd0e6b7366261cba46a68b7da414f269659d1864de4845b7ceb3f56f94f64bd544e0fca69c4c53b49d4d16fb5829e4d2b3fb565489f6b39b1a344d5ea9527a2a34861f0d0898c1a94a9a2df6c053c9a550b7d233e1538f61b134fd3cd20ad6d413d063d9e1319d92a5345bed90a7934a916fa467c2a71ec36269fa79a415ada827a0c7b3c2633b254a68b7db214f269522df48cf854e3d86c4d3f4f3482b5b504f418f6784c6764a94d16fb6429e4d2a45be919f0a9c7b0d89a7e9e69056b6a09e831ecf098cec9529a2df6c853c9a54843e48c8e29f1e46901c364ca0134fc0e7ca635de319f36a6345bed91a7934a8f13db71c92a464b89d04cf18bf8c82017a58ec7b96340114d68b7db244f26951d27b6e392548c9713a099e317f190402f4b1d8f72c680229ad16fb6489e4d2a3a4f6dc724a9192e274133c62fe320805e963b1ee58d004535a2df6c913c9a54742aede6f62894df064f2db457bc9f28b7d8b899c81a022e6c45bed9237934a8e755dbcdec5129be0c9e5b68af793e516fb171339034045cd88b7db246f26951ce37c9f48578b5fed1097cf956e8dacada0f24c31d680a5db216fb648ee4d2a39b6f93e90af16bfda212f9f2add1b595b41e49863ad014bb642df6c91dc9a547366b3a2ac2b93a7dfbf2ba0d5399c95362e8d56872a02b1ac95bed923c934a8e6b6286ae3248d77eafb23a429f29f0cec07ded2ce24057d993b7db247a26951cd5511fb51168118017313aad364a3fc57ba81cb5c180b157286fb648f54d2a39a92e51c2cfa68582e62f3b82648addb2f1fc7bc78001645251df6c91eb9a5473515ca3859f4d0b05cc5e7704c915bb65e3f8f78f0002c8a4a3bed923d734a8e6a2455963eb70788e5089b4318a21d4f3c29e3179fd0592ed487db247af6951cd4316c52083b7539f58e02e8b0c3a080f7fe8a54ff70b277e91fb648f5fd2a39a852d8a41076ea73eb1c05d161874101effd14a9fee164efd23f6c91ebfa547350a5b14820edd4e7d6380ba2c30e8203dffa2953fdc2c9dfa47ed923d7f4a8e6a14423b5cca90ff7d7ece3a8059c69ea3f9f16cdbb5593d9890db247aff951cd42710891241f8617db5693b28ab839b6fee8f1c1367b27cd522b648f6002a39a84d21122483f0c2fb6ad27651570736dfdd1e3826cf64f9aa456c91ec005473509a42244907e185f6d5a4eca2ae0e6dbfba3c704d9ec9f3548ad923d800a8e6a134105aeabc996e7063169f6d541339a76f2522f73a93e84d16b247b00251cd426720b5d57932dce0c62d3edaa826734ede4a45ee7527d09a2d648f6004a39a84ce416baaf265b9c18c5a7db5504ce69dbc948bdcea4fa1345ac91ec0094735099c0ee9ae91a1d605d081c19298902b6373d55a15d19f440cb6923d80138e6a13371dd35d2343ac0ba1038325312056c6e7aab42ba33e88196d247b00271cd4266e3ba6ba468758174207064a6240ad8dcf556857467d1032da48f6004e39a84cdc035fcd39e512b13bdad2bcbc77b9439957130a89fa2209b591ec009d735099b706bf9a73ca256277b5a57978ef728732ae261513f444136b23d8013ae6a1336e0d7f34e7944ac4ef6b4af2f1dee50e655c4c2a27e88826d647b00275cd4266dc1afe69cf289589ded695e5e3bdca1ccab898544fd1104dac8f6004eb9a84cdb835fcd39e512b13bdad2bcbc77b9439957130a89fa2209b591ec009d735099b706bf9a73ca256277b5a57978ef728732ae261513f444136b23d8013ae6a1336e06405a7261b0ed1ae81755715e4af0e507104fe7b888411657b00275dd4266dbf541da6f90c802614cfb0d623bfbc449b8e4c58f41109c6cbf6004ebca84cdb7d344da69eef62cee16c27d43f75d6b131c8db0de522153198ec009d7a5099b6f9689b4d3ddec59dc2d84fa87eebad626391b61bca442a6331d8013af4a1336df25d48f32893edbe3d7d6578f5cdb8ecc1cfae939188566a64b00275ea4266dbe346a43efdfe3dff32c79119e391d0017e4b9f832010ae78ca6004ebd584cdb7c5195ad6a8d2de811d5be85bbf19fe2af74381623d215e9595c009d7ac099b6f8932b5ad51a5bd023ab7d0b77e33fc55ee8702c47a42bd2b2b8013af581336df12656b5aa34b7a04756fa16efc67f8abdd0e0588f4857a565700275eb0266dbe2456e90df36d568ba2ac0905f0c64f7fb4c84d6de60af650af004ebd614cdb7c4739e47493b10f99fd24d833d982fd27643cdd37c915ee455f009d7ac399b6f88d73c8e927621f33fa49b067b305fa4ec879ba6f922bdc8abe013af587336df11a73a42afb9aa0eaac6026f75e0252c58b9fb73b2157bab97d0275eb0f66dbe233735aaea40ba458108d1416b3fb03b311ebb0d23faf7716fb04ebd61fcdb7c46572c7b5f4edab32d8e6ee555fec658e1e83a4007c5eefd1f709d7ac409b6f88c971a1c496b1b8e8699aa2d2b7cf294437b38a5cf5bde147ef13af588236df11916f55e1da39d4538b020bcd6794b0b06a135715e87bc433df275eb1056dbe23216abe1c614a0b29cdd0ddc2c71fbf88ced2f087cdf78a0bbf4ebd620bdb7c4641618e916f6a78d6536e81ad8635dd399852236b98ef15bb7f9d7ac418b6f88c814f2f7b8bab542f5ea9c9830462189b2b5089332ede2d1b003af588326df119012a714fc42d0ae17520592e00ba8f5e514d54c25abc5bda0175eb1065dbe2320154e29f885a15c2ea40b25c01751ebca29aa984b578b7b402ebd620cbb7c4640235d797bd8a8e088c4e2adffae09ba13fe1956567f1710c06d7ac41986f88c8036baf2f7b151c11189c55bff5c137427fc32acacfe2e2180daf588330df1190066370b7a3009aa4e90571a7e378ccacfa3297f19cc5c5d41c5eb10662be23200b52f3c7f2d797cc89d7a977bee7f781ef11723f368b8d4c39bd620cc67c46401531f9e89285921bcb7c191775c64d2bd8cf26da6a171c3c747ac4198df88c802963f3d1250b243796f8322eeb8c9a57b19e4db4d42e3878e8f588331bf119005253f9faf6ecaaf1e5bd2a85cf0f92d75de8ddc5a55c7295d2eb106638e23200a334064e9aafb86683471b33961583d6b67dfde747b8e6cfa6d620cc72c4640145680c9d355f70cd068e36672c2b07ad6cfbfbce8f71cd9f4dac4198e588c8028a5c2b931795441cc4e932f6504c6d82d4a439f91be39ce29c588331cc1190051344697edc00eabc419f2c14988f392da3f4b64e34c73b6939b106639923200a2514e55664d837fb3b0b1e512914d0834295aef8668e787674620cc7334640144929caacc9b06ff676163ca25229a106852b5df0cd1cf0ece8c4198e668c8028925395599360dfecec2c7944a453420d0a56bbe19a39e1d9d188331ccd19005124333d0bd398225c9025b8b1409ce2420f59ba1f3173c557a41066399b3200a247667a17a73044b9204b71628139c4841eb3743e62e78aaf4820cc73366401448e590687fb36ebf4f863a8ecfa69e73038132ad8c2cf1702914198e66dc802891b3e1f68a3443a6ca8941801ecca2c886ad2980d829e2fa9238331ccdc90051235085129f35ed75c08f4f62bd18ab738d0517277023c60f648066399ba200a246910a253e6bdaeb811e9ec57a3156e71a0a2e4ee0478c1ec900cc73374401448d22144a7cd7b5d7023d3d8af462adce34145c9dc08f183d920198e66e8802891a442894f9af6bae047a7b15e8c55b9c6828b93b811e307b240331ccdd1005123481124f7e2c3d843471c28e510a1d1b4ffc369cc20c611088166399ba300a2468f2249efc587b0868e3851ca2143a369ff86d398418c221102cc73374601448d1e4493df8b0f610d1c70a394428746d3ff0da730831844220598e66e8c02891a3c153a17c2f5249cf0ae0d507d04ebcff8c790bd033089e80c31ccdd19051234772a742f85ea4939e15c1aa0fa09d79ff18f217a066113d0186399ba320a2468ee54e85f0bd49273c2b83541f413af3fe31e42f40cc227a030c73374641448d1dc35e316c47f876a3d3d30abe01dbca7c0e8c844168450e4628e66e8c92891a3b76bc62d88ff0ed47a7a6157c03b794f81d190882d08a1c8c51ccdd1925123476e639eb3bed4802bacc188d7786d50c6fe4f636c571145358b399ba325a2468edb534fc02a7f62da114fd7d6e8d0ffb5f74b0934ab228c0f177337464c448d1db532b1d901d52836da6c75d5c9985d93e94254c5534519c22fe66e8c99891a3b696563b203aa506db4d8ebab9330bb27d284a98aa68a33845fccdd1933123476d256d9bcb42b035e217e9d7f1e57d4779fb595714a1468acc099ba32672468eda339c5d2152c693efaca012634a607173a176d3e9128d2fd82337464cf48d1db45738ba42a58d27df594024c694c0e2e742eda7d2251a5fb0466e8c99e91a3b68a7329a10188077ea2f4cac0ca8e7a84e309f75641a34d9a09cdd1933e23476d1372659aafe6717ffdb65ba98d135331c0c0310880469cd8149ba3267d468eda2570dd8e0ca34582b3397d7b121d048b7c2ca46cfd8d3b542a37464cfb8d1db4496dcd74c61ced881e3fc11e1c30673ef3058b35f81a784c556e8c99f81a3b689167ad4239103d92f44c486430572ca5e0b758c7ed34f23cabdd1933f13476d1215b6cdd1ef6dda8a06556f058a4b773bc1af3ebd769e61d58ba3267e368eda24142ec12eac41dd3f8977408a93fcd0f72e22a33abd3cddeb27464cfc7d1db448111ea7e825e9e2aa8fbae394a75f846e07096c354a79d6165e8c99f90a3b6890123d4fd04bd3c5551f75c7294ebf08dc0e12d86a94f3ac2cbd1933f21476d120247a9fa097a78aaa3eeb8e529d7e11b81c25b0d529e758597a3267e428eda24041b664cbfcb53d7ffaa37f24ba6205efe30f876a23cecaf30464cfc861db4480736cc997f96a7afff546fe4974c40bdfc61f0ed4479d95e608c99f90c3b68900e6d9932ff2d4f5ffea8dfc92e98817bf8c3e1da88f3b2bcc11933f21876d1201c6744beab310142b51e85ba5527611fec3406110ee7671d833267e431eda240375a9bd6033865082209d19ca2452067d3144e7e1acecfdf0764cfc864db44806d414a04b3472c92fbe069613c809ef7a0d4df58329da1620fc99f90cab68900d90ea6621364bba8af8d98ea70f79c173c56010c623b446820933f21966d1201b11d4cc426c977515f1b31d4e1ef382e78ac0218c47688d041267e432cda2403623a99884d92eea2be3663a9c3de705cf158043188ed11a0824cfc8659b44806c401456947fc3fc834398d7b7fb33ee1dd5c4abf0eda24e50599f90cb468900d87028ad28ff87f9068731af6ff667dc3bab8957e1db449ca0b33f21968d1201b0e0515a51ff0ff20d0e635edfeccfb8775712afc3b6893941667e432d1a240361c0a2b4a3fe1fe41a1cc6bdbfd99f70eeae255f876d127282ccfc865a344806c381456947fc3fc834398d7b7fb33ee1dd5c4abf0eda24e50599f90cb468900d87028ad28ff87f9068731af6ff667dc3bab8957e1db449ca0b33f21968d1201b0e0515a51ff0ff20d0e635edfeccfb8775712afc3b6893941667e432d1a240361c02ec6fcaaf6469cd49383e7d195cf16a8d1a1e36a127426cdfc865a354806c37f5d8df955ec8d39a92707cfa32b9e2d51a343c6d424e84d9bf90cb46a900d86fe472e4b58af7cf60a1ad5c73e4d9a829df2c9e9a549d23f38f21968d6201b0dfb1a6eef5e355c6ecc0271b67491932d3691d62f4793a62272e432d1ad40361bf534dddebc6ab8dd9804e36ce923265a6d23ac5e8f274c44e5c865a35a806c37ea69bbbd78d571bb3009c6d9d2464cb4da4758bd1e4e9889cb90cb46b500d86fd45f89d39e8145f917e053db9c82f791af3af3d6399d32b79821968d6b01b0dfa74b25ffe9d8ee74e78d6ddf30fc4d4b59222a08703a671331432d1ad70361bf4d225e5880883f6c86e7a1e659eef8beacf0966cdd74cfca63865a35af06c37e9944bcb101107ed90dcf43ccb3ddf17d59e12cd9bae99f94c70cb46b5e0d86fd32158bbaaef76034d36b4dc15fb24122ae6e9c0f72d340cd8f1968d6bd1b0dfa632b17755deec069a6d69b82bf6482455cdd381ee5a6819b1e32d1ad7a361bf4c6562eeabbdd80d34dad37057ec9048ab9ba703dcb4d03363c65a35af46c37e98c38702e2491642953273432f588673d6e2122d7939a081079cb46b5e9d86fd31770e05c4922c852a64e6865eb10ce7adc4245af27341020f3968d6bd3b0dfa62e6dd3113f1bf328046996f3ce17fb1db330cdba4b6821e5e82d1ad7a861bf4c5b67b87b2b0e48d2c09ff40f94265463610dddd093d0456fd15a35af51c37e98b55b834f02f2f428390cae47204306eebcc7fdfd24a08c83a3b46b5ea486fd31694318f6b2bc4ad329e622b6387c6c05743c3e5646411aab4868d6bd4a0dfa62d1124446124ef8290b990b9468ef3632e324bf08898236fa91d1ad7a951bf4c5a124888c249df05217321728d1de6c65c6497e1113046df523a35af52a37e98b42491118493be0a42e642e51a3bcd8cb8c92fc222608dbea4746b5ea546fd316841e34893f4e23cb149522cb3f700fbf13d23aa04911b9788f8d6bd4a9dfa62d073c69127e9c4796292a45967ee01f7e27a47540922372f11f1ad7a953bf4c5a0e04e47daa0ef1af0a215154f5b69d2449f52cdd2146e7863f35af52a87e98b41b09c8fb541de35e1442a2a9eb6d3a4893ea59ba428dcf0c7e6b5ea550fd3168361391f6a83bc6bc28854553d6da749127d4b374851b9e18fcd6bd4aa1fa62d06c2723ed50778d78510a8aa7adb4e9224fa966e90a373c31f9ad7a9543f4c5a0d84e47daa0ef1af0a215154f5b69d2449f52cdd2146e7863f35af52a87e98b41b028a20deeb49863fbf6f0c6aeca02b13951de0025dcf26be7b5ea5510d316835f51441bdd6930c7f7ede18d5d94056272a3bc004bb9e4d7cf6bd4aa21a62d06be2e9a9067a8c412a7a88942b31e68ecdff3ba5c9473cb539fd7a954444c5a0d7b5d3520cf5188254f511285663cd1d9bfe774b928e796a73faf52a88898b41af6467c9a4b7972cd566eeb32c47001db7a7b2bce4ecf2ef2805ea55112316835eb190b8d43c9481d64aa9c8d80d661deefa299f89a9e5f8901bd4aa22562d06bd532171a8792903ac955391b01acc3bddf4533f1353cbf12037a95444ac5a0d7aa642e350f25207592aa72360359877bbe8a67e26a797e2406f52a88958b41af54546ec2cb20a36ddd21aa93fea96d1f77c11220d1f2fdec0eea55112c16835ea734efde4317a95e72101b4ff5493866ea2e669da0e5fd7c1ed4aa22592d06bd4d69dfbc862f52bce420369fea9270cdd45ccd3b41cbfaf83da95444b25a0d7a9a5fd1d1b93507fc800d3367cd1b3fc3a365dcd28097f7947c52a88965b41af5334bb5fc1f40727bb7e72cf7922cddaf4177fc00fe2ff0ccf9a55112cc6835ea65237e50eb57477a279b20171c5019867d9c3a5df95fe33df44aa22599d06bd4c946fca1d6ae8ef44f36402e38a0330cfb3874bbf2bfc67be895444b33a0d7a9921a0b9c5a33806b563946846936c441f11d2bd3e27f8e9bd22a88966841af5323341738b46700d6ac728d08d26d8883e23a57a7c4ff1d37a455112cd0835ea646682e7168ce01ad58e51a11a4db1107c474af4f89fe3a6f48aa2259a106bd4c8c5c6f3b7e7265dd6996fa4b41ac80378395a0fb10fc7682925444b3430d7a991744f0cfa9bb2e3d8afababe7b4f5e9701d784521ef8eea925a88966871af5322d15f3f8004cbefdcdc23ba4ee951b55fe5b4b003af1def64c5112cd0f35ea64592be7f000997dfb9b847749dd2a36abfcb6960075e3bdec98a2259a1e6bd4c8b257cfe00132fbf73708ee93ba546d57f96d2c00ebc77bd931444b343cd7a991643bb218af3c5a7125dea34f6c9f38d7ed869a5dd48ef956638896687aaf5322c703768a0b4f1765038a0cc6d134cfd7d5b97717a61df450c8112cd0f65ea6458d06ed14169e2eca0714198da2699fafab72ee2f4c3be8a1902259a1ecbd4c8b1a0dda282d3c5d940e28331b44d33f5f56e5dc5e9877d1432044b343d97a9916341bb4505a78bb281c50663689a67ebeadcbb8bd30efa28640896687b2f5322c683768a0b4f1765038a0cc6d134cfd7d5b97717a61df450c8112cd0f65ea6458d06ed14169e2eca0714198da2699fafab72ee2f4c3be8a1902259a1ecbd4c8b1a069b4db809c3bc39a4ff7dc452a541d690a0845847d15d6054b343d98a991633f5f7c0fae0eda09ec6cb5e0824b0662ccc052e705fa2d500b96687b325322c67d4b0a7808f4169690a631e8fc8c6aed942ce82a08f45c44182cd0f665a6458cf9222748bebe8fafd91929f9f10f3403230612b00ee8ba2c3159a1eccc4c8b19f1444e917d7d1f5fb23253f3e21e6806460c25601dd1745862b343d998991633e214af7ba7d0a1421c316e0fbc332e3486c48d1c38a2ea54c66687b332322c67c3295ef74fa142843862dc1f78665c690d891a387145d4a98ccd0f66646458cf8652bdee9f42850870c5b83ef0ccb8d21b123470e28ba953199a1eccc8c8b19f0c318e35eb5b6c93995836a5d98fcfcc30d0ab3dc217544a34343d999291633e17631c6bd6b6d92732b06d4bb31f9f9861a1567b842ea89468687b332522c67c2e524b305a4414d11d2da0bf5e359d58bdeeef53055d52ccd1d0f6664b458cf85b30a8b9615e8c24f22807a6b46198d9768a210207baa73da4a1eccc978b19f0b5615172c2bd1849e4500f4d68c331b2ed1442040f754e7b4943d9992f1633e16a4eb53e32509316806ce4c2c97cc18dd4d4c6641bea9e9a9387b3325f2c67c2d3297cd5117788afb8a68fad8aefe143a455cf2434d53ed9280f6664bf58cf85a552f9aa22ef115f714d1f5b15dfc28748ab9e4869aa7db2501eccc97eb19f0b4a3205acf2b485419a6704de23b5e3368c037eecd054fd08a13d9992fe633e1693640b59e5690a8334ce09bc476bc66d1806fdd9a0a9fa11427b3325fcc67c2d2654290c77a877892168d9a086cdeb022aba3e0f3e53f5c685f6664bfa8cf85a4b3464719c275194fa9e79690592342c5020be7a79a7ed310ceccc97f619f0b49568c8e3384ea329f53cf2d20b246858a0417cf4f34fda6219d9992fec33e1692a5da41f1d73a8d6a246abcc0e3f2ed93b2f3c45e39fb66834b3325fd967c2d253475a96e7bdb42ffc5a1dc01474bbda710abae7c43f6e746a6664bfb3cf85a4a51ac7867c51cae2b08101a820dfd5dcdcc1b82b857ede8cd5ccc97f689f0b4949358f0cf8a395c56102035041bfabb9b98370570afdbd19ab9992fed13e1692926b1e19f1472b8ac20406a0837f57737306e0ae15fb7a33573325fda27c2d2524624e8c8f64b9983bd4d368fef50d0ee0ba03b828f6f60aaf664bfb45f85a4a4750af71cb9fd5b32f766cf9f5e07845bc2049cc4eededb95fcc97f68cf0b4948d2d713c44160de916b9a01be3b74eb372ecd5f49adbdd16c0992fed1ae16929195ae278882c1bd22d734037c76e9d66e5d9abe935b7ba2d81325fda35c2d2523241d749bd2e9a2712b3469786d398f5c65f9a2e686f75ff0364bfb46c85a4a4630fc0ec273396d0dd335357059d9013876b76b8cddeeda207c97f68da0b4948c51f81d84e672da1ba66a6ae0b3b20270ed6ed719bbddb440f92fed1b41692918a3f03b09cce5b4374cd4d5c1676404e1daddae3377bb6881f25fda3682d2523140a19b9e6731909a16760e024e2dec43607f8226bf76eb43f4bfb46d15a4a4627143373cce6321342cec1c049c5bd886c0ff044d7eedd687e97f68da2b4948c4e2866e799cc6426859d8380938b7b10d81fe089afddbad0fd2fed1b456929189c50cdcf3398c84d0b3b07012716f621b03fc1135fbb75a1fa5fda368ad25231382dadf71407f31cce42d42a46244a6b5b2bc482bc76ece7f5bfb46d16a4a4626f5b5bee280fe6399c85a8548c4894d6b657890578edd9cfeb7f68da2d4948c4de42ca34fcf62ef5f0d816d1108787d5675b5466eedbb543d7fed1b45b929189bb11a6c2a6c2c06e997cf3ca19056dd2c962eb29dab76c2bb0fda368b825231375234d854d8580dd32f9e794320adba592c5d653b56ed85761fb46d1704a4626ea469b0a9b0b01ba65f3cf286415b74b258baca76addb0aec3f68da2e0948c4dd419486de2ec65f783b46478c021ccbe45c39baad2bb630188ed1b45c229189ba73290dbc5d8cbef0768c8f18043997c8b873755a576c60311da368b845231374e6521b78bb197de0ed191e3008732f9170e6eab4aed8c0623b46d1708a4626e9c5655c7c439923ed56fe9edf904c41a28c91fb292db19b04868da2e1248c4dd3738bde83549870062ac9a03e9ffe65c4c3e81c122b6350491d1b45c259189ba6d717bd06a930e00c5593407d3ffccb8987d0382456c6a0923a368b84b231374da6f09f981fc7e84427f2e379ff5f7992ba6496087d8d5b64846d170974626e9b36a264bb0cf5f8b3ccb229737e24d5a51f8d51d0cb1ad10918da2e12f8c4dd365605ef00e75219931630b5667baf8dc9e9dec9616635bc5241b45c260189ba6c94cd038c9c0a5b51a92dcd4c76c4fe137e81b8829c6b92e49368b84c131374d9125b2ca4057adececf27fd186cefdea6a7c796c508d7400936d170983626e9b214b659480af5bd9d9e4ffa30d9dfbd4d4f8f2d8a11ae80126da2e1306c4dd364222dd81ae351a366b96c56e133255d1a49e280d3f35d1a64eb45c260e89ba6c8345bb035c6a346cd72d8adc2664aba3493c501a7e6ba34c9d68b84c1d1374d90617885f65aacb5c6627dbe044bfb56e8d24e290f9d7483d3bd170983b26e9b20b2f10becb5596b8cc4fb7c0897f6add1a49c521f3ae907a77a2e130764dd364165e217d96ab2d71989f6f8112fed5ba34938a43e75d20f4ef45c260ec9ba6c82c485553da2cbd65e90ba52a1df4099c63d356e3cbba438ddf8b84c1da374d90571cbd00612fdd4e89e4107c33de7160c252f023947488bfc0170983b56e9b20ad397a00c25fba9d13c820f867bce2c184a5e04728e9117f802e13076add36415a72f40184bf753a279041f0cf79c583094bc08e51d222ff005c260ed5ba6c82b471fa5bb6554cf706ed4a0996e9e92e0d43c378a0a447a201b84c1dac74d905677007101980fc70c5a75a3b25ca30841533c94d3e4890e80470983b59e9b20acd6c2078dfd85b64431b7a9e438abf302513d4f67991237409e13076b4d364159964534a6c87194b3e03bb647f0bdc8844d3ec48f022488c14c260ed6aa6c82b3154b8ed85e4951933d43cf0f60e173884541aeddd4492bc2a84c1dad64d905661358433b89f8cb51f754009e4128c9903547837b789271c560983b5ad9b20acc16b0867713f196a3eea8013c825193206a8f06f6f124e38ac13076b5b364159826223278f54955735a1c64f8840908c07fe233adb249e1559260ed6b76c82b3035058a7cb7f8d31231052c708777f400aa888d1b3493dceb34c1dad6fd90566052cc3a843d57ce4fded6bb608e55ca80ffd53ff63927d4167983b5ae0b20acc0959875087aaf9c9fbdad76c11cab9501ffaa7fec724fa82cf3076b5c1641598123f20f9bc2c5616af8275001b8bd0c83aa192598b49f6a99f60ed6b83c82b30230a544c252f0eb016d1b0282f0dffb86fef670f1393eef73fc1dad7089056604514a8984a5e1d602da360505e1bff70dfdece1e2727ddee7f83b5ae1120acc08a29513094bc3ac05b46c0a0bc37fee1bfbd9c3c4e4fbbdcff076b5c224159811452a26129787580b68d8141786ffdc37f7b38789c9f77b9fe0ed6b84482b3022831571affc74d8424e7c8aae8d659aef9a2b34d363ef117fd1dad708a0566044f62ae35ff8e9b0849cf9155d1acb35df345669a6c7de22ffa3b5ae1140acc089e516ec4abf398934b6be8d39b4fc4e3e1370f90d5fbc603f576b5c2291598113b2eefe204bd93a94ea497cf2e95e7efbd1a617da8f78dabebed6b84532b3022755ddfc4097b27529d492f9e5d2bcfdf7a34c2fb51ef1b57d7dad708a6566044ea47d1e0bfccb127f25f2564b24dfde6ef15c852a0de3853b0b5ae114dacc089d31bb61a2c6fc4d29c8b10f15c9259f5d8d7d3013ebc724b626b5c229c598113a5376c3458df89a5391621e2b924b3ebb1afa6027d78e496c4d6b84538b302274a6ed868b1bf134a722c43c5724967d7635f4c04faf1c92d89ad708a7166044e9469c32a105489179c254db2dc892dd6c16ada65f2e393ff145ae114e3cc089d275f98accd7f74b1f017618db108b9d57d81f727e2c729a229b5c229c898113a4d4b43b247d54be697fb89435a07d1d2f5b030abc28e54e8546b845392302274992299bd3c80fa4fe7c3d8aeac0601cde60ca3b3821cab74a9d708a7256044e93145337a7901f49fcf87b15d580c039bcc194767043956e953ae114e4ac089d26216794d9eda4bc256dc28e2a80e655f92ded12a0572af76a85c229c968113a4c32cf29b3db49784adb851c5501ccabf25bda2540ae55eed50b845392d0227498659e5367b692f095b70a38aa039957e4b7b44a815cabddaa1708a725a044e930c3fdcc5a3a8c0956eae0d3d3869892491a2cbac28957d5943e114e4b5089d26170bcbe3f427e3ad9528e0a268c970711df1d9b44e2afc5688c229c96b113a4c2d1797c7e84fc75b2a51c144d192e0e23be3b3689c55f8ad11845392d62274985a2f2f8fd09f8eb654a38289a325c1c477c766d138abf15a2308a725ac44e930b45e5f1fa13f1d6ca9470513464b8388ef8ecda27157e2b446114e4b5889d2616848d097ef549d5c0a5ad04e848d6539d9c9dda0dfafc70c8d229c96b213a4c2cf1db3888b7f9d3acc8266c50111289bae3ffd9dbc5f8fbd1b45392d652749859d3b671116ff3a759904cd8a022251375c7ffb3b78bf1f7a368a725aca4e930b3a02e07adad4d76de9d6613bfc3b0096b3ac38d2ee7e40986e14e4b5959d26167305c0f5b5a9aedbd3acc277f876012d675871a5dcfc8130dc29c96b2b3a4c2ce60b81eb6b535db7a75984eff0ec025aceb0e34bb9f90261b85392d656749859cc1703d6d6a6bb6f4eb309dfe1d804b59d61c69773f204c370a725acace930b3982e07adad4d76de9d6613bfc3b0096b3ac38d2ee7e40986e14e4b5959d26167305c0f5b5a9aedbd3acc277f876012d675871a5dcfc8130dc29c96b2b3a4c2ce6044310f620c3dfd2d65152706b683d4e5ba77179c9027bf86392d656849859cbf14747770eede7d1296f076056365d1c621308b362051230d725acad1930b397d28e8eee1ddbcfa252de0ec0ac6cba38c4261166c40a2461ae4b595a3261672fa51d1ddc3bb79f44a5bc1d8158d97471884c22cd881448c35c96b2b464c2ce5f42fb614344d566b4c8449d823118cb62bb5c6b5ae028abc6c92d6568d9859cbe75f6c28689aacd6990893b04623196c576b8d6b5c051578d925acad1b30b397ce4aeaa97e0bbc2fe9dded88843c9100a9835d32b50a2c95b34b595a3761672f9b21e7aba8eddae28b88a139006f80294db2fcc167145acf6796b2b46fc2ce5f3543cf5751dbb5c51711427200df00529b65f982ce28b59ecf2d6568df859cbe6a13b107508dce0ce5ef4b0bf9b45ecd3178356199516ce19f5acad1c00b397cd327620ea11b9c19cbde9617f368bd9a62f06ac332a2d9c33eb595a3801672f9a64ec41d4237383397bd2c2fe6d17b34c5e0d5866545b3867d6b2b47002ce5f34c299a933144d2e9e7471e87c5995491866ded68c78b68b0fbd6568e0159cbe6975335266289a5d3ce8e3d0f8b32a9230cdbdad18f16d161f7acad1c02b397cd2e327ca571e9ae2a54e940470e5bb06e1463f7ff1b2da467f0595a3806672f9a5b64f94ae3d35c54a9d2808e1cb760dc28c7effe365b48cfe0b2b4700cce5f34b65604ee747d1b2c0b71c74431651fe04c3c225869b69343c26568e01a9cbe696b381c3595d098daceb054b05ac09de89324870cd06d282b85cad1c036397cd2d570386b2ba131b59d60a960b5813bd126490e19a0da50570b95a3806c72f9a5aa6c832f0418c5edf28e18e962f8d5ca473e5e8f3eb4a252182b4700d9e5f34b536518b6b507ee5e9ce8f7fabde809bc8928ff7a7a69464831568e01b4cbe696a55643c616e63f3ff19eb61d73c671a10cfe4150f1d28e3463ad1c036a97cd2d493899e4daa2e1029b0a3262df83416a14a8c4fde0a51e0cc85a3806d62f9a5a917133c9b545c205361464c5bf0682d4295189fbc14a3c1990b4700dac5f34b5226e79ec1761e68d23f58fb3760363d04d4f56537f9479d72268e01b59be696a43690630db9a2f9cffb7e58ee3fd25c8954aef02fc28f55245d1c036b47cd2d4855e1eba640ac1bcb73c9145bff0a9b925422061f551ec488ca3806d69f9a5a909484fcd74ebe5fc2645e8b377d7b19a4530831fe7a3da351a4700dad4f34b52111cb1f396ae2e7b0458978ee7a5c15c850d489bcc47b60e358e01b5aae696a4213963e72d5c5cf608b12f1dcf4b82b90a1a9137988f6c1c6b1c036b55cd2d484272c7ce5ab8b9ec11625e3b9e9705721435226f311ed838d63806d6ab9a5a908471a1f56247d65ada91829f3524690c2316873a5f3db215ad700dad5834b521076f564371660f386cefcb66623f304040d950d0bb7b65cf5be01b5ab1696a420d6abedf8fa280f391ac5cf4bc74bea87c5ee3fd73f6cd42b8c036b563d2d48419619017cc1b6469db25801170dfdb78f36a0a56e4ed9c2972806d6ac8a5a908314f3288450d2b566e17c64ad9b61519e1805709c6db39f6e600dad5924b5210612a776936f0b92f93fc52bdab62885bbdacf06f8ab67591cd01b5ab2596a420c154eed26de1725f27f8a57b56c510b77b59e0df156ceb239a036b564b2d48418235effd8899474107be111ea5807f96f160041a27d9d7eb3506d6ac975a9083036bdffb11328e820f7c223d4b00ff2de2c008344fb3afd66a0dad592eb521060663d24ecf3b7f86d6c50aa28df85c83c02c52c49c676150d51b5ab25e6a420c0b53b6f64b4d61906556db6d13e7172f7b04e7e535cec445ab36b564bdd4841815338045437125a3827a7d021fc48c86f0b61226689d8a2f576d6ac97ca908302967008a86e24b4704f4fa043f89190de16c244cd13b145eaedad592f9521060525a136dba9af910c1b6ba3077089043bd848af59f762a615eb5ab25f3a420c0a3403934220c54a43b3a3a88e6077eaf75b558473bec5666be6b564be8484181450c84c0f0ef0bcb2e413b39c4055b86e616f2ea74d8ae717dd6ac97d190830289190981e1de17965c827673880ab70dcc2de5d4e9b15ce2fbad592fa321060512321303c3bc2f2cb904ece710156e1b985bcba9d362b9c5f75ab25f46420c0a2464260787785e597209d9ce202adc3730b79753a6c5738beeb564be8c84181448545e67bbc71f359be079c4384c16965c1b71034a8ae8bbde6ac97d1a0830288f34cf282464a0edef8db9b0688e8b54b2e324629215d31bbdd592fa351060511d699e5048c941dbdf1b7360d11d16a965c648c5242ba6377bab25f46a20c0a23a5f4ef93e68e63a7603ace99a308b7ac638d3e645574e12f8564be8d5418144734ab04b29a82ef7a3d41ffb2c57751d871dea2887ae9dc9f1ac97d1ab830288e52172ef0026c071ff75061e50a5486308e816ad0c5d3d37e4592fa358060511c942e5de004d80e3feea0c3ca14a90c611d02d5a18ba7a6fc8b25f46b00c0a239211de14ad71644ab5a0dea13a8b7fb41e4c9d102e74f6839264be8d611814472323bc295ae2c8956b41bd427516ff683c993a205ce9ed0724c97d1ac230288e46477852b5c5912ad6837a84ea2dfed079327440b9d3da0e4992fa358460511c8c1b02fe186184d864d3bb31cc525bc8ed112add70a7b5c09425f46b09c0a239173605fc30c309b0c9a7766398a4b791da2255bae14f6b81284be8d6138144722e6c0bf861861361934eecc731496f23b444ab75c29ed7025097d1ac270288e45c642a496fe28945de6a9fb65a893c6f63359947823dafa8a22fa3584f0511c8b75466eb8c9b750e74a20594ad08d706c11774eb017b60f5455f46b09f0a23916d34e02fc60d4c9fa110d15152080c357cdb2c31fff6c38e8bbe8d613f144722d969c05f8c1a993f4221a2a2a410186af9b65863ffed871d177d1ac27e288e45b25f9317c50b95013c100b6d40168efdee18f323fcdb0fde2ffa3584fd511c8b634b388836ed8c852fecdd0278237c23d6de28a3f6b6216060f46b09fba23916c52283691ab17b8d17a6802ce83d566fa86893a3ea6c4464c2e8d613f844722d894506d23562f71a2f4d0059d07aacdf50d12747d4d888c985d1ac27f088e45b12161ffd179c50b71666c6db98ebb7e69c4e90eba6b113370ca3584fe211c8b6232c3ffa2f38a16e2ccd8db731d76fcd389d21d74d62266e1946b09fc423916c46587ff45e7142dc599b1b6e63aedf9a713a43ae9ac44cdc328d613f884722d88c3d124169b8e83b6b02fd04bf541d5cdd20c9b932889b5c661ac27f118e45b1170636db804832f98dd2c031769e98e1b4edd5ce6211385ccd3584fe241c8b622d0c6db7009065f31ba58062ed3d31c369dbab9cc42270b99a6b09fc483916c45a18db6e0120cbe6374b00c5da7a6386d3b757398844e17334d613f890722d88b431b6dc024197cc6e96018bb4f4c70da76eae731089c2e669ac27f120e45b1168636db804832f98dd2c031769e98e1b4edd5ce6211385ccd3584fe241c8b622d052edc8b5dcc1b47224cc56cbc97a5e9866fc283f270d3da7b09fc484916c459f31edea188fe5eb9c165ed58f8952e52b7a3aac7b4e1c1f50613f890a22d88b3d63dbd4311fcbd7382cbdab1f12a5ca56f47558f69c383ea0c27f121445b1167a53ca010f15fa312826417e361ba9bca8952d0dea3872214284fe24298b622cf333a65acb0256e508194924642db1a14bd69c77d170e5e68609fc485416c459e5674cb59604adca10329248c85b634297ad38efa2e1cbcd0c13f890a82d88b3ca5aabc3d8dfbe16d831eab988ad24ad2a06b43b42c3993e1927f121515b1167934169e05e95deb068309b9b0950a7824eb9aad282873420334fe242a3b622cf250ee6196a021fe3882dfd5e0a97ad2c981f9801020e69e4679fc485486c459e491dcc32d4043fc7105bfabc152f5a59303f3002041cd3c8cf3f890a90d88b3c923b9865a8087f8e20b7f5782a5eb4b2607e60040839a7919e7f121521b1167924034323fce7619ef93cb1184cb3c78cbba902640d7350c73dfe242a44622cf247068647f9cec33df279623099678f19775204c81ae6a18e7bfc485488c459e48e0d0c8ff39d867be4f2c46132cf1e32eea4099035cd431cf7f890a91188b3c91c1a191fe73b0cf7c9e588c2659e3c65dd4813206b9a8639eff12152231167923834323fce7619ef93cb1184cb3c78cbba902640d7350c73dfe242a44622cf247068647f9cec33df279623099678f19775204c81ae6a18e7bfc485488c459e48e05cdb57e6aeca4106f90c3b24e84156e4ecdb5f59d4337380890a91198b3c91bf45c9087a33f704c5bede9e41c6e0d5c485f91ab0a8688b02121522341679237d17a469a13e508c434a83647b841fd383b834915e50d2ba05242a44692cf246f92f48d3427ca118869506c8f7083fa707706922bca1a5740a485488d259e48df25e91a684f942310d2a0d91ee107f4e0ee0d24579434ae81490a911a4b3c91be44935a5b6c8e6e4d220e14bd4175cc4186de6e6ef8697742a2152234a679237c71e7da41a68304c5c0e88bfa02517b02b881029dc0d308c5542a44695cf246f8d3cfb4834d06098b81d117f404a2f6057102053b81a6118aa85488d2b9e48df1a0608e9167723b42806e926788abce8a8cc83036d34c3d5560a911a583c91be330c11d22cee4768500dd24cf11579d151990606da6987aaac152234b079237c661823a459dc8ed0a01ba499e22af3a2a3320c0db4d30f55582a446960f246f8cc304748b3b91da140374933c455e7454664181b69a61eaab05488d2c1e48df198608e9167723b42806e926788abce8a8cc83036d34c3d5560a911a583c91be3304d2f7b7bbad907b8a9eaf7094dfb3d143ca2c9a3987c4ec252234b089237c65f26714fa44c149229209c160a9254a2232587ef4430fa4185a4469612246f8cbd4ce29f489829245241382c1524a944464b0fde8861f4830b488d2c2448df197a25d7973e06b4cb5c4f3680223fb0b0874262190dc3eaaa17911a584991be32f34baf2e7c0d6996b89e6d00447f61610e84c4321b87d5542f2234b093237c65e62370b5a4f135b02909a02880f520ea17b5cac0340fac4c5f4469612746f8cbcb46e16b49e26b605213405101ea41d42f6b9580681f5898be88d2c24e8df1979619d52f409b39435bf346c9fbcae1d059836d5ccd3eb2d57e11a5849e1be32f2b33aa5e81367286b7e68d93f795c3a0b306dab99a7d65aafc234b093c37c65e566754bd026ce50d6fcd1b27ef2b8741660db57334facb55f8469612786f8cbcac5abbd2b1b02c9d9766fc77d64d6caac6c7ad4266f5984ff18d2c24f1df1979574189fe1036bbbde69abf17a491377d883b9ce0caeb3243e41a5849e4be32f2ad0f2654cd43d9fe850244574118cd230b237c1d92d6662bc934b093ca7c65e5591e4ca99a87b3fd0a0488ae82319a461646f83b25accc579269612794f8cbcab23c9953350f67fa1409115d0463348c2c8df0764b5998af24d2c24f29f19795640544ff16f53276dfdee8e200bcc74053c8234893b333024aa5849e54e32f2ac70a89fe2dea64edbfbdd1c401798e80a790469127666604954b093ca9c65e558e1513fc5bd4c9db7f7ba38802f31d014f208d224ecccc092a961279538cbcab1c2a27f8b7a993b6fef7471005e63a029e411a449d999812552c24f2a719795638544ff16f53276dfdee8e200bcc74053c8234893b333024aa5849e54e32f2ac7034b23b8b7cb15eb3a9e2680f8f463273b0ab6e736661ed55b093ca9d65e558df69647716f962bd6753c4d01f1e8c64e76156dce6ccc3daab6127953acbcab1be5edb46dac927fd86744fc8363376f1c96ef015ca99895957c24f2a769795637b49c8e66268b27dc4b565b8645d4c0b8d8a228792331456b0849e54ee2f2ac6f51fa42571a7c77e41379198c0b0f63f15c0876b21662a5162093ca9dd5e558de93f484ae34f8efc826f23318161ec7e2b810ed642cc54a2c4127953babcab1bd20aa2ee7375807bbcab0c8afaba372451ae60088298aae98924f2a776795637a31545dce6eb00f779561915f5746e48a35cc011053155d31249e54eecf2ac6f462a8bb9cdd601eef2ac322beae8dc9146b980220a62aba62493ca9dd9e558de8c5517739bac03dde5586457d5d1b9228d73004414c5574c4927953bb3cab1bd1836413fe42e6a3e827d8ed7a399d06d159242e4268ab03c934f2a776895637a2f6c827fc85cd47d04fb1daf4733a0da2b2485c84d156079269e54eed12ac6f45e6517583d900b7cc1c30186865d9fdc50f54dec972ac2964e3ca9dda3558de8bb56410927f6797c3b52c93504b19de09c96de352b5586d09d7953bb47ab1bd17538946afcc3557b2e725892015999e933d9fec653ab0f453bf2a776905637a2e97128d5f986aaf65ce4b12402b333d267b3fd8ca7561e8a77e54eed20ac6f45d26e64049fe3b86f7196286ffd5cc5ccca143d754bac3eb8f0ca9dda4258de8ba368da61ec9dd3619af91707f2afe9c18ed4bd4694587f15e2953bb485b1bd17455dc71c86120945edbef437dd5631ab1855bce925b0ffcfc62a77690c637a2e8947a091b8fa750e934aae97b2a2c17e2b57bc2e486201438d54eed219c6f45d111b537c1ecb4c9fde6223575d3be124515bbab88dc4042b1ba9dda4348de8ba2136a6f83d96993fbcc446aeba77c248a2b775711b8808563753bb48691bd174426d4df07b2d327f79888d5d74ef8491456eeae2371010ac6ea77690d237a2e88466ae39a330c781aadde0e2e1d5674a858a18206b2022fcde4eed21a56f45d107596ecbf337f1860d8887edbba12cbd05c0729cd340479dbd9dda434bde8ba20d3eeff09346458ed2ddd6036f38b7a2062d2795a38090df7c3bb48698bd17441909f239d362eda05d88722ed667cd6c0706918744012362f977690d327a2e883113e473a6c5db40bb10e45daccf9ad80e0d230e880246c5f2eed21a64f45d106227c8e74d8bb6817621c8bb599f35b01c1a461d10048d8be5dda434c9e8ba20c44f91ce9b176d02ec439176b33e6b6038348c3a20091b17cbbb486993d17441882b35f5e3053c889053e9155e7334e86b155ad03d1237d3987690d328a2e8830f566bebc60a791120a7d22abce669d0d62ab5a07a246fa730ed21a65145d1061e38ea3038eb54a4f91c6a7d71c331c9a701ad9cf148e0f262da434ca38ba20c3b71d46071d6a949f238d4fae38663934e035b39e291c1e4c5b4869947174418766fbb199083b5169c3e701dbf03254e96b2f8cfc223856d8c690d328f2e8830eb6b888bcdddccaff049a66375fca8c5281233fb81470c7f19d21a651f5d1061d56323704891fbe2986012eee3efafb24ad0aa52ff8e1aa234a434ca3fba20c3a95259393dfa5a47e88cec05bfd5bd8c904d9701fc1c36e86a486994807441875130c4cb28cb171288e69e3377a1d9411b47705ff5386f74d590d32901e8830ea161899651962e2511cd3c66ef43b282368ee0bfea70dee9ab21a65203d1061d424f25855002beccdb673ef5d67dc32c67ca03dbd1e1bf7757434ca408a20c3a832a5d634cdbe01c6e9b4413a4f1e480ca404a13a0c38092af869948124418750554bac699b7c038dd36882749e3c90194809427418701255f0d3290248830ea0a3587e5e045e2f47239d6768bbdf02b23ad6aaa800e03eebf1a65204a1061d4136b0fcbc08bc5e8e473aced177be056475ad555001c07dd7e34ca409420c3a8266231f02dedee5480b4200226ee1ed48961ed05fd38115efd699481294187504b50763908b23f2bb935062c45d29bd10d701c67f7702461fbd3290253830ea0952cfecabe3ae0da2a36d280839b95ca158c7b2bebe04a67f8a65204a8061d412959fd957c75c1b4546da50107372b942b18f657d7c094cff14ca409500c3a8252400d83a5c1e5eb60a8102a0664b55050de2f0bac812b43e3994812a1187504a30c2d5ff85a2e59791ce67c04bfc8c89c68a0735602582bc83290254330ea0945185abff0b45cb2f239ccf8097f919138d140e6ac04b0579065204a8661d4128a30b57fe168b965e47399f012ff232271a281cd580960af20ca40950cc3a82514616affc2d172cbc8e733e025fe4644e345039ab012c15e4194812a1987504a284ee8583279481a499b2de843f2eab1c13649915d25846084290254340ea0944f29e30911c8f2b74b0321f87fdc338b7d18d57eb74b0a65095204a8691d41289d53c6122391e56e960643f0ffb86716fa31aafd6e9614ca12a40950d23a82513a339e7cf3fa2d5fe3d94e09f7672c55ef0f9856da2c2b38264812a1a57504a273673cf9e7f45abfc7b29c13eece58abde1f30adb45856704c9025434aea0944e65a8c4c7cbf18024731fe4fd5930f7fb6eaa3b765b0ae849a204a8696d41289cb412af1a65492874630c2c7a31c7d27688189cac8615ead3540950d2ea82513950e683bf97f8791442e4bb73e2f5876cbaf55f18dc2befe6b812a1a5e504a27291cd077f2ff0f22885c976e7c5eb0ed975eabe31b857dfcd7025434bca0944e5239a0efe5fe1e4510b92edcf8bd61db2ebd57c6370afbf9ae04a8697941289ca47341dfcbfc3c8a21725db9f17ac3b65d7aaf8c6e15f7f35c0950d2f28251394872961844cedb96fab1819bdaebe594b5a1a174d92bf18ab912a1a5e604a2728f713e89367419b0ad2fc95fadce295165ef8545af57e4b97325434bcd0944e51d6e8f6b19be95e4122c58e75392b0cac68b4ce75bafcb16e74a86979b1289ca3969312ee0538e4adc2577f69f1bbfbd87c2dc2ab45f97d1cf950d2f37251394715e74b66d7d7f187017b615362ddda30a31fab165bf3147a02a1a5e6f4a2728e148fbc587d160b397fc32526452196e0f1037bec87e6433415434bcdf944e51c11e09e3bc7923e9e7c52accc09a910418ccb1d98dfcca0a83a86979c0289ca3813c13c778f247d3cf8a559981352208319963b31bf994150750d2f380513947020439e79ebaf22a56e1715afa60a2385ddf09c234f329ce0fa1a5e701a2728e030873cf3d75e454adc2e2b5f4c14470bbbe138469e6539c1f434bce0344e51c0610e79e7aebc8a95b85c56be98288e1777c2708d3cca7383e86979c0689ca380c21cf3cf5d79152b70b8ad7d30511c2eef84e11a7994e707d0d2f380d13947018439e79ebaf22a56e1715afa60a2385ddf09c234f329ce0fa1a5e701a2728e030134f4c8434a7cd93faf187440aa533b68d7aa29b653b65f534bce0354e51c05f269e9908694f9b27f5e30e88154a676d1af54536ca76cbea6979c06a9ca380be4d3d3210d29f364febc61d102a94ceda35ea8a6d94ed97d4d2f380d53947017c268cbcce7ba0ef57a45262184b87c5af181770d829dcd3aaa5e701ab728e02f74d19799cf741deaf48a4c430970f8b5e302ee1b053b9a7554bce0356e51c05ee26454be6c4e640165e0fb059247d3eb70ca01f5da774f2ab979c06aeca380bdb4c8a97cd89cc802cbc1f60b248fa7d6e19403ebb4ee9e5572f380d5d947017b625278847e9fb83114504e95c885322d6dec2d9739dd56eaf5e701abc28e02f6b4a4f108fd3f706228a09d2b910a645adbd85b2e73baadd5ebce0357851c05ed620b079cc7e508efce0d9cd6a17aab356274dc1cb77575ebe79c06af1a380bdab4160f398fca11df9c1b39ad42f5566ac4e9b8396eeaebd7cf380d5e347017b560ed43fdecfa4beab502d5da05508f5534979632add5f1efae701abc78e02f6ab1da87fbd9f497d56a05abb40aa11eaa692f2c655babe3df5ce03578f1c05ed563b50ff7b3e92faad40b576815423d54d25e58cab757c7beb9c06af1e380bdaac02b457a3538878124e3114fa9ea5d294f80d7553eafa9bd8380d5e3d7017b5570568af46a710f0249c6229f53d4ba529f01aeaa7d5f537b0701abc7ae02f6aae0ad15e8d4e21e04938c453ea7a974a53e035d54fabea6f60e03578f5c05ed55c15a2bd1a9c43c0927188a7d4f52e94a7c06baa9f57d4dec1c06af1eb80bdaab82b457a3538878124e3114fa9ea5d294f80d7553eafa9bd8380d5e3d7017b5570568af46a710f0249c6229f53d4ba529f01aeaa7d5f537b0701abc7ae02f6aae039284181b880874b590b669f9fd2cd38af9fb0f7bea89a0f03578f5d05ed55bf7250830371010e96b216cd3f3fa59a715f3f61ef7d51341e06af1eba0bdaab7e70b35eb3b8649fe530f3c27675a95cdd6ac11fdbfaa40c3d0d5e3d7517b556fb6d791614472bc2822eadace4e1b0e1b581c49bb4f549bc7b1abc7aeb2f6aadf5670484d564ba07bc2a2181c1b9bfeb65afcb9366ea951cf73578f5d75ed55be95a1b62579fd6923021092b7b69ddfec60bd982cad52bddef6af1ebafbdaab7d140491d5c160fa7180ed87eeeca1a2586c3f56192aa595fdfd5e3d7607b556fa10ca493650281d0e7ea7725d58a927308342d1f2254b463c0abc7aec1f6aadf41194926ca0503a1cfd4ee4bab1524e610685a3e44a968c781578f5d83ed55be8232924d940a07439fa9dc97562a49cc20d0b47c8952d18f02af1ebb07daab7d0465249b28140e873f53b92eac54939841a168f912a5a31e055e3d760fb556fa08565b8efcfe7f9136743885509f85587def144e224b47e00bbc7aec206aadf40f38c976a6d361a524b53732993568d8f68a6af8419691641878f5d841d55be81d7192ed4da6c34a496a6e65326ad1b1ed14d5f0832d22c830f1ebb083aab7d03a6f38334823e9174aa1a2f25ccc018bd4d5ee3d035a473462e3d76108556fa0736a82bf3d1e34b14d100c0cb18e613fa4581ed603b4900cc6c7aec211aadf40e56117d72712cbe551ecde415b1320a7435c8008046921bd8e8f5d842455be81c94e4206fafbfa4d5ba682aaae1c9f768165426c05d2451f1e1ebb0849ab7d0391289666a2ce571d6f19cb7d542f9d14fd76c73408a48be23d3d76109456fa0721512ccd459cae3ade3396faa85f3a29faed8e68114917c47a7aec2128adf40e422e6bf3380fbef87433f41d48b4d27bf0875f2c1f92312cf5f5d842525be81c835cd7e6701f7df0e867e83a9169a4f7e10ebe583f246259ebebb084a4b7d0390645c2258d155e64889c969d1ac9a817bcc9bf0c7b48c657d8d761094a6fa0720b1796a3c7011f4bc905f3622d89ae57743fc074f3918e53b2aec21295df40e4152f2d478e023e97920be6c45b135caee87f80e9e7231ca7655d84252bbe81c82a5e5a8f1c047d2f2417cd88b626b95dd0ff01d3ce46394ecabb084a577d03905448c776e4df5ce0fffc61396443d0e39caa4603998c744196761094affa0720a71da14676951c44b7c5889ac07dffef3400ce633018ea272dec212960f40e414d3b428ced2a38896f8b113580fbffde68019cc66031d44e5bd84252c1e81c829a029772872ad39596e2e892f9ee5de4caaf7be8bd63aa40b8b084a584d0390533052ee50e55a72b2dc5d125f3dcbbc9955ef7d17ac754817161094b09a0720a660a5dca1cab4e565b8ba24be7b977932abdefa2f58ea902e2c212961340e414cc14bb9439569cacb7174497cf72ef26557bdf45eb1d5205c584252c2681c8299829772872ad39596e2e892f9ee5de4caaf7be8bd63aa40b8b084a584d0390533052ee50e55a72b2dc5d125f3dcbbc9955ef7d17ac754817161094b09a0720a66031eefa778b47e87086eae6738dd75aa68b3c8b55ea91d22d212961350e414cbf63ddf4ef168fd0e10dd5cce71baeb54d167916abd523a45a4252c26a1c82997e53ce428b03822479e871c1c62dbb9294d9348954aa48ecb584a584d5390532fb33aeddc2dd66cbab9da9ab8451d54d245eab6ea654937d6c094b09ab720a65f5675dbb85bacd97573b535708a3aa9a48bd56dd4ca926fad812961356e414cbea5acdcfb84bfdb166436cd6093db35c8c26f01696524f99b1252c26aec82997d341adf81d6e5de584539fd40a71c4e112fa228929a4a0d7634a584d5e90532fa50f6e48e7b31e4dc07405d00cd9e7ea20a0876e50494352c794b09abe20a65f491edc91cf663c9b80e80ba019b3cfd441410edca09286a58f2961357c414cbe923db9239ecc793701d0174033679fa882821db941250d4b1e52c26af882997d2407849fea6f54f0bb6cf4a85ec59d78ffb07dce7f4a1c3a3da584d5f20532fa470f093fd4dea9e176d9e950bd8b3af1ff60fb9cfe9438747b4b09abe40a65f48e1e127fa9bd53c2edb3d2a17b1675e3fec1f739fd2870e8f6961357c814cbe91c3c24ff537aa785db67a542f62cebc7fd83ee73fa50e1d1ed2c26af902997d238045c5753cbb18e6e9c10ade45035b7f5b41f43f1a1c547db584d5f21532fa46f08b8aea797631cdd38215bc8a06b6feb683e87e3438a8fb6b09abe42a65f48de11715d4f2ec639ba7042b79140d6dfd6d07d0fc687151f6d61357c854cbe91bc22e2ba9e5d8c7374e0856f2281adbfada0fa1f8d0e2a3edac26af90a997d237845c5753cbb18e6e9c10ade45035b7f5b41f43f1a1c547db584d5f21532fa46f0179d43264c94508b4edbe481fd1526b1302ada3138aa9f6c09abe42b65f48ddf2f3a864c9928a1169db7c903fa2a4d626055b46271553ed81357c856cbe91bbe5e750c993251422d3b6f9207f4549ac4c0ab68c4e2aa7db026af90ad97d2377c48fc71df3b05071243a54c07df075d842d992d86c5569f614d5f215c2fa46ef71e0b3c6b4c6c90dc5410c007b46ce3030774b70a8aaee2c39abe42b95f48dded3c1678d698d921b8a821800f68d9c6060ee96e15155dc587357c8572be91bbda043f4a5a0814c6291d092816c811b406ca1538272abd2f0f6af90ae67d2377b3087e94b410298c523a12502d9023680d942a704e557a5e1ed5f215ccfa46ef6610fd2968205318a47424a05b2046d01b2854e09caaf4bc3dabe42b99f48ddecc21fa52d040a63148e84940b6408da03650a9c13955e9787b57c85733e91bbd9843f4a5a0814c6291d092816c811b406ca1538272abd2f0f6af90ae67d2377b3013fba3edd8fb47db6deb2ad0f894a8d3eee960e257a785ee5f215cd0a46ef65f27f747dbb1f68fb6dbd655a1f12951a7ddd2c1c4af4f0bdcbe42b9a148ddecbe4fee8fb763ed1f6db7acab43e252a34fbba583895e9e17b97c85734291bbd97c2bef781b9e3cc1933c1f7e7fbb036e9a238d630fbd3dd373f90ae6862377b2f757def0373c798326783efcff7606dd34471ac61f7a7ba6e7f215cd0c46ef65ee3bd0391b4f558904bd4421f6e26be2633a77e83bf4f8f1d0e42b9a198ddecbdb03b2cae3750d94c1474e6be5bb35ecc121322c74e9f387a2c85734341bbd97b5076595c6ea1b29828e9cd7cb766bd982426458e9d3e70f4590ae6868377b2f6a0ecb2b8dd43653051d39af96ecd7b30484c8b1d3a7ce1e8b215cd0d06ef65ed41d96571ba86ca60a3a735f2dd9af6609099163a74f9c3d1642b9a1a0ddecbda83b2cae3750d94c1474e6be5bb35ecc121322c74e9f387a2c85734341bbd97b50026bb51b78151ae0b693a4af5d1bc01ed287ea9a3e72985a0ae6868477b2f69f04d76a36f02a35c16d27495eba37803da50fd5347ce530b415cd0d08ef65ed3e09aed46de0546b82da4e92bd746f007b4a1faa68f9ca61682b9a1a11decbda7c135da8dbc0a8d705b49d257ae8de00f6943f54d1f394c2d057343423bd97b4f826bb51b78151ae0b693a4af5d1bc01ed287ea9a3e72985a0ae6868477b2f69f04d76a36f02a35c16d27495eba37803da50fd5347ce530b415cd0d08ef65ed3e026ff9f8adba93ae571af53cf3d4e2faf4e3d028c9ca7ba83b9a1a11eecbda7bf4dff3f15b75275cae35ea79e7a9c5f5e9c7a0519394f75077343423dd97b4f7e2810d6d845076e4d93837734eb96e6b7e536662f72a08e0fe686847cb2f69efb5021adb08a0edc9b2706ee69d72dcd6fca6ccc5ee5411c1fcd0d08f965ed3df62c55b40dea803bee1ad404cba4b9c2da411bf4baca83dc409a1a11f3cbda7beb58ab681bd50077dc35a80997497385b48237e9759507b881343423e797b4f7d63d6928e48063727038163b2689453363b0b22ee82a111503686847d02f69efab06e4aa75d72967983cf29e4508e88ec20da6b9cd5423ce07d0d08fa15ed3df550dc954ebae52cf3079e53c8a11d11d841b4d739aa8479c0fa1a11f42bda7beaa1b92a9d75ca59e60f3ca791423a23b08369ae735508f381f43423e857b4f7d54372553aeb94b3cc1e794f228474476106d35ce6aa11e703e86847d0af69efaa86e4aa75d72967983cf29e4508e88ec20da6b9cd5423ce07d0d08fa15ed3df55068a7a767bb8f75bf6b19f0991370003c611995a7847b64fb1a11f42cda7bea9f5d61a77c4d816e36a2fa092a1d3e28736e75874c08f86df73423e85ab4f7d53d46d5a7a571655f2512ba3a4c30da78e1892d6a9511f27fef6847d0b669efaa7919bda7f7b92d4101f23a9c90581319bdbe9d312723e6a3dfd08fa16dd3df54f1337b4fef725a8203e4753920b026337b7d3a624e47cd47bfa11f42dba7bea9e266f69fdee4b50407c8ea7241604c66f6fa74c49c8f9a8f7f423e85b74f7d53c459ff986a9fcc8ac75e9b0c7ab6f6f5e8a12be5361f36c2ff847d0b6f9efaa7874011898215fb984689fc40ed644c13cbee9a26693e6f2a0008fa16e03df54f0d0c356bb10259b344e0bea9d2bef64f928976a8cf7cdff80111f42dc17bea9e19186ad76204b36689c17d53a57dec9f2512ed519ef9bff00223e85b82f7d53c3230d5aec40966cd1382faa74afbd93e4a25daa33df37fe00447d0b705efaa786461ab5d8812cd9a2705f54e95f7b27c944bb5467be6ffc0088fa16e0bdf54f0c84f6913bcfbfdb705d8b0c523e5c3212343ace8f4ce0124121f42dc18bea9e18f2ae48026ce5df0c37e27b23fc1e46a41339c2de69c03ec253e85b8327d53c31d55c9004d9cbbe186fc4f647f83c8d48267385bcd3807d84a7d0b7064faa7863a37a459480fda45c5c564f0f6fdefd0ff7ab3139770115495fa16e0caf54f0c736f48b2901fb48b8b8ac9e1edfbdfa1fef566272ee022a92bf42dc195ea9e18e66aa3bdcd15cb99cee259ebd3ee1d6bf8970eaa5ac046f658e85b832cd53c31cb6159d44701f9b6559179ff9fd298ffebda5fb0b2808f90b2d0b7065aaa7863954ec6013ada55ef62efba27379b9027d26101bd620120c566a16e0cb654f0c729299e5b228b0e617dac3a76672d7e779f6e45d6c102432ece42dc196da9e18e51533cb645161cc2fb5874ecce5afcef3edc8bad8204865d9c85b832db53c31ca2328bc537029c08ae7db00194ac5806786559b701090e5f3a0b7065b7a786394365178a6e0538115cfb60032958b00cf0cab36e02121cbe7416e0cb6f4f0c728656416d88e0d2a571c3862e4aa7be41dc41a93801243b20e92dc196df9e18e50b389533be9807cd9b53d2848d45daabb32f94cbff4877e5d35b832dc03c31ca15712a677d300f9b36a7a5091a8bb557665f2997fe90efcba6b7065b807863942a6e6727a73681b9251c103a2d0dc8d6c76a958bfa21e13b4e6e0cb701f0c7285368e0a7fb4365f50204e69c5211efd589816d73f143c41a9ddc196e04e18e50a55dd3a8a35d2e6cbbd693609c1a3dd30daf1d43df8789d93cb832dc0ac31ca14947b9a9f390bf5c2f79ece9302ad9ce160a7ce3bc0f15567a7065b816863942911b85ac93f7e13b16c09ffa584c11c426c13c23751e2c50f5e0cb702e0c728521370b5927efc2762d813ff4b09823884d827846ea3c58a1ebc196e05c18e50a426e16b24fdf84ec5b027fe9613047109b04f08dd478b143d7832dc0b831ca1484683fbd4c956c5b6dd1c5faba56ec4930b62377a5f1642bb0065b8171639429075c91d346013b399370521d6ca436ba5c18894b48e2c9fb610cb702e3c728520d4535ff38d8d8f5dead6a62d13ecb9cb2dd54f28ec5959ac3196e05c88e50a419167e571e88146e75279aed9a73f5616066ec411a8b2cd98732dc0b921ca148312cfcae3d1028dcea4f35db34e7eac2c0cdd882351659b30e65b817243942906259f95c7a2051b9d49e6bb669cfd585819bb1046a2cb3661ccb702e48728520c4400511a11705f661099d94cb960932fde3a464d15968703a96e05c91e50a41870c1c7bef046e6f79e001518f22708df6738b259fb2d284762dc0b924ca14830d1838f7de08dcdef3c002a31e44e11bece7164b3f65a508ec5b8172499429061a3071efbc11b9bde78005463c89c237d9ce2c967ecb4a11d8b702e49328520c3460e3df7823737bcf000a8c7913846fb39c592cfd969423b16e05c92650a418684dda179d1d497a55ccdb40ea1d670761e4f4b5f82d29eb63dc0b924da14830cf27c687e710f57763667ca9cc312c36be762bc7ed5a557ac8b817249c4290619d4f8d0fce21eaeec6ccf9539862586d7cec578fdab4aaf591702e49388520c33a2b2c78491a38604566b8cf28bb0f02f484f17bb269578f23e05c92720a4186735658f0923470c08acd719e51761e05e909e2f764d2af1e47c0b924e414830ce638c439d13f4403cd67a9649ae29a33ccc0084ac6a55fe090817249c9290619cb718873a27e88079acf52c935c53467998010958d4abfc12102e49392520c33966f233ff1d37291ed6b6bba6380c6f72dac6387179581264305c92725a418672b6a58d8907d47a692a39d9cbef7ec165605096a2c2b03f0870b924e4c4830ce5560c409cdd0f1cfdd14016175e63654a6b65530555609850f17249c9990619ca94d9a6c4878462271f4c8eae3c2cad14818ecbca7ac14ae1f2e49393420c339512747313dc6eec79bb657fdbf7bf3ca8ade1bd54c582b003f5c927269418672a14e8e627b8ddd8f376caffb7ef7e79515bc37aa98b056007eb924e4d2830ce542292f1da3f21da126a6261ef5e62d522624b1b12e60ada4fe7249c9a60619ca83525e3b47e43b424d4c4c3debcc5aa44c4963625cc15b49fce493934c0c33950630cecf3c9ed90752655ea3cf8f1370933f0920b682b837fac927269918672a0b619d9e793db20ea4cabd479f1e26e1267e12416d05706ff5924e4d3230ce54164f4d959f51c6a0016240b73632abea47a866ded70ae283ec249c9a65619ca82b2aad83eb79efc2ba914796645bb5fc89fd1019ab15c6abd9493934cbc3395055555b07d6f3df8575228f2cc8b76bf913fa2033562b8d57b2927269978672a0aa36c8685abe218da211e4818965361a22a082c2a9571c536624e4d3300ce541536d90d0b57c431b4423c90312ca6c344541058552ae38a6cc49c9a66019ca82a66733fa17cee8b94014582e1d8b3690852e4d66a25c72f19993934cc13395054b5a7a4cdc7433f537f57684330ccb490508dd2941b8e7873427269983672a0a954106f265beca6d27b7b3305e0ff4ba04bdfcae8071d0b2694e4d3307ce5415290e203d7853f75d073c2c88b416479c04283bb8fde3a308d39c9a66109ca82a511c407af0a7eeba0e785911682c8f3808507771fbc74611a73934cc21395054a23880f5e14fdd741cf0b222d0591e7010a0eee3f78e8c234e7269984272a0a9447101ebc29fbae839e16445a0b23ce02141ddc7ef1d18469ce4d33084e54152886e16303215d8532b8f8eb3395ad7e83d2ffdebdb3a32313ac9a6610aca82a50f683eb9110213290eebe38e6aac0df8750c3e33b374660676934cc21695054a1d5c8fcaceda88d4d5a48d44cd4e7a18e4c4bec363e8cdb0ee2699842e2a0a94394531ee4a8b742c6315e0b192935259c435bfe2c4d19d05dd4d33085d5415287116763541ed4adb7df8878b1d1d02db8317c22186a33bafbb9a6610bba82a50e12cec6a83da95b6fbf10f163a3a05b7062f84430d46775f7734cc21775054a1c259d8d507b52b6df7e21e2c74740b6e0c5f08861a8ceebeee699842eea0a943843fc402bc40b95ea7910280e0de7504136a53683219df21ddd33085de415287070b9a5e2557d54006eecb29b9b348302180e92c6133bfe7bca6610bbd82a50e0d1734bc4aafaa800ddd9653736690604301d258c2677fcf794cc2177b054a1c1a2e6978955f55001bbb2ca6e6cd20c08603a4b184ceff9ef299842ef60a9438345cd2f12abeaa003776594dcd9a41810c074963099dff3de533085dec1528706845b83b0253b68326b978c3932ae12a12bad522103c001fcb6610bbd92a50e0cf1782ceb17dcf89053fb7af1e4c207c2021eca01d7801e397cc2177b354a1c19d2f059d62fb9f120a7f6f5e3c9840f84043d9403af003c72f9842ef66a943833a5e0b3ac5f73e2414fedebc793081f08087b28075e0078e5f3085decd528706744828ce38c4decae1ca83a0ea576208fbbba75ce8c010c0bf610bbd9ba50e0ce71c63f51e6020187b61cd69cca52239f2239115ce8023257fc2177b384a1c19cd38c7ea3cc04030f6c39ad3994a4473e447222b9d00464aff842ef6709438339a718fd479808061ed8735a7329488e7c88e44573a008c95ff085dece1287067346f32019fd7634692db31765d1f6ff78bc8cb0a71011acfff10bbd9c350e0ce676a765bec85290fdd832914b2353e17123dd870df023743ff2177b387a1c19ccd60ff1085e0b4a272d318515c60da561f27f33dbb04702bff42ef6710438339994e1079b897cbc79d72f6cab0b812d438fc28d77308e1fbff85dece218706733128334c1e05fa11f2b2b3bd596683d06ca4940ae311c59c000bbd9c440e0ce6615066983c0bf423e565677ab2cd07a0d9492815c6238b3800177b38881c19ccc22cdf8924ee4aca8297951d5d906d69ad3e928789471814012ef671113833998359bf1249dc9595052f2a3abb20dad35a7d250f128e3028025dece222706733063f907d408f8dacc22b1a9d6e3813ceafa68c7a221c61f405bbd9c445e0ce660b0b33532df57ddc3c22fb62d46685c559f95b504138c58c0c77b3888cc19ccc151666a65beafbb87845f6c5a8cd0b8ab3f2b6a082718b1818ef6711198339982a2ccd4cb7d5f770f08bed8b519a171567e56d4104e3163031dece223306733054599a996fabeee1e117db16a3342e2acfcada8209c62c6063bd9c44660ce660a83f478b8c2e404679fc7c553e5eba7d9a41f760108c5a64c87b3888cd19ccc14f0aa16fc532e30fabc5bed274b3d3232f30311c1e18b66d91f671119b3399829d1542df8a65c61f578b7da4e967a6465e6062383c316cdb23ece223366733053a2a85bf14cb8c3eaf16fb49d2cf4c8cbcc0c4707862d9b647d9c4466cce660a74550b7e2997187d5e2df693a59e9919798188e0f0c5b36c8fb3888cd99ccc14e83629550004937d7428b34f4333905aedaf541dde8b687d20671119b4399829cf6c52aa000926fae851669e866720b5db5ea83bbd16d0fa40ce2233687330539e64b7acace8b078886f936504c49f93b16992d3772da398829c4466d1e660a73b5581b206a7c373c8abecf2017f9d4f5d7f6802eb5b48d5063888cda4ccc14e753715bcba25e96a4924a00bfaf598c6b5ab1261d3b6934e0d71119b4a99829ce96e2b79744bd2d492494017f5eb318d6b5624c3a76d269c1ae2233695330539d268694b956e082bdc5f4657e3ccc142d1588be34bda4edc36c4466d2b660a73a35ce4efd7b272da708b52d7bf8fe0ad9d5d5a2294b49f5c6e888cda57cc14e74545dc385c3b483798e36bd777161f833566f6a12669405cde1119b4b09829ce8917cac9654cf2f1e9939dd6e6229d2e657a2f9e49d2825dbd2233696230539d112f9592ca99e5e3d3273badcc453a5ccaf45f3c93a504bb7a4466d2c460a73a225f2b259533cbc7a64e775b988a74b995e8be79274a0976f488cda588c14e74444a68a3d73dfa120469b4df290b479b267dbf4e4b941491ea119b4b12829ce88720e3a05b5256a6c0a02fe64a0ced5e47a7c0f894282ac7d5233696260539d10d41c740b6a4ad4d81405fcc9419dabc8f4f81f12850558faa466d2c4c0a73a21a0fa0da1a1fbd1dba4d85c1202a13a1194b463e4da0acc3558cda589914e744331f41b4343f7a3b749b0b824054274232968c7c9b415986ab19b4b13229ce88663e8368687ef476e936170480a84e84652d18f93682b30d5633696264539d10cc0919297dd44b708a38f430f946fb30c506744e6a0567bead66d2c4c9a73a2197123252fba896e11471e861f28df6618a0ce89cd40acf7d5acda589934e74432e2464a5f7512dc228e3d0c3e51becc31419d139a8159efab59b4b13269ce8865c48c94beea25b8451c7a187ca37d9862833a273502b3df56b3696264d39d10cb81da4f08a1b198b5b5c09378c6611344b1387429d567d8ed76d2c4c9b73a2196f3b49e114363316b6b8126f18cc226896270e853aacfb1daeda589936e74432de02a61ad542c8b0253ceb06298ea2f926fa5f667259f7df5eb4b1326ece8865bb054c35aa8591604a79d60c531d45f24df4becce4b3efbebd696264dd9d10cb760a986b550b22c094f3ac18a63a8be49be97d99c967df7d7ad2c4c9bb3a2196ec1530d6aa16458129e758314c7517c937d2fb3392cfbefaf5a589937674432dd82a61ad542c8b0253ceb06298ea2f926fa5f667259f7df5eb4b1326ece8865bb054c35aa8591604a79d60c531d45f24df4becce4b3efbebd696264dd9d10cb76035990dfd888e8c070787b25b9f1c71b9441bf8937df97bae2c4c9bb4a2196ebf6b321bfb111d180e0f0f64b73e38e3728837f126fbf2f75c589937694432dd7e627690a2f89cb2d3eae4f16672cfeedfbcb23e4af7e792b9b1326ed38865bafb50ff79f2c79be85fa2900ac4dbfe05ba25a6d892efd0c9746264dda810cb75f52e114c92659a537711e63d81ae5a336ef7900d22dfa336e9c4c9bb512196ebe95c229924cb34a6ee23cc7b035cb466ddef201a45bf466dd3899376a2432dd7d244578af66ccbd094145f1dfeafc6f5b68a8290887e8e7fa81326ed45865bafa314c16e99affa23dff58463f555ec1367c1477d0dfd1ea351264dda8c0cb75f452982dd335ff447bfeb08c7eaabd826cf828efa1bfa3d46a24c9bb518196ebe8a5305ba66bfe88f7fd6118fd557b04d9f051df437f47a8d4499376a3032dd7d14321dcd7a5633a1b778e947a2a5bec338b67e446ce8f6be8a326ed46165bafa27643b9af4ac67436ef1d28f454b7d86716cfc88d9d1ed7d1464dda8c2cb75f44e54898e962f310995b06b46828d5934dd863b6db0a3dc9e29c9bb518696ebe89b352575d934c495e32d9cb4fd111091b5b8b9375e47bae0549376a30e2dd7d1356a4aebb269892bc65b3969fa2221236b71726ebc8f75c0a926ed461c5bafa26a60a83011a974da448338fbec3aa06ed18f2739761eed25534dda8c39b75f44d34d62b8d0294c3740d3381fd06b9f059dca90cee93ddbeea79bb518746ebe89a526d7ca4d28faf13973366798cd9c33364163f9cf7bb98150376a30e9dd7d13494daf949a51f5e272e66ccf319b38666c82c7f39ef77302a06ed461d3bafa2692277181e17a4e479d999fc65b2ccef4d3b1d2433aeee7a941dda8c3a875f44d234ee303c2f49c8f3b333f8cb6599de9a763a48675ddcf5283bb518750ebe89a4629d86032bf9ba12e33454164a999fb49738b68e8bba0490876a30ea2d7d1348b53b0c0657f37425c668a82c95333f692e716d1d177409210ed461d45afa269163373d977d4d1077099db2d8a9cc615207a6fff9fee82c822da8c3a8c5f44d22b66e7b2efa9a20ee133b65b15398c2a40f4dfff3fdd059045b5187518be89a45659e1be8c29a6a07a3432de2269767c7c96025a7cba0cc48c6a30ea327d1348ab3fd5d5c529afc3ac352be43cc94b20f3d84710f6741b2d19d461d465fa2691550bbe043729c20a10371df07188f469e25cd07de9e837fe34a8c3a8ccf44d22a9177c086e538414206e3be0e311e8d3c4b9a0fbd3d06ffc6951875199e89a45522ef810dca7082840dc77c1c623d1a7897341f7a7a0dff8d2a30ea333d1348aa45df021b94e105081b8ef838c47a34f12e683ef4f41bff1a5461d4667a269154847f29c1f728323bb3ea52f1085a4c620794a3a9b8381874b8c3a8cd044d22a8f1bf790ebbb68ca2e4a10861901a7b43b9ed6d1340704b298187519a189a4551d37ef21d776d1945c94210c32034f68773dada2680e09653030ea33431348aa3a6fde43aeeda328b928421864069ed0ee7b5b44d01c12ca6061d46686269154746bcee00ab1a8d42a1d4a58c0039bc9d7a2f8e59d382738c1c3a8cd0d4d22a8e763b018c239b42b0c075ad977fd95bba9f23427377050158487519a1b9a4551cd53728a3149cad8cfdb7bdae7f1899f4e90aaaa6be0a1cf0a0ea33438348aa39932f76d0f69f8345783bdddc7d9716697cd97b0d4c14542151d4668716915473165eeda1ed3f068af077bbb8fb2e2cd2f9b2f61a9828a842a3a8cd0e2d22a8e6257f00cea7e435415dbbd9f175c23c259e2a11f500516ac557519a1c6a4551cc33bf27281d2e92ae384416626aea5acae71849a9d0a2efcabea33438e48aa398503f73db07c34d87ed548f44553a981578f4b9137145f9d58d466871d9154730907ee7b60f869b0fdaa91e88aa75302af1e97226e28bf3ab1a8cd0e3b22a8e6120fdcf6c1f0d361fb5523d1154ea6055e3d2e44dc517e7563519a1c764551cc241fb9ed83e1a6c3f6aa47a22a9d4c0abc7a5c89b8a2fceac6a33438ec8aa398483f73db07c34d87ed548f44553a981578f4b9137145f9d58d466871d9154730900afa0ebc5cfd929275e4b0a26b8e52ec95b482df8bf54f1b8cd0e3b32a8e611f15f41d78b9fb2524ebc96144d71ca5d92b6905bf17ea9e3719a1c766551cc23e2be83af173f64a49d792c289ae394bb256d20b7e2fd53c6e33438eccaa39847c57d075e2e7ec9493af2585135c729764ada416fc5faa78dc66871d99547308f83bb34472a63babdf2b11321eaf4356c4078a89f5bf5695b9cd0e3b33a8e611ef0378e19222d9da7622e88c3554e4d582bb576fe87eaecf749a1c766851cc23dd06f1c32445b3b4ec45d1186aa9c9ab0576aedfd0fd5d9ee93438ecd0a39847ba0de386488b6769d88ba230d55393560aed5dbfa1fabb3dd26871d9a147308f741bc70c9116ced3b1174461aaa726ac15dabb7f43f5767ba4d0e3b3428e611ee8378e19222d9da7622e88c3554e4d582bb576fe87eaecf749a1c766851cc23dd06f1c32445b3b4ec45d1186aa9c9ab0576aedfd0fd5d9ee93438ecd0a39847ba06a4abd358cd9204086e9354d2f9388a9821e561cabb58127871d9a157308f73f60a7d317f014c338da9892925585394db07f0836576ca6500e3b342be611ee7d4d61fedcb68c092981f74d1ca1689a960d406c69aedaf0a11c766858cc23dcf926d65666437a950ad0b4c231392f5d26c6c334d05db7854338ecd0b29847b9f14dacaccc86f52a15a1698462725eba4d8d8669a0bb6f0a8671d9a165308f73e2276bb245e44cd6e30f9930bcdb1b9c95c74f2f3e76dfb90de3b342cb611ee7c34ed7648bc899adc61f326179b637392b8e9e5e7cedbf721bc7668596c23dcf8629c121c46795de440b2aeaeb62cc9a51c97f18f6db8088388ecd0b2e847b9f0b53824388cf2bbc881655d5d6c59934a392fe31edb70110711d9a165d08f73e163316dfbe74b9fbc7f971d3a581909141d23ebfd86e03c4e33b342cbb11ee7c2b662dbf7ce973f78ff2e3a74b03212283a47d7fb0dc0789c67668597623dcf856586dd7a6a94a71d7b28d768dfca06d01f53d5b5eb810b78decd0b2ed47b9f0ab3cee07fa28f7666731e11513ef9f01fe96bd12ba7023131cd9a165db8f73e15505ee68a128514f863088521fd59c2bf7d9bc8171e047ca3ab342cbb81ee7c2a90bdcd14250a29f0c6110a43fab3857efb37902e3c08f9475668597703dcf855217b9a284a1453e18c221487f5670afdf66f205c7811f28eacd0b2ee07b9f0aa42f734509428a7c31844290feace15fbecde40b8f023e51d59a165dc0f73e15485ee68a128514f863088521fd59c2bf7d9bc8171e047ca3ab342cbb81ee7c2a9049df6cd1e08c737dddd06bf2a9e3a6f5e3d28a3908faeb5768597704dcf8551f1fd13250977b69b38866ffdd4a2575e673e7706f11f77aafd0b2ee0ab9f0aa3d3fa264a12ef6d36710cdffba944aebcce7cee0de23eef55fa165dc1573e1547a0b5721ef34502985ee62276d1ef3ff947be01db947df8ec042cbb82be7c2a8f316ae43de68a0530bdcc44eda3de7ff28f7c03b728fbf1d8085977057cf8551e62d5c87bcd140a617b9889db47bcffe51ef8076e51f7e3b010b2ee0af9f0aa3cc5ab90f79a2814c2f73113b68f79ffca3df00edca3efc7602165dc15f3e154798418477a01b651b16b2e89ec9e59e21426a4437917dfa90052cbb82bf7c2a8f2f0f1b47ed0d2cb8e53297658bc19a6a7f80cacb1ffbf6c40b5977057ff8551e5d1e368fda1a5971ca652ecb178334d4ff0195963ff7ed8816b2ee0afff0aa3cba3c6d1fb434b2e394ca5d962f0669a9fe032b2c7fefdb102d65dc15ffe154797404ec98153fc849e16181545603317bf6b298b4fcdfb7c45bcbb82c00c2a8f2e709d9302a7f9093c2c302a8ac0662f7ed653169f9bf6f88b7977058018551e5ce13b26054ff212785860551580cc5efdaca62d3f37edf116f2ee0b0030aa3cb9c2764c0a9fe424f0b0c0aa2b0198bdfb594c5a7e6fdbe22de5dc16006154797384ec98153fc849e16181545603317bf6b298b4fcdfb7c45bcbb82c00c2a8f2e7029a55b54cf6bbee3fcf0b2b85c8da6d0ff58fb98f6fa2f7a77058019551e5cdf534ab6a99ed77dc7f9e16570b91b4da1feb1f731edf45ef4ee0b0032aa3cb9be32a7c60014117e47c088f2d96894c33ea9a64a60dbea61eadc1600665479737b654f8c002822fc8f8111e5b2d129867d534c94c1b7d4c3d5b82c00cca8f2e6f656b170ad26a87bd6cee9f35d98b134f552db85806fab2bac7058019a51e5cdeb39753a0723b37a656a9a0eb327c091e551f966fddf57fb59e0b00335a3cb9bd572ea740e4766f4cad5341d664f8123caa3f2cdfbbeaff6b3c160066b479737aa71e740c965306c4d772e62c495606f8ff427f7f47d61916882c00cd78f2e6f536fe0da3fa0c35b52bb22ed81211f071a94924be5fac4c6d2058019b01e5cdea56bd40d2c17e9395d430c02fa389c362fd566f3c8f58b31a50b0033613cb9bd4963ba73050634f57252de2dec6796945a5710438eeb18074b160066c379737a9153873eb6e2cc6d9c728283d0c58b50af5a62e31ad631b2972c00cd87f2e6f5213320d61a9bfb5df0b1cb2f998174c95961082232ac65092f58019b10e5cdea416641ac3537f6bbe163965f3302e992b2c210446558ca125eb0033621cb9bd4825895b117464ffa7a93f2e65dfc314d603062e4c7b195c8be60066c449737a9033d3dbadb630277acf4abf4b3eec0c2bb0d08258c632d357dc00cd88a2e6f5205068dce639c677211b61e115fd3dfad70c652a715c65c0efc8019b1155cdea4090d1b9cc738cee4236c3c22bfa7bf5ae18ca54e2b8cb81df90033622ab9bd48121a37398e719dc846d878457f4f7eb5c3194a9c5719703bf20066c455737a9024346e731ce33b908db0f08afe9efd6b86329538ae32e077e400cd88aae6f5204868dce639c677211b61e115fd3dfad70c652a715c65c0efc8019b1155cdea40905dcc25206350c4ee908853f27253d61376973eb5cb838391033622ac9bd4811f47aaa2ed9d040c94edd6cfdcdb05d4219970d9689708ab23066c455a37a9023d1b679e88106a9be1a873c7b1ac69d03ddf240ece2e12fa470cd88ab56f52047936cf3d1020d537c350e78f6358d3a07bbe481d9c5c25f48e19b1156adea408f26d9e7a2041aa6f86a1cf1ec6b1a740f77c903b38b84be91c33622ad5bd4811e4674f4ced59b761c51064658559aca9e9a562d26e7099763966c455ac7a9023c75ab0f28789d14641ed8ef302a9b77bcdf70800d9e1349073cd88ab59f520478d41743dbbea050f3ba7e40dfd49cd1f969a525db0c26ac4e89b1156b4ea408f190efad424aa6ca12f1c8e43f289f86727e0e7175e84d72dd23622ad6ad4811e311df5a84954d9425e391c87e513f0ce4fc1ce2ebd09ae5ba46c455ad5a9023c623beb5092a9b284bc72390fca27e19c9f839c5d7a135cb748d88ab5ab520478c403e8f9d229c78c30b138478c46216139b37b16f126bb1292b1156b57a408f18707d1f3a4538f186162708f188c42c27366f62de24d762525622ad6af4811e30e0fa3e748a71e30c2c4e11e31188584e6cdec5bc49aec4a4ac455ad5e9023c61c1f47ce914e3c618589c23c62310b09cd9bd8b78935d8949588ab5abd20478c383e8f9d229c78c30b138478c46216139b37b16f126bb1292b1156b57a408f1870093192f20f5408cdf3cf1980ba8a4f311ba53a21d763f65722ad6af5811e30df126325e41ea8119be79e330175149e62374a7443aec7ecae455ad5eb023c61be24c64bc83d502337cf3c6602ea293cc46e94e8875d8fd95c8ab5abd60478c37c498c97907aa0466f9e78cc05d4527988dd29d10ebb1fb2b9156b57ac08f186f81f2b87cdcba30f9709b7c0039f031b0c6695fe1a764109732ad6af5911e30def3e570f9b97461f2e136f80073e063618cd2bfc34ec8212e655ad5eb223c61bde08c077e404eec113f3a52806726a942c469a5466d905c9cdab5abd65478c37bb1180efc809dd8227e74a500ce4d528588d34a8cdb20b939b56b57aca8f186f762301df9013bb044fce94a019c9aa50b11a69519b64172736ad6af5951e30deec4603bf202776089f9d2940339354a16234d2a336c82e4e6d5ad5eb2a3c61bdd81819d6ed254e93f70718a85f1d076abf15e7a26a905e40dbb5abd65578c37baf3033adda4a9d27ee0e3150be3a0ed57e2bcf44d520bc81b76b57acaaf186f75e60675bb4953a4fdc1c62a17c741daafc579e89aa4179036ed6af5955e30deebc4ce1101600d72270058b6af0de997df35b7f6f5182f3aadead5eb2acc61bdd7725d478d8d810c797d7dcfdd9b39123e163413aa005e8f9be5abd655a8c37baed4ba8f1b1b0218f2fafb9fbb3672247c2c68275400bd1f37cb57acab5186f75da23643c1036a5a1172c3a1f5ec4a2b7803947467d17a58afa6af5956b30deebb346c878206d4b422e58743ebd89456f00728e8cfa2f4b15f4d5eb2ad661bdd76619a348edb0f907147daea57308e905fb915f75f15e97cfeaabd655adc37baecb334691db61f20e28fb5d4ae611d20bf722beebe2bd2f9fd557acab5b86f75d96668d23b6c3e41c51f6ba95cc23a417ee457dd7c57a5f3faaaf5956b70deebb2c592ca01a5e2abb5bba3b53903da657d7373e0b87f4c023565eb2ad6f1bdd76573e6b98e192b7f96f413ccf1871aad7a91abe730ce981eaadbd655adf37baecad08e98a6ffbd275964f3fc628d9b3d74ce1bf4216d305795c7acab5bf6f75d95911d314dff7a4eb2c9e7f8c51b367ae99c37e842da60af2b8f5956b7edeebb2b223a629bfef49d6593cff18a366cf5d3386fd085b4c15e571eb2ad6fdbdd76564474c537fde93acb279fe3146cd9eba670dfa10b6982bcae3d655adfb7baecac81aaaffac9389dc1cc0c28a85919b9cc8c8367d6a305939c8acab5bf7f75d958f3555ff592713b8398185150b23373991906cfad460b273915956b7efeebb2b1e6aabfeb24e277073030a2a16466e732320d9f5a8c164e722b2ad6fdfdd76563c616a561172b1639dd2da7c24833b0e40edf6474e82cb7246655adfc0baecac774ee704cfbbc549f3727b2040fcd4447c882eea9a0598888dcab5bf8275d958ed29e0624c4ded169eb1bc6879f006b0f3bca031310b32b51c956b7f05ebb2b1d953c0c4989bda2d3d6378d0f3e00d61e77940626216656a392ad6fe0bd76563b23393e1de0e16dd3293b7c9dfb678ebc99ec320c12ccc787355adfc18aecac7636727c3bc1c2dba65276f93bf6cf1d7933d8641825998f0e6ab5bf8315d958ec65a61e0250ebdf7821ba54f76d041d721274edf01b33385ce56b7f063bb2b1d8b40d618f6f3de71bc0410c6e596e1d63cfae01a006668af9dad6fe0c876563b150dbe8a9abe1f662fd4e7b5c32421d474a2028ffdccd3033c5adfc191ecac76291b7d15357c3ecc5fa9cf6b864843a8e944051ffb99a60678b5bf8323d958ec5236fa2a6af87d98bf539ed70c908751d2880a3ff7334c0cf16b7f0647b2b1d8a46df454d5f0fb317ea73dae19210ea3a510147fee669819e2d6fe0c8f6563b14867fb0258b858e5b51b41842a387b6f44cc6b5bd9cd31d7c6adfc191fcac7628f5c085d5e47144e220349304c67550684451913b09a65538e5bf83240958ec51d44231369648b1efbd3588890c50835033674835e34cc4b1db7f064822b1d8a3914587f7f9f78c0af73773919806e9201192b62b9699a3a3c6fe0c905563b147128b0feff3ef1815ee6ee723300dd24023256c572d3347478dfc1920aac7628e25161fdfe7de302bdcddce46601ba480464ad8ae5a668e8f1bf83241558ec51c42ed654a9d2288833687ff0c3f9d2b803759d71c84cd375e47f06482bb1d8a3875daca953a4511066d0ffe187f3a57006eb3ae39099a6ebc8fe0c905763b1470e476bab541f04a3856ec5eb07dda9080882b8231e334f7b92fc1920afc7628e1b1ae9af55146bc9c2aa51fe07b1b0380bb1b2a23966a09b26f83241608ec51c3535d35eaa28d7938554a3fc0f6360701763654472cd41364df06482c11d8a386a6ba6bd5451af270aa947f81ec6c0e02ec6ca88e59a826c9be0c905823b1470d4635fd35579c0d0cd1f56183583dfe85839d76dc835067d38c1920b057628e1a752d1ff57c9e424520b725862fe1df8ab1ff1378d6a0e9e728324160bec51c34d31b6575c6a2acb5be3aad8bdf29a1950ec24cb17d41ee0e606482c18d8a38699636caeb8d45596b7c755b17be53432a1d849962fa83dc1cc0c905831b1470d3252ebb61e7f0db0275b718aefc0c68d3e5cd5885c507d27991920b064628e1a6331e9c4e9d47de30683a93dd777eb427765ed6cb5a0fbf333324160c9c51c34c563d389d3a8fbc60d07527baeefd684eecbdad96b41f7e6666482c1938a38698a53b96c54285a0ed1db6b1f55d60b31d843f80ed383f170cdc90583281470d313338531552716a05b839c66a3a2748bab343279a407e4859c920b065128e1a625670a62aa4e2d40b70738cd4744e917566864f3480fc90b3924160ca251c34c4a5a271e0172bd0425db37c286803056a77d0c428d1f93ba73482c1945a3869893406094afbbdc8b038335ad04f6bed549a65ae1173f2918e79058328c470d31250cd3820c4e1b98bed3318201e3dbd28df8f81e2b7e53d5d020b065198e1a624919a704189c37317da6630403c7b7a51bf1f03c56fca7aba04160ca331c34c492334e0831386e62fb4cc608078f6f4a37e3e078adf94f574082c1946638698924669c106270dcc5f6998c100f1ede946fc7c0f15bf29eae81058328cc70d31248594a7971b81c0ea4ffde4816341b50da3bc43eb4e53f01030b065199e1a6248f3ea74b90469aa001cc82b8245e94c9af23cad966ca7fa607160ca334c34c491d0960efcd6397c2bb65cb9840b387bb58f3d80eca9500f00f2c19466a8698923912c1df9ac72f8576cb973081670f76b1e7b01d952a01e01e58328cd50d3124722583bf358e5f0aed972e6102ce1eed63cf603b2a5403c03cb06519aa1a6248e44b077e6b1cbe15db2e5cc2059c3ddac79ec07654a807807960ca335434c491c8222155830fdeae6e297fac032ed9dd89e9c348a65010a4f3c19466a96989238f4442ab061fbd5cdc52ff58065db3bb13d386914ca02149e78328cd52d312471e1497aeb915dd3c7072c4d804b1c59e22534f7e96404437d006519aa6a6248e3b292f5d722bba78e0e589b009638b3c44a69efd2c80886fa00ca3354d4c491c76525ebae45774f1c1cb136012c71678894d3dfa590110df4019466a9a989238ec30cfce75854c663b62ece81d848b190d46be50af02236281328cd536312471d7619f9ceb0a98cc76c5d9d03b0916321a8d7ca15e0446c5026519aa6c6248e3ae4f519282eb941ba55879c86e088a8c2fc73b9eb9088f2e05ca3354d9c491c75b2ab57db2ad8aba027db9b8d40773405a3ab9996f1120000c9466a9b489238eb5556afb655b157404fb7371a80ee680b4757332de2240001928cd536912471d6a36e84f778c8d6ac1c3ad0b48142b29639728c1b94481a433519aa6d3248e3ad36dd09eef191ad583875a1690285652c72e51837289034866a3354da6491c75a667b3968b08982dbedb7a5518470acd8908e562e2120834ce466a9b4d9238eb4b5b7985c2e792de3583bad2288473c30cbe0d21c124120d9d8cd5369c2471d69543056432a5883f22d43bcc48ff45ae14285c9f7f4825bf3c19aa6d3948e3ad29121d2112217300fd753dc089f4e98422fcfb9afb904d22793354da7391c75a51243a422442e601faea7b8113e9d30845f9f735f7209a44f266a9b4e7238eb4a24874844885cc03f5d4f70227d3a6108bf3ee6bee413489e4cd5369ce471d69441cfb613de1fa8aa376b42c479daa4912941f33d9826ab7ca9aa6d39d8e3ad28739f6c27bc3f51546ed68588f3b549225283e67b304d56f95354da73b1c75a50e73ed84f787ea2a8ddad0b11e76a9244a507ccf6609aadf2a6a9b4e7638eb4a1c73ed629be636d7d382678a34e3b0708f4d3bfac913576255d5369ced71d6943773ed1de4a2d0325ed1953c61bdbf091946ba518f26b068acaa6d39dbe3ad286d73ec94761c02e7756ff0a0bb71dc3a2d39b6ff1b4d62755a54da73b8c75a50d973eb81990e6851a2aca7696eda169c551fb05a339ac68eb5a9b4e7728eb4a1b173e95bdef33325fd2614fad5aa8b60a4eba31064358ec16c5369cee61d69436173e5106abcc8ceb218f01da34b74e94483887cc56b1f26d9a6d39dcd3ad286c173dc79824ff4201bfea6633e8d47fa83b3535587d63ff1b44da73b9b75a50d8173cb4bb1764ac2efca12ee7510ee1d0212e9070cac8187699b4e7737eb4a1b0173a8f00fc2f8089760ec04e2183a61fed2146a165904b2d4369cee70d6943601736438cc5c5293e68e9e31bc26d2ebf8506b3029b20b09a96d39dce2ad286c0172daca458f07aa84ea028b704403ffeb4d18bc506417b753da73b9c65a50d80171c7ed37f471d7c1a0cb3ed87e6627d14673d49dc83112a8b4e7738db4a1b0016fa2331cbf46323b0e5ca5a8f32a779d392a05389063c95269cee71c694360016b56bee654eee72de97f7349dcb317351e96666e20c936a5d39dce39d286c00162bfd679804051139fc50e8bafc45664e96f28d94194114ca73b9c74a50d80015192059fd6e324df0c50450f55e6d4c47f20adaf8329c69a4e7738ea4a1b00012f3663ec8428cc75e566b216a22bd183aa83b75c065531359cee71d5943600015e6cc7d9085198ebcacd642d4457a30755076eb80caa626b39dce3ab286c000248ebe85ee705b48f6260f0527f0d6e095651396d195668d773b9c75750d800031dea296aa46debd69188089cf479040d58e4ced732ae75afe7738eafa1b000053bd452d548dbd7ad23101139e8f2081ab1c99dae655ceb5fcee71d5f4360000a03bafe57681a321212e64a6bc84238300fd59759cabb7ac09dce3abf86c000130775fcaed034642425cc94d7908470601fab2eb39576f5813b9c757f0d8000260eebf95da068c8484b9929af2108e0c03f565d672aedeb027738eafe1b00004c1dd7f2bb40d190909732535e4211c1807eacbace55dbd604ee71d5fc360000983bafe57681a321212e64a6bc84238300fd59759cabb7ac09dce3abf86c00013003722399d9a8c4fa298f7570fea52dfca6f547365770fc14b9c757f1d800025f06e44733b35189f4531eeae1fd4a5bf94dea8e6caee1f829738eafe3b00004be0dc88e6766a313e8a63dd5c3fa94b7f29bd51cd95dc3f052e71d5fc76000097c1b911ccecd4627d14c7bab87f5296fe537aa39b2bb87e0a5ce3abf8ec00012f83722399d9a8c4fa298f7570fea52dfca6f547365770fc14b9c757f1d800025f06e44733b35189f4531eeae1fd4a5bf94dea8e6caee1f829738eafe3b00004be0689b3f234093c14230a384379fa9a72469942992dc40a92f71d5fc77000097bf5d48d6f3578a053c2e0d306735b176437f6aaf22b882f65fe3abf8ef00012f7d46a4069385768d3028e088c661c11481ab17ba42710790c0c757f1df00025ef9195a65d3e14f9d181e873984b9e050fe0271d081e210c5828eafe3bf0004bdf132b4cba7c29f3a303d0e730973c0a1fc04e3a103c4218b051d5fc77e00097be26569974f853e74607a1ce612e78143f809c742078843160a3abf8efc0012f7c456e5874be0df6b78c0fff41dc560afeabfd0e00c1087d015757f1df90025ef8739dd6744982159a94ec61033811f87d02be41c152111442beafe3bf3004bdf0d73bace893042b3529d8c2067023f0fa057c8382a42228857d5fc77e60097be1a7387f5bf36e7e95d07de68c5fadc473b5bd2cc518446b4b0abf8efcd012f7c337322442b44325571dc82f983ec16b67163e7f4a0088f0d6257f1df9b025ef8657256e1035ec72d9b85cc1affce8b94dd7412453d111fbec5afe3bf3704bdf0c970c01ab393f0ddeed85e5df7937551b59466e6772241218c5fc77e6f097be1916d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321673774d4d2eaffe2c7cbefc630efbec65662add3890972347f1df9bf25ef86415a8142567c38827d5c5e0784583da5875907b7a412148869fe3bf37f4bdf0c814114dd59ced387b285823700a6d973095e51cb45242ab4d4fc77e6ff97be19010e3c13607409921cd7ca95f944110e0d68e5f28748570daaf8efce002f7c32011c7826c0e8132439af952bf288221c1ad1cbe50e90ae1b55f1df9c005ef8640238f04d81d02648735f2a57e510443835a397ca1d215c36abe3bf3800bdf0c80471e09b03a04c90e6be54afca2088706b472f943a42b86d57c77e70017be190086fd38eb416fba485496f878c376f08d13aa1847185727eb08efce003f7c3200f6bb976150459cbc25fa53710653c399d218564e00ae6a1621df9c008ef86401d638544d6df161a3c8c109618c0d69b34ef4d25bd15cee6c53bf38012df0c8039531ce25a948eb730e4e75429780b5e648adca7772b9f718b77e70026be190071324c1d61ff7ff1199694d04ae674e4c3c1fbaaeb57408717efce004e7c3200e164983ac3feffe2332d29a095cce9c98783f755d6ae810e2fdf9c009cf86401c25542ce34d462471e271969239031bb09b43107aa5d03c060bf38013af0c803833697f5167f2710f41af8fa3f16c19e0e14a46b51ba0924c27e700276e19007056d2fea2cfe4e21e835f1f47e2d833c1c2948d6a374124984fce004edc3200e0a66722d06d2fec68838aa10f45164a032fed40943e826370af9c009dc86401c1358f6b2ba7c600fc83e1a49e099276860a9ea6e84d04e1216f38013ba0c8038253dffbe21cf22a24848fabbb928acf8bc00173906a09dc82ee7002775190070490811d4f074a7c7485ebb9f6a47b81972ac70ce0a413d345ece004eeb3200e0911023a9e0e94f8e90bd773ed48f7032e558e19c14827a68bd9c009dd66401c122204753c1d29f1d217aee7da91ee065cab1c3382904f4d17b38013bacc8038244408ea783a53e3a42f5dcfb523dc0cb956386705209e9a2f670027759900704880d2fa7b420def73db8801e9c71dfbf25734f3ca113d4e9ede004eeb4200e090f1a5f4f6841bdee7b71003d38e3bf7e4ae69e794227a9d3dbc009dd68401c121e34be9ed0837bdcf6e2007a71c77efc95cd3cf2844f53a7b78013bad08038243c697d3da106f7b9edc400f4e38efdf92b9a79e5089ea74f6f002775a1007048785f0cd3eee451f69354c811bf145a1a51e136260e3d5042df004eeb4300e090ef4a2c008a9f066fde76564b761f125c9e6eaea8197aa229bf009dd68701c121dd206a59c2146f6274b972bee43482e137899fac2ff545f77f013bad0f038243b940d4b38428dec4e972e57dc86905c26f133f585fea8beefe02775a1e070487720dbbbfb528200c8ab2912388c869acd8d2c10cbcd51981fd04eeb43d0e090ee31b777f6a504019156522471190d359b1a5821979aa3303fa09dd687a1c121dc636eefed4a080322aca448e2321a6b3634b0432f3546607f413bad0f438243b8c6dddfda94100645594891c46434d66c6960865e6a8cc0fe82775a1e87048771867ce53ff58634b62f5d860847cf8f587d85327ca5199c3d14eeb43d1e090ee2f5baf00ab8729197db876e900f050130a5ce8ab91a3352ba39dd687a4c121dc5d43705a03e4b4b5b33db3f9f9d6fe4e0f6613b320466bfb483bad0f4a8243b8b912f30cb49fcbee1e482e1beba45ac4197869c23d8cd99a91775a1e960487717125e619693f97dc3c905c37d748b58832f0d3847b19b33522eeb43d2c090ee2e24bcc32d27f2fb87920b86fae916b1065e1a708f633666a45dd687a58121dc5c423aabe51d4c1f3aa0e370755193448c66f906de966ce788cbad0f4b1243b8b8747557ca3a983e7541c6e0eaa3268918cdf20dbd2cd9cf11975a1e9624877170e1abd51f4296a516005a2454c5b2f4b146a8413a29b3b8633eb43d2c590ee2e1b357aa3e852d4a2c00b448a98b65e9628d508274536770c67d687a58b21dc5c366af547d0a5a94580168915316cbd2c51aa104e8a6cee18cfad0f4b1643b8b86c61fce84e21b50db7f9d8525acfd8809e0062f911d9ddd5a05a1e962d877170d7500c294919cc9e27c076ccad960f2936ad084e20b3bd4f41b43d2c5c0ee2e1ad2c2aab3f09fbbf074db3c153227c7a680652f83e677c4284687a58b91dc5c3595855567e13f77e0e9b6782a644f8f4d00ca5f07ccef88508d0f4b1723b8b86b23cbd05a8fe517ed503952d448050119ac58e3cf69df2ae12a1e962e577170d63058c63fed3058061d3f08280f6fe4b30375ed5ea3be7002643d2c5cbee2e1ac50b18c7fda60b00c3a7e10501edfc96606ebdabd477ce004c87a58b97dc5c358a16318ffb4c1601874fc20a03dbf92cc0dd7b57a8ef9c00990f4b172fb8b86b142c631ff6982c030e9f841407b7f25981baf6af51df3801321e962e5f7170d62858c63fed3058061d3f08280f6fe4b30375ed5ea3be7002643d2c5cbee2e1ac503d9ed88737128ef24ad67816d6278e01981d19447ce1a8c97a58b97ec5c3589f075009bb4487a09c62731825a2ad43fddc7c8e85f9c4f593f4b172fe8b86b13d0ea01376890f4138c4e6304b455a87fbb8f91d0bf389eb27e962e5fd170d627a1d4026ed121e827189cc60968ab50ff771f23a17e713d64fd2c5cbfa2e1ac4f43a804dda243d04e31398c12d156a1feee3e4742fce27ac9fa58b97f45c3589e80112f4611edc8c7df3f7aa52213267d8740b445c9c50fd404b172fe9b86b13cf0225e8c23db918fbe7ef54a44264cfb0e81688b938a1fa80962e5fd370d6279e044bd1847b7231f7cfdea94884c99f61d02d11727143f5012c5cbfa6e1ac4f3c0897a308f6e463ef9fbd529109933ec3a05a22e4e287ea0258b97f4dc3589e78112f4611edc8c7df3f7aa52213267d8740b445c9c50fd404b172fe9b86b13cf0225e8c23db918fbe7ef54a44264cfb0e81688b938a1fa80962e5fd370d6279e044bd1847b7231f7cfdea94884c99f61d02d11727143f5012c5cbfa6e1ac4f3c0158c893c44a8c1b1c89b51088f921434b1e48a4b288044268b97f4dd3589e77f2b191278895183639136a2111f24286963c914965100884d172fe9ba6b13cefe563224f112a306c7226d44223e4850d2c792292ca201109a2e5fd374d6279dfc3876a28efba8904611a0b03c72eec9a03b66ae564403c5355cbfa6eaac4f3bf770ed451df751208c23416078e5dd934076cd5cac88078a6ab97f4dd5589e77ee6dece2e8c504c3d01348e8e9c2194e7b99dd15561010b8d672fe9babb13cefdb67ec1e7e606c0a57f357f9cb7a90c4f1dffc86a9202315ade5fd37586279dfb55bea95a9973a9767b3761b8eeb7fb1de6c3b694f4047cf5ccbfa6eb1c4f3bf6943e7840004d7b18733b25f15cd5d8bb784b92e9b809142ba97f4dd6489e77ed113e160ace011e5c6342ae62391193f69b5b4b934012429762fe9baca13cefda127c2c159c023cb8c6855cc4722327ed36b697268024852ec5fd37594279dfb424f8582b380479718d0ab988e4464fda6d6d2e4d00490a5d8bfa6eb284f3bf6842b1d5e13d6f1b0e96e1d59147f28234859e8259d0922efb27f4dd6519e77ed07563abc27ade361d2dc3ab228fe504690b3d04b3a1245df64fe9baca33cefda0e3887d0fc3229465d853b8c49f2feb51c13e2f271248d62cafd37594779dfb41b710fa1f864528cbb0a771893e5fd6a3827c5e4e2491ac595fa6eb28ef3bf68366e319c9d9f079c2de1b4591fc258fc6afbce25c192372f2cf4dd651ee77ed06b687591e81471bb13902eda377b1020d0a3dea7802470025ae9baca3ecefda0d55cfd7c7cff45f8deed23dc66ec7e699bf3ffaafd48e1a8b6d375947e9dfb41a9460d51a6d4ee7475a70de0c5cf5afb329441b1f791c4f56ea6eb28fe3bf68351182cfbfa803f6ba31ae1e98395141e5fd4c5bfec238b8ede4dd651fd77ed06a13059f7f5007ed74635c3d3072a283cbfa98b7fd847171dbc9baca3faefda0d4260b3efea00fdae8c6b87a60e5450797f5316ffb08e2e3b79375947f5dfb41a844d7a3880d85ddfd0a3d574149eff1af952705b5e1c5e1af36eb28fecbf6835072706c9ae871e425914711021345c5ded512312b938bdd9e7dd651fda7ed06a0d4e0d935d0e3c84b228e2204268b8bbdaa2462572717bb3cfbaca3fb4fda0d41a282d7f66f2db8c1c1e8a687cc7cf9faff0cea6e1e2f90ba075947f6afb41a833505afecde5b718383d14d0f98f9f3f5fe19d4dc3c5f21740eb28fed5f68350662cc85648a1d0b32846efc9eb159ca6ba6f7cf7848be5d282d651fdaced06a0cb5990ac9143a166508ddf93d62b394d74def9ef0917cba505aca3fb59da0d41963f33b1cf5da54f58e8854fa44cd0c2e46a363a0f2f98ee0c5947f6b4b41a832b0a79bc4b91ad21699dd0c7408fffadc380aed01b5f338019b28fed6a6835065514f37897235a42d33ba18e811fff5b87015da036be670033651fdad4d06a0caa29e6f12e46b485a677431d023ffeb70e02bb406d7cce0066ca3fb5a9a0d4195453cde25c8d690b4cee863a047ffd6e1c057680daf99c00cd947f6b5341a832a833ae1d65f1349951a9d29c00f6590432b72f5db2f339a59c28fed6a78350654f675c3acbe26932a353a53801ecb208656e5ebb65e6734b3851fdad4f06a0ca9e5acace449b34e7fe741097fbcfc238c588ffd2c8cce83a71a3fb5a9f0d41953b41a7f5360ccc52b4b4e757ef95e29985be42018e99d218e447f6b53f1a832a750f624318effb28213694d7d722235b0628c65f1a33a5d5c98fed6a7f350654e91ec48631dff650426d29afae4446b60c518cbe34674bab931fdad4fe6a0ca9d23d890c63bfeca084da535f5c888d6c18a3197c68ce9757263fb5a9fcd41953a407247174563bc3c1816ce6b10779002bf27554ce9d30524d7f6b53faa832a7470e48e2e8ac77878302d9cd620ef20057e4eaa99d3a60a49afed6a7f550654e8e1c91c5d158ef0f0605b39ac41de400afc9d5533a74c14935fdad4feaa0ca9d1c39238ba2b1de1e0c0b6735883bc8015f93aaa674e982926bfb5a9fd541953a387247174563bc3c1816ce6b10779002bf27554ce9d30524d7f6b53faa832a747070a087379ddafae7fa62fe18e57e2d78faecf5d0a60bedb0ed6a7f560654e8df6d53671c12187887c18c2429c15a82eca21c479e4c197f62dad4fead0ca9d1bd66b926e4fa9373c74fde704b79132dd3f07aeb399834a2c6b5a9fd5b1953a3795984a676cb896a466c83088ee88483a28d383270306ae98e6b53fab732a746f13f1ba59a6d755744a5cc3915c7672f3fc6b2c0dd60d7771dd6a7f56f654e8de10a49a3e1b14d3141185e9a23852c867a39a7ddb7c1b0923cad4feadfca9d1bc1149347c3629a628230bd34470a590cf4734fbb6f836124795a9fd5bf953a378229268f86c534c504617a688e14b219e8e69f76df06c248f2b53fab7f2a746f04524d1f0d8a698a08c2f4d11c296433d1cd3eedbe0d8491e56a7f56fe54e8de0830ac96c7eb3596c952afca3049268f9e46c037791b0ac7cbd4feadfda9d1bc0f61592d8fd66b2d92a55f9460924d1f3c8d806ef236158f97a9fd5bfb53a3781e4ec4b3cc8338dddd178550b91af86673c74339e16c2cc33053fab7f7a746f03b299bc045dcd43e71fbd0c96a2c4ef4e23ac8cfbfd85b2a61a7f56ff04e8de0755337808bb9a87ce3f7a192d4589de9c475919f7fb0b654c34feadfe09d1bc0ea328159c449b37c7fbc094da0a799fb8397659afc616e4d879fd5bfc23a3781d36502b3889366f8ff78129b414f33f7072ecb35f8c2dc9b0f3fab7f84746f03a65617bfbdfd3074b6bceb5e7a94c6160909d8c7ee85bada1f7f56ff09e8de074b3841d828d0c36c25469ce4ed1fea540cbff3ebda0b77583ffeadfe14d1bc0e957083b051a186d84a8d39c9da3fd4a8197fe7d7b416eeb07ffd5bfc29a3781d2a6d19b9501970334ce739bbac7607782dac120b652ddf0500fab7f85446f03a536645cb4d0942e9519b399f50e26d1856046672c75bbfae02f56ff0a98de074a5589def46e8e8555b03396699bb3858a6b50f418bb7810006eadfe1541bc0e9493d4e373aa8332d6dd338f52b6cced9481660df146f03a40ed5bfc2a93781d29106aec72226c8dd937338124ecffbda8ad9041a25de08ec1eab7f85536f03a5210d5d8e444d91bb26e670249d9ff7b515b208344bbc11d83d56ff0aa6de074a421abb1c889b23764dcce0493b3fef6a2b641068977823b07aadfe154dbc0e9484357639113646ec9b99c092767fded456c820d12ef04760f55bfc2a9b781d29086aec72226c8dd937338124ecffbda8ad9041a25de08ec1eab7f85536f03a521061eb3cf1af7e352633c871d1f5d97955ccc5a0b8c11f27d66ff0aa6ee074a41f4fe8d290355eed0434570b9be2111aa645cd9d6e823ff3addfe154dec0e9483d2be3fdcd41205cc035743f2fba805d4737dd96da04818b5cbfc2a9be81d2907957c7fb9a8240b9806ae87e5f7500ba8e6fbb2db4090316b97f85537d03a520f23ba24fe1dae3f5b8a29724b6e05f9d178bb8b7651207d173ff0aa6fb074a41e30356f8708c2a6e2911f47165b71d6229c3b3cac7241146e8fe154df70e9483c506adf0e11854dc5223e8e2cb6e3ac4538767958e48228dd1fc2a9bee1d29078a0d5be1c230a9b8a447d1c596dc7588a70ecf2b1c90451ba3f85537dc3a520f141ab7c384615371488fa38b2db8eb114e1d9e5639208a3747f0aa6fb874a41e28356f8708c2a6e2911f47165b71d6229c3b3cac7241146e8fe154df70e9483c506adf0e11854dc5223e8e2cb6e3ac4538767958e48228dd1fc2a9bee1d29078a061d074cfe0fe0cfc49e28165bdb6b26b99350dc604535e4085537dc4a520f13f4fb3424c985e9cb0608b2ac371cb8cd1deac778908a860820aa6fb8a4a41e27d2b78dd46071fbc188ddc7d7ed9f5419e699b4b0f11526505154df7159483c4f956f1ba8c0e3f78311bb8fafdb3ea833cd336961e22a4ca0a2a9bee2b290789f239f5cdc4f2e1731a04381df35e332e7452af8839454b38155537dc57520f13e373eb9b89e5c2e63408703be6bc665ce8a55f10728a96702aaa6fb8aea41e27c673e98fc0a1e84f1fdda69fc56f2ae1cbf7007ce2152e845654df715e483c4f8b73e5782e1a3320f788136782d4b3eb929a4355c12a5eacada9bee2bd90789f1573dd49090ac8c4a6dcecf6fd9fc5ff1fe0c9077f54befd5c537dc57c20f13e2973cceabeebf40c0586a015f335ea263a6dd46afba97f9eb9a6fb8af941e27c5173ac2e2aae4a9ac2da0653de6232746f87eb31f45300e1744df715f383c4f8a1736ab50232f7b83d80d2cfb4bac310d9bc18bfe5a60366e99bee2be80789f14172e7c2b13c51f332ce6bc7616be449ae2473dbc84c0871d437dc57d10f13e28171e1de0f4f06691d699db6bace26bb56f52a138d981287a96fb8afa31e27c5016fd614cb746f54f2a001956d92ab9ea8969683183026b353df715f473c4f8a016bbe8243bf412c9d0cc952d31bb5654bd96f622d604f0aa8bee2be8f789f1401638f5d3454e4dbf1e658cd9e2dc8f2925f212057c09fb9527dc57d1ff13e280153311315802c3a9b9977c33451f00d1f6a849cac814116a5fb8afa40e27c500132747ed7d6baf7eeffb5ae609a3e4239814b95560283d14cf715f482c4f8a00164e8fdafad75efddff6b5cc1347c847302972aac0507a299ee2be90589f1400255e4540c314e6273cb9ce17a5f5730e0b170b1550a10e934dc57d20c13e2800337db00c538ff479f63ffeaecb50c89bc0f23bea71423766ab8afa41927c500056fb6018a71fe8f3ec7ffd5d96a1913781e477d4e2846ecd5715f48324f8a000a6b7e5bc1ba5fa1355cc5d3aaca904eeae8d15699508f7dabe2be90659f140013630f10304b21c5228651cf4d8b7ec5d07de5092fa1209f58c57d20cc3e2800255230790d6ca60cfcd969c6930d5bb39ba80c6e5c4242e2b28afa41997c50004930734ac7afae9cb17f99b51e11158f31fc5b38b58487696615f48333f8a0009160e6958f5f5d3962ff336a3c222b1e63f8b6716b090ed2cc2be90667f14001224ddf83cb951cf57dcb2cfc703ab464c29daf3ed3121f499957d20cd0e280024327d16044009c6db3632020d86bc6f17fe7a0d9a324403733afa419a2c50004854fa2c0880138db66c64041b0d78de2ffcf41b34648806e675f4833458a00090a2b57d9bcd8d439855946ab59a579edfa4ac5c289910280cfbe90668c1400121356afb379b1a8730ab28d56b34af3dbf4958b85132205019f7d20cd18280024263971bfa039b368cd31e0d55e8c45dfe3d7596623440ba73ffa419a315000484b72e37f407366d19a63c1aabd188bbfc7aeb2cc4688174e7ff4833462a000909671d9572dbd3025ec94497d722775a78a09a7f48a10304100e90668c64001212b6fc5070850c2ce90f55922dc4549770ebf92451120622602d20cd18d800242556b9c66bd77e81fd9b7786db080f116182b66e61f40c5f006a419a31c000484a9634b2627c632c26b3bb70358f840542b0310283b818d840e483346390009095152a8a4fc62c8078e44342ea9e6ded050b262ac74031cac1d90668c73001212a13163a2a59bf291d4552e854bc41bc89c1107b4e5063afc3c20cd18e70024254162c7454b37e523a8aa5d0a9788379138220f69ca0c75f878419a31ce00484a8251a0e343462cca0921803d2706cd4a6af0612f9118ed94f18334639d009095032f541f3362bc16ca0fc6a24603f8bcd08d04bb1f31dccde40668c73b01212a055ea83e66c5782d941f8d448c07f179a11a09763e63b99bc80cd18e760242540a4962d57a6152dde00be0b11006411b3ce0554879c774db9119a31ced0484a8131ed803a199083e77e4878a1802e05e746cececf08eeb5b23334639db090950253db0074332107cefc90f143005c0bce8d9d9d9e11dd6b646668c73b61212a04a077267333a837c975ee4505801dfa1cc5ff60fbf3baf108dcd18e76d242540930ee4ce667506f92ebdc8a0b003bf4398bfec1f7e775e211b9a31ceda484a81261dc99cccea0df25d7b914160077e87317fd83efceebc423734639db49095024c3b933999d41be4baf72282c00efd0e62ffb07df9dd78846e68c73b69212a04980338cbe07e9a4c2dbb0b2d78145844c0aba357f0baf2acddd18e76d34254092f067197c0fd34985b76165af028b089815746afe175e559bba31ceda684a8125e0ce32f81fa6930b6ec2cb5e051611302ae8d5fc2ebcab3774639db4d095024bc19c65f03f4d2616dd8596bc0a2c226055d1abf85d79566ee8c73b69a12a04978338cbe07e9a4c2dbb0b2d78145844c0aba357f0baf2acddd18e76d34254092f067197c0fd34985b76165af028b089815746afe175e559bba31ceda684a8125e05a4550cc7cf58e268f9185fd0c6f58259518582bbcacdb75639db4d195024bbf409cfa45d04d9f04ebe933f20f3cd845d6730c54795b5aebc73b69a42a04977d0d4c4d3876fdc0c1a4988fdc14d7d886592874a5f2b859d88e76d34954092ef91a989a70edfb818349311fb829afb10cb250e94be570b3b11ceda692a8125df2353134e1dbf7030692623f70535f621964a1d297cae1676239db4d255024bbe46a6269c3b7ee060d24c47ee0a6bec432c943a52f95c2cec473b69a4aa04977c860d72c34463e8ed2164f25b943dbb0603ec9a65c2b874189e76d34964092ef8f4dc0b11562dfa05bf964736a7e1588bb29d5a8b557102714ceda692d8125df1d2793bad79c21c36fbf8f0eccf2893970ffedad67ae21f22a9db4d25c024bbe394f2775af384386df7f1e1d99e51272e1ffdb5acf5c43e4553b69a4b804977c722a61440b46e99076cb02632bc0830dbeabf9119bb8896cab76d34971092ef8e354c288168dd320ed9604c65781061b7d57f223377112d956eda692e2125df1c6359768d9f208c492f8cfb4a6f86a5ef55c26a26be22756aedb4d25c524bbe38b6b2ed1b3e4118925f19f694df0d4bdeab84d44d7c44ead5db69a4b8a4977c716626ffc149e859503b004fa93d807a3d01cdce5ac889efebc6d34971592ef8e2b50f250d6136dacbf2cd01d1fa66d6f9ae5fc2756113fa179da692e2c25df1c552df6fa58fd3ddc362666623743390730783aaaa92280e6f4b4d25c594bbe38a95bedf4b1fa7bb86c4cccc46e86720e60f07555524501cde969a4b8b2977c715243ee4210cb59f390665fb0d5034244bc8d2d06a18a053fd3d34971662ef8e2a313eedcce6d1669d8998589a1fce2b173c69c6940140c23a8a692e2cd5df1c54527ddb99cda2cd3b1330b1343f9c562e78d38d280281847514d25c59abbe38a8a4fbb7339b459a76266162687f38ac5cf1a71a50050308ea29a4b8b3577c715142b893f203f15d17c98f27507dd73b398e125a5fda062c1463497166bef8e2a2757127e407e2ba2f931e4ea0fbae76731c24b4bfb40c5828c692e2cd7df1c544e3a37552dd2b9c8aa308ffc176c2cf65e30d8f3f3818ca919d25c59b0be38a89b008103087bd6140c2de62026ceb814b70df443e4031af634a4b8b3627c71513501020610f7ac28185bcc404d9d70296e1be887c80635ec69497166c4f8e2a26a02040c21ef585030b798809b3ae052dc37d10f900c6bd8d292e2cd89f1c544d404081843deb0a0616f31013675c0a5b86fa21f2018d7b1a525c59b13e38a89a808103087bd6140c2de62026ceb814b70df443e4031af634a4b8b3627c71513501020610f7ac28185bcc404d9d70296e1be887c80635ec69497166c4f8e2a26a02040c21ef585030b798809b3ae052dc37d10f900c6bd8d292e2cd89f1c544d404081843deb0a0616f31013675c0a5b86fa21f2018d7b1a525c59b13e38a89a800d156128ac768ee5b2e64ec6ae72df08a08640001af7d8a5b8b3627d715134ff1a2ac25158ed1dcb65cc9d8d5ce5be11410c800035efb14b7166c4fae2a269fe345584a2b1da3b96cb993b1ab9cb7c22821900006bdf6296e2cd89f5c544d3fc68ab094563b4772d973276357396f84504320000d7bec52dc59b13eb8a89a7f85d686b379dcb7112fb2b1462dd8c1884b4a65bfeaf7f2e5c8b3627d815134fef46e32f1c11f964ddc31c50bdb1765904158f13fa5f0000ba166c4fb12a269fdd19d8b6e4fa554c7352fec973594ada02d76083f1be01a5752cd89f63544d3fb933b16dc9f4aa98e6a5fd92e6b295b405aec107e37c034aea59b13ec6a89a7f726762db93e95531cd4bfb25cd652b680b5d820fc6f80695d4b3627d8d5134fee45ad80fd4a90ce65264bc7392c0b4f81167467b8af00ecfaa66c4fb1ba269fdc741c27856287c4f5c963f0f1d77c8181d7acf5312e01f4355cd89f63844d3fb8d0f974959275b2170f9444632e5ee5835a1e10222c0402aac9b13ec7189a7f7191f2e92b24eb642e1f2888c65cbdcb06b43c20445808055593627d8e3134fee323e5d25649d6c85c3e51118cb97b960d68784088b0100aab26c4fb1c6269fdc6408cca376113b8e3f96e8598f25d0e9a7bb4a6d130202f965d89f638d4d3fb8c7119946ec22771c7f2dd0b31e4ba1d34f7694da260405f2cbb13ec71a9a7f718e23328dd844ee38fe5ba1663c9743a69eed29b44c080be597627d8e3534fee31c46651bb089dc71fcb742cc792e874d3dda5368981017cb2ec4fb1c6a69fdc63818dc900dea1b66b13b4bc0ea536cc27660e92d2d20313a5e89f638d5d3fb8c6f31b9201bd436cd62769781d4a6d984ecc1d25a5a406274bd13ec71aba7f718de63724037a86d9ac4ed2f03a94db309d983a4b4b480c4e97a27d8e3574fee31bc52f6d91c273db841a7242f4a91c43badb38bc566018b76f54fb1c6af9fdc637732000ae524ddf33b1b0e868d19e69f561359e6c9031891eb9f638d603fb8c6ed640015ca49bbe676361d0d1a33cd3eac26b3cd92063123d73ec71ac07f718dda5412844169da4fa43900422c5df8a552f9a9f7210c63ebaf7d8e3581fee31bb33437612faa1722003ec6ac50b24f72a09f964a3f18c97b5ffb1c6b04fdc63765686ec25f542e44007d8d58a1649ee5413f2c947e3192f6bff638d609fb8c6eca5cefdd6b7ebf0ab8c7e0d93abf9bf27d2a9b84f963279180ec71ac14f718dd9345f21383d3e098295c87da6d75960cf5017965efc650c702d8e3582aee31bb2517f67fb47e23b30a85d5dcd2e18a41e4af3527dc8ca33206b1c6b056dc6376492fecff68fc4766150babb9a5c31483c95e6a4fb91946640d638d60adb8c6ec925fd9fed1f88ecc2a1757734b86290792bcd49f72328cc81ac71ac15b718dd9244bc65650c7801b0bfb750e8f02b0372025eb9ae1651b34368e3582b7e31bb247239f054e6562b8cfc3b04515fbbe963af81991bfca380c6e1c6b0570c637648d473e0a9ccac5719f87608a2bf77d2c75f033237f947018dc38d60ae18c6ec91a1a8e6de66bed65f6db873c4fe55880e68ca8a2fc28e1d5b971ac15c418dd9233351cdbccd7dacbedb70e789fcab101cd195145f851c3ab72e3582b8831bb24666a39b799afb597db6e1cf13f9562039a32a28bf0a38756e5c6b05710637648cc6085c7e035cdb26ea9000a7721222f2f118773de471051cc8d60ae21c6ec91974d1de86d41fde7951ec63ce638a28658cf5143b98e22479a1ac15c448dd9232d264e29875a5e51e20a52a1c467a334ac4ae4e3701c4633353582b88a1bb246594c9c530eb4bca3c414a54388cf46695895c9c6e0388c666a6b05711437648cb2254afeca3fdbca3ff610af0994eafaabd7d5e9bd711a70d5d60ae2296ec919634a95fd947fb7947fec215e1329d5f557afabd37ae234e1abac15c452dd9232c6213e53d5d5d1abb7a508e41e4a0a12aa0b9a02f2c46b6758582b88a6bb24658b427ca7ababa3576f4a11c83c94142554173405e588d6ceb0b057114d7648cb16110ba8042da9319660e9b8711e8672a2daaa67c811af416260ae229bec91962b221750085b52632cc1d370e23d0ce545b554cf90235e82c4c15c4537d9232c56442ea010b6a4c65983a6e1c47a19ca8b6aa99f2046bd058982b88a6fb24658ac146f98ce43ac0f6ad413eb80ea91bd1181959a3d8d7baf14057114e0648cb15728df319c87581ed5a827d701d5237a23032b347b1af75e280ae229c0c91962ae51be63390eb03dab504fae03aa46f446065668f635eebc5015c453819232c55c2f8f1f1ef3c2fe0e6d6583ff4aec1086b8ef2de96bdf1ca12b88a70424658ab75f1e3e3de785fc1cdacb07fe95d8210d71de5bd2d7be394257114e0848cb156e4a4ed528a56e7af1825c37f5220e6a158fff13a2af7e1685ae229c1191962adb20b002fe213f789ad17e97e23a7afc25cc4083425efdd10c5c453824232c55b5416005fc427ef135a2fd2fc474f5f84b98810684bdfba218b88a70484658ab6a0ed264a55b60652312c08780e04a1891dd4469067bf8e8327114e0918cb156d31da4c94ab6c0ca4625810f01c0943123ba88d20cf7f1d064e229c1231962ada63b4992956d81948c4b021e03812862477511a419efe3a0c9c453824632c55b4c02a57dd7b165abd062ca63fef8aeec899665a430dfc8e59488a7048d658ab697054afbaf62cb57a0c594c7fdf15dd9132ccb4861bf91cb29114e091acb156d2e0a95f75ec596af418b298ffbe2bbb226599690c37f239652229c1235962ada5c152beebd8b2d5e8316531ff7c577644cb32d2186fe472ca44538246b2c55b4b82a57dd7b165abd062ca63fef8aeec899665a430dfc8e59488a7048d658ab697054afbaf62cb57a0c594c7fdf15dd9132ccb4861bf91cb29114e091acb156d2e03571ce992fcd76d07f5f27b622194a6045ab6834f23b092329c1235a62ada5bf6ae39d325f9aeda0febe4f6c443294c08b56d069e4761246538246b4c55b4b7e61d9931195985df9ca42c6d07ec3517bc2effcd0c8edc88da7048d6a8ab696fb4fc57ed001933eab614bb598f3e4caf23222559e91dd351c4e091ad6156d2df52b9d564cd989000e8f5d9329de27bddf1087073a23bc0e399c1235ad2ada5be9573aac99b312001d1ebb2653bc4f7bbe210e0e7447781c7338246b5a55b4b7d23a87b1e03c8682f20a3c749f6efd1f76ee5e78e58ef1dce77048d6b5ab696fa30121bc6d4f6f889be13f1136d45866e888ff4dc81de55dcfe091ad6c56d2df45024378da9edf1137c27e226da8b0cdd111fe9b903bcabb9fc1235ad8ada5be8a0486f1b53dbe226f84fc44db51619ba223fd37207795773f8246b5b15b4b7d14090de36a7b7c44df09f889b6a2c3374447fa6e40ef2aee7f048d6b62b696fa28121bc6d4f6f889be13f1136d45866e888ff4dc81de55dcfe091ad6c56d2df45024378da9edf1137c27e226da8b0cdd111fe9b903bcabb9fc1235ad8ada5be8a0486f1b53dbe226f84fc44db51619ba223fd37207795773f8246b5b15b4b7d1401cf08f548e26d0a86c4ec36222919c3f2be9400bf2b08bf148d6b62c696fa27f39e11ea91c4da150d89d86c44523387e57d28017e56117e291ad6c58d2df44fe73c23d52389b42a1b13b0d888a4670fcafa5002fcac22fc5235ad8b1a5be89fc7396d351479907fb2f3c43090aeb09f40b8c5c5c9586038b46b5b1644b7d13f7733fff4f659492ae2b3eae0a0c343be2c35b14b62b0dab178d6b62c996fa27ed7292574ba18ba8142343840c0ec69fc032f88569561cfa301ad6c5942df44fd9713707441979d2e0134d301013eb677b123366cfac3b986135ad8b295be89fb16e80673509562877f36088181e34f6f0d0a9299c5878d4c36b5b1653b7d13f6169132716e90ed3a7b387382832c815dc4d94af35b0f34d87d6b62ca86fa27ec15e38a6daa8802a0733d498485bee53b3476bba6861e83f10ad6c5951df44fd814883a6622762d6c6346f5888ae3acf613b19d0cdc3d222225ad8b2a4be89fb011d19a5712528304435a4d90952d3c6bd2275fd9887a5e845b5b1654a7d13f6013a334ae24a5060886b49b212a5a78d7a44ebfb310f4bd08b6b62ca94fa27ec020078ee716b0343c8a3598c1d41ad42ef361a525f1e994517d6c5952af44fd80300f1dce2d606879146b3183a835a85de6c34a4be3d328a2fad8b2a55e89fb00601e3b9c5ac0d0f228d66307506b50bbcd869497c7a65145f5b1654abd13f600c03c7738b581a1e451acc60ea0d6a1779b0d292f8f4ca28beb62ca957a27ec018078ee716b0343c8a3598c1d41ad42ef361a525f1e994517d6c5952af44fd80300f1dce2d606879146b3183a835a85de6c34a4be3d328a2fad8b2a55e89fb00601e3b9c5ac0d0f228d66307506b50bbcd869497c7a65145f5b1654abd13f600c03c7738b581a1e451acc60ea0d6a1779b0d292f8f4ca28beb62ca957a27ec01800500ca17d9a64b5b26524539a3a11730c694bb1b9946bbd7c5952af54fd802ff0a01942fb34c96b64ca48a7347422e618d297637328d77af8b2a55ea9fb005fe1403285f66992d6c994914e68e845cc31a52ec6e651aef5f1654abd53f600bfc280650becd325ad9329229cd1d08b98634a5d8dcca35debe2ca957aa7ec017f8500ca17d9a64b5b26524539a3a11730c694bb1b9946bbd7c5952af54fd802ff02c2b9ba80b2bee1c970ecf2c6a810e137ed9bf7028d91ef9b2a55eaafb005fdf585737501657dc392e1d9e58d5021c26fdb37ee051b23df3654abd55f600bfbe3cc0c74d03123b2a290164a9a0626048a7a959bda3661fe7ca957aacec017f7b0593e746dc86f90c1ec8f14b3722e88bfb950f7846cde3d0952af55ad802fef50b27ce8db90df2183d91e2966e45d117f72a1ef08d9bc7a12a55eab5b005fdea164f9d1b721be4307b23c52cdc8ba22fee543de11b378f4254abd56b600bfbd42c9f3a36e437c860f6478a59b917445fdca87bc2366f1e84a957aad6c017f7a8593e746dc86f90c1ec8f14b3722e88bfb950f7846cde3d0952af55ad802fef503e8f41886741a43ba5e4515edabb397a1ee44b05d9be1e13a55eab5c005fde9f0930dbbda4e5cb2f188ecab5abd49aeeea0af208b37de0284abd56b900bfbd3d1261b77b49cb965e311d956b57a935ddd415e41166fbc050957aad72017f7a7a24c36ef693972cbc623b2ad6af526bbba82bc822cdf780a12af55ae402fef4f44986dded272e5978c47655ad5ea4d777505790459bef014255eab5c805fde9e81f20148724bf35a955b2d352b3a7d6e94cf17c8837dfa685abd56b910bfbd3cf3e40290e497e6b52ab65a6a5674fadd299e2f9106fbf4d0b57aad72217f7a79e0892aac9695f595d23917542c4fd839fe0084e1ddf803e17af55ae452fef4f3b11255592d2beb2ba4722ea8589fb073fc0109c3bbf007c2f5eab5c8a5fde9e76224aab25a57d65748e45d50b13f60e7f802138777e00f85ebd56b914bfbd3cec4495564b4afacae91c8baa1627ec1cff004270eefc01f0bd7aad72297f7a79d8153d05436c58188a05dd7c24463661f8acc73ddaf805857bf55ae453fef4f3af2a7a0a86d8b031140bbaf8488c6cc3f1598e7bb5f00b0af7eab5c8a7fde9e75e54f4150db16062281775f09118d987e2b31cf76be01615efd56b914ffbd3cebc35fa82c839234707fbb2091a281137c0127c4ad4c02dcfe0aad722a0f7a79d776bf5059072468e0ff764123450226f8024f895a9805b9fc155ae4541ef4f3aee63fc63cdbaef9ed7bb8e4c6096a306faf633875000b8e383ab5c8a84de9e75db540b20484c41c06743e2c0b923a435f098a96a9d01736b0856b9150abd3cebb53428993d6ee60386548ba96a3da693dbdd95313702e87a11ad722a167a79d7696851327addcc070ca91752d47b4d27b7bb2a626e05d0f4235ae4542cf4f3aed25cb4bda291fa90d11ef4cda0ecf8776a229720d90ba38c47b5c8a85ae9e75da3457bd3f1fa57a45a0aafc339d04f16cef1709daf1748bc906b9150b6d3cebb45170a0090cb11cb6be225ae6b96fc55988f23975b2e931d21d722a16ea79d76892e140121962396d7c44b5cd72df8ab311e472eb65d263a43ae4542dd4f3aed125c2802432c472daf8896b9ae5bf156623c8e5d6cba4c74875c8a85ba9e75da2444625d332ef0de16ddf39b54ae40d4bf255f16d6749a8d0fb9150b763cebb44714d7131334443ee588ad5ea152dfd178f70089a9e936be20722a16ed79d7688d29ae262668887dcb115abd42a5bfa2f1ee011353d26d7c40e4542ddaf3aed11a535c4c4cd110fb9622b57a854b7f45e3dc0226a7a4daf881c8a85bb5e75da23432caf146788479e412311d028d5cb3c26446a94c49b795049150b76ccebb44676595e28cf108f3c824623a051ab96784c88d5298936f2a0922a16ed99d7688ce573e1dc6b8746a48158a9c022bd0f7043d5d012e26dff8134542ddb43aed119b3a8e943a474b5747f7db5ffc4e00160326fc5e594dc194278a85bb6975da2335012f812164f93147bc7ce7f0925e5400fa3b18af9b84cc50150b76d3ebb44669025f0242c9f2628f78f9cfe124bca801f476315f370998a02a16eda7d7688cd204be048593e4c51ef1f39fc249795003e8ec62be6e133140542ddb4faed119a4097c090b27c98a3de3e73f8492f2a007d1d8c57cdc266280a85bb69f5da2334812f812164f93147bc7ce7f0925e5400fa3b18af9b84cc50150b76d3ebb44669025f0242c9f2628f78f9cfe124bca801f476315f370998a02a16eda7d7688cd204be048593e4c51ef1f39fc249795003e8ec62be6e133140542ddb4faed119a4023d2e95f52fb26960b3a204125882877c9ceb3cac267cc0b85bb69f6da23347f47a5d2bea5f64d2c167440824b1050ef939d679584cf98170b76d3edb44668fe1b5dfe2a224f1d0ff9aea8fc8c7ec9d9d37d2b2809a0d42f16eda7dc688cd1fb36bbfc54449e3a1ff35d51f918fd93b3a6fa56501341a85e2ddb4fb8d119a3f66d77f8a8893c743fe6baa3f231fb27674df4aca0268350bc5bb69f71a23347ec670249fde8db6b379a3b6fdc5a5476c9482bb53d4d084579b76d3ee444668fd75a16eca8a8195927013d07b0ab07158d3c99c6779a122ef46eda7dc988cd1fad404031fe26953505cf4037594c6c53152575e8ec342601e9ddb4fb94119a3f590c92bca9238cecc36b4696aa8f36ce24f72e2dd5684da7d4bb69f72923347eb1192579524719d986d68d2d551e6d9c49ee5c5baad09b4fa976d3ee524668fd62324af2a48e33b30dad1a5aaa3cdb3893dcb8b755a1369f52eda7dca48cd1fac46495e5491c67661b5a34b55479b67127b9716eab426d3ea5db4fb94919a3f588553e233f0f314eee812f92a0e9cb0a4a1f25395384dc214cb69f72933347eb0f368e9f2af4c52094cf254d39c9f43c8eea8ccea409b9e69a6d3ee527668fd61d6d1d3e55e98a41299e4a9a7393e8791dd5199d481373cd34da7dca4ecd1fac3a664cd558a977050b095b5cdf1e2f1a365675968d26e93e6ab4fb949e9a3f587358ac035e29508ccddf7ce1b632bc5c67592d89174dd420d669f7293e347eb0e53d6a5f6929039c538bbfeb645bd6e0c95e9d6e2b9ba9e5add3ee527d68fd61c906e7177f2869bb5ee445fec0ae0be98d697d385437556f5ca7dca4fbd1fac3910dce2efe50d376bdc88bfd815c17d31ad2fa70a86eaadeb94fb949f7a3f587221b9c5dfca1a6ed7b9117fb02b82fa635a5f4e150dd55bd729f7293ef47eb0e443738bbf9434ddaf7222ff605705f4c6b4be9c2a1baab7ae53ee527de8fd61c886e7177f2869bb5ee445fec0ae0be98d697d385437556f5ca7dca4fbd1fac391068f54891e399ee945586000db7db59a7dbe96683eaaf8f95fb949f7b3f58721f5dfce9d09d965fe077d228136614db4a64152904d560c32cf7293ef77eb0e43d480c2c4e118f4278bc6a781ec287de8f746cae06aac32a5aee527deffd61c8791c2ab148f98107a9459b18357b6de519951bb80a5587f8b6dca4fbe0fac390f138556291f3020f528b36306af6dbca332a377014ab0ff16db949f7c1f58721e270aac523e6041ea5166c60d5edb79466546ee029561fe2db7293ef83eb0e43c46d67e2f4a26ac001f99ee9a3d1cd50c755201c4fac4169b7e527df08d61c878766e21e961b3802bbc003fb3f99f8c9895682949c58847770ca4fbe12ac390f0d59d695d90cd2882f4cce1e772a4fbb0d59478535b10a92e2949f7c2658721e193fbf845ef0079316666264e64afd9e155ed166686216c9c6293ef84db0e43c310b91616ab671a8e4998af1c48c59642569e528cdc42f378d527df09c61c878611722c2d56ce351c93315e38918b2c84ad3ca519b885e6f1aa4fbe138c390f0c22e4585aad9c6a392662bc71231659095a794a33710bcde3549f7c2718721e1845c8b0b55b38d4724cc578e2462cb212b4f29466e2179bc6a93ef84e30e43c30845286f583d7d110165754440bbf46a514a94e8d942f51cd627df09c71c87860f1663375d515ca4ba97b0b0796e46fc9d416c2daf85ebddad4fbe138f390f0c1d2cc66ebaa2b949752f6160f2dc8df93a82d85b5f0bd7bb5a9f7c271e721e183a598cdd75457292ea5ec2c1e5b91bf27505b0b6be17af76b53ef84e3ce43c30743f2c13976147a88c8a4babc368960ce4b7a3c9792f60916b7df09c7ac87860e70a6a7fdb98f1d3d0e15d7f7ec78a41c41b89eeef5ec2c6d7fbe138f690f0c1cd14d4ffb731e3a7a1c2bafefd8f1483883713dddebd858daff7c271ed21e1839a29a9ff6e63c74f438575fdfb1e2907106e27bbbd7b0b1b5fef84e3da43c307345353fedcc78e9e870aebfbf63c520e20dc4f777af61636bfdf09c7b487860e6832ba5666657fbfc5e29e1fe46f02443c64e14af2ec2e1180be138f6a0f0c1ccf6574accccaff7f8bc53c3fc8de048878c9c295e5d85c23017c271ed41e18399e56fbb2466c6181cf573ea789b26738ec3fc787c8b0b9ea03f84e3da93c30733b3a09bd39af2586567b43770b5b2c99d32bd16b8e61757808f09c7b537860e6750025d32034ad8f64c34d160eacb75ba103e53319c2ec9412e138f6a7f0c1cce9004ba640695b1ec9869a2c1d596eb74207ca663385d92825c271ed4fe18399d200974c80d2b63d930d34583ab2dd6e840f94cc670bb2504b84e3da9fc30733a4012e9901a56c7b261a68b07565badd081f2998ce1764a09709c7b53f860e6748025d32034ad8f64c34d160eacb75ba103e53319c2ec9412e138f6a7f0c1cce9004ba640695b1ec9869a2c1d596eb74207ca663385d92825c271ed4fe18399d200974c80d2b63d930d34583ab2dd6e840f94cc670bb2504b84e3da9fc30733a4012e9901a56c7b261a68b07565badd081f2998ce1764a09709c7b53f860e6748025d32034ad8f64c34d160eacb75ba103e53319c2ec9412e138f6a7f0c1cce9004ba640695b1ec9869a2c1d596eb74207ca663385d92825c271ed4fe18399d200235ed97f8ca015c5011e62aad3ccac0a410ec308b251ef85e3da9fc40733a3ff46bdb2ff19402b8a023cc555a7995814821d861164a3df0bc7b53f880e6747fe198dbeab08e2d9cbd13fb2a34590d823b07d681fc94962188f6a7f111cce8ffb331b7d5611c5b397a27f65468b21b04760fad03f9292c4311ed4fe22399d1ff66636faac238b672f44feca8d1643608ec1f5a07f252588623da9fc44733a3fec58804e051d79511656c3bd1222e4e918302d9cfb4a4cb4c57b53f889e6747fd73d12f4b7115524e47a4da21c3c27fa2b0c9d95f3949b0d8bf6a7f114cce8ffad0638421af90ccc80c1616c306eae1c50c57d87e42937bf18ed4fe22a99d1ff590c708435f219990182c2d860dd5c38a18afb0fc8526f7e31da9fc45533a3feb218e1086be43332030585b0c1bab8714315f61f90a4defc63b53f88aa6747fd6431c210d7c86664060b0b61837570e2862bec3f2149bdf8c76a7f1154ce8ffac8638421af90ccc80c1616c306eae1c50c57d87e42937bf18ed4fe22a99d1ff590531a9c0bf7fc12cff8f3ae05cc21b2135bf3588226f9871ea9fc45543a3feb1f324790c4c65aa857bead84038ea18c2164290d014df4b23e53f88aa9747fd63d648f21898cb550af7d5b08071d431842c8521a029be9647ca7f11552e8ffac7a55309bbfefcd2416c77c380630e458803ce6900237d46cfa4fe22aa6d1ff58f33673902cb5fccae55bbe98045826d8fb260f7c016faa7df59fc4554ea3feb1e56ce720596bf995cab77d3008b04db1f64c1ef802df54fbeb3f88aa9d47fd63ca65e0995fae55ae4d3bc0880956f98be744804c02beab9bd77f11553b8ffac79357d38b6c330ddf524447380aa4513fc93542f4027d58dbaffe22aa781ff58f253bb96f853c7e415c5554980d3f00a78d16c84401fab35b60fc4554f13feb1e49038537b74f5f0570776f5812745f7714d9d2e400f5685ac2f88aa9e37fd63c91070a6f6e9ebe0ae0eedeb024e8beee29b3a5c801ead0b585f11553c6ffac79220e14dedd3d7c15c1ddbd6049d17ddc53674b9003d5a16b0be22aa78dff58f2441c29bdba7af82b83bb7ac093a2fbb8a6ce972007ab42d617c4554f1bfeb1e48838537b74f5f0570776f5812745f7714d9d2e400f5685ac2f88aa9e37fd63c91070a6f6e9ebe0ae0eedeb024e8beee29b3a5c801ead0b585f11553c6ffac792206d604680ae23ded5a89c2c950e3bed3120fb5c3a5a1854bf22aa78e0f58f243f66d2e5ae32aa40631dfe812212d6025cee391471b4324d7f4554f1c2eb1e487d59b824093bb7037e08c32a3c1c0a2cb488b484e068663eff8aa9e386d63c90f93f82a0bf4dd089b3de4c7c702e728163bdab65bdd0ce22001553c70eac7921f10b179a2b7203961f895f20d853432ac227992778a19de8012aa78e1e58f243e1162f3456e4072c3f12be41b0a68655844f324ef1433bd002554f1c3cb1e487c22c5e68adc80e587e257c83614d0cab089e649de28677a004aa9e387963c90f8458bcd15b901cb0fc4af906c29a1956113cc93bc50cef4009553c70f2c7921f083d8bfb63f69be4b062b8357d2a90d41d25d4d38719e02413aa78e1e68f243e0f072a4f74c39a4c18923692f24b7fd034f7ec030b33c1ec2854f1c3ce1e487c1d0e549ee987349831246d25e496ffa069efd806166783d850a9e3879c3c90f83a1ca93dd30e69306248da4bc92dff40d3dfb00c2ccf07b0a153c70f387921f07439527ba61cd260c491b497925bfe81a7bf6018599e0f6142a78e1e70f243e0e872a4f74c39a4c18923692f24b7fd034f7ec030b33c1ec2854f1c3ce1e487c1d0715c474549ac05ca1398864166582e99a9c2bd63783f290b9e3879c4c90f839f6ecae73769ba8e4bf3f7347ac30e852dffc7d6c3f07ff6183c70f38a921f073d69a8271ba9d79f4fb4b490ed7c7b3256abd20984e101903178e1e716243e0e795f62a6e42a11c157362f49d2ef548ca803e66f06c204c463f1c3ce2d487c1cf14ad7a6752a8605663924bb9dd507414ab40f3a0a840b2cc8e3879c5b90f839e121c1a5972b6e8d843f0f9f33a06caa901460d0120817fd92c70f38b821f073c143834b2e56dd1b087e1f3e6740d9552028c1a024102ffb258e1e717043e0e7821318ef09841cb8c8c904a4c67810d23afdc59c4520619a4c1c3ce2e187c1cf032631de13083971919209498cf021a475fb8b388a40c334983879c5c30f839e064c63bc261072e32324129319e04348ebf71671148186693070f38b861f073c0c24d9d0f8f74848fe14eb4e2bb6e4b9d29a6f3e26030e7661e1e7170d3e0e781749b3a1f1ee9091fc29d69c576dc973a534de7c4c061cecc3c3ce2e1a7c1cf02e1f799c90b383a6b0207360a6d1f10f4515ff54950c3b7d88879c5c35f839e05b3ef3392167074d6040e6c14da3e21e8a2bfea92a1876fb110f38b86bf073c0b609f8caefa4711d784e93aa933e22650f043fae5130ef9a231e7170d8e0e7816b13f195df48e23af09d2755267c44ca1e087f5ca261df34463ce2e1b1c1cf02d627e32bbe91c475e13a4eaa4cf889943c10feb944c3be688c79c5c363839e05ac4fc6577d2388ebc2749d5499f113287821fd7289877cd118f38b86c7073c0b582b9f07a71d745a3cb600d12bd88478eaf03d41100efb4632e7170d8f0e7816af573e0f4e3ae8b4796c01a257b108f1d5e07a82201df68c65ce2e1b1e1cf02d5e3a8e77494c33ebaaa4c96ca758700ba66d37603d3beebccc9c5c363d39e05abb012f473f6eca5a0d16590146a73e3f4786b11c7777df1d9a38b86c7b73c0b575025e8e7edd94b41a2cb2028d4e7c7e8f0d6238eeefbe3b347170d8f6e7816aea04bd1cfdbb2968345964051a9cf8fd1e1ac471dddf7c7668e2e1b1edcf02d5d4097a39fb7652d068b2c80a3539f1fa3c3588e3bbbef8ecd1c5c363db9e05aba812f473f6eca5a0d16590146a73e3f4786b11c7777df1d9a38b86c7b73c0b575025e8e7edd94b41a2cb2028d4e7c7e8f0d6238eeefbe3b347170d8f6e7816aea04bd1cfdbb2968345964051a9cf8fd1e1ac471dddf7c7668e2e1b1edcf02d5d4023b5f8643b8f8942f946cb4b957dcbbe04d097b8ef90711d5c363dbae05aba7f476bf0c8771f1285f28d96972afb977c09a12f71df20e23ab86c7b75c0b574fe1aea3a3dc4a0a7c3b1e155264c5556f2bf84bae0be43687670d8f6ec816ae9fb35d4747b89414f8763c2aa4c98aaade57f0975c17c86d0ece1b1edd902d5d3f66ba8e8f712829f0ec785549931555bcafe12eb82f90da1d9c363dbb205aba7ec63642a9afb67c0d55bd0d12a5908df90a8683302f21ce7b486c7b7650b574fd752daade2cd3204628467ca4ca86fe71bfd12c202e43b736a0d8f6ecb16ae9fad31c7b47270c68b7cd595bc91473df632a667e002c8788ad51b1edd972d5d3f59638f68e4e18d16f9ab2b79228e7bec654ccfc00590f115aa363dbb2e5aba7eb253312a76997cb0ab231d1a3d135600c545e1dc0821e3cf556c7b765db574fd633274ad9a095be40e13005c721d0a29853806140d43c942abd8f6ecbc6ae9fac564e95b3412b7c81c2600b8e43a14530a700c281a87928557b1edd978d5d3f58a55e50f14fbd212f018c799c06a86ce0f8c5aac320f26aeb063dbb2f2aba7eb1337dc76d6ce06a897fe555b78cb6bc419c4f7b4611e4f0161c7b765e6574fd6256fb8edad9c0d512ffcaab6f196d7883389ef68c23c9e02c38f6ecbccae9fac4a6b8434080e7d2517c61b95db240d3861c0212d81793da9881edd979a5d3f5893631ac0bcf35ccce758fd53ae3e7898be2c84b6fff27cf7113dbb2f35ba7eb1255247da26bd1c1c867ec0cf54734f5977054bc9fce4fb92237b765e6c74fd624930a20cfa509abbc4ca47c6a0dcfcdae8b6d9eff6c9f8c847f6ecbcd9e9fac491614419f4a1357789948f8d41b9f9b5d16db3dfed93f1908fedd979b3d3f589224e9a8c9618cd71caf5e5427b6a51939d87aa1bd827e4c520dbb2f368a7eb1243294771d907fd664db890aceecb014f35bb9693ad4fcb2e42b765e6d24fd62485528ee3b20ffacc9b712159dd96029e6b772d275a9f965c856ecbcda49fac490a31302010f6581beeaf08dbb3226364d19a9caab23f2e5d0bdd979b4a3f58921362604021ecb037dd5e11b76644c6c9a3353955647e5cba17bb2f36947eb1242650d2d8f0afc2f27288e996c47febbb4116b506c5fcbb1830765e6d29fd62484b2db80a8e35e8679cde995580f6359e7cd9ac6988f977d461ecbcda54fac490955b70151c6bd0cf39bd32ab01ec6b3cf9b358d311f2efa8c3d979b4a9f589212a42f282e5ae04212b472b7dfbcf34a1ee12f40220e5e0f588b2f36954eb12425311f75e78326ac50e5b1d23ef94c76bd6d22a603ecbc38f1265e6d2aad62484a523eebcf064d58a1cb63a47df298ed7ada454c07d97871e24cbcda555ac49094a47dd79e0c9ab14396c748fbe531daf5b48a980fb2f0e3c49979b4aab589212941bcd4c6e69b8ab2aa5af47749c9986b13d955df35e1e1c942f369557b1242527379a98dcd37156554b5e8ee939330d627b2abbe6bc3c39285e6d2aaf62484a4e6f3531b9a6e2acaa96bd1dd272661ac4f65577cd78787250bcda555ec490949c6a7cbc202427dc0cfa40639cdb2a5d8498ed4b97f0f288a279b4aabe89212937610bd0ed1eb23ad1c146ef31acb2e303de1cf32ce1e6b545f369557e1242526d4e29fa8713c6f85b4f54065b4fc3ee02687c4256c3cf0e8ce6d2aafd2484a4d928664dbafdf0736e6b6e34ae95e603ff7d3ae0aa879fc11acda555fb490949b150cc9b75fbe0e6dcd6dc695d2bcc07fefa75c1550f3f82359b4aabf6921293622dab8f98ce2450717a7efab24df637f8a12ddea71e80a86c369557ee242526c35b571f319c48a0e2f4fdf5649bec6ff1425bbd4e3d0150d86d2aafdc484a4d8642c097100ef3c47db6c212c12e3707dd30f9d6997a0445b1da555fb990949b0b119386ccf44a0bb33a4a4d7a52cc37b50e36092ff40a2f64b4aabf742129361523270d99e894176674949af4a5986f6a1c6c125fe8145ec969557ee842526c2a464e1b33d1282ecce92935e94b30ded438d824bfd028bd92d2aafdd084a4d85418ae8f1478b2e0519f1893ca8cbfe5a31df2a57ca0531f26a555fba20949b0a7315d1e28f165c0a33e312795197fcb463be54af940a63e4d4aabf7441293614e62ba3c51e2cb81467c624f2a32ff968c77ca95f2814c7c9a9557ee882526c29c5186d1509bf98544c58ac64c5c5d55139bd787e2029a9d362aafdd114a4d85372f1ffb4e0e558d4157dbb490af18d221e3f16bc10536de6d555fba23949b0a6d5e3ff69c1cab1a82afb769215e31a443c7e2d7820a6dbcdaaabf7447293614da489245e50fb8b7bd2c34fa3ab2c170823c080b0114dd1db6557ee88f526c29b31d36e476f5d3f23225301c6d5be108ff245271ff29bbdf6daafdd11fa4d853653a6dc8edeba7e4644a6038dab7c211fe48a4e3fe5377bedb55fba23f49b0a6ca00edea88adb24b80618699ad65e24bf73d8c23f9a6f121b7abf7447f93614d9301dbd5115b649700c30d335acbc497ee7b1847f34de2436f57ee88ff26c29b2603b7aa22b6c92e01861a66b597892fdcf6308fe69bc486deafdd11fe4d85364c076f54456d925c030c34cd6b2f125fb9ec611fcd37890dbd5fba23fc9b0a6c980edea88adb24b80618699ad65e24bf73d8c23f9a6f121b7abf7447f93614d9301dbd5115b649700c30d335acbc497ee7b1847f34de2436f57ee88ff26c29b2603b7aa22b6c92e01861a66b597892fdcf6308fe69bc486deafdd11fe4d85364c003079d03af8842e89012feaae7842399725458d078927fd6fba23fcab0a6c97f060f3a075f1085d12025fd55cf084732e4a8b1a0f124ffadf7447f95614d92fe0c1e740ebe210ba2404bfaab9e108e65c9516341e249ff5bee88ff2ac29b25fc183ce81d7c4217448097f5573c211ccb92a2c683c493feb7dd11fe5585364bf83079d03af8842e89012feaae7842399725458d078927fd6fba23fcab0a6c97f060f3a075f1085d12025fd55cf084732e4a8b1a0f124ffadf7447f95614d92fe04df99998b8733cdbd185d2b1d7670e574158901b24a199bfe88ff2ad29b25fbf28058bde4748fc6f6fd1cd5ba52c44a92ef37c334944d780d11fe55b5364bf7d500b17bc8e91f8dedfa39ab74a5889525de6f8669289af01a23fcab6a6c97efa2c288825f38674758c0d5d668b0f3a9f68104cca25150204447f956e4d92fdf35851104be70ce8eb181abacd161e753ed02099944a2a040888ff2adc9b25fbe63cb47944a47c548dfcfb9d92229b12784c838f259455ac1211fe55ba364bf7cb057b4b361f5b2bd3c6bd631c3b944ceb45497a4828acfc2523fcab756c97ef950af6966c3eb657a78d7ac638772899d68a92f4905159f84a47f956ead92fdf2a15ed2cd87d6caf4f1af58c70ee5133ad1525e920a2b3f0948ff2add5b25fbe542bda59b0fad95e9e35eb18e1dca2675a2a4bd2414567e1291fe55bab64bf7ca857b4b361f5b2bd3c6bd631c3b944ceb45497a4828acfc2523fcab756c97ef9503b7bbf70c1c7fd30a4728b7f68e7c5635571a50215a128a57f956eae92fdf29f0309d78e59f27d1915ab3ef6c82db2c15725a6012b43f54bff2add5e25fbe53d0613af1cb3e4fa322b567ded905b6582ae4b4c025687ea97fe55babc4bf7ca7a0c275e3967c9f46456acfbdb20b6cb055c969804ad0fd52ffcab757897ef94f4184ebc72cf93e8c8ad59f7b6416d960ab92d30095a1faa5ff956eaf12fdf29e8309d78e59f27d1915ab3ef6c82db2c15725a6012b43f54bff2add5e25fbe53d0613af1cb3e4fa322b567ded905b6582ae4b4c025687ea97fe55babc4bf7ca7a04e883c435301c8fd3795e5aa01cad85075abdc47d0fef700cab7578a7ef94f3f2922d1337c6614b23bf1f34bf9f3d89b979a148ca1ff9202956eaf15fdf29e7d5245a266f8cc296477e3e697f3e7b1372f34291943ff24052add5e2bfbe53cfa309d9d7ac7fad580bc8df527de2d8a690aaaae2f87ffec0b55babc58f7ca79f3613b3af58ff5ab01791bea4fbc5b14d215555c5f0fffd816ab7578b1ef94f3e64e88ce97f64dd8babefdfc976f14519ed6ed14bb2001542e56eaf164df29e7cb2923f5dcc2fe342d4ac22126d486cb385a1c857340044c5dadd5e2cabe53cf955247ebb985fc685a9584424da90d9670b4390ae6800898bb5babc5957ca79f2a30a2301fe25b536cf7ceac93487954dc14b471ca0012d577b7578b2bf94f3e536144603fc4b6a6d9ef9d592690f2a9b82968e3940025aaef6eaf1657f29e7ca64e9b192c5fcfd06bac00da4518437b6aff142325004cf9dfdd5e2cb0e53cf94b29488b059602238f24c7dc8226e51ed0aa6aa247009b97c0babc5962ca79f2955291160b2c04471e498fb9044dca3da154d5448e01372f817578b2c594f3e52a313484c32e6b10f45fe59a0091f2a33d55ece51902700303eaf1658c29e7ca53626909865cd621e8bfcb340123e5467aabd9ca3204e00607d5e2cb1853cf94a650e46bb9900ec6894c5c8ffa3e28b4f003f5f06109c1b010abc59631a79f294b2ddb301ff6800fca657f47ec72af91dab42e3cbf13850422578b2c644f3e52955bb6603fed001f94cafe8fd8e55f23b5685c797e270a0844af1658c89e7ca52a437f192cb062c1e162c347a9c11c6f657cfb4ef94e15b48a5e2cb1923cf94a5313108b063728067a924cb74b789706c5a638f9ef9c2d0d15bc59632579f294a52621160c6e500cf524996e96f12e0d8b4c71f3df385a1a2b78b2c64af3e5294a4c422c18dca019ea4932dd2de25c1b1698e3e7be70b43456f1658c95e7ca52942496b0de8fa2b68c5f2be253bb165e27de0a2b79e16a0caee2cb192ccf94a527492d61bd1f456d18be57c4a7762cbc4fbc1456f3c2d4195dc59632599f294a4e1e6d1c2714ed5ce94975b146e2b7a09a246b09e485a9d6bc8b2c64b43e52949b3cda384e29dab9d292eb628dc56f413448d613c90b53ad791658c9687ca5293605c6c9492a17f65cf29ced13813caa633dee838f16a8fef32cb192d1f94a526b0b8d9292542fecb9e539da27027954c67bdd071e2d51fde6596325a3f294a4d6171b2524a85fd973ca73b44e04f2a98cf7ba0e3c5aa3fbccb2c64b47e52949ac2e364a4950bfb2e794e7689c09e55319ef741c78b547f799658c968fca5293585c6c9492a17f65cf29ced13813caa633dee838f16a8fef32cb192d1f94a526b044eb81d219614e562063ca681df374626a12cddfd521826696325a40294a4d5f15e95c5109251f640d8dbcc8324510bf8067f7bcaa44a8ce2c64b48152949abd2bd2b8a2124a3ec81b1b7990648a217f00cfef795489519c58c96902a529357a57a5714424947d903636f320c91442fe019fdef2a912a338b192d2054a526af43b5d3b351f8b7dd839340e398886adf6af8219e25226ea726325a40b94a4d5e702cccf1715797e683f2e446b076b83e80b468fc1a44f78e5c64b48182949abcd05999e2e2af2fcd07e5c88d60ed707d0168d1f83489ef1cb8c9690305293579a0b333c5c55e5f9a0fcb911ac1dae0fa02d1a3f06913de397192d2060a526af34166678b8abcbf341f97223583b5c1f405a347e0d227bc72e325a40c14a4d5e682cccf1715797e683f2e446b076b83e80b468fc1a44f78e5c64b48182949abcd05999e2e2af2fcd07e5c88d60ed707d0168d1f83489ef1cb8c9690305293579a03f461e7234c21cc7985742b9d13f21fd7de64c6613dfdd7292d2060b526af33f0a9e95913fe6bc46fd74ad6b98dc6bf5a80ef4c927c15ee625a40c17a4d5e67d153d2b227fcd788dfae95ad731b8d7eb501de9924f82bdcc4b48182f49abccfa2a7a5644ff9af11bf5d2b5ae6371afd6a03bd3249f057b989690305e935799f454f4ac89ff35e237eba56b5cc6e35fad4077a6493e0af7312d2060bd26af33e835fbb1c0d4ce4727a410feb18424e7552d31a88f7c1792635a40c17b4d5e67cf6bf76381a99c8e4f4821fd630849ceaa5a63511ef82f24c6b48182f69abccf9e64011fb0299b9f565d0a22be06f1c54f6108fe3af05fed8e690305ee35799f3b5414980d2999c16486da6d740441b2996e545872e0c17f1dd2060bdd6af33e75343b88c729960580da7b02dffee18d2d88eb0ce2c184a23ca40c17bbd5e67ce96877118e532c0b01b4f605bffdc31a5b11d619c58309447948182f77abccf9d25d007bc97cba98bb36b23377f1e45cb0cfee8f8806142cf390305ef05799f3a34613503fcfd7b42e3a2a8ee7da26e15c4c1f7b0d0c29fde82060bde1af33e7451838f92c7611eb14411b45c7aaabeab34481521718559fd140c17bc45e67ce893071f258ec23d62882368b8f5557d5668902a42e30ab3fa28182f788bccf9d1260e3e4b1d847ac51046d171eaaafaacd1205485c61567f450305ef11799f3a244dda221086f1db59d5a056354bbd7d94d04cecb5c2aea28b060bde23f33e744727c69ccde446396b7806d4628dd923244cdc3568855ee9170c17bc48e67ce88d4f8d399bc88c72d6f00da8c51bb2464899b86ad10abdd22e182f7891ccf9d11a2b2ccbe4677b6865ace179822dc2b48bdfb3319f157d485d305ef12499f3a233565997c8cef6d0cb59c2f3045b856917bf66633e2afa90ba60bde24933e7446638c5883e7450244e804c0e00ad68fa2a2b0f227955f6c575c17bc49367ce88cb718b107ce8a0489d00981c015ad1f454561e44f2abed8aeb82f78926cf9d11966f2879a6a7a313f1cdf65ffaac0210a3587ee5e257dcb9d805ef124e9f3a232b6a634bfa25a8aa9b68b2e7ed4e6249415d4027c1afbb17b10bde249e3e74465560d8f0a121b3d7ee9e2bf7d29322ba7d66c2ab805f77d36317bc493d7ce88ca94dc439ef19ca3295091e179d1ca39cf579c7b2fdbef14ac72f78927bf9d11951279acc8b09f6e7e1df0257322fa561e59fd1c1f87de4398f5ef124f8f3a232a14f35991613edcfc3be04ae645f4ac3cb3fa383f0fbc8731ebde249f1e74465422a7d8ad8fe3e223f48cf84c0b4f3af912b8963def7928a3e7bc493e4ce88ca8354fb15b1fc7c447e919f098169e75f225712c7bdef25147cf78927c99d11950636088410cf5b0bb4f0043afaca2ce63f5a67eb78de4bccfaef124f943a232a0b6c1108219eb61769e00875f59459cc7eb4cfd6f1bc9799f5de249f2874465416643468f013ceb18b8cd713e31f11c0f815e209e07930d7ecbc493e51e88ca82b547b2a8cfdffe5cee6744fbe3481a9ead8066fbdf26353da78927ca4d11950553508adc6d2624e5599aec7745f617bd05c4f3b78e4c84bb5f124f94aa232a0a96a115b8da4c49cab335d8ee8bec2f7a0b89e76f1c990976be249f2954465415260350fc81febbc0e338145c973e4173c1d7f49e09322d2d8c493e52b88ca82a34c7c783d1639fad433c8b38ade265672e740efbe264749b28927ca5811950545250b492702d6786034578f0db2aad4e07ac43b794c903766124f94b1232a0a894a16924e05acf0c068af1e1b6555a9c0f58876f299206ecc249f296246541512203f7d48e1bc64389e24642ec1097b7c975349e232428199493e52c58ca82a23407efa91c378c8713c48c85d8212f6f92ea693c464850332927ca58b195054460d104dd05d54139a4557b8b2fa8415ed098f8385c90baa6624f94b1732a0a88b1a209ba0baa827348aaf7165f5082bda131f070b921754cc49f2962e654151163441374175504e69155ee2cbea1057b4263e0e17242ea99893e52c5cca82a22c68826e82eaa09cd22abdc597d420af684c7c1c2e485d533127ca58b9950544585d1735b2aba3bc5c2241b3279e9f86cb453a945990bc4a634f94b1742a0a88af4640c4122da9fb7011498e47339d359136b784b0217a38c79f2962e95415115d1893e0d131b67997ef5944865d98931d19b1655d42f615903e52c5d3a82a22b93127c1a2636cf32fdeb2890cbb31263a3362caba85ec2b207ca58ba750544572624f8344c6d9e65fbd65121976624c7466c595750bd85640f94b174ea0a88ae450b15f3664164f7747904c2ae322c0e379cd86e717b25082f2962e9e415115c72d7517199e8f21a65be6c04dbca3a9c19fdd69cb2f664506e52c5d3d82a22b8d5aea2e333d1e434cb7cd809b794753833fbad3965ecc8a0dca58ba7b0544571a41e6b513509f09513c61292ee8eccf012bb80329bd9ab81c94b174f70a88ae330fdfc2d377a0955a45887a55c837c5fd03b262507b37143a2962e9ef15115c651fbf85a6ef412ab48b10f4ab906f8bfa0764c4a0f66e287452c5d3de2a22b8ca3f7f0b4dde8255691621e95720df17f40ec98941ecdc50e8a58ba7bc544571940b106f4893672d89f909faa6381c57e2c9d56e80d9ba45d24b174f79a88ae3271620de9126ce5b13f213f54c7038afc593aadd01b3748ba4962e9ef35115c64e2c41bd224d9cb627e427ea98e0715f8b2755ba0366e917492c5d3de6a22b8c9c58837a449b396c4fc84fd531c0e2bf164eab7406cdd22e9258ba7bcd445719383d194d360cd55b575d65d25b7823a6274999440a9ba60125b174f79b88ae326f0644f318f00d39668791ccaee6a574493f74e412374da64c62e9ef38115c64dd0c89e631e01a72cd0f23995dcd4ae8927ee9c8246e9b4c98c5d3de7022b8c9ba1913cc63c034e59a1e4732bb9a95d124fdd39048dd3699318ba7bce045719374322798c78069cb343c8e6577352ba249fba72091ba6d3263174f79c08ae326e8644f318f00d39668791ccaee6a574493f74e412374da64c62e9ef38115c64dd054b0bbcad809af88beffbdd4cb0cb1229adede43e9b66d8d5d3de7032b8c9b9f3573d0428675e1c94ac5a3a18c778a3fe2001884d36e7f1bba7bce075719373d6ae7a0850cebc392958b474318ef147fc4003109a6dcfe3774f79c0eae326e7a61e199b6f03a09dcf7dcb67e283c50fa3442be104dbba06fe9ef381e5c64dcf34fd58c1ab6d69671bc7f94f446d6c9ef14c7d81d9b78e4e0d3de703db8c9b9e52bbd70e2440faf9b45c551e0840bbbd8d5d20c3836f36dc2a7bce07c719373c9577ae1c4881f5f368b8aa3c1081777b1aba418706de6db854f79c0f8e326e7923b081c35e6a14124e3db6f7a068d175e038a8cdddbcf5b0b9ef381f2c64dcf2302229118a3a50501947d06ec037856b6b35775b8b7a05a183de703e68c9b9e4504452231474a0a0328fa0dd806f0ad6d66aeeb716f40b4307bce07cd19373c8a088a44628e94140651f41bb00de15adacd5dd6e2de816860f79c0f9a326e7914111488c51d28280ca3e837601bc2b5b59abbadc5bd02d0c1ef381f3464dcf2282229118a3a50501947d06ec037856b6b35775b8b7a05a183de703e68c9b9e4504452231474a0a0328fa0dd806f0ad6d66aeeb716f40b4307bce07cd19373c8a014b69ed5bfa3c31cec07e2f8d473d5a7821fca2ae8182a1079c0f9a426e7913f296d3dab7f478639d80fc5f1a8e7ab4f043f9455d0305420f381f3484dcf227e52da7b56fe8f0c73b01f8be351cf569e087f28aba060a841e703e6909b9e44fc31c74f5ad3809b9f2d053fbe99fcd536bd40ad5440c2f484ce07cd22373c89f7638e9eb5a701373e5a0a7f7d33f9aa6d7a815aa88185e9099c0f9a446e7913ee532f96182464f13480db26f25e517cd5a145114e030d7614381f3489dcf227db327184dd1f2c6520ce7c75dcb30121a5eecc7e99061c9029703e6914b9e44fb564e309ba3e58ca419cf8ebb96602434bdd98fd320c392052e07cd22973c89f6a55d86c215314173b06b7ff6ac262ae92677456611873e4a6c0f9a453e7913ed337c330ef7c8ab12dda3626cd7b23851f7b2b08bf30e96d4e81f348a8cf227da56f8661def915625bb46c4d9af6470a3ef656117e61d2da9d03e691519e44fb4a6b1f1c6ac88d476f359ec32de2ec3c7898ee7ef9c3a7593b07cd22a43c89f69362509182677d11963803ae53bc36a0ebde1f59f0875056770f9a45497913ed2550b37bb1a55ca5e43ccd849f6ecb69d268810fde0ea250ef1f348a93f227da492d795010211bce8046613136d3f4fb9f7d447bb91d4645df3e691528e44fb4915af2a02042379d008cc2626da7e9f73efa88f7723a8c8bbe7cd22a51c89f692241f798ed5ad1bcb8e64aecd346321678a1544ae1751abb7df9a454a4913ed24310018a878c05fc29995c019e82c254ebeeeaf1bfea371afcf348a94a227da4852003150f180bf85332b8033d0584a9d7ddd5e37fd46e35f9e691529444fb490a40062a1e3017f0a66570067a0b0953afbbabc6ffa8dc6bf3cd22a52889f692140c1eace93692640497a634ec0c70cf5a2399e9fc51ba7be89a454a5213ed2427183d59d26d24c8092f4c69d818e19eb44733d3f8a374f7d1348a94a427da484e307ab3a4da4990125e98d3b031c33d688e67a7f146e9efa2691529484fb4909c60f56749b4932024bd31a76063867ad11ccf4fe28dd3df44d22a52909f6921384dfd27403f88c301472976b8bd6b1d9ce5e0fbc21ba9628aa454a5223ed2426f280ca72d557408ba5b19156971346334780453813754691648a94a457da484dd50194e5aaae81174b6322ad2e268c668f008a7026ea8d22c9152948afb4909ba2c44f5622c32a5a1392a7d9dbb2fb4cc8c53aa01dd53485a22a52916f69213735889eac458654b427254fb3b765f699918a75403baa690b4454a522ded2426e63d262e35872d193cb1701e6ee31cfb2cdd910404754ec5698a94a45cda484dcb065eb517e4bcb5312fa664d5bc981e5467646405ea9f2ed4152948bab4909b950cbd6a2fc9796a625f4cc9ab79303ca8cec8c80bd53e5da82a5291756921372a197ad45f92f2d4c4be999356f26079519d919017aa7cbb5054a522ead2426e5432f5a8bf25e5a9897d3326ade4c0f2a33b23202f54f976a0a94a45d5a484dca865eb517e4bcb5312fa664d5bc981e5467646405ea9f2ed4152948bab4909b95057e8fba96df928ddc192c2af8961f28798cedcba53e77e83a52917579213729f3be44fffb254d4734febad5709220d09dde01571a7d0a1084a522eb02426e53d03daf8ac3b0c2b9e6c9d82a608a2420e680286e04fa2e61194a45d61484dca7907b5f1587618573cd93b054c1144841cd0050dc09f45cc232948bac2909b94f20f6be2b0ec30ae79b2760a9822890839a00a1b813e8b984652917585213729e41ed7c561d8615cf364ec153045121073401437027d17308ca522eb0a426e53c83daf8ac3b0c2b9e6c9d82a608a2420e680286e04fa2e61194a45d61484dca79007716e3437e7f68560767cb90aa669c7ac933806f45e6633948bac2a09b94f1f0ee2dc686fcfed0ac0ecf972154cd38f5926700de8bccc672917585413729e3e1dc5b8d0df9fda1581d9f2e42a99a71eb24ce01bd17998ce522eb0a826e53c7c3b8b71a1bf3fb42b03b3e5c855334e3d6499c037a2f3319ca45d61504dca78f803293bf054e1eb0dd42df388a0c4c4757575dc6c45e8073a48bac2a19b94f1ef065277e0a9c3d61ba85be711418988eaeaebb8d88bd00e74917585433729e3de0ca4efc15387ac3750b7ce22831311d5d5d771b117a01ce922eb0a866e53c7bc1949df82a70f586ea16f9c45062623ababaee3622f4039d245d6150cdca78f783293bf054e1eb0dd42df388a0c4c4757575dc6c45e8073a48bac2a19b94f1ef065277e0a9c3d61ba85be711418988eaeaebb8d88bd00e74917585433729e3de0566154c20edd462cd8430a20278f455809b9770e7a0372932eb0a867e53c7bbf38d50230f41d0f117d4c3c38457cb2aabfb54a19f40889275d6150d0ca78f77d71aa0461e83a1e22fa9878708af965557f6a9433e811124ebac2a1a194f1eefa6f666170a6d6befdc1f718d90c50f2a5ab178464d023c89e7585434429e3ddf36adf1b8e241000b350b459aa0f000d46027164c6a049353deb0a868953c7bbe561d08fc91e82841e6e2edb4c145e4286b125258a40940e7cd6150d13a78f77c94fb3783f13678af4a923de901f1aad080e8ca7118129c0faac2a1a284f1eef912b79492afd3198a11f0de5183493820ac95baa20025525f6585434519e3ddf2156f29255fa6331423e1bca306927041592b7544004aa4becb0a868a33c7bbe4239f77d58cb28e53c48fdbc58c8ac3025d1b1047d09563bda6150d14778f77c830001535e6cb44d305ec1a0a987b688464fa464f712ae1bb5c2a1a28ff1eef9050002a6bcd9689a60bd8341530f6d108c9f48c9ee255c376b8543451fe3ddf20a00054d79b2d134c17b0682a61eda21193e9193dc4ab86ed70a868a3fc7bbe414000a9af365a26982f60d054c3db442327d2327b89570ddae150d147f8f77c828001535e6cb44d305ec1a0a987b688464fa464f712ae1bb5c2a1a28ff1eef9050002a6bcd9689a60bd8341530f6d108c9f48c9ee255c376b8543451fe3ddf20a00054d79b2d134c17b0682a61eda21193e9193dc4ab86ed70a868a3fc7bbe414000a9af365a26982f60d054c3db442327d2327b89570ddae150d147f8f77c828001535e6cb44d305ec1a0a987b688464fa464f712ae1bb5c2a1a28ff1eef9050002a6bcd9689a60bd8341530f6d108c9f48c9ee255c376b8543451fe3ddf20a00054d79b2d134c17b0682a61eda21193e9193dc4ab86ed70a868a3fc7bbe414000a9af365a26982f60d054c3db442327d2327b89570ddae150d147f8f77c828001535e6cb44d305ec1a0a987b688464fa464f712ae1bb5c2a1a28ff1eef9050002a6bcd9689a60bd8341530f6d108c9f48c9ee255c376b8543451fe3ddf20a00054d79b2d134c17b0682a61eda21193e9193dc4ab86ed70a868a3fc7bbe41400035c18f06fcfab2189d1aebd33a814fccdebde5540ddc8551d147f8f87c827fff6b831e0df9f564313a35d7a675029f99bd7bcaa81bb90aa3a28ff1f0f904fffe631894c8ca4d4b1a4131d744e063672e2739f14d3773b948451fe3e2f209fffb5243823e6afd18ec4f29d681b724f656fab63e976ee916918a3fc7c6e413fff530995d29ac5cb4906b19d4fb64a814a8a1aed92bddd3d124147f8f8ec827ffe96132ba5358b96920d633a9f6c9502951435db257bba7a24828ff1f1d904fffd24e77cd5387d554f9792d7be588fe7a9d32fdc0ac7750e89151fe3e3c209fffa32901f353e60d2caabf211fc3085b1d35123ddd55eea37523a3fc7c79413fff455203e6a7cc1a59557e423f8610b63a6a247bbaabdd46ea4747f8f8f2827ffe8a301a25fc6e973562c94aa70417ca9ccef539d154ba8f788f8ff1f1e604fffd1360344bf8dd2e6ac592954e082f95399dea73a2a9751ef11f1fe3e3cc09fffa264c7af09e90bf5842f1f0c40855889b368129a14fea3f863f3fc7c79913fff44b250839e9f7e1333db0a7b008a16f5e67ae959e9cd480b07f7f8f8f3327ffe8954a1073d3efc2667b614f601142debccf5d2b3d39a90160feff1f1e664fffd12a20334054b5e74fae8f64e81a7c1ba1996698d670520465fefe3e3ccd9fffa253406680a96bce9f5d1ec9d034f8374332cd31ace0a408cbfdfc7c799b3fff44a60cdf59ffadffc1720a59c861e6ccae6046a5b5be48133bfcf8f8f3377ffe894b19beb3ff5bff82e414b390c3cd995cc08d4b6b7c902677f9f1f1e66efffd1296337d67feb7ff05c8296721879b32b9811a96d6f9204ceff3e3e3ccddfffa252c66facffd6ffe0b9052ce430f36657302352dadf24099dfe7c7c799bbfff44a585a07f8a7b65e99d87262ae1663290dff169db7e1813563d08f8f3378ffe894af402249fc431fb668b18b8424bcb043f8d97dcbc0026c6ba21f1e66f2ffd1295d0c56eca55ca1ef892fdd30416fbeafec5f3df37d04da7b453e3ccde6ffa252b918add94ab943df125fba6082df7d5fd8be7be6fa09b4f68a7c799bcdff44a572315bb2957287be24bf74c105befabfb17cf7cdf41369ed14f8f3379bfe894ae462b7652ae50f7c497ee9820b7df57f62f9ef9be826d3da29f1e66f37fd1295c851812302a0817b4aca992c0ef24926c0a02193cd4da95854e3ccde70fa252b8f2f149eb21765794d61f88015daf0757bec8583979b5454aac799bce2f44a571d5e293d642ecaf29ac3f1002bb5e0eaf7d90b072f36a8a9558f3379c5e894ae3a4864d37533f867ed54a8284f621ffdea5e586a5b6d52f6ac1e66f38cd1295c731cdbff973e53529276167896ba9e23cf68f330b3daa791593ccde71aa252b8e539b7ff2e7ca6a524ec2cf12d753c479ed1e66167b54f22b2799bce3544a571ca736ffe5cf94d4a49d859e25aea788f3da3ccc2cf6a9e4564f3379c6a894ae39472f25566c8fd174b7d79ecadcb4f4675f3dbe19bd53e2ecae66f38d61295c72771f7037a685cb14ec7ba01538cfcb4e693fa1f34aa7e0196ccde71ad252b8e4d70005fa1a71be5555c3a2a9f105791c7d4369a6654fda72e99bce35b4a571c996c1317f0249a4d62853a7d36170d4b8a54af90c9a9fcf25e3379c6b794ae39316438888d1f971d7cd73b22642478bf0f55a17d9053fb88bd66f38d70295c7261548369c71590bdb17b3c6cc03f4fa6195785571da7f8b57bcde71ae152b8e4c135192c3b0183fe1ac33f017874fd742d5b4d0a384ff30ef89bce35c3a571c9816a3258760307fc35867e02f0e9fae85ab69a14709fe61df1379c6b874ae3930260770998dc727b22d9c22dd9ca53f8b0197684de3fcddfe36f38d70f95c726034d006bde8f4778fd804a83ab8b06195adf2f65b97f9d63c7de71ae202b8e4c0526133069f4f174b2cd5b2f4f0c6a5ab06aa1276fff3c6b90bce35c41571c98094c2660d3e9e2e9659ab65e9e18d4b560d5424edffe78d72179c6b882ae393012245f1a54aa2855830232e534280792bc56c6f9bcfcf35243f38d71065c72602348be34a95450ab060465ca68500f2578ad8df379f9e6a487e71ae20cb8e4c0461d8ec1ff7f03d8c3d591bcc8967c72ec075e42f0f3ceed10ce35c41a71c9808b3b1d83fefe07b187ab2379912cf8e5d80ebc85e1e79dda219c6b8834e3930116024d60aad271e5c7230d1b1a504ff3aac9bb67c0cf3d584438d7106ac726022b049ac155a4e3cb8e461a3634a09fe7559376cf819e7ab08871ae20d58e4c0456093582ab49c7971c8c346c69413fceab26ed9f033cf56110e35c41ab1c9808ac126b0556938f2e391868d8d2827f9d564ddb3e0679eac221c6b883563930115824d60aad271e5c7230d1b1a504ff3aac9bb67c0cf3d584438d7106ac726022b049ac155a4e3cb8e461a3634a09fe7559376cf819e7ab08871ae20d58e4c045601f6a836172dbf480900cee8c0a5b12ad1b1c4c30cf57b50f35c41ab2c9808abf3ed506c2e5b7e9012019dd1814b6255a363898619eaf6a1e6b8835659301157e09bc6632a1d254ba0cf9e2281fca72af18b38cc03d60783dd7106acc26022afb1378cc6543a4a97419f3c4503f94e55e316719807ac0f07bae20d5984c0455f626f198ca874952e833e788a07f29cabc62ce3300f581e0f75c41ab309808abec4de331950e92a5d067cf1140fe539578c59c6601eb03c1eeb8835661301157d827d8bbd6f387ce589c644a79f30552ec377b2800d60927de7106acc36022afaf4fb177ade70f9cb138c894f3e60aa5d86ef65001ac124fbce20d5986c0455f5e2b754808a481bc1a3e5751dfc27373ab8a2efc005826437ac41ab30e808abebb56ea9011490378347caea3bf84e6e757145df800b04c86f58835661d01157d7639e778cf68697320c6236f77002bf6a8d4fe4bfe609ab1ec106acc3b022afaeb73cef19ed0d2e6418c46deee0057ed51a9fc97fcc13563d820d598760455f5d673b03bea78084f3ae553e5d3f70e029e003b8bf6826c6bb141ab30ed08abebab7372d081c673212d976df39fe47a2d36acb973ea04da7b63835661db1157d75572f7f9b06348c512fba20f37bf52826805b543d109b69ac806acc3b722afaea972024c0d9cf40cddc40a466775032ccab7ace39f136ed9910d59876f455f5d517016f0c8104a9c7354dab4c6e06481901b9c233b26df57231ab30edf8abebaa16c403a3cf6f7bb9e767b9185b7272b1ae37aa2734dc0524735661dc0157d75416492cd26c451f9f4b9bd4b0364ac7e307337a0e39b82488f6acc3b812afaea815537f2fa5f0676a14040bdfebfb7245b92b19dc43706351fd598770355f5d50136823ea1946f6ffa4d47a3f575cc70b1d1a597856e0e0e40ab30ee07abebaa016d047d4328dedff49a8f47eaeb98e163a34b2f0adc1c1c815661dc0f57d75402661b5333282042a101e4b7cdcd8feac1f2d8ba12b839dd03acc3b81fafaea8035848ff1326a307f9d08f9793917dfd7e91f3d02270755e08598770405f5d50053ca456d323a892ab6de5571f195a22f7d029fc41e0ec6011b30ee081bebaa009055b06531db3a80ea890d63629126dea4c965480c1da6424661dc1047d7540110ab60ca63b67501d5121ac6c5224dbd4992ca90183b4c848cc3b8208faea8022156c194c76cea03aa24358d8a449b7a9325952030769909198770411f5d500442ad83298ed9d40754486b1b148936f5264b2a4060ed3212330ee0823ebaa008855b06531db3a80ea890d63629126dea4c965480c1da6424661dc1047d7540110377323108cd7848cdee0eebd18abe5443f0cec153b4e288dc3b82090aea8021f6ee6462119af0919bdc1dd7a3157ca887e19d82a769c511b877041215d50043e69dee4ef09c094eb4849e2ec590dbd0ba8760c51ed3a46380ee08243baa0087b5fd0228ae9e3ac8e5d59edd0a879a211fd2e74a0da7630711dc10488754010f54bb29dc2aa29dbd4877a039947516c1ea69f453eb4ee04e33b820911ea8021e9237794322ab63a60dbba2f2a85010037f980e67a69ddadc777041224d50043d146ef2864556c74c1b7745e550a02006ff301ccf4d3bb5b8eee082449aa0087a219f0a975813b6c3b3baee4a20a6228da9245f5e6a7785b1edc10489454010f4333e152eb0276d876775dc94414c451b5248bebcd4ef0b63db8209128a8021e8667c2a5d604edb0eceebb92882988a36a4917d79a9de16c7b7041225150043d0c5b97a458e03de491aa3d4d08496f6ecf3e720b323bc47cf7e08244a3a0087a174341a15e96de4bdb2140c208893d059929267261778a9df0c10489484010f42d12959b6a041f1a6e0f47ac0908d8332cfe8f40bfef16dfe2820912918021e859252b36d4083e34dc1e8f581211b06659fd1e817fde2dbfc5041225230043d0b24a566da8107c69b83d1eb0242360ccb3fa3d02ffbc5b7f8a08244a460087a16420bf33fcf75b5628470388403d1fc162a0bc61fc78b8a3151048948d010f42c7417e67f9eeb6ac508e0710807a3f82c54178c3f8f171462a2091291a021e858e0f0f28a0b3cfdb58e8d448f8eadd2d852f33e3eee2e4305541225235043d0b1b1e1e5141679fb6b1d1a891f1d5ba5b0a5e67c7ddc5c860aa8244a46a087a16363c3ca282cf3f6d63a35123e3ab74b614bccf8fbb8b90c155048948d410f42c6c048b9db274e15d7f13686fbf4d47942425e17b74172326ab091291a921e858d709173b64e9c2bafe26d0df7e9a8f28484bc2f6e82e464d561225235243d0b1ae122e76c9d38575fc4da1befd351e50909785edd05c8c9aac244a46a487a1635c245ced93a70aebf89b437dfa6a3ca1212f0bdba0b919355848948d490f42c6b848b9db274e15d7f13686fbf4d47942425e17b74172326ab091291a921e858d701d860efb728e329a39d41fe19f50ac7f6871ca7fe4667962225235253d0b1adf3b0c1df6e51c653473a83fc33ea158fed0e394ffc8ccf2c444a46a4a7a1635be022a949aa09b4d20b416a77e73a0d9f84e0985fc919b89898948d495f42c6b7b0455293541369a41682d4efce741b3f09c130bf9233713131291a92be858d6f608aa526a826d3482d05a9df9ce8367e1382617f2466e262625235257d0b1adec1154a4d504da6905a0b53bf39d06cfc2704c2fe48cdc4c4c4a46a4afa1635bd822a949aa09b4d20b416a77e73a0d9f84e0985fc919b89898948d495f42c6b7b0455293541369a41682d4efce741b3f09c130bf9233713131291a92be858d6f6016b77f54fd35cae4d2700794de94a60e2ea3db2166e406635235257e0b1adebf2d6efea9fa6b95c9a4e00f29bd294c1c5d47b642cdc80cc6a46a4afc1635bd7e5addfd53f4d72b9349c01e537a529838ba8f6c859b90198d48d495f82c6b7afc41ce5354c010d9de6046649eeb03586c216135083721d71b91a92bf158d6f5f70faeff56568436748d52f135cc64d8d2ef04c60d6e455238235257e3b1adebed1f5dfeacad086ce91aa5e26b98c9b1a5de098c1adc8aa47046a4afc7635bd7da3ebbfd595a10d9d2354bc4d73193634bbc131835b91548e08d495f8ec6b7afb4098a535f8a84365c375db1a65984ee9224688c68722c35c21a92bf1e8d6f5f671314a6bf15086cb86ebb634cb309dd2448d118d0e4586b8435257e3d1adebece26294d7e2a10d970dd76c6996613ba4891a231a1c8b0d7086a4afc7a35bd7d9c4c529afc5421b2e1baed8d32cc277491234463439161ae10d495f8f46b7afb3824b78ea57ea5e87b42a1425d8ead111cf2cb228422c50022a92bf1e9d6f5f66f496f1d4afd4bd0f6854284bb1d5a2239e5964508458a00455257e3d3adebecde1ef09342d0fa24a4d74b316e31126c6e776ee60d8b15a48ba4afc7a85bd7d9bb3de12685a1f44949ae9662dc6224d8dceeddcc1b162b4917495f8f50b7afb37607d4a5b81a4b154b29f2edb0baa7d9b489fdf4332c58362f92bf1ea26f5f66eb0fa94b7034962a9653e5db61754fb36913fbe86658b06c5f257e3d44debecdd61f5296e0692c552ca7cbb6c2ea9f66d227f7d0ccb160d8be4afc7a89bd7d9bac3ea52dc0d258aa594f976d85d53ecda44fefa19962c1b17c95f8f5137afb3758095cb42e7b13d76a6bf50303a0dbc3434c219f2fc58506fa2bf1ea27f5f66eaf12b9685cf627aed4d7ea060741b7868698433e5f8b0a0df457e3d44febecdd5e2572d0b9ec4f5da9afd40c0e836f0d0d30867cbf16141be8afc7a89fd7d9babc4ae5a173d89ebb535fa8181d06de1a1a610cf97e2c2837d15f8f513fafb3757821dd9b94879ff95e8c165832041a5c2f6e5c4ef9585213a3bf1ea2805f66eaef43bb37290f3ff2bd182cb0640834b85edcb89df2b0a427477e3d4500becdd5de1388c6fef4e26831fd1f88c006c798b865b397e26149f28ffc7a8a027d9babbb27118dfde9c4d063fa3f11800d8f3170cb672fc4c293e51ff8f51404fb3757764e231bfbd389a0c7f47e23001b1e62e196ce5f898527ca3ff1ea2809f66eaeec285890a47d75c447b5c26df82c9aedbdd9df1b100a513880e3d45014ecdd5dd750b12148faeb888f6b84dbf05935db7bb3be362014a27101c7a8a029d9babbae2d749b3ecc3993d6a3cfdfd8a8c9def213bec83d294686048f514054b375775b5ae9367d987327ad479fbfb15193bde4277d907a528d0c091ea280a966eaeeb641e4c5a80748d2125c05a75a9985a3c2fb3d7cf1a51bbc133d450153cdd5dd6b0fdbe3fce4f426dc84d176ad29696f80a2bd55e04a391c277a8a02a89babbad51fb7c7f9c9e84db909a2ed5a52d2df01457aabc09472384ef5140551375775aa3f6f8ff393d09b721345dab4a5a5be028af5578128e4709dea280aa26eaeeb540af17893fe03b99bf351dd6141a9a3ffc22d0aff51ca853cd4501545dd5dd6a715e2f127fc077337e6a3bac2835347ff845a15fea3950a79a8a02a8bbabbad4e2bc5e24ff80ee66fcd47758506a68fff08b42bfd472a14f35140551775775a9c578bc49ff01dccdf9a8eeb0a0d4d1ffe116857fa8e5429e6a280aa2eeaeeb5383b29e1ecb69e1c7701e3fe0c10f867f6cf130bf21ca9f7ce4501545ed5dd6a6f02661c86439ebba5d08e2410184ef7e84a6873e13955939d8a02a8beabbad4dd04cc390c873d774ba11c4820309defd094d0e7c272ab273b1405517d5775a9ba099872190e7aee9742389040613bdfa129a1cf84e5564e76280aa2faaeeb53741330e4321cf5dd2e84712080c277bf4253439f09caac9cec501545f55dd6a6e82661c86439ebba5d08e2410184ef7e84a6873e13955939d8a02a8beabbad4dd04cc390c873d774ba11c4820309defd094d0e7c272ab273b1405517d5775a9ba025997a3dbe116c2bf04f2bfe0a1c220d465f544b55668b6380aa2fabeeb5373f4b32f47b7c22d857e09e57fc1438441a8cbea896aacd16c701545f57dd6a6e7e227841a3cea833678e02d7f01eceb02fc5bfad2a559bd18f02a8beb0bad4dcfb44f083479d5066cf1c05afe03d9d605f8b7f5a54ab37a31e05517d6175a9b9f615f35f3c1103505604d187b87198e8b9c34110a65670ea3d0aa2fac3eb5373eb2be6be782206a0ac09a30f70e331d1738682214cace1d47a1545f587d6a6e7d657cd7cf0440d415813461ee1c663a2e70d04429959c3a8f42a8beb0fad4dcfac3bad528d5e7d0567f35265bb83256dc8c64ae12fb388f5e95517d6205a9b9f57036cfdc7935c8d87b36af36efca9038c38d81e5c67138fd3aa2fac41b5373ead06d9fb8f26b91b0f66d5e6ddf952071871b03cb8ce271fa7545f58836a6e7d5a0db3f71e4d72361ecdabcdbbf2a40e30e36079719c4e3f4ea8beb106d4dcfab41b67ee3c9ae46c3d9b579b77e5481c61c6c0f2e3389c7e9d517d620da9b9f56836cfdc7935c8d87b36af36efca9038c38d81e5c67138fd3aa2fac41b5373ead06d9fb8f26b91b0f66d5e6ddf952071871b03cb8ce271fa7545f58836a6e7d5a06751ca91ad85e4a4a78303b7209f0b08e249f316c4e598eb8beb106e4dcfab3f5ab5edd0316e4c011bcc2f66379c3e0c70d6422a89ccd5d817d620dd9b9f567d417e344d393f1aba045e86c46596a4138deee052139b4fb12fac41bc373eacf90f0ec14748e0b82bd5833580c18b7021c8201ca1273843635f5883796e7d59f11e1d828e91c17057ab066b018316e043904039424e7086c6beb106f2dcfab3e23c3b051d2382e0af560cd603062dc087208072849ce10d8d7d620de5b9f567c4048862e71d68441678dfd3fe02b9a908ed43410639c3bf1bfac41bcc73eacf870910c5ce3ad0882cf1bfa7fc05735211da86820c73877e37f5883798e7d59f0e12218b9c75a11059e37f4ff80ae6a423b50d0418e70efc6feb106f31cfab3e1c24431738eb4220b3c6fe9ff015cd48476a1a0831ce1df8dfd620de639f567c3848862e71d68441678dfd3fe02b9a908ed43410639c3bf1bfac41bcc73eacf8701d1eb590836b0586e8c0a7b84d93491854aa7cc4387987805883798f7d59f0df3a3d6b2106d60b0dd1814f709b269230a954f98870f30f00b106f31efab3e1be008d2eeee40e98d36fc8c6d92cab4c5bfeec4f0de1e7c202620de63ef567c37b011a5dddc81d31a6df918db2595698b7fdd89e1bc3cf8404c41bcc7deacf86f60234bbbb903a634dbf231b64b2ad316ffbb13c37879f0809883798fbd59f0dec046977772074c69b7e4636c9655a62dff762786f0f3e1013106f31f7ab3e1bd808d2eeee40e98d36fc8c6d92cab4c5bfeec4f0de1e7c202620de63ef567c37b011a5dddc81d31a6df918db2595698b7fdd89e1bc3cf8404c41bcc7deacf86f60234bbbb903a634dbf231b64b2ad316ffbb13c37879f0809883798fbd59f0dec046977772074c69b7e4636c9655a62dff762786f0f3e1013106f31f7ab3e1bd8019414790e4fb5627958d0124a1aa83f9989169dee7c3a6630de63ef667c37aff32828f21c9f6ac4f2b1a0249435507f33122d3bdcf874cc61bcc7deccf86f5fe65051e4393ed589e5634049286aa0fe66245a77b9f0e998c3798fbd99f0debfc561c9533fe3d33f4792e311d03b247c770cdaaf43e1ed7196f31f7b43e1bd7f7384b8314d2dceaa0bf228a31fdc2b7898dddb1e57c3f5233de63ef697c37afed70970629a5b9d5417e451463fb856f131bbb63caf87ea467bcc7ded2f86f5fda6d40650021d62d3ac95050bfed690620e3b92392f0feecd0798fbda6f0debfb3669322ad1a0edd2d5f66c977d130343c73b4a322e1ff7da1f31f7b4ee1bd7f6559389e070a803d128b93bae798be907393aba242c4009f44e63ef69ec37afec93e8394baeb62fcdce3ed9dc727db48e1d399a0828802e28acc7ded3e86f5fd9109198222ad287c7194a163864614b9be53759d021007691698fbda7e0debfb21123304455a50f8e32942c70c8c29737ca6eb3a04200ed22d31f7b4fc1bd7f6422466088ab4a1f1c652858e191852e6f94dd67408401da45a63ef69f837afec8448cc11156943e38ca50b1c3230a5cdf29bace810803b48b4c7ded3f06f5fd9081daa7ad7a8ea49d116dc605c57a9c3dfe39c2c1e0078356a8fbda7e1debfb20f3b54f5af51d493a22db8c0b8af5387bfc738583c00f06ad51f7b4fc3bd7f641e02bc440b7a0ba9fc2837a9695505377a3ab30c7501e279ab3ef69f887afec83b05788816f41753f8506f52d2aa0a6ef4756618ea03c4f3567ded3f10f5fd90760af1102de82ea7f0a0dea5a55414dde8eacc31d40789e6acfbda7e21ebfb20ec15e2205bd05d4fe141bd4b4aa829bbd1d59863a80f13cd59f7b4fc43d7f641d82bc440b7a0ba9fc2837a9695505377a3ab30c7501e279ab3ef69f887afec83b05788816f41753f8506f52d2aa0a6ef4756618ea03c4f3567ded3f10f5fd907603b235b8b594d01c1dab0824d37ac06895905793d78a00ed0bda7e21fbfb20ebf02590fc388fc863b82272c9265b6350d5e4d4e77f141c1a27b4fc4407f641d7d04b21f8711f90c77044e5924cb6c6a1abc9a9cefe2838344f69f8880fec83afa09643f0e23f218ee089cb24996d8d435793539dfc5070689ed3f1101fd9075f412c87e1c47e431dc113964932db1a86af26a73bf8a0e0d13da7e2203fb20ebe82590fc388fc863b82272c9265b6350d5e4d4e77f141c1a27b4fc4407f641d7d04b21f8711f90c77044e5924cb6c6a1abc9a9cefe2838344f69f8880fec83afa02256498f1584119856914c9163eb6b523f95f9f950720c9fd3f11020d9075f3f44ac931e2b082330ad229922c7d6d6a47f2bf3f2a0e4193fa7e22041b20ebe7e156b7ee92c72c919270b5a3d860bd543aa9a43e241c9d6804fc44084641d7cfb2ad6fdd258e592324e16b47b0c17aa87553487c48393ad009f888108c83af9f655adfba4b1cb24649c2d68f6182f550eaa690f8907275a013f1102119075f3ec376e4ff639f8cb810520f9e426bcd21801147b0f0e5058037e22042420ebe7d76edc9fec73f197020a41f3c84d79a4300228f61e1ca0b006fc44084841d7cfae69cb9885be45b0bbe14a0f889151705ab09448393943040ef888109183af9f5b5fa989b852ede42f8f5a4709190108b00d6aec6f7287ac1ef1102124075f3eb54b656c1d7c3e4b16eb7ab60a2860395ac71834dbe510fc3ee22042490ebe7d6922dd30e7cedf18e5a3bb940c471e9ab03a72c5b4ca239c7ec44084931d7cfad145ba61cf9dbe31cb477728188e3d356074e58b69944738fd888109263af9f5a217871c4c11dee64e5bb4782912d892bb960d72d0289015fc1102124d75f3eb432f0e389823bdcc9cb768f05225b125772c1ae5a051202bf82204249aebe7d6865e1c7130477b99396ed1e0a44b624aee5835cb40a24057f044084935d7cfad0c484b3b0d6559b52aaa69e9408d22bdd75cadf27e448253e18810926caf9f5a171ca8cec7a115ed0d2199fa7910a3a3a9659e40f989064bc4102124da5f3eb42d39519d8f422bda1a4333f4f221474752cb3c81f3120c9788204249b4be7d685a72a33b1e8457b4348667e9e4428e8ea5967903e624192f10408493697cfad0b47158cee9df11eb20d995fbc07b7b4545d93463c948340221810926d3f9f5a1676ec3f680948658f97ff21f78ed54b2865eab238f9069a84402124da8f3eb42cd699a45adff6f34aaccaa66e9d1078d076998a31c20d4f48904249b52e7d685995f46e408d540ec0d661af5cb986d42097f73a23541ab8d13084936a6cfad0b314aa020be80e45ad298fc138f2738ac0dab29a0678358be2710926d4e9f5a166121529a29d82b385cfebe4f1644cf801602959ccc06b3204f2124da9e3eb42cc142a53453b05670b9fd7c9e2c899f002c052b39980d66409e4249b53c7d685982115cc154370f642bc7bf6451099c2852b698cf2d1ace253d84936a79fad0b30322b982a86e1ec8578f7ec8a2133850a56d319e5a359c4a7b0926d4f3f5a1660645730550dc3d90af1efd91442670a14ada633cb46b3894f6124da9e7eb42cc0c16f8634e8edda4160ac14a80433f6a906108d565d672cded249b53d0d68598172df0c69d1dbb482c15829500867ed520c211aacbace59bda4936a7a1ad0b302e5be18d3a3b7690582b052a010cfdaa418423559759cb37b4926d4f435a16605c43d573214d4fa36822d07bfa10597c7db489072bb398136a24da9e87b42cc0b713bd3eef7101c98812671fec171120f615546a546731cad549b53d106859816d277a7ddee203931024ce3fd82e2241ec2aa8d4a8ce6395aa936a7a20d0b302da4ef4fbbdc4072620499c7fb05c4483d85551a9519cc72b5526d4f441a16605b429fc50285e70cef85fff2758aee72fab56e5aea0398ffaab4da9e88442cc0b6753f8a050bce19df0bffe4eb15dce5f56adcb5d40731ff5569b53d108859816ce3403994e5025be994cc2c55ab1fae6a807d9167de6418eae36a7a2120b302d9b6807329ca04b7d3299858ab563f5cd500fb22cfbcc831d5c6d4f442416605b365c20bde616f97d1cffd13d62be49c29acba6b5f49907deb9da9e88492cc0b66b4453d47904557cf1cc68a2bd72f1ad30438fc7e632116174b53d109359816cd514ba019edf0d7c9b65976d72dc41825b3361ebc9642466ea6a7a2127b302d9a92974033dbe1af936cb2edae5b88304b666c3d792c848cdd4d4f4424f6605b35252e8067b7c35f26d965db5cb7106096ccd87af2590919ba9a9e8849ecc0b66a431e265a3cece6792f981938ed86a3ad44751ba482124db5453d1093e9816cd4763c4cb479d9ccf25f303271db0d475a88ea374904249b6a8a7a2127d302d9a8e539bef3c119c2103b2cc76335807134bc989451d849511524f4424fb605b351b334a3724f99ac4bf325f145ea66c4e923f54e638092bc6a59e8849f7c0b66a3566946e49f335897e64be28bd4cd89d247ea9cc7012578d4b3d1093ef816cd46a593b3540bccd95b496427972900f6243a995f4dd24b0be977a2127e002d9a8d33e88c32e4ffdae20f94b1add167cec81ff6e45b74963212ff4424fc105b351a50923df09765ddef9bf5c5db2235800feab1ee76b92c7e660e8849f830b66a3491247be12ecbbbdf37eb8bb6446b001fd563dced7258fccc1d1093f0616cd4692248f7c25d9777be6fd7176c88d6003faac7b9dae4b1f9983a2127e0c2d9a8d24491ef84bb2eef7cdfae2ed911ac007f558f73b5c963f33074424fc185b351a481e5049443c407253c28c031a2bde37e55e30d2b62c800a0f8849f831b66a348f3ca092887880e4a78518063457bc6fcabc61a56c5900141f1093f0636cd4691e05537dbdc7644c06d6f63460a5d707902505a6d5b201cc3f2127e0c7d9a8d23b0aa6fb7b8ec8980dadec68c14bae0f204a0b4dab6403987e424fc18fb351a476154df6f71d91301b5bd8d182975c1e4094169b56c80730fc849f831f66a348ec2a9bedee3b226036b7b1a3052eb83c81282d36ad900e61f9093f063ecd4691d85537dbdc7644c06d6f63460a5d707902505a6d5b201cc3f2127e0c7d9a8d23b036821065c2ec0392ab8cb40cb13f19ff4cf736b3403b2be524fc18fc351a475f6d0420cb85d8072557196819627e33fe99ee6d66807657ca49f831f86a348ebe661a9a43e21291027af8f82abb5a8ff7e01f36ca00ee539593f063f1d4691d7b58478d349a87a4bcc2b8184d6d1347ea6c80c99101de4b2c27e0c7e4a8d23af53ca173160b71cc3152365892d084b7cf8543ef1f03be3a594fc18fca51a475e905553ed8ed461b1a7132d91d97679799b6ca3a3b077e18b39f831f95a348ebd10aaa7db1da8c3634e265b23b2ecf2f336d9474760efc31673f063f2b4691d7a21554fb63b5186c69c4cb64765d9e5e66db28e8ec1df862ce7e0c7e568d23af442aa9f6c76a30d8d38996c8ecbb3cbccdb651d1d83bf0c59cfc18fcad1a475e885553ed8ed461b1a7132d91d97679799b6ca3a3b077e18b39f831f95a348ebd1036ba33ca7f25e605f3214baae3511b318589a35defc4ba74f063f2b5691d7a1f6d746794fe4bcc0be6429755c6a236630b1346bbdf8974e9e0c7e56ad23af43e66fb27d6d2fa1acf994b56a383a294c0c268e974bf148dd4c18fcad6a475e87b5a08a85a7c56b856ff5cd53efda3517c31142ee67e2abfaa831f95ae48ebd0f54023a961cf0ff365cb7fd275f1a4caf30e6ab9c9fc572356063f2b5d91d7a1e90c59ab707482698363c5cce3d9a7bde0c917cf90f8afeaad0c7e56bc23af43d118b356e0e904d306c78b99c7b34f7bc1922f9f21f15fd55a18fcad78475e87a23166adc1d209a60d8f17338f669ef783245f3e43e2bfaab431f95af08ebd0f4462cd5b83a4134c1b1e2e671ecd3def0648be7c87c57f556863f2b5e11d7a1e8851ad0fb41e891aee0922f63590da06073dbf550c8b004ed1c7e56bc33af43d0f2f6c78151374b893df0c14631812340927c10616160241a48fcad78775e87a1d5ed8f02a26e97127be1828c6302468124f820c2c2c0483491f95af0eebd0f43a49c439012435650748f6798456a6f81f4b467455580aaa933f2b5e1ed7a1e8731f9acaaf1ecd4cc65eb31b00a3ac183942cf44a7b016f9277e56bc3eaf43d0e53f35955e3d9a998cbd66360147583072859e894f602df24efcad787d5e87a1ca0a7d83695197b5d1479293fa850e88dfb77f6e9bc05d889ef95af0fbbd0f439314fb06d2a32f6ba28f2527f50a1d11bf6efedd3780bb113df2b5e1f77a1e872629f60da5465ed7451e4a4fea143a237eddfdba6f0176227be56bc3eef43d0e4c53ec1b4a8cbdae8a3c949fd4287446fdbbfb74de02ec44f7cad787dde87a1c9833ea8f41efdddfcc45ef67a04746b5f6243945b905da2df095af0fbcd0f4392f67d51e83dfbbbf988bdecf408e8d6bec48728b720bb45be12b5e1f79a1e8725e5bbc95b495da01e8e483c6791378ffd33d2772e1176a5bc356bc3ef443d0e4bb438b84160216868995cdb4ea1d5027a1269141bf2ed65b87ad787de987a1c975132960d8da8f8fcaf86191cc30fe773cf964df7b5dae5b105af0fbd40f4392e92652c1b1b51f1f95f0c3239861fcee79f2c9bef6bb5cb620b5e1f7a81e8725d24ca583636a3e3f2be1864730c3f9dcf3e5937ded76b96c416bc3ef503d0e4ba4255d5f73aadf010f8fd2b6597e51e1e2776957d7ed747c83d787dea17a1c97474ababee755be021f1fa56cb2fca3c3c4eed2afafdae8f907af0fbd42f4392e8e2187d67b81de86f60c11015defa5af8489e7bb5cb5d396105e1f7a86e8725d1b430facf703bd0dec182202bbdf4b5f0913cf76b96ba72c20bc3ef50dd0e4ba361231b29adddc9e8ffd0a2d6fb4f4e60cd3e1496fd74ffc42787dea1ca1c9746b24636535bbb93d1ffa145adf69e9cc19a7c292dfae9ff884f0fbd4394392e8d648c6ca6b77727a3ff428b5bed3d398334f8525bf5d3ff109e1f7a8728725d1ac1d9fed83c5477737b51793759e0558614b4ca77bba818614c3ef50e60e4ba3573b3fdb078a8eee6f6a2f26eb3c0ab0c296994ef775030c2987dea1cc1c9746ae02920ebbeb805f96a12475ce6e73897fd974f9ebea07bc540fbd4399392e8d5b05241d77d700bf2d4248eb9cdce712ffb2e9f3d7d40f78a81f7a8732725d1ab60a483aefae017e5a8491d739b9ce25ff65d3e7afa81ef1503ef50e64e4ba356c149075df5c02fcb50923ae73739c4bfecba7cf5f503de2a07dea1cc9c9746ad82920ebbeb805f96a12475ce6e73897fd974f9ebea07bc540fbd4399392e8d5b05241d77d700bf2d4248eb9cdce712ffb2e9f3d7d40f78a81f7a8732725d1ab60309607a7b67a686015e39b93934087f10980d6f781f0b904ef50e64f4ba356bf612c0f4f6cf4d0c02bc7372726810fe21301adef03e17209dea1cc9e9746ad7e4e6a774bb04c243824549646436047bed245b7db07c48814bd43993e2e8d5afb28e7474436facb28156f54847d1eb77850cdcbb30f8ab42a7a87327d5d1ab5f551ce8e886df596502adea908fa3d6ef0a19b97661f156854f50e64faba356bea2faf75bdb24daf5822837a09ead905dbef798ac93e2c74aaea1cc9f6746ad7d35f5eeb7b649b5eb04506f413d5b20bb7def315927c58e955d43993ece8d5afa64ad02fa39f99401856d4101fa1c23f6a6a288721f8b376aca87327dad1ab5f4b21b2b7f4159502e87a6e483739e2a6cf80936a40f168915a50e64fb6a356be9543656fe82b2a05d0f4dc906e73c54d9f0126d481e2d122b4a1cc9f6d46ad7d2a12dd387d2cb68e59b67f48d4dde8c338ae900500c5a3e96a43993edb8d5afa5325ba70fa596d1cb36cfe91a9bbd186715d200a018b47d2d487327db71ab5f4a64b74e1f4b2da3966d9fd235377a30ce2ba401403168fa5a90e64fb6e356be94c22fc1c963c16f58580c06e9ee5a441c020c284032d20ef531cc9f6dd6ad7d29745f8392c782deb0b0180dd3dcb488380418508065a41dea63993edbad5afa52e1802cb05c6be58cdcfc7e2738cef2efb2f4c6c09b485614d7327db76ab5f4a5b3005960b8d7cb19b9f8fc4e719de5df65e98d813690ac29ae64fb6ed56be94b6600b2c171af963373f1f89ce33bcbbecbd31b026d2158535cc9f6ddaad7d296c4c28b0db0c5549264b053b945dd79fd426a5bc4aa42cae6c993edbb65afa52d72463ba62ef0d150462d09f20b20d67a2f98dd492485b00da327db76db5f4a5ad48c774c5de1a2a08c5a13e41641acf45f31ba92490b601b464fb6edb6be94b5a1da142389296d6c95808a47abe93c6869279ae46216da769c9f6ddb7d7d296b33b428471252dad92b01148f57d278d0d24f35c8c42db4ed393edbb6fafa52d660297618f20bddddd2ce8b9e2f0ad4214f629151585b841a827db76e05f4a5acb052ec31e417bbbba59d173c5e15a8429ec522a2b0b7083504fb6edc0be94b5960a5d863c82f77774b3a2e78bc2b50853d8a4545616e106a09f6ddb817d296b2c14bb0c7905eeeee96745cf17856a10a7b148a8ac2dc20d413edbb702fa52d658297618f20bddddd2ce8b9e2f0ad4214f629151585b841a827db76e05f4a5acb052ec31e417bbbba59d173c5e15a8429ec522a2b0b7083504fb6edc0be94b596031eabc7505d9fa0306f4a0b421aead383687a15e6e120e0af6ddb818d296b2bf63d578ea0bb3f4060de94168435d5a706d0f42bcdc241c15edbb7031a52d657e53bd4a80edca6ac3e898aac87d18dcdb8660e176b849dc2cdb76e0644a5acafb338cedaeb1f7583f9df77d88f08fe1b1b9041eea70955c5ab6edc0c994b595f56719db5d63eeb07f3beefb11e11fc36372083dd4e12ab8b56ddb8193296b2bea5a460f679e3fe3b644a41e1bb89daec19052d7a6c257156bdbb7032752d657d3409e777c12e24a24560e642f6799857dcce80b4a84afced8b76e064fa5acafa50d4f47a4fc27170078e2f056c59132f646127292096141b26edc0ca04b595f491a9e8f49f84e2e00f1c5e0ad8b2265ec8c24e52412c28364ddb8194096b2be92353d1e93f09c5c01e38bc15b1644cbd91849ca48258506c9bb7032812d657d246a7a3d27e138b803c71782b62c8997b2309394904b0a0d9376e065025acafa486106d2fc98d3f2bf5af52d644f71575f0d69851d9615bf27edc0ca05b595f48f4e1ffea6080a683682b082c09540d6b8c71566382c2d2250db81940c6b2be91d285255f8e6775324d2272d7920dfd56c3a6d286d585be8a2b7032819d657d23950a4abf1cceea649a44e5af241bfaad874da50dab0b7d1456e065033acafa4722d5bb090703fcf4b1562dddc79dd7dab95f6fdb26171468bdc0ca068595f48e35ab76120e07f9e962ac5bbb8f3bafb572bedfb64c2e28d17b81940d0b2be91c641811aee9761bfe422519f69ddd41ea9041e52c685c6be30703281a2657d238b0f148e8a05260280116966cbb206654cb47f018a0b8f2061e0650345cafa47151e291d140a4c050022d2cd97640cca9968fe0314171e40c3c0ca068b95f48e2a3c523a2814980a0045a59b2ec8199532d1fc06282e3c818781940d172be91c5404b6ccfcff9296b858115e5586915260503a684d5c7aa71003281a2f57d238a7096d99f9ff252d70b022bcab0d22a4c0a074d09ab8f54e200650345eafa4714e12db33f3fe4a5ae1604579561a45498140e9a13571ea9c400ca068bd5f48e29c25b667e7fc94b5c2c08af2ac348a930281d3426ae3d538801940d17abe91c5384b6ccfcff9296b858115e5586915260503a684d5c7aa71003281a2f57d238a7022ebf84cc8b559c2cef1f2a8c8887404b38f65a88f568601650345ebfa4714df45d7f099916ab3859de3e5519110e809671ecb511ead0c02ca068bd7f48e29be17c239dff937e9c3088df29b187ff80d7a7ff29f3d5bbc06940d17b0e91c537b2f8473bff26fd386111be53630fff01af4ffe53e7ab7780d281a2f61d238a6f65f08e77fe4dfa70c2237ca6c61ffe035e9ffca7cf56ef01a50345ec3a4714dec4a2427aca021d0d01135bcd0ba5de8668041f0f6eadf8435a068bd8848e29bd7205aa80616a62457ef31a1996b19f8c7acc63dead5c0ac6c40d17b1191c537ad40b5500c2d4c48afde634332d633f18f598c7bd5ab8158d881a2f623238a6f5a0d7cf8c530fb1417898cae5da2c60b195f5b53a8570455b20345ec474714deb31af9f18a61f6282f13195cbb458c1632beb6a750ae08ab64068bd88e8e29bd6635f3e314c3ec505e2632b9768b182c657d6d4ea15c1156c80d17b11d1c537acc6be7c62987d8a0bc4c6572ed163058cafada9d42b822ad901a2f623a38a6f59863e1e4ffe613c43065910dd222bed990a1f796827046ff21345ec475714deb2f53d622aca28a0b1897e8439c3bdbdb1bf0318901e08fa24368bd88ebe29bd65d33be9e061b7698e8fc96af306e15de328ca56e00c120e887d17b11d8c537acb9677d3c0c36ed31d1f92d5e60dc2bbc65194adc018241d10fa2f623b18a6f59725b0cd0c5443ce65bbf20e4b9aeb5a0c4ded814000485462045ec476414deb2e3422bfa375edc4f6f4b07f16b53c9698469f283fd090c30418bd88ec929bd65c5106a4d1b941b219662d60ace9df0fb03802763f7121a048417b11d93537acb8920d49a372836432cc5ac159d3be1f607004ec7ee243409082f623b26a6f5971241a9346e506c86598b582b3a77c3ec0e009d8fdc486812105ec4764d4deb2e240f64c189773b8f6ae3767e6ce5e60016ad7d7bb590d1c821bd88ec9b9bd65c471ec98312ee771ed5c6ecfcd9cbcc002d5afaf76b21a390437b11d93737acb88e3d930625dcee3dab8dd9f9b39798005ab5f5eed643472086f623b26e6f59711c073864f8903efe0ee87a1b5f258e28b0182e39a9868fe50eec4764dddeb2e2370e70c9f1207dfc1dd0f436be4b1c5160305c73530d1fca1dd88ec9bbbd65c46e1ce193e240fbf83ba1e86d7c9638a2c060b8e6a61a3f943bb11d93777acb88dc39c327c481f7f07743d0daf92c714580c171cd4c347f2877623b26eef59711b873864f8903efe0ee87a1b5f258e28b0182e39a9868fe50eec4764dddeb2e2370731ef7bede424494dc0993dca8233dfdb209912dd1fe45de88ec9bbcd65c46df7250482a92e70be184d94fb146a4a3f610557e58a3fe2fbe11d9377aacb88dbd70b2e901fc309a7ad678c75a83a76fe6cced58ae47fe037d23b26ef659711b796d782ab0cec3b7ad79b7b6acfdad07c8461d0d598ffdaafb4764ddedb2e236f16702ae0e73e9f212c0359551f1b8378b387c76b01ffcf9f78ec9bbdc65c46de15a17b4c9be3666dd4d31529bd9ce97111d3b495d3ffb97f01d9377b9cb88dbc14041c24052cf50726728cd2fa9fb561ce6b8eeb77ff8d3e13b26ef749711b7810c95dd2d7c01239c9b17c2574a54d43479b4396bfff34bc3764ddeea2e236f01192bba5af8024739362f84ae94a9a868f36872d7ffe69786ec9bbdd45c46de02325774b5f0048e726c5f095d295350d1e6d0e5afffcd2f0dd9377ba8b88dbc0464aee96be0091ce4d8be12ba52a6a1a3cda1cb5fff9a5e1bb26ef751711b780855702b849674bc817e424d6c9bab6b424785f2bcff36603864ddeea3e236f00f36f2afb6034bfbbac94ac2d12db4fe7f3b4e4176fe6e6471c9bbdd48c46de01d6de55f6c0697f775929585a25b69fcfe769c82edfcdcc8e39377ba9188dbc03a67dd1784e39271a2f1f1333cad3221f7997b61d8f9bb35c826ef752411b780735bcc87b69d8765fdb0a88e7150c26be9df391faef3780f914ddeea49236f00e543ab681a11714eb32e1744da97e2ffce6ab49b5ae6f1c3239bbdd49346de01c9136928e0f945201e28f4b1ad2624279781ab92b2cde52a48377ba9278dbc039126d251c1f28a403c51e9635a4c484f2f035725659bca54906ef7524f1b7807224da4a383e5148078a3d2c6b498909e5e06ae4acb3794a920ddeea49e36f00e44275b9fb4a08b83a9146bb561277f64b6b99ef1936f2af642bbdd493d6de01c874eb73f694117075228d76ac24efec96d733de326de55ec8577ba927adbc0390e2980d77f5890915c1e74fd7c945bbad592be224abcad7d0bef7524f6b780721b5301aefeb12122b83ce9faf928b775ab257c4495795afa17deea49ed6f00e4363215b6aa38a4c828469a1dea47cd1350f73ae527f2b79830bdd493dbde01c86b642b6d54714990508d343bd48f9a26a1ee75ca4fe56f30617ba927b7bc0390d654693355b8f5a358e72e9fa11592753e892df09ccae004c3f7524f70780721ab34e4bf58484dc9699b23673a21831277be9e3d3695c1ad88eea49ee1f00e435569c97eb0909b92d33646ce74430624ef7d3c7a6d2b835b11dd493dc3e01c86aa5fa5560df799a85e3953c4e07c6a71d9a6bb50d757085a24ba927b88c0390d534b5d04c8c595d3743f6db1b8ef330badf9b8fdabae12584a7524f71280721aa522cc623e618e29a04ba18b69d4c43f569fb457545c265495ea49ee2600e435494598c47cc31c5340974316d3a9887ead3f68aea8b84ca92bd493dc4c01c86a921743e1a65c9b2938fb4c559f496f25552b13b94e709af658a927b8990390d5232e87c34cb9365271f698ab3e92de4aaa5627729ce135ecb1524f71320721aa465d0f8699726ca4e3ed31567d25bc9554ac4ee539c26bd962a49ee2640e43548c463165dfbb3bcc7fa728d4f241d752a404e0267084d956c6493dc4c91c86a9171875246c4cda1bb71b17d1dc7a0ccd42b602a8de09b4518d927b8993390d522d30ea48d899b4376e362fa3b8f4199a856c0551bc1368a31b24f71326721aa45a61d491b133686edc6c5f4771e833350ad80aa37826d1463649ee264ce43548b44fbb7c0f3d336070a584b6dbc6c492105c57a2ed4da4306d93dc4c9ac86a91672b8950cb50c9439917cf95af83e74c1b64f1a1d79b4a04dc27b8993690d522cd5712a196a19287322f9f2b5f07ce9836c9e343af369409b84f71326d21aa459a3a379bda1987911c2c047eb605fb58684008e35b6d29b7719ee264db43548b33008190610971a4f024cf25640254d8cb2c5422b3da5512e43dc4c9b786a91665010320c212e349e0499e4ac804a9b19658a84567b4aa25c87b89936f0d522cca0206418425c693c0933c95900953632cb1508acf69544b90f71326de1aa45994040c83084b8d278126792b2012a6c65962a1159ed2a89721ee264dbc3548b32808190610971a4f024cf25640254d8cb2c5422b3da5512e43dc4c9b786a91665010320c212e349e0499e4ac804a9b19658a84567b4aa25c87b89936f0d522cca0206418425c693c0933c95900953632cb1508acf69544b90f71326de1aa45994040c83084b8d278126792b2012a6c65962a1159ed2a89721ee264dbc3548b32800da2b9b6480772dc9beb8bfa4b36f32700650fd75514883ec4c9b787a91664ff1b45736c900ee5b937d717f4966de64e00ca1faeaa29107d89936f0f522cc9fe368ae6d9201dcb726fae2fe92cdbcc9c01943f5d545220fb1326de1ea45993fc6d15cdb2403b96e4df5c5fd259b7993803287ebaa8a441f6264dbc3d48b327f8663df41156d9b0818b7ee79ca9cd5a6ab2935972514a27ed4c9b787b91664fef588e40cf8415e3bae3c3f73149f8dcd011690ee1a295f3db9936f0f822cc9fdd3d2eda4bde8e4a2d944e165a8a4fe19acf1479c0452d8bb8326de1f145993fb906700d44937f1712f56254ad0afdeb304a6b4f7d8a5cbb7164dbc3e38b327f710ce01a8926fe2e25eac4a95a15fbd66094d69efb14b976e2c9b787c71664fee219c035124dfc5c4bd58952b42bf7acc129ad3df62972edc5936f0f8e2cc9fdc433806a249bf8b897ab12a56857ef5982535a7bec52e5db8b26de1f1c5993fb886700d44937f1712f56254ad0afdeb304a6b4f7d8a5cbb7164dbc3e38b327f7105a14013f464565167910bd99561b8e03f9ac4bae4b99122d9b787c72664fee1f403a5b2b62ed4ce4bee7a32aa29544029f9af3599733c85c36f0f8e5cc9fdc3d0c870f039c3d1c814a956e4d3b88afffeb7842b02e6934b96de1f1cc993fb879190e1e07387a3902952adc9a77115fffd6f085605cd26972dbc3e399327f70f2321c3c0e70f472052a55b934ee22bfffade10ac0b9a4d2e5b787c73264fee1e46438781ce1e8e40a54ab7269dc457fff5bc215817349a5cb6f0f8e64c9fdc3c8548348e69a344acc761d0ccbaee927f963c686ffe694ef97de1f1cca93fb878f3518ea7a0acb1850b900418f543077ed73cf69fccd2b8330bc3e399627f70f1d6a31d4f4159630a17200831ea860efdae79ed3f99a570661787c732c4fee1e3a60760295018ee3fab0c72e35472007b07b8003f034afb0c3f0f8e6599fdc3c734cfe5dd6d9804aad2e548462849e375ba34263dd69610588e1f1ccb43fb878e5260f145a89631812296f30bcff9a96b1f2c723b7d2c3af12c3e399697f70f1c94c1e28b512c6302452de6179ff352d63e58e476fa5875e2587c732d2fee1e392244eaa16fbeee3007282eaebf4c882c2775eeadc4b10604c0f8e65a6fdc3c723489d542df7ddc600e505d5d7e9910584eebdd5b89620c0981f1ccb4dfb878e461d4d0108c61e0eb996d1d3a7c980330489be076e2c4325313e39969cf70f1c8b3a9a02118c3c1d732da3a74f93006609137c0edc58864a627c732d39ee1e391601465ccfeedabd9e280d76971c5ef40cd33a79b5b10e38c5f8e65a74dc3c722b028cb99fddb57b3c501aed2e38bde819a674f36b621c718bf1ccb4e9b878e4560519733fbb6af678a035da5c717bd0334ce9e6d6c438e317e39969d370f1c8ac0a32e67f76d5ecf1406bb4b8e2f7a06699d3cdad8871c62fc732d3a6e1e391581465ccfeedabd9e280d76971c5ef40cd33a79b5b10e38c5f8e65a74dc3c722b028cb99fddb57b3c501aed2e38bde819a674f36b621c718bf1ccb4e9b878e4560519733fbb6af678a035da5c717bd0334ce9e6d6c438e317e39969d370f1c8ac02f40c0a443c151cbd381738625d82e64497f36d5871e06fd732d3a6f1e39157f5e8181488782a397a702e70c4bb05cc892fe6dab0e3c0dfae65a74de3c722afe49155b3de567c9e71acbf6108dbee18bd23f37531c79bff6ccb4e9bd78e455fb1e3d0f28a1321686025e141911dbeb1250c0caa338f523ee9969d37bf1c8abf53c7a1e5142642d0c04bc283223b7d624a181954671ea47dd32d3a6f7e39157ea0506954f5b2adccfd63e785c3dcdd443ef458689e3d633bb65a74df0c722afd30a0d2a9eb655b99fac7cf0b87b9ba887de8b0d13c7ac6776cb4e9be18e455fa6141a553d6cab733f58f9e170f737510fbd161a278f58ceed969d37c31c8abf4c2834aa7ad956e67eb1f3c2e1ee6ea21f7a2c344f1eb19ddb2d3a6f8639157e98506954f5b2adccfd63e785c3dcdd443ef458689e3d633bb65a74df0c722afd302ce502983bbe1cb29495337fb018b07894f32d397ac81b6db4e9be19e455fa5f59ca0530777c3965292a66ff603160f129e65a72f59036db69d37c33c8abf4be3fa6630dc55af5821f1af5f6b6c0e9dd000f10e2eb2211b7d3a6f8689157e97b0b5f1ec861186dbc0afc13e563dffbb4ac607dc2d645c770a74df0d222afd2f516be3d90c230db7815f827cac7bff76958c0fb85ac8b8ee14e9be1a4455fa5ea2d7c7b218461b6f02bf04f958f7feed2b181f70b59171dc29d37c3488abf4bd45af8f64308c36de057e09f2b1effdda56303ee16b22e3b853a6f8691157e97a842044532e7e95e787c87664e345de345724a382a645e1b0b74df0d232afd2f4f101ae312a6353fa8c5d4f4945f19ee8590d6cc51c8bdda17e9be1a4755fa5e9d2035c6254c6a7f518ba9e928be33dd0b21ad98a3917bb42fd37c348eabf4bd3a406b8c4a98d4fea31753d2517c67ba16435b314722f7685fa6f8691d57e97a740ce97142080c7ffdfb6dcc9aef2d9c2732f8be8b45f074c04df0d23bafd2f4e719d2e2841018fffbf6db9935de5b384e65f17d168be0e9809be1a4775fa5e9ce33a5c5082031fff7edb7326bbcb6709ccbe2fa2d17c1d30137c348eebf4bd39c674b8a104063ffefdb6e64d7796ce13997c5f45a2f83a6026f8691dd7e97a7385aa96ccd572a829783a2f1a6e937ea6ddbce44b15f08f005df0d23bbfd2f4e6f4165324784b787e6d40c0b45c8cdfcd663dee55fbe13840cbe1a4778fa5e9cdd0edcbd3bdfd1928574de3e8387fa21a7740026bc7c28ac1a7c348ef2f4bd39b91db97a77bfa3250ae9bc7d070ff4434ee8004d78f8515834f8691de5e97a73723b72f4ef7f464a15d378fa0e1fe8869dd0009af1f0a2b069f0d23bcbd2f4e6e402f8428bd4ef16e373b81c14362f35364c4391e0e14704d4e1a47798a5e9cdc705f08517a9de2dc6e77038286c5e6a6c988723c1c28e09a9c348ef314bd39b8e0be10a2f53bc5b8dcee07050d8bcd4d9310e4783851c13538691de6297a7371c17c2145ea778b71b9dc0e0a1b179a9b2621c8f070a3826a70d23bcc52f4e6e382f8428bd4ef16e373b81c14362f35364c4391e0e14704d4e1a47798a5e9cdc705f08517a9de2dc6e77038286c5e6a6c988723c1c28e09a9c348ef314bd39b8e04a22fba212283b94bacd2d05822b758dbd26d43551c2d939691de62a7a7371bf20584ff0fab2f9e142608202fab5131626900467a3875673d23bcc55f4e6e37d40b09fe1f565f3c284c10405f56a262c4d2008cf470eace7a47798abe9cdc6fa0d739870c12e6a3cd6483003e132745346826d9b8e1efdd048ef3158d39b8df31ae730e1825cd479ac906007c264e8a68d04db371c3dfba091de62b1a7371be635ce61c304b9a8f35920c00f84c9d14d1a09b66e387bf74123bcc5634e6e37cc6b9cc386097351e6b241801f0993a29a34136cdc70f7ee8247798ac69cdc6f98634bdfb8e94926853149283609856d2f146935b5e1f181058ef3158e39b8df2f52aa181ea8f4cfc22f58786409690258d514c768c3e4a60c1de62b1d7371be5d316688ea284c223c2b7718c009302cac566beace87caf0193bcc563be6e37cb962cd11d45098447856ee318012605958acd7d59d0f95e0327798ac77cdc6f97251ac7c5577930ba87aa28af81b1edaac05f207371f2d6465ef3158f09b8df2e32f6b5157c5889a08c20b3de82c9bdd52b8266a6b3e5c6cccde62b1e2371be5c55ed6a2af8b11341184167bd05937baa5704cd4d67cb8d999bcc563c46e37cb8a49bf9e0bec84eadad4f31f98a8cd9d458cdc05a9f9735734798ac789dc6f97131f9194c4af6c586d76ac672947f96285c5fa6750f2e85269f3158f14b8df2e253f2329895ed8b0daed58ce528ff2c50b8bf4cea1e5d0a4d3e62b1e2971be5c4a0a58abbf9413e46da777c49d1643b211c42bf940cba2eda8cc563c53e37cb89314b1577f2827c8db4eef893a2c8764238857f2819745db5198ac78a7c6f971262962aefe504f91b69ddf1274590ec84710afe5032e8bb6a33158f14f8df2e24c52c55dfca09f236d3bbe24e8b21d908e215fca065d176d4662b1e29f1be5c498319d14a617a0c992444271c95a994916ef01f009ba307e8dc563c53f37cb892f633a294c2f4193248884e392b532922dde03e0137460fd1b8ac78a7e6f97125e5286ab4534e5a900ddcfef1d60c34c56684a1c23e8c39e38158f14fddf2e24bb311faf37402dd4b988660632b7e4c0a77cd69444d188e0712b1e29fcbe5c4975623f5e6e805ba97310cc0c656fc9814ef9ad2889a311c0e2563c53f97cb892ea50911589d719d59dee5e40c2d5f12a989f9cad10462525c5ac78a7f3f97125d32d3483c084962df3a982a97da2407d2beb7bb61d8c4bef8c58f14fe8f2e24ba55a690781092c5be7530552fb4480fa57d6f76c3b1897df18b1e29fd1e5c4974a40e467aee8bb3a8672d0cdee7f601caa5a3134733131623263c53fa4cb892e930ddb280aa7d8f7c4b267c3d4f51e614f60a4c4e362646865c78a7f4a97125d251bb650154fb1ef8964cf87a9ea3cc29ec14989c6c4c8d0cb8f14fe952e24ba4a376ca02a9f63df12c99f0f53d479853d8293138d8991a1971e29fd2a5c4974946ed940553ec7be25933e1ea7a8f30a7b0526271b1323432e3c53fa54b892e92869c4d95753f1ff02f342654748443cf0b68eaa3326482a5d78a7f4aa7125d24f5f9c0b5b7e4680bdb34af28686e6a1dc195fb0634c91f8bbf14fe955e24ba49d4b4a6f63d2ef8433335c0d05042b6bb2df01bcc399259578e29fd2acc497493922a737747c418b1e337e4201feb4ff606a45d584324ccef2c53fa55a892e9271454e6ee8f883163c66fc8403fd69fec0d48bab0864999de58a7f4ab5125d24e216af367ec768af309abf2ffff132257c5559b20dc934dfcc14fe956b24ba49c32d5e6cfd8ed15e61357e5fffe2644af8aab3641b9269bf9829fd2ad6497493865abcd9fb1da2bcc26afcbfffc4c895f15566c83724d37f3053fa55ac92e9270c418c0ca311a7fc3ca2bfa7f77fef53dd570fec6b49a8a261a7f4ab5a25d24e170f2a71f2f9b27b31124577e6f63ccfb55a6234d39352e8c44fe956b54ba49c2d1e54e3e5f364f662248aefcdec799f6ab4c469a726a5d1889fd2ad6a9749385a3ca9c7cbe6c9ecc44915df9bd8f33ed56988d34e4d4ba3113fa55ad52e9270b40565e844a3f65c405ef1e72fa844a5a57f5402999a98ea237f4ab5ab5d24e1670acbd08947ecb880bde3ce5f50894b4afea805333531d446fe956b56ba49c2ce1597a1128fd971017bc79cbea1129695fd500a666a63a88dfd2ad6ad7493859c2b2f42251fb2e202f78f397d42252d2bfaa014ccd4c7511bfa55ad5ae9270b38565e844a3f65c405ef1e72fa844a5a57f5402999a98ea237f4ab5ab5d24e167038cf6141552e0ac3ab030decfef2dcaa96c2af30531ee870e956b56ca49c2cdf719ec282aa5c158756061bd9fde5b9552d855e60a63dd0e1d2ad6ad9493859be6f4fddb22b1aadc678d25fabf2299aa5074d18be4c7d45c4a55ad5b39270b37b6ab214112c97de44be6ae74fdab15d44badc8d7998fc2f8a4ab5ab6824e166f5617680cf2f923f41499bf697abc0e28421fb76f031fa0315956b56d149c2cde94eff5a4b3587013a5ffe15274ddfed02f03949dd63f5aa2c2ad6ada393859bd12a110d434170852c8cc25246921e02008cb4efb7c7ecf85955ad5b48270b37a154221a8682e10a591984a48d243c04011969df6f8fd9f0b2ab5ab6904e166f4234568db9dc249769ffcf71123ed62ffcdf161adc1fb5856656b56d219c2cde8368ad1b73b8492ed3ff9ee2247dac5ff9be2c35b83f6b0accad6ada433859bd065d6c8f9446f4e05fcc03ec40f1b6e7ee289ac76d7ed7b99a5ad5b48770b37a0b46eb77d5644c437764ce0079d9cbf7d6fd77ead7fdb11735b5ab690fe166f41519e948579efb09a6966228eba9f617a8a73231acfb63d26c6b56d220c2cde82933d290af3df6134d2cc451d753ec2f514e646359f6c7a4d8d6ada441859bd05267a5215e7bec269a5988a3aea7d85ea29cc8c6b3ed8f49b1ad5b48830b37a0a45b5c9b69ce3acfec7fd76f55460ee53fe5d3e964db2037645ab69107166f414742cb8f8072d82290cc7506a2827bf27a77ea2ec6b64212c9b56d220f2cde828d11a977adbc12c7d965b0353cfb560cef9c16b98a6c85c9946ada441f59bd05192352ef5b78258fb2cb606a79f6ac19df382d7314d90b9328d5b4883eb37a0a3246a5deb6f04b1f6596c0d4f3ed5833be705ae629b2172651ab69107d66f41464195e161ab6f8c182fa47d1dfd10e8f778cf82850642ff0a456d220fbcde828c732bc2c356df18305f48fa3bfa21d1eef19f050a0c85fe148ada441f79bd0518e6578586adbe3060be91f477f443a3dde33e0a14190bfc2915b4883ef37a0a31c570309828e288ecf9f04b6f67ed2a3b714039e8021812923b69107df6f4146373a186bb1f2b3a0570acf95e4f4036f68d44998fd4303f6486d220fbfde828c6d00433010bbc9c365e26553c1de6506cc54d58df786099091da441f80bd0518d900866021779386cbc4caa783bcca0d98a9ab1bef0c132123b4883f017a0a31b2010cc042ef270d9789954f0779941b31535637de1826424769107e02f414636402198085de4e1b2f132a9e0ef3283662a6ac6fbc304c848ed220fc05e828c6c80433010bbc9c365e26553c1de6506cc54d58df786099091da441f80bd0518d900866021779386cbc4caa783bcca0d98a9ab1bef0c132123b4883f017a0a31b2010cc042ef270d9789954f0779941b31535637de1826424769107e02f414636402198085de4e1b2f132a9e0ef3283662a6ac6fbc304c848ed220fc05e828c6c80433010bbc9c365e26553c1de6506cc54d58df786099091da441f80bd0518d90012727a2469e94e7c976dabb4c06bc0a4575e4b091322c7b5883f017b0a31b1ff24e4f448d3d29cf92edb576980d78148aebc961226458f6b107e02f6146363fe49c9e891a7a539f25db6aed301af02915d792c244c8b1ed620fc05ec28c6c7fc1fa629d025acf69c8833859df9bc2d1d6734b4459917e1ad41f80bd9518d8ff73f4c53a04b59ed3910670b3bf3785a3ace69688b322fc35a83f017b2a31b1fee0aaaffed6d165d29ed943e6fdd4edc7049152d1364612ab607e02f6646363fdb1555ffdada2cba53db287cdfba9db8e0922a5a26c8c2556c0fc05ecc8c6c7fb62aabffb5b45974a7b650f9bf753b71c12454b44d9184aad81f80bd9918d8ff6c5557ff6b68b2e94f6ca1f37eea76e38248a9689b230955b03f017b3231b1fed836c25783a7c85556a60a0ef5cb4beeff3d952d3346144f617e02f6656363fdaf6d84af074f90aaad4c141deb9697ddfe7b2a5a668c289ec2fc05eccac6c7fb5e671bb6bb7583d81264ee63cf238de3f7a29710ca1852e186f80bd9968d8ff6bb5a49c623c16a32dc96a2ef963d79efe9f1707d9130a7670ef017b32e1b1fed7540a5e4f45936e870fa0c0724715207ce8f23571f6150721ee02f665d363fdae90d5e229588d05399c0de3640d9023797ca890a3bc2a2883ec05eccbb6c7fb5d11abc452b11a0a73381bc6c81b2046f2f951214778545107d80bd9976d8ff6ba235788a5623414e670378d9036408de5f2a2428ef0a8a20fb017b32edb1fed7446af114ac46829cce06f1b206c811bcbe544851de151441f602f665db63fdae8861f482056367bc53daa98c058681a17754d2ffb92a2a27ed05eccbb7c7fb5d0f4ffb5cb79d31fb5f8219400303616ae955e85b6f5455f3db0bd997708ff6ba1d2c09121c10c67976d0f8a7fdfd20fdcd581312dba8ad8bb717b32ee21fed743958122438218cf2eda1f14ffbfa41fb9ab02625b7515b176e2f665dc43fdae8723c36a11d197c689310a8c7efeae21f300c8ea76ba2b7d2dd5eccbb897fb5d0e3047f9ae7095b53ddee17b7d7cc22665ac55faad4457149bbbd997713ff6ba1c508ff35ce12b6a7bbdc2f6faf9844ccb58abf55a88ae293777b32ee27fed7438a11fe6b9c256d4f77b85edf5f3089996b157eab5115c526eef665dc4ffdae871423fcd7384ada9eef70bdbebe611332d62afd56a22b8a4dddeccbb89ffb5d0e2847f9ae7095b53ddee17b7d7cc22665ac55faad4457149bbbd997713ff6ba1c501c05b58e01ccfe758fbd22f17aaaf3535837b685ae2adb78b32ee280ed74389f380b6b1c0399fceb1f7a45e2f555e6a6b06f6d0b5c55b6f1665dc501dae8713e7016d6380733f9d63ef48bc5eaabcd4d60deda16b8ab6de2ccbb8a03b5d0e27c6c40051ce4ca76644aaf3f83cbb5c2956e00102a71587fc6997714086ba1c4f7649262e69ff76f806224a6ff8dc9ad2588427c51e2b2a38e32ee2811d74389ed55371e7a165161b8910f75f711f18245bcc754a0c566eb1d65dc5024ae8713d9368095a103054628eee513e61a412c8625d1053e8acf7a3bcbb8a04a5d0e27b16d012b42060a8c51ddca27cc3482590c4ba20a7d159ef47797714094ba1c4f626614af30e2779b5b885a77905f62da13438670f72b3f8cf02ee2812a74389ec3583bb70e9b51b96edd7b1718b523dc21334f3deb5680bde15dc50255e8713d853c89c6ca0d05f59587bc562960a5e03d12e0d7d3ad031fc3bb8a04acd0e27b090525e640f06e6de2dc3ed44ab7a9e874d2040ba45a07e3887714095aa1c4f6110a4bcc81e0dcdbc5b87da8956f53d0e9a4081748b40fc710ee2812b54389ec2214979903c1b9b78b70fb512adea7a1d348102e91681f8e21dc50256a8713d844292f320783736f16e1f6a255bd4f43a690205d22d03f1c43b8a04ad50e27b088525e640f06e6de2dc3ed44ab7a9e874d2040ba45a07e3887714095aa1c4f611030cf20cae4303f1354a0b14eeb9b3694ecc3d08840fe150fe2812b55389ec21f619e4195c8607e26a941629dd7366d29d987a11081fc2a1fc50256aa713d843e4f4edbd867237f051f48ed33a4cb024e5f519e1e03f9f8408a04ad55e27b087b2ab0105da4a980c20b58025f3ff42c976ae5983907f5948214095aacc4f610f5556020bb4953018416b004be7fe8592ed5cb30720feb29042812b55989ec21ea36d29a23690885bffa263174f62eda5857d8bce11fd7f60950256ab413d843d36da53446d2110b7ff44c62e9ec5db4b0afb179c23fafec12a04ad56827b087a6675cc13a7a8499b7b55eedcbcf19915c0ba54f817f617c264095aad14f610f4b5acbdb21cb6bb6273784038f94914ab2c38cfafffec49c4d812b55a39ec21e9541aa0ef06d39ef063bce2f171f80bd60335c51fcfd8adc9c0256ab483d843d290f66768db0d660c444628626355fa2bb12fafff6fb175d3904ad56917b087a511ecced1b61acc18888c50c4c6abf457625f5ffedf62eba72095aad22f610f4a23d99da36c3598311118a1898d57e8aec4bebffdbec5d74e412b55a45ec21e94407460d1a5d1588d9efda5929a15b3dd3441a5bb4d8bc8dc9256ab48cd843d2870e8c1a34ba2b11b3dfb4b25342b67ba68834b769b1791b924ad56919b087a50e1d18346974562367bf6964a6856cf74d10696ed362f2372495aad233610f4a1c3a3068d2e8ac46cf7ed2c94d0ad9ee9a20d2dda6c5e46e492b55a466c21e943800732a52a7bb1056ca6bba920c12052eede8174a8bca809356ab48ce843d286f00e654a54f7620ad94d7752418240a5ddbd02e9517950126ad56919d087a50de01cca94a9eec415b29aeea48304814bbb7a05d2a2f2a024d5aad233a10f4a1bc039952953dd882b6535dd490609029776f40ba545e54049ab55a467421e943780732a52a7bb1056ca6bba920c12052eede8174a8bca809356ab48ce843d286f00e654a54f7620ad94d7752418240a5ddbd02e9517950126ad56919d087a50de01cca94a9eec415b29aeea48304814bbb7a05d2a2f2a024d5aad233a10f4a1bc039952953dd882b6535dd490609029776f40ba545e54049ab55a467421e943780732a52a7bb1056ca6bba920c12052eede8174a8bca809356ab48ce843d286f007266fdfc4c83304ca43b4c101a6885d67c70f1149502caae56919d097a50ddff70e054a56f68e351153cc0182b2f33a7a5243e262a07395dad233a13f4a1bbfd6dd301f7b5344959f73fa8284cbc8f49f68ad849541016bc5a467428e94377f967b85c9c40cb156bbb4578488fd7468e99580c8fa821d179b48ce852d286eff15b8311e557f8ad8f43511889160cb517def2751c504546f46919d0a6a50ddfe143187c778653ddd65368590a2277922a6a274635a08c31e9d233a14e4a1bbfc11243519be30a3e647396da0c3b4d4c4f8090e868411a07d4a467429d94377f812486a337c6147cc8e72db418769a989f0121d0d082340fa948ce853b286eff02490d466f8c28f991ce5b6830ed35313e0243a1a104681f52919d0a7650ddfe041e2ce58beeb475db697cf859d0c88a76b0c99f3f08d1e2a6233a14eda1bbfc073c59cb17dd68ebb6d2f9f0b3a19114ed61933e7e11a3c54c467429db4377f80e04c5eedc91345a2572ba095f398051d56f68d8f923492e998ce853b786eff01b098bddb92268b44ae57412be7300a3aaded1b1f246925d3319d0a76f0ddfe0361317bb7244d16895cae8257ce6014755bda363e48d24ba6633a14ede1bbfc06c262f76e489a2d12b95d04af9cc028eab7b46c7c91a4974cc67429dbc377f80d84c5eedc91345a2572ba095f398051d56f68d8f923492e998ce853b786eff01b024d0343efcedc766240753df266862a8995d7b21692777329d0a76f1ddfe035f49a0687df9db8ecc480ea7be4cd0c55132baf642d24eee653a14ede3bbfc06be1f5329a8ca19a0505ce377748fffb29d11b84882a49f80cb7429dbc877f80d7b3ea65351943340a0b9c6eee91fff653a23709105493f0196e853b790eff01af6095eff4ffec903f9405405ca365cf26ef3237e07927fa72ed0a76f22dfe035eb12bdfe9ffd9207f280a80b946cb9e4dde646fc0f24ff4e5da14ede45bfc06bd6257bfd3ffb240fe501501728d973c9bbcc8df81e49fe9cbb429dbc8b7f80d7ac4af7fa7ff6481fca02a02e51b2e79377991bf03c93fd3976853b7916ff01af5822024dacc2f2c24bd206849b5c2d4ee9de7a3c7627fc16ee0a76f22efe035eaf44049b5985e58497a40d0936b85a9dd3bcf478ec4ff82ddc14ede45dfc06bd5e141b8f5fe22d8be714e03a65671363a2262b4dd59ff1ffb929dbc8bcf80d7abb28371ebfc45b17ce29c074cace26c7444c569bab3fe3ff7253b79179f01af576506e3d7f88b62f9c5380e9959c4d8e8898ad37567fc7fee4a76f22f3e035eaec2ceed3abe7cee1f073c7fb232ef9450bdd9ccaa9ff91a1ca4ede45e8c06bd5d759dda757cf9dc3e0e78ff6465df28a17bb399553ff2343949dbc8bd180d7abae3fcda75c759e0a799be61484b2433c2a22b586a4fe482b2a3b7917a401af575b0bada765c19e97ab049251015ae4a04ef1ad6946fc91fa5576f22f49035eaeb5175b4ecb833d2f560924a202b5c9409de35ad28df923f4aaede45e9206bd5d6a2eb69d97067a5eac124944056b92813bc6b5a51bf247e955dbc8bd240d7abad45d6d3b2e0cf4bd582492880ad72502778d6b4a37e48fd2abb7917a481af575a846eccf08f04bfd6815eb380da4a82ce9c718f06cc92149586f22f49135eaeb4f19ebf6beb6fa7d87f89c98133fae81ce3a743cd6924436b1de45e9236bd5d69d33d7ed7d6df4fb0ff13930267f5d039c74e879ad24886d63bc8bd246d7abad3a67afdafadbe9f61fe272604cfeba0738e9d0f35a4910dac77917a48daf575a745b720ea28e366ef791aae891f3d2366c7fe442b19223598ff22f491c5eaeb4e742f675f1f2cf60a6f01bf91bde0294d3ac0ae16024485720e45e9239bd5d69cd11ff4490bc014405acfe1a2fb26351a204581ebd48925242c8bd24747abad39923fe89217802880b59fc345f64c6a34408b03d7a9124a485917a48e8f575a73247fd1242f0051016b3f868bec98d468811607af52249490b22f491d1eaeb4e641c0c7d32b66ca2e534b6f9758978b50acf0351e74494361745e923a4d5d69cc73818fa656cd945ca696df2eb12f16a159e06a3ce89286c2e8bd24749abad398e7031f4cad9b28b94d2dbe5d625e2d42b3c0d479d1250d85d17a48e93575a731c6c76424289c799e1727df3a44223d051245ceb3724a354bb2f491d27aeb4e63764fedd31e9f1b67ab1c20f407aa5c89cf4fc326b49484d775e923a505d69cc6d56101310aa45efad304a4678eba9b934963ac0d392923eefbd2474a1bad398d938327ece2aee62122d5ab4e9cdb19a63d8b7dda4252621e07a48e94475a731b17064fd9c55dcc4245ab569d39b6334c7b16fbb484a4c43c0f491d288eb4e63626cdc53e5821c0b008230fb9f2d24918a0f21d28d949a2b82e923a512d69cc6c365cb0077da9a98b8d1281f3650a74b0eca8601182935fb06d2474a26ad398d8557a8599c8b97b4296f16666497acbe18414e5e2d526d9a0ea48e944e5a731b093b630be5ed91eb0aaaf2f4c125b7a42b2edf1857a4dcd81e491d289db4e6361102d87078b18658cd22ac117a41cd70510a008cac49bb543d923a513c69cc6c2105b0e0f1630cb19a455822f4839ae0a2140119589376a87b2474a278d398d8420b61c1e2c61963348ab045e90735c144280232b126ed50f648e944f1a731b08416c383c58c32c66915608bd20e6b8288500465624ddaa1ec91d289e34e6361082d87078b18658cd22ac117a41cd70510a008cac49bb543d923a513c69cc6c2105b0e0f1630cb19a455822f4839ae0a2140119589376a87b2474a278d398d8420422e76d937f8b60077ca868869ba3c3d2c65870f6ed6b3658e944f1b731b083f106f465f4653eeb8bc5b3508c9d2a075050d6a1bddaf0acc1d289e37e636107d20de8cbe8ca7dd7178b66a1193a540ea0a1ad437bb5e15983a513c6fcc6c20fa41bd197d194fbae2f16cd423274a81d41435a86f76bc2b3074a278df98d841f40f8c8ba70901f87daf9fd03e44f32ba2d4adacdbed79fa61e944f1c031b083e71f19174e1203f0fb5f3fa07c89e65745a95b59b7daf3f4c3d289e380636107ce3e322e9c2407e1f6be7f40f913ccae8b52b6b36fb5e7e987a513c700c6c20f9c0876b5e51e7246a549c4a9ea1df7851151afc2dc6bd177104a278e028d841f3710ed6bca3ce48d4a938953d43bef0a22a35f85b8d7a2ee20944f1c051b083e6e21dad79479c91a952712a7a877de144546bf0b71af45dc41289e380a36107cdc43b5af28f392352a4e254f50efbc288a8d7e16e35e8bb882513c70146c20f9b8137db6febd86ed0c6910c699d5d6790fc73e89c3bd191505a278e029d841f36f26fb6dfd7b0dda18d2218d33abacf21f8e7d13877a322a0b44f1c053b083e6de4df6dbfaf61bb431a4431a675759e43f1cfa270ef464541689e380a76107cdbc280010a2c299eb1b154c5cc6a511f078e636aa1ae8ca4c2e13c7014fc20f9b77500021458533d6362a98b98d4a23e0f1cc6d5435d194985c278e029f841f36ee2c129b37e0ca2f2421f79b128aa5e9de451d0468a32ad4b94f1c0540083e6ddb5825366fc1945e4843ef3625154bd3bc8a3a08d14655a9729e380a80107cdbb63c5cc58c598b3f4854a4944220f5cf73c0b66d9f8cacf6e63c70150120f9b76b04cbe3c589790148760f507c3849c6e22daf373c195b91cd78e02a0341f36ed50997c78b12f20290ec1ea0f870938dc45b5e6e7832b7239af1c0540683e6ddaa132f8f1625e40521d83d41f0e1271b88b6bcdcf0656e4735e380a80d07cdbb54265f1e2c4bc80a43b07a83e1c24e37116d79b9e0cadc8e6bc701501a0f9b76a84cbe3c589790148760f507c3849c6e22daf373c195b91cd78e02a0341f36ed50258ed15e0582abc68eb0377eff970440622943802b73ddb01c0540693e6dda9f4b1da2bc0b05578d1d606efdff2e0880c452870056e7bb60380a80d27cdbb53e224d9e24ec6d31d2078705f3f4ba38fc34e769fdadd11ac1701501a5f9b76a7b449b3c49d8da63a40f0e0be7e97471f869ced3fb5ba23582e02a034bf36ed4f61548d140881749ffeae23fc7c9470beb7fe003f3b7460f06c0540698e6dda9eb2a91a281102e93ffd5c47f8f928e17d6ffc007e76e8c1e0d80a80d31cdbb53d655234502205d27ffab88ff1f251c2fadff800fcedd183c1b01501a639b76a7ac3658e2b1171cd2b723d8263640968756ab427b9aba321c3702a034c836ed4f576cb1c5622e39a56e47b04c6c812d0ead5684f7357464386e054069906dda9eae6575e37132d5cd945c26c0d0f8b84555594c4a67e8ca14dd0a80d321dbb53d5b56fe1f8f3c0e1de08513a999e7ceb2a55edaf0ccd195cdbb1501a644b76a7ab53a0e97cb4e7ebe78d6ed7b2bc5fb8d4569f83d96a32d3f772a034c8a6ed4f569002f8843735fffa97aa11e4f825542858032d72a465c22ef54069915dda9ead1005f1086e6bfff52f5423c9f04aa850b0065ae548cb845dea80d322bbb53d5a200be210dcd7ffea5ea84793e09550a1600cb5ca919708bbd501a645776a7ab44017c421b9afffd4bd508f27c12aa142c0196b95232e1177aa034c8aeed4f568802f8843735fffa97aa11e4f825542858032d72a465c22ef54069915dda9ead1005f1086e6bfff52f5423c9f04aa850b0065ae548cb845dea80d322bbb53d5a200be210dcd7ffea5ea84793e09550a1600cb5ca919708bbd501a645776a7ab44017c421b9afffd4bd508f27c12aa142c0196b95232e1177aa034c8aeed4f568802f8843735fffa97aa11e4f825542858032d72a465c22ef54069915dda9ead1005f1086e6bfff52f5423c9f04aa850b0065ae548cb845dea80d322bbb53d5a2004a33667a566128a2513f66014b683dfb779f0516708d61511a645777a7ab43ff207925a18324d3fc6f44f3fa8d2ea3f19b806629e11c66a334c8aef04f5687fd40f24b430649a7f8de89e7f51a5d47e33700cc53c238cd4669915de09ead0ffa0df6ef32e2f5d2a989d9f7e22b18b7c11a43f4a484733e8dd322bbc23d5a1ff31bedde65c5eba55313b3efc456316f823487e94908e67d1ba64577847ab43fe637dbbccb8bd74aa62767df88ac62df04690fd29211ccfa374c8aef08f5687fcc6fb7799717ae954c4ecfbf1158c5be08d21fa5242399f46e9915de11ead0ff986b814bdb05bfad506a65a61aa7e9a40c5081a64547358cde322bbc24d5a1ff2f6314f062e1e1dd58a191742d463170134d45a8878e6cbdbd6457784aab43fe5d523c39729a263d690fe9105282c1082146cdad0c1cdb1f7bc8aef0965687fcb9308acb920aaefd89ec98489cfbe0383d39ddb61539b7e2f8915de12dad0ff97161159724155dfb13d9309139f7c0707a73bb6c2a736fc5f122bbc25b5a1ff2e24e3d86f5011e78df7f274a6be5df08ef93b93451e6e12fe3457784b7b43fe5c3288d6696d89f7476cb14bccfc21c39d9d3b4c4a0cdc403c78aef0970687fcb85511acd2db13ee8ed9629799f843873b3a76989419b88078f15de12e0d0ff970a2e47f30838e05492f9191b36fecf0f61fb156e803711b31f2bbc25c2a1ff2e135c8fe61071c0a925f232366dfd9e1ec3f62add006e23663e57784b8543fe5c26453224cdb9e3d503b12a94d3f19a6582989815fddc48707daef0970b87fcb84b1676a2484a2a2cbf2f1b519fd992f2ffdd7287f8b89284fc5de12e180ff970952ced44909454597e5e36a33fb325e5ffbae50ff1712509f8bbc25c301ff2e12a59da892128a8b2fcbc6d467f664bcbff75ca1fe2e24a13f17784b8603fe5c2543fc76aef27b3e8b145a0b4f6c2f5bff997d69bc2c495cbe3ef0970c17fcb84a70ba12e8b25ca541a580791e57c49a7eddbef9382892d3bc8de12e183ff97094d17425d164b94a834b00f23caf8934fdbb7df2705125a7791bc25c307ff2e129a2e84ba2c97295069601e4795f1269fb76fbe4e0a24b4ef23784b860ffe5c25345d0974592e52a0d2c03c8f2be24d3f6edf7c9c144969de46f0970c1ffcb84a684625415f3307c45d4d3f464fbaf8a6d86b3b942592d5608ee12e1840f97094cf185cdb6b3c720b726744b4976c4f75ab82b9844825ac651ec25c3082f2e1299d30b9b6d678e416e4ce89692ed89eeb57057308904b58ca3d84b86105e5c2533a61736dacf1c82dc99d12d25db13dd6ae0ae6112096b1947b0970c20bcb84a6744ef93406b9f2de4b06ebccb358d9d556c20e7e3e2d64ccf712e1841897094ce72a04c0ba4a483f4dda9dc15ea811d2a8305f58795acb3def25c308322e1299cd5409817494907e9bb53b82bd5023a55060beb0f2b5967bde4b8610645c25339a34255b95ff837fef373d2d7296a5729b6dbfbde26b2e9bbd970c20c9b84a6733684ab72bff06ffde6e7a5ae52d4ae536db7f7bc4d65d377b2e1841937094ce665ca7c704d4708274a9baddc250f3f26863415386acbc12f75c308327e1299ccb4561e6b67f4387a1203be37c98460ccb72c5030a5979c9efb8610650c253399516d62619d4e991fa0d3deef126ea419191cc6211b2f537e070c20ca284a673292dac4c33a9d323f41a7bdde24dd483232398c42365ea6fc0e1841945094ce6525b58986753a647e834f7bbc49ba9064647318846cbd4df81c308328a1299cca442c3897b7daf128836b59f812db034873aa56c8a97ab6304861065152533994711996ba3d1c0a7c83a3166fa51be9109218d35122f586a0a0c20ca2b4a67328d2332d747a3814f907462cdf4a37d2212431a6a245eb0d4141841945694ce651a4665ae8f47029f20e8c59be946fa44248634d448bd61a828308328ad299cca3418ddb5cb6467c0f99e515fca8452b043b8ac048e7ac4f4516106515b5339946731bb6b96c8cf81f33ca2bf9508a560877158091cf589e8a2c20ca2b6a67328ce6376d72d919f03e679457f2a114ac10ee2b01239eb13d1458419456d4ce6519c53000707f9a08a84bf51264c18f3aa1871a28070d629468c08328adb99cca337321266bcc9a397c14b68749028457c2b8f875cdeac543119106515b83399466d6424cd7993472f8296d0e920508af8571f0eb9bd58a8623220ca2b7067328cda545bf39ffcf0e1bcfa67fa38977418a8ea5fcf77b1526865419456e1ce6519b334ca3fecd0444631c1961c692546594c8101faec62a674cb8328adc49cca336569947fd9a0888c63832c38d24a8cb2990203f5d8c54ce99706515b89399466ca5f3b586017739b7ed31e999c8b778d2cb04a47ae8a9b772f0ca2b7137328cd934a89096d0549b9b573035b310d4d42540cd6eb5a1538925f19456e27e6519b2521246b86e0f5f622b2ccde5a10f8aca2c5f032b12a72c8bf328adc50cca336494248d70dc1ebec456599bcb421f159458be0656254e5917e6515b8a199466c9210a406c85a3a5b4297f9a1603a40da85c40326c1a9ccc6fdca2b7144328cd92321480d90b474b6852ff342c07481b50b88064d8353998dfb9456e2886519b24642901b2168e96d0a5fe68580e9036a17100c9b06a7331bf728adc510ca33648c11328eefa8355ccc8c9332f9c864fc28cc5b920a4e67dbef515b8a229466c91722651ddf506ab999192665f390c9f85198b724149ccfb7dea2b7144528cd922e44ca3bbea0d57332324ccbe72193f0a3316e4829399f6fbd456e288a519b245c15a6d02a180d691c315fbfc6398609410f1eec4f7340837b8adc5115a33648b72b4da054301ad23862bf7f8c730c12821e3dd89ee68106f715b8a22b466c916e569b40a86035a470c57eff18e61825043c7bb13dcd020dee2b7144568cd922dc3948d9fd96cdcb9957c42629c28e72032539be789a05bfdd56e288ae19b245b77291b3fb2d9b9732af884c53851ce4064a737cf1340b7fbaadc5115c33648b6e7135c0a33199b11d2bd6c09f0097f007412955df6818a3765b8a22b966c916db6e7dd9f33995e4f22473a935f78e08092e9507bbd032eaedb7144573cd922db5690e0c93498e4c9c15ad7a63e57a380d096c6b74a06779dc6e288ae89b245b695e2e71d3697f1beff8211cbfc1529814bf1b32e640d097b9dc5115d23648b6d1486f3c53a960ba97bd086177790358242a78c1c981a2d374b8a22ba56c916da11cf0d1542923f7e746d6eae6e864d8430133df9003474aea7144574bd922db4139e1a2a85247efce8dadd5cdd0c9b0860267bf20068e95d4e288ae97b245b68273c34550a48fdf9d1b5bab9ba193610c04cf7e400d1d2ba9c5115d2f648b6d047398e34e1f8241f2037d7f2f3984ea12b5e1587d1a3bfb548a22ba5fc916da0773441f491567069bd3c126566967fc2018050cf734799aaa144574c0922db40d729a973f01308fef744874a4c92e203adc4c75eb68f4d955288ae982245b68197147872ad8c3a296b557114188ba687064db47d3d1eb56ab5115d30548b6d0316ea1670287e9c7e537744a7b07d2f8db75f8eba4a3d85157a22ba60b916da061695526b1e63612823baebcee060419b19834334647b246b044574c1822db40c15ebca610a2cea7bc4423a1d402665b5ddcaac2898f66316188ae983145b68181498ba4ce1bffd230550d6b9ffb2adeb66597e1101ece06c4115d30638b6d03011f29a2490e62271876e0ff37ecb3e56777721e1d3d9db18922ba60c816da06013e5344921cc44e30edc1fe6fd967caceeee43c3a7b3b63124574c1902db40c0208b8e1d10feb1f19a84a24d7a92dbd988a0ad471f6786a258ae983215b6818031171c3a21fd63e33509449af525b7b311415a8e3ecf0d44b15d30642b6d0300622e387443fac7c66a128935ea4b6f662282b51c7d9e1a8962ba60c856da0600c45c70e887f58f8cd425126bd496decc45056a38fb3c3512c574c190adb40c01817a075bdd514745251687572893a01834cefa31c67884659ae983216b681802f2f40eb7baa28e8a4a2d0eae51274030699df4638cf108cb35d30642d6d03005e5e81d6f75451d14945a1d5ca24e8060d33be8c719e211966ba60c85ada0600bc4916069b7f06254a5809d38c402e341513bf74e03c43d6ce74c190b6b40c01771e3e65e3d46ecd4c7cd9cf1076ba9024d3c145bd7889519de983216e681802ed3c7ccbc7a8dd9a98f9b39e20ed752049a7828b7af112a33bd30642dcd03005da050bf03c281db7e9c02d6439d148688dfb4772f2e226ea78a60c85baa0600bb30a17e078503b6fd3805ac873a290d11bf68ee5e5c44dd4f14c190b7540c01766142fc0f0a076dfa700b590e74521a237ed1dcbcb889ba9e2983216ea81802ecc285f81e140edbf4e016b21ce8a43446fda3b9797113753c530642dd503005d9850bf03c281db7e9c02d6439d148688dfb4772f2e226ea78a60c85baa0600bb302d906031da197fefd272af321f6b39ba1530ba5944def315c190b7550c01765f5b20c063b432ffdfa4e55e643ed673742a6174b289bde62b83216eaa1802ecbe4253d9743ec882771690e4c0740b0ee301054562137d70580642dd553005d97b10ba0b9553f387a5f9e7f178de7445c0ae4ce6c126fc84b10c85baab600bb2f52174172aa7e70f4bf3cfe2f1bce88b815c99cd824df90962190b7556c01765ea42e82e554fce1e97e79fc5e379d11702b9339b049bf212c43216eaad802ecbd411e2b55775febfe79c05b3beea0056001ea9920637e5c989642dd55c005d97a723c56aaeebfd7fcf380b677dd400ac003d53240c6fcb9312c85baab800bb2f4e478ad55dd7faff9e7016cefba80158007aa64818df97262590b7557001765e9c1b280368865881f4acf3c5ef4660d7fba18eec2ebf2ff04c216eaae102ecbd37365006d10cb103e959e78bde8cc1aff7431dd85d7e5fe09842dd55c205d97a6e6ca00da2196207d2b3cf17bd19835fee863bb0bafcbfc13085baab840bb2f4dc655273f10926925d346457722964e7d7b8b9bd72f98126620b7557091765e9b756b7408ee8afa772358ed6dc4927f7aa1db5d6e2f303f0c516eaae132ecbd36d3980d9caa7c1d19c37e3d5b088ae174ee7ae09c2e609858b2dd55c275d97a6d97301b3954f83a3386fc7ab61115c2e9dcf5c1385cc130b165baab84ebb2f4db27215bfd77569c928ac557eba191685364afa83089827ba2db755709e765e9b63703dd85bc13615092571256c288b32674237620e3051185c6eaae13decbd36c56c8e096458ceacca17a872d047748cc930b1201960a3d4b9dd55c27cd97a6d89652e6b7587ffdc4bfc170d988547418d0da49c2fc1494d74baab84fab2f4db11566f2f97e6623b4fc4f4432900ecab14c78b945c82943eea755709f665e9b62138f0b7dca326f95756aeae49f8377e243b5984b6052a21d5eaae13edcbd36c4171e16fb9464df2aead5d5c93f06efc4876b3096c0a5443abd55c27db97a6d8826fd5381f62fe68152780e11fd73c208b99a86ed514aa2b58aab84fb82f4db1036bbcc8eb9c5f52e21bc7ea37a4d66911df9339a72955fab255709f715e9b6205638bea840f21287c0455fc67400afa1e6b68cf4b52ad9965aae13ee3bd36c409532a2db4f4a4d3afd57220c676741c378313fa93a55cd6cc55c27dc87a6d88113266b416bfac2a1777aa6984e3466069b26a51244abb5199ab84fb91f4db102164cd682d7f58542eef54d309c68cc0d364d4a2489576a3335709f723e9b6204255ad2907d5132b15ab6fce0b8377a9a175eba08e2aeeea67ae13ee48d36c4083376caabc8088d8e323a5c40efd4d7b3d98199d1955df78d05c27dc92a6d881056ed955790111b1c6474b881dfa9af67b30333a32abbef1a0b84fb9254db1020a69c5039ed885e6445b5d3833eb9414f10ca8d062577f8742709f724b9b6204135f9c5fea876e4f408380985fcd8651dcc593fcc1af00b285e13ee49836c408254b4b1881e53f2138d3c758b7916acbb4376a55805e03090cc27dc9316d88104922a889b0a0e0c5297454d9671933bf631b1706fdbc07b61a84fb9263db1020914551136141c18a52e8a9b2ce32677ec6362e0dfb780f6c3509f724c7b620412216b47f6f59e5975d9e198d945b2d2587189e77f3f0207c6b13ee49906c4082432d68fedeb3cb2ebb3c331b28b65a4b0e313cefe7e040f8d627dc9320d88104865ad1fdbd67965d76786636516cb4961c6279dfcfc081f1ac4fb92641b102090c41b65427a58f3da4bd92949acfc7543371361b9c810587599f724c84620412170f7f00fc2180fe0147eb512d95ecd0618eae9336020cb2b43ee49909c408242d1efe01f84301fc028fd6a25b2bd9a0c31d5d266c041965687dc932138810485a3dfc03f08603f8051fad44b657b341863aba4cd80832cad0fb926427102090b4080a608de26a72c20c20b164a5c4ab0721b6f5ad106739a2f724c84f204121671014c11bc4d4e584184162c94b89560e436deb5a20ce7345ee49909e408242ce2029823789a9cb083082c5929712ac1c86dbd6b4419ce68bdc93213c8104859c4053046f1353961061058b252e2558390db7ad688339cd17b926427902090b380cb8618afd09aed88ed13e4252a8d86cc7b1b6ce06753e30724c84f30412166f1970c315fa135db11da27c84a551b0d98f636d9c0cea7c60e49909e608242cde32e1862bf426bb623b44f9094aa361b31ec6db3819d4f8c1c93213cc104859bc65c30c57e84d76c47689f2129546c3663d8db67033a9f183926427982090b3785798715ca6fd7040b9da0c1d20ebaec7275dc8dd6755870824c84f31412166ef3b433b66245d6339407a403238358588fafdedb7ceacb21149909e638242cddd0298cf791f1d492a4dbaa85c66c9330ca23e376c9d5b082393213cc804859bb905319ef23e3a92549b7550b8cd926619447c6ed93ab6104726427990090b37720a633de47c7524a936eaa1719b24cc3288f8ddb2756c208e4c84f32012166ee414c67bc8f8ea49526dd542e33649986511f1bb64ead8411c9909e640242cddc8298cf791f1d492a4dbaa85c66c9330ca23e376c9d5b082393213cc804859bb905319ef23e3a92549b7550b8cd926619447c6ed93ab6104726427990090b37720324636f49db4cd4b3b703f11a8aaeb233bd0372456c3ace5c84f32022166ee3f648c6de93b699a9676e07e235155d64677a06e48ad8759cb909e640442cddc7e552b347f4d35b7e4ba87243e9909d4879b83388e5b105798213cc809859bb8fb3668c1ab70cdf28141d470752871d109e348cd19b6225331427990140b3771f56cd18356e19be50283a8e0ea50e3a213c6919a336c44a66284f32028166ee3ea65b55f5a999a4cbcd417e9cc98256c2239659063d88af0c609e640512cddc7d3577d176209971c3174f5fb9126a9003f1f0d7cc4b117858d13cc80a359bb8fa53b0c8770e990bb1ab6b21f1a43b02878ea5d55866230af1b27990147b3771f49022b678ea983f8ed3a2a662c7dbe78ec80fd0709c46302374f32029066ee3e910456cf1d5307f1da7454cc58fb7cf1d901fa0e1388c6046e9e640520cddc7d2208ad9e3aa60fe3b4e8a998b1f6f9e3b203f41c27118c08dd3cc80a419bb8fa44115b3c754c1fc769d1533163edf3c76407e8384e231811ba799014833771f48822b678ea983f8ed3a2a662c7dbe78ec80fd0709c46302374f32029066ee3e910456cf1d5307f1da7454cc58fb7cf1d901fa0e1388c6046e9e640520cddc7d22016ec3c573760be06575fb31765fc631aeb841e6e18c231d4cc80a41abb8fa43f2dd878ae6ec17c0caebf662ecbf8c635d7083cdc318463a999014835771f487e5bb0f15cdd82f8195d7ecc5d97f18c6bae1079b86308c7533202906aee3e90fc43743b66916872ea87c3c0b3264140d208634f6dc61332a7640520d6dc7d21f712facf79f933688cdc4da95e42e0a99ebd08fad88c28094fc80a41aeb8fa43ed25f59ef3f266d119b89b52bc85c1533d7a11f5b11850129f9014835d71f487da4beb3de7e4cda2337136a5790b82a67af423eb6230a0253f202906bae3e90fb423e8d47c9ffdc71eaf3372ea0d6374f0948a32c16141ee7f40520d76c7d21f6747d1a8f93ffb8e3d5e66e5d41ac6e9e129146582c283dcfe80a41aed8fa43ece1bb5aa9f56599f328993f3a02bebfbbcfe6b270285095dfe014835dc1f487d9b376b553eacb33e651327e74057d7f779fcd64e050a12bbfc02906bb83e90fb366ed6aa7d59667cca264fce80afafeef3f9ac9c0a142577f80520d7707d21f66c69bfada7892f7c4c1965c4f955be05e29f9b9411284c93f10a41aee1fa43ecd75f91b3fbe8c17b4fff91b1eaa1da33bfeb79841f509acbe314835dc4f487d9ad4b35c0a4a7e57957cbe98bcd3a128f7a8335643ba1373bc72906bb8ae90fb359227dd9f6262d756764993f926a8346efb2ad247442701b8f520d7716d21f66b144fbb3ec4c5aeacec9327f24d5068ddf655a48e884e0371ea41aee2da43ecd621609c0856f1858555f2b2641a06b43b976f6edce09c2123e4835dc5c487d9ac32c13810ade30b0aabe564c8340d68772ededdb9c1384247c906bb8b890fb358658270215bc6161557cac990681ad0ee5dbdbb738270848f920d7717121f66b0c3c605cd84f254562c61f5a04f9b845c663f9ca6d4e1235f341aee2e343ecd61704d3125d74ad0d7d5904dc01e9ceb3877435f0d79c260fe7835dc5c787d9ac2d09a624bae95a1afab209b803d39d670ee86be1af384c1fcf06bb8b8f0fb3585a134c4975d2b435f564137007a73ace1dd0d7c35e70983f9e0d77171e1f66b0b4269892eba5686beac826e00f4e759c3ba1af86bce1307f3c1aee2e3c3ecd61684d3125d74ad0d7d5904dc01e9ceb3877435f0d79c260fe7835dc5c787d9ac2d02674a45b6c043262ed61a835303498e9330076f084c3a0f16bb8b8f1fb35859f4ce948b6d80864c5dac3506a606931d26600ede1098741e2d77171e3f66b0b3e25e4ea1a86734c43824cc8ccb7308b9f784437bf131027c6aee2e3c8ecd6167b4bc9d4350ce69887049991996e61173ef0886f7e26204f8d5dc5c791d9ac2cf623a60116f02fb3c5d5f94b2ad32056788d533af94c42431bbb8b8f24b35859eb474c022de05f678babf29655a640acf11aa675f29884863777171e4966b0b3d61aaa5d08972151cf24ab54a342df81dce18f47e2310ab06fee2e3c93cd6167ab3554ba112e42a39e4956a94685bf03b9c31e8fc4621560dfdc5c79279ac2cf566aa974225c85473c92ad528d0b7e0773863d1f88c42ac1bfb8b8f24f35859eac616540f18f6d1130f220cd120d5a36e1b8bc9b0e885727807171e49f6b0b3d574edcda8ff53ca519b107c21c111295be1dbb921a10aff301e2e3c93fd6167aad29cc0dccc0dbcceb2ed5ac3018835376e7b9803121618a04c5c79280ac2cf55953981b9981b799d65dab58603106a6edcf73006242c314098b8f25015859eab233428fdfd9d1b664881cd8b8586b75d64b285cc18587cc14171e4a03b0b3d56366851fbfb3a36cc91039b170b0d6ebac9650b9830b0f98282e3c94076167aac6591c982c3da95c49ed398ad9580bff53d8e3cf031620d4515c79280fc2cf558b3e4b890551b53b4ba7393daaa67626a25e09fa032c434ca3b8f25020859eab1508a96ab779ccf94f1b38a34d434a753f6856500358883d4871e4a0420b3d56291152d56ef399f29e3671469a8694ea7ed0aca006b1107a90e3c94084167aac5222a5aadde733e53c6ce28d350d29d4fda159400d6220f521c79281082cf558a4454b55bbce67ca78d9c51a6a1a53a9fb42b2801ac441ea438f25021059eab14816a90424733217a980505ccc2b057bf131a75c32888578881e4a0421b3d5628f2d520848e6642f5300a0b998560af7e2634eb865110af1103c94084367aac51e5aa41091ccc85ea601417330ac15efc4c69d70ca2215e22079281086cf558a3c415a79d06ff34003cf490e594e8a0784397d3d91442d6841f250210e9eab14770ec74c4db64902bf6b5844aa937237031f3cd71f885c7484e4a0421e3d5628ed1d8e989b6c92057ed6b0895526e46e063e79ae3f10b8e909c940843c7aac51da3b1d3136d9240afdad6112aa4dc8dc0c7cf35c7e2171d21392810878f558a3b4024cbb1a88aa98b327884d4c91efe013a62914f942e54828250210f2eab1476704997635115531664f109a9923dfc0274c5229f285ca90504a0421e5d5628ece0932ec6a22aa62cc9e21353247bf804e98a453e50b9520a0940843cbaac51d9c1265d8d44554c5993c426a648f7f009d3148a7ca172a414128108797558a3b3824cbb1a88aa98b327884d4c91efe013a62914f942e54828250210f2eab1476704997635115531664f109a9923dfc0274c5229f285ca90504a0421e5d5628ece01f411f4f0108af81aed97b1c72562ce436879a4db953ae0a40843cbbac51d9bf3e823e9e02115f035db2f638e4ac59c86d0f349b72a75c148108797758a3b37e0916d5e8da8540be882c1469bfb6db8b8660c533e5505c2a0210f2efb14766fb122dabd1b50a817d105828d37f6db7170cc18a67caa0b8540421e5df628ecdf6245b57a36a1502fa20b051a6fedb6e2e198314cf954170a80843cbbec51d9bec48b6af46d42a05f44160a34dfdb6dc5c3306299f2a82e1501087977d8a3b37d81d7fb73a7eb68ea04f876e93f1cbe0b3124eaf3b550766a1210f2efc14766faf3aff6e74fd6d1d409f0edd27e397c166249d5e76aa0ecd42421e5df828ecdf5e02113596d13cbd390ae3e247bd8daac6f57d18ea541f3e85843cbbf151d9bebb04226b2da2797a7215c7c48f7b1b558deafa31d4a83e7d0b087977e2a3b37d760844d65b44f2f4e42b8f891ef636ab1bd5f463a9507cfa1610f2efc54766faec1089acb689e5e9c8571f123dec6d5637abe8c752a0f9f42c21e5df8a8ecdf5d82113596d13cbd390ae3e247bd8daac6f57d18ea541f3e85843cbbf151d9bebb04226b2da2797a7215c7c48f7b1b558deafa31d4a83e7d0b087977e2a3b37d760105fbe612591d0fa85beb9e759c8d9b80b88969207d145620f2efc55766faebf20bf7cc24b23a1f50b7d73ceb391b37017112d240fa28ac41e5df8aaecdf5d7e417ef984964743ea16fae79d672366e02e225a481f4515883cbbf155d9bebafc0f104bb602f10a8bfabbf732c4a4f5bb0887108d3e8bcf117977e2acb37d75f71e20976c05e21517f577ee658949eb76110e211a7d179e22f2efc55966faebee3c412ed80bc42a2feaefdccb1293d6ec221c4234fa2f3c45e5df8ab2cdf5d7dc0494b65cedead717a2a5e18e1b85d5d2f07ae066f4601c8ccbbf15669bebafb709296cb9dbd5ae2f454bc31c370baba5e0f5c0cde8c03919977e2acd37d75f6e1252d973b7ab5c5e8a9786386e17574bc1eb819bd18072332efc559a6faebedc24a5b2e76f56b8bd152f0c70dc2eae9783d70337a300e4665df8ab34df5d7db8494b65cedead717a2a5e18e1b85d5d2f07ae066f4601c8ccbbf15669bebafb701ea9244a93bd65ac218259bb6718e258bb9e68db8c05359a77e2acd47d75f6df3d524895277acb584304b376ce31c4b1773cd1b7180a6b34efc559a8faebedbe06b6e9d72558196852cf8ee592c1b15d9abbff6b30167a6adf8ab352f5d7db7b0d6dd3ae4ab032d0a59f1dcb258362bb3577fed6602cf4d5bf1566a5ebafb6f61adba75c956065a14b3e3b964b06c5766aeffdacc059e9ab7e2acd4bd75f6dec35b74eb92ac0cb42967c772c960d8aecd5dffb5980b3d356fc559a97aebedbd86b6e9d72558196852cf8ee592c1b15d9abbff6b30167a6adf8ab352f5d7db7b062ef93918165afc226b804aa4e9453ae03c2496302d0f15cf1566a5fbafb6f5f51f17fcfd92de23c1a36314c9386cf56b3c6eec305a386bae2acd4c075f6debd2ff5584c88be473001328a911d6bc6a813d039830b48b176c559a981ebedbd795feab099117c8e60026515223ad78d5027a07306169162ed8ab35303d7db7af24be7b9def95b9f77d190523c6c0d429afb8342092d2469dc1566a608afb6f5e323e1cc6ac919c1a76fe6cc70ce78ad30a348e00f5a4a77b92acd4c125f6debc547c398d59233834edfcd98e19cf15a614691c01eb494ef72559a9824bedbd78a1b998a57fac989558c6159bb3040dcbd3965dc3a692b82e5ab35304a7db7af13373314aff59312ab18c2b3766081b97a72cbb874d25705cb566a6094fb6f5e266e66295feb262556318566ecc10372f4e59770e9a4ae0b96acd4c129f6debc4c68deab6cacaecd642fd0f5d178650de477713dd0495dbb2e59a98254edbd78975dcfaf862fc01d802c68139ae72843c39b24d79d92bd1a5db35304aadb7af12d47b1b7b935e2bdb825964f2dc4aeaf81e28c0b38257bd8bc66a60956b6f5e2591b75c81f4227fe2817f2c6537fbb86fe715a726d4af95579cd4c12ae6debc4b136eb903e844ffc502fe58ca6ff770dfce2b4e4da95f2aaf39a98255cdbd789626dd7207d089ff8a05fcb194dfeee1bf9c569c9b52be555e735304ab9b7af12c467c099a6e7a273f88c5c5a93f43a5fee3715ef6757cc4fcf6a6095746f5e25875b938bfaa5a76aa8e57edd1fded2e7d71a6e3acbaf9a439fd4c12ae9debc4b0d433970a221b1580997c3e237b403f7a8e11ed1945f362b40a98255d4bd789619128539f119c532cafc4dec675e66174c6e7fff25be6dfa825304abaa7af12c31250a73e2338a6595f89bd8cebccc2e98dcfffe4b7cdbf504a6095754f5e258624a14e7c46714cb2bf137b19d79985d31b9fffc96f9b7ea094c12aea9ebc4b0c4203c2835a48c190faf358b32e98ee25e2042552af371781398255d54d78961874078506b4918321f5e6b1665d31dc4bc4084aa55e6e2f027304abaa9af12c30e0d02f9836892e6f6899c54c39c99b1732d4bb0a8cdc7844f609575545e25861b1a05f306d125cded1338a987393362e65a9761519b8f089ec12aeaa8bc4b0c36340be60da24b9bda2671530e7266c5ccb52ec2a3371e113d8255d5517896186c6817cc1b449737b44ce2a61ce4cd8b996a5d85466e3c227b04abaaa2f12c30d85c41f0e35f90f220668b7431bff93f2d80fd6689dc79e8f709575546e25861af44963a73958466f899dd105b7650a655ae3d2910b8f575ef12aeaa8ec4b0c35d153ecd94016b50a9008048aee2ff74a608bcae1e71ec8fdf255d551e896186b92a7d9b2802d6a1520100915dc5fee94c11795c3ce3d91fbe4abaaa3d12c30d7254fb365005ad42a4020122bb8bfdd29822f2b879c7b23f7c9575547a25861ae43608c54ce1bd07ffd0c86d6f0e59cd2af227ccf08f6622fa2aeaa8f54b0c35c76c118a99c37a0fffa190dade1cb39a55e44f99e11ecc45f455d551ea96186b8e64356de05d56a2b70fe7ddb42fc55ca674e18fbf3d9a2fe9abaaa3d62c30d71b547d346d910fc825ec95e36055e8e14796057b7b7b3603d4575547ad5861ae35350cc187f8821303a5f1eeb8a22fea89d84d52f3f66daba9aeaa8f5bb0c35c696a19830ff10426074be3dd71445fd513b09aa5e7ecdb57535d551eb76186b8d260455eccb86acec6648de2da7f1dd2220d77a7ccd9b852a7baaa3d6fc30d71a34c9d16464738204495e1edacf499cc3ec731ab96b372495075547ae0861ae345254c853964d2c340f88a0351df91c0783aa5b32a66e636a1eaa8f5c20c35c6894a990a72c9a58681f11406a3bf2380f0754b6654cdcc6d43d551eb84186b8d1221446d9269ad8fbbaeee353f74a529db96d928a69b9a7e88aaa3d70930d71a234288db24d35b1f775ddc6a7ee94a53b72db2514d3734fd115547ae1261ae344611240ef67d18c1a6887efcf5c8f2cf6907a6fe976e6b9e23aa8f5c25c35c688b22481decfa31834d10fdf9eb91e59ed20f4dfd2edcd73c47551eb84b86b8d11644903bd9f463069a21fbf3d723cb3da41e9bfa5db9ae788eaa3d70970d71a22c1532d060bf288fec10be0fa63df4a342e97a50b8735e951e547ae12f1ae344572a65a0c17e511fd8217c1f4c7be94685d2f4a170e6bd2a3ca8f5c25e35c688ae54cb4182fca23fb042f83e98f7d28d0ba5e942e1cd7a547951eb84bc6b8d115c35a8dbb2cfa7021852b6a529e6034211f814e1c09af64cf3a3d70979d71a22b76b51b7659f4e0430a56d4a53cc068423f029c38135ec99e747ae12f3ae34456e62b5c77814fe8b1917a0bc9f8e6b30428c95e2ff6bdad7cf8f5c25e85c688adb517de79d005f98e9fc07a1371334887fc56e21fbd7b753a01eb84bd1b8d115b52f0e27e6d721b48bc4d56a661cc738fa371e9ff4af704b413d7097a471a22b695e1c4fcdae43691789aad4cc398e71f46e3d3fe95ee096827ae12f48e34456d2484af84832e954e6e01bd190697b0be388bcdbcfbdc2d105f5c25e92c688ada31ca8493d3c352c858cfdcb18c9543fc1bdbc139c7b87460ceb84bd268d115b453950927a786a590b19fb963192a87f837b782738f70e8c19d7097a4d1a22b68a72a124f4f0d4b21633f72c632550ff06f6f04e71ee1d1833ae12f49a34456d147154a296b80be6e434b480be410026089a22f8e0dc3bd4685c25e935688ada276ebb9dda467a5080362f2974785e740be0884dbeb8794cd1b84bd26bd115b44d69899461635723b839247ae0e71b10126d52f77a70f43da47097a4d8a22b68995f25816f9d10ca283f0f1db9c494481f86e84af1e1ea1f49e12f49b24456d1314a5d5b8c108417084ae4636b7f86b839ba12f1e0c3d5e294c25e936588ada26120cd0fc4f76ab0c8628eeecef56b986e20683fbe87ad692a84bd26cc115b44c1419a1f89eed56190c51ddd9dead730dc40d07f7d0f5ad255097a4d9822b689820f4697c0b40d45d95701e333cc0c89b32de35af71eb748ab12f49b31456d13031e8d2f81681a8bb2ae03c667981913665bc6b5ee3d6e915625e936628ada26063d1a5f02d03517655c078ccf303226ccb78d6bdc7add22ac4bd26cc515b44c0c064716b276ccb18284d5419656c275941b5d33b5f5bbe95997a4d98b2b6898170c8e2d64ed99630509aa832cad84eb2836ba676beb77d2b32f49b31656d1302e191c5ac9db32c60a135506595b09d6506d74ced7d6efa5665e93662cada2605c3238b593b6658c1426aa0cb2b613aca0dae99dafaddf4accbd26cc595b44c0b864716b276ccb18284d5419656c275941b5d33b5f5bbe95997a4d98b2b689817054f52efbaff8b308676e5ac2ceacda7e17e8d2bbb77ecf33f49b31666d1302df35fcb6a43653e8c89ba2dd7d93b7dcf6dc1401746eff4268e93662cdda2605bd6bf96d486ca7d1913745bafb276fb9edb82802e8ddfe84d1d26cc59bb44c0b7a6405333dafb225da3b519dee453d9bd61c9261cebbfeada4a4d98b38689816f3541cbf2835c6ce6c436963d480d95fa6e5671f9a77feff4a49b31671d1302de5344bd6fd41f01f905398efa0f810e74877109b31efffa29593662ce4a2605bc96897adfa83e03f20a731df41f021ce90ee213663dfff452b26cc59c944c0b7925d41b4a1de2300f91b29e67bd6a1c51c8884c8c4c0002e574d98b39389816f234695c1f092a884aa0319f4efa3a1b233bd4bed86800200af9b3167281302de45193ddc8dfbb38c0bd2fa11d73da18c6226da370a0005a5603662ce512605bc89327bb91bf7671817a5f423ae7b4318c44db46e14000b4ac06cc59ca24c0b791264f77237eece302f4be8475cf68631889b68dc2800169580d98b39449816f22456013d1cb3fee3166496b6b1e36a8b0be314144d002ecf02b316728a302de4473814d2e63e6048e495f3955bbd333e12726a8497005f4206662ce515605bc88d7029a5cc7cc091c92be72ab77a667c24e4d5092e00be840ccc59ca2ac0b7911a6c65a445cfe3a64a24947d66eb2b204475ec6e59017eac1a98b39456816f223364dda1387629cf4c15ef22c5ccb46883981b38af02fefc36316728ae02de446555cd9b1dc2b6214ff8a46d838fc6f901dc78cd5b05ff9c6d62ce515d05bc88c937ad8ee85bcec557be0f02ff15ec19fe6533f6b30c00dcdbc59ca2bb0b7911916f5b1dd0b79d8aaf7c1e05fe2bd833fcca67ed661801b9b78b39457616f223226ac8944e459d9816c50233f44e0e8ff4411236c93005177016728aed2de4464361a38149619db2e556ca8fe0927b47e32e66c98f600bd2e12ce515db5bc88c854f595b3f999de8827a5b47b91b54b7c1090fef1bc01949c359ca2bb7b79119092ac50f2c099e53bcc17cb76a2d07977cbe623a3480343787b39457706f223211558a1e58133ca77982f96ed45a0f2ef97cc4746900686f0f6728aee0de4464223726955cfcdbd1aad2b905a0aa7c85eda5cb44cf00d2821fce515dc2bc88c8436e4d2ab9f9b7a355a5720b4154f90bdb4b96899e01a5043f9ca2bb857911908668acae20c9d1c96317aa3e7aa0503fb1436f6f39034bac803945770bf223210b5d6bb4ee6a06157dfc1aa4ed36fea75d33213a6f0698fd01728aee18e446421546e9c289aa6eadb3c4fb71d2645b76b51284d0db0d339e03e515dc32c88c842919e5ddc02b3fde1f56bd0b9cbf151564d14bfdb31a68e008ca2bb8669119085133cbbb80567fbc3ead7a17397e2a2ac9a297fb6634d1c011945770cd223210a267977700acff787d5af42e72fc545593452ff6cc69a3802328aee19a446421445b4146ae306173b282ae84ddef06d32136a24995d348a447515dc33588c842874294e60937256a1cd22331b3d46bce3d1986ef28a692ec8fa2bb866c1190850d113c24bf44ad56f1710c8b5f9f35c474df503a4e4d277d2045770cd923210a192278497e895aade2e21916bf3e6b88e9bea0749c9a4efa408aee19b24642143244f092fd12b55bc5c4322d7e7cd711d37d40e939349df48115dc33648c84286415f37ea6fbcd3a43552a82f4f00c4ba1a6c42e6f693d8d032bb866ca190850c72be6fd4df79a7486aa5505e9e01897434d885cded27b1a065770cd943210a18e57cdfa9bef34e90d54aa0bd3c0312e869b10b9bda4f6340caee19b286421431c3bae4de4b4cc54d2761a3f9f76c08507e263cf7849ee0c1a5dc33651c8428637036ef4763ffb2c5cb8faa736e3df320a7109faed93ddbc35bb866ca490850c6d06dde8ec7ff658b971f54e6dc7be6414e213f5db27bb786b770cd949210a18da0dbbd1d8ffecb172e3ea9cdb8f7cc829c427ebb64f76f0d6ee19b292421431b41b77a3b1ffd962e5c7d539b71ef99053884fd76c9eede1addc3365248428636836ef4763ffb2c5cb8faa736e3df320a7109faed93ddbc35bb866ca490850c6d06dde8ec7ff658b971f54e6dc7be6414e213f5db27bb786b770cd949210a18da067cf763cd52d99e60b6ff5b0ee2aaa96eec11761f770b16fe19b292521431b3f5bb1452680bdb683e3a61359d2b37d2889c48ac0eee306e0c336524b4286367d4374e2f9d7ddefbf94124eab9bc5224bbfcb717eddc7b1c2866ca497850c6cf912fc1ea0861e6236f4eac54f2de86c922bd93efabb9107860cd949300a18d9f125f83d410c3cc46de9d58a9e5bd0d92457b27df577220f0c19b292601431b3e24bf07a82187988dbd3ab153cb7a1b248af64fbeaee441e18336524c0286367c423f34db10755946f741c527165a18c8c0b0c53d2dc89e03166ca498150c6cf8747e69b620eab28dee838a4e2cb4319181618a7a5b913c062cd949302a18d9f0e1bdf8f70f3b8d4759d3771bd8ce45a2ad873ab48722924c69b292606431b3e1b37bf1ee1e771a8eb3a6ee37b19c8b455b0e75690e452498d36524c0c86367c366f7e3dc3cee351d674ddc6f6339168ab61cead21c8a4931a6ca498190c6cf86c6b0ed43474292664b681b5e45d80f9516fdfb640914aca35d949303318d9f0d762300115beb4cf8139c993c0b1601a9d8c01c87e2297386cb292606731b3e1ad50725ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c3592cf70e5d7dfac62c4d78c6eaa89ae26634ce35ef8a61cdb5ca49819fc6cf86b159ee1cbafbf58c589af18dd55135c4cc699c6bdf14c39b6b9493033f8d9f0d623fee9222ce4d9b6902a943a298c9b1937f7b33bb2988dad8292606801b3e1ac30bef7cf272fdb989d218af3d27f18b21ab38c373531359b1524c0d01367c358517def9e4e5fb7313a4315e7a4fe31643567186e6a626b362a4981a026cf86b0a2fbdf3c9cbf6e6274862bcf49fc62c86ace30dcd4c4d66c549303404d9f0d6145f7be79397edcc4e90c579e93f8c590d59c61b9a989acd8a92606809b3e1ac284b0a27d4063e1b54ee511bca7576da155fce933231373f1624c0d01467c3584f2226a854e2deb961a9685f8ce14bdc256bdf82616270222d4981a029cf86b09d444d50a9c5bd72c352d0bf19c297b84ad7bf04c2c4e0445a930340539f0d613a14acfa0061dd683e7267a62b7b8d98905bc0658289c22cb6260680a83e1ac273" + ValidBlob1Hex string = "824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffc6092c566b31415be66313fbfb2f13fd56212dfe8000d200800000007fffffff84d37e37a3c8aae349928a7775c40a7a570681bcd001be41100000010ffffffef26821fa14f77df20ff1776e6aedf77458d12939700396c2300000022ffffffdd4d043f429eefbe41fe2eedcd5dbeee8b1a25272e0072d84600000045ffffffba261ad7321441ff3bc9240392b1dc0510e08caa5900e7548d0000008cffffff734c35ae642883fe779248072563b80a21c11954b201cea91a00000119fffffee6247db575276a7fa6f1563642bdce3c3e2e750561039ef63500000234fffffdcb48fb6aea4ed4ff4de2ac6c857b9c787c5cea0ac2073dec6a00000469fffffb961e092e81740c8153921f0102ed9718f3661671810e7d7cd5000008d4fffff72b3c125d02e81902a7243e0205db2e31e6cc2ce3021cfaf9aa000011a9ffffee56043712b2a694880615422c03acba8bc8449c220139f7975500002354ffffdcab086e25654d29100c2a845807597517908938440273ef2eaa000046a9ffffb95610dc4aca9a5220185508b00eb2ea2f2112708804e7de5d5400008d53ffff72ac21b8959534a44030aa11601d65d45e4224e11009cfbcbaa800011aa7fffee55843712b2a694880615422c03acba8bc8449c220139f7975500002354ffffdcab012f4af01a8f3837a750ba86d8dafa1033fc69c243ef48ea100046aa0fffb955f25e95e0351e706f4ea1750db1b5f42067f8d38487de91d420008d541fff72abe4bd2bc06a3ce0de9d42ea1b636be840cff1a7090fbd23a840011aa83ffee557c23b7d0ba1dfe9e8b75236b6463db3014aa773d1ef7a6190900235508ffdcaaf7476fa1743bfd3d16ea46d6c8c7b6602954ee7a3def4c32120046aa11ffb955ee1af19b954e5cfce5a153d58985cae84d561f5078de9a0825008d5424ff72abdb35e3372a9cb9f9cb42a7ab130b95d09aac3ea0f1bd34104a011aa849fee557b66bc66e553973f396854f5626172ba135587d41e37a68209402355093fdcaaf6c639f3557494a69e4d764d44424b56a655d3cdfc3f4d1e529046aa128fb955ed75350c35b68f756817b8fd0803fc8fcc566bc1b84e9a56e5308d54252f72abdad32b3df63a8512fbac3e5c8f875f0218579ba9306d34c80a711aa84a6ee557b596567bec750a25f7587cb91f0ebe0430af375260da699014e2355094ddcaaf6b256e1d63b77a741a2dc5d4bd9ce1eae10932ca8184d33a69d46aa129cb955ed6339d60523c5b105fd8580bfab929b841bd29bac2d9a68f13b8d54253a72abdac573ac0a478b620bfb0b017f5725370837a537585b34d1e2771aa84a74e557b58a736a6d3bed269aade2c926a640cc3869f6b10cb369a568ef355094eacaaf6b1372e73324b0afb8139258754477f698ce99a47563d34c75df6aa129d6955ed62571e0bef637c1f2def1771280e64b5997df8b46c4a69a8fbfd54253ae2abdac496fd3d69945e66875afb44cf9c2f4db2a6b58e9864d36c380aa84a75d557b58916bba05df622f53a32c2ec1eb7c47de4f82f42f099a6f2b0255094ebbaaf6b1216386646b9ac129fe2523abceeeede499b22aba1034dffa05aa129d7855ed6241531f21840be4d6b4170d7f95d439f12e1097d01d69c1980c54253af1abdac48132509bb4ee2c301ffae127239ed20a56cd71fc37d384d419a84a75e457b5890164a13769dc58603ff5c24e473da414ad9ae3f86fa709a8335094ebc8af6b12025554c7808f134337b84ac48671a65155e20a4cdc4e14f467a129d7925ed6240336bbe7adf48909273d5bb104d9aacaa67056f5b59c2b8cd04253af25bdac48056d77cf5be912124e7ab76209b355954ce0adeb6b385719a084a75e4b7b58900a6701f764a886a754c234ec0b5d0952946d9e32d370afd742094ebc97f6b120135a164776276fd1615130000eb070cd23877ec1a3e1615285129d7930ed624025403ee7992542257a6f262815573fc241bb3fdf44c2c4490b253af262dac480490c9027df20e6cdacab127822a4ddac7e22c21a86858a36174a75e4c6b589009119204fbe41cd9b595624f04549bb58fc4584350d0b146c2e94ebc98d6b12012232409f7c839b36b2ac49e08a9376b1f88b086a1a1628d85d29d7931ad624024464813ef907366d655893c11526ed63f11610d4342c51b0ba53af2635ac4804885514d69ee4cf5d827dedaa224438efdcd864046558a50575a75e4c6c5890090f363c05eaa0013dbcc8a17c3c7ed007b45d0a64c7b14baeec4ebc98d9b120121d6c780bd540027b799142f878fda00f68ba14c98f62975dd89d7931b36240243a65027057566779aaef4c18e9f19e46cc206bef1bc5305fb23af26367c48048735617395b8331760dab5e59cbd99ab592ed1a3a348a62636575e4c6d0890090e53840cb63dcc56ed32382db8fa99393208676d06614c66acbebc98da2120121c9708196c7b98adda64705b71f532726410ceda0cc298cd597d7931b44240243926d15863c49783e045ad196369cac747cc61d9d95531b4f30af26368948048723663d65256952fec0826954652fb710f4387d9727a63842625e4c6d1390090e45588d22f7a9088038d198d0c255cc49e31d3d8a4c4c7228c5bc98da2820121c893d2c9e9c287383296ff7c97ca1f6bbc0e6bd709598e5f58c7931b45140243911066b95e52749890aacb5baf13a4b9f7c79bd3d2831cd8f19f26368a3804872210cd72bca4e931215596b75e274973ef8f37a7a50639b1e33e4c6d1470090e44219ae57949d26242ab2d6ebc4e92e7df1e6f4f4a0c7363c67c98da28e0121c884335caf293a4c485565add789d25cfbe3cde9e9418e6c78cf931b451c0243910866b95e52749890aacb5baf13a4b9f7c79bd3d2831cd8f19f26368a380487221059851551bf93a40d637d861f3fd21789e3ea010339b3873f4c6d1471090e441f3f1c83505589cad293c134367602570e74165e037368b27f98da28e3121c883d0a4b5f4d8176185cf4489064e262d617946f1803e6d3090031b451c7243910791496be9b02ec30b9e89120c9c4c5ac2f28de3007cda612006368a38e487220f2292d7d3605d86173d1224193898b585e51bc600f9b4c2400c6d1471c90e441e4525afa6c0bb0c2e7a24483271316b0bca378c01f369848018da28e3921c883c830c84d84edc40887114f2e461c8b8973f333dc3b6d3234041b451c734391078f61909b09db88110e229e5c8c391712e7e667b876da646808368a38e687220f1e4f338ec08d72a4d41202e110688c4dca7911cceab4ca74116d1471ce0e441e3b2a79762df147cc5ff0cbea18c776c38f9e65f5d269968c23da28e39d1c883c7554f2ec5be28f98bfe197d4318eed871f3ccbeba4d32d1847b451c73a391078ea35f831649b81b4378ff5d05b1439363925da3346a65bd49068a38e757220f1d36bf062c93703686f1feba0b628726c724bb4668d4cb7a920d1471ceae441e3a663f31e3f446953960c9d6964474300df43ab29179970f642a28e39d6c883c74b53f8952b5f3529e3e600fac084e429b93398ae2c32e39086451c73ae91078e953403830394ccd67f98c81d7900267b6d1373b85565c8c50d8a38e75e220f1d29680706072999acff31903af2004cf6da26e770aacb918a1b1471cebc441e3a525c2064bb2995dcb62fe69ddbf6f815aefa113d529724b83728e39d79883c74a344532223298e3c242c9363afe44e5358a064d6a22e4b146f51c73af41078e94514b89cf3297efb0025ecef57befaceabed0c09415c97ccdfa38e75e920f1d289297139e652fdf6004bd9deaf7df59d57da181282b92f99bf471cebd241e3a51252e273cca5fbec0097b3bd5efbeb3aafb4302505725f337e8e39d7a483c74a2431d74046225a5ab8fc2da2b5ee349d5a14a2a607e4c00afe1c73af4a078e944763ae808c44b4b571f85b456bdc693ab429454c0fc98015fc38e75e940f1d288e536f59c55fcbed9bbd7cb2cfaf309d62feccf41c9301cff971cebd291e3a511b32f10c3795fa5def47bf8d9754bf62c0a9dc4436260543f3e39d7a533c74a23565e2186f2bf4bbde8f7f1b2ea97ec58153b8886c4c0a87e7c73af4a678e9446a57d6898b2e4bfa74ebc45e55495bb2fd53b36cd59816b3d08e75e94df1d288d33bbf6bc332fa77a1a44ee4a289158df553a935a8302f0ba21cebd29ce3a511a5039130333c5771fb1563f13d088943e55394c74d605fbb4539d7a53ac74a23490722606678aee3f62ac7e27a111287caa7298e9ac0bf768a73af4a758e9446920e44c0ccf15dc7ec558fc4f422250f954e531d35817eed14e75e94eb1d288d241c898199e2bb8fd8ab1f89e8444a1f2a9ca63a6b02fdda29cebd29d63a511a4839130333c5771fb1563f13d088943e55394c74d605fbb4539d7a53ac74a23490722606678aee3f62ac7e27a111287caa7298e9ac0bf768a73af4a758e9446920705e657bec3f017d25c2773a18af214f91742f5517f0754f75e94eb2d288d23f6ccf23a4aee085b2184b166c27bc6a99cf2abaa72fe28e9febd29d66a511a47d65b09ff634238e1bfd5c54d045d6fd2e4a97d14b5fc6c140d7a53ace4a2348f9577398993ea99eefc77ed198820c22574171fe93bf8f2682af4a759d944691f13af989df53b5c0975bc3cb28fa766ca92f2659247f1ff1065e94eb3c288d23e102056c6b7dce03e6844dbe49eb4b014d0a8f0e45fe41860dbd29d679511a47c1040ad8d6fb9c07cd089b7c93d696029a151e1c8bfc830c1b7a53acf2a2348f820815b1adf7380f9a1136f927ad2c05342a3c3917f9061836f4a759e544691f04102b635bee701f34226df24f5a580a685478722ff20c306de94eb3ca88d23e082056c6b7dce03e6844dbe49eb4b014d0a8f0e45fe41860dbd29d679511a47c1040ad8d6fb9c07cd089b7c93d696029a151e1c8bfc830c1b7a53acf2a2348f8200d6d738c49e37c58e035ba72c91e7b3d5005ed7c906327704a759e554691f03f1adae71893c6f8b1c06b74e5923cf67aa00bdaf920c64ee094eb3caa8d23e07e35b5ce31278df16380d6e9cb2479ecf54017b5f2418c9dc129d679551a47c0fc6b6b9c624f1be2c701add39648f3d9ea802f6be483193b8253acf2aa348f81f862e99171749a4845d021cf248845dbcfaca133c606341b05a759e555691f03ef51e57b8fbf9713436d09c64106e9df9a0584c3890c69da0c4eb3caabd23e07dd2fdd4fcc5590a93ea6d9b47a0431e72eb74be30f18d558199d679558a47c0fb95fba9f98ab21527d4db368f40863ce5d6e97c61e31aab0333acf2ab148f81f724b8797de2ca527b2682cf9e00725c4b58971e83963570467759e556391f03ee3232188692facd21c9d201bb804a9b165bf262c6fc6afaccfeb3caac823e07dc5464310d25f59a4393a403770095362cb7e4c58df8d5f599fd679559047c0fb8a18987a519515cb2a414696d80904ed91a8db0dbc1ac05740acf2ab218f81f7133130f4a32a2b9654828d2db01209db2351b61b783580ae8159e556431f03ee266261e94654572ca9051a5b602413b646a36c36f06b015d02b3caac863e07dc4c50d62b397f10dc09d6fadeb83e859487f31ac9ddd6045e066795590d7c0fb8972dbeaf1fd4843acb7abbe5687369510a9277efb8ac0a600dcf2ab21bf81f712d5b7d5e3fa9087596f577cad0e6d2a21524efdf715814c01b9e556437f03ee25a430d152c28736de5b7b5bd99c4036c24f6221adfb02b24383caac870e07dc4b3122c830527495e833c31a32b7e650044988691bc6057ec71795590e2c0fb89652459060a4e92bd0678634656fcca0089310d2378c0afd8e2f2ab21c581f712ca48b20c149d257a0cf0c68cadf9940112621a46f1815fb1c5e556438b03ee25941d7670d610ad76d1ae534153e9862a1f7076e9e002c1078ccaac871707dc4b273aece1ac215aeda35ca682a7d30c543ee0edd3c005820f1995590e2e0fb8964e01ec1c0519185dfe86132d479c76d0786e1e037d0b05c2342ab21c5d1f712c9b03d8380a3230bbfd0c265a8f38eda0f0dc3c06fa160b8468556438ba3ee2593607b07014646177fa184cb51e71db41e1b8780df42c1708d0aac871747dc4b26c0f60e028c8c2eff430996a3ce3b683c370f01be8582e11a15590e2e8fb8964d81ec1c0519185dfe86132d479c76d0786e1e037d0b05c2342ab21c5d1f712c9b03d8380a3230bbfd0c265a8f38eda0f0dc3c06fa160b8468556438ba3ee259360071959f31c7a0259519179df1412461633c33b3fc172310bac871748dc4b26bf0e32b3e638f404b2a322f3be28248c2c6786767f82e46217590e2e91b8964d7e1c6567cc71e809654645e77c50491858cf0cecff05c8c42eb21c5d23712c9afc38cacf98e3d012ca8c8bcef8a09230b19e19d9fe0b91885d6438ba46e25935f871959f31c7a0259519179df1412461633c33b3fc172310bac871748dc4b26bf06f3d971065a2cde1fef563da78a6eac124a9c3f52e47c57690e2e91c8964d7df6a8d86cda1a81e7bcab0eface7abfd7cf595e3e75c912eee21c5d23a12c9afbd612d664819b2bfaf62280751c5b622f4976e23cbb92401dd438ba47525935f794e6d253d09c802169116369b81ca6de3db1ea3947249a7bb871748eb4b26bef128eca326e9f286e4eef2952ef9f303c2627fa325e494f3780e2e91d7964d7de151d9464dd3e50dc9dde52a5df3e60784c4ff464bc929e6f01c5d23af2c9afbc22fc4e5487e2c9e4b88907cb3de2a37043640e894925571e138ba475f5935f7835f89ca90fc593c971120f967bc546e086c81d12924aae3c271748ebeb26bef064b25edcecf14fbe5ef081ac76f07040b8545fe4f49576b85e2e91d7e64d7de0b225e344a748c7a83aad65d86d46c3011b6ce589b92b07b0cc5d23afdc9afbc1544bc6894e918f50755acbb0da8d860236d9cb1372560f6198ba475fb935f782a158b29d6a8946cc6781f9e13480ee841877bbe6b4ac390341748ebf826bef0532b1653ad5128d98cf03f3c26901dd0830ef77cd6958720682e91d7f04d7de0a6562ca75aa251b319e07e784d203ba1061deef9ad2b0e40d05d23afe09afbc14c386ba7621b05e8eb8dc3189236d56a06e8204f57561e25a1ba475fc235f7829770d74ec4360bd1d71b8631246daad40dd0409eaeac3c4b43748ebf846bef052e6dc0f635427a266603d28a40d1b3d0164cc3995a587a3a87e91d7f09d7de0a5b679445175b56cf83d46b3c7999c5c82745c98eb1b0f61910d23afe14afbc14b55b3ae2db8d1021bf759ca0eb29e9b84937d5796061edd622a475fc2a5f78296942881e63f082c636b7ff69ce4a31988d1bed4ebdc3dd504648ebf855bef052d111229574b7680f253cc4fb948ac15914e41cf97887bc448d91d7f0ac7de0a5a122452ae96ed01e4a7989f7291582b229c839f2f10f78891b23afe158fbc14b42448a55d2dda03c94f313ee522b0564539073e5e21ef11236475fc2b1f78296841527045291a2fbe1b2ee049c4c68f0a1cd2a27c13de3c86d8ebf8564ef052d072a4e08a52345f7c365dc093898d1e1439a544f827bc790db1d7f0ac9de0a5a0e549c114a468bef86cbb8127131a3c28734a89f04f78f21b63afe1593bc14b41c354a7b41637a61c564364cda59a5ad0915939a06ef1fe76d75fc2b28782968376a94f682c6f4c38ac86c99b4b34b5a122b27340dde3fcedaebf85650f052d06e613c45b2644c09cd5d9f5b615cf4dc1f0290c418bc8141b6d7f0aca2e0a5a0db4e8ae4119efa96528804debab047e038b163e42e7904276eafe15946c14b41b5292820d01457af5cdccfe56d56ede86c0f0a2459f209f2de5fc2b28e82968369525041a028af5eb9b99fcadaaddbd0d81e1448b3e413e5bcbf85651d052d06d230b2dbed27c1402b4005bdad5215c9aae86aed64c8296f7a7f0aca3b0a5a0da36165b7da4f828056800b7b5aa42b9355d0d5dac99052def4fe15947614b41b464eddc86175678364ccdd1ead3eb54ea64dee119020a761eafc2b28ed2968368b29cde96fc13189816680655273c8c547481e7f1d415067d6f85651db52d06d15539bd2df82631302cd00caa4e7918a8e903cfe3a82a0cfadf0aca3b6a5a0da2a3349fe6bdb28a8bd66c7bd41c5813d17ccbc58720543435ce159476e4b41b4536693fcd7b651517acd8f7a838b027a2f9978b0e40a8686b9c2b28edc968368a6593a525c430525ad67e51cff0c631c59df33bdc5150eb17485651dba2d06d14b3e86fd655c6cce129c9061f60f2460ae6aa9d7872a1f06ea0aca3b755a0da295092053778f3c1edd05e6ebe414a6e95781960b0b543fb1d5159476ebb41b45291240a6ef1e783dba0bcdd7c8294dd2af032c1616a87f63aa2b28edd768368a5224814dde3cf07b74179baf90529ba55e06582c2d50fec7545651dbaed06d14a449029bbc79e0f6e82f375f20a5374abc0cb0585aa1fd8ea8aca3b75da0da29481e179025ca2470882b34e63940ccbd72c5a30cb243fcc15259476ebc41b4528f3c2f204b9448e1105669cc7281997ae58b46196487f982a4b28edd788368a51e04709943fef444d87999c0dcf9911dc5c2ce8ec60ff4a94a651dbaf206d14a3b08e13287fde889b0f33381b9f3223b8b859d1d8c1fe95294ca3b75e40da2947611c2650ffbd11361e6670373e64477170b3a3b183fd2a5299476ebc81b4528ec2384ca1ff7a226c3ccce06e7cc88ee2e167476307fa54a5328edd790368a51d84709943fef444d87999c0dcf9911dc5c2ce8ec60ff4a94a651dbaf206d14a3b01a25812cb4eb1dc6fffe43972881e0b3061434befe96cd4da3b75e41da29475f344b025969d63b8dfffc872e5103c1660c28697dfd2d9a9b476ebc83b4528ebe689604b2d3ac771bfff90e5ca20782cc1850d2fbfa5b35368edd790768a51d7c5d3e62127dbb70efccb844b13a6d2d92dce401f4f4b80e6e1dbaf20fd14a3af7468f1cd1d1d964976636b15a6b388320660a5fe6e971c0dd3b75e420a29475ed193092507a154be699338aaccccf2e3b78571bcad2e525bb76ebc8424528ebd9326124a0f42a97cd32671559999e5c76f0ae3795a5ca4b76edd790848a51d7b264c24941e8552f9a64ce2ab3333cb8ede15c6f2b4b9496eddbaf210914a3af645596eb30a70ce1ec96627d5e5cd799d66efb3a53972ad1dcb75e421329475ec737402f0e247c4690f98b22b4b00d5ba78a38d0a42e5747ba6ebc8427528ebd8d6e805e1c48f88d21f3164569601ab74f1471a1485cae8f74dd79084ea51d7b1a691314e568539cfbb2f2b2cab6939698d5259e8db95ec2eabaf2109e4a3af6335e388277a709bcaf32ab8d8d6385552c568d991872bf29d675e4213d9475ec6548835d9c2475fc16321d4312bd68d253595d8e2de57ff7adebc8427c28ebd8c91d1913e51f4e7ae43100ae1d712fcca15efd7858cb01935cd79084f951d7b1913a3227ca3e9cf5c862015c3ae25f9942bdfaf0b1960326b9af2109f2a3af63220076a841539c6e4890c8e06dbb1d5a8028383d602c07f1745e4213e6475ec64300ed5082a738dc912191c0db763ab50050707ac0580fe2e8bc8427cc8ebd8c8601daa1054e71b922432381b6ec756a00a0e0f580b01fc5d179084f991d7b190c03b5420a9ce372448647036dd8ead40141c1eb01603f8ba2f2109f323af63218076a841539c6e4890c8e06dbb1d5a8028383d602c07f1745e4213e6475ec64300ed5082a738dc912191c0db763ab50050707ac0580fe2e8bc8427cc8ebd8c8601daa1054e71b922432381b6ec756a00a0e0f580b01fc5d179084f991d7b190c03b5420a9ce372448647036dd8ead40141c1eb01603f8ba2f2109f323af63218002ba9a0072d0cb4895a695b313b8a822e47fbc2907f3185f4213e6485ec642ff05753400e5a196912b4d2b6627715045c8ff78520fe630be8427cc90bd8c85fe0aea6801cb432d22569a56cc4ee2a08b91fef0a41fcc617d084f99217b190bfc15d4d00396865a44ad34ad989dc5411723fde1483f98c2fa109f3242f63217f82ba9a0072d0cb4895a695b313b8a822e47fbc2907f3185f4213e6485ec642ff05753400e5a196912b4d2b6627715045c8ff78520fe630be8427cc90bd8c85fe03ab8d8c98a9554dd366b94bce48830b3cc31663efcc7bbd184f99218b190bfbf01840a3feb8d2c72399d5171bf6e896244a5287af9911ba409f3243263217f7d0308147fd71a58e4733aa2e37edd12c4894a50f5f322374813e64864c642fefa061028ffae34b1c8e67545c6fdba25891294a1ebe6446e9027cc90c98c85fdf40c2051ff5c696391ccea8b8dfb744b12252943d7cc88dd204f992193190bfbe81840a3feb8d2c72399d5171bf6e896244a5287af9911ba409f3243263217f7d0308147fd71a58e4733aa2e37edd12c4894a50f5f322374813e64864c642fefa061028ffae34b1c8e67545c6fdba25891294a1ebe6446e9027cc90c98c85fdf404e1778a29cf8bbd49b6ee0d7ada2d91cfed69979c88f7605f992193290bfbe7f284149f21053fa6103a3e9a751a3da34a9ef8ef09120900cf3243266217f7cfd508293e420a7f4c20747d34ea347b46953df1de122412019e64864cc42fef9fa2d17807517b26c3bdb55ce953ced90cd540097bf4483e434cc90c99985fdf3f35a2f00ea2f64d877b6ab9d2a79db219aa8012f7e8907c869992193330bfbe7e640705a81352c33a73a1d624cea146b2ffc44bafa121134d43243266717f7cfcb0cf30daf40baea064100ec91ca86fe5aa4cbd1f124240da964864ccf2fef9f9519e61b5e8175d40c8201d923950dfcb54997a3e248481b52c90c999e5fdf3f2a33cc36bd02eba8190403b2472a1bf96a932f47c4909036a59219333cbfbe7e5467986d7a05d750320807648e5437f2d5265e8f8921206d4b243266797f7cfca85b4333a0e211231bdcd4f1149ece0da4f8ff7b0f42427e974864ccf3fef9f94f4298bfee9a84c8ef86700a2133fa43449e41521b8486a12f90c999e8fdf3f29d1143d88a0b6c1496d9a63c3a5e52ae83e8c50034090ee660219333d2fbe7e5392287b11416d8292db34c7874bca55d07d18a0068121dccc0432667a5f7cfca72450f62282db0525b6698f0e9794aba0fa31400d0243b9980864ccf4bef9f94e416311cfd31c3276e99f809cae8f39c19f26a5d9d4878d7020c999e98df3f29c72c6239fa63864edd33f01395d1e73833e4d4bb3a90f1ae0419333d31be7e538e58c473f4c70c9dba67e0272ba3ce7067c9a9767521e35c0832667a637cfca71c3d9b4096647bbe2c9c86764f3dfb08ca3f9548e743c85c1164ccf4c7f9f94e370748d9d99f59ff1105d314967254398f2b6cedcb87925c23c999e990f3f29c6d0e91b3b33eb3fe220ba6292ce4a8731e56d9db970f24b8479333d321e7e538da1d2367667d67fc44174c5259c950e63cadb3b72e1e49708f2667a643cfca71b43a46ceccfacff8882e98a4b392a1cc795b676e5c3c92e11e4ccf4c879f94e368009ff646cc0273c829f7715f1ba1c0ed631138b57927663d999e99103f29c6cf013fec8d9804e79053eee2be374381dac622716af24ecc7b333d32207e538d9e027fd91b3009cf20a7ddc57c6e8703b58c44e2d5e49d98f6667a6440fca71b3c04ffb23660139e414fbb8af8dd0e076b1889c5abc93b31ecccf4c881f94e367809ff646cc0273c829f7715f1ba1c0ed631138b57927663d999e99103f29c6cf013fec8d9804e79053eee2be374381dac622716af24ecc7b333d32207e538d9e027fd91b3009cf20a7ddc57c6e8703b58c44e2d5e49d98f6667a6440fca71b3c04ffb23660139e414fbb8af8dd0e076b1889c5abc93b31ecccf4c881f94e367802c089f78d8d64ae1c4378713981f155dbd7b11762767e19a9e99104029c6ceff58113ef1b1ac95c3886f0e27303e2abb7af622ec4ecfc3353d322080538d9dfe3c34d69039bbae3edda4444656da7d71a22ea1d59da12a6b7a644101a71b3bfb047c05cd49d9df35880eb084a41322ddf09f9fa83b43f8d7f4c882044e3677f508f80b9a93b3be6b101d6109482645bbe13f3f507687f1afe99104089c6cefea11f0173527677cd6203ac212904c8b77c27e7ea0ed0fe35fd322081138d9dfd423e02e6a4ecef9ac40758425209916ef84fcfd41da1fc6bfa644102271b3bfa847c05cd49d9df35880eb084a41322ddf09f9fa83b43f8d7f4c882044e3677f501b931256119e6968ce9c388c78c283b8c03651046880beff9910408ac6cefe9f372624ac233cd2d19d387118f1850771806ca208d1017dff322081158d9dfd3e6e4c49584679a5a33a70e231e30a0ee300d94411a202fbfe6441022b1b3bfa7c68aaeb5d6355cdfe41a7ec5bbc7245c0adf4e42044079bfdc88204573677f4f75d682f679d0e1eb4501600af6f42b37c082c243d8810dbfc910408af6cefe9ed46e2b77c107ec0206cf22956d4e38ef2bc9aa47810235bfa2208115fd9dfd3d919d7c7a4f76002f8a6aa7aa5a02545e02577a4ed20485bf5441022c0b3bfa7b133af8f49eec005f14d54f54b404a8bc04aef49da4090b7ea88204581677f4f62675f1e93dd800be29aa9ea968095178095de93b481216fd510408b02cefe9ec45ad095d491629a7d0219fd24f78856fbd7ff8366024483ab208116069dfd3d8741b38455f927b7b1d0fa2241e56ed5f25c4162c9048aab5741022c0e3bfa7b0d0f796158c8b1f21b6eba6c7bc13bd3df64c5218f0916faaf8204581d77f4f6191ef2c2b19163e436dd74d8f78277a7bec98a431e122df55f0408b03aefe9ec323de5856322c7c86dbae9b1ef04ef4f7d9314863c245beabe08116075dfd3d86407dd63731bf2139342998bd6003cc6f5d26b687548b9797d1022c0ecbfa7b0c70fbac6e637e42726853317ac00798deba4d6d0ea9172f2fa204581d97f4f618e1f758dcc6fc84e4d0a662f5800f31bd749ada1d522e5e5f4408b03b2fe9ec31c3eeb1b98df909c9a14cc5eb001e637ae935b43aa45cbcbe881160765fd3d863809e88fde9583bbebf65ee557fa2a9757d2f8e3518b993bd2022c0eccfa7b0c6f13d11fbd2b0777d7ecbdcaaff4552eafa5f1c6a3173277a404581d99f4f618de27a23f7a560eefafd97b955fe8aa5d5f4be38d462e64ef4808b03b33e9ec31bc4f447ef4ac1ddf5fb2f72abfd154babe97c71a8c5cc9de9011607667d3d863782a9b56962e9e417732b47d7799079d77dbd09115b995612122c0ecd0a7b0c6ef5536ad2c5d3c82ee6568faef320f3aefb7a1222b732ac2424581d9a14f618dde367fb30590db889497981dd65a7c9dda1b84a053e65728858b03b3439ec31bbb6cff660b21b711292f303bacb4f93bb4370940a7ccae510b160766873d863776661124c319d0a50a2b269f5160509f631a54dd4c995e46172c0ecd0f7b0c6eeb5834a2330a03cccc2313669ab6ff66c0e0ec169632be302f581d9a1ff618ddd53c7b9d12ea6a1c5012ecf52d645cf57c6e1a8929657e045fb03b3440ec31bba9050992d2ab36bb57f2a01252bf1812f388776e4fcafdacc060766882d86377510a1325a5566d76afe54024a57e3025e710eedc9f95fb5980c0ecd105b0c6eea214264b4aacdaed5fca80494afc604bce21ddb93f2bf6b30181d9a20b618ddd44284c969559b5dabf95009295f8c0979c43bb727e57ed660303b34416c31bba8850992d2ab36bb57f2a01252bf1812f388776e4fcafdacc060766882d863775102d44b3023d39edb620c8724fd960866bbb3025f65fb73c0d0ecd105c0c6eea1f5a8966047a73db6c4190e49fb2c10cd776604becbf6e781a1d9a20b818ddd43e412524b5cb4a39904fe7f1375be041a99902f3d67ede94353b34417131bba87b0e5ca2186cf6f5d86c960a66ae1eab4dde4843a9fdbecc6b766882e3637750f51cb94430d9edebb0d92c14cd5c3d569bbc908753fb7d98d6ecd105c6c6eea1ea39728861b3dbd761b258299ab87aad3779210ea7f6fb31add9a20b8d8ddd43d472e510c367b7aec364b0533570f55a6ef2421d4fedf6635bb344171b1bba87a871dc7a33a5d1e03e9626ce62d848dcd890c6969cdbee6ab866882e3737750f4f6fcb4d1422064334f913c4bda6efe1abcdcf8936b7de7971cd105c6f6eea1e9d6ba8f2d51a6f0921beedb173443deb5247e16e6a6fbe96e49a20b8dfddd43d3963643e570b4094fb4aa18ade7ed9fe9f3c0538d1df7ed1ca344171c0bba87a7152dad55aece3acae62093db4f4122539244ccda0beff47956882e3827750f4e131c80362b029dc1490d8a361de82726cf4dbf73e7e00332bd105c705eea1e9c1639006c56053b82921b146c3bd04e4d9e9b7ee7cfc006657a20b8e0bdd43d382533266379709f30a1028b57f7067f1ae7fb238f6f80270b044171c18ba87a7033277251c047668cbed1792f6d72e0b57aba6cdeaf0068561882e3832750f4e0564ee4a3808ecd197da2f25edae5c16af574d9bd5e00d0ac3105c7064ea1e9c0a55eeed1ce83c25e7812473d3531655595add93a8c01bb98720b8e0cad43d381337f032e6a6dace86cf0f0f9e9c8ad2ad61fd834e8039170f4171c196a87a70256fe065cd4db59d0d9e1e1f3d3915a55ac3fb069d00722e1e82e3832d50f4e04a6bd3244771cdbcd309026672688972b03438693700e6003e05c7065ba1e9c09363b8a13bb9fdfc5ddecaf4dcc7710d5b14b32e6b01cda47d0b8e0cb843d3812553839b244a5e7b738a5c11b1854042b0d5a8b8d3039cecfb171c197187a7024933198ef56b1f799ee17e4b5b00dead5c5793cda3073b7df72e3832e40f4e049166331dead63ef33dc2fc96b601bd5ab8af279b460e76fbee5c7065c81e9c09225878948282e0693352bf5563f9d8dd6c0a9192891cef9bddb8e0cb913d3812433d0381b1dc23551e7244d2bfea0fe2d2c165810f39e0dbbc71c197237a70248506195c108ea92cf4b14fcd77ca7deda02f0d5e1b73c35b79e3832e47f4e049090c32b8211d5259e9629f9aef94fbdb405e1abc36e786b6f3c7065c8fe9c09212186570423aa4b3d2c53f35df29f7b680bc35786dcf0d6de78e0cb91fd381242430cae084754967a58a7e6bbe53ef6d01786af0db9e1adbcf1c19723fa70248486195c108ea92cf4b14fcd77ca7deda02f0d5e1b73c35b79e3832e47f4e0490904f3ddabeab88214df6bfd6f1461bdc008dee1f6b786d133d7065c8ff9c09211f2a8e0e2a2d72c553ba45d5da8295dffbc81e9ad3f0dbca7be0cb92003812423d551c1c545ae58aa7748babb5052bbff7903d35a7e1b794f7c19724007024847a364a91558c2d9806b5dd7f6200b5a7e9ccbcc74cc370cdf0832e4801e04908f36c9522ab185b300d6bbafec4016b4fd399798e9986e19be1065c9003c09211e6653c9e030718e2d2a43c257ff934c7a1df3579300dc4dbc30cb92008812423cb568b94b2e494485d153e72f7e8c7b73e6aad4e5d1b8b5b871972401202484795392982129f8b1371f7430de7c7ed9677819cf8b737185b0f32e4802504908f29725304253f1626e3ee861bcf8fdb2cef0339f16e6e30b61e65c9004a09211e5270b860f7548ed07fa9d25f97161481d8b2b63ed9dc63103dcb92009512423ca36d831a9b7f8023b7206ae72622872bac11aed9b0b8c7c47c9724012b2484794567188de3d562ca260d9bf6443b6c7f52cfa00f5e71912cfa2e4802574908f2895a43747481281703e7fe14806d3726a04b827ab9e323fdf55c9004af9211e51140994195d8b2b0bf9cc250f8d0cc753b43475170c6499febb92009602423ca210d44dbd887c7e437064ac9e997f7127132d0fede8c94e3d8724012c1484794411a89b7b10f8fc86e0c9593d32fee24e265a1fdbd1929c7b0e4802582908f288235136f621f1f90dc192b27a65fdc49c4cb43fb7a32538f61c9004b05211e51046a26dec43e3f21b832564f4cbfb893899687f6f464a71ec39200960a423ca2086060163552e0c6283172c69175cf4f0dd95249e5c94fe18824012c158479440f4cd285177c240f082fabb51ae1fcc6165ee6efc892a167114802582c08f2881d25b762dbceaaa0c82c1d922dba57b4276a103b8e254472239004b05911e510394b6ec5b79d554190583b245b74af684ed420771c4a88e447200960b223ca207222efe41c110d05d87d3c70aedfbcf89854834a3595136c8f4012c165479440e345dfc838221a0bb0fa78e15dbf79f130a906946b2a26d91e802582ca8f2881c617d1e91d1a969a19c1b7eab375520a5bfe4f84d3544f563e004b05961e51038b2fa3d23a352d3433836fd566eaa414b7fc9f09a6a89eac7c00960b2c3ca207165f47a4746a5a686706dfaacdd548296ff93e134d513d58f8012c165879440e2c4aa1a195ab175385da857d93a0ee7ada9ebe8297a27c55f102582cb1f2881c5721559bd82c9129c381d1231f383b1dafe9bf612c44fa4fe304b05964e51038ad42ab37b05922538703a2463e70763b5fd37ec25889f49fc60960b2c9ca20715a1168c80d88a729c5d40ab474d74a9eba533fe0ae13eae38d12c165949440e2b322d1901b114e538ba81568e9ae953d74a67fc15c27d5c71a2582cb292881c56645a32036229ca717502ad1d35d2a7ae94cff82b84fab8e344b05965251038acc175899191b9bd0e66d1bcb9eb0b31dcd4641616d9f58c069960b2ca5a20715972eb132323737a1ccda37973d61663b9a8c82c2db3eb180d32c16594b440e2b2e5d6264646e6f4399b46f2e7ac2cc7735190585b67d6301a6582cb296881c565c46d72175b34109eb35a484ed7bf71664de4d6769fac7a74db059652e1038acb719c09b983ce4968e380f31d2ee4c54c468dd2ad0f590f29c60b2ca5d2071596d3381373079c92d1c701e63a5dc98a988d1ba55a1eb21e538c16594ba40e2b2da67026e60f3925a38e03cc74bb9315311a374ab43d643ca7182cb297481c565b45a17356ebd8737298d3fb68f68c0ce1df32bb284ac8938e4059652ea038acb674040c38a5170f10ae7459516c7dfc4369299c106591415c90b2ca5d5071596cd0c93dfc1794464cd9b515225861db067d175de09b229cf9316594bab0e2b2d991927bf82f288c99b36a2a44b0c3b60cfa2ebbc1364539f262cb297561c565b32324f7f05e51193366d4548961876c19f45d77826c8a73e4c59652eac38acb664649efe0bca23266cda8a912c30ed833e8baef04d914e7c98b2ca5d5871596cc8555054c46aa8cf9181db4a5058392e77c3a03c98229e9d326594bab1e2b2d98f36b30235abb421dad07cbc98a6d084ea3382d52d453ede65cb297564c565b31d6d66046b576843b5a0f979314da109d46705aa5a8a7dbccb9652eac98acb663a66de618385330a230eb91a5a91a03ba37a4db0b214fd1d982ca5d5941596cc7359cf1bb3e0c896fdea385cad199e9f41a0ddbd6129fbdf31594bab292b2d98e53fb0901497f3b0b3a136e152299b667dedfdd6bf53f96263b2975653565b31c90b7378d60649e41f0f33ea9c4994f4f6883e097ba7f468c8652eaca7acb6639116e6f1ac0c93c83e1e67d5389329e9ed107c12f74fe8d190ca5d594f596cc7222dcde3581927907c3ccfaa712653d3da20f825ee9fd1a32194bab29eb2d98e445b9bc6b0324f20f8799f54e24ca7a7b441f04bdd3fa346432975653d65b31c884349e60d3b00c4a8c004d1bc8fad77633022f3b77f48308752eaca7bcb66390f12a624c74c640c094ccfcb7115b916c10c88436bfe92050fa5d594f896cc721d254c498e98c81812999f96e22b722d82191086d7fd240a1f4bab29f12d98e43a4a98931d31903025333f2dc456e45b0432210daffa48143e975653e25b31c87421437ee73982e30233448380a426de031084775cf491cc7e2eaca7c5b66390e74286fdce7305c60466890701484dbc062108eeb9e92398fc5d594f8b6cc721ce11205449bc6e0ec099d835fa86f9a006ee543970d248d5f9bab29f17d98e439b2240a89378dc1d8133b06bf50df3400ddca872e1a491abf375653e2fb31c873644815126f1b83b026760d7ea1be6801bb950e5c3492357e6eaca7c5f66390e6c1514fafab9d2f8bc9b87d7cc2e2b28321ee42783924853ced594f8bfcc721cd72a29f5f573a5f179370faf985c5650643dc84f072490a79dab29f17f98e439ae5453ebeae74be2f26e1f5f30b8aca0c87b909e0e49214f3b5653e2ff31c8735c34ba3082a4fa489ca904e65967b7698ba363981992444277aca7c5ff6390e6b76974610549f491395209ccb2cf6ed31746c73033248884ef594f8bfec721cd6e5efb1ab76a4ba52a70d9c15d953bce2939d0bc634912addfb29f17fe8e439adb4a088e1baaf9cd0cae79aab320d5c44d1fe3d4c39226ffc0653e2ffe1c8735b5202374e42c561cd129b97d5e3809b094ec0a0584244fa381ca7c5ffd390e6b694046e9c858ac39a25372fabc70136129d8140b08489f470394f8bffa721cd6d20ca02c3d87baf5fc73ac1d70d684ea4e5c6a720d9140320829f17ff5e439ada31940587b0f75ebf8e7583ae1ad09d49cb8d4e41b2280641053e2ffebc8735b463280b0f61eebd7f1ceb075c35a13a93971a9c8364500c820a7c5ffd790e6b68c650161ec3dd7afe39d60eb86b4275272e353906c8a0190414f8bffaf21cd6d1856151c855211e27f0787ff055eaccce072e97cd61404c4839f17ff5f439ada2f383c91b77a8647b5dbd62602b3b7c1bb921555a9280b2d083e2ffebf8735b45d7079236ef50c8f6bb7ac4c05676f8377242aab5250165a107c5ffd7f0e6b68ba6d049f8ac07ba18f3c1ec002c53d2ee8f497b2a1a02e5821f8bffaff1cd6d173661b97c25759c5d64503a7fd80d885cc9571c140405e5444f17ff5ff39ada2e55849883185160e6456cd77f2f80f3393d725de7d80be4c8ae2ffebff735b45c93ca5690fe08e9f807a6117dde67c8f225a8e18f8017e3d16c5ffd7ffe6b68b91055d2acc977fc1b8c18857b3c357463f615e8ded02fe1e2e8bffb000cd6d17210aba55992eff83718310af6786ae8c7ec2bd1bda05fc3c5d17ff60019ada2e421574ab325dff06e306215ecf0d5d18fd857a37b40bf878ba2ffec00335b45c842ae95664bbfe0dc60c42bd9e1aba31fb0af46f6817f0f1745ffd80066b68b90855d2acc977fc1b8c18857b3c357463f615e8ded02fe1e2e8bffb000cd6d1721037b7b23fc65ab9cffdd11e706146efe6d814199d5fc569d27ff6001aada2e41f6f6f647f8cb5739ffba23ce0c28ddfcdb028333abf8ad3a4ffec00355b45c83e6af121abefcd69f7c40aa1b97b79e7960c92c2727f174b4affd8006bb68b907b61f49c04b5fd56a754db6b6aed51f726c567e0e1fe303a96ffb000d86d1720f54ffb90b6425d3006767cfecdd102164837121dc0fc62192eff6001b1da2e41e92c097a195b1ce2c4b9c025939862548b1a66977ef8c5d65efec00364b45c83d15812f432b639c58973804b2730c4a91634cd2efdf18bacbdfd8006c968b907a23c38411242d60dcab3c6be4657e77a2715dcb9f8e318fd7cfb000d93d1720f430482dad15c0e9e4d3453a484a62d1c48d7fbcfeec6339efaf6001b28a2e41e850905b5a2b81d3c9a68a749094c5a3891aff79fdd8c673df5ec00365145c83d0a120b6b45703a7934d14e921298b471235fef3fbb18ce7bebd8006ca28b907a142416d68ae074f269a29d24253168e246bfde7f76319cf7d7b000d9451720f428482dad15c0e9e4d3453a484a62d1c48d7fbcfeec6339efaf6001b28a2e41e8501c6db2d858364c5e573ab88cbc01b115abbc59d5c675835fc00365155c83d09f38db65b0b06c98bcae7571197803622b5778b3ab8ceb06bf8006ca2ab907a13e71b6cb6160d931795ceae232f006c456aef1675719d60d7f000d9455720f427c6f7fef6f9814e5aa869bec5dd66bb0a80a252aab33adbeff001b28abe41e84f76b12378c068c4e0cd9fe00b3a335894ac08cb153675d21ff00365158c83d09ed6236c7c4e37b1ed180c2295f3cc93a902d5bbea3cebbe7ff006ca2b2907a13d9507fe8369d58c05ace4a7ab66ff09d1b06f9d9449d7973ff00d9456620f427b12d12291a1114036d695b1d64d63f6230ba360e863af48bff01b28acd41e84f615a245234222806dad2b63ac9ac7ec461746c1d0c75e917fe0365159a83d09ec2405afd151ab2906d72329d8b4f5bb0bd951a9615ebd3d3fd06ca2b3607a13d830cc852d70bc7a392b12b630e95158975d6778828d7a94bfb0d94566d0f427b051990a5ae178f47256256c61d2a2b12ebacef1051af5297f61b28acda1e84f60a33214b5c2f1e8e4ac4ad8c3a545625d759de20a35ea52fec365159b43d09ec14664296b85e3d1c95895b1874a8ac4baeb3bc4146bd4a5fd86ca2b3687a13d8285897861d92dcbbe2df7c58e147b6bf5813bade8a7a9663b1d94566d1f427b04f3d4164e7fc1bfa7d8bbed9ba85cba6aad3b81911f52e6b64b28acda4e84f609d0695227cce9a77b2e443db6d01f5755053b28e20ea5e7aca65159b4ad09ec1390d2a44f99d34ef65c887b6da03eaeaa0a7651c41d4bcf594ca2b3695a13d82721a5489f33a69decb910f6db407d5d5414eca3883a979eb2994566d2b427b04e434a913e674d3bd97221edb680fabaa829d94710752f3d65328acda5684f609c8695227cce9a77b2e443db6d01f5755053b28e20ea5e7aca65159b4ad09ec13905eb6a846a9b1791455419598350cd2052294201a4bd0fd4da2b3695b13d8271f497fa93a29c574e0774953286077cc04f16a9c3197a39e9c4566d2b727b04e3d1f11ab2129ed6c78bb58ce48b74dc0048f1794602f48e1398acda56f4f609c793e23564253dad8f176b19c916e9b80091e2f28c05e91c273159b4ade9ec138f2085905317e18349aba29611ad395280ce8a0ad7dbd2528e72b3695be3d8271e310b20a62fc3069357452c235a72a5019d1415afb7a4a51ce566d2b7c7b04e3c6216414c5f860d26ae8a5846b4e54a033a282b5f6f494a39cacda56f8f609c78c42c8298bf0c1a4d5d14b08d69ca9406745056bede929473959b4adf1ec138f1811a2abc4b7e5cc636f5c39a52fb0a8c9364d33d8d2543273b3695be4d8271e2f234557896fcb98c6deb8734a5f6151926c9a67b1a4a864e766d2b7c9b04e3c5e468aaf12df97318dbd70e694bec2a324d934cf634950c9cecda56f93609c78bc1927b6d29590e5d347a7f52173e36e445eabfac392a3379e9b4adf27c138f177324f6da52b21cba68f4fea42e7c6dc88bd57f58725466f3d3695be4f8271e2ee649edb4a5643974d1e9fd485cf8db9117aafeb0e4a8cde7a6d2b7c9f04e3c5dc55500f4182e9b1520a05d10395799a1da1a23219951b60f5da56f93f09c78bb736b2772fdc35e55be0d1c9ff21515c35ef86c0302a3865ecb4adf27f138f176d6d64ee5fb86bcab7c1a393fe42a2b86bdf0d80605470cbd9695be4fe271e2eda66dc356c473a1827500d4ff47ba398d26a5d5cbda8e33bb3d2b7c9fd4e3c5db359cac38564d6b3066ce0c7e0eda5599f80fd157851c81b68a56f93fb9c78bb653fa7dfb7a00fe8c4a687b7b9d1a8db39ae3c86eda391dad24adf27f838f176c90b62181c1682544119d5976b99afde6e08bb69d8472559a595be4ff171e2ed9116c430382d04a88233ab2ed7335fbcdc1176d3b08e4ab34b2b7c9fe2e3c5db222d8860705a09510467565dae66bf79b822eda7611c95669656f93fc5c78bb6445b10c0e0b412a208ceacbb5ccd7ef37045db4ec2392acd2cadf27f8b8f176c884233da6e3e87c6c96a1f9eb1915c0edb37f8f98172573e5a5be4ff181e2ed90f107a0d895372104aa105655b191645b11c344effe4b020b5b7c9fe313c5db21d20f41b12a6e42095420acab6322c8b6238689dffc960416b6f93fc6278bb643a41e836254dc8412a8415956c645916c470d13bff92c082d6df27f8c4f176c8740fe2c4f771f3050cd4f152d0bf1055838de4d3fc2582a9aebe4ff18ae2ed90e71fc589eee3e60a19a9e2a5a17e20ab071bc9a7f84b05535d7c9fe315c5db21ce3f8b13ddc7cc143353c54b42fc41560e37934ff0960aa6baf93fc62b8bb6439c0b28806865faab1e7450be7deee0d4171b68fbde2c16f176f27f8c58176c8737165100d0cbf5563ce8a17cfbddc1a82e36d1f7bc582de2ede4ff18b02ed90e6e2ca201a197eaac79d142f9f7bb83505c6da3ef78b05bc5dbc9fe31605db21cdc594403432fd558f3a285f3ef7706a0b8db47def160b78bb793fc62c0bb6439b83e9a5f33360d349f11d20fd6e46b696c62d219dfc170bb7027f8c58276c8736f09471713427cebf5f06a47a5bf34fad371e68fbc82e31ae14ff18b05ed90e6dd128e2e2684f9d7ebe0d48f4b7e69f5a6e3cd1f7905c635c29fe3160bdb21cdba251c5c4d09f3afd7c1a91e96fcd3eb4dc79a3ef20b8c6b853fc62c17b6439b744a38b89a13e75faf83523d2df9a7d69b8f347de41718d70a7f8c582f6c8736e82083c9e0fe314216d36aa253e9add531caab57c52e335215ff18b05fd90e6dcf410793c1fc62842da6d544a7d35baa639556af8a5c66a42bfe3160bfb21cdb9e0e218030cf278b131a70b1479d157cc1d6efbb11b8ceec58fc62c1806439b73b1c4300619e4f162634e1628f3a2af983addf7623719dd8b1f8c58300c8736e76388600c33c9e2c4c69c2c51e7455f3075bbeec46e33bb163f18b060190e6dcec710c0186793c5898d3858a3ce8abe60eb77dd88dc67762c7e3160c0321cdb9d86e2a5bb9c8db33e973d13c71c7b5f4181b3e0d188cf06990c62c1807439b73af686710206818ea8ab468a0db85ca102ae2be762e19e277228c58300f8736e75d5ce078eda69457cd359769af01f2485071bf485933c6924618b060200e6dceb945d34a88238b325237f4fb55fa42b89b8fc0ecaf678ec88d3160c0411cdb9d7117b8edbd1d78e75c3cb01ea3eae39931cbc4355bcf1f351b62c1808339b73ae12f71db7a3af1ceb879603d47d5c7326397886ab79e3e6a36c5830106736e75c25ee3b6f475e39d70f2c07a8fab8e64c72f10d56f3c7cd46d8b06020ce6dceb8449d9c695c229bd99b2471d174d7af1890a6406db78fb4cdc160c041acdb9d7071fc5e5d85ab5fdeb3154622691540b0cc10a69b3f1f83db92c1808369b73ae0d3f8bcbb0b56bfbd662a8c44d22a816198214d367e3f07b725830106d36e75c1a0b29f00e413a7a649217b0923bae542db06c02ccc7e29ae5b06020db6dceb8331653e01c8274f4c9242f6124775ca85b60d805998fc535cb60c041b6db9d70662ca7c03904e9e992485ec248eeb950b6c1b00b331f8a6b96c180836db73ae0cc594f807209d3d32490bd8491dd72a16d836016663f14d72d830106db6e75c1983eb15990ea0a2900ee41311bb1436ad5b30288c97e2b525c06020db7dceb832f09750bceaa76d4b9a9488a2f58e4fda612476d8ffc5848b90c041b70b9d7065d12ea179d54eda9735291145eb1c9fb4c248edb1ff8b09172180836e173ae0cba25d42f3aa9db52e6a52228bd6393f698491db63ff16122e430106dc2e75c19744ba85e7553b6a5cd4a44517ac727ed30923b6c7fe2c245c86020db85ceb832e8236315977dcfce52614ecaed84ae025bd0b934fcc5862f91c041b70c9d7065cf46c62b2efb9f9ca4c29d95db095c04b7a17269f98b0c5f2380836e193ae0cb9e199eaf0acda1bc01520153ae09163169ef272ff0161a62480106dc3375c1973b333d5e159b437802a402a75c122c62d3de4e5fe02c34c490020db866eb832e76667abc2b3686f00548054eb82458c5a7bc9cbfc058698920041b70cdd7065cec5907d103437062c25cd0c5683f0fb34a257bdb7db0d4b6410836e19cae0cb9d73e21fab35d43483c8667b2c8747d8e8ef73a12f861ab1083106dc33a5c1973ad08564e1390e91330d9958d88df5945189ab681edc357c50720db8675b832e75910ac9c2721d22661b32b1b11beb28a31356d03db86af8a0e41b70ceb7065ceb22159384e43a44cc3665636237d6514626ada07b70d5f141c836e19d6e0cb9d6442b2709c87489986ccac6c46faca28c4d5b40f6e1abe283906dc33adc1973ac8117739e5e4f3b5c5661f0085ebf2798457aa7ad9357df4730db8675c832e758f22ee73cbc9e76b8acc3e010bd7e4f308af54f5b26afbe8e61b70ceb9065ceb1e45dce79793ced715987c0217afc9e6115ea9eb64d5f7d1cc36e19d720cb9d63c17cc27dbfe0030e2fdbe2c2755f1f41d699632c6abf147996dc33ae51973ac772f984fb7fc0061c5fb7c584eabe3e83ad32c658d57e28f32db8675ca32e758ee5f309f6ff800c38bf6f8b09d57c7d075a658cb1aafc51e65b70ceb9465ceb1dc4a73978cc66409cfbab78932a5edc8e5f8f3f2325f8be0cc6e19d729cb9d63b720f987c6632a965742353a5d4239b9c69e2a4061bf196599dc33ae54973ac76d41f30f8cc6552cae846a74ba8473738d3c5480c37e32cb33b8675ca92e758eda0ff877c6630cdc14d59b116cff450f1524eb5d83fc673a6870ceb9535ceb1db31ff0ef8cc619b829ab3622d9fe8a1e2a49d6bb07f8ce74d0e19d72a6b9d63b663fe1df198c337053566c45b3fd143c5493ad760ff19ce9a1c33ae54d73ac76cc0bd616dfeec9635e799eb35ff086a0a3d39d481ce33b77448675ca9be758ed9717ac2dbfdd92c6bcf33d66bfe10d4147a73a9039c676ee890ceb9537ceb1db2e2f585b7fbb258d79e67acd7fc21a828f4e7520738ceddd1219d72a6f9d63b65c5eb0b6ff764b1af3ccf59aff8435051e9cea40e719dbba2433ae54df3ac76cb84973c6abc2f8b89f66b15df6fec83237e616ddcb33b91849675ca9bf758ed96f1ef9e6045c53f3f69a28e3e5f3ee8c6a787017936773d493ceb9537feb1db2dd3df3cc08b8a7e7ed3451c7cbe7dd18d4f0e02f26cee7a9279d72a6ffd63b65ba07f9f0be47b252923569b78fc61859a48e02ba4a9dd0f6503ae54e00ac76cb730ff3e17c8f64a5246ad36f1f8c30b3491c0574953ba1eca075ca9c0158ed96e61fe7c2f91ec94a48d5a6de3f18616692380ae92a7743d940eb953802b1db2dcc3fcf85f23d929491ab4dbc7e30c2cd247015d254ee87b281d72a700563b65b980bb164915187abdb2361a0f457e3c2438c6e00a6dd110904ae54e00bc76cb72f1762c922a30f57b646c341e8afc7848718dc014dba2212095ca9c0178ed96e5e2ec59245461eaf6c8d8683d15f8f090e31b8029b74442412b953802f1db2dcbc5d8b248a8c3d5ed91b0d07a2bf1e121c63700536e888482572a7005e3b65b9784728a1c1eedd406a02e0373d749a4c337322666ad112344be54e00bd76cb72ef1a639c30b41d038bd2869672df92c061928728d2a2260c98ca9c017bed96e5dd34c73861683a0717a50d2ce5bf2580c3250e51a5444c1931953802f7db2dcbba698e70c2d0740e2f4a1a59cb7e4b01864a1ca34a889832632a7005efb65b97745f2f3a32774a9f1660fadb8ef2f42b07407ba292113208c754e00be06cb72ee74a70cd11c4f7c0e48ebbdf15dc467e092d39a1212265b58fa9c017c1d96e5dcd20f3f2d060520480ea3de623aeeb240d06b59e3f44cd0f2053802f84b2dcbb9941e7e5a0c0a40901d47bcc475dd6481a0d6b3c7e899a1e40a7005f0965b977320fe223ee57aa94bb75bdc086b20ab82ec718d4fa1335e0824e00be13cb72ee631fc447dcaf552976eb7b810d6415705d8e31a9f4266bc1049c017c2796e5dcc63f888fb95eaa52edd6f7021ac82ae0bb1c6353e84cd782093802f84f2dcbb98c0b23781f93b728937ab42c2d86b3e970e50903cd99b0a8137005f09f5b9773171646f03f276e5126f568585b0d67d2e1ca12079b33615026e00be13eb72ee62e2c8de07e4edca24dead0b0b61acfa5c394240f3666c2a04dc017c27d6e5dcc5c591bc0fc9db9449bd5a1616c359f4b8728481e6ccd85409b802f84fadcbb98b83e49daa611d50bef7808ead0619cbf08fcd298d69b0c2538005f09f6b977316f08a60df8fa0c9a96bcd7fd98b997a60ca5e78daa3619ee7100be13ee72ee62dd114c1bf1f419352d79affb31732f4c194bcf1b546c33dce2017c27dce5dcc5ba229837e3e8326a5af35ff662e65e9832979e36a8d867b9c402f84fb9cbb98b7445306fc7d064d4b5e6bfecc5ccbd30652f3c6d51b0cf738805f09f73977316e81673383c772c2c239a4601838fd888c50abb36a061a08b110be13ee82ee62dcf2ce67078ee585847348c03071fb1118a15766d40c341162217c27dd05dcc5b9e59cce0f1dcb0b08e6918060e3f6223142aecda8186822c442f84fba0bb98b73c3fac1a908fc3e3d49ef6341475226e23021c11000d05fc895f09f74277316e770b6a8dcdf5ea4a610ab29020e0a30440b07a7dfd1a0d9d13be13ee85ee62dced16d51b9bebd494c215652041c146088160f4fbfa341b3a277c27dd0bdcc5b9da2daa3737d7a929842aca4083828c1102c1e9f7f46836744ef84fba17b98b73b45b546e6faf525308559481070518220583d3efe8d06ce89df09f742f7316e76842bb358c350728c877ef2a06008e6c05b3ea3bcea0db753ce13ee85fe62dcecf1188c3c54070d448bca47c03f77b00061416d39a41b88e7ac27dd0c0cc5b9d9d2311878a80e1a8917948f807eef6000c282da73483711cf584fba18198b73b3a46230f1501c35122f291f00fddec0018505b4e6906e239eb09f74303316e7674185876d6d9e924fdb1ea0817b236282b4cf8f8cf0dc617d713ee860762dcece730b0edadb3d249fb63d4102f646c505699f1f19e1b8c2fae27dd0c0ec5b9d9ce6161db5b67a493f6c7a8205ec8d8a0ad33e3e33c37185f5c4fba181d8b73b39c4ed60f63a5abaaa55c1668b5880f6955140a22756e3262b99f74303c16e7673729be777421b9d80284f2f963067cfaa4d456a0e7dc6669743ee860792dcece6d537ceee84373b00509e5f2c60cf9f549a8ad41cfb8ccd2e87dd0c0f25b9d9cda330c367d5d49e2c1e0920d841052128dfd9cdf9c719b49d1fba181e5b73b39b366186cfaba93c583c1241b0820a4251bfb39bf38e33693a3f74303cb6e767366584332a24b8a0dbf4f0e5e0837a67232a2b5da6ec66ecb48ee860797dcece6cb3c98bdf16d769e366ae2e40865ab0c5ff1ae10da8cdf3a92dd0c0f30b9d9cd950543d48fb14fbf24a28bf008c1b440ba8f9e7db219c01926ba181e6273b39b290a87a91f629f7e494517e011836881751f3cfb643380324d74303cc4e7673652150f523ec53efc928a2fc02306d102ea3e79f6c86700649ae8607989cece6ca42a1ea47d8a7df925145f80460da205d47cf3ed90ce00c935d0c0f3139d9cd948543d48fb14fbf24a28bf008c1b440ba8f9e7db219c01926ba181e6273b39b290348ceaa3005a674c1e4429102ce63f4ca01212403804c8d84303cc4f7673651f6919d54600b4ce983c88522059cc7e9940242480700991b08607989eece6ca3e5e460338d7cc1fe845d6cc38a9f7252d2c8aa4fde014c7620c0f313ed9cd947b489e5f1e85fac2885873c0694a4c72550557a5f8c02b32c5181e627eb39b28f51d4f16e9e25807c87dada8ca8af70ca4b6f1a7ee8058098b303cc4fe673651e93a9e2dd3c4b00f90fb5b519515ee19496de34fdd00b01316607989fcce6ca3d2014eb4545fc2a1d9c37ccb22223a5a8d8808fbb70161ca2dc0f313fa9cd947a3029d68a8bf8543b386f996444474b51b1011f76e02c3945b81e627f539b28f46053ad1517f0a87670df32c8888e96a362023eedc058728b703cc4fea73651e8c0a75a2a2fe150ece1be6591111d2d46c4047ddb80b0e516e07989fd4e6ca3d1814eb4545fc2a1d9c37ccb22223a5a8d8808fbb70161ca2dc0f313fa9cd947a3029d68a8bf8543b386f996444474b51b1011f76e02c3945b81e627f539b28f46053ad1517f0a87670df32c8888e96a362023eedc058728b703cc4fea73651e8c0336c82dcb7b36f998b2bb909138b6ebeb0c0377db0e6bae17989fd4f6ca3d17f66d905b96f66df33165772122716dd7d61806efb61cd75c2f313fa9ed947a2fe59c4641fb530411df9750c1c448be2f56f4339f3c39c8f86e627f53eb28f45fb3f9b20ec40c304f3bfb040307f75ede58ac8cfe4873ac30ecc4fea7e651e8bf50b489a8557e88c9f4c26a858f54a03c5c1d3fbc60e772a1e989fd4fdca3d17e91691350aafd1193e984d50b1ea94078b83a7f78c1cee543d313fa9fb947a2fd22d226a155fa2327d309aa163d5280f17074fef1839dca87a627f53f728f45fa45a44d42abf4464fa613542c7aa501e2e0e9fde3073b950f4c4fea7ee51e8bf48409c010254eb4cac8f30ad874afe6456c982185de77445ea89fd4fdda3d17e8f0d4a5ab180391c10eb2783068c5af0a83f468cb8ceea2fd613fa9fbc47a2fd1d1a94b56300723821d64f060d18b5e1507e8d19719dd45fac27f53f788f45fa3a35296ac600e47043ac9e0c1a316bc2a0fd1a32e33ba8bf584fea7ef11e8bf4746a52d58c01c8e087593c183462d78541fa3465c677517eb09fd4fde23d17e8e860b803c4d9f443c67f3e5860bc0d327ea0ab2789eea4a1623fa9fbc57a2fd1cf4d8260368a4b0a44cb42d8b96e788cf7ed98ab10dd4ae6c57f53f78bf45fa39d27171919eaf89741634bd96ad34f41ea8773b21eba97718bfea7ef18e8bf47394e2e3233d5f12e82c697b2d5a69e83d50ee7643d752ee317fd4fde31d17e8e72286ebd148244dfbd59f58da3439b2fa4ca112477ea5f6a30fa9fbc64a2fd1ce350dd7a290489bf7ab3eb1b4687365f49942248efd4bed461f53f78c945fa39c62dcd4cfedf7601ad349c5e8504cae68dd486eddca97f4cc4ea7ef1938bf4738b5b9a99fdbeec035a6938bd0a0995cd1ba90ddbb952fe9989d4fde32717e8e71643478ca8543a896c9f37a20c0989c231fe5e136fa5fed714a9fbc64f2fd1ce2b12a171fd7ed795910b356c100971ac5ea8fe82dc4bff522a53f78c9f5fa39c552542e3fafdaf2b22166ad82012e358bd51fd05b897fea454a7ef193ebf4738aa4a85c7f5fb5e56442cd5b04025c6b17aa3fa0b712ffd48a94fde327d7e8e7154211de898cd1f2f402671887841eb8aeff43672df5ffc35539fbc64fbfd1ce2a7423bd1319a3e5e804ce310f083d715dfe86ce5bebff86aa73f78c9f7fa39c54e1089fb100adf3fb8668c49d8fe0c53ba7d1c277a7ff2794f7ef193f0f4738a9b2113f62015be7f70cd1893b1fc18a774fa384ef4ffe4f29efde327e1e8e715364227ec402b7cfee19a312763f8314ee9f4709de9ffc9e53dfbc64fc3d1ce2a6c1062312d2d5c807b012876bfe6c0c5ce952397d0ff956e7cf78c9f88a39c54d720c4625a5ab900f60250ed7fcd818b9d2a472fa1ff2adcf9ef193f114738a9ae4188c4b4b57201ec04a1daff9b03173a548e5f43fe55b9f3de327e228e71535c0f23e2164146868fd609ddf72c64566f555f1a84fcad17e8bc64fc461ce2a6b71e47c42c828d0d1fac13bbee58c8acdeaabe3509f95a2fd178c9f88c39c54d6e3c8f8859051a1a3f582777dcb19159bd557c6a13f2b45fa2f193f118738a9adc0531695ee096b7367d1517b15980db75573b3024e56a6346e327e231e71535b70a62d2bdc12d6e6cfa2a2f62b301b6eaae766049cad4c68dc64fc463ce2a6b6e14c5a57b825adcd9f4545ec566036dd55cecc09395a98d1b8c9f88c79c54d6dc298b4af704b5b9b3e8a8bd8acc06dbaab9d981272b531a37193f118f38a9adb8531695ee096b7367d1517b15980db75573b3024e56a6346e327e231e71535b70323f8488e93969876f691e23267996a593a86099ad4e0cdd64fc463de2a6b6df647f0911d272d30eded23c464cf32d4b2750c1335a9c19bac9f88c7bc54d6dbe55106ad07b4828d58a6aa08490448290fae3de63b539d77693f118f88a9adb7b36332e4dccf2d462e19b690116e72d1ca20a18c46a7552ee27e231f21535b6f56c665c9b99e5a8c5c336d2022dce5a3944143188d4eaa5dc4fc463e42a6b6dea64df11e40a2dd4435333cbfc51fadc6d346abf0ea9d6efb99f88c7c954d6dbd355d07c74eabe2b3e732dbff09a53e0d51517da1a53af83743f118f93a9adb7a537b35196abded934b321a7d92b05e9a4d6721031a760aae97e231f28535b6f496f66a32d57bdb26966434fb2560bd349ace420634ec155d2fc463e50a6b6de926adf9f0785dde78a994cc75ca275ce8e060a9cc39d844fa6f88c7ca24d6dbd2361d196bbe21e51ccff5fb6b13b49c516b85795843b0a434ef118f9459adb7a454fb586249a9f2651cb85955a6cf1b2281cf1870576162a9ee231f28c35b6f4892b7d64f60ba0cf5b63d152acd0418c4ae6256a07ec2df93ec463e5196b6de91156fac9ec17419eb6c7a2a559a0831895cc4ad40fd85bf27d88c7ca32d6dbd2223a07ec8504e5c0255c0b72ab3764592644d8041cb0b988fc118f9466adb7a443002231b6e02e030284dd0d4e6526da4735f264366174b5f9231f28ce5b6f48850044636dc05c060509ba1a9cca4db48e6be4c86cc2e96bf2463e519cb6de910a0088c6db80b80c0a13743539949b691cd7c990d985d2d7e48c7ca3396dbd221401118db70170181426e86a732936d239af9321b30ba5afc918f94672db7a442802231b6e02e030284dd0d4e6526da4735f264366174b5f9231f28ce5b6f48850044636dc05c060509ba1a9cca4db48e6be4c86cc2e96bf2463e519cb6de910a0088c6db80b80c0a13743539949b691cd7c990d985d2d7e48c7ca3396dbd221401118db70170181426e86a732936d239af9321b30ba5afc918f94672db7a442802231b6e02e030284dd0d4e6526da4735f264366174b5f9231f28ce5b6f48850044636dc05c060509ba1a9cca4db48e6be4c86cc2e96bf2463e519cb6de910a0014d9342d8e6e8ccb40fb618c91c744d275d33582d2d9888d7ca3396ebd2213ff29b2685b1cdd199681f6c319238e89a4eba66b05a5b3111af94672dd7a4427fe5364d0b639ba332d03ed8632471d1349d74cd60b4b662235f28ce5baf4884ffc32dbfa1949d6e911d4a1345c84984e8e5adc081396cde86ce519cb76e9109ff765b7f43293add223a94268b909309d1cb5b810272d9bd0d9ca3396edd2213fee57824111fdbe26ff1f4af96a08bf623417b27c4b5b3945b494672ddca4427fdb3b16dad0d1ded0b60b5c1acc07dcec62dba75493b6742f6a28ce5bba4884ffb502400e4e7a202423e37e5d90061800c0639105246cea02d5519cb7759109ff6904801c9cf4404847c6fcbb200c300180c7220a48d9d405aaa3396eeb2213fed209003939e880908f8df97640186003018e441491b3a80b554672ddd64427fda412007273d101211f1bf2ec8030c006031c882923675016aa8ce5bbac884ffb482400e4e7a202423e37e5d90061800c0639105246cea02d5519cb7759109ff6904801c9cf4404847c6fcbb200c300180c7220a48d9d405aaa3396eeb2213fed201c15ec4b5e6b8bb0ac5d8bf97c5e58139083a5183a825955672ddd65427fda3f382bd896bcd7176158bb17f2f8bcb02721074a307504b2aace5bbaca84ffb47e7057b12d79ae2ec2b1762fe5f179604e420e9460ea0965559cb7759509ff68fc6cc1bb07c9bee03d2fb287c3d950e897305f84bed4146eac396eeb2b13fed1f76595cebc69e043322c2b377fa8fff9290d01657aa82a815972ddd65727fda3ed573df625aa23091c251c96f7485e1a4cc64526f25056a6b3e5bbacaf4ffb47d93a8e44f82aa894f016ff55e6871a5c9438cca9e1a0aef168cb77595f9ff68fb1012ee29d2bb3ac97fac4d3c50492e1231ddbafc0415f86d296eeb2c03fed1f61025dc53a5767592ff589a78a0925c2463bb75f8082bf0da52ddd65807fda3ec204bb8a74aeceb25feb134f14124b848c776ebf01057e1b4a5bbacb00ffb47d84097714e95d9d64bfd6269e2824970918eedd7e020afc3694b7759601ff68fb0812ee29d2bb3ac97fac4d3c50492e1231ddbafc0415f86d296eeb2c03fed1f61025dc53a5767592ff589a78a0925c2463bb75f8082bf0da52ddd65807fda3ec204bb8a74aeceb25feb134f14124b848c776ebf01057e1b4a5bbacb00ffb47d8402383a742b038ceb52f300a7a3fceb9899a1a3c1dafc50d4c77596020f68fb07f47074e8560719d6a5e6014f47f9d73133434783b5f8a1a98eeb2c041ed1f60fe1a20f5b79745bd8c898651e0f5990e2114ab4c73bf15d932dd658084da3ec1fb3441eb6f2e8b7b19130ca3c1eb321c42295698e77e2bb265bacb0109b47d83f66883d6de5d16f63226194783d664388452ad31cefc5764cb7596021368fb07ec5d1a066990906f1c18f8b6ffa3269903519cbf9af8b06d97eb2c0427d1f60fd74646657ff78360effeb795f73cab5a014f7bdb32f1627f30d6580850a3ec1fad189f23acc5694497ca3553e66fb4dbfd4b3a1262e2c6a262acb010a247d83f59313e47598ad2892f946aa7ccdf69b7fa967424c5c58d44c5596021448fb07eb2627c8eb315a5125f28d54f99bed36ff52ce8498b8b1a898ab2c042891f60fd64510b761301aca7761e70c72b740507e50612ef141636b716658085133ec1fac72e2944d2d9bbd1a409a7b64ede6837c4b8683a252c6f122dcb010a277d83f58d5c5289a5b377a348134f6c9dbcd06f8970d0744a58de245b9602144efb07eb1a44b76bf83d51c947f36501336fff070d8de34491b1bdecb82c04289ef60fd6331581309d51061547b3902a5ed65c3615c808e520637d7d715808513eec1fac652b02613aa20c2a8f672054bdacb86c2b9011ca40c6fafae2b010a27dd83f58ca5604c2754418551ece40a97b5970d857202394818df5f5c5602144fbb07eb194381bdd975e932cf569477aeea93fd8a8ec8985001bed8f8bc04289f860fd63277037bb2ebd2659ead28ef5dd527fb151d9130a0037db1f17808513f0c1fac64e6c81cf0a50af368d71e413b29b5d8a9e5e686ffd6fb7e230010a27e283f58c9b6515f6c177c0efd2b08e4f5d2d193d3769133bf7df71686102144fc607eb1935563e462fc5e4625d2de2c6b25090a2697e68d3ecbee474c304289f8d0fd63269388ee50c622b4772288bb55c977f6ccda91403d67dca8d8708513f1b1fac64d1711dca18c4568ee451176ab92efed99b522807acfb951b0e10a27e363f58c9a26e4decde5f0fa0806ef4fd6a545bdb3150926b56f72bda1d2144fc6d7eb1934368ae32699481c3b8aab022cc9f15de5d4d6732aaee59583b4289f8dbfd6326855d6ebd7fff660a2922266d913489e4b54710c152dcb454778513f1b8fac64d0946efd3acd52e970a1113031a5f71f1653a63dea2b96a4cf00a27e372f58c9a1119f2000680bfb0cbeeec2e2cb5420ac5210a194272d63de1144fc6e6eb19342133e4000d017f6197ddd85c596a84158a42143284e5ac7bc2289f8dcdd632684267c8001a02fec32fbbb0b8b2d5082b1484286509cb58f784513f1b9bac64d0845ba258e0dc6009174427995da06e7e23b493261096b39309a27e373858c9a10743570a6e8f2294e655155ab3373b24421568a81e2d68ca1444fc6e71b193420d12c06d89f4a7ac8476f0dd5e64d4707ed713ac395ad3382989f8dce4632684192580db13e94f5908ede1babcc9a8e0fdae275872b5a6705313f1b9c8c64d08324b01b627d29eb211dbc375799351c1fb5c4eb0e56b4ce0a627e373918c9a10642215c4fc7b9fe6db844d12eb1d01abf164dfbdc7d69b654d4fc6e724193420c7442b89f8f73fcdb7089a25d63a0357e2c9bf7b8fad36ca9a9f8dce483268418e14696c9ec4e21e25ddfa73a46a64d7c03fc1531c5a6f39363f1b9c9164d0831b28d2d93d89c43c4bbbf4e748d4c9af807f82a638b4de726c7e373922c9a1063651a5b27b1388789777e9ce91a9935f00ff054c7169bce4d8fc6e724593420c6c2f5dbda2fd7373e6bc99c51b4984e5fcaa4cf4dfd37b6db2f8dce48c268418d75ebb7b45fae6e7cd79338a369309cbf95499e9bfa6f6db65f1b9c9184d0831ae49894f38cc305252bf2d3c651c71bfed55762f7c4def5acce37392319a10635b1f24f71e6ec3275d4b20a0c22f41a7d5572ebaf59be0599ac6e724643420c6b53e49ee3cdd864eba964141845e834faaae5d75eb37c0b3358dce48c868418d6a08a63526916f202cf948ab00b364c75008fd47d36f830a6c1b9c9191d0831ad3114c6a4d22de4059f291560166c98ea011fa8fa6df0614d837392323a10635a62298d49a45bc80b3e522ac02cd931d4023f51f4dbe0c29b06e724647420c6b4c4531a9348b790167ca4558059b263a8047ea3e9b7c185360dce48c8e8418d6981675ab15ed5485876150d8032caa9cfb3c16d933f8324ac2b9c9191e0831ad2f2ceb562bdaa90b0ec2a1b006595539f6782db267f06495857392323c10635a5e59d6ac57b552161d8543600cb2aa73ecf05b64cfe0c92b0ae724647820c6b4bc3fbfb15c4106aef2d74ce8115bb30fd48cf9259cc193fa16ce48c8f1418d69770b91bb65586fe09d7b5ff81aadc447a3c634a7368329982e9c9191e3831ad2ed172376cab0dfc13af6bff0355b888f478c694e6d0653305d392323c70635a5da2e46ed9561bf8275ed7fe06ab7111e8f18d29cda0ca660ba7246478e0c6b4bb45c8ddb2ac37f04ebdaffc0d56e223d1e31a539b4194cc174e48c8f1c18d69768452e0f025d608c8f82c5a9a2d2a2a2370f8ccf65329b26eac9191e3931ad2ecf166e76b191239bd6d2517b3d9ba36c68cb5bfac76537f1d692323c73635a5d9d2cdced63224737ada4a2f67b3746d8d196b7f58eca6fe3ad246478e6c6b4bb3a59b9dac6448e6f5b4945ecf66e8db1a32d6feb1d94dfc75a48c8f1cd8d6976743f860e395f7f616e5f5201e4d3798b410722323829c132b59191e39c1ad2ece70b1e751f956145948b6a2bc19d513e7cba86c06d5384096c2323c73935a5d9cd163cea3f2ac28b2916d457833aa27cf9750d80daa70812d846478e726b4bb39a2c79d47e558516522da8af067544f9f2ea1b01b54e1025b08c8f1ce4d697673458f3a8fcab0a2ca45b515e0cea89f3e5d436036a9c204b61191e39c9ad2ece683df9aaa62c76dc008368e411cb720fc654ae62d238423ac3323c73945a5d9ccf0805adf92f503ab8d397f01b8d424787559f21a1708619876478e729b4bb399d100b5bf25ea07571a72fe0371a848f0eab3e4342e10c330ec8f1ce536976733a2016b7e4bd40eae34e5fc06e35091e1d567c8685c218661d91e39ca6d2ece674402d6fc97a81d5c69cbf80dc6a123c3aacf90d0b8430cc3b23c7394da5d9cce80c6d383fcb662e45064529b0ca82a0700634761408633c77478e729c4bb399cf18da707f96cc5c8a0c8a5361950540e00c68ec2810c678ee8f1ce5389767339e31b4e0ff2d98b9141914a6c32a0a81c018d1d850218cf1dd1e39ca712ece673c6369c1fe5b31722832294d865415038031a3b0a04319e3ba3c7394e25d9cce7852e5dca98cc567083118c3049e882efb0f89bd3d86356b7578e729c5bb399cef31de11ffefed50c82ef7ae01336e85f0cb55d6780c6c7aebf1ce538c767339dd63bc23ffdfdaa1905def5c0266dd0be196abacf018d8f5d7e39ca718ece673ba538aa0ac9617c5d888a4dffcc4183fbdd999b5dd31b38fb0c7394e32d9cce77333279a0602920e68de0fe7f17e8ea7765f75c7b76368c3628e729c66b399cee5664f340c05241cd1bc1fcfe2fd1d4eecbeeb8f6ec6d186c51ce538cd67339dca58b0c0c4e0aabc5b4505c7bdf098c5d42a197ada8da4b18b39ca719bce673b933d73da3697b7fb6e56d1b773d78fb3a3007551b21b4b07177394e3389cce772506fa0d1a05d279947a6996dfa57d8f40ad2cff613697b22fe729c672399cee490df41a340ba4f328f4d32dbf4afb1e815a59fec26d2f645fce538ce47339dc921be834681749e651e9a65b7e95f63d02b4b3fd84da5ec8bf9ca719c8e673b92437d068d02e93cca3d34cb6fd2bec7a056967fb09b4bd917f394e3391cce772486fa0d1a05d279947a6996dfa57d8f40ad2cff613697b22fe729c672399cee4906b53fbed90b1b54719f903eca610101051e24823d2f7e9fde538ce48339dc91f62ba5087f7c5ed4600b82fd1427e481b5006ec44a5f177fcca719c91673b923d5186f9bcc5ee5d43ce36879a7b5ab8314c5034864be493fa94e33923ce7724792f204c26623f3d3f6933372ced13985d44e2c50997cacbf629c672489cee48f15e40984cc47e7a7ed2666e59da2730ba89c58a132f9597ec538ce49139dc91e2489389465f5f77b5719304abaaac896fbfcd70235f2cd3d9a719c92373b923c31d396b3995217222afec314f4bb73ada2bdd3c43be5b4bb44e339247e77247853a72d6732a42e4455fd8629e976e75b457ba78877cb697689c67248fcee48f0a00f805932ae84b428c76ed35253b13635bb74d0bf96ed2d238ce49209dc91e1301f00b2655d0968518edda6a4a7626c6b76e9a17f2dda5a4719c92413b923c2603e0164caba12d0a31dbb4d494ec4d8d6edd342fe5bb4b48e33924827724784c07c02c9957425a1463b769a929d89b1addba685fcb769691c6724904ee48f0980f805932ae84b428c76ed35253b13635bb74d0bf96ed2d238ce49209dc91e1301f00b2655d0968518edda6a4a7626c6b76e9a17f2dda5a4719c92413b923c2603e0164caba12d0a31dbb4d494ec4d8d6edd342fe5bb4b48e33924827724784c0081522424a8823fe083cc28a93e7d9a887e8e1f9b76b0d1d6724904fe48f097f102a4484951047fc1079851527cfb3510fd1c3f36ed61a3ace49209fc91e12fe205489092a208ff820f30a2a4f9f66a21fa387e6ddac34759c92413f923c25fc40a9121254411ff041e614549f3ecd443f470fcdbb5868eb3924827f24784bf80d647cd17ee4c298509250a134dbc2832ad07b9876b275d7724904ff48f097ef1ac8f9a2fdc98530a124a14269b7850655a0f730ed64ebaee49209fe91e12fde3591f345fb930a6142494284d36f0a0cab41ee61dac9d75dc92413fd23c25fbc6b23e68bf72614c284928509a6de14195683dcc3b593aebb924827fa4784bf78625a25c4c4aeac3cd5eb320b441a502d594a15846b29017824904ff58f097eef50c6a4365fbfdb31789c8c0e7e92c8555ed68705d653a6f149209fec1e12fddd2d9fa11995e2391abdff4014f383b8a569ef6a08aca8f1e392413fd93c25fbb95b3f42332bc472357bfe8029e707714ad3ded4115951e3c724827fb2784bf7724290dd132deb6722c4c3284bc46d0a905400041fb2a56b8f4904ff65f097eee3113412d3323950fd564c788f7f383d1b5442643c654c7b1f9209fecce12fddc5226825a66472a1faac98f11efe707a36a884c878ca98f63f2413fd99c25fbb8a44d04b4cc8e543f55931e23dfce0f46d510990f19531ec7e4827fb3384bf771415b2ef46682d0aa27f29ec73f02010d54e557de02a657cfd904ff668097eee272b65de8cd05a1544fe53d8e7e04021aa9caafbc054caf9fb209fecd012fddc4e56cbbd19a0b42a89fca7b1cfc08043553955f780a995f3f6413fd9a025fbb89c39a9d2e017cad7cbc6158b97775eaea51eee4afe532d8bed827fb3414bf771377353a5c02f95af978c2b172eeebd5d4a3ddc95fca65b17db04ff668297eee26e72b9a42d358de1e6e51c5655d3d8e28f27fb87f64cb7d3b709fecd062fddc4db7185a107417e468596fed4a39e0fed18fc396be999714b6f13fd9a0d5fbb89b56f1d9abb595f0fc2fac3d13f327e022ca4b533d032e43adf27fb341bbf7713696a4d8e238920a23dc24dca765b5a2c53f5acc39d65ca19bf4ff668387eee26d160ad74f3e8a3c7335161bce4ad1280a2979be337cb95d77f9fecd071fddc4da14d6d4294a7aa111e6f89a1c15083293fdb7a226c972d53003fd9a0e4fbb89b4126ecddd625b6a4f4abd96b7a97647a7a6336a0d62e5c4a017fb341caf77136814dd9bbac4b6d49e957b2d6f52ec8f4f4c66d41ac5cb89402ff668395eee26d0227c5d0056d3d168a7c2bd5e253f011e4391cdf55b972cc06fecd072cddc4da034f8ba00ada7a2d14f857abc4a7e023c87239beab72e5980dfd9a0e59bb89b4062b2998c28b56dce1bd757f81461e6f8b90b5d953e5ccd41cfb341cb47713680b5653318516adb9c37aeaff028c3cdf17216bb2a7cb99a839f6683968ee26d01638b8bbb703bdf63ec29c25fd0ed7e628ef19c14c9734f474ecd072d2dc4da02b7171776e077bec7d85384bfa1dafcc51de3382992e69e8e9d9a0e5a5b89b40566ef54788e55a5bb2d736bfec31bdc09e68a9612f5cd575d4b341cb4c713680ab69fce7bea1173a1d7b33a7d059d9a9377d951e5bb9ac8faa66839699e26d0155600c282a1890f6f2c32d7798aa117a69a76c98b4735ac355cd072d34c4da02a94c2aa9010784709d532117294a811ccdfb1b8d65e6b72aac9a0e5a6a89b405512467aaaee56b63f27308564a8b606196a27976c8cd6ff95a341cb4d613680aa148cf555dcad6c7e4e610ac9516c0c32d44f2ed919adff2b4683969ac26d015421db103686c10128198e7812223dfae553628372035c18969d072d3594da02a833b6206d0d820250331cf024447bf5caa6c506e406b8312d3a0e5a6b29b40550602d6664e86a2ccbe30642c8085dce14f84e3387dd707c9a841cb4d663680aa0b05accc9d0d45997c60c859010bb9c29f09c670fbae0f935083969acc6d0154160b59993a1a8b32f8c190b2021773853e138ce1f75c1f26a1072d3598da02a82c16b33274351665f1832164042ee70a7c2719c3eeb83e4d420e5a6b31b40550582d6664e86a2ccbe30642c8085dce14f84e3387dd707c9a841cb4d663680aa0b05accc9d0d45997c60c859010bb9c29f09c670fbae0f935083969acc6d015416041abec4e7f15b243e5d148196d967bdbe5107b72c1f40e1172d3598ea02a82bf0f6a3149d48de73f9868b82ad18b1fb2766352e283e9c023e5a6b31e4055057d1ed46293a91bce7f30d17055a3163f64ecc6a5c507d38047cb4d663c80aa0afa3da8c52752379cfe61a2e0ab462c7ec9d98d4b8a0fa7008f969acc79015415f40763e2fb7ad1bcb4900be94e82b7258e5f5cf3111f4fa5202d3598f302a82be70ec7c5f6f5a379692017d29d056e4b1cbeb9e6223e9f4a405a6b31e6055057ce1d8f8bedeb46f2d2402fa53a0adc96397d73cc447d3e9480b4d663cc0aa0af9c3b1f17dbd68de5a4805f4a7415b92c72fae79888fa7d290169acc79815415f3802508864837e4e00cd84bce021d080e0a2118d0ef4fbf603d3598f312a82be6f04a110c906fc9c019b0979c043a101c144231a1de9f7ec07a6b31e6255057cde094221920df938033612f380874203828846343bd3efd80f4d663cc4aa0af9bc128443241bf270066c25e7010e840705108c6877a7dfb01e9acc79895415f3782508864837e4e00cd84bce021d080e0a2118d0ef4fbf603d3598f312a82be6f04a110c906fc9c019b0979c043a101c144231a1de9f7ec07a6b31e6255057cde0203471cdb5f602eb2df560006a7e602330a59fba3eff24f5d663cc4ba0af9bbf4068e39b6bec05d65beac000d4fcc046614b3f747dfe49ebacc79897415f377e0ce41fe3ae3a8e64849ba7f9a057a8876ed8dae5fbfe37d8598f312f82be6efb19c83fc75c751cc909374ff340af510eddb1b5cbf7fc6fb0b31e625f057cddf633907f8eb8ea3992126e9fe6815ea21dbb636b97eff8df61663cc4be0af9bbec6720ff1d71d4732424dd3fcd02bd443b76c6d72fdff1bec2cc79897c15f377d85a5456e7ba0b69001680a791fbd8b07199d00a5cbfe5218698f312f92be6efaf40bb067c4a7954b7f9c7771bee0f88dddfe270b67fcbe70e31e625f357cddf5d0d8865a56b552c27c055162fd27d39b66c073d69ff99721d63cc4be7af9bbeb91b10cb4ad6aa584f80aa2c5fa4fa736cd80e7ad3ff32e43ac79897cf5f377d7236219695ad54b09f015458bf49f4e6d9b01cf5a7fe65c8758f312f9ebe6efae46c432d2b5aa9613e02a8b17e93e9cdb36039eb4ffccb90eb1e625f3d7cddf5c86498b3038bb54533d2178af51e31c3616cb6329cf998c5d73cc4be7bf9bbeb8f5543beb3edcd0d1f70f53de232c1aebd85aec136f3332faf79897cf8f377d71d3699d614b1fc9cf6aeb0a3bc5be18575b79fde6ae668035ff312f9f2e6efae396d33ac2963f939ed5d614778b7c30aeb6f3fbcd5ccd006bfe625f3e5cddf5c726679b0ff9e54f6928788b6e965e43dd18ac1d5a899a1b180cc4be7cc9bbeb8e35905baac130c6fdcdbd795cac226a39dc1c6074e334507029897cf9a377d71c53e1dce04fc7b62718475538d7aab6f362fce6a99668bb206312f9f356efae389084df4b6cf59479ad5b0cf12ebb506670bdf312fcd19080d625f3e6bddf5c711109be96d9eb28f35ab619e25d76a0cce17be625f9a32101ac4be7cd7bbeb8e222137d2db3d651e6b56c33c4baed4199c2f7cc4bf34642035897cf9af77d71c44426fa5b67aca3cd6ad8678975da833385ef9897e68c8406b12f9f35eefae388810f1a419cbf6fc6527d31926b1ae8e6b6a356ef9d19224d725f3e6bedf5c710f21e3483397edf8ca4fa6324d635d1cd6d46addf3a32449ae4be7cd7dbeb8e21e43c690672fdbf1949f4c649ac6ba39ada8d5bbe74648935c97cf9afb7d71c43c139f797b361a65e10b5ef12d83d29b55fdedd3cb8c92caba2f9f35f7fae38877273ef2f66c34cbc216bde25b07a536abfbdba797192595745f3e6beff5c710ee4e7de5ecd86997842d7bc4b60f4a6d57f7b74f2e324b2ae8be7cd7dfeb8e21dc290e24868735b1c027bdb16414f302aa9bb0fa596497f9d27cf9afc0d71c43b7521c490d0e6b63804f7b62c829e605553761f4b2c92ff3a4f9f35f81ae38876e304aeac6f33949b86bbced884a2a32a51b06456292618b4af3e6bf045c710edb6095d58de6729370d779db109454654a360c8ac524c31695e7cd7e08b8e21db64d3e03c8a347a9997bb9de191f06f28f185b71874987d12ccf9afc1271c43b6b268e603e1cf1d5eac439e42a346c0d18dcf93f0b9311465a9f35f825e38876d54d1cc07c39e3abd58873c85468d81a31b9f27e1726228cb53e6bf04bc710edaa264bd9a54a29da62ddadb8a0c80e5c5e2027582b4c46bd6b7cd7e0988e21db534c97b34a9453b4c5bb5b7141901cb8bc404eb056988d7ad6f9afc1311c43b6a62541bf41ff09ec43437d0a7b169799732cdfbcaa311c99aef35f826338876d4b4a837e83fe13d88686fa14f62d2f32e659bf79546239335de6bf04c6710eda96211955b4d28a33c4daba51e450bc8dc75fc14ea5c4740abccd7e098de21db52b4232ab69a5146789b574a3c8a1791b8ebf829d4b88e815799afc131bc43b6a561077af80208b51cb37af6f8939505f182b47969411d1cef435f826388876d4ab20ef5f004116a3966f5edf1272a0be30568f2d2823a39de86bf04c7110eda95641debe00822d472cdebdbe24e5417c60ad1e5a5047473bd0d7e098e221db52ac0fcfd4addabd11118a41a441c0e120bc067f109d8e901ba2afc131c543b6a5571f9fa95bb57a22231483488381c241780cfe213b1d2037455f82638a876d4aae3f3f52b76af4444629069107038482f019fc42763a406e8abf04c7150eda955c0a90fe1bac4b0b441ed34a05fd672ddae03ae0e9748281167e098e2b1db52ab71521fc37589616883da6940bface5bb5c075c1d2e905022cfc131c563b6a556e2a43f86eb12c2d107b4d2817f59cb76b80eb83a5d20a0459f82638ac76d4aadc5487f0dd62585a20f69a502feb396ed701d7074ba41408b3f04c7158eda955b835223a679b1336f9b9fac857ccd105a8aff06a944829b568e098e2b2db52ab6f6a4474cf36266df373f590af99a20b515fe0d52890536ad1c131c565b6a556de609b424b42af5e9eb4b1495729a23e9d6c04064e20a879a482638acc6d4aadbb4d48dd435bc13ff53628baa649a2a535844a68994152974a04c71599da955b7526a413338de502a239179d4489a37265b4d72d2f82a6d295098e2b34b52ab6e94d4826671bca0544722f3a891346e4cb69ae5a5f054da52a131c56696a556dd226a2a57b0df68d40b1249d0a1cebf1917f9f10bb0a9cee552638acd3d4aadba34d454af61bed1a8162493a1439d7e322ff3e21761539dcaa4c7159a7a955b746269cee990e3cb7ba91589c206a0dee40aabe9ee92a755d5598e2b35052ab6e8b4d39dd321c796f7522b13840d41bdc81557d3dd254eabaab31c566a0a556dd16268613110f5561a2122898799e95e0fd573cd7a1a9d71957638acd424aadba2b4d0c26221eaac344245130f33d2bc1faae79af4353ae32aec7159a84955b7456262aa4f113b80940156889de70b5abf00935ba83a75e095e8e2b350a2ab6e8ab4c5549e2277012802ad113bce16b57e0126b75074ebc12bd1c566a14556dd15624bcec712542a7b822684f71b934d7bad119460b9d79c97b38acd429aadba2ab4979d8e24a854f7044d09ee37269af75a2328c173af392f67159a85355b745561f060a716b6d2198566765bedb3186e5f0a7742b75e8c9ede2b350a7ab6e8aab3e0c14e2d6da4330accecb7db6630dcbe14ee856ebd193dbc566a14f56dd1556082a8272841709192663bef3632443926ee02caad7a4cbb88acd429fadba2aab105504e5082e12324cc77de6c6488724ddc05955af499771159a853f5b74555620aa09ca105c2464998efbcd8c910e49bb80b2ab5e932ee22b350a7eb6e8aaac4154139420b848c9331df79b19221c9377016556bd265dc4566a14fd6dd155580eba7fd517d3144a3302172e28a261219a4526aa7a4e5f89acd429fbdba2aaaf1d74ffaa2fa6289466042e5c5144c243348a4d54f49cbf1359a853f7b745555e3ae9ff545f4c5128cc085cb8a289848669149aa9e9397e26b350a7ef6e8aaabc01e6575594fb250964d6e1693b7131077e6b9150d274a04e66a14fdfdd15557703ccaeab29f64a12c9adc2d276e2620efcd722a1a4e9409ccd429fbfba2aaaee07995d5653ec9425935b85a4edc4c41df9ae454349d281399a853f7f745555dc0f32baaca7d9284b26b70b49db89883bf35c8a8693a50273350a7efee8aaabb81e6575594fb250964d6e1693b7131077e6b9150d274a04e66a14fdfdd15557703ccaeab29f64a12c9adc2d276e2620efcd722a1a4e9409ccd429fbfba2aaaee005a82e12152bc511027e8246d2aa69da4726b0319d29b79aa853f7f845555dbf0b505c242a578a2204fd048da554d3b48e4d60633a536f3550a7eff08aaabb7e16a0b84854af144409fa091b4aa9a7691c9ac0c674a6de6aa14fdfe1155576fc2d417090a95e288813f4123695534ed23935818ce94dbcd5429fbfc22aaaedf85a82e12152bc511027e8246d2aa69da4726b0319d29b79aa853f7f845555dbf041181aef7bdb24d81c9670d24bab634391186230a53897560a7eff09aaabb7df0e428e8bce18cc6805f3099c8db4ee81ce73205e4a72d2ad14fdfe1455576fbd1c851d179c3198d00be613391b69dd039ce640bc94e5a55a29fbfc28aaaedf7a390a3a2f386331a017cc267236d3ba0739cc817929cb4ab453f7f851555dbef47214745e70c663402f984ce46da7740e739902f253969568a7eff0a2aabb7de8703b4169b7ef49382bf6c1c0d1ad1017937461e1a72eced24fdfe1465576fbcf6c88db804641152824b3ab7999b84829d32b1fc04e5f41a59fbfc28daaedf79d65240fad62e4ad08162d7eeb29ceb84e52989b7d9cc0274c3f7f851c55dbef39565a78079c2bdcc7f92125ce49fb9897517392f83981f2997eff0a39abb7de7138c748bc0eba3c47bf0873948a5559294f2981ed73058933fdfe1474576fbce1718e91781d74788f7e10e72914aab2529e5303dae60b1267fbfc28e8aedf79c26f2f7b9d114b73d6c8e7f64a1fb38c9fe8e863b2cc17c8d0f7f851d25dbef3836a714fe6f8f96a655e96148c35c5413a7e132362983135a2eff0a3a5bb7de70560f4f87ac855578289f2511061e8aa6fa868a2c230640f46dfe1474c76fbce094dfc49a2670d31bce0aaca18ba2f7cd9fd13a18160c9c28ebfc28e99edf79c11280aebf1a47ce6318e1bbc296abd21aea6699effc195291e7f851d34dbef38215015d7e348f9cc631c377852d57a435d4cd33dff832a523cff0a3a69b7de70422c3e087368561b7e0535189da152aeb545e8d7fc0656487afe1474d46fbce083587c10e6d0ac36fc0a6a313b42a55d6a8bd1aff80cac90f5fc28e9a8df79c1063d0a7a7a77baf0afe19a8a6e7ba8e2cfc3e5bbed195ac5ecf851d352bef3820b06274da1c5d864178ffb3cd4edafed9a340dd3d732b72fdaf0a3a6a67de704150c4e9b438bb0c82f1ff679a9db5fdb34681ba7ae656e5fb5e1474d4cfbce082a189d36871761905e3fecf353b6bfb668d0374f5ccadcbf6bc28e9a99f79c1054313a6d0e2ec320bc7fd9e6a76d7f6cd1a06e9eb995b97ed7851d3533ef3820a86274da1c5d864178ffb3cd4edafed9a340dd3d732b72fdaf0a3a6a67de70415050fc0ce5916f05a9cc2dc295ac5bdb412dfcd6e356e79f5f1474d4d0bce0829f2e0a7277f9408e0b6521ad234f15de7d083c09c3add0e2bf28e9a9a279c1053d5c14e4eff2811c16ca435a469e2bbcfa107813875ba1c57e51d35344f3820a7a443c228cbb64bae5614cdc8532b5a1eecd32830bb7452efda3a6a68ae70414f3148a9dc64d2bf8828f5fe1025bc96bd846a762146e8c01fc474d4d16ce0829e529153b8c9a57f1051ebfc204b792d7b08d4ec428dd1803f88e9a9a2d9c1053ca522a771934afe20a3d7f84096f25af611a9d8851ba3007f11d35345b3820a794306746df3fc246cc47c5300ad4a986bce17d6ca07461b3e33a6a68b770414f2760ce8dbe7f848d988f8a6015a9530d79c2fad940e8c367c674d4d16ee0829e4e4daf7429d56b9de8ebdae823490442ee32380e7ed188738de9a9a2dec1053c9b277141008139be89a47bf83e8866add710b278faa3128b1cd35345be820a79354ee2820102737d1348f7f07d10cd5bae2164f1f546251639a6a68b7d0414f26a29d75caedb497cde5eb608f217f8df56ef0c3fe78c4bd0744d4d16fb0829e4d353aeb95db692f9bcbd6c11e42ff1beadde187fcf1897a0e89a9a2df61053c9a6336fcb6843887631479e4bc05641a55668735b9b3130e5d235345bed20a7934b66df96d08710ec628f3c9780ac834aacd0e6b7366261cba46a68b7da414f269659d1864de4845b7ceb3f56f94f64bd544e0fca69c4c53b49d4d16fb5829e4d2b3fb565489f6b39b1a344d5ea9527a2a34861f0d0898c1a94a9a2df6c053c9a550b7d233e1538f61b134fd3cd20ad6d413d063d9e1319d92a5345bed90a7934a916fa467c2a71ec36269fa79a415ada827a0c7b3c2633b254a68b7db214f269522df48cf854e3d86c4d3f4f3482b5b504f418f6784c6764a94d16fb6429e4d2a45be919f0a9c7b0d89a7e9e69056b6a09e831ecf098cec9529a2df6c853c9a54843e48c8e29f1e46901c364ca0134fc0e7ca635de319f36a6345bed91a7934a8f13db71c92a464b89d04cf18bf8c82017a58ec7b96340114d68b7db244f26951d27b6e392548c9713a099e317f190402f4b1d8f72c680229ad16fb6489e4d2a3a4f6dc724a9192e274133c62fe320805e963b1ee58d004535a2df6c913c9a54742aede6f62894df064f2db457bc9f28b7d8b899c81a022e6c45bed9237934a8e755dbcdec5129be0c9e5b68af793e516fb171339034045cd88b7db246f26951ce37c9f48578b5fed1097cf956e8dacada0f24c31d680a5db216fb648ee4d2a39b6f93e90af16bfda212f9f2add1b595b41e49863ad014bb642df6c91dc9a547366b3a2ac2b93a7dfbf2ba0d5399c95362e8d56872a02b1ac95bed923c934a8e6b6286ae3248d77eafb23a429f29f0cec07ded2ce24057d993b7db247a26951cd5511fb51168118017313aad364a3fc57ba81cb5c180b157286fb648f54d2a39a92e51c2cfa68582e62f3b82648addb2f1fc7bc78001645251df6c91eb9a5473515ca3859f4d0b05cc5e7704c915bb65e3f8f78f0002c8a4a3bed923d734a8e6a2455963eb70788e5089b4318a21d4f3c29e3179fd0592ed487db247af6951cd4316c52083b7539f58e02e8b0c3a080f7fe8a54ff70b277e91fb648f5fd2a39a852d8a41076ea73eb1c05d161874101effd14a9fee164efd23f6c91ebfa547350a5b14820edd4e7d6380ba2c30e8203dffa2953fdc2c9dfa47ed923d7f4a8e6a14423b5cca90ff7d7ece3a8059c69ea3f9f16cdbb5593d9890db247aff951cd42710891241f8617db5693b28ab839b6fee8f1c1367b27cd522b648f6002a39a84d21122483f0c2fb6ad27651570736dfdd1e3826cf64f9aa456c91ec005473509a42244907e185f6d5a4eca2ae0e6dbfba3c704d9ec9f3548ad923d800a8e6a134105aeabc996e7063169f6d541339a76f2522f73a93e84d16b247b00251cd426720b5d57932dce0c62d3edaa826734ede4a45ee7527d09a2d648f6004a39a84ce416baaf265b9c18c5a7db5504ce69dbc948bdcea4fa1345ac91ec0094735099c0ee9ae91a1d605d081c19298902b6373d55a15d19f440cb6923d80138e6a13371dd35d2343ac0ba1038325312056c6e7aab42ba33e88196d247b00271cd4266e3ba6ba468758174207064a6240ad8dcf556857467d1032da48f6004e39a84cdc035fcd39e512b13bdad2bcbc77b9439957130a89fa2209b591ec009d735099b706bf9a73ca256277b5a57978ef728732ae261513f444136b23d8013ae6a1336e0d7f34e7944ac4ef6b4af2f1dee50e655c4c2a27e88826d647b00275cd4266dc1afe69cf289589ded695e5e3bdca1ccab898544fd1104dac8f6004eb9a84cdb835fcd39e512b13bdad2bcbc77b9439957130a89fa2209b591ec009d735099b706bf9a73ca256277b5a57978ef728732ae261513f444136b23d8013ae6a1336e06405a7261b0ed1ae81755715e4af0e507104fe7b888411657b00275dd4266dbf541da6f90c802614cfb0d623bfbc449b8e4c58f41109c6cbf6004ebca84cdb7d344da69eef62cee16c27d43f75d6b131c8db0de522153198ec009d7a5099b6f9689b4d3ddec59dc2d84fa87eebad626391b61bca442a6331d8013af4a1336df25d48f32893edbe3d7d6578f5cdb8ecc1cfae939188566a64b00275ea4266dbe346a43efdfe3dff32c79119e391d0017e4b9f832010ae78ca6004ebd584cdb7c5195ad6a8d2de811d5be85bbf19fe2af74381623d215e9595c009d7ac099b6f8932b5ad51a5bd023ab7d0b77e33fc55ee8702c47a42bd2b2b8013af581336df12656b5aa34b7a04756fa16efc67f8abdd0e0588f4857a565700275eb0266dbe2456e90df36d568ba2ac0905f0c64f7fb4c84d6de60af650af004ebd614cdb7c4739e47493b10f99fd24d833d982fd27643cdd37c915ee455f009d7ac399b6f88d73c8e927621f33fa49b067b305fa4ec879ba6f922bdc8abe013af587336df11a73a42afb9aa0eaac6026f75e0252c58b9fb73b2157bab97d0275eb0f66dbe233735aaea40ba458108d1416b3fb03b311ebb0d23faf7716fb04ebd61fcdb7c46572c7b5f4edab32d8e6ee555fec658e1e83a4007c5eefd1f709d7ac409b6f88c971a1c496b1b8e8699aa2d2b7cf294437b38a5cf5bde147ef13af588236df11916f55e1da39d4538b020bcd6794b0b06a135715e87bc433df275eb1056dbe23216abe1c614a0b29cdd0ddc2c71fbf88ced2f087cdf78a0bbf4ebd620bdb7c4641618e916f6a78d6536e81ad8635dd399852236b98ef15bb7f9d7ac418b6f88c814f2f7b8bab542f5ea9c9830462189b2b5089332ede2d1b003af588326df119012a714fc42d0ae17520592e00ba8f5e514d54c25abc5bda0175eb1065dbe2320154e29f885a15c2ea40b25c01751ebca29aa984b578b7b402ebd620cbb7c4640235d797bd8a8e088c4e2adffae09ba13fe1956567f1710c06d7ac41986f88c8036baf2f7b151c11189c55bff5c137427fc32acacfe2e2180daf588330df1190066370b7a3009aa4e90571a7e378ccacfa3297f19cc5c5d41c5eb10662be23200b52f3c7f2d797cc89d7a977bee7f781ef11723f368b8d4c39bd620cc67c46401531f9e89285921bcb7c191775c64d2bd8cf26da6a171c3c747ac4198df88c802963f3d1250b243796f8322eeb8c9a57b19e4db4d42e3878e8f588331bf119005253f9faf6ecaaf1e5bd2a85cf0f92d75de8ddc5a55c7295d2eb106638e23200a334064e9aafb86683471b33961583d6b67dfde747b8e6cfa6d620cc72c4640145680c9d355f70cd068e36672c2b07ad6cfbfbce8f71cd9f4dac4198e588c8028a5c2b931795441cc4e932f6504c6d82d4a439f91be39ce29c588331cc1190051344697edc00eabc419f2c14988f392da3f4b64e34c73b6939b106639923200a2514e55664d837fb3b0b1e512914d0834295aef8668e787674620cc7334640144929caacc9b06ff676163ca25229a106852b5df0cd1cf0ece8c4198e668c8028925395599360dfecec2c7944a453420d0a56bbe19a39e1d9d188331ccd19005124333d0bd398225c9025b8b1409ce2420f59ba1f3173c557a41066399b3200a247667a17a73044b9204b71628139c4841eb3743e62e78aaf4820cc73366401448e590687fb36ebf4f863a8ecfa69e73038132ad8c2cf1702914198e66dc802891b3e1f68a3443a6ca8941801ecca2c886ad2980d829e2fa9238331ccdc90051235085129f35ed75c08f4f62bd18ab738d0517277023c60f648066399ba200a246910a253e6bdaeb811e9ec57a3156e71a0a2e4ee0478c1ec900cc73374401448d22144a7cd7b5d7023d3d8af462adce34145c9dc08f183d920198e66e8802891a442894f9af6bae047a7b15e8c55b9c6828b93b811e307b240331ccdd1005123481124f7e2c3d843471c28e510a1d1b4ffc369cc20c611088166399ba300a2468f2249efc587b0868e3851ca2143a369ff86d398418c221102cc73374601448d1e4493df8b0f610d1c70a394428746d3ff0da730831844220598e66e8c02891a3c153a17c2f5249cf0ae0d507d04ebcff8c790bd033089e80c31ccdd19051234772a742f85ea4939e15c1aa0fa09d79ff18f217a066113d0186399ba320a2468ee54e85f0bd49273c2b83541f413af3fe31e42f40cc227a030c73374641448d1dc35e316c47f876a3d3d30abe01dbca7c0e8c844168450e4628e66e8c92891a3b76bc62d88ff0ed47a7a6157c03b794f81d190882d08a1c8c51ccdd1925123476e639eb3bed4802bacc188d7786d50c6fe4f636c571145358b399ba325a2468edb534fc02a7f62da114fd7d6e8d0ffb5f74b0934ab228c0f177337464c448d1db532b1d901d52836da6c75d5c9985d93e94254c5534519c22fe66e8c99891a3b696563b203aa506db4d8ebab9330bb27d284a98aa68a33845fccdd1933123476d256d9bcb42b035e217e9d7f1e57d4779fb595714a1468acc099ba32672468eda339c5d2152c693efaca012634a607173a176d3e9128d2fd82337464cf48d1db45738ba42a58d27df594024c694c0e2e742eda7d2251a5fb0466e8c99e91a3b68a7329a10188077ea2f4cac0ca8e7a84e309f75641a34d9a09cdd1933e23476d1372659aafe6717ffdb65ba98d135331c0c0310880469cd8149ba3267d468eda2570dd8e0ca34582b3397d7b121d048b7c2ca46cfd8d3b542a37464cfb8d1db4496dcd74c61ced881e3fc11e1c30673ef3058b35f81a784c556e8c99f81a3b689167ad4239103d92f44c486430572ca5e0b758c7ed34f23cabdd1933f13476d1215b6cdd1ef6dda8a06556f058a4b773bc1af3ebd769e61d58ba3267e368eda24142ec12eac41dd3f8977408a93fcd0f72e22a33abd3cddeb27464cfc7d1db448111ea7e825e9e2aa8fbae394a75f846e07096c354a79d6165e8c99f90a3b6890123d4fd04bd3c5551f75c7294ebf08dc0e12d86a94f3ac2cbd1933f21476d120247a9fa097a78aaa3eeb8e529d7e11b81c25b0d529e758597a3267e428eda24041b664cbfcb53d7ffaa37f24ba6205efe30f876a23cecaf30464cfc861db4480736cc997f96a7afff546fe4974c40bdfc61f0ed4479d95e608c99f90c3b68900e6d9932ff2d4f5ffea8dfc92e98817bf8c3e1da88f3b2bcc11933f21876d1201c6744beab310142b51e85ba5527611fec3406110ee7671d833267e431eda240375a9bd6033865082209d19ca2452067d3144e7e1acecfdf0764cfc864db44806d414a04b3472c92fbe069613c809ef7a0d4df58329da1620fc99f90cab68900d90ea6621364bba8af8d98ea70f79c173c56010c623b446820933f21966d1201b11d4cc426c977515f1b31d4e1ef382e78ac0218c47688d041267e432cda2403623a99884d92eea2be3663a9c3de705cf158043188ed11a0824cfc8659b44806c401456947fc3fc834398d7b7fb33ee1dd5c4abf0eda24e50599f90cb468900d87028ad28ff87f9068731af6ff667dc3bab8957e1db449ca0b33f21968d1201b0e0515a51ff0ff20d0e635edfeccfb8775712afc3b6893941667e432d1a240361c0a2b4a3fe1fe41a1cc6bdbfd99f70eeae255f876d127282ccfc865a344806c381456947fc3fc834398d7b7fb33ee1dd5c4abf0eda24e50599f90cb468900d87028ad28ff87f9068731af6ff667dc3bab8957e1db449ca0b33f21968d1201b0e0515a51ff0ff20d0e635edfeccfb8775712afc3b6893941667e432d1a240361c02ec6fcaaf6469cd49383e7d195cf16a8d1a1e36a127426cdfc865a354806c37f5d8df955ec8d39a92707cfa32b9e2d51a343c6d424e84d9bf90cb46a900d86fe472e4b58af7cf60a1ad5c73e4d9a829df2c9e9a549d23f38f21968d6201b0dfb1a6eef5e355c6ecc0271b67491932d3691d62f4793a62272e432d1ad40361bf534dddebc6ab8dd9804e36ce923265a6d23ac5e8f274c44e5c865a35a806c37ea69bbbd78d571bb3009c6d9d2464cb4da4758bd1e4e9889cb90cb46b500d86fd45f89d39e8145f917e053db9c82f791af3af3d6399d32b79821968d6b01b0dfa74b25ffe9d8ee74e78d6ddf30fc4d4b59222a08703a671331432d1ad70361bf4d225e5880883f6c86e7a1e659eef8beacf0966cdd74cfca63865a35af06c37e9944bcb101107ed90dcf43ccb3ddf17d59e12cd9bae99f94c70cb46b5e0d86fd32158bbaaef76034d36b4dc15fb24122ae6e9c0f72d340cd8f1968d6bd1b0dfa632b17755deec069a6d69b82bf6482455cdd381ee5a6819b1e32d1ad7a361bf4c6562eeabbdd80d34dad37057ec9048ab9ba703dcb4d03363c65a35af46c37e98c38702e2491642953273432f588673d6e2122d7939a081079cb46b5e9d86fd31770e05c4922c852a64e6865eb10ce7adc4245af27341020f3968d6bd3b0dfa62e6dd3113f1bf328046996f3ce17fb1db330cdba4b6821e5e82d1ad7a861bf4c5b67b87b2b0e48d2c09ff40f94265463610dddd093d0456fd15a35af51c37e98b55b834f02f2f428390cae47204306eebcc7fdfd24a08c83a3b46b5ea486fd31694318f6b2bc4ad329e622b6387c6c05743c3e5646411aab4868d6bd4a0dfa62d1124446124ef8290b990b9468ef3632e324bf08898236fa91d1ad7a951bf4c5a124888c249df05217321728d1de6c65c6497e1113046df523a35af52a37e98b42491118493be0a42e642e51a3bcd8cb8c92fc222608dbea4746b5ea546fd316841e34893f4e23cb149522cb3f700fbf13d23aa04911b9788f8d6bd4a9dfa62d073c69127e9c4796292a45967ee01f7e27a47540922372f11f1ad7a953bf4c5a0e04e47daa0ef1af0a215154f5b69d2449f52cdd2146e7863f35af52a87e98b41b09c8fb541de35e1442a2a9eb6d3a4893ea59ba428dcf0c7e6b5ea550fd3168361391f6a83bc6bc28854553d6da749127d4b374851b9e18fcd6bd4aa1fa62d06c2723ed50778d78510a8aa7adb4e9224fa966e90a373c31f9ad7a9543f4c5a0d84e47daa0ef1af0a215154f5b69d2449f52cdd2146e7863f35af52a87e98b41b028a20deeb49863fbf6f0c6aeca02b13951de0025dcf26be7b5ea5510d316835f51441bdd6930c7f7ede18d5d94056272a3bc004bb9e4d7cf6bd4aa21a62d06be2e9a9067a8c412a7a88942b31e68ecdff3ba5c9473cb539fd7a954444c5a0d7b5d3520cf5188254f511285663cd1d9bfe774b928e796a73faf52a88898b41af6467c9a4b7972cd566eeb32c47001db7a7b2bce4ecf2ef2805ea55112316835eb190b8d43c9481d64aa9c8d80d661deefa299f89a9e5f8901bd4aa22562d06bd532171a8792903ac955391b01acc3bddf4533f1353cbf12037a95444ac5a0d7aa642e350f25207592aa72360359877bbe8a67e26a797e2406f52a88958b41af54546ec2cb20a36ddd21aa93fea96d1f77c11220d1f2fdec0eea55112c16835ea734efde4317a95e72101b4ff5493866ea2e669da0e5fd7c1ed4aa22592d06bd4d69dfbc862f52bce420369fea9270cdd45ccd3b41cbfaf83da95444b25a0d7a9a5fd1d1b93507fc800d3367cd1b3fc3a365dcd28097f7947c52a88965b41af5334bb5fc1f40727bb7e72cf7922cddaf4177fc00fe2ff0ccf9a55112cc6835ea65237e50eb57477a279b20171c5019867d9c3a5df95fe33df44aa22599d06bd4c946fca1d6ae8ef44f36402e38a0330cfb3874bbf2bfc67be895444b33a0d7a9921a0b9c5a33806b563946846936c441f11d2bd3e27f8e9bd22a88966841af5323341738b46700d6ac728d08d26d8883e23a57a7c4ff1d37a455112cd0835ea646682e7168ce01ad58e51a11a4db1107c474af4f89fe3a6f48aa2259a106bd4c8c5c6f3b7e7265dd6996fa4b41ac80378395a0fb10fc7682925444b3430d7a991744f0cfa9bb2e3d8afababe7b4f5e9701d784521ef8eea925a88966871af5322d15f3f8004cbefdcdc23ba4ee951b55fe5b4b003af1def64c5112cd0f35ea64592be7f000997dfb9b847749dd2a36abfcb6960075e3bdec98a2259a1e6bd4c8b257cfe00132fbf73708ee93ba546d57f96d2c00ebc77bd931444b343cd7a991643bb218af3c5a7125dea34f6c9f38d7ed869a5dd48ef956638896687aaf5322c703768a0b4f1765038a0cc6d134cfd7d5b97717a61df450c8112cd0f65ea6458d06ed14169e2eca0714198da2699fafab72ee2f4c3be8a1902259a1ecbd4c8b1a0dda282d3c5d940e28331b44d33f5f56e5dc5e9877d1432044b343d97a9916341bb4505a78bb281c50663689a67ebeadcbb8bd30efa28640896687b2f5322c683768a0b4f1765038a0cc6d134cfd7d5b97717a61df450c8112cd0f65ea6458d06ed14169e2eca0714198da2699fafab72ee2f4c3be8a1902259a1ecbd4c8b1a069b4db809c3bc39a4ff7dc452a541d690a0845847d15d6054b343d98a991633f5f7c0fae0eda09ec6cb5e0824b0662ccc052e705fa2d500b96687b325322c67d4b0a7808f4169690a631e8fc8c6aed942ce82a08f45c44182cd0f665a6458cf9222748bebe8fafd91929f9f10f3403230612b00ee8ba2c3159a1eccc4c8b19f1444e917d7d1f5fb23253f3e21e6806460c25601dd1745862b343d998991633e214af7ba7d0a1421c316e0fbc332e3486c48d1c38a2ea54c66687b332322c67c3295ef74fa142843862dc1f78665c690d891a387145d4a98ccd0f66646458cf8652bdee9f42850870c5b83ef0ccb8d21b123470e28ba953199a1eccc8c8b19f0c318e35eb5b6c93995836a5d98fcfcc30d0ab3dc217544a34343d999291633e17631c6bd6b6d92732b06d4bb31f9f9861a1567b842ea89468687b332522c67c2e524b305a4414d11d2da0bf5e359d58bdeeef53055d52ccd1d0f6664b458cf85b30a8b9615e8c24f22807a6b46198d9768a210207baa73da4a1eccc978b19f0b5615172c2bd1849e4500f4d68c331b2ed1442040f754e7b4943d9992f1633e16a4eb53e32509316806ce4c2c97cc18dd4d4c6641bea9e9a9387b3325f2c67c2d3297cd5117788afb8a68fad8aefe143a455cf2434d53ed9280f6664bf58cf85a552f9aa22ef115f714d1f5b15dfc28748ab9e4869aa7db2501eccc97eb19f0b4a3205acf2b485419a6704de23b5e3368c037eecd054fd08a13d9992fe633e1693640b59e5690a8334ce09bc476bc66d1806fdd9a0a9fa11427b3325fcc67c2d2654290c77a877892168d9a086cdeb022aba3e0f3e53f5c685f6664bfa8cf85a4b3464719c275194fa9e79690592342c5020be7a79a7ed310ceccc97f619f0b49568c8e3384ea329f53cf2d20b246858a0417cf4f34fda6219d9992fec33e1692a5da41f1d73a8d6a246abcc0e3f2ed93b2f3c45e39fb66834b3325fd967c2d253475a96e7bdb42ffc5a1dc01474bbda710abae7c43f6e746a6664bfb3cf85a4a51ac7867c51cae2b08101a820dfd5dcdcc1b82b857ede8cd5ccc97f689f0b4949358f0cf8a395c56102035041bfabb9b98370570afdbd19ab9992fed13e1692926b1e19f1472b8ac20406a0837f57737306e0ae15fb7a33573325fda27c2d2524624e8c8f64b9983bd4d368fef50d0ee0ba03b828f6f60aaf664bfb45f85a4a4750af71cb9fd5b32f766cf9f5e07845bc2049cc4eededb95fcc97f68cf0b4948d2d713c44160de916b9a01be3b74eb372ecd5f49adbdd16c0992fed1ae16929195ae278882c1bd22d734037c76e9d66e5d9abe935b7ba2d81325fda35c2d2523241d749bd2e9a2712b3469786d398f5c65f9a2e686f75ff0364bfb46c85a4a4630fc0ec273396d0dd335357059d9013876b76b8cddeeda207c97f68da0b4948c51f81d84e672da1ba66a6ae0b3b20270ed6ed719bbddb440f92fed1b41692918a3f03b09cce5b4374cd4d5c1676404e1daddae3377bb6881f25fda3682d2523140a19b9e6731909a16760e024e2dec43607f8226bf76eb43f4bfb46d15a4a4627143373cce6321342cec1c049c5bd886c0ff044d7eedd687e97f68da2b4948c4e2866e799cc6426859d8380938b7b10d81fe089afddbad0fd2fed1b456929189c50cdcf3398c84d0b3b07012716f621b03fc1135fbb75a1fa5fda368ad25231382dadf71407f31cce42d42a46244a6b5b2bc482bc76ece7f5bfb46d16a4a4626f5b5bee280fe6399c85a8548c4894d6b657890578edd9cfeb7f68da2d4948c4de42ca34fcf62ef5f0d816d1108787d5675b5466eedbb543d7fed1b45b929189bb11a6c2a6c2c06e997cf3ca19056dd2c962eb29dab76c2bb0fda368b825231375234d854d8580dd32f9e794320adba592c5d653b56ed85761fb46d1704a4626ea469b0a9b0b01ba65f3cf286415b74b258baca76addb0aec3f68da2e0948c4dd419486de2ec65f783b46478c021ccbe45c39baad2bb630188ed1b45c229189ba73290dbc5d8cbef0768c8f18043997c8b873755a576c60311da368b845231374e6521b78bb197de0ed191e3008732f9170e6eab4aed8c0623b46d1708a4626e9c5655c7c439923ed56fe9edf904c41a28c91fb292db19b04868da2e1248c4dd3738bde83549870062ac9a03e9ffe65c4c3e81c122b6350491d1b45c259189ba6d717bd06a930e00c5593407d3ffccb8987d0382456c6a0923a368b84b231374da6f09f981fc7e84427f2e379ff5f7992ba6496087d8d5b64846d170974626e9b36a264bb0cf5f8b3ccb229737e24d5a51f8d51d0cb1ad10918da2e12f8c4dd365605ef00e75219931630b5667baf8dc9e9dec9616635bc5241b45c260189ba6c94cd038c9c0a5b51a92dcd4c76c4fe137e81b8829c6b92e49368b84c131374d9125b2ca4057adececf27fd186cefdea6a7c796c508d7400936d170983626e9b214b659480af5bd9d9e4ffa30d9dfbd4d4f8f2d8a11ae80126da2e1306c4dd364222dd81ae351a366b96c56e133255d1a49e280d3f35d1a64eb45c260e89ba6c8345bb035c6a346cd72d8adc2664aba3493c501a7e6ba34c9d68b84c1d1374d90617885f65aacb5c6627dbe044bfb56e8d24e290f9d7483d3bd170983b26e9b20b2f10becb5596b8cc4fb7c0897f6add1a49c521f3ae907a77a2e130764dd364165e217d96ab2d71989f6f8112fed5ba34938a43e75d20f4ef45c260ec9ba6c82c485553da2cbd65e90ba52a1df4099c63d356e3cbba438ddf8b84c1da374d90571cbd00612fdd4e89e4107c33de7160c252f023947488bfc0170983b56e9b20ad397a00c25fba9d13c820f867bce2c184a5e04728e9117f802e13076add36415a72f40184bf753a279041f0cf79c583094bc08e51d222ff005c260ed5ba6c82b471fa5bb6554cf706ed4a0996e9e92e0d43c378a0a447a201b84c1dac74d905677007101980fc70c5a75a3b25ca30841533c94d3e4890e80470983b59e9b20acd6c2078dfd85b64431b7a9e438abf302513d4f67991237409e13076b4d364159964534a6c87194b3e03bb647f0bdc8844d3ec48f022488c14c260ed6aa6c82b3154b8ed85e4951933d43cf0f60e173884541aeddd4492bc2a84c1dad64d905661358433b89f8cb51f754009e4128c9903547837b789271c560983b5ad9b20acc16b0867713f196a3eea8013c825193206a8f06f6f124e38ac13076b5b364159826223278f54955735a1c64f8840908c07fe233adb249e1559260ed6b76c82b3035058a7cb7f8d31231052c708777f400aa888d1b3493dceb34c1dad6fd90566052cc3a843d57ce4fded6bb608e55ca80ffd53ff63927d4167983b5ae0b20acc0959875087aaf9c9fbdad76c11cab9501ffaa7fec724fa82cf3076b5c1641598123f20f9bc2c5616af8275001b8bd0c83aa192598b49f6a99f60ed6b83c82b30230a544c252f0eb016d1b0282f0dffb86fef670f1393eef73fc1dad7089056604514a8984a5e1d602da360505e1bff70dfdece1e2727ddee7f83b5ae1120acc08a29513094bc3ac05b46c0a0bc37fee1bfbd9c3c4e4fbbdcff076b5c224159811452a26129787580b68d8141786ffdc37f7b38789c9f77b9fe0ed6b84482b3022831571affc74d8424e7c8aae8d659aef9a2b34d363ef117fd1dad708a0566044f62ae35ff8e9b0849cf9155d1acb35df345669a6c7de22ffa3b5ae1140acc089e516ec4abf398934b6be8d39b4fc4e3e1370f90d5fbc603f576b5c2291598113b2eefe204bd93a94ea497cf2e95e7efbd1a617da8f78dabebed6b84532b3022755ddfc4097b27529d492f9e5d2bcfdf7a34c2fb51ef1b57d7dad708a6566044ea47d1e0bfccb127f25f2564b24dfde6ef15c852a0de3853b0b5ae114dacc089d31bb61a2c6fc4d29c8b10f15c9259f5d8d7d3013ebc724b626b5c229c598113a5376c3458df89a5391621e2b924b3ebb1afa6027d78e496c4d6b84538b302274a6ed868b1bf134a722c43c5724967d7635f4c04faf1c92d89ad708a7166044e9469c32a105489179c254db2dc892dd6c16ada65f2e393ff145ae114e3cc089d275f98accd7f74b1f017618db108b9d57d81f727e2c729a229b5c229c898113a4d4b43b247d54be697fb89435a07d1d2f5b030abc28e54e8546b845392302274992299bd3c80fa4fe7c3d8aeac0601cde60ca3b3821cab74a9d708a7256044e93145337a7901f49fcf87b15d580c039bcc194767043956e953ae114e4ac089d26216794d9eda4bc256dc28e2a80e655f92ded12a0572af76a85c229c968113a4c32cf29b3db49784adb851c5501ccabf25bda2540ae55eed50b845392d0227498659e5367b692f095b70a38aa039957e4b7b44a815cabddaa1708a725a044e930c3fdcc5a3a8c0956eae0d3d3869892491a2cbac28957d5943e114e4b5089d26170bcbe3f427e3ad9528e0a268c970711df1d9b44e2afc5688c229c96b113a4c2d1797c7e84fc75b2a51c144d192e0e23be3b3689c55f8ad11845392d62274985a2f2f8fd09f8eb654a38289a325c1c477c766d138abf15a2308a725ac44e930b45e5f1fa13f1d6ca9470513464b8388ef8ecda27157e2b446114e4b5889d2616848d097ef549d5c0a5ad04e848d6539d9c9dda0dfafc70c8d229c96b213a4c2cf1db3888b7f9d3acc8266c50111289bae3ffd9dbc5f8fbd1b45392d652749859d3b671116ff3a759904cd8a022251375c7ffb3b78bf1f7a368a725aca4e930b3a02e07adad4d76de9d6613bfc3b0096b3ac38d2ee7e40986e14e4b5959d26167305c0f5b5a9aedbd3acc277f876012d675871a5dcfc8130dc29c96b2b3a4c2ce60b81eb6b535db7a75984eff0ec025aceb0e34bb9f90261b85392d656749859cc1703d6d6a6bb6f4eb309dfe1d804b59d61c69773f204c370a725acace930b3982e07adad4d76de9d6613bfc3b0096b3ac38d2ee7e40986e14e4b5959d26167305c0f5b5a9aedbd3acc277f876012d675871a5dcfc8130dc29c96b2b3a4c2ce6044310f620c3dfd2d65152706b683d4e5ba77179c9027bf86392d656849859cbf14747770eede7d1296f076056365d1c621308b362051230d725acad1930b397d28e8eee1ddbcfa252de0ec0ac6cba38c4261166c40a2461ae4b595a3261672fa51d1ddc3bb79f44a5bc1d8158d97471884c22cd881448c35c96b2b464c2ce5f42fb614344d566b4c8449d823118cb62bb5c6b5ae028abc6c92d6568d9859cbe75f6c28689aacd6990893b04623196c576b8d6b5c051578d925acad1b30b397ce4aeaa97e0bbc2fe9dded88843c9100a9835d32b50a2c95b34b595a3761672f9b21e7aba8eddae28b88a139006f80294db2fcc167145acf6796b2b46fc2ce5f3543cf5751dbb5c51711427200df00529b65f982ce28b59ecf2d6568df859cbe6a13b107508dce0ce5ef4b0bf9b45ecd3178356199516ce19f5acad1c00b397cd327620ea11b9c19cbde9617f368bd9a62f06ac332a2d9c33eb595a3801672f9a64ec41d4237383397bd2c2fe6d17b34c5e0d5866545b3867d6b2b47002ce5f34c299a933144d2e9e7471e87c5995491866ded68c78b68b0fbd6568e0159cbe6975335266289a5d3ce8e3d0f8b32a9230cdbdad18f16d161f7acad1c02b397cd2e327ca571e9ae2a54e940470e5bb06e1463f7ff1b2da467f0595a3806672f9a5b64f94ae3d35c54a9d2808e1cb760dc28c7effe365b48cfe0b2b4700cce5f34b65604ee747d1b2c0b71c74431651fe04c3c225869b69343c26568e01a9cbe696b381c3595d098daceb054b05ac09de89324870cd06d282b85cad1c036397cd2d570386b2ba131b59d60a960b5813bd126490e19a0da50570b95a3806c72f9a5aa6c832f0418c5edf28e18e962f8d5ca473e5e8f3eb4a252182b4700d9e5f34b536518b6b507ee5e9ce8f7fabde809bc8928ff7a7a69464831568e01b4cbe696a55643c616e63f3ff19eb61d73c671a10cfe4150f1d28e3463ad1c036a97cd2d493899e4daa2e1029b0a3262df83416a14a8c4fde0a51e0cc85a3806d62f9a5a917133c9b545c205361464c5bf0682d4295189fbc14a3c1990b4700dac5f34b5226e79ec1761e68d23f58fb3760363d04d4f56537f9479d72268e01b59be696a43690630db9a2f9cffb7e58ee3fd25c8954aef02fc28f55245d1c036b47cd2d4855e1eba640ac1bcb73c9145bff0a9b925422061f551ec488ca3806d69f9a5a909484fcd74ebe5fc2645e8b377d7b19a4530831fe7a3da351a4700dad4f34b52111cb1f396ae2e7b0458978ee7a5c15c850d489bcc47b60e358e01b5aae696a4213963e72d5c5cf608b12f1dcf4b82b90a1a9137988f6c1c6b1c036b55cd2d484272c7ce5ab8b9ec11625e3b9e9705721435226f311ed838d63806d6ab9a5a908471a1f56247d65ada91829f3524690c2316873a5f3db215ad700dad5834b521076f564371660f386cefcb66623f304040d950d0bb7b65cf5be01b5ab1696a420d6abedf8fa280f391ac5cf4bc74bea87c5ee3fd73f6cd42b8c036b563d2d48419619017cc1b6469db25801170dfdb78f36a0a56e4ed9c2972806d6ac8a5a908314f3288450d2b566e17c64ad9b61519e1805709c6db39f6e600dad5924b5210612a776936f0b92f93fc52bdab62885bbdacf06f8ab67591cd01b5ab2596a420c154eed26de1725f27f8a57b56c510b77b59e0df156ceb239a036b564b2d48418235effd8899474107be111ea5807f96f160041a27d9d7eb3506d6ac975a9083036bdffb11328e820f7c223d4b00ff2de2c008344fb3afd66a0dad592eb521060663d24ecf3b7f86d6c50aa28df85c83c02c52c49c676150d51b5ab25e6a420c0b53b6f64b4d61906556db6d13e7172f7b04e7e535cec445ab36b564bdd4841815338045437125a3827a7d021fc48c86f0b61226689d8a2f576d6ac97ca908302967008a86e24b4704f4fa043f89190de16c244cd13b145eaedad592f9521060525a136dba9af910c1b6ba3077089043bd848af59f762a615eb5ab25f3a420c0a3403934220c54a43b3a3a88e6077eaf75b558473bec5666be6b564be8484181450c84c0f0ef0bcb2e413b39c4055b86e616f2ea74d8ae717dd6ac97d190830289190981e1de17965c827673880ab70dcc2de5d4e9b15ce2fbad592fa321060512321303c3bc2f2cb904ece710156e1b985bcba9d362b9c5f75ab25f46420c0a2464260787785e597209d9ce202adc3730b79753a6c5738beeb564be8c84181448545e67bbc71f359be079c4384c16965c1b71034a8ae8bbde6ac97d1a0830288f34cf282464a0edef8db9b0688e8b54b2e324629215d31bbdd592fa351060511d699e5048c941dbdf1b7360d11d16a965c648c5242ba6377bab25f46a20c0a23a5f4ef93e68e63a7603ace99a308b7ac638d3e645574e12f8564be8d5418144734ab04b29a82ef7a3d41ffb2c57751d871dea2887ae9dc9f1ac97d1ab830288e52172ef0026c071ff75061e50a5486308e816ad0c5d3d37e4592fa358060511c942e5de004d80e3feea0c3ca14a90c611d02d5a18ba7a6fc8b25f46b00c0a239211de14ad71644ab5a0dea13a8b7fb41e4c9d102e74f6839264be8d611814472323bc295ae2c8956b41bd427516ff683c993a205ce9ed0724c97d1ac230288e46477852b5c5912ad6837a84ea2dfed079327440b9d3da0e4992fa358460511c8c1b02fe186184d864d3bb31cc525bc8ed112add70a7b5c09425f46b09c0a239173605fc30c309b0c9a7766398a4b791da2255bae14f6b81284be8d6138144722e6c0bf861861361934eecc731496f23b444ab75c29ed7025097d1ac270288e45c642a496fe28945de6a9fb65a893c6f63359947823dafa8a22fa3584f0511c8b75466eb8c9b750e74a20594ad08d706c11774eb017b60f5455f46b09f0a23916d34e02fc60d4c9fa110d15152080c357cdb2c31fff6c38e8bbe8d613f144722d969c05f8c1a993f4221a2a2a410186af9b65863ffed871d177d1ac27e288e45b25f9317c50b95013c100b6d40168efdee18f323fcdb0fde2ffa3584fd511c8b634b388836ed8c852fecdd0278237c23d6de28a3f6b6216060f46b09fba23916c52283691ab17b8d17a6802ce83d566fa86893a3ea6c4464c2e8d613f844722d894506d23562f71a2f4d0059d07aacdf50d12747d4d888c985d1ac27f088e45b12161ffd179c50b71666c6db98ebb7e69c4e90eba6b113370ca3584fe211c8b6232c3ffa2f38a16e2ccd8db731d76fcd389d21d74d62266e1946b09fc423916c46587ff45e7142dc599b1b6e63aedf9a713a43ae9ac44cdc328d613f884722d88c3d124169b8e83b6b02fd04bf541d5cdd20c9b932889b5c661ac27f118e45b1170636db804832f98dd2c031769e98e1b4edd5ce6211385ccd3584fe241c8b622d0c6db7009065f31ba58062ed3d31c369dbab9cc42270b99a6b09fc483916c45a18db6e0120cbe6374b00c5da7a6386d3b757398844e17334d613f890722d88b431b6dc024197cc6e96018bb4f4c70da76eae731089c2e669ac27f120e45b1168636db804832f98dd2c031769e98e1b4edd5ce6211385ccd3584fe241c8b622d052edc8b5dcc1b47224cc56cbc97a5e9866fc283f270d3da7b09fc484916c459f31edea188fe5eb9c165ed58f8952e52b7a3aac7b4e1c1f50613f890a22d88b3d63dbd4311fcbd7382cbdab1f12a5ca56f47558f69c383ea0c27f121445b1167a53ca010f15fa312826417e361ba9bca8952d0dea3872214284fe24298b622cf333a65acb0256e508194924642db1a14bd69c77d170e5e68609fc485416c459e5674cb59604adca10329248c85b634297ad38efa2e1cbcd0c13f890a82d88b3ca5aabc3d8dfbe16d831eab988ad24ad2a06b43b42c3993e1927f121515b1167934169e05e95deb068309b9b0950a7824eb9aad282873420334fe242a3b622cf250ee6196a021fe3882dfd5e0a97ad2c981f9801020e69e4679fc485486c459e491dcc32d4043fc7105bfabc152f5a59303f3002041cd3c8cf3f890a90d88b3c923b9865a8087f8e20b7f5782a5eb4b2607e60040839a7919e7f121521b1167924034323fce7619ef93cb1184cb3c78cbba902640d7350c73dfe242a44622cf247068647f9cec33df279623099678f19775204c81ae6a18e7bfc485488c459e48e0d0c8ff39d867be4f2c46132cf1e32eea4099035cd431cf7f890a91188b3c91c1a191fe73b0cf7c9e588c2659e3c65dd4813206b9a8639eff12152231167923834323fce7619ef93cb1184cb3c78cbba902640d7350c73dfe242a44622cf247068647f9cec33df279623099678f19775204c81ae6a18e7bfc485488c459e48e05cdb57e6aeca4106f90c3b24e84156e4ecdb5f59d4337380890a91198b3c91bf45c9087a33f704c5bede9e41c6e0d5c485f91ab0a8688b02121522341679237d17a469a13e508c434a83647b841fd383b834915e50d2ba05242a44692cf246f92f48d3427ca118869506c8f7083fa707706922bca1a5740a485488d259e48df25e91a684f942310d2a0d91ee107f4e0ee0d24579434ae81490a911a4b3c91be44935a5b6c8e6e4d220e14bd4175cc4186de6e6ef8697742a2152234a679237c71e7da41a68304c5c0e88bfa02517b02b881029dc0d308c5542a44695cf246f8d3cfb4834d06098b81d117f404a2f6057102053b81a6118aa85488d2b9e48df1a0608e9167723b42806e926788abce8a8cc83036d34c3d5560a911a583c91be330c11d22cee4768500dd24cf11579d151990606da6987aaac152234b079237c661823a459dc8ed0a01ba499e22af3a2a3320c0db4d30f55582a446960f246f8cc304748b3b91da140374933c455e7454664181b69a61eaab05488d2c1e48df198608e9167723b42806e926788abce8a8cc83036d34c3d5560a911a583c91be3304d2f7b7bbad907b8a9eaf7094dfb3d143ca2c9a3987c4ec252234b089237c65f26714fa44c149229209c160a9254a2232587ef4430fa4185a4469612246f8cbd4ce29f489829245241382c1524a944464b0fde8861f4830b488d2c2448df197a25d7973e06b4cb5c4f3680223fb0b0874262190dc3eaaa17911a584991be32f34baf2e7c0d6996b89e6d00447f61610e84c4321b87d5542f2234b093237c65e62370b5a4f135b02909a02880f520ea17b5cac0340fac4c5f4469612746f8cbcb46e16b49e26b605213405101ea41d42f6b9580681f5898be88d2c24e8df1979619d52f409b39435bf346c9fbcae1d059836d5ccd3eb2d57e11a5849e1be32f2b33aa5e81367286b7e68d93f795c3a0b306dab99a7d65aafc234b093c37c65e566754bd026ce50d6fcd1b27ef2b8741660db57334facb55f8469612786f8cbcac5abbd2b1b02c9d9766fc77d64d6caac6c7ad4266f5984ff18d2c24f1df1979574189fe1036bbbde69abf17a491377d883b9ce0caeb3243e41a5849e4be32f2ad0f2654cd43d9fe850244574118cd230b237c1d92d6662bc934b093ca7c65e5591e4ca99a87b3fd0a0488ae82319a461646f83b25accc579269612794f8cbcab23c9953350f67fa1409115d0463348c2c8df0764b5998af24d2c24f29f19795640544ff16f53276dfdee8e200bcc74053c8234893b333024aa5849e54e32f2ac70a89fe2dea64edbfbdd1c401798e80a790469127666604954b093ca9c65e558e1513fc5bd4c9db7f7ba38802f31d014f208d224ecccc092a961279538cbcab1c2a27f8b7a993b6fef7471005e63a029e411a449d999812552c24f2a719795638544ff16f53276dfdee8e200bcc74053c8234893b333024aa5849e54e32f2ac7034b23b8b7cb15eb3a9e2680f8f463273b0ab6e736661ed55b093ca9d65e558df69647716f962bd6753c4d01f1e8c64e76156dce6ccc3daab6127953acbcab1be5edb46dac927fd86744fc8363376f1c96ef015ca99895957c24f2a769795637b49c8e66268b27dc4b565b8645d4c0b8d8a228792331456b0849e54ee2f2ac6f51fa42571a7c77e41379198c0b0f63f15c0876b21662a5162093ca9dd5e558de93f484ae34f8efc826f23318161ec7e2b810ed642cc54a2c4127953babcab1bd20aa2ee7375807bbcab0c8afaba372451ae60088298aae98924f2a776795637a31545dce6eb00f779561915f5746e48a35cc011053155d31249e54eecf2ac6f462a8bb9cdd601eef2ac322beae8dc9146b980220a62aba62493ca9dd9e558de8c5517739bac03dde5586457d5d1b9228d73004414c5574c4927953bb3cab1bd1836413fe42e6a3e827d8ed7a399d06d159242e4268ab03c934f2a776895637a2f6c827fc85cd47d04fb1daf4733a0da2b2485c84d156079269e54eed12ac6f45e6517583d900b7cc1c30186865d9fdc50f54dec972ac2964e3ca9dda3558de8bb56410927f6797c3b52c93504b19de09c96de352b5586d09d7953bb47ab1bd17538946afcc3557b2e725892015999e933d9fec653ab0f453bf2a776905637a2e97128d5f986aaf65ce4b12402b333d267b3fd8ca7561e8a77e54eed20ac6f45d26e64049fe3b86f7196286ffd5cc5ccca143d754bac3eb8f0ca9dda4258de8ba368da61ec9dd3619af91707f2afe9c18ed4bd4694587f15e2953bb485b1bd17455dc71c86120945edbef437dd5631ab1855bce925b0ffcfc62a77690c637a2e8947a091b8fa750e934aae97b2a2c17e2b57bc2e486201438d54eed219c6f45d111b537c1ecb4c9fde6223575d3be124515bbab88dc4042b1ba9dda4348de8ba2136a6f83d96993fbcc446aeba77c248a2b775711b8808563753bb48691bd174426d4df07b2d327f79888d5d74ef8491456eeae2371010ac6ea77690d237a2e88466ae39a330c781aadde0e2e1d5674a858a18206b2022fcde4eed21a56f45d107596ecbf337f1860d8887edbba12cbd05c0729cd340479dbd9dda434bde8ba20d3eeff09346458ed2ddd6036f38b7a2062d2795a38090df7c3bb48698bd17441909f239d362eda05d88722ed667cd6c0706918744012362f977690d327a2e883113e473a6c5db40bb10e45daccf9ad80e0d230e880246c5f2eed21a64f45d106227c8e74d8bb6817621c8bb599f35b01c1a461d10048d8be5dda434c9e8ba20c44f91ce9b176d02ec439176b33e6b6038348c3a20091b17cbbb486993d17441882b35f5e3053c889053e9155e7334e86b155ad03d1237d3987690d328a2e8830f566bebc60a791120a7d22abce669d0d62ab5a07a246fa730ed21a65145d1061e38ea3038eb54a4f91c6a7d71c331c9a701ad9cf148e0f262da434ca38ba20c3b71d46071d6a949f238d4fae38663934e035b39e291c1e4c5b4869947174418766fbb199083b5169c3e701dbf03254e96b2f8cfc223856d8c690d328f2e8830eb6b888bcdddccaff049a66375fca8c5281233fb81470c7f19d21a651f5d1061d56323704891fbe2986012eee3efafb24ad0aa52ff8e1aa234a434ca3fba20c3a95259393dfa5a47e88cec05bfd5bd8c904d9701fc1c36e86a486994807441875130c4cb28cb171288e69e3377a1d9411b47705ff5386f74d590d32901e8830ea161899651962e2511cd3c66ef43b282368ee0bfea70dee9ab21a65203d1061d424f25855002beccdb673ef5d67dc32c67ca03dbd1e1bf7757434ca408a20c3a832a5d634cdbe01c6e9b4413a4f1e480ca404a13a0c38092af869948124418750554bac699b7c038dd36882749e3c90194809427418701255f0d3290248830ea0a3587e5e045e2f47239d6768bbdf02b23ad6aaa800e03eebf1a65204a1061d4136b0fcbc08bc5e8e473aced177be056475ad555001c07dd7e34ca409420c3a8266231f02dedee5480b4200226ee1ed48961ed05fd38115efd699481294187504b50763908b23f2bb935062c45d29bd10d701c67f7702461fbd3290253830ea0952cfecabe3ae0da2a36d280839b95ca158c7b2bebe04a67f8a65204a8061d412959fd957c75c1b4546da50107372b942b18f657d7c094cff14ca409500c3a8252400d83a5c1e5eb60a8102a0664b55050de2f0bac812b43e3994812a1187504a30c2d5ff85a2e59791ce67c04bfc8c89c68a0735602582bc83290254330ea0945185abff0b45cb2f239ccf8097f919138d140e6ac04b0579065204a8661d4128a30b57fe168b965e47399f012ff232271a281cd580960af20ca40950cc3a82514616affc2d172cbc8e733e025fe4644e345039ab012c15e4194812a1987504a284ee8583279481a499b2de843f2eab1c13649915d25846084290254340ea0944f29e30911c8f2b74b0321f87fdc338b7d18d57eb74b0a65095204a8691d41289d53c6122391e56e960643f0ffb86716fa31aafd6e9614ca12a40950d23a82513a339e7cf3fa2d5fe3d94e09f7672c55ef0f9856da2c2b38264812a1a57504a273673cf9e7f45abfc7b29c13eece58abde1f30adb45856704c9025434aea0944e65a8c4c7cbf18024731fe4fd5930f7fb6eaa3b765b0ae849a204a8696d41289cb412af1a65492874630c2c7a31c7d27688189cac8615ead3540950d2ea82513950e683bf97f8791442e4bb73e2f5876cbaf55f18dc2befe6b812a1a5e504a27291cd077f2ff0f22885c976e7c5eb0ed975eabe31b857dfcd7025434bca0944e5239a0efe5fe1e4510b92edcf8bd61db2ebd57c6370afbf9ae04a8697941289ca47341dfcbfc3c8a21725db9f17ac3b65d7aaf8c6e15f7f35c0950d2f28251394872961844cedb96fab1819bdaebe594b5a1a174d92bf18ab912a1a5e604a2728f713e89367419b0ad2fc95fadce295165ef8545af57e4b97325434bcd0944e51d6e8f6b19be95e4122c58e75392b0cac68b4ce75bafcb16e74a86979b1289ca3969312ee0538e4adc2577f69f1bbfbd87c2dc2ab45f97d1cf950d2f37251394715e74b66d7d7f187017b615362ddda30a31fab165bf3147a02a1a5e6f4a2728e148fbc587d160b397fc32526452196e0f1037bec87e6433415434bcdf944e51c11e09e3bc7923e9e7c52accc09a910418ccb1d98dfcca0a83a86979c0289ca3813c13c778f247d3cf8a559981352208319963b31bf994150750d2f380513947020439e79ebaf22a56e1715afa60a2385ddf09c234f329ce0fa1a5e701a2728e030873cf3d75e454adc2e2b5f4c14470bbbe138469e6539c1f434bce0344e51c0610e79e7aebc8a95b85c56be98288e1777c2708d3cca7383e86979c0689ca380c21cf3cf5d79152b70b8ad7d30511c2eef84e11a7994e707d0d2f380d13947018439e79ebaf22a56e1715afa60a2385ddf09c234f329ce0fa1a5e701a2728e030134f4c8434a7cd93faf187440aa533b68d7aa29b653b65f534bce0354e51c05f269e9908694f9b27f5e30e88154a676d1af54536ca76cbea6979c06a9ca380be4d3d3210d29f364febc61d102a94ceda35ea8a6d94ed97d4d2f380d53947017c268cbcce7ba0ef57a45262184b87c5af181770d829dcd3aaa5e701ab728e02f74d19799cf741deaf48a4c430970f8b5e302ee1b053b9a7554bce0356e51c05ee26454be6c4e640165e0fb059247d3eb70ca01f5da774f2ab979c06aeca380bdb4c8a97cd89cc802cbc1f60b248fa7d6e19403ebb4ee9e5572f380d5d947017b625278847e9fb83114504e95c885322d6dec2d9739dd56eaf5e701abc28e02f6b4a4f108fd3f706228a09d2b910a645adbd85b2e73baadd5ebce0357851c05ed620b079cc7e508efce0d9cd6a17aab356274dc1cb77575ebe79c06af1a380bdab4160f398fca11df9c1b39ad42f5566ac4e9b8396eeaebd7cf380d5e347017b560ed43fdecfa4beab502d5da05508f5534979632add5f1efae701abc78e02f6ab1da87fbd9f497d56a05abb40aa11eaa692f2c655babe3df5ce03578f1c05ed563b50ff7b3e92faad40b576815423d54d25e58cab757c7beb9c06af1e380bdaac02b457a3538878124e3114fa9ea5d294f80d7553eafa9bd8380d5e3d7017b5570568af46a710f0249c6229f53d4ba529f01aeaa7d5f537b0701abc7ae02f6aae0ad15e8d4e21e04938c453ea7a974a53e035d54fabea6f60e03578f5c05ed55c15a2bd1a9c43c0927188a7d4f52e94a7c06baa9f57d4dec1c06af1eb80bdaab82b457a3538878124e3114fa9ea5d294f80d7553eafa9bd8380d5e3d7017b5570568af46a710f0249c6229f53d4ba529f01aeaa7d5f537b0701abc7ae02f6aae039284181b880874b590b669f9fd2cd38af9fb0f7bea89a0f03578f5d05ed55bf7250830371010e96b216cd3f3fa59a715f3f61ef7d51341e06af1eba0bdaab7e70b35eb3b8649fe530f3c27675a95cdd6ac11fdbfaa40c3d0d5e3d7517b556fb6d791614472bc2822eadace4e1b0e1b581c49bb4f549bc7b1abc7aeb2f6aadf5670484d564ba07bc2a2181c1b9bfeb65afcb9366ea951cf73578f5d75ed55be95a1b62579fd6923021092b7b69ddfec60bd982cad52bddef6af1ebafbdaab7d140491d5c160fa7180ed87eeeca1a2586c3f56192aa595fdfd5e3d7607b556fa10ca493650281d0e7ea7725d58a927308342d1f2254b463c0abc7aec1f6aadf41194926ca0503a1cfd4ee4bab1524e610685a3e44a968c781578f5d83ed55be8232924d940a07439fa9dc97562a49cc20d0b47c8952d18f02af1ebb07daab7d0465249b28140e873f53b92eac54939841a168f912a5a31e055e3d760fb556fa08565b8efcfe7f9136743885509f85587def144e224b47e00bbc7aec206aadf40f38c976a6d361a524b53732993568d8f68a6af8419691641878f5d841d55be81d7192ed4da6c34a496a6e65326ad1b1ed14d5f0832d22c830f1ebb083aab7d03a6f38334823e9174aa1a2f25ccc018bd4d5ee3d035a473462e3d76108556fa0736a82bf3d1e34b14d100c0cb18e613fa4581ed603b4900cc6c7aec211aadf40e56117d72712cbe551ecde415b1320a7435c8008046921bd8e8f5d842455be81c94e4206fafbfa4d5ba682aaae1c9f768165426c05d2451f1e1ebb0849ab7d0391289666a2ce571d6f19cb7d542f9d14fd76c73408a48be23d3d76109456fa0721512ccd459cae3ade3396faa85f3a29faed8e68114917c47a7aec2128adf40e422e6bf3380fbef87433f41d48b4d27bf0875f2c1f92312cf5f5d842525be81c835cd7e6701f7df0e867e83a9169a4f7e10ebe583f246259ebebb084a4b7d0390645c2258d155e64889c969d1ac9a817bcc9bf0c7b48c657d8d761094a6fa0720b1796a3c7011f4bc905f3622d89ae57743fc074f3918e53b2aec21295df40e4152f2d478e023e97920be6c45b135caee87f80e9e7231ca7655d84252bbe81c82a5e5a8f1c047d2f2417cd88b626b95dd0ff01d3ce46394ecabb084a577d03905448c776e4df5ce0fffc61396443d0e39caa4603998c744196761094affa0720a71da14676951c44b7c5889ac07dffef3400ce633018ea272dec212960f40e414d3b428ced2a38896f8b113580fbffde68019cc66031d44e5bd84252c1e81c829a029772872ad39596e2e892f9ee5de4caaf7be8bd63aa40b8b084a584d0390533052ee50e55a72b2dc5d125f3dcbbc9955ef7d17ac754817161094b09a0720a660a5dca1cab4e565b8ba24be7b977932abdefa2f58ea902e2c212961340e414cc14bb9439569cacb7174497cf72ef26557bdf45eb1d5205c584252c2681c8299829772872ad39596e2e892f9ee5de4caaf7be8bd63aa40b8b084a584d0390533052ee50e55a72b2dc5d125f3dcbbc9955ef7d17ac754817161094b09a0720a66031eefa778b47e87086eae6738dd75aa68b3c8b55ea91d22d212961350e414cbf63ddf4ef168fd0e10dd5cce71baeb54d167916abd523a45a4252c26a1c82997e53ce428b03822479e871c1c62dbb9294d9348954aa48ecb584a584d5390532fb33aeddc2dd66cbab9da9ab8451d54d245eab6ea654937d6c094b09ab720a65f5675dbb85bacd97573b535708a3aa9a48bd56dd4ca926fad812961356e414cbea5acdcfb84bfdb166436cd6093db35c8c26f01696524f99b1252c26aec82997d341adf81d6e5de584539fd40a71c4e112fa228929a4a0d7634a584d5e90532fa50f6e48e7b31e4dc07405d00cd9e7ea20a0876e50494352c794b09abe20a65f491edc91cf663c9b80e80ba019b3cfd441410edca09286a58f2961357c414cbe923db9239ecc793701d0174033679fa882821db941250d4b1e52c26af882997d2407849fea6f54f0bb6cf4a85ec59d78ffb07dce7f4a1c3a3da584d5f20532fa470f093fd4dea9e176d9e950bd8b3af1ff60fb9cfe9438747b4b09abe40a65f48e1e127fa9bd53c2edb3d2a17b1675e3fec1f739fd2870e8f6961357c814cbe91c3c24ff537aa785db67a542f62cebc7fd83ee73fa50e1d1ed2c26af902997d238045c5753cbb18e6e9c10ade45035b7f5b41f43f1a1c547db584d5f21532fa46f08b8aea797631cdd38215bc8a06b6feb683e87e3438a8fb6b09abe42a65f48de11715d4f2ec639ba7042b79140d6dfd6d07d0fc687151f6d61357c854cbe91bc22e2ba9e5d8c7374e0856f2281adbfada0fa1f8d0e2a3edac26af90a997d237845c5753cbb18e6e9c10ade45035b7f5b41f43f1a1c547db584d5f21532fa46f0179d43264c94508b4edbe481fd1526b1302ada3138aa9f6c09abe42b65f48ddf2f3a864c9928a1169db7c903fa2a4d626055b46271553ed81357c856cbe91bbe5e750c993251422d3b6f9207f4549ac4c0ab68c4e2aa7db026af90ad97d2377c48fc71df3b05071243a54c07df075d842d992d86c5569f614d5f215c2fa46ef71e0b3c6b4c6c90dc5410c007b46ce3030774b70a8aaee2c39abe42b95f48dded3c1678d698d921b8a821800f68d9c6060ee96e15155dc587357c8572be91bbda043f4a5a0814c6291d092816c811b406ca1538272abd2f0f6af90ae67d2377b3087e94b410298c523a12502d9023680d942a704e557a5e1ed5f215ccfa46ef6610fd2968205318a47424a05b2046d01b2854e09caaf4bc3dabe42b99f48ddecc21fa52d040a63148e84940b6408da03650a9c13955e9787b57c85733e91bbd9843f4a5a0814c6291d092816c811b406ca1538272abd2f0f6af90ae67d2377b3013fba3edd8fb47db6deb2ad0f894a8d3eee960e257a785ee5f215cd0a46ef65f27f747dbb1f68fb6dbd655a1f12951a7ddd2c1c4af4f0bdcbe42b9a148ddecbe4fee8fb763ed1f6db7acab43e252a34fbba583895e9e17b97c85734291bbd97c2bef781b9e3cc1933c1f7e7fbb036e9a238d630fbd3dd373f90ae6862377b2f757def0373c798326783efcff7606dd34471ac61f7a7ba6e7f215cd0c46ef65ee3bd0391b4f558904bd4421f6e26be2633a77e83bf4f8f1d0e42b9a198ddecbdb03b2cae3750d94c1474e6be5bb35ecc121322c74e9f387a2c85734341bbd97b5076595c6ea1b29828e9cd7cb766bd982426458e9d3e70f4590ae6868377b2f6a0ecb2b8dd43653051d39af96ecd7b30484c8b1d3a7ce1e8b215cd0d06ef65ed41d96571ba86ca60a3a735f2dd9af6609099163a74f9c3d1642b9a1a0ddecbda83b2cae3750d94c1474e6be5bb35ecc121322c74e9f387a2c85734341bbd97b50026bb51b78151ae0b693a4af5d1bc01ed287ea9a3e72985a0ae6868477b2f69f04d76a36f02a35c16d27495eba37803da50fd5347ce530b415cd0d08ef65ed3e09aed46de0546b82da4e92bd746f007b4a1faa68f9ca61682b9a1a11decbda7c135da8dbc0a8d705b49d257ae8de00f6943f54d1f394c2d057343423bd97b4f826bb51b78151ae0b693a4af5d1bc01ed287ea9a3e72985a0ae6868477b2f69f04d76a36f02a35c16d27495eba37803da50fd5347ce530b415cd0d08ef65ed3e026ff9f8adba93ae571af53cf3d4e2faf4e3d028c9ca7ba83b9a1a11eecbda7bf4dff3f15b75275cae35ea79e7a9c5f5e9c7a0519394f75077343423dd97b4f7e2810d6d845076e4d93837734eb96e6b7e536662f72a08e0fe686847cb2f69efb5021adb08a0edc9b2706ee69d72dcd6fca6ccc5ee5411c1fcd0d08f965ed3df62c55b40dea803bee1ad404cba4b9c2da411bf4baca83dc409a1a11f3cbda7beb58ab681bd50077dc35a80997497385b48237e9759507b881343423e797b4f7d63d6928e48063727038163b2689453363b0b22ee82a111503686847d02f69efab06e4aa75d72967983cf29e4508e88ec20da6b9cd5423ce07d0d08fa15ed3df550dc954ebae52cf3079e53c8a11d11d841b4d739aa8479c0fa1a11f42bda7beaa1b92a9d75ca59e60f3ca791423a23b08369ae735508f381f43423e857b4f7d54372553aeb94b3cc1e794f228474476106d35ce6aa11e703e86847d0af69efaa86e4aa75d72967983cf29e4508e88ec20da6b9cd5423ce07d0d08fa15ed3df55068a7a767bb8f75bf6b19f0991370003c611995a7847b64fb1a11f42cda7bea9f5d61a77c4d816e36a2fa092a1d3e28736e75874c08f86df73423e85ab4f7d53d46d5a7a571655f2512ba3a4c30da78e1892d6a9511f27fef6847d0b669efaa7919bda7f7b92d4101f23a9c90581319bdbe9d312723e6a3dfd08fa16dd3df54f1337b4fef725a8203e4753920b026337b7d3a624e47cd47bfa11f42dba7bea9e266f69fdee4b50407c8ea7241604c66f6fa74c49c8f9a8f7f423e85b74f7d53c459ff986a9fcc8ac75e9b0c7ab6f6f5e8a12be5361f36c2ff847d0b6f9efaa7874011898215fb984689fc40ed644c13cbee9a26693e6f2a0008fa16e03df54f0d0c356bb10259b344e0bea9d2bef64f928976a8cf7cdff80111f42dc17bea9e19186ad76204b36689c17d53a57dec9f2512ed519ef9bff00223e85b82f7d53c3230d5aec40966cd1382faa74afbd93e4a25daa33df37fe00447d0b705efaa786461ab5d8812cd9a2705f54e95f7b27c944bb5467be6ffc0088fa16e0bdf54f0c84f6913bcfbfdb705d8b0c523e5c3212343ace8f4ce0124121f42dc18bea9e18f2ae48026ce5df0c37e27b23fc1e46a41339c2de69c03ec253e85b8327d53c31d55c9004d9cbbe186fc4f647f83c8d48267385bcd3807d84a7d0b7064faa7863a37a459480fda45c5c564f0f6fdefd0ff7ab3139770115495fa16e0caf54f0c736f48b2901fb48b8b8ac9e1edfbdfa1fef566272ee022a92bf42dc195ea9e18e66aa3bdcd15cb99cee259ebd3ee1d6bf8970eaa5ac046f658e85b832cd53c31cb6159d44701f9b6559179ff9fd298ffebda5fb0b2808f90b2d0b7065aaa7863954ec6013ada55ef62efba27379b9027d26101bd620120c566a16e0cb654f0c729299e5b228b0e617dac3a76672d7e779f6e45d6c102432ece42dc196da9e18e51533cb645161cc2fb5874ecce5afcef3edc8bad8204865d9c85b832db53c31ca2328bc537029c08ae7db00194ac5806786559b701090e5f3a0b7065b7a786394365178a6e0538115cfb60032958b00cf0cab36e02121cbe7416e0cb6f4f0c728656416d88e0d2a571c3862e4aa7be41dc41a93801243b20e92dc196df9e18e50b389533be9807cd9b53d2848d45daabb32f94cbff4877e5d35b832dc03c31ca15712a677d300f9b36a7a5091a8bb557665f2997fe90efcba6b7065b807863942a6e6727a73681b9251c103a2d0dc8d6c76a958bfa21e13b4e6e0cb701f0c7285368e0a7fb4365f50204e69c5211efd589816d73f143c41a9ddc196e04e18e50a55dd3a8a35d2e6cbbd693609c1a3dd30daf1d43df8789d93cb832dc0ac31ca14947b9a9f390bf5c2f79ece9302ad9ce160a7ce3bc0f15567a7065b816863942911b85ac93f7e13b16c09ffa584c11c426c13c23751e2c50f5e0cb702e0c728521370b5927efc2762d813ff4b09823884d827846ea3c58a1ebc196e05c18e50a426e16b24fdf84ec5b027fe9613047109b04f08dd478b143d7832dc0b831ca1484683fbd4c956c5b6dd1c5faba56ec4930b62377a5f1642bb0065b8171639429075c91d346013b399370521d6ca436ba5c18894b48e2c9fb610cb702e3c728520d4535ff38d8d8f5dead6a62d13ecb9cb2dd54f28ec5959ac3196e05c88e50a419167e571e88146e75279aed9a73f5616066ec411a8b2cd98732dc0b921ca148312cfcae3d1028dcea4f35db34e7eac2c0cdd882351659b30e65b817243942906259f95c7a2051b9d49e6bb669cfd585819bb1046a2cb3661ccb702e48728520c4400511a11705f661099d94cb960932fde3a464d15968703a96e05c91e50a41870c1c7bef046e6f79e001518f22708df6738b259fb2d284762dc0b924ca14830d1838f7de08dcdef3c002a31e44e11bece7164b3f65a508ec5b8172499429061a3071efbc11b9bde78005463c89c237d9ce2c967ecb4a11d8b702e49328520c3460e3df7823737bcf000a8c7913846fb39c592cfd969423b16e05c92650a418684dda179d1d497a55ccdb40ea1d670761e4f4b5f82d29eb63dc0b924da14830cf27c687e710f57763667ca9cc312c36be762bc7ed5a557ac8b817249c4290619d4f8d0fce21eaeec6ccf9539862586d7cec578fdab4aaf591702e49388520c33a2b2c78491a38604566b8cf28bb0f02f484f17bb269578f23e05c92720a4186735658f0923470c08acd719e51761e05e909e2f764d2af1e47c0b924e414830ce638c439d13f4403cd67a9649ae29a33ccc0084ac6a55fe090817249c9290619cb718873a27e88079acf52c935c53467998010958d4abfc12102e49392520c33966f233ff1d37291ed6b6bba6380c6f72dac6387179581264305c92725a418672b6a58d8907d47a692a39d9cbef7ec165605096a2c2b03f0870b924e4c4830ce5560c409cdd0f1cfdd14016175e63654a6b65530555609850f17249c9990619ca94d9a6c4878462271f4c8eae3c2cad14818ecbca7ac14ae1f2e49393420c339512747313dc6eec79bb657fdbf7bf3ca8ade1bd54c582b003f5c927269418672a14e8e627b8ddd8f376caffb7ef7e79515bc37aa98b056007eb924e4d2830ce542292f1da3f21da126a6261ef5e62d522624b1b12e60ada4fe7249c9a60619ca83525e3b47e43b424d4c4c3debcc5aa44c4963625cc15b49fce493934c0c33950630cecf3c9ed90752655ea3cf8f1370933f0920b682b837fac927269918672a0b619d9e793db20ea4cabd479f1e26e1267e12416d05706ff5924e4d3230ce54164f4d959f51c6a0016240b73632abea47a866ded70ae283ec249c9a65619ca82b2aad83eb79efc2ba914796645bb5fc89fd1019ab15c6abd9493934cbc3395055555b07d6f3df8575228f2cc8b76bf913fa2033562b8d57b2927269978672a0aa36c8685abe218da211e4818965361a22a082c2a9571c536624e4d3300ce541536d90d0b57c431b4423c90312ca6c344541058552ae38a6cc49c9a66019ca82a66733fa17cee8b94014582e1d8b3690852e4d66a25c72f19993934cc13395054b5a7a4cdc7433f537f57684330ccb490508dd2941b8e7873427269983672a0a954106f265beca6d27b7b3305e0ff4ba04bdfcae8071d0b2694e4d3307ce5415290e203d7853f75d073c2c88b416479c04283bb8fde3a308d39c9a66109ca82a511c407af0a7eeba0e785911682c8f3808507771fbc74611a73934cc21395054a23880f5e14fdd741cf0b222d0591e7010a0eee3f78e8c234e7269984272a0a9447101ebc29fbae839e16445a0b23ce02141ddc7ef1d18469ce4d33084e54152886e16303215d8532b8f8eb3395ad7e83d2ffdebdb3a32313ac9a6610aca82a50f683eb9110213290eebe38e6aac0df8750c3e33b374660676934cc21695054a1d5c8fcaceda88d4d5a48d44cd4e7a18e4c4bec363e8cdb0ee2699842e2a0a94394531ee4a8b742c6315e0b192935259c435bfe2c4d19d05dd4d33085d5415287116763541ed4adb7df8878b1d1d02db8317c22186a33bafbb9a6610bba82a50e12cec6a83da95b6fbf10f163a3a05b7062f84430d46775f7734cc21775054a1c259d8d507b52b6df7e21e2c74740b6e0c5f08861a8ceebeee699842eea0a943843fc402bc40b95ea7910280e0de7504136a53683219df21ddd33085de415287070b9a5e2557d54006eecb29b9b348302180e92c6133bfe7bca6610bbd82a50e0d1734bc4aafaa800ddd9653736690604301d258c2677fcf794cc2177b054a1c1a2e6978955f55001bbb2ca6e6cd20c08603a4b184ceff9ef299842ef60a9438345cd2f12abeaa003776594dcd9a41810c074963099dff3de533085dec1528706845b83b0253b68326b978c3932ae12a12bad522103c001fcb6610bbd92a50e0cf1782ceb17dcf89053fb7af1e4c207c2021eca01d7801e397cc2177b354a1c19d2f059d62fb9f120a7f6f5e3c9840f84043d9403af003c72f9842ef66a943833a5e0b3ac5f73e2414fedebc793081f08087b28075e0078e5f3085decd528706744828ce38c4decae1ca83a0ea576208fbbba75ce8c010c0bf610bbd9ba50e0ce71c63f51e6020187b61cd69cca52239f2239115ce8023257fc2177b384a1c19cd38c7ea3cc04030f6c39ad3994a4473e447222b9d00464aff842ef6709438339a718fd479808061ed8735a7329488e7c88e44573a008c95ff085dece1287067346f32019fd7634692db31765d1f6ff78bc8cb0a71011acfff10bbd9c350e0ce676a765bec85290fdd832914b2353e17123dd870df023743ff2177b387a1c19ccd60ff1085e0b4a272d318515c60da561f27f33dbb04702bff42ef6710438339994e1079b897cbc79d72f6cab0b812d438fc28d77308e1fbff85dece218706733128334c1e05fa11f2b2b3bd596683d06ca4940ae311c59c000bbd9c440e0ce6615066983c0bf423e565677ab2cd07a0d9492815c6238b3800177b38881c19ccc22cdf8924ee4aca8297951d5d906d69ad3e928789471814012ef671113833998359bf1249dc9595052f2a3abb20dad35a7d250f128e3028025dece222706733063f907d408f8dacc22b1a9d6e3813ceafa68c7a221c61f405bbd9c445e0ce660b0b33532df57ddc3c22fb62d46685c559f95b504138c58c0c77b3888cc19ccc151666a65beafbb87845f6c5a8cd0b8ab3f2b6a082718b1818ef6711198339982a2ccd4cb7d5f770f08bed8b519a171567e56d4104e3163031dece223306733054599a996fabeee1e117db16a3342e2acfcada8209c62c6063bd9c44660ce660a83f478b8c2e404679fc7c553e5eba7d9a41f760108c5a64c87b3888cd19ccc14f0aa16fc532e30fabc5bed274b3d3232f30311c1e18b66d91f671119b3399829d1542df8a65c61f578b7da4e967a6465e6062383c316cdb23ece223366733053a2a85bf14cb8c3eaf16fb49d2cf4c8cbcc0c4707862d9b647d9c4466cce660a74550b7e2997187d5e2df693a59e9919798188e0f0c5b36c8fb3888cd99ccc14e83629550004937d7428b34f4333905aedaf541dde8b687d20671119b4399829cf6c52aa000926fae851669e866720b5db5ea83bbd16d0fa40ce2233687330539e64b7acace8b078886f936504c49f93b16992d3772da398829c4466d1e660a73b5581b206a7c373c8abecf2017f9d4f5d7f6802eb5b48d5063888cda4ccc14e753715bcba25e96a4924a00bfaf598c6b5ab1261d3b6934e0d71119b4a99829ce96e2b79744bd2d492494017f5eb318d6b5624c3a76d269c1ae2233695330539d268694b956e082bdc5f4657e3ccc142d1588be34bda4edc36c4466d2b660a73a35ce4efd7b272da708b52d7bf8fe0ad9d5d5a2294b49f5c6e888cda57cc14e74545dc385c3b483798e36bd777161f833566f6a12669405cde1119b4b09829ce8917cac9654cf2f1e9939dd6e6229d2e657a2f9e49d2825dbd2233696230539d112f9592ca99e5e3d3273badcc453a5ccaf45f3c93a504bb7a4466d2c460a73a225f2b259533cbc7a64e775b988a74b995e8be79274a0976f488cda588c14e74444a68a3d73dfa120469b4df290b479b267dbf4e4b941491ea119b4b12829ce88720e3a05b5256a6c0a02fe64a0ced5e47a7c0f894282ac7d5233696260539d10d41c740b6a4ad4d81405fcc9419dabc8f4f81f12850558faa466d2c4c0a73a21a0fa0da1a1fbd1dba4d85c1202a13a1194b463e4da0acc3558cda589914e744331f41b4343f7a3b749b0b824054274232968c7c9b415986ab19b4b13229ce88663e8368687ef476e936170480a84e84652d18f93682b30d5633696264539d10cc0919297dd44b708a38f430f946fb30c506744e6a0567bead66d2c4c9a73a2197123252fba896e11471e861f28df6618a0ce89cd40acf7d5acda589934e74432e2464a5f7512dc228e3d0c3e51becc31419d139a8159efab59b4b13269ce8865c48c94beea25b8451c7a187ca37d9862833a273502b3df56b3696264d39d10cb81da4f08a1b198b5b5c09378c6611344b1387429d567d8ed76d2c4c9b73a2196f3b49e114363316b6b8126f18cc226896270e853aacfb1daeda589936e74432de02a61ad542c8b0253ceb06298ea2f926fa5f667259f7df5eb4b1326ece8865bb054c35aa8591604a79d60c531d45f24df4becce4b3efbebd696264dd9d10cb760a986b550b22c094f3ac18a63a8be49be97d99c967df7d7ad2c4c9bb3a2196ec1530d6aa16458129e758314c7517c937d2fb3392cfbefaf5a589937674432dd82a61ad542c8b0253ceb06298ea2f926fa5f667259f7df5eb4b1326ece8865bb054c35aa8591604a79d60c531d45f24df4becce4b3efbebd696264dd9d10cb76035990dfd888e8c070787b25b9f1c71b9441bf8937df97bae2c4c9bb4a2196ebf6b321bfb111d180e0f0f64b73e38e3728837f126fbf2f75c589937694432dd7e627690a2f89cb2d3eae4f16672cfeedfbcb23e4af7e792b9b1326ed38865bafb50ff79f2c79be85fa2900ac4dbfe05ba25a6d892efd0c9746264dda810cb75f52e114c92659a537711e63d81ae5a336ef7900d22dfa336e9c4c9bb512196ebe95c229924cb34a6ee23cc7b035cb466ddef201a45bf466dd3899376a2432dd7d244578af66ccbd094145f1dfeafc6f5b68a8290887e8e7fa81326ed45865bafa314c16e99affa23dff58463f555ec1367c1477d0dfd1ea351264dda8c0cb75f452982dd335ff447bfeb08c7eaabd826cf828efa1bfa3d46a24c9bb518196ebe8a5305ba66bfe88f7fd6118fd557b04d9f051df437f47a8d4499376a3032dd7d14321dcd7a5633a1b778e947a2a5bec338b67e446ce8f6be8a326ed46165bafa27643b9af4ac67436ef1d28f454b7d86716cfc88d9d1ed7d1464dda8c2cb75f44e54898e962f310995b06b46828d5934dd863b6db0a3dc9e29c9bb518696ebe89b352575d934c495e32d9cb4fd111091b5b8b9375e47bae0549376a30e2dd7d1356a4aebb269892bc65b3969fa2221236b71726ebc8f75c0a926ed461c5bafa26a60a83011a974da448338fbec3aa06ed18f2739761eed25534dda8c39b75f44d34d62b8d0294c3740d3381fd06b9f059dca90cee93ddbeea79bb518746ebe89a526d7ca4d28faf13973366798cd9c33364163f9cf7bb98150376a30e9dd7d13494daf949a51f5e272e66ccf319b38666c82c7f39ef77302a06ed461d3bafa2692277181e17a4e479d999fc65b2ccef4d3b1d2433aeee7a941dda8c3a875f44d234ee303c2f49c8f3b333f8cb6599de9a763a48675ddcf5283bb518750ebe89a4629d86032bf9ba12e33454164a999fb49738b68e8bba0490876a30ea2d7d1348b53b0c0657f37425c668a82c95333f692e716d1d177409210ed461d45afa269163373d977d4d1077099db2d8a9cc615207a6fff9fee82c822da8c3a8c5f44d22b66e7b2efa9a20ee133b65b15398c2a40f4dfff3fdd059045b5187518be89a45659e1be8c29a6a07a3432de2269767c7c96025a7cba0cc48c6a30ea327d1348ab3fd5d5c529afc3ac352be43cc94b20f3d84710f6741b2d19d461d465fa2691550bbe043729c20a10371df07188f469e25cd07de9e837fe34a8c3a8ccf44d22a9177c086e538414206e3be0e311e8d3c4b9a0fbd3d06ffc6951875199e89a45522ef810dca7082840dc77c1c623d1a7897341f7a7a0dff8d2a30ea333d1348aa45df021b94e105081b8ef838c47a34f12e683ef4f41bff1a5461d4667a269154847f29c1f728323bb3ea52f1085a4c620794a3a9b8381874b8c3a8cd044d22a8f1bf790ebbb68ca2e4a10861901a7b43b9ed6d1340704b298187519a189a4551d37ef21d776d1945c94210c32034f68773dada2680e09653030ea33431348aa3a6fde43aeeda328b928421864069ed0ee7b5b44d01c12ca6061d46686269154746bcee00ab1a8d42a1d4a58c0039bc9d7a2f8e59d382738c1c3a8cd0d4d22a8e763b018c239b42b0c075ad977fd95bba9f23427377050158487519a1b9a4551cd53728a3149cad8cfdb7bdae7f1899f4e90aaaa6be0a1cf0a0ea33438348aa39932f76d0f69f8345783bdddc7d9716697cd97b0d4c14542151d4668716915473165eeda1ed3f068af077bbb8fb2e2cd2f9b2f61a9828a842a3a8cd0e2d22a8e6257f00cea7e435415dbbd9f175c23c259e2a11f500516ac557519a1c6a4551cc33bf27281d2e92ae384416626aea5acae71849a9d0a2efcabea33438e48aa398503f73db07c34d87ed548f44553a981578f4b9137145f9d58d466871d9154730907ee7b60f869b0fdaa91e88aa75302af1e97226e28bf3ab1a8cd0e3b22a8e6120fdcf6c1f0d361fb5523d1154ea6055e3d2e44dc517e7563519a1c764551cc241fb9ed83e1a6c3f6aa47a22a9d4c0abc7a5c89b8a2fceac6a33438ec8aa398483f73db07c34d87ed548f44553a981578f4b9137145f9d58d466871d9154730900afa0ebc5cfd929275e4b0a26b8e52ec95b482df8bf54f1b8cd0e3b32a8e611f15f41d78b9fb2524ebc96144d71ca5d92b6905bf17ea9e3719a1c766551cc23e2be83af173f64a49d792c289ae394bb256d20b7e2fd53c6e33438eccaa39847c57d075e2e7ec9493af2585135c729764ada416fc5faa78dc66871d99547308f83bb34472a63babdf2b11321eaf4356c4078a89f5bf5695b9cd0e3b33a8e611ef0378e19222d9da7622e88c3554e4d582bb576fe87eaecf749a1c766851cc23dd06f1c32445b3b4ec45d1186aa9c9ab0576aedfd0fd5d9ee93438ecd0a39847ba0de386488b6769d88ba230d55393560aed5dbfa1fabb3dd26871d9a147308f741bc70c9116ced3b1174461aaa726ac15dabb7f43f5767ba4d0e3b3428e611ee8378e19222d9da7622e88c3554e4d582bb576fe87eaecf749a1c766851cc23dd06f1c32445b3b4ec45d1186aa9c9ab0576aedfd0fd5d9ee93438ecd0a39847ba06a4abd358cd9204086e9354d2f9388a9821e561cabb58127871d9a157308f73f60a7d317f014c338da9892925585394db07f0836576ca6500e3b342be611ee7d4d61fedcb68c092981f74d1ca1689a960d406c69aedaf0a11c766858cc23dcf926d65666437a950ad0b4c231392f5d26c6c334d05db7854338ecd0b29847b9f14dacaccc86f52a15a1698462725eba4d8d8669a0bb6f0a8671d9a165308f73e2276bb245e44cd6e30f9930bcdb1b9c95c74f2f3e76dfb90de3b342cb611ee7c34ed7648bc899adc61f326179b637392b8e9e5e7cedbf721bc7668596c23dcf8629c121c46795de440b2aeaeb62cc9a51c97f18f6db8088388ecd0b2e847b9f0b53824388cf2bbc881655d5d6c59934a392fe31edb70110711d9a165d08f73e163316dfbe74b9fbc7f971d3a581909141d23ebfd86e03c4e33b342cbb11ee7c2b662dbf7ce973f78ff2e3a74b03212283a47d7fb0dc0789c67668597623dcf856586dd7a6a94a71d7b28d768dfca06d01f53d5b5eb810b78decd0b2ed47b9f0ab3cee07fa28f7666731e11513ef9f01fe96bd12ba7023131cd9a165db8f73e15505ee68a128514f863088521fd59c2bf7d9bc8171e047ca3ab342cbb81ee7c2a90bdcd14250a29f0c6110a43fab3857efb37902e3c08f9475668597703dcf855217b9a284a1453e18c221487f5670afdf66f205c7811f28eacd0b2ee07b9f0aa42f734509428a7c31844290feace15fbecde40b8f023e51d59a165dc0f73e15485ee68a128514f863088521fd59c2bf7d9bc8171e047ca3ab342cbb81ee7c2a9049df6cd1e08c737dddd06bf2a9e3a6f5e3d28a3908faeb5768597704dcf8551f1fd13250977b69b38866ffdd4a2575e673e7706f11f77aafd0b2ee0ab9f0aa3d3fa264a12ef6d36710cdffba944aebcce7cee0de23eef55fa165dc1573e1547a0b5721ef34502985ee62276d1ef3ff947be01db947df8ec042cbb82be7c2a8f316ae43de68a0530bdcc44eda3de7ff28f7c03b728fbf1d8085977057cf8551e62d5c87bcd140a617b9889db47bcffe51ef8076e51f7e3b010b2ee0af9f0aa3cc5ab90f79a2814c2f73113b68f79ffca3df00edca3efc7602165dc15f3e154798418477a01b651b16b2e89ec9e59e21426a4437917dfa90052cbb82bf7c2a8f2f0f1b47ed0d2cb8e53297658bc19a6a7f80cacb1ffbf6c40b5977057ff8551e5d1e368fda1a5971ca652ecb178334d4ff0195963ff7ed8816b2ee0afff0aa3cba3c6d1fb434b2e394ca5d962f0669a9fe032b2c7fefdb102d65dc15ffe154797404ec98153fc849e16181545603317bf6b298b4fcdfb7c45bcbb82c00c2a8f2e709d9302a7f9093c2c302a8ac0662f7ed653169f9bf6f88b7977058018551e5ce13b26054ff212785860551580cc5efdaca62d3f37edf116f2ee0b0030aa3cb9c2764c0a9fe424f0b0c0aa2b0198bdfb594c5a7e6fdbe22de5dc16006154797384ec98153fc849e16181545603317bf6b298b4fcdfb7c45bcbb82c00c2a8f2e7029a55b54cf6bbee3fcf0b2b85c8da6d0ff58fb98f6fa2f7a77058019551e5cdf534ab6a99ed77dc7f9e16570b91b4da1feb1f731edf45ef4ee0b0032aa3cb9be32a7c60014117e47c088f2d96894c33ea9a64a60dbea61eadc1600665479737b654f8c002822fc8f8111e5b2d129867d534c94c1b7d4c3d5b82c00cca8f2e6f656b170ad26a87bd6cee9f35d98b134f552db85806fab2bac7058019a51e5cdeb39753a0723b37a656a9a0eb327c091e551f966fddf57fb59e0b00335a3cb9bd572ea740e4766f4cad5341d664f8123caa3f2cdfbbeaff6b3c160066b479737aa71e740c965306c4d772e62c495606f8ff427f7f47d61916882c00cd78f2e6f536fe0da3fa0c35b52bb22ed81211f071a94924be5fac4c6d2058019b01e5cdea56bd40d2c17e9395d430c02fa389c362fd566f3c8f58b31a50b0033613cb9bd4963ba73050634f57252de2dec6796945a5710438eeb18074b160066c379737a9153873eb6e2cc6d9c728283d0c58b50af5a62e31ad631b2972c00cd87f2e6f5213320d61a9bfb5df0b1cb2f998174c95961082232ac65092f58019b10e5cdea416641ac3537f6bbe163965f3302e992b2c210446558ca125eb0033621cb9bd4825895b117464ffa7a93f2e65dfc314d603062e4c7b195c8be60066c449737a9033d3dbadb630277acf4abf4b3eec0c2bb0d08258c632d357dc00cd88a2e6f5205068dce639c677211b61e115fd3dfad70c652a715c65c0efc8019b1155cdea4090d1b9cc738cee4236c3c22bfa7bf5ae18ca54e2b8cb81df90033622ab9bd48121a37398e719dc846d878457f4f7eb5c3194a9c5719703bf20066c455737a9024346e731ce33b908db0f08afe9efd6b86329538ae32e077e400cd88aae6f5204868dce639c677211b61e115fd3dfad70c652a715c65c0efc8019b1155cdea40905dcc25206350c4ee908853f27253d61376973eb5cb838391033622ac9bd4811f47aaa2ed9d040c94edd6cfdcdb05d4219970d9689708ab23066c455a37a9023d1b679e88106a9be1a873c7b1ac69d03ddf240ece2e12fa470cd88ab56f52047936cf3d1020d537c350e78f6358d3a07bbe481d9c5c25f48e19b1156adea408f26d9e7a2041aa6f86a1cf1ec6b1a740f77c903b38b84be91c33622ad5bd4811e4674f4ced59b761c51064658559aca9e9a562d26e7099763966c455ac7a9023c75ab0f28789d14641ed8ef302a9b77bcdf70800d9e1349073cd88ab59f520478d41743dbbea050f3ba7e40dfd49cd1f969a525db0c26ac4e89b1156b4ea408f190efad424aa6ca12f1c8e43f289f86727e0e7175e84d72dd23622ad6ad4811e311df5a84954d9425e391c87e513f0ce4fc1ce2ebd09ae5ba46c455ad5a9023c623beb5092a9b284bc72390fca27e19c9f839c5d7a135cb748d88ab5ab520478c403e8f9d229c78c30b138478c46216139b37b16f126bb1292b1156b57a408f18707d1f3a4538f186162708f188c42c27366f62de24d762525622ad6af4811e30e0fa3e748a71e30c2c4e11e31188584e6cdec5bc49aec4a4ac455ad5e9023c61c1f47ce914e3c618589c23c62310b09cd9bd8b78935d8949588ab5abd20478c383e8f9d229c78c30b138478c46216139b37b16f126bb1292b1156b57a408f1870093192f20f5408cdf3cf1980ba8a4f311ba53a21d763f65722ad6af5811e30df126325e41ea8119be79e330175149e62374a7443aec7ecae455ad5eb023c61be24c64bc83d502337cf3c6602ea293cc46e94e8875d8fd95c8ab5abd60478c37c498c97907aa0466f9e78cc05d4527988dd29d10ebb1fb2b9156b57ac08f186f81f2b87cdcba30f9709b7c0039f031b0c6695fe1a764109732ad6af5911e30def3e570f9b97461f2e136f80073e063618cd2bfc34ec8212e655ad5eb223c61bde08c077e404eec113f3a52806726a942c469a5466d905c9cdab5abd65478c37bb1180efc809dd8227e74a500ce4d528588d34a8cdb20b939b56b57aca8f186f762301df9013bb044fce94a019c9aa50b11a69519b64172736ad6af5951e30deec4603bf202776089f9d2940339354a16234d2a336c82e4e6d5ad5eb2a3c61bdd81819d6ed254e93f70718a85f1d076abf15e7a26a905e40dbb5abd65578c37baf3033adda4a9d27ee0e3150be3a0ed57e2bcf44d520bc81b76b57acaaf186f75e60675bb4953a4fdc1c62a17c741daafc579e89aa4179036ed6af5955e30deebc4ce1101600d72270058b6af0de997df35b7f6f5182f3aadead5eb2acc61bdd7725d478d8d810c797d7dcfdd9b39123e163413aa005e8f9be5abd655a8c37baed4ba8f1b1b0218f2fafb9fbb3672247c2c68275400bd1f37cb57acab5186f75da23643c1036a5a1172c3a1f5ec4a2b7803947467d17a58afa6af5956b30deebb346c878206d4b422e58743ebd89456f00728e8cfa2f4b15f4d5eb2ad661bdd76619a348edb0f907147daea57308e905fb915f75f15e97cfeaabd655adc37baecb334691db61f20e28fb5d4ae611d20bf722beebe2bd2f9fd557acab5b86f75d96668d23b6c3e41c51f6ba95cc23a417ee457dd7c57a5f3faaaf5956b70deebb2c592ca01a5e2abb5bba3b53903da657d7373e0b87f4c023565eb2ad6f1bdd76573e6b98e192b7f96f413ccf1871aad7a91abe730ce981eaadbd655adf37baecad08e98a6ffbd275964f3fc628d9b3d74ce1bf4216d305795c7acab5bf6f75d95911d314dff7a4eb2c9e7f8c51b367ae99c37e842da60af2b8f5956b7edeebb2b223a629bfef49d6593cff18a366cf5d3386fd085b4c15e571eb2ad6fdbdd76564474c537fde93acb279fe3146cd9eba670dfa10b6982bcae3d655adfb7baecac81aaaffac9389dc1cc0c28a85919b9cc8c8367d6a305939c8acab5bf7f75d958f3555ff592713b8398185150b23373991906cfad460b273915956b7efeebb2b1e6aabfeb24e277073030a2a16466e732320d9f5a8c164e722b2ad6fdfdd76563c616a561172b1639dd2da7c24833b0e40edf6474e82cb7246655adfc0baecac774ee704cfbbc549f3727b2040fcd4447c882eea9a0598888dcab5bf8275d958ed29e0624c4ded169eb1bc6879f006b0f3bca031310b32b51c956b7f05ebb2b1d953c0c4989bda2d3d6378d0f3e00d61e77940626216656a392ad6fe0bd76563b23393e1de0e16dd3293b7c9dfb678ebc99ec320c12ccc787355adfc18aecac7636727c3bc1c2dba65276f93bf6cf1d7933d8641825998f0e6ab5bf8315d958ec65a61e0250ebdf7821ba54f76d041d721274edf01b33385ce56b7f063bb2b1d8b40d618f6f3de71bc0410c6e596e1d63cfae01a006668af9dad6fe0c876563b150dbe8a9abe1f662fd4e7b5c32421d474a2028ffdccd3033c5adfc191ecac76291b7d15357c3ecc5fa9cf6b864843a8e944051ffb99a60678b5bf8323d958ec5236fa2a6af87d98bf539ed70c908751d2880a3ff7334c0cf16b7f0647b2b1d8a46df454d5f0fb317ea73dae19210ea3a510147fee669819e2d6fe0c8f6563b14867fb0258b858e5b51b41842a387b6f44cc6b5bd9cd31d7c6adfc191fcac7628f5c085d5e47144e220349304c67550684451913b09a65538e5bf83240958ec51d44231369648b1efbd3588890c50835033674835e34cc4b1db7f064822b1d8a3914587f7f9f78c0af73773919806e9201192b62b9699a3a3c6fe0c905563b147128b0feff3ef1815ee6ee723300dd24023256c572d3347478dfc1920aac7628e25161fdfe7de302bdcddce46601ba480464ad8ae5a668e8f1bf83241558ec51c42ed654a9d2288833687ff0c3f9d2b803759d71c84cd375e47f06482bb1d8a3875daca953a4511066d0ffe187f3a57006eb3ae39099a6ebc8fe0c905763b1470e476bab541f04a3856ec5eb07dda9080882b8231e334f7b92fc1920afc7628e1b1ae9af55146bc9c2aa51fe07b1b0380bb1b2a23966a09b26f83241608ec51c3535d35eaa28d7938554a3fc0f6360701763654472cd41364df06482c11d8a386a6ba6bd5451af270aa947f81ec6c0e02ec6ca88e59a826c9be0c905823b1470d4635fd35579c0d0cd1f56183583dfe85839d76dc835067d38c1920b057628e1a752d1ff57c9e424520b725862fe1df8ab1ff1378d6a0e9e728324160bec51c34d31b6575c6a2acb5be3aad8bdf29a1950ec24cb17d41ee0e606482c18d8a38699636caeb8d45596b7c755b17be53432a1d849962fa83dc1cc0c905831b1470d3252ebb61e7f0db0275b718aefc0c68d3e5cd5885c507d27991920b064628e1a6331e9c4e9d47de30683a93dd777eb427765ed6cb5a0fbf333324160c9c51c34c563d389d3a8fbc60d07527baeefd684eecbdad96b41f7e6666482c1938a38698a53b96c54285a0ed1db6b1f55d60b31d843f80ed383f170cdc90583281470d313338531552716a05b839c66a3a2748bab343279a407e4859c920b065128e1a625670a62aa4e2d40b70738cd4744e917566864f3480fc90b3924160ca251c34c4a5a271e0172bd0425db37c286803056a77d0c428d1f93ba73482c1945a3869893406094afbbdc8b038335ad04f6bed549a65ae1173f2918e79058328c470d31250cd3820c4e1b98bed3318201e3dbd28df8f81e2b7e53d5d020b065198e1a624919a704189c37317da6630403c7b7a51bf1f03c56fca7aba04160ca331c34c492334e0831386e62fb4cc608078f6f4a37e3e078adf94f574082c1946638698924669c106270dcc5f6998c100f1ede946fc7c0f15bf29eae81058328cc70d31248594a7971b81c0ea4ffde4816341b50da3bc43eb4e53f01030b065199e1a6248f3ea74b90469aa001cc82b8245e94c9af23cad966ca7fa607160ca334c34c491d0960efcd6397c2bb65cb9840b387bb58f3d80eca9500f00f2c19466a8698923912c1df9ac72f8576cb973081670f76b1e7b01d952a01e01e58328cd50d3124722583bf358e5f0aed972e6102ce1eed63cf603b2a5403c03cb06519aa1a6248e44b077e6b1cbe15db2e5cc2059c3ddac79ec07654a807807960ca335434c491c8222155830fdeae6e297fac032ed9dd89e9c348a65010a4f3c19466a96989238f4442ab061fbd5cdc52ff58065db3bb13d386914ca02149e78328cd52d312471e1497aeb915dd3c7072c4d804b1c59e22534f7e96404437d006519aa6a6248e3b292f5d722bba78e0e589b009638b3c44a69efd2c80886fa00ca3354d4c491c76525ebae45774f1c1cb136012c71678894d3dfa590110df4019466a9a989238ec30cfce75854c663b62ece81d848b190d46be50af02236281328cd536312471d7619f9ceb0a98cc76c5d9d03b0916321a8d7ca15e0446c5026519aa6c6248e3ae4f519282eb941ba55879c86e088a8c2fc73b9eb9088f2e05ca3354d9c491c75b2ab57db2ad8aba027db9b8d40773405a3ab9996f1120000c9466a9b489238eb5556afb655b157404fb7371a80ee680b4757332de2240001928cd536912471d6a36e84f778c8d6ac1c3ad0b48142b29639728c1b94481a433519aa6d3248e3ad36dd09eef191ad583875a1690285652c72e51837289034866a3354da6491c75a667b3968b08982dbedb7a5518470acd8908e562e2120834ce466a9b4d9238eb4b5b7985c2e792de3583bad2288473c30cbe0d21c124120d9d8cd5369c2471d69543056432a5883f22d43bcc48ff45ae14285c9f7f4825bf3c19aa6d3948e3ad29121d2112217300fd753dc089f4e98422fcfb9afb904d22793354da7391c75a51243a422442e601faea7b8113e9d30845f9f735f7209a44f266a9b4e7238eb4a24874844885cc03f5d4f70227d3a6108bf3ee6bee413489e4cd5369ce471d69441cfb613de1fa8aa376b42c479daa4912941f33d9826ab7ca9aa6d39d8e3ad28739f6c27bc3f51546ed68588f3b549225283e67b304d56f95354da73b1c75a50e73ed84f787ea2a8ddad0b11e76a9244a507ccf6609aadf2a6a9b4e7638eb4a1c73ed629be636d7d382678a34e3b0708f4d3bfac913576255d5369ced71d6943773ed1de4a2d0325ed1953c61bdbf091946ba518f26b068acaa6d39dbe3ad286d73ec94761c02e7756ff0a0bb71dc3a2d39b6ff1b4d62755a54da73b8c75a50d973eb81990e6851a2aca7696eda169c551fb05a339ac68eb5a9b4e7728eb4a1b173e95bdef33325fd2614fad5aa8b60a4eba31064358ec16c5369cee61d69436173e5106abcc8ceb218f01da34b74e94483887cc56b1f26d9a6d39dcd3ad286c173dc79824ff4201bfea6633e8d47fa83b3535587d63ff1b44da73b9b75a50d8173cb4bb1764ac2efca12ee7510ee1d0212e9070cac8187699b4e7737eb4a1b0173a8f00fc2f8089760ec04e2183a61fed2146a165904b2d4369cee70d6943601736438cc5c5293e68e9e31bc26d2ebf8506b3029b20b09a96d39dce2ad286c0172daca458f07aa84ea028b704403ffeb4d18bc506417b753da73b9c65a50d80171c7ed37f471d7c1a0cb3ed87e6627d14673d49dc83112a8b4e7738db4a1b0016fa2331cbf46323b0e5ca5a8f32a779d392a05389063c95269cee71c694360016b56bee654eee72de97f7349dcb317351e96666e20c936a5d39dce39d286c00162bfd679804051139fc50e8bafc45664e96f28d94194114ca73b9c74a50d80015192059fd6e324df0c50450f55e6d4c47f20adaf8329c69a4e7738ea4a1b00012f3663ec8428cc75e566b216a22bd183aa83b75c065531359cee71d5943600015e6cc7d9085198ebcacd642d4457a30755076eb80caa626b39dce3ab286c000248ebe85ee705b48f6260f0527f0d6e095651396d195668d773b9c75750d800031dea296aa46debd69188089cf479040d58e4ced732ae75afe7738eafa1b000053bd452d548dbd7ad23101139e8f2081ab1c99dae655ceb5fcee71d5f4360000a03bafe57681a321212e64a6bc84238300fd59759cabb7ac09dce3abf86c000130775fcaed034642425cc94d7908470601fab2eb39576f5813b9c757f0d8000260eebf95da068c8484b9929af2108e0c03f565d672aedeb027738eafe1b00004c1dd7f2bb40d190909732535e4211c1807eacbace55dbd604ee71d5fc360000983bafe57681a321212e64a6bc84238300fd59759cabb7ac09dce3abf86c00013003722399d9a8c4fa298f7570fea52dfca6f547365770fc14b9c757f1d800025f06e44733b35189f4531eeae1fd4a5bf94dea8e6caee1f829738eafe3b00004be0dc88e6766a313e8a63dd5c3fa94b7f29bd51cd95dc3f052e71d5fc76000097c1b911ccecd4627d14c7bab87f5296fe537aa39b2bb87e0a5ce3abf8ec00012f83722399d9a8c4fa298f7570fea52dfca6f547365770fc14b9c757f1d800025f06e44733b35189f4531eeae1fd4a5bf94dea8e6caee1f829738eafe3b00004be0689b3f234093c14230a384379fa9a72469942992dc40a92f71d5fc77000097bf5d48d6f3578a053c2e0d306735b176437f6aaf22b882f65fe3abf8ef00012f7d46a4069385768d3028e088c661c11481ab17ba42710790c0c757f1df00025ef9195a65d3e14f9d181e873984b9e050fe0271d081e210c5828eafe3bf0004bdf132b4cba7c29f3a303d0e730973c0a1fc04e3a103c4218b051d5fc77e00097be26569974f853e74607a1ce612e78143f809c742078843160a3abf8efc0012f7c456e5874be0df6b78c0fff41dc560afeabfd0e00c1087d015757f1df90025ef8739dd6744982159a94ec61033811f87d02be41c152111442beafe3bf3004bdf0d73bace893042b3529d8c2067023f0fa057c8382a42228857d5fc77e60097be1a7387f5bf36e7e95d07de68c5fadc473b5bd2cc518446b4b0abf8efcd012f7c337322442b44325571dc82f983ec16b67163e7f4a0088f0d6257f1df9b025ef8657256e1035ec72d9b85cc1affce8b94dd7412453d111fbec5afe3bf3704bdf0c970c01ab393f0ddeed85e5df7937551b59466e6772241218c5fc77e6f097be1916d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321673774d4d2eaffe2c7cbefc630efbec65662add3890972347f1df9bf25ef86415a8142567c38827d5c5e0784583da5875907b7a412148869fe3bf37f4bdf0c814114dd59ced387b285823700a6d973095e51cb45242ab4d4fc77e6ff97be19010e3c13607409921cd7ca95f944110e0d68e5f28748570daaf8efce002f7c32011c7826c0e8132439af952bf288221c1ad1cbe50e90ae1b55f1df9c005ef8640238f04d81d02648735f2a57e510443835a397ca1d215c36abe3bf3800bdf0c80471e09b03a04c90e6be54afca2088706b472f943a42b86d57c77e70017be190086fd38eb416fba485496f878c376f08d13aa1847185727eb08efce003f7c3200f6bb976150459cbc25fa53710653c399d218564e00ae6a1621df9c008ef86401d638544d6df161a3c8c109618c0d69b34ef4d25bd15cee6c53bf38012df0c8039531ce25a948eb730e4e75429780b5e648adca7772b9f718b77e70026be190071324c1d61ff7ff1199694d04ae674e4c3c1fbaaeb57408717efce004e7c3200e164983ac3feffe2332d29a095cce9c98783f755d6ae810e2fdf9c009cf86401c25542ce34d462471e271969239031bb09b43107aa5d03c060bf38013af0c803833697f5167f2710f41af8fa3f16c19e0e14a46b51ba0924c27e700276e19007056d2fea2cfe4e21e835f1f47e2d833c1c2948d6a374124984fce004edc3200e0a66722d06d2fec68838aa10f45164a032fed40943e826370af9c009dc86401c1358f6b2ba7c600fc83e1a49e099276860a9ea6e84d04e1216f38013ba0c8038253dffbe21cf22a24848fabbb928acf8bc00173906a09dc82ee7002775190070490811d4f074a7c7485ebb9f6a47b81972ac70ce0a413d345ece004eeb3200e0911023a9e0e94f8e90bd773ed48f7032e558e19c14827a68bd9c009dd66401c122204753c1d29f1d217aee7da91ee065cab1c3382904f4d17b38013bacc8038244408ea783a53e3a42f5dcfb523dc0cb956386705209e9a2f670027759900704880d2fa7b420def73db8801e9c71dfbf25734f3ca113d4e9ede004eeb4200e090f1a5f4f6841bdee7b71003d38e3bf7e4ae69e794227a9d3dbc009dd68401c121e34be9ed0837bdcf6e2007a71c77efc95cd3cf2844f53a7b78013bad08038243c697d3da106f7b9edc400f4e38efdf92b9a79e5089ea74f6f002775a1007048785f0cd3eee451f69354c811bf145a1a51e136260e3d5042df004eeb4300e090ef4a2c008a9f066fde76564b761f125c9e6eaea8197aa229bf009dd68701c121dd206a59c2146f6274b972bee43482e137899fac2ff545f77f013bad0f038243b940d4b38428dec4e972e57dc86905c26f133f585fea8beefe02775a1e070487720dbbbfb528200c8ab2912388c869acd8d2c10cbcd51981fd04eeb43d0e090ee31b777f6a504019156522471190d359b1a5821979aa3303fa09dd687a1c121dc636eefed4a080322aca448e2321a6b3634b0432f3546607f413bad0f438243b8c6dddfda94100645594891c46434d66c6960865e6a8cc0fe82775a1e87048771867ce53ff58634b62f5d860847cf8f587d85327ca5199c3d14eeb43d1e090ee2f5baf00ab8729197db876e900f050130a5ce8ab91a3352ba39dd687a4c121dc5d43705a03e4b4b5b33db3f9f9d6fe4e0f6613b320466bfb483bad0f4a8243b8b912f30cb49fcbee1e482e1beba45ac4197869c23d8cd99a91775a1e960487717125e619693f97dc3c905c37d748b58832f0d3847b19b33522eeb43d2c090ee2e24bcc32d27f2fb87920b86fae916b1065e1a708f633666a45dd687a58121dc5c423aabe51d4c1f3aa0e370755193448c66f906de966ce788cbad0f4b1243b8b8747557ca3a983e7541c6e0eaa3268918cdf20dbd2cd9cf11975a1e9624877170e1abd51f4296a516005a2454c5b2f4b146a8413a29b3b8633eb43d2c590ee2e1b357aa3e852d4a2c00b448a98b65e9628d508274536770c67d687a58b21dc5c366af547d0a5a94580168915316cbd2c51aa104e8a6cee18cfad0f4b1643b8b86c61fce84e21b50db7f9d8525acfd8809e0062f911d9ddd5a05a1e962d877170d7500c294919cc9e27c076ccad960f2936ad084e20b3bd4f41b43d2c5c0ee2e1ad2c2aab3f09fbbf074db3c153227c7a680652f83e677c4284687a58b91dc5c3595855567e13f77e0e9b6782a644f8f4d00ca5f07ccef88508d0f4b1723b8b86b23cbd05a8fe517ed503952d448050119ac58e3cf69df2ae12a1e962e577170d63058c63fed3058061d3f08280f6fe4b30375ed5ea3be7002643d2c5cbee2e1ac50b18c7fda60b00c3a7e10501edfc96606ebdabd477ce004c87a58b97dc5c358a16318ffb4c1601874fc20a03dbf92cc0dd7b57a8ef9c00990f4b172fb8b86b142c631ff6982c030e9f841407b7f25981baf6af51df3801321e962e5f7170d62858c63fed3058061d3f08280f6fe4b30375ed5ea3be7002643d2c5cbee2e1ac503d9ed88737128ef24ad67816d6278e01981d19447ce1a8c97a58b97ec5c3589f075009bb4487a09c62731825a2ad43fddc7c8e85f9c4f593f4b172fe8b86b13d0ea01376890f4138c4e6304b455a87fbb8f91d0bf389eb27e962e5fd170d627a1d4026ed121e827189cc60968ab50ff771f23a17e713d64fd2c5cbfa2e1ac4f43a804dda243d04e31398c12d156a1feee3e4742fce27ac9fa58b97f45c3589e80112f4611edc8c7df3f7aa52213267d8740b445c9c50fd404b172fe9b86b13cf0225e8c23db918fbe7ef54a44264cfb0e81688b938a1fa80962e5fd370d6279e044bd1847b7231f7cfdea94884c99f61d02d11727143f5012c5cbfa6e1ac4f3c0897a308f6e463ef9fbd529109933ec3a05a22e4e287ea0258b97f4dc3589e78112f4611edc8c7df3f7aa52213267d8740b445c9c50fd404b172fe9b86b13cf0225e8c23db918fbe7ef54a44264cfb0e81688b938a1fa80962e5fd370d6279e044bd1847b7231f7cfdea94884c99f61d02d11727143f5012c5cbfa6e1ac4f3c0158c893c44a8c1b1c89b51088f921434b1e48a4b288044268b97f4dd3589e77f2b191278895183639136a2111f24286963c914965100884d172fe9ba6b13cefe563224f112a306c7226d44223e4850d2c792292ca201109a2e5fd374d6279dfc3876a28efba8904611a0b03c72eec9a03b66ae564403c5355cbfa6eaac4f3bf770ed451df751208c23416078e5dd934076cd5cac88078a6ab97f4dd5589e77ee6dece2e8c504c3d01348e8e9c2194e7b99dd15561010b8d672fe9babb13cefdb67ec1e7e606c0a57f357f9cb7a90c4f1dffc86a9202315ade5fd37586279dfb55bea95a9973a9767b3761b8eeb7fb1de6c3b694f4047cf5ccbfa6eb1c4f3bf6943e7840004d7b18733b25f15cd5d8bb784b92e9b809142ba97f4dd6489e77ed113e160ace011e5c6342ae62391193f69b5b4b934012429762fe9baca13cefda127c2c159c023cb8c6855cc4722327ed36b697268024852ec5fd37594279dfb424f8582b380479718d0ab988e4464fda6d6d2e4d00490a5d8bfa6eb284f3bf6842b1d5e13d6f1b0e96e1d59147f28234859e8259d0922efb27f4dd6519e77ed07563abc27ade361d2dc3ab228fe504690b3d04b3a1245df64fe9baca33cefda0e3887d0fc3229465d853b8c49f2feb51c13e2f271248d62cafd37594779dfb41b710fa1f864528cbb0a771893e5fd6a3827c5e4e2491ac595fa6eb28ef3bf68366e319c9d9f079c2de1b4591fc258fc6afbce25c192372f2cf4dd651ee77ed06b687591e81471bb13902eda377b1020d0a3dea7802470025ae9baca3ecefda0d55cfd7c7cff45f8deed23dc66ec7e699bf3ffaafd48e1a8b6d375947e9dfb41a9460d51a6d4ee7475a70de0c5cf5afb329441b1f791c4f56ea6eb28fe3bf68351182cfbfa803f6ba31ae1e98395141e5fd4c5bfec238b8ede4dd651fd77ed06a13059f7f5007ed74635c3d3072a283cbfa98b7fd847171dbc9baca3faefda0d4260b3efea00fdae8c6b87a60e5450797f5316ffb08e2e3b79375947f5dfb41a844d7a3880d85ddfd0a3d574149eff1af952705b5e1c5e1af36eb28fecbf6835072706c9ae871e425914711021345c5ded512312b938bdd9e7dd651fda7ed06a0d4e0d935d0e3c84b228e2204268b8bbdaa2462572717bb3cfbaca3fb4fda0d41a282d7f66f2db8c1c1e8a687cc7cf9faff0cea6e1e2f90ba075947f6afb41a833505afecde5b718383d14d0f98f9f3f5fe19d4dc3c5f21740eb28fed5f68350662cc85648a1d0b32846efc9eb159ca6ba6f7cf7848be5d282d651fdaced06a0cb5990ac9143a166508ddf93d62b394d74def9ef0917cba505aca3fb59da0d41963f33b1cf5da54f58e8854fa44cd0c2e46a363a0f2f98ee0c5947f6b4b41a832b0a79bc4b91ad21699dd0c7408fffadc380aed01b5f338019b28fed6a6835065514f37897235a42d33ba18e811fff5b87015da036be670033651fdad4d06a0caa29e6f12e46b485a677431d023ffeb70e02bb406d7cce0066ca3fb5a9a0d4195453cde25c8d690b4cee863a047ffd6e1c057680daf99c00cd947f6b5341a832a833ae1d65f1349951a9d29c00f6590432b72f5db2f339a59c28fed6a78350654f675c3acbe26932a353a53801ecb208656e5ebb65e6734b3851fdad4f06a0ca9e5acace449b34e7fe741097fbcfc238c588ffd2c8cce83a71a3fb5a9f0d41953b41a7f5360ccc52b4b4e757ef95e29985be42018e99d218e447f6b53f1a832a750f624318effb28213694d7d722235b0628c65f1a33a5d5c98fed6a7f350654e91ec48631dff650426d29afae4446b60c518cbe34674bab931fdad4fe6a0ca9d23d890c63bfeca084da535f5c888d6c18a3197c68ce9757263fb5a9fcd41953a407247174563bc3c1816ce6b10779002bf27554ce9d30524d7f6b53faa832a7470e48e2e8ac77878302d9cd620ef20057e4eaa99d3a60a49afed6a7f550654e8e1c91c5d158ef0f0605b39ac41de400afc9d5533a74c14935fdad4feaa0ca9d1c39238ba2b1de1e0c0b6735883bc8015f93aaa674e982926bfb5a9fd541953a387247174563bc3c1816ce6b10779002bf27554ce9d30524d7f6b53faa832a747070a087379ddafae7fa62fe18e57e2d78faecf5d0a60bedb0ed6a7f560654e8df6d53671c12187887c18c2429c15a82eca21c479e4c197f62dad4fead0ca9d1bd66b926e4fa9373c74fde704b79132dd3f07aeb399834a2c6b5a9fd5b1953a3795984a676cb896a466c83088ee88483a28d383270306ae98e6b53fab732a746f13f1ba59a6d755744a5cc3915c7672f3fc6b2c0dd60d7771dd6a7f56f654e8de10a49a3e1b14d3141185e9a23852c867a39a7ddb7c1b0923cad4feadfca9d1bc1149347c3629a628230bd34470a590cf4734fbb6f836124795a9fd5bf953a378229268f86c534c504617a688e14b219e8e69f76df06c248f2b53fab7f2a746f04524d1f0d8a698a08c2f4d11c296433d1cd3eedbe0d8491e56a7f56fe54e8de0830ac96c7eb3596c952afca3049268f9e46c037791b0ac7cbd4feadfda9d1bc0f61592d8fd66b2d92a55f9460924d1f3c8d806ef236158f97a9fd5bfb53a3781e4ec4b3cc8338dddd178550b91af86673c74339e16c2cc33053fab7f7a746f03b299bc045dcd43e71fbd0c96a2c4ef4e23ac8cfbfd85b2a61a7f56ff04e8de0755337808bb9a87ce3f7a192d4589de9c475919f7fb0b654c34feadfe09d1bc0ea328159c449b37c7fbc094da0a799fb8397659afc616e4d879fd5bfc23a3781d36502b3889366f8ff78129b414f33f7072ecb35f8c2dc9b0f3fab7f84746f03a65617bfbdfd3074b6bceb5e7a94c6160909d8c7ee85bada1f7f56ff09e8de074b3841d828d0c36c25469ce4ed1fea540cbff3ebda0b77583ffeadfe14d1bc0e957083b051a186d84a8d39c9da3fd4a8197fe7d7b416eeb07ffd5bfc29a3781d2a6d19b9501970334ce739bbac7607782dac120b652ddf0500fab7f85446f03a536645cb4d0942e9519b399f50e26d1856046672c75bbfae02f56ff0a98de074a5589def46e8e8555b03396699bb3858a6b50f418bb7810006eadfe1541bc0e9493d4e373aa8332d6dd338f52b6cced9481660df146f03a40ed5bfc2a93781d29106aec72226c8dd937338124ecffbda8ad9041a25de08ec1eab7f85536f03a5210d5d8e444d91bb26e670249d9ff7b515b208344bbc11d83d56ff0aa6de074a421abb1c889b23764dcce0493b3fef6a2b641068977823b07aadfe154dbc0e9484357639113646ec9b99c092767fded456c820d12ef04760f55bfc2a9b781d29086aec72226c8dd937338124ecffbda8ad9041a25de08ec1eab7f85536f03a521061eb3cf1af7e352633c871d1f5d97955ccc5a0b8c11f27d66ff0aa6ee074a41f4fe8d290355eed0434570b9be2111aa645cd9d6e823ff3addfe154dec0e9483d2be3fdcd41205cc035743f2fba805d4737dd96da04818b5cbfc2a9be81d2907957c7fb9a8240b9806ae87e5f7500ba8e6fbb2db4090316b97f85537d03a520f23ba24fe1dae3f5b8a29724b6e05f9d178bb8b7651207d173ff0aa6fb074a41e30356f8708c2a6e2911f47165b71d6229c3b3cac7241146e8fe154df70e9483c506adf0e11854dc5223e8e2cb6e3ac4538767958e48228dd1fc2a9bee1d29078a0d5be1c230a9b8a447d1c596dc7588a70ecf2b1c90451ba3f85537dc3a520f141ab7c384615371488fa38b2db8eb114e1d9e5639208a3747f0aa6fb874a41e28356f8708c2a6e2911f47165b71d6229c3b3cac7241146e8fe154df70e9483c506adf0e11854dc5223e8e2cb6e3ac4538767958e48228dd1fc2a9bee1d29078a061d074cfe0fe0cfc49e28165bdb6b26b99350dc604535e4085537dc4a520f13f4fb3424c985e9cb0608b2ac371cb8cd1deac778908a860820aa6fb8a4a41e27d2b78dd46071fbc188ddc7d7ed9f5419e699b4b0f11526505154df7159483c4f956f1ba8c0e3f78311bb8fafdb3ea833cd336961e22a4ca0a2a9bee2b290789f239f5cdc4f2e1731a04381df35e332e7452af8839454b38155537dc57520f13e373eb9b89e5c2e63408703be6bc665ce8a55f10728a96702aaa6fb8aea41e27c673e98fc0a1e84f1fdda69fc56f2ae1cbf7007ce2152e845654df715e483c4f8b73e5782e1a3320f788136782d4b3eb929a4355c12a5eacada9bee2bd90789f1573dd49090ac8c4a6dcecf6fd9fc5ff1fe0c9077f54befd5c537dc57c20f13e2973cceabeebf40c0586a015f335ea263a6dd46afba97f9eb9a6fb8af941e27c5173ac2e2aae4a9ac2da0653de6232746f87eb31f45300e1744df715f383c4f8a1736ab50232f7b83d80d2cfb4bac310d9bc18bfe5a60366e99bee2be80789f14172e7c2b13c51f332ce6bc7616be449ae2473dbc84c0871d437dc57d10f13e28171e1de0f4f06691d699db6bace26bb56f52a138d981287a96fb8afa31e27c5016fd614cb746f54f2a001956d92ab9ea8969683183026b353df715f473c4f8a016bbe8243bf412c9d0cc952d31bb5654bd96f622d604f0aa8bee2be8f789f1401638f5d3454e4dbf1e658cd9e2dc8f2925f212057c09fb9527dc57d1ff13e280153311315802c3a9b9977c33451f00d1f6a849cac814116a5fb8afa40e27c500132747ed7d6baf7eeffb5ae609a3e4239814b95560283d14cf715f482c4f8a00164e8fdafad75efddff6b5cc1347c847302972aac0507a299ee2be90589f1400255e4540c314e6273cb9ce17a5f5730e0b170b1550a10e934dc57d20c13e2800337db00c538ff479f63ffeaecb50c89bc0f23bea71423766ab8afa41927c500056fb6018a71fe8f3ec7ffd5d96a1913781e477d4e2846ecd5715f48324f8a000a6b7e5bc1ba5fa1355cc5d3aaca904eeae8d15699508f7dabe2be90659f140013630f10304b21c5228651cf4d8b7ec5d07de5092fa1209f58c57d20cc3e2800255230790d6ca60cfcd969c6930d5bb39ba80c6e5c4242e2b28afa41997c50004930734ac7afae9cb17f99b51e11158f31fc5b38b58487696615f48333f8a0009160e6958f5f5d3962ff336a3c222b1e63f8b6716b090ed2cc2be90667f14001224ddf83cb951cf57dcb2cfc703ab464c29daf3ed3121f499957d20cd0e280024327d16044009c6db3632020d86bc6f17fe7a0d9a324403733afa419a2c50004854fa2c0880138db66c64041b0d78de2ffcf41b34648806e675f4833458a00090a2b57d9bcd8d439855946ab59a579edfa4ac5c289910280cfbe90668c1400121356afb379b1a8730ab28d56b34af3dbf4958b85132205019f7d20cd18280024263971bfa039b368cd31e0d55e8c45dfe3d7596623440ba73ffa419a315000484b72e37f407366d19a63c1aabd188bbfc7aeb2cc4688174e7ff4833462a000909671d9572dbd3025ec94497d722775a78a09a7f48a10304100e90668c64001212b6fc5070850c2ce90f55922dc4549770ebf92451120622602d20cd18d800242556b9c66bd77e81fd9b7786db080f116182b66e61f40c5f006a419a31c000484a9634b2627c632c26b3bb70358f840542b0310283b818d840e483346390009095152a8a4fc62c8078e44342ea9e6ded050b262ac74031cac1d90668c73001212a13163a2a59bf291d4552e854bc41bc89c1107b4e5063afc3c20cd18e70024254162c7454b37e523a8aa5d0a9788379138220f69ca0c75f878419a31ce00484a8251a0e343462cca0921803d2706cd4a6af0612f9118ed94f18334639d009095032f541f3362bc16ca0fc6a24603f8bcd08d04bb1f31dccde40668c73b01212a055ea83e66c5782d941f8d448c07f179a11a09763e63b99bc80cd18e760242540a4962d57a6152dde00be0b11006411b3ce0554879c774db9119a31ced0484a8131ed803a199083e77e4878a1802e05e746cececf08eeb5b23334639db090950253db0074332107cefc90f143005c0bce8d9d9d9e11dd6b646668c73b61212a04a077267333a837c975ee4505801dfa1cc5ff60fbf3baf108dcd18e76d242540930ee4ce667506f92ebdc8a0b003bf4398bfec1f7e775e211b9a31ceda484a81261dc99cccea0df25d7b914160077e87317fd83efceebc423734639db49095024c3b933999d41be4baf72282c00efd0e62ffb07df9dd78846e68c73b69212a04980338cbe07e9a4c2dbb0b2d78145844c0aba357f0baf2acddd18e76d34254092f067197c0fd34985b76165af028b089815746afe175e559bba31ceda684a8125e0ce32f81fa6930b6ec2cb5e051611302ae8d5fc2ebcab3774639db4d095024bc19c65f03f4d2616dd8596bc0a2c226055d1abf85d79566ee8c73b69a12a04978338cbe07e9a4c2dbb0b2d78145844c0aba357f0baf2acddd18e76d34254092f067197c0fd34985b76165af028b089815746afe175e559bba31ceda684a8125e05a4550cc7cf58e268f9185fd0c6f58259518582bbcacdb75639db4d195024bbf409cfa45d04d9f04ebe933f20f3cd845d6730c54795b5aebc73b69a42a04977d0d4c4d3876fdc0c1a4988fdc14d7d886592874a5f2b859d88e76d34954092ef91a989a70edfb818349311fb829afb10cb250e94be570b3b11ceda692a8125df2353134e1dbf7030692623f70535f621964a1d297cae1676239db4d255024bbe46a6269c3b7ee060d24c47ee0a6bec432c943a52f95c2cec473b69a4aa04977c860d72c34463e8ed2164f25b943dbb0603ec9a65c2b874189e76d34964092ef8f4dc0b11562dfa05bf964736a7e1588bb29d5a8b557102714ceda692d8125df1d2793bad79c21c36fbf8f0eccf2893970ffedad67ae21f22a9db4d25c024bbe394f2775af384386df7f1e1d99e51272e1ffdb5acf5c43e4553b69a4b804977c722a61440b46e99076cb02632bc0830dbeabf9119bb8896cab76d34971092ef8e354c288168dd320ed9604c65781061b7d57f223377112d956eda692e2125df1c6359768d9f208c492f8cfb4a6f86a5ef55c26a26be22756aedb4d25c524bbe38b6b2ed1b3e4118925f19f694df0d4bdeab84d44d7c44ead5db69a4b8a4977c716626ffc149e859503b004fa93d807a3d01cdce5ac889efebc6d34971592ef8e2b50f250d6136dacbf2cd01d1fa66d6f9ae5fc2756113fa179da692e2c25df1c552df6fa58fd3ddc362666623743390730783aaaa92280e6f4b4d25c594bbe38a95bedf4b1fa7bb86c4cccc46e86720e60f07555524501cde969a4b8b2977c715243ee4210cb59f390665fb0d5034244bc8d2d06a18a053fd3d34971662ef8e2a313eedcce6d1669d8998589a1fce2b173c69c6940140c23a8a692e2cd5df1c54527ddb99cda2cd3b1330b1343f9c562e78d38d280281847514d25c59abbe38a8a4fbb7339b459a76266162687f38ac5cf1a71a50050308ea29a4b8b3577c715142b893f203f15d17c98f27507dd73b398e125a5fda062c1463497166bef8e2a2757127e407e2ba2f931e4ea0fbae76731c24b4bfb40c5828c692e2cd7df1c544e3a37552dd2b9c8aa308ffc176c2cf65e30d8f3f3818ca919d25c59b0be38a89b008103087bd6140c2de62026ceb814b70df443e4031af634a4b8b3627c71513501020610f7ac28185bcc404d9d70296e1be887c80635ec69497166c4f8e2a26a02040c21ef585030b798809b3ae052dc37d10f900c6bd8d292e2cd89f1c544d404081843deb0a0616f31013675c0a5b86fa21f2018d7b1a525c59b13e38a89a808103087bd6140c2de62026ceb814b70df443e4031af634a4b8b3627c71513501020610f7ac28185bcc404d9d70296e1be887c80635ec69497166c4f8e2a26a02040c21ef585030b798809b3ae052dc37d10f900c6bd8d292e2cd89f1c544d404081843deb0a0616f31013675c0a5b86fa21f2018d7b1a525c59b13e38a89a800d156128ac768ee5b2e64ec6ae72df08a08640001af7d8a5b8b3627d715134ff1a2ac25158ed1dcb65cc9d8d5ce5be11410c800035efb14b7166c4fae2a269fe345584a2b1da3b96cb993b1ab9cb7c22821900006bdf6296e2cd89f5c544d3fc68ab094563b4772d973276357396f84504320000d7bec52dc59b13eb8a89a7f85d686b379dcb7112fb2b1462dd8c1884b4a65bfeaf7f2e5c8b3627d815134fef46e32f1c11f964ddc31c50bdb1765904158f13fa5f0000ba166c4fb12a269fdd19d8b6e4fa554c7352fec973594ada02d76083f1be01a5752cd89f63544d3fb933b16dc9f4aa98e6a5fd92e6b295b405aec107e37c034aea59b13ec6a89a7f726762db93e95531cd4bfb25cd652b680b5d820fc6f80695d4b3627d8d5134fee45ad80fd4a90ce65264bc7392c0b4f81167467b8af00ecfaa66c4fb1ba269fdc741c27856287c4f5c963f0f1d77c8181d7acf5312e01f4355cd89f63844d3fb8d0f974959275b2170f9444632e5ee5835a1e10222c0402aac9b13ec7189a7f7191f2e92b24eb642e1f2888c65cbdcb06b43c20445808055593627d8e3134fee323e5d25649d6c85c3e51118cb97b960d68784088b0100aab26c4fb1c6269fdc6408cca376113b8e3f96e8598f25d0e9a7bb4a6d130202f965d89f638d4d3fb8c7119946ec22771c7f2dd0b31e4ba1d34f7694da260405f2cbb13ec71a9a7f718e23328dd844ee38fe5ba1663c9743a69eed29b44c080be597627d8e3534fee31c46651bb089dc71fcb742cc792e874d3dda5368981017cb2ec4fb1c6a69fdc63818dc900dea1b66b13b4bc0ea536cc27660e92d2d20313a5e89f638d5d3fb8c6f31b9201bd436cd62769781d4a6d984ecc1d25a5a406274bd13ec71aba7f718de63724037a86d9ac4ed2f03a94db309d983a4b4b480c4e97a27d8e3574fee31bc52f6d91c273db841a7242f4a91c43badb38bc566018b76f54fb1c6af9fdc637732000ae524ddf33b1b0e868d19e69f561359e6c9031891eb9f638d603fb8c6ed640015ca49bbe676361d0d1a33cd3eac26b3cd92063123d73ec71ac07f718dda5412844169da4fa43900422c5df8a552f9a9f7210c63ebaf7d8e3581fee31bb33437612faa1722003ec6ac50b24f72a09f964a3f18c97b5ffb1c6b04fdc63765686ec25f542e44007d8d58a1649ee5413f2c947e3192f6bff638d609fb8c6eca5cefdd6b7ebf0ab8c7e0d93abf9bf27d2a9b84f963279180ec71ac14f718dd9345f21383d3e098295c87da6d75960cf5017965efc650c702d8e3582aee31bb2517f67fb47e23b30a85d5dcd2e18a41e4af3527dc8ca33206b1c6b056dc6376492fecff68fc4766150babb9a5c31483c95e6a4fb91946640d638d60adb8c6ec925fd9fed1f88ecc2a1757734b86290792bcd49f72328cc81ac71ac15b718dd9244bc65650c7801b0bfb750e8f02b0372025eb9ae1651b34368e3582b7e31bb247239f054e6562b8cfc3b04515fbbe963af81991bfca380c6e1c6b0570c637648d473e0a9ccac5719f87608a2bf77d2c75f033237f947018dc38d60ae18c6ec91a1a8e6de66bed65f6db873c4fe55880e68ca8a2fc28e1d5b971ac15c418dd9233351cdbccd7dacbedb70e789fcab101cd195145f851c3ab72e3582b8831bb24666a39b799afb597db6e1cf13f9562039a32a28bf0a38756e5c6b05710637648cc6085c7e035cdb26ea9000a7721222f2f118773de471051cc8d60ae21c6ec91974d1de86d41fde7951ec63ce638a28658cf5143b98e22479a1ac15c448dd9232d264e29875a5e51e20a52a1c467a334ac4ae4e3701c4633353582b88a1bb246594c9c530eb4bca3c414a54388cf46695895c9c6e0388c666a6b05711437648cb2254afeca3fdbca3ff610af0994eafaabd7d5e9bd711a70d5d60ae2296ec919634a95fd947fb7947fec215e1329d5f557afabd37ae234e1abac15c452dd9232c6213e53d5d5d1abb7a508e41e4a0a12aa0b9a02f2c46b6758582b88a6bb24658b427ca7ababa3576f4a11c83c94142554173405e588d6ceb0b057114d7648cb16110ba8042da9319660e9b8711e8672a2daaa67c811af416260ae229bec91962b221750085b52632cc1d370e23d0ce545b554cf90235e82c4c15c4537d9232c56442ea010b6a4c65983a6e1c47a19ca8b6aa99f2046bd058982b88a6fb24658ac146f98ce43ac0f6ad413eb80ea91bd1181959a3d8d7baf14057114e0648cb15728df319c87581ed5a827d701d5237a23032b347b1af75e280ae229c0c91962ae51be63390eb03dab504fae03aa46f446065668f635eebc5015c453819232c55c2f8f1f1ef3c2fe0e6d6583ff4aec1086b8ef2de96bdf1ca12b88a70424658ab75f1e3e3de785fc1cdacb07fe95d8210d71de5bd2d7be394257114e0848cb156e4a4ed528a56e7af1825c37f5220e6a158fff13a2af7e1685ae229c1191962adb20b002fe213f789ad17e97e23a7afc25cc4083425efdd10c5c453824232c55b5416005fc427ef135a2fd2fc474f5f84b98810684bdfba218b88a70484658ab6a0ed264a55b60652312c08780e04a1891dd4469067bf8e8327114e0918cb156d31da4c94ab6c0ca4625810f01c0943123ba88d20cf7f1d064e229c1231962ada63b4992956d81948c4b021e03812862477511a419efe3a0c9c453824632c55b4c02a57dd7b165abd062ca63fef8aeec899665a430dfc8e59488a7048d658ab697054afbaf62cb57a0c594c7fdf15dd9132ccb4861bf91cb29114e091acb156d2e0a95f75ec596af418b298ffbe2bbb226599690c37f239652229c1235962ada5c152beebd8b2d5e8316531ff7c577644cb32d2186fe472ca44538246b2c55b4b82a57dd7b165abd062ca63fef8aeec899665a430dfc8e59488a7048d658ab697054afbaf62cb57a0c594c7fdf15dd9132ccb4861bf91cb29114e091acb156d2e03571ce992fcd76d07f5f27b622194a6045ab6834f23b092329c1235a62ada5bf6ae39d325f9aeda0febe4f6c443294c08b56d069e4761246538246b4c55b4b7e61d9931195985df9ca42c6d07ec3517bc2effcd0c8edc88da7048d6a8ab696fb4fc57ed001933eab614bb598f3e4caf23222559e91dd351c4e091ad6156d2df52b9d564cd989000e8f5d9329de27bddf1087073a23bc0e399c1235ad2ada5be9573aac99b312001d1ebb2653bc4f7bbe210e0e7447781c7338246b5a55b4b7d23a87b1e03c8682f20a3c749f6efd1f76ee5e78e58ef1dce77048d6b5ab696fa30121bc6d4f6f889be13f1136d45866e888ff4dc81de55dcfe091ad6c56d2df45024378da9edf1137c27e226da8b0cdd111fe9b903bcabb9fc1235ad8ada5be8a0486f1b53dbe226f84fc44db51619ba223fd37207795773f8246b5b15b4b7d14090de36a7b7c44df09f889b6a2c3374447fa6e40ef2aee7f048d6b62b696fa28121bc6d4f6f889be13f1136d45866e888ff4dc81de55dcfe091ad6c56d2df45024378da9edf1137c27e226da8b0cdd111fe9b903bcabb9fc1235ad8ada5be8a0486f1b53dbe226f84fc44db51619ba223fd37207795773f8246b5b15b4b7d1401cf08f548e26d0a86c4ec36222919c3f2be9400bf2b08bf148d6b62c696fa27f39e11ea91c4da150d89d86c44523387e57d28017e56117e291ad6c58d2df44fe73c23d52389b42a1b13b0d888a4670fcafa5002fcac22fc5235ad8b1a5be89fc7396d351479907fb2f3c43090aeb09f40b8c5c5c9586038b46b5b1644b7d13f7733fff4f659492ae2b3eae0a0c343be2c35b14b62b0dab178d6b62c996fa27ed7292574ba18ba8142343840c0ec69fc032f88569561cfa301ad6c5942df44fd9713707441979d2e0134d301013eb677b123366cfac3b986135ad8b295be89fb16e80673509562877f36088181e34f6f0d0a9299c5878d4c36b5b1653b7d13f6169132716e90ed3a7b387382832c815dc4d94af35b0f34d87d6b62ca86fa27ec15e38a6daa8802a0733d498485bee53b3476bba6861e83f10ad6c5951df44fd814883a6622762d6c6346f5888ae3acf613b19d0cdc3d222225ad8b2a4be89fb011d19a5712528304435a4d90952d3c6bd2275fd9887a5e845b5b1654a7d13f6013a334ae24a5060886b49b212a5a78d7a44ebfb310f4bd08b6b62ca94fa27ec020078ee716b0343c8a3598c1d41ad42ef361a525f1e994517d6c5952af44fd80300f1dce2d606879146b3183a835a85de6c34a4be3d328a2fad8b2a55e89fb00601e3b9c5ac0d0f228d66307506b50bbcd869497c7a65145f5b1654abd13f600c03c7738b581a1e451acc60ea0d6a1779b0d292f8f4ca28beb62ca957a27ec018078ee716b0343c8a3598c1d41ad42ef361a525f1e994517d6c5952af44fd80300f1dce2d606879146b3183a835a85de6c34a4be3d328a2fad8b2a55e89fb00601e3b9c5ac0d0f228d66307506b50bbcd869497c7a65145f5b1654abd13f600c03c7738b581a1e451acc60ea0d6a1779b0d292f8f4ca28beb62ca957a27ec01800500ca17d9a64b5b26524539a3a11730c694bb1b9946bbd7c5952af54fd802ff0a01942fb34c96b64ca48a7347422e618d297637328d77af8b2a55ea9fb005fe1403285f66992d6c994914e68e845cc31a52ec6e651aef5f1654abd53f600bfc280650becd325ad9329229cd1d08b98634a5d8dcca35debe2ca957aa7ec017f8500ca17d9a64b5b26524539a3a11730c694bb1b9946bbd7c5952af54fd802ff02c2b9ba80b2bee1c970ecf2c6a810e137ed9bf7028d91ef9b2a55eaafb005fdf585737501657dc392e1d9e58d5021c26fdb37ee051b23df3654abd55f600bfbe3cc0c74d03123b2a290164a9a0626048a7a959bda3661fe7ca957aacec017f7b0593e746dc86f90c1ec8f14b3722e88bfb950f7846cde3d0952af55ad802fef50b27ce8db90df2183d91e2966e45d117f72a1ef08d9bc7a12a55eab5b005fdea164f9d1b721be4307b23c52cdc8ba22fee543de11b378f4254abd56b600bfbd42c9f3a36e437c860f6478a59b917445fdca87bc2366f1e84a957aad6c017f7a8593e746dc86f90c1ec8f14b3722e88bfb950f7846cde3d0952af55ad802fef503e8f41886741a43ba5e4515edabb397a1ee44b05d9be1e13a55eab5c005fde9f0930dbbda4e5cb2f188ecab5abd49aeeea0af208b37de0284abd56b900bfbd3d1261b77b49cb965e311d956b57a935ddd415e41166fbc050957aad72017f7a7a24c36ef693972cbc623b2ad6af526bbba82bc822cdf780a12af55ae402fef4f44986dded272e5978c47655ad5ea4d777505790459bef014255eab5c805fde9e81f20148724bf35a955b2d352b3a7d6e94cf17c8837dfa685abd56b910bfbd3cf3e40290e497e6b52ab65a6a5674fadd299e2f9106fbf4d0b57aad72217f7a79e0892aac9695f595d23917542c4fd839fe0084e1ddf803e17af55ae452fef4f3b11255592d2beb2ba4722ea8589fb073fc0109c3bbf007c2f5eab5c8a5fde9e76224aab25a57d65748e45d50b13f60e7f802138777e00f85ebd56b914bfbd3cec4495564b4afacae91c8baa1627ec1cff004270eefc01f0bd7aad72297f7a79d8153d05436c58188a05dd7c24463661f8acc73ddaf805857bf55ae453fef4f3af2a7a0a86d8b031140bbaf8488c6cc3f1598e7bb5f00b0af7eab5c8a7fde9e75e54f4150db16062281775f09118d987e2b31cf76be01615efd56b914ffbd3cebc35fa82c839234707fbb2091a281137c0127c4ad4c02dcfe0aad722a0f7a79d776bf5059072468e0ff764123450226f8024f895a9805b9fc155ae4541ef4f3aee63fc63cdbaef9ed7bb8e4c6096a306faf633875000b8e383ab5c8a84de9e75db540b20484c41c06743e2c0b923a435f098a96a9d01736b0856b9150abd3cebb53428993d6ee60386548ba96a3da693dbdd95313702e87a11ad722a167a79d7696851327addcc070ca91752d47b4d27b7bb2a626e05d0f4235ae4542cf4f3aed25cb4bda291fa90d11ef4cda0ecf8776a229720d90ba38c47b5c8a85ae9e75da3457bd3f1fa57a45a0aafc339d04f16cef1709daf1748bc906b9150b6d3cebb45170a0090cb11cb6be225ae6b96fc55988f23975b2e931d21d722a16ea79d76892e140121962396d7c44b5cd72df8ab311e472eb65d263a43ae4542dd4f3aed125c2802432c472daf8896b9ae5bf156623c8e5d6cba4c74875c8a85ba9e75da2444625d332ef0de16ddf39b54ae40d4bf255f16d6749a8d0fb9150b763cebb44714d7131334443ee588ad5ea152dfd178f70089a9e936be20722a16ed79d7688d29ae262668887dcb115abd42a5bfa2f1ee011353d26d7c40e4542ddaf3aed11a535c4c4cd110fb9622b57a854b7f45e3dc0226a7a4daf881c8a85bb5e75da23432caf146788479e412311d028d5cb3c26446a94c49b795049150b76ccebb44676595e28cf108f3c824623a051ab96784c88d5298936f2a0922a16ed99d7688ce573e1dc6b8746a48158a9c022bd0f7043d5d012e26dff8134542ddb43aed119b3a8e943a474b5747f7db5ffc4e00160326fc5e594dc194278a85bb6975da2335012f812164f93147bc7ce7f0925e5400fa3b18af9b84cc50150b76d3ebb44669025f0242c9f2628f78f9cfe124bca801f476315f370998a02a16eda7d7688cd204be048593e4c51ef1f39fc249795003e8ec62be6e133140542ddb4faed119a4097c090b27c98a3de3e73f8492f2a007d1d8c57cdc266280a85bb69f5da2334812f812164f93147bc7ce7f0925e5400fa3b18af9b84cc50150b76d3ebb44669025f0242c9f2628f78f9cfe124bca801f476315f370998a02a16eda7d7688cd204be048593e4c51ef1f39fc249795003e8ec62be6e133140542ddb4faed119a4023d2e95f52fb26960b3a204125882877c9ceb3cac267cc0b85bb69f6da23347f47a5d2bea5f64d2c167440824b1050ef939d679584cf98170b76d3edb44668fe1b5dfe2a224f1d0ff9aea8fc8c7ec9d9d37d2b2809a0d42f16eda7dc688cd1fb36bbfc54449e3a1ff35d51f918fd93b3a6fa56501341a85e2ddb4fb8d119a3f66d77f8a8893c743fe6baa3f231fb27674df4aca0268350bc5bb69f71a23347ec670249fde8db6b379a3b6fdc5a5476c9482bb53d4d084579b76d3ee444668fd75a16eca8a8195927013d07b0ab07158d3c99c6779a122ef46eda7dc988cd1fad404031fe26953505cf4037594c6c53152575e8ec342601e9ddb4fb94119a3f590c92bca9238cecc36b4696aa8f36ce24f72e2dd5684da7d4bb69f72923347eb1192579524719d986d68d2d551e6d9c49ee5c5baad09b4fa976d3ee524668fd62324af2a48e33b30dad1a5aaa3cdb3893dcb8b755a1369f52eda7dca48cd1fac46495e5491c67661b5a34b55479b67127b9716eab426d3ea5db4fb94919a3f588553e233f0f314eee812f92a0e9cb0a4a1f25395384dc214cb69f72933347eb0f368e9f2af4c52094cf254d39c9f43c8eea8ccea409b9e69a6d3ee527668fd61d6d1d3e55e98a41299e4a9a7393e8791dd5199d481373cd34da7dca4ecd1fac3a664cd558a977050b095b5cdf1e2f1a365675968d26e93e6ab4fb949e9a3f587358ac035e29508ccddf7ce1b632bc5c67592d89174dd420d669f7293e347eb0e53d6a5f6929039c538bbfeb645bd6e0c95e9d6e2b9ba9e5add3ee527d68fd61c906e7177f2869bb5ee445fec0ae0be98d697d385437556f5ca7dca4fbd1fac3910dce2efe50d376bdc88bfd815c17d31ad2fa70a86eaadeb94fb949f7a3f587221b9c5dfca1a6ed7b9117fb02b82fa635a5f4e150dd55bd729f7293ef47eb0e443738bbf9434ddaf7222ff605705f4c6b4be9c2a1baab7ae53ee527de8fd61c886e7177f2869bb5ee445fec0ae0be98d697d385437556f5ca7dca4fbd1fac391068f54891e399ee945586000db7db59a7dbe96683eaaf8f95fb949f7b3f58721f5dfce9d09d965fe077d228136614db4a64152904d560c32cf7293ef77eb0e43d480c2c4e118f4278bc6a781ec287de8f746cae06aac32a5aee527deffd61c8791c2ab148f98107a9459b18357b6de519951bb80a5587f8b6dca4fbe0fac390f138556291f3020f528b36306af6dbca332a377014ab0ff16db949f7c1f58721e270aac523e6041ea5166c60d5edb79466546ee029561fe2db7293ef83eb0e43c46d67e2f4a26ac001f99ee9a3d1cd50c755201c4fac4169b7e527df08d61c878766e21e961b3802bbc003fb3f99f8c9895682949c58847770ca4fbe12ac390f0d59d695d90cd2882f4cce1e772a4fbb0d59478535b10a92e2949f7c2658721e193fbf845ef0079316666264e64afd9e155ed166686216c9c6293ef84db0e43c310b91616ab671a8e4998af1c48c59642569e528cdc42f378d527df09c61c878611722c2d56ce351c93315e38918b2c84ad3ca519b885e6f1aa4fbe138c390f0c22e4585aad9c6a392662bc71231659095a794a33710bcde3549f7c2718721e1845c8b0b55b38d4724cc578e2462cb212b4f29466e2179bc6a93ef84e30e43c30845286f583d7d110165754440bbf46a514a94e8d942f51cd627df09c71c87860f1663375d515ca4ba97b0b0796e46fc9d416c2daf85ebddad4fbe138f390f0c1d2cc66ebaa2b949752f6160f2dc8df93a82d85b5f0bd7bb5a9f7c271e721e183a598cdd75457292ea5ec2c1e5b91bf27505b0b6be17af76b53ef84e3ce43c30743f2c13976147a88c8a4babc368960ce4b7a3c9792f60916b7df09c7ac87860e70a6a7fdb98f1d3d0e15d7f7ec78a41c41b89eeef5ec2c6d7fbe138f690f0c1cd14d4ffb731e3a7a1c2bafefd8f1483883713dddebd858daff7c271ed21e1839a29a9ff6e63c74f438575fdfb1e2907106e27bbbd7b0b1b5fef84e3da43c307345353fedcc78e9e870aebfbf63c520e20dc4f777af61636bfdf09c7b487860e6832ba5666657fbfc5e29e1fe46f02443c64e14af2ec2e1180be138f6a0f0c1ccf6574accccaff7f8bc53c3fc8de048878c9c295e5d85c23017c271ed41e18399e56fbb2466c6181cf573ea789b26738ec3fc787c8b0b9ea03f84e3da93c30733b3a09bd39af2586567b43770b5b2c99d32bd16b8e61757808f09c7b537860e6750025d32034ad8f64c34d160eacb75ba103e53319c2ec9412e138f6a7f0c1cce9004ba640695b1ec9869a2c1d596eb74207ca663385d92825c271ed4fe18399d200974c80d2b63d930d34583ab2dd6e840f94cc670bb2504b84e3da9fc30733a4012e9901a56c7b261a68b07565badd081f2998ce1764a09709c7b53f860e6748025d32034ad8f64c34d160eacb75ba103e53319c2ec9412e138f6a7f0c1cce9004ba640695b1ec9869a2c1d596eb74207ca663385d92825c271ed4fe18399d200974c80d2b63d930d34583ab2dd6e840f94cc670bb2504b84e3da9fc30733a4012e9901a56c7b261a68b07565badd081f2998ce1764a09709c7b53f860e6748025d32034ad8f64c34d160eacb75ba103e53319c2ec9412e138f6a7f0c1cce9004ba640695b1ec9869a2c1d596eb74207ca663385d92825c271ed4fe18399d200235ed97f8ca015c5011e62aad3ccac0a410ec308b251ef85e3da9fc40733a3ff46bdb2ff19402b8a023cc555a7995814821d861164a3df0bc7b53f880e6747fe198dbeab08e2d9cbd13fb2a34590d823b07d681fc94962188f6a7f111cce8ffb331b7d5611c5b397a27f65468b21b04760fad03f9292c4311ed4fe22399d1ff66636faac238b672f44feca8d1643608ec1f5a07f252588623da9fc44733a3fec58804e051d79511656c3bd1222e4e918302d9cfb4a4cb4c57b53f889e6747fd73d12f4b7115524e47a4da21c3c27fa2b0c9d95f3949b0d8bf6a7f114cce8ffad0638421af90ccc80c1616c306eae1c50c57d87e42937bf18ed4fe22a99d1ff590c708435f219990182c2d860dd5c38a18afb0fc8526f7e31da9fc45533a3feb218e1086be43332030585b0c1bab8714315f61f90a4defc63b53f88aa6747fd6431c210d7c86664060b0b61837570e2862bec3f2149bdf8c76a7f1154ce8ffac8638421af90ccc80c1616c306eae1c50c57d87e42937bf18ed4fe22a99d1ff590531a9c0bf7fc12cff8f3ae05cc21b2135bf3588226f9871ea9fc45543a3feb1f324790c4c65aa857bead84038ea18c2164290d014df4b23e53f88aa9747fd63d648f21898cb550af7d5b08071d431842c8521a029be9647ca7f11552e8ffac7a55309bbfefcd2416c77c380630e458803ce6900237d46cfa4fe22aa6d1ff58f33673902cb5fccae55bbe98045826d8fb260f7c016faa7df59fc4554ea3feb1e56ce720596bf995cab77d3008b04db1f64c1ef802df54fbeb3f88aa9d47fd63ca65e0995fae55ae4d3bc0880956f98be744804c02beab9bd77f11553b8ffac79357d38b6c330ddf524447380aa4513fc93542f4027d58dbaffe22aa781ff58f253bb96f853c7e415c5554980d3f00a78d16c84401fab35b60fc4554f13feb1e49038537b74f5f0570776f5812745f7714d9d2e400f5685ac2f88aa9e37fd63c91070a6f6e9ebe0ae0eedeb024e8beee29b3a5c801ead0b585f11553c6ffac79220e14dedd3d7c15c1ddbd6049d17ddc53674b9003d5a16b0be22aa78dff58f2441c29bdba7af82b83bb7ac093a2fbb8a6ce972007ab42d617c4554f1bfeb1e48838537b74f5f0570776f5812745f7714d9d2e400f5685ac2f88aa9e37fd63c91070a6f6e9ebe0ae0eedeb024e8beee29b3a5c801ead0b585f11553c6ffac792206d604680ae23ded5a89c2c950e3bed3120fb5c3a5a1854bf22aa78e0f58f243f66d2e5ae32aa40631dfe812212d6025cee391471b4324d7f4554f1c2eb1e487d59b824093bb7037e08c32a3c1c0a2cb488b484e068663eff8aa9e386d63c90f93f82a0bf4dd089b3de4c7c702e728163bdab65bdd0ce22001553c70eac7921f10b179a2b7203961f895f20d853432ac227992778a19de8012aa78e1e58f243e1162f3456e4072c3f12be41b0a68655844f324ef1433bd002554f1c3cb1e487c22c5e68adc80e587e257c83614d0cab089e649de28677a004aa9e387963c90f8458bcd15b901cb0fc4af906c29a1956113cc93bc50cef4009553c70f2c7921f083d8bfb63f69be4b062b8357d2a90d41d25d4d38719e02413aa78e1e68f243e0f072a4f74c39a4c18923692f24b7fd034f7ec030b33c1ec2854f1c3ce1e487c1d0e549ee987349831246d25e496ffa069efd806166783d850a9e3879c3c90f83a1ca93dd30e69306248da4bc92dff40d3dfb00c2ccf07b0a153c70f387921f07439527ba61cd260c491b497925bfe81a7bf6018599e0f6142a78e1e70f243e0e872a4f74c39a4c18923692f24b7fd034f7ec030b33c1ec2854f1c3ce1e487c1d0715c474549ac05ca1398864166582e99a9c2bd63783f290b9e3879c4c90f839f6ecae73769ba8e4bf3f7347ac30e852dffc7d6c3f07ff6183c70f38a921f073d69a8271ba9d79f4fb4b490ed7c7b3256abd20984e101903178e1e716243e0e795f62a6e42a11c157362f49d2ef548ca803e66f06c204c463f1c3ce2d487c1cf14ad7a6752a8605663924bb9dd507414ab40f3a0a840b2cc8e3879c5b90f839e121c1a5972b6e8d843f0f9f33a06caa901460d0120817fd92c70f38b821f073c143834b2e56dd1b087e1f3e6740d9552028c1a024102ffb258e1e717043e0e7821318ef09841cb8c8c904a4c67810d23afdc59c4520619a4c1c3ce2e187c1cf032631de13083971919209498cf021a475fb8b388a40c334983879c5c30f839e064c63bc261072e32324129319e04348ebf71671148186693070f38b861f073c0c24d9d0f8f74848fe14eb4e2bb6e4b9d29a6f3e26030e7661e1e7170d3e0e781749b3a1f1ee9091fc29d69c576dc973a534de7c4c061cecc3c3ce2e1a7c1cf02e1f799c90b383a6b0207360a6d1f10f4515ff54950c3b7d88879c5c35f839e05b3ef3392167074d6040e6c14da3e21e8a2bfea92a1876fb110f38b86bf073c0b609f8caefa4711d784e93aa933e22650f043fae5130ef9a231e7170d8e0e7816b13f195df48e23af09d2755267c44ca1e087f5ca261df34463ce2e1b1c1cf02d627e32bbe91c475e13a4eaa4cf889943c10feb944c3be688c79c5c363839e05ac4fc6577d2388ebc2749d5499f113287821fd7289877cd118f38b86c7073c0b582b9f07a71d745a3cb600d12bd88478eaf03d41100efb4632e7170d8f0e7816af573e0f4e3ae8b4796c01a257b108f1d5e07a82201df68c65ce2e1b1e1cf02d5e3a8e77494c33ebaaa4c96ca758700ba66d37603d3beebccc9c5c363d39e05abb012f473f6eca5a0d16590146a73e3f4786b11c7777df1d9a38b86c7b73c0b575025e8e7edd94b41a2cb2028d4e7c7e8f0d6238eeefbe3b347170d8f6e7816aea04bd1cfdbb2968345964051a9cf8fd1e1ac471dddf7c7668e2e1b1edcf02d5d4097a39fb7652d068b2c80a3539f1fa3c3588e3bbbef8ecd1c5c363db9e05aba812f473f6eca5a0d16590146a73e3f4786b11c7777df1d9a38b86c7b73c0b575025e8e7edd94b41a2cb2028d4e7c7e8f0d6238eeefbe3b347170d8f6e7816aea04bd1cfdbb2968345964051a9cf8fd1e1ac471dddf7c7668e2e1b1edcf02d5d4023b5f8643b8f8942f946cb4b957dcbbe04d097b8ef90711d5c363dbae05aba7f476bf0c8771f1285f28d96972afb977c09a12f71df20e23ab86c7b75c0b574fe1aea3a3dc4a0a7c3b1e155264c5556f2bf84bae0be43687670d8f6ec816ae9fb35d4747b89414f8763c2aa4c98aaade57f0975c17c86d0ece1b1edd902d5d3f66ba8e8f712829f0ec785549931555bcafe12eb82f90da1d9c363dbb205aba7ec63642a9afb67c0d55bd0d12a5908df90a8683302f21ce7b486c7b7650b574fd752daade2cd3204628467ca4ca86fe71bfd12c202e43b736a0d8f6ecb16ae9fad31c7b47270c68b7cd595bc91473df632a667e002c8788ad51b1edd972d5d3f59638f68e4e18d16f9ab2b79228e7bec654ccfc00590f115aa363dbb2e5aba7eb253312a76997cb0ab231d1a3d135600c545e1dc0821e3cf556c7b765db574fd633274ad9a095be40e13005c721d0a29853806140d43c942abd8f6ecbc6ae9fac564e95b3412b7c81c2600b8e43a14530a700c281a87928557b1edd978d5d3f58a55e50f14fbd212f018c799c06a86ce0f8c5aac320f26aeb063dbb2f2aba7eb1337dc76d6ce06a897fe555b78cb6bc419c4f7b4611e4f0161c7b765e6574fd6256fb8edad9c0d512ffcaab6f196d7883389ef68c23c9e02c38f6ecbccae9fac4a6b8434080e7d2517c61b95db240d3861c0212d81793da9881edd979a5d3f5893631ac0bcf35ccce758fd53ae3e7898be2c84b6fff27cf7113dbb2f35ba7eb1255247da26bd1c1c867ec0cf54734f5977054bc9fce4fb92237b765e6c74fd624930a20cfa509abbc4ca47c6a0dcfcdae8b6d9eff6c9f8c847f6ecbcd9e9fac491614419f4a1357789948f8d41b9f9b5d16db3dfed93f1908fedd979b3d3f589224e9a8c9618cd71caf5e5427b6a51939d87aa1bd827e4c520dbb2f368a7eb1243294771d907fd664db890aceecb014f35bb9693ad4fcb2e42b765e6d24fd62485528ee3b20ffacc9b712159dd96029e6b772d275a9f965c856ecbcda49fac490a31302010f6581beeaf08dbb3226364d19a9caab23f2e5d0bdd979b4a3f58921362604021ecb037dd5e11b76644c6c9a3353955647e5cba17bb2f36947eb1242650d2d8f0afc2f27288e996c47febbb4116b506c5fcbb1830765e6d29fd62484b2db80a8e35e8679cde995580f6359e7cd9ac6988f977d461ecbcda54fac490955b70151c6bd0cf39bd32ab01ec6b3cf9b358d311f2efa8c3d979b4a9f589212a42f282e5ae04212b472b7dfbcf34a1ee12f40220e5e0f588b2f36954eb12425311f75e78326ac50e5b1d23ef94c76bd6d22a603ecbc38f1265e6d2aad62484a523eebcf064d58a1cb63a47df298ed7ada454c07d97871e24cbcda555ac49094a47dd79e0c9ab14396c748fbe531daf5b48a980fb2f0e3c49979b4aab589212941bcd4c6e69b8ab2aa5af47749c9986b13d955df35e1e1c942f369557b1242527379a98dcd37156554b5e8ee939330d627b2abbe6bc3c39285e6d2aaf62484a4e6f3531b9a6e2acaa96bd1dd272661ac4f65577cd78787250bcda555ec490949c6a7cbc202427dc0cfa40639cdb2a5d8498ed4b97f0f288a279b4aabe89212937610bd0ed1eb23ad1c146ef31acb2e303de1cf32ce1e6b545f369557e1242526d4e29fa8713c6f85b4f54065b4fc3ee02687c4256c3cf0e8ce6d2aafd2484a4d928664dbafdf0736e6b6e34ae95e603ff7d3ae0aa879fc11acda555fb490949b150cc9b75fbe0e6dcd6dc695d2bcc07fefa75c1550f3f82359b4aabf6921293622dab8f98ce2450717a7efab24df637f8a12ddea71e80a86c369557ee242526c35b571f319c48a0e2f4fdf5649bec6ff1425bbd4e3d0150d86d2aafdc484a4d8642c097100ef3c47db6c212c12e3707dd30f9d6997a0445b1da555fb990949b0b119386ccf44a0bb33a4a4d7a52cc37b50e36092ff40a2f64b4aabf742129361523270d99e894176674949af4a5986f6a1c6c125fe8145ec969557ee842526c2a464e1b33d1282ecce92935e94b30ded438d824bfd028bd92d2aafdd084a4d85418ae8f1478b2e0519f1893ca8cbfe5a31df2a57ca0531f26a555fba20949b0a7315d1e28f165c0a33e312795197fcb463be54af940a63e4d4aabf7441293614e62ba3c51e2cb81467c624f2a32ff968c77ca95f2814c7c9a9557ee882526c29c5186d1509bf98544c58ac64c5c5d55139bd787e2029a9d362aafdd114a4d85372f1ffb4e0e558d4157dbb490af18d221e3f16bc10536de6d555fba23949b0a6d5e3ff69c1cab1a82afb769215e31a443c7e2d7820a6dbcdaaabf7447293614da489245e50fb8b7bd2c34fa3ab2c170823c080b0114dd1db6557ee88f526c29b31d36e476f5d3f23225301c6d5be108ff245271ff29bbdf6daafdd11fa4d853653a6dc8edeba7e4644a6038dab7c211fe48a4e3fe5377bedb55fba23f49b0a6ca00edea88adb24b80618699ad65e24bf73d8c23f9a6f121b7abf7447f93614d9301dbd5115b649700c30d335acbc497ee7b1847f34de2436f57ee88ff26c29b2603b7aa22b6c92e01861a66b597892fdcf6308fe69bc486deafdd11fe4d85364c076f54456d925c030c34cd6b2f125fb9ec611fcd37890dbd5fba23fc9b0a6c980edea88adb24b80618699ad65e24bf73d8c23f9a6f121b7abf7447f93614d9301dbd5115b649700c30d335acbc497ee7b1847f34de2436f57ee88ff26c29b2603b7aa22b6c92e01861a66b597892fdcf6308fe69bc486deafdd11fe4d85364c003079d03af8842e89012feaae7842399725458d078927fd6fba23fcab0a6c97f060f3a075f1085d12025fd55cf084732e4a8b1a0f124ffadf7447f95614d92fe0c1e740ebe210ba2404bfaab9e108e65c9516341e249ff5bee88ff2ac29b25fc183ce81d7c4217448097f5573c211ccb92a2c683c493feb7dd11fe5585364bf83079d03af8842e89012feaae7842399725458d078927fd6fba23fcab0a6c97f060f3a075f1085d12025fd55cf084732e4a8b1a0f124ffadf7447f95614d92fe04df99998b8733cdbd185d2b1d7670e574158901b24a199bfe88ff2ad29b25fbf28058bde4748fc6f6fd1cd5ba52c44a92ef37c334944d780d11fe55b5364bf7d500b17bc8e91f8dedfa39ab74a5889525de6f8669289af01a23fcab6a6c97efa2c288825f38674758c0d5d668b0f3a9f68104cca25150204447f956e4d92fdf35851104be70ce8eb181abacd161e753ed02099944a2a040888ff2adc9b25fbe63cb47944a47c548dfcfb9d92229b12784c838f259455ac1211fe55ba364bf7cb057b4b361f5b2bd3c6bd631c3b944ceb45497a4828acfc2523fcab756c97ef950af6966c3eb657a78d7ac638772899d68a92f4905159f84a47f956ead92fdf2a15ed2cd87d6caf4f1af58c70ee5133ad1525e920a2b3f0948ff2add5b25fbe542bda59b0fad95e9e35eb18e1dca2675a2a4bd2414567e1291fe55bab64bf7ca857b4b361f5b2bd3c6bd631c3b944ceb45497a4828acfc2523fcab756c97ef9503b7bbf70c1c7fd30a4728b7f68e7c5635571a50215a128a57f956eae92fdf29f0309d78e59f27d1915ab3ef6c82db2c15725a6012b43f54bff2add5e25fbe53d0613af1cb3e4fa322b567ded905b6582ae4b4c025687ea97fe55babc4bf7ca7a0c275e3967c9f46456acfbdb20b6cb055c969804ad0fd52ffcab757897ef94f4184ebc72cf93e8c8ad59f7b6416d960ab92d30095a1faa5ff956eaf12fdf29e8309d78e59f27d1915ab3ef6c82db2c15725a6012b43f54bff2add5e25fbe53d0613af1cb3e4fa322b567ded905b6582ae4b4c025687ea97fe55babc4bf7ca7a04e883c435301c8fd3795e5aa01cad85075abdc47d0fef700cab7578a7ef94f3f2922d1337c6614b23bf1f34bf9f3d89b979a148ca1ff9202956eaf15fdf29e7d5245a266f8cc296477e3e697f3e7b1372f34291943ff24052add5e2bfbe53cfa309d9d7ac7fad580bc8df527de2d8a690aaaae2f87ffec0b55babc58f7ca79f3613b3af58ff5ab01791bea4fbc5b14d215555c5f0fffd816ab7578b1ef94f3e64e88ce97f64dd8babefdfc976f14519ed6ed14bb2001542e56eaf164df29e7cb2923f5dcc2fe342d4ac22126d486cb385a1c857340044c5dadd5e2cabe53cf955247ebb985fc685a9584424da90d9670b4390ae6800898bb5babc5957ca79f2a30a2301fe25b536cf7ceac93487954dc14b471ca0012d577b7578b2bf94f3e536144603fc4b6a6d9ef9d592690f2a9b82968e3940025aaef6eaf1657f29e7ca64e9b192c5fcfd06bac00da4518437b6aff142325004cf9dfdd5e2cb0e53cf94b29488b059602238f24c7dc8226e51ed0aa6aa247009b97c0babc5962ca79f2955291160b2c04471e498fb9044dca3da154d5448e01372f817578b2c594f3e52a313484c32e6b10f45fe59a0091f2a33d55ece51902700303eaf1658c29e7ca53626909865cd621e8bfcb340123e5467aabd9ca3204e00607d5e2cb1853cf94a650e46bb9900ec6894c5c8ffa3e28b4f003f5f06109c1b010abc59631a79f294b2ddb301ff6800fca657f47ec72af91dab42e3cbf13850422578b2c644f3e52955bb6603fed001f94cafe8fd8e55f23b5685c797e270a0844af1658c89e7ca52a437f192cb062c1e162c347a9c11c6f657cfb4ef94e15b48a5e2cb1923cf94a5313108b063728067a924cb74b789706c5a638f9ef9c2d0d15bc59632579f294a52621160c6e500cf524996e96f12e0d8b4c71f3df385a1a2b78b2c64af3e5294a4c422c18dca019ea4932dd2de25c1b1698e3e7be70b43456f1658c95e7ca52942496b0de8fa2b68c5f2be253bb165e27de0a2b79e16a0caee2cb192ccf94a527492d61bd1f456d18be57c4a7762cbc4fbc1456f3c2d4195dc59632599f294a4e1e6d1c2714ed5ce94975b146e2b7a09a246b09e485a9d6bc8b2c64b43e52949b3cda384e29dab9d292eb628dc56f413448d613c90b53ad791658c9687ca5293605c6c9492a17f65cf29ced13813caa633dee838f16a8fef32cb192d1f94a526b0b8d9292542fecb9e539da27027954c67bdd071e2d51fde6596325a3f294a4d6171b2524a85fd973ca73b44e04f2a98cf7ba0e3c5aa3fbccb2c64b47e52949ac2e364a4950bfb2e794e7689c09e55319ef741c78b547f799658c968fca5293585c6c9492a17f65cf29ced13813caa633dee838f16a8fef32cb192d1f94a526b044eb81d219614e562063ca681df374626a12cddfd521826696325a40294a4d5f15e95c5109251f640d8dbcc8324510bf8067f7bcaa44a8ce2c64b48152949abd2bd2b8a2124a3ec81b1b7990648a217f00cfef795489519c58c96902a529357a57a5714424947d903636f320c91442fe019fdef2a912a338b192d2054a526af43b5d3b351f8b7dd839340e398886adf6af8219e25226ea726325a40b94a4d5e702cccf1715797e683f2e446b076b83e80b468fc1a44f78e5c64b48182949abcd05999e2e2af2fcd07e5c88d60ed707d0168d1f83489ef1cb8c9690305293579a0b333c5c55e5f9a0fcb911ac1dae0fa02d1a3f06913de397192d2060a526af34166678b8abcbf341f97223583b5c1f405a347e0d227bc72e325a40c14a4d5e682cccf1715797e683f2e446b076b83e80b468fc1a44f78e5c64b48182949abcd05999e2e2af2fcd07e5c88d60ed707d0168d1f83489ef1cb8c9690305293579a03f461e7234c21cc7985742b9d13f21fd7de64c6613dfdd7292d2060b526af33f0a9e95913fe6bc46fd74ad6b98dc6bf5a80ef4c927c15ee625a40c17a4d5e67d153d2b227fcd788dfae95ad731b8d7eb501de9924f82bdcc4b48182f49abccfa2a7a5644ff9af11bf5d2b5ae6371afd6a03bd3249f057b989690305e935799f454f4ac89ff35e237eba56b5cc6e35fad4077a6493e0af7312d2060bd26af33e835fbb1c0d4ce4727a410feb18424e7552d31a88f7c1792635a40c17b4d5e67cf6bf76381a99c8e4f4821fd630849ceaa5a63511ef82f24c6b48182f69abccf9e64011fb0299b9f565d0a22be06f1c54f6108fe3af05fed8e690305ee35799f3b5414980d2999c16486da6d740441b2996e545872e0c17f1dd2060bdd6af33e75343b88c729960580da7b02dffee18d2d88eb0ce2c184a23ca40c17bbd5e67ce96877118e532c0b01b4f605bffdc31a5b11d619c58309447948182f77abccf9d25d007bc97cba98bb36b23377f1e45cb0cfee8f8806142cf390305ef05799f3a34613503fcfd7b42e3a2a8ee7da26e15c4c1f7b0d0c29fde82060bde1af33e7451838f92c7611eb14411b45c7aaabeab34481521718559fd140c17bc45e67ce893071f258ec23d62882368b8f5557d5668902a42e30ab3fa28182f788bccf9d1260e3e4b1d847ac51046d171eaaafaacd1205485c61567f450305ef11799f3a244dda221086f1db59d5a056354bbd7d94d04cecb5c2aea28b060bde23f33e744727c69ccde446396b7806d4628dd923244cdc3568855ee9170c17bc48e67ce88d4f8d399bc88c72d6f00da8c51bb2464899b86ad10abdd22e182f7891ccf9d11a2b2ccbe4677b6865ace179822dc2b48bdfb3319f157d485d305ef12499f3a233565997c8cef6d0cb59c2f3045b856917bf66633e2afa90ba60bde24933e7446638c5883e7450244e804c0e00ad68fa2a2b0f227955f6c575c17bc49367ce88cb718b107ce8a0489d00981c015ad1f454561e44f2abed8aeb82f78926cf9d11966f2879a6a7a313f1cdf65ffaac0210a3587ee5e257dcb9d805ef124e9f3a232b6a634bfa25a8aa9b68b2e7ed4e6249415d4027c1afbb17b10bde249e3e74465560d8f0a121b3d7ee9e2bf7d29322ba7d66c2ab805f77d36317bc493d7ce88ca94dc439ef19ca3295091e179d1ca39cf579c7b2fdbef14ac72f78927bf9d11951279acc8b09f6e7e1df0257322fa561e59fd1c1f87de4398f5ef124f8f3a232a14f35991613edcfc3be04ae645f4ac3cb3fa383f0fbc8731ebde249f1e74465422a7d8ad8fe3e223f48cf84c0b4f3af912b8963def7928a3e7bc493e4ce88ca8354fb15b1fc7c447e919f098169e75f225712c7bdef25147cf78927c99d11950636088410cf5b0bb4f0043afaca2ce63f5a67eb78de4bccfaef124f943a232a0b6c1108219eb61769e00875f59459cc7eb4cfd6f1bc9799f5de249f2874465416643468f013ceb18b8cd713e31f11c0f815e209e07930d7ecbc493e51e88ca82b547b2a8cfdffe5cee6744fbe3481a9ead8066fbdf26353da78927ca4d11950553508adc6d2624e5599aec7745f617bd05c4f3b78e4c84bb5f124f94aa232a0a96a115b8da4c49cab335d8ee8bec2f7a0b89e76f1c990976be249f2954465415260350fc81febbc0e338145c973e4173c1d7f49e09322d2d8c493e52b88ca82a34c7c783d1639fad433c8b38ade265672e740efbe264749b28927ca5811950545250b492702d6786034578f0db2aad4e07ac43b794c903766124f94b1232a0a894a16924e05acf0c068af1e1b6555a9c0f58876f299206ecc249f296246541512203f7d48e1bc64389e24642ec1097b7c975349e232428199493e52c58ca82a23407efa91c378c8713c48c85d8212f6f92ea693c464850332927ca58b195054460d104dd05d54139a4557b8b2fa8415ed098f8385c90baa6624f94b1732a0a88b1a209ba0baa827348aaf7165f5082bda131f070b921754cc49f2962e654151163441374175504e69155ee2cbea1057b4263e0e17242ea99893e52c5cca82a22c68826e82eaa09cd22abdc597d420af684c7c1c2e485d533127ca58b9950544585d1735b2aba3bc5c2241b3279e9f86cb453a945990bc4a634f94b1742a0a88af4640c4122da9fb7011498e47339d359136b784b0217a38c79f2962e95415115d1893e0d131b67997ef5944865d98931d19b1655d42f615903e52c5d3a82a22b93127c1a2636cf32fdeb2890cbb31263a3362caba85ec2b207ca58ba750544572624f8344c6d9e65fbd65121976624c7466c595750bd85640f94b174ea0a88ae450b15f3664164f7747904c2ae322c0e379cd86e717b25082f2962e9e415115c72d7517199e8f21a65be6c04dbca3a9c19fdd69cb2f664506e52c5d3d82a22b8d5aea2e333d1e434cb7cd809b794753833fbad3965ecc8a0dca58ba7b0544571a41e6b513509f09513c61292ee8eccf012bb80329bd9ab81c94b174f70a88ae330fdfc2d377a0955a45887a55c837c5fd03b262507b37143a2962e9ef15115c651fbf85a6ef412ab48b10f4ab906f8bfa0764c4a0f66e287452c5d3de2a22b8ca3f7f0b4dde8255691621e95720df17f40ec98941ecdc50e8a58ba7bc544571940b106f4893672d89f909faa6381c57e2c9d56e80d9ba45d24b174f79a88ae3271620de9126ce5b13f213f54c7038afc593aadd01b3748ba4962e9ef35115c64e2c41bd224d9cb627e427ea98e0715f8b2755ba0366e917492c5d3de6a22b8c9c58837a449b396c4fc84fd531c0e2bf164eab7406cdd22e9258ba7bcd445719383d194d360cd55b575d65d25b7823a6274999440a9ba60125b174f79b88ae326f0644f318f00d39668791ccaee6a574493f74e412374da64c62e9ef38115c64dd0c89e631e01a72cd0f23995dcd4ae8927ee9c8246e9b4c98c5d3de7022b8c9ba1913cc63c034e59a1e4732bb9a95d124fdd39048dd3699318ba7bce045719374322798c78069cb343c8e6577352ba249fba72091ba6d3263174f79c08ae326e8644f318f00d39668791ccaee6a574493f74e412374da64c62e9ef38115c64dd054b0bbcad809af88beffbdd4cb0cb1229adede43e9b66d8d5d3de7032b8c9b9f3573d0428675e1c94ac5a3a18c778a3fe2001884d36e7f1bba7bce075719373d6ae7a0850cebc392958b474318ef147fc4003109a6dcfe3774f79c0eae326e7a61e199b6f03a09dcf7dcb67e283c50fa3442be104dbba06fe9ef381e5c64dcf34fd58c1ab6d69671bc7f94f446d6c9ef14c7d81d9b78e4e0d3de703db8c9b9e52bbd70e2440faf9b45c551e0840bbbd8d5d20c3836f36dc2a7bce07c719373c9577ae1c4881f5f368b8aa3c1081777b1aba418706de6db854f79c0f8e326e7923b081c35e6a14124e3db6f7a068d175e038a8cdddbcf5b0b9ef381f2c64dcf2302229118a3a50501947d06ec037856b6b35775b8b7a05a183de703e68c9b9e4504452231474a0a0328fa0dd806f0ad6d66aeeb716f40b4307bce07cd19373c8a088a44628e94140651f41bb00de15adacd5dd6e2de816860f79c0f9a326e7914111488c51d28280ca3e837601bc2b5b59abbadc5bd02d0c1ef381f3464dcf2282229118a3a50501947d06ec037856b6b35775b8b7a05a183de703e68c9b9e4504452231474a0a0328fa0dd806f0ad6d66aeeb716f40b4307bce07cd19373c8a014b69ed5bfa3c31cec07e2f8d473d5a7821fca2ae8182a1079c0f9a426e7913f296d3dab7f478639d80fc5f1a8e7ab4f043f9455d0305420f381f3484dcf227e52da7b56fe8f0c73b01f8be351cf569e087f28aba060a841e703e6909b9e44fc31c74f5ad3809b9f2d053fbe99fcd536bd40ad5440c2f484ce07cd22373c89f7638e9eb5a701373e5a0a7f7d33f9aa6d7a815aa88185e9099c0f9a446e7913ee532f96182464f13480db26f25e517cd5a145114e030d7614381f3489dcf227db327184dd1f2c6520ce7c75dcb30121a5eecc7e99061c9029703e6914b9e44fb564e309ba3e58ca419cf8ebb96602434bdd98fd320c392052e07cd22973c89f6a55d86c215314173b06b7ff6ac262ae92677456611873e4a6c0f9a453e7913ed337c330ef7c8ab12dda3626cd7b23851f7b2b08bf30e96d4e81f348a8cf227da56f8661def915625bb46c4d9af6470a3ef656117e61d2da9d03e691519e44fb4a6b1f1c6ac88d476f359ec32de2ec3c7898ee7ef9c3a7593b07cd22a43c89f69362509182677d11963803ae53bc36a0ebde1f59f0875056770f9a45497913ed2550b37bb1a55ca5e43ccd849f6ecb69d268810fde0ea250ef1f348a93f227da492d795010211bce8046613136d3f4fb9f7d447bb91d4645df3e691528e44fb4915af2a02042379d008cc2626da7e9f73efa88f7723a8c8bbe7cd22a51c89f692241f798ed5ad1bcb8e64aecd346321678a1544ae1751abb7df9a454a4913ed24310018a878c05fc29995c019e82c254ebeeeaf1bfea371afcf348a94a227da4852003150f180bf85332b8033d0584a9d7ddd5e37fd46e35f9e691529444fb490a40062a1e3017f0a66570067a0b0953afbbabc6ffa8dc6bf3cd22a52889f692140c1eace93692640497a634ec0c70cf5a2399e9fc51ba7be89a454a5213ed2427183d59d26d24c8092f4c69d818e19eb44733d3f8a374f7d1348a94a427da484e307ab3a4da4990125e98d3b031c33d688e67a7f146e9efa2691529484fb4909c60f56749b4932024bd31a76063867ad11ccf4fe28dd3df44d22a52909f6921384dfd27403f88c301472976b8bd6b1d9ce5e0fbc21ba9628aa454a5223ed2426f280ca72d557408ba5b19156971346334780453813754691648a94a457da484dd50194e5aaae81174b6322ad2e268c668f008a7026ea8d22c9152948afb4909ba2c44f5622c32a5a1392a7d9dbb2fb4cc8c53aa01dd53485a22a52916f69213735889eac458654b427254fb3b765f699918a75403baa690b4454a522ded2426e63d262e35872d193cb1701e6ee31cfb2cdd910404754ec5698a94a45cda484dcb065eb517e4bcb5312fa664d5bc981e5467646405ea9f2ed4152948bab4909b950cbd6a2fc9796a625f4cc9ab79303ca8cec8c80bd53e5da82a5291756921372a197ad45f92f2d4c4be999356f26079519d919017aa7cbb5054a522ead2426e5432f5a8bf25e5a9897d3326ade4c0f2a33b23202f54f976a0a94a45d5a484dca865eb517e4bcb5312fa664d5bc981e5467646405ea9f2ed4152948bab4909b95057e8fba96df928ddc192c2af8961f28798cedcba53e77e83a52917579213729f3be44fffb254d4734febad5709220d09dde01571a7d0a1084a522eb02426e53d03daf8ac3b0c2b9e6c9d82a608a2420e680286e04fa2e61194a45d61484dca7907b5f1587618573cd93b054c1144841cd0050dc09f45cc232948bac2909b94f20f6be2b0ec30ae79b2760a9822890839a00a1b813e8b984652917585213729e41ed7c561d8615cf364ec153045121073401437027d17308ca522eb0a426e53c83daf8ac3b0c2b9e6c9d82a608a2420e680286e04fa2e61194a45d61484dca79007716e3437e7f68560767cb90aa669c7ac933806f45e6633948bac2a09b94f1f0ee2dc686fcfed0ac0ecf972154cd38f5926700de8bccc672917585413729e3e1dc5b8d0df9fda1581d9f2e42a99a71eb24ce01bd17998ce522eb0a826e53c7c3b8b71a1bf3fb42b03b3e5c855334e3d6499c037a2f3319ca45d61504dca78f803293bf054e1eb0dd42df388a0c4c4757575dc6c45e8073a48bac2a19b94f1ef065277e0a9c3d61ba85be711418988eaeaebb8d88bd00e74917585433729e3de0ca4efc15387ac3750b7ce22831311d5d5d771b117a01ce922eb0a866e53c7bc1949df82a70f586ea16f9c45062623ababaee3622f4039d245d6150cdca78f783293bf054e1eb0dd42df388a0c4c4757575dc6c45e8073a48bac2a19b94f1ef065277e0a9c3d61ba85be711418988eaeaebb8d88bd00e74917585433729e3de0566154c20edd462cd8430a20278f455809b9770e7a0372932eb0a867e53c7bbf38d50230f41d0f117d4c3c38457cb2aabfb54a19f40889275d6150d0ca78f77d71aa0461e83a1e22fa9878708af965557f6a9433e811124ebac2a1a194f1eefa6f666170a6d6befdc1f718d90c50f2a5ab178464d023c89e7585434429e3ddf36adf1b8e241000b350b459aa0f000d46027164c6a049353deb0a868953c7bbe561d08fc91e82841e6e2edb4c145e4286b125258a40940e7cd6150d13a78f77c94fb3783f13678af4a923de901f1aad080e8ca7118129c0faac2a1a284f1eef912b79492afd3198a11f0de5183493820ac95baa20025525f6585434519e3ddf2156f29255fa6331423e1bca306927041592b7544004aa4becb0a868a33c7bbe4239f77d58cb28e53c48fdbc58c8ac3025d1b1047d09563bda6150d14778f77c830001535e6cb44d305ec1a0a987b688464fa464f712ae1bb5c2a1a28ff1eef9050002a6bcd9689a60bd8341530f6d108c9f48c9ee255c376b8543451fe3ddf20a00054d79b2d134c17b0682a61eda21193e9193dc4ab86ed70a868a3fc7bbe414000a9af365a26982f60d054c3db442327d2327b89570ddae150d147f8f77c828001535e6cb44d305ec1a0a987b688464fa464f712ae1bb5c2a1a28ff1eef9050002a6bcd9689a60bd8341530f6d108c9f48c9ee255c376b8543451fe3ddf20a00054d79b2d134c17b0682a61eda21193e9193dc4ab86ed70a868a3fc7bbe414000a9af365a26982f60d054c3db442327d2327b89570ddae150d147f8f77c828001535e6cb44d305ec1a0a987b688464fa464f712ae1bb5c2a1a28ff1eef9050002a6bcd9689a60bd8341530f6d108c9f48c9ee255c376b8543451fe3ddf20a00054d79b2d134c17b0682a61eda21193e9193dc4ab86ed70a868a3fc7bbe414000a9af365a26982f60d054c3db442327d2327b89570ddae150d147f8f77c828001535e6cb44d305ec1a0a987b688464fa464f712ae1bb5c2a1a28ff1eef9050002a6bcd9689a60bd8341530f6d108c9f48c9ee255c376b8543451fe3ddf20a00054d79b2d134c17b0682a61eda21193e9193dc4ab86ed70a868a3fc7bbe41400035c18f06fcfab2189d1aebd33a814fccdebde5540ddc8551d147f8f87c827fff6b831e0df9f564313a35d7a675029f99bd7bcaa81bb90aa3a28ff1f0f904fffe631894c8ca4d4b1a4131d744e063672e2739f14d3773b948451fe3e2f209fffb5243823e6afd18ec4f29d681b724f656fab63e976ee916918a3fc7c6e413fff530995d29ac5cb4906b19d4fb64a814a8a1aed92bddd3d124147f8f8ec827ffe96132ba5358b96920d633a9f6c9502951435db257bba7a24828ff1f1d904fffd24e77cd5387d554f9792d7be588fe7a9d32fdc0ac7750e89151fe3e3c209fffa32901f353e60d2caabf211fc3085b1d35123ddd55eea37523a3fc7c79413fff455203e6a7cc1a59557e423f8610b63a6a247bbaabdd46ea4747f8f8f2827ffe8a301a25fc6e973562c94aa70417ca9ccef539d154ba8f788f8ff1f1e604fffd1360344bf8dd2e6ac592954e082f95399dea73a2a9751ef11f1fe3e3cc09fffa264c7af09e90bf5842f1f0c40855889b368129a14fea3f863f3fc7c79913fff44b250839e9f7e1333db0a7b008a16f5e67ae959e9cd480b07f7f8f8f3327ffe8954a1073d3efc2667b614f601142debccf5d2b3d39a90160feff1f1e664fffd12a20334054b5e74fae8f64e81a7c1ba1996698d670520465fefe3e3ccd9fffa253406680a96bce9f5d1ec9d034f8374332cd31ace0a408cbfdfc7c799b3fff44a60cdf59ffadffc1720a59c861e6ccae6046a5b5be48133bfcf8f8f3377ffe894b19beb3ff5bff82e414b390c3cd995cc08d4b6b7c902677f9f1f1e66efffd1296337d67feb7ff05c8296721879b32b9811a96d6f9204ceff3e3e3ccddfffa252c66facffd6ffe0b9052ce430f36657302352dadf24099dfe7c7c799bbfff44a585a07f8a7b65e99d87262ae1663290dff169db7e1813563d08f8f3378ffe894af402249fc431fb668b18b8424bcb043f8d97dcbc0026c6ba21f1e66f2ffd1295d0c56eca55ca1ef892fdd30416fbeafec5f3df37d04da7b453e3ccde6ffa252b918add94ab943df125fba6082df7d5fd8be7be6fa09b4f68a7c799bcdff44a572315bb2957287be24bf74c105befabfb17cf7cdf41369ed14f8f3379bfe894ae462b7652ae50f7c497ee9820b7df57f62f9ef9be826d3da29f1e66f37fd1295c851812302a0817b4aca992c0ef24926c0a02193cd4da95854e3ccde70fa252b8f2f149eb21765794d61f88015daf0757bec8583979b5454aac799bce2f44a571d5e293d642ecaf29ac3f1002bb5e0eaf7d90b072f36a8a9558f3379c5e894ae3a4864d37533f867ed54a8284f621ffdea5e586a5b6d52f6ac1e66f38cd1295c731cdbff973e53529276167896ba9e23cf68f330b3daa791593ccde71aa252b8e539b7ff2e7ca6a524ec2cf12d753c479ed1e66167b54f22b2799bce3544a571ca736ffe5cf94d4a49d859e25aea788f3da3ccc2cf6a9e4564f3379c6a894ae39472f25566c8fd174b7d79ecadcb4f4675f3dbe19bd53e2ecae66f38d61295c72771f7037a685cb14ec7ba01538cfcb4e693fa1f34aa7e0196ccde71ad252b8e4d70005fa1a71be5555c3a2a9f105791c7d4369a6654fda72e99bce35b4a571c996c1317f0249a4d62853a7d36170d4b8a54af90c9a9fcf25e3379c6b794ae39316438888d1f971d7cd73b22642478bf0f55a17d9053fb88bd66f38d70295c7261548369c71590bdb17b3c6cc03f4fa6195785571da7f8b57bcde71ae152b8e4c135192c3b0183fe1ac33f017874fd742d5b4d0a384ff30ef89bce35c3a571c9816a3258760307fc35867e02f0e9fae85ab69a14709fe61df1379c6b874ae3930260770998dc727b22d9c22dd9ca53f8b0197684de3fcddfe36f38d70f95c726034d006bde8f4778fd804a83ab8b06195adf2f65b97f9d63c7de71ae202b8e4c0526133069f4f174b2cd5b2f4f0c6a5ab06aa1276fff3c6b90bce35c41571c98094c2660d3e9e2e9659ab65e9e18d4b560d5424edffe78d72179c6b882ae393012245f1a54aa2855830232e534280792bc56c6f9bcfcf35243f38d71065c72602348be34a95450ab060465ca68500f2578ad8df379f9e6a487e71ae20cb8e4c0461d8ec1ff7f03d8c3d591bcc8967c72ec075e42f0f3ceed10ce35c41a71c9808b3b1d83fefe07b187ab2379912cf8e5d80ebc85e1e79dda219c6b8834e3930116024d60aad271e5c7230d1b1a504ff3aac9bb67c0cf3d584438d7106ac726022b049ac155a4e3cb8e461a3634a09fe7559376cf819e7ab08871ae20d58e4c0456093582ab49c7971c8c346c69413fceab26ed9f033cf56110e35c41ab1c9808ac126b0556938f2e391868d8d2827f9d564ddb3e0679eac221c6b883563930115824d60aad271e5c7230d1b1a504ff3aac9bb67c0cf3d584438d7106ac726022b049ac155a4e3cb8e461a3634a09fe7559376cf819e7ab08871ae20d58e4c045601f6a836172dbf480900cee8c0a5b12ad1b1c4c30cf57b50f35c41ab2c9808abf3ed506c2e5b7e9012019dd1814b6255a363898619eaf6a1e6b8835659301157e09bc6632a1d254ba0cf9e2281fca72af18b38cc03d60783dd7106acc26022afb1378cc6543a4a97419f3c4503f94e55e316719807ac0f07bae20d5984c0455f626f198ca874952e833e788a07f29cabc62ce3300f581e0f75c41ab309808abec4de331950e92a5d067cf1140fe539578c59c6601eb03c1eeb8835661301157d827d8bbd6f387ce589c644a79f30552ec377b2800d60927de7106acc36022afaf4fb177ade70f9cb138c894f3e60aa5d86ef65001ac124fbce20d5986c0455f5e2b754808a481bc1a3e5751dfc27373ab8a2efc005826437ac41ab30e808abebb56ea9011490378347caea3bf84e6e757145df800b04c86f58835661d01157d7639e778cf68697320c6236f77002bf6a8d4fe4bfe609ab1ec106acc3b022afaeb73cef19ed0d2e6418c46deee0057ed51a9fc97fcc13563d820d598760455f5d673b03bea78084f3ae553e5d3f70e029e003b8bf6826c6bb141ab30ed08abebab7372d081c673212d976df39fe47a2d36acb973ea04da7b63835661db1157d75572f7f9b06348c512fba20f37bf52826805b543d109b69ac806acc3b722afaea972024c0d9cf40cddc40a466775032ccab7ace39f136ed9910d59876f455f5d517016f0c8104a9c7354dab4c6e06481901b9c233b26df57231ab30edf8abebaa16c403a3cf6f7bb9e767b9185b7272b1ae37aa2734dc0524735661dc0157d75416492cd26c451f9f4b9bd4b0364ac7e307337a0e39b82488f6acc3b812afaea815537f2fa5f0676a14040bdfebfb7245b92b19dc43706351fd598770355f5d50136823ea1946f6ffa4d47a3f575cc70b1d1a597856e0e0e40ab30ee07abebaa016d047d4328dedff49a8f47eaeb98e163a34b2f0adc1c1c815661dc0f57d75402661b5333282042a101e4b7cdcd8feac1f2d8ba12b839dd03acc3b81fafaea8035848ff1326a307f9d08f9793917dfd7e91f3d02270755e08598770405f5d50053ca456d323a892ab6de5571f195a22f7d029fc41e0ec6011b30ee081bebaa009055b06531db3a80ea890d63629126dea4c965480c1da6424661dc1047d7540110ab60ca63b67501d5121ac6c5224dbd4992ca90183b4c848cc3b8208faea8022156c194c76cea03aa24358d8a449b7a9325952030769909198770411f5d500442ad83298ed9d40754486b1b148936f5264b2a4060ed3212330ee0823ebaa008855b06531db3a80ea890d63629126dea4c965480c1da6424661dc1047d7540110377323108cd7848cdee0eebd18abe5443f0cec153b4e288dc3b82090aea8021f6ee6462119af0919bdc1dd7a3157ca887e19d82a769c511b877041215d50043e69dee4ef09c094eb4849e2ec590dbd0ba8760c51ed3a46380ee08243baa0087b5fd0228ae9e3ac8e5d59edd0a879a211fd2e74a0da7630711dc10488754010f54bb29dc2aa29dbd4877a039947516c1ea69f453eb4ee04e33b820911ea8021e9237794322ab63a60dbba2f2a85010037f980e67a69ddadc777041224d50043d146ef2864556c74c1b7745e550a02006ff301ccf4d3bb5b8eee082449aa0087a219f0a975813b6c3b3baee4a20a6228da9245f5e6a7785b1edc10489454010f4333e152eb0276d876775dc94414c451b5248bebcd4ef0b63db8209128a8021e8667c2a5d604edb0eceebb92882988a36a4917d79a9de16c7b7041225150043d0c5b97a458e03de491aa3d4d08496f6ecf3e720b323bc47cf7e08244a3a0087a174341a15e96de4bdb2140c208893d059929267261778a9df0c10489484010f42d12959b6a041f1a6e0f47ac0908d8332cfe8f40bfef16dfe2820912918021e859252b36d4083e34dc1e8f581211b06659fd1e817fde2dbfc5041225230043d0b24a566da8107c69b83d1eb0242360ccb3fa3d02ffbc5b7f8a08244a460087a16420bf33fcf75b5628470388403d1fc162a0bc61fc78b8a3151048948d010f42c7417e67f9eeb6ac508e0710807a3f82c54178c3f8f171462a2091291a021e858e0f0f28a0b3cfdb58e8d448f8eadd2d852f33e3eee2e4305541225235043d0b1b1e1e5141679fb6b1d1a891f1d5ba5b0a5e67c7ddc5c860aa8244a46a087a16363c3ca282cf3f6d63a35123e3ab74b614bccf8fbb8b90c155048948d410f42c6c048b9db274e15d7f13686fbf4d47942425e17b74172326ab091291a921e858d709173b64e9c2bafe26d0df7e9a8f28484bc2f6e82e464d561225235243d0b1ae122e76c9d38575fc4da1befd351e50909785edd05c8c9aac244a46a487a1635c245ced93a70aebf89b437dfa6a3ca1212f0bdba0b919355848948d490f42c6b848b9db274e15d7f13686fbf4d47942425e17b74172326ab091291a921e858d701d860efb728e329a39d41fe19f50ac7f6871ca7fe4667962225235253d0b1adf3b0c1df6e51c653473a83fc33ea158fed0e394ffc8ccf2c444a46a4a7a1635be022a949aa09b4d20b416a77e73a0d9f84e0985fc919b89898948d495f42c6b7b0455293541369a41682d4efce741b3f09c130bf9233713131291a92be858d6f608aa526a826d3482d05a9df9ce8367e1382617f2466e262625235257d0b1adec1154a4d504da6905a0b53bf39d06cfc2704c2fe48cdc4c4c4a46a4afa1635bd822a949aa09b4d20b416a77e73a0d9f84e0985fc919b89898948d495f42c6b7b0455293541369a41682d4efce741b3f09c130bf9233713131291a92be858d6f6016b77f54fd35cae4d2700794de94a60e2ea3db2166e406635235257e0b1adebf2d6efea9fa6b95c9a4e00f29bd294c1c5d47b642cdc80cc6a46a4afc1635bd7e5addfd53f4d72b9349c01e537a529838ba8f6c859b90198d48d495f82c6b7afc41ce5354c010d9de6046649eeb03586c216135083721d71b91a92bf158d6f5f70faeff56568436748d52f135cc64d8d2ef04c60d6e455238235257e3b1adebed1f5dfeacad086ce91aa5e26b98c9b1a5de098c1adc8aa47046a4afc7635bd7da3ebbfd595a10d9d2354bc4d73193634bbc131835b91548e08d495f8ec6b7afb4098a535f8a84365c375db1a65984ee9224688c68722c35c21a92bf1e8d6f5f671314a6bf15086cb86ebb634cb309dd2448d118d0e4586b8435257e3d1adebece26294d7e2a10d970dd76c6996613ba4891a231a1c8b0d7086a4afc7a35bd7d9c4c529afc5421b2e1baed8d32cc277491234463439161ae10d495f8f46b7afb3824b78ea57ea5e87b42a1425d8ead111cf2cb228422c50022a92bf1e9d6f5f66f496f1d4afd4bd0f6854284bb1d5a2239e5964508458a00455257e3d3adebecde1ef09342d0fa24a4d74b316e31126c6e776ee60d8b15a48ba4afc7a85bd7d9bb3de12685a1f44949ae9662dc6224d8dceeddcc1b162b4917495f8f50b7afb37607d4a5b81a4b154b29f2edb0baa7d9b489fdf4332c58362f92bf1ea26f5f66eb0fa94b7034962a9653e5db61754fb36913fbe86658b06c5f257e3d44debecdd61f5296e0692c552ca7cbb6c2ea9f66d227f7d0ccb160d8be4afc7a89bd7d9bac3ea52dc0d258aa594f976d85d53ecda44fefa19962c1b17c95f8f5137afb3758095cb42e7b13d76a6bf50303a0dbc3434c219f2fc58506fa2bf1ea27f5f66eaf12b9685cf627aed4d7ea060741b7868698433e5f8b0a0df457e3d44febecdd5e2572d0b9ec4f5da9afd40c0e836f0d0d30867cbf16141be8afc7a89fd7d9babc4ae5a173d89ebb535fa8181d06de1a1a610cf97e2c2837d15f8f513fafb3757821dd9b94879ff95e8c165832041a5c2f6e5c4ef9585213a3bf1ea2805f66eaef43bb37290f3ff2bd182cb0640834b85edcb89df2b0a427477e3d4500becdd5de1388c6fef4e26831fd1f88c006c798b865b397e26149f28ffc7a8a027d9babbb27118dfde9c4d063fa3f11800d8f3170cb672fc4c293e51ff8f51404fb3757764e231bfbd389a0c7f47e23001b1e62e196ce5f898527ca3ff1ea2809f66eaeec285890a47d75c447b5c26df82c9aedbdd9df1b100a513880e3d45014ecdd5dd750b12148faeb888f6b84dbf05935db7bb3be362014a27101c7a8a029d9babbae2d749b3ecc3993d6a3cfdfd8a8c9def213bec83d294686048f514054b375775b5ae9367d987327ad479fbfb15193bde4277d907a528d0c091ea280a966eaeeb641e4c5a80748d2125c05a75a9985a3c2fb3d7cf1a51bbc133d450153cdd5dd6b0fdbe3fce4f426dc84d176ad29696f80a2bd55e04a391c277a8a02a89babbad51fb7c7f9c9e84db909a2ed5a52d2df01457aabc09472384ef5140551375775aa3f6f8ff393d09b721345dab4a5a5be028af5578128e4709dea280aa26eaeeb540af17893fe03b99bf351dd6141a9a3ffc22d0aff51ca853cd4501545dd5dd6a715e2f127fc077337e6a3bac2835347ff845a15fea3950a79a8a02a8bbabbad4e2bc5e24ff80ee66fcd47758506a68fff08b42bfd472a14f35140551775775a9c578bc49ff01dccdf9a8eeb0a0d4d1ffe116857fa8e5429e6a280aa2eeaeeb5383b29e1ecb69e1c7701e3fe0c10f867f6cf130bf21ca9f7ce4501545ed5dd6a6f02661c86439ebba5d08e2410184ef7e84a6873e13955939d8a02a8beabbad4dd04cc390c873d774ba11c4820309defd094d0e7c272ab273b1405517d5775a9ba099872190e7aee9742389040613bdfa129a1cf84e5564e76280aa2faaeeb53741330e4321cf5dd2e84712080c277bf4253439f09caac9cec501545f55dd6a6e82661c86439ebba5d08e2410184ef7e84a6873e13955939d8a02a8beabbad4dd04cc390c873d774ba11c4820309defd094d0e7c272ab273b1405517d5775a9ba025997a3dbe116c2bf04f2bfe0a1c220d465f544b55668b6380aa2fabeeb5373f4b32f47b7c22d857e09e57fc1438441a8cbea896aacd16c701545f57dd6a6e7e227841a3cea833678e02d7f01eceb02fc5bfad2a559bd18f02a8beb0bad4dcfb44f083479d5066cf1c05afe03d9d605f8b7f5a54ab37a31e05517d6175a9b9f615f35f3c1103505604d187b87198e8b9c34110a65670ea3d0aa2fac3eb5373eb2be6be782206a0ac09a30f70e331d1738682214cace1d47a1545f587d6a6e7d657cd7cf0440d415813461ee1c663a2e70d04429959c3a8f42a8beb0fad4dcfac3bad528d5e7d0567f35265bb83256dc8c64ae12fb388f5e95517d6205a9b9f57036cfdc7935c8d87b36af36efca9038c38d81e5c67138fd3aa2fac41b5373ead06d9fb8f26b91b0f66d5e6ddf952071871b03cb8ce271fa7545f58836a6e7d5a0db3f71e4d72361ecdabcdbbf2a40e30e36079719c4e3f4ea8beb106d4dcfab41b67ee3c9ae46c3d9b579b77e5481c61c6c0f2e3389c7e9d517d620da9b9f56836cfdc7935c8d87b36af36efca9038c38d81e5c67138fd3aa2fac41b5373ead06d9fb8f26b91b0f66d5e6ddf952071871b03cb8ce271fa7545f58836a6e7d5a06751ca91ad85e4a4a78303b7209f0b08e249f316c4e598eb8beb106e4dcfab3f5ab5edd0316e4c011bcc2f66379c3e0c70d6422a89ccd5d817d620dd9b9f567d417e344d393f1aba045e86c46596a4138deee052139b4fb12fac41bc373eacf90f0ec14748e0b82bd5833580c18b7021c8201ca1273843635f5883796e7d59f11e1d828e91c17057ab066b018316e043904039424e7086c6beb106f2dcfab3e23c3b051d2382e0af560cd603062dc087208072849ce10d8d7d620de5b9f567c4048862e71d68441678dfd3fe02b9a908ed43410639c3bf1bfac41bcc73eacf870910c5ce3ad0882cf1bfa7fc05735211da86820c73877e37f5883798e7d59f0e12218b9c75a11059e37f4ff80ae6a423b50d0418e70efc6feb106f31cfab3e1c24431738eb4220b3c6fe9ff015cd48476a1a0831ce1df8dfd620de639f567c3848862e71d68441678dfd3fe02b9a908ed43410639c3bf1bfac41bcc73eacf8701d1eb590836b0586e8c0a7b84d93491854aa7cc4387987805883798f7d59f0df3a3d6b2106d60b0dd1814f709b269230a954f98870f30f00b106f31efab3e1be008d2eeee40e98d36fc8c6d92cab4c5bfeec4f0de1e7c202620de63ef567c37b011a5dddc81d31a6df918db2595698b7fdd89e1bc3cf8404c41bcc7deacf86f60234bbbb903a634dbf231b64b2ad316ffbb13c37879f0809883798fbd59f0dec046977772074c69b7e4636c9655a62dff762786f0f3e1013106f31f7ab3e1bd808d2eeee40e98d36fc8c6d92cab4c5bfeec4f0de1e7c202620de63ef567c37b011a5dddc81d31a6df918db2595698b7fdd89e1bc3cf8404c41bcc7deacf86f60234bbbb903a634dbf231b64b2ad316ffbb13c37879f0809883798fbd59f0dec046977772074c69b7e4636c9655a62dff762786f0f3e1013106f31f7ab3e1bd8019414790e4fb5627958d0124a1aa83f9989169dee7c3a6630de63ef667c37aff32828f21c9f6ac4f2b1a0249435507f33122d3bdcf874cc61bcc7deccf86f5fe65051e4393ed589e5634049286aa0fe66245a77b9f0e998c3798fbd99f0debfc561c9533fe3d33f4792e311d03b247c770cdaaf43e1ed7196f31f7b43e1bd7f7384b8314d2dceaa0bf228a31fdc2b7898dddb1e57c3f5233de63ef697c37afed70970629a5b9d5417e451463fb856f131bbb63caf87ea467bcc7ded2f86f5fda6d40650021d62d3ac95050bfed690620e3b92392f0feecd0798fbda6f0debfb3669322ad1a0edd2d5f66c977d130343c73b4a322e1ff7da1f31f7b4ee1bd7f6559389e070a803d128b93bae798be907393aba242c4009f44e63ef69ec37afec93e8394baeb62fcdce3ed9dc727db48e1d399a0828802e28acc7ded3e86f5fd9109198222ad287c7194a163864614b9be53759d021007691698fbda7e0debfb21123304455a50f8e32942c70c8c29737ca6eb3a04200ed22d31f7b4fc1bd7f6422466088ab4a1f1c652858e191852e6f94dd67408401da45a63ef69f837afec8448cc11156943e38ca50b1c3230a5cdf29bace810803b48b4c7ded3f06f5fd9081daa7ad7a8ea49d116dc605c57a9c3dfe39c2c1e0078356a8fbda7e1debfb20f3b54f5af51d493a22db8c0b8af5387bfc738583c00f06ad51f7b4fc3bd7f641e02bc440b7a0ba9fc2837a9695505377a3ab30c7501e279ab3ef69f887afec83b05788816f41753f8506f52d2aa0a6ef4756618ea03c4f3567ded3f10f5fd90760af1102de82ea7f0a0dea5a55414dde8eacc31d40789e6acfbda7e21ebfb20ec15e2205bd05d4fe141bd4b4aa829bbd1d59863a80f13cd59f7b4fc43d7f641d82bc440b7a0ba9fc2837a9695505377a3ab30c7501e279ab3ef69f887afec83b05788816f41753f8506f52d2aa0a6ef4756618ea03c4f3567ded3f10f5fd907603b235b8b594d01c1dab0824d37ac06895905793d78a00ed0bda7e21fbfb20ebf02590fc388fc863b82272c9265b6350d5e4d4e77f141c1a27b4fc4407f641d7d04b21f8711f90c77044e5924cb6c6a1abc9a9cefe2838344f69f8880fec83afa09643f0e23f218ee089cb24996d8d435793539dfc5070689ed3f1101fd9075f412c87e1c47e431dc113964932db1a86af26a73bf8a0e0d13da7e2203fb20ebe82590fc388fc863b82272c9265b6350d5e4d4e77f141c1a27b4fc4407f641d7d04b21f8711f90c77044e5924cb6c6a1abc9a9cefe2838344f69f8880fec83afa02256498f1584119856914c9163eb6b523f95f9f950720c9fd3f11020d9075f3f44ac931e2b082330ad229922c7d6d6a47f2bf3f2a0e4193fa7e22041b20ebe7e156b7ee92c72c919270b5a3d860bd543aa9a43e241c9d6804fc44084641d7cfb2ad6fdd258e592324e16b47b0c17aa87553487c48393ad009f888108c83af9f655adfba4b1cb24649c2d68f6182f550eaa690f8907275a013f1102119075f3ec376e4ff639f8cb810520f9e426bcd21801147b0f0e5058037e22042420ebe7d76edc9fec73f197020a41f3c84d79a4300228f61e1ca0b006fc44084841d7cfae69cb9885be45b0bbe14a0f889151705ab09448393943040ef888109183af9f5b5fa989b852ede42f8f5a4709190108b00d6aec6f7287ac1ef1102124075f3eb54b656c1d7c3e4b16eb7ab60a2860395ac71834dbe510fc3ee22042490ebe7d6922dd30e7cedf18e5a3bb940c471e9ab03a72c5b4ca239c7ec44084931d7cfad145ba61cf9dbe31cb477728188e3d356074e58b69944738fd888109263af9f5a217871c4c11dee64e5bb4782912d892bb960d72d0289015fc1102124d75f3eb432f0e389823bdcc9cb768f05225b125772c1ae5a051202bf82204249aebe7d6865e1c7130477b99396ed1e0a44b624aee5835cb40a24057f044084935d7cfad0c484b3b0d6559b52aaa69e9408d22bdd75cadf27e448253e18810926caf9f5a171ca8cec7a115ed0d2199fa7910a3a3a9659e40f989064bc4102124da5f3eb42d39519d8f422bda1a4333f4f221474752cb3c81f3120c9788204249b4be7d685a72a33b1e8457b4348667e9e4428e8ea5967903e624192f10408493697cfad0b47158cee9df11eb20d995fbc07b7b4545d93463c948340221810926d3f9f5a1676ec3f680948658f97ff21f78ed54b2865eab238f9069a84402124da8f3eb42cd699a45adff6f34aaccaa66e9d1078d076998a31c20d4f48904249b52e7d685995f46e408d540ec0d661af5cb986d42097f73a23541ab8d13084936a6cfad0b314aa020be80e45ad298fc138f2738ac0dab29a0678358be2710926d4e9f5a166121529a29d82b385cfebe4f1644cf801602959ccc06b3204f2124da9e3eb42cc142a53453b05670b9fd7c9e2c899f002c052b39980d66409e4249b53c7d685982115cc154370f642bc7bf6451099c2852b698cf2d1ace253d84936a79fad0b30322b982a86e1ec8578f7ec8a2133850a56d319e5a359c4a7b0926d4f3f5a1660645730550dc3d90af1efd91442670a14ada633cb46b3894f6124da9e7eb42cc0c16f8634e8edda4160ac14a80433f6a906108d565d672cded249b53d0d68598172df0c69d1dbb482c15829500867ed520c211aacbace59bda4936a7a1ad0b302e5be18d3a3b7690582b052a010cfdaa418423559759cb37b4926d4f435a16605c43d573214d4fa36822d07bfa10597c7db489072bb398136a24da9e87b42cc0b713bd3eef7101c98812671fec171120f615546a546731cad549b53d106859816d277a7ddee203931024ce3fd82e2241ec2aa8d4a8ce6395aa936a7a20d0b302da4ef4fbbdc4072620499c7fb05c4483d85551a9519cc72b5526d4f441a16605b429fc50285e70cef85fff2758aee72fab56e5aea0398ffaab4da9e88442cc0b6753f8a050bce19df0bffe4eb15dce5f56adcb5d40731ff5569b53d108859816ce3403994e5025be994cc2c55ab1fae6a807d9167de6418eae36a7a2120b302d9b6807329ca04b7d3299858ab563f5cd500fb22cfbcc831d5c6d4f442416605b365c20bde616f97d1cffd13d62be49c29acba6b5f49907deb9da9e88492cc0b66b4453d47904557cf1cc68a2bd72f1ad30438fc7e632116174b53d109359816cd514ba019edf0d7c9b65976d72dc41825b3361ebc9642466ea6a7a2127b302d9a92974033dbe1af936cb2edae5b88304b666c3d792c848cdd4d4f4424f6605b35252e8067b7c35f26d965db5cb7106096ccd87af2590919ba9a9e8849ecc0b66a431e265a3cece6792f981938ed86a3ad44751ba482124db5453d1093e9816cd4763c4cb479d9ccf25f303271db0d475a88ea374904249b6a8a7a2127d302d9a8e539bef3c119c2103b2cc76335807134bc989451d849511524f4424fb605b351b334a3724f99ac4bf325f145ea66c4e923f54e638092bc6a59e8849f7c0b66a3566946e49f335897e64be28bd4cd89d247ea9cc7012578d4b3d1093ef816cd46a593b3540bccd95b496427972900f6243a995f4dd24b0be977a2127e002d9a8d33e88c32e4ffdae20f94b1add167cec81ff6e45b74963212ff4424fc105b351a50923df09765ddef9bf5c5db2235800feab1ee76b92c7e660e8849f830b66a3491247be12ecbbbdf37eb8bb6446b001fd563dced7258fccc1d1093f0616cd4692248f7c25d9777be6fd7176c88d6003faac7b9dae4b1f9983a2127e0c2d9a8d24491ef84bb2eef7cdfae2ed911ac007f558f73b5c963f33074424fc185b351a481e5049443c407253c28c031a2bde37e55e30d2b62c800a0f8849f831b66a348f3ca092887880e4a78518063457bc6fcabc61a56c5900141f1093f0636cd4691e05537dbdc7644c06d6f63460a5d707902505a6d5b201cc3f2127e0c7d9a8d23b0aa6fb7b8ec8980dadec68c14bae0f204a0b4dab6403987e424fc18fb351a476154df6f71d91301b5bd8d182975c1e4094169b56c80730fc849f831f66a348ec2a9bedee3b226036b7b1a3052eb83c81282d36ad900e61f9093f063ecd4691d85537dbdc7644c06d6f63460a5d707902505a6d5b201cc3f2127e0c7d9a8d23b036821065c2ec0392ab8cb40cb13f19ff4cf736b3403b2be524fc18fc351a475f6d0420cb85d8072557196819627e33fe99ee6d66807657ca49f831f86a348ebe661a9a43e21291027af8f82abb5a8ff7e01f36ca00ee539593f063f1d4691d7b58478d349a87a4bcc2b8184d6d1347ea6c80c99101de4b2c27e0c7e4a8d23af53ca173160b71cc3152365892d084b7cf8543ef1f03be3a594fc18fca51a475e905553ed8ed461b1a7132d91d97679799b6ca3a3b077e18b39f831f95a348ebd10aaa7db1da8c3634e265b23b2ecf2f336d9474760efc31673f063f2b4691d7a21554fb63b5186c69c4cb64765d9e5e66db28e8ec1df862ce7e0c7e568d23af442aa9f6c76a30d8d38996c8ecbb3cbccdb651d1d83bf0c59cfc18fcad1a475e885553ed8ed461b1a7132d91d97679799b6ca3a3b077e18b39f831f95a348ebd1036ba33ca7f25e605f3214baae3511b318589a35defc4ba74f063f2b5691d7a1f6d746794fe4bcc0be6429755c6a236630b1346bbdf8974e9e0c7e56ad23af43e66fb27d6d2fa1acf994b56a383a294c0c268e974bf148dd4c18fcad6a475e87b5a08a85a7c56b856ff5cd53efda3517c31142ee67e2abfaa831f95ae48ebd0f54023a961cf0ff365cb7fd275f1a4caf30e6ab9c9fc572356063f2b5d91d7a1e90c59ab707482698363c5cce3d9a7bde0c917cf90f8afeaad0c7e56bc23af43d118b356e0e904d306c78b99c7b34f7bc1922f9f21f15fd55a18fcad78475e87a23166adc1d209a60d8f17338f669ef783245f3e43e2bfaab431f95af08ebd0f4462cd5b83a4134c1b1e2e671ecd3def0648be7c87c57f556863f2b5e11d7a1e8851ad0fb41e891aee0922f63590da06073dbf550c8b004ed1c7e56bc33af43d0f2f6c78151374b893df0c14631812340927c10616160241a48fcad78775e87a1d5ed8f02a26e97127be1828c6302468124f820c2c2c0483491f95af0eebd0f43a49c439012435650748f6798456a6f81f4b467455580aaa933f2b5e1ed7a1e8731f9acaaf1ecd4cc65eb31b00a3ac183942cf44a7b016f9277e56bc3eaf43d0e53f35955e3d9a998cbd66360147583072859e894f602df24efcad787d5e87a1ca0a7d83695197b5d1479293fa850e88dfb77f6e9bc05d889ef95af0fbbd0f439314fb06d2a32f6ba28f2527f50a1d11bf6efedd3780bb113df2b5e1f77a1e872629f60da5465ed7451e4a4fea143a237eddfdba6f0176227be56bc3eef43d0e4c53ec1b4a8cbdae8a3c949fd4287446fdbbfb74de02ec44f7cad787dde87a1c9833ea8f41efdddfcc45ef67a04746b5f6243945b905da2df095af0fbcd0f4392f67d51e83dfbbbf988bdecf408e8d6bec48728b720bb45be12b5e1f79a1e8725e5bbc95b495da01e8e483c6791378ffd33d2772e1176a5bc356bc3ef443d0e4bb438b84160216868995cdb4ea1d5027a1269141bf2ed65b87ad787de987a1c975132960d8da8f8fcaf86191cc30fe773cf964df7b5dae5b105af0fbd40f4392e92652c1b1b51f1f95f0c3239861fcee79f2c9bef6bb5cb620b5e1f7a81e8725d24ca583636a3e3f2be1864730c3f9dcf3e5937ded76b96c416bc3ef503d0e4ba4255d5f73aadf010f8fd2b6597e51e1e2776957d7ed747c83d787dea17a1c97474ababee755be021f1fa56cb2fca3c3c4eed2afafdae8f907af0fbd42f4392e8e2187d67b81de86f60c11015defa5af8489e7bb5cb5d396105e1f7a86e8725d1b430facf703bd0dec182202bbdf4b5f0913cf76b96ba72c20bc3ef50dd0e4ba361231b29adddc9e8ffd0a2d6fb4f4e60cd3e1496fd74ffc42787dea1ca1c9746b24636535bbb93d1ffa145adf69e9cc19a7c292dfae9ff884f0fbd4394392e8d648c6ca6b77727a3ff428b5bed3d398334f8525bf5d3ff109e1f7a8728725d1ac1d9fed83c5477737b51793759e0558614b4ca77bba818614c3ef50e60e4ba3573b3fdb078a8eee6f6a2f26eb3c0ab0c296994ef775030c2987dea1cc1c9746ae02920ebbeb805f96a12475ce6e73897fd974f9ebea07bc540fbd4399392e8d5b05241d77d700bf2d4248eb9cdce712ffb2e9f3d7d40f78a81f7a8732725d1ab60a483aefae017e5a8491d739b9ce25ff65d3e7afa81ef1503ef50e64e4ba356c149075df5c02fcb50923ae73739c4bfecba7cf5f503de2a07dea1cc9c9746ad82920ebbeb805f96a12475ce6e73897fd974f9ebea07bc540fbd4399392e8d5b05241d77d700bf2d4248eb9cdce712ffb2e9f3d7d40f78a81f7a8732725d1ab60309607a7b67a686015e39b93934087f10980d6f781f0b904ef50e64f4ba356bf612c0f4f6cf4d0c02bc7372726810fe21301adef03e17209dea1cc9e9746ad7e4e6a774bb04c243824549646436047bed245b7db07c48814bd43993e2e8d5afb28e7474436facb28156f54847d1eb77850cdcbb30f8ab42a7a87327d5d1ab5f551ce8e886df596502adea908fa3d6ef0a19b97661f156854f50e64faba356bea2faf75bdb24daf5822837a09ead905dbef798ac93e2c74aaea1cc9f6746ad7d35f5eeb7b649b5eb04506f413d5b20bb7def315927c58e955d43993ece8d5afa64ad02fa39f99401856d4101fa1c23f6a6a288721f8b376aca87327dad1ab5f4b21b2b7f4159502e87a6e483739e2a6cf80936a40f168915a50e64fb6a356be9543656fe82b2a05d0f4dc906e73c54d9f0126d481e2d122b4a1cc9f6d46ad7d2a12dd387d2cb68e59b67f48d4dde8c338ae900500c5a3e96a43993edb8d5afa5325ba70fa596d1cb36cfe91a9bbd186715d200a018b47d2d487327db71ab5f4a64b74e1f4b2da3966d9fd235377a30ce2ba401403168fa5a90e64fb6e356be94c22fc1c963c16f58580c06e9ee5a441c020c284032d20ef531cc9f6dd6ad7d29745f8392c782deb0b0180dd3dcb488380418508065a41dea63993edbad5afa52e1802cb05c6be58cdcfc7e2738cef2efb2f4c6c09b485614d7327db76ab5f4a5b3005960b8d7cb19b9f8fc4e719de5df65e98d813690ac29ae64fb6ed56be94b6600b2c171af963373f1f89ce33bcbbecbd31b026d2158535cc9f6ddaad7d296c4c28b0db0c5549264b053b945dd79fd426a5bc4aa42cae6c993edbb65afa52d72463ba62ef0d150462d09f20b20d67a2f98dd492485b00da327db76db5f4a5ad48c774c5de1a2a08c5a13e41641acf45f31ba92490b601b464fb6edb6be94b5a1da142389296d6c95808a47abe93c6869279ae46216da769c9f6ddb7d7d296b33b428471252dad92b01148f57d278d0d24f35c8c42db4ed393edbb6fafa52d660297618f20bddddd2ce8b9e2f0ad4214f629151585b841a827db76e05f4a5acb052ec31e417bbbba59d173c5e15a8429ec522a2b0b7083504fb6edc0be94b5960a5d863c82f77774b3a2e78bc2b50853d8a4545616e106a09f6ddb817d296b2c14bb0c7905eeeee96745cf17856a10a7b148a8ac2dc20d413edbb702fa52d658297618f20bddddd2ce8b9e2f0ad4214f629151585b841a827db76e05f4a5acb052ec31e417bbbba59d173c5e15a8429ec522a2b0b7083504fb6edc0be94b596031eabc7505d9fa0306f4a0b421aead383687a15e6e120e0af6ddb818d296b2bf63d578ea0bb3f4060de94168435d5a706d0f42bcdc241c15edbb7031a52d657e53bd4a80edca6ac3e898aac87d18dcdb8660e176b849dc2cdb76e0644a5acafb338cedaeb1f7583f9df77d88f08fe1b1b9041eea70955c5ab6edc0c994b595f56719db5d63eeb07f3beefb11e11fc36372083dd4e12ab8b56ddb8193296b2bea5a460f679e3fe3b644a41e1bb89daec19052d7a6c257156bdbb7032752d657d3409e777c12e24a24560e642f6799857dcce80b4a84afced8b76e064fa5acafa50d4f47a4fc27170078e2f056c59132f646127292096141b26edc0ca04b595f491a9e8f49f84e2e00f1c5e0ad8b2265ec8c24e52412c28364ddb8194096b2be92353d1e93f09c5c01e38bc15b1644cbd91849ca48258506c9bb7032812d657d246a7a3d27e138b803c71782b62c8997b2309394904b0a0d9376e065025acafa486106d2fc98d3f2bf5af52d644f71575f0d69851d9615bf27edc0ca05b595f48f4e1ffea6080a683682b082c09540d6b8c71566382c2d2250db81940c6b2be91d285255f8e6775324d2272d7920dfd56c3a6d286d585be8a2b7032819d657d23950a4abf1cceea649a44e5af241bfaad874da50dab0b7d1456e065033acafa4722d5bb090703fcf4b1562dddc79dd7dab95f6fdb26171468bdc0ca068595f48e35ab76120e07f9e962ac5bbb8f3bafb572bedfb64c2e28d17b81940d0b2be91c641811aee9761bfe422519f69ddd41ea9041e52c685c6be30703281a2657d238b0f148e8a05260280116966cbb206654cb47f018a0b8f2061e0650345cafa47151e291d140a4c050022d2cd97640cca9968fe0314171e40c3c0ca068b95f48e2a3c523a2814980a0045a59b2ec8199532d1fc06282e3c818781940d172be91c5404b6ccfcff9296b858115e5586915260503a684d5c7aa71003281a2f57d238a7096d99f9ff252d70b022bcab0d22a4c0a074d09ab8f54e200650345eafa4714e12db33f3fe4a5ae1604579561a45498140e9a13571ea9c400ca068bd5f48e29c25b667e7fc94b5c2c08af2ac348a930281d3426ae3d538801940d17abe91c5384b6ccfcff9296b858115e5586915260503a684d5c7aa71003281a2f57d238a7022ebf84cc8b559c2cef1f2a8c8887404b38f65a88f568601650345ebfa4714df45d7f099916ab3859de3e5519110e809671ecb511ead0c02ca068bd7f48e29be17c239dff937e9c3088df29b187ff80d7a7ff29f3d5bbc06940d17b0e91c537b2f8473bff26fd386111be53630fff01af4ffe53e7ab7780d281a2f61d238a6f65f08e77fe4dfa70c2237ca6c61ffe035e9ffca7cf56ef01a50345ec3a4714dec4a2427aca021d0d01135bcd0ba5de8668041f0f6eadf8435a068bd8848e29bd7205aa80616a62457ef31a1996b19f8c7acc63dead5c0ac6c40d17b1191c537ad40b5500c2d4c48afde634332d633f18f598c7bd5ab8158d881a2f623238a6f5a0d7cf8c530fb1417898cae5da2c60b195f5b53a8570455b20345ec474714deb31af9f18a61f6282f13195cbb458c1632beb6a750ae08ab64068bd88e8e29bd6635f3e314c3ec505e2632b9768b182c657d6d4ea15c1156c80d17b11d1c537acc6be7c62987d8a0bc4c6572ed163058cafada9d42b822ad901a2f623a38a6f59863e1e4ffe613c43065910dd222bed990a1f796827046ff21345ec475714deb2f53d622aca28a0b1897e8439c3bdbdb1bf0318901e08fa24368bd88ebe29bd65d33be9e061b7698e8fc96af306e15de328ca56e00c120e887d17b11d8c537acb9677d3c0c36ed31d1f92d5e60dc2bbc65194adc018241d10fa2f623b18a6f59725b0cd0c5443ce65bbf20e4b9aeb5a0c4ded814000485462045ec476414deb2e3422bfa375edc4f6f4b07f16b53c9698469f283fd090c30418bd88ec929bd65c5106a4d1b941b219662d60ace9df0fb03802763f7121a048417b11d93537acb8920d49a372836432cc5ac159d3be1f607004ec7ee243409082f623b26a6f5971241a9346e506c86598b582b3a77c3ec0e009d8fdc486812105ec4764d4deb2e240f64c189773b8f6ae3767e6ce5e60016ad7d7bb590d1c821bd88ec9b9bd65c471ec98312ee771ed5c6ecfcd9cbcc002d5afaf76b21a390437b11d93737acb88e3d930625dcee3dab8dd9f9b39798005ab5f5eed643472086f623b26e6f59711c073864f8903efe0ee87a1b5f258e28b0182e39a9868fe50eec4764dddeb2e2370e70c9f1207dfc1dd0f436be4b1c5160305c73530d1fca1dd88ec9bbbd65c46e1ce193e240fbf83ba1e86d7c9638a2c060b8e6a61a3f943bb11d93777acb88dc39c327c481f7f07743d0daf92c714580c171cd4c347f2877623b26eef59711b873864f8903efe0ee87a1b5f258e28b0182e39a9868fe50eec4764dddeb2e2370731ef7bede424494dc0993dca8233dfdb209912dd1fe45de88ec9bbcd65c46df7250482a92e70be184d94fb146a4a3f610557e58a3fe2fbe11d9377aacb88dbd70b2e901fc309a7ad678c75a83a76fe6cced58ae47fe037d23b26ef659711b796d782ab0cec3b7ad79b7b6acfdad07c8461d0d598ffdaafb4764ddedb2e236f16702ae0e73e9f212c0359551f1b8378b387c76b01ffcf9f78ec9bbdc65c46de15a17b4c9be3666dd4d31529bd9ce97111d3b495d3ffb97f01d9377b9cb88dbc14041c24052cf50726728cd2fa9fb561ce6b8eeb77ff8d3e13b26ef749711b7810c95dd2d7c01239c9b17c2574a54d43479b4396bfff34bc3764ddeea2e236f01192bba5af8024739362f84ae94a9a868f36872d7ffe69786ec9bbdd45c46de02325774b5f0048e726c5f095d295350d1e6d0e5afffcd2f0dd9377ba8b88dbc0464aee96be0091ce4d8be12ba52a6a1a3cda1cb5fff9a5e1bb26ef751711b780855702b849674bc817e424d6c9bab6b424785f2bcff36603864ddeea3e236f00f36f2afb6034bfbbac94ac2d12db4fe7f3b4e4176fe6e6471c9bbdd48c46de01d6de55f6c0697f775929585a25b69fcfe769c82edfcdcc8e39377ba9188dbc03a67dd1784e39271a2f1f1333cad3221f7997b61d8f9bb35c826ef752411b780735bcc87b69d8765fdb0a88e7150c26be9df391faef3780f914ddeea49236f00e543ab681a11714eb32e1744da97e2ffce6ab49b5ae6f1c3239bbdd49346de01c9136928e0f945201e28f4b1ad2624279781ab92b2cde52a48377ba9278dbc039126d251c1f28a403c51e9635a4c484f2f035725659bca54906ef7524f1b7807224da4a383e5148078a3d2c6b498909e5e06ae4acb3794a920ddeea49e36f00e44275b9fb4a08b83a9146bb561277f64b6b99ef1936f2af642bbdd493d6de01c874eb73f694117075228d76ac24efec96d733de326de55ec8577ba927adbc0390e2980d77f5890915c1e74fd7c945bbad592be224abcad7d0bef7524f6b780721b5301aefeb12122b83ce9faf928b775ab257c4495795afa17deea49ed6f00e4363215b6aa38a4c828469a1dea47cd1350f73ae527f2b79830bdd493dbde01c86b642b6d54714990508d343bd48f9a26a1ee75ca4fe56f30617ba927b7bc0390d654693355b8f5a358e72e9fa11592753e892df09ccae004c3f7524f70780721ab34e4bf58484dc9699b23673a21831277be9e3d3695c1ad88eea49ee1f00e435569c97eb0909b92d33646ce74430624ef7d3c7a6d2b835b11dd493dc3e01c86aa5fa5560df799a85e3953c4e07c6a71d9a6bb50d757085a24ba927b88c0390d534b5d04c8c595d3743f6db1b8ef330badf9b8fdabae12584a7524f71280721aa522cc623e618e29a04ba18b69d4c43f569fb457545c265495ea49ee2600e435494598c47cc31c5340974316d3a9887ead3f68aea8b84ca92bd493dc4c01c86a921743e1a65c9b2938fb4c559f496f25552b13b94e709af658a927b8990390d5232e87c34cb9365271f698ab3e92de4aaa5627729ce135ecb1524f71320721aa465d0f8699726ca4e3ed31567d25bc9554ac4ee539c26bd962a49ee2640e43548c463165dfbb3bcc7fa728d4f241d752a404e0267084d956c6493dc4c91c86a9171875246c4cda1bb71b17d1dc7a0ccd42b602a8de09b4518d927b8993390d522d30ea48d899b4376e362fa3b8f4199a856c0551bc1368a31b24f71326721aa45a61d491b133686edc6c5f4771e833350ad80aa37826d1463649ee264ce43548b44fbb7c0f3d336070a584b6dbc6c492105c57a2ed4da4306d93dc4c9ac86a91672b8950cb50c9439917cf95af83e74c1b64f1a1d79b4a04dc27b8993690d522cd5712a196a19287322f9f2b5f07ce9836c9e343af369409b84f71326d21aa459a3a379bda1987911c2c047eb605fb58684008e35b6d29b7719ee264db43548b33008190610971a4f024cf25640254d8cb2c5422b3da5512e43dc4c9b786a91665010320c212e349e0499e4ac804a9b19658a84567b4aa25c87b89936f0d522cca0206418425c693c0933c95900953632cb1508acf69544b90f71326de1aa45994040c83084b8d278126792b2012a6c65962a1159ed2a89721ee264dbc3548b32808190610971a4f024cf25640254d8cb2c5422b3da5512e43dc4c9b786a91665010320c212e349e0499e4ac804a9b19658a84567b4aa25c87b89936f0d522cca0206418425c693c0933c95900953632cb1508acf69544b90f71326de1aa45994040c83084b8d278126792b2012a6c65962a1159ed2a89721ee264dbc3548b32800da2b9b6480772dc9beb8bfa4b36f32700650fd75514883ec4c9b787a91664ff1b45736c900ee5b937d717f4966de64e00ca1faeaa29107d89936f0f522cc9fe368ae6d9201dcb726fae2fe92cdbcc9c01943f5d545220fb1326de1ea45993fc6d15cdb2403b96e4df5c5fd259b7993803287ebaa8a441f6264dbc3d48b327f8663df41156d9b0818b7ee79ca9cd5a6ab2935972514a27ed4c9b787b91664fef588e40cf8415e3bae3c3f73149f8dcd011690ee1a295f3db9936f0f822cc9fdd3d2eda4bde8e4a2d944e165a8a4fe19acf1479c0452d8bb8326de1f145993fb906700d44937f1712f56254ad0afdeb304a6b4f7d8a5cbb7164dbc3e38b327f710ce01a8926fe2e25eac4a95a15fbd66094d69efb14b976e2c9b787c71664fee219c035124dfc5c4bd58952b42bf7acc129ad3df62972edc5936f0f8e2cc9fdc433806a249bf8b897ab12a56857ef5982535a7bec52e5db8b26de1f1c5993fb886700d44937f1712f56254ad0afdeb304a6b4f7d8a5cbb7164dbc3e38b327f7105a14013f464565167910bd99561b8e03f9ac4bae4b99122d9b787c72664fee1f403a5b2b62ed4ce4bee7a32aa29544029f9af3599733c85c36f0f8e5cc9fdc3d0c870f039c3d1c814a956e4d3b88afffeb7842b02e6934b96de1f1cc993fb879190e1e07387a3902952adc9a77115fffd6f085605cd26972dbc3e399327f70f2321c3c0e70f472052a55b934ee22bfffade10ac0b9a4d2e5b787c73264fee1e46438781ce1e8e40a54ab7269dc457fff5bc215817349a5cb6f0f8e64c9fdc3c8548348e69a344acc761d0ccbaee927f963c686ffe694ef97de1f1cca93fb878f3518ea7a0acb1850b900418f543077ed73cf69fccd2b8330bc3e399627f70f1d6a31d4f4159630a17200831ea860efdae79ed3f99a570661787c732c4fee1e3a60760295018ee3fab0c72e35472007b07b8003f034afb0c3f0f8e6599fdc3c734cfe5dd6d9804aad2e548462849e375ba34263dd69610588e1f1ccb43fb878e5260f145a89631812296f30bcff9a96b1f2c723b7d2c3af12c3e399697f70f1c94c1e28b512c6302452de6179ff352d63e58e476fa5875e2587c732d2fee1e392244eaa16fbeee3007282eaebf4c882c2775eeadc4b10604c0f8e65a6fdc3c723489d542df7ddc600e505d5d7e9910584eebdd5b89620c0981f1ccb4dfb878e461d4d0108c61e0eb996d1d3a7c980330489be076e2c4325313e39969cf70f1c8b3a9a02118c3c1d732da3a74f93006609137c0edc58864a627c732d39ee1e391601465ccfeedabd9e280d76971c5ef40cd33a79b5b10e38c5f8e65a74dc3c722b028cb99fddb57b3c501aed2e38bde819a674f36b621c718bf1ccb4e9b878e4560519733fbb6af678a035da5c717bd0334ce9e6d6c438e317e39969d370f1c8ac0a32e67f76d5ecf1406bb4b8e2f7a06699d3cdad8871c62fc732d3a6e1e391581465ccfeedabd9e280d76971c5ef40cd33a79b5b10e38c5f8e65a74dc3c722b028cb99fddb57b3c501aed2e38bde819a674f36b621c718bf1ccb4e9b878e4560519733fbb6af678a035da5c717bd0334ce9e6d6c438e317e39969d370f1c8ac02f40c0a443c151cbd381738625d82e64497f36d5871e06fd732d3a6f1e39157f5e8181488782a397a702e70c4bb05cc892fe6dab0e3c0dfae65a74de3c722afe49155b3de567c9e71acbf6108dbee18bd23f37531c79bff6ccb4e9bd78e455fb1e3d0f28a1321686025e141911dbeb1250c0caa338f523ee9969d37bf1c8abf53c7a1e5142642d0c04bc283223b7d624a181954671ea47dd32d3a6f7e39157ea0506954f5b2adccfd63e785c3dcdd443ef458689e3d633bb65a74df0c722afd30a0d2a9eb655b99fac7cf0b87b9ba887de8b0d13c7ac6776cb4e9be18e455fa6141a553d6cab733f58f9e170f737510fbd161a278f58ceed969d37c31c8abf4c2834aa7ad956e67eb1f3c2e1ee6ea21f7a2c344f1eb19ddb2d3a6f8639157e98506954f5b2adccfd63e785c3dcdd443ef458689e3d633bb65a74df0c722afd302ce502983bbe1cb29495337fb018b07894f32d397ac81b6db4e9be19e455fa5f59ca0530777c3965292a66ff603160f129e65a72f59036db69d37c33c8abf4be3fa6630dc55af5821f1af5f6b6c0e9dd000f10e2eb2211b7d3a6f8689157e97b0b5f1ec861186dbc0afc13e563dffbb4ac607dc2d645c770a74df0d222afd2f516be3d90c230db7815f827cac7bff76958c0fb85ac8b8ee14e9be1a4455fa5ea2d7c7b218461b6f02bf04f958f7feed2b181f70b59171dc29d37c3488abf4bd45af8f64308c36de057e09f2b1effdda56303ee16b22e3b853a6f8691157e97a842044532e7e95e787c87664e345de345724a382a645e1b0b74df0d232afd2f4f101ae312a6353fa8c5d4f4945f19ee8590d6cc51c8bdda17e9be1a4755fa5e9d2035c6254c6a7f518ba9e928be33dd0b21ad98a3917bb42fd37c348eabf4bd3a406b8c4a98d4fea31753d2517c67ba16435b314722f7685fa6f8691d57e97a740ce97142080c7ffdfb6dcc9aef2d9c2732f8be8b45f074c04df0d23bafd2f4e719d2e2841018fffbf6db9935de5b384e65f17d168be0e9809be1a4775fa5e9ce33a5c5082031fff7edb7326bbcb6709ccbe2fa2d17c1d30137c348eebf4bd39c674b8a104063ffefdb6e64d7796ce13997c5f45a2f83a6026f8691dd7e97a7385aa96ccd572a829783a2f1a6e937ea6ddbce44b15f08f005df0d23bbfd2f4e6f4165324784b787e6d40c0b45c8cdfcd663dee55fbe13840cbe1a4778fa5e9cdd0edcbd3bdfd1928574de3e8387fa21a7740026bc7c28ac1a7c348ef2f4bd39b91db97a77bfa3250ae9bc7d070ff4434ee8004d78f8515834f8691de5e97a73723b72f4ef7f464a15d378fa0e1fe8869dd0009af1f0a2b069f0d23bcbd2f4e6e402f8428bd4ef16e373b81c14362f35364c4391e0e14704d4e1a47798a5e9cdc705f08517a9de2dc6e77038286c5e6a6c988723c1c28e09a9c348ef314bd39b8e0be10a2f53bc5b8dcee07050d8bcd4d9310e4783851c13538691de6297a7371c17c2145ea778b71b9dc0e0a1b179a9b2621c8f070a3826a70d23bcc52f4e6e382f8428bd4ef16e373b81c14362f35364c4391e0e14704d4e1a47798a5e9cdc705f08517a9de2dc6e77038286c5e6a6c988723c1c28e09a9c348ef314bd39b8e04a22fba212283b94bacd2d05822b758dbd26d43551c2d939691de62a7a7371bf20584ff0fab2f9e142608202fab5131626900467a3875673d23bcc55f4e6e37d40b09fe1f565f3c284c10405f56a262c4d2008cf470eace7a47798abe9cdc6fa0d739870c12e6a3cd6483003e132745346826d9b8e1efdd048ef3158d39b8df31ae730e1825cd479ac906007c264e8a68d04db371c3dfba091de62b1a7371be635ce61c304b9a8f35920c00f84c9d14d1a09b66e387bf74123bcc5634e6e37cc6b9cc386097351e6b241801f0993a29a34136cdc70f7ee8247798ac69cdc6f98634bdfb8e94926853149283609856d2f146935b5e1f181058ef3158e39b8df2f52aa181ea8f4cfc22f58786409690258d514c768c3e4a60c1de62b1d7371be5d316688ea284c223c2b7718c009302cac566beace87caf0193bcc563be6e37cb962cd11d45098447856ee318012605958acd7d59d0f95e0327798ac77cdc6f97251ac7c5577930ba87aa28af81b1edaac05f207371f2d6465ef3158f09b8df2e32f6b5157c5889a08c20b3de82c9bdd52b8266a6b3e5c6cccde62b1e2371be5c55ed6a2af8b11341184167bd05937baa5704cd4d67cb8d999bcc563c46e37cb8a49bf9e0bec84eadad4f31f98a8cd9d458cdc05a9f9735734798ac789dc6f97131f9194c4af6c586d76ac672947f96285c5fa6750f2e85269f3158f14b8df2e253f2329895ed8b0daed58ce528ff2c50b8bf4cea1e5d0a4d3e62b1e2971be5c4a0a58abbf9413e46da777c49d1643b211c42bf940cba2eda8cc563c53e37cb89314b1577f2827c8db4eef893a2c8764238857f2819745db5198ac78a7c6f971262962aefe504f91b69ddf1274590ec84710afe5032e8bb6a33158f14f8df2e24c52c55dfca09f236d3bbe24e8b21d908e215fca065d176d4662b1e29f1be5c498319d14a617a0c992444271c95a994916ef01f009ba307e8dc563c53f37cb892f633a294c2f4193248884e392b532922dde03e0137460fd1b8ac78a7e6f97125e5286ab4534e5a900ddcfef1d60c34c56684a1c23e8c39e38158f14fddf2e24bb311faf37402dd4b988660632b7e4c0a77cd69444d188e0712b1e29fcbe5c4975623f5e6e805ba97310cc0c656fc9814ef9ad2889a311c0e2563c53f97cb892ea50911589d719d59dee5e40c2d5f12a989f9cad10462525c5ac78a7f3f97125d32d3483c084962df3a982a97da2407d2beb7bb61d8c4bef8c58f14fe8f2e24ba55a690781092c5be7530552fb4480fa57d6f76c3b1897df18b1e29fd1e5c4974a40e467aee8bb3a8672d0cdee7f601caa5a3134733131623263c53fa4cb892e930ddb280aa7d8f7c4b267c3d4f51e614f60a4c4e362646865c78a7f4a97125d251bb650154fb1ef8964cf87a9ea3cc29ec14989c6c4c8d0cb8f14fe952e24ba4a376ca02a9f63df12c99f0f53d479853d8293138d8991a1971e29fd2a5c4974946ed940553ec7be25933e1ea7a8f30a7b0526271b1323432e3c53fa54b892e92869c4d95753f1ff02f342654748443cf0b68eaa3326482a5d78a7f4aa7125d24f5f9c0b5b7e4680bdb34af28686e6a1dc195fb0634c91f8bbf14fe955e24ba49d4b4a6f63d2ef8433335c0d05042b6bb2df01bcc399259578e29fd2acc497493922a737747c418b1e337e4201feb4ff606a45d584324ccef2c53fa55a892e9271454e6ee8f883163c66fc8403fd69fec0d48bab0864999de58a7f4ab5125d24e216af367ec768af309abf2ffff132257c5559b20dc934dfcc14fe956b24ba49c32d5e6cfd8ed15e61357e5fffe2644af8aab3641b9269bf9829fd2ad6497493865abcd9fb1da2bcc26afcbfffc4c895f15566c83724d37f3053fa55ac92e9270c418c0ca311a7fc3ca2bfa7f77fef53dd570fec6b49a8a261a7f4ab5a25d24e170f2a71f2f9b27b31124577e6f63ccfb55a6234d39352e8c44fe956b54ba49c2d1e54e3e5f364f662248aefcdec799f6ab4c469a726a5d1889fd2ad6a9749385a3ca9c7cbe6c9ecc44915df9bd8f33ed56988d34e4d4ba3113fa55ad52e9270b40565e844a3f65c405ef1e72fa844a5a57f5402999a98ea237f4ab5ab5d24e1670acbd08947ecb880bde3ce5f50894b4afea805333531d446fe956b56ba49c2ce1597a1128fd971017bc79cbea1129695fd500a666a63a88dfd2ad6ad7493859c2b2f42251fb2e202f78f397d42252d2bfaa014ccd4c7511bfa55ad5ae9270b38565e844a3f65c405ef1e72fa844a5a57f5402999a98ea237f4ab5ab5d24e167038cf6141552e0ac3ab030decfef2dcaa96c2af30531ee870e956b56ca49c2cdf719ec282aa5c158756061bd9fde5b9552d855e60a63dd0e1d2ad6ad9493859be6f4fddb22b1aadc678d25fabf2299aa5074d18be4c7d45c4a55ad5b39270b37b6ab214112c97de44be6ae74fdab15d44badc8d7998fc2f8a4ab5ab6824e166f5617680cf2f923f41499bf697abc0e28421fb76f031fa0315956b56d149c2cde94eff5a4b3587013a5ffe15274ddfed02f03949dd63f5aa2c2ad6ada393859bd12a110d434170852c8cc25246921e02008cb4efb7c7ecf85955ad5b48270b37a154221a8682e10a591984a48d243c04011969df6f8fd9f0b2ab5ab6904e166f4234568db9dc249769ffcf71123ed62ffcdf161adc1fb5856656b56d219c2cde8368ad1b73b8492ed3ff9ee2247dac5ff9be2c35b83f6b0accad6ada433859bd065d6c8f9446f4e05fcc03ec40f1b6e7ee289ac76d7ed7b99a5ad5b48770b37a0b46eb77d5644c437764ce0079d9cbf7d6fd77ead7fdb11735b5ab690fe166f41519e948579efb09a6966228eba9f617a8a73231acfb63d26c6b56d220c2cde82933d290af3df6134d2cc451d753ec2f514e646359f6c7a4d8d6ada441859bd05267a5215e7bec269a5988a3aea7d85ea29cc8c6b3ed8f49b1ad5b48830b37a0a45b5c9b69ce3acfec7fd76f55460ee53fe5d3e964db2037645ab69107166f414742cb8f8072d82290cc7506a2827bf27a77ea2ec6b64212c9b56d220f2cde828d11a977adbc12c7d965b0353cfb560cef9c16b98a6c85c9946ada441f59bd05192352ef5b78258fb2cb606a79f6ac19df382d7314d90b9328d5b4883eb37a0a3246a5deb6f04b1f6596c0d4f3ed5833be705ae629b2172651ab69107d66f41464195e161ab6f8c182fa47d1dfd10e8f778cf82850642ff0a456d220fbcde828c732bc2c356df18305f48fa3bfa21d1eef19f050a0c85fe148ada441f79bd0518e6578586adbe3060be91f477f443a3dde33e0a14190bfc2915b4883ef37a0a31c570309828e288ecf9f04b6f67ed2a3b714039e8021812923b69107df6f4146373a186bb1f2b3a0570acf95e4f4036f68d44998fd4303f6486d220fbfde828c6d00433010bbc9c365e26553c1de6506cc54d58df786099091da441f80bd0518d900866021779386cbc4caa783bcca0d98a9ab1bef0c132123b4883f017a0a31b2010cc042ef270d9789954f0779941b31535637de1826424769107e02f414636402198085de4e1b2f132a9e0ef3283662a6ac6fbc304c848ed220fc05e828c6c80433010bbc9c365e26553c1de6506cc54d58df786099091da441f80bd0518d900866021779386cbc4caa783bcca0d98a9ab1bef0c132123b4883f017a0a31b2010cc042ef270d9789954f0779941b31535637de1826424769107e02f414636402198085de4e1b2f132a9e0ef3283662a6ac6fbc304c848ed220fc05e828c6c80433010bbc9c365e26553c1de6506cc54d58df786099091da441f80bd0518d90012727a2469e94e7c976dabb4c06bc0a4575e4b091322c7b5883f017b0a31b1ff24e4f448d3d29cf92edb576980d78148aebc961226458f6b107e02f6146363fe49c9e891a7a539f25db6aed301af02915d792c244c8b1ed620fc05ec28c6c7fc1fa629d025acf69c8833859df9bc2d1d6734b4459917e1ad41f80bd9518d8ff73f4c53a04b59ed3910670b3bf3785a3ace69688b322fc35a83f017b2a31b1fee0aaaffed6d165d29ed943e6fdd4edc7049152d1364612ab607e02f6646363fdb1555ffdada2cba53db287cdfba9db8e0922a5a26c8c2556c0fc05ecc8c6c7fb62aabffb5b45974a7b650f9bf753b71c12454b44d9184aad81f80bd9918d8ff6c5557ff6b68b2e94f6ca1f37eea76e38248a9689b230955b03f017b3231b1fed836c25783a7c85556a60a0ef5cb4beeff3d952d3346144f617e02f6656363fdaf6d84af074f90aaad4c141deb9697ddfe7b2a5a668c289ec2fc05eccac6c7fb5e671bb6bb7583d81264ee63cf238de3f7a29710ca1852e186f80bd9968d8ff6bb5a49c623c16a32dc96a2ef963d79efe9f1707d9130a7670ef017b32e1b1fed7540a5e4f45936e870fa0c0724715207ce8f23571f6150721ee02f665d363fdae90d5e229588d05399c0de3640d9023797ca890a3bc2a2883ec05eccbb6c7fb5d11abc452b11a0a73381bc6c81b2046f2f951214778545107d80bd9976d8ff6ba235788a5623414e670378d9036408de5f2a2428ef0a8a20fb017b32edb1fed7446af114ac46829cce06f1b206c811bcbe544851de151441f602f665db63fdae8861f482056367bc53daa98c058681a17754d2ffb92a2a27ed05eccbb7c7fb5d0f4ffb5cb79d31fb5f8219400303616ae955e85b6f5455f3db0bd997708ff6ba1d2c09121c10c67976d0f8a7fdfd20fdcd581312dba8ad8bb717b32ee21fed743958122438218cf2eda1f14ffbfa41fb9ab02625b7515b176e2f665dc43fdae8723c36a11d197c689310a8c7efeae21f300c8ea76ba2b7d2dd5eccbb897fb5d0e3047f9ae7095b53ddee17b7d7cc22665ac55faad4457149bbbd997713ff6ba1c508ff35ce12b6a7bbdc2f6faf9844ccb58abf55a88ae293777b32ee27fed7438a11fe6b9c256d4f77b85edf5f3089996b157eab5115c526eef665dc4ffdae871423fcd7384ada9eef70bdbebe611332d62afd56a22b8a4dddeccbb89ffb5d0e2847f9ae7095b53ddee17b7d7cc22665ac55faad4457149bbbd997713ff6ba1c501c05b58e01ccfe758fbd22f17aaaf3535837b685ae2adb78b32ee280ed74389f380b6b1c0399fceb1f7a45e2f555e6a6b06f6d0b5c55b6f1665dc501dae8713e7016d6380733f9d63ef48bc5eaabcd4d60deda16b8ab6de2ccbb8a03b5d0e27c6c40051ce4ca76644aaf3f83cbb5c2956e00102a71587fc6997714086ba1c4f7649262e69ff76f806224a6ff8dc9ad2588427c51e2b2a38e32ee2811d74389ed55371e7a165161b8910f75f711f18245bcc754a0c566eb1d65dc5024ae8713d9368095a103054628eee513e61a412c8625d1053e8acf7a3bcbb8a04a5d0e27b16d012b42060a8c51ddca27cc3482590c4ba20a7d159ef47797714094ba1c4f626614af30e2779b5b885a77905f62da13438670f72b3f8cf02ee2812a74389ec3583bb70e9b51b96edd7b1718b523dc21334f3deb5680bde15dc50255e8713d853c89c6ca0d05f59587bc562960a5e03d12e0d7d3ad031fc3bb8a04acd0e27b090525e640f06e6de2dc3ed44ab7a9e874d2040ba45a07e3887714095aa1c4f6110a4bcc81e0dcdbc5b87da8956f53d0e9a4081748b40fc710ee2812b54389ec2214979903c1b9b78b70fb512adea7a1d348102e91681f8e21dc50256a8713d844292f320783736f16e1f6a255bd4f43a690205d22d03f1c43b8a04ad50e27b088525e640f06e6de2dc3ed44ab7a9e874d2040ba45a07e3887714095aa1c4f611030cf20cae4303f1354a0b14eeb9b3694ecc3d08840fe150fe2812b55389ec21f619e4195c8607e26a941629dd7366d29d987a11081fc2a1fc50256aa713d843e4f4edbd867237f051f48ed33a4cb024e5f519e1e03f9f8408a04ad55e27b087b2ab0105da4a980c20b58025f3ff42c976ae5983907f5948214095aacc4f610f5556020bb4953018416b004be7fe8592ed5cb30720feb29042812b55989ec21ea36d29a23690885bffa263174f62eda5857d8bce11fd7f60950256ab413d843d36da53446d2110b7ff44c62e9ec5db4b0afb179c23fafec12a04ad56827b087a6675cc13a7a8499b7b55eedcbcf19915c0ba54f817f617c264095aad14f610f4b5acbdb21cb6bb6273784038f94914ab2c38cfafffec49c4d812b55a39ec21e9541aa0ef06d39ef063bce2f171f80bd60335c51fcfd8adc9c0256ab483d843d290f66768db0d660c444628626355fa2bb12fafff6fb175d3904ad56917b087a511ecced1b61acc18888c50c4c6abf457625f5ffedf62eba72095aad22f610f4a23d99da36c3598311118a1898d57e8aec4bebffdbec5d74e412b55a45ec21e94407460d1a5d1588d9efda5929a15b3dd3441a5bb4d8bc8dc9256ab48cd843d2870e8c1a34ba2b11b3dfb4b25342b67ba68834b769b1791b924ad56919b087a50e1d18346974562367bf6964a6856cf74d10696ed362f2372495aad233610f4a1c3a3068d2e8ac46cf7ed2c94d0ad9ee9a20d2dda6c5e46e492b55a466c21e943800732a52a7bb1056ca6bba920c12052eede8174a8bca809356ab48ce843d286f00e654a54f7620ad94d7752418240a5ddbd02e9517950126ad56919d087a50de01cca94a9eec415b29aeea48304814bbb7a05d2a2f2a024d5aad233a10f4a1bc039952953dd882b6535dd490609029776f40ba545e54049ab55a467421e943780732a52a7bb1056ca6bba920c12052eede8174a8bca809356ab48ce843d286f00e654a54f7620ad94d7752418240a5ddbd02e9517950126ad56919d087a50de01cca94a9eec415b29aeea48304814bbb7a05d2a2f2a024d5aad233a10f4a1bc039952953dd882b6535dd490609029776f40ba545e54049ab55a467421e943780732a52a7bb1056ca6bba920c12052eede8174a8bca809356ab48ce843d286f007266fdfc4c83304ca43b4c101a6885d67c70f1149502caae56919d097a50ddff70e054a56f68e351153cc0182b2f33a7a5243e262a07395dad233a13f4a1bbfd6dd301f7b5344959f73fa8284cbc8f49f68ad849541016bc5a467428e94377f967b85c9c40cb156bbb4578488fd7468e99580c8fa821d179b48ce852d286eff15b8311e557f8ad8f43511889160cb517def2751c504546f46919d0a6a50ddfe143187c778653ddd65368590a2277922a6a274635a08c31e9d233a14e4a1bbfc11243519be30a3e647396da0c3b4d4c4f8090e868411a07d4a467429d94377f812486a337c6147cc8e72db418769a989f0121d0d082340fa948ce853b286eff02490d466f8c28f991ce5b6830ed35313e0243a1a104681f52919d0a7650ddfe041e2ce58beeb475db697cf859d0c88a76b0c99f3f08d1e2a6233a14eda1bbfc073c59cb17dd68ebb6d2f9f0b3a19114ed61933e7e11a3c54c467429db4377f80e04c5eedc91345a2572ba095f398051d56f68d8f923492e998ce853b786eff01b098bddb92268b44ae57412be7300a3aaded1b1f246925d3319d0a76f0ddfe0361317bb7244d16895cae8257ce6014755bda363e48d24ba6633a14ede1bbfc06c262f76e489a2d12b95d04af9cc028eab7b46c7c91a4974cc67429dbc377f80d84c5eedc91345a2572ba095f398051d56f68d8f923492e998ce853b786eff01b024d0343efcedc766240753df266862a8995d7b21692777329d0a76f1ddfe035f49a0687df9db8ecc480ea7be4cd0c55132baf642d24eee653a14ede3bbfc06be1f5329a8ca19a0505ce377748fffb29d11b84882a49f80cb7429dbc877f80d7b3ea65351943340a0b9c6eee91fff653a23709105493f0196e853b790eff01af6095eff4ffec903f9405405ca365cf26ef3237e07927fa72ed0a76f22dfe035eb12bdfe9ffd9207f280a80b946cb9e4dde646fc0f24ff4e5da14ede45bfc06bd6257bfd3ffb240fe501501728d973c9bbcc8df81e49fe9cbb429dbc8b7f80d7ac4af7fa7ff6481fca02a02e51b2e79377991bf03c93fd3976853b7916ff01af5822024dacc2f2c24bd206849b5c2d4ee9de7a3c7627fc16ee0a76f22efe035eaf44049b5985e58497a40d0936b85a9dd3bcf478ec4ff82ddc14ede45dfc06bd5e141b8f5fe22d8be714e03a65671363a2262b4dd59ff1ffb929dbc8bcf80d7abb28371ebfc45b17ce29c074cace26c7444c569bab3fe3ff7253b79179f01af576506e3d7f88b62f9c5380e9959c4d8e8898ad37567fc7fee4a76f22f3e035eaec2ceed3abe7cee1f073c7fb232ef9450bdd9ccaa9ff91a1ca4ede45e8c06bd5d759dda757cf9dc3e0e78ff6465df28a17bb399553ff2343949dbc8bd180d7abae3fcda75c759e0a799be61484b2433c2a22b586a4fe482b2a3b7917a401af575b0bada765c19e97ab049251015ae4a04ef1ad6946fc91fa5576f22f49035eaeb5175b4ecb833d2f560924a202b5c9409de35ad28df923f4aaede45e9206bd5d6a2eb69d97067a5eac124944056b92813bc6b5a51bf247e955dbc8bd240d7abad45d6d3b2e0cf4bd582492880ad72502778d6b4a37e48fd2abb7917a481af575a846eccf08f04bfd6815eb380da4a82ce9c718f06cc92149586f22f49135eaeb4f19ebf6beb6fa7d87f89c98133fae81ce3a743cd6924436b1de45e9236bd5d69d33d7ed7d6df4fb0ff13930267f5d039c74e879ad24886d63bc8bd246d7abad3a67afdafadbe9f61fe272604cfeba0738e9d0f35a4910dac77917a48daf575a745b720ea28e366ef791aae891f3d2366c7fe442b19223598ff22f491c5eaeb4e742f675f1f2cf60a6f01bf91bde0294d3ac0ae16024485720e45e9239bd5d69cd11ff4490bc014405acfe1a2fb26351a204581ebd48925242c8bd24747abad39923fe89217802880b59fc345f64c6a34408b03d7a9124a485917a48e8f575a73247fd1242f0051016b3f868bec98d468811607af52249490b22f491d1eaeb4e641c0c7d32b66ca2e534b6f9758978b50acf0351e74494361745e923a4d5d69cc73818fa656cd945ca696df2eb12f16a159e06a3ce89286c2e8bd24749abad398e7031f4cad9b28b94d2dbe5d625e2d42b3c0d479d1250d85d17a48e93575a731c6c76424289c799e1727df3a44223d051245ceb3724a354bb2f491d27aeb4e63764fedd31e9f1b67ab1c20f407aa5c89cf4fc326b49484d775e923a505d69cc6d56101310aa45efad304a4678eba9b934963ac0d392923eefbd2474a1bad398d938327ece2aee62122d5ab4e9cdb19a63d8b7dda4252621e07a48e94475a731b17064fd9c55dcc4245ab569d39b6334c7b16fbb484a4c43c0f491d288eb4e63626cdc53e5821c0b008230fb9f2d24918a0f21d28d949a2b82e923a512d69cc6c365cb0077da9a98b8d1281f3650a74b0eca8601182935fb06d2474a26ad398d8557a8599c8b97b4296f16666497acbe18414e5e2d526d9a0ea48e944e5a731b093b630be5ed91eb0aaaf2f4c125b7a42b2edf1857a4dcd81e491d289db4e6361102d87078b18658cd22ac117a41cd70510a008cac49bb543d923a513c69cc6c2105b0e0f1630cb19a455822f4839ae0a2140119589376a87b2474a278d398d8420b61c1e2c61963348ab045e90735c144280232b126ed50f648e944f1a731b08416c383c58c32c66915608bd20e6b8288500465624ddaa1ec91d289e34e6361082d87078b18658cd22ac117a41cd70510a008cac49bb543d923a513c69cc6c2105b0e0f1630cb19a455822f4839ae0a2140119589376a87b2474a278d398d8420422e76d937f8b60077ca868869ba3c3d2c65870f6ed6b3658e944f1b731b083f106f465f4653eeb8bc5b3508c9d2a075050d6a1bddaf0acc1d289e37e636107d20de8cbe8ca7dd7178b66a1193a540ea0a1ad437bb5e15983a513c6fcc6c20fa41bd197d194fbae2f16cd423274a81d41435a86f76bc2b3074a278df98d841f40f8c8ba70901f87daf9fd03e44f32ba2d4adacdbed79fa61e944f1c031b083e71f19174e1203f0fb5f3fa07c89e65745a95b59b7daf3f4c3d289e380636107ce3e322e9c2407e1f6be7f40f913ccae8b52b6b36fb5e7e987a513c700c6c20f9c0876b5e51e7246a549c4a9ea1df7851151afc2dc6bd177104a278e028d841f3710ed6bca3ce48d4a938953d43bef0a22a35f85b8d7a2ee20944f1c051b083e6e21dad79479c91a952712a7a877de144546bf0b71af45dc41289e380a36107cdc43b5af28f392352a4e254f50efbc288a8d7e16e35e8bb882513c70146c20f9b8137db6febd86ed0c6910c699d5d6790fc73e89c3bd191505a278e029d841f36f26fb6dfd7b0dda18d2218d33abacf21f8e7d13877a322a0b44f1c053b083e6de4df6dbfaf61bb431a4431a675759e43f1cfa270ef464541689e380a76107cdbc280010a2c299eb1b154c5cc6a511f078e636aa1ae8ca4c2e13c7014fc20f9b77500021458533d6362a98b98d4a23e0f1cc6d5435d194985c278e029f841f36ee2c129b37e0ca2f2421f79b128aa5e9de451d0468a32ad4b94f1c0540083e6ddb5825366fc1945e4843ef3625154bd3bc8a3a08d14655a9729e380a80107cdbb63c5cc58c598b3f4854a4944220f5cf73c0b66d9f8cacf6e63c70150120f9b76b04cbe3c589790148760f507c3849c6e22daf373c195b91cd78e02a0341f36ed50997c78b12f20290ec1ea0f870938dc45b5e6e7832b7239af1c0540683e6ddaa132f8f1625e40521d83d41f0e1271b88b6bcdcf0656e4735e380a80d07cdbb54265f1e2c4bc80a43b07a83e1c24e37116d79b9e0cadc8e6bc701501a0f9b76a84cbe3c589790148760f507c3849c6e22daf373c195b91cd78e02a0341f36ed50258ed15e0582abc68eb0377eff970440622943802b73ddb01c0540693e6dda9f4b1da2bc0b05578d1d606efdff2e0880c452870056e7bb60380a80d27cdbb53e224d9e24ec6d31d2078705f3f4ba38fc34e769fdadd11ac1701501a5f9b76a7b449b3c49d8da63a40f0e0be7e97471f869ced3fb5ba23582e02a034bf36ed4f61548d140881749ffeae23fc7c9470beb7fe003f3b7460f06c0540698e6dda9eb2a91a281102e93ffd5c47f8f928e17d6ffc007e76e8c1e0d80a80d31cdbb53d655234502205d27ffab88ff1f251c2fadff800fcedd183c1b01501a639b76a7ac3658e2b1171cd2b723d8263640968756ab427b9aba321c3702a034c836ed4f576cb1c5622e39a56e47b04c6c812d0ead5684f7357464386e054069906dda9eae6575e37132d5cd945c26c0d0f8b84555594c4a67e8ca14dd0a80d321dbb53d5b56fe1f8f3c0e1de08513a999e7ceb2a55edaf0ccd195cdbb1501a644b76a7ab53a0e97cb4e7ebe78d6ed7b2bc5fb8d4569f83d96a32d3f772a034c8a6ed4f569002f8843735fffa97aa11e4f825542858032d72a465c22ef54069915dda9ead1005f1086e6bfff52f5423c9f04aa850b0065ae548cb845dea80d322bbb53d5a200be210dcd7ffea5ea84793e09550a1600cb5ca919708bbd501a645776a7ab44017c421b9afffd4bd508f27c12aa142c0196b95232e1177aa034c8aeed4f568802f8843735fffa97aa11e4f825542858032d72a465c22ef54069915dda9ead1005f1086e6bfff52f5423c9f04aa850b0065ae548cb845dea80d322bbb53d5a200be210dcd7ffea5ea84793e09550a1600cb5ca919708bbd501a645776a7ab44017c421b9afffd4bd508f27c12aa142c0196b95232e1177aa034c8aeed4f568802f8843735fffa97aa11e4f825542858032d72a465c22ef54069915dda9ead1005f1086e6bfff52f5423c9f04aa850b0065ae548cb845dea80d322bbb53d5a2004a33667a566128a2513f66014b683dfb779f0516708d61511a645777a7ab43ff207925a18324d3fc6f44f3fa8d2ea3f19b806629e11c66a334c8aef04f5687fd40f24b430649a7f8de89e7f51a5d47e33700cc53c238cd4669915de09ead0ffa0df6ef32e2f5d2a989d9f7e22b18b7c11a43f4a484733e8dd322bbc23d5a1ff31bedde65c5eba55313b3efc456316f823487e94908e67d1ba64577847ab43fe637dbbccb8bd74aa62767df88ac62df04690fd29211ccfa374c8aef08f5687fcc6fb7799717ae954c4ecfbf1158c5be08d21fa5242399f46e9915de11ead0ff986b814bdb05bfad506a65a61aa7e9a40c5081a64547358cde322bbc24d5a1ff2f6314f062e1e1dd58a191742d463170134d45a8878e6cbdbd6457784aab43fe5d523c39729a263d690fe9105282c1082146cdad0c1cdb1f7bc8aef0965687fcb9308acb920aaefd89ec98489cfbe0383d39ddb61539b7e2f8915de12dad0ff97161159724155dfb13d9309139f7c0707a73bb6c2a736fc5f122bbc25b5a1ff2e24e3d86f5011e78df7f274a6be5df08ef93b93451e6e12fe3457784b7b43fe5c3288d6696d89f7476cb14bccfc21c39d9d3b4c4a0cdc403c78aef0970687fcb85511acd2db13ee8ed9629799f843873b3a76989419b88078f15de12e0d0ff970a2e47f30838e05492f9191b36fecf0f61fb156e803711b31f2bbc25c2a1ff2e135c8fe61071c0a925f232366dfd9e1ec3f62add006e23663e57784b8543fe5c26453224cdb9e3d503b12a94d3f19a6582989815fddc48707daef0970b87fcb84b1676a2484a2a2cbf2f1b519fd992f2ffdd7287f8b89284fc5de12e180ff970952ced44909454597e5e36a33fb325e5ffbae50ff1712509f8bbc25c301ff2e12a59da892128a8b2fcbc6d467f664bcbff75ca1fe2e24a13f17784b8603fe5c2543fc76aef27b3e8b145a0b4f6c2f5bff997d69bc2c495cbe3ef0970c17fcb84a70ba12e8b25ca541a580791e57c49a7eddbef9382892d3bc8de12e183ff97094d17425d164b94a834b00f23caf8934fdbb7df2705125a7791bc25c307ff2e129a2e84ba2c97295069601e4795f1269fb76fbe4e0a24b4ef23784b860ffe5c25345d0974592e52a0d2c03c8f2be24d3f6edf7c9c144969de46f0970c1ffcb84a684625415f3307c45d4d3f464fbaf8a6d86b3b942592d5608ee12e1840f97094cf185cdb6b3c720b726744b4976c4f75ab82b9844825ac651ec25c3082f2e1299d30b9b6d678e416e4ce89692ed89eeb57057308904b58ca3d84b86105e5c2533a61736dacf1c82dc99d12d25db13dd6ae0ae6112096b1947b0970c20bcb84a6744ef93406b9f2de4b06ebccb358d9d556c20e7e3e2d64ccf712e1841897094ce72a04c0ba4a483f4dda9dc15ea811d2a8305f58795acb3def25c308322e1299cd5409817494907e9bb53b82bd5023a55060beb0f2b5967bde4b8610645c25339a34255b95ff837fef373d2d7296a5729b6dbfbde26b2e9bbd970c20c9b84a6733684ab72bff06ffde6e7a5ae52d4ae536db7f7bc4d65d377b2e1841937094ce665ca7c704d4708274a9baddc250f3f26863415386acbc12f75c308327e1299ccb4561e6b67f4387a1203be37c98460ccb72c5030a5979c9efb8610650c253399516d62619d4e991fa0d3deef126ea419191cc6211b2f537e070c20ca284a673292dac4c33a9d323f41a7bdde24dd483232398c42365ea6fc0e1841945094ce6525b58986753a647e834f7bbc49ba9064647318846cbd4df81c308328a1299cca442c3897b7daf128836b59f812db034873aa56c8a97ab6304861065152533994711996ba3d1c0a7c83a3166fa51be9109218d35122f586a0a0c20ca2b4a67328d2332d747a3814f907462cdf4a37d2212431a6a245eb0d4141841945694ce651a4665ae8f47029f20e8c59be946fa44248634d448bd61a828308328ad299cca3418ddb5cb6467c0f99e515fca8452b043b8ac048e7ac4f4516106515b5339946731bb6b96c8cf81f33ca2bf9508a560877158091cf589e8a2c20ca2b6a67328ce6376d72d919f03e679457f2a114ac10ee2b01239eb13d1458419456d4ce6519c53000707f9a08a84bf51264c18f3aa1871a28070d629468c08328adb99cca337321266bcc9a397c14b68749028457c2b8f875cdeac543119106515b83399466d6424cd7993472f8296d0e920508af8571f0eb9bd58a8623220ca2b7067328cda545bf39ffcf0e1bcfa67fa38977418a8ea5fcf77b1526865419456e1ce6519b334ca3fecd0444631c1961c692546594c8101faec62a674cb8328adc49cca336569947fd9a0888c63832c38d24a8cb2990203f5d8c54ce99706515b89399466ca5f3b586017739b7ed31e999c8b778d2cb04a47ae8a9b772f0ca2b7137328cd934a89096d0549b9b573035b310d4d42540cd6eb5a1538925f19456e27e6519b2521246b86e0f5f622b2ccde5a10f8aca2c5f032b12a72c8bf328adc50cca336494248d70dc1ebec456599bcb421f159458be0656254e5917e6515b8a199466c9210a406c85a3a5b4297f9a1603a40da85c40326c1a9ccc6fdca2b7144328cd92321480d90b474b6852ff342c07481b50b88064d8353998dfb9456e2886519b24642901b2168e96d0a5fe68580e9036a17100c9b06a7331bf728adc510ca33648c11328eefa8355ccc8c9332f9c864fc28cc5b920a4e67dbef515b8a229466c91722651ddf506ab999192665f390c9f85198b724149ccfb7dea2b7144528cd922e44ca3bbea0d57332324ccbe72193f0a3316e4829399f6fbd456e288a519b245c15a6d02a180d691c315fbfc6398609410f1eec4f7340837b8adc5115a33648b72b4da054301ad23862bf7f8c730c12821e3dd89ee68106f715b8a22b466c916e569b40a86035a470c57eff18e61825043c7bb13dcd020dee2b7144568cd922dc3948d9fd96cdcb9957c42629c28e72032539be789a05bfdd56e288ae19b245b77291b3fb2d9b9732af884c53851ce4064a737cf1340b7fbaadc5115c33648b6e7135c0a33199b11d2bd6c09f0097f007412955df6818a3765b8a22b966c916db6e7dd9f33995e4f22473a935f78e08092e9507bbd032eaedb7144573cd922db5690e0c93498e4c9c15ad7a63e57a380d096c6b74a06779dc6e288ae89b245b695e2e71d3697f1beff8211cbfc1529814bf1b32e640d097b9dc5115d23648b6d1486f3c53a960ba97bd086177790358242a78c1c981a2d374b8a22ba56c916da11cf0d1542923f7e746d6eae6e864d8430133df9003474aea7144574bd922db4139e1a2a85247efce8dadd5cdd0c9b0860267bf20068e95d4e288ae97b245b68273c34550a48fdf9d1b5bab9ba193610c04cf7e400d1d2ba9c5115d2f648b6d047398e34e1f8241f2037d7f2f3984ea12b5e1587d1a3bfb548a22ba5fc916da0773441f491567069bd3c126566967fc2018050cf734799aaa144574c0922db40d729a973f01308fef744874a4c92e203adc4c75eb68f4d955288ae982245b68197147872ad8c3a296b557114188ba687064db47d3d1eb56ab5115d30548b6d0316ea1670287e9c7e537744a7b07d2f8db75f8eba4a3d85157a22ba60b916da061695526b1e63612823baebcee060419b19834334647b246b044574c1822db40c15ebca610a2cea7bc4423a1d402665b5ddcaac2898f66316188ae983145b68181498ba4ce1bffd230550d6b9ffb2adeb66597e1101ece06c4115d30638b6d03011f29a2490e62271876e0ff37ecb3e56777721e1d3d9db18922ba60c816da06013e5344921cc44e30edc1fe6fd967caceeee43c3a7b3b63124574c1902db40c0208b8e1d10feb1f19a84a24d7a92dbd988a0ad471f6786a258ae983215b6818031171c3a21fd63e33509449af525b7b311415a8e3ecf0d44b15d30642b6d0300622e387443fac7c66a128935ea4b6f662282b51c7d9e1a8962ba60c856da0600c45c70e887f58f8cd425126bd496decc45056a38fb3c3512c574c190adb40c01817a075bdd514745251687572893a01834cefa31c67884659ae983216b681802f2f40eb7baa28e8a4a2d0eae51274030699df4638cf108cb35d30642d6d03005e5e81d6f75451d14945a1d5ca24e8060d33be8c719e211966ba60c85ada0600bc4916069b7f06254a5809d38c402e341513bf74e03c43d6ce74c190b6b40c01771e3e65e3d46ecd4c7cd9cf1076ba9024d3c145bd7889519de983216e681802ed3c7ccbc7a8dd9a98f9b39e20ed752049a7828b7af112a33bd30642dcd03005da050bf03c281db7e9c02d6439d148688dfb4772f2e226ea78a60c85baa0600bb30a17e078503b6fd3805ac873a290d11bf68ee5e5c44dd4f14c190b7540c01766142fc0f0a076dfa700b590e74521a237ed1dcbcb889ba9e2983216ea81802ecc285f81e140edbf4e016b21ce8a43446fda3b9797113753c530642dd503005d9850bf03c281db7e9c02d6439d148688dfb4772f2e226ea78a60c85baa0600bb302d906031da197fefd272af321f6b39ba1530ba5944def315c190b7550c01765f5b20c063b432ffdfa4e55e643ed673742a6174b289bde62b83216eaa1802ecbe4253d9743ec882771690e4c0740b0ee301054562137d70580642dd553005d97b10ba0b9553f387a5f9e7f178de7445c0ae4ce6c126fc84b10c85baab600bb2f52174172aa7e70f4bf3cfe2f1bce88b815c99cd824df90962190b7556c01765ea42e82e554fce1e97e79fc5e379d11702b9339b049bf212c43216eaad802ecbd411e2b55775febfe79c05b3beea0056001ea9920637e5c989642dd55c005d97a723c56aaeebfd7fcf380b677dd400ac003d53240c6fcb9312c85baab800bb2f4e478ad55dd7faff9e7016cefba80158007aa64818df97262590b7557001765e9c1b280368865881f4acf3c5ef4660d7fba18eec2ebf2ff04c216eaae102ecbd37365006d10cb103e959e78bde8cc1aff7431dd85d7e5fe09842dd55c205d97a6e6ca00da2196207d2b3cf17bd19835fee863bb0bafcbfc13085baab840bb2f4dc655273f10926925d346457722964e7d7b8b9bd72f98126620b7557091765e9b756b7408ee8afa772358ed6dc4927f7aa1db5d6e2f303f0c516eaae132ecbd36d3980d9caa7c1d19c37e3d5b088ae174ee7ae09c2e609858b2dd55c275d97a6d97301b3954f83a3386fc7ab61115c2e9dcf5c1385cc130b165baab84ebb2f4db27215bfd77569c928ac557eba191685364afa83089827ba2db755709e765e9b63703dd85bc13615092571256c288b32674237620e3051185c6eaae13decbd36c56c8e096458ceacca17a872d047748cc930b1201960a3d4b9dd55c27cd97a6d89652e6b7587ffdc4bfc170d988547418d0da49c2fc1494d74baab84fab2f4db11566f2f97e6623b4fc4f4432900ecab14c78b945c82943eea755709f665e9b62138f0b7dca326f95756aeae49f8377e243b5984b6052a21d5eaae13edcbd36c4171e16fb9464df2aead5d5c93f06efc4876b3096c0a5443abd55c27db97a6d8826fd5381f62fe68152780e11fd73c208b99a86ed514aa2b58aab84fb82f4db1036bbcc8eb9c5f52e21bc7ea37a4d66911df9339a72955fab255709f715e9b6205638bea840f21287c0455fc67400afa1e6b68cf4b52ad9965aae13ee3bd36c409532a2db4f4a4d3afd57220c676741c378313fa93a55cd6cc55c27dc87a6d88113266b416bfac2a1777aa6984e3466069b26a51244abb5199ab84fb91f4db102164cd682d7f58542eef54d309c68cc0d364d4a2489576a3335709f723e9b6204255ad2907d5132b15ab6fce0b8377a9a175eba08e2aeeea67ae13ee48d36c4083376caabc8088d8e323a5c40efd4d7b3d98199d1955df78d05c27dc92a6d881056ed955790111b1c6474b881dfa9af67b30333a32abbef1a0b84fb9254db1020a69c5039ed885e6445b5d3833eb9414f10ca8d062577f8742709f724b9b6204135f9c5fea876e4f408380985fcd8651dcc593fcc1af00b285e13ee49836c408254b4b1881e53f2138d3c758b7916acbb4376a55805e03090cc27dc9316d88104922a889b0a0e0c5297454d9671933bf631b1706fdbc07b61a84fb9263db1020914551136141c18a52e8a9b2ce32677ec6362e0dfb780f6c3509f724c7b620412216b47f6f59e5975d9e198d945b2d2587189e77f3f0207c6b13ee49906c4082432d68fedeb3cb2ebb3c331b28b65a4b0e313cefe7e040f8d627dc9320d88104865ad1fdbd67965d76786636516cb4961c6279dfcfc081f1ac4fb92641b102090c41b65427a58f3da4bd92949acfc7543371361b9c810587599f724c84620412170f7f00fc2180fe0147eb512d95ecd0618eae9336020cb2b43ee49909c408242d1efe01f84301fc028fd6a25b2bd9a0c31d5d266c041965687dc932138810485a3dfc03f08603f8051fad44b657b341863aba4cd80832cad0fb926427102090b4080a608de26a72c20c20b164a5c4ab0721b6f5ad106739a2f724c84f204121671014c11bc4d4e584184162c94b89560e436deb5a20ce7345ee49909e408242ce2029823789a9cb083082c5929712ac1c86dbd6b4419ce68bdc93213c8104859c4053046f1353961061058b252e2558390db7ad688339cd17b926427902090b380cb8618afd09aed88ed13e4252a8d86cc7b1b6ce06753e30724c84f30412166f1970c315fa135db11da27c84a551b0d98f636d9c0cea7c60e49909e608242cde32e1862bf426bb623b44f9094aa361b31ec6db3819d4f8c1c93213cc104859bc65c30c57e84d76c47689f2129546c3663d8db67033a9f183926427982090b3785798715ca6fd7040b9da0c1d20ebaec7275dc8dd6755870824c84f31412166ef3b433b66245d6339407a403238358588fafdedb7ceacb21149909e638242cddd0298cf791f1d492a4dbaa85c66c9330ca23e376c9d5b082393213cc804859bb905319ef23e3a92549b7550b8cd926619447c6ed93ab6104726427990090b37720a633de47c7524a936eaa1719b24cc3288f8ddb2756c208e4c84f32012166ee414c67bc8f8ea49526dd542e33649986511f1bb64ead8411c9909e640242cddc8298cf791f1d492a4dbaa85c66c9330ca23e376c9d5b082393213cc804859bb905319ef23e3a92549b7550b8cd926619447c6ed93ab6104726427990090b37720324636f49db4cd4b3b703f11a8aaeb233bd0372456c3ace5c84f32022166ee3f648c6de93b699a9676e07e235155d64677a06e48ad8759cb909e640442cddc7e552b347f4d35b7e4ba87243e9909d4879b83388e5b105798213cc809859bb8fb3668c1ab70cdf28141d470752871d109e348cd19b6225331427990140b3771f56cd18356e19be50283a8e0ea50e3a213c6919a336c44a66284f32028166ee3ea65b55f5a999a4cbcd417e9cc98256c2239659063d88af0c609e640512cddc7d3577d176209971c3174f5fb9126a9003f1f0d7cc4b117858d13cc80a359bb8fa53b0c8770e990bb1ab6b21f1a43b02878ea5d55866230af1b27990147b3771f49022b678ea983f8ed3a2a662c7dbe78ec80fd0709c46302374f32029066ee3e910456cf1d5307f1da7454cc58fb7cf1d901fa0e1388c6046e9e640520cddc7d2208ad9e3aa60fe3b4e8a998b1f6f9e3b203f41c27118c08dd3cc80a419bb8fa44115b3c754c1fc769d1533163edf3c76407e8384e231811ba799014833771f48822b678ea983f8ed3a2a662c7dbe78ec80fd0709c46302374f32029066ee3e910456cf1d5307f1da7454cc58fb7cf1d901fa0e1388c6046e9e640520cddc7d22016ec3c573760be06575fb31765fc631aeb841e6e18c231d4cc80a41abb8fa43f2dd878ae6ec17c0caebf662ecbf8c635d7083cdc318463a999014835771f487e5bb0f15cdd82f8195d7ecc5d97f18c6bae1079b86308c7533202906aee3e90fc43743b66916872ea87c3c0b3264140d208634f6dc61332a7640520d6dc7d21f712facf79f933688cdc4da95e42e0a99ebd08fad88c28094fc80a41aeb8fa43ed25f59ef3f266d119b89b52bc85c1533d7a11f5b11850129f9014835d71f487da4beb3de7e4cda2337136a5790b82a67af423eb6230a0253f202906bae3e90fb423e8d47c9ffdc71eaf3372ea0d6374f0948a32c16141ee7f40520d76c7d21f6747d1a8f93ffb8e3d5e66e5d41ac6e9e129146582c283dcfe80a41aed8fa43ece1bb5aa9f56599f328993f3a02bebfbbcfe6b270285095dfe014835dc1f487d9b376b553eacb33e651327e74057d7f779fcd64e050a12bbfc02906bb83e90fb366ed6aa7d59667cca264fce80afafeef3f9ac9c0a142577f80520d7707d21f66c69bfada7892f7c4c1965c4f955be05e29f9b9411284c93f10a41aee1fa43ecd75f91b3fbe8c17b4fff91b1eaa1da33bfeb79841f509acbe314835dc4f487d9ad4b35c0a4a7e57957cbe98bcd3a128f7a8335643ba1373bc72906bb8ae90fb359227dd9f6262d756764993f926a8346efb2ad247442701b8f520d7716d21f66b144fbb3ec4c5aeacec9327f24d5068ddf655a48e884e0371ea41aee2da43ecd621609c0856f1858555f2b2641a06b43b976f6edce09c2123e4835dc5c487d9ac32c13810ade30b0aabe564c8340d68772ededdb9c1384247c906bb8b890fb358658270215bc6161557cac990681ad0ee5dbdbb738270848f920d7717121f66b0c3c605cd84f254562c61f5a04f9b845c663f9ca6d4e1235f341aee2e343ecd61704d3125d74ad0d7d5904dc01e9ceb3877435f0d79c260fe7835dc5c787d9ac2d09a624bae95a1afab209b803d39d670ee86be1af384c1fcf06bb8b8f0fb3585a134c4975d2b435f564137007a73ace1dd0d7c35e70983f9e0d77171e1f66b0b4269892eba5686beac826e00f4e759c3ba1af86bce1307f3c1aee2e3c3ecd61684d3125d74ad0d7d5904dc01e9ceb3877435f0d79c260fe7835dc5c787d9ac2d02674a45b6c043262ed61a835303498e9330076f084c3a0f16bb8b8f1fb35859f4ce948b6d80864c5dac3506a606931d26600ede1098741e2d77171e3f66b0b3e25e4ea1a86734c43824cc8ccb7308b9f784437bf131027c6aee2e3c8ecd6167b4bc9d4350ce69887049991996e61173ef0886f7e26204f8d5dc5c791d9ac2cf623a60116f02fb3c5d5f94b2ad32056788d533af94c42431bbb8b8f24b35859eb474c022de05f678babf29655a640acf11aa675f29884863777171e4966b0b3d61aaa5d08972151cf24ab54a342df81dce18f47e2310ab06fee2e3c93cd6167ab3554ba112e42a39e4956a94685bf03b9c31e8fc4621560dfdc5c79279ac2cf566aa974225c85473c92ad528d0b7e0773863d1f88c42ac1bfb8b8f24f35859eac616540f18f6d1130f220cd120d5a36e1b8bc9b0e885727807171e49f6b0b3d574edcda8ff53ca519b107c21c111295be1dbb921a10aff301e2e3c93fd6167aad29cc0dccc0dbcceb2ed5ac3018835376e7b9803121618a04c5c79280ac2cf55953981b9981b799d65dab58603106a6edcf73006242c314098b8f25015859eab233428fdfd9d1b664881cd8b8586b75d64b285cc18587cc14171e4a03b0b3d56366851fbfb3a36cc91039b170b0d6ebac9650b9830b0f98282e3c94076167aac6591c982c3da95c49ed398ad9580bff53d8e3cf031620d4515c79280fc2cf558b3e4b890551b53b4ba7393daaa67626a25e09fa032c434ca3b8f25020859eab1508a96ab779ccf94f1b38a34d434a753f6856500358883d4871e4a0420b3d56291152d56ef399f29e3671469a8694ea7ed0aca006b1107a90e3c94084167aac5222a5aadde733e53c6ce28d350d29d4fda159400d6220f521c79281082cf558a4454b55bbce67ca78d9c51a6a1a53a9fb42b2801ac441ea438f25021059eab14816a90424733217a980505ccc2b057bf131a75c32888578881e4a0421b3d5628f2d520848e6642f5300a0b998560af7e2634eb865110af1103c94084367aac51e5aa41091ccc85ea601417330ac15efc4c69d70ca2215e22079281086cf558a3c415a79d06ff34003cf490e594e8a0784397d3d91442d6841f250210e9eab14770ec74c4db64902bf6b5844aa937237031f3cd71f885c7484e4a0421e3d5628ed1d8e989b6c92057ed6b0895526e46e063e79ae3f10b8e909c940843c7aac51da3b1d3136d9240afdad6112aa4dc8dc0c7cf35c7e2171d21392810878f558a3b4024cbb1a88aa98b327884d4c91efe013a62914f942e54828250210f2eab1476704997635115531664f109a9923dfc0274c5229f285ca90504a0421e5d5628ece0932ec6a22aa62cc9e21353247bf804e98a453e50b9520a0940843cbaac51d9c1265d8d44554c5993c426a648f7f009d3148a7ca172a414128108797558a3b3824cbb1a88aa98b327884d4c91efe013a62914f942e54828250210f2eab1476704997635115531664f109a9923dfc0274c5229f285ca90504a0421e5d5628ece01f411f4f0108af81aed97b1c72562ce436879a4db953ae0a40843cbbac51d9bf3e823e9e02115f035db2f638e4ac59c86d0f349b72a75c148108797758a3b37e0916d5e8da8540be882c1469bfb6db8b8660c533e5505c2a0210f2efb14766fb122dabd1b50a817d105828d37f6db7170cc18a67caa0b8540421e5df628ecdf6245b57a36a1502fa20b051a6fedb6e2e198314cf954170a80843cbbec51d9bec48b6af46d42a05f44160a34dfdb6dc5c3306299f2a82e1501087977d8a3b37d81d7fb73a7eb68ea04f876e93f1cbe0b3124eaf3b550766a1210f2efc14766faf3aff6e74fd6d1d409f0edd27e397c166249d5e76aa0ecd42421e5df828ecdf5e02113596d13cbd390ae3e247bd8daac6f57d18ea541f3e85843cbbf151d9bebb04226b2da2797a7215c7c48f7b1b558deafa31d4a83e7d0b087977e2a3b37d760844d65b44f2f4e42b8f891ef636ab1bd5f463a9507cfa1610f2efc54766faec1089acb689e5e9c8571f123dec6d5637abe8c752a0f9f42c21e5df8a8ecdf5d82113596d13cbd390ae3e247bd8daac6f57d18ea541f3e85843cbbf151d9bebb04226b2da2797a7215c7c48f7b1b558deafa31d4a83e7d0b087977e2a3b37d760105fbe612591d0fa85beb9e759c8d9b80b88969207d145620f2efc55766faebf20bf7cc24b23a1f50b7d73ceb391b37017112d240fa28ac41e5df8aaecdf5d7e417ef984964743ea16fae79d672366e02e225a481f4515883cbbf155d9bebafc0f104bb602f10a8bfabbf732c4a4f5bb0887108d3e8bcf117977e2acb37d75f71e20976c05e21517f577ee658949eb76110e211a7d179e22f2efc55966faebee3c412ed80bc42a2feaefdccb1293d6ec221c4234fa2f3c45e5df8ab2cdf5d7dc0494b65cedead717a2a5e18e1b85d5d2f07ae066f4601c8ccbbf15669bebafb709296cb9dbd5ae2f454bc31c370baba5e0f5c0cde8c03919977e2acd37d75f6e1252d973b7ab5c5e8a9786386e17574bc1eb819bd18072332efc559a6faebedc24a5b2e76f56b8bd152f0c70dc2eae9783d70337a300e4665df8ab34df5d7db8494b65cedead717a2a5e18e1b85d5d2f07ae066f4601c8ccbbf15669bebafb701ea9244a93bd65ac218259bb6718e258bb9e68db8c05359a77e2acd47d75f6df3d524895277acb584304b376ce31c4b1773cd1b7180a6b34efc559a8faebedbe06b6e9d72558196852cf8ee592c1b15d9abbff6b30167a6adf8ab352f5d7db7b0d6dd3ae4ab032d0a59f1dcb258362bb3577fed6602cf4d5bf1566a5ebafb6f61adba75c956065a14b3e3b964b06c5766aeffdacc059e9ab7e2acd4bd75f6dec35b74eb92ac0cb42967c772c960d8aecd5dffb5980b3d356fc559a97aebedbd86b6e9d72558196852cf8ee592c1b15d9abbff6b30167a6adf8ab352f5d7db7b062ef93918165afc226b804aa4e9453ae03c2496302d0f15cf1566a5fbafb6f5f51f17fcfd92de23c1a36314c9386cf56b3c6eec305a386bae2acd4c075f6debd2ff5584c88be473001328a911d6bc6a813d039830b48b176c559a981ebedbd795feab099117c8e60026515223ad78d5027a07306169162ed8ab35303d7db7af24be7b9def95b9f77d190523c6c0d429afb8342092d2469dc1566a608afb6f5e323e1cc6ac919c1a76fe6cc70ce78ad30a348e00f5a4a77b92acd4c125f6debc547c398d59233834edfcd98e19cf15a614691c01eb494ef72559a9824bedbd78a1b998a57fac989558c6159bb3040dcbd3965dc3a692b82e5ab35304a7db7af13373314aff59312ab18c2b3766081b97a72cbb874d25705cb566a6094fb6f5e266e66295feb262556318566ecc10372f4e59770e9a4ae0b96acd4c129f6debc4c68deab6cacaecd642fd0f5d178650de477713dd0495dbb2e59a98254edbd78975dcfaf862fc01d802c68139ae72843c39b24d79d92bd1a5db35304aadb7af12d47b1b7b935e2bdb825964f2dc4aeaf81e28c0b38257bd8bc66a60956b6f5e2591b75c81f4227fe2817f2c6537fbb86fe715a726d4af95579cd4c12ae6debc4b136eb903e844ffc502fe58ca6ff770dfce2b4e4da95f2aaf39a98255cdbd789626dd7207d089ff8a05fcb194dfeee1bf9c569c9b52be555e735304ab9b7af12c467c099a6e7a273f88c5c5a93f43a5fee3715ef6757cc4fcf6a6095746f5e25875b938bfaa5a76aa8e57edd1fded2e7d71a6e3acbaf9a439fd4c12ae9debc4b0d433970a221b1580997c3e237b403f7a8e11ed1945f362b40a98255d4bd789619128539f119c532cafc4dec675e66174c6e7fff25be6dfa825304abaa7af12c31250a73e2338a6595f89bd8cebccc2e98dcfffe4b7cdbf504a6095754f5e258624a14e7c46714cb2bf137b19d79985d31b9fffc96f9b7ea094c12aea9ebc4b0c4203c2835a48c190faf358b32e98ee25e2042552af371781398255d54d78961874078506b4918321f5e6b1665d31dc4bc4084aa55e6e2f027304abaa9af12c30e0d02f9836892e6f6899c54c39c99b1732d4bb0a8cdc7844f609575545e25861b1a05f306d125cded1338a987393362e65a9761519b8f089ec12aeaa8bc4b0c36340be60da24b9bda2671530e7266c5ccb52ec2a3371e113d8255d5517896186c6817cc1b449737b44ce2a61ce4cd8b996a5d85466e3c227b04abaaa2f12c30d85c41f0e35f90f220668b7431bff93f2d80fd6689dc79e8f709575546e25861af44963a73958466f899dd105b7650a655ae3d2910b8f575ef12aeaa8ec4b0c35d153ecd94016b50a9008048aee2ff74a608bcae1e71ec8fdf255d551e896186b92a7d9b2802d6a1520100915dc5fee94c11795c3ce3d91fbe4abaaa3d12c30d7254fb365005ad42a4020122bb8bfdd29822f2b879c7b23f7c9575547a25861ae43608c54ce1bd07ffd0c86d6f0e59cd2af227ccf08f6622fa2aeaa8f54b0c35c76c118a99c37a0fffa190dade1cb39a55e44f99e11ecc45f455d551ea96186b8e64356de05d56a2b70fe7ddb42fc55ca674e18fbf3d9a2fe9abaaa3d62c30d71b547d346d910fc825ec95e36055e8e14796057b7b7b3603d4575547ad5861ae35350cc187f8821303a5f1eeb8a22fea89d84d52f3f66daba9aeaa8f5bb0c35c696a19830ff10426074be3dd71445fd513b09aa5e7ecdb57535d551eb76186b8d260455eccb86acec6648de2da7f1dd2220d77a7ccd9b852a7baaa3d6fc30d71a34c9d16464738204495e1edacf499cc3ec731ab96b372495075547ae0861ae345254c853964d2c340f88a0351df91c0783aa5b32a66e636a1eaa8f5c20c35c6894a990a72c9a58681f11406a3bf2380f0754b6654cdcc6d43d551eb84186b8d1221446d9269ad8fbbaeee353f74a529db96d928a69b9a7e88aaa3d70930d71a234288db24d35b1f775ddc6a7ee94a53b72db2514d3734fd115547ae1261ae344611240ef67d18c1a6887efcf5c8f2cf6907a6fe976e6b9e23aa8f5c25c35c688b22481decfa31834d10fdf9eb91e59ed20f4dfd2edcd73c47551eb84b86b8d11644903bd9f463069a21fbf3d723cb3da41e9bfa5db9ae788eaa3d70970d71a22c1532d060bf288fec10be0fa63df4a342e97a50b8735e951e547ae12f1ae344572a65a0c17e511fd8217c1f4c7be94685d2f4a170e6bd2a3ca8f5c25e35c688ae54cb4182fca23fb042f83e98f7d28d0ba5e942e1cd7a547951eb84bc6b8d115c35a8dbb2cfa7021852b6a529e6034211f814e1c09af64cf3a3d70979d71a22b76b51b7659f4e0430a56d4a53cc068423f029c38135ec99e747ae12f3ae34456e62b5c77814fe8b1917a0bc9f8e6b30428c95e2ff6bdad7cf8f5c25e85c688adb517de79d005f98e9fc07a1371334887fc56e21fbd7b753a01eb84bd1b8d115b52f0e27e6d721b48bc4d56a661cc738fa371e9ff4af704b413d7097a471a22b695e1c4fcdae43691789aad4cc398e71f46e3d3fe95ee096827ae12f48e34456d2484af84832e954e6e01bd190697b0be388bcdbcfbdc2d105f5c25e92c688ada31ca8493d3c352c858cfdcb18c9543fc1bdbc139c7b87460ceb84bd268d115b453950927a786a590b19fb963192a87f837b782738f70e8c19d7097a4d1a22b68a72a124f4f0d4b21633f72c632550ff06f6f04e71ee1d1833ae12f49a34456d147154a296b80be6e434b480be410026089a22f8e0dc3bd4685c25e935688ada276ebb9dda467a5080362f2974785e740be0884dbeb8794cd1b84bd26bd115b44d69899461635723b839247ae0e71b10126d52f77a70f43da47097a4d8a22b68995f25816f9d10ca283f0f1db9c494481f86e84af1e1ea1f49e12f49b24456d1314a5d5b8c108417084ae4636b7f86b839ba12f1e0c3d5e294c25e936588ada26120cd0fc4f76ab0c8628eeecef56b986e20683fbe87ad692a84bd26cc115b44c1419a1f89eed56190c51ddd9dead730dc40d07f7d0f5ad255097a4d9822b689820f4697c0b40d45d95701e333cc0c89b32de35af71eb748ab12f49b31456d13031e8d2f81681a8bb2ae03c667981913665bc6b5ee3d6e915625e936628ada26063d1a5f02d03517655c078ccf303226ccb78d6bdc7add22ac4bd26cc515b44c0c064716b276ccb18284d5419656c275941b5d33b5f5bbe95997a4d98b2b6898170c8e2d64ed99630509aa832cad84eb2836ba676beb77d2b32f49b31656d1302e191c5ac9db32c60a135506595b09d6506d74ced7d6efa5665e93662cada2605c3238b593b6658c1426aa0cb2b613aca0dae99dafaddf4accbd26cc595b44c0b864716b276ccb18284d5419656c275941b5d33b5f5bbe95997a4d98b2b689817054f52efbaff8b308676e5ac2ceacda7e17e8d2bbb77ecf33f49b31666d1302df35fcb6a43653e8c89ba2dd7d93b7dcf6dc1401746eff4268e93662cdda2605bd6bf96d486ca7d1913745bafb276fb9edb82802e8ddfe84d1d26cc59bb44c0b7a6405333dafb225da3b519dee453d9bd61c9261cebbfeada4a4d98b38689816f3541cbf2835c6ce6c436963d480d95fa6e5671f9a77feff4a49b31671d1302de5344bd6fd41f01f905398efa0f810e74877109b31efffa29593662ce4a2605bc96897adfa83e03f20a731df41f021ce90ee213663dfff452b26cc59c944c0b7925d41b4a1de2300f91b29e67bd6a1c51c8884c8c4c0002e574d98b39389816f234695c1f092a884aa0319f4efa3a1b233bd4bed86800200af9b3167281302de45193ddc8dfbb38c0bd2fa11d73da18c6226da370a0005a5603662ce512605bc89327bb91bf7671817a5f423ae7b4318c44db46e14000b4ac06cc59ca24c0b791264f77237eece302f4be8475cf68631889b68dc2800169580d98b39449816f22456013d1cb3fee3166496b6b1e36a8b0be314144d002ecf02b316728a302de4473814d2e63e6048e495f3955bbd333e12726a8497005f4206662ce515605bc88d7029a5cc7cc091c92be72ab77a667c24e4d5092e00be840ccc59ca2ac0b7911a6c65a445cfe3a64a24947d66eb2b204475ec6e59017eac1a98b39456816f223364dda1387629cf4c15ef22c5ccb46883981b38af02fefc36316728ae02de446555cd9b1dc2b6214ff8a46d838fc6f901dc78cd5b05ff9c6d62ce515d05bc88c937ad8ee85bcec557be0f02ff15ec19fe6533f6b30c00dcdbc59ca2bb0b7911916f5b1dd0b79d8aaf7c1e05fe2bd833fcca67ed661801b9b78b39457616f223226ac8944e459d9816c50233f44e0e8ff4411236c93005177016728aed2de4464361a38149619db2e556ca8fe0927b47e32e66c98f600bd2e12ce515db5bc88c854f595b3f999de8827a5b47b91b54b7c1090fef1bc01949c359ca2bb7b79119092ac50f2c099e53bcc17cb76a2d07977cbe623a3480343787b39457706f223211558a1e58133ca77982f96ed45a0f2ef97cc4746900686f0f6728aee0de4464223726955cfcdbd1aad2b905a0aa7c85eda5cb44cf00d2821fce515dc2bc88c8436e4d2ab9f9b7a355a5720b4154f90bdb4b96899e01a5043f9ca2bb857911908668acae20c9d1c96317aa3e7aa0503fb1436f6f39034bac803945770bf223210b5d6bb4ee6a06157dfc1aa4ed36fea75d33213a6f0698fd01728aee18e446421546e9c289aa6eadb3c4fb71d2645b76b51284d0db0d339e03e515dc32c88c842919e5ddc02b3fde1f56bd0b9cbf151564d14bfdb31a68e008ca2bb8669119085133cbbb80567fbc3ead7a17397e2a2ac9a297fb6634d1c011945770cd223210a267977700acff787d5af42e72fc545593452ff6cc69a3802328aee19a446421445b4146ae306173b282ae84ddef06d32136a24995d348a447515dc33588c842874294e60937256a1cd22331b3d46bce3d1986ef28a692ec8fa2bb866c1190850d113c24bf44ad56f1710c8b5f9f35c474df503a4e4d277d2045770cd923210a192278497e895aade2e21916bf3e6b88e9bea0749c9a4efa408aee19b24642143244f092fd12b55bc5c4322d7e7cd711d37d40e939349df48115dc33648c84286415f37ea6fbcd3a43552a82f4f00c4ba1a6c42e6f693d8d032bb866ca190850c72be6fd4df79a7486aa5505e9e01897434d885cded27b1a065770cd943210a18e57cdfa9bef34e90d54aa0bd3c0312e869b10b9bda4f6340caee19b286421431c3bae4de4b4cc54d2761a3f9f76c08507e263cf7849ee0c1a5dc33651c8428637036ef4763ffb2c5cb8faa736e3df320a7109faed93ddbc35bb866ca490850c6d06dde8ec7ff658b971f54e6dc7be6414e213f5db27bb786b770cd949210a18da0dbbd1d8ffecb172e3ea9cdb8f7cc829c427ebb64f76f0d6ee19b292421431b41b77a3b1ffd962e5c7d539b71ef99053884fd76c9eede1addc3365248428636836ef4763ffb2c5cb8faa736e3df320a7109faed93ddbc35bb866ca490850c6d06dde8ec7ff658b971f54e6dc7be6414e213f5db27bb786b770cd949210a18da067cf763cd52d99e60b6ff5b0ee2aaa96eec11761f770b16fe19b292521431b3f5bb1452680bdb683e3a61359d2b37d2889c48ac0eee306e0c336524b4286367d4374e2f9d7ddefbf94124eab9bc5224bbfcb717eddc7b1c2866ca497850c6cf912fc1ea0861e6236f4eac54f2de86c922bd93efabb9107860cd949300a18d9f125f83d410c3cc46de9d58a9e5bd0d92457b27df577220f0c19b292601431b3e24bf07a82187988dbd3ab153cb7a1b248af64fbeaee441e18336524c0286367c423f34db10755946f741c527165a18c8c0b0c53d2dc89e03166ca498150c6cf8747e69b620eab28dee838a4e2cb4319181618a7a5b913c062cd949302a18d9f0e1bdf8f70f3b8d4759d3771bd8ce45a2ad873ab48722924c69b292606431b3e1b37bf1ee1e771a8eb3a6ee37b19c8b455b0e75690e452498d36524c0c86367c366f7e3dc3cee351d674ddc6f6339168ab61cead21c8a4931a6ca498190c6cf86c6b0ed43474292664b681b5e45d80f9516fdfb640914aca35d949303318d9f0d762300115beb4cf8139c993c0b1601a9d8c01c87e2297386cb292606731b3e1ad50725ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c3592cf70e5d7dfac62c4d78c6eaa89ae26634ce35ef8a61cdb5ca49819fc6cf86b159ee1cbafbf58c589af18dd55135c4cc699c6bdf14c39b6b9493033f8d9f0d623fee9222ce4d9b6902a943a298c9b1937f7b33bb2988dad8292606801b3e1ac30bef7cf272fdb989d218af3d27f18b21ab38c373531359b1524c0d01367c358517def9e4e5fb7313a4315e7a4fe31643567186e6a626b362a4981a026cf86b0a2fbdf3c9cbf6e6274862bcf49fc62c86ace30dcd4c4d66c549303404d9f0d6145f7be79397edcc4e90c579e93f8c590d59c61b9a989acd8a92606809b3e1ac284b0a27d4063e1b54ee511bca7576da155fce933231373f1624c0d01467c3584f2226a854e2deb961a9685f8ce14bdc256bdf82616270222d4981a029cf86b09d444d50a9c5bd72c352d0bf19c297b84ad7bf04c2c4e0445a930340539f0d613a14acfa0061dd683e7267a62b7b8d98905bc0658289c22cb6260680a83e1ac273" - validBlob2 string = "73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000" + ValidBlob2Hex string = "73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000" ) diff --git a/erigon-lib/txpool/txpool_grpc_server.go b/erigon-lib/txpool/txpool_grpc_server.go index de4c26db372..9d7ee2b7bc6 100644 --- a/erigon-lib/txpool/txpool_grpc_server.go +++ b/erigon-lib/txpool/txpool_grpc_server.go @@ -187,8 +187,8 @@ func (s *GrpcServer) Add(ctx context.Context, in *txpool_proto.AddRequest) (*txp reply := &txpool_proto.AddReply{Imported: make([]txpool_proto.ImportResult, len(in.RlpTxs)), Errors: make([]string, len(in.RlpTxs))} - j := 0 - for i := 0; i < len(in.RlpTxs); i++ { // some incoming txs may be rejected, so - need second index + for i := 0; i < len(in.RlpTxs); i++ { + j := len(slots.Txs) // some incoming txs may be rejected, so - need second index slots.Resize(uint(j + 1)) slots.Txs[j] = &types.TxSlot{} slots.IsLocal[j] = true @@ -198,6 +198,7 @@ func (s *GrpcServer) Add(ctx context.Context, in *txpool_proto.AddRequest) (*txp } return nil }); err != nil { + slots.Resize(uint(j)) // remove erroneous transaction if errors.Is(err, types.ErrAlreadyKnown) { // Noop, but need to handle to not count these reply.Errors[i] = txpoolcfg.AlreadyKnown.String() reply.Imported[i] = txpool_proto.ImportResult_ALREADY_EXISTS @@ -208,9 +209,7 @@ func (s *GrpcServer) Add(ctx context.Context, in *txpool_proto.AddRequest) (*txp reply.Errors[i] = err.Error() reply.Imported[i] = txpool_proto.ImportResult_INTERNAL_ERROR } - continue } - j++ } discardReasons, err := s.txPool.AddLocalTxs(ctx, slots, tx) @@ -218,7 +217,7 @@ func (s *GrpcServer) Add(ctx context.Context, in *txpool_proto.AddRequest) (*txp return nil, err } - j = 0 + j := 0 for i := range reply.Imported { if reply.Imported[i] != txpool_proto.ImportResult_SUCCESS { j++ diff --git a/erigon-lib/txpool/txpoolcfg/txpoolcfg.go b/erigon-lib/txpool/txpoolcfg/txpoolcfg.go index 8f8041c256e..a2fc9f91009 100644 --- a/erigon-lib/txpool/txpoolcfg/txpoolcfg.go +++ b/erigon-lib/txpool/txpoolcfg/txpoolcfg.go @@ -23,22 +23,29 @@ import ( "time" "github.com/c2h5oh/datasize" + + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/fixedgas" emath "github.com/ledgerwatch/erigon-lib/common/math" "github.com/ledgerwatch/erigon-lib/types" ) +// BorDefaultTxPoolPriceLimit defines the minimum gas price limit for bor to enforce txs acceptance into the pool. +const BorDefaultTxPoolPriceLimit = 30 * common.GWei + type Config struct { - DBDir string - TracedSenders []string // List of senders for which tx pool should print out debugging info - PendingSubPoolLimit int - BaseFeeSubPoolLimit int - QueuedSubPoolLimit int - MinFeeCap uint64 - AccountSlots uint64 // Number of executable transaction slots guaranteed per account - BlobSlots uint64 // Total number of blobs (not txs) allowed per account - PriceBump uint64 // Price bump percentage to replace an already existing transaction - BlobPriceBump uint64 //Price bump percentage to replace an existing 4844 blob tx (type-3) + DBDir string + TracedSenders []string // List of senders for which tx pool should print out debugging info + PendingSubPoolLimit int + BaseFeeSubPoolLimit int + QueuedSubPoolLimit int + MinFeeCap uint64 + AccountSlots uint64 // Number of executable transaction slots guaranteed per account + BlobSlots uint64 // Total number of blobs (not txs) allowed per account + TotalBlobPoolLimit uint64 // Total number of blobs (not txs) allowed within the txpool + PriceBump uint64 // Price bump percentage to replace an already existing transaction + BlobPriceBump uint64 //Price bump percentage to replace an existing 4844 blob tx (type-3) + OverrideShanghaiTime *big.Int OverrideCancunTime *big.Int @@ -70,11 +77,12 @@ var DefaultConfig = Config{ BaseFeeSubPoolLimit: 10_000, QueuedSubPoolLimit: 10_000, - MinFeeCap: 1, - AccountSlots: 16, //TODO: to choose right value (16 to be compatible with Geth) - BlobSlots: 48, // Default for a total of 8 txs for 6 blobs each - for hive tests - PriceBump: 10, // Price bump percentage to replace an already existing transaction - BlobPriceBump: 100, + MinFeeCap: 1, + AccountSlots: 16, //TODO: to choose right value (16 to be compatible with Geth) + BlobSlots: 48, // Default for a total of 8 txs for 6 blobs each - for hive tests + TotalBlobPoolLimit: 480, // Default for a total of 10 different accounts hitting the above limit + PriceBump: 10, // Price bump percentage to replace an already existing transaction + BlobPriceBump: 100, NoGossip: false, } @@ -113,7 +121,9 @@ const ( BlobHashCheckFail DiscardReason = 28 // KZGcommitment's versioned hash has to be equal to blob_versioned_hash at the same index UnmatchedBlobTxExt DiscardReason = 29 // KZGcommitments must match the corresponding blobs and proofs BlobTxReplace DiscardReason = 30 // Cannot replace type-3 blob txn with another type of txn - TxTypeNotSupported DiscardReason = 31 + BlobPoolOverflow DiscardReason = 31 // The total number of blobs (through blob txs) in the pool has reached its limit + + TxTypeNotSupported DiscardReason = 32 ) func (r DiscardReason) String() string { @@ -176,6 +186,8 @@ func (r DiscardReason) String() string { return "max number of blobs exceeded" case BlobTxReplace: return "can't replace blob-txn with a non-blob-txn" + case BlobPoolOverflow: + return "blobs limit in txpool is full" default: panic(fmt.Sprintf("discard reason: %d", r)) } diff --git a/erigon-lib/txpool/txpooluitl/all_components.go b/erigon-lib/txpool/txpooluitl/all_components.go index ecf884bbe39..42bec9cb76a 100644 --- a/erigon-lib/txpool/txpooluitl/all_components.go +++ b/erigon-lib/txpool/txpooluitl/all_components.go @@ -140,9 +140,6 @@ func AllComponents(ctx context.Context, cfg txpoolcfg.Config, cache kvcache.Cach agraBlock = chainConfig.Bor.GetAgraBlock() } cancunTime := chainConfig.CancunTime - if cfg.OverrideCancunTime != nil { - cancunTime = cfg.OverrideCancunTime - } txPool, err := txpool.New(newTxs, chainDB, cfg, cache, *chainID, shanghaiTime, agraBlock, cancunTime, maxBlobsPerBlock, feeCalculator, logger) if err != nil { diff --git a/erigon-lib/types/txn.go b/erigon-lib/types/txn.go index e2ff3ecbcf4..d669d34fd15 100644 --- a/erigon-lib/types/txn.go +++ b/erigon-lib/types/txn.go @@ -185,7 +185,7 @@ func (ctx *TxParseContext) ParseTransaction(payload []byte, pos int, slot *TxSlo var wrapperDataPos, wrapperDataLen int - // If it is non-legacy transaction, the transaction type follows, and then the the list + // If it is non-legacy transaction, the transaction type follows, and then the list if !legacy { slot.Type = payload[p] if slot.Type > BlobTxType && slot.Type != DepositTxType { @@ -1078,6 +1078,32 @@ func (al AccessList) StorageKeys() int { return sum } +// Removes everything but the payload body from blob tx and prepends 0x3 at the beginning - no copy +// Doesn't change non-blob tx +func UnwrapTxPlayloadRlp(blobTxRlp []byte) ([]byte, error) { + if blobTxRlp[0] != BlobTxType { + return blobTxRlp, nil + } + dataposPrev, _, isList, err := rlp.Prefix(blobTxRlp[1:], 0) + if err != nil || dataposPrev < 1 { + return nil, err + } + if !isList { // This is clearly not wrapped tx then + return blobTxRlp, nil + } + + blobTxRlp = blobTxRlp[1:] + // Get to the wrapper list + datapos, datalen, err := rlp.List(blobTxRlp, dataposPrev) + if err != nil { + return nil, err + } + blobTxRlp = blobTxRlp[dataposPrev-1 : datapos+datalen] // Seek left an extra-bit + blobTxRlp[0] = 0x3 + // Include the prefix part of the rlp + return blobTxRlp, nil +} + // RollupCostData is a transaction structure that caches data for quickly computing the data // availablility costs for the transaction. type RollupCostData struct { diff --git a/eth/backend.go b/eth/backend.go index 4414c07c2f3..afad9d872c2 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -22,20 +22,29 @@ import ( "errors" "fmt" "io/fs" + "math" "math/big" "net" "os" "path/filepath" + "slices" "strconv" "strings" "sync" "sync/atomic" "time" + "github.com/ledgerwatch/erigon-lib/common/dir" + "github.com/ledgerwatch/erigon-lib/common/disk" + "github.com/ledgerwatch/erigon-lib/common/mem" + "github.com/ledgerwatch/erigon-lib/diagnostics" + + "github.com/erigontech/mdbx-go/mdbx" lru "github.com/hashicorp/golang-lru/arc/v2" "github.com/holiman/uint256" + "github.com/ledgerwatch/erigon-lib/config3" + "github.com/ledgerwatch/erigon-lib/kv/temporal" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/protobuf/types/known/emptypb" @@ -45,17 +54,17 @@ import ( "github.com/ledgerwatch/erigon-lib/chain/snapcfg" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/direct" "github.com/ledgerwatch/erigon-lib/downloader" "github.com/ledgerwatch/erigon-lib/downloader/downloadercfg" "github.com/ledgerwatch/erigon-lib/downloader/downloadergrpc" - proto_downloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" + protodownloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader" "github.com/ledgerwatch/erigon-lib/gointerfaces/grpcutil" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" rpcsentinel "github.com/ledgerwatch/erigon-lib/gointerfaces/sentinel" - proto_sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" - txpool_proto "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" + protosentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + txpoolproto "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" prototypes "github.com/ledgerwatch/erigon-lib/gointerfaces/types" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcache" @@ -63,19 +72,16 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/remotedbserver" libstate "github.com/ledgerwatch/erigon-lib/state" "github.com/ledgerwatch/erigon-lib/txpool" + "github.com/ledgerwatch/erigon-lib/txpool/txpoolcfg" "github.com/ledgerwatch/erigon-lib/txpool/txpooluitl" - types2 "github.com/ledgerwatch/erigon-lib/types" + libtypes "github.com/ledgerwatch/erigon-lib/types" "github.com/ledgerwatch/erigon-lib/wrap" "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/fork" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/db_config" "github.com/ledgerwatch/erigon/cl/persistence/format/snapshot_format/getters" clcore "github.com/ledgerwatch/erigon/cl/phase1/core" - "github.com/ledgerwatch/erigon/cl/phase1/execution_client" - "github.com/ledgerwatch/erigon/cl/sentinel" - "github.com/ledgerwatch/erigon/cl/sentinel/service" + executionclient "github.com/ledgerwatch/erigon/cl/phase1/execution_client" + "github.com/ledgerwatch/erigon/cl/utils/eth_clock" "github.com/ledgerwatch/erigon/cmd/caplin/caplin1" "github.com/ledgerwatch/erigon/cmd/rpcdaemon/cli" "github.com/ledgerwatch/erigon/common/debug" @@ -87,8 +93,6 @@ import ( "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/rawdb/blockio" - "github.com/ledgerwatch/erigon/core/state/temporal" - "github.com/ledgerwatch/erigon/core/systemcontracts" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/crypto" @@ -111,6 +115,7 @@ import ( "github.com/ledgerwatch/erigon/polygon/bor/finality/flags" "github.com/ledgerwatch/erigon/polygon/bor/valset" "github.com/ledgerwatch/erigon/polygon/heimdall" + polygonsync "github.com/ledgerwatch/erigon/polygon/sync" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/builder" "github.com/ledgerwatch/erigon/turbo/engineapi" @@ -155,18 +160,18 @@ type Ethereum struct { eth1ExecutionServer *eth1.EthereumExecutionModule - ethBackendRPC *privateapi.EthBackendServer + ethBackendRPC *privateapi.EthBackendServer + engineBackendRPC *engineapi.EngineServer + miningRPC txpoolproto.MiningServer + stateChangesClient txpool.StateChangesClient + seqRPCService *rpc.Client historicalRPCService *rpc.Client - engineBackendRPC *engineapi.EngineServer - miningRPC txpool_proto.MiningServer - stateChangesClient txpool.StateChangesClient miningSealingQuit chan struct{} pendingBlocks chan *types.Block minedBlocks chan *types.Block - // downloader fields sentryCtx context.Context sentryCancel context.CancelFunc sentriesClient *sentry_multi_client.MultiClient @@ -178,7 +183,7 @@ type Ethereum struct { syncUnwindOrder stagedsync.UnwindOrder syncPruneOrder stagedsync.PruneOrder - downloaderClient proto_downloader.DownloaderClient + downloaderClient protodownloader.DownloaderClient notifications *shards.Notifications unsubscribeEthstat func() @@ -188,15 +193,15 @@ type Ethereum struct { txPoolDB kv.RwDB txPool *txpool.TxPool - newTxs chan types2.Announcements + newTxs chan libtypes.Announcements txPoolFetch *txpool.Fetch txPoolSend *txpool.Send - txPoolGrpcServer txpool_proto.TxpoolServer + txPoolGrpcServer txpoolproto.TxpoolServer notifyMiningAboutNewTxs chan struct{} forkValidator *engine_helpers.ForkValidator downloader *downloader.Downloader - agg *libstate.AggregatorV3 + agg *libstate.Aggregator blockSnapshots *freezeblocks.RoSnapshots blockReader services.FullBlockReader blockWriter *blockio.BlockWriter @@ -208,6 +213,9 @@ type Ethereum struct { silkworm *silkworm.Silkworm silkwormRPCDaemonService *silkworm.RpcDaemonService silkwormSentryService *silkworm.SentryService + + polygonSyncService polygonsync.Service + stopNode func() error } func splitAddrIntoHostAndPort(addr string) (host string, port int, err error) { @@ -245,7 +253,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger latestBlockBuiltStore := builder.NewLatestBlockBuiltStore() if err := chainKv.Update(context.Background(), func(tx kv.RwTx) error { - if err = stagedsync.UpdateMetrics(tx); err != nil { + if err = stages.UpdateMetrics(tx); err != nil { return err } @@ -255,25 +263,14 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger } config.HistoryV3, err = kvcfg.HistoryV3.WriteOnce(tx, config.HistoryV3) - if err != nil { - return err - } - - isCorrectSync, useSnapshots, err := snap.EnsureNotChanged(tx, config.Snapshot) - if err != nil { - return err - } - // if we are in the incorrect syncmode then we change it to the appropriate one - if !isCorrectSync { - config.Sync.UseSnapshots = useSnapshots - config.Snapshot.Enabled = ethconfig.UseSnapshotsByChainName(config.Genesis.Config.ChainName) && useSnapshots - } - - return nil + return err }); err != nil { return nil, err } + if config.HistoryV3 { + return nil, errors.New("seems you using erigon2 git branch on erigon3 DB") + } ctx, ctxCancel := context.WithCancel(context.Background()) // kv_remote architecture does blocks on stream.Send - means current architecture require unlimited amount of txs to provide good throughput @@ -291,6 +288,9 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger Accumulator: shards.NewAccumulator(), }, logger: logger, + stopNode: func() error { + return stack.Close() + }, } var chainConfig *chain.Config @@ -312,6 +312,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger OverrideOptimismCanyonTime: config.OverrideOptimismCanyonTime, OverrideOptimismEcotoneTime: config.OverrideOptimismEcotoneTime, OverrideOptimismFjordTime: config.OverrideOptimismFjordTime, + OverridePragueTime: config.OverridePragueTime, } chainConfig, genesis, genesisErr = core.WriteGenesisBlock(tx, genesisSpec, overrides, tmpdir, logger) if _, ok := genesisErr.(*chain.ConfigCompatError); genesisErr != nil && !ok { @@ -326,8 +327,6 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger backend.genesisBlock = genesis backend.genesisHash = genesis.Hash() - logger.Info("Initialised chain configuration", "config", chainConfig, "genesis", genesis.Hash()) - if chainConfig.IsOptimism() { if chainConfig.RegolithTime == nil { log.Warn("Optimism RegolithTime has not been set") @@ -339,18 +338,37 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger log.Warn("Optimism EcotoneTime has not been set") } } - snapshotVersion := snapcfg.KnownCfg(chainConfig.ChainName, 0).Version + + setBorDefaultMinerGasPrice(chainConfig, config, logger) + setBorDefaultTxPoolPriceLimit(chainConfig, config.TxPool, logger) + + if err := chainKv.Update(context.Background(), func(tx kv.RwTx) error { + isCorrectSync, useSnapshots, err := snap.EnsureNotChanged(tx, config.Snapshot) + if err != nil { + return err + } + // if we are in the incorrect syncmode then we change it to the appropriate one + if !isCorrectSync { + config.Sync.UseSnapshots = useSnapshots + config.Snapshot.Enabled = ethconfig.UseSnapshotsByChainName(chainConfig.ChainName) && useSnapshots + } + return nil + }); err != nil { + return nil, err + } + + logger.Info("Initialised chain configuration", "config", chainConfig, "genesis", genesis.Hash()) // Check if we have an already initialized chain and fall back to // that if so. Otherwise we need to generate a new genesis spec. - blockReader, blockWriter, allSnapshots, allBorSnapshots, agg, err := setUpBlockReader(ctx, chainKv, config.Dirs, snapshotVersion, config.Snapshot, config.HistoryV3, chainConfig.Bor != nil, logger) + blockReader, blockWriter, allSnapshots, allBorSnapshots, agg, err := setUpBlockReader(ctx, chainKv, config.Dirs, config, config.HistoryV3, chainConfig.Bor != nil, logger) if err != nil { return nil, err } backend.agg, backend.blockSnapshots, backend.blockReader, backend.blockWriter = agg, allSnapshots, blockReader, blockWriter if config.HistoryV3 { - backend.chainDB, err = temporal.New(backend.chainDB, agg, systemcontracts.SystemContractCodeLookup[config.Genesis.Config.ChainName]) + backend.chainDB, err = temporal.New(backend.chainDB, agg) if err != nil { return nil, err } @@ -368,15 +386,20 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger backend.gasPrice, _ = uint256.FromBig(config.Miner.GasPrice) if config.SilkwormExecution || config.SilkwormRpcDaemon || config.SilkwormSentry { - backend.silkworm, err = silkworm.New(config.Dirs.DataDir) + logLevel, err := log.LvlFromString(config.SilkwormVerbosity) + if err != nil { + return nil, err + } + backend.silkworm, err = silkworm.New(config.Dirs.DataDir, mdbx.Version(), config.SilkwormNumContexts, logLevel) if err != nil { return nil, err } } + p2pConfig := stack.Config().P2P var sentries []direct.SentryClient - if len(stack.Config().P2P.SentryAddr) > 0 { - for _, addr := range stack.Config().P2P.SentryAddr { + if len(p2pConfig.SentryAddr) > 0 { + for _, addr := range p2pConfig.SentryAddr { sentryClient, err := sentry_multi_client.GrpcClient(backend.sentryCtx, addr) if err != nil { return nil, err @@ -386,7 +409,6 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger } else if config.SilkwormSentry { apiPort := 53774 apiAddr := fmt.Sprintf("127.0.0.1:%d", apiPort) - p2pConfig := stack.Config().P2P collectNodeURLs := func(nodes []*enode.Node) []string { var urls []string @@ -436,21 +458,20 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger return d } - refCfg := stack.Config().P2P - listenHost, listenPort, err := splitAddrIntoHostAndPort(refCfg.ListenAddr) + listenHost, listenPort, err := splitAddrIntoHostAndPort(p2pConfig.ListenAddr) if err != nil { return nil, err } var pi int // points to next port to be picked from refCfg.AllowedPorts - for _, protocol := range refCfg.ProtocolVersion { - cfg := refCfg + for _, protocol := range p2pConfig.ProtocolVersion { + cfg := p2pConfig cfg.NodeDatabase = filepath.Join(stack.Config().Dirs.Nodes, eth.ProtocolToString[protocol]) // pick port from allowed list var picked bool - for ; pi < len(refCfg.AllowedPorts) && !picked; pi++ { - pc := int(refCfg.AllowedPorts[pi]) + for ; pi < len(cfg.AllowedPorts) && !picked; pi++ { + pc := int(cfg.AllowedPorts[pi]) if pc == 0 { // For ephemeral ports probing to see if the port is taken does not // make sense. @@ -458,7 +479,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger break } if !checkPortIsFree(fmt.Sprintf("%s:%d", listenHost, pc)) { - logger.Warn("bind protocol to port has failed: port is busy", "protocols", fmt.Sprintf("eth/%d", refCfg.ProtocolVersion), "port", pc) + logger.Warn("bind protocol to port has failed: port is busy", "protocols", fmt.Sprintf("eth/%d", cfg.ProtocolVersion), "port", pc) continue } if listenPort != pc { @@ -473,7 +494,6 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger } cfg.ListenAddr = fmt.Sprintf("%s:%d", listenHost, listenPort) - server := sentry.NewGrpcServer(backend.sentryCtx, discovery, readNodeInfo, &cfg, protocol, logger) backend.sentryServers = append(backend.sentryServers, server) sentries = append(sentries, direct.NewSentryClientDirect(protocol, server)) @@ -507,6 +527,10 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger }() } + // setup periodic logging and prometheus updates + go mem.LogMemStats(ctx, logger) + go disk.UpdateDiskStats(ctx, logger) + var currentBlock *types.Block if err := chainKv.View(context.Background(), func(tx kv.Tx) error { currentBlock, err = blockReader.CurrentBlock(tx) @@ -532,7 +556,9 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger } else { consensusConfig = &config.Ethash } + var heimdallClient heimdall.HeimdallClient + if chainConfig.Bor != nil { if !config.WithoutHeimdall { heimdallClient = heimdall.NewHeimdallClient(config.HeimdallURL, logger) @@ -552,7 +578,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger dirs, notifications, blockReader, blockWriter, backend.agg, backend.silkworm, terseLogger) chainReader := stagedsync.NewChainReaderImpl(chainConfig, txc.Tx, blockReader, logger) // We start the mining step - if err := stages2.StateStep(ctx, chainReader, backend.engine, txc, backend.blockWriter, stateSync, backend.sentriesClient.Bd, header, body, unwindPoint, headersChain, bodiesChain, config.HistoryV3); err != nil { + if err := stages2.StateStep(ctx, chainReader, backend.engine, txc, stateSync, header, body, unwindPoint, headersChain, bodiesChain, config.HistoryV3); err != nil { logger.Warn("Could not validate block", "err", err) return err } @@ -567,6 +593,14 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger } backend.forkValidator = engine_helpers.NewForkValidator(ctx, currentBlockNumber, inMemoryExecution, tmpdir, backend.blockReader) + statusDataProvider := sentry.NewStatusDataProvider( + chainKv, + chainConfig, + genesis, + backend.config.NetworkID, + logger, + ) + // limit "new block" broadcasts to at most 10 random peers at time maxBlockBroadcastPeers := func(header *types.Header) uint { return 10 } @@ -587,21 +621,19 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger } } + sentryMcDisableBlockDownload := config.PolygonSync backend.sentriesClient, err = sentry_multi_client.NewMultiClient( chainKv, - stack.Config().NodeName(), chainConfig, - genesis.Hash(), - genesis.Time(), backend.engine, - backend.config.NetworkID, sentries, config.Sync, blockReader, blockBufferSize, + statusDataProvider, stack.Config().SentryLogPeerInfo, - backend.forkValidator, maxBlockBroadcastPeers, + sentryMcDisableBlockDownload, logger, ) if err != nil { @@ -628,7 +660,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger backend.historicalRPCService = client } config.TxPool.NoGossip = config.DisableTxPoolGossip - var miningRPC txpool_proto.MiningServer + var miningRPC txpoolproto.MiningServer stateDiffClient := direct.NewStateDiffClientDirect(kvRPC) if config.DeprecatedTxPool.Disable { backend.txPoolGrpcServer = &txpool.GrpcDisabled{} @@ -636,7 +668,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger //cacheConfig := kvcache.DefaultCoherentCacheConfig //cacheConfig.MetricsLabel = "txpool" - backend.newTxs = make(chan types2.Announcements, 1024) + backend.newTxs = make(chan libtypes.Announcements, 1024) //defer close(newTxs) config.TxPool.Optimism = chainConfig.Optimism != nil backend.txPoolDB, backend.txPool, backend.txPoolFetch, backend.txPoolSend, backend.txPoolGrpcServer, err = txpooluitl.AllComponents( @@ -673,7 +705,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger config.Sync, stagedsync.MiningStages(backend.sentryCtx, stagedsync.StageMiningCreateBlockCfg(backend.chainDB, miner, *backend.chainConfig, backend.engine, backend.txPoolDB, nil, tmpdir, backend.blockReader), - stagedsync.StageBorHeimdallCfg(backend.chainDB, snapDb, miner, *backend.chainConfig, heimdallClient, backend.blockReader, nil, nil, nil, recents, signatures), + stagedsync.StageBorHeimdallCfg(backend.chainDB, snapDb, miner, *backend.chainConfig, heimdallClient, backend.blockReader, nil, nil, nil, recents, signatures, false, nil), stagedsync.StageMiningExecCfg(backend.chainDB, miner, backend.notifications.Events, *backend.chainConfig, backend.engine, &vm.Config{}, tmpdir, nil, 0, backend.txPool, backend.txPoolDB, blockReader), stagedsync.StageHashStateCfg(backend.chainDB, dirs, config.HistoryV3), stagedsync.StageTrieCfg(backend.chainDB, false, true, true, tmpdir, blockReader, nil, config.HistoryV3, backend.agg), @@ -694,7 +726,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger config.Sync, stagedsync.MiningStages(backend.sentryCtx, stagedsync.StageMiningCreateBlockCfg(backend.chainDB, miningStatePos, *backend.chainConfig, backend.engine, backend.txPoolDB, param, tmpdir, backend.blockReader), - stagedsync.StageBorHeimdallCfg(backend.chainDB, snapDb, miningStatePos, *backend.chainConfig, heimdallClient, backend.blockReader, nil, nil, nil, recents, signatures), + stagedsync.StageBorHeimdallCfg(backend.chainDB, snapDb, miningStatePos, *backend.chainConfig, heimdallClient, backend.blockReader, nil, nil, nil, recents, signatures, false, nil), stagedsync.StageMiningExecCfg(backend.chainDB, miningStatePos, backend.notifications.Events, *backend.chainConfig, backend.engine, &vm.Config{}, tmpdir, interrupt, param.PayloadId, backend.txPool, backend.txPoolDB, blockReader), stagedsync.StageHashStateCfg(backend.chainDB, dirs, config.HistoryV3), stagedsync.StageTrieCfg(backend.chainDB, false, true, true, tmpdir, blockReader, nil, config.HistoryV3, backend.agg), @@ -713,7 +745,7 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger // Initialize ethbackend ethBackendRPC := privateapi.NewEthBackendServer(ctx, backend, backend.chainDB, backend.notifications.Events, blockReader, logger, latestBlockBuiltStore) - // intiialize engine backend + // initialize engine backend blockRetire := freezeblocks.NewBlockRetire(1, dirs, blockReader, blockWriter, backend.chainDB, backend.chainConfig, backend.notifications.Events, logger) @@ -811,47 +843,61 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger backend.ethBackendRPC, backend.miningRPC, backend.stateChangesClient = ethBackendRPC, miningRPC, stateDiffClient - backend.syncStages = stages2.NewDefaultStages(backend.sentryCtx, backend.chainDB, snapDb, stack.Config().P2P, config, backend.sentriesClient, backend.notifications, backend.downloaderClient, + backend.syncStages = stages2.NewDefaultStages(backend.sentryCtx, backend.chainDB, snapDb, p2pConfig, config, backend.sentriesClient, backend.notifications, backend.downloaderClient, blockReader, blockRetire, backend.agg, backend.silkworm, backend.forkValidator, heimdallClient, recents, signatures, logger) backend.syncUnwindOrder = stagedsync.DefaultUnwindOrder backend.syncPruneOrder = stagedsync.DefaultPruneOrder backend.stagedSync = stagedsync.New(config.Sync, backend.syncStages, backend.syncUnwindOrder, backend.syncPruneOrder, logger) - hook := stages2.NewHook(backend.sentryCtx, backend.chainDB, backend.notifications, backend.stagedSync, backend.blockReader, backend.chainConfig, backend.logger, backend.sentriesClient.UpdateHead) + hook := stages2.NewHook(backend.sentryCtx, backend.chainDB, backend.notifications, backend.stagedSync, backend.blockReader, backend.chainConfig, backend.logger, backend.sentriesClient.SetStatus) + + if !config.Sync.UseSnapshots && backend.downloaderClient != nil { + for _, p := range blockReader.AllTypes() { + backend.downloaderClient.ProhibitNewDownloads(ctx, &protodownloader.ProhibitNewDownloadsRequest{ + Type: p.Name(), + }) + } + + for _, p := range snaptype.CaplinSnapshotTypes { + backend.downloaderClient.ProhibitNewDownloads(ctx, &protodownloader.ProhibitNewDownloadsRequest{ + Type: p.Name(), + }) + } + + } checkStateRoot := true - pipelineStages := stages2.NewPipelineStages(ctx, chainKv, config, stack.Config().P2P, backend.sentriesClient, backend.notifications, backend.downloaderClient, blockReader, blockRetire, backend.agg, backend.silkworm, backend.forkValidator, logger, checkStateRoot) + pipelineStages := stages2.NewPipelineStages(ctx, chainKv, config, p2pConfig, backend.sentriesClient, backend.notifications, backend.downloaderClient, blockReader, blockRetire, backend.agg, backend.silkworm, backend.forkValidator, logger, checkStateRoot) backend.pipelineStagedSync = stagedsync.New(config.Sync, pipelineStages, stagedsync.PipelineUnwindOrder, stagedsync.PipelinePruneOrder, logger) - backend.eth1ExecutionServer = eth1.NewEthereumExecutionModule(blockReader, chainKv, backend.pipelineStagedSync, backend.forkValidator, chainConfig, assembleBlockPOS, hook, backend.notifications.Accumulator, backend.notifications.StateChangesConsumer, logger, backend.engine, config.HistoryV3) + backend.eth1ExecutionServer = eth1.NewEthereumExecutionModule(blockReader, chainKv, backend.pipelineStagedSync, backend.forkValidator, chainConfig, assembleBlockPOS, hook, backend.notifications.Accumulator, backend.notifications.StateChangesConsumer, logger, backend.engine, config.HistoryV3, ctx) executionRpc := direct.NewExecutionClientDirect(backend.eth1ExecutionServer) engineBackendRPC := engineapi.NewEngineServer( - ctx, logger, chainConfig, executionRpc, backend.sentriesClient.Hd, - engine_block_downloader.NewEngineBlockDownloader(ctx, logger, backend.sentriesClient.Hd, executionRpc, + engine_block_downloader.NewEngineBlockDownloader(ctx, + logger, backend.sentriesClient.Hd, executionRpc, backend.sentriesClient.Bd, backend.sentriesClient.BroadcastNewBlock, backend.sentriesClient.SendBodyRequest, blockReader, chainKv, chainConfig, tmpdir, config.Sync.BodyDownloadTimeoutSeconds), false, config.Miner.EnabledPOS) backend.engineBackendRPC = engineBackendRPC - var engine execution_client.ExecutionEngine - + var executionEngine executionclient.ExecutionEngine // Gnosis has too few blocks on his network for phase2 to work. Once we have proper snapshot automation, it can go back to normal. - if config.NetworkID == uint64(clparams.GnosisNetwork) { + if config.NetworkID == uint64(clparams.GnosisNetwork) || config.NetworkID == uint64(clparams.HoleskyNetwork) || config.NetworkID == uint64(clparams.GoerliNetwork) { // Read the jwt secret jwtSecret, err := cli.ObtainJWTSecret(&stack.Config().Http, logger) if err != nil { return nil, err } - engine, err = execution_client.NewExecutionClientRPC(ctx, jwtSecret, stack.Config().Http.AuthRpcHTTPListenAddress, stack.Config().Http.AuthRpcPort) + executionEngine, err = executionclient.NewExecutionClientRPC(jwtSecret, stack.Config().Http.AuthRpcHTTPListenAddress, stack.Config().Http.AuthRpcPort) if err != nil { return nil, err } } else { - engine, err = execution_client.NewExecutionClientDirect(ctx, eth1_chain_reader.NewChainReaderEth1(ctx, chainConfig, executionRpc, 1000)) + executionEngine, err = executionclient.NewExecutionClientDirect(eth1_chain_reader.NewChainReaderEth1(chainConfig, executionRpc, 1000)) if err != nil { return nil, err } @@ -859,67 +905,74 @@ func New(ctx context.Context, stack *node.Node, config *ethconfig.Config, logger // If we choose not to run a consensus layer, run our embedded. if config.InternalCL && clparams.EmbeddedSupported(config.NetworkID) { - genesisCfg, networkCfg, beaconCfg := clparams.GetConfigsByNetwork(clparams.NetworkType(config.NetworkID)) + networkCfg, beaconCfg := clparams.GetConfigsByNetwork(clparams.NetworkType(config.NetworkID)) if err != nil { return nil, err } - state, err := clcore.RetrieveBeaconState(ctx, beaconCfg, genesisCfg, + state, err := clcore.RetrieveBeaconState(ctx, beaconCfg, clparams.GetCheckpointSyncEndpoint(clparams.NetworkType(config.NetworkID))) if err != nil { return nil, err } - forkDigest, err := fork.ComputeForkDigest(beaconCfg, genesisCfg) - if err != nil { - return nil, err - } + ethClock := eth_clock.NewEthereumClock(state.GenesisTime(), state.GenesisValidatorsRoot(), beaconCfg) - rawBeaconBlockChainDb, _ := persistence.AferoRawBeaconBlockChainFromOsPath(beaconCfg, dirs.CaplinHistory) - historyDB, indiciesDB, err := caplin1.OpenCaplinDatabase(ctx, db_config.DefaultDatabaseConfiguration, beaconCfg, rawBeaconBlockChainDb, dirs.CaplinIndexing, engine, false) - if err != nil { - return nil, err + pruneBlobDistance := uint64(128600) + if config.CaplinConfig.BlobBackfilling || config.CaplinConfig.BlobPruningDisabled { + pruneBlobDistance = math.MaxUint64 } - client, err := service.StartSentinelService(&sentinel.SentinelConfig{ - IpAddr: config.LightClientDiscoveryAddr, - Port: int(config.LightClientDiscoveryPort), - TCPPort: uint(config.LightClientDiscoveryTCPPort), - GenesisConfig: genesisCfg, - NetworkConfig: networkCfg, - BeaconConfig: beaconCfg, - TmpDir: tmpdir, - }, rawBeaconBlockChainDb, indiciesDB, &service.ServerConfig{Network: "tcp", Addr: fmt.Sprintf("%s:%d", config.SentinelAddr, config.SentinelPort)}, creds, &cltypes.Status{ - ForkDigest: forkDigest, - FinalizedRoot: state.FinalizedCheckpoint().BlockRoot(), - FinalizedEpoch: state.FinalizedCheckpoint().Epoch(), - HeadSlot: state.FinalizedCheckpoint().Epoch() * beaconCfg.SlotsPerEpoch, - HeadRoot: state.FinalizedCheckpoint().BlockRoot(), - }, logger) + indiciesDB, blobStorage, err := caplin1.OpenCaplinDatabase(ctx, db_config.DefaultDatabaseConfiguration, beaconCfg, ethClock, dirs.CaplinIndexing, dirs.CaplinBlobs, executionEngine, false, pruneBlobDistance) if err != nil { return nil, err } - backend.sentinel = client - go func() { eth1Getter := getters.NewExecutionSnapshotReader(ctx, beaconCfg, blockReader, backend.chainDB) - if err := caplin1.RunCaplinPhase1(ctx, client, engine, beaconCfg, genesisCfg, state, nil, dirs, snapshotVersion, config.BeaconRouter, eth1Getter, backend.downloaderClient, config.CaplinConfig.Backfilling, config.CaplinConfig.Archive, historyDB, indiciesDB); err != nil { + if err := caplin1.RunCaplinPhase1(ctx, executionEngine, config, networkCfg, beaconCfg, ethClock, state, dirs, eth1Getter, backend.downloaderClient, config.CaplinConfig.Backfilling, config.CaplinConfig.BlobBackfilling, config.CaplinConfig.Archive, indiciesDB, blobStorage, creds); err != nil { logger.Error("could not start caplin", "err", err) } ctxCancel() }() } + if config.PolygonSync { + // TODO - pending sentry multi client refactor + // - sentry multi client should conform to the SentryClient interface and internally + // multiplex + // - for now we just use 1 sentry + var sentryClient direct.SentryClient + for _, client := range sentries { + if client.Protocol() == direct.ETH68 { + sentryClient = client + break + } + } + if sentryClient == nil { + return nil, errors.New("nil sentryClient for polygon sync") + } + + backend.polygonSyncService = polygonsync.NewService( + logger, + chainConfig, + sentryClient, + p2pConfig.MaxPeers, + statusDataProvider, + config.HeimdallURL, + executionEngine, + ) + } + return backend, nil } -func (s *Ethereum) Init(stack *node.Node, config *ethconfig.Config) error { +func (s *Ethereum) Init(stack *node.Node, config *ethconfig.Config, chainConfig *chain.Config) error { ethBackendRPC, miningRPC, stateDiffClient := s.ethBackendRPC, s.miningRPC, s.stateChangesClient blockReader := s.blockReader ctx := s.sentryCtx chainKv := s.chainDB var err error - if config.Genesis.Config.Bor == nil { + if chainConfig.Bor == nil { s.sentriesClient.Hd.StartPoSDownloader(s.sentryCtx, s.sentriesClient.SendHeaderRequest, s.sentriesClient.Penalize) } @@ -945,14 +998,6 @@ func (s *Ethereum) Init(stack *node.Node, config *ethconfig.Config) error { if gpoParams.Default == nil { gpoParams.Default = config.Miner.GasPrice } - //eth.APIBackend.gpo = gasprice.NewOracle(eth.APIBackend, gpoParams) - if config.Ethstats != "" { - var headCh chan [][]byte - headCh, s.unsubscribeEthstat = s.notifications.Events.AddHeaderSubscription() - if err := ethstats.New(stack, s.sentryServers, chainKv, s.blockReader, s.engine, config.Ethstats, s.networkID, ctx.Done(), headCh); err != nil { - return err - } - } // start HTTP API httpRpcCfg := stack.Config().Http ethRpcClient, txPoolRpcClient, miningRpcClient, stateCache, ff, err := cli.EmbeddedServices(ctx, chainKv, httpRpcCfg.StateCache, blockReader, ethBackendRPC, @@ -961,10 +1006,39 @@ func (s *Ethereum) Init(stack *node.Node, config *ethconfig.Config) error { return err } + //eth.APIBackend.gpo = gasprice.NewOracle(eth.APIBackend, gpoParams) + if config.Ethstats != "" { + var headCh chan [][]byte + headCh, s.unsubscribeEthstat = s.notifications.Events.AddHeaderSubscription() + if err := ethstats.New(stack, s.sentryServers, chainKv, s.blockReader, s.engine, config.Ethstats, s.networkID, ctx.Done(), headCh, txPoolRpcClient); err != nil { + return err + } + } + s.apiList = jsonrpc.APIList(chainKv, ethRpcClient, txPoolRpcClient, miningRpcClient, ff, stateCache, blockReader, s.agg, &httpRpcCfg, s.engine, s.seqRPCService, s.historicalRPCService, s.logger) if config.SilkwormRpcDaemon && httpRpcCfg.Enabled { - silkwormRPCDaemonService := silkworm.NewRpcDaemonService(s.silkworm, chainKv) + interface_log_settings := silkworm.RpcInterfaceLogSettings{ + Enabled: config.SilkwormRpcLogEnabled, + ContainerFolder: config.SilkwormRpcLogDirPath, + MaxFileSizeMB: config.SilkwormRpcLogMaxFileSize, + MaxFiles: config.SilkwormRpcLogMaxFiles, + DumpResponse: config.SilkwormRpcLogDumpResponse, + } + settings := silkworm.RpcDaemonSettings{ + EthLogSettings: interface_log_settings, + EthAPIHost: httpRpcCfg.HttpListenAddress, + EthAPIPort: httpRpcCfg.HttpPort, + EthAPISpec: httpRpcCfg.API, + NumWorkers: config.SilkwormRpcNumWorkers, + CORSDomains: httpRpcCfg.HttpCORSDomain, + JWTFilePath: httpRpcCfg.JWTSecretPath, + JSONRPCCompatibility: config.SilkwormRpcJsonCompatibility, + WebSocketEnabled: httpRpcCfg.WebsocketEnabled, + WebSocketCompression: httpRpcCfg.WebsocketCompression, + HTTPCompression: httpRpcCfg.HttpCompression, + } + silkwormRPCDaemonService := silkworm.NewRpcDaemonService(s.silkworm, chainKv, settings) s.silkwormRPCDaemonService = &silkwormRPCDaemonService } else { go func() { @@ -974,8 +1048,8 @@ func (s *Ethereum) Init(stack *node.Node, config *ethconfig.Config) error { }() } - if config.Genesis.Config.Bor == nil { - go s.engineBackendRPC.Start(&httpRpcCfg, s.chainDB, s.blockReader, ff, stateCache, s.agg, s.engine, ethRpcClient, txPoolRpcClient, miningRpcClient, s.seqRPCService, s.historicalRPCService) + if chainConfig.Bor == nil { + go s.engineBackendRPC.Start(ctx, &httpRpcCfg, s.chainDB, s.blockReader, ff, stateCache, s.agg, s.engine, ethRpcClient, txPoolRpcClient, miningRpcClient, s.seqRPCService, s.historicalRPCService) } // Register the backend on the node @@ -1251,7 +1325,7 @@ func (s *Ethereum) NetPeerCount() (uint64, error) { s.logger.Trace("sentry", "peer count", sentryPc) for _, sc := range s.sentriesClient.Sentries() { ctx := context.Background() - reply, err := sc.PeerCount(ctx, &proto_sentry.PeerCountRequest{}) + reply, err := sc.PeerCount(ctx, &protosentry.PeerCountRequest{}) if err != nil { s.logger.Warn("sentry", "err", err) return 0, nil @@ -1302,7 +1376,7 @@ func (s *Ethereum) setUpSnapDownloader(ctx context.Context, downloaderCfg *downl } discover := true - s.downloader, err = downloader.New(ctx, downloaderCfg, s.config.Dirs, s.logger, log.LvlDebug, discover) + s.downloader, err = downloader.New(ctx, downloaderCfg, s.logger, log.LvlDebug, discover) if err != nil { return err } @@ -1318,9 +1392,9 @@ func (s *Ethereum) setUpSnapDownloader(ctx context.Context, downloaderCfg *downl events := s.notifications.Events events.OnNewSnapshot() if s.downloaderClient != nil { - req := &proto_downloader.AddRequest{Items: make([]*proto_downloader.AddItem, 0, len(frozenFileNames))} + req := &protodownloader.AddRequest{Items: make([]*protodownloader.AddItem, 0, len(frozenFileNames))} for _, fName := range frozenFileNames { - req.Items = append(req.Items, &proto_downloader.AddItem{ + req.Items = append(req.Items, &protodownloader.AddItem{ Path: filepath.Join("history", fName), }) } @@ -1332,16 +1406,24 @@ func (s *Ethereum) setUpSnapDownloader(ctx context.Context, downloaderCfg *downl return err } -func setUpBlockReader(ctx context.Context, db kv.RwDB, dirs datadir.Dirs, snashotVersion uint8, snConfig ethconfig.BlocksFreezing, histV3 bool, isBor bool, logger log.Logger) (services.FullBlockReader, *blockio.BlockWriter, *freezeblocks.RoSnapshots, *freezeblocks.BorRoSnapshots, *libstate.AggregatorV3, error) { - allSnapshots := freezeblocks.NewRoSnapshots(snConfig, dirs.Snap, snashotVersion, logger) +func setUpBlockReader(ctx context.Context, db kv.RwDB, dirs datadir.Dirs, snConfig *ethconfig.Config, histV3 bool, isBor bool, logger log.Logger) (services.FullBlockReader, *blockio.BlockWriter, *freezeblocks.RoSnapshots, *freezeblocks.BorRoSnapshots, *libstate.Aggregator, error) { + var minFrozenBlock uint64 + + if frozenLimit := snConfig.Sync.FrozenBlockLimit; frozenLimit != 0 { + if maxSeedable := snapcfg.MaxSeedableSegment(snConfig.Genesis.Config.ChainName, dirs.Snap); maxSeedable > frozenLimit { + minFrozenBlock = maxSeedable - frozenLimit + } + } + + allSnapshots := freezeblocks.NewRoSnapshots(snConfig.Snapshot, dirs.Snap, minFrozenBlock, logger) var allBorSnapshots *freezeblocks.BorRoSnapshots if isBor { - allBorSnapshots = freezeblocks.NewBorRoSnapshots(snConfig, dirs.Snap, snashotVersion, logger) + allBorSnapshots = freezeblocks.NewBorRoSnapshots(snConfig.Snapshot, dirs.Snap, minFrozenBlock, logger) } var err error - if snConfig.NoDownloader { + if snConfig.Snapshot.NoDownloader { allSnapshots.ReopenFolder() if isBor { allBorSnapshots.ReopenFolder() @@ -1355,7 +1437,7 @@ func setUpBlockReader(ctx context.Context, db kv.RwDB, dirs datadir.Dirs, snasho blockReader := freezeblocks.NewBlockReader(allSnapshots, allBorSnapshots) blockWriter := blockio.NewBlockWriter(histV3) - agg, err := libstate.NewAggregatorV3(ctx, dirs.SnapHistory, dirs.Tmp, ethconfig.HistoryV3AggregationStep, db, logger) + agg, err := libstate.NewAggregator(ctx, dirs.SnapHistory, dirs.Tmp, config3.HistoryV3AggregationStep, db, logger) if err != nil { return nil, nil, nil, nil, nil, err } @@ -1378,22 +1460,9 @@ func (s *Ethereum) Peers(ctx context.Context) (*remote.PeersReply, error) { return &reply, nil } -func (s *Ethereum) DiagnosticsPeersData() map[string]*diagnostics.PeerStatistics { - var reply map[string]*diagnostics.PeerStatistics = make(map[string]*diagnostics.PeerStatistics) - for _, sentryServer := range s.sentryServers { - peers := sentryServer.DiagnosticsPeersData() - - for key, value := range peers { - reply[key] = value - } - } - - return reply -} - func (s *Ethereum) AddPeer(ctx context.Context, req *remote.AddPeerRequest) (*remote.AddPeerReply, error) { for _, sentryClient := range s.sentriesClient.Sentries() { - _, err := sentryClient.AddPeer(ctx, &proto_sentry.AddPeerRequest{Url: req.Url}) + _, err := sentryClient.AddPeer(ctx, &protosentry.AddPeerRequest{Url: req.Url}) if err != nil { return nil, fmt.Errorf("ethereum backend MultiClient.AddPeers error: %w", err) } @@ -1417,7 +1486,7 @@ func (s *Ethereum) Start() error { s.sentriesClient.StartStreamLoops(s.sentryCtx) time.Sleep(10 * time.Millisecond) // just to reduce logs order confusion - hook := stages2.NewHook(s.sentryCtx, s.chainDB, s.notifications, s.stagedSync, s.blockReader, s.chainConfig, s.logger, s.sentriesClient.UpdateHead) + hook := stages2.NewHook(s.sentryCtx, s.chainDB, s.notifications, s.stagedSync, s.blockReader, s.chainConfig, s.logger, s.sentriesClient.SetStatus) currentTDProvider := func() *big.Int { currentTD, err := readCurrentTotalDifficulty(s.sentryCtx, s.chainDB, s.blockReader) @@ -1427,13 +1496,34 @@ func (s *Ethereum) Start() error { return currentTD } + nodeStages := s.stagedSync.StagesIdsList() + if params.IsChainPoS(s.chainConfig, currentTDProvider) { + nodeStages = s.pipelineStagedSync.StagesIdsList() s.waitForStageLoopStop = nil // TODO: Ethereum.Stop should wait for execution_server shutdown go s.eth1ExecutionServer.Start(s.sentryCtx) + } else if s.config.PolygonSync { + s.waitForStageLoopStop = nil // Shutdown is handled by context + go func() { + ctx := s.sentryCtx + err := s.polygonSyncService.Run(ctx) + if err == nil || errors.Is(err, context.Canceled) { + return + } + + s.logger.Error("polygon sync crashed - stopping node", "err", err) + err = s.stopNode() + if err != nil { + s.logger.Error("could not stop node", "err", err) + } + }() } else { go stages2.StageLoop(s.sentryCtx, s.chainDB, s.stagedSync, s.sentriesClient.Hd, s.waitForStageLoopStop, s.config.Sync.LoopThrottle, s.logger, s.blockReader, hook, s.config.ForcePartialCommit) } + stages := diagnostics.InitStagesFromList(nodeStages) + diagnostics.Send(diagnostics.SyncStageList{StagesList: stages}) + if s.chainConfig.Bor != nil { s.engine.(*bor.Bor).Start(s.chainDB) } @@ -1547,28 +1637,32 @@ func (s *Ethereum) BlockIO() (services.FullBlockReader, *blockio.BlockWriter) { return s.blockReader, s.blockWriter } -func (s *Ethereum) TxpoolServer() txpool_proto.TxpoolServer { +func (s *Ethereum) TxpoolServer() txpoolproto.TxpoolServer { return s.txPoolGrpcServer } +func (s *Ethereum) ExecutionModule() *eth1.EthereumExecutionModule { + return s.eth1ExecutionServer +} + // RemoveContents is like os.RemoveAll, but preserve dir itself -func RemoveContents(dir string) error { - d, err := os.Open(dir) +func RemoveContents(dirname string) error { + d, err := os.Open(dirname) if err != nil { if errors.Is(err, fs.ErrNotExist) { // ignore due to windows - _ = os.MkdirAll(dir, 0o755) + _ = os.MkdirAll(dirname, 0o755) return nil } return err } defer d.Close() - names, err := d.Readdirnames(-1) + files, err := dir.ReadDir(dirname) if err != nil { return err } - for _, name := range names { - err = os.RemoveAll(filepath.Join(dir, name)) + for _, file := range files { + err = os.RemoveAll(filepath.Join(dirname, file.Name())) if err != nil { return err } @@ -1606,3 +1700,23 @@ func readCurrentTotalDifficulty(ctx context.Context, db kv.RwDB, blockReader ser func (s *Ethereum) Sentinel() rpcsentinel.SentinelClient { return s.sentinel } + +func (s *Ethereum) DataDir() string { + return s.config.Dirs.DataDir +} + +// setBorDefaultMinerGasPrice enforces Miner.GasPrice to be equal to BorDefaultMinerGasPrice (30gwei by default) +func setBorDefaultMinerGasPrice(chainConfig *chain.Config, config *ethconfig.Config, logger log.Logger) { + if chainConfig.Bor != nil && (config.Miner.GasPrice == nil || config.Miner.GasPrice.Cmp(ethconfig.BorDefaultMinerGasPrice) != 0) { + logger.Warn("Sanitizing invalid bor miner gas price", "provided", config.Miner.GasPrice, "updated", ethconfig.BorDefaultMinerGasPrice) + config.Miner.GasPrice = ethconfig.BorDefaultMinerGasPrice + } +} + +// setBorDefaultTxPoolPriceLimit enforces MinFeeCap to be equal to BorDefaultTxPoolPriceLimit (30gwei by default) +func setBorDefaultTxPoolPriceLimit(chainConfig *chain.Config, config txpoolcfg.Config, logger log.Logger) { + if chainConfig.Bor != nil && config.MinFeeCap != txpoolcfg.BorDefaultTxPoolPriceLimit { + logger.Warn("Sanitizing invalid bor min fee cap", "provided", config.MinFeeCap, "updated", txpoolcfg.BorDefaultTxPoolPriceLimit) + config.MinFeeCap = txpoolcfg.BorDefaultTxPoolPriceLimit + } +} diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index d38a99a5ebf..7f342177ebb 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -45,9 +45,8 @@ import ( "github.com/ledgerwatch/erigon/rpc" ) -// AggregationStep number of transactions in smallest static file -const HistoryV3AggregationStep = 3_125_000 // 100M / 32 -//const HistoryV3AggregationStep = 3_125_000 / 100 // use this to reduce step size for dev/debug +// BorDefaultMinerGasPrice defines the minimum gas price for bor validators to mine a transaction. +var BorDefaultMinerGasPrice = big.NewInt(30 * params.GWei) // FullNodeGPO contains default gasprice oracle settings for full node. var FullNodeGPO = gaspricecfg.Config{ @@ -96,6 +95,7 @@ var Defaults = Config{ Recommit: 3 * time.Second, }, DeprecatedTxPool: DeprecatedDefaultTxPoolConfig, + TxPool: txpoolcfg.DefaultConfig, RPCGasCap: 50000000, GPO: FullNodeGPO, RPCTxFeeCap: 1, // 1 ether @@ -128,7 +128,7 @@ func init() { if xdgDataDir := os.Getenv("XDG_DATA_HOME"); xdgDataDir != "" { Defaults.Ethash.DatasetDir = filepath.Join(xdgDataDir, "erigon-ethash") } - Defaults.Ethash.DatasetDir = filepath.Join(home, ".local/share/erigon-ethash") + Defaults.Ethash.DatasetDir = filepath.Join(home, ".local/share/erigon-ethash") //nolint:gocritic } } @@ -232,11 +232,15 @@ type Config struct { // URL to connect to Heimdall node HeimdallURL string - // No heimdall service WithoutHeimdall bool // Heimdall services active WithHeimdallMilestones bool + // Heimdall waypoint recording active + WithHeimdallWaypointRecording bool + // Use polygon checkpoint sync in preference to POW downloader + PolygonSync bool + // Ethstats service Ethstats string // Consensus layer @@ -251,15 +255,25 @@ type Config struct { OverrideCancunTime *big.Int `toml:",omitempty"` OverrideShanghaiTime *big.Int `toml:",omitempty"` + OverridePragueTime *big.Int `toml:",omitempty"` OverrideOptimismCanyonTime *big.Int `toml:",omitempty"` OverrideOptimismEcotoneTime *big.Int `toml:",omitempty"` OverrideOptimismFjordTime *big.Int `toml:",omitempty"` // Embedded Silkworm support - SilkwormExecution bool - SilkwormRpcDaemon bool - SilkwormSentry bool + SilkwormExecution bool + SilkwormRpcDaemon bool + SilkwormSentry bool + SilkwormVerbosity string + SilkwormNumContexts uint32 + SilkwormRpcLogEnabled bool + SilkwormRpcLogDirPath string + SilkwormRpcLogMaxFileSize uint16 + SilkwormRpcLogMaxFiles uint16 + SilkwormRpcLogDumpResponse bool + SilkwormRpcNumWorkers uint32 + SilkwormRpcJsonCompatibility bool DisableTxPoolGossip bool @@ -277,7 +291,7 @@ type Sync struct { BodyCacheLimit datasize.ByteSize BodyDownloadTimeoutSeconds int // TODO: change to duration - PruneLimit int //the maxumum records to delete from the DB during pruning + PruneLimit int //the maximum records to delete from the DB during pruning BreakAfterStage string LoopBlockLimit uint diff --git a/eth/ethconfig/estimate/esitmated_ram.go b/eth/ethconfig/estimate/esitmated_ram.go index 278d1ec0373..b1c1dc1c8d6 100644 --- a/eth/ethconfig/estimate/esitmated_ram.go +++ b/eth/ethconfig/estimate/esitmated_ram.go @@ -4,33 +4,44 @@ import ( "runtime" "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/erigon-lib/common/cmp" "github.com/ledgerwatch/erigon-lib/mmap" ) -type estimatedRamPerWorker datasize.ByteSize +type EstimatedRamPerWorker datasize.ByteSize // Workers - return max workers amount based on total Memory/CPU's and estimated RAM per worker -func (r estimatedRamPerWorker) Workers() int { - // 50% of TotalMemory. Better don't count on 100% because OOM Killer may have aggressive defaults and other software may need RAM - maxWorkersForGivenMemory := (mmap.TotalMemory() / 2) / uint64(r) - res := cmp.Min(AlmostAllCPUs(), int(maxWorkersForGivenMemory)) +func (r EstimatedRamPerWorker) Workers() int { + maxWorkersForGivenMemory := r.WorkersByRAMOnly() + res := cmp.Min(AlmostAllCPUs(), maxWorkersForGivenMemory) return cmp.Max(1, res) // must have at-least 1 worker } -func (r estimatedRamPerWorker) WorkersHalf() int { return cmp.Max(1, r.Workers()/2) } -func (r estimatedRamPerWorker) WorkersQuarter() int { return cmp.Max(1, r.Workers()/4) } +func (r EstimatedRamPerWorker) WorkersHalf() int { + return cmp.Max(1, r.Workers()/2) +} + +func (r EstimatedRamPerWorker) WorkersQuarter() int { + return cmp.Max(1, r.Workers()/4) +} + +// WorkersByRAMOnly - return max workers amount based on total Memory and estimated RAM per worker +func (r EstimatedRamPerWorker) WorkersByRAMOnly() int { + // 50% of TotalMemory. Better don't count on 100% because OOM Killer may have aggressive defaults and other software may need RAM + return cmp.Max(1, int((mmap.TotalMemory()/2)/uint64(r))) +} const ( //elias-fano index building is single-threaded // when set it to 3GB - observed OOM-kil at server with 128Gb ram and 32CPU - IndexSnapshot = estimatedRamPerWorker(4 * datasize.GB) + IndexSnapshot = EstimatedRamPerWorker(4 * datasize.GB) //1-file-compression is multi-threaded - CompressSnapshot = estimatedRamPerWorker(1 * datasize.GB) + CompressSnapshot = EstimatedRamPerWorker(1 * datasize.GB) //state-reconstitution is multi-threaded - ReconstituteState = estimatedRamPerWorker(512 * datasize.MB) + ReconstituteState = EstimatedRamPerWorker(512 * datasize.MB) ) // AlmostAllCPUs - return all-but-one cpus. Leaving 1 cpu for "work producer", also cloud-providers do recommend leave 1 CPU for their IO software diff --git a/eth/ethconfig/tx_pool.go b/eth/ethconfig/tx_pool.go index 69f2131ef1e..8909339f822 100644 --- a/eth/ethconfig/tx_pool.go +++ b/eth/ethconfig/tx_pool.go @@ -71,6 +71,7 @@ var DefaultTxPool2Config = func(fullCfg *Config) txpoolcfg.Config { cfg.MinFeeCap = pool1Cfg.PriceLimit cfg.AccountSlots = pool1Cfg.AccountSlots cfg.BlobSlots = fullCfg.TxPool.BlobSlots + cfg.TotalBlobPoolLimit = fullCfg.TxPool.TotalBlobPoolLimit cfg.LogEvery = 3 * time.Minute cfg.CommitEvery = 5 * time.Minute cfg.TracedSenders = pool1Cfg.TracedSenders diff --git a/eth/ethutils/receipt.go b/eth/ethutils/receipt.go new file mode 100644 index 00000000000..b587879e923 --- /dev/null +++ b/eth/ethutils/receipt.go @@ -0,0 +1,116 @@ +package ethutils + +import ( + "math/big" + + "github.com/holiman/uint256" + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/chain" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/ledgerwatch/erigon/consensus/misc" + "github.com/ledgerwatch/erigon/core/types" +) + +func MarshalReceipt( + receipt *types.Receipt, + txn types.Transaction, + chainConfig *chain.Config, + header *types.Header, + txnHash common.Hash, + signed bool, +) map[string]interface{} { + var chainId *big.Int + switch t := txn.(type) { + case *types.LegacyTx: + if t.Protected() { + chainId = types.DeriveChainId(&t.V).ToBig() + } + case *types.DepositTx: + // Deposit TX does not have chain ID + default: + chainId = txn.GetChainID().ToBig() + } + + var from common.Address + if signed { + signer := types.LatestSignerForChainID(chainId) + from, _ = txn.Sender(*signer) + } + + fields := map[string]interface{}{ + "blockHash": receipt.BlockHash, + "blockNumber": hexutil.Uint64(receipt.BlockNumber.Uint64()), + "transactionHash": txnHash, + "transactionIndex": hexutil.Uint64(receipt.TransactionIndex), + "from": from, + "to": txn.GetTo(), + "type": hexutil.Uint(txn.Type()), + "gasUsed": hexutil.Uint64(receipt.GasUsed), + "cumulativeGasUsed": hexutil.Uint64(receipt.CumulativeGasUsed), + "contractAddress": nil, + "logs": receipt.Logs, + "logsBloom": types.CreateBloom(types.Receipts{receipt}), + } + + if !chainConfig.IsLondon(header.Number.Uint64()) { + fields["effectiveGasPrice"] = (*hexutil.Big)(txn.GetPrice().ToBig()) + } else { + baseFee, _ := uint256.FromBig(header.BaseFee) + gasPrice := new(big.Int).Add(header.BaseFee, txn.GetEffectiveGasTip(baseFee).ToBig()) + fields["effectiveGasPrice"] = (*hexutil.Big)(gasPrice) + } + + // Assign receipt status. + fields["status"] = hexutil.Uint64(receipt.Status) + if receipt.Logs == nil { + fields["logs"] = [][]*types.Log{} + } + + // If the ContractAddress is 20 0x0 bytes, assume it is not a contract creation + if receipt.ContractAddress != (common.Address{}) { + fields["contractAddress"] = receipt.ContractAddress + } + + if chainConfig.IsOptimism() { + if txn.Type() != types.DepositTxType { + fields["l1GasPrice"] = hexutil.Big(*receipt.L1GasPrice) + fields["l1GasUsed"] = hexutil.Big(*receipt.L1GasUsed) + fields["l1Fee"] = hexutil.Big(*receipt.L1Fee) + if receipt.FeeScalar != nil { // removed in Ecotone + fields["l1FeeScalar"] = receipt.FeeScalar + } + if receipt.L1BaseFeeScalar != nil { // added in Ecotone + fields["l1BaseFeeScalar"] = hexutil.Uint64(*receipt.L1BaseFeeScalar) + } + if receipt.L1BlobBaseFeeScalar != nil { // added in Ecotone + fields["l1BlobBaseFeeScalar"] = hexutil.Uint64(*receipt.L1BlobBaseFeeScalar) + } + } else { + if receipt.DepositNonce != nil { + fields["depositNonce"] = hexutil.Uint64(*receipt.DepositNonce) + } + if receipt.DepositReceiptVersion != nil { + fields["depositReceiptVersion"] = hexutil.Uint64(*receipt.DepositReceiptVersion) + } + } + } + + // Set derived blob related fields + numBlobs := len(txn.GetBlobHashes()) + if numBlobs > 0 { + if header.ExcessBlobGas == nil { + log.Warn("excess blob gas not set when trying to marshal blob tx") + } else { + blobGasPrice, err := misc.GetBlobGasPrice(chainConfig, *header.ExcessBlobGas) + if err != nil { + log.Error(err.Error()) + } + fields["blobGasPrice"] = (*hexutil.Big)(blobGasPrice.ToBig()) + fields["blobGasUsed"] = hexutil.Uint64(misc.GetBlobGasUsed(numBlobs)) + } + } + + return fields +} diff --git a/eth/ethutils/utils.go b/eth/ethutils/utils.go index f26d24f442d..8768eb7d502 100644 --- a/eth/ethutils/utils.go +++ b/eth/ethutils/utils.go @@ -1,13 +1,24 @@ package ethutils import ( + "errors" + "reflect" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/crypto/kzg" "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon/consensus" "github.com/ledgerwatch/erigon/core/types" ) +var ( + ErrNilBlobHashes = errors.New("nil blob hashes array") + ErrMaxBlobGasUsed = errors.New("max blob gas used") + ErrMismatchBlobHashes = errors.New("mismatch blob hashes") + ErrInvalidVersiondHash = errors.New("invalid blob versioned hash, must start with VERSIONED_HASH_VERSION_KZG") +) + // IsLocalBlock checks whether the specified block is mined // by local miner accounts. // @@ -32,3 +43,27 @@ func IsLocalBlock(engine consensus.Engine, etherbase libcommon.Address, txPoolLo } return false } + +func ValidateBlobs(blobGasUsed, maxBlobsGas, maxBlobsPerBlock uint64, expectedBlobHashes []libcommon.Hash, transactions *[]types.Transaction) error { + if expectedBlobHashes == nil { + return ErrNilBlobHashes + } + actualBlobHashes := []libcommon.Hash{} + for _, txn := range *transactions { + if txn.Type() == types.BlobTxType { + for _, h := range txn.GetBlobHashes() { + if h[0] != kzg.BlobCommitmentVersionKZG { + return ErrInvalidVersiondHash + } + actualBlobHashes = append(actualBlobHashes, h) + } + } + } + if len(actualBlobHashes) > int(maxBlobsPerBlock) || blobGasUsed > maxBlobsGas { + return ErrMaxBlobGasUsed + } + if !reflect.DeepEqual(actualBlobHashes, expectedBlobHashes) { + return ErrMismatchBlobHashes + } + return nil +} diff --git a/eth/gasprice/gasprice.go b/eth/gasprice/gasprice.go index 46dc23edcf1..62d3545eba8 100644 --- a/eth/gasprice/gasprice.go +++ b/eth/gasprice/gasprice.go @@ -93,6 +93,9 @@ func NewOracle(backend OracleBackend, params gaspricecfg.Config, cache Cache) *O ignorePrice = gaspricecfg.DefaultIgnorePrice log.Warn("Sanitizing invalid gasprice oracle ignore price", "provided", params.IgnorePrice, "updated", ignorePrice) } + + setBorDefaultGpoIgnorePrice(backend.ChainConfig(), params) + r := &Oracle{ backend: backend, lastPrice: params.Default, @@ -298,6 +301,14 @@ func (s *sortingHeap) Pop() interface{} { return x } +// setBorDefaultGpoIgnorePrice enforces gpo IgnorePrice to be equal to BorDefaultGpoIgnorePrice (30gwei by default) +func setBorDefaultGpoIgnorePrice(chainConfig *chain.Config, gasPriceConfig gaspricecfg.Config) { + if chainConfig.Bor != nil && gasPriceConfig.IgnorePrice != gaspricecfg.BorDefaultGpoIgnorePrice { + log.Warn("Sanitizing invalid bor gasprice oracle ignore price", "provided", gasPriceConfig.IgnorePrice, "updated", gaspricecfg.BorDefaultGpoIgnorePrice) + gasPriceConfig.IgnorePrice = gaspricecfg.BorDefaultGpoIgnorePrice + } +} + type bigIntArray []*big.Int func (s bigIntArray) Len() int { return len(s) } diff --git a/eth/gasprice/gaspricecfg/gaspricecfg.go b/eth/gasprice/gaspricecfg/gaspricecfg.go index 0242e915585..4b538472d73 100644 --- a/eth/gasprice/gaspricecfg/gaspricecfg.go +++ b/eth/gasprice/gaspricecfg/gaspricecfg.go @@ -8,6 +8,9 @@ import ( var DefaultIgnorePrice = big.NewInt(2 * params.Wei) +// BorDefaultGpoIgnorePrice defines the minimum gas price below which bor gpo will ignore transactions. +var BorDefaultGpoIgnorePrice = big.NewInt(30 * params.Wei) + var ( DefaultMaxPrice = big.NewInt(500 * params.GWei) diff --git a/eth/integrity/no_gaps_in_canonical_headers.go b/eth/integrity/no_gaps_in_canonical_headers.go index b5900e10e69..8925bb3c008 100644 --- a/eth/integrity/no_gaps_in_canonical_headers.go +++ b/eth/integrity/no_gaps_in_canonical_headers.go @@ -5,24 +5,24 @@ import ( "fmt" "time" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/turbo/services" - "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" - "github.com/ledgerwatch/log/v3" ) -func NoGapsInCanonicalHeaders(tx kv.Tx, ctx context.Context, br services.BlockReader) { +func NoGapsInCanonicalHeaders(tx kv.Tx, ctx context.Context, br services.FullBlockReader) { logEvery := time.NewTicker(10 * time.Second) defer logEvery.Stop() - if err := br.(*freezeblocks.BlockReader).Integrity(ctx); err != nil { + if err := br.Integrity(ctx); err != nil { panic(err) } - firstBlockInDB := br.(*freezeblocks.BlockReader).FrozenBlocks() + 1 + firstBlockInDB := br.FrozenBlocks() + 1 lastBlockNum, err := stages.GetStageProgress(tx, stages.Headers) if err != nil { panic(err) diff --git a/eth/integrity/snap_blocks_read.go b/eth/integrity/snap_blocks_read.go new file mode 100644 index 00000000000..c7fcf356f73 --- /dev/null +++ b/eth/integrity/snap_blocks_read.go @@ -0,0 +1,46 @@ +package integrity + +import ( + "context" + "fmt" + "time" + + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/turbo/services" + "github.com/ledgerwatch/log/v3" +) + +func SnapBlocksRead(db kv.RoDB, blockReader services.FullBlockReader, ctx context.Context, failFast bool) error { + defer log.Info("[integrity] SnapBlocksRead: done") + logEvery := time.NewTicker(10 * time.Second) + defer logEvery.Stop() + + maxBlockNum := blockReader.Snapshots().SegmentsMax() + for i := uint64(0); i < maxBlockNum; i += 10_000 { + if err := db.View(ctx, func(tx kv.Tx) error { + b, err := blockReader.BlockByNumber(ctx, tx, i) + if err != nil { + return err + } + if b == nil { + err := fmt.Errorf("block not found in snapshots: %d\n", i) + if failFast { + return err + } + log.Error("[integrity] SnapBlocksRead", "err", err) + } + return nil + }); err != nil { + return err + } + + select { + case <-ctx.Done(): + return nil + case <-logEvery.C: + log.Info("[integrity] SnapBlocksRead", "blockNum", fmt.Sprintf("%dK/%dK", i/1000, maxBlockNum/1000)) + default: + } + } + return nil +} diff --git a/eth/stagedsync/bor_heimdall_shared.go b/eth/stagedsync/bor_heimdall_shared.go index cbb213f775c..3a94d08ce65 100644 --- a/eth/stagedsync/bor_heimdall_shared.go +++ b/eth/stagedsync/bor_heimdall_shared.go @@ -8,17 +8,16 @@ import ( "fmt" "math/big" "strconv" - "strings" "time" "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/polygon/bor" "github.com/ledgerwatch/erigon/polygon/heimdall" "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/turbo/services" + "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" ) var ( @@ -26,93 +25,207 @@ var ( ErrHeaderValidatorsBytesMismatch = errors.New("header validators bytes mismatch") ) -// LastSpanID TODO - move to block reader -func LastSpanID(tx kv.RwTx, blockReader services.FullBlockReader) (uint64, bool, error) { - sCursor, err := tx.Cursor(kv.BorSpans) - if err != nil { - return 0, false, err +func FetchSpanZeroForMiningIfNeeded( + ctx context.Context, + db kv.RwDB, + blockReader services.FullBlockReader, + heimdallClient heimdall.HeimdallClient, + logger log.Logger, +) error { + return db.Update(ctx, func(tx kv.RwTx) error { + _, err := blockReader.Span(ctx, tx, 0) + if err != nil { + if errors.Is(err, freezeblocks.ErrSpanNotFound) { + _, err = fetchAndWriteHeimdallSpan(ctx, 0, tx, heimdallClient, "FetchSpanZeroForMiningIfNeeded", logger) + return err + } + + return err + } + + return nil + }) +} + +func fetchRequiredHeimdallSpansIfNeeded( + ctx context.Context, + toBlockNum uint64, + tx kv.RwTx, + cfg BorHeimdallCfg, + logPrefix string, + logger log.Logger, +) (uint64, error) { + requiredSpanID := heimdall.SpanIdAt(toBlockNum) + if requiredSpanID == 0 && toBlockNum >= cfg.borConfig.CalculateSprintLength(toBlockNum) { + // when in span 0 we fetch the next span (span 1) at the beginning of sprint 2 (block 16 or later) + requiredSpanID++ + } else if heimdall.IsBlockInLastSprintOfSpan(toBlockNum, cfg.borConfig) { + // for subsequent spans, we always fetch the next span at the beginning of the last sprint of a span + requiredSpanID++ } - defer sCursor.Close() - k, _, err := sCursor.Last() + lastSpanID, exists, err := cfg.blockReader.LastSpanId(ctx, tx) if err != nil { - return 0, false, err + return 0, err } - var lastSpanId uint64 - if k != nil { - lastSpanId = binary.BigEndian.Uint64(k) + if exists && requiredSpanID <= heimdall.SpanId(lastSpanID) { + return lastSpanID, nil } - // TODO tidy this out when moving to block reader - type LastFrozen interface { - LastFrozenSpanID() uint64 - } + var from heimdall.SpanId + if lastSpanID > 0 { + from = heimdall.SpanId(lastSpanID + 1) + } // else fetch from span 0 - snapshotLastSpanId := blockReader.(LastFrozen).LastFrozenSpanID() - if snapshotLastSpanId > lastSpanId { - return snapshotLastSpanId, true, nil + logger.Info(fmt.Sprintf("[%s] Processing spans...", logPrefix), "from", from, "to", requiredSpanID) + for spanID := from; spanID <= requiredSpanID; spanID++ { + if _, err = fetchAndWriteHeimdallSpan(ctx, uint64(spanID), tx, cfg.heimdallClient, logPrefix, logger); err != nil { + return 0, err + } } - return lastSpanId, k != nil, nil + return uint64(requiredSpanID), err } -// LastStateSyncEventID TODO - move to block reader -func LastStateSyncEventID(tx kv.RwTx, blockReader services.FullBlockReader) (uint64, error) { - cursor, err := tx.Cursor(kv.BorEvents) +func fetchAndWriteHeimdallSpan( + ctx context.Context, + spanID uint64, + tx kv.RwTx, + heimdallClient heimdall.HeimdallClient, + logPrefix string, + logger log.Logger, +) (uint64, error) { + response, err := heimdallClient.FetchSpan(ctx, spanID) if err != nil { return 0, err } - defer cursor.Close() - k, _, err := cursor.Last() + spanBytes, err := json.Marshal(response) if err != nil { return 0, err } - var lastEventId uint64 - if k != nil { - lastEventId = binary.BigEndian.Uint64(k) + var spanIDBytes [8]byte + binary.BigEndian.PutUint64(spanIDBytes[:], spanID) + if err = tx.Put(kv.BorSpans, spanIDBytes[:], spanBytes); err != nil { + return 0, err } - // TODO tidy this out when moving to block reader - type LastFrozen interface { - LastFrozenEventID() uint64 + logger.Trace(fmt.Sprintf("[%s] Wrote span", logPrefix), "id", spanID) + return spanID, nil +} + +func fetchAndWriteHeimdallCheckpointsIfNeeded( + ctx context.Context, + toBlockNum uint64, + tx kv.RwTx, + cfg BorHeimdallCfg, + logPrefix string, + logger log.Logger, +) (uint64, error) { + + lastId, exists, err := cfg.blockReader.LastCheckpointId(ctx, tx) + + if err != nil { + return 0, err } - snapshotLastEventId := blockReader.(LastFrozen).LastFrozenEventID() - if snapshotLastEventId > lastEventId { - return snapshotLastEventId, nil + var lastCheckpoint *heimdall.Checkpoint + + if exists { + data, err := cfg.blockReader.Checkpoint(ctx, tx, lastId) + + if err != nil { + return 0, err + } + + var checkpoint heimdall.Checkpoint + + if err := json.Unmarshal(data, &checkpoint); err != nil { + return 0, err + } + + lastCheckpoint = &checkpoint } - return lastEventId, nil + logTimer := time.NewTicker(logInterval) + defer logTimer.Stop() + + count, err := cfg.heimdallClient.FetchCheckpointCount(ctx) + + if err != nil { + return 0, err + } + + logger.Info(fmt.Sprintf("[%s] Processing checkpoints...", logPrefix), "from", lastId+1, "to", toBlockNum, "count", count) + + var lastBlockNum uint64 + + for checkpointId := lastId + 1; checkpointId <= uint64(count) && (lastCheckpoint == nil || lastCheckpoint.EndBlock().Uint64() < toBlockNum); checkpointId++ { + if _, lastCheckpoint, err = fetchAndWriteHeimdallCheckpoint(ctx, checkpointId, tx, cfg.heimdallClient, logPrefix, logger); err != nil { + if !errors.Is(err, heimdall.ErrNotInCheckpointList) { + return 0, err + } + + return lastId, err + } + + lastId = checkpointId + + select { + default: + case <-logTimer.C: + if lastCheckpoint != nil { + lastBlockNum = lastCheckpoint.EndBlock().Uint64() + } + + logger.Info( + fmt.Sprintf("[%s] Checkpoint Progress", logPrefix), + "progress", lastBlockNum, + "lastCheckpointId", lastId, + ) + } + } + + return lastId, err } -func FetchSpanZeroForMiningIfNeeded( +func fetchAndWriteHeimdallCheckpoint( ctx context.Context, - db kv.RwDB, - blockReader services.FullBlockReader, + checkpointId uint64, + tx kv.RwTx, heimdallClient heimdall.HeimdallClient, + logPrefix string, logger log.Logger, -) error { - return db.Update(ctx, func(tx kv.RwTx) error { - _, err := blockReader.Span(ctx, tx, 0) - if err == nil { - return err - } +) (uint64, *heimdall.Checkpoint, error) { + response, err := heimdallClient.FetchCheckpoint(ctx, int64(checkpointId)) + if err != nil { + return 0, nil, err + } - // TODO refactor to use errors.Is - if !strings.Contains(err.Error(), "not found") { - // span exists, no need to fetch - return nil - } + bytes, err := json.Marshal(response) + if err != nil { + return 0, nil, err + } - _, err = fetchAndWriteHeimdallSpan(ctx, 0, tx, heimdallClient, "FetchSpanZeroForMiningIfNeeded", logger) - return err - }) + var idBytes [8]byte + binary.BigEndian.PutUint64(idBytes[:], checkpointId) + if err = tx.Put(kv.BorCheckpoints, idBytes[:], bytes); err != nil { + return 0, nil, err + } + + var blockNumBuf [8]byte + binary.BigEndian.PutUint64(blockNumBuf[:], response.EndBlock().Uint64()) + if err = tx.Put(kv.BorCheckpointEnds, blockNumBuf[:], idBytes[:]); err != nil { + return 0, nil, err + } + + logger.Trace(fmt.Sprintf("[%s] Wrote checkpoint", logPrefix), "id", checkpointId, "start", response.StartBlock(), "end", response.EndBlock()) + return checkpointId, response, nil } -func fetchRequiredHeimdallSpansIfNeeded( +func fetchAndWriteHeimdallMilestonesIfNeeded( ctx context.Context, toBlockNum uint64, tx kv.RwTx, @@ -120,61 +233,121 @@ func fetchRequiredHeimdallSpansIfNeeded( logPrefix string, logger log.Logger, ) (uint64, error) { - requiredSpanID := bor.SpanIDAt(toBlockNum) - if bor.IsBlockInLastSprintOfSpan(toBlockNum, cfg.borConfig) { - requiredSpanID++ + + lastId, exists, err := cfg.blockReader.LastMilestoneId(ctx, tx) + + if err != nil { + return 0, err + } + + var lastMilestone *heimdall.Milestone + + if exists { + data, err := cfg.blockReader.Milestone(ctx, tx, lastId) + + if err != nil { + return 0, err + } + + if len(data) > 0 { + var milestone heimdall.Milestone + + if err := json.Unmarshal(data, &milestone); err != nil { + return 0, err + } + + lastMilestone = &milestone + } } - lastSpanID, exists, err := LastSpanID(tx, cfg.blockReader) + logger.Info(fmt.Sprintf("[%s] Processing milestones...", logPrefix), "from", lastId+1, "to", toBlockNum) + + count, err := cfg.heimdallClient.FetchMilestoneCount(ctx) + if err != nil { return 0, err } - if exists && requiredSpanID <= lastSpanID { - return lastSpanID, nil + // it seems heimdall does not keep may live milestones - if + // you try to get one before this you get an error on the api + + lastActive := uint64(count) - activeMilestones + + if lastId < lastActive { + for lastActive <= uint64(count) { + lastMilestone, err = cfg.heimdallClient.FetchMilestone(ctx, int64(lastActive)) + + if err != nil { + if !errors.Is(err, heimdall.ErrNotInMilestoneList) { + return lastId, err + } + + lastActive++ + continue + } + + break + } + + if lastMilestone == nil || toBlockNum < lastMilestone.StartBlock().Uint64() { + return lastId, nil + } + + lastId = lastActive - 1 } - var from uint64 - if lastSpanID > 0 { - from = lastSpanID + 1 - } // else fetch from span 0 + for milestoneId := lastId + 1; milestoneId <= uint64(count) && (lastMilestone == nil || lastMilestone.EndBlock().Uint64() < toBlockNum); milestoneId++ { + if _, lastMilestone, err = fetchAndWriteHeimdallMilestone(ctx, milestoneId, uint64(count), tx, cfg.heimdallClient, logPrefix, logger); err != nil { + if !errors.Is(err, heimdall.ErrNotInMilestoneList) { + return 0, err + } - logger.Info(fmt.Sprintf("[%s] Processing spans...", logPrefix), "from", from, "to", requiredSpanID) - for spanID := from; spanID <= requiredSpanID; spanID++ { - if _, err = fetchAndWriteHeimdallSpan(ctx, spanID, tx, cfg.heimdallClient, logPrefix, logger); err != nil { - return 0, err + return lastId, nil } + + lastId = milestoneId } - return requiredSpanID, err + return lastId, err } -func fetchAndWriteHeimdallSpan( +var activeMilestones uint64 = 100 + +func fetchAndWriteHeimdallMilestone( ctx context.Context, - spanID uint64, + milestoneId uint64, + count uint64, tx kv.RwTx, heimdallClient heimdall.HeimdallClient, logPrefix string, logger log.Logger, -) (uint64, error) { - response, err := heimdallClient.Span(ctx, spanID) +) (uint64, *heimdall.Milestone, error) { + response, err := heimdallClient.FetchMilestone(ctx, int64(milestoneId)) + if err != nil { - return 0, err + return 0, nil, err } - spanBytes, err := json.Marshal(response) + bytes, err := json.Marshal(response) + if err != nil { - return 0, err + return 0, nil, err } - var spanIDBytes [8]byte - binary.BigEndian.PutUint64(spanIDBytes[:], spanID) - if err = tx.Put(kv.BorSpans, spanIDBytes[:], spanBytes); err != nil { - return 0, err + var idBytes [8]byte + binary.BigEndian.PutUint64(idBytes[:], milestoneId) + if err = tx.Put(kv.BorMilestones, idBytes[:], bytes); err != nil { + return 0, nil, err } - logger.Debug(fmt.Sprintf("[%s] Wrote span", logPrefix), "id", spanID) - return spanID, nil + var blockNumBuf [8]byte + binary.BigEndian.PutUint64(blockNumBuf[:], response.EndBlock().Uint64()) + if err = tx.Put(kv.BorMilestoneEnds, blockNumBuf[:], idBytes[:]); err != nil { + return 0, nil, err + } + + logger.Trace(fmt.Sprintf("[%s] Wrote milestone", logPrefix), "id", milestoneId, "start", response.StartBlock(), "end", response.EndBlock()) + return milestoneId, response, nil } func fetchRequiredHeimdallStateSyncEventsIfNeeded( @@ -184,12 +357,8 @@ func fetchRequiredHeimdallStateSyncEventsIfNeeded( cfg BorHeimdallCfg, logPrefix string, logger log.Logger, - lastStateSyncEventIDGetter func() (uint64, error), + lastStateSyncEventID uint64, ) (uint64, int, time.Duration, error) { - lastStateSyncEventID, err := lastStateSyncEventIDGetter() - if err != nil { - return 0, 0, 0, err - } headerNum := header.Number.Uint64() if headerNum%cfg.borConfig.CalculateSprintLength(headerNum) != 0 || headerNum == 0 { @@ -234,15 +403,35 @@ func fetchAndWriteHeimdallStateSyncEvents( to = time.Unix(int64(pHeader.Time), 0) } + fetchTo := to + var fetchLimit int + + /* TODO + // we want to get as many historical events as we can in + // each call to heimdall - but we need to make sure we + // don't type to get too recent a sync otherwise it will + // return a nil response + + // to implement this we need to do block processing vs the + // local db to set the blocknu index based on iterating + // the local DB rather than the data received from the + // client + if time.Since(fetchTo) > (30 * time.Minute) { + fetchTo = time.Now().Add(-30 * time.Minute) + fetchLimit = 1000 + } + */ + from = lastStateSyncEventID + 1 - logger.Debug( + logger.Trace( fmt.Sprintf("[%s] Fetching state updates from Heimdall", logPrefix), "fromID", from, "to", to.Format(time.RFC3339), ) - eventRecords, err := heimdallClient.StateSyncEvents(ctx, from, to.Unix()) + eventRecords, err := heimdallClient.FetchStateSyncEvents(ctx, from, fetchTo, fetchLimit) + if err != nil { return lastStateSyncEventID, 0, time.Since(fetchStart), err } @@ -259,7 +448,6 @@ func fetchAndWriteHeimdallStateSyncEvents( binary.BigEndian.PutUint64(val[:], lastStateSyncEventID+1) } - const method = "commitState" wroteIndex := false for i, eventRecord := range eventRecords { if eventRecord.ID <= lastStateSyncEventID { @@ -267,13 +455,13 @@ func fetchAndWriteHeimdallStateSyncEvents( } if lastStateSyncEventID+1 != eventRecord.ID || eventRecord.ChainID != chainID || !eventRecord.Time.Before(to) { - return lastStateSyncEventID, i, time.Since(fetchStart), fmt.Errorf(fmt.Sprintf( + return lastStateSyncEventID, i, time.Since(fetchStart), fmt.Errorf( "invalid event record received %s, %s, %s, %s", fmt.Sprintf("blockNum=%d", blockNum), fmt.Sprintf("eventId=%d (exp %d)", eventRecord.ID, lastStateSyncEventID+1), fmt.Sprintf("chainId=%s (exp %s)", eventRecord.ChainID, chainID), fmt.Sprintf("time=%s (exp to %s)", eventRecord.Time, to), - )) + ) } eventRecordWithoutTime := eventRecord.BuildEventRecord() @@ -283,7 +471,7 @@ func fetchAndWriteHeimdallStateSyncEvents( return lastStateSyncEventID, i, time.Since(fetchStart), err } - data, err := stateReceiverABI.Pack(method, big.NewInt(eventRecord.Time.Unix()), recordBytes) + data, err := stateReceiverABI.Pack("commitState", big.NewInt(eventRecord.Time.Unix()), recordBytes) if err != nil { logger.Error(fmt.Sprintf("[%s] Unable to pack tx for commitState", logPrefix), "err", err) return lastStateSyncEventID, i, time.Since(fetchStart), err diff --git a/eth/stagedsync/chain_reader.go b/eth/stagedsync/chain_reader.go index 5c2d75c4292..072818304ed 100644 --- a/eth/stagedsync/chain_reader.go +++ b/eth/stagedsync/chain_reader.go @@ -81,6 +81,9 @@ func (cr ChainReader) FrozenBlocks() uint64 { return cr.BlockReader.FrozenBlocks() } +func (cr ChainReader) BorStartEventID(_ libcommon.Hash, _ uint64) uint64 { + panic("bor events by block not implemented") +} func (cr ChainReader) BorEventsByBlock(_ libcommon.Hash, _ uint64) []rlp.RawValue { panic("bor events by block not implemented") } diff --git a/eth/stagedsync/default_stages.go b/eth/stagedsync/default_stages.go index ca5570ba797..6473732be4e 100644 --- a/eth/stagedsync/default_stages.go +++ b/eth/stagedsync/default_stages.go @@ -3,12 +3,12 @@ package stagedsync import ( "context" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/wrap" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" ) @@ -133,7 +133,7 @@ func DefaultStages(ctx context.Context, { ID: stages.HashState, Description: "Hash the key in the state", - Disabled: bodies.historyV3 || ethconfig.EnableHistoryV4InTest || dbg.StagesOnlyBlocks, + Disabled: bodies.historyV3 || config3.EnableHistoryV4InTest || dbg.StagesOnlyBlocks, Forward: func(firstCycle bool, badBlockUnwind bool, s *StageState, u Unwinder, txc wrap.TxContainer, logger log.Logger) error { return SpawnHashStateStage(s, txc.Tx, hashState, ctx, logger) }, @@ -147,9 +147,9 @@ func DefaultStages(ctx context.Context, { ID: stages.IntermediateHashes, Description: "Generate intermediate hashes and computing state root", - Disabled: bodies.historyV3 || ethconfig.EnableHistoryV4InTest || dbg.StagesOnlyBlocks, + Disabled: bodies.historyV3 || config3.EnableHistoryV4InTest || dbg.StagesOnlyBlocks, Forward: func(firstCycle bool, badBlockUnwind bool, s *StageState, u Unwinder, txc wrap.TxContainer, logger log.Logger) error { - if exec.chainConfig.IsPrague(0) { + if exec.chainConfig.IsOsaka(0) { _, err := SpawnVerkleTrie(s, u, txc.Tx, trieCfg, ctx, logger) return err } @@ -157,7 +157,7 @@ func DefaultStages(ctx context.Context, return err }, Unwind: func(firstCycle bool, u *UnwindState, s *StageState, txc wrap.TxContainer, logger log.Logger) error { - if exec.chainConfig.IsPrague(0) { + if exec.chainConfig.IsOsaka(0) { return UnwindVerkleTrie(u, s, txc.Tx, trieCfg, ctx, logger) } return UnwindIntermediateHashesStage(u, s, txc.Tx, trieCfg, ctx, logger) @@ -313,7 +313,7 @@ func PipelineStages(ctx context.Context, snapshots SnapshotsCfg, blockHashCfg Bl { ID: stages.HashState, Description: "Hash the key in the state", - Disabled: exec.historyV3 && ethconfig.EnableHistoryV4InTest, + Disabled: exec.historyV3 && config3.EnableHistoryV4InTest, Forward: func(firstCycle bool, badBlockUnwind bool, s *StageState, u Unwinder, txc wrap.TxContainer, logger log.Logger) error { return SpawnHashStateStage(s, txc.Tx, hashState, ctx, logger) }, @@ -327,9 +327,9 @@ func PipelineStages(ctx context.Context, snapshots SnapshotsCfg, blockHashCfg Bl { ID: stages.IntermediateHashes, Description: "Generate intermediate hashes and computing state root", - Disabled: exec.historyV3 && ethconfig.EnableHistoryV4InTest, + Disabled: exec.historyV3 && config3.EnableHistoryV4InTest, Forward: func(firstCycle bool, badBlockUnwind bool, s *StageState, u Unwinder, txc wrap.TxContainer, logger log.Logger) error { - if exec.chainConfig.IsPrague(0) { + if exec.chainConfig.IsOsaka(0) { _, err := SpawnVerkleTrie(s, u, txc.Tx, trieCfg, ctx, logger) return err } @@ -337,7 +337,7 @@ func PipelineStages(ctx context.Context, snapshots SnapshotsCfg, blockHashCfg Bl return err }, Unwind: func(firstCycle bool, u *UnwindState, s *StageState, txc wrap.TxContainer, logger log.Logger) error { - if exec.chainConfig.IsPrague(0) { + if exec.chainConfig.IsOsaka(0) { return UnwindVerkleTrie(u, s, txc.Tx, trieCfg, ctx, logger) } return UnwindIntermediateHashesStage(u, s, txc.Tx, trieCfg, ctx, logger) @@ -522,7 +522,7 @@ func UploaderPipelineStages(ctx context.Context, snapshots SnapshotsCfg, headers { ID: stages.HashState, Description: "Hash the key in the state", - Disabled: exec.historyV3 && ethconfig.EnableHistoryV4InTest, + Disabled: exec.historyV3 && config3.EnableHistoryV4InTest, Forward: func(firstCycle bool, badBlockUnwind bool, s *StageState, u Unwinder, txc wrap.TxContainer, logger log.Logger) error { return SpawnHashStateStage(s, txc.Tx, hashState, ctx, logger) }, @@ -536,9 +536,9 @@ func UploaderPipelineStages(ctx context.Context, snapshots SnapshotsCfg, headers { ID: stages.IntermediateHashes, Description: "Generate intermediate hashes and computing state root", - Disabled: exec.historyV3 && ethconfig.EnableHistoryV4InTest, + Disabled: exec.historyV3 && config3.EnableHistoryV4InTest, Forward: func(firstCycle bool, badBlockUnwind bool, s *StageState, u Unwinder, txc wrap.TxContainer, logger log.Logger) error { - if exec.chainConfig.IsPrague(0) { + if exec.chainConfig.IsOsaka(0) { _, err := SpawnVerkleTrie(s, u, txc.Tx, trieCfg, ctx, logger) return err } @@ -546,7 +546,7 @@ func UploaderPipelineStages(ctx context.Context, snapshots SnapshotsCfg, headers return err }, Unwind: func(firstCycle bool, u *UnwindState, s *StageState, txc wrap.TxContainer, logger log.Logger) error { - if exec.chainConfig.IsPrague(0) { + if exec.chainConfig.IsOsaka(0) { return UnwindVerkleTrie(u, s, txc.Tx, trieCfg, ctx, logger) } return UnwindIntermediateHashesStage(u, s, txc.Tx, trieCfg, ctx, logger) diff --git a/eth/stagedsync/exec3.go b/eth/stagedsync/exec3.go index f10435198c4..eee5c9581ae 100644 --- a/eth/stagedsync/exec3.go +++ b/eth/stagedsync/exec3.go @@ -15,6 +15,7 @@ import ( "github.com/c2h5oh/datasize" "github.com/erigontech/mdbx-go/mdbx" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/log/v3" "golang.org/x/sync/errgroup" @@ -38,7 +39,6 @@ import ( "github.com/ledgerwatch/erigon/core/rawdb/rawdbhelpers" "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/ethconfig/estimate" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/turbo/services" @@ -88,7 +88,7 @@ func (p *Progress) Log(rs *state.StateV3, in *exec22.QueueWithRetry, rws *exec22 "buffer", fmt.Sprintf("%s/%s", common.ByteCount(sizeEstimate), common.ByteCount(p.commitThreshold)), "idxStepsInDB", fmt.Sprintf("%.2f", idxStepsAmountInDB), //"inBlk", inputBlockNum, - "step", fmt.Sprintf("%.1f", float64(outTxNum)/float64(ethconfig.HistoryV3AggregationStep)), + "step", fmt.Sprintf("%.1f", float64(outTxNum)/float64(config3.HistoryV3AggregationStep)), "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), ) //var txNums []string @@ -228,7 +228,7 @@ func ExecV3(ctx context.Context, } agg.SetTxNum(inputTxNum) - var outputBlockNum = syncMetrics[stages.Execution] + var outputBlockNum = stages.SyncMetrics[stages.Execution] inputBlockNum := &atomic.Uint64{} var count uint64 var lock sync.RWMutex @@ -342,7 +342,7 @@ func ExecV3(ctx context.Context, case <-pruneEvery.C: if rs.SizeEstimate() < commitThreshold { if agg.CanPrune(tx) { - if err = agg.Prune(ctx, ethconfig.HistoryV3AggregationStep*10); err != nil { // prune part of retired data, before commit + if err = agg.Prune(ctx, config3.HistoryV3AggregationStep*10); err != nil { // prune part of retired data, before commit return err } } else { @@ -473,7 +473,7 @@ func ExecV3(ctx context.Context, if block < cfg.blockReader.FrozenBlocks() { agg.KeepInDB(0) - defer agg.KeepInDB(ethconfig.HistoryV3AggregationStep) + defer agg.KeepInDB(config3.HistoryV3AggregationStep) } getHeaderFunc := func(hash common.Hash, number uint64) (h *types.Header) { @@ -512,7 +512,7 @@ func ExecV3(ctx context.Context, Loop: for blockNum = block; blockNum <= maxBlockNum; blockNum++ { inputBlockNum.Store(blockNum) - b, err = blockWithSenders(chainDb, applyTx, blockReader, blockNum) + b, err = blockWithSenders(ctx, chainDb, applyTx, blockReader, blockNum) if err != nil { return err } @@ -750,18 +750,18 @@ Loop: } return nil } -func blockWithSenders(db kv.RoDB, tx kv.Tx, blockReader services.BlockReader, blockNum uint64) (b *types.Block, err error) { +func blockWithSenders(ctx context.Context, db kv.RoDB, tx kv.Tx, blockReader services.BlockReader, blockNum uint64) (b *types.Block, err error) { if tx == nil { - tx, err = db.BeginRo(context.Background()) + tx, err = db.BeginRo(ctx) if err != nil { return nil, err } defer tx.Rollback() } - return blockReader.BlockByNumber(context.Background(), tx, blockNum) + return blockReader.BlockByNumber(ctx, tx, blockNum) } -func processResultQueue(in *exec22.QueueWithRetry, rws *exec22.ResultsQueue, outputTxNumIn uint64, rs *state.StateV3, agg *libstate.AggregatorV3, applyTx kv.Tx, backPressure chan struct{}, applyWorker *exec3.Worker, canRetry, forceStopAtBlockEnd bool) (outputTxNum uint64, conflicts, triggers int, processedBlockNum uint64, stopedAtBlockEnd bool, err error) { +func processResultQueue(in *exec22.QueueWithRetry, rws *exec22.ResultsQueue, outputTxNumIn uint64, rs *state.StateV3, agg *libstate.Aggregator, applyTx kv.Tx, backPressure chan struct{}, applyWorker *exec3.Worker, canRetry, forceStopAtBlockEnd bool) (outputTxNum uint64, conflicts, triggers int, processedBlockNum uint64, stopedAtBlockEnd bool, err error) { rwsIt := rws.Iter() defer rwsIt.Close() @@ -996,7 +996,7 @@ func reconstituteStep(last bool, logger.Info(fmt.Sprintf("[%s] State reconstitution", s.LogPrefix()), "overall progress", fmt.Sprintf("%.2f%%", progress), "step progress", fmt.Sprintf("%.2f%%", stepProgress), "tx/s", fmt.Sprintf("%.1f", speedTx), "workCh", fmt.Sprintf("%d/%d", len(workCh), cap(workCh)), - "repeat ratio", fmt.Sprintf("%.2f%%", repeatRatio), "queue.len", rs.QueueLen(), "blk", syncMetrics[stages.Execution].GetValueUint64(), + "repeat ratio", fmt.Sprintf("%.2f%%", repeatRatio), "queue.len", rs.QueueLen(), "blk", stages.SyncMetrics[stages.Execution].GetValueUint64(), "buffer", fmt.Sprintf("%s/%s", common.ByteCount(sizeEstimate), common.ByteCount(commitThreshold)), "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys)) if sizeEstimate >= commitThreshold { @@ -1040,7 +1040,7 @@ func reconstituteStep(last bool, for bn := startBlockNum; bn <= endBlockNum; bn++ { t = time.Now() - b, err = blockWithSenders(chainDb, nil, blockReader, bn) + b, err = blockWithSenders(ctx, chainDb, nil, blockReader, bn) if err != nil { return err } @@ -1107,7 +1107,7 @@ func reconstituteStep(last bool, inputTxNum++ } - syncMetrics[stages.Execution].SetUint64(bn) + stages.SyncMetrics[stages.Execution].SetUint64(bn) } return err }(); err != nil { @@ -1335,7 +1335,7 @@ func safeCloseTxTaskCh(ch chan *exec22.TxTask) { func ReconstituteState(ctx context.Context, s *StageState, dirs datadir.Dirs, workerCount int, batchSize datasize.ByteSize, chainDb kv.RwDB, blockReader services.FullBlockReader, - logger log.Logger, agg *libstate.AggregatorV3, engine consensus.Engine, + logger log.Logger, agg *libstate.Aggregator, engine consensus.Engine, chainConfig *chain.Config, genesis *types.Genesis) (err error) { startTime := time.Now() defer agg.EnableMadvNormal().DisableReadAhead() diff --git a/eth/stagedsync/stage.go b/eth/stagedsync/stage.go index 43b248ecdd9..6b9cd6aea73 100644 --- a/eth/stagedsync/stage.go +++ b/eth/stagedsync/stage.go @@ -51,9 +51,6 @@ func (s *StageState) LogPrefix() string { return s.state.LogPrefix() } // Update updates the stage state (current block number) in the database. Can be called multiple times during stage execution. func (s *StageState) Update(db kv.Putter, newBlockNum uint64) error { - if m, ok := syncMetrics[s.ID]; ok { - m.SetUint64(newBlockNum) - } return stages.SaveStageProgress(db, s.ID, newBlockNum) } func (s *StageState) UpdatePrune(db kv.Putter, blockNum uint64) error { diff --git a/eth/stagedsync/stage_bodies.go b/eth/stagedsync/stage_bodies.go index c10aaae4438..206675c7b52 100644 --- a/eth/stagedsync/stage_bodies.go +++ b/eth/stagedsync/stage_bodies.go @@ -11,6 +11,8 @@ import ( "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/erigon-lib/common/metrics" + "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/rawdb/blockio" @@ -97,10 +99,21 @@ func BodiesForward( } defer cfg.bd.ClearBodyCache() var headerProgress, bodyProgress uint64 - headerProgress, err = stages.GetStageProgress(tx, stages.Headers) - if err != nil { - return err + + if cfg.chanConfig.Bor != nil { + headerProgress, err = stages.GetStageProgress(tx, stages.BorHeimdall) + if err != nil { + return err + } + } + + if headerProgress == 0 { + headerProgress, err = stages.GetStageProgress(tx, stages.Headers) + if err != nil { + return err + } } + bodyProgress = s.BlockNumber if bodyProgress >= headerProgress { return nil @@ -112,6 +125,11 @@ func BodiesForward( timeout = 1 } else { // Do not print logs for short periods + diagnostics.Send(diagnostics.BodiesProcessingUpdate{ + From: bodyProgress, + To: headerProgress, + }) + logger.Info(fmt.Sprintf("[%s] Processing bodies...", logPrefix), "from", bodyProgress, "to", headerProgress) } logEvery := time.NewTicker(logInterval) @@ -168,6 +186,14 @@ func BodiesForward( if err != nil { return false, err } + + // this can happen if we have bor heimdall processing + // as the body downloader only has access to headers which + // may be higher than the current bor processing stage + if requestedLow > headerProgress { + requestedLow = headerProgress + } + totalDelivered += delivered d4 += time.Since(start) start = time.Now() @@ -195,40 +221,47 @@ func BodiesForward( if err != nil { return false, err } - blockHeight := header.Number.Uint64() - if blockHeight != nextBlock { - return false, fmt.Errorf("[%s] Header block unexpected when matching body, got %v, expected %v", logPrefix, blockHeight, nextBlock) - } - // Txn & uncle roots are verified via bd.requestedMap - err = cfg.bd.Engine.VerifyUncles(cr, header, rawBody.Uncles) - if err != nil { - logger.Error(fmt.Sprintf("[%s] Uncle verification failed", logPrefix), "number", blockHeight, "hash", header.Hash().String(), "err", err) - u.UnwindTo(blockHeight-1, BadBlock(header.Hash(), fmt.Errorf("Uncle verification failed: %w", err))) - return true, nil - } + // this check is necessary if we have bor heimdall processing as the body downloader only has + // access to headers which may be higher than the current bor processing stage + if headerNumber := header.Number.Uint64(); headerNumber <= headerProgress { + blockHeight := headerNumber + if blockHeight != nextBlock { + return false, fmt.Errorf("[%s] Header block unexpected when matching body, got %v, expected %v", logPrefix, blockHeight, nextBlock) + } - // Check existence before write - because WriteRawBody isn't idempotent (it allocates new sequence range for transactions on every call) - ok, err := rawdb.WriteRawBodyIfNotExists(tx, header.Hash(), blockHeight, rawBody) - if err != nil { - return false, fmt.Errorf("WriteRawBodyIfNotExists: %w", err) - } - if cfg.historyV3 && ok { - if err := rawdb.AppendCanonicalTxNums(tx, blockHeight); err != nil { - return false, err + // Txn & uncle roots are verified via bd.requestedMap + err = cfg.bd.Engine.VerifyUncles(cr, header, rawBody.Uncles) + if err != nil { + logger.Error(fmt.Sprintf("[%s] Uncle verification failed", logPrefix), "number", blockHeight, "hash", header.Hash().String(), "err", err) + u.UnwindTo(blockHeight-1, BadBlock(header.Hash(), fmt.Errorf("Uncle verification failed: %w", err))) + return true, nil } - } - if ok { - dataflow.BlockBodyDownloadStates.AddChange(blockHeight, dataflow.BlockBodyCleared) - } - if blockHeight > bodyProgress { - bodyProgress = blockHeight - if err = s.Update(tx, blockHeight); err != nil { - return false, fmt.Errorf("saving Bodies progress: %w", err) + metrics.UpdateBlockConsumerBodyDownloadDelay(header.Time, header.Number.Uint64(), logger) + + // Check existence before write - because WriteRawBody isn't idempotent (it allocates new sequence range for transactions on every call) + ok, err := rawdb.WriteRawBodyIfNotExists(tx, header.Hash(), blockHeight, rawBody) + if err != nil { + return false, fmt.Errorf("WriteRawBodyIfNotExists: %w", err) + } + if cfg.historyV3 && ok { + if err := rawdb.AppendCanonicalTxNums(tx, blockHeight); err != nil { + return false, err + } + } + if ok { + dataflow.BlockBodyDownloadStates.AddChange(blockHeight, dataflow.BlockBodyCleared) } + + if blockHeight > bodyProgress { + bodyProgress = blockHeight + if err = s.Update(tx, blockHeight); err != nil { + return false, fmt.Errorf("saving Bodies progress: %w", err) + } + } + cfg.bd.AdvanceLow() } - cfg.bd.AdvanceLow() if cfg.loopBreakCheck != nil && cfg.loopBreakCheck(int(i)) { return true, nil @@ -296,6 +329,14 @@ func BodiesForward( if bodyProgress > s.BlockNumber+16 { blocks := bodyProgress - s.BlockNumber secs := time.Since(startTime).Seconds() + + diagnostics.Send(diagnostics.BodiesProcessedUpdate{ + HighestBlock: bodyProgress, + Blocks: blocks, + TimeElapsed: secs, + BlkPerSec: float64(blocks) / secs, + }) + logger.Info(fmt.Sprintf("[%s] Processed", logPrefix), "highest", bodyProgress, "blocks", blocks, "in", secs, "blk/sec", uint64(float64(blocks)/secs)) } @@ -313,6 +354,19 @@ func logDownloadingBodies(logPrefix string, committed, remaining uint64, totalDe var m runtime.MemStats dbg.ReadMemStats(&m) + + diagnostics.Send(diagnostics.BodiesDownloadBlockUpdate{ + BlockNumber: committed, + DeliveryPerSec: uint64(speed), + WastedPerSec: uint64(wastedSpeed), + Remaining: remaining, + Delivered: totalDelivered, + BlockPerSec: totalDelivered / uint64(logInterval/time.Second), + Cache: uint64(bodyCacheSize), + Alloc: m.Alloc, + Sys: m.Sys, + }) + logger.Info(fmt.Sprintf("[%s] Downloading block bodies", logPrefix), "block_num", committed, "delivery/sec", libcommon.ByteCount(uint64(speed)), @@ -330,6 +384,14 @@ func logWritingBodies(logPrefix string, committed, headerProgress uint64, logger var m runtime.MemStats dbg.ReadMemStats(&m) remaining := headerProgress - committed + + diagnostics.Send(diagnostics.BodiesWriteBlockUpdate{ + BlockNumber: committed, + Remaining: remaining, + Alloc: m.Alloc, + Sys: m.Sys, + }) + logger.Info(fmt.Sprintf("[%s] Writing block bodies", logPrefix), "block_num", committed, "remaining", remaining, diff --git a/eth/stagedsync/stage_bor_heimdall.go b/eth/stagedsync/stage_bor_heimdall.go index 88199f74774..b9e43db34e8 100644 --- a/eth/stagedsync/stage_bor_heimdall.go +++ b/eth/stagedsync/stage_bor_heimdall.go @@ -5,7 +5,9 @@ import ( "context" "encoding/binary" "encoding/json" + "errors" "fmt" + "slices" "sort" "time" @@ -14,10 +16,11 @@ import ( "golang.org/x/sync/errgroup" "github.com/ledgerwatch/erigon-lib/chain" - "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/chain/networkname" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/accounts/abi" + "github.com/ledgerwatch/erigon/common/math" "github.com/ledgerwatch/erigon/consensus" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/dataflow" @@ -27,6 +30,7 @@ import ( "github.com/ledgerwatch/erigon/polygon/bor/borcfg" "github.com/ledgerwatch/erigon/polygon/bor/finality" "github.com/ledgerwatch/erigon/polygon/bor/finality/whitelist" + borsnaptype "github.com/ledgerwatch/erigon/polygon/bor/snaptype" "github.com/ledgerwatch/erigon/polygon/bor/valset" "github.com/ledgerwatch/erigon/polygon/heimdall" "github.com/ledgerwatch/erigon/turbo/services" @@ -34,18 +38,16 @@ import ( ) const ( - inmemorySnapshots = 128 // Number of recent vote snapshots to keep in memory InMemorySignatures = 4096 // Number of recent block signatures to keep in memory + inmemorySnapshots = 128 // Number of recent vote snapshots to keep in memory snapshotPersistInterval = 1024 // Number of blocks after which to persist the vote snapshot to the database - extraVanity = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity - extraSeal = 65 // Fixed number of extra-data suffix bytes reserved for signer seal ) type BorHeimdallCfg struct { db kv.RwDB snapDb kv.RwDB // Database to store and retrieve snapshot checkpoints - miningState MiningState - chainConfig chain.Config + miningState *MiningState + chainConfig *chain.Config borConfig *borcfg.BorConfig heimdallClient heimdall.HeimdallClient blockReader services.FullBlockReader @@ -55,6 +57,8 @@ type BorHeimdallCfg struct { loopBreakCheck func(int) bool recents *lru.ARCCache[libcommon.Hash, *bor.Snapshot] signatures *lru.ARCCache[libcommon.Hash, libcommon.Address] + recordWaypoints bool + unwindTypes []string } func StageBorHeimdallCfg( @@ -69,6 +73,8 @@ func StageBorHeimdallCfg( loopBreakCheck func(int) bool, recents *lru.ARCCache[libcommon.Hash, *bor.Snapshot], signatures *lru.ARCCache[libcommon.Hash, libcommon.Address], + recordWaypoints bool, + unwindTypes []string, ) BorHeimdallCfg { var borConfig *borcfg.BorConfig if chainConfig.Bor != nil { @@ -78,8 +84,8 @@ func StageBorHeimdallCfg( return BorHeimdallCfg{ db: db, snapDb: snapDb, - miningState: miningState, - chainConfig: chainConfig, + miningState: &miningState, + chainConfig: &chainConfig, borConfig: borConfig, heimdallClient: heimdallClient, blockReader: blockReader, @@ -89,9 +95,13 @@ func StageBorHeimdallCfg( loopBreakCheck: loopBreakCheck, recents: recents, signatures: signatures, + recordWaypoints: recordWaypoints, + unwindTypes: unwindTypes, } } +var lastMumbaiEventRecord *heimdall.EventRecordWithTime + func BorHeimdallForward( s *StageState, u Unwinder, @@ -101,13 +111,10 @@ func BorHeimdallForward( logger log.Logger, ) (err error) { processStart := time.Now() - - if cfg.borConfig == nil { - return - } - if cfg.heimdallClient == nil { + if cfg.borConfig == nil || cfg.heimdallClient == nil { return } + useExternalTx := tx != nil if !useExternalTx { var err error @@ -155,25 +162,26 @@ func BorHeimdallForward( } lastBlockNum := s.BlockNumber - if cfg.blockReader.FrozenBorBlocks() > lastBlockNum { lastBlockNum = cfg.blockReader.FrozenBorBlocks() } recents, err := lru.NewARC[libcommon.Hash, *bor.Snapshot](inmemorySnapshots) - if err != nil { return err } + signatures, err := lru.NewARC[libcommon.Hash, libcommon.Address](InMemorySignatures) if err != nil { return err } - chain := NewChainReaderImpl(&cfg.chainConfig, tx, cfg.blockReader, logger) - var blockNum uint64 var fetchTime time.Duration + var snapTime time.Duration + var snapInitTime time.Duration + var syncEventTime time.Duration + var eventRecords int lastSpanID, err := fetchRequiredHeimdallSpansIfNeeded(ctx, headNumber, tx, cfg, s.LogPrefix(), logger) @@ -181,21 +189,60 @@ func BorHeimdallForward( return err } - lastStateSyncEventID, err := LastStateSyncEventID(tx, cfg.blockReader) + var lastCheckpointId, lastMilestoneId uint64 + + var waypointTime time.Duration + + if cfg.recordWaypoints { + waypointStart := time.Now() + + lastCheckpointId, err = fetchAndWriteHeimdallCheckpointsIfNeeded(ctx, headNumber, tx, cfg, s.LogPrefix(), logger) + + if err != nil { + return err + } + + lastMilestoneId, err = fetchAndWriteHeimdallMilestonesIfNeeded(ctx, headNumber, tx, cfg, s.LogPrefix(), logger) + + if err != nil { + return err + } + + waypointTime = waypointTime + time.Since(waypointStart) + } + + lastStateSyncEventID, _, err := cfg.blockReader.LastEventId(ctx, tx) if err != nil { return err } + chain := NewChainReaderImpl(cfg.chainConfig, tx, cfg.blockReader, logger) logTimer := time.NewTicker(logInterval) defer logTimer.Stop() - logger.Info("["+s.LogPrefix()+"] Processing sync events...", "from", lastBlockNum+1, "to", headNumber) + logger.Info(fmt.Sprintf("[%s] Processing sync events...", s.LogPrefix()), "from", lastBlockNum+1, "to", headNumber) + + var nextEventRecord *heimdall.EventRecordWithTime for blockNum = lastBlockNum + 1; blockNum <= headNumber; blockNum++ { select { default: case <-logTimer.C: - logger.Info("["+s.LogPrefix()+"] StateSync Progress", "progress", blockNum, "lastSpanID", lastSpanID, "lastStateSyncEventID", lastStateSyncEventID, "total records", eventRecords, "fetch time", fetchTime, "process time", time.Since(processStart)) + logger.Info( + fmt.Sprintf("[%s] StateSync Progress", s.LogPrefix()), + "progress", blockNum, + "lastSpanID", lastSpanID, + "lastCheckpointId", lastCheckpointId, + "lastMilestoneId", lastMilestoneId, + "lastStateSyncEventID", lastStateSyncEventID, + "total records", eventRecords, + "sync-events", syncEventTime, + "sync-event-fetch", fetchTime, + "snaps", snapTime, + "snap-init", snapInitTime, + "waypoints", waypointTime, + "process time", time.Since(processStart), + ) } header, err := cfg.blockReader.HeaderByNumber(ctx, tx, blockNum) @@ -209,61 +256,153 @@ func BorHeimdallForward( // Whitelist whitelistService is called to check if the bor chain is // on the cannonical chain according to milestones if whitelistService != nil && !whitelistService.IsValidChain(blockNum, []*types.Header{header}) { - logger.Debug("["+s.LogPrefix()+"] Verification failed for header", "height", blockNum, "hash", header.Hash()) + logger.Debug( + fmt.Sprintf("[%s] Verification failed for header", s.LogPrefix()), + "height", blockNum, + "hash", header.Hash(), + ) + cfg.penalize(ctx, []headerdownload.PenaltyItem{{ Penalty: headerdownload.BadBlockPenalty, PeerID: cfg.hd.SourcePeerId(header.Hash()), }}) + dataflow.HeaderDownloadStates.AddChange(blockNum, dataflow.HeaderInvalidated) s.state.UnwindTo(blockNum-1, ForkReset(header.Hash())) return fmt.Errorf("verification failed for header %d: %x", blockNum, header.Hash()) } - if blockNum > cfg.blockReader.BorSnapshots().SegmentsMin() { + snapStart := time.Now() + + if cfg.blockReader.BorSnapshots().SegmentsMin() == 0 { + snapTime = snapTime + time.Since(snapStart) // SegmentsMin is only set if running as an uploader process (check SnapshotsCfg.snapshotUploader and // UploadLocationFlag) when we remove snapshots based on FrozenBlockLimit and number of uploaded snapshots // avoid calling this if block for blockNums <= SegmentsMin to avoid reinsertion of snapshots snap := loadSnapshot(blockNum, header.Hash(), cfg.borConfig, recents, signatures, cfg.snapDb, logger) - if snap == nil { - snap, err = initValidatorSets(ctx, tx, cfg.blockReader, cfg.borConfig, - cfg.heimdallClient, chain, blockNum, recents, signatures, cfg.snapDb, logger, s.LogPrefix()) + lastPersistedBlockNum, err := lastPersistedSnapshotBlock(ctx, cfg.snapDb) + if err != nil { + return err + } + // if the last time we persisted snapshots is too far away re-run the forward + // initialization process - this is to avoid memory growth due to recusrion + // in persistValidatorSets + if snap == nil && blockNum-lastPersistedBlockNum > (snapshotPersistInterval*5) { + snap, err = initValidatorSets( + ctx, + tx, + cfg.blockReader, + cfg.borConfig, + cfg.heimdallClient, + chain, + blockNum, + lastPersistedBlockNum, + recents, + signatures, + cfg.snapDb, + logger, + s.LogPrefix(), + ) if err != nil { return fmt.Errorf("can't initialise validator sets: %w", err) } } - if err = persistValidatorSets(ctx, snap, u, tx, cfg.blockReader, cfg.borConfig, chain, blockNum, header.Hash(), recents, signatures, cfg.snapDb, logger, s.LogPrefix()); err != nil { + snapInitTime = snapInitTime + time.Since(snapStart) + + if err = persistValidatorSets( + snap, + u, + cfg.borConfig, + chain, + blockNum, + header.Hash(), + recents, + signatures, + cfg.snapDb, + logger, + s.LogPrefix(), + ); err != nil { return fmt.Errorf("can't persist validator sets: %w", err) } } + snapTime = snapTime + time.Since(snapStart) + if err := checkBorHeaderExtraDataIfRequired(chain, header, cfg.borConfig); err != nil { return err } + snapTime = snapTime + time.Since(snapStart) + + syncEventStart := time.Now() var callTime time.Duration - var records int - lastStateSyncEventID, records, callTime, err = fetchRequiredHeimdallStateSyncEventsIfNeeded( - ctx, - header, - tx, - cfg, - s.LogPrefix(), - logger, - func() (uint64, error) { - return lastStateSyncEventID, nil - }, - ) - if err != nil { - return err + + var endStateSyncEventId uint64 + + // mumbai event records have stopped being produced as of march 2024 + // as part of the goerli decom - so there is no point trying to + // fetch them + if cfg.chainConfig.ChainName == networkname.MumbaiChainName { + if nextEventRecord == nil { + nextEventRecord = lastMumbaiEventRecord + } + } + + if nextEventRecord == nil || header.Time > uint64(nextEventRecord.Time.Unix()) { + var records int + + if lastStateSyncEventID == 0 || lastStateSyncEventID != endStateSyncEventId { + lastStateSyncEventID, records, callTime, err = fetchRequiredHeimdallStateSyncEventsIfNeeded( + ctx, + header, + tx, + cfg, + s.LogPrefix(), + logger, + lastStateSyncEventID, + ) + + if err != nil { + return err + } + } + + if records != 0 { + nextEventRecord = nil + eventRecords += records + } else { + if nextEventRecord == nil || nextEventRecord.ID <= lastStateSyncEventID { + if eventRecord, err := cfg.heimdallClient.FetchStateSyncEvent(ctx, lastStateSyncEventID+1); err == nil { + nextEventRecord = eventRecord + endStateSyncEventId = 0 + } else { + if !errors.Is(err, heimdall.ErrEventRecordNotFound) { + return err + } + + if cfg.chainConfig.ChainName == networkname.MumbaiChainName && lastStateSyncEventID == 276850 { + lastMumbaiEventRecord = &heimdall.EventRecordWithTime{ + EventRecord: heimdall.EventRecord{ + ID: 276851, + }, + Time: time.Unix(math.MaxInt64, 0), + } + } + + endStateSyncEventId = lastStateSyncEventID + } + } + } } - eventRecords += records fetchTime += callTime + syncEventTime = syncEventTime + time.Since(syncEventStart) if cfg.loopBreakCheck != nil && cfg.loopBreakCheck(int(blockNum-lastBlockNum)) { + headNumber = blockNum break } } @@ -278,15 +417,34 @@ func BorHeimdallForward( } } - logger.Info("["+s.LogPrefix()+"] Sync events processed", "progress", blockNum-1, "lastSpanID", lastSpanID, "lastStateSyncEventID", lastStateSyncEventID, "total records", eventRecords, "fetch time", fetchTime, "process time", time.Since(processStart)) + logger.Info( + fmt.Sprintf("[%s] Sync events processed", s.LogPrefix()), + "progress", blockNum-1, + "lastSpanID", lastSpanID, + "lastSpanID", lastSpanID, + "lastCheckpointId", lastCheckpointId, + "lastMilestoneId", lastMilestoneId, + "lastStateSyncEventID", lastStateSyncEventID, + "total records", eventRecords, + "sync event time", syncEventTime, + "fetch time", fetchTime, + "snap time", snapTime, + "waypoint time", waypointTime, + "process time", time.Since(processStart), + ) return } -func loadSnapshot(blockNum uint64, hash libcommon.Hash, config *borcfg.BorConfig, recents *lru.ARCCache[libcommon.Hash, *bor.Snapshot], +func loadSnapshot( + blockNum uint64, + hash libcommon.Hash, + config *borcfg.BorConfig, + recents *lru.ARCCache[libcommon.Hash, *bor.Snapshot], signatures *lru.ARCCache[libcommon.Hash, libcommon.Address], snapDb kv.RwDB, - logger log.Logger) *bor.Snapshot { + logger log.Logger, +) *bor.Snapshot { if s, ok := recents.Get(hash); ok { return s @@ -303,11 +461,8 @@ func loadSnapshot(blockNum uint64, hash libcommon.Hash, config *borcfg.BorConfig } func persistValidatorSets( - ctx context.Context, snap *bor.Snapshot, u Unwinder, - tx kv.Tx, - blockReader services.FullBlockReader, config *borcfg.BorConfig, chain consensus.ChainHeaderReader, blockNum uint64, @@ -316,7 +471,8 @@ func persistValidatorSets( signatures *lru.ARCCache[libcommon.Hash, libcommon.Address], snapDb kv.RwDB, logger log.Logger, - logPrefix string) error { + logPrefix string, +) error { logEvery := time.NewTicker(logInterval) defer logEvery.Stop() @@ -329,6 +485,9 @@ func persistValidatorSets( snap = s } + count := 0 + dbsize := uint64(0) + //nolint:govet for snap == nil { // If an on-disk snapshot can be found, use that @@ -374,9 +533,23 @@ func persistValidatorSets( select { case <-logEvery.C: - logger.Info(fmt.Sprintf("[%s] Gathering headers for validator proposer prorities (backwards)", logPrefix), "blockNum", blockNum) + if dbsize == 0 { + _ = snapDb.View(context.Background(), func(tx kv.Tx) error { + if cursor, err := tx.Cursor(kv.BorSeparate); err == nil { + dbsize, _ = cursor.Count() + cursor.Close() + } + return nil + }) + } + logger.Info( + fmt.Sprintf("[%s] Gathering headers for validator proposer prorities (backwards)", logPrefix), + "processed", count, "blockNum", blockNum, "dbsize", dbsize, + ) default: } + + count++ } // check if snapshot is nil @@ -393,7 +566,7 @@ func persistValidatorSets( var err error if snap, err = snap.Apply(parent, headers, logger); err != nil { if snap != nil { - var badHash common.Hash + var badHash libcommon.Hash for _, header := range headers { if header.Number.Uint64() == snap.Number+1 { badHash = header.Hash() @@ -402,7 +575,13 @@ func persistValidatorSets( } u.UnwindTo(snap.Number, BadBlock(badHash, err)) } else { - return fmt.Errorf("snap.Apply %d, headers %d-%d: %w", blockNum, headers[0].Number.Uint64(), headers[len(headers)-1].Number.Uint64(), err) + return fmt.Errorf( + "snap.Apply %d, headers %d-%d: %w", + blockNum, + headers[0].Number.Uint64(), + headers[len(headers)-1].Number.Uint64(), + err, + ) } } } @@ -415,12 +594,35 @@ func persistValidatorSets( return fmt.Errorf("snap.Store: %w", err) } - logger.Debug(fmt.Sprintf("[%s] Stored proposer snapshot to disk", logPrefix), "number", snap.Number, "hash", snap.Hash) + logger.Debug( + fmt.Sprintf("[%s] Stored proposer snapshot to disk (persist)", logPrefix), + "number", snap.Number, + "hash", snap.Hash, + ) } return nil } +func lastPersistedSnapshotBlock(ctx context.Context, snapDb kv.RwDB) (uint64, error) { + var lastPersistedBlockNum uint64 + + err := snapDb.View(context.Background(), func(tx kv.Tx) error { + progressBytes, err := tx.GetOne(kv.BorSeparate, []byte("bor-snapshot-progress")) + if err != nil { + return err + } + + if len(progressBytes) == 8 { + lastPersistedBlockNum = binary.BigEndian.Uint64(progressBytes) + } + + return nil + }) + + return lastPersistedBlockNum, err +} + func initValidatorSets( ctx context.Context, tx kv.RwTx, @@ -429,100 +631,141 @@ func initValidatorSets( heimdallClient heimdall.HeimdallClient, chain consensus.ChainHeaderReader, blockNum uint64, + lastPersistedBlockNum uint64, recents *lru.ARCCache[libcommon.Hash, *bor.Snapshot], signatures *lru.ARCCache[libcommon.Hash, libcommon.Address], snapDb kv.RwDB, logger log.Logger, - logPrefix string) (*bor.Snapshot, error) { + logPrefix string, +) (*bor.Snapshot, error) { logEvery := time.NewTicker(logInterval) defer logEvery.Stop() var snap *bor.Snapshot - // Special handling of the headers in the snapshot - zeroHeader := chain.GetHeaderByNumber(0) - if zeroHeader != nil { - // get checkpoint data - hash := zeroHeader.Hash() + var parentHeader *types.Header + var firstBlockNum uint64 - if zeroSnap := loadSnapshot(0, hash, config, recents, signatures, snapDb, logger); zeroSnap != nil { - return nil, nil - } + if lastPersistedBlockNum > 0 { + parentHeader = chain.GetHeaderByNumber(lastPersistedBlockNum) + snap = loadSnapshot(lastPersistedBlockNum, parentHeader.Hash(), config, recents, signatures, snapDb, logger) + firstBlockNum = lastPersistedBlockNum + 1 + } else { + // Special handling of the headers in the snapshot + zeroHeader := chain.GetHeaderByNumber(0) - // get validators and current span - zeroSpanBytes, err := blockReader.Span(ctx, tx, 0) + if zeroHeader != nil { + // get checkpoint data + hash := zeroHeader.Hash() - if err != nil { - if _, err := fetchAndWriteHeimdallSpan(ctx, 0, tx, heimdallClient, logPrefix, logger); err != nil { - return nil, err - } + if snap = loadSnapshot(0, hash, config, recents, signatures, snapDb, logger); snap == nil { + // get validators and current span + zeroSpanBytes, err := blockReader.Span(ctx, tx, 0) - zeroSpanBytes, err = blockReader.Span(ctx, tx, 0) + if err != nil { + if _, err := fetchAndWriteHeimdallSpan(ctx, 0, tx, heimdallClient, logPrefix, logger); err != nil { + return nil, err + } - if err != nil { - return nil, err + zeroSpanBytes, err = blockReader.Span(ctx, tx, 0) + + if err != nil { + return nil, err + } + } + + if zeroSpanBytes == nil { + return nil, fmt.Errorf("zero span not found") + } + + var zeroSpan heimdall.Span + if err = json.Unmarshal(zeroSpanBytes, &zeroSpan); err != nil { + return nil, err + } + + // new snap shot + snap = bor.NewSnapshot(config, signatures, 0, hash, zeroSpan.ValidatorSet.Validators, logger) + if err := snap.Store(snapDb); err != nil { + return nil, fmt.Errorf("snap.Store (0): %w", err) + } + + logger.Debug(fmt.Sprintf("[%s] Stored proposer snapshot to disk (init)", logPrefix), "number", 0, "hash", hash) } - } - if zeroSpanBytes == nil { - return nil, fmt.Errorf("zero span not found") + parentHeader = zeroHeader + firstBlockNum = 1 + lastPersistedBlockNum = 0 } + } - var zeroSpan heimdall.HeimdallSpan - if err = json.Unmarshal(zeroSpanBytes, &zeroSpan); err != nil { - return nil, err - } + g := errgroup.Group{} + g.SetLimit(estimate.AlmostAllCPUs()) + defer func() { + _ = g.Wait() // goroutines used in this err group do not return err (check below) + }() - // new snap shot - snap = bor.NewSnapshot(config, signatures, 0, hash, zeroSpan.ValidatorSet.Validators, logger) - if err := snap.Store(snapDb); err != nil { - return nil, fmt.Errorf("snap.Store (0): %w", err) - } - logger.Debug(fmt.Sprintf("[%s] Stored proposer snapshot to disk", logPrefix), "number", 0, "hash", hash) - g := errgroup.Group{} - g.SetLimit(estimate.AlmostAllCPUs()) - defer g.Wait() - - batchSize := 128 // must be < InMemorySignatures - initialHeaders := make([]*types.Header, 0, batchSize) - parentHeader := zeroHeader - for i := uint64(1); i <= blockNum; i++ { - header := chain.GetHeaderByNumber(i) - { - // `snap.apply` bottleneck - is recover of signer. - // to speedup: recover signer in background goroutines and save in `sigcache` - // `batchSize` < `InMemorySignatures`: means all current batch will fit in cache - and `snap.apply` will find it there. - g.Go(func() error { - if header == nil { - return nil - } - _, _ = bor.Ecrecover(header, signatures, config) + batchSize := 128 // must be < InMemorySignatures + initialHeaders := make([]*types.Header, 0, batchSize) + + var err error + + for i := firstBlockNum; i <= blockNum; i++ { + header := chain.GetHeaderByNumber(i) + { + // `snap.apply` bottleneck - is recover of signer. + // to speedup: recover signer in background goroutines and save in `sigcache` + // `batchSize` < `InMemorySignatures`: means all current batch will fit in cache - and + // `snap.apply` will find it there. + g.Go(func() error { + if header == nil { return nil - }) - } - if header == nil { - return nil, fmt.Errorf("missing header persisting validator sets: (inside loop at %d)", i) - } - initialHeaders = append(initialHeaders, header) - if len(initialHeaders) == cap(initialHeaders) { - if snap, err = snap.Apply(parentHeader, initialHeaders, logger); err != nil { - return nil, fmt.Errorf("snap.Apply (inside loop): %w", err) } - parentHeader = initialHeaders[len(initialHeaders)-1] - initialHeaders = initialHeaders[:0] + _, _ = bor.Ecrecover(header, signatures, config) + return nil + }) + } + if header == nil { + return nil, fmt.Errorf("missing header persisting validator sets: (inside loop at %d)", i) + } + initialHeaders = append(initialHeaders, header) + + if len(initialHeaders) == cap(initialHeaders) { + + if snap, err = snap.Apply(parentHeader, initialHeaders, logger); err != nil { + return nil, fmt.Errorf("snap.Apply (inside loop): %w", err) } - select { - case <-logEvery.C: - logger.Info(fmt.Sprintf("[%s] Computing validator proposer prorities (forward)", logPrefix), "blockNum", i) - default: + + parentHeader = initialHeaders[len(initialHeaders)-1] + initialHeaders = initialHeaders[:0] + + // If we've generated a new persistent snapshot, save to disk + if snap.Number%snapshotPersistInterval == 0 { + if err := snap.Store(snapDb); err != nil { + return nil, fmt.Errorf("snap.Store: %w", err) + } + + lastPersistedBlockNum = snap.Number + + logger.Trace( + fmt.Sprintf("[%s] Stored proposer snapshot to disk (init loop)", logPrefix), + "number", snap.Number, + "hash", snap.Hash, + ) } } - if snap, err = snap.Apply(parentHeader, initialHeaders, logger); err != nil { - return nil, fmt.Errorf("snap.Apply (outside loop): %w", err) + + select { + case <-logEvery.C: + logger.Info(fmt.Sprintf("[%s] Computing validator proposer prorities (forward)", logPrefix), "to", blockNum, "snapNum", i, "persisted", lastPersistedBlockNum) + default: } } + if snap, err = snap.Apply(parentHeader, initialHeaders, logger); err != nil { + return nil, fmt.Errorf("snap.Apply (outside loop): %w", err) + } + return snap, nil } @@ -538,9 +781,9 @@ func checkBorHeaderExtraDataIfRequired(chr consensus.ChainHeaderReader, header * } func checkBorHeaderExtraData(chr consensus.ChainHeaderReader, header *types.Header, cfg *borcfg.BorConfig) error { - spanID := bor.SpanIDAt(header.Number.Uint64() + 1) - spanBytes := chr.BorSpan(spanID) - var sp heimdall.HeimdallSpan + spanID := heimdall.SpanIdAt(header.Number.Uint64() + 1) + spanBytes := chr.BorSpan(uint64(spanID)) + var sp heimdall.Span if err := json.Unmarshal(spanBytes, &sp); err != nil { return err } @@ -574,10 +817,11 @@ func checkBorHeaderExtraData(chr consensus.ChainHeaderReader, header *types.Head return nil } -func BorHeimdallUnwind(u *UnwindState, ctx context.Context, s *StageState, tx kv.RwTx, cfg BorHeimdallCfg) (err error) { +func BorHeimdallUnwind(u *UnwindState, ctx context.Context, _ *StageState, tx kv.RwTx, cfg BorHeimdallCfg) (err error) { if cfg.borConfig == nil { return } + useExternalTx := tx != nil if !useExternalTx { tx, err = cfg.db.BeginRw(ctx) @@ -586,26 +830,40 @@ func BorHeimdallUnwind(u *UnwindState, ctx context.Context, s *StageState, tx kv } defer tx.Rollback() } - cursor, err := tx.RwCursor(kv.BorEventNums) - if err != nil { - return err - } - defer cursor.Close() - var blockNumBuf [8]byte - binary.BigEndian.PutUint64(blockNumBuf[:], u.UnwindPoint+1) - k, v, err := cursor.Seek(blockNumBuf[:]) - if err != nil { - return err - } - if k != nil { - // v is the encoding of the first eventId to be removed - eventCursor, err := tx.RwCursor(kv.BorEvents) + + if len(cfg.unwindTypes) == 0 || slices.Contains(cfg.unwindTypes, "events") { + cursor, err := tx.RwCursor(kv.BorEventNums) + if err != nil { + return err + } + + defer cursor.Close() + + var blockNumBuf [8]byte + binary.BigEndian.PutUint64(blockNumBuf[:], u.UnwindPoint+1) + k, v, err := cursor.Seek(blockNumBuf[:]) if err != nil { return err } - defer eventCursor.Close() - for v, _, err = eventCursor.Seek(v); err == nil && v != nil; v, _, err = eventCursor.Next() { - if err = eventCursor.DeleteCurrent(); err != nil { + if k != nil { + // v is the encoding of the first eventId to be removed + eventCursor, err := tx.RwCursor(kv.BorEvents) + if err != nil { + return err + } + defer eventCursor.Close() + for v, _, err = eventCursor.Seek(v); err == nil && v != nil; v, _, err = eventCursor.Next() { + if err = eventCursor.DeleteCurrent(); err != nil { + return err + } + } + if err != nil { + return err + } + } + + for ; err == nil && k != nil; k, _, err = cursor.Next() { + if err = cursor.DeleteCurrent(); err != nil { return err } } @@ -613,43 +871,108 @@ func BorHeimdallUnwind(u *UnwindState, ctx context.Context, s *StageState, tx kv return err } } - for ; err == nil && k != nil; k, _, err = cursor.Next() { - if err = cursor.DeleteCurrent(); err != nil { + + // Removing spans + if len(cfg.unwindTypes) == 0 || slices.Contains(cfg.unwindTypes, "spans") { + spanCursor, err := tx.RwCursor(kv.BorSpans) + if err != nil { return err } + + defer spanCursor.Close() + lastSpanToKeep := heimdall.SpanIdAt(u.UnwindPoint) + var spanIdBytes [8]byte + binary.BigEndian.PutUint64(spanIdBytes[:], uint64(lastSpanToKeep+1)) + for k, _, err := spanCursor.Seek(spanIdBytes[:]); err == nil && k != nil; k, _, err = spanCursor.Next() { + if err = spanCursor.DeleteCurrent(); err != nil { + return err + } + } } - if err != nil { - return err - } - // Removing spans - spanCursor, err := tx.RwCursor(kv.BorSpans) - if err != nil { - return err + + // Removing checkpoints + if borsnaptype.CheckpointsEnabled() { + if len(cfg.unwindTypes) == 0 || slices.Contains(cfg.unwindTypes, "checkpoints") { + checkpointCursor, err := tx.RwCursor(kv.BorCheckpoints) + + if err != nil { + return err + } + + defer checkpointCursor.Close() + lastCheckpointToKeep, err := heimdall.CheckpointIdAt(tx, u.UnwindPoint) + hasCheckpoints := true + + if err != nil { + if !errors.Is(err, heimdall.ErrCheckpointNotFound) { + return err + } + + hasCheckpoints = false + } + + if hasCheckpoints { + var checkpointIdBytes [8]byte + binary.BigEndian.PutUint64(checkpointIdBytes[:], uint64(lastCheckpointToKeep+1)) + for k, _, err := checkpointCursor.Seek(checkpointIdBytes[:]); err == nil && k != nil; k, _, err = checkpointCursor.Next() { + if err = checkpointCursor.DeleteCurrent(); err != nil { + return err + } + } + } + } } - defer spanCursor.Close() - lastSpanToKeep := bor.SpanIDAt(u.UnwindPoint) - var spanIdBytes [8]byte - binary.BigEndian.PutUint64(spanIdBytes[:], lastSpanToKeep+1) - for k, _, err = spanCursor.Seek(spanIdBytes[:]); err == nil && k != nil; k, _, err = spanCursor.Next() { - if err = spanCursor.DeleteCurrent(); err != nil { - return err + + if borsnaptype.MilestonesEnabled() { + // Removing milestones + if len(cfg.unwindTypes) == 0 || slices.Contains(cfg.unwindTypes, "milestones") { + milestoneCursor, err := tx.RwCursor(kv.BorMilestones) + + if err != nil { + return err + } + + defer milestoneCursor.Close() + lastMilestoneToKeep, err := heimdall.MilestoneIdAt(tx, u.UnwindPoint) + hasMilestones := true + + if err != nil { + if !errors.Is(err, heimdall.ErrMilestoneNotFound) { + return err + } + + hasMilestones = false + } + + if hasMilestones { + var milestoneIdBytes [8]byte + binary.BigEndian.PutUint64(milestoneIdBytes[:], uint64(lastMilestoneToKeep+1)) + for k, _, err := milestoneCursor.Seek(milestoneIdBytes[:]); err == nil && k != nil; k, _, err = milestoneCursor.Next() { + if err = milestoneCursor.DeleteCurrent(); err != nil { + return err + } + } + } } } if err = u.Done(tx); err != nil { return err } + if !useExternalTx { if err = tx.Commit(); err != nil { return err } } + return } -func BorHeimdallPrune(s *PruneState, ctx context.Context, tx kv.RwTx, cfg BorHeimdallCfg) (err error) { +func BorHeimdallPrune(_ *PruneState, _ context.Context, _ kv.RwTx, cfg BorHeimdallCfg) (err error) { if cfg.borConfig == nil { return } + return } diff --git a/eth/stagedsync/stage_bor_heimdall_test.go b/eth/stagedsync/stage_bor_heimdall_test.go index e937b38f33b..05ca67089e1 100644 --- a/eth/stagedsync/stage_bor_heimdall_test.go +++ b/eth/stagedsync/stage_bor_heimdall_test.go @@ -19,6 +19,7 @@ import ( "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/polygon/bor" "github.com/ledgerwatch/erigon/polygon/bor/valset" + "github.com/ledgerwatch/erigon/polygon/heimdall" ) func TestBorHeimdallForwardPersistsSpans(t *testing.T) { @@ -35,16 +36,81 @@ func TestBorHeimdallForwardPersistsSpans(t *testing.T) { testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) // run stage under test - testHarness.RunStageForward(t, stages.BorHeimdall) + testHarness.RunStateSyncStageForward(t, stages.BorHeimdall) // asserts spans, err := testHarness.ReadSpansFromDB(ctx) require.NoError(t, err) require.Len(t, spans, 2) - require.Equal(t, uint64(0), spans[0].ID) + require.Equal(t, heimdall.SpanId(0), spans[0].Id) require.Equal(t, uint64(0), spans[0].StartBlock) require.Equal(t, uint64(255), spans[0].EndBlock) - require.Equal(t, uint64(1), spans[1].ID) + require.Equal(t, heimdall.SpanId(1), spans[1].Id) + require.Equal(t, uint64(256), spans[1].StartBlock) + require.Equal(t, uint64(6655), spans[1].EndBlock) +} + +func TestBorHeimdallForwardFetchesFirstSpanDuringSecondSprintStart(t *testing.T) { + // span 0 and 1 are required in the start of second sprint (of 0th span) to commit + // in genesis contracts. we need span 1 at that time to mimic behaviour in bor. + t.Parallel() + + ctx := context.Background() + numBlocks := 16 // Start of 2nd sprint of 0th span + testHarness := stagedsynctest.InitHarness(ctx, t, stagedsynctest.HarnessCfg{ + ChainConfig: stagedsynctest.BorDevnetChainConfigWithNoBlockSealDelays(), + GenerateChainNumBlocks: numBlocks, + LogLvl: log.LvlInfo, + }) + // pretend-update previous stage progress + testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) + + // run stage under test + testHarness.RunStateSyncStageForward(t, stages.BorHeimdall) + + // asserts + spans, err := testHarness.ReadSpansFromDB(ctx) + require.NoError(t, err) + require.Len(t, spans, 2) + require.Equal(t, heimdall.SpanId(0), spans[0].Id) + require.Equal(t, uint64(0), spans[0].StartBlock) + require.Equal(t, uint64(255), spans[0].EndBlock) + require.Equal(t, heimdall.SpanId(1), spans[1].Id) + require.Equal(t, uint64(256), spans[1].StartBlock) + require.Equal(t, uint64(6655), spans[1].EndBlock) +} + +func TestBorHeimdallForwardFetchesFirstSpanAfterSecondSprintStart(t *testing.T) { + // Note this test differs from TestBorHeimdallForwardFetchesFirstSpanDuringSecondSprintStart + // since we should be able to handle both scenarios: + // - calling the stage with toBlockNum=16 + // - calling the stage with toBlockNum=20 (some block num after second sprint start) + // + // span 0 and 1 are required at and after the start of second sprint (of 0th span) to commit + // in genesis contracts. we need span 1 at that time to mimic behaviour in bor. + t.Parallel() + + ctx := context.Background() + numBlocks := 20 // After the start of 2nd sprint of 0th span + testHarness := stagedsynctest.InitHarness(ctx, t, stagedsynctest.HarnessCfg{ + ChainConfig: stagedsynctest.BorDevnetChainConfigWithNoBlockSealDelays(), + GenerateChainNumBlocks: numBlocks, + LogLvl: log.LvlInfo, + }) + // pretend-update previous stage progress + testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) + + // run stage under test + testHarness.RunStateSyncStageForward(t, stages.BorHeimdall) + + // asserts + spans, err := testHarness.ReadSpansFromDB(ctx) + require.NoError(t, err) + require.Len(t, spans, 2) + require.Equal(t, heimdall.SpanId(0), spans[0].Id) + require.Equal(t, uint64(0), spans[0].StartBlock) + require.Equal(t, uint64(255), spans[0].EndBlock) + require.Equal(t, heimdall.SpanId(1), spans[1].Id) require.Equal(t, uint64(256), spans[1].StartBlock) require.Equal(t, uint64(6655), spans[1].EndBlock) } @@ -66,19 +132,19 @@ func TestBorHeimdallForwardFetchesNextSpanDuringLastSprintOfCurrentSpan(t *testi testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) // run stage under test - testHarness.RunStageForward(t, stages.BorHeimdall) + testHarness.RunStateSyncStageForward(t, stages.BorHeimdall) // asserts spans, err := testHarness.ReadSpansFromDB(ctx) require.NoError(t, err) require.Len(t, spans, 3) - require.Equal(t, uint64(0), spans[0].ID) + require.Equal(t, heimdall.SpanId(0), spans[0].Id) require.Equal(t, uint64(0), spans[0].StartBlock) require.Equal(t, uint64(255), spans[0].EndBlock) - require.Equal(t, uint64(1), spans[1].ID) + require.Equal(t, heimdall.SpanId(1), spans[1].Id) require.Equal(t, uint64(256), spans[1].StartBlock) require.Equal(t, uint64(6655), spans[1].EndBlock) - require.Equal(t, uint64(2), spans[2].ID) + require.Equal(t, heimdall.SpanId(2), spans[2].Id) require.Equal(t, uint64(6656), spans[2].StartBlock) require.Equal(t, uint64(13055), spans[2].EndBlock) } @@ -97,7 +163,7 @@ func TestBorHeimdallForwardPersistsStateSyncEvents(t *testing.T) { testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) // run stage under test - testHarness.RunStageForward(t, stages.BorHeimdall) + testHarness.RunStateSyncStageForward(t, stages.BorHeimdall) // asserts // 1 event per sprint expected @@ -140,7 +206,7 @@ func TestBorHeimdallForwardErrHeaderValidatorsLengthMismatch(t *testing.T) { testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) // run stage under test - testHarness.RunStageForwardWithErrorIs(t, stages.BorHeimdall, stagedsync.ErrHeaderValidatorsLengthMismatch) + testHarness.RunStateSyncStageForwardWithErrorIs(t, stages.BorHeimdall, stagedsync.ErrHeaderValidatorsLengthMismatch) } func TestBorHeimdallForwardErrHeaderValidatorsBytesMismatch(t *testing.T) { @@ -164,7 +230,7 @@ func TestBorHeimdallForwardErrHeaderValidatorsBytesMismatch(t *testing.T) { testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) // run stage under test - testHarness.RunStageForwardWithErrorIs(t, stages.BorHeimdall, stagedsync.ErrHeaderValidatorsBytesMismatch) + testHarness.RunStateSyncStageForwardWithErrorIs(t, stages.BorHeimdall, stagedsync.ErrHeaderValidatorsBytesMismatch) } func TestBorHeimdallForwardDetectsUnauthorizedSignerError(t *testing.T) { @@ -198,7 +264,7 @@ func TestBorHeimdallForwardDetectsUnauthorizedSignerError(t *testing.T) { require.Equal(t, uint64(0), testHarness.GetStageProgress(ctx, t, stages.BorHeimdall)) // run stage under test - testHarness.RunStageForward(t, stages.BorHeimdall) + testHarness.RunStateSyncStageForward(t, stages.BorHeimdall) // asserts require.Equal(t, uint64(numBlocks+1), testHarness.GetStageProgress(ctx, t, stages.BorHeimdall)) diff --git a/eth/stagedsync/stage_call_traces_test.go b/eth/stagedsync/stage_call_traces_test.go index 0248d65ae47..539601a661a 100644 --- a/eth/stagedsync/stage_call_traces_test.go +++ b/eth/stagedsync/stage_call_traces_test.go @@ -10,9 +10,9 @@ import ( "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/stretchr/testify/require" - "github.com/ledgerwatch/erigon/core/state/temporal" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/log/v3" ) @@ -35,7 +35,7 @@ func genTestCallTraceSet(t *testing.T, tx kv.RwTx, to uint64) { func TestCallTrace(t *testing.T) { logger := log.New() ctx, require := context.Background(), require.New(t) - histV3, db, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + histV3, db, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) if histV3 { t.Skip() } diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index 7bf77db28d3..1686e399c26 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -10,6 +10,7 @@ import ( "time" "github.com/c2h5oh/datasize" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/log/v3" "golang.org/x/sync/errgroup" @@ -20,6 +21,8 @@ import ( "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/common/metrics" + "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/etl" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/dbutils" @@ -42,7 +45,7 @@ import ( "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/ethconfig/estimate" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" - trace_logger "github.com/ledgerwatch/erigon/eth/tracers/logger" + tracelogger "github.com/ledgerwatch/erigon/eth/tracers/logger" "github.com/ledgerwatch/erigon/ethdb/prune" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/erigon/turbo/shards" @@ -85,7 +88,7 @@ type ExecuteBlockCfg struct { historyV3 bool syncCfg ethconfig.Sync genesis *types.Genesis - agg *libstate.AggregatorV3 + agg *libstate.Aggregator silkworm *silkworm.Silkworm } @@ -108,12 +111,9 @@ func StageExecuteBlocksCfg( hd headerDownloader, genesis *types.Genesis, syncCfg ethconfig.Sync, - agg *libstate.AggregatorV3, + agg *libstate.Aggregator, silkworm *silkworm.Silkworm, ) ExecuteBlockCfg { - if genesis == nil { - panic("assert: nil genesis") - } return ExecuteBlockCfg{ db: db, prune: pm, @@ -161,7 +161,7 @@ func executeBlock( } getTracer := func(txIndex int, txHash common.Hash) (vm.EVMLogger, error) { - return trace_logger.NewStructLogger(&trace_logger.LogConfig{}), nil + return tracelogger.NewStructLogger(&tracelogger.LogConfig{}), nil } callTracer := calltracer.NewCallTracer() @@ -180,13 +180,14 @@ func executeBlock( receipts = execRs.Receipts stateSyncReceipt = execRs.StateSyncReceipt - if writeReceipts { + // If writeReceipts is false here, append the not to be pruned receipts anyways + if writeReceipts || gatherNoPruneReceipts(&receipts, cfg.chainConfig) { if err = rawdb.AppendReceipts(tx, blockNum, receipts); err != nil { return err } if stateSyncReceipt != nil && stateSyncReceipt.Status == types.ReceiptStatusSuccessful { - if err := rawdb.WriteBorReceipt(tx, block.Hash(), block.NumberU64(), stateSyncReceipt); err != nil { + if err := rawdb.WriteBorReceipt(tx, block.NumberU64(), stateSyncReceipt); err != nil { return err } } @@ -203,6 +204,31 @@ func executeBlock( return nil } +// Filters out and keeps receipts of contracts that may be needed by CL, such as deposit contrac, +// The list of contracts to filter is config-specified +func gatherNoPruneReceipts(receipts *types.Receipts, chainCfg *chain.Config) bool { + cr := types.Receipts{} + for _, r := range *receipts { + toStore := false + if chainCfg.NoPruneContracts != nil && chainCfg.NoPruneContracts[r.ContractAddress] { + toStore = true + } else { + for _, l := range r.Logs { + if chainCfg.NoPruneContracts != nil && chainCfg.NoPruneContracts[l.Address] { + toStore = true + break + } + } + } + + if toStore { + cr = append(cr, r) + } + } + receipts = &cr + return receipts.Len() > 0 +} + func newStateReaderWriter( batch kv.StatelessRwTx, tx kv.RwTx, @@ -287,7 +313,7 @@ func ExecBlockV3(s *StageState, u Unwinder, txc wrap.TxContainer, toBlock uint64 } // reconstituteBlock - First block which is not covered by the history snapshot files -func reconstituteBlock(agg *libstate.AggregatorV3, db kv.RoDB, tx kv.Tx) (n uint64, ok bool, err error) { +func reconstituteBlock(agg *libstate.Aggregator, db kv.RoDB, tx kv.Tx) (n uint64, ok bool, err error) { sendersProgress, err := senderStageProgress(tx, db) if err != nil { return 0, false, err @@ -391,6 +417,10 @@ func SpawnExecuteBlocksStage(s *StageState, u Unwinder, txc wrap.TxContainer, to to = cmp.Min(prevStageProgress, toBlock) } + if cfg.syncCfg.LoopBlockLimit > 0 { + to = s.BlockNumber + uint64(cfg.syncCfg.LoopBlockLimit) + } + if to <= s.BlockNumber { return nil } @@ -408,6 +438,7 @@ func SpawnExecuteBlocksStage(s *StageState, u Unwinder, txc wrap.TxContainer, to logBlock := stageProgress logTx, lastLogTx := uint64(0), uint64(0) logTime := time.Now() + startTime := time.Now() var gas uint64 // used for logs var currentStateGas uint64 // used for batch commits of state // Transform batch_size limit into Ggas @@ -424,8 +455,8 @@ func SpawnExecuteBlocksStage(s *StageState, u Unwinder, txc wrap.TxContainer, to }() var readAhead chan uint64 - if initialCycle { - // snapshots are often stored on chaper drives. don't expect low-read-latency and manually read-ahead. + if initialCycle && cfg.silkworm == nil { // block read-ahead is not compatible w/ Silkworm one-shot block execution + // snapshots are often stored on cheaper drives. don't expect low-read-latency and manually read-ahead. // can't use OS-level ReadAhead - because Data >> RAM // it also warmsup state a bit - by touching senders/coninbase accounts and code var clean func() @@ -438,7 +469,7 @@ Loop: if stoppedErr = common.Stopped(quit); stoppedErr != nil { break } - if initialCycle { + if initialCycle && cfg.silkworm == nil { // block read-ahead is not compatible w/ Silkworm one-shot block execution select { case readAhead <- blockNum: default: @@ -465,9 +496,35 @@ Loop: writeReceipts := nextStagesExpectData || blockNum > cfg.prune.Receipts.PruneTo(to) writeCallTraces := nextStagesExpectData || blockNum > cfg.prune.CallTraces.PruneTo(to) + metrics.UpdateBlockConsumerPreExecutionDelay(block.Time(), blockNum, logger) + _, isMemoryMutation := txc.Tx.(*membatchwithdb.MemoryMutation) if cfg.silkworm != nil && !isMemoryMutation { - blockNum, err = silkworm.ExecuteBlocks(cfg.silkworm, txc.Tx, cfg.chainConfig.ChainID, blockNum, to, uint64(cfg.batchSize), writeChangeSets, writeReceipts, writeCallTraces) + if useExternalTx { + blockNum, err = silkworm.ExecuteBlocksEphemeral(cfg.silkworm, txc.Tx, cfg.chainConfig.ChainID, blockNum, to, uint64(cfg.batchSize), writeChangeSets, writeReceipts, writeCallTraces) + } else { + // In case of internal tx we close it (no changes, commit not needed): Silkworm will use its own internal tx + txc.Tx.Rollback() + txc.Tx = nil + + log.Info("Using Silkworm to commit full range", "fromBlock", s.BlockNumber+1, "toBlock", to) + blockNum, err = silkworm.ExecuteBlocksPerpetual(cfg.silkworm, cfg.db, cfg.chainConfig.ChainID, blockNum, to, uint64(cfg.batchSize), writeChangeSets, writeReceipts, writeCallTraces) + + var txErr error + if txc.Tx, txErr = cfg.db.BeginRw(context.Background()); txErr != nil { + return txErr + } + defer txc.Tx.Rollback() + + // Recreate memory batch because underlying tx has changed + batch.Close() + batch = membatch.NewHashBatch(txc.Tx, quit, cfg.dirs.Tmp, logger) + } + + // In case of any error we need to increment to have the failed block number + if err != nil { + blockNum++ + } } else { err = executeBlock(block, txc.Tx, batch, cfg, *cfg.vmConfig, writeChangeSets, writeReceipts, writeCallTraces, stateStream, logger) } @@ -505,10 +562,11 @@ Loop: } stageProgress = blockNum + metrics.UpdateBlockConsumerPostExecutionDelay(block.Time(), blockNum, logger) + shouldUpdateProgress := batch.BatchSize() >= int(cfg.batchSize) if shouldUpdateProgress { - logger.Info("Committed State", "gas reached", currentStateGas, "gasTarget", gasState) - currentStateGas = 0 + commitTime := time.Now() if err = batch.Flush(ctx, txc.Tx); err != nil { return err } @@ -526,6 +584,8 @@ Loop: // TODO: This creates stacked up deferrals defer txc.Tx.Rollback() } + logger.Info("Committed State", "gas reached", currentStateGas, "gasTarget", gasState, "block", blockNum, "time", time.Since(commitTime), "committedToDb", !useExternalTx) + currentStateGas = 0 batch = membatch.NewHashBatch(txc.Tx, quit, cfg.dirs.Tmp, logger) } @@ -534,10 +594,10 @@ Loop: select { default: case <-logEvery.C: - logBlock, logTx, logTime = logProgress(logPrefix, logBlock, logTime, blockNum, logTx, lastLogTx, gas, float64(currentStateGas)/float64(gasState), batch, logger) + logBlock, logTx, logTime = logProgress(logPrefix, logBlock, logTime, blockNum, logTx, lastLogTx, gas, float64(currentStateGas)/float64(gasState), batch, logger, s.BlockNumber, to, startTime) gas = 0 txc.Tx.CollectMetrics() - syncMetrics[stages.Execution].SetUint64(blockNum) + stages.SyncMetrics[stages.Execution].SetUint64(blockNum) } } @@ -650,7 +710,7 @@ func blocksReadAheadFunc(ctx context.Context, tx kv.Tx, cfg *ExecuteBlockCfg, bl } func logProgress(logPrefix string, prevBlock uint64, prevTime time.Time, currentBlock uint64, prevTx, currentTx uint64, gas uint64, - gasState float64, batch kv.PendingMutations, logger log.Logger) (uint64, uint64, time.Time) { + gasState float64, batch kv.PendingMutations, logger log.Logger, from uint64, to uint64, startTime time.Time) (uint64, uint64, time.Time) { currentTime := time.Now() interval := currentTime.Sub(prevTime) speed := float64(currentBlock-prevBlock) / (float64(interval) / float64(time.Second)) @@ -666,10 +726,29 @@ func logProgress(logPrefix string, prevBlock uint64, prevTime time.Time, current "Mgas/s", fmt.Sprintf("%.1f", speedMgas), "gasState", fmt.Sprintf("%.2f", gasState), } + + batchSize := 0 + if batch != nil { - logpairs = append(logpairs, "batch", common.ByteCount(uint64(batch.BatchSize()))) + batchSize = batch.BatchSize() + logpairs = append(logpairs, "batch", common.ByteCount(uint64(batchSize))) } logpairs = append(logpairs, "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys)) + + diagnostics.Send(diagnostics.BlockExecutionStatistics{ + From: from, + To: to, + BlockNumber: currentBlock, + BlkPerSec: speed, + TxPerSec: speedTx, + MgasPerSec: speedMgas, + GasState: gasState, + Batch: uint64(batchSize), + Alloc: m.Alloc, + Sys: m.Sys, + TimeElapsed: time.Since(startTime).Round(time.Second).Seconds(), + }) + logger.Info(fmt.Sprintf("[%s] Executed blocks", logPrefix), logpairs...) return currentBlock, currentTx, currentTime @@ -869,7 +948,7 @@ func PruneExecutionStage(s *PruneState, tx kv.RwTx, cfg ExecuteBlockCfg, ctx con if cfg.historyV3 { cfg.agg.SetTx(tx) if initialCycle { - if err = cfg.agg.Prune(ctx, ethconfig.HistoryV3AggregationStep/10); err != nil { // prune part of retired data, before commit + if err = cfg.agg.Prune(ctx, config3.HistoryV3AggregationStep/10); err != nil { // prune part of retired data, before commit return err } } else { @@ -894,10 +973,11 @@ func PruneExecutionStage(s *PruneState, tx kv.RwTx, cfg ExecuteBlockCfg, ctx con if err = rawdb.PruneTable(tx, kv.BorReceipts, cfg.prune.Receipts.PruneTo(s.ForwardProgress), ctx, math.MaxUint32); err != nil { return err } + // EDIT: Don't prune yet, let LogIndex stage take care of it // LogIndex.Prune will read everything what not pruned here - if err = rawdb.PruneTable(tx, kv.Log, cfg.prune.Receipts.PruneTo(s.ForwardProgress), ctx, math.MaxInt32); err != nil { - return err - } + // if err = rawdb.PruneTable(tx, kv.Log, cfg.prune.Receipts.PruneTo(s.ForwardProgress), ctx, math.MaxInt32); err != nil { + // return err + // } } if cfg.prune.CallTraces.Enabled() { if err = rawdb.PruneTableDupSort(tx, kv.CallTraceSet, logPrefix, cfg.prune.CallTraces.PruneTo(s.ForwardProgress), logEvery, ctx); err != nil { diff --git a/eth/stagedsync/stage_execute_test.go b/eth/stagedsync/stage_execute_test.go index a34f6010b14..37621dadb13 100644 --- a/eth/stagedsync/stage_execute_test.go +++ b/eth/stagedsync/stage_execute_test.go @@ -8,6 +8,8 @@ import ( "time" "github.com/ledgerwatch/erigon-lib/common/datadir" + "github.com/ledgerwatch/erigon-lib/config3" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/ledgerwatch/log/v3" "github.com/stretchr/testify/require" @@ -21,8 +23,6 @@ import ( "github.com/ledgerwatch/erigon/cmd/state/exec22" "github.com/ledgerwatch/erigon/core/state" - "github.com/ledgerwatch/erigon/core/state/temporal" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/ethdb/prune" "github.com/ledgerwatch/erigon/params" @@ -133,7 +133,7 @@ func TestExec(t *testing.T) { }) } -func apply(tx kv.RwTx, agg *libstate.AggregatorV3, logger log.Logger) (beforeBlock, afterBlock testGenHook, w state.StateWriter) { +func apply(tx kv.RwTx, agg *libstate.Aggregator, logger log.Logger) (beforeBlock, afterBlock testGenHook, w state.StateWriter) { agg.SetTx(tx) agg.StartWrites() @@ -170,10 +170,10 @@ func apply(tx kv.RwTx, agg *libstate.AggregatorV3, logger log.Logger) (beforeBlo }, stateWriter } -func newAgg(t *testing.T, logger log.Logger) *libstate.AggregatorV3 { +func newAgg(t *testing.T, logger log.Logger) *libstate.Aggregator { t.Helper() dir, ctx := t.TempDir(), context.Background() - agg, err := libstate.NewAggregatorV3(ctx, dir, dir, ethconfig.HistoryV3AggregationStep, nil, logger) + agg, err := libstate.NewAggregator(ctx, dir, dir, config3.HistoryV3AggregationStep, nil, logger) require.NoError(t, err) err = agg.OpenFolder() require.NoError(t, err) @@ -183,8 +183,8 @@ func newAgg(t *testing.T, logger log.Logger) *libstate.AggregatorV3 { func TestExec22(t *testing.T) { logger := log.New() ctx := context.Background() - _, db1, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) - _, db2, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + _, db1, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) + _, db2, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) agg := newAgg(t, logger) cfg := ExecuteBlockCfg{historyV3: true, agg: agg} diff --git a/eth/stagedsync/stage_finish.go b/eth/stagedsync/stage_finish.go index f0c618091c1..943bc927dbc 100644 --- a/eth/stagedsync/stage_finish.go +++ b/eth/stagedsync/stage_finish.go @@ -5,15 +5,17 @@ import ( "context" "encoding/binary" "fmt" - "github.com/ledgerwatch/erigon-lib/kv/dbutils" "time" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" types2 "github.com/ledgerwatch/erigon-lib/gointerfaces/types" "github.com/ledgerwatch/erigon-lib/kv" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" "github.com/ledgerwatch/erigon/turbo/engineapi/engine_helpers" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/log/v3" @@ -145,18 +147,18 @@ func NotifyNewHeaders(ctx context.Context, finishStageBeforeSync uint64, finishS var notifyTo = notifyFrom var notifyToHash libcommon.Hash var headersRlp [][]byte - if err := tx.ForEach(kv.Headers, hexutility.EncodeTs(notifyFrom), func(k, headerRLP []byte) error { - if len(headerRLP) == 0 { + if err := tx.ForEach(kv.HeaderCanonical, hexutility.EncodeTs(notifyFrom), func(k, hash []byte) (err error) { + if len(hash) == 0 { return nil } - notifyTo = binary.BigEndian.Uint64(k) - var err error - if notifyToHash, err = blockReader.CanonicalHash(ctx, tx, notifyTo); err != nil { - logger.Warn("[Finish] failed checking if header is cannonical") + blockNum := binary.BigEndian.Uint64(k) + if blockNum > finishStageAfterSync { //[from,to) + return nil } - - headerHash := libcommon.BytesToHash(k[8:]) - if notifyToHash == headerHash { + notifyTo = blockNum + notifyToHash = libcommon.BytesToHash(hash) + headerRLP := rawdb.ReadHeaderRLP(tx, notifyToHash, notifyTo) + if headerRLP != nil { headersRlp = append(headersRlp, libcommon.CopyBytes(headerRLP)) } @@ -179,7 +181,7 @@ func NotifyNewHeaders(ctx context.Context, finishStageBeforeSync uint64, finishS notifier.OnLogs(logs) } logTiming := time.Since(t) - logger.Info("RPC Daemon notified of new headers", "from", notifyFrom-1, "to", notifyTo, "hash", notifyToHash, "header sending", headerTiming, "log sending", logTiming) + logger.Info("RPC Daemon notified of new headers", "from", notifyFrom-1, "to", notifyTo, "amount", len(headersRlp), "hash", notifyToHash, "header sending", headerTiming, "log sending", logTiming) } return nil } @@ -215,7 +217,7 @@ func ReadLogs(tx kv.Tx, from uint64, isUnwind bool, blockReader services.FullBlo // bor transactions are at the end of the bodies transactions (added manually but not actually part of the block) if txIndex == uint64(len(block.Transactions())) { - txHash = types.ComputeBorTxHash(blockNum, block.Hash()) + txHash = bortypes.ComputeBorTxHash(blockNum, block.Hash()) } else { txHash = block.Transactions()[txIndex].Hash() } diff --git a/eth/stagedsync/stage_hashstate_test.go b/eth/stagedsync/stage_hashstate_test.go index 81d5c12206a..fc6619121a3 100644 --- a/eth/stagedsync/stage_hashstate_test.go +++ b/eth/stagedsync/stage_hashstate_test.go @@ -6,9 +6,9 @@ import ( "testing" "github.com/ledgerwatch/erigon-lib/common/datadir" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/memdb" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/stretchr/testify/require" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -16,7 +16,7 @@ import ( ) func TestPromoteHashedStateClearState(t *testing.T) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { t.Skip() } logger := log.New() @@ -37,7 +37,7 @@ func TestPromoteHashedStateClearState(t *testing.T) { } func TestPromoteHashedStateIncremental(t *testing.T) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { t.Skip() } logger := log.New() @@ -67,7 +67,7 @@ func TestPromoteHashedStateIncremental(t *testing.T) { } func TestPromoteHashedStateIncrementalMixed(t *testing.T) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { t.Skip() } logger := log.New() @@ -88,7 +88,7 @@ func TestPromoteHashedStateIncrementalMixed(t *testing.T) { } func TestUnwindHashed(t *testing.T) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { t.Skip() } logger := log.New() @@ -115,7 +115,7 @@ func TestUnwindHashed(t *testing.T) { } func TestPromoteIncrementallyShutdown(t *testing.T) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { t.Skip() } historyV3 := false @@ -150,7 +150,7 @@ func TestPromoteIncrementallyShutdown(t *testing.T) { } func TestPromoteHashedStateCleanlyShutdown(t *testing.T) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { t.Skip() } logger := log.New() @@ -189,7 +189,7 @@ func TestPromoteHashedStateCleanlyShutdown(t *testing.T) { } func TestUnwindHashStateShutdown(t *testing.T) { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { t.Skip() } logger := log.New() diff --git a/eth/stagedsync/stage_headers.go b/eth/stagedsync/stage_headers.go index 8a36be2f64a..627aa9ad85f 100644 --- a/eth/stagedsync/stage_headers.go +++ b/eth/stagedsync/stage_headers.go @@ -15,6 +15,7 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/common/hexutility" + "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/erigon/core/rawdb" @@ -23,7 +24,6 @@ import ( "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/rlp" - "github.com/ledgerwatch/erigon/turbo/engineapi/engine_helpers" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/erigon/turbo/shards" "github.com/ledgerwatch/erigon/turbo/stages/bodydownload" @@ -48,7 +48,6 @@ type HeadersCfg struct { blockReader services.FullBlockReader blockWriter *blockio.BlockWriter - forkValidator *engine_helpers.ForkValidator notifications *shards.Notifications syncConfig ethconfig.Sync @@ -70,7 +69,6 @@ func StageHeadersCfg( blockWriter *blockio.BlockWriter, tmpdir string, notifications *shards.Notifications, - forkValidator *engine_helpers.ForkValidator, loopBreakCheck func(int) bool) HeadersCfg { return HeadersCfg{ db: db, @@ -86,7 +84,6 @@ func StageHeadersCfg( noP2PDiscovery: noP2PDiscovery, blockReader: blockReader, blockWriter: blockWriter, - forkValidator: forkValidator, notifications: notifications, loopBreakCheck: loopBreakCheck, } @@ -172,6 +169,8 @@ func HeadersPOW( logger.Info(fmt.Sprintf("[%s] Waiting for headers...", logPrefix), "from", startProgress) + diagnostics.Send(diagnostics.HeadersWaitingUpdate{From: startProgress}) + localTd, err := rawdb.ReadTd(tx, hash, startProgress) if err != nil { return err @@ -352,6 +351,15 @@ Loop: } else { headers := headerInserter.GetHighest() - startProgress secs := time.Since(startTime).Seconds() + + diagnostics.Send(diagnostics.HeadersProcessedUpdate{ + Highest: headerInserter.GetHighest(), + Age: time.Unix(int64(headerInserter.GetHighestTimestamp()), 0).Second(), + Headers: headers, + In: secs, + BlkPerSec: uint64(float64(headers) / secs), + }) + logger.Info(fmt.Sprintf("[%s] Processed", logPrefix), "highest", headerInserter.GetHighest(), "age", common.PrettyAge(time.Unix(int64(headerInserter.GetHighestTimestamp()), 0)), "headers", headers, "in", secs, "blk/sec", uint64(float64(headers)/secs)) @@ -384,6 +392,7 @@ func fixCanonicalChain(logPrefix string, logEvery *time.Ticker, height uint64, h select { case <-logEvery.C: + diagnostics.Send(diagnostics.HeaderCanonicalMarkerUpdate{AncestorHeight: ancestorHeight, AncestorHash: ancestorHash.String()}) logger.Info(fmt.Sprintf("[%s] write canonical markers", logPrefix), "ancestor", ancestorHeight, "hash", ancestorHash) default: } @@ -534,6 +543,16 @@ func logProgressHeaders( "rejectedBadHeaders", stats.RejectedBadHeaders, ) + diagnostics.Send(diagnostics.BlockHeadersUpdate{ + CurrentBlockNumber: now, + PreviousBlockNumber: prev, + Speed: speed, + Alloc: m.Alloc, + Sys: m.Sys, + InvalidHeaders: stats.InvalidHeaders, + RejectedBadHeaders: stats.RejectedBadHeaders, + }) + return now } @@ -588,10 +607,12 @@ func (cr ChainReaderImpl) FrozenBlocks() uint64 { return cr.blockReader.FrozenBlocks() } func (cr ChainReaderImpl) GetBlock(hash libcommon.Hash, number uint64) *types.Block { - panic("") + b, _, _ := cr.blockReader.BlockWithSenders(context.Background(), cr.tx, hash, number) + return b } func (cr ChainReaderImpl) HasBlock(hash libcommon.Hash, number uint64) bool { - panic("") + b, _ := cr.blockReader.BodyRlp(context.Background(), cr.tx, hash, number) + return b != nil } func (cr ChainReaderImpl) BorEventsByBlock(hash libcommon.Hash, number uint64) []rlp.RawValue { events, err := cr.blockReader.EventsByBlock(context.Background(), cr.tx, hash, number) @@ -601,6 +622,14 @@ func (cr ChainReaderImpl) BorEventsByBlock(hash libcommon.Hash, number uint64) [ } return events } +func (cr ChainReaderImpl) BorStartEventID(hash libcommon.Hash, blockNum uint64) uint64 { + id, err := cr.blockReader.BorStartEventID(context.Background(), cr.tx, hash, blockNum) + if err != nil { + cr.logger.Error("BorEventsByBlock failed", "err", err) + return 0 + } + return id +} func (cr ChainReaderImpl) BorSpan(spanId uint64) []byte { span, err := cr.blockReader.Span(context.Background(), cr.tx, spanId) if err != nil { diff --git a/eth/stagedsync/stage_indexes.go b/eth/stagedsync/stage_indexes.go index 8aeb4e6bcd4..333c96cd81b 100644 --- a/eth/stagedsync/stage_indexes.go +++ b/eth/stagedsync/stage_indexes.go @@ -9,6 +9,7 @@ import ( "fmt" "github.com/ledgerwatch/erigon-lib/kv/dbutils" "runtime" + "slices" "time" "github.com/RoaringBitmap/roaring/roaring64" @@ -22,7 +23,6 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" "github.com/ledgerwatch/erigon-lib/kv/temporal/historyv2" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon/common/changeset" "github.com/ledgerwatch/erigon/ethdb" diff --git a/eth/stagedsync/stage_interhashes.go b/eth/stagedsync/stage_interhashes.go index 92404c5a76d..f549aeeb717 100644 --- a/eth/stagedsync/stage_interhashes.go +++ b/eth/stagedsync/stage_interhashes.go @@ -5,10 +5,12 @@ import ( "context" "encoding/binary" "fmt" - "github.com/ledgerwatch/erigon-lib/kv/dbutils" "math/bits" + "slices" "sync/atomic" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/common/length" @@ -19,7 +21,6 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/temporal/historyv2" "github.com/ledgerwatch/erigon-lib/state" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon/common/math" "github.com/ledgerwatch/erigon/consensus" @@ -40,10 +41,10 @@ type TrieCfg struct { hd *headerdownload.HeaderDownload historyV3 bool - agg *state.AggregatorV3 + agg *state.Aggregator } -func StageTrieCfg(db kv.RwDB, checkRoot, saveNewHashesToDB, badBlockHalt bool, tmpDir string, blockReader services.FullBlockReader, hd *headerdownload.HeaderDownload, historyV3 bool, agg *state.AggregatorV3) TrieCfg { +func StageTrieCfg(db kv.RwDB, checkRoot, saveNewHashesToDB, badBlockHalt bool, tmpDir string, blockReader services.FullBlockReader, hd *headerdownload.HeaderDownload, historyV3 bool, agg *state.Aggregator) TrieCfg { return TrieCfg{ db: db, checkRoot: checkRoot, @@ -135,7 +136,7 @@ func SpawnIntermediateHashesStage(s *StageState, u Unwinder, tx kv.RwTx, cfg Tri if to > s.BlockNumber { unwindTo := (to + s.BlockNumber) / 2 // Binary search for the correct block, biased to the lower numbers logger.Warn("Unwinding due to incorrect root hash", "to", unwindTo) - u.UnwindTo(unwindTo, BadBlock(headerHash, fmt.Errorf("Incorrect root hash"))) + u.UnwindTo(unwindTo, BadBlock(headerHash, fmt.Errorf("incorrect root hash"))) } } else if err = s.Update(tx, to); err != nil { return trie.EmptyRoot, err diff --git a/eth/stagedsync/stage_interhashes_test.go b/eth/stagedsync/stage_interhashes_test.go index 107369b1659..5541e3dddfc 100644 --- a/eth/stagedsync/stage_interhashes_test.go +++ b/eth/stagedsync/stage_interhashes_test.go @@ -81,7 +81,7 @@ func TestAccountAndStorageTrie(t *testing.T) { // ---------------------------------------------------------------- historyV3 := false - blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New())) + blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, t.TempDir(), 0, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, t.TempDir(), 0, log.New())) cfg := stagedsync.StageTrieCfg(db, false, true, false, t.TempDir(), blockReader, nil, historyV3, nil) _, err := stagedsync.RegenerateIntermediateHashes("IH", tx, cfg, libcommon.Hash{} /* expectedRootHash */, ctx, log.New()) assert.Nil(t, err) @@ -203,7 +203,7 @@ func TestAccountTrieAroundExtensionNode(t *testing.T) { hash6 := libcommon.HexToHash("0x3100000000000000000000000000000000000000000000000000000000000000") assert.Nil(t, tx.Put(kv.HashedAccounts, hash6[:], encoded)) - blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New())) + blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, t.TempDir(), 0, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, t.TempDir(), 0, log.New())) _, err := stagedsync.RegenerateIntermediateHashes("IH", tx, stagedsync.StageTrieCfg(db, false, true, false, t.TempDir(), blockReader, nil, historyV3, nil), libcommon.Hash{} /* expectedRootHash */, ctx, log.New()) assert.Nil(t, err) @@ -266,7 +266,7 @@ func TestStorageDeletion(t *testing.T) { // Populate account & storage trie DB tables // ---------------------------------------------------------------- historyV3 := false - blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New())) + blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, t.TempDir(), 0, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, t.TempDir(), 0, log.New())) cfg := stagedsync.StageTrieCfg(db, false, true, false, t.TempDir(), blockReader, nil, historyV3, nil) _, err = stagedsync.RegenerateIntermediateHashes("IH", tx, cfg, libcommon.Hash{} /* expectedRootHash */, ctx, log.New()) assert.Nil(t, err) @@ -385,7 +385,7 @@ func TestHiveTrieRoot(t *testing.T) { common.FromHex("02081bc16d674ec80000"))) historyV3 := false - blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New())) + blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, t.TempDir(), 0, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, t.TempDir(), 0, log.New())) cfg := stagedsync.StageTrieCfg(db, false, true, false, t.TempDir(), blockReader, nil, historyV3, nil) logger := log.New() _, err := stagedsync.RegenerateIntermediateHashes("IH", tx, cfg, libcommon.Hash{} /* expectedRootHash */, ctx, logger) diff --git a/eth/stagedsync/stage_log_index.go b/eth/stagedsync/stage_log_index.go index 1c7e3f01208..1628964167c 100644 --- a/eth/stagedsync/stage_log_index.go +++ b/eth/stagedsync/stage_log_index.go @@ -5,10 +5,12 @@ import ( "context" "encoding/binary" "fmt" - "github.com/ledgerwatch/erigon-lib/kv/dbutils" "runtime" + "slices" "time" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" + "github.com/RoaringBitmap/roaring" "github.com/c2h5oh/datasize" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -18,7 +20,6 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/ethdb/cbor" @@ -31,20 +32,22 @@ const ( ) type LogIndexCfg struct { - tmpdir string - db kv.RwDB - prune prune.Mode - bufLimit datasize.ByteSize - flushEvery time.Duration + tmpdir string + db kv.RwDB + prune prune.Mode + bufLimit datasize.ByteSize + flushEvery time.Duration + noPruneContracts map[libcommon.Address]bool } -func StageLogIndexCfg(db kv.RwDB, prune prune.Mode, tmpDir string) LogIndexCfg { +func StageLogIndexCfg(db kv.RwDB, prune prune.Mode, tmpDir string, noPruneContracts map[libcommon.Address]bool) LogIndexCfg { return LogIndexCfg{ - db: db, - prune: prune, - bufLimit: bitmapsBufLimit, - flushEvery: bitmapsFlushEvery, - tmpdir: tmpDir, + db: db, + prune: prune, + bufLimit: bitmapsBufLimit, + flushEvery: bitmapsFlushEvery, + tmpdir: tmpDir, + noPruneContracts: noPruneContracts, } } @@ -80,14 +83,14 @@ func SpawnLogIndex(s *StageState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte } startBlock := s.BlockNumber - pruneTo := cfg.prune.Receipts.PruneTo(endBlock) - if startBlock < pruneTo { - startBlock = pruneTo - } + pruneTo := cfg.prune.Receipts.PruneTo(endBlock) //endBlock - prune.r.older + // if startBlock < pruneTo { + // startBlock = pruneTo + // } if startBlock > 0 { startBlock++ } - if err = promoteLogIndex(logPrefix, tx, startBlock, endBlock, cfg, ctx, logger); err != nil { + if err = promoteLogIndex(logPrefix, tx, startBlock, endBlock, pruneTo, cfg, ctx, logger); err != nil { return err } if err = s.Update(tx, endBlock); err != nil { @@ -103,7 +106,8 @@ func SpawnLogIndex(s *StageState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte return nil } -func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64, cfg LogIndexCfg, ctx context.Context, logger log.Logger) error { +// Add the topics and address index for logs, if not in prune range or addr in noPruneContracts +func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64, pruneBlock uint64, cfg LogIndexCfg, ctx context.Context, logger log.Logger) error { quit := ctx.Done() logEvery := time.NewTicker(30 * time.Second) defer logEvery.Stop() @@ -126,7 +130,7 @@ func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64 reader := bytes.NewReader(nil) if endBlock != 0 && endBlock-start > 100 { - logger.Info(fmt.Sprintf("[%s] processing", logPrefix), "from", start, "to", endBlock) + logger.Info(fmt.Sprintf("[%s] processing", logPrefix), "from", start, "to", endBlock, "pruneTo", pruneBlock) } for k, v, err := logs.Seek(dbutils.LogKey(start, 0)); k != nil; k, v, err = logs.Next() { @@ -174,6 +178,25 @@ func promoteLogIndex(logPrefix string, tx kv.RwTx, start uint64, endBlock uint64 return fmt.Errorf("receipt unmarshal failed: %w, blocl=%d", err, blockNum) } + toStore := true + // if pruning is enabled, and noPruneContracts isn't configured for the chain, don't index + if blockNum < pruneBlock { + toStore = false + if cfg.noPruneContracts == nil { + continue + } + for _, l := range ll { + // if any of the log address is in noPrune, store and index all logs for this txId + if cfg.noPruneContracts[l.Address] { + toStore = true + break + } + } + } + + if !toStore { + continue + } for _, l := range ll { for _, topic := range l.Topics { topicStr := string(topic.Bytes()) @@ -371,13 +394,15 @@ func pruneOldLogChunks(tx kv.RwTx, bucket string, inMem *etl.Collector, pruneTo if err != nil { return err } - blockNum := uint64(binary.BigEndian.Uint32(k[len(key):])) + var blockNum uint64 + blockNum = uint64(binary.BigEndian.Uint32(k[len(key):])) + if !bytes.HasPrefix(k, key) || blockNum >= pruneTo { break } if err = c.DeleteCurrent(); err != nil { - return fmt.Errorf("failed delete, block=%d: %w", blockNum, err) + return fmt.Errorf("failed delete log/index, bucket=%v block=%d: %w", bucket, blockNum, err) } } return nil @@ -389,6 +414,7 @@ func pruneOldLogChunks(tx kv.RwTx, bucket string, inMem *etl.Collector, pruneTo return nil } +// Call pruneLogIndex with the current sync progresses and commit the data to db func PruneLogIndex(s *PruneState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Context, logger log.Logger) (err error) { if !cfg.prune.Receipts.Enabled() { return nil @@ -405,10 +431,10 @@ func PruneLogIndex(s *PruneState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte } pruneTo := cfg.prune.Receipts.PruneTo(s.ForwardProgress) - if err = pruneLogIndex(logPrefix, tx, cfg.tmpdir, pruneTo, ctx, logger); err != nil { + if err = pruneLogIndex(logPrefix, tx, cfg.tmpdir, s.PruneProgress, pruneTo, ctx, logger, cfg.noPruneContracts); err != nil { return err } - if err = s.Done(tx); err != nil { + if err = s.DoneAt(tx, pruneTo); err != nil { return err } @@ -420,7 +446,8 @@ func PruneLogIndex(s *PruneState, tx kv.RwTx, cfg LogIndexCfg, ctx context.Conte return nil } -func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneTo uint64, ctx context.Context, logger log.Logger) error { +// Prune log indexes as well as logs within the prune range +func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneFrom, pruneTo uint64, ctx context.Context, logger log.Logger, noPruneContracts map[libcommon.Address]bool) error { logEvery := time.NewTicker(logInterval) defer logEvery.Stop() @@ -438,7 +465,7 @@ func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneTo uint64, } defer c.Close() - for k, v, err := c.First(); k != nil; k, v, err = c.Next() { + for k, v, err := c.Seek(dbutils.LogKey(pruneFrom, 0)); k != nil; k, v, err = c.Next() { if err != nil { return err } @@ -448,7 +475,7 @@ func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneTo uint64, } select { case <-logEvery.C: - logger.Info(fmt.Sprintf("[%s]", logPrefix), "table", kv.Log, "block", blockNum) + logger.Info(fmt.Sprintf("[%s]", logPrefix), "table", kv.Log, "block", blockNum, "pruneFrom", pruneFrom, "pruneTo", pruneTo) case <-ctx.Done(): return libcommon.ErrStopped default: @@ -460,13 +487,28 @@ func pruneLogIndex(logPrefix string, tx kv.RwTx, tmpDir string, pruneTo uint64, return fmt.Errorf("receipt unmarshal failed: %w, block=%d", err, binary.BigEndian.Uint64(k)) } + toPrune := true for _, l := range logs { - for _, topic := range l.Topics { - if err := topics.Collect(topic.Bytes(), nil); err != nil { + // No logs (or sublogs) for this txId should be pruned + // if one of the logs belongs to noPruneContracts lis + if noPruneContracts != nil && noPruneContracts[l.Address] { + toPrune = false + break + } + } + + if toPrune { + for _, l := range logs { + for _, topic := range l.Topics { + if err := topics.Collect(topic.Bytes(), nil); err != nil { + return err + } + } + if err := addrs.Collect(l.Address.Bytes(), nil); err != nil { return err } } - if err := addrs.Collect(l.Address.Bytes(), nil); err != nil { + if err := tx.Delete(kv.Log, k); err != nil { return err } } diff --git a/eth/stagedsync/stage_log_index_test.go b/eth/stagedsync/stage_log_index_test.go index cde5ae2c307..b736d2254d3 100644 --- a/eth/stagedsync/stage_log_index_test.go +++ b/eth/stagedsync/stage_log_index_test.go @@ -99,12 +99,12 @@ func TestPromoteLogIndex(t *testing.T) { expectAddrs, expectTopics := genReceipts(t, tx, 100) - cfg := StageLogIndexCfg(nil, prune.DefaultMode, "") + cfg := StageLogIndexCfg(nil, prune.DefaultMode, "", nil) cfgCopy := cfg cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond - err := promoteLogIndex("logPrefix", tx, 0, 0, cfgCopy, ctx, logger) + err := promoteLogIndex("logPrefix", tx, 0, 0, 0, cfgCopy, ctx, logger) require.NoError(err) // Check indices GetCardinality (in how many blocks they meet) @@ -125,17 +125,17 @@ func TestPruneLogIndex(t *testing.T) { require, tmpDir, ctx := require.New(t), t.TempDir(), context.Background() _, tx := memdb.NewTestTx(t) - _, _ = genReceipts(t, tx, 100) + _, _ = genReceipts(t, tx, 90) - cfg := StageLogIndexCfg(nil, prune.DefaultMode, "") + cfg := StageLogIndexCfg(nil, prune.DefaultMode, "", nil) cfgCopy := cfg cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond - err := promoteLogIndex("logPrefix", tx, 0, 0, cfgCopy, ctx, logger) + err := promoteLogIndex("logPrefix", tx, 0, 0, 0, cfgCopy, ctx, logger) require.NoError(err) // Mode test - err = pruneLogIndex("", tx, tmpDir, 50, ctx, logger) + err = pruneLogIndex("", tx, tmpDir, 0, 45, ctx, logger, map[libcommon.Address]bool{{1}: true}) // using addr {1} from genReceipts require.NoError(err) { @@ -158,6 +158,15 @@ func TestPruneLogIndex(t *testing.T) { require.NoError(err) require.True(total == 3) } + { + total := 0 + err = tx.ForEach(kv.Log, nil, func(k, v []byte) error { + total++ + return nil + }) + require.NoError(err) + require.Equal(total, 60) // 1/3rd of 45 not pruned as it has address "1", so 30 Pruned in total, remaining 90-30 + } } func TestUnwindLogIndex(t *testing.T) { @@ -167,15 +176,15 @@ func TestUnwindLogIndex(t *testing.T) { expectAddrs, expectTopics := genReceipts(t, tx, 100) - cfg := StageLogIndexCfg(nil, prune.DefaultMode, "") + cfg := StageLogIndexCfg(nil, prune.DefaultMode, "", nil) cfgCopy := cfg cfgCopy.bufLimit = 10 cfgCopy.flushEvery = time.Nanosecond - err := promoteLogIndex("logPrefix", tx, 0, 0, cfgCopy, ctx, logger) + err := promoteLogIndex("logPrefix", tx, 0, 0, 0, cfgCopy, ctx, logger) require.NoError(err) // Mode test - err = pruneLogIndex("", tx, tmpDir, 50, ctx, logger) + err = pruneLogIndex("", tx, tmpDir, 0, 50, ctx, logger, nil) require.NoError(err) // Unwind test diff --git a/eth/stagedsync/stage_mining_bor_heimdall.go b/eth/stagedsync/stage_mining_bor_heimdall.go index 4a5d21665d4..77193bd6f35 100644 --- a/eth/stagedsync/stage_mining_bor_heimdall.go +++ b/eth/stagedsync/stage_mining_bor_heimdall.go @@ -57,6 +57,12 @@ func MiningBorHeimdallForward( return err } + lastStateSyncEventID, _, err := cfg.blockReader.LastEventId(ctx, tx) + + if err != nil { + return err + } + lastStateSyncEventID, records, fetchTime, err := fetchRequiredHeimdallStateSyncEventsIfNeeded( ctx, header, @@ -64,9 +70,7 @@ func MiningBorHeimdallForward( cfg, logPrefix, logger, - func() (uint64, error) { - return LastStateSyncEventID(tx, cfg.blockReader) - }, + lastStateSyncEventID, ) if err != nil { return err diff --git a/eth/stagedsync/stage_mining_bor_heimdall_test.go b/eth/stagedsync/stage_mining_bor_heimdall_test.go new file mode 100644 index 00000000000..0ab806b351a --- /dev/null +++ b/eth/stagedsync/stage_mining_bor_heimdall_test.go @@ -0,0 +1,74 @@ +package stagedsync_test + +import ( + "context" + "testing" + + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/erigon/eth/stagedsync/stagedsynctest" + "github.com/ledgerwatch/erigon/eth/stagedsync/stages" + "github.com/ledgerwatch/erigon/polygon/heimdall" +) + +func TestMiningBorHeimdallForwardPersistsSpans(t *testing.T) { + t.Parallel() + + ctx := context.Background() + numBlocks := 6640 + testHarness := stagedsynctest.InitHarness(ctx, t, stagedsynctest.HarnessCfg{ + ChainConfig: stagedsynctest.BorDevnetChainConfigWithNoBlockSealDelays(), + GenerateChainNumBlocks: numBlocks, + LogLvl: log.LvlInfo, + }) + // pretend-update previous stage progress + testHarness.SetMiningBlockEmptyHeader(ctx, t, uint64(numBlocks)) + testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) + + // run stage under test + testHarness.RunMiningStageForward(ctx, t, stages.MiningBorHeimdall) + + // asserts + spans, err := testHarness.ReadSpansFromDB(ctx) + require.NoError(t, err) + require.Len(t, spans, 3) + require.Equal(t, heimdall.SpanId(0), spans[0].Id) + require.Equal(t, uint64(0), spans[0].StartBlock) + require.Equal(t, uint64(255), spans[0].EndBlock) + require.Equal(t, heimdall.SpanId(1), spans[1].Id) + require.Equal(t, uint64(256), spans[1].StartBlock) + require.Equal(t, uint64(6655), spans[1].EndBlock) + require.Equal(t, heimdall.SpanId(2), spans[2].Id) + require.Equal(t, uint64(6656), spans[2].StartBlock) + require.Equal(t, uint64(13055), spans[2].EndBlock) +} + +func TestMiningBorHeimdallForwardPersistsStateSyncEvents(t *testing.T) { + t.Parallel() + + ctx := context.Background() + numBlocks := 15 + testHarness := stagedsynctest.InitHarness(ctx, t, stagedsynctest.HarnessCfg{ + ChainConfig: stagedsynctest.BorDevnetChainConfigWithNoBlockSealDelays(), + GenerateChainNumBlocks: numBlocks, + LogLvl: log.LvlInfo, + }) + // pretend-update previous stage progress + testHarness.SetMiningBlockEmptyHeader(ctx, t, uint64(numBlocks)) + testHarness.SaveStageProgress(ctx, t, stages.Headers, uint64(numBlocks)) + + // run stage under test + testHarness.RunMiningStageForward(ctx, t, stages.MiningBorHeimdall) + + // asserts + // 1 event per sprint expected + events, err := testHarness.ReadStateSyncEventsFromDB(ctx) + require.NoError(t, err) + require.Len(t, events, 1) + + firstEventNumPerBlock, err := testHarness.ReadFirstStateSyncEventNumPerBlockFromDB(ctx) + require.NoError(t, err) + require.Len(t, firstEventNumPerBlock, 1) + require.Equal(t, uint64(1), firstEventNumPerBlock[16]) +} diff --git a/eth/stagedsync/stage_mining_create_block.go b/eth/stagedsync/stage_mining_create_block.go index e757f7e005d..02d9f6356ed 100644 --- a/eth/stagedsync/stage_mining_create_block.go +++ b/eth/stagedsync/stage_mining_create_block.go @@ -25,12 +25,13 @@ import ( ) type MiningBlock struct { - Header *types.Header - Uncles []*types.Header - Txs types.Transactions - Receipts types.Receipts - Withdrawals []*types.Withdrawal - PreparedTxs types.TransactionsStream + ParentHeaderTime uint64 + Header *types.Header + Uncles []*types.Header + Txs types.Transactions + Receipts types.Receipts + Withdrawals []*types.Withdrawal + PreparedTxs types.TransactionsStream Deposits [][]byte NoTxPool bool @@ -202,6 +203,7 @@ func SpawnMiningCreateBlockStage(s *StageState, tx kv.RwTx, cfg MiningCreateBloc header.MixDigest = cfg.blockBuilderParameters.PrevRandao header.ParentBeaconBlockRoot = cfg.blockBuilderParameters.ParentBeaconBlockRoot + current.ParentHeaderTime = parent.Time current.Header = header current.Uncles = nil current.Withdrawals = cfg.blockBuilderParameters.Withdrawals diff --git a/eth/stagedsync/stage_mining_exec.go b/eth/stagedsync/stage_mining_exec.go index dbeeac1eb89..a94224de056 100644 --- a/eth/stagedsync/stage_mining_exec.go +++ b/eth/stagedsync/stage_mining_exec.go @@ -15,6 +15,7 @@ import ( "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/metrics" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/membatch" types2 "github.com/ledgerwatch/erigon-lib/types" @@ -113,7 +114,7 @@ func SpawnMiningExecStage(s *StageState, tx kv.RwTx, cfg MiningExecCfg, quit <-c if len(current.Deposits) > 0 { var txs []types.Transaction for i := range current.Deposits { - transaction, err := types.UnmarshalTransactionFromBinary(current.Deposits[i]) + transaction, err := types.UnmarshalTransactionFromBinary(current.Deposits[i], false) if err == io.EOF { continue } @@ -181,6 +182,8 @@ func SpawnMiningExecStage(s *StageState, tx kv.RwTx, cfg MiningExecCfg, quit <-c break } } + + metrics.UpdateBlockProducerProductionDelay(current.ParentHeaderTime, current.Header.Number.Uint64(), logger) } } diff --git a/eth/stagedsync/stage_snapshots.go b/eth/stagedsync/stage_snapshots.go index 4b9cbc37064..bbdbaa78ec7 100644 --- a/eth/stagedsync/stage_snapshots.go +++ b/eth/stagedsync/stage_snapshots.go @@ -7,6 +7,7 @@ import ( "encoding/binary" "errors" "fmt" + "io" "io/fs" "math/big" "os" @@ -28,20 +29,22 @@ import ( "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/common/dir" + "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/downloader" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/etl" - proto_downloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader" + protodownloader "github.com/ledgerwatch/erigon-lib/gointerfaces/downloader" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcfg" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" "github.com/ledgerwatch/erigon-lib/state" - "github.com/ledgerwatch/erigon/core/rawdb" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/ethconfig/estimate" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" + borsnaptype "github.com/ledgerwatch/erigon/polygon/bor/snaptype" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/erigon/turbo/shards" @@ -56,13 +59,14 @@ type SnapshotsCfg struct { dirs datadir.Dirs blockRetire services.BlockRetire - snapshotDownloader proto_downloader.DownloaderClient + snapshotDownloader protodownloader.DownloaderClient blockReader services.FullBlockReader notifier *shards.Notifications historyV3 bool caplin bool - agg *state.AggregatorV3 + blobs bool + agg *state.Aggregator silkworm *silkworm.Silkworm snapshotUploader *snapshotUploader syncConfig ethconfig.Sync @@ -73,12 +77,13 @@ func StageSnapshotsCfg(db kv.RwDB, syncConfig ethconfig.Sync, dirs datadir.Dirs, blockRetire services.BlockRetire, - snapshotDownloader proto_downloader.DownloaderClient, + snapshotDownloader protodownloader.DownloaderClient, blockReader services.FullBlockReader, notifier *shards.Notifications, historyV3 bool, - agg *state.AggregatorV3, + agg *state.Aggregator, caplin bool, + blobs bool, silkworm *silkworm.Silkworm, ) SnapshotsCfg { cfg := SnapshotsCfg{ @@ -94,6 +99,7 @@ func StageSnapshotsCfg(db kv.RwDB, agg: agg, silkworm: silkworm, syncConfig: syncConfig, + blobs: blobs, } if uploadFs := cfg.syncConfig.UploadLocation; len(uploadFs) > 0 { @@ -101,8 +107,7 @@ func StageSnapshotsCfg(db kv.RwDB, cfg.snapshotUploader = &snapshotUploader{ cfg: &cfg, uploadFs: uploadFs, - version: snapcfg.KnownCfg(chainConfig.ChainName, 0).Version, - torrentFiles: downloader.NewAtomicTorrentFiles(cfg.dirs.Snap), + torrentFiles: downloader.NewAtomicTorrentFS(cfg.dirs.Snap), } cfg.blockRetire.SetWorkers(estimate.CompressSnapshot.Workers()) @@ -149,6 +154,7 @@ func SpawnStageSnapshots( } defer tx.Rollback() } + if err := DownloadAndIndexSnapshotsIfNeed(s, ctx, tx, cfg, initialCycle, logger); err != nil { return err } @@ -188,18 +194,27 @@ func DownloadAndIndexSnapshotsIfNeed(s *StageState, ctx context.Context, tx kv.R if !cfg.blockReader.FreezingCfg().Enabled { return nil } + + diagnostics.Send(diagnostics.CurrentSyncStage{Stage: string(stages.Snapshots)}) + cstate := snapshotsync.NoCaplin if cfg.caplin { //TODO(Giulio2002): uncomment cstate = snapshotsync.AlsoCaplin } if cfg.snapshotUploader != nil { + subStages := diagnostics.InitSubStagesFromList([]string{"Indexing", "Fill DB"}) + diagnostics.Send(diagnostics.SetSyncSubStageList{ + Stage: string(stages.Snapshots), + List: subStages, + }) + u := cfg.snapshotUploader u.init(ctx, logger) if cfg.syncConfig.UploadFrom != rpc.EarliestBlockNumber { - u.downloadLatestSnapshots(ctx, cfg.syncConfig.UploadFrom, u.version) + u.downloadLatestSnapshots(ctx, cfg.syncConfig.UploadFrom) } if maxSeedable := u.maxSeedableHeader(); u.cfg.syncConfig.FrozenBlockLimit > 0 && maxSeedable > u.cfg.syncConfig.FrozenBlockLimit { @@ -231,10 +246,18 @@ func DownloadAndIndexSnapshotsIfNeed(s *StageState, ctx context.Context, tx kv.R cfg.notifier.Events.OnNewSnapshot() } } else { - if err := snapshotsync.WaitForDownloader(ctx, s.LogPrefix(), cfg.historyV3, cstate, cfg.agg, tx, cfg.blockReader, &cfg.chainConfig, cfg.snapshotDownloader, s.state.StagesIdsList()); err != nil { + subStages := diagnostics.InitSubStagesFromList([]string{"Download snapshots", "Indexing", "Fill DB"}) + diagnostics.Send(diagnostics.SetSyncSubStageList{ + Stage: string(stages.Snapshots), + List: subStages, + }) + + diagnostics.Send(diagnostics.CurrentSyncSubStage{SubStage: "Download snapshots"}) + if err := snapshotsync.WaitForDownloader(ctx, s.LogPrefix(), cfg.historyV3, cfg.blobs, cstate, cfg.agg, tx, cfg.blockReader, &cfg.chainConfig, cfg.snapshotDownloader, s.state.StagesIdsList()); err != nil { return err } } + // It's ok to notify before tx.Commit(), because RPCDaemon does read list of files by gRPC (not by reading from db) if cfg.notifier.Events != nil { cfg.notifier.Events.OnNewSnapshot() @@ -246,6 +269,7 @@ func DownloadAndIndexSnapshotsIfNeed(s *StageState, ctx context.Context, tx kv.R return histBlockNumProgress }) + diagnostics.Send(diagnostics.CurrentSyncSubStage{SubStage: "Indexing"}) if err := cfg.blockRetire.BuildMissedIndicesIfNeed(ctx, s.LogPrefix(), cfg.notifier.Events, &cfg.chainConfig); err != nil { return err } @@ -276,6 +300,7 @@ func DownloadAndIndexSnapshotsIfNeed(s *StageState, ctx context.Context, tx kv.R s.BlockNumber = frozenBlocks } + diagnostics.Send(diagnostics.CurrentSyncSubStage{SubStage: "Fill DB"}) if err := FillDBFromSnapshots(s.LogPrefix(), ctx, tx, cfg.dirs, cfg.blockReader, cfg.agg, logger); err != nil { return err } @@ -283,7 +308,7 @@ func DownloadAndIndexSnapshotsIfNeed(s *StageState, ctx context.Context, tx kv.R return nil } -func FillDBFromSnapshots(logPrefix string, ctx context.Context, tx kv.RwTx, dirs datadir.Dirs, blockReader services.FullBlockReader, agg *state.AggregatorV3, logger log.Logger) error { +func FillDBFromSnapshots(logPrefix string, ctx context.Context, tx kv.RwTx, dirs datadir.Dirs, blockReader services.FullBlockReader, agg *state.Aggregator, logger log.Logger) error { blocksAvailable := blockReader.FrozenBlocks() logEvery := time.NewTicker(logInterval) defer logEvery.Stop() @@ -300,6 +325,7 @@ func FillDBFromSnapshots(logPrefix string, ctx context.Context, tx kv.RwTx, dirs if err = stages.SaveStageProgress(tx, stage, blocksAvailable); err != nil { return fmt.Errorf("advancing %s stage: %w", stage, err) } + switch stage { case stages.Headers: h2n := etl.NewCollector(logPrefix, dirs.Tmp, etl.NewSortableBuffer(etl.BufferOptimalSize), logger) @@ -348,10 +374,7 @@ func FillDBFromSnapshots(logPrefix string, ctx context.Context, tx kv.RwTx, dirs } case stages.Bodies: - type LastTxNumProvider interface { - FirstTxNumNotInSnapshots() uint64 - } - firstTxNum := blockReader.(LastTxNumProvider).FirstTxNumNotInSnapshots() + firstTxNum := blockReader.FirstTxnNumNotInSnapshots() // ResetSequence - allow set arbitrary value to sequence (for example to decrement it to exact value) if err := rawdb.ResetSequence(tx, kv.EthTx, firstTxNum); err != nil { return err @@ -366,10 +389,7 @@ func FillDBFromSnapshots(logPrefix string, ctx context.Context, tx kv.RwTx, dirs } if historyV3 { _ = tx.ClearBucket(kv.MaxTxNum) - type IterBody interface { - IterateFrozenBodies(f func(blockNum, baseTxNum, txAmount uint64) error) error - } - if err := blockReader.(IterBody).IterateFrozenBodies(func(blockNum, baseTxNum, txAmount uint64) error { + if err := blockReader.IterateFrozenBodies(func(blockNum, baseTxNum, txAmount uint64) error { select { case <-ctx.Done(): return ctx.Err() @@ -448,7 +468,7 @@ func SnapshotsPrune(s *PruneState, initialCycle bool, cfg SnapshotsCfg, ctx cont //} if !(cfg.snapshotDownloader == nil || reflect.ValueOf(cfg.snapshotDownloader).IsNil()) { - _, err := cfg.snapshotDownloader.Delete(ctx, &proto_downloader.DeleteRequest{Paths: l}) + _, err := cfg.snapshotDownloader.Delete(ctx, &protodownloader.DeleteRequest{Paths: l}) return err } @@ -517,8 +537,7 @@ type snapshotUploader struct { uploadScheduled atomic.Bool uploading atomic.Bool manifestMutex sync.Mutex - version uint8 - torrentFiles *downloader.TorrentFiles + torrentFiles *downloader.AtomicTorrentFS } func (u *snapshotUploader) init(ctx context.Context, logger log.Logger) { @@ -539,14 +558,14 @@ func (u *snapshotUploader) maxUploadedHeader() uint64 { for _, state := range u.files { if state.local && state.remote { if state.info != nil { - if state.info.T == snaptype.Headers { + if state.info.Type.Enum() == coresnaptype.Enums.Headers { if state.info.To > max { max = state.info.To } } } else { - if info, ok := snaptype.ParseFileName(u.cfg.dirs.Snap, state.file); ok { - if info.T == snaptype.Headers { + if info, _, ok := snaptype.ParseFileName(u.cfg.dirs.Snap, state.file); ok { + if info.Type.Enum() == coresnaptype.Enums.Headers { if info.To > max { max = info.To } @@ -565,6 +584,26 @@ type dirEntry struct { name string } +type snapInfo struct { + snaptype.FileInfo +} + +func (i *snapInfo) Version() snaptype.Version { + return i.FileInfo.Version +} + +func (i *snapInfo) From() uint64 { + return i.FileInfo.From +} + +func (i *snapInfo) To() uint64 { + return i.FileInfo.To +} + +func (i *snapInfo) Type() snaptype.Type { + return i.FileInfo.Type +} + func (e dirEntry) Name() string { return e.name } @@ -590,6 +629,10 @@ func (e dirEntry) ModTime() time.Time { } func (e dirEntry) Sys() any { + if info, _, ok := snaptype.ParseFileName("", e.name); ok { + return &snapInfo{info} + } + return nil } @@ -600,13 +643,13 @@ func (e dirEntry) Info() (fs.FileInfo, error) { var checkKnownSizes = false func (u *snapshotUploader) seedable(fi snaptype.FileInfo) bool { - if !fi.Seedable() { + if !snapcfg.Seedable(u.cfg.chainConfig.ChainName, fi) { return false } if checkKnownSizes { - for _, it := range snapcfg.KnownCfg(u.cfg.chainConfig.ChainName, 1).Preverified { - info, _ := snaptype.ParseFileName("", it.Name) + for _, it := range snapcfg.KnownCfg(u.cfg.chainConfig.ChainName).Preverified { + info, _, _ := snaptype.ParseFileName("", it.Name) if fi.From == info.From { return fi.To == info.To @@ -647,6 +690,10 @@ func (u *snapshotUploader) downloadManifest(ctx context.Context) ([]fs.DirEntry, return nil, err } + if len(entries) == 0 { + return nil, io.ErrUnexpectedEOF + } + return entries, nil } @@ -727,9 +774,12 @@ func (u *snapshotUploader) updateRemotes(remoteFiles []fs.DirEntry) { } } else { - info, ok := snaptype.ParseFileName(u.cfg.dirs.Snap, fi.Name()) - - if !ok || info.Version != u.version { + info, isStateFile, ok := snaptype.ParseFileName(u.cfg.dirs.Snap, fi.Name()) + if !ok { + continue + } + if isStateFile { + //TODO continue } @@ -743,7 +793,7 @@ func (u *snapshotUploader) updateRemotes(remoteFiles []fs.DirEntry) { } } -func (u *snapshotUploader) downloadLatestSnapshots(ctx context.Context, blockNumber rpc.BlockNumber, version uint8) error { +func (u *snapshotUploader) downloadLatestSnapshots(ctx context.Context, blockNumber rpc.BlockNumber) error { entries, err := u.downloadManifest(ctx) @@ -755,7 +805,7 @@ func (u *snapshotUploader) downloadLatestSnapshots(ctx context.Context, blockNum return err } - lastSegments := map[snaptype.Type]fs.FileInfo{} + lastSegments := map[snaptype.Enum]fs.FileInfo{} torrents := map[string]string{} for _, ent := range entries { @@ -767,13 +817,13 @@ func (u *snapshotUploader) downloadLatestSnapshots(ctx context.Context, blockNum snapInfo, ok := info.Sys().(downloader.SnapInfo) - if ok && snapInfo.Type() != snaptype.Unknown && snapInfo.Version() == version { - if last, ok := lastSegments[snapInfo.Type()]; ok { + if ok && snapInfo.Type() != nil { + if last, ok := lastSegments[snapInfo.Type().Enum()]; ok { if lastInfo, ok := last.Sys().(downloader.SnapInfo); ok && snapInfo.To() > lastInfo.To() { - lastSegments[snapInfo.Type()] = info + lastSegments[snapInfo.Type().Enum()] = info } } else { - lastSegments[snapInfo.Type()] = info + lastSegments[snapInfo.Type().Enum()] = info } } else { if ext := filepath.Ext(info.Name()); ext == ".torrent" { @@ -801,8 +851,7 @@ func (u *snapshotUploader) downloadLatestSnapshots(ctx context.Context, blockNum if info, err := ent.Info(); err == nil { snapInfo, ok := info.Sys().(downloader.SnapInfo) - if ok && snapInfo.Type() == segType && - snapInfo.Version() == version && + if ok && snapInfo.Type().Enum() == segType && snapInfo.From() == min { lastSegments[segType] = info } @@ -829,23 +878,13 @@ func (u *snapshotUploader) downloadLatestSnapshots(ctx context.Context, blockNum } func (u *snapshotUploader) maxSeedableHeader() uint64 { - var max uint64 - - if list, err := snaptype.Segments(u.cfg.dirs.Snap, u.version); err == nil { - for _, info := range list { - if u.seedable(info) && info.T == snaptype.Headers && info.To > max { - max = info.To - } - } - } - - return max + return snapcfg.MaxSeedableSegment(u.cfg.chainConfig.ChainName, u.cfg.dirs.Snap) } func (u *snapshotUploader) minBlockNumber() uint64 { var min uint64 - if list, err := snaptype.Segments(u.cfg.dirs.Snap, u.version); err == nil { + if list, err := snaptype.Segments(u.cfg.dirs.Snap); err == nil { for _, info := range list { if u.seedable(info) && min == 0 || info.From < min { min = info.From @@ -915,7 +954,7 @@ func (u *snapshotUploader) start(ctx context.Context, logger log.Logger) { } } - u.uploadSession, err = u.rclone.NewSession(ctx, u.cfg.dirs.Snap, uploadFs) + u.uploadSession, err = u.rclone.NewSession(ctx, u.cfg.dirs.Snap, uploadFs, nil) if err != nil { logger.Warn("[uploader] Uploading disabled: rclone session failed", "err", err) @@ -984,7 +1023,7 @@ func (u *snapshotUploader) scheduleUpload(ctx context.Context, logger log.Logger } func (u *snapshotUploader) removeBefore(before uint64) { - list, err := snaptype.Segments(u.cfg.dirs.Snap, u.version) + list, err := snaptype.Segments(u.cfg.dirs.Snap) if err != nil { return @@ -997,8 +1036,9 @@ func (u *snapshotUploader) removeBefore(before uint64) { for _, f := range list { if f.To > before { - switch f.T { - case snaptype.BorEvents, snaptype.BorSpans: + switch f.Type.Enum() { + case borsnaptype.Enums.BorEvents, borsnaptype.Enums.BorSpans, + borsnaptype.Enums.BorCheckpoints, borsnaptype.Enums.BorMilestones: borToReopen = append(borToReopen, filepath.Base(f.Path)) default: toReopen = append(toReopen, filepath.Base(f.Path)) @@ -1052,7 +1092,12 @@ func (u *snapshotUploader) upload(ctx context.Context, logger log.Logger) { for _, f := range u.cfg.blockReader.FrozenFiles() { if state, ok := u.files[f]; !ok { - if fi, ok := snaptype.ParseFileName(u.cfg.dirs.Snap, f); ok { + if fi, isStateFile, ok := snaptype.ParseFileName(u.cfg.dirs.Snap, f); ok { + if isStateFile { + //TODO + continue + } + if u.seedable(fi) { state := &uploadState{ file: f, @@ -1130,7 +1175,7 @@ func (u *snapshotUploader) upload(ctx context.Context, logger log.Logger) { g.Go(func() error { defer i.Add(1) - err := downloader.BuildTorrentIfNeed(gctx, state.file, u.cfg.dirs.Snap, u.torrentFiles) + _, err := downloader.BuildTorrentIfNeed(gctx, state.file, u.cfg.dirs.Snap, u.torrentFiles) state.Lock() state.buildingTorrent = false diff --git a/eth/stagedsync/stage_txlookup.go b/eth/stagedsync/stage_txlookup.go index 67ded81459e..0fc596ac745 100644 --- a/eth/stagedsync/stage_txlookup.go +++ b/eth/stagedsync/stage_txlookup.go @@ -14,12 +14,11 @@ import ( "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/etl" "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon/polygon/bor/borcfg" - "github.com/ledgerwatch/erigon/turbo/services" - "github.com/ledgerwatch/erigon/core/rawdb" - "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/ethdb/prune" + "github.com/ledgerwatch/erigon/polygon/bor/borcfg" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" + "github.com/ledgerwatch/erigon/turbo/services" ) type TxLookupCfg struct { @@ -160,7 +159,7 @@ func borTxnLookupTransform(logPrefix string, tx kv.RwTx, blockFrom, blockTo uint // we add state sync transactions every bor Sprint amount of blocks if blocknum%cfg.borConfig.CalculateSprintLength(blocknum) == 0 && rawdb.HasBorReceipts(tx, blocknum) { - txnHash := types.ComputeBorTxHash(blocknum, blockHash) + txnHash := bortypes.ComputeBorTxHash(blocknum, blockHash) if err := next(k, txnHash.Bytes(), blockNumBytes); err != nil { return err } @@ -300,7 +299,7 @@ func deleteBorTxLookupRange(tx kv.RwTx, logPrefix string, blockFrom, blockTo uin return etl.Transform(logPrefix, tx, kv.HeaderCanonical, kv.BorTxLookup, cfg.tmpdir, func(k, v []byte, next etl.ExtractNextFunc) error { blocknum, blockHash := binary.BigEndian.Uint64(k), libcommon.CastToHash(v) - borTxHash := types.ComputeBorTxHash(blocknum, blockHash) + borTxHash := bortypes.ComputeBorTxHash(blocknum, blockHash) if err := next(k, borTxHash.Bytes(), nil); err != nil { return err } diff --git a/eth/stagedsync/stagedsynctest/harness.go b/eth/stagedsync/stagedsynctest/harness.go index ea203b65fa0..d283fafc896 100644 --- a/eth/stagedsync/stagedsynctest/harness.go +++ b/eth/stagedsync/stagedsynctest/harness.go @@ -11,13 +11,10 @@ import ( "testing" "time" - "github.com/ledgerwatch/erigon/polygon/bor/borcfg" - "github.com/ledgerwatch/erigon/polygon/heimdall" - - "github.com/golang/mock/gomock" "github.com/holiman/uint256" "github.com/ledgerwatch/log/v3" "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -25,7 +22,6 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/erigon-lib/wrap" "github.com/ledgerwatch/erigon/consensus" - consensusmock "github.com/ledgerwatch/erigon/consensus/mock" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/types" @@ -34,7 +30,9 @@ import ( "github.com/ledgerwatch/erigon/eth/stagedsync" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/polygon/bor" + "github.com/ledgerwatch/erigon/polygon/bor/borcfg" "github.com/ledgerwatch/erigon/polygon/bor/valset" + "github.com/ledgerwatch/erigon/polygon/heimdall" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/erigon/turbo/stages/mock" "github.com/ledgerwatch/erigon/turbo/testlog" @@ -49,17 +47,20 @@ func InitHarness(ctx context.Context, t *testing.T, cfg HarnessCfg) Harness { borConsensusDB := memdb.NewTestDB(t) ctrl := gomock.NewController(t) heimdallClient := heimdall.NewMockHeimdallClient(ctrl) + miningState := stagedsync.NewProposingState(ðconfig.Defaults.Miner) bhCfg := stagedsync.StageBorHeimdallCfg( chainDataDB, borConsensusDB, - stagedsync.NewProposingState(ðconfig.Defaults.Miner), + miningState, *cfg.ChainConfig, heimdallClient, blockReader, nil, // headerDownloader nil, // penalize - nil, // not used - nil, // not used + nil, // loopBreakCheck + nil, // recent bor snapshots cached + nil, // signatures lru cache + false, nil, ) stateSyncStages := stagedsync.DefaultStages( @@ -80,7 +81,29 @@ func InitHarness(ctx context.Context, t *testing.T, cfg HarnessCfg) Harness { stagedsync.FinishCfg{}, true, ) - stateSync := stagedsync.New(ethconfig.Defaults.Sync, stateSyncStages, stagedsync.DefaultUnwindOrder, stagedsync.DefaultPruneOrder, logger) + stateSync := stagedsync.New( + ethconfig.Defaults.Sync, + stateSyncStages, + stagedsync.DefaultUnwindOrder, + stagedsync.DefaultPruneOrder, + logger, + ) + miningSyncStages := stagedsync.MiningStages( + ctx, + stagedsync.MiningCreateBlockCfg{}, + bhCfg, + stagedsync.MiningExecCfg{}, + stagedsync.HashStateCfg{}, + stagedsync.TrieCfg{}, + stagedsync.MiningFinishCfg{}, + ) + miningSync := stagedsync.New( + ethconfig.Defaults.Sync, + miningSyncStages, + stagedsync.MiningUnwindOrder, + stagedsync.MiningPruneOrder, + logger, + ) validatorKey, err := crypto.GenerateKey() require.NoError(t, err) validatorAddress := crypto.PubkeyToAddress(validatorKey.PublicKey) @@ -93,6 +116,9 @@ func InitHarness(ctx context.Context, t *testing.T, cfg HarnessCfg) Harness { blockReader: blockReader, stateSyncStages: stateSyncStages, stateSync: stateSync, + miningSyncStages: miningSyncStages, + miningSync: miningSync, + miningState: miningState, bhCfg: bhCfg, heimdallClient: heimdallClient, heimdallProducersOverride: cfg.GetOrCreateDefaultHeimdallProducersOverride(), @@ -145,9 +171,12 @@ type Harness struct { blockReader services.BlockReader stateSyncStages []*stagedsync.Stage stateSync *stagedsync.Sync + miningSyncStages []*stagedsync.Stage + miningSync *stagedsync.Sync + miningState stagedsync.MiningState bhCfg stagedsync.BorHeimdallCfg heimdallClient *heimdall.MockHeimdallClient - heimdallNextMockSpan *heimdall.HeimdallSpan + heimdallNextMockSpan *heimdall.Span heimdallLastEventID uint64 heimdallLastEventHeaderNum uint64 heimdallProducersOverride map[uint64][]valset.Validator // spanID -> selected producers override @@ -195,29 +224,68 @@ func (h *Harness) StateSyncUnwindReason() stagedsync.UnwindReason { return h.stateSync.UnwindReason() } -func (h *Harness) RunStageForward(t *testing.T, id stages.SyncStage) { - h.RunStageForwardWithErrorIs(t, id, nil) +func (h *Harness) RunStateSyncStageForward(t *testing.T, id stages.SyncStage) { + h.RunStateSyncStageForwardWithErrorIs(t, id, nil) } -func (h *Harness) RunStageForwardWithErrorIs(t *testing.T, id stages.SyncStage, wantErr error) { - err := h.RunStageForwardWithReturnError(t, id) - require.ErrorIs(t, err, wantErr) +func (h *Harness) RunStateSyncStageForwardWithErrorIs(t *testing.T, id stages.SyncStage, wantErr error) { + h.runSyncStageForwardWithErrorIs(t, id, h.stateSync, h.stateSyncStages, wantErr, wrap.TxContainer{}) +} + +func (h *Harness) RunStateStageForwardWithReturnError(t *testing.T, id stages.SyncStage) error { + return h.runSyncStageForwardWithReturnError(t, id, h.stateSync, h.stateSyncStages, wrap.TxContainer{}) } -func (h *Harness) RunStageForwardWithReturnError(t *testing.T, id stages.SyncStage) error { - err := h.stateSync.SetCurrentStage(id) +func (h *Harness) RunMiningStageForward(ctx context.Context, t *testing.T, id stages.SyncStage) { + h.RunMiningStageForwardWithErrorIs(ctx, t, id, nil) +} + +func (h *Harness) RunMiningStageForwardWithErrorIs(ctx context.Context, t *testing.T, id stages.SyncStage, wantErr error) { + tx, err := h.chainDataDB.BeginRw(ctx) require.NoError(t, err) + defer tx.Rollback() - stage, found := h.findStateSyncStageByID(id) - require.True(t, found) + txc := wrap.TxContainer{Tx: tx} + h.runSyncStageForwardWithErrorIs(t, id, h.miningSync, h.miningSyncStages, wantErr, txc) + + err = tx.Commit() + require.NoError(t, err) +} + +func (h *Harness) RunMiningStageForwardWithReturnError(ctx context.Context, t *testing.T, id stages.SyncStage) error { + tx, err := h.chainDataDB.BeginRw(ctx) + require.NoError(t, err) + defer tx.Rollback() + + txc := wrap.TxContainer{Tx: tx} + err = h.runSyncStageForwardWithReturnError(t, id, h.miningSync, h.miningSyncStages, txc) + if err != nil { + return err + } + + err = tx.Commit() + require.NoError(t, err) + return nil +} + +func (h *Harness) SaveHeader(ctx context.Context, t *testing.T, header *types.Header) { + h.saveHeaders(ctx, t, []*types.Header{header}) +} - stageState, err := h.stateSync.StageState(id, nil, h.chainDataDB) +func (h *Harness) SetMiningBlockEmptyHeader(ctx context.Context, t *testing.T, parentNum uint64) { + tx, err := h.chainDataDB.BeginRw(ctx) require.NoError(t, err) + defer tx.Rollback() + + parent := rawdb.ReadHeaderByNumber(tx, parentNum) + require.NotNil(t, parent) - return stage.Forward(true, false, stageState, h.stateSync, wrap.TxContainer{}, h.logger) + timestamp := uint64(time.Now().Unix()) + gasLimit := &h.miningState.MiningConfig.GasLimit + h.miningState.MiningBlock.Header = core.MakeEmptyHeader(parent, h.chainConfig, timestamp, gasLimit) } -func (h *Harness) ReadSpansFromDB(ctx context.Context) (spans []*heimdall.HeimdallSpan, err error) { +func (h *Harness) ReadSpansFromDB(ctx context.Context) (spans []*heimdall.Span, err error) { err = h.chainDataDB.View(ctx, func(tx kv.Tx) error { spanIter, err := tx.Range(kv.BorSpans, nil, nil) if err != nil { @@ -230,14 +298,14 @@ func (h *Harness) ReadSpansFromDB(ctx context.Context) (spans []*heimdall.Heimda return err } - spanKey := binary.BigEndian.Uint64(keyBytes) - var heimdallSpan heimdall.HeimdallSpan + spanKey := heimdall.SpanId(binary.BigEndian.Uint64(keyBytes)) + var heimdallSpan heimdall.Span if err = json.Unmarshal(spanBytes, &heimdallSpan); err != nil { return err } - if spanKey != heimdallSpan.ID { - return fmt.Errorf("span key and id mismatch %d!=%d", spanKey, heimdallSpan.ID) + if spanKey != heimdallSpan.Id { + return fmt.Errorf("span key and id mismatch %d!=%d", spanKey, heimdallSpan.Id) } spans = append(spans, &heimdallSpan) @@ -344,6 +412,10 @@ func createGenesisInitData(t *testing.T, chainConfig *chain.Config) *genesisInit } func (h *Harness) generateChain(ctx context.Context, t *testing.T, ctrl *gomock.Controller, cfg HarnessCfg) { + if cfg.GenerateChainNumBlocks == 0 { + return + } + consensusEngine := h.consensusEngine(t, cfg) var parentBlock *types.Block err := h.chainDataDB.View(ctx, func(tx kv.Tx) (err error) { @@ -448,10 +520,6 @@ func (h *Harness) consensusEngine(t *testing.T, cfg HarnessCfg) consensus.Engine return nil } -func (h *Harness) SaveHeader(ctx context.Context, t *testing.T, header *types.Header) { - h.saveHeaders(ctx, t, []*types.Header{header}) -} - func (h *Harness) saveHeaders(ctx context.Context, t *testing.T, headers []*types.Header) { rwTx, err := h.chainDataDB.BeginRw(ctx) require.NoError(t, err) @@ -470,7 +538,7 @@ func (h *Harness) saveHeaders(ctx context.Context, t *testing.T, headers []*type } func (h *Harness) mockChainHeaderReader(ctrl *gomock.Controller) consensus.ChainHeaderReader { - mockChainHR := consensusmock.NewMockChainHeaderReader(ctrl) + mockChainHR := consensus.NewMockChainHeaderReader(ctrl) mockChainHR. EXPECT(). GetHeader(gomock.Any(), gomock.Any()). @@ -512,12 +580,10 @@ func (h *Harness) setHeimdallNextMockSpan() { selectedProducers[i] = *validators[i] } - h.heimdallNextMockSpan = &heimdall.HeimdallSpan{ - Span: heimdall.Span{ - ID: 0, - StartBlock: 0, - EndBlock: 255, - }, + h.heimdallNextMockSpan = &heimdall.Span{ + Id: 0, + StartBlock: 0, + EndBlock: 255, ValidatorSet: *validatorSet, SelectedProducers: selectedProducers, } @@ -547,20 +613,18 @@ func (h *Harness) mockBorSpanner() { func (h *Harness) mockHeimdallClient() { h.heimdallClient. EXPECT(). - Span(gomock.Any(), gomock.Any()). - DoAndReturn(func(ctx context.Context, spanID uint64) (*heimdall.HeimdallSpan, error) { + FetchSpan(gomock.Any(), gomock.Any()). + DoAndReturn(func(ctx context.Context, spanID uint64) (*heimdall.Span, error) { res := h.heimdallNextMockSpan - h.heimdallNextMockSpan = &heimdall.HeimdallSpan{ - Span: heimdall.Span{ - ID: res.ID + 1, - StartBlock: res.EndBlock + 1, - EndBlock: res.EndBlock + 6400, - }, + h.heimdallNextMockSpan = &heimdall.Span{ + Id: res.Id + 1, + StartBlock: res.EndBlock + 1, + EndBlock: res.EndBlock + 6400, ValidatorSet: res.ValidatorSet, SelectedProducers: res.SelectedProducers, } - if selectedProducers, ok := h.heimdallProducersOverride[res.ID]; ok { + if selectedProducers, ok := h.heimdallProducersOverride[uint64(res.Id)]; ok { res.SelectedProducers = selectedProducers } @@ -570,10 +634,12 @@ func (h *Harness) mockHeimdallClient() { h.heimdallClient. EXPECT(). - StateSyncEvents(gomock.Any(), gomock.Any(), gomock.Any()). - DoAndReturn(func(_ context.Context, _ uint64, _ int64) ([]*heimdall.EventRecordWithTime, error) { + FetchStateSyncEvents(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, _ uint64, _ time.Time, _ int) ([]*heimdall.EventRecordWithTime, error) { + if h.heimdallLastEventID > 0 { + h.heimdallLastEventHeaderNum += h.borConfig.CalculateSprintLength(h.heimdallLastEventHeaderNum) + } h.heimdallLastEventID++ - h.heimdallLastEventHeaderNum += h.borConfig.CalculateSprintLength(h.heimdallLastEventHeaderNum) stateSyncDelay := h.borConfig.CalculateStateSyncDelay(h.heimdallLastEventHeaderNum) newEvent := heimdall.EventRecordWithTime{ EventRecord: heimdall.EventRecord{ @@ -587,10 +653,48 @@ func (h *Harness) mockHeimdallClient() { return []*heimdall.EventRecordWithTime{&newEvent}, nil }). AnyTimes() + h.heimdallClient. + EXPECT(). + FetchStateSyncEvent(gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, _ uint64) (*heimdall.EventRecordWithTime, error) { + return nil, heimdall.ErrEventRecordNotFound + }). + AnyTimes() +} + +func (h *Harness) runSyncStageForwardWithErrorIs( + t *testing.T, + id stages.SyncStage, + sync *stagedsync.Sync, + syncStages []*stagedsync.Stage, + wantErr error, + txc wrap.TxContainer, +) { + err := h.runSyncStageForwardWithReturnError(t, id, sync, syncStages, txc) + require.ErrorIs(t, err, wantErr) +} + +func (h *Harness) runSyncStageForwardWithReturnError( + t *testing.T, + id stages.SyncStage, + sync *stagedsync.Sync, + syncStages []*stagedsync.Stage, + txc wrap.TxContainer, +) error { + err := sync.SetCurrentStage(id) + require.NoError(t, err) + + stage, found := h.findSyncStageByID(id, syncStages) + require.True(t, found) + + stageState, err := sync.StageState(id, txc.Tx, h.chainDataDB) + require.NoError(t, err) + + return stage.Forward(true, false, stageState, sync, txc, h.logger) } -func (h *Harness) findStateSyncStageByID(id stages.SyncStage) (*stagedsync.Stage, bool) { - for _, s := range h.stateSyncStages { +func (h *Harness) findSyncStageByID(id stages.SyncStage, syncStages []*stagedsync.Stage) (*stagedsync.Stage, bool) { + for _, s := range syncStages { if s.ID == id { return s, true } diff --git a/eth/stagedsync/all_stages.go b/eth/stagedsync/stages/metrics.go similarity index 62% rename from eth/stagedsync/all_stages.go rename to eth/stagedsync/stages/metrics.go index 32c28750593..6691fb90ffa 100644 --- a/eth/stagedsync/all_stages.go +++ b/eth/stagedsync/stages/metrics.go @@ -1,4 +1,4 @@ -package stagedsync +package stages import ( "fmt" @@ -7,14 +7,13 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/metrics" - "github.com/ledgerwatch/erigon/eth/stagedsync/stages" ) -var syncMetrics = map[stages.SyncStage]metrics.Gauge{} +var SyncMetrics = map[SyncStage]metrics.Gauge{} func init() { - for _, v := range stages.AllStages { - syncMetrics[v] = metrics.GetOrCreateGauge( + for _, v := range AllStages { + SyncMetrics[v] = metrics.GetOrCreateGauge( fmt.Sprintf( `sync{stage="%s"}`, xstrings.ToSnakeCase(string(v)), @@ -26,8 +25,8 @@ func init() { // UpdateMetrics - need update metrics manually because current "metrics" package doesn't support labels // need to fix it in future func UpdateMetrics(tx kv.Tx) error { - for id, m := range syncMetrics { - progress, err := stages.GetStageProgress(tx, id) + for id, m := range SyncMetrics { + progress, err := GetStageProgress(tx, id) if err != nil { return err } diff --git a/eth/stagedsync/stages/stages.go b/eth/stagedsync/stages/stages.go index c6734f3923e..d4710c50c64 100644 --- a/eth/stagedsync/stages/stages.go +++ b/eth/stagedsync/stages/stages.go @@ -89,6 +89,9 @@ func GetStageProgress(db kv.Getter, stage SyncStage) (uint64, error) { } func SaveStageProgress(db kv.Putter, stage SyncStage, progress uint64) error { + if m, ok := SyncMetrics[stage]; ok { + m.SetUint64(progress) + } return db.Put(kv.SyncStageProgress, []byte(stage), marshalData(progress)) } diff --git a/eth/stagedsync/sync.go b/eth/stagedsync/sync.go index 20b067844de..5cc1abd511d 100644 --- a/eth/stagedsync/sync.go +++ b/eth/stagedsync/sync.go @@ -61,6 +61,7 @@ func (s *Sync) NewUnwindState(id stages.SyncStage, unwindPoint, currentProgress return &UnwindState{id, unwindPoint, currentProgress, UnwindReason{nil, nil}, s} } +// Get the current prune status from the DB func (s *Sync) PruneStageState(id stages.SyncStage, forwardProgress uint64, tx kv.Tx, db kv.RwDB) (*PruneState, error) { var pruneProgress uint64 var err error @@ -90,10 +91,8 @@ func (s *Sync) NextStage() { return } s.currentStage++ - - isDiagEnabled := diagnostics.TypeOf(diagnostics.CurrentSyncStage{}).Enabled() - if isDiagEnabled { - diagnostics.Send(diagnostics.CurrentSyncStage{Stage: s.currentStage}) + if s.currentStage < uint(len(s.stages)) { + diagnostics.Send(diagnostics.CurrentSyncStage{Stage: string(s.stages[s.currentStage].ID)}) } } @@ -164,10 +163,8 @@ func (s *Sync) SetCurrentStage(id stages.SyncStage) error { for i, stage := range s.stages { if stage.ID == id { s.currentStage = uint(i) - isDiagEnabled := diagnostics.TypeOf(diagnostics.CurrentSyncStage{}).Enabled() - if isDiagEnabled { - diagnostics.Send(diagnostics.CurrentSyncStage{Stage: s.currentStage}) - } + + diagnostics.Send(diagnostics.CurrentSyncStage{Stage: string(id)}) return nil } @@ -420,6 +417,7 @@ func (s *Sync) Run(db kv.RwDB, txc wrap.TxContainer, firstCycle bool) (bool, err return hasMore, nil } +// Run pruning for stages as per the defined pruning order, if enabled for that stage func (s *Sync) RunPrune(db kv.RwDB, tx kv.RwTx, firstCycle bool) error { s.timings = s.timings[:0] for i := 0; i < len(s.pruningOrder); i++ { @@ -459,16 +457,23 @@ func (s *Sync) PrintTimings() []interface{} { return logCtx } -func PrintTables(db kv.RoDB, tx kv.RwTx) []interface{} { - if tx == nil { - return nil - } - buckets := []string{ +func CollectDBMetrics(db kv.RoDB, tx kv.RwTx) []interface{} { + res := CollectTableSizes(db, tx, []string{ kv.PlainState, kv.AccountChangeSet, kv.StorageChangeSet, kv.EthTx, kv.Log, + }) + + tx.CollectMetrics() + + return res +} + +func CollectTableSizes(db kv.RoDB, tx kv.Tx, buckets []string) []interface{} { + if tx == nil { + return nil } bucketSizes := make([]interface{}, 0, 2*(len(buckets)+2)) for _, bucket := range buckets { @@ -488,7 +493,7 @@ func PrintTables(db kv.RoDB, tx kv.RwTx) []interface{} { if db != nil { bucketSizes = append(bucketSizes, "ReclaimableSpace", libcommon.ByteCount(amountOfFreePagesInDb*db.PageSize())) } - tx.CollectMetrics() + return bucketSizes } @@ -549,16 +554,17 @@ func (s *Sync) unwindStage(firstCycle bool, stage *Stage, db kv.RwDB, txc wrap.T return nil } +// Run the pruning function for the given stage func (s *Sync) pruneStage(firstCycle bool, stage *Stage, db kv.RwDB, tx kv.RwTx) error { start := time.Now() - s.logger.Trace("Prune...", "stage", stage.ID) + s.logger.Debug("Prune...", "stage", stage.ID) stageState, err := s.StageState(stage.ID, tx, db) if err != nil { return err } - prune, err := s.PruneStageState(stage.ID, stageState.BlockNumber, tx, db) + pruneState, err := s.PruneStageState(stage.ID, stageState.BlockNumber, tx, db) if err != nil { return err } @@ -566,17 +572,18 @@ func (s *Sync) pruneStage(firstCycle bool, stage *Stage, db kv.RwDB, tx kv.RwTx) return err } - err = stage.Prune(firstCycle, prune, tx, s.logger) + err = stage.Prune(firstCycle, pruneState, tx, s.logger) if err != nil { return fmt.Errorf("[%s] %w", s.LogPrefix(), err) } took := time.Since(start) - if took > 60*time.Second { + if took > 30*time.Second { logPrefix := s.LogPrefix() s.logger.Info(fmt.Sprintf("[%s] Prune done", logPrefix), "in", took) } s.timings = append(s.timings, Timing{isPrune: true, stage: stage.ID, took: took}) + s.logger.Debug("Prune DONE", "stage", stage.ID) return nil } diff --git a/eth/stagedsync/testutil.go b/eth/stagedsync/testutil.go index 812eba9a508..545e0c631b0 100644 --- a/eth/stagedsync/testutil.go +++ b/eth/stagedsync/testutil.go @@ -7,11 +7,11 @@ import ( "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/erigon-lib/kv" state2 "github.com/ledgerwatch/erigon-lib/state" "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/types/accounts" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/stretchr/testify/assert" ) @@ -23,13 +23,13 @@ const ( func compareCurrentState( t *testing.T, - agg *state2.AggregatorV3, + agg *state2.Aggregator, db1 kv.Tx, db2 kv.Tx, buckets ...string, ) { for _, bucket := range buckets { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { compareDomain(t, agg, db1, db2, bucket) continue } @@ -37,10 +37,10 @@ func compareCurrentState( } } -func compareDomain(t *testing.T, agg *state2.AggregatorV3, db1, db2 kv.Tx, bucketName string) { +func compareDomain(t *testing.T, agg *state2.Aggregator, db1, db2 kv.Tx, bucketName string) { panic("implement me") /* - ac := agg.MakeContext() + ac := agg.BeginFilesRo() defer ac.Close() switch bucketName { diff --git a/eth/tracers/api.go b/eth/tracers/api.go index c55055a0ed5..9890821192a 100644 --- a/eth/tracers/api.go +++ b/eth/tracers/api.go @@ -19,6 +19,5 @@ type TraceConfig struct { StateOverrides *ethapi.StateOverrides BorTraceEnabled *bool - BorTx *bool TxIndex *hexutil.Uint } diff --git a/eth/tracers/internal/tracetest/calltrace_test.go b/eth/tracers/internal/tracetest/calltrace_test.go index d24847d551b..9e05252bc9a 100644 --- a/eth/tracers/internal/tracetest/calltrace_test.go +++ b/eth/tracers/internal/tracetest/calltrace_test.go @@ -29,6 +29,7 @@ import ( "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/common/hexutility" @@ -105,7 +106,7 @@ func TestCallTracerNativeWithLog(t *testing.T) { func testCallTracer(tracerName string, dirPath string, t *testing.T) { isLegacy := strings.HasSuffix(dirPath, "_legacy") - files, err := os.ReadDir(filepath.Join("testdata", dirPath)) + files, err := dir.ReadDir(filepath.Join("testdata", dirPath)) if err != nil { t.Fatalf("failed to retrieve tracer test suite: %v", err) } @@ -126,7 +127,7 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) { } else if err := json.Unmarshal(blob, test); err != nil { t.Fatalf("failed to parse testcase: %v", err) } - tx, err := types.UnmarshalTransactionFromBinary(common.FromHex(test.Input)) + tx, err := types.UnmarshalTransactionFromBinary(common.FromHex(test.Input), false /* blobTxnsAreWrappedWithBlobs */) if err != nil { t.Fatalf("failed to parse testcase input: %v", err) } @@ -207,7 +208,7 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) { } func BenchmarkTracers(b *testing.B) { - files, err := os.ReadDir(filepath.Join("testdata", "call_tracer")) + files, err := dir.ReadDir(filepath.Join("testdata", "call_tracer")) if err != nil { b.Fatalf("failed to retrieve tracer test suite: %v", err) } diff --git a/eth/tracers/internal/tracetest/prestate_test.go b/eth/tracers/internal/tracetest/prestate_test.go index 0a5515a743c..5148c3bcbb8 100644 --- a/eth/tracers/internal/tracetest/prestate_test.go +++ b/eth/tracers/internal/tracetest/prestate_test.go @@ -26,6 +26,7 @@ import ( "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/stretchr/testify/require" "github.com/ledgerwatch/erigon/common" @@ -70,7 +71,7 @@ func TestPrestateWithDiffModeTracer(t *testing.T) { } func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T) { - files, err := os.ReadDir(filepath.Join("testdata", dirPath)) + files, err := dir.ReadDir(filepath.Join("testdata", dirPath)) if err != nil { t.Fatalf("failed to retrieve tracer test suite: %v", err) } @@ -91,7 +92,7 @@ func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T) { } else if err := json.Unmarshal(blob, test); err != nil { t.Fatalf("failed to parse testcase: %v", err) } - tx, err := types.UnmarshalTransactionFromBinary(common.FromHex(test.Input)) + tx, err := types.UnmarshalTransactionFromBinary(common.FromHex(test.Input), false /* blobTxnsAreWrappedWithBlobs */) if err != nil { t.Fatalf("failed to parse testcase input: %v", err) } diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer/delegatecall.json b/eth/tracers/internal/tracetest/testdata/call_tracer/delegatecall.json index 9ba67a9bf46..eb7539d4613 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer/delegatecall.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer/delegatecall.json @@ -70,7 +70,8 @@ "input": "0x7d65837a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a529806c67cc6486d4d62024471772f47f6fd672", "output": "0x0000000000000000000000000000000000000000000000000000000000000001", "to": "0x42b02b5deeb78f34cd5ac896473b63e6c99a71a2", - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value":"0x0" } ], "from": "0x269296dddce321a6bcbaa2f0181127593d732cba", diff --git a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/delegatecall.json b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/delegatecall.json index bc13bc25068..e9ad6df6ab8 100644 --- a/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/delegatecall.json +++ b/eth/tracers/internal/tracetest/testdata/call_tracer_withLog/delegatecall.json @@ -163,7 +163,8 @@ "to": "0xef3487d24a0702703e04a26cef479e313c8fc7ae", "input": "0x24d4e90a0000000000000000000000000000000000000000000000020000000000000000", "output": "0x000000000000000000000000000000000000000000000000b17217f7d1cf79ab", - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value":"0x0" }, { "from": "0x8695e5e79dab06fbbb05f445316fa4edb0da30f0", @@ -172,7 +173,8 @@ "to": "0xef3487d24a0702703e04a26cef479e313c8fc7ae", "input": "0x872fb2b5000000000000000000000000000000000000000000000000c330b3f7006420b8", "output": "0x00000000000000000000000000000000000000000000000224bf7df2c80f0878", - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value":"0x0" }, { "from": "0x8695e5e79dab06fbbb05f445316fa4edb0da30f0", @@ -181,7 +183,8 @@ "to": "0xef3487d24a0702703e04a26cef479e313c8fc7ae", "input": "0x872fb2b50000000000000000000000000000000000000000000000000000000000000000", "output": "0x00000000000000000000000000000000000000000000000100000016aee6e8ef", - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value":"0x0" }, { "from": "0x8695e5e79dab06fbbb05f445316fa4edb0da30f0", @@ -190,7 +193,8 @@ "to": "0xef3487d24a0702703e04a26cef479e313c8fc7ae", "input": "0x24d4e90a00000000000000000000000000000000000000000000000324bf7e0976f5f167", "output": "0x0000000000000000000000000000000000000000000000012535c5e5f87ee0d2", - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value":"0x0" }, { "from": "0x8695e5e79dab06fbbb05f445316fa4edb0da30f0", @@ -199,7 +203,8 @@ "to": "0xef3487d24a0702703e04a26cef479e313c8fc7ae", "input": "0x872fb2b5000000000000000000000000000000000000000000000000c330b3f7006420b8", "output": "0x00000000000000000000000000000000000000000000000224bf7df2c80f0878", - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value":"0x0" }, { "from": "0x8695e5e79dab06fbbb05f445316fa4edb0da30f0", @@ -208,7 +213,8 @@ "to": "0xef3487d24a0702703e04a26cef479e313c8fc7ae", "input": "0x872fb2b500000000000000000000000000000000000000000000000237d37fe5d297a500", "output": "0x0000000000000000000000000000000000000000000000093088c407fcbbce38", - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value":"0x0" }, { "from": "0x8695e5e79dab06fbbb05f445316fa4edb0da30f0", @@ -217,7 +223,8 @@ "to": "0xef3487d24a0702703e04a26cef479e313c8fc7ae", "input": "0x24d4e90a00000000000000000000000000000000000000000000000b554841fac4cad6b0", "output": "0x0000000000000000000000000000000000000000000000026d7fc130d6a74cbe", - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value":"0x0" } ], "value": "0x0", @@ -390,7 +397,8 @@ "data": "0x000000000000000000000000000000000000000000000000de0b6b3a76400000" } ], - "type": "DELEGATECALL" + "type": "DELEGATECALL", + "value": "0x0" } ], "value": "0x0", diff --git a/eth/tracers/logger/access_list_tracer.go b/eth/tracers/logger/access_list_tracer.go index fa78ee15a52..a869ea036ec 100644 --- a/eth/tracers/logger/access_list_tracer.go +++ b/eth/tracers/logger/access_list_tracer.go @@ -252,7 +252,7 @@ func (a *AccessListTracer) AccessList() types2.AccessList { return a.list.accessList() } -// AccessList returns the current accesslist maintained by the tracer. +// AccessListSorted returns the current accesslist maintained by the tracer. func (a *AccessListTracer) AccessListSorted() types2.AccessList { return a.list.accessListSorted() } diff --git a/eth/tracers/native/call.go b/eth/tracers/native/call.go index 013de55bbf0..7f3c2321a39 100644 --- a/eth/tracers/native/call.go +++ b/eth/tracers/native/call.go @@ -27,13 +27,12 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/common/hexutility" - "github.com/ledgerwatch/erigon/accounts/abi" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/eth/tracers" ) -//go:generate go run github.com/fjl/gencodec -type callFrame -field-override callFrameMarshaling -out gen_callframe_json.go +//go:generate gencodec -type callFrame -field-override callFrameMarshaling -out gen_callframe_json.go func init() { register("callTracer", newCallTracer) @@ -248,8 +247,8 @@ func (t *callTracer) CaptureTxEnd(restGas uint64) { t.callstack[0].GasUsed = t.gasLimit - restGas if t.config.WithLog { // Logs are not emitted when the call fails - clearFailedLogs(&t.callstack[0], false, 0, t.logGaps) - fixLogIndexGap(&t.callstack[0], t.logGaps) + clearFailedLogs(&t.callstack[0], false, t.logGaps) + fixLogIndexGap(&t.callstack[0], addCumulativeGaps(t.logIndex, t.logGaps)) } t.logIndex = 0 t.logGaps = nil @@ -276,35 +275,50 @@ func (t *callTracer) Stop(err error) { // clearFailedLogs clears the logs of a callframe and all its children // in case of execution failure. -func clearFailedLogs(cf *callFrame, parentFailed bool, gap int, logGaps map[uint64]int) { +func clearFailedLogs(cf *callFrame, parentFailed bool, logGaps map[uint64]int) { failed := cf.failed() || parentFailed - // Clear own logs if failed { - gap += len(cf.Logs) - if gap > 0 { - lastIdx := len(cf.Logs) - 1 - if lastIdx > 0 && logGaps != nil { - idx := cf.Logs[lastIdx].Index - logGaps[idx] = gap - } + lastIdx := len(cf.Logs) - 1 + if lastIdx >= 0 && logGaps != nil { + idx := cf.Logs[lastIdx].Index + logGaps[idx] = len(cf.Logs) } + // Clear own logs cf.Logs = nil } for i := range cf.Calls { - clearFailedLogs(&cf.Calls[i], failed, gap, logGaps) + clearFailedLogs(&cf.Calls[i], failed, logGaps) } } -func fixLogIndexGap(cf *callFrame, logGaps map[uint64]int) { +// Find the shift position of each potential logIndex +func addCumulativeGaps(h uint64, logGaps map[uint64]int) []uint64 { + if len(logGaps) == 0 || logGaps == nil { + return nil + } + cumulativeGaps := make([]uint64, h) + for idx, gap := range logGaps { + if idx+1 < h { + cumulativeGaps[idx+1] = uint64(gap) // Next index of the last failed index + } + } + for i := 1; i < int(h); i++ { + cumulativeGaps[i] += cumulativeGaps[i-1] + } + return cumulativeGaps +} + +// Recursively shift log indices of callframe - self and children +func fixLogIndexGap(cf *callFrame, cumulativeGaps []uint64) { + if cumulativeGaps == nil { + return + } if len(cf.Logs) > 0 { - gap := logGaps[cf.Logs[0].Index-1] - if gap > 0 { - for _, log := range cf.Logs { - log.Index -= uint64(gap) - } + for i := range cf.Logs { + cf.Logs[i].Index -= cumulativeGaps[cf.Logs[i].Index] } } for i := range cf.Calls { - fixLogIndexGap(&cf.Calls[i], logGaps) + fixLogIndexGap(&cf.Calls[i], cumulativeGaps) } } diff --git a/eth/tracers/native/prestate.go b/eth/tracers/native/prestate.go index 133ca8bcc8a..7c713d6d5a5 100644 --- a/eth/tracers/native/prestate.go +++ b/eth/tracers/native/prestate.go @@ -19,21 +19,20 @@ package native import ( "bytes" "encoding/json" - "github.com/ledgerwatch/erigon-lib/common/hexutil" "math/big" "sync/atomic" "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/common/hexutility" - "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/erigon/eth/tracers" ) -//go:generate go run github.com/fjl/gencodec -type account -field-override accountMarshaling -out gen_account_json.go +//go:generate gencodec -type account -field-override accountMarshaling -out gen_account_json.go func init() { register("prestateTracer", newPrestateTracer) diff --git a/ethdb/Readme.md b/ethdb/Readme.md index 4624a6d658a..9bb3d33d5d2 100644 --- a/ethdb/Readme.md +++ b/ethdb/Readme.md @@ -25,7 +25,7 @@ About "key-value-style": Modern key-value databases don't provide Get/Put/Delete v v +-----------------------------------+ +-----------------------------------+ | ethdb/kv_mdbx.go | | ethdb/kv_remote.go | - | (tg-specific MDBX implementaion) | | (tg-specific remote DB access) | + | (tg-specific MDBX implementation) | | (tg-specific remote DB access) | +-----------------------------------+ +-----------------------------------+ | | | | @@ -35,7 +35,7 @@ About "key-value-style": Modern key-value databases don't provide Get/Put/Delete | (Common KV interface. DB-friendly, disk-friendly, cpu-cache-friendly. | | Same app code can work with local or remote database. | | Allows experiment with another database implementations. | - | Supports context.Context for cancelation. Any operation can return error) | + | Supports context.Context for cancellation. Any operation can return error) | +----------------------------------------------------------------------------------------------+ | | | | | | diff --git a/ethdb/prune/storage_mode.go b/ethdb/prune/storage_mode.go index cde01f6cdac..c1fc3be5242 100644 --- a/ethdb/prune/storage_mode.go +++ b/ethdb/prune/storage_mode.go @@ -23,14 +23,6 @@ var DefaultMode = Mode{ Experiments: Experiments{}, // all off } -var ( - mainnetDepositContractBlock uint64 = 11052984 - sepoliaDepositContractBlock uint64 = 1273020 - goerliDepositContractBlock uint64 = 4367322 - gnosisDepositContractBlock uint64 = 19475089 - chiadoDepositContractBlock uint64 = 155530 -) - type Experiments struct { } @@ -55,8 +47,6 @@ func FromCli(chainId uint64, flags string, exactHistory, exactReceipts, exactTxI } } - pruneBlockBefore := pruneBlockDefault(chainId) - if exactHistory > 0 { mode.History = Distance(exactHistory) } @@ -74,16 +64,7 @@ func FromCli(chainId uint64, flags string, exactHistory, exactReceipts, exactTxI mode.History = Before(beforeH) } if beforeR > 0 { - if pruneBlockBefore != 0 { - log.Warn("specifying prune.before.r might break CL compatibility") - if beforeR > pruneBlockBefore { - log.Warn("the specified prune.before.r block number is higher than the deposit contract contract block number", "highest block number", pruneBlockBefore) - } - } mode.Receipts = Before(beforeR) - } else if exactReceipts == 0 && mode.Receipts.Enabled() && pruneBlockBefore != 0 { - // Default --prune=r to pruning receipts before the Beacon Chain genesis - mode.Receipts = Before(pruneBlockBefore) } if beforeT > 0 { mode.TxIndex = Before(beforeT) @@ -103,23 +84,6 @@ func FromCli(chainId uint64, flags string, exactHistory, exactReceipts, exactTxI return mode, nil } -func pruneBlockDefault(chainId uint64) uint64 { - switch chainId { - case 1 /* mainnet */ : - return mainnetDepositContractBlock - case 11155111 /* sepolia */ : - return sepoliaDepositContractBlock - case 5 /* goerli */ : - return goerliDepositContractBlock - case 10200 /* chiado */ : - return chiadoDepositContractBlock - case 100 /* gnosis */ : - return gnosisDepositContractBlock - } - - return 0 -} - func Get(db kv.Getter) (Mode, error) { prune := DefaultMode prune.Initialised = true @@ -296,6 +260,11 @@ func EnsureNotChanged(tx kv.GetPut, pruneMode Mode) (Mode, error) { } if pruneMode.Initialised { + // Don't change from previous default as default for Receipts pruning has now changed + if pruneMode.Receipts.useDefaultValue() { + pruneMode.Receipts = pm.Receipts + } + // If storage mode is not explicitly specified, we take whatever is in the database if !reflect.DeepEqual(pm, pruneMode) { if bytes.Equal(pm.Receipts.dbType(), kv.PruneTypeOlder) && bytes.Equal(pruneMode.Receipts.dbType(), kv.PruneTypeBefore) { diff --git a/ethstats/ethstats.go b/ethstats/ethstats.go index a2556f9b551..42914e3dda3 100644 --- a/ethstats/ethstats.go +++ b/ethstats/ethstats.go @@ -22,6 +22,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "math/big" "net/http" "regexp" @@ -70,6 +71,7 @@ type Service struct { histCh chan []uint64 // History request block numbers are fed into this channel blockReader services.FullBlockReader + txPool txpool.TxpoolClient } // connWrapper is a wrapper to prevent concurrent-write or concurrent-read on the @@ -122,7 +124,8 @@ func (w *connWrapper) Close() error { } // New returns a monitoring service ready for stats reporting. -func New(node *node.Node, servers []*sentry.GrpcServer, chainDB kv.RoDB, blockReader services.FullBlockReader, engine consensus.Engine, url string, networkid uint64, quitCh <-chan struct{}, headCh chan [][]byte) error { +func New(node *node.Node, servers []*sentry.GrpcServer, chainDB kv.RoDB, blockReader services.FullBlockReader, + engine consensus.Engine, url string, networkid uint64, quitCh <-chan struct{}, headCh chan [][]byte, txPoolRpcClient txpool.TxpoolClient) error { // Parse the netstats connection url re := regexp.MustCompile("([^:@]*)(:([^@]*))?@(.+)") parts := re.FindStringSubmatch(url) @@ -142,6 +145,7 @@ func New(node *node.Node, servers []*sentry.GrpcServer, chainDB kv.RoDB, blockRe chaindb: chainDB, headCh: headCh, quitCh: quitCh, + txPool: txPoolRpcClient, } node.RegisterLifecycle(ethstats) @@ -635,25 +639,31 @@ func (s *Service) reportHistory(conn *connWrapper, list []uint64) error { return conn.WriteJSON(report) } +// pendStats is the information to report about pending transactions. +type pendStats struct { + Pending int `json:"pending"` +} + // reportPending retrieves the current number of pending transactions and reports // it to the stats server. func (s *Service) reportPending(conn *connWrapper) error { - /* // Retrieve the pending count from the local blockchain - pending, _ := s.backend.Stats() - // Assemble the transaction stats and send it to the server - log.Trace("Sending pending transactions to ethstats", "count", pending) - - stats := map[string]interface{}{ - "id": s.node, - "stats": &pendStats{ - Pending: pending, - }, - } - report := map[string][]interface{}{ - "emit": {"pending", stats}, - } - return conn.WriteJSON(report)*/ - return nil + in := new(txpool.StatusRequest) + status, err := s.txPool.Status(context.Background(), in) + if err != nil { + return err + } + log.Trace("Sending pending transactions to ethstats", "count", status.PendingCount) + + stats := map[string]interface{}{ + "id": s.node, + "stats": &pendStats{ + Pending: int(status.PendingCount), + }, + } + report := map[string][]interface{}{ + "emit": {"pending", stats}, + } + return conn.WriteJSON(report) } // nodeStats is the information to report about the local node. diff --git a/go.mod b/go.mod index 77441e2786a..ba991657a11 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,8 @@ module github.com/ledgerwatch/erigon go 1.21 require ( - github.com/erigontech/mdbx-go v0.27.21 - github.com/erigontech/silkworm-go v0.10.0 + github.com/erigontech/mdbx-go v0.27.24 + github.com/erigontech/silkworm-go v0.18.0 github.com/ledgerwatch/log/v3 v3.9.0 github.com/ledgerwatch/secp256k1 v1.0.0 ) @@ -12,54 +12,57 @@ require ( require ( gfx.cafe/util/go/generic v0.0.0-20230721185457-c559e86c829c github.com/99designs/gqlgen v0.17.40 - github.com/Giulio2002/bls v0.0.0-20230906201036-c2330c97dc7d + github.com/Giulio2002/bls v0.0.0-20240315151443-652e18a3d188 github.com/Masterminds/sprig/v3 v3.2.3 github.com/RoaringBitmap/roaring v1.2.3 github.com/VictoriaMetrics/fastcache v1.12.2 - github.com/alecthomas/kong v0.8.0 - github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4 - github.com/anacrolix/sync v0.4.0 + github.com/alecthomas/atomic v0.1.0-alpha2 + github.com/alecthomas/kong v0.8.1 + github.com/anacrolix/log v0.15.2 + github.com/anacrolix/sync v0.5.1 github.com/anacrolix/torrent v1.52.6-0.20231201115409-7ea994b6bbd8 github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b - github.com/btcsuite/btcd/btcec/v2 v2.2.0 - github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b + github.com/btcsuite/btcd/btcec/v2 v2.1.3 + github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 + github.com/cenkalti/backoff/v4 v4.2.1 github.com/consensys/gnark-crypto v0.12.1 github.com/crate-crypto/go-ipa v0.0.0-20221111143132-9aa5d42120bc github.com/crate-crypto/go-kzg-4844 v0.7.0 github.com/davecgh/go-spew v1.1.1 github.com/deckarep/golang-set v1.8.0 github.com/deckarep/golang-set/v2 v2.3.1 - github.com/docker/docker v1.6.2 + github.com/docker/docker v26.1.0+incompatible github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf github.com/edsrzf/mmap-go v1.1.0 - github.com/emicklei/dot v1.6.0 + github.com/emicklei/dot v1.6.1 github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20240315155522-09647974da0d github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c github.com/gballet/go-verkle v0.0.0-20221121182333-31427a1f2d35 github.com/gfx-labs/sse v0.0.0-20231226060816-f747e26a9baa - github.com/go-chi/chi/v5 v5.0.11 + github.com/go-chi/chi/v5 v5.0.12 github.com/go-chi/cors v1.2.1 github.com/goccy/go-json v0.9.11 github.com/gofrs/flock v0.8.1 github.com/golang-jwt/jwt/v4 v4.5.0 - github.com/golang/mock v1.6.0 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb github.com/google/btree v1.1.2 github.com/google/cel-go v0.18.2 github.com/google/gofuzz v1.2.0 + github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.1 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/hashicorp/golang-lru/arc/v2 v2.0.6 - github.com/hashicorp/golang-lru/v2 v2.0.6 - github.com/holiman/uint256 v1.2.3 + github.com/hashicorp/golang-lru/v2 v2.0.7 + github.com/holiman/uint256 v1.2.4 github.com/huandu/xstrings v1.4.0 github.com/huin/goupnp v1.2.0 github.com/jackpal/go-nat-pmp v1.0.2 - github.com/jedib0t/go-pretty/v6 v6.4.7 + github.com/jedib0t/go-pretty/v6 v6.5.9 github.com/json-iterator/go v1.1.12 github.com/julienschmidt/httprouter v1.3.0 github.com/klauspost/compress v1.17.3 github.com/ledgerwatch/erigon-lib v1.0.0 + github.com/ledgerwatch/erigonwatch v0.1.2 github.com/libp2p/go-libp2p v0.31.0 github.com/libp2p/go-libp2p-mplex v0.9.0 github.com/libp2p/go-libp2p-pubsub v0.9.3 @@ -67,53 +70,61 @@ require ( github.com/multiformats/go-multiaddr v0.12.1 github.com/nxadm/tail v1.4.9-0.20211216163028-4472660a31a6 github.com/pelletier/go-toml v1.9.5 - github.com/pelletier/go-toml/v2 v2.1.0 + github.com/pelletier/go-toml/v2 v2.2.1 github.com/pion/randutil v0.1.0 - github.com/pion/stun v0.6.0 + github.com/pion/stun v0.3.5 + github.com/pkg/errors v0.9.1 github.com/protolambda/ztyp v0.2.2 github.com/prysmaticlabs/go-bitfield v0.0.0-20210809151128-385d8c5e3fb7 github.com/prysmaticlabs/gohashtree v0.0.3-alpha.0.20230502123415-aafd8b3ca202 github.com/quasilyte/go-ruleguard/dsl v0.3.22 - github.com/rs/cors v1.10.1 + github.com/rs/cors v1.11.0 github.com/spf13/afero v1.9.5 - github.com/spf13/cobra v1.7.0 + github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e github.com/tidwall/btree v1.6.0 - github.com/ugorji/go/codec v1.2.12 - github.com/ugorji/go/codec/codecgen v1.2.12 - github.com/urfave/cli/v2 v2.27.1 + github.com/ugorji/go/codec v1.1.13 + github.com/ugorji/go/codec/codecgen v1.1.13 + github.com/urfave/cli/v2 v2.27.2 github.com/valyala/fastjson v1.6.4 github.com/vektah/gqlparser/v2 v2.5.10 github.com/xsleonard/go-merkle v1.1.0 - go.uber.org/zap v1.26.0 - golang.org/x/crypto v0.18.0 - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa - golang.org/x/net v0.19.0 - golang.org/x/sync v0.6.0 - golang.org/x/sys v0.16.0 + go.uber.org/mock v0.4.0 + go.uber.org/zap v1.27.0 + golang.org/x/crypto v0.22.0 + golang.org/x/exp v0.0.0-20231226003508-02704c960a9b + golang.org/x/net v0.24.0 + golang.org/x/sync v0.7.0 + golang.org/x/sys v0.19.0 golang.org/x/time v0.5.0 - google.golang.org/grpc v1.60.1 + google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.32.0 + google.golang.org/protobuf v1.33.0 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 - modernc.org/sqlite v1.28.0 + modernc.org/sqlite v1.29.8 pgregory.net/rapid v1.1.0 sigs.k8s.io/yaml v1.4.0 ) +require ( + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/tklauser/go-sysconf v0.3.14 // indirect + github.com/tklauser/numcpus v0.8.0 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect +) + require ( github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.0 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0 // indirect - github.com/alecthomas/atomic v0.1.0-alpha2 // indirect github.com/anacrolix/chansync v0.3.0 // indirect - github.com/anacrolix/dht/v2 v2.20.0 // indirect + github.com/anacrolix/dht/v2 v2.21.1 // indirect github.com/anacrolix/envpprof v1.3.0 // indirect github.com/anacrolix/generics v0.0.0-20230816105729-c755655aee45 // indirect github.com/anacrolix/go-libutp v1.3.1 // indirect @@ -126,37 +137,21 @@ require ( github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 // indirect github.com/anacrolix/utp v0.1.0 // indirect github.com/antlr4-go/antlr/v4 v4.13.0 // indirect - github.com/aws/aws-sdk-go-v2 v1.21.2 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 // indirect - github.com/aws/aws-sdk-go-v2/config v1.19.0 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.43 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 // indirect - github.com/aws/smithy-go v1.15.0 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/benbjohnson/immutable v0.4.1-0.20221220213129-8932b999621d // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.7.0 // indirect + github.com/bits-and-blooms/bitset v1.12.0 // indirect github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect + github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cilium/ebpf v0.9.1 // indirect + github.com/cilium/ebpf v0.11.0 // indirect github.com/consensys/bavard v0.1.13 // indirect github.com/containerd/cgroups v1.1.0 // indirect - github.com/containerd/cgroups/v3 v3.0.2 // indirect + github.com/containerd/cgroups/v3 v3.0.3 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect @@ -167,8 +162,8 @@ require ( github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/garslo/gogen v0.0.0-20170307003452-d6ebae628c7c // indirect - github.com/go-llsqlite/adapter v0.0.0-20230912124304-94ed0e573c23 // indirect - github.com/go-llsqlite/crawshaw v0.0.0-20230910110433-7e901377eb6c // indirect + github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 // indirect + github.com/go-llsqlite/crawshaw v0.4.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect @@ -176,23 +171,20 @@ require ( github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/mock v1.6.0 // indirect github.com/google/gopacket v1.1.19 // indirect - github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd // indirect github.com/ianlancetaylor/cgosymbolizer v0.0.0-20220405231054-a1ae3e4bba26 // indirect github.com/imdario/mergo v0.3.11 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect - github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/koron/go-ssdp v0.0.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect - github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240115083615-b5feeb63e191 // indirect + github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240619030755-1e16b374e6cb // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect github.com/libp2p/go-flow-metrics v0.1.0 // indirect @@ -203,11 +195,11 @@ require ( github.com/libp2p/go-netroute v0.2.1 // indirect github.com/libp2p/go-reuseport v0.4.0 // indirect github.com/libp2p/go-yamux/v4 v4.0.1 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/miekg/dns v1.1.55 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect @@ -229,11 +221,12 @@ require ( github.com/multiformats/go-multihash v0.2.3 // indirect github.com/multiformats/go-multistream v0.4.1 // indirect github.com/multiformats/go-varint v0.0.7 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect github.com/onsi/ginkgo/v2 v2.11.0 // indirect - github.com/opencontainers/runtime-spec v1.1.0 // indirect + github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pion/datachannel v1.5.2 // indirect - github.com/pion/dtls/v2 v2.2.7 // indirect + github.com/pion/dtls/v2 v2.2.4 // indirect github.com/pion/ice/v2 v2.2.6 // indirect github.com/pion/interceptor v0.1.11 // indirect github.com/pion/logging v0.2.2 // indirect @@ -244,14 +237,15 @@ require ( github.com/pion/sdp/v3 v3.0.5 // indirect github.com/pion/srtp/v2 v2.0.9 // indirect github.com/pion/transport v0.13.1 // indirect - github.com/pion/transport/v2 v2.2.1 // indirect + github.com/pion/transport/v2 v2.0.0 // indirect github.com/pion/turn/v2 v2.0.8 // indirect + github.com/pion/udp v0.1.4 // indirect github.com/pion/webrtc/v3 v3.1.42 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.18.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/prometheus/client_golang v1.19.0 // indirect + 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/quic-go/qpack v0.4.0 // indirect github.com/quic-go/qtls-go1-20 v0.3.3 // indirect @@ -263,43 +257,44 @@ require ( github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/shirou/gopsutil/v3 v3.24.3 // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/shopspring/decimal v1.2.0 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/showwin/speedtest-go v1.7.7 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/sosodev/duration v1.1.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/cast v1.3.1 // indirect github.com/stoewer/go-strcase v1.2.0 // indirect github.com/supranational/blst v0.3.11 // indirect - github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect go.etcd.io/bbolt v1.3.6 // indirect go.opentelemetry.io/otel v1.8.0 // indirect go.opentelemetry.io/otel/trace v1.8.0 // indirect go.uber.org/dig v1.17.0 // indirect go.uber.org/fx v1.20.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/mod v0.14.0 // indirect + golang.org/x/mod v0.17.0 // indirect golang.org/x/text v0.14.0 // indirect - golang.org/x/tools v0.16.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect + golang.org/x/tools v0.20.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + gotest.tools/v3 v3.5.1 // indirect lukechampine.com/blake3 v1.2.1 // indirect - lukechampine.com/uint128 v1.3.0 // indirect - modernc.org/cc/v3 v3.41.0 // indirect - modernc.org/ccgo/v3 v3.16.15 // indirect - modernc.org/libc v1.29.0 // indirect + modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect + modernc.org/libc v1.50.4 // indirect modernc.org/mathutil v1.6.0 // indirect - modernc.org/memory v1.7.2 // indirect - modernc.org/opt v0.1.3 // indirect + modernc.org/memory v1.8.0 // indirect modernc.org/strutil v1.2.0 // indirect modernc.org/token v1.1.0 // indirect rsc.io/tmplfunc v0.0.3 // indirect zombiezen.com/go/sqlite v0.13.1 // indirect ) -replace github.com/ledgerwatch/erigon-lib => ./erigon-lib +replace github.com/anacrolix/torrent => github.com/erigontech/torrent v1.54.2-alpha-8 -replace github.com/tendermint/tendermint => github.com/bnb-chain/tendermint v0.31.12 +replace github.com/ledgerwatch/erigon-lib => ./erigon-lib replace github.com/ethereum-optimism/superchain-registry/superchain => github.com/bobanetwork/superchain-registry/superchain v0.0.0-20240709155336-a98d1dc97fa3 diff --git a/go.sum b/go.sum index 294ff7623ed..6aaed6efcd1 100644 --- a/go.sum +++ b/go.sum @@ -37,7 +37,6 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797 h1:yDf7ARQc637HoxDho7xjqdvO5ZA2Yb+xzv/fOnnvZzw= crawshaw.io/iox v0.0.0-20181124134642-c51c3df30797/go.mod h1:sXBiorCo8c46JlQV3oXPKINnZ8mcqnye1EkVkqsectk= crawshaw.io/sqlite v0.3.2/go.mod h1:igAO5JulrQ1DbdZdtVq48mnZUBAPOeFzer7VhDWNtW4= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= @@ -54,14 +53,16 @@ github.com/99designs/gqlgen v0.17.40 h1:/l8JcEVQ93wqIfmH9VS1jsAkwm6eAF1NwQn3N+SD github.com/99designs/gqlgen v0.17.40/go.mod h1:b62q1USk82GYIVjC60h02YguAZLqYZtvWml8KkhJps4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Giulio2002/bls v0.0.0-20230906201036-c2330c97dc7d h1:fAztVLpjcVcd2al4GL8xYr9Yp7LmXXSTuLqu83U8hKo= -github.com/Giulio2002/bls v0.0.0-20230906201036-c2330c97dc7d/go.mod h1:nCQrFU6/QsJtLS+SBLWRn9UG2nds1f3hQKfWHCrtUqw= +github.com/Giulio2002/bls v0.0.0-20240315151443-652e18a3d188 h1:X+7WswmEBD7DVOlAIXQiU4hok5pPcXFM7JgULHHdD/4= +github.com/Giulio2002/bls v0.0.0-20240315151443-652e18a3d188/go.mod h1:nCQrFU6/QsJtLS+SBLWRn9UG2nds1f3hQKfWHCrtUqw= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= github.com/RoaringBitmap/roaring v0.4.17/go.mod h1:D3qVegWTmfCaX4Bl5CrBE9hfrSrrXIr8KVNvRsDi1NI= github.com/RoaringBitmap/roaring v0.4.23/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo= @@ -75,12 +76,12 @@ github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRB github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0 h1:byYvvbfSo3+9efR4IeReh77gVs4PnNDR3AMOE9NJ7a0= github.com/ajwerner/btree v0.0.0-20211221152037-f427b3e689c0/go.mod h1:q37NoqncT41qKc048STsifIt69LfUJ8SrWWcz/yam5k= -github.com/alecthomas/assert/v2 v2.1.0 h1:tbredtNcQnoSd3QBhQWI7QZ3XHOVkw1Moklp2ojoH/0= -github.com/alecthomas/assert/v2 v2.1.0/go.mod h1:b/+1DI2Q6NckYi+3mXyH3wFb8qG37K/DuK80n7WefXA= +github.com/alecthomas/assert/v2 v2.8.1 h1:YCxnYR6jjpfnEK5AK5SysALKdUEBPGH4Y7As6tBnDw0= +github.com/alecthomas/assert/v2 v2.8.1/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/atomic v0.1.0-alpha2 h1:dqwXmax66gXvHhsOS4pGPZKqYOlTkapELkLb3MNdlH8= github.com/alecthomas/atomic v0.1.0-alpha2/go.mod h1:zD6QGEyw49HIq19caJDc2NMXAy8rNi9ROrxtMXATfyI= -github.com/alecthomas/kong v0.8.0 h1:ryDCzutfIqJPnNn0omnrgHLbAggDQM2VWHikE1xqK7s= -github.com/alecthomas/kong v0.8.0/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U= +github.com/alecthomas/kong v0.8.1 h1:acZdn3m4lLRobeh3Zi2S2EpnXTd1mOL6U7xVml+vfkY= +github.com/alecthomas/kong v0.8.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U= github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE= github.com/alecthomas/repr v0.1.0/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -91,8 +92,8 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/anacrolix/chansync v0.3.0 h1:lRu9tbeuw3wl+PhMu/r+JJCRu5ArFXIluOgdF0ao6/U= github.com/anacrolix/chansync v0.3.0/go.mod h1:DZsatdsdXxD0WiwcGl0nJVwyjCKMDv+knl1q2iBjA2k= -github.com/anacrolix/dht/v2 v2.20.0 h1:eDx9lfE9iCSf5sPK0290GToHURNhEFuUGN8iyvhvJDk= -github.com/anacrolix/dht/v2 v2.20.0/go.mod h1:SDGC+sEs1pnO2sJGYuhvIis7T8749dDHNfcjtdH4e3g= +github.com/anacrolix/dht/v2 v2.21.1 h1:s1rKkfLLcmBHKv4v/mtMkIeHIEptzEFiB6xVu54+5/o= +github.com/anacrolix/dht/v2 v2.21.1/go.mod h1:SDGC+sEs1pnO2sJGYuhvIis7T8749dDHNfcjtdH4e3g= github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= github.com/anacrolix/envpprof v1.0.0/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= github.com/anacrolix/envpprof v1.1.0/go.mod h1:My7T5oSqVfEn4MD4Meczkw/f5lSIndGAKu/0SM/rkf4= @@ -106,8 +107,8 @@ github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgw github.com/anacrolix/log v0.6.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU= github.com/anacrolix/log v0.10.1-0.20220123034749-3920702c17f8/go.mod h1:GmnE2c0nvz8pOIPUSC9Rawgefy1sDXqposC2wgtBZE4= github.com/anacrolix/log v0.13.1/go.mod h1:D4+CvN8SnruK6zIFS/xPoRJmtvtnxs+CSfDQ+BFxZ68= -github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4 h1:01OE3pdiBGIZGyQb6cIAu+QfaNhBR9k5MVmLsl+DVbE= -github.com/anacrolix/log v0.14.3-0.20230823030427-4b296d71a6b4/go.mod h1:1OmJESOtxQGNMlUO5rcv96Vpp9mfMqXXbe2RdinFLdY= +github.com/anacrolix/log v0.15.2 h1:LTSf5Wm6Q4GNWPFMBP7NPYV6UBVZzZLKckL+/Lj72Oo= +github.com/anacrolix/log v0.15.2/go.mod h1:m0poRtlr41mriZlXBQ9SOVZ8yZBkLjOkDhd5Li5pITA= github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62 h1:P04VG6Td13FHMgS5ZBcJX23NPC/fiC4cp9bXwYujdYM= github.com/anacrolix/lsan v0.0.0-20211126052245-807000409a62/go.mod h1:66cFKPCO7Sl4vbFnAaSq7e4OXtdMhRSBagJGWgmpJbM= github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s= @@ -133,13 +134,11 @@ github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496 h1:aMiRi2kOOd+nG64 github.com/anacrolix/stm v0.4.1-0.20221221005312-96d17df0e496/go.mod h1:DBm8/1OXm4A4RZ6Xa9u/eOsjeAXCaoRYvd2JzlskXeM= github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778/go.mod h1:s735Etp3joe/voe2sdaXLcqDdJSay1O0OPnM0ystjqk= github.com/anacrolix/sync v0.3.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g= -github.com/anacrolix/sync v0.4.0 h1:T+MdO/u87ir/ijWsTFsPYw5jVm0SMm4kVpg8t4KF38o= -github.com/anacrolix/sync v0.4.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g= +github.com/anacrolix/sync v0.5.1 h1:FbGju6GqSjzVoTgcXTUKkF041lnZkG5P0C3T5RL3SGc= +github.com/anacrolix/sync v0.5.1/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g= github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= github.com/anacrolix/tagflag v1.0.0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= github.com/anacrolix/tagflag v1.1.0/go.mod h1:Scxs9CV10NQatSmbyjqmqmeQNwGzlNe0CMUMIxqHIG8= -github.com/anacrolix/torrent v1.52.6-0.20231201115409-7ea994b6bbd8 h1:6EyYT2DsEOZ/WwTDsQ0HXHI996IdT0MZCGP2L6xvfNg= -github.com/anacrolix/torrent v1.52.6-0.20231201115409-7ea994b6bbd8/go.mod h1:Ma/WtLey9lU97u2i55LUJ8AnXaL2GfEK6pWh7/9v1hI= github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 h1:QAVZ3pN/J4/UziniAhJR2OZ9Ox5kOY2053tBbbqUPYA= github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96/go.mod h1:Wa6n8cYIdaG35x15aH3Zy6d03f7P728QfdcDeD/IEOs= github.com/anacrolix/utp v0.1.0 h1:FOpQOmIwYsnENnz7tAGohA+r6iXpRjrq8ssKSre2Cp4= @@ -152,42 +151,6 @@ github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9 github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= -github.com/aws/aws-sdk-go-v2 v1.21.2 h1:+LXZ0sgo8quN9UOKXXzAWRT3FWd4NxeXWOZom9pE7GA= -github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 h1:Sc82v7tDQ/vdU1WtuSyzZ1I7y/68j//HJ6uozND1IDs= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14/go.mod h1:9NCTOURS8OpxvoAVHq79LK81/zC78hfRWFn+aL0SPcY= -github.com/aws/aws-sdk-go-v2/config v1.19.0 h1:AdzDvwH6dWuVARCl3RTLGRc4Ogy+N7yLFxVxXe1ClQ0= -github.com/aws/aws-sdk-go-v2/config v1.19.0/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= -github.com/aws/aws-sdk-go-v2/credentials v1.13.43 h1:LU8vo40zBlo3R7bAvBVy/ku4nxGEyZe9N8MqAeFTzF8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 h1:PIktER+hwIG286DqXyvVENjgLTAwGgoeriLDD5C+YlQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 h1:nFBQlGtkbPzp/NjZLuFxRqmT91rLJkgvsEQs68h962Y= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 h1:JRVhO25+r3ar2mKGP7E0LDl8K9/G36gjlqca5iQbaqc= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 h1:hze8YsjSh8Wl1rYa1CJpRmXP21BvOBuc76YhW0HsuQ4= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6 h1:wmGLw2i8ZTlHLw7a9ULGfQbuccw8uIiNr6sol5bFzc8= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6/go.mod h1:Q0Hq2X/NuL7z8b1Dww8rmOFl+jzusKEcyvkKspwdpyc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 h1:7R8uRYyXzdD71KWVCL78lJZltah6VVznXBazvKjfH58= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15/go.mod h1:26SQUPcTNgV1Tapwdt4a1rOsYRsnBsJHLMPoxK2b0d8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38 h1:skaFGzv+3kA+v2BPKhuekeb1Hbb105+44r8ASC+q5SE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38/go.mod h1:epIZoRSSbRIwLPJU5F+OldHhwZPBdpDeQkRdCeY3+00= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 h1:WWZA/I2K4ptBS1kg0kV1JbBtG/umed0vwHRrmcr9z7k= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6 h1:9ulSU5ClouoPIYhDQdg9tpl83d5Yb91PXTKK+17q+ow= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6/go.mod h1:lnc2taBsR9nTlz9meD+lhFZZ9EWY712QHrRflWpTcOA= -github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2 h1:Ll5/YVCOzRB+gxPqs2uD0R7/MyATC0w85626glSKmp4= -github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2/go.mod h1:Zjfqt7KhQK+PO1bbOsFNzKgaq7TcxzmEoDWN8lM0qzQ= -github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 h1:JuPGc7IkOP4AaqcZSIcyqLpFSqBWK32rM9+a1g6u73k= -github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 h1:HFiiRkf1SdaAmV3/BHOFZ9DjFynPHj8G/UIO1lQS+fk= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= -github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 h1:0BkLfgeDjfZnZ+MhB3ONb01u9pwFYTCZVhlsSSBvlbU= -github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= -github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8= -github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -204,8 +167,8 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= -github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bits-and-blooms/bitset v1.12.0 h1:U/q1fAF7xXRhFCrhROzIfffYnu+dlS38vCZtmFVPHmA= +github.com/bits-and-blooms/bitset v1.12.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bobanetwork/superchain-registry/superchain v0.0.0-20240709155336-a98d1dc97fa3 h1:rl/ml7j466rE57UfkZvaqbeKwYugdyN2osYQabXlbxo= github.com/bobanetwork/superchain-registry/superchain v0.0.0-20240709155336-a98d1dc97fa3/go.mod h1:7xh2awFQqsiZxFrHKTgEd+InVfDRrkKVUIuK8SAFHp0= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= @@ -213,14 +176,18 @@ github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2w github.com/bradfitz/iter v0.0.0-20190303215204-33e6a9893b0c/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo= github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 h1:GKTyiRCL6zVf5wWaqKnf+7Qs6GbEPfd4iMOitWzXJx8= github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8/go.mod h1:spo1JLcs67NmW1aVLEgtA8Yy1elc+X8y5SRW1sFW4Og= -github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= -github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= +github.com/btcsuite/btcd/btcec/v2 v2.1.3 h1:xM/n3yIhHAhHy04z4i43C8p4ehixJZMsnrVJkgl+MTE= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY= -github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= +github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 h1:6lhrsTEnloDPXyeZBvSYvQf8u86jbKehZPVDDlkgDl4= +github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +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= @@ -228,8 +195,8 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.9.1 h1:64sn2K3UKw8NbP/blsixRpF3nXuyhz/VjRlRzvlBRu4= -github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY= +github.com/cilium/ebpf v0.11.0 h1:V8gS/bTCCjX9uUnkUFUpPsksM8n1lXBAvHcpiFk1X2Y= +github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -241,16 +208,17 @@ github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5U github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0= -github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE= +github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= +github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 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.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +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-20221111143132-9aa5d42120bc h1:mtR7MuscVeP/s0/ERWA2uSr5QOrRYy1pdvZqG1USfXI= github.com/crate-crypto/go-ipa v0.0.0-20221111143132-9aa5d42120bc/go.mod h1:gFnFS95y8HstDP6P9pPwzrxOOC5TRDkwbM+ao15ChAI= github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= @@ -273,8 +241,8 @@ github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+ github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/docker/docker v1.6.2 h1:HlFGsy+9/xrgMmhmN+NGhCc5SHGJ7I+kHosRR1xc/aI= -github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v26.1.0+incompatible h1:W1G9MPNbskA6VZWL7b3ZljTh0pXI68FpINx0GKaOdaM= +github.com/docker/docker v26.1.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= 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= @@ -294,18 +262,20 @@ github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8E github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/emicklei/dot v1.6.0 h1:vUzuoVE8ipzS7QkES4UfxdpCwdU2U97m2Pb2tQCoYRY= -github.com/emicklei/dot v1.6.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +github.com/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI= +github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/erigontech/mdbx-go v0.27.21 h1:Pv47QIiRXR8Nv+nltZteLm4xkRwuvqmOCjzZj9X0s1A= -github.com/erigontech/mdbx-go v0.27.21/go.mod h1:FAMxbOgqOnRDx51j8HjuJZIgznbDwjX7LItd+/UWyA4= -github.com/erigontech/silkworm-go v0.10.0 h1:oAoptLtJbQXk63mrKYs6qliQlbDrXTSNiZfzv1OMp+Q= -github.com/erigontech/silkworm-go v0.10.0/go.mod h1:O50ux0apICEVEGyRWiE488K8qz8lc3PA/SXbQQAc8SU= +github.com/erigontech/mdbx-go v0.27.24 h1:jNsRE/4jC1F3S5SpAbmgT5jrEkfrdFk2MKEL9toVPxo= +github.com/erigontech/mdbx-go v0.27.24/go.mod h1:FAMxbOgqOnRDx51j8HjuJZIgznbDwjX7LItd+/UWyA4= +github.com/erigontech/silkworm-go v0.18.0 h1:j56p61xZHBFhZGH1OixlGU8KcfjHzcw9pjAfjmVsOZA= +github.com/erigontech/silkworm-go v0.18.0/go.mod h1:O50ux0apICEVEGyRWiE488K8qz8lc3PA/SXbQQAc8SU= +github.com/erigontech/torrent v1.54.2-alpha-8 h1:MQobu6sUZCFbmWpsB7GqAh0IWs7VAZ370POaVxlApIk= +github.com/erigontech/torrent v1.54.2-alpha-8/go.mod h1:nYNeuR4xPlEl4CturFD9/KRXBRJEcJGqjegDNWakwG4= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= @@ -335,8 +305,8 @@ github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a/go.mod github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/glycerine/goconvey v0.0.0-20190315024820-982ee783a72e/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA= -github.com/go-chi/chi/v5 v5.0.11/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s= +github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4= github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= @@ -346,10 +316,10 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-llsqlite/adapter v0.0.0-20230912124304-94ed0e573c23 h1:7krbnPREaxbmEaAkZovTNCMjmiZXEy/Gz9isFbqFK0I= -github.com/go-llsqlite/adapter v0.0.0-20230912124304-94ed0e573c23/go.mod h1:DADrR88ONKPPeSGjFp5iEN55Arx3fi2qXZeKCYDpbmU= -github.com/go-llsqlite/crawshaw v0.0.0-20230910110433-7e901377eb6c h1:pm7z8uwA2q3s8fAsJmKuGckNohqIrw2PRtv6yJ6z0Ro= -github.com/go-llsqlite/crawshaw v0.0.0-20230910110433-7e901377eb6c/go.mod h1:UdTSzmN3nr5dJNuZCsbPLfhSQB76u16rWh8pn+WFx9Q= +github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916 h1:OyQmpAN302wAopDgwVjgs2HkFawP9ahIEqkUYz7V7CA= +github.com/go-llsqlite/adapter v0.0.0-20230927005056-7f5ce7f0c916/go.mod h1:DADrR88ONKPPeSGjFp5iEN55Arx3fi2qXZeKCYDpbmU= +github.com/go-llsqlite/crawshaw v0.4.0 h1:L02s2jZBBJj80xm1VkkdyB/JlQ/Fi0kLbNHfXA8yrec= +github.com/go-llsqlite/crawshaw v0.4.0/go.mod h1:/YJdV7uBQaYDE0fwe4z3wwJIZBJxdYzd38ICggWqtaE= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -358,6 +328,8 @@ github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -411,8 +383,8 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/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.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -435,9 +407,10 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -458,15 +431,15 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo= -github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= +github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -488,13 +461,13 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru/arc/v2 v2.0.6 h1:4NU7uP5vSoK6TbaMj3NtY478TTAWLso/vL1gpNrInHg= github.com/hashicorp/golang-lru/arc/v2 v2.0.6/go.mod h1:cfdDIX05DWvYV6/shsxDfa/OVcRieOt+q4FnM8x+Xno= -github.com/hashicorp/golang-lru/v2 v2.0.6 h1:3xi/Cafd1NaoEnS/yDssIiuVeDVywU0QdFGl3aQaQHM= -github.com/hashicorp/golang-lru/v2 v2.0.6/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= -github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= @@ -524,11 +497,9 @@ github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7Bd github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jedib0t/go-pretty/v6 v6.4.7 h1:lwiTJr1DEkAgzljsUsORmWsVn5MQjt1BPJdPCtJ6KXE= -github.com/jedib0t/go-pretty/v6 v6.4.7/go.mod h1:Ndk3ase2CkQbXLLNf5QDHoYb6J9WtVfmHZu9n8rk2xs= +github.com/jedib0t/go-pretty/v6 v6.5.9 h1:ACteMBRrrmm1gMsXe9PSTOClQ63IXDUt03H5U+UV8OU= +github.com/jedib0t/go-pretty/v6 v6.5.9/go.mod h1:zbn98qrYlh95FIhwwsbIip0LYpwSG8SUOScs+v9/t0E= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -540,15 +511,13 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= 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= github.com/klauspost/compress v1.17.3 h1:qkRjuerhUU1EmXLYGkSH6EZL+vPSxIrYjLNAK4slzwA= github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk= @@ -565,12 +534,14 @@ github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758 h1:0D5M2HQSGD3PYPwICLl+/9oulQauOuETfgFvhBDffs0= +github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240115083615-b5feeb63e191 h1:X/mHEyh0xEuhixj6hKCNQl04NuNDToYWJ08vr66e6L0= -github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240115083615-b5feeb63e191/go.mod h1:3AuPxZc85jkehh/HA9h8gabv5MSi3kb/ddtzBsTVJFo= +github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240619030755-1e16b374e6cb h1:aGbaiFpYmDfj+D0qJF+wJ9MbkftG0MbGNUwf6XClnFY= +github.com/ledgerwatch/erigon-snapshot v1.3.1-0.20240619030755-1e16b374e6cb/go.mod h1:3AuPxZc85jkehh/HA9h8gabv5MSi3kb/ddtzBsTVJFo= +github.com/ledgerwatch/erigonwatch v0.1.2 h1:/jq0r3oFh61pYk65Rw10aeCJj2Mzs1E2AG6TXG668og= +github.com/ledgerwatch/erigonwatch v0.1.2/go.mod h1:5K2cWaom0/rURye4dUUEQg2UyCH2A5zHVp86TDDMaA4= github.com/ledgerwatch/log/v3 v3.9.0 h1:iDwrXe0PVwBC68Dd94YSsHbMgQ3ufsgjzXtFNFVZFRk= github.com/ledgerwatch/log/v3 v3.9.0/go.mod h1:EiAY6upmI/6LkNhOVxb4eVsmsP11HZCnZ3PlJMjYiqE= github.com/ledgerwatch/secp256k1 v1.0.0 h1:Usvz87YoTG0uePIV8woOof5cQnLXGYa162rFf3YnwaQ= @@ -603,6 +574,8 @@ github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQsc github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= github.com/libp2p/go-yamux/v4 v4.0.1 h1:FfDR4S1wj6Bw2Pqbc8Uz7pCxeRBPbwsBbEdfwiCypkQ= github.com/libp2p/go-yamux/v4 v4.0.1/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= @@ -613,15 +586,14 @@ github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxec github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= -github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo= @@ -683,6 +655,8 @@ github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXS github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -704,8 +678,8 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg= -github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= +github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= @@ -713,16 +687,16 @@ github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2D github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pelletier/go-toml/v2 v2.2.1 h1:9TA9+T8+8CUCO2+WYnDLCgrYi9+omqKXyjDtosvtEhg= +github.com/pelletier/go-toml/v2 v2.2.1/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pion/datachannel v1.5.2 h1:piB93s8LGmbECrpO84DnkIVWasRMk3IimbcXkTQLE6E= github.com/pion/datachannel v1.5.2/go.mod h1:FTGQWaHrdCwIJ1rw6xBIfZVkslikjShim5yr05XFuCQ= github.com/pion/dtls/v2 v2.1.3/go.mod h1:o6+WvyLDAlXF7YiPB/RlskRoeK+/JtuaZa5emwQcWus= github.com/pion/dtls/v2 v2.1.5/go.mod h1:BqCE7xPZbPSubGasRoDFJeTsyJtdD1FanJYL0JGheqY= -github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8= -github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= +github.com/pion/dtls/v2 v2.2.4 h1:YSfYwDQgrxMYXLBc/m7PFY5BVtWlNm/DN4qoU2CbcWg= +github.com/pion/dtls/v2 v2.2.4/go.mod h1:WGKfxqhrddne4Kg3p11FUMJrynkOY4lb25zHNO49wuw= github.com/pion/ice/v2 v2.2.6 h1:R/vaLlI1J2gCx141L5PEwtuGAGcyS6e7E0hDeJFq5Ig= github.com/pion/ice/v2 v2.2.6/go.mod h1:SWuHiOGP17lGromHTFadUe1EuPgFh/oCU6FCMZHooVE= github.com/pion/interceptor v0.1.11 h1:00U6OlqxA3FFB50HSg25J/8cWi7P6FbSzw4eFn24Bvs= @@ -744,19 +718,20 @@ github.com/pion/sdp/v3 v3.0.5 h1:ouvI7IgGl+V4CrqskVtr3AaTrPvPisEOxwgpdktctkU= github.com/pion/sdp/v3 v3.0.5/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw= github.com/pion/srtp/v2 v2.0.9 h1:JJq3jClmDFBPX/F5roEb0U19jSU7eUhyDqR/NZ34EKQ= github.com/pion/srtp/v2 v2.0.9/go.mod h1:5TtM9yw6lsH0ppNCehB/EjEUli7VkUgKSPJqWVqbhQ4= +github.com/pion/stun v0.3.5 h1:uLUCBCkQby4S1cf6CGuR9QrVOKcvUwFeemaC865QHDg= github.com/pion/stun v0.3.5/go.mod h1:gDMim+47EeEtfWogA37n6qXZS88L5V6LqFcf+DZA2UA= -github.com/pion/stun v0.6.0 h1:JHT/2iyGDPrFWE8NNC15wnddBN8KifsEDw8swQmrEmU= -github.com/pion/stun v0.6.0/go.mod h1:HPqcfoeqQn9cuaet7AOmB5e5xkObu9DwBdurwLKO9oA= github.com/pion/transport v0.12.2/go.mod h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q= github.com/pion/transport v0.12.3/go.mod h1:OViWW9SP2peE/HbwBvARicmAVnesphkNkCVZIWJ6q9A= github.com/pion/transport v0.13.0/go.mod h1:yxm9uXpK9bpBBWkITk13cLo1y5/ur5VQpG22ny6EP7g= github.com/pion/transport v0.13.1 h1:/UH5yLeQtwm2VZIPjxwnNFxjS4DFhyLfS4GlfuKUzfA= github.com/pion/transport v0.13.1/go.mod h1:EBxbqzyv+ZrmDb82XswEE0BjfQFtuw1Nu6sjnjWCsGg= -github.com/pion/transport/v2 v2.2.1 h1:7qYnCBlpgSJNYMbLCKuSY9KbQdBFoETvPNETv0y4N7c= -github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= +github.com/pion/transport/v2 v2.0.0 h1:bsMYyqHCbkvHwj+eNCFBuxtlKndKfyGI2vaQmM3fIE4= +github.com/pion/transport/v2 v2.0.0/go.mod h1:HS2MEBJTwD+1ZI2eSXSvHJx/HnzQqRy2/LXxt6eVMHc= github.com/pion/turn/v2 v2.0.8 h1:KEstL92OUN3k5k8qxsXHpr7WWfrdp7iJZHx99ud8muw= github.com/pion/turn/v2 v2.0.8/go.mod h1:+y7xl719J8bAEVpSXBXvTxStjJv3hbz9YFflvkpcGPw= github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M= +github.com/pion/udp v0.1.4 h1:OowsTmu1Od3sD6i3fQUJxJn2fEvJO6L1TidgadtbTI8= +github.com/pion/udp v0.1.4/go.mod h1:G8LDo56HsFwC24LIcnT4YIDU5qcB6NepqqjP0keL2us= github.com/pion/webrtc/v3 v3.1.42 h1:wJEQFIXVanptnQcHOLTuIo4AtGB2+mG2x4OhIhnITOA= github.com/pion/webrtc/v3 v3.1.42/go.mod h1:ffD9DulDrPxyWvDPUIPAOSAWx9GUlOExiJPf7cCcMLA= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -764,30 +739,31 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= 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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= -github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= +github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -825,8 +801,8 @@ github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6po github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= -github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= +github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 h1:Lt9DzQALzHoDwMBGJ6v8ObDPR0dzr2a6sXTB1Fq7IHs= github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417/go.mod h1:qe5TWALJ8/a1Lqznoc5BDHpYX/8HU60Hm2AwRmqzxqA= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -839,8 +815,16 @@ github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZ github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE= +github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/showwin/speedtest-go v1.7.7 h1:VmK75SZOTKiuWjIVrs+mo7ZoKEw0utiGCvpnurS0olU= +github.com/showwin/speedtest-go v1.7.7/go.mod h1:uLgdWCNarXxlYsL2E5TOZpCIwpgSWnEANZp7gfHXHu0= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= @@ -867,8 +851,8 @@ github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5k github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20190215210624-980c5ac6f3ac/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= @@ -877,14 +861,15 @@ github.com/sosodev/duration v1.1.0 h1:kQcaiGbJaIsRqgQy7VGlZrVw1giWO+lDoX3MCPnpVO github.com/sosodev/duration v1.1.0/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= @@ -893,6 +878,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -901,11 +887,11 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +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= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -916,13 +902,20 @@ github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EU github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= -github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/ugorji/go/codec/codecgen v1.2.12 h1:BWbVmWOPwNT9RcRR+WTPYzJeA4WXBSb1O6XJgl4Te0U= -github.com/ugorji/go/codec/codecgen v1.2.12/go.mod h1:JgbiBomDZo5t1eXffkNLgSu+qeuKWCNWxJBvTG4riRI= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= +github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= +github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= +github.com/ugorji/go v1.1.13/go.mod h1:jxau1n+/wyTGLQoCkjok9r5zFa/FxT6eI5HiHKQszjc= +github.com/ugorji/go/codec v1.1.13 h1:013LbFhocBoIqgHeIHKlV4JWYhqogATYWZhIcH0WHn4= +github.com/ugorji/go/codec v1.1.13/go.mod h1:oNVt3Dq+FO91WNQ/9JnHKQP2QJxTzoN7wCBFCq1OeuU= +github.com/ugorji/go/codec/codecgen v1.1.13 h1:rGpZ4Q63VcWA3DMBbIHvg+SQweUkfXBBa/f9X0W+tFg= +github.com/ugorji/go/codec/codecgen v1.1.13/go.mod h1:EhCxlc7Crov+HLygD4+hBCitXNrrGKRrRWj+pRsyJGg= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho= -github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/urfave/cli/v2 v2.27.2 h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI= +github.com/urfave/cli/v2 v2.27.2/go.mod h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM= github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/vektah/gqlparser/v2 v2.5.10 h1:6zSM4azXC9u4Nxy5YmdmGu4uKamfwsdKTwp5zsEealU= @@ -931,8 +924,8 @@ github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49u github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe9UDgpxAWQrhbbBXOYJFQDq/dtJw= +github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913/go.mod h1:4aEEwZQutDLsQv2Deui4iYQ6DWTxR14g6m8Wv88+Xqk= github.com/xsleonard/go-merkle v1.1.0 h1:fHe1fuhJjGH22ZzVTAH0jqHLhTGhOq3wQjJN+8P0jQg= github.com/xsleonard/go-merkle v1.1.0/go.mod h1:cW4z+UZ/4f2n9IJgIiyDCdYguchoDyDAPmpuOWGxdGg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -941,6 +934,8 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= @@ -965,15 +960,17 @@ go.uber.org/fx v1.20.0 h1:ZMC/pnRvhsthOZh9MZjMq5U8Or3mA9zBSPaLnzs3ihQ= go.uber.org/fx v1.20.0/go.mod h1:qCUj0btiR3/JnanEr1TYEePfSw6o/4qYJscgvzQ5Ub0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -994,11 +991,10 @@ golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1009,8 +1005,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/exp v0.0.0-20231226003508-02704c960a9b h1:kLiC65FbiHWFAOu+lxwNPujcsl8VYyTYYEZnsOO1WK4= +golang.org/x/exp v0.0.0-20231226003508-02704c960a9b/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1039,9 +1035,8 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1092,14 +1087,15 @@ golang.org/x/net v0.0.0-20220401154927-543a649e0bdd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1125,10 +1121,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/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.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.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= @@ -1147,6 +1141,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1175,6 +1170,7 @@ golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1197,23 +1193,23 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.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.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1224,9 +1220,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1293,9 +1289,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1373,10 +1368,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= +google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -1396,8 +1391,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1412,8 +1407,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/cenkalti/backoff.v1 v1.1.0 h1:Arh75ttbsvlpVA7WtVpH4u9h6Zl46xuptxqLxPiSo4Y= gopkg.in/cenkalti/backoff.v1 v1.1.0/go.mod h1:J6Vskwqd+OMVJl8C33mmtxTBs2gyzfv7UDAkHu8BrjI= @@ -1441,6 +1436,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1452,34 +1449,32 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= -lukechampine.com/uint128 v1.3.0 h1:cDdUVfRwDUDovz610ABgFD17nXD4/uDgVHl2sC3+sbo= -lukechampine.com/uint128 v1.3.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.41.0 h1:QoR1Sn3YWlmA1T4vLaKZfawdVtSiGx8H+cEojbC7v1Q= -modernc.org/cc/v3 v3.41.0/go.mod h1:Ni4zjJYJ04CDOhG7dn640WGfwBzfE0ecX8TyMB0Fv0Y= -modernc.org/ccgo/v3 v3.16.15 h1:KbDR3ZAVU+wiLyMESPtbtE/Add4elztFyfsWoNTgxS0= -modernc.org/ccgo/v3 v3.16.15/go.mod h1:yT7B+/E2m43tmMOT51GMoM98/MtHIcQQSleGnddkUNI= -modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v1.29.0 h1:tTFRFq69YKCF2QyGNuRUQxKBm1uZZLubf6Cjh/pVHXs= -modernc.org/libc v1.29.0/go.mod h1:DaG/4Q3LRRdqpiLyP0C2m1B8ZMGkQ+cCgOIjEtQlYhQ= +modernc.org/cc/v4 v4.21.0 h1:D/gLKtcztomvWbsbvBKo3leKQv+86f+DdqEZBBXhnag= +modernc.org/cc/v4 v4.21.0/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.17.3 h1:t2CQci84jnxKw3GGnHvjGKjiNZeZqyQx/023spkk4hU= +modernc.org/ccgo/v4 v4.17.3/go.mod h1:1FCbAtWYJoKuc+AviS+dH+vGNtYmFJqBeRWjmnDWsIg= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= +modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.50.4 h1:GeqBes21PQHbVitLewzkhLXLFnQ1AWxOlHI+g5InUnQ= +modernc.org/libc v1.50.4/go.mod h1:rhzrUx5oePTSTIzBgM0mTftwWHK8tiT9aNFUt1mldl0= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= -modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E= -modernc.org/memory v1.7.2/go.mod h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.28.0 h1:Zx+LyDDmXczNnEQdvPuEfcFVA2ZPyaD7UCZDjef3BHQ= -modernc.org/sqlite v1.28.0/go.mod h1:Qxpazz0zH8Z1xCFyi5GSL3FzbtZ3fvbjmywNogldEW0= +modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= +modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= +modernc.org/sqlite v1.29.8 h1:nGKglNx9K5v0As+zF0/Gcl1kMkmaU1XynYyq92PbsC8= +modernc.org/sqlite v1.29.8/go.mod h1:lQPm27iqa4UNZpmr4Aor0MH0HkCLbt1huYDfWylLZFk= modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= -modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= -modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= -modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/migrations/migrations.go b/migrations/migrations.go index 7bcd4824d5e..a6e9de92f77 100644 --- a/migrations/migrations.go +++ b/migrations/migrations.go @@ -37,6 +37,7 @@ var migrations = map[kv.Label][]Migration{ TxsBeginEnd, TxsV3, ProhibitNewDownloadsLock, + ProhibitNewDownloadsLock2, }, kv.TxPoolDB: {}, kv.SentryDB: {}, @@ -51,7 +52,9 @@ type Migration struct { var ( ErrMigrationNonUniqueName = fmt.Errorf("please provide unique migration name") ErrMigrationCommitNotCalled = fmt.Errorf("migration before-commit function was not called") - ErrMigrationETLFilesDeleted = fmt.Errorf("db migration progress was interrupted after extraction step and ETL files was deleted, please contact development team for help or re-sync from scratch") + ErrMigrationETLFilesDeleted = fmt.Errorf( + "db migration progress was interrupted after extraction step and ETL files was deleted, please contact development team for help or re-sync from scratch", + ) ) func NewMigrator(label kv.Label) *Migrator { @@ -238,7 +241,16 @@ func (m *Migrator) Apply(db kv.RwDB, dataDir string, logger log.Logger) error { }); err != nil { return fmt.Errorf("migrator.Apply: %w", err) } - logger.Info("Updated DB schema to", "version", fmt.Sprintf("%d.%d.%d", kv.DBSchemaVersion.Major, kv.DBSchemaVersion.Minor, kv.DBSchemaVersion.Patch)) + logger.Info( + "Updated DB schema to", + "version", + fmt.Sprintf( + "%d.%d.%d", + kv.DBSchemaVersion.Major, + kv.DBSchemaVersion.Minor, + kv.DBSchemaVersion.Patch, + ), + ) return nil } diff --git a/migrations/prohibit_new_downloads2.go b/migrations/prohibit_new_downloads2.go new file mode 100644 index 00000000000..e278fa71113 --- /dev/null +++ b/migrations/prohibit_new_downloads2.go @@ -0,0 +1,73 @@ +package migrations + +import ( + "context" + "encoding/json" + "io/fs" + "os" + "path/filepath" + + "github.com/ledgerwatch/erigon-lib/common/datadir" + "github.com/ledgerwatch/erigon-lib/common/dir" + "github.com/ledgerwatch/erigon-lib/downloader" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" + "github.com/ledgerwatch/erigon-lib/kv" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" + borsnaptype "github.com/ledgerwatch/erigon/polygon/bor/snaptype" + "github.com/ledgerwatch/log/v3" +) + +// Switch to the second version of download.lock. +var ProhibitNewDownloadsLock2 = Migration{ + Name: "prohibit_new_downloads_lock2", + Up: func(db kv.RwDB, dirs datadir.Dirs, progress []byte, BeforeCommit Callback, logger log.Logger) (err error) { + tx, err := db.BeginRw(context.Background()) + if err != nil { + return err + } + defer tx.Rollback() + fPath := filepath.Join(dirs.Snap, downloader.ProhibitNewDownloadsFileName) + if !dir.FileExist(fPath) { + if err := BeforeCommit(tx, nil, true); err != nil { + return err + } + return tx.Commit() + + } + content, err := os.ReadFile(fPath) + if err != nil { + return err + } + if len(content) == 0 { // old format, need to change to all snaptypes except blob sidecars + locked := []string{} + + for _, t := range coresnaptype.BlockSnapshotTypes { + locked = append(locked, t.Name()) + } + + for _, t := range borsnaptype.BorSnapshotTypes() { + locked = append(locked, t.Name()) + } + + for _, t := range snaptype.CaplinSnapshotTypes { + if t.Name() != snaptype.BlobSidecars.Name() { + locked = append(locked, t.Name()) + } + } + + newContent, err := json.Marshal(locked) + if err != nil { + return err + } + if err := os.WriteFile(fPath, newContent, fs.FileMode(os.O_TRUNC|os.O_WRONLY)); err != nil { + return err + } + } + + // This migration is no-op, but it forces the migration mechanism to apply it and thus write the DB schema version info + if err := BeforeCommit(tx, nil, true); err != nil { + return err + } + return tx.Commit() + }, +} diff --git a/migrations/txs_begin_end.go b/migrations/txs_begin_end.go index f2063bd4ac1..e85ee7ee576 100644 --- a/migrations/txs_begin_end.go +++ b/migrations/txs_begin_end.go @@ -347,7 +347,7 @@ func canonicalTransactions(db kv.Getter, baseTxId uint64, amount uint32) ([]type if err := db.ForAmount(kv.EthTx, txIdKey, amount, func(k, v []byte) error { var decodeErr error - if txs[i], decodeErr = types.UnmarshalTransactionFromBinary(v); decodeErr != nil { + if txs[i], decodeErr = types.UnmarshalTransactionFromBinary(v, false /* blobTxnsAreWrappedWithBlobs */); decodeErr != nil { return decodeErr } i++ diff --git a/node/node.go b/node/node.go index 1bd78c6b084..9fb91cf4332 100644 --- a/node/node.go +++ b/node/node.go @@ -27,9 +27,10 @@ import ( "time" "github.com/c2h5oh/datasize" - "github.com/ledgerwatch/erigon-lib/common/datadir" "golang.org/x/sync/semaphore" + "github.com/ledgerwatch/erigon-lib/common/datadir" + "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/node/nodecfg" "github.com/ledgerwatch/erigon/params" @@ -347,6 +348,7 @@ func OpenDatabase(ctx context.Context, config *nodecfg.Config, label kv.Label, n if config.MdbxGrowthStep > 0 { opts = opts.GrowthStep(config.MdbxGrowthStep) } + opts = opts.DirtySpace(uint64(512 * datasize.MB)) case kv.ConsensusDB: if config.MdbxPageSize.Bytes() > 0 { opts = opts.PageSize(config.MdbxPageSize.Bytes()) diff --git a/node/rpcstack.go b/node/rpcstack.go index 6bb42db6c59..3c9d4111d9a 100644 --- a/node/rpcstack.go +++ b/node/rpcstack.go @@ -265,7 +265,7 @@ func (h *httpServer) enableRPC(apis []rpc.API, config httpConfig, allowList rpc. } // Create RPC server and handler. - srv := rpc.NewServer(50, false /* traceRequests */, true, h.logger, 0) + srv := rpc.NewServer(50, false /* traceRequests */, false /* traceSingleRequest */, true, h.logger, 0) srv.SetAllowList(allowList) if err := RegisterApisFromWhitelist(apis, config.Modules, srv, false, h.logger); err != nil { return err @@ -298,7 +298,7 @@ func (h *httpServer) enableWS(apis []rpc.API, config wsConfig, allowList rpc.All } // Create RPC server and handler. - srv := rpc.NewServer(50, false /* traceRequests */, true, h.logger, 0) + srv := rpc.NewServer(50, false /* traceRequests */, false /* debugSingleRequest */, true, h.logger, 0) srv.SetAllowList(allowList) if err := RegisterApisFromWhitelist(apis, config.Modules, srv, false, h.logger); err != nil { return err diff --git a/p2p/discover/table.go b/p2p/discover/table.go index feaf5d39788..42ee206eecd 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -30,6 +30,7 @@ import ( "net" "sort" "sync" + "sync/atomic" "time" libcommon "github.com/ledgerwatch/erigon-lib/common" @@ -88,8 +89,8 @@ type Table struct { // diagnostics errors map[string]uint - dbseeds int - revalidates int + dbseeds atomic.Int32 + revalidates atomic.Int32 protocol string } @@ -304,7 +305,7 @@ loop: live := tab.live() vals := []interface{}{"protocol", tab.protocol, "version", tab.net.Version(), - "len", tab.len(), "live", tab.live(), "unsol", tab.net.LenUnsolicited(), "ips", tab.ips.Len(), "db", tab.dbseeds, "reval", tab.revalidates} + "len", tab.len(), "live", tab.live(), "unsol", tab.net.LenUnsolicited(), "ips", tab.ips.Len(), "db", tab.dbseeds.Load(), "reval", tab.revalidates.Load()} func() { tab.mutex.Lock() @@ -373,7 +374,7 @@ func (tab *Table) doRefresh(done chan struct{}) { func (tab *Table) loadSeedNodes() { dbseeds := tab.db.QuerySeeds(seedCount, seedMaxAge) - tab.dbseeds = len(dbseeds) + tab.dbseeds.Store(int32(len(dbseeds))) seeds := wrapNodes(dbseeds) tab.log.Debug("QuerySeeds read nodes from the node DB", "count", len(seeds)) @@ -392,7 +393,7 @@ func (tab *Table) doRevalidate(done chan<- struct{}) { defer debug.LogPanic() defer func() { done <- struct{}{} }() - tab.revalidates++ + tab.revalidates.Add(1) last, bi := tab.nodeToRevalidate() if last == nil { diff --git a/p2p/discover/v4_udp.go b/p2p/discover/v4_udp.go index deb4427a7a7..e3f2a300206 100644 --- a/p2p/discover/v4_udp.go +++ b/p2p/discover/v4_udp.go @@ -97,6 +97,8 @@ type UDPv4 struct { errors map[string]uint unsolicitedNodes *lru.Cache[enode.ID, *enode.Node] privateKeyGenerator func() (*ecdsa.PrivateKey, error) + + trace bool } // replyMatcher represents a pending reply. @@ -603,14 +605,15 @@ func (t *UDPv4) loop() { return case p := <-t.addReplyMatcher: - func() { - mutex.Lock() - defer mutex.Unlock() - p.deadline = time.Now().Add(t.replyTimeout) - listUpdate <- plist.PushBack(p) - }() + mutex.Lock() + p.deadline = time.Now().Add(t.replyTimeout) + back := plist.PushBack(p) + mutex.Unlock() + listUpdate <- back case r := <-t.gotreply: + var removals []*list.Element + func() { mutex.Lock() defer mutex.Unlock() @@ -626,7 +629,7 @@ func (t *UDPv4) loop() { if requestDone { p.errc <- nil plist.Remove(el) - listUpdate <- el + removals = append(removals, el) } // Reset the continuous timeout counter (time drift detection) contTimeouts = 0 @@ -635,6 +638,10 @@ func (t *UDPv4) loop() { r.matched <- matched }() + for _, el := range removals { + listUpdate <- el + } + case key := <-t.gotkey: go func() { if key, err := v4wire.DecodePubkey(crypto.S256(), key); err == nil { @@ -677,7 +684,9 @@ func (t *UDPv4) send(toaddr *net.UDPAddr, toid enode.ID, req v4wire.Packet) ([]b func (t *UDPv4) write(toaddr *net.UDPAddr, toid enode.ID, what string, packet []byte) error { _, err := t.conn.WriteToUDP(packet, toaddr) - t.log.Trace(">> "+what, "id", toid, "addr", toaddr, "err", err) + if t.trace { + t.log.Trace(">> "+what, "id", toid, "addr", toaddr, "err", err) + } return err } @@ -751,7 +760,9 @@ func (t *UDPv4) handlePacket(from *net.UDPAddr, buf []byte) error { if packet.preverify != nil { err = packet.preverify(packet, from, fromID, fromKey) } - t.log.Trace("<< "+packet.Name(), "id", fromID, "addr", from, "err", err) + if t.trace { + t.log.Trace("<< "+packet.Name(), "id", fromID, "addr", from, "err", err) + } if err == nil && packet.handle != nil { packet.handle(packet, from, fromID, hash) } diff --git a/p2p/discover/v5_udp.go b/p2p/discover/v5_udp.go index d66d44e36f0..6e56097e331 100644 --- a/p2p/discover/v5_udp.go +++ b/p2p/discover/v5_udp.go @@ -98,6 +98,8 @@ type UDPv5 struct { cancelCloseCtx context.CancelFunc wg sync.WaitGroup errors map[string]uint + + trace bool } // TalkRequestHandler callback processes a talk request and optionally returns a reply @@ -621,11 +623,15 @@ func (t *UDPv5) send(toID enode.ID, toAddr *net.UDPAddr, packet v5wire.Packet, c addr := toAddr.String() enc, nonce, err := t.codec.Encode(toID, addr, packet, c) if err != nil { - t.log.Warn(">> "+packet.Name(), "id", toID, "addr", addr, "err", err) + if t.trace { + t.log.Warn(">> "+packet.Name(), "id", toID, "addr", addr, "err", err) + } return nonce, err } _, err = t.conn.WriteToUDP(enc, toAddr) - t.log.Trace(">> "+packet.Name(), "id", toID, "addr", addr) + if t.trace { + t.log.Trace(">> "+packet.Name(), "id", toID, "addr", addr) + } return nonce, err } @@ -676,7 +682,9 @@ func (t *UDPv5) handlePacket(rawpacket []byte, fromAddr *net.UDPAddr) error { } if packet.Kind() != v5wire.WhoareyouPacket { // WHOAREYOU logged separately to report errors. - t.log.Trace("<< "+packet.Name(), "id", fromID, "addr", addr) + if t.trace { + t.log.Trace("<< "+packet.Name(), "id", fromID, "addr", addr) + } } t.handle(packet, fromID, fromAddr) return nil @@ -762,7 +770,9 @@ func (t *UDPv5) handleWhoareyou(p *v5wire.Whoareyou, fromID enode.ID, fromAddr * } // Resend the call that was answered by WHOAREYOU. - t.log.Trace("<< "+p.Name(), "id", c.node.ID(), "addr", fromAddr) + if t.trace { + t.log.Trace("<< "+p.Name(), "id", c.node.ID(), "addr", fromAddr) + } c.handshakeCount++ c.challenge = p p.Node = c.node diff --git a/p2p/discover/v5wire/encoding.go b/p2p/discover/v5wire/encoding.go index 3b8023022c0..703c09a7fec 100644 --- a/p2p/discover/v5wire/encoding.go +++ b/p2p/discover/v5wire/encoding.go @@ -304,7 +304,7 @@ func (c *Codec) encodeWhoareyou(toID enode.ID, packet *Whoareyou) (Header, error return head, nil } -// encodeHandshakeMessage encodes the handshake message packet header. +// encodeHandshakeHeader encodes the handshake message packet header. func (c *Codec) encodeHandshakeHeader(toID enode.ID, addr string, challenge *Whoareyou) (Header, *session, error) { // Ensure calling code sets challenge.node. if challenge.Node == nil { diff --git a/p2p/discover/v5wire/msg.go b/p2p/discover/v5wire/msg.go index e27b59ad8d6..82e8e92168e 100644 --- a/p2p/discover/v5wire/msg.go +++ b/p2p/discover/v5wire/msg.go @@ -84,7 +84,7 @@ type ( ReqID []byte ENRSeq uint64 ToIP net.IP // These fields should mirror the UDP envelope address of the ping - ToPort uint16 // packet, which provides a way to discover the the external address (after NAT). + ToPort uint16 // packet, which provides a way to discover the external address (after NAT). } // FINDNODE is a query for nodes in the given bucket. diff --git a/p2p/dnsdisc/tree.go b/p2p/dnsdisc/tree.go index 0c47edf9478..6a25fcd0c1a 100644 --- a/p2p/dnsdisc/tree.go +++ b/p2p/dnsdisc/tree.go @@ -23,6 +23,7 @@ import ( "encoding/base64" "fmt" "io" + "slices" "strings" "github.com/ledgerwatch/erigon/crypto" @@ -30,7 +31,6 @@ import ( "github.com/ledgerwatch/erigon/p2p/enr" "github.com/ledgerwatch/erigon/rlp" "golang.org/x/crypto/sha3" - "golang.org/x/exp/slices" ) // Tree is a merkle tree of node records. diff --git a/p2p/enode/nodedb.go b/p2p/enode/nodedb.go index b955a7a29f5..5546ebcf3bd 100644 --- a/p2p/enode/nodedb.go +++ b/p2p/enode/nodedb.go @@ -32,7 +32,6 @@ import ( mdbx1 "github.com/erigontech/mdbx-go/mdbx" "github.com/ledgerwatch/log/v3" - libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/erigon/rlp" @@ -97,7 +96,7 @@ func bucketsConfig(_ kv.TableCfg) kv.TableCfg { } } -// newMemoryNodeDB creates a new in-memory node database without a persistent backend. +// newMemoryDB creates a new in-memory node database without a persistent backend. func newMemoryDB(ctx context.Context, logger log.Logger, tmpDir string) (*DB, error) { db, err := mdbx.NewMDBX(logger). InMem(tmpDir). @@ -115,7 +114,7 @@ func newMemoryDB(ctx context.Context, logger log.Logger, tmpDir string) (*DB, er return nodeDB, nil } -// newPersistentNodeDB creates/opens a persistent node database, +// newPersistentDB creates/opens a persistent node database, // also flushing its contents in case of a version mismatch. func newPersistentDB(ctx context.Context, logger log.Logger, path string) (*DB, error) { db, err := mdbx.NewMDBX(logger). @@ -262,7 +261,7 @@ func (db *DB) storeInt64(key []byte, n int64) error { blob := make([]byte, binary.MaxVarintLen64) blob = blob[:binary.PutVarint(blob, n)] return db.kv.Update(db.ctx, func(tx kv.RwTx) error { - return tx.Put(kv.Inodes, libcommon.CopyBytes(key), blob) + return tx.Put(kv.Inodes, key, blob) }) } @@ -286,12 +285,15 @@ func (db *DB) fetchUint64(key []byte) uint64 { // storeUint64 stores an integer in the given key. func (db *DB) storeUint64(key []byte, n uint64) error { - blob := make([]byte, binary.MaxVarintLen64) - blob = blob[:binary.PutUvarint(blob, n)] return db.kv.Update(db.ctx, func(tx kv.RwTx) error { - return tx.Put(kv.Inodes, libcommon.CopyBytes(key), blob) + return db._storeUint64(tx, key, n) }) } +func (db *DB) _storeUint64(tx kv.RwTx, key []byte, n uint64) error { + blob := make([]byte, binary.MaxVarintLen64) + blob = blob[:binary.PutUvarint(blob, n)] + return tx.Put(kv.Inodes, key, blob) +} // Node retrieves a node with a given id from the database. func (db *DB) Node(id ID) *Node { @@ -334,12 +336,13 @@ func (db *DB) UpdateNode(node *Node) error { if err != nil { return err } - if err := db.kv.Update(db.ctx, func(tx kv.RwTx) error { - return tx.Put(kv.NodeRecords, nodeKey(node.ID()), blob) - }); err != nil { - return err - } - return db.storeUint64(nodeItemKey(node.ID(), zeroIP, dbNodeSeq), node.Seq()) + return db.kv.Update(db.ctx, func(tx kv.RwTx) error { + err = tx.Put(kv.NodeRecords, nodeKey(node.ID()), blob) + if err != nil { + return err + } + return db._storeUint64(tx, nodeItemKey(node.ID(), zeroIP, dbNodeSeq), node.Seq()) + }) } // NodeSeq returns the stored record sequence number of the given node. diff --git a/p2p/enr/enr_test.go b/p2p/enr/enr_test.go index 15ade81df6c..dd4f1fe14f0 100644 --- a/p2p/enr/enr_test.go +++ b/p2p/enr/enr_test.go @@ -48,7 +48,7 @@ func TestGetSetID(t *testing.T) { assert.Equal(t, id, id2) } -// TestGetSetIP4 tests encoding/decoding and setting/getting of the IP key. +// TestGetSetIPv4 tests encoding/decoding and setting/getting of the IP key. func TestGetSetIPv4(t *testing.T) { ip := IPv4{192, 168, 0, 3} var r Record @@ -59,7 +59,7 @@ func TestGetSetIPv4(t *testing.T) { assert.Equal(t, ip, ip2) } -// TestGetSetIP6 tests encoding/decoding and setting/getting of the IP6 key. +// TestGetSetIPv6 tests encoding/decoding and setting/getting of the IP6 key. func TestGetSetIPv6(t *testing.T) { ip := IPv6{0x20, 0x01, 0x48, 0x60, 0, 0, 0x20, 0x01, 0, 0, 0, 0, 0, 0, 0x00, 0x68} var r Record diff --git a/p2p/peer.go b/p2p/peer.go index 913c1cf8c00..608d637a166 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -28,7 +28,6 @@ import ( "github.com/ledgerwatch/log/v3" - "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/metrics" "github.com/ledgerwatch/erigon/common/debug" "github.com/ledgerwatch/erigon/common/mclock" @@ -123,14 +122,6 @@ type Peer struct { events *event.Feed pubkey [64]byte metricsEnabled bool - - //diagnostics info - BytesIn uint64 - BytesOut uint64 - CapBytesIn map[string]uint64 - CapBytesOut map[string]uint64 - TypeBytesIn map[string]uint64 - TypeBytesOut map[string]uint64 } // NewPeer returns a peer for testing purposes. @@ -236,12 +227,6 @@ func newPeer(logger log.Logger, conn *conn, protocols []Protocol, pubkey [64]byt log: log, pubkey: pubkey, metricsEnabled: metricsEnabled, - CapBytesIn: make(map[string]uint64), - CapBytesOut: make(map[string]uint64), - TypeBytesIn: make(map[string]uint64), - TypeBytesOut: make(map[string]uint64), - BytesIn: 0, - BytesOut: 0, } return p } @@ -275,20 +260,6 @@ func convertToCamelCase(input string) string { return result } -func (p *Peer) CountBytesTransfered(msgType string, msgCap string, bytes uint64, inbound bool) { - messageType := convertToCamelCase(msgType) - - if inbound { - p.BytesIn += bytes - p.CapBytesIn[msgCap] += bytes - p.TypeBytesIn[messageType] += bytes - } else { - p.BytesOut += bytes - p.CapBytesOut[msgCap] += bytes - p.TypeBytesOut[messageType] += bytes - } -} - func (p *Peer) run() (peerErr *PeerError) { var ( writeStart = make(chan struct{}, 1) @@ -400,16 +371,6 @@ func (p *Peer) handle(msg Msg) error { if err != nil { return fmt.Errorf("msg code out of range: %v", msg.Code) } - //msgType := "unknown" - - //var dds uint64 = msg.Code - - //dds -= proto.offset - //msgCode := msg.Code - proto.offset - //msgType = eth.ToProto[proto.cap().Version][dds].String() - //msgType := eth.ToProto[proto.cap().Version][msgCode].String() - - //p.CountBytesTransfered(msgType, proto.cap().String(), uint64(msg.Size), true) if p.metricsEnabled { m := fmt.Sprintf("%s_%s_%d_%#02x", ingressMeterName, proto.Name, proto.Version, msg.Code-proto.offset) @@ -615,23 +576,3 @@ func (p *Peer) Info() *PeerInfo { } return info } - -func (p *Peer) DiagInfo() *diagnostics.PeerStatistics { - return &diagnostics.PeerStatistics{ - BytesIn: p.BytesIn, - BytesOut: p.BytesOut, - CapBytesIn: p.CapBytesIn, - CapBytesOut: p.CapBytesOut, - TypeBytesIn: p.TypeBytesIn, - TypeBytesOut: p.TypeBytesOut, - } -} - -func (p *Peer) ResetDiagnosticsCounters() { - p.BytesIn = 0 - p.BytesOut = 0 - p.CapBytesIn = make(map[string]uint64) - p.CapBytesOut = make(map[string]uint64) - p.TypeBytesIn = make(map[string]uint64) - p.TypeBytesOut = make(map[string]uint64) -} diff --git a/p2p/sentry/sentry_grpc_server.go b/p2p/sentry/sentry_grpc_server.go index c745aadef04..7e735c69573 100644 --- a/p2p/sentry/sentry_grpc_server.go +++ b/p2p/sentry/sentry_grpc_server.go @@ -210,6 +210,7 @@ func (pi *PeerInfo) Remove(reason *p2p.PeerError) { pi.removeReason = reason close(pi.removed) pi.ctxCancel() + pi.peer.Disconnect(reason) }) } @@ -539,13 +540,30 @@ func runPeer( msgType := eth.ToProto[protocol][msg.Code] msgCap := cap.String() - peerInfo.peer.CountBytesTransfered(msgType.String(), msgCap, uint64(msg.Size), true) + + trackPeerStatistics(peerInfo.peer.Info().ID, true, msgType.String(), msgCap, int(msg.Size)) msg.Discard() peerInfo.ClearDeadlines(time.Now(), givePermit) } } +func trackPeerStatistics(peerID string, inbound bool, msgType string, msgCap string, bytes int) { + isDiagEnabled := diagnostics.TypeOf(diagnostics.PeerStatisticMsgUpdate{}).Enabled() + if isDiagEnabled { + stats := diagnostics.PeerStatisticMsgUpdate{ + PeerID: peerID, + Inbound: inbound, + MsgType: msgType, + MsgCap: msgCap, + Bytes: bytes, + PeerType: "Sentry", + } + + diagnostics.Send(stats) + } +} + func grpcSentryServer(ctx context.Context, sentryAddr string, ss *GrpcServer, healthCheck bool) (*grpc.Server, error) { // STARTING GRPC SERVER ss.logger.Info("Starting Sentry gRPC server", "on", sentryAddr) @@ -631,6 +649,7 @@ func NewGrpcServer(ctx context.Context, dialCandidates func() enode.Iterator, re ss.GoodPeers.Store(peerID, peerInfo) ss.sendNewPeerToClients(gointerfaces.ConvertHashToH512(peerID)) + defer ss.sendGonePeerToClients(gointerfaces.ConvertHashToH512(peerID)) getBlockHeadersErr := ss.getBlockHeaders(ctx, *peerBestHash, peerID) if getBlockHeadersErr != nil { return p2p.NewPeerError(p2p.PeerErrorFirstMessageSend, p2p.DiscNetworkError, getBlockHeadersErr, "p2p.Protocol.Run getBlockHeaders failure") @@ -638,7 +657,7 @@ func NewGrpcServer(ctx context.Context, dialCandidates func() enode.Iterator, re cap := p2p.Cap{Name: eth.ProtocolName, Version: protocol} - err = runPeer( + return runPeer( ctx, peerID, cap, @@ -648,8 +667,6 @@ func NewGrpcServer(ctx context.Context, dialCandidates func() enode.Iterator, re ss.hasSubscribers, logger, ) - ss.sendGonePeerToClients(gointerfaces.ConvertHashToH512(peerID)) - return err }, NodeInfo: func() interface{} { return readNodeInfo() @@ -696,10 +713,11 @@ type GrpcServer struct { Protocols []p2p.Protocol discoveryDNS []string GoodPeers sync.Map - statusData *proto_sentry.StatusData - P2pServer *p2p.Server TxSubscribed uint32 // Set to non-zero if downloader is subscribed to transaction messages - lock sync.RWMutex + p2pServer *p2p.Server + p2pServerLock sync.RWMutex + statusData *proto_sentry.StatusData + statusDataLock sync.RWMutex messageStreams map[proto_sentry.MessageId]map[uint64]chan *proto_sentry.InboundMessage messagesSubscriberID uint64 messageStreamsLock sync.RWMutex @@ -743,7 +761,7 @@ func (ss *GrpcServer) writePeer(logPrefix string, peerInfo *PeerInfo, msgcode ui cap := p2p.Cap{Name: eth.ProtocolName, Version: peerInfo.protocol} msgType := eth.ToProto[cap.Version][msgcode] - peerInfo.peer.CountBytesTransfered(msgType.String(), cap.String(), uint64(len(data)), false) + trackPeerStatistics(peerInfo.peer.Info().ID, false, msgType.String(), cap.String(), len(data)) err := peerInfo.rw.WriteMsg(p2p.Msg{Code: msgcode, Size: uint32(len(data)), Payload: bytes.NewReader(data)}) if err != nil { @@ -889,6 +907,7 @@ func (ss *GrpcServer) SendMessageById(_ context.Context, inreq *proto_sentry.Sen msgcode := eth.FromProto[ss.Protocols[0].Version][inreq.Data.Id] if msgcode != eth.GetBlockHeadersMsg && msgcode != eth.BlockHeadersMsg && + msgcode != eth.GetBlockBodiesMsg && msgcode != eth.BlockBodiesMsg && msgcode != eth.GetReceiptsMsg && msgcode != eth.ReceiptsMsg && @@ -979,44 +998,60 @@ func (ss *GrpcServer) HandShake(context.Context, *emptypb.Empty) (*proto_sentry. return reply, nil } +func (ss *GrpcServer) startP2PServer(genesisHash libcommon.Hash) (*p2p.Server, error) { + if !ss.p2p.NoDiscovery { + if len(ss.discoveryDNS) == 0 { + if url := params.KnownDNSNetwork(genesisHash, "all"); url != "" { + ss.discoveryDNS = []string{url} + } + } + for _, p := range ss.Protocols { + dialCandidates, err := setupDiscovery(ss.discoveryDNS) + if err != nil { + return nil, err + } + p.DialCandidates = dialCandidates + } + } + + srv, err := makeP2PServer(*ss.p2p, genesisHash, ss.Protocols) + if err != nil { + return nil, err + } + + if err = srv.Start(ss.ctx, ss.logger); err != nil { + srv.Stop() + return nil, fmt.Errorf("could not start server: %w", err) + } + + return srv, nil +} + +func (ss *GrpcServer) getP2PServer() *p2p.Server { + ss.p2pServerLock.RLock() + defer ss.p2pServerLock.RUnlock() + return ss.p2pServer +} + func (ss *GrpcServer) SetStatus(ctx context.Context, statusData *proto_sentry.StatusData) (*proto_sentry.SetStatusReply, error) { genesisHash := gointerfaces.ConvertH256ToHash(statusData.ForkData.Genesis) - ss.lock.Lock() - defer ss.lock.Unlock() reply := &proto_sentry.SetStatusReply{} - if ss.P2pServer == nil { - var err error - if !ss.p2p.NoDiscovery { - if len(ss.discoveryDNS) == 0 { - if url := params.KnownDNSNetwork(genesisHash, "all"); url != "" { - ss.discoveryDNS = []string{url} - } - } - for _, p := range ss.Protocols { - p.DialCandidates, err = setupDiscovery(ss.discoveryDNS) - if err != nil { - return nil, err - } - } - } - - srv, err := makeP2PServer(*ss.p2p, genesisHash, ss.Protocols) + ss.p2pServerLock.Lock() + defer ss.p2pServerLock.Unlock() + if ss.p2pServer == nil { + srv, err := ss.startP2PServer(genesisHash) if err != nil { return reply, err } - - // Add protocol - if err = srv.Start(ss.ctx, ss.logger); err != nil { - srv.Stop() - return reply, fmt.Errorf("could not start server: %w", err) - } - - ss.P2pServer = srv + ss.p2pServer = srv } - ss.P2pServer.LocalNode().Set(eth.CurrentENREntryFromForks(statusData.ForkData.HeightForks, statusData.ForkData.TimeForks, genesisHash, statusData.MaxBlockHeight, statusData.MaxBlockTime)) + ss.statusDataLock.Lock() + defer ss.statusDataLock.Unlock() + + ss.p2pServer.LocalNode().Set(eth.CurrentENREntryFromForks(statusData.ForkData.HeightForks, statusData.ForkData.TimeForks, genesisHash, statusData.MaxBlockHeight, statusData.MaxBlockTime)) if ss.statusData == nil || statusData.MaxBlockHeight != 0 { // Not overwrite statusData if the message contains zero MaxBlock (comes from standalone transaction pool) ss.statusData = statusData @@ -1025,11 +1060,12 @@ func (ss *GrpcServer) SetStatus(ctx context.Context, statusData *proto_sentry.St } func (ss *GrpcServer) Peers(_ context.Context, _ *emptypb.Empty) (*proto_sentry.PeersReply, error) { - if ss.P2pServer == nil { + p2pServer := ss.getP2PServer() + if p2pServer == nil { return nil, errors.New("p2p server was not started") } - peers := ss.P2pServer.PeersInfo() + peers := p2pServer.PeersInfo() var reply proto_sentry.PeersReply reply.Peers = make([]*proto_types.PeerInfo, 0, len(peers)) @@ -1053,15 +1089,6 @@ func (ss *GrpcServer) Peers(_ context.Context, _ *emptypb.Empty) (*proto_sentry. return &reply, nil } -func (ss *GrpcServer) DiagnosticsPeersData() map[string]*diagnostics.PeerStatistics { - if ss.P2pServer == nil { - return map[string]*diagnostics.PeerStatistics{} - } - - peers := ss.P2pServer.DiagnosticsPeersInfo() - return peers -} - func (ss *GrpcServer) SimplePeerCount() map[uint]int { counts := map[uint]int{} ss.rangePeers(func(peerInfo *PeerInfo) bool { @@ -1117,8 +1144,8 @@ func setupDiscovery(urls []string) (enode.Iterator, error) { } func (ss *GrpcServer) GetStatus() *proto_sentry.StatusData { - ss.lock.RLock() - defer ss.lock.RUnlock() + ss.statusDataLock.RLock() + defer ss.statusDataLock.RUnlock() return ss.statusData } @@ -1205,8 +1232,9 @@ func (ss *GrpcServer) Messages(req *proto_sentry.MessagesRequest, server proto_s // Close performs cleanup operations for the sentry func (ss *GrpcServer) Close() { - if ss.P2pServer != nil { - ss.P2pServer.Stop() + p2pServer := ss.getP2PServer() + if p2pServer != nil { + p2pServer.Stop() } } @@ -1238,16 +1266,23 @@ func (ss *GrpcServer) AddPeer(_ context.Context, req *proto_sentry.AddPeerReques if err != nil { return nil, err } - ss.P2pServer.AddPeer(node) + + p2pServer := ss.getP2PServer() + if p2pServer == nil { + return nil, errors.New("p2p server was not started") + } + p2pServer.AddPeer(node) + return &proto_sentry.AddPeerReply{Success: true}, nil } func (ss *GrpcServer) NodeInfo(_ context.Context, _ *emptypb.Empty) (*proto_types.NodeInfoReply, error) { - if ss.P2pServer == nil { + p2pServer := ss.getP2PServer() + if p2pServer == nil { return nil, errors.New("p2p server was not started") } - info := ss.P2pServer.NodeInfo() + info := p2pServer.NodeInfo() ret := &proto_types.NodeInfoReply{ Id: info.ID, Name: info.Name, diff --git a/p2p/sentry/sentry_grpc_server_test.go b/p2p/sentry/sentry_grpc_server_test.go index 5cd8739c9a8..37d296f5b1a 100644 --- a/p2p/sentry/sentry_grpc_server_test.go +++ b/p2p/sentry/sentry_grpc_server_test.go @@ -13,13 +13,13 @@ import ( "github.com/ledgerwatch/erigon-lib/gointerfaces" proto_sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/stretchr/testify/require" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/forkid" "github.com/ledgerwatch/erigon/core/rawdb" - "github.com/ledgerwatch/erigon/core/state/temporal" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/p2p" "github.com/ledgerwatch/log/v3" @@ -83,8 +83,8 @@ func testForkIDSplit(t *testing.T, protocol uint) { SpuriousDragonBlock: big.NewInt(2), ByzantiumBlock: big.NewInt(3), } - _, dbNoFork, _ = temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) - _, dbProFork, _ = temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + _, dbNoFork, _ = temporaltest.NewTestDB(t, datadir.New(t.TempDir())) + _, dbProFork, _ = temporaltest.NewTestDB(t, datadir.New(t.TempDir())) gspecNoFork = &types.Genesis{Config: configNoFork} gspecProFork = &types.Genesis{Config: configProFork} @@ -176,7 +176,7 @@ func TestSentryServerImpl_SetStatusInitPanic(t *testing.T) { }() configNoFork := &chain.Config{HomesteadBlock: big.NewInt(1), ChainID: big.NewInt(1)} - _, dbNoFork, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + _, dbNoFork, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) gspecNoFork := &types.Genesis{Config: configNoFork} genesisNoFork := core.MustCommitGenesis(gspecNoFork, dbNoFork, "", log.Root()) ss := &GrpcServer{p2p: &p2p.Config{}} diff --git a/p2p/sentry/sentry_multi_client/broadcast.go b/p2p/sentry/sentry_multi_client/broadcast.go index f210d8ea5f1..c3bbd136da7 100644 --- a/p2p/sentry/sentry_multi_client/broadcast.go +++ b/p2p/sentry/sentry_multi_client/broadcast.go @@ -7,10 +7,11 @@ import ( "strings" "syscall" - proto_sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" "github.com/ledgerwatch/log/v3" "google.golang.org/grpc" + proto_sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/eth/protocols/eth" "github.com/ledgerwatch/erigon/p2p" @@ -19,9 +20,6 @@ import ( ) func (cs *MultiClient) PropagateNewBlockHashes(ctx context.Context, announces []headerdownload.Announce) { - cs.lock.RLock() - defer cs.lock.RUnlock() - typedRequest := make(eth.NewBlockHashesPacket, len(announces)) for i := range announces { typedRequest[i].Hash = announces[i].Hash @@ -52,9 +50,6 @@ func (cs *MultiClient) PropagateNewBlockHashes(ctx context.Context, announces [] } func (cs *MultiClient) BroadcastNewBlock(ctx context.Context, header *types.Header, body *types.RawBody, td *big.Int) { - cs.lock.RLock() - defer cs.lock.RUnlock() - block, err := types.RawBlock{Header: header, Body: body}.AsBlock() if err != nil { diff --git a/p2p/sentry/sentry_multi_client/sentry_api.go b/p2p/sentry/sentry_multi_client/sentry_api.go index 072ae9258c1..bc757784971 100644 --- a/p2p/sentry/sentry_multi_client/sentry_api.go +++ b/p2p/sentry/sentry_multi_client/sentry_api.go @@ -4,11 +4,11 @@ import ( "context" "math/rand" - "github.com/holiman/uint256" + "google.golang.org/grpc" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces" proto_sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" - "google.golang.org/grpc" "github.com/ledgerwatch/erigon/eth/protocols/eth" "github.com/ledgerwatch/erigon/p2p/sentry" @@ -19,14 +19,13 @@ import ( // Methods of sentry called by Core -func (cs *MultiClient) UpdateHead(ctx context.Context, height, time uint64, hash libcommon.Hash, td *uint256.Int) { - cs.lock.Lock() - defer cs.lock.Unlock() - cs.headHeight = height - cs.headTime = time - cs.headHash = hash - cs.headTd = td - statusMsg := cs.makeStatusData() +func (cs *MultiClient) SetStatus(ctx context.Context) { + statusMsg, err := cs.statusDataProvider.GetStatusData(ctx) + if err != nil { + cs.logger.Error("MultiClient.SetStatus: GetStatusData error", "err", err) + return + } + for _, sentry := range cs.sentries { if !sentry.Ready() { continue diff --git a/p2p/sentry/sentry_multi_client/sentry_multi_client.go b/p2p/sentry/sentry_multi_client/sentry_multi_client.go index 3762538dd73..69c50ac9060 100644 --- a/p2p/sentry/sentry_multi_client/sentry_multi_client.go +++ b/p2p/sentry/sentry_multi_client/sentry_multi_client.go @@ -12,7 +12,6 @@ import ( "time" "github.com/c2h5oh/datasize" - "github.com/holiman/uint256" "github.com/ledgerwatch/log/v3" "google.golang.org/grpc" "google.golang.org/grpc/backoff" @@ -21,10 +20,8 @@ import ( "google.golang.org/protobuf/types/known/emptypb" "github.com/ledgerwatch/erigon-lib/chain" - libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/direct" - "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/grpcutil" proto_sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" proto_types "github.com/ledgerwatch/erigon-lib/gointerfaces/types" @@ -32,20 +29,23 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/kvcfg" "github.com/ledgerwatch/erigon/consensus" - "github.com/ledgerwatch/erigon/core/forkid" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/protocols/eth" - sentry2 "github.com/ledgerwatch/erigon/p2p/sentry" + "github.com/ledgerwatch/erigon/p2p/sentry" "github.com/ledgerwatch/erigon/rlp" - "github.com/ledgerwatch/erigon/turbo/engineapi/engine_helpers" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/erigon/turbo/stages/bodydownload" "github.com/ledgerwatch/erigon/turbo/stages/headerdownload" ) -type sentryMessageStream grpc.ClientStream -type sentryMessageStreamFactory func(context.Context, direct.SentryClient) (sentryMessageStream, error) +type ( + SentryMessageStream grpc.ClientStream + SentryMessageStreamFactory func(context.Context, direct.SentryClient) (SentryMessageStream, error) + StatusDataFactory func(context.Context) (*proto_sentry.StatusData, error) + MessageFactory[T any] func() T + MessageHandler[T any] func(context.Context, T, direct.SentryClient) error +) // StartStreamLoops starts message processing loops for all sentries. // The processing happens in several streams: @@ -73,11 +73,11 @@ func (cs *MultiClient) RecvUploadMessageLoop( eth.ToProto[direct.ETH66][eth.GetBlockBodiesMsg], eth.ToProto[direct.ETH66][eth.GetReceiptsMsg], } - streamFactory := func(streamCtx context.Context, sentry direct.SentryClient) (sentryMessageStream, error) { + streamFactory := func(streamCtx context.Context, sentry direct.SentryClient) (SentryMessageStream, error) { return sentry.Messages(streamCtx, &proto_sentry.MessagesRequest{Ids: ids}, grpc.WaitForReady(true)) } - sentryReconnectAndPumpStreamLoop(ctx, sentry, cs.makeStatusData, "RecvUploadMessage", streamFactory, makeInboundMessage, cs.HandleInboundMessage, wg, cs.logger) + SentryReconnectAndPumpStreamLoop(ctx, sentry, cs.makeStatusData, "RecvUploadMessage", streamFactory, MakeInboundMessage, cs.HandleInboundMessage, wg, cs.logger) } func (cs *MultiClient) RecvUploadHeadersMessageLoop( @@ -88,11 +88,11 @@ func (cs *MultiClient) RecvUploadHeadersMessageLoop( ids := []proto_sentry.MessageId{ eth.ToProto[direct.ETH66][eth.GetBlockHeadersMsg], } - streamFactory := func(streamCtx context.Context, sentry direct.SentryClient) (sentryMessageStream, error) { + streamFactory := func(streamCtx context.Context, sentry direct.SentryClient) (SentryMessageStream, error) { return sentry.Messages(streamCtx, &proto_sentry.MessagesRequest{Ids: ids}, grpc.WaitForReady(true)) } - sentryReconnectAndPumpStreamLoop(ctx, sentry, cs.makeStatusData, "RecvUploadHeadersMessage", streamFactory, makeInboundMessage, cs.HandleInboundMessage, wg, cs.logger) + SentryReconnectAndPumpStreamLoop(ctx, sentry, cs.makeStatusData, "RecvUploadHeadersMessage", streamFactory, MakeInboundMessage, cs.HandleInboundMessage, wg, cs.logger) } func (cs *MultiClient) RecvMessageLoop( @@ -106,11 +106,11 @@ func (cs *MultiClient) RecvMessageLoop( eth.ToProto[direct.ETH66][eth.NewBlockHashesMsg], eth.ToProto[direct.ETH66][eth.NewBlockMsg], } - streamFactory := func(streamCtx context.Context, sentry direct.SentryClient) (sentryMessageStream, error) { + streamFactory := func(streamCtx context.Context, sentry direct.SentryClient) (SentryMessageStream, error) { return sentry.Messages(streamCtx, &proto_sentry.MessagesRequest{Ids: ids}, grpc.WaitForReady(true)) } - sentryReconnectAndPumpStreamLoop(ctx, sentry, cs.makeStatusData, "RecvMessage", streamFactory, makeInboundMessage, cs.HandleInboundMessage, wg, cs.logger) + SentryReconnectAndPumpStreamLoop(ctx, sentry, cs.makeStatusData, "RecvMessage", streamFactory, MakeInboundMessage, cs.HandleInboundMessage, wg, cs.logger) } func (cs *MultiClient) PeerEventsLoop( @@ -118,29 +118,29 @@ func (cs *MultiClient) PeerEventsLoop( sentry direct.SentryClient, wg *sync.WaitGroup, ) { - streamFactory := func(streamCtx context.Context, sentry direct.SentryClient) (sentryMessageStream, error) { + streamFactory := func(streamCtx context.Context, sentry direct.SentryClient) (SentryMessageStream, error) { return sentry.PeerEvents(streamCtx, &proto_sentry.PeerEventsRequest{}, grpc.WaitForReady(true)) } messageFactory := func() *proto_sentry.PeerEvent { return new(proto_sentry.PeerEvent) } - sentryReconnectAndPumpStreamLoop(ctx, sentry, cs.makeStatusData, "PeerEvents", streamFactory, messageFactory, cs.HandlePeerEvent, wg, cs.logger) + SentryReconnectAndPumpStreamLoop(ctx, sentry, cs.makeStatusData, "PeerEvents", streamFactory, messageFactory, cs.HandlePeerEvent, wg, cs.logger) } -func sentryReconnectAndPumpStreamLoop[TMessage interface{}]( +func SentryReconnectAndPumpStreamLoop[TMessage interface{}]( ctx context.Context, - sentry direct.SentryClient, - statusDataFactory func() *proto_sentry.StatusData, + sentryClient direct.SentryClient, + statusDataFactory StatusDataFactory, streamName string, - streamFactory sentryMessageStreamFactory, - messageFactory func() TMessage, - handleInboundMessage func(context.Context, TMessage, direct.SentryClient) error, + streamFactory SentryMessageStreamFactory, + messageFactory MessageFactory[TMessage], + handleInboundMessage MessageHandler[TMessage], wg *sync.WaitGroup, logger log.Logger, ) { for ctx.Err() == nil { - if _, err := sentry.HandShake(ctx, &emptypb.Empty{}, grpc.WaitForReady(true)); err != nil { + if _, err := sentryClient.HandShake(ctx, &emptypb.Empty{}, grpc.WaitForReady(true)); err != nil { if errors.Is(err, context.Canceled) { continue } @@ -153,7 +153,15 @@ func sentryReconnectAndPumpStreamLoop[TMessage interface{}]( continue } - if _, err := sentry.SetStatus(ctx, statusDataFactory()); err != nil { + statusData, err := statusDataFactory(ctx) + + if err != nil { + logger.Error("SentryReconnectAndPumpStreamLoop: statusDataFactory error", "stream", streamName, "err", err) + time.Sleep(time.Second) + continue + } + + if _, err := sentryClient.SetStatus(ctx, statusData); err != nil { if errors.Is(err, context.Canceled) { continue } @@ -166,7 +174,7 @@ func sentryReconnectAndPumpStreamLoop[TMessage interface{}]( continue } - if err := pumpStreamLoop(ctx, sentry, streamName, streamFactory, messageFactory, handleInboundMessage, wg, logger); err != nil { + if err := pumpStreamLoop(ctx, sentryClient, streamName, streamFactory, messageFactory, handleInboundMessage, wg, logger); err != nil { if errors.Is(err, context.Canceled) { continue } @@ -191,9 +199,9 @@ func pumpStreamLoop[TMessage interface{}]( ctx context.Context, sentry direct.SentryClient, streamName string, - streamFactory sentryMessageStreamFactory, - messageFactory func() TMessage, - handleInboundMessage func(context.Context, TMessage, direct.SentryClient) error, + streamFactory SentryMessageStreamFactory, + messageFactory MessageFactory[TMessage], + handleInboundMessage MessageHandler[TMessage], wg *sync.WaitGroup, logger log.Logger, ) (err error) { @@ -203,7 +211,7 @@ func pumpStreamLoop[TMessage interface{}]( } }() // avoid crash because Erigon's core does many things - streamCtx, cancel := context.WithCancel(ctx) + ctx, cancel := context.WithCancel(ctx) defer cancel() defer sentry.MarkDisconnected() @@ -211,20 +219,23 @@ func pumpStreamLoop[TMessage interface{}]( // - can group them or process in batch // - can have slow processing reqs := make(chan TMessage, 256) - defer close(reqs) - go func() { - for req := range reqs { - if err := handleInboundMessage(ctx, req, sentry); err != nil { - logger.Debug("Handling incoming message", "stream", streamName, "err", err) - } - if wg != nil { - wg.Done() + for { + select { + case <-ctx.Done(): + return + case req := <-reqs: + if err := handleInboundMessage(ctx, req, sentry); err != nil { + logger.Debug("Handling incoming message", "stream", streamName, "err", err) + } + if wg != nil { + wg.Done() + } } } }() - stream, err := streamFactory(streamCtx, sentry) + stream, err := streamFactory(ctx, sentry) if err != nil { return err } @@ -248,96 +259,102 @@ func pumpStreamLoop[TMessage interface{}]( // MultiClient - does handle request/response/subscriptions to multiple sentries // each sentry may support same or different p2p protocol type MultiClient struct { - lock sync.RWMutex Hd *headerdownload.HeaderDownload Bd *bodydownload.BodyDownload IsMock bool - nodeName string sentries []direct.SentryClient - headHeight uint64 - headTime uint64 - headHash libcommon.Hash - headTd *uint256.Int ChainConfig *chain.Config - heightForks []uint64 - timeForks []uint64 - genesisHash libcommon.Hash - networkId uint64 db kv.RwDB Engine consensus.Engine blockReader services.FullBlockReader + statusDataProvider *sentry.StatusDataProvider logPeerInfo bool sendHeaderRequestsToMultiplePeers bool maxBlockBroadcastPeers func(*types.Header) uint + // disableBlockDownload is meant to be used temporarily for astrid until work to + // decouple sentry multi client from header and body downloading logic is done + disableBlockDownload bool + historyV3 bool logger log.Logger } func NewMultiClient( db kv.RwDB, - nodeName string, chainConfig *chain.Config, - genesisHash libcommon.Hash, - genesisTime uint64, engine consensus.Engine, - networkID uint64, sentries []direct.SentryClient, syncCfg ethconfig.Sync, blockReader services.FullBlockReader, blockBufferSize int, + statusDataProvider *sentry.StatusDataProvider, logPeerInfo bool, - forkValidator *engine_helpers.ForkValidator, maxBlockBroadcastPeers func(*types.Header) uint, + disableBlockDownload bool, logger log.Logger, ) (*MultiClient, error) { - historyV3 := kvcfg.HistoryV3.FromDB(db) - - hd := headerdownload.NewHeaderDownload( - 512, /* anchorLimit */ - 1024*1024, /* linkLimit */ - engine, - blockReader, - logger, - ) - if chainConfig.TerminalTotalDifficultyPassed { - hd.SetPOSSync(true) + // header downloader + var hd *headerdownload.HeaderDownload + if !disableBlockDownload { + hd = headerdownload.NewHeaderDownload( + 512, /* anchorLimit */ + 1024*1024, /* linkLimit */ + engine, + blockReader, + logger, + ) + if chainConfig.TerminalTotalDifficultyPassed { + hd.SetPOSSync(true) + } + if err := hd.RecoverFromDb(db); err != nil { + return nil, fmt.Errorf("recovery from DB failed: %w", err) + } + } else { + hd = &headerdownload.HeaderDownload{} } - if err := hd.RecoverFromDb(db); err != nil { - return nil, fmt.Errorf("recovery from DB failed: %w", err) + // body downloader + var bd *bodydownload.BodyDownload + if !disableBlockDownload { + bd = bodydownload.NewBodyDownload(engine, blockBufferSize, int(syncCfg.BodyCacheLimit), blockReader, logger) + if err := db.View(context.Background(), func(tx kv.Tx) error { + _, _, _, _, err := bd.UpdateFromDb(tx) + return err + }); err != nil { + return nil, err + } + } else { + bd = &bodydownload.BodyDownload{} } - bd := bodydownload.NewBodyDownload(engine, blockBufferSize, int(syncCfg.BodyCacheLimit), blockReader, logger) cs := &MultiClient{ - nodeName: nodeName, Hd: hd, Bd: bd, sentries: sentries, + ChainConfig: chainConfig, db: db, Engine: engine, blockReader: blockReader, + statusDataProvider: statusDataProvider, logPeerInfo: logPeerInfo, - historyV3: historyV3, sendHeaderRequestsToMultiplePeers: chainConfig.TerminalTotalDifficultyPassed, maxBlockBroadcastPeers: maxBlockBroadcastPeers, + historyV3: kvcfg.HistoryV3.FromDB(db), + disableBlockDownload: disableBlockDownload, logger: logger, } - cs.ChainConfig = chainConfig - cs.heightForks, cs.timeForks = forkid.GatherForks(cs.ChainConfig, genesisTime) - cs.genesisHash = genesisHash - cs.networkId = networkID - var err error - err = db.View(context.Background(), func(tx kv.Tx) error { - cs.headHeight, cs.headTime, cs.headHash, cs.headTd, err = cs.Bd.UpdateFromDb(tx) - return err - }) - return cs, err + + return cs, nil } func (cs *MultiClient) Sentries() []direct.SentryClient { return cs.sentries } func (cs *MultiClient) newBlockHashes66(ctx context.Context, req *proto_sentry.InboundMessage, sentry direct.SentryClient) error { + if cs.disableBlockDownload { + return nil + } + if cs.Hd.InitialCycle() && !cs.Hd.FetchingNew() { return nil } @@ -402,7 +419,11 @@ func (cs *MultiClient) blockHeaders66(ctx context.Context, in *proto_sentry.Inbo return cs.blockHeaders(ctx, pkt.BlockHeadersPacket, rlpStream, in.PeerId, sentry) } -func (cs *MultiClient) blockHeaders(ctx context.Context, pkt eth.BlockHeadersPacket, rlpStream *rlp.Stream, peerID *proto_types.H512, sentry direct.SentryClient) error { +func (cs *MultiClient) blockHeaders(ctx context.Context, pkt eth.BlockHeadersPacket, rlpStream *rlp.Stream, peerID *proto_types.H512, sentryClient direct.SentryClient) error { + if cs.disableBlockDownload { + return nil + } + if len(pkt) == 0 { // No point processing empty response return nil @@ -442,7 +463,7 @@ func (cs *MultiClient) blockHeaders(ctx context.Context, pkt eth.BlockHeadersPac return err } defer tx.Rollback() - penalties, err := cs.Hd.ProcessHeadersPOS(csHeaders, tx, sentry2.ConvertH512ToPeerID(peerID)) + penalties, err := cs.Hd.ProcessHeadersPOS(csHeaders, tx, sentry.ConvertH512ToPeerID(peerID)) if err != nil { return err } @@ -451,7 +472,7 @@ func (cs *MultiClient) blockHeaders(ctx context.Context, pkt eth.BlockHeadersPac } } else { sort.Sort(headerdownload.HeadersSort(csHeaders)) // Sorting by order of block heights - canRequestMore := cs.Hd.ProcessHeaders(csHeaders, false /* newBlock */, sentry2.ConvertH512ToPeerID(peerID)) + canRequestMore := cs.Hd.ProcessHeaders(csHeaders, false /* newBlock */, sentry.ConvertH512ToPeerID(peerID)) if canRequestMore { currentTime := time.Now() @@ -471,13 +492,17 @@ func (cs *MultiClient) blockHeaders(ctx context.Context, pkt eth.BlockHeadersPac PeerId: peerID, MinBlock: highestBlock, } - if _, err1 := sentry.PeerMinBlock(ctx, &outreq, &grpc.EmptyCallOption{}); err1 != nil { + if _, err1 := sentryClient.PeerMinBlock(ctx, &outreq, &grpc.EmptyCallOption{}); err1 != nil { cs.logger.Error("Could not send min block for peer", "err", err1) } return nil } -func (cs *MultiClient) newBlock66(ctx context.Context, inreq *proto_sentry.InboundMessage, sentry direct.SentryClient) error { +func (cs *MultiClient) newBlock66(ctx context.Context, inreq *proto_sentry.InboundMessage, sentryClient direct.SentryClient) error { + if cs.disableBlockDownload { + return nil + } + // Extract header from the block rlpStream := rlp.NewStream(bytes.NewReader(inreq.Data), uint64(len(inreq.Data))) _, err := rlpStream.List() // Now stream is at the beginning of the block record @@ -521,7 +546,7 @@ func (cs *MultiClient) newBlock66(ctx context.Context, inreq *proto_sentry.Inbou }) } - cs.Hd.ProcessHeaders(segments, true /* newBlock */, sentry2.ConvertH512ToPeerID(inreq.PeerId)) // There is only one segment in this case + cs.Hd.ProcessHeaders(segments, true /* newBlock */, sentry.ConvertH512ToPeerID(inreq.PeerId)) // There is only one segment in this case } else { outreq := proto_sentry.PenalizePeerRequest{ PeerId: inreq.PeerId, @@ -544,14 +569,18 @@ func (cs *MultiClient) newBlock66(ctx context.Context, inreq *proto_sentry.Inbou PeerId: inreq.PeerId, MinBlock: request.Block.NumberU64(), } - if _, err1 := sentry.PeerMinBlock(ctx, &outreq, &grpc.EmptyCallOption{}); err1 != nil { + if _, err1 := sentryClient.PeerMinBlock(ctx, &outreq, &grpc.EmptyCallOption{}); err1 != nil { cs.logger.Error("Could not send min block for peer", "err", err1) } - cs.logger.Trace(fmt.Sprintf("NewBlockMsg{blockNumber: %d} from [%s]", request.Block.NumberU64(), sentry2.ConvertH512ToPeerID(inreq.PeerId))) + cs.logger.Trace(fmt.Sprintf("NewBlockMsg{blockNumber: %d} from [%s]", request.Block.NumberU64(), sentry.ConvertH512ToPeerID(inreq.PeerId))) return nil } -func (cs *MultiClient) blockBodies66(ctx context.Context, inreq *proto_sentry.InboundMessage, sentry direct.SentryClient) error { +func (cs *MultiClient) blockBodies66(ctx context.Context, inreq *proto_sentry.InboundMessage, sentryClient direct.SentryClient) error { + if cs.disableBlockDownload { + return nil + } + var request eth.BlockRawBodiesPacket66 if err := rlp.DecodeBytes(inreq.Data, &request); err != nil { return fmt.Errorf("decode BlockBodiesPacket66: %w", err) @@ -561,7 +590,7 @@ func (cs *MultiClient) blockBodies66(ctx context.Context, inreq *proto_sentry.In // No point processing empty response return nil } - cs.Bd.DeliverBodies(txs, uncles, withdrawals, uint64(len(inreq.Data)), sentry2.ConvertH512ToPeerID(inreq.PeerId)) + cs.Bd.DeliverBodies(txs, uncles, withdrawals, uint64(len(inreq.Data)), sentry.ConvertH512ToPeerID(inreq.PeerId)) return nil } @@ -698,7 +727,7 @@ func (cs *MultiClient) getReceipts66(ctx context.Context, inreq *proto_sentry.In return nil } -func makeInboundMessage() *proto_sentry.InboundMessage { +func MakeInboundMessage() *proto_sentry.InboundMessage { return new(proto_sentry.InboundMessage) } @@ -750,9 +779,9 @@ func (cs *MultiClient) handleInboundMessage(ctx context.Context, inreq *proto_se } } -func (cs *MultiClient) HandlePeerEvent(ctx context.Context, event *proto_sentry.PeerEvent, sentry direct.SentryClient) error { +func (cs *MultiClient) HandlePeerEvent(ctx context.Context, event *proto_sentry.PeerEvent, sentryClient direct.SentryClient) error { eventID := event.EventId.String() - peerID := sentry2.ConvertH512ToPeerID(event.PeerId) + peerID := sentry.ConvertH512ToPeerID(event.PeerId) peerIDStr := hex.EncodeToString(peerID[:]) if !cs.logPeerInfo { @@ -764,7 +793,7 @@ func (cs *MultiClient) HandlePeerEvent(ctx context.Context, event *proto_sentry. var clientID string var capabilities []string if event.EventId == proto_sentry.PeerEvent_Connect { - reply, err := sentry.PeerById(ctx, &proto_sentry.PeerByIdRequest{PeerId: event.PeerId}) + reply, err := sentryClient.PeerById(ctx, &proto_sentry.PeerByIdRequest{PeerId: event.PeerId}) if err != nil { cs.logger.Debug("sentry.PeerById failed", "err", err) } @@ -780,20 +809,8 @@ func (cs *MultiClient) HandlePeerEvent(ctx context.Context, event *proto_sentry. return nil } -func (cs *MultiClient) makeStatusData() *proto_sentry.StatusData { - s := cs - return &proto_sentry.StatusData{ - NetworkId: s.networkId, - TotalDifficulty: gointerfaces.ConvertUint256IntToH256(s.headTd), - BestHash: gointerfaces.ConvertHashToH256(s.headHash), - MaxBlockHeight: s.headHeight, - MaxBlockTime: s.headTime, - ForkData: &proto_sentry.Forks{ - Genesis: gointerfaces.ConvertHashToH256(s.genesisHash), - HeightForks: s.heightForks, - TimeForks: s.timeForks, - }, - } +func (cs *MultiClient) makeStatusData(ctx context.Context) (*proto_sentry.StatusData, error) { + return cs.statusDataProvider.GetStatusData(ctx) } func GrpcClient(ctx context.Context, sentryAddr string) (*direct.SentryClientRemote, error) { diff --git a/p2p/sentry/simulator/sentry_simulator.go b/p2p/sentry/simulator/sentry_simulator.go index 51eb8c2de68..effc0995860 100644 --- a/p2p/sentry/simulator/sentry_simulator.go +++ b/p2p/sentry/simulator/sentry_simulator.go @@ -6,13 +6,18 @@ import ( "fmt" "path/filepath" + "github.com/ledgerwatch/log/v3" + "google.golang.org/protobuf/types/known/emptypb" + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/gointerfaces" - sentry_if "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + isentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" "github.com/ledgerwatch/erigon-lib/gointerfaces/types" - core_types "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/cmd/snapshots/sync" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" + coretypes "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/protocols/eth" @@ -22,20 +27,19 @@ import ( "github.com/ledgerwatch/erigon/p2p/sentry" "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" - "github.com/ledgerwatch/log/v3" - "google.golang.org/protobuf/types/known/emptypb" ) type server struct { - sentry_if.UnimplementedSentryServer + isentry.UnimplementedSentryServer ctx context.Context peers map[[64]byte]*p2p.Peer - messageReceivers map[sentry_if.MessageId][]sentry_if.Sentry_MessagesServer + messageReceivers map[isentry.MessageId][]isentry.Sentry_MessagesServer logger log.Logger knownSnapshots *freezeblocks.RoSnapshots activeSnapshots *freezeblocks.RoSnapshots blockReader *freezeblocks.BlockReader - downloader *TorrentClient + downloader *sync.TorrentClient + chain string } func newPeer(name string, caps []p2p.Cap) (*p2p.Peer, error) { @@ -48,7 +52,7 @@ func newPeer(name string, caps []p2p.Cap) (*p2p.Peer, error) { return p2p.NewPeer(enode.PubkeyToIDV4(&key.PublicKey), v4wire.EncodePubkey(&key.PublicKey), name, caps, true), nil } -func NewSentry(ctx context.Context, chain string, snapshotLocation string, peerCount int, logger log.Logger) (sentry_if.SentryServer, error) { +func NewSentry(ctx context.Context, chain string, snapshotLocation string, peerCount int, logger log.Logger) (isentry.SentryServer, error) { peers := map[[64]byte]*p2p.Peer{} for i := 0; i < peerCount; i++ { @@ -60,13 +64,14 @@ func NewSentry(ctx context.Context, chain string, snapshotLocation string, peerC peers[peer.Pubkey()] = peer } - cfg := snapcfg.KnownCfg(chain, 0) + cfg := snapcfg.KnownCfg(chain) + torrentDir := filepath.Join(snapshotLocation, "torrents", chain) knownSnapshots := freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{ Enabled: true, Produce: false, NoDownloader: true, - }, "", cfg.Version, logger) + }, "", 0, logger) files := make([]string, 0, len(cfg.Preverified)) @@ -81,13 +86,14 @@ func NewSentry(ctx context.Context, chain string, snapshotLocation string, peerC Enabled: true, Produce: false, NoDownloader: true, - }, snapshotLocation, cfg.Version, logger) + }, torrentDir, 0, logger) if err := activeSnapshots.ReopenFolder(); err != nil { return nil, err } - downloader, err := NewTorrentClient(ctx, chain, snapshotLocation, logger) + config := sync.NewDefaultTorrentClientConfig(chain, snapshotLocation, logger) + downloader, err := sync.NewTorrentClient(config) if err != nil { return nil, err @@ -96,12 +102,13 @@ func NewSentry(ctx context.Context, chain string, snapshotLocation string, peerC s := &server{ ctx: ctx, peers: peers, - messageReceivers: map[sentry_if.MessageId][]sentry_if.Sentry_MessagesServer{}, + messageReceivers: map[isentry.MessageId][]isentry.Sentry_MessagesServer{}, knownSnapshots: knownSnapshots, activeSnapshots: activeSnapshots, blockReader: freezeblocks.NewBlockReader(activeSnapshots, nil), logger: logger, downloader: downloader, + chain: chain, } go func() { @@ -113,10 +120,7 @@ func NewSentry(ctx context.Context, chain string, snapshotLocation string, peerC } func (s *server) Close() { - s.downloader.Close() - if closer, ok := s.downloader.cfg.DefaultStorage.(interface{ Close() error }); ok { - closer.Close() - } + _ = s.downloader.Close() s.activeSnapshots.Close() } @@ -124,7 +128,7 @@ func (s *server) NodeInfo(context.Context, *emptypb.Empty) (*types.NodeInfoReply return nil, fmt.Errorf("TODO") } -func (s *server) PeerById(ctx context.Context, in *sentry_if.PeerByIdRequest) (*sentry_if.PeerByIdReply, error) { +func (s *server) PeerById(ctx context.Context, in *isentry.PeerByIdRequest) (*isentry.PeerByIdReply, error) { peerId := sentry.ConvertH512ToPeerID(in.PeerId) peer, ok := s.peers[peerId] @@ -135,7 +139,7 @@ func (s *server) PeerById(ctx context.Context, in *sentry_if.PeerByIdRequest) (* info := peer.Info() - return &sentry_if.PeerByIdReply{ + return &isentry.PeerByIdReply{ Peer: &types.PeerInfo{ Id: info.ID, Name: info.Name, @@ -151,20 +155,20 @@ func (s *server) PeerById(ctx context.Context, in *sentry_if.PeerByIdRequest) (* }, nil } -func (s *server) PeerCount(context.Context, *sentry_if.PeerCountRequest) (*sentry_if.PeerCountReply, error) { - return &sentry_if.PeerCountReply{Count: uint64(len(s.peers))}, nil +func (s *server) PeerCount(context.Context, *isentry.PeerCountRequest) (*isentry.PeerCountReply, error) { + return &isentry.PeerCountReply{Count: uint64(len(s.peers))}, nil } -func (s *server) PeerEvents(*sentry_if.PeerEventsRequest, sentry_if.Sentry_PeerEventsServer) error { +func (s *server) PeerEvents(*isentry.PeerEventsRequest, isentry.Sentry_PeerEventsServer) error { return fmt.Errorf("TODO") } -func (s *server) PeerMinBlock(context.Context, *sentry_if.PeerMinBlockRequest) (*emptypb.Empty, error) { +func (s *server) PeerMinBlock(context.Context, *isentry.PeerMinBlockRequest) (*emptypb.Empty, error) { return nil, fmt.Errorf("TODO") } -func (s *server) Peers(context.Context, *emptypb.Empty) (*sentry_if.PeersReply, error) { - reply := &sentry_if.PeersReply{} +func (s *server) Peers(context.Context, *emptypb.Empty) (*isentry.PeersReply, error) { + reply := &isentry.PeersReply{} for _, peer := range s.peers { info := peer.Info() @@ -187,19 +191,19 @@ func (s *server) Peers(context.Context, *emptypb.Empty) (*sentry_if.PeersReply, return reply, nil } -func (s *server) SendMessageById(ctx context.Context, in *sentry_if.SendMessageByIdRequest) (*sentry_if.SentPeers, error) { +func (s *server) SendMessageById(ctx context.Context, in *isentry.SendMessageByIdRequest) (*isentry.SentPeers, error) { peerId := sentry.ConvertH512ToPeerID(in.PeerId) if err := s.sendMessageById(ctx, peerId, in.Data); err != nil { return nil, err } - return &sentry_if.SentPeers{ + return &isentry.SentPeers{ Peers: []*types.H512{in.PeerId}, }, nil } -func (s *server) sendMessageById(ctx context.Context, peerId [64]byte, messageData *sentry_if.OutboundMessageData) error { +func (s *server) sendMessageById(ctx context.Context, peerId [64]byte, messageData *isentry.OutboundMessageData) error { peer, ok := s.peers[peerId] if !ok { @@ -207,7 +211,7 @@ func (s *server) sendMessageById(ctx context.Context, peerId [64]byte, messageDa } switch messageData.Id { - case sentry_if.MessageId_GET_BLOCK_HEADERS_65: + case isentry.MessageId_GET_BLOCK_HEADERS_65: packet := ð.GetBlockHeadersPacket{} if err := rlp.DecodeBytes(messageData.Data, packet); err != nil { return fmt.Errorf("failed to decode packet: %w", err) @@ -215,7 +219,7 @@ func (s *server) sendMessageById(ctx context.Context, peerId [64]byte, messageDa go s.processGetBlockHeaders(ctx, peer, 0, packet) - case sentry_if.MessageId_GET_BLOCK_HEADERS_66: + case isentry.MessageId_GET_BLOCK_HEADERS_66: packet := ð.GetBlockHeadersPacket66{} if err := rlp.DecodeBytes(messageData.Data, packet); err != nil { return fmt.Errorf("failed to decode packet: %w", err) @@ -230,12 +234,12 @@ func (s *server) sendMessageById(ctx context.Context, peerId [64]byte, messageDa return nil } -func (s *server) SendMessageByMinBlock(ctx context.Context, request *sentry_if.SendMessageByMinBlockRequest) (*sentry_if.SentPeers, error) { +func (s *server) SendMessageByMinBlock(ctx context.Context, request *isentry.SendMessageByMinBlockRequest) (*isentry.SentPeers, error) { return s.UnimplementedSentryServer.SendMessageByMinBlock(ctx, request) } -func (s *server) SendMessageToAll(ctx context.Context, data *sentry_if.OutboundMessageData) (*sentry_if.SentPeers, error) { - sentPeers := &sentry_if.SentPeers{} +func (s *server) SendMessageToAll(ctx context.Context, data *isentry.OutboundMessageData) (*isentry.SentPeers, error) { + sentPeers := &isentry.SentPeers{} for _, peer := range s.peers { peerKey := peer.Pubkey() @@ -250,8 +254,8 @@ func (s *server) SendMessageToAll(ctx context.Context, data *sentry_if.OutboundM return sentPeers, nil } -func (s *server) SendMessageToRandomPeers(ctx context.Context, request *sentry_if.SendMessageToRandomPeersRequest) (*sentry_if.SentPeers, error) { - sentPeers := &sentry_if.SentPeers{} +func (s *server) SendMessageToRandomPeers(ctx context.Context, request *isentry.SendMessageToRandomPeersRequest) (*isentry.SentPeers, error) { + sentPeers := &isentry.SentPeers{} var i uint64 @@ -275,7 +279,7 @@ func (s *server) SendMessageToRandomPeers(ctx context.Context, request *sentry_i } -func (s *server) Messages(request *sentry_if.MessagesRequest, receiver sentry_if.Sentry_MessagesServer) error { +func (s *server) Messages(request *isentry.MessagesRequest, receiver isentry.Sentry_MessagesServer) error { for _, messageId := range request.Ids { receivers := s.messageReceivers[messageId] s.messageReceivers[messageId] = append(receivers, receiver) @@ -287,8 +291,8 @@ func (s *server) Messages(request *sentry_if.MessagesRequest, receiver sentry_if } func (s *server) processGetBlockHeaders(ctx context.Context, peer *p2p.Peer, requestId uint64, request *eth.GetBlockHeadersPacket) { - r65 := s.messageReceivers[sentry_if.MessageId_BLOCK_HEADERS_65] - r66 := s.messageReceivers[sentry_if.MessageId_BLOCK_HEADERS_66] + r65 := s.messageReceivers[isentry.MessageId_BLOCK_HEADERS_65] + r66 := s.messageReceivers[isentry.MessageId_BLOCK_HEADERS_66] if len(r65)+len(r66) > 0 { @@ -313,8 +317,8 @@ func (s *server) processGetBlockHeaders(ctx context.Context, peer *p2p.Peer, req } for _, receiver := range r65 { - receiver.Send(&sentry_if.InboundMessage{ - Id: sentry_if.MessageId_BLOCK_HEADERS_65, + receiver.Send(&isentry.InboundMessage{ + Id: isentry.MessageId_BLOCK_HEADERS_65, Data: data.Bytes(), PeerId: peerId, }) @@ -335,8 +339,8 @@ func (s *server) processGetBlockHeaders(ctx context.Context, peer *p2p.Peer, req } for _, receiver := range r66 { - receiver.Send(&sentry_if.InboundMessage{ - Id: sentry_if.MessageId_BLOCK_HEADERS_66, + receiver.Send(&isentry.InboundMessage{ + Id: isentry.MessageId_BLOCK_HEADERS_66, Data: data.Bytes(), PeerId: peerId, }) @@ -402,7 +406,7 @@ func (s *server) getHeaders(ctx context.Context, origin eth.HashOrNumber, amount return headers, nil } -func (s *server) getHeader(ctx context.Context, blockNum uint64) (*core_types.Header, error) { +func (s *server) getHeader(ctx context.Context, blockNum uint64) (*coretypes.Header, error) { header, err := s.blockReader.Header(ctx, nil, common.Hash{}, blockNum) if err != nil { @@ -419,7 +423,7 @@ func (s *server) getHeader(ctx context.Context, blockNum uint64) (*core_types.He } } - s.activeSnapshots.ReopenSegments([]snaptype.Type{snaptype.Headers}) + s.activeSnapshots.ReopenSegments([]snaptype.Type{coresnaptype.Headers}, true) header, err = s.blockReader.Header(ctx, nil, common.Hash{}, blockNum) @@ -431,23 +435,25 @@ func (s *server) getHeader(ctx context.Context, blockNum uint64) (*core_types.He return header, nil } -func (s *server) getHeaderByHash(ctx context.Context, hash common.Hash) (*core_types.Header, error) { +func (s *server) getHeaderByHash(ctx context.Context, hash common.Hash) (*coretypes.Header, error) { return s.blockReader.HeaderByHash(ctx, nil, hash) } -func (s *server) downloadHeaders(ctx context.Context, header *freezeblocks.HeaderSegment) error { - fileName := snaptype.SegmentFileName(s.knownSnapshots.Version(), header.From(), header.To(), snaptype.Headers) +func (s *server) downloadHeaders(ctx context.Context, header *freezeblocks.Segment) error { + fileName := snaptype.SegmentFileName(0, header.From(), header.To(), coresnaptype.Enums.Headers) + session := sync.NewTorrentSession(s.downloader, s.chain) - s.logger.Info(fmt.Sprintf("Downloading %s", fileName)) + s.logger.Info("Downloading", "file", fileName) - err := s.downloader.Download(ctx, fileName) + err := session.Download(ctx, fileName) if err != nil { return fmt.Errorf("can't download %s: %w", fileName, err) } - s.logger.Info(fmt.Sprintf("Indexing %s", fileName)) + s.logger.Info("Indexing", "file", fileName) + + info, _, _ := snaptype.ParseFileName(session.LocalFsRoot(), fileName) - return freezeblocks.HeadersIdx(ctx, - filepath.Join(s.downloader.LocalFsRoot(), fileName), s.knownSnapshots.Version(), header.From(), s.downloader.LocalFsRoot(), nil, log.LvlDebug, s.logger) + return coresnaptype.Headers.BuildIndexes(ctx, info, nil, session.LocalFsRoot(), nil, log.LvlDebug, s.logger) } diff --git a/p2p/sentry/simulator/syncutil.go b/p2p/sentry/simulator/syncutil.go deleted file mode 100644 index c38877b4fc3..00000000000 --- a/p2p/sentry/simulator/syncutil.go +++ /dev/null @@ -1,195 +0,0 @@ -package simulator - -import ( - "context" - "fmt" - "io/fs" - "os" - "path/filepath" - "runtime" - - "github.com/anacrolix/torrent" - "github.com/anacrolix/torrent/metainfo" - "github.com/anacrolix/torrent/storage" - "github.com/c2h5oh/datasize" - "github.com/ledgerwatch/erigon-lib/chain/snapcfg" - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon-lib/downloader" - "github.com/ledgerwatch/erigon-lib/downloader/downloadercfg" - "github.com/ledgerwatch/erigon-lib/downloader/snaptype" - "github.com/ledgerwatch/erigon/cmd/downloader/downloadernat" - "github.com/ledgerwatch/erigon/cmd/utils" - "github.com/ledgerwatch/erigon/p2p/nat" - "github.com/ledgerwatch/erigon/params" - "github.com/ledgerwatch/log/v3" - "golang.org/x/sync/errgroup" -) - -// The code in this file is taken from cmd/snapshots - which is yet to be merged -// to devel - once tthat is done this file can be removed - -type TorrentClient struct { - *torrent.Client - cfg *torrent.ClientConfig - items map[string]snapcfg.PreverifiedItem -} - -func NewTorrentClient(ctx context.Context, chain string, torrentDir string, logger log.Logger) (*TorrentClient, error) { - - relativeDataDir := torrentDir - if torrentDir != "" { - var err error - absdatadir, err := filepath.Abs(torrentDir) - if err != nil { - panic(err) - } - torrentDir = absdatadir - } - - dirs := datadir.Dirs{ - RelativeDataDir: relativeDataDir, - DataDir: torrentDir, - Snap: torrentDir, - } - - webseedsList := common.CliString2Array(utils.WebSeedsFlag.Value) - - if known, ok := snapcfg.KnownWebseeds[chain]; ok { - webseedsList = append(webseedsList, known...) - } - - var downloadRate, uploadRate datasize.ByteSize - - if err := downloadRate.UnmarshalText([]byte(utils.TorrentDownloadRateFlag.Value)); err != nil { - return nil, err - } - - if err := uploadRate.UnmarshalText([]byte(utils.TorrentUploadRateFlag.Value)); err != nil { - return nil, err - } - - logLevel, _, err := downloadercfg.Int2LogLevel(utils.TorrentVerbosityFlag.Value) - - if err != nil { - return nil, err - } - - version := "erigon: " + params.VersionWithCommit(params.GitCommit) - - cfg, err := downloadercfg.New(dirs, version, logLevel, downloadRate, uploadRate, - utils.TorrentPortFlag.Value, utils.TorrentConnsPerFileFlag.Value, 0, nil, webseedsList, chain) - - if err != nil { - return nil, err - } - - if err := os.MkdirAll(torrentDir, 0755); err != nil { - return nil, err - } - - cfg.ClientConfig.DataDir = torrentDir - - cfg.ClientConfig.PieceHashersPerTorrent = 32 * runtime.NumCPU() - cfg.ClientConfig.DisableIPv6 = utils.DisableIPV6.Value - cfg.ClientConfig.DisableIPv4 = utils.DisableIPV4.Value - - natif, err := nat.Parse(utils.NATFlag.Value) - - if err != nil { - return nil, fmt.Errorf("invalid nat option %s: %w", utils.NATFlag.Value, err) - } - - downloadernat.DoNat(natif, cfg.ClientConfig, logger) - - cfg.ClientConfig.DefaultStorage = storage.NewMMap(torrentDir) - - cli, err := torrent.NewClient(cfg.ClientConfig) - - if err != nil { - return nil, fmt.Errorf("can't create torrent client: %w", err) - } - - items := map[string]snapcfg.PreverifiedItem{} - for _, it := range snapcfg.KnownCfg(chain, 0).Preverified { - items[it.Name] = it - } - - return &TorrentClient{cli, cfg.ClientConfig, items}, nil -} - -func (s *TorrentClient) LocalFsRoot() string { - return s.cfg.DataDir -} - -func (s *TorrentClient) Download(ctx context.Context, files ...string) error { - g, ctx := errgroup.WithContext(ctx) - g.SetLimit(len(files)) - - for _, f := range files { - file := f - - g.Go(func() error { - it, ok := s.items[file] - - if !ok { - return fs.ErrNotExist - } - - t, err := func() (*torrent.Torrent, error) { - infoHash := snaptype.Hex2InfoHash(it.Hash) - - for _, t := range s.Torrents() { - if t.Name() == file { - return t, nil - } - } - - mi := &metainfo.MetaInfo{AnnounceList: downloader.Trackers} - magnet := mi.Magnet(&infoHash, &metainfo.Info{Name: file}) - spec, err := torrent.TorrentSpecFromMagnetUri(magnet.String()) - - if err != nil { - return nil, err - } - - spec.DisallowDataDownload = true - - t, _, err := s.AddTorrentSpec(spec) - if err != nil { - return nil, err - } - - return t, nil - }() - - if err != nil { - return err - } - - select { - case <-ctx.Done(): - return ctx.Err() - case <-t.GotInfo(): - } - - if !t.Complete.Bool() { - t.AllowDataDownload() - t.DownloadAll() - select { - case <-ctx.Done(): - return ctx.Err() - case <-t.Complete.On(): - } - } - - closed := t.Closed() - t.Drop() - <-closed - - return nil - }) - } - - return g.Wait() -} diff --git a/p2p/sentry/status_data_provider.go b/p2p/sentry/status_data_provider.go new file mode 100644 index 00000000000..83da0d3bad3 --- /dev/null +++ b/p2p/sentry/status_data_provider.go @@ -0,0 +1,146 @@ +package sentry + +import ( + "context" + "errors" + "fmt" + "math/big" + + "github.com/holiman/uint256" + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/chain" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/gointerfaces" + proto_sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/core/forkid" + "github.com/ledgerwatch/erigon/core/rawdb" + "github.com/ledgerwatch/erigon/core/types" +) + +var ErrNoHead = errors.New("ReadChainHead: ReadCurrentHeader error") + +type ChainHead struct { + HeadHeight uint64 + HeadTime uint64 + HeadHash libcommon.Hash + HeadTd *uint256.Int +} + +type StatusDataProvider struct { + db kv.RoDB + + networkId uint64 + genesisHash libcommon.Hash + genesisHead ChainHead + heightForks []uint64 + timeForks []uint64 + + logger log.Logger +} + +func NewStatusDataProvider( + db kv.RoDB, + chainConfig *chain.Config, + genesis *types.Block, + networkId uint64, + logger log.Logger, +) *StatusDataProvider { + s := &StatusDataProvider{ + db: db, + networkId: networkId, + genesisHash: genesis.Hash(), + genesisHead: makeGenesisChainHead(genesis), + logger: logger, + } + + s.heightForks, s.timeForks = forkid.GatherForks(chainConfig, genesis.Time()) + + return s +} + +func uint256FromBigInt(num *big.Int) (*uint256.Int, error) { + if num == nil { + num = new(big.Int) + } + num256 := new(uint256.Int) + overflow := num256.SetFromBig(num) + if overflow { + return nil, fmt.Errorf("uint256FromBigInt: big.Int greater than 2^256-1") + } + return num256, nil +} + +func makeGenesisChainHead(genesis *types.Block) ChainHead { + genesisDifficulty, err := uint256FromBigInt(genesis.Difficulty()) + if err != nil { + panic(fmt.Errorf("makeGenesisChainHead: difficulty conversion error: %w", err)) + } + + return ChainHead{ + HeadHeight: genesis.NumberU64(), + HeadTime: genesis.Time(), + HeadHash: genesis.Hash(), + HeadTd: genesisDifficulty, + } +} + +func (s *StatusDataProvider) makeStatusData(head ChainHead) *proto_sentry.StatusData { + return &proto_sentry.StatusData{ + NetworkId: s.networkId, + TotalDifficulty: gointerfaces.ConvertUint256IntToH256(head.HeadTd), + BestHash: gointerfaces.ConvertHashToH256(head.HeadHash), + MaxBlockHeight: head.HeadHeight, + MaxBlockTime: head.HeadTime, + ForkData: &proto_sentry.Forks{ + Genesis: gointerfaces.ConvertHashToH256(s.genesisHash), + HeightForks: s.heightForks, + TimeForks: s.timeForks, + }, + } +} + +func (s *StatusDataProvider) GetStatusData(ctx context.Context) (*proto_sentry.StatusData, error) { + chainHead, err := ReadChainHead(ctx, s.db) + if err != nil { + if errors.Is(err, ErrNoHead) { + s.logger.Warn("sentry.StatusDataProvider: The canonical chain current header not found in the database. Check the database consistency. Using genesis as a fallback.") + return s.makeStatusData(s.genesisHead), nil + } + return nil, err + } + return s.makeStatusData(chainHead), err +} + +func ReadChainHeadWithTx(tx kv.Tx) (ChainHead, error) { + header := rawdb.ReadCurrentHeaderHavingBody(tx) + if header == nil { + return ChainHead{}, ErrNoHead + } + + height := header.Number.Uint64() + hash := header.Hash() + time := header.Time + + td, err := rawdb.ReadTd(tx, hash, height) + if err != nil { + return ChainHead{}, fmt.Errorf("ReadChainHead: ReadTd error at height %d and hash %s: %w", height, hash, err) + } + td256, err := uint256FromBigInt(td) + if err != nil { + return ChainHead{}, fmt.Errorf("ReadChainHead: total difficulty conversion error: %w", err) + } + + return ChainHead{height, time, hash, td256}, nil +} + +func ReadChainHead(ctx context.Context, db kv.RoDB) (ChainHead, error) { + var head ChainHead + var err error + err = db.View(ctx, func(tx kv.Tx) error { + head, err = ReadChainHeadWithTx(tx) + return err + }) + return head, err +} diff --git a/p2p/server.go b/p2p/server.go index c42f88d0355..1897da93c45 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -34,7 +34,6 @@ import ( "golang.org/x/sync/semaphore" - "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon/common" @@ -204,8 +203,8 @@ type Server struct { newPeerHook func(*Peer) listenFunc func(network, addr string) (net.Listener, error) - lock sync.Mutex // protects running - running bool + lock sync.Mutex // protects whole bunch of stuff + running atomic.Bool listener net.Listener ourHandshake *protoHandshake @@ -235,7 +234,9 @@ type Server struct { // State of run loop and listenLoop. inboundHistory expHeap - errors map[string]uint + + errorsMu sync.Mutex + errors map[string]uint } type peerOpFunc func(map[enode.ID]*Peer) @@ -419,29 +420,25 @@ func (srv *Server) SubscribeEvents(ch chan *PeerEvent) event.Subscription { } // Self returns the local node's endpoint information. -func (srv *Server) Self() *enode.Node { - srv.lock.Lock() - ln := srv.localnode - srv.lock.Unlock() - - if ln == nil { - return enode.NewV4(&srv.PrivateKey.PublicKey, net.ParseIP("0.0.0.0"), 0, 0) +func (srv *Server) Self() (ln *enode.Node) { + if srv.localnode != nil { + return srv.localnode.Node() } - return ln.Node() + return enode.NewV4(&srv.PrivateKey.PublicKey, net.ParseIP("0.0.0.0"), 0, 0) } // Stop terminates the server and all active peer connections. // It blocks until all active connections have been closed. func (srv *Server) Stop() { srv.lock.Lock() - if !srv.running { + if !srv.running.Load() { if srv.nodedb != nil { srv.nodedb.Close() } srv.lock.Unlock() return } - srv.running = false + srv.running.Store(false) srv.quitFunc() if srv.listener != nil { // this unblocks listener Accept @@ -479,20 +476,15 @@ func (s *sharedUDPConn) ReadFromUDP(b []byte) (n int, addr *net.UDPAddr, err err func (s *sharedUDPConn) Close() error { return nil } -func (srv *Server) Running() bool { - srv.lock.Lock() - defer srv.lock.Unlock() - return srv.running -} // Start starts running the server. // Servers can not be re-used after stopping. func (srv *Server) Start(ctx context.Context, logger log.Logger) error { - srv.lock.Lock() - defer srv.lock.Unlock() - if srv.running { + if srv.running.Load() { return errors.New("server already running") } + srv.lock.Lock() + defer srv.lock.Unlock() srv.logger = logger if srv.clock == nil { @@ -538,7 +530,7 @@ func (srv *Server) Start(ctx context.Context, logger log.Logger) error { } srv.setupDialScheduler() - srv.running = true + srv.running.Store(true) srv.loopWG.Add(1) go srv.run() return nil @@ -864,14 +856,7 @@ running: } case <-logTimer.C: vals := []interface{}{"protocol", srv.Config.Protocols[0].Version, "peers", len(peers), "trusted", len(trusted), "inbound", inboundCount} - - func() { - srv.lock.Lock() - defer srv.lock.Unlock() - for err, count := range srv.errors { - vals = append(vals, err, count) - } - }() + vals = append(vals, srv.listErrors()...) srv.logger.Debug("[p2p] Server", vals...) } @@ -922,11 +907,11 @@ func (srv *Server) postHandshakeChecks(peers map[enode.ID]*Peer, inboundCount in func (srv *Server) listenLoop(ctx context.Context) { srv.logger.Trace("TCP listener up", "addr", srv.listener.Addr()) + srv.resetErrors() + // The slots limit accepts of new connections. slots := semaphore.NewWeighted(int64(srv.MaxPendingPeers)) - srv.errors = map[string]uint{} - // Wait for slots to be returned on exit. This ensures all connection goroutines // are down before listenLoop returns. defer func() { @@ -1029,27 +1014,9 @@ func (srv *Server) SetupConn(fd net.Conn, flags connFlag, dialDest *enode.Node) return err } -func cleanError(err string) string { - switch { - case strings.HasSuffix(err, "i/o timeout"): - return "i/o timeout" - case strings.HasSuffix(err, "closed by the remote host."): - return "closed by remote" - case strings.HasSuffix(err, "connection reset by peer"): - return "closed by remote" - default: - return err - } -} - func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) error { // Prevent leftover pending conns from entering the handshake. - srv.lock.Lock() - running := srv.running - // reset error counts - srv.errors = map[string]uint{} - srv.lock.Unlock() - if !running { + if !srv.running.Load() { return errServerStopped } @@ -1067,10 +1034,7 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro // Run the RLPx handshake. remotePubkey, err := c.doEncHandshake(srv.PrivateKey) if err != nil { - errStr := cleanError(err.Error()) - srv.lock.Lock() - srv.errors[errStr] = srv.errors[errStr] + 1 - srv.lock.Unlock() + srv.addError(err) srv.logger.Trace("Failed RLPx handshake", "addr", c.fd.RemoteAddr(), "conn", c.flags, "err", err) return err } @@ -1090,10 +1054,7 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro // Run the capability negotiation handshake. phs, err := c.doProtoHandshake(srv.ourHandshake) if err != nil { - errStr := cleanError(err.Error()) - srv.lock.Lock() - srv.errors[errStr] = srv.errors[errStr] + 1 - srv.lock.Unlock() + srv.addError(err) clog.Trace("Failed p2p handshake", "err", err) return err } @@ -1228,7 +1189,6 @@ func (srv *Server) PeersInfo() []*PeerInfo { for _, peer := range srv.Peers() { if peer != nil { infos = append(infos, peer.Info()) - peer.ResetDiagnosticsCounters() } } // Sort the result array alphabetically by node identifier @@ -1242,16 +1202,41 @@ func (srv *Server) PeersInfo() []*PeerInfo { return infos } -// PeersInfo returns an array of metadata objects describing connected peers. -func (srv *Server) DiagnosticsPeersInfo() map[string]*diagnostics.PeerStatistics { - // Gather all the generic and sub-protocol specific infos - infos := make(map[string]*diagnostics.PeerStatistics) - for _, peer := range srv.Peers() { - if peer != nil { - infos[peer.ID().String()] = peer.DiagInfo() - peer.ResetDiagnosticsCounters() - } +func (srv *Server) addError(err error) { + srv.errorsMu.Lock() + defer srv.errorsMu.Unlock() + if srv.errors == nil { + srv.errors = make(map[string]uint) } + srv.errors[cleanError(err.Error())]++ +} - return infos +func (srv *Server) resetErrors() { + srv.errorsMu.Lock() + srv.errors = map[string]uint{} + srv.errorsMu.Unlock() +} + +func (srv *Server) listErrors() []interface{} { + srv.errorsMu.Lock() + defer srv.errorsMu.Unlock() + + list := make([]interface{}, 0, len(srv.errors)*2) + for err, count := range srv.errors { + list = append(list, err, count) + } + return list +} + +func cleanError(err string) string { + switch { + case strings.HasSuffix(err, "i/o timeout"): + return "i/o timeout" + case strings.HasSuffix(err, "closed by the remote host."): + return "closed by remote" + case strings.HasSuffix(err, "connection reset by peer"): + return "closed by remote" + default: + return err + } } diff --git a/params/bootnodes.go b/params/bootnodes.go index 5e7734c7484..20132b92bbe 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -120,30 +120,21 @@ var BorMainnetBootnodes = []string{ } var GnosisBootnodes = []string{ - "enode://6765fff89db92aa8d923e28c438af626c8ae95a43093cdccbd6f550a7b6ce6ab5d1a3dc60dd79af3e6d2c2e6731bae629f0e54446a0d9da408c4eca7ebcd8485@3.75.159.31:30303", - "enode://9a7c98e8ee8cdd3199db68092b48868847d4743a471b26afc2ff878bafaa829ed43ee405f9aff58ae13fce53b898f7c2e3c30cb80af8eb111682c3c13f686dbb@18.198.130.54:30303", - "enode://2c4307831914c237801993eac4f9596d8b2f78e1e76830419b64cb23f0933e52cb1e2bb3009cb4af76454bb5bc296135b36869fd6c13e2c2e536a0780e60fe82@3.64.242.196:30303", - "enode://074f68e1a7df5b0859314ff721d55b59d9690e93249c941660609a29b302f02864df4f93ee48884f7ede57dc7f7646379d017a43c9745e34baff049749896b50@3.126.169.151:30303", - "enode://d239697375d7586c7ea1de790401c310b0b1d389326849fa3b7c7005833c7a6b9020e49dfb3b61abfa39135237ffc4ff219cb84ca7653069e8548497527aa432@107.22.4.120:30303", - "enode://d5852bf415d89b756faa809f4ff3f8beb661dc7d60cfb4a5542f9a5fcdf41e1ed0708a210db64b8c7ca32426e04ef0a50da58974124fdf562a8510314d11e28c@3.26.206.142:30303", - "enode://01d372392bb22dd8a91f8b10b6bbb8d80d2dbe98d695801e0df9e4bd4825781df84bba88361f24d1b6580a61313f64e6cec82e8d842ad5f1b3d7cf8d6d132da7@15.152.45.82:30303", - "enode://aee88e803b8e54925081957965b2527961cd90f4d6d14664884580b429da44729678a1258a8b49a42d1582c9c7c5ded05733622f7ab442ad9c6f655545a5ecdd@54.207.220.169:30303", "enode://fb14d72321ee823fcf21e163091849ee42e0f6ac0cddc737d79e324b0a734c4fc51823ef0a96b749c954483c25e8d2e534d1d5fc2619ea22d58671aff96f5188@65.109.103.148:30303", "enode://40f40acd78004650cce57aa302de9acbf54becf91b609da93596a18979bb203ba79fcbee5c2e637407b91be23ce72f0cc13dfa38d13e657005ce842eafb6b172@65.109.103.149:30303", "enode://9e50857aa48a7a31bc7b46957e8ced0ef69a7165d3199bea924cb6d02b81f1f35bd8e29d21a54f4a331316bf09bb92716772ea76d3ef75ce027699eccfa14fad@141.94.97.22:30303", "enode://96dc133ce3aeb5d9430f1dce1d77a36418c8789b443ae0445f06f73c6b363f5b35c019086700a098c3e6e54974d64f37e97d72a5c711d1eae34dc06e3e00eed5@141.94.97.74:30303", "enode://516cbfbe9bbf26b6395ed68b24e383401fc33e7fe96b9d235ebca86c9f812fde8d33a7dbebc0fb5595459d2c5cc6381595d96507af89e6b48b5bdd0ebf8af0c0@141.94.97.84:30303", "enode://fc86a93545c56322dd861180b76632b9baeb65af8f304269b489b4623ae060847569c3c3c10c4b39baf221a2cdefea66efabce061a542cdcda374cbba45aa3d4@51.68.39.206:30303", + "enode://0e6dd3815a627893515465130c1e95aa73b18fe2f723b2467f3abf94df9be036f27595f301b5e78750ad128e59265f980c92033ae903330c0460c40ae088c04a@35.210.37.245:30303", + "enode://b72d6233d50bef7b31c09f3ea39459257520178f985a872bbaa4e371ed619455b7671053ffe985af1b5fb3270606e2a49e4e67084debd75e6c9b93e227c5b01c@35.210.156.59:30303", } var ChiadoBootnodes = []string{ - "enode://7dd44af6138120f328bb031eb56e00985c149319d4f1e33275b30be7fddadd8ccd9f7b9c3b35a16136a61e85b2b2d1de073f30ec1d0ddf576a33be8ff48d88d0@139.144.26.89:30303", - "enode://317b9cee65ccf1d747b00e604242bfa3ae367beee8f149e28c5b2b88820f855ea7b5a75eb5327cfc3d8ca97adbf71538468290a46592ed7009f3fb394ec752f1@139.144.26.115:30303", - "enode://b77ae97906155ebbb83fd32c87ab0aa57372a24abbd8aa4bae679f048b726de4a195709f613be4981e44b24640bc89e4824427d94e9a37afc148da8250c8ab2d@139.144.26.101:30303", - "enode://69f8abfa3b0221161f8c19014b90857a18742554af27af73fd779c486728750a0ff11b873975f104fc5276a3a7c3b5b68cb3c26c815e9f78462901895d652124@139.144.26.85:30303", - "enode://ac7fc76f9b2ab343fb2d091365a7f46d17018e525cbedfbf24b247c76657e934ef4df61cc2f6dad6bfcf722425e03e1a8a6e4e4b52743acc2319cb8ebf27d742@170.187.154.239:30303", "enode://712144ac396fd2298b3e2559e2930d7f3a36fded3addd66955224958f1845634067717ab9522757ed2948f480fc52add5676487c8378e9011a7e2c0ac2f36cc3@3.71.132.231:30303", "enode://595160631241ea41b187b85716f9f9572a266daa940d74edbe3b83477264ce284d69208e61cf50e91641b1b4f9a03fa8e60eb73d435a84cf4616b1c969bc2512@3.69.35.13:30303", + "enode://5abc2f73f81ea6b94f1e1b1e376731fc662ecd7863c4c7bc83ec307042542a64feab5af7985d52b3b1432acf3cb82460b327d0b6b70cb732afb1e5a16d6b1e58@35.206.174.92:30303", + "enode://f7e62226a64a2ccc0ada8b032b33c4389464562f87135a3e0d5bdb814fab717d58db5d142c453b071d08b4e0ffd9c5aff4a6d4441c2041401634f10d7962f885@35.210.126.23:30303", } const dnsPrefix = "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@" @@ -160,6 +151,8 @@ func KnownDNSNetwork(genesis libcommon.Hash, protocol string) string { net = "goerli" case SepoliaGenesisHash: net = "sepolia" + case HoleskyGenesisHash: + net = "holesky" default: return "" } diff --git a/params/chainspecs/amoy.json b/params/chainspecs/amoy.json index 64c5f51b21d..b753f752858 100644 --- a/params/chainspecs/amoy.json +++ b/params/chainspecs/amoy.json @@ -1,5 +1,5 @@ { - "ChainName": "amoy", + "chainName": "amoy", "chainId": 80002, "consensus": "bor", "homesteadBlock": 0, @@ -38,7 +38,8 @@ "jaipurBlock": 73100, "delhiBlock": 73100, "indoreBlock": 73100, - "agraBlock": 73100 + "agraBlock": 73100, + "napoliBlock": 5423600 } } \ No newline at end of file diff --git a/params/chainspecs/bor-devnet.json b/params/chainspecs/bor-devnet.json index e41007f9535..3cbdb93a2a0 100644 --- a/params/chainspecs/bor-devnet.json +++ b/params/chainspecs/bor-devnet.json @@ -1,5 +1,5 @@ { - "ChainName": "bor-devnet", + "chainName": "bor-devnet", "chainId": 1337, "consensus": "bor", "homesteadBlock": 0, @@ -51,6 +51,7 @@ "jaipurBlock": 0, "delhiBlock": 0, "indoreBlock": 0, - "agraBlock": 100 + "agraBlock": 100, + "napoliBlock": 100 } } diff --git a/params/chainspecs/bor-mainnet.json b/params/chainspecs/bor-mainnet.json index 31bfe8da041..8bbfccffc6e 100644 --- a/params/chainspecs/bor-mainnet.json +++ b/params/chainspecs/bor-mainnet.json @@ -1,5 +1,5 @@ { - "ChainName": "bor-mainnet", + "chainName": "bor-mainnet", "chainId": 137, "consensus": "bor", "homesteadBlock": 0, @@ -64,6 +64,7 @@ "jaipurBlock": 23850000, "delhiBlock": 38189056, "indoreBlock": 44934656, - "agraBlock": 50523000 + "agraBlock": 50523000, + "napoliBlock": 54876000 } } diff --git a/params/chainspecs/chiado.json b/params/chainspecs/chiado.json index cc642d266f2..72b7a99682a 100644 --- a/params/chainspecs/chiado.json +++ b/params/chainspecs/chiado.json @@ -1,5 +1,5 @@ { - "ChainName": "chiado", + "chainName": "chiado", "chainId": 10200, "consensus": "aura", "homesteadBlock": 0, @@ -22,6 +22,9 @@ "maxBlobGasPerBlock": 262144, "targetBlobGasPerBlock": 131072, "blobGasPriceUpdateFraction": 1112826, + "noPruneContracts": { + "0xb97036A26259B7147018913bD58a774cf91acf25": true + }, "aura": { "stepDuration": 5, "blockReward": 0, diff --git a/params/chainspecs/gnosis.json b/params/chainspecs/gnosis.json index a547608954e..834ed7e6dfd 100644 --- a/params/chainspecs/gnosis.json +++ b/params/chainspecs/gnosis.json @@ -1,5 +1,5 @@ { - "ChainName": "gnosis", + "chainName": "gnosis", "chainId": 100, "consensus": "aura", "homesteadBlock": 0, @@ -17,10 +17,14 @@ "terminalTotalDifficulty": 8626000000000000000000058750000000000000000000, "terminalTotalDifficultyPassed": true, "shanghaiTime": 1690889660, + "cancunTime": 1710181820, "minBlobGasPrice": 1000000000, "maxBlobGasPerBlock": 262144, "targetBlobGasPerBlock": 131072, "blobGasPriceUpdateFraction": 1112826, + "noPruneContracts": { + "0x0B98057eA310F4d31F2a452B414647007d1645d9": true + }, "aura": { "stepDuration": 5, "blockReward": 0, diff --git a/params/chainspecs/goerli.json b/params/chainspecs/goerli.json index 4bf04baa184..f8839fb6cd1 100644 --- a/params/chainspecs/goerli.json +++ b/params/chainspecs/goerli.json @@ -1,5 +1,5 @@ { - "ChainName": "goerli", + "chainName": "goerli", "chainId": 5, "consensus": "clique", "homesteadBlock": 0, @@ -18,5 +18,8 @@ "clique": { "period": 15, "epoch": 30000 + }, + "noPruneContracts": { + "0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b": true } } diff --git a/params/chainspecs/holesky.json b/params/chainspecs/holesky.json index e582e406008..de44186a888 100644 --- a/params/chainspecs/holesky.json +++ b/params/chainspecs/holesky.json @@ -14,5 +14,8 @@ "terminalTotalDifficulty": 0, "terminalTotalDifficultyPassed": true, "shanghaiTime": 1696000704, - "cancunTime": 1707305664 + "cancunTime": 1707305664, + "noPruneContracts": { + "0x4242424242424242424242424242424242424242": true + } } \ No newline at end of file diff --git a/params/chainspecs/mainnet.json b/params/chainspecs/mainnet.json index 2de0e0b8394..7d73ec6470b 100644 --- a/params/chainspecs/mainnet.json +++ b/params/chainspecs/mainnet.json @@ -1,5 +1,5 @@ { - "ChainName": "mainnet", + "chainName": "mainnet", "chainId": 1, "consensus": "ethash", "homesteadBlock": 1150000, @@ -18,5 +18,9 @@ "terminalTotalDifficulty": 58750000000000000000000, "terminalTotalDifficultyPassed": true, "shanghaiTime": 1681338455, - "ethash": {} + "cancunTime": 1710338135, + "ethash": {}, + "noPruneContracts": { + "0x00000000219ab540356cBB839Cbe05303d7705Fa": true + } } diff --git a/params/chainspecs/mumbai.json b/params/chainspecs/mumbai.json index 3a61eb1acd1..6da0a68c4c5 100644 --- a/params/chainspecs/mumbai.json +++ b/params/chainspecs/mumbai.json @@ -1,5 +1,5 @@ { - "ChainName": "mumbai", + "chainName": "mumbai", "chainId": 80001, "consensus": "bor", "homesteadBlock": 0, @@ -58,6 +58,7 @@ "jaipurBlock": 22770000, "delhiBlock": 29638656, "indoreBlock": 37075456, - "agraBlock": 41874000 + "agraBlock": 41874000, + "napoliBlock": 45648608 } } diff --git a/params/chainspecs/sepolia.json b/params/chainspecs/sepolia.json index 9fe80a63fbe..e5ffd230325 100644 --- a/params/chainspecs/sepolia.json +++ b/params/chainspecs/sepolia.json @@ -1,5 +1,5 @@ { - "ChainName": "sepolia", + "chainName": "sepolia", "chainId": 11155111, "consensus": "ethash", "homesteadBlock": 0, @@ -17,5 +17,8 @@ "mergeNetsplitBlock": 1735371, "shanghaiTime": 1677557088, "cancunTime": 1706655072, - "ethash": {} + "ethash": {}, + "noPruneContracts": { + "0x7f02C3E3c98b133055B8B348B2Ac625669Ed295D": true + } } diff --git a/params/protocol_params.go b/params/protocol_params.go index a28c2c37dbc..048f9c6a971 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -159,14 +159,14 @@ const ( Bn256PairingPerPointGasByzantium uint64 = 80000 // Byzantium per-point price for an elliptic curve pairing check Bn256PairingPerPointGasIstanbul uint64 = 34000 // Per-point price for an elliptic curve pairing check - Bls12381G1AddGas uint64 = 600 // Price for BLS12-381 elliptic curve G1 point addition - Bls12381G1MulGas uint64 = 12000 // Price for BLS12-381 elliptic curve G1 point scalar multiplication - Bls12381G2AddGas uint64 = 4500 // Price for BLS12-381 elliptic curve G2 point addition - Bls12381G2MulGas uint64 = 55000 // Price for BLS12-381 elliptic curve G2 point scalar multiplication - Bls12381PairingBaseGas uint64 = 115000 // Base gas price for BLS12-381 elliptic curve pairing check - Bls12381PairingPerPairGas uint64 = 23000 // Per-point pair gas price for BLS12-381 elliptic curve pairing check - Bls12381MapG1Gas uint64 = 5500 // Gas price for BLS12-381 mapping field element to G1 operation - Bls12381MapG2Gas uint64 = 110000 // Gas price for BLS12-381 mapping field element to G2 operation + Bls12381G1AddGas uint64 = 500 // Price for BLS12-381 elliptic curve G1 point addition + Bls12381G1MulGas uint64 = 12000 // Price for BLS12-381 elliptic curve G1 point scalar multiplication + Bls12381G2AddGas uint64 = 800 // Price for BLS12-381 elliptic curve G2 point addition + Bls12381G2MulGas uint64 = 45000 // Price for BLS12-381 elliptic curve G2 point scalar multiplication + Bls12381PairingBaseGas uint64 = 65000 // Base gas price for BLS12-381 elliptic curve pairing check + Bls12381PairingPerPairGas uint64 = 43000 // Per-point pair gas price for BLS12-381 elliptic curve pairing check + Bls12381MapFpToG1Gas uint64 = 5500 // Gas price for BLS12-381 mapping field element to G1 operation + Bls12381MapFp2ToG2Gas uint64 = 75000 // Gas price for BLS12-381 mapping field element to G2 operation // The Refund Quotient is the cap on how much of the used gas can be refunded. Before EIP-3529, // up to half the consumed gas could be refunded. Redefined as 1/5th in EIP-3529 diff --git a/params/version.go b/params/version.go index 44e32fadd3c..d0f0be359e5 100644 --- a/params/version.go +++ b/params/version.go @@ -31,10 +31,10 @@ var ( // see https://calver.org const ( - VersionMajor = 2 // Major version component of the current release - VersionMinor = 57 // Minor version component of the current release - VersionMicro = 0 // Patch version component of the current release - VersionModifier = "dev" // Modifier component of the current release + VersionMajor = 2 // Major version component of the current release + VersionMinor = 60 // Minor version component of the current release + VersionMicro = 2 // Patch version component of the current release + VersionModifier = "" // Modifier component of the current release VersionKeyCreated = "ErigonVersionCreated" VersionKeyFinished = "ErigonVersionFinished" ) diff --git a/polygon/bor/bor.go b/polygon/bor/bor.go index aef97e200cb..ebbdb2524b2 100644 --- a/polygon/bor/bor.go +++ b/polygon/bor/bor.go @@ -888,7 +888,7 @@ func (c *Bor) Prepare(chain consensus.ChainHeaderReader, header *types.Header, s // where it fetches producers internally. As we fetch data from span // in Erigon, use directly the `GetCurrentProducers` function. if isSprintStart(number+1, c.config.CalculateSprintLength(number)) { - spanID := SpanIDAt(number + 1) + spanID := uint64(heimdall.SpanIdAt(number + 1)) newValidators, err := c.spanner.GetCurrentProducers(spanID, c.authorizedSigner.Load().signer, chain) if err != nil { return errUnknownValidators @@ -1315,15 +1315,19 @@ func (c *Bor) checkAndCommitSpan( return err } - // check span is not set initially + // Whenever `checkAndCommitSpan` is called for the first time, during the start of 'technically' + // second sprint, we need the 0th as well as the 1st span. The contract returns an empty + // span (i.e. all fields set to 0). Span 0 doesn't need to be committed explicitly and + // is committed eventually when we commit 1st span (as per the contract). The check below + // takes care of that and commits the 1st span (hence the `currentSpan.Id+1` param). if currentSpan.EndBlock == 0 { - return c.fetchAndCommitSpan(currentSpan.ID, state, header, chain, syscall) + return c.fetchAndCommitSpan(uint64(currentSpan.Id+1), state, header, chain, syscall) } - // if current block is first block of last sprint in current span + // For subsequent calls, commit the next span on the first block of the last sprint of a span sprintLength := c.config.CalculateSprintLength(headerNumber) if currentSpan.EndBlock > sprintLength && currentSpan.EndBlock-sprintLength+1 == headerNumber { - return c.fetchAndCommitSpan(currentSpan.ID+1, state, header, chain, syscall) + return c.fetchAndCommitSpan(uint64(currentSpan.Id+1), state, header, chain, syscall) } return nil @@ -1336,7 +1340,7 @@ func (c *Bor) fetchAndCommitSpan( chain statefull.ChainContext, syscall consensus.SystemCall, ) error { - var heimdallSpan heimdall.HeimdallSpan + var heimdallSpan heimdall.Span if c.HeimdallClient == nil { // fixme: move to a new mock or fake and remove c.HeimdallClient completely @@ -1447,6 +1451,7 @@ func (c *Bor) CommitStates( syscall consensus.SystemCall, ) error { events := chain.Chain.BorEventsByBlock(header.Hash(), header.Number.Uint64()) + for _, event := range events { if err := c.GenesisContractsClient.CommitState(event, syscall); err != nil { return err @@ -1469,7 +1474,7 @@ func (c *Bor) getNextHeimdallSpanForTest( header *types.Header, chain statefull.ChainContext, syscall consensus.SystemCall, -) (*heimdall.HeimdallSpan, error) { +) (*heimdall.Span, error) { headerNumber := header.Number.Uint64() spanBor, err := c.spanner.GetCurrentSpan(syscall) @@ -1484,7 +1489,7 @@ func (c *Bor) getNextHeimdallSpanForTest( } // new span - spanBor.ID = newSpanID + spanBor.Id = heimdall.SpanId(newSpanID) if spanBor.EndBlock == 0 { spanBor.StartBlock = 256 } else { @@ -1498,14 +1503,13 @@ func (c *Bor) getNextHeimdallSpanForTest( selectedProducers[i] = *v } - heimdallSpan := &heimdall.HeimdallSpan{ - Span: *spanBor, - ValidatorSet: *snap.ValidatorSet, - SelectedProducers: selectedProducers, - ChainID: c.chainConfig.ChainID.String(), - } + heimdallSpan := *spanBor + + heimdallSpan.ValidatorSet = *snap.ValidatorSet + heimdallSpan.SelectedProducers = selectedProducers + heimdallSpan.ChainID = c.chainConfig.ChainID.String() - return heimdallSpan, nil + return &heimdallSpan, nil } func validatorContains(a []*valset.Validator, x *valset.Validator) (*valset.Validator, bool) { diff --git a/polygon/bor/bor_test.go b/polygon/bor/bor_test.go index ee3586d734b..5f694160845 100644 --- a/polygon/bor/bor_test.go +++ b/polygon/bor/bor_test.go @@ -6,6 +6,7 @@ import ( "fmt" "math/big" "testing" + "time" "github.com/ledgerwatch/erigon/polygon/bor/borcfg" "github.com/ledgerwatch/erigon/polygon/heimdall" @@ -13,7 +14,6 @@ import ( "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon-lib/chain" - "github.com/ledgerwatch/erigon-lib/common" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" "github.com/ledgerwatch/erigon-lib/kv/memdb" @@ -31,11 +31,11 @@ import ( ) type test_heimdall struct { - currentSpan *heimdall.HeimdallSpan + currentSpan *heimdall.Span chainConfig *chain.Config borConfig *borcfg.BorConfig validatorSet *valset.ValidatorSet - spans map[uint64]*heimdall.HeimdallSpan + spans map[heimdall.SpanId]*heimdall.Span } func newTestHeimdall(chainConfig *chain.Config) *test_heimdall { @@ -44,7 +44,7 @@ func newTestHeimdall(chainConfig *chain.Config) *test_heimdall { chainConfig: chainConfig, borConfig: chainConfig.Bor.(*borcfg.BorConfig), validatorSet: nil, - spans: map[uint64]*heimdall.HeimdallSpan{}, + spans: map[heimdall.SpanId]*heimdall.Span{}, } } @@ -52,25 +52,31 @@ func (h *test_heimdall) BorConfig() *borcfg.BorConfig { return h.borConfig } -func (h test_heimdall) StateSyncEvents(ctx context.Context, fromID uint64, to int64) ([]*heimdall.EventRecordWithTime, error) { +func (h test_heimdall) FetchStateSyncEvents(ctx context.Context, fromID uint64, to time.Time, limit int) ([]*heimdall.EventRecordWithTime, error) { return nil, nil } -func (h *test_heimdall) Span(ctx context.Context, spanID uint64) (*heimdall.HeimdallSpan, error) { +func (h *test_heimdall) FetchStateSyncEvent(ctx context.Context, id uint64) (*heimdall.EventRecordWithTime, error) { + return nil, nil +} + +func (h *test_heimdall) FetchSpan(ctx context.Context, spanID uint64) (*heimdall.Span, error) { - if span, ok := h.spans[spanID]; ok { + if span, ok := h.spans[heimdall.SpanId(spanID)]; ok { h.currentSpan = span return span, nil } var nextSpan = heimdall.Span{ - ID: spanID, + Id: heimdall.SpanId(spanID), + ValidatorSet: *h.validatorSet, + ChainID: h.chainConfig.ChainID.String(), } if h.currentSpan == nil || spanID == 0 { nextSpan.StartBlock = 1 //256 } else { - if spanID != h.currentSpan.ID+1 { + if spanID != uint64(h.currentSpan.Id+1) { return nil, fmt.Errorf("Can't initialize span: non consecutive span") } @@ -81,20 +87,15 @@ func (h *test_heimdall) Span(ctx context.Context, spanID uint64) (*heimdall.Heim // TODO we should use a subset here - see: https://wiki.polygon.technology/docs/pos/bor/ - selectedProducers := make([]valset.Validator, len(h.validatorSet.Validators)) + nextSpan.SelectedProducers = make([]valset.Validator, len(h.validatorSet.Validators)) for i, v := range h.validatorSet.Validators { - selectedProducers[i] = *v + nextSpan.SelectedProducers[i] = *v } - h.currentSpan = &heimdall.HeimdallSpan{ - Span: nextSpan, - ValidatorSet: *h.validatorSet, - SelectedProducers: selectedProducers, - ChainID: h.chainConfig.ChainID.String(), - } + h.currentSpan = &nextSpan - h.spans[h.currentSpan.ID] = h.currentSpan + h.spans[h.currentSpan.Id] = h.currentSpan return h.currentSpan, nil } @@ -115,6 +116,10 @@ func (h test_heimdall) FetchCheckpointCount(ctx context.Context) (int64, error) return 0, fmt.Errorf("TODO") } +func (h *test_heimdall) FetchCheckpoints(ctx context.Context, page uint64, limit uint64) (heimdall.Checkpoints, error) { + return nil, fmt.Errorf("TODO") +} + func (h test_heimdall) FetchMilestone(ctx context.Context, number int64) (*heimdall.Milestone, error) { return nil, fmt.Errorf("TODO") } @@ -134,6 +139,9 @@ func (h test_heimdall) FetchLastNoAckMilestone(ctx context.Context) (string, err func (h test_heimdall) FetchMilestoneID(ctx context.Context, milestoneID string) error { return fmt.Errorf("TODO") } +func (h test_heimdall) FetchLatestSpan(ctx context.Context) (*heimdall.Span, error) { + return nil, fmt.Errorf("TODO") +} func (h test_heimdall) Close() {} @@ -192,7 +200,7 @@ func (r headerReader) BorSpan(spanId uint64) []byte { type spanner struct { *bor.ChainSpanner - validatorAddress common.Address + validatorAddress libcommon.Address currentSpan heimdall.Span } @@ -200,8 +208,8 @@ func (c spanner) GetCurrentSpan(_ consensus.SystemCall) (*heimdall.Span, error) return &c.currentSpan, nil } -func (c *spanner) CommitSpan(heimdallSpan heimdall.HeimdallSpan, syscall consensus.SystemCall) error { - c.currentSpan = heimdallSpan.Span +func (c *spanner) CommitSpan(heimdallSpan heimdall.Span, syscall consensus.SystemCall) error { + c.currentSpan = heimdallSpan return nil } @@ -273,8 +281,6 @@ func (v validator) verifyBlocks(blocks []*types.Block) error { return nil } -type heimdallSpan = heimdall.Span - func newValidator(t *testing.T, heimdall *test_heimdall, blocks map[uint64]*types.Block) validator { logger := log.Root() @@ -287,7 +293,6 @@ func newValidator(t *testing.T, heimdall *test_heimdall, blocks map[uint64]*type &spanner{ ChainSpanner: bor.NewChainSpanner(bor.GenesisContractValidatorSetABI(), heimdall.chainConfig, false, logger), validatorAddress: validatorAddress, - currentSpan: heimdallSpan{}, }, heimdall, test_genesisContract{}, diff --git a/polygon/bor/bordb/prune.go b/polygon/bor/bordb/prune.go new file mode 100644 index 00000000000..81c2f264038 --- /dev/null +++ b/polygon/bor/bordb/prune.go @@ -0,0 +1,125 @@ +package bordb + +import ( + "encoding/binary" + "errors" + "math" + + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/polygon/bor/snaptype" + "github.com/ledgerwatch/erigon/polygon/heimdall" +) + +// PruneBorBlocks - delete [1, to) old blocks after moving it to snapshots. +// keeps genesis in db: [1, to) +// doesn't change sequences of kv.EthTx and kv.NonCanonicalTxs +// doesn't delete Receipts, Senders, Canonical markers, TotalDifficulty +func PruneBorBlocks(tx kv.RwTx, blockTo uint64, blocksDeleteLimit int, SpanIdAt func(number uint64) uint64) error { + c, err := tx.Cursor(kv.BorEventNums) + if err != nil { + return err + } + defer c.Close() + var blockNumBytes [8]byte + binary.BigEndian.PutUint64(blockNumBytes[:], blockTo) + k, v, err := c.Seek(blockNumBytes[:]) + if err != nil { + return err + } + var eventIdTo uint64 = math.MaxUint64 + if k != nil { + eventIdTo = binary.BigEndian.Uint64(v) + } + c1, err := tx.RwCursor(kv.BorEvents) + if err != nil { + return err + } + defer c1.Close() + counter := blocksDeleteLimit + for k, _, err = c1.First(); err == nil && k != nil && counter > 0; k, _, err = c1.Next() { + eventId := binary.BigEndian.Uint64(k) + if eventId >= eventIdTo { + break + } + if err = c1.DeleteCurrent(); err != nil { + return err + } + counter-- + } + if err != nil { + return err + } + firstSpanToKeep := SpanIdAt(blockTo) + c2, err := tx.RwCursor(kv.BorSpans) + if err != nil { + return err + } + defer c2.Close() + counter = blocksDeleteLimit + for k, _, err := c2.First(); err == nil && k != nil && counter > 0; k, _, err = c2.Next() { + spanId := binary.BigEndian.Uint64(k) + if spanId >= firstSpanToKeep { + break + } + if err = c2.DeleteCurrent(); err != nil { + return err + } + counter-- + } + + if snaptype.CheckpointsEnabled() { + checkpointCursor, err := tx.RwCursor(kv.BorCheckpoints) + if err != nil { + return err + } + + defer checkpointCursor.Close() + lastCheckpointToRemove, err := heimdall.CheckpointIdAt(tx, blockTo) + + if err != nil { + return err + } + + var checkpointIdBytes [8]byte + binary.BigEndian.PutUint64(checkpointIdBytes[:], uint64(lastCheckpointToRemove)) + for k, _, err := checkpointCursor.Seek(checkpointIdBytes[:]); err == nil && k != nil; k, _, err = checkpointCursor.Prev() { + if err = checkpointCursor.DeleteCurrent(); err != nil { + return err + } + } + } + + if snaptype.MilestonesEnabled() { + milestoneCursor, err := tx.RwCursor(kv.BorMilestones) + + if err != nil { + return err + } + + defer milestoneCursor.Close() + + var lastMilestoneToRemove heimdall.MilestoneId + + for blockCount := 1; err != nil && blockCount < blocksDeleteLimit; blockCount++ { + lastMilestoneToRemove, err = heimdall.MilestoneIdAt(tx, blockTo-uint64(blockCount)) + + if !errors.Is(err, heimdall.ErrMilestoneNotFound) { + return err + } else { + if blockCount == blocksDeleteLimit-1 { + return nil + } + } + } + + var milestoneIdBytes [8]byte + binary.BigEndian.PutUint64(milestoneIdBytes[:], uint64(lastMilestoneToRemove)) + for k, _, err := milestoneCursor.Seek(milestoneIdBytes[:]); err == nil && k != nil; k, _, err = milestoneCursor.Prev() { + if err = milestoneCursor.DeleteCurrent(); err != nil { + return err + } + } + } + + return nil +} diff --git a/polygon/bor/finality/rawdb/milestone.go b/polygon/bor/finality/rawdb/milestone.go index db748a42f73..9964b71f4d4 100644 --- a/polygon/bor/finality/rawdb/milestone.go +++ b/polygon/bor/finality/rawdb/milestone.go @@ -58,7 +58,7 @@ func ReadFinality[T BlockFinality[T]](db kv.RwDB) (uint64, libcommon.Hash, error err := db.View(context.Background(), func(tx kv.Tx) error { res, err := tx.GetOne(kv.BorFinality, key) - data = res + data = libcommon.Copy(res) return err }) @@ -166,7 +166,7 @@ func ReadLockField(db kv.RwDB) (bool, uint64, libcommon.Hash, map[string]struct{ var data []byte err := db.View(context.Background(), func(tx kv.Tx) error { res, err := tx.GetOne(kv.BorFinality, key) - data = res + data = libcommon.Copy(res) return err }) @@ -225,7 +225,7 @@ func ReadFutureMilestoneList(db kv.RwDB) ([]uint64, map[uint64]libcommon.Hash, e var data []byte err := db.View(context.Background(), func(tx kv.Tx) error { res, err := tx.GetOne(kv.BorFinality, key) - data = res + data = libcommon.Copy(res) return err }) diff --git a/polygon/bor/finality/whitelist.go b/polygon/bor/finality/whitelist.go index 97584eb6f09..fe6541dd7cd 100644 --- a/polygon/bor/finality/whitelist.go +++ b/polygon/bor/finality/whitelist.go @@ -8,11 +8,10 @@ import ( "github.com/ledgerwatch/log/v3" - "github.com/ledgerwatch/erigon/polygon/heimdall" - "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/polygon/bor/finality/flags" "github.com/ledgerwatch/erigon/polygon/bor/finality/whitelist" + "github.com/ledgerwatch/erigon/polygon/heimdall" "github.com/ledgerwatch/erigon/turbo/services" ) diff --git a/polygon/bor/finality/whitelist/milestone.go b/polygon/bor/finality/whitelist/milestone.go index b4777c13cae..a79c712358e 100644 --- a/polygon/bor/finality/whitelist/milestone.go +++ b/polygon/bor/finality/whitelist/milestone.go @@ -154,6 +154,7 @@ func (m *milestone) UnlockSprint(endBlockNum uint64) { } m.Locked = false + m.purgeMilestoneIDsList() err := rawdb.WriteLockField(m.db, m.Locked, m.LockedMilestoneNumber, m.LockedMilestoneHash, m.LockedMilestoneIDs) @@ -213,6 +214,12 @@ func (m *milestone) GetMilestoneIDsList() []string { // This is remove the milestoneIDs stored in the list. func (m *milestone) purgeMilestoneIDsList() { + // try is used here as the finality lock is preserved over calls - so the lock state + // is not clearly defined in the local code - this likely needs to be revised + if m.finality.TryLock() { + defer m.finality.Unlock() + } + m.LockedMilestoneIDs = make(map[string]struct{}) } diff --git a/polygon/bor/finality/whitelist/service_test.go b/polygon/bor/finality/whitelist/service_test.go index 62fe3651dea..4e0de45b663 100644 --- a/polygon/bor/finality/whitelist/service_test.go +++ b/polygon/bor/finality/whitelist/service_test.go @@ -548,11 +548,7 @@ func TestPropertyBasedTestingMilestone(t *testing.T) { } fitlerFn := func(i uint64) bool { - if i <= uint64(1000) { - return true - } - - return false + return i <= uint64(1000) } var ( diff --git a/polygon/bor/finality/whitelist_helpers.go b/polygon/bor/finality/whitelist_helpers.go index f680c0d0fa7..1cc705fd28b 100644 --- a/polygon/bor/finality/whitelist_helpers.go +++ b/polygon/bor/finality/whitelist_helpers.go @@ -42,23 +42,23 @@ func fetchWhitelistCheckpoint(ctx context.Context, heimdallClient heimdall.Heimd // Verify if the checkpoint fetched can be added to the local whitelist entry or not // If verified, it returns the hash of the end block of the checkpoint. If not, // it will return appropriate error. - hash, err := verifier.verify(ctx, config, checkpoint.StartBlock.Uint64(), checkpoint.EndBlock.Uint64(), checkpoint.RootHash.String()[2:], true) + hash, err := verifier.verify(ctx, config, checkpoint.StartBlock().Uint64(), checkpoint.EndBlock().Uint64(), checkpoint.RootHash().String()[2:], true) if err != nil { if errors.Is(err, errMissingBlocks) { - config.logger.Debug("[bor.heimdall] Got new checkpoint", "start", checkpoint.StartBlock.Uint64(), "end", checkpoint.EndBlock.Uint64(), "rootHash", checkpoint.RootHash.String()) + config.logger.Debug("[bor.heimdall] Got new checkpoint", "start", checkpoint.StartBlock().Uint64(), "end", checkpoint.EndBlock().Uint64(), "rootHash", checkpoint.RootHash().String()) config.logger.Debug("[bor.heimdall] Failed to whitelist checkpoint", "err", err) } else { - config.logger.Info("[bor.heimdall] Got new checkpoint", "start", checkpoint.StartBlock.Uint64(), "end", checkpoint.EndBlock.Uint64(), "rootHash", checkpoint.RootHash.String()) + config.logger.Info("[bor.heimdall] Got new checkpoint", "start", checkpoint.StartBlock().Uint64(), "end", checkpoint.EndBlock().Uint64(), "rootHash", checkpoint.RootHash().String()) config.logger.Warn("[bor.heimdall] Failed to whitelist checkpoint", "err", err) } return blockNum, blockHash, err } - config.logger.Info("[bor.heimdall] Got new checkpoint", "start", checkpoint.StartBlock.Uint64(), "end", checkpoint.EndBlock.Uint64(), "rootHash", checkpoint.RootHash.String()) + config.logger.Info("[bor.heimdall] Got new checkpoint", "start", checkpoint.StartBlock().Uint64(), "end", checkpoint.EndBlock().Uint64(), "rootHash", checkpoint.RootHash().String()) - blockNum = checkpoint.EndBlock.Uint64() + blockNum = checkpoint.EndBlock().Uint64() blockHash = common.HexToHash(hash) return blockNum, blockHash, nil @@ -84,17 +84,17 @@ func fetchWhitelistMilestone(ctx context.Context, heimdallClient heimdall.Heimda return num, hash, errMilestone } - config.logger.Debug("[bor.heimdall] Got new milestone", "start", milestone.StartBlock.Uint64(), "end", milestone.EndBlock.Uint64()) + config.logger.Debug("[bor.heimdall] Got new milestone", "start", milestone.StartBlock().Uint64(), "end", milestone.EndBlock().Uint64()) - num = milestone.EndBlock.Uint64() - hash = milestone.Hash + num = milestone.EndBlock().Uint64() + hash = milestone.RootHash() // Verify if the milestone fetched can be added to the local whitelist entry or not // If verified, it returns the hash of the end block of the milestone. If not, // it will return appropriate error. - _, err = verifier.verify(ctx, config, milestone.StartBlock.Uint64(), milestone.EndBlock.Uint64(), milestone.Hash.String()[2:], false) + _, err = verifier.verify(ctx, config, milestone.StartBlock().Uint64(), milestone.EndBlock().Uint64(), milestone.RootHash().String()[2:], false) if err != nil { - whitelist.GetWhitelistingService().UnlockSprint(milestone.EndBlock.Uint64()) + whitelist.GetWhitelistingService().UnlockSprint(milestone.EndBlock().Uint64()) return num, hash, err } diff --git a/polygon/bor/snapshot.go b/polygon/bor/snapshot.go index a41c2acad1c..940e450fd03 100644 --- a/polygon/bor/snapshot.go +++ b/polygon/bor/snapshot.go @@ -3,6 +3,7 @@ package bor import ( "bytes" "context" + "encoding/binary" "encoding/json" "time" @@ -97,7 +98,29 @@ func (s *Snapshot) Store(db kv.RwDB) error { } return db.Update(context.Background(), func(tx kv.RwTx) error { - return tx.Put(kv.BorSeparate, append([]byte("bor-"), s.Hash[:]...), blob) + err := tx.Put(kv.BorSeparate, append([]byte("bor-"), s.Hash[:]...), blob) + if err != nil { + return err + } + progressBytes, err := tx.GetOne(kv.BorSeparate, []byte("bor-snapshot-progress")) + if err != nil { + return err + } + + var progress uint64 + + if len(progressBytes) == 8 { + progress = binary.BigEndian.Uint64(progressBytes) + } + + if s.Number > progress { + updateBytes := make([]byte, 8) + binary.BigEndian.PutUint64(updateBytes, s.Number) + if err = tx.Put(kv.BorSeparate, []byte("bor-snapshot-progress"), updateBytes); err != nil { + return err + } + } + return nil }) } diff --git a/polygon/bor/snaptype/types.go b/polygon/bor/snaptype/types.go new file mode 100644 index 00000000000..5931b89290f --- /dev/null +++ b/polygon/bor/snaptype/types.go @@ -0,0 +1,554 @@ +package snaptype + +import ( + "bytes" + "context" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + "path/filepath" + "runtime" + "time" + + "github.com/ledgerwatch/erigon-lib/chain" + "github.com/ledgerwatch/erigon-lib/chain/networkname" + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/background" + "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/erigon-lib/common/hexutility" + "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" + "github.com/ledgerwatch/erigon/core/rawdb" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/log/v3" +) + +func init() { + initTypes() +} + +func initTypes() { + borTypes := append(coresnaptype.BlockSnapshotTypes, BorSnapshotTypes()...) + + snapcfg.RegisterKnownTypes(networkname.MumbaiChainName, borTypes) + snapcfg.RegisterKnownTypes(networkname.AmoyChainName, borTypes) + snapcfg.RegisterKnownTypes(networkname.BorMainnetChainName, borTypes) +} + +var Enums = struct { + snaptype.Enums + BorEvents, + BorSpans, + BorCheckpoints, + BorMilestones snaptype.Enum +}{ + Enums: snaptype.Enums{}, + BorEvents: snaptype.MinBorEnum, + BorSpans: snaptype.MinBorEnum + 1, + BorCheckpoints: snaptype.MinBorEnum + 2, + BorMilestones: snaptype.MinBorEnum + 3, +} + +var Indexes = struct { + BorTxnHash, + BorSpanId, + BorCheckpointId, + BorMilestoneId snaptype.Index +}{ + BorTxnHash: snaptype.Index{Name: "borevents"}, + BorSpanId: snaptype.Index{Name: "borspans"}, + BorCheckpointId: snaptype.Index{Name: "borcheckpoints"}, + BorMilestoneId: snaptype.Index{Name: "bormilestones"}, +} + +var ( + BorEvents = snaptype.RegisterType( + Enums.BorEvents, + "borevents", + snaptype.Versions{ + Current: 1, //2, + MinSupported: 1, + }, + snaptype.RangeExtractorFunc( + func(ctx context.Context, blockFrom, blockTo uint64, _ snaptype.FirstKeyGetter, db kv.RoDB, chainConfig *chain.Config, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + logEvery := time.NewTicker(20 * time.Second) + defer logEvery.Stop() + + from := hexutility.EncodeTs(blockFrom) + var first bool = true + var prevBlockNum uint64 + var startEventId uint64 + var lastEventId uint64 + if err := kv.BigChunks(db, kv.BorEventNums, from, func(tx kv.Tx, blockNumBytes, eventIdBytes []byte) (bool, error) { + blockNum := binary.BigEndian.Uint64(blockNumBytes) + if first { + startEventId = binary.BigEndian.Uint64(eventIdBytes) + first = false + prevBlockNum = blockNum + } else if blockNum != prevBlockNum { + endEventId := binary.BigEndian.Uint64(eventIdBytes) + blockHash, e := rawdb.ReadCanonicalHash(tx, prevBlockNum) + if e != nil { + return false, e + } + if e := extractEventRange(startEventId, endEventId, tx, prevBlockNum, blockHash, collect); e != nil { + return false, e + } + startEventId = endEventId + prevBlockNum = blockNum + } + if blockNum >= blockTo { + return false, nil + } + lastEventId = binary.BigEndian.Uint64(eventIdBytes) + select { + case <-ctx.Done(): + return false, ctx.Err() + case <-logEvery.C: + var m runtime.MemStats + if lvl >= log.LvlInfo { + dbg.ReadMemStats(&m) + } + logger.Log(lvl, "[bor snapshots] Dumping bor events", "block num", blockNum, + "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), + ) + default: + } + return true, nil + }); err != nil { + return 0, err + } + if lastEventId > startEventId { + if err := db.View(ctx, func(tx kv.Tx) error { + blockHash, e := rawdb.ReadCanonicalHash(tx, prevBlockNum) + if e != nil { + return e + } + return extractEventRange(startEventId, lastEventId+1, tx, prevBlockNum, blockHash, collect) + }); err != nil { + return 0, err + } + } + + return lastEventId, nil + }), + []snaptype.Index{Indexes.BorTxnHash}, + snaptype.IndexBuilderFunc( + func(ctx context.Context, sn snaptype.FileInfo, salt uint32, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + defer func() { + if rec := recover(); rec != nil { + err = fmt.Errorf("BorEventsIdx: at=%d-%d, %v, %s", sn.From, sn.To, rec, dbg.Stack()) + } + }() + // Calculate how many records there will be in the index + d, err := seg.NewDecompressor(sn.Path) + if err != nil { + return err + } + defer d.Close() + g := d.MakeGetter() + var blockNumBuf [length.BlockNum]byte + var first bool = true + word := make([]byte, 0, 4096) + var blockCount int + var baseEventId uint64 + for g.HasNext() { + word, _ = g.Next(word[:0]) + if first || !bytes.Equal(blockNumBuf[:], word[length.Hash:length.Hash+length.BlockNum]) { + blockCount++ + copy(blockNumBuf[:], word[length.Hash:length.Hash+length.BlockNum]) + } + if first { + baseEventId = binary.BigEndian.Uint64(word[length.Hash+length.BlockNum : length.Hash+length.BlockNum+8]) + first = false + } + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + } + + rs, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ + KeyCount: blockCount, + Enums: blockCount > 0, + BucketSize: 2000, + LeafSize: 8, + TmpDir: tmpDir, + IndexFile: filepath.Join(sn.Dir(), snaptype.IdxFileName(sn.Version, sn.From, sn.To, Enums.BorEvents.String())), + BaseDataID: baseEventId, + }, logger) + if err != nil { + return err + } + rs.LogLvl(log.LvlDebug) + + defer d.EnableMadvNormal().DisableReadAhead() + + for { + g.Reset(0) + first = true + var i, offset, nextPos uint64 + for g.HasNext() { + word, nextPos = g.Next(word[:0]) + i++ + if first || !bytes.Equal(blockNumBuf[:], word[length.Hash:length.Hash+length.BlockNum]) { + if err = rs.AddKey(word[:length.Hash], offset); err != nil { + return err + } + copy(blockNumBuf[:], word[length.Hash:length.Hash+length.BlockNum]) + } + if first { + first = false + } + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + offset = nextPos + } + if err = rs.Build(ctx); err != nil { + if errors.Is(err, recsplit.ErrCollision) { + logger.Info("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) + rs.ResetNextSalt() + continue + } + return err + } + + return nil + } + })) + + BorSpans = snaptype.RegisterType( + Enums.BorSpans, + "borspans", + snaptype.Versions{ + Current: 1, //2, + MinSupported: 1, + }, + snaptype.RangeExtractorFunc( + func(ctx context.Context, blockFrom, blockTo uint64, firstKeyGetter snaptype.FirstKeyGetter, db kv.RoDB, _ *chain.Config, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + spanFrom := uint64(heimdall.SpanIdAt(blockFrom)) + spanTo := uint64(heimdall.SpanIdAt(blockTo)) + return extractValueRange(ctx, kv.BorSpans, spanFrom, spanTo, db, collect, workers, lvl, logger) + }), + []snaptype.Index{Indexes.BorSpanId}, + snaptype.IndexBuilderFunc( + func(ctx context.Context, sn snaptype.FileInfo, salt uint32, _ *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + d, err := seg.NewDecompressor(sn.Path) + + if err != nil { + return err + } + defer d.Close() + + baseSpanId := uint64(heimdall.SpanIdAt(sn.From)) + + return buildValueIndex(ctx, sn, salt, d, baseSpanId, tmpDir, p, lvl, logger) + }), + ) + + BorCheckpoints = snaptype.RegisterType( + Enums.BorCheckpoints, + "borcheckpoints", + snaptype.Versions{ + Current: 1, //2, + MinSupported: 1, + }, + snaptype.RangeExtractorFunc( + func(ctx context.Context, blockFrom, blockTo uint64, firstKeyGetter snaptype.FirstKeyGetter, db kv.RoDB, _ *chain.Config, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + var checkpointTo, checkpointFrom heimdall.CheckpointId + + err := db.View(ctx, func(tx kv.Tx) (err error) { + checkpointFrom, err = heimdall.CheckpointIdAt(tx, blockFrom) + + if err != nil { + return err + } + + checkpointTo, err = heimdall.CheckpointIdAt(tx, blockTo) + + if err != nil { + return err + } + + if blockFrom > 0 { + if prevTo, err := heimdall.CheckpointIdAt(tx, blockFrom-1); err == nil { + if prevTo == checkpointFrom { + if prevTo == checkpointTo { + checkpointFrom = 0 + checkpointTo = 0 + } else { + checkpointFrom++ + } + } + } + } + + return err + }) + + if err != nil { + return 0, err + } + + return extractValueRange(ctx, kv.BorCheckpoints, uint64(checkpointFrom), uint64(checkpointTo), db, collect, workers, lvl, logger) + }), + []snaptype.Index{Indexes.BorCheckpointId}, + snaptype.IndexBuilderFunc( + func(ctx context.Context, sn snaptype.FileInfo, salt uint32, _ *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + d, err := seg.NewDecompressor(sn.Path) + + if err != nil { + return err + } + defer d.Close() + + gg := d.MakeGetter() + + var firstCheckpointId uint64 + + if gg.HasNext() { + buf, _ := d.MakeGetter().Next(nil) + var firstCheckpoint heimdall.Checkpoint + + if err = json.Unmarshal(buf, &firstCheckpoint); err != nil { + return err + } + + firstCheckpointId = uint64(firstCheckpoint.Id) + } + + return buildValueIndex(ctx, sn, salt, d, firstCheckpointId, tmpDir, p, lvl, logger) + }), + ) + + BorMilestones = snaptype.RegisterType( + Enums.BorMilestones, + "bormilestones", + snaptype.Versions{ + Current: 1, //2, + MinSupported: 1, + }, + snaptype.RangeExtractorFunc( + func(ctx context.Context, blockFrom, blockTo uint64, firstKeyGetter snaptype.FirstKeyGetter, db kv.RoDB, _ *chain.Config, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + var milestoneFrom, milestoneTo heimdall.MilestoneId + + err := db.View(ctx, func(tx kv.Tx) (err error) { + milestoneFrom, err = heimdall.MilestoneIdAt(tx, blockFrom) + + if err != nil && !errors.Is(err, heimdall.ErrMilestoneNotFound) { + return err + } + + milestoneTo, err = heimdall.MilestoneIdAt(tx, blockTo) + + if err != nil && !errors.Is(err, heimdall.ErrMilestoneNotFound) { + return err + } + + if milestoneFrom > 0 && blockFrom > 0 { + if prevTo, err := heimdall.MilestoneIdAt(tx, blockFrom-1); err == nil && prevTo == milestoneFrom { + if prevTo == milestoneFrom { + if prevTo == milestoneTo { + milestoneFrom = 0 + milestoneTo = 0 + } else { + milestoneFrom++ + } + } + } + } + + return nil + }) + + if err != nil { + return 0, err + } + + return extractValueRange(ctx, kv.BorMilestones, uint64(milestoneFrom), uint64(milestoneTo), db, collect, workers, lvl, logger) + }), + []snaptype.Index{Indexes.BorMilestoneId}, + snaptype.IndexBuilderFunc( + func(ctx context.Context, sn snaptype.FileInfo, salt uint32, _ *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + d, err := seg.NewDecompressor(sn.Path) + + if err != nil { + return err + } + defer d.Close() + + gg := d.MakeGetter() + + var firstMilestoneId uint64 + + if gg.HasNext() { + buf, _ := gg.Next(nil) + if len(buf) > 0 { + var firstMilestone heimdall.Milestone + if err = json.Unmarshal(buf, &firstMilestone); err != nil { + return err + } + firstMilestoneId = uint64(firstMilestone.Id) + } + } + + return buildValueIndex(ctx, sn, salt, d, firstMilestoneId, tmpDir, p, lvl, logger) + }), + ) +) + +var recordWaypoints bool + +func RecordWayPoints(value bool) { + recordWaypoints = value + initTypes() +} + +func BorSnapshotTypes() []snaptype.Type { + if recordWaypoints { + return []snaptype.Type{BorEvents, BorSpans, BorCheckpoints, BorMilestones} + } + + return []snaptype.Type{BorEvents, BorSpans} +} + +func CheckpointsEnabled() bool { + for _, snapType := range BorSnapshotTypes() { + if snapType.Enum() == BorCheckpoints.Enum() { + return true + } + } + + return false +} + +func MilestonesEnabled() bool { + for _, snapType := range BorSnapshotTypes() { + if snapType.Enum() == BorMilestones.Enum() { + return true + } + } + + return false +} + +func extractValueRange(ctx context.Context, table string, valueFrom, valueTo uint64, db kv.RoDB, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + logEvery := time.NewTicker(20 * time.Second) + defer logEvery.Stop() + + if err := kv.BigChunks(db, table, hexutility.EncodeTs(valueFrom), func(tx kv.Tx, idBytes, valueBytes []byte) (bool, error) { + id := binary.BigEndian.Uint64(idBytes) + if id >= valueTo { + return false, nil + } + if e := collect(valueBytes); e != nil { + return false, e + } + select { + case <-ctx.Done(): + return false, ctx.Err() + case <-logEvery.C: + var m runtime.MemStats + if lvl >= log.LvlInfo { + dbg.ReadMemStats(&m) + } + logger.Log(lvl, "[bor snapshots] Dumping bor values", "id", id, + "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), + ) + default: + } + return true, nil + }); err != nil { + return valueTo, err + } + return valueTo, nil +} + +func buildValueIndex(ctx context.Context, sn snaptype.FileInfo, salt uint32, d *seg.Decompressor, baseId uint64, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + defer func() { + if rec := recover(); rec != nil { + err = fmt.Errorf("BorSpansIdx: at=%d-%d, %v, %s", sn.From, sn.To, rec, dbg.Stack()) + } + }() + + rs, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ + KeyCount: d.Count(), + Enums: d.Count() > 0, + BucketSize: 2000, + LeafSize: 8, + TmpDir: tmpDir, + IndexFile: filepath.Join(sn.Dir(), sn.Type.IdxFileName(sn.Version, sn.From, sn.To)), + BaseDataID: baseId, + Salt: salt, + }, logger) + if err != nil { + return err + } + rs.LogLvl(log.LvlDebug) + + defer d.EnableMadvNormal().DisableReadAhead() + + for { + g := d.MakeGetter() + var i, offset, nextPos uint64 + var key [8]byte + for g.HasNext() { + nextPos, _ = g.Skip() + binary.BigEndian.PutUint64(key[:], i) + i++ + if err = rs.AddKey(key[:], offset); err != nil { + return err + } + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + offset = nextPos + } + if err = rs.Build(ctx); err != nil { + if errors.Is(err, recsplit.ErrCollision) { + logger.Info("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) + rs.ResetNextSalt() + continue + } + return err + } + + return nil + } +} + +func extractEventRange(startEventId, endEventId uint64, tx kv.Tx, blockNum uint64, blockHash common.Hash, collect func([]byte) error) error { + var blockNumBuf [8]byte + var eventIdBuf [8]byte + txnHash := bortypes.ComputeBorTxHash(blockNum, blockHash) + binary.BigEndian.PutUint64(blockNumBuf[:], blockNum) + for eventId := startEventId; eventId < endEventId; eventId++ { + binary.BigEndian.PutUint64(eventIdBuf[:], eventId) + event, err := tx.GetOne(kv.BorEvents, eventIdBuf[:]) + if err != nil { + return err + } + snapshotRecord := make([]byte, len(event)+length.Hash+length.BlockNum+8) + copy(snapshotRecord, txnHash[:]) + copy(snapshotRecord[length.Hash:], blockNumBuf[:]) + binary.BigEndian.PutUint64(snapshotRecord[length.Hash+length.BlockNum:], eventId) + copy(snapshotRecord[length.Hash+length.BlockNum+8:], event) + if err := collect(snapshotRecord); err != nil { + return err + } + } + return nil +} diff --git a/polygon/bor/snaptype/types_test.go b/polygon/bor/snaptype/types_test.go new file mode 100644 index 00000000000..c1e9431bfbd --- /dev/null +++ b/polygon/bor/snaptype/types_test.go @@ -0,0 +1,45 @@ +package snaptype_test + +import ( + "testing" + + "github.com/ledgerwatch/erigon/polygon/bor/snaptype" +) + +func TestEnumeration(t *testing.T) { + + if snaptype.BorEvents.Enum() != snaptype.Enums.BorEvents { + t.Fatal("enum mismatch", snaptype.BorEvents, snaptype.BorEvents.Enum(), snaptype.Enums.BorEvents) + } + + if snaptype.BorSpans.Enum() != snaptype.Enums.BorSpans { + t.Fatal("enum mismatch", snaptype.BorSpans, snaptype.BorSpans.Enum(), snaptype.Enums.BorSpans) + } + + if snaptype.BorCheckpoints.Enum() != snaptype.Enums.BorCheckpoints { + t.Fatal("enum mismatch", snaptype.BorCheckpoints, snaptype.BorCheckpoints.Enum(), snaptype.Enums.BorCheckpoints) + } + + if snaptype.BorMilestones.Enum() != snaptype.Enums.BorMilestones { + t.Fatal("enum mismatch", snaptype.BorMilestones, snaptype.BorMilestones.Enum(), snaptype.Enums.BorMilestones) + } +} + +func TestNames(t *testing.T) { + + if snaptype.BorEvents.Name() != snaptype.Enums.BorEvents.String() { + t.Fatal("name mismatch", snaptype.BorEvents, snaptype.BorEvents.Name(), snaptype.Enums.BorEvents.String()) + } + + if snaptype.BorSpans.Name() != snaptype.Enums.BorSpans.String() { + t.Fatal("name mismatch", snaptype.BorSpans, snaptype.BorSpans.Name(), snaptype.Enums.BorSpans.String()) + } + + if snaptype.BorCheckpoints.Name() != snaptype.Enums.BorCheckpoints.String() { + t.Fatal("name mismatch", snaptype.BorCheckpoints, snaptype.BorCheckpoints.Name(), snaptype.Enums.BorCheckpoints.String()) + } + + if snaptype.BorMilestones.Name() != snaptype.Enums.BorMilestones.String() { + t.Fatal("name mismatch", snaptype.BorMilestones, snaptype.BorMilestones.Name(), snaptype.Enums.BorMilestones.String()) + } +} diff --git a/polygon/bor/spanner.go b/polygon/bor/spanner.go index 728bc20f229..6d895b283f1 100644 --- a/polygon/bor/spanner.go +++ b/polygon/bor/spanner.go @@ -16,12 +16,12 @@ import ( "github.com/ledgerwatch/erigon/rlp" ) -//go:generate mockgen -destination=./spanner_mock.go -package=bor . Spanner +//go:generate mockgen -typed=true -destination=./spanner_mock.go -package=bor . Spanner type Spanner interface { GetCurrentSpan(syscall consensus.SystemCall) (*heimdall.Span, error) GetCurrentValidators(spanId uint64, signer libcommon.Address, chain consensus.ChainHeaderReader) ([]*valset.Validator, error) GetCurrentProducers(spanId uint64, signer libcommon.Address, chain consensus.ChainHeaderReader) ([]*valset.Validator, error) - CommitSpan(heimdallSpan heimdall.HeimdallSpan, syscall consensus.SystemCall) error + CommitSpan(heimdallSpan heimdall.Span, syscall consensus.SystemCall) error } type ABI interface { @@ -78,7 +78,7 @@ func (c *ChainSpanner) GetCurrentSpan(syscall consensus.SystemCall) (*heimdall.S // create new span span := heimdall.Span{ - ID: ret.Number.Uint64(), + Id: heimdall.SpanId(ret.Number.Uint64()), StartBlock: ret.StartBlock.Uint64(), EndBlock: ret.EndBlock.Uint64(), } @@ -93,7 +93,7 @@ func (c *ChainSpanner) GetCurrentValidators(spanId uint64, signer libcommon.Addr } spanBytes := chain.BorSpan(spanId) - var span heimdall.HeimdallSpan + var span heimdall.Span if err := json.Unmarshal(spanBytes, &span); err != nil { return nil, err } @@ -108,7 +108,7 @@ func (c *ChainSpanner) GetCurrentProducers(spanId uint64, signer libcommon.Addre } spanBytes := chain.BorSpan(spanId) - var span heimdall.HeimdallSpan + var span heimdall.Span if err := json.Unmarshal(spanBytes, &span); err != nil { return nil, err } @@ -121,7 +121,7 @@ func (c *ChainSpanner) GetCurrentProducers(spanId uint64, signer libcommon.Addre return producers, nil } -func (c *ChainSpanner) CommitSpan(heimdallSpan heimdall.HeimdallSpan, syscall consensus.SystemCall) error { +func (c *ChainSpanner) CommitSpan(heimdallSpan heimdall.Span, syscall consensus.SystemCall) error { // method const method = "commitSpan" @@ -146,8 +146,8 @@ func (c *ChainSpanner) CommitSpan(heimdallSpan heimdall.HeimdallSpan, syscall co return err } - c.logger.Debug("[bor] ✅ Committing new span", - "id", heimdallSpan.ID, + c.logger.Trace("[bor] ✅ Committing new span", + "id", heimdallSpan.Id, "startBlock", heimdallSpan.StartBlock, "endBlock", heimdallSpan.EndBlock, "validatorBytes", hex.EncodeToString(validatorBytes), @@ -156,7 +156,7 @@ func (c *ChainSpanner) CommitSpan(heimdallSpan heimdall.HeimdallSpan, syscall co // get packed data data, err := c.validatorSet.Pack(method, - big.NewInt(0).SetUint64(heimdallSpan.ID), + big.NewInt(0).SetUint64(uint64(heimdallSpan.Id)), big.NewInt(0).SetUint64(heimdallSpan.StartBlock), big.NewInt(0).SetUint64(heimdallSpan.EndBlock), validatorBytes, diff --git a/polygon/bor/spanner_mock.go b/polygon/bor/spanner_mock.go index 45d65a5178a..185ded6cc7c 100644 --- a/polygon/bor/spanner_mock.go +++ b/polygon/bor/spanner_mock.go @@ -1,5 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/ledgerwatch/erigon/polygon/bor (interfaces: Spanner) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./spanner_mock.go -package=bor . Spanner +// // Package bor is a generated GoMock package. package bor @@ -7,11 +12,11 @@ package bor import ( reflect "reflect" - gomock "github.com/golang/mock/gomock" common "github.com/ledgerwatch/erigon-lib/common" consensus "github.com/ledgerwatch/erigon/consensus" valset "github.com/ledgerwatch/erigon/polygon/bor/valset" heimdall "github.com/ledgerwatch/erigon/polygon/heimdall" + gomock "go.uber.org/mock/gomock" ) // MockSpanner is a mock of Spanner interface. @@ -38,7 +43,7 @@ func (m *MockSpanner) EXPECT() *MockSpannerMockRecorder { } // CommitSpan mocks base method. -func (m *MockSpanner) CommitSpan(arg0 heimdall.HeimdallSpan, arg1 consensus.SystemCall) error { +func (m *MockSpanner) CommitSpan(arg0 heimdall.Span, arg1 consensus.SystemCall) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CommitSpan", arg0, arg1) ret0, _ := ret[0].(error) @@ -46,9 +51,33 @@ func (m *MockSpanner) CommitSpan(arg0 heimdall.HeimdallSpan, arg1 consensus.Syst } // CommitSpan indicates an expected call of CommitSpan. -func (mr *MockSpannerMockRecorder) CommitSpan(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockSpannerMockRecorder) CommitSpan(arg0, arg1 any) *MockSpannerCommitSpanCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CommitSpan", reflect.TypeOf((*MockSpanner)(nil).CommitSpan), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CommitSpan", reflect.TypeOf((*MockSpanner)(nil).CommitSpan), arg0, arg1) + return &MockSpannerCommitSpanCall{Call: call} +} + +// MockSpannerCommitSpanCall wrap *gomock.Call +type MockSpannerCommitSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpannerCommitSpanCall) Return(arg0 error) *MockSpannerCommitSpanCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpannerCommitSpanCall) Do(f func(heimdall.Span, consensus.SystemCall) error) *MockSpannerCommitSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpannerCommitSpanCall) DoAndReturn(f func(heimdall.Span, consensus.SystemCall) error) *MockSpannerCommitSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c } // GetCurrentProducers mocks base method. @@ -61,9 +90,33 @@ func (m *MockSpanner) GetCurrentProducers(arg0 uint64, arg1 common.Address, arg2 } // GetCurrentProducers indicates an expected call of GetCurrentProducers. -func (mr *MockSpannerMockRecorder) GetCurrentProducers(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockSpannerMockRecorder) GetCurrentProducers(arg0, arg1, arg2 any) *MockSpannerGetCurrentProducersCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentProducers", reflect.TypeOf((*MockSpanner)(nil).GetCurrentProducers), arg0, arg1, arg2) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentProducers", reflect.TypeOf((*MockSpanner)(nil).GetCurrentProducers), arg0, arg1, arg2) + return &MockSpannerGetCurrentProducersCall{Call: call} +} + +// MockSpannerGetCurrentProducersCall wrap *gomock.Call +type MockSpannerGetCurrentProducersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpannerGetCurrentProducersCall) Return(arg0 []*valset.Validator, arg1 error) *MockSpannerGetCurrentProducersCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpannerGetCurrentProducersCall) Do(f func(uint64, common.Address, consensus.ChainHeaderReader) ([]*valset.Validator, error)) *MockSpannerGetCurrentProducersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpannerGetCurrentProducersCall) DoAndReturn(f func(uint64, common.Address, consensus.ChainHeaderReader) ([]*valset.Validator, error)) *MockSpannerGetCurrentProducersCall { + c.Call = c.Call.DoAndReturn(f) + return c } // GetCurrentSpan mocks base method. @@ -76,9 +129,33 @@ func (m *MockSpanner) GetCurrentSpan(arg0 consensus.SystemCall) (*heimdall.Span, } // GetCurrentSpan indicates an expected call of GetCurrentSpan. -func (mr *MockSpannerMockRecorder) GetCurrentSpan(arg0 interface{}) *gomock.Call { +func (mr *MockSpannerMockRecorder) GetCurrentSpan(arg0 any) *MockSpannerGetCurrentSpanCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentSpan", reflect.TypeOf((*MockSpanner)(nil).GetCurrentSpan), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentSpan", reflect.TypeOf((*MockSpanner)(nil).GetCurrentSpan), arg0) + return &MockSpannerGetCurrentSpanCall{Call: call} +} + +// MockSpannerGetCurrentSpanCall wrap *gomock.Call +type MockSpannerGetCurrentSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpannerGetCurrentSpanCall) Return(arg0 *heimdall.Span, arg1 error) *MockSpannerGetCurrentSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpannerGetCurrentSpanCall) Do(f func(consensus.SystemCall) (*heimdall.Span, error)) *MockSpannerGetCurrentSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpannerGetCurrentSpanCall) DoAndReturn(f func(consensus.SystemCall) (*heimdall.Span, error)) *MockSpannerGetCurrentSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c } // GetCurrentValidators mocks base method. @@ -91,7 +168,31 @@ func (m *MockSpanner) GetCurrentValidators(arg0 uint64, arg1 common.Address, arg } // GetCurrentValidators indicates an expected call of GetCurrentValidators. -func (mr *MockSpannerMockRecorder) GetCurrentValidators(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockSpannerMockRecorder) GetCurrentValidators(arg0, arg1, arg2 any) *MockSpannerGetCurrentValidatorsCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentValidators", reflect.TypeOf((*MockSpanner)(nil).GetCurrentValidators), arg0, arg1, arg2) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentValidators", reflect.TypeOf((*MockSpanner)(nil).GetCurrentValidators), arg0, arg1, arg2) + return &MockSpannerGetCurrentValidatorsCall{Call: call} +} + +// MockSpannerGetCurrentValidatorsCall wrap *gomock.Call +type MockSpannerGetCurrentValidatorsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpannerGetCurrentValidatorsCall) Return(arg0 []*valset.Validator, arg1 error) *MockSpannerGetCurrentValidatorsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpannerGetCurrentValidatorsCall) Do(f func(uint64, common.Address, consensus.ChainHeaderReader) ([]*valset.Validator, error)) *MockSpannerGetCurrentValidatorsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpannerGetCurrentValidatorsCall) DoAndReturn(f func(uint64, common.Address, consensus.ChainHeaderReader) ([]*valset.Validator, error)) *MockSpannerGetCurrentValidatorsCall { + c.Call = c.Call.DoAndReturn(f) + return c } diff --git a/polygon/bor/statefull/processor.go b/polygon/bor/statefull/processor.go index a19844e0f28..fa0baf22bb2 100644 --- a/polygon/bor/statefull/processor.go +++ b/polygon/bor/statefull/processor.go @@ -1,13 +1,9 @@ package statefull import ( - "github.com/holiman/uint256" - ethereum "github.com/ledgerwatch/erigon" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon/consensus" - "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/core/vm" ) type ChainContext struct { @@ -22,39 +18,3 @@ func (c ChainContext) Engine() consensus.Engine { func (c ChainContext) GetHeader(hash libcommon.Hash, number uint64) *types.Header { return c.Chain.GetHeader(hash, number) } - -// callmsg implements core.Message to allow passing it as a transaction simulator. -type Callmsg struct { - ethereum.CallMsg -} - -func (m Callmsg) From() libcommon.Address { return m.CallMsg.From } -func (m Callmsg) Nonce() uint64 { return 0 } -func (m Callmsg) CheckNonce() bool { return false } -func (m Callmsg) To() *libcommon.Address { return m.CallMsg.To } -func (m Callmsg) GasPrice() *uint256.Int { return m.CallMsg.GasPrice } -func (m Callmsg) Gas() uint64 { return m.CallMsg.Gas } -func (m Callmsg) Value() *uint256.Int { return m.CallMsg.Value } -func (m Callmsg) Data() []byte { return m.CallMsg.Data } - -func ApplyBorMessage(vmenv vm.EVM, msg Callmsg) (*core.ExecutionResult, error) { - initialGas := msg.Gas() - - // Apply the transaction to the current state (included in the env) - ret, gasLeft, err := vmenv.Call( - vm.AccountRef(msg.From()), - *msg.To(), - msg.Data(), - msg.Gas(), - msg.Value(), - false, - ) - - gasUsed := initialGas - gasLeft - - return &core.ExecutionResult{ - UsedGas: gasUsed, - Err: err, - ReturnData: ret, - }, nil -} diff --git a/core/types/bor_receipt.go b/polygon/bor/types/bor_receipt.go similarity index 57% rename from core/types/bor_receipt.go rename to polygon/bor/types/bor_receipt.go index 16b30605a9d..08cf384e56e 100644 --- a/core/types/bor_receipt.go +++ b/polygon/bor/types/bor_receipt.go @@ -1,13 +1,13 @@ package types import ( - "github.com/ledgerwatch/erigon-lib/kv/dbutils" "math/big" - "sort" "github.com/holiman/uint256" - libcommon "github.com/ledgerwatch/erigon-lib/common" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" + "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/crypto" ) @@ -28,13 +28,13 @@ func ComputeBorTxHash(blockNumber uint64, blockHash libcommon.Hash) libcommon.Ha } // NewBorTransaction create new bor transaction for bor receipt -func NewBorTransaction() *LegacyTx { - return NewTransaction(0, libcommon.Address{}, uint256.NewInt(0), 0, uint256.NewInt(0), make([]byte, 0)) +func NewBorTransaction() *types.LegacyTx { + return types.NewTransaction(0, libcommon.Address{}, uint256.NewInt(0), 0, uint256.NewInt(0), make([]byte, 0)) } // DeriveFieldsForBorReceipt fills the receipts with their computed fields based on consensus // data and contextual infos like containing block and transactions. -func DeriveFieldsForBorReceipt(receipt *Receipt, blockHash libcommon.Hash, blockNumber uint64, receipts Receipts) error { +func DeriveFieldsForBorReceipt(receipt *types.Receipt, blockHash libcommon.Hash, blockNumber uint64, receipts types.Receipts) { txHash := ComputeBorTxHash(blockNumber, blockHash) txIndex := uint(len(receipts)) @@ -58,36 +58,4 @@ func DeriveFieldsForBorReceipt(receipt *Receipt, blockHash libcommon.Hash, block receipt.Logs[j].Index = uint(logIndex) logIndex++ } - - return nil -} - -// DeriveFieldsForBorLogs fills the receipts with their computed fields based on consensus -// data and contextual infos like containing block and transactions. -func DeriveFieldsForBorLogs(logs []*Log, blockHash libcommon.Hash, blockNumber uint64, txIndex uint, logIndex uint) { - txHash := ComputeBorTxHash(blockNumber, blockHash) - - // the derived log fields can simply be set from the block and transaction - for j := 0; j < len(logs); j++ { - logs[j].BlockNumber = blockNumber - logs[j].BlockHash = blockHash - logs[j].TxHash = txHash - logs[j].TxIndex = txIndex - logs[j].Index = logIndex - logIndex++ - } -} - -// MergeBorLogs merges receipt logs and block receipt logs -func MergeBorLogs(logs []*Log, borLogs []*Log) []*Log { - result := append(logs, borLogs...) - - sort.SliceStable(result, func(i int, j int) bool { - if result[i].BlockNumber == result[j].BlockNumber { - return result[i].Index < result[j].Index - } - return result[i].BlockNumber < result[j].BlockNumber - }) - - return result } diff --git a/polygon/bor/valset/validator_set.go b/polygon/bor/valset/validator_set.go index 8dffbd78f72..a9e554ad0cc 100644 --- a/polygon/bor/valset/validator_set.go +++ b/polygon/bor/valset/validator_set.go @@ -432,7 +432,7 @@ func verifyUpdates(updates []*Validator, vals *ValidatorSet) (updatedTotalVoting _, val := vals.GetByAddress(address) if val == nil { - // New validator, add its voting power the the total. + // New validator, add its voting power the total. updatedTotalVotingPower += valUpdate.VotingPower numNewValidators++ } else { diff --git a/polygon/heimdall/checkpoint.go b/polygon/heimdall/checkpoint.go index 267bb7d8b89..b26d5697866 100644 --- a/polygon/heimdall/checkpoint.go +++ b/polygon/heimdall/checkpoint.go @@ -1,34 +1,113 @@ package heimdall import ( + "encoding/binary" + "encoding/json" "fmt" "math/big" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" ) +var _ Waypoint = Checkpoint{} + +type CheckpointId uint64 + // Checkpoint defines a response object type of bor checkpoint type Checkpoint struct { - Proposer libcommon.Address `json:"proposer"` - StartBlock *big.Int `json:"start_block"` - EndBlock *big.Int `json:"end_block"` - RootHash libcommon.Hash `json:"root_hash"` - BorChainID string `json:"bor_chain_id"` - Timestamp uint64 `json:"timestamp"` + Id CheckpointId + Fields WaypointFields +} + +func (c Checkpoint) StartBlock() *big.Int { + return c.Fields.StartBlock +} + +func (c Checkpoint) EndBlock() *big.Int { + return c.Fields.EndBlock +} + +func (c Checkpoint) RootHash() libcommon.Hash { + return c.Fields.RootHash +} + +func (c Checkpoint) Timestamp() uint64 { + return c.Fields.Timestamp +} + +func (c Checkpoint) Length() uint64 { + return c.Fields.Length() +} + +func (c Checkpoint) CmpRange(n uint64) int { + return c.Fields.CmpRange(n) } func (m Checkpoint) String() string { return fmt.Sprintf( "Checkpoint {%v (%d:%d) %v %v %v}", - m.Proposer.String(), - m.StartBlock, - m.EndBlock, - m.RootHash.Hex(), - m.BorChainID, - m.Timestamp, + m.Fields.Proposer.String(), + m.Fields.StartBlock, + m.Fields.EndBlock, + m.Fields.RootHash.Hex(), + m.Fields.ChainID, + m.Fields.Timestamp, ) } +func (c *Checkpoint) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + Id CheckpointId `json:"id"` + Proposer libcommon.Address `json:"proposer"` + StartBlock *big.Int `json:"start_block"` + EndBlock *big.Int `json:"end_block"` + RootHash libcommon.Hash `json:"root_hash"` + ChainID string `json:"bor_chain_id"` + Timestamp uint64 `json:"timestamp"` + }{ + c.Id, + c.Fields.Proposer, + c.Fields.StartBlock, + c.Fields.EndBlock, + c.Fields.RootHash, + c.Fields.ChainID, + c.Fields.Timestamp, + }) +} + +func (c *Checkpoint) UnmarshalJSON(b []byte) error { + dto := struct { + WaypointFields + RootHash libcommon.Hash `json:"root_hash"` + Id CheckpointId `json:"id"` + }{} + + if err := json.Unmarshal(b, &dto); err != nil { + return err + } + + c.Id = dto.Id + c.Fields = dto.WaypointFields + c.Fields.RootHash = dto.RootHash + + return nil +} + +type Checkpoints []*Checkpoint + +func (cs Checkpoints) Len() int { + return len(cs) +} + +func (cs Checkpoints) Less(i, j int) bool { + return cs[i].StartBlock().Uint64() < cs[j].StartBlock().Uint64() +} + +func (cs Checkpoints) Swap(i, j int) { + cs[i], cs[j] = cs[j], cs[i] +} + type CheckpointResponse struct { Height string `json:"height"` Result Checkpoint `json:"result"` @@ -42,3 +121,37 @@ type CheckpointCountResponse struct { Height string `json:"height"` Result CheckpointCount `json:"result"` } + +type CheckpointListResponse struct { + Height string `json:"height"` + Result Checkpoints `json:"result"` +} + +var ErrCheckpointNotFound = fmt.Errorf("checkpoint not found") + +func CheckpointIdAt(tx kv.Tx, block uint64) (CheckpointId, error) { + var id uint64 + + c, err := tx.Cursor(kv.BorCheckpointEnds) + + if err != nil { + return 0, err + } + + var blockNumBuf [8]byte + binary.BigEndian.PutUint64(blockNumBuf[:], block) + + k, v, err := c.Seek(blockNumBuf[:]) + + if err != nil { + return 0, err + } + + if k == nil { + return 0, fmt.Errorf("%d: %w", block, ErrCheckpointNotFound) + } + + id = binary.BigEndian.Uint64(v) + + return CheckpointId(id), err +} diff --git a/polygon/heimdall/client.go b/polygon/heimdall/client.go index 26339058077..2f506618585 100644 --- a/polygon/heimdall/client.go +++ b/polygon/heimdall/client.go @@ -23,8 +23,10 @@ var ( ErrShutdownDetected = errors.New("shutdown detected") ErrNoResponse = errors.New("got a nil response") ErrNotSuccessfulResponse = errors.New("error while fetching data from Heimdall") - ErrNotInRejectedList = errors.New("milestoneID doesn't exist in rejected list") - ErrNotInMilestoneList = errors.New("milestoneID doesn't exist in Heimdall") + ErrNotInRejectedList = errors.New("milestoneId doesn't exist in rejected list") + ErrNotInMilestoneList = errors.New("milestoneId doesn't exist in Heimdall") + ErrNotInCheckpointList = errors.New("checkpontId doesn't exist in Heimdall") + ErrNotInSpanList = errors.New("milestoneId doesn't exist in Heimdall") ErrServiceUnavailable = errors.New("service unavailable") ) @@ -35,12 +37,17 @@ const ( maxRetries = 5 ) -//go:generate mockgen -destination=./client_mock.go -package=heimdall . HeimdallClient +//go:generate mockgen -typed=true -destination=./client_mock.go -package=heimdall . HeimdallClient type HeimdallClient interface { - StateSyncEvents(ctx context.Context, fromID uint64, to int64) ([]*EventRecordWithTime, error) - Span(ctx context.Context, spanID uint64) (*HeimdallSpan, error) + FetchStateSyncEvents(ctx context.Context, fromId uint64, to time.Time, limit int) ([]*EventRecordWithTime, error) + FetchStateSyncEvent(ctx context.Context, id uint64) (*EventRecordWithTime, error) + + FetchLatestSpan(ctx context.Context) (*Span, error) + FetchSpan(ctx context.Context, spanID uint64) (*Span, error) + FetchCheckpoint(ctx context.Context, number int64) (*Checkpoint, error) FetchCheckpointCount(ctx context.Context) (int64, error) + FetchCheckpoints(ctx context.Context, page uint64, limit uint64) (Checkpoints, error) FetchMilestone(ctx context.Context, number int64) (*Milestone, error) FetchMilestoneCount(ctx context.Context) (int64, error) @@ -56,6 +63,8 @@ type HeimdallClient interface { Close() } +var _ HeimdallClient = &Client{} + type Client struct { urlString string client HttpClient @@ -71,7 +80,7 @@ type Request struct { start time.Time } -//go:generate mockgen -destination=./http_client_mock.go -package=heimdall . HttpClient +//go:generate mockgen -typed=true -destination=./http_client_mock.go -package=heimdall . HttpClient type HttpClient interface { Do(req *http.Request) (*http.Response, error) CloseIdleConnections() @@ -98,9 +107,12 @@ func newHeimdallClient(urlString string, httpClient HttpClient, retryBackOff tim const ( fetchStateSyncEventsFormat = "from-id=%d&to-time=%d&limit=%d" fetchStateSyncEventsPath = "clerk/event-record/list" + fetchStateSyncEvent = "clerk/event-record/%s" - fetchCheckpoint = "/checkpoints/%s" - fetchCheckpointCount = "/checkpoints/count" + fetchCheckpoint = "/checkpoints/%s" + fetchCheckpointCount = "/checkpoints/count" + fetchCheckpointList = "/checkpoints/list" + fetchCheckpointListQueryFormat = "page=%d&limit=%d" fetchMilestoneAt = "/milestone/%d" fetchMilestoneLatest = "/milestone/latest" @@ -110,28 +122,31 @@ const ( fetchNoAckMilestone = "/milestone/noAck/%s" fetchMilestoneID = "/milestone/ID/%s" - fetchSpanFormat = "bor/span/%d" + fetchSpanFormat = "bor/span/%d" + fetchSpanLatest = "bor/latest-span" + fetchSpanListFormat = "page=%d&limit=%d" // max limit = 20 + fetchSpanListPath = "bor/span-list" ) -func (c *Client) StateSyncEvents(ctx context.Context, fromID uint64, to int64) ([]*EventRecordWithTime, error) { +func (c *Client) FetchStateSyncEvents(ctx context.Context, fromID uint64, to time.Time, limit int) ([]*EventRecordWithTime, error) { eventRecords := make([]*EventRecordWithTime, 0) for { - url, err := stateSyncURL(c.urlString, fromID, to) + url, err := stateSyncListURL(c.urlString, fromID, to.Unix()) if err != nil { return nil, err } - c.logger.Debug("[bor.heimdall] Fetching state sync events", "queryParams", url.RawQuery) + c.logger.Trace(heimdallLogPrefix("Fetching state sync events"), "queryParams", url.RawQuery) ctx = withRequestType(ctx, stateSyncRequest) - response, err := FetchWithRetry[StateSyncEventsResponse](ctx, c, url) + response, err := FetchWithRetry[StateSyncEventsResponse](ctx, c, url, c.logger) if err != nil { if errors.Is(err, ErrNoResponse) { // for more info check https://github.com/maticnetwork/heimdall/pull/993 c.logger.Warn( - "[bor.heimdall] check heimdall logs to see if it is in sync - no response when querying state sync events", + heimdallLogPrefix("check heimdall logs to see if it is in sync - no response when querying state sync events"), "path", url.Path, "queryParams", url.RawQuery, ) @@ -146,7 +161,7 @@ func (c *Client) StateSyncEvents(ctx context.Context, fromID uint64, to int64) ( eventRecords = append(eventRecords, response.Result...) - if len(response.Result) < stateFetchLimit { + if len(response.Result) < stateFetchLimit || (limit > 0 && len(eventRecords) >= limit) { break } @@ -160,7 +175,49 @@ func (c *Client) StateSyncEvents(ctx context.Context, fromID uint64, to int64) ( return eventRecords, nil } -func (c *Client) Span(ctx context.Context, spanID uint64) (*HeimdallSpan, error) { +func (c *Client) FetchStateSyncEvent(ctx context.Context, id uint64) (*EventRecordWithTime, error) { + url, err := stateSyncURL(c.urlString, id) + + if err != nil { + return nil, err + } + + ctx = withRequestType(ctx, stateSyncRequest) + + isRecoverableError := func(err error) bool { + return !strings.Contains(err.Error(), "could not get state record; No record found") + } + + response, err := FetchWithRetryEx[StateSyncEventResponse](ctx, c, url, isRecoverableError, c.logger) + + if err != nil { + if strings.Contains(err.Error(), "could not get state record; No record found") { + return nil, ErrEventRecordNotFound + } + + return nil, err + } + + return &response.Result, nil +} + +func (c *Client) FetchLatestSpan(ctx context.Context) (*Span, error) { + url, err := latestSpanURL(c.urlString) + if err != nil { + return nil, err + } + + ctx = withRequestType(ctx, spanRequest) + + response, err := FetchWithRetry[SpanResponse](ctx, c, url, c.logger) + if err != nil { + return nil, err + } + + return &response.Result, nil +} + +func (c *Client) FetchSpan(ctx context.Context, spanID uint64) (*Span, error) { url, err := spanURL(c.urlString, spanID) if err != nil { return nil, err @@ -168,7 +225,7 @@ func (c *Client) Span(ctx context.Context, spanID uint64) (*HeimdallSpan, error) ctx = withRequestType(ctx, spanRequest) - response, err := FetchWithRetry[SpanResponse](ctx, c, url) + response, err := FetchWithRetry[SpanResponse](ctx, c, url, c.logger) if err != nil { return nil, err } @@ -185,7 +242,7 @@ func (c *Client) FetchCheckpoint(ctx context.Context, number int64) (*Checkpoint ctx = withRequestType(ctx, checkpointRequest) - response, err := FetchWithRetry[CheckpointResponse](ctx, c, url) + response, err := FetchWithRetry[CheckpointResponse](ctx, c, url, c.logger) if err != nil { return nil, err } @@ -193,6 +250,22 @@ func (c *Client) FetchCheckpoint(ctx context.Context, number int64) (*Checkpoint return &response.Result, nil } +func (c *Client) FetchCheckpoints(ctx context.Context, page uint64, limit uint64) (Checkpoints, error) { + url, err := checkpointListURL(c.urlString, page, limit) + if err != nil { + return nil, err + } + + ctx = withRequestType(ctx, checkpointListRequest) + + response, err := FetchWithRetry[CheckpointListResponse](ctx, c, url, c.logger) + if err != nil { + return nil, err + } + + return response.Result, nil +} + func isInvalidMilestoneIndexError(err error) bool { return errors.Is(err, ErrNotSuccessfulResponse) && strings.Contains(err.Error(), "Invalid milestone index") @@ -211,7 +284,7 @@ func (c *Client) FetchMilestone(ctx context.Context, number int64) (*Milestone, return !isInvalidMilestoneIndexError(err) } - response, err := FetchWithRetryEx[MilestoneResponse](ctx, c, url, isRecoverableError) + response, err := FetchWithRetryEx[MilestoneResponse](ctx, c, url, isRecoverableError, c.logger) if err != nil { if isInvalidMilestoneIndexError(err) { return nil, fmt.Errorf("%w: number %d", ErrNotInMilestoneList, number) @@ -219,6 +292,8 @@ func (c *Client) FetchMilestone(ctx context.Context, number int64) (*Milestone, return nil, err } + response.Result.Id = MilestoneId(number) + return &response.Result, nil } @@ -231,7 +306,7 @@ func (c *Client) FetchCheckpointCount(ctx context.Context) (int64, error) { ctx = withRequestType(ctx, checkpointCountRequest) - response, err := FetchWithRetry[CheckpointCountResponse](ctx, c, url) + response, err := FetchWithRetry[CheckpointCountResponse](ctx, c, url, c.logger) if err != nil { return 0, err } @@ -248,7 +323,7 @@ func (c *Client) FetchMilestoneCount(ctx context.Context) (int64, error) { ctx = withRequestType(ctx, milestoneCountRequest) - response, err := FetchWithRetry[MilestoneCountResponse](ctx, c, url) + response, err := FetchWithRetry[MilestoneCountResponse](ctx, c, url, c.logger) if err != nil { return 0, err } @@ -265,7 +340,7 @@ func (c *Client) FetchLastNoAckMilestone(ctx context.Context) (string, error) { ctx = withRequestType(ctx, milestoneLastNoAckRequest) - response, err := FetchWithRetry[MilestoneLastNoAckResponse](ctx, c, url) + response, err := FetchWithRetry[MilestoneLastNoAckResponse](ctx, c, url, c.logger) if err != nil { return "", err } @@ -282,7 +357,7 @@ func (c *Client) FetchNoAckMilestone(ctx context.Context, milestoneID string) er ctx = withRequestType(ctx, milestoneNoAckRequest) - response, err := FetchWithRetry[MilestoneNoAckResponse](ctx, c, url) + response, err := FetchWithRetry[MilestoneNoAckResponse](ctx, c, url, c.logger) if err != nil { return err } @@ -304,7 +379,7 @@ func (c *Client) FetchMilestoneID(ctx context.Context, milestoneID string) error ctx = withRequestType(ctx, milestoneIDRequest) - response, err := FetchWithRetry[MilestoneIDResponse](ctx, c, url) + response, err := FetchWithRetry[MilestoneIDResponse](ctx, c, url, c.logger) if err != nil { return err @@ -318,12 +393,18 @@ func (c *Client) FetchMilestoneID(ctx context.Context, milestoneID string) error } // FetchWithRetry returns data from heimdall with retry -func FetchWithRetry[T any](ctx context.Context, client *Client, url *url.URL) (*T, error) { - return FetchWithRetryEx[T](ctx, client, url, nil) +func FetchWithRetry[T any](ctx context.Context, client *Client, url *url.URL, logger log.Logger) (*T, error) { + return FetchWithRetryEx[T](ctx, client, url, nil, logger) } // FetchWithRetryEx returns data from heimdall with retry -func FetchWithRetryEx[T any](ctx context.Context, client *Client, url *url.URL, isRecoverableError func(error) bool) (result *T, err error) { +func FetchWithRetryEx[T any]( + ctx context.Context, + client *Client, + url *url.URL, + isRecoverableError func(error) bool, + logger log.Logger, +) (result *T, err error) { attempt := 0 // create a new ticker for retrying the request ticker := time.NewTicker(client.retryBackOff) @@ -333,7 +414,7 @@ func FetchWithRetryEx[T any](ctx context.Context, client *Client, url *url.URL, attempt++ request := &Request{client: client.client, url: url, start: time.Now()} - result, err = Fetch[T](ctx, request) + result, err = Fetch[T](ctx, request, logger) if err == nil { return result, nil } @@ -342,7 +423,7 @@ func FetchWithRetryEx[T any](ctx context.Context, client *Client, url *url.URL, // yet in heimdall. E.g. when the hard fork hasn't hit yet but heimdall // is upgraded. if errors.Is(err, ErrServiceUnavailable) { - client.logger.Debug("[bor.heimdall] service unavailable at the moment", "path", url.Path, "queryParams", url.RawQuery, "attempt", attempt, "err", err) + client.logger.Debug(heimdallLogPrefix("service unavailable at the moment"), "path", url.Path, "queryParams", url.RawQuery, "attempt", attempt, "err", err) return nil, err } @@ -350,14 +431,14 @@ func FetchWithRetryEx[T any](ctx context.Context, client *Client, url *url.URL, return nil, err } - client.logger.Warn("[bor.heimdall] an error while fetching", "path", url.Path, "queryParams", url.RawQuery, "attempt", attempt, "err", err) + client.logger.Warn(heimdallLogPrefix("an error while fetching"), "path", url.Path, "queryParams", url.RawQuery, "attempt", attempt, "err", err) select { case <-ctx.Done(): - client.logger.Debug("[bor.heimdall] request canceled", "reason", ctx.Err(), "path", url.Path, "queryParams", url.RawQuery, "attempt", attempt) + client.logger.Debug(heimdallLogPrefix("request canceled"), "reason", ctx.Err(), "path", url.Path, "queryParams", url.RawQuery, "attempt", attempt) return nil, ctx.Err() case <-client.closeCh: - client.logger.Debug("[bor.heimdall] shutdown detected, terminating request", "path", url.Path, "queryParams", url.RawQuery) + client.logger.Debug(heimdallLogPrefix("shutdown detected, terminating request"), "path", url.Path, "queryParams", url.RawQuery) return nil, ErrShutdownDetected case <-ticker.C: // retry @@ -368,7 +449,7 @@ func FetchWithRetryEx[T any](ctx context.Context, client *Client, url *url.URL, } // Fetch fetches response from heimdall -func Fetch[T any](ctx context.Context, request *Request) (*T, error) { +func Fetch[T any](ctx context.Context, request *Request, logger log.Logger) (*T, error) { isSuccessful := false defer func() { @@ -379,7 +460,7 @@ func Fetch[T any](ctx context.Context, request *Request) (*T, error) { result := new(T) - body, err := internalFetchWithTimeout(ctx, request.client, request.url) + body, err := internalFetchWithTimeout(ctx, request.client, request.url, logger) if err != nil { return nil, err } @@ -402,12 +483,19 @@ func spanURL(urlString string, spanID uint64) (*url.URL, error) { return makeURL(urlString, fmt.Sprintf(fetchSpanFormat, spanID), "") } -func stateSyncURL(urlString string, fromID uint64, to int64) (*url.URL, error) { - queryParams := fmt.Sprintf(fetchStateSyncEventsFormat, fromID, to, stateFetchLimit) +func latestSpanURL(urlString string) (*url.URL, error) { + return makeURL(urlString, fetchSpanLatest, "") +} +func stateSyncListURL(urlString string, fromID uint64, to int64) (*url.URL, error) { + queryParams := fmt.Sprintf(fetchStateSyncEventsFormat, fromID, to, stateFetchLimit) return makeURL(urlString, fetchStateSyncEventsPath, queryParams) } +func stateSyncURL(urlString string, id uint64) (*url.URL, error) { + return makeURL(urlString, fmt.Sprintf(fetchStateSyncEvent, fmt.Sprint(id)), "") +} + func checkpointURL(urlString string, number int64) (*url.URL, error) { url := "" if number == -1 { @@ -423,6 +511,10 @@ func checkpointCountURL(urlString string) (*url.URL, error) { return makeURL(urlString, fetchCheckpointCount, "") } +func checkpointListURL(urlString string, page uint64, limit uint64) (*url.URL, error) { + return makeURL(urlString, fetchCheckpointList, fmt.Sprintf(fetchCheckpointListQueryFormat, page, limit)) +} + func milestoneURL(urlString string, number int64) (*url.URL, error) { if number == -1 { return makeURL(urlString, fetchMilestoneLatest, "") @@ -459,12 +551,14 @@ func makeURL(urlString, rawPath, rawQuery string) (*url.URL, error) { } // internal fetch method -func internalFetch(ctx context.Context, client HttpClient, u *url.URL) ([]byte, error) { +func internalFetch(ctx context.Context, client HttpClient, u *url.URL, logger log.Logger) ([]byte, error) { req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), nil) if err != nil { return nil, err } + logger.Trace(heimdallLogPrefix("http client get request"), "uri", u.RequestURI()) + res, err := client.Do(req) if err != nil { return nil, err @@ -497,12 +591,12 @@ func internalFetch(ctx context.Context, client HttpClient, u *url.URL) ([]byte, return body, nil } -func internalFetchWithTimeout(ctx context.Context, client HttpClient, url *url.URL) ([]byte, error) { +func internalFetchWithTimeout(ctx context.Context, client HttpClient, url *url.URL, logger log.Logger) ([]byte, error) { ctx, cancel := context.WithTimeout(ctx, apiHeimdallTimeout) defer cancel() // request data once - return internalFetch(ctx, client, url) + return internalFetch(ctx, client, url, logger) } // Close sends a signal to stop the running process diff --git a/polygon/heimdall/client_mock.go b/polygon/heimdall/client_mock.go index 352ae1b5f3a..7d3d81c2b06 100644 --- a/polygon/heimdall/client_mock.go +++ b/polygon/heimdall/client_mock.go @@ -1,5 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/ledgerwatch/erigon/polygon/heimdall (interfaces: HeimdallClient) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./client_mock.go -package=heimdall . HeimdallClient +// // Package heimdall is a generated GoMock package. package heimdall @@ -7,8 +12,9 @@ package heimdall import ( context "context" reflect "reflect" + time "time" - gomock "github.com/golang/mock/gomock" + gomock "go.uber.org/mock/gomock" ) // MockHeimdallClient is a mock of HeimdallClient interface. @@ -41,9 +47,33 @@ func (m *MockHeimdallClient) Close() { } // Close indicates an expected call of Close. -func (mr *MockHeimdallClientMockRecorder) Close() *gomock.Call { +func (mr *MockHeimdallClientMockRecorder) Close() *MockHeimdallClientCloseCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockHeimdallClient)(nil).Close)) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockHeimdallClient)(nil).Close)) + return &MockHeimdallClientCloseCall{Call: call} +} + +// MockHeimdallClientCloseCall wrap *gomock.Call +type MockHeimdallClientCloseCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientCloseCall) Return() *MockHeimdallClientCloseCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientCloseCall) Do(f func()) *MockHeimdallClientCloseCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientCloseCall) DoAndReturn(f func()) *MockHeimdallClientCloseCall { + c.Call = c.Call.DoAndReturn(f) + return c } // FetchCheckpoint mocks base method. @@ -56,9 +86,33 @@ func (m *MockHeimdallClient) FetchCheckpoint(arg0 context.Context, arg1 int64) ( } // FetchCheckpoint indicates an expected call of FetchCheckpoint. -func (mr *MockHeimdallClientMockRecorder) FetchCheckpoint(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockHeimdallClientMockRecorder) FetchCheckpoint(arg0, arg1 any) *MockHeimdallClientFetchCheckpointCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpoint", reflect.TypeOf((*MockHeimdallClient)(nil).FetchCheckpoint), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpoint", reflect.TypeOf((*MockHeimdallClient)(nil).FetchCheckpoint), arg0, arg1) + return &MockHeimdallClientFetchCheckpointCall{Call: call} +} + +// MockHeimdallClientFetchCheckpointCall wrap *gomock.Call +type MockHeimdallClientFetchCheckpointCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchCheckpointCall) Return(arg0 *Checkpoint, arg1 error) *MockHeimdallClientFetchCheckpointCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchCheckpointCall) Do(f func(context.Context, int64) (*Checkpoint, error)) *MockHeimdallClientFetchCheckpointCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchCheckpointCall) DoAndReturn(f func(context.Context, int64) (*Checkpoint, error)) *MockHeimdallClientFetchCheckpointCall { + c.Call = c.Call.DoAndReturn(f) + return c } // FetchCheckpointCount mocks base method. @@ -71,9 +125,72 @@ func (m *MockHeimdallClient) FetchCheckpointCount(arg0 context.Context) (int64, } // FetchCheckpointCount indicates an expected call of FetchCheckpointCount. -func (mr *MockHeimdallClientMockRecorder) FetchCheckpointCount(arg0 interface{}) *gomock.Call { +func (mr *MockHeimdallClientMockRecorder) FetchCheckpointCount(arg0 any) *MockHeimdallClientFetchCheckpointCountCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpointCount", reflect.TypeOf((*MockHeimdallClient)(nil).FetchCheckpointCount), arg0) + return &MockHeimdallClientFetchCheckpointCountCall{Call: call} +} + +// MockHeimdallClientFetchCheckpointCountCall wrap *gomock.Call +type MockHeimdallClientFetchCheckpointCountCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchCheckpointCountCall) Return(arg0 int64, arg1 error) *MockHeimdallClientFetchCheckpointCountCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchCheckpointCountCall) Do(f func(context.Context) (int64, error)) *MockHeimdallClientFetchCheckpointCountCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchCheckpointCountCall) DoAndReturn(f func(context.Context) (int64, error)) *MockHeimdallClientFetchCheckpointCountCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchCheckpoints mocks base method. +func (m *MockHeimdallClient) FetchCheckpoints(arg0 context.Context, arg1, arg2 uint64) (Checkpoints, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchCheckpoints", arg0, arg1, arg2) + ret0, _ := ret[0].(Checkpoints) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchCheckpoints indicates an expected call of FetchCheckpoints. +func (mr *MockHeimdallClientMockRecorder) FetchCheckpoints(arg0, arg1, arg2 any) *MockHeimdallClientFetchCheckpointsCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpointCount", reflect.TypeOf((*MockHeimdallClient)(nil).FetchCheckpointCount), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpoints", reflect.TypeOf((*MockHeimdallClient)(nil).FetchCheckpoints), arg0, arg1, arg2) + return &MockHeimdallClientFetchCheckpointsCall{Call: call} +} + +// MockHeimdallClientFetchCheckpointsCall wrap *gomock.Call +type MockHeimdallClientFetchCheckpointsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchCheckpointsCall) Return(arg0 Checkpoints, arg1 error) *MockHeimdallClientFetchCheckpointsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchCheckpointsCall) Do(f func(context.Context, uint64, uint64) (Checkpoints, error)) *MockHeimdallClientFetchCheckpointsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchCheckpointsCall) DoAndReturn(f func(context.Context, uint64, uint64) (Checkpoints, error)) *MockHeimdallClientFetchCheckpointsCall { + c.Call = c.Call.DoAndReturn(f) + return c } // FetchLastNoAckMilestone mocks base method. @@ -86,9 +203,72 @@ func (m *MockHeimdallClient) FetchLastNoAckMilestone(arg0 context.Context) (stri } // FetchLastNoAckMilestone indicates an expected call of FetchLastNoAckMilestone. -func (mr *MockHeimdallClientMockRecorder) FetchLastNoAckMilestone(arg0 interface{}) *gomock.Call { +func (mr *MockHeimdallClientMockRecorder) FetchLastNoAckMilestone(arg0 any) *MockHeimdallClientFetchLastNoAckMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchLastNoAckMilestone", reflect.TypeOf((*MockHeimdallClient)(nil).FetchLastNoAckMilestone), arg0) + return &MockHeimdallClientFetchLastNoAckMilestoneCall{Call: call} +} + +// MockHeimdallClientFetchLastNoAckMilestoneCall wrap *gomock.Call +type MockHeimdallClientFetchLastNoAckMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchLastNoAckMilestoneCall) Return(arg0 string, arg1 error) *MockHeimdallClientFetchLastNoAckMilestoneCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchLastNoAckMilestoneCall) Do(f func(context.Context) (string, error)) *MockHeimdallClientFetchLastNoAckMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchLastNoAckMilestoneCall) DoAndReturn(f func(context.Context) (string, error)) *MockHeimdallClientFetchLastNoAckMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchLatestSpan mocks base method. +func (m *MockHeimdallClient) FetchLatestSpan(arg0 context.Context) (*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchLatestSpan", arg0) + ret0, _ := ret[0].(*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchLatestSpan indicates an expected call of FetchLatestSpan. +func (mr *MockHeimdallClientMockRecorder) FetchLatestSpan(arg0 any) *MockHeimdallClientFetchLatestSpanCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchLastNoAckMilestone", reflect.TypeOf((*MockHeimdallClient)(nil).FetchLastNoAckMilestone), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchLatestSpan", reflect.TypeOf((*MockHeimdallClient)(nil).FetchLatestSpan), arg0) + return &MockHeimdallClientFetchLatestSpanCall{Call: call} +} + +// MockHeimdallClientFetchLatestSpanCall wrap *gomock.Call +type MockHeimdallClientFetchLatestSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchLatestSpanCall) Return(arg0 *Span, arg1 error) *MockHeimdallClientFetchLatestSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchLatestSpanCall) Do(f func(context.Context) (*Span, error)) *MockHeimdallClientFetchLatestSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchLatestSpanCall) DoAndReturn(f func(context.Context) (*Span, error)) *MockHeimdallClientFetchLatestSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c } // FetchMilestone mocks base method. @@ -101,9 +281,33 @@ func (m *MockHeimdallClient) FetchMilestone(arg0 context.Context, arg1 int64) (* } // FetchMilestone indicates an expected call of FetchMilestone. -func (mr *MockHeimdallClientMockRecorder) FetchMilestone(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockHeimdallClientMockRecorder) FetchMilestone(arg0, arg1 any) *MockHeimdallClientFetchMilestoneCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestone", reflect.TypeOf((*MockHeimdallClient)(nil).FetchMilestone), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestone", reflect.TypeOf((*MockHeimdallClient)(nil).FetchMilestone), arg0, arg1) + return &MockHeimdallClientFetchMilestoneCall{Call: call} +} + +// MockHeimdallClientFetchMilestoneCall wrap *gomock.Call +type MockHeimdallClientFetchMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchMilestoneCall) Return(arg0 *Milestone, arg1 error) *MockHeimdallClientFetchMilestoneCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchMilestoneCall) Do(f func(context.Context, int64) (*Milestone, error)) *MockHeimdallClientFetchMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchMilestoneCall) DoAndReturn(f func(context.Context, int64) (*Milestone, error)) *MockHeimdallClientFetchMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c } // FetchMilestoneCount mocks base method. @@ -116,9 +320,33 @@ func (m *MockHeimdallClient) FetchMilestoneCount(arg0 context.Context) (int64, e } // FetchMilestoneCount indicates an expected call of FetchMilestoneCount. -func (mr *MockHeimdallClientMockRecorder) FetchMilestoneCount(arg0 interface{}) *gomock.Call { +func (mr *MockHeimdallClientMockRecorder) FetchMilestoneCount(arg0 any) *MockHeimdallClientFetchMilestoneCountCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestoneCount", reflect.TypeOf((*MockHeimdallClient)(nil).FetchMilestoneCount), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestoneCount", reflect.TypeOf((*MockHeimdallClient)(nil).FetchMilestoneCount), arg0) + return &MockHeimdallClientFetchMilestoneCountCall{Call: call} +} + +// MockHeimdallClientFetchMilestoneCountCall wrap *gomock.Call +type MockHeimdallClientFetchMilestoneCountCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchMilestoneCountCall) Return(arg0 int64, arg1 error) *MockHeimdallClientFetchMilestoneCountCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchMilestoneCountCall) Do(f func(context.Context) (int64, error)) *MockHeimdallClientFetchMilestoneCountCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchMilestoneCountCall) DoAndReturn(f func(context.Context) (int64, error)) *MockHeimdallClientFetchMilestoneCountCall { + c.Call = c.Call.DoAndReturn(f) + return c } // FetchMilestoneID mocks base method. @@ -130,9 +358,33 @@ func (m *MockHeimdallClient) FetchMilestoneID(arg0 context.Context, arg1 string) } // FetchMilestoneID indicates an expected call of FetchMilestoneID. -func (mr *MockHeimdallClientMockRecorder) FetchMilestoneID(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockHeimdallClientMockRecorder) FetchMilestoneID(arg0, arg1 any) *MockHeimdallClientFetchMilestoneIDCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestoneID", reflect.TypeOf((*MockHeimdallClient)(nil).FetchMilestoneID), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestoneID", reflect.TypeOf((*MockHeimdallClient)(nil).FetchMilestoneID), arg0, arg1) + return &MockHeimdallClientFetchMilestoneIDCall{Call: call} +} + +// MockHeimdallClientFetchMilestoneIDCall wrap *gomock.Call +type MockHeimdallClientFetchMilestoneIDCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchMilestoneIDCall) Return(arg0 error) *MockHeimdallClientFetchMilestoneIDCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchMilestoneIDCall) Do(f func(context.Context, string) error) *MockHeimdallClientFetchMilestoneIDCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchMilestoneIDCall) DoAndReturn(f func(context.Context, string) error) *MockHeimdallClientFetchMilestoneIDCall { + c.Call = c.Call.DoAndReturn(f) + return c } // FetchNoAckMilestone mocks base method. @@ -144,37 +396,148 @@ func (m *MockHeimdallClient) FetchNoAckMilestone(arg0 context.Context, arg1 stri } // FetchNoAckMilestone indicates an expected call of FetchNoAckMilestone. -func (mr *MockHeimdallClientMockRecorder) FetchNoAckMilestone(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockHeimdallClientMockRecorder) FetchNoAckMilestone(arg0, arg1 any) *MockHeimdallClientFetchNoAckMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchNoAckMilestone", reflect.TypeOf((*MockHeimdallClient)(nil).FetchNoAckMilestone), arg0, arg1) + return &MockHeimdallClientFetchNoAckMilestoneCall{Call: call} +} + +// MockHeimdallClientFetchNoAckMilestoneCall wrap *gomock.Call +type MockHeimdallClientFetchNoAckMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchNoAckMilestoneCall) Return(arg0 error) *MockHeimdallClientFetchNoAckMilestoneCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchNoAckMilestoneCall) Do(f func(context.Context, string) error) *MockHeimdallClientFetchNoAckMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchNoAckMilestoneCall) DoAndReturn(f func(context.Context, string) error) *MockHeimdallClientFetchNoAckMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchSpan mocks base method. +func (m *MockHeimdallClient) FetchSpan(arg0 context.Context, arg1 uint64) (*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchSpan", arg0, arg1) + ret0, _ := ret[0].(*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchSpan indicates an expected call of FetchSpan. +func (mr *MockHeimdallClientMockRecorder) FetchSpan(arg0, arg1 any) *MockHeimdallClientFetchSpanCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchNoAckMilestone", reflect.TypeOf((*MockHeimdallClient)(nil).FetchNoAckMilestone), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchSpan", reflect.TypeOf((*MockHeimdallClient)(nil).FetchSpan), arg0, arg1) + return &MockHeimdallClientFetchSpanCall{Call: call} +} + +// MockHeimdallClientFetchSpanCall wrap *gomock.Call +type MockHeimdallClientFetchSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchSpanCall) Return(arg0 *Span, arg1 error) *MockHeimdallClientFetchSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchSpanCall) Do(f func(context.Context, uint64) (*Span, error)) *MockHeimdallClientFetchSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchSpanCall) DoAndReturn(f func(context.Context, uint64) (*Span, error)) *MockHeimdallClientFetchSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c } -// Span mocks base method. -func (m *MockHeimdallClient) Span(arg0 context.Context, arg1 uint64) (*HeimdallSpan, error) { +// FetchStateSyncEvent mocks base method. +func (m *MockHeimdallClient) FetchStateSyncEvent(arg0 context.Context, arg1 uint64) (*EventRecordWithTime, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Span", arg0, arg1) - ret0, _ := ret[0].(*HeimdallSpan) + ret := m.ctrl.Call(m, "FetchStateSyncEvent", arg0, arg1) + ret0, _ := ret[0].(*EventRecordWithTime) ret1, _ := ret[1].(error) return ret0, ret1 } -// Span indicates an expected call of Span. -func (mr *MockHeimdallClientMockRecorder) Span(arg0, arg1 interface{}) *gomock.Call { +// FetchStateSyncEvent indicates an expected call of FetchStateSyncEvent. +func (mr *MockHeimdallClientMockRecorder) FetchStateSyncEvent(arg0, arg1 any) *MockHeimdallClientFetchStateSyncEventCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Span", reflect.TypeOf((*MockHeimdallClient)(nil).Span), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchStateSyncEvent", reflect.TypeOf((*MockHeimdallClient)(nil).FetchStateSyncEvent), arg0, arg1) + return &MockHeimdallClientFetchStateSyncEventCall{Call: call} } -// StateSyncEvents mocks base method. -func (m *MockHeimdallClient) StateSyncEvents(arg0 context.Context, arg1 uint64, arg2 int64) ([]*EventRecordWithTime, error) { +// MockHeimdallClientFetchStateSyncEventCall wrap *gomock.Call +type MockHeimdallClientFetchStateSyncEventCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchStateSyncEventCall) Return(arg0 *EventRecordWithTime, arg1 error) *MockHeimdallClientFetchStateSyncEventCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchStateSyncEventCall) Do(f func(context.Context, uint64) (*EventRecordWithTime, error)) *MockHeimdallClientFetchStateSyncEventCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchStateSyncEventCall) DoAndReturn(f func(context.Context, uint64) (*EventRecordWithTime, error)) *MockHeimdallClientFetchStateSyncEventCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchStateSyncEvents mocks base method. +func (m *MockHeimdallClient) FetchStateSyncEvents(arg0 context.Context, arg1 uint64, arg2 time.Time, arg3 int) ([]*EventRecordWithTime, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "StateSyncEvents", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "FetchStateSyncEvents", arg0, arg1, arg2, arg3) ret0, _ := ret[0].([]*EventRecordWithTime) ret1, _ := ret[1].(error) return ret0, ret1 } -// StateSyncEvents indicates an expected call of StateSyncEvents. -func (mr *MockHeimdallClientMockRecorder) StateSyncEvents(arg0, arg1, arg2 interface{}) *gomock.Call { +// FetchStateSyncEvents indicates an expected call of FetchStateSyncEvents. +func (mr *MockHeimdallClientMockRecorder) FetchStateSyncEvents(arg0, arg1, arg2, arg3 any) *MockHeimdallClientFetchStateSyncEventsCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSyncEvents", reflect.TypeOf((*MockHeimdallClient)(nil).StateSyncEvents), arg0, arg1, arg2) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchStateSyncEvents", reflect.TypeOf((*MockHeimdallClient)(nil).FetchStateSyncEvents), arg0, arg1, arg2, arg3) + return &MockHeimdallClientFetchStateSyncEventsCall{Call: call} +} + +// MockHeimdallClientFetchStateSyncEventsCall wrap *gomock.Call +type MockHeimdallClientFetchStateSyncEventsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallClientFetchStateSyncEventsCall) Return(arg0 []*EventRecordWithTime, arg1 error) *MockHeimdallClientFetchStateSyncEventsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallClientFetchStateSyncEventsCall) Do(f func(context.Context, uint64, time.Time, int) ([]*EventRecordWithTime, error)) *MockHeimdallClientFetchStateSyncEventsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallClientFetchStateSyncEventsCall) DoAndReturn(f func(context.Context, uint64, time.Time, int) ([]*EventRecordWithTime, error)) *MockHeimdallClientFetchStateSyncEventsCall { + c.Call = c.Call.DoAndReturn(f) + return c } diff --git a/polygon/heimdall/client_test.go b/polygon/heimdall/client_test.go index 19638dab8dc..a5a7c956dc9 100644 --- a/polygon/heimdall/client_test.go +++ b/polygon/heimdall/client_test.go @@ -7,9 +7,9 @@ import ( "testing" "time" - "github.com/golang/mock/gomock" "github.com/ledgerwatch/log/v3" "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" "github.com/ledgerwatch/erigon/turbo/testlog" ) @@ -38,7 +38,7 @@ func TestHeimdallClientFetchesTerminateUponTooManyErrors(t *testing.T) { logger := testlog.Logger(t, log.LvlDebug) heimdallClient := newHeimdallClient("https://dummyheimdal.com", httpClient, 100*time.Millisecond, 5, logger) - spanRes, err := heimdallClient.Span(ctx, 1534) + spanRes, err := heimdallClient.FetchSpan(ctx, 1534) require.Nil(t, spanRes) require.Error(t, err) } @@ -57,7 +57,7 @@ func TestHeimdallClientStateSyncEventsReturnsErrNoResponseWhenHttp200WithEmptyBo logger := testlog.Logger(t, log.LvlDebug) heimdallClient := newHeimdallClient("https://dummyheimdal.com", httpClient, time.Millisecond, 2, logger) - spanRes, err := heimdallClient.StateSyncEvents(ctx, 100, time.Now().Unix()) + spanRes, err := heimdallClient.FetchStateSyncEvents(ctx, 100, time.Now(), 0) require.Nil(t, spanRes) require.ErrorIs(t, err, ErrNoResponse) } diff --git a/polygon/heimdall/event_record.go b/polygon/heimdall/event_record.go index 09d9be406de..b7ae3ac68dc 100644 --- a/polygon/heimdall/event_record.go +++ b/polygon/heimdall/event_record.go @@ -1,11 +1,16 @@ package heimdall import ( + "bytes" + "errors" "fmt" + "math/big" "time" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutility" + "github.com/ledgerwatch/erigon/accounts/abi" + "github.com/ledgerwatch/erigon/rlp" ) // EventRecord represents state record @@ -23,6 +28,8 @@ type EventRecordWithTime struct { Time time.Time `json:"record_time" yaml:"record_time"` } +var ErrEventRecordNotFound = fmt.Errorf("event record not found") + // String returns the string representatin of a state record func (e *EventRecordWithTime) String() string { return fmt.Sprintf( @@ -48,7 +55,33 @@ func (e *EventRecordWithTime) BuildEventRecord() *EventRecord { } } +func UnpackEventRecordWithTime(stateContract abi.ABI, encodedEvent rlp.RawValue) (*EventRecordWithTime, error) { + commitStateInputs := stateContract.Methods["commitState"].Inputs + methodId := stateContract.Methods["commitState"].ID + + if bytes.Equal(methodId, encodedEvent[0:4]) { + t := time.Unix((&big.Int{}).SetBytes(encodedEvent[4:36]).Int64(), 0) + args, _ := commitStateInputs.Unpack(encodedEvent[4:]) + + if len(args) == 2 { + var eventRecord EventRecord + if err := rlp.DecodeBytes(args[1].([]byte), &eventRecord); err != nil { + return nil, err + } + + return &EventRecordWithTime{EventRecord: eventRecord, Time: t}, nil + } + } + + return nil, errors.New("no valid record") +} + type StateSyncEventsResponse struct { Height string `json:"height"` Result []*EventRecordWithTime `json:"result"` } + +type StateSyncEventResponse struct { + Height string `json:"height"` + Result EventRecordWithTime `json:"result"` +} diff --git a/polygon/heimdall/heimdall.go b/polygon/heimdall/heimdall.go new file mode 100644 index 00000000000..62ae01d60ca --- /dev/null +++ b/polygon/heimdall/heimdall.go @@ -0,0 +1,664 @@ +package heimdall + +import ( + "context" + "errors" + "sort" + "time" + + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/common" +) + +// Heimdall is a wrapper of Heimdall HTTP API +// +//go:generate mockgen -typed=true -destination=./heimdall_mock.go -package=heimdall . Heimdall +type Heimdall interface { + LastCheckpointId(ctx context.Context, store CheckpointStore) (CheckpointId, bool, error) + LastMilestoneId(ctx context.Context, store MilestoneStore) (MilestoneId, bool, error) + LastSpanId(ctx context.Context, store SpanStore) (SpanId, bool, error) + FetchLatestSpan(ctx context.Context, store SpanStore) (*Span, error) + + FetchCheckpoints(ctx context.Context, store CheckpointStore, start CheckpointId, end CheckpointId) ([]*Checkpoint, error) + FetchMilestones(ctx context.Context, store MilestoneStore, start MilestoneId, end MilestoneId) ([]*Milestone, error) + FetchSpans(ctx context.Context, store SpanStore, start SpanId, end SpanId) ([]*Span, error) + + FetchCheckpointsFromBlock(ctx context.Context, store CheckpointStore, startBlock uint64) (Waypoints, error) + FetchMilestonesFromBlock(ctx context.Context, store MilestoneStore, startBlock uint64) (Waypoints, error) + FetchSpansFromBlock(ctx context.Context, store SpanStore, startBlock uint64) ([]*Span, error) + + OnCheckpointEvent(ctx context.Context, store CheckpointStore, callback func(*Checkpoint)) error + OnMilestoneEvent(ctx context.Context, store MilestoneStore, callback func(*Milestone)) error + OnSpanEvent(ctx context.Context, store SpanStore, callback func(*Span)) error +} + +// ErrIncompleteMilestoneRange happens when FetchMilestones is called with an old start block because old milestones are evicted +var ErrIncompleteMilestoneRange = errors.New("milestone range doesn't contain the start block") +var ErrIncompleteCheckpointRange = errors.New("checkpoint range doesn't contain the start block") +var ErrIncompleteSpanRange = errors.New("span range doesn't contain the start block") + +const checkpointsBatchFetchThreshold = 100 + +type heimdall struct { + client HeimdallClient + pollDelay time.Duration + logger log.Logger +} + +func NewHeimdall(client HeimdallClient, logger log.Logger) Heimdall { + h := heimdall{ + client: client, + pollDelay: time.Second, + logger: logger, + } + return &h +} + +func (h *heimdall) LastCheckpointId(ctx context.Context, _ CheckpointStore) (CheckpointId, bool, error) { + // todo get this from store if its likely not changed (need timeout) + + count, err := h.client.FetchCheckpointCount(ctx) + + if err != nil { + return 0, false, err + } + + return CheckpointId(count), true, nil +} + +func (h *heimdall) FetchCheckpointsFromBlock(ctx context.Context, store CheckpointStore, startBlock uint64) (Waypoints, error) { + h.logger.Debug(heimdallLogPrefix("fetching checkpoints from block"), "start", startBlock) + startFetchTime := time.Now() + + lastStoredCheckpointId, _, err := store.LastCheckpointId(ctx) + if err != nil { + return nil, err + } + + count, err := h.client.FetchCheckpointCount(ctx) + if err != nil { + return nil, err + } + + latestCheckpointId := CheckpointId(count) + checkpointsToFetch := count - int64(lastStoredCheckpointId) + if checkpointsToFetch >= checkpointsBatchFetchThreshold { + checkpoints, err := h.batchFetchCheckpoints(ctx, store, lastStoredCheckpointId, latestCheckpointId) + if err != nil { + return nil, err + } + + startCheckpointIdx, found := sort.Find(len(checkpoints), func(i int) int { + return checkpoints[i].CmpRange(startBlock) + }) + if !found { + return nil, ErrIncompleteCheckpointRange + } + + checkpoints = checkpoints[startCheckpointIdx:] + waypoints := make(Waypoints, len(checkpoints)) + for i, checkpoint := range checkpoints { + waypoints[i] = checkpoint + } + + return waypoints, nil + } + + progressLogTicker := time.NewTicker(30 * time.Second) + defer progressLogTicker.Stop() + + var checkpoints []Waypoint + var endBlock uint64 + for i := latestCheckpointId; i >= 1; i-- { + select { + case <-progressLogTicker.C: + h.logger.Info( + heimdallLogPrefix("fetch checkpoints from block progress (backwards)"), + "latestCheckpointId", latestCheckpointId, + "currentCheckpointId", i, + "startBlock", startBlock, + ) + default: + // carry on + } + + c, err := h.FetchCheckpoints(ctx, store, i, i) + if err != nil { + if errors.Is(err, ErrNotInCheckpointList) { + common.SliceReverse(checkpoints) + return checkpoints, ErrIncompleteCheckpointRange + } + return nil, err + } + + cmpResult := c[0].CmpRange(startBlock) + // the start block is past the last checkpoint + if cmpResult > 0 { + return nil, nil + } + + for _, c := range c { + checkpoints = append(checkpoints, c) + endBlock = c.EndBlock().Uint64() + } + + // the checkpoint contains the start block + if cmpResult == 0 { + break + } + } + + common.SliceReverse(checkpoints) + + h.logger.Debug( + heimdallLogPrefix("finished fetching checkpoints from block"), + "count", len(checkpoints), + "start", startBlock, + "end", endBlock, + "time", time.Since(startFetchTime), + ) + + return checkpoints, nil +} + +func (h *heimdall) FetchCheckpoints(ctx context.Context, store CheckpointStore, start CheckpointId, end CheckpointId) ([]*Checkpoint, error) { + var checkpoints []*Checkpoint + + lastCheckpointId, exists, err := store.LastCheckpointId(ctx) + + if err != nil { + return nil, err + } + + if exists && start <= lastCheckpointId { + if end <= lastCheckpointId { + lastCheckpointId = end + } + + for id := start; id <= lastCheckpointId; id++ { + checkpoint, err := store.GetCheckpoint(ctx, id) + + if err != nil { + return nil, err + } + + checkpoints = append(checkpoints, checkpoint) + } + + start = lastCheckpointId + 1 + } + + for id := start; id <= end; id++ { + checkpoint, err := h.client.FetchCheckpoint(ctx, int64(id)) + + if err != nil { + return nil, err + } + + err = store.PutCheckpoint(ctx, id, checkpoint) + + if err != nil { + return nil, err + } + + checkpoints = append(checkpoints, checkpoint) + } + + return checkpoints, nil +} + +func (h *heimdall) LastMilestoneId(ctx context.Context, _ MilestoneStore) (MilestoneId, bool, error) { + // todo get this from store if its likely not changed (need timeout) + + count, err := h.client.FetchMilestoneCount(ctx) + + if err != nil { + return 0, false, err + } + + return MilestoneId(count), true, nil +} + +func (h *heimdall) FetchMilestonesFromBlock(ctx context.Context, store MilestoneStore, startBlock uint64) (Waypoints, error) { + h.logger.Debug(heimdallLogPrefix("fetching milestones from block"), "start", startBlock) + startFetchTime := time.Now() + + last, _, err := h.LastMilestoneId(ctx, store) + if err != nil { + return nil, err + } + + progressLogTicker := time.NewTicker(30 * time.Second) + defer progressLogTicker.Stop() + + var milestones Waypoints + var endBlock uint64 + for i := last; i >= 1; i-- { + select { + case <-progressLogTicker.C: + h.logger.Info( + heimdallLogPrefix("fetching milestones from block progress (backwards)"), + "milestone id", i, + "last", last, + "start", startBlock, + ) + default: + // carry on + } + + m, err := h.FetchMilestones(ctx, store, i, i) + if err != nil { + if errors.Is(err, ErrNotInMilestoneList) { + common.SliceReverse(milestones) + return milestones, ErrIncompleteMilestoneRange + } + return nil, err + } + + cmpResult := m[0].CmpRange(startBlock) + // the start block is past the last milestone + if cmpResult > 0 { + return nil, nil + } + + for _, m := range m { + milestones = append(milestones, m) + endBlock = m.EndBlock().Uint64() + } + + // the checkpoint contains the start block + if cmpResult == 0 { + break + } + } + + common.SliceReverse(milestones) + + h.logger.Debug( + heimdallLogPrefix("finished fetching milestones from block"), + "count", len(milestones), + "start", startBlock, + "end", endBlock, + "time", time.Since(startFetchTime), + ) + + return milestones, nil +} + +func (h *heimdall) FetchMilestones(ctx context.Context, store MilestoneStore, start MilestoneId, end MilestoneId) ([]*Milestone, error) { + var milestones []*Milestone + + lastMilestoneId, exists, err := store.LastMilestoneId(ctx) + + if err != nil { + return nil, err + } + + if exists && start <= lastMilestoneId { + if end <= lastMilestoneId { + lastMilestoneId = end + } + + for id := start; id <= lastMilestoneId; id++ { + milestone, err := store.GetMilestone(ctx, id) + + if err != nil { + return nil, err + } + + milestones = append(milestones, milestone) + } + + start = lastMilestoneId + 1 + } + + for id := start; id <= end; id++ { + milestone, err := h.client.FetchMilestone(ctx, int64(id)) + + if err != nil { + return nil, err + } + + err = store.PutMilestone(ctx, id, milestone) + + if err != nil { + return nil, err + } + + milestones = append(milestones, milestone) + } + + return milestones, nil +} + +func (h *heimdall) LastSpanId(ctx context.Context, store SpanStore) (SpanId, bool, error) { + span, err := h.FetchLatestSpan(ctx, store) + + if err != nil { + return 0, false, err + } + + return span.Id, true, nil +} + +func (h *heimdall) FetchLatestSpan(ctx context.Context, _ SpanStore) (*Span, error) { + return h.client.FetchLatestSpan(ctx) +} + +func (h *heimdall) FetchSpansFromBlock(ctx context.Context, store SpanStore, startBlock uint64) ([]*Span, error) { + last, _, err := h.LastSpanId(ctx, store) + + if err != nil { + return nil, err + } + + var spans []*Span + + for i := last; i >= 1; i-- { + m, err := h.FetchSpans(ctx, store, i, i) + if err != nil { + if errors.Is(err, ErrNotInSpanList) { + common.SliceReverse(spans) + return spans, ErrIncompleteSpanRange + } + return nil, err + } + + cmpResult := m[0].CmpRange(startBlock) + // the start block is past the last span + if cmpResult > 0 { + return nil, nil + } + + spans = append(spans, m...) + + // the checkpoint contains the start block + if cmpResult == 0 { + break + } + } + + common.SliceReverse(spans) + return spans, nil +} + +func (h *heimdall) FetchSpans(ctx context.Context, store SpanStore, start SpanId, end SpanId) ([]*Span, error) { + var spans []*Span + + lastSpanId, exists, err := store.LastSpanId(ctx) + + if err != nil { + return nil, err + } + + if exists && start <= lastSpanId { + if end <= lastSpanId { + lastSpanId = end + } + + for id := start; id <= lastSpanId; id++ { + span, err := store.GetSpan(ctx, id) + + if err != nil { + return nil, err + } + + spans = append(spans, span) + } + + start = lastSpanId + 1 + } + + for id := start; id <= end; id++ { + span, err := h.client.FetchSpan(ctx, uint64(id)) + + if err != nil { + return nil, err + } + + err = store.PutSpan(ctx, span) + + if err != nil { + return nil, err + } + + spans = append(spans, span) + } + + return spans, nil +} + +func (h *heimdall) OnSpanEvent(ctx context.Context, store SpanStore, cb func(*Span)) error { + tip, ok, err := store.LastSpanId(ctx) + if err != nil { + return err + } + + if !ok { + tip, _, err = h.LastSpanId(ctx, store) + if err != nil { + return err + } + } + + go h.pollSpans(ctx, store, tip, cb) + + return nil +} + +func (h *heimdall) pollSpans(ctx context.Context, store SpanStore, tip SpanId, cb func(*Span)) { + for ctx.Err() == nil { + latestSpan, err := h.client.FetchLatestSpan(ctx) + if err != nil { + h.logger.Warn( + heimdallLogPrefix("heimdall.OnSpanEvent FetchSpanCount failed"), + "err", err, + ) + + h.waitPollingDelay(ctx) + // keep background goroutine alive in case of heimdall errors + continue + } + + if latestSpan.Id <= tip { + h.waitPollingDelay(ctx) + continue + } + + m, err := h.FetchSpans(ctx, store, tip+1, latestSpan.Id) + if err != nil { + h.logger.Warn( + heimdallLogPrefix("heimdall.OnSpanEvent FetchSpan failed"), + "err", err, + ) + + h.waitPollingDelay(ctx) + // keep background goroutine alive in case of heimdall errors + continue + } + + tip = latestSpan.Id + go cb(m[len(m)-1]) + } +} + +func (h *heimdall) OnCheckpointEvent(ctx context.Context, store CheckpointStore, cb func(*Checkpoint)) error { + tip, ok, err := store.LastCheckpointId(ctx) + if err != nil { + return err + } + + if !ok { + tip, _, err = h.LastCheckpointId(ctx, store) + if err != nil { + return err + } + } + + go h.pollCheckpoints(ctx, store, tip, cb) + + return nil +} + +func (h *heimdall) pollCheckpoints(ctx context.Context, store CheckpointStore, tip CheckpointId, cb func(*Checkpoint)) { + for ctx.Err() == nil { + count, err := h.client.FetchCheckpointCount(ctx) + if err != nil { + h.logger.Warn( + heimdallLogPrefix("OnCheckpointEvent.OnCheckpointEvent FetchCheckpointCount failed"), + "err", err, + ) + + h.waitPollingDelay(ctx) + // keep background goroutine alive in case of heimdall errors + continue + } + + if count <= int64(tip) { + h.waitPollingDelay(ctx) + continue + } + + m, err := h.FetchCheckpoints(ctx, store, tip+1, CheckpointId(count)) + if err != nil { + h.logger.Warn( + heimdallLogPrefix("heimdall.OnCheckpointEvent FetchCheckpoints failed"), + "err", err, + ) + + h.waitPollingDelay(ctx) + // keep background goroutine alive in case of heimdall errors + continue + } + + tip = CheckpointId(count) + go cb(m[len(m)-1]) + } +} + +func (h *heimdall) OnMilestoneEvent(ctx context.Context, store MilestoneStore, cb func(*Milestone)) error { + tip, ok, err := store.LastMilestoneId(ctx) + if err != nil { + return err + } + + if !ok { + tip, _, err = h.LastMilestoneId(ctx, store) + if err != nil { + return err + } + } + + go h.pollMilestones(ctx, store, tip, cb) + + return nil +} + +func (h *heimdall) pollMilestones(ctx context.Context, store MilestoneStore, tip MilestoneId, cb func(*Milestone)) { + for ctx.Err() == nil { + count, err := h.client.FetchMilestoneCount(ctx) + if err != nil { + h.logger.Warn( + heimdallLogPrefix("heimdall.OnMilestoneEvent FetchMilestoneCount failed"), + "err", err, + ) + + h.waitPollingDelay(ctx) + // keep background goroutine alive in case of heimdall errors + continue + } + + if count <= int64(tip) { + h.waitPollingDelay(ctx) + continue + } + + m, err := h.FetchMilestones(ctx, store, tip+1, MilestoneId(count)) + if err != nil { + h.logger.Warn( + heimdallLogPrefix("heimdall.OnMilestoneEvent FetchMilestone failed"), + "err", err, + ) + + h.waitPollingDelay(ctx) + // keep background goroutine alive in case of heimdall errors + continue + } + + tip = MilestoneId(count) + go cb(m[len(m)-1]) + } +} + +func (h *heimdall) batchFetchCheckpoints( + ctx context.Context, + store CheckpointStore, + lastStored CheckpointId, + latest CheckpointId, +) (Checkpoints, error) { + // TODO: once heimdall API is fixed to return sorted items in pages we can only fetch + // the new pages after lastStoredCheckpointId using the checkpoints/list paging API + // (for now we have to fetch all of them) + // and also remove sorting we do after fetching + + h.logger.Debug(heimdallLogPrefix("batch fetching checkpoints")) + + fetchStartTime := time.Now() + progressLogTicker := time.NewTicker(30 * time.Second) + defer progressLogTicker.Stop() + + page := uint64(1) + count := int64(latest) + checkpoints := make(Checkpoints, 0, count) + for count > 0 { + checkpointsBatch, err := h.client.FetchCheckpoints(ctx, page, 10_000) + if err != nil { + return nil, err + } + + select { + case <-progressLogTicker.C: + h.logger.Debug( + heimdallLogPrefix("batch fetch checkpoints progress"), + "page", page, + "len", len(checkpoints), + ) + default: + // carry-on + } + + checkpoints = append(checkpoints, checkpointsBatch...) + count = count - int64(len(checkpointsBatch)) + page++ + } + + sort.Sort(checkpoints) + + for i, checkpoint := range checkpoints[lastStored:] { + err := store.PutCheckpoint(ctx, CheckpointId(i+1), checkpoint) + if err != nil { + return nil, err + } + } + + h.logger.Debug( + heimdallLogPrefix("batch fetch checkpoints done"), + "len", len(checkpoints), + "duration", time.Since(fetchStartTime), + ) + + return checkpoints, nil +} + +func (h *heimdall) waitPollingDelay(ctx context.Context) { + pollDelayTimer := time.NewTimer(h.pollDelay) + defer pollDelayTimer.Stop() + + select { + case <-ctx.Done(): + return + case <-pollDelayTimer.C: + return + } +} diff --git a/polygon/heimdall/heimdall_mock.go b/polygon/heimdall/heimdall_mock.go new file mode 100644 index 00000000000..421f5979dd5 --- /dev/null +++ b/polygon/heimdall/heimdall_mock.go @@ -0,0 +1,547 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/polygon/heimdall (interfaces: Heimdall) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./heimdall_mock.go -package=heimdall . Heimdall +// + +// Package heimdall is a generated GoMock package. +package heimdall + +import ( + context "context" + reflect "reflect" + + gomock "go.uber.org/mock/gomock" +) + +// MockHeimdall is a mock of Heimdall interface. +type MockHeimdall struct { + ctrl *gomock.Controller + recorder *MockHeimdallMockRecorder +} + +// MockHeimdallMockRecorder is the mock recorder for MockHeimdall. +type MockHeimdallMockRecorder struct { + mock *MockHeimdall +} + +// NewMockHeimdall creates a new mock instance. +func NewMockHeimdall(ctrl *gomock.Controller) *MockHeimdall { + mock := &MockHeimdall{ctrl: ctrl} + mock.recorder = &MockHeimdallMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockHeimdall) EXPECT() *MockHeimdallMockRecorder { + return m.recorder +} + +// FetchCheckpoints mocks base method. +func (m *MockHeimdall) FetchCheckpoints(arg0 context.Context, arg1 CheckpointStore, arg2, arg3 CheckpointId) ([]*Checkpoint, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchCheckpoints", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]*Checkpoint) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchCheckpoints indicates an expected call of FetchCheckpoints. +func (mr *MockHeimdallMockRecorder) FetchCheckpoints(arg0, arg1, arg2, arg3 any) *MockHeimdallFetchCheckpointsCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpoints", reflect.TypeOf((*MockHeimdall)(nil).FetchCheckpoints), arg0, arg1, arg2, arg3) + return &MockHeimdallFetchCheckpointsCall{Call: call} +} + +// MockHeimdallFetchCheckpointsCall wrap *gomock.Call +type MockHeimdallFetchCheckpointsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallFetchCheckpointsCall) Return(arg0 []*Checkpoint, arg1 error) *MockHeimdallFetchCheckpointsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallFetchCheckpointsCall) Do(f func(context.Context, CheckpointStore, CheckpointId, CheckpointId) ([]*Checkpoint, error)) *MockHeimdallFetchCheckpointsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallFetchCheckpointsCall) DoAndReturn(f func(context.Context, CheckpointStore, CheckpointId, CheckpointId) ([]*Checkpoint, error)) *MockHeimdallFetchCheckpointsCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchCheckpointsFromBlock mocks base method. +func (m *MockHeimdall) FetchCheckpointsFromBlock(arg0 context.Context, arg1 CheckpointStore, arg2 uint64) (Waypoints, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchCheckpointsFromBlock", arg0, arg1, arg2) + ret0, _ := ret[0].(Waypoints) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchCheckpointsFromBlock indicates an expected call of FetchCheckpointsFromBlock. +func (mr *MockHeimdallMockRecorder) FetchCheckpointsFromBlock(arg0, arg1, arg2 any) *MockHeimdallFetchCheckpointsFromBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpointsFromBlock", reflect.TypeOf((*MockHeimdall)(nil).FetchCheckpointsFromBlock), arg0, arg1, arg2) + return &MockHeimdallFetchCheckpointsFromBlockCall{Call: call} +} + +// MockHeimdallFetchCheckpointsFromBlockCall wrap *gomock.Call +type MockHeimdallFetchCheckpointsFromBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallFetchCheckpointsFromBlockCall) Return(arg0 Waypoints, arg1 error) *MockHeimdallFetchCheckpointsFromBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallFetchCheckpointsFromBlockCall) Do(f func(context.Context, CheckpointStore, uint64) (Waypoints, error)) *MockHeimdallFetchCheckpointsFromBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallFetchCheckpointsFromBlockCall) DoAndReturn(f func(context.Context, CheckpointStore, uint64) (Waypoints, error)) *MockHeimdallFetchCheckpointsFromBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchLatestSpan mocks base method. +func (m *MockHeimdall) FetchLatestSpan(arg0 context.Context, arg1 SpanStore) (*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchLatestSpan", arg0, arg1) + ret0, _ := ret[0].(*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchLatestSpan indicates an expected call of FetchLatestSpan. +func (mr *MockHeimdallMockRecorder) FetchLatestSpan(arg0, arg1 any) *MockHeimdallFetchLatestSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchLatestSpan", reflect.TypeOf((*MockHeimdall)(nil).FetchLatestSpan), arg0, arg1) + return &MockHeimdallFetchLatestSpanCall{Call: call} +} + +// MockHeimdallFetchLatestSpanCall wrap *gomock.Call +type MockHeimdallFetchLatestSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallFetchLatestSpanCall) Return(arg0 *Span, arg1 error) *MockHeimdallFetchLatestSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallFetchLatestSpanCall) Do(f func(context.Context, SpanStore) (*Span, error)) *MockHeimdallFetchLatestSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallFetchLatestSpanCall) DoAndReturn(f func(context.Context, SpanStore) (*Span, error)) *MockHeimdallFetchLatestSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchMilestones mocks base method. +func (m *MockHeimdall) FetchMilestones(arg0 context.Context, arg1 MilestoneStore, arg2, arg3 MilestoneId) ([]*Milestone, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchMilestones", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]*Milestone) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchMilestones indicates an expected call of FetchMilestones. +func (mr *MockHeimdallMockRecorder) FetchMilestones(arg0, arg1, arg2, arg3 any) *MockHeimdallFetchMilestonesCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestones", reflect.TypeOf((*MockHeimdall)(nil).FetchMilestones), arg0, arg1, arg2, arg3) + return &MockHeimdallFetchMilestonesCall{Call: call} +} + +// MockHeimdallFetchMilestonesCall wrap *gomock.Call +type MockHeimdallFetchMilestonesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallFetchMilestonesCall) Return(arg0 []*Milestone, arg1 error) *MockHeimdallFetchMilestonesCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallFetchMilestonesCall) Do(f func(context.Context, MilestoneStore, MilestoneId, MilestoneId) ([]*Milestone, error)) *MockHeimdallFetchMilestonesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallFetchMilestonesCall) DoAndReturn(f func(context.Context, MilestoneStore, MilestoneId, MilestoneId) ([]*Milestone, error)) *MockHeimdallFetchMilestonesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchMilestonesFromBlock mocks base method. +func (m *MockHeimdall) FetchMilestonesFromBlock(arg0 context.Context, arg1 MilestoneStore, arg2 uint64) (Waypoints, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchMilestonesFromBlock", arg0, arg1, arg2) + ret0, _ := ret[0].(Waypoints) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchMilestonesFromBlock indicates an expected call of FetchMilestonesFromBlock. +func (mr *MockHeimdallMockRecorder) FetchMilestonesFromBlock(arg0, arg1, arg2 any) *MockHeimdallFetchMilestonesFromBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestonesFromBlock", reflect.TypeOf((*MockHeimdall)(nil).FetchMilestonesFromBlock), arg0, arg1, arg2) + return &MockHeimdallFetchMilestonesFromBlockCall{Call: call} +} + +// MockHeimdallFetchMilestonesFromBlockCall wrap *gomock.Call +type MockHeimdallFetchMilestonesFromBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallFetchMilestonesFromBlockCall) Return(arg0 Waypoints, arg1 error) *MockHeimdallFetchMilestonesFromBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallFetchMilestonesFromBlockCall) Do(f func(context.Context, MilestoneStore, uint64) (Waypoints, error)) *MockHeimdallFetchMilestonesFromBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallFetchMilestonesFromBlockCall) DoAndReturn(f func(context.Context, MilestoneStore, uint64) (Waypoints, error)) *MockHeimdallFetchMilestonesFromBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchSpans mocks base method. +func (m *MockHeimdall) FetchSpans(arg0 context.Context, arg1 SpanStore, arg2, arg3 SpanId) ([]*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchSpans", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchSpans indicates an expected call of FetchSpans. +func (mr *MockHeimdallMockRecorder) FetchSpans(arg0, arg1, arg2, arg3 any) *MockHeimdallFetchSpansCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchSpans", reflect.TypeOf((*MockHeimdall)(nil).FetchSpans), arg0, arg1, arg2, arg3) + return &MockHeimdallFetchSpansCall{Call: call} +} + +// MockHeimdallFetchSpansCall wrap *gomock.Call +type MockHeimdallFetchSpansCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallFetchSpansCall) Return(arg0 []*Span, arg1 error) *MockHeimdallFetchSpansCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallFetchSpansCall) Do(f func(context.Context, SpanStore, SpanId, SpanId) ([]*Span, error)) *MockHeimdallFetchSpansCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallFetchSpansCall) DoAndReturn(f func(context.Context, SpanStore, SpanId, SpanId) ([]*Span, error)) *MockHeimdallFetchSpansCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchSpansFromBlock mocks base method. +func (m *MockHeimdall) FetchSpansFromBlock(arg0 context.Context, arg1 SpanStore, arg2 uint64) ([]*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchSpansFromBlock", arg0, arg1, arg2) + ret0, _ := ret[0].([]*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchSpansFromBlock indicates an expected call of FetchSpansFromBlock. +func (mr *MockHeimdallMockRecorder) FetchSpansFromBlock(arg0, arg1, arg2 any) *MockHeimdallFetchSpansFromBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchSpansFromBlock", reflect.TypeOf((*MockHeimdall)(nil).FetchSpansFromBlock), arg0, arg1, arg2) + return &MockHeimdallFetchSpansFromBlockCall{Call: call} +} + +// MockHeimdallFetchSpansFromBlockCall wrap *gomock.Call +type MockHeimdallFetchSpansFromBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallFetchSpansFromBlockCall) Return(arg0 []*Span, arg1 error) *MockHeimdallFetchSpansFromBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallFetchSpansFromBlockCall) Do(f func(context.Context, SpanStore, uint64) ([]*Span, error)) *MockHeimdallFetchSpansFromBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallFetchSpansFromBlockCall) DoAndReturn(f func(context.Context, SpanStore, uint64) ([]*Span, error)) *MockHeimdallFetchSpansFromBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastCheckpointId mocks base method. +func (m *MockHeimdall) LastCheckpointId(arg0 context.Context, arg1 CheckpointStore) (CheckpointId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastCheckpointId", arg0, arg1) + ret0, _ := ret[0].(CheckpointId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastCheckpointId indicates an expected call of LastCheckpointId. +func (mr *MockHeimdallMockRecorder) LastCheckpointId(arg0, arg1 any) *MockHeimdallLastCheckpointIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastCheckpointId", reflect.TypeOf((*MockHeimdall)(nil).LastCheckpointId), arg0, arg1) + return &MockHeimdallLastCheckpointIdCall{Call: call} +} + +// MockHeimdallLastCheckpointIdCall wrap *gomock.Call +type MockHeimdallLastCheckpointIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallLastCheckpointIdCall) Return(arg0 CheckpointId, arg1 bool, arg2 error) *MockHeimdallLastCheckpointIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallLastCheckpointIdCall) Do(f func(context.Context, CheckpointStore) (CheckpointId, bool, error)) *MockHeimdallLastCheckpointIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallLastCheckpointIdCall) DoAndReturn(f func(context.Context, CheckpointStore) (CheckpointId, bool, error)) *MockHeimdallLastCheckpointIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastMilestoneId mocks base method. +func (m *MockHeimdall) LastMilestoneId(arg0 context.Context, arg1 MilestoneStore) (MilestoneId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastMilestoneId", arg0, arg1) + ret0, _ := ret[0].(MilestoneId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastMilestoneId indicates an expected call of LastMilestoneId. +func (mr *MockHeimdallMockRecorder) LastMilestoneId(arg0, arg1 any) *MockHeimdallLastMilestoneIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastMilestoneId", reflect.TypeOf((*MockHeimdall)(nil).LastMilestoneId), arg0, arg1) + return &MockHeimdallLastMilestoneIdCall{Call: call} +} + +// MockHeimdallLastMilestoneIdCall wrap *gomock.Call +type MockHeimdallLastMilestoneIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallLastMilestoneIdCall) Return(arg0 MilestoneId, arg1 bool, arg2 error) *MockHeimdallLastMilestoneIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallLastMilestoneIdCall) Do(f func(context.Context, MilestoneStore) (MilestoneId, bool, error)) *MockHeimdallLastMilestoneIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallLastMilestoneIdCall) DoAndReturn(f func(context.Context, MilestoneStore) (MilestoneId, bool, error)) *MockHeimdallLastMilestoneIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastSpanId mocks base method. +func (m *MockHeimdall) LastSpanId(arg0 context.Context, arg1 SpanStore) (SpanId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastSpanId", arg0, arg1) + ret0, _ := ret[0].(SpanId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastSpanId indicates an expected call of LastSpanId. +func (mr *MockHeimdallMockRecorder) LastSpanId(arg0, arg1 any) *MockHeimdallLastSpanIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastSpanId", reflect.TypeOf((*MockHeimdall)(nil).LastSpanId), arg0, arg1) + return &MockHeimdallLastSpanIdCall{Call: call} +} + +// MockHeimdallLastSpanIdCall wrap *gomock.Call +type MockHeimdallLastSpanIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallLastSpanIdCall) Return(arg0 SpanId, arg1 bool, arg2 error) *MockHeimdallLastSpanIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallLastSpanIdCall) Do(f func(context.Context, SpanStore) (SpanId, bool, error)) *MockHeimdallLastSpanIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallLastSpanIdCall) DoAndReturn(f func(context.Context, SpanStore) (SpanId, bool, error)) *MockHeimdallLastSpanIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// OnCheckpointEvent mocks base method. +func (m *MockHeimdall) OnCheckpointEvent(arg0 context.Context, arg1 CheckpointStore, arg2 func(*Checkpoint)) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnCheckpointEvent", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnCheckpointEvent indicates an expected call of OnCheckpointEvent. +func (mr *MockHeimdallMockRecorder) OnCheckpointEvent(arg0, arg1, arg2 any) *MockHeimdallOnCheckpointEventCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnCheckpointEvent", reflect.TypeOf((*MockHeimdall)(nil).OnCheckpointEvent), arg0, arg1, arg2) + return &MockHeimdallOnCheckpointEventCall{Call: call} +} + +// MockHeimdallOnCheckpointEventCall wrap *gomock.Call +type MockHeimdallOnCheckpointEventCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallOnCheckpointEventCall) Return(arg0 error) *MockHeimdallOnCheckpointEventCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallOnCheckpointEventCall) Do(f func(context.Context, CheckpointStore, func(*Checkpoint)) error) *MockHeimdallOnCheckpointEventCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallOnCheckpointEventCall) DoAndReturn(f func(context.Context, CheckpointStore, func(*Checkpoint)) error) *MockHeimdallOnCheckpointEventCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// OnMilestoneEvent mocks base method. +func (m *MockHeimdall) OnMilestoneEvent(arg0 context.Context, arg1 MilestoneStore, arg2 func(*Milestone)) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnMilestoneEvent", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnMilestoneEvent indicates an expected call of OnMilestoneEvent. +func (mr *MockHeimdallMockRecorder) OnMilestoneEvent(arg0, arg1, arg2 any) *MockHeimdallOnMilestoneEventCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnMilestoneEvent", reflect.TypeOf((*MockHeimdall)(nil).OnMilestoneEvent), arg0, arg1, arg2) + return &MockHeimdallOnMilestoneEventCall{Call: call} +} + +// MockHeimdallOnMilestoneEventCall wrap *gomock.Call +type MockHeimdallOnMilestoneEventCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallOnMilestoneEventCall) Return(arg0 error) *MockHeimdallOnMilestoneEventCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallOnMilestoneEventCall) Do(f func(context.Context, MilestoneStore, func(*Milestone)) error) *MockHeimdallOnMilestoneEventCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallOnMilestoneEventCall) DoAndReturn(f func(context.Context, MilestoneStore, func(*Milestone)) error) *MockHeimdallOnMilestoneEventCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// OnSpanEvent mocks base method. +func (m *MockHeimdall) OnSpanEvent(arg0 context.Context, arg1 SpanStore, arg2 func(*Span)) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnSpanEvent", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnSpanEvent indicates an expected call of OnSpanEvent. +func (mr *MockHeimdallMockRecorder) OnSpanEvent(arg0, arg1, arg2 any) *MockHeimdallOnSpanEventCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnSpanEvent", reflect.TypeOf((*MockHeimdall)(nil).OnSpanEvent), arg0, arg1, arg2) + return &MockHeimdallOnSpanEventCall{Call: call} +} + +// MockHeimdallOnSpanEventCall wrap *gomock.Call +type MockHeimdallOnSpanEventCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallOnSpanEventCall) Return(arg0 error) *MockHeimdallOnSpanEventCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallOnSpanEventCall) Do(f func(context.Context, SpanStore, func(*Span)) error) *MockHeimdallOnSpanEventCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallOnSpanEventCall) DoAndReturn(f func(context.Context, SpanStore, func(*Span)) error) *MockHeimdallOnSpanEventCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/polygon/heimdall/heimdall_no_store.go b/polygon/heimdall/heimdall_no_store.go new file mode 100644 index 00000000000..a795952de18 --- /dev/null +++ b/polygon/heimdall/heimdall_no_store.go @@ -0,0 +1,121 @@ +package heimdall + +import ( + "context" + + "github.com/ledgerwatch/log/v3" +) + +//go:generate mockgen -typed=true -destination=./heimdall_no_store_mock.go -package=heimdall . HeimdallNoStore +type HeimdallNoStore interface { + LastCheckpointId(ctx context.Context) (CheckpointId, bool, error) + LastMilestoneId(ctx context.Context) (MilestoneId, bool, error) + LastSpanId(ctx context.Context) (SpanId, bool, error) + FetchLatestSpan(ctx context.Context) (*Span, error) + + FetchCheckpoints(ctx context.Context, start CheckpointId, end CheckpointId) ([]*Checkpoint, error) + FetchMilestones(ctx context.Context, start MilestoneId, end MilestoneId) ([]*Milestone, error) + FetchSpans(ctx context.Context, start SpanId, end SpanId) ([]*Span, error) + + FetchCheckpointsFromBlock(ctx context.Context, startBlock uint64) (Waypoints, error) + FetchMilestonesFromBlock(ctx context.Context, startBlock uint64) (Waypoints, error) + FetchSpansFromBlock(ctx context.Context, startBlock uint64) ([]*Span, error) + + OnCheckpointEvent(ctx context.Context, callback func(*Checkpoint)) error + OnMilestoneEvent(ctx context.Context, callback func(*Milestone)) error + OnSpanEvent(ctx context.Context, callback func(*Span)) error +} + +type heimdallNoStore struct { + Heimdall +} + +type noopStore struct { +} + +func (s noopStore) LastCheckpointId(ctx context.Context) (CheckpointId, bool, error) { + return 0, false, nil +} +func (s noopStore) GetCheckpoint(ctx context.Context, checkpointId CheckpointId) (*Checkpoint, error) { + return nil, nil +} +func (s noopStore) PutCheckpoint(ctx context.Context, checkpointId CheckpointId, checkpoint *Checkpoint) error { + return nil +} +func (s noopStore) LastMilestoneId(ctx context.Context) (MilestoneId, bool, error) { + return 0, false, nil +} +func (s noopStore) GetMilestone(ctx context.Context, milestoneId MilestoneId) (*Milestone, error) { + return nil, nil +} +func (s noopStore) PutMilestone(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error { + return nil +} +func (s noopStore) LastSpanId(ctx context.Context) (SpanId, bool, error) { + return 0, false, nil +} +func (s noopStore) GetSpan(ctx context.Context, spanId SpanId) (*Span, error) { + return nil, nil +} +func (s noopStore) PutSpan(ctx context.Context, span *Span) error { + return nil +} + +func NewHeimdallNoStore(client HeimdallClient, logger log.Logger) HeimdallNoStore { + h := heimdallNoStore{ + NewHeimdall(client, logger), + } + return &h +} + +func (h *heimdallNoStore) LastCheckpointId(ctx context.Context) (CheckpointId, bool, error) { + return h.Heimdall.LastCheckpointId(ctx, noopStore{}) +} + +func (h *heimdallNoStore) LastMilestoneId(ctx context.Context) (MilestoneId, bool, error) { + return h.Heimdall.LastMilestoneId(ctx, noopStore{}) +} + +func (h *heimdallNoStore) LastSpanId(ctx context.Context) (SpanId, bool, error) { + return h.Heimdall.LastSpanId(ctx, noopStore{}) +} + +func (h *heimdallNoStore) FetchLatestSpan(ctx context.Context) (*Span, error) { + return h.Heimdall.FetchLatestSpan(ctx, noopStore{}) +} + +func (h *heimdallNoStore) FetchCheckpoints(ctx context.Context, start CheckpointId, end CheckpointId) ([]*Checkpoint, error) { + return h.Heimdall.FetchCheckpoints(ctx, noopStore{}, start, end) +} + +func (h *heimdallNoStore) FetchMilestones(ctx context.Context, start MilestoneId, end MilestoneId) ([]*Milestone, error) { + return h.Heimdall.FetchMilestones(ctx, noopStore{}, start, end) +} + +func (h *heimdallNoStore) FetchSpans(ctx context.Context, start SpanId, end SpanId) ([]*Span, error) { + return h.Heimdall.FetchSpans(ctx, noopStore{}, start, end) +} + +func (h *heimdallNoStore) FetchCheckpointsFromBlock(ctx context.Context, startBlock uint64) (Waypoints, error) { + return h.Heimdall.FetchCheckpointsFromBlock(ctx, noopStore{}, startBlock) +} + +func (h *heimdallNoStore) FetchMilestonesFromBlock(ctx context.Context, startBlock uint64) (Waypoints, error) { + return h.Heimdall.FetchMilestonesFromBlock(ctx, noopStore{}, startBlock) +} + +func (h *heimdallNoStore) FetchSpansFromBlock(ctx context.Context, startBlock uint64) ([]*Span, error) { + return h.Heimdall.FetchSpansFromBlock(ctx, noopStore{}, startBlock) +} + +func (h *heimdallNoStore) OnCheckpointEvent(ctx context.Context, callback func(*Checkpoint)) error { + return h.Heimdall.OnCheckpointEvent(ctx, noopStore{}, callback) +} + +func (h *heimdallNoStore) OnMilestoneEvent(ctx context.Context, callback func(*Milestone)) error { + return h.Heimdall.OnMilestoneEvent(ctx, noopStore{}, callback) +} + +func (h *heimdallNoStore) OnSpanEvent(ctx context.Context, callback func(*Span)) error { + return h.Heimdall.OnSpanEvent(ctx, noopStore{}, callback) +} diff --git a/polygon/heimdall/heimdall_no_store_mock.go b/polygon/heimdall/heimdall_no_store_mock.go new file mode 100644 index 00000000000..9cc8a9a4293 --- /dev/null +++ b/polygon/heimdall/heimdall_no_store_mock.go @@ -0,0 +1,547 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/polygon/heimdall (interfaces: HeimdallNoStore) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./heimdall_no_store_mock.go -package=heimdall . HeimdallNoStore +// + +// Package heimdall is a generated GoMock package. +package heimdall + +import ( + context "context" + reflect "reflect" + + gomock "go.uber.org/mock/gomock" +) + +// MockHeimdallNoStore is a mock of HeimdallNoStore interface. +type MockHeimdallNoStore struct { + ctrl *gomock.Controller + recorder *MockHeimdallNoStoreMockRecorder +} + +// MockHeimdallNoStoreMockRecorder is the mock recorder for MockHeimdallNoStore. +type MockHeimdallNoStoreMockRecorder struct { + mock *MockHeimdallNoStore +} + +// NewMockHeimdallNoStore creates a new mock instance. +func NewMockHeimdallNoStore(ctrl *gomock.Controller) *MockHeimdallNoStore { + mock := &MockHeimdallNoStore{ctrl: ctrl} + mock.recorder = &MockHeimdallNoStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockHeimdallNoStore) EXPECT() *MockHeimdallNoStoreMockRecorder { + return m.recorder +} + +// FetchCheckpoints mocks base method. +func (m *MockHeimdallNoStore) FetchCheckpoints(arg0 context.Context, arg1, arg2 CheckpointId) ([]*Checkpoint, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchCheckpoints", arg0, arg1, arg2) + ret0, _ := ret[0].([]*Checkpoint) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchCheckpoints indicates an expected call of FetchCheckpoints. +func (mr *MockHeimdallNoStoreMockRecorder) FetchCheckpoints(arg0, arg1, arg2 any) *MockHeimdallNoStoreFetchCheckpointsCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpoints", reflect.TypeOf((*MockHeimdallNoStore)(nil).FetchCheckpoints), arg0, arg1, arg2) + return &MockHeimdallNoStoreFetchCheckpointsCall{Call: call} +} + +// MockHeimdallNoStoreFetchCheckpointsCall wrap *gomock.Call +type MockHeimdallNoStoreFetchCheckpointsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreFetchCheckpointsCall) Return(arg0 []*Checkpoint, arg1 error) *MockHeimdallNoStoreFetchCheckpointsCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreFetchCheckpointsCall) Do(f func(context.Context, CheckpointId, CheckpointId) ([]*Checkpoint, error)) *MockHeimdallNoStoreFetchCheckpointsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreFetchCheckpointsCall) DoAndReturn(f func(context.Context, CheckpointId, CheckpointId) ([]*Checkpoint, error)) *MockHeimdallNoStoreFetchCheckpointsCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchCheckpointsFromBlock mocks base method. +func (m *MockHeimdallNoStore) FetchCheckpointsFromBlock(arg0 context.Context, arg1 uint64) (Waypoints, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchCheckpointsFromBlock", arg0, arg1) + ret0, _ := ret[0].(Waypoints) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchCheckpointsFromBlock indicates an expected call of FetchCheckpointsFromBlock. +func (mr *MockHeimdallNoStoreMockRecorder) FetchCheckpointsFromBlock(arg0, arg1 any) *MockHeimdallNoStoreFetchCheckpointsFromBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpointsFromBlock", reflect.TypeOf((*MockHeimdallNoStore)(nil).FetchCheckpointsFromBlock), arg0, arg1) + return &MockHeimdallNoStoreFetchCheckpointsFromBlockCall{Call: call} +} + +// MockHeimdallNoStoreFetchCheckpointsFromBlockCall wrap *gomock.Call +type MockHeimdallNoStoreFetchCheckpointsFromBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreFetchCheckpointsFromBlockCall) Return(arg0 Waypoints, arg1 error) *MockHeimdallNoStoreFetchCheckpointsFromBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreFetchCheckpointsFromBlockCall) Do(f func(context.Context, uint64) (Waypoints, error)) *MockHeimdallNoStoreFetchCheckpointsFromBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreFetchCheckpointsFromBlockCall) DoAndReturn(f func(context.Context, uint64) (Waypoints, error)) *MockHeimdallNoStoreFetchCheckpointsFromBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchLatestSpan mocks base method. +func (m *MockHeimdallNoStore) FetchLatestSpan(arg0 context.Context) (*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchLatestSpan", arg0) + ret0, _ := ret[0].(*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchLatestSpan indicates an expected call of FetchLatestSpan. +func (mr *MockHeimdallNoStoreMockRecorder) FetchLatestSpan(arg0 any) *MockHeimdallNoStoreFetchLatestSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchLatestSpan", reflect.TypeOf((*MockHeimdallNoStore)(nil).FetchLatestSpan), arg0) + return &MockHeimdallNoStoreFetchLatestSpanCall{Call: call} +} + +// MockHeimdallNoStoreFetchLatestSpanCall wrap *gomock.Call +type MockHeimdallNoStoreFetchLatestSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreFetchLatestSpanCall) Return(arg0 *Span, arg1 error) *MockHeimdallNoStoreFetchLatestSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreFetchLatestSpanCall) Do(f func(context.Context) (*Span, error)) *MockHeimdallNoStoreFetchLatestSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreFetchLatestSpanCall) DoAndReturn(f func(context.Context) (*Span, error)) *MockHeimdallNoStoreFetchLatestSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchMilestones mocks base method. +func (m *MockHeimdallNoStore) FetchMilestones(arg0 context.Context, arg1, arg2 MilestoneId) ([]*Milestone, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchMilestones", arg0, arg1, arg2) + ret0, _ := ret[0].([]*Milestone) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchMilestones indicates an expected call of FetchMilestones. +func (mr *MockHeimdallNoStoreMockRecorder) FetchMilestones(arg0, arg1, arg2 any) *MockHeimdallNoStoreFetchMilestonesCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestones", reflect.TypeOf((*MockHeimdallNoStore)(nil).FetchMilestones), arg0, arg1, arg2) + return &MockHeimdallNoStoreFetchMilestonesCall{Call: call} +} + +// MockHeimdallNoStoreFetchMilestonesCall wrap *gomock.Call +type MockHeimdallNoStoreFetchMilestonesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreFetchMilestonesCall) Return(arg0 []*Milestone, arg1 error) *MockHeimdallNoStoreFetchMilestonesCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreFetchMilestonesCall) Do(f func(context.Context, MilestoneId, MilestoneId) ([]*Milestone, error)) *MockHeimdallNoStoreFetchMilestonesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreFetchMilestonesCall) DoAndReturn(f func(context.Context, MilestoneId, MilestoneId) ([]*Milestone, error)) *MockHeimdallNoStoreFetchMilestonesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchMilestonesFromBlock mocks base method. +func (m *MockHeimdallNoStore) FetchMilestonesFromBlock(arg0 context.Context, arg1 uint64) (Waypoints, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchMilestonesFromBlock", arg0, arg1) + ret0, _ := ret[0].(Waypoints) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchMilestonesFromBlock indicates an expected call of FetchMilestonesFromBlock. +func (mr *MockHeimdallNoStoreMockRecorder) FetchMilestonesFromBlock(arg0, arg1 any) *MockHeimdallNoStoreFetchMilestonesFromBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestonesFromBlock", reflect.TypeOf((*MockHeimdallNoStore)(nil).FetchMilestonesFromBlock), arg0, arg1) + return &MockHeimdallNoStoreFetchMilestonesFromBlockCall{Call: call} +} + +// MockHeimdallNoStoreFetchMilestonesFromBlockCall wrap *gomock.Call +type MockHeimdallNoStoreFetchMilestonesFromBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreFetchMilestonesFromBlockCall) Return(arg0 Waypoints, arg1 error) *MockHeimdallNoStoreFetchMilestonesFromBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreFetchMilestonesFromBlockCall) Do(f func(context.Context, uint64) (Waypoints, error)) *MockHeimdallNoStoreFetchMilestonesFromBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreFetchMilestonesFromBlockCall) DoAndReturn(f func(context.Context, uint64) (Waypoints, error)) *MockHeimdallNoStoreFetchMilestonesFromBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchSpans mocks base method. +func (m *MockHeimdallNoStore) FetchSpans(arg0 context.Context, arg1, arg2 SpanId) ([]*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchSpans", arg0, arg1, arg2) + ret0, _ := ret[0].([]*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchSpans indicates an expected call of FetchSpans. +func (mr *MockHeimdallNoStoreMockRecorder) FetchSpans(arg0, arg1, arg2 any) *MockHeimdallNoStoreFetchSpansCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchSpans", reflect.TypeOf((*MockHeimdallNoStore)(nil).FetchSpans), arg0, arg1, arg2) + return &MockHeimdallNoStoreFetchSpansCall{Call: call} +} + +// MockHeimdallNoStoreFetchSpansCall wrap *gomock.Call +type MockHeimdallNoStoreFetchSpansCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreFetchSpansCall) Return(arg0 []*Span, arg1 error) *MockHeimdallNoStoreFetchSpansCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreFetchSpansCall) Do(f func(context.Context, SpanId, SpanId) ([]*Span, error)) *MockHeimdallNoStoreFetchSpansCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreFetchSpansCall) DoAndReturn(f func(context.Context, SpanId, SpanId) ([]*Span, error)) *MockHeimdallNoStoreFetchSpansCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchSpansFromBlock mocks base method. +func (m *MockHeimdallNoStore) FetchSpansFromBlock(arg0 context.Context, arg1 uint64) ([]*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchSpansFromBlock", arg0, arg1) + ret0, _ := ret[0].([]*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchSpansFromBlock indicates an expected call of FetchSpansFromBlock. +func (mr *MockHeimdallNoStoreMockRecorder) FetchSpansFromBlock(arg0, arg1 any) *MockHeimdallNoStoreFetchSpansFromBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchSpansFromBlock", reflect.TypeOf((*MockHeimdallNoStore)(nil).FetchSpansFromBlock), arg0, arg1) + return &MockHeimdallNoStoreFetchSpansFromBlockCall{Call: call} +} + +// MockHeimdallNoStoreFetchSpansFromBlockCall wrap *gomock.Call +type MockHeimdallNoStoreFetchSpansFromBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreFetchSpansFromBlockCall) Return(arg0 []*Span, arg1 error) *MockHeimdallNoStoreFetchSpansFromBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreFetchSpansFromBlockCall) Do(f func(context.Context, uint64) ([]*Span, error)) *MockHeimdallNoStoreFetchSpansFromBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreFetchSpansFromBlockCall) DoAndReturn(f func(context.Context, uint64) ([]*Span, error)) *MockHeimdallNoStoreFetchSpansFromBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastCheckpointId mocks base method. +func (m *MockHeimdallNoStore) LastCheckpointId(arg0 context.Context) (CheckpointId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastCheckpointId", arg0) + ret0, _ := ret[0].(CheckpointId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastCheckpointId indicates an expected call of LastCheckpointId. +func (mr *MockHeimdallNoStoreMockRecorder) LastCheckpointId(arg0 any) *MockHeimdallNoStoreLastCheckpointIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastCheckpointId", reflect.TypeOf((*MockHeimdallNoStore)(nil).LastCheckpointId), arg0) + return &MockHeimdallNoStoreLastCheckpointIdCall{Call: call} +} + +// MockHeimdallNoStoreLastCheckpointIdCall wrap *gomock.Call +type MockHeimdallNoStoreLastCheckpointIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreLastCheckpointIdCall) Return(arg0 CheckpointId, arg1 bool, arg2 error) *MockHeimdallNoStoreLastCheckpointIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreLastCheckpointIdCall) Do(f func(context.Context) (CheckpointId, bool, error)) *MockHeimdallNoStoreLastCheckpointIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreLastCheckpointIdCall) DoAndReturn(f func(context.Context) (CheckpointId, bool, error)) *MockHeimdallNoStoreLastCheckpointIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastMilestoneId mocks base method. +func (m *MockHeimdallNoStore) LastMilestoneId(arg0 context.Context) (MilestoneId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastMilestoneId", arg0) + ret0, _ := ret[0].(MilestoneId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastMilestoneId indicates an expected call of LastMilestoneId. +func (mr *MockHeimdallNoStoreMockRecorder) LastMilestoneId(arg0 any) *MockHeimdallNoStoreLastMilestoneIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastMilestoneId", reflect.TypeOf((*MockHeimdallNoStore)(nil).LastMilestoneId), arg0) + return &MockHeimdallNoStoreLastMilestoneIdCall{Call: call} +} + +// MockHeimdallNoStoreLastMilestoneIdCall wrap *gomock.Call +type MockHeimdallNoStoreLastMilestoneIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreLastMilestoneIdCall) Return(arg0 MilestoneId, arg1 bool, arg2 error) *MockHeimdallNoStoreLastMilestoneIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreLastMilestoneIdCall) Do(f func(context.Context) (MilestoneId, bool, error)) *MockHeimdallNoStoreLastMilestoneIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreLastMilestoneIdCall) DoAndReturn(f func(context.Context) (MilestoneId, bool, error)) *MockHeimdallNoStoreLastMilestoneIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastSpanId mocks base method. +func (m *MockHeimdallNoStore) LastSpanId(arg0 context.Context) (SpanId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastSpanId", arg0) + ret0, _ := ret[0].(SpanId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastSpanId indicates an expected call of LastSpanId. +func (mr *MockHeimdallNoStoreMockRecorder) LastSpanId(arg0 any) *MockHeimdallNoStoreLastSpanIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastSpanId", reflect.TypeOf((*MockHeimdallNoStore)(nil).LastSpanId), arg0) + return &MockHeimdallNoStoreLastSpanIdCall{Call: call} +} + +// MockHeimdallNoStoreLastSpanIdCall wrap *gomock.Call +type MockHeimdallNoStoreLastSpanIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreLastSpanIdCall) Return(arg0 SpanId, arg1 bool, arg2 error) *MockHeimdallNoStoreLastSpanIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreLastSpanIdCall) Do(f func(context.Context) (SpanId, bool, error)) *MockHeimdallNoStoreLastSpanIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreLastSpanIdCall) DoAndReturn(f func(context.Context) (SpanId, bool, error)) *MockHeimdallNoStoreLastSpanIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// OnCheckpointEvent mocks base method. +func (m *MockHeimdallNoStore) OnCheckpointEvent(arg0 context.Context, arg1 func(*Checkpoint)) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnCheckpointEvent", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnCheckpointEvent indicates an expected call of OnCheckpointEvent. +func (mr *MockHeimdallNoStoreMockRecorder) OnCheckpointEvent(arg0, arg1 any) *MockHeimdallNoStoreOnCheckpointEventCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnCheckpointEvent", reflect.TypeOf((*MockHeimdallNoStore)(nil).OnCheckpointEvent), arg0, arg1) + return &MockHeimdallNoStoreOnCheckpointEventCall{Call: call} +} + +// MockHeimdallNoStoreOnCheckpointEventCall wrap *gomock.Call +type MockHeimdallNoStoreOnCheckpointEventCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreOnCheckpointEventCall) Return(arg0 error) *MockHeimdallNoStoreOnCheckpointEventCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreOnCheckpointEventCall) Do(f func(context.Context, func(*Checkpoint)) error) *MockHeimdallNoStoreOnCheckpointEventCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreOnCheckpointEventCall) DoAndReturn(f func(context.Context, func(*Checkpoint)) error) *MockHeimdallNoStoreOnCheckpointEventCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// OnMilestoneEvent mocks base method. +func (m *MockHeimdallNoStore) OnMilestoneEvent(arg0 context.Context, arg1 func(*Milestone)) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnMilestoneEvent", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnMilestoneEvent indicates an expected call of OnMilestoneEvent. +func (mr *MockHeimdallNoStoreMockRecorder) OnMilestoneEvent(arg0, arg1 any) *MockHeimdallNoStoreOnMilestoneEventCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnMilestoneEvent", reflect.TypeOf((*MockHeimdallNoStore)(nil).OnMilestoneEvent), arg0, arg1) + return &MockHeimdallNoStoreOnMilestoneEventCall{Call: call} +} + +// MockHeimdallNoStoreOnMilestoneEventCall wrap *gomock.Call +type MockHeimdallNoStoreOnMilestoneEventCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreOnMilestoneEventCall) Return(arg0 error) *MockHeimdallNoStoreOnMilestoneEventCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreOnMilestoneEventCall) Do(f func(context.Context, func(*Milestone)) error) *MockHeimdallNoStoreOnMilestoneEventCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreOnMilestoneEventCall) DoAndReturn(f func(context.Context, func(*Milestone)) error) *MockHeimdallNoStoreOnMilestoneEventCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// OnSpanEvent mocks base method. +func (m *MockHeimdallNoStore) OnSpanEvent(arg0 context.Context, arg1 func(*Span)) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "OnSpanEvent", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// OnSpanEvent indicates an expected call of OnSpanEvent. +func (mr *MockHeimdallNoStoreMockRecorder) OnSpanEvent(arg0, arg1 any) *MockHeimdallNoStoreOnSpanEventCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnSpanEvent", reflect.TypeOf((*MockHeimdallNoStore)(nil).OnSpanEvent), arg0, arg1) + return &MockHeimdallNoStoreOnSpanEventCall{Call: call} +} + +// MockHeimdallNoStoreOnSpanEventCall wrap *gomock.Call +type MockHeimdallNoStoreOnSpanEventCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHeimdallNoStoreOnSpanEventCall) Return(arg0 error) *MockHeimdallNoStoreOnSpanEventCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHeimdallNoStoreOnSpanEventCall) Do(f func(context.Context, func(*Span)) error) *MockHeimdallNoStoreOnSpanEventCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHeimdallNoStoreOnSpanEventCall) DoAndReturn(f func(context.Context, func(*Span)) error) *MockHeimdallNoStoreOnSpanEventCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/polygon/heimdall/heimdall_test.go b/polygon/heimdall/heimdall_test.go new file mode 100644 index 00000000000..e89857d3ea5 --- /dev/null +++ b/polygon/heimdall/heimdall_test.go @@ -0,0 +1,358 @@ +package heimdall + +import ( + "context" + "encoding/json" + "math/big" + "testing" + "time" + + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/cmp" + "github.com/ledgerwatch/erigon/crypto" +) + +func makeCheckpoint(start uint64, len uint) *Checkpoint { + return &Checkpoint{ + Fields: WaypointFields{ + StartBlock: new(big.Int).SetUint64(start), + EndBlock: new(big.Int).SetUint64(start + uint64(len) - 1), + RootHash: libcommon.BytesToHash(crypto.Keccak256([]byte("ROOT"))), + Timestamp: uint64(time.Now().Unix()), + }, + } +} + +func makeMilestone(start uint64, len uint) *Milestone { + m := Milestone{ + Fields: WaypointFields{ + StartBlock: new(big.Int).SetUint64(start), + EndBlock: new(big.Int).SetUint64(start + uint64(len) - 1), + RootHash: libcommon.BytesToHash(crypto.Keccak256([]byte("ROOT"))), + Timestamp: uint64(time.Now().Unix()), + }, + } + return &m +} + +type heimdallTest struct { + ctx context.Context + client *MockHeimdallClient + heimdall Heimdall + logger log.Logger + store *MockStore +} + +func newHeimdallTest(t *testing.T) heimdallTest { + logger := log.New() + ctx := context.Background() + + ctrl := gomock.NewController(t) + t.Cleanup(ctrl.Finish) + + client := NewMockHeimdallClient(ctrl) + heimdall := NewHeimdall(client, logger) + store := NewMockStore(ctrl) + + return heimdallTest{ + ctx, + client, + heimdall, + logger, + store, + } +} + +func (test heimdallTest) setupCheckpoints(count int) []*Checkpoint { + var expectedCheckpoints []*Checkpoint + for i := 0; i < count; i++ { + c := makeCheckpoint(uint64(i*256), 256) + expectedCheckpoints = append(expectedCheckpoints, c) + } + + client := test.client + + client.EXPECT().FetchCheckpointCount(gomock.Any()).Return(int64(len(expectedCheckpoints)), nil) + + if count < checkpointsBatchFetchThreshold { + client.EXPECT(). + FetchCheckpoint(gomock.Any(), gomock.Any()). + DoAndReturn(func(ctx context.Context, number int64) (*Checkpoint, error) { + return expectedCheckpoints[number-1], nil + }). + AnyTimes() + } else { + client.EXPECT(). + FetchCheckpoints(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(ctx context.Context, page uint64, limit uint64) (Checkpoints, error) { + if page == 0 { + return nil, nil + } + + limit = cmp.Min(10, limit) + l := (page - 1) * limit + r := page * limit + return expectedCheckpoints[l:r], nil + }). + AnyTimes() + } + + // this is a dummy store + test.store.EXPECT(). + LastCheckpointId(gomock.Any()).Return(CheckpointId(0), false, nil).AnyTimes() + + test.store.EXPECT(). + PutCheckpoint(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(ctx context.Context, checkpointId CheckpointId, checkpoint *Checkpoint) error { + return nil + }).AnyTimes() + + return expectedCheckpoints +} + +func (test heimdallTest) setupMilestones(count int) []*Milestone { + var expectedMilestones []*Milestone + for i := 0; i < count; i++ { + m := makeMilestone(uint64(i*16), 16) + expectedMilestones = append(expectedMilestones, m) + } + + client := test.client + client.EXPECT().FetchMilestoneCount(gomock.Any()).Return(int64(len(expectedMilestones)), nil) + client.EXPECT().FetchMilestone(gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, number int64) (*Milestone, error) { + return expectedMilestones[number-1], nil + }).AnyTimes() + + // this is a dummy store + test.store.EXPECT(). + LastMilestoneId(gomock.Any()).Return(MilestoneId(0), false, nil).AnyTimes() + test.store.EXPECT(). + PutMilestone(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error { + return nil + }).AnyTimes() + + return expectedMilestones +} + +func TestFetchCheckpoints1(t *testing.T) { + test := newHeimdallTest(t) + expectedCheckpoint := test.setupCheckpoints(1)[0] + + checkpoints, err := test.heimdall.FetchCheckpointsFromBlock(test.ctx, test.store, 0) + require.Nil(t, err) + + require.Equal(t, 1, len(checkpoints)) + assert.Equal(t, expectedCheckpoint.Timestamp(), checkpoints[0].Timestamp()) +} + +func TestFetchCheckpointsPastLast(t *testing.T) { + test := newHeimdallTest(t) + _ = test.setupCheckpoints(1)[0] + + checkpoints, err := test.heimdall.FetchCheckpointsFromBlock(test.ctx, test.store, 500) + require.Nil(t, err) + + require.Equal(t, 0, len(checkpoints)) +} + +func TestFetchCheckpoints10(t *testing.T) { + test := newHeimdallTest(t) + expectedCheckpoints := test.setupCheckpoints(10) + + checkpoints, err := test.heimdall.FetchCheckpointsFromBlock(test.ctx, test.store, 0) + require.Nil(t, err) + + require.Equal(t, len(expectedCheckpoints), len(checkpoints)) + for i := 0; i < len(checkpoints); i++ { + assert.Equal(t, expectedCheckpoints[i].StartBlock().Uint64(), checkpoints[i].StartBlock().Uint64()) + } +} + +func TestFetchCheckpoints100(t *testing.T) { + test := newHeimdallTest(t) + expectedCheckpoints := test.setupCheckpoints(100) + + checkpoints, err := test.heimdall.FetchCheckpointsFromBlock(test.ctx, test.store, 0) + require.Nil(t, err) + + require.Equal(t, len(expectedCheckpoints), len(checkpoints)) + for i := 0; i < len(checkpoints); i++ { + assert.Equal(t, expectedCheckpoints[i].StartBlock().Uint64(), checkpoints[i].StartBlock().Uint64()) + } +} + +func TestFetchCheckpointsMiddleStart(t *testing.T) { + test := newHeimdallTest(t) + expectedCheckpoints := test.setupCheckpoints(10) + const offset = 6 + + checkpoints, err := test.heimdall.FetchCheckpointsFromBlock(test.ctx, test.store, expectedCheckpoints[offset].StartBlock().Uint64()) + require.Nil(t, err) + + require.Equal(t, len(expectedCheckpoints)-offset, len(checkpoints)) + for i := 0; i < len(checkpoints); i++ { + assert.Equal(t, expectedCheckpoints[offset+i].StartBlock().Uint64(), checkpoints[i].StartBlock().Uint64()) + } +} + +func TestFetchMilestones1(t *testing.T) { + test := newHeimdallTest(t) + expectedMilestone := test.setupMilestones(1)[0] + + milestones, err := test.heimdall.FetchMilestonesFromBlock(test.ctx, test.store, 0) + require.Nil(t, err) + + require.Equal(t, 1, len(milestones)) + assert.Equal(t, expectedMilestone.Timestamp(), milestones[0].Timestamp()) +} + +func TestFetchMilestonesPastLast(t *testing.T) { + test := newHeimdallTest(t) + _ = test.setupMilestones(1)[0] + + milestones, err := test.heimdall.FetchMilestonesFromBlock(test.ctx, test.store, 500) + require.Nil(t, err) + + require.Equal(t, 0, len(milestones)) +} + +func TestFetchMilestones10(t *testing.T) { + test := newHeimdallTest(t) + expectedMilestones := test.setupMilestones(10) + + milestones, err := test.heimdall.FetchMilestonesFromBlock(test.ctx, test.store, 0) + require.Nil(t, err) + + require.Equal(t, len(expectedMilestones), len(milestones)) + for i := 0; i < len(milestones); i++ { + assert.Equal(t, expectedMilestones[i].StartBlock().Uint64(), milestones[i].StartBlock().Uint64()) + } +} + +func TestFetchMilestonesMiddleStart(t *testing.T) { + test := newHeimdallTest(t) + expectedMilestones := test.setupMilestones(10) + const offset = 6 + + milestones, err := test.heimdall.FetchMilestonesFromBlock(test.ctx, test.store, expectedMilestones[offset].StartBlock().Uint64()) + require.Nil(t, err) + + require.Equal(t, len(expectedMilestones)-offset, len(milestones)) + for i := 0; i < len(milestones); i++ { + assert.Equal(t, expectedMilestones[offset+i].StartBlock().Uint64(), milestones[i].StartBlock().Uint64()) + } +} + +func TestFetchMilestonesStartingBeforeEvictionPoint(t *testing.T) { + test := newHeimdallTest(t) + + var expectedMilestones []*Milestone + for i := 0; i < 20; i++ { + m := makeMilestone(uint64(i*16), 16) + expectedMilestones = append(expectedMilestones, m) + } + const keptMilestones = 5 + + client := test.client + client.EXPECT().FetchMilestoneCount(gomock.Any()).Return(int64(len(expectedMilestones)), nil) + client.EXPECT().FetchMilestone(gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, number int64) (*Milestone, error) { + if int(number) <= len(expectedMilestones)-keptMilestones { + return nil, ErrNotInMilestoneList + } + return expectedMilestones[number-1], nil + }).AnyTimes() + + // this is a dummy store + test.store.EXPECT(). + LastMilestoneId(gomock.Any()).Return(MilestoneId(0), false, nil).AnyTimes() + test.store.EXPECT(). + PutMilestone(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error { + return nil + }).AnyTimes() + + milestones, err := test.heimdall.FetchMilestonesFromBlock(test.ctx, test.store, 0) + require.NotNil(t, err) + require.ErrorIs(t, err, ErrIncompleteMilestoneRange) + + require.Equal(t, keptMilestones, len(milestones)) + for i := 0; i < len(milestones); i++ { + assert.Equal(t, expectedMilestones[len(expectedMilestones)-len(milestones)+i].StartBlock().Uint64(), milestones[i].StartBlock().Uint64()) + } +} + +func TestOnMilestoneEvent(t *testing.T) { + test := newHeimdallTest(t) + + var cancel context.CancelFunc + test.ctx, cancel = context.WithCancel(test.ctx) + defer cancel() + + client := test.client + count := int64(1) + client.EXPECT().FetchMilestoneCount(gomock.Any()).DoAndReturn(func(ctx context.Context) (int64, error) { + c := count + if c == 2 { + cancel() + return 0, ctx.Err() + } + count++ + return c, nil + }).AnyTimes() + + expectedMilestone := makeMilestone(0, 12) + + client.EXPECT(). + FetchMilestone(gomock.Any(), gomock.Any()).Return(expectedMilestone, nil).AnyTimes() + + lastMilestoneId := MilestoneId(0) + test.store.EXPECT(). + LastMilestoneId(gomock.Any()).Return(lastMilestoneId, true, nil).AnyTimes() + test.store.EXPECT(). + PutMilestone(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error { + lastMilestoneId = milestoneId + return nil + }).AnyTimes() + + eventChan := make(chan *Milestone) + err := test.heimdall.OnMilestoneEvent(test.ctx, test.store, func(m *Milestone) { + eventChan <- m + }) + require.Nil(t, err) + + m := <-eventChan + assert.Equal(t, expectedMilestone.Timestamp(), m.Timestamp()) +} + +func TestMarshall(t *testing.T) { + m := makeMilestone(10, 100) + + b, err := json.Marshal(m) + + assert.Nil(t, err) + + var m1 Milestone + + assert.Nil(t, json.Unmarshal(b, &m1)) + + assert.Equal(t, *m, m1) + + c := makeCheckpoint(10, 100) + + b, err = json.Marshal(c) + + assert.Nil(t, err) + + var c1 Checkpoint + + assert.Nil(t, json.Unmarshal(b, &c1)) + + assert.Equal(t, *c, c1) +} diff --git a/polygon/heimdall/http_client_mock.go b/polygon/heimdall/http_client_mock.go index bf1564bb500..b62ff955323 100644 --- a/polygon/heimdall/http_client_mock.go +++ b/polygon/heimdall/http_client_mock.go @@ -1,5 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/ledgerwatch/erigon/polygon/heimdall (interfaces: HttpClient) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./http_client_mock.go -package=heimdall . HttpClient +// // Package heimdall is a generated GoMock package. package heimdall @@ -8,7 +13,7 @@ import ( http "net/http" reflect "reflect" - gomock "github.com/golang/mock/gomock" + gomock "go.uber.org/mock/gomock" ) // MockHttpClient is a mock of HttpClient interface. @@ -41,9 +46,33 @@ func (m *MockHttpClient) CloseIdleConnections() { } // CloseIdleConnections indicates an expected call of CloseIdleConnections. -func (mr *MockHttpClientMockRecorder) CloseIdleConnections() *gomock.Call { +func (mr *MockHttpClientMockRecorder) CloseIdleConnections() *MockHttpClientCloseIdleConnectionsCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseIdleConnections", reflect.TypeOf((*MockHttpClient)(nil).CloseIdleConnections)) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseIdleConnections", reflect.TypeOf((*MockHttpClient)(nil).CloseIdleConnections)) + return &MockHttpClientCloseIdleConnectionsCall{Call: call} +} + +// MockHttpClientCloseIdleConnectionsCall wrap *gomock.Call +type MockHttpClientCloseIdleConnectionsCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHttpClientCloseIdleConnectionsCall) Return() *MockHttpClientCloseIdleConnectionsCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHttpClientCloseIdleConnectionsCall) Do(f func()) *MockHttpClientCloseIdleConnectionsCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHttpClientCloseIdleConnectionsCall) DoAndReturn(f func()) *MockHttpClientCloseIdleConnectionsCall { + c.Call = c.Call.DoAndReturn(f) + return c } // Do mocks base method. @@ -56,7 +85,31 @@ func (m *MockHttpClient) Do(arg0 *http.Request) (*http.Response, error) { } // Do indicates an expected call of Do. -func (mr *MockHttpClientMockRecorder) Do(arg0 interface{}) *gomock.Call { +func (mr *MockHttpClientMockRecorder) Do(arg0 any) *MockHttpClientDoCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Do", reflect.TypeOf((*MockHttpClient)(nil).Do), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Do", reflect.TypeOf((*MockHttpClient)(nil).Do), arg0) + return &MockHttpClientDoCall{Call: call} +} + +// MockHttpClientDoCall wrap *gomock.Call +type MockHttpClientDoCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockHttpClientDoCall) Return(arg0 *http.Response, arg1 error) *MockHttpClientDoCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockHttpClientDoCall) Do(f func(*http.Request) (*http.Response, error)) *MockHttpClientDoCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockHttpClientDoCall) DoAndReturn(f func(*http.Request) (*http.Response, error)) *MockHttpClientDoCall { + c.Call = c.Call.DoAndReturn(f) + return c } diff --git a/polygon/heimdall/log_prefix.go b/polygon/heimdall/log_prefix.go new file mode 100644 index 00000000000..cc1619f6376 --- /dev/null +++ b/polygon/heimdall/log_prefix.go @@ -0,0 +1,7 @@ +package heimdall + +import "fmt" + +func heimdallLogPrefix(message string) string { + return fmt.Sprintf("[bor.heimdall] %s", message) +} diff --git a/polygon/heimdall/metrics.go b/polygon/heimdall/metrics.go index 0157c37766d..295b86f70c2 100644 --- a/polygon/heimdall/metrics.go +++ b/polygon/heimdall/metrics.go @@ -22,6 +22,7 @@ const ( spanRequest requestType = "span" checkpointRequest requestType = "checkpoint" checkpointCountRequest requestType = "checkpoint-count" + checkpointListRequest requestType = "checkpoint-list" milestoneRequest requestType = "milestone" milestoneCountRequest requestType = "milestone-count" milestoneNoAckRequest requestType = "milestone-no-ack" diff --git a/polygon/heimdall/milestone.go b/polygon/heimdall/milestone.go index 44cfa2e9c1b..12e64c00243 100644 --- a/polygon/heimdall/milestone.go +++ b/polygon/heimdall/milestone.go @@ -1,19 +1,100 @@ package heimdall import ( + "encoding/binary" + "encoding/json" + "fmt" "math/big" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" ) +var _ Waypoint = Milestone{} + +type MilestoneId uint64 + // milestone defines a response object type of bor milestone type Milestone struct { - Proposer libcommon.Address `json:"proposer"` - StartBlock *big.Int `json:"start_block"` - EndBlock *big.Int `json:"end_block"` - Hash libcommon.Hash `json:"hash"` - BorChainID string `json:"bor_chain_id"` - Timestamp uint64 `json:"timestamp"` + Id MilestoneId + Fields WaypointFields +} + +func (m Milestone) StartBlock() *big.Int { + return m.Fields.StartBlock +} + +func (m Milestone) EndBlock() *big.Int { + return m.Fields.EndBlock +} + +func (m Milestone) RootHash() libcommon.Hash { + return m.Fields.RootHash +} + +func (m Milestone) Timestamp() uint64 { + return m.Fields.Timestamp +} + +func (m Milestone) Length() uint64 { + return m.Fields.Length() +} + +func (m Milestone) CmpRange(n uint64) int { + return m.Fields.CmpRange(n) +} + +func (m Milestone) String() string { + return fmt.Sprintf( + "Milestone {%v (%d:%d) %v %v %v}", + m.Fields.Proposer.String(), + m.Fields.StartBlock, + m.Fields.EndBlock, + m.Fields.RootHash.Hex(), + m.Fields.ChainID, + m.Fields.Timestamp, + ) +} + +func (m *Milestone) MarshalJSON() ([]byte, error) { + return json.Marshal(struct { + Id MilestoneId `json:"milestone_id"` + Proposer libcommon.Address `json:"proposer"` + StartBlock *big.Int `json:"start_block"` + EndBlock *big.Int `json:"end_block"` + RootHash libcommon.Hash `json:"hash"` + ChainID string `json:"bor_chain_id"` + Timestamp uint64 `json:"timestamp"` + }{ + m.Id, + m.Fields.Proposer, + m.Fields.StartBlock, + m.Fields.EndBlock, + m.Fields.RootHash, + m.Fields.ChainID, + m.Fields.Timestamp, + }) +} + +func (m *Milestone) UnmarshalJSON(b []byte) error { + + // TODO - do we want to handle milestone_id ? + // (example format: 043353d6-d83f-47f8-a38f-f5062e82a6d4 - 0x142987cad41cf7111b2f186da6ab89e460037f7f) + dto := struct { + WaypointFields + RootHash libcommon.Hash `json:"hash"` + Id MilestoneId `json:"id"` + }{} + + if err := json.Unmarshal(b, &dto); err != nil { + return err + } + + m.Id = dto.Id + m.Fields = dto.WaypointFields + m.Fields.RootHash = dto.RootHash + + return nil } type MilestoneResponse struct { @@ -56,3 +137,32 @@ type MilestoneIDResponse struct { Height string `json:"height"` Result MilestoneID `json:"result"` } + +var ErrMilestoneNotFound = fmt.Errorf("milestone not found") + +func MilestoneIdAt(tx kv.Tx, block uint64) (MilestoneId, error) { + var id uint64 + + c, err := tx.Cursor(kv.BorMilestoneEnds) + + if err != nil { + return 0, err + } + + var blockNumBuf [8]byte + binary.BigEndian.PutUint64(blockNumBuf[:], block) + + k, v, err := c.Seek(blockNumBuf[:]) + + if err != nil { + return 0, err + } + + if k == nil { + return 0, fmt.Errorf("%d: %w", block, ErrMilestoneNotFound) + } + + id = binary.BigEndian.Uint64(v) + + return MilestoneId(id), err +} diff --git a/polygon/heimdall/simulator/heimdall_simulator.go b/polygon/heimdall/simulator/heimdall_simulator.go new file mode 100644 index 00000000000..ef98c2c19d3 --- /dev/null +++ b/polygon/heimdall/simulator/heimdall_simulator.go @@ -0,0 +1,283 @@ +package simulator + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "os" + "path/filepath" + "time" + + "github.com/ledgerwatch/log/v3" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" + "github.com/ledgerwatch/erigon-lib/common/background" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" + "github.com/ledgerwatch/erigon/cmd/snapshots/sync" + "github.com/ledgerwatch/erigon/eth/ethconfig" + borsnaptype "github.com/ledgerwatch/erigon/polygon/bor/snaptype" + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/turbo/snapshotsync/freezeblocks" +) + +type HeimdallSimulator struct { + ctx context.Context + knownBorSnapshots *freezeblocks.BorRoSnapshots + activeBorSnapshots *freezeblocks.BorRoSnapshots + blockReader *freezeblocks.BlockReader + logger log.Logger + downloader *sync.TorrentClient + chain string + + iterations []uint64 // list of final block numbers for an iteration + lastAvailableBlockNumber uint64 +} + +type IndexFnType func(context.Context, snaptype.FileInfo, uint32, string, *background.Progress, log.Lvl, log.Logger) error + +func NewHeimdall(ctx context.Context, chain string, snapshotLocation string, logger log.Logger, iterations []uint64) (HeimdallSimulator, error) { + cfg := snapcfg.KnownCfg(chain) + torrentDir := filepath.Join(snapshotLocation, "torrents", chain) + + knownBorSnapshots := freezeblocks.NewBorRoSnapshots(ethconfig.Defaults.Snapshot, torrentDir, 0, logger) + + files := make([]string, 0, len(cfg.Preverified)) + + for _, item := range cfg.Preverified { + files = append(files, item.Name) + } + + err := knownBorSnapshots.InitSegments(files) + if err != nil { + return HeimdallSimulator{}, err + } + + activeBorSnapshots := freezeblocks.NewBorRoSnapshots(ethconfig.Defaults.Snapshot, torrentDir, 0, logger) + + config := sync.NewDefaultTorrentClientConfig(chain, snapshotLocation, logger) + downloader, err := sync.NewTorrentClient(config) + if err != nil { + return HeimdallSimulator{}, err + } + + // index local files + localFiles, err := os.ReadDir(torrentDir) + if err != nil { + return HeimdallSimulator{}, err + } + + for _, file := range localFiles { + info, _, _ := snaptype.ParseFileName(torrentDir, file.Name()) + if info.Ext == ".seg" { + if info.Type.Enum() == borsnaptype.Enums.BorSpans { + err = info.Type.BuildIndexes(ctx, info, nil, torrentDir, nil, log.LvlWarn, logger) + if err != nil { + return HeimdallSimulator{}, err + } + } + + if info.Type.Enum() == borsnaptype.Enums.BorEvents { + err = info.Type.BuildIndexes(ctx, info, nil, torrentDir, nil, log.LvlWarn, logger) + if err != nil { + return HeimdallSimulator{}, err + } + } + } + } + + if err = activeBorSnapshots.ReopenFolder(); err != nil { + return HeimdallSimulator{}, err + } + + var lastAvailableBlockNum uint64 + if len(iterations) == 0 { + lastAvailableBlockNum = 0 + } else { + lastAvailableBlockNum = iterations[0] + iterations = iterations[1:] + } + + s := HeimdallSimulator{ + ctx: ctx, + knownBorSnapshots: knownBorSnapshots, + activeBorSnapshots: activeBorSnapshots, + blockReader: freezeblocks.NewBlockReader(nil, activeBorSnapshots), + logger: logger, + downloader: downloader, + chain: chain, + + iterations: iterations, + lastAvailableBlockNumber: lastAvailableBlockNum, + } + + go func() { + <-ctx.Done() + s.Close() + }() + + return s, nil +} + +func (h *HeimdallSimulator) FetchLatestSpan(ctx context.Context) (*heimdall.Span, error) { + latestSpan := uint64(heimdall.SpanIdAt(h.lastAvailableBlockNumber)) + + span, err := h.getSpan(h.ctx, latestSpan) + if err != nil { + return nil, err + } + + return &span, nil +} + +func (h *HeimdallSimulator) FetchSpan(ctx context.Context, spanID uint64) (*heimdall.Span, error) { + // move to next iteration + if spanID == uint64(heimdall.SpanIdAt(h.lastAvailableBlockNumber)) { + if len(h.iterations) == 0 { + h.lastAvailableBlockNumber++ + } else { + h.lastAvailableBlockNumber = h.iterations[0] + h.iterations = h.iterations[1:] + } + } + + if spanID > uint64(heimdall.SpanIdAt(h.lastAvailableBlockNumber)) { + return nil, errors.New("span not found") + } + + span, err := h.getSpan(h.ctx, spanID) + if err != nil { + return nil, err + } + + return &span, err +} + +func (h *HeimdallSimulator) FetchStateSyncEvents(ctx context.Context, fromId uint64, to time.Time, limit int) ([]*heimdall.EventRecordWithTime, error) { + events, maxTime, err := h.blockReader.EventsByIdFromSnapshot(fromId, to, limit) + if err != nil { + return nil, err + } + + view := h.knownBorSnapshots.View() + defer view.Close() + + for !maxTime && len(events) != limit { + if seg, ok := view.EventsSegment(h.lastAvailableBlockNumber); ok { + if err := h.downloadData(ctx, seg, borsnaptype.BorEvents); err != nil { + return nil, err + } + } + + if len(h.iterations) == 0 { + // we increment by 500k because the events we need are not in this snapshot file + h.lastAvailableBlockNumber += 500000 + } else { + h.lastAvailableBlockNumber = h.iterations[0] + h.iterations = h.iterations[1:] + } + + events, maxTime, err = h.blockReader.EventsByIdFromSnapshot(fromId, to, limit) + if err != nil { + return nil, err + } + } + + return events, nil +} + +func (h *HeimdallSimulator) FetchCheckpoint(ctx context.Context, number int64) (*heimdall.Checkpoint, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchCheckpoint not implemented") +} + +func (h *HeimdallSimulator) FetchCheckpointCount(ctx context.Context) (int64, error) { + return 0, status.Errorf(codes.Unimplemented, "method FetchCheckpointCount not implemented") +} + +func (h *HeimdallSimulator) FetchMilestone(ctx context.Context, number int64) (*heimdall.Milestone, error) { + return nil, status.Errorf(codes.Unimplemented, "method FetchMilestone not implemented") +} + +func (h *HeimdallSimulator) FetchMilestoneCount(ctx context.Context) (int64, error) { + return 0, status.Errorf(codes.Unimplemented, "method FetchMilestoneCount not implemented") +} + +func (h *HeimdallSimulator) FetchNoAckMilestone(ctx context.Context, milestoneID string) error { + return status.Errorf(codes.Unimplemented, "method FetchNoAckMilestone not implemented") +} + +func (h *HeimdallSimulator) FetchLastNoAckMilestone(ctx context.Context) (string, error) { + return "", status.Errorf(codes.Unimplemented, "method FetchLastNoAckMilestone not implemented") +} + +func (h *HeimdallSimulator) FetchMilestoneID(ctx context.Context, milestoneID string) error { + return status.Errorf(codes.Unimplemented, "method FetchMilestoneID not implemented") +} + +func (h *HeimdallSimulator) Close() { + _ = h.downloader.Close() + + h.activeBorSnapshots.Close() + h.knownBorSnapshots.Close() +} + +func (h *HeimdallSimulator) downloadData(ctx context.Context, spans *freezeblocks.Segment, sType snaptype.Type) error { + fileName := snaptype.SegmentFileName(1, spans.From(), spans.To(), sType.Enum()) + session := sync.NewTorrentSession(h.downloader, h.chain) + info, _, _ := snaptype.ParseFileName(session.LocalFsRoot(), fileName) + + h.logger.Info(fmt.Sprintf("Downloading %s", fileName)) + + err := session.Download(ctx, fileName) + if err != nil { + return fmt.Errorf("can't download %s: %w", fileName, err) + } + + h.logger.Info(fmt.Sprintf("Indexing %s", fileName)) + + err = sType.BuildIndexes(ctx, info, nil, session.LocalFsRoot(), nil, log.LvlDebug, h.logger) + + if err != nil { + return fmt.Errorf("can't download %s: %w", fileName, err) + } + + return h.activeBorSnapshots.ReopenSegments([]snaptype.Type{sType}, true) +} + +func (h *HeimdallSimulator) getSpan(ctx context.Context, spanId uint64) (heimdall.Span, error) { + span, err := h.blockReader.Span(ctx, nil, spanId) + if span != nil && err == nil { + var s heimdall.Span + if err = json.Unmarshal(span, &s); err != nil { + return heimdall.Span{}, err + } + return s, err + } + + if span == nil { + view := h.knownBorSnapshots.View() + defer view.Close() + + blockNum := heimdall.SpanEndBlockNum(heimdall.SpanId(spanId)) + + if seg, ok := view.SpansSegment(blockNum); ok { + if err := h.downloadData(ctx, seg, borsnaptype.BorSpans); err != nil { + return heimdall.Span{}, err + } + } + + span, err = h.blockReader.Span(ctx, nil, spanId) + if err != nil { + return heimdall.Span{}, err + } + } + + var s heimdall.Span + if err := json.Unmarshal(span, &s); err != nil { + return heimdall.Span{}, err + } + + return s, nil +} diff --git a/polygon/heimdall/simulator/simulator_test.go b/polygon/heimdall/simulator/simulator_test.go new file mode 100644 index 00000000000..67a904e700e --- /dev/null +++ b/polygon/heimdall/simulator/simulator_test.go @@ -0,0 +1,142 @@ +package simulator_test + +import ( + "context" + _ "embed" + "os" + "path/filepath" + "testing" + "time" + + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/assert" + + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/polygon/heimdall/simulator" +) + +//go:embed testdata/v1-000000-000500-borevents.seg +var events []byte + +//go:embed testdata/v1-000500-001000-borevents.seg +var events2 []byte + +//go:embed testdata/v1-000000-000500-borspans.seg +var spans []byte + +func createFiles(dataDir, chain string) error { + destPath := filepath.Join(dataDir, "torrents", chain) + err := os.MkdirAll(destPath, 0755) + if err != nil { + return err + } + + destFile := filepath.Join(destPath, "v1-000000-000500-borevents.seg") + err = os.WriteFile(destFile, events, 0755) + if err != nil { + return err + } + + destFile = filepath.Join(destPath, "v1-000500-001000-borevents.seg") + err = os.WriteFile(destFile, events2, 0755) + if err != nil { + return err + } + + destFile = filepath.Join(destPath, "v1-000000-000500-borspans.seg") + err = os.WriteFile(destFile, spans, 0755) + if err != nil { + return err + } + + return nil +} + +func setup(t *testing.T, ctx context.Context, iterations []uint64) simulator.HeimdallSimulator { + chain := "mumbai" + logger := log.New() + logger.SetHandler(log.StdoutHandler) + dataDir := t.TempDir() + + err := createFiles(dataDir, chain) + if err != nil { + t.Fatal(err) + } + + sim, err := simulator.NewHeimdall(ctx, chain, dataDir, logger, iterations) + if err != nil { + t.Fatal(err) + } + + return sim +} + +func TestSimulatorEvents(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + sim := setup(t, ctx, []uint64{1_000_000}) + + res, err := sim.FetchStateSyncEvents(ctx, 0, time.Now(), 100) + assert.NoError(t, err) + assert.Equal(t, 100, len(res)) + + resLimit, err := sim.FetchStateSyncEvents(ctx, 0, time.Now(), 2) + assert.NoError(t, err) + assert.Equal(t, 2, len(resLimit)) + assert.Equal(t, res[:2], resLimit) + + resStart, err := sim.FetchStateSyncEvents(ctx, 10, time.Now(), 5) + assert.NoError(t, err) + assert.Equal(t, 5, len(resStart)) + assert.Equal(t, uint64(10), resStart[0].ID) + assert.Equal(t, res[9:14], resStart) + + lastTime := res[len(res)-1].Time + resTime, err := sim.FetchStateSyncEvents(ctx, 0, lastTime.Add(-1*time.Second), 100) + assert.NoError(t, err) + assert.Equal(t, 99, len(resTime)) + assert.Equal(t, res[:len(res)-1], resTime) +} + +func TestSimulatorSpans(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + sim := setup(t, ctx, []uint64{100_000, 205_055}) + + // should have the final span from first iteration + span, err := sim.FetchLatestSpan(ctx) + assert.NoError(t, err) + assert.Equal(t, heimdall.SpanIdAt(100_000), span.Id) + assert.Equal(t, uint64(96_256), span.StartBlock) + assert.Equal(t, uint64(102_655), span.EndBlock) + + // get last span to move to next iteration + span2, err := sim.FetchSpan(ctx, uint64(heimdall.SpanIdAt(100_000))) + assert.NoError(t, err) + assert.Equal(t, span, span2) + + // check if we are in the next iteration + span3, err := sim.FetchLatestSpan(ctx) + assert.NoError(t, err) + assert.Equal(t, heimdall.SpanIdAt(205_055), span3.Id) + assert.Equal(t, uint64(198_656), span3.StartBlock) + assert.Equal(t, uint64(205_055), span3.EndBlock) + + // higher spans should not be available + _, err = sim.FetchSpan(ctx, uint64(heimdall.SpanIdAt(205_055)+1)) + assert.Error(t, err, "span not found") + + // move to next iteration (should be +1 block since we have no more iterations defined) + span4, err := sim.FetchSpan(ctx, uint64(heimdall.SpanIdAt(205_055))) + assert.NoError(t, err) + assert.Equal(t, span4, span3) + + // check latest span (should be the same since we are + span5, err := sim.FetchLatestSpan(ctx) + assert.NoError(t, err) + assert.Equal(t, heimdall.SpanIdAt(205_056), span5.Id) + assert.Equal(t, uint64(205_056), span5.StartBlock) + assert.Equal(t, uint64(211_455), span5.EndBlock) +} diff --git a/polygon/heimdall/simulator/testdata/v1-000000-000500-borevents.seg b/polygon/heimdall/simulator/testdata/v1-000000-000500-borevents.seg new file mode 100644 index 00000000000..f8d6af3bad3 Binary files /dev/null and b/polygon/heimdall/simulator/testdata/v1-000000-000500-borevents.seg differ diff --git a/polygon/heimdall/simulator/testdata/v1-000000-000500-borspans.seg b/polygon/heimdall/simulator/testdata/v1-000000-000500-borspans.seg new file mode 100644 index 00000000000..095da9e2416 Binary files /dev/null and b/polygon/heimdall/simulator/testdata/v1-000000-000500-borspans.seg differ diff --git a/polygon/heimdall/simulator/testdata/v1-000500-001000-borevents.seg b/polygon/heimdall/simulator/testdata/v1-000500-001000-borevents.seg new file mode 100644 index 00000000000..f4e50af84db Binary files /dev/null and b/polygon/heimdall/simulator/testdata/v1-000500-001000-borevents.seg differ diff --git a/polygon/heimdall/span.go b/polygon/heimdall/span.go index 862f0573f43..10c36998c1f 100644 --- a/polygon/heimdall/span.go +++ b/polygon/heimdall/span.go @@ -6,31 +6,37 @@ import ( "github.com/ledgerwatch/erigon/polygon/bor/valset" ) -// Span represents a current bor span type Span struct { - ID uint64 `json:"span_id" yaml:"span_id"` - StartBlock uint64 `json:"start_block" yaml:"start_block"` - EndBlock uint64 `json:"end_block" yaml:"end_block"` + Id SpanId `json:"span_id" yaml:"span_id"` + StartBlock uint64 `json:"start_block" yaml:"start_block"` + EndBlock uint64 `json:"end_block" yaml:"end_block"` + ValidatorSet valset.ValidatorSet `json:"validator_set,omitempty" yaml:"validator_set"` + SelectedProducers []valset.Validator `json:"selected_producers,omitempty" yaml:"selected_producers"` + ChainID string `json:"bor_chain_id,omitempty" yaml:"bor_chain_id"` } -// HeimdallSpan represents span from heimdall APIs -type HeimdallSpan struct { - Span - ValidatorSet valset.ValidatorSet `json:"validator_set" yaml:"validator_set"` - SelectedProducers []valset.Validator `json:"selected_producers" yaml:"selected_producers"` - ChainID string `json:"bor_chain_id" yaml:"bor_chain_id"` -} - -func (hs *HeimdallSpan) Less(other btree.Item) bool { - otherHs := other.(*HeimdallSpan) +func (hs *Span) Less(other btree.Item) bool { + otherHs := other.(*Span) if hs.EndBlock == 0 || otherHs.EndBlock == 0 { // if endblock is not specified in one of the items, allow search by ID - return hs.ID < otherHs.ID + return hs.Id < otherHs.Id } return hs.EndBlock < otherHs.EndBlock } +func (s *Span) CmpRange(n uint64) int { + if n < s.StartBlock { + return -1 + } + + if n > s.EndBlock { + return 1 + } + + return 0 +} + type SpanResponse struct { - Height string `json:"height"` - Result HeimdallSpan `json:"result"` + Height string `json:"height"` + Result Span `json:"result"` } diff --git a/polygon/bor/span_id.go b/polygon/heimdall/span_id.go similarity index 68% rename from polygon/bor/span_id.go rename to polygon/heimdall/span_id.go index 1c9348b6e1b..34da42915e9 100644 --- a/polygon/bor/span_id.go +++ b/polygon/heimdall/span_id.go @@ -1,33 +1,35 @@ -package bor +package heimdall import ( "github.com/ledgerwatch/erigon/polygon/bor/borcfg" ) +type SpanId uint64 + const ( spanLength = 6400 // Number of blocks in a span zerothSpanEnd = 255 // End block of 0th span ) -// SpanIDAt returns the corresponding span id for the given block number. -func SpanIDAt(blockNum uint64) uint64 { +// SpanIdAt returns the corresponding span id for the given block number. +func SpanIdAt(blockNum uint64) SpanId { if blockNum > zerothSpanEnd { - return 1 + (blockNum-zerothSpanEnd-1)/spanLength + return SpanId(1 + (blockNum-zerothSpanEnd-1)/spanLength) } return 0 } // SpanEndBlockNum returns the number of the last block in the given span. -func SpanEndBlockNum(spanID uint64) uint64 { - if spanID > 0 { - return spanID*spanLength + zerothSpanEnd +func SpanEndBlockNum(spanId SpanId) uint64 { + if spanId > 0 { + return uint64(spanId)*spanLength + zerothSpanEnd } return zerothSpanEnd } // IsBlockInLastSprintOfSpan returns true if a block num is within the last sprint of a span and false otherwise. func IsBlockInLastSprintOfSpan(blockNum uint64, config *borcfg.BorConfig) bool { - spanNum := SpanIDAt(blockNum) + spanNum := SpanIdAt(blockNum) endBlockNum := SpanEndBlockNum(spanNum) sprintLen := config.CalculateSprintLength(blockNum) startBlockNum := endBlockNum - sprintLen + 1 diff --git a/polygon/bor/span_id_test.go b/polygon/heimdall/span_id_test.go similarity index 59% rename from polygon/bor/span_id_test.go rename to polygon/heimdall/span_id_test.go index 3281486576a..4fa25269128 100644 --- a/polygon/bor/span_id_test.go +++ b/polygon/heimdall/span_id_test.go @@ -1,4 +1,4 @@ -package bor +package heimdall import ( "testing" @@ -9,18 +9,18 @@ import ( ) func TestSpanIDAt(t *testing.T) { - assert.Equal(t, uint64(0), SpanIDAt(0)) - assert.Equal(t, uint64(0), SpanIDAt(1)) - assert.Equal(t, uint64(0), SpanIDAt(2)) - assert.Equal(t, uint64(0), SpanIDAt(zerothSpanEnd)) - assert.Equal(t, uint64(1), SpanIDAt(zerothSpanEnd+1)) - assert.Equal(t, uint64(1), SpanIDAt(zerothSpanEnd+2)) - assert.Equal(t, uint64(1), SpanIDAt(6655)) - assert.Equal(t, uint64(2), SpanIDAt(6656)) - assert.Equal(t, uint64(2), SpanIDAt(6657)) - assert.Equal(t, uint64(2), SpanIDAt(13055)) - assert.Equal(t, uint64(3), SpanIDAt(13056)) - assert.Equal(t, uint64(6839), SpanIDAt(43763456)) + assert.Equal(t, SpanId(0), SpanIdAt(0)) + assert.Equal(t, SpanId(0), SpanIdAt(1)) + assert.Equal(t, SpanId(0), SpanIdAt(2)) + assert.Equal(t, SpanId(0), SpanIdAt(zerothSpanEnd)) + assert.Equal(t, SpanId(1), SpanIdAt(zerothSpanEnd+1)) + assert.Equal(t, SpanId(1), SpanIdAt(zerothSpanEnd+2)) + assert.Equal(t, SpanId(1), SpanIdAt(6655)) + assert.Equal(t, SpanId(2), SpanIdAt(6656)) + assert.Equal(t, SpanId(2), SpanIdAt(6657)) + assert.Equal(t, SpanId(2), SpanIdAt(13055)) + assert.Equal(t, SpanId(3), SpanIdAt(13056)) + assert.Equal(t, SpanId(6839), SpanIdAt(43763456)) } func TestSpanEndBlockNum(t *testing.T) { diff --git a/polygon/heimdall/storage.go b/polygon/heimdall/storage.go new file mode 100644 index 00000000000..9d1fd910874 --- /dev/null +++ b/polygon/heimdall/storage.go @@ -0,0 +1,200 @@ +package heimdall + +import ( + "context" + "encoding/binary" + "encoding/json" + "fmt" + + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/turbo/services" +) + +// Generate all mocks in file +//go:generate mockgen -typed=true -destination=./storage_mock.go -package=heimdall -source=./storage.go + +type SpanReader interface { + LastSpanId(ctx context.Context) (SpanId, bool, error) + GetSpan(ctx context.Context, spanId SpanId) (*Span, error) +} + +type SpanWriter interface { + PutSpan(ctx context.Context, span *Span) error +} + +type SpanStore interface { + SpanReader + SpanWriter +} + +type MilestoneReader interface { + LastMilestoneId(ctx context.Context) (MilestoneId, bool, error) + GetMilestone(ctx context.Context, milestoneId MilestoneId) (*Milestone, error) +} + +type MilestoneWriter interface { + PutMilestone(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error +} + +type MilestoneStore interface { + MilestoneReader + MilestoneWriter +} + +type CheckpointReader interface { + LastCheckpointId(ctx context.Context) (CheckpointId, bool, error) + GetCheckpoint(ctx context.Context, checkpointId CheckpointId) (*Checkpoint, error) +} + +type CheckpointWriter interface { + PutCheckpoint(ctx context.Context, checkpointId CheckpointId, checkpoint *Checkpoint) error +} + +type CheckpointStore interface { + CheckpointReader + CheckpointWriter +} + +type Store interface { + SpanStore + MilestoneStore + CheckpointStore +} + +type reader interface { + services.BorEventReader + services.BorSpanReader + services.BorCheckpointReader + services.BorMilestoneReader +} + +type blockReaderStore struct { + reader reader + tx kv.Tx +} + +var _ Store = blockReaderStore{} + +func NewBlockReaderStore(reader reader, tx kv.Tx) blockReaderStore { + return blockReaderStore{reader: reader, tx: tx} +} + +func (io blockReaderStore) LastSpanId(ctx context.Context) (SpanId, bool, error) { + spanId, ok, err := io.reader.LastSpanId(ctx, io.tx) + return SpanId(spanId), ok, err +} + +func (io blockReaderStore) GetSpan(ctx context.Context, spanId SpanId) (*Span, error) { + spanBytes, err := io.reader.Span(ctx, io.tx, uint64(spanId)) + + if err != nil { + return nil, err + } + + var span Span + + if err := json.Unmarshal(spanBytes, &span); err != nil { + return nil, err + } + + return &span, nil +} + +func (io blockReaderStore) PutSpan(ctx context.Context, span *Span) error { + tx, ok := io.tx.(kv.RwTx) + + if !ok { + return fmt.Errorf("span writer failed: tx is read only") + } + + spanBytes, err := json.Marshal(span) + + if err != nil { + return err + } + + var spanIdBytes [8]byte + binary.BigEndian.PutUint64(spanIdBytes[:], uint64(span.Id)) + + return tx.Put(kv.BorSpans, spanIdBytes[:], spanBytes) +} + +func (io blockReaderStore) LastMilestoneId(ctx context.Context) (MilestoneId, bool, error) { + id, ok, err := io.reader.LastMilestoneId(ctx, io.tx) + return MilestoneId(id), ok, err +} + +func (io blockReaderStore) GetMilestone(ctx context.Context, milestoneId MilestoneId) (*Milestone, error) { + milestoneBytes, err := io.reader.Milestone(ctx, io.tx, uint64(milestoneId)) + + if err != nil { + return nil, err + } + + var milestone Milestone + + if err := json.Unmarshal(milestoneBytes, &milestone); err != nil { + return nil, err + } + + return &milestone, nil +} + +func (io blockReaderStore) PutMilestone(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error { + tx, ok := io.tx.(kv.RwTx) + + if !ok { + return fmt.Errorf("span writer failed: tx is read only") + } + + spanBytes, err := json.Marshal(milestone) + + if err != nil { + return err + } + + var spanIdBytes [8]byte + binary.BigEndian.PutUint64(spanIdBytes[:], uint64(milestoneId)) + + return tx.Put(kv.BorMilestones, spanIdBytes[:], spanBytes) +} + +func (io blockReaderStore) LastCheckpointId(ctx context.Context) (CheckpointId, bool, error) { + id, ok, err := io.reader.LastCheckpointId(ctx, io.tx) + return CheckpointId(id), ok, err +} + +func (io blockReaderStore) GetCheckpoint(ctx context.Context, checkpointId CheckpointId) (*Checkpoint, error) { + checkpointBytes, err := io.reader.Milestone(ctx, io.tx, uint64(checkpointId)) + + if err != nil { + return nil, err + } + + var checkpoint Checkpoint + + if err := json.Unmarshal(checkpointBytes, &checkpoint); err != nil { + return nil, err + } + + return &checkpoint, nil +} + +func (io blockReaderStore) PutCheckpoint(ctx context.Context, checkpointId CheckpointId, checkpoint *Checkpoint) error { + tx, ok := io.tx.(kv.RwTx) + + if !ok { + return fmt.Errorf("span writer failed: tx is read only") + } + + bytes, err := json.Marshal(checkpoint) + + if err != nil { + return err + } + + var idBytes [8]byte + binary.BigEndian.PutUint64(idBytes[:], uint64(checkpointId)) + + return tx.Put(kv.BorCheckpoints, idBytes[:], bytes) +} diff --git a/polygon/heimdall/storage_mock.go b/polygon/heimdall/storage_mock.go new file mode 100644 index 00000000000..1bae0ae2b2a --- /dev/null +++ b/polygon/heimdall/storage_mock.go @@ -0,0 +1,1797 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./storage.go +// +// Generated by this command: +// +// mockgen -typed=true -destination=./storage_mock.go -package=heimdall -source=./storage.go +// + +// Package heimdall is a generated GoMock package. +package heimdall + +import ( + context "context" + reflect "reflect" + + common "github.com/ledgerwatch/erigon-lib/common" + kv "github.com/ledgerwatch/erigon-lib/kv" + rlp "github.com/ledgerwatch/erigon/rlp" + gomock "go.uber.org/mock/gomock" +) + +// MockSpanReader is a mock of SpanReader interface. +type MockSpanReader struct { + ctrl *gomock.Controller + recorder *MockSpanReaderMockRecorder +} + +// MockSpanReaderMockRecorder is the mock recorder for MockSpanReader. +type MockSpanReaderMockRecorder struct { + mock *MockSpanReader +} + +// NewMockSpanReader creates a new mock instance. +func NewMockSpanReader(ctrl *gomock.Controller) *MockSpanReader { + mock := &MockSpanReader{ctrl: ctrl} + mock.recorder = &MockSpanReaderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSpanReader) EXPECT() *MockSpanReaderMockRecorder { + return m.recorder +} + +// GetSpan mocks base method. +func (m *MockSpanReader) GetSpan(ctx context.Context, spanId SpanId) (*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSpan", ctx, spanId) + ret0, _ := ret[0].(*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetSpan indicates an expected call of GetSpan. +func (mr *MockSpanReaderMockRecorder) GetSpan(ctx, spanId any) *MockSpanReaderGetSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSpan", reflect.TypeOf((*MockSpanReader)(nil).GetSpan), ctx, spanId) + return &MockSpanReaderGetSpanCall{Call: call} +} + +// MockSpanReaderGetSpanCall wrap *gomock.Call +type MockSpanReaderGetSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpanReaderGetSpanCall) Return(arg0 *Span, arg1 error) *MockSpanReaderGetSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpanReaderGetSpanCall) Do(f func(context.Context, SpanId) (*Span, error)) *MockSpanReaderGetSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpanReaderGetSpanCall) DoAndReturn(f func(context.Context, SpanId) (*Span, error)) *MockSpanReaderGetSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastSpanId mocks base method. +func (m *MockSpanReader) LastSpanId(ctx context.Context) (SpanId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastSpanId", ctx) + ret0, _ := ret[0].(SpanId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastSpanId indicates an expected call of LastSpanId. +func (mr *MockSpanReaderMockRecorder) LastSpanId(ctx any) *MockSpanReaderLastSpanIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastSpanId", reflect.TypeOf((*MockSpanReader)(nil).LastSpanId), ctx) + return &MockSpanReaderLastSpanIdCall{Call: call} +} + +// MockSpanReaderLastSpanIdCall wrap *gomock.Call +type MockSpanReaderLastSpanIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpanReaderLastSpanIdCall) Return(arg0 SpanId, arg1 bool, arg2 error) *MockSpanReaderLastSpanIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpanReaderLastSpanIdCall) Do(f func(context.Context) (SpanId, bool, error)) *MockSpanReaderLastSpanIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpanReaderLastSpanIdCall) DoAndReturn(f func(context.Context) (SpanId, bool, error)) *MockSpanReaderLastSpanIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockSpanWriter is a mock of SpanWriter interface. +type MockSpanWriter struct { + ctrl *gomock.Controller + recorder *MockSpanWriterMockRecorder +} + +// MockSpanWriterMockRecorder is the mock recorder for MockSpanWriter. +type MockSpanWriterMockRecorder struct { + mock *MockSpanWriter +} + +// NewMockSpanWriter creates a new mock instance. +func NewMockSpanWriter(ctrl *gomock.Controller) *MockSpanWriter { + mock := &MockSpanWriter{ctrl: ctrl} + mock.recorder = &MockSpanWriterMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSpanWriter) EXPECT() *MockSpanWriterMockRecorder { + return m.recorder +} + +// PutSpan mocks base method. +func (m *MockSpanWriter) PutSpan(ctx context.Context, span *Span) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutSpan", ctx, span) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutSpan indicates an expected call of PutSpan. +func (mr *MockSpanWriterMockRecorder) PutSpan(ctx, span any) *MockSpanWriterPutSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutSpan", reflect.TypeOf((*MockSpanWriter)(nil).PutSpan), ctx, span) + return &MockSpanWriterPutSpanCall{Call: call} +} + +// MockSpanWriterPutSpanCall wrap *gomock.Call +type MockSpanWriterPutSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpanWriterPutSpanCall) Return(arg0 error) *MockSpanWriterPutSpanCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpanWriterPutSpanCall) Do(f func(context.Context, *Span) error) *MockSpanWriterPutSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpanWriterPutSpanCall) DoAndReturn(f func(context.Context, *Span) error) *MockSpanWriterPutSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockSpanStore is a mock of SpanStore interface. +type MockSpanStore struct { + ctrl *gomock.Controller + recorder *MockSpanStoreMockRecorder +} + +// MockSpanStoreMockRecorder is the mock recorder for MockSpanStore. +type MockSpanStoreMockRecorder struct { + mock *MockSpanStore +} + +// NewMockSpanStore creates a new mock instance. +func NewMockSpanStore(ctrl *gomock.Controller) *MockSpanStore { + mock := &MockSpanStore{ctrl: ctrl} + mock.recorder = &MockSpanStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockSpanStore) EXPECT() *MockSpanStoreMockRecorder { + return m.recorder +} + +// GetSpan mocks base method. +func (m *MockSpanStore) GetSpan(ctx context.Context, spanId SpanId) (*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSpan", ctx, spanId) + ret0, _ := ret[0].(*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetSpan indicates an expected call of GetSpan. +func (mr *MockSpanStoreMockRecorder) GetSpan(ctx, spanId any) *MockSpanStoreGetSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSpan", reflect.TypeOf((*MockSpanStore)(nil).GetSpan), ctx, spanId) + return &MockSpanStoreGetSpanCall{Call: call} +} + +// MockSpanStoreGetSpanCall wrap *gomock.Call +type MockSpanStoreGetSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpanStoreGetSpanCall) Return(arg0 *Span, arg1 error) *MockSpanStoreGetSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpanStoreGetSpanCall) Do(f func(context.Context, SpanId) (*Span, error)) *MockSpanStoreGetSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpanStoreGetSpanCall) DoAndReturn(f func(context.Context, SpanId) (*Span, error)) *MockSpanStoreGetSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastSpanId mocks base method. +func (m *MockSpanStore) LastSpanId(ctx context.Context) (SpanId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastSpanId", ctx) + ret0, _ := ret[0].(SpanId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastSpanId indicates an expected call of LastSpanId. +func (mr *MockSpanStoreMockRecorder) LastSpanId(ctx any) *MockSpanStoreLastSpanIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastSpanId", reflect.TypeOf((*MockSpanStore)(nil).LastSpanId), ctx) + return &MockSpanStoreLastSpanIdCall{Call: call} +} + +// MockSpanStoreLastSpanIdCall wrap *gomock.Call +type MockSpanStoreLastSpanIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpanStoreLastSpanIdCall) Return(arg0 SpanId, arg1 bool, arg2 error) *MockSpanStoreLastSpanIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpanStoreLastSpanIdCall) Do(f func(context.Context) (SpanId, bool, error)) *MockSpanStoreLastSpanIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpanStoreLastSpanIdCall) DoAndReturn(f func(context.Context) (SpanId, bool, error)) *MockSpanStoreLastSpanIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PutSpan mocks base method. +func (m *MockSpanStore) PutSpan(ctx context.Context, span *Span) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutSpan", ctx, span) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutSpan indicates an expected call of PutSpan. +func (mr *MockSpanStoreMockRecorder) PutSpan(ctx, span any) *MockSpanStorePutSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutSpan", reflect.TypeOf((*MockSpanStore)(nil).PutSpan), ctx, span) + return &MockSpanStorePutSpanCall{Call: call} +} + +// MockSpanStorePutSpanCall wrap *gomock.Call +type MockSpanStorePutSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockSpanStorePutSpanCall) Return(arg0 error) *MockSpanStorePutSpanCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockSpanStorePutSpanCall) Do(f func(context.Context, *Span) error) *MockSpanStorePutSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockSpanStorePutSpanCall) DoAndReturn(f func(context.Context, *Span) error) *MockSpanStorePutSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockMilestoneReader is a mock of MilestoneReader interface. +type MockMilestoneReader struct { + ctrl *gomock.Controller + recorder *MockMilestoneReaderMockRecorder +} + +// MockMilestoneReaderMockRecorder is the mock recorder for MockMilestoneReader. +type MockMilestoneReaderMockRecorder struct { + mock *MockMilestoneReader +} + +// NewMockMilestoneReader creates a new mock instance. +func NewMockMilestoneReader(ctrl *gomock.Controller) *MockMilestoneReader { + mock := &MockMilestoneReader{ctrl: ctrl} + mock.recorder = &MockMilestoneReaderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockMilestoneReader) EXPECT() *MockMilestoneReaderMockRecorder { + return m.recorder +} + +// GetMilestone mocks base method. +func (m *MockMilestoneReader) GetMilestone(ctx context.Context, milestoneId MilestoneId) (*Milestone, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMilestone", ctx, milestoneId) + ret0, _ := ret[0].(*Milestone) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMilestone indicates an expected call of GetMilestone. +func (mr *MockMilestoneReaderMockRecorder) GetMilestone(ctx, milestoneId any) *MockMilestoneReaderGetMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMilestone", reflect.TypeOf((*MockMilestoneReader)(nil).GetMilestone), ctx, milestoneId) + return &MockMilestoneReaderGetMilestoneCall{Call: call} +} + +// MockMilestoneReaderGetMilestoneCall wrap *gomock.Call +type MockMilestoneReaderGetMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockMilestoneReaderGetMilestoneCall) Return(arg0 *Milestone, arg1 error) *MockMilestoneReaderGetMilestoneCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockMilestoneReaderGetMilestoneCall) Do(f func(context.Context, MilestoneId) (*Milestone, error)) *MockMilestoneReaderGetMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockMilestoneReaderGetMilestoneCall) DoAndReturn(f func(context.Context, MilestoneId) (*Milestone, error)) *MockMilestoneReaderGetMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastMilestoneId mocks base method. +func (m *MockMilestoneReader) LastMilestoneId(ctx context.Context) (MilestoneId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastMilestoneId", ctx) + ret0, _ := ret[0].(MilestoneId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastMilestoneId indicates an expected call of LastMilestoneId. +func (mr *MockMilestoneReaderMockRecorder) LastMilestoneId(ctx any) *MockMilestoneReaderLastMilestoneIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastMilestoneId", reflect.TypeOf((*MockMilestoneReader)(nil).LastMilestoneId), ctx) + return &MockMilestoneReaderLastMilestoneIdCall{Call: call} +} + +// MockMilestoneReaderLastMilestoneIdCall wrap *gomock.Call +type MockMilestoneReaderLastMilestoneIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockMilestoneReaderLastMilestoneIdCall) Return(arg0 MilestoneId, arg1 bool, arg2 error) *MockMilestoneReaderLastMilestoneIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockMilestoneReaderLastMilestoneIdCall) Do(f func(context.Context) (MilestoneId, bool, error)) *MockMilestoneReaderLastMilestoneIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockMilestoneReaderLastMilestoneIdCall) DoAndReturn(f func(context.Context) (MilestoneId, bool, error)) *MockMilestoneReaderLastMilestoneIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockMilestoneWriter is a mock of MilestoneWriter interface. +type MockMilestoneWriter struct { + ctrl *gomock.Controller + recorder *MockMilestoneWriterMockRecorder +} + +// MockMilestoneWriterMockRecorder is the mock recorder for MockMilestoneWriter. +type MockMilestoneWriterMockRecorder struct { + mock *MockMilestoneWriter +} + +// NewMockMilestoneWriter creates a new mock instance. +func NewMockMilestoneWriter(ctrl *gomock.Controller) *MockMilestoneWriter { + mock := &MockMilestoneWriter{ctrl: ctrl} + mock.recorder = &MockMilestoneWriterMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockMilestoneWriter) EXPECT() *MockMilestoneWriterMockRecorder { + return m.recorder +} + +// PutMilestone mocks base method. +func (m *MockMilestoneWriter) PutMilestone(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutMilestone", ctx, milestoneId, milestone) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutMilestone indicates an expected call of PutMilestone. +func (mr *MockMilestoneWriterMockRecorder) PutMilestone(ctx, milestoneId, milestone any) *MockMilestoneWriterPutMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutMilestone", reflect.TypeOf((*MockMilestoneWriter)(nil).PutMilestone), ctx, milestoneId, milestone) + return &MockMilestoneWriterPutMilestoneCall{Call: call} +} + +// MockMilestoneWriterPutMilestoneCall wrap *gomock.Call +type MockMilestoneWriterPutMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockMilestoneWriterPutMilestoneCall) Return(arg0 error) *MockMilestoneWriterPutMilestoneCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockMilestoneWriterPutMilestoneCall) Do(f func(context.Context, MilestoneId, *Milestone) error) *MockMilestoneWriterPutMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockMilestoneWriterPutMilestoneCall) DoAndReturn(f func(context.Context, MilestoneId, *Milestone) error) *MockMilestoneWriterPutMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockMilestoneStore is a mock of MilestoneStore interface. +type MockMilestoneStore struct { + ctrl *gomock.Controller + recorder *MockMilestoneStoreMockRecorder +} + +// MockMilestoneStoreMockRecorder is the mock recorder for MockMilestoneStore. +type MockMilestoneStoreMockRecorder struct { + mock *MockMilestoneStore +} + +// NewMockMilestoneStore creates a new mock instance. +func NewMockMilestoneStore(ctrl *gomock.Controller) *MockMilestoneStore { + mock := &MockMilestoneStore{ctrl: ctrl} + mock.recorder = &MockMilestoneStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockMilestoneStore) EXPECT() *MockMilestoneStoreMockRecorder { + return m.recorder +} + +// GetMilestone mocks base method. +func (m *MockMilestoneStore) GetMilestone(ctx context.Context, milestoneId MilestoneId) (*Milestone, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMilestone", ctx, milestoneId) + ret0, _ := ret[0].(*Milestone) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMilestone indicates an expected call of GetMilestone. +func (mr *MockMilestoneStoreMockRecorder) GetMilestone(ctx, milestoneId any) *MockMilestoneStoreGetMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMilestone", reflect.TypeOf((*MockMilestoneStore)(nil).GetMilestone), ctx, milestoneId) + return &MockMilestoneStoreGetMilestoneCall{Call: call} +} + +// MockMilestoneStoreGetMilestoneCall wrap *gomock.Call +type MockMilestoneStoreGetMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockMilestoneStoreGetMilestoneCall) Return(arg0 *Milestone, arg1 error) *MockMilestoneStoreGetMilestoneCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockMilestoneStoreGetMilestoneCall) Do(f func(context.Context, MilestoneId) (*Milestone, error)) *MockMilestoneStoreGetMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockMilestoneStoreGetMilestoneCall) DoAndReturn(f func(context.Context, MilestoneId) (*Milestone, error)) *MockMilestoneStoreGetMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastMilestoneId mocks base method. +func (m *MockMilestoneStore) LastMilestoneId(ctx context.Context) (MilestoneId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastMilestoneId", ctx) + ret0, _ := ret[0].(MilestoneId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastMilestoneId indicates an expected call of LastMilestoneId. +func (mr *MockMilestoneStoreMockRecorder) LastMilestoneId(ctx any) *MockMilestoneStoreLastMilestoneIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastMilestoneId", reflect.TypeOf((*MockMilestoneStore)(nil).LastMilestoneId), ctx) + return &MockMilestoneStoreLastMilestoneIdCall{Call: call} +} + +// MockMilestoneStoreLastMilestoneIdCall wrap *gomock.Call +type MockMilestoneStoreLastMilestoneIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockMilestoneStoreLastMilestoneIdCall) Return(arg0 MilestoneId, arg1 bool, arg2 error) *MockMilestoneStoreLastMilestoneIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockMilestoneStoreLastMilestoneIdCall) Do(f func(context.Context) (MilestoneId, bool, error)) *MockMilestoneStoreLastMilestoneIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockMilestoneStoreLastMilestoneIdCall) DoAndReturn(f func(context.Context) (MilestoneId, bool, error)) *MockMilestoneStoreLastMilestoneIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PutMilestone mocks base method. +func (m *MockMilestoneStore) PutMilestone(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutMilestone", ctx, milestoneId, milestone) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutMilestone indicates an expected call of PutMilestone. +func (mr *MockMilestoneStoreMockRecorder) PutMilestone(ctx, milestoneId, milestone any) *MockMilestoneStorePutMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutMilestone", reflect.TypeOf((*MockMilestoneStore)(nil).PutMilestone), ctx, milestoneId, milestone) + return &MockMilestoneStorePutMilestoneCall{Call: call} +} + +// MockMilestoneStorePutMilestoneCall wrap *gomock.Call +type MockMilestoneStorePutMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockMilestoneStorePutMilestoneCall) Return(arg0 error) *MockMilestoneStorePutMilestoneCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockMilestoneStorePutMilestoneCall) Do(f func(context.Context, MilestoneId, *Milestone) error) *MockMilestoneStorePutMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockMilestoneStorePutMilestoneCall) DoAndReturn(f func(context.Context, MilestoneId, *Milestone) error) *MockMilestoneStorePutMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockCheckpointReader is a mock of CheckpointReader interface. +type MockCheckpointReader struct { + ctrl *gomock.Controller + recorder *MockCheckpointReaderMockRecorder +} + +// MockCheckpointReaderMockRecorder is the mock recorder for MockCheckpointReader. +type MockCheckpointReaderMockRecorder struct { + mock *MockCheckpointReader +} + +// NewMockCheckpointReader creates a new mock instance. +func NewMockCheckpointReader(ctrl *gomock.Controller) *MockCheckpointReader { + mock := &MockCheckpointReader{ctrl: ctrl} + mock.recorder = &MockCheckpointReaderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockCheckpointReader) EXPECT() *MockCheckpointReaderMockRecorder { + return m.recorder +} + +// GetCheckpoint mocks base method. +func (m *MockCheckpointReader) GetCheckpoint(ctx context.Context, checkpointId CheckpointId) (*Checkpoint, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCheckpoint", ctx, checkpointId) + ret0, _ := ret[0].(*Checkpoint) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCheckpoint indicates an expected call of GetCheckpoint. +func (mr *MockCheckpointReaderMockRecorder) GetCheckpoint(ctx, checkpointId any) *MockCheckpointReaderGetCheckpointCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCheckpoint", reflect.TypeOf((*MockCheckpointReader)(nil).GetCheckpoint), ctx, checkpointId) + return &MockCheckpointReaderGetCheckpointCall{Call: call} +} + +// MockCheckpointReaderGetCheckpointCall wrap *gomock.Call +type MockCheckpointReaderGetCheckpointCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCheckpointReaderGetCheckpointCall) Return(arg0 *Checkpoint, arg1 error) *MockCheckpointReaderGetCheckpointCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCheckpointReaderGetCheckpointCall) Do(f func(context.Context, CheckpointId) (*Checkpoint, error)) *MockCheckpointReaderGetCheckpointCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCheckpointReaderGetCheckpointCall) DoAndReturn(f func(context.Context, CheckpointId) (*Checkpoint, error)) *MockCheckpointReaderGetCheckpointCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastCheckpointId mocks base method. +func (m *MockCheckpointReader) LastCheckpointId(ctx context.Context) (CheckpointId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastCheckpointId", ctx) + ret0, _ := ret[0].(CheckpointId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastCheckpointId indicates an expected call of LastCheckpointId. +func (mr *MockCheckpointReaderMockRecorder) LastCheckpointId(ctx any) *MockCheckpointReaderLastCheckpointIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastCheckpointId", reflect.TypeOf((*MockCheckpointReader)(nil).LastCheckpointId), ctx) + return &MockCheckpointReaderLastCheckpointIdCall{Call: call} +} + +// MockCheckpointReaderLastCheckpointIdCall wrap *gomock.Call +type MockCheckpointReaderLastCheckpointIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCheckpointReaderLastCheckpointIdCall) Return(arg0 CheckpointId, arg1 bool, arg2 error) *MockCheckpointReaderLastCheckpointIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCheckpointReaderLastCheckpointIdCall) Do(f func(context.Context) (CheckpointId, bool, error)) *MockCheckpointReaderLastCheckpointIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCheckpointReaderLastCheckpointIdCall) DoAndReturn(f func(context.Context) (CheckpointId, bool, error)) *MockCheckpointReaderLastCheckpointIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockCheckpointWriter is a mock of CheckpointWriter interface. +type MockCheckpointWriter struct { + ctrl *gomock.Controller + recorder *MockCheckpointWriterMockRecorder +} + +// MockCheckpointWriterMockRecorder is the mock recorder for MockCheckpointWriter. +type MockCheckpointWriterMockRecorder struct { + mock *MockCheckpointWriter +} + +// NewMockCheckpointWriter creates a new mock instance. +func NewMockCheckpointWriter(ctrl *gomock.Controller) *MockCheckpointWriter { + mock := &MockCheckpointWriter{ctrl: ctrl} + mock.recorder = &MockCheckpointWriterMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockCheckpointWriter) EXPECT() *MockCheckpointWriterMockRecorder { + return m.recorder +} + +// PutCheckpoint mocks base method. +func (m *MockCheckpointWriter) PutCheckpoint(ctx context.Context, checkpointId CheckpointId, checkpoint *Checkpoint) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutCheckpoint", ctx, checkpointId, checkpoint) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutCheckpoint indicates an expected call of PutCheckpoint. +func (mr *MockCheckpointWriterMockRecorder) PutCheckpoint(ctx, checkpointId, checkpoint any) *MockCheckpointWriterPutCheckpointCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutCheckpoint", reflect.TypeOf((*MockCheckpointWriter)(nil).PutCheckpoint), ctx, checkpointId, checkpoint) + return &MockCheckpointWriterPutCheckpointCall{Call: call} +} + +// MockCheckpointWriterPutCheckpointCall wrap *gomock.Call +type MockCheckpointWriterPutCheckpointCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCheckpointWriterPutCheckpointCall) Return(arg0 error) *MockCheckpointWriterPutCheckpointCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCheckpointWriterPutCheckpointCall) Do(f func(context.Context, CheckpointId, *Checkpoint) error) *MockCheckpointWriterPutCheckpointCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCheckpointWriterPutCheckpointCall) DoAndReturn(f func(context.Context, CheckpointId, *Checkpoint) error) *MockCheckpointWriterPutCheckpointCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockCheckpointStore is a mock of CheckpointStore interface. +type MockCheckpointStore struct { + ctrl *gomock.Controller + recorder *MockCheckpointStoreMockRecorder +} + +// MockCheckpointStoreMockRecorder is the mock recorder for MockCheckpointStore. +type MockCheckpointStoreMockRecorder struct { + mock *MockCheckpointStore +} + +// NewMockCheckpointStore creates a new mock instance. +func NewMockCheckpointStore(ctrl *gomock.Controller) *MockCheckpointStore { + mock := &MockCheckpointStore{ctrl: ctrl} + mock.recorder = &MockCheckpointStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockCheckpointStore) EXPECT() *MockCheckpointStoreMockRecorder { + return m.recorder +} + +// GetCheckpoint mocks base method. +func (m *MockCheckpointStore) GetCheckpoint(ctx context.Context, checkpointId CheckpointId) (*Checkpoint, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCheckpoint", ctx, checkpointId) + ret0, _ := ret[0].(*Checkpoint) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCheckpoint indicates an expected call of GetCheckpoint. +func (mr *MockCheckpointStoreMockRecorder) GetCheckpoint(ctx, checkpointId any) *MockCheckpointStoreGetCheckpointCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCheckpoint", reflect.TypeOf((*MockCheckpointStore)(nil).GetCheckpoint), ctx, checkpointId) + return &MockCheckpointStoreGetCheckpointCall{Call: call} +} + +// MockCheckpointStoreGetCheckpointCall wrap *gomock.Call +type MockCheckpointStoreGetCheckpointCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCheckpointStoreGetCheckpointCall) Return(arg0 *Checkpoint, arg1 error) *MockCheckpointStoreGetCheckpointCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCheckpointStoreGetCheckpointCall) Do(f func(context.Context, CheckpointId) (*Checkpoint, error)) *MockCheckpointStoreGetCheckpointCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCheckpointStoreGetCheckpointCall) DoAndReturn(f func(context.Context, CheckpointId) (*Checkpoint, error)) *MockCheckpointStoreGetCheckpointCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastCheckpointId mocks base method. +func (m *MockCheckpointStore) LastCheckpointId(ctx context.Context) (CheckpointId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastCheckpointId", ctx) + ret0, _ := ret[0].(CheckpointId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastCheckpointId indicates an expected call of LastCheckpointId. +func (mr *MockCheckpointStoreMockRecorder) LastCheckpointId(ctx any) *MockCheckpointStoreLastCheckpointIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastCheckpointId", reflect.TypeOf((*MockCheckpointStore)(nil).LastCheckpointId), ctx) + return &MockCheckpointStoreLastCheckpointIdCall{Call: call} +} + +// MockCheckpointStoreLastCheckpointIdCall wrap *gomock.Call +type MockCheckpointStoreLastCheckpointIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCheckpointStoreLastCheckpointIdCall) Return(arg0 CheckpointId, arg1 bool, arg2 error) *MockCheckpointStoreLastCheckpointIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCheckpointStoreLastCheckpointIdCall) Do(f func(context.Context) (CheckpointId, bool, error)) *MockCheckpointStoreLastCheckpointIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCheckpointStoreLastCheckpointIdCall) DoAndReturn(f func(context.Context) (CheckpointId, bool, error)) *MockCheckpointStoreLastCheckpointIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PutCheckpoint mocks base method. +func (m *MockCheckpointStore) PutCheckpoint(ctx context.Context, checkpointId CheckpointId, checkpoint *Checkpoint) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutCheckpoint", ctx, checkpointId, checkpoint) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutCheckpoint indicates an expected call of PutCheckpoint. +func (mr *MockCheckpointStoreMockRecorder) PutCheckpoint(ctx, checkpointId, checkpoint any) *MockCheckpointStorePutCheckpointCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutCheckpoint", reflect.TypeOf((*MockCheckpointStore)(nil).PutCheckpoint), ctx, checkpointId, checkpoint) + return &MockCheckpointStorePutCheckpointCall{Call: call} +} + +// MockCheckpointStorePutCheckpointCall wrap *gomock.Call +type MockCheckpointStorePutCheckpointCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCheckpointStorePutCheckpointCall) Return(arg0 error) *MockCheckpointStorePutCheckpointCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCheckpointStorePutCheckpointCall) Do(f func(context.Context, CheckpointId, *Checkpoint) error) *MockCheckpointStorePutCheckpointCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCheckpointStorePutCheckpointCall) DoAndReturn(f func(context.Context, CheckpointId, *Checkpoint) error) *MockCheckpointStorePutCheckpointCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MockStore is a mock of Store interface. +type MockStore struct { + ctrl *gomock.Controller + recorder *MockStoreMockRecorder +} + +// MockStoreMockRecorder is the mock recorder for MockStore. +type MockStoreMockRecorder struct { + mock *MockStore +} + +// NewMockStore creates a new mock instance. +func NewMockStore(ctrl *gomock.Controller) *MockStore { + mock := &MockStore{ctrl: ctrl} + mock.recorder = &MockStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockStore) EXPECT() *MockStoreMockRecorder { + return m.recorder +} + +// GetCheckpoint mocks base method. +func (m *MockStore) GetCheckpoint(ctx context.Context, checkpointId CheckpointId) (*Checkpoint, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCheckpoint", ctx, checkpointId) + ret0, _ := ret[0].(*Checkpoint) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCheckpoint indicates an expected call of GetCheckpoint. +func (mr *MockStoreMockRecorder) GetCheckpoint(ctx, checkpointId any) *MockStoreGetCheckpointCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCheckpoint", reflect.TypeOf((*MockStore)(nil).GetCheckpoint), ctx, checkpointId) + return &MockStoreGetCheckpointCall{Call: call} +} + +// MockStoreGetCheckpointCall wrap *gomock.Call +type MockStoreGetCheckpointCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStoreGetCheckpointCall) Return(arg0 *Checkpoint, arg1 error) *MockStoreGetCheckpointCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStoreGetCheckpointCall) Do(f func(context.Context, CheckpointId) (*Checkpoint, error)) *MockStoreGetCheckpointCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStoreGetCheckpointCall) DoAndReturn(f func(context.Context, CheckpointId) (*Checkpoint, error)) *MockStoreGetCheckpointCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetMilestone mocks base method. +func (m *MockStore) GetMilestone(ctx context.Context, milestoneId MilestoneId) (*Milestone, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMilestone", ctx, milestoneId) + ret0, _ := ret[0].(*Milestone) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMilestone indicates an expected call of GetMilestone. +func (mr *MockStoreMockRecorder) GetMilestone(ctx, milestoneId any) *MockStoreGetMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMilestone", reflect.TypeOf((*MockStore)(nil).GetMilestone), ctx, milestoneId) + return &MockStoreGetMilestoneCall{Call: call} +} + +// MockStoreGetMilestoneCall wrap *gomock.Call +type MockStoreGetMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStoreGetMilestoneCall) Return(arg0 *Milestone, arg1 error) *MockStoreGetMilestoneCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStoreGetMilestoneCall) Do(f func(context.Context, MilestoneId) (*Milestone, error)) *MockStoreGetMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStoreGetMilestoneCall) DoAndReturn(f func(context.Context, MilestoneId) (*Milestone, error)) *MockStoreGetMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// GetSpan mocks base method. +func (m *MockStore) GetSpan(ctx context.Context, spanId SpanId) (*Span, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSpan", ctx, spanId) + ret0, _ := ret[0].(*Span) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetSpan indicates an expected call of GetSpan. +func (mr *MockStoreMockRecorder) GetSpan(ctx, spanId any) *MockStoreGetSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSpan", reflect.TypeOf((*MockStore)(nil).GetSpan), ctx, spanId) + return &MockStoreGetSpanCall{Call: call} +} + +// MockStoreGetSpanCall wrap *gomock.Call +type MockStoreGetSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStoreGetSpanCall) Return(arg0 *Span, arg1 error) *MockStoreGetSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStoreGetSpanCall) Do(f func(context.Context, SpanId) (*Span, error)) *MockStoreGetSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStoreGetSpanCall) DoAndReturn(f func(context.Context, SpanId) (*Span, error)) *MockStoreGetSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastCheckpointId mocks base method. +func (m *MockStore) LastCheckpointId(ctx context.Context) (CheckpointId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastCheckpointId", ctx) + ret0, _ := ret[0].(CheckpointId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastCheckpointId indicates an expected call of LastCheckpointId. +func (mr *MockStoreMockRecorder) LastCheckpointId(ctx any) *MockStoreLastCheckpointIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastCheckpointId", reflect.TypeOf((*MockStore)(nil).LastCheckpointId), ctx) + return &MockStoreLastCheckpointIdCall{Call: call} +} + +// MockStoreLastCheckpointIdCall wrap *gomock.Call +type MockStoreLastCheckpointIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStoreLastCheckpointIdCall) Return(arg0 CheckpointId, arg1 bool, arg2 error) *MockStoreLastCheckpointIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStoreLastCheckpointIdCall) Do(f func(context.Context) (CheckpointId, bool, error)) *MockStoreLastCheckpointIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStoreLastCheckpointIdCall) DoAndReturn(f func(context.Context) (CheckpointId, bool, error)) *MockStoreLastCheckpointIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastMilestoneId mocks base method. +func (m *MockStore) LastMilestoneId(ctx context.Context) (MilestoneId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastMilestoneId", ctx) + ret0, _ := ret[0].(MilestoneId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastMilestoneId indicates an expected call of LastMilestoneId. +func (mr *MockStoreMockRecorder) LastMilestoneId(ctx any) *MockStoreLastMilestoneIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastMilestoneId", reflect.TypeOf((*MockStore)(nil).LastMilestoneId), ctx) + return &MockStoreLastMilestoneIdCall{Call: call} +} + +// MockStoreLastMilestoneIdCall wrap *gomock.Call +type MockStoreLastMilestoneIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStoreLastMilestoneIdCall) Return(arg0 MilestoneId, arg1 bool, arg2 error) *MockStoreLastMilestoneIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStoreLastMilestoneIdCall) Do(f func(context.Context) (MilestoneId, bool, error)) *MockStoreLastMilestoneIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStoreLastMilestoneIdCall) DoAndReturn(f func(context.Context) (MilestoneId, bool, error)) *MockStoreLastMilestoneIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastSpanId mocks base method. +func (m *MockStore) LastSpanId(ctx context.Context) (SpanId, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastSpanId", ctx) + ret0, _ := ret[0].(SpanId) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastSpanId indicates an expected call of LastSpanId. +func (mr *MockStoreMockRecorder) LastSpanId(ctx any) *MockStoreLastSpanIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastSpanId", reflect.TypeOf((*MockStore)(nil).LastSpanId), ctx) + return &MockStoreLastSpanIdCall{Call: call} +} + +// MockStoreLastSpanIdCall wrap *gomock.Call +type MockStoreLastSpanIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStoreLastSpanIdCall) Return(arg0 SpanId, arg1 bool, arg2 error) *MockStoreLastSpanIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStoreLastSpanIdCall) Do(f func(context.Context) (SpanId, bool, error)) *MockStoreLastSpanIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStoreLastSpanIdCall) DoAndReturn(f func(context.Context) (SpanId, bool, error)) *MockStoreLastSpanIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PutCheckpoint mocks base method. +func (m *MockStore) PutCheckpoint(ctx context.Context, checkpointId CheckpointId, checkpoint *Checkpoint) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutCheckpoint", ctx, checkpointId, checkpoint) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutCheckpoint indicates an expected call of PutCheckpoint. +func (mr *MockStoreMockRecorder) PutCheckpoint(ctx, checkpointId, checkpoint any) *MockStorePutCheckpointCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutCheckpoint", reflect.TypeOf((*MockStore)(nil).PutCheckpoint), ctx, checkpointId, checkpoint) + return &MockStorePutCheckpointCall{Call: call} +} + +// MockStorePutCheckpointCall wrap *gomock.Call +type MockStorePutCheckpointCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStorePutCheckpointCall) Return(arg0 error) *MockStorePutCheckpointCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStorePutCheckpointCall) Do(f func(context.Context, CheckpointId, *Checkpoint) error) *MockStorePutCheckpointCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStorePutCheckpointCall) DoAndReturn(f func(context.Context, CheckpointId, *Checkpoint) error) *MockStorePutCheckpointCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PutMilestone mocks base method. +func (m *MockStore) PutMilestone(ctx context.Context, milestoneId MilestoneId, milestone *Milestone) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutMilestone", ctx, milestoneId, milestone) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutMilestone indicates an expected call of PutMilestone. +func (mr *MockStoreMockRecorder) PutMilestone(ctx, milestoneId, milestone any) *MockStorePutMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutMilestone", reflect.TypeOf((*MockStore)(nil).PutMilestone), ctx, milestoneId, milestone) + return &MockStorePutMilestoneCall{Call: call} +} + +// MockStorePutMilestoneCall wrap *gomock.Call +type MockStorePutMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStorePutMilestoneCall) Return(arg0 error) *MockStorePutMilestoneCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStorePutMilestoneCall) Do(f func(context.Context, MilestoneId, *Milestone) error) *MockStorePutMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStorePutMilestoneCall) DoAndReturn(f func(context.Context, MilestoneId, *Milestone) error) *MockStorePutMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PutSpan mocks base method. +func (m *MockStore) PutSpan(ctx context.Context, span *Span) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutSpan", ctx, span) + ret0, _ := ret[0].(error) + return ret0 +} + +// PutSpan indicates an expected call of PutSpan. +func (mr *MockStoreMockRecorder) PutSpan(ctx, span any) *MockStorePutSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutSpan", reflect.TypeOf((*MockStore)(nil).PutSpan), ctx, span) + return &MockStorePutSpanCall{Call: call} +} + +// MockStorePutSpanCall wrap *gomock.Call +type MockStorePutSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStorePutSpanCall) Return(arg0 error) *MockStorePutSpanCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStorePutSpanCall) Do(f func(context.Context, *Span) error) *MockStorePutSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStorePutSpanCall) DoAndReturn(f func(context.Context, *Span) error) *MockStorePutSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Mockreader is a mock of reader interface. +type Mockreader struct { + ctrl *gomock.Controller + recorder *MockreaderMockRecorder +} + +// MockreaderMockRecorder is the mock recorder for Mockreader. +type MockreaderMockRecorder struct { + mock *Mockreader +} + +// NewMockreader creates a new mock instance. +func NewMockreader(ctrl *gomock.Controller) *Mockreader { + mock := &Mockreader{ctrl: ctrl} + mock.recorder = &MockreaderMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *Mockreader) EXPECT() *MockreaderMockRecorder { + return m.recorder +} + +// BorStartEventID mocks base method. +func (m *Mockreader) BorStartEventID(ctx context.Context, tx kv.Tx, hash common.Hash, blockNum uint64) (uint64, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BorStartEventID", ctx, tx, hash, blockNum) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BorStartEventID indicates an expected call of BorStartEventID. +func (mr *MockreaderMockRecorder) BorStartEventID(ctx, tx, hash, blockNum any) *MockreaderBorStartEventIDCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BorStartEventID", reflect.TypeOf((*Mockreader)(nil).BorStartEventID), ctx, tx, hash, blockNum) + return &MockreaderBorStartEventIDCall{Call: call} +} + +// MockreaderBorStartEventIDCall wrap *gomock.Call +type MockreaderBorStartEventIDCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderBorStartEventIDCall) Return(arg0 uint64, arg1 error) *MockreaderBorStartEventIDCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderBorStartEventIDCall) Do(f func(context.Context, kv.Tx, common.Hash, uint64) (uint64, error)) *MockreaderBorStartEventIDCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderBorStartEventIDCall) DoAndReturn(f func(context.Context, kv.Tx, common.Hash, uint64) (uint64, error)) *MockreaderBorStartEventIDCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Checkpoint mocks base method. +func (m *Mockreader) Checkpoint(ctx context.Context, tx kv.Getter, checkpointId uint64) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Checkpoint", ctx, tx, checkpointId) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Checkpoint indicates an expected call of Checkpoint. +func (mr *MockreaderMockRecorder) Checkpoint(ctx, tx, checkpointId any) *MockreaderCheckpointCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Checkpoint", reflect.TypeOf((*Mockreader)(nil).Checkpoint), ctx, tx, checkpointId) + return &MockreaderCheckpointCall{Call: call} +} + +// MockreaderCheckpointCall wrap *gomock.Call +type MockreaderCheckpointCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderCheckpointCall) Return(arg0 []byte, arg1 error) *MockreaderCheckpointCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderCheckpointCall) Do(f func(context.Context, kv.Getter, uint64) ([]byte, error)) *MockreaderCheckpointCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderCheckpointCall) DoAndReturn(f func(context.Context, kv.Getter, uint64) ([]byte, error)) *MockreaderCheckpointCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// EventLookup mocks base method. +func (m *Mockreader) EventLookup(ctx context.Context, tx kv.Getter, txnHash common.Hash) (uint64, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "EventLookup", ctx, tx, txnHash) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// EventLookup indicates an expected call of EventLookup. +func (mr *MockreaderMockRecorder) EventLookup(ctx, tx, txnHash any) *MockreaderEventLookupCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EventLookup", reflect.TypeOf((*Mockreader)(nil).EventLookup), ctx, tx, txnHash) + return &MockreaderEventLookupCall{Call: call} +} + +// MockreaderEventLookupCall wrap *gomock.Call +type MockreaderEventLookupCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderEventLookupCall) Return(arg0 uint64, arg1 bool, arg2 error) *MockreaderEventLookupCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderEventLookupCall) Do(f func(context.Context, kv.Getter, common.Hash) (uint64, bool, error)) *MockreaderEventLookupCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderEventLookupCall) DoAndReturn(f func(context.Context, kv.Getter, common.Hash) (uint64, bool, error)) *MockreaderEventLookupCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// EventsByBlock mocks base method. +func (m *Mockreader) EventsByBlock(ctx context.Context, tx kv.Tx, hash common.Hash, blockNum uint64) ([]rlp.RawValue, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "EventsByBlock", ctx, tx, hash, blockNum) + ret0, _ := ret[0].([]rlp.RawValue) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// EventsByBlock indicates an expected call of EventsByBlock. +func (mr *MockreaderMockRecorder) EventsByBlock(ctx, tx, hash, blockNum any) *MockreaderEventsByBlockCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EventsByBlock", reflect.TypeOf((*Mockreader)(nil).EventsByBlock), ctx, tx, hash, blockNum) + return &MockreaderEventsByBlockCall{Call: call} +} + +// MockreaderEventsByBlockCall wrap *gomock.Call +type MockreaderEventsByBlockCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderEventsByBlockCall) Return(arg0 []rlp.RawValue, arg1 error) *MockreaderEventsByBlockCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderEventsByBlockCall) Do(f func(context.Context, kv.Tx, common.Hash, uint64) ([]rlp.RawValue, error)) *MockreaderEventsByBlockCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderEventsByBlockCall) DoAndReturn(f func(context.Context, kv.Tx, common.Hash, uint64) ([]rlp.RawValue, error)) *MockreaderEventsByBlockCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastCheckpointId mocks base method. +func (m *Mockreader) LastCheckpointId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastCheckpointId", ctx, tx) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastCheckpointId indicates an expected call of LastCheckpointId. +func (mr *MockreaderMockRecorder) LastCheckpointId(ctx, tx any) *MockreaderLastCheckpointIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastCheckpointId", reflect.TypeOf((*Mockreader)(nil).LastCheckpointId), ctx, tx) + return &MockreaderLastCheckpointIdCall{Call: call} +} + +// MockreaderLastCheckpointIdCall wrap *gomock.Call +type MockreaderLastCheckpointIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderLastCheckpointIdCall) Return(arg0 uint64, arg1 bool, arg2 error) *MockreaderLastCheckpointIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderLastCheckpointIdCall) Do(f func(context.Context, kv.Tx) (uint64, bool, error)) *MockreaderLastCheckpointIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderLastCheckpointIdCall) DoAndReturn(f func(context.Context, kv.Tx) (uint64, bool, error)) *MockreaderLastCheckpointIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastEventId mocks base method. +func (m *Mockreader) LastEventId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastEventId", ctx, tx) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastEventId indicates an expected call of LastEventId. +func (mr *MockreaderMockRecorder) LastEventId(ctx, tx any) *MockreaderLastEventIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastEventId", reflect.TypeOf((*Mockreader)(nil).LastEventId), ctx, tx) + return &MockreaderLastEventIdCall{Call: call} +} + +// MockreaderLastEventIdCall wrap *gomock.Call +type MockreaderLastEventIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderLastEventIdCall) Return(arg0 uint64, arg1 bool, arg2 error) *MockreaderLastEventIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderLastEventIdCall) Do(f func(context.Context, kv.Tx) (uint64, bool, error)) *MockreaderLastEventIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderLastEventIdCall) DoAndReturn(f func(context.Context, kv.Tx) (uint64, bool, error)) *MockreaderLastEventIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastFrozenEventId mocks base method. +func (m *Mockreader) LastFrozenEventId() uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastFrozenEventId") + ret0, _ := ret[0].(uint64) + return ret0 +} + +// LastFrozenEventId indicates an expected call of LastFrozenEventId. +func (mr *MockreaderMockRecorder) LastFrozenEventId() *MockreaderLastFrozenEventIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastFrozenEventId", reflect.TypeOf((*Mockreader)(nil).LastFrozenEventId)) + return &MockreaderLastFrozenEventIdCall{Call: call} +} + +// MockreaderLastFrozenEventIdCall wrap *gomock.Call +type MockreaderLastFrozenEventIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderLastFrozenEventIdCall) Return(arg0 uint64) *MockreaderLastFrozenEventIdCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderLastFrozenEventIdCall) Do(f func() uint64) *MockreaderLastFrozenEventIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderLastFrozenEventIdCall) DoAndReturn(f func() uint64) *MockreaderLastFrozenEventIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastFrozenSpanId mocks base method. +func (m *Mockreader) LastFrozenSpanId() uint64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastFrozenSpanId") + ret0, _ := ret[0].(uint64) + return ret0 +} + +// LastFrozenSpanId indicates an expected call of LastFrozenSpanId. +func (mr *MockreaderMockRecorder) LastFrozenSpanId() *MockreaderLastFrozenSpanIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastFrozenSpanId", reflect.TypeOf((*Mockreader)(nil).LastFrozenSpanId)) + return &MockreaderLastFrozenSpanIdCall{Call: call} +} + +// MockreaderLastFrozenSpanIdCall wrap *gomock.Call +type MockreaderLastFrozenSpanIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderLastFrozenSpanIdCall) Return(arg0 uint64) *MockreaderLastFrozenSpanIdCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderLastFrozenSpanIdCall) Do(f func() uint64) *MockreaderLastFrozenSpanIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderLastFrozenSpanIdCall) DoAndReturn(f func() uint64) *MockreaderLastFrozenSpanIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastMilestoneId mocks base method. +func (m *Mockreader) LastMilestoneId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastMilestoneId", ctx, tx) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastMilestoneId indicates an expected call of LastMilestoneId. +func (mr *MockreaderMockRecorder) LastMilestoneId(ctx, tx any) *MockreaderLastMilestoneIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastMilestoneId", reflect.TypeOf((*Mockreader)(nil).LastMilestoneId), ctx, tx) + return &MockreaderLastMilestoneIdCall{Call: call} +} + +// MockreaderLastMilestoneIdCall wrap *gomock.Call +type MockreaderLastMilestoneIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderLastMilestoneIdCall) Return(arg0 uint64, arg1 bool, arg2 error) *MockreaderLastMilestoneIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderLastMilestoneIdCall) Do(f func(context.Context, kv.Tx) (uint64, bool, error)) *MockreaderLastMilestoneIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderLastMilestoneIdCall) DoAndReturn(f func(context.Context, kv.Tx) (uint64, bool, error)) *MockreaderLastMilestoneIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// LastSpanId mocks base method. +func (m *Mockreader) LastSpanId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LastSpanId", ctx, tx) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(bool) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// LastSpanId indicates an expected call of LastSpanId. +func (mr *MockreaderMockRecorder) LastSpanId(ctx, tx any) *MockreaderLastSpanIdCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LastSpanId", reflect.TypeOf((*Mockreader)(nil).LastSpanId), ctx, tx) + return &MockreaderLastSpanIdCall{Call: call} +} + +// MockreaderLastSpanIdCall wrap *gomock.Call +type MockreaderLastSpanIdCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderLastSpanIdCall) Return(arg0 uint64, arg1 bool, arg2 error) *MockreaderLastSpanIdCall { + c.Call = c.Call.Return(arg0, arg1, arg2) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderLastSpanIdCall) Do(f func(context.Context, kv.Tx) (uint64, bool, error)) *MockreaderLastSpanIdCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderLastSpanIdCall) DoAndReturn(f func(context.Context, kv.Tx) (uint64, bool, error)) *MockreaderLastSpanIdCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Milestone mocks base method. +func (m *Mockreader) Milestone(ctx context.Context, tx kv.Getter, milestoneId uint64) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Milestone", ctx, tx, milestoneId) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Milestone indicates an expected call of Milestone. +func (mr *MockreaderMockRecorder) Milestone(ctx, tx, milestoneId any) *MockreaderMilestoneCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Milestone", reflect.TypeOf((*Mockreader)(nil).Milestone), ctx, tx, milestoneId) + return &MockreaderMilestoneCall{Call: call} +} + +// MockreaderMilestoneCall wrap *gomock.Call +type MockreaderMilestoneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderMilestoneCall) Return(arg0 []byte, arg1 error) *MockreaderMilestoneCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderMilestoneCall) Do(f func(context.Context, kv.Getter, uint64) ([]byte, error)) *MockreaderMilestoneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderMilestoneCall) DoAndReturn(f func(context.Context, kv.Getter, uint64) ([]byte, error)) *MockreaderMilestoneCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Span mocks base method. +func (m *Mockreader) Span(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Span", ctx, tx, spanId) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Span indicates an expected call of Span. +func (mr *MockreaderMockRecorder) Span(ctx, tx, spanId any) *MockreaderSpanCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Span", reflect.TypeOf((*Mockreader)(nil).Span), ctx, tx, spanId) + return &MockreaderSpanCall{Call: call} +} + +// MockreaderSpanCall wrap *gomock.Call +type MockreaderSpanCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockreaderSpanCall) Return(arg0 []byte, arg1 error) *MockreaderSpanCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockreaderSpanCall) Do(f func(context.Context, kv.Getter, uint64) ([]byte, error)) *MockreaderSpanCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockreaderSpanCall) DoAndReturn(f func(context.Context, kv.Getter, uint64) ([]byte, error)) *MockreaderSpanCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/polygon/heimdall/waypoint.go b/polygon/heimdall/waypoint.go new file mode 100644 index 00000000000..565191e9d25 --- /dev/null +++ b/polygon/heimdall/waypoint.go @@ -0,0 +1,44 @@ +package heimdall + +import ( + "fmt" + "math/big" + + libcommon "github.com/ledgerwatch/erigon-lib/common" +) + +type Waypoint interface { + fmt.Stringer + StartBlock() *big.Int + EndBlock() *big.Int + RootHash() libcommon.Hash + Timestamp() uint64 + Length() uint64 + CmpRange(n uint64) int +} + +type WaypointFields struct { + Proposer libcommon.Address `json:"proposer"` + StartBlock *big.Int `json:"start_block"` + EndBlock *big.Int `json:"end_block"` + RootHash libcommon.Hash `json:"root_hash"` + ChainID string `json:"bor_chain_id"` + Timestamp uint64 `json:"timestamp"` +} + +func (a *WaypointFields) Length() uint64 { + return a.EndBlock.Uint64() - a.StartBlock.Uint64() + 1 +} + +func (a *WaypointFields) CmpRange(n uint64) int { + num := new(big.Int).SetUint64(n) + if num.Cmp(a.StartBlock) < 0 { + return -1 + } + if num.Cmp(a.EndBlock) > 0 { + return 1 + } + return 0 +} + +type Waypoints []Waypoint diff --git a/polygon/p2p/fetcher_base.go b/polygon/p2p/fetcher_base.go new file mode 100644 index 00000000000..a313e0cfa4e --- /dev/null +++ b/polygon/p2p/fetcher_base.go @@ -0,0 +1,378 @@ +package p2p + +import ( + "context" + "errors" + "fmt" + "reflect" + "time" + + "github.com/cenkalti/backoff/v4" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/cmp" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/protocols/eth" +) + +type RequestIdGenerator func() uint64 + +type FetcherConfig struct { + responseTimeout time.Duration + retryBackOff time.Duration + maxRetries uint64 +} + +type Fetcher interface { + // FetchHeaders fetches [start,end) headers from a peer. Blocks until data is received. + FetchHeaders(ctx context.Context, start uint64, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Header], error) + // FetchBodies fetches block bodies for the given headers from a peer. Blocks until data is received. + FetchBodies(ctx context.Context, headers []*types.Header, peerId *PeerId) (FetcherResponse[[]*types.Body], error) + // FetchBlocks fetches headers and bodies for a given [start, end) range from a peer and + // assembles them into blocks. Blocks until data is received. + FetchBlocks(ctx context.Context, start uint64, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Block], error) +} + +func NewFetcher( + config FetcherConfig, + messageListener MessageListener, + messageSender MessageSender, + requestIdGenerator RequestIdGenerator, +) Fetcher { + return newFetcher(config, messageListener, messageSender, requestIdGenerator) +} + +func newFetcher( + config FetcherConfig, + messageListener MessageListener, + messageSender MessageSender, + requestIdGenerator RequestIdGenerator, +) *fetcher { + return &fetcher{ + config: config, + messageListener: messageListener, + messageSender: messageSender, + requestIdGenerator: requestIdGenerator, + } +} + +type fetcher struct { + config FetcherConfig + messageListener MessageListener + messageSender MessageSender + requestIdGenerator RequestIdGenerator +} + +type FetcherResponse[T any] struct { + Data T + TotalSize int +} + +func (f *fetcher) FetchHeaders(ctx context.Context, start uint64, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Header], error) { + if start >= end { + return FetcherResponse[[]*types.Header]{}, &ErrInvalidFetchHeadersRange{ + start: start, + end: end, + } + } + + // Soft response limits are: + // 1. 2 MB size + // 2. 1024 headers + // + // A header is approximately 500 bytes, hence 1024 headers should be less than 2 MB. + // As a simplification we can only use MaxHeadersServe for chunking. + amount := end - start + numChunks := amount / eth.MaxHeadersServe + if amount%eth.MaxHeadersServe > 0 { + numChunks++ + } + totalHeadersSize := 0 + + headers := make([]*types.Header, 0, amount) + for chunkNum := uint64(0); chunkNum < numChunks; chunkNum++ { + chunkStart := start + chunkNum*eth.MaxHeadersServe + chunkEnd := cmp.Min(end, chunkStart+eth.MaxHeadersServe) + for chunkStart < chunkEnd { + // a node may not respond with all MaxHeadersServe in 1 response, + // so we keep on consuming from last received number (akin to consuming a paging api) + // until we have all headers of the chunk or the peer stopped returning headers + headersChunk, err := fetchWithRetry(f.config, func() (FetcherResponse[[]*types.Header], error) { + return f.fetchHeaders(ctx, chunkStart, chunkEnd, peerId) + }) + if err != nil { + return FetcherResponse[[]*types.Header]{}, err + } + if len(headersChunk.Data) == 0 { + break + } + + headers = append(headers, headersChunk.Data...) + chunkStart += uint64(len(headersChunk.Data)) + totalHeadersSize += headersChunk.TotalSize + } + } + + if err := f.validateHeadersResponse(headers, start, amount); err != nil { + return FetcherResponse[[]*types.Header]{}, err + } + + return FetcherResponse[[]*types.Header]{ + Data: headers, + TotalSize: totalHeadersSize, + }, nil +} + +func (f *fetcher) FetchBodies(ctx context.Context, headers []*types.Header, peerId *PeerId) (FetcherResponse[[]*types.Body], error) { + var bodies []*types.Body + totalBodiesSize := 0 + + for len(headers) > 0 { + // Note: we always request MaxBodiesServe for optimal response sizes (fully utilising the 2 MB soft limit). + // In most cases the response will contain incomplete bodies list (ie < MaxBodiesServe) so we just + // continue asking it for more starting from the first hash in the sequence after the last received one. + // This is akin to how a paging API is consumed. + var headersChunk []*types.Header + if len(headers) > eth.MaxBodiesServe { + headersChunk = headers[:eth.MaxBodiesServe] + } else { + headersChunk = headers + } + + bodiesChunk, err := fetchWithRetry(f.config, func() (*FetcherResponse[[]*types.Body], error) { + return f.fetchBodies(ctx, headersChunk, peerId) + }) + if err != nil { + return FetcherResponse[[]*types.Body]{}, err + } + if len(bodiesChunk.Data) == 0 { + return FetcherResponse[[]*types.Body]{}, NewErrMissingBodies(headers) + } + + bodies = append(bodies, bodiesChunk.Data...) + headers = headers[len(bodiesChunk.Data):] + totalBodiesSize += bodiesChunk.TotalSize + } + + return FetcherResponse[[]*types.Body]{ + Data: bodies, + TotalSize: totalBodiesSize, + }, nil +} + +func (f *fetcher) FetchBlocks(ctx context.Context, start, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Block], error) { + headers, err := f.FetchHeaders(ctx, start, end, peerId) + if err != nil { + return FetcherResponse[[]*types.Block]{}, err + } + + bodies, err := f.FetchBodies(ctx, headers.Data, peerId) + if err != nil { + return FetcherResponse[[]*types.Block]{}, err + } + + blocks := make([]*types.Block, len(headers.Data)) + for i, header := range headers.Data { + blocks[i] = types.NewBlockFromNetwork(header, bodies.Data[i]) + } + + return FetcherResponse[[]*types.Block]{ + Data: blocks, + TotalSize: headers.TotalSize + bodies.TotalSize, + }, nil +} + +func (f *fetcher) fetchHeaders(ctx context.Context, start, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Header], error) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + messages := make(chan *DecodedInboundMessage[*eth.BlockHeadersPacket66]) + observer := func(message *DecodedInboundMessage[*eth.BlockHeadersPacket66]) { + select { + case <-ctx.Done(): + return + case messages <- message: + // no-op + } + } + + unregister := f.messageListener.RegisterBlockHeadersObserver(observer) + defer unregister() + + requestId := f.requestIdGenerator() + err := f.messageSender.SendGetBlockHeaders(ctx, peerId, eth.GetBlockHeadersPacket66{ + RequestId: requestId, + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Number: start, + }, + Amount: end - start, + }, + }) + if err != nil { + return FetcherResponse[[]*types.Header]{}, err + } + + message, messageSize, err := awaitResponse(ctx, f.config.responseTimeout, messages, filterBlockHeaders(peerId, requestId)) + if err != nil { + return FetcherResponse[[]*types.Header]{}, err + } + + return FetcherResponse[[]*types.Header]{ + Data: message.BlockHeadersPacket, + TotalSize: messageSize, + }, nil +} + +func (f *fetcher) validateHeadersResponse(headers []*types.Header, start, amount uint64) error { + headersLen := uint64(len(headers)) + if headersLen > amount { + return &ErrTooManyHeaders{ + requested: int(amount), + received: len(headers), + } + } + + for i, header := range headers { + expectedHeaderNum := start + uint64(i) + currentHeaderNumber := header.Number.Uint64() + if currentHeaderNumber != expectedHeaderNum { + return &ErrNonSequentialHeaderNumbers{ + current: currentHeaderNumber, + expected: expectedHeaderNum, + } + } + } + + if headersLen < amount { + return &ErrIncompleteHeaders{ + start: start, + requested: amount, + received: headersLen, + } + } + + return nil +} + +func (f *fetcher) fetchBodies(ctx context.Context, headers []*types.Header, peerId *PeerId) (*FetcherResponse[[]*types.Body], error) { + // cleanup for the chan message observer + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + messages := make(chan *DecodedInboundMessage[*eth.BlockBodiesPacket66]) + observer := func(message *DecodedInboundMessage[*eth.BlockBodiesPacket66]) { + select { + case <-ctx.Done(): + return + case messages <- message: + // no-op + } + } + + unregister := f.messageListener.RegisterBlockBodiesObserver(observer) + defer unregister() + + requestId := f.requestIdGenerator() + hashes := make([]common.Hash, len(headers)) + for i, header := range headers { + hashes[i] = header.Hash() + } + + err := f.messageSender.SendGetBlockBodies(ctx, peerId, eth.GetBlockBodiesPacket66{ + RequestId: requestId, + GetBlockBodiesPacket: hashes, + }) + if err != nil { + return nil, err + } + + message, messageSize, err := awaitResponse(ctx, f.config.responseTimeout, messages, filterBlockBodies(peerId, requestId)) + if err != nil { + return nil, err + } + + if err := f.validateBodies(message.BlockBodiesPacket, headers); err != nil { + return nil, err + } + + return &FetcherResponse[[]*types.Body]{ + Data: message.BlockBodiesPacket, + TotalSize: messageSize, + }, nil +} + +func (f *fetcher) validateBodies(bodies []*types.Body, headers []*types.Header) error { + if len(bodies) > len(headers) { + return &ErrTooManyBodies{ + requested: len(headers), + received: len(bodies), + } + } + + return nil +} + +func fetchWithRetry[TData any](config FetcherConfig, fetch func() (TData, error)) (TData, error) { + data, err := backoff.RetryWithData(func() (TData, error) { + data, err := fetch() + if err != nil { + var nilData TData + // retry timeouts + if errors.Is(err, context.DeadlineExceeded) { + return nilData, err + } + + // permanent errors are not retried + return nilData, backoff.Permanent(err) + } + + return data, nil + }, backoff.WithMaxRetries(backoff.NewConstantBackOff(config.retryBackOff), config.maxRetries)) + if err != nil { + var nilData TData + return nilData, err + } + + return data, nil +} + +func awaitResponse[TPacket any]( + ctx context.Context, + timeout time.Duration, + messages chan *DecodedInboundMessage[TPacket], + filter func(*DecodedInboundMessage[TPacket]) bool, +) (TPacket, int, error) { + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + + for { + select { + case <-ctx.Done(): + var nilPacket TPacket + return nilPacket, 0, fmt.Errorf("await %v response interrupted: %w", reflect.TypeOf(nilPacket), ctx.Err()) + case message := <-messages: + if filter(message) { + continue + } + + return message.Decoded, len(message.Data), nil + } + } +} + +func filterBlockHeaders(peerId *PeerId, requestId uint64) func(*DecodedInboundMessage[*eth.BlockHeadersPacket66]) bool { + return func(message *DecodedInboundMessage[*eth.BlockHeadersPacket66]) bool { + return filter(peerId, message.PeerId, requestId, message.Decoded.RequestId) + } +} + +func filterBlockBodies(peerId *PeerId, requestId uint64) func(*DecodedInboundMessage[*eth.BlockBodiesPacket66]) bool { + return func(message *DecodedInboundMessage[*eth.BlockBodiesPacket66]) bool { + return filter(peerId, message.PeerId, requestId, message.Decoded.RequestId) + } +} + +func filter(requestPeerId, responsePeerId *PeerId, requestId, responseId uint64) bool { + return !requestPeerId.Equal(responsePeerId) && requestId != responseId +} diff --git a/polygon/p2p/fetcher_base_test.go b/polygon/p2p/fetcher_base_test.go new file mode 100644 index 00000000000..8b6f69dc5a0 --- /dev/null +++ b/polygon/p2p/fetcher_base_test.go @@ -0,0 +1,734 @@ +package p2p + +import ( + "context" + "fmt" + "math/big" + "testing" + "time" + + "github.com/holiman/uint256" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + "google.golang.org/grpc" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + erigonlibtypes "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/protocols/eth" + "github.com/ledgerwatch/erigon/rlp" +) + +func TestFetcherFetchHeaders(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId := uint64(1234) + mockInboundMessages := []*sentry.InboundMessage{ + { + // should get filtered because it is from a different peer id + PeerId: PeerIdFromUint64(2).H512(), + }, + { + // should get filtered because it is from a different request id + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + Data: newMockBlockHeadersPacket66Bytes(t, requestId*2, 2), + }, + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + Data: newMockBlockHeadersPacket66Bytes(t, requestId, 2), + }, + } + mockRequestResponse := requestResponseMock{ + requestId: requestId, + mockResponseInboundMessages: mockInboundMessages, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 2, + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId)) + test.mockSentryStreams(mockRequestResponse) + test.run(func(ctx context.Context, t *testing.T) { + headers, err := test.fetcher.FetchHeaders(ctx, 1, 3, peerId) + headersData := headers.Data + require.NoError(t, err) + require.Len(t, headersData, 2) + require.Equal(t, uint64(1), headersData[0].Number.Uint64()) + require.Equal(t, uint64(2), headersData[1].Number.Uint64()) + }) +} + +func TestFetcherFetchHeadersWithChunking(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + mockHeaders := newMockBlockHeaders(1999) + requestId1 := uint64(1234) + mockInboundMessages1 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // 1024 headers in first response + Data: blockHeadersPacket66Bytes(t, requestId1, mockHeaders[:1024]), + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + mockResponseInboundMessages: mockInboundMessages1, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 1024, + } + requestId2 := uint64(1235) + mockInboundMessages2 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // remaining 975 headers in second response + Data: blockHeadersPacket66Bytes(t, requestId2, mockHeaders[1024:]), + }, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + mockResponseInboundMessages: mockInboundMessages2, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1025, + wantRequestAmount: 975, + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId1, requestId2)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2) + test.run(func(ctx context.Context, t *testing.T) { + headers, err := test.fetcher.FetchHeaders(ctx, 1, 2000, peerId) + headersData := headers.Data + require.NoError(t, err) + require.Len(t, headersData, 1999) + require.Equal(t, uint64(1), headersData[0].Number.Uint64()) + require.Equal(t, uint64(1999), headersData[len(headersData)-1].Number.Uint64()) + }) +} + +func TestFetcherFetchHeadersResponseTimeout(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId1 := uint64(1234) + mockInboundMessages1 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // requestId2 takes too long and causes response timeout + Data: nil, + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + mockResponseInboundMessages: mockInboundMessages1, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 10, + // cause response timeout + responseDelay: 600 * time.Millisecond, + } + requestId2 := uint64(1235) + mockInboundMessages2 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // requestId2 takes too long and causes response timeout + Data: nil, + }, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + mockResponseInboundMessages: mockInboundMessages2, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 10, + // cause response timeout + responseDelay: 600 * time.Millisecond, + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId1, requestId2)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2) + test.run(func(ctx context.Context, t *testing.T) { + headers, err := test.fetcher.FetchHeaders(ctx, 1, 11, peerId) + require.ErrorIs(t, err, context.DeadlineExceeded) + require.Nil(t, headers.Data) + }) +} + +func TestFetcherFetchHeadersResponseTimeoutRetrySuccess(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + mockHeaders := newMockBlockHeaders(1999) + requestId1 := uint64(1234) + mockInboundMessages1 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // 1024 headers in first response + Data: blockHeadersPacket66Bytes(t, requestId1, mockHeaders[:1024]), + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + mockResponseInboundMessages: mockInboundMessages1, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 1024, + } + requestId2 := uint64(1235) + mockInboundMessages2 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // requestId2 takes too long and causes response timeout + Data: nil, + }, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + mockResponseInboundMessages: mockInboundMessages2, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1025, + wantRequestAmount: 975, + // cause response timeout + responseDelay: 600 * time.Millisecond, + } + requestId3 := uint64(1236) + mockInboundMessages3 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // remaining 975 headers in third response + Data: blockHeadersPacket66Bytes(t, requestId3, mockHeaders[1024:]), + }, + } + mockRequestResponse3 := requestResponseMock{ + requestId: requestId3, + mockResponseInboundMessages: mockInboundMessages3, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1025, + wantRequestAmount: 975, + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId1, requestId2, requestId3)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2, mockRequestResponse3) + test.run(func(ctx context.Context, t *testing.T) { + headers, err := test.fetcher.FetchHeaders(ctx, 1, 2000, peerId) + headersData := headers.Data + require.NoError(t, err) + require.Len(t, headersData, 1999) + require.Equal(t, uint64(1), headersData[0].Number.Uint64()) + require.Equal(t, uint64(1999), headersData[len(headersData)-1].Number.Uint64()) + }) +} + +func TestFetcherErrInvalidFetchHeadersRange(t *testing.T) { + t.Parallel() + + test := newFetcherTest(t, newMockRequestGenerator(1)) + test.mockSentryStreams() + test.run(func(ctx context.Context, t *testing.T) { + headers, err := test.fetcher.FetchHeaders(ctx, 3, 1, PeerIdFromUint64(1)) + var errInvalidFetchHeadersRange *ErrInvalidFetchHeadersRange + require.ErrorAs(t, err, &errInvalidFetchHeadersRange) + require.Equal(t, uint64(3), errInvalidFetchHeadersRange.start) + require.Equal(t, uint64(1), errInvalidFetchHeadersRange.end) + require.Nil(t, headers.Data) + }) +} + +func TestFetcherFetchHeadersErrIncompleteResponse(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId1 := uint64(1234) + requestId2 := uint64(1235) + mockInboundMessages1 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + Data: newMockBlockHeadersPacket66Bytes(t, requestId1, 2), + }, + } + mockInboundMessages2 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + Data: newMockBlockHeadersPacket66Bytes(t, requestId2, 0), + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + mockResponseInboundMessages: mockInboundMessages1, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 3, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + mockResponseInboundMessages: mockInboundMessages2, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 3, + wantRequestAmount: 1, + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId1, requestId2)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2) + test.run(func(ctx context.Context, t *testing.T) { + var errIncompleteHeaders *ErrIncompleteHeaders + headers, err := test.fetcher.FetchHeaders(ctx, 1, 4, peerId) + require.ErrorAs(t, err, &errIncompleteHeaders) + require.Equal(t, uint64(3), errIncompleteHeaders.LowestMissingBlockNum()) + require.Nil(t, headers.Data) + }) +} + +func TestFetcherFetchBodies(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + // setup 2 request to test "paging"-style fetch logic + requestId1 := uint64(1234) + requestId2 := uint64(1235) + mockHeaders := []*types.Header{ + {Number: big.NewInt(1)}, + {Number: big.NewInt(2)}, + } + mockHashes := []common.Hash{ + mockHeaders[0].Hash(), + mockHeaders[1].Hash(), + } + mockInboundMessages1 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId.H512(), + Data: newMockBlockBodiesPacketBytes(t, requestId1, &types.Body{ + Transactions: types.Transactions{ + types.NewEIP1559Transaction( + *uint256.NewInt(1), + 1, + common.BigToAddress(big.NewInt(123)), + uint256.NewInt(55), + 0, + uint256.NewInt(666), + uint256.NewInt(777), + uint256.NewInt(888), + nil, + ), + }, + }), + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + mockResponseInboundMessages: mockInboundMessages1, + wantRequestPeerId: peerId, + wantRequestHashes: mockHashes, + } + mockInboundMessages2 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId.H512(), + Data: newMockBlockBodiesPacketBytes(t, requestId2, &types.Body{ + Transactions: types.Transactions{ + types.NewEIP1559Transaction( + *uint256.NewInt(1), + 2, + common.BigToAddress(big.NewInt(321)), + uint256.NewInt(21), + 0, + uint256.NewInt(987), + uint256.NewInt(876), + uint256.NewInt(765), + nil, + ), + }, + }), + }, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + mockResponseInboundMessages: mockInboundMessages2, + wantRequestPeerId: peerId, + // 2nd time only request the remaining hash since the first one has been received + // in first batch + wantRequestHashes: mockHashes[1:], + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId1, requestId2)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2) + test.run(func(ctx context.Context, t *testing.T) { + bodies, err := test.fetcher.FetchBodies(ctx, mockHeaders, peerId) + require.NoError(t, err) + require.Len(t, bodies.Data, 2) + }) +} + +func TestFetcherFetchBodiesResponseTimeout(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId1 := uint64(1234) + requestId2 := uint64(1235) + mockHeaders := []*types.Header{{Number: big.NewInt(1)}} + mockHashes := []common.Hash{mockHeaders[0].Hash()} + mockInboundMessages := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId.H512(), + Data: nil, // response timeout + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + responseDelay: 600 * time.Millisecond, + mockResponseInboundMessages: mockInboundMessages, + wantRequestPeerId: peerId, + wantRequestHashes: mockHashes, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + responseDelay: 600 * time.Millisecond, + mockResponseInboundMessages: mockInboundMessages, + wantRequestPeerId: peerId, + wantRequestHashes: mockHashes, + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId1, requestId2)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2) + test.run(func(ctx context.Context, t *testing.T) { + bodies, err := test.fetcher.FetchBodies(ctx, mockHeaders, peerId) + require.ErrorIs(t, err, context.DeadlineExceeded) + require.Nil(t, bodies.Data) + }) +} + +func TestFetcherFetchBodiesResponseTimeoutRetrySuccess(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId1 := uint64(1234) + requestId2 := uint64(1235) + mockHeaders := []*types.Header{{Number: big.NewInt(1)}} + mockHashes := []common.Hash{mockHeaders[0].Hash()} + mockInboundMessages1 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId.H512(), + Data: nil, // response timeout + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + responseDelay: 600 * time.Millisecond, + mockResponseInboundMessages: mockInboundMessages1, + wantRequestPeerId: peerId, + wantRequestHashes: mockHashes, + } + mockInboundMessages2 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId.H512(), + Data: newMockBlockBodiesPacketBytes(t, requestId2, &types.Body{ + Transactions: types.Transactions{ + types.NewEIP1559Transaction( + *uint256.NewInt(1), + 1, + common.BigToAddress(big.NewInt(123)), + uint256.NewInt(55), + 0, + uint256.NewInt(666), + uint256.NewInt(777), + uint256.NewInt(888), + nil, + ), + }, + }), + }, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + mockResponseInboundMessages: mockInboundMessages2, + wantRequestPeerId: peerId, + wantRequestHashes: mockHashes, + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId1, requestId2)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2) + test.run(func(ctx context.Context, t *testing.T) { + bodies, err := test.fetcher.FetchBodies(ctx, mockHeaders, peerId) + require.NoError(t, err) + require.Len(t, bodies.Data, 1) + }) +} + +func TestFetcherFetchBodiesErrMissingBodies(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId := uint64(1234) + mockHeaders := []*types.Header{{Number: big.NewInt(1)}} + mockHashes := []common.Hash{mockHeaders[0].Hash()} + mockInboundMessages := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId.H512(), + Data: newMockBlockBodiesPacketBytes(t, requestId), + }, + } + mockRequestResponse := requestResponseMock{ + requestId: requestId, + mockResponseInboundMessages: mockInboundMessages, + wantRequestPeerId: peerId, + wantRequestHashes: mockHashes, + } + + test := newFetcherTest(t, newMockRequestGenerator(requestId)) + test.mockSentryStreams(mockRequestResponse) + test.run(func(ctx context.Context, t *testing.T) { + var errMissingBlocks *ErrMissingBodies + bodies, err := test.fetcher.FetchBodies(ctx, mockHeaders, peerId) + require.ErrorAs(t, err, &errMissingBlocks) + lowest, exists := errMissingBlocks.LowestMissingBlockNum() + require.Equal(t, uint64(1), lowest) + require.True(t, exists) + require.Nil(t, bodies.Data) + }) +} + +func newFetcherTest(t *testing.T, requestIdGenerator RequestIdGenerator) *fetcherTest { + fetcherConfig := FetcherConfig{ + responseTimeout: 200 * time.Millisecond, + retryBackOff: time.Second, + maxRetries: 1, + } + messageListenerTest := newMessageListenerTest(t) + messageListener := messageListenerTest.messageListener + messageSender := NewMessageSender(messageListenerTest.sentryClient) + fetcher := newFetcher(fetcherConfig, messageListener, messageSender, requestIdGenerator) + return &fetcherTest{ + messageListenerTest: messageListenerTest, + fetcher: fetcher, + headersRequestResponseMocks: map[uint64]requestResponseMock{}, + } +} + +type fetcherTest struct { + *messageListenerTest + fetcher *fetcher + headersRequestResponseMocks map[uint64]requestResponseMock + peerEvents chan *delayedMessage[*sentry.PeerEvent] +} + +func (ft *fetcherTest) mockSentryStreams(mocks ...requestResponseMock) { + // default mocks + ft.sentryClient. + EXPECT(). + HandShake(gomock.Any(), gomock.Any(), gomock.Any()). + Return(nil, nil). + AnyTimes() + ft.sentryClient. + EXPECT(). + SetStatus(gomock.Any(), gomock.Any(), gomock.Any()). + Return(nil, nil). + AnyTimes() + ft.sentryClient. + EXPECT(). + MarkDisconnected(). + AnyTimes() + + ft.mockSentryInboundMessagesStream(mocks...) + ft.mockSentryPeerEventsStream() +} + +func (ft *fetcherTest) mockSentryInboundMessagesStream(mocks ...requestResponseMock) { + var numInboundMessages int + for _, mock := range mocks { + numInboundMessages += len(mock.mockResponseInboundMessages) + ft.headersRequestResponseMocks[mock.requestId] = mock + } + + inboundMessageStreamChan := make(chan *delayedMessage[*sentry.InboundMessage], numInboundMessages) + mockSentryInboundMessagesStream := &mockSentryMessagesStream[*sentry.InboundMessage]{ + ctx: ft.ctx, + stream: inboundMessageStreamChan, + } + + ft.sentryClient. + EXPECT(). + Messages(gomock.Any(), gomock.Any(), gomock.Any()). + Return(mockSentryInboundMessagesStream, nil). + AnyTimes() + ft.sentryClient. + EXPECT(). + SendMessageById(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, req *sentry.SendMessageByIdRequest, _ ...grpc.CallOption) (*sentry.SentPeers, error) { + var mock requestResponseMock + var err error + switch req.Data.Id { + case sentry.MessageId_GET_BLOCK_HEADERS_66: + mock, err = ft.mockSendMessageByIdForHeaders(req) + case sentry.MessageId_GET_BLOCK_BODIES_66: + mock, err = ft.mockSendMessageByIdForBodies(req) + default: + return nil, fmt.Errorf("unexpected message id request sent %d", req.Data.Id) + } + if err != nil { + return nil, err + } + + delete(ft.headersRequestResponseMocks, mock.requestId) + for _, inboundMessage := range mock.mockResponseInboundMessages { + inboundMessageStreamChan <- &delayedMessage[*sentry.InboundMessage]{ + message: inboundMessage, + responseDelay: mock.responseDelay, + } + } + + return &sentry.SentPeers{ + Peers: []*erigonlibtypes.H512{req.PeerId}, + }, nil + }). + AnyTimes() +} + +func (ft *fetcherTest) mockSendMessageByIdForHeaders(req *sentry.SendMessageByIdRequest) (requestResponseMock, error) { + if sentry.MessageId_GET_BLOCK_HEADERS_66 != req.Data.Id { + return requestResponseMock{}, fmt.Errorf("MessageId_GET_BLOCK_HEADERS_66 != req.Data.Id - %v", req.Data.Id) + } + + var pkt eth.GetBlockHeadersPacket66 + if err := rlp.DecodeBytes(req.Data.Data, &pkt); err != nil { + return requestResponseMock{}, err + } + + mock, ok := ft.headersRequestResponseMocks[pkt.RequestId] + if !ok { + return requestResponseMock{}, fmt.Errorf("unexpected request id %d", pkt.RequestId) + } + + reqPeerId := PeerIdFromH512(req.PeerId) + if !mock.wantRequestPeerId.Equal(reqPeerId) { + return requestResponseMock{}, fmt.Errorf("wantRequestPeerId != reqPeerId - %v vs %v", mock.wantRequestPeerId, reqPeerId) + } + + if mock.wantRequestOriginNumber != pkt.Origin.Number { + return requestResponseMock{}, fmt.Errorf("wantRequestOriginNumber != pkt.Origin.Number - %v vs %v", mock.wantRequestOriginNumber, pkt.Origin.Number) + } + + if mock.wantRequestAmount != pkt.Amount { + return requestResponseMock{}, fmt.Errorf("wantRequestAmount != pkt.Amount - %v vs %v", mock.wantRequestAmount, pkt.Amount) + } + + return mock, nil +} + +func (ft *fetcherTest) mockSendMessageByIdForBodies(req *sentry.SendMessageByIdRequest) (requestResponseMock, error) { + if sentry.MessageId_GET_BLOCK_BODIES_66 != req.Data.Id { + return requestResponseMock{}, fmt.Errorf("MessageId_GET_BLOCK_BODIES_66 != req.Data.Id - %v", req.Data.Id) + } + + var pkt eth.GetBlockBodiesPacket66 + if err := rlp.DecodeBytes(req.Data.Data, &pkt); err != nil { + return requestResponseMock{}, err + } + + mock, ok := ft.headersRequestResponseMocks[pkt.RequestId] + if !ok { + return requestResponseMock{}, fmt.Errorf("unexpected request id %d", pkt.RequestId) + } + + reqPeerId := PeerIdFromH512(req.PeerId) + if !mock.wantRequestPeerId.Equal(reqPeerId) { + return requestResponseMock{}, fmt.Errorf("wantRequestPeerId != reqPeerId - %v vs %v", mock.wantRequestPeerId, reqPeerId) + } + + if len(mock.wantRequestHashes) != len(pkt.GetBlockBodiesPacket) { + return requestResponseMock{}, fmt.Errorf("len(wantRequestHashes) != len(pkt.GetBlockBodiesPacket) - %v vs %v", len(mock.wantRequestHashes), len(pkt.GetBlockBodiesPacket)) + } + + for i, packet := range pkt.GetBlockBodiesPacket { + if mock.wantRequestHashes[i].String() != packet.String() { + return requestResponseMock{}, fmt.Errorf("wantRequestHash != packet - %s vs %s", mock.wantRequestHashes[i], packet) + } + } + + return mock, nil +} + +func (ft *fetcherTest) mockSentryPeerEventsStream() { + peerConnectEvents := []*sentry.PeerEvent{ + { + EventId: sentry.PeerEvent_Connect, + PeerId: PeerIdFromUint64(1).H512(), + }, + { + EventId: sentry.PeerEvent_Connect, + PeerId: PeerIdFromUint64(2).H512(), + }, + } + + streamChan := make(chan *delayedMessage[*sentry.PeerEvent], len(peerConnectEvents)) + for _, event := range peerConnectEvents { + streamChan <- &delayedMessage[*sentry.PeerEvent]{ + message: event, + } + } + + ft.peerEvents = streamChan + ft.sentryClient. + EXPECT(). + PeerEvents(gomock.Any(), gomock.Any(), gomock.Any()). + Return(&mockSentryMessagesStream[*sentry.PeerEvent]{ + ctx: ft.ctx, + stream: streamChan, + }, nil). + AnyTimes() +} + +func (ft *fetcherTest) mockDisconnectPeerEvent(peerId *PeerId) { + ft.peerEvents <- &delayedMessage[*sentry.PeerEvent]{ + message: &sentry.PeerEvent{ + EventId: sentry.PeerEvent_Disconnect, + PeerId: peerId.H512(), + }, + } +} + +type requestResponseMock struct { + requestId uint64 + responseDelay time.Duration + mockResponseInboundMessages []*sentry.InboundMessage + + // Common + wantRequestPeerId *PeerId + + // FetchHeaders only + wantRequestOriginNumber uint64 + wantRequestAmount uint64 + + // FetchBodies only + wantRequestHashes []common.Hash +} + +func newMockRequestGenerator(requestIds ...uint64) RequestIdGenerator { + var idx int + idxPtr := &idx + return func() uint64 { + if *idxPtr >= len(requestIds) { + panic("mock request generator does not have any request ids left") + } + + res := requestIds[*idxPtr] + *idxPtr++ + return res + } +} diff --git a/polygon/p2p/fetcher_errors.go b/polygon/p2p/fetcher_errors.go new file mode 100644 index 00000000000..8dd66126857 --- /dev/null +++ b/polygon/p2p/fetcher_errors.go @@ -0,0 +1,126 @@ +package p2p + +import ( + "errors" + "fmt" + "sort" + + "github.com/ledgerwatch/erigon/core/types" +) + +type ErrInvalidFetchHeadersRange struct { + start uint64 + end uint64 +} + +func (e ErrInvalidFetchHeadersRange) Error() string { + return fmt.Sprintf("invalid fetch headers range: start=%d, end=%d", e.start, e.end) +} + +func (e ErrInvalidFetchHeadersRange) Is(err error) bool { + var errInvalidFetchHeadersRange *ErrInvalidFetchHeadersRange + return errors.As(err, &errInvalidFetchHeadersRange) +} + +type ErrIncompleteHeaders struct { + start uint64 + requested uint64 + received uint64 +} + +func (e ErrIncompleteHeaders) Error() string { + return fmt.Sprintf( + "incomplete fetch headers response: start=%d, requested=%d, received=%d", + e.start, e.requested, e.received, + ) +} + +func (e ErrIncompleteHeaders) Is(err error) bool { + var errIncompleteHeaders *ErrIncompleteHeaders + return errors.As(err, &errIncompleteHeaders) +} + +func (e ErrIncompleteHeaders) LowestMissingBlockNum() uint64 { + return e.start + e.received +} + +type ErrTooManyHeaders struct { + requested int + received int +} + +func (e ErrTooManyHeaders) Error() string { + return fmt.Sprintf("too many headers in fetch headers response: requested=%d, received=%d", e.requested, e.received) +} + +func (e ErrTooManyHeaders) Is(err error) bool { + var errTooManyHeaders *ErrTooManyHeaders + return errors.As(err, &errTooManyHeaders) +} + +type ErrNonSequentialHeaderNumbers struct { + current uint64 + expected uint64 +} + +func (e ErrNonSequentialHeaderNumbers) Error() string { + return fmt.Sprintf( + "non sequential header numbers in fetch headers response: current=%d, expected=%d", + e.current, e.expected, + ) +} + +func (e ErrNonSequentialHeaderNumbers) Is(err error) bool { + var errDisconnectedHeaders *ErrNonSequentialHeaderNumbers + return errors.As(err, &errDisconnectedHeaders) +} + +type ErrTooManyBodies struct { + requested int + received int +} + +func (e ErrTooManyBodies) Error() string { + return fmt.Sprintf("too many bodies in fetch bodies response: requested=%d, received=%d", e.requested, e.received) +} + +func (e ErrTooManyBodies) Is(err error) bool { + var errTooManyBodies *ErrTooManyBodies + return errors.As(err, &errTooManyBodies) +} + +func NewErrMissingBodies(headers []*types.Header) *ErrMissingBodies { + return &ErrMissingBodies{ + headers: headers, + } +} + +type ErrMissingBodies struct { + headers []*types.Header +} + +func (e ErrMissingBodies) Error() string { + lowest, exists := e.LowestMissingBlockNum() + return fmt.Sprintf("missing bodies: lowest=%d, exists=%v, total=%d", lowest, exists, len(e.headers)) +} + +func (e ErrMissingBodies) LowestMissingBlockNum() (uint64, bool) { + return lowestHeadersNum(e.headers) +} + +func (e ErrMissingBodies) Is(err error) bool { + var errMissingBodies *ErrMissingBodies + return errors.As(err, &errMissingBodies) +} + +func lowestHeadersNum(headers []*types.Header) (uint64, bool) { + if len(headers) == 0 { + return 0, false + } + + sort.Slice(headers, func(i, j int) bool { + return headers[i].Number.Uint64() < headers[j].Number.Uint64() + }) + + return headers[0].Number.Uint64(), true +} diff --git a/polygon/p2p/fetcher_penalizing.go b/polygon/p2p/fetcher_penalizing.go new file mode 100644 index 00000000000..75761f57e5f --- /dev/null +++ b/polygon/p2p/fetcher_penalizing.go @@ -0,0 +1,71 @@ +package p2p + +import ( + "context" + "errors" + "fmt" + + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon/core/types" +) + +func NewPenalizingFetcher(logger log.Logger, fetcher Fetcher, peerPenalizer PeerPenalizer) Fetcher { + return newPenalizingFetcher(logger, fetcher, peerPenalizer) +} + +func newPenalizingFetcher(logger log.Logger, fetcher Fetcher, peerPenalizer PeerPenalizer) *penalizingFetcher { + return &penalizingFetcher{ + Fetcher: fetcher, + logger: logger, + peerPenalizer: peerPenalizer, + } +} + +type penalizingFetcher struct { + Fetcher + logger log.Logger + peerPenalizer PeerPenalizer +} + +func (pf *penalizingFetcher) FetchHeaders(ctx context.Context, start uint64, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Header], error) { + headers, err := pf.Fetcher.FetchHeaders(ctx, start, end, peerId) + if err != nil { + return FetcherResponse[[]*types.Header]{}, pf.maybePenalize(ctx, peerId, err, &ErrTooManyHeaders{}, &ErrNonSequentialHeaderNumbers{}) + } + + return headers, nil +} + +func (pf *penalizingFetcher) FetchBodies(ctx context.Context, headers []*types.Header, peerId *PeerId) (FetcherResponse[[]*types.Body], error) { + bodies, err := pf.Fetcher.FetchBodies(ctx, headers, peerId) + if err != nil { + return FetcherResponse[[]*types.Body]{}, pf.maybePenalize(ctx, peerId, err, &ErrTooManyBodies{}) + } + + return bodies, nil +} + +func (pf *penalizingFetcher) maybePenalize(ctx context.Context, peerId *PeerId, err error, penalizeErrs ...error) error { + var shouldPenalize bool + for _, penalizeErr := range penalizeErrs { + if errors.Is(err, penalizeErr) { + shouldPenalize = true + break + } + } + + if shouldPenalize { + pf.logger.Debug( + "[p2p.penalizing.fetcher] penalizing peer - penalize-able fetcher issue", + "peerId", peerId, + "err", err, + ) + + if penalizeErr := pf.peerPenalizer.Penalize(ctx, peerId); penalizeErr != nil { + err = fmt.Errorf("%w: %w", penalizeErr, err) + } + } + + return err +} diff --git a/polygon/p2p/fetcher_penalizing_test.go b/polygon/p2p/fetcher_penalizing_test.go new file mode 100644 index 00000000000..0c96e26a898 --- /dev/null +++ b/polygon/p2p/fetcher_penalizing_test.go @@ -0,0 +1,173 @@ +package p2p + +import ( + "context" + "math/big" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon/core/types" +) + +func TestPenalizingFetcherFetchHeadersShouldPenalizePeerWhenErrTooManyHeaders(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId := uint64(1234) + mockInboundMessages := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // response should contain 2 headers instead we return 5 + Data: newMockBlockHeadersPacket66Bytes(t, requestId, 5), + }, + } + mockRequestResponse := requestResponseMock{ + requestId: requestId, + mockResponseInboundMessages: mockInboundMessages, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 2, + } + + test := newPenalizingFetcherTest(t, newMockRequestGenerator(requestId)) + test.mockSentryStreams(mockRequestResponse) + // setup expectation that peer should be penalized + mockExpectPenalizePeer(t, test.sentryClient, peerId) + test.run(func(ctx context.Context, t *testing.T) { + var errTooManyHeaders *ErrTooManyHeaders + headers, err := test.penalizingFetcher.FetchHeaders(ctx, 1, 3, peerId) + require.ErrorAs(t, err, &errTooManyHeaders) + require.Equal(t, 2, errTooManyHeaders.requested) + require.Equal(t, 5, errTooManyHeaders.received) + require.Nil(t, headers.Data) + }) +} + +func TestPenalizingFetcherFetchHeadersShouldPenalizePeerWhenErrNonSequentialHeaderNumbers(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId := uint64(1234) + mockBlockHeaders := newMockBlockHeaders(5) + disconnectedHeaders := make([]*types.Header, 3) + disconnectedHeaders[0] = mockBlockHeaders[0] + disconnectedHeaders[1] = mockBlockHeaders[2] + disconnectedHeaders[2] = mockBlockHeaders[4] + mockInboundMessages := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + Data: blockHeadersPacket66Bytes(t, requestId, disconnectedHeaders), + }, + } + mockRequestResponse := requestResponseMock{ + requestId: requestId, + mockResponseInboundMessages: mockInboundMessages, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 3, + } + + test := newPenalizingFetcherTest(t, newMockRequestGenerator(requestId)) + test.mockSentryStreams(mockRequestResponse) + // setup expectation that peer should be penalized + mockExpectPenalizePeer(t, test.sentryClient, peerId) + test.run(func(ctx context.Context, t *testing.T) { + var errNonSequentialHeaderNumbers *ErrNonSequentialHeaderNumbers + headers, err := test.penalizingFetcher.FetchHeaders(ctx, 1, 4, peerId) + require.ErrorAs(t, err, &errNonSequentialHeaderNumbers) + require.Equal(t, uint64(3), errNonSequentialHeaderNumbers.current) + require.Equal(t, uint64(2), errNonSequentialHeaderNumbers.expected) + require.Nil(t, headers.Data) + }) +} + +func TestPenalizingFetcherFetchHeadersShouldPenalizePeerWhenIncorrectOrigin(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId := uint64(1234) + mockBlockHeaders := newMockBlockHeaders(3) + incorrectOriginHeaders := mockBlockHeaders[1:] + mockInboundMessages := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + // response headers should be 2 and start at 1 - instead we start at 2 + Data: blockHeadersPacket66Bytes(t, requestId, incorrectOriginHeaders), + }, + } + mockRequestResponse := requestResponseMock{ + requestId: requestId, + mockResponseInboundMessages: mockInboundMessages, + wantRequestPeerId: peerId, + wantRequestOriginNumber: 1, + wantRequestAmount: 2, + } + + test := newPenalizingFetcherTest(t, newMockRequestGenerator(requestId)) + test.mockSentryStreams(mockRequestResponse) + // setup expectation that peer should be penalized + mockExpectPenalizePeer(t, test.sentryClient, peerId) + test.run(func(ctx context.Context, t *testing.T) { + var errNonSequentialHeaderNumbers *ErrNonSequentialHeaderNumbers + headers, err := test.penalizingFetcher.FetchHeaders(ctx, 1, 3, peerId) + require.ErrorAs(t, err, &errNonSequentialHeaderNumbers) + require.Equal(t, uint64(2), errNonSequentialHeaderNumbers.current) + require.Equal(t, uint64(1), errNonSequentialHeaderNumbers.expected) + require.Nil(t, headers.Data) + }) +} + +func TestPenalizingFetcherFetchBodiesShouldPenalizePeerWhenErrTooManyBodies(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + requestId := uint64(1234) + headers := []*types.Header{{Number: big.NewInt(1)}} + hashes := []common.Hash{headers[0].Hash()} + mockInboundMessages := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId.H512(), + Data: newMockBlockBodiesPacketBytes(t, requestId, &types.Body{}, &types.Body{}), + }, + } + mockRequestResponse := requestResponseMock{ + requestId: requestId, + mockResponseInboundMessages: mockInboundMessages, + wantRequestPeerId: peerId, + wantRequestHashes: hashes, + } + + test := newPenalizingFetcherTest(t, newMockRequestGenerator(requestId)) + test.mockSentryStreams(mockRequestResponse) + // setup expectation that peer should be penalized + mockExpectPenalizePeer(t, test.sentryClient, peerId) + test.run(func(ctx context.Context, t *testing.T) { + var errTooManyBodies *ErrTooManyBodies + bodies, err := test.penalizingFetcher.FetchBodies(ctx, headers, peerId) + require.ErrorAs(t, err, &errTooManyBodies) + require.Equal(t, 1, errTooManyBodies.requested) + require.Equal(t, 2, errTooManyBodies.received) + require.Nil(t, bodies.Data) + }) +} + +func newPenalizingFetcherTest(t *testing.T, requestIdGenerator RequestIdGenerator) *penalizingFetcherTest { + fetcherTest := newFetcherTest(t, requestIdGenerator) + penalizingFetcher := newPenalizingFetcher(fetcherTest.logger, fetcherTest.fetcher, NewPeerPenalizer(fetcherTest.sentryClient)) + return &penalizingFetcherTest{ + fetcherTest: fetcherTest, + penalizingFetcher: penalizingFetcher, + } +} + +type penalizingFetcherTest struct { + *fetcherTest + penalizingFetcher *penalizingFetcher +} diff --git a/polygon/p2p/fetcher_tracking.go b/polygon/p2p/fetcher_tracking.go new file mode 100644 index 00000000000..8f510ade3f2 --- /dev/null +++ b/polygon/p2p/fetcher_tracking.go @@ -0,0 +1,63 @@ +package p2p + +import ( + "context" + "errors" + + "github.com/ledgerwatch/erigon/core/types" +) + +func NewTrackingFetcher(fetcher Fetcher, peerTracker PeerTracker) Fetcher { + return newTrackingFetcher(fetcher, peerTracker) +} + +func newTrackingFetcher(fetcher Fetcher, peerTracker PeerTracker) *trackingFetcher { + return &trackingFetcher{ + Fetcher: fetcher, + peerTracker: peerTracker, + } +} + +type trackingFetcher struct { + Fetcher + peerTracker PeerTracker +} + +func (tf *trackingFetcher) FetchHeaders(ctx context.Context, start uint64, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Header], error) { + res, err := tf.Fetcher.FetchHeaders(ctx, start, end, peerId) + if err != nil { + var errIncompleteHeaders *ErrIncompleteHeaders + if errors.As(err, &errIncompleteHeaders) { + tf.peerTracker.BlockNumMissing(peerId, errIncompleteHeaders.LowestMissingBlockNum()) + } else if errors.Is(err, context.DeadlineExceeded) { + tf.peerTracker.BlockNumMissing(peerId, start) + } + + return FetcherResponse[[]*types.Header]{}, err + } + + tf.peerTracker.BlockNumPresent(peerId, res.Data[len(res.Data)-1].Number.Uint64()) + return res, nil +} + +func (tf *trackingFetcher) FetchBodies(ctx context.Context, headers []*types.Header, peerId *PeerId) (FetcherResponse[[]*types.Body], error) { + bodies, err := tf.Fetcher.FetchBodies(ctx, headers, peerId) + if err != nil { + var errMissingBodies *ErrMissingBodies + if errors.As(err, &errMissingBodies) { + lowest, exists := errMissingBodies.LowestMissingBlockNum() + if exists { + tf.peerTracker.BlockNumMissing(peerId, lowest) + } + } else if errors.Is(err, context.DeadlineExceeded) { + lowest, exists := lowestHeadersNum(headers) + if exists { + tf.peerTracker.BlockNumMissing(peerId, lowest) + } + } + + return FetcherResponse[[]*types.Body]{}, err + } + + return bodies, nil +} diff --git a/polygon/p2p/fetcher_tracking_test.go b/polygon/p2p/fetcher_tracking_test.go new file mode 100644 index 00000000000..f7576865ca3 --- /dev/null +++ b/polygon/p2p/fetcher_tracking_test.go @@ -0,0 +1,181 @@ +package p2p + +import ( + "context" + "math/big" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon/core/types" +) + +func TestTrackingFetcherFetchHeadersUpdatesPeerTracker(t *testing.T) { + t.Parallel() + + peerId1 := PeerIdFromUint64(1) + requestId1 := uint64(1234) + mockInboundMessages1 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId1.H512(), + Data: newMockBlockHeadersPacket66Bytes(t, requestId1, 2), + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + mockResponseInboundMessages: mockInboundMessages1, + wantRequestPeerId: peerId1, + wantRequestOriginNumber: 1, + wantRequestAmount: 2, + } + requestId2 := uint64(1235) + mockInboundMessages2 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId1.H512(), + // peer returns 0 headers for requestId2 - peer does not have this header range + Data: newMockBlockHeadersPacket66Bytes(t, requestId2, 0), + }, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + mockResponseInboundMessages: mockInboundMessages2, + wantRequestPeerId: peerId1, + wantRequestOriginNumber: 3, + wantRequestAmount: 2, + } + + test := newTrackingFetcherTest(t, newMockRequestGenerator(requestId1, requestId2)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2) + test.run(func(ctx context.Context, t *testing.T) { + var peerIds []*PeerId // peers which may have blocks 1 and 2 + require.Eventuallyf(t, func() bool { + peerIds = test.peerTracker.ListPeersMayHaveBlockNum(2) + return len(peerIds) == 2 + }, time.Second, 100*time.Millisecond, "expected number of initial peers never satisfied: want=2, have=%d", len(peerIds)) + + headers, err := test.trackingFetcher.FetchHeaders(ctx, 1, 3, peerId1) // fetch headers 1 and 2 + headersData := headers.Data + require.NoError(t, err) + require.Len(t, headersData, 2) + require.Equal(t, uint64(1), headersData[0].Number.Uint64()) + require.Equal(t, uint64(2), headersData[1].Number.Uint64()) + + peerIds = test.peerTracker.ListPeersMayHaveBlockNum(4) // peers which may have blocks 1,2,3,4 + require.Len(t, peerIds, 2) + + var errIncompleteHeaders *ErrIncompleteHeaders + headers, err = test.trackingFetcher.FetchHeaders(ctx, 3, 5, peerId1) // fetch headers 3 and 4 + require.ErrorAs(t, err, &errIncompleteHeaders) // peer 1 does not have headers 3 and 4 + require.Equal(t, uint64(3), errIncompleteHeaders.start) + require.Equal(t, uint64(2), errIncompleteHeaders.requested) + require.Equal(t, uint64(0), errIncompleteHeaders.received) + require.Equal(t, uint64(3), errIncompleteHeaders.LowestMissingBlockNum()) + require.Nil(t, headers.Data) + + // should be one peer less now given that we know that peer 1 does not have block num 4 + peerIds = test.peerTracker.ListPeersMayHaveBlockNum(4) + require.Len(t, peerIds, 1) + }) +} + +func TestTrackingFetcherFetchBodiesUpdatesPeerTracker(t *testing.T) { + t.Parallel() + + peerId1 := PeerIdFromUint64(1) + peerId2 := PeerIdFromUint64(2) + requestId1 := uint64(1234) + requestId2 := uint64(1235) + requestId3 := uint64(1236) + mockHeaders := []*types.Header{{Number: big.NewInt(1)}} + mockHashes := []common.Hash{mockHeaders[0].Hash()} + mockInboundMessages1 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId1.H512(), + Data: newMockBlockBodiesPacketBytes(t, requestId1), + }, + } + mockRequestResponse1 := requestResponseMock{ + requestId: requestId1, + mockResponseInboundMessages: mockInboundMessages1, + wantRequestPeerId: peerId1, + wantRequestHashes: mockHashes, + } + mockInboundMessages2 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId2.H512(), + Data: nil, // response timeout + }, + } + mockRequestResponse2 := requestResponseMock{ + requestId: requestId2, + mockResponseInboundMessages: mockInboundMessages2, + wantRequestPeerId: peerId2, + wantRequestHashes: mockHashes, + responseDelay: 600 * time.Millisecond, + } + mockInboundMessages3 := []*sentry.InboundMessage{ + { + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId2.H512(), + Data: nil, // response timeout + }, + } + mockRequestResponse3 := requestResponseMock{ + requestId: requestId3, + mockResponseInboundMessages: mockInboundMessages3, + wantRequestPeerId: peerId2, + wantRequestHashes: mockHashes, + responseDelay: 600 * time.Millisecond, + } + + test := newTrackingFetcherTest(t, newMockRequestGenerator(requestId1, requestId2, requestId3)) + test.mockSentryStreams(mockRequestResponse1, mockRequestResponse2, mockRequestResponse3) + test.run(func(ctx context.Context, t *testing.T) { + var peerIds []*PeerId // peers which may have block 1 + require.Eventuallyf(t, func() bool { + peerIds = test.peerTracker.ListPeersMayHaveBlockNum(1) + return len(peerIds) == 2 + }, time.Second, 100*time.Millisecond, "expected number of initial peers never satisfied: want=2, have=%d", len(peerIds)) + + bodies, err := test.trackingFetcher.FetchBodies(ctx, mockHeaders, peerId1) + require.ErrorIs(t, err, &ErrMissingBodies{}) + require.Nil(t, bodies.Data) + + peerIds = test.peerTracker.ListPeersMayHaveBlockNum(1) // only peerId2 may have block 1, peerId does not + require.Len(t, peerIds, 1) + + bodies, err = test.trackingFetcher.FetchBodies(ctx, mockHeaders, peerId2) + require.ErrorIs(t, err, context.DeadlineExceeded) + require.Nil(t, bodies.Data) + + peerIds = test.peerTracker.ListPeersMayHaveBlockNum(1) // neither peerId1 nor peerId2 have block num 1 + require.Len(t, peerIds, 0) + }) +} + +func newTrackingFetcherTest(t *testing.T, requestIdGenerator RequestIdGenerator) *trackingFetcherTest { + fetcherTest := newFetcherTest(t, requestIdGenerator) + logger := fetcherTest.logger + peerTracker := newPeerTracker(PreservingPeerShuffle) + unregister := fetcherTest.messageListener.RegisterPeerEventObserver(NewPeerEventObserver(logger, peerTracker)) + t.Cleanup(unregister) + trackingFetcher := newTrackingFetcher(fetcherTest.fetcher, peerTracker) + return &trackingFetcherTest{ + fetcherTest: fetcherTest, + trackingFetcher: trackingFetcher, + peerTracker: peerTracker, + } +} + +type trackingFetcherTest struct { + *fetcherTest + trackingFetcher *trackingFetcher + peerTracker PeerTracker +} diff --git a/polygon/p2p/message_listener.go b/polygon/p2p/message_listener.go new file mode 100644 index 00000000000..f69c15005d7 --- /dev/null +++ b/polygon/p2p/message_listener.go @@ -0,0 +1,281 @@ +package p2p + +import ( + "context" + "fmt" + "sync" + + "github.com/ledgerwatch/log/v3" + "google.golang.org/grpc" + + "github.com/ledgerwatch/erigon-lib/direct" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon/eth/protocols/eth" + sentrymulticlient "github.com/ledgerwatch/erigon/p2p/sentry/sentry_multi_client" + "github.com/ledgerwatch/erigon/rlp" +) + +type DecodedInboundMessage[TPacket any] struct { + *sentry.InboundMessage + Decoded TPacket + PeerId *PeerId +} + +type MessageObserver[TMessage any] func(message TMessage) + +type UnregisterFunc func() + +type MessageListener interface { + Run(ctx context.Context) + RegisterNewBlockObserver(observer MessageObserver[*DecodedInboundMessage[*eth.NewBlockPacket]]) UnregisterFunc + RegisterNewBlockHashesObserver(observer MessageObserver[*DecodedInboundMessage[*eth.NewBlockHashesPacket]]) UnregisterFunc + RegisterBlockHeadersObserver(observer MessageObserver[*DecodedInboundMessage[*eth.BlockHeadersPacket66]]) UnregisterFunc + RegisterBlockBodiesObserver(observer MessageObserver[*DecodedInboundMessage[*eth.BlockBodiesPacket66]]) UnregisterFunc + RegisterPeerEventObserver(observer MessageObserver[*sentry.PeerEvent]) UnregisterFunc +} + +func NewMessageListener( + logger log.Logger, + sentryClient direct.SentryClient, + statusDataFactory sentrymulticlient.StatusDataFactory, + peerPenalizer PeerPenalizer, +) MessageListener { + return newMessageListener(logger, sentryClient, statusDataFactory, peerPenalizer) +} + +func newMessageListener( + logger log.Logger, + sentryClient direct.SentryClient, + statusDataFactory sentrymulticlient.StatusDataFactory, + peerPenalizer PeerPenalizer, +) *messageListener { + return &messageListener{ + logger: logger, + sentryClient: sentryClient, + statusDataFactory: statusDataFactory, + peerPenalizer: peerPenalizer, + newBlockObservers: map[uint64]MessageObserver[*DecodedInboundMessage[*eth.NewBlockPacket]]{}, + newBlockHashesObservers: map[uint64]MessageObserver[*DecodedInboundMessage[*eth.NewBlockHashesPacket]]{}, + blockHeadersObservers: map[uint64]MessageObserver[*DecodedInboundMessage[*eth.BlockHeadersPacket66]]{}, + blockBodiesObservers: map[uint64]MessageObserver[*DecodedInboundMessage[*eth.BlockBodiesPacket66]]{}, + peerEventObservers: map[uint64]MessageObserver[*sentry.PeerEvent]{}, + } +} + +type messageListener struct { + once sync.Once + observerIdSequence uint64 + logger log.Logger + sentryClient direct.SentryClient + statusDataFactory sentrymulticlient.StatusDataFactory + peerPenalizer PeerPenalizer + observersMu sync.Mutex + newBlockObservers map[uint64]MessageObserver[*DecodedInboundMessage[*eth.NewBlockPacket]] + newBlockHashesObservers map[uint64]MessageObserver[*DecodedInboundMessage[*eth.NewBlockHashesPacket]] + blockHeadersObservers map[uint64]MessageObserver[*DecodedInboundMessage[*eth.BlockHeadersPacket66]] + blockBodiesObservers map[uint64]MessageObserver[*DecodedInboundMessage[*eth.BlockBodiesPacket66]] + peerEventObservers map[uint64]MessageObserver[*sentry.PeerEvent] + stopWg sync.WaitGroup +} + +func (ml *messageListener) Run(ctx context.Context) { + ml.logger.Debug(messageListenerLogPrefix("running p2p message listener component")) + + backgroundLoops := []func(ctx context.Context){ + ml.listenInboundMessages, + ml.listenPeerEvents, + } + + ml.stopWg.Add(len(backgroundLoops)) + for _, loop := range backgroundLoops { + go loop(ctx) + } + + <-ctx.Done() + // once context has been cancelled wait for the background loops to stop + ml.stopWg.Wait() + + // unregister all observers + ml.observersMu.Lock() + defer ml.observersMu.Unlock() + ml.newBlockObservers = map[uint64]MessageObserver[*DecodedInboundMessage[*eth.NewBlockPacket]]{} + ml.newBlockHashesObservers = map[uint64]MessageObserver[*DecodedInboundMessage[*eth.NewBlockHashesPacket]]{} + ml.blockHeadersObservers = map[uint64]MessageObserver[*DecodedInboundMessage[*eth.BlockHeadersPacket66]]{} + ml.blockBodiesObservers = map[uint64]MessageObserver[*DecodedInboundMessage[*eth.BlockBodiesPacket66]]{} + ml.peerEventObservers = map[uint64]MessageObserver[*sentry.PeerEvent]{} +} + +func (ml *messageListener) RegisterNewBlockObserver(observer MessageObserver[*DecodedInboundMessage[*eth.NewBlockPacket]]) UnregisterFunc { + return registerObserver(ml, ml.newBlockObservers, observer) +} + +func (ml *messageListener) RegisterNewBlockHashesObserver(observer MessageObserver[*DecodedInboundMessage[*eth.NewBlockHashesPacket]]) UnregisterFunc { + return registerObserver(ml, ml.newBlockHashesObservers, observer) +} + +func (ml *messageListener) RegisterBlockHeadersObserver(observer MessageObserver[*DecodedInboundMessage[*eth.BlockHeadersPacket66]]) UnregisterFunc { + return registerObserver(ml, ml.blockHeadersObservers, observer) +} + +func (ml *messageListener) RegisterBlockBodiesObserver(observer MessageObserver[*DecodedInboundMessage[*eth.BlockBodiesPacket66]]) UnregisterFunc { + return registerObserver(ml, ml.blockBodiesObservers, observer) +} + +func (ml *messageListener) RegisterPeerEventObserver(observer MessageObserver[*sentry.PeerEvent]) UnregisterFunc { + return registerObserver(ml, ml.peerEventObservers, observer) +} + +func (ml *messageListener) listenInboundMessages(ctx context.Context) { + streamFactory := func(ctx context.Context, sentryClient direct.SentryClient) (sentrymulticlient.SentryMessageStream, error) { + messagesRequest := sentry.MessagesRequest{ + Ids: []sentry.MessageId{ + sentry.MessageId_NEW_BLOCK_66, + sentry.MessageId_NEW_BLOCK_HASHES_66, + sentry.MessageId_BLOCK_HEADERS_66, + sentry.MessageId_BLOCK_BODIES_66, + }, + } + + return sentryClient.Messages(ctx, &messagesRequest, grpc.WaitForReady(true)) + } + + streamMessages(ctx, ml, "InboundMessages", streamFactory, func(message *sentry.InboundMessage) error { + ml.observersMu.Lock() + defer ml.observersMu.Unlock() + + switch message.Id { + case sentry.MessageId_NEW_BLOCK_66: + return notifyInboundMessageObservers(ctx, ml.logger, ml.peerPenalizer, ml.newBlockObservers, message) + case sentry.MessageId_NEW_BLOCK_HASHES_66: + return notifyInboundMessageObservers(ctx, ml.logger, ml.peerPenalizer, ml.newBlockHashesObservers, message) + case sentry.MessageId_BLOCK_HEADERS_66: + return notifyInboundMessageObservers(ctx, ml.logger, ml.peerPenalizer, ml.blockHeadersObservers, message) + case sentry.MessageId_BLOCK_BODIES_66: + return notifyInboundMessageObservers(ctx, ml.logger, ml.peerPenalizer, ml.blockBodiesObservers, message) + default: + return nil + } + }) +} + +func (ml *messageListener) listenPeerEvents(ctx context.Context) { + streamFactory := func(ctx context.Context, sentryClient direct.SentryClient) (sentrymulticlient.SentryMessageStream, error) { + return sentryClient.PeerEvents(ctx, &sentry.PeerEventsRequest{}, grpc.WaitForReady(true)) + } + + streamMessages(ctx, ml, "PeerEvents", streamFactory, ml.notifyPeerEventObservers) +} + +func (ml *messageListener) notifyPeerEventObservers(peerEvent *sentry.PeerEvent) error { + ml.observersMu.Lock() + defer ml.observersMu.Unlock() + + // wait on all observers to finish processing the peer event before notifying them + // with subsequent events in order to preserve the ordering of the sentry messages + var wg sync.WaitGroup + for _, observer := range ml.peerEventObservers { + wg.Add(1) + go func(observer MessageObserver[*sentry.PeerEvent]) { + defer wg.Done() + observer(peerEvent) + }(observer) + } + + wg.Wait() + return nil +} + +func (ml *messageListener) nextObserverId() uint64 { + id := ml.observerIdSequence + ml.observerIdSequence++ + return id +} + +func registerObserver[TMessage any]( + ml *messageListener, + observers map[uint64]MessageObserver[*TMessage], + observer MessageObserver[*TMessage], +) UnregisterFunc { + ml.observersMu.Lock() + defer ml.observersMu.Unlock() + + observerId := ml.nextObserverId() + observers[observerId] = observer + return unregisterFunc(&ml.observersMu, observers, observerId) +} + +func unregisterFunc[TMessage any](mu *sync.Mutex, observers map[uint64]MessageObserver[TMessage], observerId uint64) UnregisterFunc { + return func() { + mu.Lock() + defer mu.Unlock() + + delete(observers, observerId) + } +} + +func streamMessages[TMessage any]( + ctx context.Context, + ml *messageListener, + name string, + streamFactory sentrymulticlient.SentryMessageStreamFactory, + handler func(event *TMessage) error, +) { + defer ml.stopWg.Done() + + messageHandler := func(_ context.Context, event *TMessage, _ direct.SentryClient) error { + return handler(event) + } + + sentrymulticlient.SentryReconnectAndPumpStreamLoop( + ctx, + ml.sentryClient, + ml.statusDataFactory, + name, + streamFactory, + func() *TMessage { return new(TMessage) }, + messageHandler, + nil, + ml.logger, + ) +} + +func notifyInboundMessageObservers[TPacket any]( + ctx context.Context, + logger log.Logger, + peerPenalizer PeerPenalizer, + observers map[uint64]MessageObserver[*DecodedInboundMessage[TPacket]], + message *sentry.InboundMessage, +) error { + peerId := PeerIdFromH512(message.PeerId) + + var decodedData TPacket + if err := rlp.DecodeBytes(message.Data, &decodedData); err != nil { + if rlp.IsInvalidRLPError(err) { + logger.Debug(messageListenerLogPrefix("penalizing peer - invalid rlp"), "peerId", peerId, "err", err) + + if penalizeErr := peerPenalizer.Penalize(ctx, peerId); penalizeErr != nil { + err = fmt.Errorf("%w: %w", penalizeErr, err) + } + } + + return err + } + + notifyObservers(observers, &DecodedInboundMessage[TPacket]{ + InboundMessage: message, + Decoded: decodedData, + PeerId: peerId, + }) + + return nil +} + +func notifyObservers[TMessage any](observers map[uint64]MessageObserver[TMessage], message TMessage) { + for _, observer := range observers { + go observer(message) + } +} + +func messageListenerLogPrefix(message string) string { + return fmt.Sprintf("[p2p.message.listener] %s", message) +} diff --git a/polygon/p2p/message_listener_test.go b/polygon/p2p/message_listener_test.go new file mode 100644 index 00000000000..a30195c033a --- /dev/null +++ b/polygon/p2p/message_listener_test.go @@ -0,0 +1,455 @@ +package p2p + +import ( + "context" + "errors" + "math/big" + "sync/atomic" + "testing" + "time" + + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + "google.golang.org/protobuf/types/known/emptypb" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/direct" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/protocols/eth" + sentrymulticlient "github.com/ledgerwatch/erigon/p2p/sentry/sentry_multi_client" + "github.com/ledgerwatch/erigon/rlp" + "github.com/ledgerwatch/erigon/turbo/testlog" +) + +func TestMessageListenerRegisterBlockHeadersObserver(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + test := newMessageListenerTest(t) + test.mockSentryStreams() + test.run(func(ctx context.Context, t *testing.T) { + var done atomic.Bool + observer := func(message *DecodedInboundMessage[*eth.BlockHeadersPacket66]) { + require.Equal(t, peerId, message.PeerId) + require.Equal(t, uint64(1), message.Decoded.RequestId) + require.Len(t, message.Decoded.BlockHeadersPacket, 2) + require.Equal(t, uint64(1), message.Decoded.BlockHeadersPacket[0].Number.Uint64()) + require.Equal(t, uint64(2), message.Decoded.BlockHeadersPacket[1].Number.Uint64()) + done.Store(true) + } + + unregister := test.messageListener.RegisterBlockHeadersObserver(observer) + t.Cleanup(unregister) + + test.inboundMessagesStream <- &delayedMessage[*sentry.InboundMessage]{ + message: &sentry.InboundMessage{ + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId.H512(), + Data: newMockBlockHeadersPacket66Bytes(t, 1, 2), + }, + } + + require.Eventually(t, func() bool { return done.Load() }, time.Second, 5*time.Millisecond) + }) +} + +func TestMessageListenerRegisterPeerEventObserver(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + test := newMessageListenerTest(t) + test.mockSentryStreams() + test.run(func(ctx context.Context, t *testing.T) { + var done atomic.Bool + observer := func(message *sentry.PeerEvent) { + require.Equal(t, peerId.H512(), message.PeerId) + require.Equal(t, sentry.PeerEvent_Connect, message.EventId) + done.Store(true) + } + + unregister := test.messageListener.RegisterPeerEventObserver(observer) + t.Cleanup(unregister) + + test.peerEventsStream <- &delayedMessage[*sentry.PeerEvent]{ + message: &sentry.PeerEvent{ + PeerId: peerId.H512(), + EventId: sentry.PeerEvent_Connect, + }, + } + + require.Eventually(t, func() bool { return done.Load() }, time.Second, 5*time.Millisecond) + }) +} + +func TestMessageListenerRegisterNewBlockObserver(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + test := newMessageListenerTest(t) + test.mockSentryStreams() + test.run(func(ctx context.Context, t *testing.T) { + var done atomic.Bool + observer := func(message *DecodedInboundMessage[*eth.NewBlockPacket]) { + require.Equal(t, peerId, message.PeerId) + require.Equal(t, uint64(1), message.Decoded.Block.Number().Uint64()) + done.Store(true) + } + + unregister := test.messageListener.RegisterNewBlockObserver(observer) + t.Cleanup(unregister) + + test.inboundMessagesStream <- &delayedMessage[*sentry.InboundMessage]{ + message: &sentry.InboundMessage{ + Id: sentry.MessageId_NEW_BLOCK_66, + PeerId: peerId.H512(), + Data: newMockNewBlockPacketBytes(t), + }, + } + + require.Eventually(t, func() bool { return done.Load() }, time.Second, 5*time.Millisecond) + }) +} + +func TestMessageListenerRegisterNewBlockHashesObserver(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + test := newMessageListenerTest(t) + test.mockSentryStreams() + test.run(func(ctx context.Context, t *testing.T) { + var done atomic.Bool + observer := func(message *DecodedInboundMessage[*eth.NewBlockHashesPacket]) { + require.Equal(t, peerId, message.PeerId) + require.Len(t, *message.Decoded, 1) + require.Equal(t, uint64(1), (*message.Decoded)[0].Number) + done.Store(true) + } + + unregister := test.messageListener.RegisterNewBlockHashesObserver(observer) + t.Cleanup(unregister) + + test.inboundMessagesStream <- &delayedMessage[*sentry.InboundMessage]{ + message: &sentry.InboundMessage{ + Id: sentry.MessageId_NEW_BLOCK_HASHES_66, + PeerId: peerId.H512(), + Data: newMockNewBlockHashesPacketBytes(t), + }, + } + + require.Eventually(t, func() bool { return done.Load() }, time.Second, 5*time.Millisecond) + }) +} + +func TestMessageListenerRegisterBlockBodiesObserver(t *testing.T) { + t.Parallel() + + peerId := PeerIdFromUint64(1) + test := newMessageListenerTest(t) + test.mockSentryStreams() + test.run(func(ctx context.Context, t *testing.T) { + var done atomic.Bool + observer := func(message *DecodedInboundMessage[*eth.BlockBodiesPacket66]) { + require.Equal(t, peerId, message.PeerId) + require.Equal(t, uint64(23), message.Decoded.RequestId) + require.Len(t, message.Decoded.BlockBodiesPacket, 1) + done.Store(true) + } + + unregister := test.messageListener.RegisterBlockBodiesObserver(observer) + t.Cleanup(unregister) + + test.inboundMessagesStream <- &delayedMessage[*sentry.InboundMessage]{ + message: &sentry.InboundMessage{ + Id: sentry.MessageId_BLOCK_BODIES_66, + PeerId: peerId.H512(), + Data: newMockBlockBodiesPacketBytes(t, 23, &types.Body{}), + }, + } + + require.Eventually(t, func() bool { return done.Load() }, time.Second, 5*time.Millisecond) + }) +} + +func TestMessageListenerShouldPenalizePeerWhenErrInvalidRlp(t *testing.T) { + t.Parallel() + + peerId1 := PeerIdFromUint64(1) + peerId2 := PeerIdFromUint64(2) + test := newMessageListenerTest(t) + test.mockSentryStreams() + mockExpectPenalizePeer(t, test.sentryClient, peerId1) + test.run(func(ctx context.Context, t *testing.T) { + var done atomic.Bool + observer := func(message *DecodedInboundMessage[*eth.BlockHeadersPacket66]) { + require.Equal(t, peerId2, message.PeerId) + done.Store(true) + } + + unregister := test.messageListener.RegisterBlockHeadersObserver(observer) + t.Cleanup(unregister) + + test.inboundMessagesStream <- &delayedMessage[*sentry.InboundMessage]{ + message: &sentry.InboundMessage{ + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId1.H512(), + Data: []byte{'i', 'n', 'v', 'a', 'l', 'i', 'd', '.', 'r', 'l', 'p'}, + }, + } + + test.inboundMessagesStream <- &delayedMessage[*sentry.InboundMessage]{ + message: &sentry.InboundMessage{ + Id: sentry.MessageId_BLOCK_HEADERS_66, + PeerId: peerId2.H512(), + Data: newMockBlockHeadersPacket66Bytes(t, 1, 1), + }, + } + + require.Eventually(t, func() bool { return done.Load() }, time.Second, 5*time.Millisecond) + }) +} + +func newMessageListenerTest(t *testing.T) *messageListenerTest { + ctx, cancel := context.WithCancel(context.Background()) + logger := testlog.Logger(t, log.LvlTrace) + ctrl := gomock.NewController(t) + inboundMessagesStream := make(chan *delayedMessage[*sentry.InboundMessage]) + peerEventsStream := make(chan *delayedMessage[*sentry.PeerEvent]) + sentryClient := direct.NewMockSentryClient(ctrl) + statusDataFactory := sentrymulticlient.StatusDataFactory(func(ctx context.Context) (*sentry.StatusData, error) { + return &sentry.StatusData{}, nil + }) + return &messageListenerTest{ + ctx: ctx, + ctxCancel: cancel, + t: t, + logger: logger, + sentryClient: sentryClient, + messageListener: newMessageListener(logger, sentryClient, statusDataFactory, NewPeerPenalizer(sentryClient)), + inboundMessagesStream: inboundMessagesStream, + peerEventsStream: peerEventsStream, + } +} + +type messageListenerTest struct { + ctx context.Context + ctxCancel context.CancelFunc + t *testing.T + logger log.Logger + sentryClient *direct.MockSentryClient + messageListener *messageListener + inboundMessagesStream chan *delayedMessage[*sentry.InboundMessage] + peerEventsStream chan *delayedMessage[*sentry.PeerEvent] +} + +// run is needed so that we can properly shut down tests due to how the sentry multi client +// SentryReconnectAndPumpStreamLoop works. +// +// Using t.Cleanup to call fetcher.Stop instead does not work since the mocks generated by gomock cause +// an error when their methods are called after a test has finished - t.Cleanup is run after a +// test has finished, and so we need to make sure that the SentryReconnectAndPumpStreamLoop loop has been stopped +// before the test finishes otherwise we will have flaky tests. +// +// If changing the behaviour here please run "go test -v -count=1000" and "go test -v -count=1 -race" to confirm there +// are no regressions. +func (mlt *messageListenerTest) run(f func(ctx context.Context, t *testing.T)) { + var done atomic.Bool + mlt.t.Run("start", func(_ *testing.T) { + go func() { + mlt.messageListener.Run(mlt.ctx) + done.Store(true) + }() + }) + + mlt.t.Run("test", func(t *testing.T) { + f(mlt.ctx, t) + }) + + mlt.t.Run("stop", func(t *testing.T) { + mlt.ctxCancel() + require.Eventually(t, func() bool { return done.Load() }, time.Second, 5*time.Millisecond) + }) +} + +func (mlt *messageListenerTest) mockSentryStreams() { + mlt.sentryClient. + EXPECT(). + HandShake(gomock.Any(), gomock.Any(), gomock.Any()). + Return(nil, nil). + AnyTimes() + mlt.sentryClient. + EXPECT(). + SetStatus(gomock.Any(), gomock.Any(), gomock.Any()). + Return(nil, nil). + AnyTimes() + mlt.sentryClient. + EXPECT(). + MarkDisconnected(). + AnyTimes() + mlt.sentryClient. + EXPECT(). + Messages(gomock.Any(), gomock.Any(), gomock.Any()). + Return(&mockSentryMessagesStream[*sentry.InboundMessage]{ + ctx: mlt.ctx, + stream: mlt.inboundMessagesStream, + }, nil). + AnyTimes() + mlt.sentryClient. + EXPECT(). + PeerEvents(gomock.Any(), gomock.Any(), gomock.Any()). + Return(&mockSentryMessagesStream[*sentry.PeerEvent]{ + ctx: mlt.ctx, + stream: mlt.peerEventsStream, + }, nil). + AnyTimes() +} + +type delayedMessage[M any] struct { + message M + responseDelay time.Duration +} + +type mockSentryMessagesStream[M any] struct { + ctx context.Context + stream <-chan *delayedMessage[M] +} + +func (s *mockSentryMessagesStream[M]) Recv() (M, error) { + var nilValue M + return nilValue, nil +} + +func (s *mockSentryMessagesStream[M]) Header() (metadata.MD, error) { + return nil, nil +} + +func (s *mockSentryMessagesStream[M]) Trailer() metadata.MD { + return nil +} + +func (s *mockSentryMessagesStream[M]) CloseSend() error { + return nil +} + +func (s *mockSentryMessagesStream[M]) Context() context.Context { + return s.ctx +} + +func (s *mockSentryMessagesStream[M]) SendMsg(_ any) error { + return nil +} + +func (s *mockSentryMessagesStream[M]) RecvMsg(msg any) error { + select { + case <-s.ctx.Done(): + return s.ctx.Err() + case mockMsg := <-s.stream: + if mockMsg.responseDelay > time.Duration(0) { + time.Sleep(mockMsg.responseDelay) + } + + switch any(mockMsg.message).(type) { + case *sentry.InboundMessage: + msg, ok := msg.(*sentry.InboundMessage) + if !ok { + return errors.New("unexpected msg type") + } + + mockMsg := any(mockMsg.message).(*sentry.InboundMessage) + msg.Id = mockMsg.Id + msg.Data = mockMsg.Data + msg.PeerId = mockMsg.PeerId + case *sentry.PeerEvent: + msg, ok := msg.(*sentry.PeerEvent) + if !ok { + return errors.New("unexpected msg type") + } + + mockMsg := any(mockMsg.message).(*sentry.PeerEvent) + msg.PeerId = mockMsg.PeerId + msg.EventId = mockMsg.EventId + default: + return errors.New("unsupported type") + } + + return nil + } +} + +func newMockBlockHeadersPacket66Bytes(t *testing.T, requestId uint64, numHeaders int) []byte { + headers := newMockBlockHeaders(numHeaders) + return blockHeadersPacket66Bytes(t, requestId, headers) +} + +func newMockBlockHeaders(numHeaders int) []*types.Header { + headers := make([]*types.Header, numHeaders) + var parentHeader *types.Header + for i := range headers { + var parentHash common.Hash + if parentHeader != nil { + parentHash = parentHeader.Hash() + } + + headers[i] = &types.Header{ + Number: big.NewInt(int64(i) + 1), + ParentHash: parentHash, + } + + parentHeader = headers[i] + } + + return headers +} + +func blockHeadersPacket66Bytes(t *testing.T, requestId uint64, headers []*types.Header) []byte { + blockHeadersPacket66 := eth.BlockHeadersPacket66{ + RequestId: requestId, + BlockHeadersPacket: headers, + } + blockHeadersPacket66Bytes, err := rlp.EncodeToBytes(&blockHeadersPacket66) + require.NoError(t, err) + return blockHeadersPacket66Bytes +} + +func newMockNewBlockPacketBytes(t *testing.T) []byte { + newBlockPacket := eth.NewBlockPacket{ + Block: types.NewBlock(newMockBlockHeaders(1)[0], nil, nil, nil, nil), + } + newBlockPacketBytes, err := rlp.EncodeToBytes(&newBlockPacket) + require.NoError(t, err) + return newBlockPacketBytes +} + +func newMockNewBlockHashesPacketBytes(t *testing.T) []byte { + newBlockHashesPacket := eth.NewBlockHashesPacket{ + { + Number: 1, + }, + } + newBlockHashesPacketBytes, err := rlp.EncodeToBytes(&newBlockHashesPacket) + require.NoError(t, err) + return newBlockHashesPacketBytes +} + +func newMockBlockBodiesPacketBytes(t *testing.T, requestId uint64, bodies ...*types.Body) []byte { + newBlockHashesPacket := eth.BlockBodiesPacket66{ + RequestId: requestId, + BlockBodiesPacket: bodies, + } + newBlockHashesPacketBytes, err := rlp.EncodeToBytes(&newBlockHashesPacket) + require.NoError(t, err) + return newBlockHashesPacketBytes +} + +func mockExpectPenalizePeer(t *testing.T, sentryClient *direct.MockSentryClient, peerId *PeerId) { + sentryClient.EXPECT(). + PenalizePeer(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, req *sentry.PenalizePeerRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + require.Equal(t, peerId, PeerIdFromH512(req.PeerId)) + return &emptypb.Empty{}, nil + }). + Times(1) +} diff --git a/polygon/p2p/message_sender.go b/polygon/p2p/message_sender.go new file mode 100644 index 00000000000..647a0ac6852 --- /dev/null +++ b/polygon/p2p/message_sender.go @@ -0,0 +1,59 @@ +package p2p + +import ( + "context" + "errors" + + "github.com/ledgerwatch/erigon-lib/direct" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon/eth/protocols/eth" + "github.com/ledgerwatch/erigon/rlp" +) + +var ErrPeerNotFound = errors.New("peer not found") + +type MessageSender interface { + SendGetBlockHeaders(ctx context.Context, peerId *PeerId, req eth.GetBlockHeadersPacket66) error + SendGetBlockBodies(ctx context.Context, peerId *PeerId, req eth.GetBlockBodiesPacket66) error +} + +func NewMessageSender(sentryClient direct.SentryClient) MessageSender { + return &messageSender{ + sentryClient: sentryClient, + } +} + +type messageSender struct { + sentryClient direct.SentryClient +} + +func (ms *messageSender) SendGetBlockHeaders(ctx context.Context, peerId *PeerId, req eth.GetBlockHeadersPacket66) error { + return ms.sendMessage(ctx, sentry.MessageId_GET_BLOCK_HEADERS_66, req, peerId) +} + +func (ms *messageSender) SendGetBlockBodies(ctx context.Context, peerId *PeerId, req eth.GetBlockBodiesPacket66) error { + return ms.sendMessage(ctx, sentry.MessageId_GET_BLOCK_BODIES_66, req, peerId) +} + +func (ms *messageSender) sendMessage(ctx context.Context, messageId sentry.MessageId, data any, peerId *PeerId) error { + rlpData, err := rlp.EncodeToBytes(data) + if err != nil { + return err + } + + sent, err := ms.sentryClient.SendMessageById(ctx, &sentry.SendMessageByIdRequest{ + PeerId: peerId.H512(), + Data: &sentry.OutboundMessageData{ + Id: messageId, + Data: rlpData, + }, + }) + if err != nil { + return err + } + if len(sent.Peers) == 0 { + return ErrPeerNotFound + } + + return nil +} diff --git a/polygon/p2p/message_sender_test.go b/polygon/p2p/message_sender_test.go new file mode 100644 index 00000000000..6909bb0e5f2 --- /dev/null +++ b/polygon/p2p/message_sender_test.go @@ -0,0 +1,122 @@ +package p2p + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + "google.golang.org/grpc" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/direct" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + erigonlibtypes "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + "github.com/ledgerwatch/erigon/eth/protocols/eth" + "github.com/ledgerwatch/erigon/rlp" +) + +func TestMessageSenderSendGetBlockHeaders(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + sentryClient := direct.NewMockSentryClient(ctrl) + sentryClient.EXPECT(). + SendMessageById(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, request *sentry.SendMessageByIdRequest, _ ...grpc.CallOption) (*sentry.SentPeers, error) { + require.Equal(t, PeerIdFromUint64(123), PeerIdFromH512(request.PeerId)) + require.Equal(t, sentry.MessageId_GET_BLOCK_HEADERS_66, request.Data.Id) + var payload eth.GetBlockHeadersPacket66 + err := rlp.DecodeBytes(request.Data.Data, &payload) + require.NoError(t, err) + require.Equal(t, uint64(10), payload.RequestId) + require.Equal(t, uint64(3), payload.Origin.Number) + require.Equal(t, uint64(5), payload.Amount) + return &sentry.SentPeers{ + Peers: []*erigonlibtypes.H512{ + PeerIdFromUint64(123).H512(), + }, + }, nil + }). + Times(1) + + messageSender := NewMessageSender(sentryClient) + err := messageSender.SendGetBlockHeaders(ctx, PeerIdFromUint64(123), eth.GetBlockHeadersPacket66{ + RequestId: 10, + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Number: 3, + }, + Amount: 5, + }, + }) + require.NoError(t, err) +} + +func TestMessageSenderSendGetBlockHeadersErrPeerNotFound(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + sentryClient := direct.NewMockSentryClient(ctrl) + sentryClient.EXPECT(). + SendMessageById(gomock.Any(), gomock.Any(), gomock.Any()). + Return(&sentry.SentPeers{}, nil). + Times(1) + + messageSender := NewMessageSender(sentryClient) + err := messageSender.SendGetBlockHeaders(ctx, PeerIdFromUint64(123), eth.GetBlockHeadersPacket66{ + RequestId: 10, + GetBlockHeadersPacket: ð.GetBlockHeadersPacket{ + Origin: eth.HashOrNumber{ + Number: 3, + }, + Amount: 5, + }, + }) + require.ErrorIs(t, err, ErrPeerNotFound) +} + +func TestMessageSenderSendGetBlockBodies(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + sentryClient := direct.NewMockSentryClient(ctrl) + sentryClient.EXPECT(). + SendMessageById(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(_ context.Context, request *sentry.SendMessageByIdRequest, _ ...grpc.CallOption) (*sentry.SentPeers, error) { + require.Equal(t, PeerIdFromUint64(123), PeerIdFromH512(request.PeerId)) + require.Equal(t, sentry.MessageId_GET_BLOCK_BODIES_66, request.Data.Id) + var payload eth.GetBlockBodiesPacket66 + err := rlp.DecodeBytes(request.Data.Data, &payload) + require.NoError(t, err) + require.Equal(t, uint64(10), payload.RequestId) + require.Len(t, payload.GetBlockBodiesPacket, 1) + return &sentry.SentPeers{ + Peers: []*erigonlibtypes.H512{ + PeerIdFromUint64(123).H512(), + }, + }, nil + }). + Times(1) + + messageSender := NewMessageSender(sentryClient) + err := messageSender.SendGetBlockBodies(ctx, PeerIdFromUint64(123), eth.GetBlockBodiesPacket66{ + RequestId: 10, + GetBlockBodiesPacket: []common.Hash{common.HexToHash("hi")}, + }) + require.NoError(t, err) +} + +func TestMessageSenderSendGetBlockBodiesErrPeerNotFound(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + sentryClient := direct.NewMockSentryClient(ctrl) + sentryClient.EXPECT(). + SendMessageById(gomock.Any(), gomock.Any(), gomock.Any()). + Return(&sentry.SentPeers{}, nil). + Times(1) + + messageSender := NewMessageSender(sentryClient) + err := messageSender.SendGetBlockBodies(ctx, PeerIdFromUint64(123), eth.GetBlockBodiesPacket66{ + RequestId: 10, + GetBlockBodiesPacket: []common.Hash{common.HexToHash("hi")}, + }) + require.ErrorIs(t, err, ErrPeerNotFound) +} diff --git a/polygon/p2p/peer_id.go b/polygon/p2p/peer_id.go new file mode 100644 index 00000000000..b757994fa8d --- /dev/null +++ b/polygon/p2p/peer_id.go @@ -0,0 +1,35 @@ +package p2p + +import ( + "encoding/binary" + "encoding/hex" + + "github.com/ledgerwatch/erigon-lib/gointerfaces" + erigonlibtypes "github.com/ledgerwatch/erigon-lib/gointerfaces/types" +) + +func PeerIdFromH512(h512 *erigonlibtypes.H512) *PeerId { + peerId := PeerId(gointerfaces.ConvertH512ToHash(h512)) + return &peerId +} + +// PeerIdFromUint64 is useful for testing and that is its main intended purpose +func PeerIdFromUint64(num uint64) *PeerId { + peerId := PeerId{} + binary.BigEndian.PutUint64(peerId[:8], num) + return &peerId +} + +type PeerId [64]byte + +func (pid *PeerId) H512() *erigonlibtypes.H512 { + return gointerfaces.ConvertHashToH512(*pid) +} + +func (pid *PeerId) String() string { + return hex.EncodeToString(pid[:]) +} + +func (pid *PeerId) Equal(other *PeerId) bool { + return *pid == *other +} diff --git a/polygon/p2p/peer_penalizer.go b/polygon/p2p/peer_penalizer.go new file mode 100644 index 00000000000..baec519723b --- /dev/null +++ b/polygon/p2p/peer_penalizer.go @@ -0,0 +1,31 @@ +package p2p + +import ( + "context" + + "github.com/ledgerwatch/erigon-lib/direct" + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" +) + +type PeerPenalizer interface { + Penalize(ctx context.Context, peerId *PeerId) error +} + +func NewPeerPenalizer(sentryClient direct.SentryClient) PeerPenalizer { + return &peerPenalizer{ + sentryClient: sentryClient, + } +} + +type peerPenalizer struct { + sentryClient direct.SentryClient +} + +func (p *peerPenalizer) Penalize(ctx context.Context, peerId *PeerId) error { + _, err := p.sentryClient.PenalizePeer(ctx, &sentry.PenalizePeerRequest{ + PeerId: peerId.H512(), + Penalty: sentry.PenaltyKind_Kick, + }) + + return err +} diff --git a/polygon/p2p/peer_shuffle.go b/polygon/p2p/peer_shuffle.go new file mode 100644 index 00000000000..44d58b2ea3e --- /dev/null +++ b/polygon/p2p/peer_shuffle.go @@ -0,0 +1,13 @@ +package p2p + +import "github.com/ledgerwatch/erigon-lib/common" + +type PeerShuffle func(peerIds []*PeerId) + +func RandPeerShuffle(peerIds []*PeerId) { + common.SliceShuffle(peerIds) +} + +func PreservingPeerShuffle(_ []*PeerId) { + // no-op +} diff --git a/polygon/p2p/peer_sync_progress.go b/polygon/p2p/peer_sync_progress.go new file mode 100644 index 00000000000..0d60dc75390 --- /dev/null +++ b/polygon/p2p/peer_sync_progress.go @@ -0,0 +1,41 @@ +package p2p + +import "time" + +const missingBlockNumExpiry = time.Hour + +type peerSyncProgress struct { + peerId *PeerId + minMissingBlockNum uint64 + minMissingBlockNumTs time.Time +} + +func (psp *peerSyncProgress) blockNumPresent(blockNum uint64) { + if psp.minMissingBlockNum <= blockNum { + psp.minMissingBlockNum = 0 + psp.minMissingBlockNumTs = time.Time{} + } +} + +func (psp *peerSyncProgress) blockNumMissing(blockNum uint64) { + if psp.minMissingBlockNum >= blockNum || psp.minMissingBlockNumTsExpired() { + psp.minMissingBlockNum = blockNum + psp.minMissingBlockNumTs = time.Now() + } +} + +func (psp *peerSyncProgress) peerMayHaveBlockNum(blockNum uint64) bool { + // Currently, we simplify the problem by assuming that if a peer does not have block X + // then it does not have any blocks >= X for some time Y. In some time Y we can try again to + // see if it has blocks >= X. This works ok for the purposes of the initial sync. + // In the future we can explore more sophisticated heuristics and keep track of more parameters if needed. + if psp.minMissingBlockNumTsExpired() || psp.minMissingBlockNum == 0 { + return true + } + + return blockNum < psp.minMissingBlockNum +} + +func (psp *peerSyncProgress) minMissingBlockNumTsExpired() bool { + return time.Now().After(psp.minMissingBlockNumTs.Add(missingBlockNumExpiry)) +} diff --git a/polygon/p2p/peer_sync_progress_test.go b/polygon/p2p/peer_sync_progress_test.go new file mode 100644 index 00000000000..2151c289d3d --- /dev/null +++ b/polygon/p2p/peer_sync_progress_test.go @@ -0,0 +1,41 @@ +package p2p + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestPeerMayHaveBlockNum(t *testing.T) { + t.Parallel() + + psp := peerSyncProgress{ + peerId: PeerIdFromUint64(1), + } + + // base cases + require.True(t, psp.peerMayHaveBlockNum(0)) + require.True(t, psp.peerMayHaveBlockNum(1_000)) + + psp.blockNumMissing(501) + require.True(t, psp.peerMayHaveBlockNum(0)) + require.True(t, psp.peerMayHaveBlockNum(200)) + require.True(t, psp.peerMayHaveBlockNum(500)) + require.False(t, psp.peerMayHaveBlockNum(501)) + require.False(t, psp.peerMayHaveBlockNum(1_000)) + + // expired timestamp + psp.minMissingBlockNumTs = psp.minMissingBlockNumTs.Add(-missingBlockNumExpiry).Add(-time.Second) + require.True(t, psp.peerMayHaveBlockNum(0)) + require.True(t, psp.peerMayHaveBlockNum(200)) + require.True(t, psp.peerMayHaveBlockNum(500)) + require.True(t, psp.peerMayHaveBlockNum(501)) + require.True(t, psp.peerMayHaveBlockNum(1_000)) + + // block num present clears previous missing block num if >= missing block num + psp.blockNumMissing(700) + require.False(t, psp.peerMayHaveBlockNum(700)) + psp.blockNumPresent(800) + require.True(t, psp.peerMayHaveBlockNum(700)) +} diff --git a/polygon/p2p/peer_tracker.go b/polygon/p2p/peer_tracker.go new file mode 100644 index 00000000000..9ec620f604e --- /dev/null +++ b/polygon/p2p/peer_tracker.go @@ -0,0 +1,108 @@ +package p2p + +import ( + "sync" + + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" +) + +type PeerTracker interface { + ListPeersMayHaveBlockNum(blockNum uint64) []*PeerId + BlockNumPresent(peerId *PeerId, blockNum uint64) + BlockNumMissing(peerId *PeerId, blockNum uint64) + PeerConnected(peerId *PeerId) + PeerDisconnected(peerId *PeerId) +} + +func NewPeerTracker() PeerTracker { + return newPeerTracker(RandPeerShuffle) +} + +func newPeerTracker(peerShuffle PeerShuffle) *peerTracker { + return &peerTracker{ + peerSyncProgresses: map[PeerId]*peerSyncProgress{}, + peerShuffle: peerShuffle, + } +} + +type peerTracker struct { + mu sync.Mutex + peerSyncProgresses map[PeerId]*peerSyncProgress + peerShuffle PeerShuffle +} + +func (pt *peerTracker) ListPeersMayHaveBlockNum(blockNum uint64) []*PeerId { + pt.mu.Lock() + defer pt.mu.Unlock() + + var peerIds []*PeerId + for _, peerSyncProgress := range pt.peerSyncProgresses { + if peerSyncProgress.peerMayHaveBlockNum(blockNum) { + peerIds = append(peerIds, peerSyncProgress.peerId) + } + } + + pt.peerShuffle(peerIds) + + return peerIds +} + +func (pt *peerTracker) BlockNumPresent(peerId *PeerId, blockNum uint64) { + pt.updatePeerSyncProgress(peerId, func(psp *peerSyncProgress) { + psp.blockNumPresent(blockNum) + }) +} + +func (pt *peerTracker) BlockNumMissing(peerId *PeerId, blockNum uint64) { + pt.updatePeerSyncProgress(peerId, func(psp *peerSyncProgress) { + psp.blockNumMissing(blockNum) + }) +} + +func (pt *peerTracker) PeerDisconnected(peerId *PeerId) { + pt.mu.Lock() + defer pt.mu.Unlock() + + delete(pt.peerSyncProgresses, *peerId) +} + +func (pt *peerTracker) PeerConnected(peerId *PeerId) { + pt.mu.Lock() + defer pt.mu.Unlock() + + peerIdVal := *peerId + if _, ok := pt.peerSyncProgresses[peerIdVal]; !ok { + pt.peerSyncProgresses[peerIdVal] = &peerSyncProgress{ + peerId: peerId, + } + } +} + +func (pt *peerTracker) updatePeerSyncProgress(peerId *PeerId, update func(psp *peerSyncProgress)) { + pt.mu.Lock() + defer pt.mu.Unlock() + + peerSyncProgress, ok := pt.peerSyncProgresses[*peerId] + if !ok { + return + } + + update(peerSyncProgress) +} + +func NewPeerEventObserver(logger log.Logger, peerTracker PeerTracker) MessageObserver[*sentry.PeerEvent] { + return func(message *sentry.PeerEvent) { + peerId := PeerIdFromH512(message.PeerId) + + logger.Debug("[p2p.peerEventObserver] received new peer event", "id", message.EventId, "peerId", peerId) + + switch message.EventId { + case sentry.PeerEvent_Connect: + peerTracker.PeerConnected(peerId) + case sentry.PeerEvent_Disconnect: + peerTracker.PeerDisconnected(peerId) + } + } +} diff --git a/polygon/p2p/peer_tracker_test.go b/polygon/p2p/peer_tracker_test.go new file mode 100644 index 00000000000..a8aa8e4b5a7 --- /dev/null +++ b/polygon/p2p/peer_tracker_test.go @@ -0,0 +1,114 @@ +package p2p + +import ( + "context" + "encoding/binary" + "sort" + "testing" + "time" + + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + "github.com/ledgerwatch/erigon/turbo/testlog" +) + +func TestPeerTracker(t *testing.T) { + t.Parallel() + + peerTracker := newPeerTracker(PreservingPeerShuffle) + peerIds := peerTracker.ListPeersMayHaveBlockNum(100) + require.Len(t, peerIds, 0) + + peerTracker.PeerConnected(PeerIdFromUint64(1)) + peerTracker.PeerConnected(PeerIdFromUint64(2)) + peerIds = peerTracker.ListPeersMayHaveBlockNum(100) + require.Len(t, peerIds, 2) + sortPeerIdsAssumingUints(peerIds) + require.Equal(t, PeerIdFromUint64(1), peerIds[0]) + require.Equal(t, PeerIdFromUint64(2), peerIds[1]) + + peerTracker.BlockNumMissing(PeerIdFromUint64(1), 50) + peerIds = peerTracker.ListPeersMayHaveBlockNum(100) + require.Len(t, peerIds, 1) + require.Equal(t, PeerIdFromUint64(2), peerIds[0]) + + peerTracker.BlockNumPresent(PeerIdFromUint64(1), 100) + peerIds = peerTracker.ListPeersMayHaveBlockNum(100) + require.Len(t, peerIds, 2) + sortPeerIdsAssumingUints(peerIds) + require.Equal(t, PeerIdFromUint64(1), peerIds[0]) + require.Equal(t, PeerIdFromUint64(2), peerIds[1]) + + peerTracker.PeerDisconnected(PeerIdFromUint64(2)) + peerIds = peerTracker.ListPeersMayHaveBlockNum(100) + require.Len(t, peerIds, 1) + require.Equal(t, PeerIdFromUint64(1), peerIds[0]) +} + +func TestPeerTrackerPeerEventObserver(t *testing.T) { + t.Parallel() + + logger := testlog.Logger(t, log.LvlInfo) + peerTracker := newPeerTracker(PreservingPeerShuffle) + peerTrackerPeerEventObserver := NewPeerEventObserver(logger, peerTracker) + messageListenerTest := newMessageListenerTest(t) + messageListenerTest.mockSentryStreams() + messageListenerTest.run(func(ctx context.Context, t *testing.T) { + unregister := messageListenerTest.messageListener.RegisterPeerEventObserver(peerTrackerPeerEventObserver) + t.Cleanup(unregister) + + messageListenerTest.peerEventsStream <- &delayedMessage[*sentry.PeerEvent]{ + message: &sentry.PeerEvent{ + PeerId: PeerIdFromUint64(1).H512(), + EventId: sentry.PeerEvent_Connect, + }, + } + + messageListenerTest.peerEventsStream <- &delayedMessage[*sentry.PeerEvent]{ + message: &sentry.PeerEvent{ + PeerId: PeerIdFromUint64(2).H512(), + EventId: sentry.PeerEvent_Connect, + }, + } + + var peerIds []*PeerId + waitCond := func(wantPeerIdsLen int) func() bool { + return func() bool { + peerIds = peerTracker.ListPeersMayHaveBlockNum(100) + return len(peerIds) == wantPeerIdsLen + } + } + require.Eventually(t, waitCond(2), time.Second, 5*time.Millisecond) + require.Len(t, peerIds, 2) + sortPeerIdsAssumingUints(peerIds) + require.Equal(t, PeerIdFromUint64(1), peerIds[0]) + require.Equal(t, PeerIdFromUint64(2), peerIds[1]) + + messageListenerTest.peerEventsStream <- &delayedMessage[*sentry.PeerEvent]{ + message: &sentry.PeerEvent{ + PeerId: PeerIdFromUint64(1).H512(), + EventId: sentry.PeerEvent_Disconnect, + }, + } + + peerIds = peerTracker.ListPeersMayHaveBlockNum(100) + require.Eventually(t, waitCond(1), time.Second, 5*time.Millisecond) + require.Len(t, peerIds, 1) + require.Equal(t, PeerIdFromUint64(2), peerIds[0]) + }) +} + +// sortPeerIdsAssumingUints is a hacky way for us to sort peer ids in tests - assuming they are all created +// by using PeerIdFromUint64 and so uint64 value is sorted in first 8 bytes. Sorting is needed since +// ListPeersMayHaveBlockNum returns peer ids from a map and order is non-deterministic. +func sortPeerIdsAssumingUints(peerIds []*PeerId) { + sort.Slice(peerIds, func(i, j int) bool { + bytesI := peerIds[i][:8] + bytesJ := peerIds[j][:8] + numI := binary.BigEndian.Uint64(bytesI) + numJ := binary.BigEndian.Uint64(bytesJ) + return numI < numJ + }) +} diff --git a/polygon/p2p/service.go b/polygon/p2p/service.go new file mode 100644 index 00000000000..dfdf1135f16 --- /dev/null +++ b/polygon/p2p/service.go @@ -0,0 +1,72 @@ +package p2p + +import ( + "math/rand" + "time" + + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/direct" + sentrymulticlient "github.com/ledgerwatch/erigon/p2p/sentry/sentry_multi_client" +) + +//go:generate mockgen -typed=true -source=./service.go -destination=./service_mock.go -package=p2p . Service +type Service interface { + Fetcher + MessageListener + PeerTracker + PeerPenalizer + MaxPeers() int +} + +func NewService( + maxPeers int, + logger log.Logger, + sentryClient direct.SentryClient, + statusDataFactory sentrymulticlient.StatusDataFactory, +) Service { + fetcherConfig := FetcherConfig{ + responseTimeout: 5 * time.Second, + retryBackOff: 10 * time.Second, + maxRetries: 2, + } + + return newService(maxPeers, fetcherConfig, logger, sentryClient, statusDataFactory, rand.Uint64) +} + +func newService( + maxPeers int, + fetcherConfig FetcherConfig, + logger log.Logger, + sentryClient direct.SentryClient, + statusDataFactory sentrymulticlient.StatusDataFactory, + requestIdGenerator RequestIdGenerator, +) *service { + peerTracker := NewPeerTracker() + peerPenalizer := NewPeerPenalizer(sentryClient) + messageListener := NewMessageListener(logger, sentryClient, statusDataFactory, peerPenalizer) + messageListener.RegisterPeerEventObserver(NewPeerEventObserver(logger, peerTracker)) + messageSender := NewMessageSender(sentryClient) + fetcher := NewFetcher(fetcherConfig, messageListener, messageSender, requestIdGenerator) + fetcher = NewPenalizingFetcher(logger, fetcher, peerPenalizer) + fetcher = NewTrackingFetcher(fetcher, peerTracker) + return &service{ + Fetcher: fetcher, + MessageListener: messageListener, + PeerPenalizer: peerPenalizer, + PeerTracker: peerTracker, + maxPeers: maxPeers, + } +} + +type service struct { + Fetcher + MessageListener + PeerPenalizer + PeerTracker + maxPeers int +} + +func (s *service) MaxPeers() int { + return s.maxPeers +} diff --git a/polygon/p2p/service_mock.go b/polygon/p2p/service_mock.go new file mode 100644 index 00000000000..563c46309a6 --- /dev/null +++ b/polygon/p2p/service_mock.go @@ -0,0 +1,644 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./service.go +// +// Generated by this command: +// +// mockgen -typed=true -source=./service.go -destination=./service_mock.go -package=p2p . Service +// + +// Package p2p is a generated GoMock package. +package p2p + +import ( + context "context" + reflect "reflect" + + sentry "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" + types "github.com/ledgerwatch/erigon/core/types" + eth "github.com/ledgerwatch/erigon/eth/protocols/eth" + gomock "go.uber.org/mock/gomock" +) + +// MockService is a mock of Service interface. +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService. +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance. +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// BlockNumMissing mocks base method. +func (m *MockService) BlockNumMissing(peerId *PeerId, blockNum uint64) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "BlockNumMissing", peerId, blockNum) +} + +// BlockNumMissing indicates an expected call of BlockNumMissing. +func (mr *MockServiceMockRecorder) BlockNumMissing(peerId, blockNum any) *MockServiceBlockNumMissingCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockNumMissing", reflect.TypeOf((*MockService)(nil).BlockNumMissing), peerId, blockNum) + return &MockServiceBlockNumMissingCall{Call: call} +} + +// MockServiceBlockNumMissingCall wrap *gomock.Call +type MockServiceBlockNumMissingCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceBlockNumMissingCall) Return() *MockServiceBlockNumMissingCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceBlockNumMissingCall) Do(f func(*PeerId, uint64)) *MockServiceBlockNumMissingCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceBlockNumMissingCall) DoAndReturn(f func(*PeerId, uint64)) *MockServiceBlockNumMissingCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// BlockNumPresent mocks base method. +func (m *MockService) BlockNumPresent(peerId *PeerId, blockNum uint64) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "BlockNumPresent", peerId, blockNum) +} + +// BlockNumPresent indicates an expected call of BlockNumPresent. +func (mr *MockServiceMockRecorder) BlockNumPresent(peerId, blockNum any) *MockServiceBlockNumPresentCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockNumPresent", reflect.TypeOf((*MockService)(nil).BlockNumPresent), peerId, blockNum) + return &MockServiceBlockNumPresentCall{Call: call} +} + +// MockServiceBlockNumPresentCall wrap *gomock.Call +type MockServiceBlockNumPresentCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceBlockNumPresentCall) Return() *MockServiceBlockNumPresentCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceBlockNumPresentCall) Do(f func(*PeerId, uint64)) *MockServiceBlockNumPresentCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceBlockNumPresentCall) DoAndReturn(f func(*PeerId, uint64)) *MockServiceBlockNumPresentCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchBlocks mocks base method. +func (m *MockService) FetchBlocks(ctx context.Context, start, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Block], error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchBlocks", ctx, start, end, peerId) + ret0, _ := ret[0].(FetcherResponse[[]*types.Block]) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchBlocks indicates an expected call of FetchBlocks. +func (mr *MockServiceMockRecorder) FetchBlocks(ctx, start, end, peerId any) *MockServiceFetchBlocksCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchBlocks", reflect.TypeOf((*MockService)(nil).FetchBlocks), ctx, start, end, peerId) + return &MockServiceFetchBlocksCall{Call: call} +} + +// MockServiceFetchBlocksCall wrap *gomock.Call +type MockServiceFetchBlocksCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceFetchBlocksCall) Return(arg0 FetcherResponse[[]*types.Block], arg1 error) *MockServiceFetchBlocksCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceFetchBlocksCall) Do(f func(context.Context, uint64, uint64, *PeerId) (FetcherResponse[[]*types.Block], error)) *MockServiceFetchBlocksCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceFetchBlocksCall) DoAndReturn(f func(context.Context, uint64, uint64, *PeerId) (FetcherResponse[[]*types.Block], error)) *MockServiceFetchBlocksCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchBodies mocks base method. +func (m *MockService) FetchBodies(ctx context.Context, headers []*types.Header, peerId *PeerId) (FetcherResponse[[]*types.Body], error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchBodies", ctx, headers, peerId) + ret0, _ := ret[0].(FetcherResponse[[]*types.Body]) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchBodies indicates an expected call of FetchBodies. +func (mr *MockServiceMockRecorder) FetchBodies(ctx, headers, peerId any) *MockServiceFetchBodiesCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchBodies", reflect.TypeOf((*MockService)(nil).FetchBodies), ctx, headers, peerId) + return &MockServiceFetchBodiesCall{Call: call} +} + +// MockServiceFetchBodiesCall wrap *gomock.Call +type MockServiceFetchBodiesCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceFetchBodiesCall) Return(arg0 FetcherResponse[[]*types.Body], arg1 error) *MockServiceFetchBodiesCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceFetchBodiesCall) Do(f func(context.Context, []*types.Header, *PeerId) (FetcherResponse[[]*types.Body], error)) *MockServiceFetchBodiesCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceFetchBodiesCall) DoAndReturn(f func(context.Context, []*types.Header, *PeerId) (FetcherResponse[[]*types.Body], error)) *MockServiceFetchBodiesCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// FetchHeaders mocks base method. +func (m *MockService) FetchHeaders(ctx context.Context, start, end uint64, peerId *PeerId) (FetcherResponse[[]*types.Header], error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "FetchHeaders", ctx, start, end, peerId) + ret0, _ := ret[0].(FetcherResponse[[]*types.Header]) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchHeaders indicates an expected call of FetchHeaders. +func (mr *MockServiceMockRecorder) FetchHeaders(ctx, start, end, peerId any) *MockServiceFetchHeadersCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchHeaders", reflect.TypeOf((*MockService)(nil).FetchHeaders), ctx, start, end, peerId) + return &MockServiceFetchHeadersCall{Call: call} +} + +// MockServiceFetchHeadersCall wrap *gomock.Call +type MockServiceFetchHeadersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceFetchHeadersCall) Return(arg0 FetcherResponse[[]*types.Header], arg1 error) *MockServiceFetchHeadersCall { + c.Call = c.Call.Return(arg0, arg1) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceFetchHeadersCall) Do(f func(context.Context, uint64, uint64, *PeerId) (FetcherResponse[[]*types.Header], error)) *MockServiceFetchHeadersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceFetchHeadersCall) DoAndReturn(f func(context.Context, uint64, uint64, *PeerId) (FetcherResponse[[]*types.Header], error)) *MockServiceFetchHeadersCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// ListPeersMayHaveBlockNum mocks base method. +func (m *MockService) ListPeersMayHaveBlockNum(blockNum uint64) []*PeerId { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListPeersMayHaveBlockNum", blockNum) + ret0, _ := ret[0].([]*PeerId) + return ret0 +} + +// ListPeersMayHaveBlockNum indicates an expected call of ListPeersMayHaveBlockNum. +func (mr *MockServiceMockRecorder) ListPeersMayHaveBlockNum(blockNum any) *MockServiceListPeersMayHaveBlockNumCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPeersMayHaveBlockNum", reflect.TypeOf((*MockService)(nil).ListPeersMayHaveBlockNum), blockNum) + return &MockServiceListPeersMayHaveBlockNumCall{Call: call} +} + +// MockServiceListPeersMayHaveBlockNumCall wrap *gomock.Call +type MockServiceListPeersMayHaveBlockNumCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceListPeersMayHaveBlockNumCall) Return(arg0 []*PeerId) *MockServiceListPeersMayHaveBlockNumCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceListPeersMayHaveBlockNumCall) Do(f func(uint64) []*PeerId) *MockServiceListPeersMayHaveBlockNumCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceListPeersMayHaveBlockNumCall) DoAndReturn(f func(uint64) []*PeerId) *MockServiceListPeersMayHaveBlockNumCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// MaxPeers mocks base method. +func (m *MockService) MaxPeers() int { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MaxPeers") + ret0, _ := ret[0].(int) + return ret0 +} + +// MaxPeers indicates an expected call of MaxPeers. +func (mr *MockServiceMockRecorder) MaxPeers() *MockServiceMaxPeersCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MaxPeers", reflect.TypeOf((*MockService)(nil).MaxPeers)) + return &MockServiceMaxPeersCall{Call: call} +} + +// MockServiceMaxPeersCall wrap *gomock.Call +type MockServiceMaxPeersCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceMaxPeersCall) Return(arg0 int) *MockServiceMaxPeersCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceMaxPeersCall) Do(f func() int) *MockServiceMaxPeersCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceMaxPeersCall) DoAndReturn(f func() int) *MockServiceMaxPeersCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerConnected mocks base method. +func (m *MockService) PeerConnected(peerId *PeerId) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "PeerConnected", peerId) +} + +// PeerConnected indicates an expected call of PeerConnected. +func (mr *MockServiceMockRecorder) PeerConnected(peerId any) *MockServicePeerConnectedCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerConnected", reflect.TypeOf((*MockService)(nil).PeerConnected), peerId) + return &MockServicePeerConnectedCall{Call: call} +} + +// MockServicePeerConnectedCall wrap *gomock.Call +type MockServicePeerConnectedCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServicePeerConnectedCall) Return() *MockServicePeerConnectedCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServicePeerConnectedCall) Do(f func(*PeerId)) *MockServicePeerConnectedCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServicePeerConnectedCall) DoAndReturn(f func(*PeerId)) *MockServicePeerConnectedCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// PeerDisconnected mocks base method. +func (m *MockService) PeerDisconnected(peerId *PeerId) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "PeerDisconnected", peerId) +} + +// PeerDisconnected indicates an expected call of PeerDisconnected. +func (mr *MockServiceMockRecorder) PeerDisconnected(peerId any) *MockServicePeerDisconnectedCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerDisconnected", reflect.TypeOf((*MockService)(nil).PeerDisconnected), peerId) + return &MockServicePeerDisconnectedCall{Call: call} +} + +// MockServicePeerDisconnectedCall wrap *gomock.Call +type MockServicePeerDisconnectedCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServicePeerDisconnectedCall) Return() *MockServicePeerDisconnectedCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServicePeerDisconnectedCall) Do(f func(*PeerId)) *MockServicePeerDisconnectedCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServicePeerDisconnectedCall) DoAndReturn(f func(*PeerId)) *MockServicePeerDisconnectedCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Penalize mocks base method. +func (m *MockService) Penalize(ctx context.Context, peerId *PeerId) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Penalize", ctx, peerId) + ret0, _ := ret[0].(error) + return ret0 +} + +// Penalize indicates an expected call of Penalize. +func (mr *MockServiceMockRecorder) Penalize(ctx, peerId any) *MockServicePenalizeCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Penalize", reflect.TypeOf((*MockService)(nil).Penalize), ctx, peerId) + return &MockServicePenalizeCall{Call: call} +} + +// MockServicePenalizeCall wrap *gomock.Call +type MockServicePenalizeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServicePenalizeCall) Return(arg0 error) *MockServicePenalizeCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServicePenalizeCall) Do(f func(context.Context, *PeerId) error) *MockServicePenalizeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServicePenalizeCall) DoAndReturn(f func(context.Context, *PeerId) error) *MockServicePenalizeCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// RegisterBlockBodiesObserver mocks base method. +func (m *MockService) RegisterBlockBodiesObserver(observer MessageObserver[*DecodedInboundMessage[*eth.BlockBodiesPacket66]]) UnregisterFunc { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RegisterBlockBodiesObserver", observer) + ret0, _ := ret[0].(UnregisterFunc) + return ret0 +} + +// RegisterBlockBodiesObserver indicates an expected call of RegisterBlockBodiesObserver. +func (mr *MockServiceMockRecorder) RegisterBlockBodiesObserver(observer any) *MockServiceRegisterBlockBodiesObserverCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterBlockBodiesObserver", reflect.TypeOf((*MockService)(nil).RegisterBlockBodiesObserver), observer) + return &MockServiceRegisterBlockBodiesObserverCall{Call: call} +} + +// MockServiceRegisterBlockBodiesObserverCall wrap *gomock.Call +type MockServiceRegisterBlockBodiesObserverCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceRegisterBlockBodiesObserverCall) Return(arg0 UnregisterFunc) *MockServiceRegisterBlockBodiesObserverCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceRegisterBlockBodiesObserverCall) Do(f func(MessageObserver[*DecodedInboundMessage[*eth.BlockBodiesPacket66]]) UnregisterFunc) *MockServiceRegisterBlockBodiesObserverCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceRegisterBlockBodiesObserverCall) DoAndReturn(f func(MessageObserver[*DecodedInboundMessage[*eth.BlockBodiesPacket66]]) UnregisterFunc) *MockServiceRegisterBlockBodiesObserverCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// RegisterBlockHeadersObserver mocks base method. +func (m *MockService) RegisterBlockHeadersObserver(observer MessageObserver[*DecodedInboundMessage[*eth.BlockHeadersPacket66]]) UnregisterFunc { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RegisterBlockHeadersObserver", observer) + ret0, _ := ret[0].(UnregisterFunc) + return ret0 +} + +// RegisterBlockHeadersObserver indicates an expected call of RegisterBlockHeadersObserver. +func (mr *MockServiceMockRecorder) RegisterBlockHeadersObserver(observer any) *MockServiceRegisterBlockHeadersObserverCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterBlockHeadersObserver", reflect.TypeOf((*MockService)(nil).RegisterBlockHeadersObserver), observer) + return &MockServiceRegisterBlockHeadersObserverCall{Call: call} +} + +// MockServiceRegisterBlockHeadersObserverCall wrap *gomock.Call +type MockServiceRegisterBlockHeadersObserverCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceRegisterBlockHeadersObserverCall) Return(arg0 UnregisterFunc) *MockServiceRegisterBlockHeadersObserverCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceRegisterBlockHeadersObserverCall) Do(f func(MessageObserver[*DecodedInboundMessage[*eth.BlockHeadersPacket66]]) UnregisterFunc) *MockServiceRegisterBlockHeadersObserverCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceRegisterBlockHeadersObserverCall) DoAndReturn(f func(MessageObserver[*DecodedInboundMessage[*eth.BlockHeadersPacket66]]) UnregisterFunc) *MockServiceRegisterBlockHeadersObserverCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// RegisterNewBlockHashesObserver mocks base method. +func (m *MockService) RegisterNewBlockHashesObserver(observer MessageObserver[*DecodedInboundMessage[*eth.NewBlockHashesPacket]]) UnregisterFunc { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RegisterNewBlockHashesObserver", observer) + ret0, _ := ret[0].(UnregisterFunc) + return ret0 +} + +// RegisterNewBlockHashesObserver indicates an expected call of RegisterNewBlockHashesObserver. +func (mr *MockServiceMockRecorder) RegisterNewBlockHashesObserver(observer any) *MockServiceRegisterNewBlockHashesObserverCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterNewBlockHashesObserver", reflect.TypeOf((*MockService)(nil).RegisterNewBlockHashesObserver), observer) + return &MockServiceRegisterNewBlockHashesObserverCall{Call: call} +} + +// MockServiceRegisterNewBlockHashesObserverCall wrap *gomock.Call +type MockServiceRegisterNewBlockHashesObserverCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceRegisterNewBlockHashesObserverCall) Return(arg0 UnregisterFunc) *MockServiceRegisterNewBlockHashesObserverCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceRegisterNewBlockHashesObserverCall) Do(f func(MessageObserver[*DecodedInboundMessage[*eth.NewBlockHashesPacket]]) UnregisterFunc) *MockServiceRegisterNewBlockHashesObserverCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceRegisterNewBlockHashesObserverCall) DoAndReturn(f func(MessageObserver[*DecodedInboundMessage[*eth.NewBlockHashesPacket]]) UnregisterFunc) *MockServiceRegisterNewBlockHashesObserverCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// RegisterNewBlockObserver mocks base method. +func (m *MockService) RegisterNewBlockObserver(observer MessageObserver[*DecodedInboundMessage[*eth.NewBlockPacket]]) UnregisterFunc { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RegisterNewBlockObserver", observer) + ret0, _ := ret[0].(UnregisterFunc) + return ret0 +} + +// RegisterNewBlockObserver indicates an expected call of RegisterNewBlockObserver. +func (mr *MockServiceMockRecorder) RegisterNewBlockObserver(observer any) *MockServiceRegisterNewBlockObserverCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterNewBlockObserver", reflect.TypeOf((*MockService)(nil).RegisterNewBlockObserver), observer) + return &MockServiceRegisterNewBlockObserverCall{Call: call} +} + +// MockServiceRegisterNewBlockObserverCall wrap *gomock.Call +type MockServiceRegisterNewBlockObserverCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceRegisterNewBlockObserverCall) Return(arg0 UnregisterFunc) *MockServiceRegisterNewBlockObserverCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceRegisterNewBlockObserverCall) Do(f func(MessageObserver[*DecodedInboundMessage[*eth.NewBlockPacket]]) UnregisterFunc) *MockServiceRegisterNewBlockObserverCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceRegisterNewBlockObserverCall) DoAndReturn(f func(MessageObserver[*DecodedInboundMessage[*eth.NewBlockPacket]]) UnregisterFunc) *MockServiceRegisterNewBlockObserverCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// RegisterPeerEventObserver mocks base method. +func (m *MockService) RegisterPeerEventObserver(observer MessageObserver[*sentry.PeerEvent]) UnregisterFunc { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RegisterPeerEventObserver", observer) + ret0, _ := ret[0].(UnregisterFunc) + return ret0 +} + +// RegisterPeerEventObserver indicates an expected call of RegisterPeerEventObserver. +func (mr *MockServiceMockRecorder) RegisterPeerEventObserver(observer any) *MockServiceRegisterPeerEventObserverCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterPeerEventObserver", reflect.TypeOf((*MockService)(nil).RegisterPeerEventObserver), observer) + return &MockServiceRegisterPeerEventObserverCall{Call: call} +} + +// MockServiceRegisterPeerEventObserverCall wrap *gomock.Call +type MockServiceRegisterPeerEventObserverCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceRegisterPeerEventObserverCall) Return(arg0 UnregisterFunc) *MockServiceRegisterPeerEventObserverCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceRegisterPeerEventObserverCall) Do(f func(MessageObserver[*sentry.PeerEvent]) UnregisterFunc) *MockServiceRegisterPeerEventObserverCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceRegisterPeerEventObserverCall) DoAndReturn(f func(MessageObserver[*sentry.PeerEvent]) UnregisterFunc) *MockServiceRegisterPeerEventObserverCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Run mocks base method. +func (m *MockService) Run(ctx context.Context) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "Run", ctx) +} + +// Run indicates an expected call of Run. +func (mr *MockServiceMockRecorder) Run(ctx any) *MockServiceRunCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockService)(nil).Run), ctx) + return &MockServiceRunCall{Call: call} +} + +// MockServiceRunCall wrap *gomock.Call +type MockServiceRunCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockServiceRunCall) Return() *MockServiceRunCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockServiceRunCall) Do(f func(context.Context)) *MockServiceRunCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockServiceRunCall) DoAndReturn(f func(context.Context)) *MockServiceRunCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/polygon/sync/accumulated_headers_verifier.go b/polygon/sync/accumulated_headers_verifier.go new file mode 100644 index 00000000000..97b8043691c --- /dev/null +++ b/polygon/sync/accumulated_headers_verifier.go @@ -0,0 +1,23 @@ +package sync + +import ( + "bytes" + "fmt" + + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/polygon/bor" + "github.com/ledgerwatch/erigon/polygon/heimdall" +) + +type AccumulatedHeadersVerifier func(waypoint heimdall.Waypoint, headers []*types.Header) error + +func VerifyAccumulatedHeaders(waypoint heimdall.Waypoint, headers []*types.Header) error { + rootHash, err := bor.ComputeHeadersRootHash(headers) + if err != nil { + return fmt.Errorf("VerifyAccumulatedHeaders: failed to compute headers root hash %w", err) + } + if !bytes.Equal(rootHash, waypoint.RootHash().Bytes()) { + return fmt.Errorf("VerifyAccumulatedHeaders: bad headers root hash") + } + return nil +} diff --git a/polygon/sync/block_downloader.go b/polygon/sync/block_downloader.go new file mode 100644 index 00000000000..613fa8710af --- /dev/null +++ b/polygon/sync/block_downloader.go @@ -0,0 +1,325 @@ +package sync + +import ( + "context" + "errors" + "fmt" + "reflect" + "sync" + "sync/atomic" + "time" + + "github.com/c2h5oh/datasize" + lru "github.com/hashicorp/golang-lru/v2" + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/cmp" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/ethconfig/estimate" + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/polygon/p2p" +) + +const ( + notEnoughPeersBackOffDuration = time.Minute + + // conservative over-estimation: 1 MB block size x 1024 blocks per waypoint + blockDownloaderEstimatedRamPerWorker = estimate.EstimatedRamPerWorker(1 * datasize.GB) +) + +type BlockDownloader interface { + DownloadBlocksUsingCheckpoints(ctx context.Context, start uint64) (tip *types.Header, err error) + DownloadBlocksUsingMilestones(ctx context.Context, start uint64) (tip *types.Header, err error) +} + +func NewBlockDownloader( + logger log.Logger, + p2pService p2p.Service, + heimdall heimdall.HeimdallNoStore, + headersVerifier AccumulatedHeadersVerifier, + blocksVerifier BlocksVerifier, + storage Storage, +) BlockDownloader { + return newBlockDownloader( + logger, + p2pService, + heimdall, + headersVerifier, + blocksVerifier, + storage, + notEnoughPeersBackOffDuration, + blockDownloaderEstimatedRamPerWorker.WorkersByRAMOnly(), + ) +} + +func newBlockDownloader( + logger log.Logger, + p2pService p2p.Service, + heimdall heimdall.HeimdallNoStore, + headersVerifier AccumulatedHeadersVerifier, + blocksVerifier BlocksVerifier, + storage Storage, + notEnoughPeersBackOffDuration time.Duration, + maxWorkers int, +) *blockDownloader { + return &blockDownloader{ + logger: logger, + p2pService: p2pService, + heimdall: heimdall, + headersVerifier: headersVerifier, + blocksVerifier: blocksVerifier, + storage: storage, + notEnoughPeersBackOffDuration: notEnoughPeersBackOffDuration, + maxWorkers: maxWorkers, + } +} + +type blockDownloader struct { + logger log.Logger + p2pService p2p.Service + heimdall heimdall.HeimdallNoStore + headersVerifier AccumulatedHeadersVerifier + blocksVerifier BlocksVerifier + storage Storage + notEnoughPeersBackOffDuration time.Duration + maxWorkers int +} + +func (d *blockDownloader) DownloadBlocksUsingCheckpoints(ctx context.Context, start uint64) (*types.Header, error) { + waypoints, err := d.heimdall.FetchCheckpointsFromBlock(ctx, start) + if err != nil { + return nil, err + } + + return d.downloadBlocksUsingWaypoints(ctx, waypoints) +} + +func (d *blockDownloader) DownloadBlocksUsingMilestones(ctx context.Context, start uint64) (*types.Header, error) { + waypoints, err := d.heimdall.FetchMilestonesFromBlock(ctx, start) + if err != nil { + return nil, err + } + + return d.downloadBlocksUsingWaypoints(ctx, waypoints) +} + +func (d *blockDownloader) downloadBlocksUsingWaypoints(ctx context.Context, waypoints heimdall.Waypoints) (*types.Header, error) { + if len(waypoints) == 0 { + return nil, nil + } + + d.logger.Debug( + syncLogPrefix("downloading blocks using waypoints"), + "waypointsLen", len(waypoints), + "start", waypoints[0].StartBlock().Uint64(), + "end", waypoints[len(waypoints)-1].EndBlock().Uint64(), + "kind", reflect.TypeOf(waypoints[0]), + ) + + // waypoint rootHash->[blocks part of waypoint] + waypointBlocksMemo, err := lru.New[common.Hash, []*types.Block](d.p2pService.MaxPeers()) + if err != nil { + return nil, err + } + + progressLogTicker := time.NewTicker(30 * time.Second) + defer progressLogTicker.Stop() + + var lastBlock *types.Block + batchFetchStartTime := time.Now() + fetchStartTime := time.Now() + var blockCount, blocksTotalSize atomic.Uint64 + + for len(waypoints) > 0 { + select { + case <-ctx.Done(): + return nil, ctx.Err() + default: + // carry-on + } + + endBlockNum := waypoints[len(waypoints)-1].EndBlock().Uint64() + peers := d.p2pService.ListPeersMayHaveBlockNum(endBlockNum) + if len(peers) == 0 { + d.logger.Warn( + syncLogPrefix("can't use any peers to download blocks, will try again in a bit"), + "start", waypoints[0].StartBlock(), + "end", endBlockNum, + "sleepSeconds", d.notEnoughPeersBackOffDuration.Seconds(), + ) + + time.Sleep(d.notEnoughPeersBackOffDuration) + continue + } + + numWorkers := cmp.Min(cmp.Min(d.maxWorkers, len(peers)), len(waypoints)) + waypointsBatch := waypoints[:numWorkers] + + select { + case <-progressLogTicker.C: + d.logger.Info( + syncLogPrefix("downloading blocks progress"), + "waypointsBatchLength", len(waypointsBatch), + "startBlockNum", waypointsBatch[0].StartBlock(), + "endBlockNum", waypointsBatch[len(waypointsBatch)-1].EndBlock(), + "kind", reflect.TypeOf(waypointsBatch[0]), + "peerCount", len(peers), + "maxWorkers", d.maxWorkers, + "blk/s", fmt.Sprintf("%.2f", float64(blockCount.Load())/time.Since(fetchStartTime).Seconds()), + "bytes/s", fmt.Sprintf("%s", common.ByteCount(uint64(float64(blocksTotalSize.Load())/time.Since(fetchStartTime).Seconds()))), + ) + + blockCount.Store(0) + blocksTotalSize.Store(0) + fetchStartTime = time.Now() + + default: + // carry on + } + + blockBatches := make([][]*types.Block, len(waypointsBatch)) + maxWaypointLength := uint64(0) + wg := sync.WaitGroup{} + for i, waypoint := range waypointsBatch { + maxWaypointLength = cmp.Max(waypoint.Length(), maxWaypointLength) + wg.Add(1) + go func(i int, waypoint heimdall.Waypoint, peerId *p2p.PeerId) { + defer wg.Done() + + if blocks, ok := waypointBlocksMemo.Get(waypoint.RootHash()); ok { + blockBatches[i] = blocks + return + } + + blocks, totalSize, err := d.fetchVerifiedBlocks(ctx, waypoint, peerId) + if err != nil { + d.logger.Debug( + syncLogPrefix("issue downloading waypoint blocks - will try again"), + "err", err, + "start", waypoint.StartBlock(), + "end", waypoint.EndBlock(), + "rootHash", waypoint.RootHash(), + "kind", reflect.TypeOf(waypoint), + "peerId", peerId, + ) + + return + } + + blocksTotalSize.Add(uint64(totalSize)) + blockCount.Add(uint64(len(blocks))) + + waypointBlocksMemo.Add(waypoint.RootHash(), blocks) + blockBatches[i] = blocks + }(i, waypoint, peers[i]) + } + + wg.Wait() + blocks := make([]*types.Block, 0, int(maxWaypointLength)*len(waypointsBatch)) + gapIndex := -1 + for i, blockBatch := range blockBatches { + if len(blockBatch) == 0 { + d.logger.Debug( + syncLogPrefix("no blocks - will try again"), + "start", waypointsBatch[i].StartBlock(), + "end", waypointsBatch[i].EndBlock(), + "rootHash", waypointsBatch[i].RootHash(), + "kind", reflect.TypeOf(waypointsBatch[i]), + ) + + gapIndex = i + break + } + + if blockBatch[0].Number().Uint64() == 0 { + // we do not want to insert block 0 (genesis) + blockBatch = blockBatch[1:] + } + + blocks = append(blocks, blockBatch...) + } + + if gapIndex >= 0 { + waypoints = waypoints[gapIndex:] + } else { + waypoints = waypoints[len(waypointsBatch):] + } + + if len(blocks) == 0 { + continue + } + + d.logger.Debug(syncLogPrefix("fetched blocks"), "len", len(blocks), "duration", time.Since(batchFetchStartTime)) + + batchFetchStartTime = time.Now() // reset for next time + + if err := d.storage.InsertBlocks(ctx, blocks); err != nil { + return nil, err + } + + lastBlock = blocks[len(blocks)-1] + } + + d.logger.Debug(syncLogPrefix("finished downloading blocks using waypoints")) + + return lastBlock.Header(), nil +} + +func (d *blockDownloader) fetchVerifiedBlocks( + ctx context.Context, + waypoint heimdall.Waypoint, + peerId *p2p.PeerId, +) ([]*types.Block, int, error) { + // 1. Fetch headers in waypoint from a peer + start := waypoint.StartBlock().Uint64() + end := waypoint.EndBlock().Uint64() + 1 // waypoint end is inclusive, fetch headers is [start, end) + headers, err := d.p2pService.FetchHeaders(ctx, start, end, peerId) + if err != nil { + return nil, 0, err + } + + // 2. Verify headers match waypoint root hash + if err = d.headersVerifier(waypoint, headers.Data); err != nil { + d.logger.Debug(syncLogPrefix("penalizing peer - invalid headers"), "peerId", peerId, "err", err) + + if penalizeErr := d.p2pService.Penalize(ctx, peerId); penalizeErr != nil { + err = fmt.Errorf("%w: %w", penalizeErr, err) + } + + return nil, 0, err + } + + // 3. Fetch bodies for the verified waypoint headers + bodies, err := d.p2pService.FetchBodies(ctx, headers.Data, peerId) + if err != nil { + if errors.Is(err, &p2p.ErrMissingBodies{}) { + d.logger.Debug(syncLogPrefix("penalizing peer - missing bodies"), "peerId", peerId, "err", err) + + if penalizeErr := d.p2pService.Penalize(ctx, peerId); penalizeErr != nil { + err = fmt.Errorf("%w: %w", penalizeErr, err) + } + } + + return nil, 0, err + } + + // 4. Assemble blocks + blocks := make([]*types.Block, len(headers.Data)) + for i, header := range headers.Data { + blocks[i] = types.NewBlockFromNetwork(header, bodies.Data[i]) + } + + // 5. Verify blocks + if err = d.blocksVerifier(blocks); err != nil { + d.logger.Debug(syncLogPrefix("penalizing peer - invalid blocks"), "peerId", peerId, "err", err) + + if penalizeErr := d.p2pService.Penalize(ctx, peerId); penalizeErr != nil { + err = fmt.Errorf("%w: %w", penalizeErr, err) + } + + return nil, 0, err + } + + return blocks, headers.TotalSize + bodies.TotalSize, nil +} diff --git a/polygon/sync/block_downloader_test.go b/polygon/sync/block_downloader_test.go new file mode 100644 index 00000000000..20a2abef2b0 --- /dev/null +++ b/polygon/sync/block_downloader_test.go @@ -0,0 +1,541 @@ +package sync + +import ( + "context" + "errors" + "fmt" + "math" + "math/big" + "testing" + "time" + + "github.com/holiman/uint256" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" + + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/polygon/p2p" + "github.com/ledgerwatch/erigon/turbo/testlog" +) + +func newBlockDownloaderTest(t *testing.T) *blockDownloaderTest { + return newBlockDownloaderTestWithOpts(t, blockDownloaderTestOpts{}) +} + +func newBlockDownloaderTestWithOpts(t *testing.T, opts blockDownloaderTestOpts) *blockDownloaderTest { + ctrl := gomock.NewController(t) + heimdallService := heimdall.NewMockHeimdallNoStore(ctrl) + p2pService := p2p.NewMockService(ctrl) + p2pService.EXPECT().MaxPeers().Return(100).Times(1) + logger := testlog.Logger(t, log.LvlDebug) + headersVerifier := opts.getOrCreateDefaultHeadersVerifier() + blocksVerifier := opts.getOrCreateDefaultBlocksVerifier() + storage := NewMockStorage(ctrl) + headerDownloader := newBlockDownloader( + logger, + p2pService, + heimdallService, + headersVerifier, + blocksVerifier, + storage, + time.Millisecond, + opts.getOrCreateDefaultMaxWorkers(), + ) + return &blockDownloaderTest{ + heimdall: heimdallService, + p2pService: p2pService, + blockDownloader: headerDownloader, + storage: storage, + } +} + +type blockDownloaderTestOpts struct { + headersVerifier AccumulatedHeadersVerifier + blocksVerifier BlocksVerifier + maxWorkers int +} + +func (opts blockDownloaderTestOpts) getOrCreateDefaultHeadersVerifier() AccumulatedHeadersVerifier { + if opts.headersVerifier == nil { + return func(_ heimdall.Waypoint, _ []*types.Header) error { + return nil + } + } + + return opts.headersVerifier +} + +func (opts blockDownloaderTestOpts) getOrCreateDefaultBlocksVerifier() BlocksVerifier { + if opts.blocksVerifier == nil { + return func(_ []*types.Block) error { + return nil + } + } + + return opts.blocksVerifier +} + +func (opts blockDownloaderTestOpts) getOrCreateDefaultMaxWorkers() int { + if opts.maxWorkers == 0 { + return math.MaxInt + } + + return opts.maxWorkers +} + +type blockDownloaderTest struct { + heimdall *heimdall.MockHeimdallNoStore + p2pService *p2p.MockService + blockDownloader *blockDownloader + storage *MockStorage +} + +func (hdt blockDownloaderTest) fakePeers(count int) []*p2p.PeerId { + peers := make([]*p2p.PeerId, count) + for i := range peers { + peers[i] = p2p.PeerIdFromUint64(uint64(i) + 1) + } + + return peers +} + +func (hdt blockDownloaderTest) fakeCheckpoints(count int) heimdall.Waypoints { + checkpoints := make(heimdall.Waypoints, count) + for i := range checkpoints { + num := i + 1 + checkpoints[i] = &heimdall.Checkpoint{ + Fields: heimdall.WaypointFields{ + StartBlock: big.NewInt(int64(num)), + EndBlock: big.NewInt(int64(num)), + RootHash: common.BytesToHash([]byte(fmt.Sprintf("0x%d", num))), + }, + } + } + + return checkpoints +} + +func (hdt blockDownloaderTest) fakeMilestones(count int) heimdall.Waypoints { + milestones := make(heimdall.Waypoints, count) + for i := range milestones { + num := i + 1 + milestones[i] = &heimdall.Milestone{ + Fields: heimdall.WaypointFields{ + StartBlock: big.NewInt(int64(num)), + EndBlock: big.NewInt(int64(num)), + RootHash: common.BytesToHash([]byte(fmt.Sprintf("0x%d", num))), + }, + } + } + + return milestones +} + +type fetchHeadersMock func(ctx context.Context, start uint64, end uint64, peerId *p2p.PeerId) (p2p.FetcherResponse[[]*types.Header], error) + +func (hdt blockDownloaderTest) defaultFetchHeadersMock() fetchHeadersMock { + // p2p.Service.FetchHeaders interface is using [start, end) so we stick to that + return func(ctx context.Context, start uint64, end uint64, _ *p2p.PeerId) (p2p.FetcherResponse[[]*types.Header], error) { + if start >= end { + return p2p.FetcherResponse[[]*types.Header]{Data: nil, TotalSize: 0}, fmt.Errorf("unexpected start >= end in test: start=%d, end=%d", start, end) + } + + res := make([]*types.Header, end-start) + size := 0 + for num := start; num < end; num++ { + header := &types.Header{ + Number: new(big.Int).SetUint64(num), + } + res[num-start] = header + size += header.EncodingSize() + } + + return p2p.FetcherResponse[[]*types.Header]{Data: res, TotalSize: size}, nil + } +} + +type fetchBodiesMock func(context.Context, []*types.Header, *p2p.PeerId) (p2p.FetcherResponse[[]*types.Body], error) + +func (hdt blockDownloaderTest) defaultFetchBodiesMock() fetchBodiesMock { + return func(ctx context.Context, headers []*types.Header, _ *p2p.PeerId) (p2p.FetcherResponse[[]*types.Body], error) { + bodies := make([]*types.Body, len(headers)) + size := 0 + + for i := range headers { + body := &types.Body{ + Transactions: []types.Transaction{ + types.NewEIP1559Transaction( + *uint256.NewInt(1), + 1, + common.BigToAddress(big.NewInt(123)), + uint256.NewInt(55), + 0, + uint256.NewInt(666), + uint256.NewInt(777), + uint256.NewInt(888), + nil, + ), + }, + } + bodies[i] = body + size += body.EncodingSize() + } + + return p2p.FetcherResponse[[]*types.Body]{Data: bodies, TotalSize: size}, nil + } +} + +func (hdt blockDownloaderTest) defaultInsertBlocksMock(capture *[]*types.Block) func(context.Context, []*types.Block) error { + return func(ctx context.Context, blocks []*types.Block) error { + *capture = append(*capture, blocks...) + return nil + } +} + +func TestBlockDownloaderDownloadBlocksUsingMilestones(t *testing.T) { + test := newBlockDownloaderTest(t) + test.heimdall.EXPECT(). + FetchMilestonesFromBlock(gomock.Any(), gomock.Any()). + Return(test.fakeMilestones(4), nil). + Times(1) + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return(test.fakePeers(8)). + Times(1) + test.p2pService.EXPECT(). + FetchHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchHeadersMock()). + Times(4) + test.p2pService.EXPECT(). + FetchBodies(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchBodiesMock()). + Times(4) + var blocks []*types.Block + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocks)). + Times(1) + + tip, err := test.blockDownloader.DownloadBlocksUsingMilestones(context.Background(), 1) + require.NoError(t, err) + require.Len(t, blocks, 4) + // check blocks are written in order + require.Equal(t, uint64(1), blocks[0].Header().Number.Uint64()) + require.Equal(t, uint64(2), blocks[1].Header().Number.Uint64()) + require.Equal(t, uint64(3), blocks[2].Header().Number.Uint64()) + require.Equal(t, uint64(4), blocks[3].Header().Number.Uint64()) + require.Equal(t, blocks[len(blocks)-1].Header(), tip) +} + +func TestBlockDownloaderDownloadBlocksUsingCheckpoints(t *testing.T) { + test := newBlockDownloaderTest(t) + test.heimdall.EXPECT(). + FetchCheckpointsFromBlock(gomock.Any(), gomock.Any()). + Return(test.fakeCheckpoints(8), nil). + Times(1) + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return(test.fakePeers(2)). + Times(4) + test.p2pService.EXPECT(). + FetchHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchHeadersMock()). + Times(8) + test.p2pService.EXPECT(). + FetchBodies(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchBodiesMock()). + Times(8) + var blocks []*types.Block + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocks)). + Times(4) + + tip, err := test.blockDownloader.DownloadBlocksUsingCheckpoints(context.Background(), 1) + require.NoError(t, err) + require.Len(t, blocks, 8) + // check blocks are written in order + require.Equal(t, uint64(1), blocks[0].Header().Number.Uint64()) + require.Equal(t, uint64(2), blocks[1].Header().Number.Uint64()) + require.Equal(t, uint64(3), blocks[2].Header().Number.Uint64()) + require.Equal(t, uint64(4), blocks[3].Header().Number.Uint64()) + require.Equal(t, uint64(5), blocks[4].Header().Number.Uint64()) + require.Equal(t, uint64(6), blocks[5].Header().Number.Uint64()) + require.Equal(t, uint64(7), blocks[6].Header().Number.Uint64()) + require.Equal(t, uint64(8), blocks[7].Header().Number.Uint64()) + require.Equal(t, blocks[len(blocks)-1].Header(), tip) +} + +func TestBlockDownloaderDownloadBlocksWhenInvalidHeadersThenPenalizePeerAndReDownload(t *testing.T) { + var firstTimeInvalidReturned bool + firstTimeInvalidReturnedPtr := &firstTimeInvalidReturned + test := newBlockDownloaderTestWithOpts(t, blockDownloaderTestOpts{ + headersVerifier: func(waypoint heimdall.Waypoint, headers []*types.Header) error { + if waypoint.StartBlock().Cmp(new(big.Int).SetUint64(2)) == 0 && !*firstTimeInvalidReturnedPtr { + *firstTimeInvalidReturnedPtr = true + return errors.New("invalid checkpoint") + } + return nil + }, + }) + test.heimdall.EXPECT(). + FetchCheckpointsFromBlock(gomock.Any(), gomock.Any()). + Return(test.fakeCheckpoints(6), nil). + Times(1) + test.p2pService.EXPECT(). + FetchHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchHeadersMock()). + // request checkpoints 1,2,3 in parallel (we have 3 peers) + // -> verifications for checkpoint 2 headers fails, checkpoints 1 and 3 pass verifications + // requests 2,3 in parallel (now we have only 2 peers) + // -> checkpoint 3 blocks are cached, checkpoint 2 is re-requested from another peer and passes verifications + // requests 4,5 in parallel + // request 6 + // in total 6 requests + 1 request for re-requesting checkpoint 2 headers + // total = 7 (note this also tests blocks caching works) + Times(7) + test.p2pService.EXPECT(). + FetchBodies(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchBodiesMock()). + // 1 less than FetchHeaders since checkpoint 2 from peer 2 did not pass headers verification + Times(6) + fakePeers := test.fakePeers(3) + gomock.InOrder( + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return(fakePeers). // 3 initially + Times(1), + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return([]*p2p.PeerId{fakePeers[0], fakePeers[2]}). // but then peer 2 gets penalized + Times(3), + ) + test.p2pService.EXPECT(). + Penalize(gomock.Any(), gomock.Eq(p2p.PeerIdFromUint64(2))). + Times(1) + var blocksBatch1, blocksBatch2 []*types.Block + gomock.InOrder( + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocksBatch1)). + Times(1), + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocksBatch2)). + Times(3), + ) + + _, err := test.blockDownloader.DownloadBlocksUsingCheckpoints(context.Background(), 1) + require.NoError(t, err) + require.Len(t, blocksBatch1, 1) + require.Len(t, blocksBatch2, 5) +} + +func TestBlockDownloaderDownloadBlocksWhenZeroPeersTriesAgain(t *testing.T) { + test := newBlockDownloaderTest(t) + test.heimdall.EXPECT(). + FetchCheckpointsFromBlock(gomock.Any(), gomock.Any()). + Return(test.fakeCheckpoints(8), nil). + Times(1) + test.p2pService.EXPECT(). + FetchHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchHeadersMock()). + Times(8) + test.p2pService.EXPECT(). + FetchBodies(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchBodiesMock()). + Times(8) + var blocks []*types.Block + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocks)). + Times(4) + gomock.InOrder( + // first time, no peers at all + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return(nil). + Times(1), + // second time, 2 peers that we can use + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return(test.fakePeers(2)). + Times(4), + ) + + tip, err := test.blockDownloader.DownloadBlocksUsingCheckpoints(context.Background(), 1) + require.NoError(t, err) + require.Len(t, blocks, 8) + require.Equal(t, blocks[len(blocks)-1].Header(), tip) +} + +func TestBlockDownloaderDownloadBlocksWhenInvalidBodiesThenPenalizePeerAndReDownload(t *testing.T) { + var firstTimeInvalidReturned bool + firstTimeInvalidReturnedPtr := &firstTimeInvalidReturned + test := newBlockDownloaderTestWithOpts(t, blockDownloaderTestOpts{ + blocksVerifier: func(blocks []*types.Block) error { + if blocks[0].NumberU64() == 2 && !*firstTimeInvalidReturnedPtr { + *firstTimeInvalidReturnedPtr = true + return errors.New("invalid block body") + } + return nil + }, + }) + test.heimdall.EXPECT(). + FetchCheckpointsFromBlock(gomock.Any(), gomock.Any()). + Return(test.fakeCheckpoints(6), nil). + Times(1) + test.p2pService.EXPECT(). + FetchHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchHeadersMock()). + // request checkpoints 1,2,3 in parallel (we have 3 peers) + // -> verifications for checkpoint 2 bodies fails, checkpoints 1 and 3 pass verifications + // requests 2,3 in parallel (now we have only 2 peers) + // -> checkpoint 3 blocks are cached, checkpoint 2 is re-requested from another peer and passes verifications + // requests 4,5 in parallel + // request 6 + // in total 6 requests + 1 request for re-requesting checkpoint 2 headers + bodies + // total = 7 (note this also tests blocks caching works) + Times(7) + test.p2pService.EXPECT(). + FetchBodies(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchBodiesMock()). + // same explanation as above for FetchHeaders.Times(7) + Times(7) + fakePeers := test.fakePeers(3) + gomock.InOrder( + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return(fakePeers). // 3 initially + Times(1), + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return([]*p2p.PeerId{fakePeers[0], fakePeers[2]}). // but then peer 2 gets penalized + Times(3), + ) + test.p2pService.EXPECT(). + Penalize(gomock.Any(), gomock.Eq(p2p.PeerIdFromUint64(2))). + Times(1) + var blocksBatch1, blocksBatch2 []*types.Block + gomock.InOrder( + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocksBatch1)). + Times(1), + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocksBatch2)). + Times(3), + ) + + _, err := test.blockDownloader.DownloadBlocksUsingCheckpoints(context.Background(), 1) + require.NoError(t, err) + require.Len(t, blocksBatch1, 1) + require.Len(t, blocksBatch2, 5) +} + +func TestBlockDownloaderDownloadBlocksWhenMissingBodiesThenPenalizePeerAndReDownload(t *testing.T) { + test := newBlockDownloaderTestWithOpts(t, blockDownloaderTestOpts{}) + test.heimdall.EXPECT(). + FetchCheckpointsFromBlock(gomock.Any(), gomock.Any()). + Return(test.fakeCheckpoints(6), nil). + Times(1) + test.p2pService.EXPECT(). + FetchBodies(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(func(ctx context.Context, headers []*types.Header, peerId *p2p.PeerId) (p2p.FetcherResponse[[]*types.Body], error) { + if peerId.Equal(p2p.PeerIdFromUint64(2)) { + return p2p.FetcherResponse[[]*types.Body]{Data: nil, TotalSize: 0}, p2p.NewErrMissingBodies(headers) + } + + return test.defaultFetchBodiesMock()(ctx, headers, peerId) + }). + // request checkpoints 1,2,3 in parallel (we have 3 peers) + // -> peer 2 returns missing bodies error, checkpoints 1 and 3 fetch succeeds + // requests 2,3 in parallel (now we have only 2 peers) + // -> checkpoint 3 blocks are cached, checkpoint 2 is re-requested from another peer and passes verifications + // requests 4,5 in parallel + // request 6 + // in total 6 requests + 1 request for re-requesting checkpoint 2 headers + bodies + // total = 7 (note this also tests blocks caching works) + Times(7) + test.p2pService.EXPECT(). + FetchHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchHeadersMock()). + // same explanation as above for FetchBodies.Times(7) + Times(7) + fakePeers := test.fakePeers(3) + gomock.InOrder( + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return(fakePeers). // 3 initially + Times(1), + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return([]*p2p.PeerId{fakePeers[0], fakePeers[2]}). // but then peer 2 gets penalized + Times(3), + ) + test.p2pService.EXPECT(). + Penalize(gomock.Any(), gomock.Eq(p2p.PeerIdFromUint64(2))). + Times(1) + var blocksBatch1, blocksBatch2 []*types.Block + gomock.InOrder( + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocksBatch1)). + Times(1), + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocksBatch2)). + Times(3), + ) + + _, err := test.blockDownloader.DownloadBlocksUsingCheckpoints(context.Background(), 1) + require.NoError(t, err) + require.Len(t, blocksBatch1, 1) + require.Len(t, blocksBatch2, 5) +} + +func TestBlockDownloaderDownloadBlocksRespectsMaxWorkers(t *testing.T) { + test := newBlockDownloaderTestWithOpts(t, blockDownloaderTestOpts{ + maxWorkers: 1, + }) + test.heimdall.EXPECT(). + FetchCheckpointsFromBlock(gomock.Any(), gomock.Any()). + Return(test.fakeCheckpoints(2), nil). + Times(1) + test.p2pService.EXPECT(). + ListPeersMayHaveBlockNum(gomock.Any()). + Return(test.fakePeers(100)). + Times(2) + test.p2pService.EXPECT(). + FetchHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchHeadersMock()). + Times(2) + test.p2pService.EXPECT(). + FetchBodies(gomock.Any(), gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultFetchBodiesMock()). + Times(2) + var blocksBatch1, blocksBatch2 []*types.Block + gomock.InOrder( + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocksBatch1)). + Times(1), + test.storage.EXPECT(). + InsertBlocks(gomock.Any(), gomock.Any()). + DoAndReturn(test.defaultInsertBlocksMock(&blocksBatch2)). + Times(1), + ) + + // max 1 worker + // 100 peers + // 2 waypoints + // the downloader should fetch the 2 waypoints in 2 separate batches + _, err := test.blockDownloader.DownloadBlocksUsingCheckpoints(context.Background(), 1) + require.NoError(t, err) + require.Len(t, blocksBatch1, 1) + require.Len(t, blocksBatch2, 1) +} diff --git a/polygon/sync/blocks_verifier.go b/polygon/sync/blocks_verifier.go new file mode 100644 index 00000000000..69aed9fdfa0 --- /dev/null +++ b/polygon/sync/blocks_verifier.go @@ -0,0 +1,19 @@ +package sync + +import "github.com/ledgerwatch/erigon/core/types" + +type BlocksVerifier func(blocks []*types.Block) error + +func VerifyBlocks(blocks []*types.Block) error { + for _, block := range blocks { + if err := block.SanityCheck(); err != nil { + return err + } + + if err := block.HashCheck(); err != nil { + return err + } + } + + return nil +} diff --git a/polygon/sync/canonical_chain_builder.go b/polygon/sync/canonical_chain_builder.go index 541100c9b7c..c6ceabb8de6 100644 --- a/polygon/sync/canonical_chain_builder.go +++ b/polygon/sync/canonical_chain_builder.go @@ -11,11 +11,12 @@ import ( "github.com/ledgerwatch/erigon/polygon/bor" ) -//go:generate mockgen -destination=./canonical_chain_builder_mock.go -package=sync . CanonicalChainBuilder +//go:generate mockgen -typed=true -destination=./canonical_chain_builder_mock.go -package=sync . CanonicalChainBuilder type CanonicalChainBuilder interface { Reset(root *types.Header) ContainsHash(hash libcommon.Hash) bool Tip() *types.Header + Root() *types.Header HeadersInRange(start uint64, count uint64) []*types.Header Prune(newRootNum uint64) error Connect(headers []*types.Header) error @@ -33,7 +34,7 @@ type forkTreeNode struct { totalDifficulty uint64 } -type canonicalChainBuilderImpl struct { +type canonicalChainBuilder struct { root *forkTreeNode tip *forkTreeNode @@ -48,30 +49,30 @@ func NewCanonicalChainBuilder( headerValidator HeaderValidator, spansCache *SpansCache, ) CanonicalChainBuilder { - impl := &canonicalChainBuilderImpl{ + ccb := &canonicalChainBuilder{ difficultyCalc: difficultyCalc, headerValidator: headerValidator, spansCache: spansCache, } - impl.Reset(root) - return impl + ccb.Reset(root) + return ccb } -func (impl *canonicalChainBuilderImpl) Reset(root *types.Header) { - impl.root = &forkTreeNode{ +func (ccb *canonicalChainBuilder) Reset(root *types.Header) { + ccb.root = &forkTreeNode{ children: make(map[producerSlotIndex]*forkTreeNode), header: root, headerHash: root.Hash(), } - impl.tip = impl.root - if impl.spansCache != nil { - impl.spansCache.Prune(root.Number.Uint64()) + ccb.tip = ccb.root + if ccb.spansCache != nil { + ccb.spansCache.Prune(root.Number.Uint64()) } } // depth-first search -func (impl *canonicalChainBuilderImpl) enumerate(visitFunc func(*forkTreeNode) bool) { - stack := []*forkTreeNode{impl.root} +func (ccb *canonicalChainBuilder) enumerate(visitFunc func(*forkTreeNode) bool) { + stack := []*forkTreeNode{ccb.root} for len(stack) > 0 { // pop node := stack[len(stack)-1] @@ -87,9 +88,9 @@ func (impl *canonicalChainBuilderImpl) enumerate(visitFunc func(*forkTreeNode) b } } -func (impl *canonicalChainBuilderImpl) nodeByHash(hash libcommon.Hash) *forkTreeNode { +func (ccb *canonicalChainBuilder) nodeByHash(hash libcommon.Hash) *forkTreeNode { var result *forkTreeNode - impl.enumerate(func(node *forkTreeNode) bool { + ccb.enumerate(func(node *forkTreeNode) bool { if node.headerHash == hash { result = node } @@ -98,17 +99,20 @@ func (impl *canonicalChainBuilderImpl) nodeByHash(hash libcommon.Hash) *forkTree return result } -func (impl *canonicalChainBuilderImpl) ContainsHash(hash libcommon.Hash) bool { - return impl.nodeByHash(hash) != nil +func (ccb *canonicalChainBuilder) ContainsHash(hash libcommon.Hash) bool { + return ccb.nodeByHash(hash) != nil } -func (impl *canonicalChainBuilderImpl) Tip() *types.Header { - return impl.tip.header +func (ccb *canonicalChainBuilder) Tip() *types.Header { + return ccb.tip.header +} +func (ccb *canonicalChainBuilder) Root() *types.Header { + return ccb.root.header } -func (impl *canonicalChainBuilderImpl) Headers() []*types.Header { +func (ccb *canonicalChainBuilder) Headers() []*types.Header { var headers []*types.Header - node := impl.tip + node := ccb.tip for node != nil { headers = append(headers, node.header) node = node.parent @@ -117,8 +121,8 @@ func (impl *canonicalChainBuilderImpl) Headers() []*types.Header { return headers } -func (impl *canonicalChainBuilderImpl) HeadersInRange(start uint64, count uint64) []*types.Header { - headers := impl.Headers() +func (ccb *canonicalChainBuilder) HeadersInRange(start uint64, count uint64) []*types.Header { + headers := ccb.Headers() if len(headers) == 0 { return nil } @@ -133,19 +137,19 @@ func (impl *canonicalChainBuilderImpl) HeadersInRange(start uint64, count uint64 return headers[offset : offset+count] } -func (impl *canonicalChainBuilderImpl) Prune(newRootNum uint64) error { - if (newRootNum < impl.root.header.Number.Uint64()) || (newRootNum > impl.Tip().Number.Uint64()) { - return errors.New("canonicalChainBuilderImpl.Prune: newRootNum outside of the canonical chain") +func (ccb *canonicalChainBuilder) Prune(newRootNum uint64) error { + if (newRootNum < ccb.root.header.Number.Uint64()) || (newRootNum > ccb.Tip().Number.Uint64()) { + return errors.New("canonicalChainBuilder.Prune: newRootNum outside of the canonical chain") } - newRoot := impl.tip + newRoot := ccb.tip for newRoot.header.Number.Uint64() > newRootNum { newRoot = newRoot.parent } - impl.root = newRoot + ccb.root = newRoot - if impl.spansCache != nil { - impl.spansCache.Prune(newRootNum) + if ccb.spansCache != nil { + ccb.spansCache.Prune(newRootNum) } return nil } @@ -169,23 +173,23 @@ func compareForkTreeNodes(node1 *forkTreeNode, node2 *forkTreeNode) int { return bytes.Compare(node1.headerHash.Bytes(), node2.headerHash.Bytes()) } -func (impl *canonicalChainBuilderImpl) updateTipIfNeeded(tipCandidate *forkTreeNode) { - if compareForkTreeNodes(tipCandidate, impl.tip) > 0 { - impl.tip = tipCandidate +func (ccb *canonicalChainBuilder) updateTipIfNeeded(tipCandidate *forkTreeNode) { + if compareForkTreeNodes(tipCandidate, ccb.tip) > 0 { + ccb.tip = tipCandidate } } -func (impl *canonicalChainBuilderImpl) Connect(headers []*types.Header) error { - if (len(headers) > 0) && (headers[0].Number != nil) && (headers[0].Number.Cmp(impl.root.header.Number) == 0) { +func (ccb *canonicalChainBuilder) Connect(headers []*types.Header) error { + if (len(headers) > 0) && (headers[0].Number != nil) && (headers[0].Number.Cmp(ccb.root.header.Number) == 0) { headers = headers[1:] } if len(headers) == 0 { return nil } - parent := impl.nodeByHash(headers[0].ParentHash) + parent := ccb.nodeByHash(headers[0].ParentHash) if parent == nil { - return errors.New("canonicalChainBuilderImpl.Connect: can't connect headers") + return errors.New("canonicalChainBuilder.Connect: can't connect headers") } headersHashes := libcommon.SliceMap(headers, func(header *types.Header) libcommon.Hash { @@ -195,7 +199,7 @@ func (impl *canonicalChainBuilderImpl) Connect(headers []*types.Header) error { // check if headers are linked by ParentHash for i, header := range headers[1:] { if header.ParentHash != headersHashes[i] { - return errors.New("canonicalChainBuilderImpl.Connect: invalid headers slice ParentHash") + return errors.New("canonicalChainBuilder.Connect: invalid headers slice ParentHash") } } @@ -225,18 +229,18 @@ func (impl *canonicalChainBuilderImpl) Connect(headers []*types.Header) error { // attach nodes for the new headers for i, header := range headers { if (header.Number == nil) || (header.Number.Uint64() != parent.header.Number.Uint64()+1) { - return errors.New("canonicalChainBuilderImpl.Connect: invalid header.Number") + return errors.New("canonicalChainBuilder.Connect: invalid header.Number") } - if impl.headerValidator != nil { - if err := impl.headerValidator.ValidateHeader(header, parent.header, time.Now()); err != nil { - return fmt.Errorf("canonicalChainBuilderImpl.Connect: invalid header error %w", err) + if ccb.headerValidator != nil { + if err := ccb.headerValidator.ValidateHeader(header, parent.header, time.Now()); err != nil { + return fmt.Errorf("canonicalChainBuilder.Connect: invalid header error %w", err) } } - difficulty, err := impl.difficultyCalc.HeaderDifficulty(header) + difficulty, err := ccb.difficultyCalc.HeaderDifficulty(header) if err != nil { - return fmt.Errorf("canonicalChainBuilderImpl.Connect: header difficulty error %w", err) + return fmt.Errorf("canonicalChainBuilder.Connect: header difficulty error %w", err) } if (header.Difficulty == nil) || (header.Difficulty.Uint64() != difficulty) { return &bor.WrongDifficultyError{ @@ -249,7 +253,7 @@ func (impl *canonicalChainBuilderImpl) Connect(headers []*types.Header) error { slot := producerSlotIndex(difficulty) if _, ok := parent.children[slot]; ok { - return errors.New("canonicalChainBuilderImpl.Connect: producer slot is already filled by a different header") + return errors.New("canonicalChainBuilder.Connect: producer slot is already filled by a different header") } node := &forkTreeNode{ @@ -264,7 +268,7 @@ func (impl *canonicalChainBuilderImpl) Connect(headers []*types.Header) error { parent.children[slot] = node parent = node - impl.updateTipIfNeeded(node) + ccb.updateTipIfNeeded(node) } return nil diff --git a/polygon/sync/canonical_chain_builder_mock.go b/polygon/sync/canonical_chain_builder_mock.go index 0ee6e49e3c9..b5f5d3a705c 100644 --- a/polygon/sync/canonical_chain_builder_mock.go +++ b/polygon/sync/canonical_chain_builder_mock.go @@ -1,5 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/ledgerwatch/erigon/polygon/sync (interfaces: CanonicalChainBuilder) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./canonical_chain_builder_mock.go -package=sync . CanonicalChainBuilder +// // Package sync is a generated GoMock package. package sync @@ -7,9 +12,9 @@ package sync import ( reflect "reflect" - gomock "github.com/golang/mock/gomock" common "github.com/ledgerwatch/erigon-lib/common" types "github.com/ledgerwatch/erigon/core/types" + gomock "go.uber.org/mock/gomock" ) // MockCanonicalChainBuilder is a mock of CanonicalChainBuilder interface. @@ -44,9 +49,33 @@ func (m *MockCanonicalChainBuilder) Connect(arg0 []*types.Header) error { } // Connect indicates an expected call of Connect. -func (mr *MockCanonicalChainBuilderMockRecorder) Connect(arg0 interface{}) *gomock.Call { +func (mr *MockCanonicalChainBuilderMockRecorder) Connect(arg0 any) *MockCanonicalChainBuilderConnectCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Connect", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Connect), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Connect", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Connect), arg0) + return &MockCanonicalChainBuilderConnectCall{Call: call} +} + +// MockCanonicalChainBuilderConnectCall wrap *gomock.Call +type MockCanonicalChainBuilderConnectCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCanonicalChainBuilderConnectCall) Return(arg0 error) *MockCanonicalChainBuilderConnectCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCanonicalChainBuilderConnectCall) Do(f func([]*types.Header) error) *MockCanonicalChainBuilderConnectCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCanonicalChainBuilderConnectCall) DoAndReturn(f func([]*types.Header) error) *MockCanonicalChainBuilderConnectCall { + c.Call = c.Call.DoAndReturn(f) + return c } // ContainsHash mocks base method. @@ -58,9 +87,33 @@ func (m *MockCanonicalChainBuilder) ContainsHash(arg0 common.Hash) bool { } // ContainsHash indicates an expected call of ContainsHash. -func (mr *MockCanonicalChainBuilderMockRecorder) ContainsHash(arg0 interface{}) *gomock.Call { +func (mr *MockCanonicalChainBuilderMockRecorder) ContainsHash(arg0 any) *MockCanonicalChainBuilderContainsHashCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ContainsHash", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).ContainsHash), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ContainsHash", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).ContainsHash), arg0) + return &MockCanonicalChainBuilderContainsHashCall{Call: call} +} + +// MockCanonicalChainBuilderContainsHashCall wrap *gomock.Call +type MockCanonicalChainBuilderContainsHashCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCanonicalChainBuilderContainsHashCall) Return(arg0 bool) *MockCanonicalChainBuilderContainsHashCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCanonicalChainBuilderContainsHashCall) Do(f func(common.Hash) bool) *MockCanonicalChainBuilderContainsHashCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCanonicalChainBuilderContainsHashCall) DoAndReturn(f func(common.Hash) bool) *MockCanonicalChainBuilderContainsHashCall { + c.Call = c.Call.DoAndReturn(f) + return c } // HeadersInRange mocks base method. @@ -72,9 +125,33 @@ func (m *MockCanonicalChainBuilder) HeadersInRange(arg0, arg1 uint64) []*types.H } // HeadersInRange indicates an expected call of HeadersInRange. -func (mr *MockCanonicalChainBuilderMockRecorder) HeadersInRange(arg0, arg1 interface{}) *gomock.Call { +func (mr *MockCanonicalChainBuilderMockRecorder) HeadersInRange(arg0, arg1 any) *MockCanonicalChainBuilderHeadersInRangeCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HeadersInRange", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).HeadersInRange), arg0, arg1) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HeadersInRange", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).HeadersInRange), arg0, arg1) + return &MockCanonicalChainBuilderHeadersInRangeCall{Call: call} +} + +// MockCanonicalChainBuilderHeadersInRangeCall wrap *gomock.Call +type MockCanonicalChainBuilderHeadersInRangeCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCanonicalChainBuilderHeadersInRangeCall) Return(arg0 []*types.Header) *MockCanonicalChainBuilderHeadersInRangeCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCanonicalChainBuilderHeadersInRangeCall) Do(f func(uint64, uint64) []*types.Header) *MockCanonicalChainBuilderHeadersInRangeCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCanonicalChainBuilderHeadersInRangeCall) DoAndReturn(f func(uint64, uint64) []*types.Header) *MockCanonicalChainBuilderHeadersInRangeCall { + c.Call = c.Call.DoAndReturn(f) + return c } // Prune mocks base method. @@ -86,9 +163,33 @@ func (m *MockCanonicalChainBuilder) Prune(arg0 uint64) error { } // Prune indicates an expected call of Prune. -func (mr *MockCanonicalChainBuilderMockRecorder) Prune(arg0 interface{}) *gomock.Call { +func (mr *MockCanonicalChainBuilderMockRecorder) Prune(arg0 any) *MockCanonicalChainBuilderPruneCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Prune", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Prune), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Prune", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Prune), arg0) + return &MockCanonicalChainBuilderPruneCall{Call: call} +} + +// MockCanonicalChainBuilderPruneCall wrap *gomock.Call +type MockCanonicalChainBuilderPruneCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCanonicalChainBuilderPruneCall) Return(arg0 error) *MockCanonicalChainBuilderPruneCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCanonicalChainBuilderPruneCall) Do(f func(uint64) error) *MockCanonicalChainBuilderPruneCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCanonicalChainBuilderPruneCall) DoAndReturn(f func(uint64) error) *MockCanonicalChainBuilderPruneCall { + c.Call = c.Call.DoAndReturn(f) + return c } // Reset mocks base method. @@ -98,9 +199,71 @@ func (m *MockCanonicalChainBuilder) Reset(arg0 *types.Header) { } // Reset indicates an expected call of Reset. -func (mr *MockCanonicalChainBuilderMockRecorder) Reset(arg0 interface{}) *gomock.Call { +func (mr *MockCanonicalChainBuilderMockRecorder) Reset(arg0 any) *MockCanonicalChainBuilderResetCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Reset", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Reset), arg0) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Reset", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Reset), arg0) + return &MockCanonicalChainBuilderResetCall{Call: call} +} + +// MockCanonicalChainBuilderResetCall wrap *gomock.Call +type MockCanonicalChainBuilderResetCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCanonicalChainBuilderResetCall) Return() *MockCanonicalChainBuilderResetCall { + c.Call = c.Call.Return() + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCanonicalChainBuilderResetCall) Do(f func(*types.Header)) *MockCanonicalChainBuilderResetCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCanonicalChainBuilderResetCall) DoAndReturn(f func(*types.Header)) *MockCanonicalChainBuilderResetCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Root mocks base method. +func (m *MockCanonicalChainBuilder) Root() *types.Header { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Root") + ret0, _ := ret[0].(*types.Header) + return ret0 +} + +// Root indicates an expected call of Root. +func (mr *MockCanonicalChainBuilderMockRecorder) Root() *MockCanonicalChainBuilderRootCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Root", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Root)) + return &MockCanonicalChainBuilderRootCall{Call: call} +} + +// MockCanonicalChainBuilderRootCall wrap *gomock.Call +type MockCanonicalChainBuilderRootCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCanonicalChainBuilderRootCall) Return(arg0 *types.Header) *MockCanonicalChainBuilderRootCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCanonicalChainBuilderRootCall) Do(f func() *types.Header) *MockCanonicalChainBuilderRootCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCanonicalChainBuilderRootCall) DoAndReturn(f func() *types.Header) *MockCanonicalChainBuilderRootCall { + c.Call = c.Call.DoAndReturn(f) + return c } // Tip mocks base method. @@ -112,7 +275,31 @@ func (m *MockCanonicalChainBuilder) Tip() *types.Header { } // Tip indicates an expected call of Tip. -func (mr *MockCanonicalChainBuilderMockRecorder) Tip() *gomock.Call { +func (mr *MockCanonicalChainBuilderMockRecorder) Tip() *MockCanonicalChainBuilderTipCall { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Tip", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Tip)) + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Tip", reflect.TypeOf((*MockCanonicalChainBuilder)(nil).Tip)) + return &MockCanonicalChainBuilderTipCall{Call: call} +} + +// MockCanonicalChainBuilderTipCall wrap *gomock.Call +type MockCanonicalChainBuilderTipCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockCanonicalChainBuilderTipCall) Return(arg0 *types.Header) *MockCanonicalChainBuilderTipCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockCanonicalChainBuilderTipCall) Do(f func() *types.Header) *MockCanonicalChainBuilderTipCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockCanonicalChainBuilderTipCall) DoAndReturn(f func() *types.Header) *MockCanonicalChainBuilderTipCall { + c.Call = c.Call.DoAndReturn(f) + return c } diff --git a/polygon/sync/canonical_chain_builder_test.go b/polygon/sync/canonical_chain_builder_test.go index fec41c509c8..abad208176a 100644 --- a/polygon/sync/canonical_chain_builder_test.go +++ b/polygon/sync/canonical_chain_builder_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/require" "github.com/ledgerwatch/erigon/core/types" - heimdallspan "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/polygon/heimdall" ) type testDifficultyCalculator struct { @@ -23,7 +23,7 @@ func (*testDifficultyCalculator) HeaderDifficulty(header *types.Header) (uint64, return header.Difficulty.Uint64(), nil } -func (*testDifficultyCalculator) SetSpan(*heimdallspan.HeimdallSpan) {} +func (*testDifficultyCalculator) SetSpan(*heimdall.Span) {} func makeRoot() *types.Header { return &types.Header{ diff --git a/polygon/sync/db.go b/polygon/sync/db.go deleted file mode 100644 index 9fc3ed9bcf6..00000000000 --- a/polygon/sync/db.go +++ /dev/null @@ -1,8 +0,0 @@ -package sync - -import "github.com/ledgerwatch/erigon/core/types" - -//go:generate mockgen -destination=./db_mock.go -package=sync . DB -type DB interface { - WriteHeaders(headers []*types.Header) error -} diff --git a/polygon/sync/db_mock.go b/polygon/sync/db_mock.go deleted file mode 100644 index 2993c959eff..00000000000 --- a/polygon/sync/db_mock.go +++ /dev/null @@ -1,49 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/ledgerwatch/erigon/polygon/sync (interfaces: DB) - -// Package sync is a generated GoMock package. -package sync - -import ( - reflect "reflect" - - gomock "github.com/golang/mock/gomock" - types "github.com/ledgerwatch/erigon/core/types" -) - -// MockDB is a mock of DB interface. -type MockDB struct { - ctrl *gomock.Controller - recorder *MockDBMockRecorder -} - -// MockDBMockRecorder is the mock recorder for MockDB. -type MockDBMockRecorder struct { - mock *MockDB -} - -// NewMockDB creates a new mock instance. -func NewMockDB(ctrl *gomock.Controller) *MockDB { - mock := &MockDB{ctrl: ctrl} - mock.recorder = &MockDBMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockDB) EXPECT() *MockDBMockRecorder { - return m.recorder -} - -// WriteHeaders mocks base method. -func (m *MockDB) WriteHeaders(arg0 []*types.Header) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "WriteHeaders", arg0) - ret0, _ := ret[0].(error) - return ret0 -} - -// WriteHeaders indicates an expected call of WriteHeaders. -func (mr *MockDBMockRecorder) WriteHeaders(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WriteHeaders", reflect.TypeOf((*MockDB)(nil).WriteHeaders), arg0) -} diff --git a/polygon/sync/difficulty.go b/polygon/sync/difficulty.go index 7880ade672f..fee15ff5179 100644 --- a/polygon/sync/difficulty.go +++ b/polygon/sync/difficulty.go @@ -18,7 +18,7 @@ type DifficultyCalculator interface { HeaderDifficulty(header *types.Header) (uint64, error) } -type difficultyCalculatorImpl struct { +type difficultyCalculator struct { borConfig *borcfg.BorConfig spans *SpansCache validatorSetFactory func(headerNum uint64) validatorSetInterface @@ -39,7 +39,7 @@ func NewDifficultyCalculator( } } - impl := difficultyCalculatorImpl{ + calc := difficultyCalculator{ borConfig: borConfig, spans: spans, validatorSetFactory: validatorSetFactory, @@ -47,35 +47,35 @@ func NewDifficultyCalculator( } if validatorSetFactory == nil { - impl.validatorSetFactory = impl.makeValidatorSet + calc.validatorSetFactory = calc.makeValidatorSet } - return &impl + return &calc } -func (impl *difficultyCalculatorImpl) makeValidatorSet(headerNum uint64) validatorSetInterface { - span := impl.spans.SpanAt(headerNum) +func (calc *difficultyCalculator) makeValidatorSet(headerNum uint64) validatorSetInterface { + span := calc.spans.SpanAt(headerNum) if span == nil { return nil } return valset.NewValidatorSet(span.ValidatorSet.Validators) } -func (impl *difficultyCalculatorImpl) HeaderDifficulty(header *types.Header) (uint64, error) { - signer, err := bor.Ecrecover(header, impl.signaturesCache, impl.borConfig) +func (calc *difficultyCalculator) HeaderDifficulty(header *types.Header) (uint64, error) { + signer, err := bor.Ecrecover(header, calc.signaturesCache, calc.borConfig) if err != nil { return 0, err } - return impl.signerDifficulty(signer, header.Number.Uint64()) + return calc.signerDifficulty(signer, header.Number.Uint64()) } -func (impl *difficultyCalculatorImpl) signerDifficulty(signer libcommon.Address, headerNum uint64) (uint64, error) { - validatorSet := impl.validatorSetFactory(headerNum) +func (calc *difficultyCalculator) signerDifficulty(signer libcommon.Address, headerNum uint64) (uint64, error) { + validatorSet := calc.validatorSetFactory(headerNum) if validatorSet == nil { - return 0, fmt.Errorf("difficultyCalculatorImpl.signerDifficulty: no span at %d", headerNum) + return 0, fmt.Errorf("difficultyCalculator.signerDifficulty: no span at %d", headerNum) } - sprintNum := impl.borConfig.CalculateSprintNumber(headerNum) + sprintNum := calc.borConfig.CalculateSprintNumber(headerNum) if sprintNum > 0 { validatorSet.IncrementProposerPriority(int(sprintNum)) } diff --git a/polygon/sync/difficulty_test.go b/polygon/sync/difficulty_test.go index 669b8dbcfc3..cf4e592ee3d 100644 --- a/polygon/sync/difficulty_test.go +++ b/polygon/sync/difficulty_test.go @@ -56,7 +56,7 @@ func TestSignerDifficulty(t *testing.T) { libcommon.HexToAddress("02"), } validatorSetFactory := func(uint64) validatorSetInterface { return &testValidatorSetInterface{signers: signers} } - calc := NewDifficultyCalculator(&borConfig, nil, validatorSetFactory, nil).(*difficultyCalculatorImpl) + calc := NewDifficultyCalculator(&borConfig, nil, validatorSetFactory, nil).(*difficultyCalculator) var d uint64 @@ -131,7 +131,7 @@ func TestHeaderDifficultyNoSignature(t *testing.T) { func TestSignerDifficultyNoSpan(t *testing.T) { borConfig := borcfg.BorConfig{} spans := NewSpansCache() - calc := NewDifficultyCalculator(&borConfig, spans, nil, nil).(*difficultyCalculatorImpl) + calc := NewDifficultyCalculator(&borConfig, spans, nil, nil).(*difficultyCalculator) _, err := calc.signerDifficulty(libcommon.HexToAddress("00"), 0) require.ErrorContains(t, err, "no span") diff --git a/polygon/sync/event_channel.go b/polygon/sync/event_channel.go new file mode 100644 index 00000000000..81b8e427e29 --- /dev/null +++ b/polygon/sync/event_channel.go @@ -0,0 +1,113 @@ +package sync + +import ( + "container/list" + "context" + "sync" +) + +// EventChannel is a buffered channel that drops oldest events when full. +type EventChannel[TEvent any] struct { + events chan TEvent + + queue *list.List + queueCap uint + queueMutex sync.Mutex + queueCond *sync.Cond +} + +func NewEventChannel[TEvent any](capacity uint) *EventChannel[TEvent] { + if capacity == 0 { + panic("NewEventChannel: capacity must be > 0") + } + + ec := &EventChannel[TEvent]{ + events: make(chan TEvent), + + queue: list.New(), + queueCap: capacity, + } + + ec.queueCond = sync.NewCond(&ec.queueMutex) + + return ec +} + +// Events returns a channel for reading events. +func (ec *EventChannel[TEvent]) Events() <-chan TEvent { + return ec.events +} + +// PushEvent queues an event. If the queue is full, it drops the oldest event to make space. +func (ec *EventChannel[TEvent]) PushEvent(e TEvent) { + ec.queueMutex.Lock() + defer ec.queueMutex.Unlock() + + if uint(ec.queue.Len()) == ec.queueCap { + ec.queue.Remove(ec.queue.Front()) + } + + ec.queue.PushBack(e) + ec.queueCond.Signal() +} + +// takeEvent dequeues an event. If the queue was empty, it returns false. +func (ec *EventChannel[TEvent]) takeEvent() (TEvent, bool) { + if elem := ec.queue.Front(); elem != nil { + e := ec.queue.Remove(elem).(TEvent) + return e, true + } else { + var emptyEvent TEvent + return emptyEvent, false + } +} + +// takeEvent dequeues an event. If the queue was empty, it blocks. +func (ec *EventChannel[TEvent]) waitForEvent(ctx context.Context) (TEvent, error) { + waitCtx, waitCancel := context.WithCancel(ctx) + defer waitCancel() + + var e TEvent + + var wg sync.WaitGroup + wg.Add(1) + + go func() { + defer wg.Done() + + ec.queueMutex.Lock() + defer ec.queueMutex.Unlock() + + var ok bool + for e, ok = ec.takeEvent(); !ok && (waitCtx.Err() == nil); e, ok = ec.takeEvent() { + ec.queueCond.Wait() + } + + waitCancel() + }() + + // wait for the waiting goroutine or the parent context to finish, whichever happens first + <-waitCtx.Done() + + // if the parent context is done, force the waiting goroutine to exit + ec.queueCond.Signal() + wg.Wait() + + return e, ctx.Err() +} + +// Run pumps events from the queue to the events channel. +func (ec *EventChannel[TEvent]) Run(ctx context.Context) error { + for { + e, err := ec.waitForEvent(ctx) + if err != nil { + return err + } + + select { + case ec.events <- e: + case <-ctx.Done(): + return ctx.Err() + } + } +} diff --git a/polygon/sync/event_channel_test.go b/polygon/sync/event_channel_test.go new file mode 100644 index 00000000000..65840601286 --- /dev/null +++ b/polygon/sync/event_channel_test.go @@ -0,0 +1,64 @@ +package sync + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestEventChannel(t *testing.T) { + t.Parallel() + + t.Run("PushEvent1", func(t *testing.T) { + ch := NewEventChannel[string](2) + + ch.PushEvent("event1") + e, ok := ch.takeEvent() + require.True(t, ok) + require.Equal(t, "event1", e) + + _, ok = ch.takeEvent() + require.False(t, ok) + }) + + t.Run("PushEvent3", func(t *testing.T) { + ch := NewEventChannel[string](2) + + ch.PushEvent("event1") + ch.PushEvent("event2") + ch.PushEvent("event3") + + e, ok := ch.takeEvent() + require.True(t, ok) + require.Equal(t, "event2", e) + + e, ok = ch.takeEvent() + require.True(t, ok) + require.Equal(t, "event3", e) + + _, ok = ch.takeEvent() + require.False(t, ok) + }) + + t.Run("ConsumeEvents", func(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + ch := NewEventChannel[string](2) + + go func() { + err := ch.Run(ctx) + require.ErrorIs(t, err, context.Canceled) + }() + + ch.PushEvent("event1") + ch.PushEvent("event2") + ch.PushEvent("event3") + + events := ch.Events() + require.Equal(t, "event2", <-events) + require.Equal(t, "event3", <-events) + require.Equal(t, 0, len(events)) + }) +} diff --git a/polygon/sync/execution_client.go b/polygon/sync/execution_client.go new file mode 100644 index 00000000000..5c722fdda9e --- /dev/null +++ b/polygon/sync/execution_client.go @@ -0,0 +1,36 @@ +package sync + +import ( + "context" + + executionclient "github.com/ledgerwatch/erigon/cl/phase1/execution_client" + "github.com/ledgerwatch/erigon/core/types" +) + +type ExecutionClient interface { + InsertBlocks(ctx context.Context, blocks []*types.Block) error + UpdateForkChoice(ctx context.Context, tip *types.Header, finalizedHeader *types.Header) error + CurrentHeader(ctx context.Context) (*types.Header, error) +} + +type executionClient struct { + engine executionclient.ExecutionEngine +} + +func NewExecutionClient(engine executionclient.ExecutionEngine) ExecutionClient { + return &executionClient{engine} +} + +func (e *executionClient) InsertBlocks(ctx context.Context, blocks []*types.Block) error { + return e.engine.InsertBlocks(ctx, blocks, true) +} + +func (e *executionClient) UpdateForkChoice(_ context.Context, _ *types.Header, _ *types.Header) error { + // TODO - not ready for execution - missing state sync event and span data - uncomment once ready + //return e.engine.ForkChoiceUpdate(ctx, finalizedHeader.Hash(), tip.Hash()) + return nil +} + +func (e *executionClient) CurrentHeader(ctx context.Context) (*types.Header, error) { + return e.engine.CurrentHeader(ctx) +} diff --git a/polygon/sync/header_downloader.go b/polygon/sync/header_downloader.go deleted file mode 100644 index 2f67e268478..00000000000 --- a/polygon/sync/header_downloader.go +++ /dev/null @@ -1,213 +0,0 @@ -package sync - -import ( - "context" - "fmt" - "math" - "sort" - "sync" - "time" - - lru "github.com/hashicorp/golang-lru/v2" - "github.com/ledgerwatch/log/v3" - - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/core/types" -) - -const headerDownloaderLogPrefix = "HeaderDownloader" - -func NewHeaderDownloader(logger log.Logger, sentry Sentry, db DB, heimdall Heimdall, verify StatePointHeadersVerifier) *HeaderDownloader { - statePointHeadersMemo, err := lru.New[common.Hash, []*types.Header](sentry.MaxPeers()) - if err != nil { - panic(err) - } - - return &HeaderDownloader{ - logger: logger, - sentry: sentry, - db: db, - heimdall: heimdall, - verify: verify, - statePointHeadersMemo: statePointHeadersMemo, - } -} - -type HeaderDownloader struct { - logger log.Logger - sentry Sentry - db DB - heimdall Heimdall - verify StatePointHeadersVerifier - statePointHeadersMemo *lru.Cache[common.Hash, []*types.Header] // statePoint.rootHash->[headers part of state point] -} - -func (hd *HeaderDownloader) DownloadUsingCheckpoints(ctx context.Context, start uint64) error { - checkpoints, err := hd.heimdall.FetchCheckpoints(ctx, start) - if err != nil { - return err - } - - err = hd.downloadUsingStatePoints(ctx, statePointsFromCheckpoints(checkpoints)) - if err != nil { - return err - } - - return nil -} - -func (hd *HeaderDownloader) DownloadUsingMilestones(ctx context.Context, start uint64) error { - milestones, err := hd.heimdall.FetchMilestones(ctx, start) - if err != nil { - return err - } - - err = hd.downloadUsingStatePoints(ctx, statePointsFromMilestones(milestones)) - if err != nil { - return err - } - - return nil -} - -func (hd *HeaderDownloader) downloadUsingStatePoints(ctx context.Context, statePoints statePoints) error { - for len(statePoints) > 0 { - allPeers := hd.sentry.PeersWithBlockNumInfo() - if len(allPeers) == 0 { - hd.logger.Warn(fmt.Sprintf("[%s] zero peers, will try again", headerDownloaderLogPrefix)) - continue - } - - sort.Sort(allPeers) // sort by block num in asc order - peers := hd.choosePeers(allPeers, statePoints) - if len(peers) == 0 { - hd.logger.Warn( - fmt.Sprintf("[%s] can't use any peers to sync, will try again", headerDownloaderLogPrefix), - "start", statePoints[0].startBlock, - "end", statePoints[len(statePoints)-1].endBlock, - "minPeerBlockNum", allPeers[0].BlockNum, - "minPeerID", allPeers[0].ID, - ) - continue - } - - peerCount := len(peers) - statePointsBatch := statePoints[:peerCount] - hd.logger.Info( - fmt.Sprintf("[%s] downloading headers", headerDownloaderLogPrefix), - "start", statePointsBatch[0].startBlock, - "end", statePointsBatch[len(statePointsBatch)-1].endBlock, - "kind", statePointsBatch[0].kind, - "peerCount", peerCount, - ) - - headerBatches := make([][]*types.Header, len(statePointsBatch)) - maxStatePointLength := float64(0) - wg := sync.WaitGroup{} - for i, point := range statePointsBatch { - maxStatePointLength = math.Max(float64(point.length()), maxStatePointLength) - wg.Add(1) - go func(i int, statePoint *statePoint, peerID string) { - defer wg.Done() - - if headers, ok := hd.statePointHeadersMemo.Get(statePoint.rootHash); ok { - headerBatches[i] = headers - return - } - - headers, err := hd.sentry.DownloadHeaders(ctx, statePoint.startBlock, statePoint.endBlock, peerID) - if err != nil { - hd.logger.Debug( - fmt.Sprintf("[%s] issue downloading headers, will try again", headerDownloaderLogPrefix), - "err", err, - "start", statePoint.startBlock, - "end", statePoint.endBlock, - "rootHash", statePoint.rootHash, - "kind", statePoint.kind, - "peerID", peerID, - ) - return - } - - if err := hd.verify(statePoint, headers); err != nil { - hd.logger.Debug( - fmt.Sprintf( - "[%s] bad headers received from peer for state point - penalizing and will try again", - headerDownloaderLogPrefix, - ), - "start", statePoint.startBlock, - "end", statePoint.endBlock, - "rootHash", statePoint.rootHash, - "kind", statePoint.kind, - "peerID", peerID, - ) - - hd.sentry.Penalize(peerID) - return - } - - hd.statePointHeadersMemo.Add(statePoint.rootHash, headers) - headerBatches[i] = headers - }(i, point, peers[i].ID) - } - - wg.Wait() - headers := make([]*types.Header, 0, int(maxStatePointLength)*peerCount) - gapIndex := -1 - for i, headerBatch := range headerBatches { - if len(headerBatch) == 0 { - hd.logger.Debug( - fmt.Sprintf("[%s] no headers, will try again", headerDownloaderLogPrefix), - "start", statePointsBatch[i].startBlock, - "end", statePointsBatch[i].endBlock, - "rootHash", statePointsBatch[i].rootHash, - "kind", statePointsBatch[i].kind, - ) - - gapIndex = i - break - } - - headers = append(headers, headerBatch...) - } - - if gapIndex >= 0 { - statePoints = statePoints[gapIndex:] - } else { - statePoints = statePoints[len(statePointsBatch):] - } - - dbWriteStartTime := time.Now() - if err := hd.db.WriteHeaders(headers); err != nil { - return err - } - - hd.logger.Debug( - fmt.Sprintf("[%s] wrote headers to db", headerDownloaderLogPrefix), - "numHeaders", len(headers), - "time", time.Since(dbWriteStartTime), - ) - } - - return nil -} - -// choosePeers assumes peers are sorted in ascending order based on block num -func (hd *HeaderDownloader) choosePeers(peers PeersWithBlockNumInfo, statePoints statePoints) PeersWithBlockNumInfo { - var peersIdx int - chosenPeers := make(PeersWithBlockNumInfo, 0, len(peers)) - for _, statePoint := range statePoints { - if peersIdx >= len(peers) { - break - } - - peer := peers[peersIdx] - if peer.BlockNum.Cmp(statePoint.endBlock) > -1 { - chosenPeers = append(chosenPeers, peer) - } - - peersIdx++ - } - - return chosenPeers -} diff --git a/polygon/sync/header_downloader_test.go b/polygon/sync/header_downloader_test.go deleted file mode 100644 index 5c430bf4f6a..00000000000 --- a/polygon/sync/header_downloader_test.go +++ /dev/null @@ -1,281 +0,0 @@ -package sync - -import ( - "context" - "errors" - "fmt" - "math" - "math/big" - "testing" - - "github.com/golang/mock/gomock" - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/require" - - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/polygon/heimdall" - "github.com/ledgerwatch/erigon/turbo/testlog" -) - -func newHeaderDownloaderTest(t *testing.T) *headerDownloaderTest { - return newHeaderDownloaderTestWithOpts(t, headerDownloaderTestOpts{}) -} - -func newHeaderDownloaderTestWithOpts(t *testing.T, opts headerDownloaderTestOpts) *headerDownloaderTest { - ctrl := gomock.NewController(t) - heimdall := NewMockHeimdall(ctrl) - sentry := NewMockSentry(ctrl) - sentry.EXPECT().MaxPeers().Return(100).Times(1) - db := NewMockDB(ctrl) - logger := testlog.Logger(t, log.LvlDebug) - headerVerifier := opts.getOrCreateDefaultHeaderVerifier() - headerDownloader := NewHeaderDownloader(logger, sentry, db, heimdall, headerVerifier) - return &headerDownloaderTest{ - heimdall: heimdall, - sentry: sentry, - db: db, - headerDownloader: headerDownloader, - } -} - -type headerDownloaderTestOpts struct { - headerVerifier StatePointHeadersVerifier -} - -func (opts headerDownloaderTestOpts) getOrCreateDefaultHeaderVerifier() StatePointHeadersVerifier { - if opts.headerVerifier == nil { - return func(_ *statePoint, _ []*types.Header) error { - return nil - } - } - - return opts.headerVerifier -} - -type headerDownloaderTest struct { - heimdall *MockHeimdall - sentry *MockSentry - db *MockDB - headerDownloader *HeaderDownloader -} - -func (hdt headerDownloaderTest) fakePeers(count int, blockNums ...*big.Int) PeersWithBlockNumInfo { - peers := make(PeersWithBlockNumInfo, count) - for i := range peers { - var blockNum *big.Int - if i < len(blockNums) { - blockNum = blockNums[i] - } else { - blockNum = new(big.Int).SetUint64(math.MaxUint64) - } - - peers[i] = &PeerWithBlockNumInfo{ - ID: fmt.Sprintf("peer%d", i+1), - BlockNum: blockNum, - } - } - - return peers -} - -func (hdt headerDownloaderTest) fakeCheckpoints(count int) []*heimdall.Checkpoint { - checkpoints := make([]*heimdall.Checkpoint, count) - for i := range checkpoints { - num := i + 1 - checkpoints[i] = &heimdall.Checkpoint{ - StartBlock: big.NewInt(int64(num)), - EndBlock: big.NewInt(int64(num)), - RootHash: common.BytesToHash([]byte(fmt.Sprintf("0x%d", num))), - } - } - - return checkpoints -} - -func (hdt headerDownloaderTest) fakeMilestones(count int) []*heimdall.Milestone { - milestones := make([]*heimdall.Milestone, count) - for i := range milestones { - num := i + 1 - milestones[i] = &heimdall.Milestone{ - StartBlock: big.NewInt(int64(num)), - EndBlock: big.NewInt(int64(num)), - Hash: common.BytesToHash([]byte(fmt.Sprintf("0x%d", num))), - } - } - - return milestones -} - -type downloadHeadersMock func(context.Context, *big.Int, *big.Int, string) ([]*types.Header, error) - -func (hdt headerDownloaderTest) defaultDownloadHeadersMock() downloadHeadersMock { - return func(ctx context.Context, start *big.Int, end *big.Int, peerID string) ([]*types.Header, error) { - res := make([]*types.Header, new(big.Int).Sub(end, start).Uint64()+1) - for i := new(big.Int).Set(start); i.Cmp(end) < 1; i.Add(i, new(big.Int).SetUint64(1)) { - res[new(big.Int).Sub(i, start).Uint64()] = &types.Header{Number: new(big.Int).Set(i)} - } - return res, nil - } -} - -func (hdt headerDownloaderTest) defaultWriteHeadersMock(capture *[]*types.Header) func([]*types.Header) error { - return func(headers []*types.Header) error { - *capture = append(*capture, headers...) - return nil - } -} - -func TestHeaderDownloadUsingMilestones(t *testing.T) { - test := newHeaderDownloaderTest(t) - test.heimdall.EXPECT(). - FetchMilestones(gomock.Any(), gomock.Any()). - Return(test.fakeMilestones(4), nil). - Times(1) - test.sentry.EXPECT(). - PeersWithBlockNumInfo(). - Return(test.fakePeers(8)). - Times(1) - test.sentry.EXPECT(). - DownloadHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). - DoAndReturn(test.defaultDownloadHeadersMock()). - Times(4) - var persistedHeaders []*types.Header - test.db.EXPECT(). - WriteHeaders(gomock.Any()). - DoAndReturn(test.defaultWriteHeadersMock(&persistedHeaders)). - Times(1) - - err := test.headerDownloader.DownloadUsingMilestones(context.Background(), 1) - require.NoError(t, err) - require.Len(t, persistedHeaders, 4) - // check headers are written in order - require.Equal(t, uint64(1), persistedHeaders[0].Number.Uint64()) - require.Equal(t, uint64(2), persistedHeaders[1].Number.Uint64()) - require.Equal(t, uint64(3), persistedHeaders[2].Number.Uint64()) - require.Equal(t, uint64(4), persistedHeaders[3].Number.Uint64()) -} - -func TestHeaderDownloadUsingCheckpoints(t *testing.T) { - test := newHeaderDownloaderTest(t) - test.heimdall.EXPECT(). - FetchCheckpoints(gomock.Any(), gomock.Any()). - Return(test.fakeCheckpoints(8), nil). - Times(1) - test.sentry.EXPECT(). - PeersWithBlockNumInfo(). - Return(test.fakePeers(2)). - Times(4) - test.sentry.EXPECT(). - DownloadHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). - DoAndReturn(test.defaultDownloadHeadersMock()). - Times(8) - var persistedHeaders []*types.Header - test.db.EXPECT(). - WriteHeaders(gomock.Any()). - DoAndReturn(test.defaultWriteHeadersMock(&persistedHeaders)). - Times(4) - - err := test.headerDownloader.DownloadUsingCheckpoints(context.Background(), 1) - require.NoError(t, err) - require.Len(t, persistedHeaders, 8) - // check headers are written in order - require.Equal(t, uint64(1), persistedHeaders[0].Number.Uint64()) - require.Equal(t, uint64(2), persistedHeaders[1].Number.Uint64()) - require.Equal(t, uint64(3), persistedHeaders[2].Number.Uint64()) - require.Equal(t, uint64(4), persistedHeaders[3].Number.Uint64()) - require.Equal(t, uint64(5), persistedHeaders[4].Number.Uint64()) - require.Equal(t, uint64(6), persistedHeaders[5].Number.Uint64()) - require.Equal(t, uint64(7), persistedHeaders[6].Number.Uint64()) - require.Equal(t, uint64(8), persistedHeaders[7].Number.Uint64()) -} - -func TestHeaderDownloadWhenInvalidStateThenPenalizePeerAndReDownload(t *testing.T) { - var firstTimeInvalidReturned bool - firstTimeInvalidReturnedPtr := &firstTimeInvalidReturned - test := newHeaderDownloaderTestWithOpts(t, headerDownloaderTestOpts{ - headerVerifier: func(statePoint *statePoint, headers []*types.Header) error { - if statePoint.startBlock.Cmp(new(big.Int).SetUint64(2)) == 0 && !*firstTimeInvalidReturnedPtr { - *firstTimeInvalidReturnedPtr = true - return errors.New("invalid checkpoint") - } - return nil - }, - }) - test.heimdall.EXPECT(). - FetchCheckpoints(gomock.Any(), gomock.Any()). - Return(test.fakeCheckpoints(6), nil). - Times(1) - test.sentry.EXPECT(). - PeersWithBlockNumInfo(). - Return(test.fakePeers(3)). - Times(3) - test.sentry.EXPECT(). - DownloadHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). - DoAndReturn(test.defaultDownloadHeadersMock()). - // request 1,2,3 in parallel - // -> 2 fails - // requests 2,3,4 in parallel - // 3 is cached - // requests 5,6 in parallel - // in total 6 requests + 1 request for re-requesting checkpoint 2 - // total = 7 (note this also tests caching works) - Times(7) - test.sentry.EXPECT(). - Penalize(gomock.Eq("peer2")). - Times(1) - var persistedHeadersFirstTime, persistedHeadersRemaining []*types.Header - gomock.InOrder( - test.db.EXPECT(). - WriteHeaders(gomock.Any()). - DoAndReturn(test.defaultWriteHeadersMock(&persistedHeadersFirstTime)). - Times(1), - test.db.EXPECT(). - WriteHeaders(gomock.Any()). - DoAndReturn(test.defaultWriteHeadersMock(&persistedHeadersRemaining)). - Times(2), - ) - - err := test.headerDownloader.DownloadUsingCheckpoints(context.Background(), 1) - require.NoError(t, err) - require.Len(t, persistedHeadersFirstTime, 1) - require.Len(t, persistedHeadersRemaining, 5) -} - -func TestHeaderDownloadWhenZeroPeersTriesAgain(t *testing.T) { - test := newHeaderDownloaderTest(t) - test.heimdall.EXPECT(). - FetchCheckpoints(gomock.Any(), gomock.Any()). - Return(test.fakeCheckpoints(8), nil). - Times(1) - test.sentry.EXPECT(). - DownloadHeaders(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). - DoAndReturn(test.defaultDownloadHeadersMock()). - Times(8) - var persistedHeaders []*types.Header - test.db.EXPECT(). - WriteHeaders(gomock.Any()). - DoAndReturn(test.defaultWriteHeadersMock(&persistedHeaders)). - Times(4) - gomock.InOrder( - // first, no peers at all - test.sentry.EXPECT(). - PeersWithBlockNumInfo(). - Return(nil). - Times(1), - // second, 2 peers but not synced enough for us to use - test.sentry.EXPECT(). - PeersWithBlockNumInfo(). - Return(test.fakePeers(2, new(big.Int).SetUint64(0), new(big.Int).SetUint64(0))). - Times(1), - // then, 2 fully synced peers that we can use - test.sentry.EXPECT(). - PeersWithBlockNumInfo(). - Return(test.fakePeers(2)). - Times(4), - ) - - err := test.headerDownloader.DownloadUsingCheckpoints(context.Background(), 1) - require.NoError(t, err) - require.Len(t, persistedHeaders, 8) -} diff --git a/polygon/sync/header_time_validator.go b/polygon/sync/header_time_validator.go index d2da61764cc..e504cd3b2f4 100644 --- a/polygon/sync/header_time_validator.go +++ b/polygon/sync/header_time_validator.go @@ -18,7 +18,7 @@ type HeaderTimeValidator interface { ValidateHeaderTime(header *types.Header, now time.Time, parent *types.Header) error } -type headerTimeValidatorImpl struct { +type headerTimeValidator struct { borConfig *borcfg.BorConfig spans *SpansCache validatorSetFactory func(headerNum uint64) validatorSetInterface @@ -39,7 +39,7 @@ func NewHeaderTimeValidator( } } - impl := headerTimeValidatorImpl{ + htv := headerTimeValidator{ borConfig: borConfig, spans: spans, validatorSetFactory: validatorSetFactory, @@ -47,31 +47,31 @@ func NewHeaderTimeValidator( } if validatorSetFactory == nil { - impl.validatorSetFactory = impl.makeValidatorSet + htv.validatorSetFactory = htv.makeValidatorSet } - return &impl + return &htv } -func (impl *headerTimeValidatorImpl) makeValidatorSet(headerNum uint64) validatorSetInterface { - span := impl.spans.SpanAt(headerNum) +func (htv *headerTimeValidator) makeValidatorSet(headerNum uint64) validatorSetInterface { + span := htv.spans.SpanAt(headerNum) if span == nil { return nil } return valset.NewValidatorSet(span.ValidatorSet.Validators) } -func (impl *headerTimeValidatorImpl) ValidateHeaderTime(header *types.Header, now time.Time, parent *types.Header) error { +func (htv *headerTimeValidator) ValidateHeaderTime(header *types.Header, now time.Time, parent *types.Header) error { headerNum := header.Number.Uint64() - validatorSet := impl.validatorSetFactory(headerNum) + validatorSet := htv.validatorSetFactory(headerNum) if validatorSet == nil { - return fmt.Errorf("headerTimeValidatorImpl.ValidateHeaderTime: no span at %d", headerNum) + return fmt.Errorf("headerTimeValidator.ValidateHeaderTime: no span at %d", headerNum) } - sprintNum := impl.borConfig.CalculateSprintNumber(headerNum) + sprintNum := htv.borConfig.CalculateSprintNumber(headerNum) if sprintNum > 0 { validatorSet.IncrementProposerPriority(int(sprintNum)) } - return bor.ValidateHeaderTime(header, now, parent, validatorSet, impl.borConfig, impl.signaturesCache) + return bor.ValidateHeaderTime(header, now, parent, validatorSet, htv.borConfig, htv.signaturesCache) } diff --git a/polygon/sync/header_validator.go b/polygon/sync/header_validator.go index 81b0cf983e2..0ac887a3aba 100644 --- a/polygon/sync/header_validator.go +++ b/polygon/sync/header_validator.go @@ -13,7 +13,7 @@ type HeaderValidator interface { ValidateHeader(header *types.Header, parent *types.Header, now time.Time) error } -type headerValidatorImpl struct { +type headerValidator struct { chainConfig *chain.Config borConfig *borcfg.BorConfig headerTimeValidator HeaderTimeValidator @@ -24,31 +24,31 @@ func NewHeaderValidator( borConfig *borcfg.BorConfig, headerTimeValidator HeaderTimeValidator, ) HeaderValidator { - return &headerValidatorImpl{ + return &headerValidator{ chainConfig: chainConfig, borConfig: borConfig, headerTimeValidator: headerTimeValidator, } } -func (impl *headerValidatorImpl) ValidateHeader(header *types.Header, parent *types.Header, now time.Time) error { +func (hv *headerValidator) ValidateHeader(header *types.Header, parent *types.Header, now time.Time) error { if err := bor.ValidateHeaderUnusedFields(header); err != nil { return err } - if err := bor.ValidateHeaderGas(header, parent, impl.chainConfig); err != nil { + if err := bor.ValidateHeaderGas(header, parent, hv.chainConfig); err != nil { return err } if err := bor.ValidateHeaderExtraLength(header.Extra); err != nil { return err } - if err := bor.ValidateHeaderSprintValidators(header, impl.borConfig); err != nil { + if err := bor.ValidateHeaderSprintValidators(header, hv.borConfig); err != nil { return err } - if impl.headerTimeValidator != nil { - if err := impl.headerTimeValidator.ValidateHeaderTime(header, now, parent); err != nil { + if hv.headerTimeValidator != nil { + if err := hv.headerTimeValidator.ValidateHeaderTime(header, now, parent); err != nil { return err } } diff --git a/polygon/sync/heimdall.go b/polygon/sync/heimdall.go deleted file mode 100644 index 0491b9c2367..00000000000 --- a/polygon/sync/heimdall.go +++ /dev/null @@ -1,174 +0,0 @@ -package sync - -import ( - "context" - "errors" - "math/big" - "time" - - "github.com/ledgerwatch/log/v3" - - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/polygon/bor" - "github.com/ledgerwatch/erigon/polygon/heimdall" -) - -// Heimdall is a wrapper of Heimdall HTTP API -// -//go:generate mockgen -destination=./heimdall_mock.go -package=sync . Heimdall -type Heimdall interface { - FetchCheckpoints(ctx context.Context, start uint64) ([]*heimdall.Checkpoint, error) - FetchMilestones(ctx context.Context, start uint64) ([]*heimdall.Milestone, error) - FetchSpan(ctx context.Context, start uint64) (*heimdall.HeimdallSpan, error) - OnMilestoneEvent(ctx context.Context, callback func(*heimdall.Milestone)) error -} - -// ErrIncompleteMilestoneRange happens when FetchMilestones is called with an old start block because old milestones are evicted -var ErrIncompleteMilestoneRange = errors.New("milestone range doesn't contain the start block") - -type HeimdallImpl struct { - client heimdall.HeimdallClient - pollDelay time.Duration - logger log.Logger -} - -func NewHeimdall(client heimdall.HeimdallClient, logger log.Logger) Heimdall { - impl := HeimdallImpl{ - client: client, - pollDelay: time.Second, - logger: logger, - } - return &impl -} - -func cmpNumToRange(n uint64, min *big.Int, max *big.Int) int { - num := new(big.Int).SetUint64(n) - if num.Cmp(min) < 0 { - return -1 - } - if num.Cmp(max) > 0 { - return 1 - } - return 0 -} - -func cmpBlockNumToCheckpointRange(n uint64, c *heimdall.Checkpoint) int { - return cmpNumToRange(n, c.StartBlock, c.EndBlock) -} - -func cmpBlockNumToMilestoneRange(n uint64, m *heimdall.Milestone) int { - return cmpNumToRange(n, m.StartBlock, m.EndBlock) -} - -func (impl *HeimdallImpl) FetchCheckpoints(ctx context.Context, start uint64) ([]*heimdall.Checkpoint, error) { - count, err := impl.client.FetchCheckpointCount(ctx) - if err != nil { - return nil, err - } - - var checkpoints []*heimdall.Checkpoint - - for i := count; i >= 1; i-- { - c, err := impl.client.FetchCheckpoint(ctx, i) - if err != nil { - return nil, err - } - - cmpResult := cmpBlockNumToCheckpointRange(start, c) - // the start block is past the last checkpoint - if cmpResult > 0 { - return nil, nil - } - - checkpoints = append(checkpoints, c) - - // the checkpoint contains the start block - if cmpResult == 0 { - break - } - } - - common.SliceReverse(checkpoints) - return checkpoints, nil -} - -func (impl *HeimdallImpl) FetchMilestones(ctx context.Context, start uint64) ([]*heimdall.Milestone, error) { - count, err := impl.client.FetchMilestoneCount(ctx) - if err != nil { - return nil, err - } - - var milestones []*heimdall.Milestone - - for i := count; i >= 1; i-- { - m, err := impl.client.FetchMilestone(ctx, i) - if err != nil { - if errors.Is(err, heimdall.ErrNotInMilestoneList) { - common.SliceReverse(milestones) - return milestones, ErrIncompleteMilestoneRange - } - return nil, err - } - - cmpResult := cmpBlockNumToMilestoneRange(start, m) - // the start block is past the last milestone - if cmpResult > 0 { - return nil, nil - } - - milestones = append(milestones, m) - - // the checkpoint contains the start block - if cmpResult == 0 { - break - } - } - - common.SliceReverse(milestones) - return milestones, nil -} - -func (impl *HeimdallImpl) FetchSpan(ctx context.Context, start uint64) (*heimdall.HeimdallSpan, error) { - return impl.client.Span(ctx, bor.SpanIDAt(start)) -} - -func (impl *HeimdallImpl) OnMilestoneEvent(ctx context.Context, callback func(*heimdall.Milestone)) error { - currentCount, err := impl.client.FetchMilestoneCount(ctx) - if err != nil { - return err - } - - go func() { - for { - count, err := impl.client.FetchMilestoneCount(ctx) - if err != nil { - if !errors.Is(err, context.Canceled) { - impl.logger.Error("HeimdallImpl.OnMilestoneEvent FetchMilestoneCount error", "err", err) - } - break - } - - if count <= currentCount { - pollDelayTimer := time.NewTimer(impl.pollDelay) - select { - case <-ctx.Done(): - return - case <-pollDelayTimer.C: - } - } else { - currentCount = count - m, err := impl.client.FetchMilestone(ctx, count) - if err != nil { - if !errors.Is(err, context.Canceled) { - impl.logger.Error("HeimdallImpl.OnMilestoneEvent FetchMilestone error", "err", err) - } - break - } - - go callback(m) - } - } - }() - - return nil -} diff --git a/polygon/sync/heimdall_mock.go b/polygon/sync/heimdall_mock.go deleted file mode 100644 index ca7d1e1fbf6..00000000000 --- a/polygon/sync/heimdall_mock.go +++ /dev/null @@ -1,96 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/ledgerwatch/erigon/polygon/sync (interfaces: Heimdall) - -// Package sync is a generated GoMock package. -package sync - -import ( - context "context" - reflect "reflect" - - gomock "github.com/golang/mock/gomock" - - checkpoint "github.com/ledgerwatch/erigon/polygon/heimdall" -) - -// MockHeimdall is a mock of Heimdall interface. -type MockHeimdall struct { - ctrl *gomock.Controller - recorder *MockHeimdallMockRecorder -} - -// MockHeimdallMockRecorder is the mock recorder for MockHeimdall. -type MockHeimdallMockRecorder struct { - mock *MockHeimdall -} - -// NewMockHeimdall creates a new mock instance. -func NewMockHeimdall(ctrl *gomock.Controller) *MockHeimdall { - mock := &MockHeimdall{ctrl: ctrl} - mock.recorder = &MockHeimdallMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockHeimdall) EXPECT() *MockHeimdallMockRecorder { - return m.recorder -} - -// FetchCheckpoints mocks base method. -func (m *MockHeimdall) FetchCheckpoints(arg0 context.Context, arg1 uint64) ([]*checkpoint.Checkpoint, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "FetchCheckpoints", arg0, arg1) - ret0, _ := ret[0].([]*checkpoint.Checkpoint) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// FetchCheckpoints indicates an expected call of FetchCheckpoints. -func (mr *MockHeimdallMockRecorder) FetchCheckpoints(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchCheckpoints", reflect.TypeOf((*MockHeimdall)(nil).FetchCheckpoints), arg0, arg1) -} - -// FetchMilestones mocks base method. -func (m *MockHeimdall) FetchMilestones(arg0 context.Context, arg1 uint64) ([]*checkpoint.Milestone, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "FetchMilestones", arg0, arg1) - ret0, _ := ret[0].([]*checkpoint.Milestone) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// FetchMilestones indicates an expected call of FetchMilestones. -func (mr *MockHeimdallMockRecorder) FetchMilestones(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchMilestones", reflect.TypeOf((*MockHeimdall)(nil).FetchMilestones), arg0, arg1) -} - -// FetchSpan mocks base method. -func (m *MockHeimdall) FetchSpan(arg0 context.Context, arg1 uint64) (*checkpoint.HeimdallSpan, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "FetchSpan", arg0, arg1) - ret0, _ := ret[0].(*checkpoint.HeimdallSpan) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// FetchSpan indicates an expected call of FetchSpan. -func (mr *MockHeimdallMockRecorder) FetchSpan(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchSpan", reflect.TypeOf((*MockHeimdall)(nil).FetchSpan), arg0, arg1) -} - -// OnMilestoneEvent mocks base method. -func (m *MockHeimdall) OnMilestoneEvent(arg0 context.Context, arg1 func(*checkpoint.Milestone)) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "OnMilestoneEvent", arg0, arg1) - ret0, _ := ret[0].(error) - return ret0 -} - -// OnMilestoneEvent indicates an expected call of OnMilestoneEvent. -func (mr *MockHeimdallMockRecorder) OnMilestoneEvent(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OnMilestoneEvent", reflect.TypeOf((*MockHeimdall)(nil).OnMilestoneEvent), arg0, arg1) -} diff --git a/polygon/sync/heimdall_test.go b/polygon/sync/heimdall_test.go deleted file mode 100644 index 2c4f11c075a..00000000000 --- a/polygon/sync/heimdall_test.go +++ /dev/null @@ -1,247 +0,0 @@ -package sync - -import ( - "context" - "math/big" - "testing" - "time" - - "github.com/golang/mock/gomock" - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - heimdallclient "github.com/ledgerwatch/erigon/polygon/heimdall" -) - -func makeCheckpoint(start uint64, len uint) *heimdallclient.Checkpoint { - c := heimdallclient.Checkpoint{ - StartBlock: new(big.Int).SetUint64(start), - EndBlock: new(big.Int).SetUint64(start + uint64(len) - 1), - Timestamp: uint64(time.Now().Unix()), - } - return &c -} - -func makeMilestone(start uint64, len uint) *heimdallclient.Milestone { - m := heimdallclient.Milestone{ - StartBlock: new(big.Int).SetUint64(start), - EndBlock: new(big.Int).SetUint64(start + uint64(len) - 1), - Timestamp: uint64(time.Now().Unix()), - } - return &m -} - -type heimdallTest struct { - ctx context.Context - client *heimdallclient.MockHeimdallClient - heimdall Heimdall - logger log.Logger -} - -func newHeimdallTest(t *testing.T) heimdallTest { - logger := log.New() - ctx := context.Background() - - ctrl := gomock.NewController(t) - t.Cleanup(ctrl.Finish) - - client := heimdallclient.NewMockHeimdallClient(ctrl) - heimdall := NewHeimdall(client, logger) - - return heimdallTest{ - ctx, - client, - heimdall, - logger, - } -} - -func (test heimdallTest) setupCheckpoints(count int) []*heimdallclient.Checkpoint { - var expectedCheckpoints []*heimdallclient.Checkpoint - for i := 0; i < count; i++ { - c := makeCheckpoint(uint64(i*256), 256) - expectedCheckpoints = append(expectedCheckpoints, c) - } - - client := test.client - client.EXPECT().FetchCheckpointCount(gomock.Any()).Return(int64(len(expectedCheckpoints)), nil) - client.EXPECT().FetchCheckpoint(gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, number int64) (*heimdallclient.Checkpoint, error) { - return expectedCheckpoints[number-1], nil - }).AnyTimes() - - return expectedCheckpoints -} - -func (test heimdallTest) setupMilestones(count int) []*heimdallclient.Milestone { - var expectedMilestones []*heimdallclient.Milestone - for i := 0; i < count; i++ { - m := makeMilestone(uint64(i*16), 16) - expectedMilestones = append(expectedMilestones, m) - } - - client := test.client - client.EXPECT().FetchMilestoneCount(gomock.Any()).Return(int64(len(expectedMilestones)), nil) - client.EXPECT().FetchMilestone(gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, number int64) (*heimdallclient.Milestone, error) { - return expectedMilestones[number-1], nil - }).AnyTimes() - - return expectedMilestones -} - -func TestFetchCheckpoints1(t *testing.T) { - test := newHeimdallTest(t) - expectedCheckpoint := test.setupCheckpoints(1)[0] - - checkpoints, err := test.heimdall.FetchCheckpoints(test.ctx, 0) - require.Nil(t, err) - - require.Equal(t, 1, len(checkpoints)) - assert.Equal(t, expectedCheckpoint.Timestamp, checkpoints[0].Timestamp) -} - -func TestFetchCheckpointsPastLast(t *testing.T) { - test := newHeimdallTest(t) - _ = test.setupCheckpoints(1)[0] - - checkpoints, err := test.heimdall.FetchCheckpoints(test.ctx, 500) - require.Nil(t, err) - - require.Equal(t, 0, len(checkpoints)) -} - -func TestFetchCheckpoints10(t *testing.T) { - test := newHeimdallTest(t) - expectedCheckpoints := test.setupCheckpoints(10) - - checkpoints, err := test.heimdall.FetchCheckpoints(test.ctx, 0) - require.Nil(t, err) - - require.Equal(t, len(expectedCheckpoints), len(checkpoints)) - for i := 0; i < len(checkpoints); i++ { - assert.Equal(t, expectedCheckpoints[i].StartBlock.Uint64(), checkpoints[i].StartBlock.Uint64()) - } -} - -func TestFetchCheckpointsMiddleStart(t *testing.T) { - test := newHeimdallTest(t) - expectedCheckpoints := test.setupCheckpoints(10) - const offset = 6 - - checkpoints, err := test.heimdall.FetchCheckpoints(test.ctx, expectedCheckpoints[offset].StartBlock.Uint64()) - require.Nil(t, err) - - require.Equal(t, len(expectedCheckpoints)-offset, len(checkpoints)) - for i := 0; i < len(checkpoints); i++ { - assert.Equal(t, expectedCheckpoints[offset+i].StartBlock.Uint64(), checkpoints[i].StartBlock.Uint64()) - } -} - -func TestFetchMilestones1(t *testing.T) { - test := newHeimdallTest(t) - expectedMilestone := test.setupMilestones(1)[0] - - milestones, err := test.heimdall.FetchMilestones(test.ctx, 0) - require.Nil(t, err) - - require.Equal(t, 1, len(milestones)) - assert.Equal(t, expectedMilestone.Timestamp, milestones[0].Timestamp) -} - -func TestFetchMilestonesPastLast(t *testing.T) { - test := newHeimdallTest(t) - _ = test.setupMilestones(1)[0] - - milestones, err := test.heimdall.FetchMilestones(test.ctx, 500) - require.Nil(t, err) - - require.Equal(t, 0, len(milestones)) -} - -func TestFetchMilestones10(t *testing.T) { - test := newHeimdallTest(t) - expectedMilestones := test.setupMilestones(10) - - milestones, err := test.heimdall.FetchMilestones(test.ctx, 0) - require.Nil(t, err) - - require.Equal(t, len(expectedMilestones), len(milestones)) - for i := 0; i < len(milestones); i++ { - assert.Equal(t, expectedMilestones[i].StartBlock.Uint64(), milestones[i].StartBlock.Uint64()) - } -} - -func TestFetchMilestonesMiddleStart(t *testing.T) { - test := newHeimdallTest(t) - expectedMilestones := test.setupMilestones(10) - const offset = 6 - - milestones, err := test.heimdall.FetchMilestones(test.ctx, expectedMilestones[offset].StartBlock.Uint64()) - require.Nil(t, err) - - require.Equal(t, len(expectedMilestones)-offset, len(milestones)) - for i := 0; i < len(milestones); i++ { - assert.Equal(t, expectedMilestones[offset+i].StartBlock.Uint64(), milestones[i].StartBlock.Uint64()) - } -} - -func TestFetchMilestonesStartingBeforeEvictionPoint(t *testing.T) { - test := newHeimdallTest(t) - - var expectedMilestones []*heimdallclient.Milestone - for i := 0; i < 20; i++ { - m := makeMilestone(uint64(i*16), 16) - expectedMilestones = append(expectedMilestones, m) - } - const keptMilestones = 5 - - client := test.client - client.EXPECT().FetchMilestoneCount(gomock.Any()).Return(int64(len(expectedMilestones)), nil) - client.EXPECT().FetchMilestone(gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, number int64) (*heimdallclient.Milestone, error) { - if int(number) <= len(expectedMilestones)-keptMilestones { - return nil, heimdallclient.ErrNotInMilestoneList - } - return expectedMilestones[number-1], nil - }).AnyTimes() - - milestones, err := test.heimdall.FetchMilestones(test.ctx, 0) - require.NotNil(t, err) - require.ErrorIs(t, err, ErrIncompleteMilestoneRange) - - require.Equal(t, keptMilestones, len(milestones)) - for i := 0; i < len(milestones); i++ { - assert.Equal(t, expectedMilestones[len(expectedMilestones)-len(milestones)+i].StartBlock.Uint64(), milestones[i].StartBlock.Uint64()) - } -} - -func TestOnMilestoneEvent(t *testing.T) { - test := newHeimdallTest(t) - - var cancel context.CancelFunc - test.ctx, cancel = context.WithCancel(test.ctx) - defer cancel() - - client := test.client - count := new(int64) - client.EXPECT().FetchMilestoneCount(gomock.Any()).DoAndReturn(func(ctx context.Context) (int64, error) { - c := *count - if c == 2 { - cancel() - return 0, ctx.Err() - } - *count += 1 - return c, nil - }).AnyTimes() - - expectedMilestone := makeMilestone(0, 12) - client.EXPECT().FetchMilestone(gomock.Any(), gomock.Any()).Return(expectedMilestone, nil) - - eventChan := make(chan *heimdallclient.Milestone) - err := test.heimdall.OnMilestoneEvent(test.ctx, func(m *heimdallclient.Milestone) { - eventChan <- m - }) - require.Nil(t, err) - - m := <-eventChan - assert.Equal(t, expectedMilestone.Timestamp, m.Timestamp) -} diff --git a/polygon/sync/log_prefix.go b/polygon/sync/log_prefix.go new file mode 100644 index 00000000000..1b67fd723b4 --- /dev/null +++ b/polygon/sync/log_prefix.go @@ -0,0 +1,7 @@ +package sync + +import "fmt" + +func syncLogPrefix(message string) string { + return fmt.Sprintf("[sync] %s", message) +} diff --git a/polygon/sync/peer_with_block_num_info.go b/polygon/sync/peer_with_block_num_info.go deleted file mode 100644 index 1cde2bbf7e4..00000000000 --- a/polygon/sync/peer_with_block_num_info.go +++ /dev/null @@ -1,22 +0,0 @@ -package sync - -import "math/big" - -type PeerWithBlockNumInfo struct { - ID string - BlockNum *big.Int -} - -type PeersWithBlockNumInfo []*PeerWithBlockNumInfo - -func (peers PeersWithBlockNumInfo) Len() int { - return len(peers) -} - -func (peers PeersWithBlockNumInfo) Less(i int, j int) bool { - return peers[i].BlockNum.Cmp(peers[j].BlockNum) < 1 -} - -func (peers PeersWithBlockNumInfo) Swap(i int, j int) { - peers[i], peers[j] = peers[j], peers[i] -} diff --git a/polygon/sync/sentry.go b/polygon/sync/sentry.go deleted file mode 100644 index ffea66b08d7..00000000000 --- a/polygon/sync/sentry.go +++ /dev/null @@ -1,16 +0,0 @@ -package sync - -import ( - "context" - "math/big" - - "github.com/ledgerwatch/erigon/core/types" -) - -//go:generate mockgen -destination=./sentry_mock.go -package=sync . Sentry -type Sentry interface { - MaxPeers() int - PeersWithBlockNumInfo() PeersWithBlockNumInfo - DownloadHeaders(ctx context.Context, start *big.Int, end *big.Int, peerID string) ([]*types.Header, error) - Penalize(peerID string) -} diff --git a/polygon/sync/sentry_mock.go b/polygon/sync/sentry_mock.go deleted file mode 100644 index 7070b629766..00000000000 --- a/polygon/sync/sentry_mock.go +++ /dev/null @@ -1,92 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/ledgerwatch/erigon/polygon/sync (interfaces: Sentry) - -// Package sync is a generated GoMock package. -package sync - -import ( - context "context" - big "math/big" - reflect "reflect" - - gomock "github.com/golang/mock/gomock" - types "github.com/ledgerwatch/erigon/core/types" -) - -// MockSentry is a mock of Sentry interface. -type MockSentry struct { - ctrl *gomock.Controller - recorder *MockSentryMockRecorder -} - -// MockSentryMockRecorder is the mock recorder for MockSentry. -type MockSentryMockRecorder struct { - mock *MockSentry -} - -// NewMockSentry creates a new mock instance. -func NewMockSentry(ctrl *gomock.Controller) *MockSentry { - mock := &MockSentry{ctrl: ctrl} - mock.recorder = &MockSentryMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockSentry) EXPECT() *MockSentryMockRecorder { - return m.recorder -} - -// DownloadHeaders mocks base method. -func (m *MockSentry) DownloadHeaders(arg0 context.Context, arg1, arg2 *big.Int, arg3 string) ([]*types.Header, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DownloadHeaders", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].([]*types.Header) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DownloadHeaders indicates an expected call of DownloadHeaders. -func (mr *MockSentryMockRecorder) DownloadHeaders(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadHeaders", reflect.TypeOf((*MockSentry)(nil).DownloadHeaders), arg0, arg1, arg2, arg3) -} - -// MaxPeers mocks base method. -func (m *MockSentry) MaxPeers() int { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "MaxPeers") - ret0, _ := ret[0].(int) - return ret0 -} - -// MaxPeers indicates an expected call of MaxPeers. -func (mr *MockSentryMockRecorder) MaxPeers() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MaxPeers", reflect.TypeOf((*MockSentry)(nil).MaxPeers)) -} - -// PeersWithBlockNumInfo mocks base method. -func (m *MockSentry) PeersWithBlockNumInfo() PeersWithBlockNumInfo { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PeersWithBlockNumInfo") - ret0, _ := ret[0].(PeersWithBlockNumInfo) - return ret0 -} - -// PeersWithBlockNumInfo indicates an expected call of PeersWithBlockNumInfo. -func (mr *MockSentryMockRecorder) PeersWithBlockNumInfo() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeersWithBlockNumInfo", reflect.TypeOf((*MockSentry)(nil).PeersWithBlockNumInfo)) -} - -// Penalize mocks base method. -func (m *MockSentry) Penalize(arg0 string) { - m.ctrl.T.Helper() - m.ctrl.Call(m, "Penalize", arg0) -} - -// Penalize indicates an expected call of Penalize. -func (mr *MockSentryMockRecorder) Penalize(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Penalize", reflect.TypeOf((*MockSentry)(nil).Penalize), arg0) -} diff --git a/polygon/sync/service.go b/polygon/sync/service.go new file mode 100644 index 00000000000..2147bda6cf4 --- /dev/null +++ b/polygon/sync/service.go @@ -0,0 +1,142 @@ +package sync + +import ( + "context" + + lru "github.com/hashicorp/golang-lru/arc/v2" + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/chain" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/direct" + executionclient "github.com/ledgerwatch/erigon/cl/phase1/execution_client" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/stagedsync" + "github.com/ledgerwatch/erigon/p2p/sentry" + "github.com/ledgerwatch/erigon/polygon/bor/borcfg" + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/polygon/p2p" +) + +type Service interface { + Run(ctx context.Context) error +} + +type service struct { + sync *Sync + + p2pService p2p.Service + storage Storage + events *TipEvents +} + +func NewService( + logger log.Logger, + chainConfig *chain.Config, + sentryClient direct.SentryClient, + maxPeers int, + statusDataProvider *sentry.StatusDataProvider, + heimdallUrl string, + executionEngine executionclient.ExecutionEngine, +) Service { + borConfig := chainConfig.Bor.(*borcfg.BorConfig) + execution := NewExecutionClient(executionEngine) + storage := NewStorage(logger, execution, maxPeers) + headersVerifier := VerifyAccumulatedHeaders + blocksVerifier := VerifyBlocks + p2pService := p2p.NewService(maxPeers, logger, sentryClient, statusDataProvider.GetStatusData) + heimdallClient := heimdall.NewHeimdallClient(heimdallUrl, logger) + heimdallService := heimdall.NewHeimdallNoStore(heimdallClient, logger) + blockDownloader := NewBlockDownloader( + logger, + p2pService, + heimdallService, + headersVerifier, + blocksVerifier, + storage, + ) + spansCache := NewSpansCache() + signaturesCache, err := lru.NewARC[common.Hash, common.Address](stagedsync.InMemorySignatures) + if err != nil { + panic(err) + } + difficultyCalculator := NewDifficultyCalculator(borConfig, spansCache, nil, signaturesCache) + headerTimeValidator := NewHeaderTimeValidator(borConfig, spansCache, nil, signaturesCache) + headerValidator := NewHeaderValidator(chainConfig, borConfig, headerTimeValidator) + ccBuilderFactory := func(root *types.Header, span *heimdall.Span) CanonicalChainBuilder { + if span == nil { + panic("sync.Service: ccBuilderFactory - span is nil") + } + if spansCache.IsEmpty() { + panic("sync.Service: ccBuilderFactory - spansCache is empty") + } + return NewCanonicalChainBuilder( + root, + difficultyCalculator, + headerValidator, + spansCache) + } + events := NewTipEvents(logger, p2pService, heimdallService) + sync := NewSync( + storage, + execution, + headersVerifier, + blocksVerifier, + p2pService, + blockDownloader, + ccBuilderFactory, + spansCache, + heimdallService.FetchLatestSpan, + events.Events(), + logger, + ) + return &service{ + sync: sync, + p2pService: p2pService, + storage: storage, + events: events, + } +} + +func (s *service) Run(ctx context.Context) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + var serviceErr error + + go func() { + s.p2pService.Run(ctx) + }() + + go func() { + err := s.storage.Run(ctx) + if (err != nil) && (ctx.Err() == nil) { + serviceErr = err + cancel() + } + }() + + go func() { + err := s.events.Run(ctx) + if (err != nil) && (ctx.Err() == nil) { + serviceErr = err + cancel() + } + }() + + go func() { + err := s.sync.Run(ctx) + if (err != nil) && (ctx.Err() == nil) { + serviceErr = err + cancel() + } + }() + + <-ctx.Done() + + if serviceErr != nil { + return serviceErr + } + + return ctx.Err() +} diff --git a/polygon/sync/spans_cache.go b/polygon/sync/spans_cache.go index 6d359849536..66e3bd22400 100644 --- a/polygon/sync/spans_cache.go +++ b/polygon/sync/spans_cache.go @@ -1,25 +1,23 @@ package sync -import ( - heimdallspan "github.com/ledgerwatch/erigon/polygon/heimdall" -) +import "github.com/ledgerwatch/erigon/polygon/heimdall" type SpansCache struct { - spans map[uint64]*heimdallspan.HeimdallSpan + spans map[uint64]*heimdall.Span } func NewSpansCache() *SpansCache { return &SpansCache{ - spans: make(map[uint64]*heimdallspan.HeimdallSpan), + spans: make(map[uint64]*heimdall.Span), } } -func (cache *SpansCache) Add(span *heimdallspan.HeimdallSpan) { +func (cache *SpansCache) Add(span *heimdall.Span) { cache.spans[span.StartBlock] = span } // SpanAt finds a span that contains blockNum. -func (cache *SpansCache) SpanAt(blockNum uint64) *heimdallspan.HeimdallSpan { +func (cache *SpansCache) SpanAt(blockNum uint64) *heimdall.Span { for _, span := range cache.spans { if (span.StartBlock <= blockNum) && (blockNum <= span.EndBlock) { return span @@ -36,3 +34,7 @@ func (cache *SpansCache) Prune(blockNum uint64) { } } } + +func (cache *SpansCache) IsEmpty() bool { + return len(cache.spans) == 0 +} diff --git a/polygon/sync/state_point.go b/polygon/sync/state_point.go deleted file mode 100644 index c8f9c39971e..00000000000 --- a/polygon/sync/state_point.go +++ /dev/null @@ -1,46 +0,0 @@ -package sync - -import ( - "math/big" - - "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon/polygon/heimdall" -) - -func statePointFromCheckpoint(checkpoint *heimdall.Checkpoint) *statePoint { - return &statePoint{ - proposer: checkpoint.Proposer, - startBlock: new(big.Int).Set(checkpoint.StartBlock), - endBlock: new(big.Int).Set(checkpoint.EndBlock), - rootHash: checkpoint.RootHash, - chainId: checkpoint.BorChainID, - timestamp: checkpoint.Timestamp, - kind: checkpointKind, - } -} - -func statePointFromMilestone(milestone *heimdall.Milestone) *statePoint { - return &statePoint{ - proposer: milestone.Proposer, - startBlock: new(big.Int).Set(milestone.StartBlock), - endBlock: new(big.Int).Set(milestone.EndBlock), - rootHash: milestone.Hash, - chainId: milestone.BorChainID, - timestamp: milestone.Timestamp, - kind: milestoneKind, - } -} - -type statePoint struct { - proposer common.Address - startBlock *big.Int - endBlock *big.Int - rootHash common.Hash - chainId string - timestamp uint64 - kind statePointKind -} - -func (sp *statePoint) length() int { - return int(new(big.Int).Sub(sp.endBlock, sp.startBlock).Int64() + 1) -} diff --git a/polygon/sync/state_point_headers_verifier.go b/polygon/sync/state_point_headers_verifier.go deleted file mode 100644 index 5ee550c92a5..00000000000 --- a/polygon/sync/state_point_headers_verifier.go +++ /dev/null @@ -1,22 +0,0 @@ -package sync - -import ( - "bytes" - "fmt" - - "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/polygon/bor" -) - -type StatePointHeadersVerifier func(statePoint *statePoint, headers []*types.Header) error - -func VerifyStatePointHeaders(statePoint *statePoint, headers []*types.Header) error { - rootHash, err := bor.ComputeHeadersRootHash(headers) - if err != nil { - return fmt.Errorf("VerifyStatePointHeaders: failed to compute headers root hash %w", err) - } - if !bytes.Equal(rootHash, statePoint.rootHash[:]) { - return fmt.Errorf("VerifyStatePointHeaders: bad headers root hash") - } - return nil -} diff --git a/polygon/sync/state_point_kind.go b/polygon/sync/state_point_kind.go deleted file mode 100644 index c61cb5e84bc..00000000000 --- a/polygon/sync/state_point_kind.go +++ /dev/null @@ -1,8 +0,0 @@ -package sync - -type statePointKind string - -const ( - checkpointKind = statePointKind("checkpoint") - milestoneKind = statePointKind("milestone") -) diff --git a/polygon/sync/state_points.go b/polygon/sync/state_points.go deleted file mode 100644 index 650dc80f99e..00000000000 --- a/polygon/sync/state_points.go +++ /dev/null @@ -1,25 +0,0 @@ -package sync - -import ( - "github.com/ledgerwatch/erigon/polygon/heimdall" -) - -func statePointsFromCheckpoints(checkpoints []*heimdall.Checkpoint) statePoints { - statePoints := make(statePoints, len(checkpoints)) - for i, checkpoint := range checkpoints { - statePoints[i] = statePointFromCheckpoint(checkpoint) - } - - return statePoints -} - -func statePointsFromMilestones(milestones []*heimdall.Milestone) statePoints { - statePoints := make(statePoints, len(milestones)) - for i, milestone := range milestones { - statePoints[i] = statePointFromMilestone(milestone) - } - - return statePoints -} - -type statePoints []*statePoint diff --git a/polygon/sync/storage.go b/polygon/sync/storage.go new file mode 100644 index 00000000000..5e47aa0d204 --- /dev/null +++ b/polygon/sync/storage.go @@ -0,0 +1,88 @@ +package sync + +import ( + "context" + "sync" + "time" + + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon/core/types" +) + +//go:generate mockgen -typed=true -destination=./storage_mock.go -package=sync . Storage +type Storage interface { + // InsertBlocks queues blocks for writing into the local canonical chain. + InsertBlocks(ctx context.Context, blocks []*types.Block) error + // Flush makes sure that all queued blocks have been written. + Flush(ctx context.Context) error + // Run performs the block writing. + Run(ctx context.Context) error +} + +type executionClientStorage struct { + logger log.Logger + execution ExecutionClient + queue chan []*types.Block + waitGroup sync.WaitGroup +} + +func NewStorage(logger log.Logger, execution ExecutionClient, queueCapacity int) Storage { + return &executionClientStorage{ + logger: logger, + execution: execution, + queue: make(chan []*types.Block, queueCapacity), + } +} + +func (s *executionClientStorage) InsertBlocks(ctx context.Context, blocks []*types.Block) error { + s.waitGroup.Add(1) + select { + case s.queue <- blocks: + return nil + case <-ctx.Done(): + return ctx.Err() + } +} + +func (s *executionClientStorage) Flush(ctx context.Context) error { + waitCtx, waitCancel := context.WithCancel(ctx) + defer waitCancel() + + go func() { + s.waitGroup.Wait() + waitCancel() + }() + + <-waitCtx.Done() + return ctx.Err() +} + +func (s *executionClientStorage) Run(ctx context.Context) error { + s.logger.Debug(syncLogPrefix("running execution client storage component")) + + for { + select { + case blocks := <-s.queue: + if err := s.insertBlocks(ctx, blocks); err != nil { + return err + } + case <-ctx.Done(): + return ctx.Err() + } + } +} + +func (s *executionClientStorage) insertBlocks(ctx context.Context, blocks []*types.Block) error { + defer s.waitGroup.Done() + + insertStartTime := time.Now() + err := s.execution.InsertBlocks(ctx, blocks) + if err != nil { + return err + } + + s.logger.Debug(syncLogPrefix("inserted blocks"), "len", len(blocks), "duration", time.Since(insertStartTime)) + + return nil +} diff --git a/polygon/sync/storage_mock.go b/polygon/sync/storage_mock.go new file mode 100644 index 00000000000..32c3611bc03 --- /dev/null +++ b/polygon/sync/storage_mock.go @@ -0,0 +1,155 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/ledgerwatch/erigon/polygon/sync (interfaces: Storage) +// +// Generated by this command: +// +// mockgen -typed=true -destination=./storage_mock.go -package=sync . Storage +// + +// Package sync is a generated GoMock package. +package sync + +import ( + context "context" + reflect "reflect" + + types "github.com/ledgerwatch/erigon/core/types" + gomock "go.uber.org/mock/gomock" +) + +// MockStorage is a mock of Storage interface. +type MockStorage struct { + ctrl *gomock.Controller + recorder *MockStorageMockRecorder +} + +// MockStorageMockRecorder is the mock recorder for MockStorage. +type MockStorageMockRecorder struct { + mock *MockStorage +} + +// NewMockStorage creates a new mock instance. +func NewMockStorage(ctrl *gomock.Controller) *MockStorage { + mock := &MockStorage{ctrl: ctrl} + mock.recorder = &MockStorageMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockStorage) EXPECT() *MockStorageMockRecorder { + return m.recorder +} + +// Flush mocks base method. +func (m *MockStorage) Flush(arg0 context.Context) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Flush", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Flush indicates an expected call of Flush. +func (mr *MockStorageMockRecorder) Flush(arg0 any) *MockStorageFlushCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Flush", reflect.TypeOf((*MockStorage)(nil).Flush), arg0) + return &MockStorageFlushCall{Call: call} +} + +// MockStorageFlushCall wrap *gomock.Call +type MockStorageFlushCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStorageFlushCall) Return(arg0 error) *MockStorageFlushCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStorageFlushCall) Do(f func(context.Context) error) *MockStorageFlushCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStorageFlushCall) DoAndReturn(f func(context.Context) error) *MockStorageFlushCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// InsertBlocks mocks base method. +func (m *MockStorage) InsertBlocks(arg0 context.Context, arg1 []*types.Block) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "InsertBlocks", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// InsertBlocks indicates an expected call of InsertBlocks. +func (mr *MockStorageMockRecorder) InsertBlocks(arg0, arg1 any) *MockStorageInsertBlocksCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InsertBlocks", reflect.TypeOf((*MockStorage)(nil).InsertBlocks), arg0, arg1) + return &MockStorageInsertBlocksCall{Call: call} +} + +// MockStorageInsertBlocksCall wrap *gomock.Call +type MockStorageInsertBlocksCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStorageInsertBlocksCall) Return(arg0 error) *MockStorageInsertBlocksCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStorageInsertBlocksCall) Do(f func(context.Context, []*types.Block) error) *MockStorageInsertBlocksCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStorageInsertBlocksCall) DoAndReturn(f func(context.Context, []*types.Block) error) *MockStorageInsertBlocksCall { + c.Call = c.Call.DoAndReturn(f) + return c +} + +// Run mocks base method. +func (m *MockStorage) Run(arg0 context.Context) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Run", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Run indicates an expected call of Run. +func (mr *MockStorageMockRecorder) Run(arg0 any) *MockStorageRunCall { + mr.mock.ctrl.T.Helper() + call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockStorage)(nil).Run), arg0) + return &MockStorageRunCall{Call: call} +} + +// MockStorageRunCall wrap *gomock.Call +type MockStorageRunCall struct { + *gomock.Call +} + +// Return rewrite *gomock.Call.Return +func (c *MockStorageRunCall) Return(arg0 error) *MockStorageRunCall { + c.Call = c.Call.Return(arg0) + return c +} + +// Do rewrite *gomock.Call.Do +func (c *MockStorageRunCall) Do(f func(context.Context) error) *MockStorageRunCall { + c.Call = c.Call.Do(f) + return c +} + +// DoAndReturn rewrite *gomock.Call.DoAndReturn +func (c *MockStorageRunCall) DoAndReturn(f func(context.Context) error) *MockStorageRunCall { + c.Call = c.Call.DoAndReturn(f) + return c +} diff --git a/polygon/sync/sync.go b/polygon/sync/sync.go new file mode 100644 index 00000000000..fba32762e13 --- /dev/null +++ b/polygon/sync/sync.go @@ -0,0 +1,290 @@ +package sync + +import ( + "context" + "errors" + + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/polygon/p2p" +) + +type Sync struct { + storage Storage + execution ExecutionClient + headersVerifier AccumulatedHeadersVerifier + blocksVerifier BlocksVerifier + p2pService p2p.Service + blockDownloader BlockDownloader + ccBuilderFactory func(root *types.Header, span *heimdall.Span) CanonicalChainBuilder + spansCache *SpansCache + fetchLatestSpan func(ctx context.Context) (*heimdall.Span, error) + events <-chan Event + logger log.Logger +} + +func NewSync( + storage Storage, + execution ExecutionClient, + headersVerifier AccumulatedHeadersVerifier, + blocksVerifier BlocksVerifier, + p2pService p2p.Service, + blockDownloader BlockDownloader, + ccBuilderFactory func(root *types.Header, span *heimdall.Span) CanonicalChainBuilder, + spansCache *SpansCache, + fetchLatestSpan func(ctx context.Context) (*heimdall.Span, error), + events <-chan Event, + logger log.Logger, +) *Sync { + return &Sync{ + storage: storage, + execution: execution, + headersVerifier: headersVerifier, + blocksVerifier: blocksVerifier, + p2pService: p2pService, + blockDownloader: blockDownloader, + ccBuilderFactory: ccBuilderFactory, + spansCache: spansCache, + fetchLatestSpan: fetchLatestSpan, + events: events, + logger: logger, + } +} + +func (s *Sync) commitExecution(ctx context.Context, newTip *types.Header, finalizedHeader *types.Header) error { + if err := s.storage.Flush(ctx); err != nil { + return err + } + return s.execution.UpdateForkChoice(ctx, newTip, finalizedHeader) +} + +func (s *Sync) onMilestoneEvent( + ctx context.Context, + event EventNewMilestone, + ccBuilder CanonicalChainBuilder, +) error { + milestone := event + if milestone.EndBlock().Uint64() <= ccBuilder.Root().Number.Uint64() { + return nil + } + + milestoneHeaders := ccBuilder.HeadersInRange(milestone.StartBlock().Uint64(), milestone.Length()) + err := s.headersVerifier(milestone, milestoneHeaders) + if err == nil { + if err = ccBuilder.Prune(milestone.EndBlock().Uint64()); err != nil { + return err + } + } + + s.logger.Debug( + syncLogPrefix("onMilestoneEvent: local chain tip does not match the milestone, unwinding to the previous verified milestone"), + "err", err, + ) + + // the milestone doesn't correspond to the tip of the chain + // unwind to the previous verified milestone + oldTip := ccBuilder.Root() + oldTipNum := oldTip.Number.Uint64() + if err = s.execution.UpdateForkChoice(ctx, oldTip, oldTip); err != nil { + return err + } + + newTip, err := s.blockDownloader.DownloadBlocksUsingMilestones(ctx, oldTipNum) + if err != nil { + return err + } + if newTip == nil { + return errors.New("sync.Sync.onMilestoneEvent: unexpected to have no milestone headers since the last milestone after receiving a new milestone event") + } + + if err = s.commitExecution(ctx, newTip, newTip); err != nil { + return err + } + + ccBuilder.Reset(newTip) + + return nil +} + +func (s *Sync) onNewBlockEvent( + ctx context.Context, + event EventNewBlock, + ccBuilder CanonicalChainBuilder, +) error { + newBlockHeader := event.NewBlock.Header() + newBlockHeaderNum := newBlockHeader.Number.Uint64() + rootNum := ccBuilder.Root().Number.Uint64() + if newBlockHeaderNum <= rootNum { + return nil + } + + var newBlocks []*types.Block + var err error + if ccBuilder.ContainsHash(newBlockHeader.ParentHash) { + newBlocks = []*types.Block{event.NewBlock} + } else { + blocks, err := s.p2pService.FetchBlocks(ctx, rootNum, newBlockHeaderNum+1, event.PeerId) + if err != nil { + if (p2p.ErrIncompleteHeaders{}).Is(err) || (p2p.ErrMissingBodies{}).Is(err) { + s.logger.Debug( + syncLogPrefix("onNewBlockEvent: failed to fetch complete blocks, ignoring event"), + "err", err, + "peerId", event.PeerId, + "lastBlockNum", newBlockHeaderNum, + ) + + return nil + } + + return err + } + + newBlocks = blocks.Data + } + + if err := s.blocksVerifier(newBlocks); err != nil { + s.logger.Debug(syncLogPrefix("onNewBlockEvent: invalid new block event from peer, penalizing and ignoring"), "err", err) + + if err = s.p2pService.Penalize(ctx, event.PeerId); err != nil { + s.logger.Debug(syncLogPrefix("onNewBlockEvent: issue with penalizing peer"), "err", err) + } + + return nil + } + + newHeaders := make([]*types.Header, len(newBlocks)) + for i, block := range newBlocks { + newHeaders[i] = block.HeaderNoCopy() + } + + oldTip := ccBuilder.Tip() + if err = ccBuilder.Connect(newHeaders); err != nil { + s.logger.Debug(syncLogPrefix("onNewBlockEvent: couldn't connect a header to the local chain tip, ignoring"), "err", err) + return nil + } + + newTip := ccBuilder.Tip() + if newTip != oldTip { + if err = s.execution.InsertBlocks(ctx, newBlocks); err != nil { + return err + } + + if err = s.execution.UpdateForkChoice(ctx, newTip, ccBuilder.Root()); err != nil { + return err + } + } + + return nil +} + +func (s *Sync) onNewBlockHashesEvent( + ctx context.Context, + event EventNewBlockHashes, + ccBuilder CanonicalChainBuilder, +) error { + for _, headerHashNum := range event.NewBlockHashes { + if (headerHashNum.Number <= ccBuilder.Root().Number.Uint64()) || ccBuilder.ContainsHash(headerHashNum.Hash) { + continue + } + + newBlocks, err := s.p2pService.FetchBlocks(ctx, headerHashNum.Number, headerHashNum.Number+1, event.PeerId) + if err != nil { + if (p2p.ErrIncompleteHeaders{}).Is(err) || (p2p.ErrMissingBodies{}).Is(err) { + s.logger.Debug( + syncLogPrefix("onNewBlockHashesEvent: failed to fetch complete blocks, ignoring event"), + "err", err, + "peerId", event.PeerId, + "lastBlockNum", headerHashNum.Number, + ) + + continue + } + + return err + } + + newBlockEvent := EventNewBlock{ + NewBlock: newBlocks.Data[0], + PeerId: event.PeerId, + } + + err = s.onNewBlockEvent(ctx, newBlockEvent, ccBuilder) + if err != nil { + return err + } + } + return nil +} + +// +// TODO (subsequent PRs) - unit test initial sync + on new event cases +// + +func (s *Sync) Run(ctx context.Context) error { + s.logger.Debug(syncLogPrefix("running sync component")) + + tip, err := s.execution.CurrentHeader(ctx) + if err != nil { + return err + } + + // loop until we converge at the latest checkpoint & milestone + var prevTip *types.Header + for tip != prevTip { + prevTip = tip + + newTip, err := s.blockDownloader.DownloadBlocksUsingCheckpoints(ctx, tip.Number.Uint64()+1) + if err != nil { + return err + } + if newTip != nil { + tip = newTip + } + + newTip, err = s.blockDownloader.DownloadBlocksUsingMilestones(ctx, tip.Number.Uint64()+1) + if err != nil { + return err + } + if newTip != nil { + tip = newTip + } + + if err = s.commitExecution(ctx, tip, tip); err != nil { + return err + } + } + + latestSpan, err := s.fetchLatestSpan(ctx) + if err != nil { + return err + } + s.spansCache.Add(latestSpan) + + ccBuilder := s.ccBuilderFactory(tip, latestSpan) + + for { + select { + case event := <-s.events: + switch event.Type { + case EventTypeNewMilestone: + if err = s.onMilestoneEvent(ctx, event.AsNewMilestone(), ccBuilder); err != nil { + return err + } + case EventTypeNewBlock: + if err = s.onNewBlockEvent(ctx, event.AsNewBlock(), ccBuilder); err != nil { + return err + } + case EventTypeNewBlockHashes: + if err = s.onNewBlockHashesEvent(ctx, event.AsNewBlockHashes(), ccBuilder); err != nil { + return err + } + case EventTypeNewSpan: + s.spansCache.Add(event.AsNewSpan()) + } + case <-ctx.Done(): + return ctx.Err() + } + } +} diff --git a/polygon/sync/tip_events.go b/polygon/sync/tip_events.go new file mode 100644 index 00000000000..8e9f01568ee --- /dev/null +++ b/polygon/sync/tip_events.go @@ -0,0 +1,142 @@ +package sync + +import ( + "context" + + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/protocols/eth" + "github.com/ledgerwatch/erigon/polygon/heimdall" + "github.com/ledgerwatch/erigon/polygon/p2p" +) + +const EventTypeNewBlock = "new-block" +const EventTypeNewBlockHashes = "new-block-hashes" +const EventTypeNewMilestone = "new-milestone" +const EventTypeNewSpan = "new-span" + +type EventNewBlock struct { + NewBlock *types.Block + PeerId *p2p.PeerId +} + +type EventNewBlockHashes struct { + NewBlockHashes eth.NewBlockHashesPacket + PeerId *p2p.PeerId +} + +type EventNewMilestone = *heimdall.Milestone + +type EventNewSpan = *heimdall.Span + +type Event struct { + Type string + + newBlock EventNewBlock + newBlockHashes EventNewBlockHashes + newMilestone EventNewMilestone + newSpan EventNewSpan +} + +func (e Event) AsNewBlock() EventNewBlock { + if e.Type != EventTypeNewBlock { + panic("Event type mismatch") + } + return e.newBlock +} + +func (e Event) AsNewBlockHashes() EventNewBlockHashes { + if e.Type != EventTypeNewBlockHashes { + panic("Event type mismatch") + } + return e.newBlockHashes +} + +func (e Event) AsNewMilestone() EventNewMilestone { + if e.Type != EventTypeNewMilestone { + panic("Event type mismatch") + } + return e.newMilestone +} + +func (e Event) AsNewSpan() EventNewSpan { + if e.Type != EventTypeNewSpan { + panic("Event type mismatch") + } + return e.newSpan +} + +type TipEvents struct { + logger log.Logger + events *EventChannel[Event] + p2pService p2p.Service + heimdallService heimdall.HeimdallNoStore +} + +func NewTipEvents( + logger log.Logger, + p2pService p2p.Service, + heimdallService heimdall.HeimdallNoStore, +) *TipEvents { + eventsCapacity := uint(1000) // more than 3 milestones + + return &TipEvents{ + logger: logger, + events: NewEventChannel[Event](eventsCapacity), + p2pService: p2pService, + heimdallService: heimdallService, + } +} + +func (te *TipEvents) Events() <-chan Event { + return te.events.Events() +} + +func (te *TipEvents) Run(ctx context.Context) error { + te.logger.Debug(syncLogPrefix("running tip events component")) + + newBlockObserverCancel := te.p2pService.RegisterNewBlockObserver(func(message *p2p.DecodedInboundMessage[*eth.NewBlockPacket]) { + te.events.PushEvent(Event{ + Type: EventTypeNewBlock, + newBlock: EventNewBlock{ + NewBlock: message.Decoded.Block, + PeerId: message.PeerId, + }, + }) + }) + defer newBlockObserverCancel() + + newBlockHashesObserverCancel := te.p2pService.RegisterNewBlockHashesObserver(func(message *p2p.DecodedInboundMessage[*eth.NewBlockHashesPacket]) { + te.events.PushEvent(Event{ + Type: EventTypeNewBlockHashes, + newBlockHashes: EventNewBlockHashes{ + NewBlockHashes: *message.Decoded, + PeerId: message.PeerId, + }, + }) + }) + defer newBlockHashesObserverCancel() + + err := te.heimdallService.OnMilestoneEvent(ctx, func(milestone *heimdall.Milestone) { + te.events.PushEvent(Event{ + Type: EventTypeNewMilestone, + newMilestone: milestone, + }) + }) + if err != nil { + return err + } + + err = te.heimdallService.OnSpanEvent(ctx, func(span *heimdall.Span) { + te.events.PushEvent(Event{ + Type: EventTypeNewSpan, + newSpan: span, + }) + }) + if err != nil { + return err + } + + return te.events.Run(ctx) +} diff --git a/polygon/tracer/bor_state_sync_txn_tracer.go b/polygon/tracer/bor_state_sync_txn_tracer.go new file mode 100644 index 00000000000..1beea7c312e --- /dev/null +++ b/polygon/tracer/bor_state_sync_txn_tracer.go @@ -0,0 +1,134 @@ +package tracer + +import ( + "encoding/json" + + "github.com/holiman/uint256" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/core/state" + "github.com/ledgerwatch/erigon/core/vm" + "github.com/ledgerwatch/erigon/eth/tracers" +) + +func NewBorStateSyncTxnTracer( + tracer vm.EVMLogger, + stateSyncEventsCount int, + stateReceiverContractAddress libcommon.Address, +) tracers.Tracer { + return &borStateSyncTxnTracer{ + EVMLogger: tracer, + stateSyncEventsCount: stateSyncEventsCount, + stateReceiverContractAddress: stateReceiverContractAddress, + } +} + +// borStateSyncTxnTracer is a special tracer which is used only for tracing bor state sync transactions. Bor state sync +// transactions are synthetic transactions that are used to bridge assets from L1 (root chain) to L2 (child chain). +// At end of each sprint bor executes the state sync events (0, 1 or many) coming from Heimdall by calling the +// StateReceiverContract with event.Data as input call data. +// +// The borStateSyncTxnTracer wraps any other tracer that the users have requested to use for tracing and tricks them +// to think that they are running in the same transaction as sub-calls. This is needed since when bor executes the +// state sync events at end of each sprint these are synthetically executed as if they were sub-calls of the +// state sync events bor transaction. +type borStateSyncTxnTracer struct { + vm.EVMLogger + captureStartCalledOnce bool + stateSyncEventsCount int + stateReceiverContractAddress libcommon.Address +} + +func (bsstt *borStateSyncTxnTracer) CaptureTxStart(_ uint64) { + bsstt.EVMLogger.CaptureTxStart(0) +} + +func (bsstt *borStateSyncTxnTracer) CaptureTxEnd(_ uint64) { + bsstt.EVMLogger.CaptureTxEnd(0) +} + +func (bsstt *borStateSyncTxnTracer) CaptureStart( + env *vm.EVM, + from libcommon.Address, + to libcommon.Address, + precompile bool, + create bool, + input []byte, + gas uint64, + value *uint256.Int, + code []byte, +) { + if !bsstt.captureStartCalledOnce { + // first event execution started + // perform a CaptureStart for the synthetic state sync transaction + from := state.SystemAddress + to := bsstt.stateReceiverContractAddress + bsstt.EVMLogger.CaptureStart(env, from, to, false, false, nil, 0, uint256.NewInt(0), nil) + bsstt.captureStartCalledOnce = true + } + + // trick the tracer to think it is a CaptureEnter + bsstt.EVMLogger.CaptureEnter(vm.CALL, from, to, precompile, create, input, gas, value, code) +} + +func (bsstt *borStateSyncTxnTracer) CaptureEnd(output []byte, usedGas uint64, err error) { + if bsstt.stateSyncEventsCount == 0 { + // guard against unexpected use + panic("unexpected extra call to borStateSyncTxnTracer.CaptureEnd") + } + + // finished executing 1 event + bsstt.stateSyncEventsCount-- + + // trick tracer to think it is a CaptureExit + bsstt.EVMLogger.CaptureExit(output, usedGas, err) + + if bsstt.stateSyncEventsCount == 0 { + // reached last event + // perform a CaptureEnd for the synthetic state sync transaction + bsstt.EVMLogger.CaptureEnd(nil, 0, nil) + } +} + +func (bsstt *borStateSyncTxnTracer) CaptureState( + pc uint64, + op vm.OpCode, + gas uint64, + cost uint64, + scope *vm.ScopeContext, + rData []byte, + depth int, + err error, +) { + // trick tracer to think it is 1 level deeper + bsstt.EVMLogger.CaptureState(pc, op, gas, cost, scope, rData, depth+1, err) +} + +func (bsstt *borStateSyncTxnTracer) CaptureFault( + pc uint64, + op vm.OpCode, + gas uint64, + cost uint64, + scope *vm.ScopeContext, + depth int, + err error, +) { + // trick tracer to think it is 1 level deeper + bsstt.EVMLogger.CaptureFault(pc, op, gas, cost, scope, depth+1, err) +} + +func (bsstt *borStateSyncTxnTracer) GetResult() (json.RawMessage, error) { + if tracer, ok := bsstt.EVMLogger.(tracers.Tracer); ok { + return tracer.GetResult() + } else { + panic("unexpected usage - borStateSyncTxnTracer.GetResult called on a wrapped tracer which does not support it") + } +} + +func (bsstt *borStateSyncTxnTracer) Stop(err error) { + if tracer, ok := bsstt.EVMLogger.(tracers.Tracer); ok { + tracer.Stop(err) + } else { + panic("unexpected usage - borStateSyncTxnTracer.Stop called on a wrapped tracer which does not support it") + } +} diff --git a/polygon/tracer/trace_bor_state_sync_txn.go b/polygon/tracer/trace_bor_state_sync_txn.go new file mode 100644 index 00000000000..ad08ce6a9f9 --- /dev/null +++ b/polygon/tracer/trace_bor_state_sync_txn.go @@ -0,0 +1,153 @@ +package tracer + +import ( + "context" + "time" + + "github.com/holiman/uint256" + jsoniter "github.com/json-iterator/go" + + "github.com/ledgerwatch/erigon-lib/chain" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon/common/u256" + "github.com/ledgerwatch/erigon/core" + "github.com/ledgerwatch/erigon/core/state" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/core/vm" + "github.com/ledgerwatch/erigon/core/vm/evmtypes" + "github.com/ledgerwatch/erigon/eth/tracers" + "github.com/ledgerwatch/erigon/polygon/bor/borcfg" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" + "github.com/ledgerwatch/erigon/rlp" + "github.com/ledgerwatch/erigon/turbo/services" + "github.com/ledgerwatch/erigon/turbo/transactions" +) + +func TraceBorStateSyncTxnDebugAPI( + ctx context.Context, + dbTx kv.Tx, + chainConfig *chain.Config, + traceConfig *tracers.TraceConfig, + ibs *state.IntraBlockState, + blockReader services.FullBlockReader, + blockHash libcommon.Hash, + blockNum uint64, + blockTime uint64, + blockCtx evmtypes.BlockContext, + stream *jsoniter.Stream, + callTimeout time.Duration, +) error { + stateSyncEvents, err := blockReader.EventsByBlock(ctx, dbTx, blockHash, blockNum) + if err != nil { + stream.WriteNil() + return err + } + + txCtx := initStateSyncTxContext(blockNum, blockHash) + tracer, streaming, cancel, err := transactions.AssembleTracer(ctx, traceConfig, txCtx.TxHash, stream, callTimeout) + if err != nil { + stream.WriteNil() + return err + } + + defer cancel() + stateReceiverContract := libcommon.HexToAddress(chainConfig.Bor.(*borcfg.BorConfig).StateReceiverContract) + tracer = NewBorStateSyncTxnTracer(tracer, len(stateSyncEvents), stateReceiverContract) + rules := chainConfig.Rules(blockNum, blockTime) + stateWriter := state.NewNoopWriter() + execCb := func(evm *vm.EVM, refunds bool) (*core.ExecutionResult, error) { + return traceBorStateSyncTxn(ctx, ibs, stateWriter, stateReceiverContract, stateSyncEvents, evm, rules, txCtx, refunds) + } + + return transactions.ExecuteTraceTx(blockCtx, txCtx, ibs, traceConfig, chainConfig, stream, tracer, streaming, execCb) +} + +func TraceBorStateSyncTxnTraceAPI( + ctx context.Context, + dbTx kv.Tx, + vmConfig *vm.Config, + chainConfig *chain.Config, + blockReader services.FullBlockReader, + ibs *state.IntraBlockState, + stateWriter state.StateWriter, + blockCtx evmtypes.BlockContext, + blockHash libcommon.Hash, + blockNum uint64, + blockTime uint64, +) (*core.ExecutionResult, error) { + stateSyncEvents, err := blockReader.EventsByBlock(ctx, dbTx, blockHash, blockNum) + if err != nil { + return nil, err + } + + stateReceiverContract := libcommon.HexToAddress(chainConfig.Bor.(*borcfg.BorConfig).StateReceiverContract) + if vmConfig.Tracer != nil { + vmConfig.Tracer = NewBorStateSyncTxnTracer(vmConfig.Tracer, len(stateSyncEvents), stateReceiverContract) + } + + txCtx := initStateSyncTxContext(blockNum, blockHash) + rules := chainConfig.Rules(blockNum, blockTime) + evm := vm.NewEVM(blockCtx, txCtx, ibs, chainConfig, *vmConfig) + return traceBorStateSyncTxn(ctx, ibs, stateWriter, stateReceiverContract, stateSyncEvents, evm, rules, txCtx, true) +} + +func traceBorStateSyncTxn( + ctx context.Context, + ibs *state.IntraBlockState, + stateWriter state.StateWriter, + stateReceiverContract libcommon.Address, + stateSyncEvents []rlp.RawValue, + evm *vm.EVM, + rules *chain.Rules, + txCtx evmtypes.TxContext, + refunds bool, +) (*core.ExecutionResult, error) { + for _, eventData := range stateSyncEvents { + select { + case <-ctx.Done(): + return nil, ctx.Err() + default: + } + + msg := types.NewMessage( + state.SystemAddress, // from + &stateReceiverContract, + 0, // nonce + u256.Num0, // amount + core.SysCallGasLimit, + u256.Num0, // gasPrice + nil, // feeCap + nil, // tip + eventData, + nil, // accessList + false, // checkNonce + true, // isFree + nil, // maxFeePerBlobGas + ) + + gp := new(core.GasPool).AddGas(msg.Gas()).AddBlobGas(msg.BlobGas()) + _, err := core.ApplyMessage(evm, msg, gp, refunds, false /* gasBailout */) + if err != nil { + return nil, err + } + + err = ibs.FinalizeTx(rules, stateWriter) + if err != nil { + return nil, err + } + + // reset to reuse + evm.Reset(txCtx, ibs) + } + + return &core.ExecutionResult{}, nil +} + +func initStateSyncTxContext(blockNum uint64, blockHash libcommon.Hash) evmtypes.TxContext { + return evmtypes.TxContext{ + TxHash: bortypes.ComputeBorTxHash(blockNum, blockHash), + Origin: libcommon.Address{}, + GasPrice: uint256.NewInt(0), + } +} diff --git a/rpc/handler.go b/rpc/handler.go index 1cbce957e19..2c7a95d7ec0 100644 --- a/rpc/handler.go +++ b/rpc/handler.go @@ -27,8 +27,9 @@ import ( "time" jsoniter "github.com/json-iterator/go" - "github.com/ledgerwatch/erigon/rpc/rpccfg" "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon/rpc/rpccfg" ) // handler handles JSON-RPC messages. There is one handler per connection. Note that @@ -82,9 +83,8 @@ type callProc struct { notifiers []*Notifier } -func HandleError(err error, stream *jsoniter.Stream) error { +func HandleError(err error, stream *jsoniter.Stream) { if err != nil { - //return msg.errorResponse(err) stream.WriteObjectField("error") stream.WriteObjectStart() stream.WriteObjectField("code") @@ -103,15 +103,15 @@ func HandleError(err error, stream *jsoniter.Stream) error { stream.WriteObjectField("data") data, derr := json.Marshal(de.ErrorData()) if derr == nil { - stream.Write(data) + if _, err := stream.Write(data); err != nil { + stream.WriteNil() + } } else { stream.WriteString(derr.Error()) } } stream.WriteObjectEnd() } - - return nil } func newHandler(connCtx context.Context, conn jsonWriter, idgen func() ID, reg *serviceRegistry, allowList AllowList, maxBatchConcurrency uint, traceRequests bool, logger log.Logger, rpcSlowLogThreshold time.Duration) *handler { @@ -578,9 +578,28 @@ func writeNilIfNotPresent(stream *jsoniter.Stream) { } else { hasNil = false } - if !hasNil { - stream.WriteNil() + if hasNil { + // not needed + return + } + + var validJsonEnd bool + if len(b) > 0 { + // assumption is that api call handlers would write valid json in case of errors + // we are not guaranteed that they did write valid json if last elem is "}" or "]" + // since we don't check json nested-ness + // however appending "null" after "}" or "]" does not help much either + lastIdx := len(b) - 1 + validJsonEnd = b[lastIdx] == '}' || b[lastIdx] == ']' } + if validJsonEnd { + // not needed + return + } + + // does not have nil ending + // does not have valid json + stream.WriteNil() } // unsubscribe is the callback function for all *_unsubscribe calls. diff --git a/rpc/handler_test.go b/rpc/handler_test.go index 3b0e4a0441b..c15b67158dc 100644 --- a/rpc/handler_test.go +++ b/rpc/handler_test.go @@ -29,6 +29,10 @@ func TestHandlerDoesNotDoubleWriteNull(t *testing.T) { params: []byte("[3]"), expected: `{"jsonrpc":"2.0","id":1,"result":{}}`, }, + "err_with_valid_json": { + params: []byte("[4]"), + expected: `{"jsonrpc":"2.0","id":1,"result":{"structLogs":[]},"error":{"code":-32000,"message":"id 4"}}`, + }, } for name, testParams := range tests { @@ -50,7 +54,17 @@ func TestHandlerDoesNotDoubleWriteNull(t *testing.T) { if id == 2 { return fmt.Errorf("id 2") } - stream.WriteEmptyObject() + if id == 3 { + stream.WriteEmptyObject() + return nil + } + if id == 4 { + stream.WriteObjectStart() + stream.WriteObjectField("structLogs") + stream.WriteEmptyArray() + stream.WriteObjectEnd() + return fmt.Errorf("id 4") + } return nil } diff --git a/rpc/http.go b/rpc/http.go index bcfd0948703..7f95a250807 100644 --- a/rpc/http.go +++ b/rpc/http.go @@ -34,10 +34,13 @@ import ( "github.com/golang-jwt/jwt/v4" jsoniter "github.com/json-iterator/go" "github.com/ledgerwatch/log/v3" + + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/dbg" ) const ( - maxRequestContentLength = 1024 * 1024 * 5 + maxRequestContentLength = 1024 * 1024 * 32 // 32MB contentType = "application/json" jwtTokenExpiry = 60 * time.Second ) @@ -236,6 +239,15 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { // until EOF, writes the response to w, and orders the server to process a // single request. ctx := r.Context() + + // The context might be cancelled if the client's connection was closed while waiting for ServeHTTP. + if libcommon.FastContextErr(ctx) != nil { + // TODO: introduce an log message for all possible cases + // s.logger.Warn("rpc.Server.ServeHTTP: client connection was lost. Check if the server is able to keep up with the request rate.", "url", r.URL.String()) + w.WriteHeader(http.StatusServiceUnavailable) + return + } + ctx = context.WithValue(ctx, "remote", r.RemoteAddr) ctx = context.WithValue(ctx, "scheme", r.Proto) ctx = context.WithValue(ctx, "local", r.Host) @@ -245,6 +257,12 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { if origin := r.Header.Get("Origin"); origin != "" { ctx = context.WithValue(ctx, "Origin", origin) } + if s.debugSingleRequest { + if v := r.Header.Get(dbg.HTTPHeader); v == "true" { + ctx = dbg.ContextWithDebug(ctx, true) + + } + } w.Header().Set("content-type", contentType) codec := newHTTPServerConn(r, w) diff --git a/rpc/http_test.go b/rpc/http_test.go index 28b7cfe51c7..899fd9cd93e 100644 --- a/rpc/http_test.go +++ b/rpc/http_test.go @@ -107,7 +107,7 @@ func TestHTTPRespBodyUnlimited(t *testing.T) { logger := log.New() const respLength = maxRequestContentLength * 3 - s := NewServer(50, false /* traceRequests */, true, logger, 100) + s := NewServer(50, false /* traceRequests */, false /* debugSingleRequests */, true, logger, 100) defer s.Stop() if err := s.RegisterName("test", largeRespService{respLength}); err != nil { t.Fatal(err) diff --git a/rpc/rpccfg/rpccfg.go b/rpc/rpccfg/rpccfg.go index a1b963d7530..e5c5fce0751 100644 --- a/rpc/rpccfg/rpccfg.go +++ b/rpc/rpccfg/rpccfg.go @@ -37,6 +37,8 @@ var DefaultHTTPTimeouts = HTTPTimeouts{ } const DefaultEvmCallTimeout = 5 * time.Minute +const DefaultOverlayGetLogsTimeout = 5 * time.Minute +const DefaultOverlayReplayBlockTimeout = 10 * time.Second const DefaultHistoricalRPCTimeout = 5 * time.Second diff --git a/rpc/server.go b/rpc/server.go index 345422115bf..20ed7d4cd4c 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -54,15 +54,16 @@ type Server struct { batchConcurrency uint disableStreaming bool traceRequests bool // Whether to print requests at INFO level + debugSingleRequest bool // Whether to print requests at INFO level batchLimit int // Maximum number of requests in a batch logger log.Logger rpcSlowLogThreshold time.Duration } // NewServer creates a new server instance with no registered handlers. -func NewServer(batchConcurrency uint, traceRequests, disableStreaming bool, logger log.Logger, rpcSlowLogThreshold time.Duration) *Server { +func NewServer(batchConcurrency uint, traceRequests, debugSingleRequest, disableStreaming bool, logger log.Logger, rpcSlowLogThreshold time.Duration) *Server { server := &Server{services: serviceRegistry{logger: logger}, idgen: randomIDGenerator(), codecs: mapset.NewSet(), run: 1, batchConcurrency: batchConcurrency, - disableStreaming: disableStreaming, traceRequests: traceRequests, logger: logger, rpcSlowLogThreshold: rpcSlowLogThreshold} + disableStreaming: disableStreaming, traceRequests: traceRequests, debugSingleRequest: debugSingleRequest, logger: logger, rpcSlowLogThreshold: rpcSlowLogThreshold} // Register the default service providing meta information about the RPC service such // as the services and methods it offers. rpcService := &RPCService{server: server} diff --git a/rpc/server_test.go b/rpc/server_test.go index 104dc1883a7..15bafe3f15a 100644 --- a/rpc/server_test.go +++ b/rpc/server_test.go @@ -29,12 +29,13 @@ import ( "testing" "time" + "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/log/v3" ) func TestServerRegisterName(t *testing.T) { logger := log.New() - server := NewServer(50, false /* traceRequests */, true, logger, 100) + server := NewServer(50, false /* traceRequests */, false /* debugSingleRequests */, true, logger, 100) service := new(testService) if err := server.RegisterName("test", service); err != nil { @@ -58,7 +59,7 @@ func TestServerRegisterName(t *testing.T) { func TestServer(t *testing.T) { logger := log.New() - files, err := os.ReadDir("testdata") + files, err := dir.ReadDir("testdata") if err != nil { t.Fatal("where'd my testdata go?") } diff --git a/rpc/subscription_test.go b/rpc/subscription_test.go index 8f09b2aa258..dc92ec56bf1 100644 --- a/rpc/subscription_test.go +++ b/rpc/subscription_test.go @@ -56,7 +56,7 @@ func TestSubscriptions(t *testing.T) { subCount = len(namespaces) notificationCount = 3 - server = NewServer(50, false /* traceRequests */, true, logger, 100) + server = NewServer(50, false /* traceRequests */, false /* debugSingleRequests */, true, logger, 100) clientConn, serverConn = net.Pipe() out = json.NewEncoder(clientConn) in = json.NewDecoder(clientConn) diff --git a/rpc/testservice_test.go b/rpc/testservice_test.go index c5017489c82..1a39a77933e 100644 --- a/rpc/testservice_test.go +++ b/rpc/testservice_test.go @@ -28,7 +28,7 @@ import ( ) func newTestServer(logger log.Logger) *Server { - server := NewServer(50, false /* traceRequests */, true, logger, 100) + server := NewServer(50, false /* traceRequests */, false /* debugSingleRequests */, true, logger, 100) server.idgen = sequentialIDGenerator() if err := server.RegisterName("test", new(testService)); err != nil { panic(err) diff --git a/rpc/websocket_test.go b/rpc/websocket_test.go index 941a790b868..d7efebed775 100644 --- a/rpc/websocket_test.go +++ b/rpc/websocket_test.go @@ -168,7 +168,7 @@ func TestClientWebsocketPing(t *testing.T) { func TestClientWebsocketLargeMessage(t *testing.T) { logger := log.New() var ( - srv = NewServer(50, false /* traceRequests */, true, logger, 100) + srv = NewServer(50, false /* traceRequests */, false /* debugSingleRequests */, true, logger, 100) httpsrv = httptest.NewServer(srv.WebsocketHandler(nil, nil, false, logger)) wsURL = "ws:" + strings.TrimPrefix(httpsrv.URL, "http:") ) diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 00000000000..8daa603d847 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,34 @@ +sonar.projectKey=ledgerwatch_erigon +sonar.organization=ledgerwatch +sonar.projectName=erigon + +sonar.sources=. +sonar.exclusions=\ + **/*.pb.go,\ + **/gen_*.go,\ + **/*_gen.go,\ + **/*_mock.go,\ + **/mock_*.go,\ + **/graphql/graph/generated.go,\ + **/*.sol,\ + common/compiler/*.v.py,\ + rpc/testdata/**.js,\ + eth/tracers/js/internal/tracers/**.js + +sonar.tests=. +sonar.test.inclusions=**/*_test.go,tests/** + +sonar.go.coverage.reportPaths=coverage.out,erigon-lib/coverage.out + +# The only way to get an accurate analysis of C/C++/Objective-C files is +# by using the SonarSource build-wrapper and setting the property "sonar.cfamily.build-wrapper-output" +# or by using Clang Compilation Database and setting the property "sonar.cfamily.compile-commands". +# +# If you don't want to analyze C/C++/Objective-C files, then prevent them from being analyzed +# by setting the following properties: +sonar.c.file.suffixes=- +sonar.cpp.file.suffixes=- +sonar.objc.file.suffixes=- + +# Specify whether to scan python files in the repo following python 2 or 3 rules +sonar.python.version=3.12 diff --git a/spectest/case.go b/spectest/case.go index 36efa1ade37..57a1ccc8726 100644 --- a/spectest/case.go +++ b/spectest/case.go @@ -1,12 +1,13 @@ package spectest import ( - "github.com/ledgerwatch/erigon/cl/clparams" - "github.com/ledgerwatch/erigon/cl/transition/machine" "io/fs" "os" "strings" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/transition/machine" + "gfx.cafe/util/go/generic" ) @@ -22,7 +23,8 @@ type TestCase struct { } func (t *TestCase) Version() clparams.StateVersion { - return clparams.StringToClVersion(t.ForkPhaseName) + v, _ := clparams.StringToClVersion(t.ForkPhaseName) + return v } type TestCases struct { diff --git a/spectest/format.go b/spectest/format.go index e9e4720235b..e29868833fa 100644 --- a/spectest/format.go +++ b/spectest/format.go @@ -1,7 +1,7 @@ package spectest import ( - "golang.org/x/exp/slices" + "slices" ) type Format struct { diff --git a/tests/block_test.go b/tests/block_test.go index f5851c11bc8..6807efc67fb 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -22,7 +22,7 @@ import ( "runtime" "testing" - "github.com/ledgerwatch/erigon/eth/ethconfig" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/log/v3" ) @@ -42,7 +42,7 @@ func TestBlockchain(t *testing.T) { // TODO(yperbasis): make it work bt.skipLoad(`^TransitionTests/bcArrowGlacierToMerge/powToPosBlockRejection\.json`) bt.skipLoad(`^TransitionTests/bcFrontierToHomestead/blockChainFrontierWithLargerTDvsHomesteadBlockchain\.json`) - if ethconfig.EnableHistoryV3InTest { + if config3.EnableHistoryV3InTest { // HistoryV3: doesn't produce receipts on execution by design bt.skipLoad(`^InvalidBlocks/bcInvalidHeaderTest/log1_wrongBloom\.json`) bt.skipLoad(`^InvalidBlocks/bcInvalidHeaderTest/wrongReceiptTrie\.json`) diff --git a/tests/bor/helper/miner.go b/tests/bor/helper/miner.go index ab94206a868..a3a4537adf4 100644 --- a/tests/bor/helper/miner.go +++ b/tests/bor/helper/miner.go @@ -5,11 +5,12 @@ import ( "crypto/ecdsa" "encoding/json" "fmt" - "github.com/ledgerwatch/erigon/polygon/bor/borcfg" "math/big" "os" "time" + "github.com/ledgerwatch/erigon/polygon/bor/borcfg" + "github.com/c2h5oh/datasize" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/direct" @@ -123,7 +124,7 @@ func InitMiner(ctx context.Context, genesis *types.Genesis, privKey *ecdsa.Priva return nil, nil, err } - downloaderConfig, err := downloadercfg.New(datadir.New(ddir), nodeCfg.Version, torrentLogLevel, downloadRate, uploadRate, utils.TorrentPortFlag.Value, utils.TorrentConnsPerFileFlag.Value, utils.TorrentDownloadSlotsFlag.Value, []string{}, []string{}, "") + downloaderConfig, err := downloadercfg.New(datadir.New(ddir), nodeCfg.Version, torrentLogLevel, downloadRate, uploadRate, utils.TorrentPortFlag.Value, utils.TorrentConnsPerFileFlag.Value, utils.TorrentDownloadSlotsFlag.Value, []string{}, []string{}, "", true) if err != nil { return nil, nil, err } @@ -167,7 +168,7 @@ func InitMiner(ctx context.Context, genesis *types.Genesis, privKey *ecdsa.Priva return nil, nil, err } - err = ethBackend.Init(stack, ethCfg) + err = ethBackend.Init(stack, ethCfg, ethCfg.Genesis.Config) if err != nil { return nil, nil, err } diff --git a/tests/exec_spec_test.go b/tests/exec_spec_test.go index de67b0a6315..c996b73268c 100644 --- a/tests/exec_spec_test.go +++ b/tests/exec_spec_test.go @@ -6,12 +6,12 @@ import ( "path/filepath" "testing" - "github.com/ledgerwatch/erigon/eth/ethconfig" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/log/v3" ) func TestExecutionSpec(t *testing.T) { - if ethconfig.EnableHistoryV3InTest { + if config3.EnableHistoryV3InTest { t.Skip("fix me in e3 please") } diff --git a/tests/execution-spec-tests/berlin/eip2930_access_list/acl/access_list.json b/tests/execution-spec-tests/berlin/eip2930_access_list/acl/access_list.json index 3caca4ffc53..9f1f08c5bbf 100644 --- a/tests/execution-spec-tests/berlin/eip2930_access_list/acl/access_list.json +++ b/tests/execution-spec-tests/berlin/eip2930_access_list/acl/access_list.json @@ -1,7 +1,8 @@ { - "000-fork=Berlin": { + "tests/berlin/eip2930_access_list/test_acl.py::test_access_list[fork_Berlin-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2930.md", "reference-spec-version": "c9db53a936c5c9cbe2db32ba0d1b86c4c6e73534" }, @@ -46,6 +47,7 @@ "nonce": "0x0000000000000000", "hash": "0x0b2f11e1a37119802e23c8cafeca6bea3ad8bc3ffb312ba2c01aaf6ed0598ea6" }, + "blocknumber": "1", "transactions": [ { "type": "0x01", @@ -110,9 +112,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=London": { + "tests/berlin/eip2930_access_list/test_acl.py::test_access_list[fork_London-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2930.md", "reference-spec-version": "c9db53a936c5c9cbe2db32ba0d1b86c4c6e73534" }, @@ -159,6 +162,7 @@ "baseFeePerGas": "0x07", "hash": "0x8c7a047db9fb186f2ecdcc0c438948ddf32ddf1c3d851fc868cb835870268a47" }, + "blocknumber": "1", "transactions": [ { "type": "0x01", @@ -222,5 +226,358 @@ } }, "sealEngine": "NoProof" + }, + "tests/berlin/eip2930_access_list/test_acl.py::test_access_list[fork_Paris-blockchain_test]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2930.md", + "reference-spec-version": "c9db53a936c5c9cbe2db32ba0d1b86c4c6e73534" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07ca5207156b9c65aca3ac89e905f0ec30da7588118ca729dc4284db2c4b45c60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7ca5207156b9c65aca3ac89e905f0ec30da7588118ca729dc4284db2c4b45c60", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xd0a8ba8fe76b4a63654abb908b946975c5dccbf01a08c744ee6c0db3a84e8781" + }, + "blocks": [ + { + "rlp": "0xf902a0f901faa0d0a8ba8fe76b4a63654abb908b946975c5dccbf01a08c744ee6c0db3a84e8781a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa043d337713ee24a500d16b08e4bf331597d3a42b23965420963f5515ad8f67504a083036377ab0b67bd49b91ee1f4bbf5155c36ebf76f81ed88a00276f21693e92ca0c166d1f62ef90bdef78d79a4b28579b279621fbcd156aba3060f242d5feeda67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008273428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8a0b89e01f89b0180078304ef0094000000000000000000000000000000000000aaaa0180f838f7940000000000000000000000000000000000000000e1a0000000000000000000000000000000000000000000000000000000000000000001a02e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4a03be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3c0", + "blockHeader": { + "parentHash": "0xd0a8ba8fe76b4a63654abb908b946975c5dccbf01a08c744ee6c0db3a84e8781", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x43d337713ee24a500d16b08e4bf331597d3a42b23965420963f5515ad8f67504", + "transactionsTrie": "0x83036377ab0b67bd49b91ee1f4bbf5155c36ebf76f81ed88a00276f21693e92c", + "receiptTrie": "0xc166d1f62ef90bdef78d79a4b28579b279621fbcd156aba3060f242d5feeda67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x7342", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xd5200453d339ee8bf06f16295b65aa3ff8c686cc8f8fc742d68fd594cc0b4847" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x01", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x04ef00", + "to": "0x000000000000000000000000000000000000aaaa", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000000", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "v": "0x01", + "r": "0x2e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4", + "s": "0x3be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd5200453d339ee8bf06f16295b65aa3ff8c686cc8f8fc742d68fd594cc0b4847", + "pre": { + "0x000000000000000000000000000000000000aaaa": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x5854505854", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x300000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000aaaa": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x5854505854", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x2cd931", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/berlin/eip2930_access_list/test_acl.py::test_access_list[fork_Shanghai-blockchain_test]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2930.md", + "reference-spec-version": "c9db53a936c5c9cbe2db32ba0d1b86c4c6e73534" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07ca5207156b9c65aca3ac89e905f0ec30da7588118ca729dc4284db2c4b45c60a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7ca5207156b9c65aca3ac89e905f0ec30da7588118ca729dc4284db2c4b45c60", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x14bbc32145346dff5f4680588e1c531d64d7bf28fd402933a3852af6b8041be2" + }, + "blocks": [ + { + "rlp": "0xf902c2f9021ba014bbc32145346dff5f4680588e1c531d64d7bf28fd402933a3852af6b8041be2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa043d337713ee24a500d16b08e4bf331597d3a42b23965420963f5515ad8f67504a083036377ab0b67bd49b91ee1f4bbf5155c36ebf76f81ed88a00276f21693e92ca0c166d1f62ef90bdef78d79a4b28579b279621fbcd156aba3060f242d5feeda67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008273428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8a0b89e01f89b0180078304ef0094000000000000000000000000000000000000aaaa0180f838f7940000000000000000000000000000000000000000e1a0000000000000000000000000000000000000000000000000000000000000000001a02e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4a03be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3c0c0", + "blockHeader": { + "parentHash": "0x14bbc32145346dff5f4680588e1c531d64d7bf28fd402933a3852af6b8041be2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x43d337713ee24a500d16b08e4bf331597d3a42b23965420963f5515ad8f67504", + "transactionsTrie": "0x83036377ab0b67bd49b91ee1f4bbf5155c36ebf76f81ed88a00276f21693e92c", + "receiptTrie": "0xc166d1f62ef90bdef78d79a4b28579b279621fbcd156aba3060f242d5feeda67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x7342", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x8fcc58f6dd3454f7e0db18bd056ab85c245767c6e9a54fc9e1dcdc41f681b875" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x01", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x04ef00", + "to": "0x000000000000000000000000000000000000aaaa", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000000", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "v": "0x01", + "r": "0x2e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4", + "s": "0x3be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8fcc58f6dd3454f7e0db18bd056ab85c245767c6e9a54fc9e1dcdc41f681b875", + "pre": { + "0x000000000000000000000000000000000000aaaa": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x5854505854", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x300000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000aaaa": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x5854505854", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x2cd931", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/berlin/eip2930_access_list/test_acl.py::test_access_list[fork_Cancun-blockchain_test]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2930.md", + "reference-spec-version": "c9db53a936c5c9cbe2db32ba0d1b86c4c6e73534" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ea6ed16785f173a713dd0c45e27b09b810a057496eeabf719e371e8e033ce51ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xea6ed16785f173a713dd0c45e27b09b810a057496eeabf719e371e8e033ce51b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb8c710de0a35c0a3e621aa83b540ce127b4d5a5b22dbadf28f84fcfb3ea73507" + }, + "blocks": [ + { + "rlp": "0xf902e5f9023ea0b8c710de0a35c0a3e621aa83b540ce127b4d5a5b22dbadf28f84fcfb3ea73507a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa021512c3c1ba58b995fa5be0ab185dd1e1c23eaf0c053b852e2a70c550f079450a083036377ab0b67bd49b91ee1f4bbf5155c36ebf76f81ed88a00276f21693e92ca0c166d1f62ef90bdef78d79a4b28579b279621fbcd156aba3060f242d5feeda67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008273428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8a0b89e01f89b0180078304ef0094000000000000000000000000000000000000aaaa0180f838f7940000000000000000000000000000000000000000e1a0000000000000000000000000000000000000000000000000000000000000000001a02e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4a03be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3c0c0", + "blockHeader": { + "parentHash": "0xb8c710de0a35c0a3e621aa83b540ce127b4d5a5b22dbadf28f84fcfb3ea73507", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x21512c3c1ba58b995fa5be0ab185dd1e1c23eaf0c053b852e2a70c550f079450", + "transactionsTrie": "0x83036377ab0b67bd49b91ee1f4bbf5155c36ebf76f81ed88a00276f21693e92c", + "receiptTrie": "0xc166d1f62ef90bdef78d79a4b28579b279621fbcd156aba3060f242d5feeda67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x7342", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa082595264856ec90cc4c186db6628141539c89ff853c03e67270475c7fb07b1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x01", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x04ef00", + "to": "0x000000000000000000000000000000000000aaaa", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000000", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "v": "0x01", + "r": "0x2e16eb72206c93c471b5894800495ee9c64ae2d9823bcc4d6adeb5d9d9af0dd4", + "s": "0x3be6691e933a0816c59d059a556c27c6753e6ce76d1e357b9201865c80b28df3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa082595264856ec90cc4c186db6628141539c89ff853c03e67270475c7fb07b1", + "pre": { + "0x000000000000000000000000000000000000aaaa": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x5854505854", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x300000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000aaaa": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x5854505854", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x2cd931", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" } } \ No newline at end of file diff --git a/tests/execution-spec-tests/byzantium/eip198_modexp_precompile/modexp/modexp.json b/tests/execution-spec-tests/byzantium/eip198_modexp_precompile/modexp/modexp.json new file mode 100644 index 00000000000..a237e4ef724 --- /dev/null +++ b/tests/execution-spec-tests/byzantium/eip198_modexp_precompile/modexp/modexp.json @@ -0,0 +1,16746 @@ +{ + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0145edd55b129a813b12011ad7f323e17732e3b80310dc46a98180956a37f7534a0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa00b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20edb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123308203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x145edd55b129a813b12011ad7f323e17732e3b80310dc46a98180956a37f7534", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0x0b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20ed", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012330", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x12a5c10e8cb2918397fa2e6abf881edb2f9106c3fe24c2d556537cefc60706f5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x12a5c10e8cb2918397fa2e6abf881edb2f9106c3fe24c2d556537cefc60706f5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6375fe0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a020", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d2fe0c3ec54f682206095e309296e4a53d2089969dbfd84f9981f04202c2d4eba0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a095a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123fc8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd2fe0c3ec54f682206095e309296e4a53d2089969dbfd84f9981f04202c2d4eb", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0x95a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123fc", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x122438f0530f0f13ef7b8c5f2fded81e0d6b62382892ec34e6e781259e777953" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x122438f0530f0f13ef7b8c5f2fded81e0d6b62382892ec34e6e781259e777953", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af63767d8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949828", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04a01a75bbb430e196d06c1f6e275f9fb46c86b0a0378ce67ff5a4e357daf51f2a03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a064052d9fa0b3c2faa3fa0438e6c974765a74d7d8e6bc86834aa2ddebb6328561b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123b88203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4a01a75bbb430e196d06c1f6e275f9fb46c86b0a0378ce67ff5a4e357daf51f2", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0x64052d9fa0b3c2faa3fa0438e6c974765a74d7d8e6bc86834aa2ddebb6328561", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123b8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xbc377f00208eb796ee1ff8414f829e43943b90aa9ba3c331d3695d9a53b4c62f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xbc377f00208eb796ee1ff8414f829e43943b90aa9ba3c331d3695d9a53b4c62f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6376530", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949ad0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e35dd6222edfd802b5d49d3980ec9fcafd9d52c7013c1080a283e0b2539a250ca056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a07066e686a5e0902153b438c261825b4da5efa2daa48d36ad079bb69ff762ff2cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123b48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe35dd6222edfd802b5d49d3980ec9fcafd9d52c7013c1080a283e0b2539a250c", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x7066e686a5e0902153b438c261825b4da5efa2daa48d36ad079bb69ff762ff2c", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123b4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x59e57a469f4a19fe08c7c997f27a25a7ed89df549c565af2080e749f4a97a9e8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x59e57a469f4a19fe08c7c997f27a25a7ed89df549c565af2080e749f4a97a9e8", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6376508", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949af8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00bb852a689c28a345071aaa1c15338f4f20a8e815868bc3b3f9bd37e914b783ba05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0bb852a689c28a345071aaa1c15338f4f20a8e815868bc3b3f9bd37e914b783b", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x1f0ed1c77ec4ad2f09c6e50f6a1de3ed595273f532726df646d1550c66a148a5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x1f0ed1c77ec4ad2f09c6e50f6a1de3ed595273f532726df646d1550c66a148a5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6376a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d4132679a40571bbd7abca0690b08f84e9f62afc2c3cce9a17ece002fde317aa0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3d4132679a40571bbd7abca0690b08f84e9f62afc2c3cce9a17ece002fde317a", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x95f4462d7bf147453d27057df238b60365bd7da711e7e9ffcf559ac90888e3ed" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x95f4462d7bf147453d27057df238b60365bd7da711e7e9ffcf559ac90888e3ed", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6376a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06fa0432347ff46b029976b93f1ea9e52491c6eb12d4675869745f025f1bbab23a0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6fa0432347ff46b029976b93f1ea9e52491c6eb12d4675869745f025f1bbab23", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa1a5fa051408b646abe5d367bebffa20e8891ba30d0327c4b05d4367109315e9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa1a5fa051408b646abe5d367bebffa20e8891ba30d0327c4b05d4367109315e9", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6376a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c6f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c5784d54c3efc2d297e35de273b617390f7792f6cc68c58ecb8819585ae104aa029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a07e61a1158a76020aef10b0c55152f8eda4b3204412dcd912383083f98fa7e525b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830121d58203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0c5784d54c3efc2d297e35de273b617390f7792f6cc68c58ecb8819585ae104a", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x7e61a1158a76020aef10b0c55152f8eda4b3204412dcd912383083f98fa7e525", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0121d5", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd275bd77ff1a55d658c5f2289286ad1b8539285327c010da82e065566d37ed84" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd275bd77ff1a55d658c5f2289286ad1b8539285327c010da82e065566d37ed84", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6375252", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94adae", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00b464dc56f09e9ea4c1724a2f97ce06487af9d47afb8f250b8124e5422e1edc9a0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda09e42b22b7b3c58ec88d41dacf41dfe049f5fff969dc651d3a234e7895604f844b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830122f08203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0b464dc56f09e9ea4c1724a2f97ce06487af9d47afb8f250b8124e5422e1edc9", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x9e42b22b7b3c58ec88d41dacf41dfe049f5fff969dc651d3a234e7895604f844", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0122f0", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd4465c22505e41e1951b027fb133306f9047381d84470bb9efae32ca19859f13" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd4465c22505e41e1951b027fb133306f9047381d84470bb9efae32ca19859f13", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6375d60", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a2a0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f0368e898b4e694e717ed814873e3e0365ef1cb2a1bada6610fac86a660b1e3aa06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a00b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20edb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123308203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf0368e898b4e694e717ed814873e3e0365ef1cb2a1bada6610fac86a660b1e3a", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0x0b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20ed", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012330", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xcda77f6aa989361645d92de4ef1ddc6661cb339fb3cddd609087f701881dc9e4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xcda77f6aa989361645d92de4ef1ddc6661cb339fb3cddd609087f701881dc9e4", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6375fe0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a020", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa031f1d49587148a793b25680da507f28bb0eee3a1d1b8e85a1a197ab1544023d2a03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a095a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123fc8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x31f1d49587148a793b25680da507f28bb0eee3a1d1b8e85a1a197ab1544023d2", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0x95a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123fc", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x721985d675ea4e08d50728dc87bfd03b661a3e181b9bf0f82a7584de356405aa" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x721985d675ea4e08d50728dc87bfd03b661a3e181b9bf0f82a7584de356405aa", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af63767d8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949828", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90309f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02331571e37b182f34f3dae85ded918f1d3541f6be5a96bc2bb73f01ffe280ad5a073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da07dd3ad5159ef9b01eb18c55997ae285c237475bbfebca8bf39e8c2c9093bb8d3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083017ff48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2331571e37b182f34f3dae85ded918f1d3541f6be5a96bc2bb73f01ffe280ad5", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0x7dd3ad5159ef9b01eb18c55997ae285c237475bbfebca8bf39e8c2c9093bb8d3", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017ff4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdd989209196256030c9296ac25c63c1d9d076c3b8c3c751858695fee86cee7a7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdd989209196256030c9296ac25c63c1d9d076c3b8c3c751858695fee86cee7a7", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af63aff88", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de910078", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa074ed71415ac7175df8a28e6a3877e3a087114fc45cebc5e256843be5949e5c64a0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0e0d1278e19c1add3218ccbd6a3e656d3e36d2e8c1a430059dec51d5149ccd36bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083017f6a8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x74ed71415ac7175df8a28e6a3877e3a087114fc45cebc5e256843be5949e5c64", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0xe0d1278e19c1add3218ccbd6a3e656d3e36d2e8c1a430059dec51d5149ccd36b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017f6a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x081b315dd0277f8743be5ea8261d93087f50562fc5ee5cb8f1feb95ec798ddf6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x081b315dd0277f8743be5ea8261d93087f50562fc5ee5cb8f1feb95ec798ddf6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af63afa24", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9105dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028373de9860edcefff13657ec8ec02745a51c45f60d5a95f061430abd983357ca0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008307a1208203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x28373de9860edcefff13657ec8ec02745a51c45f60d5a95f061430abd983357c", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3c9c74017ba0569f11ce9a5d7f87008b838cdabe78efc82703fc5b99cd0fd985" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x3c9c74017ba0569f11ce9a5d7f87008b838cdabe78efc82703fc5b99cd0fd985", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6784b40", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902eaf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b09634554219b3938a415e0aae126086c88661ffae99f885ffcb1b3415e636ba0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a0e824d0828beb3df9964ddb40ac02626826f86ad84d83654f7a3ca611ad303a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301407a8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9b09634554219b3938a415e0aae126086c88661ffae99f885ffcb1b3415e636b", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0xe824d0828beb3df9964ddb40ac02626826f86ad84d83654f7a3ca611ad303a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01407a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb52c37193f1f2bfd826e270b67ed6809967117b91871db76f6fa6a6bff8dcd2c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb52c37193f1f2bfd826e270b67ed6809967117b91871db76f6fa6a6bff8dcd2c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af63884c4", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de937b3c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Byzantium-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902caf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d55c0be09c1b57e2715f66c7d3ba813d16ea95b298cd12ee3e7daaabe5e6c4b4a0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a0c48f22b96784e14ff5e78dbd8a41cd14dff6533a1bfafbdeb2d202552fc72205b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083013fb48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd55c0be09c1b57e2715f66c7d3ba813d16ea95b298cd12ee3e7daaabe5e6c4b4", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0xc48f22b96784e14ff5e78dbd8a41cd14dff6533a1bfafbdeb2d202552fc72205", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x013fb4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xbff824482757af9e48d3bb5893a4a379d6c53218170c6032cdaf130b016acff3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xbff824482757af9e48d3bb5893a4a379d6c53218170c6032cdaf130b016acff3", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af6387d08", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9382f8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d17adeb94713c12c0d472d766c438c46322a8d9c4e25d570f73776317de937aa0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa00b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20edb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123308203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3d17adeb94713c12c0d472d766c438c46322a8d9c4e25d570f73776317de937a", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0x0b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20ed", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012330", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd0bae16caf585e260b4734f5c3bf853f94091417b45889ae2f6f05dbe09135e9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd0bae16caf585e260b4734f5c3bf853f94091417b45889ae2f6f05dbe09135e9", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35fe0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a020", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f50a0bebb5754e952419afebdfdd0ce680df272e2289ab5d43260ba7b66426fa0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a095a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123fc8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7f50a0bebb5754e952419afebdfdd0ce680df272e2289ab5d43260ba7b66426f", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0x95a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123fc", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x2372a2b2682afcba16cf6ebd704f9bd998fc40ebfe33f58994aebd1adfab0dd1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2372a2b2682afcba16cf6ebd704f9bd998fc40ebfe33f58994aebd1adfab0dd1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed367d8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949828", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cbdc18e310dada640fa017ec448c326d0ace3261c13bdd3ee69d030c80202f4fa03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a064052d9fa0b3c2faa3fa0438e6c974765a74d7d8e6bc86834aa2ddebb6328561b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123b88203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcbdc18e310dada640fa017ec448c326d0ace3261c13bdd3ee69d030c80202f4f", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0x64052d9fa0b3c2faa3fa0438e6c974765a74d7d8e6bc86834aa2ddebb6328561", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123b8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xbdb70625fda07aa1ff138ffcd924f863d30315f56c7655db262ef784e3bc6d9c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xbdb70625fda07aa1ff138ffcd924f863d30315f56c7655db262ef784e3bc6d9c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36530", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949ad0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa065e1b6f99bcb514ea60636cd5b9f1c8dd8e03ea34f4c24dccc419b569c687f95a056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a07066e686a5e0902153b438c261825b4da5efa2daa48d36ad079bb69ff762ff2cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123b48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x65e1b6f99bcb514ea60636cd5b9f1c8dd8e03ea34f4c24dccc419b569c687f95", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x7066e686a5e0902153b438c261825b4da5efa2daa48d36ad079bb69ff762ff2c", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123b4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x87384f72b751a21b6accaaec9dc809844f06805e0f599af7715b456855402bac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x87384f72b751a21b6accaaec9dc809844f06805e0f599af7715b456855402bac", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36508", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949af8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e8e89a262793678d79d368235acd600fc8e875b5bcce0d80298de914bc3a4a6ba05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe8e89a262793678d79d368235acd600fc8e875b5bcce0d80298de914bc3a4a6b", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdb985b4dc69782dd14a27d04ee2eb2620ebb56c2b6ec456696d8316430bbf779" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdb985b4dc69782dd14a27d04ee2eb2620ebb56c2b6ec456696d8316430bbf779", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf2d531ba15bc16d6b2f16f612186697312ab6e1cf971f050cf16e2e3c0c1667a0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf2d531ba15bc16d6b2f16f612186697312ab6e1cf971f050cf16e2e3c0c1667", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x88477df43e893525844d3e400c79369ef246c09ec2bd18ddf22c6a8a701f168c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x88477df43e893525844d3e400c79369ef246c09ec2bd18ddf22c6a8a701f168c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e94e48762f6a235a0dcc946bf32d6e70c7920165e39a8a22b7d0b61af16f45d2a0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe94e48762f6a235a0dcc946bf32d6e70c7920165e39a8a22b7d0b61af16f45d2", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x60db4e25e6111476db7aefc1ecdce13c13d68bc3db54516368f27b90757219e6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x60db4e25e6111476db7aefc1ecdce13c13d68bc3db54516368f27b90757219e6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c6f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa040f437a77f9097ddeedff112a7bd2ecdb39d15393b321fa08df080b6fed36315a029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a07e61a1158a76020aef10b0c55152f8eda4b3204412dcd912383083f98fa7e525b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830121d58203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x40f437a77f9097ddeedff112a7bd2ecdb39d15393b321fa08df080b6fed36315", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x7e61a1158a76020aef10b0c55152f8eda4b3204412dcd912383083f98fa7e525", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0121d5", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa8a6c86606323b6d0ec1b24853391a0c365a07f369ecf3025f286dddabe795a1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa8a6c86606323b6d0ec1b24853391a0c365a07f369ecf3025f286dddabe795a1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35252", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94adae", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fd12e17cfc45c6586a761e987055fc1676e1eaba4871e8806ac56774b00cfcaba0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda09e42b22b7b3c58ec88d41dacf41dfe049f5fff969dc651d3a234e7895604f844b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830122f08203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfd12e17cfc45c6586a761e987055fc1676e1eaba4871e8806ac56774b00cfcab", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x9e42b22b7b3c58ec88d41dacf41dfe049f5fff969dc651d3a234e7895604f844", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0122f0", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xec648f46c266b85869f0b099ad0fd9249d81c0f0d6850089f6bd6583af222332" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xec648f46c266b85869f0b099ad0fd9249d81c0f0d6850089f6bd6583af222332", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35d60", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a2a0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c07559cc160fe33405cebbf92886b1a84568068b633c737cfc3fee37a7266462a06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a00b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20edb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123308203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc07559cc160fe33405cebbf92886b1a84568068b633c737cfc3fee37a7266462", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0x0b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20ed", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012330", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb2b343bb504ac162eb0cf65ca0d3afe08bf49e6dcddcbedb5ed390702c1a9928" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb2b343bb504ac162eb0cf65ca0d3afe08bf49e6dcddcbedb5ed390702c1a9928", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35fe0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a020", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d38d0ff241daf0bbe4077b426a2d8872a9a1826992074f8669cf823ee4eefe92a03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a095a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123fc8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd38d0ff241daf0bbe4077b426a2d8872a9a1826992074f8669cf823ee4eefe92", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0x95a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123fc", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xba6373b5398218f33587efddb5dbb23f8f4a11a469c6802f25c4d3de393a29f5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xba6373b5398218f33587efddb5dbb23f8f4a11a469c6802f25c4d3de393a29f5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed367d8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949828", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90309f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07ed62aa0bb101660eee95246b4850c20f91f140e22632ac176438bc791690ad7a073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da07dd3ad5159ef9b01eb18c55997ae285c237475bbfebca8bf39e8c2c9093bb8d3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083017ff48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7ed62aa0bb101660eee95246b4850c20f91f140e22632ac176438bc791690ad7", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0x7dd3ad5159ef9b01eb18c55997ae285c237475bbfebca8bf39e8c2c9093bb8d3", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017ff4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x0fed42f7d1ea7319fb5957c1897e44760f8b93c1771159732555d25ae9682515" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x0fed42f7d1ea7319fb5957c1897e44760f8b93c1771159732555d25ae9682515", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed6ff88", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de910078", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04855e814cf3bb00fc235b004c015ff62c66cf54dbcd1a7541c54405074531095a0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0e0d1278e19c1add3218ccbd6a3e656d3e36d2e8c1a430059dec51d5149ccd36bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083017f6a8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4855e814cf3bb00fc235b004c015ff62c66cf54dbcd1a7541c54405074531095", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0xe0d1278e19c1add3218ccbd6a3e656d3e36d2e8c1a430059dec51d5149ccd36b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017f6a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x42995d3b2ae24b5feb0ef9d116d2bad5cfb482e2f1cb2339048c697d41db0e3e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x42995d3b2ae24b5feb0ef9d116d2bad5cfb482e2f1cb2339048c697d41db0e3e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed6fa24", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9105dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa018f31002caa6feb72298ebc748c55e3d70b123ca4a4534c976069f8e30e8048aa0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008307a1208203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x18f31002caa6feb72298ebc748c55e3d70b123ca4a4534c976069f8e30e8048a", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x570825a22428853f1840d7f09a13487590291647c5f21ea350f15660b2dfddac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x570825a22428853f1840d7f09a13487590291647c5f21ea350f15660b2dfddac", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f144b40", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902eaf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ab751ffe6f2111d719b3522b2e2b2863f837d254dcfb76e475b5bef3cf5d9e1da0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a0e824d0828beb3df9964ddb40ac02626826f86ad84d83654f7a3ca611ad303a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301407a8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xab751ffe6f2111d719b3522b2e2b2863f837d254dcfb76e475b5bef3cf5d9e1d", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0xe824d0828beb3df9964ddb40ac02626826f86ad84d83654f7a3ca611ad303a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01407a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdf3f2de7dadb02d762a13262003b822c93a18f20b8cbeb2ca651f5e4805d0ff6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdf3f2de7dadb02d762a13262003b822c93a18f20b8cbeb2ca651f5e4805d0ff6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed484c4", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de937b3c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Constantinople-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902caf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04bec532142321b2cfd579b57f2ea6085badb6b20d76a04d20a35aaf6818fac2ca0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a0c48f22b96784e14ff5e78dbd8a41cd14dff6533a1bfafbdeb2d202552fc72205b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083013fb48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4bec532142321b2cfd579b57f2ea6085badb6b20d76a04d20a35aaf6818fac2c", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0xc48f22b96784e14ff5e78dbd8a41cd14dff6533a1bfafbdeb2d202552fc72205", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x013fb4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb19a17568aadda3cac38d773889f7b025d5e464317975372b110b4083720ccf6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb19a17568aadda3cac38d773889f7b025d5e464317975372b110b4083720ccf6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed47d08", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9382f8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d17adeb94713c12c0d472d766c438c46322a8d9c4e25d570f73776317de937aa0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa00b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20edb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123308203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3d17adeb94713c12c0d472d766c438c46322a8d9c4e25d570f73776317de937a", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0x0b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20ed", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012330", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd0bae16caf585e260b4734f5c3bf853f94091417b45889ae2f6f05dbe09135e9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd0bae16caf585e260b4734f5c3bf853f94091417b45889ae2f6f05dbe09135e9", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35fe0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a020", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f50a0bebb5754e952419afebdfdd0ce680df272e2289ab5d43260ba7b66426fa0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a095a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123fc8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7f50a0bebb5754e952419afebdfdd0ce680df272e2289ab5d43260ba7b66426f", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0x95a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123fc", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x2372a2b2682afcba16cf6ebd704f9bd998fc40ebfe33f58994aebd1adfab0dd1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2372a2b2682afcba16cf6ebd704f9bd998fc40ebfe33f58994aebd1adfab0dd1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed367d8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949828", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cbdc18e310dada640fa017ec448c326d0ace3261c13bdd3ee69d030c80202f4fa03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a064052d9fa0b3c2faa3fa0438e6c974765a74d7d8e6bc86834aa2ddebb6328561b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123b88203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcbdc18e310dada640fa017ec448c326d0ace3261c13bdd3ee69d030c80202f4f", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0x64052d9fa0b3c2faa3fa0438e6c974765a74d7d8e6bc86834aa2ddebb6328561", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123b8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xbdb70625fda07aa1ff138ffcd924f863d30315f56c7655db262ef784e3bc6d9c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xbdb70625fda07aa1ff138ffcd924f863d30315f56c7655db262ef784e3bc6d9c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36530", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949ad0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa065e1b6f99bcb514ea60636cd5b9f1c8dd8e03ea34f4c24dccc419b569c687f95a056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a07066e686a5e0902153b438c261825b4da5efa2daa48d36ad079bb69ff762ff2cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123b48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x65e1b6f99bcb514ea60636cd5b9f1c8dd8e03ea34f4c24dccc419b569c687f95", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x7066e686a5e0902153b438c261825b4da5efa2daa48d36ad079bb69ff762ff2c", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123b4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x87384f72b751a21b6accaaec9dc809844f06805e0f599af7715b456855402bac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x87384f72b751a21b6accaaec9dc809844f06805e0f599af7715b456855402bac", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36508", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949af8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e8e89a262793678d79d368235acd600fc8e875b5bcce0d80298de914bc3a4a6ba05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe8e89a262793678d79d368235acd600fc8e875b5bcce0d80298de914bc3a4a6b", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdb985b4dc69782dd14a27d04ee2eb2620ebb56c2b6ec456696d8316430bbf779" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdb985b4dc69782dd14a27d04ee2eb2620ebb56c2b6ec456696d8316430bbf779", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf2d531ba15bc16d6b2f16f612186697312ab6e1cf971f050cf16e2e3c0c1667a0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf2d531ba15bc16d6b2f16f612186697312ab6e1cf971f050cf16e2e3c0c1667", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x88477df43e893525844d3e400c79369ef246c09ec2bd18ddf22c6a8a701f168c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x88477df43e893525844d3e400c79369ef246c09ec2bd18ddf22c6a8a701f168c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e94e48762f6a235a0dcc946bf32d6e70c7920165e39a8a22b7d0b61af16f45d2a0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a08193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830124388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe94e48762f6a235a0dcc946bf32d6e70c7920165e39a8a22b7d0b61af16f45d2", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0x8193cd7952e68653df0a544ca0fd3fd058f0f929fdb21e7a18ca3a46f1573802", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012438", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x60db4e25e6111476db7aefc1ecdce13c13d68bc3db54516368f27b90757219e6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x60db4e25e6111476db7aefc1ecdce13c13d68bc3db54516368f27b90757219e6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed36a30", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9495d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c6f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa040f437a77f9097ddeedff112a7bd2ecdb39d15393b321fa08df080b6fed36315a029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a07e61a1158a76020aef10b0c55152f8eda4b3204412dcd912383083f98fa7e525b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830121d58203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x40f437a77f9097ddeedff112a7bd2ecdb39d15393b321fa08df080b6fed36315", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x7e61a1158a76020aef10b0c55152f8eda4b3204412dcd912383083f98fa7e525", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0121d5", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa8a6c86606323b6d0ec1b24853391a0c365a07f369ecf3025f286dddabe795a1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa8a6c86606323b6d0ec1b24853391a0c365a07f369ecf3025f286dddabe795a1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35252", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94adae", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fd12e17cfc45c6586a761e987055fc1676e1eaba4871e8806ac56774b00cfcaba0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda09e42b22b7b3c58ec88d41dacf41dfe049f5fff969dc651d3a234e7895604f844b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830122f08203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfd12e17cfc45c6586a761e987055fc1676e1eaba4871e8806ac56774b00cfcab", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x9e42b22b7b3c58ec88d41dacf41dfe049f5fff969dc651d3a234e7895604f844", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0122f0", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xec648f46c266b85869f0b099ad0fd9249d81c0f0d6850089f6bd6583af222332" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xec648f46c266b85869f0b099ad0fd9249d81c0f0d6850089f6bd6583af222332", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35d60", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a2a0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c07559cc160fe33405cebbf92886b1a84568068b633c737cfc3fee37a7266462a06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a00b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20edb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123308203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc07559cc160fe33405cebbf92886b1a84568068b633c737cfc3fee37a7266462", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0x0b2135dacbbf697023b0e0b61cd9756e85c232a57b67a4db49960a55c6df20ed", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012330", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb2b343bb504ac162eb0cf65ca0d3afe08bf49e6dcddcbedb5ed390702c1a9928" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb2b343bb504ac162eb0cf65ca0d3afe08bf49e6dcddcbedb5ed390702c1a9928", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35fe0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a020", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d38d0ff241daf0bbe4077b426a2d8872a9a1826992074f8669cf823ee4eefe92a03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a095a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123fc8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd38d0ff241daf0bbe4077b426a2d8872a9a1826992074f8669cf823ee4eefe92", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0x95a519aa02052dac7a39804fabaa1e9ef31a6115445b19766a088909c0cab5d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0123fc", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xba6373b5398218f33587efddb5dbb23f8f4a11a469c6802f25c4d3de393a29f5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xba6373b5398218f33587efddb5dbb23f8f4a11a469c6802f25c4d3de393a29f5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed367d8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949828", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90309f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07ed62aa0bb101660eee95246b4850c20f91f140e22632ac176438bc791690ad7a073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da07dd3ad5159ef9b01eb18c55997ae285c237475bbfebca8bf39e8c2c9093bb8d3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083017ff48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7ed62aa0bb101660eee95246b4850c20f91f140e22632ac176438bc791690ad7", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0x7dd3ad5159ef9b01eb18c55997ae285c237475bbfebca8bf39e8c2c9093bb8d3", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017ff4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x0fed42f7d1ea7319fb5957c1897e44760f8b93c1771159732555d25ae9682515" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x0fed42f7d1ea7319fb5957c1897e44760f8b93c1771159732555d25ae9682515", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed6ff88", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de910078", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04855e814cf3bb00fc235b004c015ff62c66cf54dbcd1a7541c54405074531095a0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0e0d1278e19c1add3218ccbd6a3e656d3e36d2e8c1a430059dec51d5149ccd36bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083017f6a8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4855e814cf3bb00fc235b004c015ff62c66cf54dbcd1a7541c54405074531095", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0xe0d1278e19c1add3218ccbd6a3e656d3e36d2e8c1a430059dec51d5149ccd36b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017f6a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x42995d3b2ae24b5feb0ef9d116d2bad5cfb482e2f1cb2339048c697d41db0e3e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x42995d3b2ae24b5feb0ef9d116d2bad5cfb482e2f1cb2339048c697d41db0e3e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed6fa24", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9105dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa018f31002caa6feb72298ebc748c55e3d70b123ca4a4534c976069f8e30e8048aa0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008307a1208203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x18f31002caa6feb72298ebc748c55e3d70b123ca4a4534c976069f8e30e8048a", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x570825a22428853f1840d7f09a13487590291647c5f21ea350f15660b2dfddac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x570825a22428853f1840d7f09a13487590291647c5f21ea350f15660b2dfddac", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f144b40", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902eaf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ab751ffe6f2111d719b3522b2e2b2863f837d254dcfb76e475b5bef3cf5d9e1da0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a0e824d0828beb3df9964ddb40ac02626826f86ad84d83654f7a3ca611ad303a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301407a8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xab751ffe6f2111d719b3522b2e2b2863f837d254dcfb76e475b5bef3cf5d9e1d", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0xe824d0828beb3df9964ddb40ac02626826f86ad84d83654f7a3ca611ad303a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01407a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdf3f2de7dadb02d762a13262003b822c93a18f20b8cbeb2ca651f5e4805d0ff6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdf3f2de7dadb02d762a13262003b822c93a18f20b8cbeb2ca651f5e4805d0ff6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed484c4", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de937b3c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_ConstantinopleFix-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902caf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04bec532142321b2cfd579b57f2ea6085badb6b20d76a04d20a35aaf6818fac2ca0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a0c48f22b96784e14ff5e78dbd8a41cd14dff6533a1bfafbdeb2d202552fc72205b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083013fb48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4bec532142321b2cfd579b57f2ea6085badb6b20d76a04d20a35aaf6818fac2c", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0xc48f22b96784e14ff5e78dbd8a41cd14dff6533a1bfafbdeb2d202552fc72205", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x013fb4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb19a17568aadda3cac38d773889f7b025d5e464317975372b110b4083720ccf6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb19a17568aadda3cac38d773889f7b025d5e464317975372b110b4083720ccf6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed47d08", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9382f8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09da109c632edb5b22d6a773b4b91b1c2dde6d5b3e5d7a88c1bac049432584d14a0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa0186c57cf277d3a616027273948930e43e6a3400df2f0020a42c2acd6d4d68508b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830122c88203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9da109c632edb5b22d6a773b4b91b1c2dde6d5b3e5d7a88c1bac049432584d14", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0x186c57cf277d3a616027273948930e43e6a3400df2f0020a42c2acd6d4d68508", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0122c8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x125b8d1432c29261730236aaffbcd0548751604a14a5b56fabd4bd991a678ce0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x125b8d1432c29261730236aaffbcd0548751604a14a5b56fabd4bd991a678ce0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35bd0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a430", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f91f22498b650677132b0ec1fdfeb5a0c14edd21c11cd38618192758ffb46f96a0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a05332fdae11c93fb1d6ea89b16f157817e19466ecea50cdc937267a3eb146b798b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123948203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf91f22498b650677132b0ec1fdfeb5a0c14edd21c11cd38618192758ffb46f96", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0x5332fdae11c93fb1d6ea89b16f157817e19466ecea50cdc937267a3eb146b798", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012394", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x4c3166798b0581010576c8d9cf17c6de75ac4453cc3500a38436fdb52b573f11" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4c3166798b0581010576c8d9cf17c6de75ac4453cc3500a38436fdb52b573f11", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed363c8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949c38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0953be631ce435348243779af5d6bcd6a14e7f81addb502b39c6f61c9a4e28233a03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a0e97c00a479caed71367aaceb5c7d8df82af9616e0978687159c8073fdf1a99e2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830122e88203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x953be631ce435348243779af5d6bcd6a14e7f81addb502b39c6f61c9a4e28233", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0xe97c00a479caed71367aaceb5c7d8df82af9616e0978687159c8073fdf1a99e2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0122e8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79d0d1a6b3d5cca4e73e8003d333282fe671aa1f38656c4336369afa71cb8598" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x79d0d1a6b3d5cca4e73e8003d333282fe671aa1f38656c4336369afa71cb8598", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35d10", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a2f0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0eaac5d41128f9bada0945da10855588ec4ee9aab1e609ee1dec3bb2746f85b0fa056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a084b6e08ec9d68fad8276cf37bd960d42fa90c6215724dcc3cfd149998aeb39c0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830122e48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xeaac5d41128f9bada0945da10855588ec4ee9aab1e609ee1dec3bb2746f85b0f", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x84b6e08ec9d68fad8276cf37bd960d42fa90c6215724dcc3cfd149998aeb39c0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0122e4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdeecb8a5fecaeb1a95000a0b69891f0615775dd7dcab63dfb079ec4eeb06cd37" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdeecb8a5fecaeb1a95000a0b69891f0615775dd7dcab63dfb079ec4eeb06cd37", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35ce8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a318", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01fb57e23353d43dbcb4e800a6b22604e07674b42eacea5fa0c10359dda0375aba05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca0a65f02f683b366f9970411c13a11286b360c42cfdc57a81710198019e1bfa036b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123008203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1fb57e23353d43dbcb4e800a6b22604e07674b42eacea5fa0c10359dda0375ab", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0xa65f02f683b366f9970411c13a11286b360c42cfdc57a81710198019e1bfa036", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012300", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd8f70161bfff69fd966d491034e5a88d0e5f634f86dd513ea5bf7f880b31192d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd8f70161bfff69fd966d491034e5a88d0e5f634f86dd513ea5bf7f880b31192d", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35e00", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a200", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c767111b125550e4200e0c12eef38d9c322d96f5b9ad69119a31dcb161cc0617a0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a0a65f02f683b366f9970411c13a11286b360c42cfdc57a81710198019e1bfa036b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123008203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc767111b125550e4200e0c12eef38d9c322d96f5b9ad69119a31dcb161cc0617", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0xa65f02f683b366f9970411c13a11286b360c42cfdc57a81710198019e1bfa036", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012300", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xbdc6a688405ed2aa84362803c91e6eabca89bd2919c53063172d6f0a1ce45570" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xbdc6a688405ed2aa84362803c91e6eabca89bd2919c53063172d6f0a1ce45570", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35e00", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a200", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03158c9b06f987f9ba0b0e4ca123a71dab2cc3b2625db83846fea1ced91b44fb2a0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a0a65f02f683b366f9970411c13a11286b360c42cfdc57a81710198019e1bfa036b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123008203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3158c9b06f987f9ba0b0e4ca123a71dab2cc3b2625db83846fea1ced91b44fb2", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0xa65f02f683b366f9970411c13a11286b360c42cfdc57a81710198019e1bfa036", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012300", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x7804290f92c20bedcd7b62097e4558716ba68539c4f3f2263627ef62f9aba2c2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x7804290f92c20bedcd7b62097e4558716ba68539c4f3f2263627ef62f9aba2c2", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35e00", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a200", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c6f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa040f437a77f9097ddeedff112a7bd2ecdb39d15393b321fa08df080b6fed36315a029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a07e61a1158a76020aef10b0c55152f8eda4b3204412dcd912383083f98fa7e525b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830121d58203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x40f437a77f9097ddeedff112a7bd2ecdb39d15393b321fa08df080b6fed36315", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x7e61a1158a76020aef10b0c55152f8eda4b3204412dcd912383083f98fa7e525", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0121d5", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa8a6c86606323b6d0ec1b24853391a0c365a07f369ecf3025f286dddabe795a1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa8a6c86606323b6d0ec1b24853391a0c365a07f369ecf3025f286dddabe795a1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35252", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94adae", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ff5d022bace8303847b36c54ea239df01226bd27ddfc78608bae7871a278857ba0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda019c8523707d5f8eb7860fbe8574d9e15de6e307dd88728de95557c26ad966668b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830122bc8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xff5d022bace8303847b36c54ea239df01226bd27ddfc78608bae7871a278857b", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x19c8523707d5f8eb7860fbe8574d9e15de6e307dd88728de95557c26ad966668", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0122bc", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb33e60fc86ddc63fdb891e15f209807f2aa8d41a26abbaf63e8ae3d692fe2295" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb33e60fc86ddc63fdb891e15f209807f2aa8d41a26abbaf63e8ae3d692fe2295", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35b58", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a4a8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa095e0e036ccbea6ba494a542862d0af6924f0ac52c4be03535b7fd60a963c7daca06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a0186c57cf277d3a616027273948930e43e6a3400df2f0020a42c2acd6d4d68508b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830122c88203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x95e0e036ccbea6ba494a542862d0af6924f0ac52c4be03535b7fd60a963c7dac", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0x186c57cf277d3a616027273948930e43e6a3400df2f0020a42c2acd6d4d68508", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0122c8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x59bbb097a867cf41e1184ac6f19b41e084ac3f34f20fa9e9c1e310aaf96e55d2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x59bbb097a867cf41e1184ac6f19b41e084ac3f34f20fa9e9c1e310aaf96e55d2", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed35bd0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94a430", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05a84752069a2a3b4332c35f060417e45a0b62b733326a956688f6b95ebf50fbea03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a05332fdae11c93fb1d6ea89b16f157817e19466ecea50cdc937267a3eb146b798b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830123948203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5a84752069a2a3b4332c35f060417e45a0b62b733326a956688f6b95ebf50fbe", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0x5332fdae11c93fb1d6ea89b16f157817e19466ecea50cdc937267a3eb146b798", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012394", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd0c9c5278b81339d12a4ef83ceac6f7836e43426a6abeae107be224c0164b216" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd0c9c5278b81339d12a4ef83ceac6f7836e43426a6abeae107be224c0164b216", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed363c8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de949c38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90309f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0cfb3b4546db91c1fc11d19d9b2c7235cabe167b5c7d7a27efbe5d44adc5522a073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da0f2e5a819f638421cdf2f3378dd85f1ca1f04acaf5037ca22fa36de9e3975df9db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830172248203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe0cfb3b4546db91c1fc11d19d9b2c7235cabe167b5c7d7a27efbe5d44adc5522", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0xf2e5a819f638421cdf2f3378dd85f1ca1f04acaf5037ca22fa36de9e3975df9d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017224", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xeaa2d0d27b257bc67aaee74d97944980d75ac04e7f68e3863337deb57b3403cf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xeaa2d0d27b257bc67aaee74d97944980d75ac04e7f68e3863337deb57b3403cf", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed67568", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de918a98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e79f8c2c18752d088d73aa4501023e68169bf9cf40f337182aea216afece2b3da0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0a9f30194fbdaf981a3464966e69f08223c63320a98d53b712257c4bfb973e9e0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830172028203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe79f8c2c18752d088d73aa4501023e68169bf9cf40f337182aea216afece2b3d", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0xa9f30194fbdaf981a3464966e69f08223c63320a98d53b712257c4bfb973e9e0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x017202", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdb37a17583f89bedde3937056d4dbb037a3681640b491ae74cfeada1d2e802e6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdb37a17583f89bedde3937056d4dbb037a3681640b491ae74cfeada1d2e802e6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed67414", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de918bec", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa018f31002caa6feb72298ebc748c55e3d70b123ca4a4534c976069f8e30e8048aa0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008307a1208203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x18f31002caa6feb72298ebc748c55e3d70b123ca4a4534c976069f8e30e8048a", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x570825a22428853f1840d7f09a13487590291647c5f21ea350f15660b2dfddac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x570825a22428853f1840d7f09a13487590291647c5f21ea350f15660b2dfddac", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f144b40", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902eaf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ad340d0a69aae6b4dc2261bf0f53e8e3888a866a16a20966929cc8fc479cde2ba0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a0cfae1fd61ede222b66b2430b0133e7bd224bb4d38af3fc6ace791cb0f22ae1bbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083013eda8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xad340d0a69aae6b4dc2261bf0f53e8e3888a866a16a20966929cc8fc479cde2b", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0xcfae1fd61ede222b66b2430b0133e7bd224bb4d38af3fc6ace791cb0f22ae1bb", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x013eda", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf6d5fa2dea1c6e61e9838efd11dbf80bc2890549b7c5c997e921e1a5e63a438f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf6d5fa2dea1c6e61e9838efd11dbf80bc2890549b7c5c997e921e1a5e63a438f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed47484", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de938b7c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Istanbul-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902caf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a47478a47ac37a5951726559d9b5f504e3f3a46e896b6d948c23ebf1f0ef7e1fa0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a0a083b182adfc4c13c8cf2956c09c34171cc254dceade5b87a81f830fda3b678bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083013e488203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa47478a47ac37a5951726559d9b5f504e3f3a46e896b6d948c23ebf1f0ef7e1f", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0xa083b182adfc4c13c8cf2956c09c34171cc254dceade5b87a81f830fda3b678b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x013e48", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xcac066ce1952c1e84ea2d32dfd9a1524e06af85c288e5a4db247668181aec5be" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xcac066ce1952c1e84ea2d32dfd9a1524e06af85c288e5a4db247668181aec5be", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed46ed0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de939130", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa061334aed50970d6017ef47397774d2b35612b264bd0fc5c48df7613db8c43c88a0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa02c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301296c8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x61334aed50970d6017ef47397774d2b35612b264bd0fc5c48df7613db8c43c88", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0x2c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xea83e4cdbbd77395f345633c96e81ea10b87af22ec8852d5fa82b01b86506266" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xea83e4cdbbd77395f345633c96e81ea10b87af22ec8852d5fa82b01b86506266", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed39e38", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461c8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b8c289d22436f616681167378010cc73c30a1c4f8ce516f51f8033145a795b28a0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a04942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083012a388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb8c289d22436f616681167378010cc73c30a1c4f8ce516f51f8033145a795b28", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0x4942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a38", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x9a258df0f6ec0777b95eeb5d8ca58f7e13aca30c9477b96ea48ff18593d950b7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x9a258df0f6ec0777b95eeb5d8ca58f7e13aca30c9477b96ea48ff18593d950b7", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed3a630", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b64e21623ffe6d417e66727fc9a87a459b8776bbb8b58a9d2856bb91659676fa03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a0c7215d6b72539060bd1e02b5fada32a285065ef99995ee3df9177f12947a41e9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301298c8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9b64e21623ffe6d417e66727fc9a87a459b8776bbb8b58a9d2856bb91659676f", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0xc7215d6b72539060bd1e02b5fada32a285065ef99995ee3df9177f12947a41e9", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01298c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x954798fcf579cb115b84f43ad5adff5c9c10083fa9e586d230952d94fef97914" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x954798fcf579cb115b84f43ad5adff5c9c10083fa9e586d230952d94fef97914", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed39f78", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946088", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fff989a73862441af6ccfa1be1d19622eddc5e65757ebb9ce0501a8bfb24274fa056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a07079f7b880442abf6800ed4d0d9346700d2fc8306d1aa7c3bdd7d4cd4a4ffd5fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129888203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfff989a73862441af6ccfa1be1d19622eddc5e65757ebb9ce0501a8bfb24274f", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x7079f7b880442abf6800ed4d0d9346700d2fc8306d1aa7c3bdd7d4cd4a4ffd5f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012988", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb39dcadb95696264ab654e44425e6ec87a570202ff0657fc60c795b35809464a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb39dcadb95696264ab654e44425e6ec87a570202ff0657fc60c795b35809464a", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed39f50", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9460b0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0feaeae173f48546e7989d026a01f9c3fea21f4940f5f583501f82e7d14d3ee65a05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129a48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfeaeae173f48546e7989d026a01f9c3fea21f4940f5f583501f82e7d14d3ee65", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc08d0d5dd3ad7f818c22e7d319cb4ba20a87ef4a04ce9694718b468298aab88d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xc08d0d5dd3ad7f818c22e7d319cb4ba20a87ef4a04ce9694718b468298aab88d", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed3a068", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd4037fc46208d9dc226d3f8ffa7726d5122af1c1c3449cfbd5622df82f3e272a0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129a48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd4037fc46208d9dc226d3f8ffa7726d5122af1c1c3449cfbd5622df82f3e272", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf2622c608663108c520786af098cdee4c62e2108a746c079b05d65ff8846930a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf2622c608663108c520786af098cdee4c62e2108a746c079b05d65ff8846930a", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed3a068", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08ecea888d467fed33d2c1d824f878dbba3688750c3b7031eda9e6ca600c5be18a0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129a48203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8ecea888d467fed33d2c1d824f878dbba3688750c3b7031eda9e6ca600c5be18", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x45797bfa609a578421233673ad58a92ad24964a676e28d2853f596d8ce0d58b2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x45797bfa609a578421233673ad58a92ad24964a676e28d2853f596d8ce0d58b2", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed3a068", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c6f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bbe7f3d23a6031f9d9ec6d67f92f35e459e2ac43eadc0c511a363cc462ee353ca029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a056e99aa6fb44a50b9c56c9b064751678477d15763e962c910b34fe6eaa3d5b67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830128798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbbe7f3d23a6031f9d9ec6d67f92f35e459e2ac43eadc0c511a363cc462ee353c", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x56e99aa6fb44a50b9c56c9b064751678477d15763e962c910b34fe6eaa3d5b67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012879", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x789045ecee7d52e83dc4a1f92a4f0582fc5f74e4ecb7c1d72e05bcbcafcde1b9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x789045ecee7d52e83dc4a1f92a4f0582fc5f74e4ecb7c1d72e05bcbcafcde1b9", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed394ba", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946b46", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa050de64f4311863c27e584f59c265a3299a2badafa5bc83762c34818b3cdd96c2a0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda0896ea8b76744c357bf1f36d120526cb59aef6db48390dea1a30a5f9dfb90fd3db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129608203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x50de64f4311863c27e584f59c265a3299a2badafa5bc83762c34818b3cdd96c2", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x896ea8b76744c357bf1f36d120526cb59aef6db48390dea1a30a5f9dfb90fd3d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012960", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xe5b0fbdcfab7be2c8a0224ac2dcac2d954d42aa1fa3495c2a6d4c551a08b44cf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xe5b0fbdcfab7be2c8a0224ac2dcac2d954d42aa1fa3495c2a6d4c551a08b44cf", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed39dc0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946240", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa072760dee204a292c74d95bb78bca7c7933e46cf97bc692ed1589ff4111eebb37a06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a02c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301296c8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x72760dee204a292c74d95bb78bca7c7933e46cf97bc692ed1589ff4111eebb37", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0x2c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3fd449862780e2326071f494233ce27d0f0d639d79f0db5a8eea4feb692f7e74" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x3fd449862780e2326071f494233ce27d0f0d639d79f0db5a8eea4feb692f7e74", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed39e38", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461c8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d66c6f09f4bf9d42916a3e4397e94fa26a993ab8f37b3bc2f93d554c69d8dfafa03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a04942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083012a388203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd66c6f09f4bf9d42916a3e4397e94fa26a993ab8f37b3bc2f93d554c69d8dfaf", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0x4942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a38", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6063b3c126deec7315fdb4e6c720f582b6f4ae0c4d48c69107230bea4d14f7fa" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x6063b3c126deec7315fdb4e6c720f582b6f4ae0c4d48c69107230bea4d14f7fa", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed3a630", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90309f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bb36e8e36310f9224cd535d48aabd041fbfc35af8e8d4276b60c6e52165098aea073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da0d53c50a1309abf68984d22493dd07c59758ee940c8ca7a3db02dcb783d25ad5cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083014a508203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbb36e8e36310f9224cd535d48aabd041fbfc35af8e8d4276b60c6e52165098ae", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0xd53c50a1309abf68984d22493dd07c59758ee940c8ca7a3db02dcb783d25ad5c", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x7e2187bac2787604049a95305c5e5dc4ad80840e99c2ede92f0b092d400eba99" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x7e2187bac2787604049a95305c5e5dc4ad80840e99c2ede92f0b092d400eba99", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed4e720", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9318e0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d349b9d25b6a457601bad21a2fbd2d4a809b5437fd866c2508171248f7a77300a0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0cebd359f292e60d19c162689b229d27c921831bb56077ee72978267a5b0c2197b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083014a2e8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd349b9d25b6a457601bad21a2fbd2d4a809b5437fd866c2508171248f7a77300", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0xcebd359f292e60d19c162689b229d27c921831bb56077ee72978267a5b0c2197", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a2e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xff163cea6ffc39c65924b27b703bb505d9e6068b088ddf725a00852bd54ceed5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xff163cea6ffc39c65924b27b703bb505d9e6068b088ddf725a00852bd54ceed5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed4e5cc", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de931a34", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf90308f901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa018f31002caa6feb72298ebc748c55e3d70b123ca4a4534c976069f8e30e8048aa0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008307a1208203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x18f31002caa6feb72298ebc748c55e3d70b123ca4a4534c976069f8e30e8048a", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x570825a22428853f1840d7f09a13487590291647c5f21ea350f15660b2dfddac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x570825a22428853f1840d7f09a13487590291647c5f21ea350f15660b2dfddac", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f144b40", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902eaf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e49e9c066dc26643422b8aba1d316f3f50c75e5c0a9cfec637dff15de6fa7614a0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a0818b2517cfc6bb7043c6c20805a56c61c15424d9a62ac8c386094baee51af603b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301427e8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe49e9c066dc26643422b8aba1d316f3f50c75e5c0a9cfec637dff15de6fa7614", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0x818b2517cfc6bb7043c6c20805a56c61c15424d9a62ac8c386094baee51af603", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01427e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x1f0745fc08a53da1e3d6297043431096aa28cf6af47b7253abc6407a33b43fa5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x1f0745fc08a53da1e3d6297043431096aa28cf6af47b7253abc6407a33b43fa5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed498ec", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de936714", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Berlin-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4" + }, + "blocks": [ + { + "rlp": "0xf902caf901fda0c3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0753b368c9164c1c73e7d43ef3262b059699ad7a04c9f9133ae1f1a0042aa6d0ca0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a00fd2ffbfcd4f3e7ce494349c9d08a23795fddac759985a5cf8ac27eb25295c61b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830141ec8203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0", + "blockHeader": { + "parentHash": "0xc3b3e8b8f0bc8f1df1119fa8e1d8b2eb477b2b94f73a302e3d8e096344a6e2a4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x753b368c9164c1c73e7d43ef3262b059699ad7a04c9f9133ae1f1a0042aa6d0c", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0x0fd2ffbfcd4f3e7ce494349c9d08a23795fddac759985a5cf8ac27eb25295c61", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0141ec", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa8ced46e638525de5ba73d6acbe950df030ab118d1eea52c9a968116024cc7e6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa8ced46e638525de5ba73d6acbe950df030ab118d1eea52c9a968116024cc7e6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ed49338", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de936cc8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04e1674a47107437356c46f1ec3d20e8cb2b19d585c86bdac6435ce4fe037e1c5a0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa02c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301296c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4e1674a47107437356c46f1ec3d20e8cb2b19d585c86bdac6435ce4fe037e1c5", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0x2c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xbf2f31287dd1dc0363cd1c95931066762f23afc3de986be374945382aaa2cae5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xbf2f31287dd1dc0363cd1c95931066762f23afc3de986be374945382aaa2cae5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7c44", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461c8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c0028873f395b2092bec9666e69b7bbdaab8bef01d51e5d65c0ca16f79bb8544a0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a04942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083012a388203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc0028873f395b2092bec9666e69b7bbdaab8bef01d51e5d65c0ca16f79bb8544", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0x4942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a38", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x14a114897b0c0b1475eb2b05d33875e0c84989a280e737595cc76e9c5babb77e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x14a114897b0c0b1475eb2b05d33875e0c84989a280e737595cc76e9c5babb77e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7ea8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902caf901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f604e389e04e74099778415dd5ddad218ff46b2aee18d9275f0afdcc4a43e06ba03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a0c7215d6b72539060bd1e02b5fada32a285065ef99995ee3df9177f12947a41e9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301298c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf604e389e04e74099778415dd5ddad218ff46b2aee18d9275f0afdcc4a43e06b", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0xc7215d6b72539060bd1e02b5fada32a285065ef99995ee3df9177f12947a41e9", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01298c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x091b25899aecfb857589e703ea76751fe6464c4609e9674b87f1eba614748530" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x091b25899aecfb857589e703ea76751fe6464c4609e9674b87f1eba614748530", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7ca4", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946088", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09af385995abbc42360a39d65aaf4f0162de951312274b508265b718f53cfb885a056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a07079f7b880442abf6800ed4d0d9346700d2fc8306d1aa7c3bdd7d4cd4a4ffd5fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129888203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9af385995abbc42360a39d65aaf4f0162de951312274b508265b718f53cfb885", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x7079f7b880442abf6800ed4d0d9346700d2fc8306d1aa7c3bdd7d4cd4a4ffd5f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012988", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x0e328ad71ee86caafbfdd7624d43c49df3b335f093cd85aeabc00421a0576a6b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x0e328ad71ee86caafbfdd7624d43c49df3b335f093cd85aeabc00421a0576a6b", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7c98", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9460b0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902caf901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07dd8bea904fe1b9c4cdbc4d57170d422b3ce617210a4369c66c3f7a84132403ca05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129a48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7dd8bea904fe1b9c4cdbc4d57170d422b3ce617210a4369c66c3f7a84132403c", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x83bf7784a0f397234c0ddaaf24808b4b62d7d62efd85cf85bd4ba538507b9c48" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x83bf7784a0f397234c0ddaaf24808b4b62d7d62efd85cf85bd4ba538507b9c48", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7cec", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902caf901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0882492657082e24843a3a7550344da6f207fcf03f0ef2719c5bcf59bb853f53aa0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129a48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x882492657082e24843a3a7550344da6f207fcf03f0ef2719c5bcf59bb853f53a", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x7c3e45d1d6805b5edd0f17417c1f31157d1b5f91cf270d112ab334ef57a07cc0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x7c3e45d1d6805b5edd0f17417c1f31157d1b5f91cf270d112ab334ef57a07cc0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7cec", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902caf901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f5ccb0d9af7ce6d7cdbb02180ce6efaaa0d52dd1faef667bad1ce8a1f987be8a0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129a48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7f5ccb0d9af7ce6d7cdbb02180ce6efaaa0d52dd1faef667bad1ce8a1f987be8", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xa75ee2d4b683293c4ad82f40dc96b776335c865e0c1f1b891660f99917524a4b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa75ee2d4b683293c4ad82f40dc96b776335c865e0c1f1b891660f99917524a4b", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7cec", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0277dd93757a6589391c29f444a4834e2239368ee2ddfc3124e2b64c80327d998a029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a056e99aa6fb44a50b9c56c9b064751678477d15763e962c910b34fe6eaa3d5b67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830128798203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x277dd93757a6589391c29f444a4834e2239368ee2ddfc3124e2b64c80327d998", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x56e99aa6fb44a50b9c56c9b064751678477d15763e962c910b34fe6eaa3d5b67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012879", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x5bc30b626e428426761fb88dbf7a2d4f63830b15b912fef675f1d59021d76fba" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x5bc30b626e428426761fb88dbf7a2d4f63830b15b912fef675f1d59021d76fba", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb796b", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946b46", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c7d3cca2f4a20b9fa9040591256b81a8906d6329c675fc1f7aeb19797b202626a0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda0896ea8b76744c357bf1f36d120526cb59aef6db48390dea1a30a5f9dfb90fd3db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830129608203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc7d3cca2f4a20b9fa9040591256b81a8906d6329c675fc1f7aeb19797b202626", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x896ea8b76744c357bf1f36d120526cb59aef6db48390dea1a30a5f9dfb90fd3d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012960", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x2c9dd0b6934880fef115cf57e7db8bcf8e8169c17db89253562e030a159313db" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2c9dd0b6934880fef115cf57e7db8bcf8e8169c17db89253562e030a159313db", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7c20", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946240", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f1799f729e45ca0b8be96f8ae9c2e30e8dd6e03a8946373231ee26a0f1bf0fa0a06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a02c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301296c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf1799f729e45ca0b8be96f8ae9c2e30e8dd6e03a8946373231ee26a0f1bf0fa0", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0x2c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xedef3c8faf97f079fadc50ff54fbf4619dfedfb25a06dc8c019c9fa2abbec49c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xedef3c8faf97f079fadc50ff54fbf4619dfedfb25a06dc8c019c9fa2abbec49c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7c44", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461c8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902c9f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e88e4532dc26cd61e8353d81111fbf9387ff48ed73ef20b91a7e0f27f772b8f2a03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a04942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083012a388203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe88e4532dc26cd61e8353d81111fbf9387ff48ed73ef20b91a7e0f27f772b8f2", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0x4942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a38", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x10a4c0d2c13beb143d806afeafa3ffdc0cc989937787e82c168b4e1d1cbf10fc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x10a4c0d2c13beb143d806afeafa3ffdc0cc989937787e82c168b4e1d1cbf10fc", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecb7ea8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf9030af901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa032bf4fcbb001ad2f6caddcd57a0cbd358bfb3d473852d01267a545950d64359ba073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da0d53c50a1309abf68984d22493dd07c59758ee940c8ca7a3db02dcb783d25ad5cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083014a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x32bf4fcbb001ad2f6caddcd57a0cbd358bfb3d473852d01267a545950d64359b", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0xd53c50a1309abf68984d22493dd07c59758ee940c8ca7a3db02dcb783d25ad5c", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x37b789faf0679add98721c6faf08c40847eaebaeb877c692754b51d836d411d1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x37b789faf0679add98721c6faf08c40847eaebaeb877c692754b51d836d411d1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecbdef0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9318e0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf90309f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0210e4cbaf74bac12d9e13e9679bb1c5e7764712b3e2013b4000106169e4e1bb9a0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0cebd359f292e60d19c162689b229d27c921831bb56077ee72978267a5b0c2197b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083014a2e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x210e4cbaf74bac12d9e13e9679bb1c5e7764712b3e2013b4000106169e4e1bb9", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0xcebd359f292e60d19c162689b229d27c921831bb56077ee72978267a5b0c2197", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a2e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xbbb8ce263705ddd4b7ca78aa1a1a2b54a8237644760d459665edd25ac9b27e3d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xbbb8ce263705ddd4b7ca78aa1a1a2b54a8237644760d459665edd25ac9b27e3d", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecbde8a", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de931a34", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf90309f901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a90c25a13389ec5bd13e9d694d0d77f8f80dd320ea59f8280594c2dfb00876bca0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008307a1208203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa90c25a13389ec5bd13e9d694d0d77f8f80dd320ea59f8280594c2dfb00876bc", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xb978c67f346ad7112f8a450b5a611e0784a54b5cf8b138eb4240bb6ecb0420aa" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb978c67f346ad7112f8a450b5a611e0784a54b5cf8b138eb4240bb6ecb0420aa", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674edee360", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902ebf901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa092b61ad8a5313cd0edcf176e77800f128c2a0d3585c478a716cd9ce6e297a307a0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a0818b2517cfc6bb7043c6c20805a56c61c15424d9a62ac8c386094baee51af603b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008301427e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x92b61ad8a5313cd0edcf176e77800f128c2a0d3585c478a716cd9ce6e297a307", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0x818b2517cfc6bb7043c6c20805a56c61c15424d9a62ac8c386094baee51af603", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01427e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x6bd743d6b0a2aec170835c470c61c939b6485019e76ff67d10344ae45daf52f1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x6bd743d6b0a2aec170835c470c61c939b6485019e76ff67d10344ae45daf52f1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecbc77a", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de936714", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_London-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace" + }, + "blocks": [ + { + "rlp": "0xf902cbf901fea0af7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bacea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bbc5decc58f1b11f459f247c8a2d3e812ab516e69fb6cd9f83248f42a2d24381a0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a00fd2ffbfcd4f3e7ce494349c9d08a23795fddac759985a5cf8ac27eb25295c61b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830141ec8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0", + "blockHeader": { + "parentHash": "0xaf7d84e261681f3c4b09cd50926ddb8639d9a63d71c09b3c5a58d66a7771bace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbbc5decc58f1b11f459f247c8a2d3e812ab516e69fb6cd9f83248f42a2d24381", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0x0fd2ffbfcd4f3e7ce494349c9d08a23795fddac759985a5cf8ac27eb25295c61", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0141ec", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x21eea4ad97b21405832be2120b090e516688fcaebb5d23cfbd6dd0b4390cd9ba" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x21eea4ad97b21405832be2120b090e516688fcaebb5d23cfbd6dd0b4390cd9ba", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ecbc5c4", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de936cc8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c5f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa014b5ed4c200ead76e317678fcb2b1ae92771012e22179682b8012f006a609daea0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa02c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301296c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x14b5ed4c200ead76e317678fcb2b1ae92771012e22179682b8012f006a609dae", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0x2c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xcdeed72c2438715fde37b0874cc3e08041a0ca738de1fc6ec980f30e165c97f2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xcdeed72c2438715fde37b0874cc3e08041a0ca738de1fc6ec980f30e165c97f2", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c44", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461c8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c6f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00e1e6208300a9dfd091f1d78b33f107e7a89f09acab581bf7e76f6f9c48086c2a0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a04942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083012a388203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0e1e6208300a9dfd091f1d78b33f107e7a89f09acab581bf7e76f6f9c48086c2", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0x4942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a38", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xb51ec6b28269737520ae396aa16a00bfcbfc48d6d10ee12b3e37a23e29d40030" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb51ec6b28269737520ae396aa16a00bfcbfc48d6d10ee12b3e37a23e29d40030", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037ea8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa034db2e52fbacb04ff4e473db865e6f1cd8b84d8d0a2fd8593e98af5589ea0082a03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a0c7215d6b72539060bd1e02b5fada32a285065ef99995ee3df9177f12947a41e9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301298c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x34db2e52fbacb04ff4e473db865e6f1cd8b84d8d0a2fd8593e98af5589ea0082", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0xc7215d6b72539060bd1e02b5fada32a285065ef99995ee3df9177f12947a41e9", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01298c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x26cd49b6bfa0b86ae357e6ee403cf0752fe0485db7ac85826b093bfb87abbec5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x26cd49b6bfa0b86ae357e6ee403cf0752fe0485db7ac85826b093bfb87abbec5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037ca4", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946088", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c6f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c6e5f14ca026e2c2d44f7ff103c770bf144105ad29a3db1b91d7122224df8737a056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a07079f7b880442abf6800ed4d0d9346700d2fc8306d1aa7c3bdd7d4cd4a4ffd5fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129888203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc6e5f14ca026e2c2d44f7ff103c770bf144105ad29a3db1b91d7122224df8737", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x7079f7b880442abf6800ed4d0d9346700d2fc8306d1aa7c3bdd7d4cd4a4ffd5f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012988", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x122a8c06b98a30f6013a9cb8c7996521f5eb51177827e28c3717da9cfecfb554" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x122a8c06b98a30f6013a9cb8c7996521f5eb51177827e28c3717da9cfecfb554", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c98", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9460b0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0591302e70a62e4dd03b5e702518af405040ea706ea78761bfe3793a4b9d6b794a05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x591302e70a62e4dd03b5e702518af405040ea706ea78761bfe3793a4b9d6b794", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xf2aefa140375760fc7eb63d81cd838eb2f2abe984d7b607a774a779ed2717358" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf2aefa140375760fc7eb63d81cd838eb2f2abe984d7b607a774a779ed2717358", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cec", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa016a52c4c0ec5307ca084e8f2f8ae1418b58b07bd83dd765087eff69d4e869d88a0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x16a52c4c0ec5307ca084e8f2f8ae1418b58b07bd83dd765087eff69d4e869d88", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x5501125a2c4b572cc439f4a9a995ed60797118cc4c86884516876e837042542c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x5501125a2c4b572cc439f4a9a995ed60797118cc4c86884516876e837042542c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cec", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c7f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03689ab58966e409d157f321f3422d358029f8931a0ff44c9685fe3d020edf8a1a0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a09b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3689ab58966e409d157f321f3422d358029f8931a0ff44c9685fe3d020edf8a1", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0x9b40853681a46f7cfa07f8c04802feadbc22a32760e7ce640bd7527edf96071e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a4", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x0b150366b0498c3fbda45e2e281f9a33b061d87e32d98661e217a4318c8d22db" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x0b150366b0498c3fbda45e2e281f9a33b061d87e32d98661e217a4318c8d22db", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cec", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f98", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c4f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08a73f9e545d4a817baf9f29edf4fcc5eb30693d2424e655e623da630b0fe1c74a029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a056e99aa6fb44a50b9c56c9b064751678477d15763e962c910b34fe6eaa3d5b67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830128798203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8a73f9e545d4a817baf9f29edf4fcc5eb30693d2424e655e623da630b0fe1c74", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x56e99aa6fb44a50b9c56c9b064751678477d15763e962c910b34fe6eaa3d5b67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012879", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x444a9ff9bf1d72e5b7cd994f0a21ce95ccbaa70c3c15c5939cdacd17f51a5555" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x444a9ff9bf1d72e5b7cd994f0a21ce95ccbaa70c3c15c5939cdacd17f51a5555", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03796b", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946b46", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c5f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cbc83411f874e57ccb2084eb7f2a1524fb53d89ca26fdf62ce4067e1f83dc03ca0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda0896ea8b76744c357bf1f36d120526cb59aef6db48390dea1a30a5f9dfb90fd3db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129608203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcbc83411f874e57ccb2084eb7f2a1524fb53d89ca26fdf62ce4067e1f83dc03c", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x896ea8b76744c357bf1f36d120526cb59aef6db48390dea1a30a5f9dfb90fd3d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012960", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xc6d17dcdaa28a7f1ef92d129296726ecb56932e8160da27b899062ef30b88a45" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xc6d17dcdaa28a7f1ef92d129296726ecb56932e8160da27b899062ef30b88a45", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c20", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946240", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c5f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07d8bdf2e28ce44195da2086b535c106c25a25da3d768d12982b2220caf1c4671a06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a02c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301296c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7d8bdf2e28ce44195da2086b535c106c25a25da3d768d12982b2220caf1c4671", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0x2c303c65871d0684d4d522d61a0b9d4800b6b35a15268b821dfd513eef14db3e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x34a586ea28a9f5a6ac2d126ee8243f25b6dacb5202de43da07490c2ff62fe5ea" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x34a586ea28a9f5a6ac2d126ee8243f25b6dacb5202de43da07490c2ff62fe5ea", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c44", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461c8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c6f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a70dd5400446b3863bafe3e82b1998aaf5163fe3c26d21dcdc48c16fa49aabc7a03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a04942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083012a388203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa70dd5400446b3863bafe3e82b1998aaf5163fe3c26d21dcdc48c16fa49aabc7", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0x4942daa8b2284e1432ce286e2c269887a3033e0c402882972eb3634adbd66a40", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a38", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x12b47aa2264a48ce6026590c4c3b3c54c6e984b898cc03782942478231223c66" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x12b47aa2264a48ce6026590c4c3b3c54c6e984b898cc03782942478231223c66", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037ea8", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459d0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf90307f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dd476cfa714909bdc1ae4756bbff21b5e8d07591ed1fb02c9f1a36f06d440a1da073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da0d53c50a1309abf68984d22493dd07c59758ee940c8ca7a3db02dcb783d25ad5cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083014a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xdd476cfa714909bdc1ae4756bbff21b5e8d07591ed1fb02c9f1a36f06d440a1d", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0xd53c50a1309abf68984d22493dd07c59758ee940c8ca7a3db02dcb783d25ad5c", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x57f8561ce215c9e095e7196c7127096a653fdb505de07c092e31ea828a56173b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x57f8561ce215c9e095e7196c7127096a653fdb505de07c092e31ea828a56173b", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03def0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9318e0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf90306f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa066415f2b96ff332e1909aaa28d6bbeea2150deefbc16d6397ec41ce3d86d27c0a0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0cebd359f292e60d19c162689b229d27c921831bb56077ee72978267a5b0c2197b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083014a2e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x66415f2b96ff332e1909aaa28d6bbeea2150deefbc16d6397ec41ce3d86d27c0", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0xcebd359f292e60d19c162689b229d27c921831bb56077ee72978267a5b0c2197", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a2e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x8280fd7080640af216f9e860c42a6551fcef657bb56904cb03057b31d970392c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x8280fd7080640af216f9e860c42a6551fcef657bb56904cb03057b31d970392c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03de8a", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de931a34", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf90306f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00ed265e03975ae0e3f535fbc6364cdf0a72c0d9379a67b7eda5ae28a5c6222afa0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008307a1208203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0ed265e03975ae0e3f535fbc6364cdf0a72c0d9379a67b7eda5ae28a5c6222af", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xcd5e2888456ae9a7a5a4b6071eac1bd457eb48bba7def0d5a9821963ad5717fc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xcd5e2888456ae9a7a5a4b6071eac1bd457eb48bba7def0d5a9821963ad5717fc", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x16e360", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902e8f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa005846506d54e0cfdc72935756908120a809f709f8d8da010780a15ffba52a578a0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a0818b2517cfc6bb7043c6c20805a56c61c15424d9a62ac8c386094baee51af603b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301427e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x05846506d54e0cfdc72935756908120a809f709f8d8da010780a15ffba52a578", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0x818b2517cfc6bb7043c6c20805a56c61c15424d9a62ac8c386094baee51af603", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01427e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x48372c48d7a5529569fc28de54429a708bd949b9863450cd24dffdc1a01abc2e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x48372c48d7a5529569fc28de54429a708bd949b9863450cd24dffdc1a01abc2e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03c77a", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de936714", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Paris-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55" + }, + "blocks": [ + { + "rlp": "0xf902c8f901fba0256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02b42eb26e21d8dbbb55219c708aa73e58bc0146790a47ed838957db09301df4da0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a00fd2ffbfcd4f3e7ce494349c9d08a23795fddac759985a5cf8ac27eb25295c61b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830141ec8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0", + "blockHeader": { + "parentHash": "0x256bcd394c7846576ee21d8403b78cb09a6b9ededc2099f841d40b3208a6bc55", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2b42eb26e21d8dbbb55219c708aa73e58bc0146790a47ed838957db09301df4d", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0x0fd2ffbfcd4f3e7ce494349c9d08a23795fddac759985a5cf8ac27eb25295c61", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0141ec", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x2e68f63547636809d739512c98195ffee7e1386ceead343c9e2d871e9fc359eb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2e68f63547636809d739512c98195ffee7e1386ceead343c9e2d871e9fc359eb", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03c5c4", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de936cc8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e7f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08f64c726680630cbc7c6694a23e5d10559205c855f20cbac08d7725fd6960a91a0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa0b4f4ba32ed6c88869277aff4ba05c8173a17d3f0efe5b7a3cc44437fa93aaf43b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301296e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8f64c726680630cbc7c6694a23e5d10559205c855f20cbac08d7725fd6960a91", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0xb4f4ba32ed6c88869277aff4ba05c8173a17d3f0efe5b7a3cc44437fa93aaf43", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xb70db8dfaace5f8e9396644a9e5265ade186e985ead79c44e4ad97c17522636e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb70db8dfaace5f8e9396644a9e5265ade186e985ead79c44e4ad97c17522636e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c4a", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461b4", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e8f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa053d8f5eae58610993ba118cb111efbd735094cde85c4220fc877db8d8663dfe7a0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a0b68966cb59b10db23d859b79029c432d1965f3dfd6f39bdfd8d26cd443a1799ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083012a3a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x53d8f5eae58610993ba118cb111efbd735094cde85c4220fc877db8d8663dfe7", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0xb68966cb59b10db23d859b79029c432d1965f3dfd6f39bdfd8d26cd443a1799a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a3a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x480aac55768b3c40143eeca98e374116bd63a14a64b6772da644d9ad98b8ed26" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x480aac55768b3c40143eeca98e374116bd63a14a64b6772da644d9ad98b8ed26", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037eae", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459bc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e9f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0676edb7ba23f37122dd05d0ccfc9909e297454a1259027fc7bf7dd5023d1f802a03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a08bfd780a50d1ede229354a742bf3c39ae2c5cf5810bb47dec90931735a16e0e9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301298e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x676edb7ba23f37122dd05d0ccfc9909e297454a1259027fc7bf7dd5023d1f802", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0x8bfd780a50d1ede229354a742bf3c39ae2c5cf5810bb47dec90931735a16e0e9", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01298e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xe3ad2a6d0b748efd3de752a465432fbdf53a8809ea92e9a356cce00cd85f215f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe3ad2a6d0b748efd3de752a465432fbdf53a8809ea92e9a356cce00cd85f215f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037caa", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946074", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e8f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00d4c6124b52ad9e68b28e77c859176339b1a1919e01f421de5eb355666223c80a056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a0383a30adf388190c3ba4cae3df7583d93d11a6f481743eba7a25f3659ec80da9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301298a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0d4c6124b52ad9e68b28e77c859176339b1a1919e01f421de5eb355666223c80", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x383a30adf388190c3ba4cae3df7583d93d11a6f481743eba7a25f3659ec80da9", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01298a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xed5cbad9568c09e3c15304ef2e213b0320e6c2aafab320193c639823eb04f9c7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xed5cbad9568c09e3c15304ef2e213b0320e6c2aafab320193c639823eb04f9c7", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c9e", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94609c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e9f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2c5a20142baecca08f2af0eacd1affe43d5246529623dc6925105c4a1b35ca4a05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca0a3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc2c5a20142baecca08f2af0eacd1affe43d5246529623dc6925105c4a1b35ca4", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0xa3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a6", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x160f0aca02bdac9838a72b29361eb13eaba87f2ee6099e340cf67a67ea7f20ca" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x160f0aca02bdac9838a72b29361eb13eaba87f2ee6099e340cf67a67ea7f20ca", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cf2", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f84", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e9f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa031200ec8017946414f5f808816125abd92f6520ce1d6e85c7ebc06dada4a0ff8a0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a0a3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x31200ec8017946414f5f808816125abd92f6520ce1d6e85c7ebc06dada4a0ff8", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0xa3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a6", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x527a66ee568ff74c20f9753408fa57a35c76df5ef7dfc1b34f5f870943ac89a8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x527a66ee568ff74c20f9753408fa57a35c76df5ef7dfc1b34f5f870943ac89a8", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cf2", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f84", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e9f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01d97d9ad4922a59df450ba879e37f4b4ca55ba4cd59ac1c601259dc86fd13adca0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a0a3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1d97d9ad4922a59df450ba879e37f4b4ca55ba4cd59ac1c601259dc86fd13adc", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0xa3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a6", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x7ec268adb321459df50246d7e1c98d39cdc35a1ac10a9b5d414893c5c47a8e73" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7ec268adb321459df50246d7e1c98d39cdc35a1ac10a9b5d414893c5c47a8e73", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cf2", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f84", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e6f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa068f15e566de68977d3118e9ee3a4ec3191337cd48da006a121384d0059967888a029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a08af098a78c982f71c85f280c39a3e7ff7f6d51b8d1758df31bb6720c4633f3d3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301287b8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x68f15e566de68977d3118e9ee3a4ec3191337cd48da006a121384d0059967888", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x8af098a78c982f71c85f280c39a3e7ff7f6d51b8d1758df31bb6720c4633f3d3", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01287b", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x8a3978e833d8104aacaef887112e50f0fd8048f96a867de17220624416197840" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8a3978e833d8104aacaef887112e50f0fd8048f96a867de17220624416197840", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037971", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946b32", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e7f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a0dfb5f241b86eb8020d7f107a4575c91df3ca93dbc1ba2ea48f8d7d7a2214b9a0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda02ed095594793de38e4025ca5d3bdab7368002408d7c77d265d860c5ad7fd1c0bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129628203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa0dfb5f241b86eb8020d7f107a4575c91df3ca93dbc1ba2ea48f8d7d7a2214b9", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x2ed095594793de38e4025ca5d3bdab7368002408d7c77d265d860c5ad7fd1c0b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012962", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x99e4fb0789f402077a0b02a455a530d5d22f0636a37cdfe2d8846d95f3c770ad" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x99e4fb0789f402077a0b02a455a530d5d22f0636a37cdfe2d8846d95f3c770ad", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c26", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94622c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e7f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d5b0e5e2125e10397976b0b4c5703bddebfb35ac2a67bc36e00a24447d934777a06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a0b4f4ba32ed6c88869277aff4ba05c8173a17d3f0efe5b7a3cc44437fa93aaf43b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301296e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd5b0e5e2125e10397976b0b4c5703bddebfb35ac2a67bc36e00a24447d934777", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0xb4f4ba32ed6c88869277aff4ba05c8173a17d3f0efe5b7a3cc44437fa93aaf43", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x11a6e21ded8c16e32cc9ba6eac203d763ae4e10e123bc4659a71efc11d8ce856" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x11a6e21ded8c16e32cc9ba6eac203d763ae4e10e123bc4659a71efc11d8ce856", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c4a", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461b4", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902e8f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07e487be0feda111c98946ae8272e1e3381b0971cc885f44d9a5ea1075b66ab62a03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a0b68966cb59b10db23d859b79029c432d1965f3dfd6f39bdfd8d26cd443a1799ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083012a3a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7e487be0feda111c98946ae8272e1e3381b0971cc885f44d9a5ea1075b66ab62", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0xb68966cb59b10db23d859b79029c432d1965f3dfd6f39bdfd8d26cd443a1799a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a3a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xac8f70bf5bbf7c64595becc069344e4f49b82ab21fcaad06b94e2f1e1ffda715" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xac8f70bf5bbf7c64595becc069344e4f49b82ab21fcaad06b94e2f1e1ffda715", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037eae", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459bc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf90329f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b64df2314ea24a842a9876411ca67a2950db0f217a51001c3d08106967b7e3d0a073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da06207fd2dc26145d69ef1cc4ddc2497a9c29c0bf210dc6d3a6e39474e08d5ede1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083014a548203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb64df2314ea24a842a9876411ca67a2950db0f217a51001c3d08106967b7e3d0", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0x6207fd2dc26145d69ef1cc4ddc2497a9c29c0bf210dc6d3a6e39474e08d5ede1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a54", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xab3be4562bee730c1a690b2c490d72a2533c90628c1bada9cb7c166c501ddd61" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xab3be4562bee730c1a690b2c490d72a2533c90628c1bada9cb7c166c501ddd61", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03defc", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9318b8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf90328f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cabebb151d4c6395b48ff9a6a3b1c90767d9446d79da4c9d44249ec2f7bca155a0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0830142102030183542c952a4d76dd32f2049135336d0facdde27bcc5e8ced540b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083014a328203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcabebb151d4c6395b48ff9a6a3b1c90767d9446d79da4c9d44249ec2f7bca155", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0x830142102030183542c952a4d76dd32f2049135336d0facdde27bcc5e8ced540", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a32", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x8eaa0794a73537e966f542755ab7d8c650ddb8946f85cf0c442fccc093f0a58f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8eaa0794a73537e966f542755ab7d8c650ddb8946f85cf0c442fccc093f0a58f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03de96", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de931a0c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf90328f9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00ed265e03975ae0e3f535fbc6364cdf0a72c0d9379a67b7eda5ae28a5c6222afa0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008307a1208203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0ed265e03975ae0e3f535fbc6364cdf0a72c0d9379a67b7eda5ae28a5c6222af", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x68e47802ebf64a4eafd6204761f263cfb8fd860b6215c6b72088b0ccb9b30d20" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x68e47802ebf64a4eafd6204761f263cfb8fd860b6215c6b72088b0ccb9b30d20", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x16e360", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf9030af9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03a3a1ea2c709e0219e3c1086f1b0d4f4e62c1204127d41d96ac0a3c83c0249f3a0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a042f64e59c0ff3f3fad15e481713888772af37d7d8e594ce7c8c8d58316ba6f4db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830142828203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3a3a1ea2c709e0219e3c1086f1b0d4f4e62c1204127d41d96ac0a3c83c0249f3", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0x42f64e59c0ff3f3fad15e481713888772af37d7d8e594ce7c8c8d58316ba6f4d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014282", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xfbefcd060042fa8f680e93056f3ce00fb393120da26b89c0a8ad94ca939adc10" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xfbefcd060042fa8f680e93056f3ce00fb393120da26b89c0a8ad94ca939adc10", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03c786", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9366ec", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Shanghai-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x568645b43d3a1b5fc7fd6025ac6dff6e1b02dfbc909d361d12d4bff88cb1fee0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c" + }, + "blocks": [ + { + "rlp": "0xf902eaf9021ca0f268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d86f2f74c99e93599a9c7723a915410933bcf8d29072c59406587d9b08b2fc0ca0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a076ea67d80b39fa6fcb90638155c68c0177cf0d5fe35ff6853f6778b5952cf699b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830141f08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0c0", + "blockHeader": { + "parentHash": "0xf268f73f49aa6ebf5aaf32466501b1ab4f85fd9d89049e5e221d98d808883c0c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd86f2f74c99e93599a9c7723a915410933bcf8d29072c59406587d9b08b2fc0c", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0x76ea67d80b39fa6fcb90638155c68c0177cf0d5fe35ff6853f6778b5952cf699", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0141f0", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x15f21d4171d4c8553c8b2a4bb07a63682358970c1150582c7f3603cb67463703" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x15f21d4171d4c8553c8b2a4bb07a63682358970c1150582c7f3603cb67463703", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03c5d0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de936ca0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030af9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e88625378d0990d104557125874d972e9a4c3a4dbdbc98249627949190b6c07ea0582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdafa0b4f4ba32ed6c88869277aff4ba05c8173a17d3f0efe5b7a3cc44437fa93aaf43b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301296e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010225a0ae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40a04c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178dc0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe88625378d0990d104557125874d972e9a4c3a4dbdbc98249627949190b6c07e", + "transactionsTrie": "0x582de7e54f39c38a22ed43ba15f053ca5d8d53a932b50c816df915094b62fdaf", + "receiptTrie": "0xb4f4ba32ed6c88869277aff4ba05c8173a17d3f0efe5b7a3cc44437fa93aaf43", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xac5500c6b07b2795e809a4b2eb7e940f3f363095bde4d79a69a865314e84a1c2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102", + "v": "0x25", + "r": "0xae29351267b80b199d909c32aefc8819b2d8a6f1a51969b16bf7e7ed375afa40", + "s": "0x4c49b87297c8819702fea9586c924797c1d27e82c9e5d386911a3fac3fff178d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xac5500c6b07b2795e809a4b2eb7e940f3f363095bde4d79a69a865314e84a1c2", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c4a", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461b4", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_0002-ExpectedOutput_call_return_code_0x01-returned_data_0x0001]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030bf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c935514894120e99433e39ba93f3eccff03c5c670d9615f83a9a182037fe716da0feb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5a0b68966cb59b10db23d859b79029c432d1965f3dfd6f39bdfd8d26cd443a1799ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083012a3a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000225a0e48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3a0742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc935514894120e99433e39ba93f3eccff03c5c670d9615f83a9a182037fe716d", + "transactionsTrie": "0xfeb865eb41bfb7d7a2724539bf8dcbfa31dd8e52c71342c9ef2f6d0b7c6e1fe5", + "receiptTrie": "0xb68966cb59b10db23d859b79029c432d1965f3dfd6f39bdfd8d26cd443a1799a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a3a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x54ae6cd3a7fa7d6b558ec2f63cea29d0cdf2b5bd01f907247c17da585d1015af" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002", + "v": "0x25", + "r": "0xe48b9963b39df9bc3f6f25b48a9e53d9585fb123713952c5b3149ee48cb27aa3", + "s": "0x742827779a3d133267b582bf8c14c1e6888c24f43b02c06c73db1ec52357ab18", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x54ae6cd3a7fa7d6b558ec2f63cea29d0cdf2b5bd01f907247c17da585d1015af", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037eae", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459bc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_00-exponent_00-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030cf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e855aba7ad0fd4ce55d1776e0d6474d53b790294610d072af8aaee89320eebcba03fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3a08bfd780a50d1ede229354a742bf3c39ae2c5cf5810bb47dec90931735a16e0e9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301298e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000226a02b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64da03122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19bc0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe855aba7ad0fd4ce55d1776e0d6474d53b790294610d072af8aaee89320eebcb", + "transactionsTrie": "0x3fa2961b9e7af92fb8bc76ae479f08610c347220e7afda2f92b0c023775640d3", + "receiptTrie": "0x8bfd780a50d1ede229354a742bf3c39ae2c5cf5810bb47dec90931735a16e0e9", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01298e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x158f04a321711a7fbf0d6156935f2d845d31fbb6969a9eb0ffc3b39074c81c5f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000002", + "v": "0x26", + "r": "0x2b6a4a142c65d113e433fd1bc264cdf4043e68128135fd4d66857c7c4ad9a64d", + "s": "0x3122e566d619c10322998fa21b7346f8ce10257145018cdadf76da37ea76c19b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x158f04a321711a7fbf0d6156935f2d845d31fbb6969a9eb0ffc3b39074c81c5f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037caa", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946074", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030bf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f4ce9ea53a07225b7dc50ec60e2068d186f879259bfa8767f9f434a28600f3c0a056d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523a0383a30adf388190c3ba4cae3df7583d93d11a6f481743eba7a25f3659ec80da9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301298a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010226a0c6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8ea074e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf4ce9ea53a07225b7dc50ec60e2068d186f879259bfa8767f9f434a28600f3c0", + "transactionsTrie": "0x56d50dc4157691677375b3cbcf5991b03d6129533a0fe269fb84187c250ea523", + "receiptTrie": "0x383a30adf388190c3ba4cae3df7583d93d11a6f481743eba7a25f3659ec80da9", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01298a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9f7d2ed12fb49d49225a7c5fe86d521d3fbee58d7836038cca4b3884f13142cf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010102", + "v": "0x26", + "r": "0xc6e2ec96df0b5ea6b65a403dbcac2841adf9fff6d21e5cb22a59b03bcd446d8e", + "s": "0x74e284a92516175a952116afdd19cb498d7fa462b52dd506da39ae2bb1e58c17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9f7d2ed12fb49d49225a7c5fe86d521d3fbee58d7836038cca4b3884f13142cf", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c9e", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94609c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_01-exponent_01-modulus_02-ExpectedOutput_call_return_code_0x01-returned_data_0x01]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030cf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bc026ac52956eab04142e7b8e67920bfc4d1514d9a7ecde00ea156369d452d58a05b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586ca0a3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000101010226a048226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2fa07bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbc026ac52956eab04142e7b8e67920bfc4d1514d9a7ecde00ea156369d452d58", + "transactionsTrie": "0x5b7f1a8099ba5f2fdada907a3a9fba95e65101209d8f4a173c2a1ea58d5e586c", + "receiptTrie": "0xa3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a6", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8036e2a3e409d3fa89b4bafcdb909b43041493a19171dc478159aa9154fe7a3e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001010102", + "v": "0x26", + "r": "0x48226126828487ca7d53e687760ad4a4717fd59bd355df15c2183169a2f3cb2f", + "s": "0x7bc512bab2fc98046eae0b55e3a1d55d41444e3ea853422bba7b4edffedeb3a8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8036e2a3e409d3fa89b4bafcdb909b43041493a19171dc478159aa9154fe7a3e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cf2", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x01", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f84", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_02-exponent_01-modulus_03-ExpectedOutput_call_return_code_0x01-returned_data_0x02]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030cf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e5484b7dcc769ea24f432252f73d7e7ad3c32097e42cb3a04ec211a98734850ea0320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775a0a3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102010325a037a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebea00fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe5484b7dcc769ea24f432252f73d7e7ad3c32097e42cb3a04ec211a98734850e", + "transactionsTrie": "0x320e0aea0e730994b59bd67858ee9d2a1c8d0318fd73bd679eb66c4624caa775", + "receiptTrie": "0xa3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a6", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6e4c8cbc81173a7a61ec47b6ce0379d3efdc949906c48c377e3c2b46923e7316" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020103", + "v": "0x25", + "r": "0x37a4619bed9e3276da85b44e4c459b1fcca047202611c59bb95f055ad29acebe", + "s": "0x0fe6ac0bb1c8e962ca1fe4bc50def89aaf6fd629bff23773bd88c591f7dd6575", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6e4c8cbc81173a7a61ec47b6ce0379d3efdc949906c48c377e3c2b46923e7316", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cf2", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x02", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f84", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_02-exponent_02-modulus_05-ExpectedOutput_call_return_code_0x01-returned_data_0x04]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030cf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa019b965b926ea3692a5565af2af82b9e316c58aa2936c537d64a1b748c50d743ca0ec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628a0a3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129a68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c6f8c4800a8307a12094000000000000000000000000000000000000010080b86300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102020525a070720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79deea032adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbfc0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x19b965b926ea3692a5565af2af82b9e316c58aa2936c537d64a1b748c50d743c", + "transactionsTrie": "0xec239ce4f17767e6511c654d9476261b663a6d77b301424f1afa047bf44d9628", + "receiptTrie": "0xa3480e7f3b932471682b0b95c78f80e91354ecaba21b926abfae2b5e1438606f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0129a6", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6d0367a774f2777e51b3162e208e0f501207a2c16da034a5dec13184f25d04db" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001020205", + "v": "0x25", + "r": "0x70720a3dd72413ae6e887af54d091b8f0a93c74ce98eaeb729d5ee5d21b79dee", + "s": "0x32adb4dee838be049113b2e24895cffe3f75db8ebee17934614b80d23e76ddbf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6d0367a774f2777e51b3162e208e0f501207a2c16da034a5dec13184f25d04db", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037cf2", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x04", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de945f84", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_-ExpectedOutput_call_return_code_0x01-returned_data_0x]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf90309f9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa035a06585ffccf1191d29c57beebe8f35cdbb6b17c64d049c17ddfb101dff3ef3a029d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14a08af098a78c982f71c85f280c39a3e7ff7f6d51b8d1758df31bb6720c4633f3d3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301287b8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c3f8c1800a8307a12094000000000000000000000000000000000000010080b86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4ba0176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x35a06585ffccf1191d29c57beebe8f35cdbb6b17c64d049c17ddfb101dff3ef3", + "transactionsTrie": "0x29d093bf1e90510d1135aae4c247adc9da459176a6199150902865a058611c14", + "receiptTrie": "0x8af098a78c982f71c85f280c39a3e7ff7f6d51b8d1758df31bb6720c4633f3d3", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01287b", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x076d5dbbe65859a91d5c1b1d4240ddff8b68a4d00da667ad968c3ce808130dde" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "v": "0x25", + "r": "0x860764ca0c13b726eb5d760861d516d85f1013358db947fc8978cc13cfe73c4b", + "s": "0x176b50161ab801d7f022db8918e102710a808e36cf0b93ad2815c751f5595d17", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x076d5dbbe65859a91d5c1b1d4240ddff8b68a4d00da667ad968c3ce808130dde", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037971", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de946b32", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_00-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030af9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f1dc87d2150e41586d5aee9e9fa69a0da34db1a2cdab1d6c68aa82635b66b62fa0b72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddda02ed095594793de38e4025ca5d3bdab7368002408d7c77d265d860c5ad7fd1c0bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830129628203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010026a05e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629fa06f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf1dc87d2150e41586d5aee9e9fa69a0da34db1a2cdab1d6c68aa82635b66b62f", + "transactionsTrie": "0xb72c4330e841bf52faa5b73e95a784700c4a1fabcfb611f4e709cc6a44da6ddd", + "receiptTrie": "0x2ed095594793de38e4025ca5d3bdab7368002408d7c77d265d860c5ad7fd1c0b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012962", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x94d67007002f6f32574361bea88f1a9664b99fb7e1e28bbf498485d5af2feac2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100", + "v": "0x26", + "r": "0x5e5a3c82e2f6ebd496edb8bb91d9a0061c3c3e88a09da2536f7a603d358f629f", + "s": "0x6f5623d367711ca08f55115b239f96310af2a79ca020edac89e77b84c276ffc4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x94d67007002f6f32574361bea88f1a9664b99fb7e1e28bbf498485d5af2feac2", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c26", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de94622c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_01-ExpectedOutput_call_return_code_0x01-returned_data_0x00]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030af9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a62f3c972ef96f687321167290159f1e90bb2c9b029594d3e71e2d9881bcfea1a06efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242a0b4f4ba32ed6c88869277aff4ba05c8173a17d3f0efe5b7a3cc44437fa93aaf43b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301296e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c4f8c2800a8307a12094000000000000000000000000000000000000010080b8610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010126a0c2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5a0365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45ec0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa62f3c972ef96f687321167290159f1e90bb2c9b029594d3e71e2d9881bcfea1", + "transactionsTrie": "0x6efbcd1181fd02026c7e2bd8c2c2aebe812034b73edac6d8c35975a62eb20242", + "receiptTrie": "0xb4f4ba32ed6c88869277aff4ba05c8173a17d3f0efe5b7a3cc44437fa93aaf43", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01296e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf48b7c6357a80febf3d26bf3a65667f59b5707168348e428d1503bac56d78b86" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101", + "v": "0x26", + "r": "0xc2ea7e1f75114018df73b21129025f14eca0dcda8c3b090a6ef230f543a1abb5", + "s": "0x365a2e6762911919890ccc3153500652d58cfa1628f172df3d22451b4e51b45e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf48b7c6357a80febf3d26bf3a65667f59b5707168348e428d1503bac56d78b86", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037c4a", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x00", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9461b4", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-ModExpInput_base_-exponent_-modulus_0001-ExpectedOutput_call_return_code_0x01-returned_data_0x0000]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030bf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0362212266c1003115fdb8b4bcac830356a61d68add9681bf71f9d87e93949d0fa03694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6a0b68966cb59b10db23d859b79029c432d1965f3dfd6f39bdfd8d26cd443a1799ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083012a3a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c5f8c3800a8307a12094000000000000000000000000000000000000010080b862000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000125a0339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dca07740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfbc0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x362212266c1003115fdb8b4bcac830356a61d68add9681bf71f9d87e93949d0f", + "transactionsTrie": "0x3694a67ebc59c1aecfe6ea88d2b01172a5f2465b78828fa1c7b22330f2046dc6", + "receiptTrie": "0xb68966cb59b10db23d859b79029c432d1965f3dfd6f39bdfd8d26cd443a1799a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x012a3a", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x945c8eeb422a011e02c4d2545caf7bd2908a310c4b3ff0de5e389f187543a3ad" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001", + "v": "0x25", + "r": "0x339a7aa9d4cccb4fe996f5af2dcc3d8a5044fbbf915ba61a73e09d4f5d38d9dc", + "s": "0x7740cf694659da051685696cac7ec25ef81bcff3352ff0c1d407c76ac30becfb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x945c8eeb422a011e02c4d2545caf7bd2908a310c4b3ff0de5e389f187543a3ad", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x037eae", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9459bc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-EIP-198-case1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9034cf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04c9fa76de6f379ad0e8eb575cf360157793ebc8f7aa7c14ae2abed2e203e9970a073c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11da06207fd2dc26145d69ef1cc4ddc2497a9c29c0bf210dc6d3a6e39474e08d5ede1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083014a548203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90105f90102800a8307a12094000000000000000000000000000000000000010080b8a100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f26a05a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643a05f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398ec0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4c9fa76de6f379ad0e8eb575cf360157793ebc8f7aa7c14ae2abed2e203e9970", + "transactionsTrie": "0x73c5f0e0e0cbca1b7a368b889759cd114e7969df5ed0d345f2005321fbd0a11d", + "receiptTrie": "0x6207fd2dc26145d69ef1cc4ddc2497a9c29c0bf210dc6d3a6e39474e08d5ede1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a54", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2273f7850ecb59325d79f93b922acb056c39d1845522f8af7965800b583785ed" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002003fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x26", + "r": "0x5a5add3fa65cb51e89a0f0e21ae531c494917548c770ebd35a680d9d85e27643", + "s": "0x5f88a464566c00f5fdd4a992d2463994167a7309893f0184825ac3fcf285398e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x2273f7850ecb59325d79f93b922acb056c39d1845522f8af7965800b583785ed", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03defc", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000001", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9318b8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-EIP-198-case2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9034bf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa036839bfd2f2a09a9c4c573e97a938b18cdb8273d25b6ae2a9d04a163df72d481a0aafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3aa0830142102030183542c952a4d76dd32f2049135336d0facdde27bcc5e8ced540b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083014a328203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f25a04f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1a043f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x36839bfd2f2a09a9c4c573e97a938b18cdb8273d25b6ae2a9d04a163df72d481", + "transactionsTrie": "0xaafe3539b5f2673e62cf8cc401bb3ccb65069adbdb80e29332650b1d10623d3a", + "receiptTrie": "0x830142102030183542c952a4d76dd32f2049135336d0facdde27bcc5e8ced540", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014a32", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x99a6b83873fa8ab28c7f827c1e620810bafa3490e1c1ee64dbf853588ce9b25d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "v": "0x25", + "r": "0x4f729d8d14760e9057bea70dabd1f5f14a7b85e6233d4a807385dd4fa33748e1", + "s": "0x43f5a1ae71e61b46c50e2b60d649822ce7c12137cf99ae2e87a59c86f447dc35", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x99a6b83873fa8ab28c7f827c1e620810bafa3490e1c1ee64dbf853588ce9b25d", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03de96", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x0000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de931a0c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-EIP-198-case3-raw-input-out-of-gas]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9034bf9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bedad6af879c4b5a471db8761f6f61503080f073414711e0add9b07f11e149efa0705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079ca0ef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008307a1208203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90104f90101800a8307a12094000000000000000000000000000000000000010080b8a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd26a0b67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121a04785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbedad6af879c4b5a471db8761f6f61503080f073414711e0add9b07f11e149ef", + "transactionsTrie": "0x705a40a0ab5d38e150cf6a2cb9180be6e8417ba4fe7200c8714bad708652079c", + "receiptTrie": "0xef5acf2411585fefc7a70d402085e2a1c41bd5b5f14bb092984df8c2563e0545", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x07a120", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4a8cbfc0e585a0d989e91ded21714c9b441673dd3e883e3006b5f331b1e4b4c2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "v": "0x26", + "r": "0xb67a35a10327991934b720fc3ed7b79e27e7741427d36a26b984baa139e2a121", + "s": "0x4785d6cc3b90c4cda7d398fcd3943e89e00a5093d59e810d6a21d30522b96873", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4a8cbfc0e585a0d989e91ded21714c9b441673dd3e883e3006b5f331b1e4b4c2", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x16e360", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de53b4c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-EIP-198-case4-extra-data_07]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9032df9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0626d693cddf58993de0eda99303fe733170eb294ca0a4b9b2b85aa5c3ffb4c0ba0ef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2a042f64e59c0ff3f3fad15e481713888772af37d7d8e594ce7c8c8d58316ba6f4db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830142828203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8e7f8e5800a8307a12094000000000000000000000000000000000000010080b88400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80000000000000000000000000000000000000000000000000000000000000000725a0f0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9a07c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x626d693cddf58993de0eda99303fe733170eb294ca0a4b9b2b85aa5c3ffb4c0b", + "transactionsTrie": "0xef7f77fb685cb4c8bdb4db18cdcd29f83527b0baf3013b9d8ac3e4d412f88be2", + "receiptTrie": "0x42f64e59c0ff3f3fad15e481713888772af37d7d8e594ce7c8c8d58316ba6f4d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x014282", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc711dfd6cf0f462aa4a73529fb502220ff24c807f715a5dd245160c6427fcd57" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff800000000000000000000000000000000000000000000000000000000000000007", + "v": "0x25", + "r": "0xf0700674ed96ae5374246af89d12df5e0bb83740b2982fa8aba3c8267c0c02e9", + "s": "0x7c728d1ff30be97c7709cce8a04855591964aa02ebc7a129338567da6f585f81", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc711dfd6cf0f462aa4a73529fb502220ff24c807f715a5dd245160c6427fcd57", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03c786", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de9366ec", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/byzantium/eip198_modexp_precompile/test_modexp.py::test_modexp[fork_Cancun-blockchain_test-EIP-198-case5-raw-input]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md", + "reference-spec-version": "9e393a79d9937f579acbdcb234a67869259d5a96" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xecafc6db31900e0568197a5cb2c174fca48af70e2e58d059e5e017aa1dca9031", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8" + }, + "blocks": [ + { + "rlp": "0xf9030df9023fa096810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05c1a6aa8854ecc4bb198cf31d89feabc73dc87992c0976e3f5c8c7a77f9fb428a0e13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2a076ea67d80b39fa6fcb90638155c68c0177cf0d5fe35ff6853f6778b5952cf699b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830141f08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8c7f8c5800a8307a12094000000000000000000000000000000000000010080b86400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff8025a05b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549a01ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086c0c0", + "blockHeader": { + "parentHash": "0x96810f94a999c82c4d1f4ad646391802f5ab29f3f275d4f1c9ec250f182ca4d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5c1a6aa8854ecc4bb198cf31d89feabc73dc87992c0976e3f5c8c7a77f9fb428", + "transactionsTrie": "0xe13163df9c2bb54b4aa60f9f30acdbc3a448b55e5fefed238c2380222152f4a2", + "receiptTrie": "0x76ea67d80b39fa6fcb90638155c68c0177cf0d5fe35ff6853f6778b5952cf699", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0141f0", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x506e51c09195fb698cded193f7e86a366180d1bf264a121a8cbdf4ed70a7c1b4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002003ffff80", + "v": "0x25", + "r": "0x5b6d8991181ed06ca23e8d0abedf422ef67bf0d0db2c627278ad16b441807549", + "s": "0x1ce2b850b668e1cebcbc4eed9115b06785993039320db1e278250452a07c0086", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x506e51c09195fb698cded193f7e86a366180d1bf264a121a8cbdf4ed70a7c1b4", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x36600060003760006000366000600060055af16000557f601038036010600039601038036000f3000000000000000000000000000000006000523d600060103e3d60100160006000f000", + "storage": { + "0x00": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03c5d0", + "code": "0x", + "storage": {} + }, + "0xa7f2bd73a7138a2dec709484ad9c3542d7bc7534": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de936ca0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/gas_usage.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/gas_usage.json index 8948348c581..a6b1ae36b3c 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/gas_usage.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/gas_usage.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tload": { + "tests/cancun/eip1153_tstore/test_tstorage.py::test_gas_usage[fork_Cancun-blockchain_test-tload]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3d9cad55bf2ff8e3e4712c080301b0f074e9e139b953e2d1db1e93d085d65090" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -129,9 +131,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tstore_tload": { + "tests/cancun/eip1153_tstore/test_tstorage.py::test_gas_usage[fork_Cancun-blockchain_test-tstore_tload]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -186,6 +189,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x02900c9ff38d91789083db1f88090887b40cc3d1033a89bad4b2cedce882fbe8" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -259,9 +263,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-tstore_cold": { + "tests/cancun/eip1153_tstore/test_tstorage.py::test_gas_usage[fork_Cancun-blockchain_test-tstore_cold]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -316,6 +321,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe673355caefee60d1f379961ac9fe80956a66eedc5b8754c6f5ec4a1577183a2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -389,9 +395,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-tstore_warm": { + "tests/cancun/eip1153_tstore/test_tstorage.py::test_gas_usage[fork_Cancun-blockchain_test-tstore_warm]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -446,6 +453,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5bc07f1e1f728f4b566422c92356ecf3b02a47943d63ec2ab9e412a4d7d2b23c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/run_until_out_of_gas.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/run_until_out_of_gas.json new file mode 100644 index 00000000000..0c986082724 --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/run_until_out_of_gas.json @@ -0,0 +1,392 @@ +{ + "tests/cancun/eip1153_tstore/test_tstorage.py::test_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", + "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a053de46b651a7589083541ce724dad34e026b920bc42dc9ab9413de25bbd8fac9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x53de46b651a7589083541ce724dad34e026b920bc42dc9ab9413de25bbd8fac9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc2c58bb06146fa57fc0b2bc7dfaa2030d6892472a5d4d5f3143ccb0d0f9c8c9a" + }, + "blocks": [ + { + "rlp": "0xf902aaf90240a0c2c58bb06146fa57fc0b2bc7dfaa2030d6892472a5d4d5f3143ccb0d0f9c8c9aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa054e44b22bb3284243cbb2f0236b57bd157064f25cd9e9123caf30ee9d2941ccea05f0ddbeed02a80a9eb4d937e5f34010f5f8df4a46ef3ee0b27999001baf446d5a046c8878e80643aac6e528fdaf76907eadd5bfa815dd5f87a027eab6c7ff94629b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008401c9c3808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f863f861800a8401c9c380940000000000000000000000000000000000000100808025a0bc0a82d0b39c47b51e047f1b82e29be5437ade2f9f6e459621870eb23bc8b5c7a05ebb6210b5a0d45b0c904b5cb42df1028edeeef50c50286dbed7703cb16ddfa0c0c0", + "blockHeader": { + "parentHash": "0xc2c58bb06146fa57fc0b2bc7dfaa2030d6892472a5d4d5f3143ccb0d0f9c8c9a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x54e44b22bb3284243cbb2f0236b57bd157064f25cd9e9123caf30ee9d2941cce", + "transactionsTrie": "0x5f0ddbeed02a80a9eb4d937e5f34010f5f8df4a46ef3ee0b27999001baf446d5", + "receiptTrie": "0x46c8878e80643aac6e528fdaf76907eadd5bfa815dd5f87a027eab6c7ff94629", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01c9c380", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1b743c94fc0d2aeffa09ec5ff2bc319b18b7bfd77a0247af96e1123543037d93" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x01c9c380", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x25", + "r": "0xbc0a82d0b39c47b51e047f1b82e29be5437ade2f9f6e459621870eb23bc8b5c7", + "s": "0x5ebb6210b5a0d45b0c904b5cb42df1028edeeef50c50286dbed7703cb16ddfa0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1b743c94fc0d2aeffa09ec5ff2bc319b18b7bfd77a0247af96e1123543037d93", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x5b5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5f56", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x09184e72a000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x5b5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5a5a5d5f56", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x055d4a80", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x09183c90fd00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip1153_tstore/test_tstorage.py::test_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore_wide_address_space]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", + "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e75016013dae1ef94381d6e11dad0a7985b42810d0500fe463d1bf5787147bcfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe75016013dae1ef94381d6e11dad0a7985b42810d0500fe463d1bf5787147bcf", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd18197d3a1f476bc9d0f6faf9712250ba4fa130c21cfd40f32a9ecce7e8f8eaa" + }, + "blocks": [ + { + "rlp": "0xf902aaf90240a0d18197d3a1f476bc9d0f6faf9712250ba4fa130c21cfd40f32a9ecce7e8f8eaaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03ee58644f725ebf805e645ea104df7af25579b0d4e3f7e2df4232bea39ea5209a05f0ddbeed02a80a9eb4d937e5f34010f5f8df4a46ef3ee0b27999001baf446d5a046c8878e80643aac6e528fdaf76907eadd5bfa815dd5f87a027eab6c7ff94629b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008401c9c3808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f863f861800a8401c9c380940000000000000000000000000000000000000100808025a0bc0a82d0b39c47b51e047f1b82e29be5437ade2f9f6e459621870eb23bc8b5c7a05ebb6210b5a0d45b0c904b5cb42df1028edeeef50c50286dbed7703cb16ddfa0c0c0", + "blockHeader": { + "parentHash": "0xd18197d3a1f476bc9d0f6faf9712250ba4fa130c21cfd40f32a9ecce7e8f8eaa", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3ee58644f725ebf805e645ea104df7af25579b0d4e3f7e2df4232bea39ea5209", + "transactionsTrie": "0x5f0ddbeed02a80a9eb4d937e5f34010f5f8df4a46ef3ee0b27999001baf446d5", + "receiptTrie": "0x46c8878e80643aac6e528fdaf76907eadd5bfa815dd5f87a027eab6c7ff94629", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01c9c380", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xafe23b614d6cb2c01b32ac1521ca388c23ea98069ee68eb4f47fd3aecc9d68f3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x01c9c380", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x25", + "r": "0xbc0a82d0b39c47b51e047f1b82e29be5437ade2f9f6e459621870eb23bc8b5c7", + "s": "0x5ebb6210b5a0d45b0c904b5cb42df1028edeeef50c50286dbed7703cb16ddfa0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xafe23b614d6cb2c01b32ac1521ca388c23ea98069ee68eb4f47fd3aecc9d68f3", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x5b5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5f56", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x09184e72a000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x5b5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5a5a6001581b015d5f56", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x055d4a80", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x09183c90fd00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip1153_tstore/test_tstorage.py::test_run_until_out_of_gas[fork_Cancun-blockchain_test-tstore_tload]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", + "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06119ececdffb6bd90d7cd1953e9dbed6f4aa261128c966ef3231cf95c808f52fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6119ececdffb6bd90d7cd1953e9dbed6f4aa261128c966ef3231cf95c808f52f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4ab2c4515ba6a2633dd0cf93d1e29031cc0dd74be72d2ef4188ed1482ac6ac6f" + }, + "blocks": [ + { + "rlp": "0xf902aaf90240a04ab2c4515ba6a2633dd0cf93d1e29031cc0dd74be72d2ef4188ed1482ac6ac6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa073cdaf2f9b0a6b2ac4fdf818151585e25f0707ac7c124b945f6f8d4e6bd6971da05f0ddbeed02a80a9eb4d937e5f34010f5f8df4a46ef3ee0b27999001baf446d5a046c8878e80643aac6e528fdaf76907eadd5bfa815dd5f87a027eab6c7ff94629b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008401c9c3808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f863f861800a8401c9c380940000000000000000000000000000000000000100808025a0bc0a82d0b39c47b51e047f1b82e29be5437ade2f9f6e459621870eb23bc8b5c7a05ebb6210b5a0d45b0c904b5cb42df1028edeeef50c50286dbed7703cb16ddfa0c0c0", + "blockHeader": { + "parentHash": "0x4ab2c4515ba6a2633dd0cf93d1e29031cc0dd74be72d2ef4188ed1482ac6ac6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x73cdaf2f9b0a6b2ac4fdf818151585e25f0707ac7c124b945f6f8d4e6bd6971d", + "transactionsTrie": "0x5f0ddbeed02a80a9eb4d937e5f34010f5f8df4a46ef3ee0b27999001baf446d5", + "receiptTrie": "0x46c8878e80643aac6e528fdaf76907eadd5bfa815dd5f87a027eab6c7ff94629", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01c9c380", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf38da236823811231c9dd78f14cc32e13556e1aeab5bb82f0cee25684a09337e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x01c9c380", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x25", + "r": "0xbc0a82d0b39c47b51e047f1b82e29be5437ade2f9f6e459621870eb23bc8b5c7", + "s": "0x5ebb6210b5a0d45b0c904b5cb42df1028edeeef50c50286dbed7703cb16ddfa0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf38da236823811231c9dd78f14cc32e13556e1aeab5bb82f0cee25684a09337e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x5b5a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505f56", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x09184e72a000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x5b5a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505a80805d5c505f56", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x055d4a80", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x09183c90fd00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_sstore.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_sstore.json index 875a9fc7386..b1ccc3a778f 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_sstore.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_sstore.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun": { + "tests/cancun/eip1153_tstore/test_tstorage.py::test_tload_after_sstore[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6b7058143d59c7522d93d7899425c2db7764528b4de7e30aad5cafa1210d6b12" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_tstore.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_tstore.json index 2df3e16f22b..fbeb10075d4 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_tstore.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_tstore.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun": { + "tests/cancun/eip1153_tstore/test_tstorage.py::test_tload_after_tstore[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdebb9f3cbc615c1c07f42808dccc1afd4296646706c974c5cf15fd94d2ce69d0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_tstore_is_zero.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_tstore_is_zero.json index b6acd339d49..df7fc3de769 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_tstore_is_zero.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/tload_after_tstore_is_zero.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun": { + "tests/cancun/eip1153_tstore/test_tstorage.py::test_tload_after_tstore_is_zero[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x19518e5f0bd46498a0f8a71d306311b14d9738f34e834744e2fb6d1621dc676a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/transient_storage_unset_values.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/transient_storage_unset_values.json index 8c19ec02467..ec980583be3 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/transient_storage_unset_values.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage/transient_storage_unset_values.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun": { + "tests/cancun/eip1153_tstore/test_tstorage.py::test_transient_storage_unset_values[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x994147b8add2809cd0765cb584dfea3b0b5378f80c860115869fe6c0daa9f292" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_create_contexts/contract_creation.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_create_contexts/contract_creation.json index ad4d26f8689..4d366a5dec1 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_create_contexts/contract_creation.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_create_contexts/contract_creation.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-only_constructor_code-create": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-only_constructor_code-create]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdbe1c760e6c7b79b79bb46a8a1f3e23974914522b6ffa8129a07a0028eabc9fd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -140,9 +142,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-only_constructor_code-create2": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-only_constructor_code-create2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -197,6 +200,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x45f8778d753b2dd92a583a8e56e204413d042bc6904aef9e9ddeedfa1fd96838" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -281,9 +285,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-in_constructor_and_deployed_code-create": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-in_constructor_and_deployed_code-create]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -338,6 +343,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x90fd2aa0c1ec12945b1acc54be896f37c22727c595f74b6ba48a718e24ec1536" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -422,9 +428,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-in_constructor_and_deployed_code-create2": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-in_constructor_and_deployed_code-create2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -479,6 +486,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x37861891580d47048a182a545e9160c0708e8ca9025bcc14d667fa4b86c732ca" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -563,9 +571,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-across_constructor_and_deployed_code_v0-create": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-across_constructor_and_deployed_code_v0-create]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -620,6 +629,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x74e215dc9d42ca7281cb5538d43b711a1a6303ce7324a77678f15a7435638f68" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -705,9 +715,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-across_constructor_and_deployed_code_v0-create2": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-across_constructor_and_deployed_code_v0-create2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -762,6 +773,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x27b9bfd4f6353df31a40505646d2e2ef27df2cf38005e6b68cef4feb46055c25" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -847,9 +859,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-across_constructor_and_deployed_code_v1-create": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-across_constructor_and_deployed_code_v1-create]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -904,6 +917,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa3cf8a8c25f27a6aec1c1169f0d8d3afd77bd2537dec7d769498d14db27ff2d6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -990,9 +1004,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-across_constructor_and_deployed_code_v1-create2": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-across_constructor_and_deployed_code_v1-create2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1047,6 +1062,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x50e9079fbcae8627d9d067560c3d0c860564a81e4b66911a3e09e30b54b20a55" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1133,9 +1149,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-no_constructor_code-create": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-no_constructor_code-create]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1190,6 +1207,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xfe6c348fb7bd4fa2208b1a19cd0e3539487d855bba739ea0ed674b51b64c4c67" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1274,9 +1292,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-no_constructor_code-create2": { + "tests/cancun/eip1153_tstore/test_tstorage_create_contexts.py::TestTransientStorageInContractCreation::test_contract_creation[fork_Cancun-blockchain_test-no_constructor_code-create2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1331,6 +1350,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x63816095d73a8e3f2e884a205b799af5d371d344cc550bdb883483174bc2de14" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_execution_contexts/subcall.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_execution_contexts/subcall.json index 2e98e1947ae..ad6278a4f74 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_execution_contexts/subcall.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_execution_contexts/subcall.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-call": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb3524aa4ed79ff4e5d324f60eb5da3ce37953abf619bb0d8e1a1ed3f21ea34f1" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -144,9 +146,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-staticcall_cant_call_tstore": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-staticcall_cant_call_tstore]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -201,6 +204,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf759f394c6b8f00655e5134afd600bc27d24f9f5df8cc913dceb3d7633559c68" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -286,9 +290,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-staticcall_cant_call_tstore_with_stack_underflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-staticcall_cant_call_tstore_with_stack_underflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -343,6 +348,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa75b5b6f7c1811234b34a9049c32d559e2f2043afe25da30da0cb8e7bdc067bd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -428,9 +434,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-staticcalled_context_can_call_tload": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-staticcalled_context_can_call_tload]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -485,6 +492,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x99e4672e700496cadbe233a0e7a4d91cbd3d5079f078d0d3ecbef8c33f508366" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -571,9 +579,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-callcode": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -628,6 +637,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x37523918a2a192655f6a41a4514851f37db7b88c88f99ef049a55f42c488c35a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -717,9 +727,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-delegatecall": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -774,6 +785,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x634279ef601f6fb0f6d62d4a5015defce461c933aa1664b4c663a40933b4ccf0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -863,9 +875,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-call_with_revert": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call_with_revert]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -920,6 +933,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd1c12133043c336890042acdff22270a144ec2ccc64d623995dc4a4ecec6855c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1006,9 +1020,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-call_with_invalid": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call_with_invalid]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1063,6 +1078,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1d9ae06a5070047a0b625c9d84c059b8bb44157b26368958a8019777b270719f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1149,9 +1165,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-call_with_stack_overflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call_with_stack_overflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1206,6 +1223,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xae88799e19a689240b23a8a8fef4dad841d0da80991e5c1dccb40e9826d10f9b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1292,9 +1310,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-call_with_tstore_stack_underflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call_with_tstore_stack_underflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1349,6 +1368,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x43baccbb8c0d768ef28c8d946a0a55dceffc2a8e58d3046ba9d0e673e2f6f838" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1435,9 +1455,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-call_with_tstore_stack_underflow_2": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call_with_tstore_stack_underflow_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1492,6 +1513,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa70d520e4e9769e7fb145597099ba90802976d584772327d971e415df934853e" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1578,9 +1600,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-call_with_tload_stack_underflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call_with_tload_stack_underflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1635,6 +1658,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x74c94770359491a0b2bdf65f415b88a4cb5d4ae9576f074f3d7a19283231ce34" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1721,9 +1745,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-call_with_out_of_gas": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call_with_out_of_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1778,6 +1803,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf85d2122bbb832498c3e9b3b140ef97227a847c60c89510e9112d92703103d6d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1864,9 +1890,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-call_with_out_of_gas_2": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-call_with_out_of_gas_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1921,6 +1948,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5e78e1c50afd939b06192b3bb9d10580c85753ee8571f68b18e9ffc6598454a6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2007,9 +2035,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-callcode_with_revert": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode_with_revert]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -2064,6 +2093,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x98dfc12495cfe79205236d05c474096d7d0c1f7ba42540ef6bc5636a741423c7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2150,9 +2180,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-callcode_with_invalid": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode_with_invalid]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -2207,6 +2238,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xfc47561b283397446719f3b54663fb072fec6792b989ac90e55cb1e544e7e736" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2293,9 +2325,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-callcode_with_stack_overflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode_with_stack_overflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -2350,6 +2383,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x70f43159b619449ee227a47f99656cda05443d56b5e4720aa64880cac1af51a6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2436,9 +2470,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-callcode_with_tstore_stack_underflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode_with_tstore_stack_underflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -2493,6 +2528,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xacba3b3bcd7985f8a98d7dbaba82f0b6a17bc4801392ad4847249b297457d677" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2579,9 +2615,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-callcode_with_tstore_stack_underflow_2": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode_with_tstore_stack_underflow_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -2636,6 +2673,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5c19503a0716a8ac76da9ad31c614bbd3dd74fee862e692423c17eda98c58022" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2722,9 +2760,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-callcode_with_tload_stack_underflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode_with_tload_stack_underflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -2779,6 +2818,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8e95bc88bb1ec762c508fd1679676b739fca0bdace3059aad66d541bfaa9d153" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2865,9 +2905,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-callcode_with_out_of_gas": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode_with_out_of_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -2922,6 +2963,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8291c44b19d37d5eba0dfadf3b2a6afef0c8bd1927cf20de2b00ef951e611dd9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3008,9 +3050,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-callcode_with_out_of_gas_2": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-callcode_with_out_of_gas_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -3065,6 +3108,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x82fcd3858f0bc4e662b7d3438fa736f7bfba59003df8594e5b32fd32c8b6173c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3151,9 +3195,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-delegatecall_with_revert": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall_with_revert]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -3208,6 +3253,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2b701e2c663972fca8913a16bf21096b90e2229426a94f9286ef997f9cb7c133" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3294,9 +3340,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-delegatecall_with_invalid": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall_with_invalid]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -3351,6 +3398,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6553d05ca4356cf866f132b28258c4ab9ba1cb7418b956199770a7c6eb24584f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3437,9 +3485,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-delegatecall_with_stack_overflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall_with_stack_overflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -3494,6 +3543,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdedc9a705b04432e903b1127bfcb4f113a44f1f6366dc8a8ebb08ad292edb8a4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3580,9 +3630,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-delegatecall_with_tstore_stack_underflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall_with_tstore_stack_underflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -3637,6 +3688,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd45f05d5ef0f14ccc8c69fc0df314cd06a497c2830d0587f878d4001c72e4960" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3723,9 +3775,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-delegatecall_with_tstore_stack_underflow_2": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall_with_tstore_stack_underflow_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -3780,6 +3833,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf86da969c781ddb84fa18936c8ffc553aad0f4f7b620dc4b0beb1ae3be47ad78" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3866,9 +3920,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-delegatecall_with_tload_stack_underflow": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall_with_tload_stack_underflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -3923,6 +3978,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xfcb3517b1c5bfa2f8491fa74cc46cf1547316ee0030c802d8c92d2a4769e3df4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4009,9 +4065,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-delegatecall_with_out_of_gas": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall_with_out_of_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -4066,6 +4123,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x73f5c885e103a8fc2d447c87998fa002e28236b30abbba2b45582a0f2f0b58bb" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4152,9 +4210,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-delegatecall_with_out_of_gas_2": { + "tests/cancun/eip1153_tstore/test_tstorage_execution_contexts.py::test_subcall[fork_Cancun-blockchain_test-delegatecall_with_out_of_gas_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -4209,6 +4268,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7f8a04cf2aa0b99bb574e4b4aa482596995ec6731b4925a78520190d63c4f034" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_reentrancy_contexts/reentrant_call.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_reentrancy_contexts/reentrant_call.json index 983c53f96ba..bb88a4b6b24 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_reentrancy_contexts/reentrant_call.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_reentrancy_contexts/reentrant_call.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tstore_in_reentrant_call": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-tstore_in_reentrant_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7d4842ff2a13e6bc7af9d876c8b318c5d408aff3bdd244ba20f932d74ac2682f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -131,9 +133,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tload_after_reentrant_tstore": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-tload_after_reentrant_tstore]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -188,6 +191,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1ee6df803d47822f5782ecc6719e3bd753f9c5deddca37f8846f8d8648baba89" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -263,9 +267,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-manipulate_in_reentrant_call": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-manipulate_in_reentrant_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -320,6 +325,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x12d30410fa91c63e53faae67143628f6d2d0f9ad970869ae07e6ace5d5ad2847" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -396,9 +402,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-tstore_in_call_then_tload_return_in_staticcall": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-tstore_in_call_then_tload_return_in_staticcall]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -453,6 +460,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd728669700e1ae582035f8d68fe47db74a50167a1d341d07afe1af5f07a0c7a3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -530,9 +538,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-tstore_before_revert_has_no_effect": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-tstore_before_revert_has_no_effect]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -587,6 +596,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x808d6bc196f44c981dca000f3c8949748885c7077565f51b29e99d2702cef1d2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -661,9 +671,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-revert_undoes_all": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-revert_undoes_all]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -718,6 +729,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa80e5a325f856357eeab179d87f598e2c1e1273d4c0c05844489022e0cb8e917" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -792,9 +804,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-revert_undoes_tstorage_after_successful_call": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-revert_undoes_tstorage_after_successful_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -849,6 +862,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xbccba566e5911d1a759d85b09ebb3e5aee2bb93d143ad55f659210c65d567525" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -924,9 +938,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-tstore_before_invalid_has_no_effect": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-tstore_before_invalid_has_no_effect]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -981,6 +996,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa98f863da57b35991c6da2847f8711a89693a11fae2436ecbb8a644c85b234ee" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1055,9 +1071,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-invalid_undoes_all": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-invalid_undoes_all]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1112,6 +1129,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x62261ae68f571a7de44f4768164f1221e6f8ed0452f0cb68ecd5f7483b32e639" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1186,9 +1204,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-invalid_undoes_tstorage_after_successful_call": { + "tests/cancun/eip1153_tstore/test_tstorage_reentrancy_contexts.py::test_reentrant_call[fork_Cancun-blockchain_test-invalid_undoes_tstorage_after_successful_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -1243,6 +1262,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x24fcb017f7ab54d0575d76e5f5ccafd3df05322bd523c5795fcc99a5bd63d08a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_selfdestruct/reentrant_selfdestructing_call.json b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_selfdestruct/reentrant_selfdestructing_call.json index 5f2f0c50c65..ef782f2c49c 100644 --- a/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_selfdestruct/reentrant_selfdestructing_call.json +++ b/tests/execution-spec-tests/cancun/eip1153_tstore/tstorage_selfdestruct/reentrant_selfdestructing_call.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tload_after_selfdestruct_pre_existing_contract": { + "tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py::test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_selfdestruct_pre_existing_contract]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb89650405fc49dcdaf8b4326bdebc355463de41dbb117963ea7bd00084c66961" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -155,9 +157,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tload_after_selfdestruct_new_contract": { + "tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py::test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_selfdestruct_new_contract]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -212,6 +215,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa64a6f14e40ab995914f8e2df165f21eed92194227535aeb8b65731439078bc9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -300,9 +304,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-tload_after_inner_selfdestruct_pre_existing_contract": { + "tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py::test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_inner_selfdestruct_pre_existing_contract]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -357,6 +362,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0e54772b5aca3aac1e2d28efbabfb008e1bf6fe61f5ba1f0fe27bd7de6212357" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -455,9 +461,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-tload_after_inner_selfdestruct_new_contract": { + "tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py::test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tload_after_inner_selfdestruct_new_contract]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -512,6 +519,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x90191244bf2ef96cf176b9042f1f361d512a272b8c9f251a81bac365aa515dc3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -599,9 +607,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-tstore_after_selfdestruct_pre_existing_contract": { + "tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py::test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tstore_after_selfdestruct_pre_existing_contract]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -656,6 +665,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6752d6c9475a40178dbca16af289cf2302a02068bbe870497d6956ba63790056" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -756,9 +766,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-tstore_after_selfdestruct_new_contract": { + "tests/cancun/eip1153_tstore/test_tstorage_selfdestruct.py::test_reentrant_selfdestructing_call[fork_Cancun-blockchain_test-tstore_after_selfdestruct_new_contract]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1153.md", "reference-spec-version": "6f0be621c76a05a7b3aaf0e9297afd425c26e9d0" }, @@ -813,6 +824,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0107a7c254a09d03864b51c612b227ef4087845740c94e2f3d653a99099a80f2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_contract_calls.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_contract_calls.json index 5099a8041cb..01572bf22d7 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_contract_calls.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_contract_calls.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-call_type=CALL-call_value=1-valid_input=True-call_gas=100000-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_100000-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xb0dc0bf32376f1c6f21437dc1beb707f23cd7b1c1c075c9b50f9156b45d1a7a7" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -129,9 +131,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-call_type=CALL-call_value=1-valid_input=True-call_gas=100001-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_1-valid_input_True-call_gas_100001-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -186,6 +189,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xd0d0c8535aa874abf2d3170a013a36af50e0415f5266c31e46bde2d97c80fadd" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -259,9 +263,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-call_type=CALL-call_value=0-valid_input=True-call_gas=100000-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -316,6 +321,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x86d060ef46bbd6106da3b588ab260b1c0c599b891e6825422f4b1e2796425197" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -389,9 +395,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-call_type=CALL-call_value=0-valid_input=True-call_gas=100001-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALL-call_value_0-valid_input_True-call_gas_100001-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -446,6 +453,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x2bdb6d719a39d4f0081fe0542c303939dedf883ba81b3186a81a061e5f3900ba" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -519,9 +527,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-call_type=CALLCODE-call_value=0-valid_input=False-call_gas=100000-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100000-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -576,6 +585,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x54a84d294db3f6925679b4b3a6d4f62cc5ad722ef1d0649e287fa9b6050a53a6" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -644,9 +654,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-call_type=CALLCODE-call_value=0-valid_input=False-call_gas=100001-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_100001-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -701,6 +712,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x83ab625900a21aeb58d0bfbeb8610ff4d623e533f798343d9da49da1669221cc" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -769,9 +781,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-call_type=CALLCODE-call_value=0-valid_input=False-call_gas=99999-valid_call=False": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_CALLCODE-call_value_0-valid_input_False-call_gas_99999-valid_call_False]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -826,6 +839,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x641620be0e42461dc53d1f05ae9109db673e6d2be9d1452d15d2e96d8b3c1779" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -894,9 +908,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-call_type=DELEGATECALL-call_value=0-valid_input=False-call_gas=100000-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100000-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -951,6 +966,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xadf391cb208f7b34200e3a99e5d7820777401e872ddbd725de536d573b7732e9" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1019,9 +1035,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-call_type=DELEGATECALL-call_value=0-valid_input=False-call_gas=100001-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_100001-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1076,6 +1093,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x0111a33c4aefcf45cfec22e15e871f91c3d040243a4cc9f4fdc8e62325928208" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1144,9 +1162,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-call_type=DELEGATECALL-call_value=0-valid_input=False-call_gas=99999-valid_call=False": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_DELEGATECALL-call_value_0-valid_input_False-call_gas_99999-valid_call_False]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1201,6 +1220,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x90d06599e701728a799bd3a53087d1b86aeb7d48b283dc9472b67475cdceb3b8" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1269,9 +1289,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-call_type=STATICCALL-call_value=0-valid_input=True-call_gas=100000-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100000-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1326,6 +1347,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x0d791faa442203d9c4116b3b4bc78dd43dc19d3225c632b27accf12d43731266" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1399,9 +1421,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-call_type=STATICCALL-call_value=0-valid_input=True-call_gas=100001-valid_call=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_calls[fork_Cancun-blockchain_test-call_type_STATICCALL-call_value_0-valid_input_True-call_gas_100001-valid_call_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1456,6 +1479,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x14426998d820009456a6d0a6903763c771a1fc73503e8ae66d2df7c2f8ae0816" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_contract_timestamps.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_contract_timestamps.json index 9debe5ffa1a..3c4d8171c3f 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_contract_timestamps.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_contract_timestamps.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-empty_system_address-auto_access_list=False-timestamp=12-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_12-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x86d060ef46bbd6106da3b588ab260b1c0c599b891e6825422f4b1e2796425197" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -129,9 +131,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-empty_system_address-auto_access_list=False-timestamp=4294967296-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -186,6 +189,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xeaeccbeb1574abf889bef98dde9865bc85342c7e269a6ed26693e43e6c1d3700" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -259,9 +263,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-empty_system_address-auto_access_list=False-timestamp=18446744073709551614-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -316,6 +321,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x40540df097ef704618b5f3753b1f6d170af9de5d6bbf576b3261ee35a61876d1" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -389,9 +395,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-empty_system_address-auto_access_list=False-timestamp=18446744073709551615-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -446,6 +453,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x7c13394b7683f005c8c919d88d033e2136905600db8c59e2c4423b3e132c700f" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -519,9 +527,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-empty_system_address-auto_access_list=True-timestamp=12-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_12-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -576,6 +585,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xeef3d8f92fee21fc1f6dd01eee3d4c1474b17d9b4bb0df0ff5f245b4606432ee" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -657,9 +667,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-empty_system_address-auto_access_list=True-timestamp=4294967296-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -714,6 +725,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xe913501aeb327a5b1bcff35767158117d6bb2932a22d7428ae782a08a04aabc2" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -795,9 +807,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-empty_system_address-auto_access_list=True-timestamp=18446744073709551614-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -852,6 +865,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x99c5f701ec4df326f75371ff3b560aacf3d1d3cc7b1f23f1464500c8a6a687e0" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -933,9 +947,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-empty_system_address-auto_access_list=True-timestamp=18446744073709551615-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-empty_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -990,6 +1005,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x6d44e71ca46272a1175f15a86b57894bdc9219bfc7dcebb640a2ed25204dbccc" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1071,9 +1087,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-one_wei_system_address-auto_access_list=False-timestamp=12-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_12-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1128,6 +1145,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xa0f50dad0f30b4511fc4a6132294a55b5d77e6b176106a9306cd99bd83ae2e9b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1213,9 +1231,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-one_wei_system_address-auto_access_list=False-timestamp=4294967296-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1270,6 +1289,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x1926d19906271584999ad53e2d65ca756ec6d89a9d66d5b953d9ad1e6b948d7a" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1355,9 +1375,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-one_wei_system_address-auto_access_list=False-timestamp=18446744073709551614-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1412,6 +1433,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x276edf735f37479a940c19822802d5ec82a23e4816d21ccb08c78db108b4508f" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1497,9 +1519,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-one_wei_system_address-auto_access_list=False-timestamp=18446744073709551615-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1554,6 +1577,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xad4174acf3a1c38284ee1fa6109afce80dc2d881f3e1b11e4e5ed5fe7aa8cac5" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1639,9 +1663,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-one_wei_system_address-auto_access_list=True-timestamp=12-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_12-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1696,6 +1721,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xee97b0fa3a597c37ae3d4443b52cbf295a3172361b2400ab5672e00e30684844" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1789,9 +1815,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-one_wei_system_address-auto_access_list=True-timestamp=4294967296-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1846,6 +1873,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x73ddf46ac2f303587e14337d7be9b34f2d2b49079edd346aef4c2324b7ccdb9a" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1939,9 +1967,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-one_wei_system_address-auto_access_list=True-timestamp=18446744073709551614-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1996,6 +2025,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xd85e9c0d3287cec819dcf5d57b6866e5bb8f5fbd0c3c4524a4ac231d4ccd14aa" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2089,9 +2119,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-one_wei_system_address-auto_access_list=True-timestamp=18446744073709551615-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_wei_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -2146,6 +2177,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x4017483dfdb827a6a26a0df82d43a125e75e79b78ae59a1c7a54ca79aac04dc3" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2239,9 +2271,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-one_eth_system_address-auto_access_list=False-timestamp=12-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_12-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -2296,6 +2329,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x12e528b4fbae57ef77d926798b639796f62781634136c2b42bd11983bf0c83dd" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2381,9 +2415,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-one_eth_system_address-auto_access_list=False-timestamp=4294967296-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_4294967296-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -2438,6 +2473,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x530e828849a089c41990c7361bd420f1210b3d8b650b363c4ee57260834ab87f" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2523,9 +2559,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-one_eth_system_address-auto_access_list=False-timestamp=18446744073709551614-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551614-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -2580,6 +2617,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x97aa56cbc9b2bc7c7f2e41978487b18bc7ff4c41de34d0a49241574dc04d3017" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2665,9 +2703,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-one_eth_system_address-auto_access_list=False-timestamp=18446744073709551615-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_False-timestamp_18446744073709551615-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -2722,6 +2761,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x6747ff60d30d9224a2da307d3451b52740258c66ba134beff0865d93b395c36b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2807,9 +2847,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-one_eth_system_address-auto_access_list=True-timestamp=12-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_12-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -2864,6 +2905,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x797e1c294c731ccd39485e9a23496adcd928939ff8a69b4c8aaef6395c0aefe9" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2957,9 +2999,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-one_eth_system_address-auto_access_list=True-timestamp=4294967296-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_4294967296-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -3014,6 +3057,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x3b499c81f487c91e94b1e61099c6f078ac2fff56c2ca523f29e7b1863749a35b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3107,9 +3151,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-one_eth_system_address-auto_access_list=True-timestamp=18446744073709551614-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551614-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -3164,6 +3209,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x2633444fe1ef1c4760c73b59c3b21ab363ae14be1d8969450a72ab9b7c344ccd" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3257,9 +3303,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-one_eth_system_address-auto_access_list=True-timestamp=18446744073709551615-valid_input=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_contract_timestamps[fork_Cancun-blockchain_test-one_eth_system_address-auto_access_list_True-timestamp_18446744073709551615-valid_input_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -3314,6 +3361,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x59a34d747984b5811cce38013d9c01723275e4218e813d416d9a398e327696ff" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_equal_to_timestamp.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_equal_to_timestamp.json index 635f3b36aef..ac7e190df00 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_equal_to_timestamp.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_equal_to_timestamp.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-auto_access_list=False-beacon_root=12-timestamp=12": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_12-timestamp_12]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x000000000000000000000000000000000000000000000000000000000000000c", "hash": "0x82116747e1e999bf71869d781036f112738528e87819a719d87b236f8fac92db" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -129,9 +131,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-auto_access_list=False-beacon_root=4294967296-timestamp=4294967296": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_4294967296-timestamp_4294967296]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -186,6 +189,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000100000000", "hash": "0x37e3a0203f2196fe4efb49e57747dedc6d4804a9bfbc41797b7bc79d6471a6ee" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -259,9 +263,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-auto_access_list=False-beacon_root=18446744073709551614-timestamp=18446744073709551614": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_18446744073709551614-timestamp_18446744073709551614]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -316,6 +321,7 @@ "parentBeaconBlockRoot": "0x000000000000000000000000000000000000000000000000fffffffffffffffe", "hash": "0xbba6eb370cfa95de01f215d8bec307f475c78b3694dec6ac7aff935880bdee18" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -389,9 +395,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-auto_access_list=False-beacon_root=18446744073709551615-timestamp=18446744073709551615": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_False-beacon_root_18446744073709551615-timestamp_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -446,6 +453,7 @@ "parentBeaconBlockRoot": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", "hash": "0x6b4d7322f01322b8c8b6332097b1223845cc5eb22de3df37e766f1ec810bf226" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -519,9 +527,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-auto_access_list=True-beacon_root=12-timestamp=12": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_12-timestamp_12]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -576,6 +585,7 @@ "parentBeaconBlockRoot": "0x000000000000000000000000000000000000000000000000000000000000000c", "hash": "0x1590f3b57e5e046561076252e843c6616269ac1a90e33321a9478a7792e50bd0" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -657,9 +667,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-auto_access_list=True-beacon_root=4294967296-timestamp=4294967296": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_4294967296-timestamp_4294967296]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -714,6 +725,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000100000000", "hash": "0x5c7d95e53e0368cb64474210aee624385bbda6cab80e2ffdff61964d01b91f2d" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -795,9 +807,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-auto_access_list=True-beacon_root=18446744073709551614-timestamp=18446744073709551614": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_18446744073709551614-timestamp_18446744073709551614]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -852,6 +865,7 @@ "parentBeaconBlockRoot": "0x000000000000000000000000000000000000000000000000fffffffffffffffe", "hash": "0xdba9ac3d291673783a2b13f1e3c48403fe2f4db72a44cc8df0e5a73de536b2e7" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -933,9 +947,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-auto_access_list=True-beacon_root=18446744073709551615-timestamp=18446744073709551615": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_equal_to_timestamp[fork_Cancun-blockchain_test-auto_access_list_True-beacon_root_18446744073709551615-timestamp_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -990,6 +1005,7 @@ "parentBeaconBlockRoot": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", "hash": "0x8ba66f027ebafaa894e5b4a23a2d95a38b1bd43e8b596bacdcbebbbe4f02dd79" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_selfdestruct.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_selfdestruct.json index ca66ec74c4f..b98833ba0b7 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_selfdestruct.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/beacon_root_selfdestruct.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-timestamp=12": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_beacon_root_selfdestruct[fork_Cancun-blockchain_test-timestamp_12]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -32,19 +33,19 @@ }, "blocks": [ { - "rlp": "0xf9032ef9023da0a844a8a3a4a6bd9e96b3fbd15edcb7736476545a2aa836ca2bc979d0dc5def49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06c7e1e96ce6ddab15474321dea7777e184bd552a8f18b9ebc7b601509961a358a040e926c859e0ca8af25e4557f959e67764c5c145036e976b04a819455ef89a1fa033253059422a10239de7e5b34d2e1ab8e0088adec948c590dedd5c3d6634abe3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830297f20c00a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a06c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100ff8eab88602f88301808007830f424094000000000000000000000000000000000000010080a0000000000000000000000000000000000000000000000000000000000000000cc080a09def14c251e6d0b857c40d13f8bd358608277d2c90cb2340ac4fe75cbe35f445a05cd757be2f85dd0560322bd54d04199a371c950a83e4706b7f8e2840dbdc01ebf860010a830186a09400000000000000000000000000000000000000cc808026a069e7a1c14bbf61b2c341e394ab0dfebb1fe65056d261079e54d98a901cc737aea016ff40fd5cd9e26647e0ddb7698f873f3df3cb57b6bcf8ca78773b764b74d690c0c0", + "rlp": "0xf902a5f9023ca0a844a8a3a4a6bd9e96b3fbd15edcb7736476545a2aa836ca2bc979d0dc5def49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08206ae25ed20b5f658d6d1930615161ebc3904c11f88ebb95a66917697fb3f89a04d6663825495d104e7f070bbc10499dfb274ca900190944012a86c76d13d829ca00f73e138b049ee79ec5e393c8b6aab99eaba82a90239eed2ee4f0923697d64deb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0b60c00a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a06c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100ff862f860800a830186a09400000000000000000000000000000000000000cc808026a0db42399e4a1e7e9734988e409e7afc0ed217480ddb02dea62c1c13a97abe967ba006d9ddf0873edffb2e6f2ee4bca6348b0d103e5b9c0e79e7894ccd90c134ac11c0c0", "blockHeader": { "parentHash": "0xa844a8a3a4a6bd9e96b3fbd15edcb7736476545a2aa836ca2bc979d0dc5def49", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6c7e1e96ce6ddab15474321dea7777e184bd552a8f18b9ebc7b601509961a358", - "transactionsTrie": "0x40e926c859e0ca8af25e4557f959e67764c5c145036e976b04a819455ef89a1f", - "receiptTrie": "0x33253059422a10239de7e5b34d2e1ab8e0088adec948c590dedd5c3d6634abe3", + "stateRoot": "0x8206ae25ed20b5f658d6d1930615161ebc3904c11f88ebb95a66917697fb3f89", + "transactionsTrie": "0x4d6663825495d104e7f070bbc10499dfb274ca900190944012a86c76d13d829c", + "receiptTrie": "0x0f73e138b049ee79ec5e393c8b6aab99eaba82a90239eed2ee4f0923697d64de", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x0297f2", + "gasUsed": "0xd0b6", "timestamp": "0x0c", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -54,37 +55,22 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", - "hash": "0xbdc97e5a88be2c879832be387bb91a84ae288ccdf24e5e00e2b3e9a6359eedad" + "hash": "0x3f56c63a3f6437c6f0e1b06100ecb57e06a5ee81fdd899a1241bd0c433e8286b" }, + "blocknumber": "1", "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x000000000000000000000000000000000000000000000000000000000000000c", - "accessList": [], - "v": "0x00", - "r": "0x9def14c251e6d0b857c40d13f8bd358608277d2c90cb2340ac4fe75cbe35f445", - "s": "0x5cd757be2f85dd0560322bd54d04199a371c950a83e4706b7f8e2840dbdc01eb", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, { "type": "0x00", "chainId": "0x01", - "nonce": "0x01", + "nonce": "0x00", "gasPrice": "0x0a", "gasLimit": "0x0186a0", "to": "0x00000000000000000000000000000000000000cc", "value": "0x00", "data": "0x", "v": "0x26", - "r": "0x69e7a1c14bbf61b2c341e394ab0dfebb1fe65056d261079e54d98a901cc737ae", - "s": "0x16ff40fd5cd9e26647e0ddb7698f873f3df3cb57b6bcf8ca78773b764b74d690", + "r": "0xdb42399e4a1e7e9734988e409e7afc0ed217480ddb02dea62c1c13a97abe967b", + "s": "0x06d9ddf0873edffb2e6f2ee4bca6348b0d103e5b9c0e79e7894ccd90c134ac11", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -92,7 +78,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xbdc97e5a88be2c879832be387bb91a84ae288ccdf24e5e00e2b3e9a6359eedad", + "lastblockhash": "0x3f56c63a3f6437c6f0e1b06100ecb57e06a5ee81fdd899a1241bd0c433e8286b", "pre": { "0x00000000000000000000000000000000000000cc": { "nonce": "0x00", @@ -138,12 +124,7 @@ "nonce": "0x00", "balance": "0x010000000000", "code": "0x366000602037602060003660206000720f3df6d732807ef1319fb7b8bb8522d0beac02620186a0f16000556000516001553d6002553d600060003e600051600355", - "storage": { - "0x00": "0x01", - "0x01": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", - "0x02": "0x20", - "0x03": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f" - } + "storage": {} }, "0x0000000000000000000000000000000000001337": { "nonce": "0x00", @@ -167,8 +148,8 @@ "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x02", - "balance": "0xffffeb6640", + "nonce": "0x01", + "balance": "0xfffff7d8e4", "code": "0x", "storage": {} } diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/calldata_lengths.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/calldata_lengths.json index 2266f06b8ff..d8982377000 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/calldata_lengths.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/calldata_lengths.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-timestamp=12-valid_call=False-valid_input=False-empty_calldata": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-empty_calldata]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xeb3d7ccb2c7108e286a0611e356e174d379ccb91072a36aef7de124e3af28700" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -124,9 +126,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-timestamp=12-valid_call=False-valid_input=False-one_byte": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-one_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -181,6 +184,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x49a6561b202af82d83d0904ee53a3ffc79529b95e34e2b46c428c8a18fee19fb" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -249,9 +253,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-timestamp=12-valid_call=False-valid_input=False-31_bytes": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-31_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -306,6 +311,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x5a728cc6cd4d87c3134cd91a13462766cac5172bef6ac5a44f8d2afcc86a0bb9" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -374,9 +380,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-timestamp=12-valid_call=False-valid_input=False-33_bytes": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -431,6 +438,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xa8c36ee14e7c025aa2e6f469771290d3fa2314dbbdae3c2e6f900854085cde3e" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -499,9 +507,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-timestamp=12-valid_call=False-valid_input=False-1024_bytes": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_calldata_lengths[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-1024_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -556,6 +565,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x27637f6645ed9085ac141705fe17c6fb3db10d4f2b5315fb6d01167a636e374c" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/invalid_beacon_root_calldata_value.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/invalid_beacon_root_calldata_value.json index e523b330cf1..86b39ac377f 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/invalid_beacon_root_calldata_value.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/invalid_beacon_root_calldata_value.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-timestamp=12-valid_call=False-valid_input=False-zero_calldata": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_invalid_beacon_root_calldata_value[fork_Cancun-blockchain_test-timestamp_12-valid_call_False-valid_input_False-zero_calldata]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xe1d1d4fa088ea2fdfb613b7f741e38138bc2189aeab1816c2e118359b6e578f8" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/tx_to_beacon_root_contract.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/tx_to_beacon_root_contract.json index 91bc09e2a9f..a165d7c2411 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/tx_to_beacon_root_contract.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/beacon_root_contract/tx_to_beacon_root_contract.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tx_type=3-call_beacon_root_contract=True-auto_access_list=False": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x3e4baa069c3a235a164d49d67caffd4a77c6e538487464b5473aab9876faeb70" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -128,9 +130,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tx_type=3-call_beacon_root_contract=True-auto_access_list=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_tx_to_beacon_root_contract[fork_Cancun-tx_type_3-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -185,6 +188,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xc06f59bf416ad2bf0a403ee49bfb8d7262b82261f195cea58befc7a50e69e274" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -265,9 +269,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-tx_type=2-call_beacon_root_contract=True-auto_access_list=False": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -322,6 +327,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x9e109643410f3b83f47518ad7bf977ae762a843ac62acd7aabef52a47f21ab22" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -390,9 +396,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-tx_type=2-call_beacon_root_contract=True-auto_access_list=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_tx_to_beacon_root_contract[fork_Cancun-tx_type_2-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -447,6 +454,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x44ecac26f74f7730c0eb13dc3daea0e0b11d6da6d5228680b5de98855c016cf9" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -523,9 +531,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-tx_type=1-call_beacon_root_contract=True-auto_access_list=False": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -580,6 +589,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0x8c25093b2d8e7127d157eded013d00b81577c8a34047a0e7851d7e70efdb7050" }, + "blocknumber": "1", "transactions": [ { "type": "0x01", @@ -647,9 +657,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-tx_type=1-call_beacon_root_contract=True-auto_access_list=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_tx_to_beacon_root_contract[fork_Cancun-tx_type_1-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -704,6 +715,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xad756c435aaa6a36d868cc1ba53a34e308805c6c1642086761fb9047cc8c9aa6" }, + "blocknumber": "1", "transactions": [ { "type": "0x01", @@ -779,9 +791,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-tx_type=0-call_beacon_root_contract=True-auto_access_list=False": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_False]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -836,6 +849,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xa83dc1584fdb01c63a643b181194107119afce7ebefaea3f18dd9aa1f3a2802c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -902,9 +916,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-tx_type=0-call_beacon_root_contract=True-auto_access_list=True": { + "tests/cancun/eip4788_beacon_root/test_beacon_root_contract.py::test_tx_to_beacon_root_contract[fork_Cancun-tx_type_0-blockchain_test-call_beacon_root_contract_True-auto_access_list_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -959,6 +974,7 @@ "parentBeaconBlockRoot": "0x6c31fc15422ebad28aaf9089c306702f67540b53c7eea8b7d2941044b027100f", "hash": "0xa83dc1584fdb01c63a643b181194107119afce7ebefaea3f18dd9aa1f3a2802c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/beacon_root_contract_deploy.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/beacon_root_contract_deploy.json index 8c652984ec5..fe1b9216878 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/beacon_root_contract_deploy.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/beacon_root_contract_deploy.json @@ -1,7 +1,8 @@ { - "000-fork=ShanghaiToCancunAtTime15k-deploy_on_shanghai": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test-deploy_on_shanghai]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -219,9 +220,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=ShanghaiToCancunAtTime15k-deploy_on_cancun": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_beacon_root_contract_deploy[fork_ShanghaiToCancunAtTime15k-blockchain_test-deploy_on_cancun]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/beacon_root_transition.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/beacon_root_transition.json index c78b55ec797..6f35b7acdb2 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/beacon_root_transition.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/beacon_root_transition.json @@ -1,7 +1,8 @@ { - "000-fork=ShanghaiToCancunAtTime15k-block_count=20-fork_transition": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_beacon_root_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test-block_count_20-fork_transition]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/multi_block_beacon_root_timestamp_calls.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/multi_block_beacon_root_timestamp_calls.json index a1c1b3a93fa..bab20964425 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/multi_block_beacon_root_timestamp_calls.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/multi_block_beacon_root_timestamp_calls.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-block_count=10-buffer_wraparound": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -930,9 +931,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-block_count=10-buffer_wraparound_overwrite": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_overwrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -1753,9 +1755,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-block_count=10-buffer_wraparound_overwrite_high_timestamp": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_overwrite_high_timestamp]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -2576,9 +2579,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-block_count=10-buffer_wraparound_no_overwrite": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_no_overwrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, @@ -3507,9 +3511,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-block_count=10-buffer_wraparound_no_overwrite_2": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_multi_block_beacon_root_timestamp_calls[fork_Cancun-blockchain_test-block_count_10-buffer_wraparound_no_overwrite_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, diff --git a/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/no_beacon_root_contract_at_transition.json b/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/no_beacon_root_contract_at_transition.json index 5f37e10ef55..84ecf79d3f6 100644 --- a/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/no_beacon_root_contract_at_transition.json +++ b/tests/execution-spec-tests/cancun/eip4788_beacon_root/blocks_beacon_root_contract/no_beacon_root_contract_at_transition.json @@ -1,7 +1,8 @@ { - "000-fork=ShanghaiToCancunAtTime15k-timestamp=15000": { + "tests/cancun/eip4788_beacon_root/test_blocks_beacon_root_contract.py::test_no_beacon_root_contract_at_transition[fork_ShanghaiToCancunAtTime15k-blockchain_test-timestamp_15000]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4788.md", "reference-spec-version": "e7608fe8ac8a60934ca874f5aab7d5c1f4ff7782" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_calldata_opcodes.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_calldata_opcodes.json index 65ac657924d..3722e9b58f9 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_calldata_opcodes.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_calldata_opcodes.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tx_gas=500000-empty-opcode=CALLDATALOAD": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATALOAD]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a02c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a068e49b031b73ac925eef0b75bc723022063a1ee84104e9b5bdcecafd1cf357a01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a092b9b37e879f056258d13f15f2eefe780f041e6a5e5c53ab506c6302295ec369b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000825aa90c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", + "rlp": "0xf902d6f90244a02c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03306bb8190e46fb8ac7a241a7e5458a4db226e540b1b4ebb40b09eff1e2d2faca01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a092b9b37e879f056258d13f15f2eefe780f041e6a5e5c53ab506c6302295ec369b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000825aa98203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", "blockHeader": { "parentHash": "0x2c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa068e49b031b73ac925eef0b75bc723022063a1ee84104e9b5bdcecafd1cf357", + "stateRoot": "0x3306bb8190e46fb8ac7a241a7e5458a4db226e540b1b4ebb40b09eff1e2d2fac", "transactionsTrie": "0x1f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875", "receiptTrie": "0x92b9b37e879f056258d13f15f2eefe780f041e6a5e5c53ab506c6302295ec369", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x5aa9", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x98f2a157de151d9000c2a39bfa190fffdcbfa48611e7f89daceb8331438d8f0f" + "hash": "0x88ad202525592c5883767e47fec7221e43debdf0c865733b844732dc3232e350" }, "blocknumber": "1", "transactions": [ @@ -83,7 +84,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x98f2a157de151d9000c2a39bfa190fffdcbfa48611e7f89daceb8331438d8f0f", + "lastblockhash": "0x88ad202525592c5883767e47fec7221e43debdf0c865733b844732dc3232e350", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -116,7 +117,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -128,9 +129,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tx_gas=500000-empty-opcode=CALLDATASIZE": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATASIZE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -161,12 +163,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a0ffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05757cc57cf166a12f15b40200a93a552132494fffa7a9dd7f2f14bf7004d5f16a01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0177fa2fb1e9167ed2b44e478ba54b39da40523cc985950390a475b658986a486b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000825aa50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", + "rlp": "0xf902d6f90244a0ffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0612d45c8d65ee01b1f4e966dee70dd475e703148901643acd8e2c4fee780d0d0a01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0177fa2fb1e9167ed2b44e478ba54b39da40523cc985950390a475b658986a486b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000825aa58203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", "blockHeader": { "parentHash": "0xffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x5757cc57cf166a12f15b40200a93a552132494fffa7a9dd7f2f14bf7004d5f16", + "stateRoot": "0x612d45c8d65ee01b1f4e966dee70dd475e703148901643acd8e2c4fee780d0d0", "transactionsTrie": "0x1f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875", "receiptTrie": "0x177fa2fb1e9167ed2b44e478ba54b39da40523cc985950390a475b658986a486", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -174,8 +176,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x5aa5", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -183,7 +185,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0f8fb7a2663a48a7a5f65189b44247c4be1836dc638c411ee144ba98a88fef36" + "hash": "0xab123ff9806b1d32de3a13f7ea29fc2060429e290b67db30751c72bd12c39271" }, "blocknumber": "1", "transactions": [ @@ -212,7 +214,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x0f8fb7a2663a48a7a5f65189b44247c4be1836dc638c411ee144ba98a88fef36", + "lastblockhash": "0xab123ff9806b1d32de3a13f7ea29fc2060429e290b67db30751c72bd12c39271", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -245,7 +247,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -257,9 +259,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-tx_gas=500000-empty-opcode=CALLDATACOPY": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-empty-opcode_CALLDATACOPY]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -290,12 +293,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a0c3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0057492650dad39047d1870280ca1bf2b31897e1f30778cb65c91bb62aeb63953a01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0caedb3349f16dbe45c4b0eaa0a21c0939b6f841eab4e7ad79db9c9a7a13e91f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000825ab70c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", + "rlp": "0xf902d6f90244a0c3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0024ab9935dcd5f06b326e112d821f9904cbed4e5c095789c4f4fc46c6963c404a01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0caedb3349f16dbe45c4b0eaa0a21c0939b6f841eab4e7ad79db9c9a7a13e91f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000825ab78203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", "blockHeader": { "parentHash": "0xc3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0b", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x057492650dad39047d1870280ca1bf2b31897e1f30778cb65c91bb62aeb63953", + "stateRoot": "0x024ab9935dcd5f06b326e112d821f9904cbed4e5c095789c4f4fc46c6963c404", "transactionsTrie": "0x1f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875", "receiptTrie": "0xcaedb3349f16dbe45c4b0eaa0a21c0939b6f841eab4e7ad79db9c9a7a13e91f0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -303,8 +306,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x5ab7", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -312,7 +315,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6e255c96160fd5aca9f26e094faacec3cc7fbd0e10c08ec05bcd1a4687b68f1a" + "hash": "0x9194635e13be6a36445b51530b096e24d0d6c83f5982bd1b6f519bc6cc18f2ab" }, "blocknumber": "1", "transactions": [ @@ -341,7 +344,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6e255c96160fd5aca9f26e094faacec3cc7fbd0e10c08ec05bcd1a4687b68f1a", + "lastblockhash": "0x9194635e13be6a36445b51530b096e24d0d6c83f5982bd1b6f519bc6cc18f2ab", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -374,7 +377,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -386,19 +389,20 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-tx_gas=500000-single_byte-opcode=CALLDATALOAD": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATALOAD]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00f5e6cfde5854249cf47e689eecf792efeb7dc36aa44ee8dde9f890d6b7dd35ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09c4f3f94b40317762bb7694ab3f28235a24ef8ae7f96d9b03fd526c17f8e6657a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0f5e6cfde5854249cf47e689eecf792efeb7dc36aa44ee8dde9f890d6b7dd35c", + "stateRoot": "0x9c4f3f94b40317762bb7694ab3f28235a24ef8ae7f96d9b03fd526c17f8e6657", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -415,16 +419,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe1211c20e46fa5cfe117b0b5d4652abb91d3235701f86aefee84443bee04d1ec" + "hash": "0x2c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475" }, "blocks": [ { - "rlp": "0xf902d4f90242a0e1211c20e46fa5cfe117b0b5d4652abb91d3235701f86aefee84443bee04d1eca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e69a08b40c2966307152f44ef1a3f4d53fe05ba078c48976475f6e9e59f6bae2a0874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74a04b0345772e0a2f0d4fa4364185b526c10ef53a4b0360a48752cb88fc11af3ebfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8750c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a051ebfa405349d044614414329b1f143a717cd86d04f0cead26e5a00016a2db28a0645b35ef53d38649977d2751a008b1b3aa164b19003c3d2bc158d7c28b556263c0c0", + "rlp": "0xf902d6f90244a02c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e655cddc6f7e9d99a71e0d987cb9295884e0ababf6ba2c0f2cf38adc2d7e8ca7a0874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74a04b0345772e0a2f0d4fa4364185b526c10ef53a4b0360a48752cb88fc11af3ebfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8758203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a051ebfa405349d044614414329b1f143a717cd86d04f0cead26e5a00016a2db28a0645b35ef53d38649977d2751a008b1b3aa164b19003c3d2bc158d7c28b556263c0c0", "blockHeader": { - "parentHash": "0xe1211c20e46fa5cfe117b0b5d4652abb91d3235701f86aefee84443bee04d1ec", + "parentHash": "0x2c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe69a08b40c2966307152f44ef1a3f4d53fe05ba078c48976475f6e9e59f6bae2", + "stateRoot": "0xe655cddc6f7e9d99a71e0d987cb9295884e0ababf6ba2c0f2cf38adc2d7e8ca7", "transactionsTrie": "0x874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74", "receiptTrie": "0x4b0345772e0a2f0d4fa4364185b526c10ef53a4b0360a48752cb88fc11af3ebf", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -432,8 +436,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa875", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -441,7 +445,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xcb70002caaffad895d62827dd7268a532ec1ff3f81a76c0d9a10c0fb2be48809" + "hash": "0x7d8b8c0b2d2c9072a21d12147dd27e6af4fc109093fbb09b2ca6942b0d1e1438" }, "blocknumber": "1", "transactions": [ @@ -470,7 +474,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xcb70002caaffad895d62827dd7268a532ec1ff3f81a76c0d9a10c0fb2be48809", + "lastblockhash": "0x7d8b8c0b2d2c9072a21d12147dd27e6af4fc109093fbb09b2ca6942b0d1e1438", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -486,7 +490,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x3767f1", + "balance": "0x3767e1", "code": "0x", "storage": {} } @@ -505,31 +509,32 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x01", - "balance": "0x30ccbd", + "balance": "0x30ccad", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "004-fork=Cancun-tx_gas=500000-single_byte-opcode=CALLDATASIZE": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATASIZE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00b33b8fbe10a985c8cab5db04646b1a095b213b746b2565efe7d06bf69216baba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a097ed41cebe72e3064d3c8f36685d5d13da0bd16594b649bad22268e11132ff22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0b33b8fbe10a985c8cab5db04646b1a095b213b746b2565efe7d06bf69216bab", + "stateRoot": "0x97ed41cebe72e3064d3c8f36685d5d13da0bd16594b649bad22268e11132ff22", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -546,16 +551,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x88fd2e923aa592bd4ead0596782203e6adee782e918d1b29c4f0f6f9e16f3081" + "hash": "0xffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14" }, "blocks": [ { - "rlp": "0xf902d4f90242a088fd2e923aa592bd4ead0596782203e6adee782e918d1b29c4f0f6f9e16f3081a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0196b23fd4ae803305ff84ce4006e8aec326ab569209353286eefde74c56db19ca0874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74a0606dab7ada4d0260b57d39ead97173042a2fcba3bb34fd4f70e8be0e7b443a0fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8710c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a051ebfa405349d044614414329b1f143a717cd86d04f0cead26e5a00016a2db28a0645b35ef53d38649977d2751a008b1b3aa164b19003c3d2bc158d7c28b556263c0c0", + "rlp": "0xf902d6f90244a0ffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0a2f077799ffdc51a88fb86de69b5ac38b85ecec524dcf2ac399e676fc6bfb5a0874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74a0606dab7ada4d0260b57d39ead97173042a2fcba3bb34fd4f70e8be0e7b443a0fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8718203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a051ebfa405349d044614414329b1f143a717cd86d04f0cead26e5a00016a2db28a0645b35ef53d38649977d2751a008b1b3aa164b19003c3d2bc158d7c28b556263c0c0", "blockHeader": { - "parentHash": "0x88fd2e923aa592bd4ead0596782203e6adee782e918d1b29c4f0f6f9e16f3081", + "parentHash": "0xffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x196b23fd4ae803305ff84ce4006e8aec326ab569209353286eefde74c56db19c", + "stateRoot": "0xe0a2f077799ffdc51a88fb86de69b5ac38b85ecec524dcf2ac399e676fc6bfb5", "transactionsTrie": "0x874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74", "receiptTrie": "0x606dab7ada4d0260b57d39ead97173042a2fcba3bb34fd4f70e8be0e7b443a0f", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -563,8 +568,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa871", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -572,7 +577,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf9e281688840bfce2b4e68592f171e7ebe8b4d4da4cac04f1cb8625b9d5fd70f" + "hash": "0x327303bce6bc113b5d5997f307598d45435afcd2b9ca7ae847d36e7810a2d17f" }, "blocknumber": "1", "transactions": [ @@ -601,7 +606,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf9e281688840bfce2b4e68592f171e7ebe8b4d4da4cac04f1cb8625b9d5fd70f", + "lastblockhash": "0x327303bce6bc113b5d5997f307598d45435afcd2b9ca7ae847d36e7810a2d17f", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -617,7 +622,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x3767f1", + "balance": "0x3767e1", "code": "0x", "storage": {} } @@ -636,31 +641,32 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x01", - "balance": "0x30ccd9", + "balance": "0x30ccc9", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "005-fork=Cancun-tx_gas=500000-single_byte-opcode=CALLDATACOPY": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-single_byte-opcode_CALLDATACOPY]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e64a5f8bccbdd08a4c8e36e73e7ae6db7f9e4aab862f48204ca3c8d652ee69bda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a086f5725c30a4346aeeb19653b9762bd36b9910a83c8126ebc1f2174dafb5569aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe64a5f8bccbdd08a4c8e36e73e7ae6db7f9e4aab862f48204ca3c8d652ee69bd", + "stateRoot": "0x86f5725c30a4346aeeb19653b9762bd36b9910a83c8126ebc1f2174dafb5569a", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -677,16 +683,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf97eb1c133a5c2c00ed5eec291f7cbe78826ee848c87a66411a67e0d7e19dcf2" + "hash": "0xc3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0b" }, "blocks": [ { - "rlp": "0xf902d4f90242a0f97eb1c133a5c2c00ed5eec291f7cbe78826ee848c87a66411a67e0d7e19dcf2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0025daa6a1f0cfee88d28017b6ef320be8dc9b35db4de277e7dbf71ec82029313a0874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74a0863b0aecceb3d1ea64053afd085b45c6b9e3b2fd2bfee7dd053b0bd8b4a34638b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8860c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a051ebfa405349d044614414329b1f143a717cd86d04f0cead26e5a00016a2db28a0645b35ef53d38649977d2751a008b1b3aa164b19003c3d2bc158d7c28b556263c0c0", + "rlp": "0xf902d6f90244a0c3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ce195a85d0ad174acb4692c82e741e0c8707b4cd3891ac22f8089c171e9afce6a0874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74a0863b0aecceb3d1ea64053afd085b45c6b9e3b2fd2bfee7dd053b0bd8b4a34638b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8868203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a051ebfa405349d044614414329b1f143a717cd86d04f0cead26e5a00016a2db28a0645b35ef53d38649977d2751a008b1b3aa164b19003c3d2bc158d7c28b556263c0c0", "blockHeader": { - "parentHash": "0xf97eb1c133a5c2c00ed5eec291f7cbe78826ee848c87a66411a67e0d7e19dcf2", + "parentHash": "0xc3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0b", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x025daa6a1f0cfee88d28017b6ef320be8dc9b35db4de277e7dbf71ec82029313", + "stateRoot": "0xce195a85d0ad174acb4692c82e741e0c8707b4cd3891ac22f8089c171e9afce6", "transactionsTrie": "0x874127e1d7261bcb38fc211e084e5c3ea70307bc2cbcef7ed31739b78d8d4f74", "receiptTrie": "0x863b0aecceb3d1ea64053afd085b45c6b9e3b2fd2bfee7dd053b0bd8b4a34638", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -694,8 +700,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa886", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -703,7 +709,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x497a8731fe14c4978fbe3609599ecea642db0948bf61f8b211e1386fdb688cb8" + "hash": "0x62300b5cac9d7f98c074645edd134f1344644659e3635ef10e073e3cdd2152fc" }, "blocknumber": "1", "transactions": [ @@ -732,7 +738,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x497a8731fe14c4978fbe3609599ecea642db0948bf61f8b211e1386fdb688cb8", + "lastblockhash": "0x62300b5cac9d7f98c074645edd134f1344644659e3635ef10e073e3cdd2152fc", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -748,7 +754,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x3767f1", + "balance": "0x3767e1", "code": "0x", "storage": {} } @@ -767,31 +773,32 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x01", - "balance": "0x30cc46", + "balance": "0x30cc36", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "006-fork=Cancun-tx_gas=500000-word-opcode=CALLDATALOAD": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATALOAD]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bf9039cf09ff1d58ad12d3858cbe46751ad5a0227e23d1b6e4ff505c43df6f14a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09c4f3f94b40317762bb7694ab3f28235a24ef8ae7f96d9b03fd526c17f8e6657a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbf9039cf09ff1d58ad12d3858cbe46751ad5a0227e23d1b6e4ff505c43df6f14", + "stateRoot": "0x9c4f3f94b40317762bb7694ab3f28235a24ef8ae7f96d9b03fd526c17f8e6657", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -808,16 +815,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x38d3395f9dff9c6bdaa9b8a46b7b6d6b943e73ce6f7060a934641dd3eb6f7b91" + "hash": "0x2c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475" }, "blocks": [ { - "rlp": "0xf902f4f90242a038d3395f9dff9c6bdaa9b8a46b7b6d6b943e73ce6f7060a934641dd3eb6f7b91a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08de345547d5d1746b37e415d2127fff5fa6abaa5b82b7f7563f17508f71bae8aa0b1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451ca08bf4295ae61d13b33f667f112075ba2ae027fb4c6da10dcc1318fc9912e9d624b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a9a50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8abb8a903f8a6018080078307a12094000000000000000000000000000000000000010001a00001000100010001000100010001000100010001000100010001000100010001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a086760181b41f484583e66b72e188572a4fcc56f30784b8c9ac899d2e96a735e1a060d01d75a790c2896987d6a248821c51f28f7ccf752f858fc203f07c409cdca5c0c0", + "rlp": "0xf902f6f90244a02c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0030783f247a5019109e98e8f585353d01f93a60c74153cbc148a46ae2e68f387a0b1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451ca08bf4295ae61d13b33f667f112075ba2ae027fb4c6da10dcc1318fc9912e9d624b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a9a58203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8abb8a903f8a6018080078307a12094000000000000000000000000000000000000010001a00001000100010001000100010001000100010001000100010001000100010001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a086760181b41f484583e66b72e188572a4fcc56f30784b8c9ac899d2e96a735e1a060d01d75a790c2896987d6a248821c51f28f7ccf752f858fc203f07c409cdca5c0c0", "blockHeader": { - "parentHash": "0x38d3395f9dff9c6bdaa9b8a46b7b6d6b943e73ce6f7060a934641dd3eb6f7b91", + "parentHash": "0x2c8f1304cddb63106c8bf24f50bf6aee1905888a923fe8c238aede613a2d7475", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8de345547d5d1746b37e415d2127fff5fa6abaa5b82b7f7563f17508f71bae8a", + "stateRoot": "0x030783f247a5019109e98e8f585353d01f93a60c74153cbc148a46ae2e68f387", "transactionsTrie": "0xb1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451c", "receiptTrie": "0x8bf4295ae61d13b33f667f112075ba2ae027fb4c6da10dcc1318fc9912e9d624", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -825,8 +832,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa9a5", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -834,7 +841,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9631f956e2a81d251d9a5ea392876a4db667ced258295fe6673d312ee2ccb1e4" + "hash": "0x2a5a2bb93b73c9f7d738a0f614b1a242b5a09cd63f4b3d6fcc41fc4f18827a46" }, "blocknumber": "1", "transactions": [ @@ -863,7 +870,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9631f956e2a81d251d9a5ea392876a4db667ced258295fe6673d312ee2ccb1e4", + "lastblockhash": "0x2a5a2bb93b73c9f7d738a0f614b1a242b5a09cd63f4b3d6fcc41fc4f18827a46", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -879,7 +886,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x376921", + "balance": "0x3767e1", "code": "0x", "storage": {} } @@ -898,31 +905,32 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x01", - "balance": "0x30c59d", + "balance": "0x30c45d", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "007-fork=Cancun-tx_gas=500000-word-opcode=CALLDATASIZE": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATASIZE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04ffe23175c0a37300ab200a5fb4214ebbf7c1a237e2b31952ca78364bc85f5e4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a097ed41cebe72e3064d3c8f36685d5d13da0bd16594b649bad22268e11132ff22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4ffe23175c0a37300ab200a5fb4214ebbf7c1a237e2b31952ca78364bc85f5e4", + "stateRoot": "0x97ed41cebe72e3064d3c8f36685d5d13da0bd16594b649bad22268e11132ff22", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -939,16 +947,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xc21c38efa1294b142ff96000dab90b4177c69a33b8d3c7953da9be65d814ca7b" + "hash": "0xffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14" }, "blocks": [ { - "rlp": "0xf902f4f90242a0c21c38efa1294b142ff96000dab90b4177c69a33b8d3c7953da9be65d814ca7ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09690854e91493a4362eb46b797406691efee8e4ebaf0edd069d6fa004ec2acbaa0b1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451ca092484b6a6d6d4f6c5f7c6769cd24aa7af266e9eac029394bf7d1524adecc62bcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a9a10c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8abb8a903f8a6018080078307a12094000000000000000000000000000000000000010001a00001000100010001000100010001000100010001000100010001000100010001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a086760181b41f484583e66b72e188572a4fcc56f30784b8c9ac899d2e96a735e1a060d01d75a790c2896987d6a248821c51f28f7ccf752f858fc203f07c409cdca5c0c0", + "rlp": "0xf902f6f90244a0ffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c58dea84ff65d9536edff709e9d78ae397c15a34c8652006842afc6f40ecf67aa0b1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451ca092484b6a6d6d4f6c5f7c6769cd24aa7af266e9eac029394bf7d1524adecc62bcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a9a18203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8abb8a903f8a6018080078307a12094000000000000000000000000000000000000010001a00001000100010001000100010001000100010001000100010001000100010001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a086760181b41f484583e66b72e188572a4fcc56f30784b8c9ac899d2e96a735e1a060d01d75a790c2896987d6a248821c51f28f7ccf752f858fc203f07c409cdca5c0c0", "blockHeader": { - "parentHash": "0xc21c38efa1294b142ff96000dab90b4177c69a33b8d3c7953da9be65d814ca7b", + "parentHash": "0xffa667d5371028b7c65645602f45cc8aaecc0f886b6f9eb3aff7285c37d6bb14", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9690854e91493a4362eb46b797406691efee8e4ebaf0edd069d6fa004ec2acba", + "stateRoot": "0xc58dea84ff65d9536edff709e9d78ae397c15a34c8652006842afc6f40ecf67a", "transactionsTrie": "0xb1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451c", "receiptTrie": "0x92484b6a6d6d4f6c5f7c6769cd24aa7af266e9eac029394bf7d1524adecc62bc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -956,8 +964,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa9a1", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -965,7 +973,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1703827f81797edfc6ccec61627a73322e9cb1762d8f443b866fbf6c6cb51b31" + "hash": "0x51970f606350d354930b0931bc2439ca78c5ec6de28b239c4470ad4b2c5d0c03" }, "blocknumber": "1", "transactions": [ @@ -994,7 +1002,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1703827f81797edfc6ccec61627a73322e9cb1762d8f443b866fbf6c6cb51b31", + "lastblockhash": "0x51970f606350d354930b0931bc2439ca78c5ec6de28b239c4470ad4b2c5d0c03", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1010,7 +1018,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x376921", + "balance": "0x3767e1", "code": "0x", "storage": {} } @@ -1029,31 +1037,32 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x01", - "balance": "0x30c5b9", + "balance": "0x30c479", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "008-fork=Cancun-tx_gas=500000-word-opcode=CALLDATACOPY": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_calldata_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-word-opcode_CALLDATACOPY]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0905dbbcff5eae6ce9ecd391913187e0ead59603b1284735b3caa3a552452e1c4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a086f5725c30a4346aeeb19653b9762bd36b9910a83c8126ebc1f2174dafb5569aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x905dbbcff5eae6ce9ecd391913187e0ead59603b1284735b3caa3a552452e1c4", + "stateRoot": "0x86f5725c30a4346aeeb19653b9762bd36b9910a83c8126ebc1f2174dafb5569a", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1070,16 +1079,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbcb56f883fec82d28c5726dcc0dae49d8976d5d4e329537d4f8d88bcba10b3a5" + "hash": "0xc3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0b" }, "blocks": [ { - "rlp": "0xf902f4f90242a0bcb56f883fec82d28c5726dcc0dae49d8976d5d4e329537d4f8d88bcba10b3a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa096f4a912765fc87e11c51c36a7ea25c1618bfc6b64cfebcb676583ff99d1acdca0b1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451ca0e752136b4f946affd0d55ab477f296ea537d8691d44596c6c2e60fd168a9e931b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a9b60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8abb8a903f8a6018080078307a12094000000000000000000000000000000000000010001a00001000100010001000100010001000100010001000100010001000100010001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a086760181b41f484583e66b72e188572a4fcc56f30784b8c9ac899d2e96a735e1a060d01d75a790c2896987d6a248821c51f28f7ccf752f858fc203f07c409cdca5c0c0", + "rlp": "0xf902f6f90244a0c3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0247d8ecebd209f206171e5ea6e245571500ad42d2b5ed159201626a2770ce33aa0b1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451ca0e752136b4f946affd0d55ab477f296ea537d8691d44596c6c2e60fd168a9e931b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a9b68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8abb8a903f8a6018080078307a12094000000000000000000000000000000000000010001a00001000100010001000100010001000100010001000100010001000100010001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a086760181b41f484583e66b72e188572a4fcc56f30784b8c9ac899d2e96a735e1a060d01d75a790c2896987d6a248821c51f28f7ccf752f858fc203f07c409cdca5c0c0", "blockHeader": { - "parentHash": "0xbcb56f883fec82d28c5726dcc0dae49d8976d5d4e329537d4f8d88bcba10b3a5", + "parentHash": "0xc3fdfc78b1d2dd0e66f0b84a1c3f1c52c91cdab3094ab31c9085172a3c44ff0b", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x96f4a912765fc87e11c51c36a7ea25c1618bfc6b64cfebcb676583ff99d1acdc", + "stateRoot": "0x247d8ecebd209f206171e5ea6e245571500ad42d2b5ed159201626a2770ce33a", "transactionsTrie": "0xb1560cd3fe1330fb3430ab2664c7cb06b759ada7010181879c06b84dcd0d451c", "receiptTrie": "0xe752136b4f946affd0d55ab477f296ea537d8691d44596c6c2e60fd168a9e931", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1087,8 +1096,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa9b6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1096,7 +1105,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6f91aaa5ff9464e4348235f84fc79aaec1413db5014bcc0b96ee7e3d66032635" + "hash": "0x5f26a46b7b396dcb36f42b41571febc706546af042b3139b7e2d0a438f1fcfd5" }, "blocknumber": "1", "transactions": [ @@ -1125,7 +1134,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6f91aaa5ff9464e4348235f84fc79aaec1413db5014bcc0b96ee7e3d66032635", + "lastblockhash": "0x5f26a46b7b396dcb36f42b41571febc706546af042b3139b7e2d0a438f1fcfd5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1141,7 +1150,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x376921", + "balance": "0x3767e1", "code": "0x", "storage": {} } @@ -1160,12 +1169,12 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x01", - "balance": "0x30c526", + "balance": "0x30c3e6", "code": "0x", "storage": {} } diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_gasprice_opcode.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_gasprice_opcode.json index 97d1e806574..030ad59b22b 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_gasprice_opcode.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_gasprice_opcode.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tx_gas=500000-opcode=GASPRICE-tx_max_fee_per_gas=100-tx_max_fee_per_blob_gas=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a0e86743cfdab43be1ce3106a7c956dddeea8546fcd60af45cd777a2c7a4658656a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0802978df2a89c2e376215b849e1050bd2dfce06eed5a04cbdd99af984512e72da0ab715d38d914b30a6c892e85189c077f16f233cfed0c7222c8eafbe34544f88ba0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080648307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a00976b4d7590f210fe712ccf9d1e009bf72868916afbae324a737f393613faf06a022889dac63c68a17ab8b7abae68161d6bbbd84c8a510f36118a6f81607e385e9c0c0", + "rlp": "0xf902d6f90244a0e86743cfdab43be1ce3106a7c956dddeea8546fcd60af45cd777a2c7a4658656a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02f2b90f99fc4216f45d4b256d23c89358defe4640051e8295d4fd0e5e9457e87a0ab715d38d914b30a6c892e85189c077f16f233cfed0c7222c8eafbe34544f88ba0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8618203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080648307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a00976b4d7590f210fe712ccf9d1e009bf72868916afbae324a737f393613faf06a022889dac63c68a17ab8b7abae68161d6bbbd84c8a510f36118a6f81607e385e9c0c0", "blockHeader": { "parentHash": "0xe86743cfdab43be1ce3106a7c956dddeea8546fcd60af45cd777a2c7a4658656", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x802978df2a89c2e376215b849e1050bd2dfce06eed5a04cbdd99af984512e72d", + "stateRoot": "0x2f2b90f99fc4216f45d4b256d23c89358defe4640051e8295d4fd0e5e9457e87", "transactionsTrie": "0xab715d38d914b30a6c892e85189c077f16f233cfed0c7222c8eafbe34544f88b", "receiptTrie": "0xc117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5cc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa861", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4f8b1f9103dcc3fd0be83e30a0ad9a28d5175cb634c0d0ffe470760a7ac834c4" + "hash": "0x2c59957266e3c15302012a0939969a72b896008b8b4a6b9d8007be7fa4c9d34e" }, "blocknumber": "1", "transactions": [ @@ -83,7 +84,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4f8b1f9103dcc3fd0be83e30a0ad9a28d5175cb634c0d0ffe470760a7ac834c4", + "lastblockhash": "0x2c59957266e3c15302012a0939969a72b896008b8b4a6b9d8007be7fa4c9d34e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -118,7 +119,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -130,19 +131,20 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tx_gas=500000-opcode=GASPRICE-tx_max_fee_per_gas=100-tx_max_fee_per_blob_gas=1-tx_max_priority_fee_per_gas=2": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_1-tx_max_priority_fee_per_gas_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0cd25fbe770b5b08a6cd56487d8d646524e4c84bed05d1830b6d489500a7fcca5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a054b23faa355706e15015922106ecbef8b1b186e22e82bf6cece6f1e0a5fe0721a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xcd25fbe770b5b08a6cd56487d8d646524e4c84bed05d1830b6d489500a7fcca5", + "stateRoot": "0x54b23faa355706e15015922106ecbef8b1b186e22e82bf6cece6f1e0a5fe0721", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -159,16 +161,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbe28ac3e73009fe0f51fc535b21e042e81e1ac8bd0b07dc5f5b66021ae94ca62" + "hash": "0xe86743cfdab43be1ce3106a7c956dddeea8546fcd60af45cd777a2c7a4658656" }, "blocks": [ { - "rlp": "0xf902d4f90242a0be28ac3e73009fe0f51fc535b21e042e81e1ac8bd0b07dc5f5b66021ae94ca62a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa034b32cc726be6e830a36333f88209709b2b16d994209233eee1766963b113305a073282477bf5f1dd01981ef3dcb20cedf9948cd7b3e589c868e547c5f8b7a33d7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018002648307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0cb21a6767512f2b2f61f2b999de91bfcb853e9e6b26881fee321a6b26f9620a2a02852d57cfb3ef597fa9d62f4f6f636c017f8297f00ac0ed1802bab0469b4fe6bc0c0", + "rlp": "0xf902d6f90244a0e86743cfdab43be1ce3106a7c956dddeea8546fcd60af45cd777a2c7a4658656a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa009f2439be74750df2de00e4fa1ad9bdf398d36d77aa375f9966fd80500d2c340a073282477bf5f1dd01981ef3dcb20cedf9948cd7b3e589c868e547c5f8b7a33d7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8618203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018002648307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0cb21a6767512f2b2f61f2b999de91bfcb853e9e6b26881fee321a6b26f9620a2a02852d57cfb3ef597fa9d62f4f6f636c017f8297f00ac0ed1802bab0469b4fe6bc0c0", "blockHeader": { - "parentHash": "0xbe28ac3e73009fe0f51fc535b21e042e81e1ac8bd0b07dc5f5b66021ae94ca62", + "parentHash": "0xe86743cfdab43be1ce3106a7c956dddeea8546fcd60af45cd777a2c7a4658656", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x34b32cc726be6e830a36333f88209709b2b16d994209233eee1766963b113305", + "stateRoot": "0x09f2439be74750df2de00e4fa1ad9bdf398d36d77aa375f9966fd80500d2c340", "transactionsTrie": "0x73282477bf5f1dd01981ef3dcb20cedf9948cd7b3e589c868e547c5f8b7a33d7", "receiptTrie": "0xc117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5cc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -176,8 +178,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa861", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -185,7 +187,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4789d404ec961d430ef8586300d5f2d5342db28ebcc0f72477f3522c3be2d039" + "hash": "0x4da38abc471d48be51c6c243fbcd4091fc549ca386f37ddbf336fbb18c6415ab" }, "blocknumber": "1", "transactions": [ @@ -214,7 +216,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4789d404ec961d430ef8586300d5f2d5342db28ebcc0f72477f3522c3be2d039", + "lastblockhash": "0x4da38abc471d48be51c6c243fbcd4091fc549ca386f37ddbf336fbb18c6415ab", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -230,7 +232,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x030c32c1", + "balance": "0x02fcf081", "code": "0x", "storage": {} } @@ -249,7 +251,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -260,16 +262,17 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x01", - "balance": "0x03044757", + "balance": "0x02f50517", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "002-fork=Cancun-tx_gas=500000-opcode=GASPRICE-tx_max_fee_per_gas=100-tx_max_fee_per_blob_gas=3-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -300,12 +303,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a0e33a1a35323d0bd29334e70c619ef0e02a2a444b535f4fb20c8305b152be76ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09438ef9566d55767d1603920665e3443336ab3054df777d5529e7b048d6525eca052edbfcdc24dd10066a8f1999d42ed1a5523c97ce159cb5a10653bbdfb509685a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080648307a1209400000000000000000000000000000000000001000180c003e1a0010000000000000000000000000000000000000000000000000000000000000001a0bbc1def7093580ef6a36298faaf833902efd47e743b7d663059b1b15c4068a0ba072c94f8cb821a0d083c2106d8c4a350b802b63e8ba28cf7b65bd2521cd18e2fdc0c0", + "rlp": "0xf902d6f90244a0e33a1a35323d0bd29334e70c619ef0e02a2a444b535f4fb20c8305b152be76ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03420b771d8ee8a2f2b4177934b57c14869f5f54df52aa8b62bb206e86fbe4b25a052edbfcdc24dd10066a8f1999d42ed1a5523c97ce159cb5a10653bbdfb509685a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8618203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080648307a1209400000000000000000000000000000000000001000180c003e1a0010000000000000000000000000000000000000000000000000000000000000001a0bbc1def7093580ef6a36298faaf833902efd47e743b7d663059b1b15c4068a0ba072c94f8cb821a0d083c2106d8c4a350b802b63e8ba28cf7b65bd2521cd18e2fdc0c0", "blockHeader": { "parentHash": "0xe33a1a35323d0bd29334e70c619ef0e02a2a444b535f4fb20c8305b152be76ad", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9438ef9566d55767d1603920665e3443336ab3054df777d5529e7b048d6525ec", + "stateRoot": "0x3420b771d8ee8a2f2b4177934b57c14869f5f54df52aa8b62bb206e86fbe4b25", "transactionsTrie": "0x52edbfcdc24dd10066a8f1999d42ed1a5523c97ce159cb5a10653bbdfb509685", "receiptTrie": "0xc117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5cc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -313,8 +316,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa861", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -322,7 +325,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x223777bc2d0e406972697d0387b4b6f5792190d8ae58a8673287040fcb15f503" + "hash": "0xbe41ff1ede8716ab2d9d5823be4e0ff2d038db97ef1376325946e7c99362dd92" }, "blocknumber": "1", "transactions": [ @@ -351,7 +354,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x223777bc2d0e406972697d0387b4b6f5792190d8ae58a8673287040fcb15f503", + "lastblockhash": "0xbe41ff1ede8716ab2d9d5823be4e0ff2d038db97ef1376325946e7c99362dd92", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -386,7 +389,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -398,19 +401,20 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-tx_gas=500000-opcode=GASPRICE-tx_max_fee_per_gas=100-tx_max_fee_per_blob_gas=3-tx_max_priority_fee_per_gas=2": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_gasprice_opcode[fork_Cancun-blockchain_test-tx_gas_500000-opcode_GASPRICE-tx_max_fee_per_gas_100-tx_max_fee_per_blob_gas_3-tx_max_priority_fee_per_gas_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a005c798f8518b561f74c0e83bfad528f0ab0d584dd0bfd86267c408189d2251fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e84112d58f6c1c54a299f70350ee0d1afa6dd3316a7a778577b188825ba66bb0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x05c798f8518b561f74c0e83bfad528f0ab0d584dd0bfd86267c408189d2251fc", + "stateRoot": "0xe84112d58f6c1c54a299f70350ee0d1afa6dd3316a7a778577b188825ba66bb0", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -427,16 +431,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5c8722c557ef47de9935cf8bbd208e09656c92364973ba060b5b4450772a88c1" + "hash": "0xe33a1a35323d0bd29334e70c619ef0e02a2a444b535f4fb20c8305b152be76ad" }, "blocks": [ { - "rlp": "0xf902d4f90242a05c8722c557ef47de9935cf8bbd208e09656c92364973ba060b5b4450772a88c1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e7b10b0545d6ad4b5f4ac597f275568a7b9f218bc9c02e0a87b135d364e4ac6ca0564189b7a1c45bb6274eb83b4aac11523012c146c68f5798f75ce50e4f43d9fba0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018002648307a1209400000000000000000000000000000000000001000180c003e1a0010000000000000000000000000000000000000000000000000000000000000080a0db5fdca9b13069321a3787e723a231bd3028c2ff4caac3ad8ba3f9cc9207fc91a05d3a7e4751823f7fdcfb73914746d6058553d3b15e3e932f5a40f8e50c9f93f9c0c0", + "rlp": "0xf902d6f90244a0e33a1a35323d0bd29334e70c619ef0e02a2a444b535f4fb20c8305b152be76ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03045f55d03fc205a47c568f895b4233948eb5873caf818d31558cb5136518acfa0564189b7a1c45bb6274eb83b4aac11523012c146c68f5798f75ce50e4f43d9fba0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8618203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018002648307a1209400000000000000000000000000000000000001000180c003e1a0010000000000000000000000000000000000000000000000000000000000000080a0db5fdca9b13069321a3787e723a231bd3028c2ff4caac3ad8ba3f9cc9207fc91a05d3a7e4751823f7fdcfb73914746d6058553d3b15e3e932f5a40f8e50c9f93f9c0c0", "blockHeader": { - "parentHash": "0x5c8722c557ef47de9935cf8bbd208e09656c92364973ba060b5b4450772a88c1", + "parentHash": "0xe33a1a35323d0bd29334e70c619ef0e02a2a444b535f4fb20c8305b152be76ad", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe7b10b0545d6ad4b5f4ac597f275568a7b9f218bc9c02e0a87b135d364e4ac6c", + "stateRoot": "0x3045f55d03fc205a47c568f895b4233948eb5873caf818d31558cb5136518acf", "transactionsTrie": "0x564189b7a1c45bb6274eb83b4aac11523012c146c68f5798f75ce50e4f43d9fb", "receiptTrie": "0xc117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5cc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -444,8 +448,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa861", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -453,7 +457,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb24f95274955b717a6c905aabc68a19c7884843d94260690e356b6a8524052c6" + "hash": "0xf7064d50c15fa5b6c04586c55b9ac0fc00f4990ec07548b64246ba72aea50689" }, "blocknumber": "1", "transactions": [ @@ -482,7 +486,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb24f95274955b717a6c905aabc68a19c7884843d94260690e356b6a8524052c6", + "lastblockhash": "0xf7064d50c15fa5b6c04586c55b9ac0fc00f4990ec07548b64246ba72aea50689", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -498,7 +502,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x031032c1", + "balance": "0x0300f081", "code": "0x", "storage": {} } @@ -517,7 +521,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -528,7 +532,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x01", - "balance": "0x03084757", + "balance": "0x02f90517", "code": "0x", "storage": {} } diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_opcodes.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_opcodes.json index f58ccba85b2..267cb3f152e 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_opcodes.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_opcodes.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tx_gas=500000-opcode=ORIGIN": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-opcode_ORIGIN]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a017b8e1fb7fffc73880270043c38206ef64f682ece284d73ef9aa3e3445580364a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa026a39a4a72b561389d9ef94ba2387e69cbaffda1a45b9af95d102aa78022dc23a01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", + "rlp": "0xf902d6f90244a017b8e1fb7fffc73880270043c38206ef64f682ece284d73ef9aa3e3445580364a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06b75d7c44d30e43363c221b56b17dfab6e62e5ce83eb9e27f9c7a0580ffa2b0aa01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8618203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", "blockHeader": { "parentHash": "0x17b8e1fb7fffc73880270043c38206ef64f682ece284d73ef9aa3e3445580364", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x26a39a4a72b561389d9ef94ba2387e69cbaffda1a45b9af95d102aa78022dc23", + "stateRoot": "0x6b75d7c44d30e43363c221b56b17dfab6e62e5ce83eb9e27f9c7a0580ffa2b0a", "transactionsTrie": "0x1f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875", "receiptTrie": "0xc117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5cc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa861", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1a0e589c592a3c3371c91e8a20dd7fff6a4fefc5a7bf3f628e207fd28db30be3" + "hash": "0x1156dcb7d9561cb42cfc9e372fb38dd57e56e3413e2a5f5907d044fc493bb12b" }, "blocknumber": "1", "transactions": [ @@ -83,7 +84,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1a0e589c592a3c3371c91e8a20dd7fff6a4fefc5a7bf3f628e207fd28db30be3", + "lastblockhash": "0x1156dcb7d9561cb42cfc9e372fb38dd57e56e3413e2a5f5907d044fc493bb12b", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -118,7 +119,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -130,9 +131,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tx_gas=500000-opcode=CALLER": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_opcodes[fork_Cancun-blockchain_test-tx_gas_500000-opcode_CALLER]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -163,12 +165,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a02587373f9f12c7ea773a2f5cccf42a36b49768d2d178599e225e42d158da1174a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05f3a3fd723bab3394e191a3da8e26da6bf9392929bc9c141b83c11bed4a34d2ba01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", + "rlp": "0xf902d6f90244a02587373f9f12c7ea773a2f5cccf42a36b49768d2d178599e225e42d158da1174a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04bc152ec118d150f3135e70499154a4712f4756e8ae82db4cea8fc578f0eb069a01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8618203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", "blockHeader": { "parentHash": "0x2587373f9f12c7ea773a2f5cccf42a36b49768d2d178599e225e42d158da1174", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x5f3a3fd723bab3394e191a3da8e26da6bf9392929bc9c141b83c11bed4a34d2b", + "stateRoot": "0x4bc152ec118d150f3135e70499154a4712f4756e8ae82db4cea8fc578f0eb069", "transactionsTrie": "0x1f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875", "receiptTrie": "0xc117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5cc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -176,8 +178,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa861", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -185,7 +187,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3c0b9c1a7362579be314dc625d95c40911ffd6c1feb9de9f592e6cab4aa195b6" + "hash": "0xa0aaacb9a5c65fa731cdc0a4ec174f3ed5b1e764c2bbd1fc81c5d9ce60e1c5d5" }, "blocknumber": "1", "transactions": [ @@ -214,7 +216,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3c0b9c1a7362579be314dc625d95c40911ffd6c1feb9de9f592e6cab4aa195b6", + "lastblockhash": "0xa0aaacb9a5c65fa731cdc0a4ec174f3ed5b1e764c2bbd1fc81c5d9ce60e1c5d5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -249,7 +251,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_value_opcode.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_value_opcode.json index 5570ec397a4..7638b3f4bf2 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_value_opcode.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_tx_attribute_value_opcode.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tx_gas=500000-tx_value=0-opcode=CALLVALUE": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_0-opcode_CALLVALUE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a0686c98799b11340e3f5bad6a1c24b1e6f11278db44c96638a6af4e23c528bea9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa029c320035c6b416922751ab32cd5dca7d6bbff792b89bd792497a1e4383a1150a0bb2cffa38bfd056adba0d57c51ebb4209b72466b420bcda2f37a3c64af416f00a0177fa2fb1e9167ed2b44e478ba54b39da40523cc985950390a475b658986a486b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000825aa50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c9ecbba09318c0290d46d52dffbd618575b9c58874834002db289b12eb0d813ba035bbbf21d42d4c26df8415201526a3852d5c08bf6268f008d1cb09353bb0a231c0c0", + "rlp": "0xf902d6f90244a0686c98799b11340e3f5bad6a1c24b1e6f11278db44c96638a6af4e23c528bea9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0085e57b2f0d0d68d176b3f098502d0850f5af132054712a69a2703388e21bf16a0bb2cffa38bfd056adba0d57c51ebb4209b72466b420bcda2f37a3c64af416f00a0177fa2fb1e9167ed2b44e478ba54b39da40523cc985950390a475b658986a486b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000825aa58203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c9ecbba09318c0290d46d52dffbd618575b9c58874834002db289b12eb0d813ba035bbbf21d42d4c26df8415201526a3852d5c08bf6268f008d1cb09353bb0a231c0c0", "blockHeader": { "parentHash": "0x686c98799b11340e3f5bad6a1c24b1e6f11278db44c96638a6af4e23c528bea9", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x29c320035c6b416922751ab32cd5dca7d6bbff792b89bd792497a1e4383a1150", + "stateRoot": "0x085e57b2f0d0d68d176b3f098502d0850f5af132054712a69a2703388e21bf16", "transactionsTrie": "0xbb2cffa38bfd056adba0d57c51ebb4209b72466b420bcda2f37a3c64af416f00", "receiptTrie": "0x177fa2fb1e9167ed2b44e478ba54b39da40523cc985950390a475b658986a486", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x5aa5", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xfbd90b5b9c0379668b6d8e7d581240fe3472bc4353b396feb1ad8c618bf66e70" + "hash": "0xee18bbf418ed9c3698cf4330dce6b3148b2d9dba86c9633b8ced6d28feb197bb" }, "blocknumber": "1", "transactions": [ @@ -83,7 +84,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xfbd90b5b9c0379668b6d8e7d581240fe3472bc4353b396feb1ad8c618bf66e70", + "lastblockhash": "0xee18bbf418ed9c3698cf4330dce6b3148b2d9dba86c9633b8ced6d28feb197bb", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -116,7 +117,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -128,9 +129,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tx_gas=500000-tx_value=1-opcode=CALLVALUE": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_1-opcode_CALLVALUE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -161,12 +163,12 @@ }, "blocks": [ { - "rlp": "0xf902d4f90242a068ab97114ff436dd65dd4e478af5199df78c84ace282ab4e5bf9842e35081282a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a74b6c403163859ae5a40ddf97ef723fd2dfd18a6e2abc436f68611b62a53b9da01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", + "rlp": "0xf902d6f90244a068ab97114ff436dd65dd4e478af5199df78c84ace282ab4e5bf9842e35081282a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c163bfbec86b78d90600d8e558482f6b78a36a0004d215e866ca8df7584b1064a01f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8618203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f886018080078307a1209400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a08633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7fa02df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68eac0c0", "blockHeader": { "parentHash": "0x68ab97114ff436dd65dd4e478af5199df78c84ace282ab4e5bf9842e35081282", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa74b6c403163859ae5a40ddf97ef723fd2dfd18a6e2abc436f68611b62a53b9d", + "stateRoot": "0xc163bfbec86b78d90600d8e558482f6b78a36a0004d215e866ca8df7584b1064", "transactionsTrie": "0x1f3581f26a0e6593c47b5d11210be45819176d1d04794911c1715d4840ab4875", "receiptTrie": "0xc117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5cc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -174,8 +176,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa861", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -183,7 +185,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x91ee1718ee03581ab2802ba4dba75bf79f82cfd2ca67ce57222d4bbf2d73b9e1" + "hash": "0x99f0e2d8a0b662b3aa548a5bd82b37863ec6c132102e2e5d3bd1ade661a2cadc" }, "blocknumber": "1", "transactions": [ @@ -212,7 +214,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x91ee1718ee03581ab2802ba4dba75bf79f82cfd2ca67ce57222d4bbf2d73b9e1", + "lastblockhash": "0x99f0e2d8a0b662b3aa548a5bd82b37863ec6c132102e2e5d3bd1ade661a2cadc", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -247,7 +249,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -259,9 +261,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-tx_gas=500000-tx_value=1000000000000000000-opcode=CALLVALUE": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_tx_attribute_value_opcode[fork_Cancun-blockchain_test-tx_gas_500000-tx_value_1000000000000000000-opcode_CALLVALUE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -292,12 +295,12 @@ }, "blocks": [ { - "rlp": "0xf902dcf90242a071b12efea40efc0cf738df0e39928a7eefc66b1409c3dd7338485236cffc3d5ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa006b67f6994978c5ba4dbfaefcbde2db45f34e57605b766ee9789b96544d28bf8a069c34c1377adba6f98b7fc8cbf72dda21743d5c9fab277dda1653cb8184c1e58a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f893b89103f88e018080078307a120940000000000000000000000000000000000000100880de0b6b3a764000080c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0b3258fd7db8f86bbbfb10baf3505e59c9405e3ad40cef18d5dadc24fdb187947a019be44612fe655f84c941e74e9efdd769ce03bb648fd92ecf2b5167a7a4b10dac0c0", + "rlp": "0xf902def90244a071b12efea40efc0cf738df0e39928a7eefc66b1409c3dd7338485236cffc3d5ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c748bd1a6e7f22241230ce567c8d3bc320bae2774ed9774b8aa809647fa638e8a069c34c1377adba6f98b7fc8cbf72dda21743d5c9fab277dda1653cb8184c1e58a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8618203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f893b89103f88e018080078307a120940000000000000000000000000000000000000100880de0b6b3a764000080c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0b3258fd7db8f86bbbfb10baf3505e59c9405e3ad40cef18d5dadc24fdb187947a019be44612fe655f84c941e74e9efdd769ce03bb648fd92ecf2b5167a7a4b10dac0c0", "blockHeader": { "parentHash": "0x71b12efea40efc0cf738df0e39928a7eefc66b1409c3dd7338485236cffc3d5c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x06b67f6994978c5ba4dbfaefcbde2db45f34e57605b766ee9789b96544d28bf8", + "stateRoot": "0xc748bd1a6e7f22241230ce567c8d3bc320bae2774ed9774b8aa809647fa638e8", "transactionsTrie": "0x69c34c1377adba6f98b7fc8cbf72dda21743d5c9fab277dda1653cb8184c1e58", "receiptTrie": "0xc117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5cc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -305,8 +308,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xa861", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -314,7 +317,7 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xfda1ad96a9c9b3fbb3406d2f8b380ce9cfcb068596596b7758af18da8280cf9d" + "hash": "0x935a61e9c8661e8a3961fa530b311235b92687c313651d907ed5a4667dcae7c9" }, "blocknumber": "1", "transactions": [ @@ -343,7 +346,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xfda1ad96a9c9b3fbb3406d2f8b380ce9cfcb068596596b7758af18da8280cf9d", + "lastblockhash": "0x935a61e9c8661e8a3961fa530b311235b92687c313651d907ed5a4667dcae7c9", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -378,7 +381,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_type_tx_pre_fork.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_type_tx_pre_fork.json index bba8a720985..bafa8fc791b 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_type_tx_pre_fork.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/blob_type_tx_pre_fork.json @@ -1,7 +1,8 @@ { - "000-fork=ShanghaiToCancunAtTime15k-no_blob_tx": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-no_blob_tx]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -29,29 +30,30 @@ }, "blocks": [ { - "rlp": "0xf90287f90217a0e65f8efd00744af00dd2592d0550541cd1e883694df663eead84f129ff2138dfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00b9d1a267a43c569ccd0ff306f8e9056d6c75389839d4402bb616de8d0af901ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f869b86703f864018080078252089400000000000000000000000000000000000001000180c001c080a0de3ecf0321e2d26c34d6b9bd1ffb5a30167abafd5ecacd477049544c23d402cda06c56b464881a4af7bb8216d47c6c5e3286395027af44044b3d7d31a2d24901f2c0c0", - "expectException": "tx type 3 not allowed pre-Cancun", + "rlp": "0xf90289f90219a0e65f8efd00744af00dd2592d0550541cd1e883694df663eead84f129ff2138dfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00b9d1a267a43c569ccd0ff306f8e9056d6c75389839d4402bb616de8d0af901ea05f4182316e8f571b2d046618dc2cb835bafbd5b61df4e4913329618ab07932bea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f869b86703f864018080078252089400000000000000000000000000000000000001000180c001c080a0de3ecf0321e2d26c34d6b9bd1ffb5a30167abafd5ecacd477049544c23d402cda06c56b464881a4af7bb8216d47c6c5e3286395027af44044b3d7d31a2d24901f2c0c0", + "expectException": "TransactionException.TYPE_3_TX_PRE_FORK|TransactionException.TYPE_3_TX_ZERO_BLOBS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe65f8efd00744af00dd2592d0550541cd1e883694df663eead84f129ff2138df", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x0b9d1a267a43c569ccd0ff306f8e9056d6c75389839d4402bb616de8d0af901e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x5f4182316e8f571b2d046618dc2cb835bafbd5b61df4e4913329618ab07932be", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x04006395f6fe8d5960e2bdcd4a8bc2f9c0dc2003c3a795ff86ea9101180bd043" + "hash": "0x3cce5d45e0bb5bd0a731f41b52ec8adcdd63c1a6789c01635eb10b6e40d15ff1" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -108,9 +110,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=ShanghaiToCancunAtTime15k-one_blob_tx": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_blob_type_tx_pre_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-one_blob_tx]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -138,29 +141,30 @@ }, "blocks": [ { - "rlp": "0xf902a8f90217a093ba1d150a1d1016c13e30e068f95a491288910b7688ac42aa2805f4fac05f20a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", - "expectException": "tx type 3 not allowed pre-Cancun", + "rlp": "0xf902aaf90219a093ba1d150a1d1016c13e30e068f95a491288910b7688ac42aa2805f4fac05f20a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139a0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", + "expectException": "TransactionException.TYPE_3_TX_PRE_FORK", "rlp_decoded": { "blockHeader": { "parentHash": "0x93ba1d150a1d1016c13e30e068f95a491288910b7688ac42aa2805f4fac05f20", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x7fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x4193725c2de2ac0fa6e4d966b1303e783d4e7236ba6d9a1c03c318caf5f732ab" + "hash": "0xe0f45dc911e3f8d32807eb39e60660b3efb5342eb184b194b8a38f2fd2aebc5e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/insufficient_balance_blob_tx.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/insufficient_balance_blob_tx.json index 34369d0daaf..889b5f0f755 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/insufficient_balance_blob_tx.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/insufficient_balance_blob_tx.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-no_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,23 +33,23 @@ }, "blocks": [ { - "rlp": "0xf902d1f90240a0c545c4c25c2b01b821ceabe791fd14ca60f2523211bb9a01fc16af4fbeb63133a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c9242c8f50b41094b61604792d98551c9249b9be1ea8722bc30cc2222bfba0f4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0dca96ee8036da88f7870601739979abcb9e581823bb0539f1ee412e83c5a6654a06f763830fe86dfc591bbac5e70d47576bfaaf48d99ee399398b8e6b7de9f095ec0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d3f90242a0c545c4c25c2b01b821ceabe791fd14ca60f2523211bb9a01fc16af4fbeb63133a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e769176f01c055ba61380cc51d2afe1ab240fd703bbf13bc506c64b8cf79c03ea06d8e68965e73be6f56344cbec27d0145830aa287bfb88ff5e15e7a368df2e140a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0dca96ee8036da88f7870601739979abcb9e581823bb0539f1ee412e83c5a6654a06f763830fe86dfc591bbac5e70d47576bfaaf48d99ee399398b8e6b7de9f095ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xc545c4c25c2b01b821ceabe791fd14ca60f2523211bb9a01fc16af4fbeb63133", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc9242c8f50b41094b61604792d98551c9249b9be1ea8722bc30cc2222bfba0f4", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xe769176f01c055ba61380cc51d2afe1ab240fd703bbf13bc506c64b8cf79c03e", + "transactionsTrie": "0x6d8e68965e73be6f56344cbec27d0145830aa287bfb88ff5e15e7a368df2e140", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -56,8 +57,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5871d7b5eb50ab173fb6b9911f23a5d2864ceb359a9dd5e97b0805dfa8c95ccb" + "hash": "0xba5e3a30f4a5d5ef05120986a8630a74b2a68236ab676699aea1b6a79e810565" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -116,19 +118,20 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-no_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ad35be23feb93ca916979cec0af98a3ef8d27ae12869ebc1082b351eeec2e64ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a032dd5fe53aa6ead61bda7c27522492836c8f599581a160aa92dd4edb5243a08fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xad35be23feb93ca916979cec0af98a3ef8d27ae12869ebc1082b351eeec2e64c", + "stateRoot": "0x32dd5fe53aa6ead61bda7c27522492836c8f599581a160aa92dd4edb5243a08f", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -145,27 +148,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf5b1eb79711089d1fd2a7caf3026bb21153cbcfd32c157ba03ecfac7b60eaa08" + "hash": "0x6c36735962a89a61bc494de3fe56f6304379eceefcc5babad143d74e9b5d3ebb" }, "blocks": [ { - "rlp": "0xf902d1f90240a0f5b1eb79711089d1fd2a7caf3026bb21153cbcfd32c157ba03ecfac7b60eaa08a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d80cac34e78f745963294186bd4164282f9b64099933026e26a61bb4d4467f14a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a00a74fc00fd19397a364a9fa0725fb7450e39a0835f9bb73641ade6d6eaa45c2ea070df4bc2b3e1b67218f23101b0ac28921648e37bfe7772f97fb3e2f1640a733dc0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf9032ff90242a06c36735962a89a61bc494de3fe56f6304379eceefcc5babad143d74e9b5d3ebba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06a78b65b6845ae90f6ef26cb57e3629efe08f481b2b5cf2b62c95dce065fbfc3a07c786d65fb816fb69c237276e6d4b59358e44b67e01c02840e6c47cadb10c8eaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0231d9ee920a79f76ba95220ddc3c8dc0b434590470822fc9a3e0857988551881a050fe3aa2eed0dcb338e1b02297761a57f29d3a3eaaba5b0bfc99de731dc9cb4ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xf5b1eb79711089d1fd2a7caf3026bb21153cbcfd32c157ba03ecfac7b60eaa08", + "parentHash": "0x6c36735962a89a61bc494de3fe56f6304379eceefcc5babad143d74e9b5d3ebb", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd80cac34e78f745963294186bd4164282f9b64099933026e26a61bb4d4467f14", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x6a78b65b6845ae90f6ef26cb57e3629efe08f481b2b5cf2b62c95dce065fbfc3", + "transactionsTrie": "0x7c786d65fb816fb69c237276e6d4b59358e44b67e01c02840e6c47cadb10c8ea", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -173,27 +176,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9fd9f91f32aeee8ba8886d2bfff94ad49503042d56e217c39105f6659cff45d9" + "hash": "0x97dbb5919f7cac94401764cdb7160726becc033eaef6295d57088f79af6e7399" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a40", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x", - "accessList": [], + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], "maxFeePerBlobGas": "0x01", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0x0a74fc00fd19397a364a9fa0725fb7450e39a0835f9bb73641ade6d6eaa45c2e", - "s": "0x70df4bc2b3e1b67218f23101b0ac28921648e37bfe7772f97fb3e2f1640a733d", + "r": "0x231d9ee920a79f76ba95220ddc3c8dc0b434590470822fc9a3e0857988551881", + "s": "0x50fe3aa2eed0dcb338e1b02297761a57f29d3a3eaaba5b0bfc99de731dc9cb4a", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -202,7 +214,7 @@ } } ], - "lastblockhash": "0xf5b1eb79711089d1fd2a7caf3026bb21153cbcfd32c157ba03ecfac7b60eaa08", + "lastblockhash": "0x6c36735962a89a61bc494de3fe56f6304379eceefcc5babad143d74e9b5d3ebb", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -212,7 +224,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce77", + "balance": "0x04e7bf", "code": "0x", "storage": {} } @@ -226,26 +238,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce77", + "balance": "0x04e7bf", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "002-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-no_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a5df5b6cb89fea599044ba747973ebfdab6825c6e2909482d234b258b4ff6398a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7", + "stateRoot": "0xa5df5b6cb89fea599044ba747973ebfdab6825c6e2909482d234b258b4ff6398", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -262,27 +275,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91" + "hash": "0xeb5d4d1205de62c6b204bd7c2093864a5b1b94447eb05fd3f46bbc8ad3b7d750" }, "blocks": [ { - "rlp": "0xf902d1f90240a0cb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f79c1f1858e40fb857f4baaf29fb17954e0b423e80d6170cdbe7b8180a6e3809a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d3f90242a0eb5d4d1205de62c6b204bd7c2093864a5b1b94447eb05fd3f46bbc8ad3b7d750a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c0e209d0a0d86606562ab24c93ae60d63400a84bf6c8666505a1b658a860d6f0a07d1a46a150fbbd3376b317ea9d38f5192fe4b8edef95a7050b04a5b4893c329ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0790db386a32f2a61fa904250e2e61f58284ed6ecde08d80b4143b6b2798cc647a01c09755ada6fc4836c1f82d3faedfff08f22333fa428770085aeb2ad33d56de4c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", + "parentHash": "0xeb5d4d1205de62c6b204bd7c2093864a5b1b94447eb05fd3f46bbc8ad3b7d750", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf79c1f1858e40fb857f4baaf29fb17954e0b423e80d6170cdbe7b8180a6e3809", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xc0e209d0a0d86606562ab24c93ae60d63400a84bf6c8666505a1b658a860d6f0", + "transactionsTrie": "0x7d1a46a150fbbd3376b317ea9d38f5192fe4b8edef95a7050b04a5b4893c329e", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -290,27 +303,155 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x63fec1369cd9d65b290ae94fc996e8ebf2c79051c6bf35141dd04fae3e4ed933" + "hash": "0xdb270604874c6b8c7e1268500e455e1cedcb4e662bb901fa69e5570a5637b1a4" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", + "maxFeePerGas": "0x0e", "gasLimit": "0x5208", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", + "value": "0x00", "data": "0x", "accessList": [], "maxFeePerBlobGas": "0x01", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], + "v": "0x00", + "r": "0x790db386a32f2a61fa904250e2e61f58284ed6ecde08d80b4143b6b2798cc647", + "s": "0x1c09755ada6fc4836c1f82d3faedfff08f22333fa428770085aeb2ad33d56de4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xeb5d4d1205de62c6b204bd7c2093864a5b1b94447eb05fd3f46bbc8ad3b7d750", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c6f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c6f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ed9b7dc398af6bd039a52ef53d3eccc420c8168806a237b3f1dd7042b33565ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6ed9b7dc398af6bd039a52ef53d3eccc420c8168806a237b3f1dd7042b33565c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe78848df5ec7678fe80b2ed2d7d136206552d49d918dc3f663266096451ddc69" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0e78848df5ec7678fe80b2ed2d7d136206552d49d918dc3f663266096451ddc69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ada079e30b16fee5d54acde3aaa587e8f50a0f82d088400953391ad1fcebe3cda044dcbba521228fac48dfb2979ffc53ca84a4e0f9cc37d931fef34d6167887c52a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a05a1caaf6469249c75dee8f45b645aedf2a4db37b07feb1f8855c71d17ad9621fa01ab9bb529e7f569dbf189e7d449abdd451a6312acc1f4b7721a47554477875b0c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xe78848df5ec7678fe80b2ed2d7d136206552d49d918dc3f663266096451ddc69", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xada079e30b16fee5d54acde3aaa587e8f50a0f82d088400953391ad1fcebe3cd", + "transactionsTrie": "0x44dcbba521228fac48dfb2979ffc53ca84a4e0f9cc37d931fef34d6167887c52", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbbecc667fbffa441144eea203ce7194722ad56414195ede0ce97ecb94875a835" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], "v": "0x01", - "r": "0xa8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3c", - "s": "0x19d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54a", + "r": "0x5a1caaf6469249c75dee8f45b645aedf2a4db37b07feb1f8855c71d17ad9621f", + "s": "0x1ab9bb529e7f569dbf189e7d449abdd451a6312acc1f4b7721a47554477875b0", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -319,7 +460,7 @@ } } ], - "lastblockhash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", + "lastblockhash": "0xe78848df5ec7678fe80b2ed2d7d136206552d49d918dc3f663266096451ddc69", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -329,7 +470,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e38", + "balance": "0x07cf7f", "code": "0x", "storage": {} } @@ -343,26 +484,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e38", + "balance": "0x07cf7f", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "003-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-no_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d8df614c17d708b5767dbee4147a9fce8d4aa91b58eb9f73a9a992825939202ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00bde47c41183d78907c33113ca9c8099f7250502107e7d68b030c4df961981d4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd8df614c17d708b5767dbee4147a9fce8d4aa91b58eb9f73a9a992825939202c", + "stateRoot": "0x0bde47c41183d78907c33113ca9c8099f7250502107e7d68b030c4df961981d4", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -379,27 +521,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xedbe52c59e7e4f635dc9b48be579105755a022e8d93f1bfec5025ee766f8ae65" + "hash": "0xc545c4c25c2b01b821ceabe791fd14ca60f2523211bb9a01fc16af4fbeb63133" }, "blocks": [ { - "rlp": "0xf902d1f90240a0edbe52c59e7e4f635dc9b48be579105755a022e8d93f1bfec5025ee766f8ae65a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04ffeb8ef2784bd8ea71948d0ec13da29f84cf6fadbd4a6f5ce0238cdeaf8e5d3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0834260345355eb2e9de227bf22bd4c82e7ad4c6eb547d3c38a24b23a2f5f8b99a02ec4f27833cb32af4f4b394730a7c2e4a55df4cdb86757bf49bf11809bd2d013c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d3f90242a0c545c4c25c2b01b821ceabe791fd14ca60f2523211bb9a01fc16af4fbeb63133a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e769176f01c055ba61380cc51d2afe1ab240fd703bbf13bc506c64b8cf79c03ea01158bf03210c79ac58259858c3035474b3c30d6ec6b096fad9e785b216e2cfa7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0aaa491157c95990f67c3a61cbffd693ce560cae244b62081f489b0650ed192efa076308e18d21c81bce09aa7398c3c0275b6bb14a1cefe29bd90765a973c20ff9bc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xedbe52c59e7e4f635dc9b48be579105755a022e8d93f1bfec5025ee766f8ae65", + "parentHash": "0xc545c4c25c2b01b821ceabe791fd14ca60f2523211bb9a01fc16af4fbeb63133", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4ffeb8ef2784bd8ea71948d0ec13da29f84cf6fadbd4a6f5ce0238cdeaf8e5d3", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xe769176f01c055ba61380cc51d2afe1ab240fd703bbf13bc506c64b8cf79c03e", + "transactionsTrie": "0x1158bf03210c79ac58259858c3035474b3c30d6ec6b096fad9e785b216e2cfa7", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -407,18 +549,19 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4a749a10981b78fedf237acfb699f534666d1555d62b2ba0bdab803bf6000112" + "hash": "0xed3f37b2ac737d33e7c434f867328ebbab7d2afd032e0a09886c104d2247d1d1" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", "gasLimit": "0x5208", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", + "value": "0x00", "data": "0x", "accessList": [], "maxFeePerBlobGas": "0x01", @@ -426,8 +569,8 @@ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0x834260345355eb2e9de227bf22bd4c82e7ad4c6eb547d3c38a24b23a2f5f8b99", - "s": "0x2ec4f27833cb32af4f4b394730a7c2e4a55df4cdb86757bf49bf11809bd2d013", + "r": "0xaaa491157c95990f67c3a61cbffd693ce560cae244b62081f489b0650ed192ef", + "s": "0x76308e18d21c81bce09aa7398c3c0275b6bb14a1cefe29bd90765a973c20ff9b", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -436,7 +579,7 @@ } } ], - "lastblockhash": "0xedbe52c59e7e4f635dc9b48be579105755a022e8d93f1bfec5025ee766f8ae65", + "lastblockhash": "0xc545c4c25c2b01b821ceabe791fd14ca60f2523211bb9a01fc16af4fbeb63133", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -446,7 +589,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce78", + "balance": "0x043e37", "code": "0x", "storage": {} } @@ -460,26 +603,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce78", + "balance": "0x043e37", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "004-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-single_zero_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a035448580d6f12c45df5cecc15dda76e8b8b06bd9d63cafbdbf8715556e521d5da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a032dd5fe53aa6ead61bda7c27522492836c8f599581a160aa92dd4edb5243a08fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x35448580d6f12c45df5cecc15dda76e8b8b06bd9d63cafbdbf8715556e521d5d", + "stateRoot": "0x32dd5fe53aa6ead61bda7c27522492836c8f599581a160aa92dd4edb5243a08f", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -496,27 +640,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x54b1f20f3829f52de769bd3df3451192ce0f3f860c00cac096271c8483a081c7" + "hash": "0x6c36735962a89a61bc494de3fe56f6304379eceefcc5babad143d74e9b5d3ebb" }, "blocks": [ { - "rlp": "0xf902d1f90240a054b1f20f3829f52de769bd3df3451192ce0f3f860c00cac096271c8483a081c7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07008b41fbcbee97991b922a5556a408db17b288036ac5803aa29eb7b9cd241a4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000080a08ef1265a5c4f2fbb28b31b752023aa14081df4a16fe022560d0f4ded00fcee25a07b9da64739d8916a86844d8d8a63ffea9cb158721262bc1c3d4fec63cb92aa3ec0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf9032ff90242a06c36735962a89a61bc494de3fe56f6304379eceefcc5babad143d74e9b5d3ebba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06a78b65b6845ae90f6ef26cb57e3629efe08f481b2b5cf2b62c95dce065fbfc3a0cb96c32d56a0565485f49d0f736ac53f5d57f13e9710f8eb670ceaf471822158a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0b3791ccacee7cfd0c378c4ddbdfc84a73dacfdff10d5b4a88df6e1a306082621a05d03c060954ae16625a512d58357ae6a19ffa098356522220c455c372b2a0724c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x54b1f20f3829f52de769bd3df3451192ce0f3f860c00cac096271c8483a081c7", + "parentHash": "0x6c36735962a89a61bc494de3fe56f6304379eceefcc5babad143d74e9b5d3ebb", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7008b41fbcbee97991b922a5556a408db17b288036ac5803aa29eb7b9cd241a4", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x6a78b65b6845ae90f6ef26cb57e3629efe08f481b2b5cf2b62c95dce065fbfc3", + "transactionsTrie": "0xcb96c32d56a0565485f49d0f736ac53f5d57f13e9710f8eb670ceaf471822158", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -524,27 +668,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6d0de65fb585320dd2ab768da5c0b17ce53697e15ad4b4c72514da697cf43a11" + "hash": "0xfaaa5e566d2bc0cf7842cefbfdc5281264f0d392090c5270f89ef2dbda247aac" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a40", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", - "data": "0x00", - "accessList": [], + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], "maxFeePerBlobGas": "0x01", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x8ef1265a5c4f2fbb28b31b752023aa14081df4a16fe022560d0f4ded00fcee25", - "s": "0x7b9da64739d8916a86844d8d8a63ffea9cb158721262bc1c3d4fec63cb92aa3e", + "v": "0x01", + "r": "0xb3791ccacee7cfd0c378c4ddbdfc84a73dacfdff10d5b4a88df6e1a306082621", + "s": "0x5d03c060954ae16625a512d58357ae6a19ffa098356522220c455c372b2a0724", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -553,7 +706,7 @@ } } ], - "lastblockhash": "0x54b1f20f3829f52de769bd3df3451192ce0f3f860c00cac096271c8483a081c7", + "lastblockhash": "0x6c36735962a89a61bc494de3fe56f6304379eceefcc5babad143d74e9b5d3ebb", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -563,7 +716,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e3b", + "balance": "0x04e7bf", "code": "0x", "storage": {} } @@ -577,26 +730,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e3b", + "balance": "0x04e7bf", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "005-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-single_zero_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dec943831f9021de4e91dc404c045d518e06e9decaad8758a7b0d7d50c71117fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a5df5b6cb89fea599044ba747973ebfdab6825c6e2909482d234b258b4ff6398a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdec943831f9021de4e91dc404c045d518e06e9decaad8758a7b0d7d50c71117f", + "stateRoot": "0xa5df5b6cb89fea599044ba747973ebfdab6825c6e2909482d234b258b4ff6398", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -613,27 +767,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4a8bad1baeaceaf1337648877ab978da11faecf2d2b59d517a26646eebf417d4" + "hash": "0xeb5d4d1205de62c6b204bd7c2093864a5b1b94447eb05fd3f46bbc8ad3b7d750" }, "blocks": [ { - "rlp": "0xf902d1f90240a04a8bad1baeaceaf1337648877ab978da11faecf2d2b59d517a26646eebf417d4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0777d6033b30371032625cc3787873ca0e65efc78a7ce075c281db429d56ba27ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000080a094528c7b2c3624da6e73d31433bec9ae2cb5ad6c5a295a0a6d1acb1a91fd5151a0403579728d3fb6070730f45431672abdaa69acf6c69c8248b9913e8f802666e5c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d3f90242a0eb5d4d1205de62c6b204bd7c2093864a5b1b94447eb05fd3f46bbc8ad3b7d750a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c0e209d0a0d86606562ab24c93ae60d63400a84bf6c8666505a1b658a860d6f0a0db7c06efccd9c45ccffa741bc33185c7a1bbd9278e85068c2249ff3f8c477b4fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0d15cf560343e72634e11af550d1d9a6ba27df5b89701846555dd832336be3d14a01fc0642ae659cb7e409af024d94b73740d70bb9b2c8ca95302c6588866b71a9ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x4a8bad1baeaceaf1337648877ab978da11faecf2d2b59d517a26646eebf417d4", + "parentHash": "0xeb5d4d1205de62c6b204bd7c2093864a5b1b94447eb05fd3f46bbc8ad3b7d750", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x777d6033b30371032625cc3787873ca0e65efc78a7ce075c281db429d56ba27e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xc0e209d0a0d86606562ab24c93ae60d63400a84bf6c8666505a1b658a860d6f0", + "transactionsTrie": "0xdb7c06efccd9c45ccffa741bc33185c7a1bbd9278e85068c2249ff3f8c477b4f", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -641,27 +795,155 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbcaf62ad7adcac2d3e739312761ba0c469b2e2c2259e8eef30208e413640a6fd" + "hash": "0x779b88d66e693970d92404fcb63a3155312d54ea0541745bb8201ae8e1c6e03a" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", "gasLimit": "0x5208", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", - "data": "0x00", + "data": "0x", "accessList": [], "maxFeePerBlobGas": "0x01", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x94528c7b2c3624da6e73d31433bec9ae2cb5ad6c5a295a0a6d1acb1a91fd5151", - "s": "0x403579728d3fb6070730f45431672abdaa69acf6c69c8248b9913e8f802666e5", + "v": "0x01", + "r": "0xd15cf560343e72634e11af550d1d9a6ba27df5b89701846555dd832336be3d14", + "s": "0x1fc0642ae659cb7e409af024d94b73740d70bb9b2c8ca95302c6588866b71a9a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xeb5d4d1205de62c6b204bd7c2093864a5b1b94447eb05fd3f46bbc8ad3b7d750", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c6f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c6f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ed9b7dc398af6bd039a52ef53d3eccc420c8168806a237b3f1dd7042b33565ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6ed9b7dc398af6bd039a52ef53d3eccc420c8168806a237b3f1dd7042b33565c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe78848df5ec7678fe80b2ed2d7d136206552d49d918dc3f663266096451ddc69" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0e78848df5ec7678fe80b2ed2d7d136206552d49d918dc3f663266096451ddc69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ada079e30b16fee5d54acde3aaa587e8f50a0f82d088400953391ad1fcebe3cda087845f12a8a229b1bf9c43220350a309c45ea4bc4facd2ee5c17df23a525cc0ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0920cda466b2e2a0c0bdb9299fafe51c8404726bf6066d19e2d2deaa901302fb3a00c31aea19992ad8fd671af4a88ad02440200457dfdd1793bea050e6c5541d962c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xe78848df5ec7678fe80b2ed2d7d136206552d49d918dc3f663266096451ddc69", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xada079e30b16fee5d54acde3aaa587e8f50a0f82d088400953391ad1fcebe3cd", + "transactionsTrie": "0x87845f12a8a229b1bf9c43220350a309c45ea4bc4facd2ee5c17df23a525cc0e", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb0650f4e670ff3c03c0d223c6d8408ab9016617a6b410ca6a2f57b61d802916a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x920cda466b2e2a0c0bdb9299fafe51c8404726bf6066d19e2d2deaa901302fb3", + "s": "0x0c31aea19992ad8fd671af4a88ad02440200457dfdd1793bea050e6c5541d962", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -670,7 +952,7 @@ } } ], - "lastblockhash": "0x4a8bad1baeaceaf1337648877ab978da11faecf2d2b59d517a26646eebf417d4", + "lastblockhash": "0xe78848df5ec7678fe80b2ed2d7d136206552d49d918dc3f663266096451ddc69", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -680,7 +962,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce7b", + "balance": "0x07cf7f", "code": "0x", "storage": {} } @@ -694,26 +976,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce7b", + "balance": "0x07cf7f", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "006-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-single_zero_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d70f38c884a1942b5bd1e5d1fbe59571414d13d2fb591b6885baa68928542905a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd70f38c884a1942b5bd1e5d1fbe59571414d13d2fb591b6885baa68928542905", + "stateRoot": "0x4fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -730,27 +1013,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0c5f9f759047d583e64e9196639334b39fba4bedb572b96dca921cd24e6e6945" + "hash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91" }, "blocks": [ { - "rlp": "0xf902d1f90240a00c5f9f759047d583e64e9196639334b39fba4bedb572b96dca921cd24e6e6945a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b71bc722a367125fd65879c1934564af8091c7bf0eba57939353de343a6cd1e8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a014ca5ead067aa9c1930c4ef5bfee0f85796dc060ee0616b7de4cad9bed340cfea04133ace6ec58338107311ae2604144f7268e75296d112c7d40a42911a53084d7c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d3f90242a0cb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06f987ac7585373608414a8fdcac15855ce16cf9e298a3aafad44c53e491eee32a0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x0c5f9f759047d583e64e9196639334b39fba4bedb572b96dca921cd24e6e6945", + "parentHash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xb71bc722a367125fd65879c1934564af8091c7bf0eba57939353de343a6cd1e8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x6f987ac7585373608414a8fdcac15855ce16cf9e298a3aafad44c53e491eee32", + "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -758,8 +1041,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2263a62b1eb531557e29502ea5acad6387adb55775cc8ded795fbf56f5dfbdf1" + "hash": "0x4c889e4920e588e8279b9d79452a1eed9852c6b314eb44cb74c229ffebabfd98" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -770,15 +1054,13053 @@ "gasLimit": "0x5208", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xa8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3c", + "s": "0x19d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ad990f0dd03e2ba6cf130d10d841f4cefc994fa14000e10364e264ade621572ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xad990f0dd03e2ba6cf130d10d841f4cefc994fa14000e10364e264ade621572e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a032e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03be7571afec31233f4aee8db9b34139e00bfcc5319c9389fd785eaed2b7856b1a0bd0ee0fa631e8f166da61efcca8b2409f766f580a3ea86556c765adee127ac34a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0190431c9260ce3a7aadb89d9096ddadad99cae489d8522ded951c69648ea5a4fa035c57b199b3f9bfacbbaad7016a4883bddde3cd9f899b9b4effe158cb42eaaebc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3be7571afec31233f4aee8db9b34139e00bfcc5319c9389fd785eaed2b7856b1", + "transactionsTrie": "0xbd0ee0fa631e8f166da61efcca8b2409f766f580a3ea86556c765adee127ac34", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x45ec49682d0bfe7e9059c6ecc7cc1b94c5dd82d214ad9913a05946b8d1ebd7bf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x190431c9260ce3a7aadb89d9096ddadad99cae489d8522ded951c69648ea5a4f", + "s": "0x35c57b199b3f9bfacbbaad7016a4883bddde3cd9f899b9b4effe158cb42eaaeb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06579cf5b9adff215b2eba9a8d9133d9a3d4d88365eb53f1887eb73c2596c6680a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6579cf5b9adff215b2eba9a8d9133d9a3d4d88365eb53f1887eb73c2596c6680", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a039d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68eaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04de6456495fc60a8a9963dcbf609bed08163d1d6f6e62fe53fa8e3065aadfb14a03d1c95cd36c11fb9e62d41f77dbecb0702f3e48a04953589b21b9225273af0dba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a00a7af01b973d08cfb7788839808143ccfd0925f78e58d6f9af35ec955c4145d5a04a3206e6255ab16fde00a9ccf7ef66302551a5e808591d2ea6beadfcf64d5b2cc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4de6456495fc60a8a9963dcbf609bed08163d1d6f6e62fe53fa8e3065aadfb14", + "transactionsTrie": "0x3d1c95cd36c11fb9e62d41f77dbecb0702f3e48a04953589b21b9225273af0db", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6e0874ac33a68aa5110476ba51580e05095099e287ada092a72e8a91dbadcec8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x0a7af01b973d08cfb7788839808143ccfd0925f78e58d6f9af35ec955c4145d5", + "s": "0x4a3206e6255ab16fde00a9ccf7ef66302551a5e808591d2ea6beadfcf64d5b2c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c70", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05b224a292d16711d6814fa0249afe93cd70181657790fa6f23128190d03cebc8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5b224a292d16711d6814fa0249afe93cd70181657790fa6f23128190d03cebc8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0dd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa016f4aeda3219b10f893ab839131bcea3d08c08cc707ef49a9e529bc233784bfca03d851dee1bddab8a902f3878c304e1a13d0d0b7767e4ea1515e5438f0885a5bca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0a36355b6293352f334e73ee4aeecf400a0f28ceea256ee7c7bdd4e73ba73f132a0753117fff56fff8d0522f344bfd6fa96663242917ba835ef810551f2780d4224c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x16f4aeda3219b10f893ab839131bcea3d08c08cc707ef49a9e529bc233784bfc", + "transactionsTrie": "0x3d851dee1bddab8a902f3878c304e1a13d0d0b7767e4ea1515e5438f0885a5bc", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6187d3ef463c9be131bd5075d2fc7d7dcbed6cdf4cd41972d8c9f320d0d5fe28" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa36355b6293352f334e73ee4aeecf400a0f28ceea256ee7c7bdd4e73ba73f132", + "s": "0x753117fff56fff8d0522f344bfd6fa96663242917ba835ef810551f2780d4224", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cf80", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0cb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06f987ac7585373608414a8fdcac15855ce16cf9e298a3aafad44c53e491eee32a07d0e64d1f75372483a799b52f416a965de134d69aa1a7c1b8ace4be91cc984bea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0e124bbb45daf2d0803a476a59864ef5fc1b24877e0d64ce75ef2d61f298e9aaca00386c51e69fee300077c3e64635f9e85c805b2fb94b419514672b171e2e79b6ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6f987ac7585373608414a8fdcac15855ce16cf9e298a3aafad44c53e491eee32", + "transactionsTrie": "0x7d0e64d1f75372483a799b52f416a965de134d69aa1a7c1b8ace4be91cc984be", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x60910637293becfbf8476216bb7e1812500f0c2fbaa7462414ea9557a22396a9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xe124bbb45daf2d0803a476a59864ef5fc1b24877e0d64ce75ef2d61f298e9aac", + "s": "0x0386c51e69fee300077c3e64635f9e85c805b2fb94b419514672b171e2e79b6e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ad990f0dd03e2ba6cf130d10d841f4cefc994fa14000e10364e264ade621572ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xad990f0dd03e2ba6cf130d10d841f4cefc994fa14000e10364e264ade621572e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a032e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03be7571afec31233f4aee8db9b34139e00bfcc5319c9389fd785eaed2b7856b1a011931e2aead540ee82d8cd7dbbd59206fb7a9936bbab7e442f86d9e11c52e0d0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a094519cff6477fad916443eff9b13139b08e7323688cb76ad8c069efbbc06b981a0378016270813415c8b05bb2e0855f0b0c444a8f2d2f767b332a7e4eecb58d367c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3be7571afec31233f4aee8db9b34139e00bfcc5319c9389fd785eaed2b7856b1", + "transactionsTrie": "0x11931e2aead540ee82d8cd7dbbd59206fb7a9936bbab7e442f86d9e11c52e0d0", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6db8f06e177b32e382fe60c69a4428ea0f9350ad1a9deafc26c3af0f84eaeede" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x94519cff6477fad916443eff9b13139b08e7323688cb76ad8c069efbbc06b981", + "s": "0x378016270813415c8b05bb2e0855f0b0c444a8f2d2f767b332a7e4eecb58d367", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06579cf5b9adff215b2eba9a8d9133d9a3d4d88365eb53f1887eb73c2596c6680a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6579cf5b9adff215b2eba9a8d9133d9a3d4d88365eb53f1887eb73c2596c6680", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a039d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68eaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04de6456495fc60a8a9963dcbf609bed08163d1d6f6e62fe53fa8e3065aadfb14a0279060587b84b3659ac3b72fa584186b82547c10d63d2a0e9a19e9c5156b307ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0624a140b38ed4cf7d86f49a3ab909b9658b16a4b3d07c45254a730501e2b86a3a00bfdd1e081bbabd86bb4b18047a78cab739f6f9be8a6c1126d5f2c456b63fb95c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4de6456495fc60a8a9963dcbf609bed08163d1d6f6e62fe53fa8e3065aadfb14", + "transactionsTrie": "0x279060587b84b3659ac3b72fa584186b82547c10d63d2a0e9a19e9c5156b307b", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x95255f3985d7ce2c86af463f963206761f990cd021881184dfd45821acd07089" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x624a140b38ed4cf7d86f49a3ab909b9658b16a4b3d07c45254a730501e2b86a3", + "s": "0x0bfdd1e081bbabd86bb4b18047a78cab739f6f9be8a6c1126d5f2c456b63fb95", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c70", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05b224a292d16711d6814fa0249afe93cd70181657790fa6f23128190d03cebc8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5b224a292d16711d6814fa0249afe93cd70181657790fa6f23128190d03cebc8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0dd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa016f4aeda3219b10f893ab839131bcea3d08c08cc707ef49a9e529bc233784bfca02c8e51ab121b63cd95074e56d2d0c9d26a8c7234df08f6ea87cdd3fccad1938ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0edf6da8461c595f9fc37af1beeabac52894d5a1424a1f83224f54a50303dc71fa04ab3cb3fa04b24975aa59ee374807eabb654d8ce041247b50f84a9bf6fb5ef6fc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x16f4aeda3219b10f893ab839131bcea3d08c08cc707ef49a9e529bc233784bfc", + "transactionsTrie": "0x2c8e51ab121b63cd95074e56d2d0c9d26a8c7234df08f6ea87cdd3fccad1938e", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8015e9c31f7b9e616d9e783cbb9b0b7906b96e82622ec5df65a07f166ba9bfd4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xedf6da8461c595f9fc37af1beeabac52894d5a1424a1f83224f54a50303dc71f", + "s": "0x4ab3cb3fa04b24975aa59ee374807eabb654d8ce041247b50f84a9bf6fb5ef6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cf80", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05e8bb93275c503e290bfb87e07384dd41d34067bff341e1e62192cb94f907e22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5e8bb93275c503e290bfb87e07384dd41d34067bff341e1e62192cb94f907e22", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x340440b63da6196f06e3e42abf3e6dcdf163e2c382fab8337cc0deef501bdc49" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0340440b63da6196f06e3e42abf3e6dcdf163e2c382fab8337cc0deef501bdc49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05d33199ffee956455c5d8b36c665c7502dd8dd452803eedffcebdd77f1baf269a06fb2250c55086a4dca1665a0f319d8e1c7915c49c0266c0a737cd0348fd11bc4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0d63db34ac58ec38d12d12ce50c32c7ffc0a12b9c96e0073da56118a02e1c20c0a00479d9be99ba0ae77b7d2d68c89d497a0912e45aa79cc7d7675ed02e4148e8a9c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x340440b63da6196f06e3e42abf3e6dcdf163e2c382fab8337cc0deef501bdc49", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5d33199ffee956455c5d8b36c665c7502dd8dd452803eedffcebdd77f1baf269", + "transactionsTrie": "0x6fb2250c55086a4dca1665a0f319d8e1c7915c49c0266c0a737cd0348fd11bc4", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6722bc7d7323645c9e3ac66e948f23224ea9bb901f95687af6b3be8661da0dd7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xd63db34ac58ec38d12d12ce50c32c7ffc0a12b9c96e0073da56118a02e1c20c0", + "s": "0x0479d9be99ba0ae77b7d2d68c89d497a0912e45aa79cc7d7675ed02e4148e8a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x340440b63da6196f06e3e42abf3e6dcdf163e2c382fab8337cc0deef501bdc49", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e53", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e53", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04bfdb327efbddf0c93bc2a6a239bc01c189e5aef3a704fa7dc19d3236fc27e33a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4bfdb327efbddf0c93bc2a6a239bc01c189e5aef3a704fa7dc19d3236fc27e33", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd2fb18fce515a54df366ec9b3d1dd993e138bc4b30a036f74b826b0164c5568d" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0d2fb18fce515a54df366ec9b3d1dd993e138bc4b30a036f74b826b0164c5568da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa029163843cc598de74a597789e4dbbf893c31e3426d0c220fecd3ecfa2ef001b3a011cf23f643ddb923dd6fb5e7c801206a6e5a3844d0ad269d052e4e7166ab87f5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0292e89c324207a7478f4e9e39bdfb2b11c7e772b004cb543673df94d2887ccdea056d43c6b2fcdf6728dbeb8c96ff09f9a82775869f83835ab4b05aee56cf7ad6fc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xd2fb18fce515a54df366ec9b3d1dd993e138bc4b30a036f74b826b0164c5568d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x29163843cc598de74a597789e4dbbf893c31e3426d0c220fecd3ecfa2ef001b3", + "transactionsTrie": "0x11cf23f643ddb923dd6fb5e7c801206a6e5a3844d0ad269d052e4e7166ab87f5", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5d6a1f881662c43d15412cbe64db7680ae83acc792fdcc8210b3b2a55008346a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x292e89c324207a7478f4e9e39bdfb2b11c7e772b004cb543673df94d2887ccde", + "s": "0x56d43c6b2fcdf6728dbeb8c96ff09f9a82775869f83835ab4b05aee56cf7ad6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xd2fb18fce515a54df366ec9b3d1dd993e138bc4b30a036f74b826b0164c5568d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7db", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7db", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ee8599b08c6750ec302bcb5b0eb726a8a48816bb2b082ecdd8d79d7e20fc41e9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xee8599b08c6750ec302bcb5b0eb726a8a48816bb2b082ecdd8d79d7e20fc41e9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcbe60335757dc1c629ab47b40e18120eb1cf31ca94ddab010a0d1f4f61dff2d2" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0cbe60335757dc1c629ab47b40e18120eb1cf31ca94ddab010a0d1f4f61dff2d2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a47bf86ebfd709519346490c9473d3148d498811a4c998e8915561afad9fce8ea0557715b6780aebf8a0a426024cefcaaff18bbb785653d1859765e3fda29f4707a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e82520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000080a05f88705bb859d673345755d0405b6dc4787bb00ba41bce9cb43f5f4b06ddee0fa04965b9f492f0e4ef3b4fdc72b98309a14a00ad06c6bb46e566e3093025cfa94fc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xcbe60335757dc1c629ab47b40e18120eb1cf31ca94ddab010a0d1f4f61dff2d2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa47bf86ebfd709519346490c9473d3148d498811a4c998e8915561afad9fce8e", + "transactionsTrie": "0x557715b6780aebf8a0a426024cefcaaff18bbb785653d1859765e3fda29f4707", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa85291f6a3e8b36b03ce0c73f1f402c21486ac518d832b357387a1fa0a435da7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x5f88705bb859d673345755d0405b6dc4787bb00ba41bce9cb43f5f4b06ddee0f", + "s": "0x4965b9f492f0e4ef3b4fdc72b98309a14a00ad06c6bb46e566e3093025cfa94f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xcbe60335757dc1c629ab47b40e18120eb1cf31ca94ddab010a0d1f4f61dff2d2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a012e8c67a3da247cdcc077d0c3edf07dc73cbe01f4c5f3366030c8ec9a5e0a14ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x12e8c67a3da247cdcc077d0c3edf07dc73cbe01f4c5f3366030c8ec9a5e0a14e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x03aba2c68bf5b2634a5f5e13b80f1a63a321136efa8e2dd80a53f3ab1aa59207" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a003aba2c68bf5b2634a5f5e13b80f1a63a321136efa8e2dd80a53f3ab1aa59207a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f52a62ddf6943413057be2f74f3fcf520ed0bcd3723df456e163e08b6412e964a0b4e2bc042dca3e98aa184157a9d26704b03274a437a927c5b07d30d225097f18a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a01212dd963b86a994ea29bac5adceb1b164f3c394f672e9cb7fa09eb662b49fd3a03996bdb0f963b0c9e86ce0cb114101c5c5679029c8cfbe35e5a609e913d6dd38c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x03aba2c68bf5b2634a5f5e13b80f1a63a321136efa8e2dd80a53f3ab1aa59207", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf52a62ddf6943413057be2f74f3fcf520ed0bcd3723df456e163e08b6412e964", + "transactionsTrie": "0xb4e2bc042dca3e98aa184157a9d26704b03274a437a927c5b07d30d225097f18", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x67578b66dc8406dd6d5df1217fff469705963d606ab923fdffccb2b93d50c62a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x1212dd963b86a994ea29bac5adceb1b164f3c394f672e9cb7fa09eb662b49fd3", + "s": "0x3996bdb0f963b0c9e86ce0cb114101c5c5679029c8cfbe35e5a609e913d6dd38", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x03aba2c68bf5b2634a5f5e13b80f1a63a321136efa8e2dd80a53f3ab1aa59207", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05e8bb93275c503e290bfb87e07384dd41d34067bff341e1e62192cb94f907e22a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5e8bb93275c503e290bfb87e07384dd41d34067bff341e1e62192cb94f907e22", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x340440b63da6196f06e3e42abf3e6dcdf163e2c382fab8337cc0deef501bdc49" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0340440b63da6196f06e3e42abf3e6dcdf163e2c382fab8337cc0deef501bdc49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05d33199ffee956455c5d8b36c665c7502dd8dd452803eedffcebdd77f1baf269a03d7f395c0cec63a58d6d86d575ec725bab0aa1ae8e86c1f19009608b82a727bba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070782520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000080a00915c912e976133b6671b1c386032d861fe05162455ee0dc06f48bc9ae57af92a06e1fc3d16717d2aa3a3445a29aaa7498771f57b7ca0278da129695f364f4ed1ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x340440b63da6196f06e3e42abf3e6dcdf163e2c382fab8337cc0deef501bdc49", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5d33199ffee956455c5d8b36c665c7502dd8dd452803eedffcebdd77f1baf269", + "transactionsTrie": "0x3d7f395c0cec63a58d6d86d575ec725bab0aa1ae8e86c1f19009608b82a727bb", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe5dddedac8e966857052ecd4e41e90f9f24d3ccf017424f36b64e76c0307228e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0915c912e976133b6671b1c386032d861fe05162455ee0dc06f48bc9ae57af92", + "s": "0x6e1fc3d16717d2aa3a3445a29aaa7498771f57b7ca0278da129695f364f4ed1a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x340440b63da6196f06e3e42abf3e6dcdf163e2c382fab8337cc0deef501bdc49", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e53", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e53", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04bfdb327efbddf0c93bc2a6a239bc01c189e5aef3a704fa7dc19d3236fc27e33a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4bfdb327efbddf0c93bc2a6a239bc01c189e5aef3a704fa7dc19d3236fc27e33", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd2fb18fce515a54df366ec9b3d1dd993e138bc4b30a036f74b826b0164c5568d" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0d2fb18fce515a54df366ec9b3d1dd993e138bc4b30a036f74b826b0164c5568da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa029163843cc598de74a597789e4dbbf893c31e3426d0c220fecd3ecfa2ef001b3a0daed9f41bc045dcf3198ac34cc5ab313d411deee9bb5d9d2e6aaf2e660c5aebfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0d9fe1e438a9b3d91bf162e5c13d40dbd1f015d31c435f4d113e6b8c485389ee6a00712255536b24cf29d6716bc80a2dcf50327ba39be52308ddaded33a7865c0e3c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xd2fb18fce515a54df366ec9b3d1dd993e138bc4b30a036f74b826b0164c5568d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x29163843cc598de74a597789e4dbbf893c31e3426d0c220fecd3ecfa2ef001b3", + "transactionsTrie": "0xdaed9f41bc045dcf3198ac34cc5ab313d411deee9bb5d9d2e6aaf2e660c5aebf", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x297e79801381e99cce9d7bec8d7bf2b3d6e00855f2d25103ef17b9476eeb5f5f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xd9fe1e438a9b3d91bf162e5c13d40dbd1f015d31c435f4d113e6b8c485389ee6", + "s": "0x0712255536b24cf29d6716bc80a2dcf50327ba39be52308ddaded33a7865c0e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xd2fb18fce515a54df366ec9b3d1dd993e138bc4b30a036f74b826b0164c5568d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7db", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7db", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ee8599b08c6750ec302bcb5b0eb726a8a48816bb2b082ecdd8d79d7e20fc41e9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xee8599b08c6750ec302bcb5b0eb726a8a48816bb2b082ecdd8d79d7e20fc41e9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcbe60335757dc1c629ab47b40e18120eb1cf31ca94ddab010a0d1f4f61dff2d2" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0cbe60335757dc1c629ab47b40e18120eb1cf31ca94ddab010a0d1f4f61dff2d2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a47bf86ebfd709519346490c9473d3148d498811a4c998e8915561afad9fce8ea0f4e3fdca083eeb84f31f8dec68b1a127b39af3448ecb07e1f14407dee2a52bc1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e82520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06853cf535868b0816ad0556ebeca098be6e4a272d191948fafd99242d8e7e587a07362db7dc501b0784860424427c60e39f098f25bae42a19f40425c523cdb5d83c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xcbe60335757dc1c629ab47b40e18120eb1cf31ca94ddab010a0d1f4f61dff2d2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa47bf86ebfd709519346490c9473d3148d498811a4c998e8915561afad9fce8e", + "transactionsTrie": "0xf4e3fdca083eeb84f31f8dec68b1a127b39af3448ecb07e1f14407dee2a52bc1", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa6602d6e0b5cced3aad7aa857720ba2c3324f2d8d47cdc8791fdd424bd3e0ba1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6853cf535868b0816ad0556ebeca098be6e4a272d191948fafd99242d8e7e587", + "s": "0x7362db7dc501b0784860424427c60e39f098f25bae42a19f40425c523cdb5d83", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xcbe60335757dc1c629ab47b40e18120eb1cf31ca94ddab010a0d1f4f61dff2d2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a012e8c67a3da247cdcc077d0c3edf07dc73cbe01f4c5f3366030c8ec9a5e0a14ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x12e8c67a3da247cdcc077d0c3edf07dc73cbe01f4c5f3366030c8ec9a5e0a14e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x03aba2c68bf5b2634a5f5e13b80f1a63a321136efa8e2dd80a53f3ab1aa59207" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a003aba2c68bf5b2634a5f5e13b80f1a63a321136efa8e2dd80a53f3ab1aa59207a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f52a62ddf6943413057be2f74f3fcf520ed0bcd3723df456e163e08b6412e964a0a9dcfbaf62c5ca3419b24cd727c071dadaa48a16233a45a5980322df10a18ddea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0f64e93e9ea155f73f074672dfd6ec7c3e11e3695a13f6e61fd22f8680a3e8790a01d51713aae874deb23a3580c92212d13e11ff8f99d5ebeed5045e27fdaa60f10c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x03aba2c68bf5b2634a5f5e13b80f1a63a321136efa8e2dd80a53f3ab1aa59207", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf52a62ddf6943413057be2f74f3fcf520ed0bcd3723df456e163e08b6412e964", + "transactionsTrie": "0xa9dcfbaf62c5ca3419b24cd727c071dadaa48a16233a45a5980322df10a18dde", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb5d3359123a4e36ed98ff8997e1125427bff5dfd9912e4cc14cad73a3e5617aa" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xf64e93e9ea155f73f074672dfd6ec7c3e11e3695a13f6e61fd22f8680a3e8790", + "s": "0x1d51713aae874deb23a3580c92212d13e11ff8f99d5ebeed5045e27fdaa60f10", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x03aba2c68bf5b2634a5f5e13b80f1a63a321136efa8e2dd80a53f3ab1aa59207", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0aa8fb992a4483e12456078576088af0cbfb3f12a8e0ec44c7994ae63bfd1a925a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaa8fb992a4483e12456078576088af0cbfb3f12a8e0ec44c7994ae63bfd1a925", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a024e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c910ce5b92c7424ec3e1d414c2b484f11d660e1658726b9e5cd37f0a7d8efaa0df3d3210e6701142c63eee1191ba213ebf77aed52ec4dd37e0c92496e367c472a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0703aa500a86c6fdaf42c6d911603adbe2b76169e1b197b8aafcc8875a3eb0feda006cc33c2670ab1c6de81af8044eacf09d652449d41625141d8a99343234ba66bc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x70c910ce5b92c7424ec3e1d414c2b484f11d660e1658726b9e5cd37f0a7d8efa", + "transactionsTrie": "0xdf3d3210e6701142c63eee1191ba213ebf77aed52ec4dd37e0c92496e367c472", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x352c3b76ceac6abcc5b1f39ce393c6b416fb2ecec885c6fba98638c7316f20f7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x703aa500a86c6fdaf42c6d911603adbe2b76169e1b197b8aafcc8875a3eb0fed", + "s": "0x06cc33c2670ab1c6de81af8044eacf09d652449d41625141d8a99343234ba66b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0afb183b66d53020f194c696741e227594e4d775917ebc43b3eae49a3f89cc77aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xafb183b66d53020f194c696741e227594e4d775917ebc43b3eae49a3f89cc77a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a00cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b025630c33b48922b1fadfb3488b19f39281e755e01ab61b495ce14cc491d55ea05a95af14845332ad94fa8ec3338b6f37cc9aa6747187350df82b87e5caefc77ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0a634a3fffd4f15bce2dbe4e02e84d6061b6b6b3b260886a3c670173e497628cca066561151ee507f9a15697b91636c537114a259bd7667697072f48037e3102705c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb025630c33b48922b1fadfb3488b19f39281e755e01ab61b495ce14cc491d55e", + "transactionsTrie": "0x5a95af14845332ad94fa8ec3338b6f37cc9aa6747187350df82b87e5caefc77c", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf258a3a018568371892e21ccf416c0f14253209ed11f9ec2126473b2511aa2ce" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xa634a3fffd4f15bce2dbe4e02e84d6061b6b6b3b260886a3c670173e497628cc", + "s": "0x66561151ee507f9a15697b91636c537114a259bd7667697072f48037e3102705", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0db1ad62d83c53fd0aae9ed1eb80aaaa3bccf3c8aa0346e6ac32b9b3ac968a097a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdb1ad62d83c53fd0aae9ed1eb80aaaa3bccf3c8aa0346e6ac32b9b3ac968a097", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cb27bbb1e93f4162ba3766c194e2c4f19d9c3c720b0943226cb7757815b3e1baa08af0e662a094b3158560c3898730f1527c1075e9d3796a37e4848fde5babe1a5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e82520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0a0649ae6e408661fce3b932e6fb5a337bd778aa46f2b8a397f6d0ca4fa29a444a038aef9bd08580b41755dd8227945d0efb29e1ff3ac51a856dc66875d49ba0794c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcb27bbb1e93f4162ba3766c194e2c4f19d9c3c720b0943226cb7757815b3e1ba", + "transactionsTrie": "0x8af0e662a094b3158560c3898730f1527c1075e9d3796a37e4848fde5babe1a5", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x933aa5f7221ee3e786ee0378f0471dada0a5a02c910c8f72f0067f56238a0f18" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa0649ae6e408661fce3b932e6fb5a337bd778aa46f2b8a397f6d0ca4fa29a444", + "s": "0x38aef9bd08580b41755dd8227945d0efb29e1ff3ac51a856dc66875d49ba0794", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bbb6ac24b3db4fcbb97f833f306e0d09de57ea67d908481571c171cd3b0368c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbbb6ac24b3db4fcbb97f833f306e0d09de57ea67d908481571c171cd3b0368c7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a05d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e950f7959edf7c8baacafb7d00292caeaaad23d4661b347d7cda6da9a779343a0b40d96254da8634230ccffab6d5339d62dd626c6794168fe99f194dec1010dcaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a08ac063a37a0cce37e416eaf259b2ec6fc933213e7fd2fad3d398e1f9dfebdf5da0168dbf0e956fdc3640470db838436c7aec888358a660fd20d88949459d61d109c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e950f7959edf7c8baacafb7d00292caeaaad23d4661b347d7cda6da9a779343", + "transactionsTrie": "0xb40d96254da8634230ccffab6d5339d62dd626c6794168fe99f194dec1010dca", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0769975d3e0e294c73c722c76d20bde4dd6d2c72d476a74c5d173d79977cb767" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8ac063a37a0cce37e416eaf259b2ec6fc933213e7fd2fad3d398e1f9dfebdf5d", + "s": "0x168dbf0e956fdc3640470db838436c7aec888358a660fd20d88949459d61d109", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0aa8fb992a4483e12456078576088af0cbfb3f12a8e0ec44c7994ae63bfd1a925a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaa8fb992a4483e12456078576088af0cbfb3f12a8e0ec44c7994ae63bfd1a925", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a024e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c910ce5b92c7424ec3e1d414c2b484f11d660e1658726b9e5cd37f0a7d8efaa09428fa4766f398c4b27a4997159b5b3a719c2b06f05ccd253df1df27593507f7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070782520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0434bec1c9893eaee4a25fae57740934e9aaadebf06f31ddbb942a49a9d4527a7a07e7b4e7c75affa9240c2c75901235acd72db9ccf283915a00530063c6a738fc7c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x70c910ce5b92c7424ec3e1d414c2b484f11d660e1658726b9e5cd37f0a7d8efa", + "transactionsTrie": "0x9428fa4766f398c4b27a4997159b5b3a719c2b06f05ccd253df1df27593507f7", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4057560958a37620ae31b16fb571f4f9e51bfd513bcdea1b8bfd66f1ebac2093" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x434bec1c9893eaee4a25fae57740934e9aaadebf06f31ddbb942a49a9d4527a7", + "s": "0x7e7b4e7c75affa9240c2c75901235acd72db9ccf283915a00530063c6a738fc7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0afb183b66d53020f194c696741e227594e4d775917ebc43b3eae49a3f89cc77aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xafb183b66d53020f194c696741e227594e4d775917ebc43b3eae49a3f89cc77a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a00cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b025630c33b48922b1fadfb3488b19f39281e755e01ab61b495ce14cc491d55ea02f6925cd8e23339c36f7979eac338593b53f7476b839bbbeeffec3d8d8727307a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0702d0dff58e3d98b762b455db3217c937e6715afb73f3b9409a79d4b12abfbbba06921ef68f62aa985b464682a39282a7ff105b3ac8fbdbdf2f59267cdfbbdf294c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb025630c33b48922b1fadfb3488b19f39281e755e01ab61b495ce14cc491d55e", + "transactionsTrie": "0x2f6925cd8e23339c36f7979eac338593b53f7476b839bbbeeffec3d8d8727307", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd065fc283bb64b02f0b08872ca3ba2b36dddc3b67d5d6f774cd0c90873713dc5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x702d0dff58e3d98b762b455db3217c937e6715afb73f3b9409a79d4b12abfbbb", + "s": "0x6921ef68f62aa985b464682a39282a7ff105b3ac8fbdbdf2f59267cdfbbdf294", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0db1ad62d83c53fd0aae9ed1eb80aaaa3bccf3c8aa0346e6ac32b9b3ac968a097a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdb1ad62d83c53fd0aae9ed1eb80aaaa3bccf3c8aa0346e6ac32b9b3ac968a097", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cb27bbb1e93f4162ba3766c194e2c4f19d9c3c720b0943226cb7757815b3e1baa029e030109445a1f4dbac02f90caca47eca5b31c548d155dfc33fd2060c1c6a16a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e82520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06776627cd2b4fc949b3eeb1544db7190d18bbb037381f46ce22ff99e7ef14de0a026a86ba1df241539425ae9d5b39fbe53074821b7320d3541b8fae0d9b74e52c2c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcb27bbb1e93f4162ba3766c194e2c4f19d9c3c720b0943226cb7757815b3e1ba", + "transactionsTrie": "0x29e030109445a1f4dbac02f90caca47eca5b31c548d155dfc33fd2060c1c6a16", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdf5009d5b2a832d1833af1940f39d424a92f03826f3556b545af6be753ba5ee3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6776627cd2b4fc949b3eeb1544db7190d18bbb037381f46ce22ff99e7ef14de0", + "s": "0x26a86ba1df241539425ae9d5b39fbe53074821b7320d3541b8fae0d9b74e52c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bbb6ac24b3db4fcbb97f833f306e0d09de57ea67d908481571c171cd3b0368c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbbb6ac24b3db4fcbb97f833f306e0d09de57ea67d908481571c171cd3b0368c7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a05d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e950f7959edf7c8baacafb7d00292caeaaad23d4661b347d7cda6da9a779343a005ed18d89f9478098f5ccfc2f6394f717b5977afa87fafd0e7e4e0662b95fce6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0b679ec96ca94636a291df54af0e8700214a30b5744b9b8c6ded35fef4dfebfc3a071f51659c579462d6058a9016b1c575ef8a939ee1023e675a60fc9ed442a82adc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e950f7959edf7c8baacafb7d00292caeaaad23d4661b347d7cda6da9a779343", + "transactionsTrie": "0x05ed18d89f9478098f5ccfc2f6394f717b5977afa87fafd0e7e4e0662b95fce6", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd4aa4d5b39ce26acd377a8270a56167bf83859b5af65372e238003a00ce91e1a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb679ec96ca94636a291df54af0e8700214a30b5744b9b8c6ded35fef4dfebfc3", + "s": "0x71f51659c579462d6058a9016b1c575ef8a939ee1023e675a60fc9ed442a82ad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d0b2e5221dbec9d62cf99b6e37f8dcd38fc09600d9927b38599b3356333599a7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd0b2e5221dbec9d62cf99b6e37f8dcd38fc09600d9927b38599b3356333599a7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3d22faa0366ec25e40a6ea0ba5441d854b5ee52cb641dc5764c05cdbeb02f68b" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a03d22faa0366ec25e40a6ea0ba5441d854b5ee52cb641dc5764c05cdbeb02f68ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e80e7ed35932da1f3b3e3040eeba0e00340f07a16c10a632099263dd90f6ced1a0242b849d0e6c7bdc39a725bfecf73157899917c04ca0d7323b9fcdc9ee1d1d7ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a06f2ecd947190f8da2cb87977bf5ad8a900237c25ed3e29b541a8f3894795dd19a00c898c89c024170885687c208acf84407459a957dc930a82f11782b817de78b1c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3d22faa0366ec25e40a6ea0ba5441d854b5ee52cb641dc5764c05cdbeb02f68b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe80e7ed35932da1f3b3e3040eeba0e00340f07a16c10a632099263dd90f6ced1", + "transactionsTrie": "0x242b849d0e6c7bdc39a725bfecf73157899917c04ca0d7323b9fcdc9ee1d1d7b", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x763066e3d46d04a528f071cab888547fbad58e6bab132ca65ede73afd0df3f54" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6f2ecd947190f8da2cb87977bf5ad8a900237c25ed3e29b541a8f3894795dd19", + "s": "0x0c898c89c024170885687c208acf84407459a957dc930a82f11782b817de78b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3d22faa0366ec25e40a6ea0ba5441d854b5ee52cb641dc5764c05cdbeb02f68b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b6be1004d0b406f75ecf5d225d1cc68f16a54d8df0d2913eb6b622bf4913a3e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb6be1004d0b406f75ecf5d225d1cc68f16a54d8df0d2913eb6b622bf4913a3e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf37bfe33081c0977173a175b08aafc2cd26b5f84ce1aba9ea42e53ed5d4aadb2" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0f37bfe33081c0977173a175b08aafc2cd26b5f84ce1aba9ea42e53ed5d4aadb2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d80902646316cf977cd5ad8228ab68fc3bb96622899bb533749b6b68a88b1c80a0d19e3838c23580eb0973bfe3fdefe0625c94dfd559bae4c84ff490aad928b2aca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a027d4e2a56c91c412705ae6dc417fdc74887a655b682d4ea32edc60f755e7cb04a04b00060f7f276295730f6dc0f5b345250443240ab6bd7d30b75efd959822e330c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xf37bfe33081c0977173a175b08aafc2cd26b5f84ce1aba9ea42e53ed5d4aadb2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd80902646316cf977cd5ad8228ab68fc3bb96622899bb533749b6b68a88b1c80", + "transactionsTrie": "0xd19e3838c23580eb0973bfe3fdefe0625c94dfd559bae4c84ff490aad928b2ac", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x644795c555c599c47afe4630d98901205f2459d203b3bdd03ac95adb7c9824cf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x27d4e2a56c91c412705ae6dc417fdc74887a655b682d4ea32edc60f755e7cb04", + "s": "0x4b00060f7f276295730f6dc0f5b345250443240ab6bd7d30b75efd959822e330", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xf37bfe33081c0977173a175b08aafc2cd26b5f84ce1aba9ea42e53ed5d4aadb2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e82f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e82f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08c903a4d7bc1e36d1d4f7ccd4f9a129cba45b13210e06c8c4c26611604fb6d8da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8c903a4d7bc1e36d1d4f7ccd4f9a129cba45b13210e06c8c4c26611604fb6d8d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc37c27cc48f073a5e04d29d0692ab0b964666deb261d6a4bb7ebae54c44feb2a" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0c37c27cc48f073a5e04d29d0692ab0b964666deb261d6a4bb7ebae54c44feb2aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06bc4d63965c8358d7380948db453303005d7a0ae391b087cf8b2b3ed60562d58a0d11fbf503aec65eca1de954a833cd6deaa3ac83ae2c9fe0464546cc0d81bcf64a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06c373e328f8aaf93022312d2876a1ab0745238d08ad6319a95eecf63467e2a0aa01973989142c373a3cf6292d2b0173a8aeb8dd728d1e72c0e5f3e9abef84f3880c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xc37c27cc48f073a5e04d29d0692ab0b964666deb261d6a4bb7ebae54c44feb2a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6bc4d63965c8358d7380948db453303005d7a0ae391b087cf8b2b3ed60562d58", + "transactionsTrie": "0xd11fbf503aec65eca1de954a833cd6deaa3ac83ae2c9fe0464546cc0d81bcf64", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfb05fdf469b030be0edcc826cffcb431c63458187744627f88276260ef4b3d6e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6c373e328f8aaf93022312d2876a1ab0745238d08ad6319a95eecf63467e2a0a", + "s": "0x1973989142c373a3cf6292d2b0173a8aeb8dd728d1e72c0e5f3e9abef84f3880", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xc37c27cc48f073a5e04d29d0692ab0b964666deb261d6a4bb7ebae54c44feb2a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d4f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d4f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05f58d83a8156903ef987ace906ff1083f9f2b4bb45312da7a2aa21cd811a098aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5f58d83a8156903ef987ace906ff1083f9f2b4bb45312da7a2aa21cd811a098a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9ffa8df6b935762f222a721cc164cfc550531c1bf49257859a5cdcab1a313ae0" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a09ffa8df6b935762f222a721cc164cfc550531c1bf49257859a5cdcab1a313ae0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07e268d63f0435bacb0cae687fd6f39924d8506ecc2948ee74af199f0da2f7de2a0f2da939e6e8c1176aec66a087fd1a9381314f8b51398d27d2e9e294be6022d9ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a026e68c84694705d7a7e14bc6f1614a02d0a8b5a43bb4a4747cc0ee10acce4632a05d8c1dec984f84a654a9a6cedb490ffb3d2283e401aad48b8873f706fabc1d3bc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x9ffa8df6b935762f222a721cc164cfc550531c1bf49257859a5cdcab1a313ae0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7e268d63f0435bacb0cae687fd6f39924d8506ecc2948ee74af199f0da2f7de2", + "transactionsTrie": "0xf2da939e6e8c1176aec66a087fd1a9381314f8b51398d27d2e9e294be6022d9b", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xea5d34d288eb6570e395bf6fe6007a1e7b6c3e3901ee5f014c6e7fa8436429ad" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x26e68c84694705d7a7e14bc6f1614a02d0a8b5a43bb4a4747cc0ee10acce4632", + "s": "0x5d8c1dec984f84a654a9a6cedb490ffb3d2283e401aad48b8873f706fabc1d3b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x9ffa8df6b935762f222a721cc164cfc550531c1bf49257859a5cdcab1a313ae0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d05f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d05f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d0b2e5221dbec9d62cf99b6e37f8dcd38fc09600d9927b38599b3356333599a7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd0b2e5221dbec9d62cf99b6e37f8dcd38fc09600d9927b38599b3356333599a7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3d22faa0366ec25e40a6ea0ba5441d854b5ee52cb641dc5764c05cdbeb02f68b" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a03d22faa0366ec25e40a6ea0ba5441d854b5ee52cb641dc5764c05cdbeb02f68ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e80e7ed35932da1f3b3e3040eeba0e00340f07a16c10a632099263dd90f6ced1a04695d035120b7ebaa1cff037853b6adeb8d45795ef77a762a5fce73a3fd9816ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a08aafd405d4567499d9b420036d4d175ad08b4d6511f4ae262c58ef4dc79338f6a010d8efe5cbf489f93c7be899373870da98096f9bfa1066b277bf2c9ee2fd54bfc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3d22faa0366ec25e40a6ea0ba5441d854b5ee52cb641dc5764c05cdbeb02f68b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe80e7ed35932da1f3b3e3040eeba0e00340f07a16c10a632099263dd90f6ced1", + "transactionsTrie": "0x4695d035120b7ebaa1cff037853b6adeb8d45795ef77a762a5fce73a3fd9816b", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x779b177fbfc18a9815e03fdc60f548b9715dc98b42ae37642ffb85639c2dae0e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8aafd405d4567499d9b420036d4d175ad08b4d6511f4ae262c58ef4dc79338f6", + "s": "0x10d8efe5cbf489f93c7be899373870da98096f9bfa1066b277bf2c9ee2fd54bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3d22faa0366ec25e40a6ea0ba5441d854b5ee52cb641dc5764c05cdbeb02f68b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b6be1004d0b406f75ecf5d225d1cc68f16a54d8df0d2913eb6b622bf4913a3e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb6be1004d0b406f75ecf5d225d1cc68f16a54d8df0d2913eb6b622bf4913a3e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf37bfe33081c0977173a175b08aafc2cd26b5f84ce1aba9ea42e53ed5d4aadb2" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0f37bfe33081c0977173a175b08aafc2cd26b5f84ce1aba9ea42e53ed5d4aadb2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d80902646316cf977cd5ad8228ab68fc3bb96622899bb533749b6b68a88b1c80a0b8fff310b2f98e4e84e6f8142c29a01fb0e430d2c36ed951511f3cbf2ce53e95a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0cc737af5c85d0907c1b336cf66bfdcec4e3d2640521a41b19c1632d0d0acb549a02ec1f49f47d5a40719209c2a0511e3f920518281268500d17b5864adbbde244cc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xf37bfe33081c0977173a175b08aafc2cd26b5f84ce1aba9ea42e53ed5d4aadb2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd80902646316cf977cd5ad8228ab68fc3bb96622899bb533749b6b68a88b1c80", + "transactionsTrie": "0xb8fff310b2f98e4e84e6f8142c29a01fb0e430d2c36ed951511f3cbf2ce53e95", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x472461b4dd5e9de8219185bafb88a19da3396e891fa4cb3f5dd3ab8e887d4d3b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xcc737af5c85d0907c1b336cf66bfdcec4e3d2640521a41b19c1632d0d0acb549", + "s": "0x2ec1f49f47d5a40719209c2a0511e3f920518281268500d17b5864adbbde244c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xf37bfe33081c0977173a175b08aafc2cd26b5f84ce1aba9ea42e53ed5d4aadb2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e82f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e82f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08c903a4d7bc1e36d1d4f7ccd4f9a129cba45b13210e06c8c4c26611604fb6d8da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8c903a4d7bc1e36d1d4f7ccd4f9a129cba45b13210e06c8c4c26611604fb6d8d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc37c27cc48f073a5e04d29d0692ab0b964666deb261d6a4bb7ebae54c44feb2a" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0c37c27cc48f073a5e04d29d0692ab0b964666deb261d6a4bb7ebae54c44feb2aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06bc4d63965c8358d7380948db453303005d7a0ae391b087cf8b2b3ed60562d58a01c3b3cdc9b6f45142234e14a16f11c3b9dc090fc70848a248703e29133e48de5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a00d4eb71cd4f5047d56dfa89cfbbb0e5910c3693de230d05fcb61441370698896a03f6f8636ab8b2e74ac2845fe1f17240ff21ef37e4d0cf50bae1a97c883f77e47c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xc37c27cc48f073a5e04d29d0692ab0b964666deb261d6a4bb7ebae54c44feb2a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6bc4d63965c8358d7380948db453303005d7a0ae391b087cf8b2b3ed60562d58", + "transactionsTrie": "0x1c3b3cdc9b6f45142234e14a16f11c3b9dc090fc70848a248703e29133e48de5", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xefeae8e1ad9a042dffbddc8f94069b2e0567a242505611baa85d6570e07529a9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0d4eb71cd4f5047d56dfa89cfbbb0e5910c3693de230d05fcb61441370698896", + "s": "0x3f6f8636ab8b2e74ac2845fe1f17240ff21ef37e4d0cf50bae1a97c883f77e47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xc37c27cc48f073a5e04d29d0692ab0b964666deb261d6a4bb7ebae54c44feb2a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d4f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d4f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05f58d83a8156903ef987ace906ff1083f9f2b4bb45312da7a2aa21cd811a098aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5f58d83a8156903ef987ace906ff1083f9f2b4bb45312da7a2aa21cd811a098a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9ffa8df6b935762f222a721cc164cfc550531c1bf49257859a5cdcab1a313ae0" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a09ffa8df6b935762f222a721cc164cfc550531c1bf49257859a5cdcab1a313ae0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07e268d63f0435bacb0cae687fd6f39924d8506ecc2948ee74af199f0da2f7de2a0f235e273d88c3375a32c41a66710c095c5ba96ac7d7ac1e2980481de1376f2d0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0e9202293222035bf0a694f186eb0a83174fa6fd855271aa3cefeb6709bbeaa59a003cff83b22e58284600919c1fb477b7fc00b569ad447224b7a1238dc023077b2c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x9ffa8df6b935762f222a721cc164cfc550531c1bf49257859a5cdcab1a313ae0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7e268d63f0435bacb0cae687fd6f39924d8506ecc2948ee74af199f0da2f7de2", + "transactionsTrie": "0xf235e273d88c3375a32c41a66710c095c5ba96ac7d7ac1e2980481de1376f2d0", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd0295fb9596fd19a09dcd27b240db2b26fe06dc24ac73be38a0ccba0669676c4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xe9202293222035bf0a694f186eb0a83174fa6fd855271aa3cefeb6709bbeaa59", + "s": "0x03cff83b22e58284600919c1fb477b7fc00b569ad447224b7a1238dc023077b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x9ffa8df6b935762f222a721cc164cfc550531c1bf49257859a5cdcab1a313ae0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d05f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d05f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ac9957ddd86e5d7817e23b18aaa18bff53a540d614291cd732240f6ab2b907cfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xac9957ddd86e5d7817e23b18aaa18bff53a540d614291cd732240f6ab2b907cf", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0a5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f770ec1ccc1a4ae1185f2696f27ff6b15c638ad6830480dc8b17cf3b6bfca365a044ffafd0cabd4079677679809f39e8b980fe1009da788faba4a3d214ca8518eca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0b01f56f1e1898724dfa7cb0789b942a51ba6e1d9796902154700af71b971b6faa02dea0b88945bb4a8596cd6bf5ff0988fd622f0bf168c0b8d573a0a61943ea8d3c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf770ec1ccc1a4ae1185f2696f27ff6b15c638ad6830480dc8b17cf3b6bfca365", + "transactionsTrie": "0x44ffafd0cabd4079677679809f39e8b980fe1009da788faba4a3d214ca8518ec", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0d916c816c577a88e988bedeef778c09400a6e3cbc8350cb140ffdc4aa2ed5b4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb01f56f1e1898724dfa7cb0789b942a51ba6e1d9796902154700af71b971b6fa", + "s": "0x2dea0b88945bb4a8596cd6bf5ff0988fd622f0bf168c0b8d573a0a61943ea8d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d4fdf5f5f803ce2169426332cc282235f02fbb3add0b69d93c7278559f1e43c5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd4fdf5f5f803ce2169426332cc282235f02fbb3add0b69d93c7278559f1e43c5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a01b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a0a416cb5e9ec69962f70eabd9d57f16a8b8be13c678d1fe5e154496c82b5a5ba021b35338a871d73401ba08d72bfdbc758c38b9e848fa80e807095f18912edaa3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0448dd4c17134ea6b07ebd473727933c3ab787ae67ef7a4100cbf02313e2fee8ea0677314cb1f2a532287dffe8ddb536c35498309cb047f8a3b22518935e25d74bcc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa0a416cb5e9ec69962f70eabd9d57f16a8b8be13c678d1fe5e154496c82b5a5b", + "transactionsTrie": "0x21b35338a871d73401ba08d72bfdbc758c38b9e848fa80e807095f18912edaa3", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb4d3d9b90201e6e5273f9a8a892a6cef91d35b089101f388ef2295c56987f40c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x448dd4c17134ea6b07ebd473727933c3ab787ae67ef7a4100cbf02313e2fee8e", + "s": "0x677314cb1f2a532287dffe8ddb536c35498309cb047f8a3b22518935e25d74bc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07b06a21d00657e7416f8cbb183902b3e852d18d44b7aa32ca35157f2a7f81b7ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7b06a21d00657e7416f8cbb183902b3e852d18d44b7aa32ca35157f2a7f81b7c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a05fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b900e18821e0db71cb0877d79996942d2e7435ba61d7844bb2edeef48a967a6ea069db74ce400463b853eeb9fdd290cb6c69433dd40facc2f7daf7716fc28086f6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a02c12caf79d3355fb88a6a472f840c4e91b73cca538b6fceffa906a455320360da0211efcc9d956ad01eb918c4b9e349e4b3a62d3e526b06a6f540a7ed7713d9ca2c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb900e18821e0db71cb0877d79996942d2e7435ba61d7844bb2edeef48a967a6e", + "transactionsTrie": "0x69db74ce400463b853eeb9fdd290cb6c69433dd40facc2f7daf7716fc28086f6", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xeb90767891ac3399ee7601d8324206a882e86aa9e33f97eaaf3ba73c89ca0d60" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2c12caf79d3355fb88a6a472f840c4e91b73cca538b6fceffa906a455320360d", + "s": "0x211efcc9d956ad01eb918c4b9e349e4b3a62d3e526b06a6f540a7ed7713d9ca2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d50", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a015e8af978ede191ad9ad24fdb03632810cc43838691743ce9b33f0c3d3c7b926a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x15e8af978ede191ad9ad24fdb03632810cc43838691743ce9b33f0c3d3c7b926", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a08f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e32a0aaea3ffea5a850a2fed145d8b8d14de0ed1b37c682aa34fa114bd37f7a4a052cd5e4adfc3c8e4a3b1ad47cf13e8b1b7d09a9db189d6e5cd244b3e316eac84a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a07b814c734cdeb02ea9dca38861281c3d4892ab7c4c19a7f50c000ae06d4a9f65a01b8329c18f3d19662c8b043c3fac86051e549fe77b121d22611f72c131fef29dc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe32a0aaea3ffea5a850a2fed145d8b8d14de0ed1b37c682aa34fa114bd37f7a4", + "transactionsTrie": "0x52cd5e4adfc3c8e4a3b1ad47cf13e8b1b7d09a9db189d6e5cd244b3e316eac84", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcb18343f5ac49b31404632094f95a5c2fd6a6bcc83285a76c6dbefb072dce34e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x7b814c734cdeb02ea9dca38861281c3d4892ab7c4c19a7f50c000ae06d4a9f65", + "s": "0x1b8329c18f3d19662c8b043c3fac86051e549fe77b121d22611f72c131fef29d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d060", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ac9957ddd86e5d7817e23b18aaa18bff53a540d614291cd732240f6ab2b907cfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xac9957ddd86e5d7817e23b18aaa18bff53a540d614291cd732240f6ab2b907cf", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0a5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f770ec1ccc1a4ae1185f2696f27ff6b15c638ad6830480dc8b17cf3b6bfca365a057f4587ddff05b1e50cb52ecfde403b300c446dee49ffd0dc17e7c3df2c8427da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a00e7856ce7b9836be2691e2ee80916d09b1b754f8380a01f35e63584e3f4d3cd4a00b307d3f2567da733ec7e84fbb4119b7d89f93c055c4dca90864c40d4d0be1ddc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf770ec1ccc1a4ae1185f2696f27ff6b15c638ad6830480dc8b17cf3b6bfca365", + "transactionsTrie": "0x57f4587ddff05b1e50cb52ecfde403b300c446dee49ffd0dc17e7c3df2c8427d", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7cfa0ad45426978e85239b4a8b9ff11b4ef3dbac61140aa870b35a88d1a31709" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x0e7856ce7b9836be2691e2ee80916d09b1b754f8380a01f35e63584e3f4d3cd4", + "s": "0x0b307d3f2567da733ec7e84fbb4119b7d89f93c055c4dca90864c40d4d0be1dd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d4fdf5f5f803ce2169426332cc282235f02fbb3add0b69d93c7278559f1e43c5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd4fdf5f5f803ce2169426332cc282235f02fbb3add0b69d93c7278559f1e43c5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a01b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a0a416cb5e9ec69962f70eabd9d57f16a8b8be13c678d1fe5e154496c82b5a5ba04c6851e46adf57eed89841830eda98ca486d914400b6550e273811a430cc6009a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0afd159cdd72c3d5cab0f0cabad1fccb52b255432d1bb7468ce3438612cff22cda0185b0c271de20c2424d4946487dfe17d470500e96a735fa27b4300645dc34100c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa0a416cb5e9ec69962f70eabd9d57f16a8b8be13c678d1fe5e154496c82b5a5b", + "transactionsTrie": "0x4c6851e46adf57eed89841830eda98ca486d914400b6550e273811a430cc6009", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3150c2f054f9a2cdf81fdac55df5c93957c5eaa420f0732ce47c421dc1851bdf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xafd159cdd72c3d5cab0f0cabad1fccb52b255432d1bb7468ce3438612cff22cd", + "s": "0x185b0c271de20c2424d4946487dfe17d470500e96a735fa27b4300645dc34100", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07b06a21d00657e7416f8cbb183902b3e852d18d44b7aa32ca35157f2a7f81b7ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7b06a21d00657e7416f8cbb183902b3e852d18d44b7aa32ca35157f2a7f81b7c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a05fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b900e18821e0db71cb0877d79996942d2e7435ba61d7844bb2edeef48a967a6ea07c7722ba3d8aa1dc73cb0b47d3764b59a7108c145ae4d7a722e5a5a6ccd8bcf9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0b7cf2a484cda9047bd6accaec20003654afd889045215c16a33d29ee4488804fa0414bdc6e028bf0cf8622b64f4794a3af9fa6502615f282d3d9be620c063425c7c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb900e18821e0db71cb0877d79996942d2e7435ba61d7844bb2edeef48a967a6e", + "transactionsTrie": "0x7c7722ba3d8aa1dc73cb0b47d3764b59a7108c145ae4d7a722e5a5a6ccd8bcf9", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5fb9bdfddbee60cca49bd2951316bb02056e698da0f4abda161a489867439525" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb7cf2a484cda9047bd6accaec20003654afd889045215c16a33d29ee4488804f", + "s": "0x414bdc6e028bf0cf8622b64f4794a3af9fa6502615f282d3d9be620c063425c7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d50", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a015e8af978ede191ad9ad24fdb03632810cc43838691743ce9b33f0c3d3c7b926a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x15e8af978ede191ad9ad24fdb03632810cc43838691743ce9b33f0c3d3c7b926", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a08f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e32a0aaea3ffea5a850a2fed145d8b8d14de0ed1b37c682aa34fa114bd37f7a4a09f9324b72ea1b4de5fd9cd2497d03e70ddd948c9a3223b3cddf005ad282b5635a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a08eeb850c1f410e18c038aad484835819c3064b1aa268c827e347a10f02ff5171a007a3b0c34d541a65124f060e4c7447ad8ea156c50748d8c5ac9b5b279a26bf12c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe32a0aaea3ffea5a850a2fed145d8b8d14de0ed1b37c682aa34fa114bd37f7a4", + "transactionsTrie": "0x9f9324b72ea1b4de5fd9cd2497d03e70ddd948c9a3223b3cddf005ad282b5635", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbaec1eecc351984c957ed4e06bceee5e80ce93b55ff3c407ed88af479360dee8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8eeb850c1f410e18c038aad484835819c3064b1aa268c827e347a10f02ff5171", + "s": "0x07a3b0c34d541a65124f060e4c7447ad8ea156c50748d8c5ac9b5b279a26bf12", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d060", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05bac21099af43f7d37da5e8b382595a3ae6588afc1309afe987cebb86017ce0ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5bac21099af43f7d37da5e8b382595a3ae6588afc1309afe987cebb86017ce0c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0c24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0544278dfbcd4c04f5f8b4f3f0d4f4e6fb3000d24d6a8ff09167dbfdd72990ddaa0e4ae0c99d04f2aaaa820baadbf7aab3e949e3677ee688215768af4853e2f56fba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0eb774461949962772ab55a732e712f293d26cc96498a878827d3e91e01bf2eada073a202c92b1c8fdfac1f03da02a3d19967264fb6717ca155c15938c519740dfdc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x544278dfbcd4c04f5f8b4f3f0d4f4e6fb3000d24d6a8ff09167dbfdd72990dda", + "transactionsTrie": "0xe4ae0c99d04f2aaaa820baadbf7aab3e949e3677ee688215768af4853e2f56fb", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x55a9acc8f8825ee1f868b81cfed522a60f6dbda9c454765b5877897e388724e7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xeb774461949962772ab55a732e712f293d26cc96498a878827d3e91e01bf2ead", + "s": "0x73a202c92b1c8fdfac1f03da02a3d19967264fb6717ca155c15938c519740dfd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e37", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e37", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a085ed10c4745dc28f04a8127592bf0e8eaf48cdeeb3d3cad6d4715772841e5d50a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x85ed10c4745dc28f04a8127592bf0e8eaf48cdeeb3d3cad6d4715772841e5d50", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6346cbfda206ce3ac89f6a2015452dbfb6dcbeac0b4f88609baca87a6e78821f" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a06346cbfda206ce3ac89f6a2015452dbfb6dcbeac0b4f88609baca87a6e78821fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01244ed0718b97abd73be641de249b3531a1575ea019fa837370647a52a9fdaf5a0fea0fef16e597d3a235402c94fbd30b8a6330f520919e36f33fa107bbc93513aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0c2358cb1a2f2a342bd161f523204efc561d732d3be06eaffbd0ce75d7a5a7175a07d09a1de839183319c1cea3eddf926dda2d294e0b5ead26aaa9977648831f74bc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6346cbfda206ce3ac89f6a2015452dbfb6dcbeac0b4f88609baca87a6e78821f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1244ed0718b97abd73be641de249b3531a1575ea019fa837370647a52a9fdaf5", + "transactionsTrie": "0xfea0fef16e597d3a235402c94fbd30b8a6330f520919e36f33fa107bbc93513a", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0ff615c52bdafff9e43092990034120c45de8c472a957fb8498ca0e2ec0fd2a0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xc2358cb1a2f2a342bd161f523204efc561d732d3be06eaffbd0ce75d7a5a7175", + "s": "0x7d09a1de839183319c1cea3eddf926dda2d294e0b5ead26aaa9977648831f74b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6346cbfda206ce3ac89f6a2015452dbfb6dcbeac0b4f88609baca87a6e78821f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7bf", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7bf", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e4dfc1a5af8f0f3174ec2c0e6917c8ac1cec77f58146845c56ab0acfd2659694a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe4dfc1a5af8f0f3174ec2c0e6917c8ac1cec77f58146845c56ab0acfd2659694", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7c6992d8d00cf35a82e548ddd64f2792776a7bbb618c25d003338e5b28bb2357" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a07c6992d8d00cf35a82e548ddd64f2792776a7bbb618c25d003338e5b28bb2357a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bc074451d24a1416675ddc297e34caa218a02d830478248369a4e8af92d35652a0254818884f8083a7098d6e2769d35ed82e5bc74ca166380ea030a5d68d9e6a0aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08ba6f542f1676b68adc5ef41b504c996e42007d6a00a881075865eb335756865a0075214863791f422c6fb9741014c5443663864a8a8dd1d865c4ebfc1808145b9c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x7c6992d8d00cf35a82e548ddd64f2792776a7bbb618c25d003338e5b28bb2357", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbc074451d24a1416675ddc297e34caa218a02d830478248369a4e8af92d35652", + "transactionsTrie": "0x254818884f8083a7098d6e2769d35ed82e5bc74ca166380ea030a5d68d9e6a0a", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb36c9acbe593b617b83ecb3a5a42ce3feb57dd47f1434aa3ff3d26ba8d8fb2e7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8ba6f542f1676b68adc5ef41b504c996e42007d6a00a881075865eb335756865", + "s": "0x075214863791f422c6fb9741014c5443663864a8a8dd1d865c4ebfc1808145b9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x7c6992d8d00cf35a82e548ddd64f2792776a7bbb618c25d003338e5b28bb2357", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c6f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c6f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ab903255d22372466188c58078801cfe1017a5feb8f0bba323be286adfde1eb0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xab903255d22372466188c58078801cfe1017a5feb8f0bba323be286adfde1eb0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb7f87f1fd38fe0e4a23e5ee606c8a2e6ffce0a0ca66a918487fd7754872b9e00" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0b7f87f1fd38fe0e4a23e5ee606c8a2e6ffce0a0ca66a918487fd7754872b9e00a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a78f15c4e83e8a21c83b68e25b46eda25528caf84a7b0dfb3cf4a3da0a5aeccda0e790a9ee0dff8abfa1901f22fedc591ff56be1b37e2b64e25219af2aa8d8f9e8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0f49a9441da353856259d2488a5c07a912100949ab5fc47ea10c8f57233d8cc2aa02ce5b92613cfe1c0880699a043a5f645989a031ed1a8fa8db5efed11cac8edc2c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb7f87f1fd38fe0e4a23e5ee606c8a2e6ffce0a0ca66a918487fd7754872b9e00", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa78f15c4e83e8a21c83b68e25b46eda25528caf84a7b0dfb3cf4a3da0a5aeccd", + "transactionsTrie": "0xe790a9ee0dff8abfa1901f22fedc591ff56be1b37e2b64e25219af2aa8d8f9e8", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x102ec30bceafa95aae6a44ce9a4669027b98f1db44164d24bbf437b37fad2a72" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xf49a9441da353856259d2488a5c07a912100949ab5fc47ea10c8f57233d8cc2a", + "s": "0x2ce5b92613cfe1c0880699a043a5f645989a031ed1a8fa8db5efed11cac8edc2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb7f87f1fd38fe0e4a23e5ee606c8a2e6ffce0a0ca66a918487fd7754872b9e00", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf7f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf7f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05bac21099af43f7d37da5e8b382595a3ae6588afc1309afe987cebb86017ce0ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5bac21099af43f7d37da5e8b382595a3ae6588afc1309afe987cebb86017ce0c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0c24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0544278dfbcd4c04f5f8b4f3f0d4f4e6fb3000d24d6a8ff09167dbfdd72990ddaa0aada43064092aebc5743d4292cd5519612698f4bd8c6a3d3614bdb172d6486f0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0b8c2e70ef8f2dc74b3085be9feb0d9f72f133ba48e2b7625d3af9ce869ed4439a0035af6f362212df8a6f58a794e9eb107f7714e873e4785f529c070f0ae6200e9c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x544278dfbcd4c04f5f8b4f3f0d4f4e6fb3000d24d6a8ff09167dbfdd72990dda", + "transactionsTrie": "0xaada43064092aebc5743d4292cd5519612698f4bd8c6a3d3614bdb172d6486f0", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd63ecec452731ccfaadb71bbb1efc6f861aa7ad55ee6022fbc53ef04dd40ebb6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xb8c2e70ef8f2dc74b3085be9feb0d9f72f133ba48e2b7625d3af9ce869ed4439", + "s": "0x035af6f362212df8a6f58a794e9eb107f7714e873e4785f529c070f0ae6200e9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e37", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e37", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a085ed10c4745dc28f04a8127592bf0e8eaf48cdeeb3d3cad6d4715772841e5d50a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x85ed10c4745dc28f04a8127592bf0e8eaf48cdeeb3d3cad6d4715772841e5d50", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6346cbfda206ce3ac89f6a2015452dbfb6dcbeac0b4f88609baca87a6e78821f" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a06346cbfda206ce3ac89f6a2015452dbfb6dcbeac0b4f88609baca87a6e78821fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01244ed0718b97abd73be641de249b3531a1575ea019fa837370647a52a9fdaf5a06cf48ba8f60db072c86380fc6dc814b5676da84ba40db059ffbcc98a7631ac7ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a06f4b92f8a908a8ec81bfa8e88b6f0282186c5c032fe8cb96dc593f571f6a638da02a51b6ee50b932c7c7e17f2c79233578cbf019e2c91804d3b595123edcf0237cc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6346cbfda206ce3ac89f6a2015452dbfb6dcbeac0b4f88609baca87a6e78821f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1244ed0718b97abd73be641de249b3531a1575ea019fa837370647a52a9fdaf5", + "transactionsTrie": "0x6cf48ba8f60db072c86380fc6dc814b5676da84ba40db059ffbcc98a7631ac7b", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdda03ed6c56d5d8470c0925f4ae4676a55124d9c43ec5cafc30b0ca8c969b209" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6f4b92f8a908a8ec81bfa8e88b6f0282186c5c032fe8cb96dc593f571f6a638d", + "s": "0x2a51b6ee50b932c7c7e17f2c79233578cbf019e2c91804d3b595123edcf0237c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6346cbfda206ce3ac89f6a2015452dbfb6dcbeac0b4f88609baca87a6e78821f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7bf", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7bf", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e4dfc1a5af8f0f3174ec2c0e6917c8ac1cec77f58146845c56ab0acfd2659694a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe4dfc1a5af8f0f3174ec2c0e6917c8ac1cec77f58146845c56ab0acfd2659694", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7c6992d8d00cf35a82e548ddd64f2792776a7bbb618c25d003338e5b28bb2357" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a07c6992d8d00cf35a82e548ddd64f2792776a7bbb618c25d003338e5b28bb2357a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bc074451d24a1416675ddc297e34caa218a02d830478248369a4e8af92d35652a00509e8a6369d47188be3e1d663bd8494f74e719a6fb43322c9a8717e973be0cea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08cdc7c6b37e24642a06d3ebe0f648cb053ea5f426e1813a3268b4f4f9697c446a005e3c4508632cb383fe4ac0e12ac0dbe41668fdb5e709629e03729df17d1ad13c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x7c6992d8d00cf35a82e548ddd64f2792776a7bbb618c25d003338e5b28bb2357", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbc074451d24a1416675ddc297e34caa218a02d830478248369a4e8af92d35652", + "transactionsTrie": "0x0509e8a6369d47188be3e1d663bd8494f74e719a6fb43322c9a8717e973be0ce", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5390540a1a3501f642d924f1d8bc0e3549ef6d4995844706b011166cf7c96dc1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8cdc7c6b37e24642a06d3ebe0f648cb053ea5f426e1813a3268b4f4f9697c446", + "s": "0x05e3c4508632cb383fe4ac0e12ac0dbe41668fdb5e709629e03729df17d1ad13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x7c6992d8d00cf35a82e548ddd64f2792776a7bbb618c25d003338e5b28bb2357", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c6f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c6f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ab903255d22372466188c58078801cfe1017a5feb8f0bba323be286adfde1eb0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xab903255d22372466188c58078801cfe1017a5feb8f0bba323be286adfde1eb0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb7f87f1fd38fe0e4a23e5ee606c8a2e6ffce0a0ca66a918487fd7754872b9e00" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0b7f87f1fd38fe0e4a23e5ee606c8a2e6ffce0a0ca66a918487fd7754872b9e00a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a78f15c4e83e8a21c83b68e25b46eda25528caf84a7b0dfb3cf4a3da0a5aeccda07f6862390a646ac1839a01d0a467b3fbb7ef0decc3b0bf43e03509b3f56f8400a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a02796e6c689e3a5155ebb4d9c6e8e9cda94530ac15684fad4081a99c4230ee241a065c7f05c9d31739ce0ac941744d23b22f935d9adfcb722b9c5827292f7fc8441c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb7f87f1fd38fe0e4a23e5ee606c8a2e6ffce0a0ca66a918487fd7754872b9e00", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa78f15c4e83e8a21c83b68e25b46eda25528caf84a7b0dfb3cf4a3da0a5aeccd", + "transactionsTrie": "0x7f6862390a646ac1839a01d0a467b3fbb7ef0decc3b0bf43e03509b3f56f8400", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5f035edf4b7e4f69d42b6ea6eeb142c4a4cb1bc8eb79e9751e7480e94cf8864a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2796e6c689e3a5155ebb4d9c6e8e9cda94530ac15684fad4081a99c4230ee241", + "s": "0x65c7f05c9d31739ce0ac941744d23b22f935d9adfcb722b9c5827292f7fc8441", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb7f87f1fd38fe0e4a23e5ee606c8a2e6ffce0a0ca66a918487fd7754872b9e00", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf7f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf7f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0eae46462c508733464f16996c7513829c0ad77497580819df988fd9162f6af6ea003d9a1990284757186711f3a53330b43c4c64e3adefd6bfa0c2c8bcfc01fa24ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000001a001f30ee2f0f8963619a153eea6b016e4cc8ec20124a3da4c4a65bb6b07c67400a03e001a6d2dfe1245c55ff1f53bae8bfce2a7dd4ab76a42ccef9186cccce7e6e0c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xeae46462c508733464f16996c7513829c0ad77497580819df988fd9162f6af6e", + "transactionsTrie": "0x03d9a1990284757186711f3a53330b43c4c64e3adefd6bfa0c2c8bcfc01fa24c", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x32242f61c855e676205bf4d6c7fcf956df26c3e373b87f0de301a416ef43d930" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x01f30ee2f0f8963619a153eea6b016e4cc8ec20124a3da4c4a65bb6b07c67400", + "s": "0x3e001a6d2dfe1245c55ff1f53bae8bfce2a7dd4ab76a42ccef9186cccce7e6e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0966ebc0972c448689c433a2c2060f446207a076a35a923981fd2f4befac0a926a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x966ebc0972c448689c433a2c2060f446207a076a35a923981fd2f4befac0a926", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0b4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03c0b6d5a9c8daf3ea9371eb64e571f7abb1f727254879230298f6253c00e1470a0f8f51c1ef1ae90a4f942592dcf33768f59dafa868521451c0373976bacedeb16a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0bcaf98f54a364180abb251d2708e63904a58a4583eac4ad86507826164bafe04a01c746c6ff9431578699325848b549174ed36361d8d654f3486e7764674502c52c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3c0b6d5a9c8daf3ea9371eb64e571f7abb1f727254879230298f6253c00e1470", + "transactionsTrie": "0xf8f51c1ef1ae90a4f942592dcf33768f59dafa868521451c0373976bacedeb16", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xed52b0dba5e7e6ef580bed5e3187828ea0641f8496a0ff670dcb2a34de080f53" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xbcaf98f54a364180abb251d2708e63904a58a4583eac4ad86507826164bafe04", + "s": "0x1c746c6ff9431578699325848b549174ed36361d8d654f3486e7764674502c52", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a052546b1e61fa6044e538eb7e3b7dfd86153493dc2beadd704eaaa64a4b416416a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x52546b1e61fa6044e538eb7e3b7dfd86153493dc2beadd704eaaa64a4b416416", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a03cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0abf1e526e1d7a6164d8843d7d3c681c7f3c81811c1eda0897c838c553452e282a0f370bcbcff9e5c9fd8ddfd49398185f364d09b0a3b0a245953bbe10b8a456d41a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000080a03b3e8eed249f07e52534d4b26d52dd8c82bc688511a586b2ea97ec6e574f0c0da0774f47ab66e2c161e7165539a1a62da675d45331de59f6838189e05433dc0c21c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xabf1e526e1d7a6164d8843d7d3c681c7f3c81811c1eda0897c838c553452e282", + "transactionsTrie": "0xf370bcbcff9e5c9fd8ddfd49398185f364d09b0a3b0a245953bbe10b8a456d41", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb940243c921993bc06afdcef07b63a8e0850293515281cab00e0435f9a1764ce" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x3b3e8eed249f07e52534d4b26d52dd8c82bc688511a586b2ea97ec6e574f0c0d", + "s": "0x774f47ab66e2c161e7165539a1a62da675d45331de59f6838189e05433dc0c21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c70", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0158ba52aec47994a85a282c7be10dcd82d9619c4ca08c82e6d37dd31d763a8baa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x158ba52aec47994a85a282c7be10dcd82d9619c4ca08c82e6d37dd31d763a8ba", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a008d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06c5f073decb00413f8b2dcf4b2a66d4f2290d585a9f09a5b3fda8de7a20dc7fea0abf5dde33908a130677f2d39d771b94a78d8473f91423d9af63a1010bdb838d0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a04b01a14db828a1e33daa6b436e93b2ffa9c557dcbe14ccba4f1940f6f7c86d70a035aaf376674378013fc3d82db8df0032ec73fcde34aa3f42bc6058551c35fd92c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6c5f073decb00413f8b2dcf4b2a66d4f2290d585a9f09a5b3fda8de7a20dc7fe", + "transactionsTrie": "0xabf5dde33908a130677f2d39d771b94a78d8473f91423d9af63a1010bdb838d0", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x837fa5fd885daab04481d1b3d2af0dcec9f5017b381625e5eb6cbfa8c5471fbe" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x4b01a14db828a1e33daa6b436e93b2ffa9c557dcbe14ccba4f1940f6f7c86d70", + "s": "0x35aaf376674378013fc3d82db8df0032ec73fcde34aa3f42bc6058551c35fd92", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf80", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0eae46462c508733464f16996c7513829c0ad77497580819df988fd9162f6af6ea0abf518a484efcbc718f7b1fbbe77c869d8dbb8930a0b6c83b990e452f26f6b06a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0382838798d50ec634d9132386dc84be2fdfc55b98cb274887d582667197b820fa04bb10784cbbe4ea1f701b71f24649526ea6c3dec22762580ccdc893c59a64f96c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xeae46462c508733464f16996c7513829c0ad77497580819df988fd9162f6af6e", + "transactionsTrie": "0xabf518a484efcbc718f7b1fbbe77c869d8dbb8930a0b6c83b990e452f26f6b06", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf87ae4e591df7cb5b3d88a35fab60e1e119ed92d68adc4a49a01d1e9f7aab70a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x382838798d50ec634d9132386dc84be2fdfc55b98cb274887d582667197b820f", + "s": "0x4bb10784cbbe4ea1f701b71f24649526ea6c3dec22762580ccdc893c59a64f96", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0966ebc0972c448689c433a2c2060f446207a076a35a923981fd2f4befac0a926a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x966ebc0972c448689c433a2c2060f446207a076a35a923981fd2f4befac0a926", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0b4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03c0b6d5a9c8daf3ea9371eb64e571f7abb1f727254879230298f6253c00e1470a04c6d19990e1f274f39fe7fb9a7e782e7f291716edecd1ed2c341e743a0bf70e0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a05e4efe42fdda737e193dcdddf01ba87556c2f60d63de82a64479e3c8ea1daf3ea048cdcd875fbb5bb037da373729b9b0ed2401cb8d01d8697215ebd8e7ab63443cc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3c0b6d5a9c8daf3ea9371eb64e571f7abb1f727254879230298f6253c00e1470", + "transactionsTrie": "0x4c6d19990e1f274f39fe7fb9a7e782e7f291716edecd1ed2c341e743a0bf70e0", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x42f285230bfa369e064ef57b691064571864fb40860da18ff8f71d3a006badc8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5e4efe42fdda737e193dcdddf01ba87556c2f60d63de82a64479e3c8ea1daf3e", + "s": "0x48cdcd875fbb5bb037da373729b9b0ed2401cb8d01d8697215ebd8e7ab63443c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a052546b1e61fa6044e538eb7e3b7dfd86153493dc2beadd704eaaa64a4b416416a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x52546b1e61fa6044e538eb7e3b7dfd86153493dc2beadd704eaaa64a4b416416", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a03cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0abf1e526e1d7a6164d8843d7d3c681c7f3c81811c1eda0897c838c553452e282a0adc33c97054ccd0ad311f9704213306fb7f28caed1f4f9c4525678e8a8ad69dda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000080a07fcecce51659e5ce15be00b94d4c9b29ec0eb093daf72a1cbcd6e75dba9bcedca07e66232611215dac3a6129713d912a98ba06c487d543d389953604cd46206cb3c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xabf1e526e1d7a6164d8843d7d3c681c7f3c81811c1eda0897c838c553452e282", + "transactionsTrie": "0xadc33c97054ccd0ad311f9704213306fb7f28caed1f4f9c4525678e8a8ad69dd", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2111d96a89a601c6090708ab6cac7a7fb1f77f1afa04d0e1603d523bf7c8b7ea" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x7fcecce51659e5ce15be00b94d4c9b29ec0eb093daf72a1cbcd6e75dba9bcedc", + "s": "0x7e66232611215dac3a6129713d912a98ba06c487d543d389953604cd46206cb3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c70", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0158ba52aec47994a85a282c7be10dcd82d9619c4ca08c82e6d37dd31d763a8baa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x158ba52aec47994a85a282c7be10dcd82d9619c4ca08c82e6d37dd31d763a8ba", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a008d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06c5f073decb00413f8b2dcf4b2a66d4f2290d585a9f09a5b3fda8de7a20dc7fea0407fdcb56b4f85ecf3afa750390a7dd6d617f9c632f752ff4562115b8d12eb69a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a04cf40bb669536427389d66ea910d0f5251c8dd60826d87d79ca5a618f7bda46ca0637382f93312d45f80f5d2ddcb19ea74751525c4ce2930e1686a52046aef239ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6c5f073decb00413f8b2dcf4b2a66d4f2290d585a9f09a5b3fda8de7a20dc7fe", + "transactionsTrie": "0x407fdcb56b4f85ecf3afa750390a7dd6d617f9c632f752ff4562115b8d12eb69", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8b4574e35684046a40b9faa897b65e0ce9af6f34e47aacae2548729fbb69b7a1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x4cf40bb669536427389d66ea910d0f5251c8dd60826d87d79ca5a618f7bda46c", + "s": "0x637382f93312d45f80f5d2ddcb19ea74751525c4ce2930e1686a52046aef239a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf80", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c0b7684359a03f531ac50d79dbeede3062f11569afb586039f1629c30860ea01a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc0b7684359a03f531ac50d79dbeede3062f11569afb586039f1629c30860ea01", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xce7150ebb07a500657ec2d0fcfb1ea3ebef875f5ebf69afe13cb26443661f2e9" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0ce7150ebb07a500657ec2d0fcfb1ea3ebef875f5ebf69afe13cb26443661f2e9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04df702d6d4c414c159c8dcf5c71ff267f59f478b79fb69db6c24ce00c339a9d9a07314b31a1cba219beceb89f9d7d914446c77fe400b7d43ee6abc5dc6006e6709a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000001a083c2b041b9b9dd779a41631029a631350445c55e36a9799f482bbdf228e32362a0687fca1e13d58f07c7583787078e1a39601e3c1ebe667470ad08e6b8be15849ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xce7150ebb07a500657ec2d0fcfb1ea3ebef875f5ebf69afe13cb26443661f2e9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4df702d6d4c414c159c8dcf5c71ff267f59f478b79fb69db6c24ce00c339a9d9", + "transactionsTrie": "0x7314b31a1cba219beceb89f9d7d914446c77fe400b7d43ee6abc5dc6006e6709", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa815d6a79a9c193131f4be5dcb23265ed35fd595e11fb509e9b389f28d80fbab" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x83c2b041b9b9dd779a41631029a631350445c55e36a9799f482bbdf228e32362", + "s": "0x687fca1e13d58f07c7583787078e1a39601e3c1ebe667470ad08e6b8be15849e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xce7150ebb07a500657ec2d0fcfb1ea3ebef875f5ebf69afe13cb26443661f2e9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e53", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e53", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03fa302c0ebd56328c5c9e58adda6bf0aa2129cfcaba470f95b8ca2e6b5a2623ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3fa302c0ebd56328c5c9e58adda6bf0aa2129cfcaba470f95b8ca2e6b5a2623b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd99f971558a01f917599c7f3d5ea5e09a75fef6f02a4b0ece119841e4f4a66dd" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0d99f971558a01f917599c7f3d5ea5e09a75fef6f02a4b0ece119841e4f4a66dda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07e12dfdbe76a1d43f6cc033125433156ad3e8746aecc0859b34581d5dda49664a06a99e61060fe78037c40c271510ab7eea91fb7b4c48c86cd7b75a6115cad6caea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0aa391520b3863efbf35018e543971d15537ed93bd8c90a4b31896d6cae149626a025c3aa086a4f3fc3c952933232b8152838bd2ed7fbcd4c293627ea3562cad634c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xd99f971558a01f917599c7f3d5ea5e09a75fef6f02a4b0ece119841e4f4a66dd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7e12dfdbe76a1d43f6cc033125433156ad3e8746aecc0859b34581d5dda49664", + "transactionsTrie": "0x6a99e61060fe78037c40c271510ab7eea91fb7b4c48c86cd7b75a6115cad6cae", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbd40bd42096f03f6131e06cca2ac1db1f05d3b869cb1b446822c90c54b2b4ce9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaa391520b3863efbf35018e543971d15537ed93bd8c90a4b31896d6cae149626", + "s": "0x25c3aa086a4f3fc3c952933232b8152838bd2ed7fbcd4c293627ea3562cad634", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xd99f971558a01f917599c7f3d5ea5e09a75fef6f02a4b0ece119841e4f4a66dd", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7db", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7db", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02217ba2d9219477e070a55ce807754197e968d3b97ac2a52c00dd4c09cb1a0f6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2217ba2d9219477e070a55ce807754197e968d3b97ac2a52c00dd4c09cb1a0f6", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x689ca387d83af9d0b58cbf35ba066a24bb23c8bda13b5a858614a2bdc8ff9497" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0689ca387d83af9d0b58cbf35ba066a24bb23c8bda13b5a858614a2bdc8ff9497a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0020cdffb1f4f36d45fd40ee1315b528475cd0f0aa083fea4cd0d01c97d60d051a0ffaf764a4cb0c2f97b5884dcd2af61cc5832fc6186b454673e294bff9b773c31a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e82520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000001a078a7313f2fb4d0e30871840a22cbfceabb5f19e7c3b00ddd8a5a9e8affce83bda067ff24573357eff09164d431125cb3bc99ab58b5d1b6bac72d680ffc2b871e33c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x689ca387d83af9d0b58cbf35ba066a24bb23c8bda13b5a858614a2bdc8ff9497", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x020cdffb1f4f36d45fd40ee1315b528475cd0f0aa083fea4cd0d01c97d60d051", + "transactionsTrie": "0xffaf764a4cb0c2f97b5884dcd2af61cc5832fc6186b454673e294bff9b773c31", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xce7bbbd02f329a25606d10ba3e1bf00600dfbaa7665bb1daa0faf1c346835138" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x78a7313f2fb4d0e30871840a22cbfceabb5f19e7c3b00ddd8a5a9e8affce83bd", + "s": "0x67ff24573357eff09164d431125cb3bc99ab58b5d1b6bac72d680ffc2b871e33", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x689ca387d83af9d0b58cbf35ba066a24bb23c8bda13b5a858614a2bdc8ff9497", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09dc3972089fd055f360f33e6143caf357b16744fdb1612ecb50b978c2d196823a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9dc3972089fd055f360f33e6143caf357b16744fdb1612ecb50b978c2d196823", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x513519bdafaae7024241520d0f44d69343b0940967681409b8c2328933e76e8e" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0513519bdafaae7024241520d0f44d69343b0940967681409b8c2328933e76e8ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ee7adc94395c79b6314559c1c5c8e12255eb9d5bb4fc9736ee577fcabe89fca4a04dc09ff1d4cd2c562c4c37d1e486fb12c762e62e77598114dd882bdec8cac5f9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0529c31d9ae453f504aca984af7395835e6f0506d31629cb0b004b3a366ac8dbda04f46e9539685099a672c9bcd19405b6a93519a520f56933ea5ac46b934bc5398c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x513519bdafaae7024241520d0f44d69343b0940967681409b8c2328933e76e8e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xee7adc94395c79b6314559c1c5c8e12255eb9d5bb4fc9736ee577fcabe89fca4", + "transactionsTrie": "0x4dc09ff1d4cd2c562c4c37d1e486fb12c762e62e77598114dd882bdec8cac5f9", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf9d80b7ee875495279b5788d1ca5ea5d04a3417488516049c5a24da757c5b620" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x529c31d9ae453f504aca984af7395835e6f0506d31629cb0b004b3a366ac8dbd", + "s": "0x4f46e9539685099a672c9bcd19405b6a93519a520f56933ea5ac46b934bc5398", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x513519bdafaae7024241520d0f44d69343b0940967681409b8c2328933e76e8e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c0b7684359a03f531ac50d79dbeede3062f11569afb586039f1629c30860ea01a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc0b7684359a03f531ac50d79dbeede3062f11569afb586039f1629c30860ea01", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xce7150ebb07a500657ec2d0fcfb1ea3ebef875f5ebf69afe13cb26443661f2e9" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0ce7150ebb07a500657ec2d0fcfb1ea3ebef875f5ebf69afe13cb26443661f2e9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04df702d6d4c414c159c8dcf5c71ff267f59f478b79fb69db6c24ce00c339a9d9a049024415ec28f70c81dc5e1e9da5d3b2119aafeb9d17637770556d1c0697b6b6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070782520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000080a096c80b1997004ef6966154ab3eff4744143b5dd8e4ecc86f964b610f5804658ea01f891ce09acd89acaa2ba2366d4e51a4b58b2510e8f029a4474c4a5f6eacacc3c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xce7150ebb07a500657ec2d0fcfb1ea3ebef875f5ebf69afe13cb26443661f2e9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4df702d6d4c414c159c8dcf5c71ff267f59f478b79fb69db6c24ce00c339a9d9", + "transactionsTrie": "0x49024415ec28f70c81dc5e1e9da5d3b2119aafeb9d17637770556d1c0697b6b6", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x53d0be7aca429094e4f73eb8653c6a49791cc5a2f4eeea2bc29ef3aba73f9438" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x96c80b1997004ef6966154ab3eff4744143b5dd8e4ecc86f964b610f5804658e", + "s": "0x1f891ce09acd89acaa2ba2366d4e51a4b58b2510e8f029a4474c4a5f6eacacc3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xce7150ebb07a500657ec2d0fcfb1ea3ebef875f5ebf69afe13cb26443661f2e9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e53", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e53", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03fa302c0ebd56328c5c9e58adda6bf0aa2129cfcaba470f95b8ca2e6b5a2623ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3fa302c0ebd56328c5c9e58adda6bf0aa2129cfcaba470f95b8ca2e6b5a2623b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd99f971558a01f917599c7f3d5ea5e09a75fef6f02a4b0ece119841e4f4a66dd" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0d99f971558a01f917599c7f3d5ea5e09a75fef6f02a4b0ece119841e4f4a66dda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07e12dfdbe76a1d43f6cc033125433156ad3e8746aecc0859b34581d5dda49664a08edf9fe5fe7fe9758f8b9b0adc54c6f9642d6bbf42e0269957c8b28e58bdf937a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0f937418a264476fa995ee99440e504526bd43a168b7ea6d8d9b9a4cb7d17f356a054d223626823aba0b3549f1a6c82620a4e194c7b289e46dd840f79536055e68dc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xd99f971558a01f917599c7f3d5ea5e09a75fef6f02a4b0ece119841e4f4a66dd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7e12dfdbe76a1d43f6cc033125433156ad3e8746aecc0859b34581d5dda49664", + "transactionsTrie": "0x8edf9fe5fe7fe9758f8b9b0adc54c6f9642d6bbf42e0269957c8b28e58bdf937", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x69c52d5f90285f1007bb88eefa12734553a09e90b6ea15eb35dbe6987ef64d06" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xf937418a264476fa995ee99440e504526bd43a168b7ea6d8d9b9a4cb7d17f356", + "s": "0x54d223626823aba0b3549f1a6c82620a4e194c7b289e46dd840f79536055e68d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xd99f971558a01f917599c7f3d5ea5e09a75fef6f02a4b0ece119841e4f4a66dd", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7db", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7db", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02217ba2d9219477e070a55ce807754197e968d3b97ac2a52c00dd4c09cb1a0f6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2217ba2d9219477e070a55ce807754197e968d3b97ac2a52c00dd4c09cb1a0f6", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x689ca387d83af9d0b58cbf35ba066a24bb23c8bda13b5a858614a2bdc8ff9497" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0689ca387d83af9d0b58cbf35ba066a24bb23c8bda13b5a858614a2bdc8ff9497a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0020cdffb1f4f36d45fd40ee1315b528475cd0f0aa083fea4cd0d01c97d60d051a0babf821b55346493fc7433b6248ce0ced8802495761a31b3015063ad9e0d4c90a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e82520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000080a02441528b877382681c17d8c5558c74faa471adb4aa39a06190e526f12fb99edca067c088db533184a563e2c29e6c14ef09f4cc9586b3d099eaf06682eb8cc9d5efc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x689ca387d83af9d0b58cbf35ba066a24bb23c8bda13b5a858614a2bdc8ff9497", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x020cdffb1f4f36d45fd40ee1315b528475cd0f0aa083fea4cd0d01c97d60d051", + "transactionsTrie": "0xbabf821b55346493fc7433b6248ce0ced8802495761a31b3015063ad9e0d4c90", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf8c72a215e35ad484d81655d4682b56ae051dac0f9c3e658abb97c5d8079116d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x2441528b877382681c17d8c5558c74faa471adb4aa39a06190e526f12fb99edc", + "s": "0x67c088db533184a563e2c29e6c14ef09f4cc9586b3d099eaf06682eb8cc9d5ef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x689ca387d83af9d0b58cbf35ba066a24bb23c8bda13b5a858614a2bdc8ff9497", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09dc3972089fd055f360f33e6143caf357b16744fdb1612ecb50b978c2d196823a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9dc3972089fd055f360f33e6143caf357b16744fdb1612ecb50b978c2d196823", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x513519bdafaae7024241520d0f44d69343b0940967681409b8c2328933e76e8e" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0513519bdafaae7024241520d0f44d69343b0940967681409b8c2328933e76e8ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ee7adc94395c79b6314559c1c5c8e12255eb9d5bb4fc9736ee577fcabe89fca4a0f5e6dab73da9a8e6039363dde20b6b77fa905187239ebf48c528c412226dbc7da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0b23a0e316ff3b921e4c8f4febf04420f7d620bef7848c140c834d2a613e9a514a0719aadadc8fa187f45d47289a867b917b73202816813234f257a13f35eada6b0c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x513519bdafaae7024241520d0f44d69343b0940967681409b8c2328933e76e8e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xee7adc94395c79b6314559c1c5c8e12255eb9d5bb4fc9736ee577fcabe89fca4", + "transactionsTrie": "0xf5e6dab73da9a8e6039363dde20b6b77fa905187239ebf48c528c412226dbc7d", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x10b69ed9f7c9aa97442253e9d5057f055fa31e88c0ed4e7bec7ec5cdde8c2f9b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb23a0e316ff3b921e4c8f4febf04420f7d620bef7848c140c834d2a613e9a514", + "s": "0x719aadadc8fa187f45d47289a867b917b73202816813234f257a13f35eada6b0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x513519bdafaae7024241520d0f44d69343b0940967681409b8c2328933e76e8e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0184591d95b8c0bfde44d77b9b59eaa3763d26b4505a27a8314143419d910f477a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x184591d95b8c0bfde44d77b9b59eaa3763d26b4505a27a8314143419d910f477", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a01fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa082978773c9ba6dde9175d80292ab35a78305d7bae8ff15db307b0514c882e732a08d6971566f6332052cc4f884fb0db7e64dc59855a65eb0c6e1cb8a96fa4fe23fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a094087124ffebc262096c525618f323d77c3efafa0bede6728689a86e0babb25ca06f2e99b4c2134b96cbd32c0745af51e2dced52486f87a8f283b6dc35dc4844e0c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x82978773c9ba6dde9175d80292ab35a78305d7bae8ff15db307b0514c882e732", + "transactionsTrie": "0x8d6971566f6332052cc4f884fb0db7e64dc59855a65eb0c6e1cb8a96fa4fe23f", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x45a7044ecfa48eeefcbbbee24c9bee86855c19077b7a97630c169e958bfe6d35" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x94087124ffebc262096c525618f323d77c3efafa0bede6728689a86e0babb25c", + "s": "0x6f2e99b4c2134b96cbd32c0745af51e2dced52486f87a8f283b6dc35dc4844e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0cd9cf78a724fe7cd3166ca72d749021b141a143dadaae159fd74ea589744f935a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xcd9cf78a724fe7cd3166ca72d749021b141a143dadaae159fd74ea589744f935", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a06d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0353f03515b53ba05fc1dbbec8b764124588058211fe03f0127c9a8eb5e9dd5cba025029ba1c6ad9f1b6e624943247b0d1d8dac98247271ec9418e6ac21a687f7aaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a08a8ac3f2415691ecd3f24d113570a40aff875be4f68bee1cf931087c1083fbfca05e53c44fb68dce8d41bed44dd5d7d849c9300e342fd9ae9d556c415f28afb85dc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x353f03515b53ba05fc1dbbec8b764124588058211fe03f0127c9a8eb5e9dd5cb", + "transactionsTrie": "0x25029ba1c6ad9f1b6e624943247b0d1d8dac98247271ec9418e6ac21a687f7aa", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcc9f53a6fcc87009e23b3335d122b4a026bcc9a1b2aa01f9b1b5892496026235" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8a8ac3f2415691ecd3f24d113570a40aff875be4f68bee1cf931087c1083fbfc", + "s": "0x5e53c44fb68dce8d41bed44dd5d7d849c9300e342fd9ae9d556c415f28afb85d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06bb16bae34728b67032d60d1a0daa0644efc20a1d8a8c64b416c33d6ef66eb5aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6bb16bae34728b67032d60d1a0daa0644efc20a1d8a8c64b416c33d6ef66eb5a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0b14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437dba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e74c1c836a04f2ad56535b471f34865679e0f3792cbe780c341cca41c8996fe3a00a4f245dfe63beb32fd745966a8a44e00b6756bd0af83a1a7c0be149b357530fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e82520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a02fb069829a347a12b3637f415bff932384ba6d6fcbd1d19cd69bc5904c17cf96a04171a9b53de0c60897e882360f158942560c8d4ed3e88ba57985d7b989cc9328c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe74c1c836a04f2ad56535b471f34865679e0f3792cbe780c341cca41c8996fe3", + "transactionsTrie": "0x0a4f245dfe63beb32fd745966a8a44e00b6756bd0af83a1a7c0be149b357530f", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x29e16bf1244af1818f039e5cf819b2a34cb9f17700db746e14049d0bfa9a14c8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2fb069829a347a12b3637f415bff932384ba6d6fcbd1d19cd69bc5904c17cf96", + "s": "0x4171a9b53de0c60897e882360f158942560c8d4ed3e88ba57985d7b989cc9328", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a030d61b3044e87d00cbfc1cae9fc41fcbfc1ef26cb1dddadae6ebed3871d51401a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x30d61b3044e87d00cbfc1cae9fc41fcbfc1ef26cb1dddadae6ebed3871d51401", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a09d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ceda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01991241a95728e4b68d87408a8d0fbc7c58cbf73deb3f596670905d41789aa3ca014b2dd31eb3aa84ec94b66f316a45ea0577e5a58c63e1bf33fd746c6b52cdb29a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a08d30d7f415b8e335a34296975eb829ff1498b0062cd6aa6facd22d84add43741a03c6e28fb8bd9736f7fc2dd7ab5ae46cb3e85c63fe950068ac2847093422c12f6c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1991241a95728e4b68d87408a8d0fbc7c58cbf73deb3f596670905d41789aa3c", + "transactionsTrie": "0x14b2dd31eb3aa84ec94b66f316a45ea0577e5a58c63e1bf33fd746c6b52cdb29", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcb7e12704eb3811908820c8518429756ebf0eb10f133d2e451a8f953ad019672" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8d30d7f415b8e335a34296975eb829ff1498b0062cd6aa6facd22d84add43741", + "s": "0x3c6e28fb8bd9736f7fc2dd7ab5ae46cb3e85c63fe950068ac2847093422c12f6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0184591d95b8c0bfde44d77b9b59eaa3763d26b4505a27a8314143419d910f477a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x184591d95b8c0bfde44d77b9b59eaa3763d26b4505a27a8314143419d910f477", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a01fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa082978773c9ba6dde9175d80292ab35a78305d7bae8ff15db307b0514c882e732a0715293c00468a7bbe10c1b21549572f3b0a519fbcd917dcefc8babdff25836c4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070782520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0cbccea1d9ac9ae74e77c055f8960896299317361600f705b0b5c2f3b1780ddf0a074d9517bdcb166593cffadace95c7daa7884eda0a433909506ce982839b50d76c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x82978773c9ba6dde9175d80292ab35a78305d7bae8ff15db307b0514c882e732", + "transactionsTrie": "0x715293c00468a7bbe10c1b21549572f3b0a519fbcd917dcefc8babdff25836c4", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x98d5f6d3166b1d51b0cb143769c4fe31de0975d85eee059796c773db51190adf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xcbccea1d9ac9ae74e77c055f8960896299317361600f705b0b5c2f3b1780ddf0", + "s": "0x74d9517bdcb166593cffadace95c7daa7884eda0a433909506ce982839b50d76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0cd9cf78a724fe7cd3166ca72d749021b141a143dadaae159fd74ea589744f935a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xcd9cf78a724fe7cd3166ca72d749021b141a143dadaae159fd74ea589744f935", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a06d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0353f03515b53ba05fc1dbbec8b764124588058211fe03f0127c9a8eb5e9dd5cba0909911ceff3d19d2640998cd75ffdc74f147f2faa3b3b1906d1dc47648cbae8fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a08916770ab7883d7f9c6c48442f6e505b61be71fadecb2618b7b201d3f08bb97aa062b2679c11c1566e3cd0f8243be058c00187d8765c3d2466e428e4eb8540a17fc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x353f03515b53ba05fc1dbbec8b764124588058211fe03f0127c9a8eb5e9dd5cb", + "transactionsTrie": "0x909911ceff3d19d2640998cd75ffdc74f147f2faa3b3b1906d1dc47648cbae8f", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2bd4996792fbe1131e8dc2d862f064fd1c9323728c3d41c7b61f61ea53e154e2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8916770ab7883d7f9c6c48442f6e505b61be71fadecb2618b7b201d3f08bb97a", + "s": "0x62b2679c11c1566e3cd0f8243be058c00187d8765c3d2466e428e4eb8540a17f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06bb16bae34728b67032d60d1a0daa0644efc20a1d8a8c64b416c33d6ef66eb5aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6bb16bae34728b67032d60d1a0daa0644efc20a1d8a8c64b416c33d6ef66eb5a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0b14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437dba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e74c1c836a04f2ad56535b471f34865679e0f3792cbe780c341cca41c8996fe3a071f37acc27299267c3c1f0d22f8c1f5e7def3787aca4bdff882c7e38e19cedcaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e82520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000080a06b8cab69739e2a7d026f392720de8e9bac652a34517fd098bd3fab9ef0e68667a0054662b699c9d17432337f6562fe0ef9ac3d10e6c96a258617e3a2ac5038d726c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe74c1c836a04f2ad56535b471f34865679e0f3792cbe780c341cca41c8996fe3", + "transactionsTrie": "0x71f37acc27299267c3c1f0d22f8c1f5e7def3787aca4bdff882c7e38e19cedca", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x78f600f1554d9dc0b467eab2dc72db8ed36bf3931a337a0fd187eca377f62687" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6b8cab69739e2a7d026f392720de8e9bac652a34517fd098bd3fab9ef0e68667", + "s": "0x054662b699c9d17432337f6562fe0ef9ac3d10e6c96a258617e3a2ac5038d726", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a030d61b3044e87d00cbfc1cae9fc41fcbfc1ef26cb1dddadae6ebed3871d51401a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x30d61b3044e87d00cbfc1cae9fc41fcbfc1ef26cb1dddadae6ebed3871d51401", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a09d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ceda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01991241a95728e4b68d87408a8d0fbc7c58cbf73deb3f596670905d41789aa3ca03182984bd865c919fb102608800d49f0ade5063f67226373b6cd0bc403c00961a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0af313df2c7f6470f0df6e089617096ade67544fda4b3991ecaf41a813cde1591a014a02b92369c3e29188cd3d4aabfdcec9c8748cada270ad13d1f880ae1ed18cac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1991241a95728e4b68d87408a8d0fbc7c58cbf73deb3f596670905d41789aa3c", + "transactionsTrie": "0x3182984bd865c919fb102608800d49f0ade5063f67226373b6cd0bc403c00961", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3b75c0b825ba69a6eba2ebb84743ef3cdffddda7134fef060513aa1b0651a321" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaf313df2c7f6470f0df6e089617096ade67544fda4b3991ecaf41a813cde1591", + "s": "0x14a02b92369c3e29188cd3d4aabfdcec9c8748cada270ad13d1f880ae1ed18ca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c1eab56203be237ceef96f9925b731eeaca31d164e09e4bcfefccb24b7c26b5fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc1eab56203be237ceef96f9925b731eeaca31d164e09e4bcfefccb24b7c26b5f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6e82748616a060e53bd19562e25069e1f3d6842d4f7517a94ab439c4323a91f0" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a06e82748616a060e53bd19562e25069e1f3d6842d4f7517a94ab439c4323a91f0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a45e18b290d916077af18df5d144e308de75ac24dfa5915ea8adc8415d672ffda065e4a709de70d94125b86eaee5ac72bb6d9fa470c5434af07f0a9e7569cebb07a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000001a07f9f5fe3e754c4e688723d0e7ddd66878f516905c65af8fb2882ecaa0c279001a00c3c893125789852c1f90f1ae6698ab692f8622ad3c03361db826da0d7b960d8c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6e82748616a060e53bd19562e25069e1f3d6842d4f7517a94ab439c4323a91f0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa45e18b290d916077af18df5d144e308de75ac24dfa5915ea8adc8415d672ffd", + "transactionsTrie": "0x65e4a709de70d94125b86eaee5ac72bb6d9fa470c5434af07f0a9e7569cebb07", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x74dbef0654182d5a1393b9a4dc32a1d1693fe6eb555c99d8ac6ddad3d208f164" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7f9f5fe3e754c4e688723d0e7ddd66878f516905c65af8fb2882ecaa0c279001", + "s": "0x0c3c893125789852c1f90f1ae6698ab692f8622ad3c03361db826da0d7b960d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6e82748616a060e53bd19562e25069e1f3d6842d4f7517a94ab439c4323a91f0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0415cf0e4880626ff5279a9093db356d74db5cb8ea4b94d269dbb094580e2f3b4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x415cf0e4880626ff5279a9093db356d74db5cb8ea4b94d269dbb094580e2f3b4", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcb73ecfff82f8f59cb1bac589095c44e20a87951a9a6603ec3e919c42bde6ee0" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0cb73ecfff82f8f59cb1bac589095c44e20a87951a9a6603ec3e919c42bde6ee0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa067d0d233f5a05b49ed45c7a476d8fb88eda2530b42352d7dd101da17545600c3a024adad1f08d19cd11704dc69b19004948fd45337747968d4184da4ee33dde95ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a04df0b9fa2a4a26645d3babd7abd1532d50aebd7ed3ffe6587c06d0f6b505fa5ea0756dd50a07befcb8a184447e0f901873c4ab3c3e4790d3b1bd1edc421cc171b4c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xcb73ecfff82f8f59cb1bac589095c44e20a87951a9a6603ec3e919c42bde6ee0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x67d0d233f5a05b49ed45c7a476d8fb88eda2530b42352d7dd101da17545600c3", + "transactionsTrie": "0x24adad1f08d19cd11704dc69b19004948fd45337747968d4184da4ee33dde95c", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe7f39d300e9e10510f504cc09685cf8d1e41913b01ba33c20d83b34b917ea455" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x4df0b9fa2a4a26645d3babd7abd1532d50aebd7ed3ffe6587c06d0f6b505fa5e", + "s": "0x756dd50a07befcb8a184447e0f901873c4ab3c3e4790d3b1bd1edc421cc171b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xcb73ecfff82f8f59cb1bac589095c44e20a87951a9a6603ec3e919c42bde6ee0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae82f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae82f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a025efc19725b60577d177c2beb8fde55fbb9091426e740ee02cfba57aff53cb91a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x25efc19725b60577d177c2beb8fde55fbb9091426e740ee02cfba57aff53cb91", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3226e46f5176c0fcf57b8c1b6d40da7f29e09c886a542b789c8e4a808a33bc03" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a03226e46f5176c0fcf57b8c1b6d40da7f29e09c886a542b789c8e4a808a33bc03a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04bad1607dcd4aae25723d9a5a752e1eb92da88df5b28e5e86939f788034e473ba0a7662556a9d9773c498b2f91fb1b261ed89c8411527de6bff084e9304f2154f5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000001a07b6d127075d940d526441f2673fa9e266c7d827e8db33d213837e3a19a9a8f08a070446308e00776b7235a9b142adaf668e0f9a05f594d019a8c8090a505ee3763c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3226e46f5176c0fcf57b8c1b6d40da7f29e09c886a542b789c8e4a808a33bc03", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4bad1607dcd4aae25723d9a5a752e1eb92da88df5b28e5e86939f788034e473b", + "transactionsTrie": "0xa7662556a9d9773c498b2f91fb1b261ed89c8411527de6bff084e9304f2154f5", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3d16878f07b1538973fe6e69702848eefc617454f58c7a1aa5c3ca0da8f55743" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7b6d127075d940d526441f2673fa9e266c7d827e8db33d213837e3a19a9a8f08", + "s": "0x70446308e00776b7235a9b142adaf668e0f9a05f594d019a8c8090a505ee3763", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3226e46f5176c0fcf57b8c1b6d40da7f29e09c886a542b789c8e4a808a33bc03", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d4f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d4f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08ed262896393e07bddad9686c6235a77ebb110dcbd45e48922b519d2225cc1f5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8ed262896393e07bddad9686c6235a77ebb110dcbd45e48922b519d2225cc1f5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb2b6a45dd1689f193efe9150677d4764b3c702b705e902630cf174356bbf8d3a" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0b2b6a45dd1689f193efe9150677d4764b3c702b705e902630cf174356bbf8d3aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04ea1ad4c1d74ffbb44062898f3be2952c80e6d1862fe45186ab4321687140a42a0621d99c43c6b4c99ba207ec9fadbbe3af6e2081e3049239709902fe8e5adf06aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a09216c81fba6f7f214faa74d673fd85037f15e62e10dffc3a636467ef03223b25a05e8e99f04cafb7a33f7ab64d96c2bed6a34a0804299a6a078d61d0ea7ec97453c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb2b6a45dd1689f193efe9150677d4764b3c702b705e902630cf174356bbf8d3a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4ea1ad4c1d74ffbb44062898f3be2952c80e6d1862fe45186ab4321687140a42", + "transactionsTrie": "0x621d99c43c6b4c99ba207ec9fadbbe3af6e2081e3049239709902fe8e5adf06a", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc13f2e9cdf0994e219e1c6fb4ff0403727279aca92982d25a3c3b7e3277443f2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9216c81fba6f7f214faa74d673fd85037f15e62e10dffc3a636467ef03223b25", + "s": "0x5e8e99f04cafb7a33f7ab64d96c2bed6a34a0804299a6a078d61d0ea7ec97453", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb2b6a45dd1689f193efe9150677d4764b3c702b705e902630cf174356bbf8d3a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd05f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd05f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c1eab56203be237ceef96f9925b731eeaca31d164e09e4bcfefccb24b7c26b5fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc1eab56203be237ceef96f9925b731eeaca31d164e09e4bcfefccb24b7c26b5f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6e82748616a060e53bd19562e25069e1f3d6842d4f7517a94ab439c4323a91f0" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a06e82748616a060e53bd19562e25069e1f3d6842d4f7517a94ab439c4323a91f0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a45e18b290d916077af18df5d144e308de75ac24dfa5915ea8adc8415d672ffda0f31521fadd3a9ca9b1610de68885d4812312c8c043879d7e72dfc2391e6cd693a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0a12fd8521bc1b70afbda5b65b0251fd51fc5cc285e75b3ad4b9f4fbf6bc8c633a04cf80fd18df6dfc2895dde80f5ec0ace9bc9f9c9dc734ea57ed15b0077bcc3dcc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6e82748616a060e53bd19562e25069e1f3d6842d4f7517a94ab439c4323a91f0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa45e18b290d916077af18df5d144e308de75ac24dfa5915ea8adc8415d672ffd", + "transactionsTrie": "0xf31521fadd3a9ca9b1610de68885d4812312c8c043879d7e72dfc2391e6cd693", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x151c2bee81a331d0fba9e99ad782f3cb78d95a0c749d14ea17b973555feafc12" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa12fd8521bc1b70afbda5b65b0251fd51fc5cc285e75b3ad4b9f4fbf6bc8c633", + "s": "0x4cf80fd18df6dfc2895dde80f5ec0ace9bc9f9c9dc734ea57ed15b0077bcc3dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6e82748616a060e53bd19562e25069e1f3d6842d4f7517a94ab439c4323a91f0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea7", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea7", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0415cf0e4880626ff5279a9093db356d74db5cb8ea4b94d269dbb094580e2f3b4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x415cf0e4880626ff5279a9093db356d74db5cb8ea4b94d269dbb094580e2f3b4", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcb73ecfff82f8f59cb1bac589095c44e20a87951a9a6603ec3e919c42bde6ee0" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0cb73ecfff82f8f59cb1bac589095c44e20a87951a9a6603ec3e919c42bde6ee0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa067d0d233f5a05b49ed45c7a476d8fb88eda2530b42352d7dd101da17545600c3a0a7ea5c052b5a65520780c8686f1923e727fab4dd4990e146b4caf57cd938b2ada056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0aaf62538a9d4930cf4e98750aa930ffc8df47a5bb59d03752c625a101a5e4de9a023c4d3d442bbcd35c070779efe7d5c1b0a456ce9ae055c2d068e489f5b5f83c6c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xcb73ecfff82f8f59cb1bac589095c44e20a87951a9a6603ec3e919c42bde6ee0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x67d0d233f5a05b49ed45c7a476d8fb88eda2530b42352d7dd101da17545600c3", + "transactionsTrie": "0xa7ea5c052b5a65520780c8686f1923e727fab4dd4990e146b4caf57cd938b2ad", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xec4ba646fa316041ab3d5905d1a8c36bd72f814f4a48379d5bfc5f417e565bf5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xaaf62538a9d4930cf4e98750aa930ffc8df47a5bb59d03752c625a101a5e4de9", + "s": "0x23c4d3d442bbcd35c070779efe7d5c1b0a456ce9ae055c2d068e489f5b5f83c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xcb73ecfff82f8f59cb1bac589095c44e20a87951a9a6603ec3e919c42bde6ee0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae82f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae82f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a025efc19725b60577d177c2beb8fde55fbb9091426e740ee02cfba57aff53cb91a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x25efc19725b60577d177c2beb8fde55fbb9091426e740ee02cfba57aff53cb91", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3226e46f5176c0fcf57b8c1b6d40da7f29e09c886a542b789c8e4a808a33bc03" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a03226e46f5176c0fcf57b8c1b6d40da7f29e09c886a542b789c8e4a808a33bc03a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04bad1607dcd4aae25723d9a5a752e1eb92da88df5b28e5e86939f788034e473ba0807a9f60268e508427e6c804bd920ad97ed5dc14b6ea7bfe3fb41d0f744b3404a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0c46d4ebc2d59526c53e7a728f6f4e60e8096b204211d1b305fdf78f89acc1e70a03c7eeddd006e6c4ae8bf01e175195cf3ee97cc47aaf0bf3134177b319abb1e39c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3226e46f5176c0fcf57b8c1b6d40da7f29e09c886a542b789c8e4a808a33bc03", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4bad1607dcd4aae25723d9a5a752e1eb92da88df5b28e5e86939f788034e473b", + "transactionsTrie": "0x807a9f60268e508427e6c804bd920ad97ed5dc14b6ea7bfe3fb41d0f744b3404", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2daf96e30a9025f4542b6674cf3e75a3492ec559b94576cd3f1397ac5e4eafcd" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xc46d4ebc2d59526c53e7a728f6f4e60e8096b204211d1b305fdf78f89acc1e70", + "s": "0x3c7eeddd006e6c4ae8bf01e175195cf3ee97cc47aaf0bf3134177b319abb1e39", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3226e46f5176c0fcf57b8c1b6d40da7f29e09c886a542b789c8e4a808a33bc03", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d4f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d4f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08ed262896393e07bddad9686c6235a77ebb110dcbd45e48922b519d2225cc1f5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8ed262896393e07bddad9686c6235a77ebb110dcbd45e48922b519d2225cc1f5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb2b6a45dd1689f193efe9150677d4764b3c702b705e902630cf174356bbf8d3a" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0b2b6a45dd1689f193efe9150677d4764b3c702b705e902630cf174356bbf8d3aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04ea1ad4c1d74ffbb44062898f3be2952c80e6d1862fe45186ab4321687140a42a014c7b54a4be7d67ddce79e24d35db43fcadd6d922ddf31165830bfefd620e31ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0792fbaddebd163ada29d19d2ef81c5550a3166263a6e738c2eb8074329e29675a02cb7428c63a5e4ef145ff51bff3fa2f7b3486893465446be46a48fd13ce5b878c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb2b6a45dd1689f193efe9150677d4764b3c702b705e902630cf174356bbf8d3a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4ea1ad4c1d74ffbb44062898f3be2952c80e6d1862fe45186ab4321687140a42", + "transactionsTrie": "0x14c7b54a4be7d67ddce79e24d35db43fcadd6d922ddf31165830bfefd620e31b", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5aae61541ad8c96a7f7d328b870994f0b272824a28e51e9fd9044b6c4fcb2843" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x792fbaddebd163ada29d19d2ef81c5550a3166263a6e738c2eb8074329e29675", + "s": "0x2cb7428c63a5e4ef145ff51bff3fa2f7b3486893465446be46a48fd13ce5b878", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb2b6a45dd1689f193efe9150677d4764b3c702b705e902630cf174356bbf8d3a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd05f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd05f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a050e00198d9f73a29f05d30db8d790fa95328b238f55faa5a2445d034292eb7fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x50e00198d9f73a29f05d30db8d790fa95328b238f55faa5a2445d034292eb7fc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a03864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d26c00170304da2cfa471ab30a550eda6974d890e000e3881451f1f51c300b95a05d3dfcf0eb3f53941849dcbdd9c78308a55c1dada38b741a3cbdbbd27aec6aa2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a006883411220464f72192002f0a60cb808a6eae4bea1f5132e1781fd4fda103eea04aa561534729a93553281328f36d7151485241f744d7f61e22c8e1f80df0c83ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd26c00170304da2cfa471ab30a550eda6974d890e000e3881451f1f51c300b95", + "transactionsTrie": "0x5d3dfcf0eb3f53941849dcbdd9c78308a55c1dada38b741a3cbdbbd27aec6aa2", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x50c463876347524d87ec49272dec8de7e1d74335d0fea8f90adfe4812d66f410" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x06883411220464f72192002f0a60cb808a6eae4bea1f5132e1781fd4fda103ee", + "s": "0x4aa561534729a93553281328f36d7151485241f744d7f61e22c8e1f80df0c83e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b55b6dcd3a1d54d067c6cdca97b50d87120810742f2fd424feba8c8930192607a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb55b6dcd3a1d54d067c6cdca97b50d87120810742f2fd424feba8c8930192607", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a04f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e6bb0c131c2aef4d7fd0c831a14b7f45a08a6b586f07bb54468087ab63e935b2a03cffea38dd99d1d374d835b530d74fded48667455c795733a72ce206fc2681e1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a01a0866792a9db84324b32c8c3c787c47a38a2735cdda280080b0644b8f6408f8a0074d889fed3ef481fb6a44aa9759e40584672e3becd5ce3655542b78679e3a6bc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe6bb0c131c2aef4d7fd0c831a14b7f45a08a6b586f07bb54468087ab63e935b2", + "transactionsTrie": "0x3cffea38dd99d1d374d835b530d74fded48667455c795733a72ce206fc2681e1", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2be97bf32562f9acfa095ab33b54010fcca32ad7c1a42a7a4efa9ca714434c65" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x1a0866792a9db84324b32c8c3c787c47a38a2735cdda280080b0644b8f6408f8", + "s": "0x074d889fed3ef481fb6a44aa9759e40584672e3becd5ce3655542b78679e3a6b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f2756baec5875c9e1e89da994cc35921dcabe34b936ee9dc419d58f646389eda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6f2756baec5875c9e1e89da994cc35921dcabe34b936ee9dc419d58f646389ed", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0b42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a4fc260634d62b7e7eb0bd7482628102854352846ba22d254e086b12eff6812a071d427e892d311770b8f34172bea1173140e999d75a6f7e5eebaa62e03d4346fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0c6cd039f7dee69dae122acee65f6e638b9a5399539cf3c51dbda2d06c6d042d3a073065b82c46ead5ffc0340db4dd99433f1c8cc7c0cdd05120128d8aadc9573f5c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1a4fc260634d62b7e7eb0bd7482628102854352846ba22d254e086b12eff6812", + "transactionsTrie": "0x71d427e892d311770b8f34172bea1173140e999d75a6f7e5eebaa62e03d4346f", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7681650d5d9ef72f214af658751978aa070b11910f7ac7945f3568c8396b64fc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xc6cd039f7dee69dae122acee65f6e638b9a5399539cf3c51dbda2d06c6d042d3", + "s": "0x73065b82c46ead5ffc0340db4dd99433f1c8cc7c0cdd05120128d8aadc9573f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d50", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0249e218265747906f280125815117a6d1edf04c6d5b312ac04d9b965db3a55e5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x249e218265747906f280125815117a6d1edf04c6d5b312ac04d9b965db3a55e5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0c5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f47c6b8a2aacd28cdad1096c503ca8b9638401355c62971cdbcda7e98b757cf1a0cc1ca0c26216d4a49dc2fa84c03716e11601070fc2a0d5ae6f00f3f38f107f49a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0b6b209031ac8abc022c73579aca72a1a82c27df43895fcc918466eccc68f977da06f28e699d4fb3021316f632f616179029b9cdbe464b5b25d6794c97e24904a3fc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf47c6b8a2aacd28cdad1096c503ca8b9638401355c62971cdbcda7e98b757cf1", + "transactionsTrie": "0xcc1ca0c26216d4a49dc2fa84c03716e11601070fc2a0d5ae6f00f3f38f107f49", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4a2077525e90fb779757851d9e0ef4286a2caf65be91e7dcde135dc3da9d12f9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xb6b209031ac8abc022c73579aca72a1a82c27df43895fcc918466eccc68f977d", + "s": "0x6f28e699d4fb3021316f632f616179029b9cdbe464b5b25d6794c97e24904a3f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd060", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a050e00198d9f73a29f05d30db8d790fa95328b238f55faa5a2445d034292eb7fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x50e00198d9f73a29f05d30db8d790fa95328b238f55faa5a2445d034292eb7fc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a03864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d26c00170304da2cfa471ab30a550eda6974d890e000e3881451f1f51c300b95a075c52e42b819771524b5b3473aae70bd4250a846ec4c0dd7fdf2504801599893a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0469ed640a73150fef29feafa9d3ff7ec754759193a05c6bfd951348c696c826ba0545c8818de996aabcedacd4d0de6bc6d4be5f37020bf015069a98436b5af368ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd26c00170304da2cfa471ab30a550eda6974d890e000e3881451f1f51c300b95", + "transactionsTrie": "0x75c52e42b819771524b5b3473aae70bd4250a846ec4c0dd7fdf2504801599893", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf97ae34e056a79e1ebb4f20ae023086adbed64182047954f30c206ed751d5296" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x469ed640a73150fef29feafa9d3ff7ec754759193a05c6bfd951348c696c826b", + "s": "0x545c8818de996aabcedacd4d0de6bc6d4be5f37020bf015069a98436b5af368a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b55b6dcd3a1d54d067c6cdca97b50d87120810742f2fd424feba8c8930192607a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb55b6dcd3a1d54d067c6cdca97b50d87120810742f2fd424feba8c8930192607", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a04f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e6bb0c131c2aef4d7fd0c831a14b7f45a08a6b586f07bb54468087ab63e935b2a08c022eb5f720d553e22c4cb0542f3d8c13b409da867ab0c6fc2978d617081a16a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a06793576d99c0cb92abdd40a78a282ad414062720cdafcdeee08bcdafe16008aba05b67522ff1e5a2069b7ec5bacc56a361a2d26183dad45e47ec135cf209631a0fc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe6bb0c131c2aef4d7fd0c831a14b7f45a08a6b586f07bb54468087ab63e935b2", + "transactionsTrie": "0x8c022eb5f720d553e22c4cb0542f3d8c13b409da867ab0c6fc2978d617081a16", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x789f3e27dd4c494a7e386f9b6d6968487521c9d53421dba9aa923a1f1a905d2b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6793576d99c0cb92abdd40a78a282ad414062720cdafcdeee08bcdafe16008ab", + "s": "0x5b67522ff1e5a2069b7ec5bacc56a361a2d26183dad45e47ec135cf209631a0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f2756baec5875c9e1e89da994cc35921dcabe34b936ee9dc419d58f646389eda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6f2756baec5875c9e1e89da994cc35921dcabe34b936ee9dc419d58f646389ed", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a0b42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a4fc260634d62b7e7eb0bd7482628102854352846ba22d254e086b12eff6812a0b80b9d49f9305f505fc8b24d4a9199a86555cbb78c3c53a12bbc3d46e0f49ae1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08663abe203791dc1b3e233ffc7bb979b03eebf14d96254d04cef257f783b779fa03cb436e1fa097da2d5399e1cf04dbc630a7e09ccab64cb706a9fc325caca22e2c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1a4fc260634d62b7e7eb0bd7482628102854352846ba22d254e086b12eff6812", + "transactionsTrie": "0xb80b9d49f9305f505fc8b24d4a9199a86555cbb78c3c53a12bbc3d46e0f49ae1", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x059f352fb05384437f0e51ce99bc4835f1d9e3442407290338eec6402bb76cb5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8663abe203791dc1b3e233ffc7bb979b03eebf14d96254d04cef257f783b779f", + "s": "0x3cb436e1fa097da2d5399e1cf04dbc630a7e09ccab64cb706a9fc325caca22e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d50", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0249e218265747906f280125815117a6d1edf04c6d5b312ac04d9b965db3a55e5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x249e218265747906f280125815117a6d1edf04c6d5b312ac04d9b965db3a55e5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8" + }, + "blocks": [ + { + "rlp": "0xf9032ff90242a0c5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f47c6b8a2aacd28cdad1096c503ca8b9638401355c62971cdbcda7e98b757cf1a0b8034c7c3f50cc9607c25b6086d17f068bac1ca67a58cb1051e16519f301b70aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a09bbeba8786747f3fe1a74cf51db594f25149991020bd16ccd19007467f55c244a001738eb94e5f213477fba07b1f77778e89db34d2467fd43b41d74b183561368ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf47c6b8a2aacd28cdad1096c503ca8b9638401355c62971cdbcda7e98b757cf1", + "transactionsTrie": "0xb8034c7c3f50cc9607c25b6086d17f068bac1ca67a58cb1051e16519f301b70a", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc9df9dfc800ffd07449188e4eb867f6ca11a0d833447a55fd3fb3a854feb7356" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x9bbeba8786747f3fe1a74cf51db594f25149991020bd16ccd19007467f55c244", + "s": "0x01738eb94e5f213477fba07b1f77778e89db34d2467fd43b41d74b183561368e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd060", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f121ef1616e1c6e5b97e33738dc543013ffc21aa44b6242aa7d05f4668a2006a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6f121ef1616e1c6e5b97e33738dc543013ffc21aa44b6242aa7d05f4668a2006", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a097c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2967b5d6a54d38bfbdd5570443e24cfc69e84d88207d103dd3eecf6b3e6567fa01f891ed49aa2ea2321e3194458246660119b2094690933c89531792faf8b40cda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a092c7b7ebc1af73ef5871030920e2b1b28b78ccdefac30a7851cbc34f77f9241ba0378b2976452d62627a6b1301c0df985b0c9d21c4172f4e2086938e55637800f2c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2967b5d6a54d38bfbdd5570443e24cfc69e84d88207d103dd3eecf6b3e6567f", + "transactionsTrie": "0x1f891ed49aa2ea2321e3194458246660119b2094690933c89531792faf8b40cd", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1461d9dfa1fbc0f79bbc1b0557737dc6b2b79390f8b4b116572da1406ae7f497" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x92c7b7ebc1af73ef5871030920e2b1b28b78ccdefac30a7851cbc34f77f9241b", + "s": "0x378b2976452d62627a6b1301c0df985b0c9d21c4172f4e2086938e55637800f2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e37", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e37", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05ac4e32020c2398302db6113a34a636a4559a539f4350cc43f490e581b53107da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5ac4e32020c2398302db6113a34a636a4559a539f4350cc43f490e581b53107d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xea45eb269f2cec1f3df4d8308dcec5a67009cce044de168a4d67ea571ed29a69" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a0ea45eb269f2cec1f3df4d8308dcec5a67009cce044de168a4d67ea571ed29a69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa024461750535bf3105d0be32e449d1cd8e188e64a7684ba173612c31223fc8b52a0205dbed08930d91230e256c5e14da790ab8ceeb1ee82f47177e1f106e72f1063a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a02ea305fe0e144b348cdc7358392d73386a4915efa1696416fd7e2d15141859c6a04b1bc94df15b149c2113fff900ffcc6ada64f58e04faa3feeff31380ac70a419c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xea45eb269f2cec1f3df4d8308dcec5a67009cce044de168a4d67ea571ed29a69", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x24461750535bf3105d0be32e449d1cd8e188e64a7684ba173612c31223fc8b52", + "transactionsTrie": "0x205dbed08930d91230e256c5e14da790ab8ceeb1ee82f47177e1f106e72f1063", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x57f5a1b46c7da53b53f22762430164a541b38c497a070e036cb785a304c0d899" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2ea305fe0e144b348cdc7358392d73386a4915efa1696416fd7e2d15141859c6", + "s": "0x4b1bc94df15b149c2113fff900ffcc6ada64f58e04faa3feeff31380ac70a419", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xea45eb269f2cec1f3df4d8308dcec5a67009cce044de168a4d67ea571ed29a69", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7bf", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7bf", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a042fd457baa2df2938154aee6ad53f589ae7ebcd2e5c2a7e70e4dd0dd02bb5046a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x42fd457baa2df2938154aee6ad53f589ae7ebcd2e5c2a7e70e4dd0dd02bb5046", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x747b4e1ade9040e51882038c7f1813138434642829b4c3241b247b3b75bc3faa" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a0747b4e1ade9040e51882038c7f1813138434642829b4c3241b247b3b75bc3faaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e7bf1d4e8f4d49d6980b9135da0ad544c7d5aff740c13d5b51b773133e7cf76ca08bddbee73c1ca78d23393b7471a1d8847504550af31bac50d06794f15125aef9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e8252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a050e3b68c3144a229669731c901428808797606bbea471424889e5d7812cbc6d5a027cf7c86194d064a3fb7fb85f32232ae3c77a2ca53a2bb59a58d2e747c80b8dfc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x747b4e1ade9040e51882038c7f1813138434642829b4c3241b247b3b75bc3faa", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe7bf1d4e8f4d49d6980b9135da0ad544c7d5aff740c13d5b51b773133e7cf76c", + "transactionsTrie": "0x8bddbee73c1ca78d23393b7471a1d8847504550af31bac50d06794f15125aef9", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x621107cb561c3f8e577f36c533b45a1952d5630409cd9e8657a2ff8d74705d84" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x50e3b68c3144a229669731c901428808797606bbea471424889e5d7812cbc6d5", + "s": "0x27cf7c86194d064a3fb7fb85f32232ae3c77a2ca53a2bb59a58d2e747c80b8df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x747b4e1ade9040e51882038c7f1813138434642829b4c3241b247b3b75bc3faa", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c6f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c6f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a030a3b3e04663c53cd80a6e79006927dc2528632f805b880265f85221c048b85fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x30a3b3e04663c53cd80a6e79006927dc2528632f805b880265f85221c048b85f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6ee2575f6c349114db03b007977c41cc492a5964ebe521901578777ba61f779e" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a06ee2575f6c349114db03b007977c41cc492a5964ebe521901578777ba61f779ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa047e2a6bd0f8d4d74fb57aa81992dfe4ac449844232c9f7d8443f4844772d9d8ea04e2b49d53dfca7d468703fd52dddde8be71c72ce80a66516829b8d76c48c7596a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a05b617c0c02004e5cc77e5bf21cb8865b70868ee8b52f41a8fa0910ba85e835eca04adfe5598248c0d3413e213fa47ae23f575aac2b69bf164e9dafea211c95dd9dc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6ee2575f6c349114db03b007977c41cc492a5964ebe521901578777ba61f779e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x47e2a6bd0f8d4d74fb57aa81992dfe4ac449844232c9f7d8443f4844772d9d8e", + "transactionsTrie": "0x4e2b49d53dfca7d468703fd52dddde8be71c72ce80a66516829b8d76c48c7596", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xda03bb5321071b715f92b5411f6bf9aff60007649cb84ee5a99cd5593b99cfb5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5b617c0c02004e5cc77e5bf21cb8865b70868ee8b52f41a8fa0910ba85e835ec", + "s": "0x4adfe5598248c0d3413e213fa47ae23f575aac2b69bf164e9dafea211c95dd9d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6ee2575f6c349114db03b007977c41cc492a5964ebe521901578777ba61f779e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf7f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf7f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f121ef1616e1c6e5b97e33738dc543013ffc21aa44b6242aa7d05f4668a2006a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6f121ef1616e1c6e5b97e33738dc543013ffc21aa44b6242aa7d05f4668a2006", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a097c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2967b5d6a54d38bfbdd5570443e24cfc69e84d88207d103dd3eecf6b3e6567fa0d4f25b3c0cf939e59318307d5168c81e5ec74b089dd77cdd91d2a47d4598fc88a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018007078252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0dd1b8f54fa20615f927ca07e90e90c7ac966bee167ccd718cbd792ddc9a9cbf7a07ff96b9573d80e2e5af4a6e11cd3440d6ec66b9ff9790d0dfaea603b429e22aec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2967b5d6a54d38bfbdd5570443e24cfc69e84d88207d103dd3eecf6b3e6567f", + "transactionsTrie": "0xd4f25b3c0cf939e59318307d5168c81e5ec74b089dd77cdd91d2a47d4598fc88", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf8df086df0e6be16e1ad1e0fb64b787b1ecde503d8d85188d6dd1b23d1175b6f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xdd1b8f54fa20615f927ca07e90e90c7ac966bee167ccd718cbd792ddc9a9cbf7", + "s": "0x7ff96b9573d80e2e5af4a6e11cd3440d6ec66b9ff9790d0dfaea603b429e22ae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e37", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e37", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05ac4e32020c2398302db6113a34a636a4559a539f4350cc43f490e581b53107da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5ac4e32020c2398302db6113a34a636a4559a539f4350cc43f490e581b53107d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xea45eb269f2cec1f3df4d8308dcec5a67009cce044de168a4d67ea571ed29a69" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a0ea45eb269f2cec1f3df4d8308dcec5a67009cce044de168a4d67ea571ed29a69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa024461750535bf3105d0be32e449d1cd8e188e64a7684ba173612c31223fc8b52a0e5cfcc9894070af694030d6884a417e3a2dba37285720ba0c76feddac7ebac68a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00d8ee2775fd2d4ccbc42622d28ffd9e8dc6291040718d87242c1466ce97ab25aa0738c1765113600b650463a50eb3d51e0c6385446daedd5a386599e0013ddf99cc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xea45eb269f2cec1f3df4d8308dcec5a67009cce044de168a4d67ea571ed29a69", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x24461750535bf3105d0be32e449d1cd8e188e64a7684ba173612c31223fc8b52", + "transactionsTrie": "0xe5cfcc9894070af694030d6884a417e3a2dba37285720ba0c76feddac7ebac68", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x357061699db0313280000aaadc2ef9f58faae1155a154524bcb3d51f74b9b501" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0d8ee2775fd2d4ccbc42622d28ffd9e8dc6291040718d87242c1466ce97ab25a", + "s": "0x738c1765113600b650463a50eb3d51e0c6385446daedd5a386599e0013ddf99c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xea45eb269f2cec1f3df4d8308dcec5a67009cce044de168a4d67ea571ed29a69", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7bf", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7bf", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a042fd457baa2df2938154aee6ad53f589ae7ebcd2e5c2a7e70e4dd0dd02bb5046a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x42fd457baa2df2938154aee6ad53f589ae7ebcd2e5c2a7e70e4dd0dd02bb5046", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x747b4e1ade9040e51882038c7f1813138434642829b4c3241b247b3b75bc3faa" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a0747b4e1ade9040e51882038c7f1813138434642829b4c3241b247b3b75bc3faaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e7bf1d4e8f4d49d6980b9135da0ad544c7d5aff740c13d5b51b773133e7cf76ca0adab475d1805aaf0c5db15e9d27731b8ffef411903ab9edd0db08729ba078866a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e8252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a09e33f45eb18e4dbf9712bcec6add17dc50de91825473a7247cc16af427e30958a0544db7b3b09d20e5f1f8f537655e0c9a864e72bb4ed77f225e5a4fde9711c944c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x747b4e1ade9040e51882038c7f1813138434642829b4c3241b247b3b75bc3faa", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe7bf1d4e8f4d49d6980b9135da0ad544c7d5aff740c13d5b51b773133e7cf76c", + "transactionsTrie": "0xadab475d1805aaf0c5db15e9d27731b8ffef411903ab9edd0db08729ba078866", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x92a0c69c60897951e0c92dcd193f5870409309b72c4f0ef77d0b287d59871695" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9e33f45eb18e4dbf9712bcec6add17dc50de91825473a7247cc16af427e30958", + "s": "0x544db7b3b09d20e5f1f8f537655e0c9a864e72bb4ed77f225e5a4fde9711c944", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x747b4e1ade9040e51882038c7f1813138434642829b4c3241b247b3b75bc3faa", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c6f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c6f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a030a3b3e04663c53cd80a6e79006927dc2528632f805b880265f85221c048b85fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x30a3b3e04663c53cd80a6e79006927dc2528632f805b880265f85221c048b85f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6ee2575f6c349114db03b007977c41cc492a5964ebe521901578777ba61f779e" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a06ee2575f6c349114db03b007977c41cc492a5964ebe521901578777ba61f779ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa047e2a6bd0f8d4d74fb57aa81992dfe4ac449844232c9f7d8443f4844772d9d8ea056c345f14928eb5226d0bec73078e3e2b9830e33d7cb0e64362c4406212da362a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a03da19453cc892af659638b974452c8a629647cd04cbdd41d9c4c59779d5b2712a03e2606d6fd6927fe1cebbe0d2f16b4f1f677852d9110bb8369fe602910f66c86c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6ee2575f6c349114db03b007977c41cc492a5964ebe521901578777ba61f779e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x47e2a6bd0f8d4d74fb57aa81992dfe4ac449844232c9f7d8443f4844772d9d8e", + "transactionsTrie": "0x56c345f14928eb5226d0bec73078e3e2b9830e33d7cb0e64362c4406212da362", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x55c3cee5d421962f5b76d0a334ff18b223fe9660f30221255d654ad8acd066a1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x3da19453cc892af659638b974452c8a629647cd04cbdd41d9c4c59779d5b2712", + "s": "0x3e2606d6fd6927fe1cebbe0d2f16b4f1f677852d9110bb8369fe602910f66c86", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6ee2575f6c349114db03b007977c41cc492a5964ebe521901578777ba61f779e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf7f", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf7f", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a03bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0993a8aa3398293124adff6bf9f7616429368fa7b0437a76b1b01e81ef673e90da0cb89fd5e5a53eb0be62c8ce9345ab88f3b4d728f331276b9c6f76f032a6ddc54a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a060bdbc102688803f54a5228f5dd6fdb93877ccb02af626152683ded93d2fbdcda076d0a55a6fc84350507d282984e6c3c869964ff920d476afd5a0b2225fa1858ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x993a8aa3398293124adff6bf9f7616429368fa7b0437a76b1b01e81ef673e90d", + "transactionsTrie": "0xcb89fd5e5a53eb0be62c8ce9345ab88f3b4d728f331276b9c6f76f032a6ddc54", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x269084aa94e34b9ac052ea0934565a1f84960e37e861300ceeea017a3e187e97" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x60bdbc102688803f54a5228f5dd6fdb93877ccb02af626152683ded93d2fbdcd", + "s": "0x76d0a55a6fc84350507d282984e6c3c869964ff920d476afd5a0b2225fa1858a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00b4c93033fcd96dda7be91343ba1974bd2ed43cf6720d06d9e213278384317d2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0b4c93033fcd96dda7be91343ba1974bd2ed43cf6720d06d9e213278384317d2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a037d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a665cad3b0e0eab02f9d0295b58ad4a8e17e5b5d8104d20ea1dde69ea930cdcda005d27c1080207f026d24a87af391f5cb7f4c615a0d20b5f678bc51f4165544eaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0ebd201a64c07471b2a882c122c78db731668e587d8a33b3e8cdfe2e7917b13afa049eb54c293c91fec4430213c48e9eda347abee605f1e19423175783e958d2387c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa665cad3b0e0eab02f9d0295b58ad4a8e17e5b5d8104d20ea1dde69ea930cdcd", + "transactionsTrie": "0x05d27c1080207f026d24a87af391f5cb7f4c615a0d20b5f678bc51f4165544ea", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1cabd42e24ca7f37cd243c453b250782bfb8873c0d7b846ad3efc2fb3aac4f74" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xebd201a64c07471b2a882c122c78db731668e587d8a33b3e8cdfe2e7917b13af", + "s": "0x49eb54c293c91fec4430213c48e9eda347abee605f1e19423175783e958d2387", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd4aaa52a2f5ec3cc164b4a61c9dd4663f01633dec9f126901e72c90fb800cbda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd4aaa52a2f5ec3cc164b4a61c9dd4663f01633dec9f126901e72c90fb800cbd", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a06c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c60d103b832b357c3558bbc5e256b7982e6ef2c585f9d5fb238f5ceaea78caa8a0e53f7d01ac00db86371f0be5489cfd1f48445fd39dad9fc03610c227ff1ad18ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e8252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a07b108e251dd57672f54555136e1af548eb1fc8469136b718235281339280989ca03bb779ed2af560396d4516ad3412d1ba50650e2d30a0320fe8c87c59b8a86711c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc60d103b832b357c3558bbc5e256b7982e6ef2c585f9d5fb238f5ceaea78caa8", + "transactionsTrie": "0xe53f7d01ac00db86371f0be5489cfd1f48445fd39dad9fc03610c227ff1ad18b", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x49a750c98dbc853fa27864e08a3e92130ffa61e21d6ad51ffaf64bc7bc9ddc13" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7b108e251dd57672f54555136e1af548eb1fc8469136b718235281339280989c", + "s": "0x3bb779ed2af560396d4516ad3412d1ba50650e2d30a0320fe8c87c59b8a86711", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c70", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a6d8b9c6c5cca9d910f2fa1e5cb30854534965516038614609d69a0f658cb66ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa6d8b9c6c5cca9d910f2fa1e5cb30854534965516038614609d69a0f658cb66e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a005cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa092812b5ed075e727bf51fe4e08970c7d85df71a933b9291427e87d2dfeb5e9a7a028a3857045334902d2f807fb5556afffa37517256a77863855676bb30ffff2dea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a03e2f8f78cfbeadfb51038da716bfb2f4ff3f9bd90afd4d00bff3bcb3ebbe93afa068e3eac03dbe1261acd4a7f5d4c16b1de2464853ffdd178a7154f58be7de276ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x92812b5ed075e727bf51fe4e08970c7d85df71a933b9291427e87d2dfeb5e9a7", + "transactionsTrie": "0x28a3857045334902d2f807fb5556afffa37517256a77863855676bb30ffff2de", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x795fbab4ac06c90f00a1d081ed769590b2d794593bd3a6e2000f90612ebfb8ec" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x3e2f8f78cfbeadfb51038da716bfb2f4ff3f9bd90afd4d00bff3bcb3ebbe93af", + "s": "0x68e3eac03dbe1261acd4a7f5d4c16b1de2464853ffdd178a7154f58be7de276a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf80", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a03bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0993a8aa3398293124adff6bf9f7616429368fa7b0437a76b1b01e81ef673e90da029eac016f279d5c99b5cbfd61d0b808a4896d68e4fdc2b9dfbfd2cc9e133bba3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018007078252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a05dfedc76bea10f9a40d1e5329782925bfe0221dd5b1a87dd226abc233529bb1ba07e6c42a1221a9f5fccb5afe98848ae64293e0b1d83da72bb57038a383feb5ffbc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x993a8aa3398293124adff6bf9f7616429368fa7b0437a76b1b01e81ef673e90d", + "transactionsTrie": "0x29eac016f279d5c99b5cbfd61d0b808a4896d68e4fdc2b9dfbfd2cc9e133bba3", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0293ec91f3a958cad6bb3a17f16947ac15d19ff6406f3ba82032cedb609a5b3b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5dfedc76bea10f9a40d1e5329782925bfe0221dd5b1a87dd226abc233529bb1b", + "s": "0x7e6c42a1221a9f5fccb5afe98848ae64293e0b1d83da72bb57038a383feb5ffb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00b4c93033fcd96dda7be91343ba1974bd2ed43cf6720d06d9e213278384317d2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0b4c93033fcd96dda7be91343ba1974bd2ed43cf6720d06d9e213278384317d2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a037d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a665cad3b0e0eab02f9d0295b58ad4a8e17e5b5d8104d20ea1dde69ea930cdcda0116e9ddce5bea62f50e702c6f8511c4cb8643dd59feae89fd61e219eb2bb085ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a096d0237736b62b449edc34f131cbb379c54def08b4e5670b8c908dc40efbf5bfa059f68c34237a997edc7259a589fc5c3624021b99a23b420881ff425aad22db98c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa665cad3b0e0eab02f9d0295b58ad4a8e17e5b5d8104d20ea1dde69ea930cdcd", + "transactionsTrie": "0x116e9ddce5bea62f50e702c6f8511c4cb8643dd59feae89fd61e219eb2bb085b", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x91287bd96242e8e2f35d226ede0d2cb0c97ce91fcae94456130f29952a6ff662" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x96d0237736b62b449edc34f131cbb379c54def08b4e5670b8c908dc40efbf5bf", + "s": "0x59f68c34237a997edc7259a589fc5c3624021b99a23b420881ff425aad22db98", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd4aaa52a2f5ec3cc164b4a61c9dd4663f01633dec9f126901e72c90fb800cbda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd4aaa52a2f5ec3cc164b4a61c9dd4663f01633dec9f126901e72c90fb800cbd", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a06c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c60d103b832b357c3558bbc5e256b7982e6ef2c585f9d5fb238f5ceaea78caa8a0a706d0e8b19aa3935fa50249481fdfefe65ff5e3bad7f75165a2eb78f3f88c80a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e8252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00fa79b627d118136401b6987edfb55657f00b79a78e8eca44a6ca07382011779a01d59e63500c2bf2303e9247b7981bbb55af2d5f4446ca492e3fdae09de00a520c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc60d103b832b357c3558bbc5e256b7982e6ef2c585f9d5fb238f5ceaea78caa8", + "transactionsTrie": "0xa706d0e8b19aa3935fa50249481fdfefe65ff5e3bad7f75165a2eb78f3f88c80", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcbdff7c5507fa0994f3f0eeedf8ed89083a85654d2d5a3bb731e78fe6fbaa82d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0fa79b627d118136401b6987edfb55657f00b79a78e8eca44a6ca07382011779", + "s": "0x1d59e63500c2bf2303e9247b7981bbb55af2d5f4446ca492e3fdae09de00a520", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c70", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a6d8b9c6c5cca9d910f2fa1e5cb30854534965516038614609d69a0f658cb66ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa6d8b9c6c5cca9d910f2fa1e5cb30854534965516038614609d69a0f658cb66e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a005cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa092812b5ed075e727bf51fe4e08970c7d85df71a933b9291427e87d2dfeb5e9a7a001c2248649f84f7fc4953af2b87d162107ef65e292726935153832272b14e200a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a09e30c1bbc14cd27b166731e1c6a924a38a0d5b9d9024bc258fea46a265df1574a035c6142059a5a39b5535e843d9ddbe28293547c2a71b0a95a79e319d92d97881c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x92812b5ed075e727bf51fe4e08970c7d85df71a933b9291427e87d2dfeb5e9a7", + "transactionsTrie": "0x01c2248649f84f7fc4953af2b87d162107ef65e292726935153832272b14e200", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9c8321e7c0d5d2f5040fc2e59fba8df28aa7915a5e8351948df9cc1f7f5d825d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9e30c1bbc14cd27b166731e1c6a924a38a0d5b9d9024bc258fea46a265df1574", + "s": "0x35c6142059a5a39b5535e843d9ddbe28293547c2a71b0a95a79e319d92d97881", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf80", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d141350a6dab7c3a4902fd36f07ceb4a21bae732b21687752d4ebaffe5bf5e68a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd141350a6dab7c3a4902fd36f07ceb4a21bae732b21687752d4ebaffe5bf5e68", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbaaf683079598f7fba51288ec11399362ceaf81c22af91a1e934b77f6458f38e" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a0baaf683079598f7fba51288ec11399362ceaf81c22af91a1e934b77f6458f38ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f4375ddff95e119b01cd254632b66df800e85331da28d8a145ad2f00b6fedb35a0020b2a035d63e11ab458b0e68871203ad227d66b5c152354b3edc5004dccc590a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800782520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a06959339e21ad17968ec7a05241efc6168a05fc67cc94f7f97851079cc77c7d46a0485f1387ffcb64ddc9bd1116bb006eece5e21b115cc1120df579dc69ba925796c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xbaaf683079598f7fba51288ec11399362ceaf81c22af91a1e934b77f6458f38e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf4375ddff95e119b01cd254632b66df800e85331da28d8a145ad2f00b6fedb35", + "transactionsTrie": "0x020b2a035d63e11ab458b0e68871203ad227d66b5c152354b3edc5004dccc590", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xadc0285de5815f25b18c9bb3a332c83972d7f5dffcc206e643752c3a8cca947e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6959339e21ad17968ec7a05241efc6168a05fc67cc94f7f97851079cc77c7d46", + "s": "0x485f1387ffcb64ddc9bd1116bb006eece5e21b115cc1120df579dc69ba925796", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xbaaf683079598f7fba51288ec11399362ceaf81c22af91a1e934b77f6458f38e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e53", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e53", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08e5da83a25245db6725184a62ef539b4ee96fa34c1f7046ea771122582359f85a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8e5da83a25245db6725184a62ef539b4ee96fa34c1f7046ea771122582359f85", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb0f6d73646823127385d6b17dbba6a4b8c3fc96f2dc1af54e5d08bbecb3f66ad" + }, + "blocks": [ + { + "rlp": "0xf90331f90242a0b0f6d73646823127385d6b17dbba6a4b8c3fc96f2dc1af54e5d08bbecb3f66ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d9f405105c455bc00ece8797329daf598f21137392abdf5ddda702437044f62ba0877a716dc30b933ee1fad83fed7555e317c3402335ad7b138a5b498fb6704ab7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a01cad126c86f4fd56191f6c693df6efd409db8abff0965bc398791ebb42dc0d8ea012910cd6dbf1e4907f51162e2ab4ab9dd69bd9684493dc56b234357ccf9820acc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0xb0f6d73646823127385d6b17dbba6a4b8c3fc96f2dc1af54e5d08bbecb3f66ad", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd9f405105c455bc00ece8797329daf598f21137392abdf5ddda702437044f62b", + "transactionsTrie": "0x877a716dc30b933ee1fad83fed7555e317c3402335ad7b138a5b498fb6704ab7", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1d9d87aa15d29f0f67bc5bd78954a5560545fbe0094db4674f237756bd5ad48f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x1cad126c86f4fd56191f6c693df6efd409db8abff0965bc398791ebb42dc0d8e", + "s": "0x12910cd6dbf1e4907f51162e2ab4ab9dd69bd9684493dc56b234357ccf9820ac", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0xb0f6d73646823127385d6b17dbba6a4b8c3fc96f2dc1af54e5d08bbecb3f66ad", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7db", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7db", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0540cd5193b88a7d12f9c8c3bc58154d30bdd5bc63e1e72bf04149e1bbe9085aba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x540cd5193b88a7d12f9c8c3bc58154d30bdd5bc63e1e72bf04149e1bbe9085ab", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4c05a4f216fac8d8103a12f8b356a14d44b647166b6a5de294f4c928bafff51f" + }, + "blocks": [ + { + "rlp": "0xf902d5f90242a04c05a4f216fac8d8103a12f8b356a14d44b647166b6a5de294f4c928bafff51fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa017a105e471df923934f346da1744acf971837f5d992b4fa884d6ab6fac28e6ada0a72810225688c3ee4c82ef74e71828638133b49de73e79e8b0475598a28abd74a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e82520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a033e0af5033fd1f323b09b5eb8b28755809b27da46f4a428ff2b3c185c08dd4d0a005feab24c19b8528cbfc8f74349d91641bb49eb21e11f9889f3dc9610563ff0fc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x4c05a4f216fac8d8103a12f8b356a14d44b647166b6a5de294f4c928bafff51f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x17a105e471df923934f346da1744acf971837f5d992b4fa884d6ab6fac28e6ad", + "transactionsTrie": "0xa72810225688c3ee4c82ef74e71828638133b49de73e79e8b0475598a28abd74", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x57d1f9458f41c1a3892e50178decd7d4c422ab0566d5f007779675516650e17d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", "data": "0x00", "accessList": [], - "maxFeePerBlobGas": "0x01", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x14ca5ead067aa9c1930c4ef5bfee0f85796dc060ee0616b7de4cad9bed340cfe", - "s": "0x4133ace6ec58338107311ae2604144f7268e75296d112c7d40a42911a53084d7", + "v": "0x01", + "r": "0x33e0af5033fd1f323b09b5eb8b28755809b27da46f4a428ff2b3c185c08dd4d0", + "s": "0x05feab24c19b8528cbfc8f74349d91641bb49eb21e11f9889f3dc9610563ff0f", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -787,7 +14109,7 @@ } } ], - "lastblockhash": "0x0c5f9f759047d583e64e9196639334b39fba4bedb572b96dca921cd24e6e6945", + "lastblockhash": "0x4c05a4f216fac8d8103a12f8b356a14d44b647166b6a5de294f4c928bafff51f", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -797,7 +14119,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e3c", + "balance": "0x4e247ca7", "code": "0x", "storage": {} } @@ -811,26 +14133,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e3c", + "balance": "0x4e247ca7", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "007-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-single_zero_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc1fcd29446cf03f615f7e28d9912b813bc6171d461d7a8bc955f7799a44f71ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07d6de37fc1af0a93e94b55dbd06b7ded3c95a3c1b507c9bed0d8e0033f4e1e50a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdc1fcd29446cf03f615f7e28d9912b813bc6171d461d7a8bc955f7799a44f71c", + "stateRoot": "0x7d6de37fc1af0a93e94b55dbd06b7ded3c95a3c1b507c9bed0d8e0033f4e1e50", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -847,27 +14170,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5f0d5771213c80ef62e99578de7055f25b0663da0426a0080013d02456318ded" + "hash": "0xaf36059c609cbdc22f4fdc64cf8c9804a7d19bf8ec919d3e398aed031d84e87a" }, "blocks": [ { - "rlp": "0xf902d1f90240a05f0d5771213c80ef62e99578de7055f25b0663da0426a0080013d02456318deda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa065f50dd72fefb128ce43de9a0ba580003e8a188f755103b31bdd1b033eddb5f6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05e2941d27b09a30735306f96fcb5169fc63f18606e680e3f21fc4fa85a33fda2a07c26869911646e5f5d9843d9949aa18f3ee8cb336aaa5b58785f23882a764286c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0af36059c609cbdc22f4fdc64cf8c9804a7d19bf8ec919d3e398aed031d84e87aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06af2357e72bb48d4cbb38790fd5869e8a8346edac315fee08f130967301c31c8a0911c1b324b7e6d7da39dfd127440f65941c04bbcfb3f7f3dc17ab305bb3f1380a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0cba2c173a8b72646e9f1dc0e2e7be050857d90a3bc52f43ec23365b3873cad20a00fa456f6f9103fd212c33a78e1e10bc0efd7f10eb24710a63d342321ddfff229c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x5f0d5771213c80ef62e99578de7055f25b0663da0426a0080013d02456318ded", + "parentHash": "0xaf36059c609cbdc22f4fdc64cf8c9804a7d19bf8ec919d3e398aed031d84e87a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x65f50dd72fefb128ce43de9a0ba580003e8a188f755103b31bdd1b033eddb5f6", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x6af2357e72bb48d4cbb38790fd5869e8a8346edac315fee08f130967301c31c8", + "transactionsTrie": "0x911c1b324b7e6d7da39dfd127440f65941c04bbcfb3f7f3dc17ab305bb3f1380", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -875,27 +14198,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1c78b20fdbd1dc8ec0a2c1b0be30f65af689fb91aa618d5a83973441e1ccb9a6" + "hash": "0x601fa6dc59376a7cb0560b1c0f52450e16044a6bb984e581b8dd849c1ab6fc20" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", + "value": "0x00", "data": "0x00", - "accessList": [], - "maxFeePerBlobGas": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x01", - "r": "0x5e2941d27b09a30735306f96fcb5169fc63f18606e680e3f21fc4fa85a33fda2", - "s": "0x7c26869911646e5f5d9843d9949aa18f3ee8cb336aaa5b58785f23882a764286", + "v": "0x00", + "r": "0xcba2c173a8b72646e9f1dc0e2e7be050857d90a3bc52f43ec23365b3873cad20", + "s": "0x0fa456f6f9103fd212c33a78e1e10bc0efd7f10eb24710a63d342321ddfff229", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -904,7 +14236,7 @@ } } ], - "lastblockhash": "0x5f0d5771213c80ef62e99578de7055f25b0663da0426a0080013d02456318ded", + "lastblockhash": "0xaf36059c609cbdc22f4fdc64cf8c9804a7d19bf8ec919d3e398aed031d84e87a", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -914,7 +14246,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce7c", + "balance": "0x4e25cfb7", "code": "0x", "storage": {} } @@ -928,26 +14260,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce7c", + "balance": "0x4e25cfb7", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "008-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-single_one_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a043649829819c05406a8becd5ae4b16fb9576d25ffe0ce7c12de924ef5f7dedd6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d141350a6dab7c3a4902fd36f07ceb4a21bae732b21687752d4ebaffe5bf5e68a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x43649829819c05406a8becd5ae4b16fb9576d25ffe0ce7c12de924ef5f7dedd6", + "stateRoot": "0xd141350a6dab7c3a4902fd36f07ceb4a21bae732b21687752d4ebaffe5bf5e68", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -964,27 +14297,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb6c57c6b583cf8ab6db7deb3e7f8b4508c2a036805c0077f086cbc6b0800c263" + "hash": "0xbaaf683079598f7fba51288ec11399362ceaf81c22af91a1e934b77f6458f38e" }, "blocks": [ { - "rlp": "0xf902d1f90240a0b6c57c6b583cf8ab6db7deb3e7f8b4508c2a036805c0077f086cbc6b0800c263a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa082e4d312fdb96c04bf45cc228cc1be1dbf8cd18623e1bd99465217aab18ef61fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0ebaee9cd1beccea1a27ffbf0d94a96d99bc24560d1e3e56fafd2b48ccb17e24ea0247f72d63e5c7963fd197af7fdb6b0c6177f887a0435848a8d856f34bf5ccd36c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0baaf683079598f7fba51288ec11399362ceaf81c22af91a1e934b77f6458f38ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f4375ddff95e119b01cd254632b66df800e85331da28d8a145ad2f00b6fedb35a078e7f1a11741f76dd1f4b04eb0bbd7dfbc2137bae75fad3c661c810792fd1335a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070782520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a005a016518a99ae0ded668adc6782e0de89583fbe798e6de420542f331c38a845a04dfe19e5003370c5bab18218be5b150c60fa59ebff1d81b3c44da2e501961891c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xb6c57c6b583cf8ab6db7deb3e7f8b4508c2a036805c0077f086cbc6b0800c263", + "parentHash": "0xbaaf683079598f7fba51288ec11399362ceaf81c22af91a1e934b77f6458f38e", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x82e4d312fdb96c04bf45cc228cc1be1dbf8cd18623e1bd99465217aab18ef61f", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xf4375ddff95e119b01cd254632b66df800e85331da28d8a145ad2f00b6fedb35", + "transactionsTrie": "0x78e7f1a11741f76dd1f4b04eb0bbd7dfbc2137bae75fad3c661c810792fd1335", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -992,27 +14325,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x99b0d75c28d1bc15bf4bb38d4de13175c0f3660c6debd80654a589a26f64e2c3" + "hash": "0xe7219e971a16d661cf9297e90050e479fb7541dbcba8fe14703d4d79f627ccc4" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x520c", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", - "data": "0x01", + "data": "0x00", "accessList": [], - "maxFeePerBlobGas": "0x01", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0xebaee9cd1beccea1a27ffbf0d94a96d99bc24560d1e3e56fafd2b48ccb17e24e", - "s": "0x247f72d63e5c7963fd197af7fdb6b0c6177f887a0435848a8d856f34bf5ccd36", + "r": "0x05a016518a99ae0ded668adc6782e0de89583fbe798e6de420542f331c38a845", + "s": "0x4dfe19e5003370c5bab18218be5b150c60fa59ebff1d81b3c44da2e501961891", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1021,7 +14355,7 @@ } } ], - "lastblockhash": "0xb6c57c6b583cf8ab6db7deb3e7f8b4508c2a036805c0077f086cbc6b0800c263", + "lastblockhash": "0xbaaf683079598f7fba51288ec11399362ceaf81c22af91a1e934b77f6458f38e", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1031,7 +14365,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e47", + "balance": "0x4e223e53", "code": "0x", "storage": {} } @@ -1045,26 +14379,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e47", + "balance": "0x4e223e53", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "009-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-single_one_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00751c64bb7d0bda7867b28294bcc349170805f5ec286374dd5b59526a14a5453a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08e5da83a25245db6725184a62ef539b4ee96fa34c1f7046ea771122582359f85a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0751c64bb7d0bda7867b28294bcc349170805f5ec286374dd5b59526a14a5453", + "stateRoot": "0x8e5da83a25245db6725184a62ef539b4ee96fa34c1f7046ea771122582359f85", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1081,27 +14416,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3417c50a628c917a943b933f63199aad7a07681da13fb1748dbeb156b580ade4" + "hash": "0xb0f6d73646823127385d6b17dbba6a4b8c3fc96f2dc1af54e5d08bbecb3f66ad" }, "blocks": [ { - "rlp": "0xf902d1f90240a03417c50a628c917a943b933f63199aad7a07681da13fb1748dbeb156b580ade4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04b551441257eb452452568b14f1ff236e2dccbbe956161e6c19d3f36c732d5d4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a08dc2f0121b6a7155b370689c285e5ffbc442bb38fb40dd4bb5a4a81329c463e4a056036526a16a740b3a9e81df5f7eb138d6cc9d5e8d02e6f0d5509f484a4488c2c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0b0f6d73646823127385d6b17dbba6a4b8c3fc96f2dc1af54e5d08bbecb3f66ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d9f405105c455bc00ece8797329daf598f21137392abdf5ddda702437044f62ba0a561ace252d7dc8d549346f7988c7339c6f9987adbb46a8bda5d48bf4ccea58aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0efe02c0e5f252541e7fd202ccd98234fe54b9429cc886a205b2dbb18da25364ca024b022a06fccad812aeae7c3d0adfd7ae0049a999edbee046f2aaf805ff3d829c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x3417c50a628c917a943b933f63199aad7a07681da13fb1748dbeb156b580ade4", + "parentHash": "0xb0f6d73646823127385d6b17dbba6a4b8c3fc96f2dc1af54e5d08bbecb3f66ad", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4b551441257eb452452568b14f1ff236e2dccbbe956161e6c19d3f36c732d5d4", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd9f405105c455bc00ece8797329daf598f21137392abdf5ddda702437044f62b", + "transactionsTrie": "0xa561ace252d7dc8d549346f7988c7339c6f9987adbb46a8bda5d48bf4ccea58a", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1109,27 +14444,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb5fdb93379722e1e35af5e05844f6d69e3e01b54980ae4304aebd26896f59f1b" + "hash": "0x1aa06f1a4cff2b714bc7b60a50e9c5f074db0b9e9a245d384b23d916e14b82ea" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a44", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", - "data": "0x01", - "accessList": [], - "maxFeePerBlobGas": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0x8dc2f0121b6a7155b370689c285e5ffbc442bb38fb40dd4bb5a4a81329c463e4", - "s": "0x56036526a16a740b3a9e81df5f7eb138d6cc9d5e8d02e6f0d5509f484a4488c2", + "r": "0xefe02c0e5f252541e7fd202ccd98234fe54b9429cc886a205b2dbb18da25364c", + "s": "0x24b022a06fccad812aeae7c3d0adfd7ae0049a999edbee046f2aaf805ff3d829", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1138,7 +14482,7 @@ } } ], - "lastblockhash": "0x3417c50a628c917a943b933f63199aad7a07681da13fb1748dbeb156b580ade4", + "lastblockhash": "0xb0f6d73646823127385d6b17dbba6a4b8c3fc96f2dc1af54e5d08bbecb3f66ad", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1148,7 +14492,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce87", + "balance": "0x4e22e7db", "code": "0x", "storage": {} } @@ -1162,26 +14506,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce87", + "balance": "0x4e22e7db", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "010-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-single_one_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0be027b066f2ca79ca87bd0176c760c8b013dd657fcb8be6b9ea5f8c511ae09a6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0540cd5193b88a7d12f9c8c3bc58154d30bdd5bc63e1e72bf04149e1bbe9085aba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbe027b066f2ca79ca87bd0176c760c8b013dd657fcb8be6b9ea5f8c511ae09a6", + "stateRoot": "0x540cd5193b88a7d12f9c8c3bc58154d30bdd5bc63e1e72bf04149e1bbe9085ab", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1198,27 +14543,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xc2f1988194986e72330d065a112f2a91efd5805231895b1fdb5ece92acb247f6" + "hash": "0x4c05a4f216fac8d8103a12f8b356a14d44b647166b6a5de294f4c928bafff51f" }, "blocks": [ { - "rlp": "0xf902d1f90240a0c2f1988194986e72330d065a112f2a91efd5805231895b1fdb5ece92acb247f6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f9af1458b6dd07b4932dd4e6dd3592149f6b18ab9744f6d1bbab006f26b30f2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a021f18230a2e30eb5e59ddd5cd98fad033b9123872f2695b1562384f3339f5f41a07fdaf17f2443155ed312af5f01ac9b87d3f32732d192bbce1e41bb94f41db7cac0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a04c05a4f216fac8d8103a12f8b356a14d44b647166b6a5de294f4c928bafff51fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa017a105e471df923934f346da1744acf971837f5d992b4fa884d6ab6fac28e6ada038e013f693e047a7613216fe210146fc9149e3e0837171f528ac961a755159eca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e82520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0f7683aa66a91e5f086a15932367761f467f97e0957384099385db208f67357f6a07b0b81e949ee8d2824de4ced913518e38042d91dd1c34288ee8bffa0a9223a5bc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xc2f1988194986e72330d065a112f2a91efd5805231895b1fdb5ece92acb247f6", + "parentHash": "0x4c05a4f216fac8d8103a12f8b356a14d44b647166b6a5de294f4c928bafff51f", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7f9af1458b6dd07b4932dd4e6dd3592149f6b18ab9744f6d1bbab006f26b30f2", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x17a105e471df923934f346da1744acf971837f5d992b4fa884d6ab6fac28e6ad", + "transactionsTrie": "0x38e013f693e047a7613216fe210146fc9149e3e0837171f528ac961a755159ec", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1226,27 +14571,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x74b8e5e8038fdaa43f44636e54d87236fd5deed09a898a07800d0c9680c44d37" + "hash": "0xd5322bebb18cf3916051d84f0f856f0acad2a2fa9a252978e149452aba644084" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", - "data": "0x01", + "value": "0x00", + "data": "0x00", "accessList": [], - "maxFeePerBlobGas": "0x01", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x01", - "r": "0x21f18230a2e30eb5e59ddd5cd98fad033b9123872f2695b1562384f3339f5f41", - "s": "0x7fdaf17f2443155ed312af5f01ac9b87d3f32732d192bbce1e41bb94f41db7ca", + "r": "0xf7683aa66a91e5f086a15932367761f467f97e0957384099385db208f67357f6", + "s": "0x7b0b81e949ee8d2824de4ced913518e38042d91dd1c34288ee8bffa0a9223a5b", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1255,7 +14601,7 @@ } } ], - "lastblockhash": "0xc2f1988194986e72330d065a112f2a91efd5805231895b1fdb5ece92acb247f6", + "lastblockhash": "0x4c05a4f216fac8d8103a12f8b356a14d44b647166b6a5de294f4c928bafff51f", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1265,7 +14611,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e48", + "balance": "0x4e247ca7", "code": "0x", "storage": {} } @@ -1279,26 +14625,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e48", + "balance": "0x4e247ca7", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "011-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=1-single_one_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02e8a3381e76fe1b1acd806d02937303464723c50bff0c31e4514dc9d2dcbbb3fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07d6de37fc1af0a93e94b55dbd06b7ded3c95a3c1b507c9bed0d8e0033f4e1e50a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2e8a3381e76fe1b1acd806d02937303464723c50bff0c31e4514dc9d2dcbbb3f", + "stateRoot": "0x7d6de37fc1af0a93e94b55dbd06b7ded3c95a3c1b507c9bed0d8e0033f4e1e50", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1315,27 +14662,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x001aaee0d20e4a7aa5b46cd189533c58d385a2ceb9d2fefcf79263d54eb0cdad" + "hash": "0xaf36059c609cbdc22f4fdc64cf8c9804a7d19bf8ec919d3e398aed031d84e87a" }, "blocks": [ { - "rlp": "0xf902d1f90240a0001aaee0d20e4a7aa5b46cd189533c58d385a2ceb9d2fefcf79263d54eb0cdada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bc1d72e9f780af7a7e400986c0d9af590e7687e57052dca87b6ced06cbff70d3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000080a03b9f4419ef58de1362593eeaa75e496e69aa0217fa0ce996b792b49bcdfac406a03370a0e492f8283d4abc77b009b39206dae8bbf311156c8619a40092024925bfc0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0af36059c609cbdc22f4fdc64cf8c9804a7d19bf8ec919d3e398aed031d84e87aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06af2357e72bb48d4cbb38790fd5869e8a8346edac315fee08f130967301c31c8a0387be863c66f9a0fcb78a75bb6121cb590b0909c4887fd70542ecee2bcd2fa17a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0aebd4c38d14e6a61dc112ab083ff2e5fd3cb8b35205b0c79cf4b3fae7ce66fe3a03ed02886c81899d057794ec2e797b207e1288bf3b1b80615500aca7945084776c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x001aaee0d20e4a7aa5b46cd189533c58d385a2ceb9d2fefcf79263d54eb0cdad", + "parentHash": "0xaf36059c609cbdc22f4fdc64cf8c9804a7d19bf8ec919d3e398aed031d84e87a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbc1d72e9f780af7a7e400986c0d9af590e7687e57052dca87b6ced06cbff70d3", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x6af2357e72bb48d4cbb38790fd5869e8a8346edac315fee08f130967301c31c8", + "transactionsTrie": "0x387be863c66f9a0fcb78a75bb6121cb590b0909c4887fd70542ecee2bcd2fa17", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1343,27 +14690,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x53f9a89cddbe73f2f564875ccc9d4c4f0f111d253834d66283e44925b68d3149" + "hash": "0x8f8644b686baa602f41eda3371630579ac703d668ae6bf589dd06f04018a3384" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", - "data": "0x01", - "accessList": [], - "maxFeePerBlobGas": "0x01", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0x3b9f4419ef58de1362593eeaa75e496e69aa0217fa0ce996b792b49bcdfac406", - "s": "0x3370a0e492f8283d4abc77b009b39206dae8bbf311156c8619a40092024925bf", + "r": "0xaebd4c38d14e6a61dc112ab083ff2e5fd3cb8b35205b0c79cf4b3fae7ce66fe3", + "s": "0x3ed02886c81899d057794ec2e797b207e1288bf3b1b80615500aca7945084776", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1372,7 +14728,7 @@ } } ], - "lastblockhash": "0x001aaee0d20e4a7aa5b46cd189533c58d385a2ceb9d2fefcf79263d54eb0cdad", + "lastblockhash": "0xaf36059c609cbdc22f4fdc64cf8c9804a7d19bf8ec919d3e398aed031d84e87a", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1382,7 +14738,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce88", + "balance": "0x4e25cfb7", "code": "0x", "storage": {} } @@ -1396,26 +14752,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x06ce88", + "balance": "0x4e25cfb7", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "012-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-no_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05bac21099af43f7d37da5e8b382595a3ae6588afc1309afe987cebb86017ce0ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ba527114a7246851d1dab852f93edcef7766b51a30fd9100fa2fe7fcad0c757aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5bac21099af43f7d37da5e8b382595a3ae6588afc1309afe987cebb86017ce0c", + "stateRoot": "0xba527114a7246851d1dab852f93edcef7766b51a30fd9100fa2fe7fcad0c757a", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1432,27 +14789,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4" + "hash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7" }, "blocks": [ { - "rlp": "0xf902d1f90240a0c24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa052ccf73efe5611b172565419ae2dc840d7dd3e4b815b98ee88152156de4d5a73a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0eb774461949962772ab55a732e712f293d26cc96498a878827d3e91e01bf2eada073a202c92b1c8fdfac1f03da02a3d19967264fb6717ca155c15938c519740dfdc0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0b20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0543c744469e6b2447c429565675c299ff13e6e41885a59a47eb3d4ed60d14a64a071281d56e7445dd2ef16623221ff9265de6d08c820165254ac1257ee614950c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800782520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0230a4b3674fa190f9593614cf09656c46086984c59dc0e2cc920a10ba1d0fbbca03e4362b59329422d1d411acd035f32e935fd8adc9eace15e753259e334733e0ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4", + "parentHash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x52ccf73efe5611b172565419ae2dc840d7dd3e4b815b98ee88152156de4d5a73", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x543c744469e6b2447c429565675c299ff13e6e41885a59a47eb3d4ed60d14a64", + "transactionsTrie": "0x71281d56e7445dd2ef16623221ff9265de6d08c820165254ac1257ee614950c9", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1460,8 +14817,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1ec48fcf4a023a2bb4b3683c273720b664a98ca3667c348966275542a3700164" + "hash": "0x46646388a9764fd5dc734b269ad518dbd4954ea3073cc4d078b06ae1ff45bce8" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1469,18 +14827,18 @@ "nonce": "0x00", "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x520c", "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x", + "value": "0x01", + "data": "0x00", "accessList": [], - "maxFeePerBlobGas": "0x64", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0xeb774461949962772ab55a732e712f293d26cc96498a878827d3e91e01bf2ead", - "s": "0x73a202c92b1c8fdfac1f03da02a3d19967264fb6717ca155c15938c519740dfd", + "v": "0x01", + "r": "0x230a4b3674fa190f9593614cf09656c46086984c59dc0e2cc920a10ba1d0fbbc", + "s": "0x3e4362b59329422d1d411acd035f32e935fd8adc9eace15e753259e334733e0e", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1489,7 +14847,7 @@ } } ], - "lastblockhash": "0xc24c3a60298d5f627cce817f49019f899281afe46ee4251c9c0ebcd65e368ae4", + "lastblockhash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1499,7 +14857,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e37", + "balance": "0x4e223e54", "code": "0x", "storage": {} } @@ -1513,26 +14871,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e37", + "balance": "0x4e223e54", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "013-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-no_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01335d181c4757164a481bc8092bb65f8a0f0bc3dda1ac763cf0c9681a19a6621a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a051e3f1679aa3231a0d8b4983d5f29307e33c57c19aafc9e8b59c94414515ac5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1335d181c4757164a481bc8092bb65f8a0f0bc3dda1ac763cf0c9681a19a6621", + "stateRoot": "0x51e3f1679aa3231a0d8b4983d5f29307e33c57c19aafc9e8b59c94414515ac5c", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1549,27 +14908,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x56ee99bc09138733820ecc4c06c5388f2b3134d632a30c719e64a0d41358bf1c" + "hash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45" }, "blocks": [ { - "rlp": "0xf902d1f90240a056ee99bc09138733820ecc4c06c5388f2b3134d632a30c719e64a0d41358bf1ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fc7a205bddc32e8f67536b9078e909ad304f82f334e61db84deef20a88e85533a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000001a08a02f8695c36e60f9e318b71e00fa80185a5770067293a6eac09a070c1ea778fa06c87de734a2748de7fbcfed883b0c923e2494d8aeae9308b1c8ff2eb3b7acc3bc0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0f6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00640d46b81dd7900aa4fc78f26ce9c6b877f469d32eb4ef021c5659aae1db82ca004c3232b492c3a9e0dacfa2437a0838488c9732092b74b85475f64bb00d54467a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a052ccd29cd94dc128a0aab8d436e933d0ede9eb483c1d9d8521c2592e8b1062eca07e5c09cf9a89dc3e373479d3aaa2acd89464f5841e37722bbea7e54846bd4701c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x56ee99bc09138733820ecc4c06c5388f2b3134d632a30c719e64a0d41358bf1c", + "parentHash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xfc7a205bddc32e8f67536b9078e909ad304f82f334e61db84deef20a88e85533", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x0640d46b81dd7900aa4fc78f26ce9c6b877f469d32eb4ef021c5659aae1db82c", + "transactionsTrie": "0x04c3232b492c3a9e0dacfa2437a0838488c9732092b74b85475f64bb00d54467", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1577,27 +14936,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9cc2846905dbf99de8eddefb7b378a2565d164f7b3afc826eaac965b05bb6bbc" + "hash": "0xe5790dc579725814fceccbfea542860ceb0094c45b679a0eac05420a612df397" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a44", "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x", - "accessList": [], - "maxFeePerBlobGas": "0x64", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x01", - "r": "0x8a02f8695c36e60f9e318b71e00fa80185a5770067293a6eac09a070c1ea778f", - "s": "0x6c87de734a2748de7fbcfed883b0c923e2494d8aeae9308b1c8ff2eb3b7acc3b", + "r": "0x52ccd29cd94dc128a0aab8d436e933d0ede9eb483c1d9d8521c2592e8b1062ec", + "s": "0x7e5c09cf9a89dc3e373479d3aaa2acd89464f5841e37722bbea7e54846bd4701", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1606,7 +14974,7 @@ } } ], - "lastblockhash": "0x56ee99bc09138733820ecc4c06c5388f2b3134d632a30c719e64a0d41358bf1c", + "lastblockhash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1616,7 +14984,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce77", + "balance": "0x4e22e7dc", "code": "0x", "storage": {} } @@ -1630,26 +14998,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce77", + "balance": "0x4e22e7dc", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "014-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-no_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a058f3df7b09b16058f11b080bc2e62c1d7aabe39a9ebe78c5354e4c37499863bfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7", + "stateRoot": "0x58f3df7b09b16058f11b080bc2e62c1d7aabe39a9ebe78c5354e4c37499863bf", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1666,27 +15035,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5" + "hash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416" }, "blocks": [ { - "rlp": "0xf902d1f90240a0349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e18feb025d507b6ec7cc0ffcda7bfe6fda537704d81a8671304c1204ecbd25a7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000001a001f30ee2f0f8963619a153eea6b016e4cc8ec20124a3da4c4a65bb6b07c67400a03e001a6d2dfe1245c55ff1f53bae8bfce2a7dd4ab76a42ccef9186cccce7e6e0c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0468e64c11de197d0bd8bfb56431f1d30b74942ff225883215524c52dc2d02698a01821a37e4952aa6090c1e0c4675987439df1bd6a6a0bb2458ef1d401817d0231a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e82520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0cefeaaedcf98e6c7efbbb7730eb53037796b915470bd75c6aae6a828095f253ba052215f2047423f25ef26d6c63a15658c5a8e74b181b245b709c0c2537a3d7c13c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5", + "parentHash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe18feb025d507b6ec7cc0ffcda7bfe6fda537704d81a8671304c1204ecbd25a7", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x468e64c11de197d0bd8bfb56431f1d30b74942ff225883215524c52dc2d02698", + "transactionsTrie": "0x1821a37e4952aa6090c1e0c4675987439df1bd6a6a0bb2458ef1d401817d0231", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1694,27 +15063,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7a549955d3fbbf706405b8dd4126e796fdaf600223fb3344ec298284dc0bd25f" + "hash": "0x4b39ca5580a077682b4e41e4fdf0c0b57abe94b945a5c2a774e7e5773b44d21c" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", - "data": "0x", + "data": "0x00", "accessList": [], - "maxFeePerBlobGas": "0x64", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x01", - "r": "0x01f30ee2f0f8963619a153eea6b016e4cc8ec20124a3da4c4a65bb6b07c67400", - "s": "0x3e001a6d2dfe1245c55ff1f53bae8bfce2a7dd4ab76a42ccef9186cccce7e6e0", + "v": "0x00", + "r": "0xcefeaaedcf98e6c7efbbb7730eb53037796b915470bd75c6aae6a828095f253b", + "s": "0x52215f2047423f25ef26d6c63a15658c5a8e74b181b245b709c0c2537a3d7c13", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1723,7 +15093,7 @@ } } ], - "lastblockhash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5", + "lastblockhash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1733,7 +15103,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e38", + "balance": "0x4e247ca8", "code": "0x", "storage": {} } @@ -1747,26 +15117,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e38", + "balance": "0x4e247ca8", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "015-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-no_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0485a70000b1dab06eb1c7c2cdd9695f8172f3ace6e9d47b21d6bc4407dd7dfafa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0613d6b4dd81aead99a12146cd39aa9bd76dd01a2e4a435c683a37b455612a026a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x485a70000b1dab06eb1c7c2cdd9695f8172f3ace6e9d47b21d6bc4407dd7dfaf", + "stateRoot": "0x613d6b4dd81aead99a12146cd39aa9bd76dd01a2e4a435c683a37b455612a026", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1783,27 +15154,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbe453ac18ae5b4ac17f498137f49ef0bac99ac7e01dfe066bd52b3bd88fe947f" + "hash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462" }, "blocks": [ { - "rlp": "0xf902d1f90240a0be453ac18ae5b4ac17f498137f49ef0bac99ac7e01dfe066bd52b3bd88fe947fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa081370790b3682e0055a5eb8618b816d54c7593ad7a8aa31f7524a3cab8a71991a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0583b0b00afa057d8fd329bda7bee40e62ff1f10d665daf6752fb091ec2b4a06ea03e2e2426049295029ab5aefefca9f9ffd9cbebb2001aab5ee2b0eef573f67b0cc0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a01dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0046eb68eec6e6023981e67c6ed57df9d5b51ffd6888e4ef98de2918fd9189086a0d100c7138683bb93c6cb464e9668821c745a2145ffcaa782f6541fa2493f3bd9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a01368c44f78322fdb92a8cb146e98175d3ac3e33e8835021b24002ca179563d2aa06777ca9ce4691236834bce569bbea41de83f45d8fd31c1028355fdaf858e85dcc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xbe453ac18ae5b4ac17f498137f49ef0bac99ac7e01dfe066bd52b3bd88fe947f", + "parentHash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x81370790b3682e0055a5eb8618b816d54c7593ad7a8aa31f7524a3cab8a71991", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x046eb68eec6e6023981e67c6ed57df9d5b51ffd6888e4ef98de2918fd9189086", + "transactionsTrie": "0xd100c7138683bb93c6cb464e9668821c745a2145ffcaa782f6541fa2493f3bd9", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1811,27 +15182,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xab2cd8bef304457ba12de032ed9ffc7965e59602b4180c6abaff4462aea822e1" + "hash": "0x051f098f33f6e372b08e66f7c318a01ae01028ccba8b71a966d93c2b0b052bd4" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", - "data": "0x", - "accessList": [], - "maxFeePerBlobGas": "0x64", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0x583b0b00afa057d8fd329bda7bee40e62ff1f10d665daf6752fb091ec2b4a06e", - "s": "0x3e2e2426049295029ab5aefefca9f9ffd9cbebb2001aab5ee2b0eef573f67b0c", + "r": "0x1368c44f78322fdb92a8cb146e98175d3ac3e33e8835021b24002ca179563d2a", + "s": "0x6777ca9ce4691236834bce569bbea41de83f45d8fd31c1028355fdaf858e85dc", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1840,7 +15220,7 @@ } } ], - "lastblockhash": "0xbe453ac18ae5b4ac17f498137f49ef0bac99ac7e01dfe066bd52b3bd88fe947f", + "lastblockhash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1850,7 +15230,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce78", + "balance": "0x4e25cfb8", "code": "0x", "storage": {} } @@ -1864,26 +15244,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce78", + "balance": "0x4e25cfb8", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "016-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-single_zero_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09b8da0156368c59e23f0075b228b5ffb8e8804769d59091f31a3f71290aa15f2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ba527114a7246851d1dab852f93edcef7766b51a30fd9100fa2fe7fcad0c757aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9b8da0156368c59e23f0075b228b5ffb8e8804769d59091f31a3f71290aa15f2", + "stateRoot": "0xba527114a7246851d1dab852f93edcef7766b51a30fd9100fa2fe7fcad0c757a", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1900,27 +15281,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xadadc1ddbe7b826eb276d2ebb537b1a72e939ca497b763680d0b9ff0f4e72484" + "hash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7" }, "blocks": [ { - "rlp": "0xf902d1f90240a0adadc1ddbe7b826eb276d2ebb537b1a72e939ca497b763680d0b9ff0f4e72484a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f00628369585ecbdc4b1bff5758c773f3c1278bfb0d6fafa5d4c9a25e9c5897ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0bb13558decc959cb279c9b350642a5d1ce804bb0c994127e48e410965535f50ea03f850921cfdfc269e6032af204ad29f0b5dbe2e2c275c33a751040b38038a4d7c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0b20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0543c744469e6b2447c429565675c299ff13e6e41885a59a47eb3d4ed60d14a64a00f3f12323a67fb29c094d0a10c82b8d30cd4c9c184c8731fe45cd9c6d92a18a8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070782520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a058da4ed58684aaeab0d9fb81bbc8d0ed7b9677f6f335f3be04992ae74e1f2aa7a0237400ceadd895f35550ee3ff96c9e96e7e495da60e215a17b108b6fabe514d9c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xadadc1ddbe7b826eb276d2ebb537b1a72e939ca497b763680d0b9ff0f4e72484", + "parentHash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf00628369585ecbdc4b1bff5758c773f3c1278bfb0d6fafa5d4c9a25e9c5897c", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x543c744469e6b2447c429565675c299ff13e6e41885a59a47eb3d4ed60d14a64", + "transactionsTrie": "0x0f3f12323a67fb29c094d0a10c82b8d30cd4c9c184c8731fe45cd9c6d92a18a8", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1928,27 +15309,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x36945fbc48a59f5bc7bb7efa44e2e240a06cdab48f549441b8dbc17c5bac9666" + "hash": "0xbbcb9095ce29790cd8f187ead66a5f774df318110b120464a26d72eff203d8b6" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x520c", "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", + "value": "0x01", "data": "0x00", "accessList": [], - "maxFeePerBlobGas": "0x64", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0xbb13558decc959cb279c9b350642a5d1ce804bb0c994127e48e410965535f50e", - "s": "0x3f850921cfdfc269e6032af204ad29f0b5dbe2e2c275c33a751040b38038a4d7", + "r": "0x58da4ed58684aaeab0d9fb81bbc8d0ed7b9677f6f335f3be04992ae74e1f2aa7", + "s": "0x237400ceadd895f35550ee3ff96c9e96e7e495da60e215a17b108b6fabe514d9", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -1957,7 +15339,7 @@ } } ], - "lastblockhash": "0xadadc1ddbe7b826eb276d2ebb537b1a72e939ca497b763680d0b9ff0f4e72484", + "lastblockhash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -1967,7 +15349,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e3b", + "balance": "0x4e223e54", "code": "0x", "storage": {} } @@ -1981,26 +15363,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e3b", + "balance": "0x4e223e54", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "017-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-single_zero_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022b15a651056399e822c9402d2a17ca11cbea0c6eb84debccfd500070c7fd12fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a051e3f1679aa3231a0d8b4983d5f29307e33c57c19aafc9e8b59c94414515ac5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x22b15a651056399e822c9402d2a17ca11cbea0c6eb84debccfd500070c7fd12f", + "stateRoot": "0x51e3f1679aa3231a0d8b4983d5f29307e33c57c19aafc9e8b59c94414515ac5c", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2017,27 +15400,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf6b48fd8c65ef97864c7a780fff64ea9d5b907d21144b043b6e091457caa04d1" + "hash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45" }, "blocks": [ { - "rlp": "0xf902d1f90240a0f6b48fd8c65ef97864c7a780fff64ea9d5b907d21144b043b6e091457caa04d1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b7c491d3d922a53f6b0f6b9d2c8bc887deeaa9f29f0b9d8b2e8d50b7bddb78cca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000080a00f3600195d8f70f7298646578bff59e8626db0129dccb817532e9d9162de8da6a0492d12f88878ba7b46787bd442d34cea28998e99e4f212c559220033f05b85b8c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0f6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00640d46b81dd7900aa4fc78f26ce9c6b877f469d32eb4ef021c5659aae1db82ca005536c8450b78b5d3356ccd13c54f7801932dfedbb907bd607b125ce37c7a918a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0b09d7c5d094b16b74eb224e54baa4ca675bdaddbdf8361d6813aa9784aefbddfa05c3c01185da4fec57149bbc75504f899f7194c0e9e0da64dce9926319f693bc9c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xf6b48fd8c65ef97864c7a780fff64ea9d5b907d21144b043b6e091457caa04d1", + "parentHash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xb7c491d3d922a53f6b0f6b9d2c8bc887deeaa9f29f0b9d8b2e8d50b7bddb78cc", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x0640d46b81dd7900aa4fc78f26ce9c6b877f469d32eb4ef021c5659aae1db82c", + "transactionsTrie": "0x05536c8450b78b5d3356ccd13c54f7801932dfedbb907bd607b125ce37c7a918", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2045,27 +15428,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5bad821e695bdcd97253b5a2486d532e6ca1767a140ed198c62fe387dcbd282d" + "hash": "0xcf8a14af9e78be9adec719c5c950d95af8de658365dfff4a14514a67d1397238" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a44", "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", + "value": "0x01", "data": "0x00", - "accessList": [], - "maxFeePerBlobGas": "0x64", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x0f3600195d8f70f7298646578bff59e8626db0129dccb817532e9d9162de8da6", - "s": "0x492d12f88878ba7b46787bd442d34cea28998e99e4f212c559220033f05b85b8", + "v": "0x01", + "r": "0xb09d7c5d094b16b74eb224e54baa4ca675bdaddbdf8361d6813aa9784aefbddf", + "s": "0x5c3c01185da4fec57149bbc75504f899f7194c0e9e0da64dce9926319f693bc9", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -2074,7 +15466,7 @@ } } ], - "lastblockhash": "0xf6b48fd8c65ef97864c7a780fff64ea9d5b907d21144b043b6e091457caa04d1", + "lastblockhash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -2084,7 +15476,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce7b", + "balance": "0x4e22e7dc", "code": "0x", "storage": {} } @@ -2098,26 +15490,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce7b", + "balance": "0x4e22e7dc", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "018-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-single_zero_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00a6165a59cda66f14927d96db8c3e727393fdb9e8ed23fd6ad36ac275ed6488ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a058f3df7b09b16058f11b080bc2e62c1d7aabe39a9ebe78c5354e4c37499863bfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0a6165a59cda66f14927d96db8c3e727393fdb9e8ed23fd6ad36ac275ed6488c", + "stateRoot": "0x58f3df7b09b16058f11b080bc2e62c1d7aabe39a9ebe78c5354e4c37499863bf", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2134,27 +15527,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe9d27d808e0cb736712793a57e9c9d18bd121aafb6614aa19308ac5ddc568590" + "hash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416" }, "blocks": [ { - "rlp": "0xf902d1f90240a0e9d27d808e0cb736712793a57e9c9d18bd121aafb6614aa19308ac5ddc568590a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a3985bd9500781c733d796064462b78f3aa3f19177aa377018e4fba415efade9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000080a02e9117b3aecd14f8e01af7157a156c93b401214ffdcf2ca75f37bab88ca690cba079ae9be19208ba16ab9a5189d9b56fa1cd62ee3663dd090da2f34d1ecbaefafac0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0468e64c11de197d0bd8bfb56431f1d30b74942ff225883215524c52dc2d02698a0c1d17593acdad8b301e37ed143817774b08940702bf8add5f722aaf2cad033b9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e82520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a09118f52f3cd19b91d35e7fe9ece4389bbb59b855406a43c68bd5a4e28c70ccbaa079dc6e43500a56e8a36581f356bf0756962f7575d0f0e5c510860910f2ebc9aec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xe9d27d808e0cb736712793a57e9c9d18bd121aafb6614aa19308ac5ddc568590", + "parentHash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa3985bd9500781c733d796064462b78f3aa3f19177aa377018e4fba415efade9", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x468e64c11de197d0bd8bfb56431f1d30b74942ff225883215524c52dc2d02698", + "transactionsTrie": "0xc1d17593acdad8b301e37ed143817774b08940702bf8add5f722aaf2cad033b9", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2162,27 +15555,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x268a4b2527b969e414b1c67dba41532671eb666b9e44c91918f8c8d6b293f753" + "hash": "0x9a3bb62e12f5081c81a9ca67f4616b024d24e568923bf710f35b46b037ac32cf" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", "data": "0x00", "accessList": [], - "maxFeePerBlobGas": "0x64", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x2e9117b3aecd14f8e01af7157a156c93b401214ffdcf2ca75f37bab88ca690cb", - "s": "0x79ae9be19208ba16ab9a5189d9b56fa1cd62ee3663dd090da2f34d1ecbaefafa", + "v": "0x01", + "r": "0x9118f52f3cd19b91d35e7fe9ece4389bbb59b855406a43c68bd5a4e28c70ccba", + "s": "0x79dc6e43500a56e8a36581f356bf0756962f7575d0f0e5c510860910f2ebc9ae", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -2191,7 +15585,7 @@ } } ], - "lastblockhash": "0xe9d27d808e0cb736712793a57e9c9d18bd121aafb6614aa19308ac5ddc568590", + "lastblockhash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -2201,7 +15595,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e3c", + "balance": "0x4e247ca8", "code": "0x", "storage": {} } @@ -2215,26 +15609,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e3c", + "balance": "0x4e247ca8", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "019-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-single_zero_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a40ebfd7505841280a5445ce7d45679a8b87cf47b20a8ef2571ea56aa6ef07dea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0613d6b4dd81aead99a12146cd39aa9bd76dd01a2e4a435c683a37b455612a026a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa40ebfd7505841280a5445ce7d45679a8b87cf47b20a8ef2571ea56aa6ef07de", + "stateRoot": "0x613d6b4dd81aead99a12146cd39aa9bd76dd01a2e4a435c683a37b455612a026", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2251,27 +15646,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa53658f8fc0db571e7ed4df713294d21c12958c43810ced038fc18c48536022c" + "hash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462" }, "blocks": [ { - "rlp": "0xf902d1f90240a0a53658f8fc0db571e7ed4df713294d21c12958c43810ced038fc18c48536022ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06e5571bb0ffacccd76462434ac17ac8b3954418880e7819852b029d628b06139a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0a1045f503e2d06c05c3c5c8b3740560075beaf2d7395688f993ea83e989e7d22a070371c7f3840f63aac646790236b90a046f7e31752f627498867065ae840e00ac0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a01dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0046eb68eec6e6023981e67c6ed57df9d5b51ffd6888e4ef98de2918fd9189086a08d80fa757255c11689487443a901eebbec345ae423a5e2eab3c91cedb899cc1ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0d4e1fec09034c071a1059fa21bcf99a53844cb8b66daa49172941f5ea5efd5f4a069d1e99099b1eb1755bcc0964a7ba4bfa97e314db107ed57f77eb6cdd079bf23c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xa53658f8fc0db571e7ed4df713294d21c12958c43810ced038fc18c48536022c", + "parentHash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6e5571bb0ffacccd76462434ac17ac8b3954418880e7819852b029d628b06139", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x046eb68eec6e6023981e67c6ed57df9d5b51ffd6888e4ef98de2918fd9189086", + "transactionsTrie": "0x8d80fa757255c11689487443a901eebbec345ae423a5e2eab3c91cedb899cc1e", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2279,27 +15674,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x62a0a02dd9f08d3cacf024cba23be051c8114ff45e59d8533acc369c7cbb3f93" + "hash": "0xa367ec6016e61541e4dbb43fed62ab3fc927d648834ed106716bc866e1f0b1cb" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", "data": "0x00", - "accessList": [], - "maxFeePerBlobGas": "0x64", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x01", - "r": "0xa1045f503e2d06c05c3c5c8b3740560075beaf2d7395688f993ea83e989e7d22", - "s": "0x70371c7f3840f63aac646790236b90a046f7e31752f627498867065ae840e00a", + "v": "0x00", + "r": "0xd4e1fec09034c071a1059fa21bcf99a53844cb8b66daa49172941f5ea5efd5f4", + "s": "0x69d1e99099b1eb1755bcc0964a7ba4bfa97e314db107ed57f77eb6cdd079bf23", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -2308,7 +15712,7 @@ } } ], - "lastblockhash": "0xa53658f8fc0db571e7ed4df713294d21c12958c43810ced038fc18c48536022c", + "lastblockhash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -2318,7 +15722,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce7c", + "balance": "0x4e25cfb8", "code": "0x", "storage": {} } @@ -2332,26 +15736,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce7c", + "balance": "0x4e25cfb8", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "020-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-single_one_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02d9cae1b3705ee88ca08328eeffab213d8b7a5d4169e7a728ed462b50e6fd47fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b0a33582e49bb70ee80a7945fd8d8966c2c67d29166ffcf50b2a010cab6933e2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2d9cae1b3705ee88ca08328eeffab213d8b7a5d4169e7a728ed462b50e6fd47f", + "stateRoot": "0xb0a33582e49bb70ee80a7945fd8d8966c2c67d29166ffcf50b2a010cab6933e2", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2368,27 +15773,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7a0d7689a7e24263ee83b12317ce9c2034065be97af42c9a65dcaf083a994f2e" + "hash": "0xf8eca42e46c707b35cc74ef1f50580f8f7567735ce64a7a51a09944410dcabcf" }, "blocks": [ { - "rlp": "0xf902d1f90240a07a0d7689a7e24263ee83b12317ce9c2034065be97af42c9a65dcaf083a994f2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06e93764772a583d55d6403ca28da866ea6007f8a37080028a3f6d44859d80923a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000080a01fe0a9b1e0731a69933e28767d877591c539a1335e379a8b91c716b53a11f0e1a06abc50ae5723f2c88d072c1e81e33b7b82636041c9fb64a8476b3f1bc59aaaf2c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0f8eca42e46c707b35cc74ef1f50580f8f7567735ce64a7a51a09944410dcabcfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa047afe0fdef9c32e8112fe4e108385f041088d2be47837ac934dbb3f0162bd052a047fa207d9e3c1dc2019b3dbe03d4c9d0a1ae2977dcc29326314bdfaf4207bd9ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0facdbf0c1b41fdf0b02054531b99bcd10232f3850c5b96556ed53725236eb0e1a05de408479d4886ceaef42e7419ddd1e3d3b4f71c690ca3de8882c813462c5767c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x7a0d7689a7e24263ee83b12317ce9c2034065be97af42c9a65dcaf083a994f2e", + "parentHash": "0xf8eca42e46c707b35cc74ef1f50580f8f7567735ce64a7a51a09944410dcabcf", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6e93764772a583d55d6403ca28da866ea6007f8a37080028a3f6d44859d80923", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x47afe0fdef9c32e8112fe4e108385f041088d2be47837ac934dbb3f0162bd052", + "transactionsTrie": "0x47fa207d9e3c1dc2019b3dbe03d4c9d0a1ae2977dcc29326314bdfaf4207bd9c", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2396,8 +15801,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3cba9a25901dbce51063886de82007dc6decfe3cb7a3548220303006d4f9bfa3" + "hash": "0xc2da416828ccdab155caf640e139a9ea13ad5f80f486132ba6ea25033b3513b1" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2405,18 +15811,18 @@ "nonce": "0x00", "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x5218", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x01", "accessList": [], - "maxFeePerBlobGas": "0x64", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x1fe0a9b1e0731a69933e28767d877591c539a1335e379a8b91c716b53a11f0e1", - "s": "0x6abc50ae5723f2c88d072c1e81e33b7b82636041c9fb64a8476b3f1bc59aaaf2", + "v": "0x01", + "r": "0xfacdbf0c1b41fdf0b02054531b99bcd10232f3850c5b96556ed53725236eb0e1", + "s": "0x5de408479d4886ceaef42e7419ddd1e3d3b4f71c690ca3de8882c813462c5767", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -2425,7 +15831,7 @@ } } ], - "lastblockhash": "0x7a0d7689a7e24263ee83b12317ce9c2034065be97af42c9a65dcaf083a994f2e", + "lastblockhash": "0xf8eca42e46c707b35cc74ef1f50580f8f7567735ce64a7a51a09944410dcabcf", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -2435,7 +15841,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e47", + "balance": "0x4e223ea7", "code": "0x", "storage": {} } @@ -2449,26 +15855,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e47", + "balance": "0x4e223ea7", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "021-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-single_one_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0f2ebf4495d3742a70cea6d3d3ea2f7a528bc471a97635abeb4c70e74ecf99a49a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06c3af615a5a506e83f2e6f530d08305432ae1b89987544fda55ffb7069014983a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf2ebf4495d3742a70cea6d3d3ea2f7a528bc471a97635abeb4c70e74ecf99a49", + "stateRoot": "0x6c3af615a5a506e83f2e6f530d08305432ae1b89987544fda55ffb7069014983", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2485,27 +15892,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x02facd1cac7740ed336dd9c016f9d12b8e9bf1e8a1a703e96f2ffb68e5d41171" + "hash": "0xc7c80a34aee9b9184dd405e0a984f7f6c07f04e43c8c17853d2c4edf9117d458" }, "blocks": [ { - "rlp": "0xf902d1f90240a002facd1cac7740ed336dd9c016f9d12b8e9bf1e8a1a703e96f2ffb68e5d41171a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa015c92349bd0c81ae2f5e019133fb1a1564fab289f2b55b623c31913b7e923c30a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0574edd8b1546ec7800cb69601a0f7406ed66585ef1ee885cce855279bed90fe3a05e7cd0cbcf4ada61de5c92e88fa7380c20e033e1ad6fb5099092e25e84f6bb7bc0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0c7c80a34aee9b9184dd405e0a984f7f6c07f04e43c8c17853d2c4edf9117d458a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fa393770f2db72c3c9253dce963ada4de4ebcec3b0ebc496e5785abe10f75e1ca036021c84a64e113b412f05f5d58bea9452664c52d467d30c2c1bc2aa07b5042ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a08855b3a8deedb8f33991803a5a90d8ba39710ba51f2c220c8215122d16bfe828a025826358a8c276c2e05f8c69eb9dcba257e5dd880403527b0b7afac2219a76b8c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x02facd1cac7740ed336dd9c016f9d12b8e9bf1e8a1a703e96f2ffb68e5d41171", + "parentHash": "0xc7c80a34aee9b9184dd405e0a984f7f6c07f04e43c8c17853d2c4edf9117d458", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x15c92349bd0c81ae2f5e019133fb1a1564fab289f2b55b623c31913b7e923c30", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xfa393770f2db72c3c9253dce963ada4de4ebcec3b0ebc496e5785abe10f75e1c", + "transactionsTrie": "0x36021c84a64e113b412f05f5d58bea9452664c52d467d30c2c1bc2aa07b5042e", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2513,27 +15920,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xdf6bbba3b8fb0b11600b00cf42af2ca9171e7edbcade8e580537852f870f9d64" + "hash": "0xaa1366839e70bd615e88aae8b7aee4d539e9ae0bb8b5c83f540448fc5cccfc4d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a50", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x01", - "accessList": [], - "maxFeePerBlobGas": "0x64", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0x574edd8b1546ec7800cb69601a0f7406ed66585ef1ee885cce855279bed90fe3", - "s": "0x5e7cd0cbcf4ada61de5c92e88fa7380c20e033e1ad6fb5099092e25e84f6bb7b", + "r": "0x8855b3a8deedb8f33991803a5a90d8ba39710ba51f2c220c8215122d16bfe828", + "s": "0x25826358a8c276c2e05f8c69eb9dcba257e5dd880403527b0b7afac2219a76b8", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -2542,7 +15958,7 @@ } } ], - "lastblockhash": "0x02facd1cac7740ed336dd9c016f9d12b8e9bf1e8a1a703e96f2ffb68e5d41171", + "lastblockhash": "0xc7c80a34aee9b9184dd405e0a984f7f6c07f04e43c8c17853d2c4edf9117d458", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -2552,7 +15968,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce87", + "balance": "0x4e22e82f", "code": "0x", "storage": {} } @@ -2566,26 +15982,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce87", + "balance": "0x4e22e82f", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "022-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-single_one_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0659f5319eab5b91aed550f5ec5bebe55f9ba6e53bc20aec1e60b8976edce73b7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a074090819173c35436306d19540cd7a9932c790c1c8122654339477ef039bf29fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x659f5319eab5b91aed550f5ec5bebe55f9ba6e53bc20aec1e60b8976edce73b7", + "stateRoot": "0x74090819173c35436306d19540cd7a9932c790c1c8122654339477ef039bf29f", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2602,27 +16019,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1d55d31b60404233a5001b5b5302cd40133a8d179c62f4fb9350c655ae7e145d" + "hash": "0xb6c8530fb3a28640318f30e4044cb4c43263aa9616f137d8b67c5b59f18fc778" }, "blocks": [ { - "rlp": "0xf902d1f90240a01d55d31b60404233a5001b5b5302cd40133a8d179c62f4fb9350c655ae7e145da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09134286dee33951d7fceedd1a22b470dfa9633734fec342ba3491c2fc876f67aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0c1ff90ffe75b876c16eb4e6cd57ab25ac52975bc385cae85325881a53766336ea0466cc2781938104210a37d9242d67b0d78f3205201374b243c669d41160f2538c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d4f90242a0b6c8530fb3a28640318f30e4044cb4c43263aa9616f137d8b67c5b59f18fc778a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d024ecd321b115f7147580cbf1e078a2f301bd66c04c6d4816fc16fabaede2f4a05199778dbaad2d106fa95f82b120f4e771c8cde1cbeb5220d0a658fb1414ea93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f8860180800e8252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0db750b8a7504617d165cb5757e16d43787ae7b394edfbf718dde237ea84abc2c9fdba2c31ad78e8654308d7de46bce100a353c3a62fece44621b7cd9114c4b0bc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x1d55d31b60404233a5001b5b5302cd40133a8d179c62f4fb9350c655ae7e145d", + "parentHash": "0xb6c8530fb3a28640318f30e4044cb4c43263aa9616f137d8b67c5b59f18fc778", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9134286dee33951d7fceedd1a22b470dfa9633734fec342ba3491c2fc876f67a", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd024ecd321b115f7147580cbf1e078a2f301bd66c04c6d4816fc16fabaede2f4", + "transactionsTrie": "0x5199778dbaad2d106fa95f82b120f4e771c8cde1cbeb5220d0a658fb1414ea93", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2630,27 +16047,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1eb5d56ef9197a41dbbf4f98c8f9aff0bf8840712f8cf954386952265b7e45a8" + "hash": "0x07e108862fef5165fc0fe5ea82ef35afaafdc67e4fe8279baf044262dade44ad" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", + "value": "0x00", "data": "0x01", "accessList": [], - "maxFeePerBlobGas": "0x64", + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x01", - "r": "0xc1ff90ffe75b876c16eb4e6cd57ab25ac52975bc385cae85325881a53766336e", - "s": "0x466cc2781938104210a37d9242d67b0d78f3205201374b243c669d41160f2538", + "r": "0xdb750b8a7504617d165cb5757e16d43787ae7b394edfbf718dde237ea84abc2c", + "s": "0xdba2c31ad78e8654308d7de46bce100a353c3a62fece44621b7cd9114c4b0b", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -2659,7 +16077,7 @@ } } ], - "lastblockhash": "0x1d55d31b60404233a5001b5b5302cd40133a8d179c62f4fb9350c655ae7e145d", + "lastblockhash": "0xb6c8530fb3a28640318f30e4044cb4c43263aa9616f137d8b67c5b59f18fc778", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -2669,7 +16087,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e48", + "balance": "0x4e247d4f", "code": "0x", "storage": {} } @@ -2683,26 +16101,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xca3e48", + "balance": "0x4e247d4f", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "023-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=100-single_one_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d8cd1d8d93ff313b8b1e746cf0c47057a71d06581fdb6dc91fb2316a37fb1ba2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ca7c68248488b5403a60425f8fd27186549ef70a53e93d8f7e49622bc7f0dceca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd8cd1d8d93ff313b8b1e746cf0c47057a71d06581fdb6dc91fb2316a37fb1ba2", + "stateRoot": "0xca7c68248488b5403a60425f8fd27186549ef70a53e93d8f7e49622bc7f0dcec", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2719,27 +16138,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7af361957ddcfdf86f96d28f856a357b696fddc0d8ce9ef84ed6a89386f7ea02" + "hash": "0xcc77c84702c0e077d1bfc2c4b266cb7077c6bf5e72dbac69cee9ed3de5468c6d" }, "blocks": [ { - "rlp": "0xf902d1f90240a07af361957ddcfdf86f96d28f856a357b696fddc0d8ce9ef84ed6a89386f7ea02a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06b6ceaf55501ba0b4ee4a3c1abcf5cb2aa6b55521ad188aa40e3fb26c50b838aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018008078252089400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0784aa728410e3cee700370d3c14cc537aa20ff0eecfc4e09d67b64bba397f846a02cf690a2b395d9ebe59f46ff762c530dcffb9dcfc04147de559ef8d07d413598c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0cc77c84702c0e077d1bfc2c4b266cb7077c6bf5e72dbac69cee9ed3de5468c6da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dc816bd55072accd28b7e279e6702579efac15b5ee0cdb3871db301ef8b41634a0bc19ef9e46bad2939bf58ee5dbdfc793b70ebf9d309962d569e164411a499bc3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0f4108185dc87512f51cc4a33641aeab134bb4a3c1fa2d8d59fcbc14e8fc47264a009f43b8a3206b8677e9535266f1cabca3aec3f166676000c35db6ba88f90d15dc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x7af361957ddcfdf86f96d28f856a357b696fddc0d8ce9ef84ed6a89386f7ea02", + "parentHash": "0xcc77c84702c0e077d1bfc2c4b266cb7077c6bf5e72dbac69cee9ed3de5468c6d", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6b6ceaf55501ba0b4ee4a3c1abcf5cb2aa6b55521ad188aa40e3fb26c50b838a", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xdc816bd55072accd28b7e279e6702579efac15b5ee0cdb3871db301ef8b41634", + "transactionsTrie": "0xbc19ef9e46bad2939bf58ee5dbdfc793b70ebf9d309962d569e164411a499bc3", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2747,27 +16166,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf1e68d96e177cafd738880a628b54592a7a000ea40f2b77b68f8e9d072298fa5" + "hash": "0xd626c69d98d3223861e5b2d7d90ba9dbb2249c669b382a4976eac05928b6ae04" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", + "value": "0x00", "data": "0x01", - "accessList": [], - "maxFeePerBlobGas": "0x64", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0x784aa728410e3cee700370d3c14cc537aa20ff0eecfc4e09d67b64bba397f846", - "s": "0x2cf690a2b395d9ebe59f46ff762c530dcffb9dcfc04147de559ef8d07d413598", + "r": "0xf4108185dc87512f51cc4a33641aeab134bb4a3c1fa2d8d59fcbc14e8fc47264", + "s": "0x09f43b8a3206b8677e9535266f1cabca3aec3f166676000c35db6ba88f90d15d", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -2776,7 +16204,7 @@ } } ], - "lastblockhash": "0x7af361957ddcfdf86f96d28f856a357b696fddc0d8ce9ef84ed6a89386f7ea02", + "lastblockhash": "0xcc77c84702c0e077d1bfc2c4b266cb7077c6bf5e72dbac69cee9ed3de5468c6d", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -2786,7 +16214,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce88", + "balance": "0x4e25d05f", "code": "0x", "storage": {} } @@ -2800,26 +16228,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0xccce88", + "balance": "0x4e25d05f", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "024-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-no_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f121ef1616e1c6e5b97e33738dc543013ffc21aa44b6242aa7d05f4668a2006a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b0a33582e49bb70ee80a7945fd8d8966c2c67d29166ffcf50b2a010cab6933e2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6f121ef1616e1c6e5b97e33738dc543013ffc21aa44b6242aa7d05f4668a2006", + "stateRoot": "0xb0a33582e49bb70ee80a7945fd8d8966c2c67d29166ffcf50b2a010cab6933e2", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2836,27 +16265,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d" + "hash": "0xf8eca42e46c707b35cc74ef1f50580f8f7567735ce64a7a51a09944410dcabcf" }, "blocks": [ { - "rlp": "0xf902d3f90240a097c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf7914d8938d7d51ddc2a74d5ac47eb9065524225c5f8d14f29fd234083f5c1ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a092c7b7ebc1af73ef5871030920e2b1b28b78ccdefac30a7851cbc34f77f9241ba0378b2976452d62627a6b1301c0df985b0c9d21c4172f4e2086938e55637800f2c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0f8eca42e46c707b35cc74ef1f50580f8f7567735ce64a7a51a09944410dcabcfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa047afe0fdef9c32e8112fe4e108385f041088d2be47837ac934dbb3f0162bd052a0db8bd908f634490e2388539099409b9cd94e0f8a95ae13543386c8be54959dd8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018007078252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a04f6c397e28c087aa0d4cea026de9974ddb554145af489334e008b6e62ea196e5a04cf5ff9caf66296263da6bc545419fc9b2207849a20e32361da21db5fb5b146ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d", + "parentHash": "0xf8eca42e46c707b35cc74ef1f50580f8f7567735ce64a7a51a09944410dcabcf", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbf7914d8938d7d51ddc2a74d5ac47eb9065524225c5f8d14f29fd234083f5c1b", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x47afe0fdef9c32e8112fe4e108385f041088d2be47837ac934dbb3f0162bd052", + "transactionsTrie": "0xdb8bd908f634490e2388539099409b9cd94e0f8a95ae13543386c8be54959dd8", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2864,27 +16293,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x83733d877b5873538f3056a7220f1dcf938e81cc62a6c43bc3183d742ee7b247" + "hash": "0xad5238ce03ce0697b3b9e64f36d771999c6690234845562a0fb16004d60ab25f" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x5218", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", - "data": "0x", + "data": "0x01", "accessList": [], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x01", - "r": "0x92c7b7ebc1af73ef5871030920e2b1b28b78ccdefac30a7851cbc34f77f9241b", - "s": "0x378b2976452d62627a6b1301c0df985b0c9d21c4172f4e2086938e55637800f2", + "r": "0x4f6c397e28c087aa0d4cea026de9974ddb554145af489334e008b6e62ea196e5", + "s": "0x4cf5ff9caf66296263da6bc545419fc9b2207849a20e32361da21db5fb5b146a", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -2893,7 +16323,7 @@ } } ], - "lastblockhash": "0x97c55a516a5dcdc04041c30641b2a0b96a62133ae43b7a29c6698d03305d460d", + "lastblockhash": "0xf8eca42e46c707b35cc74ef1f50580f8f7567735ce64a7a51a09944410dcabcf", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -2903,7 +16333,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e37", + "balance": "0x4e223ea7", "code": "0x", "storage": {} } @@ -2917,26 +16347,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e37", + "balance": "0x4e223ea7", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "025-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-no_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04e9fe0d26d922c9f8526bc1c7e4dcccce727a080c49bf615012d460ccc4148fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06c3af615a5a506e83f2e6f530d08305432ae1b89987544fda55ffb7069014983a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4e9fe0d26d922c9f8526bc1c7e4dcccce727a080c49bf615012d460ccc4148fc", + "stateRoot": "0x6c3af615a5a506e83f2e6f530d08305432ae1b89987544fda55ffb7069014983", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2953,27 +16384,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xda6987865c0cb9c1950f06d15dbdefb4885250a09b917ee9e267ec3b8aabfe85" + "hash": "0xc7c80a34aee9b9184dd405e0a984f7f6c07f04e43c8c17853d2c4edf9117d458" }, "blocks": [ { - "rlp": "0xf902d3f90240a0da6987865c0cb9c1950f06d15dbdefb4885250a09b917ee9e267ec3b8aabfe85a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03bf4de86f206b19a325e37cecae852b2d296ea37fa158c2b855daff101408bb5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018008078252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a05727e66c5d48c8b60b1d4874aef9d969c8a9ee2b8bc1876fbdd67f71a22e545fa03c77ec8be71a6b52f818fc1aff0abeb779d62727f76d8d4d34bf29ecb9e40006c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0c7c80a34aee9b9184dd405e0a984f7f6c07f04e43c8c17853d2c4edf9117d458a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fa393770f2db72c3c9253dce963ada4de4ebcec3b0ebc496e5785abe10f75e1ca054137bf39332bdc377eb872caa2ea32a258b01147e8d8d681f877d16150714b0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a083e0900f85182314c02416b5efeb266d2121de2bf65fc2fc7e83eff127aad809a029bec929e99f461d103bdbcdb29d58ee6a02a995bb48b30c3330fdf688c11890c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xda6987865c0cb9c1950f06d15dbdefb4885250a09b917ee9e267ec3b8aabfe85", + "parentHash": "0xc7c80a34aee9b9184dd405e0a984f7f6c07f04e43c8c17853d2c4edf9117d458", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x3bf4de86f206b19a325e37cecae852b2d296ea37fa158c2b855daff101408bb5", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xfa393770f2db72c3c9253dce963ada4de4ebcec3b0ebc496e5785abe10f75e1c", + "transactionsTrie": "0x54137bf39332bdc377eb872caa2ea32a258b01147e8d8d681f877d16150714b0", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2981,27 +16412,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xfbd3dcd93809e0275f20b389d029eb97ba5e0c0ee3e66065f6eba50e95c41389" + "hash": "0x4f2298ccdf4559092319f30d5f3e19e2a12ea818525bb91d405331b93a06323e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a50", "to": "0x0000000000000000000000000000000000000100", "value": "0x00", - "data": "0x", - "accessList": [], + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x01", - "r": "0x5727e66c5d48c8b60b1d4874aef9d969c8a9ee2b8bc1876fbdd67f71a22e545f", - "s": "0x3c77ec8be71a6b52f818fc1aff0abeb779d62727f76d8d4d34bf29ecb9e40006", + "v": "0x00", + "r": "0x83e0900f85182314c02416b5efeb266d2121de2bf65fc2fc7e83eff127aad809", + "s": "0x29bec929e99f461d103bdbcdb29d58ee6a02a995bb48b30c3330fdf688c11890", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3010,7 +16450,7 @@ } } ], - "lastblockhash": "0xda6987865c0cb9c1950f06d15dbdefb4885250a09b917ee9e267ec3b8aabfe85", + "lastblockhash": "0xc7c80a34aee9b9184dd405e0a984f7f6c07f04e43c8c17853d2c4edf9117d458", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3020,7 +16460,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce77", + "balance": "0x4e22e82f", "code": "0x", "storage": {} } @@ -3034,26 +16474,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce77", + "balance": "0x4e22e82f", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "026-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-no_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a074090819173c35436306d19540cd7a9932c790c1c8122654339477ef039bf29fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecb", + "stateRoot": "0x74090819173c35436306d19540cd7a9932c790c1c8122654339477ef039bf29f", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3070,27 +16511,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a" + "hash": "0xb6c8530fb3a28640318f30e4044cb4c43263aa9616f137d8b67c5b59f18fc778" }, "blocks": [ { - "rlp": "0xf902d3f90240a03bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0893769b3f99f28f4262b247595313b3d355a56e7f36673d66dfe2b2a376c799ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a060bdbc102688803f54a5228f5dd6fdb93877ccb02af626152683ded93d2fbdcda076d0a55a6fc84350507d282984e6c3c869964ff920d476afd5a0b2225fa1858ac0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0b6c8530fb3a28640318f30e4044cb4c43263aa9616f137d8b67c5b59f18fc778a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d024ecd321b115f7147580cbf1e078a2f301bd66c04c6d4816fc16fabaede2f4a081e16c97be7a8d0cceb0b7618da9d2d8b080003c0bfac101b69d54f3e87ae7e1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e8252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0c8adf83849ae3e89cdf8a5160cd9332260606bca46baae74e3270fbc119a210aa00699793e9eeb455fb19c1f91ff70f9d0bdd3eb3272b0170f28411c9cb3ed3fadc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a", + "parentHash": "0xb6c8530fb3a28640318f30e4044cb4c43263aa9616f137d8b67c5b59f18fc778", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x893769b3f99f28f4262b247595313b3d355a56e7f36673d66dfe2b2a376c799e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd024ecd321b115f7147580cbf1e078a2f301bd66c04c6d4816fc16fabaede2f4", + "transactionsTrie": "0x81e16c97be7a8d0cceb0b7618da9d2d8b080003c0bfac101b69d54f3e87ae7e1", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3098,27 +16539,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9fa8c515faa3df94527fdbc620dd628241c7e3cec70d6dd5b03834aaf89aa0e8" + "hash": "0x028de7fd726e4985fa1fdedc3b5aca0bb058577b7a0ab4ca3583ffcbd6c1acd7" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", - "data": "0x", + "value": "0x00", + "data": "0x01", "accessList": [], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x60bdbc102688803f54a5228f5dd6fdb93877ccb02af626152683ded93d2fbdcd", - "s": "0x76d0a55a6fc84350507d282984e6c3c869964ff920d476afd5a0b2225fa1858a", + "v": "0x01", + "r": "0xc8adf83849ae3e89cdf8a5160cd9332260606bca46baae74e3270fbc119a210a", + "s": "0x0699793e9eeb455fb19c1f91ff70f9d0bdd3eb3272b0170f28411c9cb3ed3fad", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3127,7 +16569,7 @@ } } ], - "lastblockhash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a", + "lastblockhash": "0xb6c8530fb3a28640318f30e4044cb4c43263aa9616f137d8b67c5b59f18fc778", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3137,7 +16579,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e38", + "balance": "0x4e247d4f", "code": "0x", "storage": {} } @@ -3151,26 +16593,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e38", + "balance": "0x4e247d4f", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "027-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-no_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0249674600473371646b07cd31c4a39f3ac8c5d81d08fb36bc068b854d02f4118a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ca7c68248488b5403a60425f8fd27186549ef70a53e93d8f7e49622bc7f0dceca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x249674600473371646b07cd31c4a39f3ac8c5d81d08fb36bc068b854d02f4118", + "stateRoot": "0xca7c68248488b5403a60425f8fd27186549ef70a53e93d8f7e49622bc7f0dcec", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3187,27 +16630,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xc94d0e8eb4c5abdc5712d265acc80f1fbd82caec71c7d8c215e51aa7bc84bed2" + "hash": "0xcc77c84702c0e077d1bfc2c4b266cb7077c6bf5e72dbac69cee9ed3de5468c6d" }, "blocks": [ { - "rlp": "0xf902d3f90240a0c94d0e8eb4c5abdc5712d265acc80f1fbd82caec71c7d8c215e51aa7bc84bed2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0be78a57bfc1e7a35b130bd1bc71db1166124d38d6fdca1e9888ab0a2c8be201ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018008078252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a088e09bd40d252f72a639df97d0cbb01c408dddddb039cdd565ba746526c18206a074dd71b8d0dd3d7f58aa07ad541c14b63dbb056897b306e935f9d8ed27231a27c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0cc77c84702c0e077d1bfc2c4b266cb7077c6bf5e72dbac69cee9ed3de5468c6da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dc816bd55072accd28b7e279e6702579efac15b5ee0cdb3871db301ef8b41634a0dbe64264ed3db5c6b0b8b808fc9321042295cf27058a4bcb609cfb888776eda7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a073e02820fc1cf49348efa26ac84e18bd01f0d9bbb6562a075c91e1072c43481aa052dbef0b02487293c36e11af5b66a9ac3f0250486228615005c2d3cb4badba8fc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xc94d0e8eb4c5abdc5712d265acc80f1fbd82caec71c7d8c215e51aa7bc84bed2", + "parentHash": "0xcc77c84702c0e077d1bfc2c4b266cb7077c6bf5e72dbac69cee9ed3de5468c6d", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbe78a57bfc1e7a35b130bd1bc71db1166124d38d6fdca1e9888ab0a2c8be201c", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xdc816bd55072accd28b7e279e6702579efac15b5ee0cdb3871db301ef8b41634", + "transactionsTrie": "0xdbe64264ed3db5c6b0b8b808fc9321042295cf27058a4bcb609cfb888776eda7", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3215,27 +16658,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x357e31f82e51fd33b738dcaa6ec1aa97c9653426066298a6442d5bf9eb1967a7" + "hash": "0xefa85076c74a6963acc3c58b614b1093bd1396e763077f32453d502f399c9549" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", - "data": "0x", - "accessList": [], + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x01", - "r": "0x88e09bd40d252f72a639df97d0cbb01c408dddddb039cdd565ba746526c18206", - "s": "0x74dd71b8d0dd3d7f58aa07ad541c14b63dbb056897b306e935f9d8ed27231a27", + "v": "0x00", + "r": "0x73e02820fc1cf49348efa26ac84e18bd01f0d9bbb6562a075c91e1072c43481a", + "s": "0x52dbef0b02487293c36e11af5b66a9ac3f0250486228615005c2d3cb4badba8f", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3244,7 +16696,7 @@ } } ], - "lastblockhash": "0xc94d0e8eb4c5abdc5712d265acc80f1fbd82caec71c7d8c215e51aa7bc84bed2", + "lastblockhash": "0xcc77c84702c0e077d1bfc2c4b266cb7077c6bf5e72dbac69cee9ed3de5468c6d", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3254,7 +16706,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce78", + "balance": "0x4e25d05f", "code": "0x", "storage": {} } @@ -3268,26 +16720,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce78", + "balance": "0x4e25d05f", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "028-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-single_zero_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0f03e0f72544996b07960bcbdaa0407a3c52be8e36ff8c4fa26a3ba8f0e548729a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bc700214ea4be718d0634c0fb3f35201a98fa15d9f5b1c571994ea4230835388a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf03e0f72544996b07960bcbdaa0407a3c52be8e36ff8c4fa26a3ba8f0e548729", + "stateRoot": "0xbc700214ea4be718d0634c0fb3f35201a98fa15d9f5b1c571994ea4230835388", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3304,27 +16757,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe063fdabc7dee6aba1e94678762f3d7dba4a2ec79a8ba89a0e2a58a89ea84837" + "hash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292" }, "blocks": [ { - "rlp": "0xf902d3f90240a0e063fdabc7dee6aba1e94678762f3d7dba4a2ec79a8ba89a0e2a58a89ea84837a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07a33d28c1cc3ee2f227377efcee55be86b43800dbc6eab900a4670624ec0d976a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a013a47a7322e5bb083158033fd369a08d3a86898d2fc879c4ea6a6ee655c016dfa00eafa12198e71fc47ab8d8b444c8303ce96f56d3379cc9048876341173abb3e6c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a058cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d7050e07dbcc6b7dd6a81ccce3112e351dbfbfca5e72456b6d0e9feddc9603e3a0710579a4235752eea06b2827d09281622eead36bd49cd739043a51582c72beeba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00195b630b1f83a765858aaab5cdf099b662c0e26829fcd88bf7695b58a7789eda01e472db305b3df65f9817ed1929662a42957f0f49ec8c48ca1e1d1c5875ca1d4c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xe063fdabc7dee6aba1e94678762f3d7dba4a2ec79a8ba89a0e2a58a89ea84837", + "parentHash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7a33d28c1cc3ee2f227377efcee55be86b43800dbc6eab900a4670624ec0d976", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd7050e07dbcc6b7dd6a81ccce3112e351dbfbfca5e72456b6d0e9feddc9603e3", + "transactionsTrie": "0x710579a4235752eea06b2827d09281622eead36bd49cd739043a51582c72beeb", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3332,8 +16785,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0e2781721ff7952ef02d5784be2f651dee786400668f153936eed2b71dceb511" + "hash": "0x88e37631e1efa0b2c2df05b5537a7b41e42c65ab151e1a6f7fa7aea2d1c57081" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3341,18 +16795,18 @@ "nonce": "0x00", "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x5218", "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x00", + "value": "0x01", + "data": "0x01", "accessList": [], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x01", - "r": "0x13a47a7322e5bb083158033fd369a08d3a86898d2fc879c4ea6a6ee655c016df", - "s": "0x0eafa12198e71fc47ab8d8b444c8303ce96f56d3379cc9048876341173abb3e6", + "v": "0x00", + "r": "0x0195b630b1f83a765858aaab5cdf099b662c0e26829fcd88bf7695b58a7789ed", + "s": "0x1e472db305b3df65f9817ed1929662a42957f0f49ec8c48ca1e1d1c5875ca1d4", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3361,7 +16815,7 @@ } } ], - "lastblockhash": "0xe063fdabc7dee6aba1e94678762f3d7dba4a2ec79a8ba89a0e2a58a89ea84837", + "lastblockhash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3371,7 +16825,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e3b", + "balance": "0x4e223ea8", "code": "0x", "storage": {} } @@ -3385,26 +16839,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e3b", + "balance": "0x4e223ea8", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "029-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-single_zero_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a1dec3f5d79f7b973d40bdc21ba6a33e330802ff0cda47ded4780cfdf31d9d0ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09ea2620dd587a70d6f6401183288745c110c738ac88458f93cdeb8e72d59ffeba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa1dec3f5d79f7b973d40bdc21ba6a33e330802ff0cda47ded4780cfdf31d9d0c", + "stateRoot": "0x9ea2620dd587a70d6f6401183288745c110c738ac88458f93cdeb8e72d59ffeb", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3421,27 +16876,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7ba39ca0d9f226f1b1b6dad21f9dd4dfd0ad46a7c074bf6325af6e94c9dc3959" + "hash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335" }, "blocks": [ { - "rlp": "0xf902d3f90240a07ba39ca0d9f226f1b1b6dad21f9dd4dfd0ad46a7c074bf6325af6e94c9dc3959a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0669d8d6bd70c11db837f5dfb28d1ca5792d063681ab928ad5c1415f8c8e0af4ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018008078252089400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a01df6255787a6fd58b1f366845226da7f0e7bfb27b7f1471157eedf27de29ddcaa0537b6a4aca2bdaf432b37c70ffa35c7157aee5db200229348a40eab1120fede8c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0de074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b1cbdf5940cadb7395d498741fdda55360b42b327dd257e0befa84642c1b689ba03c58a37c9d34f1046d468f609e237f38899b7cf816a5a01740dc9fcef65640c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0a7ac396b866d0071bb77a11e86a9ae587acc8c6cd7ce33c957694e6700b13a50a053ed1bf9a0ca9480c6920c884fdb5ead0011cddf77af18e494fd140f6efa6cb6c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x7ba39ca0d9f226f1b1b6dad21f9dd4dfd0ad46a7c074bf6325af6e94c9dc3959", + "parentHash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x669d8d6bd70c11db837f5dfb28d1ca5792d063681ab928ad5c1415f8c8e0af4b", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xb1cbdf5940cadb7395d498741fdda55360b42b327dd257e0befa84642c1b689b", + "transactionsTrie": "0x3c58a37c9d34f1046d468f609e237f38899b7cf816a5a01740dc9fcef65640c8", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3449,27 +16904,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb97ba869eabf49e94b8f7c3398ace035ca33253cd8c58d8ad1fb1e4995d107df" + "hash": "0x13a741d88a5546b6b328c12d7d24350c96fd8dc238170b9ac1146fd3a514859a" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x00", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a50", "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x00", - "accessList": [], + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x1df6255787a6fd58b1f366845226da7f0e7bfb27b7f1471157eedf27de29ddca", - "s": "0x537b6a4aca2bdaf432b37c70ffa35c7157aee5db200229348a40eab1120fede8", + "v": "0x01", + "r": "0xa7ac396b866d0071bb77a11e86a9ae587acc8c6cd7ce33c957694e6700b13a50", + "s": "0x53ed1bf9a0ca9480c6920c884fdb5ead0011cddf77af18e494fd140f6efa6cb6", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3478,7 +16942,7 @@ } } ], - "lastblockhash": "0x7ba39ca0d9f226f1b1b6dad21f9dd4dfd0ad46a7c074bf6325af6e94c9dc3959", + "lastblockhash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3488,7 +16952,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce7b", + "balance": "0x4e22e830", "code": "0x", "storage": {} } @@ -3502,26 +16966,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce7b", + "balance": "0x4e22e830", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "030-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-single_zero_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a079d53251e1e3fa364aa5aaf0f2b641c0c41956004cbf4953531262db68106e8aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07a8f3c448ebe2ad5fe37e4fe1ce3c041a3269599f6ee19ee0d3c2bcff6ab91f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x79d53251e1e3fa364aa5aaf0f2b641c0c41956004cbf4953531262db68106e8a", + "stateRoot": "0x7a8f3c448ebe2ad5fe37e4fe1ce3c041a3269599f6ee19ee0d3c2bcff6ab91f8", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3538,27 +17003,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xc2d753d365a7e5bc4c0eff290145a718ad22a91a17082312fa058c98d04dfcd8" + "hash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2" }, "blocks": [ { - "rlp": "0xf902d3f90240a0c2d753d365a7e5bc4c0eff290145a718ad22a91a17082312fa058c98d04dfcd8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f58443941ac0a908cd526fa8804998f433402f13fdde54fde99ebb1ea0415376a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0f5ec812ad1ffb047af3dc2dd03532e5835ab84dfb11edb203c4f358c71c76ea1a034cac065db16c8163026eeb6e02a220dd1b9b9b4e9f782673652f0b2bed1eba8c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0bf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02381b0e3a58b8a952f738cfc58d4f879bfa43cf9727860e0dca3e322b66fc043a0954bbff75aa739de1afda7c0b70afb5b70ee869fbce1c5b7ea1c61fdab86316fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e8252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0228aa4b47c0e323bd1f569ed050c301377bf1d4b6ce634bcc8a593f22335c591a07879d15425eab4dac014b3fdb23303d34268225633dcc1a2d9dd0fc5d8e792e3c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xc2d753d365a7e5bc4c0eff290145a718ad22a91a17082312fa058c98d04dfcd8", + "parentHash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf58443941ac0a908cd526fa8804998f433402f13fdde54fde99ebb1ea0415376", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x2381b0e3a58b8a952f738cfc58d4f879bfa43cf9727860e0dca3e322b66fc043", + "transactionsTrie": "0x954bbff75aa739de1afda7c0b70afb5b70ee869fbce1c5b7ea1c61fdab86316f", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3566,27 +17031,28 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0bcb08ef45be02565213f9997de77a4d6d36bf35f3142051f4df5e5f25807617" + "hash": "0x3ec01271d20841fed1520363d46679b715bb84447cf4820dc6a4721b3acd866e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", - "data": "0x00", + "data": "0x01", "accessList": [], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x01", - "r": "0xf5ec812ad1ffb047af3dc2dd03532e5835ab84dfb11edb203c4f358c71c76ea1", - "s": "0x34cac065db16c8163026eeb6e02a220dd1b9b9b4e9f782673652f0b2bed1eba8", + "v": "0x00", + "r": "0x228aa4b47c0e323bd1f569ed050c301377bf1d4b6ce634bcc8a593f22335c591", + "s": "0x7879d15425eab4dac014b3fdb23303d34268225633dcc1a2d9dd0fc5d8e792e3", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3595,7 +17061,7 @@ } } ], - "lastblockhash": "0xc2d753d365a7e5bc4c0eff290145a718ad22a91a17082312fa058c98d04dfcd8", + "lastblockhash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3605,7 +17071,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e3c", + "balance": "0x4e247d50", "code": "0x", "storage": {} } @@ -3619,26 +17085,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e3c", + "balance": "0x4e247d50", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "031-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-single_zero_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a024cba04e5644b658051b73ee076e7ba498e6046f1c65c81b94e181c83a32e81ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09978673ab550c698629bd62d79319a8ccc2edb1700d643e7dd4001cab711b47aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x24cba04e5644b658051b73ee076e7ba498e6046f1c65c81b94e181c83a32e81c", + "stateRoot": "0x9978673ab550c698629bd62d79319a8ccc2edb1700d643e7dd4001cab711b47a", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3655,27 +17122,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x443b027154874f618985319e51db3f067ae0863cb55031a0409e9a38cb5ff46c" + "hash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9" }, "blocks": [ { - "rlp": "0xf902d3f90240a0443b027154874f618985319e51db3f067ae0863cb55031a0409e9a38cb5ff46ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07a752a92094a36ebb85761a45b5f6b2b825263ea02b6c895022670f3b123ddcea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018008078252089400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0f3c698b450bd8cc610ec665322cd2afdb81ac4c98edf2c437582ad30029f0aa9a05f6b4564c33dd1f1f18a8ca0bcbff8dd87a0096bdfacc89bb86de30b666d4decc0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0e9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05eeeb4971f3764942738d010d609aed323fd765f609d75f3fda192125cfc28b1a00694b14e389168dcc1ecffb7bcba94828c354b478ee8e41253452e9966c2b0bda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a07957ab80563988b2377c82f7a64d0c0c859e1243c86c7ee705e36e8e4700a682a03978e2f63d054b7e4da2cb0bb68a4178e69c43255132f14bdbeebbf514d8c260c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x443b027154874f618985319e51db3f067ae0863cb55031a0409e9a38cb5ff46c", + "parentHash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7a752a92094a36ebb85761a45b5f6b2b825263ea02b6c895022670f3b123ddce", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x5eeeb4971f3764942738d010d609aed323fd765f609d75f3fda192125cfc28b1", + "transactionsTrie": "0x0694b14e389168dcc1ecffb7bcba94828c354b478ee8e41253452e9966c2b0bd", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3683,27 +17150,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5bd1a963e26568b71207e445ab5a81aa06936ca33ca9b12b1ffa2850373c61ba" + "hash": "0xd324d1523c0fbbb126324f28d2004850db0ea58c98301faf7fa2f46a7485893d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", - "data": "0x00", - "accessList": [], + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0xf3c698b450bd8cc610ec665322cd2afdb81ac4c98edf2c437582ad30029f0aa9", - "s": "0x5f6b4564c33dd1f1f18a8ca0bcbff8dd87a0096bdfacc89bb86de30b666d4dec", + "r": "0x7957ab80563988b2377c82f7a64d0c0c859e1243c86c7ee705e36e8e4700a682", + "s": "0x3978e2f63d054b7e4da2cb0bb68a4178e69c43255132f14bdbeebbf514d8c260", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3712,7 +17188,7 @@ } } ], - "lastblockhash": "0x443b027154874f618985319e51db3f067ae0863cb55031a0409e9a38cb5ff46c", + "lastblockhash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3722,7 +17198,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce7c", + "balance": "0x4e25d060", "code": "0x", "storage": {} } @@ -3736,26 +17212,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce7c", + "balance": "0x4e25d060", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "032-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-single_one_calldata-tx_value=0-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07402b19b40e052bd13971f38d7f16f106c1691f5e580f8d74bf9757621b7e877a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bc700214ea4be718d0634c0fb3f35201a98fa15d9f5b1c571994ea4230835388a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7402b19b40e052bd13971f38d7f16f106c1691f5e580f8d74bf9757621b7e877", + "stateRoot": "0xbc700214ea4be718d0634c0fb3f35201a98fa15d9f5b1c571994ea4230835388", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3772,27 +17249,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x984f2178ee212a4c02e46e18e6757b1388ce5ce79e50791cb04e161d32903752" + "hash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292" }, "blocks": [ { - "rlp": "0xf902d3f90240a0984f2178ee212a4c02e46e18e6757b1388ce5ce79e50791cb04e161d32903752a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0af7f40459703e6cb534fa48d7f1a34cea129226177931a509aa6bfe07910a344a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a051f4bae790e2b6c084246c356c3de79fb78657d438c08eb20bb8ed5fd1b3917ba03e95cebba0e840e8587abd7f1aed4b41a04a7141278f52394844155e00eccd0dc0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a058cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d7050e07dbcc6b7dd6a81ccce3112e351dbfbfca5e72456b6d0e9feddc9603e3a0352215b6f49a142dadd2e28ab68843212705f66ed50a63a1791845de44c0d868a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018007078252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0ad2360a19349fc4d9f820501f5d1364b615765f8dd044dcd68a882081a9e0b51a03570edfb978702735a11e873b664f4f4d346e587a6945f4d79e9aed3cf39f439c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x984f2178ee212a4c02e46e18e6757b1388ce5ce79e50791cb04e161d32903752", + "parentHash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xaf7f40459703e6cb534fa48d7f1a34cea129226177931a509aa6bfe07910a344", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd7050e07dbcc6b7dd6a81ccce3112e351dbfbfca5e72456b6d0e9feddc9603e3", + "transactionsTrie": "0x352215b6f49a142dadd2e28ab68843212705f66ed50a63a1791845de44c0d868", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3800,18 +17277,19 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x47ce461e8de2b279018e0ce4a0c33e44a83c2f5a7fe47c8b07ceab555f596d7a" + "hash": "0x5ee00a36f917e38c7ec5d92ae983bb48f527f98a30dfb9446f9aab1309087e9b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x5218", "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", + "value": "0x01", "data": "0x01", "accessList": [], "maxFeePerBlobGas": "0x2710", @@ -3819,8 +17297,8 @@ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x00", - "r": "0x51f4bae790e2b6c084246c356c3de79fb78657d438c08eb20bb8ed5fd1b3917b", - "s": "0x3e95cebba0e840e8587abd7f1aed4b41a04a7141278f52394844155e00eccd0d", + "r": "0xad2360a19349fc4d9f820501f5d1364b615765f8dd044dcd68a882081a9e0b51", + "s": "0x3570edfb978702735a11e873b664f4f4d346e587a6945f4d79e9aed3cf39f439", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3829,7 +17307,7 @@ } } ], - "lastblockhash": "0x984f2178ee212a4c02e46e18e6757b1388ce5ce79e50791cb04e161d32903752", + "lastblockhash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3839,7 +17317,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e47", + "balance": "0x4e223ea8", "code": "0x", "storage": {} } @@ -3853,26 +17331,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e47", + "balance": "0x4e223ea8", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "033-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-single_one_calldata-tx_value=0-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09265f50f3ec61eb58247a145c893546aa13a48c522fc9c1f4670f3849e81ff91a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09ea2620dd587a70d6f6401183288745c110c738ac88458f93cdeb8e72d59ffeba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9265f50f3ec61eb58247a145c893546aa13a48c522fc9c1f4670f3849e81ff91", + "stateRoot": "0x9ea2620dd587a70d6f6401183288745c110c738ac88458f93cdeb8e72d59ffeb", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3889,27 +17368,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb97d92d2dacd73c0fc7f23db5842f524ad188240aa2f13f75dd51514305189df" + "hash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335" }, "blocks": [ { - "rlp": "0xf902d3f90240a0b97d92d2dacd73c0fc7f23db5842f524ad188240aa2f13f75dd51514305189dfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0275b12bac5998557e45f795120050125d75f31be1de4c4949b557e34c129e617a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018008078252089400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a016e57d7e5f9de4299e55620476702135b33dcf354e774134782517d3bc69dfeca03694f8a546858dbffd54a43653c8e47f01b4a6f80a27a28509181872a5ca8b23c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0de074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b1cbdf5940cadb7395d498741fdda55360b42b327dd257e0befa84642c1b689ba054c3486d9082cbdb835e6f4cd991a5933faf9073be5ea4e5172af4294b663bd8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a07ed7259fc257b82770610ad9c4d6ddd6cc98d7fd1ec09ba5936f4a44ed2fe158a066c563da11de27b15031537d2269389f1470ac789955e2ad822b73c02c6ff4d1c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xb97d92d2dacd73c0fc7f23db5842f524ad188240aa2f13f75dd51514305189df", + "parentHash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x275b12bac5998557e45f795120050125d75f31be1de4c4949b557e34c129e617", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xb1cbdf5940cadb7395d498741fdda55360b42b327dd257e0befa84642c1b689b", + "transactionsTrie": "0x54c3486d9082cbdb835e6f4cd991a5933faf9073be5ea4e5172af4294b663bd8", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3917,27 +17396,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd5c072305cef9e407f2044ba90283a38333099ad333cc1a6f715b8830fd080a1" + "hash": "0xcd9d0ded04227fe740be6173326719d2979ab6b501651dd951ee8de5fc578879" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", + "maxPriorityFeePerGas": "0x07", "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "gasLimit": "0x6a50", "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", + "value": "0x01", "data": "0x01", - "accessList": [], + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], "v": "0x01", - "r": "0x16e57d7e5f9de4299e55620476702135b33dcf354e774134782517d3bc69dfec", - "s": "0x3694f8a546858dbffd54a43653c8e47f01b4a6f80a27a28509181872a5ca8b23", + "r": "0x7ed7259fc257b82770610ad9c4d6ddd6cc98d7fd1ec09ba5936f4a44ed2fe158", + "s": "0x66c563da11de27b15031537d2269389f1470ac789955e2ad822b73c02c6ff4d1", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -3946,7 +17434,7 @@ } } ], - "lastblockhash": "0xb97d92d2dacd73c0fc7f23db5842f524ad188240aa2f13f75dd51514305189df", + "lastblockhash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3956,7 +17444,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce87", + "balance": "0x4e22e830", "code": "0x", "storage": {} } @@ -3970,26 +17458,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce87", + "balance": "0x4e22e830", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "034-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-single_one_calldata-tx_value=1-tx_max_priority_fee_per_gas=0": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03f74505c0e27002783080ccfb0d5ebef27e07e35b10172acf1d331738c251442a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07a8f3c448ebe2ad5fe37e4fe1ce3c041a3269599f6ee19ee0d3c2bcff6ab91f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3f74505c0e27002783080ccfb0d5ebef27e07e35b10172acf1d331738c251442", + "stateRoot": "0x7a8f3c448ebe2ad5fe37e4fe1ce3c041a3269599f6ee19ee0d3c2bcff6ab91f8", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4006,27 +17495,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xade8faf0df3f2b97c175e2f62a38e9867c67d4cca5cebe6792c024af001e8789" + "hash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2" }, "blocks": [ { - "rlp": "0xf902d3f90240a0ade8faf0df3f2b97c175e2f62a38e9867c67d4cca5cebe6792c024af001e8789a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e40dbd3ab14035dbe96096f431cd0434c7c81d1b6e094ec3c9ce1dbdd319ea56a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0737b519fe8170fabccda38a492806443c07c8dc9d63ec92efd276e9a2c11b196a06302c874371c1c4d0a1259799a9110221925b2b2e6379e6247572d5182157a24c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf902d5f90242a0bf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02381b0e3a58b8a952f738cfc58d4f879bfa43cf9727860e0dca3e322b66fc043a034f2b6562bc9b1877c31ca20d74f1505b110c6ebc66e1ed6cc7ef8b5ce0cba27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e8252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a063e2ed1f32c8eba4d0aaae24195f0fc98d4dff91c1c8fc49de5b1e6a3af19d55a0673ce2b11364a9efd22fd894dcb612e218df0b53040c319ada138ddc6661d396c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xade8faf0df3f2b97c175e2f62a38e9867c67d4cca5cebe6792c024af001e8789", + "parentHash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe40dbd3ab14035dbe96096f431cd0434c7c81d1b6e094ec3c9ce1dbdd319ea56", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x2381b0e3a58b8a952f738cfc58d4f879bfa43cf9727860e0dca3e322b66fc043", + "transactionsTrie": "0x34f2b6562bc9b1877c31ca20d74f1505b110c6ebc66e1ed6cc7ef8b5ce0cba27", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4034,16 +17523,17 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa2038bd59ca1f2fef42c3c6e0867c2628906573e2a810ae972365fdd55927481" + "hash": "0x4509603662bf40deb1d482a47e91880a6a788196729be92b517aef044be857af" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", "data": "0x01", @@ -4052,9 +17542,9 @@ "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x737b519fe8170fabccda38a492806443c07c8dc9d63ec92efd276e9a2c11b196", - "s": "0x6302c874371c1c4d0a1259799a9110221925b2b2e6379e6247572d5182157a24", + "v": "0x01", + "r": "0x63e2ed1f32c8eba4d0aaae24195f0fc98d4dff91c1c8fc49de5b1e6a3af19d55", + "s": "0x673ce2b11364a9efd22fd894dcb612e218df0b53040c319ada138ddc6661d396", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -4063,7 +17553,7 @@ } } ], - "lastblockhash": "0xade8faf0df3f2b97c175e2f62a38e9867c67d4cca5cebe6792c024af001e8789", + "lastblockhash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4073,7 +17563,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e48", + "balance": "0x4e247d50", "code": "0x", "storage": {} } @@ -4087,26 +17577,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e223e48", + "balance": "0x4e247d50", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "035-fork=Cancun--exact_balance_minus_1-tx_max_fee_per_blob_gas=10000-single_one_calldata-tx_value=1-tx_max_priority_fee_per_gas=8": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx[fork_Cancun-blockchain_test--exact_balance_minus_1-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06cb19ec7cd5371fc3b5454d52a11abc44ca1426b0abc5310870d96188df4ff41a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09978673ab550c698629bd62d79319a8ccc2edb1700d643e7dd4001cab711b47aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6cb19ec7cd5371fc3b5454d52a11abc44ca1426b0abc5310870d96188df4ff41", + "stateRoot": "0x9978673ab550c698629bd62d79319a8ccc2edb1700d643e7dd4001cab711b47a", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4123,27 +17614,27 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x140000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x66c05afcd7331f5978d573863c7189f464408fec20eaac003f7cfa43aace657d" + "hash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9" }, "blocks": [ { - "rlp": "0xf902d3f90240a066c05afcd7331f5978d573863c7189f464408fec20eaac003f7cfa43aace657da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07a4beda4b14cef0e60289081ce27645593ab140f44a43e2fe6edccd9ffb5cfe5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018008078252089400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a07285eca8fd1ac92612f6244c25b795b9931b01e4604550dfdf90a5aea2ad54dda056aa0d80598c4dbaf9c3e0ee59d7ab8f8360f83695ade39f3b882e218d245409c0c0", - "expectException": "insufficient_account_balance", + "rlp": "0xf90331f90242a0e9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05eeeb4971f3764942738d010d609aed323fd765f609d75f3fda192125cfc28b1a0fd53ef7fc2006c3aadf9c1c9bf45e561450ff00c52d099eeff48ff8058a0fbeea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0cc907296e469f71ea73964a9afcf09ba1c36d0788e728a35f9aa0b45168c959ba03a26c21ba43cfd6e0cdb9a9c600e9e402fa89cf45bce467522776c2387db5442c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x66c05afcd7331f5978d573863c7189f464408fec20eaac003f7cfa43aace657d", + "parentHash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7a4beda4b14cef0e60289081ce27645593ab140f44a43e2fe6edccd9ffb5cfe5", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x5eeeb4971f3764942738d010d609aed323fd765f609d75f3fda192125cfc28b1", + "transactionsTrie": "0xfd53ef7fc2006c3aadf9c1c9bf45e561450ff00c52d099eeff48ff8058a0fbee", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4151,27 +17642,36 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa0cd91251370ddc7983f8a3adae645e48a6532bbee0dbf5514668511d81ce9e9" + "hash": "0xae4c91ac9d6fe24b309dbf0fb9ddce2d4859bba0e351c81e252ee95ec03724dc" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", "chainId": "0x01", "nonce": "0x00", - "maxPriorityFeePerGas": "0x08", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", "to": "0x0000000000000000000000000000000000000100", "value": "0x01", "data": "0x01", - "accessList": [], + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], "maxFeePerBlobGas": "0x2710", "blobVersionedHashes": [ "0x0100000000000000000000000000000000000000000000000000000000000000" ], - "v": "0x00", - "r": "0x7285eca8fd1ac92612f6244c25b795b9931b01e4604550dfdf90a5aea2ad54dd", - "s": "0x56aa0d80598c4dbaf9c3e0ee59d7ab8f8360f83695ade39f3b882e218d245409", + "v": "0x01", + "r": "0xcc907296e469f71ea73964a9afcf09ba1c36d0788e728a35f9aa0b45168c959b", + "s": "0x3a26c21ba43cfd6e0cdb9a9c600e9e402fa89cf45bce467522776c2387db5442", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], @@ -4180,7 +17680,7 @@ } } ], - "lastblockhash": "0x66c05afcd7331f5978d573863c7189f464408fec20eaac003f7cfa43aace657d", + "lastblockhash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4190,7 +17690,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce88", + "balance": "0x4e25d060", "code": "0x", "storage": {} } @@ -4204,7 +17704,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x4e24ce88", + "balance": "0x4e25d060", "code": "0x", "storage": {} } diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/insufficient_balance_blob_tx_combinations.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/insufficient_balance_blob_tx_combinations.json index 5d360745e2d..a5bc69bdeaa 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/insufficient_balance_blob_tx_combinations.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/insufficient_balance_blob_tx_combinations.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,15 +33,15 @@ }, "blocks": [ { - "rlp": "0xf90587f90243a0caeabd33c75644c791d2f1bbeb0982c4af1ed129d7a02d20d448097c9e65bdb7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05d03459b41302d6a781e2cfebd2af499c0949dc7dc662f2c07119b532b717e3ba03661257bb5c84c35577ff84a0c0764824974d6647187857c135085a2f0e3c350a00fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083019a280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9033cb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139b88803f885010580078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a07efec980ef3b40c74b2de3dee9e9f081b9b4ae4ae1732d64ba0e9553aaf08dc4a0464e6720d2d74b4d68f37f339608278be3a16802b61a46dc9895b898a70939eac0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90587f90243a0caeabd33c75644c791d2f1bbeb0982c4af1ed129d7a02d20d448097c9e65bdb7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05d03459b41302d6a781e2cfebd2af499c0949dc7dc662f2c07119b532b717e3ba03836ad4f15ec36789c84c94fb8342a0e5765d80446986c417b22954d1c9a5e8ba00fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083019a280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9033cb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139b88803f885010580078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a07efec980ef3b40c74b2de3dee9e9f081b9b4ae4ae1732d64ba0e9553aaf08dc4a0464e6720d2d74b4d68f37f339608278be3a16802b61a46dc9895b898a70939eac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xcaeabd33c75644c791d2f1bbeb0982c4af1ed129d7a02d20d448097c9e65bdb7", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x5d03459b41302d6a781e2cfebd2af499c0949dc7dc662f2c07119b532b717e3b", - "transactionsTrie": "0x3661257bb5c84c35577ff84a0c0764824974d6647187857c135085a2f0e3c350", + "transactionsTrie": "0x3836ad4f15ec36789c84c94fb8342a0e5765d80446986c417b22954d1c9a5e8b", "receiptTrie": "0x0fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -56,8 +57,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd3b79e4b19bff50650f74b36b70764e9e530db070174403c0a788658bcb3946c" + "hash": "0x746c494c7b468307d9648c0b1c8074bd7da4dcc7763d30918e782921e07e203b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -216,9 +218,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -249,15 +252,15 @@ }, "blocks": [ { - "rlp": "0xf904fdf90243a046bd926ae4c549c3fbccb6931a9626eb9749991ab26ddf0f7784622508bbaf0da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa097aeb626e9754dbfb203eef0b83a5dafad30c5ca8a1413a67cdb1f432bc86e02a0e1169f165d2e932731011db28419e7b7ff436823d5020291fc7ba639981a8eb8a080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902b2b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf904fdf90243a046bd926ae4c549c3fbccb6931a9626eb9749991ab26ddf0f7784622508bbaf0da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa097aeb626e9754dbfb203eef0b83a5dafad30c5ca8a1413a67cdb1f432bc86e02a03661257bb5c84c35577ff84a0c0764824974d6647187857c135085a2f0e3c350a080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902b2b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x46bd926ae4c549c3fbccb6931a9626eb9749991ab26ddf0f7784622508bbaf0d", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x97aeb626e9754dbfb203eef0b83a5dafad30c5ca8a1413a67cdb1f432bc86e02", - "transactionsTrie": "0xe1169f165d2e932731011db28419e7b7ff436823d5020291fc7ba639981a8eb8", + "transactionsTrie": "0x3661257bb5c84c35577ff84a0c0764824974d6647187857c135085a2f0e3c350", "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -273,8 +276,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2fd5ead209659fa82cfb45ba38172447c3c04266b27b7587640680ad2309c0d6" + "hash": "0x44ec2c2e988b4c6e02b2636380c49e4ba192d57c7e4170d68bd2c4249a8ac3ea" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -413,9 +417,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 1, 1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -446,15 +451,15 @@ }, "blocks": [ { - "rlp": "0xf9051ff90243a0bbd5e153e71181f0b743bb5150b60cfe0b7a01c086a1d9f8a2fdf1595f1efff5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ee6c2ded7de9a12ace1ec116ec4492d0cf142a856435e23ce443d3fa70ddce0aa0e1169f165d2e932731011db28419e7b7ff436823d5020291fc7ba639981a8eb8a080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902d4b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb8aa03f8a7010480078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0f767b7e3c41873f941552e15fd67947c18ed7139f03abbe188762e2b69b9dc8ca07f92eace9c234cc6b1353e9f6808165c5950f43ba226d3154b26a7c1b34a2d6bc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9051ff90243a0bbd5e153e71181f0b743bb5150b60cfe0b7a01c086a1d9f8a2fdf1595f1efff5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ee6c2ded7de9a12ace1ec116ec4492d0cf142a856435e23ce443d3fa70ddce0aa01a702cfa5256da11303eacb4f6fae0a3619e88a8a6a0682b7e9c08f0515df67aa080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902d4b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb8aa03f8a7010480078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0f767b7e3c41873f941552e15fd67947c18ed7139f03abbe188762e2b69b9dc8ca07f92eace9c234cc6b1353e9f6808165c5950f43ba226d3154b26a7c1b34a2d6bc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xbbd5e153e71181f0b743bb5150b60cfe0b7a01c086a1d9f8a2fdf1595f1efff5", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xee6c2ded7de9a12ace1ec116ec4492d0cf142a856435e23ce443d3fa70ddce0a", - "transactionsTrie": "0xe1169f165d2e932731011db28419e7b7ff436823d5020291fc7ba639981a8eb8", + "transactionsTrie": "0x1a702cfa5256da11303eacb4f6fae0a3619e88a8a6a0682b7e9c08f0515df67a", "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -470,8 +475,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xafe5c55a9ae563c79cfb0b16940fb2ff6abdc29f2af264917e0210350af6531c" + "hash": "0xe92897872b3fdc1809576462cc39f71eafea957a4e7a54753f8110bac9972c51" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -611,9 +617,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -644,15 +651,15 @@ }, "blocks": [ { - "rlp": "0xf90472f90242a0d67ff3e4069d0ace6875a7c3d213213e14f6bc8157982ed311190d0be4530b02a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0a027524ed598ec89039c2cef9bda45833e28f41ecfad76636b0abbac59b15e4f76a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90228b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90472f90242a0d67ff3e4069d0ace6875a7c3d213213e14f6bc8157982ed311190d0be4530b02a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0a0e1169f165d2e932731011db28419e7b7ff436823d5020291fc7ba639981a8eb8a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90228b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xd67ff3e4069d0ace6875a7c3d213213e14f6bc8157982ed311190d0be4530b02", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0", - "transactionsTrie": "0x27524ed598ec89039c2cef9bda45833e28f41ecfad76636b0abbac59b15e4f76", + "transactionsTrie": "0xe1169f165d2e932731011db28419e7b7ff436823d5020291fc7ba639981a8eb8", "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -668,8 +675,9 @@ "blobGasUsed": "0x080000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2e3c0f0100aa0dfa39d50a87e7add279865ec2e0d996e759b6b9e942e060f000" + "hash": "0xf6ec285533a89b518b9125b45aad1a3597c40efcf72d9ecd6caf8c3de9a86b12" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -788,9 +796,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -821,15 +830,15 @@ }, "blocks": [ { - "rlp": "0xf90494f90242a0a7be1e9520f1e9557d68aebebfd69eb6561e9aae7b6503d2651376036f191844a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0edc54baabec84f8f85117cb20970e85e8bae30548655c2b957c9a15b9ea455eea027524ed598ec89039c2cef9bda45833e28f41ecfad76636b0abbac59b15e4f76a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9024ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b8aa03f8a7010380078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a06d029dd5fbca2185367132cb8c6f2b55eb2e040ff2ef329ec5862c01282eac2fa03d8f5297c5e84d8bac8ae590d1c8fb939473cbcdc0db52310a2108b9b47d480ec0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90494f90242a0a7be1e9520f1e9557d68aebebfd69eb6561e9aae7b6503d2651376036f191844a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0edc54baabec84f8f85117cb20970e85e8bae30548655c2b957c9a15b9ea455eea036219ef524fefdf16df4dc044c3110b3f43df604eef9eba5c1a1e84c65a5fe05a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9024ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b8aa03f8a7010380078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a06d029dd5fbca2185367132cb8c6f2b55eb2e040ff2ef329ec5862c01282eac2fa03d8f5297c5e84d8bac8ae590d1c8fb939473cbcdc0db52310a2108b9b47d480ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa7be1e9520f1e9557d68aebebfd69eb6561e9aae7b6503d2651376036f191844", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xedc54baabec84f8f85117cb20970e85e8bae30548655c2b957c9a15b9ea455ee", - "transactionsTrie": "0x27524ed598ec89039c2cef9bda45833e28f41ecfad76636b0abbac59b15e4f76", + "transactionsTrie": "0x36219ef524fefdf16df4dc044c3110b3f43df604eef9eba5c1a1e84c65a5fe05", "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -845,8 +854,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5d554017739d731af48a5411482473ac138705186126ead565de9eb16ed7dbc5" + "hash": "0xc9abbc871bc27669cc6e3b2bb0d2e99e36b1527ec1168faca085ed1a402fb206" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -966,9 +976,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 1, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -999,15 +1010,15 @@ }, "blocks": [ { - "rlp": "0xf904b5f90242a041ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a2f18d3b3cd4722f0dd35574c211fc582030a172703c0fdcc320f4c49003d771a027524ed598ec89039c2cef9bda45833e28f41ecfad76636b0abbac59b15e4f76a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9026bb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b8cb03f8c8010380078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0f1f4b9be64029d9407c88d2a775cb70706e6045d3855ffa0e6a52f416459e96ea038cf645bc6ff2e307b1fcb647576cef0ad491cc75ddd8e2c1c065be1bac2f2bcc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf904b5f90242a041ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a2f18d3b3cd4722f0dd35574c211fc582030a172703c0fdcc320f4c49003d771a0b70669c100ff59672315e1cdfd553bd2423253a8bb90e49968eed64a0b3c3487a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9026bb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b8cb03f8c8010380078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0f1f4b9be64029d9407c88d2a775cb70706e6045d3855ffa0e6a52f416459e96ea038cf645bc6ff2e307b1fcb647576cef0ad491cc75ddd8e2c1c065be1bac2f2bcc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xa2f18d3b3cd4722f0dd35574c211fc582030a172703c0fdcc320f4c49003d771", - "transactionsTrie": "0x27524ed598ec89039c2cef9bda45833e28f41ecfad76636b0abbac59b15e4f76", + "transactionsTrie": "0xb70669c100ff59672315e1cdfd553bd2423253a8bb90e49968eed64a0b3c3487", "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -1023,8 +1034,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0fa16e41d59bdfaba7f9dad9ce30dce635949ec76aa8d8fc3d897fedb158314d" + "hash": "0x3c0fa782d260802dacc167979fba5eab6a42c2235e4470999f474795e7ef3a1b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1145,9 +1157,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1178,15 +1191,15 @@ }, "blocks": [ { - "rlp": "0xf904b6f90242a041ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0edc54baabec84f8f85117cb20970e85e8bae30548655c2b957c9a15b9ea455eea01f348970ea56fb49a8bc9aaf59e9aba88e02efa880b9a8a2e3cb5ae4f031ae75a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9026cb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befb8aa03f8a7010380078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a06d029dd5fbca2185367132cb8c6f2b55eb2e040ff2ef329ec5862c01282eac2fa03d8f5297c5e84d8bac8ae590d1c8fb939473cbcdc0db52310a2108b9b47d480ec0c0", - "expectException": "insufficient account balance", + "rlp": "0xf904b6f90242a041ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0edc54baabec84f8f85117cb20970e85e8bae30548655c2b957c9a15b9ea455eea0e49964fc7dd60ecb206aa113cb975c456fa9bb110b0328f52ef99f5dcd4f23cca09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9026cb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befb8aa03f8a7010380078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a06d029dd5fbca2185367132cb8c6f2b55eb2e040ff2ef329ec5862c01282eac2fa03d8f5297c5e84d8bac8ae590d1c8fb939473cbcdc0db52310a2108b9b47d480ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xedc54baabec84f8f85117cb20970e85e8bae30548655c2b957c9a15b9ea455ee", - "transactionsTrie": "0x1f348970ea56fb49a8bc9aaf59e9aba88e02efa880b9a8a2e3cb5ae4f031ae75", + "transactionsTrie": "0xe49964fc7dd60ecb206aa113cb975c456fa9bb110b0328f52ef99f5dcd4f23cc", "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -1202,8 +1215,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf3d262540e4a93390b8ddf30a4d6f2b17f4d91d9a9ea48c79fbe69798ff0ce05" + "hash": "0xad722b52b90e8867ecedfe4ac6b39e7612fa052d7a3e0797415d4c65feee26f0" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1324,9 +1338,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1357,15 +1372,15 @@ }, "blocks": [ { - "rlp": "0xf903e8f90242a0543932c452845438f3d7157d96ae29d80cf5947e7a268d4a471362d859a51d75a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a07a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019eb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903e8f90242a0543932c452845438f3d7157d96ae29d80cf5947e7a268d4a471362d859a51d75a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a027524ed598ec89039c2cef9bda45833e28f41ecfad76636b0abbac59b15e4f76a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019eb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x543932c452845438f3d7157d96ae29d80cf5947e7a268d4a471362d859a51d75", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x3d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4", - "transactionsTrie": "0x7a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41", + "transactionsTrie": "0x27524ed598ec89039c2cef9bda45833e28f41ecfad76636b0abbac59b15e4f76", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -1381,8 +1396,9 @@ "blobGasUsed": "0x060000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe0300f080ad7ce9a85ad23d85064f23eecd31ae299cd8af29105f38b255ca23a" + "hash": "0x9d1c95065768fc1572bd753134285590df3339aef1ddd7bf95d9efd52ca7f637" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1481,9 +1497,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1514,15 +1531,15 @@ }, "blocks": [ { - "rlp": "0xf9040af90242a0491e2ada287e5d1c65ead10c85f7aaa87857b77959de6b05a95e5609adf7b7d4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374fa07a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901c0b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9040af90242a0491e2ada287e5d1c65ead10c85f7aaa87857b77959de6b05a95e5609adf7b7d4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374fa01f348970ea56fb49a8bc9aaf59e9aba88e02efa880b9a8a2e3cb5ae4f031ae75a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901c0b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x491e2ada287e5d1c65ead10c85f7aaa87857b77959de6b05a95e5609adf7b7d4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x0bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374f", - "transactionsTrie": "0x7a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41", + "transactionsTrie": "0x1f348970ea56fb49a8bc9aaf59e9aba88e02efa880b9a8a2e3cb5ae4f031ae75", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -1538,8 +1555,9 @@ "blobGasUsed": "0x080000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3360ac068ee03349bb70196b036e1d9ccb55a0bf21023c9af1980721a567d33a" + "hash": "0x3a074eda5991cfc5bcaaaecab650f089239b2457b6573b3055ad2fdb5f209ae4" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1639,9 +1657,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1672,15 +1691,15 @@ }, "blocks": [ { - "rlp": "0xf9042bf90242a0710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a3d52fb9896d3c0d9214d9a11dcf744fef4c045db29481a11de0d068b175d30a07a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901e1b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8cb03f8c8010280078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0f745b5a72a2c990db52b13e7b7827240131b1e67ce876fcf326fa25201644f2ea027c7189e4cf388453094af696515daf8629bcf0e7f02d92dfab462fcc059312dc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9042bf90242a0710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a3d52fb9896d3c0d9214d9a11dcf744fef4c045db29481a11de0d068b175d30a02016fc4b7cf8bffd29294f803dff69b7a00065813ff7492fed49d666c231c74ea010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901e1b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8cb03f8c8010280078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0f745b5a72a2c990db52b13e7b7827240131b1e67ce876fcf326fa25201644f2ea027c7189e4cf388453094af696515daf8629bcf0e7f02d92dfab462fcc059312dc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x1a3d52fb9896d3c0d9214d9a11dcf744fef4c045db29481a11de0d068b175d30", - "transactionsTrie": "0x7a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41", + "transactionsTrie": "0x2016fc4b7cf8bffd29294f803dff69b7a00065813ff7492fed49d666c231c74e", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -1696,8 +1715,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2c90b6daff268c00fcd809d2043a8beaf2725fe9f83c2f118cb353c00e820183" + "hash": "0xeb3b183c548cb6a117c24fd2560e3204a06c2bea876f5efc807a374c8aa2b5c5" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1798,9 +1818,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1831,15 +1852,15 @@ }, "blocks": [ { - "rlp": "0xf9044cf90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00ecf59dad2bcdf166eb1e1b01e2fd9c0c3dba4e9bd7c45527e2d28e8ba0b8e0aa07a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90202b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8ec03f8e9010280078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a0e9476ce242f923f527e67d058a797f8e5031eb988055d5fc1e8260363eb60c71a040e6602db343c002d4322ba14cc9d62798e7148e79e7d1bb8e2e929741d24cf2c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9044cf90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00ecf59dad2bcdf166eb1e1b01e2fd9c0c3dba4e9bd7c45527e2d28e8ba0b8e0aa092d89ea39c490435e836a2846b5222c12d881b612474758d6afc1d4c95d09eb4a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90202b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8ec03f8e9010280078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a0e9476ce242f923f527e67d058a797f8e5031eb988055d5fc1e8260363eb60c71a040e6602db343c002d4322ba14cc9d62798e7148e79e7d1bb8e2e929741d24cf2c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x0ecf59dad2bcdf166eb1e1b01e2fd9c0c3dba4e9bd7c45527e2d28e8ba0b8e0a", - "transactionsTrie": "0x7a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41", + "transactionsTrie": "0x92d89ea39c490435e836a2846b5222c12d881b612474758d6afc1d4c95d09eb4", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -1855,8 +1876,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x30a92798ab246316c92a23d022514f30485d7df56cc1ea9634f600bd32a56643" + "hash": "0x32894ffd1b4348d900f0117fc6378da8deb48450061ce4ddcb57143d6b84118e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1958,9 +1980,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1991,15 +2014,15 @@ }, "blocks": [ { - "rlp": "0xf9042cf90242a0710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374fa097c81e3a33952f445d489fefe28ca5dd7f3e11dd8836f3cec1517fd4f84b9ddba010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901e2b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9042cf90242a0710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374fa042d890b1d5b9bb62a2b3aa6684851b6ec7baabd924915b7b9573fa497188d3a5a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901e2b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x0bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374f", - "transactionsTrie": "0x97c81e3a33952f445d489fefe28ca5dd7f3e11dd8836f3cec1517fd4f84b9ddb", + "transactionsTrie": "0x42d890b1d5b9bb62a2b3aa6684851b6ec7baabd924915b7b9573fa497188d3a5", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -2015,8 +2038,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7e635c0a9a48552a2879c85c397c5a77cbe11c61b79c5b9e181ba6743534a633" + "hash": "0x385ef0c915fbae68ba4962ea6a95ae44970d588624b2a0f2e679435aa05a7672" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2117,9 +2141,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 2, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2150,15 +2175,15 @@ }, "blocks": [ { - "rlp": "0xf9044df90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a3d52fb9896d3c0d9214d9a11dcf744fef4c045db29481a11de0d068b175d30a097c81e3a33952f445d489fefe28ca5dd7f3e11dd8836f3cec1517fd4f84b9ddba010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90203b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8cb03f8c8010280078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0f745b5a72a2c990db52b13e7b7827240131b1e67ce876fcf326fa25201644f2ea027c7189e4cf388453094af696515daf8629bcf0e7f02d92dfab462fcc059312dc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9044df90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a3d52fb9896d3c0d9214d9a11dcf744fef4c045db29481a11de0d068b175d30a088ce10d410ef0495ee105f2091fb5b2891782abe1a06a29ec9aacf73d23bbad0a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90203b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8cb03f8c8010280078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0f745b5a72a2c990db52b13e7b7827240131b1e67ce876fcf326fa25201644f2ea027c7189e4cf388453094af696515daf8629bcf0e7f02d92dfab462fcc059312dc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x1a3d52fb9896d3c0d9214d9a11dcf744fef4c045db29481a11de0d068b175d30", - "transactionsTrie": "0x97c81e3a33952f445d489fefe28ca5dd7f3e11dd8836f3cec1517fd4f84b9ddb", + "transactionsTrie": "0x88ce10d410ef0495ee105f2091fb5b2891782abe1a06a29ec9aacf73d23bbad0", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -2174,8 +2199,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd59de7b808a363cd4a2f884733d2311ac5fdff59b693de490ed67726b60e069c" + "hash": "0xc67ebad40c776d626493faa4e832d4a7b41b38eb70bc2d1babca134b2e0cd0df" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2277,9 +2303,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2310,15 +2337,15 @@ }, "blocks": [ { - "rlp": "0xf9044ef90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374fa0f8394831df420eef1722950e31ff1f2aa90b97ec0eb98526069781f2a8ba7029a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90204b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9044ef90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374fa0eee09f637c5b61bc52e8d6ac6eb8220c07b812d842967964cc0221e744a19e11a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90204b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x0bfe25d7e7e30acc82c4c28c0cd34dc8250ace3d03d7f06984a4a656530b374f", - "transactionsTrie": "0xf8394831df420eef1722950e31ff1f2aa90b97ec0eb98526069781f2a8ba7029", + "transactionsTrie": "0xeee09f637c5b61bc52e8d6ac6eb8220c07b812d842967964cc0221e744a19e11", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -2334,8 +2361,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0ac07e243311710dee47db6f264223a645e80bd0b18ae1240fc9183c15ffdb62" + "hash": "0xc72730fec9fd65289c8e6a57a507c05848263e74698617109d20ad263cb83473" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2437,9 +2465,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2470,15 +2499,15 @@ }, "blocks": [ { - "rlp": "0xf9035ef90242a0d9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90114b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9035ef90242a0d9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa07a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90114b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xd9afd2e454bd4dbaba688c0f8a0463689e50da4fe4bd675a9fb59434bedc2d55", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x02429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebf", - "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", + "transactionsTrie": "0x7a65a7d509214f67e3472a6a5501dc20f1c689b3d744d0b6bb3f3f9988710f41", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -2494,8 +2523,9 @@ "blobGasUsed": "0x040000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xc3cfb6dab012df61cdb3e226e64b17cf54857b0df15b79098c02c91d02b8f5f2" + "hash": "0x0898d5b5a619a18ea72e3b3a31aa3a1aac3c2b3545dad9cca4cce4c93037cc6f" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2574,9 +2604,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2607,15 +2638,15 @@ }, "blocks": [ { - "rlp": "0xf90380f90242a026df0c4b1db060258d652d48eb7f99d14377451c7b8cf1ca965255e24ccc13ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1a0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90136b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90380f90242a026df0c4b1db060258d652d48eb7f99d14377451c7b8cf1ca965255e24ccc13ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1a097c81e3a33952f445d489fefe28ca5dd7f3e11dd8836f3cec1517fd4f84b9ddba0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90136b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x26df0c4b1db060258d652d48eb7f99d14377451c7b8cf1ca965255e24ccc13ad", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1", - "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", + "transactionsTrie": "0x97c81e3a33952f445d489fefe28ca5dd7f3e11dd8836f3cec1517fd4f84b9ddb", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -2631,8 +2662,9 @@ "blobGasUsed": "0x060000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1d4cb7c31c1bf0dfdf75815ff12910c8fcd821416b1356ca638e577ab2ae67bc" + "hash": "0xa68b39396230a0b93e34639f10459b2274daf54818f3874831e2f4a33ed6725e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2712,9 +2744,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2745,15 +2778,15 @@ }, "blocks": [ { - "rlp": "0xf903a1f90242a0ba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8a0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90157b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903a1f90242a0ba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8a01ee6b5040a0afb8c01dd4973e7816f11f25c85d45f12fa9a2986ac5ee901408ba0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90157b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23d", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x4d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8", - "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", + "transactionsTrie": "0x1ee6b5040a0afb8c01dd4973e7816f11f25c85d45f12fa9a2986ac5ee901408b", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -2769,8 +2802,9 @@ "blobGasUsed": "0x080000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x46efe02cd4bce6f5ccc379e2c9d307e4ebdb15b94803e3cde0917e19f0a7267e" + "hash": "0x23df4c414061c3475f44d687a176996ccc2b410470dcaebed2e7a3f677c006af" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2851,9 +2885,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2884,15 +2919,15 @@ }, "blocks": [ { - "rlp": "0xf903c2f90242a041c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f04b554adc1b019d8687cf572bf52deea7f9db36c270d6bea7eeef145ada699a0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90178b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8ec03f8e9010180078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a0a9f1ef3f0dcf6833817f20e660ff751b5ede0573c495c2f707ba9bd7f8d6639fa072b7268169653fa15613ecee69def2deef2562057b65bf753c23f3e480609261c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903c2f90242a041c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f04b554adc1b019d8687cf572bf52deea7f9db36c270d6bea7eeef145ada699a0b30a74693e97ae1c8c7385b644494c47b724e9605c55c02c8d73e954102f73efa0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90178b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8ec03f8e9010180078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a0a9f1ef3f0dcf6833817f20e660ff751b5ede0573c495c2f707ba9bd7f8d6639fa072b7268169653fa15613ecee69def2deef2562057b65bf753c23f3e480609261c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x7f04b554adc1b019d8687cf572bf52deea7f9db36c270d6bea7eeef145ada699", - "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", + "transactionsTrie": "0xb30a74693e97ae1c8c7385b644494c47b724e9605c55c02c8d73e954102f73ef", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -2908,8 +2943,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9d4240e01e7a864a89ea33b1a355f5a86cb422cfc33c8009cf89c56786a0a3d5" + "hash": "0xe030b02d110df6c1ab02aaf2bc6b0c052c56789e7a9ea27bf086d13a134ec507" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2991,9 +3027,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1, 5)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1, 5)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3024,15 +3061,15 @@ }, "blocks": [ { - "rlp": "0xf903e5f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa041e4f8e82c7e61f05afb5c8dc629e49cc896302f003633838962f60c3a4fd347a0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019bb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab9010e03f9010a010180078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a03b2d2b489ff492b72d5a89673af2a2840830ead9d6cf2544e444385818f4db97a03ba1a6691a91deb8a72304e4986800f766d95f552fceb901a37c4f913f9a1f5ec0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903e5f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa041e4f8e82c7e61f05afb5c8dc629e49cc896302f003633838962f60c3a4fd347a02e9cf64392a4fe9d3b778a57121cb9955d6bbd1ab320c686eec0e8d02df887e5a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019bb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab9010e03f9010a010180078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a03b2d2b489ff492b72d5a89673af2a2840830ead9d6cf2544e444385818f4db97a03ba1a6691a91deb8a72304e4986800f766d95f552fceb901a37c4f913f9a1f5ec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x2e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x41e4f8e82c7e61f05afb5c8dc629e49cc896302f003633838962f60c3a4fd347", - "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", + "transactionsTrie": "0x2e9cf64392a4fe9d3b778a57121cb9955d6bbd1ab320c686eec0e8d02df887e5", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -3048,8 +3085,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0ae3828f19ac01877130a78b424c0b4ea3186b7e250fe55c7b7708187fd62de9" + "hash": "0x38e2a72cc680fc594f12f6ace92d7b7f5174a7c913626a749093cb76c835c1fb" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3132,9 +3170,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3165,15 +3204,15 @@ }, "blocks": [ { - "rlp": "0xf903a2f90242a0ba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1a0ea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855ca0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90158b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903a2f90242a0ba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1a0f8394831df420eef1722950e31ff1f2aa90b97ec0eb98526069781f2a8ba7029a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90158b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23d", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1", - "transactionsTrie": "0xea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855c", + "transactionsTrie": "0xf8394831df420eef1722950e31ff1f2aa90b97ec0eb98526069781f2a8ba7029", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -3189,8 +3228,9 @@ "blobGasUsed": "0x080000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x882074cbe60b2e0c65a26c206a0f0bbf95ede491976c8a58b3c4d2d63342876a" + "hash": "0x3db079d1a32977dad74e6a446e2990a9a7738f7b85d1d06973dd6949d4f592c6" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3271,9 +3311,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3304,15 +3345,15 @@ }, "blocks": [ { - "rlp": "0xf903c3f90242a041c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8a0ea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855ca0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90179b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903c3f90242a041c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8a0e3f992c2683a4ad8e3adcb4c32da05aacd7a4afe4f01d9ba15f7a63e67a70abca0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90179b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x4d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8", - "transactionsTrie": "0xea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855c", + "transactionsTrie": "0xe3f992c2683a4ad8e3adcb4c32da05aacd7a4afe4f01d9ba15f7a63e67a70abc", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -3328,8 +3369,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x54def9425700b58b0e614cdf492302422c5c5c0af0097eee6d293f8f900be78d" + "hash": "0x6865e9ad3dee79f30ed0ab79fa86fb7c1b99423b2642f0018b53d2fb0d9a09e0" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3411,9 +3453,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3444,15 +3487,15 @@ }, "blocks": [ { - "rlp": "0xf903e4f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f04b554adc1b019d8687cf572bf52deea7f9db36c270d6bea7eeef145ada699a0ea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855ca0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019ab8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8ec03f8e9010180078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a0a9f1ef3f0dcf6833817f20e660ff751b5ede0573c495c2f707ba9bd7f8d6639fa072b7268169653fa15613ecee69def2deef2562057b65bf753c23f3e480609261c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903e4f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f04b554adc1b019d8687cf572bf52deea7f9db36c270d6bea7eeef145ada699a0c15ff0dcf91c5968eef6e83ba0b7accc5bd058499f333ff716eda2aa52772290a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019ab8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8ec03f8e9010180078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a0a9f1ef3f0dcf6833817f20e660ff751b5ede0573c495c2f707ba9bd7f8d6639fa072b7268169653fa15613ecee69def2deef2562057b65bf753c23f3e480609261c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x2e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x7f04b554adc1b019d8687cf572bf52deea7f9db36c270d6bea7eeef145ada699", - "transactionsTrie": "0xea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855c", + "transactionsTrie": "0xc15ff0dcf91c5968eef6e83ba0b7accc5bd058499f333ff716eda2aa52772290", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -3468,8 +3511,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0be03f76cbd053c9533225b250f1d6de31e2e7b828194c515591dec1af8d6776" + "hash": "0xedee9f56ceb5c5b4cca2fc7876931fbc42fcbaae5432674a995c878ae34680d2" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3552,9 +3596,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(3, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3585,15 +3630,15 @@ }, "blocks": [ { - "rlp": "0xf903e4f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8a03e6efb03c87131b8c8563c972bb9916c3c3a7c84383adb351b8bbfb7a07f1c44a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019ab8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903e4f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8a01273994453dcd4ac2a1d3f35ea06ef5f505c6fc508ad1e4d7024a6f1a7d3d2eea0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019ab8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x2e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x4d8a514d359356a1e69275bd54d56a31090d5ee3dcad051e7bb3114ea62866e8", - "transactionsTrie": "0x3e6efb03c87131b8c8563c972bb9916c3c3a7c84383adb351b8bbfb7a07f1c44", + "transactionsTrie": "0x1273994453dcd4ac2a1d3f35ea06ef5f505c6fc508ad1e4d7024a6f1a7d3d2ee", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -3609,8 +3654,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x8af317c96c950be6ade511dcd9ea18b1d65ca2d1313197107446f2dabd002f8d" + "hash": "0x40090141b6d1be106d6b371dce28d64238420562cd8aca5754372af086f21eb3" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3693,9 +3739,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(1,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(1,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3726,15 +3773,15 @@ }, "blocks": [ { - "rlp": "0xf902d1f90240a0cb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f79c1f1858e40fb857f4baaf29fb17954e0b423e80d6170cdbe7b8180a6e3809a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", - "expectException": "insufficient account balance", + "rlp": "0xf902d1f90240a0cb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f79c1f1858e40fb857f4baaf29fb17954e0b423e80d6170cdbe7b8180a6e3809a0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xf79c1f1858e40fb857f4baaf29fb17954e0b423e80d6170cdbe7b8180a6e3809", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -3750,8 +3797,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x63fec1369cd9d65b290ae94fc996e8ebf2c79051c6bf35141dd04fae3e4ed933" + "hash": "0xb9bb1b96756f86802dc3208f7d5a108ae7acbf0e8988e0be3295d8e10837ded0" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3810,9 +3858,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3843,15 +3892,15 @@ }, "blocks": [ { - "rlp": "0xf902f3f90240a0555af0d77fd31dc9a181eacde4d6449fa4a4a48439375cbf9e2658a834883901a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa055062ff0403a751369681b1a8c78b7479e646eb195f45d24785b05bcc2c3ef54a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf902f3f90240a0555af0d77fd31dc9a181eacde4d6449fa4a4a48439375cbf9e2658a834883901a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa055062ff0403a751369681b1a8c78b7479e646eb195f45d24785b05bcc2c3ef54a0ea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x555af0d77fd31dc9a181eacde4d6449fa4a4a48439375cbf9e2658a834883901", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x55062ff0403a751369681b1a8c78b7479e646eb195f45d24785b05bcc2c3ef54", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855c", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -3867,8 +3916,9 @@ "blobGasUsed": "0x040000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x10f6bf0ebaf88a7f35716adc2b76b09a80736ecccbdd9ed51f3bcf61b67ab920" + "hash": "0x82076b114e5403f0bd91a642c4723f0324c2171e29e8a6179ee5e2182df285c7" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3928,9 +3978,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(3,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3961,15 +4012,15 @@ }, "blocks": [ { - "rlp": "0xf90314f90240a0b2e2c8999965611df1fcacfaf7c29054a8fd3a09457af5730667fbafe543ca8da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a48d0e79248037a5d478e952d0f84f2de67b81bd690b001d8f40cc645ea71527a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90314f90240a0b2e2c8999965611df1fcacfaf7c29054a8fd3a09457af5730667fbafe543ca8da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a48d0e79248037a5d478e952d0f84f2de67b81bd690b001d8f40cc645ea71527a03e6efb03c87131b8c8563c972bb9916c3c3a7c84383adb351b8bbfb7a07f1c44a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xb2e2c8999965611df1fcacfaf7c29054a8fd3a09457af5730667fbafe543ca8d", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xa48d0e79248037a5d478e952d0f84f2de67b81bd690b001d8f40cc645ea71527", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x3e6efb03c87131b8c8563c972bb9916c3c3a7c84383adb351b8bbfb7a07f1c44", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -3985,8 +4036,9 @@ "blobGasUsed": "0x060000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x02ebb7f9171a61f30e4a40e2eed4d7289243def7997979f40ab84574f40f71a7" + "hash": "0x05a777a424d22eeb7124cfcda9749ced221332c72ce2bd71dde4c629eef5144c" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4047,9 +4099,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(4,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4080,15 +4133,15 @@ }, "blocks": [ { - "rlp": "0xf90335f90240a0f702107e03d66d071e4abe8239f4293b417165b64869bbf46206b99cfa717064a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c54d69c3347142f5e89a0627c040b1cae799df927387d8b2287562f366086da2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90335f90240a0f702107e03d66d071e4abe8239f4293b417165b64869bbf46206b99cfa717064a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c54d69c3347142f5e89a0627c040b1cae799df927387d8b2287562f366086da2a0523fba1069412183cdf7618a145ad96c5dcf406cea02900ab33999b31820ea0aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xf702107e03d66d071e4abe8239f4293b417165b64869bbf46206b99cfa717064", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xc54d69c3347142f5e89a0627c040b1cae799df927387d8b2287562f366086da2", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x523fba1069412183cdf7618a145ad96c5dcf406cea02900ab33999b31820ea0a", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -4104,8 +4157,9 @@ "blobGasUsed": "0x080000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf31577f4e429cc18fd6716e2a0d78f8f0ff6c10b9ead22ee5ed00baa89303b87" + "hash": "0x0b8cd373d115e53a160e0fdcfff57cc8feb59c18a4a53cd728d2faf4684e5274" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4167,9 +4221,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(5,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4200,15 +4255,15 @@ }, "blocks": [ { - "rlp": "0xf90359f90240a0a118ab4dc79cfd3002ba1fc91f58e37dbb6ce0fada93f1002f7a440f75206f8fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00d58e806b064c735bd0f8061ffb3449554550a6c386a6759b1970660ecf63986a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a018080078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000480a05b5b2b349f42d7b29873999b615a746b86b25832b74a4e443e34fa9222e3de16a033a55d0dc9ab01945ab29789a6c93b98541724dd932467aed99cc92bc5437c84c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90359f90240a0a118ab4dc79cfd3002ba1fc91f58e37dbb6ce0fada93f1002f7a440f75206f8fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00d58e806b064c735bd0f8061ffb3449554550a6c386a6759b1970660ecf63986a0c3f41631a2bc7d2b233f00f8c5b22a6a37540d6097832ab33f8ab7a1dd1d1997a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a018080078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000480a05b5b2b349f42d7b29873999b615a746b86b25832b74a4e443e34fa9222e3de16a033a55d0dc9ab01945ab29789a6c93b98541724dd932467aed99cc92bc5437c84c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa118ab4dc79cfd3002ba1fc91f58e37dbb6ce0fada93f1002f7a440f75206f8f", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x0d58e806b064c735bd0f8061ffb3449554550a6c386a6759b1970660ecf63986", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xc3f41631a2bc7d2b233f00f8c5b22a6a37540d6097832ab33f8ab7a1dd1d1997", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -4224,8 +4279,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe900787f74aaaeaecaeba10affb6fd922813ee87a871cb3b09c934710b88f12d" + "hash": "0x34ce85cf196031a6a0fc38a77e6aa81469186ee14dbe21209f82683b7f54e767" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4288,9 +4344,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(6,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(6,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4321,15 +4378,15 @@ }, "blocks": [ { - "rlp": "0xf9037af90240a04b957eec4d913b69624a38f71d99095323117b6d79c4f8c9c079f2f2123165a3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa080242300467fba448d8a7e7959ca5b16a09ee59ada43e34876dc94ee97f310b6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b018080078252089400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000501a0a3fde4e69b58ab7846a662946c81c947872ca16ed64bca3e9f2e298a83a7dd0fa036264b4930ad766cf871de20d6b5a66c4660988c83a0bfad8f50847d16cab98dc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9037af90240a04b957eec4d913b69624a38f71d99095323117b6d79c4f8c9c079f2f2123165a3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa080242300467fba448d8a7e7959ca5b16a09ee59ada43e34876dc94ee97f310b6a0e1d23bd09c0f6c7e0fb955150a29878ece98604da780c387de2edbe1e512580da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b018080078252089400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000501a0a3fde4e69b58ab7846a662946c81c947872ca16ed64bca3e9f2e298a83a7dd0fa036264b4930ad766cf871de20d6b5a66c4660988c83a0bfad8f50847d16cab98dc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4b957eec4d913b69624a38f71d99095323117b6d79c4f8c9c079f2f2123165a3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x80242300467fba448d8a7e7959ca5b16a09ee59ada43e34876dc94ee97f310b6", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xe1d23bd09c0f6c7e0fb955150a29878ece98604da780c387de2edbe1e512580d", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -4345,8 +4402,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa248f941810b740ca6536fa8cc2caaf50ce68d6afe2f280f9a2fb84be5095869" + "hash": "0x548f6dafb971dc9a97970378a02bddee88f57bef19bf970f1200c513faaa255d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4410,9 +4468,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4443,15 +4502,15 @@ }, "blocks": [ { - "rlp": "0xf9051ff90243a0bbd5e153e71181f0b743bb5150b60cfe0b7a01c086a1d9f8a2fdf1595f1efff5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa097aeb626e9754dbfb203eef0b83a5dafad30c5ca8a1413a67cdb1f432bc86e02a0395c0fd9acef064db914950ab95a70bf60d078b6576571aafb1ffa04e8ab597ba080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902d4b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9051ff90243a0bbd5e153e71181f0b743bb5150b60cfe0b7a01c086a1d9f8a2fdf1595f1efff5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa097aeb626e9754dbfb203eef0b83a5dafad30c5ca8a1413a67cdb1f432bc86e02a09c43bd2e00a11464e9476f9d3c9ecfedeb1a665a8353183329137c3e49a2ba0da080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902d4b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xbbd5e153e71181f0b743bb5150b60cfe0b7a01c086a1d9f8a2fdf1595f1efff5", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x97aeb626e9754dbfb203eef0b83a5dafad30c5ca8a1413a67cdb1f432bc86e02", - "transactionsTrie": "0x395c0fd9acef064db914950ab95a70bf60d078b6576571aafb1ffa04e8ab597b", + "transactionsTrie": "0x9c43bd2e00a11464e9476f9d3c9ecfedeb1a665a8353183329137c3e49a2ba0d", "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -4467,8 +4526,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x75e41f6c36bcf8946ecaaca60e3ce3bda5f98ae98cd16f543ff94ec9a4fad751" + "hash": "0x546f5146fc347aeb588e7c379c0f0f431cdc68caf6649b5c5ca53b07c94609ef" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4608,9 +4668,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4641,15 +4702,15 @@ }, "blocks": [ { - "rlp": "0xf90494f90242a0a7be1e9520f1e9557d68aebebfd69eb6561e9aae7b6503d2651376036f191844a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0a06a47e76bc47ace58857e7b853093b180c3cf9a3b9936f90ef662038fa35a5006a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9024ab8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90494f90242a0a7be1e9520f1e9557d68aebebfd69eb6561e9aae7b6503d2651376036f191844a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0a0395c0fd9acef064db914950ab95a70bf60d078b6576571aafb1ffa04e8ab597ba09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9024ab8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa7be1e9520f1e9557d68aebebfd69eb6561e9aae7b6503d2651376036f191844", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0", - "transactionsTrie": "0x6a47e76bc47ace58857e7b853093b180c3cf9a3b9936f90ef662038fa35a5006", + "transactionsTrie": "0x395c0fd9acef064db914950ab95a70bf60d078b6576571aafb1ffa04e8ab597b", "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -4665,8 +4726,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xafa9704a49aa3d0223f06a71c7c8a3169d9c4cb8fc4d0b350ac59ad01bfd8d22" + "hash": "0x335ac0c9ac6f297a0cf0f53f252dfb1edab522a7de9b6b5d46408a618c3f3784" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4786,9 +4848,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(3, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4819,15 +4882,15 @@ }, "blocks": [ { - "rlp": "0xf904b5f90242a041ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0a03b5dee62d3cc6ac1fc0dede1db42f79fb8dc82b61988c3975eb93981ce8319b7a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9026bb8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", - "expectException": "insufficient account balance", + "rlp": "0xf904b5f90242a041ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0a04f38fa6b14d9d174ad9970f4f917304beb458dface6f8ce8cc1483dfefd1ea28a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9026bb8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0", - "transactionsTrie": "0x3b5dee62d3cc6ac1fc0dede1db42f79fb8dc82b61988c3975eb93981ce8319b7", + "transactionsTrie": "0x4f38fa6b14d9d174ad9970f4f917304beb458dface6f8ce8cc1483dfefd1ea28", "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -4843,8 +4906,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7c95d215af40d96c4061f0745f353f40ac1fc7bd78cf21474440dc3e3d741c97" + "hash": "0x03e8fc5a61e146c1f4a17a0a8bec68840a92e237fa4d89cf6f5f3500dc92ce30" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4965,9 +5029,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 2, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4998,15 +5063,15 @@ }, "blocks": [ { - "rlp": "0xf904b6f90242a041ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0a0144a3e0168a33099650fc76157eef4022e01bfc2f3caa9c19fbc3cdce20de61ea09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9026cb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", - "expectException": "insufficient account balance", + "rlp": "0xf904b6f90242a041ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0a02cb4dcbebef0589f390955d0f4f27e389640f3a70539b520d9383feb3e4eee58a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9026cb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41ff942ccfbb158dde8306a76ac4d4405783761e582521ac2833368cf2cf5195", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x061c51abb3a0fb77f6f981419291704db621e13bd631dbec5b8c74bdccc9dcb0", - "transactionsTrie": "0x144a3e0168a33099650fc76157eef4022e01bfc2f3caa9c19fbc3cdce20de61e", + "transactionsTrie": "0x2cb4dcbebef0589f390955d0f4f27e389640f3a70539b520d9383feb3e4eee58", "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -5022,8 +5087,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1cd9cdf93a0cd24ec9dc983ccd40882bed54b368166bc182da0b6a1cec72e5e1" + "hash": "0x7786df402a597c4c60266024deb4f1c39768b347190af91ae2e4b4534a85c04b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5144,9 +5210,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5177,15 +5244,15 @@ }, "blocks": [ { - "rlp": "0xf9040af90242a0491e2ada287e5d1c65ead10c85f7aaa87857b77959de6b05a95e5609adf7b7d4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a0dd5a0058d15f5284b33e254743f334cb65c7a6db4055a72b6e7ff6f518e1e296a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901c0b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9040af90242a0491e2ada287e5d1c65ead10c85f7aaa87857b77959de6b05a95e5609adf7b7d4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a06a47e76bc47ace58857e7b853093b180c3cf9a3b9936f90ef662038fa35a5006a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901c0b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x491e2ada287e5d1c65ead10c85f7aaa87857b77959de6b05a95e5609adf7b7d4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x3d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4", - "transactionsTrie": "0xdd5a0058d15f5284b33e254743f334cb65c7a6db4055a72b6e7ff6f518e1e296", + "transactionsTrie": "0x6a47e76bc47ace58857e7b853093b180c3cf9a3b9936f90ef662038fa35a5006", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -5201,8 +5268,9 @@ "blobGasUsed": "0x080000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1d03fe39fb8e7321203ab9fd3d6fe351f5266405b002d32448fd5914dae17dc8" + "hash": "0x053b928af6dfd16e500b1bc0fe8216e852c8f175d585a7e8b9ecd6502e0d335f" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5302,9 +5370,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(3, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5335,15 +5404,15 @@ }, "blocks": [ { - "rlp": "0xf9042bf90242a0710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a0a8190535e1111958188bfa09eb16ca84935395a1989047acde654d0e91e30726a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901e1b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9042bf90242a0710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a03b5dee62d3cc6ac1fc0dede1db42f79fb8dc82b61988c3975eb93981ce8319b7a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901e1b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x3d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4", - "transactionsTrie": "0xa8190535e1111958188bfa09eb16ca84935395a1989047acde654d0e91e30726", + "transactionsTrie": "0x3b5dee62d3cc6ac1fc0dede1db42f79fb8dc82b61988c3975eb93981ce8319b7", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -5359,8 +5428,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3c6432461b2324e29e7679544a7f1a928ca71c94d3fe8e8eb9ad81875719f403" + "hash": "0xebe9df5e3ba2599fc3b307bfb24a6f737feeb75818ee61815df641d17ff19e0e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5461,9 +5531,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(4, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5494,15 +5565,15 @@ }, "blocks": [ { - "rlp": "0xf9044cf90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a0ed872473d1fa8d3e3d518fa9faccb5b513ca00ab4668833e535b2b5074c7e02da010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90202b8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9044cf90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a06f58045d59b6d53a5eb2e22d51bbf120a308bbe17e42c88dd27f13990fee47dfa010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90202b8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x3d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4", - "transactionsTrie": "0xed872473d1fa8d3e3d518fa9faccb5b513ca00ab4668833e535b2b5074c7e02d", + "transactionsTrie": "0x6f58045d59b6d53a5eb2e22d51bbf120a308bbe17e42c88dd27f13990fee47df", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -5518,8 +5589,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x747e10bb9f459d68a4135cec1f9c5ca4dab8e8f974d519b60bf215871d627389" + "hash": "0x2ddb25e2f2bf5b51a6dce14e8e715dfe08c7d78381d40849be71af3259d306ae" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5621,9 +5693,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 2, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 2, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5654,15 +5727,15 @@ }, "blocks": [ { - "rlp": "0xf9042cf90242a0710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a0f8394831df420eef1722950e31ff1f2aa90b97ec0eb98526069781f2a8ba7029a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901e2b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9042cf90242a0710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a0144a3e0168a33099650fc76157eef4022e01bfc2f3caa9c19fbc3cdce20de61ea010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901e2b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x710ee35335e6d857c82d45dbeacbccdd51047728d7350923522d1cac0493901c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x3d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4", - "transactionsTrie": "0xf8394831df420eef1722950e31ff1f2aa90b97ec0eb98526069781f2a8ba7029", + "transactionsTrie": "0x144a3e0168a33099650fc76157eef4022e01bfc2f3caa9c19fbc3cdce20de61e", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -5678,8 +5751,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x57dae5afb124528c66c0b71fe56f593db982cc837da21bfcdd5fe7c173e27aee" + "hash": "0x1e4bbec297ea6d5c8a44cc250202271b387f4f47b413b2d8caed2302b7a1b97a" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5780,9 +5854,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(3, 2, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5813,15 +5888,15 @@ }, "blocks": [ { - "rlp": "0xf9044df90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a02c886b86a20b8dad15bc0fafdc356676ddfa4db118e9414cea433d6797a3b483a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90203b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf9044df90242a0ea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4a0377f0d34979af41a9b88b309eb5fd90d818a2f6bf3e8f71c1f9aa85bad2a8c92a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90203b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xea013146c61b98cdc5a04104e3366bff314b7921ee8d6b5dbd3aa4bc5b7b8fc4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x3d8139d0066d173ca7e797cffc241a0b1696b68c2cf532b0f2cef524033df7f4", - "transactionsTrie": "0x2c886b86a20b8dad15bc0fafdc356676ddfa4db118e9414cea433d6797a3b483", + "transactionsTrie": "0x377f0d34979af41a9b88b309eb5fd90d818a2f6bf3e8f71c1f9aa85bad2a8c92", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -5837,8 +5912,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb4c99eb503cd5e5b15c51d08f9a66c0a7527ea2bdc607c3318822205762b1713" + "hash": "0xc021e5156d3f24ee03f96e9be54d786d9e48acecb469389d6e1420c519f307e4" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5940,9 +6016,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(2, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(2, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5973,15 +6050,15 @@ }, "blocks": [ { - "rlp": "0xf90380f90242a026df0c4b1db060258d652d48eb7f99d14377451c7b8cf1ca965255e24ccc13ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa0ea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855ca0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90136b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf90380f90242a026df0c4b1db060258d652d48eb7f99d14377451c7b8cf1ca965255e24ccc13ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa0dd5a0058d15f5284b33e254743f334cb65c7a6db4055a72b6e7ff6f518e1e296a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90136b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x26df0c4b1db060258d652d48eb7f99d14377451c7b8cf1ca965255e24ccc13ad", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x02429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebf", - "transactionsTrie": "0xea6c96dedfc374311b6d9bf5a19305c5f7d80aa4c4bcf129134f96a7579e855c", + "transactionsTrie": "0xdd5a0058d15f5284b33e254743f334cb65c7a6db4055a72b6e7ff6f518e1e296", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -5997,8 +6074,9 @@ "blobGasUsed": "0x060000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0ef4f1fd0a5da712df7e33d05830972873c21fc7fa411fab51a23f9fd3a8dd7c" + "hash": "0xabf496b87cd8b5a1e57521c340e465a77381b4e8b86a54da2d6616f79c3fbe4e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6078,9 +6156,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(3, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6111,15 +6190,15 @@ }, "blocks": [ { - "rlp": "0xf903a1f90242a0ba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa03e6efb03c87131b8c8563c972bb9916c3c3a7c84383adb351b8bbfb7a07f1c44a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90157b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903a1f90242a0ba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa0a8190535e1111958188bfa09eb16ca84935395a1989047acde654d0e91e30726a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183080000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90157b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0xba767c2c2e90cde86d6ae67280861153509b1874b23540dc9095dd07f8c8f23d", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x02429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebf", - "transactionsTrie": "0x3e6efb03c87131b8c8563c972bb9916c3c3a7c84383adb351b8bbfb7a07f1c44", + "transactionsTrie": "0xa8190535e1111958188bfa09eb16ca84935395a1989047acde654d0e91e30726", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -6135,8 +6214,9 @@ "blobGasUsed": "0x080000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa5384be862ef5231fea9c11f6766a96a67fbc6ad7fc8ebd3c9ea910398ab6216" + "hash": "0x8d7be19565fa9c78eee1dfb24e8bb0cb953adf1e1de1fe8e3fbbec1655be2af5" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6217,9 +6297,10 @@ }, "sealEngine": "NoProof" }, - "040-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(4, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6250,15 +6331,15 @@ }, "blocks": [ { - "rlp": "0xf903c2f90242a041c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa0523fba1069412183cdf7618a145ad96c5dcf406cea02900ab33999b31820ea0aa0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90178b8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903c2f90242a041c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa0ed872473d1fa8d3e3d518fa9faccb5b513ca00ab4668833e535b2b5074c7e02da0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90178b8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x02429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebf", - "transactionsTrie": "0x523fba1069412183cdf7618a145ad96c5dcf406cea02900ab33999b31820ea0a", + "transactionsTrie": "0xed872473d1fa8d3e3d518fa9faccb5b513ca00ab4668833e535b2b5074c7e02d", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -6274,8 +6355,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa01704061fff866138689862e075cced74729f3611e8566b4af81e0469b620c0" + "hash": "0x735fb61672053ecf37173568f25f82e8eaadff8f3d40396acc852d65cce2226f" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6357,9 +6439,10 @@ }, "sealEngine": "NoProof" }, - "041-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(5, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(5, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6390,15 +6473,15 @@ }, "blocks": [ { - "rlp": "0xf903e5f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa0c3f41631a2bc7d2b233f00f8c5b22a6a37540d6097832ab33f8ab7a1dd1d1997a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019bb9010e03f9010a018080078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000480a05b5b2b349f42d7b29873999b615a746b86b25832b74a4e443e34fa9222e3de16a033a55d0dc9ab01945ab29789a6c93b98541724dd932467aed99cc92bc5437c84b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903e5f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebfa0add4c387a62309accaaf28cee5bb91f5a37f0b56e9353f6e8a5e3450141e01dea0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019bb9010e03f9010a018080078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000480a05b5b2b349f42d7b29873999b615a746b86b25832b74a4e443e34fa9222e3de16a033a55d0dc9ab01945ab29789a6c93b98541724dd932467aed99cc92bc5437c84b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x2e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x02429286eb574e0b2a52afa14c942d255ad1d25578aeb306e8b2df5293681ebf", - "transactionsTrie": "0xc3f41631a2bc7d2b233f00f8c5b22a6a37540d6097832ab33f8ab7a1dd1d1997", + "transactionsTrie": "0xadd4c387a62309accaaf28cee5bb91f5a37f0b56e9353f6e8a5e3450141e01de", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -6414,8 +6497,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0fb4973d170670ceaa6e9971ec2b69823746a834da66508d904ee900c952d0b6" + "hash": "0x8eb2aee7affaf0ae20e181743e972401a2afce581dab0545c87dc0832751757b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6498,9 +6582,10 @@ }, "sealEngine": "NoProof" }, - "042-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(3, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(3, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6531,15 +6616,15 @@ }, "blocks": [ { - "rlp": "0xf903c3f90242a041c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1a03e6efb03c87131b8c8563c972bb9916c3c3a7c84383adb351b8bbfb7a07f1c44a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90179b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903c3f90242a041c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1a02c886b86a20b8dad15bc0fafdc356676ddfa4db118e9414cea433d6797a3b483a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90179b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41c831748de94587dd640f864c4b0c7dd73f4824cbe28ea32e7c0edfe3e605b2", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1", - "transactionsTrie": "0x3e6efb03c87131b8c8563c972bb9916c3c3a7c84383adb351b8bbfb7a07f1c44", + "transactionsTrie": "0x2c886b86a20b8dad15bc0fafdc356676ddfa4db118e9414cea433d6797a3b483", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -6555,8 +6640,9 @@ "blobGasUsed": "0x0a0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbf0c6df98618cf90b279de8b6aa957eec8773add12f693b3982d2a6b60cfaef4" + "hash": "0x0e64a409aecd3017e3ef1d8fb3ddd253e083c371bf68211d654ae75dc0455d50" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6638,9 +6724,10 @@ }, "sealEngine": "NoProof" }, - "043-fork=Cancun--exact_balance_minus_1-blobs_per_tx=(4, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_insufficient_balance_blob_tx_combinations[fork_Cancun-blockchain_test--exact_balance_minus_1-blobs_per_tx_(4, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6671,15 +6758,15 @@ }, "blocks": [ { - "rlp": "0xf903e4f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1a0523fba1069412183cdf7618a145ad96c5dcf406cea02900ab33999b31820ea0aa0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019ab8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", - "expectException": "insufficient account balance", + "rlp": "0xf903e4f90242a02e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1a05b12d3d5b0af73a0a50b1bf1e53310093f6467cbb11ad8e106e01cba4726c60fa0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019ab8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x2e4f1af286113c250abda7895eb807583cb906b59aff8e59e35d19c23f624de6", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x506e57b8046ce66151e13fd567fbc87d03cffddbe43b0de68959827e99ae3be1", - "transactionsTrie": "0x523fba1069412183cdf7618a145ad96c5dcf406cea02900ab33999b31820ea0a", + "transactionsTrie": "0x5b12d3d5b0af73a0a50b1bf1e53310093f6467cbb11ad8e106e01cba4726c60f", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -6695,8 +6782,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xaa6b1b72f2b8ccbd103aa318be057c4370772783df4d7448f3a361e9b2f0a0a9" + "hash": "0xe410b8ab3ca7be1e86be29bfa1a4aae9ed2a0b434db1f4e04b5bf714c9741625" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning_multiple_txs.json similarity index 51% rename from tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning.json rename to tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning_multiple_txs.json index 95d315ca055..72a11fd9653 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning_multiple_txs.json @@ -1,478 +1,8 @@ { - "000-fork=Cancun--single_tx_single_blob": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--single_blob]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", - "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" - }, - "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x140000", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444" - }, - "blocks": [ - { - "rlp": "0xf902d1f90240a07832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e28ed2bcf4819adfa5b691548f1a3921587ff9c5dbe995d533acdebe5059ae84a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0000000000000000000000000000000000000000000000000000000000000000180a054d676b559ce3000fa7aa0fe1dbd9160185b458af14ee83a299c5cb58207f81ea02bab9b72e3f10f40297c80367c39c76b3454036728309967bc4126d41447374cc0c0", - "expectException": "invalid blob versioned hash", - "rlp_decoded": { - "blockHeader": { - "parentHash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe28ed2bcf4819adfa5b691548f1a3921587ff9c5dbe995d533acdebe5059ae84", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x020000", - "excessBlobGas": "0x0e0000", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd5f6715b4c9cea0679245e360b7ab5e747583b60dd76ad240c82cd8f9944cfe2" - }, - "transactions": [ - { - "type": "0x03", - "chainId": "0x01", - "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", - "data": "0x", - "accessList": [], - "maxFeePerBlobGas": "0x01", - "blobVersionedHashes": [ - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "v": "0x00", - "r": "0x54d676b559ce3000fa7aa0fe1dbd9160185b458af14ee83a299c5cb58207f81e", - "s": "0x2bab9b72e3f10f40297c80367c39c76b3454036728309967bc4126d41447374c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - } - } - ], - "lastblockhash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444", - "pre": { - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x043e39", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x043e39", - "code": "0x", - "storage": {} - } - }, - "sealEngine": "NoProof" - }, - "001-fork=Cancun--single_tx_multiple_blobs": { - "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", - "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" - }, - "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0efaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56dea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xefaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56de", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x140000", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be" - }, - "blocks": [ - { - "rlp": "0xf902f3f90240a07aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400bea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c0b8918c82992c6db0b8a22aabdc8627d4bc27bb784774a0e08f97a1fc5b2e8aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000101a0977f1a8278d0362a82fedbab8d21b1ababc5f892a11e2138565cc27fc621ee0aa03a879a894a96d346128af86b1aecf573454d60426c1225310a9ce8fddec23206c0c0", - "expectException": "invalid blob versioned hash", - "rlp_decoded": { - "blockHeader": { - "parentHash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc0b8918c82992c6db0b8a22aabdc8627d4bc27bb784774a0e08f97a1fc5b2e8a", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x040000", - "excessBlobGas": "0x0e0000", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0c809f39262684b9e61798d5e1cd060cc47f0e8c7cecb44df89291364de3d877" - }, - "transactions": [ - { - "type": "0x03", - "chainId": "0x01", - "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", - "data": "0x", - "accessList": [], - "maxFeePerBlobGas": "0x01", - "blobVersionedHashes": [ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "v": "0x01", - "r": "0x977f1a8278d0362a82fedbab8d21b1ababc5f892a11e2138565cc27fc621ee0a", - "s": "0x3a879a894a96d346128af86b1aecf573454d60426c1225310a9ce8fddec23206", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - } - } - ], - "lastblockhash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", - "pre": { - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x063e39", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x063e39", - "code": "0x", - "storage": {} - } - }, - "sealEngine": "NoProof" - }, - "002-fork=Cancun--single_tx_multiple_blobs_single_bad_hash_1": { - "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", - "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" - }, - "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0efaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56dea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xefaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56de", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x140000", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be" - }, - "blocks": [ - { - "rlp": "0xf902f3f90240a07aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400bea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c0b8918c82992c6db0b8a22aabdc8627d4bc27bb784774a0e08f97a1fc5b2e8aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000280a0cc726a3a180188c950b5cfc5088aa2f970ffeb86eca40b51dea070ceccd8c136a015bc845cebc4095a1628cc7e0853a8cf6ab9591e926ce2235dccd2525fa8d0f2c0c0", - "expectException": "invalid blob versioned hash", - "rlp_decoded": { - "blockHeader": { - "parentHash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc0b8918c82992c6db0b8a22aabdc8627d4bc27bb784774a0e08f97a1fc5b2e8a", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x040000", - "excessBlobGas": "0x0e0000", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0c809f39262684b9e61798d5e1cd060cc47f0e8c7cecb44df89291364de3d877" - }, - "transactions": [ - { - "type": "0x03", - "chainId": "0x01", - "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", - "data": "0x", - "accessList": [], - "maxFeePerBlobGas": "0x01", - "blobVersionedHashes": [ - "0x0100000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000002" - ], - "v": "0x00", - "r": "0xcc726a3a180188c950b5cfc5088aa2f970ffeb86eca40b51dea070ceccd8c136", - "s": "0x15bc845cebc4095a1628cc7e0853a8cf6ab9591e926ce2235dccd2525fa8d0f2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - } - } - ], - "lastblockhash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", - "pre": { - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x063e39", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x063e39", - "code": "0x", - "storage": {} - } - }, - "sealEngine": "NoProof" - }, - "003-fork=Cancun--single_tx_multiple_blobs_single_bad_hash_2": { - "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", - "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", - "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" - }, - "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0efaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56dea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", - "genesisBlockHeader": { - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xefaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56de", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x00", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x00", - "extraData": "0x00", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x140000", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be" - }, - "blocks": [ - { - "rlp": "0xf902f3f90240a07aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400bea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c0b8918c82992c6db0b8a22aabdc8627d4bc27bb784774a0e08f97a1fc5b2e8aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00000000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0629eabda9d4828669a0b08bb7c43c8b29b4aaaacf740b92e1806f17a9ed20313a01ce4f18d384b44aaf29b3e2776c322ae71e19e3d58e1dc8556373b2853a7f633c0c0", - "expectException": "invalid blob versioned hash", - "rlp_decoded": { - "blockHeader": { - "parentHash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc0b8918c82992c6db0b8a22aabdc8627d4bc27bb784774a0e08f97a1fc5b2e8a", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x01", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x040000", - "excessBlobGas": "0x0e0000", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0c809f39262684b9e61798d5e1cd060cc47f0e8c7cecb44df89291364de3d877" - }, - "transactions": [ - { - "type": "0x03", - "chainId": "0x01", - "nonce": "0x00", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x5208", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x01", - "data": "0x", - "accessList": [], - "maxFeePerBlobGas": "0x01", - "blobVersionedHashes": [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0100000000000000000000000000000000000000000000000000000000000002" - ], - "v": "0x00", - "r": "0x629eabda9d4828669a0b08bb7c43c8b29b4aaaacf740b92e1806f17a9ed20313", - "s": "0x1ce4f18d384b44aaf29b3e2776c322ae71e19e3d58e1dc8556373b2853a7f633", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - } - } - ], - "lastblockhash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", - "pre": { - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x063e39", - "code": "0x", - "storage": {} - } - }, - "postState": { - "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { - "nonce": "0x01", - "balance": "0x00", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": {} - }, - "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x00", - "balance": "0x063e39", - "code": "0x", - "storage": {} - } - }, - "sealEngine": "NoProof" - }, - "004-fork=Cancun--multiple_txs_single_blob": { - "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -503,15 +33,15 @@ }, "blocks": [ { - "rlp": "0xf9035ef90242a025fbef7ac7a23074b8d4d1c57b0b24aa6cf149fdf725342252a60a14fe558565a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03cc964d95a7581579147c29e0838092ef15297cfecb743f03caa05a7985d28c4a09f6951c1601fe05888475895d658a77e94664b5308eb0262ccfcb05f073bbb27a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90114b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000101a0e3706044f70bc05c223affc4f7d838905a072dedfa44e895feaa35fc1b2a8455a00b6a2702b0867811c0caf624bee67e0a0c719232c37859f27dd3bd56f6297a67b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0000000000000000000000000000000000000000000000000000000000000000201a06ab8e4a2d375c531cdfc527a2a5a84590c08757d921b101aa70161e369951fd4a0154500632bf683a6cb721c8a47e9ee6918ffd464ce91a75b8ff71ea25212aed5c0c0", - "expectException": "invalid blob versioned hash", + "rlp": "0xf9035ef90242a025fbef7ac7a23074b8d4d1c57b0b24aa6cf149fdf725342252a60a14fe558565a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03cc964d95a7581579147c29e0838092ef15297cfecb743f03caa05a7985d28c4a03f30ac8343597421414fede543308d0ac934ef53c712b327b28bd84a36ce144ba0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90114b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000101a0e3706044f70bc05c223affc4f7d838905a072dedfa44e895feaa35fc1b2a8455a00b6a2702b0867811c0caf624bee67e0a0c719232c37859f27dd3bd56f6297a67b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0000000000000000000000000000000000000000000000000000000000000000201a06ab8e4a2d375c531cdfc527a2a5a84590c08757d921b101aa70161e369951fd4a0154500632bf683a6cb721c8a47e9ee6918ffd464ce91a75b8ff71ea25212aed5c0c0", + "expectException": "TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH", "rlp_decoded": { "blockHeader": { "parentHash": "0x25fbef7ac7a23074b8d4d1c57b0b24aa6cf149fdf725342252a60a14fe558565", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x3cc964d95a7581579147c29e0838092ef15297cfecb743f03caa05a7985d28c4", - "transactionsTrie": "0x9f6951c1601fe05888475895d658a77e94664b5308eb0262ccfcb05f073bbb27", + "transactionsTrie": "0x3f30ac8343597421414fede543308d0ac934ef53c712b327b28bd84a36ce144b", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -527,8 +57,9 @@ "blobGasUsed": "0x040000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe4914ece17b56055e8c9fc3a5f3b4c8c67113dd4d238f60d58dfbadd6d9c9c7c" + "hash": "0x03d2cdb37a04c452614fbb820e055be36944ccb5f60c78fd7e00cee45ce80914" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -607,9 +138,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun--multiple_txs_multiple_blobs": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -640,15 +172,15 @@ }, "blocks": [ { - "rlp": "0xf90380f90242a0d40b69628f61ffb9b6bf30b87fc776ef6464b83812b60f6fd362dc3df5ea5f31a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a98d333282dad9207b578e0164c0e84a136bb2bd1427a5669255a38bc778c67aa09f6951c1601fe05888475895d658a77e94664b5308eb0262ccfcb05f073bbb27a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90136b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000101a0e3706044f70bc05c223affc4f7d838905a072dedfa44e895feaa35fc1b2a8455a00b6a2702b0867811c0caf624bee67e0a0c719232c37859f27dd3bd56f6297a67b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000280a064a81f877afe2a9f173109c60345367b472eec99ee44a12b8b4f06e71f83f7a2a028409e9af4e70f3ce5cabc28cd0dd47e2d1dfbef31bdfa49045514d736f193aec0c0", - "expectException": "invalid blob versioned hash", + "rlp": "0xf90380f90242a0d40b69628f61ffb9b6bf30b87fc776ef6464b83812b60f6fd362dc3df5ea5f31a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a98d333282dad9207b578e0164c0e84a136bb2bd1427a5669255a38bc778c67aa097d726e6f9c6c7326afd8e71a29555b6551977d0b65c03ff31898eadc331fa1fa0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90136b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000101a0e3706044f70bc05c223affc4f7d838905a072dedfa44e895feaa35fc1b2a8455a00b6a2702b0867811c0caf624bee67e0a0c719232c37859f27dd3bd56f6297a67b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000280a064a81f877afe2a9f173109c60345367b472eec99ee44a12b8b4f06e71f83f7a2a028409e9af4e70f3ce5cabc28cd0dd47e2d1dfbef31bdfa49045514d736f193aec0c0", + "expectException": "TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH", "rlp_decoded": { "blockHeader": { "parentHash": "0xd40b69628f61ffb9b6bf30b87fc776ef6464b83812b60f6fd362dc3df5ea5f31", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xa98d333282dad9207b578e0164c0e84a136bb2bd1427a5669255a38bc778c67a", - "transactionsTrie": "0x9f6951c1601fe05888475895d658a77e94664b5308eb0262ccfcb05f073bbb27", + "transactionsTrie": "0x97d726e6f9c6c7326afd8e71a29555b6551977d0b65c03ff31898eadc331fa1f", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -664,8 +196,9 @@ "blobGasUsed": "0x060000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4dea41029579e8fd3bc62bdaac395a6045a91dad3a68909947aece60b190907b" + "hash": "0xe2016bb22a5ad58a50ac7e8a1089a84dffdc15b73b360f72530aaa04b941e1e9" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -745,9 +278,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun--multiple_txs_multiple_blobs_single_bad_hash_1": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -778,15 +312,15 @@ }, "blocks": [ { - "rlp": "0xf90380f90242a0d40b69628f61ffb9b6bf30b87fc776ef6464b83812b60f6fd362dc3df5ea5f31a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a98d333282dad9207b578e0164c0e84a136bb2bd1427a5669255a38bc778c67aa09f6951c1601fe05888475895d658a77e94664b5308eb0262ccfcb05f073bbb27a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90136b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000101a0e3706044f70bc05c223affc4f7d838905a072dedfa44e895feaa35fc1b2a8455a00b6a2702b0867811c0caf624bee67e0a0c719232c37859f27dd3bd56f6297a67b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00000000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a047f7ec33c220cfcabca802abe228dadc3e11e4d89d6ff1ba472e628a50ed3590a065ed1eb96a058c597f698383c1cfbcb2a3faf90577f640fc1b608c75940602ddc0c0", - "expectException": "invalid blob versioned hash", + "rlp": "0xf90380f90242a0d40b69628f61ffb9b6bf30b87fc776ef6464b83812b60f6fd362dc3df5ea5f31a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a98d333282dad9207b578e0164c0e84a136bb2bd1427a5669255a38bc778c67aa014d121b0bd360bfe329e9ff7fbda22b6c877aebcb91ee4c3977d44a2c6f2ea76a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90136b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000101a0e3706044f70bc05c223affc4f7d838905a072dedfa44e895feaa35fc1b2a8455a00b6a2702b0867811c0caf624bee67e0a0c719232c37859f27dd3bd56f6297a67b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00000000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a047f7ec33c220cfcabca802abe228dadc3e11e4d89d6ff1ba472e628a50ed3590a065ed1eb96a058c597f698383c1cfbcb2a3faf90577f640fc1b608c75940602ddc0c0", + "expectException": "TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH", "rlp_decoded": { "blockHeader": { "parentHash": "0xd40b69628f61ffb9b6bf30b87fc776ef6464b83812b60f6fd362dc3df5ea5f31", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xa98d333282dad9207b578e0164c0e84a136bb2bd1427a5669255a38bc778c67a", - "transactionsTrie": "0x9f6951c1601fe05888475895d658a77e94664b5308eb0262ccfcb05f073bbb27", + "transactionsTrie": "0x14d121b0bd360bfe329e9ff7fbda22b6c877aebcb91ee4c3977d44a2c6f2ea76", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -802,8 +336,9 @@ "blobGasUsed": "0x060000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4dea41029579e8fd3bc62bdaac395a6045a91dad3a68909947aece60b190907b" + "hash": "0x002d869788707b19ff7e72b2b0d586b4749b50afdc2ce15e6b7f9316378498a3" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -883,9 +418,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun--multiple_txs_multiple_blobs_single_bad_hash_2": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_hash_versioning_multiple_txs[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -916,15 +452,15 @@ }, "blocks": [ { - "rlp": "0xf903e8f90242a07947be75a3d6599ffe386405f119685e2625a10c27cbdd913a8f3a8ecc34d643a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380aa06cf1a00219adf3c2d8cceb030dda791033e5920bab56bffd447dff1ce177638ca010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019eb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000101a0e3706044f70bc05c223affc4f7d838905a072dedfa44e895feaa35fc1b2a8455a00b6a2702b0867811c0caf624bee67e0a0c719232c37859f27dd3bd56f6297a67b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000280a02ecda544700f93d637036795d50c0528dbef432f4ac1d3e661aaa657cbfb9079a04932b24345e17152485902c78ccd5feadb2e90ac0ac992ab6fc334c0ce9a01b0b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0000000000000000000000000000000000000000000000000000000000000000380a04a102a429682252f7fa7ed26237bc31520c19535b0fee2fa0261807903986976a0733f71dc90c6a698372d4bc61f404dee06d83a7422dca3b3735753d03faa4dc3c0c0", - "expectException": "invalid blob versioned hash", + "rlp": "0xf903e8f90242a07947be75a3d6599ffe386405f119685e2625a10c27cbdd913a8f3a8ecc34d643a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380aa0c000ba5d2366687627d90696518c6d325f8ab49f506c9e4305d8e5bc2718847ca010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183060000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9019eb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000101a0e3706044f70bc05c223affc4f7d838905a072dedfa44e895feaa35fc1b2a8455a00b6a2702b0867811c0caf624bee67e0a0c719232c37859f27dd3bd56f6297a67b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000280a02ecda544700f93d637036795d50c0528dbef432f4ac1d3e661aaa657cbfb9079a04932b24345e17152485902c78ccd5feadb2e90ac0ac992ab6fc334c0ce9a01b0b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0000000000000000000000000000000000000000000000000000000000000000380a04a102a429682252f7fa7ed26237bc31520c19535b0fee2fa0261807903986976a0733f71dc90c6a698372d4bc61f404dee06d83a7422dca3b3735753d03faa4dc3c0c0", + "expectException": "TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH", "rlp_decoded": { "blockHeader": { "parentHash": "0x7947be75a3d6599ffe386405f119685e2625a10c27cbdd913a8f3a8ecc34d643", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x28debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380a", - "transactionsTrie": "0x6cf1a00219adf3c2d8cceb030dda791033e5920bab56bffd447dff1ce177638c", + "transactionsTrie": "0xc000ba5d2366687627d90696518c6d325f8ab49f506c9e4305d8e5bc2718847c", "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -940,8 +476,9 @@ "blobGasUsed": "0x060000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x686dd251ffd620f4991fe04e19cf1688ea448f8fbd5e9772e4ff1df4aef335e2" + "hash": "0x36016a18b95140218fc04c6345539f736b487f593f0b70d5fd508a671a9bcf38" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning_single_tx.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning_single_tx.json new file mode 100644 index 00000000000..ed91603f9aa --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_hash_versioning_single_tx.json @@ -0,0 +1,481 @@ +{ + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--single_blob]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444" + }, + "blocks": [ + { + "rlp": "0xf902d3f90242a07832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01ef275590bdeefdcba8745593a49d841ad0e320d840e0c46de6541e2177b77ada0d8c5b8e523cc1670e11868eacfa5d13f1fe7bd192520c6b02a605352eae1a2d9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0000000000000000000000000000000000000000000000000000000000000000180a054d676b559ce3000fa7aa0fe1dbd9160185b458af14ee83a299c5cb58207f81ea02bab9b72e3f10f40297c80367c39c76b3454036728309967bc4126d41447374cc0c0", + "expectException": "TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1ef275590bdeefdcba8745593a49d841ad0e320d840e0c46de6541e2177b77ad", + "transactionsTrie": "0xd8c5b8e523cc1670e11868eacfa5d13f1fe7bd192520c6b02a605352eae1a2d9", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x68bdd38e1d499e1a769b819099c1917822375600d13adc4fe2179307ad47db13" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "v": "0x00", + "r": "0x54d676b559ce3000fa7aa0fe1dbd9160185b458af14ee83a299c5cb58207f81e", + "s": "0x2bab9b72e3f10f40297c80367c39c76b3454036728309967bc4126d41447374c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e39", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0efaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56dea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xefaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56de", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be" + }, + "blocks": [ + { + "rlp": "0xf902f5f90242a07aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400bea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ddf1b8382412757f79e2b0d8fade653a5561a8c4abac3fa1cafc58c49ee14f7ba048affeb502d3385756e70a77e95b71384ab31e19e7110194aadc8cf6be48f908a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000101a0977f1a8278d0362a82fedbab8d21b1ababc5f892a11e2138565cc27fc621ee0aa03a879a894a96d346128af86b1aecf573454d60426c1225310a9ce8fddec23206c0c0", + "expectException": "TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xddf1b8382412757f79e2b0d8fade653a5561a8c4abac3fa1cafc58c49ee14f7b", + "transactionsTrie": "0x48affeb502d3385756e70a77e95b71384ab31e19e7110194aadc8cf6be48f908", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x040000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x81ac89da0197b3ab17e9be4ced2700ba81dd9413d2d4170991c2cb0d4dabdef6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "v": "0x01", + "r": "0x977f1a8278d0362a82fedbab8d21b1ababc5f892a11e2138565cc27fc621ee0a", + "s": "0x3a879a894a96d346128af86b1aecf573454d60426c1225310a9ce8fddec23206", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x063e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x063e39", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0efaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56dea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xefaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56de", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be" + }, + "blocks": [ + { + "rlp": "0xf902f5f90242a07aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400bea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ddf1b8382412757f79e2b0d8fade653a5561a8c4abac3fa1cafc58c49ee14f7ba0e6b9dfb65dd64da87caf325f5c5167b365f1024e366853cdc7d3f76ebe6b6644a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000280a0cc726a3a180188c950b5cfc5088aa2f970ffeb86eca40b51dea070ceccd8c136a015bc845cebc4095a1628cc7e0853a8cf6ab9591e926ce2235dccd2525fa8d0f2c0c0", + "expectException": "TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xddf1b8382412757f79e2b0d8fade653a5561a8c4abac3fa1cafc58c49ee14f7b", + "transactionsTrie": "0xe6b9dfb65dd64da87caf325f5c5167b365f1024e366853cdc7d3f76ebe6b6644", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x040000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb614e213b8449743bdcfe2ff65c76883c54cc33c7d021120987bba44a42b1356" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000002" + ], + "v": "0x00", + "r": "0xcc726a3a180188c950b5cfc5088aa2f970ffeb86eca40b51dea070ceccd8c136", + "s": "0x15bc845cebc4095a1628cc7e0853a8cf6ab9591e926ce2235dccd2525fa8d0f2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x063e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x063e39", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_hash_versioning_single_tx[fork_Cancun-blockchain_test--multiple_blobs_single_bad_hash_2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0efaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56dea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xefaecd2196ee9aba742027776cef97b4aded534d6c56ff14fd32b03afffe56de", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be" + }, + "blocks": [ + { + "rlp": "0xf902f5f90242a07aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400bea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ddf1b8382412757f79e2b0d8fade653a5561a8c4abac3fa1cafc58c49ee14f7ba092e141970099d68aaa5c992d5669ae9ee3c169d41c8b35ac9a099a0c4ee10e70a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183040000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00000000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0629eabda9d4828669a0b08bb7c43c8b29b4aaaacf740b92e1806f17a9ed20313a01ce4f18d384b44aaf29b3e2776c322ae71e19e3d58e1dc8556373b2853a7f633c0c0", + "expectException": "TransactionException.TYPE_3_TX_INVALID_BLOB_VERSIONED_HASH", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xddf1b8382412757f79e2b0d8fade653a5561a8c4abac3fa1cafc58c49ee14f7b", + "transactionsTrie": "0x92e141970099d68aaa5c992d5669ae9ee3c169d41c8b35ac9a099a0c4ee10e70", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x040000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3ed905513c12b4acc8514891b2981a257875b2b187fa6692e0bec8b151554928" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0100000000000000000000000000000000000000000000000000000000000002" + ], + "v": "0x00", + "r": "0x629eabda9d4828669a0b08bb7c43c8b29b4aaaacf740b92e1806f17a9ed20313", + "s": "0x1ce4f18d384b44aaf29b3e2776c322ae71e19e3d58e1dc8556373b2853a7f633", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x7aa6303b86a9e819c94c97288f6de093125a4b6fb31201ed47215ec946b400be", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x063e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x063e39", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_tx_contract_creation.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_tx_contract_creation.json new file mode 100644 index 00000000000..12db656040e --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_blob_tx_contract_creation.json @@ -0,0 +1,121 @@ +{ + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_blob_tx_contract_creation[fork_Cancun-blockchain_test-]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0300a057c652cb1e1c221ce8ad52e18d155520093291cefda9b6a4a3a7c2c5e13a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x300a057c652cb1e1c221ce8ad52e18d155520093291cefda9b6a4a3a7c2c5e13", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x93a8f642e7619d3fbfe682dfdeaa06b70582703e21b8d94f85f13e9a8b9578db" + }, + "blocks": [ + { + "rlp": "0xf902c0f90242a093a8f642e7619d3fbfe682dfdeaa06b70582703e21b8d94f85f13e9a8b9578dba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cc7b88d58927ebfd44f66b63ec5a29eb8661cedeaf8a9d563f6f7408b3c42fcea0d7d1670440b906eca746fb1b344ad2d3843bfaaf82324d0b4e7cdab67c3e753ea0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f877b87503f872018080078307a120800180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0990fd9e8068282f2f657fda1fc17ba168b6ccb064a796796a04647268efdc0baa05497398a0d1bfe95930e450561b2a88ece16b0212a4784e92b0a7cd3921852c4c0c0", + "expectException": "TransactionException.TYPE_3_TX_CONTRACT_CREATION", + "rlp_decoded": { + "blockHeader": { + "parentHash": "0x93a8f642e7619d3fbfe682dfdeaa06b70582703e21b8d94f85f13e9a8b9578db", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcc7b88d58927ebfd44f66b63ec5a29eb8661cedeaf8a9d563f6f7408b3c42fce", + "transactionsTrie": "0xd7d1670440b906eca746fb1b344ad2d3843bfaaf82324d0b4e7cdab67c3e753e", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9b5af5a719ed59157d3f4436e9033d68b36029b1bbdb43a25ddf76fe1cd8b627" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8633745d9ccae895b1cd9b35473bf2c2f19230b32ebecf93fcf6e98e08868a7f", + "s": "0x2df5e81e127ad763e99e70e134ea214d74d47e80787950b1959551c7b61f68ea", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + } + ], + "lastblockhash": "0x93a8f642e7619d3fbfe682dfdeaa06b70582703e21b8d94f85f13e9a8b9578db", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3767e1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3767e1", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_block_blob_count.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_block_blob_count.json index 185555ae560..8f52dd06c6e 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_block_blob_count.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_block_blob_count.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 1, 1, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,21 +33,21 @@ }, "blocks": [ { - "rlp": "0xf90611f90243a0142abad1cb1f9c8a277d59f52cc29560472cf7bf4c46e12bfca8cf6b728acee2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01160bf706d3b06190fa33e896c44f6344158bacefadc0d6faa47ae69fbb424dea02579c29ab652de198ccbb3955047a953123c8d13e8728b18fde1b6894f883120a0b68b3b40b117981014523f7d13c54838507b148d7b74399ca5bdebd0b577f080b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083023e380c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f903c6b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139b88803f885010580078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a07efec980ef3b40c74b2de3dee9e9f081b9b4ae4ae1732d64ba0e9553aaf08dc4a0464e6720d2d74b4d68f37f339608278be3a16802b61a46dc9895b898a70939eab88803f885010680078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a02145ded5025c6144b8f5ae446db8b617c5ff760eb7c17fa439dedb576ada3ab3a03a15f5307cc6a12f853f6f3732a1d2598d117a387256ab0f8f49d9431caf43bfc0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90611f90243a0142abad1cb1f9c8a277d59f52cc29560472cf7bf4c46e12bfca8cf6b728acee2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02d5a3738dc0d76c5d1625b96d1597549c4cd218934167a672be4cc364646bdfca02579c29ab652de198ccbb3955047a953123c8d13e8728b18fde1b6894f883120a0c88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81beb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec300c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f903c6b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139b88803f885010580078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a07efec980ef3b40c74b2de3dee9e9f081b9b4ae4ae1732d64ba0e9553aaf08dc4a0464e6720d2d74b4d68f37f339608278be3a16802b61a46dc9895b898a70939eab88803f885010680078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a02145ded5025c6144b8f5ae446db8b617c5ff760eb7c17fa439dedb576ada3ab3a03a15f5307cc6a12f853f6f3732a1d2598d117a387256ab0f8f49d9431caf43bfc0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x142abad1cb1f9c8a277d59f52cc29560472cf7bf4c46e12bfca8cf6b728acee2", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x1160bf706d3b06190fa33e896c44f6344158bacefadc0d6faa47ae69fbb424de", + "stateRoot": "0x2d5a3738dc0d76c5d1625b96d1597549c4cd218934167a672be4cc364646bdfc", "transactionsTrie": "0x2579c29ab652de198ccbb3955047a953123c8d13e8728b18fde1b6894f883120", - "receiptTrie": "0xb68b3b40b117981014523f7d13c54838507b148d7b74399ca5bdebd0b577f080", + "receiptTrie": "0xc88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81be", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x023e38", + "gasUsed": "0x01ec30", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -56,8 +57,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb7697b10784aabceb4b673ede99805ee4a5477fc9b5b6ff236b3b1d7f07bb6a0" + "hash": "0x13af3033e1f55060b7d587ab559289599c74454c74403f3d8f05c6e237bb619e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -236,9 +238,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 1, 1, 1, 1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -269,21 +272,21 @@ }, "blocks": [ { - "rlp": "0xf905a9f90243a0b37081858e0f45f6b9db73b2106e6ef17fea6eb2248ba7abc0b751408f6132b1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00abe6bebf48ea5da636cae19def078a0815fc749e5cda8bb2933bba001fdb226a066ec7d1f1b72c0f5feaba91fa153d37cbd4546fa5cbd873935058046433fda93a0c88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81beb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec300c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9035eb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139b8aa03f8a7010580078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a077be0868c3fbf1d197b11d641d9f12c3594f6c9c629ae8ff2499910fe9654a12a02c8935d89a4446614b3775dff87e286ae393905df3526c142b0333368b3c1b30c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf905a9f90243a0b37081858e0f45f6b9db73b2106e6ef17fea6eb2248ba7abc0b751408f6132b1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f98d3957e4e87e5a6f68e0f6b6b33d054008a02cb870f3105a0565f7a1c94554a066ec7d1f1b72c0f5feaba91fa153d37cbd4546fa5cbd873935058046433fda93a00fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083019a280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9035eb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139b8aa03f8a7010580078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a077be0868c3fbf1d197b11d641d9f12c3594f6c9c629ae8ff2499910fe9654a12a02c8935d89a4446614b3775dff87e286ae393905df3526c142b0333368b3c1b30c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb37081858e0f45f6b9db73b2106e6ef17fea6eb2248ba7abc0b751408f6132b1", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0abe6bebf48ea5da636cae19def078a0815fc749e5cda8bb2933bba001fdb226", + "stateRoot": "0xf98d3957e4e87e5a6f68e0f6b6b33d054008a02cb870f3105a0565f7a1c94554", "transactionsTrie": "0x66ec7d1f1b72c0f5feaba91fa153d37cbd4546fa5cbd873935058046433fda93", - "receiptTrie": "0xc88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81be", + "receiptTrie": "0x0fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x01ec30", + "gasUsed": "0x019a28", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -293,8 +296,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1924e77987d633fea1aa732a2b4dffe16daf613cd204f37821f954088e76bd2c" + "hash": "0x2cb9ab950d48ba27f59b23d82a7cf0a31e05dcc0f265816806ca9cf5db7e400d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -454,9 +458,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 1, 1, 1, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 1, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -487,21 +492,21 @@ }, "blocks": [ { - "rlp": "0xf90540f90243a0a99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09406ef36be4f44153414bf7d584e2d66e9610f4246a41502503e92f8b42165bda0e24fc5bc5b28819e28da0d847992b6880bbacff1b2b3e4c7043ccdd5addb0e6da00fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083019a280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902f5b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb8cb03f8c8010480078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a056368cf345ba0e910db98bd81fc49972dc5808faec334faf9e2a108747678c04a00222926688f2b46101e29f204d831c23383264df34ddc055f31f1e9bfc2d1953c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90540f90243a0a99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03411a2ac9d24c7c66356fc06fb05d9057171c38e7a2ed3305d5dd51f1dc5f5eca0e24fc5bc5b28819e28da0d847992b6880bbacff1b2b3e4c7043ccdd5addb0e6da080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902f5b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb8cb03f8c8010480078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a056368cf345ba0e910db98bd81fc49972dc5808faec334faf9e2a108747678c04a00222926688f2b46101e29f204d831c23383264df34ddc055f31f1e9bfc2d1953c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xa99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9406ef36be4f44153414bf7d584e2d66e9610f4246a41502503e92f8b42165bd", + "stateRoot": "0x3411a2ac9d24c7c66356fc06fb05d9057171c38e7a2ed3305d5dd51f1dc5f5ec", "transactionsTrie": "0xe24fc5bc5b28819e28da0d847992b6880bbacff1b2b3e4c7043ccdd5addb0e6d", - "receiptTrie": "0x0fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0", + "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x019a28", + "gasUsed": "0x014820", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -511,8 +516,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x45baae94310faa78a4b97f5194ee78e0b865f72b0dbc512dac45f95d6d18c7e5" + "hash": "0x46abcbcc3e54c83a5a07f7a75e073309a397be7af479c6991feef32648419407" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -653,9 +659,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 1, 1, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -686,21 +693,21 @@ }, "blocks": [ { - "rlp": "0xf90541f90243a0a99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09406ef36be4f44153414bf7d584e2d66e9610f4246a41502503e92f8b42165bda03d9aba437ed8d586f33d3f0675b2f8b8353cf9c5e953cd3d8b436c5e4c6ec9ffa00fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083019a280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902f6b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b8aa03f8a7010380078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a06d029dd5fbca2185367132cb8c6f2b55eb2e040ff2ef329ec5862c01282eac2fa03d8f5297c5e84d8bac8ae590d1c8fb939473cbcdc0db52310a2108b9b47d480eb8aa03f8a7010480078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0f767b7e3c41873f941552e15fd67947c18ed7139f03abbe188762e2b69b9dc8ca07f92eace9c234cc6b1353e9f6808165c5950f43ba226d3154b26a7c1b34a2d6bc0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90541f90243a0a99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ac0ac5db1a26d84e6292ef6afc616930362ff196443de7e17dce7566a41e9376a03d9aba437ed8d586f33d3f0675b2f8b8353cf9c5e953cd3d8b436c5e4c6ec9ffa080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902f6b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b8aa03f8a7010380078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a06d029dd5fbca2185367132cb8c6f2b55eb2e040ff2ef329ec5862c01282eac2fa03d8f5297c5e84d8bac8ae590d1c8fb939473cbcdc0db52310a2108b9b47d480eb8aa03f8a7010480078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0f767b7e3c41873f941552e15fd67947c18ed7139f03abbe188762e2b69b9dc8ca07f92eace9c234cc6b1353e9f6808165c5950f43ba226d3154b26a7c1b34a2d6bc0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xa99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9406ef36be4f44153414bf7d584e2d66e9610f4246a41502503e92f8b42165bd", + "stateRoot": "0xac0ac5db1a26d84e6292ef6afc616930362ff196443de7e17dce7566a41e9376", "transactionsTrie": "0x3d9aba437ed8d586f33d3f0675b2f8b8353cf9c5e953cd3d8b436c5e4c6ec9ff", - "receiptTrie": "0x0fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0", + "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x019a28", + "gasUsed": "0x014820", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -710,8 +717,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7f47d195494d15f23e7d11a834ad7f807c15611fa829059f9527ce26eae2efa8" + "hash": "0xeb94ea1fc3c4433c830581f5f8a4ed8e5fa3b5fc5bfa4897a4b10716a5e1d95b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -852,9 +860,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 1, 1, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 1, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -885,21 +894,21 @@ }, "blocks": [ { - "rlp": "0xf904d7f90243a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557a0e77162b50c1197db32a578c34e5e387716ecdabfb7409fa1239534fd9d6f37caa080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028cb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b8ec03f8e9010380078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a0e8fb762b316adfc587fdaa98ee0e91e9f4a6878aff7e20ab0509677631e24e73a012705f2e3a2ae426d73d76991fd703eb4ead73457c5809816e791ae11e72338bc0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf904d6f90242a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a336fb2b2f21d6161c942538b7de276a81c40fb33b1114bbffdcecc547a0fadea0e77162b50c1197db32a578c34e5e387716ecdabfb7409fa1239534fd9d6f37caa09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028cb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b8ec03f8e9010380078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a0e8fb762b316adfc587fdaa98ee0e91e9f4a6878aff7e20ab0509677631e24e73a012705f2e3a2ae426d73d76991fd703eb4ead73457c5809816e791ae11e72338bc0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xf290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557", + "stateRoot": "0xa336fb2b2f21d6161c942538b7de276a81c40fb33b1114bbffdcecc547a0fade", "transactionsTrie": "0xe77162b50c1197db32a578c34e5e387716ecdabfb7409fa1239534fd9d6f37ca", - "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", + "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x014820", + "gasUsed": "0xf618", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -909,8 +918,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7f360aed78cf14817a48f88d6c65c1f4160957d6d83b94ecbfe77a08306683b7" + "hash": "0x63f1d7ef59b3423cda5b0deb5d472edaf50c285051f764865645ba2a77fd3a38" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1032,9 +1042,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 1, 2, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 2, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1065,21 +1076,21 @@ }, "blocks": [ { - "rlp": "0xf904d8f90243a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557a0a24e376fbaa6be769bd94846d02837640365c0899d967d71fdf250a713d6bb96a080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028db88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befb8cb03f8c8010380078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0f1f4b9be64029d9407c88d2a775cb70706e6045d3855ffa0e6a52f416459e96ea038cf645bc6ff2e307b1fcb647576cef0ad491cc75ddd8e2c1c065be1bac2f2bcc0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf904d7f90242a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02299d3643582d32b7b4bf95db450c66e6093ba74f48c7c6f3b119bb7c6647f91a0a24e376fbaa6be769bd94846d02837640365c0899d967d71fdf250a713d6bb96a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028db88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befb8cb03f8c8010380078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0f1f4b9be64029d9407c88d2a775cb70706e6045d3855ffa0e6a52f416459e96ea038cf645bc6ff2e307b1fcb647576cef0ad491cc75ddd8e2c1c065be1bac2f2bcc0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xf290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557", + "stateRoot": "0x2299d3643582d32b7b4bf95db450c66e6093ba74f48c7c6f3b119bb7c6647f91", "transactionsTrie": "0xa24e376fbaa6be769bd94846d02837640365c0899d967d71fdf250a713d6bb96", - "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", + "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x014820", + "gasUsed": "0xf618", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1089,8 +1100,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9346a9ac028916affa9024bb32947d295daee9215d23ab18679d01744a7dadca" + "hash": "0xf252d82d226828edbf30f85a54a35a679a37dd96785a2f1473b8d3656147c554" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1212,9 +1224,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 2, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 2, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1245,21 +1258,21 @@ }, "blocks": [ { - "rlp": "0xf904d9f90243a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557a0467a19dbbcaf37be5da721ae2b80ad27a098f1f7e9c48ed6cb7aef9847721c13a080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028eb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befb8aa03f8a7010380078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a06d029dd5fbca2185367132cb8c6f2b55eb2e040ff2ef329ec5862c01282eac2fa03d8f5297c5e84d8bac8ae590d1c8fb939473cbcdc0db52310a2108b9b47d480ec0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf904d8f90242a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a3d22b9cc2b4bb4f253159ae126197b3c2883f7eb21dab3d45b56e59e157f96ba0467a19dbbcaf37be5da721ae2b80ad27a098f1f7e9c48ed6cb7aef9847721c13a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028eb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befb8aa03f8a7010380078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a06d029dd5fbca2185367132cb8c6f2b55eb2e040ff2ef329ec5862c01282eac2fa03d8f5297c5e84d8bac8ae590d1c8fb939473cbcdc0db52310a2108b9b47d480ec0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xf290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557", + "stateRoot": "0xa3d22b9cc2b4bb4f253159ae126197b3c2883f7eb21dab3d45b56e59e157f96b", "transactionsTrie": "0x467a19dbbcaf37be5da721ae2b80ad27a098f1f7e9c48ed6cb7aef9847721c13", - "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", + "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x014820", + "gasUsed": "0xf618", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1269,8 +1282,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf5b4e350462073cd21520d8d57f61fed7c4c74d7988414a4eb52e1444b36a26e" + "hash": "0x03762ee41d2f321da337f5bf87f585f7e406acc71d7dca2cc8e5fb6cfe75be32" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1392,9 +1406,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 1, 5)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 1, 5)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1425,21 +1440,21 @@ }, "blocks": [ { - "rlp": "0xf9046ff90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946a0b8d22a2a3107e5e6d5975cca19f23ddd8f6329ae7dbee6c6535ec1e2fb396132a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90225b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb9010e03f9010a010280078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a042497dc2b34e5262095e63ed752dda63773a7cdd6c8937c43e0b7f4ac1d911a1a042592ba737e913c7eae6fdc59ae5f5e0e6efbf7c0d4e19b6eee7c9c89488fa68c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9046ff90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c340f55fcb8d59c57db122f933452622c9123bdc3c0acb8478b7ac03865ee087a0b8d22a2a3107e5e6d5975cca19f23ddd8f6329ae7dbee6c6535ec1e2fb396132a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90225b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb9010e03f9010a010280078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a042497dc2b34e5262095e63ed752dda63773a7cdd6c8937c43e0b7f4ac1d911a1a042592ba737e913c7eae6fdc59ae5f5e0e6efbf7c0d4e19b6eee7c9c89488fa68c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x04ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946", + "stateRoot": "0xc340f55fcb8d59c57db122f933452622c9123bdc3c0acb8478b7ac03865ee087", "transactionsTrie": "0xb8d22a2a3107e5e6d5975cca19f23ddd8f6329ae7dbee6c6535ec1e2fb396132", - "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", + "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xf618", + "gasUsed": "0xa410", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1449,8 +1464,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x21b669ee8e3031bbc1e49ad46bd6471f3d6269b3ed87b9599993e61a8459ce68" + "hash": "0x0ef344ea40274caa41c377db120d6ac0e23b038cc06bd2a0e326d786b47f42a0" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1553,9 +1569,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 2, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 2, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1586,21 +1603,21 @@ }, "blocks": [ { - "rlp": "0xf9046ef90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946a0b7f1ceea08d6e5de07e1e2f7a3f65e6ad25d668d6d5a68b471b3b5e34e2a333ca09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90224b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8ec03f8e9010280078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a0e9476ce242f923f527e67d058a797f8e5031eb988055d5fc1e8260363eb60c71a040e6602db343c002d4322ba14cc9d62798e7148e79e7d1bb8e2e929741d24cf2c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9046ef90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e3bcc096609b7067b3ac03d31b2ec8941434560cfb30ebc3b550d46eca68df77a0b7f1ceea08d6e5de07e1e2f7a3f65e6ad25d668d6d5a68b471b3b5e34e2a333ca010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90224b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8ec03f8e9010280078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a0e9476ce242f923f527e67d058a797f8e5031eb988055d5fc1e8260363eb60c71a040e6602db343c002d4322ba14cc9d62798e7148e79e7d1bb8e2e929741d24cf2c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x04ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946", + "stateRoot": "0xe3bcc096609b7067b3ac03d31b2ec8941434560cfb30ebc3b550d46eca68df77", "transactionsTrie": "0xb7f1ceea08d6e5de07e1e2f7a3f65e6ad25d668d6d5a68b471b3b5e34e2a333c", - "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", + "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xf618", + "gasUsed": "0xa410", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1610,8 +1627,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xef93382b8993136f8d636d168d0e8713bac9b125b3b4d148a14372961db7b0cc" + "hash": "0x4414c44d4c3242360b07d4f7a7981804adc5a30a4072db8924641c7e093e099a" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1714,9 +1732,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 3, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 3, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1747,21 +1766,21 @@ }, "blocks": [ { - "rlp": "0xf9046ef90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946a094257dc9890743429640f6e5514fba57cfd0182af5c8b448c0e313f149e6fcd5a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90224b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391b8cb03f8c8010280078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0f745b5a72a2c990db52b13e7b7827240131b1e67ce876fcf326fa25201644f2ea027c7189e4cf388453094af696515daf8629bcf0e7f02d92dfab462fcc059312dc0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9046ef90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0644eff99d9bc5a6315af4c3b6f81fcb8b3bfbbc673e4cae6191c8c2cb7717406a094257dc9890743429640f6e5514fba57cfd0182af5c8b448c0e313f149e6fcd5a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90224b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391b8cb03f8c8010280078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0f745b5a72a2c990db52b13e7b7827240131b1e67ce876fcf326fa25201644f2ea027c7189e4cf388453094af696515daf8629bcf0e7f02d92dfab462fcc059312dc0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x04ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946", + "stateRoot": "0x644eff99d9bc5a6315af4c3b6f81fcb8b3bfbbc673e4cae6191c8c2cb7717406", "transactionsTrie": "0x94257dc9890743429640f6e5514fba57cfd0182af5c8b448c0e313f149e6fcd5", - "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", + "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xf618", + "gasUsed": "0xa410", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1771,8 +1790,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xef6478714649d408b55aed038bb9d6d781427a91dd4bf86d6517f6e96d07f015" + "hash": "0x7069a1ea3f8c8bde21652d6d6a157441351b18ba2c2f97d803ca3f640565bcaa" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1875,9 +1895,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(2, 2, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1908,21 +1929,21 @@ }, "blocks": [ { - "rlp": "0xf9046ff90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946a07060c3d206c3e12d56a46b46825ff36dbf3bf0d2ef50db7cb67de2a5531ee8ffa09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90225b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8cb03f8c8010280078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0f745b5a72a2c990db52b13e7b7827240131b1e67ce876fcf326fa25201644f2ea027c7189e4cf388453094af696515daf8629bcf0e7f02d92dfab462fcc059312dc0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9046ff90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0644eff99d9bc5a6315af4c3b6f81fcb8b3bfbbc673e4cae6191c8c2cb7717406a07060c3d206c3e12d56a46b46825ff36dbf3bf0d2ef50db7cb67de2a5531ee8ffa010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90225b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8cb03f8c8010280078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000280a0f745b5a72a2c990db52b13e7b7827240131b1e67ce876fcf326fa25201644f2ea027c7189e4cf388453094af696515daf8629bcf0e7f02d92dfab462fcc059312dc0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x04ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946", + "stateRoot": "0x644eff99d9bc5a6315af4c3b6f81fcb8b3bfbbc673e4cae6191c8c2cb7717406", "transactionsTrie": "0x7060c3d206c3e12d56a46b46825ff36dbf3bf0d2ef50db7cb67de2a5531ee8ff", - "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", + "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xf618", + "gasUsed": "0xa410", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1932,8 +1953,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0d931f1beb4657393db352f55882b3bd5062f8061d7ee0c6095ac89a2f0ff0e3" + "hash": "0x2002bf15d2ff6e310023bb8556c709eb91520ccafa5903dbe5e1fc872c8afbc6" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2036,9 +2058,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(1, 6)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(1, 6)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2069,21 +2092,21 @@ }, "blocks": [ { - "rlp": "0xf90406f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa087413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479a0f3e1659ddc6a74d943d65d62d4b2bc17b534976d1f1e9cc12837dade94910dd0a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bcb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab9012f03f9012b010180078252089400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a0d2fb75e16680d8885a10c4fb9b6675953150ef03b8661e2ef9099265b0c1cc1fa049f848c809e11329ddd49cceec203252d0ba9863613b1cc4d0ff066460e87366c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90406f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09ddecce6fda56896d06fb38a00ce98b613b7e432e6a47f4f9749a6671d8e5f24a0f3e1659ddc6a74d943d65d62d4b2bc17b534976d1f1e9cc12837dade94910dd0a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bcb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ab9012f03f9012b010180078252089400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a0d2fb75e16680d8885a10c4fb9b6675953150ef03b8661e2ef9099265b0c1cc1fa049f848c809e11329ddd49cceec203252d0ba9863613b1cc4d0ff066460e87366c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x4dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x87413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479", + "stateRoot": "0x9ddecce6fda56896d06fb38a00ce98b613b7e432e6a47f4f9749a6671d8e5f24", "transactionsTrie": "0xf3e1659ddc6a74d943d65d62d4b2bc17b534976d1f1e9cc12837dade94910dd0", - "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xa410", + "gasUsed": "0x5208", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2093,8 +2116,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xedc928c463032db5a125707bd7811a0d0dc1baa3e782ef6e65a5c4cb653fe4d4" + "hash": "0xef8b9b74907de413e379785740d77f2f17cd8ae704fc8f88251243c8c63db87d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2178,9 +2202,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(2, 5)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 5)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2211,21 +2236,21 @@ }, "blocks": [ { - "rlp": "0xf90407f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa087413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479a095fcf8909d577b2083b9826800534bcff34ed99c0a62ba8a76137a19ef695a13a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bdb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b9010e03f9010a010180078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a03b2d2b489ff492b72d5a89673af2a2840830ead9d6cf2544e444385818f4db97a03ba1a6691a91deb8a72304e4986800f766d95f552fceb901a37c4f913f9a1f5ec0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90407f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06aa52985089283579c29ab6a2be02f906d31d32a820816f7943ebd49b0799d29a095fcf8909d577b2083b9826800534bcff34ed99c0a62ba8a76137a19ef695a13a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bdb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b9010e03f9010a010180078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a03b2d2b489ff492b72d5a89673af2a2840830ead9d6cf2544e444385818f4db97a03ba1a6691a91deb8a72304e4986800f766d95f552fceb901a37c4f913f9a1f5ec0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x4dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x87413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479", + "stateRoot": "0x6aa52985089283579c29ab6a2be02f906d31d32a820816f7943ebd49b0799d29", "transactionsTrie": "0x95fcf8909d577b2083b9826800534bcff34ed99c0a62ba8a76137a19ef695a13", - "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xa410", + "gasUsed": "0x5208", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2235,8 +2260,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe8311c8368130c0ceac6de364a80e255d5ea582f83b0f0f6ac9cba96b3b911ef" + "hash": "0x7ad6839a81423b893163b891be4fc15a43814dc6e60c001fad3d55c058b1e2ea" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2320,9 +2346,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(3, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2353,21 +2380,21 @@ }, "blocks": [ { - "rlp": "0xf90405f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa087413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479a0cd9bd46b0f2e318a5236d207dbd53a9ab32491fde3f09c33ae19100d31086891a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bbb8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8ec03f8e9010180078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a0a9f1ef3f0dcf6833817f20e660ff751b5ede0573c495c2f707ba9bd7f8d6639fa072b7268169653fa15613ecee69def2deef2562057b65bf753c23f3e480609261c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90405f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09273b8a3d2f3011d5b242597d99d086b81b106b8b21137bce706509738e5b35ca0cd9bd46b0f2e318a5236d207dbd53a9ab32491fde3f09c33ae19100d31086891a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bbb8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8ec03f8e9010180078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a0a9f1ef3f0dcf6833817f20e660ff751b5ede0573c495c2f707ba9bd7f8d6639fa072b7268169653fa15613ecee69def2deef2562057b65bf753c23f3e480609261c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x4dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x87413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479", + "stateRoot": "0x9273b8a3d2f3011d5b242597d99d086b81b106b8b21137bce706509738e5b35c", "transactionsTrie": "0xcd9bd46b0f2e318a5236d207dbd53a9ab32491fde3f09c33ae19100d31086891", - "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xa410", + "gasUsed": "0x5208", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2377,8 +2404,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x95ce6dcfad780cbccf15c227c5a78ad0b55bec6623617c5a5a710b0179b7797a" + "hash": "0x76b301e4722b66abab31d46303112da99a32fe2d1e31989cef0dc13e854914e3" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2462,9 +2490,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(7,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(7,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2495,21 +2524,21 @@ }, "blocks": [ { - "rlp": "0xf9039df90242a09c823f5a5fff3d59eae97c2a49a6a32d7cdf474478e97fcd6fedb97e058052d3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c4e1946638e354f510a20898a1746fc3f047c089153990ae220f41fe8e993252a0a9f9ecaf41694501fe48865981e0e02ef87ef20d265b28a026ebf2e86cf0ada9a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b9015003f9014c018080078252089400000000000000000000000000000000000001000180c001f8e7a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a00100000000000000000000000000000000000000000000000000000000000005a0010000000000000000000000000000000000000000000000000000000000000601a0af0a7ac2ca1a38440aff74ef5585589516aaf73984ca8ebee703f42a54dab9f6a056fc83d4ea63ef0f3b40ef86d36f887df7c46bad309dca7ceda55a2ba985f7a1c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9039bf90240a09c823f5a5fff3d59eae97c2a49a6a32d7cdf474478e97fcd6fedb97e058052d3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d4f3d82a6c2113ea28178d9b5d8bafb255b9bb92c44f3e41aa9647d951ad9a03a0a9f9ecaf41694501fe48865981e0e02ef87ef20d265b28a026ebf2e86cf0ada9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b9015003f9014c018080078252089400000000000000000000000000000000000001000180c001f8e7a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a00100000000000000000000000000000000000000000000000000000000000005a0010000000000000000000000000000000000000000000000000000000000000601a0af0a7ac2ca1a38440aff74ef5585589516aaf73984ca8ebee703f42a54dab9f6a056fc83d4ea63ef0f3b40ef86d36f887df7c46bad309dca7ceda55a2ba985f7a1c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x9c823f5a5fff3d59eae97c2a49a6a32d7cdf474478e97fcd6fedb97e058052d3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc4e1946638e354f510a20898a1746fc3f047c089153990ae220f41fe8e993252", + "stateRoot": "0xd4f3d82a6c2113ea28178d9b5d8bafb255b9bb92c44f3e41aa9647d951ad9a03", "transactionsTrie": "0xa9f9ecaf41694501fe48865981e0e02ef87ef20d265b28a026ebf2e86cf0ada9", - "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x5208", + "gasUsed": "0x00", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2519,8 +2548,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb174770ab720577a08687ca81a12aa1c31ca5c638bd1860cd85a301043a84760" + "hash": "0x935d228f62cba312cb39a945d8de92634d8cf4c46dde8a8cab5314431fc8e1fc" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2585,9 +2615,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(2, 1, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 1, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2618,21 +2649,21 @@ }, "blocks": [ { - "rlp": "0xf905a9f90243a0b37081858e0f45f6b9db73b2106e6ef17fea6eb2248ba7abc0b751408f6132b1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00abe6bebf48ea5da636cae19def078a0815fc749e5cda8bb2933bba001fdb226a0900435949a013be5428acea59eda17147cb48e8fc507e453a1f251b3b0307393a0c88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81beb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec300c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9035eb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139b88803f885010580078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a07efec980ef3b40c74b2de3dee9e9f081b9b4ae4ae1732d64ba0e9553aaf08dc4a0464e6720d2d74b4d68f37f339608278be3a16802b61a46dc9895b898a70939eac0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf905a9f90243a0b37081858e0f45f6b9db73b2106e6ef17fea6eb2248ba7abc0b751408f6132b1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0eeb4c3da6b771ee54f44e11c9d0ca1acb2d7bce4bc4b9575acbf7c4321cc3850a0900435949a013be5428acea59eda17147cb48e8fc507e453a1f251b3b0307393a00fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083019a280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9035eb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139b88803f885010580078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a07efec980ef3b40c74b2de3dee9e9f081b9b4ae4ae1732d64ba0e9553aaf08dc4a0464e6720d2d74b4d68f37f339608278be3a16802b61a46dc9895b898a70939eac0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb37081858e0f45f6b9db73b2106e6ef17fea6eb2248ba7abc0b751408f6132b1", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0abe6bebf48ea5da636cae19def078a0815fc749e5cda8bb2933bba001fdb226", + "stateRoot": "0xeeb4c3da6b771ee54f44e11c9d0ca1acb2d7bce4bc4b9575acbf7c4321cc3850", "transactionsTrie": "0x900435949a013be5428acea59eda17147cb48e8fc507e453a1f251b3b0307393", - "receiptTrie": "0xc88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81be", + "receiptTrie": "0x0fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x01ec30", + "gasUsed": "0x019a28", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2642,8 +2673,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x898e51408d09ddf7da8f82293b083ef829de927e7debcd14064f11295d5246ea" + "hash": "0x307a86dbd212f30f2195d0fd47a238d0ef6aeea59a753c7254b09eb0825ce9b4" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2803,9 +2835,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(3, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2836,21 +2869,21 @@ }, "blocks": [ { - "rlp": "0xf90540f90243a0a99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09406ef36be4f44153414bf7d584e2d66e9610f4246a41502503e92f8b42165bda0344f6e30feece56c276d725150faed27a199b2e46ac573a2dffb2dc3bff5311aa00fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083019a280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902f5b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90540f90243a0a99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0401a1d7a6a01335fdba665a6be4eb8604b309ea55c736c3798a434246fbb43d5a0344f6e30feece56c276d725150faed27a199b2e46ac573a2dffb2dc3bff5311aa080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902f5b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xa99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9406ef36be4f44153414bf7d584e2d66e9610f4246a41502503e92f8b42165bd", + "stateRoot": "0x401a1d7a6a01335fdba665a6be4eb8604b309ea55c736c3798a434246fbb43d5", "transactionsTrie": "0x344f6e30feece56c276d725150faed27a199b2e46ac573a2dffb2dc3bff5311a", - "receiptTrie": "0x0fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0", + "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x019a28", + "gasUsed": "0x014820", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -2860,8 +2893,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa4abd04583d0ef65ad33c37d0765ea6c2f15901aa9e81ffdcb3936b52dba00a5" + "hash": "0xdb0179b8c46f0d73a288899d381cb5cf0e93a32d2feb29d9fd7a66602a68db42" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3002,9 +3036,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(2, 2, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3035,21 +3070,21 @@ }, "blocks": [ { - "rlp": "0xf90541f90243a0a99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09406ef36be4f44153414bf7d584e2d66e9610f4246a41502503e92f8b42165bda0b4c142d700fbc5344ba1ae688a9a1fb035d02f7e333ac66e03a4364455700fc5a00fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083019a280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902f6b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90541f90243a0a99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0401a1d7a6a01335fdba665a6be4eb8604b309ea55c736c3798a434246fbb43d5a0b4c142d700fbc5344ba1ae688a9a1fb035d02f7e333ac66e03a4364455700fc5a080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f902f6b8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdeb88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0903154f2ee69dbdc29f7369ac4270a31d32b8af6c28959d5c6b2b2ba696e9e7da06989cf772024d3efa30b4b99bc1e1dee27813964f39448d07377537a2681d139c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xa99505076b977d19b10f2d39bef3f9d5b8d9cca04597cf378d3fa50006f03492", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9406ef36be4f44153414bf7d584e2d66e9610f4246a41502503e92f8b42165bd", + "stateRoot": "0x401a1d7a6a01335fdba665a6be4eb8604b309ea55c736c3798a434246fbb43d5", "transactionsTrie": "0xb4c142d700fbc5344ba1ae688a9a1fb035d02f7e333ac66e03a4364455700fc5", - "receiptTrie": "0x0fb518c7915e8be37f2aa095af144d5e9a121e4dc65b20bbe109b9a001da1cb0", + "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x019a28", + "gasUsed": "0x014820", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3059,8 +3094,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x957e6fe78317912cfb3c879bff37084cf98f77a2fe86544064ed068d2ee8b701" + "hash": "0xf662e960ea85212ed6c3ab2bbfec016ea8d6c57ca5758c07b87bcc6f604be1dd" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3201,9 +3237,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(4, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3234,21 +3271,21 @@ }, "blocks": [ { - "rlp": "0xf904d7f90243a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557a01c6b68ccfe9062c33f455258f202caa6edb49174c1cbb76595d95aa5d2bbd06fa080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028cb8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf904d6f90242a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03acd8b37b56198894760eedac557f6cae0d9b43bb389af98d9766fe19a7cf20da01c6b68ccfe9062c33f455258f202caa6edb49174c1cbb76595d95aa5d2bbd06fa09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028cb8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xf290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557", + "stateRoot": "0x3acd8b37b56198894760eedac557f6cae0d9b43bb389af98d9766fe19a7cf20d", "transactionsTrie": "0x1c6b68ccfe9062c33f455258f202caa6edb49174c1cbb76595d95aa5d2bbd06f", - "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", + "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x014820", + "gasUsed": "0xf618", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3258,8 +3295,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x09ae5a602e57474c71cfd235ec2081079c9de6f19fdc5c33a0fa7ba701f275db" + "hash": "0x501d764d20e84e7c03f0e9f2e6505b7da16d8a4c96bbffc4d25cb9e2292be45c" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3381,9 +3419,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(3, 2, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 2, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3414,21 +3453,21 @@ }, "blocks": [ { - "rlp": "0xf904d8f90243a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557a0b0f4ac5bd5ec3b5c8ff39fbc3e8fb6d9c39794f66e839d8446bfe691bab5e7e5a080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028db8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf904d7f90242a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03acd8b37b56198894760eedac557f6cae0d9b43bb389af98d9766fe19a7cf20da0b0f4ac5bd5ec3b5c8ff39fbc3e8fb6d9c39794f66e839d8446bfe691bab5e7e5a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028db8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429b88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xf290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557", + "stateRoot": "0x3acd8b37b56198894760eedac557f6cae0d9b43bb389af98d9766fe19a7cf20d", "transactionsTrie": "0xb0f4ac5bd5ec3b5c8ff39fbc3e8fb6d9c39794f66e839d8446bfe691bab5e7e5", - "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", + "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x014820", + "gasUsed": "0xf618", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3438,8 +3477,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3b7de646c7b558777069d40a10a53c3d86296219260e91246fccbec2d515e908" + "hash": "0x71bfe5c83bde6aae3b789c96542fc5868370bf8b685abc8e1cc030bd8274ec2c" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3561,9 +3601,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(2, 2, 2, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(2, 2, 2, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3594,21 +3635,21 @@ }, "blocks": [ { - "rlp": "0xf904d9f90243a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557a043a1c8184648d00e80478a9eb52b7bdf242666738ce2168673fa1a68934e7d3ba080a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830148200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028eb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befb88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf904d8f90242a0f290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03acd8b37b56198894760eedac557f6cae0d9b43bb389af98d9766fe19a7cf20da043a1c8184648d00e80478a9eb52b7bdf242666738ce2168673fa1a68934e7d3ba09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f9028eb8aa03f8a7018080078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a02834415d34b036a9c160e4d399bf6d00c08fccdc867aa468a707bb6eed4eb6e5a05566b3d3cc186b71e0a8055b6fed7339f2a8fb30c8f7859352e73eb16b13dc10b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befb88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a05d87fd0644fda3b8ae7c840519b0a51c86e54097b63c394a8ebfb13f0212da78a07054fc9d2468c15c2d8257a54e42419e6a53fe0d4568ccf95ecd4414e3481cdec0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xf290d8b133d1625a37756795c42509a96976a4a88ea2b3b807761f6af01be345", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcabca10654295a18386e33b3c72324313ae0bb5374dec4365e37234600f23557", + "stateRoot": "0x3acd8b37b56198894760eedac557f6cae0d9b43bb389af98d9766fe19a7cf20d", "transactionsTrie": "0x43a1c8184648d00e80478a9eb52b7bdf242666738ce2168673fa1a68934e7d3b", - "receiptTrie": "0x80a83e7d056035d7e4241904f58ca67fe054eb53611eb378101aa2faf0376b42", + "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x014820", + "gasUsed": "0xf618", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3618,8 +3659,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9ca7e07dd2718b5b552f9a31416bcdd90cb69538aacbd506d9a5495ff3b8b3ac" + "hash": "0xbc92fb74f107ddf25fe7b23ed86bff0d456f506160fa3c6f7d20a70ec6fbb525" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3741,9 +3783,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(5, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(5, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3774,21 +3817,21 @@ }, "blocks": [ { - "rlp": "0xf9046ff90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946a04c9b8c4e230ca5d18c785686373231a4be0587fbef4979e5be9094e23e68c9d2a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90225b9010e03f9010a018080078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000480a05b5b2b349f42d7b29873999b615a746b86b25832b74a4e443e34fa9222e3de16a033a55d0dc9ab01945ab29789a6c93b98541724dd932467aed99cc92bc5437c84b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9046ff90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380aa04c9b8c4e230ca5d18c785686373231a4be0587fbef4979e5be9094e23e68c9d2a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90225b9010e03f9010a018080078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000480a05b5b2b349f42d7b29873999b615a746b86b25832b74a4e443e34fa9222e3de16a033a55d0dc9ab01945ab29789a6c93b98541724dd932467aed99cc92bc5437c84b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccb88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x04ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946", + "stateRoot": "0x28debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380a", "transactionsTrie": "0x4c9b8c4e230ca5d18c785686373231a4be0587fbef4979e5be9094e23e68c9d2", - "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", + "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xf618", + "gasUsed": "0xa410", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3798,8 +3841,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x045a101ec1108bba07fd0e7a57a01ad683a9d09611f4574032d1b1b8184b211f" + "hash": "0xb0c39669f15cdfd66d8f51a096156dff09ef41cac06ab584d913ac1f2187334f" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3902,9 +3946,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(4, 2, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 2, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3935,21 +3980,21 @@ }, "blocks": [ { - "rlp": "0xf9046ef90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946a0ef2f0fb990681435e2cdebc1a1d7b6709c0e477dfd8b0c992ed7b650190a9d91a09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90224b8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9046ef90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380aa0ef2f0fb990681435e2cdebc1a1d7b6709c0e477dfd8b0c992ed7b650190a9d91a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90224b8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x04ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946", + "stateRoot": "0x28debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380a", "transactionsTrie": "0xef2f0fb990681435e2cdebc1a1d7b6709c0e477dfd8b0c992ed7b650190a9d91", - "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", + "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xf618", + "gasUsed": "0xa410", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3959,8 +4004,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xdf1944e30961bb9ebb64a7278a2a5b2c8c4bfa12d6c8cd058bc2e9b53ef57606" + "hash": "0x4d2dc36be26946ca3298de5a09ec49a31e3fc2c386fc2e4cd30e8d9ba223ccb1" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4063,9 +4109,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(3, 3, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 3, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4096,21 +4143,21 @@ }, "blocks": [ { - "rlp": "0xf9046ef90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946a05a80f2685e98837d0c58e4c06331a8c2c2c9c73889a0c415497518a05efcf03ea09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90224b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9046ef90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380aa05a80f2685e98837d0c58e4c06331a8c2c2c9c73889a0c415497518a05efcf03ea010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90224b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0fe46a6659784d1c49e66bfe79f53c9282521940f406d321a953600d3297498e1a011d6bd31ffcfc37bd89923bd565eca3df245ab923b95799811f227502a95a429c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x04ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946", + "stateRoot": "0x28debd21503f6c8a4e99cc2068f565904f55205cab98d6a3fbd90651f4aa380a", "transactionsTrie": "0x5a80f2685e98837d0c58e4c06331a8c2c2c9c73889a0c415497518a05efcf03e", - "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", + "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xf618", + "gasUsed": "0xa410", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4120,8 +4167,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf5bfa2ca4aa0e88a27ccdf5d08519ddae95cbee01d035870d5cf619e8d7b4154" + "hash": "0x46800fa6e809729ac074355cc0685c66eb33b8cd85301861186e97cf463f3338" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4224,9 +4272,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(3, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(3, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4257,21 +4306,21 @@ }, "blocks": [ { - "rlp": "0xf9046ff90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946a08f2537a5a10ece9ba7ecec21b06a3fb5f95dd60fdd2a9d55d964500c18a17a0aa09af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f6180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90225b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befc0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf9046ff90242a004ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01caebe89e58427add166bfb51f614025cd80ba3c3e00455057c5204b6a053616a08f2537a5a10ece9ba7ecec21b06a3fb5f95dd60fdd2a9d55d964500c18a17a0aa010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90225b8cb03f8c8018080078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0fa94d1e80768176a944e82f994f83a1a5693753835f864f8699992d19115e257a07c50c336d2f6df236c4e398cf9f943a4905ed618680398868fc4dfb3312b7299b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6b8aa03f8a7010280078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a0319b3a758674966286b9714ce204f804e394041edc091961add54b93d4d6635ea01870b18c3164fb4d9d987f32761df6db1d94aa05c6785dd7cbf905b9fb218befc0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x04ad7b648a29cc173ac0d6604c170cb1cafeb66de243f92bc1651d369edb8c79", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b7e3d3f3a9c7d11829923d808acac48b451644534b1d7a450ef60166f7b946", + "stateRoot": "0x1caebe89e58427add166bfb51f614025cd80ba3c3e00455057c5204b6a053616", "transactionsTrie": "0x8f2537a5a10ece9ba7ecec21b06a3fb5f95dd60fdd2a9d55d964500c18a17a0a", - "receiptTrie": "0x9af165447e5b3193e9ac8389418648ee6d6cb1d37459fe65cfc245fc358721bd", + "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xf618", + "gasUsed": "0xa410", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4281,8 +4330,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe0257ec2b592be010ff7a59301b4a9277fefe1d08bac7761aa1624e0dcc9c021" + "hash": "0x05f4c78bc04034633038e50a670878cd3dccf4caee62119e3019f941a00ebcef" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4385,9 +4435,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(6, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(6, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4418,21 +4469,21 @@ }, "blocks": [ { - "rlp": "0xf90406f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa087413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479a03ef79e2b75483b3af114ba775bce341025d4545d443a5620f560499e9c4f4da3a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bcb9012f03f9012b018080078252089400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000501a0a3fde4e69b58ab7846a662946c81c947872ca16ed64bca3e9f2e298a83a7dd0fa036264b4930ad766cf871de20d6b5a66c4660988c83a0bfad8f50847d16cab98db88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90406f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03cc964d95a7581579147c29e0838092ef15297cfecb743f03caa05a7985d28c4a03ef79e2b75483b3af114ba775bce341025d4545d443a5620f560499e9c4f4da3a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bcb9012f03f9012b018080078252089400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000501a0a3fde4e69b58ab7846a662946c81c947872ca16ed64bca3e9f2e298a83a7dd0fa036264b4930ad766cf871de20d6b5a66c4660988c83a0bfad8f50847d16cab98db88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0ef4c93a2afbe03bc2f31334b5c42654f2b88f3d1526e2719454638d2c87f3eaaa06234b91bfba07b555f8e11d44486319ef599f61fdb70bd5ec02085a41ff8e2ccc0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x4dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x87413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479", + "stateRoot": "0x3cc964d95a7581579147c29e0838092ef15297cfecb743f03caa05a7985d28c4", "transactionsTrie": "0x3ef79e2b75483b3af114ba775bce341025d4545d443a5620f560499e9c4f4da3", - "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xa410", + "gasUsed": "0x5208", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4442,8 +4493,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5e76ec686af211d04389e73fe61a527983293e62bc8de852720f6aa210a8d847" + "hash": "0x543d25c6617f9c6173e9dd79c413a3acd81f6037b69654642817174560efca19" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4527,9 +4579,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(5, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(5, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4560,21 +4613,21 @@ }, "blocks": [ { - "rlp": "0xf90407f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa087413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479a0cf4339618e75779f0cffe7d0a861a6e46256fdc5b5c65c01385a13ec4e2661f2a010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bdb9010e03f9010a018080078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000480a05b5b2b349f42d7b29873999b615a746b86b25832b74a4e443e34fa9222e3de16a033a55d0dc9ab01945ab29789a6c93b98541724dd932467aed99cc92bc5437c84b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90407f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a98d333282dad9207b578e0164c0e84a136bb2bd1427a5669255a38bc778c67aa0cf4339618e75779f0cffe7d0a861a6e46256fdc5b5c65c01385a13ec4e2661f2a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bdb9010e03f9010a018080078252089400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000480a05b5b2b349f42d7b29873999b615a746b86b25832b74a4e443e34fa9222e3de16a033a55d0dc9ab01945ab29789a6c93b98541724dd932467aed99cc92bc5437c84b8aa03f8a7010180078252089400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000180a0c2839c88603ad627d43ce7ca67ddf119db14ab90664aa919bad6d8940a6be2a6a0584cbe56815f7cbf113dbe3d863fda25b489cf42d6aa71c64e6dc8dff03be5b6c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x4dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x87413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479", + "stateRoot": "0xa98d333282dad9207b578e0164c0e84a136bb2bd1427a5669255a38bc778c67a", "transactionsTrie": "0xcf4339618e75779f0cffe7d0a861a6e46256fdc5b5c65c01385a13ec4e2661f2", - "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xa410", + "gasUsed": "0x5208", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4584,8 +4637,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x520112fe4f8dd23b33006edbf8082f07b9afaa361acd1aed64686745dcf98f85" + "hash": "0xbd7cc92c5326c074809369617849909762e662858b5046011c3596c4a71bb9e2" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4669,9 +4723,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-block_error=invalid_blob_count-blobs_per_tx=(4, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_block_blob_count[fork_Cancun-blockchain_test--blobs_per_tx_(4, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4702,21 +4757,21 @@ }, "blocks": [ { - "rlp": "0xf90405f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa087413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479a09f28f3ed16e1a426feade81e6012bd222a2bdef4cc627fdcfc20e2a385be161da010457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bbb8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391c0c0", - "expectException": "invalid_blob_count", + "rlp": "0xf90405f90242a04dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa034a88ce849b19ea0e306f45fde32ae3ed9597d7ce51ad0502f8c9c0c1bd58f4fa09f28f3ed16e1a426feade81e6012bd222a2bdef4cc627fdcfc20e2a385be161da0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f901bbb8ec03f8e9018080078252089400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a05c8d5323bef1ba112b307a284c1652296c80c33be67737dacc39810b53444354a038db29249238feba93f3e89c1e6417fa217ea15a1628a73b90e1593073c69b05b8cb03f8c8010180078252089400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a08e5455a1dfad86ef676e7deeda1aa045e8e1d0b1c62bff9a8720b8dc91de2746a05f2e35151ad3640d2724257c65cfabe33c033897ba27b10232a29be4033ac391c0c0", + "expectException": "TransactionException.TYPE_3_TX_MAX_BLOB_GAS_ALLOWANCE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x4dec6cdeae5bde5a2e743bdecfd9fb58fbeff6b01d51c5ae9c274f2ab1fab413", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x87413205e068db30167044d42b0e8a4175ddd2c58c160b731875b94ba46d9479", + "stateRoot": "0x34a88ce849b19ea0e306f45fde32ae3ed9597d7ce51ad0502f8c9c0c1bd58f4f", "transactionsTrie": "0x9f28f3ed16e1a426feade81e6012bd222a2bdef4cc627fdcfc20e2a385be161d", - "receiptTrie": "0x10457e39b8c68ced2071538b4c7034fe68f9c666187fd6b2d6ddcc21149f0d10", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xa410", + "gasUsed": "0x5208", "timestamp": "0x0c", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4726,8 +4781,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbcf9e948711c80774b480d9ead00c8ec6868c4369c24d40fb78e555675195886" + "hash": "0xc1ad4383755d2959d57a1349712ae438611bbcc59471b103e044835471f1acbd" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_normal_gas.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_normal_gas.json index 271b6de34a9..e50945e30a1 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_normal_gas.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_normal_gas.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-insufficient_max_fee_per_gas": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_normal_gas[fork_Cancun-blockchain_test-insufficient_max_fee_per_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,23 +33,23 @@ }, "blocks": [ { - "rlp": "0xf902d1f90240a04348268a740c77b36e84b3bc28e502a753a517d1a3ccd4bbf00efbee2b494047a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b70452996c18d2897321be12cbe65c99b5619870503d4ef7c04203a6492946b6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080068252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0addeb69c5295c1ddd6fb930596ee852996564ce896acc1f69a226f6e440482bca07ba3ff1923416d370a26e28d364d2186ab2c3bf3d0094919b13b64d77c9879f2c0c0", - "expectException": "insufficient max fee per gas", + "rlp": "0xf902d3f90242a04348268a740c77b36e84b3bc28e502a753a517d1a3ccd4bbf00efbee2b494047a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0207cfdd9441cac27a6942ce79a0cdfbbc598a6e3687da39e238e9094c67bc250a0e45ed0b28c1eb3f40deebeef62c020fbe18c48e664eca3f8f37b86cd55ce3874a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080068252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0addeb69c5295c1ddd6fb930596ee852996564ce896acc1f69a226f6e440482bca07ba3ff1923416d370a26e28d364d2186ab2c3bf3d0094919b13b64d77c9879f2c0c0", + "expectException": "TransactionException.INSUFFICIENT_MAX_FEE_PER_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4348268a740c77b36e84b3bc28e502a753a517d1a3ccd4bbf00efbee2b494047", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xb70452996c18d2897321be12cbe65c99b5619870503d4ef7c04203a6492946b6", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x207cfdd9441cac27a6942ce79a0cdfbbc598a6e3687da39e238e9094c67bc250", + "transactionsTrie": "0xe45ed0b28c1eb3f40deebeef62c020fbe18c48e664eca3f8f37b86cd55ce3874", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -56,8 +57,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x8e5f44cda0a3a6c9f56ccb63ecc706007c98ea10adaf4f208e379219d5f59c08" + "hash": "0xf20a393f512f5378b6d04ac4771ef6e582e79a11e2859cc17ce2f0542807cb14" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_tx_blob_count.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_tx_blob_count.json index 7fd04e42b95..98752187975 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_tx_blob_count.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_tx_blob_count.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-too_few_blobs": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_tx_blob_count[fork_Cancun-blockchain_test-too_few_blobs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,23 +33,23 @@ }, "blocks": [ { - "rlp": "0xf902adf9023da0327e49c7a3ac30c7308a1c318a074d926ad6e4ef6885c58664bde91baea04fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0528ec623b44ac4e95faee7224facc3febfbe98d73368b01f83ad805f2657fea1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42180830e0000a00000000000000000000000000000000000000000000000000000000000000000f869b86703f864018080078252089400000000000000000000000000000000000001000180c001c080a0de3ecf0321e2d26c34d6b9bd1ffb5a30167abafd5ecacd477049544c23d402cda06c56b464881a4af7bb8216d47c6c5e3286395027af44044b3d7d31a2d24901f2c0c0", - "expectException": "zero blob tx", + "rlp": "0xf902aff9023fa0327e49c7a3ac30c7308a1c318a074d926ad6e4ef6885c58664bde91baea04fc4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f708e2d81ea9dc7ba9eb5bb224a9476e3a40521194dfb4784e2b86318bd2f8bfa05f4182316e8f571b2d046618dc2cb835bafbd5b61df4e4913329618ab07932bea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42180830e0000a00000000000000000000000000000000000000000000000000000000000000000f869b86703f864018080078252089400000000000000000000000000000000000001000180c001c080a0de3ecf0321e2d26c34d6b9bd1ffb5a30167abafd5ecacd477049544c23d402cda06c56b464881a4af7bb8216d47c6c5e3286395027af44044b3d7d31a2d24901f2c0c0", + "expectException": "TransactionException.TYPE_3_TX_ZERO_BLOBS", "rlp_decoded": { "blockHeader": { "parentHash": "0x327e49c7a3ac30c7308a1c318a074d926ad6e4ef6885c58664bde91baea04fc4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x528ec623b44ac4e95faee7224facc3febfbe98d73368b01f83ad805f2657fea1", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xf708e2d81ea9dc7ba9eb5bb224a9476e3a40521194dfb4784e2b86318bd2f8bf", + "transactionsTrie": "0x5f4182316e8f571b2d046618dc2cb835bafbd5b61df4e4913329618ab07932be", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -56,8 +57,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x99727d67f3ed7f531fd2ca26118fe3988e856a69ea090a28fb29c2dd937abe85" + "hash": "0xc4d6b3dd1a61c79c03badf50a2930c21af87d8f003bdaecab449d114896b508a" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -114,9 +116,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-too_many_blobs": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_tx_blob_count[fork_Cancun-blockchain_test-too_many_blobs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -147,23 +150,23 @@ }, "blocks": [ { - "rlp": "0xf9039df90242a09c823f5a5fff3d59eae97c2a49a6a32d7cdf474478e97fcd6fedb97e058052d3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c4e1946638e354f510a20898a1746fc3f047c089153990ae220f41fe8e993252a0a9f9ecaf41694501fe48865981e0e02ef87ef20d265b28a026ebf2e86cf0ada9a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b9015003f9014c018080078252089400000000000000000000000000000000000001000180c001f8e7a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a00100000000000000000000000000000000000000000000000000000000000005a0010000000000000000000000000000000000000000000000000000000000000601a0af0a7ac2ca1a38440aff74ef5585589516aaf73984ca8ebee703f42a54dab9f6a056fc83d4ea63ef0f3b40ef86d36f887df7c46bad309dca7ceda55a2ba985f7a1c0c0", - "expectException": "too many blobs", + "rlp": "0xf9039df90242a09c823f5a5fff3d59eae97c2a49a6a32d7cdf474478e97fcd6fedb97e058052d3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecf0818fee9f6dfa3e82e58c3a8597f555c8c6c01b1af5417ebc17c6ba73e8b1a0a9f9ecaf41694501fe48865981e0e02ef87ef20d265b28a026ebf2e86cf0ada9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830e0000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b9015003f9014c018080078252089400000000000000000000000000000000000001000180c001f8e7a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a00100000000000000000000000000000000000000000000000000000000000005a0010000000000000000000000000000000000000000000000000000000000000601a0af0a7ac2ca1a38440aff74ef5585589516aaf73984ca8ebee703f42a54dab9f6a056fc83d4ea63ef0f3b40ef86d36f887df7c46bad309dca7ceda55a2ba985f7a1c0c0", + "expectException": "TransactionException.TYPE_3_TX_BLOB_COUNT_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x9c823f5a5fff3d59eae97c2a49a6a32d7cdf474478e97fcd6fedb97e058052d3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc4e1946638e354f510a20898a1746fc3f047c089153990ae220f41fe8e993252", + "stateRoot": "0xecf0818fee9f6dfa3e82e58c3a8597f555c8c6c01b1af5417ebc17c6ba73e8b1", "transactionsTrie": "0xa9f9ecaf41694501fe48865981e0e02ef87ef20d265b28a026ebf2e86cf0ada9", - "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x5208", - "timestamp": "0x0c", - "extraData": "0x", + "gasUsed": "0x00", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -171,8 +174,9 @@ "blobGasUsed": "0x0e0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb174770ab720577a08687ca81a12aa1c31ca5c638bd1860cd85a301043a84760" + "hash": "0x20061ddb5c95b7921c574055b20d3de8002b1c3f9b5cadd16437f62008b2713e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_tx_max_fee_per_blob_gas.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_tx_max_fee_per_blob_gas.json index 57547f7cc83..96ad04f4215 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_tx_max_fee_per_blob_gas.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/invalid_tx_max_fee_per_blob_gas.json @@ -1,17 +1,18 @@ { - "000-fork=Cancun-insufficient_max_fee_per_blob_gas": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test-account_balance_modifier_1000000000-insufficient_max_fee_per_blob_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01f1479dc7ccab06a4b0d484baa2367b2b47037756b2b17703bd578465cb69f3ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083280000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fa675213e71b1e8e1281e3af588a3f932ad441a2cae83749704efeaba2c8d8c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083280000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1f1479dc7ccab06a4b0d484baa2367b2b47037756b2b17703bd578465cb69f3b", + "stateRoot": "0xfa675213e71b1e8e1281e3af588a3f932ad441a2cae83749704efeaba2c8d8c7", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -28,16 +29,16 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x280000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1137e62a890700dab4bbd885933a3e3f695ac966bd367dd90d8e9da9f2899733" + "hash": "0x098a9e5038e62c876150a80a1bde27ee77587355ed5643172493d9410c7002fd" }, "blocks": [ { - "rlp": "0xf90337f90242a01137e62a890700dab4bbd885933a3e3f695ac966bd367dd90d8e9da9f2899733a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0528985d69ae2ec25e6ff783e3cad5493e01c96ea8c0795e250a3e84868ecf028a0dc387fc6ef9e3eb53baa85df89a1f9b91a4a9ab472ee7e928b4b7fdc06dfa5d1a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218308000083220000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e9018080078252089400000000000000000000000000000000000002000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a09d3b9819ff46b57cd1b81d723626c8c7ef3ca97f4d2f964f57fc8516123ad7d7a026e752e7b657042b3ba543dc8a515772819deed8e646634f3625191b51ef448cc0c0", + "rlp": "0xf90337f90242a0098a9e5038e62c876150a80a1bde27ee77587355ed5643172493d9410c7002fda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0900628a7243d93bbb26c708cea7d363bcb126eb216a5992d7d9b462eb9f2d642a0dc387fc6ef9e3eb53baa85df89a1f9b91a4a9ab472ee7e928b4b7fdc06dfa5d1a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218308000083220000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e9018080078252089400000000000000000000000000000000000002000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000301a09d3b9819ff46b57cd1b81d723626c8c7ef3ca97f4d2f964f57fc8516123ad7d7a026e752e7b657042b3ba543dc8a515772819deed8e646634f3625191b51ef448cc0c0", "blockHeader": { - "parentHash": "0x1137e62a890700dab4bbd885933a3e3f695ac966bd367dd90d8e9da9f2899733", + "parentHash": "0x098a9e5038e62c876150a80a1bde27ee77587355ed5643172493d9410c7002fd", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x528985d69ae2ec25e6ff783e3cad5493e01c96ea8c0795e250a3e84868ecf028", + "stateRoot": "0x900628a7243d93bbb26c708cea7d363bcb126eb216a5992d7d9b462eb9f2d642", "transactionsTrie": "0xdc387fc6ef9e3eb53baa85df89a1f9b91a4a9ab472ee7e928b4b7fdc06dfa5d1", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -54,7 +55,7 @@ "blobGasUsed": "0x080000", "excessBlobGas": "0x220000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa0f6035c85669c43bf53dd8c4141ba13853871a051c8be68f63430e222192c27" + "hash": "0xb91acb72b67e251fc7a473409d8dc91a4aa1c2bf78a6c733ec02defc9943f313" }, "blocknumber": "1", "transactions": [ @@ -86,15 +87,15 @@ "withdrawals": [] }, { - "rlp": "0xf902d1f90240a0a0f6035c85669c43bf53dd8c4141ba13853871a051c8be68f63430e222192c27a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa088f4e11957ad01621ac155dd46f9d6a836e296cd869ef56a3e11f684bd30810aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a0000801880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083240000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", - "expectException": "insufficient max fee per blob gas", + "rlp": "0xf902d1f90240a0b91acb72b67e251fc7a473409d8dc91a4aa1c2bf78a6c733ec02defc9943f313a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0242a63fa2afe3294022ba3f52bb2ffca13875b56352f17be8dcdfa72db330e4fa0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a0000801880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083240000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", + "expectException": "TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS", "rlp_decoded": { "blockHeader": { - "parentHash": "0xa0f6035c85669c43bf53dd8c4141ba13853871a051c8be68f63430e222192c27", + "parentHash": "0xb91acb72b67e251fc7a473409d8dc91a4aa1c2bf78a6c733ec02defc9943f313", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x88f4e11957ad01621ac155dd46f9d6a836e296cd869ef56a3e11f684bd30810a", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x242a63fa2afe3294022ba3f52bb2ffca13875b56352f17be8dcdfa72db330e4f", + "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -110,8 +111,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x240000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xaebf0315015f552eeb84c9b2d9a7ba12d62f70b92cda256b43f3d8af45f05d26" + "hash": "0x3938dfd04f5f6d281529f17d80038b0e9edda60e39c596527e4ef0df9c2522c1" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -139,7 +141,7 @@ } } ], - "lastblockhash": "0xa0f6035c85669c43bf53dd8c4141ba13853871a051c8be68f63430e222192c27", + "lastblockhash": "0xb91acb72b67e251fc7a473409d8dc91a4aa1c2bf78a6c733ec02defc9943f313", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -155,7 +157,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e39", + "balance": "0x3b9f0839", "code": "0x", "storage": {} } @@ -183,26 +185,27 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x043e39", + "balance": "0x3b9f0839", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "001-fork=Cancun-invalid_max_fee_per_blob_gas": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_invalid_tx_max_fee_per_blob_gas[fork_Cancun-blockchain_test-account_balance_modifier_1000000000-invalid_max_fee_per_blob_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, "network": "Cancun", - "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00b9d1a267a43c569ccd0ff306f8e9056d6c75389839d4402bb616de8d0af901ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e4a04a57a3865f92a21f069dde95a492a2933ec833d9ac9041d101ab164c1b33a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0b9d1a267a43c569ccd0ff306f8e9056d6c75389839d4402bb616de8d0af901e", + "stateRoot": "0xe4a04a57a3865f92a21f069dde95a492a2933ec833d9ac9041d101ab164c1b33", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -219,19 +222,19 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9c51f354552b147d6bf4e2fe0fafd358b1bcae585341aa66b7b4af9eb165dee5" + "hash": "0xdd61cc81ea542a027660080b2ba0fe18e48dca7c1807507fdb72124a3b7504c0" }, "blocks": [ { - "rlp": "0xf902cef9023da09c51f354552b147d6bf4e2fe0fafd358b1bcae585341aa66b7b4af9eb165dee5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0528ec623b44ac4e95faee7224facc3febfbe98d73368b01f83ad805f2657fea1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c080e1a0010000000000000000000000000000000000000000000000000000000000000080a0df26254112c6a69f0cf31138ec90f834de7b3ffb6241107682ddb0fc5532030ca02e424096551ad5dc99439167e2bf4bb3de61f86e752a85b448d339d77bcda1b0c0c0", - "expectException": "invalid max fee per blob gas", + "rlp": "0xf902cef9023da0dd61cc81ea542a027660080b2ba0fe18e48dca7c1807507fdb72124a3b7504c0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa051704acb40513d28b94346f6fc8a92eab0b41f201a130f2b49efbab7ccc862d3a0d299124e251efbfaa412adde8910fe6144cc65e7752323f36a31d6a8d4143f77a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c080e1a0010000000000000000000000000000000000000000000000000000000000000080a0df26254112c6a69f0cf31138ec90f834de7b3ffb6241107682ddb0fc5532030ca02e424096551ad5dc99439167e2bf4bb3de61f86e752a85b448d339d77bcda1b0c0c0", + "expectException": "TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS", "rlp_decoded": { "blockHeader": { - "parentHash": "0x9c51f354552b147d6bf4e2fe0fafd358b1bcae585341aa66b7b4af9eb165dee5", + "parentHash": "0xdd61cc81ea542a027660080b2ba0fe18e48dca7c1807507fdb72124a3b7504c0", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x528ec623b44ac4e95faee7224facc3febfbe98d73368b01f83ad805f2657fea1", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x51704acb40513d28b94346f6fc8a92eab0b41f201a130f2b49efbab7ccc862d3", + "transactionsTrie": "0xd299124e251efbfaa412adde8910fe6144cc65e7752323f36a31d6a8d4143f77", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -247,8 +250,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe7620d61234fc13400097a16ee8e0aef1ba0394be6eac5e724fb956e36276cd5" + "hash": "0x10f6e56581d45416420f2e4b4604fbc843d48d0fde3b48d972d0631975c05c85" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -276,7 +280,7 @@ } } ], - "lastblockhash": "0x9c51f354552b147d6bf4e2fe0fafd358b1bcae585341aa66b7b4af9eb165dee5", + "lastblockhash": "0xdd61cc81ea542a027660080b2ba0fe18e48dca7c1807507fdb72124a3b7504c0", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -286,7 +290,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x023e39", + "balance": "0x3b9d0839", "code": "0x", "storage": {} } @@ -300,7 +304,7 @@ }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x023e39", + "balance": "0x3b9d0839", "code": "0x", "storage": {} } diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/sufficient_balance_blob_tx.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/sufficient_balance_blob_tx.json new file mode 100644 index 00000000000..6d02ef28113 --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/sufficient_balance_blob_tx.json @@ -0,0 +1,18218 @@ +{ + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0cb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a06d8e68965e73be6f56344cbec27d0145830aa287bfb88ff5e15e7a368df2e140a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0dca96ee8036da88f7870601739979abcb9e581823bb0539f1ee412e83c5a6654a06f763830fe86dfc591bbac5e70d47576bfaaf48d99ee399398b8e6b7de9f095ec0c0", + "blockHeader": { + "parentHash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0x6d8e68965e73be6f56344cbec27d0145830aa287bfb88ff5e15e7a368df2e140", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f974bfeabc3f973d49dbfd7ec05fb887b4ff3154f8b4c6c2603b532847ae2f2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xdca96ee8036da88f7870601739979abcb9e581823bb0539f1ee412e83c5a6654", + "s": "0x6f763830fe86dfc591bbac5e70d47576bfaaf48d99ee399398b8e6b7de9f095e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4f974bfeabc3f973d49dbfd7ec05fb887b4ff3154f8b4c6c2603b532847ae2f2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ad990f0dd03e2ba6cf130d10d841f4cefc994fa14000e10364e264ade621572ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xad990f0dd03e2ba6cf130d10d841f4cefc994fa14000e10364e264ade621572e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a032e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a07c786d65fb816fb69c237276e6d4b59358e44b67e01c02840e6c47cadb10c8eaa0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0231d9ee920a79f76ba95220ddc3c8dc0b434590470822fc9a3e0857988551881a050fe3aa2eed0dcb338e1b02297761a57f29d3a3eaaba5b0bfc99de731dc9cb4ac0c0", + "blockHeader": { + "parentHash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0x7c786d65fb816fb69c237276e6d4b59358e44b67e01c02840e6c47cadb10c8ea", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x730dec1e057ffb39c99313947cb0e1c4209c2d49cb851695e224d8599571403e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x231d9ee920a79f76ba95220ddc3c8dc0b434590470822fc9a3e0857988551881", + "s": "0x50fe3aa2eed0dcb338e1b02297761a57f29d3a3eaaba5b0bfc99de731dc9cb4a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x730dec1e057ffb39c99313947cb0e1c4209c2d49cb851695e224d8599571403e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06579cf5b9adff215b2eba9a8d9133d9a3d4d88365eb53f1887eb73c2596c6680a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6579cf5b9adff215b2eba9a8d9133d9a3d4d88365eb53f1887eb73c2596c6680", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a039d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68eaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f28358abf33559351080ce3f166942e957bdbfaf56c807d3f1317576d72f01a8a07d1a46a150fbbd3376b317ea9d38f5192fe4b8edef95a7050b04a5b4893c329ea0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0790db386a32f2a61fa904250e2e61f58284ed6ecde08d80b4143b6b2798cc647a01c09755ada6fc4836c1f82d3faedfff08f22333fa428770085aeb2ad33d56de4c0c0", + "blockHeader": { + "parentHash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf28358abf33559351080ce3f166942e957bdbfaf56c807d3f1317576d72f01a8", + "transactionsTrie": "0x7d1a46a150fbbd3376b317ea9d38f5192fe4b8edef95a7050b04a5b4893c329e", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd7eab9f1ed3ea452c8ee77614fb4fc79eb8dbddecfae94e3ac85a08ecac7d2a5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x790db386a32f2a61fa904250e2e61f58284ed6ecde08d80b4143b6b2798cc647", + "s": "0x1c09755ada6fc4836c1f82d3faedfff08f22333fa428770085aeb2ad33d56de4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd7eab9f1ed3ea452c8ee77614fb4fc79eb8dbddecfae94e3ac85a08ecac7d2a5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05b224a292d16711d6814fa0249afe93cd70181657790fa6f23128190d03cebc8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5b224a292d16711d6814fa0249afe93cd70181657790fa6f23128190d03cebc8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0dd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e915cb9a2a5397850a25f8de88c0eb94219927cd16c146d6bb1d57d44e984e91a044dcbba521228fac48dfb2979ffc53ca84a4e0f9cc37d931fef34d6167887c52a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a05a1caaf6469249c75dee8f45b645aedf2a4db37b07feb1f8855c71d17ad9621fa01ab9bb529e7f569dbf189e7d449abdd451a6312acc1f4b7721a47554477875b0c0c0", + "blockHeader": { + "parentHash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe915cb9a2a5397850a25f8de88c0eb94219927cd16c146d6bb1d57d44e984e91", + "transactionsTrie": "0x44dcbba521228fac48dfb2979ffc53ca84a4e0f9cc37d931fef34d6167887c52", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x632064108decb7f411e78e2dd9e01153ed0ee57e5ade93657279935a338cdd00" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5a1caaf6469249c75dee8f45b645aedf2a4db37b07feb1f8855c71d17ad9621f", + "s": "0x1ab9bb529e7f569dbf189e7d449abdd451a6312acc1f4b7721a47554477875b0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x632064108decb7f411e78e2dd9e01153ed0ee57e5ade93657279935a338cdd00", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4fc7860b0697f0704e3d0498ba1418a73b915f2c802a68a82e3c2fbc07fe30c7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0cb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a01158bf03210c79ac58259858c3035474b3c30d6ec6b096fad9e785b216e2cfa7a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0aaa491157c95990f67c3a61cbffd693ce560cae244b62081f489b0650ed192efa076308e18d21c81bce09aa7398c3c0275b6bb14a1cefe29bd90765a973c20ff9bc0c0", + "blockHeader": { + "parentHash": "0xcb295c514c7f05bf55bd502f1aae8de4faa0c5721e853644a9b80125be4f1d91", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0x1158bf03210c79ac58259858c3035474b3c30d6ec6b096fad9e785b216e2cfa7", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7e9253faa80a721bd6f8ab4c4082f1a839660197f15c13ac6f6d15bc5535627a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaaa491157c95990f67c3a61cbffd693ce560cae244b62081f489b0650ed192ef", + "s": "0x76308e18d21c81bce09aa7398c3c0275b6bb14a1cefe29bd90765a973c20ff9b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7e9253faa80a721bd6f8ab4c4082f1a839660197f15c13ac6f6d15bc5535627a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ad990f0dd03e2ba6cf130d10d841f4cefc994fa14000e10364e264ade621572ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xad990f0dd03e2ba6cf130d10d841f4cefc994fa14000e10364e264ade621572e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a032e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a0cb96c32d56a0565485f49d0f736ac53f5d57f13e9710f8eb670ceaf471822158a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0b3791ccacee7cfd0c378c4ddbdfc84a73dacfdff10d5b4a88df6e1a306082621a05d03c060954ae16625a512d58357ae6a19ffa098356522220c455c372b2a0724c0c0", + "blockHeader": { + "parentHash": "0x32e487a89bc4e67f912ee6ba68c26a55d903d1d42fa9a2c1756dce694aa1e49d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0xcb96c32d56a0565485f49d0f736ac53f5d57f13e9710f8eb670ceaf471822158", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x66ca925629dd5380eccac37438471ed505cdfaf5a29f1deee7feb3fb80ee7eb0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb3791ccacee7cfd0c378c4ddbdfc84a73dacfdff10d5b4a88df6e1a306082621", + "s": "0x5d03c060954ae16625a512d58357ae6a19ffa098356522220c455c372b2a0724", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x66ca925629dd5380eccac37438471ed505cdfaf5a29f1deee7feb3fb80ee7eb0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06579cf5b9adff215b2eba9a8d9133d9a3d4d88365eb53f1887eb73c2596c6680a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6579cf5b9adff215b2eba9a8d9133d9a3d4d88365eb53f1887eb73c2596c6680", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a039d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68eaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aa041d91ef41afe7533bb5d7d576ec28493f62cbe41b156af5de0e2988957633a0db7c06efccd9c45ccffa741bc33185c7a1bbd9278e85068c2249ff3f8c477b4fa0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0d15cf560343e72634e11af550d1d9a6ba27df5b89701846555dd832336be3d14a01fc0642ae659cb7e409af024d94b73740d70bb9b2c8ca95302c6588866b71a9ac0c0", + "blockHeader": { + "parentHash": "0x39d39b46615bdc21e80df306a4825e0f778bf42922ebeb5f28c2d160a72f68ea", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xaa041d91ef41afe7533bb5d7d576ec28493f62cbe41b156af5de0e2988957633", + "transactionsTrie": "0xdb7c06efccd9c45ccffa741bc33185c7a1bbd9278e85068c2249ff3f8c477b4f", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x322b72fc80159b33463c1e434bba0d30082db278cc89bad404177ebd07bd7686" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xd15cf560343e72634e11af550d1d9a6ba27df5b89701846555dd832336be3d14", + "s": "0x1fc0642ae659cb7e409af024d94b73740d70bb9b2c8ca95302c6588866b71a9a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x322b72fc80159b33463c1e434bba0d30082db278cc89bad404177ebd07bd7686", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05b224a292d16711d6814fa0249afe93cd70181657790fa6f23128190d03cebc8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5b224a292d16711d6814fa0249afe93cd70181657790fa6f23128190d03cebc8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0dd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ed00ee3f268621fc4cfb47a1ac40a5211418a7d617ba06b1758bf40b24133688a087845f12a8a229b1bf9c43220350a309c45ea4bc4facd2ee5c17df23a525cc0ea0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0920cda466b2e2a0c0bdb9299fafe51c8404726bf6066d19e2d2deaa901302fb3a00c31aea19992ad8fd671af4a88ad02440200457dfdd1793bea050e6c5541d962c0c0", + "blockHeader": { + "parentHash": "0xdd856b969d511e7098791e5f46d4b31bf8e04e5a50124ab6ad8daba0e5396e33", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xed00ee3f268621fc4cfb47a1ac40a5211418a7d617ba06b1758bf40b24133688", + "transactionsTrie": "0x87845f12a8a229b1bf9c43220350a309c45ea4bc4facd2ee5c17df23a525cc0e", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5ec922bc31a7c33428f9d99f4e836f58d07f0b96d7976bfe8f739388d2fa435b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x920cda466b2e2a0c0bdb9299fafe51c8404726bf6066d19e2d2deaa901302fb3", + "s": "0x0c31aea19992ad8fd671af4a88ad02440200457dfdd1793bea050e6c5541d962", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5ec922bc31a7c33428f9d99f4e836f58d07f0b96d7976bfe8f739388d2fa435b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a07832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea0da80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", + "blockHeader": { + "parentHash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0xda80a6acad2089c995d9df6604f54f2102eb7a3bc73b001957ef851ee3606902", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0c6127060f5b41cf7ccc706c8483121f12239f9f3e72a1aeb20b2745ceb44bcd" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xa8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3c", + "s": "0x19d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x0c6127060f5b41cf7ccc706c8483121f12239f9f3e72a1aeb20b2745ceb44bcd", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0afed2048ce948403867a5ef1de007815f6c5eb0d83b75801864b8537670d436fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xafed2048ce948403867a5ef1de007815f6c5eb0d83b75801864b8537670d436f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x97b2cc6dd224e4d46a7dfe37029cb7d8e77ede0ef3fb417759808095197246cf" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a097b2cc6dd224e4d46a7dfe37029cb7d8e77ede0ef3fb417759808095197246cfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea0bd0ee0fa631e8f166da61efcca8b2409f766f580a3ea86556c765adee127ac34a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0190431c9260ce3a7aadb89d9096ddadad99cae489d8522ded951c69648ea5a4fa035c57b199b3f9bfacbbaad7016a4883bddde3cd9f899b9b4effe158cb42eaaebc0c0", + "blockHeader": { + "parentHash": "0x97b2cc6dd224e4d46a7dfe37029cb7d8e77ede0ef3fb417759808095197246cf", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0xbd0ee0fa631e8f166da61efcca8b2409f766f580a3ea86556c765adee127ac34", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x34116829299c8e00d2d8c5f2d8decf7d007aa10ce1a8154f95a39a296e1dafb9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x190431c9260ce3a7aadb89d9096ddadad99cae489d8522ded951c69648ea5a4f", + "s": "0x35c57b199b3f9bfacbbaad7016a4883bddde3cd9f899b9b4effe158cb42eaaeb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x34116829299c8e00d2d8c5f2d8decf7d007aa10ce1a8154f95a39a296e1dafb9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7c1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08f68db01b03db21430667308f31a17dda14f8db36994a2eea8e7a1f4675cd9afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8f68db01b03db21430667308f31a17dda14f8db36994a2eea8e7a1f4675cd9af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3e5a767377c0b0b7e708440fa25f9c78ab4c393ee1eb693c1c4754e24b176572" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a03e5a767377c0b0b7e708440fa25f9c78ab4c393ee1eb693c1c4754e24b176572a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0931902f6cd4fb18b52def40cccae03007ea46636fea9f81cbe164437580dbbeea03d1c95cd36c11fb9e62d41f77dbecb0702f3e48a04953589b21b9225273af0dba0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a00a7af01b973d08cfb7788839808143ccfd0925f78e58d6f9af35ec955c4145d5a04a3206e6255ab16fde00a9ccf7ef66302551a5e808591d2ea6beadfcf64d5b2cc0c0", + "blockHeader": { + "parentHash": "0x3e5a767377c0b0b7e708440fa25f9c78ab4c393ee1eb693c1c4754e24b176572", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x931902f6cd4fb18b52def40cccae03007ea46636fea9f81cbe164437580dbbee", + "transactionsTrie": "0x3d1c95cd36c11fb9e62d41f77dbecb0702f3e48a04953589b21b9225273af0db", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd44e55d2c4aa90577553eaab6cb6867e5c9007f7f1dd0fd902516f55f1b56d1e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x0a7af01b973d08cfb7788839808143ccfd0925f78e58d6f9af35ec955c4145d5", + "s": "0x4a3206e6255ab16fde00a9ccf7ef66302551a5e808591d2ea6beadfcf64d5b2c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd44e55d2c4aa90577553eaab6cb6867e5c9007f7f1dd0fd902516f55f1b56d1e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c71", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05cb6711bbc0b107a16fb371c32cb3c72bba5b724774a4f07623fc13682a82bdca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5cb6711bbc0b107a16fb371c32cb3c72bba5b724774a4f07623fc13682a82bdc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7f875f13783898050c87c5cb064be713da3e93a00ea45d96c6711ac6b207bb3c" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a07f875f13783898050c87c5cb064be713da3e93a00ea45d96c6711ac6b207bb3ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d317d495d85d8662846fc5f86c480889ac87bdd55a9d39ef49241fe5ca125461a03d851dee1bddab8a902f3878c304e1a13d0d0b7767e4ea1515e5438f0885a5bca0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0a36355b6293352f334e73ee4aeecf400a0f28ceea256ee7c7bdd4e73ba73f132a0753117fff56fff8d0522f344bfd6fa96663242917ba835ef810551f2780d4224c0c0", + "blockHeader": { + "parentHash": "0x7f875f13783898050c87c5cb064be713da3e93a00ea45d96c6711ac6b207bb3c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd317d495d85d8662846fc5f86c480889ac87bdd55a9d39ef49241fe5ca125461", + "transactionsTrie": "0x3d851dee1bddab8a902f3878c304e1a13d0d0b7767e4ea1515e5438f0885a5bc", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9dd6dcfcfbf8ec8ce184aa4cc0ca26b2aa28ba56178a7de25c20e7a1d53793f5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa36355b6293352f334e73ee4aeecf400a0f28ceea256ee7c7bdd4e73ba73f132", + "s": "0x753117fff56fff8d0522f344bfd6fa96663242917ba835ef810551f2780d4224", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9dd6dcfcfbf8ec8ce184aa4cc0ca26b2aa28ba56178a7de25c20e7a1d53793f5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cf81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7fab0d9bb5daf1b7c053b0c3b218fedef9522118a58e8f067965f20c9626f139", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a07832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea07d0e64d1f75372483a799b52f416a965de134d69aa1a7c1b8ace4be91cc984bea0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0e124bbb45daf2d0803a476a59864ef5fc1b24877e0d64ce75ef2d61f298e9aaca00386c51e69fee300077c3e64635f9e85c805b2fb94b419514672b171e2e79b6ec0c0", + "blockHeader": { + "parentHash": "0x7832176e4fd6720837c84e01c215eb3492bfec0d85371f492b49272f29aa5444", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x7d0e64d1f75372483a799b52f416a965de134d69aa1a7c1b8ace4be91cc984be", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x65efe7521670f7689d98915a952c84dc0a6a9c592426033bf3f4cfd5482af09d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xe124bbb45daf2d0803a476a59864ef5fc1b24877e0d64ce75ef2d61f298e9aac", + "s": "0x0386c51e69fee300077c3e64635f9e85c805b2fb94b419514672b171e2e79b6e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x65efe7521670f7689d98915a952c84dc0a6a9c592426033bf3f4cfd5482af09d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0afed2048ce948403867a5ef1de007815f6c5eb0d83b75801864b8537670d436fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xafed2048ce948403867a5ef1de007815f6c5eb0d83b75801864b8537670d436f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x97b2cc6dd224e4d46a7dfe37029cb7d8e77ede0ef3fb417759808095197246cf" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a097b2cc6dd224e4d46a7dfe37029cb7d8e77ede0ef3fb417759808095197246cfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea011931e2aead540ee82d8cd7dbbd59206fb7a9936bbab7e442f86d9e11c52e0d0a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a094519cff6477fad916443eff9b13139b08e7323688cb76ad8c069efbbc06b981a0378016270813415c8b05bb2e0855f0b0c444a8f2d2f767b332a7e4eecb58d367c0c0", + "blockHeader": { + "parentHash": "0x97b2cc6dd224e4d46a7dfe37029cb7d8e77ede0ef3fb417759808095197246cf", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x11931e2aead540ee82d8cd7dbbd59206fb7a9936bbab7e442f86d9e11c52e0d0", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8b6168ce89d19c9b6ae87f3032145689dafe36cffc41ac2c36bbda6fef6cb742" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x94519cff6477fad916443eff9b13139b08e7323688cb76ad8c069efbbc06b981", + "s": "0x378016270813415c8b05bb2e0855f0b0c444a8f2d2f767b332a7e4eecb58d367", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8b6168ce89d19c9b6ae87f3032145689dafe36cffc41ac2c36bbda6fef6cb742", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7c1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08f68db01b03db21430667308f31a17dda14f8db36994a2eea8e7a1f4675cd9afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8f68db01b03db21430667308f31a17dda14f8db36994a2eea8e7a1f4675cd9af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3e5a767377c0b0b7e708440fa25f9c78ab4c393ee1eb693c1c4754e24b176572" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a03e5a767377c0b0b7e708440fa25f9c78ab4c393ee1eb693c1c4754e24b176572a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d1c4bd09473b06cc20caf173dc96a3650fcffda3a01468531af67a0246863265a0279060587b84b3659ac3b72fa584186b82547c10d63d2a0e9a19e9c5156b307ba0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0624a140b38ed4cf7d86f49a3ab909b9658b16a4b3d07c45254a730501e2b86a3a00bfdd1e081bbabd86bb4b18047a78cab739f6f9be8a6c1126d5f2c456b63fb95c0c0", + "blockHeader": { + "parentHash": "0x3e5a767377c0b0b7e708440fa25f9c78ab4c393ee1eb693c1c4754e24b176572", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd1c4bd09473b06cc20caf173dc96a3650fcffda3a01468531af67a0246863265", + "transactionsTrie": "0x279060587b84b3659ac3b72fa584186b82547c10d63d2a0e9a19e9c5156b307b", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb55e54040950f969ccbe95447785d2df927c7698cad33f679426172073d0d6af" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x624a140b38ed4cf7d86f49a3ab909b9658b16a4b3d07c45254a730501e2b86a3", + "s": "0x0bfdd1e081bbabd86bb4b18047a78cab739f6f9be8a6c1126d5f2c456b63fb95", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb55e54040950f969ccbe95447785d2df927c7698cad33f679426172073d0d6af", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067c71", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05cb6711bbc0b107a16fb371c32cb3c72bba5b724774a4f07623fc13682a82bdca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5cb6711bbc0b107a16fb371c32cb3c72bba5b724774a4f07623fc13682a82bdc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7f875f13783898050c87c5cb064be713da3e93a00ea45d96c6711ac6b207bb3c" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a07f875f13783898050c87c5cb064be713da3e93a00ea45d96c6711ac6b207bb3ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b0c9c407b1c2b10da171e301e7a7d68bce6f527d31df7675aef138f14188df09a02c8e51ab121b63cd95074e56d2d0c9d26a8c7234df08f6ea87cdd3fccad1938ea0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0edf6da8461c595f9fc37af1beeabac52894d5a1424a1f83224f54a50303dc71fa04ab3cb3fa04b24975aa59ee374807eabb654d8ce041247b50f84a9bf6fb5ef6fc0c0", + "blockHeader": { + "parentHash": "0x7f875f13783898050c87c5cb064be713da3e93a00ea45d96c6711ac6b207bb3c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb0c9c407b1c2b10da171e301e7a7d68bce6f527d31df7675aef138f14188df09", + "transactionsTrie": "0x2c8e51ab121b63cd95074e56d2d0c9d26a8c7234df08f6ea87cdd3fccad1938e", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9281ca66b908a1be49f5a6c7ff829d5530f49053a535449ed1003fdee043c443" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xedf6da8461c595f9fc37af1beeabac52894d5a1424a1f83224f54a50303dc71f", + "s": "0x4ab3cb3fa04b24975aa59ee374807eabb654d8ce041247b50f84a9bf6fb5ef6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9281ca66b908a1be49f5a6c7ff829d5530f49053a535449ed1003fdee043c443", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cf81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0aa8fb992a4483e12456078576088af0cbfb3f12a8e0ec44c7994ae63bfd1a925a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaa8fb992a4483e12456078576088af0cbfb3f12a8e0ec44c7994ae63bfd1a925", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a024e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a06fb2250c55086a4dca1665a0f319d8e1c7915c49c0266c0a737cd0348fd11bc4a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0d63db34ac58ec38d12d12ce50c32c7ffc0a12b9c96e0073da56118a02e1c20c0a00479d9be99ba0ae77b7d2d68c89d497a0912e45aa79cc7d7675ed02e4148e8a9c0c0", + "blockHeader": { + "parentHash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0x6fb2250c55086a4dca1665a0f319d8e1c7915c49c0266c0a737cd0348fd11bc4", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa65d5f06f1cfeadfe1bac31966de874f11f228fe791f38d307a09f7d76da560c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xd63db34ac58ec38d12d12ce50c32c7ffc0a12b9c96e0073da56118a02e1c20c0", + "s": "0x0479d9be99ba0ae77b7d2d68c89d497a0912e45aa79cc7d7675ed02e4148e8a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa65d5f06f1cfeadfe1bac31966de874f11f228fe791f38d307a09f7d76da560c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0afb183b66d53020f194c696741e227594e4d775917ebc43b3eae49a3f89cc77aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xafb183b66d53020f194c696741e227594e4d775917ebc43b3eae49a3f89cc77a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a00cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a011cf23f643ddb923dd6fb5e7c801206a6e5a3844d0ad269d052e4e7166ab87f5a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0292e89c324207a7478f4e9e39bdfb2b11c7e772b004cb543673df94d2887ccdea056d43c6b2fcdf6728dbeb8c96ff09f9a82775869f83835ab4b05aee56cf7ad6fc0c0", + "blockHeader": { + "parentHash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0x11cf23f643ddb923dd6fb5e7c801206a6e5a3844d0ad269d052e4e7166ab87f5", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa45af836be1577a50fad2b1fda713521ef9e0ccff140de8093ab7449014fec2c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x292e89c324207a7478f4e9e39bdfb2b11c7e772b004cb543673df94d2887ccde", + "s": "0x56d43c6b2fcdf6728dbeb8c96ff09f9a82775869f83835ab4b05aee56cf7ad6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa45af836be1577a50fad2b1fda713521ef9e0ccff140de8093ab7449014fec2c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0db1ad62d83c53fd0aae9ed1eb80aaaa3bccf3c8aa0346e6ac32b9b3ac968a097a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdb1ad62d83c53fd0aae9ed1eb80aaaa3bccf3c8aa0346e6ac32b9b3ac968a097", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dffce0825938452f0d166eeaef2264d16722a1abd4e71015f64a96f7a894c861a0557715b6780aebf8a0a426024cefcaaff18bbb785653d1859765e3fda29f4707a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e82520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000080a05f88705bb859d673345755d0405b6dc4787bb00ba41bce9cb43f5f4b06ddee0fa04965b9f492f0e4ef3b4fdc72b98309a14a00ad06c6bb46e566e3093025cfa94fc0c0", + "blockHeader": { + "parentHash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xdffce0825938452f0d166eeaef2264d16722a1abd4e71015f64a96f7a894c861", + "transactionsTrie": "0x557715b6780aebf8a0a426024cefcaaff18bbb785653d1859765e3fda29f4707", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x354ddccab67604164b4099d77f85f903438541b6ec72d7e67192bc39c9f4f03c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x5f88705bb859d673345755d0405b6dc4787bb00ba41bce9cb43f5f4b06ddee0f", + "s": "0x4965b9f492f0e4ef3b4fdc72b98309a14a00ad06c6bb46e566e3093025cfa94f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x354ddccab67604164b4099d77f85f903438541b6ec72d7e67192bc39c9f4f03c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bbb6ac24b3db4fcbb97f833f306e0d09de57ea67d908481571c171cd3b0368c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbbb6ac24b3db4fcbb97f833f306e0d09de57ea67d908481571c171cd3b0368c7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a05d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09bd828ea0679409c58872db9c0aefef3ec3be099b8538e85bdc8ceeb6bb92c5ca0b4e2bc042dca3e98aa184157a9d26704b03274a437a927c5b07d30d225097f18a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a01212dd963b86a994ea29bac5adceb1b164f3c394f672e9cb7fa09eb662b49fd3a03996bdb0f963b0c9e86ce0cb114101c5c5679029c8cfbe35e5a609e913d6dd38c0c0", + "blockHeader": { + "parentHash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9bd828ea0679409c58872db9c0aefef3ec3be099b8538e85bdc8ceeb6bb92c5c", + "transactionsTrie": "0xb4e2bc042dca3e98aa184157a9d26704b03274a437a927c5b07d30d225097f18", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd113c49a2bf9acd5d597de5f91211000a62a7eae0349570f51f16144f71b2bca" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x1212dd963b86a994ea29bac5adceb1b164f3c394f672e9cb7fa09eb662b49fd3", + "s": "0x3996bdb0f963b0c9e86ce0cb114101c5c5679029c8cfbe35e5a609e913d6dd38", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd113c49a2bf9acd5d597de5f91211000a62a7eae0349570f51f16144f71b2bca", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0aa8fb992a4483e12456078576088af0cbfb3f12a8e0ec44c7994ae63bfd1a925a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaa8fb992a4483e12456078576088af0cbfb3f12a8e0ec44c7994ae63bfd1a925", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a024e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a03d7f395c0cec63a58d6d86d575ec725bab0aa1ae8e86c1f19009608b82a727bba083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070782520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000080a00915c912e976133b6671b1c386032d861fe05162455ee0dc06f48bc9ae57af92a06e1fc3d16717d2aa3a3445a29aaa7498771f57b7ca0278da129695f364f4ed1ac0c0", + "blockHeader": { + "parentHash": "0x24e624c60f22d84c84684a4679b302cc5578e49a70363e57a4e6c747db212f4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0x3d7f395c0cec63a58d6d86d575ec725bab0aa1ae8e86c1f19009608b82a727bb", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xeddd253c4dbbce01c011a17911af27546b04a4550f5eff96b594287f86bed87c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0915c912e976133b6671b1c386032d861fe05162455ee0dc06f48bc9ae57af92", + "s": "0x6e1fc3d16717d2aa3a3445a29aaa7498771f57b7ca0278da129695f364f4ed1a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xeddd253c4dbbce01c011a17911af27546b04a4550f5eff96b594287f86bed87c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0afb183b66d53020f194c696741e227594e4d775917ebc43b3eae49a3f89cc77aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xafb183b66d53020f194c696741e227594e4d775917ebc43b3eae49a3f89cc77a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a00cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a0daed9f41bc045dcf3198ac34cc5ab313d411deee9bb5d9d2e6aaf2e660c5aebfa05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0d9fe1e438a9b3d91bf162e5c13d40dbd1f015d31c435f4d113e6b8c485389ee6a00712255536b24cf29d6716bc80a2dcf50327ba39be52308ddaded33a7865c0e3c0c0", + "blockHeader": { + "parentHash": "0x0cfe8946c658092f5f1c7200b39bacc0ddbddb87b3fb2e0af8a0bf323f457799", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0xdaed9f41bc045dcf3198ac34cc5ab313d411deee9bb5d9d2e6aaf2e660c5aebf", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x058f4296b25cedbbce09cfc6491a8610397071b6c62ab8b151c5a496001b3b0b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xd9fe1e438a9b3d91bf162e5c13d40dbd1f015d31c435f4d113e6b8c485389ee6", + "s": "0x0712255536b24cf29d6716bc80a2dcf50327ba39be52308ddaded33a7865c0e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x058f4296b25cedbbce09cfc6491a8610397071b6c62ab8b151c5a496001b3b0b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0db1ad62d83c53fd0aae9ed1eb80aaaa3bccf3c8aa0346e6ac32b9b3ac968a097a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdb1ad62d83c53fd0aae9ed1eb80aaaa3bccf3c8aa0346e6ac32b9b3ac968a097", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e5d8fbdc39b4b7883fc66eb2d5bd922d9899b1848c8f13a1d4a95c1a35ff18a9a0f4e3fdca083eeb84f31f8dec68b1a127b39af3448ecb07e1f14407dee2a52bc1a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e82520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06853cf535868b0816ad0556ebeca098be6e4a272d191948fafd99242d8e7e587a07362db7dc501b0784860424427c60e39f098f25bae42a19f40425c523cdb5d83c0c0", + "blockHeader": { + "parentHash": "0x976f932c2841b02c75ce4f9b52c7d226847c9c16f0d09ee305a1d6bed5bd4e4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe5d8fbdc39b4b7883fc66eb2d5bd922d9899b1848c8f13a1d4a95c1a35ff18a9", + "transactionsTrie": "0xf4e3fdca083eeb84f31f8dec68b1a127b39af3448ecb07e1f14407dee2a52bc1", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8aff0a2eefa272010deb9d68ed6a4fffda1acdde0c8f47b3cc126248de94e797" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6853cf535868b0816ad0556ebeca098be6e4a272d191948fafd99242d8e7e587", + "s": "0x7362db7dc501b0784860424427c60e39f098f25bae42a19f40425c523cdb5d83", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8aff0a2eefa272010deb9d68ed6a4fffda1acdde0c8f47b3cc126248de94e797", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bbb6ac24b3db4fcbb97f833f306e0d09de57ea67d908481571c171cd3b0368c7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbbb6ac24b3db4fcbb97f833f306e0d09de57ea67d908481571c171cd3b0368c7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a05d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa036b457d121358802a5e725cc41a48405723cba1cc7172c2b62e9de181d1a2f66a0a9dcfbaf62c5ca3419b24cd727c071dadaa48a16233a45a5980322df10a18ddea05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0f64e93e9ea155f73f074672dfd6ec7c3e11e3695a13f6e61fd22f8680a3e8790a01d51713aae874deb23a3580c92212d13e11ff8f99d5ebeed5045e27fdaa60f10c0c0", + "blockHeader": { + "parentHash": "0x5d6bfb1b493a4b94bb7270d731d9243faa5be2f547883dde1b2da5a161a059bc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x36b457d121358802a5e725cc41a48405723cba1cc7172c2b62e9de181d1a2f66", + "transactionsTrie": "0xa9dcfbaf62c5ca3419b24cd727c071dadaa48a16233a45a5980322df10a18dde", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xde2bb2768217510e526af01b3dc90a1ee0dbfdf4711e7e98cd21f549163d7fdb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xf64e93e9ea155f73f074672dfd6ec7c3e11e3695a13f6e61fd22f8680a3e8790", + "s": "0x1d51713aae874deb23a3580c92212d13e11ff8f99d5ebeed5045e27fdaa60f10", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xde2bb2768217510e526af01b3dc90a1ee0dbfdf4711e7e98cd21f549163d7fdb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06b9c9099bb130a9b2cd6ab3ba57c3b4341712777dbbe93e597479047f664886aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6b9c9099bb130a9b2cd6ab3ba57c3b4341712777dbbe93e597479047f664886a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8c49d9bee90a2541e9ae313147e115b82b698f451b8391348eb786805d3f96ec" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a08c49d9bee90a2541e9ae313147e115b82b698f451b8391348eb786805d3f96eca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea0df3d3210e6701142c63eee1191ba213ebf77aed52ec4dd37e0c92496e367c472a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0703aa500a86c6fdaf42c6d911603adbe2b76169e1b197b8aafcc8875a3eb0feda006cc33c2670ab1c6de81af8044eacf09d652449d41625141d8a99343234ba66bc0c0", + "blockHeader": { + "parentHash": "0x8c49d9bee90a2541e9ae313147e115b82b698f451b8391348eb786805d3f96ec", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0xdf3d3210e6701142c63eee1191ba213ebf77aed52ec4dd37e0c92496e367c472", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xebbec62c4700dd4c82d938dbf7376afe6940d956e3fdb471e272e0fa6315e8e9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x703aa500a86c6fdaf42c6d911603adbe2b76169e1b197b8aafcc8875a3eb0fed", + "s": "0x06cc33c2670ab1c6de81af8044eacf09d652449d41625141d8a99343234ba66b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xebbec62c4700dd4c82d938dbf7376afe6940d956e3fdb471e272e0fa6315e8e9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e55", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02d278b73a3cb403ad89828372af244697967f77f338e9b46e741ca62d8d46e72a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2d278b73a3cb403ad89828372af244697967f77f338e9b46e741ca62d8d46e72", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xff56f4d322872204e1ed33b2227fabdce2c782dd62a0dbeeec4a702e34ab2d97" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0ff56f4d322872204e1ed33b2227fabdce2c782dd62a0dbeeec4a702e34ab2d97a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea05a95af14845332ad94fa8ec3338b6f37cc9aa6747187350df82b87e5caefc77ca05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0a634a3fffd4f15bce2dbe4e02e84d6061b6b6b3b260886a3c670173e497628cca066561151ee507f9a15697b91636c537114a259bd7667697072f48037e3102705c0c0", + "blockHeader": { + "parentHash": "0xff56f4d322872204e1ed33b2227fabdce2c782dd62a0dbeeec4a702e34ab2d97", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x5a95af14845332ad94fa8ec3338b6f37cc9aa6747187350df82b87e5caefc77c", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x219a16f746da3d9edbb6652742621c4771f05240d9b5e498ab1248b0972719b5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xa634a3fffd4f15bce2dbe4e02e84d6061b6b6b3b260886a3c670173e497628cc", + "s": "0x66561151ee507f9a15697b91636c537114a259bd7667697072f48037e3102705", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x219a16f746da3d9edbb6652742621c4771f05240d9b5e498ab1248b0972719b5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7dd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0364165eddd29a4319234e9ad451b02bd2bb3935bf6deef56be3d42cb5c92d66da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x364165eddd29a4319234e9ad451b02bd2bb3935bf6deef56be3d42cb5c92d66d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x24b4985f8e3102bbdec85f94c90458f276d62d1d06212b2d4f6505dbe5b6fab2" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a024b4985f8e3102bbdec85f94c90458f276d62d1d06212b2d4f6505dbe5b6fab2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e8e1682f03d3f437d3ee905d60603f7e707b0bf9e274ae0e2ff0a272c90d72b1a08af0e662a094b3158560c3898730f1527c1075e9d3796a37e4848fde5babe1a5a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e82520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0a0649ae6e408661fce3b932e6fb5a337bd778aa46f2b8a397f6d0ca4fa29a444a038aef9bd08580b41755dd8227945d0efb29e1ff3ac51a856dc66875d49ba0794c0c0", + "blockHeader": { + "parentHash": "0x24b4985f8e3102bbdec85f94c90458f276d62d1d06212b2d4f6505dbe5b6fab2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe8e1682f03d3f437d3ee905d60603f7e707b0bf9e274ae0e2ff0a272c90d72b1", + "transactionsTrie": "0x8af0e662a094b3158560c3898730f1527c1075e9d3796a37e4848fde5babe1a5", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9f4398da74bfc27594eff3121f311caccc22b1e35dd987510ede739b61876b3a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa0649ae6e408661fce3b932e6fb5a337bd778aa46f2b8a397f6d0ca4fa29a444", + "s": "0x38aef9bd08580b41755dd8227945d0efb29e1ff3ac51a856dc66875d49ba0794", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9f4398da74bfc27594eff3121f311caccc22b1e35dd987510ede739b61876b3a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a067e92a4786ad79b766820618c6ce224f8d4dc2f66491e6dbee5a352ff814855fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x67e92a4786ad79b766820618c6ce224f8d4dc2f66491e6dbee5a352ff814855f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0af961f610f65733ba34c768cc8cf4c0dc2210f2c45ecaaa4b19bba1b4317cc3" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a00af961f610f65733ba34c768cc8cf4c0dc2210f2c45ecaaa4b19bba1b4317cc3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa008b34397a78eb4cf7281ac225dac6c60de15cd95e5542c46b0812efb12fb37d3a0b40d96254da8634230ccffab6d5339d62dd626c6794168fe99f194dec1010dcaa05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a08ac063a37a0cce37e416eaf259b2ec6fc933213e7fd2fad3d398e1f9dfebdf5da0168dbf0e956fdc3640470db838436c7aec888358a660fd20d88949459d61d109c0c0", + "blockHeader": { + "parentHash": "0x0af961f610f65733ba34c768cc8cf4c0dc2210f2c45ecaaa4b19bba1b4317cc3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x08b34397a78eb4cf7281ac225dac6c60de15cd95e5542c46b0812efb12fb37d3", + "transactionsTrie": "0xb40d96254da8634230ccffab6d5339d62dd626c6794168fe99f194dec1010dca", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4de0063413ea5d5affd470b7f6b7a3669d11d6c89cb514120a24d5be41657ba5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8ac063a37a0cce37e416eaf259b2ec6fc933213e7fd2fad3d398e1f9dfebdf5d", + "s": "0x168dbf0e956fdc3640470db838436c7aec888358a660fd20d88949459d61d109", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4de0063413ea5d5affd470b7f6b7a3669d11d6c89cb514120a24d5be41657ba5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06b9c9099bb130a9b2cd6ab3ba57c3b4341712777dbbe93e597479047f664886aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6b9c9099bb130a9b2cd6ab3ba57c3b4341712777dbbe93e597479047f664886a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8c49d9bee90a2541e9ae313147e115b82b698f451b8391348eb786805d3f96ec" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a08c49d9bee90a2541e9ae313147e115b82b698f451b8391348eb786805d3f96eca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea09428fa4766f398c4b27a4997159b5b3a719c2b06f05ccd253df1df27593507f7a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070782520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0434bec1c9893eaee4a25fae57740934e9aaadebf06f31ddbb942a49a9d4527a7a07e7b4e7c75affa9240c2c75901235acd72db9ccf283915a00530063c6a738fc7c0c0", + "blockHeader": { + "parentHash": "0x8c49d9bee90a2541e9ae313147e115b82b698f451b8391348eb786805d3f96ec", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x9428fa4766f398c4b27a4997159b5b3a719c2b06f05ccd253df1df27593507f7", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x480574497829026691ee56368ca7bc0e10d8c9cdeae2813c241514a05133084c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x434bec1c9893eaee4a25fae57740934e9aaadebf06f31ddbb942a49a9d4527a7", + "s": "0x7e7b4e7c75affa9240c2c75901235acd72db9ccf283915a00530063c6a738fc7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x480574497829026691ee56368ca7bc0e10d8c9cdeae2813c241514a05133084c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043e55", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02d278b73a3cb403ad89828372af244697967f77f338e9b46e741ca62d8d46e72a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2d278b73a3cb403ad89828372af244697967f77f338e9b46e741ca62d8d46e72", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xff56f4d322872204e1ed33b2227fabdce2c782dd62a0dbeeec4a702e34ab2d97" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0ff56f4d322872204e1ed33b2227fabdce2c782dd62a0dbeeec4a702e34ab2d97a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea02f6925cd8e23339c36f7979eac338593b53f7476b839bbbeeffec3d8d8727307a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0702d0dff58e3d98b762b455db3217c937e6715afb73f3b9409a79d4b12abfbbba06921ef68f62aa985b464682a39282a7ff105b3ac8fbdbdf2f59267cdfbbdf294c0c0", + "blockHeader": { + "parentHash": "0xff56f4d322872204e1ed33b2227fabdce2c782dd62a0dbeeec4a702e34ab2d97", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x2f6925cd8e23339c36f7979eac338593b53f7476b839bbbeeffec3d8d8727307", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcccb7bf56829e3e8c01c9eba25f15d341103acd02daead5fa0d005a5c9b9c52b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x702d0dff58e3d98b762b455db3217c937e6715afb73f3b9409a79d4b12abfbbb", + "s": "0x6921ef68f62aa985b464682a39282a7ff105b3ac8fbdbdf2f59267cdfbbdf294", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xcccb7bf56829e3e8c01c9eba25f15d341103acd02daead5fa0d005a5c9b9c52b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e7dd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0364165eddd29a4319234e9ad451b02bd2bb3935bf6deef56be3d42cb5c92d66da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x364165eddd29a4319234e9ad451b02bd2bb3935bf6deef56be3d42cb5c92d66d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x24b4985f8e3102bbdec85f94c90458f276d62d1d06212b2d4f6505dbe5b6fab2" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a024b4985f8e3102bbdec85f94c90458f276d62d1d06212b2d4f6505dbe5b6fab2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ea2dea68494be45ffa5cd5fe6ed1d28f399de47e2a9afc1df09c51bc343c4193a029e030109445a1f4dbac02f90caca47eca5b31c548d155dfc33fd2060c1c6a16a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e82520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06776627cd2b4fc949b3eeb1544db7190d18bbb037381f46ce22ff99e7ef14de0a026a86ba1df241539425ae9d5b39fbe53074821b7320d3541b8fae0d9b74e52c2c0c0", + "blockHeader": { + "parentHash": "0x24b4985f8e3102bbdec85f94c90458f276d62d1d06212b2d4f6505dbe5b6fab2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xea2dea68494be45ffa5cd5fe6ed1d28f399de47e2a9afc1df09c51bc343c4193", + "transactionsTrie": "0x29e030109445a1f4dbac02f90caca47eca5b31c548d155dfc33fd2060c1c6a16", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd0f8bd758c09ab4856fc398fa4225f13f99a7909336672c40717175bafff7f7a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6776627cd2b4fc949b3eeb1544db7190d18bbb037381f46ce22ff99e7ef14de0", + "s": "0x26a86ba1df241539425ae9d5b39fbe53074821b7320d3541b8fae0d9b74e52c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd0f8bd758c09ab4856fc398fa4225f13f99a7909336672c40717175bafff7f7a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067ca9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a067e92a4786ad79b766820618c6ce224f8d4dc2f66491e6dbee5a352ff814855fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x67e92a4786ad79b766820618c6ce224f8d4dc2f66491e6dbee5a352ff814855f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0af961f610f65733ba34c768cc8cf4c0dc2210f2c45ecaaa4b19bba1b4317cc3" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a00af961f610f65733ba34c768cc8cf4c0dc2210f2c45ecaaa4b19bba1b4317cc3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa013ee908af9531bbdec5e3857f36864f7ae0246292d9b63723a3074a6fa60149fa005ed18d89f9478098f5ccfc2f6394f717b5977afa87fafd0e7e4e0662b95fce6a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0b679ec96ca94636a291df54af0e8700214a30b5744b9b8c6ded35fef4dfebfc3a071f51659c579462d6058a9016b1c575ef8a939ee1023e675a60fc9ed442a82adc0c0", + "blockHeader": { + "parentHash": "0x0af961f610f65733ba34c768cc8cf4c0dc2210f2c45ecaaa4b19bba1b4317cc3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x13ee908af9531bbdec5e3857f36864f7ae0246292d9b63723a3074a6fa60149f", + "transactionsTrie": "0x05ed18d89f9478098f5ccfc2f6394f717b5977afa87fafd0e7e4e0662b95fce6", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x471cd28179c7efb1b43429d06d68c0714d0eba6f717e77fe63a83e7112cc5359" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb679ec96ca94636a291df54af0e8700214a30b5744b9b8c6ded35fef4dfebfc3", + "s": "0x71f51659c579462d6058a9016b1c575ef8a939ee1023e675a60fc9ed442a82ad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x471cd28179c7efb1b43429d06d68c0714d0eba6f717e77fe63a83e7112cc5359", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07cfb9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ac9957ddd86e5d7817e23b18aaa18bff53a540d614291cd732240f6ab2b907cfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xac9957ddd86e5d7817e23b18aaa18bff53a540d614291cd732240f6ab2b907cf", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0a5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a0242b849d0e6c7bdc39a725bfecf73157899917c04ca0d7323b9fcdc9ee1d1d7ba08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a06f2ecd947190f8da2cb87977bf5ad8a900237c25ed3e29b541a8f3894795dd19a00c898c89c024170885687c208acf84407459a957dc930a82f11782b817de78b1c0c0", + "blockHeader": { + "parentHash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0x242b849d0e6c7bdc39a725bfecf73157899917c04ca0d7323b9fcdc9ee1d1d7b", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4814daaa20f8e32970b745c850fb07ee8a9341d1a40ccfebcf9367ae2c3395b2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6f2ecd947190f8da2cb87977bf5ad8a900237c25ed3e29b541a8f3894795dd19", + "s": "0x0c898c89c024170885687c208acf84407459a957dc930a82f11782b817de78b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4814daaa20f8e32970b745c850fb07ee8a9341d1a40ccfebcf9367ae2c3395b2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d4fdf5f5f803ce2169426332cc282235f02fbb3add0b69d93c7278559f1e43c5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd4fdf5f5f803ce2169426332cc282235f02fbb3add0b69d93c7278559f1e43c5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a01b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a0d19e3838c23580eb0973bfe3fdefe0625c94dfd559bae4c84ff490aad928b2aca02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a027d4e2a56c91c412705ae6dc417fdc74887a655b682d4ea32edc60f755e7cb04a04b00060f7f276295730f6dc0f5b345250443240ab6bd7d30b75efd959822e330c0c0", + "blockHeader": { + "parentHash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0xd19e3838c23580eb0973bfe3fdefe0625c94dfd559bae4c84ff490aad928b2ac", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2aa2a377ee6f452530841c98e6f942f986fde57f8881ed074e0fa0a74aa4198f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x27d4e2a56c91c412705ae6dc417fdc74887a655b682d4ea32edc60f755e7cb04", + "s": "0x4b00060f7f276295730f6dc0f5b345250443240ab6bd7d30b75efd959822e330", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x2aa2a377ee6f452530841c98e6f942f986fde57f8881ed074e0fa0a74aa4198f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07b06a21d00657e7416f8cbb183902b3e852d18d44b7aa32ca35157f2a7f81b7ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7b06a21d00657e7416f8cbb183902b3e852d18d44b7aa32ca35157f2a7f81b7c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a05fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b7d72740129f03ea4edd99065db35e28be22b92f289b845da31c8cb6623477c9a0d11fbf503aec65eca1de954a833cd6deaa3ac83ae2c9fe0464546cc0d81bcf64a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06c373e328f8aaf93022312d2876a1ab0745238d08ad6319a95eecf63467e2a0aa01973989142c373a3cf6292d2b0173a8aeb8dd728d1e72c0e5f3e9abef84f3880c0c0", + "blockHeader": { + "parentHash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb7d72740129f03ea4edd99065db35e28be22b92f289b845da31c8cb6623477c9", + "transactionsTrie": "0xd11fbf503aec65eca1de954a833cd6deaa3ac83ae2c9fe0464546cc0d81bcf64", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x112bbe0a2a9fd56a16929c91d57ff2fab87357ac72477111c37ba3789dab5a5f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6c373e328f8aaf93022312d2876a1ab0745238d08ad6319a95eecf63467e2a0a", + "s": "0x1973989142c373a3cf6292d2b0173a8aeb8dd728d1e72c0e5f3e9abef84f3880", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x112bbe0a2a9fd56a16929c91d57ff2fab87357ac72477111c37ba3789dab5a5f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a015e8af978ede191ad9ad24fdb03632810cc43838691743ce9b33f0c3d3c7b926a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x15e8af978ede191ad9ad24fdb03632810cc43838691743ce9b33f0c3d3c7b926", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a08f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa031a7a48043239352e4902da2f334e10563c6082b9d2b24e7cad225fa9f695a62a0f2da939e6e8c1176aec66a087fd1a9381314f8b51398d27d2e9e294be6022d9ba02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a026e68c84694705d7a7e14bc6f1614a02d0a8b5a43bb4a4747cc0ee10acce4632a05d8c1dec984f84a654a9a6cedb490ffb3d2283e401aad48b8873f706fabc1d3bc0c0", + "blockHeader": { + "parentHash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x31a7a48043239352e4902da2f334e10563c6082b9d2b24e7cad225fa9f695a62", + "transactionsTrie": "0xf2da939e6e8c1176aec66a087fd1a9381314f8b51398d27d2e9e294be6022d9b", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x291abf61fd962e21fe4ee1380a84e19aaf90bfdc83330cf07f7d480e39bf42db" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x26e68c84694705d7a7e14bc6f1614a02d0a8b5a43bb4a4747cc0ee10acce4632", + "s": "0x5d8c1dec984f84a654a9a6cedb490ffb3d2283e401aad48b8873f706fabc1d3b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x291abf61fd962e21fe4ee1380a84e19aaf90bfdc83330cf07f7d480e39bf42db", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ac9957ddd86e5d7817e23b18aaa18bff53a540d614291cd732240f6ab2b907cfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xac9957ddd86e5d7817e23b18aaa18bff53a540d614291cd732240f6ab2b907cf", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0a5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a04695d035120b7ebaa1cff037853b6adeb8d45795ef77a762a5fce73a3fd9816ba08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a08aafd405d4567499d9b420036d4d175ad08b4d6511f4ae262c58ef4dc79338f6a010d8efe5cbf489f93c7be899373870da98096f9bfa1066b277bf2c9ee2fd54bfc0c0", + "blockHeader": { + "parentHash": "0xa5d6fdc919072ae5678f3a3f01e2e94485806c1602e67a40b2dff073a44b8036", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0x4695d035120b7ebaa1cff037853b6adeb8d45795ef77a762a5fce73a3fd9816b", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f63260abdfc459876cabdf10d0fa6a7dc4aba87bf2788fb61d95178a7446fab" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8aafd405d4567499d9b420036d4d175ad08b4d6511f4ae262c58ef4dc79338f6", + "s": "0x10d8efe5cbf489f93c7be899373870da98096f9bfa1066b277bf2c9ee2fd54bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4f63260abdfc459876cabdf10d0fa6a7dc4aba87bf2788fb61d95178a7446fab", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d4fdf5f5f803ce2169426332cc282235f02fbb3add0b69d93c7278559f1e43c5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd4fdf5f5f803ce2169426332cc282235f02fbb3add0b69d93c7278559f1e43c5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a01b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66a0b8fff310b2f98e4e84e6f8142c29a01fb0e430d2c36ed951511f3cbf2ce53e95a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0cc737af5c85d0907c1b336cf66bfdcec4e3d2640521a41b19c1632d0d0acb549a02ec1f49f47d5a40719209c2a0511e3f920518281268500d17b5864adbbde244cc0c0", + "blockHeader": { + "parentHash": "0x1b3df7cf9115969d3468045058b5fd5ccae93967ef0c085215a5f9c4b8ef676f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x262820380b38ce6438759a2047ed15d0fbeca85ccd2d8d9334d1571df3156d66", + "transactionsTrie": "0xb8fff310b2f98e4e84e6f8142c29a01fb0e430d2c36ed951511f3cbf2ce53e95", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6c17eee55b7f6924d1e48901c5bad6f8b0f2fc7c06a19aeae5a42a2f6c4fd826" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xcc737af5c85d0907c1b336cf66bfdcec4e3d2640521a41b19c1632d0d0acb549", + "s": "0x2ec1f49f47d5a40719209c2a0511e3f920518281268500d17b5864adbbde244c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6c17eee55b7f6924d1e48901c5bad6f8b0f2fc7c06a19aeae5a42a2f6c4fd826", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07b06a21d00657e7416f8cbb183902b3e852d18d44b7aa32ca35157f2a7f81b7ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7b06a21d00657e7416f8cbb183902b3e852d18d44b7aa32ca35157f2a7f81b7c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a05fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0657f211d31a78f07ddf6956c167d18d89de00d9e5917477f66da455c5c26e588a01c3b3cdc9b6f45142234e14a16f11c3b9dc090fc70848a248703e29133e48de5a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a00d4eb71cd4f5047d56dfa89cfbbb0e5910c3693de230d05fcb61441370698896a03f6f8636ab8b2e74ac2845fe1f17240ff21ef37e4d0cf50bae1a97c883f77e47c0c0", + "blockHeader": { + "parentHash": "0x5fcde8b956b920faf51d4613946681e72c00e94c453f42b52020f534b0386c4d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x657f211d31a78f07ddf6956c167d18d89de00d9e5917477f66da455c5c26e588", + "transactionsTrie": "0x1c3b3cdc9b6f45142234e14a16f11c3b9dc090fc70848a248703e29133e48de5", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x95030cfae318a21644baee963547b07c7f61707a705ad1217bb26f6ef1cdf9ee" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0d4eb71cd4f5047d56dfa89cfbbb0e5910c3693de230d05fcb61441370698896", + "s": "0x3f6f8636ab8b2e74ac2845fe1f17240ff21ef37e4d0cf50bae1a97c883f77e47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x95030cfae318a21644baee963547b07c7f61707a705ad1217bb26f6ef1cdf9ee", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a015e8af978ede191ad9ad24fdb03632810cc43838691743ce9b33f0c3d3c7b926a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x15e8af978ede191ad9ad24fdb03632810cc43838691743ce9b33f0c3d3c7b926", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a08f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0446307a26e7f9745f6e64757b314130425bef9e82654b889e41a69654b798331a0f235e273d88c3375a32c41a66710c095c5ba96ac7d7ac1e2980481de1376f2d0a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0e9202293222035bf0a694f186eb0a83174fa6fd855271aa3cefeb6709bbeaa59a003cff83b22e58284600919c1fb477b7fc00b569ad447224b7a1238dc023077b2c0c0", + "blockHeader": { + "parentHash": "0x8f8c055b85f9be7cc17ec4fcd70fbe199ce3b145db960632ebf0417e45d6b172", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x446307a26e7f9745f6e64757b314130425bef9e82654b889e41a69654b798331", + "transactionsTrie": "0xf235e273d88c3375a32c41a66710c095c5ba96ac7d7ac1e2980481de1376f2d0", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x952abf173e30c0783f159a695d57447b1e1bc4d98707c9ac39e17ed7be7e116b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xe9202293222035bf0a694f186eb0a83174fa6fd855271aa3cefeb6709bbeaa59", + "s": "0x03cff83b22e58284600919c1fb477b7fc00b569ad447224b7a1238dc023077b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x952abf173e30c0783f159a695d57447b1e1bc4d98707c9ac39e17ed7be7e116b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a007dd71cce854f6af8b181cd588f7c372652ab92e7a9ae5ab2c89e2ca87f843caa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x07dd71cce854f6af8b181cd588f7c372652ab92e7a9ae5ab2c89e2ca87f843ca", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x59e6728b59e1321ddfd856e4d1191d5e9df7f2cf4bf885328b1f84418edbe8f8" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a059e6728b59e1321ddfd856e4d1191d5e9df7f2cf4bf885328b1f84418edbe8f8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea044ffafd0cabd4079677679809f39e8b980fe1009da788faba4a3d214ca8518eca08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0b01f56f1e1898724dfa7cb0789b942a51ba6e1d9796902154700af71b971b6faa02dea0b88945bb4a8596cd6bf5ff0988fd622f0bf168c0b8d573a0a61943ea8d3c0c0", + "blockHeader": { + "parentHash": "0x59e6728b59e1321ddfd856e4d1191d5e9df7f2cf4bf885328b1f84418edbe8f8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x44ffafd0cabd4079677679809f39e8b980fe1009da788faba4a3d214ca8518ec", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x83e97287481689c8498062824aaf5a7c3a3fc7be50156514e9e4f026f1628eb0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb01f56f1e1898724dfa7cb0789b942a51ba6e1d9796902154700af71b971b6fa", + "s": "0x2dea0b88945bb4a8596cd6bf5ff0988fd622f0bf168c0b8d573a0a61943ea8d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x83e97287481689c8498062824aaf5a7c3a3fc7be50156514e9e4f026f1628eb0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022800d7417d729f52ea1ef478f64954714b1c798c2c0d106b20e314a05c14a79a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22800d7417d729f52ea1ef478f64954714b1c798c2c0d106b20e314a05c14a79", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x94a305c9205c306b58e74f6c91b63a9838599db5b8c742a7c39ae05bd32e4c5a" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a094a305c9205c306b58e74f6c91b63a9838599db5b8c742a7c39ae05bd32e4c5aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea021b35338a871d73401ba08d72bfdbc758c38b9e848fa80e807095f18912edaa3a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0448dd4c17134ea6b07ebd473727933c3ab787ae67ef7a4100cbf02313e2fee8ea0677314cb1f2a532287dffe8ddb536c35498309cb047f8a3b22518935e25d74bcc0c0", + "blockHeader": { + "parentHash": "0x94a305c9205c306b58e74f6c91b63a9838599db5b8c742a7c39ae05bd32e4c5a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x21b35338a871d73401ba08d72bfdbc758c38b9e848fa80e807095f18912edaa3", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x717d4bbf986f96020d484c155f5b5eab142c4e5de4e92c3d66c3bb8be66d634f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x448dd4c17134ea6b07ebd473727933c3ab787ae67ef7a4100cbf02313e2fee8e", + "s": "0x677314cb1f2a532287dffe8ddb536c35498309cb047f8a3b22518935e25d74bc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x717d4bbf986f96020d484c155f5b5eab142c4e5de4e92c3d66c3bb8be66d634f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e831", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ce533591db0b45a6d5852b62b8ec38661f328a1772c38805ea8a2019be1b666ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xce533591db0b45a6d5852b62b8ec38661f328a1772c38805ea8a2019be1b666e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xce0b3ecb4792c6ed5b84bd357abbf5f6738ef560a5bfca9df0af7b45d26e322c" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0ce0b3ecb4792c6ed5b84bd357abbf5f6738ef560a5bfca9df0af7b45d26e322ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa038be79e3c17ab96cec8f96885532069346aba088e773c1dde0fe8b880a4d2f55a069db74ce400463b853eeb9fdd290cb6c69433dd40facc2f7daf7716fc28086f6a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a02c12caf79d3355fb88a6a472f840c4e91b73cca538b6fceffa906a455320360da0211efcc9d956ad01eb918c4b9e349e4b3a62d3e526b06a6f540a7ed7713d9ca2c0c0", + "blockHeader": { + "parentHash": "0xce0b3ecb4792c6ed5b84bd357abbf5f6738ef560a5bfca9df0af7b45d26e322c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x38be79e3c17ab96cec8f96885532069346aba088e773c1dde0fe8b880a4d2f55", + "transactionsTrie": "0x69db74ce400463b853eeb9fdd290cb6c69433dd40facc2f7daf7716fc28086f6", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x980c1ffd272648f83154a61a93fef56fbd2ba5f2aeb1b7da875126b7ab011f6a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2c12caf79d3355fb88a6a472f840c4e91b73cca538b6fceffa906a455320360d", + "s": "0x211efcc9d956ad01eb918c4b9e349e4b3a62d3e526b06a6f540a7ed7713d9ca2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x980c1ffd272648f83154a61a93fef56fbd2ba5f2aeb1b7da875126b7ab011f6a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d51", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e8a6a2268e960961278ed0258b1911df46bce9816d907e4a2354adbe984e671aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe8a6a2268e960961278ed0258b1911df46bce9816d907e4a2354adbe984e671a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0be6bbb42aff91cab222cfdf06a95376fa618e3e7f08468c8a11dfb71176084c" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a00be6bbb42aff91cab222cfdf06a95376fa618e3e7f08468c8a11dfb71176084ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0524551c71abceabbeb7af62fc8a8f21fb148cfd25ff1b0cc798a9dec3eeeaf12a052cd5e4adfc3c8e4a3b1ad47cf13e8b1b7d09a9db189d6e5cd244b3e316eac84a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a07b814c734cdeb02ea9dca38861281c3d4892ab7c4c19a7f50c000ae06d4a9f65a01b8329c18f3d19662c8b043c3fac86051e549fe77b121d22611f72c131fef29dc0c0", + "blockHeader": { + "parentHash": "0x0be6bbb42aff91cab222cfdf06a95376fa618e3e7f08468c8a11dfb71176084c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x524551c71abceabbeb7af62fc8a8f21fb148cfd25ff1b0cc798a9dec3eeeaf12", + "transactionsTrie": "0x52cd5e4adfc3c8e4a3b1ad47cf13e8b1b7d09a9db189d6e5cd244b3e316eac84", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf4065fbc2c5389341f84a19a424e80f1ab97612c444abacc5a949edd52208755" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x7b814c734cdeb02ea9dca38861281c3d4892ab7c4c19a7f50c000ae06d4a9f65", + "s": "0x1b8329c18f3d19662c8b043c3fac86051e549fe77b121d22611f72c131fef29d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf4065fbc2c5389341f84a19a424e80f1ab97612c444abacc5a949edd52208755", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d061", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a007dd71cce854f6af8b181cd588f7c372652ab92e7a9ae5ab2c89e2ca87f843caa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x07dd71cce854f6af8b181cd588f7c372652ab92e7a9ae5ab2c89e2ca87f843ca", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x59e6728b59e1321ddfd856e4d1191d5e9df7f2cf4bf885328b1f84418edbe8f8" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a059e6728b59e1321ddfd856e4d1191d5e9df7f2cf4bf885328b1f84418edbe8f8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea057f4587ddff05b1e50cb52ecfde403b300c446dee49ffd0dc17e7c3df2c8427da08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a00e7856ce7b9836be2691e2ee80916d09b1b754f8380a01f35e63584e3f4d3cd4a00b307d3f2567da733ec7e84fbb4119b7d89f93c055c4dca90864c40d4d0be1ddc0c0", + "blockHeader": { + "parentHash": "0x59e6728b59e1321ddfd856e4d1191d5e9df7f2cf4bf885328b1f84418edbe8f8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x57f4587ddff05b1e50cb52ecfde403b300c446dee49ffd0dc17e7c3df2c8427d", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa0d195d70e275ccf993a155fa6f2049afda816ed3190d93759261f19aecbf1c4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x0e7856ce7b9836be2691e2ee80916d09b1b754f8380a01f35e63584e3f4d3cd4", + "s": "0x0b307d3f2567da733ec7e84fbb4119b7d89f93c055c4dca90864c40d4d0be1dd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa0d195d70e275ccf993a155fa6f2049afda816ed3190d93759261f19aecbf1c4", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x043ea9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022800d7417d729f52ea1ef478f64954714b1c798c2c0d106b20e314a05c14a79a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22800d7417d729f52ea1ef478f64954714b1c798c2c0d106b20e314a05c14a79", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x94a305c9205c306b58e74f6c91b63a9838599db5b8c742a7c39ae05bd32e4c5a" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a094a305c9205c306b58e74f6c91b63a9838599db5b8c742a7c39ae05bd32e4c5aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dcea04c6851e46adf57eed89841830eda98ca486d914400b6550e273811a430cc6009a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0afd159cdd72c3d5cab0f0cabad1fccb52b255432d1bb7468ce3438612cff22cda0185b0c271de20c2424d4946487dfe17d470500e96a735fa27b4300645dc34100c0c0", + "blockHeader": { + "parentHash": "0x94a305c9205c306b58e74f6c91b63a9838599db5b8c742a7c39ae05bd32e4c5a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x770d34089f014f50c9d60ab1bd17ed5e3c2d8b094fbe6a3dda908e39066f0dce", + "transactionsTrie": "0x4c6851e46adf57eed89841830eda98ca486d914400b6550e273811a430cc6009", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbb2188b8d870c9286cb04e97e6c380e49a4fd88f659a44008468227f610c95ff" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xafd159cdd72c3d5cab0f0cabad1fccb52b255432d1bb7468ce3438612cff22cd", + "s": "0x185b0c271de20c2424d4946487dfe17d470500e96a735fa27b4300645dc34100", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xbb2188b8d870c9286cb04e97e6c380e49a4fd88f659a44008468227f610c95ff", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x04e831", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ce533591db0b45a6d5852b62b8ec38661f328a1772c38805ea8a2019be1b666ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xce533591db0b45a6d5852b62b8ec38661f328a1772c38805ea8a2019be1b666e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xce0b3ecb4792c6ed5b84bd357abbf5f6738ef560a5bfca9df0af7b45d26e322c" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0ce0b3ecb4792c6ed5b84bd357abbf5f6738ef560a5bfca9df0af7b45d26e322ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a2f210c449cbc431ae4af955be58370010077303b145f710bc5fdfa9235795eaa07c7722ba3d8aa1dc73cb0b47d3764b59a7108c145ae4d7a722e5a5a6ccd8bcf9a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0b7cf2a484cda9047bd6accaec20003654afd889045215c16a33d29ee4488804fa0414bdc6e028bf0cf8622b64f4794a3af9fa6502615f282d3d9be620c063425c7c0c0", + "blockHeader": { + "parentHash": "0xce0b3ecb4792c6ed5b84bd357abbf5f6738ef560a5bfca9df0af7b45d26e322c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa2f210c449cbc431ae4af955be58370010077303b145f710bc5fdfa9235795ea", + "transactionsTrie": "0x7c7722ba3d8aa1dc73cb0b47d3764b59a7108c145ae4d7a722e5a5a6ccd8bcf9", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe2895de27432c77cfe95c10c9619ac3df51914bfd449e99c644eacb6cb73e07e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb7cf2a484cda9047bd6accaec20003654afd889045215c16a33d29ee4488804f", + "s": "0x414bdc6e028bf0cf8622b64f4794a3af9fa6502615f282d3d9be620c063425c7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe2895de27432c77cfe95c10c9619ac3df51914bfd449e99c644eacb6cb73e07e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x067d51", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e8a6a2268e960961278ed0258b1911df46bce9816d907e4a2354adbe984e671aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe8a6a2268e960961278ed0258b1911df46bce9816d907e4a2354adbe984e671a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0be6bbb42aff91cab222cfdf06a95376fa618e3e7f08468c8a11dfb71176084c" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a00be6bbb42aff91cab222cfdf06a95376fa618e3e7f08468c8a11dfb71176084ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d1b037aa36cc1228c17db0c12477990fb9e28231e7f1bb6dd287403e29a1df06a09f9324b72ea1b4de5fd9cd2497d03e70ddd948c9a3223b3cddf005ad282b5635a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a08eeb850c1f410e18c038aad484835819c3064b1aa268c827e347a10f02ff5171a007a3b0c34d541a65124f060e4c7447ad8ea156c50748d8c5ac9b5b279a26bf12c0c0", + "blockHeader": { + "parentHash": "0x0be6bbb42aff91cab222cfdf06a95376fa618e3e7f08468c8a11dfb71176084c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd1b037aa36cc1228c17db0c12477990fb9e28231e7f1bb6dd287403e29a1df06", + "transactionsTrie": "0x9f9324b72ea1b4de5fd9cd2497d03e70ddd948c9a3223b3cddf005ad282b5635", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6532eb97cb53da78086196297a42282fa237ec8dab5535b1937b8573ecfb0831" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8eeb850c1f410e18c038aad484835819c3064b1aa268c827e347a10f02ff5171", + "s": "0x07a3b0c34d541a65124f060e4c7447ad8ea156c50748d8c5ac9b5b279a26bf12", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6532eb97cb53da78086196297a42282fa237ec8dab5535b1937b8573ecfb0831", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x07d061", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa0e4ae0c99d04f2aaaa820baadbf7aab3e949e3677ee688215768af4853e2f56fba0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0eb774461949962772ab55a732e712f293d26cc96498a878827d3e91e01bf2eada073a202c92b1c8fdfac1f03da02a3d19967264fb6717ca155c15938c519740dfdc0c0", + "blockHeader": { + "parentHash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0xe4ae0c99d04f2aaaa820baadbf7aab3e949e3677ee688215768af4853e2f56fb", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x611a5c3091e98acd78665d6ab1aadd25ed21c1f5c14367287fcfe577ce3443ba" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xeb774461949962772ab55a732e712f293d26cc96498a878827d3e91e01bf2ead", + "s": "0x73a202c92b1c8fdfac1f03da02a3d19967264fb6717ca155c15938c519740dfd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x611a5c3091e98acd78665d6ab1aadd25ed21c1f5c14367287fcfe577ce3443ba", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0966ebc0972c448689c433a2c2060f446207a076a35a923981fd2f4befac0a926a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x966ebc0972c448689c433a2c2060f446207a076a35a923981fd2f4befac0a926", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0b4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa0fea0fef16e597d3a235402c94fbd30b8a6330f520919e36f33fa107bbc93513aa0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0c2358cb1a2f2a342bd161f523204efc561d732d3be06eaffbd0ce75d7a5a7175a07d09a1de839183319c1cea3eddf926dda2d294e0b5ead26aaa9977648831f74bc0c0", + "blockHeader": { + "parentHash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0xfea0fef16e597d3a235402c94fbd30b8a6330f520919e36f33fa107bbc93513a", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb2195fa7ed2cd1cdb4f3ddb97b39d96fda308839de60ac5f4ab2a3008c1acb2e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xc2358cb1a2f2a342bd161f523204efc561d732d3be06eaffbd0ce75d7a5a7175", + "s": "0x7d09a1de839183319c1cea3eddf926dda2d294e0b5ead26aaa9977648831f74b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb2195fa7ed2cd1cdb4f3ddb97b39d96fda308839de60ac5f4ab2a3008c1acb2e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a052546b1e61fa6044e538eb7e3b7dfd86153493dc2beadd704eaaa64a4b416416a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x52546b1e61fa6044e538eb7e3b7dfd86153493dc2beadd704eaaa64a4b416416", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a03cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa012cbb65edaa180b1b4e061a3c2cc98104169377ccae153471c4a46027cc2bf2ea0254818884f8083a7098d6e2769d35ed82e5bc74ca166380ea030a5d68d9e6a0aa0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08ba6f542f1676b68adc5ef41b504c996e42007d6a00a881075865eb335756865a0075214863791f422c6fb9741014c5443663864a8a8dd1d865c4ebfc1808145b9c0c0", + "blockHeader": { + "parentHash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x12cbb65edaa180b1b4e061a3c2cc98104169377ccae153471c4a46027cc2bf2e", + "transactionsTrie": "0x254818884f8083a7098d6e2769d35ed82e5bc74ca166380ea030a5d68d9e6a0a", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6092974f22bb5f5ce36e6a35fbff97181e59ff947b1e1e91bb40f73b7b1f0747" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8ba6f542f1676b68adc5ef41b504c996e42007d6a00a881075865eb335756865", + "s": "0x075214863791f422c6fb9741014c5443663864a8a8dd1d865c4ebfc1808145b9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6092974f22bb5f5ce36e6a35fbff97181e59ff947b1e1e91bb40f73b7b1f0747", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0158ba52aec47994a85a282c7be10dcd82d9619c4ca08c82e6d37dd31d763a8baa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x158ba52aec47994a85a282c7be10dcd82d9619c4ca08c82e6d37dd31d763a8ba", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a008d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0812189b8b66f3f3f0edc7c61afb14f9af3304a02168af70c801b3e72229c8764a0e790a9ee0dff8abfa1901f22fedc591ff56be1b37e2b64e25219af2aa8d8f9e8a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0f49a9441da353856259d2488a5c07a912100949ab5fc47ea10c8f57233d8cc2aa02ce5b92613cfe1c0880699a043a5f645989a031ed1a8fa8db5efed11cac8edc2c0c0", + "blockHeader": { + "parentHash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x812189b8b66f3f3f0edc7c61afb14f9af3304a02168af70c801b3e72229c8764", + "transactionsTrie": "0xe790a9ee0dff8abfa1901f22fedc591ff56be1b37e2b64e25219af2aa8d8f9e8", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe313eff6579db59666999fd9d8779c3f3a4bbec736d1d00f6e36d77e26ce1169" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xf49a9441da353856259d2488a5c07a912100949ab5fc47ea10c8f57233d8cc2a", + "s": "0x2ce5b92613cfe1c0880699a043a5f645989a031ed1a8fa8db5efed11cac8edc2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe313eff6579db59666999fd9d8779c3f3a4bbec736d1d00f6e36d77e26ce1169", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa84cc6abb58f6a7c6c0cfce7fbf3a047537589540b53cbde4fa8eb61674c3be7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa0aada43064092aebc5743d4292cd5519612698f4bd8c6a3d3614bdb172d6486f0a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0b8c2e70ef8f2dc74b3085be9feb0d9f72f133ba48e2b7625d3af9ce869ed4439a0035af6f362212df8a6f58a794e9eb107f7714e873e4785f529c070f0ae6200e9c0c0", + "blockHeader": { + "parentHash": "0x349612a75430b8e5ced2f6e1bfe9707b3c56f7ff2da8b88750faf00133dedad5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0xaada43064092aebc5743d4292cd5519612698f4bd8c6a3d3614bdb172d6486f0", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4dfb69d861acc494fdf7798d672dd8d22a36fe2cb6959096ba95e4e7fb86d890" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xb8c2e70ef8f2dc74b3085be9feb0d9f72f133ba48e2b7625d3af9ce869ed4439", + "s": "0x035af6f362212df8a6f58a794e9eb107f7714e873e4785f529c070f0ae6200e9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4dfb69d861acc494fdf7798d672dd8d22a36fe2cb6959096ba95e4e7fb86d890", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0966ebc0972c448689c433a2c2060f446207a076a35a923981fd2f4befac0a926a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x966ebc0972c448689c433a2c2060f446207a076a35a923981fd2f4befac0a926", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0b4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa06cf48ba8f60db072c86380fc6dc814b5676da84ba40db059ffbcc98a7631ac7ba0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a06f4b92f8a908a8ec81bfa8e88b6f0282186c5c032fe8cb96dc593f571f6a638da02a51b6ee50b932c7c7e17f2c79233578cbf019e2c91804d3b595123edcf0237cc0c0", + "blockHeader": { + "parentHash": "0xb4424366c48fc2e6d0081cc125904e9119d5d0d744b729726bdc133204670b54", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0x6cf48ba8f60db072c86380fc6dc814b5676da84ba40db059ffbcc98a7631ac7b", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa83dc8b6c40631c3e3fbadadb1b067630fb75db2b7598fc2c3b323b4302ec95d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6f4b92f8a908a8ec81bfa8e88b6f0282186c5c032fe8cb96dc593f571f6a638d", + "s": "0x2a51b6ee50b932c7c7e17f2c79233578cbf019e2c91804d3b595123edcf0237c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa83dc8b6c40631c3e3fbadadb1b067630fb75db2b7598fc2c3b323b4302ec95d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a052546b1e61fa6044e538eb7e3b7dfd86153493dc2beadd704eaaa64a4b416416a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x52546b1e61fa6044e538eb7e3b7dfd86153493dc2beadd704eaaa64a4b416416", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a03cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00b49620f5be58692352a124018ab67667ce26e0d98f7419813e41aa1a2bb1af7a00509e8a6369d47188be3e1d663bd8494f74e719a6fb43322c9a8717e973be0cea0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08cdc7c6b37e24642a06d3ebe0f648cb053ea5f426e1813a3268b4f4f9697c446a005e3c4508632cb383fe4ac0e12ac0dbe41668fdb5e709629e03729df17d1ad13c0c0", + "blockHeader": { + "parentHash": "0x3cfe42d4ee79f5606e34c0bbcd3c77c88469c53e3d0a8d5569c062ead8951108", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0b49620f5be58692352a124018ab67667ce26e0d98f7419813e41aa1a2bb1af7", + "transactionsTrie": "0x0509e8a6369d47188be3e1d663bd8494f74e719a6fb43322c9a8717e973be0ce", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9efe632cfee71a07dd730449091c791f223034d0311d4294a7d74d53bb025ea9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8cdc7c6b37e24642a06d3ebe0f648cb053ea5f426e1813a3268b4f4f9697c446", + "s": "0x05e3c4508632cb383fe4ac0e12ac0dbe41668fdb5e709629e03729df17d1ad13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9efe632cfee71a07dd730449091c791f223034d0311d4294a7d74d53bb025ea9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0158ba52aec47994a85a282c7be10dcd82d9619c4ca08c82e6d37dd31d763a8baa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x158ba52aec47994a85a282c7be10dcd82d9619c4ca08c82e6d37dd31d763a8ba", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a008d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb1a4c8fa51b82ad870a2780cef58e0e90b6c9f3518f457c4f75a7787ad04838a07f6862390a646ac1839a01d0a467b3fbb7ef0decc3b0bf43e03509b3f56f8400a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a02796e6c689e3a5155ebb4d9c6e8e9cda94530ac15684fad4081a99c4230ee241a065c7f05c9d31739ce0ac941744d23b22f935d9adfcb722b9c5827292f7fc8441c0c0", + "blockHeader": { + "parentHash": "0x08d5e185d8057da0631ce20ce22eefaa01e2aed22357b117d9401c4fa701634b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb1a4c8fa51b82ad870a2780cef58e0e90b6c9f3518f457c4f75a7787ad04838", + "transactionsTrie": "0x7f6862390a646ac1839a01d0a467b3fbb7ef0decc3b0bf43e03509b3f56f8400", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x59da661864b6f4158730875bec4948ed6d27fbff047f643b342b30dab30fce52" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2796e6c689e3a5155ebb4d9c6e8e9cda94530ac15684fad4081a99c4230ee241", + "s": "0x65c7f05c9d31739ce0ac941744d23b22f935d9adfcb722b9c5827292f7fc8441", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x59da661864b6f4158730875bec4948ed6d27fbff047f643b342b30dab30fce52", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a059f744bb62964f929c7cf5548fa154fcce46cc5b2790adce0dde7041625ba0d8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x59f744bb62964f929c7cf5548fa154fcce46cc5b2790adce0dde7041625ba0d8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcd45cc082d5a0f2492d88654b2a078df9f5e0c0fb1e12da1102423888159397f" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0cd45cc082d5a0f2492d88654b2a078df9f5e0c0fb1e12da1102423888159397fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa003d9a1990284757186711f3a53330b43c4c64e3adefd6bfa0c2c8bcfc01fa24ca0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000001a001f30ee2f0f8963619a153eea6b016e4cc8ec20124a3da4c4a65bb6b07c67400a03e001a6d2dfe1245c55ff1f53bae8bfce2a7dd4ab76a42ccef9186cccce7e6e0c0c0", + "blockHeader": { + "parentHash": "0xcd45cc082d5a0f2492d88654b2a078df9f5e0c0fb1e12da1102423888159397f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x03d9a1990284757186711f3a53330b43c4c64e3adefd6bfa0c2c8bcfc01fa24c", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5583297e95fae23939abfd5d9235354bbcffceb57fb2d9ef2608588851356f3d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x01f30ee2f0f8963619a153eea6b016e4cc8ec20124a3da4c4a65bb6b07c67400", + "s": "0x3e001a6d2dfe1245c55ff1f53bae8bfce2a7dd4ab76a42ccef9186cccce7e6e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5583297e95fae23939abfd5d9235354bbcffceb57fb2d9ef2608588851356f3d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0596bf0293a5411a9fd0fad3a3ffb238d3791b894e1da450f8f04d492389c39d4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x596bf0293a5411a9fd0fad3a3ffb238d3791b894e1da450f8f04d492389c39d4", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbf79e9824d9d7ec7b674209133ab8e766c0a6569ca86ec3f8edb7d86da6bd49e" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0bf79e9824d9d7ec7b674209133ab8e766c0a6569ca86ec3f8edb7d86da6bd49ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa0f8f51c1ef1ae90a4f942592dcf33768f59dafa868521451c0373976bacedeb16a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0bcaf98f54a364180abb251d2708e63904a58a4583eac4ad86507826164bafe04a01c746c6ff9431578699325848b549174ed36361d8d654f3486e7764674502c52c0c0", + "blockHeader": { + "parentHash": "0xbf79e9824d9d7ec7b674209133ab8e766c0a6569ca86ec3f8edb7d86da6bd49e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0xf8f51c1ef1ae90a4f942592dcf33768f59dafa868521451c0373976bacedeb16", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xab71e5f7073fb96b550c6ae46f35590ecee782e5b47ee0d4e9770a344d4c0aa8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xbcaf98f54a364180abb251d2708e63904a58a4583eac4ad86507826164bafe04", + "s": "0x1c746c6ff9431578699325848b549174ed36361d8d654f3486e7764674502c52", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xab71e5f7073fb96b550c6ae46f35590ecee782e5b47ee0d4e9770a344d4c0aa8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7c1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b695581526edb4f17c1b6d6511e60582262132786df5cc20bc49b81ab1f6b9aba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb695581526edb4f17c1b6d6511e60582262132786df5cc20bc49b81ab1f6b9ab", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf571f2627a34af048e370c4b927038bfccf355461a06ad99b3dd7478e7b0268c" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0f571f2627a34af048e370c4b927038bfccf355461a06ad99b3dd7478e7b0268ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa001102f726e64f941b8fcaa2d33e1e741345ce3d1f5ba04716423a66656d9c574a0f370bcbcff9e5c9fd8ddfd49398185f364d09b0a3b0a245953bbe10b8a456d41a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000080a03b3e8eed249f07e52534d4b26d52dd8c82bc688511a586b2ea97ec6e574f0c0da0774f47ab66e2c161e7165539a1a62da675d45331de59f6838189e05433dc0c21c0c0", + "blockHeader": { + "parentHash": "0xf571f2627a34af048e370c4b927038bfccf355461a06ad99b3dd7478e7b0268c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x01102f726e64f941b8fcaa2d33e1e741345ce3d1f5ba04716423a66656d9c574", + "transactionsTrie": "0xf370bcbcff9e5c9fd8ddfd49398185f364d09b0a3b0a245953bbe10b8a456d41", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x242ed02270d6f4f1c0a6b4a81a242420682eddf132054869451aa9ece50ae9e7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x3b3e8eed249f07e52534d4b26d52dd8c82bc688511a586b2ea97ec6e574f0c0d", + "s": "0x774f47ab66e2c161e7165539a1a62da675d45331de59f6838189e05433dc0c21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x242ed02270d6f4f1c0a6b4a81a242420682eddf132054869451aa9ece50ae9e7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c71", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0af6d4cf6af694d0c88ff93ffb8d9c5596369cbb690f52636e5af15b4fa1863bba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaf6d4cf6af694d0c88ff93ffb8d9c5596369cbb690f52636e5af15b4fa1863bb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x668999e08bbc0051c8c3376e171b3a7324477bf729d0cfd830fd2074b1ec6dbd" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0668999e08bbc0051c8c3376e171b3a7324477bf729d0cfd830fd2074b1ec6dbda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07ec6e5bf20ea373d313368b55f402c90ac83e2320c23bf4317f9ada8f46a1a72a0abf5dde33908a130677f2d39d771b94a78d8473f91423d9af63a1010bdb838d0a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a04b01a14db828a1e33daa6b436e93b2ffa9c557dcbe14ccba4f1940f6f7c86d70a035aaf376674378013fc3d82db8df0032ec73fcde34aa3f42bc6058551c35fd92c0c0", + "blockHeader": { + "parentHash": "0x668999e08bbc0051c8c3376e171b3a7324477bf729d0cfd830fd2074b1ec6dbd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7ec6e5bf20ea373d313368b55f402c90ac83e2320c23bf4317f9ada8f46a1a72", + "transactionsTrie": "0xabf5dde33908a130677f2d39d771b94a78d8473f91423d9af63a1010bdb838d0", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc67df4d2dbc4f9a80f2bcf6ca58ce2e34ee7e8c15ac64a42c23d1f79cb44bf57" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x4b01a14db828a1e33daa6b436e93b2ffa9c557dcbe14ccba4f1940f6f7c86d70", + "s": "0x35aaf376674378013fc3d82db8df0032ec73fcde34aa3f42bc6058551c35fd92", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc67df4d2dbc4f9a80f2bcf6ca58ce2e34ee7e8c15ac64a42c23d1f79cb44bf57", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a059f744bb62964f929c7cf5548fa154fcce46cc5b2790adce0dde7041625ba0d8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x59f744bb62964f929c7cf5548fa154fcce46cc5b2790adce0dde7041625ba0d8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcd45cc082d5a0f2492d88654b2a078df9f5e0c0fb1e12da1102423888159397f" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0cd45cc082d5a0f2492d88654b2a078df9f5e0c0fb1e12da1102423888159397fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa0abf518a484efcbc718f7b1fbbe77c869d8dbb8930a0b6c83b990e452f26f6b06a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0382838798d50ec634d9132386dc84be2fdfc55b98cb274887d582667197b820fa04bb10784cbbe4ea1f701b71f24649526ea6c3dec22762580ccdc893c59a64f96c0c0", + "blockHeader": { + "parentHash": "0xcd45cc082d5a0f2492d88654b2a078df9f5e0c0fb1e12da1102423888159397f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0xabf518a484efcbc718f7b1fbbe77c869d8dbb8930a0b6c83b990e452f26f6b06", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5a81e0e415cc9abe2cd955b80a2fbecea9354bbe7d12c3a808cc46f7597360b8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x382838798d50ec634d9132386dc84be2fdfc55b98cb274887d582667197b820f", + "s": "0x4bb10784cbbe4ea1f701b71f24649526ea6c3dec22762580ccdc893c59a64f96", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5a81e0e415cc9abe2cd955b80a2fbecea9354bbe7d12c3a808cc46f7597360b8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0596bf0293a5411a9fd0fad3a3ffb238d3791b894e1da450f8f04d492389c39d4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x596bf0293a5411a9fd0fad3a3ffb238d3791b894e1da450f8f04d492389c39d4", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbf79e9824d9d7ec7b674209133ab8e766c0a6569ca86ec3f8edb7d86da6bd49e" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0bf79e9824d9d7ec7b674209133ab8e766c0a6569ca86ec3f8edb7d86da6bd49ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa04c6d19990e1f274f39fe7fb9a7e782e7f291716edecd1ed2c341e743a0bf70e0a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a05e4efe42fdda737e193dcdddf01ba87556c2f60d63de82a64479e3c8ea1daf3ea048cdcd875fbb5bb037da373729b9b0ed2401cb8d01d8697215ebd8e7ab63443cc0c0", + "blockHeader": { + "parentHash": "0xbf79e9824d9d7ec7b674209133ab8e766c0a6569ca86ec3f8edb7d86da6bd49e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x4c6d19990e1f274f39fe7fb9a7e782e7f291716edecd1ed2c341e743a0bf70e0", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa9b8631fc8c187519c5b5ce330c9d9b0abd35108a10c77dcea9cc595c435ffd9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5e4efe42fdda737e193dcdddf01ba87556c2f60d63de82a64479e3c8ea1daf3e", + "s": "0x48cdcd875fbb5bb037da373729b9b0ed2401cb8d01d8697215ebd8e7ab63443c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa9b8631fc8c187519c5b5ce330c9d9b0abd35108a10c77dcea9cc595c435ffd9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7c1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b695581526edb4f17c1b6d6511e60582262132786df5cc20bc49b81ab1f6b9aba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb695581526edb4f17c1b6d6511e60582262132786df5cc20bc49b81ab1f6b9ab", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf571f2627a34af048e370c4b927038bfccf355461a06ad99b3dd7478e7b0268c" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0f571f2627a34af048e370c4b927038bfccf355461a06ad99b3dd7478e7b0268ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0526ab2a0ec04bad0e05c00673e4dbddf72fa74ed280a0c169fd8f62395d8d2a5a0adc33c97054ccd0ad311f9704213306fb7f28caed1f4f9c4525678e8a8ad69dda0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000080a07fcecce51659e5ce15be00b94d4c9b29ec0eb093daf72a1cbcd6e75dba9bcedca07e66232611215dac3a6129713d912a98ba06c487d543d389953604cd46206cb3c0c0", + "blockHeader": { + "parentHash": "0xf571f2627a34af048e370c4b927038bfccf355461a06ad99b3dd7478e7b0268c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x526ab2a0ec04bad0e05c00673e4dbddf72fa74ed280a0c169fd8f62395d8d2a5", + "transactionsTrie": "0xadc33c97054ccd0ad311f9704213306fb7f28caed1f4f9c4525678e8a8ad69dd", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1cc2fc83b9b052e95c90f7a3bcdf5e8e28f73b283b8b2ef3c6cea9a90b8a37bf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x7fcecce51659e5ce15be00b94d4c9b29ec0eb093daf72a1cbcd6e75dba9bcedc", + "s": "0x7e66232611215dac3a6129713d912a98ba06c487d543d389953604cd46206cb3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1cc2fc83b9b052e95c90f7a3bcdf5e8e28f73b283b8b2ef3c6cea9a90b8a37bf", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7c71", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0af6d4cf6af694d0c88ff93ffb8d9c5596369cbb690f52636e5af15b4fa1863bba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaf6d4cf6af694d0c88ff93ffb8d9c5596369cbb690f52636e5af15b4fa1863bb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x668999e08bbc0051c8c3376e171b3a7324477bf729d0cfd830fd2074b1ec6dbd" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0668999e08bbc0051c8c3376e171b3a7324477bf729d0cfd830fd2074b1ec6dbda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a1991254fff562e19ed6d5182dc326139090710f0abe03e7a5aa07c88418e092a0407fdcb56b4f85ecf3afa750390a7dd6d617f9c632f752ff4562115b8d12eb69a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a04cf40bb669536427389d66ea910d0f5251c8dd60826d87d79ca5a618f7bda46ca0637382f93312d45f80f5d2ddcb19ea74751525c4ce2930e1686a52046aef239ac0c0", + "blockHeader": { + "parentHash": "0x668999e08bbc0051c8c3376e171b3a7324477bf729d0cfd830fd2074b1ec6dbd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa1991254fff562e19ed6d5182dc326139090710f0abe03e7a5aa07c88418e092", + "transactionsTrie": "0x407fdcb56b4f85ecf3afa750390a7dd6d617f9c632f752ff4562115b8d12eb69", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x73a8fda412dc5c118ca95185fbcaca964ed28063f97daf9a6127ee4887d4e153" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x4cf40bb669536427389d66ea910d0f5251c8dd60826d87d79ca5a618f7bda46c", + "s": "0x637382f93312d45f80f5d2ddcb19ea74751525c4ce2930e1686a52046aef239a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x73a8fda412dc5c118ca95185fbcaca964ed28063f97daf9a6127ee4887d4e153", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcf81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0184591d95b8c0bfde44d77b9b59eaa3763d26b4505a27a8314143419d910f477a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x184591d95b8c0bfde44d77b9b59eaa3763d26b4505a27a8314143419d910f477", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a01fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa07314b31a1cba219beceb89f9d7d914446c77fe400b7d43ee6abc5dc6006e6709a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000001a083c2b041b9b9dd779a41631029a631350445c55e36a9799f482bbdf228e32362a0687fca1e13d58f07c7583787078e1a39601e3c1ebe667470ad08e6b8be15849ec0c0", + "blockHeader": { + "parentHash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0x7314b31a1cba219beceb89f9d7d914446c77fe400b7d43ee6abc5dc6006e6709", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa6484315e02c45456c359997f0400ee88e9628d77cc4c1501de5f62796878542" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x83c2b041b9b9dd779a41631029a631350445c55e36a9799f482bbdf228e32362", + "s": "0x687fca1e13d58f07c7583787078e1a39601e3c1ebe667470ad08e6b8be15849e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa6484315e02c45456c359997f0400ee88e9628d77cc4c1501de5f62796878542", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0cd9cf78a724fe7cd3166ca72d749021b141a143dadaae159fd74ea589744f935a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xcd9cf78a724fe7cd3166ca72d749021b141a143dadaae159fd74ea589744f935", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a06d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa06a99e61060fe78037c40c271510ab7eea91fb7b4c48c86cd7b75a6115cad6caea05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0aa391520b3863efbf35018e543971d15537ed93bd8c90a4b31896d6cae149626a025c3aa086a4f3fc3c952933232b8152838bd2ed7fbcd4c293627ea3562cad634c0c0", + "blockHeader": { + "parentHash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0x6a99e61060fe78037c40c271510ab7eea91fb7b4c48c86cd7b75a6115cad6cae", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x831943c8c5c459dd1c26ec9181a86c76850a2a19bfe879f43dba2b3e76fd789c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaa391520b3863efbf35018e543971d15537ed93bd8c90a4b31896d6cae149626", + "s": "0x25c3aa086a4f3fc3c952933232b8152838bd2ed7fbcd4c293627ea3562cad634", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x831943c8c5c459dd1c26ec9181a86c76850a2a19bfe879f43dba2b3e76fd789c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06bb16bae34728b67032d60d1a0daa0644efc20a1d8a8c64b416c33d6ef66eb5aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6bb16bae34728b67032d60d1a0daa0644efc20a1d8a8c64b416c33d6ef66eb5a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0b14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437dba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a653180b57ce7dc2f44721dc4862bfcdee843b4f222ba826f844eba563171538a0ffaf764a4cb0c2f97b5884dcd2af61cc5832fc6186b454673e294bff9b773c31a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e82520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000001a078a7313f2fb4d0e30871840a22cbfceabb5f19e7c3b00ddd8a5a9e8affce83bda067ff24573357eff09164d431125cb3bc99ab58b5d1b6bac72d680ffc2b871e33c0c0", + "blockHeader": { + "parentHash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa653180b57ce7dc2f44721dc4862bfcdee843b4f222ba826f844eba563171538", + "transactionsTrie": "0xffaf764a4cb0c2f97b5884dcd2af61cc5832fc6186b454673e294bff9b773c31", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xda85cb21fc8513b9f9ad198d8bb65d5523b54ba5b74413a34de9075f6747208c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x78a7313f2fb4d0e30871840a22cbfceabb5f19e7c3b00ddd8a5a9e8affce83bd", + "s": "0x67ff24573357eff09164d431125cb3bc99ab58b5d1b6bac72d680ffc2b871e33", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xda85cb21fc8513b9f9ad198d8bb65d5523b54ba5b74413a34de9075f6747208c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a030d61b3044e87d00cbfc1cae9fc41fcbfc1ef26cb1dddadae6ebed3871d51401a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x30d61b3044e87d00cbfc1cae9fc41fcbfc1ef26cb1dddadae6ebed3871d51401", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a09d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ceda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0eb17551414d498086db4940dd686f92f370c13cf03504d396b336a864d27ac4ca04dc09ff1d4cd2c562c4c37d1e486fb12c762e62e77598114dd882bdec8cac5f9a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0529c31d9ae453f504aca984af7395835e6f0506d31629cb0b004b3a366ac8dbda04f46e9539685099a672c9bcd19405b6a93519a520f56933ea5ac46b934bc5398c0c0", + "blockHeader": { + "parentHash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xeb17551414d498086db4940dd686f92f370c13cf03504d396b336a864d27ac4c", + "transactionsTrie": "0x4dc09ff1d4cd2c562c4c37d1e486fb12c762e62e77598114dd882bdec8cac5f9", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7eb7e316223a2ae395cc74a7949cf4c8534a2823bd3bf1daeaa2f37be5f3844c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x529c31d9ae453f504aca984af7395835e6f0506d31629cb0b004b3a366ac8dbd", + "s": "0x4f46e9539685099a672c9bcd19405b6a93519a520f56933ea5ac46b934bc5398", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7eb7e316223a2ae395cc74a7949cf4c8534a2823bd3bf1daeaa2f37be5f3844c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0184591d95b8c0bfde44d77b9b59eaa3763d26b4505a27a8314143419d910f477a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x184591d95b8c0bfde44d77b9b59eaa3763d26b4505a27a8314143419d910f477", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a01fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa049024415ec28f70c81dc5e1e9da5d3b2119aafeb9d17637770556d1c0697b6b6a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070782520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000080a096c80b1997004ef6966154ab3eff4744143b5dd8e4ecc86f964b610f5804658ea01f891ce09acd89acaa2ba2366d4e51a4b58b2510e8f029a4474c4a5f6eacacc3c0c0", + "blockHeader": { + "parentHash": "0x1fcbd560b5fcb6c1673f8d64c00e06245fd8b9b5c69ae2fca1000000c9869854", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0x49024415ec28f70c81dc5e1e9da5d3b2119aafeb9d17637770556d1c0697b6b6", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf6967d05ec1481e3103aa3b14983736b3e3f6f017e833a5f534a6281b617a582" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x96c80b1997004ef6966154ab3eff4744143b5dd8e4ecc86f964b610f5804658e", + "s": "0x1f891ce09acd89acaa2ba2366d4e51a4b58b2510e8f029a4474c4a5f6eacacc3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf6967d05ec1481e3103aa3b14983736b3e3f6f017e833a5f534a6281b617a582", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0cd9cf78a724fe7cd3166ca72d749021b141a143dadaae159fd74ea589744f935a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xcd9cf78a724fe7cd3166ca72d749021b141a143dadaae159fd74ea589744f935", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a06d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa08edf9fe5fe7fe9758f8b9b0adc54c6f9642d6bbf42e0269957c8b28e58bdf937a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0f937418a264476fa995ee99440e504526bd43a168b7ea6d8d9b9a4cb7d17f356a054d223626823aba0b3549f1a6c82620a4e194c7b289e46dd840f79536055e68dc0c0", + "blockHeader": { + "parentHash": "0x6d69e7ad225123fe7ec582b49e861224237fc24c62fcadadddf24ce90ed3afc7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0x8edf9fe5fe7fe9758f8b9b0adc54c6f9642d6bbf42e0269957c8b28e58bdf937", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5d20de9b08444024923a9370699caef69f6f6913e3530e420f396c51424984bf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xf937418a264476fa995ee99440e504526bd43a168b7ea6d8d9b9a4cb7d17f356", + "s": "0x54d223626823aba0b3549f1a6c82620a4e194c7b289e46dd840f79536055e68d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5d20de9b08444024923a9370699caef69f6f6913e3530e420f396c51424984bf", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06bb16bae34728b67032d60d1a0daa0644efc20a1d8a8c64b416c33d6ef66eb5aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6bb16bae34728b67032d60d1a0daa0644efc20a1d8a8c64b416c33d6ef66eb5a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0b14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437dba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09f60527f62c8a7a973dd398ec9ec8bcdaad34aa7fb446baa1011bc9bd5cea915a0babf821b55346493fc7433b6248ce0ced8802495761a31b3015063ad9e0d4c90a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e82520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000080a02441528b877382681c17d8c5558c74faa471adb4aa39a06190e526f12fb99edca067c088db533184a563e2c29e6c14ef09f4cc9586b3d099eaf06682eb8cc9d5efc0c0", + "blockHeader": { + "parentHash": "0xb14681a7795ede8dce44fe127e31d856a380bc64c697f3f74b3cece1287437db", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9f60527f62c8a7a973dd398ec9ec8bcdaad34aa7fb446baa1011bc9bd5cea915", + "transactionsTrie": "0xbabf821b55346493fc7433b6248ce0ced8802495761a31b3015063ad9e0d4c90", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x51c1bb5018769229bf89318d3acbbff14df7df83c3caed329c66e122a5afcc67" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x2441528b877382681c17d8c5558c74faa471adb4aa39a06190e526f12fb99edc", + "s": "0x67c088db533184a563e2c29e6c14ef09f4cc9586b3d099eaf06682eb8cc9d5ef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x51c1bb5018769229bf89318d3acbbff14df7df83c3caed329c66e122a5afcc67", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a030d61b3044e87d00cbfc1cae9fc41fcbfc1ef26cb1dddadae6ebed3871d51401a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x30d61b3044e87d00cbfc1cae9fc41fcbfc1ef26cb1dddadae6ebed3871d51401", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a09d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ceda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0266a812d4794c8b7c3ca7e410fd75ed931a822ff67c35781eea0caf6ef9c347ea0f5e6dab73da9a8e6039363dde20b6b77fa905187239ebf48c528c412226dbc7da05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0b23a0e316ff3b921e4c8f4febf04420f7d620bef7848c140c834d2a613e9a514a0719aadadc8fa187f45d47289a867b917b73202816813234f257a13f35eada6b0c0c0", + "blockHeader": { + "parentHash": "0x9d06e1811e99c48dd12ea126d23f926b968b3601153b58ba36af292828129ced", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x266a812d4794c8b7c3ca7e410fd75ed931a822ff67c35781eea0caf6ef9c347e", + "transactionsTrie": "0xf5e6dab73da9a8e6039363dde20b6b77fa905187239ebf48c528c412226dbc7d", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcba86f482232a9ef65347b8e5ec8cda1a841fe7a616092fde6f3a78b95f14192" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb23a0e316ff3b921e4c8f4febf04420f7d620bef7848c140c834d2a613e9a514", + "s": "0x719aadadc8fa187f45d47289a867b917b73202816813234f257a13f35eada6b0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xcba86f482232a9ef65347b8e5ec8cda1a841fe7a616092fde6f3a78b95f14192", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd8d2ecfa06833ff3490d5769b4f8769f3d95e45ec0a986b1fff16c4f96bb40ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd8d2ecfa06833ff3490d5769b4f8769f3d95e45ec0a986b1fff16c4f96bb40c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x854714804b8a252535dae5bff8bb852c5f6978724674d23d3e58831b77a340fb" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0854714804b8a252535dae5bff8bb852c5f6978724674d23d3e58831b77a340fba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa08d6971566f6332052cc4f884fb0db7e64dc59855a65eb0c6e1cb8a96fa4fe23fa083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a094087124ffebc262096c525618f323d77c3efafa0bede6728689a86e0babb25ca06f2e99b4c2134b96cbd32c0745af51e2dced52486f87a8f283b6dc35dc4844e0c0c0", + "blockHeader": { + "parentHash": "0x854714804b8a252535dae5bff8bb852c5f6978724674d23d3e58831b77a340fb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x8d6971566f6332052cc4f884fb0db7e64dc59855a65eb0c6e1cb8a96fa4fe23f", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfe39c160f014a0076b51c7774f330960b01824766b276c1e0e7c2a3c715b08c0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x94087124ffebc262096c525618f323d77c3efafa0bede6728689a86e0babb25c", + "s": "0x6f2e99b4c2134b96cbd32c0745af51e2dced52486f87a8f283b6dc35dc4844e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xfe39c160f014a0076b51c7774f330960b01824766b276c1e0e7c2a3c715b08c0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e55", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00b36d021bd1dc83e2ec745ea1c5dd2a030714e245ead8364a5834b1ca7fed728a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0b36d021bd1dc83e2ec745ea1c5dd2a030714e245ead8364a5834b1ca7fed728", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xde77fd6e4c1f6795f40daff8957e8b3ac168b6f168ee6d1963465a4deedf8360" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0de77fd6e4c1f6795f40daff8957e8b3ac168b6f168ee6d1963465a4deedf8360a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa025029ba1c6ad9f1b6e624943247b0d1d8dac98247271ec9418e6ac21a687f7aaa05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a08a8ac3f2415691ecd3f24d113570a40aff875be4f68bee1cf931087c1083fbfca05e53c44fb68dce8d41bed44dd5d7d849c9300e342fd9ae9d556c415f28afb85dc0c0", + "blockHeader": { + "parentHash": "0xde77fd6e4c1f6795f40daff8957e8b3ac168b6f168ee6d1963465a4deedf8360", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x25029ba1c6ad9f1b6e624943247b0d1d8dac98247271ec9418e6ac21a687f7aa", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3f86968051ee5090c17f785205a16d2690ebce7d84379653c85cab784ada7e84" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8a8ac3f2415691ecd3f24d113570a40aff875be4f68bee1cf931087c1083fbfc", + "s": "0x5e53c44fb68dce8d41bed44dd5d7d849c9300e342fd9ae9d556c415f28afb85d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x3f86968051ee5090c17f785205a16d2690ebce7d84379653c85cab784ada7e84", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7dd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09cbc814e1f661db3f8463efc311e0664f08fcddbb58441d0e88e36bdd0296825a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9cbc814e1f661db3f8463efc311e0664f08fcddbb58441d0e88e36bdd0296825", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbeaf2ed3a9e3e612ab149161566a9065acaf5a188a6f0a35d3508533558f7d29" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0beaf2ed3a9e3e612ab149161566a9065acaf5a188a6f0a35d3508533558f7d29a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c17a50ef818be203a268ad13228ea9aad97fbc837c448d4e294e4cd2fdf1aa20a00a4f245dfe63beb32fd745966a8a44e00b6756bd0af83a1a7c0be149b357530fa083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e82520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a02fb069829a347a12b3637f415bff932384ba6d6fcbd1d19cd69bc5904c17cf96a04171a9b53de0c60897e882360f158942560c8d4ed3e88ba57985d7b989cc9328c0c0", + "blockHeader": { + "parentHash": "0xbeaf2ed3a9e3e612ab149161566a9065acaf5a188a6f0a35d3508533558f7d29", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc17a50ef818be203a268ad13228ea9aad97fbc837c448d4e294e4cd2fdf1aa20", + "transactionsTrie": "0x0a4f245dfe63beb32fd745966a8a44e00b6756bd0af83a1a7c0be149b357530f", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf52583d94ab13aad7b7cb9d824c317a35730f4b4baf40286856b1570cdc8f369" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2fb069829a347a12b3637f415bff932384ba6d6fcbd1d19cd69bc5904c17cf96", + "s": "0x4171a9b53de0c60897e882360f158942560c8d4ed3e88ba57985d7b989cc9328", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf52583d94ab13aad7b7cb9d824c317a35730f4b4baf40286856b1570cdc8f369", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03086cdbb0359a38b2818d7d7d28e138efa414010469e71195817289a237dcb51a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3086cdbb0359a38b2818d7d7d28e138efa414010469e71195817289a237dcb51", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x21fbd31d6b1f25d3907a198712bc754db60e7e1b83006c5fe077d9b9fb3a9d72" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a021fbd31d6b1f25d3907a198712bc754db60e7e1b83006c5fe077d9b9fb3a9d72a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0f61b45df8656b7845cc77c3010a8d21d93c0343496c67e180c7480b1665ffda014b2dd31eb3aa84ec94b66f316a45ea0577e5a58c63e1bf33fd746c6b52cdb29a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a08d30d7f415b8e335a34296975eb829ff1498b0062cd6aa6facd22d84add43741a03c6e28fb8bd9736f7fc2dd7ab5ae46cb3e85c63fe950068ac2847093422c12f6c0c0", + "blockHeader": { + "parentHash": "0x21fbd31d6b1f25d3907a198712bc754db60e7e1b83006c5fe077d9b9fb3a9d72", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe0f61b45df8656b7845cc77c3010a8d21d93c0343496c67e180c7480b1665ffd", + "transactionsTrie": "0x14b2dd31eb3aa84ec94b66f316a45ea0577e5a58c63e1bf33fd746c6b52cdb29", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f71c8aeb2058c727bf09fa3dba1b79a96d2f493580613c98bfbbcf68b641fe9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8d30d7f415b8e335a34296975eb829ff1498b0062cd6aa6facd22d84add43741", + "s": "0x3c6e28fb8bd9736f7fc2dd7ab5ae46cb3e85c63fe950068ac2847093422c12f6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4f71c8aeb2058c727bf09fa3dba1b79a96d2f493580613c98bfbbcf68b641fe9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd8d2ecfa06833ff3490d5769b4f8769f3d95e45ec0a986b1fff16c4f96bb40ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd8d2ecfa06833ff3490d5769b4f8769f3d95e45ec0a986b1fff16c4f96bb40c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x854714804b8a252535dae5bff8bb852c5f6978724674d23d3e58831b77a340fb" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0854714804b8a252535dae5bff8bb852c5f6978724674d23d3e58831b77a340fba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa0715293c00468a7bbe10c1b21549572f3b0a519fbcd917dcefc8babdff25836c4a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070782520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0cbccea1d9ac9ae74e77c055f8960896299317361600f705b0b5c2f3b1780ddf0a074d9517bdcb166593cffadace95c7daa7884eda0a433909506ce982839b50d76c0c0", + "blockHeader": { + "parentHash": "0x854714804b8a252535dae5bff8bb852c5f6978724674d23d3e58831b77a340fb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x715293c00468a7bbe10c1b21549572f3b0a519fbcd917dcefc8babdff25836c4", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa79a05550e19a731b79968ca187e1cb8f87cf0f7022295f95088090759383fc9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xcbccea1d9ac9ae74e77c055f8960896299317361600f705b0b5c2f3b1780ddf0", + "s": "0x74d9517bdcb166593cffadace95c7daa7884eda0a433909506ce982839b50d76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa79a05550e19a731b79968ca187e1cb8f87cf0f7022295f95088090759383fc9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3e55", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00b36d021bd1dc83e2ec745ea1c5dd2a030714e245ead8364a5834b1ca7fed728a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0b36d021bd1dc83e2ec745ea1c5dd2a030714e245ead8364a5834b1ca7fed728", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xde77fd6e4c1f6795f40daff8957e8b3ac168b6f168ee6d1963465a4deedf8360" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0de77fd6e4c1f6795f40daff8957e8b3ac168b6f168ee6d1963465a4deedf8360a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa0909911ceff3d19d2640998cd75ffdc74f147f2faa3b3b1906d1dc47648cbae8fa05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a08916770ab7883d7f9c6c48442f6e505b61be71fadecb2618b7b201d3f08bb97aa062b2679c11c1566e3cd0f8243be058c00187d8765c3d2466e428e4eb8540a17fc0c0", + "blockHeader": { + "parentHash": "0xde77fd6e4c1f6795f40daff8957e8b3ac168b6f168ee6d1963465a4deedf8360", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x909911ceff3d19d2640998cd75ffdc74f147f2faa3b3b1906d1dc47648cbae8f", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x71271b6b040d672fe8c64efa10bfd74628dc1c4ef562871560473a160a8fe3ce" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8916770ab7883d7f9c6c48442f6e505b61be71fadecb2618b7b201d3f08bb97a", + "s": "0x62b2679c11c1566e3cd0f8243be058c00187d8765c3d2466e428e4eb8540a17f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x71271b6b040d672fe8c64efa10bfd74628dc1c4ef562871560473a160a8fe3ce", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae7dd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09cbc814e1f661db3f8463efc311e0664f08fcddbb58441d0e88e36bdd0296825a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9cbc814e1f661db3f8463efc311e0664f08fcddbb58441d0e88e36bdd0296825", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbeaf2ed3a9e3e612ab149161566a9065acaf5a188a6f0a35d3508533558f7d29" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0beaf2ed3a9e3e612ab149161566a9065acaf5a188a6f0a35d3508533558f7d29a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f8389439c4e2dcb71f4506f4c23b5edf36b9e907b5357c58a9a576fb47ecccd8a071f37acc27299267c3c1f0d22f8c1f5e7def3787aca4bdff882c7e38e19cedcaa083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e82520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000080a06b8cab69739e2a7d026f392720de8e9bac652a34517fd098bd3fab9ef0e68667a0054662b699c9d17432337f6562fe0ef9ac3d10e6c96a258617e3a2ac5038d726c0c0", + "blockHeader": { + "parentHash": "0xbeaf2ed3a9e3e612ab149161566a9065acaf5a188a6f0a35d3508533558f7d29", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf8389439c4e2dcb71f4506f4c23b5edf36b9e907b5357c58a9a576fb47ecccd8", + "transactionsTrie": "0x71f37acc27299267c3c1f0d22f8c1f5e7def3787aca4bdff882c7e38e19cedca", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x95e48b95c75c78fd0d19c44cdaa193d1c91157bff2cbbe04dda8575d045f9ea6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6b8cab69739e2a7d026f392720de8e9bac652a34517fd098bd3fab9ef0e68667", + "s": "0x054662b699c9d17432337f6562fe0ef9ac3d10e6c96a258617e3a2ac5038d726", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x95e48b95c75c78fd0d19c44cdaa193d1c91157bff2cbbe04dda8575d045f9ea6", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7ca9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03086cdbb0359a38b2818d7d7d28e138efa414010469e71195817289a237dcb51a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3086cdbb0359a38b2818d7d7d28e138efa414010469e71195817289a237dcb51", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x21fbd31d6b1f25d3907a198712bc754db60e7e1b83006c5fe077d9b9fb3a9d72" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a021fbd31d6b1f25d3907a198712bc754db60e7e1b83006c5fe077d9b9fb3a9d72a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0eff359c2c394224bd0658b83a4bb000a8c6b08de8a926056214bdb6a8d41f10ca03182984bd865c919fb102608800d49f0ade5063f67226373b6cd0bc403c00961a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0af313df2c7f6470f0df6e089617096ade67544fda4b3991ecaf41a813cde1591a014a02b92369c3e29188cd3d4aabfdcec9c8748cada270ad13d1f880ae1ed18cac0c0", + "blockHeader": { + "parentHash": "0x21fbd31d6b1f25d3907a198712bc754db60e7e1b83006c5fe077d9b9fb3a9d72", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xeff359c2c394224bd0658b83a4bb000a8c6b08de8a926056214bdb6a8d41f10c", + "transactionsTrie": "0x3182984bd865c919fb102608800d49f0ade5063f67226373b6cd0bc403c00961", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd2979d1d4ea530b29c208c8adb9b36059f498c30a98eec8409d4e1e464647f55" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaf313df2c7f6470f0df6e089617096ade67544fda4b3991ecaf41a813cde1591", + "s": "0x14a02b92369c3e29188cd3d4aabfdcec9c8748cada270ad13d1f880ae1ed18ca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd2979d1d4ea530b29c208c8adb9b36059f498c30a98eec8409d4e1e464647f55", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdcfb9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a050e00198d9f73a29f05d30db8d790fa95328b238f55faa5a2445d034292eb7fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x50e00198d9f73a29f05d30db8d790fa95328b238f55faa5a2445d034292eb7fc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a03864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa065e4a709de70d94125b86eaee5ac72bb6d9fa470c5434af07f0a9e7569cebb07a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000001a07f9f5fe3e754c4e688723d0e7ddd66878f516905c65af8fb2882ecaa0c279001a00c3c893125789852c1f90f1ae6698ab692f8622ad3c03361db826da0d7b960d8c0c0", + "blockHeader": { + "parentHash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0x65e4a709de70d94125b86eaee5ac72bb6d9fa470c5434af07f0a9e7569cebb07", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x87e7c5eb4d18faf7a8481315449405dc25b7cf2ca48b36f5808aa3e198758390" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7f9f5fe3e754c4e688723d0e7ddd66878f516905c65af8fb2882ecaa0c279001", + "s": "0x0c3c893125789852c1f90f1ae6698ab692f8622ad3c03361db826da0d7b960d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x87e7c5eb4d18faf7a8481315449405dc25b7cf2ca48b36f5808aa3e198758390", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b55b6dcd3a1d54d067c6cdca97b50d87120810742f2fd424feba8c8930192607a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb55b6dcd3a1d54d067c6cdca97b50d87120810742f2fd424feba8c8930192607", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a04f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa024adad1f08d19cd11704dc69b19004948fd45337747968d4184da4ee33dde95ca02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a04df0b9fa2a4a26645d3babd7abd1532d50aebd7ed3ffe6587c06d0f6b505fa5ea0756dd50a07befcb8a184447e0f901873c4ab3c3e4790d3b1bd1edc421cc171b4c0c0", + "blockHeader": { + "parentHash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0x24adad1f08d19cd11704dc69b19004948fd45337747968d4184da4ee33dde95c", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x92ac75ea3e7af416c53739bf96e35dce6f97a48af45a1f0c4c52e7daaec3f716" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x4df0b9fa2a4a26645d3babd7abd1532d50aebd7ed3ffe6587c06d0f6b505fa5e", + "s": "0x756dd50a07befcb8a184447e0f901873c4ab3c3e4790d3b1bd1edc421cc171b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x92ac75ea3e7af416c53739bf96e35dce6f97a48af45a1f0c4c52e7daaec3f716", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f2756baec5875c9e1e89da994cc35921dcabe34b936ee9dc419d58f646389eda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6f2756baec5875c9e1e89da994cc35921dcabe34b936ee9dc419d58f646389ed", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0b42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06c1890efeb6a8903bc8ac64078924e05772aaa12f629f360d89deeb8264e844ea0a7662556a9d9773c498b2f91fb1b261ed89c8411527de6bff084e9304f2154f5a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000001a07b6d127075d940d526441f2673fa9e266c7d827e8db33d213837e3a19a9a8f08a070446308e00776b7235a9b142adaf668e0f9a05f594d019a8c8090a505ee3763c0c0", + "blockHeader": { + "parentHash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6c1890efeb6a8903bc8ac64078924e05772aaa12f629f360d89deeb8264e844e", + "transactionsTrie": "0xa7662556a9d9773c498b2f91fb1b261ed89c8411527de6bff084e9304f2154f5", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x05a1fcf06828ebb39f19b0aaf4cbe44c9757b61b6e7d1cf07a3b4ae50f983b77" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7b6d127075d940d526441f2673fa9e266c7d827e8db33d213837e3a19a9a8f08", + "s": "0x70446308e00776b7235a9b142adaf668e0f9a05f594d019a8c8090a505ee3763", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x05a1fcf06828ebb39f19b0aaf4cbe44c9757b61b6e7d1cf07a3b4ae50f983b77", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0249e218265747906f280125815117a6d1edf04c6d5b312ac04d9b965db3a55e5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x249e218265747906f280125815117a6d1edf04c6d5b312ac04d9b965db3a55e5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0c5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e242332708354169f14675f6ccf0c9cac491385b4b463df4e19565202dccf8d2a0621d99c43c6b4c99ba207ec9fadbbe3af6e2081e3049239709902fe8e5adf06aa02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a09216c81fba6f7f214faa74d673fd85037f15e62e10dffc3a636467ef03223b25a05e8e99f04cafb7a33f7ab64d96c2bed6a34a0804299a6a078d61d0ea7ec97453c0c0", + "blockHeader": { + "parentHash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe242332708354169f14675f6ccf0c9cac491385b4b463df4e19565202dccf8d2", + "transactionsTrie": "0x621d99c43c6b4c99ba207ec9fadbbe3af6e2081e3049239709902fe8e5adf06a", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb33630caff90c030214d1811936c55ecb637f0d21f86017b89331f926d4cdae3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9216c81fba6f7f214faa74d673fd85037f15e62e10dffc3a636467ef03223b25", + "s": "0x5e8e99f04cafb7a33f7ab64d96c2bed6a34a0804299a6a078d61d0ea7ec97453", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb33630caff90c030214d1811936c55ecb637f0d21f86017b89331f926d4cdae3", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a050e00198d9f73a29f05d30db8d790fa95328b238f55faa5a2445d034292eb7fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x50e00198d9f73a29f05d30db8d790fa95328b238f55faa5a2445d034292eb7fc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a03864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa0f31521fadd3a9ca9b1610de68885d4812312c8c043879d7e72dfc2391e6cd693a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0a12fd8521bc1b70afbda5b65b0251fd51fc5cc285e75b3ad4b9f4fbf6bc8c633a04cf80fd18df6dfc2895dde80f5ec0ace9bc9f9c9dc734ea57ed15b0077bcc3dcc0c0", + "blockHeader": { + "parentHash": "0x3864bf49c239c0f7b1161c43eb6f6b3b87a408c4dedf31065de87d11350a1e21", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0xf31521fadd3a9ca9b1610de68885d4812312c8c043879d7e72dfc2391e6cd693", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa6a3e481209b8b3dc3a942f4be9c76c72474fd1bdd61a1a4a398331c7a2c62e1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa12fd8521bc1b70afbda5b65b0251fd51fc5cc285e75b3ad4b9f4fbf6bc8c633", + "s": "0x4cf80fd18df6dfc2895dde80f5ec0ace9bc9f9c9dc734ea57ed15b0077bcc3dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa6a3e481209b8b3dc3a942f4be9c76c72474fd1bdd61a1a4a398331c7a2c62e1", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b55b6dcd3a1d54d067c6cdca97b50d87120810742f2fd424feba8c8930192607a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb55b6dcd3a1d54d067c6cdca97b50d87120810742f2fd424feba8c8930192607", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a04f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3dfa0a7ea5c052b5a65520780c8686f1923e727fab4dd4990e146b4caf57cd938b2ada02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0aaf62538a9d4930cf4e98750aa930ffc8df47a5bb59d03752c625a101a5e4de9a023c4d3d442bbcd35c070779efe7d5c1b0a456ce9ae055c2d068e489f5b5f83c6c0c0", + "blockHeader": { + "parentHash": "0x4f4690a3fcdf736a01b7f01ad7a11b3fb1461d68c4b5f54fae1985859a82696c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf15e13016be1ba23eff00a040301249781d93587b352af14e40c9046b485e3df", + "transactionsTrie": "0xa7ea5c052b5a65520780c8686f1923e727fab4dd4990e146b4caf57cd938b2ad", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdeaa2bd30a0da6305fc54512e1bdbf045bc14405840bebcbc1255ddc9b4c34ce" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xaaf62538a9d4930cf4e98750aa930ffc8df47a5bb59d03752c625a101a5e4de9", + "s": "0x23c4d3d442bbcd35c070779efe7d5c1b0a456ce9ae055c2d068e489f5b5f83c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xdeaa2bd30a0da6305fc54512e1bdbf045bc14405840bebcbc1255ddc9b4c34ce", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f2756baec5875c9e1e89da994cc35921dcabe34b936ee9dc419d58f646389eda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6f2756baec5875c9e1e89da994cc35921dcabe34b936ee9dc419d58f646389ed", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0b42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bcf6f52a094f306c3a7cb3e7b2c23645055342e24958f8a5eab21d84c1e891faa0807a9f60268e508427e6c804bd920ad97ed5dc14b6ea7bfe3fb41d0f744b3404a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0c46d4ebc2d59526c53e7a728f6f4e60e8096b204211d1b305fdf78f89acc1e70a03c7eeddd006e6c4ae8bf01e175195cf3ee97cc47aaf0bf3134177b319abb1e39c0c0", + "blockHeader": { + "parentHash": "0xb42ea6e86792363ef0c7c5e9e5ae59c2807fb1726b59c9623bbb08b8222e1dd7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbcf6f52a094f306c3a7cb3e7b2c23645055342e24958f8a5eab21d84c1e891fa", + "transactionsTrie": "0x807a9f60268e508427e6c804bd920ad97ed5dc14b6ea7bfe3fb41d0f744b3404", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f23448241538050dc792378f3ad05a1966b6c5efdc46b061e64bd212543e814" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xc46d4ebc2d59526c53e7a728f6f4e60e8096b204211d1b305fdf78f89acc1e70", + "s": "0x3c7eeddd006e6c4ae8bf01e175195cf3ee97cc47aaf0bf3134177b319abb1e39", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4f23448241538050dc792378f3ad05a1966b6c5efdc46b061e64bd212543e814", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0249e218265747906f280125815117a6d1edf04c6d5b312ac04d9b965db3a55e5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x249e218265747906f280125815117a6d1edf04c6d5b312ac04d9b965db3a55e5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0c5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05aacaa359e8d711522bac6165895f554d3d1333ec020cd0bbb70b3e7f17c346fa014c7b54a4be7d67ddce79e24d35db43fcadd6d922ddf31165830bfefd620e31ba02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0792fbaddebd163ada29d19d2ef81c5550a3166263a6e738c2eb8074329e29675a02cb7428c63a5e4ef145ff51bff3fa2f7b3486893465446be46a48fd13ce5b878c0c0", + "blockHeader": { + "parentHash": "0xc5e550cadccb29fa46ae521ae01e49518ee3c9e091e8a9fec8fdd7e52522d7f8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5aacaa359e8d711522bac6165895f554d3d1333ec020cd0bbb70b3e7f17c346f", + "transactionsTrie": "0x14c7b54a4be7d67ddce79e24d35db43fcadd6d922ddf31165830bfefd620e31b", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3357c03b91089dcc81f6a94a64bcff1690abd582bedcaf2a8933afb0ec1c22eb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x792fbaddebd163ada29d19d2ef81c5550a3166263a6e738c2eb8074329e29675", + "s": "0x2cb7428c63a5e4ef145ff51bff3fa2f7b3486893465446be46a48fd13ce5b878", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x3357c03b91089dcc81f6a94a64bcff1690abd582bedcaf2a8933afb0ec1c22eb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0afe887114ceb2553c63976efc8f3bf3b0c9db9591a3fffae82d84371fbcf85f6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xafe887114ceb2553c63976efc8f3bf3b0c9db9591a3fffae82d84371fbcf85f6", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb90a087a43c32728c011a21daf77d7f219c3d96068baece54dff010f7bc3fa9b" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0b90a087a43c32728c011a21daf77d7f219c3d96068baece54dff010f7bc3fa9ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa05d3dfcf0eb3f53941849dcbdd9c78308a55c1dada38b741a3cbdbbd27aec6aa2a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018080078252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a006883411220464f72192002f0a60cb808a6eae4bea1f5132e1781fd4fda103eea04aa561534729a93553281328f36d7151485241f744d7f61e22c8e1f80df0c83ec0c0", + "blockHeader": { + "parentHash": "0xb90a087a43c32728c011a21daf77d7f219c3d96068baece54dff010f7bc3fa9b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x5d3dfcf0eb3f53941849dcbdd9c78308a55c1dada38b741a3cbdbbd27aec6aa2", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0a51b0f967f4b981bfd4e10926844cd531b8da44b2ef282c0b23eb3e48c8c890" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x06883411220464f72192002f0a60cb808a6eae4bea1f5132e1781fd4fda103ee", + "s": "0x4aa561534729a93553281328f36d7151485241f744d7f61e22c8e1f80df0c83e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x0a51b0f967f4b981bfd4e10926844cd531b8da44b2ef282c0b23eb3e48c8c890", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0395253671f8b054258920d317418662affb58bbbb120e0361e3c16701e8a5bc5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x395253671f8b054258920d317418662affb58bbbb120e0361e3c16701e8a5bc5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x07875b55d7f5a599c01268753ac4b14223bc8031ac36a3cdfff88fa1a5e569f0" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a007875b55d7f5a599c01268753ac4b14223bc8031ac36a3cdfff88fa1a5e569f0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa03cffea38dd99d1d374d835b530d74fded48667455c795733a72ce206fc2681e1a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a01a0866792a9db84324b32c8c3c787c47a38a2735cdda280080b0644b8f6408f8a0074d889fed3ef481fb6a44aa9759e40584672e3becd5ce3655542b78679e3a6bc0c0", + "blockHeader": { + "parentHash": "0x07875b55d7f5a599c01268753ac4b14223bc8031ac36a3cdfff88fa1a5e569f0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x3cffea38dd99d1d374d835b530d74fded48667455c795733a72ce206fc2681e1", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8c19be9c8a53f16e3a557330a1224d685425de914115b660a1f5e996ef2b4c3f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x1a0866792a9db84324b32c8c3c787c47a38a2735cdda280080b0644b8f6408f8", + "s": "0x074d889fed3ef481fb6a44aa9759e40584672e3becd5ce3655542b78679e3a6b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8c19be9c8a53f16e3a557330a1224d685425de914115b660a1f5e996ef2b4c3f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae831", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04405678fa2939732cf7b6ee7351f60add2d8f5774f991d1fa91e31b5ef622afda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4405678fa2939732cf7b6ee7351f60add2d8f5774f991d1fa91e31b5ef622afd", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc8e505ab9422c24d168d26666413cad466cf91d847d5eb0638c7748bbabd6684" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0c8e505ab9422c24d168d26666413cad466cf91d847d5eb0638c7748bbabd6684a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0769081bcc524c9eeaad240f36fae4be0ae3470aa3fa61aa7ef6e5aef93f4d5bca071d427e892d311770b8f34172bea1173140e999d75a6f7e5eebaa62e03d4346fa08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800e8252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0c6cd039f7dee69dae122acee65f6e638b9a5399539cf3c51dbda2d06c6d042d3a073065b82c46ead5ffc0340db4dd99433f1c8cc7c0cdd05120128d8aadc9573f5c0c0", + "blockHeader": { + "parentHash": "0xc8e505ab9422c24d168d26666413cad466cf91d847d5eb0638c7748bbabd6684", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x769081bcc524c9eeaad240f36fae4be0ae3470aa3fa61aa7ef6e5aef93f4d5bc", + "transactionsTrie": "0x71d427e892d311770b8f34172bea1173140e999d75a6f7e5eebaa62e03d4346f", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x73736a5247900d4ce25e0be73125be7e1ef17001711c4de25cc3753576450e41" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xc6cd039f7dee69dae122acee65f6e638b9a5399539cf3c51dbda2d06c6d042d3", + "s": "0x73065b82c46ead5ffc0340db4dd99433f1c8cc7c0cdd05120128d8aadc9573f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x73736a5247900d4ce25e0be73125be7e1ef17001711c4de25cc3753576450e41", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d51", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00561cadd1484fe2000ff428e8f91277b98ced23e70e89dfffa2a3e64dca4b5aca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0561cadd1484fe2000ff428e8f91277b98ced23e70e89dfffa2a3e64dca4b5ac", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xffd5c6e58bef315c58d7ed7cc05285cf579525858511137dfa3d24ceca91d90a" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0ffd5c6e58bef315c58d7ed7cc05285cf579525858511137dfa3d24ceca91d90aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04039f69b0bdc44daddb264c7cc5b74781cf047e3b857d70811a36b0ea1d38cada0cc1ca0c26216d4a49dc2fa84c03716e11601070fc2a0d5ae6f00f3f38f107f49a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0b6b209031ac8abc022c73579aca72a1a82c27df43895fcc918466eccc68f977da06f28e699d4fb3021316f632f616179029b9cdbe464b5b25d6794c97e24904a3fc0c0", + "blockHeader": { + "parentHash": "0xffd5c6e58bef315c58d7ed7cc05285cf579525858511137dfa3d24ceca91d90a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4039f69b0bdc44daddb264c7cc5b74781cf047e3b857d70811a36b0ea1d38cad", + "transactionsTrie": "0xcc1ca0c26216d4a49dc2fa84c03716e11601070fc2a0d5ae6f00f3f38f107f49", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x14af4fa6e02975b561751d1bbb2c7301c21e6b2dc0e82324a6618f1d0dc725f0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xb6b209031ac8abc022c73579aca72a1a82c27df43895fcc918466eccc68f977d", + "s": "0x6f28e699d4fb3021316f632f616179029b9cdbe464b5b25d6794c97e24904a3f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x14af4fa6e02975b561751d1bbb2c7301c21e6b2dc0e82324a6618f1d0dc725f0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd061", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0afe887114ceb2553c63976efc8f3bf3b0c9db9591a3fffae82d84371fbcf85f6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xafe887114ceb2553c63976efc8f3bf3b0c9db9591a3fffae82d84371fbcf85f6", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb90a087a43c32728c011a21daf77d7f219c3d96068baece54dff010f7bc3fa9b" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0b90a087a43c32728c011a21daf77d7f219c3d96068baece54dff010f7bc3fa9ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa075c52e42b819771524b5b3473aae70bd4250a846ec4c0dd7fdf2504801599893a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f885018007078252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0469ed640a73150fef29feafa9d3ff7ec754759193a05c6bfd951348c696c826ba0545c8818de996aabcedacd4d0de6bc6d4be5f37020bf015069a98436b5af368ac0c0", + "blockHeader": { + "parentHash": "0xb90a087a43c32728c011a21daf77d7f219c3d96068baece54dff010f7bc3fa9b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x75c52e42b819771524b5b3473aae70bd4250a846ec4c0dd7fdf2504801599893", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9a9f72a95eb004e6aa4bd4f4f98fa7d7805d8dc9f3c83c289d932dd690611202" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x469ed640a73150fef29feafa9d3ff7ec754759193a05c6bfd951348c696c826b", + "s": "0x545c8818de996aabcedacd4d0de6bc6d4be5f37020bf015069a98436b5af368a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9a9f72a95eb004e6aa4bd4f4f98fa7d7805d8dc9f3c83c289d932dd690611202", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xca3ea9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0395253671f8b054258920d317418662affb58bbbb120e0361e3c16701e8a5bc5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x395253671f8b054258920d317418662affb58bbbb120e0361e3c16701e8a5bc5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x07875b55d7f5a599c01268753ac4b14223bc8031ac36a3cdfff88fa1a5e569f0" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a007875b55d7f5a599c01268753ac4b14223bc8031ac36a3cdfff88fa1a5e569f0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18caa08c022eb5f720d553e22c4cb0542f3d8c13b409da867ab0c6fc2978d617081a16a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e101800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a06793576d99c0cb92abdd40a78a282ad414062720cdafcdeee08bcdafe16008aba05b67522ff1e5a2069b7ec5bacc56a361a2d26183dad45e47ec135cf209631a0fc0c0", + "blockHeader": { + "parentHash": "0x07875b55d7f5a599c01268753ac4b14223bc8031ac36a3cdfff88fa1a5e569f0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfe3c44f0836adead3e167cb1ce27113cd52582478c3f1b3faf135e8aab1b18ca", + "transactionsTrie": "0x8c022eb5f720d553e22c4cb0542f3d8c13b409da867ab0c6fc2978d617081a16", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf854f09042fd834fa0864e7be1a4945509a17ace977adad219199dc0b4ff1a37" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6793576d99c0cb92abdd40a78a282ad414062720cdafcdeee08bcdafe16008ab", + "s": "0x5b67522ff1e5a2069b7ec5bacc56a361a2d26183dad45e47ec135cf209631a0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf854f09042fd834fa0864e7be1a4945509a17ace977adad219199dc0b4ff1a37", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcae831", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04405678fa2939732cf7b6ee7351f60add2d8f5774f991d1fa91e31b5ef622afda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4405678fa2939732cf7b6ee7351f60add2d8f5774f991d1fa91e31b5ef622afd", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc8e505ab9422c24d168d26666413cad466cf91d847d5eb0638c7748bbabd6684" + }, + "blocks": [ + { + "rlp": "0xf902d5f90244a0c8e505ab9422c24d168d26666413cad466cf91d847d5eb0638c7748bbabd6684a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0be4caff5eba554a77df24b66ff995b6be6042e7fc9ca746dc30169bee47b9743a0b80b9d49f9305f505fc8b24d4a9199a86555cbb78c3c53a12bbc3d46e0f49ae1a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180070e8252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08663abe203791dc1b3e233ffc7bb979b03eebf14d96254d04cef257f783b779fa03cb436e1fa097da2d5399e1cf04dbc630a7e09ccab64cb706a9fc325caca22e2c0c0", + "blockHeader": { + "parentHash": "0xc8e505ab9422c24d168d26666413cad466cf91d847d5eb0638c7748bbabd6684", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbe4caff5eba554a77df24b66ff995b6be6042e7fc9ca746dc30169bee47b9743", + "transactionsTrie": "0xb80b9d49f9305f505fc8b24d4a9199a86555cbb78c3c53a12bbc3d46e0f49ae1", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x73a0950a107def44f68310103c34171fcc784c446b9c0a073287977253a765ad" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8663abe203791dc1b3e233ffc7bb979b03eebf14d96254d04cef257f783b779f", + "s": "0x3cb436e1fa097da2d5399e1cf04dbc630a7e09ccab64cb706a9fc325caca22e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x73a0950a107def44f68310103c34171fcc784c446b9c0a073287977253a765ad", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcc7d51", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00561cadd1484fe2000ff428e8f91277b98ced23e70e89dfffa2a3e64dca4b5aca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0561cadd1484fe2000ff428e8f91277b98ced23e70e89dfffa2a3e64dca4b5ac", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xffd5c6e58bef315c58d7ed7cc05285cf579525858511137dfa3d24ceca91d90a" + }, + "blocks": [ + { + "rlp": "0xf90331f90244a0ffd5c6e58bef315c58d7ed7cc05285cf579525858511137dfa3d24ceca91d90aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09a21f88dd65ec269df839679ef957334d3a124d94a319f1f9a16a4980cb8527ba0b8034c7c3f50cc9607c25b6086d17f068bac1ca67a58cb1051e16519f301b70aa02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e6b8e403f8e10180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a09bbeba8786747f3fe1a74cf51db594f25149991020bd16ccd19007467f55c244a001738eb94e5f213477fba07b1f77778e89db34d2467fd43b41d74b183561368ec0c0", + "blockHeader": { + "parentHash": "0xffd5c6e58bef315c58d7ed7cc05285cf579525858511137dfa3d24ceca91d90a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9a21f88dd65ec269df839679ef957334d3a124d94a319f1f9a16a4980cb8527b", + "transactionsTrie": "0xb8034c7c3f50cc9607c25b6086d17f068bac1ca67a58cb1051e16519f301b70a", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7f8d8f883cb8bf8362c1f6e1101656afe0071574f6505e2034a71075b8a45cc3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x9bbeba8786747f3fe1a74cf51db594f25149991020bd16ccd19007467f55c244", + "s": "0x01738eb94e5f213477fba07b1f77778e89db34d2467fd43b41d74b183561368e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7f8d8f883cb8bf8362c1f6e1101656afe0071574f6505e2034a71075b8a45cc3", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0xcdd061", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a03bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a01f891ed49aa2ea2321e3194458246660119b2094690933c89531792faf8b40cda0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a092c7b7ebc1af73ef5871030920e2b1b28b78ccdefac30a7851cbc34f77f9241ba0378b2976452d62627a6b1301c0df985b0c9d21c4172f4e2086938e55637800f2c0c0", + "blockHeader": { + "parentHash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0x1f891ed49aa2ea2321e3194458246660119b2094690933c89531792faf8b40cd", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x14a04b4be87482f0d4ade1a4d50f3bca8e1fa72405fe61e195a2a919080dbdd8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x92c7b7ebc1af73ef5871030920e2b1b28b78ccdefac30a7851cbc34f77f9241b", + "s": "0x378b2976452d62627a6b1301c0df985b0c9d21c4172f4e2086938e55637800f2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x14a04b4be87482f0d4ade1a4d50f3bca8e1fa72405fe61e195a2a919080dbdd8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00b4c93033fcd96dda7be91343ba1974bd2ed43cf6720d06d9e213278384317d2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0b4c93033fcd96dda7be91343ba1974bd2ed43cf6720d06d9e213278384317d2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a037d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a0205dbed08930d91230e256c5e14da790ab8ceeb1ee82f47177e1f106e72f1063a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a02ea305fe0e144b348cdc7358392d73386a4915efa1696416fd7e2d15141859c6a04b1bc94df15b149c2113fff900ffcc6ada64f58e04faa3feeff31380ac70a419c0c0", + "blockHeader": { + "parentHash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0x205dbed08930d91230e256c5e14da790ab8ceeb1ee82f47177e1f106e72f1063", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7795c211566ed0a84ce3af81fdbb191eaf8c885538d55f7938c839ab0a3a5706" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2ea305fe0e144b348cdc7358392d73386a4915efa1696416fd7e2d15141859c6", + "s": "0x4b1bc94df15b149c2113fff900ffcc6ada64f58e04faa3feeff31380ac70a419", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7795c211566ed0a84ce3af81fdbb191eaf8c885538d55f7938c839ab0a3a5706", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd4aaa52a2f5ec3cc164b4a61c9dd4663f01633dec9f126901e72c90fb800cbda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd4aaa52a2f5ec3cc164b4a61c9dd4663f01633dec9f126901e72c90fb800cbd", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a06c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e06b1a7ef4c7b1d01d2ee7c8a7944fcd0c7fb4d31c14a7e75b7f893e5aec5af5a08bddbee73c1ca78d23393b7471a1d8847504550af31bac50d06794f15125aef9a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e8252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a050e3b68c3144a229669731c901428808797606bbea471424889e5d7812cbc6d5a027cf7c86194d064a3fb7fb85f32232ae3c77a2ca53a2bb59a58d2e747c80b8dfc0c0", + "blockHeader": { + "parentHash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe06b1a7ef4c7b1d01d2ee7c8a7944fcd0c7fb4d31c14a7e75b7f893e5aec5af5", + "transactionsTrie": "0x8bddbee73c1ca78d23393b7471a1d8847504550af31bac50d06794f15125aef9", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x39d7c852e904138d793c6e328277b5eabd004b02bf63a4ecf6e3ef97428e5583" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x50e3b68c3144a229669731c901428808797606bbea471424889e5d7812cbc6d5", + "s": "0x27cf7c86194d064a3fb7fb85f32232ae3c77a2ca53a2bb59a58d2e747c80b8df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x39d7c852e904138d793c6e328277b5eabd004b02bf63a4ecf6e3ef97428e5583", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a6d8b9c6c5cca9d910f2fa1e5cb30854534965516038614609d69a0f658cb66ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa6d8b9c6c5cca9d910f2fa1e5cb30854534965516038614609d69a0f658cb66e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a005cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0372ec6c801e6da2fb883ae4cadbf2f0e04a37abbcea2b0ab46d8b990564b5b55a04e2b49d53dfca7d468703fd52dddde8be71c72ce80a66516829b8d76c48c7596a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a05b617c0c02004e5cc77e5bf21cb8865b70868ee8b52f41a8fa0910ba85e835eca04adfe5598248c0d3413e213fa47ae23f575aac2b69bf164e9dafea211c95dd9dc0c0", + "blockHeader": { + "parentHash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x372ec6c801e6da2fb883ae4cadbf2f0e04a37abbcea2b0ab46d8b990564b5b55", + "transactionsTrie": "0x4e2b49d53dfca7d468703fd52dddde8be71c72ce80a66516829b8d76c48c7596", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd994d5c8a0702727a4d43dc01b8c820e440c5bf8e18d10bc61026661b53b8213" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5b617c0c02004e5cc77e5bf21cb8865b70868ee8b52f41a8fa0910ba85e835ec", + "s": "0x4adfe5598248c0d3413e213fa47ae23f575aac2b69bf164e9dafea211c95dd9d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd994d5c8a0702727a4d43dc01b8c820e440c5bf8e18d10bc61026661b53b8213", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x534f988668f132ad9f481e8e6d1d05ffcc2066d880787b534c6c06054c464ecb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a03bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a0d4f25b3c0cf939e59318307d5168c81e5ec74b089dd77cdd91d2a47d4598fc88a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018007078252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0dd1b8f54fa20615f927ca07e90e90c7ac966bee167ccd718cbd792ddc9a9cbf7a07ff96b9573d80e2e5af4a6e11cd3440d6ec66b9ff9790d0dfaea603b429e22aec0c0", + "blockHeader": { + "parentHash": "0x3bc335959a17395f2c2fcd7124519ae1c33267688b27bd44be6ac964f3ccc67a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0xd4f25b3c0cf939e59318307d5168c81e5ec74b089dd77cdd91d2a47d4598fc88", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc3d404b4d0c0f5e32695f7f83d571d585b22a73457e3b60da68103c6c4c8f2d7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xdd1b8f54fa20615f927ca07e90e90c7ac966bee167ccd718cbd792ddc9a9cbf7", + "s": "0x7ff96b9573d80e2e5af4a6e11cd3440d6ec66b9ff9790d0dfaea603b429e22ae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc3d404b4d0c0f5e32695f7f83d571d585b22a73457e3b60da68103c6c4c8f2d7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e38", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00b4c93033fcd96dda7be91343ba1974bd2ed43cf6720d06d9e213278384317d2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0b4c93033fcd96dda7be91343ba1974bd2ed43cf6720d06d9e213278384317d2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a037d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a0e5cfcc9894070af694030d6884a417e3a2dba37285720ba0c76feddac7ebac68a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00d8ee2775fd2d4ccbc42622d28ffd9e8dc6291040718d87242c1466ce97ab25aa0738c1765113600b650463a50eb3d51e0c6385446daedd5a386599e0013ddf99cc0c0", + "blockHeader": { + "parentHash": "0x37d659b33dba8c0eec0664422ad2ae1acfcbb038e92b9a51cab6388b7b910ea2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0xe5cfcc9894070af694030d6884a417e3a2dba37285720ba0c76feddac7ebac68", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdb5d3ba3728e2135830aadc970f8c3dbc6b2a7e5689b32931d281052862df36d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0d8ee2775fd2d4ccbc42622d28ffd9e8dc6291040718d87242c1466ce97ab25a", + "s": "0x738c1765113600b650463a50eb3d51e0c6385446daedd5a386599e0013ddf99c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xdb5d3ba3728e2135830aadc970f8c3dbc6b2a7e5689b32931d281052862df36d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7c0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd4aaa52a2f5ec3cc164b4a61c9dd4663f01633dec9f126901e72c90fb800cbda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd4aaa52a2f5ec3cc164b4a61c9dd4663f01633dec9f126901e72c90fb800cbd", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a06c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bfed34ffd5858f38b17e6ef58510453d31d4ee1932e419d81022c40a8b5b2461a0adab475d1805aaf0c5db15e9d27731b8ffef411903ab9edd0db08729ba078866a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e8252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a09e33f45eb18e4dbf9712bcec6add17dc50de91825473a7247cc16af427e30958a0544db7b3b09d20e5f1f8f537655e0c9a864e72bb4ed77f225e5a4fde9711c944c0c0", + "blockHeader": { + "parentHash": "0x6c198364ad917e0c079287af6b5da922bfbae7cb72a5cdf3604230c2e905c75b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbfed34ffd5858f38b17e6ef58510453d31d4ee1932e419d81022c40a8b5b2461", + "transactionsTrie": "0xadab475d1805aaf0c5db15e9d27731b8ffef411903ab9edd0db08729ba078866", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4c0336ba1161123e05473855dd7be58f9bb25108caa9f053ad259f4d05358bac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9e33f45eb18e4dbf9712bcec6add17dc50de91825473a7247cc16af427e30958", + "s": "0x544db7b3b09d20e5f1f8f537655e0c9a864e72bb4ed77f225e5a4fde9711c944", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4c0336ba1161123e05473855dd7be58f9bb25108caa9f053ad259f4d05358bac", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c70", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a6d8b9c6c5cca9d910f2fa1e5cb30854534965516038614609d69a0f658cb66ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa6d8b9c6c5cca9d910f2fa1e5cb30854534965516038614609d69a0f658cb66e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a005cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c10bd128dd0d276e9dc52bd4fb7d22dc6f87afb3b3956d52245e93f9e4b3c5e8a056c345f14928eb5226d0bec73078e3e2b9830e33d7cb0e64362c4406212da362a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a03da19453cc892af659638b974452c8a629647cd04cbdd41d9c4c59779d5b2712a03e2606d6fd6927fe1cebbe0d2f16b4f1f677852d9110bb8369fe602910f66c86c0c0", + "blockHeader": { + "parentHash": "0x05cae015ae98ac2012f5dd412e7145beb994931488bd26d028f7fc64ea6e387b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc10bd128dd0d276e9dc52bd4fb7d22dc6f87afb3b3956d52245e93f9e4b3c5e8", + "transactionsTrie": "0x56c345f14928eb5226d0bec73078e3e2b9830e33d7cb0e64362c4406212da362", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb302e857a89a5b95f24d6925a1d786937acd11559f96c746191c624a817a6ef3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x3da19453cc892af659638b974452c8a629647cd04cbdd41d9c4c59779d5b2712", + "s": "0x3e2606d6fd6927fe1cebbe0d2f16b4f1f677852d9110bb8369fe602910f66c86", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb302e857a89a5b95f24d6925a1d786937acd11559f96c746191c624a817a6ef3", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ddebb6812118fcb239c93a5dddda2f336bad56eb39849a7a658f42da4be8cd24a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xddebb6812118fcb239c93a5dddda2f336bad56eb39849a7a658f42da4be8cd24", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4df8066c6167e16f0356ec0a18ad78c51c96fa55447a3a0d976b432ad3cf91fb" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a04df8066c6167e16f0356ec0a18ad78c51c96fa55447a3a0d976b432ad3cf91fba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a0cb89fd5e5a53eb0be62c8ce9345ab88f3b4d728f331276b9c6f76f032a6ddc54a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a060bdbc102688803f54a5228f5dd6fdb93877ccb02af626152683ded93d2fbdcda076d0a55a6fc84350507d282984e6c3c869964ff920d476afd5a0b2225fa1858ac0c0", + "blockHeader": { + "parentHash": "0x4df8066c6167e16f0356ec0a18ad78c51c96fa55447a3a0d976b432ad3cf91fb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0xcb89fd5e5a53eb0be62c8ce9345ab88f3b4d728f331276b9c6f76f032a6ddc54", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd05f6992aa22cd50bbf45b7637d5c574662b104535324a930b9b4e60cecdda8e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x60bdbc102688803f54a5228f5dd6fdb93877ccb02af626152683ded93d2fbdcd", + "s": "0x76d0a55a6fc84350507d282984e6c3c869964ff920d476afd5a0b2225fa1858a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd05f6992aa22cd50bbf45b7637d5c574662b104535324a930b9b4e60cecdda8e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a044dc9539e8c3c7e18893a50fa23d0dcbdcffc440a5de757ebe79e4fa8d8632dba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x44dc9539e8c3c7e18893a50fa23d0dcbdcffc440a5de757ebe79e4fa8d8632db", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x17a84832e3ede9b3c4a7b32278e98acfcc6a548eaf0a5927b3c3c624a3f00199" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a017a84832e3ede9b3c4a7b32278e98acfcc6a548eaf0a5927b3c3c624a3f00199a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a005d27c1080207f026d24a87af391f5cb7f4c615a0d20b5f678bc51f4165544eaa0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0ebd201a64c07471b2a882c122c78db731668e587d8a33b3e8cdfe2e7917b13afa049eb54c293c91fec4430213c48e9eda347abee605f1e19423175783e958d2387c0c0", + "blockHeader": { + "parentHash": "0x17a84832e3ede9b3c4a7b32278e98acfcc6a548eaf0a5927b3c3c624a3f00199", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x05d27c1080207f026d24a87af391f5cb7f4c615a0d20b5f678bc51f4165544ea", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x71baabf0ed597c707795b4160fd0cd617e98736e25ba81a70e264680dbe081b9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xebd201a64c07471b2a882c122c78db731668e587d8a33b3e8cdfe2e7917b13af", + "s": "0x49eb54c293c91fec4430213c48e9eda347abee605f1e19423175783e958d2387", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x71baabf0ed597c707795b4160fd0cd617e98736e25ba81a70e264680dbe081b9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7c1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a081932708da85bb7f5b95870eaacfa4bf560efec471229211c476ad5502919feaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x81932708da85bb7f5b95870eaacfa4bf560efec471229211c476ad5502919fea", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x94cee7f3e9e456ad50317a77d1fa09349fc4c8f900259740d1ba088df54c6722" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a094cee7f3e9e456ad50317a77d1fa09349fc4c8f900259740d1ba088df54c6722a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0349a0b2fa8df7f3885b81ff5079cadec39337aedab8b919cb075ee8fcfc35861a0e53f7d01ac00db86371f0be5489cfd1f48445fd39dad9fc03610c227ff1ad18ba0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e8252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a07b108e251dd57672f54555136e1af548eb1fc8469136b718235281339280989ca03bb779ed2af560396d4516ad3412d1ba50650e2d30a0320fe8c87c59b8a86711c0c0", + "blockHeader": { + "parentHash": "0x94cee7f3e9e456ad50317a77d1fa09349fc4c8f900259740d1ba088df54c6722", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x349a0b2fa8df7f3885b81ff5079cadec39337aedab8b919cb075ee8fcfc35861", + "transactionsTrie": "0xe53f7d01ac00db86371f0be5489cfd1f48445fd39dad9fc03610c227ff1ad18b", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xca05a1c1f17f4d50896364e56f6ed4d11e780b36fd7fb6fe2bbcca187a9ea6a5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7b108e251dd57672f54555136e1af548eb1fc8469136b718235281339280989c", + "s": "0x3bb779ed2af560396d4516ad3412d1ba50650e2d30a0320fe8c87c59b8a86711", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xca05a1c1f17f4d50896364e56f6ed4d11e780b36fd7fb6fe2bbcca187a9ea6a5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c71", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03d8eeb5cd1dddf88546c3d84942a499d71ad46777b07e5fd8c9412bc4da3f16ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3d8eeb5cd1dddf88546c3d84942a499d71ad46777b07e5fd8c9412bc4da3f16c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4622a56c1737efc18e86e253ae3fc5ed29ca4ed2fc8bd27021353c431bfbfd2c" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a04622a56c1737efc18e86e253ae3fc5ed29ca4ed2fc8bd27021353c431bfbfd2ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e64cf1060b0cfdcec3586b916d8ba02e6c47a91bfd83353da1aa4f8e5a1d5eb3a028a3857045334902d2f807fb5556afffa37517256a77863855676bb30ffff2dea0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a03e2f8f78cfbeadfb51038da716bfb2f4ff3f9bd90afd4d00bff3bcb3ebbe93afa068e3eac03dbe1261acd4a7f5d4c16b1de2464853ffdd178a7154f58be7de276ac0c0", + "blockHeader": { + "parentHash": "0x4622a56c1737efc18e86e253ae3fc5ed29ca4ed2fc8bd27021353c431bfbfd2c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe64cf1060b0cfdcec3586b916d8ba02e6c47a91bfd83353da1aa4f8e5a1d5eb3", + "transactionsTrie": "0x28a3857045334902d2f807fb5556afffa37517256a77863855676bb30ffff2de", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc9fb50e6f156501a00469b68ca82cbdc4fbca1f8989bb5c29be506695a93f0f0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x3e2f8f78cfbeadfb51038da716bfb2f4ff3f9bd90afd4d00bff3bcb3ebbe93af", + "s": "0x68e3eac03dbe1261acd4a7f5d4c16b1de2464853ffdd178a7154f58be7de276a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc9fb50e6f156501a00469b68ca82cbdc4fbca1f8989bb5c29be506695a93f0f0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ddebb6812118fcb239c93a5dddda2f336bad56eb39849a7a658f42da4be8cd24a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xddebb6812118fcb239c93a5dddda2f336bad56eb39849a7a658f42da4be8cd24", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4df8066c6167e16f0356ec0a18ad78c51c96fa55447a3a0d976b432ad3cf91fb" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a04df8066c6167e16f0356ec0a18ad78c51c96fa55447a3a0d976b432ad3cf91fba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a029eac016f279d5c99b5cbfd61d0b808a4896d68e4fdc2b9dfbfd2cc9e133bba3a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018007078252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a05dfedc76bea10f9a40d1e5329782925bfe0221dd5b1a87dd226abc233529bb1ba07e6c42a1221a9f5fccb5afe98848ae64293e0b1d83da72bb57038a383feb5ffbc0c0", + "blockHeader": { + "parentHash": "0x4df8066c6167e16f0356ec0a18ad78c51c96fa55447a3a0d976b432ad3cf91fb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x29eac016f279d5c99b5cbfd61d0b808a4896d68e4fdc2b9dfbfd2cc9e133bba3", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x759fbbb3e32ea699c4318a30b459b60366dabe21fcc0ad7aa8a2aec82a643dea" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5dfedc76bea10f9a40d1e5329782925bfe0221dd5b1a87dd226abc233529bb1b", + "s": "0x7e6c42a1221a9f5fccb5afe98848ae64293e0b1d83da72bb57038a383feb5ffb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x759fbbb3e32ea699c4318a30b459b60366dabe21fcc0ad7aa8a2aec82a643dea", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e39", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a044dc9539e8c3c7e18893a50fa23d0dcbdcffc440a5de757ebe79e4fa8d8632dba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x44dc9539e8c3c7e18893a50fa23d0dcbdcffc440a5de757ebe79e4fa8d8632db", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x17a84832e3ede9b3c4a7b32278e98acfcc6a548eaf0a5927b3c3c624a3f00199" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a017a84832e3ede9b3c4a7b32278e98acfcc6a548eaf0a5927b3c3c624a3f00199a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a0116e9ddce5bea62f50e702c6f8511c4cb8643dd59feae89fd61e219eb2bb085ba0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a096d0237736b62b449edc34f131cbb379c54def08b4e5670b8c908dc40efbf5bfa059f68c34237a997edc7259a589fc5c3624021b99a23b420881ff425aad22db98c0c0", + "blockHeader": { + "parentHash": "0x17a84832e3ede9b3c4a7b32278e98acfcc6a548eaf0a5927b3c3c624a3f00199", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x116e9ddce5bea62f50e702c6f8511c4cb8643dd59feae89fd61e219eb2bb085b", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x66e95d2a3d6b2510f1cbfb8a8dff9cb3c2b3b49c77d15184130d2c610c3cb8d9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x96d0237736b62b449edc34f131cbb379c54def08b4e5670b8c908dc40efbf5bf", + "s": "0x59f68c34237a997edc7259a589fc5c3624021b99a23b420881ff425aad22db98", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x66e95d2a3d6b2510f1cbfb8a8dff9cb3c2b3b49c77d15184130d2c610c3cb8d9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7c1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a081932708da85bb7f5b95870eaacfa4bf560efec471229211c476ad5502919feaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x81932708da85bb7f5b95870eaacfa4bf560efec471229211c476ad5502919fea", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x94cee7f3e9e456ad50317a77d1fa09349fc4c8f900259740d1ba088df54c6722" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a094cee7f3e9e456ad50317a77d1fa09349fc4c8f900259740d1ba088df54c6722a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0afc01a0646b81584d77bdbac564f715826bca09f8ae2908f15b026e96a68e66da0a706d0e8b19aa3935fa50249481fdfefe65ff5e3bad7f75165a2eb78f3f88c80a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e8252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00fa79b627d118136401b6987edfb55657f00b79a78e8eca44a6ca07382011779a01d59e63500c2bf2303e9247b7981bbb55af2d5f4446ca492e3fdae09de00a520c0c0", + "blockHeader": { + "parentHash": "0x94cee7f3e9e456ad50317a77d1fa09349fc4c8f900259740d1ba088df54c6722", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xafc01a0646b81584d77bdbac564f715826bca09f8ae2908f15b026e96a68e66d", + "transactionsTrie": "0xa706d0e8b19aa3935fa50249481fdfefe65ff5e3bad7f75165a2eb78f3f88c80", + "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5208", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x25bcdc055274da2b57093f7361a237cfa14b9b97ff4fee96090d468f63340d8d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0fa79b627d118136401b6987edfb55657f00b79a78e8eca44a6ca07382011779", + "s": "0x1d59e63500c2bf2303e9247b7981bbb55af2d5f4446ca492e3fdae09de00a520", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x25bcdc055274da2b57093f7361a237cfa14b9b97ff4fee96090d468f63340d8d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247c71", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03d8eeb5cd1dddf88546c3d84942a499d71ad46777b07e5fd8c9412bc4da3f16ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3d8eeb5cd1dddf88546c3d84942a499d71ad46777b07e5fd8c9412bc4da3f16c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4622a56c1737efc18e86e253ae3fc5ed29ca4ed2fc8bd27021353c431bfbfd2c" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a04622a56c1737efc18e86e253ae3fc5ed29ca4ed2fc8bd27021353c431bfbfd2ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00423e6d5f7eda0cf59996eb010ab4a0ea50a4e28d8ef28c673a23c2c7bbb816ba001c2248649f84f7fc4953af2b87d162107ef65e292726935153832272b14e200a0336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a09e30c1bbc14cd27b166731e1c6a924a38a0d5b9d9024bc258fea46a265df1574a035c6142059a5a39b5535e843d9ddbe28293547c2a71b0a95a79e319d92d97881c0c0", + "blockHeader": { + "parentHash": "0x4622a56c1737efc18e86e253ae3fc5ed29ca4ed2fc8bd27021353c431bfbfd2c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0423e6d5f7eda0cf59996eb010ab4a0ea50a4e28d8ef28c673a23c2c7bbb816b", + "transactionsTrie": "0x01c2248649f84f7fc4953af2b87d162107ef65e292726935153832272b14e200", + "receiptTrie": "0x336490fb5ca3832b54509cccf16c97279fb5a3b87d70964c500e8ff91e8e57d2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a40", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4a354df5161952cf99473693eefb40f3cafa881a6c8c018ae3b9f0c2dc1befb6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9e30c1bbc14cd27b166731e1c6a924a38a0d5b9d9024bc258fea46a265df1574", + "s": "0x35c6142059a5a39b5535e843d9ddbe28293547c2a71b0a95a79e319d92d97881", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4a354df5161952cf99473693eefb40f3cafa881a6c8c018ae3b9f0c2dc1befb6", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cf81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ba527114a7246851d1dab852f93edcef7766b51a30fd9100fa2fe7fcad0c757aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xba527114a7246851d1dab852f93edcef7766b51a30fd9100fa2fe7fcad0c757a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0b20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a0020b2a035d63e11ab458b0e68871203ad227d66b5c152354b3edc5004dccc590a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800782520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a06959339e21ad17968ec7a05241efc6168a05fc67cc94f7f97851079cc77c7d46a0485f1387ffcb64ddc9bd1116bb006eece5e21b115cc1120df579dc69ba925796c0c0", + "blockHeader": { + "parentHash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0x020b2a035d63e11ab458b0e68871203ad227d66b5c152354b3edc5004dccc590", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc32e6a4776eb5d6163a07eeb745dcc7e8a64689059c5d8b38e930c2cd9f56c6f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6959339e21ad17968ec7a05241efc6168a05fc67cc94f7f97851079cc77c7d46", + "s": "0x485f1387ffcb64ddc9bd1116bb006eece5e21b115cc1120df579dc69ba925796", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc32e6a4776eb5d6163a07eeb745dcc7e8a64689059c5d8b38e930c2cd9f56c6f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a051e3f1679aa3231a0d8b4983d5f29307e33c57c19aafc9e8b59c94414515ac5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x51e3f1679aa3231a0d8b4983d5f29307e33c57c19aafc9e8b59c94414515ac5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0f6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a0877a716dc30b933ee1fad83fed7555e317c3402335ad7b138a5b498fb6704ab7a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a01cad126c86f4fd56191f6c693df6efd409db8abff0965bc398791ebb42dc0d8ea012910cd6dbf1e4907f51162e2ab4ab9dd69bd9684493dc56b234357ccf9820acc0c0", + "blockHeader": { + "parentHash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0x877a716dc30b933ee1fad83fed7555e317c3402335ad7b138a5b498fb6704ab7", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9f3d88dcf5e938d3687496b55fee4e44dc113ccf34b0ab7141dc8970a94ec835" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x1cad126c86f4fd56191f6c693df6efd409db8abff0965bc398791ebb42dc0d8e", + "s": "0x12910cd6dbf1e4907f51162e2ab4ab9dd69bd9684493dc56b234357ccf9820ac", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9f3d88dcf5e938d3687496b55fee4e44dc113ccf34b0ab7141dc8970a94ec835", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a058f3df7b09b16058f11b080bc2e62c1d7aabe39a9ebe78c5354e4c37499863bfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x58f3df7b09b16058f11b080bc2e62c1d7aabe39a9ebe78c5354e4c37499863bf", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa040c3712d1e5e3cb41297fa865a43ce234b3670d30dbffc60a84524bce59e04cba0a72810225688c3ee4c82ef74e71828638133b49de73e79e8b0475598a28abd74a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e82520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a033e0af5033fd1f323b09b5eb8b28755809b27da46f4a428ff2b3c185c08dd4d0a005feab24c19b8528cbfc8f74349d91641bb49eb21e11f9889f3dc9610563ff0fc0c0", + "blockHeader": { + "parentHash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x40c3712d1e5e3cb41297fa865a43ce234b3670d30dbffc60a84524bce59e04cb", + "transactionsTrie": "0xa72810225688c3ee4c82ef74e71828638133b49de73e79e8b0475598a28abd74", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x03efebda07244e534e0cde4bde7f57a7a0591b6a1da4289361332d01d66ffa3d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x33e0af5033fd1f323b09b5eb8b28755809b27da46f4a428ff2b3c185c08dd4d0", + "s": "0x05feab24c19b8528cbfc8f74349d91641bb49eb21e11f9889f3dc9610563ff0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x03efebda07244e534e0cde4bde7f57a7a0591b6a1da4289361332d01d66ffa3d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0613d6b4dd81aead99a12146cd39aa9bd76dd01a2e4a435c683a37b455612a026a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x613d6b4dd81aead99a12146cd39aa9bd76dd01a2e4a435c683a37b455612a026", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a01dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa062fc9145e0799ec1bdf207882b5ce16173348ac534180123758f89025e12d5c5a0911c1b324b7e6d7da39dfd127440f65941c04bbcfb3f7f3dc17ab305bb3f1380a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0cba2c173a8b72646e9f1dc0e2e7be050857d90a3bc52f43ec23365b3873cad20a00fa456f6f9103fd212c33a78e1e10bc0efd7f10eb24710a63d342321ddfff229c0c0", + "blockHeader": { + "parentHash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x62fc9145e0799ec1bdf207882b5ce16173348ac534180123758f89025e12d5c5", + "transactionsTrie": "0x911c1b324b7e6d7da39dfd127440f65941c04bbcfb3f7f3dc17ab305bb3f1380", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfec10e9f686a9f4c72a6d4deae6250758d6dac9ba04f31410973f7dc91fd84fb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xcba2c173a8b72646e9f1dc0e2e7be050857d90a3bc52f43ec23365b3873cad20", + "s": "0x0fa456f6f9103fd212c33a78e1e10bc0efd7f10eb24710a63d342321ddfff229", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xfec10e9f686a9f4c72a6d4deae6250758d6dac9ba04f31410973f7dc91fd84fb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ba527114a7246851d1dab852f93edcef7766b51a30fd9100fa2fe7fcad0c757aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xba527114a7246851d1dab852f93edcef7766b51a30fd9100fa2fe7fcad0c757a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0b20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a078e7f1a11741f76dd1f4b04eb0bbd7dfbc2137bae75fad3c661c810792fd1335a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070782520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a005a016518a99ae0ded668adc6782e0de89583fbe798e6de420542f331c38a845a04dfe19e5003370c5bab18218be5b150c60fa59ebff1d81b3c44da2e501961891c0c0", + "blockHeader": { + "parentHash": "0xb20f2b64f89443ee127652ee7552b9892664086dc6cfad1c3288b1e34f1c0ce7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0x78e7f1a11741f76dd1f4b04eb0bbd7dfbc2137bae75fad3c661c810792fd1335", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1f1d8e0e09a25df39db3f41c9873527ab0d2724adab8623e0919574eae73f433" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x05a016518a99ae0ded668adc6782e0de89583fbe798e6de420542f331c38a845", + "s": "0x4dfe19e5003370c5bab18218be5b150c60fa59ebff1d81b3c44da2e501961891", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1f1d8e0e09a25df39db3f41c9873527ab0d2724adab8623e0919574eae73f433", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e54", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a051e3f1679aa3231a0d8b4983d5f29307e33c57c19aafc9e8b59c94414515ac5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x51e3f1679aa3231a0d8b4983d5f29307e33c57c19aafc9e8b59c94414515ac5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0f6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a0a561ace252d7dc8d549346f7988c7339c6f9987adbb46a8bda5d48bf4ccea58aa05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0efe02c0e5f252541e7fd202ccd98234fe54b9429cc886a205b2dbb18da25364ca024b022a06fccad812aeae7c3d0adfd7ae0049a999edbee046f2aaf805ff3d829c0c0", + "blockHeader": { + "parentHash": "0xf6c8b5b8b36d29b65c1b4bbed92e86a13a575ff69291a5521966b1c67f4b7f45", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0xa561ace252d7dc8d549346f7988c7339c6f9987adbb46a8bda5d48bf4ccea58a", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe69fe6c4998a51770154f03d9ae01ebeaf8191967e0f917c5b1ebd863a3ffa9d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xefe02c0e5f252541e7fd202ccd98234fe54b9429cc886a205b2dbb18da25364c", + "s": "0x24b022a06fccad812aeae7c3d0adfd7ae0049a999edbee046f2aaf805ff3d829", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe69fe6c4998a51770154f03d9ae01ebeaf8191967e0f917c5b1ebd863a3ffa9d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7dc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a058f3df7b09b16058f11b080bc2e62c1d7aabe39a9ebe78c5354e4c37499863bfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x58f3df7b09b16058f11b080bc2e62c1d7aabe39a9ebe78c5354e4c37499863bf", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d5b8c0338b55501f486a52f7ca0ff031acc40a35f93c8c52df0e00c307c0492a038e013f693e047a7613216fe210146fc9149e3e0837171f528ac961a755159eca083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e82520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0f7683aa66a91e5f086a15932367761f467f97e0957384099385db208f67357f6a07b0b81e949ee8d2824de4ced913518e38042d91dd1c34288ee8bffa0a9223a5bc0c0", + "blockHeader": { + "parentHash": "0x486da4097585bd04e974c90d08c199aaaa75d397cb4c4e7dbf6a4c9843f54416", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4d5b8c0338b55501f486a52f7ca0ff031acc40a35f93c8c52df0e00c307c0492", + "transactionsTrie": "0x38e013f693e047a7613216fe210146fc9149e3e0837171f528ac961a755159ec", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x14a4c8cbe98f86b01d6b08a04d1b8255061bc5540111682371b1c293d76f312f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xf7683aa66a91e5f086a15932367761f467f97e0957384099385db208f67357f6", + "s": "0x7b0b81e949ee8d2824de4ced913518e38042d91dd1c34288ee8bffa0a9223a5b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x14a4c8cbe98f86b01d6b08a04d1b8255061bc5540111682371b1c293d76f312f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247ca8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0613d6b4dd81aead99a12146cd39aa9bd76dd01a2e4a435c683a37b455612a026a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x613d6b4dd81aead99a12146cd39aa9bd76dd01a2e4a435c683a37b455612a026", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a01dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a22903dffa417d3475d9e5f378a5cf70a10d72912eb6ff6d80442805ccd4ad02a0387be863c66f9a0fcb78a75bb6121cb590b0909c4887fd70542ecee2bcd2fa17a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0aebd4c38d14e6a61dc112ab083ff2e5fd3cb8b35205b0c79cf4b3fae7ce66fe3a03ed02886c81899d057794ec2e797b207e1288bf3b1b80615500aca7945084776c0c0", + "blockHeader": { + "parentHash": "0x1dae5821be59d303f3d0e31745cee63a5d79f67ec6bc8a7dde38ddda16355462", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa22903dffa417d3475d9e5f378a5cf70a10d72912eb6ff6d80442805ccd4ad02", + "transactionsTrie": "0x387be863c66f9a0fcb78a75bb6121cb590b0909c4887fd70542ecee2bcd2fa17", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x72c5d474bf9b65365e08a335052102fd91844495ef927459bb9b0be3ba365c81" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaebd4c38d14e6a61dc112ab083ff2e5fd3cb8b35205b0c79cf4b3fae7ce66fe3", + "s": "0x3ed02886c81899d057794ec2e797b207e1288bf3b1b80615500aca7945084776", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x72c5d474bf9b65365e08a335052102fd91844495ef927459bb9b0be3ba365c81", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cfb8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e757b28fe344b24bb42968f67c92c389ef5315c0e0bed26cac3c3ab869cc0c4fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe757b28fe344b24bb42968f67c92c389ef5315c0e0bed26cac3c3ab869cc0c4f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfba670a1bcf8b774a451276774169e42d9e2307d7fa411ce1a31b06a978b4e3b" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0fba670a1bcf8b774a451276774169e42d9e2307d7fa411ce1a31b06a978b4e3ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a071281d56e7445dd2ef16623221ff9265de6d08c820165254ac1257ee614950c9a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800782520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0230a4b3674fa190f9593614cf09656c46086984c59dc0e2cc920a10ba1d0fbbca03e4362b59329422d1d411acd035f32e935fd8adc9eace15e753259e334733e0ec0c0", + "blockHeader": { + "parentHash": "0xfba670a1bcf8b774a451276774169e42d9e2307d7fa411ce1a31b06a978b4e3b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x71281d56e7445dd2ef16623221ff9265de6d08c820165254ac1257ee614950c9", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8db55ee233f21687bcb21952beedc45c942b4f0bec7174acb648972a7c7090fc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x230a4b3674fa190f9593614cf09656c46086984c59dc0e2cc920a10ba1d0fbbc", + "s": "0x3e4362b59329422d1d411acd035f32e935fd8adc9eace15e753259e334733e0e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8db55ee233f21687bcb21952beedc45c942b4f0bec7174acb648972a7c7090fc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e55", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fd6f631eb64a56ec49ab8e370d63c65c6116e3b7bfcbfccfa5bbf569c3e4dc8ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfd6f631eb64a56ec49ab8e370d63c65c6116e3b7bfcbfccfa5bbf569c3e4dc8c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x093a539df1e7201677a0523a4e1614262cbe0a7b04d3bd80d9bde40a9c5758e4" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0093a539df1e7201677a0523a4e1614262cbe0a7b04d3bd80d9bde40a9c5758e4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a004c3232b492c3a9e0dacfa2437a0838488c9732092b74b85475f64bb00d54467a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a052ccd29cd94dc128a0aab8d436e933d0ede9eb483c1d9d8521c2592e8b1062eca07e5c09cf9a89dc3e373479d3aaa2acd89464f5841e37722bbea7e54846bd4701c0c0", + "blockHeader": { + "parentHash": "0x093a539df1e7201677a0523a4e1614262cbe0a7b04d3bd80d9bde40a9c5758e4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x04c3232b492c3a9e0dacfa2437a0838488c9732092b74b85475f64bb00d54467", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbbfc4a5514313e9ef3619fdb354c839ed65f84d4fad43cbe78ad6cf5c663d11e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x52ccd29cd94dc128a0aab8d436e933d0ede9eb483c1d9d8521c2592e8b1062ec", + "s": "0x7e5c09cf9a89dc3e373479d3aaa2acd89464f5841e37722bbea7e54846bd4701", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xbbfc4a5514313e9ef3619fdb354c839ed65f84d4fad43cbe78ad6cf5c663d11e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7dd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06c085157abe3d18cc9004caf968447391f8811f7513b154521d45847c522947da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6c085157abe3d18cc9004caf968447391f8811f7513b154521d45847c522947d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbd9289444bd55c31eccdd3f2103c2c65d19da27fc792ea0f4f95c5e9c7eb4ffd" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0bd9289444bd55c31eccdd3f2103c2c65d19da27fc792ea0f4f95c5e9c7eb4ffda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08a3983c0d75bdcdc41074f676da32212bac660d8d12ceac34caebdf782e4ae9aa01821a37e4952aa6090c1e0c4675987439df1bd6a6a0bb2458ef1d401817d0231a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e82520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0cefeaaedcf98e6c7efbbb7730eb53037796b915470bd75c6aae6a828095f253ba052215f2047423f25ef26d6c63a15658c5a8e74b181b245b709c0c2537a3d7c13c0c0", + "blockHeader": { + "parentHash": "0xbd9289444bd55c31eccdd3f2103c2c65d19da27fc792ea0f4f95c5e9c7eb4ffd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8a3983c0d75bdcdc41074f676da32212bac660d8d12ceac34caebdf782e4ae9a", + "transactionsTrie": "0x1821a37e4952aa6090c1e0c4675987439df1bd6a6a0bb2458ef1d401817d0231", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1c09a9ff00eb9b92e8abda4affa743f691a38a626c4b9a7050bee12e010a3471" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xcefeaaedcf98e6c7efbbb7730eb53037796b915470bd75c6aae6a828095f253b", + "s": "0x52215f2047423f25ef26d6c63a15658c5a8e74b181b245b709c0c2537a3d7c13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1c09a9ff00eb9b92e8abda4affa743f691a38a626c4b9a7050bee12e010a3471", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247ca9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02284de4bba95e8fb80e73de8d39dda2b61d4ba6a5564e25eda051e040915eb9ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2284de4bba95e8fb80e73de8d39dda2b61d4ba6a5564e25eda051e040915eb9c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcff7b05aadf184b237ca0ada465e49633bc3b64c29c3964bca942edb60b9dc45" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0cff7b05aadf184b237ca0ada465e49633bc3b64c29c3964bca942edb60b9dc45a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d9273ac8667b88124abcb5d1d4356f7aab219e42b3ae3f0a46056da5b3f1d9cda0d100c7138683bb93c6cb464e9668821c745a2145ffcaa782f6541fa2493f3bd9a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a01368c44f78322fdb92a8cb146e98175d3ac3e33e8835021b24002ca179563d2aa06777ca9ce4691236834bce569bbea41de83f45d8fd31c1028355fdaf858e85dcc0c0", + "blockHeader": { + "parentHash": "0xcff7b05aadf184b237ca0ada465e49633bc3b64c29c3964bca942edb60b9dc45", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd9273ac8667b88124abcb5d1d4356f7aab219e42b3ae3f0a46056da5b3f1d9cd", + "transactionsTrie": "0xd100c7138683bb93c6cb464e9668821c745a2145ffcaa782f6541fa2493f3bd9", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xff95470c4a9591faa9981fbd3c737729f0bab09c81fac1895e3ff520e495782c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x1368c44f78322fdb92a8cb146e98175d3ac3e33e8835021b24002ca179563d2a", + "s": "0x6777ca9ce4691236834bce569bbea41de83f45d8fd31c1028355fdaf858e85dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xff95470c4a9591faa9981fbd3c737729f0bab09c81fac1895e3ff520e495782c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cfb9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e757b28fe344b24bb42968f67c92c389ef5315c0e0bed26cac3c3ab869cc0c4fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe757b28fe344b24bb42968f67c92c389ef5315c0e0bed26cac3c3ab869cc0c4f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfba670a1bcf8b774a451276774169e42d9e2307d7fa411ce1a31b06a978b4e3b" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0fba670a1bcf8b774a451276774169e42d9e2307d7fa411ce1a31b06a978b4e3ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a00f3f12323a67fb29c094d0a10c82b8d30cd4c9c184c8731fe45cd9c6d92a18a8a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070782520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a058da4ed58684aaeab0d9fb81bbc8d0ed7b9677f6f335f3be04992ae74e1f2aa7a0237400ceadd895f35550ee3ff96c9e96e7e495da60e215a17b108b6fabe514d9c0c0", + "blockHeader": { + "parentHash": "0xfba670a1bcf8b774a451276774169e42d9e2307d7fa411ce1a31b06a978b4e3b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x0f3f12323a67fb29c094d0a10c82b8d30cd4c9c184c8731fe45cd9c6d92a18a8", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x742e6f1328f111e5074ee80642803d06058893356c124010589a7d27fce5f062" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x58da4ed58684aaeab0d9fb81bbc8d0ed7b9677f6f335f3be04992ae74e1f2aa7", + "s": "0x237400ceadd895f35550ee3ff96c9e96e7e495da60e215a17b108b6fabe514d9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x742e6f1328f111e5074ee80642803d06058893356c124010589a7d27fce5f062", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223e55", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fd6f631eb64a56ec49ab8e370d63c65c6116e3b7bfcbfccfa5bbf569c3e4dc8ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfd6f631eb64a56ec49ab8e370d63c65c6116e3b7bfcbfccfa5bbf569c3e4dc8c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x093a539df1e7201677a0523a4e1614262cbe0a7b04d3bd80d9bde40a9c5758e4" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0093a539df1e7201677a0523a4e1614262cbe0a7b04d3bd80d9bde40a9c5758e4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a005536c8450b78b5d3356ccd13c54f7801932dfedbb907bd607b125ce37c7a918a05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0b09d7c5d094b16b74eb224e54baa4ca675bdaddbdf8361d6813aa9784aefbddfa05c3c01185da4fec57149bbc75504f899f7194c0e9e0da64dce9926319f693bc9c0c0", + "blockHeader": { + "parentHash": "0x093a539df1e7201677a0523a4e1614262cbe0a7b04d3bd80d9bde40a9c5758e4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x05536c8450b78b5d3356ccd13c54f7801932dfedbb907bd607b125ce37c7a918", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd404ff25676b52637c26cf4260636c78c20aa9a52f7270d8caafc4c230e85c16" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb09d7c5d094b16b74eb224e54baa4ca675bdaddbdf8361d6813aa9784aefbddf", + "s": "0x5c3c01185da4fec57149bbc75504f899f7194c0e9e0da64dce9926319f693bc9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd404ff25676b52637c26cf4260636c78c20aa9a52f7270d8caafc4c230e85c16", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e7dd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06c085157abe3d18cc9004caf968447391f8811f7513b154521d45847c522947da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6c085157abe3d18cc9004caf968447391f8811f7513b154521d45847c522947d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbd9289444bd55c31eccdd3f2103c2c65d19da27fc792ea0f4f95c5e9c7eb4ffd" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0bd9289444bd55c31eccdd3f2103c2c65d19da27fc792ea0f4f95c5e9c7eb4ffda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0617143520f2dedc1414e4ad9b47579d79514b8e4cf2f758c2d12a3e6a8d4e445a0c1d17593acdad8b301e37ed143817774b08940702bf8add5f722aaf2cad033b9a083b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082520c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e82520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a09118f52f3cd19b91d35e7fe9ece4389bbb59b855406a43c68bd5a4e28c70ccbaa079dc6e43500a56e8a36581f356bf0756962f7575d0f0e5c510860910f2ebc9aec0c0", + "blockHeader": { + "parentHash": "0xbd9289444bd55c31eccdd3f2103c2c65d19da27fc792ea0f4f95c5e9c7eb4ffd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x617143520f2dedc1414e4ad9b47579d79514b8e4cf2f758c2d12a3e6a8d4e445", + "transactionsTrie": "0xc1d17593acdad8b301e37ed143817774b08940702bf8add5f722aaf2cad033b9", + "receiptTrie": "0x83b74d4736ed1e9de0373d1b62a3a6dd019d07f046a0e142eb99ca5d228c8ed5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x520c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x467aea628e1b6a746ea44b24b3b1fe2d288f53454ce9259515ab559cf0000897" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x9118f52f3cd19b91d35e7fe9ece4389bbb59b855406a43c68bd5a4e28c70ccba", + "s": "0x79dc6e43500a56e8a36581f356bf0756962f7575d0f0e5c510860910f2ebc9ae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x467aea628e1b6a746ea44b24b3b1fe2d288f53454ce9259515ab559cf0000897", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247ca9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02284de4bba95e8fb80e73de8d39dda2b61d4ba6a5564e25eda051e040915eb9ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2284de4bba95e8fb80e73de8d39dda2b61d4ba6a5564e25eda051e040915eb9c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcff7b05aadf184b237ca0ada465e49633bc3b64c29c3964bca942edb60b9dc45" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0cff7b05aadf184b237ca0ada465e49633bc3b64c29c3964bca942edb60b9dc45a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0036517984ae7685b962fb044a97fdcea995ab8382b1bceefb502fb73d229538ca08d80fa757255c11689487443a901eebbec345ae423a5e2eab3c91cedb899cc1ea05aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a448203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0d4e1fec09034c071a1059fa21bcf99a53844cb8b66daa49172941f5ea5efd5f4a069d1e99099b1eb1755bcc0964a7ba4bfa97e314db107ed57f77eb6cdd079bf23c0c0", + "blockHeader": { + "parentHash": "0xcff7b05aadf184b237ca0ada465e49633bc3b64c29c3964bca942edb60b9dc45", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x036517984ae7685b962fb044a97fdcea995ab8382b1bceefb502fb73d229538c", + "transactionsTrie": "0x8d80fa757255c11689487443a901eebbec345ae423a5e2eab3c91cedb899cc1e", + "receiptTrie": "0x5aabb22300519491918efaffdb77aa35192c9d8c515bac1b8928bb8dabcdfdc8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a44", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x67b7d982461124e1c1a7653732ee1d0eebf3053886d9eec298617c4fcf6c445f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xd4e1fec09034c071a1059fa21bcf99a53844cb8b66daa49172941f5ea5efd5f4", + "s": "0x69d1e99099b1eb1755bcc0964a7ba4bfa97e314db107ed57f77eb6cdd079bf23", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x67b7d982461124e1c1a7653732ee1d0eebf3053886d9eec298617c4fcf6c445f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25cfb9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bc700214ea4be718d0634c0fb3f35201a98fa15d9f5b1c571994ea4230835388a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbc700214ea4be718d0634c0fb3f35201a98fa15d9f5b1c571994ea4230835388", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a058cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a047fa207d9e3c1dc2019b3dbe03d4c9d0a1ae2977dcc29326314bdfaf4207bd9ca08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0facdbf0c1b41fdf0b02054531b99bcd10232f3850c5b96556ed53725236eb0e1a05de408479d4886ceaef42e7419ddd1e3d3b4f71c690ca3de8882c813462c5767c0c0", + "blockHeader": { + "parentHash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0x47fa207d9e3c1dc2019b3dbe03d4c9d0a1ae2977dcc29326314bdfaf4207bd9c", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x64377de4925b0f9c97461f8778102059b127bb7a0194a5276482ed490d8d8fe4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xfacdbf0c1b41fdf0b02054531b99bcd10232f3850c5b96556ed53725236eb0e1", + "s": "0x5de408479d4886ceaef42e7419ddd1e3d3b4f71c690ca3de8882c813462c5767", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x64377de4925b0f9c97461f8778102059b127bb7a0194a5276482ed490d8d8fe4", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09ea2620dd587a70d6f6401183288745c110c738ac88458f93cdeb8e72d59ffeba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9ea2620dd587a70d6f6401183288745c110c738ac88458f93cdeb8e72d59ffeb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0de074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a036021c84a64e113b412f05f5d58bea9452664c52d467d30c2c1bc2aa07b5042ea02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a08855b3a8deedb8f33991803a5a90d8ba39710ba51f2c220c8215122d16bfe828a025826358a8c276c2e05f8c69eb9dcba257e5dd880403527b0b7afac2219a76b8c0c0", + "blockHeader": { + "parentHash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0x36021c84a64e113b412f05f5d58bea9452664c52d467d30c2c1bc2aa07b5042e", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0169468fc730ea017c8c9bfc5c232382c0f7eb041121f0666fa41a9d37548f90" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8855b3a8deedb8f33991803a5a90d8ba39710ba51f2c220c8215122d16bfe828", + "s": "0x25826358a8c276c2e05f8c69eb9dcba257e5dd880403527b0b7afac2219a76b8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x0169468fc730ea017c8c9bfc5c232382c0f7eb041121f0666fa41a9d37548f90", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07a8f3c448ebe2ad5fe37e4fe1ce3c041a3269599f6ee19ee0d3c2bcff6ab91f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7a8f3c448ebe2ad5fe37e4fe1ce3c041a3269599f6ee19ee0d3c2bcff6ab91f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2" + }, + "blocks": [ + { + "rlp": "0xf902d6f90244a0bf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c90f9bbdf141520adb72e54de3bfa2ebcf9c32489833377a2dcccbb8abb21e3a05199778dbaad2d106fa95f82b120f4e771c8cde1cbeb5220d0a658fb1414ea93a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88bb88903f8860180800e8252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0db750b8a7504617d165cb5757e16d43787ae7b394edfbf718dde237ea84abc2c9fdba2c31ad78e8654308d7de46bce100a353c3a62fece44621b7cd9114c4b0bc0c0", + "blockHeader": { + "parentHash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0c90f9bbdf141520adb72e54de3bfa2ebcf9c32489833377a2dcccbb8abb21e3", + "transactionsTrie": "0x5199778dbaad2d106fa95f82b120f4e771c8cde1cbeb5220d0a658fb1414ea93", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7f5cdcb68e86e79f63eaad8cb09794c953dfccf62694821eac7344bf4cd111f6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xdb750b8a7504617d165cb5757e16d43787ae7b394edfbf718dde237ea84abc2c", + "s": "0xdba2c31ad78e8654308d7de46bce100a353c3a62fece44621b7cd9114c4b0b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7f5cdcb68e86e79f63eaad8cb09794c953dfccf62694821eac7344bf4cd111f6", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09978673ab550c698629bd62d79319a8ccc2edb1700d643e7dd4001cab711b47aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9978673ab550c698629bd62d79319a8ccc2edb1700d643e7dd4001cab711b47a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0e9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f3d63a180b2386e9334c525084d75b0ff2731854ca0c3c7c631537780bdfb8b5a0bc19ef9e46bad2939bf58ee5dbdfc793b70ebf9d309962d569e164411a499bc3a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0f4108185dc87512f51cc4a33641aeab134bb4a3c1fa2d8d59fcbc14e8fc47264a009f43b8a3206b8677e9535266f1cabca3aec3f166676000c35db6ba88f90d15dc0c0", + "blockHeader": { + "parentHash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf3d63a180b2386e9334c525084d75b0ff2731854ca0c3c7c631537780bdfb8b5", + "transactionsTrie": "0xbc19ef9e46bad2939bf58ee5dbdfc793b70ebf9d309962d569e164411a499bc3", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb60b4558e000df360528a258719c98ffbc4a6e10c4dfd5d5d59b37d2d5b82359" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xf4108185dc87512f51cc4a33641aeab134bb4a3c1fa2d8d59fcbc14e8fc47264", + "s": "0x09f43b8a3206b8677e9535266f1cabca3aec3f166676000c35db6ba88f90d15d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb60b4558e000df360528a258719c98ffbc4a6e10c4dfd5d5d59b37d2d5b82359", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25d060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bc700214ea4be718d0634c0fb3f35201a98fa15d9f5b1c571994ea4230835388a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbc700214ea4be718d0634c0fb3f35201a98fa15d9f5b1c571994ea4230835388", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a058cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a0db8bd908f634490e2388539099409b9cd94e0f8a95ae13543386c8be54959dd8a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018007078252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a04f6c397e28c087aa0d4cea026de9974ddb554145af489334e008b6e62ea196e5a04cf5ff9caf66296263da6bc545419fc9b2207849a20e32361da21db5fb5b146ac0c0", + "blockHeader": { + "parentHash": "0x58cffa2d96595d314728e8573739c7e0031073c29a10c5957569e4b226562292", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0xdb8bd908f634490e2388539099409b9cd94e0f8a95ae13543386c8be54959dd8", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x201a88b6f84e9a2ac11aea7ef60ad0f947ef9f7158f6f7609a47f3ca6913b162" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x4f6c397e28c087aa0d4cea026de9974ddb554145af489334e008b6e62ea196e5", + "s": "0x4cf5ff9caf66296263da6bc545419fc9b2207849a20e32361da21db5fb5b146a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x201a88b6f84e9a2ac11aea7ef60ad0f947ef9f7158f6f7609a47f3ca6913b162", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223ea8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09ea2620dd587a70d6f6401183288745c110c738ac88458f93cdeb8e72d59ffeba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9ea2620dd587a70d6f6401183288745c110c738ac88458f93cdeb8e72d59ffeb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0de074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33a054137bf39332bdc377eb872caa2ea32a258b01147e8d8d681f877d16150714b0a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a083e0900f85182314c02416b5efeb266d2121de2bf65fc2fc7e83eff127aad809a029bec929e99f461d103bdbcdb29d58ee6a02a995bb48b30c3330fdf688c11890c0c0", + "blockHeader": { + "parentHash": "0xde074594d571ce07dcf22bc5777d55677ea8ff4d43f33058710567e41b043335", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e4832d5fd7e8d0f5aa159b71f9dfc69254e172bada19e5e84e76b4604750f33", + "transactionsTrie": "0x54137bf39332bdc377eb872caa2ea32a258b01147e8d8d681f877d16150714b0", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0d3ef6a147eb9bb42c620984ed99f535719f31994907601938b8dfb5c0ed553b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x83e0900f85182314c02416b5efeb266d2121de2bf65fc2fc7e83eff127aad809", + "s": "0x29bec929e99f461d103bdbcdb29d58ee6a02a995bb48b30c3330fdf688c11890", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x0d3ef6a147eb9bb42c620984ed99f535719f31994907601938b8dfb5c0ed553b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e830", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07a8f3c448ebe2ad5fe37e4fe1ce3c041a3269599f6ee19ee0d3c2bcff6ab91f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7a8f3c448ebe2ad5fe37e4fe1ce3c041a3269599f6ee19ee0d3c2bcff6ab91f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0bf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0178ab43b71016f4f8a7d62b1e88407680ad1e3c2c31b0ef50c73f0a9a10d252ca081e16c97be7a8d0cceb0b7618da9d2d8b080003c0bfac101b69d54f3e87ae7e1a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e8252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0c8adf83849ae3e89cdf8a5160cd9332260606bca46baae74e3270fbc119a210aa00699793e9eeb455fb19c1f91ff70f9d0bdd3eb3272b0170f28411c9cb3ed3fadc0c0", + "blockHeader": { + "parentHash": "0xbf6f034c28ebfc6eaeeafeb41368b8b5f0d57e1069e5c09dab5764fcea2d21e2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x178ab43b71016f4f8a7d62b1e88407680ad1e3c2c31b0ef50c73f0a9a10d252c", + "transactionsTrie": "0x81e16c97be7a8d0cceb0b7618da9d2d8b080003c0bfac101b69d54f3e87ae7e1", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7d3368c8137d18203f659eea5c7d92cb3b917669d6c8d05759fb1cc948ea2cca" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xc8adf83849ae3e89cdf8a5160cd9332260606bca46baae74e3270fbc119a210a", + "s": "0x0699793e9eeb455fb19c1f91ff70f9d0bdd3eb3272b0170f28411c9cb3ed3fad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7d3368c8137d18203f659eea5c7d92cb3b917669d6c8d05759fb1cc948ea2cca", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247d50", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09978673ab550c698629bd62d79319a8ccc2edb1700d643e7dd4001cab711b47aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9978673ab550c698629bd62d79319a8ccc2edb1700d643e7dd4001cab711b47a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0e9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0209490edcb7fb1eef7e084d8411fb377ead793c654f2a49d8b2d2f0adc385139a0dbe64264ed3db5c6b0b8b808fc9321042295cf27058a4bcb609cfb888776eda7a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a073e02820fc1cf49348efa26ac84e18bd01f0d9bbb6562a075c91e1072c43481aa052dbef0b02487293c36e11af5b66a9ac3f0250486228615005c2d3cb4badba8fc0c0", + "blockHeader": { + "parentHash": "0xe9aacfd1a92e91ac433df5e02d9e0d4ce8a4cb69d61cbd80b3604d1abddeb2a9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x209490edcb7fb1eef7e084d8411fb377ead793c654f2a49d8b2d2f0adc385139", + "transactionsTrie": "0xdbe64264ed3db5c6b0b8b808fc9321042295cf27058a4bcb609cfb888776eda7", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x87d27d3cc92c1910926b5a371375467ad719f06469515cae21943292c09b2559" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x73e02820fc1cf49348efa26ac84e18bd01f0d9bbb6562a075c91e1072c43481a", + "s": "0x52dbef0b02487293c36e11af5b66a9ac3f0250486228615005c2d3cb4badba8f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x87d27d3cc92c1910926b5a371375467ad719f06469515cae21943292c09b2559", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25d060", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03f66638a46433c4056e535340e1faa45e5787ec415e111b7e24b41a70f96ad64a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3f66638a46433c4056e535340e1faa45e5787ec415e111b7e24b41a70f96ad64", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x57c1ec1d5d7123886b4d3fdf2717c840f7bdcbb337d08ba899c6d9b60b4b5b59" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a057c1ec1d5d7123886b4d3fdf2717c840f7bdcbb337d08ba899c6d9b60b4b5b59a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a0710579a4235752eea06b2827d09281622eead36bd49cd739043a51582c72beeba08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018080078252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00195b630b1f83a765858aaab5cdf099b662c0e26829fcd88bf7695b58a7789eda01e472db305b3df65f9817ed1929662a42957f0f49ec8c48ca1e1d1c5875ca1d4c0c0", + "blockHeader": { + "parentHash": "0x57c1ec1d5d7123886b4d3fdf2717c840f7bdcbb337d08ba899c6d9b60b4b5b59", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x710579a4235752eea06b2827d09281622eead36bd49cd739043a51582c72beeb", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf3a595214db0fe8c616a89554a9e83d159ba57db1862c72637e953e2788cc37e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0195b630b1f83a765858aaab5cdf099b662c0e26829fcd88bf7695b58a7789ed", + "s": "0x1e472db305b3df65f9817ed1929662a42957f0f49ec8c48ca1e1d1c5875ca1d4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf3a595214db0fe8c616a89554a9e83d159ba57db1862c72637e953e2788cc37e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223ea9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b2b06e6baa0201879728ec0ddaf86def93a1b41723aa53552b05ba971e6f22aba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb2b06e6baa0201879728ec0ddaf86def93a1b41723aa53552b05ba971e6f22ab", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x49c6581e2601cb03283e8816278d794161f7500d95256948c495b0f8d654a98b" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a049c6581e2601cb03283e8816278d794161f7500d95256948c495b0f8d654a98ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a03c58a37c9d34f1046d468f609e237f38899b7cf816a5a01740dc9fcef65640c8a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0a7ac396b866d0071bb77a11e86a9ae587acc8c6cd7ce33c957694e6700b13a50a053ed1bf9a0ca9480c6920c884fdb5ead0011cddf77af18e494fd140f6efa6cb6c0c0", + "blockHeader": { + "parentHash": "0x49c6581e2601cb03283e8816278d794161f7500d95256948c495b0f8d654a98b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x3c58a37c9d34f1046d468f609e237f38899b7cf816a5a01740dc9fcef65640c8", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc10f6b921e9338b524cb6da086af16848f043dc94f6997ec34ae05e3a35c392d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xa7ac396b866d0071bb77a11e86a9ae587acc8c6cd7ce33c957694e6700b13a50", + "s": "0x53ed1bf9a0ca9480c6920c884fdb5ead0011cddf77af18e494fd140f6efa6cb6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc10f6b921e9338b524cb6da086af16848f043dc94f6997ec34ae05e3a35c392d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e831", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0261a7e7a2c19229bf025a42622f1592e1f9169e6ec21c48873d63b423c5285bea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x261a7e7a2c19229bf025a42622f1592e1f9169e6ec21c48873d63b423c5285be", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc473bbb15de3cb2017a19ff70a03ce825df2859ce77b01826ec63060ca7baa4f" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0c473bbb15de3cb2017a19ff70a03ce825df2859ce77b01826ec63060ca7baa4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ef2dd5d38ee8cd567f81ebd674079faa33ed1dc283109f0cf1887431287db4b2a0954bbff75aa739de1afda7c0b70afb5b70ee869fbce1c5b7ea1c61fdab86316fa08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180800e8252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0228aa4b47c0e323bd1f569ed050c301377bf1d4b6ce634bcc8a593f22335c591a07879d15425eab4dac014b3fdb23303d34268225633dcc1a2d9dd0fc5d8e792e3c0c0", + "blockHeader": { + "parentHash": "0xc473bbb15de3cb2017a19ff70a03ce825df2859ce77b01826ec63060ca7baa4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xef2dd5d38ee8cd567f81ebd674079faa33ed1dc283109f0cf1887431287db4b2", + "transactionsTrie": "0x954bbff75aa739de1afda7c0b70afb5b70ee869fbce1c5b7ea1c61fdab86316f", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa3c9ce80f70b846ca23c82f7acfe96c8134a5132251de95d66c1735f395cd0bc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x228aa4b47c0e323bd1f569ed050c301377bf1d4b6ce634bcc8a593f22335c591", + "s": "0x7879d15425eab4dac014b3fdb23303d34268225633dcc1a2d9dd0fc5d8e792e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa3c9ce80f70b846ca23c82f7acfe96c8134a5132251de95d66c1735f395cd0bc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247d51", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a037bea06b5573a7cab58d39dba2e10df6ac9231a6c2940c313ffa754a1f83c640a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x37bea06b5573a7cab58d39dba2e10df6ac9231a6c2940c313ffa754a1f83c640", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb0d5b8da0f477551439f56b2db5ff36855001302ffa35ee6e7fd1797d86bce93" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0b0d5b8da0f477551439f56b2db5ff36855001302ffa35ee6e7fd1797d86bce93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02d900f7a3e6121bf713fa40d396c699af5180528b18ae50c8ab95f79545b83b0a00694b14e389168dcc1ecffb7bcba94828c354b478ee8e41253452e9966c2b0bda02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a07957ab80563988b2377c82f7a64d0c0c859e1243c86c7ee705e36e8e4700a682a03978e2f63d054b7e4da2cb0bb68a4178e69c43255132f14bdbeebbf514d8c260c0c0", + "blockHeader": { + "parentHash": "0xb0d5b8da0f477551439f56b2db5ff36855001302ffa35ee6e7fd1797d86bce93", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2d900f7a3e6121bf713fa40d396c699af5180528b18ae50c8ab95f79545b83b0", + "transactionsTrie": "0x0694b14e389168dcc1ecffb7bcba94828c354b478ee8e41253452e9966c2b0bd", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa83933d03a9478fe68af5c9d98b72ecd7141bdbf121ccfbc53b88d71080a96c9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x7957ab80563988b2377c82f7a64d0c0c859e1243c86c7ee705e36e8e4700a682", + "s": "0x3978e2f63d054b7e4da2cb0bb68a4178e69c43255132f14bdbeebbf514d8c260", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa83933d03a9478fe68af5c9d98b72ecd7141bdbf121ccfbc53b88d71080a96c9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25d061", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03f66638a46433c4056e535340e1faa45e5787ec415e111b7e24b41a70f96ad64a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3f66638a46433c4056e535340e1faa45e5787ec415e111b7e24b41a70f96ad64", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x57c1ec1d5d7123886b4d3fdf2717c840f7bdcbb337d08ba899c6d9b60b4b5b59" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a057c1ec1d5d7123886b4d3fdf2717c840f7bdcbb337d08ba899c6d9b60b4b5b59a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a0352215b6f49a142dadd2e28ab68843212705f66ed50a63a1791845de44c0d868a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f887018007078252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0ad2360a19349fc4d9f820501f5d1364b615765f8dd044dcd68a882081a9e0b51a03570edfb978702735a11e873b664f4f4d346e587a6945f4d79e9aed3cf39f439c0c0", + "blockHeader": { + "parentHash": "0x57c1ec1d5d7123886b4d3fdf2717c840f7bdcbb337d08ba899c6d9b60b4b5b59", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x352215b6f49a142dadd2e28ab68843212705f66ed50a63a1791845de44c0d868", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7b0088278cb813822e44898e77f737859515d7a532f9c4e20091e8a8bcf34d09" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xad2360a19349fc4d9f820501f5d1364b615765f8dd044dcd68a882081a9e0b51", + "s": "0x3570edfb978702735a11e873b664f4f4d346e587a6945f4d79e9aed3cf39f439", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7b0088278cb813822e44898e77f737859515d7a532f9c4e20091e8a8bcf34d09", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e223ea9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b2b06e6baa0201879728ec0ddaf86def93a1b41723aa53552b05ba971e6f22aba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb2b06e6baa0201879728ec0ddaf86def93a1b41723aa53552b05ba971e6f22ab", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x49c6581e2601cb03283e8816278d794161f7500d95256948c495b0f8d654a98b" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a049c6581e2601cb03283e8816278d794161f7500d95256948c495b0f8d654a98ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21a054c3486d9082cbdb835e6f4cd991a5933faf9073be5ea4e5172af4294b663bd8a02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e301800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a07ed7259fc257b82770610ad9c4d6ddd6cc98d7fd1ec09ba5936f4a44ed2fe158a066c563da11de27b15031537d2269389f1470ac789955e2ad822b73c02c6ff4d1c0c0", + "blockHeader": { + "parentHash": "0x49c6581e2601cb03283e8816278d794161f7500d95256948c495b0f8d654a98b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cb7f887d181037fa10706d06a6b6763de9a094cf1f6ad0f82ab38c0f8d5ec21", + "transactionsTrie": "0x54c3486d9082cbdb835e6f4cd991a5933faf9073be5ea4e5172af4294b663bd8", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x219b5b48032fec2e439367d68e0e3d333145efe871f80366689f617ef001ad61" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7ed7259fc257b82770610ad9c4d6ddd6cc98d7fd1ec09ba5936f4a44ed2fe158", + "s": "0x66c563da11de27b15031537d2269389f1470ac789955e2ad822b73c02c6ff4d1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x219b5b48032fec2e439367d68e0e3d333145efe871f80366689f617ef001ad61", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e22e831", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0261a7e7a2c19229bf025a42622f1592e1f9169e6ec21c48873d63b423c5285bea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x261a7e7a2c19229bf025a42622f1592e1f9169e6ec21c48873d63b423c5285be", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc473bbb15de3cb2017a19ff70a03ce825df2859ce77b01826ec63060ca7baa4f" + }, + "blocks": [ + { + "rlp": "0xf902d7f90244a0c473bbb15de3cb2017a19ff70a03ce825df2859ce77b01826ec63060ca7baa4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0db54e48f8eed17f2f604eb6cf10718e55976cd240655d42e2451233d3495a052a034f2b6562bc9b1877c31ca20d74f1505b110c6ebc66e1ed6cc7ef8b5ce0cba27a08f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88cb88a03f8870180070e8252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a063e2ed1f32c8eba4d0aaae24195f0fc98d4dff91c1c8fc49de5b1e6a3af19d55a0673ce2b11364a9efd22fd894dcb612e218df0b53040c319ada138ddc6661d396c0c0", + "blockHeader": { + "parentHash": "0xc473bbb15de3cb2017a19ff70a03ce825df2859ce77b01826ec63060ca7baa4f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xdb54e48f8eed17f2f604eb6cf10718e55976cd240655d42e2451233d3495a052", + "transactionsTrie": "0x34f2b6562bc9b1877c31ca20d74f1505b110c6ebc66e1ed6cc7ef8b5ce0cba27", + "receiptTrie": "0x8f8e441213a71358c7919e7ad7a83f3bfafcde2c7ef2b2121f8b271928f61b1b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x5218", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbfba90c5faaaaab868b864b00dd192546131a0bcd070907067378119eaaf3ecd" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x63e2ed1f32c8eba4d0aaae24195f0fc98d4dff91c1c8fc49de5b1e6a3af19d55", + "s": "0x673ce2b11364a9efd22fd894dcb612e218df0b53040c319ada138ddc6661d396", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xbfba90c5faaaaab868b864b00dd192546131a0bcd070907067378119eaaf3ecd", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e247d51", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a037bea06b5573a7cab58d39dba2e10df6ac9231a6c2940c313ffa754a1f83c640a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x37bea06b5573a7cab58d39dba2e10df6ac9231a6c2940c313ffa754a1f83c640", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb0d5b8da0f477551439f56b2db5ff36855001302ffa35ee6e7fd1797d86bce93" + }, + "blocks": [ + { + "rlp": "0xf90333f90244a0b0d5b8da0f477551439f56b2db5ff36855001302ffa35ee6e7fd1797d86bce93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd16312eebd775cc2d167c6a66ac33448a4bfbff7730b559662005c4d66f384aa0fd53ef7fc2006c3aadf9c1c9bf45e561450ff00c52d099eeff48ff8058a0fbeea02affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000826a508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8e8b8e603f8e30180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0cc907296e469f71ea73964a9afcf09ba1c36d0788e728a35f9aa0b45168c959ba03a26c21ba43cfd6e0cdb9a9c600e9e402fa89cf45bce467522776c2387db5442c0c0", + "blockHeader": { + "parentHash": "0xb0d5b8da0f477551439f56b2db5ff36855001302ffa35ee6e7fd1797d86bce93", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd16312eebd775cc2d167c6a66ac33448a4bfbff7730b559662005c4d66f384a", + "transactionsTrie": "0xfd53ef7fc2006c3aadf9c1c9bf45e561450ff00c52d099eeff48ff8058a0fbee", + "receiptTrie": "0x2affcbe2641182312b7231572a4d456f760b8aa9f48342193985455f6edc2e67", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x6a50", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x15f8d805d5ca96ce7fbb666a8060f268ea0ec3d184cae8447fd86e4eb4aba58e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xcc907296e469f71ea73964a9afcf09ba1c36d0788e728a35f9aa0b45168c959b", + "s": "0x3a26c21ba43cfd6e0cdb9a9c600e9e402fa89cf45bce467522776c2387db5442", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x15f8d805d5ca96ce7fbb666a8060f268ea0ec3d184cae8447fd86e4eb4aba58e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x4e25d061", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/sufficient_balance_blob_tx_pre_fund_tx.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/sufficient_balance_blob_tx_pre_fund_tx.json new file mode 100644 index 00000000000..ee5c7727169 --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/sufficient_balance_blob_tx_pre_fund_tx.json @@ -0,0 +1,21386 @@ +{ + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a026c6e850ba5952ba8338cd75d5df869f48342fc1b926c9603bb42eb504c2284ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x26c6e850ba5952ba8338cd75d5df869f48342fc1b926c9603bb42eb504c2284c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x62b13dfedb293e8c610c1102e29893a5b17d486c2e6b3d2b1451b0b35cb5003a" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a062b13dfedb293e8c610c1102e29893a5b17d486c2e6b3d2b1451b0b35cb5003aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a00df1227c71162296a49a6bfefef5ab4f7af69661e9ea4323e6b6ded064b4f85ba0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043e3880c080a0e38895ca95a94c554b0125dc089ec3b44b213c88cf2104e7aeb80311819c8e52a0365016463086ecc3c9988f5940b838b3abb17c65535ea4fd4bd470ff9bd9c667b88803f885018080078252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0dca96ee8036da88f7870601739979abcb9e581823bb0539f1ee412e83c5a6654a06f763830fe86dfc591bbac5e70d47576bfaaf48d99ee399398b8e6b7de9f095ec0c0", + "blockHeader": { + "parentHash": "0x62b13dfedb293e8c610c1102e29893a5b17d486c2e6b3d2b1451b0b35cb5003a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x0df1227c71162296a49a6bfefef5ab4f7af69661e9ea4323e6b6ded064b4f85b", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7ffab303daa65a0415c8e4da91d1978d36ccc865eb7e9b289ddc1fb920eb18d5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043e38", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xe38895ca95a94c554b0125dc089ec3b44b213c88cf2104e7aeb80311819c8e52", + "s": "0x365016463086ecc3c9988f5940b838b3abb17c65535ea4fd4bd470ff9bd9c667", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xdca96ee8036da88f7870601739979abcb9e581823bb0539f1ee412e83c5a6654", + "s": "0x6f763830fe86dfc591bbac5e70d47576bfaaf48d99ee399398b8e6b7de9f095e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7ffab303daa65a0415c8e4da91d1978d36ccc865eb7e9b289ddc1fb920eb18d5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x244958", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06c0ae859d9b5457cab456e7cfd982faf783cd43ec0f1f318d65f4c48f24dab70a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6c0ae859d9b5457cab456e7cfd982faf783cd43ec0f1f318d65f4c48f24dab70", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x984aafc347d37517b03bc680d02104ce4a562cfd542542ebb44aa91f0a5ff5d3" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0984aafc347d37517b03bc680d02104ce4a562cfd542542ebb44aa91f0a5ff5d3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a08579c4e155c57f38f08478d6b7e3bc46c017a7825085d03467cbd6f44b2dd07fa0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e7c080c001a04adca4408b81d7f79a5f0e464d0016b47885416183cc0e779ab21ec7d55109b9a053a2ad43b011a2d8b7abef09ba57b6f07d5d1830c5d074a759627e10024a0ae5b8e403f8e101808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0231d9ee920a79f76ba95220ddc3c8dc0b434590470822fc9a3e0857988551881a050fe3aa2eed0dcb338e1b02297761a57f29d3a3eaaba5b0bfc99de731dc9cb4ac0c0", + "blockHeader": { + "parentHash": "0x984aafc347d37517b03bc680d02104ce4a562cfd542542ebb44aa91f0a5ff5d3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x8579c4e155c57f38f08478d6b7e3bc46c017a7825085d03467cbd6f44b2dd07f", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x51b420f4035f30c6211cbadd0c10356db7f547f59702e5fc0138b1982d340cf7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e7c0", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x4adca4408b81d7f79a5f0e464d0016b47885416183cc0e779ab21ec7d55109b9", + "s": "0x53a2ad43b011a2d8b7abef09ba57b6f07d5d1830c5d074a759627e10024a0ae5", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x231d9ee920a79f76ba95220ddc3c8dc0b434590470822fc9a3e0857988551881", + "s": "0x50fe3aa2eed0dcb338e1b02297761a57f29d3a3eaaba5b0bfc99de731dc9cb4a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x51b420f4035f30c6211cbadd0c10356db7f547f59702e5fc0138b1982d340cf7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f2e0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a054338cd6663eac097961b64d7ed647127a853049ee50c9c737563e53482800b9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x54338cd6663eac097961b64d7ed647127a853049ee50c9c737563e53482800b9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcfe62501fed1130d9644b9984dd3b2e3070017e06862c15424d5a5f7ed3f3a46" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0cfe62501fed1130d9644b9984dd3b2e3070017e06862c15424d5a5f7ed3f3a46a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0606def5a8ea236e51b5b7922f1037513d266e4f6e044f6bf1e30511a875764c2a0d5b6aaa25cde37c1892e8d0fc5f6bef33744f96b9b7c54090ea6e89582b7dcbfa0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067c7080c080a0f1466f7f670ede200e5830e25d409a2e7306848000df150ac6453fe5a4069d9ba017f098074e2ca2aada3a6608821a3a70cff860fa71dda939bb036db52c60f88fb88803f8850180800e8252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0790db386a32f2a61fa904250e2e61f58284ed6ecde08d80b4143b6b2798cc647a01c09755ada6fc4836c1f82d3faedfff08f22333fa428770085aeb2ad33d56de4c0c0", + "blockHeader": { + "parentHash": "0xcfe62501fed1130d9644b9984dd3b2e3070017e06862c15424d5a5f7ed3f3a46", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x606def5a8ea236e51b5b7922f1037513d266e4f6e044f6bf1e30511a875764c2", + "transactionsTrie": "0xd5b6aaa25cde37c1892e8d0fc5f6bef33744f96b9b7c54090ea6e89582b7dcbf", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf885098941361882d80c5a4b5274f4b8e7cdc1da1a48d7cde3c3eb3bc811b96c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067c70", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xf1466f7f670ede200e5830e25d409a2e7306848000df150ac6453fe5a4069d9b", + "s": "0x17f098074e2ca2aada3a6608821a3a70cff860fa71dda939bb036db52c60f88f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x790db386a32f2a61fa904250e2e61f58284ed6ecde08d80b4143b6b2798cc647", + "s": "0x1c09755ada6fc4836c1f82d3faedfff08f22333fa428770085aeb2ad33d56de4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf885098941361882d80c5a4b5274f4b8e7cdc1da1a48d7cde3c3eb3bc811b96c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x268790", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01169153723b30c9a7090661daf072eaa5d4196c8b3cbe96390380c358ff210d7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x1169153723b30c9a7090661daf072eaa5d4196c8b3cbe96390380c358ff210d7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdbd0bd76801f6d78000a2fa305efd4a4fa22f3652fe19946cfe35d5ff8c09139" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0dbd0bd76801f6d78000a2fa305efd4a4fa22f3652fe19946cfe35d5ff8c09139a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07697586804d1495c2a7bcbfb3e54413384b98e0a1b1196445e4281eeca030248a0fc1471bf233d4e636b0ee9149370cfc4abd35905d13f43a33820dbc6b6482bc8a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307cf8080c001a08a1252b6c43e759cd1e3c257508130f781ccaef889e7a256968c393237cc297ea058bf4293bc42ff30d0cc4b7ab9093bb60fafb7f9a059e695b5d892044773284fb8e403f8e10180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a05a1caaf6469249c75dee8f45b645aedf2a4db37b07feb1f8855c71d17ad9621fa01ab9bb529e7f569dbf189e7d449abdd451a6312acc1f4b7721a47554477875b0c0c0", + "blockHeader": { + "parentHash": "0xdbd0bd76801f6d78000a2fa305efd4a4fa22f3652fe19946cfe35d5ff8c09139", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7697586804d1495c2a7bcbfb3e54413384b98e0a1b1196445e4281eeca030248", + "transactionsTrie": "0xfc1471bf233d4e636b0ee9149370cfc4abd35905d13f43a33820dbc6b6482bc8", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5e52bae779beeaddb324f839bbf870047eadfad832a80825ddf6a876e415e118" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07cf80", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x8a1252b6c43e759cd1e3c257508130f781ccaef889e7a256968c393237cc297e", + "s": "0x58bf4293bc42ff30d0cc4b7ab9093bb60fafb7f9a059e695b5d892044773284f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5a1caaf6469249c75dee8f45b645aedf2a4db37b07feb1f8855c71d17ad9621f", + "s": "0x1ab9bb529e7f569dbf189e7d449abdd451a6312acc1f4b7721a47554477875b0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5e52bae779beeaddb324f839bbf870047eadfad832a80825ddf6a876e415e118", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27daa0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a026c6e850ba5952ba8338cd75d5df869f48342fc1b926c9603bb42eb504c2284ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x26c6e850ba5952ba8338cd75d5df869f48342fc1b926c9603bb42eb504c2284c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x62b13dfedb293e8c610c1102e29893a5b17d486c2e6b3d2b1451b0b35cb5003a" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a062b13dfedb293e8c610c1102e29893a5b17d486c2e6b3d2b1451b0b35cb5003aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a073eec82d5af2559ceac64cd4881b66430527378deeb17b9964c1476914ae5661a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043e3880c080a0e38895ca95a94c554b0125dc089ec3b44b213c88cf2104e7aeb80311819c8e52a0365016463086ecc3c9988f5940b838b3abb17c65535ea4fd4bd470ff9bd9c667b88803f885018007078252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0aaa491157c95990f67c3a61cbffd693ce560cae244b62081f489b0650ed192efa076308e18d21c81bce09aa7398c3c0275b6bb14a1cefe29bd90765a973c20ff9bc0c0", + "blockHeader": { + "parentHash": "0x62b13dfedb293e8c610c1102e29893a5b17d486c2e6b3d2b1451b0b35cb5003a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x73eec82d5af2559ceac64cd4881b66430527378deeb17b9964c1476914ae5661", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf13203b806d5c193c2116939686afeb63e003d82d3fc701ac41ee3549663316d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043e38", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xe38895ca95a94c554b0125dc089ec3b44b213c88cf2104e7aeb80311819c8e52", + "s": "0x365016463086ecc3c9988f5940b838b3abb17c65535ea4fd4bd470ff9bd9c667", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaaa491157c95990f67c3a61cbffd693ce560cae244b62081f489b0650ed192ef", + "s": "0x76308e18d21c81bce09aa7398c3c0275b6bb14a1cefe29bd90765a973c20ff9b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf13203b806d5c193c2116939686afeb63e003d82d3fc701ac41ee3549663316d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x244958", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06c0ae859d9b5457cab456e7cfd982faf783cd43ec0f1f318d65f4c48f24dab70a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6c0ae859d9b5457cab456e7cfd982faf783cd43ec0f1f318d65f4c48f24dab70", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x984aafc347d37517b03bc680d02104ce4a562cfd542542ebb44aa91f0a5ff5d3" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0984aafc347d37517b03bc680d02104ce4a562cfd542542ebb44aa91f0a5ff5d3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a096efb69c62c0805e8ad3464f3dd8480b6f6341831f8af7024071201fab52e265a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e7c080c001a04adca4408b81d7f79a5f0e464d0016b47885416183cc0e779ab21ec7d55109b9a053a2ad43b011a2d8b7abef09ba57b6f07d5d1830c5d074a759627e10024a0ae5b8e403f8e101800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0b3791ccacee7cfd0c378c4ddbdfc84a73dacfdff10d5b4a88df6e1a306082621a05d03c060954ae16625a512d58357ae6a19ffa098356522220c455c372b2a0724c0c0", + "blockHeader": { + "parentHash": "0x984aafc347d37517b03bc680d02104ce4a562cfd542542ebb44aa91f0a5ff5d3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x96efb69c62c0805e8ad3464f3dd8480b6f6341831f8af7024071201fab52e265", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfca74d38ddfd37907f06e1ad72c91a32a6e816793654efe33a81159fba9d796f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e7c0", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x4adca4408b81d7f79a5f0e464d0016b47885416183cc0e779ab21ec7d55109b9", + "s": "0x53a2ad43b011a2d8b7abef09ba57b6f07d5d1830c5d074a759627e10024a0ae5", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb3791ccacee7cfd0c378c4ddbdfc84a73dacfdff10d5b4a88df6e1a306082621", + "s": "0x5d03c060954ae16625a512d58357ae6a19ffa098356522220c455c372b2a0724", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xfca74d38ddfd37907f06e1ad72c91a32a6e816793654efe33a81159fba9d796f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f2e0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a054338cd6663eac097961b64d7ed647127a853049ee50c9c737563e53482800b9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x54338cd6663eac097961b64d7ed647127a853049ee50c9c737563e53482800b9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcfe62501fed1130d9644b9984dd3b2e3070017e06862c15424d5a5f7ed3f3a46" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0cfe62501fed1130d9644b9984dd3b2e3070017e06862c15424d5a5f7ed3f3a46a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e2282e8a4b21f49340afcbd2348744f3b8f5e0810c43975912124638d563505da0a5a867429d31537e143821e086200767c06ae982bf7c206eef4c5f10f82e184ba0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067c7080c080a0f1466f7f670ede200e5830e25d409a2e7306848000df150ac6453fe5a4069d9ba017f098074e2ca2aada3a6608821a3a70cff860fa71dda939bb036db52c60f88fb88803f8850180070e8252089400000000000000000000000000000000000001008080c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0d15cf560343e72634e11af550d1d9a6ba27df5b89701846555dd832336be3d14a01fc0642ae659cb7e409af024d94b73740d70bb9b2c8ca95302c6588866b71a9ac0c0", + "blockHeader": { + "parentHash": "0xcfe62501fed1130d9644b9984dd3b2e3070017e06862c15424d5a5f7ed3f3a46", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe2282e8a4b21f49340afcbd2348744f3b8f5e0810c43975912124638d563505d", + "transactionsTrie": "0xa5a867429d31537e143821e086200767c06ae982bf7c206eef4c5f10f82e184b", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x849420ca7908404cb7c219314fe3342c67f39f5f217ffa34892e8b1e003c1ad5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067c70", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xf1466f7f670ede200e5830e25d409a2e7306848000df150ac6453fe5a4069d9b", + "s": "0x17f098074e2ca2aada3a6608821a3a70cff860fa71dda939bb036db52c60f88f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xd15cf560343e72634e11af550d1d9a6ba27df5b89701846555dd832336be3d14", + "s": "0x1fc0642ae659cb7e409af024d94b73740d70bb9b2c8ca95302c6588866b71a9a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x849420ca7908404cb7c219314fe3342c67f39f5f217ffa34892e8b1e003c1ad5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x268790", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01169153723b30c9a7090661daf072eaa5d4196c8b3cbe96390380c358ff210d7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x1169153723b30c9a7090661daf072eaa5d4196c8b3cbe96390380c358ff210d7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdbd0bd76801f6d78000a2fa305efd4a4fa22f3652fe19946cfe35d5ff8c09139" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0dbd0bd76801f6d78000a2fa305efd4a4fa22f3652fe19946cfe35d5ff8c09139a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa035451d10ce2f2bc051800893f2cc58763267aabc4d88be1644901e162c94120da0df670a3abdcd7ec8b98a5646139787c7c3fcb4886b2a645f6ef9994f9d06b506a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307cf8080c001a08a1252b6c43e759cd1e3c257508130f781ccaef889e7a256968c393237cc297ea058bf4293bc42ff30d0cc4b7ab9093bb60fafb7f9a059e695b5d892044773284fb8e403f8e10180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0920cda466b2e2a0c0bdb9299fafe51c8404726bf6066d19e2d2deaa901302fb3a00c31aea19992ad8fd671af4a88ad02440200457dfdd1793bea050e6c5541d962c0c0", + "blockHeader": { + "parentHash": "0xdbd0bd76801f6d78000a2fa305efd4a4fa22f3652fe19946cfe35d5ff8c09139", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x35451d10ce2f2bc051800893f2cc58763267aabc4d88be1644901e162c94120d", + "transactionsTrie": "0xdf670a3abdcd7ec8b98a5646139787c7c3fcb4886b2a645f6ef9994f9d06b506", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbe5d83d3267578b181ec913121e2b3cd6c11071ba02ae6ca0913fb12920a2aec" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07cf80", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x8a1252b6c43e759cd1e3c257508130f781ccaef889e7a256968c393237cc297e", + "s": "0x58bf4293bc42ff30d0cc4b7ab9093bb60fafb7f9a059e695b5d892044773284f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x920cda466b2e2a0c0bdb9299fafe51c8404726bf6066d19e2d2deaa901302fb3", + "s": "0x0c31aea19992ad8fd671af4a88ad02440200457dfdd1793bea050e6c5541d962", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xbe5d83d3267578b181ec913121e2b3cd6c11071ba02ae6ca0913fb12920a2aec", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27daa0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01992bbdcdf84afe90e580ee84861c819af7741fad738339c5941ef48b3d97311a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x1992bbdcdf84afe90e580ee84861c819af7741fad738339c5941ef48b3d97311", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x12bde64ff9743bd207ea01e4d6b41e03f8484eda502841f4bc5fe429f215a15f" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a012bde64ff9743bd207ea01e4d6b41e03f8484eda502841f4bc5fe429f215a15fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0784fd269fb29f4059a2a2b8812becbd6821981f76d0bd5fb2cd969032c6685eea0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043e3980c080a01c050ffb13bb7dc0c3e5d65c39e7f33cbdad9435a1fba44e33e8a0e7ad6bdf11a0218f824348722948cea332ced96f701ca8cd3cd7b42e77217421ddaa78bc0710b88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0a8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3ca019d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54ac0c0", + "blockHeader": { + "parentHash": "0x12bde64ff9743bd207ea01e4d6b41e03f8484eda502841f4bc5fe429f215a15f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0x784fd269fb29f4059a2a2b8812becbd6821981f76d0bd5fb2cd969032c6685ee", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5917b31756b4d8635bfdd840a6d3276bd0d342d88a0df511f087a85bd8eba010" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043e39", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x1c050ffb13bb7dc0c3e5d65c39e7f33cbdad9435a1fba44e33e8a0e7ad6bdf11", + "s": "0x218f824348722948cea332ced96f701ca8cd3cd7b42e77217421ddaa78bc0710", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xa8f4757869fbb831ba4ed3a7c8f868b0e2e0c1eda97937aab035560fffdedf3c", + "s": "0x19d9b041540e3d6f5f56dc29deb8834a08171e92037cf567b922357e70f8e54a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5917b31756b4d8635bfdd840a6d3276bd0d342d88a0df511f087a85bd8eba010", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x244959", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09b85ba7aabc516b9a63fb17c637b7f4791cdc618e94462d48a71fab82a2965f5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9b85ba7aabc516b9a63fb17c637b7f4791cdc618e94462d48a71fab82a2965f5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x039b33a9809fb5490d7bbe076e0b86aec0212c08287bc09e1642f555515ed7e0" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0039b33a9809fb5490d7bbe076e0b86aec0212c08287bc09e1642f555515ed7e0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0eba60b4cabc05c63ac25f6f8935c814824b6e755e3bb370cd7e8140db097caa4a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e7c180c001a0bf540393c8f80dca4d3dadedf49b75ec998543e894b672482aee03cf7321e138a061cf147ec63a87149ff21239776cde713788a8627280f8a0f468f35f91d43892b8e403f8e101808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0190431c9260ce3a7aadb89d9096ddadad99cae489d8522ded951c69648ea5a4fa035c57b199b3f9bfacbbaad7016a4883bddde3cd9f899b9b4effe158cb42eaaebc0c0", + "blockHeader": { + "parentHash": "0x039b33a9809fb5490d7bbe076e0b86aec0212c08287bc09e1642f555515ed7e0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0xeba60b4cabc05c63ac25f6f8935c814824b6e755e3bb370cd7e8140db097caa4", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4212dba43e7ad30cd6ca84ab2e8ad84957fff8d40486b2b8241650ebbe34fc9a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e7c1", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xbf540393c8f80dca4d3dadedf49b75ec998543e894b672482aee03cf7321e138", + "s": "0x61cf147ec63a87149ff21239776cde713788a8627280f8a0f468f35f91d43892", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x190431c9260ce3a7aadb89d9096ddadad99cae489d8522ded951c69648ea5a4f", + "s": "0x35c57b199b3f9bfacbbaad7016a4883bddde3cd9f899b9b4effe158cb42eaaeb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4212dba43e7ad30cd6ca84ab2e8ad84957fff8d40486b2b8241650ebbe34fc9a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f2e1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01af0dbde8363b0a6961b828d85d7271a27284db351d3a7ebb87eb4fd28002a9ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x1af0dbde8363b0a6961b828d85d7271a27284db351d3a7ebb87eb4fd28002a9c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfbe3b83b41dd49edc9e3a648dacc6fd7a32db801ea66cc542217543e2a9cfc8c" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0fbe3b83b41dd49edc9e3a648dacc6fd7a32db801ea66cc542217543e2a9cfc8ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08a620e5114c5211e8d0f7a31bae3c1d5fdad9725b1ea189d0dce01081db52419a0462470febb97471fb0e0ceb5d181fe06d10e89c806a128e4217c726f5d9e2f22a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067c7180c001a00c47c1d452d6c4c1c9d107434a7a719ad54281aa543b2644904a24501127ac37a05bfe464d489a289e03da212ac328b4ad758acedd96158cec28391f60026fbec1b88803f8850180800e8252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000001a00a7af01b973d08cfb7788839808143ccfd0925f78e58d6f9af35ec955c4145d5a04a3206e6255ab16fde00a9ccf7ef66302551a5e808591d2ea6beadfcf64d5b2cc0c0", + "blockHeader": { + "parentHash": "0xfbe3b83b41dd49edc9e3a648dacc6fd7a32db801ea66cc542217543e2a9cfc8c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8a620e5114c5211e8d0f7a31bae3c1d5fdad9725b1ea189d0dce01081db52419", + "transactionsTrie": "0x462470febb97471fb0e0ceb5d181fe06d10e89c806a128e4217c726f5d9e2f22", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5ad21b502dcf5b06f88a9bb4c7b7e51837844b06e18b536abfc0636d604cc347" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067c71", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x0c47c1d452d6c4c1c9d107434a7a719ad54281aa543b2644904a24501127ac37", + "s": "0x5bfe464d489a289e03da212ac328b4ad758acedd96158cec28391f60026fbec1", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x0a7af01b973d08cfb7788839808143ccfd0925f78e58d6f9af35ec955c4145d5", + "s": "0x4a3206e6255ab16fde00a9ccf7ef66302551a5e808591d2ea6beadfcf64d5b2c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5ad21b502dcf5b06f88a9bb4c7b7e51837844b06e18b536abfc0636d604cc347", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x268791", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a082dd97864601fa6da603c71c5d39efe1453ba506c243404828041694813186dba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x82dd97864601fa6da603c71c5d39efe1453ba506c243404828041694813186db", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6bae0933498c52913ff22e82396dd7775c9af27c9d6ff4174bfe58e843fdb8f3" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a06bae0933498c52913ff22e82396dd7775c9af27c9d6ff4174bfe58e843fdb8f3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0040fe57a889123fbc8ef8bee9d9d421d888495fe49b131352f60f8d51cf825fea0dda4b8fe977bbfabd9b5f41f7fef552abe9d0e0b4a63aa7c186292a85121e4c2a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307cf8180c080a0aed0664293ca2af1bba21be3310b3f6432bfc8a7b99fd4485d51673714d5e82ca06bb6a6db607c2f9c07f135d81aacd81fbe6b0cd8904b287ffbb5c679943c4200b8e403f8e10180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0a36355b6293352f334e73ee4aeecf400a0f28ceea256ee7c7bdd4e73ba73f132a0753117fff56fff8d0522f344bfd6fa96663242917ba835ef810551f2780d4224c0c0", + "blockHeader": { + "parentHash": "0x6bae0933498c52913ff22e82396dd7775c9af27c9d6ff4174bfe58e843fdb8f3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x040fe57a889123fbc8ef8bee9d9d421d888495fe49b131352f60f8d51cf825fe", + "transactionsTrie": "0xdda4b8fe977bbfabd9b5f41f7fef552abe9d0e0b4a63aa7c186292a85121e4c2", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x55b70bfa5a5901c93336010f286df40a248ef9779455554f2aeea217e442c6af" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07cf81", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xaed0664293ca2af1bba21be3310b3f6432bfc8a7b99fd4485d51673714d5e82c", + "s": "0x6bb6a6db607c2f9c07f135d81aacd81fbe6b0cd8904b287ffbb5c679943c4200", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa36355b6293352f334e73ee4aeecf400a0f28ceea256ee7c7bdd4e73ba73f132", + "s": "0x753117fff56fff8d0522f344bfd6fa96663242917ba835ef810551f2780d4224", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x55b70bfa5a5901c93336010f286df40a248ef9779455554f2aeea217e442c6af", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27daa1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01992bbdcdf84afe90e580ee84861c819af7741fad738339c5941ef48b3d97311a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x1992bbdcdf84afe90e580ee84861c819af7741fad738339c5941ef48b3d97311", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x12bde64ff9743bd207ea01e4d6b41e03f8484eda502841f4bc5fe429f215a15f" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a012bde64ff9743bd207ea01e4d6b41e03f8484eda502841f4bc5fe429f215a15fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea045658a433bcd4500968fbee04108a300401dcfd959c1b8ffe35847018b0f29aba0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043e3980c080a01c050ffb13bb7dc0c3e5d65c39e7f33cbdad9435a1fba44e33e8a0e7ad6bdf11a0218f824348722948cea332ced96f701ca8cd3cd7b42e77217421ddaa78bc0710b88803f885018007078252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0e124bbb45daf2d0803a476a59864ef5fc1b24877e0d64ce75ef2d61f298e9aaca00386c51e69fee300077c3e64635f9e85c805b2fb94b419514672b171e2e79b6ec0c0", + "blockHeader": { + "parentHash": "0x12bde64ff9743bd207ea01e4d6b41e03f8484eda502841f4bc5fe429f215a15f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0x45658a433bcd4500968fbee04108a300401dcfd959c1b8ffe35847018b0f29ab", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xaead5e801b1a6a82b76f5bcab5c8ecc10bc3e6f99a7f3e751a23a1f84aa47c5c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043e39", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x1c050ffb13bb7dc0c3e5d65c39e7f33cbdad9435a1fba44e33e8a0e7ad6bdf11", + "s": "0x218f824348722948cea332ced96f701ca8cd3cd7b42e77217421ddaa78bc0710", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xe124bbb45daf2d0803a476a59864ef5fc1b24877e0d64ce75ef2d61f298e9aac", + "s": "0x0386c51e69fee300077c3e64635f9e85c805b2fb94b419514672b171e2e79b6e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xaead5e801b1a6a82b76f5bcab5c8ecc10bc3e6f99a7f3e751a23a1f84aa47c5c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x244959", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09b85ba7aabc516b9a63fb17c637b7f4791cdc618e94462d48a71fab82a2965f5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9b85ba7aabc516b9a63fb17c637b7f4791cdc618e94462d48a71fab82a2965f5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x039b33a9809fb5490d7bbe076e0b86aec0212c08287bc09e1642f555515ed7e0" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0039b33a9809fb5490d7bbe076e0b86aec0212c08287bc09e1642f555515ed7e0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea044dc6b43edf6fbcb5aed46f8652ea55c5d6861e2f24268c2dc17a605dccf5836a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e7c180c001a0bf540393c8f80dca4d3dadedf49b75ec998543e894b672482aee03cf7321e138a061cf147ec63a87149ff21239776cde713788a8627280f8a0f468f35f91d43892b8e403f8e101800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a094519cff6477fad916443eff9b13139b08e7323688cb76ad8c069efbbc06b981a0378016270813415c8b05bb2e0855f0b0c444a8f2d2f767b332a7e4eecb58d367c0c0", + "blockHeader": { + "parentHash": "0x039b33a9809fb5490d7bbe076e0b86aec0212c08287bc09e1642f555515ed7e0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0x44dc6b43edf6fbcb5aed46f8652ea55c5d6861e2f24268c2dc17a605dccf5836", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xecd2f9b24bc9fb6fc3bfa39ea831cbc96519e46b4ff28b58f8874fbc01222e56" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e7c1", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xbf540393c8f80dca4d3dadedf49b75ec998543e894b672482aee03cf7321e138", + "s": "0x61cf147ec63a87149ff21239776cde713788a8627280f8a0f468f35f91d43892", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x94519cff6477fad916443eff9b13139b08e7323688cb76ad8c069efbbc06b981", + "s": "0x378016270813415c8b05bb2e0855f0b0c444a8f2d2f767b332a7e4eecb58d367", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xecd2f9b24bc9fb6fc3bfa39ea831cbc96519e46b4ff28b58f8874fbc01222e56", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f2e1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01af0dbde8363b0a6961b828d85d7271a27284db351d3a7ebb87eb4fd28002a9ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x1af0dbde8363b0a6961b828d85d7271a27284db351d3a7ebb87eb4fd28002a9c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfbe3b83b41dd49edc9e3a648dacc6fd7a32db801ea66cc542217543e2a9cfc8c" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0fbe3b83b41dd49edc9e3a648dacc6fd7a32db801ea66cc542217543e2a9cfc8ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0970d772cd659facd5ae5e92e3c698ff30de0ffd11ce1d6b4b6874a4c7a1dc028a02baaedb2410eed02e668820270282dad2e263d8287708f1888913d7bd43adc53a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067c7180c001a00c47c1d452d6c4c1c9d107434a7a719ad54281aa543b2644904a24501127ac37a05bfe464d489a289e03da212ac328b4ad758acedd96158cec28391f60026fbec1b88803f8850180070e8252089400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0624a140b38ed4cf7d86f49a3ab909b9658b16a4b3d07c45254a730501e2b86a3a00bfdd1e081bbabd86bb4b18047a78cab739f6f9be8a6c1126d5f2c456b63fb95c0c0", + "blockHeader": { + "parentHash": "0xfbe3b83b41dd49edc9e3a648dacc6fd7a32db801ea66cc542217543e2a9cfc8c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x970d772cd659facd5ae5e92e3c698ff30de0ffd11ce1d6b4b6874a4c7a1dc028", + "transactionsTrie": "0x2baaedb2410eed02e668820270282dad2e263d8287708f1888913d7bd43adc53", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa54c0a623d5348c5b44fd332e76c9882992f5b2419f242a87e10b5f14995b13d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067c71", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x0c47c1d452d6c4c1c9d107434a7a719ad54281aa543b2644904a24501127ac37", + "s": "0x5bfe464d489a289e03da212ac328b4ad758acedd96158cec28391f60026fbec1", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x624a140b38ed4cf7d86f49a3ab909b9658b16a4b3d07c45254a730501e2b86a3", + "s": "0x0bfdd1e081bbabd86bb4b18047a78cab739f6f9be8a6c1126d5f2c456b63fb95", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa54c0a623d5348c5b44fd332e76c9882992f5b2419f242a87e10b5f14995b13d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x268791", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a082dd97864601fa6da603c71c5d39efe1453ba506c243404828041694813186dba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x82dd97864601fa6da603c71c5d39efe1453ba506c243404828041694813186db", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6bae0933498c52913ff22e82396dd7775c9af27c9d6ff4174bfe58e843fdb8f3" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a06bae0933498c52913ff22e82396dd7775c9af27c9d6ff4174bfe58e843fdb8f3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02990cbcf9fe456d80f5f8beca6c082fa86e071d7d1c06fb6433b7bee9f8b8278a053f0244b4cf07c5df2804e61b6f0f948e51459a6e9f61113133fef75233842e9a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307cf8180c080a0aed0664293ca2af1bba21be3310b3f6432bfc8a7b99fd4485d51673714d5e82ca06bb6a6db607c2f9c07f135d81aacd81fbe6b0cd8904b287ffbb5c679943c4200b8e403f8e10180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0edf6da8461c595f9fc37af1beeabac52894d5a1424a1f83224f54a50303dc71fa04ab3cb3fa04b24975aa59ee374807eabb654d8ce041247b50f84a9bf6fb5ef6fc0c0", + "blockHeader": { + "parentHash": "0x6bae0933498c52913ff22e82396dd7775c9af27c9d6ff4174bfe58e843fdb8f3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2990cbcf9fe456d80f5f8beca6c082fa86e071d7d1c06fb6433b7bee9f8b8278", + "transactionsTrie": "0x53f0244b4cf07c5df2804e61b6f0f948e51459a6e9f61113133fef75233842e9", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xff24b46a76c7191735607a40e334e8fae209b82425dee939ed48a34dddbcb3a4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07cf81", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xaed0664293ca2af1bba21be3310b3f6432bfc8a7b99fd4485d51673714d5e82c", + "s": "0x6bb6a6db607c2f9c07f135d81aacd81fbe6b0cd8904b287ffbb5c679943c4200", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xedf6da8461c595f9fc37af1beeabac52894d5a1424a1f83224f54a50303dc71f", + "s": "0x4ab3cb3fa04b24975aa59ee374807eabb654d8ce041247b50f84a9bf6fb5ef6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xff24b46a76c7191735607a40e334e8fae209b82425dee939ed48a34dddbcb3a4", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27daa1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0080d7d47e46ca7ac151466e557138b85762aa1d7e603b4a58a44227d3500dcdda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x080d7d47e46ca7ac151466e557138b85762aa1d7e603b4a58a44227d3500dcdd", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdc402d48e51173b1f65b7a7c52429c2727c798be7d370bb489858489da0bc9d1" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0dc402d48e51173b1f65b7a7c52429c2727c798be7d370bb489858489da0bc9d1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a0312280ea986bc1256325e526a66f148c29c62b1be5702688a83b5298ed85bc6da05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043e5480c001a026137a298fe40c3f4b0d0116c18236b0e452b0737fab9e95344b7678dea77784a072fe30df33bce48098960725c71b04e9863c8a94f1a01d2f81b96295ee1ccaabb88803f8850180800782520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0d63db34ac58ec38d12d12ce50c32c7ffc0a12b9c96e0073da56118a02e1c20c0a00479d9be99ba0ae77b7d2d68c89d497a0912e45aa79cc7d7675ed02e4148e8a9c0c0", + "blockHeader": { + "parentHash": "0xdc402d48e51173b1f65b7a7c52429c2727c798be7d370bb489858489da0bc9d1", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x312280ea986bc1256325e526a66f148c29c62b1be5702688a83b5298ed85bc6d", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x82521466be75df50d0ae9d4b4086ed55d4018f81b5eb7c2ae584a3301a2b2268" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043e54", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x26137a298fe40c3f4b0d0116c18236b0e452b0737fab9e95344b7678dea77784", + "s": "0x72fe30df33bce48098960725c71b04e9863c8a94f1a01d2f81b96295ee1ccaab", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xd63db34ac58ec38d12d12ce50c32c7ffc0a12b9c96e0073da56118a02e1c20c0", + "s": "0x0479d9be99ba0ae77b7d2d68c89d497a0912e45aa79cc7d7675ed02e4148e8a9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x82521466be75df50d0ae9d4b4086ed55d4018f81b5eb7c2ae584a3301a2b2268", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x244974", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0836479851d0028be52f5700998590bca45de019aeae99973a1a883b3a427f975a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x836479851d0028be52f5700998590bca45de019aeae99973a1a883b3a427f975", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe416e9275fea76e875370c7ee89146607cc24dbf471ac0955dd581a868f13343" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0e416e9275fea76e875370c7ee89146607cc24dbf471ac0955dd581a868f13343a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a02af831072621401e22cbc88cea127a134e99104c3763d287714b02974a10b0eaa06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e7dc80c080a065ea61d20984216577492c54f15bd287324af4bf1c8873cf16fc2b2ea9462b3fa03a66586576fc3dfaec53c6d226d197b5e2498d6b941bb133cc3d3580365bbf6db8e403f8e101808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0292e89c324207a7478f4e9e39bdfb2b11c7e772b004cb543673df94d2887ccdea056d43c6b2fcdf6728dbeb8c96ff09f9a82775869f83835ab4b05aee56cf7ad6fc0c0", + "blockHeader": { + "parentHash": "0xe416e9275fea76e875370c7ee89146607cc24dbf471ac0955dd581a868f13343", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x2af831072621401e22cbc88cea127a134e99104c3763d287714b02974a10b0ea", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc53dbb8b7d5ef257149a84d5c1911aac4216d81fb9ca81529a28db56fcc25aa1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e7dc", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x65ea61d20984216577492c54f15bd287324af4bf1c8873cf16fc2b2ea9462b3f", + "s": "0x3a66586576fc3dfaec53c6d226d197b5e2498d6b941bb133cc3d3580365bbf6d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x292e89c324207a7478f4e9e39bdfb2b11c7e772b004cb543673df94d2887ccde", + "s": "0x56d43c6b2fcdf6728dbeb8c96ff09f9a82775869f83835ab4b05aee56cf7ad6f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc53dbb8b7d5ef257149a84d5c1911aac4216d81fb9ca81529a28db56fcc25aa1", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f2fc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f7a8ef9d962682137da8175fd9aae8ccf76eb012dba13ef2f0163d44f315b4da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f7a8ef9d962682137da8175fd9aae8ccf76eb012dba13ef2f0163d44f315b4d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0cd61535a6035c6f33a2babe79b9001b55539a224274cbfc4c7a16fcebe72d29" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a00cd61535a6035c6f33a2babe79b9001b55539a224274cbfc4c7a16fcebe72d29a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d022c0c180a8086031a87cf87ed17b07603bae2a2928ee15b5b8c5d76faf5326a0c7a6a332a9e11f1c706ecab2ed23975b98705d63306cff729a5c4cc239c1d24aa05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067ca880c001a0c5561a789ca403aacc69b875eb65949ea29783b40c6f1312a7cba934c0d7f57da03dd01fcdc23f6cbd7ae449def52807cf4f208f71e3643cb14c65223c728fdf44b88803f8850180800e82520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000080a05f88705bb859d673345755d0405b6dc4787bb00ba41bce9cb43f5f4b06ddee0fa04965b9f492f0e4ef3b4fdc72b98309a14a00ad06c6bb46e566e3093025cfa94fc0c0", + "blockHeader": { + "parentHash": "0x0cd61535a6035c6f33a2babe79b9001b55539a224274cbfc4c7a16fcebe72d29", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd022c0c180a8086031a87cf87ed17b07603bae2a2928ee15b5b8c5d76faf5326", + "transactionsTrie": "0xc7a6a332a9e11f1c706ecab2ed23975b98705d63306cff729a5c4cc239c1d24a", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfa77f35401bd99f5cec24489332160e03c58f2c473d1c542df408d16483f44d5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067ca8", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xc5561a789ca403aacc69b875eb65949ea29783b40c6f1312a7cba934c0d7f57d", + "s": "0x3dd01fcdc23f6cbd7ae449def52807cf4f208f71e3643cb14c65223c728fdf44", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x5f88705bb859d673345755d0405b6dc4787bb00ba41bce9cb43f5f4b06ddee0f", + "s": "0x4965b9f492f0e4ef3b4fdc72b98309a14a00ad06c6bb46e566e3093025cfa94f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xfa77f35401bd99f5cec24489332160e03c58f2c473d1c542df408d16483f44d5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x2687c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fca9e430e15554c140ca2a0743c2487ce3d22b97da1b5803e12e5881ddcde5aaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfca9e430e15554c140ca2a0743c2487ce3d22b97da1b5803e12e5881ddcde5aa", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xabb1cc02d000586c62736f6af2b9beea9606649e56897c3df618679c1384d6b0" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0abb1cc02d000586c62736f6af2b9beea9606649e56897c3df618679c1384d6b0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b5419c16b38c9e70d01dac79f82fc11f97e367138ea884bdb55cbd503b36cb97a0bf97f4a3f2234142c009aa8c9a13b2900e6acc280dfc748b9dec5459da080905a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307cfb880c080a07d219498ca31eb7facabf268329b141fb10625117f0ff14decc3763085153ed5a02374adc7f96376de96230f61da84857047def294cceb6ff14a02d931058ced40b8e403f8e10180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a01212dd963b86a994ea29bac5adceb1b164f3c394f672e9cb7fa09eb662b49fd3a03996bdb0f963b0c9e86ce0cb114101c5c5679029c8cfbe35e5a609e913d6dd38c0c0", + "blockHeader": { + "parentHash": "0xabb1cc02d000586c62736f6af2b9beea9606649e56897c3df618679c1384d6b0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb5419c16b38c9e70d01dac79f82fc11f97e367138ea884bdb55cbd503b36cb97", + "transactionsTrie": "0xbf97f4a3f2234142c009aa8c9a13b2900e6acc280dfc748b9dec5459da080905", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5e8c280bbffae91512602ff5296e351767db2d2b70aa8af1a63ae2287e317f93" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07cfb8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x7d219498ca31eb7facabf268329b141fb10625117f0ff14decc3763085153ed5", + "s": "0x2374adc7f96376de96230f61da84857047def294cceb6ff14a02d931058ced40", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x1212dd963b86a994ea29bac5adceb1b164f3c394f672e9cb7fa09eb662b49fd3", + "s": "0x3996bdb0f963b0c9e86ce0cb114101c5c5679029c8cfbe35e5a609e913d6dd38", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5e8c280bbffae91512602ff5296e351767db2d2b70aa8af1a63ae2287e317f93", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27dad8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0080d7d47e46ca7ac151466e557138b85762aa1d7e603b4a58a44227d3500dcdda056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x080d7d47e46ca7ac151466e557138b85762aa1d7e603b4a58a44227d3500dcdd", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdc402d48e51173b1f65b7a7c52429c2727c798be7d370bb489858489da0bc9d1" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0dc402d48e51173b1f65b7a7c52429c2727c798be7d370bb489858489da0bc9d1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a045d59d463c03d8c8ca8cc4e8b6b2e3d647e0e9547b3d11a7f0058ba4a2af67a4a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043e5480c001a026137a298fe40c3f4b0d0116c18236b0e452b0737fab9e95344b7678dea77784a072fe30df33bce48098960725c71b04e9863c8a94f1a01d2f81b96295ee1ccaabb88803f8850180070782520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000080a00915c912e976133b6671b1c386032d861fe05162455ee0dc06f48bc9ae57af92a06e1fc3d16717d2aa3a3445a29aaa7498771f57b7ca0278da129695f364f4ed1ac0c0", + "blockHeader": { + "parentHash": "0xdc402d48e51173b1f65b7a7c52429c2727c798be7d370bb489858489da0bc9d1", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x45d59d463c03d8c8ca8cc4e8b6b2e3d647e0e9547b3d11a7f0058ba4a2af67a4", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x93494daaa518a4f12d070c9122c9cf804b728729c31140a3e7ad963836851911" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043e54", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x26137a298fe40c3f4b0d0116c18236b0e452b0737fab9e95344b7678dea77784", + "s": "0x72fe30df33bce48098960725c71b04e9863c8a94f1a01d2f81b96295ee1ccaab", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0915c912e976133b6671b1c386032d861fe05162455ee0dc06f48bc9ae57af92", + "s": "0x6e1fc3d16717d2aa3a3445a29aaa7498771f57b7ca0278da129695f364f4ed1a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x93494daaa518a4f12d070c9122c9cf804b728729c31140a3e7ad963836851911", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x244974", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0836479851d0028be52f5700998590bca45de019aeae99973a1a883b3a427f975a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x836479851d0028be52f5700998590bca45de019aeae99973a1a883b3a427f975", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe416e9275fea76e875370c7ee89146607cc24dbf471ac0955dd581a868f13343" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0e416e9275fea76e875370c7ee89146607cc24dbf471ac0955dd581a868f13343a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a0df6dfb13cb257f50f78f1bfc9b0acca85c9b934ba82aaca8ee25c3675e881986a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e7dc80c080a065ea61d20984216577492c54f15bd287324af4bf1c8873cf16fc2b2ea9462b3fa03a66586576fc3dfaec53c6d226d197b5e2498d6b941bb133cc3d3580365bbf6db8e403f8e101800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0d9fe1e438a9b3d91bf162e5c13d40dbd1f015d31c435f4d113e6b8c485389ee6a00712255536b24cf29d6716bc80a2dcf50327ba39be52308ddaded33a7865c0e3c0c0", + "blockHeader": { + "parentHash": "0xe416e9275fea76e875370c7ee89146607cc24dbf471ac0955dd581a868f13343", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0xdf6dfb13cb257f50f78f1bfc9b0acca85c9b934ba82aaca8ee25c3675e881986", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xae5ed7ac2378715d5cc56e942d5d3e9cfe31a154dbfa5103f032e417c8960d08" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e7dc", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x65ea61d20984216577492c54f15bd287324af4bf1c8873cf16fc2b2ea9462b3f", + "s": "0x3a66586576fc3dfaec53c6d226d197b5e2498d6b941bb133cc3d3580365bbf6d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xd9fe1e438a9b3d91bf162e5c13d40dbd1f015d31c435f4d113e6b8c485389ee6", + "s": "0x0712255536b24cf29d6716bc80a2dcf50327ba39be52308ddaded33a7865c0e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xae5ed7ac2378715d5cc56e942d5d3e9cfe31a154dbfa5103f032e417c8960d08", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f2fc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f7a8ef9d962682137da8175fd9aae8ccf76eb012dba13ef2f0163d44f315b4da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f7a8ef9d962682137da8175fd9aae8ccf76eb012dba13ef2f0163d44f315b4d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0cd61535a6035c6f33a2babe79b9001b55539a224274cbfc4c7a16fcebe72d29" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a00cd61535a6035c6f33a2babe79b9001b55539a224274cbfc4c7a16fcebe72d29a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa006f526833754f66a285f9d7060fa22d265c2abc8bfc1506892cd298f03d0065fa0479550d08b2273ecd3020b09259d4e21a9ca2e541af75c444cbd66d725601cb6a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067ca880c001a0c5561a789ca403aacc69b875eb65949ea29783b40c6f1312a7cba934c0d7f57da03dd01fcdc23f6cbd7ae449def52807cf4f208f71e3643cb14c65223c728fdf44b88803f8850180070e82520c9400000000000000000000000000000000000001008000c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06853cf535868b0816ad0556ebeca098be6e4a272d191948fafd99242d8e7e587a07362db7dc501b0784860424427c60e39f098f25bae42a19f40425c523cdb5d83c0c0", + "blockHeader": { + "parentHash": "0x0cd61535a6035c6f33a2babe79b9001b55539a224274cbfc4c7a16fcebe72d29", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x06f526833754f66a285f9d7060fa22d265c2abc8bfc1506892cd298f03d0065f", + "transactionsTrie": "0x479550d08b2273ecd3020b09259d4e21a9ca2e541af75c444cbd66d725601cb6", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3e0ff4fff778ded9efed0a935d23bd94e606342b966fe0de3765fb97787116f7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067ca8", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xc5561a789ca403aacc69b875eb65949ea29783b40c6f1312a7cba934c0d7f57d", + "s": "0x3dd01fcdc23f6cbd7ae449def52807cf4f208f71e3643cb14c65223c728fdf44", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6853cf535868b0816ad0556ebeca098be6e4a272d191948fafd99242d8e7e587", + "s": "0x7362db7dc501b0784860424427c60e39f098f25bae42a19f40425c523cdb5d83", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x3e0ff4fff778ded9efed0a935d23bd94e606342b966fe0de3765fb97787116f7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x2687c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fca9e430e15554c140ca2a0743c2487ce3d22b97da1b5803e12e5881ddcde5aaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfca9e430e15554c140ca2a0743c2487ce3d22b97da1b5803e12e5881ddcde5aa", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xabb1cc02d000586c62736f6af2b9beea9606649e56897c3df618679c1384d6b0" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0abb1cc02d000586c62736f6af2b9beea9606649e56897c3df618679c1384d6b0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a485e081c79d963b6362d9613d68341728a14ae36682a2c8d28d75ce078e94aca08b22025cefdcbe7c94a0d5bc3e5f1f8d1f3b92cbf29e2a2551cc289fb1fba68fa06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307cfb880c080a07d219498ca31eb7facabf268329b141fb10625117f0ff14decc3763085153ed5a02374adc7f96376de96230f61da84857047def294cceb6ff14a02d931058ced40b8e403f8e10180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0f64e93e9ea155f73f074672dfd6ec7c3e11e3695a13f6e61fd22f8680a3e8790a01d51713aae874deb23a3580c92212d13e11ff8f99d5ebeed5045e27fdaa60f10c0c0", + "blockHeader": { + "parentHash": "0xabb1cc02d000586c62736f6af2b9beea9606649e56897c3df618679c1384d6b0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa485e081c79d963b6362d9613d68341728a14ae36682a2c8d28d75ce078e94ac", + "transactionsTrie": "0x8b22025cefdcbe7c94a0d5bc3e5f1f8d1f3b92cbf29e2a2551cc289fb1fba68f", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x42d166af841c806095bda6cf877154876fa5148e61665ae86aa8378a245f4ce2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07cfb8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x7d219498ca31eb7facabf268329b141fb10625117f0ff14decc3763085153ed5", + "s": "0x2374adc7f96376de96230f61da84857047def294cceb6ff14a02d931058ced40", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xf64e93e9ea155f73f074672dfd6ec7c3e11e3695a13f6e61fd22f8680a3e8790", + "s": "0x1d51713aae874deb23a3580c92212d13e11ff8f99d5ebeed5045e27fdaa60f10", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x42d166af841c806095bda6cf877154876fa5148e61665ae86aa8378a245f4ce2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27dad8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fd6d7965e15d2878e8268ed72fb5c8389c956ee1f0d5c483844f50c3dc217fcaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfd6d7965e15d2878e8268ed72fb5c8389c956ee1f0d5c483844f50c3dc217fca", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd201a0989c69a60b3e1d90dc70bf550e11c0db4fc8b71cd3b94cbbae600c17b8" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0d201a0989c69a60b3e1d90dc70bf550e11c0db4fc8b71cd3b94cbbae600c17b8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0ec5d774c9faefe13f0f08d5aae1541be5bd35346ee3c7b8221b9d6829d9fadcba05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043e5580c001a081711fdccbc124c69d9691baa3ddcb0f1f5d1e03bd0d8b2bf72b66ac9c9363dfa062358396718878c9fd34c9d4a92ba32a6219561b2b4122059332fc11b997f262b88803f8850180800782520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0703aa500a86c6fdaf42c6d911603adbe2b76169e1b197b8aafcc8875a3eb0feda006cc33c2670ab1c6de81af8044eacf09d652449d41625141d8a99343234ba66bc0c0", + "blockHeader": { + "parentHash": "0xd201a0989c69a60b3e1d90dc70bf550e11c0db4fc8b71cd3b94cbbae600c17b8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0xec5d774c9faefe13f0f08d5aae1541be5bd35346ee3c7b8221b9d6829d9fadcb", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa8dd372c08b4f55ecb8f233441fa706756ebd9d267c28504ce0f84148a17e335" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043e55", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x81711fdccbc124c69d9691baa3ddcb0f1f5d1e03bd0d8b2bf72b66ac9c9363df", + "s": "0x62358396718878c9fd34c9d4a92ba32a6219561b2b4122059332fc11b997f262", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x703aa500a86c6fdaf42c6d911603adbe2b76169e1b197b8aafcc8875a3eb0fed", + "s": "0x06cc33c2670ab1c6de81af8044eacf09d652449d41625141d8a99343234ba66b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa8dd372c08b4f55ecb8f233441fa706756ebd9d267c28504ce0f84148a17e335", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x244975", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0501d262432f489b6b507bc7e86d4754eceb6eca5679bd5f8838e9ab3d331e212a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x501d262432f489b6b507bc7e86d4754eceb6eca5679bd5f8838e9ab3d331e212", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf2f4baf7823eabf394d5837543d82a52824adaebc55207ebf4f8b8188412be83" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0f2f4baf7823eabf394d5837543d82a52824adaebc55207ebf4f8b8188412be83a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0adc030b7ecfaa3a7b044f68e88c2a6963b1b3efdb6d585cdbf604a4c084170d9a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e7dd80c001a0a16399a29d05103e7803b099bc4da93877ed6865bb43279f2b128d54a3e9a0f1a01785322974b9bd9f3c641ba633e2f4275e33a5e97b0e6f6d0044e9ee56a9c8adb8e403f8e101808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0a634a3fffd4f15bce2dbe4e02e84d6061b6b6b3b260886a3c670173e497628cca066561151ee507f9a15697b91636c537114a259bd7667697072f48037e3102705c0c0", + "blockHeader": { + "parentHash": "0xf2f4baf7823eabf394d5837543d82a52824adaebc55207ebf4f8b8188412be83", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0xadc030b7ecfaa3a7b044f68e88c2a6963b1b3efdb6d585cdbf604a4c084170d9", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1bea9c990819211052d428b83d335add87643af3ed1bf2e9295d576a910d4906" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e7dd", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xa16399a29d05103e7803b099bc4da93877ed6865bb43279f2b128d54a3e9a0f1", + "s": "0x1785322974b9bd9f3c641ba633e2f4275e33a5e97b0e6f6d0044e9ee56a9c8ad", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xa634a3fffd4f15bce2dbe4e02e84d6061b6b6b3b260886a3c670173e497628cc", + "s": "0x66561151ee507f9a15697b91636c537114a259bd7667697072f48037e3102705", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1bea9c990819211052d428b83d335add87643af3ed1bf2e9295d576a910d4906", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f2fd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a072b340a3355f942617c6691940866e92da4776580dd1765f19cef4d853e624caa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x72b340a3355f942617c6691940866e92da4776580dd1765f19cef4d853e624ca", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfc334afb66ce8f3704d394e8ccbe837ad4ed20cb6e0006e8fb60697a8f28f197" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0fc334afb66ce8f3704d394e8ccbe837ad4ed20cb6e0006e8fb60697a8f28f197a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d23388e767548b807d5d4cad80f4ed3be7b0ee1c2e544928124c14787ccbfc47a07252726ac665992e13202a189ad38fccdddd21ef71bd825d4a6f76fd240a05efa05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067ca980c080a0b1d6c437650bf2ac7660739a14635a4a43bfb37d3f2d585163ba9285c2cef88fa012c717cd6547360500e117562354f122f64af4d305eab56aec59012434a72c2db88803f8850180800e82520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0a0649ae6e408661fce3b932e6fb5a337bd778aa46f2b8a397f6d0ca4fa29a444a038aef9bd08580b41755dd8227945d0efb29e1ff3ac51a856dc66875d49ba0794c0c0", + "blockHeader": { + "parentHash": "0xfc334afb66ce8f3704d394e8ccbe837ad4ed20cb6e0006e8fb60697a8f28f197", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd23388e767548b807d5d4cad80f4ed3be7b0ee1c2e544928124c14787ccbfc47", + "transactionsTrie": "0x7252726ac665992e13202a189ad38fccdddd21ef71bd825d4a6f76fd240a05ef", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5aa05fed61e798f1b1842fbb45af4bd41680bb3c84487571d6f8b91dfeb944a3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067ca9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xb1d6c437650bf2ac7660739a14635a4a43bfb37d3f2d585163ba9285c2cef88f", + "s": "0x12c717cd6547360500e117562354f122f64af4d305eab56aec59012434a72c2d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa0649ae6e408661fce3b932e6fb5a337bd778aa46f2b8a397f6d0ca4fa29a444", + "s": "0x38aef9bd08580b41755dd8227945d0efb29e1ff3ac51a856dc66875d49ba0794", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5aa05fed61e798f1b1842fbb45af4bd41680bb3c84487571d6f8b91dfeb944a3", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x2687c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0338e00388665c0ca3ecfb636c8edad008f154523851cd93808420669b83f9236a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x338e00388665c0ca3ecfb636c8edad008f154523851cd93808420669b83f9236", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5cdace9afca19d3cb98ce00d842bbbdb0fb192684cf04573953805a631c0691f" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a05cdace9afca19d3cb98ce00d842bbbdb0fb192684cf04573953805a631c0691fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa069773daf8143175fbb0205ca2f161a43055103198acad441d426005168f3b88ba0127743c0168d0909b51309d0b964dfd0d914cd93acae8bd4fe02a397c3931843a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307cfb980c001a041fbfac10110d1fc5ee87ff59e4e441fa103f45e55375bd8513c790c478168c6a079cdc4f74ac5f49bd2672021a9277c6e2085963dcb969de03cddd644079c173db8e403f8e10180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a08ac063a37a0cce37e416eaf259b2ec6fc933213e7fd2fad3d398e1f9dfebdf5da0168dbf0e956fdc3640470db838436c7aec888358a660fd20d88949459d61d109c0c0", + "blockHeader": { + "parentHash": "0x5cdace9afca19d3cb98ce00d842bbbdb0fb192684cf04573953805a631c0691f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x69773daf8143175fbb0205ca2f161a43055103198acad441d426005168f3b88b", + "transactionsTrie": "0x127743c0168d0909b51309d0b964dfd0d914cd93acae8bd4fe02a397c3931843", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xadc4f44670beeba9b1fa377ace9b73e4c818f8281fae3d3797750b4d668d25cb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07cfb9", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x41fbfac10110d1fc5ee87ff59e4e441fa103f45e55375bd8513c790c478168c6", + "s": "0x79cdc4f74ac5f49bd2672021a9277c6e2085963dcb969de03cddd644079c173d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8ac063a37a0cce37e416eaf259b2ec6fc933213e7fd2fad3d398e1f9dfebdf5d", + "s": "0x168dbf0e956fdc3640470db838436c7aec888358a660fd20d88949459d61d109", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xadc4f44670beeba9b1fa377ace9b73e4c818f8281fae3d3797750b4d668d25cb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27dad9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fd6d7965e15d2878e8268ed72fb5c8389c956ee1f0d5c483844f50c3dc217fcaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfd6d7965e15d2878e8268ed72fb5c8389c956ee1f0d5c483844f50c3dc217fca", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd201a0989c69a60b3e1d90dc70bf550e11c0db4fc8b71cd3b94cbbae600c17b8" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0d201a0989c69a60b3e1d90dc70bf550e11c0db4fc8b71cd3b94cbbae600c17b8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0764bb8398015d39bf4d1d85403d377009f7a00baeab6d2ef7fa7d64279ad97aca05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043e5580c001a081711fdccbc124c69d9691baa3ddcb0f1f5d1e03bd0d8b2bf72b66ac9c9363dfa062358396718878c9fd34c9d4a92ba32a6219561b2b4122059332fc11b997f262b88803f8850180070782520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0434bec1c9893eaee4a25fae57740934e9aaadebf06f31ddbb942a49a9d4527a7a07e7b4e7c75affa9240c2c75901235acd72db9ccf283915a00530063c6a738fc7c0c0", + "blockHeader": { + "parentHash": "0xd201a0989c69a60b3e1d90dc70bf550e11c0db4fc8b71cd3b94cbbae600c17b8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0x764bb8398015d39bf4d1d85403d377009f7a00baeab6d2ef7fa7d64279ad97ac", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x69c6b75751a2693036177a7e87b7764f1d34de89fa9ab60dc6caf9d051f262c6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043e55", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x81711fdccbc124c69d9691baa3ddcb0f1f5d1e03bd0d8b2bf72b66ac9c9363df", + "s": "0x62358396718878c9fd34c9d4a92ba32a6219561b2b4122059332fc11b997f262", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x434bec1c9893eaee4a25fae57740934e9aaadebf06f31ddbb942a49a9d4527a7", + "s": "0x7e7b4e7c75affa9240c2c75901235acd72db9ccf283915a00530063c6a738fc7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x69c6b75751a2693036177a7e87b7764f1d34de89fa9ab60dc6caf9d051f262c6", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x244975", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0501d262432f489b6b507bc7e86d4754eceb6eca5679bd5f8838e9ab3d331e212a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x501d262432f489b6b507bc7e86d4754eceb6eca5679bd5f8838e9ab3d331e212", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf2f4baf7823eabf394d5837543d82a52824adaebc55207ebf4f8b8188412be83" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0f2f4baf7823eabf394d5837543d82a52824adaebc55207ebf4f8b8188412be83a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0bba800faf89d6f44daa967d8d3af7bcb833ea6a808388ba214ffe880b283375ba06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e7dd80c001a0a16399a29d05103e7803b099bc4da93877ed6865bb43279f2b128d54a3e9a0f1a01785322974b9bd9f3c641ba633e2f4275e33a5e97b0e6f6d0044e9ee56a9c8adb8e403f8e101800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0702d0dff58e3d98b762b455db3217c937e6715afb73f3b9409a79d4b12abfbbba06921ef68f62aa985b464682a39282a7ff105b3ac8fbdbdf2f59267cdfbbdf294c0c0", + "blockHeader": { + "parentHash": "0xf2f4baf7823eabf394d5837543d82a52824adaebc55207ebf4f8b8188412be83", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0xbba800faf89d6f44daa967d8d3af7bcb833ea6a808388ba214ffe880b283375b", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe3147a661be8eb1122ed3cbe551b42dedd5c8c8e14527767dd9895f4e1cb3ee1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e7dd", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xa16399a29d05103e7803b099bc4da93877ed6865bb43279f2b128d54a3e9a0f1", + "s": "0x1785322974b9bd9f3c641ba633e2f4275e33a5e97b0e6f6d0044e9ee56a9c8ad", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x702d0dff58e3d98b762b455db3217c937e6715afb73f3b9409a79d4b12abfbbb", + "s": "0x6921ef68f62aa985b464682a39282a7ff105b3ac8fbdbdf2f59267cdfbbdf294", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe3147a661be8eb1122ed3cbe551b42dedd5c8c8e14527767dd9895f4e1cb3ee1", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f2fd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a072b340a3355f942617c6691940866e92da4776580dd1765f19cef4d853e624caa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x72b340a3355f942617c6691940866e92da4776580dd1765f19cef4d853e624ca", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfc334afb66ce8f3704d394e8ccbe837ad4ed20cb6e0006e8fb60697a8f28f197" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0fc334afb66ce8f3704d394e8ccbe837ad4ed20cb6e0006e8fb60697a8f28f197a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06db3f223545243f434de9c172fd990856eb43eca172efa23e2fd482b06784890a0bd0dc9fc2aac467357ba39af7a5e55145d72937ca90defe8a0a871afd7945e66a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067ca980c080a0b1d6c437650bf2ac7660739a14635a4a43bfb37d3f2d585163ba9285c2cef88fa012c717cd6547360500e117562354f122f64af4d305eab56aec59012434a72c2db88803f8850180070e82520c9400000000000000000000000000000000000001000100c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06776627cd2b4fc949b3eeb1544db7190d18bbb037381f46ce22ff99e7ef14de0a026a86ba1df241539425ae9d5b39fbe53074821b7320d3541b8fae0d9b74e52c2c0c0", + "blockHeader": { + "parentHash": "0xfc334afb66ce8f3704d394e8ccbe837ad4ed20cb6e0006e8fb60697a8f28f197", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6db3f223545243f434de9c172fd990856eb43eca172efa23e2fd482b06784890", + "transactionsTrie": "0xbd0dc9fc2aac467357ba39af7a5e55145d72937ca90defe8a0a871afd7945e66", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x28bce083dcc4da81d5824a6ad9b4171c36b3bd58be822f20af77cc64b365e5bb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067ca9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xb1d6c437650bf2ac7660739a14635a4a43bfb37d3f2d585163ba9285c2cef88f", + "s": "0x12c717cd6547360500e117562354f122f64af4d305eab56aec59012434a72c2d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6776627cd2b4fc949b3eeb1544db7190d18bbb037381f46ce22ff99e7ef14de0", + "s": "0x26a86ba1df241539425ae9d5b39fbe53074821b7320d3541b8fae0d9b74e52c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x28bce083dcc4da81d5824a6ad9b4171c36b3bd58be822f20af77cc64b365e5bb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x2687c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0338e00388665c0ca3ecfb636c8edad008f154523851cd93808420669b83f9236a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x338e00388665c0ca3ecfb636c8edad008f154523851cd93808420669b83f9236", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5cdace9afca19d3cb98ce00d842bbbdb0fb192684cf04573953805a631c0691f" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a05cdace9afca19d3cb98ce00d842bbbdb0fb192684cf04573953805a631c0691fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cfc81b23c876784443c505bc0c1d3cc75b4ad342d4ba9a719cba9f97e3d05931a0f6d52026803b8539e05b885aa6990187071e73c09313c1a7ce6d75431e3d3965a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307cfb980c001a041fbfac10110d1fc5ee87ff59e4e441fa103f45e55375bd8513c790c478168c6a079cdc4f74ac5f49bd2672021a9277c6e2085963dcb969de03cddd644079c173db8e403f8e10180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0b679ec96ca94636a291df54af0e8700214a30b5744b9b8c6ded35fef4dfebfc3a071f51659c579462d6058a9016b1c575ef8a939ee1023e675a60fc9ed442a82adc0c0", + "blockHeader": { + "parentHash": "0x5cdace9afca19d3cb98ce00d842bbbdb0fb192684cf04573953805a631c0691f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcfc81b23c876784443c505bc0c1d3cc75b4ad342d4ba9a719cba9f97e3d05931", + "transactionsTrie": "0xf6d52026803b8539e05b885aa6990187071e73c09313c1a7ce6d75431e3d3965", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf074c277c6c372846903743e829a05a7a4b17e652e32d2589c2de994457ad527" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07cfb9", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x41fbfac10110d1fc5ee87ff59e4e441fa103f45e55375bd8513c790c478168c6", + "s": "0x79cdc4f74ac5f49bd2672021a9277c6e2085963dcb969de03cddd644079c173d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb679ec96ca94636a291df54af0e8700214a30b5744b9b8c6ded35fef4dfebfc3", + "s": "0x71f51659c579462d6058a9016b1c575ef8a939ee1023e675a60fc9ed442a82ad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf074c277c6c372846903743e829a05a7a4b17e652e32d2589c2de994457ad527", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27dad9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00915cefe9ecdae4bea0aa60612bcb72580799a5047640e718784a7d9ccbb0dd2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0915cefe9ecdae4bea0aa60612bcb72580799a5047640e718784a7d9ccbb0dd2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe720e2da113bb7e8c3b4bf892161b6f52b2ce716040b9d205d372f820d73971e" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0e720e2da113bb7e8c3b4bf892161b6f52b2ce716040b9d205d372f820d73971ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a01c2c049848f3680b4ba5d6325683126afcab58cd06d500fd7256e030195dcc65a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043ea880c080a084eb79f3ee39f69755aefed8b241b5491e10c0a49c696b72c2d7d418b91970fda023d74f548076df523b6125e0f298ea1a1374bcaf04fd45c2d375cc489065c205b88803f885018080078252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a06f2ecd947190f8da2cb87977bf5ad8a900237c25ed3e29b541a8f3894795dd19a00c898c89c024170885687c208acf84407459a957dc930a82f11782b817de78b1c0c0", + "blockHeader": { + "parentHash": "0xe720e2da113bb7e8c3b4bf892161b6f52b2ce716040b9d205d372f820d73971e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x1c2c049848f3680b4ba5d6325683126afcab58cd06d500fd7256e030195dcc65", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb7d73af4e4605ceb44bad48e16df6b54dde428417d87c4425eca98726130b0c3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043ea8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x84eb79f3ee39f69755aefed8b241b5491e10c0a49c696b72c2d7d418b91970fd", + "s": "0x23d74f548076df523b6125e0f298ea1a1374bcaf04fd45c2d375cc489065c205", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6f2ecd947190f8da2cb87977bf5ad8a900237c25ed3e29b541a8f3894795dd19", + "s": "0x0c898c89c024170885687c208acf84407459a957dc930a82f11782b817de78b1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb7d73af4e4605ceb44bad48e16df6b54dde428417d87c4425eca98726130b0c3", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x2449c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09c339a8e5df3c40c21c4c2a578b6f6200f95a6500bc339455e43229e8cf7db8fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9c339a8e5df3c40c21c4c2a578b6f6200f95a6500bc339455e43229e8cf7db8f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf31edffb5e90820e22173356a1c5b545fac6f99d156a325a396b091dae84e5a3" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0f31edffb5e90820e22173356a1c5b545fac6f99d156a325a396b091dae84e5a3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a0a655b530dc0ea9f0e361fd220779211edd51373190382ead4852433433913bc3a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e83080c080a00380b47c985f815bf433c718dbd88efb3ff07798a455f1c4e58fba42a2d2234ca00ceacb08eff06d896fec6e05d91f942edaa695fa082fd5238f130826768c86d6b8e403f8e101808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a027d4e2a56c91c412705ae6dc417fdc74887a655b682d4ea32edc60f755e7cb04a04b00060f7f276295730f6dc0f5b345250443240ab6bd7d30b75efd959822e330c0c0", + "blockHeader": { + "parentHash": "0xf31edffb5e90820e22173356a1c5b545fac6f99d156a325a396b091dae84e5a3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0xa655b530dc0ea9f0e361fd220779211edd51373190382ead4852433433913bc3", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc1fb710a7b2133f36bd4f84c0721f1d8a836871c435d15025eef6ffbc5bb0c91" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e830", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x0380b47c985f815bf433c718dbd88efb3ff07798a455f1c4e58fba42a2d2234c", + "s": "0x0ceacb08eff06d896fec6e05d91f942edaa695fa082fd5238f130826768c86d6", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x27d4e2a56c91c412705ae6dc417fdc74887a655b682d4ea32edc60f755e7cb04", + "s": "0x4b00060f7f276295730f6dc0f5b345250443240ab6bd7d30b75efd959822e330", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc1fb710a7b2133f36bd4f84c0721f1d8a836871c435d15025eef6ffbc5bb0c91", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f350", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0218e47525307a9b82a2f83b14e92c67774dd4f4741f81c432ee933b72d02bc1da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x218e47525307a9b82a2f83b14e92c67774dd4f4741f81c432ee933b72d02bc1d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf4afdcd2a194df2515e16cb6c344efe3af33b84d20c2023f2510c57d0748adea" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0f4afdcd2a194df2515e16cb6c344efe3af33b84d20c2023f2510c57d0748adeaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07e50e6f9595249409309775708ef818b408ed5c0ffe13fae687b1ce488238299a08b2dc01f57a1886f7118eb05e65e6165c611ed6f65a6f0ff6c77342aca67f4a9a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067d5080c080a0f66f7623c1aa12d7a3ee922a0067dd9a5939fa3208be66645ca95f9fd25817d7a01388bb73bd965d108713a34c510ccb9e337febe5cf7ceb7d3535d492eada61bab88803f8850180800e8252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000001a06c373e328f8aaf93022312d2876a1ab0745238d08ad6319a95eecf63467e2a0aa01973989142c373a3cf6292d2b0173a8aeb8dd728d1e72c0e5f3e9abef84f3880c0c0", + "blockHeader": { + "parentHash": "0xf4afdcd2a194df2515e16cb6c344efe3af33b84d20c2023f2510c57d0748adea", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7e50e6f9595249409309775708ef818b408ed5c0ffe13fae687b1ce488238299", + "transactionsTrie": "0x8b2dc01f57a1886f7118eb05e65e6165c611ed6f65a6f0ff6c77342aca67f4a9", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x07560b250f241adc5524669683173b603886f2c3cc7f8fd936c9437ac762e43f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067d50", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xf66f7623c1aa12d7a3ee922a0067dd9a5939fa3208be66645ca95f9fd25817d7", + "s": "0x1388bb73bd965d108713a34c510ccb9e337febe5cf7ceb7d3535d492eada61ba", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x6c373e328f8aaf93022312d2876a1ab0745238d08ad6319a95eecf63467e2a0a", + "s": "0x1973989142c373a3cf6292d2b0173a8aeb8dd728d1e72c0e5f3e9abef84f3880", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x07560b250f241adc5524669683173b603886f2c3cc7f8fd936c9437ac762e43f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x268870", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00fa8ce50b4ab16abe673de4222bc3befbbfeb1d282c94132e1b3578bf659df14a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0fa8ce50b4ab16abe673de4222bc3befbbfeb1d282c94132e1b3578bf659df14", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2486554fecbaf3a55163a45fc23b23a678bab0f666b52eb4ea1160c16f7ef70b" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a02486554fecbaf3a55163a45fc23b23a678bab0f666b52eb4ea1160c16f7ef70ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a9a5cf0dfcbdad035336d0ce1991f951dfbb0ee45e778152e63614d2317aec4ca016f74b6d4aedd0ca6d9c40f0c995db7843bfe44a9daf3315ad2e404ce166dfdfa017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307d06080c001a067bc22b55f79199a6482f7de3795032f82560f16e3f9b8595e919b24403e2713a06fc29d54e9434af6d9dafac4726ae41d82a1f948471c9b852bbae9fd1d6f640db8e403f8e10180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a026e68c84694705d7a7e14bc6f1614a02d0a8b5a43bb4a4747cc0ee10acce4632a05d8c1dec984f84a654a9a6cedb490ffb3d2283e401aad48b8873f706fabc1d3bc0c0", + "blockHeader": { + "parentHash": "0x2486554fecbaf3a55163a45fc23b23a678bab0f666b52eb4ea1160c16f7ef70b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa9a5cf0dfcbdad035336d0ce1991f951dfbb0ee45e778152e63614d2317aec4c", + "transactionsTrie": "0x16f74b6d4aedd0ca6d9c40f0c995db7843bfe44a9daf3315ad2e404ce166dfdf", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcabdf58b092fee0bc9af40586a96ec1a10388582ef90a50934691706a4d944d0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07d060", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x67bc22b55f79199a6482f7de3795032f82560f16e3f9b8595e919b24403e2713", + "s": "0x6fc29d54e9434af6d9dafac4726ae41d82a1f948471c9b852bbae9fd1d6f640d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x26e68c84694705d7a7e14bc6f1614a02d0a8b5a43bb4a4747cc0ee10acce4632", + "s": "0x5d8c1dec984f84a654a9a6cedb490ffb3d2283e401aad48b8873f706fabc1d3b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xcabdf58b092fee0bc9af40586a96ec1a10388582ef90a50934691706a4d944d0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27db80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00915cefe9ecdae4bea0aa60612bcb72580799a5047640e718784a7d9ccbb0dd2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0915cefe9ecdae4bea0aa60612bcb72580799a5047640e718784a7d9ccbb0dd2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe720e2da113bb7e8c3b4bf892161b6f52b2ce716040b9d205d372f820d73971e" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0e720e2da113bb7e8c3b4bf892161b6f52b2ce716040b9d205d372f820d73971ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a0bbf08c8dbd968aec1a4eaf30cede31ed25ba5ee195098ccec2a6d070d11cd4a7a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043ea880c080a084eb79f3ee39f69755aefed8b241b5491e10c0a49c696b72c2d7d418b91970fda023d74f548076df523b6125e0f298ea1a1374bcaf04fd45c2d375cc489065c205b88803f885018007078252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a08aafd405d4567499d9b420036d4d175ad08b4d6511f4ae262c58ef4dc79338f6a010d8efe5cbf489f93c7be899373870da98096f9bfa1066b277bf2c9ee2fd54bfc0c0", + "blockHeader": { + "parentHash": "0xe720e2da113bb7e8c3b4bf892161b6f52b2ce716040b9d205d372f820d73971e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0xbbf08c8dbd968aec1a4eaf30cede31ed25ba5ee195098ccec2a6d070d11cd4a7", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x23539e149ee9db75d819cc1df80457963fa7d71b8ce9e15bbe6b48defd3dbe1d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043ea8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x84eb79f3ee39f69755aefed8b241b5491e10c0a49c696b72c2d7d418b91970fd", + "s": "0x23d74f548076df523b6125e0f298ea1a1374bcaf04fd45c2d375cc489065c205", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8aafd405d4567499d9b420036d4d175ad08b4d6511f4ae262c58ef4dc79338f6", + "s": "0x10d8efe5cbf489f93c7be899373870da98096f9bfa1066b277bf2c9ee2fd54bf", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x23539e149ee9db75d819cc1df80457963fa7d71b8ce9e15bbe6b48defd3dbe1d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x2449c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09c339a8e5df3c40c21c4c2a578b6f6200f95a6500bc339455e43229e8cf7db8fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9c339a8e5df3c40c21c4c2a578b6f6200f95a6500bc339455e43229e8cf7db8f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf31edffb5e90820e22173356a1c5b545fac6f99d156a325a396b091dae84e5a3" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0f31edffb5e90820e22173356a1c5b545fac6f99d156a325a396b091dae84e5a3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3a06aeb6a5b206fcd858428eaf9efddb75db239b5819dc89f9400811d3fce1571cfa017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e83080c080a00380b47c985f815bf433c718dbd88efb3ff07798a455f1c4e58fba42a2d2234ca00ceacb08eff06d896fec6e05d91f942edaa695fa082fd5238f130826768c86d6b8e403f8e101800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0cc737af5c85d0907c1b336cf66bfdcec4e3d2640521a41b19c1632d0d0acb549a02ec1f49f47d5a40719209c2a0511e3f920518281268500d17b5864adbbde244cc0c0", + "blockHeader": { + "parentHash": "0xf31edffb5e90820e22173356a1c5b545fac6f99d156a325a396b091dae84e5a3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb14d668645cf68352fde0d9910ba86dd4eb4a35b113a3db3997cbb0d95947c3", + "transactionsTrie": "0x6aeb6a5b206fcd858428eaf9efddb75db239b5819dc89f9400811d3fce1571cf", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdec0cff604c8ecf3b3b0936b0847c55bdecee3f115cdcf5ff4bd7dada0aa146b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e830", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x0380b47c985f815bf433c718dbd88efb3ff07798a455f1c4e58fba42a2d2234c", + "s": "0x0ceacb08eff06d896fec6e05d91f942edaa695fa082fd5238f130826768c86d6", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xcc737af5c85d0907c1b336cf66bfdcec4e3d2640521a41b19c1632d0d0acb549", + "s": "0x2ec1f49f47d5a40719209c2a0511e3f920518281268500d17b5864adbbde244c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xdec0cff604c8ecf3b3b0936b0847c55bdecee3f115cdcf5ff4bd7dada0aa146b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f350", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0218e47525307a9b82a2f83b14e92c67774dd4f4741f81c432ee933b72d02bc1da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x218e47525307a9b82a2f83b14e92c67774dd4f4741f81c432ee933b72d02bc1d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf4afdcd2a194df2515e16cb6c344efe3af33b84d20c2023f2510c57d0748adea" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0f4afdcd2a194df2515e16cb6c344efe3af33b84d20c2023f2510c57d0748adeaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0db0a71cec679bb798a967169cbf15070f97f5997d659f1eb6bf8f05124c5b5a033c897d7d047586571252612dc23bd7c98dd6f6e52198c050bf14c42f1ae7e5fa050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067d5080c080a0f66f7623c1aa12d7a3ee922a0067dd9a5939fa3208be66645ca95f9fd25817d7a01388bb73bd965d108713a34c510ccb9e337febe5cf7ceb7d3535d492eada61bab88803f8850180070e8252189400000000000000000000000000000000000001008001c001e1a0010000000000000000000000000000000000000000000000000000000000000080a00d4eb71cd4f5047d56dfa89cfbbb0e5910c3693de230d05fcb61441370698896a03f6f8636ab8b2e74ac2845fe1f17240ff21ef37e4d0cf50bae1a97c883f77e47c0c0", + "blockHeader": { + "parentHash": "0xf4afdcd2a194df2515e16cb6c344efe3af33b84d20c2023f2510c57d0748adea", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe0db0a71cec679bb798a967169cbf15070f97f5997d659f1eb6bf8f05124c5b5", + "transactionsTrie": "0x33c897d7d047586571252612dc23bd7c98dd6f6e52198c050bf14c42f1ae7e5f", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcdf9ef2b63c169c623777854df340a19c0711cb8b9fca8642a575f6c0141ceb7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067d50", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xf66f7623c1aa12d7a3ee922a0067dd9a5939fa3208be66645ca95f9fd25817d7", + "s": "0x1388bb73bd965d108713a34c510ccb9e337febe5cf7ceb7d3535d492eada61ba", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0d4eb71cd4f5047d56dfa89cfbbb0e5910c3693de230d05fcb61441370698896", + "s": "0x3f6f8636ab8b2e74ac2845fe1f17240ff21ef37e4d0cf50bae1a97c883f77e47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xcdf9ef2b63c169c623777854df340a19c0711cb8b9fca8642a575f6c0141ceb7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x268870", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00fa8ce50b4ab16abe673de4222bc3befbbfeb1d282c94132e1b3578bf659df14a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0fa8ce50b4ab16abe673de4222bc3befbbfeb1d282c94132e1b3578bf659df14", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2486554fecbaf3a55163a45fc23b23a678bab0f666b52eb4ea1160c16f7ef70b" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a02486554fecbaf3a55163a45fc23b23a678bab0f666b52eb4ea1160c16f7ef70ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01e90f0e14f08d81c123ce0e1f58c632fee0c4a0de48714a1d672d53c3e36dc6fa04a5f5ac88c44cc483c0a53d67aff55e3a5eeeeaccf764e32578311b26e05274ca017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307d06080c001a067bc22b55f79199a6482f7de3795032f82560f16e3f9b8595e919b24403e2713a06fc29d54e9434af6d9dafac4726ae41d82a1f948471c9b852bbae9fd1d6f640db8e403f8e10180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0e9202293222035bf0a694f186eb0a83174fa6fd855271aa3cefeb6709bbeaa59a003cff83b22e58284600919c1fb477b7fc00b569ad447224b7a1238dc023077b2c0c0", + "blockHeader": { + "parentHash": "0x2486554fecbaf3a55163a45fc23b23a678bab0f666b52eb4ea1160c16f7ef70b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1e90f0e14f08d81c123ce0e1f58c632fee0c4a0de48714a1d672d53c3e36dc6f", + "transactionsTrie": "0x4a5f5ac88c44cc483c0a53d67aff55e3a5eeeeaccf764e32578311b26e05274c", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb92682038c34d0504f99eabd6396f19ac136325d76d3ba9fc73924f5a4936eb0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07d060", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x67bc22b55f79199a6482f7de3795032f82560f16e3f9b8595e919b24403e2713", + "s": "0x6fc29d54e9434af6d9dafac4726ae41d82a1f948471c9b852bbae9fd1d6f640d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xe9202293222035bf0a694f186eb0a83174fa6fd855271aa3cefeb6709bbeaa59", + "s": "0x03cff83b22e58284600919c1fb477b7fc00b569ad447224b7a1238dc023077b2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb92682038c34d0504f99eabd6396f19ac136325d76d3ba9fc73924f5a4936eb0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27db80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04e2239d756678fc3f85d469b9c87a3b4cdf6e4c606704373285443d5cfe757aca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4e2239d756678fc3f85d469b9c87a3b4cdf6e4c606704373285443d5cfe757ac", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x222f298c435388afedf5b43477b7111f2452f06784a517fd17d24c01961d6a76" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0222f298c435388afedf5b43477b7111f2452f06784a517fd17d24c01961d6a76a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0983a21c00670df0a3275d1b8dc3607d803486d3030d2684d31f56a6e69114816a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043ea980c080a0d02c90c3776020614b9ac15e5dc0d3dddab6bc4e73e0065a6fc3bb4f8ce4d7dba025df3de70fb80963de8785e97e4c75bb52773205fc77b97cc8e9b3b530e39893b88803f885018080078252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0b01f56f1e1898724dfa7cb0789b942a51ba6e1d9796902154700af71b971b6faa02dea0b88945bb4a8596cd6bf5ff0988fd622f0bf168c0b8d573a0a61943ea8d3c0c0", + "blockHeader": { + "parentHash": "0x222f298c435388afedf5b43477b7111f2452f06784a517fd17d24c01961d6a76", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0x983a21c00670df0a3275d1b8dc3607d803486d3030d2684d31f56a6e69114816", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4a6a418309de756525555556d6fcd648fcf1349589422c3689946e1376d697d0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043ea9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xd02c90c3776020614b9ac15e5dc0d3dddab6bc4e73e0065a6fc3bb4f8ce4d7db", + "s": "0x25df3de70fb80963de8785e97e4c75bb52773205fc77b97cc8e9b3b530e39893", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb01f56f1e1898724dfa7cb0789b942a51ba6e1d9796902154700af71b971b6fa", + "s": "0x2dea0b88945bb4a8596cd6bf5ff0988fd622f0bf168c0b8d573a0a61943ea8d3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4a6a418309de756525555556d6fcd648fcf1349589422c3689946e1376d697d0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x2449c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bb6ef89c1e5a9c3e485b5a8888c1b13b664e84d5639aef74e9427779254cfc73a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbb6ef89c1e5a9c3e485b5a8888c1b13b664e84d5639aef74e9427779254cfc73", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf509b4dde9b6ba4ac96febea5aff261630452df14ea83fb04066f8604f2e2ee6" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0f509b4dde9b6ba4ac96febea5aff261630452df14ea83fb04066f8604f2e2ee6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea00f75dec6318658cad0f731de13fb0f9de777b1136353c92f02bc60fb3e80331ca017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e83180c001a0c6b5777d7e07bff231b2b5bca25219efb363151d5d0fe28bfd31ffd3f9c4f51da0362d9cabb4f684389ca5b5899609e96043b6d85727d291f4b0cdbda633b55ac4b8e403f8e101808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a0448dd4c17134ea6b07ebd473727933c3ab787ae67ef7a4100cbf02313e2fee8ea0677314cb1f2a532287dffe8ddb536c35498309cb047f8a3b22518935e25d74bcc0c0", + "blockHeader": { + "parentHash": "0xf509b4dde9b6ba4ac96febea5aff261630452df14ea83fb04066f8604f2e2ee6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0x0f75dec6318658cad0f731de13fb0f9de777b1136353c92f02bc60fb3e80331c", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbeba3fa25fec3d0f578f8d4348b09238f4910d3511de16a03d23d15c734351cf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e831", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xc6b5777d7e07bff231b2b5bca25219efb363151d5d0fe28bfd31ffd3f9c4f51d", + "s": "0x362d9cabb4f684389ca5b5899609e96043b6d85727d291f4b0cdbda633b55ac4", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x448dd4c17134ea6b07ebd473727933c3ab787ae67ef7a4100cbf02313e2fee8e", + "s": "0x677314cb1f2a532287dffe8ddb536c35498309cb047f8a3b22518935e25d74bc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xbeba3fa25fec3d0f578f8d4348b09238f4910d3511de16a03d23d15c734351cf", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f351", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d5de3a1179671080fde8e3a6b0ea28c2a1a59b89feb7e1ea91bfba140a02f988a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd5de3a1179671080fde8e3a6b0ea28c2a1a59b89feb7e1ea91bfba140a02f988", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9910dc47a8693b7a5195b57be6bbcbb5a0c412c2286b22d455b3116fc73e5aeb" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a09910dc47a8693b7a5195b57be6bbcbb5a0c412c2286b22d455b3116fc73e5aeba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f8f0373b329c63939538ae038576d3ded2f16600e996d1e848820de58f98436aa0c0dcd425a92c56a5156eae49c9cb6b98104597f0eb4e41e420a2e3f3ca6bf9ada050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067d5180c080a0028c80d1f20308cf6806911c1fa3f5643a644566111b58962b590a2d16848ff3a0601194d8676027b3d25b81a8ad071e0a8ba1f4b6886940bd1d25dd1135cf234ab88803f8850180800e8252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a02c12caf79d3355fb88a6a472f840c4e91b73cca538b6fceffa906a455320360da0211efcc9d956ad01eb918c4b9e349e4b3a62d3e526b06a6f540a7ed7713d9ca2c0c0", + "blockHeader": { + "parentHash": "0x9910dc47a8693b7a5195b57be6bbcbb5a0c412c2286b22d455b3116fc73e5aeb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf8f0373b329c63939538ae038576d3ded2f16600e996d1e848820de58f98436a", + "transactionsTrie": "0xc0dcd425a92c56a5156eae49c9cb6b98104597f0eb4e41e420a2e3f3ca6bf9ad", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x208e85fa3d893a586f100f4746e1cfde3dbd0260461438996765997d1cb89075" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067d51", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x028c80d1f20308cf6806911c1fa3f5643a644566111b58962b590a2d16848ff3", + "s": "0x601194d8676027b3d25b81a8ad071e0a8ba1f4b6886940bd1d25dd1135cf234a", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2c12caf79d3355fb88a6a472f840c4e91b73cca538b6fceffa906a455320360d", + "s": "0x211efcc9d956ad01eb918c4b9e349e4b3a62d3e526b06a6f540a7ed7713d9ca2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x208e85fa3d893a586f100f4746e1cfde3dbd0260461438996765997d1cb89075", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x268871", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0873eb6ced9c061fc48e7beab481e83bdc60b95cc9aca119d6f378b371e754f63a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x873eb6ced9c061fc48e7beab481e83bdc60b95cc9aca119d6f378b371e754f63", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0153d49e21c2a65c647c761ded7e0ff41c1a1fb8deb1c704884c2d2ae67b90ee" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a00153d49e21c2a65c647c761ded7e0ff41c1a1fb8deb1c704884c2d2ae67b90eea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa036e4334d31bb42aabd4095e0dea9907c48621396847ddfaec84d2eff82b472a9a0dc6240e53696235959a8512d799fbf9c15f6683d7c27257d14313839e93611a8a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307d06180c080a0065ebe73db32edbd93474dc5eb1b7a07e28e0d06297fbe8a71000c41c6e8eac5a046e50771a2b0dd3209f5ee2220cb02809829dc274ab83a79da4e6148015be0a8b8e403f8e10180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a07b814c734cdeb02ea9dca38861281c3d4892ab7c4c19a7f50c000ae06d4a9f65a01b8329c18f3d19662c8b043c3fac86051e549fe77b121d22611f72c131fef29dc0c0", + "blockHeader": { + "parentHash": "0x0153d49e21c2a65c647c761ded7e0ff41c1a1fb8deb1c704884c2d2ae67b90ee", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x36e4334d31bb42aabd4095e0dea9907c48621396847ddfaec84d2eff82b472a9", + "transactionsTrie": "0xdc6240e53696235959a8512d799fbf9c15f6683d7c27257d14313839e93611a8", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xff0c5df6239fbd2207dbe6e037d6f013764789fe6d29838ccf8bccb62c9a189b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07d061", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x065ebe73db32edbd93474dc5eb1b7a07e28e0d06297fbe8a71000c41c6e8eac5", + "s": "0x46e50771a2b0dd3209f5ee2220cb02809829dc274ab83a79da4e6148015be0a8", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x7b814c734cdeb02ea9dca38861281c3d4892ab7c4c19a7f50c000ae06d4a9f65", + "s": "0x1b8329c18f3d19662c8b043c3fac86051e549fe77b121d22611f72c131fef29d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xff0c5df6239fbd2207dbe6e037d6f013764789fe6d29838ccf8bccb62c9a189b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27db81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x02e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04e2239d756678fc3f85d469b9c87a3b4cdf6e4c606704373285443d5cfe757aca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4e2239d756678fc3f85d469b9c87a3b4cdf6e4c606704373285443d5cfe757ac", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x222f298c435388afedf5b43477b7111f2452f06784a517fd17d24c01961d6a76" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0222f298c435388afedf5b43477b7111f2452f06784a517fd17d24c01961d6a76a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0c1e4f61a38812642e26a6bed0a1de4e43a9af05b93a67a793bc39f54e7ada686a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83043ea980c080a0d02c90c3776020614b9ac15e5dc0d3dddab6bc4e73e0065a6fc3bb4f8ce4d7dba025df3de70fb80963de8785e97e4c75bb52773205fc77b97cc8e9b3b530e39893b88803f885018007078252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a00e7856ce7b9836be2691e2ee80916d09b1b754f8380a01f35e63584e3f4d3cd4a00b307d3f2567da733ec7e84fbb4119b7d89f93c055c4dca90864c40d4d0be1ddc0c0", + "blockHeader": { + "parentHash": "0x222f298c435388afedf5b43477b7111f2452f06784a517fd17d24c01961d6a76", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0xc1e4f61a38812642e26a6bed0a1de4e43a9af05b93a67a793bc39f54e7ada686", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf966d25e3138144648ef40dd95e1e0366b707024bb1de8e83bb7fabf335c167c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x043ea9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xd02c90c3776020614b9ac15e5dc0d3dddab6bc4e73e0065a6fc3bb4f8ce4d7db", + "s": "0x25df3de70fb80963de8785e97e4c75bb52773205fc77b97cc8e9b3b530e39893", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x0e7856ce7b9836be2691e2ee80916d09b1b754f8380a01f35e63584e3f4d3cd4", + "s": "0x0b307d3f2567da733ec7e84fbb4119b7d89f93c055c4dca90864c40d4d0be1dd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf966d25e3138144648ef40dd95e1e0366b707024bb1de8e83bb7fabf335c167c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x2449c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bb6ef89c1e5a9c3e485b5a8888c1b13b664e84d5639aef74e9427779254cfc73a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbb6ef89c1e5a9c3e485b5a8888c1b13b664e84d5639aef74e9427779254cfc73", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf509b4dde9b6ba4ac96febea5aff261630452df14ea83fb04066f8604f2e2ee6" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0f509b4dde9b6ba4ac96febea5aff261630452df14ea83fb04066f8604f2e2ee6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290ea0c93cd79cec9b9722ddea0daa0e6b0a9efed6e927687bd7b8bd8fb1d4b64efac1a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8304e83180c001a0c6b5777d7e07bff231b2b5bca25219efb363151d5d0fe28bfd31ffd3f9c4f51da0362d9cabb4f684389ca5b5899609e96043b6d85727d291f4b0cdbda633b55ac4b8e403f8e101800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000080a0afd159cdd72c3d5cab0f0cabad1fccb52b255432d1bb7468ce3438612cff22cda0185b0c271de20c2424d4946487dfe17d470500e96a735fa27b4300645dc34100c0c0", + "blockHeader": { + "parentHash": "0xf509b4dde9b6ba4ac96febea5aff261630452df14ea83fb04066f8604f2e2ee6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c2aa4a529ed949b8169c628293800ee9a7d3f680ff2ef00d4b963d6fc55290e", + "transactionsTrie": "0xc93cd79cec9b9722ddea0daa0e6b0a9efed6e927687bd7b8bd8fb1d4b64efac1", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf84b5fd69912f2c05937eabb98c467c02b853919688202fb926451b057b3e664" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x04e831", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xc6b5777d7e07bff231b2b5bca25219efb363151d5d0fe28bfd31ffd3f9c4f51d", + "s": "0x362d9cabb4f684389ca5b5899609e96043b6d85727d291f4b0cdbda633b55ac4", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xafd159cdd72c3d5cab0f0cabad1fccb52b255432d1bb7468ce3438612cff22cd", + "s": "0x185b0c271de20c2424d4946487dfe17d470500e96a735fa27b4300645dc34100", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf84b5fd69912f2c05937eabb98c467c02b853919688202fb926451b057b3e664", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x24f351", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d5de3a1179671080fde8e3a6b0ea28c2a1a59b89feb7e1ea91bfba140a02f988a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd5de3a1179671080fde8e3a6b0ea28c2a1a59b89feb7e1ea91bfba140a02f988", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9910dc47a8693b7a5195b57be6bbcbb5a0c412c2286b22d455b3116fc73e5aeb" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a09910dc47a8693b7a5195b57be6bbcbb5a0c412c2286b22d455b3116fc73e5aeba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03786e831ac706092337274d645ebd0de88d24e7be68945ad636ec19dc7fae7a3a097487847299d26b59b0831e9c866dd24a6b670fa217b2dd21838974c02a5baaca050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83067d5180c080a0028c80d1f20308cf6806911c1fa3f5643a644566111b58962b590a2d16848ff3a0601194d8676027b3d25b81a8ad071e0a8ba1f4b6886940bd1d25dd1135cf234ab88803f8850180070e8252189400000000000000000000000000000000000001000101c001e1a0010000000000000000000000000000000000000000000000000000000000000001a0b7cf2a484cda9047bd6accaec20003654afd889045215c16a33d29ee4488804fa0414bdc6e028bf0cf8622b64f4794a3af9fa6502615f282d3d9be620c063425c7c0c0", + "blockHeader": { + "parentHash": "0x9910dc47a8693b7a5195b57be6bbcbb5a0c412c2286b22d455b3116fc73e5aeb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3786e831ac706092337274d645ebd0de88d24e7be68945ad636ec19dc7fae7a3", + "transactionsTrie": "0x97487847299d26b59b0831e9c866dd24a6b670fa217b2dd21838974c02a5baac", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5a0dc5b5079be8dd92d481bb7568c1631b3bb5f1c487142c921f4dbf448a6a90" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x067d51", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x028c80d1f20308cf6806911c1fa3f5643a644566111b58962b590a2d16848ff3", + "s": "0x601194d8676027b3d25b81a8ad071e0a8ba1f4b6886940bd1d25dd1135cf234a", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb7cf2a484cda9047bd6accaec20003654afd889045215c16a33d29ee4488804f", + "s": "0x414bdc6e028bf0cf8622b64f4794a3af9fa6502615f282d3d9be620c063425c7", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5a0dc5b5079be8dd92d481bb7568c1631b3bb5f1c487142c921f4dbf448a6a90", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x268871", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_1-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0873eb6ced9c061fc48e7beab481e83bdc60b95cc9aca119d6f378b371e754f63a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x873eb6ced9c061fc48e7beab481e83bdc60b95cc9aca119d6f378b371e754f63", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0153d49e21c2a65c647c761ded7e0ff41c1a1fb8deb1c704884c2d2ae67b90ee" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a00153d49e21c2a65c647c761ded7e0ff41c1a1fb8deb1c704884c2d2ae67b90eea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b6d8505f69cb8aa8b76b3227f8e74a14ee2893cafcf158a11e2ecd4c5fd70f63a069fc9ef0d6e97958a47e95335e1b5b9d485eae11f8434316ae46c28f729c2b11a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b8307d06180c080a0065ebe73db32edbd93474dc5eb1b7a07e28e0d06297fbe8a71000c41c6e8eac5a046e50771a2b0dd3209f5ee2220cb02809829dc274ab83a79da4e6148015be0a8b8e403f8e10180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c801e1a0010000000000000000000000000000000000000000000000000000000000000001a08eeb850c1f410e18c038aad484835819c3064b1aa268c827e347a10f02ff5171a007a3b0c34d541a65124f060e4c7447ad8ea156c50748d8c5ac9b5b279a26bf12c0c0", + "blockHeader": { + "parentHash": "0x0153d49e21c2a65c647c761ded7e0ff41c1a1fb8deb1c704884c2d2ae67b90ee", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb6d8505f69cb8aa8b76b3227f8e74a14ee2893cafcf158a11e2ecd4c5fd70f63", + "transactionsTrie": "0x69fc9ef0d6e97958a47e95335e1b5b9d485eae11f8434316ae46c28f729c2b11", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf6b98ffbeac654b960155d4dedf5387210d667d19325128bfe0731056f708ebb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x07d061", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x065ebe73db32edbd93474dc5eb1b7a07e28e0d06297fbe8a71000c41c6e8eac5", + "s": "0x46e50771a2b0dd3209f5ee2220cb02809829dc274ab83a79da4e6148015be0a8", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x01", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8eeb850c1f410e18c038aad484835819c3064b1aa268c827e347a10f02ff5171", + "s": "0x07a3b0c34d541a65124f060e4c7447ad8ea156c50748d8c5ac9b5b279a26bf12", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf6b98ffbeac654b960155d4dedf5387210d667d19325128bfe0731056f708ebb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x27db81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a015c5c6a462dfcd5a72eadd40802b6f4515d9e94e79b727a20b1d01d13fca1a26a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x15c5c6a462dfcd5a72eadd40802b6f4515d9e94e79b727a20b1d01d13fca1a26", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3297cb28f33f0c7c9909ad62ee7db719100b17455e6384b9967c0d459a7bff42" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a03297cb28f33f0c7c9909ad62ee7db719100b17455e6384b9967c0d459a7bff42a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa050722a19321c71527f6b667dbe9e74d6306eea88da7081489601c2949713b164a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3e3880c001a01db0e04435372af4b2a1b56811ee240babd65c475d01ec7e182b3548ccd10a01a07ce0930b2acdb31b21d3e9f1f5345038bf07f98bc79ce532acd765808452f51fb88803f885018080078252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0eb774461949962772ab55a732e712f293d26cc96498a878827d3e91e01bf2eada073a202c92b1c8fdfac1f03da02a3d19967264fb6717ca155c15938c519740dfdc0c0", + "blockHeader": { + "parentHash": "0x3297cb28f33f0c7c9909ad62ee7db719100b17455e6384b9967c0d459a7bff42", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x50722a19321c71527f6b667dbe9e74d6306eea88da7081489601c2949713b164", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xad3084aaf85f73fd3ba2490afbf39edf20aa623488037dd428a9d9c43d62154e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3e38", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x1db0e04435372af4b2a1b56811ee240babd65c475d01ec7e182b3548ccd10a01", + "s": "0x7ce0930b2acdb31b21d3e9f1f5345038bf07f98bc79ce532acd765808452f51f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xeb774461949962772ab55a732e712f293d26cc96498a878827d3e91e01bf2ead", + "s": "0x73a202c92b1c8fdfac1f03da02a3d19967264fb6717ca155c15938c519740dfd", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xad3084aaf85f73fd3ba2490afbf39edf20aa623488037dd428a9d9c43d62154e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea4958", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03eee9ab7ad8241b277b8c21de1728e776d35da4172a7bf73cc7d80acc901a35fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3eee9ab7ad8241b277b8c21de1728e776d35da4172a7bf73cc7d80acc901a35f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6a9678f1e994b1f896692171ca9f2e718acec5bbe12e76176b2606d85e160214" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a06a9678f1e994b1f896692171ca9f2e718acec5bbe12e76176b2606d85e160214a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa0d5fe6b9a3a0f43ac5ebc998d2fd90f9062c16f10aca6c40d4a6ecf3f10aed4a2a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae7c080c001a0d970b3162988c0fd48447f0b3ca5c8da6d8f653a4a9818acf5b4e8d31e0805a2a008df00b77eca61266c1d43d45db4997626b615cc1dcb1ca86f02ecc1691705adb8e403f8e101808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0c2358cb1a2f2a342bd161f523204efc561d732d3be06eaffbd0ce75d7a5a7175a07d09a1de839183319c1cea3eddf926dda2d294e0b5ead26aaa9977648831f74bc0c0", + "blockHeader": { + "parentHash": "0x6a9678f1e994b1f896692171ca9f2e718acec5bbe12e76176b2606d85e160214", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0xd5fe6b9a3a0f43ac5ebc998d2fd90f9062c16f10aca6c40d4a6ecf3f10aed4a2", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4c6e02b758d961a489a43784ecfeaf4c43df01c7d2a4649a0fee7a65bb22a3e1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae7c0", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xd970b3162988c0fd48447f0b3ca5c8da6d8f653a4a9818acf5b4e8d31e0805a2", + "s": "0x08df00b77eca61266c1d43d45db4997626b615cc1dcb1ca86f02ecc1691705ad", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xc2358cb1a2f2a342bd161f523204efc561d732d3be06eaffbd0ce75d7a5a7175", + "s": "0x7d09a1de839183319c1cea3eddf926dda2d294e0b5ead26aaa9977648831f74b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4c6e02b758d961a489a43784ecfeaf4c43df01c7d2a4649a0fee7a65bb22a3e1", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf2e0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093a82aed83eb2a88ef668f6523d801754ed2f69eba98339eb455b89b47049aa0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93a82aed83eb2a88ef668f6523d801754ed2f69eba98339eb455b89b47049aa0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd7d24ef82f2e7dbc91cbb2bb8ff9ba99600199dcb96926a7103f530507dc2ac6" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0d7d24ef82f2e7dbc91cbb2bb8ff9ba99600199dcb96926a7103f530507dc2ac6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fbeb748b432b107fe480a899fb627fcf22413140ab07273e7eca5fd67cba47efa0b043c23df5c35668968fe489e9cf56ac4e7dd840093dc4f1db9e9f5f9b6ee0daa0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7c7080c001a08b90f9c555e1505dafbef910c70a20e0e32fff20799f74e0af04000bf1eeef41a061761488089516beb2677aa44117b13322bbce4dc18f22098e3218f9ca33504db88803f8850180800e8252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08ba6f542f1676b68adc5ef41b504c996e42007d6a00a881075865eb335756865a0075214863791f422c6fb9741014c5443663864a8a8dd1d865c4ebfc1808145b9c0c0", + "blockHeader": { + "parentHash": "0xd7d24ef82f2e7dbc91cbb2bb8ff9ba99600199dcb96926a7103f530507dc2ac6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfbeb748b432b107fe480a899fb627fcf22413140ab07273e7eca5fd67cba47ef", + "transactionsTrie": "0xb043c23df5c35668968fe489e9cf56ac4e7dd840093dc4f1db9e9f5f9b6ee0da", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7a8b80db93faa1e26b397e4a371a8ab7bc2a38ccdb24d54ade044640bc3b4cd7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7c70", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x8b90f9c555e1505dafbef910c70a20e0e32fff20799f74e0af04000bf1eeef41", + "s": "0x61761488089516beb2677aa44117b13322bbce4dc18f22098e3218f9ca33504d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8ba6f542f1676b68adc5ef41b504c996e42007d6a00a881075865eb335756865", + "s": "0x075214863791f422c6fb9741014c5443663864a8a8dd1d865c4ebfc1808145b9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7a8b80db93faa1e26b397e4a371a8ab7bc2a38ccdb24d54ade044640bc3b4cd7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec8790", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0099a67f9e86461440c379be8e85785a7fec1270148f824a32cfa3d8c230680f3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x099a67f9e86461440c379be8e85785a7fec1270148f824a32cfa3d8c230680f3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xedb54997367a373c44a2f3840f12812c86f8cf457da041270a9df23509b40b39" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0edb54997367a373c44a2f3840f12812c86f8cf457da041270a9df23509b40b39a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06832f6e86c9c4d668a9fee0f73e69591f51c42739fead085daa5bb41f6a901e7a0e9cc6a8fb4d4ea1e93abc66c8cce41e2114654580e9214958b87e084694a51b2a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdcf8080c001a0cf49ad4772a2f478d428bf202f85919cf32adf0f8df5c0e8c7bda4bbde05f9bba00bf1d8fd29438e1b0a7a7bd0a0809ed9dc5498abbc8bdad1250fc820001f4928b8e403f8e10180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0f49a9441da353856259d2488a5c07a912100949ab5fc47ea10c8f57233d8cc2aa02ce5b92613cfe1c0880699a043a5f645989a031ed1a8fa8db5efed11cac8edc2c0c0", + "blockHeader": { + "parentHash": "0xedb54997367a373c44a2f3840f12812c86f8cf457da041270a9df23509b40b39", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6832f6e86c9c4d668a9fee0f73e69591f51c42739fead085daa5bb41f6a901e7", + "transactionsTrie": "0xe9cc6a8fb4d4ea1e93abc66c8cce41e2114654580e9214958b87e084694a51b2", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x07e492b9a0ba21ef1ec1ea3eb3b0c48aca2cac53147b523d3282a005b79df7a0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdcf80", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xcf49ad4772a2f478d428bf202f85919cf32adf0f8df5c0e8c7bda4bbde05f9bb", + "s": "0x0bf1d8fd29438e1b0a7a7bd0a0809ed9dc5498abbc8bdad1250fc820001f4928", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xf49a9441da353856259d2488a5c07a912100949ab5fc47ea10c8f57233d8cc2a", + "s": "0x2ce5b92613cfe1c0880699a043a5f645989a031ed1a8fa8db5efed11cac8edc2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x07e492b9a0ba21ef1ec1ea3eb3b0c48aca2cac53147b523d3282a005b79df7a0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddaa0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a015c5c6a462dfcd5a72eadd40802b6f4515d9e94e79b727a20b1d01d13fca1a26a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x15c5c6a462dfcd5a72eadd40802b6f4515d9e94e79b727a20b1d01d13fca1a26", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3297cb28f33f0c7c9909ad62ee7db719100b17455e6384b9967c0d459a7bff42" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a03297cb28f33f0c7c9909ad62ee7db719100b17455e6384b9967c0d459a7bff42a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa0925ba929716c7bbf60e815734bb6043deadb92cd54bf0c266969634179343298a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3e3880c001a01db0e04435372af4b2a1b56811ee240babd65c475d01ec7e182b3548ccd10a01a07ce0930b2acdb31b21d3e9f1f5345038bf07f98bc79ce532acd765808452f51fb88803f885018007078252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0b8c2e70ef8f2dc74b3085be9feb0d9f72f133ba48e2b7625d3af9ce869ed4439a0035af6f362212df8a6f58a794e9eb107f7714e873e4785f529c070f0ae6200e9c0c0", + "blockHeader": { + "parentHash": "0x3297cb28f33f0c7c9909ad62ee7db719100b17455e6384b9967c0d459a7bff42", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x925ba929716c7bbf60e815734bb6043deadb92cd54bf0c266969634179343298", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x01c6e301aa22b9f1c3d424c13dd63c8e910d7120ffc30ae12d0e57a016de0777" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3e38", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x1db0e04435372af4b2a1b56811ee240babd65c475d01ec7e182b3548ccd10a01", + "s": "0x7ce0930b2acdb31b21d3e9f1f5345038bf07f98bc79ce532acd765808452f51f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xb8c2e70ef8f2dc74b3085be9feb0d9f72f133ba48e2b7625d3af9ce869ed4439", + "s": "0x035af6f362212df8a6f58a794e9eb107f7714e873e4785f529c070f0ae6200e9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x01c6e301aa22b9f1c3d424c13dd63c8e910d7120ffc30ae12d0e57a016de0777", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea4958", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03eee9ab7ad8241b277b8c21de1728e776d35da4172a7bf73cc7d80acc901a35fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3eee9ab7ad8241b277b8c21de1728e776d35da4172a7bf73cc7d80acc901a35f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6a9678f1e994b1f896692171ca9f2e718acec5bbe12e76176b2606d85e160214" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a06a9678f1e994b1f896692171ca9f2e718acec5bbe12e76176b2606d85e160214a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa0bc57bad86711d9607838ae7e6fb729759ba2499c135bbab44759b849201009cba0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae7c080c001a0d970b3162988c0fd48447f0b3ca5c8da6d8f653a4a9818acf5b4e8d31e0805a2a008df00b77eca61266c1d43d45db4997626b615cc1dcb1ca86f02ecc1691705adb8e403f8e101800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a06f4b92f8a908a8ec81bfa8e88b6f0282186c5c032fe8cb96dc593f571f6a638da02a51b6ee50b932c7c7e17f2c79233578cbf019e2c91804d3b595123edcf0237cc0c0", + "blockHeader": { + "parentHash": "0x6a9678f1e994b1f896692171ca9f2e718acec5bbe12e76176b2606d85e160214", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0xbc57bad86711d9607838ae7e6fb729759ba2499c135bbab44759b849201009cb", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd8b881076033a62cebb07960e0c03910e0ad5871ec77012a164e0c2f031b55bf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae7c0", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xd970b3162988c0fd48447f0b3ca5c8da6d8f653a4a9818acf5b4e8d31e0805a2", + "s": "0x08df00b77eca61266c1d43d45db4997626b615cc1dcb1ca86f02ecc1691705ad", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6f4b92f8a908a8ec81bfa8e88b6f0282186c5c032fe8cb96dc593f571f6a638d", + "s": "0x2a51b6ee50b932c7c7e17f2c79233578cbf019e2c91804d3b595123edcf0237c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd8b881076033a62cebb07960e0c03910e0ad5871ec77012a164e0c2f031b55bf", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf2e0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093a82aed83eb2a88ef668f6523d801754ed2f69eba98339eb455b89b47049aa0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93a82aed83eb2a88ef668f6523d801754ed2f69eba98339eb455b89b47049aa0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd7d24ef82f2e7dbc91cbb2bb8ff9ba99600199dcb96926a7103f530507dc2ac6" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0d7d24ef82f2e7dbc91cbb2bb8ff9ba99600199dcb96926a7103f530507dc2ac6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0da7f82f3afa4b33bdadb32ade61d47788be78e3404c5ffbf1ce5f90e28b722baa0356c5922d8ed131c93df743974408064fac9a99760e2d9d6fadf48310df31e5fa0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7c7080c001a08b90f9c555e1505dafbef910c70a20e0e32fff20799f74e0af04000bf1eeef41a061761488089516beb2677aa44117b13322bbce4dc18f22098e3218f9ca33504db88803f8850180070e8252089400000000000000000000000000000000000001008080c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08cdc7c6b37e24642a06d3ebe0f648cb053ea5f426e1813a3268b4f4f9697c446a005e3c4508632cb383fe4ac0e12ac0dbe41668fdb5e709629e03729df17d1ad13c0c0", + "blockHeader": { + "parentHash": "0xd7d24ef82f2e7dbc91cbb2bb8ff9ba99600199dcb96926a7103f530507dc2ac6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xda7f82f3afa4b33bdadb32ade61d47788be78e3404c5ffbf1ce5f90e28b722ba", + "transactionsTrie": "0x356c5922d8ed131c93df743974408064fac9a99760e2d9d6fadf48310df31e5f", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb42097ae92e73ec89880af4a66754359fcc6103e5520d25f9f135e5458be2e7f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7c70", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x8b90f9c555e1505dafbef910c70a20e0e32fff20799f74e0af04000bf1eeef41", + "s": "0x61761488089516beb2677aa44117b13322bbce4dc18f22098e3218f9ca33504d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8cdc7c6b37e24642a06d3ebe0f648cb053ea5f426e1813a3268b4f4f9697c446", + "s": "0x05e3c4508632cb383fe4ac0e12ac0dbe41668fdb5e709629e03729df17d1ad13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb42097ae92e73ec89880af4a66754359fcc6103e5520d25f9f135e5458be2e7f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec8790", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0099a67f9e86461440c379be8e85785a7fec1270148f824a32cfa3d8c230680f3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x099a67f9e86461440c379be8e85785a7fec1270148f824a32cfa3d8c230680f3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xedb54997367a373c44a2f3840f12812c86f8cf457da041270a9df23509b40b39" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0edb54997367a373c44a2f3840f12812c86f8cf457da041270a9df23509b40b39a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0803ca9ad8701345fde5344b54c3c0d1f555b895ebbdf0ebe2697543a8d889ba5a019e7ebfb1b2e09e430c204aa6f63529279a1bcdab7cf87273b8c25ac7adc73faa0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdcf8080c001a0cf49ad4772a2f478d428bf202f85919cf32adf0f8df5c0e8c7bda4bbde05f9bba00bf1d8fd29438e1b0a7a7bd0a0809ed9dc5498abbc8bdad1250fc820001f4928b8e403f8e10180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a02796e6c689e3a5155ebb4d9c6e8e9cda94530ac15684fad4081a99c4230ee241a065c7f05c9d31739ce0ac941744d23b22f935d9adfcb722b9c5827292f7fc8441c0c0", + "blockHeader": { + "parentHash": "0xedb54997367a373c44a2f3840f12812c86f8cf457da041270a9df23509b40b39", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x803ca9ad8701345fde5344b54c3c0d1f555b895ebbdf0ebe2697543a8d889ba5", + "transactionsTrie": "0x19e7ebfb1b2e09e430c204aa6f63529279a1bcdab7cf87273b8c25ac7adc73fa", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xded9b67e55ea25a61e58e450a365601e1b3b6adc011488ced33d0ad01f8145bb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdcf80", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xcf49ad4772a2f478d428bf202f85919cf32adf0f8df5c0e8c7bda4bbde05f9bb", + "s": "0x0bf1d8fd29438e1b0a7a7bd0a0809ed9dc5498abbc8bdad1250fc820001f4928", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2796e6c689e3a5155ebb4d9c6e8e9cda94530ac15684fad4081a99c4230ee241", + "s": "0x65c7f05c9d31739ce0ac941744d23b22f935d9adfcb722b9c5827292f7fc8441", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xded9b67e55ea25a61e58e450a365601e1b3b6adc011488ced33d0ad01f8145bb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddaa0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a035140958da167a5a7340c17005c9d4db382df69ee5d07c081149826c45d91370a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x35140958da167a5a7340c17005c9d4db382df69ee5d07c081149826c45d91370", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2cfc9af25a70ae26b80b668753a00f54efbc710b8758e1e4b9c5934376a14fce" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a02cfc9af25a70ae26b80b668753a00f54efbc710b8758e1e4b9c5934376a14fcea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa01578d4e639ec2433caf3cf0f365323327e21dfb599c74ae4d4125954ccdf1813a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3e3980c080a04a9d5c2b59f188657b388c7e0a57cc8789197141510cbc724cc24ae1a6a5869aa046d3be0f48c0e29b98be42fc5c41c61323db5dda723a74dea2f56d50c1932d1bb88803f885018080078252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000001a001f30ee2f0f8963619a153eea6b016e4cc8ec20124a3da4c4a65bb6b07c67400a03e001a6d2dfe1245c55ff1f53bae8bfce2a7dd4ab76a42ccef9186cccce7e6e0c0c0", + "blockHeader": { + "parentHash": "0x2cfc9af25a70ae26b80b668753a00f54efbc710b8758e1e4b9c5934376a14fce", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0x1578d4e639ec2433caf3cf0f365323327e21dfb599c74ae4d4125954ccdf1813", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3ebf3f7701b3ea5a43ce72c10e85f124ae6d1170a9ec99eafe00ae845bf3c7a7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3e39", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x4a9d5c2b59f188657b388c7e0a57cc8789197141510cbc724cc24ae1a6a5869a", + "s": "0x46d3be0f48c0e29b98be42fc5c41c61323db5dda723a74dea2f56d50c1932d1b", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x01f30ee2f0f8963619a153eea6b016e4cc8ec20124a3da4c4a65bb6b07c67400", + "s": "0x3e001a6d2dfe1245c55ff1f53bae8bfce2a7dd4ab76a42ccef9186cccce7e6e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x3ebf3f7701b3ea5a43ce72c10e85f124ae6d1170a9ec99eafe00ae845bf3c7a7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea4959", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ce351f8eae29b4bcddcd591e47f35f5807dc71b8dc53bc612f8ea47e63320f3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6ce351f8eae29b4bcddcd591e47f35f5807dc71b8dc53bc612f8ea47e63320f3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2021454e1c281ea832f166e944c52b016bb3f5066eaf81a37edfddf924507171" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a02021454e1c281ea832f166e944c52b016bb3f5066eaf81a37edfddf924507171a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa03fad20c3edf54764fb9a658b4703d852d6b1fea5a75bb630306606fb4a3f1702a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae7c180c080a0e13cb17a194d71fea50b6c8b67955e0501e32f99dfe84baefcd35dda7c3ad293a0252f777e802c59911d2985435a7e6191b108a76d71350f3e9063dcfc8fd11f6fb8e403f8e101808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0bcaf98f54a364180abb251d2708e63904a58a4583eac4ad86507826164bafe04a01c746c6ff9431578699325848b549174ed36361d8d654f3486e7764674502c52c0c0", + "blockHeader": { + "parentHash": "0x2021454e1c281ea832f166e944c52b016bb3f5066eaf81a37edfddf924507171", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0x3fad20c3edf54764fb9a658b4703d852d6b1fea5a75bb630306606fb4a3f1702", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1dc48bf49f46e70e4972d4c24eae73cc87672d1331b4087a3ae798793e5f6c47" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae7c1", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xe13cb17a194d71fea50b6c8b67955e0501e32f99dfe84baefcd35dda7c3ad293", + "s": "0x252f777e802c59911d2985435a7e6191b108a76d71350f3e9063dcfc8fd11f6f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xbcaf98f54a364180abb251d2708e63904a58a4583eac4ad86507826164bafe04", + "s": "0x1c746c6ff9431578699325848b549174ed36361d8d654f3486e7764674502c52", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1dc48bf49f46e70e4972d4c24eae73cc87672d1331b4087a3ae798793e5f6c47", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf2e1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09dfa510999feca9c989cb608d4af6cb7a55bb66939795fb290f9048d0dcd036aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9dfa510999feca9c989cb608d4af6cb7a55bb66939795fb290f9048d0dcd036a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x81a9587d33c12acdd4f0b4fe0d7097f85f051fe598ad27a0eb1b18cb3ef33664" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a081a9587d33c12acdd4f0b4fe0d7097f85f051fe598ad27a0eb1b18cb3ef33664a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e7cbc598708aa257f0dbbf429c9feb74b0bb28c1fd3988ed7caf43270630518ca05b77bfebca381848fb7aaec9710223cfea78fe980565d2feb42fd57c3c70310ca0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7c7180c001a0d4616927f4d0a73389d754aafb25a9ec2f81c22edcaadbb3068495bc87388ee1a0539af3f055185052ede1290d24fb541ef6583372004374e2627dd66b56aa0fe2b88803f8850180800e8252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000080a03b3e8eed249f07e52534d4b26d52dd8c82bc688511a586b2ea97ec6e574f0c0da0774f47ab66e2c161e7165539a1a62da675d45331de59f6838189e05433dc0c21c0c0", + "blockHeader": { + "parentHash": "0x81a9587d33c12acdd4f0b4fe0d7097f85f051fe598ad27a0eb1b18cb3ef33664", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe7cbc598708aa257f0dbbf429c9feb74b0bb28c1fd3988ed7caf43270630518c", + "transactionsTrie": "0x5b77bfebca381848fb7aaec9710223cfea78fe980565d2feb42fd57c3c70310c", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x336e498f0c74c56b8727aa80aee3971bb5dc2166c58b59b9995a7125d4a475d6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7c71", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xd4616927f4d0a73389d754aafb25a9ec2f81c22edcaadbb3068495bc87388ee1", + "s": "0x539af3f055185052ede1290d24fb541ef6583372004374e2627dd66b56aa0fe2", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x3b3e8eed249f07e52534d4b26d52dd8c82bc688511a586b2ea97ec6e574f0c0d", + "s": "0x774f47ab66e2c161e7165539a1a62da675d45331de59f6838189e05433dc0c21", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x336e498f0c74c56b8727aa80aee3971bb5dc2166c58b59b9995a7125d4a475d6", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec8791", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05a6d722523261d00d5e990e78b01a8d860b62df02ab4bd7be32d2f90ff3a0918a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5a6d722523261d00d5e990e78b01a8d860b62df02ab4bd7be32d2f90ff3a0918", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4ce1d2432252d9c30ef9210d8a3e88aca40a75b6566e47d573d4183ae33b93de" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a04ce1d2432252d9c30ef9210d8a3e88aca40a75b6566e47d573d4183ae33b93dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa065c255edb260ad1ada8e274d38adb1976f949fb3f8c1e0d9be79c7c59db2eeeba0520ae805891c4450d36e137fe598e41e1e86e253e5b5271de2c71ad236f967c5a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdcf8180c001a0a6f2992f4457792cec46d62aece04d05db228d27082f8cf3761707ec32d131f2a0706f0f089e5b2e1cdcda3acdfbc771ed5440f0d6e9662ab67e048bebd281d2e2b8e403f8e10180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a04b01a14db828a1e33daa6b436e93b2ffa9c557dcbe14ccba4f1940f6f7c86d70a035aaf376674378013fc3d82db8df0032ec73fcde34aa3f42bc6058551c35fd92c0c0", + "blockHeader": { + "parentHash": "0x4ce1d2432252d9c30ef9210d8a3e88aca40a75b6566e47d573d4183ae33b93de", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x65c255edb260ad1ada8e274d38adb1976f949fb3f8c1e0d9be79c7c59db2eeeb", + "transactionsTrie": "0x520ae805891c4450d36e137fe598e41e1e86e253e5b5271de2c71ad236f967c5", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2aea713160a5c7db7436d0521207779a51469b961ebdf066466e9f730b773e0c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdcf81", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xa6f2992f4457792cec46d62aece04d05db228d27082f8cf3761707ec32d131f2", + "s": "0x706f0f089e5b2e1cdcda3acdfbc771ed5440f0d6e9662ab67e048bebd281d2e2", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x4b01a14db828a1e33daa6b436e93b2ffa9c557dcbe14ccba4f1940f6f7c86d70", + "s": "0x35aaf376674378013fc3d82db8df0032ec73fcde34aa3f42bc6058551c35fd92", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x2aea713160a5c7db7436d0521207779a51469b961ebdf066466e9f730b773e0c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddaa1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a035140958da167a5a7340c17005c9d4db382df69ee5d07c081149826c45d91370a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x35140958da167a5a7340c17005c9d4db382df69ee5d07c081149826c45d91370", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2cfc9af25a70ae26b80b668753a00f54efbc710b8758e1e4b9c5934376a14fce" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a02cfc9af25a70ae26b80b668753a00f54efbc710b8758e1e4b9c5934376a14fcea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa0bce84b90b8f23b02ce27f340721a0fd37ed8aafdde14f1ba3831535046f27cb5a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3e3980c080a04a9d5c2b59f188657b388c7e0a57cc8789197141510cbc724cc24ae1a6a5869aa046d3be0f48c0e29b98be42fc5c41c61323db5dda723a74dea2f56d50c1932d1bb88803f885018007078252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0382838798d50ec634d9132386dc84be2fdfc55b98cb274887d582667197b820fa04bb10784cbbe4ea1f701b71f24649526ea6c3dec22762580ccdc893c59a64f96c0c0", + "blockHeader": { + "parentHash": "0x2cfc9af25a70ae26b80b668753a00f54efbc710b8758e1e4b9c5934376a14fce", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0xbce84b90b8f23b02ce27f340721a0fd37ed8aafdde14f1ba3831535046f27cb5", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4478533b0131ce2c6593dbc8b375e3f18bf0f31f2936d1fb43d806f540f71445" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3e39", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x4a9d5c2b59f188657b388c7e0a57cc8789197141510cbc724cc24ae1a6a5869a", + "s": "0x46d3be0f48c0e29b98be42fc5c41c61323db5dda723a74dea2f56d50c1932d1b", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x382838798d50ec634d9132386dc84be2fdfc55b98cb274887d582667197b820f", + "s": "0x4bb10784cbbe4ea1f701b71f24649526ea6c3dec22762580ccdc893c59a64f96", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4478533b0131ce2c6593dbc8b375e3f18bf0f31f2936d1fb43d806f540f71445", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea4959", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06ce351f8eae29b4bcddcd591e47f35f5807dc71b8dc53bc612f8ea47e63320f3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6ce351f8eae29b4bcddcd591e47f35f5807dc71b8dc53bc612f8ea47e63320f3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2021454e1c281ea832f166e944c52b016bb3f5066eaf81a37edfddf924507171" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a02021454e1c281ea832f166e944c52b016bb3f5066eaf81a37edfddf924507171a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa054eaaeb2cb732763d68b4d9574ba4fb8866350657019fd204c2338e9c5c23e10a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae7c180c080a0e13cb17a194d71fea50b6c8b67955e0501e32f99dfe84baefcd35dda7c3ad293a0252f777e802c59911d2985435a7e6191b108a76d71350f3e9063dcfc8fd11f6fb8e403f8e101800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a05e4efe42fdda737e193dcdddf01ba87556c2f60d63de82a64479e3c8ea1daf3ea048cdcd875fbb5bb037da373729b9b0ed2401cb8d01d8697215ebd8e7ab63443cc0c0", + "blockHeader": { + "parentHash": "0x2021454e1c281ea832f166e944c52b016bb3f5066eaf81a37edfddf924507171", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0x54eaaeb2cb732763d68b4d9574ba4fb8866350657019fd204c2338e9c5c23e10", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x58716b05fc28c6c06e52a74808a80a6c89deaf10f3bc35b3b4fd8d5dbacdb13d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae7c1", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xe13cb17a194d71fea50b6c8b67955e0501e32f99dfe84baefcd35dda7c3ad293", + "s": "0x252f777e802c59911d2985435a7e6191b108a76d71350f3e9063dcfc8fd11f6f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5e4efe42fdda737e193dcdddf01ba87556c2f60d63de82a64479e3c8ea1daf3e", + "s": "0x48cdcd875fbb5bb037da373729b9b0ed2401cb8d01d8697215ebd8e7ab63443c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x58716b05fc28c6c06e52a74808a80a6c89deaf10f3bc35b3b4fd8d5dbacdb13d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf2e1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09dfa510999feca9c989cb608d4af6cb7a55bb66939795fb290f9048d0dcd036aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9dfa510999feca9c989cb608d4af6cb7a55bb66939795fb290f9048d0dcd036a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x81a9587d33c12acdd4f0b4fe0d7097f85f051fe598ad27a0eb1b18cb3ef33664" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a081a9587d33c12acdd4f0b4fe0d7097f85f051fe598ad27a0eb1b18cb3ef33664a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa026a1e415955f49a9df2221beb77a34491e33383e76f0736ba1b60b44c77e827aa0e9b4e49aad527322ae8be2b269e0090489aff24afef30f187d6dac2e6b02d36aa0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7c7180c001a0d4616927f4d0a73389d754aafb25a9ec2f81c22edcaadbb3068495bc87388ee1a0539af3f055185052ede1290d24fb541ef6583372004374e2627dd66b56aa0fe2b88803f8850180070e8252089400000000000000000000000000000000000001000180c064e1a0010000000000000000000000000000000000000000000000000000000000000080a07fcecce51659e5ce15be00b94d4c9b29ec0eb093daf72a1cbcd6e75dba9bcedca07e66232611215dac3a6129713d912a98ba06c487d543d389953604cd46206cb3c0c0", + "blockHeader": { + "parentHash": "0x81a9587d33c12acdd4f0b4fe0d7097f85f051fe598ad27a0eb1b18cb3ef33664", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x26a1e415955f49a9df2221beb77a34491e33383e76f0736ba1b60b44c77e827a", + "transactionsTrie": "0xe9b4e49aad527322ae8be2b269e0090489aff24afef30f187d6dac2e6b02d36a", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb064a6c8edc90509413482462cea8528ef35e775e1d4d0cf888f9e5dc726ac7c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7c71", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xd4616927f4d0a73389d754aafb25a9ec2f81c22edcaadbb3068495bc87388ee1", + "s": "0x539af3f055185052ede1290d24fb541ef6583372004374e2627dd66b56aa0fe2", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x7fcecce51659e5ce15be00b94d4c9b29ec0eb093daf72a1cbcd6e75dba9bcedc", + "s": "0x7e66232611215dac3a6129713d912a98ba06c487d543d389953604cd46206cb3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb064a6c8edc90509413482462cea8528ef35e775e1d4d0cf888f9e5dc726ac7c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec8791", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05a6d722523261d00d5e990e78b01a8d860b62df02ab4bd7be32d2f90ff3a0918a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5a6d722523261d00d5e990e78b01a8d860b62df02ab4bd7be32d2f90ff3a0918", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4ce1d2432252d9c30ef9210d8a3e88aca40a75b6566e47d573d4183ae33b93de" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a04ce1d2432252d9c30ef9210d8a3e88aca40a75b6566e47d573d4183ae33b93dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0186d3ab9a3bd4637be1edaf4e2e9a76c3a057065463d075075577c9e745f4c99a08485aaf26c9841eb983926052f8996e4475ab55bae160652af42a668bff4f173a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdcf8180c001a0a6f2992f4457792cec46d62aece04d05db228d27082f8cf3761707ec32d131f2a0706f0f089e5b2e1cdcda3acdfbc771ed5440f0d6e9662ab67e048bebd281d2e2b8e403f8e10180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a04cf40bb669536427389d66ea910d0f5251c8dd60826d87d79ca5a618f7bda46ca0637382f93312d45f80f5d2ddcb19ea74751525c4ce2930e1686a52046aef239ac0c0", + "blockHeader": { + "parentHash": "0x4ce1d2432252d9c30ef9210d8a3e88aca40a75b6566e47d573d4183ae33b93de", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x186d3ab9a3bd4637be1edaf4e2e9a76c3a057065463d075075577c9e745f4c99", + "transactionsTrie": "0x8485aaf26c9841eb983926052f8996e4475ab55bae160652af42a668bff4f173", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x335dfa52dc7ff408c5a5319eb06c2c215a6774304edc22a6bc62dccae61c0f5b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdcf81", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xa6f2992f4457792cec46d62aece04d05db228d27082f8cf3761707ec32d131f2", + "s": "0x706f0f089e5b2e1cdcda3acdfbc771ed5440f0d6e9662ab67e048bebd281d2e2", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x4cf40bb669536427389d66ea910d0f5251c8dd60826d87d79ca5a618f7bda46c", + "s": "0x637382f93312d45f80f5d2ddcb19ea74751525c4ce2930e1686a52046aef239a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x335dfa52dc7ff408c5a5319eb06c2c215a6774304edc22a6bc62dccae61c0f5b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddaa1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0094b129de9c3b3fabfd0c49045629ce2140d814a32cde7566748a702ff0709fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x094b129de9c3b3fabfd0c49045629ce2140d814a32cde7566748a702ff0709fc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1835e56a4dfd9a43dd610154fca53a3ca5b542f7d198f6fc0e7e5583b2b42cc5" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a01835e56a4dfd9a43dd610154fca53a3ca5b542f7d198f6fc0e7e5583b2b42cc5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa091ca7a0f15a908cc5d14235a455ac6ae6c0d91f3282cee46dd97f62c8ec3f456a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3e5480c080a02b85c22aa854592acbc78980c9de16573ac5614b254f1a04364af9ea2fe890d9a02f241b991a3970ce7950b734e66056c57114b353b1b9bb72a25eff319bc32014b88803f8850180800782520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000001a083c2b041b9b9dd779a41631029a631350445c55e36a9799f482bbdf228e32362a0687fca1e13d58f07c7583787078e1a39601e3c1ebe667470ad08e6b8be15849ec0c0", + "blockHeader": { + "parentHash": "0x1835e56a4dfd9a43dd610154fca53a3ca5b542f7d198f6fc0e7e5583b2b42cc5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x91ca7a0f15a908cc5d14235a455ac6ae6c0d91f3282cee46dd97f62c8ec3f456", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb1e7807c51be312837bc90054325bb3a0d18035e0328becd239d5ea02a6f653d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3e54", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x2b85c22aa854592acbc78980c9de16573ac5614b254f1a04364af9ea2fe890d9", + "s": "0x2f241b991a3970ce7950b734e66056c57114b353b1b9bb72a25eff319bc32014", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x83c2b041b9b9dd779a41631029a631350445c55e36a9799f482bbdf228e32362", + "s": "0x687fca1e13d58f07c7583787078e1a39601e3c1ebe667470ad08e6b8be15849e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb1e7807c51be312837bc90054325bb3a0d18035e0328becd239d5ea02a6f653d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea4974", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022d9ef67d1196df680d89bfb81e38d7aeec35bd3ad9842842cb48ce34ab3ce49a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22d9ef67d1196df680d89bfb81e38d7aeec35bd3ad9842842cb48ce34ab3ce49", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4232d3e6663575a07d49c9fe19aacaf472b1ce73c4794a81164dacded42d32d8" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a04232d3e6663575a07d49c9fe19aacaf472b1ce73c4794a81164dacded42d32d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa03a76411d7db5e29793e5d0c029d8988d0ada7c9b8d6a0cf78567d973b61205eea06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae7dc80c080a092558b1092a4b54b4b80c5d719be585d93302c961c5571b711845fff4207e7d0a059b32df1a37aac96b1378832a9b93023d0816957e45f8dc1b70274ccb64c7510b8e403f8e101808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0aa391520b3863efbf35018e543971d15537ed93bd8c90a4b31896d6cae149626a025c3aa086a4f3fc3c952933232b8152838bd2ed7fbcd4c293627ea3562cad634c0c0", + "blockHeader": { + "parentHash": "0x4232d3e6663575a07d49c9fe19aacaf472b1ce73c4794a81164dacded42d32d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x3a76411d7db5e29793e5d0c029d8988d0ada7c9b8d6a0cf78567d973b61205ee", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd79c56c5b36c58d0629e8c2660729d79602389b2437b9a596c3fd5b1c7ea5a9c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae7dc", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x92558b1092a4b54b4b80c5d719be585d93302c961c5571b711845fff4207e7d0", + "s": "0x59b32df1a37aac96b1378832a9b93023d0816957e45f8dc1b70274ccb64c7510", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaa391520b3863efbf35018e543971d15537ed93bd8c90a4b31896d6cae149626", + "s": "0x25c3aa086a4f3fc3c952933232b8152838bd2ed7fbcd4c293627ea3562cad634", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd79c56c5b36c58d0629e8c2660729d79602389b2437b9a596c3fd5b1c7ea5a9c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf2fc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a023be0cc1c9e2856a4617c6e83260ff8402ef0a56e537383cd7967c6e0dab8232a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x23be0cc1c9e2856a4617c6e83260ff8402ef0a56e537383cd7967c6e0dab8232", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xac8e7eb1f482ab4e0fd2f05e1bffa327bea6212ab591a2815ab6a20cb37fbe6f" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0ac8e7eb1f482ab4e0fd2f05e1bffa327bea6212ab591a2815ab6a20cb37fbe6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5a9738ba06bed3baa63fb3f6283a305e42a8b700a80c0eb938ebb78f75a2a14a0ead34000d1f06981efd52f0474b9fbafb825b9f62770db0fbfff80688e79788fa05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7ca880c001a07eb7a803aaff87192adb76f215d6c4a0c90669f1a7934f225e5b0961361dd195a00aa9ce1b8ad820c89a39617710806b055112818b0c2288f370a83cf260d130bcb88803f8850180800e82520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000001a078a7313f2fb4d0e30871840a22cbfceabb5f19e7c3b00ddd8a5a9e8affce83bda067ff24573357eff09164d431125cb3bc99ab58b5d1b6bac72d680ffc2b871e33c0c0", + "blockHeader": { + "parentHash": "0xac8e7eb1f482ab4e0fd2f05e1bffa327bea6212ab591a2815ab6a20cb37fbe6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa5a9738ba06bed3baa63fb3f6283a305e42a8b700a80c0eb938ebb78f75a2a14", + "transactionsTrie": "0xead34000d1f06981efd52f0474b9fbafb825b9f62770db0fbfff80688e79788f", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9eb8c9dcda63af998d0886c600047037676760f60a7b894943f3d4a182a9bf2a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7ca8", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x7eb7a803aaff87192adb76f215d6c4a0c90669f1a7934f225e5b0961361dd195", + "s": "0x0aa9ce1b8ad820c89a39617710806b055112818b0c2288f370a83cf260d130bc", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x78a7313f2fb4d0e30871840a22cbfceabb5f19e7c3b00ddd8a5a9e8affce83bd", + "s": "0x67ff24573357eff09164d431125cb3bc99ab58b5d1b6bac72d680ffc2b871e33", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9eb8c9dcda63af998d0886c600047037676760f60a7b894943f3d4a182a9bf2a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec87c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a032cb03ccb287509888659e404d043829555e1043b1d06c37c123474c229015cca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x32cb03ccb287509888659e404d043829555e1043b1d06c37c123474c229015cc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1d3098c4c7bd468bda503609fe04731115ac1742e442dd9791ff52bcd85a1374" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a01d3098c4c7bd468bda503609fe04731115ac1742e442dd9791ff52bcd85a1374a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05e80d40aafb57c83bd34ebf2b62fc79758d96d7b79b8ab2b299344efb8216023a0e297b1c0cd05f3807a109aa794575926caa5005f3d337074f98f1f6859a86fe6a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdcfb880c001a0186f0938a5778b0b4acc2c581a99cd2440ecdef0ffcd9755ffd76b30ec748d35a052b8d65d2d338fbb61850f86b05086c7fdcf9fffec5ce196a0221e6b5e8d0698b8e403f8e10180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0529c31d9ae453f504aca984af7395835e6f0506d31629cb0b004b3a366ac8dbda04f46e9539685099a672c9bcd19405b6a93519a520f56933ea5ac46b934bc5398c0c0", + "blockHeader": { + "parentHash": "0x1d3098c4c7bd468bda503609fe04731115ac1742e442dd9791ff52bcd85a1374", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5e80d40aafb57c83bd34ebf2b62fc79758d96d7b79b8ab2b299344efb8216023", + "transactionsTrie": "0xe297b1c0cd05f3807a109aa794575926caa5005f3d337074f98f1f6859a86fe6", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x26dddd237ccd066884bc7de6aa768bbb0817faab1b1fe0ee82c0ac5f76fd3089" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdcfb8", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x186f0938a5778b0b4acc2c581a99cd2440ecdef0ffcd9755ffd76b30ec748d35", + "s": "0x52b8d65d2d338fbb61850f86b05086c7fdcf9fffec5ce196a0221e6b5e8d0698", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x529c31d9ae453f504aca984af7395835e6f0506d31629cb0b004b3a366ac8dbd", + "s": "0x4f46e9539685099a672c9bcd19405b6a93519a520f56933ea5ac46b934bc5398", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x26dddd237ccd066884bc7de6aa768bbb0817faab1b1fe0ee82c0ac5f76fd3089", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddad8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0094b129de9c3b3fabfd0c49045629ce2140d814a32cde7566748a702ff0709fca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x094b129de9c3b3fabfd0c49045629ce2140d814a32cde7566748a702ff0709fc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1835e56a4dfd9a43dd610154fca53a3ca5b542f7d198f6fc0e7e5583b2b42cc5" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a01835e56a4dfd9a43dd610154fca53a3ca5b542f7d198f6fc0e7e5583b2b42cc5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa00741e03eac781184e16ea05d99a727f936cd8011bc4c86999f4783ec155ecb38a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3e5480c080a02b85c22aa854592acbc78980c9de16573ac5614b254f1a04364af9ea2fe890d9a02f241b991a3970ce7950b734e66056c57114b353b1b9bb72a25eff319bc32014b88803f8850180070782520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000080a096c80b1997004ef6966154ab3eff4744143b5dd8e4ecc86f964b610f5804658ea01f891ce09acd89acaa2ba2366d4e51a4b58b2510e8f029a4474c4a5f6eacacc3c0c0", + "blockHeader": { + "parentHash": "0x1835e56a4dfd9a43dd610154fca53a3ca5b542f7d198f6fc0e7e5583b2b42cc5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x0741e03eac781184e16ea05d99a727f936cd8011bc4c86999f4783ec155ecb38", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd0b3a4d226f39a6415953153d76df6684a91ae0ade1e659878fe1aa9b0f7f415" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3e54", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x2b85c22aa854592acbc78980c9de16573ac5614b254f1a04364af9ea2fe890d9", + "s": "0x2f241b991a3970ce7950b734e66056c57114b353b1b9bb72a25eff319bc32014", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x96c80b1997004ef6966154ab3eff4744143b5dd8e4ecc86f964b610f5804658e", + "s": "0x1f891ce09acd89acaa2ba2366d4e51a4b58b2510e8f029a4474c4a5f6eacacc3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd0b3a4d226f39a6415953153d76df6684a91ae0ade1e659878fe1aa9b0f7f415", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea4974", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022d9ef67d1196df680d89bfb81e38d7aeec35bd3ad9842842cb48ce34ab3ce49a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22d9ef67d1196df680d89bfb81e38d7aeec35bd3ad9842842cb48ce34ab3ce49", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4232d3e6663575a07d49c9fe19aacaf472b1ce73c4794a81164dacded42d32d8" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a04232d3e6663575a07d49c9fe19aacaf472b1ce73c4794a81164dacded42d32d8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa083e5d3e08919dc999929bc4697e280bb3f30aa6f7307ad51458b0562c9451bf1a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae7dc80c080a092558b1092a4b54b4b80c5d719be585d93302c961c5571b711845fff4207e7d0a059b32df1a37aac96b1378832a9b93023d0816957e45f8dc1b70274ccb64c7510b8e403f8e101800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0f937418a264476fa995ee99440e504526bd43a168b7ea6d8d9b9a4cb7d17f356a054d223626823aba0b3549f1a6c82620a4e194c7b289e46dd840f79536055e68dc0c0", + "blockHeader": { + "parentHash": "0x4232d3e6663575a07d49c9fe19aacaf472b1ce73c4794a81164dacded42d32d8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x83e5d3e08919dc999929bc4697e280bb3f30aa6f7307ad51458b0562c9451bf1", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8d3ecef6d8f6d75727a216647f4a6a4d5d2009548d90c117c6fddabcbcb9cabb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae7dc", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x92558b1092a4b54b4b80c5d719be585d93302c961c5571b711845fff4207e7d0", + "s": "0x59b32df1a37aac96b1378832a9b93023d0816957e45f8dc1b70274ccb64c7510", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xf937418a264476fa995ee99440e504526bd43a168b7ea6d8d9b9a4cb7d17f356", + "s": "0x54d223626823aba0b3549f1a6c82620a4e194c7b289e46dd840f79536055e68d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8d3ecef6d8f6d75727a216647f4a6a4d5d2009548d90c117c6fddabcbcb9cabb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf2fc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a023be0cc1c9e2856a4617c6e83260ff8402ef0a56e537383cd7967c6e0dab8232a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x23be0cc1c9e2856a4617c6e83260ff8402ef0a56e537383cd7967c6e0dab8232", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xac8e7eb1f482ab4e0fd2f05e1bffa327bea6212ab591a2815ab6a20cb37fbe6f" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0ac8e7eb1f482ab4e0fd2f05e1bffa327bea6212ab591a2815ab6a20cb37fbe6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa025ae1176148f0ea38cd6aa790c61f366fce300e0da542fe5c28429d14eeb1a50a0eaee46cd45df7a02ce0208d38857a3dfe9732ba67c9c67e364639e440cafcc76a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7ca880c001a07eb7a803aaff87192adb76f215d6c4a0c90669f1a7934f225e5b0961361dd195a00aa9ce1b8ad820c89a39617710806b055112818b0c2288f370a83cf260d130bcb88803f8850180070e82520c9400000000000000000000000000000000000001008000c064e1a0010000000000000000000000000000000000000000000000000000000000000080a02441528b877382681c17d8c5558c74faa471adb4aa39a06190e526f12fb99edca067c088db533184a563e2c29e6c14ef09f4cc9586b3d099eaf06682eb8cc9d5efc0c0", + "blockHeader": { + "parentHash": "0xac8e7eb1f482ab4e0fd2f05e1bffa327bea6212ab591a2815ab6a20cb37fbe6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x25ae1176148f0ea38cd6aa790c61f366fce300e0da542fe5c28429d14eeb1a50", + "transactionsTrie": "0xeaee46cd45df7a02ce0208d38857a3dfe9732ba67c9c67e364639e440cafcc76", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x34eb9235b3c774b99217cfe4bb7dc489ed24de8087c4512c245d803e5084812c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7ca8", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x7eb7a803aaff87192adb76f215d6c4a0c90669f1a7934f225e5b0961361dd195", + "s": "0x0aa9ce1b8ad820c89a39617710806b055112818b0c2288f370a83cf260d130bc", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x2441528b877382681c17d8c5558c74faa471adb4aa39a06190e526f12fb99edc", + "s": "0x67c088db533184a563e2c29e6c14ef09f4cc9586b3d099eaf06682eb8cc9d5ef", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x34eb9235b3c774b99217cfe4bb7dc489ed24de8087c4512c245d803e5084812c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec87c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a032cb03ccb287509888659e404d043829555e1043b1d06c37c123474c229015cca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x32cb03ccb287509888659e404d043829555e1043b1d06c37c123474c229015cc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1d3098c4c7bd468bda503609fe04731115ac1742e442dd9791ff52bcd85a1374" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a01d3098c4c7bd468bda503609fe04731115ac1742e442dd9791ff52bcd85a1374a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04478e214cf1aa5ecc6810b8145e4a9b36b30e4b4891488ed48fa5ab1f187b55ca0be3e186bc78e9e56d259564ed3bbf34bf0b4c24c8f69844c2f251a79fa8baed5a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdcfb880c001a0186f0938a5778b0b4acc2c581a99cd2440ecdef0ffcd9755ffd76b30ec748d35a052b8d65d2d338fbb61850f86b05086c7fdcf9fffec5ce196a0221e6b5e8d0698b8e403f8e10180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0b23a0e316ff3b921e4c8f4febf04420f7d620bef7848c140c834d2a613e9a514a0719aadadc8fa187f45d47289a867b917b73202816813234f257a13f35eada6b0c0c0", + "blockHeader": { + "parentHash": "0x1d3098c4c7bd468bda503609fe04731115ac1742e442dd9791ff52bcd85a1374", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4478e214cf1aa5ecc6810b8145e4a9b36b30e4b4891488ed48fa5ab1f187b55c", + "transactionsTrie": "0xbe3e186bc78e9e56d259564ed3bbf34bf0b4c24c8f69844c2f251a79fa8baed5", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x484a325c9e08c4d1d25089af7c82d410ad8704e1d5846993973bf414b77e0c57" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdcfb8", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x186f0938a5778b0b4acc2c581a99cd2440ecdef0ffcd9755ffd76b30ec748d35", + "s": "0x52b8d65d2d338fbb61850f86b05086c7fdcf9fffec5ce196a0221e6b5e8d0698", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb23a0e316ff3b921e4c8f4febf04420f7d620bef7848c140c834d2a613e9a514", + "s": "0x719aadadc8fa187f45d47289a867b917b73202816813234f257a13f35eada6b0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x484a325c9e08c4d1d25089af7c82d410ad8704e1d5846993973bf414b77e0c57", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddad8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0979b3d959da35bd4bb07e81aafd057be3b20b329b9bdb0e767c0c0a78d2fdf6ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x979b3d959da35bd4bb07e81aafd057be3b20b329b9bdb0e767c0c0a78d2fdf6e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x63bd06b65042f4ba711a0dce0f835836064d682b00e87dc62c573a5504e702c6" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a063bd06b65042f4ba711a0dce0f835836064d682b00e87dc62c573a5504e702c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa0f9c5f5ae705955334c2355c0411bb4a5681b0c84c04efb174a6bd5c6acdad644a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3e5580c080a0a2aa305f2a5638518aceb7fe60003e4d4d69c4703eb8da39692283cc432d01f1a016c2854ec3ecd452de1dcd9c17d6611bc2aa9ba93e941493d63c4603e887081db88803f8850180800782520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a094087124ffebc262096c525618f323d77c3efafa0bede6728689a86e0babb25ca06f2e99b4c2134b96cbd32c0745af51e2dced52486f87a8f283b6dc35dc4844e0c0c0", + "blockHeader": { + "parentHash": "0x63bd06b65042f4ba711a0dce0f835836064d682b00e87dc62c573a5504e702c6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0xf9c5f5ae705955334c2355c0411bb4a5681b0c84c04efb174a6bd5c6acdad644", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x579b1497c260b0999afc7a2579a848f650d3c259c284e790aeee0f7df6cb1c54" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3e55", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xa2aa305f2a5638518aceb7fe60003e4d4d69c4703eb8da39692283cc432d01f1", + "s": "0x16c2854ec3ecd452de1dcd9c17d6611bc2aa9ba93e941493d63c4603e887081d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x94087124ffebc262096c525618f323d77c3efafa0bede6728689a86e0babb25c", + "s": "0x6f2e99b4c2134b96cbd32c0745af51e2dced52486f87a8f283b6dc35dc4844e0", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x579b1497c260b0999afc7a2579a848f650d3c259c284e790aeee0f7df6cb1c54", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea4975", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a408f46a03232bfe11062d19889d41e74625720dc6d2feb56ad02d213aead0cca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa408f46a03232bfe11062d19889d41e74625720dc6d2feb56ad02d213aead0cc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4195abb86312f8658354cb42c43f5228bc8670d8b682a7d0c72308031b95b352" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a04195abb86312f8658354cb42c43f5228bc8670d8b682a7d0c72308031b95b352a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa06c6a1f2e5761b72731ab1c609b40524bacad4815a4798ae8b5b84f84a4aa72dda06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae7dd80c001a01b0043c0621d648a01437b2b9f38117a68c3a43633e5947c67c91a8d430695b4a051f88659ae4ce14b37a94bfa521471145be2f506fb27646db1ac802996068f31b8e403f8e101808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a08a8ac3f2415691ecd3f24d113570a40aff875be4f68bee1cf931087c1083fbfca05e53c44fb68dce8d41bed44dd5d7d849c9300e342fd9ae9d556c415f28afb85dc0c0", + "blockHeader": { + "parentHash": "0x4195abb86312f8658354cb42c43f5228bc8670d8b682a7d0c72308031b95b352", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0x6c6a1f2e5761b72731ab1c609b40524bacad4815a4798ae8b5b84f84a4aa72dd", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x84c14304def13e8dd1825103f958f335be9537775e62fcfb655ceb618a9d2ec1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae7dd", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x1b0043c0621d648a01437b2b9f38117a68c3a43633e5947c67c91a8d430695b4", + "s": "0x51f88659ae4ce14b37a94bfa521471145be2f506fb27646db1ac802996068f31", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8a8ac3f2415691ecd3f24d113570a40aff875be4f68bee1cf931087c1083fbfc", + "s": "0x5e53c44fb68dce8d41bed44dd5d7d849c9300e342fd9ae9d556c415f28afb85d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x84c14304def13e8dd1825103f958f335be9537775e62fcfb655ceb618a9d2ec1", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf2fd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a050f11557b9c2595494b0fcef0bf86c12a257dc26fc837c0a8d16457d1fc84b8fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x50f11557b9c2595494b0fcef0bf86c12a257dc26fc837c0a8d16457d1fc84b8f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1037b27196271c3dccb0c4c05f9c493bbe839877e8f888bfaa83c9f79ac18192" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a01037b27196271c3dccb0c4c05f9c493bbe839877e8f888bfaa83c9f79ac18192a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa063816b396c0ee1b43e839ed830bcba379b18936efa4d4e632a67f2a0e48b828ea0796c4d473da4d56193c51c0d70bafaaa8c52dcba9f194fcccdbbfd88bccd7306a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7ca980c080a0ecef5360d7960d71381ab34397de63bf72e4ca35e280e54653441160908c2760a001d37c72b7c27a4b66e54be5b3d7ab6b55c33baad852fe43a2744cb482259513b88803f8850180800e82520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a02fb069829a347a12b3637f415bff932384ba6d6fcbd1d19cd69bc5904c17cf96a04171a9b53de0c60897e882360f158942560c8d4ed3e88ba57985d7b989cc9328c0c0", + "blockHeader": { + "parentHash": "0x1037b27196271c3dccb0c4c05f9c493bbe839877e8f888bfaa83c9f79ac18192", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x63816b396c0ee1b43e839ed830bcba379b18936efa4d4e632a67f2a0e48b828e", + "transactionsTrie": "0x796c4d473da4d56193c51c0d70bafaaa8c52dcba9f194fcccdbbfd88bccd7306", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1df97eb7653617240e8c350e2af26f90067d948fa83da41fa87777449488f680" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7ca9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xecef5360d7960d71381ab34397de63bf72e4ca35e280e54653441160908c2760", + "s": "0x01d37c72b7c27a4b66e54be5b3d7ab6b55c33baad852fe43a2744cb482259513", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2fb069829a347a12b3637f415bff932384ba6d6fcbd1d19cd69bc5904c17cf96", + "s": "0x4171a9b53de0c60897e882360f158942560c8d4ed3e88ba57985d7b989cc9328", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1df97eb7653617240e8c350e2af26f90067d948fa83da41fa87777449488f680", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec87c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07628196f89f31c07ebbfc1c4b3d4ebb2b92aa6a477620d2837a1908d98477a17a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7628196f89f31c07ebbfc1c4b3d4ebb2b92aa6a477620d2837a1908d98477a17", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1c70335e3afac535c08a72cf199902eaba75a6d8de6873836ad4dc2852e812b0" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a01c70335e3afac535c08a72cf199902eaba75a6d8de6873836ad4dc2852e812b0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0612f26b1684689173a82316eda4a9f4f5c4fe8e0433a04881ff2e17ef59af0aaa070a6bb34da44c7f7fd699632d5c0d59db26155ba271950151ea955ac2e969bbea06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdcfb980c001a0b880d60a7a4a2e39b3db935c427606df8052583f6e6c7ce9ef4d577b8dd33a6ba01b87959f4d811d61f2c024c078dc2f9c5d613b3eb3c6acddd464449683a607aeb8e403f8e10180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a08d30d7f415b8e335a34296975eb829ff1498b0062cd6aa6facd22d84add43741a03c6e28fb8bd9736f7fc2dd7ab5ae46cb3e85c63fe950068ac2847093422c12f6c0c0", + "blockHeader": { + "parentHash": "0x1c70335e3afac535c08a72cf199902eaba75a6d8de6873836ad4dc2852e812b0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x612f26b1684689173a82316eda4a9f4f5c4fe8e0433a04881ff2e17ef59af0aa", + "transactionsTrie": "0x70a6bb34da44c7f7fd699632d5c0d59db26155ba271950151ea955ac2e969bbe", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xace9cb23576fa7b36643f7e33285b16f9a3787224665192dbd9d63ea2f319200" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdcfb9", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xb880d60a7a4a2e39b3db935c427606df8052583f6e6c7ce9ef4d577b8dd33a6b", + "s": "0x1b87959f4d811d61f2c024c078dc2f9c5d613b3eb3c6acddd464449683a607ae", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8d30d7f415b8e335a34296975eb829ff1498b0062cd6aa6facd22d84add43741", + "s": "0x3c6e28fb8bd9736f7fc2dd7ab5ae46cb3e85c63fe950068ac2847093422c12f6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xace9cb23576fa7b36643f7e33285b16f9a3787224665192dbd9d63ea2f319200", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddad9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0979b3d959da35bd4bb07e81aafd057be3b20b329b9bdb0e767c0c0a78d2fdf6ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x979b3d959da35bd4bb07e81aafd057be3b20b329b9bdb0e767c0c0a78d2fdf6e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x63bd06b65042f4ba711a0dce0f835836064d682b00e87dc62c573a5504e702c6" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a063bd06b65042f4ba711a0dce0f835836064d682b00e87dc62c573a5504e702c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa0be33c5dbe9fa0901666e64a9bb403ddc0f8ec80af7388efb4d4927896a6d9a6ea05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3e5580c080a0a2aa305f2a5638518aceb7fe60003e4d4d69c4703eb8da39692283cc432d01f1a016c2854ec3ecd452de1dcd9c17d6611bc2aa9ba93e941493d63c4603e887081db88803f8850180070782520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0cbccea1d9ac9ae74e77c055f8960896299317361600f705b0b5c2f3b1780ddf0a074d9517bdcb166593cffadace95c7daa7884eda0a433909506ce982839b50d76c0c0", + "blockHeader": { + "parentHash": "0x63bd06b65042f4ba711a0dce0f835836064d682b00e87dc62c573a5504e702c6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0xbe33c5dbe9fa0901666e64a9bb403ddc0f8ec80af7388efb4d4927896a6d9a6e", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xef151722e414d49840816ed9dfc288692b94d5a40b55ba6ccf316c9db739f8b0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3e55", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xa2aa305f2a5638518aceb7fe60003e4d4d69c4703eb8da39692283cc432d01f1", + "s": "0x16c2854ec3ecd452de1dcd9c17d6611bc2aa9ba93e941493d63c4603e887081d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xcbccea1d9ac9ae74e77c055f8960896299317361600f705b0b5c2f3b1780ddf0", + "s": "0x74d9517bdcb166593cffadace95c7daa7884eda0a433909506ce982839b50d76", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xef151722e414d49840816ed9dfc288692b94d5a40b55ba6ccf316c9db739f8b0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea4975", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a408f46a03232bfe11062d19889d41e74625720dc6d2feb56ad02d213aead0cca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa408f46a03232bfe11062d19889d41e74625720dc6d2feb56ad02d213aead0cc", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4195abb86312f8658354cb42c43f5228bc8670d8b682a7d0c72308031b95b352" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a04195abb86312f8658354cb42c43f5228bc8670d8b682a7d0c72308031b95b352a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa0eb029c5f6e9fe5df6ea315465c2e30826e4eedaf42137bb30954919bae8cd152a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae7dd80c001a01b0043c0621d648a01437b2b9f38117a68c3a43633e5947c67c91a8d430695b4a051f88659ae4ce14b37a94bfa521471145be2f506fb27646db1ac802996068f31b8e403f8e101800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a08916770ab7883d7f9c6c48442f6e505b61be71fadecb2618b7b201d3f08bb97aa062b2679c11c1566e3cd0f8243be058c00187d8765c3d2466e428e4eb8540a17fc0c0", + "blockHeader": { + "parentHash": "0x4195abb86312f8658354cb42c43f5228bc8670d8b682a7d0c72308031b95b352", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0xeb029c5f6e9fe5df6ea315465c2e30826e4eedaf42137bb30954919bae8cd152", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x157662788f18b98f536b8eb0fdecb752d657f95fd8e470525e448039b33218d1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae7dd", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x1b0043c0621d648a01437b2b9f38117a68c3a43633e5947c67c91a8d430695b4", + "s": "0x51f88659ae4ce14b37a94bfa521471145be2f506fb27646db1ac802996068f31", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x8916770ab7883d7f9c6c48442f6e505b61be71fadecb2618b7b201d3f08bb97a", + "s": "0x62b2679c11c1566e3cd0f8243be058c00187d8765c3d2466e428e4eb8540a17f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x157662788f18b98f536b8eb0fdecb752d657f95fd8e470525e448039b33218d1", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf2fd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a050f11557b9c2595494b0fcef0bf86c12a257dc26fc837c0a8d16457d1fc84b8fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x50f11557b9c2595494b0fcef0bf86c12a257dc26fc837c0a8d16457d1fc84b8f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1037b27196271c3dccb0c4c05f9c493bbe839877e8f888bfaa83c9f79ac18192" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a01037b27196271c3dccb0c4c05f9c493bbe839877e8f888bfaa83c9f79ac18192a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0785d691a53affebdbd64691ed5a669d801ce1881d7afe86617302bee3654b156a0fef576886f63353acb43ea7a9769b1e4999601ac40e70f170777bb2ae02d02cda05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7ca980c080a0ecef5360d7960d71381ab34397de63bf72e4ca35e280e54653441160908c2760a001d37c72b7c27a4b66e54be5b3d7ab6b55c33baad852fe43a2744cb482259513b88803f8850180070e82520c9400000000000000000000000000000000000001000100c064e1a0010000000000000000000000000000000000000000000000000000000000000080a06b8cab69739e2a7d026f392720de8e9bac652a34517fd098bd3fab9ef0e68667a0054662b699c9d17432337f6562fe0ef9ac3d10e6c96a258617e3a2ac5038d726c0c0", + "blockHeader": { + "parentHash": "0x1037b27196271c3dccb0c4c05f9c493bbe839877e8f888bfaa83c9f79ac18192", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x785d691a53affebdbd64691ed5a669d801ce1881d7afe86617302bee3654b156", + "transactionsTrie": "0xfef576886f63353acb43ea7a9769b1e4999601ac40e70f170777bb2ae02d02cd", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3fc18f4e198b8121eabcaa2234926312fbf1ddfe11cbd599a8eba2056a4e12dc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7ca9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xecef5360d7960d71381ab34397de63bf72e4ca35e280e54653441160908c2760", + "s": "0x01d37c72b7c27a4b66e54be5b3d7ab6b55c33baad852fe43a2744cb482259513", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6b8cab69739e2a7d026f392720de8e9bac652a34517fd098bd3fab9ef0e68667", + "s": "0x054662b699c9d17432337f6562fe0ef9ac3d10e6c96a258617e3a2ac5038d726", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x3fc18f4e198b8121eabcaa2234926312fbf1ddfe11cbd599a8eba2056a4e12dc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec87c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07628196f89f31c07ebbfc1c4b3d4ebb2b92aa6a477620d2837a1908d98477a17a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7628196f89f31c07ebbfc1c4b3d4ebb2b92aa6a477620d2837a1908d98477a17", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1c70335e3afac535c08a72cf199902eaba75a6d8de6873836ad4dc2852e812b0" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a01c70335e3afac535c08a72cf199902eaba75a6d8de6873836ad4dc2852e812b0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e6abda801b1d67ae6d10799dc30d97f8a962c41098df250566ffbf5a6093330ba03a5a360fa49201780fdc134beadad2244ee06dec6c6b4914b828c4393d907c12a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdcfb980c001a0b880d60a7a4a2e39b3db935c427606df8052583f6e6c7ce9ef4d577b8dd33a6ba01b87959f4d811d61f2c024c078dc2f9c5d613b3eb3c6acddd464449683a607aeb8e403f8e10180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0af313df2c7f6470f0df6e089617096ade67544fda4b3991ecaf41a813cde1591a014a02b92369c3e29188cd3d4aabfdcec9c8748cada270ad13d1f880ae1ed18cac0c0", + "blockHeader": { + "parentHash": "0x1c70335e3afac535c08a72cf199902eaba75a6d8de6873836ad4dc2852e812b0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe6abda801b1d67ae6d10799dc30d97f8a962c41098df250566ffbf5a6093330b", + "transactionsTrie": "0x3a5a360fa49201780fdc134beadad2244ee06dec6c6b4914b828c4393d907c12", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9166ae96c1d2aa8cfbd223688fe6e44f1a884c19954bd62d75c346ff8c864d97" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdcfb9", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xb880d60a7a4a2e39b3db935c427606df8052583f6e6c7ce9ef4d577b8dd33a6b", + "s": "0x1b87959f4d811d61f2c024c078dc2f9c5d613b3eb3c6acddd464449683a607ae", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaf313df2c7f6470f0df6e089617096ade67544fda4b3991ecaf41a813cde1591", + "s": "0x14a02b92369c3e29188cd3d4aabfdcec9c8748cada270ad13d1f880ae1ed18ca", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9166ae96c1d2aa8cfbd223688fe6e44f1a884c19954bd62d75c346ff8c864d97", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddad9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00a6a6fa82e45eb1872c410d5ad150cec33ea69afe864682ce842d0abe9bdba92a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0a6a6fa82e45eb1872c410d5ad150cec33ea69afe864682ce842d0abe9bdba92", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x126db466b39b2d6be509532080fac05b3f836a021d63cff1142d660f2351a81f" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0126db466b39b2d6be509532080fac05b3f836a021d63cff1142d660f2351a81fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa0a6c550f0c0a6519ab51e56956959edec641e4df10a3780b50fcd421dc51e4fb2a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3ea880c080a045602e836eb4a5d69c3d9a831fc3fb5045dfac5705fd8c32361e3cc5b513895ba0617718cfb03c0578bbba38fd7d9b37d790191f2b48cb39162f24de6a856e3307b88803f885018080078252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000001a07f9f5fe3e754c4e688723d0e7ddd66878f516905c65af8fb2882ecaa0c279001a00c3c893125789852c1f90f1ae6698ab692f8622ad3c03361db826da0d7b960d8c0c0", + "blockHeader": { + "parentHash": "0x126db466b39b2d6be509532080fac05b3f836a021d63cff1142d660f2351a81f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0xa6c550f0c0a6519ab51e56956959edec641e4df10a3780b50fcd421dc51e4fb2", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4d342ea8c977edfdaaf7811f5c5ec95dc7b892be58058e6fb2122eb3f13b9ecc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3ea8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x45602e836eb4a5d69c3d9a831fc3fb5045dfac5705fd8c32361e3cc5b513895b", + "s": "0x617718cfb03c0578bbba38fd7d9b37d790191f2b48cb39162f24de6a856e3307", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7f9f5fe3e754c4e688723d0e7ddd66878f516905c65af8fb2882ecaa0c279001", + "s": "0x0c3c893125789852c1f90f1ae6698ab692f8622ad3c03361db826da0d7b960d8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4d342ea8c977edfdaaf7811f5c5ec95dc7b892be58058e6fb2122eb3f13b9ecc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea49c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e488d202e5afaf0b8b5bfb733a665e1dcd91a31a509700d139a800d8d02d4929a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe488d202e5afaf0b8b5bfb733a665e1dcd91a31a509700d139a800d8d02d4929", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc8ffe59f2328b56229a663d7703bc8999f68ec1b9dcd4924eb232519d8c44ced" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0c8ffe59f2328b56229a663d7703bc8999f68ec1b9dcd4924eb232519d8c44ceda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa031ed1ff9125d413b8572686c11bee0e628cde4e50ae7fb2853edbc92bcc535a1a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae83080c001a0a16ccaaa1a275292a411e02f6f21f2a2808d65fb8939a54f80dc98399ea5b389a02047fa6cd0b851ecf2d34618a490de02a557388a54da39d52fa1778b21edb2ccb8e403f8e101808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a04df0b9fa2a4a26645d3babd7abd1532d50aebd7ed3ffe6587c06d0f6b505fa5ea0756dd50a07befcb8a184447e0f901873c4ab3c3e4790d3b1bd1edc421cc171b4c0c0", + "blockHeader": { + "parentHash": "0xc8ffe59f2328b56229a663d7703bc8999f68ec1b9dcd4924eb232519d8c44ced", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x31ed1ff9125d413b8572686c11bee0e628cde4e50ae7fb2853edbc92bcc535a1", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcaf6d2610e5645ee141bab6eb4ed4c15a111fa541db753036347b3f59776888c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae830", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xa16ccaaa1a275292a411e02f6f21f2a2808d65fb8939a54f80dc98399ea5b389", + "s": "0x2047fa6cd0b851ecf2d34618a490de02a557388a54da39d52fa1778b21edb2cc", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x4df0b9fa2a4a26645d3babd7abd1532d50aebd7ed3ffe6587c06d0f6b505fa5e", + "s": "0x756dd50a07befcb8a184447e0f901873c4ab3c3e4790d3b1bd1edc421cc171b4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xcaf6d2610e5645ee141bab6eb4ed4c15a111fa541db753036347b3f59776888c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf350", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dfea339eb5c7e6dc603246a4c7f807184f0a0ad6e126d78cb2ce81e480723412a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdfea339eb5c7e6dc603246a4c7f807184f0a0ad6e126d78cb2ce81e480723412", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x85d7effbd9bec6fce7d9e18abe9813b6d73480ccb5b88b5d15a86fa67735cad5" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a085d7effbd9bec6fce7d9e18abe9813b6d73480ccb5b88b5d15a86fa67735cad5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0460d941574de9902157aa76d17ded249dabcbb9adbadb0733b9689fd68257980a0725eea3215b6f5bc29337d5096551bd9b43999a021b4ee0c545778782f7616eea050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7d5080c001a03c78b36ce417f0f06c46bae02e203a2384b17d4afbb9f36fc9f27e19b272c1e3a02c051df0fcb4c93db511d10b706777162df16f092da15e70f4251c896a0ded7db88803f8850180800e8252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000001a07b6d127075d940d526441f2673fa9e266c7d827e8db33d213837e3a19a9a8f08a070446308e00776b7235a9b142adaf668e0f9a05f594d019a8c8090a505ee3763c0c0", + "blockHeader": { + "parentHash": "0x85d7effbd9bec6fce7d9e18abe9813b6d73480ccb5b88b5d15a86fa67735cad5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x460d941574de9902157aa76d17ded249dabcbb9adbadb0733b9689fd68257980", + "transactionsTrie": "0x725eea3215b6f5bc29337d5096551bd9b43999a021b4ee0c545778782f7616ee", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7df69a03a55d948084ef8074256dc7881606220c28aebd626381f6c58f4a31d6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7d50", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x3c78b36ce417f0f06c46bae02e203a2384b17d4afbb9f36fc9f27e19b272c1e3", + "s": "0x2c051df0fcb4c93db511d10b706777162df16f092da15e70f4251c896a0ded7d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7b6d127075d940d526441f2673fa9e266c7d827e8db33d213837e3a19a9a8f08", + "s": "0x70446308e00776b7235a9b142adaf668e0f9a05f594d019a8c8090a505ee3763", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7df69a03a55d948084ef8074256dc7881606220c28aebd626381f6c58f4a31d6", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec8870", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0212f46e55f01ba4f0fc41a3a05273a685eaa3ead11d86a7ef9f04b8680bf65d8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x212f46e55f01ba4f0fc41a3a05273a685eaa3ead11d86a7ef9f04b8680bf65d8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6ba3bd6ed9d3ad6c50e2caa8458bb24915d2fd60225ed96886e6c54039cb1131" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a06ba3bd6ed9d3ad6c50e2caa8458bb24915d2fd60225ed96886e6c54039cb1131a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fd5f4f2e0f05e67c6ca64dc75a6179cef40639a71aadd48e53c13eef5d2eafdda076da9ea6052a48eee6d70c05188d2c9a02bc47623dcb018a82eab9279b768a96a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdd06080c001a08e0445bb84c840d9ac68af9a57c49b6ec179690e1ed98d7010addb74684917c4a076b08f81d94b0644a034e1899c81d48fc63c9f9075d2a0009daab90039078558b8e403f8e10180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a09216c81fba6f7f214faa74d673fd85037f15e62e10dffc3a636467ef03223b25a05e8e99f04cafb7a33f7ab64d96c2bed6a34a0804299a6a078d61d0ea7ec97453c0c0", + "blockHeader": { + "parentHash": "0x6ba3bd6ed9d3ad6c50e2caa8458bb24915d2fd60225ed96886e6c54039cb1131", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfd5f4f2e0f05e67c6ca64dc75a6179cef40639a71aadd48e53c13eef5d2eafdd", + "transactionsTrie": "0x76da9ea6052a48eee6d70c05188d2c9a02bc47623dcb018a82eab9279b768a96", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc1a7c1baaf241cdbffb91d02c810f17a02e517af34ca1252cdeadb3b9572d01f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdd060", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x8e0445bb84c840d9ac68af9a57c49b6ec179690e1ed98d7010addb74684917c4", + "s": "0x76b08f81d94b0644a034e1899c81d48fc63c9f9075d2a0009daab90039078558", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9216c81fba6f7f214faa74d673fd85037f15e62e10dffc3a636467ef03223b25", + "s": "0x5e8e99f04cafb7a33f7ab64d96c2bed6a34a0804299a6a078d61d0ea7ec97453", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc1a7c1baaf241cdbffb91d02c810f17a02e517af34ca1252cdeadb3b9572d01f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddb80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00a6a6fa82e45eb1872c410d5ad150cec33ea69afe864682ce842d0abe9bdba92a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0a6a6fa82e45eb1872c410d5ad150cec33ea69afe864682ce842d0abe9bdba92", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x126db466b39b2d6be509532080fac05b3f836a021d63cff1142d660f2351a81f" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a0126db466b39b2d6be509532080fac05b3f836a021d63cff1142d660f2351a81fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa09b736c0f59e4ab3aae17b978091b1ed863b9a1305f13b9053aa3333a8412a3a6a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3ea880c080a045602e836eb4a5d69c3d9a831fc3fb5045dfac5705fd8c32361e3cc5b513895ba0617718cfb03c0578bbba38fd7d9b37d790191f2b48cb39162f24de6a856e3307b88803f885018007078252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0a12fd8521bc1b70afbda5b65b0251fd51fc5cc285e75b3ad4b9f4fbf6bc8c633a04cf80fd18df6dfc2895dde80f5ec0ace9bc9f9c9dc734ea57ed15b0077bcc3dcc0c0", + "blockHeader": { + "parentHash": "0x126db466b39b2d6be509532080fac05b3f836a021d63cff1142d660f2351a81f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x9b736c0f59e4ab3aae17b978091b1ed863b9a1305f13b9053aa3333a8412a3a6", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xec0d48c7d45827db760f5c604e92005110130f87f41be4647000a119d62e923f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3ea8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x45602e836eb4a5d69c3d9a831fc3fb5045dfac5705fd8c32361e3cc5b513895b", + "s": "0x617718cfb03c0578bbba38fd7d9b37d790191f2b48cb39162f24de6a856e3307", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xa12fd8521bc1b70afbda5b65b0251fd51fc5cc285e75b3ad4b9f4fbf6bc8c633", + "s": "0x4cf80fd18df6dfc2895dde80f5ec0ace9bc9f9c9dc734ea57ed15b0077bcc3dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xec0d48c7d45827db760f5c604e92005110130f87f41be4647000a119d62e923f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea49c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e488d202e5afaf0b8b5bfb733a665e1dcd91a31a509700d139a800d8d02d4929a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe488d202e5afaf0b8b5bfb733a665e1dcd91a31a509700d139a800d8d02d4929", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc8ffe59f2328b56229a663d7703bc8999f68ec1b9dcd4924eb232519d8c44ced" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0c8ffe59f2328b56229a663d7703bc8999f68ec1b9dcd4924eb232519d8c44ceda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bfa08686fd9296547fa63e600381ee94d6ce2a34aa144fe44218f45a24b7a9ddf2fea017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae83080c001a0a16ccaaa1a275292a411e02f6f21f2a2808d65fb8939a54f80dc98399ea5b389a02047fa6cd0b851ecf2d34618a490de02a557388a54da39d52fa1778b21edb2ccb8e403f8e101800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a0aaf62538a9d4930cf4e98750aa930ffc8df47a5bb59d03752c625a101a5e4de9a023c4d3d442bbcd35c070779efe7d5c1b0a456ce9ae055c2d068e489f5b5f83c6c0c0", + "blockHeader": { + "parentHash": "0xc8ffe59f2328b56229a663d7703bc8999f68ec1b9dcd4924eb232519d8c44ced", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb45c047066a6258d22bd9edf29f64035e35931ce9aa319cc158f156735b775bf", + "transactionsTrie": "0x8686fd9296547fa63e600381ee94d6ce2a34aa144fe44218f45a24b7a9ddf2fe", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xebac1b3290bdae5bfc7b2943a41ca7384d2748678a7e25cd7142e2292aa12fe3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae830", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xa16ccaaa1a275292a411e02f6f21f2a2808d65fb8939a54f80dc98399ea5b389", + "s": "0x2047fa6cd0b851ecf2d34618a490de02a557388a54da39d52fa1778b21edb2cc", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xaaf62538a9d4930cf4e98750aa930ffc8df47a5bb59d03752c625a101a5e4de9", + "s": "0x23c4d3d442bbcd35c070779efe7d5c1b0a456ce9ae055c2d068e489f5b5f83c6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xebac1b3290bdae5bfc7b2943a41ca7384d2748678a7e25cd7142e2292aa12fe3", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf350", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dfea339eb5c7e6dc603246a4c7f807184f0a0ad6e126d78cb2ce81e480723412a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdfea339eb5c7e6dc603246a4c7f807184f0a0ad6e126d78cb2ce81e480723412", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x85d7effbd9bec6fce7d9e18abe9813b6d73480ccb5b88b5d15a86fa67735cad5" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a085d7effbd9bec6fce7d9e18abe9813b6d73480ccb5b88b5d15a86fa67735cad5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa042b8b2a8e7b593766b7d66c64e57cdce2603cb4dc125011e16f6ce37f32c6e4aa00f1666f43c9326602c22b8cdf33bdf4c34e4d0c101d1d94475a1870c63d15086a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7d5080c001a03c78b36ce417f0f06c46bae02e203a2384b17d4afbb9f36fc9f27e19b272c1e3a02c051df0fcb4c93db511d10b706777162df16f092da15e70f4251c896a0ded7db88803f8850180070e8252189400000000000000000000000000000000000001008001c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0c46d4ebc2d59526c53e7a728f6f4e60e8096b204211d1b305fdf78f89acc1e70a03c7eeddd006e6c4ae8bf01e175195cf3ee97cc47aaf0bf3134177b319abb1e39c0c0", + "blockHeader": { + "parentHash": "0x85d7effbd9bec6fce7d9e18abe9813b6d73480ccb5b88b5d15a86fa67735cad5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x42b8b2a8e7b593766b7d66c64e57cdce2603cb4dc125011e16f6ce37f32c6e4a", + "transactionsTrie": "0x0f1666f43c9326602c22b8cdf33bdf4c34e4d0c101d1d94475a1870c63d15086", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x858ddb10658fff7f320e136bbd568141fcdc2c82983b2b358cfa379067da40f8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7d50", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x3c78b36ce417f0f06c46bae02e203a2384b17d4afbb9f36fc9f27e19b272c1e3", + "s": "0x2c051df0fcb4c93db511d10b706777162df16f092da15e70f4251c896a0ded7d", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xc46d4ebc2d59526c53e7a728f6f4e60e8096b204211d1b305fdf78f89acc1e70", + "s": "0x3c7eeddd006e6c4ae8bf01e175195cf3ee97cc47aaf0bf3134177b319abb1e39", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x858ddb10658fff7f320e136bbd568141fcdc2c82983b2b358cfa379067da40f8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec8870", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0212f46e55f01ba4f0fc41a3a05273a685eaa3ead11d86a7ef9f04b8680bf65d8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x212f46e55f01ba4f0fc41a3a05273a685eaa3ead11d86a7ef9f04b8680bf65d8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6ba3bd6ed9d3ad6c50e2caa8458bb24915d2fd60225ed96886e6c54039cb1131" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a06ba3bd6ed9d3ad6c50e2caa8458bb24915d2fd60225ed96886e6c54039cb1131a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f06a2ddcc508346638397f467ecabb720ef8ddaf890f693b16f70d6fb700c3bba07262fbe1e0d9c485e704cc40d9f7f0662c8fd05fdb9d950834e8d0cb301bed04a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdd06080c001a08e0445bb84c840d9ac68af9a57c49b6ec179690e1ed98d7010addb74684917c4a076b08f81d94b0644a034e1899c81d48fc63c9f9075d2a0009daab90039078558b8e403f8e10180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0792fbaddebd163ada29d19d2ef81c5550a3166263a6e738c2eb8074329e29675a02cb7428c63a5e4ef145ff51bff3fa2f7b3486893465446be46a48fd13ce5b878c0c0", + "blockHeader": { + "parentHash": "0x6ba3bd6ed9d3ad6c50e2caa8458bb24915d2fd60225ed96886e6c54039cb1131", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf06a2ddcc508346638397f467ecabb720ef8ddaf890f693b16f70d6fb700c3bb", + "transactionsTrie": "0x7262fbe1e0d9c485e704cc40d9f7f0662c8fd05fdb9d950834e8d0cb301bed04", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x98a78263c368ec36154736c3ea04b0ffa16dc5aa166fd6b7327925ada244e4f9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdd060", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x8e0445bb84c840d9ac68af9a57c49b6ec179690e1ed98d7010addb74684917c4", + "s": "0x76b08f81d94b0644a034e1899c81d48fc63c9f9075d2a0009daab90039078558", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x792fbaddebd163ada29d19d2ef81c5550a3166263a6e738c2eb8074329e29675", + "s": "0x2cb7428c63a5e4ef145ff51bff3fa2f7b3486893465446be46a48fd13ce5b878", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x98a78263c368ec36154736c3ea04b0ffa16dc5aa166fd6b7327925ada244e4f9", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddb80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a020de8905d4b79d26b9d47627f86ebf39e7a018e2689014fdb24ffd50cd5cd0a2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x20de8905d4b79d26b9d47627f86ebf39e7a018e2689014fdb24ffd50cd5cd0a2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4dc19086ac47175ecbabe3d9c3ac56855aa2ea3894221f7fa209df05a10780dc" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a04dc19086ac47175ecbabe3d9c3ac56855aa2ea3894221f7fa209df05a10780dca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa0cf225c64f1b4b3f4e9189ffdfcf1f2a9684b47fde74e58354a52a159e65ce19da050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3ea980c080a0a01a18041185a8e948aee8fad26d32cd54ed7702c4a55c8f94459a530f6596b8a00bf0204489900571fa1b744731539bf474ecdf274b5807b7170d6075cdd4b231b88803f885018080078252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a006883411220464f72192002f0a60cb808a6eae4bea1f5132e1781fd4fda103eea04aa561534729a93553281328f36d7151485241f744d7f61e22c8e1f80df0c83ec0c0", + "blockHeader": { + "parentHash": "0x4dc19086ac47175ecbabe3d9c3ac56855aa2ea3894221f7fa209df05a10780dc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0xcf225c64f1b4b3f4e9189ffdfcf1f2a9684b47fde74e58354a52a159e65ce19d", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb1e45456a1ee23e3be6ba679b6354bde480e9c8ab88b3400a607f094a5af4b27" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3ea9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xa01a18041185a8e948aee8fad26d32cd54ed7702c4a55c8f94459a530f6596b8", + "s": "0x0bf0204489900571fa1b744731539bf474ecdf274b5807b7170d6075cdd4b231", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x06883411220464f72192002f0a60cb808a6eae4bea1f5132e1781fd4fda103ee", + "s": "0x4aa561534729a93553281328f36d7151485241f744d7f61e22c8e1f80df0c83e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb1e45456a1ee23e3be6ba679b6354bde480e9c8ab88b3400a607f094a5af4b27", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea49c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a047e48ec94abd50c4b7184013c225cae50be520081b5f5727c31e6c19ba3f5522a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x47e48ec94abd50c4b7184013c225cae50be520081b5f5727c31e6c19ba3f5522", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x317813d55be6c308f9181d32364d0aa5dca1299919a87d597c8cf43639b2caaa" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0317813d55be6c308f9181d32364d0aa5dca1299919a87d597c8cf43639b2caaaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa05dba0db07d6bcb1ee1c4efbab449aecb79b1449c05ac79fee771e03e38f78be1a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae83180c080a0165740f0b2e89a0f51c8b22c49470cff5a146cc98fbc4b7013ab9eda640473c1a0662e55beb1024c0f7e9fef963a073d2115891af63498215d69107c7d87ea20dcb8e403f8e101808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a01a0866792a9db84324b32c8c3c787c47a38a2735cdda280080b0644b8f6408f8a0074d889fed3ef481fb6a44aa9759e40584672e3becd5ce3655542b78679e3a6bc0c0", + "blockHeader": { + "parentHash": "0x317813d55be6c308f9181d32364d0aa5dca1299919a87d597c8cf43639b2caaa", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0x5dba0db07d6bcb1ee1c4efbab449aecb79b1449c05ac79fee771e03e38f78be1", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1de3b0dae4b36773d35a3de5f09e89f0221b2708bdb23bb4865f5eed28af4941" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae831", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x165740f0b2e89a0f51c8b22c49470cff5a146cc98fbc4b7013ab9eda640473c1", + "s": "0x662e55beb1024c0f7e9fef963a073d2115891af63498215d69107c7d87ea20dc", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x1a0866792a9db84324b32c8c3c787c47a38a2735cdda280080b0644b8f6408f8", + "s": "0x074d889fed3ef481fb6a44aa9759e40584672e3becd5ce3655542b78679e3a6b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1de3b0dae4b36773d35a3de5f09e89f0221b2708bdb23bb4865f5eed28af4941", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf351", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a092b3b8313653e778ea2827d0498903a07a06e25aa679f28f6e5a5661090c93a0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x92b3b8313653e778ea2827d0498903a07a06e25aa679f28f6e5a5661090c93a0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9aeacdd3b88efce5ada7972a5551cd73f3ccfb07806bad29c545997717f18515" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a09aeacdd3b88efce5ada7972a5551cd73f3ccfb07806bad29c545997717f18515a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0519eb209b4a39c18d0ee0dbb4304c7bddd14530c98648085f859b710cf474c7ba026922d50df5c50a95f94b480723dae0bb415e83897304728fd4f5b71fc13e2bca050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7d5180c080a07f612171a8ebef91733d305636e51ac05aa0ec2eaf4f2197168774f3af481ef6a05a7c79b9c484c9a9ac152607d7eaac06fa4d54a02b6c869c69c0773c1e30e189b88803f8850180800e8252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a0c6cd039f7dee69dae122acee65f6e638b9a5399539cf3c51dbda2d06c6d042d3a073065b82c46ead5ffc0340db4dd99433f1c8cc7c0cdd05120128d8aadc9573f5c0c0", + "blockHeader": { + "parentHash": "0x9aeacdd3b88efce5ada7972a5551cd73f3ccfb07806bad29c545997717f18515", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x519eb209b4a39c18d0ee0dbb4304c7bddd14530c98648085f859b710cf474c7b", + "transactionsTrie": "0x26922d50df5c50a95f94b480723dae0bb415e83897304728fd4f5b71fc13e2bc", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb3df87eaab3d9f20fdb1912d0c7d3e482d9479b3e4defda5a847dc0b5b6fae8f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7d51", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x7f612171a8ebef91733d305636e51ac05aa0ec2eaf4f2197168774f3af481ef6", + "s": "0x5a7c79b9c484c9a9ac152607d7eaac06fa4d54a02b6c869c69c0773c1e30e189", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xc6cd039f7dee69dae122acee65f6e638b9a5399539cf3c51dbda2d06c6d042d3", + "s": "0x73065b82c46ead5ffc0340db4dd99433f1c8cc7c0cdd05120128d8aadc9573f5", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb3df87eaab3d9f20fdb1912d0c7d3e482d9479b3e4defda5a847dc0b5b6fae8f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec8871", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc83ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04fb50f8814cd91bda1e4aa9e5cbe0fa23f96188b629cb03e6ad4af2cc1d73ffea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4fb50f8814cd91bda1e4aa9e5cbe0fa23f96188b629cb03e6ad4af2cc1d73ffe", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xef0049480e26b3f5711713916c004882f5f808ea50859b6c8fb1c647a2e2af81" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0ef0049480e26b3f5711713916c004882f5f808ea50859b6c8fb1c647a2e2af81a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa088fd8d3946f1260827c28cd1a0952679c964054cc4489bd4e14b3e5f0e9d688fa0aa25988621c42dd9c9ccf8069e5e6dacb74089f8cbe228ff37a2af66f3eb1f17a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdd06180c080a0f88cb77b59a86a83c0d10223de777803801a552aaa5624cbf3bbd7faa38da764a07bef730d7f56043969911e7b37c6959cbb65fb935e23f6e64697e12d52cd51f2b8e403f8e10180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a0b6b209031ac8abc022c73579aca72a1a82c27df43895fcc918466eccc68f977da06f28e699d4fb3021316f632f616179029b9cdbe464b5b25d6794c97e24904a3fc0c0", + "blockHeader": { + "parentHash": "0xef0049480e26b3f5711713916c004882f5f808ea50859b6c8fb1c647a2e2af81", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x88fd8d3946f1260827c28cd1a0952679c964054cc4489bd4e14b3e5f0e9d688f", + "transactionsTrie": "0xaa25988621c42dd9c9ccf8069e5e6dacb74089f8cbe228ff37a2af66f3eb1f17", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xca3e92467f2fea7cee8bb7495bba4325aece692d57dba7ba9e932ce2f9b7871c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdd061", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xf88cb77b59a86a83c0d10223de777803801a552aaa5624cbf3bbd7faa38da764", + "s": "0x7bef730d7f56043969911e7b37c6959cbb65fb935e23f6e64697e12d52cd51f2", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xb6b209031ac8abc022c73579aca72a1a82c27df43895fcc918466eccc68f977d", + "s": "0x6f28e699d4fb3021316f632f616179029b9cdbe464b5b25d6794c97e24904a3f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xca3e92467f2fea7cee8bb7495bba4325aece692d57dba7ba9e932ce2f9b7871c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddb81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc8e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a020de8905d4b79d26b9d47627f86ebf39e7a018e2689014fdb24ffd50cd5cd0a2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x20de8905d4b79d26b9d47627f86ebf39e7a018e2689014fdb24ffd50cd5cd0a2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4dc19086ac47175ecbabe3d9c3ac56855aa2ea3894221f7fa209df05a10780dc" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a04dc19086ac47175ecbabe3d9c3ac56855aa2ea3894221f7fa209df05a10780dca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa01e73a71d8f9e150b9cd7f20651154d8ecf9f876e68e77ea0365b583acc502118a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83ca3ea980c080a0a01a18041185a8e948aee8fad26d32cd54ed7702c4a55c8f94459a530f6596b8a00bf0204489900571fa1b744731539bf474ecdf274b5807b7170d6075cdd4b231b88803f885018007078252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000001a0469ed640a73150fef29feafa9d3ff7ec754759193a05c6bfd951348c696c826ba0545c8818de996aabcedacd4d0de6bc6d4be5f37020bf015069a98436b5af368ac0c0", + "blockHeader": { + "parentHash": "0x4dc19086ac47175ecbabe3d9c3ac56855aa2ea3894221f7fa209df05a10780dc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0x1e73a71d8f9e150b9cd7f20651154d8ecf9f876e68e77ea0365b583acc502118", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0b5a6337494e8ecaa968402a271e8176c5582724369f7500c05db8976eb57390" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xca3ea9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xa01a18041185a8e948aee8fad26d32cd54ed7702c4a55c8f94459a530f6596b8", + "s": "0x0bf0204489900571fa1b744731539bf474ecdf274b5807b7170d6075cdd4b231", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x469ed640a73150fef29feafa9d3ff7ec754759193a05c6bfd951348c696c826b", + "s": "0x545c8818de996aabcedacd4d0de6bc6d4be5f37020bf015069a98436b5af368a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x0b5a6337494e8ecaa968402a271e8176c5582724369f7500c05db8976eb57390", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xea49c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a047e48ec94abd50c4b7184013c225cae50be520081b5f5727c31e6c19ba3f5522a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x47e48ec94abd50c4b7184013c225cae50be520081b5f5727c31e6c19ba3f5522", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x317813d55be6c308f9181d32364d0aa5dca1299919a87d597c8cf43639b2caaa" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0317813d55be6c308f9181d32364d0aa5dca1299919a87d597c8cf43639b2caaaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20aa0806c64fb97986b78e355bd6e04e9a252c537e2f82687c34953401a63dbad1c98a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cae83180c080a0165740f0b2e89a0f51c8b22c49470cff5a146cc98fbc4b7013ab9eda640473c1a0662e55beb1024c0f7e9fef963a073d2115891af63498215d69107c7d87ea20dcb8e403f8e101800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000080a06793576d99c0cb92abdd40a78a282ad414062720cdafcdeee08bcdafe16008aba05b67522ff1e5a2069b7ec5bacc56a361a2d26183dad45e47ec135cf209631a0fc0c0", + "blockHeader": { + "parentHash": "0x317813d55be6c308f9181d32364d0aa5dca1299919a87d597c8cf43639b2caaa", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb2b4b603b65469b8ca1d0b43e69d21850032e0b3f03ac4356cbb5180cc2df20a", + "transactionsTrie": "0x806c64fb97986b78e355bd6e04e9a252c537e2f82687c34953401a63dbad1c98", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x97de3cd5c90983838d427bf38972369598987d975b43904adb8ecbd92656a0a8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcae831", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x165740f0b2e89a0f51c8b22c49470cff5a146cc98fbc4b7013ab9eda640473c1", + "s": "0x662e55beb1024c0f7e9fef963a073d2115891af63498215d69107c7d87ea20dc", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6793576d99c0cb92abdd40a78a282ad414062720cdafcdeee08bcdafe16008ab", + "s": "0x5b67522ff1e5a2069b7ec5bacc56a361a2d26183dad45e47ec135cf209631a0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x97de3cd5c90983838d427bf38972369598987d975b43904adb8ecbd92656a0a8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeaf351", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a092b3b8313653e778ea2827d0498903a07a06e25aa679f28f6e5a5661090c93a0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x92b3b8313653e778ea2827d0498903a07a06e25aa679f28f6e5a5661090c93a0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9aeacdd3b88efce5ada7972a5551cd73f3ccfb07806bad29c545997717f18515" + }, + "blocks": [ + { + "rlp": "0xf9033df90242a09aeacdd3b88efce5ada7972a5551cd73f3ccfb07806bad29c545997717f18515a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00e2072476cc53401092d3a926a30d0d5f7bc5f1a59d9a60ccbebff0d5fb18cefa0bfb5b17b15389b8798a5491681fd55e9dd37bba92fb1e7657bac1dabbe423734a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f4b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cc7d5180c080a07f612171a8ebef91733d305636e51ac05aa0ec2eaf4f2197168774f3af481ef6a05a7c79b9c484c9a9ac152607d7eaac06fa4d54a02b6c869c69c0773c1e30e189b88803f8850180070e8252189400000000000000000000000000000000000001000101c064e1a0010000000000000000000000000000000000000000000000000000000000000080a08663abe203791dc1b3e233ffc7bb979b03eebf14d96254d04cef257f783b779fa03cb436e1fa097da2d5399e1cf04dbc630a7e09ccab64cb706a9fc325caca22e2c0c0", + "blockHeader": { + "parentHash": "0x9aeacdd3b88efce5ada7972a5551cd73f3ccfb07806bad29c545997717f18515", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0e2072476cc53401092d3a926a30d0d5f7bc5f1a59d9a60ccbebff0d5fb18cef", + "transactionsTrie": "0xbfb5b17b15389b8798a5491681fd55e9dd37bba92fb1e7657bac1dabbe423734", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7fc9b1f25f98b678c7fa0ec4a30de33172614610b81086fd9e77de9ffc0e583f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcc7d51", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x7f612171a8ebef91733d305636e51ac05aa0ec2eaf4f2197168774f3af481ef6", + "s": "0x5a7c79b9c484c9a9ac152607d7eaac06fa4d54a02b6c869c69c0773c1e30e189", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8663abe203791dc1b3e233ffc7bb979b03eebf14d96254d04cef257f783b779f", + "s": "0x3cb436e1fa097da2d5399e1cf04dbc630a7e09ccab64cb706a9fc325caca22e2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7fc9b1f25f98b678c7fa0ec4a30de33172614610b81086fd9e77de9ffc0e583f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xec8871", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_100-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04fb50f8814cd91bda1e4aa9e5cbe0fa23f96188b629cb03e6ad4af2cc1d73ffea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4fb50f8814cd91bda1e4aa9e5cbe0fa23f96188b629cb03e6ad4af2cc1d73ffe", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xef0049480e26b3f5711713916c004882f5f808ea50859b6c8fb1c647a2e2af81" + }, + "blocks": [ + { + "rlp": "0xf9039af90242a0ef0049480e26b3f5711713916c004882f5f808ea50859b6c8fb1c647a2e2af81a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b9772e250e11295a0e74dfe83b5ee2221cab7741d547410e9c235dbfa52d4eada026a5786c0e42c86989a6f18fde6e85ce710dfa86bfed4f2b3f18a3e3533b9062a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90150b86802f8650180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b83cdd06180c080a0f88cb77b59a86a83c0d10223de777803801a552aaa5624cbf3bbd7faa38da764a07bef730d7f56043969911e7b37c6959cbb65fb935e23f6e64697e12d52cd51f2b8e403f8e10180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c864e1a0010000000000000000000000000000000000000000000000000000000000000001a09bbeba8786747f3fe1a74cf51db594f25149991020bd16ccd19007467f55c244a001738eb94e5f213477fba07b1f77778e89db34d2467fd43b41d74b183561368ec0c0", + "blockHeader": { + "parentHash": "0xef0049480e26b3f5711713916c004882f5f808ea50859b6c8fb1c647a2e2af81", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb9772e250e11295a0e74dfe83b5ee2221cab7741d547410e9c235dbfa52d4ead", + "transactionsTrie": "0x26a5786c0e42c86989a6f18fde6e85ce710dfa86bfed4f2b3f18a3e3533b9062", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb6d7ab560642f8e7066e245ca20b1714bdd495c2b8620b9e12800f8c73d65e23" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0xcdd061", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xf88cb77b59a86a83c0d10223de777803801a552aaa5624cbf3bbd7faa38da764", + "s": "0x7bef730d7f56043969911e7b37c6959cbb65fb935e23f6e64697e12d52cd51f2", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x64", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x9bbeba8786747f3fe1a74cf51db594f25149991020bd16ccd19007467f55c244", + "s": "0x01738eb94e5f213477fba07b1f77778e89db34d2467fd43b41d74b183561368e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb6d7ab560642f8e7066e245ca20b1714bdd495c2b8620b9e12800f8c73d65e23", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0xeddb81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0xc60000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0886d1f8207262fa349a4ca163b74d09b5205a5318e8689befc9ae7fa868d290da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x886d1f8207262fa349a4ca163b74d09b5205a5318e8689befc9ae7fa868d290d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdfe22a1543b720ccf08bb0aaf5b470071962f1a2ffd2ebe555f1a118aacb4757" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0dfe22a1543b720ccf08bb0aaf5b470071962f1a2ffd2ebe555f1a118aacb4757a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a0419ebed9ce542264157a90906c56911433eb334d3aaca9eeb09588033593ab2ba0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223e3880c080a0c2b796e3a859221f3cbae0b4ba9b1fb02acc9068b9e4bb5a297f68bdbe16bcd7a079fc5e4bdf88d234461040e44d27e2331ae63ebd86d90d134a560366eca8c38bb88a03f887018080078252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a092c7b7ebc1af73ef5871030920e2b1b28b78ccdefac30a7851cbc34f77f9241ba0378b2976452d62627a6b1301c0df985b0c9d21c4172f4e2086938e55637800f2c0c0", + "blockHeader": { + "parentHash": "0xdfe22a1543b720ccf08bb0aaf5b470071962f1a2ffd2ebe555f1a118aacb4757", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0x419ebed9ce542264157a90906c56911433eb334d3aaca9eeb09588033593ab2b", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x73185cc4e7589eabd9d9643802cc19692b698624fdf408e9cc0a9ede370b468c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223e38", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xc2b796e3a859221f3cbae0b4ba9b1fb02acc9068b9e4bb5a297f68bdbe16bcd7", + "s": "0x79fc5e4bdf88d234461040e44d27e2331ae63ebd86d90d134a560366eca8c38b", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x92c7b7ebc1af73ef5871030920e2b1b28b78ccdefac30a7851cbc34f77f9241b", + "s": "0x378b2976452d62627a6b1301c0df985b0c9d21c4172f4e2086938e55637800f2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x73185cc4e7589eabd9d9643802cc19692b698624fdf408e9cc0a9ede370b468c", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e424958", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a030b6c3623f401664d145ba0b7100364734684c9fd510a12565f64371179745a9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x30b6c3623f401664d145ba0b7100364734684c9fd510a12565f64371179745a9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd96857bd0b4af869b6a46aadaf7b8ec44fd2e66035e72d4ba50cbd5e97be4c9e" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0d96857bd0b4af869b6a46aadaf7b8ec44fd2e66035e72d4ba50cbd5e97be4c9ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a0bd82702afbd744807df0c313ee213b2e2a9a8bd006fd82103566765031bcb5e8a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e7c080c080a0c8bd858c0978acd84dc3c6bb284b005ed637dc2c43636fba7eeebcc4053b5ea6a00b0aea2c80e5d069d12f1d5614519220523f1db16ff3ce0311d7119f8c429edeb8e603f8e301808007826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a02ea305fe0e144b348cdc7358392d73386a4915efa1696416fd7e2d15141859c6a04b1bc94df15b149c2113fff900ffcc6ada64f58e04faa3feeff31380ac70a419c0c0", + "blockHeader": { + "parentHash": "0xd96857bd0b4af869b6a46aadaf7b8ec44fd2e66035e72d4ba50cbd5e97be4c9e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0xbd82702afbd744807df0c313ee213b2e2a9a8bd006fd82103566765031bcb5e8", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x328bbdca09fc29a10097709a972b22ba668520cc0d77f8b0089b1d462be4d79a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e7c0", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xc8bd858c0978acd84dc3c6bb284b005ed637dc2c43636fba7eeebcc4053b5ea6", + "s": "0x0b0aea2c80e5d069d12f1d5614519220523f1db16ff3ce0311d7119f8c429ede", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x2ea305fe0e144b348cdc7358392d73386a4915efa1696416fd7e2d15141859c6", + "s": "0x4b1bc94df15b149c2113fff900ffcc6ada64f58e04faa3feeff31380ac70a419", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x328bbdca09fc29a10097709a972b22ba668520cc0d77f8b0089b1d462be4d79a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f2e0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08a36ee11e1aa1a059d31f0e8b64e6120e5d7a53d9cb4aad82fcc0cbf62e2b559a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8a36ee11e1aa1a059d31f0e8b64e6120e5d7a53d9cb4aad82fcc0cbf62e2b559", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x287c7f7871b15b4d7a678ce9496c5b1ccf0868ed7549c85e3d2f4d0ae46bad21" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0287c7f7871b15b4d7a678ce9496c5b1ccf0868ed7549c85e3d2f4d0ae46bad21a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09db4c3155a77587d471adf52c961a624af38a8a208f7f0eea11b004e7a3e48dca07074f936eedd7dcda693e1ce6dbae2daedff7a997028d1ae3b1a4da6ae421049a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247c7080c001a0a57c388b7ec092e56d928e4b295fc0a0c38f5f9d685359cdf39a00df7d4015dda03bfd42a235ae3e4d040eff639ed0ea50ea50d312c51c7381f8d550f8013b8b41b88a03f8870180800e8252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a050e3b68c3144a229669731c901428808797606bbea471424889e5d7812cbc6d5a027cf7c86194d064a3fb7fb85f32232ae3c77a2ca53a2bb59a58d2e747c80b8dfc0c0", + "blockHeader": { + "parentHash": "0x287c7f7871b15b4d7a678ce9496c5b1ccf0868ed7549c85e3d2f4d0ae46bad21", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9db4c3155a77587d471adf52c961a624af38a8a208f7f0eea11b004e7a3e48dc", + "transactionsTrie": "0x7074f936eedd7dcda693e1ce6dbae2daedff7a997028d1ae3b1a4da6ae421049", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbf0543972464aefda2119b67c238a736848d23787e904db61553ba30271814de" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247c70", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xa57c388b7ec092e56d928e4b295fc0a0c38f5f9d685359cdf39a00df7d4015dd", + "s": "0x3bfd42a235ae3e4d040eff639ed0ea50ea50d312c51c7381f8d550f8013b8b41", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x50e3b68c3144a229669731c901428808797606bbea471424889e5d7812cbc6d5", + "s": "0x27cf7c86194d064a3fb7fb85f32232ae3c77a2ca53a2bb59a58d2e747c80b8df", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xbf0543972464aefda2119b67c238a736848d23787e904db61553ba30271814de", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e448790", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0782491fbe245006195a1d270c839687a8f68283fd7634210a40164094801461fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x782491fbe245006195a1d270c839687a8f68283fd7634210a40164094801461f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf179aac33d2c937ba344adb1b007645410e5a983f4b4750c8109c65de423c33d" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0f179aac33d2c937ba344adb1b007645410e5a983f4b4750c8109c65de423c33da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03bafb2286ec2171935bfe35217411716429b8eabf64c16432b763419f09a2c42a036a12a30487ee020d05b08c320397a1aa031c302951f3c972c8b45ddb2b97478a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25cf8080c001a08e7c99a50aea4c70e478f10c013e21fe2e7432ca06c30369a74608218d04a06ba07617a623529e3c5e1b64687753d23a7d1ba0e5ea914834c12a5e267538c60be5b8e603f8e30180800e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a05b617c0c02004e5cc77e5bf21cb8865b70868ee8b52f41a8fa0910ba85e835eca04adfe5598248c0d3413e213fa47ae23f575aac2b69bf164e9dafea211c95dd9dc0c0", + "blockHeader": { + "parentHash": "0xf179aac33d2c937ba344adb1b007645410e5a983f4b4750c8109c65de423c33d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3bafb2286ec2171935bfe35217411716429b8eabf64c16432b763419f09a2c42", + "transactionsTrie": "0x36a12a30487ee020d05b08c320397a1aa031c302951f3c972c8b45ddb2b97478", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf835fbb51a81567f04ee85bbb7d9a4dc8a19191b1ab53862dd34fcda0c62a638" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25cf80", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x8e7c99a50aea4c70e478f10c013e21fe2e7432ca06c30369a74608218d04a06b", + "s": "0x7617a623529e3c5e1b64687753d23a7d1ba0e5ea914834c12a5e267538c60be5", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5b617c0c02004e5cc77e5bf21cb8865b70868ee8b52f41a8fa0910ba85e835ec", + "s": "0x4adfe5598248c0d3413e213fa47ae23f575aac2b69bf164e9dafea211c95dd9d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf835fbb51a81567f04ee85bbb7d9a4dc8a19191b1ab53862dd34fcda0c62a638", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45daa0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0886d1f8207262fa349a4ca163b74d09b5205a5318e8689befc9ae7fa868d290da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x886d1f8207262fa349a4ca163b74d09b5205a5318e8689befc9ae7fa868d290d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdfe22a1543b720ccf08bb0aaf5b470071962f1a2ffd2ebe555f1a118aacb4757" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0dfe22a1543b720ccf08bb0aaf5b470071962f1a2ffd2ebe555f1a118aacb4757a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a0443305dd03046412f507c729c567bf53f6d76a7d13338dbaf6801b67559988a5a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223e3880c080a0c2b796e3a859221f3cbae0b4ba9b1fb02acc9068b9e4bb5a297f68bdbe16bcd7a079fc5e4bdf88d234461040e44d27e2331ae63ebd86d90d134a560366eca8c38bb88a03f887018007078252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0dd1b8f54fa20615f927ca07e90e90c7ac966bee167ccd718cbd792ddc9a9cbf7a07ff96b9573d80e2e5af4a6e11cd3440d6ec66b9ff9790d0dfaea603b429e22aec0c0", + "blockHeader": { + "parentHash": "0xdfe22a1543b720ccf08bb0aaf5b470071962f1a2ffd2ebe555f1a118aacb4757", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0x443305dd03046412f507c729c567bf53f6d76a7d13338dbaf6801b67559988a5", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa3ae77aa246eb4186b0845d40f35e18e33e15f888560934d4da5650d85a5d467" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223e38", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xc2b796e3a859221f3cbae0b4ba9b1fb02acc9068b9e4bb5a297f68bdbe16bcd7", + "s": "0x79fc5e4bdf88d234461040e44d27e2331ae63ebd86d90d134a560366eca8c38b", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xdd1b8f54fa20615f927ca07e90e90c7ac966bee167ccd718cbd792ddc9a9cbf7", + "s": "0x7ff96b9573d80e2e5af4a6e11cd3440d6ec66b9ff9790d0dfaea603b429e22ae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa3ae77aa246eb4186b0845d40f35e18e33e15f888560934d4da5650d85a5d467", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e424958", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a030b6c3623f401664d145ba0b7100364734684c9fd510a12565f64371179745a9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x30b6c3623f401664d145ba0b7100364734684c9fd510a12565f64371179745a9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd96857bd0b4af869b6a46aadaf7b8ec44fd2e66035e72d4ba50cbd5e97be4c9e" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0d96857bd0b4af869b6a46aadaf7b8ec44fd2e66035e72d4ba50cbd5e97be4c9ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a006519fcb4f1215c0ac76482fc883eef259bfe58aeccc014ce8192c588d18bbe6a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e7c080c080a0c8bd858c0978acd84dc3c6bb284b005ed637dc2c43636fba7eeebcc4053b5ea6a00b0aea2c80e5d069d12f1d5614519220523f1db16ff3ce0311d7119f8c429edeb8e603f8e301800707826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00d8ee2775fd2d4ccbc42622d28ffd9e8dc6291040718d87242c1466ce97ab25aa0738c1765113600b650463a50eb3d51e0c6385446daedd5a386599e0013ddf99cc0c0", + "blockHeader": { + "parentHash": "0xd96857bd0b4af869b6a46aadaf7b8ec44fd2e66035e72d4ba50cbd5e97be4c9e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0x06519fcb4f1215c0ac76482fc883eef259bfe58aeccc014ce8192c588d18bbe6", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x449b2ccdbb6d59c271cb632549c5e90e226bf767644778989a719fb953390665" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e7c0", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xc8bd858c0978acd84dc3c6bb284b005ed637dc2c43636fba7eeebcc4053b5ea6", + "s": "0x0b0aea2c80e5d069d12f1d5614519220523f1db16ff3ce0311d7119f8c429ede", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0d8ee2775fd2d4ccbc42622d28ffd9e8dc6291040718d87242c1466ce97ab25a", + "s": "0x738c1765113600b650463a50eb3d51e0c6385446daedd5a386599e0013ddf99c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x449b2ccdbb6d59c271cb632549c5e90e226bf767644778989a719fb953390665", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f2e0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08a36ee11e1aa1a059d31f0e8b64e6120e5d7a53d9cb4aad82fcc0cbf62e2b559a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8a36ee11e1aa1a059d31f0e8b64e6120e5d7a53d9cb4aad82fcc0cbf62e2b559", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x287c7f7871b15b4d7a678ce9496c5b1ccf0868ed7549c85e3d2f4d0ae46bad21" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0287c7f7871b15b4d7a678ce9496c5b1ccf0868ed7549c85e3d2f4d0ae46bad21a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb6a66f956dfe1128f3d9b9b0176662b79701291df116487c2e503e520138affa088d1e01c34771fdee46f27aabbdb0c492493fe3cc0463d6cc97c34107d674902a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247c7080c001a0a57c388b7ec092e56d928e4b295fc0a0c38f5f9d685359cdf39a00df7d4015dda03bfd42a235ae3e4d040eff639ed0ea50ea50d312c51c7381f8d550f8013b8b41b88a03f8870180070e8252089400000000000000000000000000000000000001008080c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a09e33f45eb18e4dbf9712bcec6add17dc50de91825473a7247cc16af427e30958a0544db7b3b09d20e5f1f8f537655e0c9a864e72bb4ed77f225e5a4fde9711c944c0c0", + "blockHeader": { + "parentHash": "0x287c7f7871b15b4d7a678ce9496c5b1ccf0868ed7549c85e3d2f4d0ae46bad21", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfb6a66f956dfe1128f3d9b9b0176662b79701291df116487c2e503e520138aff", + "transactionsTrie": "0x88d1e01c34771fdee46f27aabbdb0c492493fe3cc0463d6cc97c34107d674902", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x438d7068c2a96a8164cd8750a3d4da520ced3a356ea838ec6683727d16895ef8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247c70", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xa57c388b7ec092e56d928e4b295fc0a0c38f5f9d685359cdf39a00df7d4015dd", + "s": "0x3bfd42a235ae3e4d040eff639ed0ea50ea50d312c51c7381f8d550f8013b8b41", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9e33f45eb18e4dbf9712bcec6add17dc50de91825473a7247cc16af427e30958", + "s": "0x544db7b3b09d20e5f1f8f537655e0c9a864e72bb4ed77f225e5a4fde9711c944", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x438d7068c2a96a8164cd8750a3d4da520ced3a356ea838ec6683727d16895ef8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e448790", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0782491fbe245006195a1d270c839687a8f68283fd7634210a40164094801461fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x782491fbe245006195a1d270c839687a8f68283fd7634210a40164094801461f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf179aac33d2c937ba344adb1b007645410e5a983f4b4750c8109c65de423c33d" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0f179aac33d2c937ba344adb1b007645410e5a983f4b4750c8109c65de423c33da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02d8acc35d0ddc63971ffe69e3073725011a93dbc38016096c433eece5bb1b4eea0c8cc84f40be19d446f2334be59ee06046921082f3ab95cfd44a20849fd0e37c7a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25cf8080c001a08e7c99a50aea4c70e478f10c013e21fe2e7432ca06c30369a74608218d04a06ba07617a623529e3c5e1b64687753d23a7d1ba0e5ea914834c12a5e267538c60be5b8e603f8e30180070e826a409400000000000000000000000000000000000001008080f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a03da19453cc892af659638b974452c8a629647cd04cbdd41d9c4c59779d5b2712a03e2606d6fd6927fe1cebbe0d2f16b4f1f677852d9110bb8369fe602910f66c86c0c0", + "blockHeader": { + "parentHash": "0xf179aac33d2c937ba344adb1b007645410e5a983f4b4750c8109c65de423c33d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2d8acc35d0ddc63971ffe69e3073725011a93dbc38016096c433eece5bb1b4ee", + "transactionsTrie": "0xc8cc84f40be19d446f2334be59ee06046921082f3ab95cfd44a20849fd0e37c7", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2d456703f29b4b216b29db8bd114e01f6c2eb066749ad56c052621181678549a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25cf80", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x8e7c99a50aea4c70e478f10c013e21fe2e7432ca06c30369a74608218d04a06b", + "s": "0x7617a623529e3c5e1b64687753d23a7d1ba0e5ea914834c12a5e267538c60be5", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x3da19453cc892af659638b974452c8a629647cd04cbdd41d9c4c59779d5b2712", + "s": "0x3e2606d6fd6927fe1cebbe0d2f16b4f1f677852d9110bb8369fe602910f66c86", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x2d456703f29b4b216b29db8bd114e01f6c2eb066749ad56c052621181678549a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45daa0", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b4b938992bede4126c43ce46d29477db4e7516337567ffc309eaad701c7e2a2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb4b938992bede4126c43ce46d29477db4e7516337567ffc309eaad701c7e2a2e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9489e70108e17b29f4d36edccfa4230815e9dfac15dda020cb43ea9877da4465" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a09489e70108e17b29f4d36edccfa4230815e9dfac15dda020cb43ea9877da4465a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa035253cf718428ad30d43e6f478167ea89aedbd56287d0395ff155938c07296e9a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223e3980c001a0ffdf6bf546b3db573dc562a193ac5870b5b88dff50eb288cbdb2edb1dfad3089a079a4c9a7fd3609fa0f3fff0cb9379ae4281b78f23bf054e389f9c4262fd9ac31b88a03f887018080078252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a060bdbc102688803f54a5228f5dd6fdb93877ccb02af626152683ded93d2fbdcda076d0a55a6fc84350507d282984e6c3c869964ff920d476afd5a0b2225fa1858ac0c0", + "blockHeader": { + "parentHash": "0x9489e70108e17b29f4d36edccfa4230815e9dfac15dda020cb43ea9877da4465", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x35253cf718428ad30d43e6f478167ea89aedbd56287d0395ff155938c07296e9", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe590b05c99ad9a18ca6c65f4097151c18e85e5470d60af23b3a0e9b78fc018f0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223e39", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xffdf6bf546b3db573dc562a193ac5870b5b88dff50eb288cbdb2edb1dfad3089", + "s": "0x79a4c9a7fd3609fa0f3fff0cb9379ae4281b78f23bf054e389f9c4262fd9ac31", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x60bdbc102688803f54a5228f5dd6fdb93877ccb02af626152683ded93d2fbdcd", + "s": "0x76d0a55a6fc84350507d282984e6c3c869964ff920d476afd5a0b2225fa1858a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe590b05c99ad9a18ca6c65f4097151c18e85e5470d60af23b3a0e9b78fc018f0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e424959", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e2c9bc1dab715d0c17ecf9a546305b38b3e5d403890f293bd2200fdb7ebd6528a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe2c9bc1dab715d0c17ecf9a546305b38b3e5d403890f293bd2200fdb7ebd6528", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcf71d44f17648e4ee0d41d704b3ec8a1261197da9675c1f198cd81be2b44693b" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0cf71d44f17648e4ee0d41d704b3ec8a1261197da9675c1f198cd81be2b44693ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa0963166bc9694d6a79c8d8fb3bd0108f22f452bdbc004904e78913faa630c4646a0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e7c180c080a086f3d909761a09ec06f31015d0acf85c59f8b5f374e589f434d1f7eb91b0e87ca06fd896e4716ab571b055ad0e5ffed5c654f53dda7f65053f4034468882ff3e6eb8e603f8e301808007826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0ebd201a64c07471b2a882c122c78db731668e587d8a33b3e8cdfe2e7917b13afa049eb54c293c91fec4430213c48e9eda347abee605f1e19423175783e958d2387c0c0", + "blockHeader": { + "parentHash": "0xcf71d44f17648e4ee0d41d704b3ec8a1261197da9675c1f198cd81be2b44693b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x963166bc9694d6a79c8d8fb3bd0108f22f452bdbc004904e78913faa630c4646", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6cb749b32723a7dbf8a3b125e515792211e21ea445b2eb95b4b32335ece83687" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e7c1", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x86f3d909761a09ec06f31015d0acf85c59f8b5f374e589f434d1f7eb91b0e87c", + "s": "0x6fd896e4716ab571b055ad0e5ffed5c654f53dda7f65053f4034468882ff3e6e", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xebd201a64c07471b2a882c122c78db731668e587d8a33b3e8cdfe2e7917b13af", + "s": "0x49eb54c293c91fec4430213c48e9eda347abee605f1e19423175783e958d2387", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6cb749b32723a7dbf8a3b125e515792211e21ea445b2eb95b4b32335ece83687", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f2e1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd444914ef2059e0f53eec90e4b663bb8232f86a1a2d01d20b4ee664ae926c9ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd444914ef2059e0f53eec90e4b663bb8232f86a1a2d01d20b4ee664ae926c9b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdf3d82d93c79c276675f3a9a288a45c724907ba4991d7f9e692a08f205b4141a" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0df3d82d93c79c276675f3a9a288a45c724907ba4991d7f9e692a08f205b4141aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0194970f39d952d8f1ba5a65bfbd0cb027b4255ace30777b03a267c2ac4688533a012227eb7cc55376ad6154f238afbf88e260d5db04110871cce61a9a09afecd4aa0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247c7180c080a0279070b3b41022923e2dcc0cd5a6645732438d4a4bf25f6f7dc19c8d043c7e88a00b8e5aae0081c63b034f12a2c357cd07ffbdcdd979e53ca62f0bb4f0bab61634b88a03f8870180800e8252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a07b108e251dd57672f54555136e1af548eb1fc8469136b718235281339280989ca03bb779ed2af560396d4516ad3412d1ba50650e2d30a0320fe8c87c59b8a86711c0c0", + "blockHeader": { + "parentHash": "0xdf3d82d93c79c276675f3a9a288a45c724907ba4991d7f9e692a08f205b4141a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x194970f39d952d8f1ba5a65bfbd0cb027b4255ace30777b03a267c2ac4688533", + "transactionsTrie": "0x12227eb7cc55376ad6154f238afbf88e260d5db04110871cce61a9a09afecd4a", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x37159f14c26b6315b5cd666c83fa82471b7fa5275ffe4f84d587f8ef30e2365b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247c71", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x279070b3b41022923e2dcc0cd5a6645732438d4a4bf25f6f7dc19c8d043c7e88", + "s": "0x0b8e5aae0081c63b034f12a2c357cd07ffbdcdd979e53ca62f0bb4f0bab61634", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7b108e251dd57672f54555136e1af548eb1fc8469136b718235281339280989c", + "s": "0x3bb779ed2af560396d4516ad3412d1ba50650e2d30a0320fe8c87c59b8a86711", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x37159f14c26b6315b5cd666c83fa82471b7fa5275ffe4f84d587f8ef30e2365b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e448791", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203e38", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02bb59dac7ee778c02781cda3905fabb23f01235074d0f1123e2a03bfb15ba925a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2bb59dac7ee778c02781cda3905fabb23f01235074d0f1123e2a03bfb15ba925", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8fcde542f29ef444e5ee32771323868c9ed1198225ef6bcae2492676f3b2e8cd" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a08fcde542f29ef444e5ee32771323868c9ed1198225ef6bcae2492676f3b2e8cda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0062d9b93b787ce46529cf29143c6d442ad7beba4f680f08724fadcd9e918e9b1a0c6b4f920c82be38351cd7acc3f27e3709b8e3518a39d6ef685b54961b6b4393ea0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25cf8180c080a00c9ede77960fa0025e2cda032e6a62669c53d36e5b718766d7474a79282d70e2a04fbf2e954b4f4ab1ccc601b9106feffedd1f8001ebe896b6d62852e9476fa434b8e603f8e30180800e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a03e2f8f78cfbeadfb51038da716bfb2f4ff3f9bd90afd4d00bff3bcb3ebbe93afa068e3eac03dbe1261acd4a7f5d4c16b1de2464853ffdd178a7154f58be7de276ac0c0", + "blockHeader": { + "parentHash": "0x8fcde542f29ef444e5ee32771323868c9ed1198225ef6bcae2492676f3b2e8cd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x062d9b93b787ce46529cf29143c6d442ad7beba4f680f08724fadcd9e918e9b1", + "transactionsTrie": "0xc6b4f920c82be38351cd7acc3f27e3709b8e3518a39d6ef685b54961b6b4393e", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x00d52a17c21574759ed348b220c244b8a656e8b4b946b1701976ccc47fd12f3a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25cf81", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x0c9ede77960fa0025e2cda032e6a62669c53d36e5b718766d7474a79282d70e2", + "s": "0x4fbf2e954b4f4ab1ccc601b9106feffedd1f8001ebe896b6d62852e9476fa434", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x3e2f8f78cfbeadfb51038da716bfb2f4ff3f9bd90afd4d00bff3bcb3ebbe93af", + "s": "0x68e3eac03dbe1261acd4a7f5d4c16b1de2464853ffdd178a7154f58be7de276a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x00d52a17c21574759ed348b220c244b8a656e8b4b946b1701976ccc47fd12f3a", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45daa1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e7c0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b4b938992bede4126c43ce46d29477db4e7516337567ffc309eaad701c7e2a2ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb4b938992bede4126c43ce46d29477db4e7516337567ffc309eaad701c7e2a2e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9489e70108e17b29f4d36edccfa4230815e9dfac15dda020cb43ea9877da4465" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a09489e70108e17b29f4d36edccfa4230815e9dfac15dda020cb43ea9877da4465a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa03024ffaf54ec8d869fc6a4734f628beed92c36540d0164a19642ce975e579020a0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223e3980c001a0ffdf6bf546b3db573dc562a193ac5870b5b88dff50eb288cbdb2edb1dfad3089a079a4c9a7fd3609fa0f3fff0cb9379ae4281b78f23bf054e389f9c4262fd9ac31b88a03f887018007078252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a05dfedc76bea10f9a40d1e5329782925bfe0221dd5b1a87dd226abc233529bb1ba07e6c42a1221a9f5fccb5afe98848ae64293e0b1d83da72bb57038a383feb5ffbc0c0", + "blockHeader": { + "parentHash": "0x9489e70108e17b29f4d36edccfa4230815e9dfac15dda020cb43ea9877da4465", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x3024ffaf54ec8d869fc6a4734f628beed92c36540d0164a19642ce975e579020", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x66f673cd9746d1f2bca43d78b77a584b9a249c93e33bb62ae9024e1360406339" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223e39", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xffdf6bf546b3db573dc562a193ac5870b5b88dff50eb288cbdb2edb1dfad3089", + "s": "0x79a4c9a7fd3609fa0f3fff0cb9379ae4281b78f23bf054e389f9c4262fd9ac31", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x5dfedc76bea10f9a40d1e5329782925bfe0221dd5b1a87dd226abc233529bb1b", + "s": "0x7e6c42a1221a9f5fccb5afe98848ae64293e0b1d83da72bb57038a383feb5ffb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x66f673cd9746d1f2bca43d78b77a584b9a249c93e33bb62ae9024e1360406339", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e424959", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e2c9bc1dab715d0c17ecf9a546305b38b3e5d403890f293bd2200fdb7ebd6528a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe2c9bc1dab715d0c17ecf9a546305b38b3e5d403890f293bd2200fdb7ebd6528", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcf71d44f17648e4ee0d41d704b3ec8a1261197da9675c1f198cd81be2b44693b" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0cf71d44f17648e4ee0d41d704b3ec8a1261197da9675c1f198cd81be2b44693ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa06b635d3ab3a5415522874a29cb000dee9eaf55ddbc301407a6b8e3f945e85e5fa0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e7c180c080a086f3d909761a09ec06f31015d0acf85c59f8b5f374e589f434d1f7eb91b0e87ca06fd896e4716ab571b055ad0e5ffed5c654f53dda7f65053f4034468882ff3e6eb8e603f8e301800707826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a096d0237736b62b449edc34f131cbb379c54def08b4e5670b8c908dc40efbf5bfa059f68c34237a997edc7259a589fc5c3624021b99a23b420881ff425aad22db98c0c0", + "blockHeader": { + "parentHash": "0xcf71d44f17648e4ee0d41d704b3ec8a1261197da9675c1f198cd81be2b44693b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x6b635d3ab3a5415522874a29cb000dee9eaf55ddbc301407a6b8e3f945e85e5f", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf116542d5c359a89b098df649feea3ada2968f81625f80fa755fb3fca34584d3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e7c1", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x86f3d909761a09ec06f31015d0acf85c59f8b5f374e589f434d1f7eb91b0e87c", + "s": "0x6fd896e4716ab571b055ad0e5ffed5c654f53dda7f65053f4034468882ff3e6e", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x96d0237736b62b449edc34f131cbb379c54def08b4e5670b8c908dc40efbf5bf", + "s": "0x59f68c34237a997edc7259a589fc5c3624021b99a23b420881ff425aad22db98", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf116542d5c359a89b098df649feea3ada2968f81625f80fa755fb3fca34584d3", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f2e1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd444914ef2059e0f53eec90e4b663bb8232f86a1a2d01d20b4ee664ae926c9ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd444914ef2059e0f53eec90e4b663bb8232f86a1a2d01d20b4ee664ae926c9b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdf3d82d93c79c276675f3a9a288a45c724907ba4991d7f9e692a08f205b4141a" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0df3d82d93c79c276675f3a9a288a45c724907ba4991d7f9e692a08f205b4141aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09faa4daea2a85ce321b28a168a6c062c732efa6e3ea421802e539375533393d3a0707e929dd1ff6f0c29dbe5e27124bfa7f85d7c24bd0882255aa136ab5f1938bfa0e18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247c7180c080a0279070b3b41022923e2dcc0cd5a6645732438d4a4bf25f6f7dc19c8d043c7e88a00b8e5aae0081c63b034f12a2c357cd07ffbdcdd979e53ca62f0bb4f0bab61634b88a03f8870180070e8252089400000000000000000000000000000000000001000180c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00fa79b627d118136401b6987edfb55657f00b79a78e8eca44a6ca07382011779a01d59e63500c2bf2303e9247b7981bbb55af2d5f4446ca492e3fdae09de00a520c0c0", + "blockHeader": { + "parentHash": "0xdf3d82d93c79c276675f3a9a288a45c724907ba4991d7f9e692a08f205b4141a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9faa4daea2a85ce321b28a168a6c062c732efa6e3ea421802e539375533393d3", + "transactionsTrie": "0x707e929dd1ff6f0c29dbe5e27124bfa7f85d7c24bd0882255aa136ab5f1938bf", + "receiptTrie": "0xe18bcf626336785eeb28b571dbd41ffd7abf49de089e4aa71c3cd96720c5ca3a", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa410", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xef6e01717a89e26767af4448abbcbd618a966c15e9563757af3f2f407c1cd3f4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247c71", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x279070b3b41022923e2dcc0cd5a6645732438d4a4bf25f6f7dc19c8d043c7e88", + "s": "0x0b8e5aae0081c63b034f12a2c357cd07ffbdcdd979e53ca62f0bb4f0bab61634", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5208", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0fa79b627d118136401b6987edfb55657f00b79a78e8eca44a6ca07382011779", + "s": "0x1d59e63500c2bf2303e9247b7981bbb55af2d5f4446ca492e3fdae09de00a520", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xef6e01717a89e26767af4448abbcbd618a966c15e9563757af3f2f407c1cd3f4", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e448791", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e38", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-no_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02bb59dac7ee778c02781cda3905fabb23f01235074d0f1123e2a03bfb15ba925a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2bb59dac7ee778c02781cda3905fabb23f01235074d0f1123e2a03bfb15ba925", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8fcde542f29ef444e5ee32771323868c9ed1198225ef6bcae2492676f3b2e8cd" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a08fcde542f29ef444e5ee32771323868c9ed1198225ef6bcae2492676f3b2e8cda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dde0a6194babea317dd6fed340e305ca09c4f2cb94ba5c083225411157b2009aa03bbf594d75b50dc473f2332b0ef46bc0c3f6d264b22be27b604920cedd70b22ca0b4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc480c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25cf8180c080a00c9ede77960fa0025e2cda032e6a62669c53d36e5b718766d7474a79282d70e2a04fbf2e954b4f4ab1ccc601b9106feffedd1f8001ebe896b6d62852e9476fa434b8e603f8e30180070e826a409400000000000000000000000000000000000001000180f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a09e30c1bbc14cd27b166731e1c6a924a38a0d5b9d9024bc258fea46a265df1574a035c6142059a5a39b5535e843d9ddbe28293547c2a71b0a95a79e319d92d97881c0c0", + "blockHeader": { + "parentHash": "0x8fcde542f29ef444e5ee32771323868c9ed1198225ef6bcae2492676f3b2e8cd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xdde0a6194babea317dd6fed340e305ca09c4f2cb94ba5c083225411157b2009a", + "transactionsTrie": "0x3bbf594d75b50dc473f2332b0ef46bc0c3f6d264b22be27b604920cedd70b22c", + "receiptTrie": "0xb4b3c1965dbd5d539e81b479a81b637e290bd57f549b374bcff472f98919aac7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc48", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd651ee746da7644b001da41b235bc89f4cfb42be4ec2dd65c2a5cdf234c642e8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25cf81", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x0c9ede77960fa0025e2cda032e6a62669c53d36e5b718766d7474a79282d70e2", + "s": "0x4fbf2e954b4f4ab1ccc601b9106feffedd1f8001ebe896b6d62852e9476fa434", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a40", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x9e30c1bbc14cd27b166731e1c6a924a38a0d5b9d9024bc258fea46a265df1574", + "s": "0x35c6142059a5a39b5535e843d9ddbe28293547c2a71b0a95a79e319d92d97881", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd651ee746da7644b001da41b235bc89f4cfb42be4ec2dd65c2a5cdf234c642e8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45daa1", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7c0", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00dc7a18bc3ed01f5a42aeeb7f3da1002af998ae0e4e8d739a26e6f21af146863a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0dc7a18bc3ed01f5a42aeeb7f3da1002af998ae0e4e8d739a26e6f21af146863", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0af64c87aca067b96c4c7d17fe7c1cf55ece7fd8e08d0f12541874057911a390" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a00af64c87aca067b96c4c7d17fe7c1cf55ece7fd8e08d0f12541874057911a390a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a02c6269788db1db6182dac871f08f1033f3a4099e2e467bf1c41aeb0596a085c3a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223e5480c001a0546754c5a3996a9008bfd2791eb5aaabfee78604eb67e051f00dbf512e65dc5da0139afe8532797dac552bd1964d062c3e42a415bc1978a8afb5edc3a1cf2cc7f0b88a03f8870180800782520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a06959339e21ad17968ec7a05241efc6168a05fc67cc94f7f97851079cc77c7d46a0485f1387ffcb64ddc9bd1116bb006eece5e21b115cc1120df579dc69ba925796c0c0", + "blockHeader": { + "parentHash": "0x0af64c87aca067b96c4c7d17fe7c1cf55ece7fd8e08d0f12541874057911a390", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0x2c6269788db1db6182dac871f08f1033f3a4099e2e467bf1c41aeb0596a085c3", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe00ea71ecb9a5639157e111143a713233ef3baa0b9640414aa695c7654b459a0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223e54", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x546754c5a3996a9008bfd2791eb5aaabfee78604eb67e051f00dbf512e65dc5d", + "s": "0x139afe8532797dac552bd1964d062c3e42a415bc1978a8afb5edc3a1cf2cc7f0", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x6959339e21ad17968ec7a05241efc6168a05fc67cc94f7f97851079cc77c7d46", + "s": "0x485f1387ffcb64ddc9bd1116bb006eece5e21b115cc1120df579dc69ba925796", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe00ea71ecb9a5639157e111143a713233ef3baa0b9640414aa695c7654b459a0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e424974", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d3de5fe49e88c08eec590a1943cba280ac510ef4bc0f539d967233522a82d7eaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd3de5fe49e88c08eec590a1943cba280ac510ef4bc0f539d967233522a82d7ea", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x07b88b617cf1c8c8e1d27291ea572b327103b1078573c1af73d4d89d4205740f" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a007b88b617cf1c8c8e1d27291ea572b327103b1078573c1af73d4d89d4205740fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a03ef9908f69b483cde9e35ebb1a88461d916c20ebdc155f21f95e3749545408c8a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e7dc80c080a038aebae5a7bf8cdfe7b8431afba2cfe82fd0a1121c8fb75155856a1f77433632a025afa5ee4f6fa876ed19042020b9612194dad5b55186a522bc4b72a3dff8cb07b8e603f8e301808007826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a01cad126c86f4fd56191f6c693df6efd409db8abff0965bc398791ebb42dc0d8ea012910cd6dbf1e4907f51162e2ab4ab9dd69bd9684493dc56b234357ccf9820acc0c0", + "blockHeader": { + "parentHash": "0x07b88b617cf1c8c8e1d27291ea572b327103b1078573c1af73d4d89d4205740f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0x3ef9908f69b483cde9e35ebb1a88461d916c20ebdc155f21f95e3749545408c8", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x11277b0ea512e017f7f14c15211802571e1acf8ed630fe3d84ee8ba71a402b00" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e7dc", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x38aebae5a7bf8cdfe7b8431afba2cfe82fd0a1121c8fb75155856a1f77433632", + "s": "0x25afa5ee4f6fa876ed19042020b9612194dad5b55186a522bc4b72a3dff8cb07", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x1cad126c86f4fd56191f6c693df6efd409db8abff0965bc398791ebb42dc0d8e", + "s": "0x12910cd6dbf1e4907f51162e2ab4ab9dd69bd9684493dc56b234357ccf9820ac", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x11277b0ea512e017f7f14c15211802571e1acf8ed630fe3d84ee8ba71a402b00", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f2fc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02f4af2b6310bee84921a977f8a94ae002f63ef080fb4fe168e123326689bac79a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2f4af2b6310bee84921a977f8a94ae002f63ef080fb4fe168e123326689bac79", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9dbdb06ab0429694467834edbf861c4d6b94b5683d4b8b13b875352cdc26cb3c" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a09dbdb06ab0429694467834edbf861c4d6b94b5683d4b8b13b875352cdc26cb3ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01b4e1a9c1f8f2d0d6d8f59bdbcf678b10340a586076e3ae8df4a65d71a6fd88ca0558a9fdd1ee89b3cb9ed91540df8e3b5854ee9268eb5bfdcb3ee6de9f267f737a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247ca880c080a06b6c257ba30cca0026c832af6077f7cddc2cec8035ae5789ba8f1c42daa057f9a04b8ded0e819194a480847e78785e22b38e4f58978184fee8f2b2b7ec19b6e54fb88a03f8870180800e82520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a033e0af5033fd1f323b09b5eb8b28755809b27da46f4a428ff2b3c185c08dd4d0a005feab24c19b8528cbfc8f74349d91641bb49eb21e11f9889f3dc9610563ff0fc0c0", + "blockHeader": { + "parentHash": "0x9dbdb06ab0429694467834edbf861c4d6b94b5683d4b8b13b875352cdc26cb3c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1b4e1a9c1f8f2d0d6d8f59bdbcf678b10340a586076e3ae8df4a65d71a6fd88c", + "transactionsTrie": "0x558a9fdd1ee89b3cb9ed91540df8e3b5854ee9268eb5bfdcb3ee6de9f267f737", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x55a146d0395a10179249d29ab1317c24a1d98fd317d1911f6d2b76b03fbf66a7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247ca8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x6b6c257ba30cca0026c832af6077f7cddc2cec8035ae5789ba8f1c42daa057f9", + "s": "0x4b8ded0e819194a480847e78785e22b38e4f58978184fee8f2b2b7ec19b6e54f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x33e0af5033fd1f323b09b5eb8b28755809b27da46f4a428ff2b3c185c08dd4d0", + "s": "0x05feab24c19b8528cbfc8f74349d91641bb49eb21e11f9889f3dc9610563ff0f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x55a146d0395a10179249d29ab1317c24a1d98fd317d1911f6d2b76b03fbf66a7", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e4487c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e30bee86013db8f07c69cefdff0a5c5781157f2bfaef23df1c8e7be39a44ff0fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe30bee86013db8f07c69cefdff0a5c5781157f2bfaef23df1c8e7be39a44ff0f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3d361d6cfc190cbdfac95e9529c4e296351487ca1d42ddd0b8ca986c6abe56cb" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a03d361d6cfc190cbdfac95e9529c4e296351487ca1d42ddd0b8ca986c6abe56cba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa078bea63d1ab16a4685864dcafb0881b59be56af853f3e30de036b6f7a29bd587a07976c5babcd372ce2507e98d2f1f974db5fd12ccf6ed322de3197953f99d35daa06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25cfb880c080a06cd85a3899447645f2f260665aa12b10e6a9a0ac935e0d6411721aea7410a8b7a02486013ad53f6f45611fdce7e7ce22a032eb00b3c30eaffd03a5140c0335b2fcb8e603f8e30180800e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0cba2c173a8b72646e9f1dc0e2e7be050857d90a3bc52f43ec23365b3873cad20a00fa456f6f9103fd212c33a78e1e10bc0efd7f10eb24710a63d342321ddfff229c0c0", + "blockHeader": { + "parentHash": "0x3d361d6cfc190cbdfac95e9529c4e296351487ca1d42ddd0b8ca986c6abe56cb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x78bea63d1ab16a4685864dcafb0881b59be56af853f3e30de036b6f7a29bd587", + "transactionsTrie": "0x7976c5babcd372ce2507e98d2f1f974db5fd12ccf6ed322de3197953f99d35da", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x48bbec0e28a01fab801c8ab0f652e973aac316bdca134ec53d621a0cda736546" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25cfb8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x6cd85a3899447645f2f260665aa12b10e6a9a0ac935e0d6411721aea7410a8b7", + "s": "0x2486013ad53f6f45611fdce7e7ce22a032eb00b3c30eaffd03a5140c0335b2fc", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xcba2c173a8b72646e9f1dc0e2e7be050857d90a3bc52f43ec23365b3873cad20", + "s": "0x0fa456f6f9103fd212c33a78e1e10bc0efd7f10eb24710a63d342321ddfff229", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x48bbec0e28a01fab801c8ab0f652e973aac316bdca134ec53d621a0cda736546", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45dad8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00dc7a18bc3ed01f5a42aeeb7f3da1002af998ae0e4e8d739a26e6f21af146863a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0dc7a18bc3ed01f5a42aeeb7f3da1002af998ae0e4e8d739a26e6f21af146863", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0af64c87aca067b96c4c7d17fe7c1cf55ece7fd8e08d0f12541874057911a390" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a00af64c87aca067b96c4c7d17fe7c1cf55ece7fd8e08d0f12541874057911a390a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a0d5557cd2f6bff443c0a01236efb18852a35fde85496208945c3de43503b37d63a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223e5480c001a0546754c5a3996a9008bfd2791eb5aaabfee78604eb67e051f00dbf512e65dc5da0139afe8532797dac552bd1964d062c3e42a415bc1978a8afb5edc3a1cf2cc7f0b88a03f8870180070782520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a005a016518a99ae0ded668adc6782e0de89583fbe798e6de420542f331c38a845a04dfe19e5003370c5bab18218be5b150c60fa59ebff1d81b3c44da2e501961891c0c0", + "blockHeader": { + "parentHash": "0x0af64c87aca067b96c4c7d17fe7c1cf55ece7fd8e08d0f12541874057911a390", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0xd5557cd2f6bff443c0a01236efb18852a35fde85496208945c3de43503b37d63", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x597171009edd890f7044e12620876ac5f7b86341f8b1ae8cddec90b0ba23c708" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223e54", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x546754c5a3996a9008bfd2791eb5aaabfee78604eb67e051f00dbf512e65dc5d", + "s": "0x139afe8532797dac552bd1964d062c3e42a415bc1978a8afb5edc3a1cf2cc7f0", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x05a016518a99ae0ded668adc6782e0de89583fbe798e6de420542f331c38a845", + "s": "0x4dfe19e5003370c5bab18218be5b150c60fa59ebff1d81b3c44da2e501961891", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x597171009edd890f7044e12620876ac5f7b86341f8b1ae8cddec90b0ba23c708", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e424974", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d3de5fe49e88c08eec590a1943cba280ac510ef4bc0f539d967233522a82d7eaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd3de5fe49e88c08eec590a1943cba280ac510ef4bc0f539d967233522a82d7ea", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x07b88b617cf1c8c8e1d27291ea572b327103b1078573c1af73d4d89d4205740f" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a007b88b617cf1c8c8e1d27291ea572b327103b1078573c1af73d4d89d4205740fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a04033fe250ce33c26184082cf196cde06e96ac3197c3387d0e93dcbd3e9e2d619a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e7dc80c080a038aebae5a7bf8cdfe7b8431afba2cfe82fd0a1121c8fb75155856a1f77433632a025afa5ee4f6fa876ed19042020b9612194dad5b55186a522bc4b72a3dff8cb07b8e603f8e301800707826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0efe02c0e5f252541e7fd202ccd98234fe54b9429cc886a205b2dbb18da25364ca024b022a06fccad812aeae7c3d0adfd7ae0049a999edbee046f2aaf805ff3d829c0c0", + "blockHeader": { + "parentHash": "0x07b88b617cf1c8c8e1d27291ea572b327103b1078573c1af73d4d89d4205740f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0x4033fe250ce33c26184082cf196cde06e96ac3197c3387d0e93dcbd3e9e2d619", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6a49b212df315a2ea9168aaaf9fdc9863167f375c63ff349d3d16be5d90bd418" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e7dc", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x38aebae5a7bf8cdfe7b8431afba2cfe82fd0a1121c8fb75155856a1f77433632", + "s": "0x25afa5ee4f6fa876ed19042020b9612194dad5b55186a522bc4b72a3dff8cb07", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xefe02c0e5f252541e7fd202ccd98234fe54b9429cc886a205b2dbb18da25364c", + "s": "0x24b022a06fccad812aeae7c3d0adfd7ae0049a999edbee046f2aaf805ff3d829", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6a49b212df315a2ea9168aaaf9fdc9863167f375c63ff349d3d16be5d90bd418", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f2fc", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02f4af2b6310bee84921a977f8a94ae002f63ef080fb4fe168e123326689bac79a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x2f4af2b6310bee84921a977f8a94ae002f63ef080fb4fe168e123326689bac79", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9dbdb06ab0429694467834edbf861c4d6b94b5683d4b8b13b875352cdc26cb3c" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a09dbdb06ab0429694467834edbf861c4d6b94b5683d4b8b13b875352cdc26cb3ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c3889691f5629c8c27bea51369d9335dfb48030c903844d0a58e2fedcf6a9ce9a0aadbf8de9853b0aae436c5deede51da0cfbe82a48f32e4416d962054855140b4a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247ca880c080a06b6c257ba30cca0026c832af6077f7cddc2cec8035ae5789ba8f1c42daa057f9a04b8ded0e819194a480847e78785e22b38e4f58978184fee8f2b2b7ec19b6e54fb88a03f8870180070e82520c9400000000000000000000000000000000000001008000c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0f7683aa66a91e5f086a15932367761f467f97e0957384099385db208f67357f6a07b0b81e949ee8d2824de4ced913518e38042d91dd1c34288ee8bffa0a9223a5bc0c0", + "blockHeader": { + "parentHash": "0x9dbdb06ab0429694467834edbf861c4d6b94b5683d4b8b13b875352cdc26cb3c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc3889691f5629c8c27bea51369d9335dfb48030c903844d0a58e2fedcf6a9ce9", + "transactionsTrie": "0xaadbf8de9853b0aae436c5deede51da0cfbe82a48f32e4416d962054855140b4", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8c4dd185c36f1bbb7cc7e0315aab368aa3c8baf6fade5f3f4b368a8ff97ad8fc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247ca8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x6b6c257ba30cca0026c832af6077f7cddc2cec8035ae5789ba8f1c42daa057f9", + "s": "0x4b8ded0e819194a480847e78785e22b38e4f58978184fee8f2b2b7ec19b6e54f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xf7683aa66a91e5f086a15932367761f467f97e0957384099385db208f67357f6", + "s": "0x7b0b81e949ee8d2824de4ced913518e38042d91dd1c34288ee8bffa0a9223a5b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8c4dd185c36f1bbb7cc7e0315aab368aa3c8baf6fade5f3f4b368a8ff97ad8fc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e4487c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e30bee86013db8f07c69cefdff0a5c5781157f2bfaef23df1c8e7be39a44ff0fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe30bee86013db8f07c69cefdff0a5c5781157f2bfaef23df1c8e7be39a44ff0f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3d361d6cfc190cbdfac95e9529c4e296351487ca1d42ddd0b8ca986c6abe56cb" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a03d361d6cfc190cbdfac95e9529c4e296351487ca1d42ddd0b8ca986c6abe56cba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aef1050b57b687b14cbd855df8c7b172aca3df25c512c27f6a369352f9fa6b7ea052ac981b1b2fad39306eeb8af0ce9b952e75cdefbc433562fdb7d5b844ddb2b2a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25cfb880c080a06cd85a3899447645f2f260665aa12b10e6a9a0ac935e0d6411721aea7410a8b7a02486013ad53f6f45611fdce7e7ce22a032eb00b3c30eaffd03a5140c0335b2fcb8e603f8e30180070e826a449400000000000000000000000000000000000001008000f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0aebd4c38d14e6a61dc112ab083ff2e5fd3cb8b35205b0c79cf4b3fae7ce66fe3a03ed02886c81899d057794ec2e797b207e1288bf3b1b80615500aca7945084776c0c0", + "blockHeader": { + "parentHash": "0x3d361d6cfc190cbdfac95e9529c4e296351487ca1d42ddd0b8ca986c6abe56cb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xaef1050b57b687b14cbd855df8c7b172aca3df25c512c27f6a369352f9fa6b7e", + "transactionsTrie": "0x52ac981b1b2fad39306eeb8af0ce9b952e75cdefbc433562fdb7d5b844ddb2b2", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0024ed6aa9609def89110bd7263b4691a843d559419d11deb272477a29f04615" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25cfb8", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x6cd85a3899447645f2f260665aa12b10e6a9a0ac935e0d6411721aea7410a8b7", + "s": "0x2486013ad53f6f45611fdce7e7ce22a032eb00b3c30eaffd03a5140c0335b2fc", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xaebd4c38d14e6a61dc112ab083ff2e5fd3cb8b35205b0c79cf4b3fae7ce66fe3", + "s": "0x3ed02886c81899d057794ec2e797b207e1288bf3b1b80615500aca7945084776", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x0024ed6aa9609def89110bd7263b4691a843d559419d11deb272477a29f04615", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45dad8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a034db5c26364157df66dc5f8ab572eb5e2747c3a9e6f604162739af3ab2d0b0f0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x34db5c26364157df66dc5f8ab572eb5e2747c3a9e6f604162739af3ab2d0b0f0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9438a30db730ea660fa690968235970b665b40ecb913fa97e141378c025f24e0" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a09438a30db730ea660fa690968235970b665b40ecb913fa97e141378c025f24e0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa00b1f2bc81ea7133902e69996c2a91ff005b1b82e95fac4e885804ad8b25c048ea05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223e5580c001a01278ac7a018bbd1dbd33909df329d2ac8df4377b99307364b362dc65810a5989a0497652df7d726e75cce7f9c2f4e3edd6490cb72aed70efbb4da15a5f001e4b14b88a03f8870180800782520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0230a4b3674fa190f9593614cf09656c46086984c59dc0e2cc920a10ba1d0fbbca03e4362b59329422d1d411acd035f32e935fd8adc9eace15e753259e334733e0ec0c0", + "blockHeader": { + "parentHash": "0x9438a30db730ea660fa690968235970b665b40ecb913fa97e141378c025f24e0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x0b1f2bc81ea7133902e69996c2a91ff005b1b82e95fac4e885804ad8b25c048e", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f9d860cf462401b2c73ed0a53ea46c6cb9566db40aea090fcd87f1b2f215ea2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223e55", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x1278ac7a018bbd1dbd33909df329d2ac8df4377b99307364b362dc65810a5989", + "s": "0x497652df7d726e75cce7f9c2f4e3edd6490cb72aed70efbb4da15a5f001e4b14", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x230a4b3674fa190f9593614cf09656c46086984c59dc0e2cc920a10ba1d0fbbc", + "s": "0x3e4362b59329422d1d411acd035f32e935fd8adc9eace15e753259e334733e0e", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4f9d860cf462401b2c73ed0a53ea46c6cb9566db40aea090fcd87f1b2f215ea2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e424975", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09049316f1218649779064a98d91817c45222689a5848a80281133efd6e16ad6ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9049316f1218649779064a98d91817c45222689a5848a80281133efd6e16ad6c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x186604907cdaad65c8f57cd12678aada63fd02d9e32f57a9f0cef8937671e81f" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0186604907cdaad65c8f57cd12678aada63fd02d9e32f57a9f0cef8937671e81fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa001e543b0d04a1ba064108457b90ab1cbfcb10d18ad3daabda9bf3200ea7e8818a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e7dd80c001a086cde604003a78dd1afd5844eac1a910ccd82b2d76bf18db184aedf2fba453dba00cd10c4cde47f1938ff102dece18c1116666e8f89579c8c702abe3b27cf3c7a1b8e603f8e301808007826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a052ccd29cd94dc128a0aab8d436e933d0ede9eb483c1d9d8521c2592e8b1062eca07e5c09cf9a89dc3e373479d3aaa2acd89464f5841e37722bbea7e54846bd4701c0c0", + "blockHeader": { + "parentHash": "0x186604907cdaad65c8f57cd12678aada63fd02d9e32f57a9f0cef8937671e81f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x01e543b0d04a1ba064108457b90ab1cbfcb10d18ad3daabda9bf3200ea7e8818", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6b75a518b9fa6df933ec36834a5807130893ed1ceef2791bf1a113bf61e33e9f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e7dd", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x86cde604003a78dd1afd5844eac1a910ccd82b2d76bf18db184aedf2fba453db", + "s": "0x0cd10c4cde47f1938ff102dece18c1116666e8f89579c8c702abe3b27cf3c7a1", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x52ccd29cd94dc128a0aab8d436e933d0ede9eb483c1d9d8521c2592e8b1062ec", + "s": "0x7e5c09cf9a89dc3e373479d3aaa2acd89464f5841e37722bbea7e54846bd4701", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6b75a518b9fa6df933ec36834a5807130893ed1ceef2791bf1a113bf61e33e9f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f2fd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc498ed3e30e9f3e1d8ad522d8f2cf8d4bc35a387d941c561fe0d1a908a7d552a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc498ed3e30e9f3e1d8ad522d8f2cf8d4bc35a387d941c561fe0d1a908a7d552", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf493ae85fa7a9109e41dcc857f69ec55f0021832a5eb5061b11a8b9eeb03569c" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0f493ae85fa7a9109e41dcc857f69ec55f0021832a5eb5061b11a8b9eeb03569ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ade7ec0a998cfff9b6ecec6b58622f663251f9012cdb7b396bd03c91a58d1648a07220935b9b9a94e7c3deb9b409003b2b9ac59b5781b437ca495d54efb943a480a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247ca980c001a02cc815e61d6a97008bbcdb0fc9e71ca5af8998d0847cc1aa63d5b46cb79c8519a05c2770348828142794fc936af4922d8fcababef7f86ae6e50b86da1931abd622b88a03f8870180800e82520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0cefeaaedcf98e6c7efbbb7730eb53037796b915470bd75c6aae6a828095f253ba052215f2047423f25ef26d6c63a15658c5a8e74b181b245b709c0c2537a3d7c13c0c0", + "blockHeader": { + "parentHash": "0xf493ae85fa7a9109e41dcc857f69ec55f0021832a5eb5061b11a8b9eeb03569c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xade7ec0a998cfff9b6ecec6b58622f663251f9012cdb7b396bd03c91a58d1648", + "transactionsTrie": "0x7220935b9b9a94e7c3deb9b409003b2b9ac59b5781b437ca495d54efb943a480", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x402a6fe0698e71cfd5581df4109dee93075ea4dbed2b2ee5623e63fc938b2f99" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247ca9", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x2cc815e61d6a97008bbcdb0fc9e71ca5af8998d0847cc1aa63d5b46cb79c8519", + "s": "0x5c2770348828142794fc936af4922d8fcababef7f86ae6e50b86da1931abd622", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xcefeaaedcf98e6c7efbbb7730eb53037796b915470bd75c6aae6a828095f253b", + "s": "0x52215f2047423f25ef26d6c63a15658c5a8e74b181b245b709c0c2537a3d7c13", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x402a6fe0698e71cfd5581df4109dee93075ea4dbed2b2ee5623e63fc938b2f99", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e4487c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203e54", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a060ce453a7f38fddd11c7bb85903bbdf256d202d99b0107159e15e64b4cc01063a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x60ce453a7f38fddd11c7bb85903bbdf256d202d99b0107159e15e64b4cc01063", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x360bbdc1167230e52f9d7f309ae1fd7f593ba10bfb44d34efa24da3cc7384d01" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0360bbdc1167230e52f9d7f309ae1fd7f593ba10bfb44d34efa24da3cc7384d01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01f48ed5d9b99945d5e162d5a1821c328f6001f7ea904cd5659d1500a23768c8ca095d7dda3ff2a46eadff2cf21e5a4da3775d2bc82a47350c2878515aac3090714a06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25cfb980c001a0e1394c690f3f549e1b6812a1e28a1441cb4239dfee40d69298b7258fa41d39aea0409b50ad270e9abf4f9982354a765a875fe3f4e5151379cc37be0a797c102e43b8e603f8e30180800e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a01368c44f78322fdb92a8cb146e98175d3ac3e33e8835021b24002ca179563d2aa06777ca9ce4691236834bce569bbea41de83f45d8fd31c1028355fdaf858e85dcc0c0", + "blockHeader": { + "parentHash": "0x360bbdc1167230e52f9d7f309ae1fd7f593ba10bfb44d34efa24da3cc7384d01", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1f48ed5d9b99945d5e162d5a1821c328f6001f7ea904cd5659d1500a23768c8c", + "transactionsTrie": "0x95d7dda3ff2a46eadff2cf21e5a4da3775d2bc82a47350c2878515aac3090714", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8779d340c572ac9b8741f8fbce7ce1fd6d95da487a6d74add20f1fb0d4456605" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25cfb9", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xe1394c690f3f549e1b6812a1e28a1441cb4239dfee40d69298b7258fa41d39ae", + "s": "0x409b50ad270e9abf4f9982354a765a875fe3f4e5151379cc37be0a797c102e43", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x1368c44f78322fdb92a8cb146e98175d3ac3e33e8835021b24002ca179563d2a", + "s": "0x6777ca9ce4691236834bce569bbea41de83f45d8fd31c1028355fdaf858e85dc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8779d340c572ac9b8741f8fbce7ce1fd6d95da487a6d74add20f1fb0d4456605", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45dad9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e7dc", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a034db5c26364157df66dc5f8ab572eb5e2747c3a9e6f604162739af3ab2d0b0f0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x34db5c26364157df66dc5f8ab572eb5e2747c3a9e6f604162739af3ab2d0b0f0", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9438a30db730ea660fa690968235970b665b40ecb913fa97e141378c025f24e0" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a09438a30db730ea660fa690968235970b665b40ecb913fa97e141378c025f24e0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa06154b44b927f76fc5633ac958973cc4627c14ec052e39d7f6018ae202abb5162a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223e5580c001a01278ac7a018bbd1dbd33909df329d2ac8df4377b99307364b362dc65810a5989a0497652df7d726e75cce7f9c2f4e3edd6490cb72aed70efbb4da15a5f001e4b14b88a03f8870180070782520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a058da4ed58684aaeab0d9fb81bbc8d0ed7b9677f6f335f3be04992ae74e1f2aa7a0237400ceadd895f35550ee3ff96c9e96e7e495da60e215a17b108b6fabe514d9c0c0", + "blockHeader": { + "parentHash": "0x9438a30db730ea660fa690968235970b665b40ecb913fa97e141378c025f24e0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x6154b44b927f76fc5633ac958973cc4627c14ec052e39d7f6018ae202abb5162", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6e61c2cd27ccb5231b3beaa8d81cd8f52f7ce8a15ec64f64aa9687d911a757e1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223e55", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x1278ac7a018bbd1dbd33909df329d2ac8df4377b99307364b362dc65810a5989", + "s": "0x497652df7d726e75cce7f9c2f4e3edd6490cb72aed70efbb4da15a5f001e4b14", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x58da4ed58684aaeab0d9fb81bbc8d0ed7b9677f6f335f3be04992ae74e1f2aa7", + "s": "0x237400ceadd895f35550ee3ff96c9e96e7e495da60e215a17b108b6fabe514d9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6e61c2cd27ccb5231b3beaa8d81cd8f52f7ce8a15ec64f64aa9687d911a757e1", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e424975", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09049316f1218649779064a98d91817c45222689a5848a80281133efd6e16ad6ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9049316f1218649779064a98d91817c45222689a5848a80281133efd6e16ad6c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x186604907cdaad65c8f57cd12678aada63fd02d9e32f57a9f0cef8937671e81f" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0186604907cdaad65c8f57cd12678aada63fd02d9e32f57a9f0cef8937671e81fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa013e8b655a6827def76ce32e64293e5c65c464b572f0cd4a993e1c014c4db3b7da06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e7dd80c001a086cde604003a78dd1afd5844eac1a910ccd82b2d76bf18db184aedf2fba453dba00cd10c4cde47f1938ff102dece18c1116666e8f89579c8c702abe3b27cf3c7a1b8e603f8e301800707826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0b09d7c5d094b16b74eb224e54baa4ca675bdaddbdf8361d6813aa9784aefbddfa05c3c01185da4fec57149bbc75504f899f7194c0e9e0da64dce9926319f693bc9c0c0", + "blockHeader": { + "parentHash": "0x186604907cdaad65c8f57cd12678aada63fd02d9e32f57a9f0cef8937671e81f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x13e8b655a6827def76ce32e64293e5c65c464b572f0cd4a993e1c014c4db3b7d", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x458805f49775b8184254ac7d7ef55f51b50964e9200b0b50bd19eb4fc681d4fe" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e7dd", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x86cde604003a78dd1afd5844eac1a910ccd82b2d76bf18db184aedf2fba453db", + "s": "0x0cd10c4cde47f1938ff102dece18c1116666e8f89579c8c702abe3b27cf3c7a1", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xb09d7c5d094b16b74eb224e54baa4ca675bdaddbdf8361d6813aa9784aefbddf", + "s": "0x5c3c01185da4fec57149bbc75504f899f7194c0e9e0da64dce9926319f693bc9", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x458805f49775b8184254ac7d7ef55f51b50964e9200b0b50bd19eb4fc681d4fe", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f2fd", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc498ed3e30e9f3e1d8ad522d8f2cf8d4bc35a387d941c561fe0d1a908a7d552a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc498ed3e30e9f3e1d8ad522d8f2cf8d4bc35a387d941c561fe0d1a908a7d552", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf493ae85fa7a9109e41dcc857f69ec55f0021832a5eb5061b11a8b9eeb03569c" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0f493ae85fa7a9109e41dcc857f69ec55f0021832a5eb5061b11a8b9eeb03569ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0116ad169b98c885a08e68a4e3da80113f2b98d4e214e7d8a4b9d955e329c46d7a0aad0fde6bfba89ed403771a249d1c190c0ef27a07bb34689c1c7bf5e0eb9a351a05f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fdab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4140c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247ca980c001a02cc815e61d6a97008bbcdb0fc9e71ca5af8998d0847cc1aa63d5b46cb79c8519a05c2770348828142794fc936af4922d8fcababef7f86ae6e50b86da1931abd622b88a03f8870180070e82520c9400000000000000000000000000000000000001000100c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a09118f52f3cd19b91d35e7fe9ece4389bbb59b855406a43c68bd5a4e28c70ccbaa079dc6e43500a56e8a36581f356bf0756962f7575d0f0e5c510860910f2ebc9aec0c0", + "blockHeader": { + "parentHash": "0xf493ae85fa7a9109e41dcc857f69ec55f0021832a5eb5061b11a8b9eeb03569c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x116ad169b98c885a08e68a4e3da80113f2b98d4e214e7d8a4b9d955e329c46d7", + "transactionsTrie": "0xaad0fde6bfba89ed403771a249d1c190c0ef27a07bb34689c1c7bf5e0eb9a351", + "receiptTrie": "0x5f731a16ac552da048f8b2f43c62bb3f14bb612ea5386e0f6b1ccfc645733fda", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa414", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe45a159aaa48ee34a40ce320e32208d54b0c102572d49a85a60176c9aa5e591b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247ca9", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x2cc815e61d6a97008bbcdb0fc9e71ca5af8998d0847cc1aa63d5b46cb79c8519", + "s": "0x5c2770348828142794fc936af4922d8fcababef7f86ae6e50b86da1931abd622", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x520c", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x9118f52f3cd19b91d35e7fe9ece4389bbb59b855406a43c68bd5a4e28c70ccba", + "s": "0x79dc6e43500a56e8a36581f356bf0756962f7575d0f0e5c510860910f2ebc9ae", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe45a159aaa48ee34a40ce320e32208d54b0c102572d49a85a60176c9aa5e591b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e4487c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023e54", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_zero_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a060ce453a7f38fddd11c7bb85903bbdf256d202d99b0107159e15e64b4cc01063a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x60ce453a7f38fddd11c7bb85903bbdf256d202d99b0107159e15e64b4cc01063", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x360bbdc1167230e52f9d7f309ae1fd7f593ba10bfb44d34efa24da3cc7384d01" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0360bbdc1167230e52f9d7f309ae1fd7f593ba10bfb44d34efa24da3cc7384d01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09fec9c1635e4a7adba61f349e22f31f7431ad66da5a95e2472b6936084fe09a8a0eb90d6028fa177afbe12fc225d09ea5394c55e817ad74a7a5c723e3980c17d1fa06aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc4c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25cfb980c001a0e1394c690f3f549e1b6812a1e28a1441cb4239dfee40d69298b7258fa41d39aea0409b50ad270e9abf4f9982354a765a875fe3f4e5151379cc37be0a797c102e43b8e603f8e30180070e826a449400000000000000000000000000000000000001000100f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0d4e1fec09034c071a1059fa21bcf99a53844cb8b66daa49172941f5ea5efd5f4a069d1e99099b1eb1755bcc0964a7ba4bfa97e314db107ed57f77eb6cdd079bf23c0c0", + "blockHeader": { + "parentHash": "0x360bbdc1167230e52f9d7f309ae1fd7f593ba10bfb44d34efa24da3cc7384d01", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9fec9c1635e4a7adba61f349e22f31f7431ad66da5a95e2472b6936084fe09a8", + "transactionsTrie": "0xeb90d6028fa177afbe12fc225d09ea5394c55e817ad74a7a5c723e3980c17d1f", + "receiptTrie": "0x6aa43669fa788b73258c11a7b563fa2c09fcd381a329efd844e3dec5a94b852e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc4c", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1c9d7e856ef4e0c51207de2c710b51447b2a9494957cde2ce93df50af9728016" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25cfb9", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xe1394c690f3f549e1b6812a1e28a1441cb4239dfee40d69298b7258fa41d39ae", + "s": "0x409b50ad270e9abf4f9982354a765a875fe3f4e5151379cc37be0a797c102e43", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a44", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x00", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xd4e1fec09034c071a1059fa21bcf99a53844cb8b66daa49172941f5ea5efd5f4", + "s": "0x69d1e99099b1eb1755bcc0964a7ba4bfa97e314db107ed57f77eb6cdd079bf23", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1c9d7e856ef4e0c51207de2c710b51447b2a9494957cde2ce93df50af9728016", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45dad9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e7dc", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0da68edd02e87bf950153c784a4330912a528d4980a95f5d16262c8ae5b13f9c5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xda68edd02e87bf950153c784a4330912a528d4980a95f5d16262c8ae5b13f9c5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x42a5731c540d869d8cdd5e7c38f693a4d2196353a143d37bd1217a2f3f54025d" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a042a5731c540d869d8cdd5e7c38f693a4d2196353a143d37bd1217a2f3f54025da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a0392701a8d52fa390d1f6febc2da2f2b3ff7da3503d495a24b72ed1e73b1baa45a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223ea880c001a02d02f4f5d246e176f493263e02d88766412db0e6b024d375ea762ee7cfd258b0a004bcf6bbb6240be4618669b2223dc887fca2a4aa49a2822ef9e2dc5b7a47fa46b88a03f887018080078252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0facdbf0c1b41fdf0b02054531b99bcd10232f3850c5b96556ed53725236eb0e1a05de408479d4886ceaef42e7419ddd1e3d3b4f71c690ca3de8882c813462c5767c0c0", + "blockHeader": { + "parentHash": "0x42a5731c540d869d8cdd5e7c38f693a4d2196353a143d37bd1217a2f3f54025d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0x392701a8d52fa390d1f6febc2da2f2b3ff7da3503d495a24b72ed1e73b1baa45", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1076a1d37e62c1a068f50c02f6e7a80918d8511447a9f915facd47423ff781d4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223ea8", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x2d02f4f5d246e176f493263e02d88766412db0e6b024d375ea762ee7cfd258b0", + "s": "0x04bcf6bbb6240be4618669b2223dc887fca2a4aa49a2822ef9e2dc5b7a47fa46", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xfacdbf0c1b41fdf0b02054531b99bcd10232f3850c5b96556ed53725236eb0e1", + "s": "0x5de408479d4886ceaef42e7419ddd1e3d3b4f71c690ca3de8882c813462c5767", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1076a1d37e62c1a068f50c02f6e7a80918d8511447a9f915facd47423ff781d4", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e4249c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a063d7f0ac704f379192f85bb3b3f05fc5a1b00723aca90984c8256d9af24cefa1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x63d7f0ac704f379192f85bb3b3f05fc5a1b00723aca90984c8256d9af24cefa1", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd0ab978bfa72b8e5cee9bf97f4020694065559ed0c245e76b32b192f20f16502" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0d0ab978bfa72b8e5cee9bf97f4020694065559ed0c245e76b32b192f20f16502a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a0dc280139bcc24f478b4fe7670cbb2d3e200bff59cd7f8bbb11247c4b6a8782e0a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e83080c080a05642ece03b3ee36137c6f50080ada61fb21bc37b01314d1d2459d19bc0996856a07972576d468fc0a5432390d2619b5ec485c1250b5efc503973e19c4e769133f5b8e603f8e301808007826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a08855b3a8deedb8f33991803a5a90d8ba39710ba51f2c220c8215122d16bfe828a025826358a8c276c2e05f8c69eb9dcba257e5dd880403527b0b7afac2219a76b8c0c0", + "blockHeader": { + "parentHash": "0xd0ab978bfa72b8e5cee9bf97f4020694065559ed0c245e76b32b192f20f16502", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0xdc280139bcc24f478b4fe7670cbb2d3e200bff59cd7f8bbb11247c4b6a8782e0", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe71cede4deda94db588f98bd0b854fd45580d067ec3a77921e9ea745341b6e61" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e830", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x5642ece03b3ee36137c6f50080ada61fb21bc37b01314d1d2459d19bc0996856", + "s": "0x7972576d468fc0a5432390d2619b5ec485c1250b5efc503973e19c4e769133f5", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x8855b3a8deedb8f33991803a5a90d8ba39710ba51f2c220c8215122d16bfe828", + "s": "0x25826358a8c276c2e05f8c69eb9dcba257e5dd880403527b0b7afac2219a76b8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe71cede4deda94db588f98bd0b854fd45580d067ec3a77921e9ea745341b6e61", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f350", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f72eab1dad9d2f65efd6e51ae873e56cab6f23c64e58933d3b3bda0693e8638a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6f72eab1dad9d2f65efd6e51ae873e56cab6f23c64e58933d3b3bda0693e8638", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6d565d1adc0df6ea31a81b2b2f9ba176ccbc736d68c5655c5d9d627b8123431f" + }, + "blocks": [ + { + "rlp": "0xf9033ff90242a06d565d1adc0df6ea31a81b2b2f9ba176ccbc736d68c5655c5d9d627b8123431fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06d9281d8cd2750cd3e6f33f405496507c7fdcc9e7b1715b1545eb6fe122fece9a0a8d883d592ef4ed94958b116241e7f6c92e6a7b2e0da8bf01b6343d5ec7ba5baa050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f6b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247d5080c001a0e92c70cddf7ad706f229d61f7eeaa20033cfbe88c207e6c99412b06394fba2fba024777581da0305d2408127ee037b09287734e052722cdf99db60fe7b7a29185ab88903f8860180800e8252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0db750b8a7504617d165cb5757e16d43787ae7b394edfbf718dde237ea84abc2c9fdba2c31ad78e8654308d7de46bce100a353c3a62fece44621b7cd9114c4b0bc0c0", + "blockHeader": { + "parentHash": "0x6d565d1adc0df6ea31a81b2b2f9ba176ccbc736d68c5655c5d9d627b8123431f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6d9281d8cd2750cd3e6f33f405496507c7fdcc9e7b1715b1545eb6fe122fece9", + "transactionsTrie": "0xa8d883d592ef4ed94958b116241e7f6c92e6a7b2e0da8bf01b6343d5ec7ba5ba", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x20870b968067a31e2252ad50935c801a06c6cc4d297df6615c4c39076f7ef18d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247d50", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xe92c70cddf7ad706f229d61f7eeaa20033cfbe88c207e6c99412b06394fba2fb", + "s": "0x24777581da0305d2408127ee037b09287734e052722cdf99db60fe7b7a29185a", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xdb750b8a7504617d165cb5757e16d43787ae7b394edfbf718dde237ea84abc2c", + "s": "0xdba2c31ad78e8654308d7de46bce100a353c3a62fece44621b7cd9114c4b0b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x20870b968067a31e2252ad50935c801a06c6cc4d297df6615c4c39076f7ef18d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e448870", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c18042fe18db2b4f95449374533177c2368b41cee7ae73b87b56795d5b6c986da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc18042fe18db2b4f95449374533177c2368b41cee7ae73b87b56795d5b6c986d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x271908aaced3e2ed123a1a0aadd6e07177ab7d617fef4c02665a654a6f68992f" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0271908aaced3e2ed123a1a0aadd6e07177ab7d617fef4c02665a654a6f68992fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04b8149177f7c07cadf47fd1542e3211b623343b8808d20b8f6f770551c356fd4a06c9e420870819f42704b2151ab31cd15ff903b85df001bbe7c6fa7a7dda957e6a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25d06080c080a0a488ccccbbc64af7e06a0d8b8d87a078691bad4f9d16389d009942fd3281c1c5a00f61ad5314f375b775f737a1b201e09c31049a5311ad5dfbb7cf70eb8747450cb8e603f8e30180800e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0f4108185dc87512f51cc4a33641aeab134bb4a3c1fa2d8d59fcbc14e8fc47264a009f43b8a3206b8677e9535266f1cabca3aec3f166676000c35db6ba88f90d15dc0c0", + "blockHeader": { + "parentHash": "0x271908aaced3e2ed123a1a0aadd6e07177ab7d617fef4c02665a654a6f68992f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4b8149177f7c07cadf47fd1542e3211b623343b8808d20b8f6f770551c356fd4", + "transactionsTrie": "0x6c9e420870819f42704b2151ab31cd15ff903b85df001bbe7c6fa7a7dda957e6", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x302b1573b6e2a8ed6e76e898af475d4e269d08fbe8bcc7070b8925fa4e51c990" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25d060", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xa488ccccbbc64af7e06a0d8b8d87a078691bad4f9d16389d009942fd3281c1c5", + "s": "0x0f61ad5314f375b775f737a1b201e09c31049a5311ad5dfbb7cf70eb8747450c", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xf4108185dc87512f51cc4a33641aeab134bb4a3c1fa2d8d59fcbc14e8fc47264", + "s": "0x09f43b8a3206b8677e9535266f1cabca3aec3f166676000c35db6ba88f90d15d", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x302b1573b6e2a8ed6e76e898af475d4e269d08fbe8bcc7070b8925fa4e51c990", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45db80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0da68edd02e87bf950153c784a4330912a528d4980a95f5d16262c8ae5b13f9c5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xda68edd02e87bf950153c784a4330912a528d4980a95f5d16262c8ae5b13f9c5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x42a5731c540d869d8cdd5e7c38f693a4d2196353a143d37bd1217a2f3f54025d" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a042a5731c540d869d8cdd5e7c38f693a4d2196353a143d37bd1217a2f3f54025da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a0c6e0dc228c7cc939428653a8b7695c7b1ad0f2671471fae8fba73691bc78c851a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223ea880c001a02d02f4f5d246e176f493263e02d88766412db0e6b024d375ea762ee7cfd258b0a004bcf6bbb6240be4618669b2223dc887fca2a4aa49a2822ef9e2dc5b7a47fa46b88a03f887018007078252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a04f6c397e28c087aa0d4cea026de9974ddb554145af489334e008b6e62ea196e5a04cf5ff9caf66296263da6bc545419fc9b2207849a20e32361da21db5fb5b146ac0c0", + "blockHeader": { + "parentHash": "0x42a5731c540d869d8cdd5e7c38f693a4d2196353a143d37bd1217a2f3f54025d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0xc6e0dc228c7cc939428653a8b7695c7b1ad0f2671471fae8fba73691bc78c851", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd408c7c368679c833511723ed420bb40132e85f6466e4d6db5d75076bb113068" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223ea8", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x2d02f4f5d246e176f493263e02d88766412db0e6b024d375ea762ee7cfd258b0", + "s": "0x04bcf6bbb6240be4618669b2223dc887fca2a4aa49a2822ef9e2dc5b7a47fa46", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x4f6c397e28c087aa0d4cea026de9974ddb554145af489334e008b6e62ea196e5", + "s": "0x4cf5ff9caf66296263da6bc545419fc9b2207849a20e32361da21db5fb5b146a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd408c7c368679c833511723ed420bb40132e85f6466e4d6db5d75076bb113068", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e4249c8", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a063d7f0ac704f379192f85bb3b3f05fc5a1b00723aca90984c8256d9af24cefa1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x63d7f0ac704f379192f85bb3b3f05fc5a1b00723aca90984c8256d9af24cefa1", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd0ab978bfa72b8e5cee9bf97f4020694065559ed0c245e76b32b192f20f16502" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0d0ab978bfa72b8e5cee9bf97f4020694065559ed0c245e76b32b192f20f16502a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237a018daa08b6168b940b21987f5a244a7202bd774a536992278fca04182aa868b35a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e83080c080a05642ece03b3ee36137c6f50080ada61fb21bc37b01314d1d2459d19bc0996856a07972576d468fc0a5432390d2619b5ec485c1250b5efc503973e19c4e769133f5b8e603f8e301800707826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a083e0900f85182314c02416b5efeb266d2121de2bf65fc2fc7e83eff127aad809a029bec929e99f461d103bdbcdb29d58ee6a02a995bb48b30c3330fdf688c11890c0c0", + "blockHeader": { + "parentHash": "0xd0ab978bfa72b8e5cee9bf97f4020694065559ed0c245e76b32b192f20f16502", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcd43dd891774797fb90a19035b5a78e088e068efb52562dbbfb4c15819fba237", + "transactionsTrie": "0x18daa08b6168b940b21987f5a244a7202bd774a536992278fca04182aa868b35", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x139855c34c82a6bc4fb716ad905e871bdc44c4241c3f26e93c185f28ffd2afe8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e830", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x5642ece03b3ee36137c6f50080ada61fb21bc37b01314d1d2459d19bc0996856", + "s": "0x7972576d468fc0a5432390d2619b5ec485c1250b5efc503973e19c4e769133f5", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x83e0900f85182314c02416b5efeb266d2121de2bf65fc2fc7e83eff127aad809", + "s": "0x29bec929e99f461d103bdbcdb29d58ee6a02a995bb48b30c3330fdf688c11890", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x139855c34c82a6bc4fb716ad905e871bdc44c4241c3f26e93c185f28ffd2afe8", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f350", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06f72eab1dad9d2f65efd6e51ae873e56cab6f23c64e58933d3b3bda0693e8638a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6f72eab1dad9d2f65efd6e51ae873e56cab6f23c64e58933d3b3bda0693e8638", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6d565d1adc0df6ea31a81b2b2f9ba176ccbc736d68c5655c5d9d627b8123431f" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a06d565d1adc0df6ea31a81b2b2f9ba176ccbc736d68c5655c5d9d627b8123431fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c15c4a328a7ada92d756dfeb508f8bdea61e09f08e6bf12299d72809bd73f91ba06ecc68fc77d6b6cb7fbd6a7fbb8a81c461b0a307bbe2c4289dc112a1f34caa4aa050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247d5080c001a0e92c70cddf7ad706f229d61f7eeaa20033cfbe88c207e6c99412b06394fba2fba024777581da0305d2408127ee037b09287734e052722cdf99db60fe7b7a29185ab88a03f8870180070e8252189400000000000000000000000000000000000001008001c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0c8adf83849ae3e89cdf8a5160cd9332260606bca46baae74e3270fbc119a210aa00699793e9eeb455fb19c1f91ff70f9d0bdd3eb3272b0170f28411c9cb3ed3fadc0c0", + "blockHeader": { + "parentHash": "0x6d565d1adc0df6ea31a81b2b2f9ba176ccbc736d68c5655c5d9d627b8123431f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc15c4a328a7ada92d756dfeb508f8bdea61e09f08e6bf12299d72809bd73f91b", + "transactionsTrie": "0x6ecc68fc77d6b6cb7fbd6a7fbb8a81c461b0a307bbe2c4289dc112a1f34caa4a", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb988ad3bee198d92d40a2af21c55db471b491a62b90ffc018a1eb091801d12bb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247d50", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0xe92c70cddf7ad706f229d61f7eeaa20033cfbe88c207e6c99412b06394fba2fb", + "s": "0x24777581da0305d2408127ee037b09287734e052722cdf99db60fe7b7a29185a", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xc8adf83849ae3e89cdf8a5160cd9332260606bca46baae74e3270fbc119a210a", + "s": "0x0699793e9eeb455fb19c1f91ff70f9d0bdd3eb3272b0170f28411c9cb3ed3fad", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb988ad3bee198d92d40a2af21c55db471b491a62b90ffc018a1eb091801d12bb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e448870", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_0-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c18042fe18db2b4f95449374533177c2368b41cee7ae73b87b56795d5b6c986da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc18042fe18db2b4f95449374533177c2368b41cee7ae73b87b56795d5b6c986d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x271908aaced3e2ed123a1a0aadd6e07177ab7d617fef4c02665a654a6f68992f" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0271908aaced3e2ed123a1a0aadd6e07177ab7d617fef4c02665a654a6f68992fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0032a7c5575b3627a4bff038ee41f5cf96b42e9cca0817d58b41660d0bf4dc916a03505b16d0362d36a59f87e4c63f89b0cfdd19c5f108d317b4215b1e897922a1ba017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25d06080c080a0a488ccccbbc64af7e06a0d8b8d87a078691bad4f9d16389d009942fd3281c1c5a00f61ad5314f375b775f737a1b201e09c31049a5311ad5dfbb7cf70eb8747450cb8e603f8e30180070e826a509400000000000000000000000000000000000001008001f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a073e02820fc1cf49348efa26ac84e18bd01f0d9bbb6562a075c91e1072c43481aa052dbef0b02487293c36e11af5b66a9ac3f0250486228615005c2d3cb4badba8fc0c0", + "blockHeader": { + "parentHash": "0x271908aaced3e2ed123a1a0aadd6e07177ab7d617fef4c02665a654a6f68992f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x032a7c5575b3627a4bff038ee41f5cf96b42e9cca0817d58b41660d0bf4dc916", + "transactionsTrie": "0x3505b16d0362d36a59f87e4c63f89b0cfdd19c5f108d317b4215b1e897922a1b", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x07154f50ab7f03295ad9631501c6d4385bb038cfba29653e65e0eb2159a8a6fb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25d060", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0xa488ccccbbc64af7e06a0d8b8d87a078691bad4f9d16389d009942fd3281c1c5", + "s": "0x0f61ad5314f375b775f737a1b201e09c31049a5311ad5dfbb7cf70eb8747450c", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x73e02820fc1cf49348efa26ac84e18bd01f0d9bbb6562a075c91e1072c43481a", + "s": "0x52dbef0b02487293c36e11af5b66a9ac3f0250486228615005c2d3cb4badba8f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x07154f50ab7f03295ad9631501c6d4385bb038cfba29653e65e0eb2159a8a6fb", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45db80", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0689154112c5b60cf7defc1f9aba085c7e792e5eb4e7ef3ed91a02e57d6128527a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x689154112c5b60cf7defc1f9aba085c7e792e5eb4e7ef3ed91a02e57d6128527", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f88d5b8280ef7e6b9e1e838e7274f7855651a9ed1472be3e4d3af4c0cada65e" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a04f88d5b8280ef7e6b9e1e838e7274f7855651a9ed1472be3e4d3af4c0cada65ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa03925359320fd02a988a16b7c6a1a44c87dfd073a9bb73877b0d5a744abcd0e92a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223ea980c080a029a9d2043916bfe215dc677650bc7e888ba72ac9381f802ca1a64048552fadcba009a760b818b40fc89b645ed197fed7128f163443b2aa00afaaa8e45492d84252b88a03f887018080078252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a00195b630b1f83a765858aaab5cdf099b662c0e26829fcd88bf7695b58a7789eda01e472db305b3df65f9817ed1929662a42957f0f49ec8c48ca1e1d1c5875ca1d4c0c0", + "blockHeader": { + "parentHash": "0x4f88d5b8280ef7e6b9e1e838e7274f7855651a9ed1472be3e4d3af4c0cada65e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x3925359320fd02a988a16b7c6a1a44c87dfd073a9bb73877b0d5a744abcd0e92", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2db1ebb90669834ac0efd63e2b5fb6908a1c09a802b2a794788d37a3e2938b5f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223ea9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x29a9d2043916bfe215dc677650bc7e888ba72ac9381f802ca1a64048552fadcb", + "s": "0x09a760b818b40fc89b645ed197fed7128f163443b2aa00afaaa8e45492d84252", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x0195b630b1f83a765858aaab5cdf099b662c0e26829fcd88bf7695b58a7789ed", + "s": "0x1e472db305b3df65f9817ed1929662a42957f0f49ec8c48ca1e1d1c5875ca1d4", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x2db1ebb90669834ac0efd63e2b5fb6908a1c09a802b2a794788d37a3e2938b5f", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e4249c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0be39f52ea68ecca31eaf7559d68fab885c8f4b91cda3619de663151dd8b3690aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbe39f52ea68ecca31eaf7559d68fab885c8f4b91cda3619de663151dd8b3690a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x56c1effc8ae0d5654ba1c78f51ad571ea0a3a1f47bcb8733668adf55eaaf68e4" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a056c1effc8ae0d5654ba1c78f51ad571ea0a3a1f47bcb8733668adf55eaaf68e4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa06d08bd5766885317d436220a2c01321b83b2a8d41dd45669e8937499a7b1130fa017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e83180c001a02a06762a72a261fa15dedecb2d7bd6a217351db513084794b81a8447cbacb8baa076d1d36d06656f6e63485b787a86d0e132d91ed7aabcdc6a3dc3244cc5dc9da3b8e603f8e301808007826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0a7ac396b866d0071bb77a11e86a9ae587acc8c6cd7ce33c957694e6700b13a50a053ed1bf9a0ca9480c6920c884fdb5ead0011cddf77af18e494fd140f6efa6cb6c0c0", + "blockHeader": { + "parentHash": "0x56c1effc8ae0d5654ba1c78f51ad571ea0a3a1f47bcb8733668adf55eaaf68e4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x6d08bd5766885317d436220a2c01321b83b2a8d41dd45669e8937499a7b1130f", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x55325d8e56f02f808b14b2b42614a5010da0bfb9619c23e0017ca7bbd86002b2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e831", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x2a06762a72a261fa15dedecb2d7bd6a217351db513084794b81a8447cbacb8ba", + "s": "0x76d1d36d06656f6e63485b787a86d0e132d91ed7aabcdc6a3dc3244cc5dc9da3", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xa7ac396b866d0071bb77a11e86a9ae587acc8c6cd7ce33c957694e6700b13a50", + "s": "0x53ed1bf9a0ca9480c6920c884fdb5ead0011cddf77af18e494fd140f6efa6cb6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x55325d8e56f02f808b14b2b42614a5010da0bfb9619c23e0017ca7bbd86002b2", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f351", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a068267eb6d504202ce1ee7a56fde2a7843200a781594b974485dcaf3e4a38cceea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x68267eb6d504202ce1ee7a56fde2a7843200a781594b974485dcaf3e4a38ccee", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x964aa28b187f8ebf094153acba007a1ecf4589b0cc7d97cd7876a3e44a54d583" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0964aa28b187f8ebf094153acba007a1ecf4589b0cc7d97cd7876a3e44a54d583a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d1a7c86f6e6ce930a5419f2d20e386fd7758ee8584f5e500a5bd97e1fdb0e93ba0140eb8501b08c37930513b49c8b97fa5b3d00801d7b6a05fa2fbecf95cd70c00a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247d5180c080a034be081d3a1a3b99d63d38cf631e448be00f763730c0cacf8dfb3a923929b1a9a05d1b776ed813287709599ea381df403989bf92b05ba8f0d952c9116b575d48f3b88a03f8870180800e8252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0228aa4b47c0e323bd1f569ed050c301377bf1d4b6ce634bcc8a593f22335c591a07879d15425eab4dac014b3fdb23303d34268225633dcc1a2d9dd0fc5d8e792e3c0c0", + "blockHeader": { + "parentHash": "0x964aa28b187f8ebf094153acba007a1ecf4589b0cc7d97cd7876a3e44a54d583", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd1a7c86f6e6ce930a5419f2d20e386fd7758ee8584f5e500a5bd97e1fdb0e93b", + "transactionsTrie": "0x140eb8501b08c37930513b49c8b97fa5b3d00801d7b6a05fa2fbecf95cd70c00", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa359ca97783172d9f92a94c5192e9ab689c2736cd34b09518e01a23c9598b7bc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247d51", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x34be081d3a1a3b99d63d38cf631e448be00f763730c0cacf8dfb3a923929b1a9", + "s": "0x5d1b776ed813287709599ea381df403989bf92b05ba8f0d952c9116b575d48f3", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x228aa4b47c0e323bd1f569ed050c301377bf1d4b6ce634bcc8a593f22335c591", + "s": "0x7879d15425eab4dac014b3fdb23303d34268225633dcc1a2d9dd0fc5d8e792e3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa359ca97783172d9f92a94c5192e9ab689c2736cd34b09518e01a23c9598b7bc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e448871", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e203ea8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_0-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a070e2eae28ef3809a5c2c5bde714bb4cc45918f470891e5a1aaaaa639e1bfd420a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x70e2eae28ef3809a5c2c5bde714bb4cc45918f470891e5a1aaaaa639e1bfd420", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd1d3c7abb11909313ce4db15fc9fea2437c3367314b8ba6fde5ec751c8b0a999" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0d1d3c7abb11909313ce4db15fc9fea2437c3367314b8ba6fde5ec751c8b0a999a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02e800f4b3408f47afcd144b5207121330737211b4bf23b64a92e111162736f8ea028e7f28ea79057ea34d9529b8755964063fd493f606bdbe4d58131254fac6d64a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25d06180c080a07372d8fe1a030cf70ba4b6ee4cf58ccbd91f584fe0c750a50cb5cdffbd05379aa055358d8ce36149dd6494c7007bbc94e11be7228088dc17fd9890f29b5de46f3fb8e603f8e30180800e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000080a07957ab80563988b2377c82f7a64d0c0c859e1243c86c7ee705e36e8e4700a682a03978e2f63d054b7e4da2cb0bb68a4178e69c43255132f14bdbeebbf514d8c260c0c0", + "blockHeader": { + "parentHash": "0xd1d3c7abb11909313ce4db15fc9fea2437c3367314b8ba6fde5ec751c8b0a999", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2e800f4b3408f47afcd144b5207121330737211b4bf23b64a92e111162736f8e", + "transactionsTrie": "0x28e7f28ea79057ea34d9529b8755964063fd493f606bdbe4d58131254fac6d64", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x282cee66494876b3e5ee7e423ba844db8e0f28b252a5d0d13aea42c479978e14" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25d061", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x7372d8fe1a030cf70ba4b6ee4cf58ccbd91f584fe0c750a50cb5cdffbd05379a", + "s": "0x55358d8ce36149dd6494c7007bbc94e11be7228088dc17fd9890f29b5de46f3f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0x7957ab80563988b2377c82f7a64d0c0c859e1243c86c7ee705e36e8e4700a682", + "s": "0x3978e2f63d054b7e4da2cb0bb68a4178e69c43255132f14bdbeebbf514d8c260", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x282cee66494876b3e5ee7e423ba844db8e0f28b252a5d0d13aea42c479978e14", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45db81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e20e830", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0689154112c5b60cf7defc1f9aba085c7e792e5eb4e7ef3ed91a02e57d6128527a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x689154112c5b60cf7defc1f9aba085c7e792e5eb4e7ef3ed91a02e57d6128527", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4f88d5b8280ef7e6b9e1e838e7274f7855651a9ed1472be3e4d3af4c0cada65e" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a04f88d5b8280ef7e6b9e1e838e7274f7855651a9ed1472be3e4d3af4c0cada65ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa02f03a9974058136af00188e38eba3ace8862a7299be40f6baaead33a1a312311a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e223ea980c080a029a9d2043916bfe215dc677650bc7e888ba72ac9381f802ca1a64048552fadcba009a760b818b40fc89b645ed197fed7128f163443b2aa00afaaa8e45492d84252b88a03f887018007078252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000080a0ad2360a19349fc4d9f820501f5d1364b615765f8dd044dcd68a882081a9e0b51a03570edfb978702735a11e873b664f4f4d346e587a6945f4d79e9aed3cf39f439c0c0", + "blockHeader": { + "parentHash": "0x4f88d5b8280ef7e6b9e1e838e7274f7855651a9ed1472be3e4d3af4c0cada65e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x2f03a9974058136af00188e38eba3ace8862a7299be40f6baaead33a1a312311", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3616a7514f26d6f080af9ca26693d8890a582d0eab350ac68730bc5e5583887b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e223ea9", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x29a9d2043916bfe215dc677650bc7e888ba72ac9381f802ca1a64048552fadcb", + "s": "0x09a760b818b40fc89b645ed197fed7128f163443b2aa00afaaa8e45492d84252", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x00", + "r": "0xad2360a19349fc4d9f820501f5d1364b615765f8dd044dcd68a882081a9e0b51", + "s": "0x3570edfb978702735a11e873b664f4f4d346e587a6945f4d79e9aed3cf39f439", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x3616a7514f26d6f080af9ca26693d8890a582d0eab350ac68730bc5e5583887b", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e4249c9", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_7-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0be39f52ea68ecca31eaf7559d68fab885c8f4b91cda3619de663151dd8b3690aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbe39f52ea68ecca31eaf7559d68fab885c8f4b91cda3619de663151dd8b3690a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x56c1effc8ae0d5654ba1c78f51ad571ea0a3a1f47bcb8733668adf55eaaf68e4" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a056c1effc8ae0d5654ba1c78f51ad571ea0a3a1f47bcb8733668adf55eaaf68e4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42ccaa059b4f286d6ca6432236e5805ac44742aa4961b1c900a3827685b66bfff77f865a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e22e83180c001a02a06762a72a261fa15dedecb2d7bd6a217351db513084794b81a8447cbacb8baa076d1d36d06656f6e63485b787a86d0e132d91ed7aabcdc6a3dc3244cc5dc9da3b8e603f8e301800707826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a07ed7259fc257b82770610ad9c4d6ddd6cc98d7fd1ec09ba5936f4a44ed2fe158a066c563da11de27b15031537d2269389f1470ac789955e2ad822b73c02c6ff4d1c0c0", + "blockHeader": { + "parentHash": "0x56c1effc8ae0d5654ba1c78f51ad571ea0a3a1f47bcb8733668adf55eaaf68e4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf30da16894f2dacd44eb8c4e9503188d0d2ebd9cc03662a3fe6c676afb42cca", + "transactionsTrie": "0x59b4f286d6ca6432236e5805ac44742aa4961b1c900a3827685b66bfff77f865", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xf00e1b789fca03ef43d17fa90e62297fb1640a7152cebcbd63d2a4c7185bbaf5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e22e831", + "data": "0x", + "accessList": [], + "v": "0x01", + "r": "0x2a06762a72a261fa15dedecb2d7bd6a217351db513084794b81a8447cbacb8ba", + "s": "0x76d1d36d06656f6e63485b787a86d0e132d91ed7aabcdc6a3dc3244cc5dc9da3", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x07", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x7ed7259fc257b82770610ad9c4d6ddd6cc98d7fd1ec09ba5936f4a44ed2fe158", + "s": "0x66c563da11de27b15031537d2269389f1470ac789955e2ad822b73c02c6ff4d1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf00e1b789fca03ef43d17fa90e62297fb1640a7152cebcbd63d2a4c7185bbaf5", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e42f351", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-no_access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a068267eb6d504202ce1ee7a56fde2a7843200a781594b974485dcaf3e4a38cceea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x68267eb6d504202ce1ee7a56fde2a7843200a781594b974485dcaf3e4a38ccee", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x964aa28b187f8ebf094153acba007a1ecf4589b0cc7d97cd7876a3e44a54d583" + }, + "blocks": [ + { + "rlp": "0xf90340f90242a0964aa28b187f8ebf094153acba007a1ecf4589b0cc7d97cd7876a3e44a54d583a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06eb8be6f44ab5f370d99243d7a2a34bca2979daf1dadea1682650aa8722b1c13a05c1dd00a5b5903e5fc6fb2718de74e1c5e6323bd3142d9616bf7533fd21ab101a050161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400eab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a4200c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f8f7b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e247d5180c080a034be081d3a1a3b99d63d38cf631e448be00f763730c0cacf8dfb3a923929b1a9a05d1b776ed813287709599ea381df403989bf92b05ba8f0d952c9116b575d48f3b88a03f8870180070e8252189400000000000000000000000000000000000001000101c0822710e1a0010000000000000000000000000000000000000000000000000000000000000001a063e2ed1f32c8eba4d0aaae24195f0fc98d4dff91c1c8fc49de5b1e6a3af19d55a0673ce2b11364a9efd22fd894dcb612e218df0b53040c319ada138ddc6661d396c0c0", + "blockHeader": { + "parentHash": "0x964aa28b187f8ebf094153acba007a1ecf4589b0cc7d97cd7876a3e44a54d583", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6eb8be6f44ab5f370d99243d7a2a34bca2979daf1dadea1682650aa8722b1c13", + "transactionsTrie": "0x5c1dd00a5b5903e5fc6fb2718de74e1c5e6323bd3142d9616bf7533fd21ab101", + "receiptTrie": "0x50161b29df74bec7f784af48e1115428a81b50dd23ed755eb29dd20a4d6400ea", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xa420", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x096072aaf87a478e57a14c8af4b29015c6754aac0f70a6f146f536c3823d3c13" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e247d51", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x34be081d3a1a3b99d63d38cf631e448be00f763730c0cacf8dfb3a923929b1a9", + "s": "0x5d1b776ed813287709599ea381df403989bf92b05ba8f0d952c9116b575d48f3", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x5218", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0x63e2ed1f32c8eba4d0aaae24195f0fc98d4dff91c1c8fc49de5b1e6a3af19d55", + "s": "0x673ce2b11364a9efd22fd894dcb612e218df0b53040c319ada138ddc6661d396", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x096072aaf87a478e57a14c8af4b29015c6754aac0f70a6f146f536c3823d3c13", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e448871", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x023ea8", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_sufficient_balance_blob_tx_pre_fund_tx[fork_Cancun-blockchain_test-tx_max_fee_per_blob_gas_10000-single_one_calldata-tx_value_1-tx_max_priority_fee_per_gas_7-tx_max_fee_per_gas_14-access_list]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "Cancun", + "genesisRLP": "0xf90243f9023da00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a070e2eae28ef3809a5c2c5bde714bb4cc45918f470891e5a1aaaaa639e1bfd420a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083140000a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x70e2eae28ef3809a5c2c5bde714bb4cc45918f470891e5a1aaaaa639e1bfd420", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x140000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd1d3c7abb11909313ce4db15fc9fea2437c3367314b8ba6fde5ec751c8b0a999" + }, + "blocks": [ + { + "rlp": "0xf9039df90242a0d1d3c7abb11909313ce4db15fc9fea2437c3367314b8ba6fde5ec751c8b0a999a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0086c0865f6dcb47c4bab4e2112b2e5be57ada9a7a635dca44a60c1435aa71716a0b92f6be1ab8dbbd1ff20609a9a94a49322c4cb598792e3f385b3261e63d2b260a017bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082bc580c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f90153b86902f8660180806482520894a94f5374fce5edbc8e2a8697c15331677e6ebf0b844e25d06180c080a07372d8fe1a030cf70ba4b6ee4cf58ccbd91f584fe0c750a50cb5cdffbd05379aa055358d8ce36149dd6494c7007bbc94e11be7228088dc17fd9890f29b5de46f3fb8e603f8e30180070e826a509400000000000000000000000000000000000001000101f85bf859940000000000000000000000000000000000000064f842a00000000000000000000000000000000000000000000000000000000000000064a000000000000000000000000000000000000000000000000000000000000000c8822710e1a0010000000000000000000000000000000000000000000000000000000000000001a0cc907296e469f71ea73964a9afcf09ba1c36d0788e728a35f9aa0b45168c959ba03a26c21ba43cfd6e0cdb9a9c600e9e402fa89cf45bce467522776c2387db5442c0c0", + "blockHeader": { + "parentHash": "0xd1d3c7abb11909313ce4db15fc9fea2437c3367314b8ba6fde5ec751c8b0a999", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x086c0865f6dcb47c4bab4e2112b2e5be57ada9a7a635dca44a60c1435aa71716", + "transactionsTrie": "0xb92f6be1ab8dbbd1ff20609a9a94a49322c4cb598792e3f385b3261e63d2b260", + "receiptTrie": "0x17bba022d57fbc518aef54e1f4ee78d982c1d4a92664dd54d1cdc92a7d6f7c9e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xbc58", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x020000", + "excessBlobGas": "0x0e0000", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xaccc0aeb30b68669b3b9eeef265f83f2d2050e36fb5bd1fd6edc2300b1e40dac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x64", + "gasLimit": "0x5208", + "to": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value": "0x4e25d061", + "data": "0x", + "accessList": [], + "v": "0x00", + "r": "0x7372d8fe1a030cf70ba4b6ee4cf58ccbd91f584fe0c750a50cb5cdffbd05379a", + "s": "0x55358d8ce36149dd6494c7007bbc94e11be7228088dc17fd9890f29b5de46f3f", + "sender": "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc" + }, + { + "type": "0x03", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x07", + "maxFeePerGas": "0x0e", + "gasLimit": "0x6a50", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x01", + "data": "0x01", + "accessList": [ + { + "address": "0x0000000000000000000000000000000000000064", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000064", + "0x00000000000000000000000000000000000000000000000000000000000000c8" + ] + } + ], + "maxFeePerBlobGas": "0x2710", + "blobVersionedHashes": [ + "0x0100000000000000000000000000000000000000000000000000000000000000" + ], + "v": "0x01", + "r": "0xcc907296e469f71ea73964a9afcf09ba1c36d0788e728a35f9aa0b45168c959b", + "s": "0x3a26c21ba43cfd6e0cdb9a9c600e9e402fa89cf45bce467522776c2387db5442", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xaccc0aeb30b68669b3b9eeef265f83f2d2050e36fb5bd1fd6edc2300b1e40dac", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x00", + "balance": "0x4e45db81", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x02e830", + "code": "0x", + "storage": {} + }, + "0x97a7cb1de3cc7d556d0aa32433b035067709e1fc": { + "nonce": "0x01", + "balance": "0x1dcce8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x4e1e0000", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/valid_blob_tx_combinations.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/valid_blob_tx_combinations.json index d8b37751e67..78529a381d1 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/valid_blob_tx_combinations.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs/valid_blob_tx_combinations.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-blobs_per_tx=(1, 1, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -222,9 +223,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-blobs_per_tx=(1, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -425,9 +427,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-blobs_per_tx=(1, 1, 1, 1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -629,9 +632,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-blobs_per_tx=(1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -812,9 +816,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-blobs_per_tx=(1, 1, 1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -996,9 +1001,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-blobs_per_tx=(1, 1, 1, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1181,9 +1187,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-blobs_per_tx=(1, 1, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1366,9 +1373,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-blobs_per_tx=(1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1529,9 +1537,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-blobs_per_tx=(1, 1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1693,9 +1702,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-blobs_per_tx=(1, 1, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1858,9 +1868,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-blobs_per_tx=(1, 1, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2024,9 +2035,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-blobs_per_tx=(1, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2189,9 +2201,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-blobs_per_tx=(1, 2, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2355,9 +2368,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-blobs_per_tx=(2, 2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2521,9 +2535,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-blobs_per_tx=(1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2664,9 +2679,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-blobs_per_tx=(1, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2808,9 +2824,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-blobs_per_tx=(1, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2953,9 +2970,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-blobs_per_tx=(1, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3099,9 +3117,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-blobs_per_tx=(1, 5)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1, 5)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3246,9 +3265,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-blobs_per_tx=(2, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3391,9 +3411,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-blobs_per_tx=(2, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3537,9 +3558,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-blobs_per_tx=(2, 4)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 4)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3684,9 +3706,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-blobs_per_tx=(3, 3)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 3)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3831,9 +3854,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-blobs_per_tx=(1,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(1,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3954,9 +3978,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-blobs_per_tx=(2,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4078,9 +4103,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-blobs_per_tx=(3,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4203,9 +4229,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-blobs_per_tx=(4,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4329,9 +4356,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-blobs_per_tx=(5,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(5,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4456,9 +4484,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-blobs_per_tx=(6,)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(6,)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4584,9 +4613,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-blobs_per_tx=(2, 1, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4788,9 +4818,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-blobs_per_tx=(2, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4972,9 +5003,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-blobs_per_tx=(3, 1, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5157,9 +5189,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-blobs_per_tx=(2, 2, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5342,9 +5375,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-blobs_per_tx=(2, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5506,9 +5540,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-blobs_per_tx=(3, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5671,9 +5706,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-blobs_per_tx=(4, 1, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 1, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5837,9 +5873,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-blobs_per_tx=(2, 2, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 2, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6002,9 +6039,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-blobs_per_tx=(3, 2, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 2, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6168,9 +6206,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun-blobs_per_tx=(2, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(2, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6312,9 +6351,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun-blobs_per_tx=(3, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6457,9 +6497,10 @@ }, "sealEngine": "NoProof" }, - "040-fork=Cancun-blobs_per_tx=(4, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6603,9 +6644,10 @@ }, "sealEngine": "NoProof" }, - "041-fork=Cancun-blobs_per_tx=(5, 1)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(5, 1)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6750,9 +6792,10 @@ }, "sealEngine": "NoProof" }, - "042-fork=Cancun-blobs_per_tx=(3, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(3, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6896,9 +6939,10 @@ }, "sealEngine": "NoProof" }, - "043-fork=Cancun-blobs_per_tx=(4, 2)": { + "tests/cancun/eip4844_blobs/test_blob_txs.py::test_valid_blob_tx_combinations[fork_Cancun-blockchain_test-blobs_per_tx_(4, 2)]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs_full/reject_valid_full_blob_in_block_rlp.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs_full/reject_valid_full_blob_in_block_rlp.json index 691992c20f3..3174e4f1c9d 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs_full/reject_valid_full_blob_in_block_rlp.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blob_txs_full/reject_valid_full_blob_in_block_rlp.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-one_full_blob_one_tx": { + "tests/cancun/eip4844_blobs/test_blob_txs_full.py::test_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_one_tx]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,15 +33,15 @@ }, "blocks": [ { - "rlp": "0xfa020347f90242a05e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f43e34d45b96073376e0dc37a47ab53620a19ed5dfd325eaf679543f469e417ea0efd8f2a0af0fc5ffb3d2e5b3b3400ad27fa828ca9c8c97c7dd04c151e47282d1a0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000fa0200fcba0200f803fa0200f3f885018080078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0477eb0e8afffdcfc82caa0d54a014e5b79bd52ea7f071fbe92991421172a682da04b38c97aae73304105f25d48e40e21ff5eb11c489c318ae37503ae4da5c3a403fa020004ba0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c0", - "expectException": "invalid transaction", + "rlp": "0xfa020347f90242a05e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f43e34d45b96073376e0dc37a47ab53620a19ed5dfd325eaf679543f469e417ea07b2256f07a260142f4ba4e42ebbf3558a0bfed69724ba0b52d2e87f9effd909ba0eaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12abb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008252080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000fa0200fcba0200f803fa0200f3f885018080078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0477eb0e8afffdcfc82caa0d54a014e5b79bd52ea7f071fbe92991421172a682da04b38c97aae73304105f25d48e40e21ff5eb11c489c318ae37503ae4da5c3a403fa020004ba0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c0", + "expectException": "TransactionException.TYPE_3_TX_WITH_FULL_BLOBS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xf43e34d45b96073376e0dc37a47ab53620a19ed5dfd325eaf679543f469e417e", - "transactionsTrie": "0xefd8f2a0af0fc5ffb3d2e5b3b3400ad27fa828ca9c8c97c7dd04c151e47282d1", + "transactionsTrie": "0x7b2256f07a260142f4ba4e42ebbf3558a0bfed69724ba0b52d2e87f9effd909b", "receiptTrie": "0xeaa8c40899a61ae59615cf9985f5e2194f8fd2b57d273be63bde6733e89b12ab", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -56,8 +57,9 @@ "blobGasUsed": "0x020000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa741fc4e2854de4272a2e56d1d502ec9986e1f93859e5debf98815c740850023" + "hash": "0xd0e27ec12d6b6f48b307a2ef075cf244cb2a3b645567008054d633b0417df9fc" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -116,9 +118,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-one_full_blob_max_txs": { + "tests/cancun/eip4844_blobs/test_blob_txs_full.py::test_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_max_txs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -149,15 +152,15 @@ }, "blocks": [ { - "rlp": "0xfa0205faf90243a05e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ed01656656d8c6df0749aad49dcd4b998f0caa6d602bec0bdb9611a170bc3259a072efca766822cba50f24e55abd527ee5433f138e0ea7495634455569675a5269a0c88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81beb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec300c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000fa0203aeba0200f803fa0200f3f885018080078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0477eb0e8afffdcfc82caa0d54a014e5b79bd52ea7f071fbe92991421172a682da04b38c97aae73304105f25d48e40e21ff5eb11c489c318ae37503ae4da5c3a403fa020004ba0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0390d51d461fde99c73c14514879c0eecbe3f6c9e9a348dcd42bcacd811e4c9fda03f1cce5086c7a782e0380a8c59845bd9b897432e0fd6b192480c20d3bb53dd09b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0632536c226ddbba7b5903bee9f1dfc437e2d7f94520eb205ed5bce8f3ef29dc3a06c01f08279d1aab38190d2c94e5b13c69a44b72818c1b3b444593368bc29a5cbb88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0ad3c3098708fc8c737cbb3f2b3d5b803c5f3d0ee485771888d37345c47ad938ea00c62332a5df97c52b536e7f68d6a1deb255c677f64ea209d4e0411a46cd0de9ab88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0570d2ab90e8a4496345779ab0f6f7ace2a1d48ebe4df60877bb1b10c62dfbd34a058b253420cf921bceb8a531e5a22b9fcdb12cb9ba8d2c343a4525e8f0e58b7ecb88803f885010580078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a006d628345c1f03ced02445b38d3f0c796a4d041c00b71d1ec77cc1de584141bda071aa73d61ff7955dd11fd98d0922c73ec5b8a5e1f60eb906154284c72b64e382c0c0", - "expectException": "invalid transaction", + "rlp": "0xfa0205faf90243a05e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ed01656656d8c6df0749aad49dcd4b998f0caa6d602bec0bdb9611a170bc3259a0aed0ef73e36e7fd8c85b42a63d99a3f49b5dababf9455e4d6191d7a860ddd427a0c88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81beb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec300c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000fa0203aeba0200f803fa0200f3f885018080078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0477eb0e8afffdcfc82caa0d54a014e5b79bd52ea7f071fbe92991421172a682da04b38c97aae73304105f25d48e40e21ff5eb11c489c318ae37503ae4da5c3a403fa020004ba0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0390d51d461fde99c73c14514879c0eecbe3f6c9e9a348dcd42bcacd811e4c9fda03f1cce5086c7a782e0380a8c59845bd9b897432e0fd6b192480c20d3bb53dd09b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0632536c226ddbba7b5903bee9f1dfc437e2d7f94520eb205ed5bce8f3ef29dc3a06c01f08279d1aab38190d2c94e5b13c69a44b72818c1b3b444593368bc29a5cbb88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0ad3c3098708fc8c737cbb3f2b3d5b803c5f3d0ee485771888d37345c47ad938ea00c62332a5df97c52b536e7f68d6a1deb255c677f64ea209d4e0411a46cd0de9ab88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0570d2ab90e8a4496345779ab0f6f7ace2a1d48ebe4df60877bb1b10c62dfbd34a058b253420cf921bceb8a531e5a22b9fcdb12cb9ba8d2c343a4525e8f0e58b7ecb88803f885010580078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a006d628345c1f03ced02445b38d3f0c796a4d041c00b71d1ec77cc1de584141bda071aa73d61ff7955dd11fd98d0922c73ec5b8a5e1f60eb906154284c72b64e382c0c0", + "expectException": "TransactionException.TYPE_3_TX_WITH_FULL_BLOBS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xed01656656d8c6df0749aad49dcd4b998f0caa6d602bec0bdb9611a170bc3259", - "transactionsTrie": "0x72efca766822cba50f24e55abd527ee5433f138e0ea7495634455569675a5269", + "transactionsTrie": "0xaed0ef73e36e7fd8c85b42a63d99a3f49b5dababf9455e4d6191d7a860ddd427", "receiptTrie": "0xc88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81be", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -173,8 +176,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa4ac66e7a89abb4f0fb63e67d7c550246ad394c5af6d582c0c155979be4dbb26" + "hash": "0x7312293e07230307c8fa4ce6127ae0953ab38549cfe7280624b8ec8ff79e520d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -333,9 +337,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-one_full_blob_at_the_end_max_txs": { + "tests/cancun/eip4844_blobs/test_blob_txs_full.py::test_reject_valid_full_blob_in_block_rlp[fork_Cancun-blockchain_test-one_full_blob_at_the_end_max_txs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -366,15 +371,15 @@ }, "blocks": [ { - "rlp": "0xfa0205faf90243a05e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ed01656656d8c6df0749aad49dcd4b998f0caa6d602bec0bdb9611a170bc3259a072efca766822cba50f24e55abd527ee5433f138e0ea7495634455569675a5269a0c88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81beb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec300c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000fa0203aeb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0477eb0e8afffdcfc82caa0d54a014e5b79bd52ea7f071fbe92991421172a682da04b38c97aae73304105f25d48e40e21ff5eb11c489c318ae37503ae4da5c3a403b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0390d51d461fde99c73c14514879c0eecbe3f6c9e9a348dcd42bcacd811e4c9fda03f1cce5086c7a782e0380a8c59845bd9b897432e0fd6b192480c20d3bb53dd09b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0632536c226ddbba7b5903bee9f1dfc437e2d7f94520eb205ed5bce8f3ef29dc3a06c01f08279d1aab38190d2c94e5b13c69a44b72818c1b3b444593368bc29a5cbb88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0ad3c3098708fc8c737cbb3f2b3d5b803c5f3d0ee485771888d37345c47ad938ea00c62332a5df97c52b536e7f68d6a1deb255c677f64ea209d4e0411a46cd0de9ab88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0570d2ab90e8a4496345779ab0f6f7ace2a1d48ebe4df60877bb1b10c62dfbd34a058b253420cf921bceb8a531e5a22b9fcdb12cb9ba8d2c343a4525e8f0e58b7ecba0200f803fa0200f3f885010580078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a006d628345c1f03ced02445b38d3f0c796a4d041c00b71d1ec77cc1de584141bda071aa73d61ff7955dd11fd98d0922c73ec5b8a5e1f60eb906154284c72b64e382fa020004ba0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c0", - "expectException": "invalid transaction", + "rlp": "0xfa0205faf90243a05e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ed01656656d8c6df0749aad49dcd4b998f0caa6d602bec0bdb9611a170bc3259a0f248aa50cdce7056167493b3027db5f207c9d8ae6fe34de645ccc57b6ef0abd8a0c88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81beb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec300c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c0000830e0000a00000000000000000000000000000000000000000000000000000000000000000fa0203aeb88803f885018080078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0477eb0e8afffdcfc82caa0d54a014e5b79bd52ea7f071fbe92991421172a682da04b38c97aae73304105f25d48e40e21ff5eb11c489c318ae37503ae4da5c3a403b88803f885010180078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401401a0390d51d461fde99c73c14514879c0eecbe3f6c9e9a348dcd42bcacd811e4c9fda03f1cce5086c7a782e0380a8c59845bd9b897432e0fd6b192480c20d3bb53dd09b88803f885010280078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0632536c226ddbba7b5903bee9f1dfc437e2d7f94520eb205ed5bce8f3ef29dc3a06c01f08279d1aab38190d2c94e5b13c69a44b72818c1b3b444593368bc29a5cbb88803f885010380078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0ad3c3098708fc8c737cbb3f2b3d5b803c5f3d0ee485771888d37345c47ad938ea00c62332a5df97c52b536e7f68d6a1deb255c677f64ea209d4e0411a46cd0de9ab88803f885010480078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a0570d2ab90e8a4496345779ab0f6f7ace2a1d48ebe4df60877bb1b10c62dfbd34a058b253420cf921bceb8a531e5a22b9fcdb12cb9ba8d2c343a4525e8f0e58b7ecba0200f803fa0200f3f885010580078252089400000000000000000000000000000000000001000180c001e1a0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401480a006d628345c1f03ced02445b38d3f0c796a4d041c00b71d1ec77cc1de584141bda071aa73d61ff7955dd11fd98d0922c73ec5b8a5e1f60eb906154284c72b64e382fa020004ba0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c0", + "expectException": "TransactionException.TYPE_3_TX_WITH_FULL_BLOBS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5e214032b2c3345807ca43e38d0495d5150729153f66a5536b34fe9f5af98dd7", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0xed01656656d8c6df0749aad49dcd4b998f0caa6d602bec0bdb9611a170bc3259", - "transactionsTrie": "0x72efca766822cba50f24e55abd527ee5433f138e0ea7495634455569675a5269", + "transactionsTrie": "0xf248aa50cdce7056167493b3027db5f207c9d8ae6fe34de645ccc57b6ef0abd8", "receiptTrie": "0xc88bbb6ffab5658b295a44086ed7e77d4526e07e4025496e68a55042b24c81be", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -390,8 +395,9 @@ "blobGasUsed": "0x0c0000", "excessBlobGas": "0x0e0000", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa4ac66e7a89abb4f0fb63e67d7c550246ad394c5af6d582c0c155979be4dbb26" + "hash": "0x6a55578e49679cafc45f65d2a132379eddd5a6cb6f13ffebf358e854b2e21e17" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_gas_cost.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_gas_cost.json index 914cee72858..98e645bb598 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_gas_cost.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_gas_cost.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-tx_type=0": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_gas_cost[fork_Cancun-blockchain_test-tx_type_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -490,9 +491,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-tx_type=1": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_gas_cost[fork_Cancun-blockchain_test-tx_type_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -988,9 +990,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-tx_type=2": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_gas_cost[fork_Cancun-blockchain_test-tx_type_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1493,9 +1496,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-tx_type=3": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_gas_cost[fork_Cancun-blockchain_test-tx_type_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_invalid_blob_index.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_invalid_blob_index.json index 3f9d4ed1168..5609c17a9b5 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_invalid_blob_index.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_invalid_blob_index.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-scenario=invalid_calls": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_invalid_blob_index[fork_Cancun-blockchain_test-scenario_invalid_calls]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_multiple_txs_in_block.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_multiple_txs_in_block.json index 08013193e35..d78aa7f730c 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_multiple_txs_in_block.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_multiple_txs_in_block.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_multiple_txs_in_block[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_scenarios.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_scenarios.json index f87f16fca3f..3b0ad0db598 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_scenarios.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode/blobhash_scenarios.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-scenario=single_valid": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_single_valid]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -450,9 +451,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-scenario=repeated_valid": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_repeated_valid]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -901,9 +903,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-scenario=valid_invalid": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_valid_invalid]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1352,9 +1355,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-scenario=varied_valid": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode.py::test_blobhash_scenarios[fork_Cancun-blockchain_test-scenario_varied_valid]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode_contexts/blobhash_opcode_contexts.json b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode_contexts/blobhash_opcode_contexts.json index d2d54360f0a..c5030193a33 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode_contexts/blobhash_opcode_contexts.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/blobhash_opcode_contexts/blobhash_opcode_contexts.json @@ -1,7 +1,8 @@ { - "000-opcode_context=on_top_level_call_stack-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_top_level_call_stack-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -136,9 +137,10 @@ }, "sealEngine": "NoProof" }, - "001-opcode_context=on_max_value-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_max_value-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -276,9 +278,10 @@ }, "sealEngine": "NoProof" }, - "002-opcode_context=on_CALL-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_CALL-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -426,9 +429,10 @@ }, "sealEngine": "NoProof" }, - "003-opcode_context=on_DELEGATECALL-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_DELEGATECALL-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -585,9 +589,10 @@ }, "sealEngine": "NoProof" }, - "004-opcode_context=on_STATICCALL-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_STATICCALL-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -744,9 +749,10 @@ }, "sealEngine": "NoProof" }, - "005-opcode_context=on_CALLCODE-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_CALLCODE-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -903,9 +909,10 @@ }, "sealEngine": "NoProof" }, - "006-opcode_context=on_CREATE-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_CREATE-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1056,9 +1063,10 @@ }, "sealEngine": "NoProof" }, - "007-opcode_context=on_CREATE2-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_CREATE2-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1209,9 +1217,10 @@ }, "sealEngine": "NoProof" }, - "008-opcode_context=on_type_2_tx-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_type_2_tx-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1340,9 +1349,10 @@ }, "sealEngine": "NoProof" }, - "009-opcode_context=on_type_1_tx-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_type_1_tx-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1470,9 +1480,10 @@ }, "sealEngine": "NoProof" }, - "010-opcode_context=on_type_0_tx-fork=Cancun": { + "tests/cancun/eip4844_blobs/test_blobhash_opcode_contexts.py::test_blobhash_opcode_contexts[opcode_context_on_type_0_tx-fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_decreasing_blob_gas_costs.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_decreasing_blob_gas_costs.json index 4ac0455a039..11123084a9e 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_decreasing_blob_gas_costs.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_decreasing_blob_gas_costs.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-new_blobs=1-parent_blobs=2-parent_excess_blobs=18-expected_excess_blob_gas:0x220000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_18]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -201,9 +202,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-new_blobs=1-parent_blobs=2-parent_excess_blobs=265-expected_excess_blob_gas:0x2100000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_265]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -403,9 +405,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-new_blobs=1-parent_blobs=2-parent_excess_blobs=565-expected_excess_blob_gas:0x4680000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_565]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -605,9 +608,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-new_blobs=1-parent_blobs=2-parent_excess_blobs=830-expected_excess_blob_gas:0x67a0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_830]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -807,9 +811,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-new_blobs=1-parent_blobs=2-parent_excess_blobs=1130-expected_excess_blob_gas:0x8d20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1130]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1009,9 +1014,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-new_blobs=1-parent_blobs=2-parent_excess_blobs=1230-expected_excess_blob_gas:0x99a0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_decreasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-parent_excess_blobs_1230]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_excess_blob_gas_calculation.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_excess_blob_gas_calculation.json index 89cb1881b97..c118adcd34f 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_excess_blob_gas_calculation.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_excess_blob_gas_calculation.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=0-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -142,9 +143,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=1-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -343,9 +345,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=2-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -545,9 +548,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=3-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -748,9 +752,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=4-expected_excess_blob_gas:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -952,9 +957,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=5-expected_excess_blob_gas:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1157,9 +1163,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=6-expected_excess_blob_gas:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1363,9 +1370,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=0-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1506,9 +1514,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=1-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1707,9 +1716,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=2-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1909,9 +1919,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=3-expected_excess_blob_gas:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2112,9 +2123,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=4-expected_excess_blob_gas:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2316,9 +2328,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=5-expected_excess_blob_gas:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2521,9 +2534,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=6-expected_excess_blob_gas:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2727,9 +2741,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-new_blobs=1-parent_excess_blobs=2-parent_blobs=0-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2870,9 +2885,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-new_blobs=1-parent_excess_blobs=2-parent_blobs=1-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3071,9 +3087,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-new_blobs=1-parent_excess_blobs=2-parent_blobs=2-expected_excess_blob_gas:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3273,9 +3290,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-new_blobs=1-parent_excess_blobs=2-parent_blobs=3-expected_excess_blob_gas:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3476,9 +3494,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-new_blobs=1-parent_excess_blobs=2-parent_blobs=4-expected_excess_blob_gas:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3680,9 +3699,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-new_blobs=1-parent_excess_blobs=2-parent_blobs=5-expected_excess_blob_gas:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3885,9 +3905,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-new_blobs=1-parent_excess_blobs=2-parent_blobs=6-expected_excess_blob_gas:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_2-parent_blobs_6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4091,9 +4112,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=0-expected_excess_blob_gas:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4234,9 +4256,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=1-expected_excess_blob_gas:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4435,9 +4458,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=2-expected_excess_blob_gas:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4637,9 +4661,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=3-expected_excess_blob_gas:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4840,9 +4865,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=4-expected_excess_blob_gas:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5044,9 +5070,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=5-expected_excess_blob_gas:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5249,9 +5276,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=6-expected_excess_blob_gas:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_excess_blob_gas_calculation[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_increasing_blob_gas_costs.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_increasing_blob_gas_costs.json index b085930f4b7..b13777b9859 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_increasing_blob_gas_costs.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/correct_increasing_blob_gas_costs.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-new_blobs=1-parent_blobs=4-parent_excess_blobs=17-expected_excess_blob_gas:0x240000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_17]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -203,9 +204,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-new_blobs=1-parent_blobs=4-parent_excess_blobs=264-expected_excess_blob_gas:0x2120000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_264]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -407,9 +409,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-new_blobs=1-parent_blobs=4-parent_excess_blobs=564-expected_excess_blob_gas:0x46a0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_564]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -611,9 +614,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-new_blobs=1-parent_blobs=4-parent_excess_blobs=829-expected_excess_blob_gas:0x67c0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_829]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -815,9 +819,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-new_blobs=1-parent_blobs=4-parent_excess_blobs=1129-expected_excess_blob_gas:0x8d40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1129]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1019,9 +1024,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-new_blobs=1-parent_blobs=4-parent_excess_blobs=1229-expected_excess_blob_gas:0x99c0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_correct_increasing_blob_gas_costs[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-parent_excess_blobs_1229]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_blob_gas_used_in_header.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_blob_gas_used_in_header.json index a18211c7fa4..dd8ebf10f6f 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_blob_gas_used_in_header.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_blob_gas_used_in_header.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-parent_blobs=0-new_blobs=0-header_blob_gas_used=131072-correct:0x0-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_131072]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -33,7 +34,7 @@ "blocks": [ { "rlp": "0xf902b0f90242a07d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489", @@ -58,6 +59,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x11e37d4045ab376876077f0071e7ff1d9495e36b3193f45783a5c7c24d561e64" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -136,9 +138,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-parent_blobs=0-new_blobs=0-header_blob_gas_used=262144-correct:0x0-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_262144]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -170,7 +173,7 @@ "blocks": [ { "rlp": "0xf902b0f90242a07d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218304000083040000a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489", @@ -195,6 +198,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3ea508f4a10a39ebec729333a0f5b2b712d559f7effe6dd9f36b0005047650fb" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -273,9 +277,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-parent_blobs=0-new_blobs=0-header_blob_gas_used=393216-correct:0x0-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_393216]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -307,7 +312,7 @@ "blocks": [ { "rlp": "0xf902b0f90242a07d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218306000083040000a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489", @@ -332,6 +337,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdf7d55ebf2e507285381568ffb542bb83fec0734747b562dee7619ef54174852" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -410,9 +416,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-parent_blobs=0-new_blobs=0-header_blob_gas_used=524288-correct:0x0-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_524288]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -444,7 +451,7 @@ "blocks": [ { "rlp": "0xf902b0f90242a07d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218308000083040000a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489", @@ -469,6 +476,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe0856cd778321120578ed91ac6e65539b4986a326c66aa7fffde8b308c6e82c6" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -547,9 +555,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-parent_blobs=0-new_blobs=0-header_blob_gas_used=655360-correct:0x0-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_655360]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -581,7 +590,7 @@ "blocks": [ { "rlp": "0xf902b0f90242a07d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a000083040000a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489", @@ -606,6 +615,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2e6a20c980c7e2ec76381b39488b88c6a271b8f8f292d257b4113c746b24b8ba" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -684,9 +694,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-parent_blobs=0-new_blobs=0-header_blob_gas_used=786432-correct:0x0-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_786432]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -718,7 +729,7 @@ "blocks": [ { "rlp": "0xf902b0f90242a07d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c000083040000a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489", @@ -743,6 +754,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0e6f236a7b51f2cee329708ccf1f47166290ac9e193ed5f06407932c76b35019" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -821,9 +833,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-parent_blobs=0-new_blobs=0-header_blob_gas_used=18446744073709551615-correct:0x0-header:0xffffffffffffffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_blob_gas_used_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -855,7 +868,7 @@ "blocks": [ { "rlp": "0xf902b5f90247a07d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42188ffffffffffffffff83040000a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.BLOB_GAS_USED_ABOVE_LIMIT|BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489", @@ -880,6 +893,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5ef2c8ade01c33eda8cc654220f1e07cd7f8b0f63d76d35aea2732d509ca19d4" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -958,9 +972,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-parent_blobs=0-new_blobs=1-header_blob_gas_used=0-correct:0x20000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -992,7 +1007,7 @@ "blocks": [ { "rlp": "0xf902d0f9023fa05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -1017,6 +1032,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3f0449f917504fea7502a243dd8211ec3fd24d33c55e4973127ab9dfeb7c2b38" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1099,9 +1115,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-parent_blobs=0-new_blobs=1-header_blob_gas_used=262144-correct:0x20000-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_262144]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1133,7 +1150,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218304000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -1158,6 +1175,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb97f29007c81d67f5ed812d56733a9f24e2e0b8a94aaf836fc8a98e50f45187d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1240,9 +1258,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-parent_blobs=0-new_blobs=1-header_blob_gas_used=393216-correct:0x20000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_393216]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1274,7 +1293,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218306000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -1299,6 +1318,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4a2aefa4e10d267493c5036ebf41e4f41b359a8549b707904962a18facadd3ce" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1381,9 +1401,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-parent_blobs=0-new_blobs=1-header_blob_gas_used=524288-correct:0x20000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_524288]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1415,7 +1436,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218308000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -1440,6 +1461,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5900121f6485cc0fed8b608ad39aa97b89a5c830f52b13b06829dc9b07946c22" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1522,9 +1544,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-parent_blobs=0-new_blobs=1-header_blob_gas_used=655360-correct:0x20000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_655360]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1556,7 +1579,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -1581,6 +1604,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x27b24bfba48bfaaff6432f16e93d41bf7fcc05f75bc2dc35de4d9bebbf09c7f8" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1663,9 +1687,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-parent_blobs=0-new_blobs=1-header_blob_gas_used=786432-correct:0x20000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_786432]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1697,7 +1722,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -1722,6 +1747,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x53ca291f9c98809b7257367c554f93ad46a63e24d7b92441ee541f06d4ad7640" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1804,9 +1830,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-parent_blobs=0-new_blobs=1-header_blob_gas_used=18446744073709551615-correct:0x20000-header:0xffffffffffffffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_blob_gas_used_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1838,7 +1865,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42188ffffffffffffffff83040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.BLOB_GAS_USED_ABOVE_LIMIT|BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -1863,6 +1890,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9591ed433cebbf13b7861561feafcaf4ee12c941c851dc5180716bb9e8c8d5da" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1945,9 +1973,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-parent_blobs=0-new_blobs=2-header_blob_gas_used=0-correct:0x40000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1979,7 +2008,7 @@ "blocks": [ { "rlp": "0xf902f2f9023fa0571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0eae9042723c64312515c4e9612a0d71e7c1880d25f7145345f5a0a389ad3e6c2a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083040000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a70180800782afc89400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a025a32181e123cb9a3c7c3053a8e27bded73e738a16a5a1f2912396c0124b6aa6a02242ac81eb2690b5c52c834e084a97db7b8ed67ccb3080a945e0f60773f2e7d6c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1", @@ -2004,6 +2033,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x32f573b9fc5957adc516640a71bb386370861c17f3c267d829ec3f42e935a34b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2087,9 +2117,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-parent_blobs=0-new_blobs=2-header_blob_gas_used=131072-correct:0x40000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_131072]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2121,7 +2152,7 @@ "blocks": [ { "rlp": "0xf902f5f90242a0571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0eae9042723c64312515c4e9612a0d71e7c1880d25f7145345f5a0a389ad3e6c2a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a70180800782afc89400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a025a32181e123cb9a3c7c3053a8e27bded73e738a16a5a1f2912396c0124b6aa6a02242ac81eb2690b5c52c834e084a97db7b8ed67ccb3080a945e0f60773f2e7d6c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1", @@ -2146,6 +2177,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x40ef8637a753e8ae589aeff7b1b323fee0d191368f16106bfdc769bb90c6808f" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2229,9 +2261,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-parent_blobs=0-new_blobs=2-header_blob_gas_used=393216-correct:0x40000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_393216]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2263,7 +2296,7 @@ "blocks": [ { "rlp": "0xf902f5f90242a0571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0eae9042723c64312515c4e9612a0d71e7c1880d25f7145345f5a0a389ad3e6c2a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218306000083040000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a70180800782afc89400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a025a32181e123cb9a3c7c3053a8e27bded73e738a16a5a1f2912396c0124b6aa6a02242ac81eb2690b5c52c834e084a97db7b8ed67ccb3080a945e0f60773f2e7d6c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1", @@ -2288,6 +2321,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc4ca9f95873898193d07571bcfff9edbd353c5b54a3e0571fec5d839020948ab" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2371,9 +2405,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-parent_blobs=0-new_blobs=2-header_blob_gas_used=524288-correct:0x40000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_524288]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2405,7 +2440,7 @@ "blocks": [ { "rlp": "0xf902f5f90242a0571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0eae9042723c64312515c4e9612a0d71e7c1880d25f7145345f5a0a389ad3e6c2a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218308000083040000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a70180800782afc89400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a025a32181e123cb9a3c7c3053a8e27bded73e738a16a5a1f2912396c0124b6aa6a02242ac81eb2690b5c52c834e084a97db7b8ed67ccb3080a945e0f60773f2e7d6c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1", @@ -2430,6 +2465,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x283b3de64ca6a55f4f07fee8ee82eef6786aff269f08c8648c9a7d2fabc596c2" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2513,9 +2549,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-parent_blobs=0-new_blobs=2-header_blob_gas_used=655360-correct:0x40000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_655360]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2547,7 +2584,7 @@ "blocks": [ { "rlp": "0xf902f5f90242a0571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0eae9042723c64312515c4e9612a0d71e7c1880d25f7145345f5a0a389ad3e6c2a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a000083040000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a70180800782afc89400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a025a32181e123cb9a3c7c3053a8e27bded73e738a16a5a1f2912396c0124b6aa6a02242ac81eb2690b5c52c834e084a97db7b8ed67ccb3080a945e0f60773f2e7d6c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1", @@ -2572,6 +2609,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc0ba4b9f623ba3f3c024ba4d0390e202f6cef9df34510b9d6d88ea354160d06c" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2655,9 +2693,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-parent_blobs=0-new_blobs=2-header_blob_gas_used=786432-correct:0x40000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_786432]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2689,7 +2728,7 @@ "blocks": [ { "rlp": "0xf902f5f90242a0571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0eae9042723c64312515c4e9612a0d71e7c1880d25f7145345f5a0a389ad3e6c2a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c000083040000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a70180800782afc89400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a025a32181e123cb9a3c7c3053a8e27bded73e738a16a5a1f2912396c0124b6aa6a02242ac81eb2690b5c52c834e084a97db7b8ed67ccb3080a945e0f60773f2e7d6c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1", @@ -2714,6 +2753,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xff225aec675f9b4ce74300d5b5208f796a9a89799ba98df6a40f332440fea24c" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2797,9 +2837,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-parent_blobs=0-new_blobs=2-header_blob_gas_used=18446744073709551615-correct:0x40000-header:0xffffffffffffffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_2-header_blob_gas_used_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2831,7 +2872,7 @@ "blocks": [ { "rlp": "0xf902faf90247a0571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0eae9042723c64312515c4e9612a0d71e7c1880d25f7145345f5a0a389ad3e6c2a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42188ffffffffffffffff83040000a00000000000000000000000000000000000000000000000000000000000000000f8acb8aa03f8a70180800782afc89400000000000000000000000000000000000001000180c001f842a00100000000000000000000000000000000000000000000000000000000000000a0010000000000000000000000000000000000000000000000000000000000000101a025a32181e123cb9a3c7c3053a8e27bded73e738a16a5a1f2912396c0124b6aa6a02242ac81eb2690b5c52c834e084a97db7b8ed67ccb3080a945e0f60773f2e7d6c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.BLOB_GAS_USED_ABOVE_LIMIT|BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x571b1f7cf38b8149867618e6e523a39744b6c23535e629952fcc1dd81beb8fc1", @@ -2856,6 +2897,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2c1b06f96eaee578188b34394577cc111936d176289dbb231ae5e3ce91ba3695" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2939,9 +2981,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-parent_blobs=0-new_blobs=3-header_blob_gas_used=0-correct:0x60000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2973,7 +3016,7 @@ "blocks": [ { "rlp": "0xf90313f9023fa0b312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0164e121ca927a187d7cbf671b36aa28ba50660f4a4da2036e0df0596734b8e86a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083040000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c80180800782afc89400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0a2a91b27020be671eb502d5cc84e771c0412416a41c2fc64debbbd827b2ba363a052efeeb1ce7509caf690d9ad89fe9f5c63334a5e6083f134278ee027aed559a2c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048", @@ -2998,6 +3041,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x55a27bddc837faef8aa47d7667cfee24e986cf6209123676f20243305a40c8a5" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3082,9 +3126,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-parent_blobs=0-new_blobs=3-header_blob_gas_used=131072-correct:0x60000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_131072]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3116,7 +3161,7 @@ "blocks": [ { "rlp": "0xf90316f90242a0b312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0164e121ca927a187d7cbf671b36aa28ba50660f4a4da2036e0df0596734b8e86a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c80180800782afc89400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0a2a91b27020be671eb502d5cc84e771c0412416a41c2fc64debbbd827b2ba363a052efeeb1ce7509caf690d9ad89fe9f5c63334a5e6083f134278ee027aed559a2c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048", @@ -3141,6 +3186,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5157f47c3f000dcb6ff56e9d908c7f3f6796efcc49cfbacae71ce86630f8a2f8" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3225,9 +3271,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-parent_blobs=0-new_blobs=3-header_blob_gas_used=262144-correct:0x60000-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_262144]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3259,7 +3306,7 @@ "blocks": [ { "rlp": "0xf90316f90242a0b312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0164e121ca927a187d7cbf671b36aa28ba50660f4a4da2036e0df0596734b8e86a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218304000083040000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c80180800782afc89400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0a2a91b27020be671eb502d5cc84e771c0412416a41c2fc64debbbd827b2ba363a052efeeb1ce7509caf690d9ad89fe9f5c63334a5e6083f134278ee027aed559a2c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048", @@ -3284,6 +3331,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3f731dd7f158672f564c7a6152006bc24e9b955f2a5422965c051702e664976b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3368,9 +3416,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-parent_blobs=0-new_blobs=3-header_blob_gas_used=524288-correct:0x60000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_524288]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3402,7 +3451,7 @@ "blocks": [ { "rlp": "0xf90316f90242a0b312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0164e121ca927a187d7cbf671b36aa28ba50660f4a4da2036e0df0596734b8e86a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218308000083040000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c80180800782afc89400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0a2a91b27020be671eb502d5cc84e771c0412416a41c2fc64debbbd827b2ba363a052efeeb1ce7509caf690d9ad89fe9f5c63334a5e6083f134278ee027aed559a2c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048", @@ -3427,6 +3476,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc14333b4f96ce77d5a5456a2e59c0c66d4c88c09d236fb744b49fd47c9e137ce" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3511,9 +3561,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-parent_blobs=0-new_blobs=3-header_blob_gas_used=655360-correct:0x60000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_655360]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3545,7 +3596,7 @@ "blocks": [ { "rlp": "0xf90316f90242a0b312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0164e121ca927a187d7cbf671b36aa28ba50660f4a4da2036e0df0596734b8e86a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a000083040000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c80180800782afc89400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0a2a91b27020be671eb502d5cc84e771c0412416a41c2fc64debbbd827b2ba363a052efeeb1ce7509caf690d9ad89fe9f5c63334a5e6083f134278ee027aed559a2c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048", @@ -3570,6 +3621,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb6a646f5e81d484b0f7cffa6945dc0fb7fe2f33d6b11b5db2432654b924bcf17" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3654,9 +3706,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-parent_blobs=0-new_blobs=3-header_blob_gas_used=786432-correct:0x60000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_786432]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3688,7 +3741,7 @@ "blocks": [ { "rlp": "0xf90316f90242a0b312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0164e121ca927a187d7cbf671b36aa28ba50660f4a4da2036e0df0596734b8e86a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c000083040000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c80180800782afc89400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0a2a91b27020be671eb502d5cc84e771c0412416a41c2fc64debbbd827b2ba363a052efeeb1ce7509caf690d9ad89fe9f5c63334a5e6083f134278ee027aed559a2c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048", @@ -3713,6 +3766,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc3bad586ddc0340d805aa9b1a5f97330952ef7a3948fbf9e146676225236806d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3797,9 +3851,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-parent_blobs=0-new_blobs=3-header_blob_gas_used=18446744073709551615-correct:0x60000-header:0xffffffffffffffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_3-header_blob_gas_used_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3831,7 +3886,7 @@ "blocks": [ { "rlp": "0xf9031bf90247a0b312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0164e121ca927a187d7cbf671b36aa28ba50660f4a4da2036e0df0596734b8e86a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42188ffffffffffffffff83040000a00000000000000000000000000000000000000000000000000000000000000000f8cdb8cb03f8c80180800782afc89400000000000000000000000000000000000001000180c001f863a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a0010000000000000000000000000000000000000000000000000000000000000201a0a2a91b27020be671eb502d5cc84e771c0412416a41c2fc64debbbd827b2ba363a052efeeb1ce7509caf690d9ad89fe9f5c63334a5e6083f134278ee027aed559a2c0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.BLOB_GAS_USED_ABOVE_LIMIT|BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xb312424fa36d8b8e36e9ced3f542c3908313b381877a22485ac76c6ffe908048", @@ -3856,6 +3911,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf426be13bc5c813ab7060b838af68178056f07f7019ed3ad8a5cfb46e5152173" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3940,9 +3996,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-parent_blobs=0-new_blobs=4-header_blob_gas_used=0-correct:0x80000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3974,7 +4031,7 @@ "blocks": [ { "rlp": "0xf90334f9023fa07b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca08f6acd7079646ecd5cc4706752d22cd611201d82afbd34ed112dc5cdd399bd30a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083040000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e90180800782afc89400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a006ed1e3d67f1be5a4b57eb2bfceb39c011dabf91574241011e1e5e9cb0b38171a04d4ce894d9065d7bd55b88b5e46978b26b5b13adfa2d204ca6321ea64d5b772ec0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799", @@ -3999,6 +4056,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xddc3ae0988d870acec8a468a47150f725d8f48e75e3e75293575c1ad4e070a27" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4084,9 +4142,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-parent_blobs=0-new_blobs=4-header_blob_gas_used=131072-correct:0x80000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_131072]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4118,7 +4177,7 @@ "blocks": [ { "rlp": "0xf90337f90242a07b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca08f6acd7079646ecd5cc4706752d22cd611201d82afbd34ed112dc5cdd399bd30a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e90180800782afc89400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a006ed1e3d67f1be5a4b57eb2bfceb39c011dabf91574241011e1e5e9cb0b38171a04d4ce894d9065d7bd55b88b5e46978b26b5b13adfa2d204ca6321ea64d5b772ec0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799", @@ -4143,6 +4202,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3600e4ff4bc0514b24133ca26c152a841357c59012c3e86ac143049676ac6064" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4228,9 +4288,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-parent_blobs=0-new_blobs=4-header_blob_gas_used=262144-correct:0x80000-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_262144]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4262,7 +4323,7 @@ "blocks": [ { "rlp": "0xf90337f90242a07b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca08f6acd7079646ecd5cc4706752d22cd611201d82afbd34ed112dc5cdd399bd30a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218304000083040000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e90180800782afc89400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a006ed1e3d67f1be5a4b57eb2bfceb39c011dabf91574241011e1e5e9cb0b38171a04d4ce894d9065d7bd55b88b5e46978b26b5b13adfa2d204ca6321ea64d5b772ec0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799", @@ -4287,6 +4348,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9d3bce6613b4d863376d052c116b181740539c3b7d5979ab059392bac623a892" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4372,9 +4434,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-parent_blobs=0-new_blobs=4-header_blob_gas_used=393216-correct:0x80000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_393216]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4406,7 +4469,7 @@ "blocks": [ { "rlp": "0xf90337f90242a07b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca08f6acd7079646ecd5cc4706752d22cd611201d82afbd34ed112dc5cdd399bd30a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218306000083040000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e90180800782afc89400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a006ed1e3d67f1be5a4b57eb2bfceb39c011dabf91574241011e1e5e9cb0b38171a04d4ce894d9065d7bd55b88b5e46978b26b5b13adfa2d204ca6321ea64d5b772ec0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799", @@ -4431,6 +4494,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x24bbdd5b1d17a1c4e12aa7e91b856002b4194aabc8c81abd64b72eab829ea728" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4516,9 +4580,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-parent_blobs=0-new_blobs=4-header_blob_gas_used=655360-correct:0x80000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_655360]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4550,7 +4615,7 @@ "blocks": [ { "rlp": "0xf90337f90242a07b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca08f6acd7079646ecd5cc4706752d22cd611201d82afbd34ed112dc5cdd399bd30a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a000083040000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e90180800782afc89400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a006ed1e3d67f1be5a4b57eb2bfceb39c011dabf91574241011e1e5e9cb0b38171a04d4ce894d9065d7bd55b88b5e46978b26b5b13adfa2d204ca6321ea64d5b772ec0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799", @@ -4575,6 +4640,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1053c2c39e39939e51173395033aec8f56db8b5b426980c1fe9235fe436e306c" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4660,9 +4726,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-parent_blobs=0-new_blobs=4-header_blob_gas_used=786432-correct:0x80000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_786432]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4694,7 +4761,7 @@ "blocks": [ { "rlp": "0xf90337f90242a07b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca08f6acd7079646ecd5cc4706752d22cd611201d82afbd34ed112dc5cdd399bd30a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c000083040000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e90180800782afc89400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a006ed1e3d67f1be5a4b57eb2bfceb39c011dabf91574241011e1e5e9cb0b38171a04d4ce894d9065d7bd55b88b5e46978b26b5b13adfa2d204ca6321ea64d5b772ec0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799", @@ -4719,6 +4786,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1d5132fba3d9f48c455d0f686fab768f8cc2fc2d4a3ab706834c33cbeef3950b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4804,9 +4872,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-parent_blobs=0-new_blobs=4-header_blob_gas_used=18446744073709551615-correct:0x80000-header:0xffffffffffffffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_4-header_blob_gas_used_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4838,7 +4907,7 @@ "blocks": [ { "rlp": "0xf9033cf90247a07b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca08f6acd7079646ecd5cc4706752d22cd611201d82afbd34ed112dc5cdd399bd30a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42188ffffffffffffffff83040000a00000000000000000000000000000000000000000000000000000000000000000f8eeb8ec03f8e90180800782afc89400000000000000000000000000000000000001000180c001f884a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a0010000000000000000000000000000000000000000000000000000000000000380a006ed1e3d67f1be5a4b57eb2bfceb39c011dabf91574241011e1e5e9cb0b38171a04d4ce894d9065d7bd55b88b5e46978b26b5b13adfa2d204ca6321ea64d5b772ec0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.BLOB_GAS_USED_ABOVE_LIMIT|BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x7b655b3dfdcd8b1b0633955ab90eba54c6ff20d8bb324c108c900efa77643799", @@ -4863,6 +4932,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa8a369d636f7b49c9a44f006754611f488ee590e31dffbae5c52d5933910d660" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -4948,9 +5018,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-parent_blobs=0-new_blobs=5-header_blob_gas_used=0-correct:0xa0000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4982,7 +5053,7 @@ "blocks": [ { "rlp": "0xf90358f9023fa0db2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca020f36c013e61ffbbb870fd5037691af27e276382fb0790a2568a9b70a660f695a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083040000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a0180800782afc89400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a0ddcf2d9ad185ba2bc91a992e59bd49a8bf21c9c6c545e62f313fd05ce54d87f8a02150c7eb893380d15bdb85a821c0bbfd83e2e8e17c5bd579740fa17903881c6dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64", @@ -5007,6 +5078,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4e45185e13d71637b6d7488cae82c12373cf37942b6ecc67e92bda0f10435e27" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5093,9 +5165,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-parent_blobs=0-new_blobs=5-header_blob_gas_used=131072-correct:0xa0000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_131072]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5127,7 +5200,7 @@ "blocks": [ { "rlp": "0xf9035bf90242a0db2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca020f36c013e61ffbbb870fd5037691af27e276382fb0790a2568a9b70a660f695a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a0180800782afc89400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a0ddcf2d9ad185ba2bc91a992e59bd49a8bf21c9c6c545e62f313fd05ce54d87f8a02150c7eb893380d15bdb85a821c0bbfd83e2e8e17c5bd579740fa17903881c6dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64", @@ -5152,6 +5225,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x55701ca283fc873a288c3ddd01a1b08e496dfa46692fc67ed38efd659f1b36e2" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5238,9 +5312,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-parent_blobs=0-new_blobs=5-header_blob_gas_used=262144-correct:0xa0000-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_262144]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5272,7 +5347,7 @@ "blocks": [ { "rlp": "0xf9035bf90242a0db2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca020f36c013e61ffbbb870fd5037691af27e276382fb0790a2568a9b70a660f695a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218304000083040000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a0180800782afc89400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a0ddcf2d9ad185ba2bc91a992e59bd49a8bf21c9c6c545e62f313fd05ce54d87f8a02150c7eb893380d15bdb85a821c0bbfd83e2e8e17c5bd579740fa17903881c6dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64", @@ -5297,6 +5372,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd323a35fdd82d63f6c476b12f02e31c4be1d436c5be660453c2690685139b464" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5383,9 +5459,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun-parent_blobs=0-new_blobs=5-header_blob_gas_used=393216-correct:0xa0000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_393216]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5417,7 +5494,7 @@ "blocks": [ { "rlp": "0xf9035bf90242a0db2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca020f36c013e61ffbbb870fd5037691af27e276382fb0790a2568a9b70a660f695a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218306000083040000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a0180800782afc89400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a0ddcf2d9ad185ba2bc91a992e59bd49a8bf21c9c6c545e62f313fd05ce54d87f8a02150c7eb893380d15bdb85a821c0bbfd83e2e8e17c5bd579740fa17903881c6dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64", @@ -5442,6 +5519,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4d0ad23571c38a98890ba7b502db941c4bea7392269f45d667c577636b0356e5" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5528,9 +5606,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun-parent_blobs=0-new_blobs=5-header_blob_gas_used=524288-correct:0xa0000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_524288]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5562,7 +5641,7 @@ "blocks": [ { "rlp": "0xf9035bf90242a0db2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca020f36c013e61ffbbb870fd5037691af27e276382fb0790a2568a9b70a660f695a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218308000083040000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a0180800782afc89400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a0ddcf2d9ad185ba2bc91a992e59bd49a8bf21c9c6c545e62f313fd05ce54d87f8a02150c7eb893380d15bdb85a821c0bbfd83e2e8e17c5bd579740fa17903881c6dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64", @@ -5587,6 +5666,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf496fc9ef2f440a7dc194558da45eb9a6d39d456684072bdb0e6e40f9c53afaa" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5673,9 +5753,10 @@ }, "sealEngine": "NoProof" }, - "040-fork=Cancun-parent_blobs=0-new_blobs=5-header_blob_gas_used=786432-correct:0xa0000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_786432]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5707,7 +5788,7 @@ "blocks": [ { "rlp": "0xf9035bf90242a0db2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca020f36c013e61ffbbb870fd5037691af27e276382fb0790a2568a9b70a660f695a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830c000083040000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a0180800782afc89400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a0ddcf2d9ad185ba2bc91a992e59bd49a8bf21c9c6c545e62f313fd05ce54d87f8a02150c7eb893380d15bdb85a821c0bbfd83e2e8e17c5bd579740fa17903881c6dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64", @@ -5732,6 +5813,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xcc17c866bfd4df2d4176c3a1db421912cbfe9140c8af1da68ee15142c92208f0" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5818,9 +5900,10 @@ }, "sealEngine": "NoProof" }, - "041-fork=Cancun-parent_blobs=0-new_blobs=5-header_blob_gas_used=18446744073709551615-correct:0xa0000-header:0xffffffffffffffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_5-header_blob_gas_used_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5852,7 +5935,7 @@ "blocks": [ { "rlp": "0xf90360f90247a0db2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca020f36c013e61ffbbb870fd5037691af27e276382fb0790a2568a9b70a660f695a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42188ffffffffffffffff83040000a00000000000000000000000000000000000000000000000000000000000000000f90111b9010e03f9010a0180800782afc89400000000000000000000000000000000000001000180c001f8a5a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a0010000000000000000000000000000000000000000000000000000000000000401a0ddcf2d9ad185ba2bc91a992e59bd49a8bf21c9c6c545e62f313fd05ce54d87f8a02150c7eb893380d15bdb85a821c0bbfd83e2e8e17c5bd579740fa17903881c6dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.BLOB_GAS_USED_ABOVE_LIMIT|BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2f72d281fe090653811fdd031bea343ba6f83fc1e36191a9098684e1078d64", @@ -5877,6 +5960,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1bfccb460adf5476bd9b486ee905596b222ed22c4282b6885210dcc338f8dfaa" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -5963,9 +6047,10 @@ }, "sealEngine": "NoProof" }, - "042-fork=Cancun-parent_blobs=0-new_blobs=6-header_blob_gas_used=0-correct:0xc0000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5997,7 +6082,7 @@ "blocks": [ { "rlp": "0xf90379f9023fa01bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e466b45b67935b425ddc7e6d7e8761063f6e4dfa5db55b895bb150ace26812b8a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218083040000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b0180800782afc89400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a02ce2486e0e80dffcb02691491cec0986157404d9bd4e3b56bd7c71a766527c59a06cc1dc36b255ae67d0cf1e1660c6b7d934970b3a139d0376a5128dc523ccaf8dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x1bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652", @@ -6022,6 +6107,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2929c500bb945fc9b2451abba159273c088289c35f0f444b574a4bdec41ea952" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6109,9 +6195,10 @@ }, "sealEngine": "NoProof" }, - "043-fork=Cancun-parent_blobs=0-new_blobs=6-header_blob_gas_used=131072-correct:0xc0000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_131072]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6143,7 +6230,7 @@ "blocks": [ { "rlp": "0xf9037cf90242a01bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e466b45b67935b425ddc7e6d7e8761063f6e4dfa5db55b895bb150ace26812b8a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b0180800782afc89400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a02ce2486e0e80dffcb02691491cec0986157404d9bd4e3b56bd7c71a766527c59a06cc1dc36b255ae67d0cf1e1660c6b7d934970b3a139d0376a5128dc523ccaf8dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x1bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652", @@ -6168,6 +6255,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4599d69b9c936426fbc7666495e75f7ce4c1f780f8bcd81f2d3621a4d2c0e9f2" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6255,9 +6343,10 @@ }, "sealEngine": "NoProof" }, - "044-fork=Cancun-parent_blobs=0-new_blobs=6-header_blob_gas_used=262144-correct:0xc0000-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_262144]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6289,7 +6378,7 @@ "blocks": [ { "rlp": "0xf9037cf90242a01bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e466b45b67935b425ddc7e6d7e8761063f6e4dfa5db55b895bb150ace26812b8a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218304000083040000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b0180800782afc89400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a02ce2486e0e80dffcb02691491cec0986157404d9bd4e3b56bd7c71a766527c59a06cc1dc36b255ae67d0cf1e1660c6b7d934970b3a139d0376a5128dc523ccaf8dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x1bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652", @@ -6314,6 +6403,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7c9b63194c04b85ab395935bc917c59ae74e5616e70da3bac84c4eb53492d07e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6401,9 +6491,10 @@ }, "sealEngine": "NoProof" }, - "045-fork=Cancun-parent_blobs=0-new_blobs=6-header_blob_gas_used=393216-correct:0xc0000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_393216]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6435,7 +6526,7 @@ "blocks": [ { "rlp": "0xf9037cf90242a01bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e466b45b67935b425ddc7e6d7e8761063f6e4dfa5db55b895bb150ace26812b8a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218306000083040000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b0180800782afc89400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a02ce2486e0e80dffcb02691491cec0986157404d9bd4e3b56bd7c71a766527c59a06cc1dc36b255ae67d0cf1e1660c6b7d934970b3a139d0376a5128dc523ccaf8dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x1bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652", @@ -6460,6 +6551,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xaae35f56be7dd7f196a3c639f80edb7bf57638196014e91c98eecd6615c50646" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6547,9 +6639,10 @@ }, "sealEngine": "NoProof" }, - "046-fork=Cancun-parent_blobs=0-new_blobs=6-header_blob_gas_used=524288-correct:0xc0000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_524288]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6581,7 +6674,7 @@ "blocks": [ { "rlp": "0xf9037cf90242a01bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e466b45b67935b425ddc7e6d7e8761063f6e4dfa5db55b895bb150ace26812b8a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218308000083040000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b0180800782afc89400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a02ce2486e0e80dffcb02691491cec0986157404d9bd4e3b56bd7c71a766527c59a06cc1dc36b255ae67d0cf1e1660c6b7d934970b3a139d0376a5128dc523ccaf8dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x1bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652", @@ -6606,6 +6699,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4dedfd4d169fe939eb535a86a689b6cfbfbb08e854781a97d654b42b09e971cc" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6693,9 +6787,10 @@ }, "sealEngine": "NoProof" }, - "047-fork=Cancun-parent_blobs=0-new_blobs=6-header_blob_gas_used=655360-correct:0xc0000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_655360]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6727,7 +6822,7 @@ "blocks": [ { "rlp": "0xf9037cf90242a01bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e466b45b67935b425ddc7e6d7e8761063f6e4dfa5db55b895bb150ace26812b8a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830a000083040000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b0180800782afc89400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a02ce2486e0e80dffcb02691491cec0986157404d9bd4e3b56bd7c71a766527c59a06cc1dc36b255ae67d0cf1e1660c6b7d934970b3a139d0376a5128dc523ccaf8dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x1bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652", @@ -6752,6 +6847,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x367960cf3c87035e2416315129a603c72ec4e818eeb00d6a4baa86eef81edac0" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -6839,9 +6935,10 @@ }, "sealEngine": "NoProof" }, - "048-fork=Cancun-parent_blobs=0-new_blobs=6-header_blob_gas_used=18446744073709551615-correct:0xc0000-header:0xffffffffffffffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_blob_gas_used_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_6-header_blob_gas_used_18446744073709551615]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6873,7 +6970,7 @@ "blocks": [ { "rlp": "0xf90381f90247a01bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e466b45b67935b425ddc7e6d7e8761063f6e4dfa5db55b895bb150ace26812b8a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42188ffffffffffffffff83040000a00000000000000000000000000000000000000000000000000000000000000000f90132b9012f03f9012b0180800782afc89400000000000000000000000000000000000001000180c001f8c6a00100000000000000000000000000000000000000000000000000000000000000a00100000000000000000000000000000000000000000000000000000000000001a00100000000000000000000000000000000000000000000000000000000000002a00100000000000000000000000000000000000000000000000000000000000003a00100000000000000000000000000000000000000000000000000000000000004a0010000000000000000000000000000000000000000000000000000000000000580a02ce2486e0e80dffcb02691491cec0986157404d9bd4e3b56bd7c71a766527c59a06cc1dc36b255ae67d0cf1e1660c6b7d934970b3a139d0376a5128dc523ccaf8dc0c0", - "expectException": "invalid blob gas used", + "expectException": "BlockException.BLOB_GAS_USED_ABOVE_LIMIT|BlockException.INCORRECT_BLOB_GAS_USED", "rlp_decoded": { "blockHeader": { "parentHash": "0x1bb59dd376be8aff21438ab60f8fcb70d68be44a226813094b2d49f1c5b38652", @@ -6898,6 +6995,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0ff9f5fcba4add07c651b6baf06ea569ffd42cf9d30635014e293be5434791af" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_above_target_change.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_above_target_change.json index 35bf3971022..e60c126c17e 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_above_target_change.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_above_target_change.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-new_blobs=1-zero_blobs_decrease_more_than_expected-correct:0x40000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test-new_blobs_1-zero_blobs_decrease_more_than_expected]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -33,7 +34,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -58,6 +59,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0de9ecc1eaf7213e6ec4cc19358796096d60740ee2950a42ad179096ad7fcc83" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -140,9 +142,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-new_blobs=1-max_blobs_increase_more_than_expected-correct:0x100000-header:0x120000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_above_target_change[fork_Cancun-blockchain_test-new_blobs_1-max_blobs_increase_more_than_expected]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -230,7 +233,7 @@ }, { "rlp": "0xf902d3f90242a01c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083120000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2e", @@ -255,6 +258,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x04022b55371e25f2a7fe8f942909a0335d33d598d118b3ad5d30948c4e069385" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_change.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_change.json index 05e4f522d97..a0f931cdc95 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_change.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_change.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-new_blobs=1-parent_blobs=0-header_excess_blobs_delta=-3-correct:0x40000-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -33,7 +34,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -58,6 +59,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb0ae2da2b3c7b81cc9cbd85670aa8d70c2fa9520515347eeddae3a9d8971e088" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -140,9 +142,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-new_blobs=1-parent_blobs=0-header_excess_blobs_delta=-2-correct:0x40000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -174,7 +177,7 @@ "blocks": [ { "rlp": "0xf902d0f9023fa05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -199,6 +202,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x03e22ea02241c69c4c2be271e559c96df35ed94bd5bb1dba70600f7708e9d5ad" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -281,9 +285,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-new_blobs=1-parent_blobs=0-header_excess_blobs_delta=-1-correct:0x40000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_-1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -315,7 +320,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -340,6 +345,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0de9ecc1eaf7213e6ec4cc19358796096d60740ee2950a42ad179096ad7fcc83" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -422,9 +428,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-new_blobs=1-parent_blobs=0-header_excess_blobs_delta=1-correct:0x40000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -456,7 +463,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -481,6 +488,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd49d2d9433c30198e08f7e515f1477cca4ca9c7eac647a85422f165bd3e6fa1c" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -563,9 +571,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-new_blobs=1-parent_blobs=0-header_excess_blobs_delta=2-correct:0x40000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -597,7 +606,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -622,6 +631,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdfc8f35128ce527aa73bb7163f3ed32c4dbd0cf1eb438ecc9fb5f27e7f91a673" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -704,9 +714,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-new_blobs=1-parent_blobs=0-header_excess_blobs_delta=3-correct:0x40000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_0-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -738,7 +749,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -763,6 +774,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4e55e06163495ac46a1f620d43451be2214b81a175b595ea8392c34d76b25d65" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -845,9 +857,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-new_blobs=1-parent_blobs=1-header_excess_blobs_delta=-3-correct:0x60000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -930,7 +943,7 @@ }, { "rlp": "0xf902d0f9023fa0c1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xc1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69", @@ -955,6 +968,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x339669f618eab0fed6b09bf2a4db6e0bcb9e0150914f213088c3f803f6d54223" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1045,9 +1059,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-new_blobs=1-parent_blobs=1-header_excess_blobs_delta=-2-correct:0x60000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1130,7 +1145,7 @@ }, { "rlp": "0xf902d3f90242a0c1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xc1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69", @@ -1155,6 +1170,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x43306e063851dbc5fe4d597266ed0719506ecbde714dc2070d1a1962eaaf2f55" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1245,9 +1261,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-new_blobs=1-parent_blobs=1-header_excess_blobs_delta=-1-correct:0x60000-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_-1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1330,7 +1347,7 @@ }, { "rlp": "0xf902d3f90242a0c1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xc1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69", @@ -1355,6 +1372,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1295cabb02c5167b5e5782e355a20542b428b098527a80a48c23fe542aef5c0c" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1445,9 +1463,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-new_blobs=1-parent_blobs=1-header_excess_blobs_delta=1-correct:0x60000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1530,7 +1549,7 @@ }, { "rlp": "0xf902d3f90242a0c1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xc1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69", @@ -1555,6 +1574,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc86b89998dae1ab4a93b93f73a2c7efa6a27d54775c72bce59395c80fa0f6906" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1645,9 +1665,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-new_blobs=1-parent_blobs=1-header_excess_blobs_delta=2-correct:0x60000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1730,7 +1751,7 @@ }, { "rlp": "0xf902d3f90242a0c1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xc1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69", @@ -1755,6 +1776,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x45c9da351edf1d03771ff619674589575d6ec750233ddc34436d4c17989d6d21" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1845,9 +1867,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-new_blobs=1-parent_blobs=1-header_excess_blobs_delta=3-correct:0x60000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_1-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1930,7 +1953,7 @@ }, { "rlp": "0xf902d3f90242a0c1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830c0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xc1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69", @@ -1955,6 +1978,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf0102694c0c7740e15e4f454a0742be62dfcd1a39b9e7eb89d74b69654ad7213" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2045,9 +2069,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-new_blobs=1-parent_blobs=2-header_excess_blobs_delta=-3-correct:0x80000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2131,7 +2156,7 @@ }, { "rlp": "0xf902d3f90242a0b3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xb3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93", @@ -2156,6 +2181,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0fd4ebe4b89efb507c63c2797883dc74a9d9638acced6eb48db87f2ff02c6c2d" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2246,9 +2272,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-new_blobs=1-parent_blobs=2-header_excess_blobs_delta=-2-correct:0x80000-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2332,7 +2359,7 @@ }, { "rlp": "0xf902d3f90242a0b3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xb3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93", @@ -2357,6 +2384,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd49f0d2ebb05888eddcfb7fadacba580793c9e68fe0cdc4406137ff5c76d5504" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2447,9 +2475,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-new_blobs=1-parent_blobs=2-header_excess_blobs_delta=-1-correct:0x80000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_-1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2533,7 +2562,7 @@ }, { "rlp": "0xf902d3f90242a0b3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xb3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93", @@ -2558,6 +2587,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x557d3db284b5acd34f707d6c039b26deac0c915f13d0fea37c03e0e52ca928b4" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2648,9 +2678,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-new_blobs=1-parent_blobs=2-header_excess_blobs_delta=1-correct:0x80000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2734,7 +2765,7 @@ }, { "rlp": "0xf902d3f90242a0b3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xb3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93", @@ -2759,6 +2790,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9637613028e9fb345df14630252dab3bf3e902af92c5589300f03d0fed26b8fb" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2849,9 +2881,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-new_blobs=1-parent_blobs=2-header_excess_blobs_delta=2-correct:0x80000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2935,7 +2968,7 @@ }, { "rlp": "0xf902d3f90242a0b3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830c0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xb3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93", @@ -2960,6 +2993,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x981df8dcfec46cec990b584d2834be068426e14d393fae7f58925534e6286f8f" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3050,9 +3084,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-new_blobs=1-parent_blobs=2-header_excess_blobs_delta=3-correct:0x80000-header:0xe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_2-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3136,7 +3171,7 @@ }, { "rlp": "0xf902d3f90242a0b3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xb3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93", @@ -3161,6 +3196,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x94e34e197dbb7e2f8fbc772df764cbc22a5654b1595eee51f416de1eb2af7448" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3251,9 +3287,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-new_blobs=1-parent_blobs=3-header_excess_blobs_delta=-3-correct:0xa0000-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3338,7 +3375,7 @@ }, { "rlp": "0xf902d3f90242a0a9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3", @@ -3363,6 +3400,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5983d885dd90ae9f616570e394104123e0021089006d865673933e083534f77b" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3453,9 +3491,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-new_blobs=1-parent_blobs=3-header_excess_blobs_delta=-2-correct:0xa0000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3540,7 +3579,7 @@ }, { "rlp": "0xf902d3f90242a0a9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3", @@ -3565,6 +3604,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xba6ec2454209f9d05027836f40f00b591fecaae0b73734a00c8f7bc0b3ccd3c3" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3655,9 +3695,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-new_blobs=1-parent_blobs=3-header_excess_blobs_delta=-1-correct:0xa0000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_-1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3742,7 +3783,7 @@ }, { "rlp": "0xf902d3f90242a0a9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3", @@ -3767,6 +3808,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe83ede7746ecbb9fbf1df8b764c86a70f8027c41e89c435c8d25229f4135643d" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3857,9 +3899,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-new_blobs=1-parent_blobs=3-header_excess_blobs_delta=1-correct:0xa0000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3944,7 +3987,7 @@ }, { "rlp": "0xf902d3f90242a0a9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830c0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3", @@ -3969,6 +4012,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x38a0918ed38ba806574dc3f0731bc24f602fd9989d8d485fce9d25d37d7d866d" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4059,9 +4103,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-new_blobs=1-parent_blobs=3-header_excess_blobs_delta=2-correct:0xa0000-header:0xe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4146,7 +4191,7 @@ }, { "rlp": "0xf902d3f90242a0a9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3", @@ -4171,6 +4216,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xefa4bd9695f4d88e036e8e178118d2dfd6c38107a49f2cbbaf6ec844c132622f" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4261,9 +4307,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-new_blobs=1-parent_blobs=3-header_excess_blobs_delta=3-correct:0xa0000-header:0x100000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_3-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4348,7 +4395,7 @@ }, { "rlp": "0xf902d3f90242a0a9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083100000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3", @@ -4373,6 +4420,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x856de497b4c16eac67b5a24435c69416578b9c071aff735b9e703db2b802cc16" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4463,9 +4511,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-new_blobs=1-parent_blobs=4-header_excess_blobs_delta=-3-correct:0xc0000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4551,7 +4600,7 @@ }, { "rlp": "0xf902d3f90242a01dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02de", @@ -4576,6 +4625,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x551b2e6b4b8ba2680e3a6dd891cd557aea9f96d7ea98490a651055f798645b83" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4666,9 +4716,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-new_blobs=1-parent_blobs=4-header_excess_blobs_delta=-2-correct:0xc0000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4754,7 +4805,7 @@ }, { "rlp": "0xf902d3f90242a01dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02de", @@ -4779,6 +4830,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xbea84808c88cb6e29ecaae8814df6ac245ca47d1117fd48547a946a61341328b" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4869,9 +4921,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-new_blobs=1-parent_blobs=4-header_excess_blobs_delta=-1-correct:0xc0000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_-1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4957,7 +5010,7 @@ }, { "rlp": "0xf902d3f90242a01dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02de", @@ -4982,6 +5035,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc1960e4db7343cf3a246ba042050ca35165a4d689eae4ccd25fb5c306f4f57a0" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -5072,9 +5126,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-new_blobs=1-parent_blobs=4-header_excess_blobs_delta=1-correct:0xc0000-header:0xe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5160,7 +5215,7 @@ }, { "rlp": "0xf902d3f90242a01dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02de", @@ -5185,6 +5240,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x81dbd4064d93c5aab6fe38a32ee478918fba1c80fecdb865fb6bd87b06c0bdae" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -5275,9 +5331,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-new_blobs=1-parent_blobs=4-header_excess_blobs_delta=2-correct:0xc0000-header:0x100000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5363,7 +5420,7 @@ }, { "rlp": "0xf902d3f90242a01dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083100000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02de", @@ -5388,6 +5445,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5796db4972f4702931044a16ea470ce7979811cb4ba614f598c79f3162933216" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -5478,9 +5536,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-new_blobs=1-parent_blobs=4-header_excess_blobs_delta=3-correct:0xc0000-header:0x120000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_4-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5566,7 +5625,7 @@ }, { "rlp": "0xf902d3f90242a01dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083120000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02de", @@ -5591,6 +5650,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xaaa0e83018503b6ba684b59c484f0ae0913d2c66c17cbaa58ee56826057fe26d" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -5681,9 +5741,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-new_blobs=1-parent_blobs=5-header_excess_blobs_delta=-3-correct:0xe0000-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5770,7 +5831,7 @@ }, { "rlp": "0xf902d3f90242a04f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525e", @@ -5795,6 +5856,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4a20e26e16be55ffb69015d3c62a5b4f4da6ba060e840b70c1ba636dac1a7420" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -5885,9 +5947,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-new_blobs=1-parent_blobs=5-header_excess_blobs_delta=-2-correct:0xe0000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5974,7 +6037,7 @@ }, { "rlp": "0xf902d3f90242a04f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525e", @@ -5999,6 +6062,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9fbda2fe93560b668f81a426a3898b0d902e8a2f4a525713ea6fa414c08d2c54" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -6089,9 +6153,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-new_blobs=1-parent_blobs=5-header_excess_blobs_delta=-1-correct:0xe0000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_-1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6178,7 +6243,7 @@ }, { "rlp": "0xf902d3f90242a04f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830c0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525e", @@ -6203,6 +6268,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x01914643f9df69a42a361b490836b2ac535c117561ed2bc9c6dfe538a3522c1e" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -6293,9 +6359,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-new_blobs=1-parent_blobs=5-header_excess_blobs_delta=1-correct:0xe0000-header:0x100000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6382,7 +6449,7 @@ }, { "rlp": "0xf902d3f90242a04f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083100000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525e", @@ -6407,6 +6474,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x53f8feb778c5a8a12999e1e283f86580ca1f939aec3e8bc3b1ebd6688133cd45" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -6497,9 +6565,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-new_blobs=1-parent_blobs=5-header_excess_blobs_delta=2-correct:0xe0000-header:0x120000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6586,7 +6655,7 @@ }, { "rlp": "0xf902d3f90242a04f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083120000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525e", @@ -6611,6 +6680,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xcd9c1275dd52932ec06145cb4d759a61184e1ad786f8d909304c5d88a3e2b63c" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -6701,9 +6771,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-new_blobs=1-parent_blobs=5-header_excess_blobs_delta=3-correct:0xe0000-header:0x140000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_5-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6790,7 +6861,7 @@ }, { "rlp": "0xf902d3f90242a04f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083140000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525e", @@ -6815,6 +6886,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd30712caac1715aa7abc3b0b1513a017fdb474850bbacc9e3f35e674cc3c34be" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -6905,9 +6977,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-new_blobs=1-parent_blobs=6-header_excess_blobs_delta=-3-correct:0x100000-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6995,7 +7068,7 @@ }, { "rlp": "0xf902d3f90242a01c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2e", @@ -7020,6 +7093,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xaa70a27dfe4b618f47190331ed9fa3b04549c4f441aa2b411c2944a51f56497f" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -7110,9 +7184,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-new_blobs=1-parent_blobs=6-header_excess_blobs_delta=-2-correct:0x100000-header:0xc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7200,7 +7275,7 @@ }, { "rlp": "0xf902d3f90242a01c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830c0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2e", @@ -7225,6 +7300,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3f5d65d9e335ab083575ed6dc011b5ce6925e397d982e887618307f8177b43a6" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -7315,9 +7391,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun-new_blobs=1-parent_blobs=6-header_excess_blobs_delta=-1-correct:0x100000-header:0xe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_-1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7405,7 +7482,7 @@ }, { "rlp": "0xf902d3f90242a01c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830e0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2e", @@ -7430,6 +7507,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9d205ca0795a646a3f07bd784f9aea3847b15507707411af94ee12df701eee91" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -7520,9 +7598,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun-new_blobs=1-parent_blobs=6-header_excess_blobs_delta=1-correct:0x100000-header:0x120000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7610,7 +7689,7 @@ }, { "rlp": "0xf902d3f90242a01c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083120000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2e", @@ -7635,6 +7714,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x04022b55371e25f2a7fe8f942909a0335d33d598d118b3ad5d30948c4e069385" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -7725,9 +7805,10 @@ }, "sealEngine": "NoProof" }, - "040-fork=Cancun-new_blobs=1-parent_blobs=6-header_excess_blobs_delta=2-correct:0x100000-header:0x140000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7815,7 +7896,7 @@ }, { "rlp": "0xf902d3f90242a01c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083140000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2e", @@ -7840,6 +7921,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xded21ed01dc3ad27cee657f625423f13ad4f9145a42790fe43b44798fcb36be4" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -7930,9 +8012,10 @@ }, "sealEngine": "NoProof" }, - "041-fork=Cancun-new_blobs=1-parent_blobs=6-header_excess_blobs_delta=3-correct:0x100000-header:0x160000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_change[fork_Cancun-blockchain_test-new_blobs_1-parent_blobs_6-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8020,7 +8103,7 @@ }, { "rlp": "0xf902d3f90242a01c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083160000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2e", @@ -8045,6 +8128,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3ff127126873bd983cba5609cbda84b3cefc41f3868710e86f5369e399e99f20" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_target_blobs_increase_from_zero.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_target_blobs_increase_from_zero.json index 59eda0540a0..2c68b4467d8 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_target_blobs_increase_from_zero.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_excess_blob_gas_target_blobs_increase_from_zero.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=0-header_excess_blobs_delta=1-correct:0x0-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -33,7 +34,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a0ce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395", @@ -58,6 +59,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x279a529129127a4a10458da09cbe14d709e2710e0542424605d426874f506d0d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -140,9 +142,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=0-header_excess_blobs_delta=2-correct:0x0-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -174,7 +177,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a0ce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395", @@ -199,6 +202,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6e6d67adde0b863c310dc90ef7e540e2f6d115f73a9dde3749e17ebbc487cafd" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -281,9 +285,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=0-header_excess_blobs_delta=3-correct:0x0-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -315,7 +320,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a0ce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395", @@ -340,6 +345,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x90f5d3db2868b920767af18c2766c4a90f63330ca2961b62cd26a4467f8321c6" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -422,9 +428,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=0-header_excess_blobs_delta=4-correct:0x0-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -456,7 +463,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a0ce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395", @@ -481,6 +488,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd472f9caabaa16d7a17602aaaeeca9b3bc56c314e1a2224491aa44c3e469d812" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -563,9 +571,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=0-header_excess_blobs_delta=5-correct:0x0-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_0-header_excess_blobs_delta_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -597,7 +606,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a0ce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395", @@ -622,6 +631,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8dfc1d38019e27d67b17c92756c554706a55d8af40f2bd6cab2b524932313dc5" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -704,9 +714,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=1-header_excess_blobs_delta=1-correct:0x0-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -789,7 +800,7 @@ }, { "rlp": "0xf902d3f90242a0e02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9c", @@ -814,6 +825,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe1890a1874bab52cb38fd4da0e6385ab6281f483e793c197b1b3320353dee521" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -904,9 +916,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=1-header_excess_blobs_delta=2-correct:0x0-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -989,7 +1002,7 @@ }, { "rlp": "0xf902d3f90242a0e02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9c", @@ -1014,6 +1027,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xade2f23a18f8b480676f8ca81a6f3c3cc0fb9fed2f43fdb67fe70122c6f1acfb" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1104,9 +1118,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=1-header_excess_blobs_delta=3-correct:0x0-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1189,7 +1204,7 @@ }, { "rlp": "0xf902d3f90242a0e02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9c", @@ -1214,6 +1229,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb53ed3203d8286e094e2db61994b507b0694319ef7fc3b3c3c1f41783a7949d9" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1304,9 +1320,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=1-header_excess_blobs_delta=4-correct:0x0-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1389,7 +1406,7 @@ }, { "rlp": "0xf902d3f90242a0e02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9c", @@ -1414,6 +1431,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf8bfc313c18370fafa9337ec94e22b9d50b799c2ac483f99661291b2f9668875" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1504,9 +1522,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=1-header_excess_blobs_delta=5-correct:0x0-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_1-header_excess_blobs_delta_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1589,7 +1608,7 @@ }, { "rlp": "0xf902d3f90242a0e02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9c", @@ -1614,6 +1633,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x82b82b6d42c728905355bc47cb94c4dad4fc5a68aab7926938b0dfa0e39ea112" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1704,9 +1724,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=2-header_excess_blobs_delta=1-correct:0x0-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1790,7 +1811,7 @@ }, { "rlp": "0xf902d3f90242a08863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5", @@ -1815,6 +1836,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7fedb9d82c174f9c82e221fc374a9c7d00f011772691eb47bbb6c760edf20bcd" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1905,9 +1927,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=2-header_excess_blobs_delta=2-correct:0x0-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1991,7 +2014,7 @@ }, { "rlp": "0xf902d3f90242a08863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5", @@ -2016,6 +2039,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x92a54bc4706324ae937f15fa268099125b97d9d82b4dfa9af24721bd056dab45" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2106,9 +2130,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=2-header_excess_blobs_delta=3-correct:0x0-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2192,7 +2217,7 @@ }, { "rlp": "0xf902d3f90242a08863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5", @@ -2217,6 +2242,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4c55e88603f01ecb20f0d76ea3061b2b76ad3d44ade6228ceb1f6897102290f5" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2307,9 +2333,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=2-header_excess_blobs_delta=4-correct:0x0-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2393,7 +2420,7 @@ }, { "rlp": "0xf902d3f90242a08863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5", @@ -2418,6 +2445,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd5a2bd674772fa846b13df678989662661ededb88e1296488a8282c10478c592" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2508,9 +2536,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=2-header_excess_blobs_delta=5-correct:0x0-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_2-header_excess_blobs_delta_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2594,7 +2623,7 @@ }, { "rlp": "0xf902d3f90242a08863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5", @@ -2619,6 +2648,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd5e84bee1b05a3edecacb7819a648332b4595b6cfb590529979fb8931b03073a" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2709,9 +2739,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=3-header_excess_blobs_delta=1-correct:0x0-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2796,7 +2827,7 @@ }, { "rlp": "0xf902d3f90242a01e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266", @@ -2821,6 +2852,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x54b362e74b481c7c0217ccbc115b19dab35b1190f70af84434a697b23c1f29c0" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2911,9 +2943,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=3-header_excess_blobs_delta=2-correct:0x0-header:0x40000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2998,7 +3031,7 @@ }, { "rlp": "0xf902d3f90242a01e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266", @@ -3023,6 +3056,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0b899666c3eb7b5c3fc5901efe152ba5b556eead7be85a2078131ec8ebf3be12" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3113,9 +3147,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=3-header_excess_blobs_delta=3-correct:0x0-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3200,7 +3235,7 @@ }, { "rlp": "0xf902d3f90242a01e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266", @@ -3225,6 +3260,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5edd1bc4bbe2a421f653edafc1f8d007e98b92a97c814b0725e4516f60a313b9" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3315,9 +3351,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=3-header_excess_blobs_delta=4-correct:0x0-header:0x80000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3402,7 +3439,7 @@ }, { "rlp": "0xf902d3f90242a01e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083080000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266", @@ -3427,6 +3464,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa7fcf925c270e3d2632dce16b238e9bb5840dfd5a00fd0b40371255833a7ffa7" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3517,9 +3555,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=3-header_excess_blobs_delta=5-correct:0x0-header:0xa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_excess_blob_gas_target_blobs_increase_from_zero[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_3-header_excess_blobs_delta_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3604,7 +3643,7 @@ }, { "rlp": "0xf902d3f90242a01e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1e8a3361d81ff2f558ac4400bfd7da67b4b7dd1236f84fc7357bf27f5545f266", @@ -3629,6 +3668,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9addc6900ea55030f22a4e4ec0bafa26a2a01dbc49ff4a4d93f07a0f46b7c924" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_negative_excess_blob_gas.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_negative_excess_blob_gas.json index a0874a28e81..ea0bd94d6e4 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_negative_excess_blob_gas.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_negative_excess_blob_gas.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709158400-correct:0x0-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -33,7 +34,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a0ce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395", @@ -58,6 +59,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7dff2c672335720232c3165f02fd59147bece4da6726ee4489519a93e25f44bc" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -140,9 +142,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709289472-correct:0x0-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -174,7 +177,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a0ce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395", @@ -199,6 +202,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0cfae36c8af526e9ec689009390067a8d23eff90c90b66660349a97e190431a3" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -281,9 +285,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709420544-correct:0x0-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -315,7 +320,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a0ce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xce38412dc5dae4088028b4b07dc3e086fb8c24b9e257213b7cb0fb7603bbe395", @@ -340,6 +345,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd7594d92dc2ed600c9238f63d5594b41ba3debd8318a292412c45bd0f95570a9" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -422,9 +428,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709158400-correct:0x0-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -507,7 +514,7 @@ }, { "rlp": "0xf902d8f90247a0e02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9c", @@ -532,6 +539,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4f5de42ad8ab2374e99e02c5349b8ccf9c711de250a9306c8aeb59f8e71e64b4" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -622,9 +630,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709289472-correct:0x0-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -707,7 +716,7 @@ }, { "rlp": "0xf902d8f90247a0e02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9c", @@ -732,6 +741,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x00aea39a5bac3cb28ef99fddfc1af2f4636e37bd9587635501c89928fdca2b0d" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -822,9 +832,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709420544-correct:0x0-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -907,7 +918,7 @@ }, { "rlp": "0xf902d8f90247a0e02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe02176ff069225e8a7ed50ed2776c7626883241ff5d9ebaf506b52262e3dae9c", @@ -932,6 +943,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1c035f687d79a682e8907a0b6e3b0514d036dc37e59f3eeed3e5c9ff492b2bea" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1022,9 +1034,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709158400-correct:0x0-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1108,7 +1121,7 @@ }, { "rlp": "0xf902d8f90247a08863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5", @@ -1133,6 +1146,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x637eaf7f1f8cdeff2b3b2c37bfdf2a8c0350bc7d8786205171e05ae652606aad" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1223,9 +1237,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709289472-correct:0x0-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1309,7 +1324,7 @@ }, { "rlp": "0xf902d8f90247a08863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5", @@ -1334,6 +1349,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x438ce03a67260dc80c2c246a4d6dfceb46573a6f8015972cd60136e227de0d31" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1424,9 +1440,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-parent_excess_blobs=0-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709420544-correct:0x0-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_0-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1510,7 +1527,7 @@ }, { "rlp": "0xf902d8f90247a08863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8863b2d801533c95e66ee9482330872f8ca76872e4a35eb817152dab28e532a5", @@ -1535,6 +1552,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd7b8ae067b3f6cef3a4744ae0c5a4fd63cb5036195f970515877cd6e87c7b370" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1625,9 +1643,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709158400-correct:0x0-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1659,7 +1678,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a0eb90cafe6c2b51d7d369658031a5b6a0b075385f5e2e5b991ac8c1ebf0fdb47fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xeb90cafe6c2b51d7d369658031a5b6a0b075385f5e2e5b991ac8c1ebf0fdb47f", @@ -1684,6 +1703,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x251daf4d10e7317d32d196f677d28f22d364fca98bbba460bf5638bcc222e271" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1766,9 +1786,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709289472-correct:0x0-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1800,7 +1821,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a0eb90cafe6c2b51d7d369658031a5b6a0b075385f5e2e5b991ac8c1ebf0fdb47fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xeb90cafe6c2b51d7d369658031a5b6a0b075385f5e2e5b991ac8c1ebf0fdb47f", @@ -1825,6 +1846,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe458b2300ccdbfee5991c2edf5ae3fd25590bb2fee98c4146df0dba6effddbca" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1907,9 +1929,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709420544-correct:0x0-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1941,7 +1964,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a0eb90cafe6c2b51d7d369658031a5b6a0b075385f5e2e5b991ac8c1ebf0fdb47fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xeb90cafe6c2b51d7d369658031a5b6a0b075385f5e2e5b991ac8c1ebf0fdb47f", @@ -1966,6 +1989,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdf9c1511da850a12a552a12e8764e15a9008cecd5b4665d017ecc4dc8422ce0d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -2048,9 +2072,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709158400-correct:0x0-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2133,7 +2158,7 @@ }, { "rlp": "0xf902d8f90247a076f9967913b94d82d43b4b5c539cd49fa4aca0c9d543d959375d22970b6ed242a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x76f9967913b94d82d43b4b5c539cd49fa4aca0c9d543d959375d22970b6ed242", @@ -2158,6 +2183,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x98b58823c8a484f7fd5f3443f2f73ebc7a29296e7c8b8147bbdc76403117e46f" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2248,9 +2274,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709289472-correct:0x0-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2333,7 +2360,7 @@ }, { "rlp": "0xf902d8f90247a076f9967913b94d82d43b4b5c539cd49fa4aca0c9d543d959375d22970b6ed242a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x76f9967913b94d82d43b4b5c539cd49fa4aca0c9d543d959375d22970b6ed242", @@ -2358,6 +2385,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1524e1b58870ac8817c0912c1595600ec745a047637b6629d382b0d952664440" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2448,9 +2476,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709420544-correct:0x0-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2533,7 +2562,7 @@ }, { "rlp": "0xf902d8f90247a076f9967913b94d82d43b4b5c539cd49fa4aca0c9d543d959375d22970b6ed242a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x76f9967913b94d82d43b4b5c539cd49fa4aca0c9d543d959375d22970b6ed242", @@ -2558,6 +2587,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb22aa9359891c509d3da3f1fe616caff49fd83f7c27b88eeaee2c2d51f4ac84b" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2648,9 +2678,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709158400-correct:0x0-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2734,7 +2765,7 @@ }, { "rlp": "0xf902d8f90247a0db2e5598fb872eeaa6eb6a28838e75d4ffa415b6ffde815d9aac07c0da73c96ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2e5598fb872eeaa6eb6a28838e75d4ffa415b6ffde815d9aac07c0da73c96b", @@ -2759,6 +2790,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe79d8035636e9db7915177db23263bb1fe28a6c9519e4e330b28d6d91da66388" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2849,9 +2881,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709289472-correct:0x0-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2935,7 +2968,7 @@ }, { "rlp": "0xf902d8f90247a0db2e5598fb872eeaa6eb6a28838e75d4ffa415b6ffde815d9aac07c0da73c96ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2e5598fb872eeaa6eb6a28838e75d4ffa415b6ffde815d9aac07c0da73c96b", @@ -2960,6 +2993,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x137348e9d827671fa088364f0b29913e815f6da7cdfb34ab0a7f348f9b682eca" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3050,9 +3084,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-parent_excess_blobs=1-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709420544-correct:0x0-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_1-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3136,7 +3171,7 @@ }, { "rlp": "0xf902d8f90247a0db2e5598fb872eeaa6eb6a28838e75d4ffa415b6ffde815d9aac07c0da73c96ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2e5598fb872eeaa6eb6a28838e75d4ffa415b6ffde815d9aac07c0da73c96b", @@ -3161,6 +3196,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9cb881bd97b6708160887f26c964321d3a40d6d5dce14b3ba1892922fd196c91" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3251,9 +3287,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709158400-correct:0x0-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3285,7 +3322,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a054fc4e1ef90ea8eb3f13ad45ad42fd7f9307c0084a9f8c352a7350f355674608a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x54fc4e1ef90ea8eb3f13ad45ad42fd7f9307c0084a9f8c352a7350f355674608", @@ -3310,6 +3347,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x151720d532377171a5d7c7eb65460d2cb0e19d25057a5c94fa5fdcf559ee2abc" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3392,9 +3430,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709289472-correct:0x0-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3426,7 +3465,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a054fc4e1ef90ea8eb3f13ad45ad42fd7f9307c0084a9f8c352a7350f355674608a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x54fc4e1ef90ea8eb3f13ad45ad42fd7f9307c0084a9f8c352a7350f355674608", @@ -3451,6 +3490,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa083d462f70a9618101f74ec6e99b27464e7dcc077c36a2080ab5eab8c15d2ca" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3533,9 +3573,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=0-header_excess_blob_gas=18446744073709420544-correct:0x0-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_0-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3567,7 +3608,7 @@ "blocks": [ { "rlp": "0xf902d8f90247a054fc4e1ef90ea8eb3f13ad45ad42fd7f9307c0084a9f8c352a7350f355674608a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x54fc4e1ef90ea8eb3f13ad45ad42fd7f9307c0084a9f8c352a7350f355674608", @@ -3592,6 +3633,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4041fa015ad4e9b2ce2f431479d606ec6234d79c270d8019cce253ee3abdd32e" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -3674,9 +3716,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709158400-correct:0x0-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3759,7 +3802,7 @@ }, { "rlp": "0xf902d8f90247a041f8a21474e177782a7f068285b53a9a92de05b40da191c944f6ff6d892ec781a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41f8a21474e177782a7f068285b53a9a92de05b40da191c944f6ff6d892ec781", @@ -3784,6 +3827,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xed3260b4f94f3d2d34ec58df7b15623f917bf37dde231b0cc9a9e38517e28df4" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -3874,9 +3918,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709289472-correct:0x0-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3959,7 +4004,7 @@ }, { "rlp": "0xf902d8f90247a041f8a21474e177782a7f068285b53a9a92de05b40da191c944f6ff6d892ec781a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41f8a21474e177782a7f068285b53a9a92de05b40da191c944f6ff6d892ec781", @@ -3984,6 +4029,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x27916b37dfe5b22437e1fe11ba5550227d1078217e51107bc3b5ec1e2fbedd53" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4074,9 +4120,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=1-header_excess_blob_gas=18446744073709420544-correct:0x0-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_1-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4159,7 +4206,7 @@ }, { "rlp": "0xf902d8f90247a041f8a21474e177782a7f068285b53a9a92de05b40da191c944f6ff6d892ec781a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x41f8a21474e177782a7f068285b53a9a92de05b40da191c944f6ff6d892ec781", @@ -4184,6 +4231,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe9ef5e1315660d647379956b1ca6ac321819f20b765f9a4bea7c641f9360a23f" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4274,9 +4322,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709158400-correct:0x20000-header:0xfffffffffffa0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709158400]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4360,7 +4409,7 @@ }, { "rlp": "0xf902d8f90247a0e5d722b0ca7c67f033da749dea193030248d3d14ba965f685990e8562a10d2bca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffa0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe5d722b0ca7c67f033da749dea193030248d3d14ba965f685990e8562a10d2bc", @@ -4385,6 +4434,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3647bbbc02ff7e100754f2fd75b3898ccb07aee8789990ef85f14f5f911e7588" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4475,9 +4525,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709289472-correct:0x20000-header:0xfffffffffffc0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709289472]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4561,7 +4612,7 @@ }, { "rlp": "0xf902d8f90247a0e5d722b0ca7c67f033da749dea193030248d3d14ba965f685990e8562a10d2bca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffc0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe5d722b0ca7c67f033da749dea193030248d3d14ba965f685990e8562a10d2bc", @@ -4586,6 +4637,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x120c63037cc27944cf99be4cf7e3cc4b5a840dcc60c226085d61e0b9c6a17b1c" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -4676,9 +4728,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-parent_excess_blobs=2-new_blobs=1-parent_blobs=2-header_excess_blob_gas=18446744073709420544-correct:0x20000-header:0xfffffffffffe0000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_negative_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_2-new_blobs_1-parent_blobs_2-header_excess_blob_gas_18446744073709420544]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4762,7 +4815,7 @@ }, { "rlp": "0xf902d8f90247a0e5d722b0ca7c67f033da749dea193030248d3d14ba965f685990e8562a10d2bca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000088fffffffffffe0000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe5d722b0ca7c67f033da749dea193030248d3d14ba965f685990e8562a10d2bc", @@ -4787,6 +4840,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9be3f8f0119a75c43501be2dab131593348351d7369ea1bd63049202858bbf27" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_non_multiple_excess_blob_gas.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_non_multiple_excess_blob_gas.json index d0a3f3ba748..4647141f762 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_non_multiple_excess_blob_gas.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_non_multiple_excess_blob_gas.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-parent_excess_blobs=4-new_blobs=1-parent_blobs=4-header_excess_blob_gas_delta=1-correct:0xa0000-header:0xa0001": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -87,7 +88,7 @@ }, { "rlp": "0xf902d3f90242a051084154e8e8b86128acbaa62e16c38a57790f7d648f6b8cab38901937383f92a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830a0001a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x51084154e8e8b86128acbaa62e16c38a57790f7d648f6b8cab38901937383f92", @@ -112,6 +113,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x888935fe8f8d9b54b63ec265c25278030a5a6edd1ba5fb9c0f1a99c8b70668ca" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -202,9 +204,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-parent_excess_blobs=4-new_blobs=1-parent_blobs=4-header_excess_blob_gas_delta=131071-correct:0xa0000-header:0xbffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_4-header_excess_blob_gas_delta_131071]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -290,7 +293,7 @@ }, { "rlp": "0xf902d3f90242a051084154e8e8b86128acbaa62e16c38a57790f7d648f6b8cab38901937383f92a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42183020000830bffffa00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x51084154e8e8b86128acbaa62e16c38a57790f7d648f6b8cab38901937383f92", @@ -315,6 +318,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd6481397c07cd3d92a1cb540f6a6fcd42b240ab77eada4d61ed21ff55c9a610e" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -405,9 +409,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-parent_excess_blobs=4-new_blobs=1-parent_blobs=2-header_excess_blob_gas_delta=-1-correct:0x60000-header:0x5ffff": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -491,7 +496,7 @@ }, { "rlp": "0xf902d3f90242a01ade598e7950abb5a3e0320270cc3eda6c937abeae599911395b258227d25389a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421830200008305ffffa00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1ade598e7950abb5a3e0320270cc3eda6c937abeae599911395b258227d25389", @@ -516,6 +521,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc62968c5d3520c661fdb0ad8d22eec817b51ca591a08b03bf11266a3ced90f1e" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -606,9 +612,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-parent_excess_blobs=4-new_blobs=1-parent_blobs=2-header_excess_blob_gas_delta=-131071-correct:0x60000-header:0x40001": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_non_multiple_excess_blob_gas[fork_Cancun-blockchain_test-parent_excess_blobs_4-new_blobs_1-parent_blobs_2-header_excess_blob_gas_delta_-131071]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -692,7 +699,7 @@ }, { "rlp": "0xf902d3f90242a01ade598e7950abb5a3e0320270cc3eda6c937abeae599911395b258227d25389a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083040001a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1ade598e7950abb5a3e0320270cc3eda6c937abeae599911395b258227d25389", @@ -717,6 +724,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8681cf4b0a9a3cd3b9f0c8a5ce7d3820af9e90626d30b0d2ac118bd0db18f14d" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_static_excess_blob_gas.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_static_excess_blob_gas.json index fd096c52283..501f893bfc0 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_static_excess_blob_gas.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_static_excess_blob_gas.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=0-correct:0x0-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -33,7 +34,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a0eb90cafe6c2b51d7d369658031a5b6a0b075385f5e2e5b991ac8c1ebf0fdb47fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xeb90cafe6c2b51d7d369658031a5b6a0b075385f5e2e5b991ac8c1ebf0fdb47f", @@ -58,6 +59,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7c9c5e52f5ac8e2863ab84062fbb8c899eb33a547faef3d11829a6e42361df2d" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -140,9 +142,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=1-correct:0x0-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -225,7 +228,7 @@ }, { "rlp": "0xf902d3f90242a076f9967913b94d82d43b4b5c539cd49fa4aca0c9d543d959375d22970b6ed242a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x76f9967913b94d82d43b4b5c539cd49fa4aca0c9d543d959375d22970b6ed242", @@ -250,6 +253,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9957f93f58e39671569c14219543849a07a96a92f38f86cdbcd8b0f69449d552" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -340,9 +344,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=2-correct:0x0-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -426,7 +431,7 @@ }, { "rlp": "0xf902d3f90242a0db2e5598fb872eeaa6eb6a28838e75d4ffa415b6ffde815d9aac07c0da73c96ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xdb2e5598fb872eeaa6eb6a28838e75d4ffa415b6ffde815d9aac07c0da73c96b", @@ -451,6 +456,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa2edc9acd7bffeab6a4b3f00d9b2c95308d66d713007e39fe810d813a53cd0f2" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -541,9 +547,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=4-correct:0x40000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -629,7 +636,7 @@ }, { "rlp": "0xf902d3f90242a0036e708b4528a814835a72fbb148694d07237a3f0db97691da1adeee49420035a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x036e708b4528a814835a72fbb148694d07237a3f0db97691da1adeee49420035", @@ -654,6 +661,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8deecf6fd484f4f96c5d4973082912e4a2f143ca752583eef60df72521003c81" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -744,9 +752,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=5-correct:0x60000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -833,7 +842,7 @@ }, { "rlp": "0xf902d3f90242a0a8c295e55b3024f0fb489b72e8451833c2410e1848436a7cc8c5b9f2f66f2c9ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa8c295e55b3024f0fb489b72e8451833c2410e1848436a7cc8c5b9f2f66f2c9e", @@ -858,6 +867,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf99ebc0b09f18a8b31200fcef85c41f92dbc73df644ca81e86261d7a045cc8c8" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -948,9 +958,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-new_blobs=1-parent_excess_blobs=1-parent_blobs=6-correct:0x80000-header:0x20000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_1-parent_blobs_6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1038,7 +1049,7 @@ }, { "rlp": "0xf902d3f90242a0185b79ac0612932a76f64bbaa6a0e4edc5c487fb3c17563e6d50f13366a84448a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083020000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x185b79ac0612932a76f64bbaa6a0e4edc5c487fb3c17563e6d50f13366a84448", @@ -1063,6 +1074,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc22e29fafd25d5c367e3ff074f522c77cfc495af6671a72e6988cf7bcc0e63bb" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1153,9 +1165,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=0-correct:0x0-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1187,7 +1200,7 @@ "blocks": [ { "rlp": "0xf902d3f90242a0510f1c46aa45b5f4941c2b9038fc55a7d9df6eb18429c5da2b7fe949c959e66aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x510f1c46aa45b5f4941c2b9038fc55a7d9df6eb18429c5da2b7fe949c959e66a", @@ -1212,6 +1225,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x66fb11e49ba8e9a947ccf328dbeb2df52f3f9859a456370058ccae1f24b6e03b" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -1294,9 +1308,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=1-correct:0x20000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1379,7 +1394,7 @@ }, { "rlp": "0xf902d3f90242a0d6f1e3eff07c1bdd30620d96f20fd371725bb5c466a82cd4f8a0213f1fe6ce94a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xd6f1e3eff07c1bdd30620d96f20fd371725bb5c466a82cd4f8a0213f1fe6ce94", @@ -1404,6 +1419,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x094cfcffdf918126ebffd53fe9915620e48f71ef64cd18c0ba8dbe6635dfbba4" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1494,9 +1510,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=2-correct:0x40000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1580,7 +1597,7 @@ }, { "rlp": "0xf902d3f90242a0d9a0dee0d377b5eb687005c5a96a63e7e35b7b7d54d585aad6c8e1b69332d1e8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xd9a0dee0d377b5eb687005c5a96a63e7e35b7b7d54d585aad6c8e1b69332d1e8", @@ -1605,6 +1622,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x86bb8646a4c26823a6a8f1cf56cb78509501cb206ca3ea7cbee1fd7005ebb6d6" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1695,9 +1713,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=4-correct:0x80000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1783,7 +1802,7 @@ }, { "rlp": "0xf902d3f90242a05a7756b533f4334dc9ef85b0b2293dbf75f86de61a8a34a7430dacb7bf05023fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5a7756b533f4334dc9ef85b0b2293dbf75f86de61a8a34a7430dacb7bf05023f", @@ -1808,6 +1827,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9506ae1d339b490315a40b5d56abcbcf541fb870842dae738c22f670edf4ec8b" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1898,9 +1918,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=5-correct:0xa0000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_5]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1987,7 +2008,7 @@ }, { "rlp": "0xf902d3f90242a020e0c9d9a8f852a1540167221184732ac0ab689ea46bb7c01fca6bfd7668944ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x20e0c9d9a8f852a1540167221184732ac0ab689ea46bb7c01fca6bfd7668944e", @@ -2012,6 +2033,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xfe69cf54660058df13fda3a799b90fcf37623edbf8dd14ed31e59951b6de332b" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2102,9 +2124,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-new_blobs=1-parent_excess_blobs=3-parent_blobs=6-correct:0xc0000-header:0x60000": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_3-parent_blobs_6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2192,7 +2215,7 @@ }, { "rlp": "0xf902d3f90242a0e88920f06d350b88d59f3247bbbd43bc6d394292105caec59dcee7c041950a85a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000083060000a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xe88920f06d350b88d59f3247bbbd43bc6d394292105caec59dcee7c041950a85", @@ -2217,6 +2240,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x77ac223e52df1d5f4f02cd3cd182f21c5003dd2e52e79c30ef875a9ac1d0ee85" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_static_excess_blob_gas_from_zero_on_blobs_above_target.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_static_excess_blob_gas_from_zero_on_blobs_above_target.json index b8739ae16bc..1ad1689126e 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_static_excess_blob_gas_from_zero_on_blobs_above_target.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_static_excess_blob_gas_from_zero_on_blobs_above_target.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=4-header_excess_blob_gas=0-correct:0x20000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_4-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -87,7 +88,7 @@ }, { "rlp": "0xf902d0f9023fa0105d6a86b391b112ba985b0d66b13af26782284626c970c27e5218229e17dc95a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x105d6a86b391b112ba985b0d66b13af26782284626c970c27e5218229e17dc95", @@ -112,6 +113,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xff5bb957ccb75a6ed36fc826460614bc26f45f1289a363686a07cb311a441ed1" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -202,9 +204,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=5-header_excess_blob_gas=0-correct:0x40000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_5-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -291,7 +294,7 @@ }, { "rlp": "0xf902d0f9023fa01311c331d797c47d6e328fe612ed2290bd5fb28c62b870690c56d30085bb393da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1311c331d797c47d6e328fe612ed2290bd5fb28c62b870690c56d30085bb393d", @@ -316,6 +319,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb5b598f5a6c74524df90cbd5ce87506302e3d24e7edb2f11b6889164894169fb" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -406,9 +410,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-new_blobs=1-parent_excess_blobs=0-parent_blobs=6-header_excess_blob_gas=0-correct:0x60000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_static_excess_blob_gas_from_zero_on_blobs_above_target[fork_Cancun-blockchain_test-new_blobs_1-parent_excess_blobs_0-parent_blobs_6-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -496,7 +501,7 @@ }, { "rlp": "0xf902d0f9023fa0ec936ff6f19523f22bf047d24e0b35a61b5ad3351ad4262a180615f4902ece71a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xec936ff6f19523f22bf047d24e0b35a61b5ad3351ad4262a180615f4902ece71", @@ -521,6 +526,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3f827eebbf7952580e8a0bc8027a70f2b4d36e85fce68cec81a038db51082e27" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_zero_excess_blob_gas_in_header.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_zero_excess_blob_gas_in_header.json index 35c64d7d97d..52615519b8f 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_zero_excess_blob_gas_in_header.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas/invalid_zero_excess_blob_gas_in_header.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-parent_blobs=0-new_blobs=0-header_excess_blob_gas=0-correct:0x40000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_0-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -33,7 +34,7 @@ "blocks": [ { "rlp": "0xf902aaf9023ca07d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x7d74f162e144609e5911d1d2287ba394b141c7d460378f804cd527bb55c86489", @@ -58,6 +59,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8213e2ac114e758a9273a79e81c2a474d4f0e511e479ac449fffbcfc1f92409c" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -136,9 +138,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-parent_blobs=0-new_blobs=1-header_excess_blob_gas=0-correct:0x40000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_0-new_blobs_1-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -170,7 +173,7 @@ "blocks": [ { "rlp": "0xf902d0f9023fa05ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c2e33269bc55d3b8f4be9389c14fefd5ef2f48a0fef48af770ff0f9b4af7d8ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082a8610c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x5ac29ba18d45ba3b7706bc36fbc2fe0216b96bc84c5f980e01888fe8520343b2", @@ -195,6 +198,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x03e22ea02241c69c4c2be271e559c96df35ed94bd5bb1dba70600f7708e9d5ad" }, + "blocknumber": "1", "transactions": [ { "type": "0x03", @@ -277,9 +281,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-parent_blobs=1-new_blobs=0-header_excess_blob_gas=0-correct:0x60000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_1-new_blobs_0-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -362,7 +367,7 @@ }, { "rlp": "0xf902aaf9023ca0663441f195772c42e92e1823655cdcf68eb5568172108bf1612f1da3682590e5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x663441f195772c42e92e1823655cdcf68eb5568172108bf1612f1da3682590e5", @@ -387,6 +392,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8a022a7364c783897e1a2b9662fac648cba640b8750a5043d105849700ec356c" }, + "blocknumber": "2", "transactions": [ { "type": "0x02", @@ -473,9 +479,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-parent_blobs=1-new_blobs=1-header_excess_blob_gas=0-correct:0x60000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_1-new_blobs_1-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -558,7 +565,7 @@ }, { "rlp": "0xf902d0f9023fa0c1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0327872943890852da941913852e3030050dac3b5e20fd3b51d09c2497b06efffa03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xc1628b13a83bf129ac4c1613148bb8acf4feb86959e0dcfd51c24e1dbff8db69", @@ -583,6 +590,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x339669f618eab0fed6b09bf2a4db6e0bcb9e0150914f213088c3f803f6d54223" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -673,9 +681,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-parent_blobs=2-new_blobs=0-header_excess_blob_gas=0-correct:0x80000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_2-new_blobs_0-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -759,7 +768,7 @@ }, { "rlp": "0xf902aaf9023ca07a97f3322acabd8da87152ede1d82d47fa4108cfc9a50df3d77d5ac773599662a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x7a97f3322acabd8da87152ede1d82d47fa4108cfc9a50df3d77d5ac773599662", @@ -784,6 +793,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xca8acafe08197348b76db1b4eb4915685be1365d1ccb5a58679823d0d1064d8e" }, + "blocknumber": "2", "transactions": [ { "type": "0x02", @@ -870,9 +880,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-parent_blobs=2-new_blobs=1-header_excess_blob_gas=0-correct:0x80000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_2-new_blobs_1-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -956,7 +967,7 @@ }, { "rlp": "0xf902d0f9023fa0b3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2c2d2a879721ee48d01addad948221b7169c780470f8ae5ed5569ca045cc5e4a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xb3d1505f6e0dfecc33190a216655309008fea8d105cf90e8a1822fde05ae4e93", @@ -981,6 +992,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x59d9597c7fcea6563904225aa6cc46c44fe4c12f7f254da2f671802443332417" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1071,9 +1083,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-parent_blobs=3-new_blobs=0-header_excess_blob_gas=0-correct:0xa0000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_3-new_blobs_0-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1158,7 +1171,7 @@ }, { "rlp": "0xf902aaf9023ca022d0eafa826e868b930a48d4f1eb2e5b6d542ee9cf063d65a86cff0e92e1273ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x22d0eafa826e868b930a48d4f1eb2e5b6d542ee9cf063d65a86cff0e92e1273e", @@ -1183,6 +1196,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8ac1d9edc3a003f16d40d08b0a178cd4984df3b18a221d219c0beff724eddf74" }, + "blocknumber": "2", "transactions": [ { "type": "0x02", @@ -1269,9 +1283,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-parent_blobs=3-new_blobs=1-header_excess_blob_gas=0-correct:0xa0000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_3-new_blobs_1-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1356,7 +1371,7 @@ }, { "rlp": "0xf902d0f9023fa0a9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0315ff359a85f1ae1b78bbbec41f085a84846c5adaff45f3d3884763ecf2f586ca03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xa9b390ae7619916e5b1996613757356de25206626f06665d90888f5f9ca685e3", @@ -1381,6 +1396,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x423645d83ab41441c51302853949dbb8d715d9fa7dfb18e68c2ed520a6d33d57" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1471,9 +1487,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-parent_blobs=4-new_blobs=0-header_excess_blob_gas=0-correct:0xc0000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_4-new_blobs_0-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1559,7 +1576,7 @@ }, { "rlp": "0xf902aaf9023ca0cfe9dc75fdf92e7c09c591614c1d84c59ade46306385e5dc9d625996f1cb8a6aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0xcfe9dc75fdf92e7c09c591614c1d84c59ade46306385e5dc9d625996f1cb8a6a", @@ -1584,6 +1601,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7ce855d3c80a3df68f543800bde87a5bba1e04d7ae7e36132efb869633c45928" }, + "blocknumber": "2", "transactions": [ { "type": "0x02", @@ -1670,9 +1688,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-parent_blobs=4-new_blobs=1-header_excess_blob_gas=0-correct:0xc0000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_4-new_blobs_1-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1758,7 +1777,7 @@ }, { "rlp": "0xf902d0f9023fa01dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f523a2745cbc153c456247563e070df970d2aa90787765b055dcf5e2b6f83a92a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1dcf918975d43b00527a2b1256e2f4361558d273c45e8761b33429ea9f2c02de", @@ -1783,6 +1802,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6516b31d5cae2af036db6940221b03f86d33ed67e5212dbc3717325244f9a736" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -1873,9 +1893,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-parent_blobs=5-new_blobs=0-header_excess_blob_gas=0-correct:0xe0000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_5-new_blobs_0-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1962,7 +1983,7 @@ }, { "rlp": "0xf902aaf9023ca02562be0dfd3ba3e4f57ac291078c1919af284c560d8487b6eb21f2250d1e6969a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x2562be0dfd3ba3e4f57ac291078c1919af284c560d8487b6eb21f2250d1e6969", @@ -1987,6 +2008,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xba1876e43c6c6b1919ebc97e1220c35522d5dff2abd16945aa9e42e896972dfe" }, + "blocknumber": "2", "transactions": [ { "type": "0x02", @@ -2073,9 +2095,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-parent_blobs=5-new_blobs=1-header_excess_blob_gas=0-correct:0xe0000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_5-new_blobs_1-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2162,7 +2185,7 @@ }, { "rlp": "0xf902d0f9023fa04f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bdeb9fe50269ba7400a2fc8c3b417a17362777a28fb560ba885503c0288bc1d0a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x4f51ccb206e78b64fb7f6152cd4009981a775e4ad7d5cd4d15a3ff86bf43525e", @@ -2187,6 +2210,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x11d1629f71659470dc8a9190a057b7980523062a985ede6c601f3fe6440d94c4" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", @@ -2277,9 +2301,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-parent_blobs=6-new_blobs=0-header_excess_blob_gas=0-correct:0x100000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_6-new_blobs_0-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2367,7 +2392,7 @@ }, { "rlp": "0xf902aaf9023ca015b40c5e5cc15f42e8b3535867a8fefd0cb835878224211521d9bd5aa2534df5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a0e06fbc15243fb14dc4e3a9918ecdc38e11b6d831d9625855e22273ae2e950041a0167497e0db677e533dde7e46c3f485c45662ceb46281d7073354e80b5a40f454b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f867b86502f8620180800782afc89400000000000000000000000000000000000001000180c080a0fb034933cf8f6260e96360e3db5a72e798211aff9a6021ef89921605c30c1663a059001a83d7dd32709633198963a5586fd74586f91b0a6479de8157be7833cf8bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x15b40c5e5cc15f42e8b3535867a8fefd0cb835878224211521d9bd5aa2534df5", @@ -2392,6 +2417,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc4589f8b3eda4f4e1268176cb7878788e29413049c8d76fbb6e66d17403c7591" }, + "blocknumber": "2", "transactions": [ { "type": "0x02", @@ -2478,9 +2504,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-parent_blobs=6-new_blobs=1-header_excess_blob_gas=0-correct:0x100000-header:0x0": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas.py::test_invalid_zero_excess_blob_gas_in_header[fork_Cancun-blockchain_test-parent_blobs_6-new_blobs_1-header_excess_blob_gas_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2568,7 +2595,7 @@ }, { "rlp": "0xf902d0f9023fa01c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecae18667c100224cf1aa9dd9d91b582341da9f0df6e4401a76754c678350290a03d0735f4f8cd85f7384e82229ad10f2b7a96e77e52a6f73f19acc673e28074c7a0c117ad0158b04d4277c8a0d1b440360bf3f011ad7caccf8740df472c96e8f5ccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082a8611880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218302000080a00000000000000000000000000000000000000000000000000000000000000000f88ab88803f8850180800782afc89400000000000000000000000000000000000001000180c001e1a0010000000000000000000000000000000000000000000000000000000000000080a0c75337f6b99a6063d93e16883ac5ca36e2d4c1502e4b56805777ad74aafaa626a07b32c2a3852284ead12962b64a0453d036d36516b5f062162f4710aef0dd731bc0c0", - "expectException": "invalid excess blob gas", + "expectException": "BlockException.INCORRECT_EXCESS_BLOB_GAS", "rlp_decoded": { "blockHeader": { "parentHash": "0x1c719fb23446c4ec9beaa52715d79ea13df441379e20df299b3ee91bf8342c2e", @@ -2593,6 +2620,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8fef8aa28f4472591334a02f003f07947d42ceb41cfbd625fd2f30fbc3d1219b" }, + "blocknumber": "2", "transactions": [ { "type": "0x03", diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/fork_transition_excess_blob_gas.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/fork_transition_excess_blob_gas.json index 72b0102e8a9..288d08d9c5a 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/fork_transition_excess_blob_gas.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/fork_transition_excess_blob_gas.json @@ -1,7 +1,8 @@ { - "000-fork=ShanghaiToCancunAtTime15k-max_blobs-correct_initial_blob_gas_calc": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-max_blobs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -934,9 +935,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=ShanghaiToCancunAtTime15k-no_blobs-correct_initial_blob_gas_calc": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-no_blobs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1893,9 +1895,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=ShanghaiToCancunAtTime15k-target_blobs-correct_initial_blob_gas_calc": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_fork_transition_excess_blob_gas[fork_ShanghaiToCancunAtTime15k-blockchain_test-target_blobs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/invalid_post_fork_block_without_blob_fields.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/invalid_post_fork_block_without_blob_fields.json index 3d953e1c152..40b3687e5af 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/invalid_post_fork_block_without_blob_fields.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/invalid_post_fork_block_without_blob_fields.json @@ -1,7 +1,8 @@ { - "000-fork=ShanghaiToCancunAtTime15k-excess_blob_gas_missing=True-blob_gas_used_missing=False-blob_fields_missing_post_fork": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_True-blob_gas_used_missing_False]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -435,7 +436,7 @@ }, { "rlp": "0xf90241f9023ba064177ba1942c915cc9c4d95a69b27befb29a3e0c2a56882fba4fb8c5bf367feaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028415a6a7e08c2fb01beaa4d4e8397ed3c51f8c7400d3619803652afedf658c1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801088016345785d8a000080823a9880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42180a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", - "expectException": "blob fields missing post fork", + "expectException": "BlockException.INCORRECT_BLOCK_FORMAT", "rlp_decoded": { "blockHeader": { "parentHash": "0x64177ba1942c915cc9c4d95a69b27befb29a3e0c2a56882fba4fb8c5bf367fea", @@ -459,6 +460,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5155c84b69a8af6ee6f06d7414f1e434d01dbd8a5eab1ac429b246525e319e16" }, + "blocknumber": "16", "transactions": [], "uncleHeaders": [], "withdrawals": [] @@ -496,9 +498,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=ShanghaiToCancunAtTime15k-excess_blob_gas_missing=False-blob_gas_used_missing=True-blob_fields_missing_post_fork": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_False-blob_gas_used_missing_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -932,7 +935,7 @@ }, { "rlp": "0xf90241f9023ba064177ba1942c915cc9c4d95a69b27befb29a3e0c2a56882fba4fb8c5bf367feaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028415a6a7e08c2fb01beaa4d4e8397ed3c51f8c7400d3619803652afedf658c1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801088016345785d8a000080823a9880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42180a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", - "expectException": "blob fields missing post fork", + "expectException": "BlockException.INCORRECT_BLOCK_FORMAT", "rlp_decoded": { "blockHeader": { "parentHash": "0x64177ba1942c915cc9c4d95a69b27befb29a3e0c2a56882fba4fb8c5bf367fea", @@ -956,6 +959,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5155c84b69a8af6ee6f06d7414f1e434d01dbd8a5eab1ac429b246525e319e16" }, + "blocknumber": "16", "transactions": [], "uncleHeaders": [], "withdrawals": [] @@ -993,9 +997,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=ShanghaiToCancunAtTime15k-excess_blob_gas_missing=True-blob_gas_used_missing=True-blob_fields_missing_post_fork": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_invalid_post_fork_block_without_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_missing_True-blob_gas_used_missing_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1429,7 +1434,7 @@ }, { "rlp": "0xf90240f9023aa064177ba1942c915cc9c4d95a69b27befb29a3e0c2a56882fba4fb8c5bf367feaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028415a6a7e08c2fb01beaa4d4e8397ed3c51f8c7400d3619803652afedf658c1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801088016345785d8a000080823a9880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", - "expectException": "blob fields missing post fork", + "expectException": "BlockException.INCORRECT_BLOCK_FORMAT", "rlp_decoded": { "blockHeader": { "parentHash": "0x64177ba1942c915cc9c4d95a69b27befb29a3e0c2a56882fba4fb8c5bf367fea", @@ -1452,6 +1457,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xacb59ea4cb2ed97ba5f95d4d2bf5401c0b63b69bdbf0215a5bdcf43e9f9eefea" }, + "blocknumber": "16", "transactions": [], "uncleHeaders": [], "withdrawals": [] diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/invalid_pre_fork_block_with_blob_fields.json b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/invalid_pre_fork_block_with_blob_fields.json index 8fddbd8e7aa..7cace0bb727 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/invalid_pre_fork_block_with_blob_fields.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/excess_blob_gas_fork_transition/invalid_pre_fork_block_with_blob_fields.json @@ -1,7 +1,8 @@ { - "000-fork=ShanghaiToCancunAtTime15k-excess_blob_gas_present=True-blob_gas_used_present=False-invalid_pre_fork_blob_fields": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_True-blob_gas_used_present_False]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -408,7 +409,7 @@ }, { "rlp": "0xf90220f9021aa07ae2e4b82775c956911581694c6ba462b6a04380af8a34cb56708ab2cb650c8ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0948622f2177f30e161126ff783f720dced1aa9aaf394c0784c9867b59cf36df9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800f88016345785d8a000080823a9780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42180c0c0c0", - "expectException": "invalid pre fork blob fields", + "expectException": "BlockException.INCORRECT_BLOCK_FORMAT", "rlp_decoded": { "blockHeader": { "parentHash": "0x7ae2e4b82775c956911581694c6ba462b6a04380af8a34cb56708ab2cb650c8e", @@ -431,6 +432,7 @@ "excessBlobGas": "0x00", "hash": "0x1c1e9818fb8c040850c98909c62ec5dae58dedcefcf7e7c5c2055dd2868168f1" }, + "blocknumber": "15", "transactions": [], "uncleHeaders": [], "withdrawals": [] @@ -468,9 +470,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=ShanghaiToCancunAtTime15k-excess_blob_gas_present=False-blob_gas_used_present=True-invalid_pre_fork_blob_fields": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_False-blob_gas_used_present_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -877,7 +880,7 @@ }, { "rlp": "0xf90220f9021aa07ae2e4b82775c956911581694c6ba462b6a04380af8a34cb56708ab2cb650c8ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0948622f2177f30e161126ff783f720dced1aa9aaf394c0784c9867b59cf36df9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800f88016345785d8a000080823a9780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42180c0c0c0", - "expectException": "invalid pre fork blob fields", + "expectException": "BlockException.INCORRECT_BLOCK_FORMAT", "rlp_decoded": { "blockHeader": { "parentHash": "0x7ae2e4b82775c956911581694c6ba462b6a04380af8a34cb56708ab2cb650c8e", @@ -900,6 +903,7 @@ "blobGasUsed": "0x00", "hash": "0x1c1e9818fb8c040850c98909c62ec5dae58dedcefcf7e7c5c2055dd2868168f1" }, + "blocknumber": "15", "transactions": [], "uncleHeaders": [], "withdrawals": [] @@ -937,9 +941,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=ShanghaiToCancunAtTime15k-excess_blob_gas_present=True-blob_gas_used_present=True-invalid_pre_fork_blob_fields": { + "tests/cancun/eip4844_blobs/test_excess_blob_gas_fork_transition.py::test_invalid_pre_fork_block_with_blob_fields[fork_ShanghaiToCancunAtTime15k-blockchain_test-excess_blob_gas_present_True-blob_gas_used_present_True]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1346,7 +1351,7 @@ }, { "rlp": "0xf90221f9021ba07ae2e4b82775c956911581694c6ba462b6a04380af8a34cb56708ab2cb650c8ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0948622f2177f30e161126ff783f720dced1aa9aaf394c0784c9867b59cf36df9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800f88016345785d8a000080823a9780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080c0c0c0", - "expectException": "invalid pre fork blob fields", + "expectException": "BlockException.INCORRECT_BLOCK_FORMAT", "rlp_decoded": { "blockHeader": { "parentHash": "0x7ae2e4b82775c956911581694c6ba462b6a04380af8a34cb56708ab2cb650c8e", @@ -1370,6 +1375,7 @@ "excessBlobGas": "0x00", "hash": "0xeecbcca0613b3c5c92cf0a66a029c904038ef385f26f23c99a550e8a91fe73aa" }, + "blocknumber": "15", "transactions": [], "uncleHeaders": [], "withdrawals": [] diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/invalid_precompile_calls.json b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/invalid_precompile_calls.json index 361f33f2eaf..302340467af 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/invalid_precompile_calls.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/invalid_precompile_calls.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-success=False-out_of_bounds_z": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-out_of_bounds_z]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09aa6093b8e4e56bac34298a4dd5b80a95ac8a325eeeb620b89cfa47b1a886a7ca073effe15f963eec0bc905a53a62c84d14293e99fc445aa2a48fc7e69392a22a4a07c628e6d0afaf53383fc892cdc033cecaad09a01eea6bb62b5b1ae18bb0f9c99b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286aa0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000010000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0f976375692b7ec47a3e9881846951e97b318dca2124ef6d58a827bc76300c9d0a065478b76b4ddc2fe090043aa2c62d1760e13841fcd394a616889ee2198d196efc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03bcf2e1097fad46fa17a3c3bc4d3ce7e4c302dc3ab5a773e0dbaa76553c08f67a073effe15f963eec0bc905a53a62c84d14293e99fc445aa2a48fc7e69392a22a4a07c628e6d0afaf53383fc892cdc033cecaad09a01eea6bb62b5b1ae18bb0f9c99b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286aa8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000010000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0f976375692b7ec47a3e9881846951e97b318dca2124ef6d58a827bc76300c9d0a065478b76b4ddc2fe090043aa2c62d1760e13841fcd394a616889ee2198d196efc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9aa6093b8e4e56bac34298a4dd5b80a95ac8a325eeeb620b89cfa47b1a886a7c", + "stateRoot": "0x3bcf2e1097fad46fa17a3c3bc4d3ce7e4c302dc3ab5a773e0dbaa76553c08f67", "transactionsTrie": "0x73effe15f963eec0bc905a53a62c84d14293e99fc445aa2a48fc7e69392a22a4", "receiptTrie": "0x7c628e6d0afaf53383fc892cdc033cecaad09a01eea6bb62b5b1ae18bb0f9c99", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286aa", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x44116b51024c4a6e8c72ba1e96e690fb57a001134e134730cb85f6ad9aacd39e" + "hash": "0xba49b9dff310331684ddb363257519a354d9b1aa8e04aa10c1e8f4865382b0fa" }, "blocknumber": "1", "transactions": [ @@ -79,7 +80,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x44116b51024c4a6e8c72ba1e96e690fb57a001134e134730cb85f6ad9aacd39e", + "lastblockhash": "0xba49b9dff310331684ddb363257519a354d9b1aa8e04aa10c1e8f4865382b0fa", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -117,7 +118,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -129,9 +130,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-success=False-out_of_bounds_y": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-out_of_bounds_y]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -162,12 +164,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09ded05f3e49a5c81db5049636fcd05b096e9157bd7fe7eb20289072ac79549cba0dc5f4feb0da0b37bdffe3871e1383e07cb8e33a5c16821d6eaad433d275d5356a085425d0c634b9a4cea7aa20f108c4cd297d13fcecaa9d63c520794d07056e220b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301eb320c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014000000000000000000000000000000000000000000000000000000000000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a09c6c1e9f235cb547e30d9c1486d00252107b9454b007d4d760ef8432f320bc21a00f478596112de8ec3c11c07b2c7c3d5ad2fbe0c07bbb25e09b967ebe7aa1a7cec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cf1679834a06ba93c6d3f8d0aac979dd5ebdd4e0a53a8a5ddd24c4c3a1c235c6a0dc5f4feb0da0b37bdffe3871e1383e07cb8e33a5c16821d6eaad433d275d5356a085425d0c634b9a4cea7aa20f108c4cd297d13fcecaa9d63c520794d07056e220b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301eb328203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014000000000000000000000000000000000000000000000000000000000000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a09c6c1e9f235cb547e30d9c1486d00252107b9454b007d4d760ef8432f320bc21a00f478596112de8ec3c11c07b2c7c3d5ad2fbe0c07bbb25e09b967ebe7aa1a7cec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9ded05f3e49a5c81db5049636fcd05b096e9157bd7fe7eb20289072ac79549cb", + "stateRoot": "0xcf1679834a06ba93c6d3f8d0aac979dd5ebdd4e0a53a8a5ddd24c4c3a1c235c6", "transactionsTrie": "0xdc5f4feb0da0b37bdffe3871e1383e07cb8e33a5c16821d6eaad433d275d5356", "receiptTrie": "0x85425d0c634b9a4cea7aa20f108c4cd297d13fcecaa9d63c520794d07056e220", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -175,8 +177,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01eb32", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -184,7 +186,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x92a29952e32221ef29dd6bd908923c2a66286bc200aa676ed2358a72614a75d7" + "hash": "0xad20cd8036f41a73abfdc41a34de61ffceb8e137564e10c5f0603124e93919ef" }, "blocknumber": "1", "transactions": [ @@ -209,7 +211,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x92a29952e32221ef29dd6bd908923c2a66286bc200aa676ed2358a72614a75d7", + "lastblockhash": "0xad20cd8036f41a73abfdc41a34de61ffceb8e137564e10c5f0603124e93919ef", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -245,7 +247,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -257,9 +259,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-success=False-correct_proof_1_input_too_short": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-correct_proof_1_input_too_short]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -290,12 +293,12 @@ }, "blocks": [ { - "rlp": "0xf9036ff9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf2720c38f36894ddc9358dfd83f2dd17d8326856804a292f639e82349347473a08c7deaf8db8187c6e35dc646c8e3bde3f7148c09c34db5154a303084d5597c0aa0da784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286be0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0231e09fabbb1781732fed1710f36fe9fd33069472ca22ea08056d85bf870256ca03b2f321fd4d1faed38e4a9eab5bedb077d450e12daf9406b94ae48a5a9b9be34c0c0", + "rlp": "0xf90371f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02de70ec3ce81d7fa34fdbcd1484cf0a8ccb0e68c92bce1dc209ba5011b80027aa08c7deaf8db8187c6e35dc646c8e3bde3f7148c09c34db5154a303084d5597c0aa0da784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286be8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0231e09fabbb1781732fed1710f36fe9fd33069472ca22ea08056d85bf870256ca03b2f321fd4d1faed38e4a9eab5bedb077d450e12daf9406b94ae48a5a9b9be34c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbf2720c38f36894ddc9358dfd83f2dd17d8326856804a292f639e82349347473", + "stateRoot": "0x2de70ec3ce81d7fa34fdbcd1484cf0a8ccb0e68c92bce1dc209ba5011b80027a", "transactionsTrie": "0x8c7deaf8db8187c6e35dc646c8e3bde3f7148c09c34db5154a303084d5597c0a", "receiptTrie": "0xda784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -303,8 +306,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286be", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -312,7 +315,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2f34118e387d86bb797fa9736ab6055cc0d265efe3cb8d74e57b1a507bcc1527" + "hash": "0x5ac83a93693676e2ca3de2b8ec610945758ee3480775157ce41c2cf86b1cd12a" }, "blocknumber": "1", "transactions": [ @@ -337,7 +340,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2f34118e387d86bb797fa9736ab6055cc0d265efe3cb8d74e57b1a507bcc1527", + "lastblockhash": "0x5ac83a93693676e2ca3de2b8ec610945758ee3480775157ce41c2cf86b1cd12a", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -375,7 +378,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -387,9 +390,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-success=False-correct_proof_1_input_too_short_2": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-correct_proof_1_input_too_short_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -420,12 +424,12 @@ }, "blocks": [ { - "rlp": "0xf9033ef9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01bfa35ed56fe1c2807036596551096037cf8f185f6ebadf5ae6e16c3ab07daeea00e25e134742d04fd314533383f3a5edf78e2d416e044ee655e3e74587f0865dca03e8bbd685dd49c8026b6ad80c058d0d8370a813e05c2f7f9b2c57d9b1411bc36b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286000c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8fab8f802f8f501808007830f424094000000000000000000000000000000000000010080b891010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c001a04e95ec79ec1d800110e3d156cd7481b694367b44cc6c5346a70ae9ccc055ae5ca045164313d41a5bc9779173f4c64868a97f7e54b803797d6e991aa402658f989ec0c0", + "rlp": "0xf90340f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04b63458da1d467886ed755ff9ea32b0fe80e16245c6200bbeb66790e5b1c2d68a00e25e134742d04fd314533383f3a5edf78e2d416e044ee655e3e74587f0865dca03e8bbd685dd49c8026b6ad80c058d0d8370a813e05c2f7f9b2c57d9b1411bc36b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286008203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8fab8f802f8f501808007830f424094000000000000000000000000000000000000010080b891010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c001a04e95ec79ec1d800110e3d156cd7481b694367b44cc6c5346a70ae9ccc055ae5ca045164313d41a5bc9779173f4c64868a97f7e54b803797d6e991aa402658f989ec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x1bfa35ed56fe1c2807036596551096037cf8f185f6ebadf5ae6e16c3ab07daee", + "stateRoot": "0x4b63458da1d467886ed755ff9ea32b0fe80e16245c6200bbeb66790e5b1c2d68", "transactionsTrie": "0x0e25e134742d04fd314533383f3a5edf78e2d416e044ee655e3e74587f0865dc", "receiptTrie": "0x3e8bbd685dd49c8026b6ad80c058d0d8370a813e05c2f7f9b2c57d9b1411bc36", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -433,8 +437,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028600", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -442,7 +446,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4800bd70f531bdbebc6902d2340cc0341068e6cce4baf0df8190c5b52c62b01b" + "hash": "0x6f17007a22ede89e78f2a85bbaa0f5bcb39d171386b7204f9fe87996adda38f0" }, "blocknumber": "1", "transactions": [ @@ -467,7 +471,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4800bd70f531bdbebc6902d2340cc0341068e6cce4baf0df8190c5b52c62b01b", + "lastblockhash": "0x6f17007a22ede89e78f2a85bbaa0f5bcb39d171386b7204f9fe87996adda38f0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -505,7 +509,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -517,9 +521,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-success=False-correct_proof_1_input_too_long": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-correct_proof_1_input_too_long]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -550,12 +555,12 @@ }, "blocks": [ { - "rlp": "0xf90371f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aa01d9a569693ec04e9001dbf9454618e73ad4528253a6ee9189c75254e046e0a0a85c2c5bc4d00589f24a0227614338c937261934b31ed6690bc68923a63e37cda0ae226711cc4155fa5d1d69e9e3db2030e88c4d2442ed478f297c9a9b9a7065e8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286cc0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c1010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0a21f0bc4ab57a7932fd2ff7dcd74c78dab0c321f6818c53a84dd8f032fb6cb33a01abce298b1dbda9570db46401ec144bccbdabc47b3fede279ffb4a7b455d3387c0c0", + "rlp": "0xf90373f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2d3b0c60c194f753f3d1fcde83216c0124444e96b0b233acd2052855feba801a0a85c2c5bc4d00589f24a0227614338c937261934b31ed6690bc68923a63e37cda0ae226711cc4155fa5d1d69e9e3db2030e88c4d2442ed478f297c9a9b9a7065e8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286cc8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c1010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0a21f0bc4ab57a7932fd2ff7dcd74c78dab0c321f6818c53a84dd8f032fb6cb33a01abce298b1dbda9570db46401ec144bccbdabc47b3fede279ffb4a7b455d3387c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xaa01d9a569693ec04e9001dbf9454618e73ad4528253a6ee9189c75254e046e0", + "stateRoot": "0xc2d3b0c60c194f753f3d1fcde83216c0124444e96b0b233acd2052855feba801", "transactionsTrie": "0xa85c2c5bc4d00589f24a0227614338c937261934b31ed6690bc68923a63e37cd", "receiptTrie": "0xae226711cc4155fa5d1d69e9e3db2030e88c4d2442ed478f297c9a9b9a7065e8", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -563,8 +568,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286cc", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -572,7 +577,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x747daaee7b9bab2ecb977cb8b54153648404c06a302cfef9408c9fb75c9294e7" + "hash": "0x15c60d72ebde2b20125be429ff61873b62f70b65f18ab5c458529aa5951e1bdd" }, "blocknumber": "1", "transactions": [ @@ -597,7 +602,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x747daaee7b9bab2ecb977cb8b54153648404c06a302cfef9408c9fb75c9294e7", + "lastblockhash": "0x15c60d72ebde2b20125be429ff61873b62f70b65f18ab5c458529aa5951e1bdd", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -635,7 +640,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -647,9 +652,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-success=False-correct_proof_1_input_extra_long": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-correct_proof_1_input_extra_long]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -680,12 +686,12 @@ }, "blocks": [ { - "rlp": "0xf90770f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa013343979f1f2f98605f05a41b3237c5e7606d0639f2c4de7520bf0306b2816e8a0e1b05b018f364146435a4a3265b4ac9fd4d84c81bf38dbbf23080ad504e2c148a091b6584ed4e63d11d71b8aa83f53afa015b99be95111c00698a4ee34686e9970b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830297800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9052bb9052802f9052401808007830f424094000000000000000000000000000000000000010080b904bf010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a045fbcc8f50ad76c984aa0dc7243fe291dcce05cd947d0386fe3edc486c0e8ee7a05b9d02c59375a92a1ce16427d9442aff32f0432df7c5cd84753a80547ec56fb1c0c0", + "rlp": "0xf90772f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0158fdcedc5d7fabeb828dfca336ca1e059875096c2ed5b153407fabc38b6a635a0e1b05b018f364146435a4a3265b4ac9fd4d84c81bf38dbbf23080ad504e2c148a091b6584ed4e63d11d71b8aa83f53afa015b99be95111c00698a4ee34686e9970b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830297808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9052bb9052802f9052401808007830f424094000000000000000000000000000000000000010080b904bf010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a045fbcc8f50ad76c984aa0dc7243fe291dcce05cd947d0386fe3edc486c0e8ee7a05b9d02c59375a92a1ce16427d9442aff32f0432df7c5cd84753a80547ec56fb1c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x13343979f1f2f98605f05a41b3237c5e7606d0639f2c4de7520bf0306b2816e8", + "stateRoot": "0x158fdcedc5d7fabeb828dfca336ca1e059875096c2ed5b153407fabc38b6a635", "transactionsTrie": "0xe1b05b018f364146435a4a3265b4ac9fd4d84c81bf38dbbf23080ad504e2c148", "receiptTrie": "0x91b6584ed4e63d11d71b8aa83f53afa015b99be95111c00698a4ee34686e9970", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -693,8 +699,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x029780", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -702,7 +708,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4071a06c77639dc87f65d5f37b38666e6b477e5e63757d88da23a53d39f496b9" + "hash": "0x827ae37e15103c342097c2b59219f07ab36e51c6c7b22588fbc0d3e276817936" }, "blocknumber": "1", "transactions": [ @@ -727,7 +733,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4071a06c77639dc87f65d5f37b38666e6b477e5e63757d88da23a53d39f496b9", + "lastblockhash": "0x827ae37e15103c342097c2b59219f07ab36e51c6c7b22588fbc0d3e276817936", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -765,7 +771,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -777,9 +783,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-success=False-null_inputs": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-null_inputs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -810,12 +817,12 @@ }, "blocks": [ { - "rlp": "0xf902acf9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c774a3b6bf93530cc8f8efbebf80b276e65fee5c87dfb7e6825446c25878c9dea0255246eb15cc03d2c7a6c9753c6029711f43d5f8d860da7cce2a6a6f2a42bcb4a0b77072d07d661c010b8cd10f312da5e312bb32cf2d14eaa71949ec711297fbe0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830149a80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f868b86602f86301808007830f42409400000000000000000000000000000000000001008080c080a01a94485b340386550a1eef3e191b544c82f27fa5ba502ebf516f5ac72441be47a01d14cf4a8d5be4584cb5a8f2ca7f3cad5ca89f52409b51715828090ea1164288c0c0", + "rlp": "0xf902aef9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00f5161ae3337134df2944ac94ba15859d0449da6498462e45e24bd1906bd3b9da0255246eb15cc03d2c7a6c9753c6029711f43d5f8d860da7cce2a6a6f2a42bcb4a0b77072d07d661c010b8cd10f312da5e312bb32cf2d14eaa71949ec711297fbe0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830149a88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f868b86602f86301808007830f42409400000000000000000000000000000000000001008080c080a01a94485b340386550a1eef3e191b544c82f27fa5ba502ebf516f5ac72441be47a01d14cf4a8d5be4584cb5a8f2ca7f3cad5ca89f52409b51715828090ea1164288c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc774a3b6bf93530cc8f8efbebf80b276e65fee5c87dfb7e6825446c25878c9de", + "stateRoot": "0x0f5161ae3337134df2944ac94ba15859d0449da6498462e45e24bd1906bd3b9d", "transactionsTrie": "0x255246eb15cc03d2c7a6c9753c6029711f43d5f8d860da7cce2a6a6f2a42bcb4", "receiptTrie": "0xb77072d07d661c010b8cd10f312da5e312bb32cf2d14eaa71949ec711297fbe0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -823,8 +830,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0149a8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -832,7 +839,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9ece5a92b59786180ff3078556d0423429e87a6bc6733acba025fa4eda55b423" + "hash": "0xdd3d1f34285265107fb3b695a1322ad986f47773494af511d6191261afe19e88" }, "blocknumber": "1", "transactions": [ @@ -857,7 +864,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9ece5a92b59786180ff3078556d0423429e87a6bc6733acba025fa4eda55b423", + "lastblockhash": "0xdd3d1f34285265107fb3b695a1322ad986f47773494af511d6191261afe19e88", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -890,7 +897,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -902,9 +909,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-success=False-zeros_inputs": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-zeros_inputs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -935,12 +943,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06687142c9ac04682e8d31d9279befa6e5b6d880830304a4a7498c54cf4220098a0d49ddd0080a0359622f815780654bc7e32341b7dca165ecd88b0a68f80569c90a027393e5bc92e4f234032160602b404f0d2781cc38ad6b719b98805fa548b28f4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083014cc60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a07b9358299ccb9414dcb684627fbad52c317d87b88062a78650a7bebd1d927a75a064b57513f9e4b8467513db39cbbcb177c6d8d9378e977a274cf16a534741ae6fc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e04c6d099a55d902f94032d85c96f50d2b9249efcaffabd0ef16ad102f6e077aa0d49ddd0080a0359622f815780654bc7e32341b7dca165ecd88b0a68f80569c90a027393e5bc92e4f234032160602b404f0d2781cc38ad6b719b98805fa548b28f4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083014cc68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a07b9358299ccb9414dcb684627fbad52c317d87b88062a78650a7bebd1d927a75a064b57513f9e4b8467513db39cbbcb177c6d8d9378e977a274cf16a534741ae6fc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6687142c9ac04682e8d31d9279befa6e5b6d880830304a4a7498c54cf4220098", + "stateRoot": "0xe04c6d099a55d902f94032d85c96f50d2b9249efcaffabd0ef16ad102f6e077a", "transactionsTrie": "0xd49ddd0080a0359622f815780654bc7e32341b7dca165ecd88b0a68f80569c90", "receiptTrie": "0x27393e5bc92e4f234032160602b404f0d2781cc38ad6b719b98805fa548b28f4", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -948,8 +956,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x014cc6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -957,7 +965,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x346cd645394e6c3ee09dd628ddced0b7974ac6a16989770529bb41b1a2f7990d" + "hash": "0x7b3c46151cbbb6ca97cb95ca3930023a5fbf08af73295da578c406378e1cd241" }, "blocknumber": "1", "transactions": [ @@ -982,7 +990,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x346cd645394e6c3ee09dd628ddced0b7974ac6a16989770529bb41b1a2f7990d", + "lastblockhash": "0x7b3c46151cbbb6ca97cb95ca3930023a5fbf08af73295da578c406378e1cd241", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1015,7 +1023,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1027,9 +1035,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-success=False-zeros_inputs_correct_versioned_hash": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-zeros_inputs_correct_versioned_hash]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1060,12 +1069,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0743af49d58239a5fb21d8f2d9512f012ca80844391088415af3454ca7b2b20c4a06b981dca2c5b9170aa076ec53b81b6e886d708643ce4256d686e5540aeddeea1a06bd40c77513c8b76d2853fe0d02b9cae6758031726c3d8b7f05b84d674ca5f6fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301e9be0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001b0761f87b081d5cf10757ccc89f12be355c70e2e29df288b65b30710dcbcd100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a092c6ff5ca008e62dbfd737f4648f1a4c5fb2b9d630f0ea4162a90a1895aebbafa0281536f9213d5dddaf48e985b6c5d87fa38b842675a4674584d03df586ec6014c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f75467d00963ca49428b472998b6fc0f5601488c067788d67f28ee9aaeb97983a06b981dca2c5b9170aa076ec53b81b6e886d708643ce4256d686e5540aeddeea1a06bd40c77513c8b76d2853fe0d02b9cae6758031726c3d8b7f05b84d674ca5f6fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301e9be8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001b0761f87b081d5cf10757ccc89f12be355c70e2e29df288b65b30710dcbcd100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a092c6ff5ca008e62dbfd737f4648f1a4c5fb2b9d630f0ea4162a90a1895aebbafa0281536f9213d5dddaf48e985b6c5d87fa38b842675a4674584d03df586ec6014c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x743af49d58239a5fb21d8f2d9512f012ca80844391088415af3454ca7b2b20c4", + "stateRoot": "0xf75467d00963ca49428b472998b6fc0f5601488c067788d67f28ee9aaeb97983", "transactionsTrie": "0x6b981dca2c5b9170aa076ec53b81b6e886d708643ce4256d686e5540aeddeea1", "receiptTrie": "0x6bd40c77513c8b76d2853fe0d02b9cae6758031726c3d8b7f05b84d674ca5f6f", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1073,8 +1082,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01e9be", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1082,7 +1091,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6daff560176cbed1225173828018971b05f1519496ae563f0aec5c57d50a0d2b" + "hash": "0xc454649c6df40afeccc20b89a4ed498c4b53097dd75311330b78f7085c5e373e" }, "blocknumber": "1", "transactions": [ @@ -1107,7 +1116,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6daff560176cbed1225173828018971b05f1519496ae563f0aec5c57d50a0d2b", + "lastblockhash": "0xc454649c6df40afeccc20b89a4ed498c4b53097dd75311330b78f7085c5e373e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1143,7 +1152,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1155,9 +1164,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-success=False-correct_proof_1_incorrect_versioned_hash_version_0x00": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-correct_proof_1_incorrect_versioned_hash_version_0x00]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1188,12 +1198,12 @@ }, "blocks": [ { - "rlp": "0xf9036ff9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cfe4e6fc2d199b8aad9701f66604e85f7b25003bdd31a8dc8e06cafb900f0fdba0786dc4641f361f5b7ff499a5d6450974418b15bc34a47d42a604e6fa9e40063fa094022a78b4373a9c13dee08e4613ba1ac3f60b56879db7766e1f99ce4335d436b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286b60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8c0000657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a09b577bc64a51b9896dad8f43780c71be7902e6d77358d52d89c0a9fabb525f369f42cf8be073cda1c506ea942ecb2735d6cddef6aac93fb5eaf156a379f960bbc0c0", + "rlp": "0xf90371f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07fe8fff8c82a0da9b1533b8612e076ded9e888a84b0b68785782fc55289b1360a0786dc4641f361f5b7ff499a5d6450974418b15bc34a47d42a604e6fa9e40063fa094022a78b4373a9c13dee08e4613ba1ac3f60b56879db7766e1f99ce4335d436b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286b68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8c0000657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a09b577bc64a51b9896dad8f43780c71be7902e6d77358d52d89c0a9fabb525f369f42cf8be073cda1c506ea942ecb2735d6cddef6aac93fb5eaf156a379f960bbc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcfe4e6fc2d199b8aad9701f66604e85f7b25003bdd31a8dc8e06cafb900f0fdb", + "stateRoot": "0x7fe8fff8c82a0da9b1533b8612e076ded9e888a84b0b68785782fc55289b1360", "transactionsTrie": "0x786dc4641f361f5b7ff499a5d6450974418b15bc34a47d42a604e6fa9e40063f", "receiptTrie": "0x94022a78b4373a9c13dee08e4613ba1ac3f60b56879db7766e1f99ce4335d436", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1201,8 +1211,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286b6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1210,7 +1220,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xac31040f75e9eef81c3bf0b7aece090c139a31a0c398c9b05de56d731fef9e4c" + "hash": "0x4a22d4bef0bd88536c9cdc27c2546f91811ad23c3f6491aba84907a5ca499317" }, "blocknumber": "1", "transactions": [ @@ -1235,7 +1245,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xac31040f75e9eef81c3bf0b7aece090c139a31a0c398c9b05de56d731fef9e4c", + "lastblockhash": "0x4a22d4bef0bd88536c9cdc27c2546f91811ad23c3f6491aba84907a5ca499317", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1273,7 +1283,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1285,9 +1295,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-success=False-correct_proof_1_incorrect_versioned_hash_version_0x02": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-correct_proof_1_incorrect_versioned_hash_version_0x02]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1318,12 +1329,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dcfbae2f789b1021482adbb958cbd8f3e6933b6298646971bda7b1615abea31aa0a005e51e63fb051d6f138881933d9a403bb695109b19025428c96f5cf6c85aeaa04330748560fb27b595e6d0c6693b9e2b251db3f886433d80517d934c78254aedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286c20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0020657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a07aabbf314ff6bf2526da7e4f014ffa6f7c764c8be779557083ab22ae97ec8123a075e8e0649ec01273e726d10a580e34036159713beacc9c9fb56184d9d446b524c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09a79352110f9928ff29bd4e4b83bf289e455e50bbfd543eaa19e8d4b03f7b7f4a0a005e51e63fb051d6f138881933d9a403bb695109b19025428c96f5cf6c85aeaa04330748560fb27b595e6d0c6693b9e2b251db3f886433d80517d934c78254aedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286c28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0020657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a07aabbf314ff6bf2526da7e4f014ffa6f7c764c8be779557083ab22ae97ec8123a075e8e0649ec01273e726d10a580e34036159713beacc9c9fb56184d9d446b524c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdcfbae2f789b1021482adbb958cbd8f3e6933b6298646971bda7b1615abea31a", + "stateRoot": "0x9a79352110f9928ff29bd4e4b83bf289e455e50bbfd543eaa19e8d4b03f7b7f4", "transactionsTrie": "0xa005e51e63fb051d6f138881933d9a403bb695109b19025428c96f5cf6c85aea", "receiptTrie": "0x4330748560fb27b595e6d0c6693b9e2b251db3f886433d80517d934c78254aed", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1331,8 +1342,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286c2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1340,7 +1351,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9b380f95b0bf5bd2ab22ab37338d633e3c050f3ddc082463998fe78d17da721b" + "hash": "0xeef1c04458572c0282fd7a4bab3fac303f47b91039b0a29ef348c155b15ccd4a" }, "blocknumber": "1", "transactions": [ @@ -1365,7 +1376,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9b380f95b0bf5bd2ab22ab37338d633e3c050f3ddc082463998fe78d17da721b", + "lastblockhash": "0xeef1c04458572c0282fd7a4bab3fac303f47b91039b0a29ef348c155b15ccd4a", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1403,7 +1414,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1415,9 +1426,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-success=False-correct_proof_1_incorrect_versioned_hash_version_0xff": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_invalid_precompile_calls[fork_Cancun-blockchain_test-success_False-correct_proof_1_incorrect_versioned_hash_version_0xff]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1448,12 +1460,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa001bff9b106971013fdbf76c11ea07461c062e0440c0b024d4ded794d4061e626a0f76dd1c2ddbfc000cf3ecab0687289f7d216aecef673eb429f59ccc5e8b3a0d5a04330748560fb27b595e6d0c6693b9e2b251db3f886433d80517d934c78254aedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286c20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0ff0657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a072f90c641f00ef9f66796f13a4686fdd45ae43fe08b262e152914734418a75c0a00d0a1bcb9348a2d258ee1f12ce9cc9267315165ec743e258080473b799c21540c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c235c914bfae3e187ca9ed0886e6e43da181578f15d816e6a753251ecce0632a0f76dd1c2ddbfc000cf3ecab0687289f7d216aecef673eb429f59ccc5e8b3a0d5a04330748560fb27b595e6d0c6693b9e2b251db3f886433d80517d934c78254aedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286c28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0ff0657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a072f90c641f00ef9f66796f13a4686fdd45ae43fe08b262e152914734418a75c0a00d0a1bcb9348a2d258ee1f12ce9cc9267315165ec743e258080473b799c21540c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x01bff9b106971013fdbf76c11ea07461c062e0440c0b024d4ded794d4061e626", + "stateRoot": "0x9c235c914bfae3e187ca9ed0886e6e43da181578f15d816e6a753251ecce0632", "transactionsTrie": "0xf76dd1c2ddbfc000cf3ecab0687289f7d216aecef673eb429f59ccc5e8b3a0d5", "receiptTrie": "0x4330748560fb27b595e6d0c6693b9e2b251db3f886433d80517d934c78254aed", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1461,8 +1473,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286c2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1470,7 +1482,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x393e4110a8d939f87b07c0f9914318f9a954a77f9c56de56d0336675fbc915bb" + "hash": "0x83b4b1718b97bcdb1dcbd781c944ef0951ad7efce263893d1fcc642cd98558c8" }, "blocknumber": "1", "transactions": [ @@ -1495,7 +1507,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x393e4110a8d939f87b07c0f9914318f9a954a77f9c56de56d0336675fbc915bb", + "lastblockhash": "0x83b4b1718b97bcdb1dcbd781c944ef0951ad7efce263893d1fcc642cd98558c8", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1533,7 +1545,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_before_fork.json b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_before_fork.json index ab973ba7356..ccbf7366e6d 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_before_fork.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_before_fork.json @@ -1,7 +1,8 @@ { - "000-fork=ShanghaiToCancunAtTime15k-correct_proof-point_evaluation_precompile_before_fork": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-correct_proof]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -29,7 +30,7 @@ }, "blocks": [ { - "rlp": "0xf9034ff9021ca04882bdfcbf75f9375f28ad612b37b3a7db5af5dd4021bc282c43b13fbb82724ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d481fd3da9b1b53fc81962a288bc733e758f2aa6d978193af039b52f24e48f06a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa07c53f1e5660a78e8903fa3b72eef59be0af3f82a34437b7578b44130829a8558b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301347a8203e780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf9034ff9021ca04882bdfcbf75f9375f28ad612b37b3a7db5af5dd4021bc282c43b13fbb82724ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d481fd3da9b1b53fc81962a288bc733e758f2aa6d978193af039b52f24e48f06a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa07c53f1e5660a78e8903fa3b72eef59be0af3f82a34437b7578b44130829a8558b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301347a821d4c00a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0x4882bdfcbf75f9375f28ad612b37b3a7db5af5dd4021bc282c43b13fbb82724c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -42,13 +43,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01347a", - "timestamp": "0x03e7", - "extraData": "0x", + "timestamp": "0x1d4c", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xeb2acb30b2e9381379344f1669d301f969cd2ec51d7cec4957c52deac8d3561b" + "hash": "0x1f2828c11953348ce1faf6994ddaf761ed694e645032230c0069f28979aee0d5" }, "blocknumber": "1", "transactions": [ @@ -71,672 +72,9 @@ ], "uncleHeaders": [], "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0eb2acb30b2e9381379344f1669d301f969cd2ec51d7cec4957c52deac8d3561ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa045d79a96fa78929b103735d8486619d643b4d12de67804c95de4b3e7476fb5a7a0fd0fbb9204288fec12d873636902c2c9b555c4551c6e088e7524edb73c82f99aa0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082d2d28207cf80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401018007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a02255be5c5eccb51527c6a213357d6f7b480ec4e15d553b8eb1524a6efa2519b3a01cb7c8285d672eb298fb143fa53d10b209c1548e1b322c3b64d427c445c67910c0c0", - "blockHeader": { - "parentHash": "0xeb2acb30b2e9381379344f1669d301f969cd2ec51d7cec4957c52deac8d3561b", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x45d79a96fa78929b103735d8486619d643b4d12de67804c95de4b3e7476fb5a7", - "transactionsTrie": "0xfd0fbb9204288fec12d873636902c2c9b555c4551c6e088e7524edb73c82f99a", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x02", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x07cf", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x22f4021b58b8bcd4e626430031c9c1e15401f6503e27ed723652c6c1f992f3a6" - }, - "blocknumber": "2", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x01", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x01", - "r": "0x2255be5c5eccb51527c6a213357d6f7b480ec4e15d553b8eb1524a6efa2519b3", - "s": "0x1cb7c8285d672eb298fb143fa53d10b209c1548e1b322c3b64d427c445c67910", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba022f4021b58b8bcd4e626430031c9c1e15401f6503e27ed723652c6c1f992f3a6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c825a5c692503c5474bf8e324e9059d756cb4472b82af162a79668c6128930f6a04267884a87fe9fb3d0e5e33ae6bdaf8aa5f7a375e2eb68e5f46e972312c2bd35a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800388016345785d8a000082d2d2820bb780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401028007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a01d153928a4a2442d9dbd65dd20faf19f2ea2abe14a9761c0354fcc4c1b43d086a01a10a731c05a5cc200fcce5e87bd2645d17f18c1c7aca1ca8df91764b7a5d738c0c0", - "blockHeader": { - "parentHash": "0x22f4021b58b8bcd4e626430031c9c1e15401f6503e27ed723652c6c1f992f3a6", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc825a5c692503c5474bf8e324e9059d756cb4472b82af162a79668c6128930f6", - "transactionsTrie": "0x4267884a87fe9fb3d0e5e33ae6bdaf8aa5f7a375e2eb68e5f46e972312c2bd35", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x03", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x0bb7", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xb1773c98ec05de2960287d42da74c5b43cecb27c99fa094fdc9676348c6e0b44" - }, - "blocknumber": "3", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x02", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0x1d153928a4a2442d9dbd65dd20faf19f2ea2abe14a9761c0354fcc4c1b43d086", - "s": "0x1a10a731c05a5cc200fcce5e87bd2645d17f18c1c7aca1ca8df91764b7a5d738", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0b1773c98ec05de2960287d42da74c5b43cecb27c99fa094fdc9676348c6e0b44a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0421cf065b70678cdbb3e2f3688d58ea4ba8e53d89383b583ba82429b97083fdea0eda33d872a3f034a552642375d2d9d0f313ebeeb6be133b9523d55382b63cdd0a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800488016345785d8a000082d2d2820f9f80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401038007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a01856b0e16524c337f33f4fbd45c95a5a56c8b57eecf24bb43798cee27e3abbb1a001502631c289f3ca430af87a715f4b7713af303b58f0e7ec553014dbd7d82526c0c0", - "blockHeader": { - "parentHash": "0xb1773c98ec05de2960287d42da74c5b43cecb27c99fa094fdc9676348c6e0b44", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x421cf065b70678cdbb3e2f3688d58ea4ba8e53d89383b583ba82429b97083fde", - "transactionsTrie": "0xeda33d872a3f034a552642375d2d9d0f313ebeeb6be133b9523d55382b63cdd0", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x04", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x0f9f", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xb2c1edcaa260794f122b29a259f8d8e3e74e47e807445b1ce4f248c7276b71da" - }, - "blocknumber": "4", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x03", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0x1856b0e16524c337f33f4fbd45c95a5a56c8b57eecf24bb43798cee27e3abbb1", - "s": "0x01502631c289f3ca430af87a715f4b7713af303b58f0e7ec553014dbd7d82526", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0b2c1edcaa260794f122b29a259f8d8e3e74e47e807445b1ce4f248c7276b71daa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa076e8498f03e82a9b4c80a1a5d22ddbb33d044f490698d07b25f044accd45a301a0bba35aa3266d48da63bfa5b872e095590d951e8f259d77478f01af4d5b41965ca0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800588016345785d8a000082d2d282138780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401048007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a01e9e2af346507603b29dfca2cb4fad1ba090386e3fb41b3826680427af7efa63a056357586c8ca4087590f9b30bb63ff5a9f0d6e636e601b58189f317c8b0a923fc0c0", - "blockHeader": { - "parentHash": "0xb2c1edcaa260794f122b29a259f8d8e3e74e47e807445b1ce4f248c7276b71da", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x76e8498f03e82a9b4c80a1a5d22ddbb33d044f490698d07b25f044accd45a301", - "transactionsTrie": "0xbba35aa3266d48da63bfa5b872e095590d951e8f259d77478f01af4d5b41965c", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x05", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x1387", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xead49c85a10669306a52ffd6d2f4a2fc8f238db1acc3b4a9059f6cd294ec876d" - }, - "blocknumber": "5", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x04", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x01", - "r": "0x1e9e2af346507603b29dfca2cb4fad1ba090386e3fb41b3826680427af7efa63", - "s": "0x56357586c8ca4087590f9b30bb63ff5a9f0d6e636e601b58189f317c8b0a923f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0ead49c85a10669306a52ffd6d2f4a2fc8f238db1acc3b4a9059f6cd294ec876da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c73061995b4fe48995a84f1fc68abef9db3fcc3fb7f981311491698e527dadea0966e8cbc4b535b5081a6ce06e097d4e1d9439ef052e4d15f17318b4b0fa2a895a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800688016345785d8a000082d2d282176f80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401058007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05166cdab7aa11b8c321fc36e9ebd875d68e541560ec1098cb306716848ba9cbda04453c1b3ad9430dd08a5e19f834968abeb788aefb247bbe222de954e7c85b38bc0c0", - "blockHeader": { - "parentHash": "0xead49c85a10669306a52ffd6d2f4a2fc8f238db1acc3b4a9059f6cd294ec876d", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9c73061995b4fe48995a84f1fc68abef9db3fcc3fb7f981311491698e527dade", - "transactionsTrie": "0x966e8cbc4b535b5081a6ce06e097d4e1d9439ef052e4d15f17318b4b0fa2a895", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x06", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x176f", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x84cccedcb35f9397979306e5e1cfb2ca0257bbc0fbfb8dc2ff8fb54d84689b1a" - }, - "blocknumber": "6", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x05", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x01", - "r": "0x5166cdab7aa11b8c321fc36e9ebd875d68e541560ec1098cb306716848ba9cbd", - "s": "0x4453c1b3ad9430dd08a5e19f834968abeb788aefb247bbe222de954e7c85b38b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba084cccedcb35f9397979306e5e1cfb2ca0257bbc0fbfb8dc2ff8fb54d84689b1aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e299fc09b9a2b59ccc9a9cadf2a5eeaa5cf6e07fff27e3efb33eebe2da51f5cea03388bd3c6439a1991e5c445af4324830522c6002665d1e52dfc117e58b4a868fa0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800788016345785d8a000082d2d2821b5780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401068007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0e92810ef87b2d922beab50dfb8156f7fe2e51705378472753609d16495c38a72a01e0b234e746f791694d0bc59c21dec2ca2fc8d28720e265e1bef839b52e64fd1c0c0", - "blockHeader": { - "parentHash": "0x84cccedcb35f9397979306e5e1cfb2ca0257bbc0fbfb8dc2ff8fb54d84689b1a", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe299fc09b9a2b59ccc9a9cadf2a5eeaa5cf6e07fff27e3efb33eebe2da51f5ce", - "transactionsTrie": "0x3388bd3c6439a1991e5c445af4324830522c6002665d1e52dfc117e58b4a868f", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x07", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x1b57", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x888b1693c0df1b95ebd7ec98137d66e5360fa03e90ee7d393ce0f68a566b8644" - }, - "blocknumber": "7", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x06", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x01", - "r": "0xe92810ef87b2d922beab50dfb8156f7fe2e51705378472753609d16495c38a72", - "s": "0x1e0b234e746f791694d0bc59c21dec2ca2fc8d28720e265e1bef839b52e64fd1", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0888b1693c0df1b95ebd7ec98137d66e5360fa03e90ee7d393ce0f68a566b8644a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0006a3e5ce2ce23c176060de75470ce8d434a9678618b26b15340d613f73455c9a0f22e3d9b45e6dc17b5f23178af7b6c798f3479179383dae2c46b34139d3b14d0a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800888016345785d8a000082d2d2821f3f80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401078007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0e78f7e5011540370e32c2d776e925b83fde5fdd2732cfe7211875d62c11835e2a062e8449e8d29d8febd7ce7522af98e3b9e8c1940311ec9cc5a601936088ca5d6c0c0", - "blockHeader": { - "parentHash": "0x888b1693c0df1b95ebd7ec98137d66e5360fa03e90ee7d393ce0f68a566b8644", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x006a3e5ce2ce23c176060de75470ce8d434a9678618b26b15340d613f73455c9", - "transactionsTrie": "0xf22e3d9b45e6dc17b5f23178af7b6c798f3479179383dae2c46b34139d3b14d0", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x08", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x1f3f", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x15e97dfc4b864a8d4bbb33f5deca6d4f9efa949424f80cc8e698f80f0ed1001d" - }, - "blocknumber": "8", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x07", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x01", - "r": "0xe78f7e5011540370e32c2d776e925b83fde5fdd2732cfe7211875d62c11835e2", - "s": "0x62e8449e8d29d8febd7ce7522af98e3b9e8c1940311ec9cc5a601936088ca5d6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba015e97dfc4b864a8d4bbb33f5deca6d4f9efa949424f80cc8e698f80f0ed1001da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b82f349e35f174a9f11e6b73b7967cd67a20a512d65059163f360138a155044aa04076bbb228867b9494869328ea23b991f7f2bcc8f8792eaa92d507cdd797ac9ba0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800988016345785d8a000082d2d282232780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401088007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a06c3ed72575f9de73c447f719c389ad98b31476f6be5473b8bab6a116b7d0ff7fa036962bbc9b2d34c7ea06e0358cd007a260658bac66a5b3855d75f180b17ea6ffc0c0", - "blockHeader": { - "parentHash": "0x15e97dfc4b864a8d4bbb33f5deca6d4f9efa949424f80cc8e698f80f0ed1001d", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xb82f349e35f174a9f11e6b73b7967cd67a20a512d65059163f360138a155044a", - "transactionsTrie": "0x4076bbb228867b9494869328ea23b991f7f2bcc8f8792eaa92d507cdd797ac9b", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x09", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x2327", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xbcc95be5eaeb4aae0f3453a7e0b4ddc25a293a0feb6464c2e2d6381f0dc78652" - }, - "blocknumber": "9", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x08", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0x6c3ed72575f9de73c447f719c389ad98b31476f6be5473b8bab6a116b7d0ff7f", - "s": "0x36962bbc9b2d34c7ea06e0358cd007a260658bac66a5b3855d75f180b17ea6ff", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0bcc95be5eaeb4aae0f3453a7e0b4ddc25a293a0feb6464c2e2d6381f0dc78652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ebde02452144ddb74f1d74e657d014c6ab802c4b9a65833aaedee43062bf226ca0f5b62db92a921e85cadf7cbc53af7ee0b4aad69afab61f282377a75638799a25a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800a88016345785d8a000082d2d282270f80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401098007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e8e17448df52de5d034a381052b4f886847004a37ce8dc660081e214a7a16773a058dde277185e93f224caf513675909034f82ad56e7843cdb48b8289bfa121510c0c0", - "blockHeader": { - "parentHash": "0xbcc95be5eaeb4aae0f3453a7e0b4ddc25a293a0feb6464c2e2d6381f0dc78652", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xebde02452144ddb74f1d74e657d014c6ab802c4b9a65833aaedee43062bf226c", - "transactionsTrie": "0xf5b62db92a921e85cadf7cbc53af7ee0b4aad69afab61f282377a75638799a25", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x0a", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x270f", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x24de9a4e60516b2251570d325b5b47566519963ff95f2f067316c0c4b6f15624" - }, - "blocknumber": "10", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x09", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0xe8e17448df52de5d034a381052b4f886847004a37ce8dc660081e214a7a16773", - "s": "0x58dde277185e93f224caf513675909034f82ad56e7843cdb48b8289bfa121510", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba024de9a4e60516b2251570d325b5b47566519963ff95f2f067316c0c4b6f15624a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06a28d8f4fe7d95be18951780d2db5cd898c90a94a791c3b7630bf1c4ccd50d62a093c237418d26e1d4b213eeeefb159df369651bdf6b35502b5f9aac6331e79689a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800b88016345785d8a000082d2d2822af780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010a8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a026a4455edb7339ce937389e359802d049d5d2e63387e78e0794016852b0c975da01fc711a656fd9609bb0d34eadf465ea2b6f475a4e3b060356661c0006b8fb37cc0c0", - "blockHeader": { - "parentHash": "0x24de9a4e60516b2251570d325b5b47566519963ff95f2f067316c0c4b6f15624", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6a28d8f4fe7d95be18951780d2db5cd898c90a94a791c3b7630bf1c4ccd50d62", - "transactionsTrie": "0x93c237418d26e1d4b213eeeefb159df369651bdf6b35502b5f9aac6331e79689", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x0b", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x2af7", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x103c30e18ff6fd5ea5d7f27c0366728e6676042ebafb672bd70b15ab6baa22a9" - }, - "blocknumber": "11", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x0a", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0x26a4455edb7339ce937389e359802d049d5d2e63387e78e0794016852b0c975d", - "s": "0x1fc711a656fd9609bb0d34eadf465ea2b6f475a4e3b060356661c0006b8fb37c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0103c30e18ff6fd5ea5d7f27c0366728e6676042ebafb672bd70b15ab6baa22a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dd4200c807726b664aab38c301a560dc14c684f2845e7608a84b2718edb64409a09e1c293d72e3cce982c85b5d4cf19bb57684d77fb031b81c9c11cfb48112246aa0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800c88016345785d8a000082d2d2822edf80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010b8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a07c230f4fcb84a42f56c548db9d33ff56afb0ca76a26824a8e9f05900695687efa056baf103b1ad765c145f4766d2ec4f4fbb9ba8472530d3d61d93bff9fe1276c2c0c0", - "blockHeader": { - "parentHash": "0x103c30e18ff6fd5ea5d7f27c0366728e6676042ebafb672bd70b15ab6baa22a9", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdd4200c807726b664aab38c301a560dc14c684f2845e7608a84b2718edb64409", - "transactionsTrie": "0x9e1c293d72e3cce982c85b5d4cf19bb57684d77fb031b81c9c11cfb48112246a", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x0c", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x2edf", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x835605e586944384858f8cb3e9bdc4aacf5793aa1db6556d7e31a5595e27c780" - }, - "blocknumber": "12", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x0b", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0x7c230f4fcb84a42f56c548db9d33ff56afb0ca76a26824a8e9f05900695687ef", - "s": "0x56baf103b1ad765c145f4766d2ec4f4fbb9ba8472530d3d61d93bff9fe1276c2", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0835605e586944384858f8cb3e9bdc4aacf5793aa1db6556d7e31a5595e27c780a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098ad79a84326ad0d843d12d5984f3f7afd28a8e64a248dbb9d001d380ee89daaa021ec92f7df1c0523129f3ac00990fd0195321cc166012b8bd3bf2ad28bf47e8da0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800d88016345785d8a000082d2d28232c780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010c8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0d9e30d6d728e16337757fb7bd2c92a006f10b4f965d00827c64d92866141f1aaa077a6960054fe2790f4f56e0a54524a3b31f2aa625f11b7a51feb445617b152f6c0c0", - "blockHeader": { - "parentHash": "0x835605e586944384858f8cb3e9bdc4aacf5793aa1db6556d7e31a5595e27c780", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x98ad79a84326ad0d843d12d5984f3f7afd28a8e64a248dbb9d001d380ee89daa", - "transactionsTrie": "0x21ec92f7df1c0523129f3ac00990fd0195321cc166012b8bd3bf2ad28bf47e8d", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x0d", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x32c7", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x8eae9a67e67b5bf339a510b67ebe7779384a8fc142d8bcb68a198473b792073f" - }, - "blocknumber": "13", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x0c", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0xd9e30d6d728e16337757fb7bd2c92a006f10b4f965d00827c64d92866141f1aa", - "s": "0x77a6960054fe2790f4f56e0a54524a3b31f2aa625f11b7a51feb445617b152f6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba08eae9a67e67b5bf339a510b67ebe7779384a8fc142d8bcb68a198473b792073fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00280874be036aedc79c53a76cfe72c2aecd04bd562dbb085a02c5fee778371a4a02817b5568bf958d029b95991c9ea230356c3b4ef7501833bc384a094a22945fca0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800e88016345785d8a000082d2d28236af80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010d8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0d8f088a3be314e9a0d258dd01907e8497b3f286b737e4186cd498d78a6fd87e9a015822e41cab687291b82acd30642836670e2c834f8568ffb90743865c9372707c0c0", - "blockHeader": { - "parentHash": "0x8eae9a67e67b5bf339a510b67ebe7779384a8fc142d8bcb68a198473b792073f", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0280874be036aedc79c53a76cfe72c2aecd04bd562dbb085a02c5fee778371a4", - "transactionsTrie": "0x2817b5568bf958d029b95991c9ea230356c3b4ef7501833bc384a094a22945fc", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x0e", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x36af", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xcf6b260b1e981e9a3eeae5f372bb11d976376d554903376c967009ce2c1080ac" - }, - "blocknumber": "14", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x0d", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0xd8f088a3be314e9a0d258dd01907e8497b3f286b737e4186cd498d78a6fd87e9", - "s": "0x15822e41cab687291b82acd30642836670e2c834f8568ffb90743865c9372707", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf9034ef9021ba0cf6b260b1e981e9a3eeae5f372bb11d976376d554903376c967009ce2c1080aca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04fbcfe9f5eb28d91ad9bddc7d1e5179536e7139b30e3f07f45c50543f938f526a063e096bf7976295091ba6941579fdd772d97577b562a45c05fe15b7eec5e0320a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800f88016345785d8a000082d2d2823a9780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010e8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0db968386378605ccbc61cf0901cb9a8341077323cd5e69920806349269b529dfa052a7399814a7dc5869cf5699418811b600949b0f158c54faae9fd9a2d7dcb5a3c0c0", - "blockHeader": { - "parentHash": "0xcf6b260b1e981e9a3eeae5f372bb11d976376d554903376c967009ce2c1080ac", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4fbcfe9f5eb28d91ad9bddc7d1e5179536e7139b30e3f07f45c50543f938f526", - "transactionsTrie": "0x63e096bf7976295091ba6941579fdd772d97577b562a45c05fe15b7eec5e0320", - "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x0f", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xd2d2", - "timestamp": "0x3a97", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x454ee2e59507807f0d5424325d2e46251fe356448e27a3c78dd181c166b3cb69" - }, - "blocknumber": "15", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x0e", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x00", - "r": "0xdb968386378605ccbc61cf0901cb9a8341077323cd5e69920806349269b529df", - "s": "0x52a7399814a7dc5869cf5699418811b600949b0f158c54faae9fd9a2d7dcb5a3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf90372f9023fa0454ee2e59507807f0d5424325d2e46251fe356448e27a3c78dd181c166b3cb69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa024a3c563f14a71400b33060c029ad3b57d2878ee1a9913341d751c32449efc24a002b08419f3f987a4c512f0f2b1508e7b6ff2a76309babbe589497db12035332ca021661973d509bbc413db6f28606e103b5569fdb83e38a3264b7de66ee3dd0111b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801088016345785d8a0000830f0fc0823a9880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f90124010f8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0abe11f1309894c99bb80b5a6b6e6a339566c0f772d28d9a4ae9e4687fb74cca5a023fd240d9cb407472302ab835f9f8cfe454389d86128f141c4c90792d9d41eccc0c0", - "blockHeader": { - "parentHash": "0x454ee2e59507807f0d5424325d2e46251fe356448e27a3c78dd181c166b3cb69", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x24a3c563f14a71400b33060c029ad3b57d2878ee1a9913341d751c32449efc24", - "transactionsTrie": "0x02b08419f3f987a4c512f0f2b1508e7b6ff2a76309babbe589497db12035332c", - "receiptTrie": "0x21661973d509bbc413db6f28606e103b5569fdb83e38a3264b7de66ee3dd0111", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x10", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x0f0fc0", - "timestamp": "0x3a98", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x66721893f01c4d9790450ec7c6309650de0f1344d02139865f9824581f9be768" - }, - "blocknumber": "16", - "transactions": [ - { - "type": "0x02", - "chainId": "0x01", - "nonce": "0x0f", - "maxPriorityFeePerGas": "0x00", - "maxFeePerGas": "0x07", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "accessList": [], - "v": "0x01", - "r": "0xabe11f1309894c99bb80b5a6b6e6a339566c0f772d28d9a4ae9e4687fb74cca5", - "s": "0x23fd240d9cb407472302ab835f9f8cfe454389d86128f141c4c90792d9d41ecc", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] } ], - "lastblockhash": "0x66721893f01c4d9790450ec7c6309650de0f1344d02139865f9824581f9be768", + "lastblockhash": "0x1f2828c11953348ce1faf6994ddaf761ed694e645032230c0069f28979aee0d5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -760,43 +98,27 @@ "postState": { "0x000000000000000000000000000000000000000a": { "nonce": "0x00", - "balance": "0x0f", + "balance": "0x01", "code": "0x", "storage": {} }, "0x0000000000000000000000000000000000000100": { "nonce": "0x00", - "balance": "0xfffffffffffffffff1", + "balance": "0xffffffffffffffffff", "code": "0x60006000600060006001600a5af14355", "storage": { - "0x01": "0x01", - "0x02": "0x01", - "0x03": "0x01", - "0x04": "0x01", - "0x05": "0x01", - "0x06": "0x01", - "0x07": "0x01", - "0x08": "0x01", - "0x09": "0x01", - "0x0a": "0x01", - "0x0b": "0x01", - "0x0c": "0x01", - "0x0d": "0x01", - "0x0e": "0x01", - "0x0f": "0x01" + "0x01": "0x01" } }, "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x1a99": "0x3a98" - } + "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0xffffffffffff3d6e06", + "nonce": "0x01", + "balance": "0xfffffffffffff790aa", "code": "0x", "storage": {} } diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_calls.json b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_calls.json index 27cc151ca05..521d35b8b31 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_calls.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_calls.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun--call_type=CALL-correct": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_CALL-correct]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bff95dd737627225c19a4001d9e0ac170f07cfcf671baa06eafbdc170412e94aa0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa076ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830322400c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07b65609f7d48c381efddf25cd9fc751025a295682418fa2b40442b9f6872cde1a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa076ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830322408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbff95dd737627225c19a4001d9e0ac170f07cfcf671baa06eafbdc170412e94a", + "stateRoot": "0x7b65609f7d48c381efddf25cd9fc751025a295682418fa2b40442b9f6872cde1", "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", "receiptTrie": "0x76ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032240", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xab78911b9c0c745aee32a8435f8262c17d36a5a861128fc602afd6363b0d241e" + "hash": "0x100c8407eeee8ecb35aae38c875716bf356612b4f3805e2285feaff290812999" }, "blocknumber": "1", "transactions": [ @@ -79,7 +80,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xab78911b9c0c745aee32a8435f8262c17d36a5a861128fc602afd6363b0d241e", + "lastblockhash": "0x100c8407eeee8ecb35aae38c875716bf356612b4f3805e2285feaff290812999", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -119,7 +120,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -131,9 +132,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun--call_type=CALL-incorrect": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_CALL-incorrect]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -164,12 +166,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ee3e071eae9a9a6e76f03d1134026a6a8c2f4441b789f4bf6f52aa723b7107a8a0573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518ca044af84d1ff3674375774898fc55642e63bb3e0b92f37c025c41bfaf79c76684db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286ce0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0550c2b6026a89b1de3877c43369bd45b7ec05f3aba03e87351480c4c81bc13e2a03dbefc213f0ea1a6a249a84f8ac61e11d82a997d65796c2469796b8421608a21c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09999fcc8937b86f308d505ffa4331bbec3c8072f485df97fd76726b15acfb37da0573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518ca044af84d1ff3674375774898fc55642e63bb3e0b92f37c025c41bfaf79c76684db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286ce8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0550c2b6026a89b1de3877c43369bd45b7ec05f3aba03e87351480c4c81bc13e2a03dbefc213f0ea1a6a249a84f8ac61e11d82a997d65796c2469796b8421608a21c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xee3e071eae9a9a6e76f03d1134026a6a8c2f4441b789f4bf6f52aa723b7107a8", + "stateRoot": "0x9999fcc8937b86f308d505ffa4331bbec3c8072f485df97fd76726b15acfb37d", "transactionsTrie": "0x573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518c", "receiptTrie": "0x44af84d1ff3674375774898fc55642e63bb3e0b92f37c025c41bfaf79c76684d", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -177,8 +179,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286ce", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -186,7 +188,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4c536196751ac2587c7483cb09cb231486d17f36625124be0149836bdda54a42" + "hash": "0xfbf8ded0cc7f21754a464c7af025b7f548253ff638759b4c512590d7d12dcead" }, "blocknumber": "1", "transactions": [ @@ -211,7 +213,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4c536196751ac2587c7483cb09cb231486d17f36625124be0149836bdda54a42", + "lastblockhash": "0xfbf8ded0cc7f21754a464c7af025b7f548253ff638759b4c512590d7d12dcead", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -249,7 +251,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -261,9 +263,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun--call_type=CALL-insufficient_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_CALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -294,12 +297,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da029553f63a28c7c1b25db173a6a3adaf3bd9710eaf56d58b1d4297c3d117f2b30a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a4f1565c3e624bb535267268062ff21ec91c0957dd64359290508bdf87043720a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa040d360edbbe2a3c2c8205056216b7fbe56c236a16ca9f1413fa71ee432186b64b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286c10c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf90372f9023fa029553f63a28c7c1b25db173a6a3adaf3bd9710eaf56d58b1d4297c3d117f2b30a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa065b13a708b5a4b063b13f14bbe47db58da5db67889375ee7049311849c50ca0fa0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa040d360edbbe2a3c2c8205056216b7fbe56c236a16ca9f1413fa71ee432186b64b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286c18203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0x29553f63a28c7c1b25db173a6a3adaf3bd9710eaf56d58b1d4297c3d117f2b30", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa4f1565c3e624bb535267268062ff21ec91c0957dd64359290508bdf87043720", + "stateRoot": "0x65b13a708b5a4b063b13f14bbe47db58da5db67889375ee7049311849c50ca0f", "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", "receiptTrie": "0x40d360edbbe2a3c2c8205056216b7fbe56c236a16ca9f1413fa71ee432186b64", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -307,8 +310,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286c1", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -316,7 +319,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x96fc7ff835d22363401954e67ea956bb7d8b711e48eb2799cfb24cc302e3d605" + "hash": "0x9552fa0b8465db914c159a03f3a27d0cd374c78773b81744e8f005f0bbeef3de" }, "blocknumber": "1", "transactions": [ @@ -341,7 +344,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x96fc7ff835d22363401954e67ea956bb7d8b711e48eb2799cfb24cc302e3d605", + "lastblockhash": "0x9552fa0b8465db914c159a03f3a27d0cd374c78773b81744e8f005f0bbeef3de", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -379,7 +382,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -391,9 +394,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun--call_type=DELEGATECALL-correct": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_DELEGATECALL-correct]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -424,12 +428,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0aaa04b0fb3b625c09c8d8c3277914dc3a0f3daf9aef927cb9269f2e1820873fca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0615c85e1e93875575c3e8589d009f5ec8f87aa9b860d144050716f1c20c69fb7a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa00e8b3e1c7350d242d9d99f16c3b4ce2de7dce80217e64103109362e71d7cb543b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303223d0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf90372f9023fa0aaa04b0fb3b625c09c8d8c3277914dc3a0f3daf9aef927cb9269f2e1820873fca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03b24a2074f042eb111a73ff200596267340beded724c7eca9573cbb7b4ca148ba0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa00e8b3e1c7350d242d9d99f16c3b4ce2de7dce80217e64103109362e71d7cb543b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303223d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0xaaa04b0fb3b625c09c8d8c3277914dc3a0f3daf9aef927cb9269f2e1820873fc", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x615c85e1e93875575c3e8589d009f5ec8f87aa9b860d144050716f1c20c69fb7", + "stateRoot": "0x3b24a2074f042eb111a73ff200596267340beded724c7eca9573cbb7b4ca148b", "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", "receiptTrie": "0x0e8b3e1c7350d242d9d99f16c3b4ce2de7dce80217e64103109362e71d7cb543", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -437,8 +441,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03223d", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -446,7 +450,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb421e4ee1b05048179dc1fa43e53cc99ff02a41e40bbc8dd3737cc73cfe254f2" + "hash": "0x8a930dc5f09829b844105cbdcb96c2be6caa5a8ee0f162caaabed630d968f898" }, "blocknumber": "1", "transactions": [ @@ -471,7 +475,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb421e4ee1b05048179dc1fa43e53cc99ff02a41e40bbc8dd3737cc73cfe254f2", + "lastblockhash": "0x8a930dc5f09829b844105cbdcb96c2be6caa5a8ee0f162caaabed630d968f898", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -511,7 +515,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -523,9 +527,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun--call_type=DELEGATECALL-incorrect": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_DELEGATECALL-incorrect]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -556,12 +561,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0aaa04b0fb3b625c09c8d8c3277914dc3a0f3daf9aef927cb9269f2e1820873fca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ad2e8b8da62add12e276ef9b2d8a6ed4ba42fdd859a996011775499f70a4f2c8a0573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518ca00cbfc07044005f86e7a6c3cede4b16989d5a2718c50b2cd341e8cb63b6baaf1fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286cb0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0550c2b6026a89b1de3877c43369bd45b7ec05f3aba03e87351480c4c81bc13e2a03dbefc213f0ea1a6a249a84f8ac61e11d82a997d65796c2469796b8421608a21c0c0", + "rlp": "0xf90372f9023fa0aaa04b0fb3b625c09c8d8c3277914dc3a0f3daf9aef927cb9269f2e1820873fca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ab4e35da8debe51f248ff1ba449733558f4aa3d2864dc290bbf4561d9401b9cfa0573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518ca00cbfc07044005f86e7a6c3cede4b16989d5a2718c50b2cd341e8cb63b6baaf1fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286cb8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0550c2b6026a89b1de3877c43369bd45b7ec05f3aba03e87351480c4c81bc13e2a03dbefc213f0ea1a6a249a84f8ac61e11d82a997d65796c2469796b8421608a21c0c0", "blockHeader": { "parentHash": "0xaaa04b0fb3b625c09c8d8c3277914dc3a0f3daf9aef927cb9269f2e1820873fc", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xad2e8b8da62add12e276ef9b2d8a6ed4ba42fdd859a996011775499f70a4f2c8", + "stateRoot": "0xab4e35da8debe51f248ff1ba449733558f4aa3d2864dc290bbf4561d9401b9cf", "transactionsTrie": "0x573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518c", "receiptTrie": "0x0cbfc07044005f86e7a6c3cede4b16989d5a2718c50b2cd341e8cb63b6baaf1f", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -569,8 +574,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286cb", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -578,7 +583,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd06e86f60419433ea2e3497043a659a1c8f085eaec5a59e9122888e4531786f4" + "hash": "0x9a3b05fecaf7da1c28662bd40be0c6929c3dc873efa59c21b429ba56db8b7b18" }, "blocknumber": "1", "transactions": [ @@ -603,7 +608,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd06e86f60419433ea2e3497043a659a1c8f085eaec5a59e9122888e4531786f4", + "lastblockhash": "0x9a3b05fecaf7da1c28662bd40be0c6929c3dc873efa59c21b429ba56db8b7b18", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -641,7 +646,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -653,9 +658,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun--call_type=DELEGATECALL-insufficient_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_DELEGATECALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -686,12 +692,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da01b5b19d0373924ad50eade3aae5d45a87a2289b4cad4148bfa2481faf87ec6b5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0827065c589c4b2e589817f7fdd85b874d423d0f7540fe2f3dc6fbabef381c9d3a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa0da784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286be0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf90372f9023fa01b5b19d0373924ad50eade3aae5d45a87a2289b4cad4148bfa2481faf87ec6b5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0375201c1cc239f7c1571bd2a9358a227f8ea124e5432ddd46c8911bdea7dcf8fa0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa0da784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286be8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0x1b5b19d0373924ad50eade3aae5d45a87a2289b4cad4148bfa2481faf87ec6b5", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x827065c589c4b2e589817f7fdd85b874d423d0f7540fe2f3dc6fbabef381c9d3", + "stateRoot": "0x375201c1cc239f7c1571bd2a9358a227f8ea124e5432ddd46c8911bdea7dcf8f", "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", "receiptTrie": "0xda784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -699,8 +705,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286be", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -708,7 +714,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2948ae8e9f5c0d7bc02f079ed7080ec814bb63e5d5a111f0e3886b3ed58a22e2" + "hash": "0x6aefd84d153e7b1ab96ba390ac0e36990a7a5840bf47892628a7e991d0b2122f" }, "blocknumber": "1", "transactions": [ @@ -733,7 +739,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2948ae8e9f5c0d7bc02f079ed7080ec814bb63e5d5a111f0e3886b3ed58a22e2", + "lastblockhash": "0x6aefd84d153e7b1ab96ba390ac0e36990a7a5840bf47892628a7e991d0b2122f", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -771,7 +777,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -783,9 +789,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun--call_type=CALLCODE-correct": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_CALLCODE-correct]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -816,12 +823,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0c175b89b3c3df7bf3db711357260730e2a54c322d7a6b9747639ffc3b417faaca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03ac49ceafff90dadee126610ff9b32dd952decd2c781b15945e76a1d7a8d350aa0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa076ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830322400c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf90372f9023fa0c175b89b3c3df7bf3db711357260730e2a54c322d7a6b9747639ffc3b417faaca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa079ca2fdbbdd3590f610b2f5a76448677c613e8f1adcc616d3893907046fae4dea0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa076ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830322408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0xc175b89b3c3df7bf3db711357260730e2a54c322d7a6b9747639ffc3b417faac", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x3ac49ceafff90dadee126610ff9b32dd952decd2c781b15945e76a1d7a8d350a", + "stateRoot": "0x79ca2fdbbdd3590f610b2f5a76448677c613e8f1adcc616d3893907046fae4de", "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", "receiptTrie": "0x76ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -829,8 +836,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032240", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -838,7 +845,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xeb4d43f09ab601d2bacabe85c1ffbd4f305c8732b69a8c586e446373c0baecbb" + "hash": "0x349fc08c4c13b44197a5a72100e060865b8a14aaa0247491fcc2f6b6d29de83d" }, "blocknumber": "1", "transactions": [ @@ -863,7 +870,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xeb4d43f09ab601d2bacabe85c1ffbd4f305c8732b69a8c586e446373c0baecbb", + "lastblockhash": "0x349fc08c4c13b44197a5a72100e060865b8a14aaa0247491fcc2f6b6d29de83d", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -903,7 +910,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -915,9 +922,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun--call_type=CALLCODE-incorrect": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_CALLCODE-incorrect]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -948,12 +956,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0c175b89b3c3df7bf3db711357260730e2a54c322d7a6b9747639ffc3b417faaca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08d7b57cd0ccffeb8e1f596fe700d677fa1842fcf8482ddbdfb0b3dcf5577489ca0573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518ca044af84d1ff3674375774898fc55642e63bb3e0b92f37c025c41bfaf79c76684db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286ce0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0550c2b6026a89b1de3877c43369bd45b7ec05f3aba03e87351480c4c81bc13e2a03dbefc213f0ea1a6a249a84f8ac61e11d82a997d65796c2469796b8421608a21c0c0", + "rlp": "0xf90372f9023fa0c175b89b3c3df7bf3db711357260730e2a54c322d7a6b9747639ffc3b417faaca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07fa6f7fc32e5b5631e933f76f2036977d73fd27382ea01682f845e81197623dea0573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518ca044af84d1ff3674375774898fc55642e63bb3e0b92f37c025c41bfaf79c76684db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286ce8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0550c2b6026a89b1de3877c43369bd45b7ec05f3aba03e87351480c4c81bc13e2a03dbefc213f0ea1a6a249a84f8ac61e11d82a997d65796c2469796b8421608a21c0c0", "blockHeader": { "parentHash": "0xc175b89b3c3df7bf3db711357260730e2a54c322d7a6b9747639ffc3b417faac", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8d7b57cd0ccffeb8e1f596fe700d677fa1842fcf8482ddbdfb0b3dcf5577489c", + "stateRoot": "0x7fa6f7fc32e5b5631e933f76f2036977d73fd27382ea01682f845e81197623de", "transactionsTrie": "0x573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518c", "receiptTrie": "0x44af84d1ff3674375774898fc55642e63bb3e0b92f37c025c41bfaf79c76684d", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -961,8 +969,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286ce", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -970,7 +978,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7e4dffae47681e5ce4bd6ea8c8890ba399ad80584ffc65f6e2bfc6fa821714dc" + "hash": "0xa40a86e346dbc131262aa2388f30658091a05771a019b0a4201fd538b2b1ee00" }, "blocknumber": "1", "transactions": [ @@ -995,7 +1003,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x7e4dffae47681e5ce4bd6ea8c8890ba399ad80584ffc65f6e2bfc6fa821714dc", + "lastblockhash": "0xa40a86e346dbc131262aa2388f30658091a05771a019b0a4201fd538b2b1ee00", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1033,7 +1041,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1045,9 +1053,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun--call_type=CALLCODE-insufficient_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_CALLCODE-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1078,12 +1087,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0ef3baef8439114763257dd21ec3998730bbc27f7b6d18111c5ff5ca2bbf2c4c2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0caca86f65e7ce02ed5243f11b418bde4feddc03226deeaf097933fcee2bf948da0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa040d360edbbe2a3c2c8205056216b7fbe56c236a16ca9f1413fa71ee432186b64b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286c10c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf90372f9023fa0ef3baef8439114763257dd21ec3998730bbc27f7b6d18111c5ff5ca2bbf2c4c2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c8e809317efc57d9cc3b66f717ea383f725426d7a40b687c008fb6e982fd7153a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa040d360edbbe2a3c2c8205056216b7fbe56c236a16ca9f1413fa71ee432186b64b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286c18203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0xef3baef8439114763257dd21ec3998730bbc27f7b6d18111c5ff5ca2bbf2c4c2", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcaca86f65e7ce02ed5243f11b418bde4feddc03226deeaf097933fcee2bf948d", + "stateRoot": "0xc8e809317efc57d9cc3b66f717ea383f725426d7a40b687c008fb6e982fd7153", "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", "receiptTrie": "0x40d360edbbe2a3c2c8205056216b7fbe56c236a16ca9f1413fa71ee432186b64", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1091,8 +1100,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286c1", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1100,7 +1109,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf2c6913377a3cb8167ed06300b1bb275524c0623eb89e508d6cda005eaa40dfa" + "hash": "0xd6a7b58a57271f3bbe4187edd4ea068975afbc547b0156113420a3668a2c73d0" }, "blocknumber": "1", "transactions": [ @@ -1125,7 +1134,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf2c6913377a3cb8167ed06300b1bb275524c0623eb89e508d6cda005eaa40dfa", + "lastblockhash": "0xd6a7b58a57271f3bbe4187edd4ea068975afbc547b0156113420a3668a2c73d0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1163,7 +1172,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1175,9 +1184,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun--call_type=STATICCALL-correct": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_STATICCALL-correct]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1208,12 +1218,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a2272f362f519fa17f0ec74bef8328c79fbab5dfe3e14bf0eb82cb7b3df6169aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e9826e755ac998c743617590624897aa900be3d871cf7961c2f0d35ff1db3c15a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa00e8b3e1c7350d242d9d99f16c3b4ce2de7dce80217e64103109362e71d7cb543b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303223d0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf90372f9023fa0a2272f362f519fa17f0ec74bef8328c79fbab5dfe3e14bf0eb82cb7b3df6169aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa011cbb05628d837707a3676731c1f73c31cfba7a05d651a9e6a2f72572178452fa0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa00e8b3e1c7350d242d9d99f16c3b4ce2de7dce80217e64103109362e71d7cb543b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303223d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0xa2272f362f519fa17f0ec74bef8328c79fbab5dfe3e14bf0eb82cb7b3df6169a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe9826e755ac998c743617590624897aa900be3d871cf7961c2f0d35ff1db3c15", + "stateRoot": "0x11cbb05628d837707a3676731c1f73c31cfba7a05d651a9e6a2f72572178452f", "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", "receiptTrie": "0x0e8b3e1c7350d242d9d99f16c3b4ce2de7dce80217e64103109362e71d7cb543", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1221,8 +1231,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03223d", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1230,7 +1240,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x793242bf54cddcb3b7aee55bd23494652c0cd0fd88d8c1dbf9e8d5effcae28bc" + "hash": "0x5bc7acc91b3260f503913b25afb2e232137a36d7900a70740c666f2829250b9f" }, "blocknumber": "1", "transactions": [ @@ -1255,7 +1265,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x793242bf54cddcb3b7aee55bd23494652c0cd0fd88d8c1dbf9e8d5effcae28bc", + "lastblockhash": "0x5bc7acc91b3260f503913b25afb2e232137a36d7900a70740c666f2829250b9f", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1295,7 +1305,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1307,9 +1317,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun--call_type=STATICCALL-incorrect": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_STATICCALL-incorrect]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1340,12 +1351,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a2272f362f519fa17f0ec74bef8328c79fbab5dfe3e14bf0eb82cb7b3df6169aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e4d59c70a5f8324778ec0da561a6fe82cbcfa3e0e1cac054b4c7dcd9bae6ebd7a0573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518ca00cbfc07044005f86e7a6c3cede4b16989d5a2718c50b2cd341e8cb63b6baaf1fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286cb0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0550c2b6026a89b1de3877c43369bd45b7ec05f3aba03e87351480c4c81bc13e2a03dbefc213f0ea1a6a249a84f8ac61e11d82a997d65796c2469796b8421608a21c0c0", + "rlp": "0xf90372f9023fa0a2272f362f519fa17f0ec74bef8328c79fbab5dfe3e14bf0eb82cb7b3df6169aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0291a712ca0f382c75969cb4a8012cb35d62074107cfdb20bae42cccabe94a9b8a0573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518ca00cbfc07044005f86e7a6c3cede4b16989d5a2718c50b2cd341e8cb63b6baaf1fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286cb8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0550c2b6026a89b1de3877c43369bd45b7ec05f3aba03e87351480c4c81bc13e2a03dbefc213f0ea1a6a249a84f8ac61e11d82a997d65796c2469796b8421608a21c0c0", "blockHeader": { "parentHash": "0xa2272f362f519fa17f0ec74bef8328c79fbab5dfe3e14bf0eb82cb7b3df6169a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe4d59c70a5f8324778ec0da561a6fe82cbcfa3e0e1cac054b4c7dcd9bae6ebd7", + "stateRoot": "0x291a712ca0f382c75969cb4a8012cb35d62074107cfdb20bae42cccabe94a9b8", "transactionsTrie": "0x573f85818a948041dbef689680532005a24c905088b72afd837509ecaa38518c", "receiptTrie": "0x0cbfc07044005f86e7a6c3cede4b16989d5a2718c50b2cd341e8cb63b6baaf1f", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1353,8 +1364,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286cb", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1362,7 +1373,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x014a892ef01d845949a6515e7e0db86475cc52a4788df43f18ec5123e6cdb443" + "hash": "0xfe75183130cd17eee6740aa136762af64506c4e2e7a55ae30ce12826625de33e" }, "blocknumber": "1", "transactions": [ @@ -1387,7 +1398,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x014a892ef01d845949a6515e7e0db86475cc52a4788df43f18ec5123e6cdb443", + "lastblockhash": "0xfe75183130cd17eee6740aa136762af64506c4e2e7a55ae30ce12826625de33e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1425,7 +1436,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1437,9 +1448,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun--call_type=STATICCALL-insufficient_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_calls[fork_Cancun-blockchain_test--call_type_STATICCALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1470,12 +1482,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da00f5a97d0a8896928629e0ff009944dd2916ad45b26c6509527a02a35ba937e1ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa063ec441a319ed6f7a1d2e83d1d08bbde6abbe11bb40271d9a9c24e3d74fbe530a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa0da784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286be0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "rlp": "0xf90372f9023fa00f5a97d0a8896928629e0ff009944dd2916ad45b26c6509527a02a35ba937e1ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ffee3cd80615317f98f9ca84321f83a9b75bc2fcb8023853681b9d398464952ba0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa0da784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830286be8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", "blockHeader": { "parentHash": "0x0f5a97d0a8896928629e0ff009944dd2916ad45b26c6509527a02a35ba937e1b", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x63ec441a319ed6f7a1d2e83d1d08bbde6abbe11bb40271d9a9c24e3d74fbe530", + "stateRoot": "0xffee3cd80615317f98f9ca84321f83a9b75bc2fcb8023853681b9d398464952b", "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", "receiptTrie": "0xda784537fe8569e163797ffe73aaf6b104b8f6b6a78b81c275603085cc5e0800", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1483,8 +1495,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0286be", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1492,7 +1504,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbae1410e9e7d5304ededcd77aa8c1d2a9969fd753eae0b36727860bcb070d17e" + "hash": "0xbf809a37ed76ca11cbc478baf19d905e59a943b647a800c6a2c473f12dad16e3" }, "blocknumber": "1", "transactions": [ @@ -1517,7 +1529,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xbae1410e9e7d5304ededcd77aa8c1d2a9969fd753eae0b36727860bcb070d17e", + "lastblockhash": "0xbf809a37ed76ca11cbc478baf19d905e59a943b647a800c6a2c473f12dad16e3", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1555,7 +1567,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_during_fork.json b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_during_fork.json new file mode 100644 index 00000000000..e2958dc9a6b --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_during_fork.json @@ -0,0 +1,807 @@ +{ + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test-correct_proof]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", + "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" + }, + "network": "ShanghaiToCancunAtTime15k", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a01837a6b16203f5d15c216ed0c68bc86de74c008f6e90a72663173845b4a5da6ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x1837a6b16203f5d15c216ed0c68bc86de74c008f6e90a72663173845b4a5da6e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x4882bdfcbf75f9375f28ad612b37b3a7db5af5dd4021bc282c43b13fbb82724c" + }, + "blocks": [ + { + "rlp": "0xf9034ff9021ca04882bdfcbf75f9375f28ad612b37b3a7db5af5dd4021bc282c43b13fbb82724ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d481fd3da9b1b53fc81962a288bc733e758f2aa6d978193af039b52f24e48f06a0db6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172adaa07c53f1e5660a78e8903fa3b72eef59be0af3f82a34437b7578b44130829a8558b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301347a8203e780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a08d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1a04d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaac0c0", + "blockHeader": { + "parentHash": "0x4882bdfcbf75f9375f28ad612b37b3a7db5af5dd4021bc282c43b13fbb82724c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd481fd3da9b1b53fc81962a288bc733e758f2aa6d978193af039b52f24e48f06", + "transactionsTrie": "0xdb6243ba190d98fc32ffe9a229951a0fe2aea68c54140ddca27ac55330172ada", + "receiptTrie": "0x7c53f1e5660a78e8903fa3b72eef59be0af3f82a34437b7578b44130829a8558", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x01347a", + "timestamp": "0x03e7", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xeb2acb30b2e9381379344f1669d301f969cd2ec51d7cec4957c52deac8d3561b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x00", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0x8d077aadf82e765319b8d2b96c508b41843c34cbb3b571712f46149c339362e1", + "s": "0x4d25bce6b340faf6fe4e55cc935c0374f33faa248a998ca9e9d0aa607ca0fcaa", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0eb2acb30b2e9381379344f1669d301f969cd2ec51d7cec4957c52deac8d3561ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa045d79a96fa78929b103735d8486619d643b4d12de67804c95de4b3e7476fb5a7a0fd0fbb9204288fec12d873636902c2c9b555c4551c6e088e7524edb73c82f99aa0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000082d2d28207cf80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401018007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a02255be5c5eccb51527c6a213357d6f7b480ec4e15d553b8eb1524a6efa2519b3a01cb7c8285d672eb298fb143fa53d10b209c1548e1b322c3b64d427c445c67910c0c0", + "blockHeader": { + "parentHash": "0xeb2acb30b2e9381379344f1669d301f969cd2ec51d7cec4957c52deac8d3561b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x45d79a96fa78929b103735d8486619d643b4d12de67804c95de4b3e7476fb5a7", + "transactionsTrie": "0xfd0fbb9204288fec12d873636902c2c9b555c4551c6e088e7524edb73c82f99a", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x02", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x07cf", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x22f4021b58b8bcd4e626430031c9c1e15401f6503e27ed723652c6c1f992f3a6" + }, + "blocknumber": "2", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x01", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x01", + "r": "0x2255be5c5eccb51527c6a213357d6f7b480ec4e15d553b8eb1524a6efa2519b3", + "s": "0x1cb7c8285d672eb298fb143fa53d10b209c1548e1b322c3b64d427c445c67910", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba022f4021b58b8bcd4e626430031c9c1e15401f6503e27ed723652c6c1f992f3a6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c825a5c692503c5474bf8e324e9059d756cb4472b82af162a79668c6128930f6a04267884a87fe9fb3d0e5e33ae6bdaf8aa5f7a375e2eb68e5f46e972312c2bd35a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800388016345785d8a000082d2d2820bb780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401028007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a01d153928a4a2442d9dbd65dd20faf19f2ea2abe14a9761c0354fcc4c1b43d086a01a10a731c05a5cc200fcce5e87bd2645d17f18c1c7aca1ca8df91764b7a5d738c0c0", + "blockHeader": { + "parentHash": "0x22f4021b58b8bcd4e626430031c9c1e15401f6503e27ed723652c6c1f992f3a6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc825a5c692503c5474bf8e324e9059d756cb4472b82af162a79668c6128930f6", + "transactionsTrie": "0x4267884a87fe9fb3d0e5e33ae6bdaf8aa5f7a375e2eb68e5f46e972312c2bd35", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x03", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x0bb7", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xb1773c98ec05de2960287d42da74c5b43cecb27c99fa094fdc9676348c6e0b44" + }, + "blocknumber": "3", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x02", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0x1d153928a4a2442d9dbd65dd20faf19f2ea2abe14a9761c0354fcc4c1b43d086", + "s": "0x1a10a731c05a5cc200fcce5e87bd2645d17f18c1c7aca1ca8df91764b7a5d738", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0b1773c98ec05de2960287d42da74c5b43cecb27c99fa094fdc9676348c6e0b44a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0421cf065b70678cdbb3e2f3688d58ea4ba8e53d89383b583ba82429b97083fdea0eda33d872a3f034a552642375d2d9d0f313ebeeb6be133b9523d55382b63cdd0a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800488016345785d8a000082d2d2820f9f80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401038007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a01856b0e16524c337f33f4fbd45c95a5a56c8b57eecf24bb43798cee27e3abbb1a001502631c289f3ca430af87a715f4b7713af303b58f0e7ec553014dbd7d82526c0c0", + "blockHeader": { + "parentHash": "0xb1773c98ec05de2960287d42da74c5b43cecb27c99fa094fdc9676348c6e0b44", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x421cf065b70678cdbb3e2f3688d58ea4ba8e53d89383b583ba82429b97083fde", + "transactionsTrie": "0xeda33d872a3f034a552642375d2d9d0f313ebeeb6be133b9523d55382b63cdd0", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x04", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x0f9f", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xb2c1edcaa260794f122b29a259f8d8e3e74e47e807445b1ce4f248c7276b71da" + }, + "blocknumber": "4", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x03", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0x1856b0e16524c337f33f4fbd45c95a5a56c8b57eecf24bb43798cee27e3abbb1", + "s": "0x01502631c289f3ca430af87a715f4b7713af303b58f0e7ec553014dbd7d82526", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0b2c1edcaa260794f122b29a259f8d8e3e74e47e807445b1ce4f248c7276b71daa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa076e8498f03e82a9b4c80a1a5d22ddbb33d044f490698d07b25f044accd45a301a0bba35aa3266d48da63bfa5b872e095590d951e8f259d77478f01af4d5b41965ca0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800588016345785d8a000082d2d282138780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401048007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a01e9e2af346507603b29dfca2cb4fad1ba090386e3fb41b3826680427af7efa63a056357586c8ca4087590f9b30bb63ff5a9f0d6e636e601b58189f317c8b0a923fc0c0", + "blockHeader": { + "parentHash": "0xb2c1edcaa260794f122b29a259f8d8e3e74e47e807445b1ce4f248c7276b71da", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x76e8498f03e82a9b4c80a1a5d22ddbb33d044f490698d07b25f044accd45a301", + "transactionsTrie": "0xbba35aa3266d48da63bfa5b872e095590d951e8f259d77478f01af4d5b41965c", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x05", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x1387", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xead49c85a10669306a52ffd6d2f4a2fc8f238db1acc3b4a9059f6cd294ec876d" + }, + "blocknumber": "5", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x04", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x01", + "r": "0x1e9e2af346507603b29dfca2cb4fad1ba090386e3fb41b3826680427af7efa63", + "s": "0x56357586c8ca4087590f9b30bb63ff5a9f0d6e636e601b58189f317c8b0a923f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0ead49c85a10669306a52ffd6d2f4a2fc8f238db1acc3b4a9059f6cd294ec876da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c73061995b4fe48995a84f1fc68abef9db3fcc3fb7f981311491698e527dadea0966e8cbc4b535b5081a6ce06e097d4e1d9439ef052e4d15f17318b4b0fa2a895a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800688016345785d8a000082d2d282176f80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401058007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05166cdab7aa11b8c321fc36e9ebd875d68e541560ec1098cb306716848ba9cbda04453c1b3ad9430dd08a5e19f834968abeb788aefb247bbe222de954e7c85b38bc0c0", + "blockHeader": { + "parentHash": "0xead49c85a10669306a52ffd6d2f4a2fc8f238db1acc3b4a9059f6cd294ec876d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c73061995b4fe48995a84f1fc68abef9db3fcc3fb7f981311491698e527dade", + "transactionsTrie": "0x966e8cbc4b535b5081a6ce06e097d4e1d9439ef052e4d15f17318b4b0fa2a895", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x06", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x176f", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x84cccedcb35f9397979306e5e1cfb2ca0257bbc0fbfb8dc2ff8fb54d84689b1a" + }, + "blocknumber": "6", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x05", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x01", + "r": "0x5166cdab7aa11b8c321fc36e9ebd875d68e541560ec1098cb306716848ba9cbd", + "s": "0x4453c1b3ad9430dd08a5e19f834968abeb788aefb247bbe222de954e7c85b38b", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba084cccedcb35f9397979306e5e1cfb2ca0257bbc0fbfb8dc2ff8fb54d84689b1aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e299fc09b9a2b59ccc9a9cadf2a5eeaa5cf6e07fff27e3efb33eebe2da51f5cea03388bd3c6439a1991e5c445af4324830522c6002665d1e52dfc117e58b4a868fa0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800788016345785d8a000082d2d2821b5780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401068007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0e92810ef87b2d922beab50dfb8156f7fe2e51705378472753609d16495c38a72a01e0b234e746f791694d0bc59c21dec2ca2fc8d28720e265e1bef839b52e64fd1c0c0", + "blockHeader": { + "parentHash": "0x84cccedcb35f9397979306e5e1cfb2ca0257bbc0fbfb8dc2ff8fb54d84689b1a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe299fc09b9a2b59ccc9a9cadf2a5eeaa5cf6e07fff27e3efb33eebe2da51f5ce", + "transactionsTrie": "0x3388bd3c6439a1991e5c445af4324830522c6002665d1e52dfc117e58b4a868f", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x07", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x1b57", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x888b1693c0df1b95ebd7ec98137d66e5360fa03e90ee7d393ce0f68a566b8644" + }, + "blocknumber": "7", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x06", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x01", + "r": "0xe92810ef87b2d922beab50dfb8156f7fe2e51705378472753609d16495c38a72", + "s": "0x1e0b234e746f791694d0bc59c21dec2ca2fc8d28720e265e1bef839b52e64fd1", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0888b1693c0df1b95ebd7ec98137d66e5360fa03e90ee7d393ce0f68a566b8644a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0006a3e5ce2ce23c176060de75470ce8d434a9678618b26b15340d613f73455c9a0f22e3d9b45e6dc17b5f23178af7b6c798f3479179383dae2c46b34139d3b14d0a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800888016345785d8a000082d2d2821f3f80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401078007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0e78f7e5011540370e32c2d776e925b83fde5fdd2732cfe7211875d62c11835e2a062e8449e8d29d8febd7ce7522af98e3b9e8c1940311ec9cc5a601936088ca5d6c0c0", + "blockHeader": { + "parentHash": "0x888b1693c0df1b95ebd7ec98137d66e5360fa03e90ee7d393ce0f68a566b8644", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x006a3e5ce2ce23c176060de75470ce8d434a9678618b26b15340d613f73455c9", + "transactionsTrie": "0xf22e3d9b45e6dc17b5f23178af7b6c798f3479179383dae2c46b34139d3b14d0", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x08", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x1f3f", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x15e97dfc4b864a8d4bbb33f5deca6d4f9efa949424f80cc8e698f80f0ed1001d" + }, + "blocknumber": "8", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x07", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x01", + "r": "0xe78f7e5011540370e32c2d776e925b83fde5fdd2732cfe7211875d62c11835e2", + "s": "0x62e8449e8d29d8febd7ce7522af98e3b9e8c1940311ec9cc5a601936088ca5d6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba015e97dfc4b864a8d4bbb33f5deca6d4f9efa949424f80cc8e698f80f0ed1001da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b82f349e35f174a9f11e6b73b7967cd67a20a512d65059163f360138a155044aa04076bbb228867b9494869328ea23b991f7f2bcc8f8792eaa92d507cdd797ac9ba0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800988016345785d8a000082d2d282232780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401088007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a06c3ed72575f9de73c447f719c389ad98b31476f6be5473b8bab6a116b7d0ff7fa036962bbc9b2d34c7ea06e0358cd007a260658bac66a5b3855d75f180b17ea6ffc0c0", + "blockHeader": { + "parentHash": "0x15e97dfc4b864a8d4bbb33f5deca6d4f9efa949424f80cc8e698f80f0ed1001d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb82f349e35f174a9f11e6b73b7967cd67a20a512d65059163f360138a155044a", + "transactionsTrie": "0x4076bbb228867b9494869328ea23b991f7f2bcc8f8792eaa92d507cdd797ac9b", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x09", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x2327", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xbcc95be5eaeb4aae0f3453a7e0b4ddc25a293a0feb6464c2e2d6381f0dc78652" + }, + "blocknumber": "9", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x08", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0x6c3ed72575f9de73c447f719c389ad98b31476f6be5473b8bab6a116b7d0ff7f", + "s": "0x36962bbc9b2d34c7ea06e0358cd007a260658bac66a5b3855d75f180b17ea6ff", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0bcc95be5eaeb4aae0f3453a7e0b4ddc25a293a0feb6464c2e2d6381f0dc78652a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ebde02452144ddb74f1d74e657d014c6ab802c4b9a65833aaedee43062bf226ca0f5b62db92a921e85cadf7cbc53af7ee0b4aad69afab61f282377a75638799a25a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800a88016345785d8a000082d2d282270f80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f9012401098007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e8e17448df52de5d034a381052b4f886847004a37ce8dc660081e214a7a16773a058dde277185e93f224caf513675909034f82ad56e7843cdb48b8289bfa121510c0c0", + "blockHeader": { + "parentHash": "0xbcc95be5eaeb4aae0f3453a7e0b4ddc25a293a0feb6464c2e2d6381f0dc78652", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xebde02452144ddb74f1d74e657d014c6ab802c4b9a65833aaedee43062bf226c", + "transactionsTrie": "0xf5b62db92a921e85cadf7cbc53af7ee0b4aad69afab61f282377a75638799a25", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x0a", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x270f", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x24de9a4e60516b2251570d325b5b47566519963ff95f2f067316c0c4b6f15624" + }, + "blocknumber": "10", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x09", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0xe8e17448df52de5d034a381052b4f886847004a37ce8dc660081e214a7a16773", + "s": "0x58dde277185e93f224caf513675909034f82ad56e7843cdb48b8289bfa121510", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba024de9a4e60516b2251570d325b5b47566519963ff95f2f067316c0c4b6f15624a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06a28d8f4fe7d95be18951780d2db5cd898c90a94a791c3b7630bf1c4ccd50d62a093c237418d26e1d4b213eeeefb159df369651bdf6b35502b5f9aac6331e79689a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800b88016345785d8a000082d2d2822af780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010a8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a026a4455edb7339ce937389e359802d049d5d2e63387e78e0794016852b0c975da01fc711a656fd9609bb0d34eadf465ea2b6f475a4e3b060356661c0006b8fb37cc0c0", + "blockHeader": { + "parentHash": "0x24de9a4e60516b2251570d325b5b47566519963ff95f2f067316c0c4b6f15624", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6a28d8f4fe7d95be18951780d2db5cd898c90a94a791c3b7630bf1c4ccd50d62", + "transactionsTrie": "0x93c237418d26e1d4b213eeeefb159df369651bdf6b35502b5f9aac6331e79689", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x0b", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x2af7", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x103c30e18ff6fd5ea5d7f27c0366728e6676042ebafb672bd70b15ab6baa22a9" + }, + "blocknumber": "11", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x0a", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0x26a4455edb7339ce937389e359802d049d5d2e63387e78e0794016852b0c975d", + "s": "0x1fc711a656fd9609bb0d34eadf465ea2b6f475a4e3b060356661c0006b8fb37c", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0103c30e18ff6fd5ea5d7f27c0366728e6676042ebafb672bd70b15ab6baa22a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dd4200c807726b664aab38c301a560dc14c684f2845e7608a84b2718edb64409a09e1c293d72e3cce982c85b5d4cf19bb57684d77fb031b81c9c11cfb48112246aa0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800c88016345785d8a000082d2d2822edf80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010b8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a07c230f4fcb84a42f56c548db9d33ff56afb0ca76a26824a8e9f05900695687efa056baf103b1ad765c145f4766d2ec4f4fbb9ba8472530d3d61d93bff9fe1276c2c0c0", + "blockHeader": { + "parentHash": "0x103c30e18ff6fd5ea5d7f27c0366728e6676042ebafb672bd70b15ab6baa22a9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xdd4200c807726b664aab38c301a560dc14c684f2845e7608a84b2718edb64409", + "transactionsTrie": "0x9e1c293d72e3cce982c85b5d4cf19bb57684d77fb031b81c9c11cfb48112246a", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x0c", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x2edf", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x835605e586944384858f8cb3e9bdc4aacf5793aa1db6556d7e31a5595e27c780" + }, + "blocknumber": "12", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x0b", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0x7c230f4fcb84a42f56c548db9d33ff56afb0ca76a26824a8e9f05900695687ef", + "s": "0x56baf103b1ad765c145f4766d2ec4f4fbb9ba8472530d3d61d93bff9fe1276c2", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0835605e586944384858f8cb3e9bdc4aacf5793aa1db6556d7e31a5595e27c780a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098ad79a84326ad0d843d12d5984f3f7afd28a8e64a248dbb9d001d380ee89daaa021ec92f7df1c0523129f3ac00990fd0195321cc166012b8bd3bf2ad28bf47e8da0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800d88016345785d8a000082d2d28232c780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010c8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0d9e30d6d728e16337757fb7bd2c92a006f10b4f965d00827c64d92866141f1aaa077a6960054fe2790f4f56e0a54524a3b31f2aa625f11b7a51feb445617b152f6c0c0", + "blockHeader": { + "parentHash": "0x835605e586944384858f8cb3e9bdc4aacf5793aa1db6556d7e31a5595e27c780", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x98ad79a84326ad0d843d12d5984f3f7afd28a8e64a248dbb9d001d380ee89daa", + "transactionsTrie": "0x21ec92f7df1c0523129f3ac00990fd0195321cc166012b8bd3bf2ad28bf47e8d", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x0d", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x32c7", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x8eae9a67e67b5bf339a510b67ebe7779384a8fc142d8bcb68a198473b792073f" + }, + "blocknumber": "13", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x0c", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0xd9e30d6d728e16337757fb7bd2c92a006f10b4f965d00827c64d92866141f1aa", + "s": "0x77a6960054fe2790f4f56e0a54524a3b31f2aa625f11b7a51feb445617b152f6", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba08eae9a67e67b5bf339a510b67ebe7779384a8fc142d8bcb68a198473b792073fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00280874be036aedc79c53a76cfe72c2aecd04bd562dbb085a02c5fee778371a4a02817b5568bf958d029b95991c9ea230356c3b4ef7501833bc384a094a22945fca0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800e88016345785d8a000082d2d28236af80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010d8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0d8f088a3be314e9a0d258dd01907e8497b3f286b737e4186cd498d78a6fd87e9a015822e41cab687291b82acd30642836670e2c834f8568ffb90743865c9372707c0c0", + "blockHeader": { + "parentHash": "0x8eae9a67e67b5bf339a510b67ebe7779384a8fc142d8bcb68a198473b792073f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0280874be036aedc79c53a76cfe72c2aecd04bd562dbb085a02c5fee778371a4", + "transactionsTrie": "0x2817b5568bf958d029b95991c9ea230356c3b4ef7501833bc384a094a22945fc", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x0e", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x36af", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xcf6b260b1e981e9a3eeae5f372bb11d976376d554903376c967009ce2c1080ac" + }, + "blocknumber": "14", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x0d", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0xd8f088a3be314e9a0d258dd01907e8497b3f286b737e4186cd498d78a6fd87e9", + "s": "0x15822e41cab687291b82acd30642836670e2c834f8568ffb90743865c9372707", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf9034ef9021ba0cf6b260b1e981e9a3eeae5f372bb11d976376d554903376c967009ce2c1080aca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04fbcfe9f5eb28d91ad9bddc7d1e5179536e7139b30e3f07f45c50543f938f526a063e096bf7976295091ba6941579fdd772d97577b562a45c05fe15b7eec5e0320a0402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800f88016345785d8a000082d2d2823a9780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9012bb9012802f90124010e8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0db968386378605ccbc61cf0901cb9a8341077323cd5e69920806349269b529dfa052a7399814a7dc5869cf5699418811b600949b0f158c54faae9fd9a2d7dcb5a3c0c0", + "blockHeader": { + "parentHash": "0xcf6b260b1e981e9a3eeae5f372bb11d976376d554903376c967009ce2c1080ac", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4fbcfe9f5eb28d91ad9bddc7d1e5179536e7139b30e3f07f45c50543f938f526", + "transactionsTrie": "0x63e096bf7976295091ba6941579fdd772d97577b562a45c05fe15b7eec5e0320", + "receiptTrie": "0x402817802db95465009f3e8fafdff010ad32c34deece9e608113ba22cd5140c1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x0f", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd2d2", + "timestamp": "0x3a97", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x454ee2e59507807f0d5424325d2e46251fe356448e27a3c78dd181c166b3cb69" + }, + "blocknumber": "15", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x0e", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x00", + "r": "0xdb968386378605ccbc61cf0901cb9a8341077323cd5e69920806349269b529df", + "s": "0x52a7399814a7dc5869cf5699418811b600949b0f158c54faae9fd9a2d7dcb5a3", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf90372f9023fa0454ee2e59507807f0d5424325d2e46251fe356448e27a3c78dd181c166b3cb69a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa024a3c563f14a71400b33060c029ad3b57d2878ee1a9913341d751c32449efc24a002b08419f3f987a4c512f0f2b1508e7b6ff2a76309babbe589497db12035332ca021661973d509bbc413db6f28606e103b5569fdb83e38a3264b7de66ee3dd0111b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801088016345785d8a0000830f0fc0823a9880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f90124010f8007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0abe11f1309894c99bb80b5a6b6e6a339566c0f772d28d9a4ae9e4687fb74cca5a023fd240d9cb407472302ab835f9f8cfe454389d86128f141c4c90792d9d41eccc0c0", + "blockHeader": { + "parentHash": "0x454ee2e59507807f0d5424325d2e46251fe356448e27a3c78dd181c166b3cb69", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x24a3c563f14a71400b33060c029ad3b57d2878ee1a9913341d751c32449efc24", + "transactionsTrie": "0x02b08419f3f987a4c512f0f2b1508e7b6ff2a76309babbe589497db12035332c", + "receiptTrie": "0x21661973d509bbc413db6f28606e103b5569fdb83e38a3264b7de66ee3dd0111", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x10", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0f0fc0", + "timestamp": "0x3a98", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x66721893f01c4d9790450ec7c6309650de0f1344d02139865f9824581f9be768" + }, + "blocknumber": "16", + "transactions": [ + { + "type": "0x02", + "chainId": "0x01", + "nonce": "0x0f", + "maxPriorityFeePerGas": "0x00", + "maxFeePerGas": "0x07", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "accessList": [], + "v": "0x01", + "r": "0xabe11f1309894c99bb80b5a6b6e6a339566c0f772d28d9a4ae9e4687fb74cca5", + "s": "0x23fd240d9cb407472302ab835f9f8cfe454389d86128f141c4c90792d9d41ecc", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x66721893f01c4d9790450ec7c6309650de0f1344d02139865f9824581f9be768", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x01000000000000000000", + "code": "0x60006000600060006001600a5af14355", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x01000000000000000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x00", + "balance": "0x0f", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0xfffffffffffffffff1", + "code": "0x60006000600060006001600a5af14355", + "storage": { + "0x01": "0x01", + "0x02": "0x01", + "0x03": "0x01", + "0x04": "0x01", + "0x05": "0x01", + "0x06": "0x01", + "0x07": "0x01", + "0x08": "0x01", + "0x09": "0x01", + "0x0a": "0x01", + "0x0b": "0x01", + "0x0c": "0x01", + "0x0d": "0x01", + "0x0e": "0x01", + "0x0f": "0x01" + } + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x1a99": "0x3a98" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x10", + "balance": "0xffffffffffff3d6e06", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_external_vectors.json b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_external_vectors.json index bedc322bae9..c7fd0268fb5 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_external_vectors.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_external_vectors.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_02e696ada7d4631d": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_02e696ada7d4631d]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dd2535692d92d180092116c77c02aaf3b70813dcdf18690d3b9d6fe2baae5eeea0342a7b460150feecdcb631315bdec6482e2c61fdbd3503ec02fe14e29f3bf370a07497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320d80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a065f7b12b0599ab4d9ebb3eb4b578437f752aa0cb55ddf51fff8606bef0810d11a01fe1f62b259c12418cf77f0e4f4fe740701e7e24977b011ecbc9ea14e67fc356c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f22cf226af8b718753f3e5d7af9be6d085309471d87fa50c130289ae1a3d707ca0342a7b460150feecdcb631315bdec6482e2c61fdbd3503ec02fe14e29f3bf370a07497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320d88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a065f7b12b0599ab4d9ebb3eb4b578437f752aa0cb55ddf51fff8606bef0810d11a01fe1f62b259c12418cf77f0e4f4fe740701e7e24977b011ecbc9ea14e67fc356c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdd2535692d92d180092116c77c02aaf3b70813dcdf18690d3b9d6fe2baae5eee", + "stateRoot": "0xf22cf226af8b718753f3e5d7af9be6d085309471d87fa50c130289ae1a3d707c", "transactionsTrie": "0x342a7b460150feecdcb631315bdec6482e2c61fdbd3503ec02fe14e29f3bf370", "receiptTrie": "0x7497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0320d8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb9ad0d2b7827d79ddd92eb487aeccaaf8eafbb6e474d95f2d30c938eb632366e" + "hash": "0x0c36d63488a3531ec9b3ffd2f6e95223d5a5c75a01375034d364dd1485ad9780" }, "blocknumber": "1", "transactions": [ @@ -79,7 +80,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb9ad0d2b7827d79ddd92eb487aeccaaf8eafbb6e474d95f2d30c938eb632366e", + "lastblockhash": "0x0c36d63488a3531ec9b3ffd2f6e95223d5a5c75a01375034d364dd1485ad9780", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -119,7 +120,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -131,9 +132,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_05c1f3685f3393f0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -164,12 +166,12 @@ }, "blocks": [ { - "rlp": "0xf9036ff9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0daa2e7172725bfa180044d9a50f715abdd0b4e2b908bea2e9a1b59446d74db5aa064694503549631721abbd0ccbc59bbb11f6987a03104eef1e12a3d3d1aca8579a0cffc4636a42d9c6309bc3a1501b115d31f9b57efcb36cdab27c5e3ef9c756d09b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303248c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e38637564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a056cc0f64cca987cba1d1c7f6f39aadaafefae85a8dadadc776cf2881c6194c219f8727fa857ab3248103a8636248eaedaed219c313bf97e2673a9bab17226144c0c0", + "rlp": "0xf90371f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0515c637f67cae9681abef491d76d25dce91d41e3d226f5a0cf4032febae6e7a9a064694503549631721abbd0ccbc59bbb11f6987a03104eef1e12a3d3d1aca8579a0cffc4636a42d9c6309bc3a1501b115d31f9b57efcb36cdab27c5e3ef9c756d09b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303248c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e38637564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a056cc0f64cca987cba1d1c7f6f39aadaafefae85a8dadadc776cf2881c6194c219f8727fa857ab3248103a8636248eaedaed219c313bf97e2673a9bab17226144c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdaa2e7172725bfa180044d9a50f715abdd0b4e2b908bea2e9a1b59446d74db5a", + "stateRoot": "0x515c637f67cae9681abef491d76d25dce91d41e3d226f5a0cf4032febae6e7a9", "transactionsTrie": "0x64694503549631721abbd0ccbc59bbb11f6987a03104eef1e12a3d3d1aca8579", "receiptTrie": "0xcffc4636a42d9c6309bc3a1501b115d31f9b57efcb36cdab27c5e3ef9c756d09", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -177,8 +179,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03248c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -186,7 +188,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9e09b698405a8b1d07a8b74ee53b5d0a3174b6c7a933f1c0ce594b5af4d2172a" + "hash": "0xa45bc5ae49aa867c60b3ca1b1e3022f94487300cddf3f9331d25a1407e44f1c0" }, "blocknumber": "1", "transactions": [ @@ -211,7 +213,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9e09b698405a8b1d07a8b74ee53b5d0a3174b6c7a933f1c0ce594b5af4d2172a", + "lastblockhash": "0xa45bc5ae49aa867c60b3ca1b1e3022f94487300cddf3f9331d25a1407e44f1c0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -251,7 +253,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -263,9 +265,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_08f9e2f1cb3d39db]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -296,12 +299,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa004023d26811e25cd34b8ce4d5aab0a6a3fa16558984b0b2c29a1d371f83a1249a0487a2b42837cfb42e30dc2a3601d1ee2d4b4f10efda11a4623ea510d1a511a8da0f5edc77dca0be21234ab0069b8ad13ce6c3c972e66e0ddd0e43da6c5d9950043b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830325a00c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a059e387255cf10f1ecfd2846f252f931724b1be74c7b62cc27e2b3693f0e0b9bda046be1d5b11bf7aa48259044c60810623555b4160bf9885967ff64e8147c51340c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa048e76267ab48f1d7139ec6808bfbbe5b697acd93aa0a7b1984addecbde0a6435a0487a2b42837cfb42e30dc2a3601d1ee2d4b4f10efda11a4623ea510d1a511a8da0f5edc77dca0be21234ab0069b8ad13ce6c3c972e66e0ddd0e43da6c5d9950043b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830325a08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a059e387255cf10f1ecfd2846f252f931724b1be74c7b62cc27e2b3693f0e0b9bda046be1d5b11bf7aa48259044c60810623555b4160bf9885967ff64e8147c51340c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x04023d26811e25cd34b8ce4d5aab0a6a3fa16558984b0b2c29a1d371f83a1249", + "stateRoot": "0x48e76267ab48f1d7139ec6808bfbbe5b697acd93aa0a7b1984addecbde0a6435", "transactionsTrie": "0x487a2b42837cfb42e30dc2a3601d1ee2d4b4f10efda11a4623ea510d1a511a8d", "receiptTrie": "0xf5edc77dca0be21234ab0069b8ad13ce6c3c972e66e0ddd0e43da6c5d9950043", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -309,8 +312,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0325a0", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -318,7 +321,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x87aa02b29ff1a99a0ce591a62729b351961c0c3bb52c7288c083cfe432aecc4e" + "hash": "0xa054cb36b0797239be5d9cee16918ebdbf95af6d1d3588565c95393e3c072ef4" }, "blocknumber": "1", "transactions": [ @@ -343,7 +346,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x87aa02b29ff1a99a0ce591a62729b351961c0c3bb52c7288c083cfe432aecc4e", + "lastblockhash": "0xa054cb36b0797239be5d9cee16918ebdbf95af6d1d3588565c95393e3c072ef4", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -383,7 +386,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -395,9 +398,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_0cf79b17cb5f4ea2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -428,12 +432,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bff95dd737627225c19a4001d9e0ac170f07cfcf671baa06eafbdc170412e94aa09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a076ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830322400c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07b65609f7d48c381efddf25cd9fc751025a295682418fa2b40442b9f6872cde1a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a076ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830322408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbff95dd737627225c19a4001d9e0ac170f07cfcf671baa06eafbdc170412e94a", + "stateRoot": "0x7b65609f7d48c381efddf25cd9fc751025a295682418fa2b40442b9f6872cde1", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x76ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -441,8 +445,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032240", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -450,7 +454,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xdd7a27a92391f614fe183adf097706a5415284d90a8611aa090f116bfac1b617" + "hash": "0x8495f2c4f5cdda608969a3cf2d4793ae00de0cb8179bd2689c89f84c5d32602f" }, "blocknumber": "1", "transactions": [ @@ -475,7 +479,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xdd7a27a92391f614fe183adf097706a5415284d90a8611aa090f116bfac1b617", + "lastblockhash": "0x8495f2c4f5cdda608969a3cf2d4793ae00de0cb8179bd2689c89f84c5d32602f", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -515,7 +519,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -527,9 +531,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_177b58dc7a46b08f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -560,12 +565,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09ee9c8e9998e316ff7563b4fb05e35b3cc8f20337ca314d83c098149fd6c0d9da0b835914c32846ce4b9f953b0ba04cf33028ecc13380fd2c259575cada7be2d30a04bf1348d0fdae7278cb03c8bb2e38fdebee3a8d9312f9fe9639e449b2353b9b4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830324800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e386375eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0041603d4d4eee85f8717ccf36cc9332488c80a98288dab307cefa8cf4779d9d0a043eff97f53dd7225d6f09e384fc0841ae1d4270b493ca3f28a75a1ce188d2505c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b61954f36c95805a57aa132100a53467f55ad71e85a7734d6862ae8e87f3ea48a0b835914c32846ce4b9f953b0ba04cf33028ecc13380fd2c259575cada7be2d30a04bf1348d0fdae7278cb03c8bb2e38fdebee3a8d9312f9fe9639e449b2353b9b4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830324808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e386375eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0041603d4d4eee85f8717ccf36cc9332488c80a98288dab307cefa8cf4779d9d0a043eff97f53dd7225d6f09e384fc0841ae1d4270b493ca3f28a75a1ce188d2505c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9ee9c8e9998e316ff7563b4fb05e35b3cc8f20337ca314d83c098149fd6c0d9d", + "stateRoot": "0xb61954f36c95805a57aa132100a53467f55ad71e85a7734d6862ae8e87f3ea48", "transactionsTrie": "0xb835914c32846ce4b9f953b0ba04cf33028ecc13380fd2c259575cada7be2d30", "receiptTrie": "0x4bf1348d0fdae7278cb03c8bb2e38fdebee3a8d9312f9fe9639e449b2353b9b4", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -573,8 +578,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032480", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -582,7 +587,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf2f72e3687bae12fd957a7467c84db42d33b6fb8d75c541c8d0302fa63fbf2c2" + "hash": "0x1ff3fea1bab83f6246cccad4fe88d4e2dd7df381a44e591a53ffd798f29fb75e" }, "blocknumber": "1", "transactions": [ @@ -607,7 +612,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf2f72e3687bae12fd957a7467c84db42d33b6fb8d75c541c8d0302fa63fbf2c2", + "lastblockhash": "0x1ff3fea1bab83f6246cccad4fe88d4e2dd7df381a44e591a53ffd798f29fb75e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -647,7 +652,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -659,9 +664,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_1ce8e4f69d5df899]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -692,12 +698,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a99871e54f31dcf49f28c94a654df2fe9fd1c662ace3959bba53d194d890d527a043789cfcc04c94354e30ca1cb5082ccd5d15d1c61296d1705538899289d5e61aa0107b00df623c9a80790e9c7cc0ee8f3527004d21d32f368f34b00937a6b1343db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326780c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655692c51ff81dd71dab71cefecd79e8274b4b7ba36a0f40e2dc086bc4061c7f63249877db23297212991fd63e07b7ebc348c080a083b15b98bed71805ae022f208ab10677f215fdc8f516788b9105ea1002831446a06c604d50ca527c1e81de361282a867fcae3161b9c66672bccfc3decfab89da75c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ef374ff959831b4647b94a9debd5f24c169a2fc4b7bc9ac8bb73588e1017b44da043789cfcc04c94354e30ca1cb5082ccd5d15d1c61296d1705538899289d5e61aa0107b00df623c9a80790e9c7cc0ee8f3527004d21d32f368f34b00937a6b1343db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326788203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655692c51ff81dd71dab71cefecd79e8274b4b7ba36a0f40e2dc086bc4061c7f63249877db23297212991fd63e07b7ebc348c080a083b15b98bed71805ae022f208ab10677f215fdc8f516788b9105ea1002831446a06c604d50ca527c1e81de361282a867fcae3161b9c66672bccfc3decfab89da75c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa99871e54f31dcf49f28c94a654df2fe9fd1c662ace3959bba53d194d890d527", + "stateRoot": "0xef374ff959831b4647b94a9debd5f24c169a2fc4b7bc9ac8bb73588e1017b44d", "transactionsTrie": "0x43789cfcc04c94354e30ca1cb5082ccd5d15d1c61296d1705538899289d5e61a", "receiptTrie": "0x107b00df623c9a80790e9c7cc0ee8f3527004d21d32f368f34b00937a6b1343d", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -705,8 +711,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032678", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -714,7 +720,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xfdad33e800bbb22101dfd15d3403ca534fef91c88e7a43c5ff5c246efae3215a" + "hash": "0x52f17674fcbe09422f43c71a40b8b651a4a729de1ba9f558ed151d251f1a1e1c" }, "blocknumber": "1", "transactions": [ @@ -739,7 +745,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xfdad33e800bbb22101dfd15d3403ca534fef91c88e7a43c5ff5c246efae3215a", + "lastblockhash": "0x52f17674fcbe09422f43c71a40b8b651a4a729de1ba9f558ed151d251f1a1e1c", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -779,7 +785,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -791,9 +797,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_26b753dec0560daa": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_26b753dec0560daa]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -824,12 +831,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05ce79e06e93755883c681653ed1373893d31a0800384fd305f47d7a039076749a0ffa174a7267f0fd675444d1106b4e36f7f04acb483a5f46ed0f52076d6610322a099cc7e90b41f23e91cea893ec59e04a28e472185d64013784cfed89e8dde1a64b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326900c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef000000000000000000000000000000000000000000000000000000000000000073e66878b46ae3705eb6a46a89213de7d3686828bfce5c19400fffff0010000193efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556b82ded761997f2c6f1bb3db1e1dada2ef06d936551667c82f659b75f99d2da2068b81340823ee4e829a93c9fbed7810dc080a0a933405fb1acd6fd8a3d63b0c1719808d76cb052267d28b26597c59d7debad12a0444e79244e52dda7b22f522e87729c7e0f2e42dabf4d2bca86a1a3bd5ad35fc4c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01233198813521d45cbad045cec81263168a3759efbf9c4dd8b2c057955048151a0ffa174a7267f0fd675444d1106b4e36f7f04acb483a5f46ed0f52076d6610322a099cc7e90b41f23e91cea893ec59e04a28e472185d64013784cfed89e8dde1a64b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326908203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef000000000000000000000000000000000000000000000000000000000000000073e66878b46ae3705eb6a46a89213de7d3686828bfce5c19400fffff0010000193efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556b82ded761997f2c6f1bb3db1e1dada2ef06d936551667c82f659b75f99d2da2068b81340823ee4e829a93c9fbed7810dc080a0a933405fb1acd6fd8a3d63b0c1719808d76cb052267d28b26597c59d7debad12a0444e79244e52dda7b22f522e87729c7e0f2e42dabf4d2bca86a1a3bd5ad35fc4c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x5ce79e06e93755883c681653ed1373893d31a0800384fd305f47d7a039076749", + "stateRoot": "0x1233198813521d45cbad045cec81263168a3759efbf9c4dd8b2c057955048151", "transactionsTrie": "0xffa174a7267f0fd675444d1106b4e36f7f04acb483a5f46ed0f52076d6610322", "receiptTrie": "0x99cc7e90b41f23e91cea893ec59e04a28e472185d64013784cfed89e8dde1a64", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -837,8 +844,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032690", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -846,7 +853,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x46905b806271903059045b328481b7bc4971e46bc61f679ee3c6f41eda23b60b" + "hash": "0x0be652072121c61d335ba63fc0004292ef3ae969dbbdb5ab47554abd55a2d7e1" }, "blocknumber": "1", "transactions": [ @@ -871,7 +878,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x46905b806271903059045b328481b7bc4971e46bc61f679ee3c6f41eda23b60b", + "lastblockhash": "0x0be652072121c61d335ba63fc0004292ef3ae969dbbdb5ab47554abd55a2d7e1", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -911,7 +918,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -923,9 +930,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_2b76dc9e3abf42f3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -956,12 +964,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04a133c11db920fba4882b5f6f8b1a5fca6225d9ccb55e8acabd65c098e21e283a04a48dfbccb8fac2366ab037f6e4e1ba275d8678681973fdfd6712bd5e5b730f9a0091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830323180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a09195fc709fd538fc7555a818e0574406c1cd8cc72fe2e3a50c6b8976e66e3ee0a04b3cbb9786db1ef4866288d895b09850b5167aa3d454a1c7bce0ad99b7065cb7c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa034cf7f3a8c9d1c2c21c70a96decaf8f1b6a20baea9ae1e34f6ab2578f19536e5a04a48dfbccb8fac2366ab037f6e4e1ba275d8678681973fdfd6712bd5e5b730f9a0091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830323188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a09195fc709fd538fc7555a818e0574406c1cd8cc72fe2e3a50c6b8976e66e3ee0a04b3cbb9786db1ef4866288d895b09850b5167aa3d454a1c7bce0ad99b7065cb7c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4a133c11db920fba4882b5f6f8b1a5fca6225d9ccb55e8acabd65c098e21e283", + "stateRoot": "0x34cf7f3a8c9d1c2c21c70a96decaf8f1b6a20baea9ae1e34f6ab2578f19536e5", "transactionsTrie": "0x4a48dfbccb8fac2366ab037f6e4e1ba275d8678681973fdfd6712bd5e5b730f9", "receiptTrie": "0x091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -969,8 +977,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032318", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -978,7 +986,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd196fb6b1529cad09b38c60dee6b19557597903353ec2d5b6443a1a92153d4b8" + "hash": "0x8ff7e5840ad5405cb4e8e72190539006cba58ebb6256a08fcbd88c7a119081f5" }, "blocknumber": "1", "transactions": [ @@ -1003,7 +1011,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd196fb6b1529cad09b38c60dee6b19557597903353ec2d5b6443a1a92153d4b8", + "lastblockhash": "0x8ff7e5840ad5405cb4e8e72190539006cba58ebb6256a08fcbd88c7a119081f5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1043,7 +1051,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1055,9 +1063,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_31ebd010e6098750": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_31ebd010e6098750]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1088,12 +1097,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cc0c32ad033d56b450fd0efb7406dd2f8bea933d7bfd691cdf07366e2e7e2a3ea05a95a607cfdb40bc540295c12eba153e7929bffef2afb400051c5b1b29916151a0ddd8e54de43cee140d6658fcf27a111de638a4c94b6be71367a2d82ed31d2b40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830327e00c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000001522a4a7f34e1ea350ae07c29c96c7e79655aa926122e95fe69fcbd932ca49e98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7a62ad71d14c5719385c0686f1871430475bf3a00f0aa3f7b8dd99a9abc2160744faf0070725e00b60ad9a026a15b1a8cc001a0631d859dbd7c6db2a8fc72b785f40e5e5fe6b164ac1be86464ea6d3f64ba4e4ba023c5b8b60ca99d38cf1da2f0efd449a6868d217648eea05ee1b85a6b6496ac97c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0213bee4d6dbf7072f6d14fe14e8b84b1ffab2f78adc725d2e9eeec17d30ca58da05a95a607cfdb40bc540295c12eba153e7929bffef2afb400051c5b1b29916151a0ddd8e54de43cee140d6658fcf27a111de638a4c94b6be71367a2d82ed31d2b40b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830327e08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000001522a4a7f34e1ea350ae07c29c96c7e79655aa926122e95fe69fcbd932ca49e98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7a62ad71d14c5719385c0686f1871430475bf3a00f0aa3f7b8dd99a9abc2160744faf0070725e00b60ad9a026a15b1a8cc001a0631d859dbd7c6db2a8fc72b785f40e5e5fe6b164ac1be86464ea6d3f64ba4e4ba023c5b8b60ca99d38cf1da2f0efd449a6868d217648eea05ee1b85a6b6496ac97c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcc0c32ad033d56b450fd0efb7406dd2f8bea933d7bfd691cdf07366e2e7e2a3e", + "stateRoot": "0x213bee4d6dbf7072f6d14fe14e8b84b1ffab2f78adc725d2e9eeec17d30ca58d", "transactionsTrie": "0x5a95a607cfdb40bc540295c12eba153e7929bffef2afb400051c5b1b29916151", "receiptTrie": "0xddd8e54de43cee140d6658fcf27a111de638a4c94b6be71367a2d82ed31d2b40", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1101,8 +1110,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0327e0", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1110,7 +1119,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x89910fbfd8a674c8793add9c88070744cf350faa984ecb5e81005a17f7a3cc07" + "hash": "0x433546fb761743820719093ce43415664e1b7b6eea73da497231838413d93a79" }, "blocknumber": "1", "transactions": [ @@ -1135,7 +1144,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x89910fbfd8a674c8793add9c88070744cf350faa984ecb5e81005a17f7a3cc07", + "lastblockhash": "0x433546fb761743820719093ce43415664e1b7b6eea73da497231838413d93a79", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1175,7 +1184,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1187,9 +1196,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_3208425794224c3f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3208425794224c3f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1220,12 +1230,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0738d7b0d4ecfc92c33bc85a7459539409c3afb0ec7282be253b91a459964e71ea0baebc069a2a30182ede5e6ff232fbddf799b0296261aa1db9f0f290d1a78c24fa0c787f58393e74b7115d9f2d353282ab2810a28498a85db4cb8d94d7b5239e15bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303224c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e0e99a9b9d721ea19859ff421ecf4c9f93a0f889e44e37ab1eed8f5337ec64afa04a02154ba84ccb9be41e523726b233a69c4d9d31eb439597178b968b8e6c6d1dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b8101aea75d3d808b628d7d65aa338f09a1366cfa562981093c37e8b1b37a4f2a0baebc069a2a30182ede5e6ff232fbddf799b0296261aa1db9f0f290d1a78c24fa0c787f58393e74b7115d9f2d353282ab2810a28498a85db4cb8d94d7b5239e15bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303224c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e0e99a9b9d721ea19859ff421ecf4c9f93a0f889e44e37ab1eed8f5337ec64afa04a02154ba84ccb9be41e523726b233a69c4d9d31eb439597178b968b8e6c6d1dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x738d7b0d4ecfc92c33bc85a7459539409c3afb0ec7282be253b91a459964e71e", + "stateRoot": "0xb8101aea75d3d808b628d7d65aa338f09a1366cfa562981093c37e8b1b37a4f2", "transactionsTrie": "0xbaebc069a2a30182ede5e6ff232fbddf799b0296261aa1db9f0f290d1a78c24f", "receiptTrie": "0xc787f58393e74b7115d9f2d353282ab2810a28498a85db4cb8d94d7b5239e15b", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1233,8 +1243,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03224c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1242,7 +1252,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x80597272dcd6133f5a9a4ef9a68e8d043f714473bf81b32de54e2fc946c35b9e" + "hash": "0x748d1a9a79d3b0c684001bd932b0595222898918054e6c9ec34fa166b335a5ad" }, "blocknumber": "1", "transactions": [ @@ -1267,7 +1277,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x80597272dcd6133f5a9a4ef9a68e8d043f714473bf81b32de54e2fc946c35b9e", + "lastblockhash": "0x748d1a9a79d3b0c684001bd932b0595222898918054e6c9ec34fa166b335a5ad", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1307,7 +1317,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1319,9 +1329,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_36817bfd67de97a8": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_36817bfd67de97a8]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1352,12 +1363,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d2fd000883b07e69b2f0072ea7e1b3ef3d020b94b87b4a005a339aed93f40ff0a0c8b9949fdbd6e8b8147ab57b4df8948a045047b9f8d89ce7bb33cbbb38563ebba0a8c1d3e098b71a1cc8213ea7a30151d9d61a526a0caf2275b56a3c72911ddb85b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830324500c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a00c1fef5ea3a0f8740b54e5fe0408c9ce9d99b42ce538b36fc067d5752ab8ea5ea0618bb0f81f4e7a1b10283b3584c58b374d3d3ed78fcd768b34329656aead6a8dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2fd15b2faefaa6b1d71b401ad1b374d22e71b4a48db20980f2016c4088ec6b9a0c8b9949fdbd6e8b8147ab57b4df8948a045047b9f8d89ce7bb33cbbb38563ebba0a8c1d3e098b71a1cc8213ea7a30151d9d61a526a0caf2275b56a3c72911ddb85b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830324508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a00c1fef5ea3a0f8740b54e5fe0408c9ce9d99b42ce538b36fc067d5752ab8ea5ea0618bb0f81f4e7a1b10283b3584c58b374d3d3ed78fcd768b34329656aead6a8dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd2fd000883b07e69b2f0072ea7e1b3ef3d020b94b87b4a005a339aed93f40ff0", + "stateRoot": "0xc2fd15b2faefaa6b1d71b401ad1b374d22e71b4a48db20980f2016c4088ec6b9", "transactionsTrie": "0xc8b9949fdbd6e8b8147ab57b4df8948a045047b9f8d89ce7bb33cbbb38563ebb", "receiptTrie": "0xa8c1d3e098b71a1cc8213ea7a30151d9d61a526a0caf2275b56a3c72911ddb85", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1365,8 +1376,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032450", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1374,7 +1385,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3a96de7d2b35e6eef234601c18193e308a910a9f2546801042d982f3045f1b93" + "hash": "0x803453571ab0fdd077ddeb4a2b394c653aa72798a8947c098ab11f59e223c0b0" }, "blocknumber": "1", "transactions": [ @@ -1399,7 +1410,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3a96de7d2b35e6eef234601c18193e308a910a9f2546801042d982f3045f1b93", + "lastblockhash": "0x803453571ab0fdd077ddeb4a2b394c653aa72798a8947c098ab11f59e223c0b0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1439,7 +1450,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1451,9 +1462,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_392169c16a2e5ef6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1484,12 +1496,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07cc97310447fcaa82fdc3f873488df4eb10e7c70d50905dcf4d3ab721d106652a073574e54028e33ad01b4af5cc7e84dc575f67146acc32e52ad8e4002355692c8a024e67c66eca491a8172390693a89b89c1a73f4e051ac6bf6d65a9990d773849eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830327c80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffca421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06aa86c458b3065e7ec244033a2ade91a7499561f482419a3a372c42a636dad98262a2ce926d142fd7cfe26ca148efe8b4c001a0d678cea8e66554926e473108363de892c0244b84ea29d4d288e62e254a54265ca07ab8176b3128def01d906a19a46f04f4cc9fabd6f75499e4e704500c1703d84ac0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02e49cacc176c54a3feb8835b758bb0af5b110a2357060e3964ba1176e6ec8092a073574e54028e33ad01b4af5cc7e84dc575f67146acc32e52ad8e4002355692c8a024e67c66eca491a8172390693a89b89c1a73f4e051ac6bf6d65a9990d773849eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830327c88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffca421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06aa86c458b3065e7ec244033a2ade91a7499561f482419a3a372c42a636dad98262a2ce926d142fd7cfe26ca148efe8b4c001a0d678cea8e66554926e473108363de892c0244b84ea29d4d288e62e254a54265ca07ab8176b3128def01d906a19a46f04f4cc9fabd6f75499e4e704500c1703d84ac0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7cc97310447fcaa82fdc3f873488df4eb10e7c70d50905dcf4d3ab721d106652", + "stateRoot": "0x2e49cacc176c54a3feb8835b758bb0af5b110a2357060e3964ba1176e6ec8092", "transactionsTrie": "0x73574e54028e33ad01b4af5cc7e84dc575f67146acc32e52ad8e4002355692c8", "receiptTrie": "0x24e67c66eca491a8172390693a89b89c1a73f4e051ac6bf6d65a9990d773849e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1497,8 +1509,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0327c8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1506,7 +1518,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3fb31f2fed0b3def4347bc0213b7c5278d7914ab5e0c41ff1d71c9a2277d59e5" + "hash": "0x89ce0988765753dcdc5bae0a7af2b1c34227177e09e5d5535d84a81d05dc576a" }, "blocknumber": "1", "transactions": [ @@ -1531,7 +1543,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3fb31f2fed0b3def4347bc0213b7c5278d7914ab5e0c41ff1d71c9a2277d59e5", + "lastblockhash": "0x89ce0988765753dcdc5bae0a7af2b1c34227177e09e5d5535d84a81d05dc576a", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1571,7 +1583,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1583,9 +1595,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_395cf6d697d1a743": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_395cf6d697d1a743]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1616,12 +1629,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0092ca77027ac1b9ca4a5cb57621c139371b077dd8335981de8c9db4a005b7fc4a049a925eb922da73de67e2944080379e4078dc8df996329fec5ebf2e61ee77911a060d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303245c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863773eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05e5d495a95eea1e64aa3bdf92cbe528b70e5e81100472c3ef4ed1fdad748055ba04e210a87cb7bf98868e1246eb5d8212988c2783e420552ec24325e3a647ea07bc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0be072a0a37dad43670554d6ab49af001d3506567facd92c889abd80e0ef785e3a049a925eb922da73de67e2944080379e4078dc8df996329fec5ebf2e61ee77911a060d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303245c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863773eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05e5d495a95eea1e64aa3bdf92cbe528b70e5e81100472c3ef4ed1fdad748055ba04e210a87cb7bf98868e1246eb5d8212988c2783e420552ec24325e3a647ea07bc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x092ca77027ac1b9ca4a5cb57621c139371b077dd8335981de8c9db4a005b7fc4", + "stateRoot": "0xbe072a0a37dad43670554d6ab49af001d3506567facd92c889abd80e0ef785e3", "transactionsTrie": "0x49a925eb922da73de67e2944080379e4078dc8df996329fec5ebf2e61ee77911", "receiptTrie": "0x60d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1629,8 +1642,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03245c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1638,7 +1651,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x779b5486e45d40883705c473c112306c4448997808ed1419e4bb8fbe42a9e920" + "hash": "0x5c719f262504c8b8c3442dc4adcd1e35bc83b57c8b4c50adeb173925b1dea72b" }, "blocknumber": "1", "transactions": [ @@ -1663,7 +1676,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x779b5486e45d40883705c473c112306c4448997808ed1419e4bb8fbe42a9e920", + "lastblockhash": "0x5c719f262504c8b8c3442dc4adcd1e35bc83b57c8b4c50adeb173925b1dea72b", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1703,7 +1716,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1715,9 +1728,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3ac8dc31e9aa6a70]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1748,12 +1762,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002e49a5b61d560438e797b371a948baa544418d3ea542e48cc62401567b3b321a023c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519ca007194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5affb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303221c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0cdcb82e08bcb8bb0eb6de7c1e142a910aa413891c9deeccd0c650737f5407307a06df091d7bdd64b38d24910e969040afa2f65abd8b0ddf8c42ce5e582edfcf4fec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03e14851599d20f137ac1a63f980d66d274e21f8f11dcf562de0b713cbcc70b40a023c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519ca007194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5affb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303221c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0cdcb82e08bcb8bb0eb6de7c1e142a910aa413891c9deeccd0c650737f5407307a06df091d7bdd64b38d24910e969040afa2f65abd8b0ddf8c42ce5e582edfcf4fec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x02e49a5b61d560438e797b371a948baa544418d3ea542e48cc62401567b3b321", + "stateRoot": "0x3e14851599d20f137ac1a63f980d66d274e21f8f11dcf562de0b713cbcc70b40", "transactionsTrie": "0x23c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519c", "receiptTrie": "0x07194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5aff", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1761,8 +1775,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03221c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1770,7 +1784,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x290bf0da14e9633aab43e0b391ecf236bdfca6ec38af81aec507dba2898c90ac" + "hash": "0x87d97c34779f4a2cdc5f8fd2815cce33304446cc923922bc31947ce6cd255488" }, "blocknumber": "1", "transactions": [ @@ -1795,7 +1809,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x290bf0da14e9633aab43e0b391ecf236bdfca6ec38af81aec507dba2898c90ac", + "lastblockhash": "0x87d97c34779f4a2cdc5f8fd2815cce33304446cc923922bc31947ce6cd255488", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1835,7 +1849,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1847,9 +1861,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c1e8b38219e3e12]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1880,12 +1895,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837ceaa00e963416d15be0d3a5cd99152b9674c916a944b4df2288e276655641511b312fa0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1000000000000000000000000000000000000000000000000000000000000000050625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06b72d80393dc39beea3857cb3719277138876b2b207f1d5e54dd62a14e3242d123b5a6db066181ff01a51c26c9d2f400bc001a0151b808659ccfe811301c4788adb2db2dfe21a81a72012b60bee9a2bae100196a00cb5d87c6b81f3278488c06a59191c62c345510b9be93e110dc7170d819084e5c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa017946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325a00e963416d15be0d3a5cd99152b9674c916a944b4df2288e276655641511b312fa0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1000000000000000000000000000000000000000000000000000000000000000050625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06b72d80393dc39beea3857cb3719277138876b2b207f1d5e54dd62a14e3242d123b5a6db066181ff01a51c26c9d2f400bc001a0151b808659ccfe811301c4788adb2db2dfe21a81a72012b60bee9a2bae100196a00cb5d87c6b81f3278488c06a59191c62c345510b9be93e110dc7170d819084e5c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837cea", + "stateRoot": "0x17946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325", "transactionsTrie": "0x0e963416d15be0d3a5cd99152b9674c916a944b4df2288e276655641511b312f", "receiptTrie": "0xddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1893,8 +1908,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326a8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1902,7 +1917,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x00af2784d23487e9d271d8880c38b74f50ff3ecca33d8d195e94e906fef7b444" + "hash": "0x3a4373287d71bb667165da18d06f930a708a4815a19046bf156e399393facc89" }, "blocknumber": "1", "transactions": [ @@ -1927,7 +1942,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x00af2784d23487e9d271d8880c38b74f50ff3ecca33d8d195e94e906fef7b444", + "lastblockhash": "0x3a4373287d71bb667165da18d06f930a708a4815a19046bf156e399393facc89", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1967,7 +1982,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1979,9 +1994,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3c87ec986c2656c2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2012,12 +2028,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b5fb155286d38e5d9a3a01251b3c3c6207217d84aa806abdeefaf029843896b0a06dbdee5ff5d24cefd571b4be8867465b926774ac7d13983e74206e2922855daba0ee652a06815a432d5f2b3e9ecff47f1da5ea293bca394f6d08fc63db91569906b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06a444d6bb5aadc3ceb615b50d6606bd54bfe529f59247987cd1ab848d19de599a9052f1835fb0d0d44cf70183e19a68c9c080a065ad99046fa60994d98049bf11bd7a1b8e3d9bac77dd8430ac504ebcd791c664a0251815b3d5d650c64c1cef1e5cac22fa5db5261de82303d0b089304623563bf6c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06e457e50fcb3580815c1a36f34e7e7fc49751cb90489fe54eaf49360baa37e3aa06dbdee5ff5d24cefd571b4be8867465b926774ac7d13983e74206e2922855daba0ee652a06815a432d5f2b3e9ecff47f1da5ea293bca394f6d08fc63db91569906b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328288203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06a444d6bb5aadc3ceb615b50d6606bd54bfe529f59247987cd1ab848d19de599a9052f1835fb0d0d44cf70183e19a68c9c080a065ad99046fa60994d98049bf11bd7a1b8e3d9bac77dd8430ac504ebcd791c664a0251815b3d5d650c64c1cef1e5cac22fa5db5261de82303d0b089304623563bf6c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xb5fb155286d38e5d9a3a01251b3c3c6207217d84aa806abdeefaf029843896b0", + "stateRoot": "0x6e457e50fcb3580815c1a36f34e7e7fc49751cb90489fe54eaf49360baa37e3a", "transactionsTrie": "0x6dbdee5ff5d24cefd571b4be8867465b926774ac7d13983e74206e2922855dab", "receiptTrie": "0xee652a06815a432d5f2b3e9ecff47f1da5ea293bca394f6d08fc63db91569906", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2025,8 +2041,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032828", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2034,7 +2050,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x41de1c6ff6589caea81fd364f0a89ff3800b0f0e3bd603d2536acb4908de72b0" + "hash": "0x624be0453b618d359fe39feeb53affc07d118810bb45d44a24a7d451bab567d5" }, "blocknumber": "1", "transactions": [ @@ -2059,7 +2075,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x41de1c6ff6589caea81fd364f0a89ff3800b0f0e3bd603d2536acb4908de72b0", + "lastblockhash": "0x624be0453b618d359fe39feeb53affc07d118810bb45d44a24a7d451bab567d5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2099,7 +2115,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2111,9 +2127,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_3cd183d0bab85fb7]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2144,12 +2161,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0092ca77027ac1b9ca4a5cb57621c139371b077dd8335981de8c9db4a005b7fc4a04cc2a46823ba9ef5e125058016c67aaa54854dc72281150cd1a31ce02a934921a060d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303245c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a03bee59e36e4f614b18f8eafcdad25fb43379438388ce6fbf82816519161e0ebaa074e305b021b31e432b2e3a8f80fbcc4bd528d22b0a213092ed05aa71349de39dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0be072a0a37dad43670554d6ab49af001d3506567facd92c889abd80e0ef785e3a04cc2a46823ba9ef5e125058016c67aaa54854dc72281150cd1a31ce02a934921a060d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303245c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a03bee59e36e4f614b18f8eafcdad25fb43379438388ce6fbf82816519161e0ebaa074e305b021b31e432b2e3a8f80fbcc4bd528d22b0a213092ed05aa71349de39dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x092ca77027ac1b9ca4a5cb57621c139371b077dd8335981de8c9db4a005b7fc4", + "stateRoot": "0xbe072a0a37dad43670554d6ab49af001d3506567facd92c889abd80e0ef785e3", "transactionsTrie": "0x4cc2a46823ba9ef5e125058016c67aaa54854dc72281150cd1a31ce02a934921", "receiptTrie": "0x60d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2157,8 +2174,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03245c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2166,7 +2183,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4479fb554e65baf663de4b950c86360abdceb8214bd1dddab7fadfae60905b38" + "hash": "0xe407444fb492828f316b80b12fbf874cab566155e02c21b76373f4c7a9ea7b04" }, "blocknumber": "1", "transactions": [ @@ -2191,7 +2208,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4479fb554e65baf663de4b950c86360abdceb8214bd1dddab7fadfae60905b38", + "lastblockhash": "0xe407444fb492828f316b80b12fbf874cab566155e02c21b76373f4c7a9ea7b04", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2231,7 +2248,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2243,9 +2260,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_420f2a187ce77035": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_420f2a187ce77035]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2276,12 +2294,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837ceaa02b9f94b53eec56840c51f3286f960f32edcfe09abdd0220af1f2639ef4664d4da0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000022bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0689012990b0ca02775bd9df8145f6c936444b83f54df1f5f274fb4312800a6505dd000ee8ec7b0ea6d72092a3daf0bffbc001a066027d84b8afca376d92300737100ec643b920f5c726945852c74213b24f2ac0a0059b3c8ac597bd7da74db18e0f2c8f35a8af8a9b552e114cc4c388a87f970080c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa017946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325a02b9f94b53eec56840c51f3286f960f32edcfe09abdd0220af1f2639ef4664d4da0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000022bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0689012990b0ca02775bd9df8145f6c936444b83f54df1f5f274fb4312800a6505dd000ee8ec7b0ea6d72092a3daf0bffbc001a066027d84b8afca376d92300737100ec643b920f5c726945852c74213b24f2ac0a0059b3c8ac597bd7da74db18e0f2c8f35a8af8a9b552e114cc4c388a87f970080c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837cea", + "stateRoot": "0x17946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325", "transactionsTrie": "0x2b9f94b53eec56840c51f3286f960f32edcfe09abdd0220af1f2639ef4664d4d", "receiptTrie": "0xddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2289,8 +2307,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326a8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2298,7 +2316,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa2a6c215a3ae2f9622129d76f8c00a7c74a4baa8a16f776cf2723c96ad4167de" + "hash": "0x56646db42f0a74263b905f0056c80d9e1e15763845a38a97d3752d132c1e1190" }, "blocknumber": "1", "transactions": [ @@ -2323,7 +2341,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa2a6c215a3ae2f9622129d76f8c00a7c74a4baa8a16f776cf2723c96ad4167de", + "lastblockhash": "0x56646db42f0a74263b905f0056c80d9e1e15763845a38a97d3752d132c1e1190", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2363,7 +2381,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2375,9 +2393,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_444b73ff54a19b44": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_444b73ff54a19b44]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2408,12 +2427,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d2a59cc9dd3c830b051dc217edd0b42a868fae6b41431a02e1666bda1833b9b1a08b68e65eba37ecde36e3ae469ea1a4ca0730cf32c87545c1df2fbd7419b510f4a0a28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326c00c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e0000000000000000000000000000000000000000000000000000000000000001443e7af5274b52214ea6c775908c54519fea957eecd98069165a8b771082fd51b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa060b350ad63d61979b80b25258e7cc6caf781080222e0209b4a0b074decca874afc5c41de3313d8ed217d905e6ada43c080a09ccdbb5ec0941f399dadd55bf451be3c606cc76f0afac3c1d383a2cfd77f2217a020f6645644bb64019245bfc1b544333ef6f8b897e46f3dc675576fbcb90711c5c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0893b8855abb12e659e47313994ff43661ba4f78052cab9fc8759409bc41b3ad5a08b68e65eba37ecde36e3ae469ea1a4ca0730cf32c87545c1df2fbd7419b510f4a0a28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326c08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e0000000000000000000000000000000000000000000000000000000000000001443e7af5274b52214ea6c775908c54519fea957eecd98069165a8b771082fd51b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa060b350ad63d61979b80b25258e7cc6caf781080222e0209b4a0b074decca874afc5c41de3313d8ed217d905e6ada43c080a09ccdbb5ec0941f399dadd55bf451be3c606cc76f0afac3c1d383a2cfd77f2217a020f6645644bb64019245bfc1b544333ef6f8b897e46f3dc675576fbcb90711c5c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd2a59cc9dd3c830b051dc217edd0b42a868fae6b41431a02e1666bda1833b9b1", + "stateRoot": "0x893b8855abb12e659e47313994ff43661ba4f78052cab9fc8759409bc41b3ad5", "transactionsTrie": "0x8b68e65eba37ecde36e3ae469ea1a4ca0730cf32c87545c1df2fbd7419b510f4", "receiptTrie": "0xa28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2421,8 +2440,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326c0", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2430,7 +2449,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x617bb359f99934463a0d4913db6650f53d2a58818ead69b693ca2f4117c6e576" + "hash": "0x3ed539af410f9fa68a77579faaea8cdc54e9cb1e77a6cca8a4d3cadeda3c2d76" }, "blocknumber": "1", "transactions": [ @@ -2455,7 +2474,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x617bb359f99934463a0d4913db6650f53d2a58818ead69b693ca2f4117c6e576", + "lastblockhash": "0x3ed539af410f9fa68a77579faaea8cdc54e9cb1e77a6cca8a4d3cadeda3c2d76", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2495,7 +2514,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2507,9 +2526,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_53a9bdf4f75196da]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2540,12 +2560,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f3883ffa14957b40eb562671dcea363bd5c7fc6a7b66f1bfcf0c46f31c80d38a02d20c80c52cbd19954aa77bf2f5512aceb1e572f72e74376ca6c02226f7b64fba0d0179d1c2909b1b81337f65599be06808e23ec2e973e6f1433ba40d73f09e983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830325d00c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d3630673eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a07988bf664125ab6a3164310a5eacfeb471f2badb877190fefcadb628ce91d71ea045a1135742920b01a39c9de56a92b53c6018d3c9a1aa423f7888d870506f0ac4c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa036c042bdb09553fbbbb9d9c9963506345f8c68f23c1bc0c9ba2a31d7e312942fa02d20c80c52cbd19954aa77bf2f5512aceb1e572f72e74376ca6c02226f7b64fba0d0179d1c2909b1b81337f65599be06808e23ec2e973e6f1433ba40d73f09e983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830325d08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d3630673eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a07988bf664125ab6a3164310a5eacfeb471f2badb877190fefcadb628ce91d71ea045a1135742920b01a39c9de56a92b53c6018d3c9a1aa423f7888d870506f0ac4c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7f3883ffa14957b40eb562671dcea363bd5c7fc6a7b66f1bfcf0c46f31c80d38", + "stateRoot": "0x36c042bdb09553fbbbb9d9c9963506345f8c68f23c1bc0c9ba2a31d7e312942f", "transactionsTrie": "0x2d20c80c52cbd19954aa77bf2f5512aceb1e572f72e74376ca6c02226f7b64fb", "receiptTrie": "0xd0179d1c2909b1b81337f65599be06808e23ec2e973e6f1433ba40d73f09e983", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2553,8 +2573,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0325d0", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2562,7 +2582,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb822f7ae7e51e4d2292e49525b4aa3143172b05b7341aae712b07fc8b0bf1ae2" + "hash": "0xca00f5705aab2f8144a1194c8dea4a2c2a1672574c3e0b416812c13f29fa19e5" }, "blocknumber": "1", "transactions": [ @@ -2587,7 +2607,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb822f7ae7e51e4d2292e49525b4aa3143172b05b7341aae712b07fc8b0bf1ae2", + "lastblockhash": "0xca00f5705aab2f8144a1194c8dea4a2c2a1672574c3e0b416812c13f29fa19e5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2627,7 +2647,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2639,9 +2659,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_585454b31673dd62": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_585454b31673dd62]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2672,12 +2693,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d46a4550e8ad1b69c10e07338f772b34c3365beade08f7bbffbeab6c9335524aa0282b431779e1edd7b75fd86161bdd6e347546fad2b2284d67f952e5755adb094a096b754aa64debb4f75196685c39339e3cfc406785621fa534c4690b8f3449dccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303230c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a061f61fd735c0e515d2d6f3cbbbc9d3a8cde28c0bc8c4b46ac6e0975a0b9d78eba043a0f69d32510e18b654902012185f7454f8528aafed5ff1067c6f2342bc16f2c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa088ac027edce4f61ed10d589b7f15d68bd32850fb0e1ef7bcfc2b13e29e5bf189a0282b431779e1edd7b75fd86161bdd6e347546fad2b2284d67f952e5755adb094a096b754aa64debb4f75196685c39339e3cfc406785621fa534c4690b8f3449dccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303230c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a061f61fd735c0e515d2d6f3cbbbc9d3a8cde28c0bc8c4b46ac6e0975a0b9d78eba043a0f69d32510e18b654902012185f7454f8528aafed5ff1067c6f2342bc16f2c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd46a4550e8ad1b69c10e07338f772b34c3365beade08f7bbffbeab6c9335524a", + "stateRoot": "0x88ac027edce4f61ed10d589b7f15d68bd32850fb0e1ef7bcfc2b13e29e5bf189", "transactionsTrie": "0x282b431779e1edd7b75fd86161bdd6e347546fad2b2284d67f952e5755adb094", "receiptTrie": "0x96b754aa64debb4f75196685c39339e3cfc406785621fa534c4690b8f3449dcc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2685,8 +2706,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03230c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2694,7 +2715,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xaa57f81b8a5c24c452e8946c997713aa13d839c5d9432d876fcc53ea8467e09e" + "hash": "0xc61667b31a515f59f5c0616720daea12b80c19145022658d3dadfeaea54aa995" }, "blocknumber": "1", "transactions": [ @@ -2719,7 +2740,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xaa57f81b8a5c24c452e8946c997713aa13d839c5d9432d876fcc53ea8467e09e", + "lastblockhash": "0xc61667b31a515f59f5c0616720daea12b80c19145022658d3dadfeaea54aa995", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2759,7 +2780,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2771,9 +2792,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_7db4f140a955dd1a]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2804,12 +2826,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa016bb0b491c8bb7563e8b45b262e9ffbb52f784d3d3b2b311b4ea770b3327dbd4a00d60273b5913393d18b1dee6f0bacf412e39d5f0a17635fcf060e97c1c1acf21a0d9e5a739c73b28835dce3f225dee047f95fe57369e598630dd3a897c7623ece8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328040c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000058cdc98c4c44791bb8ba7e58a80324ef8c021c79c68e253c430fa2663188f7f2b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a9506a8dc7f3f720a592a79a4e711e28d8596854bac66b9cb2d6d361704f1735442d47ea09fda5e0984f0928ce7d2f5f6c080a07a8a5d3c14755c2b79477b0f01e07472e1efe376361f355d19c79fae5a944ef5a06dc7422c4897f446a3b9775e688ffcd21a7070a4b4e1fdbb9b676d97e7a49e10c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d9bd60c34de42ec5071046608f830e0c30b15d08d20ff609f57ecb6037ffdb04a00d60273b5913393d18b1dee6f0bacf412e39d5f0a17635fcf060e97c1c1acf21a0d9e5a739c73b28835dce3f225dee047f95fe57369e598630dd3a897c7623ece8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328048203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000058cdc98c4c44791bb8ba7e58a80324ef8c021c79c68e253c430fa2663188f7f2b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a9506a8dc7f3f720a592a79a4e711e28d8596854bac66b9cb2d6d361704f1735442d47ea09fda5e0984f0928ce7d2f5f6c080a07a8a5d3c14755c2b79477b0f01e07472e1efe376361f355d19c79fae5a944ef5a06dc7422c4897f446a3b9775e688ffcd21a7070a4b4e1fdbb9b676d97e7a49e10c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x16bb0b491c8bb7563e8b45b262e9ffbb52f784d3d3b2b311b4ea770b3327dbd4", + "stateRoot": "0xd9bd60c34de42ec5071046608f830e0c30b15d08d20ff609f57ecb6037ffdb04", "transactionsTrie": "0x0d60273b5913393d18b1dee6f0bacf412e39d5f0a17635fcf060e97c1c1acf21", "receiptTrie": "0xd9e5a739c73b28835dce3f225dee047f95fe57369e598630dd3a897c7623ece8", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2817,8 +2839,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032804", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2826,7 +2848,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd887114b3cad6bd08b4df188cda62eb9953c036c2f19a7696267e9aefb08c119" + "hash": "0x2664d49e6d0aadd82d4ad2efdade8915436853177c7b5f5376473eded0349fe3" }, "blocknumber": "1", "transactions": [ @@ -2851,7 +2873,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd887114b3cad6bd08b4df188cda62eb9953c036c2f19a7696267e9aefb08c119", + "lastblockhash": "0x2664d49e6d0aadd82d4ad2efdade8915436853177c7b5f5376473eded0349fe3", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2891,7 +2913,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2903,9 +2925,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_83e53423a2dd93fe]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2936,12 +2959,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d43e78e392975e2508273a97b39ee52dfa7d0daa6bef48c460fd310610e53474a0a16b3a4a571e5195ef7804b6f84fcfa238977aba365b76afa65c3d9bd8f74370a051f2f35a1066da98366d1ae0f70861fa89df30d6ab4d0f859ac3cce427c25ef3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326840c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06b0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc080a055927481d511a61d08b3309de9287ef82a40a2b87bed2605ffbcfaad994340b0a0401e884cd033983f02c4af36b799209f1c6bb4f7673c3a4cd384d7576904bafec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c18c095dfa8390e7c7f86f275a8ca55fc8f766ea735088a9203b10a277eccd76a0a16b3a4a571e5195ef7804b6f84fcfa238977aba365b76afa65c3d9bd8f74370a051f2f35a1066da98366d1ae0f70861fa89df30d6ab4d0f859ac3cce427c25ef3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326848203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06b0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc080a055927481d511a61d08b3309de9287ef82a40a2b87bed2605ffbcfaad994340b0a0401e884cd033983f02c4af36b799209f1c6bb4f7673c3a4cd384d7576904bafec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd43e78e392975e2508273a97b39ee52dfa7d0daa6bef48c460fd310610e53474", + "stateRoot": "0xc18c095dfa8390e7c7f86f275a8ca55fc8f766ea735088a9203b10a277eccd76", "transactionsTrie": "0xa16b3a4a571e5195ef7804b6f84fcfa238977aba365b76afa65c3d9bd8f74370", "receiptTrie": "0x51f2f35a1066da98366d1ae0f70861fa89df30d6ab4d0f859ac3cce427c25ef3", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2949,8 +2972,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032684", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2958,7 +2981,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xcbbfcccf71790e4fe962844819ac39ee5aebc6d84d4d37588cc495594babd653" + "hash": "0x68032f3dc54a9cb8559ea87544106a609b29911799f4e0d33310a26fbea5abff" }, "blocknumber": "1", "transactions": [ @@ -2983,7 +3006,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xcbbfcccf71790e4fe962844819ac39ee5aebc6d84d4d37588cc495594babd653", + "lastblockhash": "0x68032f3dc54a9cb8559ea87544106a609b29911799f4e0d33310a26fbea5abff", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3023,7 +3046,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -3035,9 +3058,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_9b24f8997145435c": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b24f8997145435c]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3068,12 +3092,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ded63c14301d2a81da551b4c4a311bb038e1f24b5932804eec0a811898b0a45ba07c2dddac5f40b2219f1c94206c102b06692900b886114a3ac5bcc89c5d0f8c43a05d1e41d4bf154602e8b08528262ac05321dbcf9598e7e2a5bcca123f41485f6cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830325340c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556b9241c6816af6388d1014cd4d7dd21662a6e3d47f96c0257bce642b70e8e375839a880864638669c6a709b414ab8bffcc001a0ca15826ab5ed6a9933fd78b03f789b1657ee2cbcd5c266aa8afbf776db95f402a040323e267039f7d1a2f7d11cf3792a0109521b9414f8026f08ac5edbaf345860c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0adb9377fba125f44e71301e5e2350faa2347e0e5dccbfe4f7d6730ce71c5ce13a07c2dddac5f40b2219f1c94206c102b06692900b886114a3ac5bcc89c5d0f8c43a05d1e41d4bf154602e8b08528262ac05321dbcf9598e7e2a5bcca123f41485f6cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830325348203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556b9241c6816af6388d1014cd4d7dd21662a6e3d47f96c0257bce642b70e8e375839a880864638669c6a709b414ab8bffcc001a0ca15826ab5ed6a9933fd78b03f789b1657ee2cbcd5c266aa8afbf776db95f402a040323e267039f7d1a2f7d11cf3792a0109521b9414f8026f08ac5edbaf345860c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xded63c14301d2a81da551b4c4a311bb038e1f24b5932804eec0a811898b0a45b", + "stateRoot": "0xadb9377fba125f44e71301e5e2350faa2347e0e5dccbfe4f7d6730ce71c5ce13", "transactionsTrie": "0x7c2dddac5f40b2219f1c94206c102b06692900b886114a3ac5bcc89c5d0f8c43", "receiptTrie": "0x5d1e41d4bf154602e8b08528262ac05321dbcf9598e7e2a5bcca123f41485f6c", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3081,8 +3105,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032534", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3090,7 +3114,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xecca0c69b89050ec6821285a73e1d60d3c3674ee18d2df33d3c53c437a27e097" + "hash": "0xa4f32ce120e23ae4580f659695c02258f8115a5d5e03a266cc4f77d4aab54720" }, "blocknumber": "1", "transactions": [ @@ -3115,7 +3139,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xecca0c69b89050ec6821285a73e1d60d3c3674ee18d2df33d3c53c437a27e097", + "lastblockhash": "0xa4f32ce120e23ae4580f659695c02258f8115a5d5e03a266cc4f77d4aab54720", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3155,7 +3179,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -3167,9 +3191,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_9b754afb690c47e1": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_9b754afb690c47e1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3200,12 +3225,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0092ca77027ac1b9ca4a5cb57621c139371b077dd8335981de8c9db4a005b7fc4a0066d0b363c0bb2276ca921f5f21c99458474c5cf5575847e8e2d346fdb8b5a35a060d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303245c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000273eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a071beb5a23407fea3443dd51aa5a26f71159ba51dee33fe8d498ac86938dca41fa02a04e2fcf01f80c621c1e4747db039792fec223c7d25ecb1e53ec6dc05b435c3c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0be072a0a37dad43670554d6ab49af001d3506567facd92c889abd80e0ef785e3a0066d0b363c0bb2276ca921f5f21c99458474c5cf5575847e8e2d346fdb8b5a35a060d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303245c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000273eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a071beb5a23407fea3443dd51aa5a26f71159ba51dee33fe8d498ac86938dca41fa02a04e2fcf01f80c621c1e4747db039792fec223c7d25ecb1e53ec6dc05b435c3c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x092ca77027ac1b9ca4a5cb57621c139371b077dd8335981de8c9db4a005b7fc4", + "stateRoot": "0xbe072a0a37dad43670554d6ab49af001d3506567facd92c889abd80e0ef785e3", "transactionsTrie": "0x066d0b363c0bb2276ca921f5f21c99458474c5cf5575847e8e2d346fdb8b5a35", "receiptTrie": "0x60d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3213,8 +3238,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03245c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3222,7 +3247,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x164428cb64d1db206b96e4b17b944bb87a613123d0307305e27961da9a20b40a" + "hash": "0x599e91eee9cc4484cc4eb260a7c0d0b4033a7cd3872a83ad473aa04ab787f4c3" }, "blocknumber": "1", "transactions": [ @@ -3247,7 +3272,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x164428cb64d1db206b96e4b17b944bb87a613123d0307305e27961da9a20b40a", + "lastblockhash": "0x599e91eee9cc4484cc4eb260a7c0d0b4033a7cd3872a83ad473aa04ab787f4c3", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3287,7 +3312,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -3299,9 +3324,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_a0be66af9a97ea52]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3332,12 +3358,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04a133c11db920fba4882b5f6f8b1a5fca6225d9ccb55e8acabd65c098e21e283a0fceba5b9017f510fbc5e63371919d3b97e09c8e4645d8aac480f54c522d29281a0091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830323180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0f5a0c88b6ab5779b674f50f35ff6a84e9de6a974a504e57f2831c07964432d3ca00316a20572a66083f1bd4e473ffbfdaff0ae5fdd62491052b411f92be107e260c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa034cf7f3a8c9d1c2c21c70a96decaf8f1b6a20baea9ae1e34f6ab2578f19536e5a0fceba5b9017f510fbc5e63371919d3b97e09c8e4645d8aac480f54c522d29281a0091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830323188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0f5a0c88b6ab5779b674f50f35ff6a84e9de6a974a504e57f2831c07964432d3ca00316a20572a66083f1bd4e473ffbfdaff0ae5fdd62491052b411f92be107e260c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4a133c11db920fba4882b5f6f8b1a5fca6225d9ccb55e8acabd65c098e21e283", + "stateRoot": "0x34cf7f3a8c9d1c2c21c70a96decaf8f1b6a20baea9ae1e34f6ab2578f19536e5", "transactionsTrie": "0xfceba5b9017f510fbc5e63371919d3b97e09c8e4645d8aac480f54c522d29281", "receiptTrie": "0x091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3345,8 +3371,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032318", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3354,7 +3380,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xfaf98fd3423a87ff451d8df58ace9e7a133a156daf21e246b36a55a4598ee45e" + "hash": "0x8df2b06e8d682c604c988707973104ecc5e5db38be9a1b182c38df4dc6431a33" }, "blocknumber": "1", "transactions": [ @@ -3379,7 +3405,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xfaf98fd3423a87ff451d8df58ace9e7a133a156daf21e246b36a55a4598ee45e", + "lastblockhash": "0x8df2b06e8d682c604c988707973104ecc5e5db38be9a1b182c38df4dc6431a33", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3419,7 +3445,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -3431,9 +3457,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_af669445747d2585": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af669445747d2585]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3464,12 +3491,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00688fee8a867e36eb36eff84e1de8c36541a78c7671144321f8ae4ca01820c34a0dc767e0a8a916f1855dffa8a6269ad01d5face5490cae4657ff5b5864ee5f1dca092785c65bcd1aeb3bb581e4b3ae8387972fb5b894807002c7748608f81dbcde4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328340c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066c28d6edfea2f5e1638cb1a8be8197549d52e133fa9dae87e52abb45f7b192ddb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a8a46b67dcba4e3aa66f9952be69e1ecbc24e21d42b1df2bfe1c8e28431c6221a3f1d09808042f5624e857710cb24fb69c080a0d83602a0880d4a65094b22792227cf6848651300e7ef63463afb4cb55fb85552a016222311e5b80b643b9b0a13e8acac14a734a535116b7fcd2ec7b473e45c5c2dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02a843ff2242aa3e65856aaa4de177b23ee0c71a0ea2c8e689f25ade22627aae3a0dc767e0a8a916f1855dffa8a6269ad01d5face5490cae4657ff5b5864ee5f1dca092785c65bcd1aeb3bb581e4b3ae8387972fb5b894807002c7748608f81dbcde4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328348203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066c28d6edfea2f5e1638cb1a8be8197549d52e133fa9dae87e52abb45f7b192ddb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a8a46b67dcba4e3aa66f9952be69e1ecbc24e21d42b1df2bfe1c8e28431c6221a3f1d09808042f5624e857710cb24fb69c080a0d83602a0880d4a65094b22792227cf6848651300e7ef63463afb4cb55fb85552a016222311e5b80b643b9b0a13e8acac14a734a535116b7fcd2ec7b473e45c5c2dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0688fee8a867e36eb36eff84e1de8c36541a78c7671144321f8ae4ca01820c34", + "stateRoot": "0x2a843ff2242aa3e65856aaa4de177b23ee0c71a0ea2c8e689f25ade22627aae3", "transactionsTrie": "0xdc767e0a8a916f1855dffa8a6269ad01d5face5490cae4657ff5b5864ee5f1dc", "receiptTrie": "0x92785c65bcd1aeb3bb581e4b3ae8387972fb5b894807002c7748608f81dbcde4", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3477,8 +3504,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032834", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3486,7 +3513,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9c08c8139a3a49eef3e9bd0217bd08e36a3583c8b980cc3f9b151046036cf001" + "hash": "0x6b6536eba149feb2fc9862c7a25de60ec219807731b4b852a5408db25b7323ce" }, "blocknumber": "1", "transactions": [ @@ -3511,7 +3538,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9c08c8139a3a49eef3e9bd0217bd08e36a3583c8b980cc3f9b151046036cf001", + "lastblockhash": "0x6b6536eba149feb2fc9862c7a25de60ec219807731b4b852a5408db25b7323ce", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3551,7 +3578,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -3563,9 +3590,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_af8b75f664ed7d43]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3596,12 +3624,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837ceaa0a9eeb1b04f9338668d4d6042930fb62951446d5fe7b67796d7f1d960b9eec3e4a0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef000000000000000000000000000000000000000000000000000000000000000264d3b6baf69395bde2abd1d43f99be66bc64581234fd363e2ae3a0d419cfc3fc93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556893acd46552b81cc9e5ff6ca03dad873588f2c61031781367cfea2a2be4ef3090035623338711b3cf7eff4b4524df742c001a06ebc2dcdecb28723dca8f5b6aeeedd1cefe9e86572dca08fcc72bcd9f35e05dba0592f09e687f9c8648ae29638a5a3b5de87f56221124789cc7d13db24729aa91ac0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa017946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325a0a9eeb1b04f9338668d4d6042930fb62951446d5fe7b67796d7f1d960b9eec3e4a0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef000000000000000000000000000000000000000000000000000000000000000264d3b6baf69395bde2abd1d43f99be66bc64581234fd363e2ae3a0d419cfc3fc93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556893acd46552b81cc9e5ff6ca03dad873588f2c61031781367cfea2a2be4ef3090035623338711b3cf7eff4b4524df742c001a06ebc2dcdecb28723dca8f5b6aeeedd1cefe9e86572dca08fcc72bcd9f35e05dba0592f09e687f9c8648ae29638a5a3b5de87f56221124789cc7d13db24729aa91ac0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837cea", + "stateRoot": "0x17946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325", "transactionsTrie": "0xa9eeb1b04f9338668d4d6042930fb62951446d5fe7b67796d7f1d960b9eec3e4", "receiptTrie": "0xddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3609,8 +3637,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326a8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3618,7 +3646,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd8f6b8b21e5311fcc1c99b52963084ffa5ecc92fac53a2b083e4f3b5de63ea14" + "hash": "0xde933f9934cfdce1adc2905201b53c6939a6a8036fad518fac4e413eea97071f" }, "blocknumber": "1", "transactions": [ @@ -3643,7 +3671,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd8f6b8b21e5311fcc1c99b52963084ffa5ecc92fac53a2b083e4f3b5de63ea14", + "lastblockhash": "0xde933f9934cfdce1adc2905201b53c6939a6a8036fad518fac4e413eea97071f", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3683,7 +3711,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -3695,9 +3723,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_b6cb6698327d9835": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6cb6698327d9835]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3728,12 +3757,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d2a59cc9dd3c830b051dc217edd0b42a868fae6b41431a02e1666bda1833b9b1a03d43f624f48c1349027e94031005356ece1e40b1459988b4fe41b2fd042af890a0a28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326c00c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e00000000000000000000000000000000000000000000000000000000000000026a75e4fe63e5e148c853462a680c3e3ccedea34719d28f19bf1b35ae4eea37d6b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa38758fca85407078c0a7e5fd6d38b34340c809baa0e1fed9deaabb11aa503062acbbe23fcbe620a21b40a83bfa71b89c080a0a0abeba9143e17adc9cd5a12d68000eba14d9d683f89853f4fcd0e116f0ee17aa02fb0bd123da794416725d8169e29b1e453a2c6a541b3c67accd32da1cc7ce4b7c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0893b8855abb12e659e47313994ff43661ba4f78052cab9fc8759409bc41b3ad5a03d43f624f48c1349027e94031005356ece1e40b1459988b4fe41b2fd042af890a0a28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326c08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e00000000000000000000000000000000000000000000000000000000000000026a75e4fe63e5e148c853462a680c3e3ccedea34719d28f19bf1b35ae4eea37d6b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa38758fca85407078c0a7e5fd6d38b34340c809baa0e1fed9deaabb11aa503062acbbe23fcbe620a21b40a83bfa71b89c080a0a0abeba9143e17adc9cd5a12d68000eba14d9d683f89853f4fcd0e116f0ee17aa02fb0bd123da794416725d8169e29b1e453a2c6a541b3c67accd32da1cc7ce4b7c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd2a59cc9dd3c830b051dc217edd0b42a868fae6b41431a02e1666bda1833b9b1", + "stateRoot": "0x893b8855abb12e659e47313994ff43661ba4f78052cab9fc8759409bc41b3ad5", "transactionsTrie": "0x3d43f624f48c1349027e94031005356ece1e40b1459988b4fe41b2fd042af890", "receiptTrie": "0xa28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3741,8 +3770,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326c0", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3750,7 +3779,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5cf5be83f19e2c120fa75afe03c8e6dc5c4fe0c318d22d27d0c2d2fd254dee68" + "hash": "0x85c52baa78a1e4c74f83d42ea588d054b599311278084ae55138f49c816117bd" }, "blocknumber": "1", "transactions": [ @@ -3775,7 +3804,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x5cf5be83f19e2c120fa75afe03c8e6dc5c4fe0c318d22d27d0c2d2fd254dee68", + "lastblockhash": "0x85c52baa78a1e4c74f83d42ea588d054b599311278084ae55138f49c816117bd", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3815,7 +3844,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -3827,9 +3856,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_b6ec3736f9ff2c62]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3860,12 +3890,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837ceaa0e78af4c18224a6188bf25628dd7a51a47f24f59ca2305d9acb071f2055585ec8a0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556a256a681861974cdf6b116467044aa75c85b01076423a92c3335b93d10bf2fcb99b943a53adc1ab8feb6b475c4688948c080a06bf05e3e75e53f4286db33f2421a91d33a3ce5fb0a171ec361085576ad955c16a053384e9cd480afc3031854a546ef73a97f743e1779a457b35501f2e6e2b990a4c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa017946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325a0e78af4c18224a6188bf25628dd7a51a47f24f59ca2305d9acb071f2055585ec8a0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556a256a681861974cdf6b116467044aa75c85b01076423a92c3335b93d10bf2fcb99b943a53adc1ab8feb6b475c4688948c080a06bf05e3e75e53f4286db33f2421a91d33a3ce5fb0a171ec361085576ad955c16a053384e9cd480afc3031854a546ef73a97f743e1779a457b35501f2e6e2b990a4c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837cea", + "stateRoot": "0x17946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325", "transactionsTrie": "0xe78af4c18224a6188bf25628dd7a51a47f24f59ca2305d9acb071f2055585ec8", "receiptTrie": "0xddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3873,8 +3903,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326a8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3882,7 +3912,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa88ee0dfc69890e287c3f3d7f3f7e91a25b712ad8c547b9dff238450a90a57ab" + "hash": "0x3fd21cf64396ff5832c953af1055113d0de5b6a136b5f56e3c9c0af1363b9245" }, "blocknumber": "1", "transactions": [ @@ -3907,7 +3937,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa88ee0dfc69890e287c3f3d7f3f7e91a25b712ad8c547b9dff238450a90a57ab", + "lastblockhash": "0x3fd21cf64396ff5832c953af1055113d0de5b6a136b5f56e3c9c0af1363b9245", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3947,7 +3977,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -3959,9 +3989,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_becf2e1641bbd4e6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -3992,12 +4023,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa005a3cb7e0ea279208609f5fd166e30f7d7e6233826c14aecc43b0fad5062dad1a05db260e1bc4bd3ce628ca8eca95f628b20e83134863db4588dad6af1f87ba591a04edfaeec9aa2d668aa1fe654b5bb5a19ffd6ea9718e245f57c193e6384bb858eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830325c40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c05eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c6273eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a075b3519d3798682ae97e033ea62426cac14f35dbb2ac2d3d6c23863a0f8c500ca022d468709c36b066366015decc5579f4592252ec77f876f5ea562fbc1d2e3733c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa066ccd6525d7ef57c31012cf56bbbda96f4e1469a79ad06b12fc934dd1383b6f6a05db260e1bc4bd3ce628ca8eca95f628b20e83134863db4588dad6af1f87ba591a04edfaeec9aa2d668aa1fe654b5bb5a19ffd6ea9718e245f57c193e6384bb858eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830325c48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c05eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c6273eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a075b3519d3798682ae97e033ea62426cac14f35dbb2ac2d3d6c23863a0f8c500ca022d468709c36b066366015decc5579f4592252ec77f876f5ea562fbc1d2e3733c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x05a3cb7e0ea279208609f5fd166e30f7d7e6233826c14aecc43b0fad5062dad1", + "stateRoot": "0x66ccd6525d7ef57c31012cf56bbbda96f4e1469a79ad06b12fc934dd1383b6f6", "transactionsTrie": "0x5db260e1bc4bd3ce628ca8eca95f628b20e83134863db4588dad6af1f87ba591", "receiptTrie": "0x4edfaeec9aa2d668aa1fe654b5bb5a19ffd6ea9718e245f57c193e6384bb858e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4005,8 +4036,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0325c4", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4014,7 +4045,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9d9577c280d3f15aabc74cbbf76eea93a2c66f3cbc08f9ce2ee62f4af457cfc1" + "hash": "0xc21551978c0b655fd8284ac663a7d6f99bc848b8d5abc995c7cdd91773f70a33" }, "blocknumber": "1", "transactions": [ @@ -4039,7 +4070,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9d9577c280d3f15aabc74cbbf76eea93a2c66f3cbc08f9ce2ee62f4af457cfc1", + "lastblockhash": "0xc21551978c0b655fd8284ac663a7d6f99bc848b8d5abc995c7cdd91773f70a33", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -4079,7 +4110,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -4091,9 +4122,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c3d4322ec17fe7cd]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4124,12 +4156,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0743fe046e9b8d686844a4f68f0b8af10f37bf2e64d131506c5417e048f5785d6a042814b49a3b2b951f3854a765e6fc5cf5c639083e40c5ffa2202356905f921f9a0490b5c8fc35fec021870f881c330c6034e503b53179152e33e6794d2a819e605b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320cc0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a01010fd3a61c3d74461450afa223aa148e5eb10993e04e942635e293ceb5fa373a04b3244a006b52d7d9b301b8f6854c428bc129821f52887efff046aa7026afef6c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa066447e1d6d3e43b137aa19286fa360e57b556785452c322cae77f29d0a2aaac1a042814b49a3b2b951f3854a765e6fc5cf5c639083e40c5ffa2202356905f921f9a0490b5c8fc35fec021870f881c330c6034e503b53179152e33e6794d2a819e605b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320cc8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a01010fd3a61c3d74461450afa223aa148e5eb10993e04e942635e293ceb5fa373a04b3244a006b52d7d9b301b8f6854c428bc129821f52887efff046aa7026afef6c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x743fe046e9b8d686844a4f68f0b8af10f37bf2e64d131506c5417e048f5785d6", + "stateRoot": "0x66447e1d6d3e43b137aa19286fa360e57b556785452c322cae77f29d0a2aaac1", "transactionsTrie": "0x42814b49a3b2b951f3854a765e6fc5cf5c639083e40c5ffa2202356905f921f9", "receiptTrie": "0x490b5c8fc35fec021870f881c330c6034e503b53179152e33e6794d2a819e605", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4137,8 +4169,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0320cc", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4146,7 +4178,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x8d2ccab0973120f15fc7ca4924ba94818236ac335122c7c425b5ea0f2d078d7c" + "hash": "0xcab40a890647bdcb42363bda309525ed738ca83543be46f7a5a3e31bef7a12d0" }, "blocknumber": "1", "transactions": [ @@ -4171,7 +4203,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x8d2ccab0973120f15fc7ca4924ba94818236ac335122c7c425b5ea0f2d078d7c", + "lastblockhash": "0xcab40a890647bdcb42363bda309525ed738ca83543be46f7a5a3e31bef7a12d0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -4211,7 +4243,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -4223,9 +4255,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_c5e1490d672d026d": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_c5e1490d672d026d]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4256,12 +4289,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00688fee8a867e36eb36eff84e1de8c36541a78c7671144321f8ae4ca01820c34a057f28c6df7f44e82f077d2938a5e1cc47e0792a402342a6ba6a098b3d8b8d341a092785c65bcd1aeb3bb581e4b3ae8387972fb5b894807002c7748608f81dbcde4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328340c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d3630624d25032e67a7e6a4910df5834b8fe70e6bcfeeac0352434196bdf4b2485d5a18f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7873033e038326e87ed3e1276fd140253fa08e9fc25fb2d9a98527fc22a2c9612fbeafdad446cbc7bcdbdcd780af2c16ac001a0f37cf93c89b3829e2986e16f053fea921478311eb3e6569a76915be6c21e1159a048df2f8978a59ccaee1758db430b78c3e8d5d069a59470cce9e442de0eb840fac0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02a843ff2242aa3e65856aaa4de177b23ee0c71a0ea2c8e689f25ade22627aae3a057f28c6df7f44e82f077d2938a5e1cc47e0792a402342a6ba6a098b3d8b8d341a092785c65bcd1aeb3bb581e4b3ae8387972fb5b894807002c7748608f81dbcde4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328348203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d3630624d25032e67a7e6a4910df5834b8fe70e6bcfeeac0352434196bdf4b2485d5a18f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7873033e038326e87ed3e1276fd140253fa08e9fc25fb2d9a98527fc22a2c9612fbeafdad446cbc7bcdbdcd780af2c16ac001a0f37cf93c89b3829e2986e16f053fea921478311eb3e6569a76915be6c21e1159a048df2f8978a59ccaee1758db430b78c3e8d5d069a59470cce9e442de0eb840fac0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0688fee8a867e36eb36eff84e1de8c36541a78c7671144321f8ae4ca01820c34", + "stateRoot": "0x2a843ff2242aa3e65856aaa4de177b23ee0c71a0ea2c8e689f25ade22627aae3", "transactionsTrie": "0x57f28c6df7f44e82f077d2938a5e1cc47e0792a402342a6ba6a098b3d8b8d341", "receiptTrie": "0x92785c65bcd1aeb3bb581e4b3ae8387972fb5b894807002c7748608f81dbcde4", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4269,8 +4302,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032834", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4278,7 +4311,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd5bb990b05121d0fe10307d8ec8f5cac95c3b13353f6e542d892143722cc2cb8" + "hash": "0x50c2e225a22b84e1ff2d44f9625a65c97a8474e3648aff8193e8a5a8d6bd9675" }, "blocknumber": "1", "transactions": [ @@ -4303,7 +4336,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd5bb990b05121d0fe10307d8ec8f5cac95c3b13353f6e542d892143722cc2cb8", + "lastblockhash": "0x50c2e225a22b84e1ff2d44f9625a65c97a8474e3648aff8193e8a5a8d6bd9675", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -4343,7 +4376,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -4355,9 +4388,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_cae5d3491190b777": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_cae5d3491190b777]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4388,12 +4422,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa045697ab25faa4cb90845238465e3d80ce516f41c828bbea47ed79a44fdbd5c98a0d38fd566039239bd104f88943f3bada9cfff76e4d3a5d406be66978d405c1002a0578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303281c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c622c9ae4f1d6d08558d7027df9cc6b248c21290075d2c0df8a4084d02090b3fa14b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193ab059c60125debbbf29d041bac20fd853951b64b5f31bfe2fa825e18ff49a259953e734b3d57119ae66f7bd79de3027f6c001a03efcc8ddc2baca10773b20c3ebf8690d1c5e6e4225db402b48c9d1e139db59e7a046ce90989394e8385be02ffaff09f729bbff0262000a5d074b2e37f838bce594c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa039aa9132a0c0c010df0605442da287cff3493aa3c1f4caf7f7cea7f9d908e956a0d38fd566039239bd104f88943f3bada9cfff76e4d3a5d406be66978d405c1002a0578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303281c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c622c9ae4f1d6d08558d7027df9cc6b248c21290075d2c0df8a4084d02090b3fa14b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193ab059c60125debbbf29d041bac20fd853951b64b5f31bfe2fa825e18ff49a259953e734b3d57119ae66f7bd79de3027f6c001a03efcc8ddc2baca10773b20c3ebf8690d1c5e6e4225db402b48c9d1e139db59e7a046ce90989394e8385be02ffaff09f729bbff0262000a5d074b2e37f838bce594c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x45697ab25faa4cb90845238465e3d80ce516f41c828bbea47ed79a44fdbd5c98", + "stateRoot": "0x39aa9132a0c0c010df0605442da287cff3493aa3c1f4caf7f7cea7f9d908e956", "transactionsTrie": "0xd38fd566039239bd104f88943f3bada9cfff76e4d3a5d406be66978d405c1002", "receiptTrie": "0x578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4401,8 +4435,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03281c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4410,7 +4444,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4bf94ef7add0777b5aadd0f5207d34dd252da44b3820dba57de924be58d4df39" + "hash": "0xc4365186c47694a3356c154a487cc29e3823a61dba125c17797f057498200a43" }, "blocknumber": "1", "transactions": [ @@ -4435,7 +4469,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4bf94ef7add0777b5aadd0f5207d34dd252da44b3820dba57de924be58d4df39", + "lastblockhash": "0xc4365186c47694a3356c154a487cc29e3823a61dba125c17797f057498200a43", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -4475,7 +4509,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -4487,9 +4521,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_d0992bc0387790a4": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d0992bc0387790a4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4520,12 +4555,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b5fb155286d38e5d9a3a01251b3c3c6207217d84aa806abdeefaf029843896b0a0fa5cbef006f8526c97aea2df1f6d7da6968f04db55c9121be3cd1a90b4401309a0ee652a06815a432d5f2b3e9ecff47f1da5ea293bca394f6d08fc63db91569906b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328280c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c624882cf0609af8c7cd4c256e63a35838c95a9ebbf6122540ab344b42fd66d32e18f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7987ea6df69bbe97c23e0dd948cf2d4490824ba7fea5af812721b2393354b0810a9dba2c231ea7ae30f26c412c7ea6e3ac001a00373cb4a98e39283abf022af09090498258b499a792ba82320d7aa6daf8ed3cfa06be1234fe690f65f4490f56675eaa086bc965e52fdc377778081d7343a2ef98dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06e457e50fcb3580815c1a36f34e7e7fc49751cb90489fe54eaf49360baa37e3aa0fa5cbef006f8526c97aea2df1f6d7da6968f04db55c9121be3cd1a90b4401309a0ee652a06815a432d5f2b3e9ecff47f1da5ea293bca394f6d08fc63db91569906b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830328288203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c624882cf0609af8c7cd4c256e63a35838c95a9ebbf6122540ab344b42fd66d32e18f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7987ea6df69bbe97c23e0dd948cf2d4490824ba7fea5af812721b2393354b0810a9dba2c231ea7ae30f26c412c7ea6e3ac001a00373cb4a98e39283abf022af09090498258b499a792ba82320d7aa6daf8ed3cfa06be1234fe690f65f4490f56675eaa086bc965e52fdc377778081d7343a2ef98dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xb5fb155286d38e5d9a3a01251b3c3c6207217d84aa806abdeefaf029843896b0", + "stateRoot": "0x6e457e50fcb3580815c1a36f34e7e7fc49751cb90489fe54eaf49360baa37e3a", "transactionsTrie": "0xfa5cbef006f8526c97aea2df1f6d7da6968f04db55c9121be3cd1a90b4401309", "receiptTrie": "0xee652a06815a432d5f2b3e9ecff47f1da5ea293bca394f6d08fc63db91569906", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4533,8 +4568,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032828", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4542,7 +4577,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x54b43f1f9515d5c678272d86b75eef5e6307f9ff64921c29b71061820cdfc1c8" + "hash": "0x47fa8e9e04760891319a6291dd8cc5008aaf8dafd6096b057ece138872b988f4" }, "blocknumber": "1", "transactions": [ @@ -4567,7 +4602,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x54b43f1f9515d5c678272d86b75eef5e6307f9ff64921c29b71061820cdfc1c8", + "lastblockhash": "0x47fa8e9e04760891319a6291dd8cc5008aaf8dafd6096b057ece138872b988f4", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -4607,7 +4642,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -4619,9 +4654,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_d736268229bd87ec": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_d736268229bd87ec]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4652,12 +4688,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa045697ab25faa4cb90845238465e3d80ce516f41c828bbea47ed79a44fdbd5c98a040e7297fe073db243b4197e94b2bf9d5d46fcfbc301ac58536f6efb258c76c0aa0578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303281c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625fd58150b731b4facfcdd89c0e393ff842f5f2071303eff99b51e103161cd23393efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655694425f5cf336685a6a4e806ad4601f4b0d3707a655718f968c57e225f0e4b8d5fd61878234f25ec59d090c07ea725cf4c001a08062bb6127236caf59a0babb1eb316cd9cf4db55126230550a38411c48773c43a0215ab9619175bf3a7e08debcecfc30d2cbb605e6120f68f6d8ae4a35cfdcaf73c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa039aa9132a0c0c010df0605442da287cff3493aa3c1f4caf7f7cea7f9d908e956a040e7297fe073db243b4197e94b2bf9d5d46fcfbc301ac58536f6efb258c76c0aa0578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303281c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625fd58150b731b4facfcdd89c0e393ff842f5f2071303eff99b51e103161cd23393efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655694425f5cf336685a6a4e806ad4601f4b0d3707a655718f968c57e225f0e4b8d5fd61878234f25ec59d090c07ea725cf4c001a08062bb6127236caf59a0babb1eb316cd9cf4db55126230550a38411c48773c43a0215ab9619175bf3a7e08debcecfc30d2cbb605e6120f68f6d8ae4a35cfdcaf73c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x45697ab25faa4cb90845238465e3d80ce516f41c828bbea47ed79a44fdbd5c98", + "stateRoot": "0x39aa9132a0c0c010df0605442da287cff3493aa3c1f4caf7f7cea7f9d908e956", "transactionsTrie": "0x40e7297fe073db243b4197e94b2bf9d5d46fcfbc301ac58536f6efb258c76c0a", "receiptTrie": "0x578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4665,8 +4701,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03281c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4674,7 +4710,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xc49da6439c1ab5458038c939ef7e98a6dc666a7bc0e8331fa9646a5866018de9" + "hash": "0xe98437654e77a7dd0265b5dde631b40bc138952a3e4f3b028ae3b9368ea03e78" }, "blocknumber": "1", "transactions": [ @@ -4699,7 +4735,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xc49da6439c1ab5458038c939ef7e98a6dc666a7bc0e8331fa9646a5866018de9", + "lastblockhash": "0xe98437654e77a7dd0265b5dde631b40bc138952a3e4f3b028ae3b9368ea03e78", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -4739,7 +4775,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -4751,9 +4787,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_e68d7111a2364a49": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_e68d7111a2364a49]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4784,12 +4821,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d2a59cc9dd3c830b051dc217edd0b42a868fae6b41431a02e1666bda1833b9b1a0d55deb2710b6db8dad4542109d2281aa78d8ff1277c2a1758c5a0c053dbf0160a0a28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326c00c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000002549345dd3612e36fab0ab7baffe3faa5b820d56b71348c89ecaf63f7c4f853708f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7a35c4f136a09a33c6437c26dc0c617ce6548a14bc4af7127690a411f5e1cde2f73157365212dbcea6432e0e7869cb006c001a079c75d58d4d2349d99b03f5f5255c9e1d780b2e7ab89ca44f01834df629e8e56a03351ebd9f15bbe07e5c7e6fe584ca3a1cae696edce769f53facea5fd2d93c256c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0893b8855abb12e659e47313994ff43661ba4f78052cab9fc8759409bc41b3ad5a0d55deb2710b6db8dad4542109d2281aa78d8ff1277c2a1758c5a0c053dbf0160a0a28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326c08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000002549345dd3612e36fab0ab7baffe3faa5b820d56b71348c89ecaf63f7c4f853708f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7a35c4f136a09a33c6437c26dc0c617ce6548a14bc4af7127690a411f5e1cde2f73157365212dbcea6432e0e7869cb006c001a079c75d58d4d2349d99b03f5f5255c9e1d780b2e7ab89ca44f01834df629e8e56a03351ebd9f15bbe07e5c7e6fe584ca3a1cae696edce769f53facea5fd2d93c256c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd2a59cc9dd3c830b051dc217edd0b42a868fae6b41431a02e1666bda1833b9b1", + "stateRoot": "0x893b8855abb12e659e47313994ff43661ba4f78052cab9fc8759409bc41b3ad5", "transactionsTrie": "0xd55deb2710b6db8dad4542109d2281aa78d8ff1277c2a1758c5a0c053dbf0160", "receiptTrie": "0xa28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4797,8 +4834,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326c0", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4806,7 +4843,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x50583d3bc03056855aa0c5aaf9319714f0275572720e77f958f16561bc2cb98a" + "hash": "0xb32ccf45eac771d258031bb4c94f445d9df58a208a2a5bfaea0331122b597f2c" }, "blocknumber": "1", "transactions": [ @@ -4831,7 +4868,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x50583d3bc03056855aa0c5aaf9319714f0275572720e77f958f16561bc2cb98a", + "lastblockhash": "0xb32ccf45eac771d258031bb4c94f445d9df58a208a2a5bfaea0331122b597f2c", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -4871,7 +4908,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -4883,9 +4920,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ed6b180ec759bcf6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -4916,12 +4954,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa045697ab25faa4cb90845238465e3d80ce516f41c828bbea47ed79a44fdbd5c98a0346a6bf7dfed70ffa6d239b4d2696980b0dd97e25c23c6a814837ca7db1f3323a0578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303281c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f15eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06a1fcd37a924af9ec04143b44853c26f6b0738f6e15a3e0755057e7d5460406c7e148adb0e2d608982140d0ae42fe0b3bc001a051ac07e80d47d7a0508522bbebd2d6e4ad87c9af609cc8516e3a08abee75b31ba0626af8217c88c1bfe8c561bd0c903558ea5ccdd573d8a93421b812618a1cf0f3c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa039aa9132a0c0c010df0605442da287cff3493aa3c1f4caf7f7cea7f9d908e956a0346a6bf7dfed70ffa6d239b4d2696980b0dd97e25c23c6a814837ca7db1f3323a0578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303281c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f15eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06a1fcd37a924af9ec04143b44853c26f6b0738f6e15a3e0755057e7d5460406c7e148adb0e2d608982140d0ae42fe0b3bc001a051ac07e80d47d7a0508522bbebd2d6e4ad87c9af609cc8516e3a08abee75b31ba0626af8217c88c1bfe8c561bd0c903558ea5ccdd573d8a93421b812618a1cf0f3c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x45697ab25faa4cb90845238465e3d80ce516f41c828bbea47ed79a44fdbd5c98", + "stateRoot": "0x39aa9132a0c0c010df0605442da287cff3493aa3c1f4caf7f7cea7f9d908e956", "transactionsTrie": "0x346a6bf7dfed70ffa6d239b4d2696980b0dd97e25c23c6a814837ca7db1f3323", "receiptTrie": "0x578146f9ff3b4decc7636b646d66f38a6068f41eb993f3d9f33de3e3f9fb66fd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4929,8 +4967,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03281c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4938,7 +4976,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x13b13ac0b4631ac904348b9c5b9f6b890f146fdf85dd2fca929bf18a40f3311e" + "hash": "0xf9cb0669cf357705815354ab6afd68eca77e678fc405b2d8ef432e6bd384b058" }, "blocknumber": "1", "transactions": [ @@ -4963,7 +5001,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x13b13ac0b4631ac904348b9c5b9f6b890f146fdf85dd2fca929bf18a40f3311e", + "lastblockhash": "0xf9cb0669cf357705815354ab6afd68eca77e678fc405b2d8ef432e6bd384b058", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -5003,7 +5041,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5015,9 +5053,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f0ed3dc11cdeb130]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5048,12 +5087,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837ceaa0cf3c30883f24409433d84b1ad29f2d48c0311e028e3c1d82f43a4c8132e0ae52a0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e00000000000000000000000000000000000000000000000000000000000000001ed7d14d1b3fb1a1890d67b81715531553ad798df2009b4311d9fe2bea6cb964b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa71f21ca51b443ad35bb8a26d274223a690d88d9629927dc80b0856093e08a372820248df5b8a43b6d98fd52a62fa376c001a08bbe8ab59a85fbd6782fa557398efe11d29e3249c567548ebfdaeba270a5e289a046ffe185ae723b2dc22f573fd205ccab2af35adac585763f2b0ba9e6ab1af76dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa017946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325a0cf3c30883f24409433d84b1ad29f2d48c0311e028e3c1d82f43a4c8132e0ae52a0ddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326a88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e00000000000000000000000000000000000000000000000000000000000000001ed7d14d1b3fb1a1890d67b81715531553ad798df2009b4311d9fe2bea6cb964b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa71f21ca51b443ad35bb8a26d274223a690d88d9629927dc80b0856093e08a372820248df5b8a43b6d98fd52a62fa376c001a08bbe8ab59a85fbd6782fa557398efe11d29e3249c567548ebfdaeba270a5e289a046ffe185ae723b2dc22f573fd205ccab2af35adac585763f2b0ba9e6ab1af76dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4159354b4217bfcfc25d574fbf48fd1422887e5256ef0bec95b34fa1d2837cea", + "stateRoot": "0x17946f1f092d25a2d795fdf67a12f0644cd454ad26ae719a2a214f9956a21325", "transactionsTrie": "0xcf3c30883f24409433d84b1ad29f2d48c0311e028e3c1d82f43a4c8132e0ae52", "receiptTrie": "0xddac6235f1c3c7cf7be43069c6158087a3c278228d25e5f410defca825999683", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5061,8 +5100,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326a8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5070,7 +5109,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2a2029d6421b2e4324e1fc4d61a247911b99ab54df8996cdc9e01951c7256cc5" + "hash": "0x90c90adb4ab99fa551a203a12289f4d7e7484c8a0b3b5b19eef00218c3da729b" }, "blocknumber": "1", "transactions": [ @@ -5095,7 +5134,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2a2029d6421b2e4324e1fc4d61a247911b99ab54df8996cdc9e01951c7256cc5", + "lastblockhash": "0x90c90adb4ab99fa551a203a12289f4d7e7484c8a0b3b5b19eef00218c3da729b", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -5135,7 +5174,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5147,9 +5186,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f47eb9fc139f6bfd]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5180,12 +5220,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d2a59cc9dd3c830b051dc217edd0b42a868fae6b41431a02e1666bda1833b9b1a0ae6668667f2a291f276f76e934a6b38b3fe6860681b66127b53ad25e284e4c6fa0a28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326c00c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000160f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a06eb61083a9a45c07c765d52a17bfe79e8eda8eeb1395838988da31987c397b53a011196b13a0b7796abd006d318e4fac1c052c6c43c43fcb6153322e6fab29e6a1c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0893b8855abb12e659e47313994ff43661ba4f78052cab9fc8759409bc41b3ad5a0ae6668667f2a291f276f76e934a6b38b3fe6860681b66127b53ad25e284e4c6fa0a28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326c08203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000160f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a06eb61083a9a45c07c765d52a17bfe79e8eda8eeb1395838988da31987c397b53a011196b13a0b7796abd006d318e4fac1c052c6c43c43fcb6153322e6fab29e6a1c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd2a59cc9dd3c830b051dc217edd0b42a868fae6b41431a02e1666bda1833b9b1", + "stateRoot": "0x893b8855abb12e659e47313994ff43661ba4f78052cab9fc8759409bc41b3ad5", "transactionsTrie": "0xae6668667f2a291f276f76e934a6b38b3fe6860681b66127b53ad25e284e4c6f", "receiptTrie": "0xa28962db15985dce9fc1f5c2c6e1bbc9c7be1f3fb810bb3e8ec0b6c2a227b1f3", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5193,8 +5233,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326c0", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5202,7 +5242,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x261968fe4934c84015b5fbf24dcb17759a3d69af186dda281b30edc486485829" + "hash": "0x2d4b86f256b732b837afa39472120ac1de7f5f7b4b45218a93ea9f7de3e9b61b" }, "blocknumber": "1", "transactions": [ @@ -5227,7 +5267,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x261968fe4934c84015b5fbf24dcb17759a3d69af186dda281b30edc486485829", + "lastblockhash": "0x2d4b86f256b732b837afa39472120ac1de7f5f7b4b45218a93ea9f7de3e9b61b", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -5267,7 +5307,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5279,9 +5319,10 @@ }, "sealEngine": "NoProof" }, - "040-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_f7f44e1e864aa967]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5312,12 +5353,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09d5a65cc5fbc0b6888f1ca061efcdc9dbd670aa7f06ca8ef23623acb629bd5d1a085221ef646bdac0ca9852709b72edd4bba98e3c13ce05fe0d4288b707d16f026a0f2770ea2a80642c8e6b1a1748dfaf23bd1caeb8b204723206ab66564d463d030b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326b40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000061157104410181bdc6eac224aa9436ac268bdcfeecb6badf71d228adda820af38f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7809adfa8b078b0921cdb8696ca017a0cc2d5337109016f36a766886eade28d32f205311ff5def247c3ddba91896fae97c080a008dd3fdefb25997c98d9e3343a574cb5ad5f0ad6fb7c38a627bd5b9b1a4f2c2da079516fec030f0d31058ca022daa456180b8111902da996e33378b52440990c30c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a3b445c416ebadea409c376df077fb042920e180503b8afc406136c59d8e9abda085221ef646bdac0ca9852709b72edd4bba98e3c13ce05fe0d4288b707d16f026a0f2770ea2a80642c8e6b1a1748dfaf23bd1caeb8b204723206ab66564d463d030b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830326b48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000061157104410181bdc6eac224aa9436ac268bdcfeecb6badf71d228adda820af38f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7809adfa8b078b0921cdb8696ca017a0cc2d5337109016f36a766886eade28d32f205311ff5def247c3ddba91896fae97c080a008dd3fdefb25997c98d9e3343a574cb5ad5f0ad6fb7c38a627bd5b9b1a4f2c2da079516fec030f0d31058ca022daa456180b8111902da996e33378b52440990c30c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9d5a65cc5fbc0b6888f1ca061efcdc9dbd670aa7f06ca8ef23623acb629bd5d1", + "stateRoot": "0xa3b445c416ebadea409c376df077fb042920e180503b8afc406136c59d8e9abd", "transactionsTrie": "0x85221ef646bdac0ca9852709b72edd4bba98e3c13ce05fe0d4288b707d16f026", "receiptTrie": "0xf2770ea2a80642c8e6b1a1748dfaf23bd1caeb8b204723206ab66564d463d030", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5325,8 +5366,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0326b4", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5334,7 +5375,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5a317d7cbae32b4204671d6c02266cbfddf35ad4a8a148fee57f0b33e2b9391d" + "hash": "0x36ac41ab61fb3a39492e6576c35cf8cab89268361b0b9f652cc0812b3aabfce2" }, "blocknumber": "1", "transactions": [ @@ -5359,7 +5400,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x5a317d7cbae32b4204671d6c02266cbfddf35ad4a8a148fee57f0b33e2b9391d", + "lastblockhash": "0x36ac41ab61fb3a39492e6576c35cf8cab89268361b0b9f652cc0812b3aabfce2", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -5399,7 +5440,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5411,9 +5452,10 @@ }, "sealEngine": "NoProof" }, - "041-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_ffa6e97b97146517": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_ffa6e97b97146517]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5444,12 +5486,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dd2535692d92d180092116c77c02aaf3b70813dcdf18690d3b9d6fe2baae5eeea076df6cc1db5d22eac5e69a4fbc66b0e42a1766e9f8bf4e181b8127af7159fdb0a07497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320d80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a06950ed03f403ea96cf685db6b359e4e902254f56e9607e1732f605bcfed83612a029650cc3a200b84afe703216fe8ef6b90cfc93d7a29e4584b9f36dd74e448053c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f22cf226af8b718753f3e5d7af9be6d085309471d87fa50c130289ae1a3d707ca076df6cc1db5d22eac5e69a4fbc66b0e42a1766e9f8bf4e181b8127af7159fdb0a07497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320d88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a06950ed03f403ea96cf685db6b359e4e902254f56e9607e1732f605bcfed83612a029650cc3a200b84afe703216fe8ef6b90cfc93d7a29e4584b9f36dd74e448053c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdd2535692d92d180092116c77c02aaf3b70813dcdf18690d3b9d6fe2baae5eee", + "stateRoot": "0xf22cf226af8b718753f3e5d7af9be6d085309471d87fa50c130289ae1a3d707c", "transactionsTrie": "0x76df6cc1db5d22eac5e69a4fbc66b0e42a1766e9f8bf4e181b8127af7159fdb0", "receiptTrie": "0x7497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5457,8 +5499,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0320d8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5466,7 +5508,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7043dc7cbd7df9965a9d033b51035b19dbfb57994ebe69978a00bcfe9f297526" + "hash": "0x09b3e639fa89b6062bc55a76ece139fda011320c9aa99e20f2f6c32bafd14ad6" }, "blocknumber": "1", "transactions": [ @@ -5491,7 +5533,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x7043dc7cbd7df9965a9d033b51035b19dbfb57994ebe69978a00bcfe9f297526", + "lastblockhash": "0x09b3e639fa89b6062bc55a76ece139fda011320c9aa99e20f2f6c32bafd14ad6", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -5531,7 +5573,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5543,9 +5585,10 @@ }, "sealEngine": "NoProof" }, - "042-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_05c1f3685f3393f0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5576,12 +5619,12 @@ }, "blocks": [ { - "rlp": "0xf9036ff9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0daa2e7172725bfa180044d9a50f715abdd0b4e2b908bea2e9a1b59446d74db5aa064694503549631721abbd0ccbc59bbb11f6987a03104eef1e12a3d3d1aca8579a0cffc4636a42d9c6309bc3a1501b115d31f9b57efcb36cdab27c5e3ef9c756d09b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303248c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e38637564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a056cc0f64cca987cba1d1c7f6f39aadaafefae85a8dadadc776cf2881c6194c219f8727fa857ab3248103a8636248eaedaed219c313bf97e2673a9bab17226144c0c0", + "rlp": "0xf90371f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0515c637f67cae9681abef491d76d25dce91d41e3d226f5a0cf4032febae6e7a9a064694503549631721abbd0ccbc59bbb11f6987a03104eef1e12a3d3d1aca8579a0cffc4636a42d9c6309bc3a1501b115d31f9b57efcb36cdab27c5e3ef9c756d09b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303248c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e38637564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a056cc0f64cca987cba1d1c7f6f39aadaafefae85a8dadadc776cf2881c6194c219f8727fa857ab3248103a8636248eaedaed219c313bf97e2673a9bab17226144c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdaa2e7172725bfa180044d9a50f715abdd0b4e2b908bea2e9a1b59446d74db5a", + "stateRoot": "0x515c637f67cae9681abef491d76d25dce91d41e3d226f5a0cf4032febae6e7a9", "transactionsTrie": "0x64694503549631721abbd0ccbc59bbb11f6987a03104eef1e12a3d3d1aca8579", "receiptTrie": "0xcffc4636a42d9c6309bc3a1501b115d31f9b57efcb36cdab27c5e3ef9c756d09", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5589,8 +5632,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03248c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5598,7 +5641,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9e09b698405a8b1d07a8b74ee53b5d0a3174b6c7a933f1c0ce594b5af4d2172a" + "hash": "0xa45bc5ae49aa867c60b3ca1b1e3022f94487300cddf3f9331d25a1407e44f1c0" }, "blocknumber": "1", "transactions": [ @@ -5623,7 +5666,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9e09b698405a8b1d07a8b74ee53b5d0a3174b6c7a933f1c0ce594b5af4d2172a", + "lastblockhash": "0xa45bc5ae49aa867c60b3ca1b1e3022f94487300cddf3f9331d25a1407e44f1c0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -5663,7 +5706,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5675,9 +5718,10 @@ }, "sealEngine": "NoProof" }, - "043-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_177b58dc7a46b08f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5708,12 +5752,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09ee9c8e9998e316ff7563b4fb05e35b3cc8f20337ca314d83c098149fd6c0d9da0b835914c32846ce4b9f953b0ba04cf33028ecc13380fd2c259575cada7be2d30a04bf1348d0fdae7278cb03c8bb2e38fdebee3a8d9312f9fe9639e449b2353b9b4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830324800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e386375eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0041603d4d4eee85f8717ccf36cc9332488c80a98288dab307cefa8cf4779d9d0a043eff97f53dd7225d6f09e384fc0841ae1d4270b493ca3f28a75a1ce188d2505c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b61954f36c95805a57aa132100a53467f55ad71e85a7734d6862ae8e87f3ea48a0b835914c32846ce4b9f953b0ba04cf33028ecc13380fd2c259575cada7be2d30a04bf1348d0fdae7278cb03c8bb2e38fdebee3a8d9312f9fe9639e449b2353b9b4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830324808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e386375eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0041603d4d4eee85f8717ccf36cc9332488c80a98288dab307cefa8cf4779d9d0a043eff97f53dd7225d6f09e384fc0841ae1d4270b493ca3f28a75a1ce188d2505c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9ee9c8e9998e316ff7563b4fb05e35b3cc8f20337ca314d83c098149fd6c0d9d", + "stateRoot": "0xb61954f36c95805a57aa132100a53467f55ad71e85a7734d6862ae8e87f3ea48", "transactionsTrie": "0xb835914c32846ce4b9f953b0ba04cf33028ecc13380fd2c259575cada7be2d30", "receiptTrie": "0x4bf1348d0fdae7278cb03c8bb2e38fdebee3a8d9312f9fe9639e449b2353b9b4", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5721,8 +5765,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032480", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5730,7 +5774,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf2f72e3687bae12fd957a7467c84db42d33b6fb8d75c541c8d0302fa63fbf2c2" + "hash": "0x1ff3fea1bab83f6246cccad4fe88d4e2dd7df381a44e591a53ffd798f29fb75e" }, "blocknumber": "1", "transactions": [ @@ -5755,7 +5799,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf2f72e3687bae12fd957a7467c84db42d33b6fb8d75c541c8d0302fa63fbf2c2", + "lastblockhash": "0x1ff3fea1bab83f6246cccad4fe88d4e2dd7df381a44e591a53ffd798f29fb75e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -5795,7 +5839,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5807,9 +5851,10 @@ }, "sealEngine": "NoProof" }, - "044-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_2b76dc9e3abf42f3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5840,12 +5885,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04a133c11db920fba4882b5f6f8b1a5fca6225d9ccb55e8acabd65c098e21e283a04a48dfbccb8fac2366ab037f6e4e1ba275d8678681973fdfd6712bd5e5b730f9a0091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830323180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a09195fc709fd538fc7555a818e0574406c1cd8cc72fe2e3a50c6b8976e66e3ee0a04b3cbb9786db1ef4866288d895b09850b5167aa3d454a1c7bce0ad99b7065cb7c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa034cf7f3a8c9d1c2c21c70a96decaf8f1b6a20baea9ae1e34f6ab2578f19536e5a04a48dfbccb8fac2366ab037f6e4e1ba275d8678681973fdfd6712bd5e5b730f9a0091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830323188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a09195fc709fd538fc7555a818e0574406c1cd8cc72fe2e3a50c6b8976e66e3ee0a04b3cbb9786db1ef4866288d895b09850b5167aa3d454a1c7bce0ad99b7065cb7c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4a133c11db920fba4882b5f6f8b1a5fca6225d9ccb55e8acabd65c098e21e283", + "stateRoot": "0x34cf7f3a8c9d1c2c21c70a96decaf8f1b6a20baea9ae1e34f6ab2578f19536e5", "transactionsTrie": "0x4a48dfbccb8fac2366ab037f6e4e1ba275d8678681973fdfd6712bd5e5b730f9", "receiptTrie": "0x091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5853,8 +5898,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032318", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5862,7 +5907,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd196fb6b1529cad09b38c60dee6b19557597903353ec2d5b6443a1a92153d4b8" + "hash": "0x8ff7e5840ad5405cb4e8e72190539006cba58ebb6256a08fcbd88c7a119081f5" }, "blocknumber": "1", "transactions": [ @@ -5887,7 +5932,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd196fb6b1529cad09b38c60dee6b19557597903353ec2d5b6443a1a92153d4b8", + "lastblockhash": "0x8ff7e5840ad5405cb4e8e72190539006cba58ebb6256a08fcbd88c7a119081f5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -5927,7 +5972,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5939,9 +5984,10 @@ }, "sealEngine": "NoProof" }, - "045-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_395cf6d697d1a743]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -5972,12 +6018,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0092ca77027ac1b9ca4a5cb57621c139371b077dd8335981de8c9db4a005b7fc4a049a925eb922da73de67e2944080379e4078dc8df996329fec5ebf2e61ee77911a060d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303245c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863773eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05e5d495a95eea1e64aa3bdf92cbe528b70e5e81100472c3ef4ed1fdad748055ba04e210a87cb7bf98868e1246eb5d8212988c2783e420552ec24325e3a647ea07bc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0be072a0a37dad43670554d6ab49af001d3506567facd92c889abd80e0ef785e3a049a925eb922da73de67e2944080379e4078dc8df996329fec5ebf2e61ee77911a060d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303245c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863773eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05e5d495a95eea1e64aa3bdf92cbe528b70e5e81100472c3ef4ed1fdad748055ba04e210a87cb7bf98868e1246eb5d8212988c2783e420552ec24325e3a647ea07bc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x092ca77027ac1b9ca4a5cb57621c139371b077dd8335981de8c9db4a005b7fc4", + "stateRoot": "0xbe072a0a37dad43670554d6ab49af001d3506567facd92c889abd80e0ef785e3", "transactionsTrie": "0x49a925eb922da73de67e2944080379e4078dc8df996329fec5ebf2e61ee77911", "receiptTrie": "0x60d05e6d4f087896952e0161c798979dbef6212d3979c5cf31d4538884a22009", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5985,8 +6031,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03245c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5994,7 +6040,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x779b5486e45d40883705c473c112306c4448997808ed1419e4bb8fbe42a9e920" + "hash": "0x5c719f262504c8b8c3442dc4adcd1e35bc83b57c8b4c50adeb173925b1dea72b" }, "blocknumber": "1", "transactions": [ @@ -6019,7 +6065,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x779b5486e45d40883705c473c112306c4448997808ed1419e4bb8fbe42a9e920", + "lastblockhash": "0x5c719f262504c8b8c3442dc4adcd1e35bc83b57c8b4c50adeb173925b1dea72b", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -6059,7 +6105,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6071,9 +6117,10 @@ }, "sealEngine": "NoProof" }, - "046-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_585454b31673dd62]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6104,12 +6151,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d46a4550e8ad1b69c10e07338f772b34c3365beade08f7bbffbeab6c9335524aa0282b431779e1edd7b75fd86161bdd6e347546fad2b2284d67f952e5755adb094a096b754aa64debb4f75196685c39339e3cfc406785621fa534c4690b8f3449dccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303230c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a061f61fd735c0e515d2d6f3cbbbc9d3a8cde28c0bc8c4b46ac6e0975a0b9d78eba043a0f69d32510e18b654902012185f7454f8528aafed5ff1067c6f2342bc16f2c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa088ac027edce4f61ed10d589b7f15d68bd32850fb0e1ef7bcfc2b13e29e5bf189a0282b431779e1edd7b75fd86161bdd6e347546fad2b2284d67f952e5755adb094a096b754aa64debb4f75196685c39339e3cfc406785621fa534c4690b8f3449dccb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303230c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a061f61fd735c0e515d2d6f3cbbbc9d3a8cde28c0bc8c4b46ac6e0975a0b9d78eba043a0f69d32510e18b654902012185f7454f8528aafed5ff1067c6f2342bc16f2c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd46a4550e8ad1b69c10e07338f772b34c3365beade08f7bbffbeab6c9335524a", + "stateRoot": "0x88ac027edce4f61ed10d589b7f15d68bd32850fb0e1ef7bcfc2b13e29e5bf189", "transactionsTrie": "0x282b431779e1edd7b75fd86161bdd6e347546fad2b2284d67f952e5755adb094", "receiptTrie": "0x96b754aa64debb4f75196685c39339e3cfc406785621fa534c4690b8f3449dcc", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6117,8 +6164,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03230c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6126,7 +6173,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xaa57f81b8a5c24c452e8946c997713aa13d839c5d9432d876fcc53ea8467e09e" + "hash": "0xc61667b31a515f59f5c0616720daea12b80c19145022658d3dadfeaea54aa995" }, "blocknumber": "1", "transactions": [ @@ -6151,7 +6198,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xaa57f81b8a5c24c452e8946c997713aa13d839c5d9432d876fcc53ea8467e09e", + "lastblockhash": "0xc61667b31a515f59f5c0616720daea12b80c19145022658d3dadfeaea54aa995", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -6191,7 +6238,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6203,9 +6250,10 @@ }, "sealEngine": "NoProof" }, - "047-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_twos_poly_a0be66af9a97ea52]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6236,12 +6284,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04a133c11db920fba4882b5f6f8b1a5fca6225d9ccb55e8acabd65c098e21e283a0fceba5b9017f510fbc5e63371919d3b97e09c8e4645d8aac480f54c522d29281a0091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830323180c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0f5a0c88b6ab5779b674f50f35ff6a84e9de6a974a504e57f2831c07964432d3ca00316a20572a66083f1bd4e473ffbfdaff0ae5fdd62491052b411f92be107e260c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa034cf7f3a8c9d1c2c21c70a96decaf8f1b6a20baea9ae1e34f6ab2578f19536e5a0fceba5b9017f510fbc5e63371919d3b97e09c8e4645d8aac480f54c522d29281a0091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830323188203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0f5a0c88b6ab5779b674f50f35ff6a84e9de6a974a504e57f2831c07964432d3ca00316a20572a66083f1bd4e473ffbfdaff0ae5fdd62491052b411f92be107e260c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4a133c11db920fba4882b5f6f8b1a5fca6225d9ccb55e8acabd65c098e21e283", + "stateRoot": "0x34cf7f3a8c9d1c2c21c70a96decaf8f1b6a20baea9ae1e34f6ab2578f19536e5", "transactionsTrie": "0xfceba5b9017f510fbc5e63371919d3b97e09c8e4645d8aac480f54c522d29281", "receiptTrie": "0x091757d992eaa78b80aa36f0b2faba95782069d4cbbd8d3fa36ad5c8fee43138", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6249,8 +6297,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032318", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6258,7 +6306,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xfaf98fd3423a87ff451d8df58ace9e7a133a156daf21e246b36a55a4598ee45e" + "hash": "0x8df2b06e8d682c604c988707973104ecc5e5db38be9a1b182c38df4dc6431a33" }, "blocknumber": "1", "transactions": [ @@ -6283,7 +6331,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xfaf98fd3423a87ff451d8df58ace9e7a133a156daf21e246b36a55a4598ee45e", + "lastblockhash": "0x8df2b06e8d682c604c988707973104ecc5e5db38be9a1b182c38df4dc6431a33", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -6323,7 +6371,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6335,9 +6383,10 @@ }, "sealEngine": "NoProof" }, - "048-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_02e696ada7d4631d]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6368,12 +6417,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dd2535692d92d180092116c77c02aaf3b70813dcdf18690d3b9d6fe2baae5eeea0342a7b460150feecdcb631315bdec6482e2c61fdbd3503ec02fe14e29f3bf370a07497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320d80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a065f7b12b0599ab4d9ebb3eb4b578437f752aa0cb55ddf51fff8606bef0810d11a01fe1f62b259c12418cf77f0e4f4fe740701e7e24977b011ecbc9ea14e67fc356c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f22cf226af8b718753f3e5d7af9be6d085309471d87fa50c130289ae1a3d707ca0342a7b460150feecdcb631315bdec6482e2c61fdbd3503ec02fe14e29f3bf370a07497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320d88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a065f7b12b0599ab4d9ebb3eb4b578437f752aa0cb55ddf51fff8606bef0810d11a01fe1f62b259c12418cf77f0e4f4fe740701e7e24977b011ecbc9ea14e67fc356c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdd2535692d92d180092116c77c02aaf3b70813dcdf18690d3b9d6fe2baae5eee", + "stateRoot": "0xf22cf226af8b718753f3e5d7af9be6d085309471d87fa50c130289ae1a3d707c", "transactionsTrie": "0x342a7b460150feecdcb631315bdec6482e2c61fdbd3503ec02fe14e29f3bf370", "receiptTrie": "0x7497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6381,8 +6430,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0320d8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6390,7 +6439,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb9ad0d2b7827d79ddd92eb487aeccaaf8eafbb6e474d95f2d30c938eb632366e" + "hash": "0x0c36d63488a3531ec9b3ffd2f6e95223d5a5c75a01375034d364dd1485ad9780" }, "blocknumber": "1", "transactions": [ @@ -6415,7 +6464,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb9ad0d2b7827d79ddd92eb487aeccaaf8eafbb6e474d95f2d30c938eb632366e", + "lastblockhash": "0x0c36d63488a3531ec9b3ffd2f6e95223d5a5c75a01375034d364dd1485ad9780", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -6455,7 +6504,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6467,9 +6516,10 @@ }, "sealEngine": "NoProof" }, - "049-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_0cf79b17cb5f4ea2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6500,12 +6550,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bff95dd737627225c19a4001d9e0ac170f07cfcf671baa06eafbdc170412e94aa09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a076ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830322400c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07b65609f7d48c381efddf25cd9fc751025a295682418fa2b40442b9f6872cde1a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a076ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830322408203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbff95dd737627225c19a4001d9e0ac170f07cfcf671baa06eafbdc170412e94a", + "stateRoot": "0x7b65609f7d48c381efddf25cd9fc751025a295682418fa2b40442b9f6872cde1", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x76ad64f6308db609864c81c154e4e31f69f77b180f6e6abcc0126c8062982fb5", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6513,8 +6563,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x032240", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6522,7 +6572,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xdd7a27a92391f614fe183adf097706a5415284d90a8611aa090f116bfac1b617" + "hash": "0x8495f2c4f5cdda608969a3cf2d4793ae00de0cb8179bd2689c89f84c5d32602f" }, "blocknumber": "1", "transactions": [ @@ -6547,7 +6597,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xdd7a27a92391f614fe183adf097706a5415284d90a8611aa090f116bfac1b617", + "lastblockhash": "0x8495f2c4f5cdda608969a3cf2d4793ae00de0cb8179bd2689c89f84c5d32602f", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -6587,7 +6637,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6599,9 +6649,10 @@ }, "sealEngine": "NoProof" }, - "050-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3208425794224c3f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6632,12 +6683,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0738d7b0d4ecfc92c33bc85a7459539409c3afb0ec7282be253b91a459964e71ea0baebc069a2a30182ede5e6ff232fbddf799b0296261aa1db9f0f290d1a78c24fa0c787f58393e74b7115d9f2d353282ab2810a28498a85db4cb8d94d7b5239e15bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303224c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e0e99a9b9d721ea19859ff421ecf4c9f93a0f889e44e37ab1eed8f5337ec64afa04a02154ba84ccb9be41e523726b233a69c4d9d31eb439597178b968b8e6c6d1dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b8101aea75d3d808b628d7d65aa338f09a1366cfa562981093c37e8b1b37a4f2a0baebc069a2a30182ede5e6ff232fbddf799b0296261aa1db9f0f290d1a78c24fa0c787f58393e74b7115d9f2d353282ab2810a28498a85db4cb8d94d7b5239e15bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303224c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e0e99a9b9d721ea19859ff421ecf4c9f93a0f889e44e37ab1eed8f5337ec64afa04a02154ba84ccb9be41e523726b233a69c4d9d31eb439597178b968b8e6c6d1dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x738d7b0d4ecfc92c33bc85a7459539409c3afb0ec7282be253b91a459964e71e", + "stateRoot": "0xb8101aea75d3d808b628d7d65aa338f09a1366cfa562981093c37e8b1b37a4f2", "transactionsTrie": "0xbaebc069a2a30182ede5e6ff232fbddf799b0296261aa1db9f0f290d1a78c24f", "receiptTrie": "0xc787f58393e74b7115d9f2d353282ab2810a28498a85db4cb8d94d7b5239e15b", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6645,8 +6696,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03224c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6654,7 +6705,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x80597272dcd6133f5a9a4ef9a68e8d043f714473bf81b32de54e2fc946c35b9e" + "hash": "0x748d1a9a79d3b0c684001bd932b0595222898918054e6c9ec34fa166b335a5ad" }, "blocknumber": "1", "transactions": [ @@ -6679,7 +6730,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x80597272dcd6133f5a9a4ef9a68e8d043f714473bf81b32de54e2fc946c35b9e", + "lastblockhash": "0x748d1a9a79d3b0c684001bd932b0595222898918054e6c9ec34fa166b335a5ad", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -6719,7 +6770,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6731,9 +6782,10 @@ }, "sealEngine": "NoProof" }, - "051-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_3ac8dc31e9aa6a70]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6764,12 +6816,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002e49a5b61d560438e797b371a948baa544418d3ea542e48cc62401567b3b321a023c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519ca007194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5affb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303221c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0cdcb82e08bcb8bb0eb6de7c1e142a910aa413891c9deeccd0c650737f5407307a06df091d7bdd64b38d24910e969040afa2f65abd8b0ddf8c42ce5e582edfcf4fec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03e14851599d20f137ac1a63f980d66d274e21f8f11dcf562de0b713cbcc70b40a023c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519ca007194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5affb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303221c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0cdcb82e08bcb8bb0eb6de7c1e142a910aa413891c9deeccd0c650737f5407307a06df091d7bdd64b38d24910e969040afa2f65abd8b0ddf8c42ce5e582edfcf4fec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x02e49a5b61d560438e797b371a948baa544418d3ea542e48cc62401567b3b321", + "stateRoot": "0x3e14851599d20f137ac1a63f980d66d274e21f8f11dcf562de0b713cbcc70b40", "transactionsTrie": "0x23c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519c", "receiptTrie": "0x07194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5aff", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6777,8 +6829,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03221c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6786,7 +6838,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x290bf0da14e9633aab43e0b391ecf236bdfca6ec38af81aec507dba2898c90ac" + "hash": "0x87d97c34779f4a2cdc5f8fd2815cce33304446cc923922bc31947ce6cd255488" }, "blocknumber": "1", "transactions": [ @@ -6811,7 +6863,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x290bf0da14e9633aab43e0b391ecf236bdfca6ec38af81aec507dba2898c90ac", + "lastblockhash": "0x87d97c34779f4a2cdc5f8fd2815cce33304446cc923922bc31947ce6cd255488", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -6851,7 +6903,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6863,9 +6915,10 @@ }, "sealEngine": "NoProof" }, - "052-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_c3d4322ec17fe7cd]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -6896,12 +6949,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0743fe046e9b8d686844a4f68f0b8af10f37bf2e64d131506c5417e048f5785d6a042814b49a3b2b951f3854a765e6fc5cf5c639083e40c5ffa2202356905f921f9a0490b5c8fc35fec021870f881c330c6034e503b53179152e33e6794d2a819e605b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320cc0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a01010fd3a61c3d74461450afa223aa148e5eb10993e04e942635e293ceb5fa373a04b3244a006b52d7d9b301b8f6854c428bc129821f52887efff046aa7026afef6c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa066447e1d6d3e43b137aa19286fa360e57b556785452c322cae77f29d0a2aaac1a042814b49a3b2b951f3854a765e6fc5cf5c639083e40c5ffa2202356905f921f9a0490b5c8fc35fec021870f881c330c6034e503b53179152e33e6794d2a819e605b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320cc8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a01010fd3a61c3d74461450afa223aa148e5eb10993e04e942635e293ceb5fa373a04b3244a006b52d7d9b301b8f6854c428bc129821f52887efff046aa7026afef6c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x743fe046e9b8d686844a4f68f0b8af10f37bf2e64d131506c5417e048f5785d6", + "stateRoot": "0x66447e1d6d3e43b137aa19286fa360e57b556785452c322cae77f29d0a2aaac1", "transactionsTrie": "0x42814b49a3b2b951f3854a765e6fc5cf5c639083e40c5ffa2202356905f921f9", "receiptTrie": "0x490b5c8fc35fec021870f881c330c6034e503b53179152e33e6794d2a819e605", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6909,8 +6962,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0320cc", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6918,7 +6971,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x8d2ccab0973120f15fc7ca4924ba94818236ac335122c7c425b5ea0f2d078d7c" + "hash": "0xcab40a890647bdcb42363bda309525ed738ca83543be46f7a5a3e31bef7a12d0" }, "blocknumber": "1", "transactions": [ @@ -6943,7 +6996,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x8d2ccab0973120f15fc7ca4924ba94818236ac335122c7c425b5ea0f2d078d7c", + "lastblockhash": "0xcab40a890647bdcb42363bda309525ed738ca83543be46f7a5a3e31bef7a12d0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -6983,7 +7036,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6995,9 +7048,10 @@ }, "sealEngine": "NoProof" }, - "053-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_correct_proof_point_at_infinity_for_zero_poly_ffa6e97b97146517]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7028,12 +7082,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dd2535692d92d180092116c77c02aaf3b70813dcdf18690d3b9d6fe2baae5eeea076df6cc1db5d22eac5e69a4fbc66b0e42a1766e9f8bf4e181b8127af7159fdb0a07497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320d80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a06950ed03f403ea96cf685db6b359e4e902254f56e9607e1732f605bcfed83612a029650cc3a200b84afe703216fe8ef6b90cfc93d7a29e4584b9f36dd74e448053c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f22cf226af8b718753f3e5d7af9be6d085309471d87fa50c130289ae1a3d707ca076df6cc1db5d22eac5e69a4fbc66b0e42a1766e9f8bf4e181b8127af7159fdb0a07497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830320d88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a06950ed03f403ea96cf685db6b359e4e902254f56e9607e1732f605bcfed83612a029650cc3a200b84afe703216fe8ef6b90cfc93d7a29e4584b9f36dd74e448053c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdd2535692d92d180092116c77c02aaf3b70813dcdf18690d3b9d6fe2baae5eee", + "stateRoot": "0xf22cf226af8b718753f3e5d7af9be6d085309471d87fa50c130289ae1a3d707c", "transactionsTrie": "0x76df6cc1db5d22eac5e69a4fbc66b0e42a1766e9f8bf4e181b8127af7159fdb0", "receiptTrie": "0x7497b7d164ccff8cc1de53192611da363a4f48268df253dc03cd9d99010994c9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7041,8 +7095,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0320d8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -7050,7 +7104,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7043dc7cbd7df9965a9d033b51035b19dbfb57994ebe69978a00bcfe9f297526" + "hash": "0x09b3e639fa89b6062bc55a76ece139fda011320c9aa99e20f2f6c32bafd14ad6" }, "blocknumber": "1", "transactions": [ @@ -7075,7 +7129,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x7043dc7cbd7df9965a9d033b51035b19dbfb57994ebe69978a00bcfe9f297526", + "lastblockhash": "0x09b3e639fa89b6062bc55a76ece139fda011320c9aa99e20f2f6c32bafd14ad6", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -7115,7 +7169,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -7127,9 +7181,10 @@ }, "sealEngine": "NoProof" }, - "054-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_02e696ada7d4631d]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7160,12 +7215,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00e22425f3d01e5c3cb7eabad0387917efaef68d39428be7ccef698b103f3a447a004a1a672778d9afe774909ac6c6933c9620db646e2e954a57da0f77e9a4f3336a04386b450bd7c63d7edd63ccdf927d98e9907cb98731f0391734b8adb8bb205adb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008302878e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a08761665c3a5d13e6401af73e293937ce67e0f9b511a94523dced29ded92ad259a054fb9fc63cbde05ac268934026e7f85f40aa7c560dea58416b29fff253b39a26c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06ea2363f017b0f0d67b8dec1212606a3d4a076d1bb3aa519d6eedf4c33971e0aa004a1a672778d9afe774909ac6c6933c9620db646e2e954a57da0f77e9a4f3336a04386b450bd7c63d7edd63ccdf927d98e9907cb98731f0391734b8adb8bb205adb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008302878e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a08761665c3a5d13e6401af73e293937ce67e0f9b511a94523dced29ded92ad259a054fb9fc63cbde05ac268934026e7f85f40aa7c560dea58416b29fff253b39a26c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0e22425f3d01e5c3cb7eabad0387917efaef68d39428be7ccef698b103f3a447", + "stateRoot": "0x6ea2363f017b0f0d67b8dec1212606a3d4a076d1bb3aa519d6eedf4c33971e0a", "transactionsTrie": "0x04a1a672778d9afe774909ac6c6933c9620db646e2e954a57da0f77e9a4f3336", "receiptTrie": "0x4386b450bd7c63d7edd63ccdf927d98e9907cb98731f0391734b8adb8bb205ad", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7173,8 +7228,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x02878e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -7182,7 +7237,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2bf9066ef813c361bc07e566cfd9227707ea9d12a45d04eb5a64b28566dcdcd1" + "hash": "0x43be56ad0b4894ff662414a8ac4df8334f2f8778c593dff3f30bde3ba579c1b6" }, "blocknumber": "1", "transactions": [ @@ -7207,7 +7262,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2bf9066ef813c361bc07e566cfd9227707ea9d12a45d04eb5a64b28566dcdcd1", + "lastblockhash": "0x43be56ad0b4894ff662414a8ac4df8334f2f8778c593dff3f30bde3ba579c1b6", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -7245,7 +7300,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -7257,9 +7312,10 @@ }, "sealEngine": "NoProof" }, - "055-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_05c1f3685f3393f0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7290,12 +7346,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa081cedcc5e151455b8cfaa3e3620332315ed1c9dccb4d9a5c624f2e9fabd8bf4ba0dfc81dd9f75d5269388597a628f4bbfa3b42025a7c7e350ace3592e6dd3763eda00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b420c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e38637564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0b39ade89f9fa653e72b6bd7be08c068c0d69f81421abfb6ff9379714de9407d8a07e42b1e5ded69fc2589e6111e180ae8c2abf81ea948678cf6dcbb5261da2cb8dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09adb702a340006fb6c641aa8cfbedac11dda90ad326b9501b1ef226a4b128128a0dfc81dd9f75d5269388597a628f4bbfa3b42025a7c7e350ace3592e6dd3763eda00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e38637564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0b39ade89f9fa653e72b6bd7be08c068c0d69f81421abfb6ff9379714de9407d8a07e42b1e5ded69fc2589e6111e180ae8c2abf81ea948678cf6dcbb5261da2cb8dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x81cedcc5e151455b8cfaa3e3620332315ed1c9dccb4d9a5c624f2e9fabd8bf4b", + "stateRoot": "0x9adb702a340006fb6c641aa8cfbedac11dda90ad326b9501b1ef226a4b128128", "transactionsTrie": "0xdfc81dd9f75d5269388597a628f4bbfa3b42025a7c7e350ace3592e6dd3763ed", "receiptTrie": "0x0854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7303,8 +7359,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b42", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -7312,7 +7368,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x48a9a2f705205705d42ee9e38fa00aa1a66a9a77e9c87721ff785d33cb62955a" + "hash": "0xce3a8482397461d6d778572cca3a43edf4a176a3c0f86fcf1baf4764acce38e2" }, "blocknumber": "1", "transactions": [ @@ -7337,7 +7393,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x48a9a2f705205705d42ee9e38fa00aa1a66a9a77e9c87721ff785d33cb62955a", + "lastblockhash": "0xce3a8482397461d6d778572cca3a43edf4a176a3c0f86fcf1baf4764acce38e2", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -7375,7 +7431,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -7387,9 +7443,10 @@ }, "sealEngine": "NoProof" }, - "056-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_08f9e2f1cb3d39db]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7420,12 +7477,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa039e6cf2dc51e71cca21a7e661072775375f80ae2b1e15969b9156371f116ddaba0cd4a8874e3ccc776436970a3ba0461faff62b1912c230c3c4c6557ad49b4c7a0a083f1c2472613f4662d5c53d4a072c8494e1b1885b48d55c40c2655e5c8b52decb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c560c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0138f4598d3fab348fa26ad425e18899aa3d817f186dd71b8fba816f8e9efbc07a036608175642866b67209115f33ad78a2694b0780298733f4b02b5f6ff005a7ddc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02085032007e4705b2a514ed4ee57133bcc60a5249b54be0f92a058c384e580ffa0cd4a8874e3ccc776436970a3ba0461faff62b1912c230c3c4c6557ad49b4c7a0a083f1c2472613f4662d5c53d4a072c8494e1b1885b48d55c40c2655e5c8b52decb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c568203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0138f4598d3fab348fa26ad425e18899aa3d817f186dd71b8fba816f8e9efbc07a036608175642866b67209115f33ad78a2694b0780298733f4b02b5f6ff005a7ddc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x39e6cf2dc51e71cca21a7e661072775375f80ae2b1e15969b9156371f116ddab", + "stateRoot": "0x2085032007e4705b2a514ed4ee57133bcc60a5249b54be0f92a058c384e580ff", "transactionsTrie": "0xcd4a8874e3ccc776436970a3ba0461faff62b1912c230c3c4c6557ad49b4c7a0", "receiptTrie": "0x83f1c2472613f4662d5c53d4a072c8494e1b1885b48d55c40c2655e5c8b52dec", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7433,8 +7490,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c56", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -7442,7 +7499,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9637178fc2f8dbc59d41492c68019a7332853fe334ff21ea1a2f82933f013d1e" + "hash": "0x9cbc34ccec68ffdfd01b9338c7ea8cbe98edd21cfa204aeebd29b5a77f9b8522" }, "blocknumber": "1", "transactions": [ @@ -7467,7 +7524,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9637178fc2f8dbc59d41492c68019a7332853fe334ff21ea1a2f82933f013d1e", + "lastblockhash": "0x9cbc34ccec68ffdfd01b9338c7ea8cbe98edd21cfa204aeebd29b5a77f9b8522", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -7505,7 +7562,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -7517,9 +7574,10 @@ }, "sealEngine": "NoProof" }, - "057-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_0cf79b17cb5f4ea2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7550,12 +7608,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05c5af9dcb8db555f1af2b6266ba52a3a394e1ad52b5cca8267ef42167c48be15a059b133d3794635a7043f7a7826dc0924f752bc73929beb3509fbd22e38f3a41ea00137d25b707ed6f768d807427031584abda32d29bdf30c6dc20e35221b7dee71b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830288f60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0f91fb7dc93c1e45a397410e8555d53c57e240832059c43a034a2d7d40d26350ca05ed9468f5eb17b11ad7c487d78e5abb72a1062ac9417b9e01ee45e48133d7caac0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08dad9ee73f3fb841636583c0b0861aaaee9db86165bf3566da7009b21694df17a059b133d3794635a7043f7a7826dc0924f752bc73929beb3509fbd22e38f3a41ea00137d25b707ed6f768d807427031584abda32d29bdf30c6dc20e35221b7dee71b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830288f68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0f91fb7dc93c1e45a397410e8555d53c57e240832059c43a034a2d7d40d26350ca05ed9468f5eb17b11ad7c487d78e5abb72a1062ac9417b9e01ee45e48133d7caac0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x5c5af9dcb8db555f1af2b6266ba52a3a394e1ad52b5cca8267ef42167c48be15", + "stateRoot": "0x8dad9ee73f3fb841636583c0b0861aaaee9db86165bf3566da7009b21694df17", "transactionsTrie": "0x59b133d3794635a7043f7a7826dc0924f752bc73929beb3509fbd22e38f3a41e", "receiptTrie": "0x0137d25b707ed6f768d807427031584abda32d29bdf30c6dc20e35221b7dee71", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7563,8 +7621,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0288f6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -7572,7 +7630,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xaadf9c81dd9cf97c4ccad1fbbd270fca7a0a383187bc8f2ec4223acf64da7a7e" + "hash": "0xdb09e94c212a08a5923c470736b7e46aa230324daed9585645f40bea4150aaf2" }, "blocknumber": "1", "transactions": [ @@ -7597,7 +7655,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xaadf9c81dd9cf97c4ccad1fbbd270fca7a0a383187bc8f2ec4223acf64da7a7e", + "lastblockhash": "0xdb09e94c212a08a5923c470736b7e46aa230324daed9585645f40bea4150aaf2", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -7635,7 +7693,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -7647,9 +7705,10 @@ }, "sealEngine": "NoProof" }, - "058-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_177b58dc7a46b08f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7680,12 +7739,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fcaba0e9e6c6b52ed02c1bc8b48f0cb3ea4a8c85627b43d74b5564f4ba9dcda9a0706b4ad700b9656ba5e879723ec7697ccc6a6dc07752d3c8a7bebf77de1ef05ca0f91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b360c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e386375eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0f5e4887e5e1f4ce69f241964fb510c9f8a226194ff37c2e06d42ef73900b5412a010fe7a90af6877e317f0b53edc461c33b88a364dd8b9ec5772a728de61b82a25c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa073f6aa6ea0c95a7dac4a3ec81e5f0f954cba44ca1deb604c9262ee4e2e407f9ea0706b4ad700b9656ba5e879723ec7697ccc6a6dc07752d3c8a7bebf77de1ef05ca0f91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b368203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e386375eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0f5e4887e5e1f4ce69f241964fb510c9f8a226194ff37c2e06d42ef73900b5412a010fe7a90af6877e317f0b53edc461c33b88a364dd8b9ec5772a728de61b82a25c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xfcaba0e9e6c6b52ed02c1bc8b48f0cb3ea4a8c85627b43d74b5564f4ba9dcda9", + "stateRoot": "0x73f6aa6ea0c95a7dac4a3ec81e5f0f954cba44ca1deb604c9262ee4e2e407f9e", "transactionsTrie": "0x706b4ad700b9656ba5e879723ec7697ccc6a6dc07752d3c8a7bebf77de1ef05c", "receiptTrie": "0xf91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7693,8 +7752,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b36", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -7702,7 +7761,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe413da3b48c57fd7809244a84bd66db71393e69c97a8ab2b17f1bce08dd21d12" + "hash": "0xfaab88c73442e2d80a96ec2d1106516623c7944d893b65379c820f43d000fa8d" }, "blocknumber": "1", "transactions": [ @@ -7727,7 +7786,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xe413da3b48c57fd7809244a84bd66db71393e69c97a8ab2b17f1bce08dd21d12", + "lastblockhash": "0xfaab88c73442e2d80a96ec2d1106516623c7944d893b65379c820f43d000fa8d", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -7765,7 +7824,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -7777,9 +7836,10 @@ }, "sealEngine": "NoProof" }, - "059-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_1ce8e4f69d5df899]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7810,12 +7870,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06def9d0ad1414d78220d49fd0dbd96ef29b953c4c3b492c0553d61b00b7e8a39a001c1479a842ee20dba3b2ecc393e48b3118cf90de0351765e50ebec46df61b63a036595bb2d5b0ca60db87f44279ba5dbab354471ad2aa0c19c6641019850ee5bbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028aee0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f1465569779b8337f00de6aeac881256198bd2db2fe95bc3127ad9e6440d9e4d1e785b455f55fcfe80a3434dc40f8e6df85be88c001a04667e403b9f9349babcf1c601584e9d5c0f8fe60b61516ef356dd8264afd71eca03f3b808f116b1fe59cc94b16f13a565759a1c64ac46f5390cd025c970d4abab8c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cb077498b97157b2547d2246ed5ebee8b7e1d6b8a879b1c63175847ce577ab55a001c1479a842ee20dba3b2ecc393e48b3118cf90de0351765e50ebec46df61b63a036595bb2d5b0ca60db87f44279ba5dbab354471ad2aa0c19c6641019850ee5bbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028aee8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f1465569779b8337f00de6aeac881256198bd2db2fe95bc3127ad9e6440d9e4d1e785b455f55fcfe80a3434dc40f8e6df85be88c001a04667e403b9f9349babcf1c601584e9d5c0f8fe60b61516ef356dd8264afd71eca03f3b808f116b1fe59cc94b16f13a565759a1c64ac46f5390cd025c970d4abab8c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6def9d0ad1414d78220d49fd0dbd96ef29b953c4c3b492c0553d61b00b7e8a39", + "stateRoot": "0xcb077498b97157b2547d2246ed5ebee8b7e1d6b8a879b1c63175847ce577ab55", "transactionsTrie": "0x01c1479a842ee20dba3b2ecc393e48b3118cf90de0351765e50ebec46df61b63", "receiptTrie": "0x36595bb2d5b0ca60db87f44279ba5dbab354471ad2aa0c19c6641019850ee5bb", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7823,8 +7883,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028aee", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -7832,7 +7892,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf5af3659b136ee9673b4cba23488807bb07d754e8a9eee2df49296d39ea40506" + "hash": "0x7dfa213a023b970f4bd03771bdda05cec5f114d051ab378b5a26a2d9d961a0b1" }, "blocknumber": "1", "transactions": [ @@ -7857,7 +7917,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf5af3659b136ee9673b4cba23488807bb07d754e8a9eee2df49296d39ea40506", + "lastblockhash": "0x7dfa213a023b970f4bd03771bdda05cec5f114d051ab378b5a26a2d9d961a0b1", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -7895,7 +7955,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -7907,9 +7967,10 @@ }, "sealEngine": "NoProof" }, - "060-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_26b753dec0560daa]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -7940,12 +8001,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e31b37e7efd166a38a47e3cd2a0cc4309474cb222d48465f070e2799f9a01ad7a0327368ccb307f9315b3d6bde7cf9ede667c1cca396904096d5dc8c7bb81c3a1ca0f521defef700cc1dbe52bf6fa2da712b09b13684d78fa9cef3a24ac4e957b0c7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ef8e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef000000000000000000000000000000000000000000000000000000000000000073e66878b46ae3705eb6a46a89213de7d3686828bfce5c19400fffff0010000193efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655690f53a4837bbde6ab0838fef0c0be5339ab03a78342c221cf6b2d6e465d01a3d47585a808c9d8d25dee885007deeb107c080a07b78f776e7375a5215e878f719cb37622be31a5407bfaa4542f9ffec24081a58a01ee0c5d868149b759a039cb2fff53ea2b70b41c61a16d2e887ef13b9e916f9ddc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c4615aef7d8dddaff4231e7f00c3df3f36a5bd5b36d8384e77bcc4ef6e86eafea0327368ccb307f9315b3d6bde7cf9ede667c1cca396904096d5dc8c7bb81c3a1ca0f521defef700cc1dbe52bf6fa2da712b09b13684d78fa9cef3a24ac4e957b0c7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ef8e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef000000000000000000000000000000000000000000000000000000000000000073e66878b46ae3705eb6a46a89213de7d3686828bfce5c19400fffff0010000193efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655690f53a4837bbde6ab0838fef0c0be5339ab03a78342c221cf6b2d6e465d01a3d47585a808c9d8d25dee885007deeb107c080a07b78f776e7375a5215e878f719cb37622be31a5407bfaa4542f9ffec24081a58a01ee0c5d868149b759a039cb2fff53ea2b70b41c61a16d2e887ef13b9e916f9ddc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe31b37e7efd166a38a47e3cd2a0cc4309474cb222d48465f070e2799f9a01ad7", + "stateRoot": "0xc4615aef7d8dddaff4231e7f00c3df3f36a5bd5b36d8384e77bcc4ef6e86eafe", "transactionsTrie": "0x327368ccb307f9315b3d6bde7cf9ede667c1cca396904096d5dc8c7bb81c3a1c", "receiptTrie": "0xf521defef700cc1dbe52bf6fa2da712b09b13684d78fa9cef3a24ac4e957b0c7", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7953,8 +8014,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01ef8e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -7962,7 +8023,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x88c8ee45373cb8fdd58e45bb0ef7582bdc6c9b92d398681d8ebeeb8059166e9b" + "hash": "0xc513d3057cde93891ddf67187c3aab16aa2aa8dbac5f1f65df7f627dad01ce2b" }, "blocknumber": "1", "transactions": [ @@ -7987,7 +8048,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x88c8ee45373cb8fdd58e45bb0ef7582bdc6c9b92d398681d8ebeeb8059166e9b", + "lastblockhash": "0xc513d3057cde93891ddf67187c3aab16aa2aa8dbac5f1f65df7f627dad01ce2b", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -8023,7 +8084,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -8035,9 +8096,10 @@ }, "sealEngine": "NoProof" }, - "061-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_2b76dc9e3abf42f3]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8068,12 +8130,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09429e7ac59df28029f8a855b7d5828ff6427b9cbee52b021fa5fa9cecc27d5bea0f1cb0c9347f73759e25870b0e148e1a5c4380fcd8ccdd03432aa6cbe524a46d2a0c3c65c206583fcf6305a4dd04ddabcfd990686acc213716af1d1f51191a104adb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289ce0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0afba91e74b2d8fde6720a6f8b4307fd13161c62f1ecad8a907833c582cb1208ea06398c153f32aa26863ae921c58dc6e8f9e7481fe399a385b235334ffab1e0267c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03e051562b62a39ae1e66d84be157ec70e9acc405ea2b200f1b53372a72a1cbb0a0f1cb0c9347f73759e25870b0e148e1a5c4380fcd8ccdd03432aa6cbe524a46d2a0c3c65c206583fcf6305a4dd04ddabcfd990686acc213716af1d1f51191a104adb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289ce8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0afba91e74b2d8fde6720a6f8b4307fd13161c62f1ecad8a907833c582cb1208ea06398c153f32aa26863ae921c58dc6e8f9e7481fe399a385b235334ffab1e0267c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9429e7ac59df28029f8a855b7d5828ff6427b9cbee52b021fa5fa9cecc27d5be", + "stateRoot": "0x3e051562b62a39ae1e66d84be157ec70e9acc405ea2b200f1b53372a72a1cbb0", "transactionsTrie": "0xf1cb0c9347f73759e25870b0e148e1a5c4380fcd8ccdd03432aa6cbe524a46d2", "receiptTrie": "0xc3c65c206583fcf6305a4dd04ddabcfd990686acc213716af1d1f51191a104ad", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -8081,8 +8143,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0289ce", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -8090,7 +8152,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa781a00cd99309c850001db11794c6c953434ebf9c766381f68558d7e64c10b2" + "hash": "0x8f56009a0976f3a00cf1d63a6ea3475c314bb8b075eb20221d7aff2b72291ada" }, "blocknumber": "1", "transactions": [ @@ -8115,7 +8177,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa781a00cd99309c850001db11794c6c953434ebf9c766381f68558d7e64c10b2", + "lastblockhash": "0x8f56009a0976f3a00cf1d63a6ea3475c314bb8b075eb20221d7aff2b72291ada", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -8153,7 +8215,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -8165,9 +8227,10 @@ }, "sealEngine": "NoProof" }, - "062-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_31ebd010e6098750]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8198,12 +8261,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06e4259768907803f444f41968be7cd43ce94a09e851e4464eb51712463320017a031ed5b16801e076fd201ad17bf100b3796b25848cc7b4a758297128eab3e9736a0274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c860c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000001522a4a7f34e1ea350ae07c29c96c7e79655aa926122e95fe69fcbd932ca49e98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b9b65c2ebc89e669cf19e82fb178f0d1e9c958edbebe9ead62e97e95e2dcdc4972729fb9661f0cae3532b71b2664a8c1c001a0b86399bbb8f067bd98625e32eae7f4a66ba16d099422e5a32ec5b1387ecc631ca0616335ec00e6632fc44c192dcd15f38ccd3432e8465f04e895964daf645a9e6fc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa089e30b7a2cb53b79e5f4e626fc587a0e8443a7f05669b19ad90f5bb4258c2a47a031ed5b16801e076fd201ad17bf100b3796b25848cc7b4a758297128eab3e9736a0274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c868203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000001522a4a7f34e1ea350ae07c29c96c7e79655aa926122e95fe69fcbd932ca49e98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b9b65c2ebc89e669cf19e82fb178f0d1e9c958edbebe9ead62e97e95e2dcdc4972729fb9661f0cae3532b71b2664a8c1c001a0b86399bbb8f067bd98625e32eae7f4a66ba16d099422e5a32ec5b1387ecc631ca0616335ec00e6632fc44c192dcd15f38ccd3432e8465f04e895964daf645a9e6fc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6e4259768907803f444f41968be7cd43ce94a09e851e4464eb51712463320017", + "stateRoot": "0x89e30b7a2cb53b79e5f4e626fc587a0e8443a7f05669b19ad90f5bb4258c2a47", "transactionsTrie": "0x31ed5b16801e076fd201ad17bf100b3796b25848cc7b4a758297128eab3e9736", "receiptTrie": "0x274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -8211,8 +8274,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c86", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -8220,7 +8283,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x39eecb29e875267c94781ff204e49aa8beb955c965511e0404459cc4cf48223e" + "hash": "0x706d92565105452037ce1590c170b4ef2d6cc65cd40d9ad44b5e6889a36fd3d3" }, "blocknumber": "1", "transactions": [ @@ -8245,7 +8308,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x39eecb29e875267c94781ff204e49aa8beb955c965511e0404459cc4cf48223e", + "lastblockhash": "0x706d92565105452037ce1590c170b4ef2d6cc65cd40d9ad44b5e6889a36fd3d3", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -8283,7 +8346,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -8295,9 +8358,10 @@ }, "sealEngine": "NoProof" }, - "063-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_3208425794224c3f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3208425794224c3f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8328,12 +8392,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06e87773a08f8c44ef60f7898cd7f2ca9fce264b2b52719ad25510ddb4c31f7bca0205437291c8e84cf67c9f9401eb82e108a0e317929c0b9debc4f3ae42d726803a0cd5198e7bb94cb328dee8f6d5b1c67c93cbefde9ed36fc23a528d3999b175a6ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289020c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a07b00950cae46ca7dddd42071e9d1a802d65ceacaf5c214ea7b512d1a87acab91a02702113e47c769a2e58b09d34a6276ce3af5c31a516b578927aed109be75efc8c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c8f9f899db14861d6a4fb7d7d79b7686017e14e21f763329997320bc1e15846a0205437291c8e84cf67c9f9401eb82e108a0e317929c0b9debc4f3ae42d726803a0cd5198e7bb94cb328dee8f6d5b1c67c93cbefde9ed36fc23a528d3999b175a6ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289028203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363060000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a07b00950cae46ca7dddd42071e9d1a802d65ceacaf5c214ea7b512d1a87acab91a02702113e47c769a2e58b09d34a6276ce3af5c31a516b578927aed109be75efc8c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6e87773a08f8c44ef60f7898cd7f2ca9fce264b2b52719ad25510ddb4c31f7bc", + "stateRoot": "0x9c8f9f899db14861d6a4fb7d7d79b7686017e14e21f763329997320bc1e15846", "transactionsTrie": "0x205437291c8e84cf67c9f9401eb82e108a0e317929c0b9debc4f3ae42d726803", "receiptTrie": "0xcd5198e7bb94cb328dee8f6d5b1c67c93cbefde9ed36fc23a528d3999b175a6a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -8341,8 +8405,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028902", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -8350,7 +8414,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3a248ed15469adbdef1a0b9e4f0e400c0eb1d5d0314fb1c3259dbdfa97465ad9" + "hash": "0xbf968e9e829cb480a25576e2a1f2c686c8ba6f03ce102d9887c3f0be7ac1f5c5" }, "blocknumber": "1", "transactions": [ @@ -8375,7 +8439,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3a248ed15469adbdef1a0b9e4f0e400c0eb1d5d0314fb1c3259dbdfa97465ad9", + "lastblockhash": "0xbf968e9e829cb480a25576e2a1f2c686c8ba6f03ce102d9887c3f0be7ac1f5c5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -8413,7 +8477,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -8425,9 +8489,10 @@ }, "sealEngine": "NoProof" }, - "064-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_36817bfd67de97a8]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8458,12 +8523,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dda1f9159556121e66cd02e004631ec49b7038a279d4d70cfba505e83425af9aa02d53b4e174b17f7935bd731e76f8c46e7dd22b4cb42f3851e6514ed31d7e9980a0f521defef700cc1dbe52bf6fa2da712b09b13684d78fa9cef3a24ac4e957b0c7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ef8e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a063ffad823cb44d2b1681b052aa1a1c5550a5649cf6f656a2ddd3d8bbeda00629a00656fc4928d944dbb9b9c25c6c31ed336de7b7295f4ab5b3ae781a74628bf38fc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02d7a1be34b7c5a09c8a353fc9bcbedca2bc6e0c296700fdfc418ab67fd6f3ee9a02d53b4e174b17f7935bd731e76f8c46e7dd22b4cb42f3851e6514ed31d7e9980a0f521defef700cc1dbe52bf6fa2da712b09b13684d78fa9cef3a24ac4e957b0c7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ef8e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a063ffad823cb44d2b1681b052aa1a1c5550a5649cf6f656a2ddd3d8bbeda00629a00656fc4928d944dbb9b9c25c6c31ed336de7b7295f4ab5b3ae781a74628bf38fc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdda1f9159556121e66cd02e004631ec49b7038a279d4d70cfba505e83425af9a", + "stateRoot": "0x2d7a1be34b7c5a09c8a353fc9bcbedca2bc6e0c296700fdfc418ab67fd6f3ee9", "transactionsTrie": "0x2d53b4e174b17f7935bd731e76f8c46e7dd22b4cb42f3851e6514ed31d7e9980", "receiptTrie": "0xf521defef700cc1dbe52bf6fa2da712b09b13684d78fa9cef3a24ac4e957b0c7", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -8471,8 +8536,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01ef8e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -8480,7 +8545,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x795c35516a954acd112950c0ac68995946a3f1dc097971fd3cbc9d829770f72b" + "hash": "0x53bda92b7a8365a95e45183a5691075c32733bf85517433dc50116130101e7b0" }, "blocknumber": "1", "transactions": [ @@ -8505,7 +8570,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x795c35516a954acd112950c0ac68995946a3f1dc097971fd3cbc9d829770f72b", + "lastblockhash": "0x53bda92b7a8365a95e45183a5691075c32733bf85517433dc50116130101e7b0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -8541,7 +8606,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -8553,9 +8618,10 @@ }, "sealEngine": "NoProof" }, - "065-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_392169c16a2e5ef6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8586,12 +8652,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ba8c269b2a19e3608f3fd4d09f23cb33c06ca68d03b3c4a07a918f7c024aecada01d32d6ddadd17afd9016df4ed386d5960b3132964e575b909398229cf0b540e3a06ac4d31628e4cf708bb4bcdb44386bb20f55b55797f7b99afd3f3bfd0c1d2cbdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c4a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffca421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06b08a5afbb1717334e08e05576b07bff58e8851d8cfd9ea71da1ab4233ad4217cffabd669dfa89c3ebf4c44f91694a2f4c080a051a8ecabbd377c69896eefaf1dd4dfe9fa9c9530d93ae9a680cf5bda84ee627ba0731da720547d59f22378597d07dcf4f7ca90a80a91e749b6bc95175004a72ba7c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04b2b4b04d7a2ff4fe4a3c6444395faa6a995a2d242605e050d9f53f3680ec0eba01d32d6ddadd17afd9016df4ed386d5960b3132964e575b909398229cf0b540e3a06ac4d31628e4cf708bb4bcdb44386bb20f55b55797f7b99afd3f3bfd0c1d2cbdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c4a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffca421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06b08a5afbb1717334e08e05576b07bff58e8851d8cfd9ea71da1ab4233ad4217cffabd669dfa89c3ebf4c44f91694a2f4c080a051a8ecabbd377c69896eefaf1dd4dfe9fa9c9530d93ae9a680cf5bda84ee627ba0731da720547d59f22378597d07dcf4f7ca90a80a91e749b6bc95175004a72ba7c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xba8c269b2a19e3608f3fd4d09f23cb33c06ca68d03b3c4a07a918f7c024aecad", + "stateRoot": "0x4b2b4b04d7a2ff4fe4a3c6444395faa6a995a2d242605e050d9f53f3680ec0eb", "transactionsTrie": "0x1d32d6ddadd17afd9016df4ed386d5960b3132964e575b909398229cf0b540e3", "receiptTrie": "0x6ac4d31628e4cf708bb4bcdb44386bb20f55b55797f7b99afd3f3bfd0c1d2cbd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -8599,8 +8665,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c4a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -8608,7 +8674,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xda1bb2777e9f329fdb55082922f142ae55bfa0d1ffe0ca298f1c040a7b46ec01" + "hash": "0xf59b460fc326d2f437e682e8836783a72af2b73241572dd3f1a758a6572f3a81" }, "blocknumber": "1", "transactions": [ @@ -8633,7 +8699,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xda1bb2777e9f329fdb55082922f142ae55bfa0d1ffe0ca298f1c040a7b46ec01", + "lastblockhash": "0xf59b460fc326d2f437e682e8836783a72af2b73241572dd3f1a758a6572f3a81", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -8671,7 +8737,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -8683,9 +8749,10 @@ }, "sealEngine": "NoProof" }, - "066-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_395cf6d697d1a743]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8716,12 +8783,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0299c5b530200b11d96ef2e2ecabf80996751ad88becd73c8e67419ca60acce1ba026137c7a0a83c44a82cbbba0cd3a3426a781c171631723143d511240c5ca5602a04e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b120c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863773eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a00edc24906c0d89c890a0cf653889e60575cc48709b3227d3d8bf9c57a8d32c42a01cf77a2f5521b8ed5c0a73a053b700df4d5c016582ed1b8a860513aa0149a6b9c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03825b2585fac22e42a8201108bdc399aa04fdddcb4190af6dc93a9f07290aa21a026137c7a0a83c44a82cbbba0cd3a3426a781c171631723143d511240c5ca5602a04e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b128203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863773eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a00edc24906c0d89c890a0cf653889e60575cc48709b3227d3d8bf9c57a8d32c42a01cf77a2f5521b8ed5c0a73a053b700df4d5c016582ed1b8a860513aa0149a6b9c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x299c5b530200b11d96ef2e2ecabf80996751ad88becd73c8e67419ca60acce1b", + "stateRoot": "0x3825b2585fac22e42a8201108bdc399aa04fdddcb4190af6dc93a9f07290aa21", "transactionsTrie": "0x26137c7a0a83c44a82cbbba0cd3a3426a781c171631723143d511240c5ca5602", "receiptTrie": "0x4e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -8729,8 +8796,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b12", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -8738,7 +8805,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x74e52ba457f703d775a4ab85909ca078c04f95377230044767e836ab70e005e0" + "hash": "0x0359996dd8abdb8d19198f67087f0e2eaa5c191e8005da7753fad303ad97b572" }, "blocknumber": "1", "transactions": [ @@ -8763,7 +8830,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x74e52ba457f703d775a4ab85909ca078c04f95377230044767e836ab70e005e0", + "lastblockhash": "0x0359996dd8abdb8d19198f67087f0e2eaa5c191e8005da7753fad303ad97b572", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -8801,7 +8868,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -8813,9 +8880,10 @@ }, "sealEngine": "NoProof" }, - "067-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3ac8dc31e9aa6a70]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8846,12 +8914,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa022029c17ab92f037e59e0ba8ec64e912c412700b2c15cc6eeb2e644f70e61bdda040fa52183610ba4bcd5e403a72033079377413bd8f69a04421e0093b3e1aed36a04f151812b62aa8eff6f2c553aba828d87c739a8453016ed9ad095a5ec5044ec9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830288d20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0d59e9b6c29a6d864bba86e554f74eeb8211ecdd35213e65d365b60d84f24d711a044695d5189a953a40af706a9770fdc2c1e72b3153e2b8a251d431bc54bf20ad1c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e4a6d795737ea8b2ccf649ac2066b4a0a3e80749a4ba672f55918659849760bea040fa52183610ba4bcd5e403a72033079377413bd8f69a04421e0093b3e1aed36a04f151812b62aa8eff6f2c553aba828d87c739a8453016ed9ad095a5ec5044ec9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830288d28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0d59e9b6c29a6d864bba86e554f74eeb8211ecdd35213e65d365b60d84f24d711a044695d5189a953a40af706a9770fdc2c1e72b3153e2b8a251d431bc54bf20ad1c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x22029c17ab92f037e59e0ba8ec64e912c412700b2c15cc6eeb2e644f70e61bdd", + "stateRoot": "0xe4a6d795737ea8b2ccf649ac2066b4a0a3e80749a4ba672f55918659849760be", "transactionsTrie": "0x40fa52183610ba4bcd5e403a72033079377413bd8f69a04421e0093b3e1aed36", "receiptTrie": "0x4f151812b62aa8eff6f2c553aba828d87c739a8453016ed9ad095a5ec5044ec9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -8859,8 +8927,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0288d2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -8868,7 +8936,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3b793c97e7cf41ffd4ab376fbc35aec0b1aa43703d86887f8248dc9e078d7ce2" + "hash": "0xe4e1d115fb6eb73b663e4d45fd30cfbfa4d858fe25e98c385d2065b6b9b51e52" }, "blocknumber": "1", "transactions": [ @@ -8893,7 +8961,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3b793c97e7cf41ffd4ab376fbc35aec0b1aa43703d86887f8248dc9e078d7ce2", + "lastblockhash": "0xe4e1d115fb6eb73b663e4d45fd30cfbfa4d858fe25e98c385d2065b6b9b51e52", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -8931,7 +8999,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -8943,9 +9011,10 @@ }, "sealEngine": "NoProof" }, - "068-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c1e8b38219e3e12]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -8976,12 +9045,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07e4d76ac2b0df15645c3571bc7e7f52eeb67931608821360c7ad00841cdeb843a022e3736e7714f6520883f48744fe62b864a0198b546b7fde17d8225771051068a015a792a3e4a2a7bf4e5203d28c75ccc9a1e08c1c67baa29ce3a1185c584b55e2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301efb20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1000000000000000000000000000000000000000000000000000000000000000050625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0690559bfd8e58f5d144588a1a959c93aba58607777e09893f088e404eb2dc47c0269ed8e47c1be79ea07ae726abd921a8c001a0c69dba776ee7fc0ff07d22a68e8f77c8c4f7a695718d46492f46a850fe230ac8a052f857bee68427dd67b549d740d256b27c58000781c2b7094e1fb5d59df074a5c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ee6ad6b7f38ae78bbd11bb0073928db0a579e2a688b8f64a7a9f2dd1d59645bba022e3736e7714f6520883f48744fe62b864a0198b546b7fde17d8225771051068a015a792a3e4a2a7bf4e5203d28c75ccc9a1e08c1c67baa29ce3a1185c584b55e2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301efb28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1000000000000000000000000000000000000000000000000000000000000000050625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0690559bfd8e58f5d144588a1a959c93aba58607777e09893f088e404eb2dc47c0269ed8e47c1be79ea07ae726abd921a8c001a0c69dba776ee7fc0ff07d22a68e8f77c8c4f7a695718d46492f46a850fe230ac8a052f857bee68427dd67b549d740d256b27c58000781c2b7094e1fb5d59df074a5c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7e4d76ac2b0df15645c3571bc7e7f52eeb67931608821360c7ad00841cdeb843", + "stateRoot": "0xee6ad6b7f38ae78bbd11bb0073928db0a579e2a688b8f64a7a9f2dd1d59645bb", "transactionsTrie": "0x22e3736e7714f6520883f48744fe62b864a0198b546b7fde17d8225771051068", "receiptTrie": "0x15a792a3e4a2a7bf4e5203d28c75ccc9a1e08c1c67baa29ce3a1185c584b55e2", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -8989,8 +9058,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01efb2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -8998,7 +9067,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7efe244e361cce42aec862a1fc202dcf43c59e2aa6d683871fb736a4be996808" + "hash": "0x9b005ff66dc32c1b6e4409bcde7dc09bd10700753406e39728f580e26b239d07" }, "blocknumber": "1", "transactions": [ @@ -9023,7 +9092,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x7efe244e361cce42aec862a1fc202dcf43c59e2aa6d683871fb736a4be996808", + "lastblockhash": "0x9b005ff66dc32c1b6e4409bcde7dc09bd10700753406e39728f580e26b239d07", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -9059,7 +9128,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -9071,9 +9140,10 @@ }, "sealEngine": "NoProof" }, - "069-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3c87ec986c2656c2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -9104,12 +9174,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06241a15c2149162920c03d1fa9437a584b091e0cef0c7886b94c359410c0bcb8a0e3163457bd43bb4bf5bd15effc030781b0e413b8029057ad42857d61b412238ca08b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028caa0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d068d72dc4eec977090f452b412a6b0a3cdced2ea6b622ebb6e289c7e05d85cc715b93eca244123c84a60b3ecbf33373903c080a0af068027110a9a1b3a0edbc32d0f5f03df92826848631eb0ee5d267e09a93973a003e93ae2f5ee3fcb798537a2bcff0513c4730f14ae889dcf5848d63af12c1542c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04c64947eca6ce3969dea30fb2c8a5fb9ecb5de3fda144fd06c88c98367c73eaaa0e3163457bd43bb4bf5bd15effc030781b0e413b8029057ad42857d61b412238ca08b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028caa8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d068d72dc4eec977090f452b412a6b0a3cdced2ea6b622ebb6e289c7e05d85cc715b93eca244123c84a60b3ecbf33373903c080a0af068027110a9a1b3a0edbc32d0f5f03df92826848631eb0ee5d267e09a93973a003e93ae2f5ee3fcb798537a2bcff0513c4730f14ae889dcf5848d63af12c1542c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6241a15c2149162920c03d1fa9437a584b091e0cef0c7886b94c359410c0bcb8", + "stateRoot": "0x4c64947eca6ce3969dea30fb2c8a5fb9ecb5de3fda144fd06c88c98367c73eaa", "transactionsTrie": "0xe3163457bd43bb4bf5bd15effc030781b0e413b8029057ad42857d61b412238c", "receiptTrie": "0x8b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -9117,8 +9187,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028caa", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -9126,7 +9196,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xc202486b5aaf3f2f775caeb216a4d5e642e54069b68dff0aed40c47f4d4d0310" + "hash": "0xaa62b88c99ee3bf64fed4af0e41471293b2ad1a8ef6483b0f6921d1124ef5d7f" }, "blocknumber": "1", "transactions": [ @@ -9151,7 +9221,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xc202486b5aaf3f2f775caeb216a4d5e642e54069b68dff0aed40c47f4d4d0310", + "lastblockhash": "0xaa62b88c99ee3bf64fed4af0e41471293b2ad1a8ef6483b0f6921d1124ef5d7f", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -9189,7 +9259,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -9201,9 +9271,10 @@ }, "sealEngine": "NoProof" }, - "070-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_3cd183d0bab85fb7]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -9234,12 +9305,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f11f417e8bae34179422999fe7455f99f02d51e30f5e10071f220cc0493385c9a08d8dc27e5c2ab3d3bfc91a2176e8bd06180bbe166b9dfc319caba700bc4b8f0fa04e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b120c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0f544a23c3fb57a08592ceb891725e3b767ad575036ddf788b3371625630d2bc1a013b4537a9c47802808e089894d50f079a44480c6c357ba6f903c51786dbd5729c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06302f3637ff623cd2b27d70ce56e449b5dc05835b90cc4404d9120dee0b81870a08d8dc27e5c2ab3d3bfc91a2176e8bd06180bbe166b9dfc319caba700bc4b8f0fa04e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b128203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0f544a23c3fb57a08592ceb891725e3b767ad575036ddf788b3371625630d2bc1a013b4537a9c47802808e089894d50f079a44480c6c357ba6f903c51786dbd5729c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf11f417e8bae34179422999fe7455f99f02d51e30f5e10071f220cc0493385c9", + "stateRoot": "0x6302f3637ff623cd2b27d70ce56e449b5dc05835b90cc4404d9120dee0b81870", "transactionsTrie": "0x8d8dc27e5c2ab3d3bfc91a2176e8bd06180bbe166b9dfc319caba700bc4b8f0f", "receiptTrie": "0x4e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -9247,8 +9318,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b12", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -9256,7 +9327,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x891b49a6e9dee5146ee52cc39214aaf0859d66e8389dd04c270240b32eb52e93" + "hash": "0xd90fab70933cd157df09db9ff1b261c664ec3d5c5935ab145d41e4381e0e0bfe" }, "blocknumber": "1", "transactions": [ @@ -9281,7 +9352,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x891b49a6e9dee5146ee52cc39214aaf0859d66e8389dd04c270240b32eb52e93", + "lastblockhash": "0xd90fab70933cd157df09db9ff1b261c664ec3d5c5935ab145d41e4381e0e0bfe", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -9319,7 +9390,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -9331,9 +9402,10 @@ }, "sealEngine": "NoProof" }, - "071-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_420f2a187ce77035]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -9364,12 +9436,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa056164955e64cd598a56f6fdf5963af909fe75c843b88177a591ccfedec7be414a03e4c33039985eb4cd95f351f90afbf4debb2c72837827bf11b671b48889288a4a0f91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b360c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000022bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0699c282db3a79a9ec1553306515e6a71dc43df1ddbd1dbd9d5b71f3c1798ef482f5e1fd84500b0e47c82f72a189ecd526c080a061e86dce798f049f3daa21f7121bceb8fbefe76ae92ac372cf77e84fdc97ca70a02d3166503ca948988089c8337198ddc63f92bfd9930c718494550f90e1bd4291c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0893d3abaff8e69c744e5c9bb2dc1c097ddf67d931378013c66a0671a629fdb6ba03e4c33039985eb4cd95f351f90afbf4debb2c72837827bf11b671b48889288a4a0f91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b368203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000022bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0699c282db3a79a9ec1553306515e6a71dc43df1ddbd1dbd9d5b71f3c1798ef482f5e1fd84500b0e47c82f72a189ecd526c080a061e86dce798f049f3daa21f7121bceb8fbefe76ae92ac372cf77e84fdc97ca70a02d3166503ca948988089c8337198ddc63f92bfd9930c718494550f90e1bd4291c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x56164955e64cd598a56f6fdf5963af909fe75c843b88177a591ccfedec7be414", + "stateRoot": "0x893d3abaff8e69c744e5c9bb2dc1c097ddf67d931378013c66a0671a629fdb6b", "transactionsTrie": "0x3e4c33039985eb4cd95f351f90afbf4debb2c72837827bf11b671b48889288a4", "receiptTrie": "0xf91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -9377,8 +9449,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b36", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -9386,7 +9458,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x4eee5677efbb90149fb01702b062eec73f36d16cf950e2ee93e96ec499a11664" + "hash": "0xf7e65f049b950ee82080741781e2123e94ec5b8ec38c2875178a8dcaaf69c0c7" }, "blocknumber": "1", "transactions": [ @@ -9411,7 +9483,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4eee5677efbb90149fb01702b062eec73f36d16cf950e2ee93e96ec499a11664", + "lastblockhash": "0xf7e65f049b950ee82080741781e2123e94ec5b8ec38c2875178a8dcaaf69c0c7", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -9449,7 +9521,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -9461,9 +9533,10 @@ }, "sealEngine": "NoProof" }, - "072-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_444b73ff54a19b44]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -9494,12 +9567,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aae4765ea23fd258c9029e07b3a595ea46d696a4e078f103ab53e47740efb427a0a0e8d19a40519a4f277d0f4d4b7962b52451e385473436a3ad5914c92491736ca00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b420c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e0000000000000000000000000000000000000000000000000000000000000001443e7af5274b52214ea6c775908c54519fea957eecd98069165a8b771082fd51b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa7de1e32bb336b85e42ff5028167042188317299333f091dd88675e84a550577bfa564b2f57cd2498e2acf875e0aaa40c080a0e838bc6da93976ed68fc58ec34849bdba4354e6da426878704c0c1b3ba9c5c5ca07ea0ef8fb9bf87cdb0ad50de6cef1036b6a7cdbbfbe4d5a4578b22eac52e3f0fc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bd3cd077358842fa7dd5be207de44c900b07b9f106856a71371ebc1b330fab52a0a0e8d19a40519a4f277d0f4d4b7962b52451e385473436a3ad5914c92491736ca00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e0000000000000000000000000000000000000000000000000000000000000001443e7af5274b52214ea6c775908c54519fea957eecd98069165a8b771082fd51b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa7de1e32bb336b85e42ff5028167042188317299333f091dd88675e84a550577bfa564b2f57cd2498e2acf875e0aaa40c080a0e838bc6da93976ed68fc58ec34849bdba4354e6da426878704c0c1b3ba9c5c5ca07ea0ef8fb9bf87cdb0ad50de6cef1036b6a7cdbbfbe4d5a4578b22eac52e3f0fc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xaae4765ea23fd258c9029e07b3a595ea46d696a4e078f103ab53e47740efb427", + "stateRoot": "0xbd3cd077358842fa7dd5be207de44c900b07b9f106856a71371ebc1b330fab52", "transactionsTrie": "0xa0e8d19a40519a4f277d0f4d4b7962b52451e385473436a3ad5914c92491736c", "receiptTrie": "0x0854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -9507,8 +9580,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b42", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -9516,7 +9589,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x16073147d8938eb28e4cd85ebf8d2bfa5fd40ed95c2a212c65d4cd2eeebd8347" + "hash": "0x2a36e5e4b46f1b931787b763bc77fd640ec31a780c17c1166688dda546fc7b14" }, "blocknumber": "1", "transactions": [ @@ -9541,7 +9614,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x16073147d8938eb28e4cd85ebf8d2bfa5fd40ed95c2a212c65d4cd2eeebd8347", + "lastblockhash": "0x2a36e5e4b46f1b931787b763bc77fd640ec31a780c17c1166688dda546fc7b14", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -9579,7 +9652,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -9591,9 +9664,10 @@ }, "sealEngine": "NoProof" }, - "073-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_53a9bdf4f75196da]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -9624,12 +9698,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa078d747da9de7ebbee4ee9a946d030d50490e82afc073f5061b9ea13a9c79a0a7a09d65db0c1d55cbe078ed658fc3aa400c9629ed9fae334c80c1b69788a763cb63a0274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c860c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d3630673eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0a2e5fd2288f89860236f9e7c6f98eba4de7dbaee1c3521e805b33fd3f8e935aaa020cae692d1a23b0cfb422af34e238b1792e2bc38bdcc816c86ab692ea6618ab3c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00a6f2071e98b55b247cd539ad6874e31e1642921c42c89cf065f74959219c438a09d65db0c1d55cbe078ed658fc3aa400c9629ed9fae334c80c1b69788a763cb63a0274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c868203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d3630673eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0a2e5fd2288f89860236f9e7c6f98eba4de7dbaee1c3521e805b33fd3f8e935aaa020cae692d1a23b0cfb422af34e238b1792e2bc38bdcc816c86ab692ea6618ab3c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x78d747da9de7ebbee4ee9a946d030d50490e82afc073f5061b9ea13a9c79a0a7", + "stateRoot": "0x0a6f2071e98b55b247cd539ad6874e31e1642921c42c89cf065f74959219c438", "transactionsTrie": "0x9d65db0c1d55cbe078ed658fc3aa400c9629ed9fae334c80c1b69788a763cb63", "receiptTrie": "0x274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -9637,8 +9711,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c86", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -9646,7 +9720,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x02d19ba523b823f30262596ba1811ea38c5af4f75403dc0bb00aad8b57e41263" + "hash": "0x8791a304f43c4dab0ad21d8408c6b0d8f017e3fd23ba4a6140c6c533ecea9d43" }, "blocknumber": "1", "transactions": [ @@ -9671,7 +9745,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x02d19ba523b823f30262596ba1811ea38c5af4f75403dc0bb00aad8b57e41263", + "lastblockhash": "0x8791a304f43c4dab0ad21d8408c6b0d8f017e3fd23ba4a6140c6c533ecea9d43", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -9709,7 +9783,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -9721,9 +9795,10 @@ }, "sealEngine": "NoProof" }, - "074-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_585454b31673dd62": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_585454b31673dd62]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -9754,12 +9829,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08992a363366498252008e0a40a192808c63f3189584701084b1446bcd2ffa883a0052c9d9f520ab6ab07860f7febf09202053dba23a6cbbef0f78a15a4a7b6c697a0749032247246bcdf2492dea7e7ef5b1105456aff8ad398d97bc96f6fc940b88ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ee4a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0077feb8e62d60659f7cf3e1c36536812e6218a3db1cc00c45fc3b2b19a5e560fa05ecfbc251e54d486a7c24ad00828f0a2c598ec458b2843d8c5bd8b6cb9579d14c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ae67ae26d62fd709b5072b352a06b4e336c88eec0c35f0a548a546850b359261a0052c9d9f520ab6ab07860f7febf09202053dba23a6cbbef0f78a15a4a7b6c697a0749032247246bcdf2492dea7e7ef5b1105456aff8ad398d97bc96f6fc940b88ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ee4a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0077feb8e62d60659f7cf3e1c36536812e6218a3db1cc00c45fc3b2b19a5e560fa05ecfbc251e54d486a7c24ad00828f0a2c598ec458b2843d8c5bd8b6cb9579d14c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8992a363366498252008e0a40a192808c63f3189584701084b1446bcd2ffa883", + "stateRoot": "0xae67ae26d62fd709b5072b352a06b4e336c88eec0c35f0a548a546850b359261", "transactionsTrie": "0x052c9d9f520ab6ab07860f7febf09202053dba23a6cbbef0f78a15a4a7b6c697", "receiptTrie": "0x749032247246bcdf2492dea7e7ef5b1105456aff8ad398d97bc96f6fc940b88a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -9767,8 +9842,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01ee4a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -9776,7 +9851,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x531806dc481358b4241cba942a7e7a7125cbb813b86f2b2b09a7539cff8373c7" + "hash": "0x04dc4a563e579641939ac038673cb842f717df44c779d1ced83701cbaa49925e" }, "blocknumber": "1", "transactions": [ @@ -9801,7 +9876,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x531806dc481358b4241cba942a7e7a7125cbb813b86f2b2b09a7539cff8373c7", + "lastblockhash": "0x04dc4a563e579641939ac038673cb842f717df44c779d1ced83701cbaa49925e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -9837,7 +9912,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -9849,9 +9924,10 @@ }, "sealEngine": "NoProof" }, - "075-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_7db4f140a955dd1a]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -9882,12 +9958,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0074375b4e26cb4890811c8636d0b2089d16b8245bc87947284d72833bf12fdf8a09245dc33b6e0a0c509f1b5bdf5c19bd155f8cac6073b6d0145d08b27de9920e7a0274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c860c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000058cdc98c4c44791bb8ba7e58a80324ef8c021c79c68e253c430fa2663188f7f2b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193ab0ac600174134691bf9d91fee448b4d58c127356567da1c456b9c38468909d4effe6b7faa11177e1f96ee5d2834df001c001a0a86d998ae0119a44401fa600566292d72a11f152a1191ab72d3cf3a6ca9fb1f6a07169941cc11fd5f2d59d4f0c2e502284963004b431ca9d7a6795ae6d7b2d6f63c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa050edbb3c9740807fb86fa67c48679a8a6788d6b0aeb9e9335a5e15c65fbc167fa09245dc33b6e0a0c509f1b5bdf5c19bd155f8cac6073b6d0145d08b27de9920e7a0274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c868203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000058cdc98c4c44791bb8ba7e58a80324ef8c021c79c68e253c430fa2663188f7f2b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193ab0ac600174134691bf9d91fee448b4d58c127356567da1c456b9c38468909d4effe6b7faa11177e1f96ee5d2834df001c001a0a86d998ae0119a44401fa600566292d72a11f152a1191ab72d3cf3a6ca9fb1f6a07169941cc11fd5f2d59d4f0c2e502284963004b431ca9d7a6795ae6d7b2d6f63c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x074375b4e26cb4890811c8636d0b2089d16b8245bc87947284d72833bf12fdf8", + "stateRoot": "0x50edbb3c9740807fb86fa67c48679a8a6788d6b0aeb9e9335a5e15c65fbc167f", "transactionsTrie": "0x9245dc33b6e0a0c509f1b5bdf5c19bd155f8cac6073b6d0145d08b27de9920e7", "receiptTrie": "0x274957ba64edf860e8f2e23aaecc40d94ffab82273d69fc1d8bfecd6724434b6", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -9895,8 +9971,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c86", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -9904,7 +9980,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb8bfdd892d2a24d678e3fcb28f49b561fe995ef60dc0e59843621f9394055b92" + "hash": "0x8068602201d595e53c0f7cc9bb97c907839218db1e84c12e7869863b84fac453" }, "blocknumber": "1", "transactions": [ @@ -9929,7 +10005,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb8bfdd892d2a24d678e3fcb28f49b561fe995ef60dc0e59843621f9394055b92", + "lastblockhash": "0x8068602201d595e53c0f7cc9bb97c907839218db1e84c12e7869863b84fac453", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -9967,7 +10043,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -9979,9 +10055,10 @@ }, "sealEngine": "NoProof" }, - "076-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_83e53423a2dd93fe]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -10012,12 +10089,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c86f9ab1d09cc7ce0eef9a92cec27b0e8f3a3ba000951e314a79d330e6b67feda0571eb623c63bf49bc742f8b50b57b4fa7c1a4813d5de5c77c82932caffb01d32a07e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b060c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d068e3069b19e6e71aed9b7dc8fbba13e4217d91cfc59be47cfaa7d09ef626242517541992c0f76091ddabf271682cc7c2cc001a0f8b90b4c2fdf0672d13117c0776b52d30e44b838cac9ba6292a51711f9e565aba030b06f921d772eeb002ce651a2802bb91498bdf15f32152e01e07f5f003ecae3c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b08b84212f5c572e3020774ca7b306e7c1dceb0ee5712e1f47b73a689b8c1940a0571eb623c63bf49bc742f8b50b57b4fa7c1a4813d5de5c77c82932caffb01d32a07e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b068203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d068e3069b19e6e71aed9b7dc8fbba13e4217d91cfc59be47cfaa7d09ef626242517541992c0f76091ddabf271682cc7c2cc001a0f8b90b4c2fdf0672d13117c0776b52d30e44b838cac9ba6292a51711f9e565aba030b06f921d772eeb002ce651a2802bb91498bdf15f32152e01e07f5f003ecae3c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc86f9ab1d09cc7ce0eef9a92cec27b0e8f3a3ba000951e314a79d330e6b67fed", + "stateRoot": "0xb08b84212f5c572e3020774ca7b306e7c1dceb0ee5712e1f47b73a689b8c1940", "transactionsTrie": "0x571eb623c63bf49bc742f8b50b57b4fa7c1a4813d5de5c77c82932caffb01d32", "receiptTrie": "0x7e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166dd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -10025,8 +10102,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b06", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -10034,7 +10111,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xe3b737fb9f47f82488e0f504ccd93357e9793b0a6974a525c7b14c111f1e6364" + "hash": "0x2dee014bfaaecdba7421d49e6afc078274e4e39dc4261f5d603dd649d8ee4268" }, "blocknumber": "1", "transactions": [ @@ -10059,7 +10136,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xe3b737fb9f47f82488e0f504ccd93357e9793b0a6974a525c7b14c111f1e6364", + "lastblockhash": "0x2dee014bfaaecdba7421d49e6afc078274e4e39dc4261f5d603dd649d8ee4268", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -10097,7 +10174,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -10109,9 +10186,10 @@ }, "sealEngine": "NoProof" }, - "077-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b24f8997145435c]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -10142,12 +10220,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09d4500d589b4a3386466a6e31628740ee86715f70574c017f3c605be622ef87da0317df4d41c72f0fd1de094501a96b9a4f17aa29295efcec532438d09e6616687a03db27d938f9a0fe7606d8f3ceef3343bac110ef0e0777685854ae1de08bede19b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289b60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556afc13cef6ed41f7abe142d32d7b5354e5664bd4b6d52080460dd404dc2cb26269c24826d2bcd0152d0b55ee0a9e90289c080a0d6c26c4fc98d7c6e3a628b9d8fadee4865627839329aed7a0d5ee6b70659aec8a03f930d8b4fcce01b53c707a1e5e0d57444e7d7914102d331e77c081aae0f5a11c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01f3262ba52fdaeb006ce009b0b93bee9f60c4caf8cbd37f7bbcd3e66109acfc5a0317df4d41c72f0fd1de094501a96b9a4f17aa29295efcec532438d09e6616687a03db27d938f9a0fe7606d8f3ceef3343bac110ef0e0777685854ae1de08bede19b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289b68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556afc13cef6ed41f7abe142d32d7b5354e5664bd4b6d52080460dd404dc2cb26269c24826d2bcd0152d0b55ee0a9e90289c080a0d6c26c4fc98d7c6e3a628b9d8fadee4865627839329aed7a0d5ee6b70659aec8a03f930d8b4fcce01b53c707a1e5e0d57444e7d7914102d331e77c081aae0f5a11c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9d4500d589b4a3386466a6e31628740ee86715f70574c017f3c605be622ef87d", + "stateRoot": "0x1f3262ba52fdaeb006ce009b0b93bee9f60c4caf8cbd37f7bbcd3e66109acfc5", "transactionsTrie": "0x317df4d41c72f0fd1de094501a96b9a4f17aa29295efcec532438d09e6616687", "receiptTrie": "0x3db27d938f9a0fe7606d8f3ceef3343bac110ef0e0777685854ae1de08bede19", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -10155,8 +10233,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0289b6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -10164,7 +10242,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1bb9da2a79f1238ee9cbd040f8516b9062b33436b881717b2780a655f1506ad9" + "hash": "0x97f0a5438e4dff0fa5a573c8b7e782a85362265d8317697f8363b79b59d9a118" }, "blocknumber": "1", "transactions": [ @@ -10189,7 +10267,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1bb9da2a79f1238ee9cbd040f8516b9062b33436b881717b2780a655f1506ad9", + "lastblockhash": "0x97f0a5438e4dff0fa5a573c8b7e782a85362265d8317697f8363b79b59d9a118", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -10227,7 +10305,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -10239,9 +10317,10 @@ }, "sealEngine": "NoProof" }, - "078-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_9b754afb690c47e1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -10272,12 +10351,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a36e8869d420e367892e1f1667b9e07dfd034facad0f4dfa0b1ef620c9852bda0ad8057626099a46cf71b10f61dd70170deaec09b46058d6e61a5ea448188be3aa04e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b120c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000273eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0ff9ab24e67185c0a3ea32116ddc04fcb5a1cc1bf9abfbf95a20c15a498558cbba02957afcf781c2ba6c6cd8e29e01072d7a75163c28ce1525f50fe730d7844b5b3c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa080ba97bba40a5ad619b4f49e25141a451e77335b8dff61daa44dfde9ed9a45daa0ad8057626099a46cf71b10f61dd70170deaec09b46058d6e61a5ea448188be3aa04e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b128203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c0000000000000000000000000000000000000000000000000000000000000000273eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a0ff9ab24e67185c0a3ea32116ddc04fcb5a1cc1bf9abfbf95a20c15a498558cbba02957afcf781c2ba6c6cd8e29e01072d7a75163c28ce1525f50fe730d7844b5b3c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x1a36e8869d420e367892e1f1667b9e07dfd034facad0f4dfa0b1ef620c9852bd", + "stateRoot": "0x80ba97bba40a5ad619b4f49e25141a451e77335b8dff61daa44dfde9ed9a45da", "transactionsTrie": "0xad8057626099a46cf71b10f61dd70170deaec09b46058d6e61a5ea448188be3a", "receiptTrie": "0x4e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -10285,8 +10364,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b12", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -10294,7 +10373,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa55a6d6e58036ec9b76ab02fc4ee20eaf1c5baed9a2a373eb1555797390fc271" + "hash": "0x83546c9e8c26002eb7131ec5f5c704c57969ec6ba611bd7700f7b6192fa09a08" }, "blocknumber": "1", "transactions": [ @@ -10319,7 +10398,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa55a6d6e58036ec9b76ab02fc4ee20eaf1c5baed9a2a373eb1555797390fc271", + "lastblockhash": "0x83546c9e8c26002eb7131ec5f5c704c57969ec6ba611bd7700f7b6192fa09a08", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -10357,7 +10436,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -10369,9 +10448,10 @@ }, "sealEngine": "NoProof" }, - "079-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_a0be66af9a97ea52]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -10402,12 +10482,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02828205630590b438ba8bd8f09f2aa414d17c354577d1793c87952594d02e4d3a0aae8148356f17ee14d26d0dd97585d0cdd3a5bb29fde552099a23514a2fc4367a0c3c65c206583fcf6305a4dd04ddabcfd990686acc213716af1d1f51191a104adb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289ce0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0c6de0a5b4d1b3a61b6cae300c7c8838853711435a62fdea81a1321e0335dcdbba02666f15a2c26f68a2eefdbd3d1aad5b4e01935aa3de6a741d76f77a0362bc6b0c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e2f6d02669c65be0f74ea8af047aa15830d487db23b95bc12c0c5ea5f9b92179a0aae8148356f17ee14d26d0dd97585d0cdd3a5bb29fde552099a23514a2fc4367a0c3c65c206583fcf6305a4dd04ddabcfd990686acc213716af1d1f51191a104adb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289ce8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001cf45213dd7b4716864d378f3c6d861467987e4d94b7f79a1f814a697e3863700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a0c6de0a5b4d1b3a61b6cae300c7c8838853711435a62fdea81a1321e0335dcdbba02666f15a2c26f68a2eefdbd3d1aad5b4e01935aa3de6a741d76f77a0362bc6b0c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x2828205630590b438ba8bd8f09f2aa414d17c354577d1793c87952594d02e4d3", + "stateRoot": "0xe2f6d02669c65be0f74ea8af047aa15830d487db23b95bc12c0c5ea5f9b92179", "transactionsTrie": "0xaae8148356f17ee14d26d0dd97585d0cdd3a5bb29fde552099a23514a2fc4367", "receiptTrie": "0xc3c65c206583fcf6305a4dd04ddabcfd990686acc213716af1d1f51191a104ad", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -10415,8 +10495,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0289ce", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -10424,7 +10504,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x8fb29652119b3ac323190cb26007400f7b004e326f5c16d83b99091143ad5d8c" + "hash": "0x1787d079e51608660e57406a3abb39a480dccf700dc9accbc5525d4829bc8d79" }, "blocknumber": "1", "transactions": [ @@ -10449,7 +10529,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x8fb29652119b3ac323190cb26007400f7b004e326f5c16d83b99091143ad5d8c", + "lastblockhash": "0x1787d079e51608660e57406a3abb39a480dccf700dc9accbc5525d4829bc8d79", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -10487,7 +10567,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -10499,9 +10579,10 @@ }, "sealEngine": "NoProof" }, - "080-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_af669445747d2585": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af669445747d2585]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -10532,12 +10613,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa024bdc5bc7dba0d025d999c9c1907d4410a6c143a04d9f04b0da073d9cc71342ba08c48982825d75a341c3d039e721802dd6d0e69453ebf1ed029d6ad3291669df8a08b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028caa0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066c28d6edfea2f5e1638cb1a8be8197549d52e133fa9dae87e52abb45f7b192ddb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa88d68fe3ad0d09b07f4605b1364c8d4804bf7096dae003d821cc01c3b7d35c6d1fdae14e2db3c05e1cdcea7c7b7f262c001a00701c49658a38d7c49cecaf3fa86dad653181ad60aa1adbdd7340596998ca0bfa04464656ebceb017add91468367326936f895b7ccb08f193383d0e2213885fc2ec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b2ce3de47c57c35a8fbba36b4a1d5fde2228ac28d0716df2e11500a6b6013ec0a08c48982825d75a341c3d039e721802dd6d0e69453ebf1ed029d6ad3291669df8a08b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028caa8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066c28d6edfea2f5e1638cb1a8be8197549d52e133fa9dae87e52abb45f7b192ddb49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa88d68fe3ad0d09b07f4605b1364c8d4804bf7096dae003d821cc01c3b7d35c6d1fdae14e2db3c05e1cdcea7c7b7f262c001a00701c49658a38d7c49cecaf3fa86dad653181ad60aa1adbdd7340596998ca0bfa04464656ebceb017add91468367326936f895b7ccb08f193383d0e2213885fc2ec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x24bdc5bc7dba0d025d999c9c1907d4410a6c143a04d9f04b0da073d9cc71342b", + "stateRoot": "0xb2ce3de47c57c35a8fbba36b4a1d5fde2228ac28d0716df2e11500a6b6013ec0", "transactionsTrie": "0x8c48982825d75a341c3d039e721802dd6d0e69453ebf1ed029d6ad3291669df8", "receiptTrie": "0x8b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -10545,8 +10626,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028caa", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -10554,7 +10635,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x994ed7ceba5d066dbf2140e5216ce2729e057991ff3a33e02f729f8f48b57ab1" + "hash": "0xdd767762dff3bb3d3a5f4a00e470be79e6929e87d6578fb5c25242e684d321a9" }, "blocknumber": "1", "transactions": [ @@ -10579,7 +10660,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x994ed7ceba5d066dbf2140e5216ce2729e057991ff3a33e02f729f8f48b57ab1", + "lastblockhash": "0xdd767762dff3bb3d3a5f4a00e470be79e6929e87d6578fb5c25242e684d321a9", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -10617,7 +10698,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -10629,9 +10710,10 @@ }, "sealEngine": "NoProof" }, - "081-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_af8b75f664ed7d43]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -10662,12 +10744,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00b7f49d0808e7f4029fd8fbc7a9cf2c91d845b38493b2eafc08e2b883d49815fa02b66f305353250ed55ba87736150eb4db06c9ba6cc256a74573227f0a4284139a0f91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b360c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef000000000000000000000000000000000000000000000000000000000000000264d3b6baf69395bde2abd1d43f99be66bc64581234fd363e2ae3a0d419cfc3fc93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556af08cbca9deec336f2a56ca0b202995830f238fc3cb2ecdbdc0bbb6419e3e60507e823ff7dcbd17394cea55bc514716cc001a053b395e2240df6cac69c67fcbbf1a84c7cfcb7bb4f9773fc124b898660d3b4ffa013156ba473c2f73efeaea8fa83c22ab33af1e0c1501eff697c4d81d6951d8002c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d119b27077eab75b715aa5acc2613601063bd10793a0b6cf31f180fdebfc9399a02b66f305353250ed55ba87736150eb4db06c9ba6cc256a74573227f0a4284139a0f91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b368203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef000000000000000000000000000000000000000000000000000000000000000264d3b6baf69395bde2abd1d43f99be66bc64581234fd363e2ae3a0d419cfc3fc93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556af08cbca9deec336f2a56ca0b202995830f238fc3cb2ecdbdc0bbb6419e3e60507e823ff7dcbd17394cea55bc514716cc001a053b395e2240df6cac69c67fcbbf1a84c7cfcb7bb4f9773fc124b898660d3b4ffa013156ba473c2f73efeaea8fa83c22ab33af1e0c1501eff697c4d81d6951d8002c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0b7f49d0808e7f4029fd8fbc7a9cf2c91d845b38493b2eafc08e2b883d49815f", + "stateRoot": "0xd119b27077eab75b715aa5acc2613601063bd10793a0b6cf31f180fdebfc9399", "transactionsTrie": "0x2b66f305353250ed55ba87736150eb4db06c9ba6cc256a74573227f0a4284139", "receiptTrie": "0xf91c3d227b7dd5018ec562a377541ab822d8b42bb7b9be413107620c7f882e25", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -10675,8 +10757,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b36", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -10684,7 +10766,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xdef46302cfa328ea05599585e878144bf4ff422e307fdc88a519a4b932c42937" + "hash": "0xe1222ba587293fd69079e48e2b130dab26332a46735d5e508762baba7107c01e" }, "blocknumber": "1", "transactions": [ @@ -10709,7 +10791,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xdef46302cfa328ea05599585e878144bf4ff422e307fdc88a519a4b932c42937", + "lastblockhash": "0xe1222ba587293fd69079e48e2b130dab26332a46735d5e508762baba7107c01e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -10747,7 +10829,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -10759,9 +10841,10 @@ }, "sealEngine": "NoProof" }, - "082-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6cb6698327d9835]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -10792,12 +10875,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0adce67a36931544ed896b583bafb3e872054ffdf8c6d0d29f5cb8e0ddc554b5aa0f5252d35e5c09f0f1733e3f59628b0104ff2c8f3d009ce3307a5dd5d84fa88d7a00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b420c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e00000000000000000000000000000000000000000000000000000000000000026a75e4fe63e5e148c853462a680c3e3ccedea34719d28f19bf1b35ae4eea37d6b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a861a2aef7aa82db033bfa125b9f756afecaf1db28384925d5007bcf7dff1a53b72bdf522610303075aeecab41685d720c080a0ac4f85f8ffec48fb8cd4304a0db3bdb5bbf90a82a585325744d0a80512d9e064a05a913cb5dff943b5cba667f91523174f62f7d49c59399890703cb8e8e61f5bfbc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa039977edc785ee95c11776fd06af8126bb36c536615a59641d75af61d1ec7a0c4a0f5252d35e5c09f0f1733e3f59628b0104ff2c8f3d009ce3307a5dd5d84fa88d7a00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e00000000000000000000000000000000000000000000000000000000000000026a75e4fe63e5e148c853462a680c3e3ccedea34719d28f19bf1b35ae4eea37d6b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a861a2aef7aa82db033bfa125b9f756afecaf1db28384925d5007bcf7dff1a53b72bdf522610303075aeecab41685d720c080a0ac4f85f8ffec48fb8cd4304a0db3bdb5bbf90a82a585325744d0a80512d9e064a05a913cb5dff943b5cba667f91523174f62f7d49c59399890703cb8e8e61f5bfbc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xadce67a36931544ed896b583bafb3e872054ffdf8c6d0d29f5cb8e0ddc554b5a", + "stateRoot": "0x39977edc785ee95c11776fd06af8126bb36c536615a59641d75af61d1ec7a0c4", "transactionsTrie": "0xf5252d35e5c09f0f1733e3f59628b0104ff2c8f3d009ce3307a5dd5d84fa88d7", "receiptTrie": "0x0854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -10805,8 +10888,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b42", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -10814,7 +10897,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9da4aa1610b86dc9e660469d98d56b1ab0cf45f52062d187b4b78f1c856bbc49" + "hash": "0x37215b543877c75eb1291fa6d5ec1590cafa816f7fbb607765db5cc322a538ef" }, "blocknumber": "1", "transactions": [ @@ -10839,7 +10922,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9da4aa1610b86dc9e660469d98d56b1ab0cf45f52062d187b4b78f1c856bbc49", + "lastblockhash": "0x37215b543877c75eb1291fa6d5ec1590cafa816f7fbb607765db5cc322a538ef", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -10877,7 +10960,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -10889,9 +10972,10 @@ }, "sealEngine": "NoProof" }, - "083-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_b6ec3736f9ff2c62]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -10922,12 +11006,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0baa6bba6b3405a2074bb78915ae506848588d568646009db841bba2f9a27b7c6a0240954eeb71487e243620f746e9cc5a2924de9178684e710582242fdf649cd5aa01f4471e72609435e3c623b2bdd24443eff8c038c1518d3363d7be3f718a83963b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b2a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655682f1cd05471ab6ff21bcfd5c3369cba05b03a872a10829236d184fe1872767c391c2aa7e3b85babb1e6093b7224e7732c001a02fef77316aed95d26497fa65531661195bd2c1441810fc131f5d69b8ca87a877a00e801a95e9f1aa9a8b0897c6b61f83eafc2f650ba05a64552683643d6e858bf1c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa028f94f1a5281f02b6419ce9e6d4101af8112568e6b44f84a8eba0117c25a2470a0240954eeb71487e243620f746e9cc5a2924de9178684e710582242fdf649cd5aa01f4471e72609435e3c623b2bdd24443eff8c038c1518d3363d7be3f718a83963b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b2a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d36306000000000000000000000000000000000000000000000000000000000000000093efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655682f1cd05471ab6ff21bcfd5c3369cba05b03a872a10829236d184fe1872767c391c2aa7e3b85babb1e6093b7224e7732c001a02fef77316aed95d26497fa65531661195bd2c1441810fc131f5d69b8ca87a877a00e801a95e9f1aa9a8b0897c6b61f83eafc2f650ba05a64552683643d6e858bf1c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbaa6bba6b3405a2074bb78915ae506848588d568646009db841bba2f9a27b7c6", + "stateRoot": "0x28f94f1a5281f02b6419ce9e6d4101af8112568e6b44f84a8eba0117c25a2470", "transactionsTrie": "0x240954eeb71487e243620f746e9cc5a2924de9178684e710582242fdf649cd5a", "receiptTrie": "0x1f4471e72609435e3c623b2bdd24443eff8c038c1518d3363d7be3f718a83963", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -10935,8 +11019,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b2a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -10944,7 +11028,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x064208421944db644db5b7b42bbb37296106505424aa706dc30285900e562e6b" + "hash": "0x19fe1c36e752740aaa3253d1236f17df492c97e5c8260aaff5160fbd22d3936d" }, "blocknumber": "1", "transactions": [ @@ -10969,7 +11053,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x064208421944db644db5b7b42bbb37296106505424aa706dc30285900e562e6b", + "lastblockhash": "0x19fe1c36e752740aaa3253d1236f17df492c97e5c8260aaff5160fbd22d3936d", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -11007,7 +11091,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -11019,9 +11103,10 @@ }, "sealEngine": "NoProof" }, - "084-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_becf2e1641bbd4e6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -11052,12 +11137,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa094d412bd70586706283cb2b03b7f775fabb1edffafe081383caa770e46650edfa04ddc20059aa6c603a53e14ef3dfd107de7e4006cbcd47fd42eca705bdc222d1ba0b2c5ad406e8ea715c8495b834c90c372db84f259009e93c85422e0e1b9203fa4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c7a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c05eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c6273eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a03273576d50c19ea38badedb55c53e83a9da2282ca86a1b56df6111a939c0a83ca07fe8ecbf7fc1cc72ae1abc6cad0714476b3dd2fbb64281aab1758e15fbccce3dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d79c701d870c9d478b3bb6c771bce72f0aa67cfa9cf9534da37734e175fc9f30a04ddc20059aa6c603a53e14ef3dfd107de7e4006cbcd47fd42eca705bdc222d1ba0b2c5ad406e8ea715c8495b834c90c372db84f259009e93c85422e0e1b9203fa4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c7a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001466f7b14f0722bd581cf49418cd43fa8f085ce16e09cd3cdf65b3dfbbcb8c05eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c6273eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000b7f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a03273576d50c19ea38badedb55c53e83a9da2282ca86a1b56df6111a939c0a83ca07fe8ecbf7fc1cc72ae1abc6cad0714476b3dd2fbb64281aab1758e15fbccce3dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x94d412bd70586706283cb2b03b7f775fabb1edffafe081383caa770e46650edf", + "stateRoot": "0xd79c701d870c9d478b3bb6c771bce72f0aa67cfa9cf9534da37734e175fc9f30", "transactionsTrie": "0x4ddc20059aa6c603a53e14ef3dfd107de7e4006cbcd47fd42eca705bdc222d1b", "receiptTrie": "0xb2c5ad406e8ea715c8495b834c90c372db84f259009e93c85422e0e1b9203fa4", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -11065,8 +11150,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c7a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -11074,7 +11159,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9b79deee26ea9713ef9804f99ab10b4e9d89bcc723bcce6d122d4ea45cc7f6a4" + "hash": "0x8f9e9706d49ae54542eb7aba7b73e3cbc8c67caf584aa0bf1e9642b34a4819c6" }, "blocknumber": "1", "transactions": [ @@ -11099,7 +11184,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9b79deee26ea9713ef9804f99ab10b4e9d89bcc723bcce6d122d4ea45cc7f6a4", + "lastblockhash": "0x8f9e9706d49ae54542eb7aba7b73e3cbc8c67caf584aa0bf1e9642b34a4819c6", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -11137,7 +11222,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -11149,9 +11234,10 @@ }, "sealEngine": "NoProof" }, - "085-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c3d4322ec17fe7cd]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -11182,12 +11268,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08a6b56609fcfb592b1f7752666848a20c36e1dce8acb5e0c82e61e8c9e5f3f8ea04956ae2560cb5eea655bfc31852c85788567e45b96eea8cb216c67b03b814afda01cd77ad11d984b1ea60bb6b46188fdd129a9959acf194326fd53416ac732ca4cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec0a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a08dcecbb5ef87b5431d38477cc01452a1a9a0326a95616a4308bb60573f1ee351a01e2b665403ad29dc09832d1d1d65e9721d57157fbcfc64fe0a18a5959db92968c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ecd6d8a23a5e176e6a29dc988deb4a09f04c6e4a1107a4122a80bf0479ef18a1a04956ae2560cb5eea655bfc31852c85788567e45b96eea8cb216c67b03b814afda01cd77ad11d984b1ea60bb6b46188fdd129a9959acf194326fd53416ac732ca4cb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ec0a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc080a08dcecbb5ef87b5431d38477cc01452a1a9a0326a95616a4308bb60573f1ee351a01e2b665403ad29dc09832d1d1d65e9721d57157fbcfc64fe0a18a5959db92968c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8a6b56609fcfb592b1f7752666848a20c36e1dce8acb5e0c82e61e8c9e5f3f8e", + "stateRoot": "0xecd6d8a23a5e176e6a29dc988deb4a09f04c6e4a1107a4122a80bf0479ef18a1", "transactionsTrie": "0x4956ae2560cb5eea655bfc31852c85788567e45b96eea8cb216c67b03b814afd", "receiptTrie": "0x1cd77ad11d984b1ea60bb6b46188fdd129a9959acf194326fd53416ac732ca4c", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -11195,8 +11281,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01ec0a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -11204,7 +11290,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa7ca4860d8c32c47d4a939ab3262cb5f64c081ab792980f37f37aa9df6471931" + "hash": "0x12388f4a95aec5aae53bbbc0a14d7229acc3c405bb3881937f5a153819dbce76" }, "blocknumber": "1", "transactions": [ @@ -11229,7 +11315,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa7ca4860d8c32c47d4a939ab3262cb5f64c081ab792980f37f37aa9df6471931", + "lastblockhash": "0x12388f4a95aec5aae53bbbc0a14d7229acc3c405bb3881937f5a153819dbce76", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -11265,7 +11351,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -11277,9 +11363,10 @@ }, "sealEngine": "NoProof" }, - "086-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_c5e1490d672d026d]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -11310,12 +11397,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03c6e28e82ab7e39e7119bb6fdbfa1f25abeead79da2f056ec08751e761a6a330a04636f4dc5b33ce0f2cceb49e2b892967cf83f3f68fa1a777bdbe635eebe5ed47a09fc500ac1e9d91018d2eb0c7325b94c3ad5e3cf88c8354bedb47e138ba1ad117b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028cb60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d3630624d25032e67a7e6a4910df5834b8fe70e6bcfeeac0352434196bdf4b2485d5a18f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7acd56791e0ab0d1b3802021862013418993da2646e87140e12631e2914d9e6c676466aa3adfc91b61f84255544cab544c080a089d9c97ad5598311895ada0f236874d7e335a9f3c3e4cedcaba1a0940c3335f4a001308456b269a47618f76d89289d7d53cf8ad10b598211552a6aef86ce54d3f1c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa048b3bf78a1cf5734b00dcf033101a884b7c86eadc56dae1bdd6e3f2176aeb9f2a04636f4dc5b33ce0f2cceb49e2b892967cf83f3f68fa1a777bdbe635eebe5ed47a09fc500ac1e9d91018d2eb0c7325b94c3ad5e3cf88c8354bedb47e138ba1ad117b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028cb68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d3630624d25032e67a7e6a4910df5834b8fe70e6bcfeeac0352434196bdf4b2485d5a18f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7acd56791e0ab0d1b3802021862013418993da2646e87140e12631e2914d9e6c676466aa3adfc91b61f84255544cab544c080a089d9c97ad5598311895ada0f236874d7e335a9f3c3e4cedcaba1a0940c3335f4a001308456b269a47618f76d89289d7d53cf8ad10b598211552a6aef86ce54d3f1c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x3c6e28e82ab7e39e7119bb6fdbfa1f25abeead79da2f056ec08751e761a6a330", + "stateRoot": "0x48b3bf78a1cf5734b00dcf033101a884b7c86eadc56dae1bdd6e3f2176aeb9f2", "transactionsTrie": "0x4636f4dc5b33ce0f2cceb49e2b892967cf83f3f68fa1a777bdbe635eebe5ed47", "receiptTrie": "0x9fc500ac1e9d91018d2eb0c7325b94c3ad5e3cf88c8354bedb47e138ba1ad117", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -11323,8 +11410,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028cb6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -11332,7 +11419,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x866b94d6c4f292d309627942aa721ce4a7a0a51e9f28c8a386cf54cc1144d2d1" + "hash": "0x7da5213d3d46693c18dbe5002ab29217fbd63ebd78010efd4688a8ba13886b9a" }, "blocknumber": "1", "transactions": [ @@ -11357,7 +11444,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x866b94d6c4f292d309627942aa721ce4a7a0a51e9f28c8a386cf54cc1144d2d1", + "lastblockhash": "0x7da5213d3d46693c18dbe5002ab29217fbd63ebd78010efd4688a8ba13886b9a", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -11395,7 +11482,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -11407,9 +11494,10 @@ }, "sealEngine": "NoProof" }, - "087-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_cae5d3491190b777]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -11440,12 +11528,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061e42f21db8b723aff80ad17aeab3e981a4ca4eddcb3d187cd6d8ffdb6fcc78a06b9b49172b85dc42d664a601ee9943084e12a5c5a093a5056bc8f8889fd75418a0087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c920c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c622c9ae4f1d6d08558d7027df9cc6b248c21290075d2c0df8a4084d02090b3fa14b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa4cc8c419ade0cf043cbf30f43c8f7ee6da3ab8d2c15070f323e5a13a8178fe07c8f89686e5fd16565247b520028251bc080a08bcafbc1facaa4cb6741a2d82139f20782aa8eb8cfba39d87a43c9e8a0dbe363a024a6f44071130a7ae0dabb24d83771d93d8d9314a5d5c1a58d1131a27bc14a8ac0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c1a1f2eeababdf5fe6d783d78ba4c5da8d959aed945be988b81dcf6da1a7479da06b9b49172b85dc42d664a601ee9943084e12a5c5a093a5056bc8f8889fd75418a0087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c928203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c622c9ae4f1d6d08558d7027df9cc6b248c21290075d2c0df8a4084d02090b3fa14b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193aa4cc8c419ade0cf043cbf30f43c8f7ee6da3ab8d2c15070f323e5a13a8178fe07c8f89686e5fd16565247b520028251bc080a08bcafbc1facaa4cb6741a2d82139f20782aa8eb8cfba39d87a43c9e8a0dbe363a024a6f44071130a7ae0dabb24d83771d93d8d9314a5d5c1a58d1131a27bc14a8ac0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x061e42f21db8b723aff80ad17aeab3e981a4ca4eddcb3d187cd6d8ffdb6fcc78", + "stateRoot": "0xc1a1f2eeababdf5fe6d783d78ba4c5da8d959aed945be988b81dcf6da1a7479d", "transactionsTrie": "0x6b9b49172b85dc42d664a601ee9943084e12a5c5a093a5056bc8f8889fd75418", "receiptTrie": "0x087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -11453,8 +11541,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c92", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -11462,7 +11550,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x05839413c2c7c0c4cc002fa6486e22f6661a90383d634d9964c87c09ed7507da" + "hash": "0xa9517de642378394358ae50c56bc0e79e7436bfc5c17b18d0646a9e558504bcb" }, "blocknumber": "1", "transactions": [ @@ -11487,7 +11575,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x05839413c2c7c0c4cc002fa6486e22f6661a90383d634d9964c87c09ed7507da", + "lastblockhash": "0xa9517de642378394358ae50c56bc0e79e7436bfc5c17b18d0646a9e558504bcb", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -11525,7 +11613,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -11537,9 +11625,10 @@ }, "sealEngine": "NoProof" }, - "088-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d0992bc0387790a4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -11570,12 +11659,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a77e2b492532b64b86b9dcce607e770834cc0c4a7fd076e43df2f4fbb7522e35a04943b7c3bdde613d3334ec74191ff4e6dbe8b9ad6e11e9489b04438d00353d2ba08b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028caa0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c624882cf0609af8c7cd4c256e63a35838c95a9ebbf6122540ab344b42fd66d32e18f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b8f731ba6a52e419ffc843c50d2947d30e933e3a881b208de54149714ece74a599503f84c6249b5fd8a7c70189882a6bc080a041d65377829837a1adab9efd7d6b34c00140bfa4dbbf5053348e12652e6a4965a060900e4e68a9787aaac7a45314c939c204ee41d3e5fa99fd463f47cbebfd6d9ec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00a1480b1624368f19c41ab996f7341a3fb21a5e6cd7b1ce1b67d8897af923788a04943b7c3bdde613d3334ec74191ff4e6dbe8b9ad6e11e9489b04438d00353d2ba08b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028caa8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c624882cf0609af8c7cd4c256e63a35838c95a9ebbf6122540ab344b42fd66d32e18f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b8f731ba6a52e419ffc843c50d2947d30e933e3a881b208de54149714ece74a599503f84c6249b5fd8a7c70189882a6bc080a041d65377829837a1adab9efd7d6b34c00140bfa4dbbf5053348e12652e6a4965a060900e4e68a9787aaac7a45314c939c204ee41d3e5fa99fd463f47cbebfd6d9ec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa77e2b492532b64b86b9dcce607e770834cc0c4a7fd076e43df2f4fbb7522e35", + "stateRoot": "0x0a1480b1624368f19c41ab996f7341a3fb21a5e6cd7b1ce1b67d8897af923788", "transactionsTrie": "0x4943b7c3bdde613d3334ec74191ff4e6dbe8b9ad6e11e9489b04438d00353d2b", "receiptTrie": "0x8b7c217608f6432544e6a1adc0d96e91ba07f23c82941754aaf9783f4b89de84", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -11583,8 +11672,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028caa", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -11592,7 +11681,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9198e5aca01694d50428deac8ff3befe2ff2f46f92bd0a4b705e7bd154312a7d" + "hash": "0x14a6aa1a44814ecf08b3c04344272bcaf1607e81bcd44275a9d563d9a2c7b3cf" }, "blocknumber": "1", "transactions": [ @@ -11617,7 +11706,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9198e5aca01694d50428deac8ff3befe2ff2f46f92bd0a4b705e7bd154312a7d", + "lastblockhash": "0x14a6aa1a44814ecf08b3c04344272bcaf1607e81bcd44275a9d563d9a2c7b3cf", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -11655,7 +11744,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -11667,9 +11756,10 @@ }, "sealEngine": "NoProof" }, - "089-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_d736268229bd87ec]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -11700,12 +11790,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cb9e12dda586addf8d45fb0620d5e4e5530e9eea47791eff168ebe7748709f55a0340072b85a86def90391840844ed222ee1070a4aaaf16c9fe2ff56438abecddda0a32384732813825eae70978f9a5ebdb708ef7bfa4276e4416720574e93b29ec2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c9e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625fd58150b731b4facfcdd89c0e393ff842f5f2071303eff99b51e103161cd23393efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655684c349506215a2d55f9d06f475b8229c6dedc08fd467f41fabae6bb042c2d0dbdbcd5f7532c475e479588eec5820fd37c080a04f5cbdea7c949e07ff124ecabd0fd003118b4830e1741231a7bf7701b4d8ee79a0560d6c4459cfb2b748f1b85745c953ed096c14b4bce5a931dacc8f4dfdd858a9c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06458119ad977321090dd5af7ceb2635b53c27b500d1ab400937491e1d6be7983a0340072b85a86def90391840844ed222ee1070a4aaaf16c9fe2ff56438abecddda0a32384732813825eae70978f9a5ebdb708ef7bfa4276e4416720574e93b29ec2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c9e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001ad7666ef9d8f53b5adf54f029b13b6f171b1d0bd346a2ede315d3e243484ef5eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625fd58150b731b4facfcdd89c0e393ff842f5f2071303eff99b51e103161cd23393efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f14655684c349506215a2d55f9d06f475b8229c6dedc08fd467f41fabae6bb042c2d0dbdbcd5f7532c475e479588eec5820fd37c080a04f5cbdea7c949e07ff124ecabd0fd003118b4830e1741231a7bf7701b4d8ee79a0560d6c4459cfb2b748f1b85745c953ed096c14b4bce5a931dacc8f4dfdd858a9c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcb9e12dda586addf8d45fb0620d5e4e5530e9eea47791eff168ebe7748709f55", + "stateRoot": "0x6458119ad977321090dd5af7ceb2635b53c27b500d1ab400937491e1d6be7983", "transactionsTrie": "0x340072b85a86def90391840844ed222ee1070a4aaaf16c9fe2ff56438abecddd", "receiptTrie": "0xa32384732813825eae70978f9a5ebdb708ef7bfa4276e4416720574e93b29ec2", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -11713,8 +11803,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c9e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -11722,7 +11812,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbf2fe0b35344f436a53566abcbf196e3346e629bf85b1ccb6122aaa6c3f1013f" + "hash": "0xc1dfdfa8968466f38639225c73a94acdbfa97003b9afdd8246fd9cf30d1282b6" }, "blocknumber": "1", "transactions": [ @@ -11747,7 +11837,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xbf2fe0b35344f436a53566abcbf196e3346e629bf85b1ccb6122aaa6c3f1013f", + "lastblockhash": "0xc1dfdfa8968466f38639225c73a94acdbfa97003b9afdd8246fd9cf30d1282b6", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -11785,7 +11875,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -11797,9 +11887,10 @@ }, "sealEngine": "NoProof" }, - "090-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_e68d7111a2364a49]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -11830,12 +11921,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a6ba82bbb29fd8699921ecc6f2fb64c0e8927d68b29486b12ee863a03f89090ba08dcb7d350e47478f64fe140d44248afada8290fa1b89bdb4dc7e8caa15ab8178a00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b420c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000002549345dd3612e36fab0ab7baffe3faa5b820d56b71348c89ecaf63f7c4f853708f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b794fce36bf7e9f0ed981728fcd829013de96f7d25f8b4fe885059ec24af36f801ffbf68ec4604ef6e5f5f800f5cf31238c080a0067323404069e69388d57089f941d19d87c6e0c6d02cc5abb5555b2647cd0e5ca033c29ae9776ef9a261652a5ba6a905d7b17c612e9719b3445b8b95b20c1c76edc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a2ab0a0f3d58d5ee8aa29b2f92513e0361d1bab29d626ff4d219e9ce418bb9f0a08dcb7d350e47478f64fe140d44248afada8290fa1b89bdb4dc7e8caa15ab8178a00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000002549345dd3612e36fab0ab7baffe3faa5b820d56b71348c89ecaf63f7c4f853708f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b794fce36bf7e9f0ed981728fcd829013de96f7d25f8b4fe885059ec24af36f801ffbf68ec4604ef6e5f5f800f5cf31238c080a0067323404069e69388d57089f941d19d87c6e0c6d02cc5abb5555b2647cd0e5ca033c29ae9776ef9a261652a5ba6a905d7b17c612e9719b3445b8b95b20c1c76edc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa6ba82bbb29fd8699921ecc6f2fb64c0e8927d68b29486b12ee863a03f89090b", + "stateRoot": "0xa2ab0a0f3d58d5ee8aa29b2f92513e0361d1bab29d626ff4d219e9ce418bb9f0", "transactionsTrie": "0x8dcb7d350e47478f64fe140d44248afada8290fa1b89bdb4dc7e8caa15ab8178", "receiptTrie": "0x0854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -11843,8 +11934,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b42", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -11852,7 +11943,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1717088bddecb58a090f9ca15d02634e4295dc0cc1fa823bd3966dc2ffcd8dfc" + "hash": "0x38857ee89cd4b79b7531c394fd29062421b47d8d42440936512cc5b1c7e31fee" }, "blocknumber": "1", "transactions": [ @@ -11877,7 +11968,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1717088bddecb58a090f9ca15d02634e4295dc0cc1fa823bd3966dc2ffcd8dfc", + "lastblockhash": "0x38857ee89cd4b79b7531c394fd29062421b47d8d42440936512cc5b1c7e31fee", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -11915,7 +12006,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -11927,9 +12018,10 @@ }, "sealEngine": "NoProof" }, - "091-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ed6b180ec759bcf6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -11960,12 +12052,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04c44b5e39b37b8cb502c941cdfec15123d1d2e70da484cae70df18eb43c5878da03cbb8f64c21f3488dc3a17ed5cfbeac187a9673e40ecb4c73fbcc4dceae467dea0a32384732813825eae70978f9a5ebdb708ef7bfa4276e4416720574e93b29ec2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c9e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f15eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06b3477fc9a5bfab5fdb5523251818ee5a6d52613c59502a3d2df58217f4e366cd9ef37dee55bf2c705a2b08e7808b6fa0c001a00e22855a71f7c31650eaf8335938ee97e916da21566e14046da73b02b0d161c6a070b1f23ed27aa070cbdda6e8df2d8a90a2144f997b5c6ef2cfbc6e3c84ae53c1c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e589d8297c0ed92300306d07468bd445cebd8448db6a86b9ca06e84397a4d55a03cbb8f64c21f3488dc3a17ed5cfbeac187a9673e40ecb4c73fbcc4dceae467dea0a32384732813825eae70978f9a5ebdb708ef7bfa4276e4416720574e93b29ec2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c9e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f15eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06b3477fc9a5bfab5fdb5523251818ee5a6d52613c59502a3d2df58217f4e366cd9ef37dee55bf2c705a2b08e7808b6fa0c001a00e22855a71f7c31650eaf8335938ee97e916da21566e14046da73b02b0d161c6a070b1f23ed27aa070cbdda6e8df2d8a90a2144f997b5c6ef2cfbc6e3c84ae53c1c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x4c44b5e39b37b8cb502c941cdfec15123d1d2e70da484cae70df18eb43c5878d", + "stateRoot": "0x9e589d8297c0ed92300306d07468bd445cebd8448db6a86b9ca06e84397a4d55", "transactionsTrie": "0x3cbb8f64c21f3488dc3a17ed5cfbeac187a9673e40ecb4c73fbcc4dceae467de", "receiptTrie": "0xa32384732813825eae70978f9a5ebdb708ef7bfa4276e4416720574e93b29ec2", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -11973,8 +12065,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c9e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -11982,7 +12074,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x77fe6f82e9e181674653ca4d9b339fcd0ea15b3f3d4e326bb9bc0073361474f9" + "hash": "0x9b61c1b31dc36423ec52b19de54115e52b9b007321f58830b112ec57ab30e1fc" }, "blocknumber": "1", "transactions": [ @@ -12007,7 +12099,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x77fe6f82e9e181674653ca4d9b339fcd0ea15b3f3d4e326bb9bc0073361474f9", + "lastblockhash": "0x9b61c1b31dc36423ec52b19de54115e52b9b007321f58830b112ec57ab30e1fc", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -12045,7 +12137,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -12057,9 +12149,10 @@ }, "sealEngine": "NoProof" }, - "092-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f0ed3dc11cdeb130]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -12090,12 +12183,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa012a96687713d87fcb8dbff4ab41fd84072b423a790fd590a8b48c1b68f203430a0969fc262711bb984324b938f6758d2061a90cc922ccd6ab53c59fa054ab63161a015a792a3e4a2a7bf4e5203d28c75ccc9a1e08c1c67baa29ce3a1185c584b55e2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301efb20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e00000000000000000000000000000000000000000000000000000000000000001ed7d14d1b3fb1a1890d67b81715531553ad798df2009b4311d9fe2bea6cb964b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a98e15cbf800b69b90bfcaf1d907a9889c7743f7e5a19ee4b557471c005600f56d78e3dd887b2f5b87d76405b80dd2115c080a0095e1cc40213a480ea2851dfccecfef669a825673679ed086612336af0beacdfa0664a24c68797b38dc135d4705a58c6132853afe099432ad2d8384f9609281bbac0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02006a864471c9becc5b897735f70a825768394981800fc4909971c3025d81dbda0969fc262711bb984324b938f6758d2061a90cc922ccd6ab53c59fa054ab63161a015a792a3e4a2a7bf4e5203d28c75ccc9a1e08c1c67baa29ce3a1185c584b55e2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301efb28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001228461eb9cfa5aecb883d64f7434b6c092be63e8599fa9da8473a13f8b804e00000000000000000000000000000000000000000000000000000000000000001ed7d14d1b3fb1a1890d67b81715531553ad798df2009b4311d9fe2bea6cb964b49d88afcd7f6c61a8ea69eff5f609d2432b47e7e4cd50b02cdddb4e0c1460517e8df02e4e64dc55e3d8ca192d57193a98e15cbf800b69b90bfcaf1d907a9889c7743f7e5a19ee4b557471c005600f56d78e3dd887b2f5b87d76405b80dd2115c080a0095e1cc40213a480ea2851dfccecfef669a825673679ed086612336af0beacdfa0664a24c68797b38dc135d4705a58c6132853afe099432ad2d8384f9609281bbac0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x12a96687713d87fcb8dbff4ab41fd84072b423a790fd590a8b48c1b68f203430", + "stateRoot": "0x2006a864471c9becc5b897735f70a825768394981800fc4909971c3025d81dbd", "transactionsTrie": "0x969fc262711bb984324b938f6758d2061a90cc922ccd6ab53c59fa054ab63161", "receiptTrie": "0x15a792a3e4a2a7bf4e5203d28c75ccc9a1e08c1c67baa29ce3a1185c584b55e2", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -12103,8 +12196,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01efb2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -12112,7 +12205,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x15b8eb47108f60520cf41b35d331598de50524890fe113f9c69c51339402f65a" + "hash": "0x03a8cb6338b5086ad028cff0e8655e30521160ac86ec5995ef845f84d3c09277" }, "blocknumber": "1", "transactions": [ @@ -12137,7 +12230,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x15b8eb47108f60520cf41b35d331598de50524890fe113f9c69c51339402f65a", + "lastblockhash": "0x03a8cb6338b5086ad028cff0e8655e30521160ac86ec5995ef845f84d3c09277", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -12173,7 +12266,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -12185,9 +12278,10 @@ }, "sealEngine": "NoProof" }, - "093-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f47eb9fc139f6bfd]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -12218,12 +12312,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa080463fa21af9bb16b8019e8c192c63860bb83ca4b7c879b2df6b7f2b4151ba50a0b01a58e525e5c8e075b9cf95fd78c5876f82c6149b3c273299d8370144497550a00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b420c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000160f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b798613e9e1b1ed52fc2fdc54e945b863ff52870e6565307ff9e32327196d7a03c428fc51a9abedc97de2a68daa1274b50c001a00b1dd21bc52e26bc253461aac815ad347ba3b80b031e64585a3f509f29def9dda04e86e016839d180a695392d3b3f3bf91f8fcb23e155f7edf2c67363c66e4c1e1c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c162afcfc2e1bd46ce2afedc4dbd6878bf3aa052471d52d3468579f8621c2866a0b01a58e525e5c8e075b9cf95fd78c5876f82c6149b3c273299d8370144497550a00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000160f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b798613e9e1b1ed52fc2fdc54e945b863ff52870e6565307ff9e32327196d7a03c428fc51a9abedc97de2a68daa1274b50c001a00b1dd21bc52e26bc253461aac815ad347ba3b80b031e64585a3f509f29def9dda04e86e016839d180a695392d3b3f3bf91f8fcb23e155f7edf2c67363c66e4c1e1c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x80463fa21af9bb16b8019e8c192c63860bb83ca4b7c879b2df6b7f2b4151ba50", + "stateRoot": "0xc162afcfc2e1bd46ce2afedc4dbd6878bf3aa052471d52d3468579f8621c2866", "transactionsTrie": "0xb01a58e525e5c8e075b9cf95fd78c5876f82c6149b3c273299d8370144497550", "receiptTrie": "0x0854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -12231,8 +12325,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b42", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -12240,7 +12334,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2a2092031e6b32783ea664a205cad86d69e348005f0fdb8c2443cbbe5d56a127" + "hash": "0xe23a97b1db4abd59c8f7c20057bdb6f24c509a15992ef6690ec254a47477621c" }, "blocknumber": "1", "transactions": [ @@ -12265,7 +12359,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2a2092031e6b32783ea664a205cad86d69e348005f0fdb8c2443cbbe5d56a127", + "lastblockhash": "0xe23a97b1db4abd59c8f7c20057bdb6f24c509a15992ef6690ec254a47477621c", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -12303,7 +12397,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -12315,9 +12409,10 @@ }, "sealEngine": "NoProof" }, - "094-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_f7f44e1e864aa967]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -12348,12 +12443,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0281da5a4e5f358c7a345c9dc95ae20c8061cf7443c31b8b8fc950ece84a1c9a4a0fd89dc294337822d255b544c80ada149275e1b882b77123614c5ee9a1bfe91b6a0045c9ee148e58fc5d3cb7e47323007813d27acc179d7298fc678bb7fafaf52edb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301efbe0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000061157104410181bdc6eac224aa9436ac268bdcfeecb6badf71d228adda820af38f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7a1d8f2a5ab22acdfc1a9492ee2e1c2cbde681b51b312bf718821937e5088cd8ee002b718264027d10c5c5855dabe0353c001a0d9ef3fce097d461df93b7c30d2c87be75223f06bed8d34140be5e5fa21f05c99a04833e5e03ebdaca7516110a8239582e5437a99cf909df4b0d9edd63906fef9dec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00e206c1324fb16223065ace3624d28f04d33cc56333e421684b88750341b3c32a0fd89dc294337822d255b544c80ada149275e1b882b77123614c5ee9a1bfe91b6a0045c9ee148e58fc5d3cb7e47323007813d27acc179d7298fc678bb7fafaf52edb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301efbe8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000061157104410181bdc6eac224aa9436ac268bdcfeecb6badf71d228adda820af38f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7a1d8f2a5ab22acdfc1a9492ee2e1c2cbde681b51b312bf718821937e5088cd8ee002b718264027d10c5c5855dabe0353c001a0d9ef3fce097d461df93b7c30d2c87be75223f06bed8d34140be5e5fa21f05c99a04833e5e03ebdaca7516110a8239582e5437a99cf909df4b0d9edd63906fef9dec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x281da5a4e5f358c7a345c9dc95ae20c8061cf7443c31b8b8fc950ece84a1c9a4", + "stateRoot": "0x0e206c1324fb16223065ace3624d28f04d33cc56333e421684b88750341b3c32", "transactionsTrie": "0xfd89dc294337822d255b544c80ada149275e1b882b77123614c5ee9a1bfe91b6", "receiptTrie": "0x045c9ee148e58fc5d3cb7e47323007813d27acc179d7298fc678bb7fafaf52ed", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -12361,8 +12456,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01efbe", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -12370,7 +12465,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0e1f82cabf617e6eeb6aba9d9cab64de0451bd122adc791e3e7e9faf8c6f5321" + "hash": "0xc7c10a52d66ae337bd6854f9cd9261a62910f859375fb6b2ac1abc017d079871" }, "blocknumber": "1", "transactions": [ @@ -12395,7 +12490,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x0e1f82cabf617e6eeb6aba9d9cab64de0451bd122adc791e3e7e9faf8c6f5321", + "lastblockhash": "0xc7c10a52d66ae337bd6854f9cd9261a62910f859375fb6b2ac1abc017d079871", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -12431,7 +12526,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -12443,9 +12538,10 @@ }, "sealEngine": "NoProof" }, - "095-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_ffa6e97b97146517]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -12476,12 +12572,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02dd557933b240a480c9441c933c9116de1a5515d7b87c3c99282890455041148a09e0ddd239d392d6f727334e86dbe6e14ee09f79fc5a700151247e4636365041aa04386b450bd7c63d7edd63ccdf927d98e9907cb98731f0391734b8adb8bb205adb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008302878e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a08c2a5bec7de92d741f12030db06d2a4167e9de965113e485356cd4cc858095e6a007bd7af5a95fd1c7c0403a9873f0705e18ab779de27f7b920b7bfb059d83cd6ec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa090e24da40dd38a84fcf2038f6f799ce3074f272a1279e06af3b2048d439e9928a09e0ddd239d392d6f727334e86dbe6e14ee09f79fc5a700151247e4636365041aa04386b450bd7c63d7edd63ccdf927d98e9907cb98731f0391734b8adb8bb205adb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008302878e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bbc001a08c2a5bec7de92d741f12030db06d2a4167e9de965113e485356cd4cc858095e6a007bd7af5a95fd1c7c0403a9873f0705e18ab779de27f7b920b7bfb059d83cd6ec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x2dd557933b240a480c9441c933c9116de1a5515d7b87c3c99282890455041148", + "stateRoot": "0x90e24da40dd38a84fcf2038f6f799ce3074f272a1279e06af3b2048d439e9928", "transactionsTrie": "0x9e0ddd239d392d6f727334e86dbe6e14ee09f79fc5a700151247e4636365041a", "receiptTrie": "0x4386b450bd7c63d7edd63ccdf927d98e9907cb98731f0391734b8adb8bb205ad", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -12489,8 +12585,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x02878e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -12498,7 +12594,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3f7330c6d30012b6c01931898acbedd22fb95978079119ee4065c70111287694" + "hash": "0x182e64433bf343d78c201056459d169e3893e5e2fda11a82caf0302a973aa4b7" }, "blocknumber": "1", "transactions": [ @@ -12523,7 +12619,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3f7330c6d30012b6c01931898acbedd22fb95978079119ee4065c70111287694", + "lastblockhash": "0x182e64433bf343d78c201056459d169e3893e5e2fda11a82caf0302a973aa4b7", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -12561,7 +12657,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -12573,9 +12669,10 @@ }, "sealEngine": "NoProof" }, - "096-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_392169c16a2e5ef6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -12606,12 +12703,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0da270bf04ffe49b249cc831a7934e58a5439ec4655c9fc08bc874178c48e7dd6a0cf0526f58408133246b140bbf6c6cd40384721ba0278f4cdec84f6d9c739bf3aa0313fd85a62385fa633ce8b1277463d99221ff62346e916dfe75fd51cf4e6ab78b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028a160c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffca421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a03837f331ef931a42d2bd503ccaec668d0a7af429aa8a2136a6c573f062458f70a00ea8b177eed412c3c780563d8e223612260c73e50b5346f975ca20b3e29b7ecfc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fdb82b4d46936e191e8a0397405a76cd372f99e833c7db1ce61df96a7c70081ea0cf0526f58408133246b140bbf6c6cd40384721ba0278f4cdec84f6d9c739bf3aa0313fd85a62385fa633ce8b1277463d99221ff62346e916dfe75fd51cf4e6ab78b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028a168203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000304962b3598a0adf33189fdfd9789feab1096ff40006900400000003fffffffca421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a03837f331ef931a42d2bd503ccaec668d0a7af429aa8a2136a6c573f062458f70a00ea8b177eed412c3c780563d8e223612260c73e50b5346f975ca20b3e29b7ecfc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xda270bf04ffe49b249cc831a7934e58a5439ec4655c9fc08bc874178c48e7dd6", + "stateRoot": "0xfdb82b4d46936e191e8a0397405a76cd372f99e833c7db1ce61df96a7c70081e", "transactionsTrie": "0xcf0526f58408133246b140bbf6c6cd40384721ba0278f4cdec84f6d9c739bf3a", "receiptTrie": "0x313fd85a62385fa633ce8b1277463d99221ff62346e916dfe75fd51cf4e6ab78", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -12619,8 +12716,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028a16", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -12628,7 +12725,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x548d62acf8d2a905c85a08cf8f77154b0b76dff1eff163f7a41846c9eccfb27a" + "hash": "0x5562929ece07aab0126e2786f60f38a0137febfe1c78892365d760377303419d" }, "blocknumber": "1", "transactions": [ @@ -12653,7 +12750,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x548d62acf8d2a905c85a08cf8f77154b0b76dff1eff163f7a41846c9eccfb27a", + "lastblockhash": "0x5562929ece07aab0126e2786f60f38a0137febfe1c78892365d760377303419d", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -12691,7 +12788,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -12703,9 +12800,10 @@ }, "sealEngine": "NoProof" }, - "097-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c1e8b38219e3e12]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -12736,12 +12834,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa031a0af886db249a6ac069e774688d002210f1bdd5fcea7beee99ea1ad50159dea0f560637db06ff8a2aaf081b6d6cefe1fdbaacee532aa97dd83377edb7f766f37a07aedb86a7ca5e0d5f54c47999433049e8e614374dec3aa79bb5521ec5838fb12b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ed7e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1000000000000000000000000000000000000000000000000000000000000000050625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a04e08c45058361f9bf900b2640430b0fd3960d2ac76885425b8b082479adcf2aea043a4feb89ff3a757f986129153eeec21464084c9ca5b3d63656d755969aeadd7c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0305e011a2e694f739146f4f8b325ee95a62d491bde3bfe409608615a1b083adfa0f560637db06ff8a2aaf081b6d6cefe1fdbaacee532aa97dd83377edb7f766f37a07aedb86a7ca5e0d5f54c47999433049e8e614374dec3aa79bb5521ec5838fb12b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301ed7e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1000000000000000000000000000000000000000000000000000000000000000050625ad853cc21ba40594f79591e5d35c445ecf9453014da6524c0cf6367c359a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a04e08c45058361f9bf900b2640430b0fd3960d2ac76885425b8b082479adcf2aea043a4feb89ff3a757f986129153eeec21464084c9ca5b3d63656d755969aeadd7c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x31a0af886db249a6ac069e774688d002210f1bdd5fcea7beee99ea1ad50159de", + "stateRoot": "0x305e011a2e694f739146f4f8b325ee95a62d491bde3bfe409608615a1b083adf", "transactionsTrie": "0xf560637db06ff8a2aaf081b6d6cefe1fdbaacee532aa97dd83377edb7f766f37", "receiptTrie": "0x7aedb86a7ca5e0d5f54c47999433049e8e614374dec3aa79bb5521ec5838fb12", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -12749,8 +12847,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01ed7e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -12758,7 +12856,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa33a8a4126c6e43aaf07049a8a51855f6bdcd70e3309445bfa0f9166bfdeb25c" + "hash": "0x202d30e13a064319cff5e370228bba802e4014984cedecba260472bf84b746a7" }, "blocknumber": "1", "transactions": [ @@ -12783,7 +12881,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa33a8a4126c6e43aaf07049a8a51855f6bdcd70e3309445bfa0f9166bfdeb25c", + "lastblockhash": "0x202d30e13a064319cff5e370228bba802e4014984cedecba260472bf84b746a7", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -12819,7 +12917,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -12831,9 +12929,10 @@ }, "sealEngine": "NoProof" }, - "098-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_3c87ec986c2656c2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -12864,12 +12963,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa069a6e5ec9e61c0dd420f55278ea240758028c85e1ca425810052542752c0215ea05da848f7c3284e96c06410a160cb0338f9112fa6fe880e1142c8e5de7b62e5cea05b37d7654e25aee3dc6c36ef65ac2675a8bb354cfe7ad68d4f303ec1ebb3dff0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028a760c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a02b8972d475f2b8fd49d196ab6859ebc5088269cd9440c76ffa8b9e140703ea12a0188e3c6338bfb894197b95c85fb11e91645e1be92e2c219a25331db7d469aec0c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ac659b3ff4670a82471afadef48d2d06904e2e1cfd38665dd363606940186240a05da848f7c3284e96c06410a160cb0338f9112fa6fe880e1142c8e5de7b62e5cea05b37d7654e25aee3dc6c36ef65ac2675a8bb354cfe7ad68d4f303ec1ebb3dff0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028a768203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f1564c0a11a0f704f4fc3e8acfe0f8245f0ad1347b378fbf96e206da11a5d363066d928e13fe443e957d82e3e71d48cb65d51028eb4483e719bf8efcdf12f7c321a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a02b8972d475f2b8fd49d196ab6859ebc5088269cd9440c76ffa8b9e140703ea12a0188e3c6338bfb894197b95c85fb11e91645e1be92e2c219a25331db7d469aec0c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x69a6e5ec9e61c0dd420f55278ea240758028c85e1ca425810052542752c0215e", + "stateRoot": "0xac659b3ff4670a82471afadef48d2d06904e2e1cfd38665dd363606940186240", "transactionsTrie": "0x5da848f7c3284e96c06410a160cb0338f9112fa6fe880e1142c8e5de7b62e5ce", "receiptTrie": "0x5b37d7654e25aee3dc6c36ef65ac2675a8bb354cfe7ad68d4f303ec1ebb3dff0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -12877,8 +12976,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028a76", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -12886,7 +12985,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2b1edfa630ff0fbf3ef5b1118b8aa64d9e8a0b7874ad0f19b158d09634017b70" + "hash": "0xbdff49b00a5b6f5114298084cbc2fd52f489fd187bcca65688465bc2e2740be0" }, "blocknumber": "1", "transactions": [ @@ -12911,7 +13010,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2b1edfa630ff0fbf3ef5b1118b8aa64d9e8a0b7874ad0f19b158d09634017b70", + "lastblockhash": "0xbdff49b00a5b6f5114298084cbc2fd52f489fd187bcca65688465bc2e2740be0", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -12949,7 +13048,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -12961,9 +13060,10 @@ }, "sealEngine": "NoProof" }, - "099-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_420f2a187ce77035]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -12994,12 +13094,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c45f6fbc1dc03631637a8cece1cea5fdcc40bd4ca04713f56fc26db31025c6c7a0a54fadc07d4cf9701c12295e2117c73aa6beaa3442e9e2a4d12ec9889979f2fea0cd5198e7bb94cb328dee8f6d5b1c67c93cbefde9ed36fc23a528d3999b175a6ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289020c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000022bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a038c1c7740a7cef0ee95b036edef176f98e83d51c287b930066719b4339376215a04df8d685d6c1e87bd117c798cdb3f7f8986ab2d22d8da041be9e9482f3b7ce25c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa085e022815e9daccc38975141d49d9b7b3c40b997d1a83780515c2d582e9af2f0a0a54fadc07d4cf9701c12295e2117c73aa6beaa3442e9e2a4d12ec9889979f2fea0cd5198e7bb94cb328dee8f6d5b1c67c93cbefde9ed36fc23a528d3999b175a6ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289028203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000022bf4e1f980eb94661a21affc4d7e6e56f214fe3e7dc4d20b98c66ffd43cabeb0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a038c1c7740a7cef0ee95b036edef176f98e83d51c287b930066719b4339376215a04df8d685d6c1e87bd117c798cdb3f7f8986ab2d22d8da041be9e9482f3b7ce25c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc45f6fbc1dc03631637a8cece1cea5fdcc40bd4ca04713f56fc26db31025c6c7", + "stateRoot": "0x85e022815e9daccc38975141d49d9b7b3c40b997d1a83780515c2d582e9af2f0", "transactionsTrie": "0xa54fadc07d4cf9701c12295e2117c73aa6beaa3442e9e2a4d12ec9889979f2fe", "receiptTrie": "0xcd5198e7bb94cb328dee8f6d5b1c67c93cbefde9ed36fc23a528d3999b175a6a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -13007,8 +13107,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028902", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -13016,7 +13116,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd556640634eefa8a1cd89bd248b23bb61776413363e1058ffed38f9ffab59cce" + "hash": "0x3cf6c7dbe681d2d9d093e64287312a42dbb8cbba681116902372841d1c22aa11" }, "blocknumber": "1", "transactions": [ @@ -13041,7 +13141,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd556640634eefa8a1cd89bd248b23bb61776413363e1058ffed38f9ffab59cce", + "lastblockhash": "0x3cf6c7dbe681d2d9d093e64287312a42dbb8cbba681116902372841d1c22aa11", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -13079,7 +13179,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -13091,9 +13191,10 @@ }, "sealEngine": "NoProof" }, - "100-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_83e53423a2dd93fe]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -13124,12 +13225,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c8b05c7fb0c0e00514c76ad1d1e3fa080d521102a927079693c0b55a43fa10f0a0cdc60ad22ae1fe5004eb088ab2d59654d5b4628a7392c40c0c92c5f69e706839a04f151812b62aa8eff6f2c553aba828d87c739a8453016ed9ad095a5ec5044ec9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830288d20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0835d4b51ed0da335fd056fef9258d003fa59b9357aa385930f287dc279f00193a062a3974bc93b244e4d7892ae6f8d29ee2a1470ecf7458e559fb999d72171a901c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e8ce9dc05253ae703b28297413f98ec9307fe02b617e58868b1acf884edf73aca0cdc60ad22ae1fe5004eb088ab2d59654d5b4628a7392c40c0c92c5f69e706839a04f151812b62aa8eff6f2c553aba828d87c739a8453016ed9ad095a5ec5044ec9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830288d28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0835d4b51ed0da335fd056fef9258d003fa59b9357aa385930f287dc279f00193a062a3974bc93b244e4d7892ae6f8d29ee2a1470ecf7458e559fb999d72171a901c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc8b05c7fb0c0e00514c76ad1d1e3fa080d521102a927079693c0b55a43fa10f0", + "stateRoot": "0xe8ce9dc05253ae703b28297413f98ec9307fe02b617e58868b1acf884edf73ac", "transactionsTrie": "0xcdc60ad22ae1fe5004eb088ab2d59654d5b4628a7392c40c0c92c5f69e706839", "receiptTrie": "0x4f151812b62aa8eff6f2c553aba828d87c739a8453016ed9ad095a5ec5044ec9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -13137,8 +13238,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0288d2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -13146,7 +13247,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf25678a0c17933929b30a471db876d8953df067cb31f266037edc299dc5099a2" + "hash": "0xab030f4ec48ac6109e68ef7b60ccc2993afeaf69f5e2e49f9349cbb74f4418b2" }, "blocknumber": "1", "transactions": [ @@ -13171,7 +13272,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf25678a0c17933929b30a471db876d8953df067cb31f266037edc299dc5099a2", + "lastblockhash": "0xab030f4ec48ac6109e68ef7b60ccc2993afeaf69f5e2e49f9349cbb74f4418b2", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -13209,7 +13310,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -13221,9 +13322,10 @@ }, "sealEngine": "NoProof" }, - "101-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_incorrect_proof_point_at_infinity_ed6b180ec759bcf6]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -13254,12 +13356,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ddaaf48016359afad49df46e3e146ffae6bf78072927435f3ba2c4fdd52b0fc5a0e92ce5c7a3b44d5c1e67c9fc61483828f2515885923bbc92b154910d20d39ab4a0016842b977ca2488af689e83f0b510e3368e0c80a1d2d4479f5a015c5b56938eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028a6a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f15eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a09edfaad74a93ef4ec70995e2be3d12acff82d8e1fc3384e60953c432a87fc585a063d5d737ecc3d1a6c91b0d6f5415dc7dcaa107bda2ab5cff59302d90fa93648ec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf3b26cc13129d19780ea358f639cc101ed4f2990c764525439c4824f74aaa43a0e92ce5c7a3b44d5c1e67c9fc61483828f2515885923bbc92b154910d20d39ab4a0016842b977ca2488af689e83f0b510e3368e0c80a1d2d4479f5a015c5b56938eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028a6a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f15eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c625ee1e9a4a06a02ca6ea14b0ca73415a8ba0fba888f18dde56df499b480d4b9e0a421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d06c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a09edfaad74a93ef4ec70995e2be3d12acff82d8e1fc3384e60953c432a87fc585a063d5d737ecc3d1a6c91b0d6f5415dc7dcaa107bda2ab5cff59302d90fa93648ec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xddaaf48016359afad49df46e3e146ffae6bf78072927435f3ba2c4fdd52b0fc5", + "stateRoot": "0xbf3b26cc13129d19780ea358f639cc101ed4f2990c764525439c4824f74aaa43", "transactionsTrie": "0xe92ce5c7a3b44d5c1e67c9fc61483828f2515885923bbc92b154910d20d39ab4", "receiptTrie": "0x016842b977ca2488af689e83f0b510e3368e0c80a1d2d4479f5a015c5b56938e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -13267,8 +13369,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028a6a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -13276,7 +13378,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2118bf9e3a27cd3ca1059610ca6911b67a0b4be3fdaf96e38ee3bc7a0908d07b" + "hash": "0x9ad7dbcfbdd570fa2c3fda88b5e2ad67ba7d38448278a102058ba34567f49359" }, "blocknumber": "1", "transactions": [ @@ -13301,7 +13403,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2118bf9e3a27cd3ca1059610ca6911b67a0b4be3fdaf96e38ee3bc7a0908d07b", + "lastblockhash": "0x9ad7dbcfbdd570fa2c3fda88b5e2ad67ba7d38448278a102058ba34567f49359", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -13339,7 +13441,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -13351,9 +13453,10 @@ }, "sealEngine": "NoProof" }, - "102-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_1b44e341d56c757d]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -13384,12 +13487,12 @@ }, "blocks": [ { - "rlp": "0xf9036ff9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ce0aec3039e7ad67431725efacb00523c3f4c392149a59da74278d9b28406535a00c0b6f4df3390310b67295691f4cd21d342e173dc1c9cba536b8aadb86715aa3a0c1beb940f48b852900eccbd84f8f564b642e6a0ec524d1efbe17750d1455e864b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028af60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf01006f45971fc97298102573b98a02c4667995f43764f95a21b2f068c7bccc2e00000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6b0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc001a0f05fb8ee4257875c13b42f75939f17df726b98bbfe3b69073aa363c074e51956a00ebccc14cc832a596833d519b63a70e9bbb6a1e0617ece789b6578099dc8a4dbc0c0", + "rlp": "0xf90371f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0589173f0c648899eec305ee15325dd24916f2024c4c72e898ceb53928a6c11f6a00c0b6f4df3390310b67295691f4cd21d342e173dc1c9cba536b8aadb86715aa3a0c1beb940f48b852900eccbd84f8f564b642e6a0ec524d1efbe17750d1455e864b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028af68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf01006f45971fc97298102573b98a02c4667995f43764f95a21b2f068c7bccc2e00000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6b0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc001a0f05fb8ee4257875c13b42f75939f17df726b98bbfe3b69073aa363c074e51956a00ebccc14cc832a596833d519b63a70e9bbb6a1e0617ece789b6578099dc8a4dbc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xce0aec3039e7ad67431725efacb00523c3f4c392149a59da74278d9b28406535", + "stateRoot": "0x589173f0c648899eec305ee15325dd24916f2024c4c72e898ceb53928a6c11f6", "transactionsTrie": "0x0c0b6f4df3390310b67295691f4cd21d342e173dc1c9cba536b8aadb86715aa3", "receiptTrie": "0xc1beb940f48b852900eccbd84f8f564b642e6a0ec524d1efbe17750d1455e864", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -13397,8 +13500,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028af6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -13406,7 +13509,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x84dce0572d97f649cf3c2567441429b073b0addaad1c9a4f34d37efee4104ace" + "hash": "0x382f130510401f68649d2072fa5df7a26e54762a181172794934c709ba5766dc" }, "blocknumber": "1", "transactions": [ @@ -13431,7 +13534,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x84dce0572d97f649cf3c2567441429b073b0addaad1c9a4f34d37efee4104ace", + "lastblockhash": "0x382f130510401f68649d2072fa5df7a26e54762a181172794934c709ba5766dc", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -13469,7 +13572,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -13481,9 +13584,10 @@ }, "sealEngine": "NoProof" }, - "103-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_32afa9561a4b3b91]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -13514,12 +13618,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa049d77b1134a7f664da5a2cb001933a7f54ba3785cbac033cefae5f3c478d08b7a0f1cdcc62f37484c5435e66330383ec9f5eafba591633d7e9d5be11acd3665e87a04e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b120c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0016564752c546f453adeb98716f70a1167a34ffcc8aa605e2f3b0e0dbd8804f400000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe8123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdefb0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc001a00396e2fe037d79b74d6c66c829d2ec42200d36a14e899d70a8e1a2de5b3c1455a0343efb08716e9f1b429eab9b183a8ee8225b11acb08730559a0472a0ee5bcaedc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa064c055bf80412dfab15572fe166a5021bfcb13b03c5d1535c7e8996fd544d52ba0f1cdcc62f37484c5435e66330383ec9f5eafba591633d7e9d5be11acd3665e87a04e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b128203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0016564752c546f453adeb98716f70a1167a34ffcc8aa605e2f3b0e0dbd8804f400000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe8123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdefb0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc001a00396e2fe037d79b74d6c66c829d2ec42200d36a14e899d70a8e1a2de5b3c1455a0343efb08716e9f1b429eab9b183a8ee8225b11acb08730559a0472a0ee5bcaedc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x49d77b1134a7f664da5a2cb001933a7f54ba3785cbac033cefae5f3c478d08b7", + "stateRoot": "0x64c055bf80412dfab15572fe166a5021bfcb13b03c5d1535c7e8996fd544d52b", "transactionsTrie": "0xf1cdcc62f37484c5435e66330383ec9f5eafba591633d7e9d5be11acd3665e87", "receiptTrie": "0x4e8d678e548e6c41a056eb0927bbc3e4d80e564d9d674fea8bbc1783049e898a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -13527,8 +13631,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b12", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -13536,7 +13640,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xeb12de866f42db18fec9fe65c7c706e69148f265928d2d481f3baa8039de4203" + "hash": "0x427fd9eda66b12523b4d0d8c60e50811232177f14bbd7f0625cdd58aa7fcd75e" }, "blocknumber": "1", "transactions": [ @@ -13561,7 +13665,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xeb12de866f42db18fec9fe65c7c706e69148f265928d2d481f3baa8039de4203", + "lastblockhash": "0x427fd9eda66b12523b4d0d8c60e50811232177f14bbd7f0625cdd58aa7fcd75e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -13599,7 +13703,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -13611,9 +13715,10 @@ }, "sealEngine": "NoProof" }, - "104-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_3e55802a5ed3c757]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -13644,12 +13749,12 @@ }, "blocks": [ { - "rlp": "0xf90371f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c795dbbe8b9418fdb29664cebecdb716ad2e795bb643d5a8f9919ddcf95c95bca0a8a7bbc2d828e0bec09041bdba1faae4a48a63f810d21ce8d74a4f743c3ff8e9a0dd60949e0bb928aede445e5c249fdcb40735f04fe45532000e49fffbef975987b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b1c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c101ffadf79cefb539a58c0e96810cd9ffb95568686d2e4d0759e3fab348d32df900000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00b0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc001a0b1381e7a047df94ff8bbc74e2b80f32e06a243a4b40e772cbec5d950135168c3a019c9311fe07d1b68ae6789476624bc58832e2d373d506eca3e632f8e56472ed9c0c0", + "rlp": "0xf90373f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b524e812c0480e5f10b7e60f34adef3f0db9f1e55bf64d03d9bc81843796bb74a0a8a7bbc2d828e0bec09041bdba1faae4a48a63f810d21ce8d74a4f743c3ff8e9a0dd60949e0bb928aede445e5c249fdcb40735f04fe45532000e49fffbef975987b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b1c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c101ffadf79cefb539a58c0e96810cd9ffb95568686d2e4d0759e3fab348d32df900000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00b0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc001a0b1381e7a047df94ff8bbc74e2b80f32e06a243a4b40e772cbec5d950135168c3a019c9311fe07d1b68ae6789476624bc58832e2d373d506eca3e632f8e56472ed9c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc795dbbe8b9418fdb29664cebecdb716ad2e795bb643d5a8f9919ddcf95c95bc", + "stateRoot": "0xb524e812c0480e5f10b7e60f34adef3f0db9f1e55bf64d03d9bc81843796bb74", "transactionsTrie": "0xa8a7bbc2d828e0bec09041bdba1faae4a48a63f810d21ce8d74a4f743c3ff8e9", "receiptTrie": "0xdd60949e0bb928aede445e5c249fdcb40735f04fe45532000e49fffbef975987", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -13657,8 +13762,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b1c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -13666,7 +13771,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x42188d733180d8129bf4ce235696169a1716e6d319987466ba97318ea1ed538a" + "hash": "0xe68b6a9bf580e154cc6491bf13cd81b20d86da2d657b3415a3ab2e9b98be2ab6" }, "blocknumber": "1", "transactions": [ @@ -13691,7 +13796,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x42188d733180d8129bf4ce235696169a1716e6d319987466ba97318ea1ed538a", + "lastblockhash": "0xe68b6a9bf580e154cc6491bf13cd81b20d86da2d657b3415a3ab2e9b98be2ab6", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -13729,7 +13834,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -13741,9 +13846,10 @@ }, "sealEngine": "NoProof" }, - "105-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_commitment_e9d3e9ec16fbc15f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -13774,12 +13880,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bb7c1d8b594b5c62fd497fe489d8b3808efc3294a5a101363489ead2121ab770a0f7558ca8cf2279f3f64f58b68d8879c34c03f47e0bdf8710c253895c13d2bdb2a07e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b060c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0018b4962e42a010067618c230986810f6b2e12191db0762782c42bcf5462ebbc00000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe8123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde0b0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc080a01eefeb086ce3a73da67a33e695123e344dc7e163298449e1c69b8aed82aca06ca07a7cc252ee2f6225b89eaa803a04fb9415c1bb70f33dace2a78b0c4740bf46b9c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04fe2a2832bf1e7885141a2a0dbc5a305e0095b2f2268239ab9738561fea91298a0f7558ca8cf2279f3f64f58b68d8879c34c03f47e0bdf8710c253895c13d2bdb2a07e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b068203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0018b4962e42a010067618c230986810f6b2e12191db0762782c42bcf5462ebbc00000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffe8123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde0b0c829a8d2d3405304fecbea193e6c67f7c3912a6adc7c3737ad3f8a3b750425c1531a7426f03033a3994bc82a10609fc080a01eefeb086ce3a73da67a33e695123e344dc7e163298449e1c69b8aed82aca06ca07a7cc252ee2f6225b89eaa803a04fb9415c1bb70f33dace2a78b0c4740bf46b9c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbb7c1d8b594b5c62fd497fe489d8b3808efc3294a5a101363489ead2121ab770", + "stateRoot": "0x4fe2a2832bf1e7885141a2a0dbc5a305e0095b2f2268239ab9738561fea91298", "transactionsTrie": "0xf7558ca8cf2279f3f64f58b68d8879c34c03f47e0bdf8710c253895c13d2bdb2", "receiptTrie": "0x7e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166dd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -13787,8 +13893,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b06", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -13796,7 +13902,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1eb35fa0ddbceff197df41c9e082ca91537fe36ba4f60b3d9647bef6cbfabbbc" + "hash": "0xc5a1a0be8cc1c50a24f424c7e007c4cd7cb706690f033c3f4087cb76c4e33684" }, "blocknumber": "1", "transactions": [ @@ -13821,7 +13927,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1eb35fa0ddbceff197df41c9e082ca91537fe36ba4f60b3d9647bef6cbfabbbc", + "lastblockhash": "0xc5a1a0be8cc1c50a24f424c7e007c4cd7cb706690f033c3f4087cb76c4e33684", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -13859,7 +13965,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -13871,9 +13977,10 @@ }, "sealEngine": "NoProof" }, - "106-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_1b44e341d56c757d]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -13904,12 +14011,12 @@ }, "blocks": [ { - "rlp": "0xf9036ff9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a6d33a5398cbb9932d2e73230b8144bf1087033c183ba8bf38842c60a11c5290a0ffd7e24d10f745e4c48c7c70033a1705e03009d8f5596148b0de90f8dd1eb63fa0c1beb940f48b852900eccbd84f8f564b642e6a0ec524d1efbe17750d1455e864b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028af60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0697f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6c080a017813aa62b80c27cd952a17be997859c348e8e890d18bb368c2f82c49dcb4f63a0051500541bde044f64d28f4ae91b9f3d0325c691544d82f626c229787aa2d11dc0c0", + "rlp": "0xf90371f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa095a7c5515c67a4f61ad2d1388f64a237940d5be17e710b83fb39d09cb0572775a0ffd7e24d10f745e4c48c7c70033a1705e03009d8f5596148b0de90f8dd1eb63fa0c1beb940f48b852900eccbd84f8f564b642e6a0ec524d1efbe17750d1455e864b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028af68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0697f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6c080a017813aa62b80c27cd952a17be997859c348e8e890d18bb368c2f82c49dcb4f63a0051500541bde044f64d28f4ae91b9f3d0325c691544d82f626c229787aa2d11dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa6d33a5398cbb9932d2e73230b8144bf1087033c183ba8bf38842c60a11c5290", + "stateRoot": "0x95a7c5515c67a4f61ad2d1388f64a237940d5be17e710b83fb39d09cb0572775", "transactionsTrie": "0xffd7e24d10f745e4c48c7c70033a1705e03009d8f5596148b0de90f8dd1eb63f", "receiptTrie": "0xc1beb940f48b852900eccbd84f8f564b642e6a0ec524d1efbe17750d1455e864", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -13917,8 +14024,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028af6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -13926,7 +14033,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbd42c194c69fba8b175c40a4c916f843c83c36d77463c460eef41456045a2392" + "hash": "0x087fc5dedc4a06f643403d4d4e255b67e5434f0b7df80e9338308353ae4b8a93" }, "blocknumber": "1", "transactions": [ @@ -13951,7 +14058,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xbd42c194c69fba8b175c40a4c916f843c83c36d77463c460eef41456045a2392", + "lastblockhash": "0x087fc5dedc4a06f643403d4d4e255b67e5434f0b7df80e9338308353ae4b8a93", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -13989,7 +14096,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -14001,9 +14108,10 @@ }, "sealEngine": "NoProof" }, - "107-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_32afa9561a4b3b91]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -14034,12 +14142,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c86f9ab1d09cc7ce0eef9a92cec27b0e8f3a3ba000951e314a79d330e6b67feda009086253b6b3042c79539042cc75abd9fb7f656b46968aeb61ca8c4719f9d81fa07e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b060c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d068123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdefc001a015b443da028c2adb70611098109931334e0381651779d7bbcf37e8b2338c61fda005d5efd2e84f1ef34eb7d274ac98f776b148aeed7ff9deb53c2ec882644c4b9dc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b08b84212f5c572e3020774ca7b306e7c1dceb0ee5712e1f47b73a689b8c1940a009086253b6b3042c79539042cc75abd9fb7f656b46968aeb61ca8c4719f9d81fa07e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b068203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d068123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdefc001a015b443da028c2adb70611098109931334e0381651779d7bbcf37e8b2338c61fda005d5efd2e84f1ef34eb7d274ac98f776b148aeed7ff9deb53c2ec882644c4b9dc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc86f9ab1d09cc7ce0eef9a92cec27b0e8f3a3ba000951e314a79d330e6b67fed", + "stateRoot": "0xb08b84212f5c572e3020774ca7b306e7c1dceb0ee5712e1f47b73a689b8c1940", "transactionsTrie": "0x09086253b6b3042c79539042cc75abd9fb7f656b46968aeb61ca8c4719f9d81f", "receiptTrie": "0x7e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166dd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -14047,8 +14155,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b06", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -14056,7 +14164,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6e5d6adfef9a7730731528af2f8cb49446345ee8962c5b656318d0f240b2c505" + "hash": "0x6d254265a71bcd9b5f226f4f64a95781c86055bb65b72a3f654cc4f913ff5a08" }, "blocknumber": "1", "transactions": [ @@ -14081,7 +14189,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6e5d6adfef9a7730731528af2f8cb49446345ee8962c5b656318d0f240b2c505", + "lastblockhash": "0x6d254265a71bcd9b5f226f4f64a95781c86055bb65b72a3f654cc4f913ff5a08", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -14119,7 +14227,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -14131,9 +14239,10 @@ }, "sealEngine": "NoProof" }, - "108-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_3e55802a5ed3c757]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -14164,12 +14273,12 @@ }, "blocks": [ { - "rlp": "0xf90371f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e51f6dd5f43d5eea7153454f10c98fbc705c7d55918089253e48d0147d796822a08429e8a6afc252f564f916c76ba29736df5a63c58d06255903d089b489c7a7bba0482ae97d122ee408fa6d344a6a7c7bd19c4ec4d35666ba16e464647e1ad761e6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b100c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c1014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0697f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00c080a003404d5cd90d535980899a8600e2d790d2979e41495ec835f76f8e1b2e1b78d4a007e322fddc46f21a63bf3e9dacfba8352de83ed54f285d6e0e4de81c1c1677afc0c0", + "rlp": "0xf90373f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa008b34db2975e7955ef34d246f39d0e8579914508748fb8acea19a600798c129fa08429e8a6afc252f564f916c76ba29736df5a63c58d06255903d089b489c7a7bba0482ae97d122ee408fa6d344a6a7c7bd19c4ec4d35666ba16e464647e1ad761e6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b108203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c1014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d0697f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb00c080a003404d5cd90d535980899a8600e2d790d2979e41495ec835f76f8e1b2e1b78d4a007e322fddc46f21a63bf3e9dacfba8352de83ed54f285d6e0e4de81c1c1677afc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe51f6dd5f43d5eea7153454f10c98fbc705c7d55918089253e48d0147d796822", + "stateRoot": "0x08b34db2975e7955ef34d246f39d0e8579914508748fb8acea19a600798c129f", "transactionsTrie": "0x8429e8a6afc252f564f916c76ba29736df5a63c58d06255903d089b489c7a7bb", "receiptTrie": "0x482ae97d122ee408fa6d344a6a7c7bd19c4ec4d35666ba16e464647e1ad761e6", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -14177,8 +14286,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b10", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -14186,7 +14295,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x03503a9631c9d4a73eb4fb2afddb8daf6bc6122b4a4e80de11c25068d10479e2" + "hash": "0xb697e17e7215d5f79d9f6dd4e890aca93c0533f3b9e70fe6be46a53954a6b995" }, "blocknumber": "1", "transactions": [ @@ -14211,7 +14320,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x03503a9631c9d4a73eb4fb2afddb8daf6bc6122b4a4e80de11c25068d10479e2", + "lastblockhash": "0xb697e17e7215d5f79d9f6dd4e890aca93c0533f3b9e70fe6be46a53954a6b995", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -14249,7 +14358,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -14261,9 +14370,10 @@ }, "sealEngine": "NoProof" }, - "109-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_proof_e9d3e9ec16fbc15f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -14294,12 +14404,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c86f9ab1d09cc7ce0eef9a92cec27b0e8f3a3ba000951e314a79d330e6b67feda087991902b14e10548cc81b439568dcabfb07ab3503006f307d2b37c67b2e351fa07e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b060c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d068123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde0c080a03bc1cc3bc8adf06382c674e21088065fb34b3c134fba846ba64af7fc67bd936ea0576d774a37747222e60058b3189cdd979d9400ffba80b82ae2cf86702f1e82bec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b08b84212f5c572e3020774ca7b306e7c1dceb0ee5712e1f47b73a689b8c1940a087991902b14e10548cc81b439568dcabfb07ab3503006f307d2b37c67b2e351fa07e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166ddb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b068203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0014edfed8547661f6cb416eba53061a2f6dce872c0497e6dd485a876fe2567f100000000000000000000000000000000000000000000000000000000000000011824b159acc5056f998c4fefecbc4ff55884b7fa0003480200000001fffffffea421e229565952cfff4ef3517100a97da1d4fe57956fa50a442f92af03b1bf37adacc8ad4ed209b31287ea5bb94d9d068123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde0c080a03bc1cc3bc8adf06382c674e21088065fb34b3c134fba846ba64af7fc67bd936ea0576d774a37747222e60058b3189cdd979d9400ffba80b82ae2cf86702f1e82bec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc86f9ab1d09cc7ce0eef9a92cec27b0e8f3a3ba000951e314a79d330e6b67fed", + "stateRoot": "0xb08b84212f5c572e3020774ca7b306e7c1dceb0ee5712e1f47b73a689b8c1940", "transactionsTrie": "0x87991902b14e10548cc81b439568dcabfb07ab3503006f307d2b37c67b2e351f", "receiptTrie": "0x7e4702a3e2895822641438f25767dda1c05753a85603553561f28237ef5166dd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -14307,8 +14417,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b06", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -14316,7 +14426,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9cbd3d371f2acd8eec9a21670ed9845fe38c3be3f75a30276c4ce71cf8ef9b61" + "hash": "0xc35db28c1d6eba7df5af554083eb820e914195b56adf64c9ac39906b1f9ea30a" }, "blocknumber": "1", "transactions": [ @@ -14341,7 +14451,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9cbd3d371f2acd8eec9a21670ed9845fe38c3be3f75a30276c4ce71cf8ef9b61", + "lastblockhash": "0xc35db28c1d6eba7df5af554083eb820e914195b56adf64c9ac39906b1f9ea30a", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -14379,7 +14489,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -14391,9 +14501,10 @@ }, "sealEngine": "NoProof" }, - "110-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_y_35d08d612aad2197": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_35d08d612aad2197]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -14424,12 +14535,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa080463fa21af9bb16b8019e8c192c63860bb83ca4b7c879b2df6b7f2b4151ba50a0825dd7c94c83edbb277467c453b73c32764b421939786e8948c74ae867299671a00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b420c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a0a4f488f6e5fd10cb45f6c6b90ab7fe3916250abc154d49773cd149c5f0dd3104a0343ebe85ec87372a0955fef79e6eed97cb8eeb9a4db7447d7c6f14dc76292844c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c162afcfc2e1bd46ce2afedc4dbd6878bf3aa052471d52d3468579f8621c2866a0825dd7c94c83edbb277467c453b73c32764b421939786e8948c74ae867299671a00854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b428203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a0a4f488f6e5fd10cb45f6c6b90ab7fe3916250abc154d49773cd149c5f0dd3104a0343ebe85ec87372a0955fef79e6eed97cb8eeb9a4db7447d7c6f14dc76292844c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x80463fa21af9bb16b8019e8c192c63860bb83ca4b7c879b2df6b7f2b4151ba50", + "stateRoot": "0xc162afcfc2e1bd46ce2afedc4dbd6878bf3aa052471d52d3468579f8621c2866", "transactionsTrie": "0x825dd7c94c83edbb277467c453b73c32764b421939786e8948c74ae867299671", "receiptTrie": "0x0854bb42685e24f422ce120f50fb66172b6e3b3a7c0a79a9b11e7a49f8035e90", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -14437,8 +14548,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b42", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -14446,7 +14557,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x973e09227b5ecc812f91d74b589656431aff640dd6a654afa0210dfed664a518" + "hash": "0xb3a27d11e879c333fe3a5cf3d92f6d1c192538fa282cb2781fbe015747913673" }, "blocknumber": "1", "transactions": [ @@ -14471,7 +14582,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x973e09227b5ecc812f91d74b589656431aff640dd6a654afa0210dfed664a518", + "lastblockhash": "0xb3a27d11e879c333fe3a5cf3d92f6d1c192538fa282cb2781fbe015747913673", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -14509,7 +14620,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -14521,9 +14632,10 @@ }, "sealEngine": "NoProof" }, - "111-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4aa6def8c35c9097]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -14554,12 +14666,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cf71ca1737d1aca03b5eff379c64f2bf212579bdf6f41c3d9b19337922af674ba0390287c85cc4c317ed57fd7f00e2014ba3a35c22a5110f58532c7e6ba11a0df9a01578743dc146433d0030a044a723cf642603b53cbf0eac3c9f78683d628b6edab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028a820c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000000000000008f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a0abcf44b44b8dc5d10c1e8430d7dab45c471441db6f911375aa46f4659b501a10a018a1cc01f862937d428dc3c9beae20df73704707db38402ddf61bb3e41a69b86c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08deb64e8e05e816b0ce1873ae606cf900c707fcf7d042414939e227c7ec6612aa0390287c85cc4c317ed57fd7f00e2014ba3a35c22a5110f58532c7e6ba11a0df9a01578743dc146433d0030a044a723cf642603b53cbf0eac3c9f78683d628b6edab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028a828203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000000000000008f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a0abcf44b44b8dc5d10c1e8430d7dab45c471441db6f911375aa46f4659b501a10a018a1cc01f862937d428dc3c9beae20df73704707db38402ddf61bb3e41a69b86c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xcf71ca1737d1aca03b5eff379c64f2bf212579bdf6f41c3d9b19337922af674b", + "stateRoot": "0x8deb64e8e05e816b0ce1873ae606cf900c707fcf7d042414939e227c7ec6612a", "transactionsTrie": "0x390287c85cc4c317ed57fd7f00e2014ba3a35c22a5110f58532c7e6ba11a0df9", "receiptTrie": "0x1578743dc146433d0030a044a723cf642603b53cbf0eac3c9f78683d628b6eda", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -14567,8 +14679,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028a82", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -14576,7 +14688,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x7633f15489df6a95a86ebe4fb833f85ea9a3cf18980087487ed93a2681194426" + "hash": "0xf025b74c9cff5f897b13bed2055ab77446ae1a41f5751dab372cb638243cdef9" }, "blocknumber": "1", "transactions": [ @@ -14601,7 +14713,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x7633f15489df6a95a86ebe4fb833f85ea9a3cf18980087487ed93a2681194426", + "lastblockhash": "0xf025b74c9cff5f897b13bed2055ab77446ae1a41f5751dab372cb638243cdef9", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -14639,7 +14751,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -14651,9 +14763,10 @@ }, "sealEngine": "NoProof" }, - "112-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_y_4e51cef08a61606f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_4e51cef08a61606f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -14684,12 +14797,12 @@ }, "blocks": [ { - "rlp": "0xf9036ff9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03879ff5b91815d383e3055ded5bb3b83f276716e6686e53a8ce16ca5d2f073cda07ac705a4ed201c330fb12e25758f551ff34a41e78a8155cff166a9b521742577a0f7c0e1bfbd82446f912d1cf2a191b0abca1de667d6182506064ef4260e628c47b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289be0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf01e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a077aaa6cfca256af621f2eac99b5047e388188cfd5e82fc29021aadd9829048f9a0250a53ca94c6c886026606d517ff0f1df062e6cb34f5fb5659cf994be1c0d213c0c0", + "rlp": "0xf90371f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00bd71678c73d62600538529ef9b9b4dd84ed58e3079cfc6f7d868d7765f0b784a07ac705a4ed201c330fb12e25758f551ff34a41e78a8155cff166a9b521742577a0f7c0e1bfbd82446f912d1cf2a191b0abca1de667d6182506064ef4260e628c47b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289be8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf01e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a077aaa6cfca256af621f2eac99b5047e388188cfd5e82fc29021aadd9829048f9a0250a53ca94c6c886026606d517ff0f1df062e6cb34f5fb5659cf994be1c0d213c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x3879ff5b91815d383e3055ded5bb3b83f276716e6686e53a8ce16ca5d2f073cd", + "stateRoot": "0x0bd71678c73d62600538529ef9b9b4dd84ed58e3079cfc6f7d868d7765f0b784", "transactionsTrie": "0x7ac705a4ed201c330fb12e25758f551ff34a41e78a8155cff166a9b521742577", "receiptTrie": "0xf7c0e1bfbd82446f912d1cf2a191b0abca1de667d6182506064ef4260e628c47", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -14697,8 +14810,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0289be", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -14706,7 +14819,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x55fc1cd0ebf111ab1c7f7af4ba0119c31bc69e514c05aa2a00b5c2b41cdeaf59" + "hash": "0xb8dea75889f9513d0e8ef43004f9d55dcbcb9d0b76cacb377b7cc54a99a034be" }, "blocknumber": "1", "transactions": [ @@ -14731,7 +14844,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x55fc1cd0ebf111ab1c7f7af4ba0119c31bc69e514c05aa2a00b5c2b41cdeaf59", + "lastblockhash": "0xb8dea75889f9513d0e8ef43004f9d55dcbcb9d0b76cacb377b7cc54a99a034be", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -14769,7 +14882,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -14781,9 +14894,10 @@ }, "sealEngine": "NoProof" }, - "113-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_64b9ff2b8f7dddee]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -14814,12 +14928,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0607eaf2446bc3fc79e04124d7e1c53fdecb7e97834458dc61455f0112bf57f28a0332cde0d984c44e6833e4aa5c4e004560828fff4e68539cf86a9f721090eae2fa0281d011e3703d82d12e71bfe03d8ec373698d75050e7ed8b449760541deb8771b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b1e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000028f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a0b00a7cf98776dca380782d67b08492ed25d0db5c382a0e496f38f781082b4b05a0266ecd5062bf26f227a7a80e441e593629d0f373a074e41d5b451103d6ba0b0ec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2669bd8aa1559e6ef057f38195443b34a68a46a16ca16a2e7a2a60b7e03b1ffa0332cde0d984c44e6833e4aa5c4e004560828fff4e68539cf86a9f721090eae2fa0281d011e3703d82d12e71bfe03d8ec373698d75050e7ed8b449760541deb8771b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b1e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000028f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a0b00a7cf98776dca380782d67b08492ed25d0db5c382a0e496f38f781082b4b05a0266ecd5062bf26f227a7a80e441e593629d0f373a074e41d5b451103d6ba0b0ec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x607eaf2446bc3fc79e04124d7e1c53fdecb7e97834458dc61455f0112bf57f28", + "stateRoot": "0xf2669bd8aa1559e6ef057f38195443b34a68a46a16ca16a2e7a2a60b7e03b1ff", "transactionsTrie": "0x332cde0d984c44e6833e4aa5c4e004560828fff4e68539cf86a9f721090eae2f", "receiptTrie": "0x281d011e3703d82d12e71bfe03d8ec373698d75050e7ed8b449760541deb8771", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -14827,8 +14941,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b1e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -14836,7 +14950,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1e0046d5a628fa96400e3aef310613c0d044d79b3bbff3818fce9c6294e3cea6" + "hash": "0x956c723c79e4538568cc4389e760fbb371c6f816b0575442b021a0f9818bc5a6" }, "blocknumber": "1", "transactions": [ @@ -14861,7 +14975,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1e0046d5a628fa96400e3aef310613c0d044d79b3bbff3818fce9c6294e3cea6", + "lastblockhash": "0x956c723c79e4538568cc4389e760fbb371c6f816b0575442b021a0f9818bc5a6", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -14899,7 +15013,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -14911,9 +15025,10 @@ }, "sealEngine": "NoProof" }, - "114-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_y_b358a2e763727b70": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_b358a2e763727b70]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -14944,12 +15059,12 @@ }, "blocks": [ { - "rlp": "0xf90371f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cfd0a413cdd4db8087671ad9544967f07640f8406a0bc36523a1bfd4cd6827fa093ae44f7eb6de35ab5cec65e3d687c5a9ef1d0f99c15bb2853307aaf31ddbceea017703851fb93a6fada8e626927d5235096f7cdd7f463b362770cde38a98957fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289cc0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c101e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000008f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a083d661d39d4f15825f4c1dee4103464fc0629b3049dc4670ba8f0d5ccdb8342ca07836a664ad89f040e458020c7abbfe427d160b0525f761bbe260982120ec4052c0c0", + "rlp": "0xf90373f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa009bddae868f50052feff3335713a170b6b2b7777bc76a3080669fbc49f5f4914a093ae44f7eb6de35ab5cec65e3d687c5a9ef1d0f99c15bb2853307aaf31ddbceea017703851fb93a6fada8e626927d5235096f7cdd7f463b362770cde38a98957fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830289cc8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c101e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000008f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a083d661d39d4f15825f4c1dee4103464fc0629b3049dc4670ba8f0d5ccdb8342ca07836a664ad89f040e458020c7abbfe427d160b0525f761bbe260982120ec4052c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x5cfd0a413cdd4db8087671ad9544967f07640f8406a0bc36523a1bfd4cd6827f", + "stateRoot": "0x09bddae868f50052feff3335713a170b6b2b7777bc76a3080669fbc49f5f4914", "transactionsTrie": "0x93ae44f7eb6de35ab5cec65e3d687c5a9ef1d0f99c15bb2853307aaf31ddbcee", "receiptTrie": "0x17703851fb93a6fada8e626927d5235096f7cdd7f463b362770cde38a98957fd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -14957,8 +15072,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0289cc", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -14966,7 +15081,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x458f520c98ce65310e09122e2f0d32ea3c4699dfd1e4fadc1e7d0f6db9287c6d" + "hash": "0x6adeef64e27b6a694b5971313df8591b0376980ace4d90c8cc9b9d2dbc8346c7" }, "blocknumber": "1", "transactions": [ @@ -14991,7 +15106,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x458f520c98ce65310e09122e2f0d32ea3c4699dfd1e4fadc1e7d0f6db9287c6d", + "lastblockhash": "0x6adeef64e27b6a694b5971313df8591b0376980ace4d90c8cc9b9d2dbc8346c7", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -15029,7 +15144,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -15041,9 +15156,10 @@ }, "sealEngine": "NoProof" }, - "115-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_y_eb0601fec84cc5e9]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -15074,12 +15190,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0607eaf2446bc3fc79e04124d7e1c53fdecb7e97834458dc61455f0112bf57f28a08b69bc324283550bef097396958b348fbe045daf8f10e08e050e6be2b089549aa0281d011e3703d82d12e71bfe03d8ec373698d75050e7ed8b449760541deb8771b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b1e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a04b6b9296b206e24b67ddf2901fdc1892d450b5006bfbded2b5319759a3a72b4fa060b25b41af14e878c6ef9e3cc1b2b7f61820047c4185e4fbf5c3d9b652a07641c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2669bd8aa1559e6ef057f38195443b34a68a46a16ca16a2e7a2a60b7e03b1ffa08b69bc324283550bef097396958b348fbe045daf8f10e08e050e6be2b089549aa0281d011e3703d82d12e71bfe03d8ec373698d75050e7ed8b449760541deb8771b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b1e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b000000000000000000000000000000000000000000000000000000000000000173eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a04b6b9296b206e24b67ddf2901fdc1892d450b5006bfbded2b5319759a3a72b4fa060b25b41af14e878c6ef9e3cc1b2b7f61820047c4185e4fbf5c3d9b652a07641c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x607eaf2446bc3fc79e04124d7e1c53fdecb7e97834458dc61455f0112bf57f28", + "stateRoot": "0xf2669bd8aa1559e6ef057f38195443b34a68a46a16ca16a2e7a2a60b7e03b1ff", "transactionsTrie": "0x8b69bc324283550bef097396958b348fbe045daf8f10e08e050e6be2b089549a", "receiptTrie": "0x281d011e3703d82d12e71bfe03d8ec373698d75050e7ed8b449760541deb8771", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -15087,8 +15203,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b1e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -15096,7 +15212,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x02407bcca980c43ba172d4fc38b0a13fd411c6609ae1a5aeb00814efa0f0dd7e" + "hash": "0x69cfe1896c9c91c4e0ee9e3af749441386266b7785b572d7cea54e020d0d89a7" }, "blocknumber": "1", "transactions": [ @@ -15121,7 +15237,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x02407bcca980c43ba172d4fc38b0a13fd411c6609ae1a5aeb00814efa0f0dd7e", + "lastblockhash": "0x69cfe1896c9c91c4e0ee9e3af749441386266b7785b572d7cea54e020d0d89a7", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -15159,7 +15275,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -15171,9 +15287,10 @@ }, "sealEngine": "NoProof" }, - "116-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_z_35d08d612aad2197": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_35d08d612aad2197]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -15204,12 +15321,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0637aa2f5082dbba51b84384c92da7f556fb9e062fa8425ab637ca6c1b28f314aa0017a2907b7e8ebf33b4ac0f85b148adb6a0be9ee18fb4dd7d915abd92d6e6d46a09fc500ac1e9d91018d2eb0c7325b94c3ad5e3cf88c8354bedb47e138ba1ad117b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028cb60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a03aebd07c5040166d3a73f53a6ba1e350144f6ecc5931a0b89308da57d4dc8a49a039cabde8293a6f0643a2e90b0165c066eccba206b6e1b5000160e80f3a7c4decc0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf9a10bb267461c6c28214ffbe896396d9ccd0db73a6a8133a23eebc4c871e5ba0017a2907b7e8ebf33b4ac0f85b148adb6a0be9ee18fb4dd7d915abd92d6e6d46a09fc500ac1e9d91018d2eb0c7325b94c3ad5e3cf88c8354bedb47e138ba1ad117b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028cb68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a03aebd07c5040166d3a73f53a6ba1e350144f6ecc5931a0b89308da57d4dc8a49a039cabde8293a6f0643a2e90b0165c066eccba206b6e1b5000160e80f3a7c4decc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x637aa2f5082dbba51b84384c92da7f556fb9e062fa8425ab637ca6c1b28f314a", + "stateRoot": "0xbf9a10bb267461c6c28214ffbe896396d9ccd0db73a6a8133a23eebc4c871e5b", "transactionsTrie": "0x017a2907b7e8ebf33b4ac0f85b148adb6a0be9ee18fb4dd7d915abd92d6e6d46", "receiptTrie": "0x9fc500ac1e9d91018d2eb0c7325b94c3ad5e3cf88c8354bedb47e138ba1ad117", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -15217,8 +15334,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028cb6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -15226,7 +15343,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xee00f1169478c7105fc5d5bad6d9aaf0c965d0e90c43b1ab061aee80c08abedf" + "hash": "0xfe435ffe06414cc5852ac40daf0e7725732c4acf2d6b1627918007f62ae7f5ee" }, "blocknumber": "1", "transactions": [ @@ -15251,7 +15368,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xee00f1169478c7105fc5d5bad6d9aaf0c965d0e90c43b1ab061aee80c08abedf", + "lastblockhash": "0xfe435ffe06414cc5852ac40daf0e7725732c4acf2d6b1627918007f62ae7f5ee", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -15289,7 +15406,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -15301,9 +15418,10 @@ }, "sealEngine": "NoProof" }, - "117-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4aa6def8c35c9097]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -15334,12 +15452,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00600ccad6edf4943407456f7b1b25c3a5cd14a1e54fc2f5d6511a9b12c080036a066207d11917d7a1e0c535fb4b40afa3161907a56dd8be2381bf90ab8b31478e6a0baab03e120fbd6154d0d7e52a3d4d42c290ad7b221a14c30651834e4d727d08bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028bf60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549bffffffffffffffffffffffffffffffff0000000000000000000000000000000060f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a04859e01fa2588cfd8b5faeebb1d6d0b07ea41da182f1d2414e29d94ee646c442a06469561adbcefb90fb397c819b2ee2981190fe35de675b9c9bff935a54f722c2c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03b84c8306fca3ddc8ef335c39c9b8c632eb99106a3c608c97c11860528e085d9a066207d11917d7a1e0c535fb4b40afa3161907a56dd8be2381bf90ab8b31478e6a0baab03e120fbd6154d0d7e52a3d4d42c290ad7b221a14c30651834e4d727d08bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028bf68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549bffffffffffffffffffffffffffffffff0000000000000000000000000000000060f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a04859e01fa2588cfd8b5faeebb1d6d0b07ea41da182f1d2414e29d94ee646c442a06469561adbcefb90fb397c819b2ee2981190fe35de675b9c9bff935a54f722c2c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0600ccad6edf4943407456f7b1b25c3a5cd14a1e54fc2f5d6511a9b12c080036", + "stateRoot": "0x3b84c8306fca3ddc8ef335c39c9b8c632eb99106a3c608c97c11860528e085d9", "transactionsTrie": "0x66207d11917d7a1e0c535fb4b40afa3161907a56dd8be2381bf90ab8b31478e6", "receiptTrie": "0xbaab03e120fbd6154d0d7e52a3d4d42c290ad7b221a14c30651834e4d727d08b", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -15347,8 +15465,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028bf6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -15356,7 +15474,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x33c644ca641428422b7838e6bb141a1c6ad3748561793856b92b28ddc1d60d8b" + "hash": "0xefaa8deceb1c73ace7791bfd10a60f108220bc4d37cd909fe1e2cc58e097d972" }, "blocknumber": "1", "transactions": [ @@ -15381,7 +15499,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x33c644ca641428422b7838e6bb141a1c6ad3748561793856b92b28ddc1d60d8b", + "lastblockhash": "0xefaa8deceb1c73ace7791bfd10a60f108220bc4d37cd909fe1e2cc58e097d972", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -15419,7 +15537,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -15431,9 +15549,10 @@ }, "sealEngine": "NoProof" }, - "118-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_z_4e51cef08a61606f": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_4e51cef08a61606f]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -15464,12 +15583,12 @@ }, "blocks": [ { - "rlp": "0xf9036ff9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05bf94f733496b99b5f0392c96e0292a5be0de56456843d3ebae0da6231ace610a0f919a850dfff60a9bb847fa9bdfb46abef75efcc88854f5b36b493e285aa1312a07f0e9a9e3efb922217626a18737094dda402867f2bd22c59ab7c19cf71bef69eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b320c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf01e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000060f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a0dc92bf5b57d6918c2ecc58bdca8c9e7e5d974202f55f5022d2c3dad0fc8f7ed0a01597763f43fc8db1accfab0f57f0a952bc397f0b55ca95428d9d9cbd3ddff5bdc0c0", + "rlp": "0xf90371f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09102f16d9b6c1126d4e21694eea80a4821b17b7f0930e5255d116f02cc6ec088a0f919a850dfff60a9bb847fa9bdfb46abef75efcc88854f5b36b493e285aa1312a07f0e9a9e3efb922217626a18737094dda402867f2bd22c59ab7c19cf71bef69eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028b328203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012ab9012702f9012301808007830f424094000000000000000000000000000000000000010080b8bf01e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b0000000000000000000000000000000000000000000000000000000000000060f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a0dc92bf5b57d6918c2ecc58bdca8c9e7e5d974202f55f5022d2c3dad0fc8f7ed0a01597763f43fc8db1accfab0f57f0a952bc397f0b55ca95428d9d9cbd3ddff5bdc0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x5bf94f733496b99b5f0392c96e0292a5be0de56456843d3ebae0da6231ace610", + "stateRoot": "0x9102f16d9b6c1126d4e21694eea80a4821b17b7f0930e5255d116f02cc6ec088", "transactionsTrie": "0xf919a850dfff60a9bb847fa9bdfb46abef75efcc88854f5b36b493e285aa1312", "receiptTrie": "0x7f0e9a9e3efb922217626a18737094dda402867f2bd22c59ab7c19cf71bef69e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -15477,8 +15596,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028b32", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -15486,7 +15605,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xae55b53c3c22cdff16f116a8887d8f6c2110bf2ec83d645d9681fcf0589015e7" + "hash": "0x1a3ebb531d28d7c3f4b67b22967e710ca8a84b3283b599aed317918caaadb5fa" }, "blocknumber": "1", "transactions": [ @@ -15511,7 +15630,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xae55b53c3c22cdff16f116a8887d8f6c2110bf2ec83d645d9681fcf0589015e7", + "lastblockhash": "0x1a3ebb531d28d7c3f4b67b22967e710ca8a84b3283b599aed317918caaadb5fa", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -15549,7 +15668,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -15561,9 +15680,10 @@ }, "sealEngine": "NoProof" }, - "119-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_64b9ff2b8f7dddee]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -15594,12 +15714,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f502939d8be56f2cdbe6cd0d8eac7307502657015098e6afa6587c4091254a1aa0652e0784ac994e3634165a3acdc2c735028c850d7dc3cb7efe444e8e262af7a6a0087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c920c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000260f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a0d2274399a1fc6490f07ef339b35a8cb06c033ab1dd1e435e3197218c3f00169aa06b17e6bfb2b9af401a2401e2aa0075215d56f0c9727b3652edffd4f62dce05d9c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01708ed6cc441972620a807e52db7332298ce477ea19a188a773d646d6c47e2d5a0652e0784ac994e3634165a3acdc2c735028c850d7dc3cb7efe444e8e262af7a6a0087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c928203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000260f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a0d2274399a1fc6490f07ef339b35a8cb06c033ab1dd1e435e3197218c3f00169aa06b17e6bfb2b9af401a2401e2aa0075215d56f0c9727b3652edffd4f62dce05d9c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf502939d8be56f2cdbe6cd0d8eac7307502657015098e6afa6587c4091254a1a", + "stateRoot": "0x1708ed6cc441972620a807e52db7332298ce477ea19a188a773d646d6c47e2d5", "transactionsTrie": "0x652e0784ac994e3634165a3acdc2c735028c850d7dc3cb7efe444e8e262af7a6", "receiptTrie": "0x087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -15607,8 +15727,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c92", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -15616,7 +15736,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x59d95e95bbf0cc7200741751247f28b2b9732ffc0eceac319847072e4ffbb925" + "hash": "0x66526a143f1ffaabd81c0218a5ea9558ba4be313838f679c417bb8efe94519ca" }, "blocknumber": "1", "transactions": [ @@ -15641,7 +15761,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x59d95e95bbf0cc7200741751247f28b2b9732ffc0eceac319847072e4ffbb925", + "lastblockhash": "0x66526a143f1ffaabd81c0218a5ea9558ba4be313838f679c417bb8efe94519ca", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -15679,7 +15799,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -15691,9 +15811,10 @@ }, "sealEngine": "NoProof" }, - "120-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_z_b358a2e763727b70": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_b358a2e763727b70]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -15724,12 +15845,12 @@ }, "blocks": [ { - "rlp": "0xf90371f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06c3584b64e62a4336e2d315258050e576e22505798ae583b70d377f172e84e96a0c1148f29def9f8445cbad3e7a505de99ea4c83958dfad69e4c3b868f39881f8fa000f385f6ed5eff6fd324f31f3d641c684e177e907bd499ccdd25e3e60b13cbf4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301efc80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c101e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b00000000000000000000000000000000000000000000000000000000000000000060f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a0539e871f55bde922648b7ef1b42a7bfb36eacbca5d5c925a07367131c7ce7f53a072f7a1e23e3f10174df4a66dff6674a9cf2700fd4ee120f635287704349a4ef4c0c0", + "rlp": "0xf90373f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b6b3eebb993fe4be78af960d73f9cd2862455487be6de53f44a5d6d8138c1a1ca0c1148f29def9f8445cbad3e7a505de99ea4c83958dfad69e4c3b868f39881f8fa000f385f6ed5eff6fd324f31f3d641c684e177e907bd499ccdd25e3e60b13cbf4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301efc88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012cb9012902f9012501808007830f424094000000000000000000000000000000000000010080b8c101e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b00000000000000000000000000000000000000000000000000000000000000000060f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c001a0539e871f55bde922648b7ef1b42a7bfb36eacbca5d5c925a07367131c7ce7f53a072f7a1e23e3f10174df4a66dff6674a9cf2700fd4ee120f635287704349a4ef4c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6c3584b64e62a4336e2d315258050e576e22505798ae583b70d377f172e84e96", + "stateRoot": "0xb6b3eebb993fe4be78af960d73f9cd2862455487be6de53f44a5d6d8138c1a1c", "transactionsTrie": "0xc1148f29def9f8445cbad3e7a505de99ea4c83958dfad69e4c3b868f39881f8f", "receiptTrie": "0x00f385f6ed5eff6fd324f31f3d641c684e177e907bd499ccdd25e3e60b13cbf4", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -15737,8 +15858,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01efc8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -15746,7 +15867,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xee77ca29d9953e53bebc59a3a16f8d6c544cb6e07eb7dc3b5864c0e6811b516d" + "hash": "0xfb305580046189538466b94b331522a066934ef0af1139d2ac3b46f79556000a" }, "blocknumber": "1", "transactions": [ @@ -15771,7 +15892,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xee77ca29d9953e53bebc59a3a16f8d6c544cb6e07eb7dc3b5864c0e6811b516d", + "lastblockhash": "0xfb305580046189538466b94b331522a066934ef0af1139d2ac3b46f79556000a", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -15807,7 +15928,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -15819,9 +15940,10 @@ }, "sealEngine": "NoProof" }, - "121-fork=Cancun-versioned_hash=auto-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_external_vectors[fork_Cancun-blockchain_test-versioned_hash_None-verify_kzg_proof_case_invalid_z_eb0601fec84cc5e9]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -15852,12 +15974,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ed8d7e332bb0737595599d24d965af1fd2fd9e00fcff0b0759b679dc7789cf4ba001be2deaf52612f3bf45fb83d183e83e29b5979db1aeae9ad1308023c56b2ac9a0087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c920c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000160f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a0bf0e68b6a6de351f9c9ac0746fe0a7af073d2499444796a6343d871585476fa6a062e873085625eb8369f0ca10d3db29d6edf0b18ddf13f9a1e802a65e8e822350c0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a6c70e78954428356c5924e235711f8a24971bc1081da0d9aab4df41050a9416a001be2deaf52612f3bf45fb83d183e83e29b5979db1aeae9ad1308023c56b2ac9a0087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083028c928203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c001e798154708fe7789429634053cbf9f99b619f9f084048927333fce637f549b73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff0000000160f840641ec0d0c0d2b77b2d5a393b329442721fad05ab78c7b98f2aa3c20ec98f59a8d2a1a625a17f3fea0fe5eb8c896db3764f3185481bc22f91b4aaffcca25f26936857bc3a7c2539ea8ec3a952b7b30b3d1e4faccc380557792c9a0374d58fa286f5f75fea48870585393f890909cd3c53cfe4897e799fb211b4be531e43c080a0bf0e68b6a6de351f9c9ac0746fe0a7af073d2499444796a6343d871585476fa6a062e873085625eb8369f0ca10d3db29d6edf0b18ddf13f9a1e802a65e8e822350c0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xed8d7e332bb0737595599d24d965af1fd2fd9e00fcff0b0759b679dc7789cf4b", + "stateRoot": "0xa6c70e78954428356c5924e235711f8a24971bc1081da0d9aab4df41050a9416", "transactionsTrie": "0x01be2deaf52612f3bf45fb83d183e83e29b5979db1aeae9ad1308023c56b2ac9", "receiptTrie": "0x087892738f75126ba814bd80218bd4f9ee0f6f5ce72052f19ba2e6ad255b0069", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -15865,8 +15987,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x028c92", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -15874,7 +15996,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xbd93f361d0571ac0a63d2e1d670ac581e7a55ddd18e579687bbc184c74e163f7" + "hash": "0x7bea7ef90506dc06306037d9694ce389a413d1faddb91c973fd20b142ff13426" }, "blocknumber": "1", "transactions": [ @@ -15899,7 +16021,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xbd93f361d0571ac0a63d2e1d670ac581e7a55ddd18e579687bbc184c74e163f7", + "lastblockhash": "0x7bea7ef90506dc06306037d9694ce389a413d1faddb91c973fd20b142ff13426", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -15937,7 +16059,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_gas_tx_to.json b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_gas_tx_to.json index dc393dff045..2c288fa43ac 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_gas_tx_to.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/point_evaluation_precompile_gas_tx_to.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-correct_proof-exact_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_gas_tx_to[fork_Cancun-blockchain_test-correct_proof-exact_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08124458d8297d4b4acd09f89d363d3905ced6605b7a83f25480aeaf8753aad8da0484c9d06fa9cb2eecd41a3b7528097d26d26645f1e5a6e4815cd6bdf5174255ba0de4424ef7c8b546cb2adf8b9583034c8354e9670ae2964968c4b11bfa401dcb1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b640c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b6494000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0c153bf814f84844f42d98d319bdca9af2de79a823b8c14cb7d7d30e7a6a9330aa0503a4048ce37624841c27ae8c0db0a2d42e776c1cf692729dd10ed09bc1d20b5c0c0", + "rlp": "0xf90372f9023fa08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0973952e4352efb5f09b8b5427e3dd2b6c74baf61be9c9caddc96d45802c06f7fa0484c9d06fa9cb2eecd41a3b7528097d26d26645f1e5a6e4815cd6bdf5174255ba0de4424ef7c8b546cb2adf8b9583034c8354e9670ae2964968c4b11bfa401dcb1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b648203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b6494000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0c153bf814f84844f42d98d319bdca9af2de79a823b8c14cb7d7d30e7a6a9330aa0503a4048ce37624841c27ae8c0db0a2d42e776c1cf692729dd10ed09bc1d20b5c0c0", "blockHeader": { "parentHash": "0x8e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6e", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8124458d8297d4b4acd09f89d363d3905ced6605b7a83f25480aeaf8753aad8d", + "stateRoot": "0x973952e4352efb5f09b8b5427e3dd2b6c74baf61be9c9caddc96d45802c06f7f", "transactionsTrie": "0x484c9d06fa9cb2eecd41a3b7528097d26d26645f1e5a6e4815cd6bdf5174255b", "receiptTrie": "0xde4424ef7c8b546cb2adf8b9583034c8354e9670ae2964968c4b11bfa401dcb1", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x011b64", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x09c0a93466683053a62a6aca81b7734f99e1253036fc77fc173474464768b93a" + "hash": "0xd796a91ec2123caaddb396b8afe305805b954a939fdea9fc84556ed156cda616" }, "blocknumber": "1", "transactions": [ @@ -79,7 +80,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x09c0a93466683053a62a6aca81b7734f99e1253036fc77fc173474464768b93a", + "lastblockhash": "0xd796a91ec2123caaddb396b8afe305805b954a939fdea9fc84556ed156cda616", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -100,7 +101,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -112,9 +113,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-correct_proof-extra_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_gas_tx_to[fork_Cancun-blockchain_test-correct_proof-extra_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -145,12 +147,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08124458d8297d4b4acd09f89d363d3905ced6605b7a83f25480aeaf8753aad8da0e0ea476b8ffe9c572234a2f25702f5219804c7f355199dd3b61c710680107a84a0de4424ef7c8b546cb2adf8b9583034c8354e9670ae2964968c4b11bfa401dcb1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b640c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b6594000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0363fb027f98f1cce39a0131fc9d6b9d9a0e28c5e313a1df73ec062e14bb2e71ca05ec7065992de48bee64c44d0d7c544d9c1691a620b458da20b796811395875f6c0c0", + "rlp": "0xf90372f9023fa08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0973952e4352efb5f09b8b5427e3dd2b6c74baf61be9c9caddc96d45802c06f7fa0e0ea476b8ffe9c572234a2f25702f5219804c7f355199dd3b61c710680107a84a0de4424ef7c8b546cb2adf8b9583034c8354e9670ae2964968c4b11bfa401dcb1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b648203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b6594000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0363fb027f98f1cce39a0131fc9d6b9d9a0e28c5e313a1df73ec062e14bb2e71ca05ec7065992de48bee64c44d0d7c544d9c1691a620b458da20b796811395875f6c0c0", "blockHeader": { "parentHash": "0x8e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6e", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8124458d8297d4b4acd09f89d363d3905ced6605b7a83f25480aeaf8753aad8d", + "stateRoot": "0x973952e4352efb5f09b8b5427e3dd2b6c74baf61be9c9caddc96d45802c06f7f", "transactionsTrie": "0xe0ea476b8ffe9c572234a2f25702f5219804c7f355199dd3b61c710680107a84", "receiptTrie": "0xde4424ef7c8b546cb2adf8b9583034c8354e9670ae2964968c4b11bfa401dcb1", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -158,8 +160,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x011b64", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -167,7 +169,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3aa146d9ec776a6073f312f11f78430434dd05eea142030a237a8bd46e3250ba" + "hash": "0xf1f0370431d8d705d73f335c83b4e5ddb898ec17cdb39ad56b20babdb767ea80" }, "blocknumber": "1", "transactions": [ @@ -192,7 +194,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3aa146d9ec776a6073f312f11f78430434dd05eea142030a237a8bd46e3250ba", + "lastblockhash": "0xf1f0370431d8d705d73f335c83b4e5ddb898ec17cdb39ad56b20babdb767ea80", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -213,7 +215,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -225,9 +227,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-correct_proof-insufficient_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_gas_tx_to[fork_Cancun-blockchain_test-correct_proof-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -258,12 +261,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0df3504dd870e0434719732d98c77993af6652e53d4b68408ad0592743f4e4111a0a0bc63a97ffff021ed006e4692047c43ab7bb0b72a342cb7e5f26d5a1c496860a0f1d7bd2bded424dcbdb43f8ccc782609c4a100ebf61317f6430720cc58ef7ee9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b630c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b6394000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0831c78db54c14a010d590c737c72bd9a1ab3bcbd476dff92d557e38413f59d9fa00363dfa1db5e99d999c71e1ad099e1b45601de3870438c4bac3a6a0416eed5f7c0c0", + "rlp": "0xf90372f9023fa08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f2555a9ac1dc23382abdf40c54f8e900ac46a28874db334c060894f20cc1f0c1a0a0bc63a97ffff021ed006e4692047c43ab7bb0b72a342cb7e5f26d5a1c496860a0f1d7bd2bded424dcbdb43f8ccc782609c4a100ebf61317f6430720cc58ef7ee9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b638203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b6394000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0831c78db54c14a010d590c737c72bd9a1ab3bcbd476dff92d557e38413f59d9fa00363dfa1db5e99d999c71e1ad099e1b45601de3870438c4bac3a6a0416eed5f7c0c0", "blockHeader": { "parentHash": "0x8e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6e", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xdf3504dd870e0434719732d98c77993af6652e53d4b68408ad0592743f4e4111", + "stateRoot": "0xf2555a9ac1dc23382abdf40c54f8e900ac46a28874db334c060894f20cc1f0c1", "transactionsTrie": "0xa0bc63a97ffff021ed006e4692047c43ab7bb0b72a342cb7e5f26d5a1c496860", "receiptTrie": "0xf1d7bd2bded424dcbdb43f8ccc782609c4a100ebf61317f6430720cc58ef7ee9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -271,8 +274,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x011b63", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -280,7 +283,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd2ae8a35ff398d69aa05c88bdf6f57a44ccb286291d81c853f6165a90da0009c" + "hash": "0x51da760c1465518a45aa90849e600caaea92a30d4ca100e480b2c28386c3c949" }, "blocknumber": "1", "transactions": [ @@ -305,7 +308,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd2ae8a35ff398d69aa05c88bdf6f57a44ccb286291d81c853f6165a90da0009c", + "lastblockhash": "0x51da760c1465518a45aa90849e600caaea92a30d4ca100e480b2c28386c3c949", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -326,7 +329,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -338,9 +341,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-incorrect_proof-exact_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_gas_tx_to[fork_Cancun-blockchain_test-incorrect_proof-exact_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -371,12 +375,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa074ccb12dd7201546fa041bddeb7e5e4cec7ffec3f071930c44cd970988ac2176a06e33e4fdc7b2fa72a93495b715644698e2539606a98f53277c1111eec622c5c0a040aae42770113824e286985bcbb81500342126b2cc33871807f9cb3f863ca4e4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b700c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b7094000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0fcec6cb2e0216513199d128100755631a9a70a5bdb24a9087c68656852d482fca071e69df6a77b6267679e49c4676e484d7ba9edf5bd1a321e54adbaa62828407ac0c0", + "rlp": "0xf90372f9023fa08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f9e441e5f54ff8c164c7bec2e15bf4ba3347910377c19c7ca80712485dc2a61fa06e33e4fdc7b2fa72a93495b715644698e2539606a98f53277c1111eec622c5c0a040aae42770113824e286985bcbb81500342126b2cc33871807f9cb3f863ca4e4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b708203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b7094000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0fcec6cb2e0216513199d128100755631a9a70a5bdb24a9087c68656852d482fca071e69df6a77b6267679e49c4676e484d7ba9edf5bd1a321e54adbaa62828407ac0c0", "blockHeader": { "parentHash": "0x8e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6e", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x74ccb12dd7201546fa041bddeb7e5e4cec7ffec3f071930c44cd970988ac2176", + "stateRoot": "0xf9e441e5f54ff8c164c7bec2e15bf4ba3347910377c19c7ca80712485dc2a61f", "transactionsTrie": "0x6e33e4fdc7b2fa72a93495b715644698e2539606a98f53277c1111eec622c5c0", "receiptTrie": "0x40aae42770113824e286985bcbb81500342126b2cc33871807f9cb3f863ca4e4", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -384,8 +388,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x011b70", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -393,7 +397,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xab32d208f099f60b5cde2733ad4f11259525646a8b8ae3848570fd0e41e35e7f" + "hash": "0x2eb12d1aaf2daa1117016c8b15f6c2f07306edf92769e07764f641686c3e8fa6" }, "blocknumber": "1", "transactions": [ @@ -418,7 +422,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xab32d208f099f60b5cde2733ad4f11259525646a8b8ae3848570fd0e41e35e7f", + "lastblockhash": "0x2eb12d1aaf2daa1117016c8b15f6c2f07306edf92769e07764f641686c3e8fa6", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -439,7 +443,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -451,9 +455,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-incorrect_proof-extra_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_gas_tx_to[fork_Cancun-blockchain_test-incorrect_proof-extra_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -484,12 +489,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa027d8f7ac096b6825dba0bd90122c672043fd502613401577d845b0e01a85e711a0bfff3d3da39f851f5fd66ee7fe178a44a9efe86b094045b85ffca45cfe569a9ca002a622676ead4fbf632840f173faf486b258030c1b4e3d2a1443dd17456151deb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b710c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b7194000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0ffed224d1452bb006304e7829ee6b4d9a5f129907186f6f7089557dfddbf263ca028f3b71fbaa2012e577b71a113e352d3d8e2cfe44ee16e61c2a4217f52db1e1fc0c0", + "rlp": "0xf90372f9023fa08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa068555cd48c9b566b646f88cabbf9fe6440e668d9f12686b50ee2429365adc4e1a0bfff3d3da39f851f5fd66ee7fe178a44a9efe86b094045b85ffca45cfe569a9ca002a622676ead4fbf632840f173faf486b258030c1b4e3d2a1443dd17456151deb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b718203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b7194000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a0ffed224d1452bb006304e7829ee6b4d9a5f129907186f6f7089557dfddbf263ca028f3b71fbaa2012e577b71a113e352d3d8e2cfe44ee16e61c2a4217f52db1e1fc0c0", "blockHeader": { "parentHash": "0x8e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6e", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x27d8f7ac096b6825dba0bd90122c672043fd502613401577d845b0e01a85e711", + "stateRoot": "0x68555cd48c9b566b646f88cabbf9fe6440e668d9f12686b50ee2429365adc4e1", "transactionsTrie": "0xbfff3d3da39f851f5fd66ee7fe178a44a9efe86b094045b85ffca45cfe569a9c", "receiptTrie": "0x02a622676ead4fbf632840f173faf486b258030c1b4e3d2a1443dd17456151de", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -497,8 +502,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x011b71", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -506,7 +511,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1fead942dcddfdb9e8674d5582d362865dd6b6d95a9c6ceaee633172713de060" + "hash": "0x15a9f3f1f3c10ca53a22e727604809446e03805e179766b88af8679607e7cb32" }, "blocknumber": "1", "transactions": [ @@ -531,7 +536,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1fead942dcddfdb9e8674d5582d362865dd6b6d95a9c6ceaee633172713de060", + "lastblockhash": "0x15a9f3f1f3c10ca53a22e727604809446e03805e179766b88af8679607e7cb32", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -552,7 +557,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -564,9 +569,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-incorrect_proof-insufficient_gas": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_point_evaluation_precompile_gas_tx_to[fork_Cancun-blockchain_test-incorrect_proof-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -597,12 +603,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa026b329315d4751913fdfbe23edc6eff29843af762fa57cabea2c1dbaf56555cda010ac0c62998b38c97b59c5aa5e313b8358c1c8bf9408ff91a3d52a1260eb9caaa07ff9fed5e775ef8edec04c3704ca8a490a0a2329c93d85c03211f84ae0ce16b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b6f0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b6f94000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0ffe89f5f9a24c1db48a1df588c274820df971eac44369ec436daae8e6107c694a073230312b5a1d285eedef60b704de26c2c8f12d7313adedeca41a501ffdc8630c0c0", + "rlp": "0xf90372f9023fa08e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f9b930bf1b1f6d7d1810461bd4bff4b0a3c70d27fffdd5a3eba8ab1950b35137a010ac0c62998b38c97b59c5aa5e313b8358c1c8bf9408ff91a3d52a1260eb9caaa07ff9fed5e775ef8edec04c3704ca8a490a0a2329c93d85c03211f84ae0ce16b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083011b6f8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f901240180800783011b6f94000000000000000000000000000000000000000a80b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014623ce31cf9759a5c8daf3a357992f9f3dd7f9339d8998bc8e68373e54f00b75e0000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0ffe89f5f9a24c1db48a1df588c274820df971eac44369ec436daae8e6107c694a073230312b5a1d285eedef60b704de26c2c8f12d7313adedeca41a501ffdc8630c0c0", "blockHeader": { "parentHash": "0x8e4d37f71f19b79f9f83d9c10af0432189fc80926de777fb157b2cebb0f93f6e", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x26b329315d4751913fdfbe23edc6eff29843af762fa57cabea2c1dbaf56555cd", + "stateRoot": "0xf9b930bf1b1f6d7d1810461bd4bff4b0a3c70d27fffdd5a3eba8ab1950b35137", "transactionsTrie": "0x10ac0c62998b38c97b59c5aa5e313b8358c1c8bf9408ff91a3d52a1260eb9caa", "receiptTrie": "0x7ff9fed5e775ef8edec04c3704ca8a490a0a2329c93d85c03211f84ae0ce16b8", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -610,8 +616,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x011b6f", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -619,7 +625,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3db4f20c6133d391af8538a03e941108aa3c4edc3214523ea733591770f70e49" + "hash": "0xa3c913f4b1a92e6c52b85114ca3f99d96d4c3700104363cc945df8711d9a4b50" }, "blocknumber": "1", "transactions": [ @@ -644,7 +650,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3db4f20c6133d391af8538a03e941108aa3c4edc3214523ea733591770f70e49", + "lastblockhash": "0xa3c913f4b1a92e6c52b85114ca3f99d96d4c3700104363cc945df8711d9a4b50", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -665,7 +671,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/valid_precompile_calls.json b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/valid_precompile_calls.json index 7ffc96a5620..cf0bff141e8 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/valid_precompile_calls.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile/valid_precompile_calls.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-success=True-in_bounds_z": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py::test_valid_precompile_calls[fork_Cancun-blockchain_test-success_True-in_bounds_z]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002e49a5b61d560438e797b371a948baa544418d3ea542e48cc62401567b3b321a023c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519ca007194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5affb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303221c0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0cdcb82e08bcb8bb0eb6de7c1e142a910aa413891c9deeccd0c650737f5407307a06df091d7bdd64b38d24910e969040afa2f65abd8b0ddf8c42ce5e582edfcf4fec0c0", + "rlp": "0xf90372f9023fa0a04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03e14851599d20f137ac1a63f980d66d274e21f8f11dcf562de0b713cbcc70b40a023c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519ca007194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5affb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303221c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c44401473eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0cdcb82e08bcb8bb0eb6de7c1e142a910aa413891c9deeccd0c650737f5407307a06df091d7bdd64b38d24910e969040afa2f65abd8b0ddf8c42ce5e582edfcf4fec0c0", "blockHeader": { "parentHash": "0xa04051d013c4fdadb3c6e629d33b7108ffa3fb5f8c316c0a16831eda50eb4d56", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x02e49a5b61d560438e797b371a948baa544418d3ea542e48cc62401567b3b321", + "stateRoot": "0x3e14851599d20f137ac1a63f980d66d274e21f8f11dcf562de0b713cbcc70b40", "transactionsTrie": "0x23c2e283739049651d077fdfc364eb7d4e6f26c0eb394e58898f13fd4823519c", "receiptTrie": "0x07194d446d05e8c42fac0ab572a81e5572a2dbd57e309129ed37cfff436b5aff", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03221c", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x290bf0da14e9633aab43e0b391ecf236bdfca6ec38af81aec507dba2898c90ac" + "hash": "0x87d97c34779f4a2cdc5f8fd2815cce33304446cc923922bc31947ce6cd255488" }, "blocknumber": "1", "transactions": [ @@ -79,7 +80,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x290bf0da14e9633aab43e0b391ecf236bdfca6ec38af81aec507dba2898c90ac", + "lastblockhash": "0x87d97c34779f4a2cdc5f8fd2815cce33304446cc923922bc31947ce6cd255488", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -119,7 +120,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { diff --git a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile_gas/point_evaluation_precompile_gas_usage.json b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile_gas/point_evaluation_precompile_gas_usage.json index c91ce729937..e65c9b0c212 100644 --- a/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile_gas/point_evaluation_precompile_gas_usage.json +++ b/tests/execution-spec-tests/cancun/eip4844_blobs/point_evaluation_precompile_gas/point_evaluation_precompile_gas_usage.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-proof=correct-exact_gas-call_type=CALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -32,12 +33,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da09cac74f0a8928e5d71d9a5592e25668fbc7448dcd8e114524b31c618aab2f8d9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06bc6ba22241c841dff22338a5214db6e8a1a783445b735f1f57c3e13e581a258a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0dedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301727a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa09cac74f0a8928e5d71d9a5592e25668fbc7448dcd8e114524b31c618aab2f8d9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa007ddc18c8c7c26a85cb8860e9297f0ae7daef7bc353b049a2a5bc41dc9c95676a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0dedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301727a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0x9cac74f0a8928e5d71d9a5592e25668fbc7448dcd8e114524b31c618aab2f8d9", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6bc6ba22241c841dff22338a5214db6e8a1a783445b735f1f57c3e13e581a258", + "stateRoot": "0x07ddc18c8c7c26a85cb8860e9297f0ae7daef7bc353b049a2a5bc41dc9c95676", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0ded", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -45,8 +46,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01727a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -54,7 +55,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x65c4de8be9b7cecc079d40c5205350fc2658ef6e76aac506ba56dd26ca88bae5" + "hash": "0x6e0501b8968086f88afb638064700d3a6833d56a929c8e7cb8e5b8ff24e09fa5" }, "blocknumber": "1", "transactions": [ @@ -79,7 +80,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x65c4de8be9b7cecc079d40c5205350fc2658ef6e76aac506ba56dd26ca88bae5", + "lastblockhash": "0x6e0501b8968086f88afb638064700d3a6833d56a929c8e7cb8e5b8ff24e09fa5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -114,7 +115,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -126,9 +127,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-proof=correct-exact_gas-call_type=DELEGATECALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -159,12 +161,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0eea71745de8ebf2c867c5384b717e8090723b6b62212f6e95e61dbb51638c14ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d3a7856ed89ce3b0e9d5a395bc60192b317669dc02cba72ba38264383003d7f5a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a01c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172770c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa0eea71745de8ebf2c867c5384b717e8090723b6b62212f6e95e61dbb51638c14ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cf971ed50cb45357f8b6b36e8843ef257ec137e53b18efcc0eb802c79302af70a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a01c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172778203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0xeea71745de8ebf2c867c5384b717e8090723b6b62212f6e95e61dbb51638c14c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xd3a7856ed89ce3b0e9d5a395bc60192b317669dc02cba72ba38264383003d7f5", + "stateRoot": "0xcf971ed50cb45357f8b6b36e8843ef257ec137e53b18efcc0eb802c79302af70", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x1c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -172,8 +174,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017277", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -181,7 +183,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf6c0568f31504847f109435bd7c77b03ffebcf018b94920d006abfc75efe123b" + "hash": "0x92dfa6abc49351b65d5a87614132d5de90122501f4dc0032ca11f2d5d988d554" }, "blocknumber": "1", "transactions": [ @@ -206,7 +208,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf6c0568f31504847f109435bd7c77b03ffebcf018b94920d006abfc75efe123b", + "lastblockhash": "0x92dfa6abc49351b65d5a87614132d5de90122501f4dc0032ca11f2d5d988d554", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -241,7 +243,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -253,9 +255,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-proof=correct-exact_gas-call_type=CALLCODE": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -286,12 +289,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da06f0f3c7560646cea4d6ccbb6e26eaeee30ea6a805cb5e0c8d9f22dce3d33b2a1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f8f79e42176251f5238469e157d7672be66c6aca0182fe2cf8d48c883063a6b6a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0dedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301727a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa06f0f3c7560646cea4d6ccbb6e26eaeee30ea6a805cb5e0c8d9f22dce3d33b2a1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0728d635a95fa4b201010b82d0a7cf11e66fcb89905013ef0a84da531f675d84aa09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0dedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301727a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0x6f0f3c7560646cea4d6ccbb6e26eaeee30ea6a805cb5e0c8d9f22dce3d33b2a1", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf8f79e42176251f5238469e157d7672be66c6aca0182fe2cf8d48c883063a6b6", + "stateRoot": "0x728d635a95fa4b201010b82d0a7cf11e66fcb89905013ef0a84da531f675d84a", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0ded", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -299,8 +302,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01727a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -308,7 +311,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x58dc939ace634b3065f0d58cd064dea688d8117339d733438a984cfe7dc1c9ba" + "hash": "0xcd10b86f151bb39108264d94461e907123c66508f5b5a00e4cc16ddf1bfa59ef" }, "blocknumber": "1", "transactions": [ @@ -333,7 +336,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x58dc939ace634b3065f0d58cd064dea688d8117339d733438a984cfe7dc1c9ba", + "lastblockhash": "0xcd10b86f151bb39108264d94461e907123c66508f5b5a00e4cc16ddf1bfa59ef", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -368,7 +371,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -380,9 +383,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-proof=correct-exact_gas-call_type=STATICCALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-exact_gas-call_type_STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -413,12 +417,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da07ff849caed3e7ebf8f538bbf84bb1e823bbafd69ab1a0861ca830d6e5540ed1fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa034457da653de3fbff30d2a7da2beb167b2a9d1ad261887a43dbbac62aaf55bb9a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a01c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172770c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa07ff849caed3e7ebf8f538bbf84bb1e823bbafd69ab1a0861ca830d6e5540ed1fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07102822dd0d0b119f2182234d831473af703f49248cac45accc223c9fee87518a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a01c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172778203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0x7ff849caed3e7ebf8f538bbf84bb1e823bbafd69ab1a0861ca830d6e5540ed1f", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x34457da653de3fbff30d2a7da2beb167b2a9d1ad261887a43dbbac62aaf55bb9", + "stateRoot": "0x7102822dd0d0b119f2182234d831473af703f49248cac45accc223c9fee87518", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x1c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -426,8 +430,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017277", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -435,7 +439,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd3e21870ca4adff011f15a44d281125af875a388c6a32eadd0d6b8fa0050bd87" + "hash": "0xf6c102382a22b9f10747cdcda3ef5ce20bd203a9b9b20e60b339587776ac72a2" }, "blocknumber": "1", "transactions": [ @@ -460,7 +464,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd3e21870ca4adff011f15a44d281125af875a388c6a32eadd0d6b8fa0050bd87", + "lastblockhash": "0xf6c102382a22b9f10747cdcda3ef5ce20bd203a9b9b20e60b339587776ac72a2", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -495,7 +499,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -507,9 +511,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-proof=correct-insufficient_gas-call_type=CALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -540,12 +545,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da02f9b4f4c7e8425902a1007b381ebe7207bd9472f71c6aeb03d614e74420778c7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c8d47d09d499bbdedc96e54458d760db21ce5128c964545fb539da85e8dddc09a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a09197dd2011319644ecd2a8a06b0cee674b952eac1304cb7fa2e7446594eabae9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172790c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa02f9b4f4c7e8425902a1007b381ebe7207bd9472f71c6aeb03d614e74420778c7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03430239a767ce48eddd2e8738e7841c080123863948e367057009917c5dc0f97a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a09197dd2011319644ecd2a8a06b0cee674b952eac1304cb7fa2e7446594eabae9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172798203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0x2f9b4f4c7e8425902a1007b381ebe7207bd9472f71c6aeb03d614e74420778c7", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc8d47d09d499bbdedc96e54458d760db21ce5128c964545fb539da85e8dddc09", + "stateRoot": "0x3430239a767ce48eddd2e8738e7841c080123863948e367057009917c5dc0f97", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x9197dd2011319644ecd2a8a06b0cee674b952eac1304cb7fa2e7446594eabae9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -553,8 +558,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017279", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -562,7 +567,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x92435a1d9eba7397f9e8460db83af246b864591b37460d7733d1fb47e8c9aa21" + "hash": "0x36c4eaae31760b009edf63409db5bea5c36f9c3d593223c8c04b2d800faebc05" }, "blocknumber": "1", "transactions": [ @@ -587,7 +592,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x92435a1d9eba7397f9e8460db83af246b864591b37460d7733d1fb47e8c9aa21", + "lastblockhash": "0x36c4eaae31760b009edf63409db5bea5c36f9c3d593223c8c04b2d800faebc05", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -622,7 +627,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -634,9 +639,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-proof=correct-insufficient_gas-call_type=DELEGATECALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -667,12 +673,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0bc3025e9f75d38162f48aefc1a8f28276d998aab639493ebfedd5f5085e50454a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa093aed4d620f17571cc6d5fa95f5b5396fd15f11d3f364f6c12e0e721c457ec3da09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0ace1ceacb6a9869287bc28a00c6eab0866444fad6e8b990063047c83a278fcf9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172760c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa0bc3025e9f75d38162f48aefc1a8f28276d998aab639493ebfedd5f5085e50454a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0461a0a4fe495b0edf1d309aba7aee92ac65e5cd9d1283526785203de626bd853a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0ace1ceacb6a9869287bc28a00c6eab0866444fad6e8b990063047c83a278fcf9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172768203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0xbc3025e9f75d38162f48aefc1a8f28276d998aab639493ebfedd5f5085e50454", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x93aed4d620f17571cc6d5fa95f5b5396fd15f11d3f364f6c12e0e721c457ec3d", + "stateRoot": "0x461a0a4fe495b0edf1d309aba7aee92ac65e5cd9d1283526785203de626bd853", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0xace1ceacb6a9869287bc28a00c6eab0866444fad6e8b990063047c83a278fcf9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -680,8 +686,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017276", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -689,7 +695,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0a0d6761979054a5d93ef6032d3d81ef476ec7e5da3eeb4fb74d01a471c7caf3" + "hash": "0x0d9513676fad85e9db15af0ccf5a5029286aa2385561463feb0830e94d53cc38" }, "blocknumber": "1", "transactions": [ @@ -714,7 +720,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x0a0d6761979054a5d93ef6032d3d81ef476ec7e5da3eeb4fb74d01a471c7caf3", + "lastblockhash": "0x0d9513676fad85e9db15af0ccf5a5029286aa2385561463feb0830e94d53cc38", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -749,7 +755,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -761,9 +767,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-proof=correct-insufficient_gas-call_type=CALLCODE": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -794,12 +801,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da032b16c7f570fdac61f698cb14374cf421cd9a0eb3adf0b29b8c35d6d5bd72494a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa012b13080044a3842cc3ecf4e573eac9b2d9fec270f21ecf571c6ccb264b9e312a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a09197dd2011319644ecd2a8a06b0cee674b952eac1304cb7fa2e7446594eabae9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172790c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa032b16c7f570fdac61f698cb14374cf421cd9a0eb3adf0b29b8c35d6d5bd72494a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa066d5d72e581a594908e96e756fb97331af622905c82e5d7e6f302db940acaa57a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a09197dd2011319644ecd2a8a06b0cee674b952eac1304cb7fa2e7446594eabae9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172798203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0x32b16c7f570fdac61f698cb14374cf421cd9a0eb3adf0b29b8c35d6d5bd72494", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x12b13080044a3842cc3ecf4e573eac9b2d9fec270f21ecf571c6ccb264b9e312", + "stateRoot": "0x66d5d72e581a594908e96e756fb97331af622905c82e5d7e6f302db940acaa57", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x9197dd2011319644ecd2a8a06b0cee674b952eac1304cb7fa2e7446594eabae9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -807,8 +814,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017279", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -816,7 +823,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x19d29af5b79e69fa13050e1d98993bb40e7d33d96e4137e19efbf8ecb3d4cee0" + "hash": "0x43a679402433086408ad07e8352a601965a36ca95bd77b410d76bc2c3036967f" }, "blocknumber": "1", "transactions": [ @@ -841,7 +848,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x19d29af5b79e69fa13050e1d98993bb40e7d33d96e4137e19efbf8ecb3d4cee0", + "lastblockhash": "0x43a679402433086408ad07e8352a601965a36ca95bd77b410d76bc2c3036967f", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -876,7 +883,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -888,9 +895,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-proof=correct-insufficient_gas-call_type=STATICCALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-insufficient_gas-call_type_STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -921,12 +929,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0574e5113f091e4f9bac80d8a9e2aa1ec3cc086562bc0e1019182beb7bb4714cda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0846193a7b7f3ccba8bdf2853515a01f1a84e6831343a843f3205d65096bc31e1a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0ace1ceacb6a9869287bc28a00c6eab0866444fad6e8b990063047c83a278fcf9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172760c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa0574e5113f091e4f9bac80d8a9e2aa1ec3cc086562bc0e1019182beb7bb4714cda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e4795041ec37321dff4af5dee5ecb481a383e21d1fbb92dbbd4ca23e68d6d62ba09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0ace1ceacb6a9869287bc28a00c6eab0866444fad6e8b990063047c83a278fcf9b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172768203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0x574e5113f091e4f9bac80d8a9e2aa1ec3cc086562bc0e1019182beb7bb4714cd", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x846193a7b7f3ccba8bdf2853515a01f1a84e6831343a843f3205d65096bc31e1", + "stateRoot": "0xe4795041ec37321dff4af5dee5ecb481a383e21d1fbb92dbbd4ca23e68d6d62b", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0xace1ceacb6a9869287bc28a00c6eab0866444fad6e8b990063047c83a278fcf9", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -934,8 +942,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017276", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -943,7 +951,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3894b420644d31399de1243aac4c132e77dfdbd5702fecd675992017f1d9e333" + "hash": "0xfa8e16c89fa1e741e86dce4d92f8fbd3ab117d40f98bf1254582f7acca01bbda" }, "blocknumber": "1", "transactions": [ @@ -968,7 +976,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3894b420644d31399de1243aac4c132e77dfdbd5702fecd675992017f1d9e333", + "lastblockhash": "0xfa8e16c89fa1e741e86dce4d92f8fbd3ab117d40f98bf1254582f7acca01bbda", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1003,7 +1011,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1015,9 +1023,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-proof=correct-extra_gas-call_type=CALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1048,12 +1057,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da01b0c28cc4638a9f37f9c230ed1e9ee12533e7adf0b927be2bdd82f50ccde4f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fa9fe72a91727dbd95320865a9590414d3321f0bf7c2cdbc84545f43a2986b16a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0dedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301727a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa01b0c28cc4638a9f37f9c230ed1e9ee12533e7adf0b927be2bdd82f50ccde4f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09319a0e718ecb08a3ad5a68492db5c3dac4d872fc07ddd720195743fd0525c4fa09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0dedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301727a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0x1b0c28cc4638a9f37f9c230ed1e9ee12533e7adf0b927be2bdd82f50ccde4f01", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xfa9fe72a91727dbd95320865a9590414d3321f0bf7c2cdbc84545f43a2986b16", + "stateRoot": "0x9319a0e718ecb08a3ad5a68492db5c3dac4d872fc07ddd720195743fd0525c4f", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0ded", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1061,8 +1070,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01727a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1070,7 +1079,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x106e1ce1bba0f4d7a02d14d609eca27b3ab1e053915a9e2ac1aae65059dd5475" + "hash": "0xbc326add512295fb41cea549a915cfb54b93cad3b33fbdac77e7a1d1fe0cf510" }, "blocknumber": "1", "transactions": [ @@ -1095,7 +1104,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x106e1ce1bba0f4d7a02d14d609eca27b3ab1e053915a9e2ac1aae65059dd5475", + "lastblockhash": "0xbc326add512295fb41cea549a915cfb54b93cad3b33fbdac77e7a1d1fe0cf510", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1130,7 +1139,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1142,9 +1151,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-proof=correct-extra_gas-call_type=DELEGATECALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1175,12 +1185,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0f21b3683c1bd5f84fa161d94ddb8e6cf1e0e1af59167e47473e4b6b19037f24aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f07519a8245a09784ecb897723380f227a4387b4d009b366cfdf3dde850d7ec5a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a01c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172770c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa0f21b3683c1bd5f84fa161d94ddb8e6cf1e0e1af59167e47473e4b6b19037f24aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02766ffd8d1076786d2ce85ebd313665db408b89da7742062eb2c6f3e26962183a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a01c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172778203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0xf21b3683c1bd5f84fa161d94ddb8e6cf1e0e1af59167e47473e4b6b19037f24a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf07519a8245a09784ecb897723380f227a4387b4d009b366cfdf3dde850d7ec5", + "stateRoot": "0x2766ffd8d1076786d2ce85ebd313665db408b89da7742062eb2c6f3e26962183", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x1c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1188,8 +1198,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017277", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1197,7 +1207,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x1a3f36e436cbe050660bfd7d775c14a35a79d7b80b10953db8f4318f2d83dcf6" + "hash": "0x35bed97da7905016a418bab5f3a2cdc65cbe0804736f3fa12df6e3687ed6c24c" }, "blocknumber": "1", "transactions": [ @@ -1222,7 +1232,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1a3f36e436cbe050660bfd7d775c14a35a79d7b80b10953db8f4318f2d83dcf6", + "lastblockhash": "0x35bed97da7905016a418bab5f3a2cdc65cbe0804736f3fa12df6e3687ed6c24c", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1257,7 +1267,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1269,9 +1279,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-proof=correct-extra_gas-call_type=CALLCODE": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1302,12 +1313,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da013e0d336fa2467896d130d04b525dd65422faded748267a0d38bd1eaf68df7b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07b732317c628cc1d522d092bb0a213daf6f1ee74150597ee5a9a59f7197b601ba09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0dedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301727a0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa013e0d336fa2467896d130d04b525dd65422faded748267a0d38bd1eaf68df7b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00302fa7e4a8acee9e6d00bce500a4b50f4bdbbdf9daf29a2bd292e15478b2c81a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a0604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0dedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008301727a8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0x13e0d336fa2467896d130d04b525dd65422faded748267a0d38bd1eaf68df7b6", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7b732317c628cc1d522d092bb0a213daf6f1ee74150597ee5a9a59f7197b601b", + "stateRoot": "0x0302fa7e4a8acee9e6d00bce500a4b50f4bdbbdf9daf29a2bd292e15478b2c81", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x604c9a228f68da4bcad0fe8bae7f2ffd3746fe4fba0fcc5226d63ffbd0df0ded", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1315,8 +1326,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x01727a", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1324,7 +1335,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf5320f0fa423abe0bc1b9697389d4b97a2461394d11bbcc142883144f7c6c314" + "hash": "0x3a244429e8db3136af2a35649bf5d80f44cb8161f10de5f94e206d7566bcffdd" }, "blocknumber": "1", "transactions": [ @@ -1349,7 +1360,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf5320f0fa423abe0bc1b9697389d4b97a2461394d11bbcc142883144f7c6c314", + "lastblockhash": "0x3a244429e8db3136af2a35649bf5d80f44cb8161f10de5f94e206d7566bcffdd", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1384,7 +1395,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1396,9 +1407,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-proof=correct-extra_gas-call_type=STATICCALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_correct-extra_gas-call_type_STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1429,12 +1441,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0ae334e626770ceb6016c8e3e6da2a12da2b323f0df8ef9c7b4712af70d7093a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b54b54bc868dbd2d56b31c04ec265a688acacbc014c5a90bd7fc70a0c5a994b9a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a01c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172770c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", + "rlp": "0xf90372f9023fa0ae334e626770ceb6016c8e3e6da2a12da2b323f0df8ef9c7b4712af70d7093a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e87783c08ff29783e47a307b37a22fde7fb6acbc7d14fa07eca48b053a3e6532a09de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360a01c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172778203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c001a05d3bf2f997666f4680b7e444ca7e44c0b2de13ee5223f26a7a7bde6f088aec02a069b227b9cd40fa2c0fe4fb4616f1048b448d849427efdb783389c6e6e6caaf22c0c0", "blockHeader": { "parentHash": "0xae334e626770ceb6016c8e3e6da2a12da2b323f0df8ef9c7b4712af70d7093a9", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xb54b54bc868dbd2d56b31c04ec265a688acacbc014c5a90bd7fc70a0c5a994b9", + "stateRoot": "0xe87783c08ff29783e47a307b37a22fde7fb6acbc7d14fa07eca48b053a3e6532", "transactionsTrie": "0x9de76ebe2fbdd1eb1a72a2e02745283ea9c1a5589acfbca28e25b9705616f360", "receiptTrie": "0x1c40c72d45b04b46501bab7ddc4073e4fdc8b0aacb04c5c31c2bf2ee785d0085", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1442,8 +1454,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017277", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1451,7 +1463,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb6a259d214358709b1465cb7db6bf54fce4aba75926d48bd6b014a77c9d723e8" + "hash": "0x7deb17f6e9cbb5f965000e370983f91554c800169c711dea35f0e861852f08b2" }, "blocknumber": "1", "transactions": [ @@ -1476,7 +1488,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb6a259d214358709b1465cb7db6bf54fce4aba75926d48bd6b014a77c9d723e8", + "lastblockhash": "0x7deb17f6e9cbb5f965000e370983f91554c800169c711dea35f0e861852f08b2", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1511,7 +1523,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1523,9 +1535,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-proof=incorrect-exact_gas-call_type=CALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1556,12 +1569,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da09cac74f0a8928e5d71d9a5592e25668fbc7448dcd8e114524b31c618aab2f8d9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0edeea72e25dc24e25699f2430dfdc5eab79b7527ec58db7cab44aed2dcc723eda031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a06ddb313832f1b53c5d3263aefce1ecbacef4f9d1b8395977cd0e36135e88cc18b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172860c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa09cac74f0a8928e5d71d9a5592e25668fbc7448dcd8e114524b31c618aab2f8d9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0da5f9f5d374ccb0ac80acf66fe7e514c10e4516355e5b735b22010573126e075a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a06ddb313832f1b53c5d3263aefce1ecbacef4f9d1b8395977cd0e36135e88cc18b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172868203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0x9cac74f0a8928e5d71d9a5592e25668fbc7448dcd8e114524b31c618aab2f8d9", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xedeea72e25dc24e25699f2430dfdc5eab79b7527ec58db7cab44aed2dcc723ed", + "stateRoot": "0xda5f9f5d374ccb0ac80acf66fe7e514c10e4516355e5b735b22010573126e075", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x6ddb313832f1b53c5d3263aefce1ecbacef4f9d1b8395977cd0e36135e88cc18", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1569,8 +1582,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017286", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1578,7 +1591,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2fea48464eb60c3368d04de558c86523b747c665f4fbf1955e5db479c2559476" + "hash": "0xae3dfcfe0f866ccb00ff1d877fbeb31560d8c4e6be6ded982723bdfae2e0b40b" }, "blocknumber": "1", "transactions": [ @@ -1603,7 +1616,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2fea48464eb60c3368d04de558c86523b747c665f4fbf1955e5db479c2559476", + "lastblockhash": "0xae3dfcfe0f866ccb00ff1d877fbeb31560d8c4e6be6ded982723bdfae2e0b40b", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1638,7 +1651,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1650,9 +1663,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-proof=incorrect-exact_gas-call_type=DELEGATECALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1683,12 +1697,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0eea71745de8ebf2c867c5384b717e8090723b6b62212f6e95e61dbb51638c14ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06ad34af7332417988c12528c55564d4cbd09ed546ef00608372425dd5177158aa031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a041ab59b861bfc0eaa236f0ee3373d6a808ce08289a48d65f1935320e79248aeab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172830c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa0eea71745de8ebf2c867c5384b717e8090723b6b62212f6e95e61dbb51638c14ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02503a0eb2a8aeaa627ea4f680ed35cdd338a07d53e82305aca49f112fc701dcaa031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a041ab59b861bfc0eaa236f0ee3373d6a808ce08289a48d65f1935320e79248aeab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172838203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0xeea71745de8ebf2c867c5384b717e8090723b6b62212f6e95e61dbb51638c14c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6ad34af7332417988c12528c55564d4cbd09ed546ef00608372425dd5177158a", + "stateRoot": "0x2503a0eb2a8aeaa627ea4f680ed35cdd338a07d53e82305aca49f112fc701dca", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x41ab59b861bfc0eaa236f0ee3373d6a808ce08289a48d65f1935320e79248aea", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1696,8 +1710,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017283", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1705,7 +1719,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x8a65c43f22eb312cceca2d3c70ef81d908340158f4e621dd87b78b91c2359766" + "hash": "0xbad0c535ffb9538df9c287de7b36d54b43c8be7b22c22e276390f9b5b84f78a4" }, "blocknumber": "1", "transactions": [ @@ -1730,7 +1744,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x8a65c43f22eb312cceca2d3c70ef81d908340158f4e621dd87b78b91c2359766", + "lastblockhash": "0xbad0c535ffb9538df9c287de7b36d54b43c8be7b22c22e276390f9b5b84f78a4", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1765,7 +1779,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1777,9 +1791,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-proof=incorrect-exact_gas-call_type=CALLCODE": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1810,12 +1825,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da06f0f3c7560646cea4d6ccbb6e26eaeee30ea6a805cb5e0c8d9f22dce3d33b2a1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06b44feb9b0ef51db2fa1399b9cf5fe6d397516cec669e73168189277a5da57dea031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a06ddb313832f1b53c5d3263aefce1ecbacef4f9d1b8395977cd0e36135e88cc18b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172860c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa06f0f3c7560646cea4d6ccbb6e26eaeee30ea6a805cb5e0c8d9f22dce3d33b2a1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0399f68ffb9e6135d796de396b5c06355aac651d4fb60bafaf05e0e32ab9fd39ba031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a06ddb313832f1b53c5d3263aefce1ecbacef4f9d1b8395977cd0e36135e88cc18b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172868203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0x6f0f3c7560646cea4d6ccbb6e26eaeee30ea6a805cb5e0c8d9f22dce3d33b2a1", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6b44feb9b0ef51db2fa1399b9cf5fe6d397516cec669e73168189277a5da57de", + "stateRoot": "0x399f68ffb9e6135d796de396b5c06355aac651d4fb60bafaf05e0e32ab9fd39b", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x6ddb313832f1b53c5d3263aefce1ecbacef4f9d1b8395977cd0e36135e88cc18", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1823,8 +1838,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017286", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1832,7 +1847,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x44748e075c81a4b22ee58d9d1e9b6777a30c829a3efe417c42482748aed9041c" + "hash": "0x856211dd077305d8a019bbad384e794a7b93521cf6cae2a8c3d79bd572f18204" }, "blocknumber": "1", "transactions": [ @@ -1857,7 +1872,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x44748e075c81a4b22ee58d9d1e9b6777a30c829a3efe417c42482748aed9041c", + "lastblockhash": "0x856211dd077305d8a019bbad384e794a7b93521cf6cae2a8c3d79bd572f18204", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -1892,7 +1907,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1904,9 +1919,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-proof=incorrect-exact_gas-call_type=STATICCALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-exact_gas-call_type_STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -1937,12 +1953,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da07ff849caed3e7ebf8f538bbf84bb1e823bbafd69ab1a0861ca830d6e5540ed1fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0300f16b802a764dfad9b081df5034cfa0af044bc7154a628306f4a41e359cdb3a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a041ab59b861bfc0eaa236f0ee3373d6a808ce08289a48d65f1935320e79248aeab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172830c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa07ff849caed3e7ebf8f538bbf84bb1e823bbafd69ab1a0861ca830d6e5540ed1fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fad9ca53b87fe7f30b6fed3bebc54857b5acd0c6de42cfa241187e7b76d4129ca031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a041ab59b861bfc0eaa236f0ee3373d6a808ce08289a48d65f1935320e79248aeab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172838203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0x7ff849caed3e7ebf8f538bbf84bb1e823bbafd69ab1a0861ca830d6e5540ed1f", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x300f16b802a764dfad9b081df5034cfa0af044bc7154a628306f4a41e359cdb3", + "stateRoot": "0xfad9ca53b87fe7f30b6fed3bebc54857b5acd0c6de42cfa241187e7b76d4129c", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x41ab59b861bfc0eaa236f0ee3373d6a808ce08289a48d65f1935320e79248aea", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1950,8 +1966,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017283", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -1959,7 +1975,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf9c4b7a9cdd44b0f35a749bd030e2c1e5cdc51bb72d8b56ced16ee746e829238" + "hash": "0xd8ccf98e618a4120268acc204ba3c0d30b0d3268a1c8251c99a93218f01cb8ef" }, "blocknumber": "1", "transactions": [ @@ -1984,7 +2000,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf9c4b7a9cdd44b0f35a749bd030e2c1e5cdc51bb72d8b56ced16ee746e829238", + "lastblockhash": "0xd8ccf98e618a4120268acc204ba3c0d30b0d3268a1c8251c99a93218f01cb8ef", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2019,7 +2035,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2031,9 +2047,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-proof=incorrect-insufficient_gas-call_type=CALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2064,12 +2081,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da02f9b4f4c7e8425902a1007b381ebe7207bd9472f71c6aeb03d614e74420778c7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa097f4f54d6ea7f287bb85da9b9f7d1ae15608c2b5c351816eea82ba63c88be6bfa031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a0026989fd5fa3b30939d140a8d6f7fbe333f2959bf011e2e0d477a9a2514d750db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172850c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa02f9b4f4c7e8425902a1007b381ebe7207bd9472f71c6aeb03d614e74420778c7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fb008757890b309154dfadd5e58f89b4bea9b844244f169c96094d7d2cb559bfa031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a0026989fd5fa3b30939d140a8d6f7fbe333f2959bf011e2e0d477a9a2514d750db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172858203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0x2f9b4f4c7e8425902a1007b381ebe7207bd9472f71c6aeb03d614e74420778c7", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x97f4f54d6ea7f287bb85da9b9f7d1ae15608c2b5c351816eea82ba63c88be6bf", + "stateRoot": "0xfb008757890b309154dfadd5e58f89b4bea9b844244f169c96094d7d2cb559bf", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x026989fd5fa3b30939d140a8d6f7fbe333f2959bf011e2e0d477a9a2514d750d", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2077,8 +2094,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017285", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2086,7 +2103,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf4fb28c7863ca00fd79cf1d94f2f32c616562c2c415e61518ea07401445ac019" + "hash": "0x2bae0c7130bcabd9805d69da844d10798ecfd285354478b243b3912e205b258b" }, "blocknumber": "1", "transactions": [ @@ -2111,7 +2128,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf4fb28c7863ca00fd79cf1d94f2f32c616562c2c415e61518ea07401445ac019", + "lastblockhash": "0x2bae0c7130bcabd9805d69da844d10798ecfd285354478b243b3912e205b258b", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2146,7 +2163,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2158,9 +2175,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-proof=incorrect-insufficient_gas-call_type=DELEGATECALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2191,12 +2209,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0bc3025e9f75d38162f48aefc1a8f28276d998aab639493ebfedd5f5085e50454a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa022bf6bf109151e230d950f633d784984df1315ee6ba776aca8af5b90e4fce287a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a01ec44b97ab57ff67ca4d573a3905634712136b2cc1dc14cd038e9061c877ef58b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172820c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa0bc3025e9f75d38162f48aefc1a8f28276d998aab639493ebfedd5f5085e50454a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa062a4d0325b1e1473bc660d928748e76c8c9f13ee6a33a9cc535e03192606ca7ba031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a01ec44b97ab57ff67ca4d573a3905634712136b2cc1dc14cd038e9061c877ef58b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172828203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0xbc3025e9f75d38162f48aefc1a8f28276d998aab639493ebfedd5f5085e50454", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x22bf6bf109151e230d950f633d784984df1315ee6ba776aca8af5b90e4fce287", + "stateRoot": "0x62a4d0325b1e1473bc660d928748e76c8c9f13ee6a33a9cc535e03192606ca7b", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x1ec44b97ab57ff67ca4d573a3905634712136b2cc1dc14cd038e9061c877ef58", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2204,8 +2222,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017282", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2213,7 +2231,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa0885d84ebf7b657f9e61031eeffc0c058a77ed315eb73804ba045f682b9ab1b" + "hash": "0x50e4a580383017d1e89212349c58ebaa7399988362d673eeb89efa9541e885af" }, "blocknumber": "1", "transactions": [ @@ -2238,7 +2256,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa0885d84ebf7b657f9e61031eeffc0c058a77ed315eb73804ba045f682b9ab1b", + "lastblockhash": "0x50e4a580383017d1e89212349c58ebaa7399988362d673eeb89efa9541e885af", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2273,7 +2291,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2285,9 +2303,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-proof=incorrect-insufficient_gas-call_type=CALLCODE": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2318,12 +2337,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da032b16c7f570fdac61f698cb14374cf421cd9a0eb3adf0b29b8c35d6d5bd72494a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05017d9b9db22e67749921c0fbb09d6441ab249cbacf0519745ad83f32eb380bea031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a0026989fd5fa3b30939d140a8d6f7fbe333f2959bf011e2e0d477a9a2514d750db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172850c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa032b16c7f570fdac61f698cb14374cf421cd9a0eb3adf0b29b8c35d6d5bd72494a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00d8ff57beebd9f14390a4bcede987b3eab69f8962d2163afe2fcf186e2d0bfdea031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a0026989fd5fa3b30939d140a8d6f7fbe333f2959bf011e2e0d477a9a2514d750db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172858203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0x32b16c7f570fdac61f698cb14374cf421cd9a0eb3adf0b29b8c35d6d5bd72494", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x5017d9b9db22e67749921c0fbb09d6441ab249cbacf0519745ad83f32eb380be", + "stateRoot": "0x0d8ff57beebd9f14390a4bcede987b3eab69f8962d2163afe2fcf186e2d0bfde", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x026989fd5fa3b30939d140a8d6f7fbe333f2959bf011e2e0d477a9a2514d750d", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2331,8 +2350,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017285", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2340,7 +2359,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xeb828ddd1548db11a77d35c547916247d3cfec01df696c4541322fb99d451d21" + "hash": "0xc7123ab483bc69a59bd25d2a59e12e58bd86f73a2c777b0ca61b6eed00f7b8e9" }, "blocknumber": "1", "transactions": [ @@ -2365,7 +2384,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xeb828ddd1548db11a77d35c547916247d3cfec01df696c4541322fb99d451d21", + "lastblockhash": "0xc7123ab483bc69a59bd25d2a59e12e58bd86f73a2c777b0ca61b6eed00f7b8e9", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2400,7 +2419,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2412,9 +2431,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-proof=incorrect-insufficient_gas-call_type=STATICCALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-insufficient_gas-call_type_STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2445,12 +2465,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0574e5113f091e4f9bac80d8a9e2aa1ec3cc086562bc0e1019182beb7bb4714cda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa006bdc744f970e21d69e45163382b44abee5c88541c51b129571ff78f2bc5cb46a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a01ec44b97ab57ff67ca4d573a3905634712136b2cc1dc14cd038e9061c877ef58b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172820c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa0574e5113f091e4f9bac80d8a9e2aa1ec3cc086562bc0e1019182beb7bb4714cda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05c2abde07c6a338314b1cc8785c7d860269bcb95ebbd0c6bfae1c4dfa73b6815a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a01ec44b97ab57ff67ca4d573a3905634712136b2cc1dc14cd038e9061c877ef58b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172828203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0x574e5113f091e4f9bac80d8a9e2aa1ec3cc086562bc0e1019182beb7bb4714cd", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x06bdc744f970e21d69e45163382b44abee5c88541c51b129571ff78f2bc5cb46", + "stateRoot": "0x5c2abde07c6a338314b1cc8785c7d860269bcb95ebbd0c6bfae1c4dfa73b6815", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x1ec44b97ab57ff67ca4d573a3905634712136b2cc1dc14cd038e9061c877ef58", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2458,8 +2478,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017282", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2467,7 +2487,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x497a10ef2df445a53008a50fa1b45d5f292195ca973437c038d0df28fac94f7f" + "hash": "0xa6b79e91a743270a7094c4a05ece321e25768becbba84d0cb1cb6ce62142f293" }, "blocknumber": "1", "transactions": [ @@ -2492,7 +2512,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x497a10ef2df445a53008a50fa1b45d5f292195ca973437c038d0df28fac94f7f", + "lastblockhash": "0xa6b79e91a743270a7094c4a05ece321e25768becbba84d0cb1cb6ce62142f293", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2527,7 +2547,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2539,9 +2559,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-proof=incorrect-extra_gas-call_type=CALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2572,12 +2593,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da01b0c28cc4638a9f37f9c230ed1e9ee12533e7adf0b927be2bdd82f50ccde4f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02d57521177ef7df4c20ce6f05c2c99de677ad9c3a1684e30f238a526d3953385a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a0be234bb291db41d7680231a44d071a0422a26a1adcb2fefe9980e7acc03832e0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172870c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa01b0c28cc4638a9f37f9c230ed1e9ee12533e7adf0b927be2bdd82f50ccde4f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e2d353056edea6e9326e8d0adc16df27f605ceecfb8a739a87b174cab611c540a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a0be234bb291db41d7680231a44d071a0422a26a1adcb2fefe9980e7acc03832e0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172878203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0x1b0c28cc4638a9f37f9c230ed1e9ee12533e7adf0b927be2bdd82f50ccde4f01", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x2d57521177ef7df4c20ce6f05c2c99de677ad9c3a1684e30f238a526d3953385", + "stateRoot": "0xe2d353056edea6e9326e8d0adc16df27f605ceecfb8a739a87b174cab611c540", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0xbe234bb291db41d7680231a44d071a0422a26a1adcb2fefe9980e7acc03832e0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2585,8 +2606,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017287", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2594,7 +2615,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x92f0c0b1c956536a6b5fff0f05ce776153f5d7e7a7b21024a9bb61dfa7368888" + "hash": "0x1adbc835073fbd8b495ef5a58047e55607e984a6a8256533f54d1d6408aa136d" }, "blocknumber": "1", "transactions": [ @@ -2619,7 +2640,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x92f0c0b1c956536a6b5fff0f05ce776153f5d7e7a7b21024a9bb61dfa7368888", + "lastblockhash": "0x1adbc835073fbd8b495ef5a58047e55607e984a6a8256533f54d1d6408aa136d", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2654,7 +2675,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2666,9 +2687,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-proof=incorrect-extra_gas-call_type=DELEGATECALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2699,12 +2721,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0f21b3683c1bd5f84fa161d94ddb8e6cf1e0e1af59167e47473e4b6b19037f24aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0389c851cf98555c343bc4bb8f48d1a33d390f716b6094037e17ce7170c49cca2a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a086ed5358cbfb008e2016641476483ba9f5e01167bd6b03508e646e4c2925587bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172840c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa0f21b3683c1bd5f84fa161d94ddb8e6cf1e0e1af59167e47473e4b6b19037f24aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0167a74be1c47cf84012bbbf195db4d51daebc321e4899514aa273c3bc986cad8a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a086ed5358cbfb008e2016641476483ba9f5e01167bd6b03508e646e4c2925587bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172848203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0xf21b3683c1bd5f84fa161d94ddb8e6cf1e0e1af59167e47473e4b6b19037f24a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x389c851cf98555c343bc4bb8f48d1a33d390f716b6094037e17ce7170c49cca2", + "stateRoot": "0x167a74be1c47cf84012bbbf195db4d51daebc321e4899514aa273c3bc986cad8", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x86ed5358cbfb008e2016641476483ba9f5e01167bd6b03508e646e4c2925587b", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2712,8 +2734,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017284", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2721,7 +2743,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xd564e65143bbff0e8f3a1563372f2e74e40a9455b50febeff3c7f760474ff848" + "hash": "0x386b4a860c0841c0d401b3d05953001875a51b24313256f63b8545c6cdce12f5" }, "blocknumber": "1", "transactions": [ @@ -2746,7 +2768,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xd564e65143bbff0e8f3a1563372f2e74e40a9455b50febeff3c7f760474ff848", + "lastblockhash": "0x386b4a860c0841c0d401b3d05953001875a51b24313256f63b8545c6cdce12f5", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2781,7 +2803,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2793,9 +2815,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-proof=incorrect-extra_gas-call_type=CALLCODE": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2826,12 +2849,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da013e0d336fa2467896d130d04b525dd65422faded748267a0d38bd1eaf68df7b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09db539025f643863871bcbc1d484d1f059a19c27cd78546a485a5db7ea8e0692a031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a0be234bb291db41d7680231a44d071a0422a26a1adcb2fefe9980e7acc03832e0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172870c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa013e0d336fa2467896d130d04b525dd65422faded748267a0d38bd1eaf68df7b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d8c9e9fccda7db4af9e298fe3d7f80cdfecb7833cc5174ecc0274fea9608f54da031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a0be234bb291db41d7680231a44d071a0422a26a1adcb2fefe9980e7acc03832e0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172878203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0x13e0d336fa2467896d130d04b525dd65422faded748267a0d38bd1eaf68df7b6", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x9db539025f643863871bcbc1d484d1f059a19c27cd78546a485a5db7ea8e0692", + "stateRoot": "0xd8c9e9fccda7db4af9e298fe3d7f80cdfecb7833cc5174ecc0274fea9608f54d", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0xbe234bb291db41d7680231a44d071a0422a26a1adcb2fefe9980e7acc03832e0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2839,8 +2862,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017287", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2848,7 +2871,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x08b8beae8e60cd9d61a238a7ad64b107cb97f1472271790e38c2dfa22a6225aa" + "hash": "0xe4bed031b6d737830fb62fab86c4f2787ddada66497a197c820b9049050fd51e" }, "blocknumber": "1", "transactions": [ @@ -2873,7 +2896,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x08b8beae8e60cd9d61a238a7ad64b107cb97f1472271790e38c2dfa22a6225aa", + "lastblockhash": "0xe4bed031b6d737830fb62fab86c4f2787ddada66497a197c820b9049050fd51e", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -2908,7 +2931,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -2920,9 +2943,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-proof=incorrect-extra_gas-call_type=STATICCALL": { + "tests/cancun/eip4844_blobs/test_point_evaluation_precompile_gas.py::test_point_evaluation_precompile_gas_usage[fork_Cancun-blockchain_test-proof_incorrect-extra_gas-call_type_STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md", "reference-spec-version": "f0eb6a364aaf5ccb43516fa2c269a54fb881ecfd" }, @@ -2953,12 +2977,12 @@ }, "blocks": [ { - "rlp": "0xf90370f9023da0ae334e626770ceb6016c8e3e6da2a12da2b323f0df8ef9c7b4712af70d7093a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa053ed5b40266698baffba31098b4237d87a47e4efcdb00ff967fe5fd5ad5c919aa031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a086ed5358cbfb008e2016641476483ba9f5e01167bd6b03508e646e4c2925587bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172840c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", + "rlp": "0xf90372f9023fa0ae334e626770ceb6016c8e3e6da2a12da2b323f0df8ef9c7b4712af70d7093a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c2076cfe20cca8a7f4dff217f027c0edebaccfaab5fb2221e519c3da1a03a30ca031ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3a086ed5358cbfb008e2016641476483ba9f5e01167bd6b03508e646e4c2925587bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830172848203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9012bb9012802f9012401808007830f424094000000000000000000000000000000000000010080b8c0010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145eb7004fe57383e6c88b99d839937fddf3f99279353aaf8d5c9a75f91ce33c620100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0e295b2a5216d77b57cafbf6c4223972fa067212c1d6aa14a67e02c6639210020a05473b1f2fd7ee8e90ce0050530666ba6d1ba35ab51455cfd0d938729d4c91b14c0c0", "blockHeader": { "parentHash": "0xae334e626770ceb6016c8e3e6da2a12da2b323f0df8ef9c7b4712af70d7093a9", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x53ed5b40266698baffba31098b4237d87a47e4efcdb00ff967fe5fd5ad5c919a", + "stateRoot": "0xc2076cfe20cca8a7f4dff217f027c0edebaccfaab5fb2221e519c3da1a03a30c", "transactionsTrie": "0x31ca57059d358496ba2356abfbb50ad1a0d2b909222c6a94a2c31f686da2e6e3", "receiptTrie": "0x86ed5358cbfb008e2016641476483ba9f5e01167bd6b03508e646e4c2925587b", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2966,8 +2990,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x017284", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2975,7 +2999,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xb7eb7f209582e923a0b940855dcbf413c5920f06a11bda46cba75682a30b351a" + "hash": "0xe333389b5806b55f51aad55dd01329754167af86dc965e6abdc78e30bb4d204a" }, "blocknumber": "1", "transactions": [ @@ -3000,7 +3024,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb7eb7f209582e923a0b940855dcbf413c5920f06a11bda46cba75682a30b351a", + "lastblockhash": "0xe333389b5806b55f51aad55dd01329754167af86dc965e6abdc78e30bb4d204a", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", @@ -3035,7 +3059,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { diff --git a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy/mcopy_on_empty_memory.json b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy/mcopy_on_empty_memory.json index dbba5372b47..20d0ad65527 100644 --- a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy/mcopy_on_empty_memory.json +++ b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy/mcopy_on_empty_memory.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-empty_memory-length=0-src=0-dest=0": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_mcopy_on_empty_memory[fork_Cancun-blockchain_test-empty_memory-length_0-src_0-dest_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xcb79161e25ab93911e8e43c9f3c4f2fa41a9d9168eba104e45c9724750feff2d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -129,9 +131,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-empty_memory-length=0-src=0-dest=32": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_mcopy_on_empty_memory[fork_Cancun-blockchain_test-empty_memory-length_0-src_0-dest_32]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -186,6 +189,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1302aa15031177bdc3fc87cf971e81d62114b0a8555fe47d6524e452b84a8d05" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -259,9 +263,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-empty_memory-length=0-src=32-dest=0": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_mcopy_on_empty_memory[fork_Cancun-blockchain_test-empty_memory-length_0-src_32-dest_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -316,6 +321,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf6820b1deeb0e812b8ec655a14891a6c99dd8ca60aa91e982ce767656b1d39ed" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -389,9 +395,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-empty_memory-length=0-src=32-dest=32": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_mcopy_on_empty_memory[fork_Cancun-blockchain_test-empty_memory-length_0-src_32-dest_32]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -446,6 +453,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x488b0c64174b7054c80f03843952dd6fb3bef9f69fc8c37d5feb6d38451b1c08" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -519,9 +527,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-empty_memory-length=1-src=0-dest=0": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_mcopy_on_empty_memory[fork_Cancun-blockchain_test-empty_memory-length_1-src_0-dest_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -576,6 +585,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe67999e67946de57ef726990ce74337bf9a7308a271c37587391397995821798" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -650,9 +660,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-empty_memory-length=1-src=0-dest=32": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_mcopy_on_empty_memory[fork_Cancun-blockchain_test-empty_memory-length_1-src_0-dest_32]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -707,6 +718,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x10065162d7db0a84219bc6ea5b43f3b5f47acb16e94aadd626b39237be53eddd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -781,9 +793,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-empty_memory-length=1-src=32-dest=0": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_mcopy_on_empty_memory[fork_Cancun-blockchain_test-empty_memory-length_1-src_32-dest_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -838,6 +851,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf15413f1d701e80c52380135be4f0198de5fb4bcb17a2e4c5ad9123886a42fd3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -912,9 +926,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-empty_memory-length=1-src=32-dest=32": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_mcopy_on_empty_memory[fork_Cancun-blockchain_test-empty_memory-length_1-src_32-dest_32]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -969,6 +984,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x833eb65123605711c9381fc44b0c8823b102995335bf6abb7a924ac6c7d288f5" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy/valid_mcopy_operations.json b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy/valid_mcopy_operations.json index 39929e223c4..43be1b70f34 100644 --- a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy/valid_mcopy_operations.json +++ b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy/valid_mcopy_operations.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-zero_inputs": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-zero_inputs]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3974e0c5dbc3755c9c740731574aecc8a3c5ece30d6bedaa4bad1d933623906e" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -138,9 +140,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-zero_length_out_of_bounds_destination": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-zero_length_out_of_bounds_destination]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -195,6 +198,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6e2aa9328e873999206ee036eac781a6404a372fc682c625d3220256d6e58712" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -277,9 +281,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-single_byte_rewrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-single_byte_rewrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -334,6 +339,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x42ba905ef483548cfd460c8de06acf6be62cc2ea1cfe3d0f97a96ed74672818e" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -416,9 +422,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-full_word_rewrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-full_word_rewrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -473,6 +480,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc78fc4c1de1219cf926259a5af27216b3bfd37b78a93b050406838a6513e574c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -555,9 +563,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-single_byte_forward_overwrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-single_byte_forward_overwrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -612,6 +621,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe7b9f56e133344af8154c62f93628ab7ab92c54957ed75b13dfb1c35024d6b19" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -694,9 +704,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-full_word_forward_overwrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-full_word_forward_overwrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -751,6 +762,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x047dbdf7d190da0c4d23ededd16c983a37e546aa699e89c63c264cd929b97ca4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -833,9 +845,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-mid_word_single_byte_rewrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-mid_word_single_byte_rewrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -890,6 +903,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5fb7efa52b91044c83d7a97d34e6a65339fcac7ac3b8e2c38c762c508b914271" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -972,9 +986,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-mid_word_single_word_rewrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-mid_word_single_word_rewrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1029,6 +1044,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8af7f3624a85da44ea261e001773ca3b5902454deddb2df39711daeba512d067" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1111,9 +1127,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-mid_word_multi_word_rewrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-mid_word_multi_word_rewrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1168,6 +1185,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x22dae19144a3e7bf983e445518c70d09ebb1dab0a12dd6a49e1ecff35eb3cf81" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1250,9 +1268,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-two_words_forward_overwrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-two_words_forward_overwrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1307,6 +1326,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xea77f1f38eab9a6eb7610a7a8fc2bca9d2236e47c60cd8e1ac1e260914564241" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1389,9 +1409,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-two_words_backward_overwrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-two_words_backward_overwrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1446,6 +1467,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2fecc5da7544dea01a757cc2869f4a9c7e94651822647fb8072511c29a69a400" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1528,9 +1550,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-two_words_backward_overwrite_single_byte_offset": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-two_words_backward_overwrite_single_byte_offset]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1585,6 +1608,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2fa759e3ee645d9e6d1dcee5a19abba9692058aa74371643958dc126821b1e90" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1667,9 +1691,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-single_byte_memory_extension": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-single_byte_memory_extension]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1724,6 +1749,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x23cdadecfe367d08b87b0e556a8371084b89a159cdfc720d060f4a7252a0b1f6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1807,9 +1833,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-single_word_memory_extension": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-single_word_memory_extension]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1864,6 +1891,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x544a538b0570fc2a9249c82e50aac9ac2321f0a2c0f5064f209dad75f9d6b8e2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1947,9 +1975,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-single_word_minus_one_byte_memory_extension": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-single_word_minus_one_byte_memory_extension]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2004,6 +2033,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0bcaa73612b3178811f4c09067321bbda6dc3b4043b54e028ed05f9defa96d62" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2087,9 +2117,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-single_word_plus_one_byte_memory_extension": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-single_word_plus_one_byte_memory_extension]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2144,6 +2175,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x96207fd9cf0467aeacb79ee89baa832fc1dc6e4bd83cb2d8e2c0ecdd391e822c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2227,9 +2259,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-full_memory_rewrite": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-full_memory_rewrite]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2284,6 +2317,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x71870cfb18c6c58d5935dcc5aa85a7b7d571d1a4342d7794fe01ba6043d494c8" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2366,9 +2400,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-full_memory_copy": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-full_memory_copy]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2423,6 +2458,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf0cbb2d66c25ea7cbd8c3839146d79852a194aa89ecc16e403944113d2474e02" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2506,9 +2542,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-full_memory_copy_offset": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-full_memory_copy_offset]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2563,6 +2600,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xff9ecdc0698771e866690850633d305c4113d75d757800d99d9403bfcf6ecdda" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2646,9 +2684,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-full_memory_clean": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-full_memory_clean]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2703,6 +2742,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x347a3534317ca39afd3252b3e99f139cfc8d0d701523e7f8c2cd40a885ce37ce" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2777,9 +2817,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-out_of_bounds_memory_extension": { + "tests/cancun/eip5656_mcopy/test_mcopy.py::test_valid_mcopy_operations[fork_Cancun-blockchain_test-out_of_bounds_memory_extension]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2834,6 +2875,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd798ad786a71564f71b776228ca2af80e30941fcd916bc28d4df4f76301f3931" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_contexts/no_memory_corruption_on_upper_call_stack_levels.json b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_contexts/no_memory_corruption_on_upper_call_stack_levels.json index 090d1b291b5..cae6aaa9aab 100644 --- a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_contexts/no_memory_corruption_on_upper_call_stack_levels.json +++ b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_contexts/no_memory_corruption_on_upper_call_stack_levels.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-opcode=CALL": { + "tests/cancun/eip5656_mcopy/test_mcopy_contexts.py::test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-blockchain_test-opcode_CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x61f8162bc764a89d4de3a8268d0cc308f0d65c9a5d57c27e66b0de462353ec1d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -175,9 +177,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-opcode=DELEGATECALL": { + "tests/cancun/eip5656_mcopy/test_mcopy_contexts.py::test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-blockchain_test-opcode_DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -232,6 +235,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8a23179805c1b77f2019485854776f624d7a8cce41883c26af5b99945484f3e1" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -350,9 +354,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-opcode=STATICCALL": { + "tests/cancun/eip5656_mcopy/test_mcopy_contexts.py::test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-blockchain_test-opcode_STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -407,6 +412,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd3c05cdc323092b9345097b0268565ec9959a46341b347523c7cf598b076e203" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -524,9 +530,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-opcode=CALLCODE": { + "tests/cancun/eip5656_mcopy/test_mcopy_contexts.py::test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-blockchain_test-opcode_CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -581,6 +588,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x01ec6a8ac26ae3b90a667c64e86731f324e552e2273f38eed2b6dd252b582042" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -699,9 +707,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-opcode=CREATE": { + "tests/cancun/eip5656_mcopy/test_mcopy_contexts.py::test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-blockchain_test-opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -756,6 +765,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1e44682d716b5a6066bce6cd90f1e7bdc84bea239ae078c204d7471b8e2b8fa7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -881,9 +891,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-opcode=CREATE2": { + "tests/cancun/eip5656_mcopy/test_mcopy_contexts.py::test_no_memory_corruption_on_upper_call_stack_levels[fork_Cancun-blockchain_test-opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -938,6 +949,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xfaf5014f8f97979f71dfa4c1aa767b5d5846d7a4e748dcb29429d14347d03f90" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_memory_expansion/mcopy_huge_memory_expansion.json b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_memory_expansion/mcopy_huge_memory_expansion.json index c2c6dcfc540..57f7f73a9cf 100644 --- a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_memory_expansion/mcopy_huge_memory_expansion.json +++ b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_memory_expansion/mcopy_huge_memory_expansion.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-from_existent_memory-successful=False--max_dest_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--max_dest_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8aa935a1125814d5836f94b52fb80161629e394ccd05da4f644f4a6a4ef08dc7" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -137,9 +139,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-from_existent_memory-successful=False--max_dest_minus_one_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--max_dest_minus_one_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -194,6 +197,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xbe063ecf9bc53e91993f0ae27390f6524b8de93b323f96ca24f31aaf68e0234a" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -275,9 +279,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-from_existent_memory-successful=False--half_max_dest_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--half_max_dest_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -332,6 +337,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa2da48c3ad01aad821b3bed22d70393c688f2c4b684198eda46818022ad97773" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -413,9 +419,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-from_existent_memory-successful=False--max_src_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--max_src_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -470,6 +477,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0e2cfa95bf83a96b6bb22d64acc7a067cb1dc2fde4ddfaca0cb68efd0cc54419" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -551,9 +559,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-from_existent_memory-successful=False--max_src_minus_one_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--max_src_minus_one_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -608,6 +617,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x48150f183abd84d77ad71ae1da6d114e13ad77526709b2dab7879a540396a9c1" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -689,9 +699,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-from_existent_memory-successful=False--half_max_src_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--half_max_src_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -746,6 +757,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xed925a01d36971547900271ed26c0f8746836e666915641204929f0d429544cd" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -827,9 +839,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-from_existent_memory-successful=False--max_length_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--max_length_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -884,6 +897,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf8c3c3aae1dc876a543105e9d11f502ca0306731486f21265b28ebeac5096f1b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -965,9 +979,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-from_existent_memory-successful=False--max_length_minus_one_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--max_length_minus_one_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1022,6 +1037,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9bfb1b2bc6f87dd185f2ad7382e9b36ec398854d92f243f6a494c3e1a9c3685d" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1103,9 +1119,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-from_existent_memory-successful=False--half_max_length_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False--half_max_length_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1160,6 +1177,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xce9d58fb13b18aeb441df49ad9641973a4118173a4d34fba65fd243fce0d8f7c" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1241,9 +1259,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-from_empty_memory-successful=False--max_dest_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--max_dest_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1298,6 +1317,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6fb1c19073511206092b94b287e87cb69e73ba9383f72481f8ad1d5782ba005f" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1379,9 +1399,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-from_empty_memory-successful=False--max_dest_minus_one_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--max_dest_minus_one_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1436,6 +1457,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdfa2e12a6bd5d02814d6d90e743f0aa7e7d720f38411ff5ae09aaf9769893cff" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1517,9 +1539,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-from_empty_memory-successful=False--half_max_dest_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--half_max_dest_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1574,6 +1597,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1449b6f734c673d6ba9aa04aa548d247be076b0a64ee18da10a960e4193a964b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1655,9 +1679,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-from_empty_memory-successful=False--max_src_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--max_src_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1712,6 +1737,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc1861506de797ba4b1f8413f3a6d5bee8a0eb0f4cdc3e8f01a3890102ddacc90" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1793,9 +1819,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-from_empty_memory-successful=False--max_src_minus_one_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--max_src_minus_one_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1850,6 +1877,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x819f417a87a152c0e6a903c4c8348fe83fe91cb9b677e89d14fda595da0cfb8a" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1931,9 +1959,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-from_empty_memory-successful=False--half_max_src_single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--half_max_src_single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1988,6 +2017,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x15eb97133e132829cb355459c01dde36af13c753a9fc2aaf3dac4fa3ae9cfffb" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2069,9 +2099,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-from_empty_memory-successful=False--max_length_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--max_length_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2126,6 +2157,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x16c3899fffa2f9ce2747be63147b0c40b3b6ce175f6bffbe1e780e1a7d722e63" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2207,9 +2239,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-from_empty_memory-successful=False--max_length_minus_one_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--max_length_minus_one_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2264,6 +2297,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe89fe7d5d0d525ed0e541228acbcce54b2bf5e0ec28ba1d6f551ec0030be5bed" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2345,9 +2379,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-from_empty_memory-successful=False--half_max_length_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_huge_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False--half_max_length_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2402,6 +2437,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6b5a7e7b7fe2f164d855821c7c434be5ad622ee6b07c9ad16b2402453522f725" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", diff --git a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_memory_expansion/mcopy_memory_expansion.json b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_memory_expansion/mcopy_memory_expansion.json index dfa6f4d3a05..c292b453e98 100644 --- a/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_memory_expansion/mcopy_memory_expansion.json +++ b/tests/execution-spec-tests/cancun/eip5656_mcopy/mcopy_memory_expansion/mcopy_memory_expansion.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-from_existent_memory-successful=True-single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x11b612ba61ae5e3c758ed68627cf527495ceebcdd914a6d09cdc1a67725d07c8" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -137,9 +139,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-from_existent_memory-successful=True-single_byte_expansion_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -194,6 +197,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8e44a1c79b8b8d2410ff0148cc85f9787783689ec4a064d00c361ede0d1346de" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -275,9 +279,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-from_existent_memory-successful=True-single_byte_expansion_word_boundary": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -332,6 +337,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x386156f39dd246c7aa5414f1923f32ead906785a561211ef950180690e9e2d7b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -413,9 +419,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-from_existent_memory-successful=True-single_byte_expansion_word_boundary_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-single_byte_expansion_word_boundary_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -470,6 +477,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd48162c6c4ac712ac573cf665de4ca0f1cc4435d636832a0e9a80b59d09c867c" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -551,9 +559,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-from_existent_memory-successful=True-multi_word_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-multi_word_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -608,6 +617,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb015e3c4708a6ccf4884f75f50c3fed6a331c0ac83669fdfa042ba0dff387217" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -689,9 +699,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-from_existent_memory-successful=True-multi_word_expansion_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-multi_word_expansion_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -746,6 +757,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x46d9b8b1eccd8ec668a1dd7bfa0315b218a02e01a206b68149bfd2d32d334d12" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -827,9 +839,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-from_existent_memory-successful=True-zero_length_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-zero_length_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -884,6 +897,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc257d6a953df1f6e37d691e54972eed7daa9f8fcf6bf35385a28cf6a06d5d0fe" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -965,9 +979,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-from_existent_memory-successful=True-huge_dest_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-huge_dest_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1022,6 +1037,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf062f1fb0d7d53c375efc1bf00f39d0e75efdb38e12f673a96232a2f14fd7a9f" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1103,9 +1119,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-from_existent_memory-successful=True-huge_src_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-huge_src_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1160,6 +1177,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd3d8a914c814bbedf49ffe8080f98bfdfc3d04020ec59debb9670b507e4535dd" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1241,9 +1259,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-from_existent_memory-successful=True-huge_dest_huge_src_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_True-huge_dest_huge_src_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1298,6 +1317,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe0dcf9cea3bbf1422c66939d17949881097d44739bf37017e41bca1695381535" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1379,9 +1399,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-from_existent_memory-successful=False-single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1436,6 +1457,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xaf5c7b85c711895d0d171262f1987c1329f9ea13a58a0547f77581d91f57e9d8" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1517,9 +1539,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-from_existent_memory-successful=False-single_byte_expansion_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1574,6 +1597,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x438ca0613b59a0ef5b0bfc2dbcde977ba8ba01271ae03710b14c68f5bca5a970" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1655,9 +1679,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-from_existent_memory-successful=False-single_byte_expansion_word_boundary": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1712,6 +1737,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x15590827f315c2dbc72a3262b285aec75bb0471cdbc288085f0cf63e12b1307b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1793,9 +1819,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-from_existent_memory-successful=False-single_byte_expansion_word_boundary_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-single_byte_expansion_word_boundary_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1850,6 +1877,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc0df03d1ce0918350d1cd47029892fe94ef73fdad06ceeeba49f5b12c6494b8e" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -1931,9 +1959,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-from_existent_memory-successful=False-multi_word_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-multi_word_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -1988,6 +2017,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9d875bafa7096b989243744886f39bc1ab729787220405a0217fcb9835e55ee1" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2069,9 +2099,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-from_existent_memory-successful=False-multi_word_expansion_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-multi_word_expansion_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2126,6 +2157,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5c35d356673922198bdcc64e24e58f77e846bf21f9027ecf5212e7f3bd5dfe3d" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2207,9 +2239,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-from_existent_memory-successful=False-zero_length_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-zero_length_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2264,6 +2297,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x01c95d5e907a1b763d51cb7631683af2e812cbc209ed0c555b7420f67bd6042e" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2345,9 +2379,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-from_existent_memory-successful=False-huge_dest_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-huge_dest_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2402,6 +2437,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5d7eeed3911e0d490432c07d2de358c89b91937a2f6c6b10655abc5d6641bf6d" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2483,9 +2519,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-from_existent_memory-successful=False-huge_src_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-huge_src_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2540,6 +2577,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc185e53420f569fbf231ee17ad131051e6015ad21f754d52724d0af27af0dc83" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2621,9 +2659,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-from_existent_memory-successful=False-huge_dest_huge_src_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_existent_memory-successful_False-huge_dest_huge_src_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2678,6 +2717,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x68d359a6f561ec66cbf34db2ae750eea52709b30a16d33edae8673752d5c5ab2" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2759,9 +2799,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-from_empty_memory-successful=True-single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2816,6 +2857,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb76f8c4b60c88166d943f86efaa1b24f4847c87c95d2d2e6e92ce2425235f49d" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -2897,9 +2939,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-from_empty_memory-successful=True-single_byte_expansion_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -2954,6 +2997,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb404f35889a64e5fe97a49c1999647d3f7fd8c544e95338f8b31ff04fa2f1aaf" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3035,9 +3079,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-from_empty_memory-successful=True-single_byte_expansion_word_boundary": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -3092,6 +3137,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6fcfe1305e61481f55f4d829510b157761fbc4b0000d35e2636b30e46d60b906" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3173,9 +3219,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-from_empty_memory-successful=True-single_byte_expansion_word_boundary_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-single_byte_expansion_word_boundary_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -3230,6 +3277,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x09e614f9b4fe0c08bf619b0312fcd304386abd9ebe9f2b2f5a21a0e0b882363b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3311,9 +3359,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-from_empty_memory-successful=True-multi_word_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-multi_word_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -3368,6 +3417,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x47845b6d8812ceb0e18002f3bcb0389b7fb488a50443dee58183d59c2e2baaba" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3449,9 +3499,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-from_empty_memory-successful=True-multi_word_expansion_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-multi_word_expansion_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -3506,6 +3557,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x37f2b917495a99b855274b7e6597a4a2cc43a96a07d9b809a926bb24cc3b7045" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3587,9 +3639,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-from_empty_memory-successful=True-zero_length_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-zero_length_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -3644,6 +3697,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8f4d5e6ee5b082d975f85f87bc6379d5c612be36824ac8b7d05d27ae91f969df" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3725,9 +3779,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-from_empty_memory-successful=True-huge_dest_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-huge_dest_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -3782,6 +3837,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xbe976d766391732191f4aac353ff9db2158d80c82609b5e193ebc971e7513317" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -3863,9 +3919,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-from_empty_memory-successful=True-huge_src_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-huge_src_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -3920,6 +3977,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x302c4c65e53d9229282dd99261d95e7a50456ccc7ca8ed7c9cd68e9e63ab0c90" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -4001,9 +4059,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-from_empty_memory-successful=True-huge_dest_huge_src_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_True-huge_dest_huge_src_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -4058,6 +4117,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdf000b4d30979e7b330fade914b9b798b48af38f094092cbd8536f71ee6ec5fe" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -4139,9 +4199,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-from_empty_memory-successful=False-single_byte_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-single_byte_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -4196,6 +4257,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa9290e74c92787f110bde9ce3ea6cb940f62fb6c694751aa9df8bb392c35b33d" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -4277,9 +4339,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-from_empty_memory-successful=False-single_byte_expansion_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -4334,6 +4397,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x28d56c56403fcf3e2ff0ecfcb729a4ac5373fff2e8d7a4ff994029ea03c15045" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -4415,9 +4479,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-from_empty_memory-successful=False-single_byte_expansion_word_boundary": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -4472,6 +4537,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8949b0c1954643a6dbda343ee4684ffc89c91278b7f4f852690e19a992a43645" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -4553,9 +4619,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-from_empty_memory-successful=False-single_byte_expansion_word_boundary_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-single_byte_expansion_word_boundary_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -4610,6 +4677,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5c30436177886475ab6ecad6d3aed360de293c9366fdf18c7a20e27fadaf7c49" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -4691,9 +4759,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-from_empty_memory-successful=False-multi_word_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-multi_word_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -4748,6 +4817,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x513881a0a519a0b47c414a2d090ebb73958508515ae94e96122122a74520ea58" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -4829,9 +4899,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-from_empty_memory-successful=False-multi_word_expansion_2": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-multi_word_expansion_2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -4886,6 +4957,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x49ff3f5f5707137a10e936eb05a1701cb6717cff6bc408e06f6e6182976a5641" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -4967,9 +5039,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-from_empty_memory-successful=False-zero_length_expansion": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-zero_length_expansion]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -5024,6 +5097,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb17484fb4b99de74717276fe45c67487c4555ac2fae3658828a22d21e4ecdb95" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -5105,9 +5179,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-from_empty_memory-successful=False-huge_dest_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-huge_dest_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -5162,6 +5237,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9d3c88a70291928fba6267b27176e488e7dc0752bf0ee3cf3b7fbc500982a5d8" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -5243,9 +5319,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun-from_empty_memory-successful=False-huge_src_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-huge_src_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -5300,6 +5377,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3f7d4e1d37a3e37699b0546dc95704fdbdafac067261dd990c19269f2c1f3d69" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", @@ -5381,9 +5459,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun-from_empty_memory-successful=False-huge_dest_huge_src_zero_length": { + "tests/cancun/eip5656_mcopy/test_mcopy_memory_expansion.py::test_mcopy_memory_expansion[fork_Cancun-blockchain_test-from_empty_memory-successful_False-huge_dest_huge_src_zero_length]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5656.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -5438,6 +5517,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x40bfc64fe235a5861e53369b46ea6250f71c50da623f257fd100981193fa9e8b" }, + "blocknumber": "1", "transactions": [ { "type": "0x02", diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/dynamic_create2_selfdestruct_collision/dynamic_create2_selfdestruct_collision.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/dynamic_create2_selfdestruct_collision/dynamic_create2_selfdestruct_collision.json new file mode 100644 index 00000000000..e641bb35b38 --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/dynamic_create2_selfdestruct_collision/dynamic_create2_selfdestruct_collision.json @@ -0,0 +1,2885 @@ +{ + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a000af1c150fdc46c91ceab9673564b4c6c3632889f78ba0164540d54a094ffb90a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x00af1c150fdc46c91ceab9673564b4c6c3632889f78ba0164540d54a094ffb90", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xa784b40b4260f0795f602a0b28b4179761877cd8e9fef74a2060f101dfcbf85a" + }, + "blocks": [ + { + "rlp": "0xf902aaf901faa0a784b40b4260f0795f602a0b28b4179761877cd8e9fef74a2060f101dfcbf85aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09619c5101387f773bfe649bee85329241e2634bc153fb5eb67c05041e18024f1a0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a04cdfed25b29a74aac8236aa3bf51a7982d1da79909671b6abb4ae97daed657d5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ca9c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0", + "blockHeader": { + "parentHash": "0xa784b40b4260f0795f602a0b28b4179761877cd8e9fef74a2060f101dfcbf85a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9619c5101387f773bfe649bee85329241e2634bc153fb5eb67c05041e18024f1", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x4cdfed25b29a74aac8236aa3bf51a7982d1da79909671b6abb4ae97daed657d5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ca9c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x315c2e6ed4a68d295d855fc6eaa393814928bd5b2d1b5066fa1ebd6a1204da7d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x315c2e6ed4a68d295d855fc6eaa393814928bd5b2d1b5066fa1ebd6a1204da7d", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x1d", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0e5fd4", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938c15e8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0906f177664ac2454bdf48b99c318874f7e2efe83965d569f52acf7c48d109412a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x906f177664ac2454bdf48b99c318874f7e2efe83965d569f52acf7c48d109412", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x299dc1112135ebff2d54e74c41d74fed4ffb123d5e0de95e6c532336ba81c0d6" + }, + "blocks": [ + { + "rlp": "0xf902aaf901faa0299dc1112135ebff2d54e74c41d74fed4ffb123d5e0de95e6c532336ba81c0d6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00e12b160ed38b99ff5f89f2379c64745335954b3efd5251427f03c32fcbbd0dea0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a05acc524d5020dc0ff4e9b30463c3b6ae079255a02b7fc60910b84c2e04c371f7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304977d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0", + "blockHeader": { + "parentHash": "0x299dc1112135ebff2d54e74c41d74fed4ffb123d5e0de95e6c532336ba81c0d6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0e12b160ed38b99ff5f89f2379c64745335954b3efd5251427f03c32fcbbd0de", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x5acc524d5020dc0ff4e9b30463c3b6ae079255a02b7fc60910b84c2e04c371f7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04977d", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x58e88d551088df7c03ed61b4daee63c334094cb09517591f04d109a3e7080c4d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x58e88d551088df7c03ed61b4daee63c334094cb09517591f04d109a3e7080c4d", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x13", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0dc677", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938e151e", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c4d73a8df73a7bc7d0d2ef825ab83f1071f7ad0dc3270ae35e416fb8fbc9000aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc4d73a8df73a7bc7d0d2ef825ab83f1071f7ad0dc3270ae35e416fb8fbc9000a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xfde35f2356b40ae637f907d0a1a35eb50d6dadefaac70849c741c40bf8906aa9" + }, + "blocks": [ + { + "rlp": "0xf902aaf901faa0fde35f2356b40ae637f907d0a1a35eb50d6dadefaac70849c741c40bf8906aa9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa094af5d75725d09839f05840d99a398d7e51ecb4c6cad1c2beea56083a6729c7fa0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a068d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668305227d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0", + "blockHeader": { + "parentHash": "0xfde35f2356b40ae637f907d0a1a35eb50d6dadefaac70849c741c40bf8906aa9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x94af5d75725d09839f05840d99a398d7e51ecb4c6cad1c2beea56083a6729c7f", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x68d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x05227d", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xd9083b3f516b0ac9bc3803ad7de4d0e578a1efe3d32b0f5639e994c2b61b37a7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd9083b3f516b0ac9bc3803ad7de4d0e578a1efe3d32b0f5639e994c2b61b37a7", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x12", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0f6777", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee99388a71e", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0f039f1f07cae81de1e0b10789964753dac300165082da0419c472c0a2e1655e7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xf039f1f07cae81de1e0b10789964753dac300165082da0419c472c0a2e1655e7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x747a3ed5a78eac75d474158582a991d6f6b03336d26e3f686cc71e2e698d1ace" + }, + "blocks": [ + { + "rlp": "0xf902aaf901faa0747a3ed5a78eac75d474158582a991d6f6b03336d26e3f686cc71e2e698d1acea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03eeed2b8a47f9211d7a20cc9c1b1981167cfa8252c9c9cbd5ac31abbd346239ea0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a00f3ad6e901d0aa2c5fba64e6e68661d44ea738781fd2cf8bb10d00124748067bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ef5e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0", + "blockHeader": { + "parentHash": "0x747a3ed5a78eac75d474158582a991d6f6b03336d26e3f686cc71e2e698d1ace", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3eeed2b8a47f9211d7a20cc9c1b1981167cfa8252c9c9cbd5ac31abbd346239e", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x0f3ad6e901d0aa2c5fba64e6e68661d44ea738781fd2cf8bb10d00124748067b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ef5e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x3138777d679518696052c221d809fe4b8a48b2ca92074a2ddf2075fbfae5d6e2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x3138777d679518696052c221d809fe4b8a48b2ca92074a2ddf2075fbfae5d6e2", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x08", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0ece1a", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938aa654", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0173c5318de7c088a67a945465125cf3d4b972e31509edbb68a3d8c7b2e6225e6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x173c5318de7c088a67a945465125cf3d4b972e31509edbb68a3d8c7b2e6225e6", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xcf8a9487d07b5fbf34aba3d5014ba6600f6427efd398a352eaf48ea1d3f7a24e" + }, + "blocks": [ + { + "rlp": "0xf902aaf901faa0cf8a9487d07b5fbf34aba3d5014ba6600f6427efd398a352eaf48ea1d3f7a24ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0583a45b9f8d6c5742472eb46a4943519b3911eb5e02c4115ca210cebd4b7458ea0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a068d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668305227d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0", + "blockHeader": { + "parentHash": "0xcf8a9487d07b5fbf34aba3d5014ba6600f6427efd398a352eaf48ea1d3f7a24e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x583a45b9f8d6c5742472eb46a4943519b3911eb5e02c4115ca210cebd4b7458e", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x68d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x05227d", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x19f5d6e206d29a546d87d42ebffecd5874123d8679485a80723afd1137a047da" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x19f5d6e206d29a546d87d42ebffecd5874123d8679485a80723afd1137a047da", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x05", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x18", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0f6777", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee99388a71e", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Paris-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0489f5df4544b75cdc1291fa83fde7894db63bb0f85f0a4b71f8c7223aede72b5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x489f5df4544b75cdc1291fa83fde7894db63bb0f85f0a4b71f8c7223aede72b5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x6985ed014b8c0aaa7a632ea4abd293954d94cca6326dcc7f817b32dcbf1416d9" + }, + "blocks": [ + { + "rlp": "0xf902aaf901faa06985ed014b8c0aaa7a632ea4abd293954d94cca6326dcc7f817b32dcbf1416d9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02836155d2a0de635346de3d214b513b8459b721c247570884b0f2a6b88a8104da0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a00f3ad6e901d0aa2c5fba64e6e68661d44ea738781fd2cf8bb10d00124748067bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ef5e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0", + "blockHeader": { + "parentHash": "0x6985ed014b8c0aaa7a632ea4abd293954d94cca6326dcc7f817b32dcbf1416d9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2836155d2a0de635346de3d214b513b8459b721c247570884b0f2a6b88a8104d", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x0f3ad6e901d0aa2c5fba64e6e68661d44ea738781fd2cf8bb10d00124748067b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ef5e", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x88d4dbffee3a56cc2d2e001c5379652bdfb6236972cd25023ab68d28b5ac36e1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x88d4dbffee3a56cc2d2e001c5379652bdfb6236972cd25023ab68d28b5ac36e1", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x05", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0e", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0ece1a", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938aa654", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a000af1c150fdc46c91ceab9673564b4c6c3632889f78ba0164540d54a094ffb90a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x00af1c150fdc46c91ceab9673564b4c6c3632889f78ba0164540d54a094ffb90", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x6b6ca33c71ab5619e034a336f9846ba3dc7d13a88f8dd5a010806976d7fe7b0b" + }, + "blocks": [ + { + "rlp": "0xf902ccf9021ba06b6ca33c71ab5619e034a336f9846ba3dc7d13a88f8dd5a010806976d7fe7b0ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09619c5101387f773bfe649bee85329241e2634bc153fb5eb67c05041e18024f1a0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a04cdfed25b29a74aac8236aa3bf51a7982d1da79909671b6abb4ae97daed657d5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ca9c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x6b6ca33c71ab5619e034a336f9846ba3dc7d13a88f8dd5a010806976d7fe7b0b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9619c5101387f773bfe649bee85329241e2634bc153fb5eb67c05041e18024f1", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x4cdfed25b29a74aac8236aa3bf51a7982d1da79909671b6abb4ae97daed657d5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ca9c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x162cb53d5a944d50e7c81bf3b9100aeec2401707c1b6187cec83a0ad96b94cae" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x162cb53d5a944d50e7c81bf3b9100aeec2401707c1b6187cec83a0ad96b94cae", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x1d", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0e5fd4", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938c15e8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0906f177664ac2454bdf48b99c318874f7e2efe83965d569f52acf7c48d109412a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x906f177664ac2454bdf48b99c318874f7e2efe83965d569f52acf7c48d109412", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x57e32c77e6037121e49aeb3b0edf0d5b6fbb91a782dd9bc180c632711954fa75" + }, + "blocks": [ + { + "rlp": "0xf902ccf9021ba057e32c77e6037121e49aeb3b0edf0d5b6fbb91a782dd9bc180c632711954fa75a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa058e5966a6437e5cebec8533eaae49a490c2be21f7f50538b5d6615956a3d6629a0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a062a77e8fae0ab927412cf662fc5557baeb78e32e74a06ce2a71cf5a3b5e7cb29b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830497838203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x57e32c77e6037121e49aeb3b0edf0d5b6fbb91a782dd9bc180c632711954fa75", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x58e5966a6437e5cebec8533eaae49a490c2be21f7f50538b5d6615956a3d6629", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x62a77e8fae0ab927412cf662fc5557baeb78e32e74a06ce2a71cf5a3b5e7cb29", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x049783", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x8bc0c1927df971592f94e566d7ac0feb86220c1a03938b6bc7bf54b1125806e8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x8bc0c1927df971592f94e566d7ac0feb86220c1a03938b6bc7bf54b1125806e8", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x13", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0dc689", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938e14e2", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c4d73a8df73a7bc7d0d2ef825ab83f1071f7ad0dc3270ae35e416fb8fbc9000aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc4d73a8df73a7bc7d0d2ef825ab83f1071f7ad0dc3270ae35e416fb8fbc9000a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x8f27df7001d2be8d93b699c58afe87b7da92387b8d13846769e5be1b1e18a36a" + }, + "blocks": [ + { + "rlp": "0xf902ccf9021ba08f27df7001d2be8d93b699c58afe87b7da92387b8d13846769e5be1b1e18a36aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa094af5d75725d09839f05840d99a398d7e51ecb4c6cad1c2beea56083a6729c7fa0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a068d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668305227d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x8f27df7001d2be8d93b699c58afe87b7da92387b8d13846769e5be1b1e18a36a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x94af5d75725d09839f05840d99a398d7e51ecb4c6cad1c2beea56083a6729c7f", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x68d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x05227d", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x23171f9d8486c9fd1e161f3e4484dba83d232563b6a59cdb14ceb22b06d17a58" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x23171f9d8486c9fd1e161f3e4484dba83d232563b6a59cdb14ceb22b06d17a58", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x12", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0f6777", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee99388a71e", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0f039f1f07cae81de1e0b10789964753dac300165082da0419c472c0a2e1655e7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xf039f1f07cae81de1e0b10789964753dac300165082da0419c472c0a2e1655e7", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x4b7c516da24fa27ed8239bd358bad663c9f7639c058e9fb47b09473666488644" + }, + "blocks": [ + { + "rlp": "0xf902ccf9021ba04b7c516da24fa27ed8239bd358bad663c9f7639c058e9fb47b09473666488644a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b06d6fd9e8a22e7e9c75fba57896450a4a171529dfa7fcd5350d9745963ddb3ca0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a0257871d3ba923807c91c324ff918db778d0ba0e1806afc130b0d46b7894a82efb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ef648203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x4b7c516da24fa27ed8239bd358bad663c9f7639c058e9fb47b09473666488644", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb06d6fd9e8a22e7e9c75fba57896450a4a171529dfa7fcd5350d9745963ddb3c", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x257871d3ba923807c91c324ff918db778d0ba0e1806afc130b0d46b7894a82ef", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ef64", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x85b062352b8c08e09a821e6ee4b764b46f9a6e4a6b86b42e890e2892832c5bf0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x85b062352b8c08e09a821e6ee4b764b46f9a6e4a6b86b42e890e2892832c5bf0", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x08", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0ece2c", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938aa618", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0173c5318de7c088a67a945465125cf3d4b972e31509edbb68a3d8c7b2e6225e6a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x173c5318de7c088a67a945465125cf3d4b972e31509edbb68a3d8c7b2e6225e6", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xa27ceb9a3328f738fc6fd37982b31aa3072106a07a01f25583935c479175893c" + }, + "blocks": [ + { + "rlp": "0xf902ccf9021ba0a27ceb9a3328f738fc6fd37982b31aa3072106a07a01f25583935c479175893ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0583a45b9f8d6c5742472eb46a4943519b3911eb5e02c4115ca210cebd4b7458ea0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a068d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668305227d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0xa27ceb9a3328f738fc6fd37982b31aa3072106a07a01f25583935c479175893c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x583a45b9f8d6c5742472eb46a4943519b3911eb5e02c4115ca210cebd4b7458e", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x68d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x05227d", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x39288b18af1947e9602e287b858f5e4ad1415fb9e6a04b7e3409d76427c3b8db" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x39288b18af1947e9602e287b858f5e4ad1415fb9e6a04b7e3409d76427c3b8db", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x05", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x18", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0f6777", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee99388a71e", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Shanghai-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0489f5df4544b75cdc1291fa83fde7894db63bb0f85f0a4b71f8c7223aede72b5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x489f5df4544b75cdc1291fa83fde7894db63bb0f85f0a4b71f8c7223aede72b5", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xe97ae77eef9dad540d83f20411f6c99ae05a2cb8b90439b53076565dc91bf9eb" + }, + "blocks": [ + { + "rlp": "0xf902ccf9021ba0e97ae77eef9dad540d83f20411f6c99ae05a2cb8b90439b53076565dc91bf9eba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c0ccfa61706b07635963176b260215db54d537b547d179aca1ba820c14fc3be4a0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a0257871d3ba923807c91c324ff918db778d0ba0e1806afc130b0d46b7894a82efb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ef648203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0xe97ae77eef9dad540d83f20411f6c99ae05a2cb8b90439b53076565dc91bf9eb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc0ccfa61706b07635963176b260215db54d537b547d179aca1ba820c14fc3be4", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x257871d3ba923807c91c324ff918db778d0ba0e1806afc130b0d46b7894a82ef", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ef64", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x6efa25374b8b42f1458aab7e96a80346ea273b0ab86a8d97eac66e4b5ebe8985" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6efa25374b8b42f1458aab7e96a80346ea273b0ab86a8d97eac66e4b5ebe8985", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x05", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0e", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0ece2c", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938aa618", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0867262020f3da412c1dc9b6b231201d84b3b18d67929e28af8618eb51f759875a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x867262020f3da412c1dc9b6b231201d84b3b18d67929e28af8618eb51f759875", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x0f18de6ef2a10544dc4bf52e9dc2f443b5d859b7645bd8c7e8f55fd1722d6a30" + }, + "blocks": [ + { + "rlp": "0xf902eff9023ea00f18de6ef2a10544dc4bf52e9dc2f443b5d859b7645bd8c7e8f55fd1722d6a30a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b8472053f69c072a1614a0855ea6e012c240e5ffa4adde111c5f04e9330c6b4fa0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a04cdfed25b29a74aac8236aa3bf51a7982d1da79909671b6abb4ae97daed657d5b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ca9c8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x0f18de6ef2a10544dc4bf52e9dc2f443b5d859b7645bd8c7e8f55fd1722d6a30", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb8472053f69c072a1614a0855ea6e012c240e5ffa4adde111c5f04e9330c6b4f", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x4cdfed25b29a74aac8236aa3bf51a7982d1da79909671b6abb4ae97daed657d5", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ca9c", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x21a5063b6a4a07162dda16b452c732f5d3d03f184d17bad62ad15609d1cf021c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x21a5063b6a4a07162dda16b452c732f5d3d03f184d17bad62ad15609d1cf021c", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x1d", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0e5fd4", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938c15e8", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a055b1ac880da8ec42f2641fb0ee31375abc8a2aabb76bbfcd6d345c3671461ccba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x55b1ac880da8ec42f2641fb0ee31375abc8a2aabb76bbfcd6d345c3671461ccb", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfe6bd7cfd4fbb25bf1443fe2c59db5b589661a2768bac4ec8ba882f9e9d3117f" + }, + "blocks": [ + { + "rlp": "0xf902eff9023ea0fe6bd7cfd4fbb25bf1443fe2c59db5b589661a2768bac4ec8ba882f9e9d3117fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa046a71cbaf8be02a72792781595e83d44529017029163c0d7e231f7134664a7a6a0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a062a77e8fae0ab927412cf662fc5557baeb78e32e74a06ce2a71cf5a3b5e7cb29b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830497838203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0xfe6bd7cfd4fbb25bf1443fe2c59db5b589661a2768bac4ec8ba882f9e9d3117f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x46a71cbaf8be02a72792781595e83d44529017029163c0d7e231f7134664a7a6", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x62a77e8fae0ab927412cf662fc5557baeb78e32e74a06ce2a71cf5a3b5e7cb29", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x049783", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x99908d990835de4158131e6928d85c1b5d8168eaee4d347bc52216a09d19df0e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x99908d990835de4158131e6928d85c1b5d8168eaee4d347bc52216a09d19df0e", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x13", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0dc689", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938e14e2", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07ee2f389b148a63322851912b52285cfde021cb1ad920e1bf8ba8d25255f9ab4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7ee2f389b148a63322851912b52285cfde021cb1ad920e1bf8ba8d25255f9ab4", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x91323b5b72b9c373e632641d1d39308fb186bbb8145361b0b1b9a9d0bb817abd" + }, + "blocks": [ + { + "rlp": "0xf902eff9023ea091323b5b72b9c373e632641d1d39308fb186bbb8145361b0b1b9a9d0bb817abda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05fede87a5b0088a47491f957653001cb6f4dc4efc028b472175e50bc9033c261a0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a068d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668305227d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x91323b5b72b9c373e632641d1d39308fb186bbb8145361b0b1b9a9d0bb817abd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5fede87a5b0088a47491f957653001cb6f4dc4efc028b472175e50bc9033c261", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x68d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x05227d", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9330fd9aef90615f09474daf062a6abb1542fb6e6f49ac46dc4bf53729a0158e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9330fd9aef90615f09474daf062a6abb1542fb6e6f49ac46dc4bf53729a0158e", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x12", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0f6777", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee99388a71e", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_True-call_create2_contract_at_the_end_False-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ad7dd568f8eb56b36a709ca9464f2f4cd281422622eda4b562d5a3d849413cb8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xad7dd568f8eb56b36a709ca9464f2f4cd281422622eda4b562d5a3d849413cb8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9580a025a66bb02855de650e2ad9498861cef82ba456fb7895505da19f2b7ec6" + }, + "blocks": [ + { + "rlp": "0xf902eff9023ea09580a025a66bb02855de650e2ad9498861cef82ba456fb7895505da19f2b7ec6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d329ea0c2d95c242914304efdf08798e08eacfa9e9d6f82ba8ae988c5c29037da0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a0257871d3ba923807c91c324ff918db778d0ba0e1806afc130b0d46b7894a82efb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ef648203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x9580a025a66bb02855de650e2ad9498861cef82ba456fb7895505da19f2b7ec6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd329ea0c2d95c242914304efdf08798e08eacfa9e9d6f82ba8ae988c5c29037d", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x257871d3ba923807c91c324ff918db778d0ba0e1806afc130b0d46b7894a82ef", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ef64", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x804ea75d5c24f4c9d79d41552b5e9d24f3d52e88507a960886d2454d6102d49b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x804ea75d5c24f4c9d79d41552b5e9d24f3d52e88507a960886d2454d6102d49b", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x08", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b730000000000000000000000000000000000000000620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0ece2c", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938aa618", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09905d48bb7faadff630ee6ad46385a397deb1923f9078c8e75b58c116318dd9ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9905d48bb7faadff630ee6ad46385a397deb1923f9078c8e75b58c116318dd9c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9206b67965bf5e1dd2535fd07eaa2729d2cf255e679d559d077c1f8d14489966" + }, + "blocks": [ + { + "rlp": "0xf902eff9023ea09206b67965bf5e1dd2535fd07eaa2729d2cf255e679d559d077c1f8d14489966a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f55420958ae3104db3b605d3b93082b24b4cbd8153a92ce13f2e03fb7e5e4f41a0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a068d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668305227d8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x9206b67965bf5e1dd2535fd07eaa2729d2cf255e679d559d077c1f8d14489966", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf55420958ae3104db3b605d3b93082b24b4cbd8153a92ce13f2e03fb7e5e4f41", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x68d6687936c0d86a96189674ab086aaad18292207a55cf52c4bfb9ff07e780c0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x05227d", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x624db66d4c36268570f77ce53b15dade8eb82eabfeb9d68e466992d96a336e8d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x624db66d4c36268570f77ce53b15dade8eb82eabfeb9d68e466992d96a336e8d", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x0d", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x05", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x18", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x0a", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0f6777", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee99388a71e", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision[fork_Cancun-blockchain_test-call_create2_contract_in_between_False-call_create2_contract_at_the_end_True-create2_dest_already_in_state_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a82f906ae0b8133415d3260ca310fb33e3acaf3580cbbe44625a36beb81d2178a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa82f906ae0b8133415d3260ca310fb33e3acaf3580cbbe44625a36beb81d2178", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x2cfad0b4917afb20d1739a67241c2a8c9c0b9c96cc14af7f2a060b27765af5e7" + }, + "blocks": [ + { + "rlp": "0xf902eff9023ea02cfad0b4917afb20d1739a67241c2a8c9c0b9c96cc14af7f2a060b27765af5e7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0061ce5c79d6f65642536bd742ad127e143e1027a1e4a0b4981888ef458505905a0ad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8a0257871d3ba923807c91c324ff918db778d0ba0e1806afc130b0d46b7894a82efb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff1122334455668304ef648203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f8aaf8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41c0c0", + "blockHeader": { + "parentHash": "0x2cfad0b4917afb20d1739a67241c2a8c9c0b9c96cc14af7f2a060b27765af5e7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x061ce5c79d6f65642536bd742ad127e143e1027a1e4a0b4981888ef458505905", + "transactionsTrie": "0xad3c382082ac5d986ba7fb3263906160010aa1c4a6607e4086b986eee0f792a8", + "receiptTrie": "0x257871d3ba923807c91c324ff918db778d0ba0e1806afc130b0d46b7894a82ef", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x04ef64", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x661c2e84ced2a8f58998d61c29c7ec25924e50c90058d8851f0fcad50ff9cf36" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x661c2e84ced2a8f58998d61c29c7ec25924e50c90058d8851f0fcad50ff9cf36", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000000": { + "nonce": "0x00", + "balance": "0x05", + "code": "0x", + "storage": {} + }, + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0e", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560006000600060006005730000000000000000000000000000000000000000620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600455", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0ece2c", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee9938aa618", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/dynamic_create2_selfdestruct_collision/dynamic_create2_selfdestruct_collision_multi_tx.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/dynamic_create2_selfdestruct_collision/dynamic_create2_selfdestruct_collision_multi_tx.json new file mode 100644 index 00000000000..beeed8efd77 --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/dynamic_create2_selfdestruct_collision/dynamic_create2_selfdestruct_collision_multi_tx.json @@ -0,0 +1,1549 @@ +{ + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c0d068432ec03c7365136400eada36de819bdcb8f9d4fd6ce145f0f62d1d2044a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc0d068432ec03c7365136400eada36de819bdcb8f9d4fd6ce145f0f62d1d2044", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x349a5b973f04e8488f7566720a6d686afce8b9eee8376ae3b0881a70f19e05de" + }, + "blocks": [ + { + "rlp": "0xf90354f901f9a0349a5b973f04e8488f7566720a6d686afce8b9eee8376ae3b0881a70f19e05dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa044137d5c9bbe77b5119c04a76c1261b72f33168f4839fe7affe129dec06f68eda0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a099d46b9a7a867e8176d69b27c3106230e00e29dc341ec3ca99dc5ba07e54911eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083055e590c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0", + "blockHeader": { + "parentHash": "0x349a5b973f04e8488f7566720a6d686afce8b9eee8376ae3b0881a70f19e05de", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x44137d5c9bbe77b5119c04a76c1261b72f33168f4839fe7affe129dec06f68ed", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x99d46b9a7a867e8176d69b27c3106230e00e29dc341ec3ca99dc5ba07e54911e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x055e59", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xd98132b9295eb217d72b33f7946aaff6513add9d90beaf9640669d903f797a5d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd98132b9295eb217d72b33f7946aaff6513add9d90beaf9640669d903f797a5d", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x60006004541460845801576000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1600160055560395801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x13", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x60006004541460845801576000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1600160055560395801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x101b0b", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee993865086", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b2576a0210260701a07578b5e0d2ab0b13c6199a40863051694adfe0d6b4c2c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb2576a0210260701a07578b5e0d2ab0b13c6199a40863051694adfe0d6b4c2c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xf653c675e476761523a96265e7551ae3919713d9ecfc344e22dbde19a9cdebc2" + }, + "blocks": [ + { + "rlp": "0xf90354f901f9a0f653c675e476761523a96265e7551ae3919713d9ecfc344e22dbde19a9cdebc2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04e06c655667e26560a81f67a30bc3ae0953abe290cac4eff277ba2e61e9404a7a0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a091423d6acfbb1007f0bf456e622c2ce283087e1645b3e2fb63a8941a715d3938b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008304dde20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0", + "blockHeader": { + "parentHash": "0xf653c675e476761523a96265e7551ae3919713d9ecfc344e22dbde19a9cdebc2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4e06c655667e26560a81f67a30bc3ae0953abe290cac4eff277ba2e61e9404a7", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x91423d6acfbb1007f0bf456e622c2ce283087e1645b3e2fb63a8941a715d3938", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x04dde2", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xf3f6bcd3bf74061a56c1325eccdd1d4499f1da54b9ed8be486628c783b9dcde6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf3f6bcd3bf74061a56c1325eccdd1d4499f1da54b9ed8be486628c783b9dcde6", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x6000600454146060580157366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555605d5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f160016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x1a", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x6000600454146060580157366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555605d5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f160016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x03": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0e99a6", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee9938b552c", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Paris-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0909d959e71bf48f993c777b630ccc8031f21377f3763b6fad1d0a33f60c578f1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x909d959e71bf48f993c777b630ccc8031f21377f3763b6fad1d0a33f60c578f1", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xf2e3d7b12220b0c648f61e91271616cc10ab3672ed25a0d8fd9506ab4e8d9300" + }, + "blocks": [ + { + "rlp": "0xf90354f901f9a0f2e3d7b12220b0c648f61e91271616cc10ab3672ed25a0d8fd9506ab4e8d9300a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fae7655d467068909c211f93f333453135a3e352beb162670affff863667fb1ea0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a097eed0d49f0df6d4115e9477ea0284b37371c9287ceb9a856edb7bab47be9eabb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008305a2a90c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0", + "blockHeader": { + "parentHash": "0xf2e3d7b12220b0c648f61e91271616cc10ab3672ed25a0d8fd9506ab4e8d9300", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfae7655d467068909c211f93f333453135a3e352beb162670affff863667fb1e", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x97eed0d49f0df6d4115e9477ea0284b37371c9287ceb9a856edb7bab47be9eab", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x05a2a9", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xc3a2410caaa9ec16e67d6519249075c8eba0a87e6d5f5f168ef28faead68ad71" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xc3a2410caaa9ec16e67d6519249075c8eba0a87e6d5f5f168ef28faead68ad71", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x60006004541460315801576000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555608c5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f160005160035560016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x08", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x60006004541460315801576000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555608c5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f160005160035560016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x10e7fb", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee99383a566", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c0d068432ec03c7365136400eada36de819bdcb8f9d4fd6ce145f0f62d1d2044a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc0d068432ec03c7365136400eada36de819bdcb8f9d4fd6ce145f0f62d1d2044", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xcf30f8c75a6be3e8eb612528c82b17b0544058df9cd69463ef975b0ed63a4330" + }, + "blocks": [ + { + "rlp": "0xf90376f9021aa0cf30f8c75a6be3e8eb612528c82b17b0544058df9cd69463ef975b0ed63a4330a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0861c16f253b313796905cf5b5ece767d3306f5a87c4393108938e698063b11b5a0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a060849992ea1d63c48aac1b16d673fbefe2bbff6d1a9f7174b857d7a87153bce1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083055e5f0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0c0", + "blockHeader": { + "parentHash": "0xcf30f8c75a6be3e8eb612528c82b17b0544058df9cd69463ef975b0ed63a4330", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x861c16f253b313796905cf5b5ece767d3306f5a87c4393108938e698063b11b5", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x60849992ea1d63c48aac1b16d673fbefe2bbff6d1a9f7174b857d7a87153bce1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x055e5f", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x25bbc04e5f1a1bfea4c73ceebeca54fe3a9930fb7f6feec8f4462f4ab3b5b144" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x25bbc04e5f1a1bfea4c73ceebeca54fe3a9930fb7f6feec8f4462f4ab3b5b144", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x60006004541460845801576000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1600160055560395801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x13", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x60006004541460845801576000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1600160055560395801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x101b1d", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee99386504a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b2576a0210260701a07578b5e0d2ab0b13c6199a40863051694adfe0d6b4c2c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb2576a0210260701a07578b5e0d2ab0b13c6199a40863051694adfe0d6b4c2c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x2d906620f845278566f3deaf7493b6b27f2c191f4d4aa5fdb8319026b14935fb" + }, + "blocks": [ + { + "rlp": "0xf90376f9021aa02d906620f845278566f3deaf7493b6b27f2c191f4d4aa5fdb8319026b14935fba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0937f90c47bb98d498338c805f28c2465c2939a62225683c4c5941070cfc19856a0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a00b726fa19fc1a15bea2fcd446cf49b332789726a3656cce939c18c6a8d104851b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008304ddee0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0c0", + "blockHeader": { + "parentHash": "0x2d906620f845278566f3deaf7493b6b27f2c191f4d4aa5fdb8319026b14935fb", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x937f90c47bb98d498338c805f28c2465c2939a62225683c4c5941070cfc19856", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x0b726fa19fc1a15bea2fcd446cf49b332789726a3656cce939c18c6a8d104851", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x04ddee", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x2c2410c799ebb75cf36073d1f8269f7cf3920bdbbf3a71bf719f75c6bc79d9a9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x2c2410c799ebb75cf36073d1f8269f7cf3920bdbbf3a71bf719f75c6bc79d9a9", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x6000600454146060580157366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555605d5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f160016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x1a", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x6000600454146060580157366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555605d5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f160016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x03": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0e99ca", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee9938b54b4", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Shanghai-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0909d959e71bf48f993c777b630ccc8031f21377f3763b6fad1d0a33f60c578f1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x909d959e71bf48f993c777b630ccc8031f21377f3763b6fad1d0a33f60c578f1", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xe483abc15ba90d982a70183d226e37b8541f08a57e2b564e76cdd6518a5029bd" + }, + "blocks": [ + { + "rlp": "0xf90376f9021aa0e483abc15ba90d982a70183d226e37b8541f08a57e2b564e76cdd6518a5029bda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00669a37bcfa83938d0ffc04c4735c7d058359e9bdb183cdb6e2a1cee66d08da9a0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a03116afecf1f646fa98fb5f300fe79b32f79abace40e1352285997bacc42aedb6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008305a2af0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0c0", + "blockHeader": { + "parentHash": "0xe483abc15ba90d982a70183d226e37b8541f08a57e2b564e76cdd6518a5029bd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0669a37bcfa83938d0ffc04c4735c7d058359e9bdb183cdb6e2a1cee66d08da9", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x3116afecf1f646fa98fb5f300fe79b32f79abace40e1352285997bacc42aedb6", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x05a2af", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xbef40ea48bea398e000f23d0391b58ec84a2588301b9b31100a3f54551fdadc8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xbef40ea48bea398e000f23d0391b58ec84a2588301b9b31100a3f54551fdadc8", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x60006004541460315801576000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555608c5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f160005160035560016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x08", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x60006004541460315801576000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555608c5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f160005160035560016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x10e80d", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee99383a52a", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_False-recreate_on_first_tx_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b4f49bdcd7ad248eb05fcb26bc7927b7e75911e8b9bc2ce555bcc51f8ff56a2fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb4f49bdcd7ad248eb05fcb26bc7927b7e75911e8b9bc2ce555bcc51f8ff56a2f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5165c612b0923d3647071818bb8244592a1c806fb737247e466b4d96eaa8d708" + }, + "blocks": [ + { + "rlp": "0xf90399f9023da05165c612b0923d3647071818bb8244592a1c806fb737247e466b4d96eaa8d708a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09422d2af9781563e5920fbc043b2203bb2ff466dd960e2f01297ec42ccf7f0b0a0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a060849992ea1d63c48aac1b16d673fbefe2bbff6d1a9f7174b857d7a87153bce1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083055e5f0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0c0", + "blockHeader": { + "parentHash": "0x5165c612b0923d3647071818bb8244592a1c806fb737247e466b4d96eaa8d708", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9422d2af9781563e5920fbc043b2203bb2ff466dd960e2f01297ec42ccf7f0b0", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x60849992ea1d63c48aac1b16d673fbefe2bbff6d1a9f7174b857d7a87153bce1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x055e5f", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa6ab2a4d4ac62fea261e220ab97cba107135c7ff23a4a8a79a9049ba49066831" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa6ab2a4d4ac62fea261e220ab97cba107135c7ff23a4a8a79a9049ba49066831", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x60006004541460845801576000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1600160055560395801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x13", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x60006004541460845801576000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1600160055560395801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f160005160025560016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x101b1d", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee99386504a", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x7300000000000000000000000000000000000003e8ff", + "storage": { + "0x01": "0x01" + } + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0aa9dfb42b997ffcdf4b2a95948f0e4499709e2eea753014d5949d334ea50e24ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaa9dfb42b997ffcdf4b2a95948f0e4499709e2eea753014d5949d334ea50e24e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc9b9bd029ee086a0b069724e52fca5441f3895a848fb11355720c7893c570bfa" + }, + "blocks": [ + { + "rlp": "0xf90399f9023da0c9b9bd029ee086a0b069724e52fca5441f3895a848fb11355720c7893c570bfaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa038847ee33ae8f3aba60f6e3566628d0ed326c4820822452efb9c6f3589f55823a0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a00b726fa19fc1a15bea2fcd446cf49b332789726a3656cce939c18c6a8d104851b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008304ddee0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0c0", + "blockHeader": { + "parentHash": "0xc9b9bd029ee086a0b069724e52fca5441f3895a848fb11355720c7893c570bfa", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x38847ee33ae8f3aba60f6e3566628d0ed326c4820822452efb9c6f3589f55823", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x0b726fa19fc1a15bea2fcd446cf49b332789726a3656cce939c18c6a8d104851", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x04ddee", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcd4c47ba70a5f927abff995a08bd2e806f6dd1c7209311e69d32030f1693f07e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xcd4c47ba70a5f927abff995a08bd2e806f6dd1c7209311e69d32030f1693f07e", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x6000600454146060580157366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555605d5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f160016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x1a", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x6000600454146060580157366000600037602060003660006007730000000000000000000000000000000000000601620186a0f16000516003556000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555605d5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f160016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x03": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0e99ca", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee9938b54b4", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision.py::test_dynamic_create2_selfdestruct_collision_multi_tx[fork_Cancun-blockchain_test-selfdestruct_on_first_tx_True-recreate_on_first_tx_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0da3244692a61ca27907e3f23a4d5a8807f925639336d0f38673ae43690e61d4fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xda3244692a61ca27907e3f23a4d5a8807f925639336d0f38673ae43690e61d4f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd844bda6d3290dafd7c8ddd89203ea77a29db0f270ccf93ad3c0e43622936c3c" + }, + "blocks": [ + { + "rlp": "0xf90399f9023da0d844bda6d3290dafd7c8ddd89203ea77a29db0f270ccf93ad3c0e43622936c3ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03516c8e7381440ae57fa6cc6cce8f19b4740104e89226ff115fb341b0910e4dfa0b94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8a03116afecf1f646fa98fb5f300fe79b32f79abace40e1352285997bacc42aedb6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008305a2af0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90154f8a8800a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0cd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8a0115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41f8a8010a834c4b4094000000000000000000000000000000000000060080b8476001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff1ba0dfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08a079083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8c0c0", + "blockHeader": { + "parentHash": "0xd844bda6d3290dafd7c8ddd89203ea77a29db0f270ccf93ad3c0e43622936c3c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3516c8e7381440ae57fa6cc6cce8f19b4740104e89226ff115fb341b0910e4df", + "transactionsTrie": "0xb94a196687de42cb8dbe92ee8b3aad828f783fbc00a647f25c9958a1b4d117e8", + "receiptTrie": "0x3116afecf1f646fa98fb5f300fe79b32f79abace40e1352285997bacc42aedb6", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x05a2af", + "timestamp": "0x0c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x26ab32e35329496418704d96b4fef021ccf6b27e871df273176522e3a52a8b19" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xcd94b6f466a1c91e7aa7319743ed7534e7809f7cac05b44d41f0b3ce367706f8", + "s": "0x115dc44dc84b36c3885716a772818e8b3c3c2ea1c04f39aa306c600cfe404a41", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + }, + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x01", + "gasPrice": "0x0a", + "gasLimit": "0x4c4b40", + "to": "0x0000000000000000000000000000000000000600", + "value": "0x00", + "data": "0x6001600155600060006000600060007300000000000000000000000000000000000005125af161001660008160318239f37300000000000000000000000000000000000003e8ff", + "v": "0x1b", + "r": "0xdfa72b1dc71eafe031cc6763fad2df9c2d65010dcd027bfd08bc25b1bc120f08", + "s": "0x79083b66a87bb3cf3ab5ca7fc5979d85b2fe80ebd0f320486c8cf1dd633c2bb8", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x26ab32e35329496418704d96b4fef021ccf6b27e871df273176522e3a52a8b19", + "pre": { + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": {} + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e100", + "code": "0x60006004541460315801576000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555608c5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f160005160035560016004555b", + "storage": { + "0x02": "0xff", + "0x03": "0xff" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x08", + "code": "0x", + "storage": {} + }, + "0x0000000000000000000000000000000000000512": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x6001600155", + "storage": { + "0x01": "0x01" + } + }, + "0x0000000000000000000000000000000000000600": { + "nonce": "0x00", + "balance": "0x05f5e0e6", + "code": "0x60006004541460315801576000600060006000600b73b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f16001600555608c5801565b5b366000600037602060003660006003730000000000000000000000000000000000000601620186a0f16000516002556000600060006000600573b7dcf81fd9a41a6b4c61278048dbc99b01765806620186a0f1366000600037602060003660006007730000000000000000000000000000000000000601620186a0f160005160035560016004555b", + "storage": { + "0x02": "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806", + "0x04": "0x01", + "0x05": "0x01" + } + }, + "0x0000000000000000000000000000000000000601": { + "nonce": "0x02", + "balance": "0x07", + "code": "0x366000600037600136600047f560005260206000f3", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x0c": "0x0c" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x10e80d", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x02", + "balance": "0x6124fee99383a52a", + "code": "0x", + "storage": {} + }, + "0xb7dcf81fd9a41a6b4c61278048dbc99b01765806": { + "nonce": "0x00", + "balance": "0x0b", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/reentrancy_selfdestruct_revert/reentrancy_selfdestruct_revert.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/reentrancy_selfdestruct_revert/reentrancy_selfdestruct_revert.json new file mode 100644 index 00000000000..8336a566acf --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/reentrancy_selfdestruct_revert/reentrancy_selfdestruct_revert.json @@ -0,0 +1,3980 @@ +{ + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a046f49d5e64d86792d511e41df23cb6feb8e0574a8244c23446f869ba172dc2f2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x46f49d5e64d86792d511e41df23cb6feb8e0574a8244c23446f869ba172dc2f2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xbb15fbb2820dc7eabda2d117c9d3851d1f01d6402e137ae52cf2a872c47d11a3" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa0bb15fbb2820dc7eabda2d117c9d3851d1f01d6402e137ae52cf2a872c47d11a3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ccb82768fb01f42f158e0735788484d84630aeccfef9d72028fba43971c4b3aba0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0xbb15fbb2820dc7eabda2d117c9d3851d1f01d6402e137ae52cf2a872c47d11a3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xccb82768fb01f42f158e0735788484d84630aeccfef9d72028fba43971c4b3ab", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x3b82510458005395080bb4fbb546332543b0dd4c372946b6e702a2d6d53ca241" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x3b82510458005395080bb4fbb546332543b0dd4c372946b6e702a2d6d53ca241", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03d4b2b6d3cec35bb4b9d1da5c166a88d237dc5591f83632c71da7db06d2d3845a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3d4b2b6d3cec35bb4b9d1da5c166a88d237dc5591f83632c71da7db06d2d3845", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xc1b8175a15f3ca861dfba075d5e079814d03a7cd832cb4e8cbe106d22b2089c1" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa0c1b8175a15f3ca861dfba075d5e079814d03a7cd832cb4e8cbe106d22b2089c1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b3884183528c49f388d9ef14920ea125c2309605d455b396c84d8a44ad895acaa0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0xc1b8175a15f3ca861dfba075d5e079814d03a7cd832cb4e8cbe106d22b2089c1", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb3884183528c49f388d9ef14920ea125c2309605d455b396c84d8a44ad895aca", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x1bdac273d11fd9044c1f188a49106db69f07c66ba71d470947cf6130d288940f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x1bdac273d11fd9044c1f188a49106db69f07c66ba71d470947cf6130d288940f", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c3711b4389dc4767786349c356c078c567a4b4fd7d9affc173328451b4f91641a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc3711b4389dc4767786349c356c078c567a4b4fd7d9affc173328451b4f91641", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x4c453c62a4fd7eeeff7a5a777fc7970a48a8da51f7a74efaafcecef4e3e8376e" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa04c453c62a4fd7eeeff7a5a777fc7970a48a8da51f7a74efaafcecef4e3e8376ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05aeabce9e84c80a26ccd5fc8640231a918a4daa521d1f7b09f1ae45c83c209b2a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca03911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c148203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0x4c453c62a4fd7eeeff7a5a777fc7970a48a8da51f7a74efaafcecef4e3e8376e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5aeabce9e84c80a26ccd5fc8640231a918a4daa521d1f7b09f1ae45c83c209b2", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x3911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c14", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x1c1ba06315fd595862fed63fe273a1cb02b035b3eb0ebf1eac2bffff755c05b3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x1c1ba06315fd595862fed63fe273a1cb02b035b3eb0ebf1eac2bffff755c05b3", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b43c", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa738", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0cdde0da05f6b2b6ca6d2e4db31e8330ac42a91e2d2b20c62d68847e3bff5691ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xcdde0da05f6b2b6ca6d2e4db31e8330ac42a91e2d2b20c62d68847e3bff5691c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xbaf553747eb2059a8da611c7b621c70f103e6738f76fbae2e0a36b73271c23e1" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa0baf553747eb2059a8da611c7b621c70f103e6738f76fbae2e0a36b73271c23e1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa062f0b13b24b9143a2baf7264f43bea830cf4e5daa27e873cbedaba1c5df1b724a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0xbaf553747eb2059a8da611c7b621c70f103e6738f76fbae2e0a36b73271c23e1", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x62f0b13b24b9143a2baf7264f43bea830cf4e5daa27e873cbedaba1c5df1b724", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xe5c15c786f71eee606d7845c992693e6d169f8d2430b8895fdec9bb3740be4b7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xe5c15c786f71eee606d7845c992693e6d169f8d2430b8895fdec9bb3740be4b7", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0aada87b0cbfa929c22f9463a2a5bfd4236af75f4b72eaae9fb1bee7dd8c3b97aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaada87b0cbfa929c22f9463a2a5bfd4236af75f4b72eaae9fb1bee7dd8c3b97a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xb26e8e73eb92500ff434280eaab5641fd8e8b0e3ee2bca4713a53462447c1f3a" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa0b26e8e73eb92500ff434280eaab5641fd8e8b0e3ee2bca4713a53462447c1f3aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0530f07050074b60959c2e810d9596f00afbf270a9d3ea9071d32e976117e0297a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0xb26e8e73eb92500ff434280eaab5641fd8e8b0e3ee2bca4713a53462447c1f3a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x530f07050074b60959c2e810d9596f00afbf270a9d3ea9071d32e976117e0297", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x53db1a28d1e30082ba36a3adf4b65b80e8303978c668121f9495e4b4784e09af" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x53db1a28d1e30082ba36a3adf4b65b80e8303978c668121f9495e4b4784e09af", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a069ba75030c949b2d236de77bf8e2b6a9de99924120cf6e840afd7e53674c132ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x69ba75030c949b2d236de77bf8e2b6a9de99924120cf6e840afd7e53674c132c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x2e5c4f1211df3ceab16d73ee3f2a4d02ec87d4a7ee3e9c618068783a586a6360" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa02e5c4f1211df3ceab16d73ee3f2a4d02ec87d4a7ee3e9c618068783a586a6360a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0639170e86f88db4819f56d81c49f5f3c43ba72a70d33163f7a756d904c00a340a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca03911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c148203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0x2e5c4f1211df3ceab16d73ee3f2a4d02ec87d4a7ee3e9c618068783a586a6360", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x639170e86f88db4819f56d81c49f5f3c43ba72a70d33163f7a756d904c00a340", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x3911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c14", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x671633d7f50fad471059bc2f886515fcbb6526f75e46f2b9d1892f6cf072ebdb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x671633d7f50fad471059bc2f886515fcbb6526f75e46f2b9d1892f6cf072ebdb", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b43c", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa738", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a045a145c6806e84b23a550962fb3d4de770eae84d45282646e39011ec8594d971a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x45a145c6806e84b23a550962fb3d4de770eae84d45282646e39011ec8594d971", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xce52aea50ed08b77118c47a17313f5eac7f78007bf0f9ae9021318390122f24e" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa0ce52aea50ed08b77118c47a17313f5eac7f78007bf0f9ae9021318390122f24ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06fc5bc0bc96b5d5cc285ef402303275fcf40330865776d0bcd6cc313b7ce4d87a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca0288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0xce52aea50ed08b77118c47a17313f5eac7f78007bf0f9ae9021318390122f24e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6fc5bc0bc96b5d5cc285ef402303275fcf40330865776d0bcd6cc313b7ce4d87", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x4bdda91a7ac5a21427616da5f86809c247eb40c595b7e6f2cd677dec52147abc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4bdda91a7ac5a21427616da5f86809c247eb40c595b7e6f2cd677dec52147abc", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365b8", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0acf0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e1438a8f467c9473c06731b5b15a00232a8900245b0327a510b6d810b10c18fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e1438a8f467c9473c06731b5b15a00232a8900245b0327a510b6d810b10c18f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xfb7a05f469edfa632cbd317e44754e639a2091e4b51387168ac22a09e4c487e3" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa0fb7a05f469edfa632cbd317e44754e639a2091e4b51387168ac22a09e4c487e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0baf248065226cf295d0be9572c7755690119798beac037743f473f27195f7e10a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca0288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0xfb7a05f469edfa632cbd317e44754e639a2091e4b51387168ac22a09e4c487e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbaf248065226cf295d0be9572c7755690119798beac037743f473f27195f7e10", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xe570a57b3610dc904af20ec51d4753bb756dc9b6965d265433dcf2be1402e19f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xe570a57b3610dc904af20ec51d4753bb756dc9b6965d265433dcf2be1402e19f", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365b8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0acf0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Paris-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Merge", + "genesisRLP": "0xf901faf901f5a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bbe320ceea7ca2d6cd5c5a7a554ed58bb48499f3021202143a2fac78eafb5117a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbbe320ceea7ca2d6cd5c5a7a554ed58bb48499f3021202143a2fac78eafb5117", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x33fa3489fa102fbc2e7bef1977609f47e6d22118bce9cffbea68d9610de7a26f" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa033fa3489fa102fbc2e7bef1977609f47e6d22118bce9cffbea68d9610de7a26fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa007c18c2836095cd867424aff4eb0c30a5fd88127ee2f7951adec5fb166f1fb25a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca07686fd7f26839ad21d635f3925350ff5f8a16b16604ecef77631ca7defdb3dceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e58203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0", + "blockHeader": { + "parentHash": "0x33fa3489fa102fbc2e7bef1977609f47e6d22118bce9cffbea68d9610de7a26f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x07c18c2836095cd867424aff4eb0c30a5fd88127ee2f7951adec5fb166f1fb25", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x7686fd7f26839ad21d635f3925350ff5f8a16b16604ecef77631ca7defdb3dce", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e5", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xe088e93ee4e8d8c669324f66d650763d176a0f9353d4158997883f7009f3b9f7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xe088e93ee4e8d8c669324f66d650763d176a0f9353d4158997883f7009f3b9f7", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365af", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0ad0e", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a046f49d5e64d86792d511e41df23cb6feb8e0574a8244c23446f869ba172dc2f2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x46f49d5e64d86792d511e41df23cb6feb8e0574a8244c23446f869ba172dc2f2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x51a5bac2f9d0230d401cff1d1ee69161563d2237699589b7a62fdf8844982d2b" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba051a5bac2f9d0230d401cff1d1ee69161563d2237699589b7a62fdf8844982d2ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ccb82768fb01f42f158e0735788484d84630aeccfef9d72028fba43971c4b3aba0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x51a5bac2f9d0230d401cff1d1ee69161563d2237699589b7a62fdf8844982d2b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xccb82768fb01f42f158e0735788484d84630aeccfef9d72028fba43971c4b3ab", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x7eabb455b3b8d2ad03c8823dd5893d896aa801c47972e85a089e095457d7911c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7eabb455b3b8d2ad03c8823dd5893d896aa801c47972e85a089e095457d7911c", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03d4b2b6d3cec35bb4b9d1da5c166a88d237dc5591f83632c71da7db06d2d3845a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3d4b2b6d3cec35bb4b9d1da5c166a88d237dc5591f83632c71da7db06d2d3845", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf5bc286dd1aa93248e602c5185c5ad2411279468a188f950563c3b6914f472c2" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba0f5bc286dd1aa93248e602c5185c5ad2411279468a188f950563c3b6914f472c2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b3884183528c49f388d9ef14920ea125c2309605d455b396c84d8a44ad895acaa0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0xf5bc286dd1aa93248e602c5185c5ad2411279468a188f950563c3b6914f472c2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb3884183528c49f388d9ef14920ea125c2309605d455b396c84d8a44ad895aca", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xa7d75c450827c0890758d69c476752fcfc0bfce476ec78a7434f4644661c015c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa7d75c450827c0890758d69c476752fcfc0bfce476ec78a7434f4644661c015c", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c3711b4389dc4767786349c356c078c567a4b4fd7d9affc173328451b4f91641a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc3711b4389dc4767786349c356c078c567a4b4fd7d9affc173328451b4f91641", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x2183d2814b02f2b74237f7adf3a2e1addbcef8daaef7e901bbce64c5632debad" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba02183d2814b02f2b74237f7adf3a2e1addbcef8daaef7e901bbce64c5632debada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05aeabce9e84c80a26ccd5fc8640231a918a4daa521d1f7b09f1ae45c83c209b2a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca03911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c148203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x2183d2814b02f2b74237f7adf3a2e1addbcef8daaef7e901bbce64c5632debad", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5aeabce9e84c80a26ccd5fc8640231a918a4daa521d1f7b09f1ae45c83c209b2", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x3911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c14", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x354eaba63f707636d3e081bbcd5b7b405e2ffb33e1c8b6848e44d53e11a34636" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x354eaba63f707636d3e081bbcd5b7b405e2ffb33e1c8b6848e44d53e11a34636", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b43c", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa738", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0cdde0da05f6b2b6ca6d2e4db31e8330ac42a91e2d2b20c62d68847e3bff5691ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xcdde0da05f6b2b6ca6d2e4db31e8330ac42a91e2d2b20c62d68847e3bff5691c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x8c3c153901564a29312b06b3b98e951efc35f9b54a60ef3cbe6350dff55c68e9" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba08c3c153901564a29312b06b3b98e951efc35f9b54a60ef3cbe6350dff55c68e9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa062f0b13b24b9143a2baf7264f43bea830cf4e5daa27e873cbedaba1c5df1b724a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x8c3c153901564a29312b06b3b98e951efc35f9b54a60ef3cbe6350dff55c68e9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x62f0b13b24b9143a2baf7264f43bea830cf4e5daa27e873cbedaba1c5df1b724", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x4349cbd0f6595e3fdd675aeec09084ecb762de52c298cbc70f2d15da4a667851" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x4349cbd0f6595e3fdd675aeec09084ecb762de52c298cbc70f2d15da4a667851", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0aada87b0cbfa929c22f9463a2a5bfd4236af75f4b72eaae9fb1bee7dd8c3b97aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaada87b0cbfa929c22f9463a2a5bfd4236af75f4b72eaae9fb1bee7dd8c3b97a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xa9956fa98c21a71e6f64744270f8c9729137c69060e4ffc4ff824970ae658378" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba0a9956fa98c21a71e6f64744270f8c9729137c69060e4ffc4ff824970ae658378a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0530f07050074b60959c2e810d9596f00afbf270a9d3ea9071d32e976117e0297a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0xa9956fa98c21a71e6f64744270f8c9729137c69060e4ffc4ff824970ae658378", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x530f07050074b60959c2e810d9596f00afbf270a9d3ea9071d32e976117e0297", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x04bd9d03c862a39c146c4a884b68c7c1e37c7e2d5aaca31d9c63260c13195971" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x04bd9d03c862a39c146c4a884b68c7c1e37c7e2d5aaca31d9c63260c13195971", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a069ba75030c949b2d236de77bf8e2b6a9de99924120cf6e840afd7e53674c132ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x69ba75030c949b2d236de77bf8e2b6a9de99924120cf6e840afd7e53674c132c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x5b526ca498de3417b4dcc6a0431dc73900252d809b82d5387792f1520435200e" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba05b526ca498de3417b4dcc6a0431dc73900252d809b82d5387792f1520435200ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0639170e86f88db4819f56d81c49f5f3c43ba72a70d33163f7a756d904c00a340a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca03911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c148203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x5b526ca498de3417b4dcc6a0431dc73900252d809b82d5387792f1520435200e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x639170e86f88db4819f56d81c49f5f3c43ba72a70d33163f7a756d904c00a340", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x3911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c14", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x885e234dd052dbb37a689533be6f9b123636df344504a573db7cb1a03a0c0668" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x885e234dd052dbb37a689533be6f9b123636df344504a573db7cb1a03a0c0668", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b43c", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa738", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a045a145c6806e84b23a550962fb3d4de770eae84d45282646e39011ec8594d971a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x45a145c6806e84b23a550962fb3d4de770eae84d45282646e39011ec8594d971", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x79a29b51d5cab86108abfa7246ce118b10ca6a6b00a0a2a7a97f614231ba134d" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba079a29b51d5cab86108abfa7246ce118b10ca6a6b00a0a2a7a97f614231ba134da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06fc5bc0bc96b5d5cc285ef402303275fcf40330865776d0bcd6cc313b7ce4d87a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca0288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x79a29b51d5cab86108abfa7246ce118b10ca6a6b00a0a2a7a97f614231ba134d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6fc5bc0bc96b5d5cc285ef402303275fcf40330865776d0bcd6cc313b7ce4d87", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x5c7beae060be6ad9698e05d42ad50a707e7033d0331a875c40a2387015b19107" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5c7beae060be6ad9698e05d42ad50a707e7033d0331a875c40a2387015b19107", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365b8", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0acf0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e1438a8f467c9473c06731b5b15a00232a8900245b0327a510b6d810b10c18fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e1438a8f467c9473c06731b5b15a00232a8900245b0327a510b6d810b10c18f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xd932dc1889a1e3f7ea132f800ff54985d3cc5abd542ed8ac12f40b5b6d3b2f5e" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba0d932dc1889a1e3f7ea132f800ff54985d3cc5abd542ed8ac12f40b5b6d3b2f5ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0baf248065226cf295d0be9572c7755690119798beac037743f473f27195f7e10a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca0288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0xd932dc1889a1e3f7ea132f800ff54985d3cc5abd542ed8ac12f40b5b6d3b2f5e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbaf248065226cf295d0be9572c7755690119798beac037743f473f27195f7e10", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x7c19da167dce532436f53f58ac1e9f083779d4bb10e1fa1709ac886cca97918d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7c19da167dce532436f53f58ac1e9f083779d4bb10e1fa1709ac886cca97918d", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365b8", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0acf0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Shanghai-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021cf90216a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0bbe320ceea7ca2d6cd5c5a7a554ed58bb48499f3021202143a2fac78eafb5117a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xbbe320ceea7ca2d6cd5c5a7a554ed58bb48499f3021202143a2fac78eafb5117", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x019a1eea5c4c3b64e0b27af1dfd0b1f946365a4144c731c008c64432f778ec5a" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba0019a1eea5c4c3b64e0b27af1dfd0b1f946365a4144c731c008c64432f778ec5aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa007c18c2836095cd867424aff4eb0c30a5fd88127ee2f7951adec5fb166f1fb25a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca07686fd7f26839ad21d635f3925350ff5f8a16b16604ecef77631ca7defdb3dceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e58203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x019a1eea5c4c3b64e0b27af1dfd0b1f946365a4144c731c008c64432f778ec5a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x07c18c2836095cd867424aff4eb0c30a5fd88127ee2f7951adec5fb166f1fb25", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x7686fd7f26839ad21d635f3925350ff5f8a16b16604ecef77631ca7defdb3dce", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e5", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xd280496cbd08bbf0e3b50725a4948cb25d954b69185f6421581b24c71766646c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd280496cbd08bbf0e3b50725a4948cb25d954b69185f6421581b24c71766646c", + "pre": { + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365af", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0ad0e", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a23dad505dee8f6af3dc451687920a8cd8ac0ab161009000431322446ebb9550a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa23dad505dee8f6af3dc451687920a8cd8ac0ab161009000431322446ebb9550", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7a14b9e5f94321c0ec589eea0a4ffcb9d92cb7ff99b769770e3379f0f41d56ae" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea07a14b9e5f94321c0ec589eea0a4ffcb9d92cb7ff99b769770e3379f0f41d56aea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05a3dc0e976cac05f5145fcba6c4a333b71b9754a05dded59fabd49a0afa8ad4ba0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x7a14b9e5f94321c0ec589eea0a4ffcb9d92cb7ff99b769770e3379f0f41d56ae", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5a3dc0e976cac05f5145fcba6c4a333b71b9754a05dded59fabd49a0afa8ad4b", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x1893a954b5a129a7ae881c4ccf870086895477f156b6d0fb8086f2960cc19ad3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1893a954b5a129a7ae881c4ccf870086895477f156b6d0fb8086f2960cc19ad3", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fcf9d2bd0ad472c83f013e4520855b960d7099c6815e29af75278e08b8ad5e0ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfcf9d2bd0ad472c83f013e4520855b960d7099c6815e29af75278e08b8ad5e0e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x7309c0159f4c86b85a13b2a11185a2c017fce9d590e01e9a34060d9504608700" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea07309c0159f4c86b85a13b2a11185a2c017fce9d590e01e9a34060d9504608700a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa029376594c2d5b46982092551c72a0ced268e7eed0ea71d5b72c27336345f1fb6a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x7309c0159f4c86b85a13b2a11185a2c017fce9d590e01e9a34060d9504608700", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x29376594c2d5b46982092551c72a0ced268e7eed0ea71d5b72c27336345f1fb6", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xbb4e424726b1f0c21bb81c5e453eabf4f62cb0a476c28224f976d42bbaf26081" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xbb4e424726b1f0c21bb81c5e453eabf4f62cb0a476c28224f976d42bbaf26081", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALL-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a069077b5944b5bde7923e91707fb85f0fb6f3d2fda9f4976b9d1f1e17feca3841a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x69077b5944b5bde7923e91707fb85f0fb6f3d2fda9f4976b9d1f1e17feca3841", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xcc5443bbbf6672651f64c54bb9c0287c63bbb0537921617a51f1da96ec6f83bc" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea0cc5443bbbf6672651f64c54bb9c0287c63bbb0537921617a51f1da96ec6f83bca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c9cfd387626fd92fa5cfff8426a8bba4c93323af3ff30dd97b49ccae5f9f8e0a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca03911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c148203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0xcc5443bbbf6672651f64c54bb9c0287c63bbb0537921617a51f1da96ec6f83bc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c9cfd387626fd92fa5cfff8426a8bba4c93323af3ff30dd97b49ccae5f9f8e0", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x3911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c14", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa79dfbc2fba66fc8e91a8388d5bb2d2bb9d67ba275e7dd97cb1cb954d5600f13" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa79dfbc2fba66fc8e91a8388d5bb2d2bb9d67ba275e7dd97cb1cb954d5600f13", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af1600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b43c", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa738", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d1c403e47a407ed1b804bbd7311bd46dd8e492342f9aa4c3e1d0662780ee20f1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd1c403e47a407ed1b804bbd7311bd46dd8e492342f9aa4c3e1d0662780ee20f1", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x229fad3d67c47b8162986bfe8819ade6ea187f830fad590ff33792a07aa4820e" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea0229fad3d67c47b8162986bfe8819ade6ea187f830fad590ff33792a07aa4820ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa031b6927e945ab86f955a09087ee5aacb740a69c1818c38d3d216ea30442054bda0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x229fad3d67c47b8162986bfe8819ade6ea187f830fad590ff33792a07aa4820e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x31b6927e945ab86f955a09087ee5aacb740a69c1818c38d3d216ea30442054bd", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x19a98f56ab1647a5eae68616a4d0831c89c5ea85ddeb5a0714856759cf4b1bf0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x19a98f56ab1647a5eae68616a4d0831c89c5ea85ddeb5a0714856759cf4b1bf0", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d95a0aa8935b615be2ab92c97c45c3adba0c3613cc1c46966022db674cfd326ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd95a0aa8935b615be2ab92c97c45c3adba0c3613cc1c46966022db674cfd326b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x96fade7248a51961811957248dd27083258d58442f6f9ce5f6c1af2bff65ddb6" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea096fade7248a51961811957248dd27083258d58442f6f9ce5f6c1af2bff65ddb6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c7721892bd6faf0508f5f52c27c08d58ad158e06120edb058d5c9143608f1d34a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca026353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c178203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x96fade7248a51961811957248dd27083258d58442f6f9ce5f6c1af2bff65ddb6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc7721892bd6faf0508f5f52c27c08d58ad158e06120edb058d5c9143608f1d34", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x26353e917240dad5739fbbf483c183e64f8646c7f17b6b7aa347e2077a1990c8", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c17", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5c854659fac9c07a28fd9a439edcf983b410ac5e47ea9ab9171e557f2742d272" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5c854659fac9c07a28fd9a439edcf983b410ac5e47ea9ab9171e557f2742d272", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b445", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa71a", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_CALLCODE-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c7af9ff841faf3f6e113e50b722728f2dece2ed874c7a580bc4d1ac9900e0a50a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc7af9ff841faf3f6e113e50b722728f2dece2ed874c7a580bc4d1ac9900e0a50", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x90ee1a9c8616787138b87f501f47f3de2a845bb9a776b8d83353937a22b5e19a" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea090ee1a9c8616787138b87f501f47f3de2a845bb9a776b8d83353937a22b5e19aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0feef00a82216fe0179b6bb071a309ff521951978a4ddada7d2a29d3f0ac43ba2a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca03911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff11223344556683013c148203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x90ee1a9c8616787138b87f501f47f3de2a845bb9a776b8d83353937a22b5e19a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfeef00a82216fe0179b6bb071a309ff521951978a4ddada7d2a29d3f0ac43ba2", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x3911fbee5e5bc8f6a794dee8110045afb436cc978c57d7fade1fc7f880014e84", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x013c14", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6f10d81c27f24cff1a688fda2afcfc764d0b2bf61803bf9392c8e1d21984edcf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6f10d81c27f24cff1a688fda2afcfc764d0b2bf61803bf9392c8e1d21984edcf", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x600060006000600060647310000000000000000000000000000000000000015af2600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x03b43c", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993afa738", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07b484f624a17c5b2c415db23ad2b3f433696a74cf4e73a7054cca0eb2075ac55a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7b484f624a17c5b2c415db23ad2b3f433696a74cf4e73a7054cca0eb2075ac55", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x811750111a9bad3e4f99aa7971c08eabb6721958f0cfc7e3211e9f82462c2253" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea0811750111a9bad3e4f99aa7971c08eabb6721958f0cfc7e3211e9f82462c2253a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02cf3fa7fe85b945d21e03f1e90899c5d5450f8c7ff15195af9157d274fa6b479a0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca0288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x811750111a9bad3e4f99aa7971c08eabb6721958f0cfc7e3211e9f82462c2253", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2cf3fa7fe85b945d21e03f1e90899c5d5450f8c7ff15195af9157d274fa6b479", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb4f42ce6c119c4f89bdfcf1a3faa9a4427fe498151007b38506aa3e97889db9d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb4f42ce6c119c4f89bdfcf1a3faa9a4427fe498151007b38506aa3e97889db9d", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365b8", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af1600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0acf0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_CALLCODE]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a7b5c3aacc0526596d3ba1e51a197a2ebb783a1a1d89dbfc494ab45cfddc0561a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa7b5c3aacc0526596d3ba1e51a197a2ebb783a1a1d89dbfc494ab45cfddc0561", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x34e7f167aad53135b763b23d3ce965ef8da47d88928bbd81d8bb1639a130c71f" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea034e7f167aad53135b763b23d3ce965ef8da47d88928bbd81d8bb1639a130c71fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa009e7738acb2d46ac318a262253504990fe36f322cc10db38f700a14527f13c2da0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca0288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x34e7f167aad53135b763b23d3ce965ef8da47d88928bbd81d8bb1639a130c71f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x09e7738acb2d46ac318a262253504990fe36f322cc10db38f700a14527f13c2d", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x288bc770a8e44549f5dd7207e4731c3629874d722aa4386acc8cd16aa9cd5662", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e8", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x88ef46273dc9d4bc08b2199e07273756329e51e7945b0ea200ec837370d31a4e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x88ef46273dc9d4bc08b2199e07273756329e51e7945b0ea200ec837370d31a4e", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365b8", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x600060006000600060007310000000000000000000000000000000000000015af2600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0acf0", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/cancun/eip6780_selfdestruct/test_reentrancy_selfdestruct_revert.py::test_reentrancy_selfdestruct_revert[fork_Cancun-blockchain_test-second_suicide_DELEGATECALL-first_suicide_DELEGATECALL]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", + "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" + }, + "network": "Cancun", + "genesisRLP": "0xf9023ff90239a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a08c998adfe673d10624c1fba8a125b0713f9ca6a6abc3270d2a98e4a2c6035dc4a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808087ff112233445566808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x8c998adfe673d10624c1fba8a125b0713f9ca6a6abc3270d2a98e4a2c6035dc4", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0xff112233445566", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x62b7e60b0ff7c5f0bd9a6ce18328a1de3d0ad065076848be7e59f1ab52d79b6e" + }, + "blocks": [ + { + "rlp": "0xf902a7f9023ea062b7e60b0ff7c5f0bd9a6ce18328a1de3d0ad065076848be7e59f1ab52d79b6ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a11aa409571d8d966c1965c7c96d1828abcb2ee4f4a8781e9488e5df8ea0dc7fa0acc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9ca07686fd7f26839ad21d635f3925350ff5f8a16b16604ecef77631ca7defdb3dceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800187ff112233445566830121e58203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120948a0a19589531694250d570040a0c4b74576919b880801ca09a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17a0640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1ebc0c0", + "blockHeader": { + "parentHash": "0x62b7e60b0ff7c5f0bd9a6ce18328a1de3d0ad065076848be7e59f1ab52d79b6e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa11aa409571d8d966c1965c7c96d1828abcb2ee4f4a8781e9488e5df8ea0dc7f", + "transactionsTrie": "0xacc0ce675c991ccef932e43962789381499e79fde712f915b6f66d45c8256c9c", + "receiptTrie": "0x7686fd7f26839ad21d635f3925350ff5f8a16b16604ecef77631ca7defdb3dce", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0xff112233445566", + "gasUsed": "0x0121e5", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9215cda5d07549e3bec316f8575180c61e772616a183679da99916156c1384cc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x00", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x8a0a19589531694250d570040a0c4b74576919b8", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0x9a207ad45b7fc2aa5f8e72a30487f2b0bc489778e6d022f19036efdf2a922a17", + "s": "0x640d4da05078b5a4aa561f1b4d58176ea828bfa0f88d27d14459c1d789e1a1eb", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x9215cda5d07549e3bec316f8575180c61e772616a183679da99916156c1384cc", + "pre": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x0100", + "0x02": "0x0100", + "0x03": "0x0100" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x6124fee993bc0000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x00000000000000000000000000000000000003e8": { + "nonce": "0x00", + "balance": "0x0de0b6b3a7640000", + "code": "0x", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x1000000000000000000000000000000000000001": { + "nonce": "0x00", + "balance": "0x29a2241af62c0000", + "code": "0x6103e8ff", + "storage": {} + }, + "0x1000000000000000000000000000000000000002": { + "nonce": "0x00", + "balance": "0x4563918244f40000", + "code": "0x60006000600060647310000000000000000000000000000000000000015af4600f0160005260206000fd", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x0365af", + "code": "0x", + "storage": {} + }, + "0x8a0a19589531694250d570040a0c4b74576919b8": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x60006000600060007310000000000000000000000000000000000000015af4600155600060006000600060007310000000000000000000000000000000000000025af16002553d600060003e600051600355", + "storage": { + "0x01": "0x01", + "0x03": "0x10" + } + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x6124fee993b0ad0e", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/create_selfdestruct_same_tx.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/create_selfdestruct_same_tx.json index 57cdb743f12..ae99f79f025 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/create_selfdestruct_same_tx.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/create_selfdestruct_same_tx.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-selfdestruct_contract_initial_balance=0-single_call-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x6087f7cc759d4bc9aa6dfe57a7ac6d9595f59b6efb46898f89d10d158fe7aa0c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -148,9 +150,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-selfdestruct_contract_initial_balance=0-single_call-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -199,6 +202,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xb45236f2622ea384018d8777e5a78252e8d0f385ebb64bd961e9d461420c4f8f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -297,9 +301,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-selfdestruct_contract_initial_balance=0-single_call_self-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -348,6 +353,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x31d18ed1c78be8afb40043a5df5c3b4e5c6baa2e34f046584b7f48308fcf872d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -430,9 +436,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-selfdestruct_contract_initial_balance=0-single_call_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -481,6 +488,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xa8d413084fc87c2cf633acc476e31ae2effd50f6d2cec83336d96505fc850149" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -579,9 +587,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_single_sendall_recipient-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -630,6 +639,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x2e0b16c1872e904556f26e945c9ab40fa5ae7215f7e7d3cd3c39890205b1007d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -737,9 +747,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_single_sendall_recipient-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -788,6 +799,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x158e3d654a3fe6a1a8ccbf5b6350ed1dda05e3dafd03fa442be066ac867f4cab" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -895,9 +907,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -946,6 +959,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x1a356ff04665449f96afb1c423a7c1919d9ba871e0efc224aa1200d9a8326824" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1085,9 +1099,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1136,6 +1151,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4db67b6974156fe964841e6a0ceae67afbc79dab7dc59c1bca7f0d054695f163" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1275,9 +1291,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1326,6 +1343,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x1cb8c9416f81846151226e18959a02fa03893e249a70de9ad4c03d86f292d0a9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1449,9 +1467,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1500,6 +1519,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x31f7e62e2bf98461ecb71eba7ad9aecb2247d0af58d973284a6a5b2d3db65dfd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1639,9 +1659,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1690,6 +1711,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x1f695362674f656aafc9fd3cce3f5d307406cc6aa55b1044228fbeea2806fa81" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1813,9 +1835,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1864,6 +1887,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x2ecefa90583a08b0a3554086a34c14d062e21a1a910e69e599b8b6e549592770" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2003,9 +2027,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2054,6 +2079,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x6ca44fd1b78504fa72a521883176341086db01f8d074da9204e1d824e83bf351" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2170,9 +2196,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Shanghai-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2221,6 +2248,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xd7e89e31e633eabcdcba1efb82626ebe8aa09a958c3089599fa4534ea47658a7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2353,9 +2381,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Shanghai-selfdestruct_contract_initial_balance=100000-single_call-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2404,6 +2433,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x7e2072edfda659cf225e8c48cd0cbe0c59d8595033d53701654693168f00248b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2508,9 +2538,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Shanghai-selfdestruct_contract_initial_balance=100000-single_call-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2559,6 +2590,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x38bc9cdc98041903c61b0e72cf8f2b01c3ca6ae10cd89394c2c73d322f526baa" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2663,9 +2695,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Shanghai-selfdestruct_contract_initial_balance=100000-single_call_self-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2714,6 +2747,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x2eded3b52cee9538a439155e60a80b5d5d12734ff935fcb06f7cf5a7f52bd8a0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2802,9 +2836,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Shanghai-selfdestruct_contract_initial_balance=100000-single_call_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2853,6 +2888,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x8c889852556b3be8e9859ca3e2752d96ea9fb9b9efdd0d080ec383f78993425f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2957,9 +2993,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_single_sendall_recipient-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3008,6 +3045,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xe37784e3f5eca20b3c90f4ccba8de5e1e3dc414169b957152d76a1f15f4e5b50" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3121,9 +3159,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_single_sendall_recipient-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3172,6 +3211,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xebb05abaf9396ae64f8f9e50555d809f0fb2c31a2d53a451b70f86a80bbf647e" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3285,9 +3325,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3336,6 +3377,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xd90ff883bd66a2469633871e7d8fb50846665f28c7c08310ab7d94a3f45351bf" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3481,9 +3523,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3532,6 +3575,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x46e65031dad1dd694daa1a03c8b123fdfa4f24fc03548bc622730eb3356bf7de" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3677,9 +3721,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3728,6 +3773,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4bffe5d4c7868f334e9e33e8c46de4b60ca0f0fc9dd615761457fe60f8b568f9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3857,9 +3903,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3908,6 +3955,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x9543f9b9f223346672dcaf557961ea8cb4057855a73e7e81c4585d3986555e39" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4053,9 +4101,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4104,6 +4153,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x3b6ae86b4745a4b62b6270599ea1b6aa065295930796fd3bfca79c27aab1c4f7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4233,9 +4283,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4284,6 +4335,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x85c68bfa680a664d38875984013a17d0a675027ddd1ca8a9074ba1ba2f0b803b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4429,9 +4481,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4480,6 +4533,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x7b9c9555068d8680d8c07c20468f4729f397001f5cdbd8b46f8d67a0863c9f26" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4602,9 +4656,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Shanghai-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4653,6 +4708,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x0b258d06f4ad6d2c3bd7de6226410c769989e37acf6dc36e386728ccbbc0ac7d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4791,9 +4847,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-selfdestruct_contract_initial_balance=0-single_call-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4848,6 +4905,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x981f53292b4e88a01c2c004eb1d370f81c0e264ca8e3a79edfd32b37ababddaa" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4960,9 +5018,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-selfdestruct_contract_initial_balance=0-single_call-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -5017,6 +5076,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3f6f623702ed2228a4db72fd48ce4884327a24c321629b092e6b42b3bc900497" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5129,9 +5189,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-selfdestruct_contract_initial_balance=0-single_call_self-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -5186,6 +5247,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc77556584dfd83faa100acc70f06461fe18cbb73de17cebe8381b4e6f65bd9b6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5282,9 +5344,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-selfdestruct_contract_initial_balance=0-single_call_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-single_call_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -5339,6 +5402,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1b863c8da28c3cbe3b53b07eb372343ad8ac30bd86ab9b3e67f2356bc3b1ce1b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5451,9 +5515,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_single_sendall_recipient-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -5508,6 +5573,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa769b7bfd2cde5ecf492721559233d400abdeba8bf51e7d7f258e1cffd0f4acf" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5629,9 +5695,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_single_sendall_recipient-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -5686,6 +5753,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2f5e8c78ef3044edb1d216c2cb26a223f2e2d560575ae193c4e6cab1f5a8deaf" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5807,9 +5875,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -5864,6 +5933,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf04dd3407be56e0f2c6909da8a9f804cc06dc8f1b525ba8b4df33189d576c4f0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -6017,9 +6087,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -6074,6 +6145,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x221a4a58e581dc4b442c12d86849c367f8f513a585dc25c34b0b91542727d630" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -6227,9 +6299,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -6284,6 +6357,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe57e68435d98f760b4a8d5cf7be2b3b9537798634a262531d3af046721061308" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -6421,9 +6495,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -6478,6 +6553,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe664baef62af21004c6a8de7bf4d03369167ba5e25756fd39daea1f1f9361fde" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -6631,9 +6707,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -6688,6 +6765,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x68df7cbcac1018e17b1dbce0efee809d15ea8ea4111886809f3d3b05a987b33d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -6825,9 +6903,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -6882,6 +6961,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc55f02e7b2952275877fb3601483417166a90c833cf77c0ba5b443bd6aa81cb0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -7035,9 +7115,10 @@ }, "sealEngine": "NoProof" }, - "040-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -7092,6 +7173,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa11da7876292e86b345be381ddd08b476a9a58503a0557c72e22905d211bc96b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -7222,9 +7304,10 @@ }, "sealEngine": "NoProof" }, - "041-fork=Cancun-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -7279,6 +7362,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc6d85d511938c17a0e000ec02efa131e8f27ca402df85037e7b775bb57d1c8eb" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -7425,9 +7509,10 @@ }, "sealEngine": "NoProof" }, - "042-fork=Cancun-selfdestruct_contract_initial_balance=100000-single_call-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -7482,6 +7567,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x26ba2b678833156baca8dbe07b2661959e7fbad82bd44cd0c9b9d8dfaf18ebe6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -7600,9 +7686,10 @@ }, "sealEngine": "NoProof" }, - "043-fork=Cancun-selfdestruct_contract_initial_balance=100000-single_call-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -7657,6 +7744,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xff312234942b121398c43627cfe3dcf7bc04059557f6b203f3bc0c23a841f292" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -7775,9 +7863,10 @@ }, "sealEngine": "NoProof" }, - "044-fork=Cancun-selfdestruct_contract_initial_balance=100000-single_call_self-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -7832,6 +7921,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x828875604da9f5472552eea43eebbbd9c64769d2416c8633fc7e5551c216f673" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -7934,9 +8024,10 @@ }, "sealEngine": "NoProof" }, - "045-fork=Cancun-selfdestruct_contract_initial_balance=100000-single_call_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-single_call_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -7991,6 +8082,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x36434773071979e6a3f94657753d6d911c0626ad216f4fd4ed9bc28ee7f8bdeb" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -8109,9 +8201,10 @@ }, "sealEngine": "NoProof" }, - "046-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_single_sendall_recipient-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -8166,6 +8259,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x93994d35a939de843233d006a07bcc9b3e81d78e13b373a35feed1aa7d142373" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -8293,9 +8387,10 @@ }, "sealEngine": "NoProof" }, - "047-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_single_sendall_recipient-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -8350,6 +8445,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5b8dd2420deae0872a12d7c8e2466c37501fb065b15a786e812306e1a63ebf33" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -8477,9 +8573,10 @@ }, "sealEngine": "NoProof" }, - "048-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -8534,6 +8631,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb9014ea3a0bd7f1ae8a7bb4877ed328c80ae0f20771c318fbd25efb67de1060b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -8693,9 +8791,10 @@ }, "sealEngine": "NoProof" }, - "049-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -8750,6 +8849,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x818d8007a17c673fc93b2b47c8e0c087f9860d94ba1dee1ba86b26a5e9e6ba6d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -8909,9 +9009,10 @@ }, "sealEngine": "NoProof" }, - "050-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -8966,6 +9067,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7f742b22a5eddeeb59d864ceb5265512f878fcfaf27cc7947e1a40a1957d535a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -9109,9 +9211,10 @@ }, "sealEngine": "NoProof" }, - "051-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -9166,6 +9269,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x05c8cc141cae1975d5a34c6891532a02a8d8a1cee3cded2c68759954d1943f33" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -9325,9 +9429,10 @@ }, "sealEngine": "NoProof" }, - "052-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -9382,6 +9487,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8259ec7a18bd53e208f5fbaf24d2396bb19249de28a403cd6539ccd801e40881" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -9525,9 +9631,10 @@ }, "sealEngine": "NoProof" }, - "053-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_different_order-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -9582,6 +9689,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf6a3adf2d60d8ce11f9e3c19b4bb615df0d2b68b83ec45853e77fb5aa6367b0c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -9741,9 +9849,10 @@ }, "sealEngine": "NoProof" }, - "054-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -9798,6 +9907,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xcd8b30ed02c2613ff0a6986cab7f37cf895198842466254bb42e64f433479d20" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -9934,9 +10044,10 @@ }, "sealEngine": "NoProof" }, - "055-fork=Cancun-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_create_selfdestruct_same_tx[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -9991,6 +10102,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x10e8fcf6e1882fe39193b28d6da402a88e9c8fe2652b9af0f48ab5949e0d1b4e" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/delegatecall_from_new_contract_to_pre_existing_contract.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/delegatecall_from_new_contract_to_pre_existing_contract.json index af8e531bc50..0622e2f3b41 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/delegatecall_from_new_contract_to_pre_existing_contract.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/delegatecall_from_new_contract_to_pre_existing_contract.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-create_opcode=CREATE-selfdestruct_contract_initial_balance=0-call_times=1-delegatecall": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-selfdestruct_contract_initial_balance_0-call_times_1-delegatecall]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x342066ea16fd87cbd776b90503645f2f5fc917951bcb46eb46b11672733aa8e6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -148,9 +150,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-create_opcode=CREATE-selfdestruct_contract_initial_balance=0-call_times=1-callcode": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-selfdestruct_contract_initial_balance_0-call_times_1-callcode]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -199,6 +202,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x559bd97b1f89986a73eeb7f66e2c61d924ac2ca9d4666f9c42e008239609bf82" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -297,9 +301,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-create_opcode=CREATE-selfdestruct_contract_initial_balance=1-call_times=1-delegatecall": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-selfdestruct_contract_initial_balance_1-call_times_1-delegatecall]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -348,6 +353,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x80a8016ab8be1f9b435df8073f80b4a15049b62c9f09dd2797dad6bbbee2c781" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -452,9 +458,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-create_opcode=CREATE-selfdestruct_contract_initial_balance=1-call_times=1-callcode": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_new_contract_to_pre_existing_contract[fork_Shanghai-blockchain_test-create_opcode_CREATE-selfdestruct_contract_initial_balance_1-call_times_1-callcode]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -503,6 +510,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x49aeca2a4978a8913dad6a9f3185b3919aca2f05b6f4c68611c249b07c5ce770" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -607,9 +615,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-create_opcode=CREATE-selfdestruct_contract_initial_balance=0-call_times=1-delegatecall": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-selfdestruct_contract_initial_balance_0-call_times_1-delegatecall]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -664,6 +673,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xaa0f551f6dbcf82fad1c6150cf57148b7ab507ab3c22deca01255748a0f8e39f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -776,9 +786,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-create_opcode=CREATE-selfdestruct_contract_initial_balance=0-call_times=1-callcode": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-selfdestruct_contract_initial_balance_0-call_times_1-callcode]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -833,6 +844,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x64cb924bad0d7b081e1cd5bb2af63eaca80dae2c86d9f6f4acc4c53c05ac1982" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -945,9 +957,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-create_opcode=CREATE-selfdestruct_contract_initial_balance=1-call_times=1-delegatecall": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-selfdestruct_contract_initial_balance_1-call_times_1-delegatecall]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1002,6 +1015,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5603491b73faabc81893b58e1d35c402c54a2d6c506fbc45304b539d540c69a9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1120,9 +1134,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-create_opcode=CREATE-selfdestruct_contract_initial_balance=1-call_times=1-callcode": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_new_contract_to_pre_existing_contract[fork_Cancun-blockchain_test-create_opcode_CREATE-selfdestruct_contract_initial_balance_1-call_times_1-callcode]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1177,6 +1192,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x6ee06646e85d92e6dde9abc2d7feb2336b759bde0fbee496b1d6d97ecca2d313" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/delegatecall_from_pre_existing_contract_to_new_contract.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/delegatecall_from_pre_existing_contract_to_new_contract.json index 51047478ec9..097f56cc0c3 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/delegatecall_from_pre_existing_contract_to_new_contract.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/delegatecall_from_pre_existing_contract_to_new_contract.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-selfdestruct_contract_initial_balance=0-call_times=1-call_opcode=DELEGATECALL-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xcfaf4e75582fadc780c44fb886890ee881d89c694b5b8fd8898ee3648d1ed639" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -160,9 +162,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-selfdestruct_contract_initial_balance=0-call_times=1-call_opcode=DELEGATECALL-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -211,6 +214,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x605c59eb9b95c83563426b219105c62be11d5b9ee6c9f1b4b3e6f90fff7453e2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -321,9 +325,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-selfdestruct_contract_initial_balance=0-call_times=1-call_opcode=CALLCODE-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -372,6 +377,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xe22bf40529ae73634e8db7fc728ef21cb1c1bc1a1dba412e701be15877585b3f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -482,9 +488,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-selfdestruct_contract_initial_balance=0-call_times=1-call_opcode=CALLCODE-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -533,6 +540,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x57b00d8d7fb6458b1e4e62985b5e7fae25a7a224b2517ee234cfa5bd25e31de5" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -643,9 +651,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai-selfdestruct_contract_initial_balance=1-call_times=1-call_opcode=DELEGATECALL-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -694,6 +703,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x21b942b7ee1805a0688c972b31d231d50d4571ea6a972049e056d9279f9dd703" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -810,9 +820,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Shanghai-selfdestruct_contract_initial_balance=1-call_times=1-call_opcode=DELEGATECALL-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -861,6 +872,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x3c43c64536b52c0579bb64016144758342ca0959a68555a5eb2cd9f43cdb17c7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -977,9 +989,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai-selfdestruct_contract_initial_balance=1-call_times=1-call_opcode=CALLCODE-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1028,6 +1041,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x5cd69b263a7a824d065d3533f17826967494778d4bfb86d5cb5a556173a08b8e" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1144,9 +1158,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Shanghai-selfdestruct_contract_initial_balance=1-call_times=1-call_opcode=CALLCODE-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Shanghai-blockchain_test-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1195,6 +1210,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4582e7837f34517f2ba57bb2fb6faa3f0777fb497e7fd808f0a4ddb12b68faae" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1311,9 +1327,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-selfdestruct_contract_initial_balance=0-call_times=1-call_opcode=DELEGATECALL-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1368,6 +1385,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1a1ebc3a84c3aee8882720b790ae4956ca8caca99418df3d053bd25be8fb7412" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1500,9 +1518,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-selfdestruct_contract_initial_balance=0-call_times=1-call_opcode=DELEGATECALL-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1557,6 +1576,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x227b5c00651ae1a0e8bfc29a103a6b4b07f4b2347bfa66a8a780ddfcb9113ce2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1689,9 +1709,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-selfdestruct_contract_initial_balance=0-call_times=1-call_opcode=CALLCODE-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1746,6 +1767,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x646f32411953d314a1b732850d5ce91f62c7ae9e98e404e73f07511ab0e2b8ef" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1878,9 +1900,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-selfdestruct_contract_initial_balance=0-call_times=1-call_opcode=CALLCODE-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_0-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1935,6 +1958,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8df812675b791630ebd5effd8737d97e05dee1cd9f0b14be3f9f43f076b90cc7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2067,9 +2091,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-selfdestruct_contract_initial_balance=1-call_times=1-call_opcode=DELEGATECALL-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2124,6 +2149,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc0cb4ff7a35344c378c602200d6c9750469b5d33b6367460e9e0f1d9c8fa9a25" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2262,9 +2288,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-selfdestruct_contract_initial_balance=1-call_times=1-call_opcode=DELEGATECALL-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_DELEGATECALL-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2319,6 +2346,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0c5656b96bdb97f3b852de8e710d5cac99bec248b019fd5917e95e3ce9d767ab" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2457,9 +2485,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-selfdestruct_contract_initial_balance=1-call_times=1-call_opcode=CALLCODE-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2514,6 +2543,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd6dfcf54bab17c48c70923d25b5d32f50d73924b8268f92085862188caa9e261" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2652,9 +2682,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-selfdestruct_contract_initial_balance=1-call_times=1-call_opcode=CALLCODE-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_delegatecall_from_pre_existing_contract_to_new_contract[fork_Cancun-blockchain_test-selfdestruct_contract_initial_balance_1-call_times_1-call_opcode_CALLCODE-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2709,6 +2740,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xfd58b6d65be79b03e49a38f1716807036e4da285604372d8bcb0ef2d42ca8776" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/recreate_self_destructed_contract_different_txs.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/recreate_self_destructed_contract_different_txs.json index 97231a72de9..6661284272e 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/recreate_self_destructed_contract_different_txs.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/recreate_self_destructed_contract_different_txs.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-call_times=1-recreate_times=1-selfdestruct_contract_initial_balance=0-selfdestruct_other_address-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -165,9 +166,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-call_times=1-recreate_times=1-selfdestruct_contract_initial_balance=0-selfdestruct_to_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -315,9 +317,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-call_times=1-recreate_times=1-selfdestruct_contract_initial_balance=100000-selfdestruct_other_address-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -487,9 +490,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-call_times=1-recreate_times=1-selfdestruct_contract_initial_balance=100000-selfdestruct_to_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_recreate_self_destructed_contract_different_txs[fork_Shanghai-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -659,9 +663,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-call_times=1-recreate_times=1-selfdestruct_contract_initial_balance=0-selfdestruct_other_address-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_other_address-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -845,9 +850,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-call_times=1-recreate_times=1-selfdestruct_contract_initial_balance=0-selfdestruct_to_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_0-selfdestruct_to_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1031,9 +1037,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-call_times=1-recreate_times=1-selfdestruct_contract_initial_balance=100000-selfdestruct_other_address-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_other_address-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1223,9 +1230,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-call_times=1-recreate_times=1-selfdestruct_contract_initial_balance=100000-selfdestruct_to_self-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_recreate_self_destructed_contract_different_txs[fork_Cancun-blockchain_test-call_times_1-recreate_times_1-selfdestruct_contract_initial_balance_100000-selfdestruct_to_self-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/self_destructing_initcode.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/self_destructing_initcode.json index 6fad5ce6bdb..b4bdf8a5e12 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/self_destructing_initcode.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/self_destructing_initcode.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai--selfdestruct_contract_initial_balance=0-call_times=0-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Shanghai-blockchain_test--selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x54702b4b5559f63146d68045d756ab4ed3a29873550e834549455638a98a9150" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -144,9 +146,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai--selfdestruct_contract_initial_balance=0-call_times=0-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Shanghai-blockchain_test--selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -195,6 +198,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x473ea11f2e410822a0b89bf67e54a9000c7976cf45aaa87f52f8a796b84bc275" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -289,9 +293,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai--selfdestruct_contract_initial_balance=0-call_times=1-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Shanghai-blockchain_test--selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -340,6 +345,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x9e659fe4451e963bc1920ed7da7e7145e6ae74359fea53070017f17e70e7dbc6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -435,9 +441,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai--selfdestruct_contract_initial_balance=0-call_times=1-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Shanghai-blockchain_test--selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -486,6 +493,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xeab8300c37ef44316512d6b0f03f93def349d0501067bbf95b97f8f498448eb2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -581,9 +589,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai--selfdestruct_contract_initial_balance=100000-call_times=0-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Shanghai-blockchain_test--selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -632,6 +641,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xf9b1843e4a33c564440f2e133f5ff2058e1bd2f3c5a50c202a664a6e2efc8581" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -732,9 +742,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Shanghai--selfdestruct_contract_initial_balance=100000-call_times=0-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Shanghai-blockchain_test--selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -783,6 +794,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xd7ee631bb66bfac796d8243fce5367a91d0e4a9d17403867eccfdd5613311b0a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -883,9 +895,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai--selfdestruct_contract_initial_balance=100000-call_times=1-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Shanghai-blockchain_test--selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -934,6 +947,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xf4392618bba4461fecfabc0b8fb3b3ece1f8f07d54123f9dafe77a439292af4b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1035,9 +1049,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Shanghai--selfdestruct_contract_initial_balance=100000-call_times=1-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Shanghai-blockchain_test--selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1086,6 +1101,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4280b417449f957f64a2f6b30e17cf22ee54b2825ef33c965bb29c8881bbe7fd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1187,9 +1203,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun--selfdestruct_contract_initial_balance=0-call_times=0-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Cancun-blockchain_test--selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1244,6 +1261,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5a8667859326f3acafcd7ec0a816a376086df62e4972c162f2920a444a5cf631" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1352,9 +1370,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun--selfdestruct_contract_initial_balance=0-call_times=0-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Cancun-blockchain_test--selfdestruct_contract_initial_balance_0-call_times_0-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1409,6 +1428,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x369c414b03dddad285bfd1870d9fb5afa93be960ca8f2a6020c328617c4dfccb" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1517,9 +1537,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun--selfdestruct_contract_initial_balance=0-call_times=1-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Cancun-blockchain_test--selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1574,6 +1595,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe749bfdd3e3023e7f67548b03c7c6a1d1ddd869a9ba79760b10895c01dc9c3d8" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1683,9 +1705,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun--selfdestruct_contract_initial_balance=0-call_times=1-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Cancun-blockchain_test--selfdestruct_contract_initial_balance_0-call_times_1-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1740,6 +1763,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x447943e60cbf5f777d101ac1056cd162b9849a778879b3b7580864db82c18d68" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1849,9 +1873,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun--selfdestruct_contract_initial_balance=100000-call_times=0-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Cancun-blockchain_test--selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1906,6 +1931,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8b458dcedf031bafa6afeb0c20cbfdea325c8025adff6d549bca7c28de6a56a1" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2020,9 +2046,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun--selfdestruct_contract_initial_balance=100000-call_times=0-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Cancun-blockchain_test--selfdestruct_contract_initial_balance_100000-call_times_0-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2077,6 +2104,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x835e55395fffcbcbaebb4d56ac349fb209e0fedf0f5d61f822fde3a1efb209ad" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2191,9 +2219,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun--selfdestruct_contract_initial_balance=100000-call_times=1-create_opcode=CREATE": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Cancun-blockchain_test--selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2248,6 +2277,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb04ebc1f6815a4f5e4f351c320b03e93270208b04c33e381e1d4dc6a8cef43da" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2363,9 +2393,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun--selfdestruct_contract_initial_balance=100000-call_times=1-create_opcode=CREATE2": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode[fork_Cancun-blockchain_test--selfdestruct_contract_initial_balance_100000-call_times_1-create_opcode_CREATE2]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2420,6 +2451,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd1fadc551b47d4e15a232f9aa7268ee32465dffff450b4db97da7b1b07ebdb4a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/self_destructing_initcode_create_tx.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/self_destructing_initcode_create_tx.json index 181930e06e5..a5cb6b0a263 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/self_destructing_initcode_create_tx.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/self_destructing_initcode_create_tx.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai--selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance=0-tx_value=0": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test--selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance_0-tx_value_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4fb1e0c117ed3958cec5e568554b46bdbb9215a57b4b575b527320e73970f825" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -135,9 +137,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai--selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance=0-tx_value=100000": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test--selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance_0-tx_value_100000]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -186,6 +189,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xa2d6993bd848b09f50d6de6caf5f1adba2e005650c125a26e782cf74c85f1eb4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -271,9 +275,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai--selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance=100000-tx_value=0": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test--selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance_100000-tx_value_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -322,6 +327,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xa4d1a5685d813306997703ea02337ce4aab5e017060ca083f479135ee0066a48" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -413,9 +419,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai--selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance=100000-tx_value=100000": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode_create_tx[fork_Shanghai-blockchain_test--selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance_100000-tx_value_100000]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -464,6 +471,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xc244851944386609347bed8c43d0404bcc0b6424c89061bb2cc4c5a3fa333561" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -555,9 +563,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun--selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance=0-tx_value=0": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test--selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance_0-tx_value_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -612,6 +621,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc0fa9431a8601be057fd4dcd45e32fbef6f24d8f0546288361925007fd69c6fd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -711,9 +721,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun--selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance=0-tx_value=100000": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test--selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance_0-tx_value_100000]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -768,6 +779,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4dc5745dbf0c453e42ab399a00b53a4b9441cae332894c71ec3b93c38ef77506" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -867,9 +879,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun--selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance=100000-tx_value=0": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test--selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance_100000-tx_value_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -924,6 +937,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xcb7b1d5839dc6ba57d406b6ed589e8753fb4c6d12b75f5940a37b3125c457be9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1029,9 +1043,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun--selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance=100000-tx_value=100000": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_self_destructing_initcode_create_tx[fork_Cancun-blockchain_test--selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-selfdestruct_contract_initial_balance_100000-tx_value_100000]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1086,6 +1101,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0b86d84bd4a926f69024573e4b8f82f98f777e5f61cef6f7c7f782b31cedc794" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/selfdestruct_created_same_block_different_tx.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/selfdestruct_created_same_block_different_tx.json index aba8ef454f1..a74bae70f97 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/selfdestruct_created_same_block_different_tx.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/selfdestruct_created_same_block_different_tx.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address=0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times=1-selfdestruct_contract_initial_balance=0": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address_0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times_1-selfdestruct_contract_initial_balance_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -160,9 +161,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address=0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times=1-selfdestruct_contract_initial_balance=1": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address_0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times_1-selfdestruct_contract_initial_balance_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -327,9 +329,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address=0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times=10-selfdestruct_contract_initial_balance=0": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address_0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times_10-selfdestruct_contract_initial_balance_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -497,9 +500,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address=0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times=10-selfdestruct_contract_initial_balance=1": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_created_same_block_different_tx[fork_Shanghai-blockchain_test-selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address_0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times_10-selfdestruct_contract_initial_balance_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -673,9 +677,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address=0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times=1-selfdestruct_contract_initial_balance=0": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address_0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times_1-selfdestruct_contract_initial_balance_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -862,9 +867,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address=0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times=1-selfdestruct_contract_initial_balance=1": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address_0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times_1-selfdestruct_contract_initial_balance_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1057,9 +1063,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address=0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times=10-selfdestruct_contract_initial_balance=0": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address_0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times_10-selfdestruct_contract_initial_balance_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1255,9 +1262,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-selfdestruct_contract_address=0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address=0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times=10-selfdestruct_contract_initial_balance=1": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_created_same_block_different_tx[fork_Cancun-blockchain_test-selfdestruct_contract_address_0x6295ee1b4f6dd65047762f924ecd367c17eabf8f-entry_code_address_0xec0e71ad0a90ffe1909d27dac207f7680abba42d-call_times_10-selfdestruct_contract_initial_balance_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/selfdestruct_pre_existing.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/selfdestruct_pre_existing.json index 9bfdf395bb9..6a0a219d60b 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/selfdestruct_pre_existing.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct/selfdestruct_pre_existing.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=0-single_call": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-single_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x289438632bbd3f8d09dbbe8118a95f0f714dc1a0c8ce6c3a6fd89d0a01e5de4f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -139,9 +141,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=0-single_call_self_sendall_recipient": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-single_call_self_sendall_recipient]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -190,6 +193,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xc7c23925eea677d0570d2f1bc2fef27c034e6dcd4d9fa0c8df77996c934a981b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -263,9 +267,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_single_sendall_recipient": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -314,6 +319,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x7ed2d4e7b150ffe094a82d37f28b8f55707c88d7e9ef22397db42c3cb4a6f76b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -412,9 +418,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -463,6 +470,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xe60d5dac19f4d2358273760893993fdba1b28249e8cee545fd5a7e24a668fae2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -593,9 +601,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -644,6 +653,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xd81fdc6b58c2bd45035e1fd383a431152daa9c6a6ccf5b76f58e4711c2aca216" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -758,9 +768,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_different_order": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_different_order]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -809,6 +820,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xaee7fa6554b8a07f30dd51ac0db109859e4bdabe7614643aa243adc003e6f024" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -923,9 +935,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_last": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -974,6 +987,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x02063b3c19875f4ec4f7a6e3099a06997efe29d4a32b42096f80cf52bf2f307c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1081,9 +1095,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=100000-single_call": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-single_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1132,6 +1147,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x8fbedbc0f52ddb7834bdc9c8c0704b9d5986ab849e1c8a109bb2e3e8dff0ba4f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1221,9 +1237,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=100000-single_call_self_sendall_recipient": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-single_call_self_sendall_recipient]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1272,6 +1289,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x0ab60319b849b568039bc2dc16654d4b89fa75e512cf3f87965fd6ec7d529e20" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1345,9 +1363,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_single_sendall_recipient": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1396,6 +1415,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x2d67c4dbf767455b1fd90f2f7d433c9cf285ccc2ea64a3244ed44546f5ba320b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1494,9 +1514,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1545,6 +1566,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x32f1cbb4b2c756460e64a00ac8c164089ae4556e984101c04de01f57a5c03395" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1675,9 +1697,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1726,6 +1749,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x33474cbdcc5a1c83ed170390521aebf8612fbb99a17e0feaac3f81a3e7ed16cc" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1840,9 +1864,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_different_order": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_different_order]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -1891,6 +1916,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xb9e745e17428e71a5bf841692d7258c8b5d4a789bfb0de5e6fcc543ed48638d5" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2005,9 +2031,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Shanghai-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_last": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Shanghai-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2056,6 +2083,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4331d2603e47af489e0ca9ac9be7f8ddb1b6e7b5050a9260e72b8f0db234cc95" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2163,9 +2191,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=0-single_call": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-single_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2220,6 +2249,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb9a4b99f7d7623e0258dcb0824bcd236e301724fcb5d00740d386a34ac63d63f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2331,9 +2361,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=0-single_call_self_sendall_recipient": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-single_call_self_sendall_recipient]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2388,6 +2419,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x09972dd2512a2e92a26abb7747c6a7a0f7c5af47351c63456415abffb0a92c6d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2483,9 +2515,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_single_sendall_recipient": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_single_sendall_recipient]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2540,6 +2573,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xcc7d8a77ef48a2a437bb5b47737351315af059c0c1a34ff3f7b77d09c316a6c3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2660,9 +2694,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2717,6 +2752,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8661cb0beea8bd9283d2176ffb2ebec707554a51459c8eaf23ff51e6cac55ab2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2869,9 +2905,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -2926,6 +2963,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xe79d073126f2e29fdbe181d9f0df5809eabec4b731a4e4cbacde1ddd174db919" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3065,9 +3103,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_different_order": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_different_order]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3122,6 +3161,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb5c92971ee136f42cb16296f8b1b34fc947f4748cf785482d306d9dde4bee5cc" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3261,9 +3301,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=0-multiple_calls_multiple_sendall_recipients_including_self_last": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_0-multiple_calls_multiple_sendall_recipients_including_self_last]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3318,6 +3359,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4e1f7a918364af0c4fd6d8e615e21c0f564b25270adac8aa4ed863f8f759a2a7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3448,9 +3490,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=100000-single_call": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-single_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3505,6 +3548,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x52d9c967919800c76d9cd2b96bcfbeed9c7f504246b74f39ca8229d782be13ef" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3616,9 +3660,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=100000-single_call_self_sendall_recipient": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-single_call_self_sendall_recipient]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3673,6 +3718,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd29f337c6afd0add201c87f6bc1fdce2ee884f08cfa8950eb2709ccf2b160f33" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3769,9 +3815,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_single_sendall_recipient": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_single_sendall_recipient]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -3826,6 +3873,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x0499ac58a9bf1a207cebf134ea048719298ce7fc871c4eee71fad15bb8815c91" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3946,9 +3994,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4003,6 +4052,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa585ceb55ac3cab84177cf870893a8c8eb38f0dcb97742b7643a6069f0a0fcba" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4155,9 +4205,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4212,6 +4263,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb0da04c0cc5c7817c183e02916b8a2c332a21bd1dcbf2ce74119dcaa75701b8b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4352,9 +4404,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_different_order": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_different_order]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4409,6 +4462,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x53d341db9ff827ef262722a6884a0aafa71664d7ebeafaa859e39eac8e449e72" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4548,9 +4602,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-pre_existing-selfdestruct_contract_initial_balance=100000-multiple_calls_multiple_sendall_recipients_including_self_last": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct.py::test_selfdestruct_pre_existing[fork_Cancun-blockchain_test-pre_existing-selfdestruct_contract_initial_balance_100000-multiple_calls_multiple_sendall_recipients_including_self_last]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -4605,6 +4660,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd502973975d360b3c1d4d7e287b41779dc4348ad5fc9d888983ea0b000f34a56" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct_revert/selfdestruct_created_in_same_tx_with_revert.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct_revert/selfdestruct_created_in_same_tx_with_revert.json index ddbfe91303c..37b4bfbfe7c 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct_revert/selfdestruct_created_in_same_tx_with_revert.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct_revert/selfdestruct_created_in_same_tx_with_revert.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-no_outer_selfdestruct": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py::test_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-no_outer_selfdestruct]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x696759a0e5487a198e4f559731f5194a3e2dec7530e3b3e68b4117011d987556" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -157,9 +159,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-outer_selfdestruct_before_inner_call": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py::test_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_before_inner_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -214,6 +217,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x9073b51d4b84a70cfe2a247c97aedf27e24be60cdfea486aecf46324816e2091" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -313,9 +317,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-outer_selfdestruct_after_inner_call": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py::test_selfdestruct_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_after_inner_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -370,6 +375,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb47fa4ee6d4e22d19a331b0d1375894dc9f4ddbbf18b56a2bf3abdffdc78cd70" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct_revert/selfdestruct_not_created_in_same_tx_with_revert.json b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct_revert/selfdestruct_not_created_in_same_tx_with_revert.json index 916b5d1fcd9..0cf2c5f19d8 100644 --- a/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct_revert/selfdestruct_not_created_in_same_tx_with_revert.json +++ b/tests/execution-spec-tests/cancun/eip6780_selfdestruct/selfdestruct_revert/selfdestruct_not_created_in_same_tx_with_revert.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-no_outer_selfdestruct": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py::test_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-no_outer_selfdestruct]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x4356b0805563fcc5da0aebf25a92dc313cd368f2023e7286e4b1bc8650013b3c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -149,9 +151,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-outer_selfdestruct_before_inner_call": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py::test_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_before_inner_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -206,6 +209,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xeed2a3897dbb0240805d8993a14acb20ec566f2bdb058418c55c0e54c2afa751" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -306,9 +310,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-outer_selfdestruct_after_inner_call": { + "tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert.py::test_selfdestruct_not_created_in_same_tx_with_revert[fork_Cancun-blockchain_test-outer_selfdestruct_after_inner_call]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-6780.md", "reference-spec-version": "2f8299df31bb8173618901a03a8366a3183479b0" }, @@ -363,6 +368,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x36beb7d71290fea3d01137335ca6a9479d3bae626289c2022a3afbd7bfb741be" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_before_fork.json b/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_before_fork.json index b86805d3316..6b6c76406f7 100644 --- a/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_before_fork.json +++ b/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_before_fork.json @@ -1,17 +1,18 @@ { - "000-fork=ShanghaiToCancunAtTime15k": { + "tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py::test_blobbasefee_before_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7516.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, "network": "ShanghaiToCancunAtTime15k", - "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a018cc8876986e8602693ab260c901ff4ad210384cf38dc3a29eb1af6ebd90ad67a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a060277285508df7e56b1e464ee2913444904d7678eb3c3f79987b7c528c93e13aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x18cc8876986e8602693ab260c901ff4ad210384cf38dc3a29eb1af6ebd90ad67", + "stateRoot": "0x60277285508df7e56b1e464ee2913444904d7678eb3c3f79987b7c528c93e13a", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -25,30 +26,30 @@ "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x70c7d847b3d5b0bc5d95b72469efcf72bc72703fddfa9902b8ae0def3ac6a6d4" + "hash": "0x350bc7c85ec64577ae1e3288bc049077a32f2e744e5b84ff627c85ad67194a1c" }, "blocks": [ { - "rlp": "0xf90289f9021ca070c7d847b3d5b0bc5d95b72469efcf72bc72703fddfa9902b8ae0def3ac6a6d4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02c13e516d1ecc6fa99a1d3b08ed18c04078332685e936835c7717cc53529c73da00fe91412a1972bfc336f46726e2d5616b033ad0b7b58b5abb3cf596c18c936fca06a1dcd11dc97c554adeef87bed26d022694d8408c135fc704d95b87b116112a2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830164de821d4c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f866f86480843b9aca00830f4240940000000000000000000000000000000000000100808025a078bda1e1cb92b405bf1c49f292286f622ebd05ea52b0d7793e7e614c560c86d3a07e9b6734e2203cd58a048e8b1750bea1d9ccdf10f5d612dad80550fdd2081c4ac0c0", + "rlp": "0xf90289f9021ca0350bc7c85ec64577ae1e3288bc049077a32f2e744e5b84ff627c85ad67194a1ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa048cb116749ead88853f48c2dba396bb12b98ada3e95a2cec47f41bd79623f93aa00fe91412a1972bfc336f46726e2d5616b033ad0b7b58b5abb3cf596c18c936fca0fe1031d3afe85b36192c7e26089083ffcadf2a006869c9d3eaae3056dceaea4bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083015d0e821d4c00a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f866f86480843b9aca00830f4240940000000000000000000000000000000000000100808025a078bda1e1cb92b405bf1c49f292286f622ebd05ea52b0d7793e7e614c560c86d3a07e9b6734e2203cd58a048e8b1750bea1d9ccdf10f5d612dad80550fdd2081c4ac0c0", "blockHeader": { - "parentHash": "0x70c7d847b3d5b0bc5d95b72469efcf72bc72703fddfa9902b8ae0def3ac6a6d4", + "parentHash": "0x350bc7c85ec64577ae1e3288bc049077a32f2e744e5b84ff627c85ad67194a1c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x2c13e516d1ecc6fa99a1d3b08ed18c04078332685e936835c7717cc53529c73d", + "stateRoot": "0x48cb116749ead88853f48c2dba396bb12b98ada3e95a2cec47f41bd79623f93a", "transactionsTrie": "0x0fe91412a1972bfc336f46726e2d5616b033ad0b7b58b5abb3cf596c18c936fc", - "receiptTrie": "0x6a1dcd11dc97c554adeef87bed26d022694d8408c135fc704d95b87b116112a2", + "receiptTrie": "0xfe1031d3afe85b36192c7e26089083ffcadf2a006869c9d3eaae3056dceaea4b", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x0164de", + "gasUsed": "0x015d0e", "timestamp": "0x1d4c", - "extraData": "0x", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x6acb38ec872dc33867a41858b0051aaa7e872cbea04eb07eb6319323b4839f43" + "hash": "0x1cb85681e32a411c912733f8db11f07d8749fd351f7c1fda8de25e40847421c4" }, "blocknumber": "1", "transactions": [ @@ -69,102 +70,17 @@ ], "uncleHeaders": [], "withdrawals": [] - }, - { - "rlp": "0xf90289f9021ca06acb38ec872dc33867a41858b0051aaa7e872cbea04eb07eb6319323b4839f43a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e0b40d49023f154b2f47905d82b40a9a48919116156f7e81a88e5d6a71a54ec5a0bbf0ef003e447b033280e14920471e3d1079e0420ff336551a69bc058282826fa06a1dcd11dc97c554adeef87bed26d022694d8408c135fc704d95b87b116112a2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a0000830164de823a9780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f866f86401843b9aca00830f4240940000000000000000000000000000000000000100808025a05a305eeb6255567555610c96fec7c90e285aef7d705790174cacff4095e58b5aa009a597b4bbf42f22c544ca3b6e8988ee7c304bb0c9c2470dba9ca1c958625402c0c0", - "blockHeader": { - "parentHash": "0x6acb38ec872dc33867a41858b0051aaa7e872cbea04eb07eb6319323b4839f43", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe0b40d49023f154b2f47905d82b40a9a48919116156f7e81a88e5d6a71a54ec5", - "transactionsTrie": "0xbbf0ef003e447b033280e14920471e3d1079e0420ff336551a69bc058282826f", - "receiptTrie": "0x6a1dcd11dc97c554adeef87bed26d022694d8408c135fc704d95b87b116112a2", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x02", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x0164de", - "timestamp": "0x3a97", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x14cd18f629cf66ae0ed8784dc14c285aa161aab2b1c827e8671c03c2289632c3" - }, - "blocknumber": "2", - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x3b9aca00", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x5a305eeb6255567555610c96fec7c90e285aef7d705790174cacff4095e58b5a", - "s": "0x09a597b4bbf42f22c544ca3b6e8988ee7c304bb0c9c2470dba9ca1c958625402", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] - }, - { - "rlp": "0xf902abf9023ea014cd18f629cf66ae0ed8784dc14c285aa161aab2b1c827e8671c03c2289632c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa012e734ea7f945e6023a2a8345a1541910b7c8da21bac2d2a72a2e89c85cc10baa00b07513b1742c08217da6ca0ee521005b23f3b6ea638c6a368132e4df359e09ea0029086b067b48abbd5d8cdade9e4161e288342af5850ca5c07d626db2c52c1b6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800388016345785d8a000082b29d823a9880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f866f86402843b9aca00830f4240940000000000000000000000000000000000000100808026a080830b778f8433c8b58035d9c099d6aa7cd892b3dc68569b703da1eb91add652a06d52d9f26efdcdf3f4087f02cd961cae2fd7a6773140e4bf867e49aacaf9d87fc0c0", - "blockHeader": { - "parentHash": "0x14cd18f629cf66ae0ed8784dc14c285aa161aab2b1c827e8671c03c2289632c3", - "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x12e734ea7f945e6023a2a8345a1541910b7c8da21bac2d2a72a2e89c85cc10ba", - "transactionsTrie": "0x0b07513b1742c08217da6ca0ee521005b23f3b6ea638c6a368132e4df359e09e", - "receiptTrie": "0x029086b067b48abbd5d8cdade9e4161e288342af5850ca5c07d626db2c52c1b6", - "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x00", - "number": "0x03", - "gasLimit": "0x016345785d8a0000", - "gasUsed": "0xb29d", - "timestamp": "0x3a98", - "extraData": "0x", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "nonce": "0x0000000000000000", - "baseFeePerGas": "0x07", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "blobGasUsed": "0x00", - "excessBlobGas": "0x00", - "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0a12f04b95fa2b71f981c87072986cc40e1713e603300b3373131175ba906a2a" - }, - "blocknumber": "3", - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x3b9aca00", - "gasLimit": "0x0f4240", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x80830b778f8433c8b58035d9c099d6aa7cd892b3dc68569b703da1eb91add652", - "s": "0x6d52d9f26efdcdf3f4087f02cd961cae2fd7a6773140e4bf867e49aacaf9d87f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [], - "withdrawals": [] } ], - "lastblockhash": "0x0a12f04b95fa2b71f981c87072986cc40e1713e603300b3373131175ba906a2a", + "lastblockhash": "0x1cb85681e32a411c912733f8db11f07d8749fd351f7c1fda8de25e40847421c4", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600060006000600073000000000000000000000000000000000000020061fffff14355", - "storage": {} + "storage": { + "0x01": "0x01" + } }, "0x0000000000000000000000000000000000000200": { "nonce": "0x00", @@ -190,9 +106,7 @@ "nonce": "0x00", "balance": "0x00", "code": "0x6000600060006000600073000000000000000000000000000000000000020061fffff14355", - "storage": { - "0x03": "0x01" - } + "storage": {} }, "0x0000000000000000000000000000000000000200": { "nonce": "0x00", @@ -204,19 +118,17 @@ "nonce": "0x01", "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x1a99": "0x3a98" - } + "storage": {} }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0xcfc4108fd391", + "balance": "0x514547cf809e", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x03", - "balance": "0x1d6329f1c35ca4bfabb9f4913bef57c600", + "nonce": "0x01", + "balance": "0x1d6329f1c35ca4bfabb9f50fbab826f400", "code": "0x", "storage": {} } diff --git a/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_during_fork.json b/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_during_fork.json new file mode 100644 index 00000000000..182b032002c --- /dev/null +++ b/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_during_fork.json @@ -0,0 +1,230 @@ +{ + "tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py::test_blobbasefee_during_fork[fork_ShanghaiToCancunAtTime15k-blockchain_test]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", + "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7516.md", + "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" + }, + "network": "ShanghaiToCancunAtTime15k", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0e9e575281143d92a09651e0d994297e00088a008b1f01af5bc9edaf5053cdb71a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xe9e575281143d92a09651e0d994297e00088a008b1f01af5bc9edaf5053cdb71", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x7fd744c32a1758e5c815d49034a538f8a22a22101c6e5a4d2f31a69a2a5917ad" + }, + "blocks": [ + { + "rlp": "0xf90289f9021ca07fd744c32a1758e5c815d49034a538f8a22a22101c6e5a4d2f31a69a2a5917ada01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa071f45622b46a0be10d8c06a67ddc993933ba8f08922525c0768855dbd4d9f38aa00fe91412a1972bfc336f46726e2d5616b033ad0b7b58b5abb3cf596c18c936fca0fe1031d3afe85b36192c7e26089083ffcadf2a006869c9d3eaae3056dceaea4bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083015d0e821d4c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f866f86480843b9aca00830f4240940000000000000000000000000000000000000100808025a078bda1e1cb92b405bf1c49f292286f622ebd05ea52b0d7793e7e614c560c86d3a07e9b6734e2203cd58a048e8b1750bea1d9ccdf10f5d612dad80550fdd2081c4ac0c0", + "blockHeader": { + "parentHash": "0x7fd744c32a1758e5c815d49034a538f8a22a22101c6e5a4d2f31a69a2a5917ad", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x71f45622b46a0be10d8c06a67ddc993933ba8f08922525c0768855dbd4d9f38a", + "transactionsTrie": "0x0fe91412a1972bfc336f46726e2d5616b033ad0b7b58b5abb3cf596c18c936fc", + "receiptTrie": "0xfe1031d3afe85b36192c7e26089083ffcadf2a006869c9d3eaae3056dceaea4b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x015d0e", + "timestamp": "0x1d4c", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xbb024e45e70769a0dfea6cda3477651b26200bbbcaba46510eca5b3c994c6c2a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x3b9aca00", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x25", + "r": "0x78bda1e1cb92b405bf1c49f292286f622ebd05ea52b0d7793e7e614c560c86d3", + "s": "0x7e9b6734e2203cd58a048e8b1750bea1d9ccdf10f5d612dad80550fdd2081c4a", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf90289f9021ca0bb024e45e70769a0dfea6cda3477651b26200bbbcaba46510eca5b3c994c6c2aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0612186557d411e0af77103bbb7f2dfd57e735a7fd31723b5ea86cc4411b0c1cfa0bbf0ef003e447b033280e14920471e3d1079e0420ff336551a69bc058282826fa0fe1031d3afe85b36192c7e26089083ffcadf2a006869c9d3eaae3056dceaea4bb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800288016345785d8a000083015d0e823a9780a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f866f86401843b9aca00830f4240940000000000000000000000000000000000000100808025a05a305eeb6255567555610c96fec7c90e285aef7d705790174cacff4095e58b5aa009a597b4bbf42f22c544ca3b6e8988ee7c304bb0c9c2470dba9ca1c958625402c0c0", + "blockHeader": { + "parentHash": "0xbb024e45e70769a0dfea6cda3477651b26200bbbcaba46510eca5b3c994c6c2a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x612186557d411e0af77103bbb7f2dfd57e735a7fd31723b5ea86cc4411b0c1cf", + "transactionsTrie": "0xbbf0ef003e447b033280e14920471e3d1079e0420ff336551a69bc058282826f", + "receiptTrie": "0xfe1031d3afe85b36192c7e26089083ffcadf2a006869c9d3eaae3056dceaea4b", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x02", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x015d0e", + "timestamp": "0x3a97", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xaaf20a877b0d6e351e380cf2496761c1fab7a188fc8a2ccd7a382a14f899cfff" + }, + "blocknumber": "2", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x01", + "gasPrice": "0x3b9aca00", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x25", + "r": "0x5a305eeb6255567555610c96fec7c90e285aef7d705790174cacff4095e58b5a", + "s": "0x09a597b4bbf42f22c544ca3b6e8988ee7c304bb0c9c2470dba9ca1c958625402", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + }, + { + "rlp": "0xf902abf9023ea0aaf20a877b0d6e351e380cf2496761c1fab7a188fc8a2ccd7a382a14f899cfffa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aa3a5da509c2d0b5d0bd44387bea2a9a0cec12fd28ca40afea49df3c9b52c5b2a00b07513b1742c08217da6ca0ee521005b23f3b6ea638c6a368132e4df359e09ea0029086b067b48abbd5d8cdade9e4161e288342af5850ca5c07d626db2c52c1b6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800388016345785d8a000082b29d823a9880a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f866f86402843b9aca00830f4240940000000000000000000000000000000000000100808026a080830b778f8433c8b58035d9c099d6aa7cd892b3dc68569b703da1eb91add652a06d52d9f26efdcdf3f4087f02cd961cae2fd7a6773140e4bf867e49aacaf9d87fc0c0", + "blockHeader": { + "parentHash": "0xaaf20a877b0d6e351e380cf2496761c1fab7a188fc8a2ccd7a382a14f899cfff", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xaa3a5da509c2d0b5d0bd44387bea2a9a0cec12fd28ca40afea49df3c9b52c5b2", + "transactionsTrie": "0x0b07513b1742c08217da6ca0ee521005b23f3b6ea638c6a368132e4df359e09e", + "receiptTrie": "0x029086b067b48abbd5d8cdade9e4161e288342af5850ca5c07d626db2c52c1b6", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x03", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xb29d", + "timestamp": "0x3a98", + "extraData": "0x", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc0331cc849aa5a865a312af744ce8a18c1068e49831c65a8f507ab4fae004f7d" + }, + "blocknumber": "3", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x02", + "gasPrice": "0x3b9aca00", + "gasLimit": "0x0f4240", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x80830b778f8433c8b58035d9c099d6aa7cd892b3dc68569b703da1eb91add652", + "s": "0x6d52d9f26efdcdf3f4087f02cd961cae2fd7a6773140e4bf867e49aacaf9d87f", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc0331cc849aa5a865a312af744ce8a18c1068e49831c65a8f507ab4fae004f7d", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600060006000600073000000000000000000000000000000000000020061fffff14355", + "storage": { + "0x01": "0x01", + "0x02": "0x01" + } + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x4a00", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x1d6329f1c35ca4bfabb9f5610000000000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600060006000600073000000000000000000000000000000000000020061fffff14355", + "storage": { + "0x03": "0x01" + } + }, + "0x0000000000000000000000000000000000000200": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x4a00", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x1a99": "0x3a98" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0xcc20bdfc00f1", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x03", + "balance": "0x1d6329f1c35ca4bfabb9f494df41ec0600", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_out_of_gas.json b/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_out_of_gas.json index 8b8fa57636a..6d2165ff97e 100644 --- a/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_out_of_gas.json +++ b/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_out_of_gas.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-enough_gas": { + "tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py::test_blobbasefee_out_of_gas[fork_Cancun-blockchain_test-enough_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7516.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2ab55843c6bc7afb53470d9e6ea1e728a3b7b28dfe8ba517ce3361a1d5f93f3a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -141,9 +143,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-out_of_gas": { + "tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py::test_blobbasefee_out_of_gas[fork_Cancun-blockchain_test-out_of_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7516.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -198,6 +201,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xead0a0d08f3ebf309b12a673edc314505d097c25d57d672f5d741ff9c31f6066" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_stack_overflow.json b/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_stack_overflow.json index 1196db79c2a..770f0c94952 100644 --- a/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_stack_overflow.json +++ b/tests/execution-spec-tests/cancun/eip7516_blobgasfee/blobgasfee_opcode/blobbasefee_stack_overflow.json @@ -1,7 +1,8 @@ { - "000-fork=Cancun-no_stack_overflow": { + "tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py::test_blobbasefee_stack_overflow[fork_Cancun-blockchain_test-no_stack_overflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7516.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -56,6 +57,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2b72fc117208ecab6479f7d73ab75949d0e8f5641406da8f4a0195a931edeefd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -141,9 +143,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-stack_overflow": { + "tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py::test_blobbasefee_stack_overflow[fork_Cancun-blockchain_test-stack_overflow]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7516.md", "reference-spec-version": "2ade0452efe8124378f35284676ddfd16dd56ecd" }, @@ -198,6 +201,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xcff47c4ea643039c966cf5fc46147077c62d3f98695d2c474e39b985686a6bae" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/frontier/opcodes/call_and_callcode_gas_calculation/value_transfer_gas_calculation.json b/tests/execution-spec-tests/frontier/opcodes/call_and_callcode_gas_calculation/value_transfer_gas_calculation.json new file mode 100644 index 00000000000..8536f74915b --- /dev/null +++ b/tests/execution-spec-tests/frontier/opcodes/call_and_callcode_gas_calculation/value_transfer_gas_calculation.json @@ -0,0 +1,1400 @@ +{ + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a041b9eac01a262eb3883ff4fb9e49ad9e1bba444c15d25ddcaddfeb0758c2702fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x41b9eac01a262eb3883ff4fb9e49ad9e1bba444c15d25ddcaddfeb0758c2702f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x90e94703e12059eaea1409420685df42cd6d61cd81a259b9b6875ff98d771fa0" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea090e94703e12059eaea1409420685df42cd6d61cd81a259b9b6875ff98d771fa0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08effc031dda9c64af928b2baf4173986c1b3e0e096d117baff210c2ff9ac0b13a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa09e31fd122b951c7ec2135d015cd9b8c2cea9ca10dd3e20c09605e31818275e02b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830138ac8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0", + "blockHeader": { + "parentHash": "0x90e94703e12059eaea1409420685df42cd6d61cd81a259b9b6875ff98d771fa0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8effc031dda9c64af928b2baf4173986c1b3e0e096d117baff210c2ff9ac0b13", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0x9e31fd122b951c7ec2135d015cd9b8c2cea9ca10dd3e20c09605e31818275e02", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0138ac", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x32fde8a5349b863ec581be9c696f6b2cacb843a1dc7386f0b20b6e2d7b278939" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x32fde8a5349b863ec581be9c696f6b2cacb843a1dc7386f0b20b6e2d7b278939", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b618f0cf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b618f0cf1600055", + "storage": { + "0x00": "0x01" + } + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x02", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0x000000000000000000000000000000000000000c": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ec80000", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b991d19", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0492bb087365ef0971f9a7509364b83eb5325bd8a396a167fabc6056e6047cf09a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x492bb087365ef0971f9a7509364b83eb5325bd8a396a167fabc6056e6047cf09", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xa503d6a5ba8d6400cc175e547f04bc3fd12053899cc13edfbe8c0da629a873bf" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0a503d6a5ba8d6400cc175e547f04bc3fd12053899cc13edfbe8c0da629a873bfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09f397a133b66d1595c10393c37b04659042753b0666fb104e95b12a81dedf11aa03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa0c78f69903f8dcea6faa0db67dafe3b3b3dbf214ce19e6ea481f42c3a25148785b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000082f3eb8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0", + "blockHeader": { + "parentHash": "0xa503d6a5ba8d6400cc175e547f04bc3fd12053899cc13edfbe8c0da629a873bf", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9f397a133b66d1595c10393c37b04659042753b0666fb104e95b12a81dedf11a", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0xc78f69903f8dcea6faa0db67dafe3b3b3dbf214ce19e6ea481f42c3a25148785", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xf3eb", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xf01ed24e80abb9a6ff3e48091d2102730d162a0767d974c440494f69f2ab0dad" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf01ed24e80abb9a6ff3e48091d2102730d162a0767d974c440494f69f2ab0dad", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b618f0bf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b618f0bf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ec80000", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9afe60", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ae65a69aec6bf2d3e2cd3e999188fcb93d198ce5a5e458ffbc27612cfd72ebaaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xae65a69aec6bf2d3e2cd3e999188fcb93d198ce5a5e458ffbc27612cfd72ebaa", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x9fb245bce66bd06f7e81b0e37730c6022f13f800123c40daab04f6d95025c320" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda09fb245bce66bd06f7e81b0e37730c6022f13f800123c40daab04f6d95025c320a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0965be8b0442f21b378be1deb4385712a6dfb5e845352183ec3140ec3e16455e6a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa09ac32c99def78b89871d29d4b7d929861ad3d9e967097f3bfc5bedce46768f6db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000082d7048203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0", + "blockHeader": { + "parentHash": "0x9fb245bce66bd06f7e81b0e37730c6022f13f800123c40daab04f6d95025c320", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x965be8b0442f21b378be1deb4385712a6dfb5e845352183ec3140ec3e16455e6", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0x9ac32c99def78b89871d29d4b7d929861ad3d9e967097f3bfc5bedce46768f6d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd704", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x5f9fd4ec34f0713b4cfb2b1e152fbf39456357b55882b0ded6d697d4cf33460a" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x5f9fd4ec34f0713b4cfb2b1e152fbf39456357b55882b0ded6d697d4cf33460a", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b612d64f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b612d64f1600055", + "storage": { + "0x00": "0x01" + } + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ec80000", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9bc8b1", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_London-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fa42190a2bd6191c0621bf357486f1ee6a6413f696ec254607a1430fe929725da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfa42190a2bd6191c0621bf357486f1ee6a6413f696ec254607a1430fe929725d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x2caefb25fde9d5cfc43ae07c88c663c8d80fc6b954cc8e04c31f058888cb3b17" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda02caefb25fde9d5cfc43ae07c88c663c8d80fc6b954cc8e04c31f058888cb3b17a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d12f84a791ca5dd86cdc8c10105bf437f1ebecec1d7a02332b4c36a80f91b8c8a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa0b147ce6d42a8d0fce22475254865257fdcf029a02332ba7e718b42f0a6c01063b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008292438203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0", + "blockHeader": { + "parentHash": "0x2caefb25fde9d5cfc43ae07c88c663c8d80fc6b954cc8e04c31f058888cb3b17", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd12f84a791ca5dd86cdc8c10105bf437f1ebecec1d7a02332b4c36a80f91b8c8", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0xb147ce6d42a8d0fce22475254865257fdcf029a02332ba7e718b42f0a6c01063", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x9243", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x65497a5431d32e48ea75401a1d745c14af071574899d82adec733014285bb6cd" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x65497a5431d32e48ea75401a1d745c14af071574899d82adec733014285bb6cd", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b612d63f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b612d63f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674ec80000", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9da9f8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a041b9eac01a262eb3883ff4fb9e49ad9e1bba444c15d25ddcaddfeb0758c2702fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x41b9eac01a262eb3883ff4fb9e49ad9e1bba444c15d25ddcaddfeb0758c2702f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x1b79709bd808fceb0ec5fe17eb9f506269258bd3a927c2cd76a0954ee07fe962" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba01b79709bd808fceb0ec5fe17eb9f506269258bd3a927c2cd76a0954ee07fe962a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ffee80495fd83ac33d0d21bb1843a1fca07717ccf031bf8983bef31f6afb76c0a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa09e31fd122b951c7ec2135d015cd9b8c2cea9ca10dd3e20c09605e31818275e02b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830138ac8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0", + "blockHeader": { + "parentHash": "0x1b79709bd808fceb0ec5fe17eb9f506269258bd3a927c2cd76a0954ee07fe962", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xffee80495fd83ac33d0d21bb1843a1fca07717ccf031bf8983bef31f6afb76c0", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0x9e31fd122b951c7ec2135d015cd9b8c2cea9ca10dd3e20c09605e31818275e02", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0138ac", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x2f656b0ce4bdc0c32093018b36c17eca286af62c52411f6cbfe4d4c51c856311" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2f656b0ce4bdc0c32093018b36c17eca286af62c52411f6cbfe4d4c51c856311", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b618f0cf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b618f0cf1600055", + "storage": { + "0x00": "0x01" + } + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x02", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0x000000000000000000000000000000000000000c": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b991d19", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0492bb087365ef0971f9a7509364b83eb5325bd8a396a167fabc6056e6047cf09a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x492bb087365ef0971f9a7509364b83eb5325bd8a396a167fabc6056e6047cf09", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x96e7a99fc3664c50483b5f2ac71b3163fdd82b02aa5dc41c8c108a7521d9c605" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa096e7a99fc3664c50483b5f2ac71b3163fdd82b02aa5dc41c8c108a7521d9c605a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0921595a07a92777e5c97d1a86c7e02ca659d0aa8c4a9ee66bb4767900ce20a2fa03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa0c78f69903f8dcea6faa0db67dafe3b3b3dbf214ce19e6ea481f42c3a25148785b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f3eb8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0", + "blockHeader": { + "parentHash": "0x96e7a99fc3664c50483b5f2ac71b3163fdd82b02aa5dc41c8c108a7521d9c605", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x921595a07a92777e5c97d1a86c7e02ca659d0aa8c4a9ee66bb4767900ce20a2f", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0xc78f69903f8dcea6faa0db67dafe3b3b3dbf214ce19e6ea481f42c3a25148785", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xf3eb", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x677ff0d8e18f807a76f380b580aa33ca9ddb54bbcc170ef869bdfff0fba128bb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x677ff0d8e18f807a76f380b580aa33ca9ddb54bbcc170ef869bdfff0fba128bb", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b618f0bf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b618f0bf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9afe60", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ae65a69aec6bf2d3e2cd3e999188fcb93d198ce5a5e458ffbc27612cfd72ebaaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xae65a69aec6bf2d3e2cd3e999188fcb93d198ce5a5e458ffbc27612cfd72ebaa", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xc6b89ef9ab4502585eb9ef53f81244234244e6c06a32f1d386d1f560bbb4976f" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa0c6b89ef9ab4502585eb9ef53f81244234244e6c06a32f1d386d1f560bbb4976fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a88137a8fa4545310be68b1c436437ac188806f0261b930aaaf994b1d344ec3a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa09ac32c99def78b89871d29d4b7d929861ad3d9e967097f3bfc5bedce46768f6db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d7048203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0", + "blockHeader": { + "parentHash": "0xc6b89ef9ab4502585eb9ef53f81244234244e6c06a32f1d386d1f560bbb4976f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1a88137a8fa4545310be68b1c436437ac188806f0261b930aaaf994b1d344ec3", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0x9ac32c99def78b89871d29d4b7d929861ad3d9e967097f3bfc5bedce46768f6d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd704", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xfbbf93496bd682dae647b43707d2468323fd6e010a48767fa8872abe3d1fbee9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xfbbf93496bd682dae647b43707d2468323fd6e010a48767fa8872abe3d1fbee9", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b612d64f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b612d64f1600055", + "storage": { + "0x00": "0x01" + } + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9bc8b1", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_Paris-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fa42190a2bd6191c0621bf357486f1ee6a6413f696ec254607a1430fe929725da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfa42190a2bd6191c0621bf357486f1ee6a6413f696ec254607a1430fe929725d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xb63bcc1ac3044fb74c903fdc9f613377e996caa2d0ff4d6c5a70c49cab91b61e" + }, + "blocks": [ + { + "rlp": "0xf90262f901faa0b63bcc1ac3044fb74c903fdc9f613377e996caa2d0ff4d6c5a70c49cab91b61ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02a3b4e0158fe9b33180236c418c13349f9c14fca71ed6df2387a3cceaa86f834a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa0b147ce6d42a8d0fce22475254865257fdcf029a02332ba7e718b42f0a6c01063b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008292438203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0", + "blockHeader": { + "parentHash": "0xb63bcc1ac3044fb74c903fdc9f613377e996caa2d0ff4d6c5a70c49cab91b61e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2a3b4e0158fe9b33180236c418c13349f9c14fca71ed6df2387a3cceaa86f834", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0xb147ce6d42a8d0fce22475254865257fdcf029a02332ba7e718b42f0a6c01063", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x9243", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x0893f63088f469657573d53e3b79b0ddb1dbbace835364705149e008195116e9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x0893f63088f469657573d53e3b79b0ddb1dbbace835364705149e008195116e9", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b612d63f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b612d63f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9da9f8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALL-caller_gas_limit_36620-is_sufficient_gas_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a041b9eac01a262eb3883ff4fb9e49ad9e1bba444c15d25ddcaddfeb0758c2702fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x41b9eac01a262eb3883ff4fb9e49ad9e1bba444c15d25ddcaddfeb0758c2702f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x731347f79aa46cf6883184208310c85e5731dee71f5f159d76e86f557d840bc0" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca0731347f79aa46cf6883184208310c85e5731dee71f5f159d76e86f557d840bc0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ffee80495fd83ac33d0d21bb1843a1fca07717ccf031bf8983bef31f6afb76c0a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa09e31fd122b951c7ec2135d015cd9b8c2cea9ca10dd3e20c09605e31818275e02b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830138ac8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0c0", + "blockHeader": { + "parentHash": "0x731347f79aa46cf6883184208310c85e5731dee71f5f159d76e86f557d840bc0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xffee80495fd83ac33d0d21bb1843a1fca07717ccf031bf8983bef31f6afb76c0", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0x9e31fd122b951c7ec2135d015cd9b8c2cea9ca10dd3e20c09605e31818275e02", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x0138ac", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xce673de342bb13082e87d7b1238cd2b8a3aed11566f1becb4a067a36cec6249f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xce673de342bb13082e87d7b1238cd2b8a3aed11566f1becb4a067a36cec6249f", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b618f0cf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b618f0cf1600055", + "storage": { + "0x00": "0x01" + } + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x02", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0x000000000000000000000000000000000000000c": { + "nonce": "0x00", + "balance": "0x01", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b991d19", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALL-caller_gas_limit_36619-is_sufficient_gas_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0492bb087365ef0971f9a7509364b83eb5325bd8a396a167fabc6056e6047cf09a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x492bb087365ef0971f9a7509364b83eb5325bd8a396a167fabc6056e6047cf09", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x607158dd0a61efde1baf67ff883ab4b7b7ea9ce02d42ecaac697c49c925e5a49" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba0607158dd0a61efde1baf67ff883ab4b7b7ea9ce02d42ecaac697c49c925e5a49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0921595a07a92777e5c97d1a86c7e02ca659d0aa8c4a9ee66bb4767900ce20a2fa03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa0c78f69903f8dcea6faa0db67dafe3b3b3dbf214ce19e6ea481f42c3a25148785b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082f3eb8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0c0", + "blockHeader": { + "parentHash": "0x607158dd0a61efde1baf67ff883ab4b7b7ea9ce02d42ecaac697c49c925e5a49", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x921595a07a92777e5c97d1a86c7e02ca659d0aa8c4a9ee66bb4767900ce20a2f", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0xc78f69903f8dcea6faa0db67dafe3b3b3dbf214ce19e6ea481f42c3a25148785", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xf3eb", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xcabff9f1ed098fdf2475ada618c0547a3d924283c9d3d4b94d3e38d748948fa8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xcabff9f1ed098fdf2475ada618c0547a3d924283c9d3d4b94d3e38d748948fa8", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b618f0bf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b618f0bf1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af1", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9afe60", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11620-is_sufficient_gas_True]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ae65a69aec6bf2d3e2cd3e999188fcb93d198ce5a5e458ffbc27612cfd72ebaaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xae65a69aec6bf2d3e2cd3e999188fcb93d198ce5a5e458ffbc27612cfd72ebaa", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x7e554806cf77826865e95a520afa13a6e7d9f4b2e7c9179e949e54d5d17ff9be" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba07e554806cf77826865e95a520afa13a6e7d9f4b2e7c9179e949e54d5d17ff9bea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01a88137a8fa4545310be68b1c436437ac188806f0261b930aaaf994b1d344ec3a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa09ac32c99def78b89871d29d4b7d929861ad3d9e967097f3bfc5bedce46768f6db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d7048203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0c0", + "blockHeader": { + "parentHash": "0x7e554806cf77826865e95a520afa13a6e7d9f4b2e7c9179e949e54d5d17ff9be", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1a88137a8fa4545310be68b1c436437ac188806f0261b930aaaf994b1d344ec3", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0x9ac32c99def78b89871d29d4b7d929861ad3d9e967097f3bfc5bedce46768f6d", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0xd704", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x479f8d708116b7ec40a5473b5cebfbf1c267fd3d459c5ff5d2599199dfd2a03d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x479f8d708116b7ec40a5473b5cebfbf1c267fd3d459c5ff5d2599199dfd2a03d", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b612d64f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b612d64f1600055", + "storage": { + "0x00": "0x01" + } + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9bc8b1", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_call_and_callcode_gas_calculation.py::test_value_transfer_gas_calculation[fork_Shanghai-blockchain_test-callee_opcode_CALLCODE-caller_gas_limit_11619-is_sufficient_gas_False]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fa42190a2bd6191c0621bf357486f1ee6a6413f696ec254607a1430fe929725da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfa42190a2bd6191c0621bf357486f1ee6a6413f696ec254607a1430fe929725d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x14e35b65ebd210df9047c88a16b7426c72b25a033068c6b363c720698386ccdd" + }, + "blocks": [ + { + "rlp": "0xf90284f9021ba014e35b65ebd210df9047c88a16b7426c72b25a033068c6b363c720698386ccdda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02a3b4e0158fe9b33180236c418c13349f9c14fca71ed6df2387a3cceaa86f834a03c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72fa0b147ce6d42a8d0fce22475254865257fdcf029a02332ba7e718b42f0a6c01063b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008292438203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f86080078307a12094000000000000000000000000000000000000000a018026a006575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8a026be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343c0c0", + "blockHeader": { + "parentHash": "0x14e35b65ebd210df9047c88a16b7426c72b25a033068c6b363c720698386ccdd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2a3b4e0158fe9b33180236c418c13349f9c14fca71ed6df2387a3cceaa86f834", + "transactionsTrie": "0x3c01549d57daaa663cfb5e1de0ae0443632d56b9e68d076f862a21e3c39ce72f", + "receiptTrie": "0xb147ce6d42a8d0fce22475254865257fdcf029a02332ba7e718b42f0a6c01063", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x9243", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xba2bd14005302fdf8881325e82f5a509cc12d934412f5f087574ff2b0f8e2d1b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x07", + "gasLimit": "0x07a120", + "to": "0x000000000000000000000000000000000000000a", + "value": "0x01", + "data": "0x", + "v": "0x26", + "r": "0x06575b88076d23a09bb8dba0d73d99b8e500a883f341fee78184e458b00db7e8", + "s": "0x26be9e5301ade58afbb58bed84fdb2709288b0ec3d2d67a6d1e7530a07c8e343", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xba2bd14005302fdf8881325e82f5a509cc12d934412f5f087574ff2b0f8e2d1b", + "pre": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006000600b612d63f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x0ba1a9ce", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x000000000000000000000000000000000000000a": { + "nonce": "0x01", + "balance": "0x04", + "code": "0x60006000600060006000600b612d63f1600055", + "storage": {} + }, + "0x000000000000000000000000000000000000000b": { + "nonce": "0x01", + "balance": "0x03", + "code": "0x60006000600060006001600c5af2", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x0b9da9f8", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + } +} \ No newline at end of file diff --git a/tests/execution-spec-tests/frontier/opcodes/dup/dup.json b/tests/execution-spec-tests/frontier/opcodes/dup/dup.json index 5d43be2bcaa..6cb06af3de4 100644 --- a/tests/execution-spec-tests/frontier/opcodes/dup/dup.json +++ b/tests/execution-spec-tests/frontier/opcodes/dup/dup.json @@ -1,15 +1,16 @@ { - "000-fork=Frontier": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Frontier", - "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -21,29 +22,30 @@ "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0" + "hash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904" }, "blocks": [ { - "rlp": "0xf90824f901fda0c810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0692b8fc6c9cd6f7fae36df5b598e8e241d8b60f569ca2bfc89ce4343e45e9816a02c4867cfacf11ad250ac757ccd6ab981344de836d72794360da2f88f71da2b12a07d13f5bc7a51c0f49f1c5566e2308b3cac24f1040be2f7f183ba0a91b3423e88b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000835829108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90620f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243f860010a8307a12094000000000000000000000000000000000000010180801ba0bffca3f433f61c957d822af37f2b49c57700ff338588d51ea82dc9f720c91d9da0168bb65cc72d586384383f8ceef3a6a60e54b7f4aaa978a6dad271ced54b2ebff860020a8307a12094000000000000000000000000000000000000010280801ba03d9f110bcf0c44be552d4d0ec8387b705604f7d3bb3794dcef4004c38963103ea013bda734f3b5987b8c855f6aab046754506266ff32352ba0898c4eba4acaec8bf860030a8307a12094000000000000000000000000000000000000010380801ba0ecb276d2486664ea779813e599b6f07b7b0df746626d7fdddf60ea425efcb324a0739841682e79a8302dc2e146dfd1eecbdc611d386d42287bcdd94a39bf536020f860040a8307a12094000000000000000000000000000000000000010480801ba002866b5c5fa5dbfa3d88b71a49b82a779c2d508cda631893176782dbcd7435aaa003c380a9af9bfdb3503abcfd5037d3c66f39bb7a19011a3291712d22292c5236f860050a8307a12094000000000000000000000000000000000000010580801ca0c70d2e000e503933d0f1a9a923dc647924811a912adf77692ff7d8f6808d5617a04ad82c92b980580a4a67e4c405e83d560a14201c3fd4b3a42d34dcc19336479af860060a8307a12094000000000000000000000000000000000000010680801ca07f2527f8cbe14e021d270dd214a1820355c7af128001889f57b7f9bba46a6c5da03033308de0d39b9d1b47d28f81df39ceaff330349298c65deb836efe8bce273ff860070a8307a12094000000000000000000000000000000000000010780801ba0ecb720a8764f8967b95dc66e961c6261fceb392c0e90461d7d66113d3c8bbd12a02655e28b751cc2e03a835aa817d884b540765dba12968bc53f53737b4234ee21f860080a8307a12094000000000000000000000000000000000000010880801ba095a2e27c0b296679141c0ad61be112f689b134c04d1773814ddae67fefb2dfbda02955f126d57d8b9777f47c520ffe4285890ca2dd1189e67b3407d6369997e7ecf860090a8307a12094000000000000000000000000000000000000010980801ca02468a120d0ee8c57caac354f56842a1db10813169a328f9f852279668b573907a03971f4c2e6bc0aa666812712719199df6fe37c0e1e122131cdb47d6c0c77b371f8600a0a8307a12094000000000000000000000000000000000000010a80801ba0a3a2018ab0bc2695b94bb85d710f4d07132a94f8c3e0f385824da5fee11899a5a00d2dfe430ea5aaff3de8bbb9339e7485474c8e4e34636f787124a7a91e4d6d6af8600b0a8307a12094000000000000000000000000000000000000010b80801ba0b91968fdb3aecea26094ec30649daa4de81a875bcb1a123e732b8f3f112ce232a02ef8cd85969d8bcef5f4ee1f5d20783b8d9b7466726c15ebf911565825187665f8600c0a8307a12094000000000000000000000000000000000000010c80801ca0dd27e75aa990793205805c22265b04be8299b208fad4f37a7f652ecf32b67390a05aa8cda18521548ff8f95e88f49f309d05cab32de28a0942b8a7a824c50df459f8600d0a8307a12094000000000000000000000000000000000000010d80801ba0fad07ce7139dd4e00266194e6a51c048f74eaba3c0a1b03ece378a810abfaa63a04fec880dafaa5382797b4f88b16138b1f0c4e084817072c77ff9bf17ddd4ac26f8600e0a8307a12094000000000000000000000000000000000000010e80801ca0208b22ab245221bdc5cae6586d2ef019a2c37be41166e04b8abe354c41a8f5b6a032d5d6ef07731cd1684531c775c1727ef6ba75de18cda96d998aaa0c1db0bd68f8600f0a8307a12094000000000000000000000000000000000000010f80801ba0055225ffd3d8b2d19c32aa68cb46e7b52c1d99844fb8b7a53b922ea1649e9c5ba06ae2a1e3b9712354b706d0f4da6ea76ed2f8f75277a51a14a3e0ccf25b85c626c0", + "rlp": "0xf90265f901fda08e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05756c95dabeeefa0924cb2a673ce3b903e68c66df00879db4f8ea48289fe1ffea0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0513e4aeb8586de42993f140fae0e9098c41e28430b7ce3dc92ffebf79094ed92b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", "blockHeader": { - "parentHash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0", + "parentHash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x692b8fc6c9cd6f7fae36df5b598e8e241d8b60f569ca2bfc89ce4343e45e9816", - "transactionsTrie": "0x2c4867cfacf11ad250ac757ccd6ab981344de836d72794360da2f88f71da2b12", - "receiptTrie": "0x7d13f5bc7a51c0f49f1c5566e2308b3cac24f1040be2f7f183ba0a91b3423e88", + "stateRoot": "0x5756c95dabeeefa0924cb2a673ce3b903e68c66df00879db4f8ea48289fe1ffe", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x513e4aeb8586de42993f140fae0e9098c41e28430b7ce3dc92ffebf79094ed92", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x020000", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x582910", + "gasUsed": "0x058291", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xd2873acc945e4c767995d8a7a7a3f7f7ffbffa404e643f5d3c751c0ce4190fb4" + "hash": "0xca27e145a45c6a8ce385349bb13c5fb9284bfa422e57230b9903bc961371abf0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -58,319 +60,6795 @@ "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xbffca3f433f61c957d822af37f2b49c57700ff338588d51ea82dc9f720c91d9d", - "s": "0x168bb65cc72d586384383f8ceef3a6a60e54b7f4aaa978a6dad271ced54b2ebf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0x3d9f110bcf0c44be552d4d0ec8387b705604f7d3bb3794dcef4004c38963103e", - "s": "0x13bda734f3b5987b8c855f6aab046754506266ff32352ba0898c4eba4acaec8b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xecb276d2486664ea779813e599b6f07b7b0df746626d7fdddf60ea425efcb324", - "s": "0x739841682e79a8302dc2e146dfd1eecbdc611d386d42287bcdd94a39bf536020", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0x02866b5c5fa5dbfa3d88b71a49b82a779c2d508cda631893176782dbcd7435aa", - "s": "0x03c380a9af9bfdb3503abcfd5037d3c66f39bb7a19011a3291712d22292c5236", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x1c", - "r": "0xc70d2e000e503933d0f1a9a923dc647924811a912adf77692ff7d8f6808d5617", - "s": "0x4ad82c92b980580a4a67e4c405e83d560a14201c3fd4b3a42d34dcc19336479a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xca27e145a45c6a8ce385349bb13c5fb9284bfa422e57230b9903bc961371abf0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x10", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda033ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c3efcb05a59190b3f2f07b70490c01cbb0929b3d667a410ea9e9b8b2b45cb10ca0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca09610269071c58f1abd95f1876cf81123e731c49b35fa2bc7bc961d0ad568ede2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc3efcb05a59190b3f2f07b70490c01cbb0929b3d667a410ea9e9b8b2b45cb10c", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x9610269071c58f1abd95f1876cf81123e731c49b35fa2bc7bc961d0ad568ede2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdea66d2a59af8ba4ae862ab40fbac2f33aa5558c50859134f5c3f09ef4b10038" + }, + "blocknumber": "1", + "transactions": [ { "type": "0x00", "chainId": "0x01", - "nonce": "0x06", + "nonce": "0x00", "gasPrice": "0x0a", "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", + "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x", "v": "0x1c", - "r": "0x7f2527f8cbe14e021d270dd214a1820355c7af128001889f57b7f9bba46a6c5d", - "s": "0x3033308de0d39b9d1b47d28f81df39ceaff330349298c65deb836efe8bce273f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xecb720a8764f8967b95dc66e961c6261fceb392c0e90461d7d66113d3c8bbd12", - "s": "0x2655e28b751cc2e03a835aa817d884b540765dba12968bc53f53737b4234ee21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0x95a2e27c0b296679141c0ad61be112f689b134c04d1773814ddae67fefb2dfbd", - "s": "0x2955f126d57d8b9777f47c520ffe4285890ca2dd1189e67b3407d6369997e7ec", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdea66d2a59af8ba4ae862ab40fbac2f33aa5558c50859134f5c3f09ef4b10038", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0f", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda06ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a7cc2c7e4715531ecc6c501a9559eae3c1dff908850cf0a428975302b5776916a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0c70ccf611f21c820107376591c66742aeb561080ee3848a726e31c5c5de6d557b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa7cc2c7e4715531ecc6c501a9559eae3c1dff908850cf0a428975302b5776916", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xc70ccf611f21c820107376591c66742aeb561080ee3848a726e31c5c5de6d557", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xcc272a56590afb4340e9cf4ac3c29fbdcbb5ca55de27fa5b4e29655a2b6c1dd5" + }, + "blocknumber": "1", + "transactions": [ { "type": "0x00", "chainId": "0x01", - "nonce": "0x09", + "nonce": "0x00", "gasPrice": "0x0a", "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", + "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x", "v": "0x1c", - "r": "0x2468a120d0ee8c57caac354f56842a1db10813169a328f9f852279668b573907", - "s": "0x3971f4c2e6bc0aa666812712719199df6fe37c0e1e122131cdb47d6c0c77b371", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xa3a2018ab0bc2695b94bb85d710f4d07132a94f8c3e0f385824da5fee11899a5", - "s": "0x0d2dfe430ea5aaff3de8bbb9339e7485474c8e4e34636f787124a7a91e4d6d6a", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xb91968fdb3aecea26094ec30649daa4de81a875bcb1a123e732b8f3f112ce232", - "s": "0x2ef8cd85969d8bcef5f4ee1f5d20783b8d9b7466726c15ebf911565825187665", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xcc272a56590afb4340e9cf4ac3c29fbdcbb5ca55de27fa5b4e29655a2b6c1dd5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0e", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0c164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e49d8dc8173751acad491e498bc1559207ba78c7167ad0520a3d507a359cbd0ba0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0e8e52788f0c8f9270eaa137a55dbc3cf8d32ee613bb1e73deec1eb31f1a435f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe49d8dc8173751acad491e498bc1559207ba78c7167ad0520a3d507a359cbd0b", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xe8e52788f0c8f9270eaa137a55dbc3cf8d32ee613bb1e73deec1eb31f1a435f0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x934c7269e8d4f04028a71cf21bd9938a23e0433a36b1f8955ffb75223e588fd8" + }, + "blocknumber": "1", + "transactions": [ { "type": "0x00", "chainId": "0x01", - "nonce": "0x0c", + "nonce": "0x00", "gasPrice": "0x0a", "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", + "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x", "v": "0x1c", - "r": "0xdd27e75aa990793205805c22265b04be8299b208fad4f37a7f652ecf32b67390", - "s": "0x5aa8cda18521548ff8f95e88f49f309d05cab32de28a0942b8a7a824c50df459", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xfad07ce7139dd4e00266194e6a51c048f74eaba3c0a1b03ece378a810abfaa63", - "s": "0x4fec880dafaa5382797b4f88b16138b1f0c4e084817072c77ff9bf17ddd4ac26", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x934c7269e8d4f04028a71cf21bd9938a23e0433a36b1f8955ffb75223e588fd8", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0d", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07d90b4767975d87abe6aaaa04faa9ba8a128e1a83a0795546d177cd16402973aa0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca04bb79dc6a6b9031e4f42cc80c3d95100a8f0ad609d843d4f9f726246ff0888a3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7d90b4767975d87abe6aaaa04faa9ba8a128e1a83a0795546d177cd16402973a", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x4bb79dc6a6b9031e4f42cc80c3d95100a8f0ad609d843d4f9f726246ff0888a3", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa1f18582948a68f0048e13d1e061d16c1919e9d3040e18d8de39d82438ac17be" + }, + "blocknumber": "1", + "transactions": [ { "type": "0x00", "chainId": "0x01", - "nonce": "0x0e", + "nonce": "0x00", "gasPrice": "0x0a", "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", + "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x", "v": "0x1c", - "r": "0x208b22ab245221bdc5cae6586d2ef019a2c37be41166e04b8abe354c41a8f5b6", - "s": "0x32d5d6ef07731cd1684531c775c1727ef6ba75de18cda96d998aaa0c1db0bd68", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa1f18582948a68f0048e13d1e061d16c1919e9d3040e18d8de39d82438ac17be", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0c", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fd57d66a5ade45830e28cab06c7d33d58eb77a944f7aec2f6f7a44b739cc501fa0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0a3481fcb29b484c5a7e22aa564d2b3aef83de01f5acf47f0e4251a343cbb3d03b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfd57d66a5ade45830e28cab06c7d33d58eb77a944f7aec2f6f7a44b739cc501f", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xa3481fcb29b484c5a7e22aa564d2b3aef83de01f5acf47f0e4251a343cbb3d03", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x0c0380f39d6b80b31e8c77e35a7702e16b65db1d60a1b9041738178d695b2827" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x0c0380f39d6b80b31e8c77e35a7702e16b65db1d60a1b9041738178d695b2827", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0b", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda079148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03681f76ed3b236a37cc74e5a1f66035ed16015d25017ca0657a9293195bcedc3a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0a21e2211e265394961748e7baa0f07b17829e4bcc527f340bd873df32008faedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3681f76ed3b236a37cc74e5a1f66035ed16015d25017ca0657a9293195bcedc3", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xa21e2211e265394961748e7baa0f07b17829e4bcc527f340bd873df32008faed", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5f89efefd7938f84590117a3eba2ff3ad212e89313eaac5151a0aa19c4ba7948" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x5f89efefd7938f84590117a3eba2ff3ad212e89313eaac5151a0aa19c4ba7948", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0a", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0af55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b8cb780b538f50834191a3662e2f9385a3e2555d17a50f0e7326887feeefc7cea0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca05ae4ed49e06a35321fe708d7f007d74c35c376756763789d772e8e0f83c6eb62b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb8cb780b538f50834191a3662e2f9385a3e2555d17a50f0e7326887feeefc7ce", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x5ae4ed49e06a35321fe708d7f007d74c35c376756763789d772e8e0f83c6eb62", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8f0f0e226ab1b27a2ff146389fe8cdc9e35cffc107b94af0bd921ad5c481a4cf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x8f0f0e226ab1b27a2ff146389fe8cdc9e35cffc107b94af0bd921ad5c481a4cf", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x09", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0b8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0264c99dbf988bffbba6dde5ebd3bf1bb5a07217fb5d722f9118ff220c74fb3d3a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca009fb05d05af1fa7af52ce33cec133ba3b27f5647347a333e6fc683809cb3e01fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x264c99dbf988bffbba6dde5ebd3bf1bb5a07217fb5d722f9118ff220c74fb3d3", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x09fb05d05af1fa7af52ce33cec133ba3b27f5647347a333e6fc683809cb3e01f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x463c8c0b097922b7b5498ad6eab8e1b391fba6a6bbc9dd29252f29e354e6779e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x463c8c0b097922b7b5498ad6eab8e1b391fba6a6bbc9dd29252f29e354e6779e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x08", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda09e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f14f6b1707eb993cb33d59ab2a82a0cce23849d7f9d3b265d70c0a92657f7e53a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca075fabbcfbc13f674e6c9a977113d72274ed4add8acd9502785d727acab14fc08b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf14f6b1707eb993cb33d59ab2a82a0cce23849d7f9d3b265d70c0a92657f7e53", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x75fabbcfbc13f674e6c9a977113d72274ed4add8acd9502785d727acab14fc08", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xce9f0ba20fab89660b68d81c2d8e1be935f7d41c0427c3383b4d6a8e2abf07a0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xce9f0ba20fab89660b68d81c2d8e1be935f7d41c0427c3383b4d6a8e2abf07a0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x07", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda05237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05b3cf113843ac479176f2b32ec4d8f59e132caadc84f270781622ff309471f25a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca01e0e516cf4b4ed5c1e48843aa6ecaa5fff2b74b0c7813691af5998ea6660b020b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5b3cf113843ac479176f2b32ec4d8f59e132caadc84f270781622ff309471f25", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x1e0e516cf4b4ed5c1e48843aa6ecaa5fff2b74b0c7813691af5998ea6660b020", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x350d1e168006380f2db0ce863710df41b5a7f5b6918c721e40d8f5ef2a6b2fd3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x350d1e168006380f2db0ce863710df41b5a7f5b6918c721e40d8f5ef2a6b2fd3", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x06", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda03e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08c0a2873e4a42efec55b2c95309a9c44725f11393f8b17bcea711ec5ab26c412a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca02dc3315b06a46ab16970289910d4d0a9c06596531cde0ebf6c60071315797867b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8c0a2873e4a42efec55b2c95309a9c44725f11393f8b17bcea711ec5ab26c412", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x2dc3315b06a46ab16970289910d4d0a9c06596531cde0ebf6c60071315797867", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf9a1af913a21f2bdaf53e1e5e85e5e820fc56a570bf864286bc928111953cb9f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf9a1af913a21f2bdaf53e1e5e85e5e820fc56a570bf864286bc928111953cb9f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x05", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0ccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f0f8e8a60400aaad9bbfc0aac6d762abb20cdc53cf7779286660cb6a1dcf2463a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0250c1c74dff8a3f8497e028dd445f5a431f20f40fa59391c8dca004857745bf7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf0f8e8a60400aaad9bbfc0aac6d762abb20cdc53cf7779286660cb6a1dcf2463", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x250c1c74dff8a3f8497e028dd445f5a431f20f40fa59391c8dca004857745bf7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x1294d60e7bc5fb663d4edfcab6a65be7134e9cf9947c400ce6936deee0fa1fa6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x1294d60e7bc5fb663d4edfcab6a65be7134e9cf9947c400ce6936deee0fa1fa6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x04", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0fe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f28b2ea05d6169abbc40af9f99b2642b3d6da80a4dcc8534bab3631e914f1a37a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0e265a1061d17546cc7bdbc467eb006e19647d426281d33a5e244a0372aa76bd1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf28b2ea05d6169abbc40af9f99b2642b3d6da80a4dcc8534bab3631e914f1a37", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xe265a1061d17546cc7bdbc467eb006e19647d426281d33a5e244a0372aa76bd1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8a65b559f3aca8b641caa0a6dc8a6f02fc51aef41530751a101180586b9be9e8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x8a65b559f3aca8b641caa0a6dc8a6f02fc51aef41530751a101180586b9be9e8", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x03", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf6b3ef7186504e3a62b0f97429befe1edff2ccc380d1cc0a734fa19ac396634a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca073ba4e3ffb71a73932bd52fc6c807e0bb27d4b81f5432545ef0889737e4a7ca6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf6b3ef7186504e3a62b0f97429befe1edff2ccc380d1cc0a734fa19ac396634", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x73ba4e3ffb71a73932bd52fc6c807e0bb27d4b81f5432545ef0889737e4a7ca6", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x4cd85483d5ca44f2c5a25a304b52aaf464ac11c415e9cb704f1f5da875ba8cb0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4cd85483d5ca44f2c5a25a304b52aaf464ac11c415e9cb704f1f5da875ba8cb0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x02", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Frontier", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda046833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa016f2c49e2474f2744ce33d7910628548aea03c3148f043f86c84dc837c97e9bda0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca00584f39e5d34bc9f7932480f4b0264acacbc9d298bcafd8695dba16948b19ff6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x16f2c49e2474f2744ce33d7910628548aea03c3148f043f86c84dc837c97e9bd", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x0584f39e5d34bc9f7932480f4b0264acacbc9d298bcafd8695dba16948b19ff6", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x59fd434f6db8519a9a725f45a91f8f2a289fd82ba50ccf3efb726a423b4bbf21" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x59fd434f6db8519a9a725f45a91f8f2a289fd82ba50ccf3efb726a423b4bbf21", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x01", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda08e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05756c95dabeeefa0924cb2a673ce3b903e68c66df00879db4f8ea48289fe1ffea0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0513e4aeb8586de42993f140fae0e9098c41e28430b7ce3dc92ffebf79094ed92b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5756c95dabeeefa0924cb2a673ce3b903e68c66df00879db4f8ea48289fe1ffe", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x513e4aeb8586de42993f140fae0e9098c41e28430b7ce3dc92ffebf79094ed92", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xca27e145a45c6a8ce385349bb13c5fb9284bfa422e57230b9903bc961371abf0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xca27e145a45c6a8ce385349bb13c5fb9284bfa422e57230b9903bc961371abf0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x10", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda033ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c3efcb05a59190b3f2f07b70490c01cbb0929b3d667a410ea9e9b8b2b45cb10ca0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca09610269071c58f1abd95f1876cf81123e731c49b35fa2bc7bc961d0ad568ede2b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc3efcb05a59190b3f2f07b70490c01cbb0929b3d667a410ea9e9b8b2b45cb10c", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x9610269071c58f1abd95f1876cf81123e731c49b35fa2bc7bc961d0ad568ede2", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdea66d2a59af8ba4ae862ab40fbac2f33aa5558c50859134f5c3f09ef4b10038" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdea66d2a59af8ba4ae862ab40fbac2f33aa5558c50859134f5c3f09ef4b10038", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0f", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda06ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a7cc2c7e4715531ecc6c501a9559eae3c1dff908850cf0a428975302b5776916a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0c70ccf611f21c820107376591c66742aeb561080ee3848a726e31c5c5de6d557b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa7cc2c7e4715531ecc6c501a9559eae3c1dff908850cf0a428975302b5776916", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xc70ccf611f21c820107376591c66742aeb561080ee3848a726e31c5c5de6d557", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xcc272a56590afb4340e9cf4ac3c29fbdcbb5ca55de27fa5b4e29655a2b6c1dd5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xcc272a56590afb4340e9cf4ac3c29fbdcbb5ca55de27fa5b4e29655a2b6c1dd5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0e", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0c164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e49d8dc8173751acad491e498bc1559207ba78c7167ad0520a3d507a359cbd0ba0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0e8e52788f0c8f9270eaa137a55dbc3cf8d32ee613bb1e73deec1eb31f1a435f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe49d8dc8173751acad491e498bc1559207ba78c7167ad0520a3d507a359cbd0b", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xe8e52788f0c8f9270eaa137a55dbc3cf8d32ee613bb1e73deec1eb31f1a435f0", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x934c7269e8d4f04028a71cf21bd9938a23e0433a36b1f8955ffb75223e588fd8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x934c7269e8d4f04028a71cf21bd9938a23e0433a36b1f8955ffb75223e588fd8", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0d", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07d90b4767975d87abe6aaaa04faa9ba8a128e1a83a0795546d177cd16402973aa0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca04bb79dc6a6b9031e4f42cc80c3d95100a8f0ad609d843d4f9f726246ff0888a3b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7d90b4767975d87abe6aaaa04faa9ba8a128e1a83a0795546d177cd16402973a", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x4bb79dc6a6b9031e4f42cc80c3d95100a8f0ad609d843d4f9f726246ff0888a3", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa1f18582948a68f0048e13d1e061d16c1919e9d3040e18d8de39d82438ac17be" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa1f18582948a68f0048e13d1e061d16c1919e9d3040e18d8de39d82438ac17be", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0c", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0fd57d66a5ade45830e28cab06c7d33d58eb77a944f7aec2f6f7a44b739cc501fa0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0a3481fcb29b484c5a7e22aa564d2b3aef83de01f5acf47f0e4251a343cbb3d03b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xfd57d66a5ade45830e28cab06c7d33d58eb77a944f7aec2f6f7a44b739cc501f", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xa3481fcb29b484c5a7e22aa564d2b3aef83de01f5acf47f0e4251a343cbb3d03", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x0c0380f39d6b80b31e8c77e35a7702e16b65db1d60a1b9041738178d695b2827" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x0c0380f39d6b80b31e8c77e35a7702e16b65db1d60a1b9041738178d695b2827", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0b", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda079148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03681f76ed3b236a37cc74e5a1f66035ed16015d25017ca0657a9293195bcedc3a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0a21e2211e265394961748e7baa0f07b17829e4bcc527f340bd873df32008faedb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3681f76ed3b236a37cc74e5a1f66035ed16015d25017ca0657a9293195bcedc3", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xa21e2211e265394961748e7baa0f07b17829e4bcc527f340bd873df32008faed", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5f89efefd7938f84590117a3eba2ff3ad212e89313eaac5151a0aa19c4ba7948" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x5f89efefd7938f84590117a3eba2ff3ad212e89313eaac5151a0aa19c4ba7948", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0a", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0af55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b8cb780b538f50834191a3662e2f9385a3e2555d17a50f0e7326887feeefc7cea0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca05ae4ed49e06a35321fe708d7f007d74c35c376756763789d772e8e0f83c6eb62b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb8cb780b538f50834191a3662e2f9385a3e2555d17a50f0e7326887feeefc7ce", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x5ae4ed49e06a35321fe708d7f007d74c35c376756763789d772e8e0f83c6eb62", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8f0f0e226ab1b27a2ff146389fe8cdc9e35cffc107b94af0bd921ad5c481a4cf" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x8f0f0e226ab1b27a2ff146389fe8cdc9e35cffc107b94af0bd921ad5c481a4cf", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x09", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0b8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0264c99dbf988bffbba6dde5ebd3bf1bb5a07217fb5d722f9118ff220c74fb3d3a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca009fb05d05af1fa7af52ce33cec133ba3b27f5647347a333e6fc683809cb3e01fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x264c99dbf988bffbba6dde5ebd3bf1bb5a07217fb5d722f9118ff220c74fb3d3", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x09fb05d05af1fa7af52ce33cec133ba3b27f5647347a333e6fc683809cb3e01f", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x463c8c0b097922b7b5498ad6eab8e1b391fba6a6bbc9dd29252f29e354e6779e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x463c8c0b097922b7b5498ad6eab8e1b391fba6a6bbc9dd29252f29e354e6779e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x08", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda09e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f14f6b1707eb993cb33d59ab2a82a0cce23849d7f9d3b265d70c0a92657f7e53a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca075fabbcfbc13f674e6c9a977113d72274ed4add8acd9502785d727acab14fc08b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf14f6b1707eb993cb33d59ab2a82a0cce23849d7f9d3b265d70c0a92657f7e53", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x75fabbcfbc13f674e6c9a977113d72274ed4add8acd9502785d727acab14fc08", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xce9f0ba20fab89660b68d81c2d8e1be935f7d41c0427c3383b4d6a8e2abf07a0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xce9f0ba20fab89660b68d81c2d8e1be935f7d41c0427c3383b4d6a8e2abf07a0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x07", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda05237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05b3cf113843ac479176f2b32ec4d8f59e132caadc84f270781622ff309471f25a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca01e0e516cf4b4ed5c1e48843aa6ecaa5fff2b74b0c7813691af5998ea6660b020b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5b3cf113843ac479176f2b32ec4d8f59e132caadc84f270781622ff309471f25", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x1e0e516cf4b4ed5c1e48843aa6ecaa5fff2b74b0c7813691af5998ea6660b020", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x350d1e168006380f2db0ce863710df41b5a7f5b6918c721e40d8f5ef2a6b2fd3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x350d1e168006380f2db0ce863710df41b5a7f5b6918c721e40d8f5ef2a6b2fd3", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x06", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda03e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08c0a2873e4a42efec55b2c95309a9c44725f11393f8b17bcea711ec5ab26c412a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca02dc3315b06a46ab16970289910d4d0a9c06596531cde0ebf6c60071315797867b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8c0a2873e4a42efec55b2c95309a9c44725f11393f8b17bcea711ec5ab26c412", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x2dc3315b06a46ab16970289910d4d0a9c06596531cde0ebf6c60071315797867", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf9a1af913a21f2bdaf53e1e5e85e5e820fc56a570bf864286bc928111953cb9f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf9a1af913a21f2bdaf53e1e5e85e5e820fc56a570bf864286bc928111953cb9f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x05", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0ccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f0f8e8a60400aaad9bbfc0aac6d762abb20cdc53cf7779286660cb6a1dcf2463a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0250c1c74dff8a3f8497e028dd445f5a431f20f40fa59391c8dca004857745bf7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf0f8e8a60400aaad9bbfc0aac6d762abb20cdc53cf7779286660cb6a1dcf2463", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x250c1c74dff8a3f8497e028dd445f5a431f20f40fa59391c8dca004857745bf7", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x1294d60e7bc5fb663d4edfcab6a65be7134e9cf9947c400ce6936deee0fa1fa6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x1294d60e7bc5fb663d4edfcab6a65be7134e9cf9947c400ce6936deee0fa1fa6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x04", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0fe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f28b2ea05d6169abbc40af9f99b2642b3d6da80a4dcc8534bab3631e914f1a37a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca0e265a1061d17546cc7bdbc467eb006e19647d426281d33a5e244a0372aa76bd1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf28b2ea05d6169abbc40af9f99b2642b3d6da80a4dcc8534bab3631e914f1a37", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0xe265a1061d17546cc7bdbc467eb006e19647d426281d33a5e244a0372aa76bd1", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8a65b559f3aca8b641caa0a6dc8a6f02fc51aef41530751a101180586b9be9e8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x8a65b559f3aca8b641caa0a6dc8a6f02fc51aef41530751a101180586b9be9e8", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x03", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bf6b3ef7186504e3a62b0f97429befe1edff2ccc380d1cc0a734fa19ac396634a0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca073ba4e3ffb71a73932bd52fc6c807e0bb27d4b81f5432545ef0889737e4a7ca6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbf6b3ef7186504e3a62b0f97429befe1edff2ccc380d1cc0a734fa19ac396634", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x73ba4e3ffb71a73932bd52fc6c807e0bb27d4b81f5432545ef0889737e4a7ca6", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x4cd85483d5ca44f2c5a25a304b52aaf464ac11c415e9cb704f1f5da875ba8cb0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4cd85483d5ca44f2c5a25a304b52aaf464ac11c415e9cb704f1f5da875ba8cb0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x02", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Homestead-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Homestead", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda046833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa016f2c49e2474f2744ce33d7910628548aea03c3148f043f86c84dc837c97e9bda0d37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780ca00584f39e5d34bc9f7932480f4b0264acacbc9d298bcafd8695dba16948b19ff6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243c0", + "blockHeader": { + "parentHash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x16f2c49e2474f2744ce33d7910628548aea03c3148f043f86c84dc837c97e9bd", + "transactionsTrie": "0xd37560e316b82b17215eb97b2f1a5a932e38ab9d9b4e938cd40ce4e603b4780c", + "receiptTrie": "0x0584f39e5d34bc9f7932480f4b0264acacbc9d298bcafd8695dba16948b19ff6", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x59fd434f6db8519a9a725f45a91f8f2a289fd82ba50ccf3efb726a423b4bbf21" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x1c", + "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", + "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x59fd434f6db8519a9a725f45a91f8f2a289fd82ba50ccf3efb726a423b4bbf21", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x01", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x45639182452b19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda08e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04ae64a5cba7ff06fdf7e8050c67d78a6986eda120c97a67609ca3dbd28b6e379a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4ae64a5cba7ff06fdf7e8050c67d78a6986eda120c97a67609ca3dbd28b6e379", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x369e7b4f3dc689cc8db1301130f3ff3218640c5a957345431827547373a1022f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x369e7b4f3dc689cc8db1301130f3ff3218640c5a957345431827547373a1022f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x10", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda033ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa083afbe66be2884d9b4d56bf1cff1d24c72dc9d403e529de1986f4be016c5a404a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x83afbe66be2884d9b4d56bf1cff1d24c72dc9d403e529de1986f4be016c5a404", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa89782121130004218c72fec859e8b5125081b54d7afded5fb4422a96c223fe6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa89782121130004218c72fec859e8b5125081b54d7afded5fb4422a96c223fe6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0f", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda06ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07f3012dca81c8a8852a9dabe665eec68fbfa0db0e38fd5a84d190001c92e634ca03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7f3012dca81c8a8852a9dabe665eec68fbfa0db0e38fd5a84d190001c92e634c", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd8e024d026c53dde327a2d731b02cc65db9ffd3dec48caaa5ac44889bd881ad3" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd8e024d026c53dde327a2d731b02cc65db9ffd3dec48caaa5ac44889bd881ad3", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0e", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0c164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa074f364a2349ca5779a6202d83a4ac11319cb547b05ed28e25047ee4498a8cdeda03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x74f364a2349ca5779a6202d83a4ac11319cb547b05ed28e25047ee4498a8cded", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x892f55770fe9cca7230c0e92e7ad4327d8af5e62cbaf9969355e5de4750de6fc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x892f55770fe9cca7230c0e92e7ad4327d8af5e62cbaf9969355e5de4750de6fc", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0d", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0635bbf7a4a660a614c2b6c00632ec1e8ce195f701a4141cde168eb2ae63fffd3a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x635bbf7a4a660a614c2b6c00632ec1e8ce195f701a4141cde168eb2ae63fffd3", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x155660f85f3f284faca817c5768ce3ef31b6c6b7e8ba0914a118c81388ee3d79" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x155660f85f3f284faca817c5768ce3ef31b6c6b7e8ba0914a118c81388ee3d79", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0c", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b9b1ea796673c9f027badce8b46d70b9f533b751b8fdd6d5f172a921e7958373a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb9b1ea796673c9f027badce8b46d70b9f533b751b8fdd6d5f172a921e7958373", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x08cfefd4df149f4b4475aa1b799139adc9121899e0bd69b722bf55bcab6b3813" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x08cfefd4df149f4b4475aa1b799139adc9121899e0bd69b722bf55bcab6b3813", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0b", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda079148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aeee46ae152873ebfecb7831d643cb560dffdf76af1f82b262ba030e38d475e1a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xaeee46ae152873ebfecb7831d643cb560dffdf76af1f82b262ba030e38d475e1", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf5568ae1cb5a380e2c198bbe3603d3e380f283edf7b3d7803f155b1f6b104c97" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf5568ae1cb5a380e2c198bbe3603d3e380f283edf7b3d7803f155b1f6b104c97", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0a", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0af55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0dc310e1c762f62bda4ef88378ff03ec50c32d24e971f12f5079ed32aa252987ea03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xdc310e1c762f62bda4ef88378ff03ec50c32d24e971f12f5079ed32aa252987e", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa9491a372dae43b8df13bf540e1e44b09cd24f4f0acda1f5b6bae65ef04662fc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa9491a372dae43b8df13bf540e1e44b09cd24f4f0acda1f5b6bae65ef04662fc", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x09", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0b8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bae8c38a00221c5d654ac2fd5672b12035ea51dc9081708f5580ed82046a0f40a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbae8c38a00221c5d654ac2fd5672b12035ea51dc9081708f5580ed82046a0f40", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x86b2f2d9a7e477b12d8dd9284d3f256ab8a210113bbf0e90344552a0016dfd1c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x86b2f2d9a7e477b12d8dd9284d3f256ab8a210113bbf0e90344552a0016dfd1c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x08", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda09e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05432ef61bd5ccd667f0cd55cc1e42dee64c643159774d2cd2fafd5003022eb0aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5432ef61bd5ccd667f0cd55cc1e42dee64c643159774d2cd2fafd5003022eb0a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd3cfb19c885512288fbda64b00c68d93b9f0d6744aac8043335411993190ace7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd3cfb19c885512288fbda64b00c68d93b9f0d6744aac8043335411993190ace7", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x07", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda05237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ef37b801b7bb045a001dcba1a65a94b815afcab89454820f84e16f308e8efc1ca03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xef37b801b7bb045a001dcba1a65a94b815afcab89454820f84e16f308e8efc1c", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xcb050e2e37ea243c313939ac4d36dc9c7c9efff29c782e3a54291138eaf64758" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xcb050e2e37ea243c313939ac4d36dc9c7c9efff29c782e3a54291138eaf64758", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x06", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda03e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0265dc923492b67b267d2a46d38d3a78cafb5a212e922d4c6471f043409e10543a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x265dc923492b67b267d2a46d38d3a78cafb5a212e922d4c6471f043409e10543", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xdc2013a8d8404946bd2432a9212aa234db59cc4b24c343fbd630982369cd3c40" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xdc2013a8d8404946bd2432a9212aa234db59cc4b24c343fbd630982369cd3c40", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x05", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0ccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09b281cea760bb6ce0b56b7ca68c91275a1ea9a0174f4e5de247233482dc2b39aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9b281cea760bb6ce0b56b7ca68c91275a1ea9a0174f4e5de247233482dc2b39a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xcc88abd792da7ea6b94e401ea0642abbb6d83bf0851b17184b96e27cb59c9b00" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xcc88abd792da7ea6b94e401ea0642abbb6d83bf0851b17184b96e27cb59c9b00", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x04", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0fe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa007747895516f5e2787e351431a324704bc4b3ca3f01d4d6f9e14fd0dd0a4ee79a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x07747895516f5e2787e351431a324704bc4b3ca3f01d4d6f9e14fd0dd0a4ee79", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x282d10878f635bf78f4b4e2f360e4b0c810fa4854aecabfedf4831f58e33b87b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x282d10878f635bf78f4b4e2f360e4b0c810fa4854aecabfedf4831f58e33b87b", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x03", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa052e5eed0b3b48a12ee262d46aeb617896b9bc9815c8aa031b565e8f90d545c79a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x52e5eed0b3b48a12ee262d46aeb617896b9bc9815c8aa031b565e8f90d545c79", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x1ce5eccbff772d364b25f08e2e833feb9b612fe5ee7aaecd33ec6da4c9399377" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x1ce5eccbff772d364b25f08e2e833feb9b612fe5ee7aaecd33ec6da4c9399377", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x02", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Byzantium-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Byzantium", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda046833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06312f7c74d034d22a34d8b8e984de43895e645b46f2d6cd5ec139d6ddba5109da03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6312f7c74d034d22a34d8b8e984de43895e645b46f2d6cd5ec139d6ddba5109d", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x0d1af223cfcd967485fc786caafb903b9a99bb44b2d601950d797c51e5942381" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x0d1af223cfcd967485fc786caafb903b9a99bb44b2d601950d797c51e5942381", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x01", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x29a2241af66319aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda08e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e441329f677ec325bda34fec8d8d794874fd35e6d818283677a03784ddbad98ba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe441329f677ec325bda34fec8d8d794874fd35e6d818283677a03784ddbad98b", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79061cbcc2c67d542e0e886943665105a2d0610cbd223ea1672848434ba9d216" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x79061cbcc2c67d542e0e886943665105a2d0610cbd223ea1672848434ba9d216", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x10", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda033ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03fb2b369cc129d9f0942c3218bcdafb156ed9fc89b396b388982edf859eaa30aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3fb2b369cc129d9f0942c3218bcdafb156ed9fc89b396b388982edf859eaa30a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x42b88172c6e8aa2037071b479f17105c299886e6c857ade3214bb6f4b21d55a9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x42b88172c6e8aa2037071b479f17105c299886e6c857ade3214bb6f4b21d55a9", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0f", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda06ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0278ac66381e866970a94b8951106ed8867631b8c56c4ddf4e5d06338ce229d69a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x278ac66381e866970a94b8951106ed8867631b8c56c4ddf4e5d06338ce229d69", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd279f0326373beb384ba9ffb1dd13aa7773e376b253f380842851abb196d33a4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd279f0326373beb384ba9ffb1dd13aa7773e376b253f380842851abb196d33a4", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0e", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0c164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ad94f76ea5e2df2cf774b4d6a17e34a4b932a1dd2adc712d211444183b2cbe74a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xad94f76ea5e2df2cf774b4d6a17e34a4b932a1dd2adc712d211444183b2cbe74", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x64db82b046426d8c271d99d43c5a7e974f4b51d50f5fd16c24c0fab9f5e08cf6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x64db82b046426d8c271d99d43c5a7e974f4b51d50f5fd16c24c0fab9f5e08cf6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0d", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa025eb1baff3ed59f531af6db4f2bda6e980633d0a3024b63317e28a659d6ea460a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x25eb1baff3ed59f531af6db4f2bda6e980633d0a3024b63317e28a659d6ea460", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x446c9fe2fa7eeeb69af939ff99e3bd7583e30be99a990ccc84d7e65a628fa9e4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x446c9fe2fa7eeeb69af939ff99e3bd7583e30be99a990ccc84d7e65a628fa9e4", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0c", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0803e1282b011edcd74e7bdb9f5d1800d22fb9f0898663b0819c8abdd2247e936a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x803e1282b011edcd74e7bdb9f5d1800d22fb9f0898663b0819c8abdd2247e936", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf6edb9cdc05268ed97d4a8b140ac6c3e8f84b6fb16d03676b9f613be40a626a6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf6edb9cdc05268ed97d4a8b140ac6c3e8f84b6fb16d03676b9f613be40a626a6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0b", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda079148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa038703b88aca0709f2484cfc5c76e2bbfa8f90224a8ffeccbf52257d9427db8a9a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x38703b88aca0709f2484cfc5c76e2bbfa8f90224a8ffeccbf52257d9427db8a9", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x71e3b2597f2f01cce2e0aa0730cdf84421e69cce67a99e14086347e108670b47" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x71e3b2597f2f01cce2e0aa0730cdf84421e69cce67a99e14086347e108670b47", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0a", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0af55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa044a89b58f4987552ab8b6c032c3e71b33a561522b8c6dcbd468bbeb3abcc023ca03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x44a89b58f4987552ab8b6c032c3e71b33a561522b8c6dcbd468bbeb3abcc023c", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x4568edef15fefd53700230552b282a01fbc16d4d8df3fc7671e9c3edb9e9651d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4568edef15fefd53700230552b282a01fbc16d4d8df3fc7671e9c3edb9e9651d", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x09", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0b8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ddd0d34421410844c323b3c7d17f4d5875e3779fa027026b9ffcb4dfc0032362a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xddd0d34421410844c323b3c7d17f4d5875e3779fa027026b9ffcb4dfc0032362", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x045317e86efa5a245ddee9d0a9bd04d8b0e4d1230bc1f83a6bcb2beb282adf94" + }, + "blocknumber": "1", + "transactions": [ { "type": "0x00", "chainId": "0x01", - "nonce": "0x0f", + "nonce": "0x00", "gasPrice": "0x0a", "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", + "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x", - "v": "0x1b", - "r": "0x055225ffd3d8b2d19c32aa68cb46e7b52c1d99844fb8b7a53b922ea1649e9c5b", - "s": "0x6ae2a1e3b9712354b706d0f4da6ea76ed2f8f75277a51a14a3e0ccf25b85c626", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], "uncleHeaders": [] } ], - "lastblockhash": "0xd2873acc945e4c767995d8a7a7a3f7f7ffbffa404e643f5d3c751c0ce4190fb4", + "lastblockhash": "0x045317e86efa5a245ddee9d0a9bd04d8b0e4d1230bc1f83a6bcb2beb282adf94", "pre": { "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010b": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010d": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010f": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", "balance": "0x3635c9adc5dea00000", @@ -382,9 +6860,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x08", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -403,12 +6881,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda09e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ae2a3838f81bbbcf46a1fb84a9f5caf9a005794c8c49690acaede52f2e9980cba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xae2a3838f81bbbcf46a1fb84a9f5caf9a005794c8c49690acaede52f2e9980cb", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x7cdcd5befb464b2d105d2d72a847cf568b24d4640734c7c014c70afa23cbf25e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x7cdcd5befb464b2d105d2d72a847cf568b24d4640734c7c014c70afa23cbf25e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0f", + "0x00": "0x07", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -427,12 +7002,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000102": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda05237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04cf4b6da252e66196bc1ff39eae2195734e1d72d8e6391c9a6c9c8155607bc30a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4cf4b6da252e66196bc1ff39eae2195734e1d72d8e6391c9a6c9c8155607bc30", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6e4c0caaaaa716735d02a9ca2b6afb476814f6452a9c570d46a24c0a81a121dc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x6e4c0caaaaa716735d02a9ca2b6afb476814f6452a9c570d46a24c0a81a121dc", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0e", + "0x00": "0x06", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -451,12 +7123,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000103": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda03e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03abdab8889ed16e9934bce1e0574c39ef837ce10a8a25d0d6a6bdd4eb9bb54afa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3abdab8889ed16e9934bce1e0574c39ef837ce10a8a25d0d6a6bdd4eb9bb54af", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xff1a4587cdf0e53194271168498df68f326efb365d2932537c1b131322b7b261" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xff1a4587cdf0e53194271168498df68f326efb365d2932537c1b131322b7b261", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0d", + "0x00": "0x05", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -475,12 +7244,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0ccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b1d9983638be65a08ed9c71fe7232a0c2d582f51f46b1ec3b892c88b5c9d4ea8a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb1d9983638be65a08ed9c71fe7232a0c2d582f51f46b1ec3b892c88b5c9d4ea8", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x067973401b18990a7588903791fef354a47441bd93b12ace1060432435edb4c0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x067973401b18990a7588903791fef354a47441bd93b12ace1060432435edb4c0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0c", + "0x00": "0x04", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -499,12 +7365,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000105": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0fe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08f8bac1541b0f4569e9ebc3891067c7e819dfe289dd87b176aa294dcef1d0560a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8f8bac1541b0f4569e9ebc3891067c7e819dfe289dd87b176aa294dcef1d0560", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x2fd8d79ab7c41106769a321e9daf387036aca48a0a0f097a98febcb6d6b20e87" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2fd8d79ab7c41106769a321e9daf387036aca48a0a0f097a98febcb6d6b20e87", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0b", + "0x00": "0x03", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -523,12 +7486,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000106": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e64ec82604d4d7dad518202279388a7f341761b4bc689bb8b8b9ceff3b53aa5fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe64ec82604d4d7dad518202279388a7f341761b4bc689bb8b8b9ceff3b53aa5f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x67a80743eead2b18b9ccff36003c48994fe64fc7f5179d005c14de29ad16aae5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x67a80743eead2b18b9ccff36003c48994fe64fc7f5179d005c14de29ad16aae5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0a", + "0x00": "0x02", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -547,12 +7607,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Constantinople-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Constantinople", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda046833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03fced832bfeaa2b670f38d1fa5ae463a49057c8b36e11219c24ac91ed79b017fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3fced832bfeaa2b670f38d1fa5ae463a49057c8b36e11219c24ac91ed79b017f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xef7bea9c91b79f81c59f6cf26ba68680437db6575e1bdc06ff297bfcf329594c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xef7bea9c91b79f81c59f6cf26ba68680437db6575e1bdc06ff297bfcf329594c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x01", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -571,12 +7728,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda08e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e441329f677ec325bda34fec8d8d794874fd35e6d818283677a03784ddbad98ba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe441329f677ec325bda34fec8d8d794874fd35e6d818283677a03784ddbad98b", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79061cbcc2c67d542e0e886943665105a2d0610cbd223ea1672848434ba9d216" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x79061cbcc2c67d542e0e886943665105a2d0610cbd223ea1672848434ba9d216", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x08", + "0x00": "0x10", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -595,12 +7849,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda033ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03fb2b369cc129d9f0942c3218bcdafb156ed9fc89b396b388982edf859eaa30aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3fb2b369cc129d9f0942c3218bcdafb156ed9fc89b396b388982edf859eaa30a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x42b88172c6e8aa2037071b479f17105c299886e6c857ade3214bb6f4b21d55a9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x42b88172c6e8aa2037071b479f17105c299886e6c857ade3214bb6f4b21d55a9", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x0f", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -619,12 +7970,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda06ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0278ac66381e866970a94b8951106ed8867631b8c56c4ddf4e5d06338ce229d69a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x278ac66381e866970a94b8951106ed8867631b8c56c4ddf4e5d06338ce229d69", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd279f0326373beb384ba9ffb1dd13aa7773e376b253f380842851abb196d33a4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd279f0326373beb384ba9ffb1dd13aa7773e376b253f380842851abb196d33a4", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x06", + "0x00": "0x0e", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -643,12 +8091,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010b": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0c164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ad94f76ea5e2df2cf774b4d6a17e34a4b932a1dd2adc712d211444183b2cbe74a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xad94f76ea5e2df2cf774b4d6a17e34a4b932a1dd2adc712d211444183b2cbe74", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x64db82b046426d8c271d99d43c5a7e974f4b51d50f5fd16c24c0fab9f5e08cf6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x64db82b046426d8c271d99d43c5a7e974f4b51d50f5fd16c24c0fab9f5e08cf6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x05", + "0x00": "0x0d", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -667,36 +8212,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010c": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa025eb1baff3ed59f531af6db4f2bda6e980633d0a3024b63317e28a659d6ea460a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x25eb1baff3ed59f531af6db4f2bda6e980633d0a3024b63317e28a659d6ea460", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x446c9fe2fa7eeeb69af939ff99e3bd7583e30be99a990ccc84d7e65a628fa9e4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x446c9fe2fa7eeeb69af939ff99e3bd7583e30be99a990ccc84d7e65a628fa9e4", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x04", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010d": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x03", + "0x00": "0x0c", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -715,12 +8333,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010e": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0803e1282b011edcd74e7bdb9f5d1800d22fb9f0898663b0819c8abdd2247e936a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x803e1282b011edcd74e7bdb9f5d1800d22fb9f0898663b0819c8abdd2247e936", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf6edb9cdc05268ed97d4a8b140ac6c3e8f84b6fb16d03676b9f613be40a626a6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf6edb9cdc05268ed97d4a8b140ac6c3e8f84b6fb16d03676b9f613be40a626a6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x02", + "0x00": "0x0b", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -739,12 +8454,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010f": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda079148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa038703b88aca0709f2484cfc5c76e2bbfa8f90224a8ffeccbf52257d9427db8a9a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x38703b88aca0709f2484cfc5c76e2bbfa8f90224a8ffeccbf52257d9427db8a9", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x71e3b2597f2f01cce2e0aa0730cdf84421e69cce67a99e14086347e108670b47" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x71e3b2597f2f01cce2e0aa0730cdf84421e69cce67a99e14086347e108670b47", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x0a", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -765,30 +8577,31 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x4563918248659aa0", + "balance": "0x1bc16d674eff19aa", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5db2e6560", + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "001-fork=Homestead": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP8]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, - "network": "Homestead", - "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -800,354 +8613,55 @@ "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0" + "hash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01" }, "blocks": [ { - "rlp": "0xf90824f901fda0c810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0692b8fc6c9cd6f7fae36df5b598e8e241d8b60f569ca2bfc89ce4343e45e9816a02c4867cfacf11ad250ac757ccd6ab981344de836d72794360da2f88f71da2b12a07d13f5bc7a51c0f49f1c5566e2308b3cac24f1040be2f7f183ba0a91b3423e88b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000835829108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90620f860800a8307a12094000000000000000000000000000000000000010080801ca0f73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddfa01c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243f860010a8307a12094000000000000000000000000000000000000010180801ba0bffca3f433f61c957d822af37f2b49c57700ff338588d51ea82dc9f720c91d9da0168bb65cc72d586384383f8ceef3a6a60e54b7f4aaa978a6dad271ced54b2ebff860020a8307a12094000000000000000000000000000000000000010280801ba03d9f110bcf0c44be552d4d0ec8387b705604f7d3bb3794dcef4004c38963103ea013bda734f3b5987b8c855f6aab046754506266ff32352ba0898c4eba4acaec8bf860030a8307a12094000000000000000000000000000000000000010380801ba0ecb276d2486664ea779813e599b6f07b7b0df746626d7fdddf60ea425efcb324a0739841682e79a8302dc2e146dfd1eecbdc611d386d42287bcdd94a39bf536020f860040a8307a12094000000000000000000000000000000000000010480801ba002866b5c5fa5dbfa3d88b71a49b82a779c2d508cda631893176782dbcd7435aaa003c380a9af9bfdb3503abcfd5037d3c66f39bb7a19011a3291712d22292c5236f860050a8307a12094000000000000000000000000000000000000010580801ca0c70d2e000e503933d0f1a9a923dc647924811a912adf77692ff7d8f6808d5617a04ad82c92b980580a4a67e4c405e83d560a14201c3fd4b3a42d34dcc19336479af860060a8307a12094000000000000000000000000000000000000010680801ca07f2527f8cbe14e021d270dd214a1820355c7af128001889f57b7f9bba46a6c5da03033308de0d39b9d1b47d28f81df39ceaff330349298c65deb836efe8bce273ff860070a8307a12094000000000000000000000000000000000000010780801ba0ecb720a8764f8967b95dc66e961c6261fceb392c0e90461d7d66113d3c8bbd12a02655e28b751cc2e03a835aa817d884b540765dba12968bc53f53737b4234ee21f860080a8307a12094000000000000000000000000000000000000010880801ba095a2e27c0b296679141c0ad61be112f689b134c04d1773814ddae67fefb2dfbda02955f126d57d8b9777f47c520ffe4285890ca2dd1189e67b3407d6369997e7ecf860090a8307a12094000000000000000000000000000000000000010980801ca02468a120d0ee8c57caac354f56842a1db10813169a328f9f852279668b573907a03971f4c2e6bc0aa666812712719199df6fe37c0e1e122131cdb47d6c0c77b371f8600a0a8307a12094000000000000000000000000000000000000010a80801ba0a3a2018ab0bc2695b94bb85d710f4d07132a94f8c3e0f385824da5fee11899a5a00d2dfe430ea5aaff3de8bbb9339e7485474c8e4e34636f787124a7a91e4d6d6af8600b0a8307a12094000000000000000000000000000000000000010b80801ba0b91968fdb3aecea26094ec30649daa4de81a875bcb1a123e732b8f3f112ce232a02ef8cd85969d8bcef5f4ee1f5d20783b8d9b7466726c15ebf911565825187665f8600c0a8307a12094000000000000000000000000000000000000010c80801ca0dd27e75aa990793205805c22265b04be8299b208fad4f37a7f652ecf32b67390a05aa8cda18521548ff8f95e88f49f309d05cab32de28a0942b8a7a824c50df459f8600d0a8307a12094000000000000000000000000000000000000010d80801ba0fad07ce7139dd4e00266194e6a51c048f74eaba3c0a1b03ece378a810abfaa63a04fec880dafaa5382797b4f88b16138b1f0c4e084817072c77ff9bf17ddd4ac26f8600e0a8307a12094000000000000000000000000000000000000010e80801ca0208b22ab245221bdc5cae6586d2ef019a2c37be41166e04b8abe354c41a8f5b6a032d5d6ef07731cd1684531c775c1727ef6ba75de18cda96d998aaa0c1db0bd68f8600f0a8307a12094000000000000000000000000000000000000010f80801ba0055225ffd3d8b2d19c32aa68cb46e7b52c1d99844fb8b7a53b922ea1649e9c5ba06ae2a1e3b9712354b706d0f4da6ea76ed2f8f75277a51a14a3e0ccf25b85c626c0", + "rlp": "0xf90265f901fda0af55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa044a89b58f4987552ab8b6c032c3e71b33a561522b8c6dcbd468bbeb3abcc023ca03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", "blockHeader": { - "parentHash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0", + "parentHash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x692b8fc6c9cd6f7fae36df5b598e8e241d8b60f569ca2bfc89ce4343e45e9816", - "transactionsTrie": "0x2c4867cfacf11ad250ac757ccd6ab981344de836d72794360da2f88f71da2b12", - "receiptTrie": "0x7d13f5bc7a51c0f49f1c5566e2308b3cac24f1040be2f7f183ba0a91b3423e88", + "stateRoot": "0x44a89b58f4987552ab8b6c032c3e71b33a561522b8c6dcbd468bbeb3abcc023c", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x020000", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x582910", + "gasUsed": "0x058291", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xd2873acc945e4c767995d8a7a7a3f7f7ffbffa404e643f5d3c751c0ce4190fb4" - }, - "transactions": [ - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x", - "v": "0x1c", - "r": "0xf73b923883495dc2174285c8fa4176de3d45accfb11cc8034ea1dd09831a4ddf", - "s": "0x1c6bccbcd655b4022bcc27de4b9d5cee9ce999cdb8459b0afec4f5054ea02243", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xbffca3f433f61c957d822af37f2b49c57700ff338588d51ea82dc9f720c91d9d", - "s": "0x168bb65cc72d586384383f8ceef3a6a60e54b7f4aaa978a6dad271ced54b2ebf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0x3d9f110bcf0c44be552d4d0ec8387b705604f7d3bb3794dcef4004c38963103e", - "s": "0x13bda734f3b5987b8c855f6aab046754506266ff32352ba0898c4eba4acaec8b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xecb276d2486664ea779813e599b6f07b7b0df746626d7fdddf60ea425efcb324", - "s": "0x739841682e79a8302dc2e146dfd1eecbdc611d386d42287bcdd94a39bf536020", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0x02866b5c5fa5dbfa3d88b71a49b82a779c2d508cda631893176782dbcd7435aa", - "s": "0x03c380a9af9bfdb3503abcfd5037d3c66f39bb7a19011a3291712d22292c5236", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x1c", - "r": "0xc70d2e000e503933d0f1a9a923dc647924811a912adf77692ff7d8f6808d5617", - "s": "0x4ad82c92b980580a4a67e4c405e83d560a14201c3fd4b3a42d34dcc19336479a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x1c", - "r": "0x7f2527f8cbe14e021d270dd214a1820355c7af128001889f57b7f9bba46a6c5d", - "s": "0x3033308de0d39b9d1b47d28f81df39ceaff330349298c65deb836efe8bce273f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xecb720a8764f8967b95dc66e961c6261fceb392c0e90461d7d66113d3c8bbd12", - "s": "0x2655e28b751cc2e03a835aa817d884b540765dba12968bc53f53737b4234ee21", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0x95a2e27c0b296679141c0ad61be112f689b134c04d1773814ddae67fefb2dfbd", - "s": "0x2955f126d57d8b9777f47c520ffe4285890ca2dd1189e67b3407d6369997e7ec", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x1c", - "r": "0x2468a120d0ee8c57caac354f56842a1db10813169a328f9f852279668b573907", - "s": "0x3971f4c2e6bc0aa666812712719199df6fe37c0e1e122131cdb47d6c0c77b371", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xa3a2018ab0bc2695b94bb85d710f4d07132a94f8c3e0f385824da5fee11899a5", - "s": "0x0d2dfe430ea5aaff3de8bbb9339e7485474c8e4e34636f787124a7a91e4d6d6a", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xb91968fdb3aecea26094ec30649daa4de81a875bcb1a123e732b8f3f112ce232", - "s": "0x2ef8cd85969d8bcef5f4ee1f5d20783b8d9b7466726c15ebf911565825187665", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x1c", - "r": "0xdd27e75aa990793205805c22265b04be8299b208fad4f37a7f652ecf32b67390", - "s": "0x5aa8cda18521548ff8f95e88f49f309d05cab32de28a0942b8a7a824c50df459", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0xfad07ce7139dd4e00266194e6a51c048f74eaba3c0a1b03ece378a810abfaa63", - "s": "0x4fec880dafaa5382797b4f88b16138b1f0c4e084817072c77ff9bf17ddd4ac26", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x1c", - "r": "0x208b22ab245221bdc5cae6586d2ef019a2c37be41166e04b8abe354c41a8f5b6", - "s": "0x32d5d6ef07731cd1684531c775c1727ef6ba75de18cda96d998aaa0c1db0bd68", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x1b", - "r": "0x055225ffd3d8b2d19c32aa68cb46e7b52c1d99844fb8b7a53b922ea1649e9c5b", - "s": "0x6ae2a1e3b9712354b706d0f4da6ea76ed2f8f75277a51a14a3e0ccf25b85c626", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [] - } - ], - "lastblockhash": "0xd2873acc945e4c767995d8a7a7a3f7f7ffbffa404e643f5d3c751c0ce4190fb4", - "pre": { - "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010b": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010d": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010f": { + "hash": "0x4568edef15fefd53700230552b282a01fbc16d4d8df3fc7671e9c3edb9e9651d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4568edef15fefd53700230552b282a01fbc16d4d8df3fc7671e9c3edb9e9651d", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -1161,9 +8675,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x09", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1182,60 +8696,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0f", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000102": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0b8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ddd0d34421410844c323b3c7d17f4d5875e3779fa027026b9ffcb4dfc0032362a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xddd0d34421410844c323b3c7d17f4d5875e3779fa027026b9ffcb4dfc0032362", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x045317e86efa5a245ddee9d0a9bd04d8b0e4d1230bc1f83a6bcb2beb282adf94" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x045317e86efa5a245ddee9d0a9bd04d8b0e4d1230bc1f83a6bcb2beb282adf94", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0e", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000103": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0d", + "0x00": "0x08", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1254,60 +8817,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0c", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000105": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda09e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ae2a3838f81bbbcf46a1fb84a9f5caf9a005794c8c49690acaede52f2e9980cba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xae2a3838f81bbbcf46a1fb84a9f5caf9a005794c8c49690acaede52f2e9980cb", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x7cdcd5befb464b2d105d2d72a847cf568b24d4640734c7c014c70afa23cbf25e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x7cdcd5befb464b2d105d2d72a847cf568b24d4640734c7c014c70afa23cbf25e", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0b", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000106": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0a", + "0x00": "0x07", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1326,12 +8938,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda05237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04cf4b6da252e66196bc1ff39eae2195734e1d72d8e6391c9a6c9c8155607bc30a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4cf4b6da252e66196bc1ff39eae2195734e1d72d8e6391c9a6c9c8155607bc30", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6e4c0caaaaa716735d02a9ca2b6afb476814f6452a9c570d46a24c0a81a121dc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x6e4c0caaaaa716735d02a9ca2b6afb476814f6452a9c570d46a24c0a81a121dc", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x06", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1350,12 +9059,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda03e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03abdab8889ed16e9934bce1e0574c39ef837ce10a8a25d0d6a6bdd4eb9bb54afa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3abdab8889ed16e9934bce1e0574c39ef837ce10a8a25d0d6a6bdd4eb9bb54af", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xff1a4587cdf0e53194271168498df68f326efb365d2932537c1b131322b7b261" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xff1a4587cdf0e53194271168498df68f326efb365d2932537c1b131322b7b261", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x08", + "0x00": "0x05", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1374,12 +9180,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0ccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b1d9983638be65a08ed9c71fe7232a0c2d582f51f46b1ec3b892c88b5c9d4ea8a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb1d9983638be65a08ed9c71fe7232a0c2d582f51f46b1ec3b892c88b5c9d4ea8", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x067973401b18990a7588903791fef354a47441bd93b12ace1060432435edb4c0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x067973401b18990a7588903791fef354a47441bd93b12ace1060432435edb4c0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x04", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1398,36 +9301,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0fe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08f8bac1541b0f4569e9ebc3891067c7e819dfe289dd87b176aa294dcef1d0560a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8f8bac1541b0f4569e9ebc3891067c7e819dfe289dd87b176aa294dcef1d0560", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x2fd8d79ab7c41106769a321e9daf387036aca48a0a0f097a98febcb6d6b20e87" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2fd8d79ab7c41106769a321e9daf387036aca48a0a0f097a98febcb6d6b20e87", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x06", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010b": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x05", + "0x00": "0x03", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1446,12 +9422,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010c": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e64ec82604d4d7dad518202279388a7f341761b4bc689bb8b8b9ceff3b53aa5fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe64ec82604d4d7dad518202279388a7f341761b4bc689bb8b8b9ceff3b53aa5f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x67a80743eead2b18b9ccff36003c48994fe64fc7f5179d005c14de29ad16aae5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x67a80743eead2b18b9ccff36003c48994fe64fc7f5179d005c14de29ad16aae5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x04", + "0x00": "0x02", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1470,55 +9543,104 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_ConstantinopleFix-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "ConstantinopleFix", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda046833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03fced832bfeaa2b670f38d1fa5ae463a49057c8b36e11219c24ac91ed79b017fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3fced832bfeaa2b670f38d1fa5ae463a49057c8b36e11219c24ac91ed79b017f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xef7bea9c91b79f81c59f6cf26ba68680437db6575e1bdc06ff297bfcf329594c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xef7bea9c91b79f81c59f6cf26ba68680437db6575e1bdc06ff297bfcf329594c", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x03", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010e": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x02", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } - }, - "0x000000000000000000000000000000000000010f": { + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -1544,30 +9666,31 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x4563918248659aa0", + "balance": "0x1bc16d674eff19aa", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5db2e6560", + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "002-fork=Byzantium": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, - "network": "Byzantium", - "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -1579,29 +9702,30 @@ "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0" + "hash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904" }, "blocks": [ { - "rlp": "0xf90824f901fda0c810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0722ac23adbfc77f67b12e174bcdf904a634909b6a4b370dffc59456e63d7e862a05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a09d06daaa31b5192110e16c243d9ea7489e76f5c5d5b099b543998620785b1c0eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000835829108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0", + "rlp": "0xf90265f901fda08e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e441329f677ec325bda34fec8d8d794874fd35e6d818283677a03784ddbad98ba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", "blockHeader": { - "parentHash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0", + "parentHash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x722ac23adbfc77f67b12e174bcdf904a634909b6a4b370dffc59456e63d7e862", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x9d06daaa31b5192110e16c243d9ea7489e76f5c5d5b099b543998620785b1c0e", + "stateRoot": "0xe441329f677ec325bda34fec8d8d794874fd35e6d818283677a03784ddbad98b", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x020000", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x582910", + "gasUsed": "0x058291", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xe88c62523302f1b59c79a8452cb12c71f2151128bae8c63ccf3fa05e26633547" + "hash": "0x79061cbcc2c67d542e0e886943665105a2d0610cbd223ea1672848434ba9d216" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1616,319 +9740,140 @@ "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x79061cbcc2c67d542e0e886943665105a2d0610cbd223ea1672848434ba9d216", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x10", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda033ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03fb2b369cc129d9f0942c3218bcdafb156ed9fc89b396b388982edf859eaa30aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3fb2b369cc129d9f0942c3218bcdafb156ed9fc89b396b388982edf859eaa30a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x42b88172c6e8aa2037071b479f17105c299886e6c857ade3214bb6f4b21d55a9" + }, + "blocknumber": "1", + "transactions": [ { "type": "0x00", "chainId": "0x01", - "nonce": "0x0f", + "nonce": "0x00", "gasPrice": "0x0a", "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", + "to": "0x0000000000000000000000000000000000000100", "value": "0x00", "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], "uncleHeaders": [] } ], - "lastblockhash": "0xe88c62523302f1b59c79a8452cb12c71f2151128bae8c63ccf3fa05e26633547", + "lastblockhash": "0x42b88172c6e8aa2037071b479f17105c299886e6c857ade3214bb6f4b21d55a9", "pre": { "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010b": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010d": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010f": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", "balance": "0x3635c9adc5dea00000", @@ -1940,9 +9885,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x0f", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1961,12 +9906,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda06ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0278ac66381e866970a94b8951106ed8867631b8c56c4ddf4e5d06338ce229d69a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x278ac66381e866970a94b8951106ed8867631b8c56c4ddf4e5d06338ce229d69", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd279f0326373beb384ba9ffb1dd13aa7773e376b253f380842851abb196d33a4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd279f0326373beb384ba9ffb1dd13aa7773e376b253f380842851abb196d33a4", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0f", + "0x00": "0x0e", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -1985,31 +10027,104 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000102": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0c164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ad94f76ea5e2df2cf774b4d6a17e34a4b932a1dd2adc712d211444183b2cbe74a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xad94f76ea5e2df2cf774b4d6a17e34a4b932a1dd2adc712d211444183b2cbe74", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x64db82b046426d8c271d99d43c5a7e974f4b51d50f5fd16c24c0fab9f5e08cf6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x64db82b046426d8c271d99d43c5a7e974f4b51d50f5fd16c24c0fab9f5e08cf6", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0e", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000103": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -2033,7 +10148,104 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa025eb1baff3ed59f531af6db4f2bda6e980633d0a3024b63317e28a659d6ea460a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x25eb1baff3ed59f531af6db4f2bda6e980633d0a3024b63317e28a659d6ea460", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x446c9fe2fa7eeeb69af939ff99e3bd7583e30be99a990ccc84d7e65a628fa9e4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x446c9fe2fa7eeeb69af939ff99e3bd7583e30be99a990ccc84d7e65a628fa9e4", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -2057,7 +10269,104 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000105": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0803e1282b011edcd74e7bdb9f5d1800d22fb9f0898663b0819c8abdd2247e936a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x803e1282b011edcd74e7bdb9f5d1800d22fb9f0898663b0819c8abdd2247e936", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf6edb9cdc05268ed97d4a8b140ac6c3e8f84b6fb16d03676b9f613be40a626a6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf6edb9cdc05268ed97d4a8b140ac6c3e8f84b6fb16d03676b9f613be40a626a6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -2081,7 +10390,104 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000106": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda079148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa038703b88aca0709f2484cfc5c76e2bbfa8f90224a8ffeccbf52257d9427db8a9a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x38703b88aca0709f2484cfc5c76e2bbfa8f90224a8ffeccbf52257d9427db8a9", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x71e3b2597f2f01cce2e0aa0730cdf84421e69cce67a99e14086347e108670b47" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x71e3b2597f2f01cce2e0aa0730cdf84421e69cce67a99e14086347e108670b47", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -2105,7 +10511,104 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0af55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa044a89b58f4987552ab8b6c032c3e71b33a561522b8c6dcbd468bbeb3abcc023ca03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x44a89b58f4987552ab8b6c032c3e71b33a561522b8c6dcbd468bbeb3abcc023c", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x4568edef15fefd53700230552b282a01fbc16d4d8df3fc7671e9c3edb9e9651d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4568edef15fefd53700230552b282a01fbc16d4d8df3fc7671e9c3edb9e9651d", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -2129,7 +10632,104 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0b8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ddd0d34421410844c323b3c7d17f4d5875e3779fa027026b9ffcb4dfc0032362a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xddd0d34421410844c323b3c7d17f4d5875e3779fa027026b9ffcb4dfc0032362", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x045317e86efa5a245ddee9d0a9bd04d8b0e4d1230bc1f83a6bcb2beb282adf94" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x045317e86efa5a245ddee9d0a9bd04d8b0e4d1230bc1f83a6bcb2beb282adf94", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -2153,7 +10753,104 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda09e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ae2a3838f81bbbcf46a1fb84a9f5caf9a005794c8c49690acaede52f2e9980cba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xae2a3838f81bbbcf46a1fb84a9f5caf9a005794c8c49690acaede52f2e9980cb", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x7cdcd5befb464b2d105d2d72a847cf568b24d4640734c7c014c70afa23cbf25e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x7cdcd5befb464b2d105d2d72a847cf568b24d4640734c7c014c70afa23cbf25e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -2177,7 +10874,104 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda05237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04cf4b6da252e66196bc1ff39eae2195734e1d72d8e6391c9a6c9c8155607bc30a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4cf4b6da252e66196bc1ff39eae2195734e1d72d8e6391c9a6c9c8155607bc30", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6e4c0caaaaa716735d02a9ca2b6afb476814f6452a9c570d46a24c0a81a121dc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x6e4c0caaaaa716735d02a9ca2b6afb476814f6452a9c570d46a24c0a81a121dc", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -2201,36 +10995,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010b": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda03e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03abdab8889ed16e9934bce1e0574c39ef837ce10a8a25d0d6a6bdd4eb9bb54afa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3abdab8889ed16e9934bce1e0574c39ef837ce10a8a25d0d6a6bdd4eb9bb54af", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xff1a4587cdf0e53194271168498df68f326efb365d2932537c1b131322b7b261" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xff1a4587cdf0e53194271168498df68f326efb365d2932537c1b131322b7b261", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x05", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "storage": {} }, - "0x000000000000000000000000000000000000010c": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x04", + "0x00": "0x05", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2249,60 +11116,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x03", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} }, - "0x000000000000000000000000000000000000010e": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0ccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b1d9983638be65a08ed9c71fe7232a0c2d582f51f46b1ec3b892c88b5c9d4ea8a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb1d9983638be65a08ed9c71fe7232a0c2d582f51f46b1ec3b892c88b5c9d4ea8", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x067973401b18990a7588903791fef354a47441bd93b12ace1060432435edb4c0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x067973401b18990a7588903791fef354a47441bd93b12ace1060432435edb4c0", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x02", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010f": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x04", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2323,30 +11239,31 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x29a2241af99d9aa0", + "balance": "0x1bc16d674eff19aa", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5db2e6560", + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "003-fork=Constantinople": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP14]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, - "network": "Constantinople", - "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -2358,29 +11275,30 @@ "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0" + "hash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95" }, "blocks": [ { - "rlp": "0xf90824f901fda0c810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f4f4aed0d1813d2880d8bb1cb5697303c20002ac6bfc206635645f43805ccbcba05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a09d06daaa31b5192110e16c243d9ea7489e76f5c5d5b099b543998620785b1c0eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000835829108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0", + "rlp": "0xf90265f901fda0fe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08f8bac1541b0f4569e9ebc3891067c7e819dfe289dd87b176aa294dcef1d0560a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", "blockHeader": { - "parentHash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0", + "parentHash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf4f4aed0d1813d2880d8bb1cb5697303c20002ac6bfc206635645f43805ccbcb", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x9d06daaa31b5192110e16c243d9ea7489e76f5c5d5b099b543998620785b1c0e", + "stateRoot": "0x8f8bac1541b0f4569e9ebc3891067c7e819dfe289dd87b176aa294dcef1d0560", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x020000", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x582910", + "gasUsed": "0x058291", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0x95408bd87da598d83e81d07479d20fd9eed98a4f5cc4d4d0e7ab346ae1e0b7c8" + "hash": "0x2fd8d79ab7c41106769a321e9daf387036aca48a0a0f097a98febcb6d6b20e87" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2392,322 +11310,22 @@ "value": "0x00", "data": "0x", "v": "0x26", - "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", - "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [] - } - ], - "lastblockhash": "0x95408bd87da598d83e81d07479d20fd9eed98a4f5cc4d4d0e7ab346ae1e0b7c8", - "pre": { - "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010b": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010d": { + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2fd8d79ab7c41106769a321e9daf387036aca48a0a0f097a98febcb6d6b20e87", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010f": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", "balance": "0x3635c9adc5dea00000", @@ -2719,9 +11337,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x03", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2740,60 +11358,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0f", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000102": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e64ec82604d4d7dad518202279388a7f341761b4bc689bb8b8b9ceff3b53aa5fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe64ec82604d4d7dad518202279388a7f341761b4bc689bb8b8b9ceff3b53aa5f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x67a80743eead2b18b9ccff36003c48994fe64fc7f5179d005c14de29ad16aae5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x67a80743eead2b18b9ccff36003c48994fe64fc7f5179d005c14de29ad16aae5", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0e", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000103": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0d", + "0x00": "0x02", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2812,60 +11479,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0c", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000105": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Istanbul-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Istanbul", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda046833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03fced832bfeaa2b670f38d1fa5ae463a49057c8b36e11219c24ac91ed79b017fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a056b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000830582918203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x3fced832bfeaa2b670f38d1fa5ae463a49057c8b36e11219c24ac91ed79b017f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0x56b629cf2081c54603146cea547a2b6bd9675e918aefad2f2533c76808457217", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x058291", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xef7bea9c91b79f81c59f6cf26ba68680437db6575e1bdc06ff297bfcf329594c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xef7bea9c91b79f81c59f6cf26ba68680437db6575e1bdc06ff297bfcf329594c", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0b", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000106": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0a", + "0x00": "0x01", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2884,12 +11600,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eff19aa", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de68e656", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda08e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0caa9073e30269daea37548a6d72e6de2cb9fe696facb0cf460cd9d1922a9c1aba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x8e17b02c904948750634ad7a79507ba1929eb166438c0ae28549daaa3c228904", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcaa9073e30269daea37548a6d72e6de2cb9fe696facb0cf460cd9d1922a9c1ab", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x91cfd8760b471bbba9887e6cec3a9d7a3e1573a779f018ecd7074fa958daad58" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x91cfd8760b471bbba9887e6cec3a9d7a3e1573a779f018ecd7074fa958daad58", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x10", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2908,12 +11721,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda033ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa05cbb9931ae9c7672db593bb0c673722ec2dbac94b433ee7ceba7245970208452a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x33ef395597a7526b8d24d07c72440dd83718f1a24595df615bef4fd66191e92a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x5cbb9931ae9c7672db593bb0c673722ec2dbac94b433ee7ceba7245970208452", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x8f44a4ea3441d9e5c34fcf681ccb996d8b1cd8fc164c2644907d78529d6577d8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x8f44a4ea3441d9e5c34fcf681ccb996d8b1cd8fc164c2644907d78529d6577d8", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x08", + "0x00": "0x0f", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2932,12 +11842,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda06ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01ee5406b12c1398dfd7878f01924d057ef12626608bcdf4098042b0bb1630c15a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x6ab09825045fe809f07501249a78a0d0e0ae8a1b46e7e401333ed173cfec2f8b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1ee5406b12c1398dfd7878f01924d057ef12626608bcdf4098042b0bb1630c15", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x095aa407aaacfda7e6d00c25308f5d5bc8ee4fe8de39c8bd8a1b0ccca3c694f1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x095aa407aaacfda7e6d00c25308f5d5bc8ee4fe8de39c8bd8a1b0ccca3c694f1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x0e", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2956,12 +11963,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0c164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0020e40b080f5eedaf2bd21cfc62918f3025b7eaf4f057839b7d3da353215a37aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xc164b30f225137d0e7ff45a0a48f9ccc22d7a42149f20e4366531be2e7dcb088", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x020e40b080f5eedaf2bd21cfc62918f3025b7eaf4f057839b7d3da353215a37a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xc773a0d6c0a1204ee763079cb2ceef2fa8d6656ea88c59bb9fe6fefddd348104" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xc773a0d6c0a1204ee763079cb2ceef2fa8d6656ea88c59bb9fe6fefddd348104", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x06", + "0x00": "0x0d", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -2980,12 +12084,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010b": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c944a36488c12cb06e49be7b0f04deb495ada0acae1b18de6a673f700df055cca03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x646cfd33262eb62caeae9b20f52e4a3332db20b41a30c1233e8430b1d91da6b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc944a36488c12cb06e49be7b0f04deb495ada0acae1b18de6a673f700df055cc", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xd892c6e6b05a152aee775b3db1a53ada787c732f08d218e4f6361b57e6cfb4e4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd892c6e6b05a152aee775b3db1a53ada787c732f08d218e4f6361b57e6cfb4e4", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x05", + "0x00": "0x0c", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3004,12 +12205,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010c": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07e34241128005ca201dd4a7692270cbc9419fd879edab9afd605b4d5959dac01a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf54edd351d868d19d6bf0472da22db871b8b1dcd6db372d6b876758cc1e2209d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7e34241128005ca201dd4a7692270cbc9419fd879edab9afd605b4d5959dac01", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf0d602c91989b766786472e4cfdfa4157c31259a7e89a3c8370c12564cc2742b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf0d602c91989b766786472e4cfdfa4157c31259a7e89a3c8370c12564cc2742b", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x04", + "0x00": "0x0b", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3028,12 +12326,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda079148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07531c21ab8b7a2af8ad83427f17317d2362cc09bcae9b05b489344891dcc7eaaa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x79148020fe063eef0e459c926e972fea1f79db4ea54b5d82e8ee438e7594d1f7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x7531c21ab8b7a2af8ad83427f17317d2362cc09bcae9b05b489344891dcc7eaa", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x781402f49dca6aedb7e7441540d5b70da94c391914bf058badfb6a77ebf7aed1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x781402f49dca6aedb7e7441540d5b70da94c391914bf058badfb6a77ebf7aed1", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x03", + "0x00": "0x0a", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3052,12 +12447,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010e": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0af55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c55637f8ca51b8df48982ac6eb502b829dffbaed52c4845f17cc4f8dad3ea8f5a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xaf55accb60109fc304c67bbd7c501c6619de637190b0ac21dd1a7dec3d173f01", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc55637f8ca51b8df48982ac6eb502b829dffbaed52c4845f17cc4f8dad3ea8f5", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x25d8d481912f35136712f84c828abf19d9a0dbfb5272ba0688177c0012b0d9a0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x25d8d481912f35136712f84c828abf19d9a0dbfb5272ba0688177c0012b0d9a0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x02", + "0x00": "0x09", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3076,12 +12568,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010f": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0b8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01ab47e3540263e06c5dc3ae125dd2572f937fdcaf87f821cea156e69ed055bbda03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xb8cdee1b0fcccbd6667a7f7abfea74b3ae701370ca3b47f909ee087f0a4f7d70", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1ab47e3540263e06c5dc3ae125dd2572f937fdcaf87f821cea156e69ed055bbd", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x4e539cb63c4cb699a981813f70c308cbea7d64b0a2a43211e8ccdec36bc23620" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4e539cb63c4cb699a981813f70c308cbea7d64b0a2a43211e8ccdec36bc23620", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x08", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3102,30 +12691,31 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x1bc16d6752399aa0", + "balance": "0x1bc16d674f048c32", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5db2e6560", + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "004-fork=ConstantinopleFix": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP10]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, - "network": "ConstantinopleFix", - "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3137,29 +12727,30 @@ "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0" + "hash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6" }, "blocks": [ { - "rlp": "0xf90824f901fda0c810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f4f4aed0d1813d2880d8bb1cb5697303c20002ac6bfc206635645f43805ccbcba05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a09d06daaa31b5192110e16c243d9ea7489e76f5c5d5b099b543998620785b1c0eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000835829108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0", + "rlp": "0xf90265f901fda09e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa095b722829eba766aeb2b297bb39df38b752bfeeaf1d9672b3f76673cd23ae200a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", "blockHeader": { - "parentHash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0", + "parentHash": "0x9e1d3caf2a971abbc68033ea6e162365cfe093af8e1723570091cefa31eff8c6", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf4f4aed0d1813d2880d8bb1cb5697303c20002ac6bfc206635645f43805ccbcb", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x9d06daaa31b5192110e16c243d9ea7489e76f5c5d5b099b543998620785b1c0e", + "stateRoot": "0x95b722829eba766aeb2b297bb39df38b752bfeeaf1d9672b3f76673cd23ae200", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x020000", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x582910", + "gasUsed": "0x060e05", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0x95408bd87da598d83e81d07479d20fd9eed98a4f5cc4d4d0e7ab346ae1e0b7c8" + "hash": "0xd2e5774a64383b5ef2b34305e406901196568d2712c21a8f4c60957d7583dc10" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3174,319 +12765,140 @@ "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], "uncleHeaders": [] } ], - "lastblockhash": "0x95408bd87da598d83e81d07479d20fd9eed98a4f5cc4d4d0e7ab346ae1e0b7c8", + "lastblockhash": "0xd2e5774a64383b5ef2b34305e406901196568d2712c21a8f4c60957d7583dc10", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x0000000000000000000000000000000000000106": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "balance": "0x3635c9adc5dea00000", + "code": "0x", "storage": {} - }, - "0x0000000000000000000000000000000000000107": { + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x07", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "balance": "0x1bc16d674f048c32", + "code": "0x", "storage": {} }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", "storage": {} - }, - "0x000000000000000000000000000000000000010a": { + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda05237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09393916efa0e5bbc79ef5b25b0d4d8da6b4380eb74ef1ad0cee76980fc15222fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x5237cce17e683d441112dd5fe561aa50199ba72758fe80bcb2f16317d8894a9d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9393916efa0e5bbc79ef5b25b0d4d8da6b4380eb74ef1ad0cee76980fc15222f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb95c47f176d6bf90179957aad5d5ca997a45f4405953f8b4b04fb2d68f9450b4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb95c47f176d6bf90179957aad5d5ca997a45f4405953f8b4b04fb2d68f9450b4", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x000000000000000000000000000000000000010b": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010d": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010f": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", "balance": "0x3635c9adc5dea00000", @@ -3498,9 +12910,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x06", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3519,60 +12931,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0f", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000102": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda03e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e66f2fc7cae753a1395b2f69546712e4fa9a244d092c6e51bdceb0d9cec9efeba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x3e9312f9303ca5376cac25b8739f2d203b4e4834108ed77e8b945e166a8497b6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe66f2fc7cae753a1395b2f69546712e4fa9a244d092c6e51bdceb0d9cec9efeb", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xe808040d569f85aad20e7655a271ae0285091f3dd5174fbbe2a490f1bf1d480b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xe808040d569f85aad20e7655a271ae0285091f3dd5174fbbe2a490f1bf1d480b", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0e", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000103": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0d", + "0x00": "0x05", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3591,36 +13052,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0ccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a257d42468534a30074ac0d703533adc9f052384ecd0edf07a5db796dd458090a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xccd557e820d9fc808fa2bbed82cafbc378f2482a16b192c6ee66d9d673fc641a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa257d42468534a30074ac0d703533adc9f052384ecd0edf07a5db796dd458090", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x28f24b05ebc7baa22ce15e7e9a1a99e2f7a8e1dd166417a0a1a8fa4a2e6d0c77" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x28f24b05ebc7baa22ce15e7e9a1a99e2f7a8e1dd166417a0a1a8fa4a2e6d0c77", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0c", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000105": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0b", + "0x00": "0x04", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3639,12 +13173,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000106": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0fe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00c179c64331378b4a8e27bdb5a084499c88b065504adb0023bfd51204c199e16a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xfe7bc4627ee9a344ca17824149fb2e019ba218f0c2492075fdd0a0043b2e3b95", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0c179c64331378b4a8e27bdb5a084499c88b065504adb0023bfd51204c199e16", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xa515d5c46a94f1201078d814ac36f8984bcb2ef4a99cb72f171cfe12a0b04436" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa515d5c46a94f1201078d814ac36f8984bcb2ef4a99cb72f171cfe12a0b04436", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0a", + "0x00": "0x03", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3663,12 +13294,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda0f1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04cf0397576701716885353658167eb420efb23800012322dfeb6a92bec6e71f1a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf1e1646aee406ed9f68f627271dd4e78376f01d7fe847b6c4283e8cb36bb6b6f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x4cf0397576701716885353658167eb420efb23800012322dfeb6a92bec6e71f1", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0xb91a39db3eebcc0b3776826ee356c6f328e76df7021e62618316b5fab7585f2f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb91a39db3eebcc0b3776826ee356c6f328e76df7021e62618316b5fab7585f2f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x02", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3687,12 +13415,109 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Berlin-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Berlin", + "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378" + }, + "blocks": [ + { + "rlp": "0xf90265f901fda046833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02c9f2f0aa2c4de76c09d47096bf7a88b5de1af7b904bc5eade793a27a5ddf9daa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x46833713e2b9578976ed900a87edb974cd1972588bbd95132900bcebf1448378", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2c9f2f0aa2c4de76c09d47096bf7a88b5de1af7b904bc5eade793a27a5ddf9da", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "hash": "0x62da4ce05fb98fc91b58e042d3bd4343ee36d813d0185ac0f593cd9721fc28df" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x62da4ce05fb98fc91b58e042d3bd4343ee36d813d0185ac0f593cd9721fc28df", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x08", + "0x00": "0x01", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3711,12 +13536,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674f048c32", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x13edb68283bfd468beb4b35ad57499db571f6b882e4f14f1cfeee2dbbcc1afea" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea013edb68283bfd468beb4b35ad57499db571f6b882e4f14f1cfeee2dbbcc1afeaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0901b9f98f40defeaf703f6926d507bb3bc5ffa1abb637a78bc4bb31f4d3193c8a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x13edb68283bfd468beb4b35ad57499db571f6b882e4f14f1cfeee2dbbcc1afea", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x901b9f98f40defeaf703f6926d507bb3bc5ffa1abb637a78bc4bb31f4d3193c8", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xe8f90e513813c5e27cf820c618e4d89695968be8ab53d7952f1ed5098b2fb07f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xe8f90e513813c5e27cf820c618e4d89695968be8ab53d7952f1ed5098b2fb07f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x10", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3735,12 +13659,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xa09cf22d32e46a1ce792b677ed344896c9f8cc062cda84b46c3d207623bc9a53" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea0a09cf22d32e46a1ce792b677ed344896c9f8cc062cda84b46c3d207623bc9a53a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08cdc6c8da7bb23a1f03e35340beb9b6f2ee3e97d257ae778c1fc6d4cf3a9ef0da03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xa09cf22d32e46a1ce792b677ed344896c9f8cc062cda84b46c3d207623bc9a53", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x8cdc6c8da7bb23a1f03e35340beb9b6f2ee3e97d257ae778c1fc6d4cf3a9ef0d", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x6a9a81d9fa3fff81dc6c25b6a8a244c84c0867a7ccf3bd84ccd38056d3ee8833" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x6a9a81d9fa3fff81dc6c25b6a8a244c84c0867a7ccf3bd84ccd38056d3ee8833", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x06", + "0x00": "0x0f", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3759,12 +13782,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010b": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x0d0f9909ce196ed936b299971f8daae35f22641e968901e5e9a0fce9d07215fd" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea00d0f9909ce196ed936b299971f8daae35f22641e968901e5e9a0fce9d07215fda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa091c6a9ef067d089117435641f8f9b63e283193187c56452f55ce8da541f5463aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x0d0f9909ce196ed936b299971f8daae35f22641e968901e5e9a0fce9d07215fd", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x91c6a9ef067d089117435641f8f9b63e283193187c56452f55ce8da541f5463a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x6f7e13fb22934df4138ef693023ecefae461e2d9afb410e9b85fc3e1f2bdfbcd" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x6f7e13fb22934df4138ef693023ecefae461e2d9afb410e9b85fc3e1f2bdfbcd", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x05", + "0x00": "0x0e", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3783,36 +13905,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010c": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x056564b8714081daf441a1af05cc2dde1e2392a95ed7ac3052c0332121d4b7e0" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea0056564b8714081daf441a1af05cc2dde1e2392a95ed7ac3052c0332121d4b7e0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06bec8ed7488233382ca68c3f7e86e5c28fefa27ca94bf73273f10ee051959684a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x056564b8714081daf441a1af05cc2dde1e2392a95ed7ac3052c0332121d4b7e0", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6bec8ed7488233382ca68c3f7e86e5c28fefa27ca94bf73273f10ee051959684", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x45cea28f2dfd2f0020a842bba793b1b0f1391122a8f1392c9bd801dc573ffb87" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x45cea28f2dfd2f0020a842bba793b1b0f1391122a8f1392c9bd801dc573ffb87", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x04", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010d": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x03", + "0x00": "0x0d", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3831,12 +14028,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010e": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xda47a0ae9e6a9952ff64ca55bd050dbdef0eec6885df662c5c933e94dfae3cf9" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea0da47a0ae9e6a9952ff64ca55bd050dbdef0eec6885df662c5c933e94dfae3cf9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa044c9042bf0f06e4e4336afe585c4fad7a0d911a7d43e7812ec988864c74d9e5aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xda47a0ae9e6a9952ff64ca55bd050dbdef0eec6885df662c5c933e94dfae3cf9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x44c9042bf0f06e4e4336afe585c4fad7a0d911a7d43e7812ec988864c74d9e5a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x82dd2ee9d5582708d476214c8ea11d40d897bc10251023a5b1c967c0d0128f81" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x82dd2ee9d5582708d476214c8ea11d40d897bc10251023a5b1c967c0d0128f81", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x02", + "0x00": "0x0c", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3855,12 +14151,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010f": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x6dcc3336a4c87541fb8ff2a4b6ce3be4c25f419d659604e01f9f17052b8c5bfc" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea06dcc3336a4c87541fb8ff2a4b6ce3be4c25f419d659604e01f9f17052b8c5bfca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0808b3a4b83ee048d93efdeb8b2b515a563fd107a31b8a60e6645f7215a5184d9a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x6dcc3336a4c87541fb8ff2a4b6ce3be4c25f419d659604e01f9f17052b8c5bfc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x808b3a4b83ee048d93efdeb8b2b515a563fd107a31b8a60e6645f7215a5184d9", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x610bcec66f15c778f18b243618cf3a36c22b5ecf5fa42f1676cd6acfb0d363e7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x610bcec66f15c778f18b243618cf3a36c22b5ecf5fa42f1676cd6acfb0d363e7", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x0b", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -3881,30 +14276,31 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x1bc16d6752399aa0", + "balance": "0x1bc16d674eda2a0f", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5db2e6560", + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "005-fork=Istanbul": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP7]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, - "network": "Istanbul", - "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3916,354 +14312,57 @@ "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0" + "baseFeePerGas": "0x07", + "hash": "0x598bb5f8c4a913b13aa7aec5896429ec1b7cde5ba6db707ad888cb42555520a4" }, "blocks": [ { - "rlp": "0xf90824f901fda0c810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f4f4aed0d1813d2880d8bb1cb5697303c20002ac6bfc206635645f43805ccbcba05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a09d06daaa31b5192110e16c243d9ea7489e76f5c5d5b099b543998620785b1c0eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a0000835829108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0", + "rlp": "0xf90266f901fea0598bb5f8c4a913b13aa7aec5896429ec1b7cde5ba6db707ad888cb42555520a4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07086ecc6f58fa6f837c6238b2dfcd8e9e5e367abcf7d9586a30fea099e5c4612a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", "blockHeader": { - "parentHash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0", + "parentHash": "0x598bb5f8c4a913b13aa7aec5896429ec1b7cde5ba6db707ad888cb42555520a4", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xf4f4aed0d1813d2880d8bb1cb5697303c20002ac6bfc206635645f43805ccbcb", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x9d06daaa31b5192110e16c243d9ea7489e76f5c5d5b099b543998620785b1c0e", + "stateRoot": "0x7086ecc6f58fa6f837c6238b2dfcd8e9e5e367abcf7d9586a30fea099e5c4612", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x020000", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x582910", + "gasUsed": "0x060e05", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0x95408bd87da598d83e81d07479d20fd9eed98a4f5cc4d4d0e7ab346ae1e0b7c8" + "baseFeePerGas": "0x07", + "hash": "0xd922e984eb52359cd931984566e370a5390515478b77b3baf4bf3ffef411a805" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", - "chainId": "0x01", - "nonce": "0x00", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000100", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", - "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - } - ], - "uncleHeaders": [] - } - ], - "lastblockhash": "0x95408bd87da598d83e81d07479d20fd9eed98a4f5cc4d4d0e7ab346ae1e0b7c8", - "pre": { - "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010b": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010d": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010f": { + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xd922e984eb52359cd931984566e370a5390515478b77b3baf4bf3ffef411a805", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -4277,9 +14376,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x0a", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -4298,60 +14397,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0f", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000102": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x02df2c694de2584e88fe5695e6278a244260291fe609898592279b7601bfe4e7" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea002df2c694de2584e88fe5695e6278a244260291fe609898592279b7601bfe4e7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5c9f651fd7475db3f80efe2ec2fde9b9abb3daceeb57c81b7a93ac67b2b3a80a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x02df2c694de2584e88fe5695e6278a244260291fe609898592279b7601bfe4e7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa5c9f651fd7475db3f80efe2ec2fde9b9abb3daceeb57c81b7a93ac67b2b3a80", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x37510c285b291ac27ce1e8f60e24e010a67bb7a3573d8f8b0a945a56ae82087f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x37510c285b291ac27ce1e8f60e24e010a67bb7a3573d8f8b0a945a56ae82087f", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0e", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000103": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0d", + "0x00": "0x09", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -4370,60 +14520,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0c", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000105": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xbc28827c9a0b06eb54ee7718d2f2fe03fd0d11a77481c2bf6b8420c56f0572f4" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea0bc28827c9a0b06eb54ee7718d2f2fe03fd0d11a77481c2bf6b8420c56f0572f4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e82f8bfec601ea40c247b6fa663728b359d0eca1713f56218ab01d54862d44b0a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xbc28827c9a0b06eb54ee7718d2f2fe03fd0d11a77481c2bf6b8420c56f0572f4", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe82f8bfec601ea40c247b6fa663728b359d0eca1713f56218ab01d54862d44b0", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x3b3574790608b9db5fba475b2c48df6d253ebe3744ad7cef29614bd52d4cc0f7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x3b3574790608b9db5fba475b2c48df6d253ebe3744ad7cef29614bd52d4cc0f7", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0b", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000106": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0a", + "0x00": "0x08", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -4442,12 +14643,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xe4f3acfc4df2f410d83d6fe500815096ccef76958468f393606f87fe0245dac7" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea0e4f3acfc4df2f410d83d6fe500815096ccef76958468f393606f87fe0245dac7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00d51272d2da47416117f629cfb37491e4f21b7b61314f23cb0edd2d36fe1cfd8a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xe4f3acfc4df2f410d83d6fe500815096ccef76958468f393606f87fe0245dac7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x0d51272d2da47416117f629cfb37491e4f21b7b61314f23cb0edd2d36fe1cfd8", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x4eb128cf4fc1299e4b11c2fd1df777510ed1e038fe7e676bd5c4ce7c2288c520" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4eb128cf4fc1299e4b11c2fd1df777510ed1e038fe7e676bd5c4ce7c2288c520", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x07", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -4466,12 +14766,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x507253b8140e40c4787b8c58b8d3bb465d2e645a01054091efeee0db036d6766" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea0507253b8140e40c4787b8c58b8d3bb465d2e645a01054091efeee0db036d6766a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0188bf1aa4bef536e7831b44c8070f08cac8f838b909abdbdb59a0272a3d2b7efa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x507253b8140e40c4787b8c58b8d3bb465d2e645a01054091efeee0db036d6766", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x188bf1aa4bef536e7831b44c8070f08cac8f838b909abdbdb59a0272a3d2b7ef", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xacfbcd99bad8422be87d1d2514976cafde61e53737bc7d4bd85ac96706d275ea" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xacfbcd99bad8422be87d1d2514976cafde61e53737bc7d4bd85ac96706d275ea", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x08", + "0x00": "0x06", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -4490,55 +14889,106 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x09b9e9111004b7992457f9d7882194bef2dcac0251fdb8873e2bee6e8040ae09" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea009b9e9111004b7992457f9d7882194bef2dcac0251fdb8873e2bee6e8040ae09a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d7ed141f4bd520bfc0b1133bca3286e9e0c0adbb8ce786a97271c68a99b2da21a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x09b9e9111004b7992457f9d7882194bef2dcac0251fdb8873e2bee6e8040ae09", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd7ed141f4bd520bfc0b1133bca3286e9e0c0adbb8ce786a97271c68a99b2da21", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x249919edb73e2966337d95a9192cf47c1e736be0b5b3f5418259e17b0725f029" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x249919edb73e2966337d95a9192cf47c1e736be0b5b3f5418259e17b0725f029", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x07", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010a": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x06", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } - }, - "0x000000000000000000000000000000000000010b": { + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -4562,36 +15012,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010c": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xe7c974775839049476bec60130f583474ad7dccfc4f999cf6d5afb63bebd8197" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea0e7c974775839049476bec60130f583474ad7dccfc4f999cf6d5afb63bebd8197a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0206e96315c853b214a551d393a612d1a8375c8d433100313689d0a3c49ac89fea03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xe7c974775839049476bec60130f583474ad7dccfc4f999cf6d5afb63bebd8197", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x206e96315c853b214a551d393a612d1a8375c8d433100313689d0a3c49ac89fe", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xb98ade279f8430c489a8c93d5e245fdd94f97f7ac43375128d8a3ab4a9a428ca" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xb98ade279f8430c489a8c93d5e245fdd94f97f7ac43375128d8a3ab4a9a428ca", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x04", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "storage": {} }, - "0x000000000000000000000000000000000000010d": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x03", + "0x00": "0x04", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -4610,36 +15135,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010e": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x3c846c681f312c479abb7ff13d31fa4bffb6605322a0105d997e5f5246352fc5" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea03c846c681f312c479abb7ff13d31fa4bffb6605322a0105d997e5f5246352fc5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09deb57be56d8ffef95a63f12e18bc44aac3c831a657415c8173bdd7f332bfb8fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x3c846c681f312c479abb7ff13d31fa4bffb6605322a0105d997e5f5246352fc5", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9deb57be56d8ffef95a63f12e18bc44aac3c831a657415c8173bdd7f332bfb8f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xe8d715a645785d70ecb3526193c2588caf271145cbef9525e22adbc296f65dd2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xe8d715a645785d70ecb3526193c2588caf271145cbef9525e22adbc296f65dd2", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x02", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010f": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x03", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -4660,30 +15260,31 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x1bc16d6752399aa0", + "balance": "0x1bc16d674eda2a0f", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5db2e6560", + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "006-fork=Berlin": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP15]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, - "network": "Berlin", - "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4695,29 +15296,32 @@ "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0" + "baseFeePerGas": "0x07", + "hash": "0x263a6a89d13b680c61a186a6fbd8a7382adf9e9e6fe94519659af14a930a2f9b" }, "blocks": [ { - "rlp": "0xf90824f901fda0c810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01f6c14272d3bc06258746a7ecbe16dceb38c4daeae0b05c1d43947dff3b554f2a05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a049454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008360e0508203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0", + "rlp": "0xf90266f901fea0263a6a89d13b680c61a186a6fbd8a7382adf9e9e6fe94519659af14a930a2f9ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d9035509b1186a0810270f716aae3832d485a8bec436e933656525f9a2d8f97aa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", "blockHeader": { - "parentHash": "0xc810e8b08eb96d47a6984215aa8b6394e4f72ebc75b5103df5e3d3450672d7d0", + "parentHash": "0x263a6a89d13b680c61a186a6fbd8a7382adf9e9e6fe94519659af14a930a2f9b", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x1f6c14272d3bc06258746a7ecbe16dceb38c4daeae0b05c1d43947dff3b554f2", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x49454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8", + "stateRoot": "0xd9035509b1186a0810270f716aae3832d485a8bec436e933656525f9a2d8f97a", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x020000", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x60e050", + "gasUsed": "0x060e05", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", - "hash": "0x424388b2144fd24d870801f0dda8b01d9652782d67adee95886b06ad6e6b09a8" + "baseFeePerGas": "0x07", + "hash": "0x3a03542eefcb77f765fbab3ee6ce40c39da2bd79ca877394e768eba002f32fc8" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4732,314 +15336,137 @@ "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], "uncleHeaders": [] } ], - "lastblockhash": "0x424388b2144fd24d870801f0dda8b01d9652782d67adee95886b06ad6e6b09a8", + "lastblockhash": "0x3a03542eefcb77f765fbab3ee6ce40c39da2bd79ca877394e768eba002f32fc8", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x000000000000000000000000000000000000010b": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "balance": "0x3635c9adc5dea00000", + "code": "0x", "storage": {} - }, - "0x000000000000000000000000000000000000010c": { + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x02", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "balance": "0x1bc16d674eda2a0f", + "code": "0x", "storage": {} }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", "storage": {} - }, - "0x000000000000000000000000000000000000010f": { + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_London-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "London", + "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xa8d3ebc4acda11fb47055c3b73f6626b31beed166b07d671f8bbe86c66cb3e75" + }, + "blocks": [ + { + "rlp": "0xf90266f901fea0a8d3ebc4acda11fb47055c3b73f6626b31beed166b07d671f8bbe86c66cb3e75a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bcfd1f54f93d01709f584bac8228c6e06571fb01a4a3dff2cf86478743195e68a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xa8d3ebc4acda11fb47055c3b73f6626b31beed166b07d671f8bbe86c66cb3e75", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xbcfd1f54f93d01709f584bac8228c6e06571fb01a4a3dff2cf86478743195e68", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x020000", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x25944b11583a1a41bc9ed1c0ad71f3241a4f77963768bfa8373b5d9fb3abe91e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x25944b11583a1a41bc9ed1c0ad71f3241a4f77963768bfa8373b5d9fb3abe91e", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -5056,9 +15483,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x01", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5077,60 +15504,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0f", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x1bc16d674eda2a0f", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000102": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x5c1ba36ff70e1873c9f7a4b814d49dab4310545ba9efc9ab02a01f3243dbf862" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba05c1ba36ff70e1873c9f7a4b814d49dab4310545ba9efc9ab02a01f3243dbf862a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa038c1479a18b585a3f560ff6a12ac4b92c473db8a1f96d15fd71449e85bcf3380a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x5c1ba36ff70e1873c9f7a4b814d49dab4310545ba9efc9ab02a01f3243dbf862", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x38c1479a18b585a3f560ff6a12ac4b92c473db8a1f96d15fd71449e85bcf3380", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x290388273584b6c2de06b89290fc4c8b1379213a661f379feb79a1b539198d07" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x290388273584b6c2de06b89290fc4c8b1379213a661f379feb79a1b539198d07", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0e", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000103": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0d", + "0x00": "0x10", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5149,36 +15627,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x2c036aa58fc80b077c53094702fe7fb4420e78f30971ca959e171b21b0cf238d" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba02c036aa58fc80b077c53094702fe7fb4420e78f30971ca959e171b21b0cf238da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06f481cf56b03c3ea5d109c0ac854ba516cb1423e8597a3ebbe0161692a9d4300a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x2c036aa58fc80b077c53094702fe7fb4420e78f30971ca959e171b21b0cf238d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6f481cf56b03c3ea5d109c0ac854ba516cb1423e8597a3ebbe0161692a9d4300", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x47163f5e6f6431b6f825acbdee0dc30240f828e132bf4cf90caf0de560d8d421" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x47163f5e6f6431b6f825acbdee0dc30240f828e132bf4cf90caf0de560d8d421", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0c", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000105": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0b", + "0x00": "0x0f", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5197,12 +15750,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000106": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x266f9e12ce1a1322bf0ce5964dc82b9f00891e5e49ff861aea6dcf6332db6c60" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba0266f9e12ce1a1322bf0ce5964dc82b9f00891e5e49ff861aea6dcf6332db6c60a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d4165987566365d3e35f91ba30151c704074e0e9f6587973cb4af0f59d34e377a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x266f9e12ce1a1322bf0ce5964dc82b9f00891e5e49ff861aea6dcf6332db6c60", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd4165987566365d3e35f91ba30151c704074e0e9f6587973cb4af0f59d34e377", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xa874dcfc07b211d5aa7cac6618b0e51d021cf2d044fde8741b24af49f4c45965" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa874dcfc07b211d5aa7cac6618b0e51d021cf2d044fde8741b24af49f4c45965", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0a", + "0x00": "0x0e", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5221,12 +15873,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x4c436b157c30693ec1436b61454d12309ab5c90713b5110d97703a1cdc7570d1" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba04c436b157c30693ec1436b61454d12309ab5c90713b5110d97703a1cdc7570d1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0652c94d6128e88622ff4ade2fa82eba219dec64f4d8b19c065ddc5b054096898a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x4c436b157c30693ec1436b61454d12309ab5c90713b5110d97703a1cdc7570d1", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x652c94d6128e88622ff4ade2fa82eba219dec64f4d8b19c065ddc5b054096898", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x03bf877d8633b8b26b2afd10a3a6cd5a4ad157f7da4763cc1429c017d1b1743e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x03bf877d8633b8b26b2afd10a3a6cd5a4ad157f7da4763cc1429c017d1b1743e", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x0d", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5245,12 +15996,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x0dbf5cfe611931ea1c31e0b2c9fa1eb59a7300e59195023958f593e600557f26" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba00dbf5cfe611931ea1c31e0b2c9fa1eb59a7300e59195023958f593e600557f26a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a937e85081bea8f4aba5cda0e3c9250e4ce7a100568535fd7a966405a8ef5ab4a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x0dbf5cfe611931ea1c31e0b2c9fa1eb59a7300e59195023958f593e600557f26", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa937e85081bea8f4aba5cda0e3c9250e4ce7a100568535fd7a966405a8ef5ab4", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x2d07cb2e2cf8874322e8b16a04dba6eacc6dd336897a958477f29c71fdb769e0" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x2d07cb2e2cf8874322e8b16a04dba6eacc6dd336897a958477f29c71fdb769e0", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x08", + "0x00": "0x0c", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5269,12 +16119,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xe62cf4fed6f368893fdc36890e08984443faa97b60c0421adf4abe6bb568c7b3" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba0e62cf4fed6f368893fdc36890e08984443faa97b60c0421adf4abe6bb568c7b3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02c8b03776d2bfe28afb55c3775e564344448fc5bcb2af759ed31530b61938b45a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xe62cf4fed6f368893fdc36890e08984443faa97b60c0421adf4abe6bb568c7b3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2c8b03776d2bfe28afb55c3775e564344448fc5bcb2af759ed31530b61938b45", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x863923c1411042174d861c73e884927739a20d8d25900356572357ac53bfef40" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x863923c1411042174d861c73e884927739a20d8d25900356572357ac53bfef40", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x0b", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5293,12 +16242,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xa8d85549f02fa491d1d2799c9dc4f14f450997afe0467e04fcd5cc8a1f459350" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba0a8d85549f02fa491d1d2799c9dc4f14f450997afe0467e04fcd5cc8a1f459350a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c1d6e429502d58b64daedc64e635fb23493369f9dea30029a8d62391a2830893a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xa8d85549f02fa491d1d2799c9dc4f14f450997afe0467e04fcd5cc8a1f459350", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc1d6e429502d58b64daedc64e635fb23493369f9dea30029a8d62391a2830893", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xccef6d7a32455bb9c25635470353a346a397aee560a9a81625568008f4930ad9" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xccef6d7a32455bb9c25635470353a346a397aee560a9a81625568008f4930ad9", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x06", + "0x00": "0x0a", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5317,12 +16365,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010b": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x8ed656c1bc0700c5db099c1e8cd0c55a1eb7b0201888b25326ede16d7a3faca6" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba08ed656c1bc0700c5db099c1e8cd0c55a1eb7b0201888b25326ede16d7a3faca6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c7a1ed5ee0b7ada8a543fa32e97a0dfef409320abe44aac6488f370712eb29ba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x8ed656c1bc0700c5db099c1e8cd0c55a1eb7b0201888b25326ede16d7a3faca6", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c7a1ed5ee0b7ada8a543fa32e97a0dfef409320abe44aac6488f370712eb29b", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xc9124b5bd6641bf0f17dcffb4465779e0854635857e6469e6f54050aa6725ff7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xc9124b5bd6641bf0f17dcffb4465779e0854635857e6469e6f54050aa6725ff7", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x05", + "0x00": "0x09", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5341,12 +16488,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010c": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xc581e8e453ff897e06cf559a8a28e574b60889add1c770f061066cecc6468558" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba0c581e8e453ff897e06cf559a8a28e574b60889add1c770f061066cecc6468558a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0810e5aab780323cfb0a715f996a6994ce9b535c0ff17c0151a4fe7a6c8edc0d4a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xc581e8e453ff897e06cf559a8a28e574b60889add1c770f061066cecc6468558", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x810e5aab780323cfb0a715f996a6994ce9b535c0ff17c0151a4fe7a6c8edc0d4", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x4019837866622786f11fbee12bc8a89b5079831879f6abd1fe6d26078d4a916c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x4019837866622786f11fbee12bc8a89b5079831879f6abd1fe6d26078d4a916c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x04", + "0x00": "0x08", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5365,12 +16611,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x1c509db0d6e20d4aa2c4a410b7b5293bb160167e405422ee0f02b61c980e168c" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba01c509db0d6e20d4aa2c4a410b7b5293bb160167e405422ee0f02b61c980e168ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b4f933ae11a753bb5e9838e2b2106833497233fad40bb52a30cdba758e104e58a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x1c509db0d6e20d4aa2c4a410b7b5293bb160167e405422ee0f02b61c980e168c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb4f933ae11a753bb5e9838e2b2106833497233fad40bb52a30cdba758e104e58", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xef60f2b68cf74285284647d095fe8468e2ec5d9f43aac59d0f437f256793b8ce" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xef60f2b68cf74285284647d095fe8468e2ec5d9f43aac59d0f437f256793b8ce", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x03", + "0x00": "0x07", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5389,36 +16734,111 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010e": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x2c995c4bb63ea22869142e0a5bf783d8853756f2f3ca0f5e3f95809b2c02c3a7" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba02c995c4bb63ea22869142e0a5bf783d8853756f2f3ca0f5e3f95809b2c02c3a7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a0dedae3029b36ad3bdd827ed3082222c7d51da98c4c97a32f1a660c2c951801a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x2c995c4bb63ea22869142e0a5bf783d8853756f2f3ca0f5e3f95809b2c02c3a7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa0dedae3029b36ad3bdd827ed3082222c7d51da98c4c97a32f1a660c2c951801", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x9e3c874f4a2a33757cb0e0cb897e8103cb53aed48db7074a69649d30f20bdf8b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x9e3c874f4a2a33757cb0e0cb897e8103cb53aed48db7074a69649d30f20bdf8b", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x02", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010f": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x06", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5439,34 +16859,35 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x1bc16d675290c320", + "balance": "0x122a0f", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5dad73ce0", + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "007-fork=London": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP12]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, - "network": "London", - "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x020000", + "difficulty": "0x00", "number": "0x00", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", @@ -5475,30 +16896,31 @@ "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", - "hash": "0xaa05b96d34beeb9b93a776ba65ba48c53c5a8b2b88b25a4098f6a555ce1252d1" + "hash": "0x3edb5003a023832b4b87235b4912e12e7005190313be6cad3b823e2ca01e78e0" }, "blocks": [ { - "rlp": "0xf90825f901fea0aa05b96d34beeb9b93a776ba65ba48c53c5a8b2b88b25a4098f6a555ce1252d1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03109e405cfb5a9c405a05f8626d31826570536b5015e45ace4fca1b90724db30a05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a049454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000188016345785d8a00008360e0508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0", + "rlp": "0xf90263f901fba03edb5003a023832b4b87235b4912e12e7005190313be6cad3b823e2ca01e78e0a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0595de1323ab08cb9c00a260084c7166f4db5068d2ecaaa598917a014a50961f0a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", "blockHeader": { - "parentHash": "0xaa05b96d34beeb9b93a776ba65ba48c53c5a8b2b88b25a4098f6a555ce1252d1", + "parentHash": "0x3edb5003a023832b4b87235b4912e12e7005190313be6cad3b823e2ca01e78e0", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x3109e405cfb5a9c405a05f8626d31826570536b5015e45ace4fca1b90724db30", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x49454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8", + "stateRoot": "0x595de1323ab08cb9c00a260084c7166f4db5068d2ecaaa598917a014a50961f0", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "difficulty": "0x020000", + "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x60e050", + "gasUsed": "0x060e05", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", - "hash": "0xc1705a8ca6692746b7699d3b8d3f04ee356498864aaec9d6bc1b8ffcf759cb9a" + "hash": "0x1f4828fbff719c0ebf71af04eab2b5e0811644fdc8586525a12c5f17bba4f7e3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5513,317 +16935,17 @@ "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } - ], - "uncleHeaders": [] - } - ], - "lastblockhash": "0xc1705a8ca6692746b7699d3b8d3f04ee356498864aaec9d6bc1b8ffcf759cb9a", - "pre": { - "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010b": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010d": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010f": { + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x1f4828fbff719c0ebf71af04eab2b5e0811644fdc8586525a12c5f17bba4f7e3", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -5837,9 +16959,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x05", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5858,60 +16980,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0f", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x122a0f", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000102": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x1100bf5cfe81b425dc27bd5cdd62afd223868afe7bd4e8771c91f4682e518ee8" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba01100bf5cfe81b425dc27bd5cdd62afd223868afe7bd4e8771c91f4682e518ee8a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa009a71bf4917b6728768b188526f28bee8ef2a75f57b3aa8c61416443cd591815a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x1100bf5cfe81b425dc27bd5cdd62afd223868afe7bd4e8771c91f4682e518ee8", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x09a71bf4917b6728768b188526f28bee8ef2a75f57b3aa8c61416443cd591815", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xf6944f57c43573409a650e53d0840c31332d9afac6ed67e991a8c4fd23fdcdc4" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xf6944f57c43573409a650e53d0840c31332d9afac6ed67e991a8c4fd23fdcdc4", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0e", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000103": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0d", + "0x00": "0x04", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -5930,60 +17103,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0c", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x122a0f", + "code": "0x", + "storage": {} }, - "0x0000000000000000000000000000000000000105": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xf1f7a342a13dcb5fd6ee4f8278956a8a6c9eadc781c7d16dc237a902997776dc" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba0f1f7a342a13dcb5fd6ee4f8278956a8a6c9eadc781c7d16dc237a902997776dca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0276680c10b32b07bbb9ba2f28542f87d15dd3c518d51f1c14d987019a8dd7fb6a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf1f7a342a13dcb5fd6ee4f8278956a8a6c9eadc781c7d16dc237a902997776dc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x276680c10b32b07bbb9ba2f28542f87d15dd3c518d51f1c14d987019a8dd7fb6", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xc2135ee30d724cfe3e0a3595801bfa6e83ec3d82efc7fbc650fb488ccadb7f2d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xc2135ee30d724cfe3e0a3595801bfa6e83ec3d82efc7fbc650fb488ccadb7f2d", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0b", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000106": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0a", + "0x00": "0x03", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6002,12 +17226,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x87fc0c311d32f142298f8650f2b724fe42787e1972c532d4c3879afee19308b9" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba087fc0c311d32f142298f8650f2b724fe42787e1972c532d4c3879afee19308b9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06bb958279fcd294d1a773eb5941c22fbf1e08ec266424790ae5b8008e77c8dc3a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0x87fc0c311d32f142298f8650f2b724fe42787e1972c532d4c3879afee19308b9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6bb958279fcd294d1a773eb5941c22fbf1e08ec266424790ae5b8008e77c8dc3", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xa3563b8e22087fe7e63d68b6c872a481f574b70e44d0f4464f276d67cece70de" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0xa3563b8e22087fe7e63d68b6c872a481f574b70e44d0f4464f276d67cece70de", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x02", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6026,12 +17349,111 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Paris-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Merge", + "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0xf000161278982d5e30dbcaf0c1731357052c0484fe41c8e9f444a77feaefde7d" + }, + "blocks": [ + { + "rlp": "0xf90263f901fba0f000161278982d5e30dbcaf0c1731357052c0484fe41c8e9f444a77feaefde7da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0925a5de922d0ebec0ebb790beda8f3207e63413537a7a0d1577b0fdd78069f6fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0", + "blockHeader": { + "parentHash": "0xf000161278982d5e30dbcaf0c1731357052c0484fe41c8e9f444a77feaefde7d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x925a5de922d0ebec0ebb790beda8f3207e63413537a7a0d1577b0fdd78069f6f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "hash": "0x42fd9ae31d1911ca36dfd9b304403fc69037cd4ffa0633dba000d70ce25e0600" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [] + } + ], + "lastblockhash": "0x42fd9ae31d1911ca36dfd9b304403fc69037cd4ffa0633dba000d70ce25e0600", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x08", + "0x00": "0x01", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6050,12 +17472,114 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7faa1f3ee34221a3abf50a4f073ad786d1e4000fd7f957f2b6809e37ca4ddf58", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x889dfe9b423b8107e3eb41ef2a8c39a645a2eeea5a72b1e9726d6d592277c849" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca0889dfe9b423b8107e3eb41ef2a8c39a645a2eeea5a72b1e9726d6d592277c849a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa038c1479a18b585a3f560ff6a12ac4b92c473db8a1f96d15fd71449e85bcf3380a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x889dfe9b423b8107e3eb41ef2a8c39a645a2eeea5a72b1e9726d6d592277c849", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x38c1479a18b585a3f560ff6a12ac4b92c473db8a1f96d15fd71449e85bcf3380", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xea17b37cf09ac40223ef0212bdb679e115060dd45b57d5fa8280b11d671d0164" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xea17b37cf09ac40223ef0212bdb679e115060dd45b57d5fa8280b11d671d0164", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x10", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6074,60 +17598,114 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x06", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x122a0f", + "code": "0x", + "storage": {} }, - "0x000000000000000000000000000000000000010b": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x5add88c475374e361e0af4e4dbd6223b1a2b3d1295c1a55771fb4550d21bbf2d", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xbf4ca35cc038fab483072e029cf8744825de3cebb1e7de506de6320dddf6e3fe" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca0bf4ca35cc038fab483072e029cf8744825de3cebb1e7de506de6320dddf6e3fea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06f481cf56b03c3ea5d109c0ac854ba516cb1423e8597a3ebbe0161692a9d4300a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xbf4ca35cc038fab483072e029cf8744825de3cebb1e7de506de6320dddf6e3fe", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6f481cf56b03c3ea5d109c0ac854ba516cb1423e8597a3ebbe0161692a9d4300", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x205aa7ba400e730c23ebdabd6ceb04f3a4b147336da20262ac93cdb79fd2a358" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x205aa7ba400e730c23ebdabd6ceb04f3a4b147336da20262ac93cdb79fd2a358", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x05", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010c": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x04", + "0x00": "0x0f", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6146,60 +17724,114 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x03", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "balance": "0x122a0f", + "code": "0x", + "storage": {} }, - "0x000000000000000000000000000000000000010e": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e51780b01d8c820a5a13ec0f0c3aed7a5e3d2a6e8b9b0662f4a1562b04d0956", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xb95313bcdb2dbff040bbd1fa941ded83bdf648dc1998bc387dd3915e8da63001" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca0b95313bcdb2dbff040bbd1fa941ded83bdf648dc1998bc387dd3915e8da63001a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0d4165987566365d3e35f91ba30151c704074e0e9f6587973cb4af0f59d34e377a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xb95313bcdb2dbff040bbd1fa941ded83bdf648dc1998bc387dd3915e8da63001", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xd4165987566365d3e35f91ba30151c704074e0e9f6587973cb4af0f59d34e377", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xa0a1204a14448afac2fdf3ff7c674bd9fd29ecc85c3f3c053db61683ea634f09" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa0a1204a14448afac2fdf3ff7c674bd9fd29ecc85c3f3c053db61683ea634f09", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x02", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010f": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x0e", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6220,30 +17852,31 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x1bc16d674feaa0f0", + "balance": "0x122a0f", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5dad73ce0", + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "008-fork=Merge": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP4]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, - "network": "Merge", - "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0xfb0639d54beb6b793b1e3c59767e97983e99c2f044f41a995e8dc87911b9db27", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6256,30 +17889,33 @@ "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", - "hash": "0x3ce83ab68c412c857b1cb51fd2791619f909218f07ba659bff70f89fe4518616" + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xe14ac31a8d9e0305efbef95ea20ee99cee5973bc3295d15795ae7cf867a9729c" }, "blocks": [ { - "rlp": "0xf90822f901fba03ce83ab68c412c857b1cb51fd2791619f909218f07ba659bff70f89fe4518616a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa069f76ad7abb256bb8ebb9d4ea8d0a29ea9efd43d7c7e5fdbf97c697af54a8737a05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a049454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008360e0508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0", + "rlp": "0xf90285f9021ca0e14ac31a8d9e0305efbef95ea20ee99cee5973bc3295d15795ae7cf867a9729ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0652c94d6128e88622ff4ade2fa82eba219dec64f4d8b19c065ddc5b054096898a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", "blockHeader": { - "parentHash": "0x3ce83ab68c412c857b1cb51fd2791619f909218f07ba659bff70f89fe4518616", + "parentHash": "0xe14ac31a8d9e0305efbef95ea20ee99cee5973bc3295d15795ae7cf867a9729c", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x69f76ad7abb256bb8ebb9d4ea8d0a29ea9efd43d7c7e5fdbf97c697af54a8737", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x49454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8", + "stateRoot": "0x652c94d6128e88622ff4ade2fa82eba219dec64f4d8b19c065ddc5b054096898", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x60e050", + "gasUsed": "0x060e05", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", - "hash": "0x2aadb42e7af541b4e3d2f5b4dc49285e78941a59c0d3fd139fefffb43c1a625e" + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xc49628fcc40e8272abcf023f6fb42dafc051fb62a5c9c11e93a2330ba6aff3e0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -6294,317 +17930,144 @@ "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], - "uncleHeaders": [] + "uncleHeaders": [], + "withdrawals": [] } ], - "lastblockhash": "0x2aadb42e7af541b4e3d2f5b4dc49285e78941a59c0d3fd139fefffb43c1a625e", + "lastblockhash": "0xc49628fcc40e8272abcf023f6fb42dafc051fb62a5c9c11e93a2330ba6aff3e0", "pre": { "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010b": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "balance": "0x3635c9adc5dea00000", + "code": "0x", "storage": {} - }, - "0x000000000000000000000000000000000000010c": { + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x0d", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "balance": "0x122a0f", + "code": "0x", "storage": {} }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", "storage": {} - }, - "0x000000000000000000000000000000000000010f": { + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xd9d2cba4773b3399f3706b0699370151a6a72ba4ff8f0cd739177fb8bf1a4458", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x4b2608e9ed30dd844192914a95a4bb3e060f8e7a5bb36f0d180d056460032d51" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca04b2608e9ed30dd844192914a95a4bb3e060f8e7a5bb36f0d180d056460032d51a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a937e85081bea8f4aba5cda0e3c9250e4ce7a100568535fd7a966405a8ef5ab4a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x4b2608e9ed30dd844192914a95a4bb3e060f8e7a5bb36f0d180d056460032d51", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa937e85081bea8f4aba5cda0e3c9250e4ce7a100568535fd7a966405a8ef5ab4", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x7d0a37d07125040bd90db7c3e109ee503e35e419d20ea85f3a64421db869f421" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x7d0a37d07125040bd90db7c3e109ee503e35e419d20ea85f3a64421db869f421", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -6618,9 +18081,9 @@ "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x10", + "0x00": "0x0c", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6639,36 +18102,114 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a022af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fefa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x22af1683098c81169a31ba4dd712ab84b90d84bdc145202f063ec5007fb75fef", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x23937edf4ccf9eb3e66486bcf42ad3a054bd984a7c77e62430251e2ce682b13b" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca023937edf4ccf9eb3e66486bcf42ad3a054bd984a7c77e62430251e2ce682b13ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02c8b03776d2bfe28afb55c3775e564344448fc5bcb2af759ed31530b61938b45a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x23937edf4ccf9eb3e66486bcf42ad3a054bd984a7c77e62430251e2ce682b13b", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2c8b03776d2bfe28afb55c3775e564344448fc5bcb2af759ed31530b61938b45", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x025a42376d755a80bc192370eb07bb352d5027032c13453ef25c1304375a40db" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x025a42376d755a80bc192370eb07bb352d5027032c13453ef25c1304375a40db", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0f", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000102": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0e", + "0x00": "0x0b", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6687,36 +18228,114 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000103": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdc2f34bb76eeb9599aca00a2cb4b55d17f3ba4908d7dab0fea75eaffdf43755f", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xe0954f43d0032d63300ac2d2ff80b3de2f29067598f43b279ce066b0b38b58b2" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca0e0954f43d0032d63300ac2d2ff80b3de2f29067598f43b279ce066b0b38b58b2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c1d6e429502d58b64daedc64e635fb23493369f9dea30029a8d62391a2830893a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xe0954f43d0032d63300ac2d2ff80b3de2f29067598f43b279ce066b0b38b58b2", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc1d6e429502d58b64daedc64e635fb23493369f9dea30029a8d62391a2830893", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xfbc450ec42116b6a09eb33e86f4079c86ed7f33df73434c2b8083807266f54aa" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xfbc450ec42116b6a09eb33e86f4079c86ed7f33df73434c2b8083807266f54aa", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0d", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x0000000000000000000000000000000000000104": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0c", + "0x00": "0x0a", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6735,12 +18354,114 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000105": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc6cffb8f869fa187e2adc4f9cd379e9b9e5a294a3cc703b8de4b929d445650e3", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x8f98c445d4eadb4885cfffe56ab79347e6fbd264e332b8b14087d3333b74b64c" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca08f98c445d4eadb4885cfffe56ab79347e6fbd264e332b8b14087d3333b74b64ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09c7a1ed5ee0b7ada8a543fa32e97a0dfef409320abe44aac6488f370712eb29ba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x8f98c445d4eadb4885cfffe56ab79347e6fbd264e332b8b14087d3333b74b64c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9c7a1ed5ee0b7ada8a543fa32e97a0dfef409320abe44aac6488f370712eb29b", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xa209517d46105ac5b4e8be0c5ef97069cc9daadf058644d1509675c4620d0b94" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa209517d46105ac5b4e8be0c5ef97069cc9daadf058644d1509675c4620d0b94", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0b", + "0x00": "0x09", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6759,12 +18480,114 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000106": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368afa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9ae2d6c2e1c7602cacadd6dac74bf60315388baf7b20929e0bebc5b9ca368af", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xb8716e335deda05a10b3795a9d43db794279b4f7c83b7964aa745371ef0b707d" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca0b8716e335deda05a10b3795a9d43db794279b4f7c83b7964aa745371ef0b707da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0810e5aab780323cfb0a715f996a6994ce9b535c0ff17c0151a4fe7a6c8edc0d4a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xb8716e335deda05a10b3795a9d43db794279b4f7c83b7964aa745371ef0b707d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x810e5aab780323cfb0a715f996a6994ce9b535c0ff17c0151a4fe7a6c8edc0d4", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x1a765638f48dde3a47d57b0547be3b49de3eeca76d86d3045de7b2e3720455ac" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x1a765638f48dde3a47d57b0547be3b49de3eeca76d86d3045de7b2e3720455ac", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0a", + "0x00": "0x08", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6783,12 +18606,114 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP10]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6121bfb2579ead3b6653b4b4c54c41935eecdae3a39331d58cbfaa9e36993300", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9eb3ededccb4c8f3b78623d3f940c210e11fd32e6875ccb54280469105b84cb7" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca09eb3ededccb4c8f3b78623d3f940c210e11fd32e6875ccb54280469105b84cb7a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b4f933ae11a753bb5e9838e2b2106833497233fad40bb52a30cdba758e104e58a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x9eb3ededccb4c8f3b78623d3f940c210e11fd32e6875ccb54280469105b84cb7", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb4f933ae11a753bb5e9838e2b2106833497233fad40bb52a30cdba758e104e58", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xc6a08b14be5b1be483c54e1abc38c4f8828140e4a08e30b4f5de4ac17246cdc5" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc6a08b14be5b1be483c54e1abc38c4f8828140e4a08e30b4f5de4ac17246cdc5", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x07", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6807,12 +18732,114 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x0e0fc4745e9f2a427cd20517de531722c3e5d76e3e0fac98ee842dea7506ad93", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x9ee4ae13cf338116fd945a09323728b1ac7fc118800b3da8dcb4c69cf43948a9" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca09ee4ae13cf338116fd945a09323728b1ac7fc118800b3da8dcb4c69cf43948a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a0dedae3029b36ad3bdd827ed3082222c7d51da98c4c97a32f1a660c2c951801a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x9ee4ae13cf338116fd945a09323728b1ac7fc118800b3da8dcb4c69cf43948a9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xa0dedae3029b36ad3bdd827ed3082222c7d51da98c4c97a32f1a660c2c951801", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xf169ff07f7c6cdcfee3e38ec4d97293d651d3f9d3e16a090e954c64546a87ad6" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xf169ff07f7c6cdcfee3e38ec4d97293d651d3f9d3e16a090e954c64546a87ad6", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x08", + "0x00": "0x06", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6831,12 +18858,114 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb625c01bd1321b81df0192c1380314e3745ea3eed5113a28ad4b9c538fda248b", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x6e1b6e80e27fad65a044988caaf5dc28044dd1c4966b00c2c8f62e778d93bd2a" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca06e1b6e80e27fad65a044988caaf5dc28044dd1c4966b00c2c8f62e778d93bd2aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0595de1323ab08cb9c00a260084c7166f4db5068d2ecaaa598917a014a50961f0a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x6e1b6e80e27fad65a044988caaf5dc28044dd1c4966b00c2c8f62e778d93bd2a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x595de1323ab08cb9c00a260084c7166f4db5068d2ecaaa598917a014a50961f0", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xb9de02119b3dde2d81a2c7b6e1e8c04bd2a52cfec92b7190d3ad7c7bdded5672" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xb9de02119b3dde2d81a2c7b6e1e8c04bd2a52cfec92b7190d3ad7c7bdded5672", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x05", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -6855,55 +18984,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xa9798530f13f2d1fb65b5ef60ded0eff52523e3078bf3b70308f1380dbbac3f8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0xcd6a0acd507e0849edf6d748e5c3e05c3069566b74b33ef155f3664b69ed739e" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca0cd6a0acd507e0849edf6d748e5c3e05c3069566b74b33ef155f3664b69ed739ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa009a71bf4917b6728768b188526f28bee8ef2a75f57b3aa8c61416443cd591815a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xcd6a0acd507e0849edf6d748e5c3e05c3069566b74b33ef155f3664b69ed739e", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x09a71bf4917b6728768b188526f28bee8ef2a75f57b3aa8c61416443cd591815", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x2679cea7a02d86a2087f2a924dd897ded6f921a13b7fdc1d0cd41daef523b91e" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x2679cea7a02d86a2087f2a924dd897ded6f921a13b7fdc1d0cd41daef523b91e", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x06", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} }, - "0x000000000000000000000000000000000000010b": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x05", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } - }, - "0x000000000000000000000000000000000000010c": { + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -6927,7 +19110,109 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xc34c91023dc43a2148c05c78609c9ab87e3b9516d4a9cf6cb7b771baf674d03e", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x97e21d4c90f3628564e31c5717d122ebd996aca38d1f41d16290f158466b3962" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca097e21d4c90f3628564e31c5717d122ebd996aca38d1f41d16290f158466b3962a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0276680c10b32b07bbb9ba2f28542f87d15dd3c518d51f1c14d987019a8dd7fb6a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x97e21d4c90f3628564e31c5717d122ebd996aca38d1f41d16290f158466b3962", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x276680c10b32b07bbb9ba2f28542f87d15dd3c518d51f1c14d987019a8dd7fb6", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x52effb99a6a9182332705e878768cfbeb8e752d989c664bd173253b708fd9066" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x52effb99a6a9182332705e878768cfbeb8e752d989c664bd173253b708fd9066", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -6951,36 +19236,114 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010e": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Shanghai", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a093b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x93b8865a51c7ba5d1811e4bbc259bfa2b46359f1501cc4d635ab8aa644676e5c", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x10f3b6b4791dbfb6612dafd330267e75eae0fad168f0f0ff1cd59ea665494798" + }, + "blocks": [ + { + "rlp": "0xf90285f9021ca010f3b6b4791dbfb6612dafd330267e75eae0fad168f0f0ff1cd59ea665494798a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06bb958279fcd294d1a773eb5941c22fbf1e08ec266424790ae5b8008e77c8dc3a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x10f3b6b4791dbfb6612dafd330267e75eae0fad168f0f0ff1cd59ea665494798", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x6bb958279fcd294d1a773eb5941c22fbf1e08ec266424790ae5b8008e77c8dc3", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "hash": "0x0e96e6be7d6e58d37f48b1acf851967a4ce7375d5331ef2735d80069855b93e8" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x0e96e6be7d6e58d37f48b1acf851967a4ce7375d5331ef2735d80069855b93e8", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x02", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "storage": {} }, - "0x000000000000000000000000000000000000010f": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x02", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -7001,30 +19364,31 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x0122a0f0", + "balance": "0x122a0f", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5dad73ce0", + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "009-fork=Shanghai": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Shanghai-blockchain_test-DUP16]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Shanghai", - "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", + "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3935ad4402a7193934b0272eb9d0bc33f315ba5cef2a8717fd866e546a055f27", + "stateRoot": "0xd247fd5f11331e669500328301273149cc977fd707d56094dd118d39bcfb04c9", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7038,31 +19402,32 @@ "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xc305d826e3784046a7e9d31128ef98d3e96133fe454c16ef630574d967dfdb1a" + "hash": "0x65a193eac1b41c36e9994c888ef6d6a8ad615685bfbd3e54badf891759ffa3ea" }, "blocks": [ { - "rlp": "0xf90844f9021ca0c305d826e3784046a7e9d31128ef98d3e96133fe454c16ef630574d967dfdb1aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa069f76ad7abb256bb8ebb9d4ea8d0a29ea9efd43d7c7e5fdbf97c697af54a8737a05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a049454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008360e0508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0c0", + "rlp": "0xf90285f9021ca065a193eac1b41c36e9994c888ef6d6a8ad615685bfbd3e54badf891759ffa3eaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0925a5de922d0ebec0ebb790beda8f3207e63413537a7a0d1577b0fdd78069f6fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", "blockHeader": { - "parentHash": "0xc305d826e3784046a7e9d31128ef98d3e96133fe454c16ef630574d967dfdb1a", + "parentHash": "0x65a193eac1b41c36e9994c888ef6d6a8ad615685bfbd3e54badf891759ffa3ea", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x69f76ad7abb256bb8ebb9d4ea8d0a29ea9efd43d7c7e5fdbf97c697af54a8737", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x49454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8", + "stateRoot": "0x925a5de922d0ebec0ebb790beda8f3207e63413537a7a0d1577b0fdd78069f6f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x60e050", + "gasUsed": "0x060e05", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x9518fe72b558b50bd494e3325f061ab9fb707adf869d43fdd987f3aa162ab3e0" + "hash": "0xdf2abcaba385de64f32ad544319927ef3f0fc4049da05bfd6ea773bb391d0fff" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -7077,318 +19442,156 @@ "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], "uncleHeaders": [], "withdrawals": [] } ], - "lastblockhash": "0x9518fe72b558b50bd494e3325f061ab9fb707adf869d43fdd987f3aa162ab3e0", + "lastblockhash": "0xdf2abcaba385de64f32ad544319927ef3f0fc4049da05bfd6ea773bb391d0fff", "pre": { "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x000000000000000000000000000000000000010a": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "balance": "0x3635c9adc5dea00000", + "code": "0x", "storage": {} - }, - "0x000000000000000000000000000000000000010b": { + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": { + "0x00": "0x01", + "0x01": "0x10", + "0x02": "0x0f", + "0x03": "0x0e", + "0x04": "0x0d", + "0x05": "0x0c", + "0x06": "0x0b", + "0x07": "0x0a", + "0x08": "0x09", + "0x09": "0x08", + "0x0a": "0x07", + "0x0b": "0x06", + "0x0c": "0x05", + "0x0d": "0x04", + "0x0e": "0x03", + "0x0f": "0x02", + "0x10": "0x01" + } }, - "0x000000000000000000000000000000000000010c": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "balance": "0x122a0f", + "code": "0x", "storage": {} }, - "0x000000000000000000000000000000000000010d": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", "storage": {} - }, - "0x000000000000000000000000000000000000010e": { + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP1]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a04f1b29c748b697203f7ff65712365897f43583428a88fb5657d160dd27cfcf70a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x4f1b29c748b697203f7ff65712365897f43583428a88fb5657d160dd27cfcf70", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x92a0fe9e5ed120ceb85f93a2e4599336895c8e0ecae0dd5e842df38700dbab02" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa092a0fe9e5ed120ceb85f93a2e4599336895c8e0ecae0dd5e842df38700dbab02a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e51153a97d6f519cc591d02436364a4a83118492e73f24814ebc1fef40cd173fa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x92a0fe9e5ed120ceb85f93a2e4599336895c8e0ecae0dd5e842df38700dbab02", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe51153a97d6f519cc591d02436364a4a83118492e73f24814ebc1fef40cd173f", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xec9da93bcd0335b61ae8bdc84a90dfef0f2d22bcc26b2bba4e94c7e397bb7f3b" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xec9da93bcd0335b61ae8bdc84a90dfef0f2d22bcc26b2bba4e94c7e397bb7f3b", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x000000000000000000000000000000000000010f": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { @@ -7423,7 +19626,129 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000101": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP2]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a089cb1103bb3ef51d91c49324f57f26d2e9469686b6755491142d1b63983a052aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x89cb1103bb3ef51d91c49324f57f26d2e9469686b6755491142d1b63983a052a", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x03ccc742b205724d9b9d9b85001e1864003a717b7210f239ba5d038d681e9b36" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa003ccc742b205724d9b9d9b85001e1864003a717b7210f239ba5d038d681e9b36a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c5a1614d38fa1fcff64a6c9e81ceecff9ea53ea6d88a30ada13489cb9c80bdeaa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x03ccc742b205724d9b9d9b85001e1864003a717b7210f239ba5d038d681e9b36", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc5a1614d38fa1fcff64a6c9e81ceecff9ea53ea6d88a30ada13489cb9c80bdea", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x22d924d3bd748c2397c143ce14d9c7a7c928fffdaef7cc5b519262d697f9756c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x22d924d3bd748c2397c143ce14d9c7a7c928fffdaef7cc5b519262d697f9756c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -7447,36 +19772,134 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x0e", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x0000000000000000000000000000000000000103": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP3]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b60397874e88cfa7f765de03250b92e1516d8323e6c57a99c961ae60e0dc5ae9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb60397874e88cfa7f765de03250b92e1516d8323e6c57a99c961ae60e0dc5ae9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x19bd157c8bb6abe6d6a095504cc79079f7d987f451fa9b4dc0f821353a3f54de" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa019bd157c8bb6abe6d6a095504cc79079f7d987f451fa9b4dc0f821353a3f54dea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0615e68f6e8de8c27167849a49d30c1c649d554b7ae7c89bd5c3f1429bec43086a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x19bd157c8bb6abe6d6a095504cc79079f7d987f451fa9b4dc0f821353a3f54de", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x615e68f6e8de8c27167849a49d30c1c649d554b7ae7c89bd5c3f1429bec43086", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xdd896acd58b7e6a2baaa8ff153f5ad93cbaf7c8e2df3f611bf28d25fa485dc54" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xdd896acd58b7e6a2baaa8ff153f5ad93cbaf7c8e2df3f611bf28d25fa485dc54", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0d", + "0x00": "0x0e", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -7495,36 +19918,134 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x0c", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x0000000000000000000000000000000000000105": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP4]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07de34871ce604ac73b2bb0d1183609d2e106854f24db4fc4a801c18b0cc21651a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7de34871ce604ac73b2bb0d1183609d2e106854f24db4fc4a801c18b0cc21651", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4ca88584b49e51c470b7f8cb975a5b01396aa2e933a32419c58958327318f79f" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa04ca88584b49e51c470b7f8cb975a5b01396aa2e933a32419c58958327318f79fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01c1ff68d06cd8910d5493e0336452dbc532029bdbea215b7a6dc96dd47328dc9a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x4ca88584b49e51c470b7f8cb975a5b01396aa2e933a32419c58958327318f79f", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x1c1ff68d06cd8910d5493e0336452dbc532029bdbea215b7a6dc96dd47328dc9", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xce070f195a357068eaa5675be94bbe5b84e96f4609ac496cd869ead5e04fafc1" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xce070f195a357068eaa5675be94bbe5b84e96f4609ac496cd869ead5e04fafc1", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0b", + "0x00": "0x0d", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -7543,36 +20064,134 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x0a", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP5]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a03e69967512d34ac15c4db03b25f7fbdcab793d306609a34370e0279dcce2d986a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x3e69967512d34ac15c4db03b25f7fbdcab793d306609a34370e0279dcce2d986", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe900b1dd0aebec55e8ca4918370d65508b7daf100d6ab38c2a415f2c4947a8e9" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa0e900b1dd0aebec55e8ca4918370d65508b7daf100d6ab38c2a415f2c4947a8e9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa068697366dbb319414f4e0c0f19187d244f8059ee10994e3074031ac4f140ec83a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xe900b1dd0aebec55e8ca4918370d65508b7daf100d6ab38c2a415f2c4947a8e9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x68697366dbb319414f4e0c0f19187d244f8059ee10994e3074031ac4f140ec83", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x5a39b784cf9f204edf005b3f1120206dccb48f2f73717724b80936b80972f236" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x5a39b784cf9f204edf005b3f1120206dccb48f2f73717724b80936b80972f236", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x0c", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -7591,36 +20210,134 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x08", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP6]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0aec1c2fde5ae88018b4f5e400b3a17ba79a138a96173092b740ffb95798cedb8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xaec1c2fde5ae88018b4f5e400b3a17ba79a138a96173092b740ffb95798cedb8", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc34d3ef5826501283529b139377407f2377d0fe01bb28d4ac0d98961e220202c" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa0c34d3ef5826501283529b139377407f2377d0fe01bb28d4ac0d98961e220202ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cb66b61f98c5f7f8be5aa5e43fb5ddaa27a282cccb396e8cba38085c6f86a3e5a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xc34d3ef5826501283529b139377407f2377d0fe01bb28d4ac0d98961e220202c", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xcb66b61f98c5f7f8be5aa5e43fb5ddaa27a282cccb396e8cba38085c6f86a3e5", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x3ff2b2533ceb7964f99a63a4ffca8033e66c3866886a443a5aecdcf8f1dffa4f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x3ff2b2533ceb7964f99a63a4ffca8033e66c3866886a443a5aecdcf8f1dffa4f", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x0b", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -7639,36 +20356,134 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x06", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x000000000000000000000000000000000000010b": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP7]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b6259ea6ea4e53d973a477451c03d530d3e994f2a5ab93f7f35238d48a192f12a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb6259ea6ea4e53d973a477451c03d530d3e994f2a5ab93f7f35238d48a192f12", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x4918389abc96c330b8e4b22d49f9dce395989933b6565ca699539d63e7b3f429" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa04918389abc96c330b8e4b22d49f9dce395989933b6565ca699539d63e7b3f429a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0020718803002a03a2df842fcc3e04355de0487a09aea2726fec901b35111ceefa03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x4918389abc96c330b8e4b22d49f9dce395989933b6565ca699539d63e7b3f429", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x020718803002a03a2df842fcc3e04355de0487a09aea2726fec901b35111ceef", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xa230db16b783b13444db5b2789da74f9c364f0426c1cf3c38a13eb0d9452c18f" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xa230db16b783b13444db5b2789da74f9c364f0426c1cf3c38a13eb0d9452c18f", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x05", + "0x00": "0x0a", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -7687,36 +20502,134 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x04", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP8]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07b5460354b9e3e51bc1abe10bf845b3b3ba81b61fed42b30e34e2ba257bb50e9a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x7b5460354b9e3e51bc1abe10bf845b3b3ba81b61fed42b30e34e2ba257bb50e9", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x9f80b6eeea93ff7a665e8a900964e0828ff21233b7628c1205a8553efedfc8dc" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa09f80b6eeea93ff7a665e8a900964e0828ff21233b7628c1205a8553efedfc8dca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e4789a1a6710d5e5d707c534e2c352b9245bbd8d34d0b3dabb2f3a952a7f31e6a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x9f80b6eeea93ff7a665e8a900964e0828ff21233b7628c1205a8553efedfc8dc", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xe4789a1a6710d5e5d707c534e2c352b9245bbd8d34d0b3dabb2f3a952a7f31e6", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd9581bbe90a593a45ba179366bc53d9b91e11d56fb63ba738c328b483a093427" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xd9581bbe90a593a45ba179366bc53d9b91e11d56fb63ba738c328b483a093427", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x03", + "0x00": "0x09", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -7735,36 +20648,134 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x02", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x000000000000000000000000000000000000010f": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP9]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a046264b5821ed327104c4292d005fbfe44dfd897d252d56c1934ff1e628c05732a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x46264b5821ed327104c4292d005fbfe44dfd897d252d56c1934ff1e628c05732", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xfb81fde7e0ce88e224b2f308bc19a542895d588037863e865f4608a20428c6e3" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa0fb81fde7e0ce88e224b2f308bc19a542895d588037863e865f4608a20428c6e3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f6e513b111be749b2d67253d0b6b5004f6b9d5fd4cad3b61f58bf7f05668100ba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xfb81fde7e0ce88e224b2f308bc19a542895d588037863e865f4608a20428c6e3", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xf6e513b111be749b2d67253d0b6b5004f6b9d5fd4cad3b61f58bf7f05668100b", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x6e42aaca3b9d0fb870e5a59842f41679d5349c3825387db94ab688a58f0b7ddb" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x6e42aaca3b9d0fb870e5a59842f41679d5349c3825387db94ab688a58f0b7ddb", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x01", + "0x00": "0x08", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -7783,32 +20794,41 @@ "0x10": "0x01" } }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x0122a0f0", + "balance": "0x122a0f", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5dad73ce0", + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", "code": "0x", "storage": {} } }, "sealEngine": "NoProof" }, - "010-fork=Cancun": { + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP10]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Cancun", - "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0d1412238a97757a9c28f42e93030c66a66a4659dbfb40ffc74cabcfa17b3bf7fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0a8bbf054b037008034c731fcb10f36b425d038f8e43254e2656a983585880586a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", "genesisBlockHeader": { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd1412238a97757a9c28f42e93030c66a66a4659dbfb40ffc74cabcfa17b3bf7f", + "stateRoot": "0xa8bbf054b037008034c731fcb10f36b425d038f8e43254e2656a983585880586", "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -7825,23 +20845,23 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x53e9708569f2930810336f33bf5ba9df4fddbb122406827910b6852ce42bfe5c" + "hash": "0xbedb12d955e443c50055f39ecc6dac60b104ab1cfbcab597bc7d3f489f9e58e5" }, "blocks": [ { - "rlp": "0xf90867f9023fa053e9708569f2930810336f33bf5ba9df4fddbb122406827910b6852ce42bfe5ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00aa28950cb52ba958f1132a9064d5ba150b0d50c9d0afb7f07493a2bcd4686c4a05663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140a049454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008360e0508203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f90620f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47f860010a8307a120940000000000000000000000000000000000000101808026a02fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223a04ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672f860020a8307a120940000000000000000000000000000000000000102808026a02f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6a026ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4bf860030a8307a120940000000000000000000000000000000000000103808026a0108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1a07b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3ff860040a8307a120940000000000000000000000000000000000000104808026a032afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacfa007a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5f860050a8307a120940000000000000000000000000000000000000105808026a0729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926ea06bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521f860060a8307a120940000000000000000000000000000000000000106808025a09431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453a0313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1cf860070a8307a120940000000000000000000000000000000000000107808025a0ef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9a0164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6f860080a8307a120940000000000000000000000000000000000000108808025a0cc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1da022f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0f860090a8307a120940000000000000000000000000000000000000109808026a0a46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058a031b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7ff8600a0a8307a12094000000000000000000000000000000000000010a808025a097d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238a057acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3f8600b0a8307a12094000000000000000000000000000000000000010b808026a0949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfaa014a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29abf8600c0a8307a12094000000000000000000000000000000000000010c808025a09688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301a040e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93f8600d0a8307a12094000000000000000000000000000000000000010d808025a0b7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6a002f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4f8600e0a8307a12094000000000000000000000000000000000000010e808025a004dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6dea0034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bff8600f0a8307a12094000000000000000000000000000000000000010f808025a0ea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58a00b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affec0c0", + "rlp": "0xf902a8f9023fa0bedb12d955e443c50055f39ecc6dac60b104ab1cfbcab597bc7d3f489f9e58e5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04638367ac25a5eb7861cd2a7316ee64bc95947f0c321db478119420132920844a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", "blockHeader": { - "parentHash": "0x53e9708569f2930810336f33bf5ba9df4fddbb122406827910b6852ce42bfe5c", + "parentHash": "0xbedb12d955e443c50055f39ecc6dac60b104ab1cfbcab597bc7d3f489f9e58e5", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0aa28950cb52ba958f1132a9064d5ba150b0d50c9d0afb7f07493a2bcd4686c4", - "transactionsTrie": "0x5663f5d6fb3c9a610bf5f9a4705e040b0e07464e185b6ccbd51bca1099bed140", - "receiptTrie": "0x49454f0c570549e7e398334b920f405dd283bc49cfa75636b432a4f98e7f29b8", + "stateRoot": "0x4638367ac25a5eb7861cd2a7316ee64bc95947f0c321db478119420132920844", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", - "gasUsed": "0x60e050", + "gasUsed": "0x060e05", "timestamp": "0x03e8", "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -7851,8 +20871,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0e306f6fd3d89ef428d867cc1feac7b3474092e61bcfacd9a419471edbc4c694" + "hash": "0xb5cf43c70f6120b664201d7f923f62c9424fe971abfa13d946d73a3c3abee298" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -7867,320 +20888,20 @@ "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x01", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000101", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2fa5a569ebc1c9a5c27fc1fc2905205e377cd3784df6926b131cf1192a69c223", - "s": "0x4ec895e52cd8f07f348807135319ea289319604d9de1a5b1b22c52ea7c0a6672", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x02", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000102", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x2f84ac973fcf3cb6026455970c65e75da7db4b662c9eef3ee20c81878f27f4b6", - "s": "0x26ef88c883f0a827f66b7899f1c26c7e437a81aaffc95117cccbaa9066f0ad4b", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x03", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000103", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x108886794c344dd67db3bd5e743f04817bdf9b8357f28c49a85a1121181701b1", - "s": "0x7b08ed2055deab599ba2ef021f997e6d29f9bdde46bf6f6d2113cac1070e1a3f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x04", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000104", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x32afb532526e15da8e03e8c31449a65f4fce859b74bb962848f7cd1fa9eddacf", - "s": "0x07a4add84341f4838dd09eea3248e74aa628723029dd8b10b47d6887c68111d5", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x05", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000105", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x729960c0e62afe129e395968bdb83242707e2247cee1deca588356cd9bee926e", - "s": "0x6bd44cf2dba0a473e92d7ebfaf4e3a1f444cb814402ba814a84ea99aea912521", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x06", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000106", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9431402211d22ba6c410f6dad3a43425046471fc1001a685f282a8d7371df453", - "s": "0x313ed4719dc989c0f0de02fa6b7a00bbdce596da9a8e7386de99e76a40de3b1c", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x07", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000107", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xef3075836153bea8b1a23fe8d2eaa2c453ec08078f7303cdc5f2cde3e29391c9", - "s": "0x164e88899d4ae2cb71312624ba4614e3f5cc4ffb2eb8f8d90f6da7409ae120b6", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x08", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000108", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xcc065a3bd168bad821a2a4f100c72f10e8d3f5aeb6f8cc5e6cfbcb862ac57d1d", - "s": "0x22f158889a61d3619f77118ab2e9c2a605cf6db3f014abd2535a563600ea15f0", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x09", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x0000000000000000000000000000000000000109", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0xa46f50358caaeaae7f101813ccfd7d5ae4d4e3dfa77d0e26aabaebe507edb058", - "s": "0x31b1f66d3944ae1237c908825f7dff11dd14c8f1a8ad961e55ec0d4ab3ad6a7f", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0a", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010a", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x97d12f8cab8284d1e411f2735c468de3f937e413a13250b56dc0e768676bd238", - "s": "0x57acb90424667710c8ca5155a7406cd4b0e403f4eabcc435b21da7dd71a3c8c3", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0b", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010b", - "value": "0x00", - "data": "0x", - "v": "0x26", - "r": "0x949a270a09778e0dba4a2ed56ed95eb2a1c3b86e2bbd80de8c3b7655fa93acfa", - "s": "0x14a1c12d52ab34c00491da2f9243736312d730c4bfc66c493b08e970fc4b29ab", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0c", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010c", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x9688d65f7ee883150267f4b9471c3ec893c77bb38dc3f2579b42fa3fe7243301", - "s": "0x40e16a6a9efd513c417f42899579ffd8494ad7b97a043fda903f5980e2c6be93", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0d", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010d", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xb7f5a46de37a84b65998a038a9815449454287364af61058fbcd5c0659ea76f6", - "s": "0x02f947ad6d131683773a0c485157e357fca2174cd0e16ac81d4dc1d6b8812eb4", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0e", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010e", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0x04dd0f68af5098489efb6d15e7529a7cab2d60727603849d6c8bb423301de6de", - "s": "0x034c34333cc5799d32699cde9e2723f81c0eb5a5b7705df83950b78f06f658bf", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" - }, - { - "type": "0x00", - "chainId": "0x01", - "nonce": "0x0f", - "gasPrice": "0x0a", - "gasLimit": "0x07a120", - "to": "0x000000000000000000000000000000000000010f", - "value": "0x00", - "data": "0x", - "v": "0x25", - "r": "0xea4f784c28e854d4e9aa26ca9224947704d3f04af0afdf63cb5078f375058a58", - "s": "0x0b3556f2cf6d92212308e5e81979344b980e94221460fb88eb0462dfe6b9affe", - "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" } ], "uncleHeaders": [], "withdrawals": [] } ], - "lastblockhash": "0x0e306f6fd3d89ef428d867cc1feac7b3474092e61bcfacd9a419471edbc4c694", + "lastblockhash": "0xb5cf43c70f6120b664201d7f923f62c9424fe971abfa13d946d73a3c3abee298", "pre": { "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000102": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000104": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000105": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000107": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x0000000000000000000000000000000000000109": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": {} }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010b": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010d": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010e": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, - "0x000000000000000000000000000000000000010f": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": {} - }, "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", "balance": "0x00", @@ -8194,61 +20915,13 @@ "storage": {} } }, - "postState": { - "0x0000000000000000000000000000000000000100": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601080600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x10", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } - }, - "0x0000000000000000000000000000000000000101": { - "nonce": "0x00", - "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601081600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0f", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } - }, - "0x0000000000000000000000000000000000000102": { + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601082600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0e", + "0x00": "0x07", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -8267,60 +20940,134 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000103": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601083600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x0d", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x0000000000000000000000000000000000000104": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP11]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0dd719a78056c207d9e14685de32b95dc79396e8eed4f24a67ddad65bbd8c8d50a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xdd719a78056c207d9e14685de32b95dc79396e8eed4f24a67ddad65bbd8c8d50", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x49023b1856b14da76e2a47b124e3f2ca000bbe01a3193c3f9c5851ef65d5535d" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa049023b1856b14da76e2a47b124e3f2ca000bbe01a3193c3f9c5851ef65d5535da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09e8b83278ea87183c2f18fc88d3c031318a9a6cddd295fbdd974a4e8aaf61c5ca03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x49023b1856b14da76e2a47b124e3f2ca000bbe01a3193c3f9c5851ef65d5535d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x9e8b83278ea87183c2f18fc88d3c031318a9a6cddd295fbdd974a4e8aaf61c5c", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xe1a5aabc3d94e9379d20ef3e0decf35c79112ad74a2e7649da78276ef340a3cc" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xe1a5aabc3d94e9379d20ef3e0decf35c79112ad74a2e7649da78276ef340a3cc", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601084600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x0c", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} }, - "0x0000000000000000000000000000000000000105": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601085600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x0b", + "0x00": "0x06", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -8339,36 +21086,134 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000106": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601086600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x0a", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x0000000000000000000000000000000000000107": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP12]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09354c7bcbcb0010216ac806d4deab4b50e469e381486d8bf599fc119d672faffa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x9354c7bcbcb0010216ac806d4deab4b50e469e381486d8bf599fc119d672faff", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x8518a85ba680f95898dbfe1df72c6d9274ca6cd7c555d916f5e9b27738db045d" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa08518a85ba680f95898dbfe1df72c6d9274ca6cd7c555d916f5e9b27738db045da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0ad94632ab025f62d184f33fbfd3fdc797f2e7fe4273c931ddc7a325db19393fea03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x8518a85ba680f95898dbfe1df72c6d9274ca6cd7c555d916f5e9b27738db045d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xad94632ab025f62d184f33fbfd3fdc797f2e7fe4273c931ddc7a325db19393fe", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xac36e23ed0a59eb11a5bf226b5a53c6daedc670d8d84f28461553ea6b9c071bd" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xac36e23ed0a59eb11a5bf226b5a53c6daedc670d8d84f28461553ea6b9c071bd", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601087600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x09", + "0x00": "0x05", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -8387,36 +21232,134 @@ "0x10": "0x01" } }, - "0x0000000000000000000000000000000000000108": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601088600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x08", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x0000000000000000000000000000000000000109": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP13]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0b1c89804bbd3cafc443a2a8633b930b0904888c93f4c1c06c5184a1f1fd32eaaa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xb1c89804bbd3cafc443a2a8633b930b0904888c93f4c1c06c5184a1f1fd32eaa", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xd7add019bda599286253ad4ead963a282088a1fb45eaa1e6368de276cd94799a" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa0d7add019bda599286253ad4ead963a282088a1fb45eaa1e6368de276cd94799aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c551b4b8dae4f52c3e6887bb171d61897a356e050652f2a25fa71fbb25a732bda03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xd7add019bda599286253ad4ead963a282088a1fb45eaa1e6368de276cd94799a", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xc551b4b8dae4f52c3e6887bb171d61897a356e050652f2a25fa71fbb25a732bd", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xccbb99cdc7a237089f5030096106c626470924d942637012e91ca24fd04fa5a2" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xccbb99cdc7a237089f5030096106c626470924d942637012e91ca24fd04fa5a2", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f601089600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x07", + "0x00": "0x04", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -8435,36 +21378,134 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010a": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108a600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x06", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x000000000000000000000000000000000000010b": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP14]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ce499c40fcd03ee766292183059ded2e59cd77668dfe2574de0a1e9b1feeafada056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0xce499c40fcd03ee766292183059ded2e59cd77668dfe2574de0a1e9b1feeafad", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xb3e36a2c4fc97c5f7ace4dded346e7e5d598108f3ee1e3fa9897c49f4f8e104d" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa0b3e36a2c4fc97c5f7ace4dded346e7e5d598108f3ee1e3fa9897c49f4f8e104da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02a3e4d997aca6734ce06838297732b08cab953f72385d55848031d40dea29b09a03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xb3e36a2c4fc97c5f7ace4dded346e7e5d598108f3ee1e3fa9897c49f4f8e104d", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0x2a3e4d997aca6734ce06838297732b08cab953f72385d55848031d40dea29b09", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x67c849beb5b17bfbb553c17bab905fcc8674152d912babd5bcdfeb4071b8dc2d" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x67c849beb5b17bfbb553c17bab905fcc8674152d912babd5bcdfeb4071b8dc2d", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108b600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", "storage": { - "0x00": "0x05", + "0x00": "0x03", "0x01": "0x10", "0x02": "0x0f", "0x03": "0x0e", @@ -8483,55 +21524,129 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010c": { - "nonce": "0x00", + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108c600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00": "0x04", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" + "0x03e8": "0x03e8" } }, - "0x000000000000000000000000000000000000010d": { + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP15]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06905ebf781e3961f897d02adc1dfab102365cd112e5029be36cfa86d3c04b6e2a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x6905ebf781e3961f897d02adc1dfab102365cd112e5029be36cfa86d3c04b6e2", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xff3653e753259ca50b3bea6d250477a2999e2b966c70f3ed4b5a0c0a505cc3a9" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa0ff3653e753259ca50b3bea6d250477a2999e2b966c70f3ed4b5a0c0a505cc3a9a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b71fa98f2bfdcf39736271dcfd874f89fc8ba0cbf65ddf1c54aba26e866885dba03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0xff3653e753259ca50b3bea6d250477a2999e2b966c70f3ed4b5a0c0a505cc3a9", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xb71fa98f2bfdcf39736271dcfd874f89fc8ba0cbf65ddf1c54aba26e866885db", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0xc10f686eb0d51f4dfa1f545e3af41e49d1f496646b5c21b3cf7b1c51987a7fd7" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0xc10f686eb0d51f4dfa1f545e3af41e49d1f496646b5c21b3cf7b1c51987a7fd7", + "pre": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", - "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108d600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", - "storage": { - "0x00": "0x03", - "0x01": "0x10", - "0x02": "0x0f", - "0x03": "0x0e", - "0x04": "0x0d", - "0x05": "0x0c", - "0x06": "0x0b", - "0x07": "0x0a", - "0x08": "0x09", - "0x09": "0x08", - "0x0a": "0x07", - "0x0b": "0x06", - "0x0c": "0x05", - "0x0d": "0x04", - "0x0e": "0x03", - "0x0f": "0x02", - "0x10": "0x01" - } + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} }, - "0x000000000000000000000000000000000000010e": { + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108e600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -8555,7 +21670,129 @@ "0x10": "0x01" } }, - "0x000000000000000000000000000000000000010f": { + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x03e8": "0x03e8" + } + }, + "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { + "nonce": "0x00", + "balance": "0x122a0f", + "code": "0x", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", + "code": "0x", + "storage": {} + } + }, + "sealEngine": "NoProof" + }, + "tests/frontier/opcodes/test_dup.py::test_dup[fork_Cancun-blockchain_test-DUP16]": { + "_info": { + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" + }, + "network": "Cancun", + "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a038c5936e5cb8b8ae508dc8603983a522e9efe4e1c373ce4f6c0eaf690c45f153a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", + "genesisBlockHeader": { + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x0000000000000000000000000000000000000000", + "stateRoot": "0x38c5936e5cb8b8ae508dc8603983a522e9efe4e1c373ce4f6c0eaf690c45f153", + "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x00", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x00", + "timestamp": "0x00", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x450c91e451c0f55ca96d996c0570bc0cec74ebdedc34e40d6d7edf162c101274" + }, + "blocks": [ + { + "rlp": "0xf902a8f9023fa0450c91e451c0f55ca96d996c0570bc0cec74ebdedc34e40d6d7edf162c101274a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0abe87bfcc694a3daf03bb94aef7ae27064ce4c6ef51f09175a8425c5b0ac9c6ea03fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5a0bf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000083060e058203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f862f860800a8307a120940000000000000000000000000000000000000100808026a02a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bfa0045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47c0c0", + "blockHeader": { + "parentHash": "0x450c91e451c0f55ca96d996c0570bc0cec74ebdedc34e40d6d7edf162c101274", + "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "stateRoot": "0xabe87bfcc694a3daf03bb94aef7ae27064ce4c6ef51f09175a8425c5b0ac9c6e", + "transactionsTrie": "0x3fc264b7fa818a3d06673a06dfd5bb0f02276009105382898624de1c89794ca5", + "receiptTrie": "0xbf8784e9c4eee63f5ef440f584d08774f817a9b0c9bddadc713d6ce7175c467e", + "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "difficulty": "0x00", + "number": "0x01", + "gasLimit": "0x016345785d8a0000", + "gasUsed": "0x060e05", + "timestamp": "0x03e8", + "extraData": "0x00", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x07", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "blobGasUsed": "0x00", + "excessBlobGas": "0x00", + "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "hash": "0x05fe3f828f9dfca7c4c1a164c89acb80fadb769a6eeaabc722c4a48c0cc6ae6c" + }, + "blocknumber": "1", + "transactions": [ + { + "type": "0x00", + "chainId": "0x01", + "nonce": "0x00", + "gasPrice": "0x0a", + "gasLimit": "0x07a120", + "to": "0x0000000000000000000000000000000000000100", + "value": "0x00", + "data": "0x", + "v": "0x26", + "r": "0x2a5ee985f72d9637c4cb986d35f2675087afa5d638ffb4629271315ff077a4bf", + "s": "0x045661db69b1dc2868fd6e64fd5f371f4d8a36bfca793e436114bc90de3bed47", + "sender": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + } + ], + "uncleHeaders": [], + "withdrawals": [] + } + ], + "lastblockhash": "0x05fe3f828f9dfca7c4c1a164c89acb80fadb769a6eeaabc722c4a48c0cc6ae6c", + "pre": { + "0x0000000000000000000000000000000000000100": { + "nonce": "0x00", + "balance": "0x00", + "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", + "storage": {} + }, + "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { + "nonce": "0x01", + "balance": "0x00", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": {} + }, + "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { + "nonce": "0x00", + "balance": "0x3635c9adc5dea00000", + "code": "0x", + "storage": {} + } + }, + "postState": { + "0x0000000000000000000000000000000000000100": { "nonce": "0x00", "balance": "0x00", "code": "0x6000600160026003600460056006600760086009600a600b600c600d600e600f60108f600055600155600255600355600455600555600655600755600855600955600a55600b55600c55600d55600e55600f55601055", @@ -8589,13 +21826,13 @@ }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { "nonce": "0x00", - "balance": "0x0122a0f0", + "balance": "0x122a0f", "code": "0x", "storage": {} }, "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "nonce": "0x10", - "balance": "0x3635c9adc5dad73ce0", + "nonce": "0x01", + "balance": "0x3635c9adc5de6373ce", "code": "0x", "storage": {} } diff --git a/tests/execution-spec-tests/homestead/yul/yul_example/yul.json b/tests/execution-spec-tests/homestead/yul/yul_example/yul.json index 3f91b1d257c..2ac6521bd19 100644 --- a/tests/execution-spec-tests/homestead/yul/yul_example/yul.json +++ b/tests/execution-spec-tests/homestead/yul/yul_example/yul.json @@ -1,7 +1,8 @@ { - "000-fork=Homestead": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_Homestead-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Homestead", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a05c847cd5a23c01627df4f68be88b99e47576f53d335f2729cbcb0d9d7f47c99ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -44,6 +45,7 @@ "nonce": "0x0000000000000000", "hash": "0x4795cdd5dcb21b9f2307b0712285825938c55ab6d47a90ac59e8e5d6d139be53" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -102,9 +104,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Byzantium": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_Byzantium-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Byzantium", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0013f3cadae6118b3305b8cf40e92ea44d99f04b3d8dca08e433c67d64edd8a4aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -147,6 +150,7 @@ "nonce": "0x0000000000000000", "hash": "0x2ff67c9e81b1480d30b5b9bc1be2bedf06c97c7e2c719458b0360d7f620479c8" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -205,9 +209,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Constantinople": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_Constantinople-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Constantinople", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0013f3cadae6118b3305b8cf40e92ea44d99f04b3d8dca08e433c67d64edd8a4aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -250,6 +255,7 @@ "nonce": "0x0000000000000000", "hash": "0xaeb1a01a699a6452a74907d1f2d37339aafed5fb020c4df51f40199777e4f6f9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -308,9 +314,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=ConstantinopleFix": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_ConstantinopleFix-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "ConstantinopleFix", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0013f3cadae6118b3305b8cf40e92ea44d99f04b3d8dca08e433c67d64edd8a4aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -353,6 +360,7 @@ "nonce": "0x0000000000000000", "hash": "0xaeb1a01a699a6452a74907d1f2d37339aafed5fb020c4df51f40199777e4f6f9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -411,9 +419,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Istanbul": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_Istanbul-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Istanbul", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0013f3cadae6118b3305b8cf40e92ea44d99f04b3d8dca08e433c67d64edd8a4aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -456,6 +465,7 @@ "nonce": "0x0000000000000000", "hash": "0xaeb1a01a699a6452a74907d1f2d37339aafed5fb020c4df51f40199777e4f6f9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -514,9 +524,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Berlin": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_Berlin-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Berlin", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0013f3cadae6118b3305b8cf40e92ea44d99f04b3d8dca08e433c67d64edd8a4aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -559,6 +570,7 @@ "nonce": "0x0000000000000000", "hash": "0xa278c684ddb1c71303c9ca67e2fcd7086eb8a6d5c6470c6b77e57234223ce4a7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -617,9 +629,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=London": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_London-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "London", "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0013f3cadae6118b3305b8cf40e92ea44d99f04b3d8dca08e433c67d64edd8a4aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", @@ -664,6 +677,7 @@ "baseFeePerGas": "0x07", "hash": "0x7788eda0d0d3cd8d047ecd598f1559ef2a2fe1fcd60becd934f245e2efa4d169" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -722,9 +736,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Merge": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_Paris-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Merge", "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0013f3cadae6118b3305b8cf40e92ea44d99f04b3d8dca08e433c67d64edd8a4aa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", @@ -769,6 +784,7 @@ "baseFeePerGas": "0x07", "hash": "0xdda1703f67c87de812b36175945d6d9e507d4e9ccaeeb0cacb359bda1cb5a4e6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -827,9 +843,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Shanghai": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Shanghai", "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ff452e49ef88af4cdb86fe07a6eb39679b60321ae85bce598022aee4653e9abca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", @@ -876,6 +893,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x2a4394be8c3a43029ceb1640e05e64c2e5acf2cd5a35050876d7241973add176" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -935,9 +953,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun": { + "tests/homestead/yul/test_yul_example.py::test_yul[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Cancun", "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a02921dffe2be2c40e5952e3211a830062db74456f5abe11fe37b061805fa41989a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", @@ -990,6 +1009,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xdf1e889d5e131f144a0bd28f99e7d4db6ee2ee58141048ca9092977bc791ebc8" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/info.txt b/tests/execution-spec-tests/info.txt deleted file mode 100644 index 393a4178eb5..00000000000 --- a/tests/execution-spec-tests/info.txt +++ /dev/null @@ -1,3 +0,0 @@ -ref: refs/tags/v1.0.6 -commit: 4871503a50f36b96cd3b60342d2c355583874f54 -build: 2023-10-19T19:45:09Z diff --git a/tests/execution-spec-tests/istanbul/eip1344_chainid/chainid/chainid.json b/tests/execution-spec-tests/istanbul/eip1344_chainid/chainid/chainid.json index 6df9369151a..0993111fedc 100644 --- a/tests/execution-spec-tests/istanbul/eip1344_chainid/chainid/chainid.json +++ b/tests/execution-spec-tests/istanbul/eip1344_chainid/chainid/chainid.json @@ -1,7 +1,8 @@ { - "000-fork=Istanbul": { + "tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Istanbul-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1344.md", "reference-spec-version": "02e46aebc80e6e5006ab4d2daa41876139f9a9e2" }, @@ -46,6 +47,7 @@ "nonce": "0x0000000000000000", "hash": "0xeda3b907cdac56ae8b57fe1ebd9166daa593ad93c59b627ebf11ac3b0a2d9660" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -104,9 +106,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Berlin": { + "tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Berlin-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1344.md", "reference-spec-version": "02e46aebc80e6e5006ab4d2daa41876139f9a9e2" }, @@ -151,6 +154,7 @@ "nonce": "0x0000000000000000", "hash": "0xee6d84161e5f53b678ba48c065ec68501b3e46f32d95605ddd470b369643f8da" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -209,9 +213,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=London": { + "tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_London-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1344.md", "reference-spec-version": "02e46aebc80e6e5006ab4d2daa41876139f9a9e2" }, @@ -258,6 +263,7 @@ "baseFeePerGas": "0x07", "hash": "0x9fa6fb4bb56b29579f08aa0678b3bb00694b35109cb928a6fa2ab7d93f5334d0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -316,9 +322,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Merge": { + "tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Paris-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1344.md", "reference-spec-version": "02e46aebc80e6e5006ab4d2daa41876139f9a9e2" }, @@ -365,6 +372,7 @@ "baseFeePerGas": "0x07", "hash": "0x594dc498ca7c57353cd5b9dc5996000c188e2a235d31c4da3a6a2c6df5bf6a86" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -423,9 +431,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai": { + "tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1344.md", "reference-spec-version": "02e46aebc80e6e5006ab4d2daa41876139f9a9e2" }, @@ -474,6 +483,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x001d4e7c1312e954e014b58b04aa3b7bd13e2ec02f4f4bd98733fa56b8030196" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -533,9 +543,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun": { + "tests/istanbul/eip1344_chainid/test_chainid.py::test_chainid[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1344.md", "reference-spec-version": "02e46aebc80e6e5006ab4d2daa41876139f9a9e2" }, @@ -590,6 +601,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5ad232bab51709903d2cfa8c29bf0c6daade352f77de51860faa61a4bd0a4eff" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/merge/security/selfdestruct_balance_bug/tx_selfdestruct_balance_bug.json b/tests/execution-spec-tests/paris/security/selfdestruct_balance_bug/tx_selfdestruct_balance_bug.json similarity index 97% rename from tests/execution-spec-tests/merge/security/selfdestruct_balance_bug/tx_selfdestruct_balance_bug.json rename to tests/execution-spec-tests/paris/security/selfdestruct_balance_bug/tx_selfdestruct_balance_bug.json index 809e1133e95..0e35a07b785 100644 --- a/tests/execution-spec-tests/merge/security/selfdestruct_balance_bug/tx_selfdestruct_balance_bug.json +++ b/tests/execution-spec-tests/paris/security/selfdestruct_balance_bug/tx_selfdestruct_balance_bug.json @@ -1,7 +1,8 @@ { - "000-fork=Constantinople": { + "tests/paris/security/test_selfdestruct_balance_bug.py::test_tx_selfdestruct_balance_bug[fork_Constantinople-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Constantinople", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06a25755ef4ab6363a1476d1c706ce0962900e8177afe7b9dd9974966ef3f3ed5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -189,9 +190,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=ConstantinopleFix": { + "tests/paris/security/test_selfdestruct_balance_bug.py::test_tx_selfdestruct_balance_bug[fork_ConstantinopleFix-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "ConstantinopleFix", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06a25755ef4ab6363a1476d1c706ce0962900e8177afe7b9dd9974966ef3f3ed5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -379,9 +381,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Istanbul": { + "tests/paris/security/test_selfdestruct_balance_bug.py::test_tx_selfdestruct_balance_bug[fork_Istanbul-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Istanbul", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06a25755ef4ab6363a1476d1c706ce0962900e8177afe7b9dd9974966ef3f3ed5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -569,9 +572,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Berlin": { + "tests/paris/security/test_selfdestruct_balance_bug.py::test_tx_selfdestruct_balance_bug[fork_Berlin-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Berlin", "genesisRLP": "0xf901fdf901f8a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06a25755ef4ab6363a1476d1c706ce0962900e8177afe7b9dd9974966ef3f3ed5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a00000000000000000000000000000000000000000000000000000000000000000880000000000000000c0c0", @@ -759,9 +763,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=London": { + "tests/paris/security/test_selfdestruct_balance_bug.py::test_tx_selfdestruct_balance_bug[fork_London-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "London", "genesisRLP": "0xf901fef901f9a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06a25755ef4ab6363a1476d1c706ce0962900e8177afe7b9dd9974966ef3f3ed5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", @@ -951,9 +956,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Merge": { + "tests/paris/security/test_selfdestruct_balance_bug.py::test_tx_selfdestruct_balance_bug[fork_Paris-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Merge", "genesisRLP": "0xf901fbf901f6a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06a25755ef4ab6363a1476d1c706ce0962900e8177afe7b9dd9974966ef3f3ed5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007c0c0", @@ -1143,9 +1149,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai": { + "tests/paris/security/test_selfdestruct_balance_bug.py::test_tx_selfdestruct_balance_bug[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Shanghai", "genesisRLP": "0xf9021df90217a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a06a25755ef4ab6363a1476d1c706ce0962900e8177afe7b9dd9974966ef3f3ed5a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421c0c0c0", @@ -1338,9 +1345,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun": { + "tests/paris/security/test_selfdestruct_balance_bug.py::test_tx_selfdestruct_balance_bug[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019" + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124" }, "network": "Cancun", "genesisRLP": "0xf90240f9023aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0fd47f280027e1fa6684511e8c24de936760313e5daed2eebfb291660fad65046a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808088016345785d8a0000808000a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000c0c0c0", diff --git a/tests/execution-spec-tests/shanghai/eip3651_warm_coinbase/warm_coinbase/warm_coinbase_call_out_of_gas.json b/tests/execution-spec-tests/shanghai/eip3651_warm_coinbase/warm_coinbase/warm_coinbase_call_out_of_gas.json index 114d1b91075..ac16ea1db6f 100644 --- a/tests/execution-spec-tests/shanghai/eip3651_warm_coinbase/warm_coinbase/warm_coinbase_call_out_of_gas.json +++ b/tests/execution-spec-tests/shanghai/eip3651_warm_coinbase/warm_coinbase/warm_coinbase_call_out_of_gas.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-CALL-sufficient_gas-opcode_call": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALL-sufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x930113249ffc16e5a595b74595e77efd6d745aa9fdd3cfd6f1e51de7526a96ee" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -121,9 +123,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-CALL-insufficient_gas-opcode_call": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -172,6 +175,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x8d76768914bc77bc0f96702a0e5d83730efa3bea9571a35c6be616766eda239b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -241,9 +245,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-CALLCODE-sufficient_gas-opcode_callcode": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALLCODE-sufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -292,6 +297,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xf11ee3dbb4e30ff6210e49d6fe476b01b0092e688112dcaee301b9b567e0c5c9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -363,9 +369,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-CALLCODE-insufficient_gas-opcode_callcode": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-CALLCODE-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -414,6 +421,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x480af2f7a3b072cb25b6b75d8e16c5b50f1334923cec044c0d7d79c81c1df668" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -483,9 +491,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai-DELEGATECALL-sufficient_gas-opcode_delegatecall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-DELEGATECALL-sufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -534,6 +543,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x70cb69ebecabe020b5b9ccc2632190da8ec73efa6b8736f42c219e526b460b5b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -605,9 +615,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Shanghai-DELEGATECALL-insufficient_gas-opcode_delegatecall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-DELEGATECALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -656,6 +667,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xaa902ef3e346240531ffe945c29c90ffbc9e1b2b78fd5fee6e7e5be303cf325d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -725,9 +737,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai-STATICCALL-sufficient_gas-opcode_staticcall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-STATICCALL-sufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -776,6 +789,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xd34b20df6f84866be1538ef63bc24c4245285d767076a5761c3e4226b769a696" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -847,9 +861,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Shanghai-STATICCALL-insufficient_gas-opcode_staticcall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Shanghai-blockchain_test-STATICCALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -898,6 +913,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xfc7d5f602e984e39ee41beb5a9d874f4ca1f40cfe4414e5a0ebf10f08c5ca218" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -967,9 +983,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Cancun-CALL-sufficient_gas-opcode_call": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALL-sufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1024,6 +1041,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x31b6a0f4435780dac3d971d85262f87a646c1e63bf28a6e5e17720de780db5f7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1109,9 +1127,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Cancun-CALL-insufficient_gas-opcode_call": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1166,6 +1185,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x45da26f2ff374b5bddf1658302c0ac59408827c7b3722d014e25eba007299100" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1249,9 +1269,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Cancun-CALLCODE-sufficient_gas-opcode_callcode": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALLCODE-sufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1306,6 +1327,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x323b30aa0ee65147699bead76b3b57b5281e5fa632ab9c5fd4bf092616d3aa8a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1391,9 +1413,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Cancun-CALLCODE-insufficient_gas-opcode_callcode": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-CALLCODE-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1448,6 +1471,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x29f943c7a8bf38bb055fe242de05617ca193108c54a2d6f1fd6d766afa20db01" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1531,9 +1555,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Cancun-DELEGATECALL-sufficient_gas-opcode_delegatecall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-DELEGATECALL-sufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1588,6 +1613,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x28fcac19e464677c3931472f71a2ed98fda1c92d2475b2082bc5fd27fe7f78ac" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1673,9 +1699,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Cancun-DELEGATECALL-insufficient_gas-opcode_delegatecall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-DELEGATECALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1730,6 +1757,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7f2f9082bcaf90017d5304d6dd17fe273aafd13f6eb4ed24b8956b0adcf05ea4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1813,9 +1841,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Cancun-STATICCALL-sufficient_gas-opcode_staticcall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-STATICCALL-sufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1870,6 +1899,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x057a7313de6bda962ded75212a2be5fe11abc7db5c414be642b58adc24b25740" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1955,9 +1985,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Cancun-STATICCALL-insufficient_gas-opcode_staticcall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_call_out_of_gas[fork_Cancun-blockchain_test-STATICCALL-insufficient_gas]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -2012,6 +2043,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1ec209fb2a3da2edf0ddb848fc12efe9e7de50ea7ff999f17c0ac2cddce5f7a5" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3651_warm_coinbase/warm_coinbase/warm_coinbase_gas_usage.json b/tests/execution-spec-tests/shanghai/eip3651_warm_coinbase/warm_coinbase/warm_coinbase_gas_usage.json index 7a7fe9892a8..6de0a07fdcd 100644 --- a/tests/execution-spec-tests/shanghai/eip3651_warm_coinbase/warm_coinbase/warm_coinbase_gas_usage.json +++ b/tests/execution-spec-tests/shanghai/eip3651_warm_coinbase/warm_coinbase/warm_coinbase_gas_usage.json @@ -1,7 +1,8 @@ { - "000-fork=Merge-EXTCODESIZE-opcode_extcodesize": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODESIZE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -48,6 +49,7 @@ "baseFeePerGas": "0x07", "hash": "0x1cbb94a9d7aca1a9f3baa5f90882d9a65b5fedff1a03bbab5b8ec9e47c667df9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -106,9 +108,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Merge-EXTCODECOPY-opcode_extcodecopy": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODECOPY]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -155,6 +158,7 @@ "baseFeePerGas": "0x07", "hash": "0x773d7c77e1025c4819640b20221128d643d73e8460906ead3202d0fe2f6c5eb4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -213,9 +217,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Merge-EXTCODEHASH-opcode_extcodehash": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-blockchain_test-EXTCODEHASH]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -262,6 +267,7 @@ "baseFeePerGas": "0x07", "hash": "0x839ff648118a38a8a2ee93d49e7ac49888c7e337eb7bf6626c194123953d7222" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -320,9 +326,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Merge-BALANCE-opcode_balance": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-blockchain_test-BALANCE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -369,6 +376,7 @@ "baseFeePerGas": "0x07", "hash": "0x544be15cfb2bcf2409a6e256c0c92c66f78d59eb75b93938f55ee1a6238901a5" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -427,9 +435,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Merge-CALL-opcode_call": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-blockchain_test-CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -476,6 +485,7 @@ "baseFeePerGas": "0x07", "hash": "0xc302c69c477900417dcc191aebbded388b0c0ed09373861d15376901d8a66b82" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -534,9 +544,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Merge-CALLCODE-opcode_callcode": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-blockchain_test-CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -583,6 +594,7 @@ "baseFeePerGas": "0x07", "hash": "0x696ac9d0b513fd4a471c9b34380db010384cccb029440546c795918e3ad4a393" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -641,9 +653,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Merge-DELEGATECALL-opcode_delegatecall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-blockchain_test-DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -690,6 +703,7 @@ "baseFeePerGas": "0x07", "hash": "0x0e3bbee45a4ef78666910c81dc6273e2be0be855df31d788d43d82903af8e91b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -748,9 +762,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Merge-STATICCALL-opcode_staticcall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Paris-blockchain_test-STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -797,6 +812,7 @@ "baseFeePerGas": "0x07", "hash": "0x36fc102e7cc60a27d034c5f809b9334ec9b4b91cd5f1cda868b870f9caac235b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -855,9 +871,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Shanghai-EXTCODESIZE-opcode_extcodesize": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODESIZE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -906,6 +923,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x97d461cb15b35c9e72e1a7f748278b5a706b14f0a3cd1b5632cfe7cb64082f28" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -965,9 +983,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Shanghai-EXTCODECOPY-opcode_extcodecopy": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODECOPY]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1016,6 +1035,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x84c7744ad2cd84dfe4613ed24fe53ebbbbedece32bae5c1aacaca167575b3671" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1075,9 +1095,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Shanghai-EXTCODEHASH-opcode_extcodehash": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-EXTCODEHASH]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1126,6 +1147,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x8f4c8cd37c4e71e3e27cd7e7f53a90b35379740f51a7418199aa89dcc9987dfd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1185,9 +1207,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Shanghai-BALANCE-opcode_balance": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-BALANCE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1236,6 +1259,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xcf9df5bac9d8f4fecb02420a8b8aeec7ea0c87f9d18936c96843f2bddcbbb513" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1295,9 +1319,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Shanghai-CALL-opcode_call": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1346,6 +1371,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xece555dca2f938fac41cf2f07fa7701774ec8b1756acae6d814c390a54e7cb10" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1405,9 +1431,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Shanghai-CALLCODE-opcode_callcode": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1456,6 +1483,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xc416fbf7d3a8a2fe7d499d4520da7680be0d8155b6aaf103c5211d12cc45b64a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1515,9 +1543,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Shanghai-DELEGATECALL-opcode_delegatecall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1566,6 +1595,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xab1318b59a2072b9af482a6cba3e7072501d72adecec472ab0fb690a0b89150b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1625,9 +1655,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Shanghai-STATICCALL-opcode_staticcall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Shanghai-blockchain_test-STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1676,6 +1707,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xbf6dac593b74645335e79be022dbbf6c3dcd11215c01e3348eb1cd7b8a49dfc3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1735,9 +1767,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Cancun-EXTCODESIZE-opcode_extcodesize": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODESIZE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1792,6 +1825,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa4082b207405c9f0eef9ea728378bfdd5f5a699047f868fc99fd910a0d020ce7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1865,9 +1899,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Cancun-EXTCODECOPY-opcode_extcodecopy": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODECOPY]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -1922,6 +1957,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf0483b16486769bdfab308b5f3da1496a3a9db85311b3f3432bea810dacff802" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1995,9 +2031,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-EXTCODEHASH-opcode_extcodehash": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-EXTCODEHASH]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -2052,6 +2089,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xecd5559af0c4e0322b45b76199c6ed72afd3c5701d92c62349bef58b2bd10d09" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2125,9 +2163,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-BALANCE-opcode_balance": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-BALANCE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -2182,6 +2221,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x5fdf09a6b47fba5cf72bd4cfff394356e3445cecd2c9ee2907df91042c8acdd0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2255,9 +2295,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-CALL-opcode_call": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-CALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -2312,6 +2353,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1a6b2276a11ff2d76ce844e360091462f7ea99f07cbe9796d942ab247fe4d395" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2385,9 +2427,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-CALLCODE-opcode_callcode": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-CALLCODE]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -2442,6 +2485,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xd9892654e66c2af203875d168f2d08233256cc297503432234cf2f8a8fc4d9d6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2515,9 +2559,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-DELEGATECALL-opcode_delegatecall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-DELEGATECALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -2572,6 +2617,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x8f4ea43d4925e248f91229abf6e124bb7af0abe3f4555b178cca66f6738e62f2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2645,9 +2691,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-STATICCALL-opcode_staticcall": { + "tests/shanghai/eip3651_warm_coinbase/test_warm_coinbase.py::test_warm_coinbase_gas_usage[fork_Cancun-blockchain_test-STATICCALL]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3651.md", "reference-spec-version": "d94c694c6f12291bb6626669c3e8587eef3adff1" }, @@ -2702,6 +2749,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xfe04d6d62361e67d15528904adf5cb8097d6517aebc7bdcba5c466c26703c2f6" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_before_jumpdest.json b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_before_jumpdest.json index 2da9c27ff45..ab3ee2c4603 100644 --- a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_before_jumpdest.json +++ b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_before_jumpdest.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-before_jumpdest": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_before_jumpdest[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4d57a21502bf8a6502f859edb177adda7f256e0186f1cbf4b60d93fadeef1f64" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -109,9 +111,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-before_jumpdest": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_before_jumpdest[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -166,6 +169,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3c39345647256e72e58f32e5742ee3869e9f104db17cdc2b5169b828fd7bfac5" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_during_staticcall.json b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_during_staticcall.json index d99d4e27883..c970dcdbb0b 100644 --- a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_during_staticcall.json +++ b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_during_staticcall.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-during_staticcall": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_during_staticcall[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x783f7c161ba15862267c6d94184599ee0708e07ad2111456f3120dc0b0376c81" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -122,9 +124,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-during_staticcall": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_during_staticcall[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -179,6 +182,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x431e68ec16d3904945e469c76ef5438a827797505a1c9ef671450a60cce8f857" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_fill_stack.json b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_fill_stack.json index ca4d8c1561f..f0244f7c75d 100644 --- a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_fill_stack.json +++ b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_fill_stack.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-fill_stack": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_fill_stack[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x01de610f00331cea813e8143d51eb44ca352cdd90c602bb4b4bcf3c6cf9d5531" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -109,9 +111,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-fill_stack": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_fill_stack[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -166,6 +169,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x630ae751325c610cff4b74dc34bdb0a2a50aef4014286a72ed3800b406265c1f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_gas_cost.json b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_gas_cost.json index d3dba7a82f8..d8dddb7a58e 100644 --- a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_gas_cost.json +++ b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_gas_cost.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-gas_cost": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_gas_cost[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x805655a82d33ff8d930378e9e0bb1e0c090043973ad52d0e56fb44b22eb8095c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -109,9 +111,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-gas_cost": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_gas_cost[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -166,6 +169,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf5d6c41a8f45dc4795016cce704ac496eb007780e556f2ab6c7ad7697cd7a5d3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_key_sstore.json b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_key_sstore.json index f5eed875f47..9a83f5c64ec 100644 --- a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_key_sstore.json +++ b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_key_sstore.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-key_sstore": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_key_sstore[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x93c54065833074f6930ed32f94d110fd37daec5eb279ddb78590afef158427eb" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -109,9 +111,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-key_sstore": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_key_sstore[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -166,6 +169,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xf0b6865232f53efb416b3d01cf01543fcf0b5cb5ea8e8703220e87d5c02620d2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_stack_overflow.json b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_stack_overflow.json index 36a3751b7e6..7f049af6dec 100644 --- a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_stack_overflow.json +++ b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_stack_overflow.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-stack_overflow": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_stack_overflow[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4ab6787d02af1295b0244fc6a7be5e4e2b784257a2cacc70f8a38a416f05673b" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -107,9 +109,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-stack_overflow": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_stack_overflow[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -164,6 +167,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb1812c5fb9c6a62d4157daa1542771a9157613796dca7293bbae19ef31e8ce5f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_storage_overwrite.json b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_storage_overwrite.json index 51240d265a2..79dc25b7a27 100644 --- a/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_storage_overwrite.json +++ b/tests/execution-spec-tests/shanghai/eip3855_push0/push0/push0_storage_overwrite.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-storage_overwrite": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_storage_overwrite[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xb02ccd35c945189ef764e4cdccc23b74c8137ff4472b2505244c54e463bdd42d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -112,9 +114,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun-storage_overwrite": { + "tests/shanghai/eip3855_push0/test_push0.py::test_push0_storage_overwrite[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3855.md", "reference-spec-version": "42034250ae8dd4b21fdc6795773893c6f1e74d3a" }, @@ -169,6 +172,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x7d99dae1e0497349f63bd80493a459d58fdc6e0b9198fd24981908fe767d6ebd" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/contract_creating_tx.json b/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/contract_creating_tx.json index d2416f8621e..52e39d32a42 100644 --- a/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/contract_creating_tx.json +++ b/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/contract_creating_tx.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-max_size_zeros-max_size_zeros": { + "tests/shanghai/eip3860_initcode/test_initcode.py::test_contract_creating_tx[fork_Shanghai-blockchain_test-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -29,7 +30,7 @@ }, "blocks": [ { - "rlp": "0xf9c273f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0730b5921e1c6baafedb36baf0cd7c5dfb811971946423743f5de14c14b98e9aba0b43be3266d36a6cf57bd080fefb7432d70f7a63ea4bf22a2fc2958f831d09c22a04ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc540c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a839896808080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0a0d8a5a024d6e286f7f986a1de8cdb7226d0a13af1f754bca4dc0e644bfd3f45a018e6afceafa535c635b3a4b7fd5483c7b3cc285820d5631e1d0e47485eb04344c0c0", + "rlp": "0xf9c275f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0730b5921e1c6baafedb36baf0cd7c5dfb811971946423743f5de14c14b98e9aba0b43be3266d36a6cf57bd080fefb7432d70f7a63ea4bf22a2fc2958f831d09c22a04ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc548203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a839896808080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0a0d8a5a024d6e286f7f986a1de8cdb7226d0a13af1f754bca4dc0e644bfd3f45a018e6afceafa535c635b3a4b7fd5483c7b3cc285820d5631e1d0e47485eb04344c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -42,13 +43,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dc54", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xeaca9cda71e38f187c81de2fb4c538887d4ca31f107b1d8757c25efe507aa909" + "hash": "0x667167639f0a7498af47ae3a2b61f89d51ef040d7b4489a526bdfe4657f8f7e3" }, "blocknumber": "1", "transactions": [ @@ -71,7 +72,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xeaca9cda71e38f187c81de2fb4c538887d4ca31f107b1d8757c25efe507aa909", + "lastblockhash": "0x667167639f0a7498af47ae3a2b61f89d51ef040d7b4489a526bdfe4657f8f7e3", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -102,9 +103,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-max_size_ones-max_size_ones": { + "tests/shanghai/eip3860_initcode/test_initcode.py::test_contract_creating_tx[fork_Shanghai-blockchain_test-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -132,7 +134,7 @@ }, "blocks": [ { - "rlp": "0xf9c273f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03a4bdee58e15bc72c9695c6f9fd4bb89dcf1d8caf3ea2296bf86c8949378cc4fa02609f56b03dac898c89cf783b59eabe338da070ae1ab8bd8fe5bc87638376936a052366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a839896808080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a0cdeaf7fc1bbbef789dcabe52663c15953b1f91168ae6a2f261e9ee12f5852e42a01750e178d7ba316862ce893f7e4d3e09fea525ffd1409a867950833649d3c539c0c0", + "rlp": "0xf9c275f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03a4bdee58e15bc72c9695c6f9fd4bb89dcf1d8caf3ea2296bf86c8949378cc4fa02609f56b03dac898c89cf783b59eabe338da070ae1ab8bd8fe5bc87638376936a052366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a839896808080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a0cdeaf7fc1bbbef789dcabe52663c15953b1f91168ae6a2f261e9ee12f5852e42a01750e178d7ba316862ce893f7e4d3e09fea525ffd1409a867950833649d3c539c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -145,13 +147,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0cdbc4", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x6c2cfa9d65be127758e859af234336814381092dad906e319a591434ef54ac66" + "hash": "0x654142c1f63c46dd9a7ee8a7672f080c259cff50269bfae4fb31879610bf88f4" }, "blocknumber": "1", "transactions": [ @@ -174,7 +176,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6c2cfa9d65be127758e859af234336814381092dad906e319a591434ef54ac66", + "lastblockhash": "0x654142c1f63c46dd9a7ee8a7672f080c259cff50269bfae4fb31879610bf88f4", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -205,9 +207,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-over_limit_zeros-over_limit_zeros": { + "tests/shanghai/eip3860_initcode/test_initcode.py::test_contract_creating_tx[fork_Shanghai-blockchain_test-over_limit_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -235,29 +238,30 @@ }, "blocks": [ { - "rlp": "0xf9c271f90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c052f9c04f800a839896808080b9c001610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0b8ba45e0ef29fa4dae53b530d498e9b320adcd8723772d76b57dfb7f1b640d3da0675ee050b02d95a683235846a39fdc01854f680d98f8723222d339e5a15b30ccc0c0", - "expectException": "max initcode size exceeded", + "rlp": "0xf9c273f90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a06e9d2cc8ed503733c7f6769016382a4740d1d3fd69108105cf57d6c68cc3f661a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c052f9c04f800a839896808080b9c001610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0b8ba45e0ef29fa4dae53b530d498e9b320adcd8723772d76b57dfb7f1b640d3da0675ee050b02d95a683235846a39fdc01854f680d98f8723222d339e5a15b30ccc0c0", + "expectException": "TransactionException.INITCODE_SIZE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x6e9d2cc8ed503733c7f6769016382a4740d1d3fd69108105cf57d6c68cc3f661", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0x1b82b6295031de5e94e3b125ee6bf19bdb772b2b74641b93d21ceefe6b7abf43" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -298,9 +302,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-over_limit_ones-over_limit_ones": { + "tests/shanghai/eip3860_initcode/test_initcode.py::test_contract_creating_tx[fork_Shanghai-blockchain_test-over_limit_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -328,29 +333,30 @@ }, "blocks": [ { - "rlp": "0xf9c271f90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c052f9c04f800a839896808080b9c001610001600081600b8239f3000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a0a4a41d0afd04eeddf1225036a39a1a1cb09834fe107f4fadd22675b635bbe6f2a02edec61109e01f9e704e28a0cfa7d9ef53705deee45a57b3df66bb9ccdd2f18ec0c0", - "expectException": "max initcode size exceeded", + "rlp": "0xf9c273f90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a0e285714479871e6c6be41a10cf2c5eef2c1d10bcc9624c1ea0d17cccc738e5a3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c052f9c04f800a839896808080b9c001610001600081600b8239f3000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a0a4a41d0afd04eeddf1225036a39a1a1cb09834fe107f4fadd22675b635bbe6f2a02edec61109e01f9e704e28a0cfa7d9ef53705deee45a57b3df66bb9ccdd2f18ec0c0", + "expectException": "TransactionException.INITCODE_SIZE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xe285714479871e6c6be41a10cf2c5eef2c1d10bcc9624c1ea0d17cccc738e5a3", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0x705c4478ed9510c648e84e9b4d38758c9c7ffe43a892b7cf16ff4d4f6f9345d2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -391,9 +397,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-max_size_zeros-max_size_zeros": { + "tests/shanghai/eip3860_initcode/test_initcode.py::test_contract_creating_tx[fork_Cancun-blockchain_test-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -424,12 +431,12 @@ }, "blocks": [ { - "rlp": "0xf9c296f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00888c2b7ec9b76fae3552c963fcc2d56903a982bad54446733997d2c17166da7a0b43be3266d36a6cf57bd080fefb7432d70f7a63ea4bf22a2fc2958f831d09c22a04ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc540c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a839896808080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0a0d8a5a024d6e286f7f986a1de8cdb7226d0a13af1f754bca4dc0e644bfd3f45a018e6afceafa535c635b3a4b7fd5483c7b3cc285820d5631e1d0e47485eb04344c0c0", + "rlp": "0xf9c298f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09a158dc12592cb6e32af9a5e2ce1387dee27268689a00d9a6f701931d38c43efa0b43be3266d36a6cf57bd080fefb7432d70f7a63ea4bf22a2fc2958f831d09c22a04ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc548203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a839896808080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0a0d8a5a024d6e286f7f986a1de8cdb7226d0a13af1f754bca4dc0e644bfd3f45a018e6afceafa535c635b3a4b7fd5483c7b3cc285820d5631e1d0e47485eb04344c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0888c2b7ec9b76fae3552c963fcc2d56903a982bad54446733997d2c17166da7", + "stateRoot": "0x9a158dc12592cb6e32af9a5e2ce1387dee27268689a00d9a6f701931d38c43ef", "transactionsTrie": "0xb43be3266d36a6cf57bd080fefb7432d70f7a63ea4bf22a2fc2958f831d09c22", "receiptTrie": "0x4ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -437,8 +444,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dc54", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -446,7 +453,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x9b98f38d63055f8073908e8cdd78e5160127967cadbd61f579351e3d6d55f1fd" + "hash": "0xeca805435ad4df981142da29ae74fc4cdf8363bec78d6eb06834ac6335e7a562" }, "blocknumber": "1", "transactions": [ @@ -469,7 +476,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x9b98f38d63055f8073908e8cdd78e5160127967cadbd61f579351e3d6d55f1fd", + "lastblockhash": "0xeca805435ad4df981142da29ae74fc4cdf8363bec78d6eb06834ac6335e7a562", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -490,7 +497,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -514,9 +521,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-max_size_ones-max_size_ones": { + "tests/shanghai/eip3860_initcode/test_initcode.py::test_contract_creating_tx[fork_Cancun-blockchain_test-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -547,12 +555,12 @@ }, "blocks": [ { - "rlp": "0xf9c296f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bb2a5dbe1ebd3bc25a66a12e1f0db9109a769cca8693b266783d70aeb508668ba02609f56b03dac898c89cf783b59eabe338da070ae1ab8bd8fe5bc87638376936a052366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a839896808080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a0cdeaf7fc1bbbef789dcabe52663c15953b1f91168ae6a2f261e9ee12f5852e42a01750e178d7ba316862ce893f7e4d3e09fea525ffd1409a867950833649d3c539c0c0", + "rlp": "0xf9c298f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cf91a83ed18abdc1a2c3c4b6be7b3934e02ee30ba894b94db9634ca486b86340a02609f56b03dac898c89cf783b59eabe338da070ae1ab8bd8fe5bc87638376936a052366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a839896808080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a0cdeaf7fc1bbbef789dcabe52663c15953b1f91168ae6a2f261e9ee12f5852e42a01750e178d7ba316862ce893f7e4d3e09fea525ffd1409a867950833649d3c539c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbb2a5dbe1ebd3bc25a66a12e1f0db9109a769cca8693b266783d70aeb508668b", + "stateRoot": "0xcf91a83ed18abdc1a2c3c4b6be7b3934e02ee30ba894b94db9634ca486b86340", "transactionsTrie": "0x2609f56b03dac898c89cf783b59eabe338da070ae1ab8bd8fe5bc87638376936", "receiptTrie": "0x52366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -560,8 +568,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0cdbc4", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -569,7 +577,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6512f4777a7517f84599eb99b8209b28b58d9ca846822c8557098265d7c046eb" + "hash": "0xb7eea7550b72f73a3875bc624a0f59c2c3596813b1b684a9e8e8c5a724c85fa7" }, "blocknumber": "1", "transactions": [ @@ -592,7 +600,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6512f4777a7517f84599eb99b8209b28b58d9ca846822c8557098265d7c046eb", + "lastblockhash": "0xb7eea7550b72f73a3875bc624a0f59c2c3596813b1b684a9e8e8c5a724c85fa7", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -613,7 +621,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -637,9 +645,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-over_limit_zeros-over_limit_zeros": { + "tests/shanghai/eip3860_initcode/test_initcode.py::test_contract_creating_tx[fork_Cancun-blockchain_test-over_limit_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -670,23 +679,23 @@ }, "blocks": [ { - "rlp": "0xf9c294f9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c052f9c04f800a839896808080b9c001610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0b8ba45e0ef29fa4dae53b530d498e9b320adcd8723772d76b57dfb7f1b640d3da0675ee050b02d95a683235846a39fdc01854f680d98f8723222d339e5a15b30ccc0c0", - "expectException": "max initcode size exceeded", + "rlp": "0xf9c296f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa06e9d2cc8ed503733c7f6769016382a4740d1d3fd69108105cf57d6c68cc3f661a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c052f9c04f800a839896808080b9c001610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0b8ba45e0ef29fa4dae53b530d498e9b320adcd8723772d76b57dfb7f1b640d3da0675ee050b02d95a683235846a39fdc01854f680d98f8723222d339e5a15b30ccc0c0", + "expectException": "TransactionException.INITCODE_SIZE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0x6e9d2cc8ed503733c7f6769016382a4740d1d3fd69108105cf57d6c68cc3f661", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -694,8 +703,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0x87c4ccd76368661a34cb9be5bf4a97b7dbfa60f5c8b62e2cb82ee1cc195a205d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -748,9 +758,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-over_limit_ones-over_limit_ones": { + "tests/shanghai/eip3860_initcode/test_initcode.py::test_contract_creating_tx[fork_Cancun-blockchain_test-over_limit_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -781,23 +792,23 @@ }, "blocks": [ { - "rlp": "0xf9c294f9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c052f9c04f800a839896808080b9c001610001600081600b8239f3000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a0a4a41d0afd04eeddf1225036a39a1a1cb09834fe107f4fadd22675b635bbe6f2a02edec61109e01f9e704e28a0cfa7d9ef53705deee45a57b3df66bb9ccdd2f18ec0c0", - "expectException": "max initcode size exceeded", + "rlp": "0xf9c296f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa0e285714479871e6c6be41a10cf2c5eef2c1d10bcc9624c1ea0d17cccc738e5a3a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c052f9c04f800a839896808080b9c001610001600081600b8239f3000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a0a4a41d0afd04eeddf1225036a39a1a1cb09834fe107f4fadd22675b635bbe6f2a02edec61109e01f9e704e28a0cfa7d9ef53705deee45a57b3df66bb9ccdd2f18ec0c0", + "expectException": "TransactionException.INITCODE_SIZE_EXCEEDED", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0xe285714479871e6c6be41a10cf2c5eef2c1d10bcc9624c1ea0d17cccc738e5a3", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -805,8 +816,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0xaec7ab1a4d2f9d6c51b09844834ab5ad414f23ba5da881583cf3fc2bc7e4d317" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/create_opcode_initcode.json b/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/create_opcode_initcode.json index b96e4bdf5c2..edc745d9c4c 100644 --- a/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/create_opcode_initcode.json +++ b/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/create_opcode_initcode.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-create-max_size_zeros-max_size_zeros_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -50,6 +51,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x4412d941ea4880b38f958e7833d1efbd20964c94af822d6b371bc149a8c7645e" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -130,9 +132,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-create-max_size_ones-max_size_ones_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -181,6 +184,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xa4e2e2debd66d71102ba1c0a9c8cf542b1a64deaf9079de6a9d2326d29f751f2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -261,9 +265,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-create-over_limit_zeros-over_limit_zeros_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-over_limit_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -312,6 +317,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xa786f60b6f32b872f1dd2172af492d3ec0335609cbc89534788866c4c69d2843" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -383,9 +389,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-create-over_limit_ones-over_limit_ones_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-over_limit_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -434,6 +441,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x56f5cfc9ea8358d020d4acaf574e3c6dcc4d62780a4a5030f652ebd579876530" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -505,9 +513,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai-create-empty-empty_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -556,6 +565,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xb9c33a5d4c6e0ae0c0560c33160facd475f54c63a57aea477c557f7f8c93813d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -636,9 +646,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Shanghai-create-single_byte-single_byte_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -687,6 +698,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x342d803b6e2d42f5528b17c38ab358fc00c0f748237cfd56cf1024c7014ad37d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -767,9 +779,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai-create-32_bytes-32_bytes_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -818,6 +831,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x56ee365679e90a22abba28e61761bde09102609361d0398679574bf068b7192c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -898,9 +912,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Shanghai-create-33_bytes-33_bytes_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -949,6 +964,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xdec9d83d7c54e8327f2b0a1274138eca0c7310f918079cd068ebe3eca157c3dc" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1029,9 +1045,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Shanghai-create-49120_bytes-49120_bytes_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1080,6 +1097,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x28f9325234951a4f771874f72ce920c9f3078b62a9b00ce148fa04c169ccf589" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1160,9 +1178,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Shanghai-create-49121_bytes-49121_bytes_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1211,6 +1230,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xcf1be7ec67e3ca395297e5ba8c9df46d022c18c47e34bf81b2b9a1e39279a946" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1291,9 +1311,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Shanghai-create2-max_size_zeros-max_size_zeros_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1342,6 +1363,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x254fc8d8caa6a262ebc8f1b533c422ed2ee5ec1f1622f66c93f35f8703ee748f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1422,9 +1444,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Shanghai-create2-max_size_ones-max_size_ones_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1473,6 +1496,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xe0fc820e6aebbceaac508b8415946625e147d8bc738344bc1e51c7c63fe41d60" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1553,9 +1577,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Shanghai-create2-over_limit_zeros-over_limit_zeros_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-over_limit_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1604,6 +1629,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x9b9b455ccc341570722a5586b62a9bf7c60f71fe4d0e45088b83c9353d684a9f" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1675,9 +1701,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Shanghai-create2-over_limit_ones-over_limit_ones_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-over_limit_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1726,6 +1753,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x08606faa33c2536d39f6aa154a75a34b37daf568335bd6e962b4be9512721115" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1797,9 +1825,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Shanghai-create2-empty-empty_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1848,6 +1877,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xac3560b08375917060039e22bc64eaf4abffa35306577463d446b65c21e3c1d3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -1928,9 +1958,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Shanghai-create2-single_byte-single_byte_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1979,6 +2010,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x1d44c2fcb23cd6b6d1d6bf005b741e24d71ded240e1c2d4a7463cb910d2526b5" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2059,9 +2091,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Shanghai-create2-32_bytes-32_bytes_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2110,6 +2143,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0xf0264ada25b2abf7c957acc68554e8385e90895eb8f10b04fd02583f48f05436" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2190,9 +2224,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Shanghai-create2-33_bytes-33_bytes_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2241,6 +2276,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x5344d0ec2f83e5b828e4b5913620a51055a6aef2ef93d132487c97d807fb8451" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2321,9 +2357,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Shanghai-create2-49120_bytes-49120_bytes_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2372,6 +2409,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x0096d7ba126b5504ca73c0aeaf995aeb81fe9da006d74aa7e341fae7b7f94cd1" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2452,9 +2490,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Shanghai-create2-49121_bytes-49121_bytes_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Shanghai-blockchain_test-create2-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2503,6 +2542,7 @@ "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "hash": "0x7f3c5d3ce3859ec3fdfa363f3c57ca885eb4401681ed941706e96185d755c03c" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2583,9 +2623,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-create-max_size_zeros-max_size_zeros_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2640,6 +2681,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xa5657f26a6b785d006b44ca60b89c2f8da9072f132803e03355ed62b8bba80e2" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2734,9 +2776,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-create-max_size_ones-max_size_ones_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2791,6 +2834,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc71514d1ae8b7809b3e7e7997eed1647d6428b07d2e6e954fc971d1b3f673c40" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -2885,9 +2929,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-create-over_limit_zeros-over_limit_zeros_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-over_limit_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2942,6 +2987,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xc5b7617e436343f2eb309568a47c3dab85a66d671c98a1499e5bcc1e12ccf824" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3027,9 +3073,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-create-over_limit_ones-over_limit_ones_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-over_limit_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3084,6 +3131,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3215bb7a841fc750d65cc58e813c04f62774b1ccfc12bfcf2617e4086a319fe9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3169,9 +3217,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-create-empty-empty_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3226,6 +3275,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x2c52f7687639585bbae0b83d5f82903b63f3df786e3c7910902b51f51a1be5c3" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3320,9 +3370,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-create-single_byte-single_byte_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3377,6 +3428,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3f9db1d0a8218814b3e9d439a63a98464a714e07432be846d640c1df98c3eaf7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3471,9 +3523,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-create-32_bytes-32_bytes_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3528,6 +3581,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x36663f62d32c64cfc5d7a566724dbf6b50c19e54119b8120115be35b9c180a52" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3622,9 +3676,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-create-33_bytes-33_bytes_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3679,6 +3734,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb56d6a1964a2c04285736210709fbb9c49d23c1a23ce057ab4d08fbf29c1f21e" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3773,9 +3829,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-create-49120_bytes-49120_bytes_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3830,6 +3887,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x1576fdc52fea430cd7216c180b0a115885dfc302c4eb9fae65d0ff33efe7ab61" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3924,9 +3982,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-create-49121_bytes-49121_bytes_CREATE": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3981,6 +4040,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x40890d2874826f01e2c8fe829916cae404190ec8259228b4df0de8146203c0fb" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4075,9 +4135,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-create2-max_size_zeros-max_size_zeros_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4132,6 +4193,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xeee5a8e7d239fa7e944037a5f3f6058832c71b2ecb19d8bb5f1457f0c6b2bcf1" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4226,9 +4288,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-create2-max_size_ones-max_size_ones_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4283,6 +4346,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x28270770437561c7f482c9ddf07eb5e2c571bdb68d7a29c792fdf2bc3d008aa4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4377,9 +4441,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-create2-over_limit_zeros-over_limit_zeros_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-over_limit_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4434,6 +4499,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x732e5c965a965900ba8970f08af20304551bf052dbd8c0c2316cc509b5cba032" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4519,9 +4585,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-create2-over_limit_ones-over_limit_ones_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-over_limit_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4576,6 +4643,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x78810b61928b384d35fa9e6b4ff3ffe40e9ec5978531cf607e32f8d1b26ad1a4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4661,9 +4729,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-create2-empty-empty_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4718,6 +4787,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0xb889bef8c1f5fdb10d36ddc34e4174f622a21fdfc37eaeda88afe3c510ac4d0a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4812,9 +4882,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-create2-single_byte-single_byte_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4869,6 +4940,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x223c4d889d7698dc216deedcead9356aae2049afc6b73dcbea5e58dee6258df9" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -4963,9 +5035,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-create2-32_bytes-32_bytes_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5020,6 +5093,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3892756c524d5cac841a68b858b9cadd3b00ef20474ce65b2b03729110552216" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5114,9 +5188,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-create2-33_bytes-33_bytes_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5171,6 +5246,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x3d378c0dd2781ea4fc0cdd871d293400e465d9870665ec3c5e1dedd4cd185aa0" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5265,9 +5341,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun-create2-49120_bytes-49120_bytes_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5322,6 +5399,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x10ef19c6a8a311a7249b579148dd41a5f01a13b08caf2727dd88059a8ab01ea4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -5416,9 +5494,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun-create2-49121_bytes-49121_bytes_CREATE2": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestCreateInitcode::test_create_opcode_initcode[fork_Cancun-blockchain_test-create2-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5473,6 +5552,7 @@ "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", "hash": "0x23d5eb9bb312671c743f5b8246ae97cea3696e6cce8553b70d87befbe408ca48" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", diff --git a/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/gas_usage.json b/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/gas_usage.json index 285f6deed0c..eb41379eca1 100644 --- a/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/gas_usage.json +++ b/tests/execution-spec-tests/shanghai/eip3860_initcode/initcode/gas_usage.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-too_little_intrinsic_gas-max_size_zeros-max_size_zeros_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_intrinsic_gas-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -29,29 +30,30 @@ }, "blocks": [ { - "rlp": "0xf9c270f90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a8303db738080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a07a12ad14630278748a00c21e70949f53181651993e421cbb42af34f5dfc05721a040b4dc45012128c5ef6fe1089d62077a02a2c5e61e26a2f135254bc63e9299e3c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9c272f90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a050498e8647ee11ebce65cba95ca2a7385f40721c970e556083c0189a04280c09a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a8303db738080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a07a12ad14630278748a00c21e70949f53181651993e421cbb42af34f5dfc05721a040b4dc45012128c5ef6fe1089d62077a02a2c5e61e26a2f135254bc63e9299e3c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x50498e8647ee11ebce65cba95ca2a7385f40721c970e556083c0189a04280c09", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0x9a4e49f44420c46831dd079ccd2534c02e4d9f239f0b5016a694aeb1d7ac1a91" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -92,9 +94,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-too_little_intrinsic_gas-max_size_ones-max_size_ones_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_intrinsic_gas-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -122,29 +125,30 @@ }, "blocks": [ { - "rlp": "0xf9c270f90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a830cdae38080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a02e78f86fbae31c01889516a4d1f7f28cc63df394ecc478e8a648b5e47028425fa00fda47a674b50ebb29d0a6cf09c691ed8e70beebc95ea0673dcf2bee3928b87cc0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9c272f90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a0667ec0f960678af0558647cb636d06b3c06f113e38a2fdac531e18f995d0d7dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a830cdae38080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a02e78f86fbae31c01889516a4d1f7f28cc63df394ecc478e8a648b5e47028425fa00fda47a674b50ebb29d0a6cf09c691ed8e70beebc95ea0673dcf2bee3928b87cc0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x667ec0f960678af0558647cb636d06b3c06f113e38a2fdac531e18f995d0d7df", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0x2866c16adab25f477bc423a1c687f4eaf69ad4f795a88f0c978f9c44851a2177" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -185,9 +189,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-too_little_intrinsic_gas-empty-empty_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_intrinsic_gas-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -215,29 +220,30 @@ }, "blocks": [ { - "rlp": "0xf9026bf90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0780808025a00372ba5e45d0a0e636f7e32ffca16f97a2f3e4e930b6584b7b114ab3aa191b4fa04afdfcd2bc179e25c7aa74cb991a08f0ae6c01541a36f700be25c6f4c39bc098c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9026df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a060f0ec438cccd9d1035d1e12fa0523e7618a2132837cd117aa0e321fe12acce8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0780808025a00372ba5e45d0a0e636f7e32ffca16f97a2f3e4e930b6584b7b114ab3aa191b4fa04afdfcd2bc179e25c7aa74cb991a08f0ae6c01541a36f700be25c6f4c39bc098c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x60f0ec438cccd9d1035d1e12fa0523e7618a2132837cd117aa0e321fe12acce8", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0xf0aa34487d4b6752900f33b6b2403275c724fbd7312ec0975a86d1d740188ef1" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -278,9 +284,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-too_little_intrinsic_gas-single_byte-single_byte_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_intrinsic_gas-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -308,29 +315,30 @@ }, "blocks": [ { - "rlp": "0xf9026bf90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0d80800025a082244b29c33f38cc89873fc90d5d4464ba0c1120fa7b666d68dd6ba855c71006a043f9021be8aa3a95d60b888d91caf5ef3400992f45caec6e990db3a01cb985e3c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9026df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a0aec39c5258bd73514334e93bbae1206c4e8c41acec52c8c34cf79f7ca9983745a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0d80800025a082244b29c33f38cc89873fc90d5d4464ba0c1120fa7b666d68dd6ba855c71006a043f9021be8aa3a95d60b888d91caf5ef3400992f45caec6e990db3a01cb985e3c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xaec39c5258bd73514334e93bbae1206c4e8c41acec52c8c34cf79f7ca9983745", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0xcd33834747b2336a071daaf8788954c99007000bb92277bda0844430e73f223d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -371,9 +379,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai-too_little_intrinsic_gas-32_bytes-32_bytes_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_intrinsic_gas-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -401,29 +410,30 @@ }, "blocks": [ { - "rlp": "0xf9028bf90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86df86b800a82cff58080a0610001600081600b8239f300000000000000000000000000000000000000000025a07dae455766b7111996f88d8beebade630397f76dcf61244a0a34bc1765f567a8a01570635581d43b7e5070f0e76ccb8368612b0831d78cd124ac886f4203abe4afc0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9028df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a020a55d37611609c712fb5893f58723f9867b814d57085e89c57d2e2efcd75620a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86df86b800a82cff58080a0610001600081600b8239f300000000000000000000000000000000000000000025a07dae455766b7111996f88d8beebade630397f76dcf61244a0a34bc1765f567a8a01570635581d43b7e5070f0e76ccb8368612b0831d78cd124ac886f4203abe4afc0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x20a55d37611609c712fb5893f58723f9867b814d57085e89c57d2e2efcd75620", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0x116b89cc412fb42cfe441cc868a8721bca21c94160520032f761f7f9ab954918" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -464,9 +474,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Shanghai-too_little_intrinsic_gas-33_bytes-33_bytes_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_intrinsic_gas-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -494,29 +505,30 @@ }, "blocks": [ { - "rlp": "0xf9028cf90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86ef86c800a82cffb8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a010f3533be24d3feaf9ccbb3efa340636d081d900bdf314a4db35e3e5189fe781a03d9ea618e5b4edd41f503e20264feef4420d3a0c7e731046fab9e1f85d2c15a0c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9028ef90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a0400b1b76f23833832e728c1df4198bc4ea1d2be65d5f317b90543341810461cba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86ef86c800a82cffb8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a010f3533be24d3feaf9ccbb3efa340636d081d900bdf314a4db35e3e5189fe781a03d9ea618e5b4edd41f503e20264feef4420d3a0c7e731046fab9e1f85d2c15a0c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x400b1b76f23833832e728c1df4198bc4ea1d2be65d5f317b90543341810461cb", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0x1bb1fe3f691011712129eff2f15ff3b3497f56e6a3df50150d6d5c0dfae9210d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -557,9 +569,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai-too_little_intrinsic_gas-49120_bytes-49120_bytes_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_intrinsic_gas-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -587,29 +600,30 @@ }, "blocks": [ { - "rlp": "0xf9c250f90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c031f9c02e800a8303daf18080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a03bedf910a8ed4657737f9a44ec70b3fe204b62c6fb0f9a6987bf20a86add0c24a033ce8e62ec42e5474ecdb6491c2774cb41107ff713a7889eb8fa91689ecbdcbcc0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9c252f90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a05915f9aeb3a2ac64e8ae35e2922893279e0eaf4872b91fff94808338e838842ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c031f9c02e800a8303daf18080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a03bedf910a8ed4657737f9a44ec70b3fe204b62c6fb0f9a6987bf20a86add0c24a033ce8e62ec42e5474ecdb6491c2774cb41107ff713a7889eb8fa91689ecbdcbcc0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x5915f9aeb3a2ac64e8ae35e2922893279e0eaf4872b91fff94808338e838842b", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0x2469bda1f5f284ad51395db79d84a346b216a9185075dbd6af0d29d8a6d5e817" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -650,9 +664,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Shanghai-too_little_intrinsic_gas-49121_bytes-49121_bytes_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_intrinsic_gas-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -680,29 +695,30 @@ }, "blocks": [ { - "rlp": "0xf9c251f90217a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c032f9c02f800a8303daf78080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0dadbbb823c5f563f9764ec9b38285e63dd03bca4922496cfdcc3e803cf730b0ca03c48dc30f97c18f7e24c442144568fd2def2611a18aca47334d8934d44bf7742c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9c253f90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa070c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8a01d19ef255f90578f75f08c04269ff46f67f4977dae5c3e37588a97c4d2370753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c032f9c02f800a8303daf78080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0dadbbb823c5f563f9764ec9b38285e63dd03bca4922496cfdcc3e803cf730b0ca03c48dc30f97c18f7e24c442144568fd2def2611a18aca47334d8934d44bf7742c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x70c42824108fafccadbfce71e6e22660c4fad89be18be324cd15ef351969a8c8", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0x1d19ef255f90578f75f08c04269ff46f67f4977dae5c3e37588a97c4d2370753", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x491311d7aa7813e6f18310a623255517cc0fa32d2415929e0f5e439c56074c29" + "hash": "0xe01970274ca1102faf21e506c860b2a3bc6391bdc4b98ea67c4e36dc302d3ad7" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -743,9 +759,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Shanghai-exact_intrinsic_gas-max_size_zeros-max_size_zeros_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_intrinsic_gas-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -773,7 +790,7 @@ }, "blocks": [ { - "rlp": "0xf9c273f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0867f712d5ca0737861b1cb26e6c1914955e640f299180382fe4f05b6031a73e7a01169104559185d448ec9bc60e7714aa46ee068ff74c7b54a23351c384947268ba05f4c415ae56936421e7f5fd9aa6ea10ff5ca9e37f1cb0651eea3b9fbb544c4cfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303db740c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a8303db748080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a05880964f0c753d5f7ef82efe525190dd387372ae45606dbf0cc8a173468fee17a049449c623d2b061bd223f019008c4345665f7f24fb5a75e074dbccbc08829cf2c0c0", + "rlp": "0xf9c275f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0867f712d5ca0737861b1cb26e6c1914955e640f299180382fe4f05b6031a73e7a01169104559185d448ec9bc60e7714aa46ee068ff74c7b54a23351c384947268ba05f4c415ae56936421e7f5fd9aa6ea10ff5ca9e37f1cb0651eea3b9fbb544c4cfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303db748203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a8303db748080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a05880964f0c753d5f7ef82efe525190dd387372ae45606dbf0cc8a173468fee17a049449c623d2b061bd223f019008c4345665f7f24fb5a75e074dbccbc08829cf2c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -786,13 +803,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03db74", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xda461b2bad5bc89b9846c8b48d38283eef9941e1da638ee3b0ef016645a4bd92" + "hash": "0x5c2ce72dc4f753948a15a998a52730f4df4a5cea39892596975f5ed88d0da1d6" }, "blocknumber": "1", "transactions": [ @@ -815,7 +832,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xda461b2bad5bc89b9846c8b48d38283eef9941e1da638ee3b0ef016645a4bd92", + "lastblockhash": "0x5c2ce72dc4f753948a15a998a52730f4df4a5cea39892596975f5ed88d0da1d6", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -840,9 +857,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Shanghai-exact_intrinsic_gas-max_size_ones-max_size_ones_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_intrinsic_gas-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -870,7 +888,7 @@ }, "blocks": [ { - "rlp": "0xf9c273f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0987081c1ada19671c682d72c1e762b8bf833d1ca64db7d1e5b63c42760dbf872a0fa7ea18daabcfa358d0aa8852f52b355306ac02a4b06c494aad3bf314f212816a0fc526fb664585777f263a147be0acf017497a199d8fcd568e748ab659fbd5616b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdae40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a830cdae48080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a0594853f9645d0eebeffdd580697fd120e99dd6d1d51ced5bb91c6d28784ee66da01776d13cf1925553135a8c735339ca52ad044141f6d15c3755dfc4a2597eff80c0c0", + "rlp": "0xf9c275f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0987081c1ada19671c682d72c1e762b8bf833d1ca64db7d1e5b63c42760dbf872a0fa7ea18daabcfa358d0aa8852f52b355306ac02a4b06c494aad3bf314f212816a0fc526fb664585777f263a147be0acf017497a199d8fcd568e748ab659fbd5616b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdae48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a830cdae48080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a0594853f9645d0eebeffdd580697fd120e99dd6d1d51ced5bb91c6d28784ee66da01776d13cf1925553135a8c735339ca52ad044141f6d15c3755dfc4a2597eff80c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -883,13 +901,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0cdae4", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xe4833ec891ff37dbeeafa19ae521ebee3a6ddf0c5cedd080b6e1b721f84b4683" + "hash": "0x8f14006187a5cbb3df0a85c113d97062633093d7f8dae8c3c1d27de252879983" }, "blocknumber": "1", "transactions": [ @@ -912,7 +930,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xe4833ec891ff37dbeeafa19ae521ebee3a6ddf0c5cedd080b6e1b721f84b4683", + "lastblockhash": "0x8f14006187a5cbb3df0a85c113d97062633093d7f8dae8c3c1d27de252879983", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -937,9 +955,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Shanghai-exact_intrinsic_gas-empty-empty_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_intrinsic_gas-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -967,7 +986,7 @@ }, "blocks": [ { - "rlp": "0xf9026df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06732c29ae2bd388c90436c4b4a56af04ab85c1cdffa2d3c9a776f50d33233e94a0dfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35ba065c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0880808026a093da0e096b13f6889a36880987f4cfb0fdfd4d14c48beab2c3efacdf52ecfef9a008b548262f4ac8d6830743898f193c1b4e28b8f83ca9603e023684ba8d581381c0c0", + "rlp": "0xf9026ff9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06732c29ae2bd388c90436c4b4a56af04ab85c1cdffa2d3c9a776f50d33233e94a0dfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35ba065c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0880808026a093da0e096b13f6889a36880987f4cfb0fdfd4d14c48beab2c3efacdf52ecfef9a008b548262f4ac8d6830743898f193c1b4e28b8f83ca9603e023684ba8d581381c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -980,13 +999,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcf08", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x3455b77954e440b55a171c5067ecd88b6bda9b3248f5adcbca6bb1986329fe8d" + "hash": "0x5a2b32079f1cc4197643718650e76fa293c081796f131d52c137c6696f3aebe2" }, "blocknumber": "1", "transactions": [ @@ -1009,7 +1028,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3455b77954e440b55a171c5067ecd88b6bda9b3248f5adcbca6bb1986329fe8d", + "lastblockhash": "0x5a2b32079f1cc4197643718650e76fa293c081796f131d52c137c6696f3aebe2", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1040,9 +1059,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Shanghai-exact_intrinsic_gas-single_byte-single_byte_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_intrinsic_gas-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1070,7 +1090,7 @@ }, "blocks": [ { - "rlp": "0xf9026df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00767b669a4d3bb6ff797d04a94298625d361b0ee3a21f7987a8bdef73b36a123a0f06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cffa0d5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf0e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0e80800026a0e207ed17886e3c97723c5adce84e7761740dde41793acb56542559ea9d506e52a06253c94f447263480622fed4a725ad82847bffdf06840ac97036ff1d6f76ec09c0c0", + "rlp": "0xf9026ff9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00767b669a4d3bb6ff797d04a94298625d361b0ee3a21f7987a8bdef73b36a123a0f06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cffa0d5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf0e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0e80800026a0e207ed17886e3c97723c5adce84e7761740dde41793acb56542559ea9d506e52a06253c94f447263480622fed4a725ad82847bffdf06840ac97036ff1d6f76ec09c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1083,13 +1103,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcf0e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x4fccd26d4b911f8d389c42e5fe75a8b187081c2bb9ff20f140ac3c9539722847" + "hash": "0x1220d3ee13f0170f363f6d9c7a204f4efff4536ec3ec5e1b1ac6fb69b9a5630d" }, "blocknumber": "1", "transactions": [ @@ -1112,7 +1132,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4fccd26d4b911f8d389c42e5fe75a8b187081c2bb9ff20f140ac3c9539722847", + "lastblockhash": "0x1220d3ee13f0170f363f6d9c7a204f4efff4536ec3ec5e1b1ac6fb69b9a5630d", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1143,9 +1163,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Shanghai-exact_intrinsic_gas-32_bytes-32_bytes_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_intrinsic_gas-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1173,7 +1194,7 @@ }, "blocks": [ { - "rlp": "0xf9028df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a984f9d395b5276732c825f95d8b31a3924074d16a352ef23366fb14d7e007e3a028eda3390def1964896164363ad356c91b4f522f1b88e820ceb872ebc44e1a1fa0a085ede337af77752cc632bbfaa3a462e57d95822115693ec520216e89a9d9ceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cff60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86df86b800a82cff68080a0610001600081600b8239f300000000000000000000000000000000000000000026a0ac175c75ddb29002fd5a914510cddc332b04054bb3ab76c4d0574c6bc2f8bf73a03bb84e9e93d495adbcbb33bf7e9592d88b69d86b05b18b8b96df732ce19cdd66c0c0", + "rlp": "0xf9028ff9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a984f9d395b5276732c825f95d8b31a3924074d16a352ef23366fb14d7e007e3a028eda3390def1964896164363ad356c91b4f522f1b88e820ceb872ebc44e1a1fa0a085ede337af77752cc632bbfaa3a462e57d95822115693ec520216e89a9d9ceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cff68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86df86b800a82cff68080a0610001600081600b8239f300000000000000000000000000000000000000000026a0ac175c75ddb29002fd5a914510cddc332b04054bb3ab76c4d0574c6bc2f8bf73a03bb84e9e93d495adbcbb33bf7e9592d88b69d86b05b18b8b96df732ce19cdd66c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1186,13 +1207,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcff6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xe10118ea8cd2d49899ce9bf5a6b8666c2c6630d34f54a3d31da6d1b63e43af13" + "hash": "0x24221ef362310bbc4fd01d97315934150dc15b0c3a71db94a625cee4bbb68639" }, "blocknumber": "1", "transactions": [ @@ -1215,7 +1236,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xe10118ea8cd2d49899ce9bf5a6b8666c2c6630d34f54a3d31da6d1b63e43af13", + "lastblockhash": "0x24221ef362310bbc4fd01d97315934150dc15b0c3a71db94a625cee4bbb68639", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1240,9 +1261,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Shanghai-exact_intrinsic_gas-33_bytes-33_bytes_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_intrinsic_gas-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1270,7 +1292,7 @@ }, "blocks": [ { - "rlp": "0xf9028ef90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0946cd6d0d127bad5e479fc9550b8179ea5df037ad0a221c1d5667a7a114361bba0ea6453e840cb2df94975777d06822589242c5603703444dadc5b68db455966dda0eb618104c393169290c6a9b867c291c09412cb2c5b5076d5b2c0d5dfb35c6977b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cffc0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86ef86c800a82cffc8080a1610001600081600b8239f30000000000000000000000000000000000000000000025a0e7faec7d55dd768fd7ebb9776df2aa44931f80db25e7d09e725006899fe01127a002eeb320299bf3b1887df79375a35d57b030a8ee30e44c089cef317bdabf008fc0c0", + "rlp": "0xf90290f9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0946cd6d0d127bad5e479fc9550b8179ea5df037ad0a221c1d5667a7a114361bba0ea6453e840cb2df94975777d06822589242c5603703444dadc5b68db455966dda0eb618104c393169290c6a9b867c291c09412cb2c5b5076d5b2c0d5dfb35c6977b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cffc8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86ef86c800a82cffc8080a1610001600081600b8239f30000000000000000000000000000000000000000000025a0e7faec7d55dd768fd7ebb9776df2aa44931f80db25e7d09e725006899fe01127a002eeb320299bf3b1887df79375a35d57b030a8ee30e44c089cef317bdabf008fc0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1283,13 +1305,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcffc", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x53ea61fe81e3055bc115b7b823dafe722d85a2a86727277c4c150005cc58093c" + "hash": "0xda69076b4ec6029724d1cc20175ef5f87b01c7ad6db18ffc16ca02ff6ea709f5" }, "blocknumber": "1", "transactions": [ @@ -1312,7 +1334,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x53ea61fe81e3055bc115b7b823dafe722d85a2a86727277c4c150005cc58093c", + "lastblockhash": "0xda69076b4ec6029724d1cc20175ef5f87b01c7ad6db18ffc16ca02ff6ea709f5", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1337,9 +1359,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Shanghai-exact_intrinsic_gas-49120_bytes-49120_bytes_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_intrinsic_gas-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1367,7 +1390,7 @@ }, "blocks": [ { - "rlp": "0xf9c253f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0167677da23f37a47b781482ebcf672a1245e5a35daf8084a33722feefc4a814ca0a4855ff501bd48bc1e063578dcdd0335f1d3024eb621e9cf0a28a4db6e695932a043125b1ca5882bff1d93db430ae1d11574c291d6af7fc301d43693ff47f58198b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303daf20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c031f9c02e800a8303daf28080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0724d71805ad3c46cee33010c9c3cf2d1375a62734656027e0124e4c5b828eacca054250f07e8723e0d4a110ebdf813243685d7fdf9ea9cc7fece5a3044e492c1aac0c0", + "rlp": "0xf9c255f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0167677da23f37a47b781482ebcf672a1245e5a35daf8084a33722feefc4a814ca0a4855ff501bd48bc1e063578dcdd0335f1d3024eb621e9cf0a28a4db6e695932a043125b1ca5882bff1d93db430ae1d11574c291d6af7fc301d43693ff47f58198b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303daf28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c031f9c02e800a8303daf28080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0724d71805ad3c46cee33010c9c3cf2d1375a62734656027e0124e4c5b828eacca054250f07e8723e0d4a110ebdf813243685d7fdf9ea9cc7fece5a3044e492c1aac0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1380,13 +1403,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03daf2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x1a7cc951117202884b9f49454392493d8291195ff96318c2181a77868446f5f6" + "hash": "0x9134edc1d37969c44b28eebd89e4de50e988728a556202f7c6f0848af0a87e28" }, "blocknumber": "1", "transactions": [ @@ -1409,7 +1432,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1a7cc951117202884b9f49454392493d8291195ff96318c2181a77868446f5f6", + "lastblockhash": "0x9134edc1d37969c44b28eebd89e4de50e988728a556202f7c6f0848af0a87e28", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1434,9 +1457,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Shanghai-exact_intrinsic_gas-49121_bytes-49121_bytes_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_intrinsic_gas-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1464,7 +1488,7 @@ }, "blocks": [ { - "rlp": "0xf9c254f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aba904faea90f9831681b745d97d3411046aacd8711c0af90ef47e1b5a53ed00a088c9b78543cebfaf9b43683c75dc03a481469964bb321b1926adc6a63c554f43a062e7c8ccd924651bf45065fceb4b20c882110256436fafb285d4ac7c178756f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303daf80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c032f9c02f800a8303daf88080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a090c8fec7cae81dd703953cff23a17cd1b465e711d84f08085f8e015d22c39d13a05c8e70fb55f5c4896d40bc2a1f4191b47265feabaf1786967f69212b73a9b417c0c0", + "rlp": "0xf9c256f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0aba904faea90f9831681b745d97d3411046aacd8711c0af90ef47e1b5a53ed00a088c9b78543cebfaf9b43683c75dc03a481469964bb321b1926adc6a63c554f43a062e7c8ccd924651bf45065fceb4b20c882110256436fafb285d4ac7c178756f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303daf88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c032f9c02f800a8303daf88080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a090c8fec7cae81dd703953cff23a17cd1b465e711d84f08085f8e015d22c39d13a05c8e70fb55f5c4896d40bc2a1f4191b47265feabaf1786967f69212b73a9b417c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1477,13 +1501,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03daf8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xf10af8852f02c3b74119ad786027fcaa072a116fcb4ebd7caa48c0b4f81758f9" + "hash": "0x4fc1faaffbcbc5f4a28be918a33d42fa09c22c94dd01cbf5635aba346591b21d" }, "blocknumber": "1", "transactions": [ @@ -1506,7 +1530,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf10af8852f02c3b74119ad786027fcaa072a116fcb4ebd7caa48c0b4f81758f9", + "lastblockhash": "0x4fc1faaffbcbc5f4a28be918a33d42fa09c22c94dd01cbf5635aba346591b21d", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1531,9 +1555,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Shanghai-too_little_execution_gas-max_size_zeros-max_size_zeros_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_execution_gas-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1561,7 +1586,7 @@ }, "blocks": [ { - "rlp": "0xf9c273f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bc5bc1e365df7605bf263f9e1e3a6ca8becadbae9a400e6e1f53addb49083abba052581494a3b348882c143e8956fae790ca55cf2ea8cc3e5c8c745ae0fdf5060aa09156f026ff9eef6f12b588e6dc9e77770ba48b3cb0c0c1f32215d8de54ebf40ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc530c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a8303dc538080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a07830068eb64c7e4e217c08170f32e18ab881c5c96b9ae63df88d61871440be75a0423c7263dd29ad8170c411d066df9269845d8e0454e7a8949779da29f177f58cc0c0", + "rlp": "0xf9c275f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bc5bc1e365df7605bf263f9e1e3a6ca8becadbae9a400e6e1f53addb49083abba052581494a3b348882c143e8956fae790ca55cf2ea8cc3e5c8c745ae0fdf5060aa09156f026ff9eef6f12b588e6dc9e77770ba48b3cb0c0c1f32215d8de54ebf40ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc538203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a8303dc538080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a07830068eb64c7e4e217c08170f32e18ab881c5c96b9ae63df88d61871440be75a0423c7263dd29ad8170c411d066df9269845d8e0454e7a8949779da29f177f58cc0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1574,13 +1599,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dc53", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xa6569429def8f7a0d1ae246e85b3831c10279433dbc338989648b04a961543e5" + "hash": "0xcfdfbe800735f21ab29811a0fe0b6aaae27160d67c385bef27d8206a404712fc" }, "blocknumber": "1", "transactions": [ @@ -1603,7 +1628,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa6569429def8f7a0d1ae246e85b3831c10279433dbc338989648b04a961543e5", + "lastblockhash": "0xcfdfbe800735f21ab29811a0fe0b6aaae27160d67c385bef27d8206a404712fc", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1628,9 +1653,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Shanghai-too_little_execution_gas-max_size_ones-max_size_ones_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_execution_gas-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1658,7 +1684,7 @@ }, "blocks": [ { - "rlp": "0xf9c273f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d8cface5fce250fa044e69db02072c41cb317f4886295842c6286620fe70eaba04329f776e457bcaf7d5fd3732711b1da7da93a0c7ab0ae6a65f70003cea1774ea074200b9b62da0f7c790b47cdd36f042d2e3c86babd4711f187a1177e24afce8fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc30c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a830cdbc38080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a053f9ca27c49ccafb408c2a5a6996c6e5d42f83332a0d704ffe165b0d1c58ffeca026ec1be89fae2d251bfa3d9d37f96abd222d70f823ff3cb52b25974ed3e4dfeec0c0", + "rlp": "0xf9c275f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04d8cface5fce250fa044e69db02072c41cb317f4886295842c6286620fe70eaba04329f776e457bcaf7d5fd3732711b1da7da93a0c7ab0ae6a65f70003cea1774ea074200b9b62da0f7c790b47cdd36f042d2e3c86babd4711f187a1177e24afce8fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc38203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a830cdbc38080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a053f9ca27c49ccafb408c2a5a6996c6e5d42f83332a0d704ffe165b0d1c58ffeca026ec1be89fae2d251bfa3d9d37f96abd222d70f823ff3cb52b25974ed3e4dfeec0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1671,13 +1697,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0cdbc3", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xc4fdd1c4258b7ed891ab9dcf7e1f68675c9166895f13e8f5f711eea1582ceaf5" + "hash": "0x6579d6eb7257ed83617d6596fcc0930e65a403581e0e1a1df59fd55c5ef836a4" }, "blocknumber": "1", "transactions": [ @@ -1700,7 +1726,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xc4fdd1c4258b7ed891ab9dcf7e1f68675c9166895f13e8f5f711eea1582ceaf5", + "lastblockhash": "0x6579d6eb7257ed83617d6596fcc0930e65a403581e0e1a1df59fd55c5ef836a4", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1725,9 +1751,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Shanghai-too_little_execution_gas-32_bytes-32_bytes_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_execution_gas-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1755,7 +1782,7 @@ }, "blocks": [ { - "rlp": "0xf9028df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06f61ef9d1984e78d50b283bdb292f4ec27e3e886c71539834eddc29fcaaca16aa079f437d3958c00e04b491fab9da655fd06d4ed7556493a0f73ef892b6994f46da0dcda0490cfe40ce76be6d08a866c7b0b3b2cfbda7e950ef2f55d3faf090e18aab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0d50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86df86b800a82d0d58080a0610001600081600b8239f300000000000000000000000000000000000000000025a0b670a30b91b342e014cfa587bb7e60142c703e9a5836ef426148e0df836022f7a01e710a00d55661030bdba901132ce245f2e76a3dc99520ed1d37f2101b94ded6c0c0", + "rlp": "0xf9028ff9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06f61ef9d1984e78d50b283bdb292f4ec27e3e886c71539834eddc29fcaaca16aa079f437d3958c00e04b491fab9da655fd06d4ed7556493a0f73ef892b6994f46da0dcda0490cfe40ce76be6d08a866c7b0b3b2cfbda7e950ef2f55d3faf090e18aab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0d58203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86df86b800a82d0d58080a0610001600081600b8239f300000000000000000000000000000000000000000025a0b670a30b91b342e014cfa587bb7e60142c703e9a5836ef426148e0df836022f7a01e710a00d55661030bdba901132ce245f2e76a3dc99520ed1d37f2101b94ded6c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1768,13 +1795,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xd0d5", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x1c53c0d51b2ffafbccf5e8bb35da36bd3ee9838fe4ed1d3b62e6335d60d0453a" + "hash": "0x6c720502d3d47980a8ed80efe918f83038366684fd3a2a07412f5795bd26fd56" }, "blocknumber": "1", "transactions": [ @@ -1797,7 +1824,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x1c53c0d51b2ffafbccf5e8bb35da36bd3ee9838fe4ed1d3b62e6335d60d0453a", + "lastblockhash": "0x6c720502d3d47980a8ed80efe918f83038366684fd3a2a07412f5795bd26fd56", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1822,9 +1849,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Shanghai-too_little_execution_gas-33_bytes-33_bytes_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_execution_gas-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1852,7 +1880,7 @@ }, "blocks": [ { - "rlp": "0xf9028ef90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cb0c002db77a8957f75a1d24b94d73bd8b8d86bbd5450ad60fd469993efc5867a061ba103807c900d3ed1e15a4869acc7c1c1ef0edaee474ca9e43bad49c1dadaaa056e08e7a6a7ccf4f2f2163f4d7daf0d748bde77b80c9a0a0d3e684dc618f31fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0db0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86ef86c800a82d0db8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a022b6272bc4dfe55ce397c1cab0c2a27e7ea390d48acaa070c43e2d765140e1dfa07b4c101fe11664e17765acfbdf5943ff18baf0016b016c9cc7c7e7de5e62d9a3c0c0", + "rlp": "0xf90290f9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cb0c002db77a8957f75a1d24b94d73bd8b8d86bbd5450ad60fd469993efc5867a061ba103807c900d3ed1e15a4869acc7c1c1ef0edaee474ca9e43bad49c1dadaaa056e08e7a6a7ccf4f2f2163f4d7daf0d748bde77b80c9a0a0d3e684dc618f31fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0db8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86ef86c800a82d0db8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a022b6272bc4dfe55ce397c1cab0c2a27e7ea390d48acaa070c43e2d765140e1dfa07b4c101fe11664e17765acfbdf5943ff18baf0016b016c9cc7c7e7de5e62d9a3c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1865,13 +1893,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xd0db", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xc52340ecc22a1f35f69fc227f8e5825bbc1c6497d41d319865e1bcad8e8719b6" + "hash": "0xb99d263407adad8cf0d9234bc26270c94d3638bb2014725c1b67a7d4514f5ef4" }, "blocknumber": "1", "transactions": [ @@ -1894,7 +1922,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xc52340ecc22a1f35f69fc227f8e5825bbc1c6497d41d319865e1bcad8e8719b6", + "lastblockhash": "0xb99d263407adad8cf0d9234bc26270c94d3638bb2014725c1b67a7d4514f5ef4", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -1919,9 +1947,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Shanghai-too_little_execution_gas-49120_bytes-49120_bytes_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_execution_gas-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -1949,7 +1978,7 @@ }, "blocks": [ { - "rlp": "0xf9c253f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04fec2a7c38cfa5fa6704b736f87395c5a29186555547ecc03820496f858e0f65a08a443da3e5b3988f130162963ce8dbedc0e3e27b1cfff76ca9b5971ac36a95eaa01fb2faa21d22a1deffc65121b9873f6868101465a956eb47d2b3eebc78417787b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd10c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c031f9c02e800a8303dbd18080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a07be2f3b1d10d379e38d879a4fe7823acb7a8ed9f9d114808ee1c02996eef2b2ea015b0e64b2f57f822a1af517d876efd4a96954e3a4a6e74cacada880e5c5451edc0c0", + "rlp": "0xf9c255f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa04fec2a7c38cfa5fa6704b736f87395c5a29186555547ecc03820496f858e0f65a08a443da3e5b3988f130162963ce8dbedc0e3e27b1cfff76ca9b5971ac36a95eaa01fb2faa21d22a1deffc65121b9873f6868101465a956eb47d2b3eebc78417787b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd18203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c031f9c02e800a8303dbd18080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a07be2f3b1d10d379e38d879a4fe7823acb7a8ed9f9d114808ee1c02996eef2b2ea015b0e64b2f57f822a1af517d876efd4a96954e3a4a6e74cacada880e5c5451edc0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -1962,13 +1991,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dbd1", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xa739b5768cb17e0444e19e9d7eb5e9b364be8f27a53955d310588d1963e84f56" + "hash": "0xeb4e56e215ef70a9f487be4a19a9f9b755e74749e5e62e80b06645b4aa68afdb" }, "blocknumber": "1", "transactions": [ @@ -1991,7 +2020,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa739b5768cb17e0444e19e9d7eb5e9b364be8f27a53955d310588d1963e84f56", + "lastblockhash": "0xeb4e56e215ef70a9f487be4a19a9f9b755e74749e5e62e80b06645b4aa68afdb", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2016,9 +2045,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Shanghai-too_little_execution_gas-49121_bytes-49121_bytes_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-too_little_execution_gas-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2046,7 +2076,7 @@ }, "blocks": [ { - "rlp": "0xf9c254f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0503d04150832af4cf73c91783c8a00252c87fccc278bc4b3a38f57bce74b2d40a07bdc8ac20e7c7d7c58be9fec7e2016fccf50feed93c574d0e4fc9b5c561fdd4ba0bea0a684af9631e42c7e660ca236d75eb56c416a52fb09f78d2288d9bfe94918b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd70c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c032f9c02f800a8303dbd78080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0599451b46eff96c956fe4ce7d16b6030de373a45803dea32e83ae2e1ad17337ca03691fa0e0a40cac38c3807ffbd1ef7cee9bcd42840a3109e524829d4079f0210c0c0", + "rlp": "0xf9c256f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0503d04150832af4cf73c91783c8a00252c87fccc278bc4b3a38f57bce74b2d40a07bdc8ac20e7c7d7c58be9fec7e2016fccf50feed93c574d0e4fc9b5c561fdd4ba0bea0a684af9631e42c7e660ca236d75eb56c416a52fb09f78d2288d9bfe94918b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd78203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c032f9c02f800a8303dbd78080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0599451b46eff96c956fe4ce7d16b6030de373a45803dea32e83ae2e1ad17337ca03691fa0e0a40cac38c3807ffbd1ef7cee9bcd42840a3109e524829d4079f0210c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2059,13 +2089,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dbd7", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x75e7b1c1b6a08f4549986a760323e2a859770331be199f2a1e3d63b821d1b635" + "hash": "0xcd861debbbcb66f74ab95bbbaf850a6a3276fa5caa7909efcf1375bacef0fb60" }, "blocknumber": "1", "transactions": [ @@ -2088,7 +2118,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x75e7b1c1b6a08f4549986a760323e2a859770331be199f2a1e3d63b821d1b635", + "lastblockhash": "0xcd861debbbcb66f74ab95bbbaf850a6a3276fa5caa7909efcf1375bacef0fb60", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2113,9 +2143,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Shanghai-exact_execution_gas-max_size_zeros-max_size_zeros_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_execution_gas-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2143,7 +2174,7 @@ }, "blocks": [ { - "rlp": "0xf9c273f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0730b5921e1c6baafedb36baf0cd7c5dfb811971946423743f5de14c14b98e9aba03d84dff149104ab098db5f286be52de3084c263d24cfafb548593be10a0ab86da04ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc540c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a8303dc548080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0b2ad2aea30c189a8b76547a430ad4fcea20d4872d31c1f00160040a76943f826a0638523091a090f96c402c768dbaaa2e8e77628565e855332fd442688bc75043dc0c0", + "rlp": "0xf9c275f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0730b5921e1c6baafedb36baf0cd7c5dfb811971946423743f5de14c14b98e9aba03d84dff149104ab098db5f286be52de3084c263d24cfafb548593be10a0ab86da04ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc548203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a8303dc548080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0b2ad2aea30c189a8b76547a430ad4fcea20d4872d31c1f00160040a76943f826a0638523091a090f96c402c768dbaaa2e8e77628565e855332fd442688bc75043dc0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2156,13 +2187,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dc54", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xb9ceeb7df393dff59faef3adb911e7ea5c0af9f666869ede9cb306b0f85cd888" + "hash": "0x1463245c6eeb1037f6a7eb17809477b4aebe68f96381c1dee2a7f30d30df1a43" }, "blocknumber": "1", "transactions": [ @@ -2185,7 +2216,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xb9ceeb7df393dff59faef3adb911e7ea5c0af9f666869ede9cb306b0f85cd888", + "lastblockhash": "0x1463245c6eeb1037f6a7eb17809477b4aebe68f96381c1dee2a7f30d30df1a43", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2216,9 +2247,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Shanghai-exact_execution_gas-max_size_ones-max_size_ones_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_execution_gas-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2246,7 +2278,7 @@ }, "blocks": [ { - "rlp": "0xf9c273f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03a4bdee58e15bc72c9695c6f9fd4bb89dcf1d8caf3ea2296bf86c8949378cc4fa0950dba678be86b57bd552aac0314fa055439d7fae1520261fe5c3adb60ee8641a052366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a830cdbc48080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a076d4e3cdf2e03e61f7011cd7adfd9bd14bc1d0e9530f3b2d0574b8506f69f144a04ccab809aaa9856a6d53f3a580bb1747d9cff29ece03dbc831a1ea21767d4595c0c0", + "rlp": "0xf9c275f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03a4bdee58e15bc72c9695c6f9fd4bb89dcf1d8caf3ea2296bf86c8949378cc4fa0950dba678be86b57bd552aac0314fa055439d7fae1520261fe5c3adb60ee8641a052366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c051f9c04e800a830cdbc48080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a076d4e3cdf2e03e61f7011cd7adfd9bd14bc1d0e9530f3b2d0574b8506f69f144a04ccab809aaa9856a6d53f3a580bb1747d9cff29ece03dbc831a1ea21767d4595c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2259,13 +2291,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0cdbc4", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xab1277c9c76bc9b6895eae6f0efce728838462c60e8b2ef9f792fa880aa291bc" + "hash": "0xf72eb5ffd3ff72d7c893aa4d0b86c9d8ab5f9873f9e405b79a82cad73ed26ee5" }, "blocknumber": "1", "transactions": [ @@ -2288,7 +2320,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xab1277c9c76bc9b6895eae6f0efce728838462c60e8b2ef9f792fa880aa291bc", + "lastblockhash": "0xf72eb5ffd3ff72d7c893aa4d0b86c9d8ab5f9873f9e405b79a82cad73ed26ee5", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2319,9 +2351,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Shanghai-exact_execution_gas-empty-empty_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_execution_gas-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2349,7 +2382,7 @@ }, "blocks": [ { - "rlp": "0xf9026df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06732c29ae2bd388c90436c4b4a56af04ab85c1cdffa2d3c9a776f50d33233e94a0dfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35ba065c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0880808026a093da0e096b13f6889a36880987f4cfb0fdfd4d14c48beab2c3efacdf52ecfef9a008b548262f4ac8d6830743898f193c1b4e28b8f83ca9603e023684ba8d581381c0c0", + "rlp": "0xf9026ff9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06732c29ae2bd388c90436c4b4a56af04ab85c1cdffa2d3c9a776f50d33233e94a0dfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35ba065c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0880808026a093da0e096b13f6889a36880987f4cfb0fdfd4d14c48beab2c3efacdf52ecfef9a008b548262f4ac8d6830743898f193c1b4e28b8f83ca9603e023684ba8d581381c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2362,13 +2395,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcf08", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x3455b77954e440b55a171c5067ecd88b6bda9b3248f5adcbca6bb1986329fe8d" + "hash": "0x5a2b32079f1cc4197643718650e76fa293c081796f131d52c137c6696f3aebe2" }, "blocknumber": "1", "transactions": [ @@ -2391,7 +2424,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3455b77954e440b55a171c5067ecd88b6bda9b3248f5adcbca6bb1986329fe8d", + "lastblockhash": "0x5a2b32079f1cc4197643718650e76fa293c081796f131d52c137c6696f3aebe2", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2422,9 +2455,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Shanghai-exact_execution_gas-single_byte-single_byte_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_execution_gas-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2452,7 +2486,7 @@ }, "blocks": [ { - "rlp": "0xf9026df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00767b669a4d3bb6ff797d04a94298625d361b0ee3a21f7987a8bdef73b36a123a0f06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cffa0d5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf0e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0e80800026a0e207ed17886e3c97723c5adce84e7761740dde41793acb56542559ea9d506e52a06253c94f447263480622fed4a725ad82847bffdf06840ac97036ff1d6f76ec09c0c0", + "rlp": "0xf9026ff9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00767b669a4d3bb6ff797d04a94298625d361b0ee3a21f7987a8bdef73b36a123a0f06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cffa0d5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf0e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f84df84b800a82cf0e80800026a0e207ed17886e3c97723c5adce84e7761740dde41793acb56542559ea9d506e52a06253c94f447263480622fed4a725ad82847bffdf06840ac97036ff1d6f76ec09c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2465,13 +2499,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcf0e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x4fccd26d4b911f8d389c42e5fe75a8b187081c2bb9ff20f140ac3c9539722847" + "hash": "0x1220d3ee13f0170f363f6d9c7a204f4efff4536ec3ec5e1b1ac6fb69b9a5630d" }, "blocknumber": "1", "transactions": [ @@ -2494,7 +2528,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x4fccd26d4b911f8d389c42e5fe75a8b187081c2bb9ff20f140ac3c9539722847", + "lastblockhash": "0x1220d3ee13f0170f363f6d9c7a204f4efff4536ec3ec5e1b1ac6fb69b9a5630d", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2525,9 +2559,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Shanghai-exact_execution_gas-32_bytes-32_bytes_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_execution_gas-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2555,7 +2590,7 @@ }, "blocks": [ { - "rlp": "0xf9028df90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03bdbc065bc2eff3cfbe5c79853c5a129972563a921aadc15a647a48c3e07d872a015e50c98ddba357378e223eb58c6d3ccc79aacc4898a867f6021b0f425e166f7a008889f1b1de7a78a4a79e1af77d75bc22a0b2f8571c0fabdf9e54ea2cc54612db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0d60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86df86b800a82d0d68080a0610001600081600b8239f300000000000000000000000000000000000000000026a0fc4be100591165da16d05a0ff5ae4a2a4edc04468c721a9b88f377651d0cc90ea01a55b827b0b61ecb8746e1a5c384d8646b283245d4fc63331b5f6d80b66821f8c0c0", + "rlp": "0xf9028ff9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03bdbc065bc2eff3cfbe5c79853c5a129972563a921aadc15a647a48c3e07d872a015e50c98ddba357378e223eb58c6d3ccc79aacc4898a867f6021b0f425e166f7a008889f1b1de7a78a4a79e1af77d75bc22a0b2f8571c0fabdf9e54ea2cc54612db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0d68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86df86b800a82d0d68080a0610001600081600b8239f300000000000000000000000000000000000000000026a0fc4be100591165da16d05a0ff5ae4a2a4edc04468c721a9b88f377651d0cc90ea01a55b827b0b61ecb8746e1a5c384d8646b283245d4fc63331b5f6d80b66821f8c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2568,13 +2603,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xd0d6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x68107838a0c593ebd4dcec792ccd2ca1a4db05aa42144384c4b2f0f2f0c990ef" + "hash": "0x2313b6ebc3d164d19fb9ae015dbbb1bee9e80a9987ec15c8af0cf745b25f4fbd" }, "blocknumber": "1", "transactions": [ @@ -2597,7 +2632,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x68107838a0c593ebd4dcec792ccd2ca1a4db05aa42144384c4b2f0f2f0c990ef", + "lastblockhash": "0x2313b6ebc3d164d19fb9ae015dbbb1bee9e80a9987ec15c8af0cf745b25f4fbd", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2628,9 +2663,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Shanghai-exact_execution_gas-33_bytes-33_bytes_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_execution_gas-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2658,7 +2694,7 @@ }, "blocks": [ { - "rlp": "0xf9028ef90219a0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e217c846cd9de9c44d28ba294a27f88f546fbf4fc9b82de597feaf00610f69dfa030612f0c5b39402d44c6de9a2d31559c5de1a50abd6b73fb1af73c9ce8df6ed1a0e8bd336ba08054fa93937979e829cf794602a3ea9c0b84d8d159794083fe6e8db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0dc0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86ef86c800a82d0dc8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a00d713219df4800d4b7add508f52b224688cc0e8c804578d8496773af87c756d7a07668a990423258d782b9faa74048847dca02be10ca35826e67ae05e04cca1435c0c0", + "rlp": "0xf90290f9021ba0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e217c846cd9de9c44d28ba294a27f88f546fbf4fc9b82de597feaf00610f69dfa030612f0c5b39402d44c6de9a2d31559c5de1a50abd6b73fb1af73c9ce8df6ed1a0e8bd336ba08054fa93937979e829cf794602a3ea9c0b84d8d159794083fe6e8db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0dc8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f86ef86c800a82d0dc8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a00d713219df4800d4b7add508f52b224688cc0e8c804578d8496773af87c756d7a07668a990423258d782b9faa74048847dca02be10ca35826e67ae05e04cca1435c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2671,13 +2707,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xd0dc", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x94f8b84f3625de94ea27e5f5a8de7c717bfeb1fe7498711e3a33cf29f06ac338" + "hash": "0xf797ca60203c1e148a53e73aeb12364c579474912fbd44ed364457882d004b31" }, "blocknumber": "1", "transactions": [ @@ -2700,7 +2736,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x94f8b84f3625de94ea27e5f5a8de7c717bfeb1fe7498711e3a33cf29f06ac338", + "lastblockhash": "0xf797ca60203c1e148a53e73aeb12364c579474912fbd44ed364457882d004b31", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2731,9 +2767,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Shanghai-exact_execution_gas-49120_bytes-49120_bytes_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_execution_gas-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2761,7 +2798,7 @@ }, "blocks": [ { - "rlp": "0xf9c253f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa033b4e828055cd746318a1f1509ce9459373c773a363fb28b566f1819971d954ca0e26daab3cf7dc84cac6d0feb2aa5fcdc8fda2b42b9244ac25c80f84a41777e45a0e8b038ffe3279f771c7ccc9cc32fe846d878b81fcb4c4752e2d8d28f9b45a1b1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c031f9c02e800a8303dbd28080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a04db160f43cc7c548e7ce2739068e00dd0c00fca7dc019ab73ac81e17234ad35aa04ecba0f7d10e6c84f279fef899ffa44245a44a43ea5304b4951ce7635fa827f2c0c0", + "rlp": "0xf9c255f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa033b4e828055cd746318a1f1509ce9459373c773a363fb28b566f1819971d954ca0e26daab3cf7dc84cac6d0feb2aa5fcdc8fda2b42b9244ac25c80f84a41777e45a0e8b038ffe3279f771c7ccc9cc32fe846d878b81fcb4c4752e2d8d28f9b45a1b1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c031f9c02e800a8303dbd28080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a04db160f43cc7c548e7ce2739068e00dd0c00fca7dc019ab73ac81e17234ad35aa04ecba0f7d10e6c84f279fef899ffa44245a44a43ea5304b4951ce7635fa827f2c0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2774,13 +2811,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dbd2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0x67557373952f6c0157280b5d6f4d5a540db2c91f8dd18a9e878c4067c0af1419" + "hash": "0xc2e072f2121dbba997db6e966edefe1d1abcb16638acb4500b0df0b92aff92c3" }, "blocknumber": "1", "transactions": [ @@ -2803,7 +2840,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x67557373952f6c0157280b5d6f4d5a540db2c91f8dd18a9e878c4067c0af1419", + "lastblockhash": "0xc2e072f2121dbba997db6e966edefe1d1abcb16638acb4500b0df0b92aff92c3", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2834,9 +2871,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Shanghai-exact_execution_gas-49121_bytes-49121_bytes_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Shanghai-blockchain_test-exact_execution_gas-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2864,7 +2902,7 @@ }, "blocks": [ { - "rlp": "0xf9c254f9021aa0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa092ef6a5d379aa7fd20e88f1df5d63b6240d25fa25ae78dba1f5bbe71787c6bd4a03433ade4bcb44bd9c960acdeb533d9e88eef9754d03bb015e0b2fdbe85f04ac8a061344f6614b2fbf4048ababd1164776cc052d9428a8d3d8f668db93e6c6512b7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c032f9c02f800a8303dbd88080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0ea6f4054bf02b17733cdadecce0912e4acf8b99e39439c542b728f4de3fc8f44a0115dc39bbb17b16b7559992c939b62089fa8be15e424092e7210b0faa6d2781bc0c0", + "rlp": "0xf9c256f9021ca0ea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa092ef6a5d379aa7fd20e88f1df5d63b6240d25fa25ae78dba1f5bbe71787c6bd4a03433ade4bcb44bd9c960acdeb533d9e88eef9754d03bb015e0b2fdbe85f04ac8a061344f6614b2fbf4048ababd1164776cc052d9428a8d3d8f668db93e6c6512b7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f9c032f9c02f800a8303dbd88080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0ea6f4054bf02b17733cdadecce0912e4acf8b99e39439c542b728f4de3fc8f44a0115dc39bbb17b16b7559992c939b62089fa8be15e424092e7210b0faa6d2781bc0c0", "blockHeader": { "parentHash": "0xea2d7e0192d890c222f0302d972a02db0bf0c6d08257d73aa1210d08d24f30c3", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", @@ -2877,13 +2915,13 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dbd8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "hash": "0xff32b446a7e24ca19c4d12ed9b4addb6b51d8abaab14d6b4b46312f0429f2d7e" + "hash": "0x93c4ffeeb24f11d8be236fbcf4caeb81ef2cbde13f4b070bd0e2fa0c52974bdd" }, "blocknumber": "1", "transactions": [ @@ -2906,7 +2944,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xff32b446a7e24ca19c4d12ed9b4addb6b51d8abaab14d6b4b46312f0429f2d7e", + "lastblockhash": "0x93c4ffeeb24f11d8be236fbcf4caeb81ef2cbde13f4b070bd0e2fa0c52974bdd", "pre": { "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b": { "nonce": "0x00", @@ -2937,9 +2975,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-too_little_intrinsic_gas-max_size_zeros-max_size_zeros_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_intrinsic_gas-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -2970,23 +3009,23 @@ }, "blocks": [ { - "rlp": "0xf9c293f9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a8303db738080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a07a12ad14630278748a00c21e70949f53181651993e421cbb42af34f5dfc05721a040b4dc45012128c5ef6fe1089d62077a02a2c5e61e26a2f135254bc63e9299e3c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9c295f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa050498e8647ee11ebce65cba95ca2a7385f40721c970e556083c0189a04280c09a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a8303db738080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a07a12ad14630278748a00c21e70949f53181651993e421cbb42af34f5dfc05721a040b4dc45012128c5ef6fe1089d62077a02a2c5e61e26a2f135254bc63e9299e3c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0x50498e8647ee11ebce65cba95ca2a7385f40721c970e556083c0189a04280c09", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -2994,8 +3033,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0x36e2bb576873ce85e05de889a91cab7fa8eb963cb63988f95c968b05588f6b98" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3048,9 +3088,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-too_little_intrinsic_gas-max_size_ones-max_size_ones_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_intrinsic_gas-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3081,23 +3122,23 @@ }, "blocks": [ { - "rlp": "0xf9c293f9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a830cdae38080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a02e78f86fbae31c01889516a4d1f7f28cc63df394ecc478e8a648b5e47028425fa00fda47a674b50ebb29d0a6cf09c691ed8e70beebc95ea0673dcf2bee3928b87cc0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9c295f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa0667ec0f960678af0558647cb636d06b3c06f113e38a2fdac531e18f995d0d7dfa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a830cdae38080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a02e78f86fbae31c01889516a4d1f7f28cc63df394ecc478e8a648b5e47028425fa00fda47a674b50ebb29d0a6cf09c691ed8e70beebc95ea0673dcf2bee3928b87cc0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0x667ec0f960678af0558647cb636d06b3c06f113e38a2fdac531e18f995d0d7df", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3105,8 +3146,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0xc24309fb476e1ed37d2603d088ae6d575bc9ee39514626a903c2fa058bf1650d" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3159,9 +3201,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-too_little_intrinsic_gas-empty-empty_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_intrinsic_gas-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3192,23 +3235,23 @@ }, "blocks": [ { - "rlp": "0xf9028ef9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0780808025a00372ba5e45d0a0e636f7e32ffca16f97a2f3e4e930b6584b7b114ab3aa191b4fa04afdfcd2bc179e25c7aa74cb991a08f0ae6c01541a36f700be25c6f4c39bc098c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf90290f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa060f0ec438cccd9d1035d1e12fa0523e7618a2132837cd117aa0e321fe12acce8a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0780808025a00372ba5e45d0a0e636f7e32ffca16f97a2f3e4e930b6584b7b114ab3aa191b4fa04afdfcd2bc179e25c7aa74cb991a08f0ae6c01541a36f700be25c6f4c39bc098c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0x60f0ec438cccd9d1035d1e12fa0523e7618a2132837cd117aa0e321fe12acce8", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3216,8 +3259,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0x576774239a72859ad95e3ef4fbc46b64ad5b569fb7a2477b1957044b3c1b7f70" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3270,9 +3314,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-too_little_intrinsic_gas-single_byte-single_byte_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_intrinsic_gas-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3303,23 +3348,23 @@ }, "blocks": [ { - "rlp": "0xf9028ef9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0d80800025a082244b29c33f38cc89873fc90d5d4464ba0c1120fa7b666d68dd6ba855c71006a043f9021be8aa3a95d60b888d91caf5ef3400992f45caec6e990db3a01cb985e3c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf90290f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa0aec39c5258bd73514334e93bbae1206c4e8c41acec52c8c34cf79f7ca9983745a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0d80800025a082244b29c33f38cc89873fc90d5d4464ba0c1120fa7b666d68dd6ba855c71006a043f9021be8aa3a95d60b888d91caf5ef3400992f45caec6e990db3a01cb985e3c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0xaec39c5258bd73514334e93bbae1206c4e8c41acec52c8c34cf79f7ca9983745", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3327,8 +3372,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0x1be365f12a640d40a58c4b259d8a801ff0d0435bba034205b234c6c0eb16ae1a" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3381,9 +3427,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-too_little_intrinsic_gas-32_bytes-32_bytes_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_intrinsic_gas-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3414,23 +3461,23 @@ }, "blocks": [ { - "rlp": "0xf902aef9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86df86b800a82cff58080a0610001600081600b8239f300000000000000000000000000000000000000000025a07dae455766b7111996f88d8beebade630397f76dcf61244a0a34bc1765f567a8a01570635581d43b7e5070f0e76ccb8368612b0831d78cd124ac886f4203abe4afc0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf902b0f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa020a55d37611609c712fb5893f58723f9867b814d57085e89c57d2e2efcd75620a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86df86b800a82cff58080a0610001600081600b8239f300000000000000000000000000000000000000000025a07dae455766b7111996f88d8beebade630397f76dcf61244a0a34bc1765f567a8a01570635581d43b7e5070f0e76ccb8368612b0831d78cd124ac886f4203abe4afc0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0x20a55d37611609c712fb5893f58723f9867b814d57085e89c57d2e2efcd75620", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3438,8 +3485,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0xe31cd135659b0e6fb1c38f51005f91bb7abc1cd0e1c4b2da8d63029cfbeed035" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3492,9 +3540,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-too_little_intrinsic_gas-33_bytes-33_bytes_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_intrinsic_gas-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3525,23 +3574,23 @@ }, "blocks": [ { - "rlp": "0xf902aff9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86ef86c800a82cffb8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a010f3533be24d3feaf9ccbb3efa340636d081d900bdf314a4db35e3e5189fe781a03d9ea618e5b4edd41f503e20264feef4420d3a0c7e731046fab9e1f85d2c15a0c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf902b1f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa0400b1b76f23833832e728c1df4198bc4ea1d2be65d5f317b90543341810461cba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86ef86c800a82cffb8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a010f3533be24d3feaf9ccbb3efa340636d081d900bdf314a4db35e3e5189fe781a03d9ea618e5b4edd41f503e20264feef4420d3a0c7e731046fab9e1f85d2c15a0c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0x400b1b76f23833832e728c1df4198bc4ea1d2be65d5f317b90543341810461cb", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3549,8 +3598,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0xaceac20c2cf6497175ce3aec90d3f6abaed9aeb6d9aa8bb60c36bb24a20353f5" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3603,9 +3653,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-too_little_intrinsic_gas-49120_bytes-49120_bytes_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_intrinsic_gas-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3636,23 +3687,23 @@ }, "blocks": [ { - "rlp": "0xf9c273f9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c031f9c02e800a8303daf18080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a03bedf910a8ed4657737f9a44ec70b3fe204b62c6fb0f9a6987bf20a86add0c24a033ce8e62ec42e5474ecdb6491c2774cb41107ff713a7889eb8fa91689ecbdcbcc0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9c275f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa05915f9aeb3a2ac64e8ae35e2922893279e0eaf4872b91fff94808338e838842ba056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c031f9c02e800a8303daf18080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a03bedf910a8ed4657737f9a44ec70b3fe204b62c6fb0f9a6987bf20a86add0c24a033ce8e62ec42e5474ecdb6491c2774cb41107ff713a7889eb8fa91689ecbdcbcc0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0x5915f9aeb3a2ac64e8ae35e2922893279e0eaf4872b91fff94808338e838842b", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3660,8 +3711,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0x80512d4dbfb4050d9051314e30f359b4fa3bcbb0d2e48664ce652ae303afb5e4" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3714,9 +3766,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-too_little_intrinsic_gas-49121_bytes-49121_bytes_too_little_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_intrinsic_gas-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3747,23 +3800,23 @@ }, "blocks": [ { - "rlp": "0xf9c274f9023aa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c032f9c02f800a8303daf78080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0dadbbb823c5f563f9764ec9b38285e63dd03bca4922496cfdcc3e803cf730b0ca03c48dc30f97c18f7e24c442144568fd2def2611a18aca47334d8934d44bf7742c0c0", - "expectException": "intrinsic gas too low", + "rlp": "0xf9c276f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdfa01d19ef255f90578f75f08c04269ff46f67f4977dae5c3e37588a97c4d2370753a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000808203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c032f9c02f800a8303daf78080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0dadbbb823c5f563f9764ec9b38285e63dd03bca4922496cfdcc3e803cf730b0ca03c48dc30f97c18f7e24c442144568fd2def2611a18aca47334d8934d44bf7742c0c0", + "expectException": "TransactionException.INTRINSIC_GAS_TOO_LOW", "rlp_decoded": { "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x560f6bb07abf7cdcb77f50ce126890e00d89fd383e2b795c416a4ef0a02aff7e", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5e6ed91d59fbeb4ac9145fbf1a2e54bcb0028963d863234cc766523b3ea1bdf", + "transactionsTrie": "0x1d19ef255f90578f75f08c04269ff46f67f4977dae5c3e37588a97c4d2370753", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x00", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3771,8 +3824,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x22aab18e59439568ed0e4b0fdc155c94d763a101236be988d4cec31fdbedc359" + "hash": "0x72ed5a2e66e2b80276b799f453358e3bdacc5bb63ff15a42a02801906e2f5276" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -3825,9 +3879,10 @@ }, "sealEngine": "NoProof" }, - "038-fork=Cancun-exact_intrinsic_gas-max_size_zeros-max_size_zeros_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_intrinsic_gas-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3858,12 +3913,12 @@ }, "blocks": [ { - "rlp": "0xf9c296f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06a0262f2471aeeb571557b652137358570fccd035b48210f760b482e1040e79ca01169104559185d448ec9bc60e7714aa46ee068ff74c7b54a23351c384947268ba05f4c415ae56936421e7f5fd9aa6ea10ff5ca9e37f1cb0651eea3b9fbb544c4cfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303db740c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a8303db748080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a05880964f0c753d5f7ef82efe525190dd387372ae45606dbf0cc8a173468fee17a049449c623d2b061bd223f019008c4345665f7f24fb5a75e074dbccbc08829cf2c0c0", + "rlp": "0xf9c298f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01bf840bbb39f45f469054c9ddf113f188f78ce1cee1dd25abbf66e0a6bd24f7ba01169104559185d448ec9bc60e7714aa46ee068ff74c7b54a23351c384947268ba05f4c415ae56936421e7f5fd9aa6ea10ff5ca9e37f1cb0651eea3b9fbb544c4cfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303db748203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a8303db748080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a05880964f0c753d5f7ef82efe525190dd387372ae45606dbf0cc8a173468fee17a049449c623d2b061bd223f019008c4345665f7f24fb5a75e074dbccbc08829cf2c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6a0262f2471aeeb571557b652137358570fccd035b48210f760b482e1040e79c", + "stateRoot": "0x1bf840bbb39f45f469054c9ddf113f188f78ce1cee1dd25abbf66e0a6bd24f7b", "transactionsTrie": "0x1169104559185d448ec9bc60e7714aa46ee068ff74c7b54a23351c384947268b", "receiptTrie": "0x5f4c415ae56936421e7f5fd9aa6ea10ff5ca9e37f1cb0651eea3b9fbb544c4cf", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3871,8 +3926,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03db74", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3880,7 +3935,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x57b2aef8db95614e0644ca039462fcf4e2eaf41811b58edc86ffb30e12cf79b4" + "hash": "0x0d8142e00228b88ae28815c2dcdf9823b553779f255b073479d7fd0cb33b7877" }, "blocknumber": "1", "transactions": [ @@ -3903,7 +3958,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x57b2aef8db95614e0644ca039462fcf4e2eaf41811b58edc86ffb30e12cf79b4", + "lastblockhash": "0x0d8142e00228b88ae28815c2dcdf9823b553779f255b073479d7fd0cb33b7877", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -3924,7 +3979,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -3942,9 +3997,10 @@ }, "sealEngine": "NoProof" }, - "039-fork=Cancun-exact_intrinsic_gas-max_size_ones-max_size_ones_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_intrinsic_gas-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -3975,12 +4031,12 @@ }, "blocks": [ { - "rlp": "0xf9c296f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa02b330cf83b57ce905bde7f7e5069587c40dcbb1dccaa92b431e1c35cd8ecfa78a0fa7ea18daabcfa358d0aa8852f52b355306ac02a4b06c494aad3bf314f212816a0fc526fb664585777f263a147be0acf017497a199d8fcd568e748ab659fbd5616b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdae40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a830cdae48080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a0594853f9645d0eebeffdd580697fd120e99dd6d1d51ced5bb91c6d28784ee66da01776d13cf1925553135a8c735339ca52ad044141f6d15c3755dfc4a2597eff80c0c0", + "rlp": "0xf9c298f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0685382c8bfff9a3dee2084bd93f992435f73627280623ad1dc1c6f0e15e909c8a0fa7ea18daabcfa358d0aa8852f52b355306ac02a4b06c494aad3bf314f212816a0fc526fb664585777f263a147be0acf017497a199d8fcd568e748ab659fbd5616b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdae48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a830cdae48080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a0594853f9645d0eebeffdd580697fd120e99dd6d1d51ced5bb91c6d28784ee66da01776d13cf1925553135a8c735339ca52ad044141f6d15c3755dfc4a2597eff80c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x2b330cf83b57ce905bde7f7e5069587c40dcbb1dccaa92b431e1c35cd8ecfa78", + "stateRoot": "0x685382c8bfff9a3dee2084bd93f992435f73627280623ad1dc1c6f0e15e909c8", "transactionsTrie": "0xfa7ea18daabcfa358d0aa8852f52b355306ac02a4b06c494aad3bf314f212816", "receiptTrie": "0xfc526fb664585777f263a147be0acf017497a199d8fcd568e748ab659fbd5616", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -3988,8 +4044,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0cdae4", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -3997,7 +4053,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6a628b3cd9022ba6199df8edb4a6e66ecdd0837c88a8a1718e58f382c7ff3df5" + "hash": "0x75ad9b8e1e1e6e691f979c91af73acd58fa202b8711f365b7b20aead944d1251" }, "blocknumber": "1", "transactions": [ @@ -4020,7 +4076,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6a628b3cd9022ba6199df8edb4a6e66ecdd0837c88a8a1718e58f382c7ff3df5", + "lastblockhash": "0x75ad9b8e1e1e6e691f979c91af73acd58fa202b8711f365b7b20aead944d1251", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4041,7 +4097,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -4059,9 +4115,10 @@ }, "sealEngine": "NoProof" }, - "040-fork=Cancun-exact_intrinsic_gas-empty-empty_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_intrinsic_gas-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4092,12 +4149,12 @@ }, "blocks": [ { - "rlp": "0xf90290f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa013e977243b5ea0b90b2bec0b29635ca5052232f7411a512fb31722b24ace61e5a0dfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35ba065c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0880808026a093da0e096b13f6889a36880987f4cfb0fdfd4d14c48beab2c3efacdf52ecfef9a008b548262f4ac8d6830743898f193c1b4e28b8f83ca9603e023684ba8d581381c0c0", + "rlp": "0xf90292f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01befb6c6b4efa8900f8fb6c7ecb6969db06185796a884c30f46d87770c7014f7a0dfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35ba065c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0880808026a093da0e096b13f6889a36880987f4cfb0fdfd4d14c48beab2c3efacdf52ecfef9a008b548262f4ac8d6830743898f193c1b4e28b8f83ca9603e023684ba8d581381c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x13e977243b5ea0b90b2bec0b29635ca5052232f7411a512fb31722b24ace61e5", + "stateRoot": "0x1befb6c6b4efa8900f8fb6c7ecb6969db06185796a884c30f46d87770c7014f7", "transactionsTrie": "0xdfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35b", "receiptTrie": "0x65c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bf", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4105,8 +4162,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcf08", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4114,7 +4171,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3156832bd592328b10a309747ed680a3a693caf3340a970ecbc68e07e25be0f4" + "hash": "0xdad38353c510170dbabc7ba97b3a5870b7f6f49a2621de61889f69f551fa9de4" }, "blocknumber": "1", "transactions": [ @@ -4137,7 +4194,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3156832bd592328b10a309747ed680a3a693caf3340a970ecbc68e07e25be0f4", + "lastblockhash": "0xdad38353c510170dbabc7ba97b3a5870b7f6f49a2621de61889f69f551fa9de4", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4158,7 +4215,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -4182,9 +4239,10 @@ }, "sealEngine": "NoProof" }, - "041-fork=Cancun-exact_intrinsic_gas-single_byte-single_byte_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_intrinsic_gas-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4215,12 +4273,12 @@ }, "blocks": [ { - "rlp": "0xf90290f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03b03b51554c6bea58d51badaee18a78107d65356ba1eaf367e94b9cf885393d6a0f06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cffa0d5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf0e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0e80800026a0e207ed17886e3c97723c5adce84e7761740dde41793acb56542559ea9d506e52a06253c94f447263480622fed4a725ad82847bffdf06840ac97036ff1d6f76ec09c0c0", + "rlp": "0xf90292f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0486643495892e1d70d5b68838bafd4cfa81f0893d5b2f6d46608328d241ed281a0f06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cffa0d5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf0e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0e80800026a0e207ed17886e3c97723c5adce84e7761740dde41793acb56542559ea9d506e52a06253c94f447263480622fed4a725ad82847bffdf06840ac97036ff1d6f76ec09c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x3b03b51554c6bea58d51badaee18a78107d65356ba1eaf367e94b9cf885393d6", + "stateRoot": "0x486643495892e1d70d5b68838bafd4cfa81f0893d5b2f6d46608328d241ed281", "transactionsTrie": "0xf06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cff", "receiptTrie": "0xd5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4228,8 +4286,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcf0e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4237,7 +4295,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6d1c9a6ab12b634f03c4347ef4e00647230c78f5eba7c403da5fa5932c5a9454" + "hash": "0x4271c435c5251cac6206f2ca91ca04b26ff235863f0b52ae9ff4649c97ce3570" }, "blocknumber": "1", "transactions": [ @@ -4260,7 +4318,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6d1c9a6ab12b634f03c4347ef4e00647230c78f5eba7c403da5fa5932c5a9454", + "lastblockhash": "0x4271c435c5251cac6206f2ca91ca04b26ff235863f0b52ae9ff4649c97ce3570", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4281,7 +4339,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -4305,9 +4363,10 @@ }, "sealEngine": "NoProof" }, - "042-fork=Cancun-exact_intrinsic_gas-32_bytes-32_bytes_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_intrinsic_gas-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4338,12 +4397,12 @@ }, "blocks": [ { - "rlp": "0xf902b0f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa06b4dc19bece59d48a7c971e61b30720786784a6fd0bd4550ec5021dae020270da028eda3390def1964896164363ad356c91b4f522f1b88e820ceb872ebc44e1a1fa0a085ede337af77752cc632bbfaa3a462e57d95822115693ec520216e89a9d9ceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cff60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86df86b800a82cff68080a0610001600081600b8239f300000000000000000000000000000000000000000026a0ac175c75ddb29002fd5a914510cddc332b04054bb3ab76c4d0574c6bc2f8bf73a03bb84e9e93d495adbcbb33bf7e9592d88b69d86b05b18b8b96df732ce19cdd66c0c0", + "rlp": "0xf902b2f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e719529783095eddd986a1600946002868a41a7691b6ae4fd547817de164f458a028eda3390def1964896164363ad356c91b4f522f1b88e820ceb872ebc44e1a1fa0a085ede337af77752cc632bbfaa3a462e57d95822115693ec520216e89a9d9ceb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cff68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86df86b800a82cff68080a0610001600081600b8239f300000000000000000000000000000000000000000026a0ac175c75ddb29002fd5a914510cddc332b04054bb3ab76c4d0574c6bc2f8bf73a03bb84e9e93d495adbcbb33bf7e9592d88b69d86b05b18b8b96df732ce19cdd66c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x6b4dc19bece59d48a7c971e61b30720786784a6fd0bd4550ec5021dae020270d", + "stateRoot": "0xe719529783095eddd986a1600946002868a41a7691b6ae4fd547817de164f458", "transactionsTrie": "0x28eda3390def1964896164363ad356c91b4f522f1b88e820ceb872ebc44e1a1f", "receiptTrie": "0xa085ede337af77752cc632bbfaa3a462e57d95822115693ec520216e89a9d9ce", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4351,8 +4410,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcff6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4360,7 +4419,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x2e78eee7c84256e1c03631453b86b5f2a1ef8f64499ebb78ce9cb04ea132d7c9" + "hash": "0xbef8fc95e8501263ce11005b465d6ec3683a0feac0990f7ea569b668381ede7f" }, "blocknumber": "1", "transactions": [ @@ -4383,7 +4442,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x2e78eee7c84256e1c03631453b86b5f2a1ef8f64499ebb78ce9cb04ea132d7c9", + "lastblockhash": "0xbef8fc95e8501263ce11005b465d6ec3683a0feac0990f7ea569b668381ede7f", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4404,7 +4463,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -4422,9 +4481,10 @@ }, "sealEngine": "NoProof" }, - "043-fork=Cancun-exact_intrinsic_gas-33_bytes-33_bytes_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_intrinsic_gas-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4455,12 +4515,12 @@ }, "blocks": [ { - "rlp": "0xf902b1f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a5d99ac701bed984d8a502b79a7b48f5e9fe4c341c377a297e95200957106b98a0ea6453e840cb2df94975777d06822589242c5603703444dadc5b68db455966dda0eb618104c393169290c6a9b867c291c09412cb2c5b5076d5b2c0d5dfb35c6977b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cffc0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86ef86c800a82cffc8080a1610001600081600b8239f30000000000000000000000000000000000000000000025a0e7faec7d55dd768fd7ebb9776df2aa44931f80db25e7d09e725006899fe01127a002eeb320299bf3b1887df79375a35d57b030a8ee30e44c089cef317bdabf008fc0c0", + "rlp": "0xf902b3f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b9932bea5d8ce5f456ffb73c821d1fa6a09e23462128b1836cd84b5c7585c6f2a0ea6453e840cb2df94975777d06822589242c5603703444dadc5b68db455966dda0eb618104c393169290c6a9b867c291c09412cb2c5b5076d5b2c0d5dfb35c6977b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cffc8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86ef86c800a82cffc8080a1610001600081600b8239f30000000000000000000000000000000000000000000025a0e7faec7d55dd768fd7ebb9776df2aa44931f80db25e7d09e725006899fe01127a002eeb320299bf3b1887df79375a35d57b030a8ee30e44c089cef317bdabf008fc0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa5d99ac701bed984d8a502b79a7b48f5e9fe4c341c377a297e95200957106b98", + "stateRoot": "0xb9932bea5d8ce5f456ffb73c821d1fa6a09e23462128b1836cd84b5c7585c6f2", "transactionsTrie": "0xea6453e840cb2df94975777d06822589242c5603703444dadc5b68db455966dd", "receiptTrie": "0xeb618104c393169290c6a9b867c291c09412cb2c5b5076d5b2c0d5dfb35c6977", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4468,8 +4528,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcffc", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4477,7 +4537,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3c85efce6bcaeb259cbb737af5c8d29eb7b13f64e48f0e6ba8bbf16ede2756d8" + "hash": "0x332bbb2005c1bb15e8946bbfd848744dca47361273c048e523b3b80b34db30fe" }, "blocknumber": "1", "transactions": [ @@ -4500,7 +4560,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3c85efce6bcaeb259cbb737af5c8d29eb7b13f64e48f0e6ba8bbf16ede2756d8", + "lastblockhash": "0x332bbb2005c1bb15e8946bbfd848744dca47361273c048e523b3b80b34db30fe", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4521,7 +4581,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -4539,9 +4599,10 @@ }, "sealEngine": "NoProof" }, - "044-fork=Cancun-exact_intrinsic_gas-49120_bytes-49120_bytes_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_intrinsic_gas-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4572,12 +4633,12 @@ }, "blocks": [ { - "rlp": "0xf9c276f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0a541790f24be39e544c0ce115f48917b1c81be85cfdf4bcd6e9193e3ba98ea7ea0a4855ff501bd48bc1e063578dcdd0335f1d3024eb621e9cf0a28a4db6e695932a043125b1ca5882bff1d93db430ae1d11574c291d6af7fc301d43693ff47f58198b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303daf20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c031f9c02e800a8303daf28080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0724d71805ad3c46cee33010c9c3cf2d1375a62734656027e0124e4c5b828eacca054250f07e8723e0d4a110ebdf813243685d7fdf9ea9cc7fece5a3044e492c1aac0c0", + "rlp": "0xf9c278f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cf759df18780499298800ce8ed8a0adb9cc67a788231cbf612612fcf463f7fc6a0a4855ff501bd48bc1e063578dcdd0335f1d3024eb621e9cf0a28a4db6e695932a043125b1ca5882bff1d93db430ae1d11574c291d6af7fc301d43693ff47f58198b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303daf28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c031f9c02e800a8303daf28080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0724d71805ad3c46cee33010c9c3cf2d1375a62734656027e0124e4c5b828eacca054250f07e8723e0d4a110ebdf813243685d7fdf9ea9cc7fece5a3044e492c1aac0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xa541790f24be39e544c0ce115f48917b1c81be85cfdf4bcd6e9193e3ba98ea7e", + "stateRoot": "0xcf759df18780499298800ce8ed8a0adb9cc67a788231cbf612612fcf463f7fc6", "transactionsTrie": "0xa4855ff501bd48bc1e063578dcdd0335f1d3024eb621e9cf0a28a4db6e695932", "receiptTrie": "0x43125b1ca5882bff1d93db430ae1d11574c291d6af7fc301d43693ff47f58198", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4585,8 +4646,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03daf2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4594,7 +4655,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x5fa51c0bd83e3a192d227abe0fb1639ac03a77d1875de1695d71d7f66ebd2ee7" + "hash": "0xc97521f5aa655abd871744e155f00b04d0896d396d79298b963a8d5443ee7801" }, "blocknumber": "1", "transactions": [ @@ -4617,7 +4678,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x5fa51c0bd83e3a192d227abe0fb1639ac03a77d1875de1695d71d7f66ebd2ee7", + "lastblockhash": "0xc97521f5aa655abd871744e155f00b04d0896d396d79298b963a8d5443ee7801", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4638,7 +4699,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -4656,9 +4717,10 @@ }, "sealEngine": "NoProof" }, - "045-fork=Cancun-exact_intrinsic_gas-49121_bytes-49121_bytes_exact_intrinsic_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_intrinsic_gas-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4689,12 +4751,12 @@ }, "blocks": [ { - "rlp": "0xf9c277f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08594cac1019039dd030c292324442fef4ee2e1cacaf745d29d51c6e31fb0d021a088c9b78543cebfaf9b43683c75dc03a481469964bb321b1926adc6a63c554f43a062e7c8ccd924651bf45065fceb4b20c882110256436fafb285d4ac7c178756f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303daf80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c032f9c02f800a8303daf88080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a090c8fec7cae81dd703953cff23a17cd1b465e711d84f08085f8e015d22c39d13a05c8e70fb55f5c4896d40bc2a1f4191b47265feabaf1786967f69212b73a9b417c0c0", + "rlp": "0xf9c279f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c6cfe57414f9c5409fb1b8b9900193a8b870df5d1f1deaa91c156483ed4283a6a088c9b78543cebfaf9b43683c75dc03a481469964bb321b1926adc6a63c554f43a062e7c8ccd924651bf45065fceb4b20c882110256436fafb285d4ac7c178756f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303daf88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c032f9c02f800a8303daf88080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a090c8fec7cae81dd703953cff23a17cd1b465e711d84f08085f8e015d22c39d13a05c8e70fb55f5c4896d40bc2a1f4191b47265feabaf1786967f69212b73a9b417c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8594cac1019039dd030c292324442fef4ee2e1cacaf745d29d51c6e31fb0d021", + "stateRoot": "0xc6cfe57414f9c5409fb1b8b9900193a8b870df5d1f1deaa91c156483ed4283a6", "transactionsTrie": "0x88c9b78543cebfaf9b43683c75dc03a481469964bb321b1926adc6a63c554f43", "receiptTrie": "0x62e7c8ccd924651bf45065fceb4b20c882110256436fafb285d4ac7c178756f0", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4702,8 +4764,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03daf8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4711,7 +4773,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xf5a0b09b46e189a90ed053c6890ae5aedf9b17d0ed204a3032634a68eb4b82ac" + "hash": "0xa605dae06fa8fbe9ab720cbb4fdd0c941c7396211edb9bd5e67477d7d6b89ef8" }, "blocknumber": "1", "transactions": [ @@ -4734,7 +4796,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xf5a0b09b46e189a90ed053c6890ae5aedf9b17d0ed204a3032634a68eb4b82ac", + "lastblockhash": "0xa605dae06fa8fbe9ab720cbb4fdd0c941c7396211edb9bd5e67477d7d6b89ef8", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4755,7 +4817,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -4773,9 +4835,10 @@ }, "sealEngine": "NoProof" }, - "046-fork=Cancun-too_little_execution_gas-max_size_zeros-max_size_zeros_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_execution_gas-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4806,12 +4869,12 @@ }, "blocks": [ { - "rlp": "0xf9c296f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0448f1b4d87347febfd30c9b5a8c31649b7b5e7a2569324af383c5d5413f69ae7a052581494a3b348882c143e8956fae790ca55cf2ea8cc3e5c8c745ae0fdf5060aa09156f026ff9eef6f12b588e6dc9e77770ba48b3cb0c0c1f32215d8de54ebf40ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc530c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a8303dc538080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a07830068eb64c7e4e217c08170f32e18ab881c5c96b9ae63df88d61871440be75a0423c7263dd29ad8170c411d066df9269845d8e0454e7a8949779da29f177f58cc0c0", + "rlp": "0xf9c298f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08697b46369518c9ecf2c412a90c19da39f1a909f5a153da9000abd747b6d3afba052581494a3b348882c143e8956fae790ca55cf2ea8cc3e5c8c745ae0fdf5060aa09156f026ff9eef6f12b588e6dc9e77770ba48b3cb0c0c1f32215d8de54ebf40ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc538203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a8303dc538080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a07830068eb64c7e4e217c08170f32e18ab881c5c96b9ae63df88d61871440be75a0423c7263dd29ad8170c411d066df9269845d8e0454e7a8949779da29f177f58cc0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x448f1b4d87347febfd30c9b5a8c31649b7b5e7a2569324af383c5d5413f69ae7", + "stateRoot": "0x8697b46369518c9ecf2c412a90c19da39f1a909f5a153da9000abd747b6d3afb", "transactionsTrie": "0x52581494a3b348882c143e8956fae790ca55cf2ea8cc3e5c8c745ae0fdf5060a", "receiptTrie": "0x9156f026ff9eef6f12b588e6dc9e77770ba48b3cb0c0c1f32215d8de54ebf40a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4819,8 +4882,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dc53", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4828,7 +4891,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0197599298dc5d5d6f9be4df2c4255b3b7c3973ce8110be71dbdccd62b3d1414" + "hash": "0x85eea1d3bdc2b4a1c347de6ef75be409cd9e5aae82e046f776fabbf6d434fcb6" }, "blocknumber": "1", "transactions": [ @@ -4851,7 +4914,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x0197599298dc5d5d6f9be4df2c4255b3b7c3973ce8110be71dbdccd62b3d1414", + "lastblockhash": "0x85eea1d3bdc2b4a1c347de6ef75be409cd9e5aae82e046f776fabbf6d434fcb6", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4872,7 +4935,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -4890,9 +4953,10 @@ }, "sealEngine": "NoProof" }, - "047-fork=Cancun-too_little_execution_gas-max_size_ones-max_size_ones_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_execution_gas-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -4923,12 +4987,12 @@ }, "blocks": [ { - "rlp": "0xf9c296f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bae7af62af39426947281831587c5b0108f261ff993315d268fc61eb127aba8ba04329f776e457bcaf7d5fd3732711b1da7da93a0c7ab0ae6a65f70003cea1774ea074200b9b62da0f7c790b47cdd36f042d2e3c86babd4711f187a1177e24afce8fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc30c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a830cdbc38080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a053f9ca27c49ccafb408c2a5a6996c6e5d42f83332a0d704ffe165b0d1c58ffeca026ec1be89fae2d251bfa3d9d37f96abd222d70f823ff3cb52b25974ed3e4dfeec0c0", + "rlp": "0xf9c298f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa002f9b2415c3d6fbf6fe760d4e65dc95ce7a85dbe1b131d19df3a53d2fdd9c7a4a04329f776e457bcaf7d5fd3732711b1da7da93a0c7ab0ae6a65f70003cea1774ea074200b9b62da0f7c790b47cdd36f042d2e3c86babd4711f187a1177e24afce8fb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc38203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a830cdbc38080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010126a053f9ca27c49ccafb408c2a5a6996c6e5d42f83332a0d704ffe165b0d1c58ffeca026ec1be89fae2d251bfa3d9d37f96abd222d70f823ff3cb52b25974ed3e4dfeec0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbae7af62af39426947281831587c5b0108f261ff993315d268fc61eb127aba8b", + "stateRoot": "0x02f9b2415c3d6fbf6fe760d4e65dc95ce7a85dbe1b131d19df3a53d2fdd9c7a4", "transactionsTrie": "0x4329f776e457bcaf7d5fd3732711b1da7da93a0c7ab0ae6a65f70003cea1774e", "receiptTrie": "0x74200b9b62da0f7c790b47cdd36f042d2e3c86babd4711f187a1177e24afce8f", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -4936,8 +5000,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0cdbc3", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -4945,7 +5009,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x0ae27307ef8b7ff9308452a1bfd65c9564434ad50aec5986e4da1e16a5c2fd67" + "hash": "0x8f94a64dcffb40ef7e3e25576c4ac02793408eaaf98e2606c0007e86c3e6259e" }, "blocknumber": "1", "transactions": [ @@ -4968,7 +5032,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x0ae27307ef8b7ff9308452a1bfd65c9564434ad50aec5986e4da1e16a5c2fd67", + "lastblockhash": "0x8f94a64dcffb40ef7e3e25576c4ac02793408eaaf98e2606c0007e86c3e6259e", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -4989,7 +5053,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5007,9 +5071,10 @@ }, "sealEngine": "NoProof" }, - "048-fork=Cancun-too_little_execution_gas-32_bytes-32_bytes_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_execution_gas-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5040,12 +5105,12 @@ }, "blocks": [ { - "rlp": "0xf902b0f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa07933a9fc547d1834f0ffc0214d556efb7349c8e129c0945b059301610907ac29a079f437d3958c00e04b491fab9da655fd06d4ed7556493a0f73ef892b6994f46da0dcda0490cfe40ce76be6d08a866c7b0b3b2cfbda7e950ef2f55d3faf090e18aab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0d50c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86df86b800a82d0d58080a0610001600081600b8239f300000000000000000000000000000000000000000025a0b670a30b91b342e014cfa587bb7e60142c703e9a5836ef426148e0df836022f7a01e710a00d55661030bdba901132ce245f2e76a3dc99520ed1d37f2101b94ded6c0c0", + "rlp": "0xf902b2f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03be370c35937e1f2b14be0f8288ab24f1eb6505e8d895fb38d2b5bacd54d258ea079f437d3958c00e04b491fab9da655fd06d4ed7556493a0f73ef892b6994f46da0dcda0490cfe40ce76be6d08a866c7b0b3b2cfbda7e950ef2f55d3faf090e18aab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0d58203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86df86b800a82d0d58080a0610001600081600b8239f300000000000000000000000000000000000000000025a0b670a30b91b342e014cfa587bb7e60142c703e9a5836ef426148e0df836022f7a01e710a00d55661030bdba901132ce245f2e76a3dc99520ed1d37f2101b94ded6c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x7933a9fc547d1834f0ffc0214d556efb7349c8e129c0945b059301610907ac29", + "stateRoot": "0x3be370c35937e1f2b14be0f8288ab24f1eb6505e8d895fb38d2b5bacd54d258e", "transactionsTrie": "0x79f437d3958c00e04b491fab9da655fd06d4ed7556493a0f73ef892b6994f46d", "receiptTrie": "0xdcda0490cfe40ce76be6d08a866c7b0b3b2cfbda7e950ef2f55d3faf090e18aa", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5053,8 +5118,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xd0d5", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5062,7 +5127,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3a42abb0896ca0c68b4fd72551c1ed6b47b6180b29ef92bc7e7cebc4402e88c0" + "hash": "0xfabcaae1b6586b8bb738e88060b0fb943281757d3b03aefee10d28493499c369" }, "blocknumber": "1", "transactions": [ @@ -5085,7 +5150,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3a42abb0896ca0c68b4fd72551c1ed6b47b6180b29ef92bc7e7cebc4402e88c0", + "lastblockhash": "0xfabcaae1b6586b8bb738e88060b0fb943281757d3b03aefee10d28493499c369", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -5106,7 +5171,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5124,9 +5189,10 @@ }, "sealEngine": "NoProof" }, - "049-fork=Cancun-too_little_execution_gas-33_bytes-33_bytes_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_execution_gas-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5157,12 +5223,12 @@ }, "blocks": [ { - "rlp": "0xf902b1f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa08bb8c5b8072ab12394a1024c69271f2d4e9ef09171164a805b8dbfaa1882ce37a061ba103807c900d3ed1e15a4869acc7c1c1ef0edaee474ca9e43bad49c1dadaaa056e08e7a6a7ccf4f2f2163f4d7daf0d748bde77b80c9a0a0d3e684dc618f31fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0db0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86ef86c800a82d0db8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a022b6272bc4dfe55ce397c1cab0c2a27e7ea390d48acaa070c43e2d765140e1dfa07b4c101fe11664e17765acfbdf5943ff18baf0016b016c9cc7c7e7de5e62d9a3c0c0", + "rlp": "0xf902b3f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa008cc78c9a276885a84b9f287903f19f8a441998644b3621124ad86a50c8000dda061ba103807c900d3ed1e15a4869acc7c1c1ef0edaee474ca9e43bad49c1dadaaa056e08e7a6a7ccf4f2f2163f4d7daf0d748bde77b80c9a0a0d3e684dc618f31fdb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0db8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86ef86c800a82d0db8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a022b6272bc4dfe55ce397c1cab0c2a27e7ea390d48acaa070c43e2d765140e1dfa07b4c101fe11664e17765acfbdf5943ff18baf0016b016c9cc7c7e7de5e62d9a3c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x8bb8c5b8072ab12394a1024c69271f2d4e9ef09171164a805b8dbfaa1882ce37", + "stateRoot": "0x08cc78c9a276885a84b9f287903f19f8a441998644b3621124ad86a50c8000dd", "transactionsTrie": "0x61ba103807c900d3ed1e15a4869acc7c1c1ef0edaee474ca9e43bad49c1dadaa", "receiptTrie": "0x56e08e7a6a7ccf4f2f2163f4d7daf0d748bde77b80c9a0a0d3e684dc618f31fd", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5170,8 +5236,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xd0db", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5179,7 +5245,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3725885790abca18385619de9854b32c493cd077ff31a2a5977acdba803eb265" + "hash": "0x8ebd2757e40abc7e27d0fe63d7d3ff6867785589342c2c151adb3e8b34fc19a6" }, "blocknumber": "1", "transactions": [ @@ -5202,7 +5268,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3725885790abca18385619de9854b32c493cd077ff31a2a5977acdba803eb265", + "lastblockhash": "0x8ebd2757e40abc7e27d0fe63d7d3ff6867785589342c2c151adb3e8b34fc19a6", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -5223,7 +5289,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5241,9 +5307,10 @@ }, "sealEngine": "NoProof" }, - "050-fork=Cancun-too_little_execution_gas-49120_bytes-49120_bytes_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_execution_gas-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5274,12 +5341,12 @@ }, "blocks": [ { - "rlp": "0xf9c276f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0210ffad21bda38f95991a8841dd753bcacc2555d237e6c510a022e58dafc420ba08a443da3e5b3988f130162963ce8dbedc0e3e27b1cfff76ca9b5971ac36a95eaa01fb2faa21d22a1deffc65121b9873f6868101465a956eb47d2b3eebc78417787b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd10c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c031f9c02e800a8303dbd18080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a07be2f3b1d10d379e38d879a4fe7823acb7a8ed9f9d114808ee1c02996eef2b2ea015b0e64b2f57f822a1af517d876efd4a96954e3a4a6e74cacada880e5c5451edc0c0", + "rlp": "0xf9c278f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01c8aef09c7d7439c8f21175fded3a21303d0e6b1e6f5b2e923de0fcd83f61af5a08a443da3e5b3988f130162963ce8dbedc0e3e27b1cfff76ca9b5971ac36a95eaa01fb2faa21d22a1deffc65121b9873f6868101465a956eb47d2b3eebc78417787b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd18203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c031f9c02e800a8303dbd18080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a07be2f3b1d10d379e38d879a4fe7823acb7a8ed9f9d114808ee1c02996eef2b2ea015b0e64b2f57f822a1af517d876efd4a96954e3a4a6e74cacada880e5c5451edc0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x210ffad21bda38f95991a8841dd753bcacc2555d237e6c510a022e58dafc420b", + "stateRoot": "0x1c8aef09c7d7439c8f21175fded3a21303d0e6b1e6f5b2e923de0fcd83f61af5", "transactionsTrie": "0x8a443da3e5b3988f130162963ce8dbedc0e3e27b1cfff76ca9b5971ac36a95ea", "receiptTrie": "0x1fb2faa21d22a1deffc65121b9873f6868101465a956eb47d2b3eebc78417787", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5287,8 +5354,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dbd1", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5296,7 +5363,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xa2f64044078cac0d4ee12c79ed1cba30f50bd64dd49c252a8c0e53464ea5c8d5" + "hash": "0xf1024ea9b5407203bc41a5c08e03f4ce1288b5436da8585ac942412b5e8ae01e" }, "blocknumber": "1", "transactions": [ @@ -5319,7 +5386,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xa2f64044078cac0d4ee12c79ed1cba30f50bd64dd49c252a8c0e53464ea5c8d5", + "lastblockhash": "0xf1024ea9b5407203bc41a5c08e03f4ce1288b5436da8585ac942412b5e8ae01e", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -5340,7 +5407,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5358,9 +5425,10 @@ }, "sealEngine": "NoProof" }, - "051-fork=Cancun-too_little_execution_gas-49121_bytes-49121_bytes_too_little_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-too_little_execution_gas-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5391,12 +5459,12 @@ }, "blocks": [ { - "rlp": "0xf9c277f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0c34d1944f40f5f82de35a1cecef08cdcdc55954984ca0fae5e56b21dd1ae2646a07bdc8ac20e7c7d7c58be9fec7e2016fccf50feed93c574d0e4fc9b5c561fdd4ba0bea0a684af9631e42c7e660ca236d75eb56c416a52fb09f78d2288d9bfe94918b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd70c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c032f9c02f800a8303dbd78080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0599451b46eff96c956fe4ce7d16b6030de373a45803dea32e83ae2e1ad17337ca03691fa0e0a40cac38c3807ffbd1ef7cee9bcd42840a3109e524829d4079f0210c0c0", + "rlp": "0xf9c279f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0488a01a4ea816575638ae95d0e4207e4d12ef068d6970344f6d5de433429ee81a07bdc8ac20e7c7d7c58be9fec7e2016fccf50feed93c574d0e4fc9b5c561fdd4ba0bea0a684af9631e42c7e660ca236d75eb56c416a52fb09f78d2288d9bfe94918b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd78203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c032f9c02f800a8303dbd78080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0599451b46eff96c956fe4ce7d16b6030de373a45803dea32e83ae2e1ad17337ca03691fa0e0a40cac38c3807ffbd1ef7cee9bcd42840a3109e524829d4079f0210c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xc34d1944f40f5f82de35a1cecef08cdcdc55954984ca0fae5e56b21dd1ae2646", + "stateRoot": "0x488a01a4ea816575638ae95d0e4207e4d12ef068d6970344f6d5de433429ee81", "transactionsTrie": "0x7bdc8ac20e7c7d7c58be9fec7e2016fccf50feed93c574d0e4fc9b5c561fdd4b", "receiptTrie": "0xbea0a684af9631e42c7e660ca236d75eb56c416a52fb09f78d2288d9bfe94918", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5404,8 +5472,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dbd7", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5413,7 +5481,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x090a76aaae5521ff0b476bc1d8caba8d9aa2c499f84462681382e80ba814b248" + "hash": "0x2a4ba2d70bc6eed6724593c232d275d093cc12bff05b7c1481cef71c7ae76ba3" }, "blocknumber": "1", "transactions": [ @@ -5436,7 +5504,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x090a76aaae5521ff0b476bc1d8caba8d9aa2c499f84462681382e80ba814b248", + "lastblockhash": "0x2a4ba2d70bc6eed6724593c232d275d093cc12bff05b7c1481cef71c7ae76ba3", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -5457,7 +5525,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5475,9 +5543,10 @@ }, "sealEngine": "NoProof" }, - "052-fork=Cancun-exact_execution_gas-max_size_zeros-max_size_zeros_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_execution_gas-max_size_zeros]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5508,12 +5577,12 @@ }, "blocks": [ { - "rlp": "0xf9c296f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa00888c2b7ec9b76fae3552c963fcc2d56903a982bad54446733997d2c17166da7a03d84dff149104ab098db5f286be52de3084c263d24cfafb548593be10a0ab86da04ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc540c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a8303dc548080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0b2ad2aea30c189a8b76547a430ad4fcea20d4872d31c1f00160040a76943f826a0638523091a090f96c402c768dbaaa2e8e77628565e855332fd442688bc75043dc0c0", + "rlp": "0xf9c298f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa09a158dc12592cb6e32af9a5e2ce1387dee27268689a00d9a6f701931d38c43efa03d84dff149104ab098db5f286be52de3084c263d24cfafb548593be10a0ab86da04ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653eb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dc548203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a8303dc548080b9c000610001600081600b8239f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a0b2ad2aea30c189a8b76547a430ad4fcea20d4872d31c1f00160040a76943f826a0638523091a090f96c402c768dbaaa2e8e77628565e855332fd442688bc75043dc0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x0888c2b7ec9b76fae3552c963fcc2d56903a982bad54446733997d2c17166da7", + "stateRoot": "0x9a158dc12592cb6e32af9a5e2ce1387dee27268689a00d9a6f701931d38c43ef", "transactionsTrie": "0x3d84dff149104ab098db5f286be52de3084c263d24cfafb548593be10a0ab86d", "receiptTrie": "0x4ac53b3b08d02f5262920308ee15772a892169fa31ae5320bdf29bbddeee653e", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5521,8 +5590,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dc54", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5530,7 +5599,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x8216d762e5b5bdd595033b043a8db8487ed5340ae3752498c62ce294d0048c16" + "hash": "0x7106ca3153311e6b613e959540a8c814e6ef4c36d87ad16a6cb6d6ca7bc8a457" }, "blocknumber": "1", "transactions": [ @@ -5553,7 +5622,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x8216d762e5b5bdd595033b043a8db8487ed5340ae3752498c62ce294d0048c16", + "lastblockhash": "0x7106ca3153311e6b613e959540a8c814e6ef4c36d87ad16a6cb6d6ca7bc8a457", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -5574,7 +5643,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5598,9 +5667,10 @@ }, "sealEngine": "NoProof" }, - "053-fork=Cancun-exact_execution_gas-max_size_ones-max_size_ones_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_execution_gas-max_size_ones]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5631,12 +5701,12 @@ }, "blocks": [ { - "rlp": "0xf9c296f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0bb2a5dbe1ebd3bc25a66a12e1f0db9109a769cca8693b266783d70aeb508668ba0950dba678be86b57bd552aac0314fa055439d7fae1520261fe5c3adb60ee8641a052366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc40c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a830cdbc48080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a076d4e3cdf2e03e61f7011cd7adfd9bd14bc1d0e9530f3b2d0574b8506f69f144a04ccab809aaa9856a6d53f3a580bb1747d9cff29ece03dbc831a1ea21767d4595c0c0", + "rlp": "0xf9c298f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0cf91a83ed18abdc1a2c3c4b6be7b3934e02ee30ba894b94db9634ca486b86340a0950dba678be86b57bd552aac0314fa055439d7fae1520261fe5c3adb60ee8641a052366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97ab9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000830cdbc48203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c051f9c04e800a830cdbc48080b9c000610001600081600b8239f30001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010125a076d4e3cdf2e03e61f7011cd7adfd9bd14bc1d0e9530f3b2d0574b8506f69f144a04ccab809aaa9856a6d53f3a580bb1747d9cff29ece03dbc831a1ea21767d4595c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xbb2a5dbe1ebd3bc25a66a12e1f0db9109a769cca8693b266783d70aeb508668b", + "stateRoot": "0xcf91a83ed18abdc1a2c3c4b6be7b3934e02ee30ba894b94db9634ca486b86340", "transactionsTrie": "0x950dba678be86b57bd552aac0314fa055439d7fae1520261fe5c3adb60ee8641", "receiptTrie": "0x52366db35269fb28271cd4079753efcebd014f4cd94475f4fceb598db2c0b97a", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5644,8 +5714,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x0cdbc4", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5653,7 +5723,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6ac3d63b8d118500af8b684c9b3b5466be3fe5f2f3f7ae807306fcb8a4e10cc6" + "hash": "0xb15233992f162579f3c3b91876fdf5b43ea197b6a6581232c6ecb4d9444d6e01" }, "blocknumber": "1", "transactions": [ @@ -5676,7 +5746,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6ac3d63b8d118500af8b684c9b3b5466be3fe5f2f3f7ae807306fcb8a4e10cc6", + "lastblockhash": "0xb15233992f162579f3c3b91876fdf5b43ea197b6a6581232c6ecb4d9444d6e01", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -5697,7 +5767,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5721,9 +5791,10 @@ }, "sealEngine": "NoProof" }, - "054-fork=Cancun-exact_execution_gas-empty-empty_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_execution_gas-empty]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5754,12 +5825,12 @@ }, "blocks": [ { - "rlp": "0xf90290f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa013e977243b5ea0b90b2bec0b29635ca5052232f7411a512fb31722b24ace61e5a0dfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35ba065c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf080c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0880808026a093da0e096b13f6889a36880987f4cfb0fdfd4d14c48beab2c3efacdf52ecfef9a008b548262f4ac8d6830743898f193c1b4e28b8f83ca9603e023684ba8d581381c0c0", + "rlp": "0xf90292f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01befb6c6b4efa8900f8fb6c7ecb6969db06185796a884c30f46d87770c7014f7a0dfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35ba065c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bfb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf088203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0880808026a093da0e096b13f6889a36880987f4cfb0fdfd4d14c48beab2c3efacdf52ecfef9a008b548262f4ac8d6830743898f193c1b4e28b8f83ca9603e023684ba8d581381c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x13e977243b5ea0b90b2bec0b29635ca5052232f7411a512fb31722b24ace61e5", + "stateRoot": "0x1befb6c6b4efa8900f8fb6c7ecb6969db06185796a884c30f46d87770c7014f7", "transactionsTrie": "0xdfcd58122744ef2d87d784183e9adb2b35904dba8c12ead04a83d03919fcf35b", "receiptTrie": "0x65c4d1b533902562730f0d110bcce51643ce4725ca03d85c33d5812c0ed308bf", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5767,8 +5838,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcf08", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5776,7 +5847,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3156832bd592328b10a309747ed680a3a693caf3340a970ecbc68e07e25be0f4" + "hash": "0xdad38353c510170dbabc7ba97b3a5870b7f6f49a2621de61889f69f551fa9de4" }, "blocknumber": "1", "transactions": [ @@ -5799,7 +5870,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3156832bd592328b10a309747ed680a3a693caf3340a970ecbc68e07e25be0f4", + "lastblockhash": "0xdad38353c510170dbabc7ba97b3a5870b7f6f49a2621de61889f69f551fa9de4", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -5820,7 +5891,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5844,9 +5915,10 @@ }, "sealEngine": "NoProof" }, - "055-fork=Cancun-exact_execution_gas-single_byte-single_byte_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_execution_gas-single_byte]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -5877,12 +5949,12 @@ }, "blocks": [ { - "rlp": "0xf90290f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa03b03b51554c6bea58d51badaee18a78107d65356ba1eaf367e94b9cf885393d6a0f06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cffa0d5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf0e0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0e80800026a0e207ed17886e3c97723c5adce84e7761740dde41793acb56542559ea9d506e52a06253c94f447263480622fed4a725ad82847bffdf06840ac97036ff1d6f76ec09c0c0", + "rlp": "0xf90292f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0486643495892e1d70d5b68838bafd4cfa81f0893d5b2f6d46608328d241ed281a0f06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cffa0d5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082cf0e8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f84df84b800a82cf0e80800026a0e207ed17886e3c97723c5adce84e7761740dde41793acb56542559ea9d506e52a06253c94f447263480622fed4a725ad82847bffdf06840ac97036ff1d6f76ec09c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x3b03b51554c6bea58d51badaee18a78107d65356ba1eaf367e94b9cf885393d6", + "stateRoot": "0x486643495892e1d70d5b68838bafd4cfa81f0893d5b2f6d46608328d241ed281", "transactionsTrie": "0xf06f43d9657202fe65ed3eee389e1b04901b5c19c582215e13c5786ecc160cff", "receiptTrie": "0xd5ce4244be1c2a96fdf5dfa24730d467295f0751de8996885911ed0fae19d983", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -5890,8 +5962,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xcf0e", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -5899,7 +5971,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6d1c9a6ab12b634f03c4347ef4e00647230c78f5eba7c403da5fa5932c5a9454" + "hash": "0x4271c435c5251cac6206f2ca91ca04b26ff235863f0b52ae9ff4649c97ce3570" }, "blocknumber": "1", "transactions": [ @@ -5922,7 +5994,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x6d1c9a6ab12b634f03c4347ef4e00647230c78f5eba7c403da5fa5932c5a9454", + "lastblockhash": "0x4271c435c5251cac6206f2ca91ca04b26ff235863f0b52ae9ff4649c97ce3570", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -5943,7 +6015,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -5967,9 +6039,10 @@ }, "sealEngine": "NoProof" }, - "056-fork=Cancun-exact_execution_gas-32_bytes-32_bytes_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_execution_gas-32_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -6000,12 +6073,12 @@ }, "blocks": [ { - "rlp": "0xf902b0f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa065d3e2d75999128a2e5a018059b938291ac6b08831e45950964d62fcd8f032aca015e50c98ddba357378e223eb58c6d3ccc79aacc4898a867f6021b0f425e166f7a008889f1b1de7a78a4a79e1af77d75bc22a0b2f8571c0fabdf9e54ea2cc54612db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0d60c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86df86b800a82d0d68080a0610001600081600b8239f300000000000000000000000000000000000000000026a0fc4be100591165da16d05a0ff5ae4a2a4edc04468c721a9b88f377651d0cc90ea01a55b827b0b61ecb8746e1a5c384d8646b283245d4fc63331b5f6d80b66821f8c0c0", + "rlp": "0xf902b2f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b170f3dceaafbcc9f64836a2f1c8cc8e1b7c7a3d0034352e8e0f7b6850115f00a015e50c98ddba357378e223eb58c6d3ccc79aacc4898a867f6021b0f425e166f7a008889f1b1de7a78a4a79e1af77d75bc22a0b2f8571c0fabdf9e54ea2cc54612db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0d68203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86df86b800a82d0d68080a0610001600081600b8239f300000000000000000000000000000000000000000026a0fc4be100591165da16d05a0ff5ae4a2a4edc04468c721a9b88f377651d0cc90ea01a55b827b0b61ecb8746e1a5c384d8646b283245d4fc63331b5f6d80b66821f8c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x65d3e2d75999128a2e5a018059b938291ac6b08831e45950964d62fcd8f032ac", + "stateRoot": "0xb170f3dceaafbcc9f64836a2f1c8cc8e1b7c7a3d0034352e8e0f7b6850115f00", "transactionsTrie": "0x15e50c98ddba357378e223eb58c6d3ccc79aacc4898a867f6021b0f425e166f7", "receiptTrie": "0x08889f1b1de7a78a4a79e1af77d75bc22a0b2f8571c0fabdf9e54ea2cc54612d", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6013,8 +6086,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xd0d6", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6022,7 +6095,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x77c3c06d3548ddf01da412dd894009bc262fb6bf4a5bb39e6af11e2264cd4659" + "hash": "0x600ff2f64b915b4d3ac7f4f260ae518e44067d2f284fab4cabfd356c601b9088" }, "blocknumber": "1", "transactions": [ @@ -6045,7 +6118,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x77c3c06d3548ddf01da412dd894009bc262fb6bf4a5bb39e6af11e2264cd4659", + "lastblockhash": "0x600ff2f64b915b4d3ac7f4f260ae518e44067d2f284fab4cabfd356c601b9088", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -6066,7 +6139,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -6090,9 +6163,10 @@ }, "sealEngine": "NoProof" }, - "057-fork=Cancun-exact_execution_gas-33_bytes-33_bytes_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_execution_gas-33_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -6123,12 +6197,12 @@ }, "blocks": [ { - "rlp": "0xf902b1f9023ca075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e8e04f1868e402c050f904f19551450a1346582a29fe6f43a41cc26c20b2bcf7a030612f0c5b39402d44c6de9a2d31559c5de1a50abd6b73fb1af73c9ce8df6ed1a0e8bd336ba08054fa93937979e829cf794602a3ea9c0b84d8d159794083fe6e8db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0dc0c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86ef86c800a82d0dc8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a00d713219df4800d4b7add508f52b224688cc0e8c804578d8496773af87c756d7a07668a990423258d782b9faa74048847dca02be10ca35826e67ae05e04cca1435c0c0", + "rlp": "0xf902b3f9023ea075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b232d1e650fc8e69eef289e5ebc0b313449eecf82790d8efe197282c726c653da030612f0c5b39402d44c6de9a2d31559c5de1a50abd6b73fb1af73c9ce8df6ed1a0e8bd336ba08054fa93937979e829cf794602a3ea9c0b84d8d159794083fe6e8db9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a000082d0dc8203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f86ef86c800a82d0dc8080a1610001600081600b8239f30000000000000000000000000000000000000000000026a00d713219df4800d4b7add508f52b224688cc0e8c804578d8496773af87c756d7a07668a990423258d782b9faa74048847dca02be10ca35826e67ae05e04cca1435c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xe8e04f1868e402c050f904f19551450a1346582a29fe6f43a41cc26c20b2bcf7", + "stateRoot": "0xb232d1e650fc8e69eef289e5ebc0b313449eecf82790d8efe197282c726c653d", "transactionsTrie": "0x30612f0c5b39402d44c6de9a2d31559c5de1a50abd6b73fb1af73c9ce8df6ed1", "receiptTrie": "0xe8bd336ba08054fa93937979e829cf794602a3ea9c0b84d8d159794083fe6e8d", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6136,8 +6210,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0xd0dc", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6145,7 +6219,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0xfedda77b4fdefe1163f95c26f344816f1074fda042fdf0de76163d2280fc5878" + "hash": "0x09436b78f33004a4d301173385dad6c5da531c4a601c5faacfce3a31456a678a" }, "blocknumber": "1", "transactions": [ @@ -6168,7 +6242,7 @@ "withdrawals": [] } ], - "lastblockhash": "0xfedda77b4fdefe1163f95c26f344816f1074fda042fdf0de76163d2280fc5878", + "lastblockhash": "0x09436b78f33004a4d301173385dad6c5da531c4a601c5faacfce3a31456a678a", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -6189,7 +6263,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -6213,9 +6287,10 @@ }, "sealEngine": "NoProof" }, - "058-fork=Cancun-exact_execution_gas-49120_bytes-49120_bytes_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_execution_gas-49120_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -6246,12 +6321,12 @@ }, "blocks": [ { - "rlp": "0xf9c276f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa088aab26c5874b8082febadce553d61682d4e1677808e5cdb6af2513b622d273aa0e26daab3cf7dc84cac6d0feb2aa5fcdc8fda2b42b9244ac25c80f84a41777e45a0e8b038ffe3279f771c7ccc9cc32fe846d878b81fcb4c4752e2d8d28f9b45a1b1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd20c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c031f9c02e800a8303dbd28080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a04db160f43cc7c548e7ce2739068e00dd0c00fca7dc019ab73ac81e17234ad35aa04ecba0f7d10e6c84f279fef899ffa44245a44a43ea5304b4951ce7635fa827f2c0c0", + "rlp": "0xf9c278f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0e00ebab8e1a6d5ec97320f1f9c6eb335c85509f35801c529b5a31bad7f9d782aa0e26daab3cf7dc84cac6d0feb2aa5fcdc8fda2b42b9244ac25c80f84a41777e45a0e8b038ffe3279f771c7ccc9cc32fe846d878b81fcb4c4752e2d8d28f9b45a1b1b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd28203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c031f9c02e800a8303dbd28080b9bfe0610001600081600b8239f3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026a04db160f43cc7c548e7ce2739068e00dd0c00fca7dc019ab73ac81e17234ad35aa04ecba0f7d10e6c84f279fef899ffa44245a44a43ea5304b4951ce7635fa827f2c0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0x88aab26c5874b8082febadce553d61682d4e1677808e5cdb6af2513b622d273a", + "stateRoot": "0xe00ebab8e1a6d5ec97320f1f9c6eb335c85509f35801c529b5a31bad7f9d782a", "transactionsTrie": "0xe26daab3cf7dc84cac6d0feb2aa5fcdc8fda2b42b9244ac25c80f84a41777e45", "receiptTrie": "0xe8b038ffe3279f771c7ccc9cc32fe846d878b81fcb4c4752e2d8d28f9b45a1b1", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6259,8 +6334,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dbd2", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6268,7 +6343,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x3bea5560d3c7e95e9afa302c74be413b86fd602ff5af3178ccc53df7412ddcc1" + "hash": "0x1342fc91479ada89cb1fc68ace6897b358de31601297f41e3993d2d51db9a80a" }, "blocknumber": "1", "transactions": [ @@ -6291,7 +6366,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x3bea5560d3c7e95e9afa302c74be413b86fd602ff5af3178ccc53df7412ddcc1", + "lastblockhash": "0x1342fc91479ada89cb1fc68ace6897b358de31601297f41e3993d2d51db9a80a", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -6312,7 +6387,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { @@ -6336,9 +6411,10 @@ }, "sealEngine": "NoProof" }, - "059-fork=Cancun-exact_execution_gas-49121_bytes-49121_bytes_exact_execution_gas": { + "tests/shanghai/eip3860_initcode/test_initcode.py::TestContractCreationGasUsage::test_gas_usage[fork_Cancun-blockchain_test-exact_execution_gas-49121_bytes]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3860.md", "reference-spec-version": "5f8151e19ad1c99da4bafd514ce0e8ab89783c8f" }, @@ -6369,12 +6445,12 @@ }, "blocks": [ { - "rlp": "0xf9c277f9023da075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0b811d11cc8bec46c45a69edfc1c6ae0f159c6e8b1e5130e7b02a85ae06232f29a03433ade4bcb44bd9c960acdeb533d9e88eef9754d03bb015e0b2fdbe85f04ac8a061344f6614b2fbf4048ababd1164776cc052d9428a8d3d8f668db93e6c6512b7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd80c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c032f9c02f800a8303dbd88080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0ea6f4054bf02b17733cdadecce0912e4acf8b99e39439c542b728f4de3fc8f44a0115dc39bbb17b16b7559992c939b62089fa8be15e424092e7210b0faa6d2781bc0c0", + "rlp": "0xf9c279f9023fa075f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0f740db6789c7ac73a761fe0bdb10a5eec4273ea3fdb077822ae90c525cceec57a03433ade4bcb44bd9c960acdeb533d9e88eef9754d03bb015e0b2fdbe85f04ac8a061344f6614b2fbf4048ababd1164776cc052d9428a8d3d8f668db93e6c6512b7b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a00008303dbd88203e800a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218080a00000000000000000000000000000000000000000000000000000000000000000f9c032f9c02f800a8303dbd88080b9bfe1610001600081600b8239f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025a0ea6f4054bf02b17733cdadecce0912e4acf8b99e39439c542b728f4de3fc8f44a0115dc39bbb17b16b7559992c939b62089fa8be15e424092e7210b0faa6d2781bc0c0", "blockHeader": { "parentHash": "0x75f987ffc84f12861a575922ee8620845a804f7c79f2dfeef0ca352d0fe1c46a", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "stateRoot": "0xb811d11cc8bec46c45a69edfc1c6ae0f159c6e8b1e5130e7b02a85ae06232f29", + "stateRoot": "0xf740db6789c7ac73a761fe0bdb10a5eec4273ea3fdb077822ae90c525cceec57", "transactionsTrie": "0x3433ade4bcb44bd9c960acdeb533d9e88eef9754d03bb015e0b2fdbe85f04ac8", "receiptTrie": "0x61344f6614b2fbf4048ababd1164776cc052d9428a8d3d8f668db93e6c6512b7", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", @@ -6382,8 +6458,8 @@ "number": "0x01", "gasLimit": "0x016345785d8a0000", "gasUsed": "0x03dbd8", - "timestamp": "0x0c", - "extraData": "0x", + "timestamp": "0x03e8", + "extraData": "0x00", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", @@ -6391,7 +6467,7 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x29f7f44024103b22d10837472d02bc42b6d2e86cb56241dd4fa0b095d3ee1e2c" + "hash": "0x4399feca7251dd38157b743a73ab128ac21539fe569bbc753fc2523933f90c7f" }, "blocknumber": "1", "transactions": [ @@ -6414,7 +6490,7 @@ "withdrawals": [] } ], - "lastblockhash": "0x29f7f44024103b22d10837472d02bc42b6d2e86cb56241dd4fa0b095d3ee1e2c", + "lastblockhash": "0x4399feca7251dd38157b743a73ab128ac21539fe569bbc753fc2523933f90c7f", "pre": { "0x000f3df6d732807ef1319fb7b8bb8522d0beac02": { "nonce": "0x01", @@ -6435,7 +6511,7 @@ "balance": "0x00", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x0c": "0x0c" + "0x03e8": "0x03e8" } }, "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/balance_within_block.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/balance_within_block.json index 5a18bc67626..bc81ee45c67 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/balance_within_block.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/balance_within_block.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_balance_within_block[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -172,9 +173,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_balance_within_block[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/large_amount.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/large_amount.json index c36cb8c6855..b9e1ada40b9 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/large_amount.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/large_amount.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_large_amount[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -136,9 +137,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_large_amount[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/many_withdrawals.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/many_withdrawals.json index 067bc861937..2d79a0a1a0d 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/many_withdrawals.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/many_withdrawals.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_many_withdrawals[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -7276,9 +7277,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_many_withdrawals[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/multiple_withdrawals_same_address.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/multiple_withdrawals_same_address.json index d6e4c8e2d13..7394aabb1f1 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/multiple_withdrawals_same_address.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/multiple_withdrawals_same_address.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-test_case=single_block-single_block": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::TestMultipleWithdrawalsSameAddress::test_multiple_withdrawals_same_address[fork_Shanghai-blockchain_test-test_case_single_block]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -1264,9 +1265,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-test_case=multiple_blocks-multiple_blocks": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::TestMultipleWithdrawalsSameAddress::test_multiple_withdrawals_same_address[fork_Shanghai-blockchain_test-test_case_multiple_blocks]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -2809,9 +2811,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-test_case=single_block-single_block": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::TestMultipleWithdrawalsSameAddress::test_multiple_withdrawals_same_address[fork_Cancun-blockchain_test-test_case_single_block]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -4094,9 +4097,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-test_case=multiple_blocks-multiple_blocks": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::TestMultipleWithdrawalsSameAddress::test_multiple_withdrawals_same_address[fork_Cancun-blockchain_test-test_case_multiple_blocks]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/newly_created_contract.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/newly_created_contract.json index 1ae43ec99d8..bbc0739da30 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/newly_created_contract.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/newly_created_contract.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-without_tx_value-fork=Shanghai": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_newly_created_contract[fork_Shanghai-blockchain_test-without_tx_value]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -109,9 +110,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-with_tx_value-fork=Shanghai": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_newly_created_contract[fork_Shanghai-blockchain_test-with_tx_value]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -219,9 +221,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-without_tx_value-fork=Cancun": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_newly_created_contract[fork_Cancun-blockchain_test-without_tx_value]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -349,9 +352,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-with_tx_value-fork=Cancun": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_newly_created_contract[fork_Cancun-blockchain_test-with_tx_value]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/no_evm_execution.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/no_evm_execution.json index c442acb123c..dbcca7e8fe5 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/no_evm_execution.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/no_evm_execution.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_no_evm_execution[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -248,9 +249,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_no_evm_execution[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/self_destructing_account.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/self_destructing_account.json index 771d89d620d..a673037f1e6 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/self_destructing_account.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/self_destructing_account.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_self_destructing_account[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -127,9 +128,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_self_destructing_account[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/use_value_in_contract.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/use_value_in_contract.json index 9d64b85b3fc..4cc4b21ef02 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/use_value_in_contract.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/use_value_in_contract.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_use_value_in_contract[fork_Shanghai-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -171,9 +172,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Cancun": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_use_value_in_contract[fork_Cancun-blockchain_test]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/use_value_in_tx.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/use_value_in_tx.json index 83b8252b169..cca9015e1e4 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/use_value_in_tx.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/use_value_in_tx.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-tx_in_withdrawals_block": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::TestUseValueInTx::test_use_value_in_tx[fork_Shanghai-blockchain_test-tx_in_withdrawals_block]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -29,15 +30,15 @@ }, "blocks": [ { - "rlp": "0xf9029ef90217a08a333fad2b42ff063107bb84b198ac771a5b22198cc94d62b8f4bab4914509b5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01152e1850f7a20f6afa4b5e5966010e07c9105c04edc713e5753e01c97c94426a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a0a485a3bd07e29cb8234b5f093d5216eb8b965fb2693c66fea254f6cacef97a6ff865f86380843b9aca00825208940000000000000000000000000000000000000100808026a0e319535da2cae2d72ddb352054535d000c23acdc7cad9d828891253f3850d0d2a032fe4444149b609e2ffa621e23e179b12028309fdb8cb0a5c1bbc58135299af1c0dbda808094a94f5374fce5edbc8e2a8697c15331677e6ebf0b825209", - "expectException": "Transaction without funds", + "rlp": "0xf9029ef90217a08a333fad2b42ff063107bb84b198ac771a5b22198cc94d62b8f4bab4914509b5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa01152e1850f7a20f6afa4b5e5966010e07c9105c04edc713e5753e01c97c94426a0b5ffe01eaa51ee8246b2108e049e6e11dc0a1d99b4cc52966791ef9c40b8b863a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a0a485a3bd07e29cb8234b5f093d5216eb8b965fb2693c66fea254f6cacef97a6ff865f86380843b9aca00825208940000000000000000000000000000000000000100808026a0e319535da2cae2d72ddb352054535d000c23acdc7cad9d828891253f3850d0d2a032fe4444149b609e2ffa621e23e179b12028309fdb8cb0a5c1bbc58135299af1c0dbda808094a94f5374fce5edbc8e2a8697c15331677e6ebf0b825209", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x8a333fad2b42ff063107bb84b198ac771a5b22198cc94d62b8f4bab4914509b5", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x1152e1850f7a20f6afa4b5e5966010e07c9105c04edc713e5753e01c97c94426", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xb5ffe01eaa51ee8246b2108e049e6e11dc0a1d99b4cc52966791ef9c40b8b863", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -50,8 +51,9 @@ "nonce": "0x0000000000000000", "baseFeePerGas": "0x07", "withdrawalsRoot": "0xa485a3bd07e29cb8234b5f093d5216eb8b965fb2693c66fea254f6cacef97a6f", - "hash": "0x92d764bca1c2535ce981819b338bae5109125a89c5d4b58b3fb0bd0be80f4b89" + "hash": "0x4fbce0bf8b47c2e4092f85f3b25a662e519d2a2467c70990b17aaaffc1b854be" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -99,9 +101,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-tx_after_withdrawals_block": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::TestUseValueInTx::test_use_value_in_tx[fork_Shanghai-blockchain_test-tx_after_withdrawals_block]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -230,9 +233,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Cancun-tx_in_withdrawals_block": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::TestUseValueInTx::test_use_value_in_tx[fork_Cancun-blockchain_test-tx_in_withdrawals_block]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -263,15 +267,15 @@ }, "blocks": [ { - "rlp": "0xf902c1f9023aa093ba43976ae2b42938748d0dc8bac627e08d39b94334f071426217e432b139bfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0682e97201201372e19a26af611381a7beec0f241a58f183a8d6433f5632bd67da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a0a485a3bd07e29cb8234b5f093d5216eb8b965fb2693c66fea254f6cacef97a6f8080a00000000000000000000000000000000000000000000000000000000000000000f865f86380843b9aca00825208940000000000000000000000000000000000000100808026a0e319535da2cae2d72ddb352054535d000c23acdc7cad9d828891253f3850d0d2a032fe4444149b609e2ffa621e23e179b12028309fdb8cb0a5c1bbc58135299af1c0dbda808094a94f5374fce5edbc8e2a8697c15331677e6ebf0b825209", - "expectException": "Transaction without funds", + "rlp": "0xf902c1f9023aa093ba43976ae2b42938748d0dc8bac627e08d39b94334f071426217e432b139bfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa0682e97201201372e19a26af611381a7beec0f241a58f183a8d6433f5632bd67da0b5ffe01eaa51ee8246b2108e049e6e11dc0a1d99b4cc52966791ef9c40b8b863a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800188016345785d8a0000800c80a0000000000000000000000000000000000000000000000000000000000000000088000000000000000007a0a485a3bd07e29cb8234b5f093d5216eb8b965fb2693c66fea254f6cacef97a6f8080a00000000000000000000000000000000000000000000000000000000000000000f865f86380843b9aca00825208940000000000000000000000000000000000000100808026a0e319535da2cae2d72ddb352054535d000c23acdc7cad9d828891253f3850d0d2a032fe4444149b609e2ffa621e23e179b12028309fdb8cb0a5c1bbc58135299af1c0dbda808094a94f5374fce5edbc8e2a8697c15331677e6ebf0b825209", + "expectException": "TransactionException.INSUFFICIENT_ACCOUNT_FUNDS", "rlp_decoded": { "blockHeader": { "parentHash": "0x93ba43976ae2b42938748d0dc8bac627e08d39b94334f071426217e432b139bf", "uncleHash": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "coinbase": "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "stateRoot": "0x682e97201201372e19a26af611381a7beec0f241a58f183a8d6433f5632bd67d", - "transactionsTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "transactionsTrie": "0xb5ffe01eaa51ee8246b2108e049e6e11dc0a1d99b4cc52966791ef9c40b8b863", "receiptTrie": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x00", @@ -287,8 +291,9 @@ "blobGasUsed": "0x00", "excessBlobGas": "0x00", "parentBeaconBlockRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", - "hash": "0x6ef6a053154da7e067734d8b7066e8784eb979005a969a02858c9ee6c26f0c04" + "hash": "0xae1843a7993f000f8867237424d871d4a243c6374bc26ccf8606ec47ee7d79cc" }, + "blocknumber": "1", "transactions": [ { "type": "0x00", @@ -348,9 +353,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Cancun-tx_after_withdrawals_block": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::TestUseValueInTx::test_use_value_in_tx[fork_Cancun-blockchain_test-tx_after_withdrawals_block]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/withdrawing_to_precompiles.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/withdrawing_to_precompiles.json index fa689a8f013..2a426d94e92 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/withdrawing_to_precompiles.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/withdrawing_to_precompiles.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-precompile=9-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_9-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -130,9 +131,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-precompile=9-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_9-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -267,9 +269,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-precompile=5-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_5-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -398,9 +401,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-precompile=5-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_5-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -535,9 +539,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Shanghai-precompile=6-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_6-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -666,9 +671,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Shanghai-precompile=6-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_6-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -803,9 +809,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Shanghai-precompile=7-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_7-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -934,9 +941,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Shanghai-precompile=7-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_7-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -1071,9 +1079,10 @@ }, "sealEngine": "NoProof" }, - "008-fork=Shanghai-precompile=8-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_8-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -1202,9 +1211,10 @@ }, "sealEngine": "NoProof" }, - "009-fork=Shanghai-precompile=8-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_8-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -1339,9 +1349,10 @@ }, "sealEngine": "NoProof" }, - "010-fork=Shanghai-precompile=1-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_1-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -1470,9 +1481,10 @@ }, "sealEngine": "NoProof" }, - "011-fork=Shanghai-precompile=1-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_1-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -1607,9 +1619,10 @@ }, "sealEngine": "NoProof" }, - "012-fork=Shanghai-precompile=2-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_2-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -1738,9 +1751,10 @@ }, "sealEngine": "NoProof" }, - "013-fork=Shanghai-precompile=2-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_2-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -1875,9 +1889,10 @@ }, "sealEngine": "NoProof" }, - "014-fork=Shanghai-precompile=3-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_3-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -2006,9 +2021,10 @@ }, "sealEngine": "NoProof" }, - "015-fork=Shanghai-precompile=3-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_3-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -2143,9 +2159,10 @@ }, "sealEngine": "NoProof" }, - "016-fork=Shanghai-precompile=4-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_4-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -2274,9 +2291,10 @@ }, "sealEngine": "NoProof" }, - "017-fork=Shanghai-precompile=4-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Shanghai-precompile_4-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -2411,9 +2429,10 @@ }, "sealEngine": "NoProof" }, - "018-fork=Cancun-precompile=10-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_10-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -2566,9 +2585,10 @@ }, "sealEngine": "NoProof" }, - "019-fork=Cancun-precompile=10-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_10-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -2727,9 +2747,10 @@ }, "sealEngine": "NoProof" }, - "020-fork=Cancun-precompile=9-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_9-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -2882,9 +2903,10 @@ }, "sealEngine": "NoProof" }, - "021-fork=Cancun-precompile=9-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_9-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -3043,9 +3065,10 @@ }, "sealEngine": "NoProof" }, - "022-fork=Cancun-precompile=5-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_5-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -3198,9 +3221,10 @@ }, "sealEngine": "NoProof" }, - "023-fork=Cancun-precompile=5-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_5-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -3359,9 +3383,10 @@ }, "sealEngine": "NoProof" }, - "024-fork=Cancun-precompile=6-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_6-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -3514,9 +3539,10 @@ }, "sealEngine": "NoProof" }, - "025-fork=Cancun-precompile=6-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_6-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -3675,9 +3701,10 @@ }, "sealEngine": "NoProof" }, - "026-fork=Cancun-precompile=7-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_7-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -3830,9 +3857,10 @@ }, "sealEngine": "NoProof" }, - "027-fork=Cancun-precompile=7-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_7-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -3991,9 +4019,10 @@ }, "sealEngine": "NoProof" }, - "028-fork=Cancun-precompile=8-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_8-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -4146,9 +4175,10 @@ }, "sealEngine": "NoProof" }, - "029-fork=Cancun-precompile=8-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_8-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -4307,9 +4337,10 @@ }, "sealEngine": "NoProof" }, - "030-fork=Cancun-precompile=1-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_1-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -4462,9 +4493,10 @@ }, "sealEngine": "NoProof" }, - "031-fork=Cancun-precompile=1-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_1-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -4623,9 +4655,10 @@ }, "sealEngine": "NoProof" }, - "032-fork=Cancun-precompile=2-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_2-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -4778,9 +4811,10 @@ }, "sealEngine": "NoProof" }, - "033-fork=Cancun-precompile=2-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_2-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -4939,9 +4973,10 @@ }, "sealEngine": "NoProof" }, - "034-fork=Cancun-precompile=3-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_3-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -5094,9 +5129,10 @@ }, "sealEngine": "NoProof" }, - "035-fork=Cancun-precompile=3-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_3-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -5255,9 +5291,10 @@ }, "sealEngine": "NoProof" }, - "036-fork=Cancun-precompile=4-amount=0": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_4-blockchain_test-amount_0]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -5410,9 +5447,10 @@ }, "sealEngine": "NoProof" }, - "037-fork=Cancun-precompile=4-amount=1": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_withdrawing_to_precompiles[fork_Cancun-precompile_4-blockchain_test-amount_1]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/zero_amount.json b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/zero_amount.json index bf9c4ee7b80..52041802797 100644 --- a/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/zero_amount.json +++ b/tests/execution-spec-tests/shanghai/eip4895_withdrawals/withdrawals/zero_amount.json @@ -1,7 +1,8 @@ { - "000-fork=Shanghai-two_withdrawals_no_value-two_withdrawals_no_value": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_zero_amount[fork_Shanghai-blockchain_test-two_withdrawals_no_value]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -100,9 +101,10 @@ }, "sealEngine": "NoProof" }, - "001-fork=Shanghai-three_withdrawals_one_with_value-three_withdrawals_one_with_value": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_zero_amount[fork_Shanghai-blockchain_test-three_withdrawals_one_with_value]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -213,9 +215,10 @@ }, "sealEngine": "NoProof" }, - "002-fork=Shanghai-four_withdrawals_one_with_value_one_with_max-four_withdrawals_one_with_value_one_with_max": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_zero_amount[fork_Shanghai-blockchain_test-four_withdrawals_one_with_value_one_with_max]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -338,9 +341,10 @@ }, "sealEngine": "NoProof" }, - "003-fork=Shanghai-four_withdrawals_one_with_value_one_with_max_reversed_order-four_withdrawals_one_with_value_one_with_max_reversed_order": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_zero_amount[fork_Shanghai-blockchain_test-four_withdrawals_one_with_value_one_with_max_reversed_order]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -463,9 +467,10 @@ }, "sealEngine": "NoProof" }, - "004-fork=Cancun-two_withdrawals_no_value-two_withdrawals_no_value": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_zero_amount[fork_Cancun-blockchain_test-two_withdrawals_no_value]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -584,9 +589,10 @@ }, "sealEngine": "NoProof" }, - "005-fork=Cancun-three_withdrawals_one_with_value-three_withdrawals_one_with_value": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_zero_amount[fork_Cancun-blockchain_test-three_withdrawals_one_with_value]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -717,9 +723,10 @@ }, "sealEngine": "NoProof" }, - "006-fork=Cancun-four_withdrawals_one_with_value_one_with_max-four_withdrawals_one_with_value_one_with_max": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_zero_amount[fork_Cancun-blockchain_test-four_withdrawals_one_with_value_one_with_max]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, @@ -862,9 +869,10 @@ }, "sealEngine": "NoProof" }, - "007-fork=Cancun-four_withdrawals_one_with_value_one_with_max_reversed_order-four_withdrawals_one_with_value_one_with_max_reversed_order": { + "tests/shanghai/eip4895_withdrawals/test_withdrawals.py::test_zero_amount[fork_Cancun-blockchain_test-four_withdrawals_one_with_value_one_with_max_reversed_order]": { "_info": { - "filling-transition-tool": "evm version 1.13.5-unstable-4d161dee-20231019", + "comment": "`execution-spec-tests` generated test", + "filling-transition-tool": "evm version 1.13.12-unstable-cd0770ea-20240124", "reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4895.md", "reference-spec-version": "81af3b60b632bc9c03513d1d137f25410e3f4d34" }, diff --git a/tests/fuzzers/bls12381/bls12381_fuzz.go b/tests/fuzzers/bls12381/bls12381_fuzz.go deleted file mode 100644 index bba317a23c4..00000000000 --- a/tests/fuzzers/bls12381/bls12381_fuzz.go +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -//go:build gofuzz - -package bls - -import ( - "bytes" - "crypto/rand" - "fmt" - "io" - "math/big" - - gnark "github.com/consensys/gnark-crypto/ecc/bls12-381" - "github.com/consensys/gnark-crypto/ecc/bls12-381/fp" - "github.com/consensys/gnark-crypto/ecc/bls12-381/fr" - "github.com/ledgerwatch/erigon/crypto/bls12381" -) - -func FuzzCrossPairing(data []byte) int { - input := bytes.NewReader(data) - - // get random G1 points - kpG1, cpG1, err := getG1Points(input) - if err != nil { - return 0 - } - - // get random G2 points - kpG2, cpG2, err := getG2Points(input) - if err != nil { - return 0 - } - - // compute pairing using geth - engine := bls12381.NewPairingEngine() - engine.AddPair(kpG1, kpG2) - kResult := engine.Result() - - // compute pairing using gnark - cResult, err := gnark.Pair([]gnark.G1Affine{*cpG1}, []gnark.G2Affine{*cpG2}) - if err != nil { - panic(fmt.Sprintf("gnark/bls12381 encountered error: %v", err)) - } - - // compare result - if !(bytes.Equal(cResult.Marshal(), bls12381.NewGT().ToBytes(kResult))) { - panic("pairing mismatch gnark / geth ") - } - - return 1 -} - -func FuzzCrossG1Add(data []byte) int { - input := bytes.NewReader(data) - - // get random G1 points - kp1, cp1, err := getG1Points(input) - if err != nil { - return 0 - } - - // get random G1 points - kp2, cp2, err := getG1Points(input) - if err != nil { - return 0 - } - - // compute kp = kp1 + kp2 - g1 := bls12381.NewG1() - kp := bls12381.PointG1{} - g1.Add(&kp, kp1, kp2) - - // compute cp = cp1 + cp2 - _cp1 := new(gnark.G1Jac).FromAffine(cp1) - _cp2 := new(gnark.G1Jac).FromAffine(cp2) - cp := new(gnark.G1Affine).FromJacobian(_cp1.AddAssign(_cp2)) - - // compare result - if !(bytes.Equal(cp.Marshal(), g1.ToBytes(&kp))) { - panic("G1 point addition mismatch gnark / geth ") - } - - return 1 -} - -func FuzzCrossG2Add(data []byte) int { - input := bytes.NewReader(data) - - // get random G2 points - kp1, cp1, err := getG2Points(input) - if err != nil { - return 0 - } - - // get random G2 points - kp2, cp2, err := getG2Points(input) - if err != nil { - return 0 - } - - // compute kp = kp1 + kp2 - g2 := bls12381.NewG2() - kp := bls12381.PointG2{} - g2.Add(&kp, kp1, kp2) - - // compute cp = cp1 + cp2 - _cp1 := new(gnark.G2Jac).FromAffine(cp1) - _cp2 := new(gnark.G2Jac).FromAffine(cp2) - cp := new(gnark.G2Affine).FromJacobian(_cp1.AddAssign(_cp2)) - - // compare result - if !(bytes.Equal(cp.Marshal(), g2.ToBytes(&kp))) { - panic("G2 point addition mismatch gnark / geth ") - } - - return 1 -} - -func FuzzCrossG1MultiExp(data []byte) int { - var ( - input = bytes.NewReader(data) - gethScalars []*big.Int - gnarkScalars []fr.Element - gethPoints []*bls12381.PointG1 - gnarkPoints []gnark.G1Affine - ) - // n random scalars (max 17) - for i := 0; i < 17; i++ { - // note that geth/crypto/bls12381 works only with scalars <= 32bytes - s, err := randomScalar(input, fr.Modulus()) - if err != nil { - break - } - // get a random G1 point as basis - kp1, cp1, err := getG1Points(input) - if err != nil { - break - } - gethScalars = append(gethScalars, s) - var gnarkScalar = &fr.Element{} - gnarkScalar = gnarkScalar.SetBigInt(s).FromMont() - gnarkScalars = append(gnarkScalars, *gnarkScalar) - - gethPoints = append(gethPoints, new(bls12381.PointG1).Set(kp1)) - gnarkPoints = append(gnarkPoints, *cp1) - } - if len(gethScalars) == 0 { - return 0 - } - // compute multi exponentiation - g1 := bls12381.NewG1() - kp := bls12381.PointG1{} - if _, err := g1.MultiExp(&kp, gethPoints, gethScalars); err != nil { - panic(fmt.Sprintf("G1 multi exponentiation errored (geth): %v", err)) - } - // note that geth/crypto/bls12381.MultiExp mutates the scalars slice (and sets all the scalars to zero) - - // gnark multi exp - cp := new(gnark.G1Affine) - cp.MultiExp(gnarkPoints, gnarkScalars) - - // compare result - if !(bytes.Equal(cp.Marshal(), g1.ToBytes(&kp))) { - panic("G1 multi exponentiation mismatch gnark / geth ") - } - - return 1 -} - -func getG1Points(input io.Reader) (*bls12381.PointG1, *gnark.G1Affine, error) { - // sample a random scalar - s, err := randomScalar(input, fp.Modulus()) - if err != nil { - return nil, nil, err - } - - // compute a random point - cp := new(gnark.G1Affine) - _, _, g1Gen, _ := gnark.Generators() - cp.ScalarMultiplication(&g1Gen, s) - cpBytes := cp.Marshal() - - // marshal gnark point -> geth point - g1 := bls12381.NewG1() - kp, err := g1.FromBytes(cpBytes) - if err != nil { - panic(fmt.Sprintf("Could not marshal gnark.G1 -> geth.G1: %v", err)) - } - if !bytes.Equal(g1.ToBytes(kp), cpBytes) { - panic("bytes(gnark.G1) != bytes(geth.G1)") - } - - return kp, cp, nil -} - -func getG2Points(input io.Reader) (*bls12381.PointG2, *gnark.G2Affine, error) { - // sample a random scalar - s, err := randomScalar(input, fp.Modulus()) - if err != nil { - return nil, nil, err - } - - // compute a random point - cp := new(gnark.G2Affine) - _, _, _, g2Gen := gnark.Generators() - cp.ScalarMultiplication(&g2Gen, s) - cpBytes := cp.Marshal() - - // marshal gnark point -> geth point - g2 := bls12381.NewG2() - kp, err := g2.FromBytes(cpBytes) - if err != nil { - panic(fmt.Sprintf("Could not marshal gnark.G2 -> geth.G2: %v", err)) - } - if !bytes.Equal(g2.ToBytes(kp), cpBytes) { - panic("bytes(gnark.G2) != bytes(geth.G2)") - } - - return kp, cp, nil -} - -func randomScalar(r io.Reader, max *big.Int) (k *big.Int, err error) { - for { - k, err = rand.Int(r, max) - if err != nil || k.Sign() > 0 { - return - } - } -} diff --git a/tests/fuzzers/bls12381/precompile_fuzzer.go b/tests/fuzzers/bls12381/precompile_fuzzer.go index 74c8c5954c2..ab1e08495ac 100644 --- a/tests/fuzzers/bls12381/precompile_fuzzer.go +++ b/tests/fuzzers/bls12381/precompile_fuzzer.go @@ -26,15 +26,15 @@ import ( ) const ( - blsG1Add = byte(10) - blsG1Mul = byte(11) - blsG1MultiExp = byte(12) - blsG2Add = byte(13) - blsG2Mul = byte(14) - blsG2MultiExp = byte(15) - blsPairing = byte(16) - blsMapG1 = byte(17) - blsMapG2 = byte(18) + blsG1Add = byte(0x0b) + blsG1Mul = byte(0x0c) + blsG1MultiExp = byte(0x0d) + blsG2Add = byte(0x0e) + blsG2Mul = byte(0x0f) + blsG2MultiExp = byte(0x10) + blsPairing = byte(0x11) + blsMapG1 = byte(0x12) + blsMapG2 = byte(0x13) ) func FuzzG1Add(data []byte) int { return fuzz(blsG1Add, data) } @@ -82,7 +82,7 @@ func checkInput(id byte, inputLen int) bool { // other values are reserved for future use. func fuzz(id byte, data []byte) int { // Even on bad input, it should not crash, so we still test the gas calc - precompile := vm.PrecompiledContractsBLS[libcommon.BytesToAddress([]byte{id})] + precompile := vm.PrecompiledContractsPrague[libcommon.BytesToAddress([]byte{id})] gas := precompile.RequiredGas(data) if !checkInput(id, len(data)) { return 0 diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g1_add_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g1_add_seed_corpus.zip deleted file mode 100644 index 16498c1cba8..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_g1_add_seed_corpus.zip and /dev/null differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g1_mul_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g1_mul_seed_corpus.zip deleted file mode 100644 index 57f9d6696d8..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_g1_mul_seed_corpus.zip and /dev/null differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g1_multiexp_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g1_multiexp_seed_corpus.zip deleted file mode 100644 index 7271f040f3b..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_g1_multiexp_seed_corpus.zip and /dev/null differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g2_add_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g2_add_seed_corpus.zip deleted file mode 100644 index cd5206ca0bc..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_g2_add_seed_corpus.zip and /dev/null differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g2_mul_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g2_mul_seed_corpus.zip deleted file mode 100644 index f784a5a3d7a..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_g2_mul_seed_corpus.zip and /dev/null differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_g2_multiexp_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_g2_multiexp_seed_corpus.zip deleted file mode 100644 index c205117a468..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_g2_multiexp_seed_corpus.zip and /dev/null differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_map_g1_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_map_g1_seed_corpus.zip deleted file mode 100644 index 70382fbe53d..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_map_g1_seed_corpus.zip and /dev/null differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_map_g2_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_map_g2_seed_corpus.zip deleted file mode 100644 index 67adc5b5e8d..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_map_g2_seed_corpus.zip and /dev/null differ diff --git a/tests/fuzzers/bls12381/testdata/fuzz_pairing_seed_corpus.zip b/tests/fuzzers/bls12381/testdata/fuzz_pairing_seed_corpus.zip deleted file mode 100644 index e24d2b0a52f..00000000000 Binary files a/tests/fuzzers/bls12381/testdata/fuzz_pairing_seed_corpus.zip and /dev/null differ diff --git a/tests/init.go b/tests/init.go index 6629cbb2d5d..660c9ffe5d8 100644 --- a/tests/init.go +++ b/tests/init.go @@ -221,7 +221,23 @@ var Forks = map[string]*chain.Config{ GrayGlacierBlock: big.NewInt(0), TerminalTotalDifficulty: big.NewInt(0), }, - "ArrowGlacierToMergeAtDiffC0000": { + "Paris": { + ChainID: big.NewInt(1), + HomesteadBlock: big.NewInt(0), + TangerineWhistleBlock: big.NewInt(0), + SpuriousDragonBlock: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + ArrowGlacierBlock: big.NewInt(0), + GrayGlacierBlock: big.NewInt(0), + TerminalTotalDifficulty: big.NewInt(0), + }, + "ArrowGlacierToParisAtDiffC0000": { ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), TangerineWhistleBlock: big.NewInt(0), @@ -254,7 +270,7 @@ var Forks = map[string]*chain.Config{ TerminalTotalDifficultyPassed: true, ShanghaiTime: big.NewInt(0), }, - "MergeToShanghaiAtTime15k": { + "ParisToShanghaiAtTime15k": { ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(0), TangerineWhistleBlock: big.NewInt(0), diff --git a/tests/init_test.go b/tests/init_test.go index 36ad4118285..d7cae958c26 100644 --- a/tests/init_test.go +++ b/tests/init_test.go @@ -25,11 +25,11 @@ import ( "reflect" "regexp" "runtime" + "slices" "strings" "testing" "github.com/ledgerwatch/erigon-lib/chain" - "golang.org/x/exp/slices" ) var ( diff --git a/tests/solidity/contracts/OpCodes.sol b/tests/solidity/contracts/OpCodes.sol index 9e3a0ebb020..b1e9f377569 100644 --- a/tests/solidity/contracts/OpCodes.sol +++ b/tests/solidity/contracts/OpCodes.sol @@ -225,7 +225,7 @@ contract OpCodes { //callcode assembly { let x := mload(0x40) //Find empty storage location using "free memory pointer" - mstore(x,sig) //Place signature at begining of empty storage + mstore(x,sig) //Place signature at beginning of empty storage mstore(add(x,0x04),a) // first address parameter. just after signature mstore(add(x,0x24),a) // 2nd address parameter - first padded. add 32 bytes (not 20 bytes) mstore(0x40,add(x,0x64)) // this is missing in other examples. Set free pointer before function call. so it is used by called function. diff --git a/tests/state_test.go b/tests/state_test.go index 844288364c2..0dfb32a8f14 100644 --- a/tests/state_test.go +++ b/tests/state_test.go @@ -28,7 +28,7 @@ import ( "testing" "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon/core/state/temporal" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon/core/vm" @@ -49,7 +49,7 @@ func TestState(t *testing.T) { st.skipLoad(`^stTimeConsuming/`) st.skipLoad(`.*vmPerformance/loop.*`) - _, db, _ := temporal.NewTestDB(t, datadir.New(t.TempDir()), nil) + _, db, _ := temporaltest.NewTestDB(t, datadir.New(t.TempDir())) st.walk(t, stateTestDir, func(t *testing.T, name string, test *StateTest) { for _, subtest := range test.Subtests() { subtest := subtest diff --git a/tests/state_test_util.go b/tests/state_test_util.go index 4100ae18663..76cdc908efd 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -26,6 +26,7 @@ import ( "strings" "github.com/holiman/uint256" + "github.com/ledgerwatch/erigon-lib/config3" "golang.org/x/crypto/sha3" "github.com/ledgerwatch/erigon-lib/chain" @@ -43,7 +44,6 @@ import ( "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/crypto" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/trie" @@ -201,7 +201,7 @@ func (t *StateTest) RunNoVerify(tx kv.RwTx, subtest StateSubtest, vmconfig vm.Co statedb := state.New(r) var w state.StateWriter - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") } else { w = state.NewPlainStateWriter(tx, nil, writeBlockNr) @@ -222,7 +222,7 @@ func (t *StateTest) RunNoVerify(tx kv.RwTx, subtest StateSubtest, vmconfig vm.Co return nil, libcommon.Hash{}, err } if len(post.Tx) != 0 { - txn, err := types.UnmarshalTransactionFromBinary(post.Tx) + txn, err := types.UnmarshalTransactionFromBinary(post.Tx, false /* blobTxnsAreWrappedWithBlobs */) if err != nil { return nil, libcommon.Hash{}, err } @@ -338,7 +338,7 @@ func MakePreState(rules *chain.Rules, tx kv.RwTx, accounts types.GenesisAlloc, b } var w state.StateWriter - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") } else { w = state.NewPlainStateWriter(tx, nil, blockNr+1) diff --git a/tests/testdata b/tests/testdata index 428f218d7d6..853b1e03b10 160000 --- a/tests/testdata +++ b/tests/testdata @@ -1 +1 @@ -Subproject commit 428f218d7d6f4a52544e12684afbfe6e2882ffbf +Subproject commit 853b1e03b1078d370614002851ba1ee9803d9fcf diff --git a/tools.go b/tools.go index 40a333de9d3..5458665badd 100644 --- a/tools.go +++ b/tools.go @@ -21,5 +21,7 @@ import ( _ "github.com/erigontech/mdbx-go/mdbxdist" _ "github.com/fjl/gencodec" _ "github.com/ugorji/go/codec/codecgen" + _ "go.uber.org/mock/mockgen" + _ "go.uber.org/mock/mockgen/model" _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" ) diff --git a/turbo/adapter/ethapi/api.go b/turbo/adapter/ethapi/api.go index d40b0c2e795..43d2d552568 100644 --- a/turbo/adapter/ethapi/api.go +++ b/turbo/adapter/ethapi/api.go @@ -24,10 +24,11 @@ import ( "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/holiman/uint256" + "github.com/ledgerwatch/log/v3" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutility" types2 "github.com/ledgerwatch/erigon-lib/types" - "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon/accounts/abi" "github.com/ledgerwatch/erigon/common/math" @@ -110,7 +111,7 @@ func (args *CallArgs) ToMessage(globalGasCap uint64, baseFee *uint256.Int) (type } gasFeeCap, gasTipCap = gasPrice, gasPrice } else { - // User specified 1559 gas feilds (or none), use those + // User specified 1559 gas fields (or none), use those gasFeeCap = new(uint256.Int) if args.MaxFeePerGas != nil { overflow := gasFeeCap.SetFromBig(args.MaxFeePerGas.ToInt()) @@ -132,7 +133,11 @@ func (args *CallArgs) ToMessage(globalGasCap uint64, baseFee *uint256.Int) (type } } if args.MaxFeePerBlobGas != nil { - maxFeePerBlobGas.SetFromBig(args.MaxFeePerBlobGas.ToInt()) + blobFee, overflow := uint256.FromBig(args.MaxFeePerBlobGas.ToInt()) + if overflow { + return types.Message{}, fmt.Errorf("args.MaxFeePerBlobGas higher than 2^256-1") + } + maxFeePerBlobGas = blobFee } } @@ -414,9 +419,10 @@ type RPCTransaction struct { Type hexutil.Uint64 `json:"type"` Accesses *types2.AccessList `json:"accessList,omitempty"` ChainID *hexutil.Big `json:"chainId,omitempty"` - V *hexutil.Big `json:"v,omitempty"` - R *hexutil.Big `json:"r,omitempty"` - S *hexutil.Big `json:"s,omitempty"` + V *hexutil.Big `json:"v"` + YParity *hexutil.Big `json:"yParity,omitempty"` + R *hexutil.Big `json:"r"` + S *hexutil.Big `json:"s"` BlobVersionedHashes []libcommon.Hash `json:"blobVersionedHashes,omitempty"` // deposit-tx only @@ -432,7 +438,7 @@ type RPCTransaction struct { func newRPCTransaction(tx types.Transaction, blockHash libcommon.Hash, blockNumber uint64, index uint64, baseFee *big.Int, receipt *types.Receipt) *RPCTransaction { // Determine the signer. For replay-protected transactions, use the most permissive // signer, because we assume that signers are backwards-compatible with old - // transactions. For non-protected transactions, the homestead signer signer is used + // transactions. For non-protected transactions, the homestead signer is used // because the return value of ChainId is zero for those transactions. chainId := uint256.NewInt(0) result := &RPCTransaction{ @@ -462,6 +468,7 @@ func newRPCTransaction(tx types.Transaction, blockHash libcommon.Hash, blockNumb chainId.Set(t.ChainID) result.ChainID = (*hexutil.Big)(chainId.ToBig()) result.GasPrice = (*hexutil.Big)(t.GasPrice.ToBig()) + result.YParity = (*hexutil.Big)(t.V.ToBig()) result.V = (*hexutil.Big)(t.V.ToBig()) result.R = (*hexutil.Big)(t.R.ToBig()) result.S = (*hexutil.Big)(t.S.ToBig()) @@ -471,6 +478,7 @@ func newRPCTransaction(tx types.Transaction, blockHash libcommon.Hash, blockNumb result.ChainID = (*hexutil.Big)(chainId.ToBig()) result.Tip = (*hexutil.Big)(t.Tip.ToBig()) result.FeeCap = (*hexutil.Big)(t.FeeCap.ToBig()) + result.YParity = (*hexutil.Big)(t.V.ToBig()) result.V = (*hexutil.Big)(t.V.ToBig()) result.R = (*hexutil.Big)(t.R.ToBig()) result.S = (*hexutil.Big)(t.S.ToBig()) @@ -502,6 +510,7 @@ func newRPCTransaction(tx types.Transaction, blockHash libcommon.Hash, blockNumb result.ChainID = (*hexutil.Big)(chainId.ToBig()) result.Tip = (*hexutil.Big)(t.Tip.ToBig()) result.FeeCap = (*hexutil.Big)(t.FeeCap.ToBig()) + result.YParity = (*hexutil.Big)(t.V.ToBig()) result.V = (*hexutil.Big)(t.V.ToBig()) result.R = (*hexutil.Big)(t.R.ToBig()) result.S = (*hexutil.Big)(t.S.ToBig()) diff --git a/turbo/app/README.md b/turbo/app/README.md index c7bc4b7f61d..6a80441e82b 100644 --- a/turbo/app/README.md +++ b/turbo/app/README.md @@ -31,7 +31,7 @@ The **uploader** is configured to minimize disk usage by doing the following: in addition to this it has the following performance related features: -* maximises the workers allocated to snaphot processing to improve thoughtput +* maximises the workers allocated to snapshot processing to improve thoughtput * Can be started from scratch by downloading the latest snapshots from the remote location to seed processing The following configuration can be used to upload blocks from genesis where: @@ -40,7 +40,7 @@ The following configuration can be used to upload blocks from genesis where: |---|---| | sync.loop.prune.limit=500000 | Sets the records to be pruned to the database to 500,000 per iteration (as opposed to 100) | | upload.location=r2:erigon-v2-snapshots-bor-mainnet | Specified the rclone loaction to upload snapshot to | -| upload.from=earliest | Sets the upload start location to be the earliest availible block, which will be 0 in the case of a fresh installtion, or specified by the last block in the chaindata db | +| upload.from=earliest | Sets the upload start location to be the earliest available block, which will be 0 in the case of a fresh installation, or specified by the last block in the chaindata db | | upload.snapshot.limit=1500000 | Tells the uploader to keep a maximum 1,500,000 blocks in the `snapshots` before deleting the aged snapshot | | snapshot.version=2 | Indivates the version to be appended to snapshot file names when they are creatated| diff --git a/turbo/app/backup_cmd.go b/turbo/app/backup_cmd.go index 92def80a850..5d74ea84ff9 100644 --- a/turbo/app/backup_cmd.go +++ b/turbo/app/backup_cmd.go @@ -2,17 +2,18 @@ package app import ( "fmt" - "github.com/ledgerwatch/erigon-lib/common" "os" "path/filepath" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv/backup" + "github.com/c2h5oh/datasize" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/cmd/utils/flags" - "github.com/ledgerwatch/erigon/turbo/backup" "github.com/ledgerwatch/erigon/turbo/debug" "github.com/urfave/cli/v2" ) @@ -54,7 +55,7 @@ var ( Required: true, } BackupLabelsFlag = cli.StringFlag{ - Name: "lables", + Name: "labels", Usage: "Name of component to backup. Example: chaindata,txpool,downloader", } BackupTablesFlag = cli.StringFlag{ @@ -76,7 +77,7 @@ CloudDrives (and ssd) have bad-latency and good-parallel-throughput - then havin ) func doBackup(cliCtx *cli.Context) error { - logger, _, err := debug.Setup(cliCtx, true /* rootLogger */) + logger, _, _, err := debug.Setup(cliCtx, true /* rootLogger */) if err != nil { return err } diff --git a/turbo/app/import_cmd.go b/turbo/app/import_cmd.go index 085b2dbb53c..92039a2f908 100644 --- a/turbo/app/import_cmd.go +++ b/turbo/app/import_cmd.go @@ -10,12 +10,18 @@ import ( "os/signal" "strings" "syscall" + "time" + "github.com/ledgerwatch/log/v3" + "github.com/urfave/cli/v2" + + "github.com/ledgerwatch/erigon-lib/direct" + "github.com/ledgerwatch/erigon-lib/gointerfaces/execution" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/wrap" + "github.com/ledgerwatch/erigon/consensus/merge" + "github.com/ledgerwatch/erigon/turbo/execution/eth1/eth1_chain_reader.go" "github.com/ledgerwatch/erigon/turbo/services" - "github.com/ledgerwatch/log/v3" - "github.com/urfave/cli/v2" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/core" @@ -54,8 +60,7 @@ func importChain(cliCtx *cli.Context) error { if cliCtx.NArg() < 1 { utils.Fatalf("This command requires an argument.") } - - logger, _, err := debug.Setup(cliCtx, true /* rootLogger */) + logger, _, _, err := debug.Setup(cliCtx, true /* rootLogger */) if err != nil { return err } @@ -70,7 +75,7 @@ func importChain(cliCtx *cli.Context) error { if err != nil { return err } - err = ethereum.Init(stack, ethCfg) + err = ethereum.Init(stack, ethCfg, ethCfg.Genesis.Config) if err != nil { return err } @@ -212,20 +217,63 @@ func missingBlocks(chainDB kv.RwDB, blocks []*types.Block, blockReader services. func InsertChain(ethereum *eth.Ethereum, chain *core.ChainPack, logger log.Logger) error { sentryControlServer := ethereum.SentryControlServer() initialCycle := false - for _, b := range chain.Blocks { sentryControlServer.Hd.AddMinedHeader(b.Header()) sentryControlServer.Bd.AddToPrefetch(b.Header(), b.RawBody()) } - sentryControlServer.Hd.MarkAllVerified() blockReader, _ := ethereum.BlockIO() - hook := stages.NewHook(ethereum.SentryCtx(), ethereum.ChainDB(), ethereum.Notifications(), ethereum.StagedSync(), blockReader, ethereum.ChainConfig(), logger, sentryControlServer.UpdateHead) + hook := stages.NewHook(ethereum.SentryCtx(), ethereum.ChainDB(), ethereum.Notifications(), ethereum.StagedSync(), blockReader, ethereum.ChainConfig(), logger, sentryControlServer.SetStatus) err := stages.StageLoopIteration(ethereum.SentryCtx(), ethereum.ChainDB(), wrap.TxContainer{}, ethereum.StagedSync(), initialCycle, logger, blockReader, hook, false) if err != nil { return err } + return insertPosChain(ethereum, chain, logger) +} + +func insertPosChain(ethereum *eth.Ethereum, chain *core.ChainPack, logger log.Logger) error { + posBlockStart := 0 + for i, b := range chain.Blocks { + if b.Header().Difficulty.Cmp(merge.ProofOfStakeDifficulty) == 0 { + posBlockStart = i + break + } + } + + if posBlockStart == chain.Length() { + return nil + } + + for i := posBlockStart; i < chain.Length(); i++ { + if err := chain.Blocks[i].HashCheck(); err != nil { + return err + } + } + + chainRW := eth1_chain_reader.NewChainReaderEth1(ethereum.ChainConfig(), direct.NewExecutionClientDirect(ethereum.ExecutionModule()), uint64(time.Hour)) + + ctx := context.Background() + if err := chainRW.InsertBlocksAndWait(ctx, chain.Blocks); err != nil { + return err + } + + tipHash := chain.TopBlock.Hash() + + status, _, lvh, err := chainRW.UpdateForkChoice(ctx, tipHash, tipHash, tipHash) + + if err != nil { + return err + } + + ethereum.ChainDB().Update(ethereum.SentryCtx(), func(tx kv.RwTx) error { + rawdb.WriteHeadBlockHash(tx, lvh) + return nil + }) + if status != execution.ExecutionStatus_Success { + return fmt.Errorf("insertion failed for block %d, code: %s", chain.Blocks[chain.Length()-1].NumberU64(), status.String()) + } + return nil } diff --git a/turbo/app/init_cmd.go b/turbo/app/init_cmd.go index 363f2825b64..497d0d83080 100644 --- a/turbo/app/init_cmd.go +++ b/turbo/app/init_cmd.go @@ -37,7 +37,7 @@ It expects the genesis file as argument.`, func initGenesis(cliCtx *cli.Context) error { var logger log.Logger var err error - if logger, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { + if logger, _, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { return err } // Make sure we have a valid genesis JSON diff --git a/turbo/app/make_app.go b/turbo/app/make_app.go index d4e5f17bbb2..a3e7af1a614 100644 --- a/turbo/app/make_app.go +++ b/turbo/app/make_app.go @@ -6,11 +6,13 @@ import ( "fmt" "strings" - "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon/turbo/logging" "github.com/ledgerwatch/log/v3" "github.com/urfave/cli/v2" + "github.com/ledgerwatch/erigon-lib/common/datadir" + "github.com/ledgerwatch/erigon/turbo/logging" + enode "github.com/ledgerwatch/erigon/turbo/node" + "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/node" "github.com/ledgerwatch/erigon/node/nodecfg" @@ -147,24 +149,28 @@ func doMigrateFlags(ctx *cli.Context) { } } -func NewNodeConfig(ctx *cli.Context) *nodecfg.Config { - nodeConfig := nodecfg.DefaultConfig +func NewNodeConfig(ctx *cli.Context, logger log.Logger) *nodecfg.Config { + nodeConfig := enode.NewNodConfigUrfave(ctx, logger) + // see simiar changes in `cmd/geth/config.go#defaultNodeConfig` if commit := params.GitCommit; commit != "" { nodeConfig.Version = params.VersionWithCommit(commit) } else { nodeConfig.Version = params.Version } + nodeConfig.IPCPath = "" // force-disable IPC endpoint nodeConfig.Name = "erigon" + if ctx.IsSet(utils.DataDirFlag.Name) { nodeConfig.Dirs = datadir.New(ctx.String(utils.DataDirFlag.Name)) } - return &nodeConfig + + return nodeConfig } func MakeConfigNodeDefault(cliCtx *cli.Context, logger log.Logger) *node.Node { - return makeConfigNode(cliCtx.Context, NewNodeConfig(cliCtx), logger) + return makeConfigNode(cliCtx.Context, NewNodeConfig(cliCtx, logger), logger) } func makeConfigNode(ctx context.Context, config *nodecfg.Config, logger log.Logger) *node.Node { diff --git a/turbo/app/snapshots_cmd.go b/turbo/app/snapshots_cmd.go index c4419b11444..ab1812eda3f 100644 --- a/turbo/app/snapshots_cmd.go +++ b/turbo/app/snapshots_cmd.go @@ -15,31 +15,33 @@ import ( "time" "github.com/c2h5oh/datasize" - "github.com/ledgerwatch/erigon-lib/chain/snapcfg" - "github.com/ledgerwatch/erigon-lib/common/dbg" - "github.com/ledgerwatch/erigon-lib/common/dir" - "github.com/ledgerwatch/erigon-lib/metrics" + "github.com/ledgerwatch/erigon-lib/config3" + "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/log/v3" "github.com/urfave/cli/v2" "golang.org/x/sync/semaphore" "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" - "github.com/ledgerwatch/erigon-lib/compress" + "github.com/ledgerwatch/erigon-lib/common/dbg" + "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/etl" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcfg" "github.com/ledgerwatch/erigon-lib/kv/mdbx" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" + "github.com/ledgerwatch/erigon-lib/metrics" + "github.com/ledgerwatch/erigon-lib/seg" libstate "github.com/ledgerwatch/erigon-lib/state" - "github.com/ledgerwatch/erigon/cmd/hack/tool/fromdb" "github.com/ledgerwatch/erigon/cmd/utils" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/rawdb/blockio" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" "github.com/ledgerwatch/erigon/diagnostics" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/ethconfig/estimate" + "github.com/ledgerwatch/erigon/eth/integrity" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/params" erigoncli "github.com/ledgerwatch/erigon/turbo/cli" @@ -61,7 +63,7 @@ var snapshotCommand = cli.Command{ Name: "snapshots", Usage: `Managing snapshots (historical data partitions)`, Before: func(context *cli.Context) error { - _, _, err := debug.Setup(context, true /* rootLogger */) + _, _, _, err := debug.Setup(context, true /* rootLogger */) if err != nil { return err } @@ -71,7 +73,7 @@ var snapshotCommand = cli.Command{ { Name: "index", Action: doIndicesCommand, - Usage: "Create all indices for snapshots", + Usage: "Create all missed indices for snapshots. It also removing unsupported versions of existing indices and re-build them", Flags: joinFlags([]cli.Flag{ &utils.DataDirFlag, &SnapshotFromFlag, @@ -87,7 +89,6 @@ var snapshotCommand = cli.Command{ &SnapshotFromFlag, &SnapshotToFlag, &SnapshotEveryFlag, - &SnapshotVersionFlag, }), }, { @@ -96,7 +97,6 @@ var snapshotCommand = cli.Command{ Usage: "run erigon in snapshot upload mode (no execution)", Flags: joinFlags(erigoncli.DefaultFlags, []cli.Flag{ - &SnapshotVersionFlag, &erigoncli.UploadLocationFlag, &erigoncli.UploadFromFlag, &erigoncli.FrozenBlockLimitFlag, @@ -190,11 +190,6 @@ var ( Usage: "Do operation every N blocks", Value: 1_000, } - SnapshotVersionFlag = cli.IntFlag{ - Name: "snapshot.version", - Usage: "Snapshot files version.", - Value: 1, - } SnapshotRebuildFlag = cli.BoolFlag{ Name: "rebuild", Usage: "Force rebuild", @@ -202,7 +197,7 @@ var ( ) func doIntegrity(cliCtx *cli.Context) error { - logger, _, err := debug.Setup(cliCtx, true /* root logger */) + logger, _, _, err := debug.Setup(cliCtx, true /* root logger */) if err != nil { return err } @@ -213,20 +208,25 @@ func doIntegrity(cliCtx *cli.Context) error { defer chainDB.Close() cfg := ethconfig.NewSnapCfg(true, false, true) - chainConfig := fromdb.ChainConfig(chainDB) - blockSnaps, borSnaps, blockRetire, agg, err := openSnaps(ctx, cfg, dirs, snapcfg.KnownCfg(chainConfig.ChainName, 0).Version, chainDB, logger) + + blockSnaps, borSnaps, caplinSnaps, blockRetire, agg, err := openSnaps(ctx, cfg, dirs, chainDB, logger) if err != nil { return err } defer blockSnaps.Close() defer borSnaps.Close() + defer caplinSnaps.Close() defer agg.Close() blockReader, _ := blockRetire.IO() - if err := blockReader.(*freezeblocks.BlockReader).IntegrityTxnID(false); err != nil { + if err := integrity.SnapBlocksRead(chainDB, blockReader, ctx, false); err != nil { return err } + //if err := blockReader.IntegrityTxnID(false); err != nil { + // return err + //} + //if err := integrity.E3HistoryNoSystemTxs(ctx, chainDB, agg); err != nil { // return err //} @@ -237,17 +237,20 @@ func doIntegrity(cliCtx *cli.Context) error { func doDiff(cliCtx *cli.Context) error { defer log.Info("Done") srcF, dstF := cliCtx.String("src"), cliCtx.String("dst") - src, err := compress.NewDecompressor(srcF) + src, err := seg.NewDecompressor(srcF) if err != nil { return err } defer src.Close() - dst, err := compress.NewDecompressor(dstF) + dst, err := seg.NewDecompressor(dstF) if err != nil { return err } defer dst.Close() + defer src.EnableReadAhead().DisableReadAhead() + defer dst.EnableReadAhead().DisableReadAhead() + i := 0 srcG, dstG := src.MakeGetter(), dst.MakeGetter() var srcBuf, dstBuf []byte @@ -265,7 +268,7 @@ func doDiff(cliCtx *cli.Context) error { } func doDecompressSpeed(cliCtx *cli.Context) error { - logger, _, err := debug.Setup(cliCtx, true /* rootLogger */) + logger, _, _, err := debug.Setup(cliCtx, true /* rootLogger */) if err != nil { return err } @@ -275,7 +278,7 @@ func doDecompressSpeed(cliCtx *cli.Context) error { } f := args.First() - decompressor, err := compress.NewDecompressor(f) + decompressor, err := seg.NewDecompressor(f) if err != nil { return err } @@ -307,7 +310,7 @@ func doDecompressSpeed(cliCtx *cli.Context) error { func doRam(cliCtx *cli.Context) error { var logger log.Logger var err error - if logger, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { + if logger, _, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { return err } defer logger.Info("Done") @@ -320,7 +323,7 @@ func doRam(cliCtx *cli.Context) error { dbg.ReadMemStats(&m) before := m.Alloc logger.Info("RAM before open", "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys)) - decompressor, err := compress.NewDecompressor(f) + decompressor, err := seg.NewDecompressor(f) if err != nil { return err } @@ -331,7 +334,7 @@ func doRam(cliCtx *cli.Context) error { } func doIndicesCommand(cliCtx *cli.Context) error { - logger, _, err := debug.Setup(cliCtx, true /* rootLogger */) + logger, _, _, err := debug.Setup(cliCtx, true /* rootLogger */) if err != nil { return err } @@ -349,19 +352,27 @@ func doIndicesCommand(cliCtx *cli.Context) error { panic("not implemented") } + if err := freezeblocks.RemoveIncompatibleIndices(dirs.Snap); err != nil { + return err + } + cfg := ethconfig.NewSnapCfg(true, false, true) chainConfig := fromdb.ChainConfig(chainDB) - blockSnaps, borSnaps, br, agg, err := openSnaps(ctx, cfg, dirs, snapcfg.KnownCfg(chainConfig.ChainName, 0).Version, chainDB, logger) - + blockSnaps, borSnaps, caplinSnaps, br, agg, err := openSnaps(ctx, cfg, dirs, chainDB, logger) if err != nil { return err } defer blockSnaps.Close() defer borSnaps.Close() + defer caplinSnaps.Close() defer agg.Close() + if err := br.BuildMissedIndicesIfNeed(ctx, "Indexing", nil, chainConfig); err != nil { return err } + if err := caplinSnaps.BuildMissingIndices(ctx, logger); err != nil { + return err + } err = agg.BuildMissedIndices(ctx, estimate.IndexSnapshot.Workers()) if err != nil { return err @@ -370,23 +381,38 @@ func doIndicesCommand(cliCtx *cli.Context) error { return nil } -func openSnaps(ctx context.Context, cfg ethconfig.BlocksFreezing, dirs datadir.Dirs, version uint8, chainDB kv.RwDB, logger log.Logger) ( - blockSnaps *freezeblocks.RoSnapshots, borSnaps *freezeblocks.BorRoSnapshots, br *freezeblocks.BlockRetire, agg *libstate.AggregatorV3, err error, +func openSnaps(ctx context.Context, cfg ethconfig.BlocksFreezing, dirs datadir.Dirs, chainDB kv.RwDB, logger log.Logger) ( + blockSnaps *freezeblocks.RoSnapshots, borSnaps *freezeblocks.BorRoSnapshots, csn *freezeblocks.CaplinSnapshots, + br *freezeblocks.BlockRetire, agg *libstate.Aggregator, err error, ) { - blockSnaps = freezeblocks.NewRoSnapshots(cfg, dirs.Snap, version, logger) + blockSnaps = freezeblocks.NewRoSnapshots(cfg, dirs.Snap, 0, logger) if err = blockSnaps.ReopenFolder(); err != nil { return } blockSnaps.LogStat("open") - borSnaps = freezeblocks.NewBorRoSnapshots(cfg, dirs.Snap, version, logger) + borSnaps = freezeblocks.NewBorRoSnapshots(cfg, dirs.Snap, 0, logger) if err = borSnaps.ReopenFolder(); err != nil { return } - borSnaps.LogStat("open") + + chainConfig := fromdb.ChainConfig(chainDB) + + var beaconConfig *clparams.BeaconChainConfig + _, beaconConfig, _, err = clparams.GetConfigsByNetworkName(chainConfig.ChainName) + if err != nil { + return + } + + csn = freezeblocks.NewCaplinSnapshots(cfg, beaconConfig, dirs, logger) + if err = csn.ReopenFolder(); err != nil { + return + } + + borSnaps.LogStat("bor:open") agg = openAgg(ctx, dirs, chainDB, logger) err = chainDB.View(ctx, func(tx kv.Tx) error { - ac := agg.MakeContext() + ac := agg.BeginFilesRo() defer ac.Close() //ac.LogStats(tx, func(endTxNumMinimax uint64) uint64 { // _, histBlockNumProgress, _ := rawdbv3.TxNums.FindBlockNum(tx, endTxNumMinimax) @@ -400,7 +426,6 @@ func openSnaps(ctx context.Context, cfg ethconfig.BlocksFreezing, dirs datadir.D blockReader := freezeblocks.NewBlockReader(blockSnaps, borSnaps) blockWriter := blockio.NewBlockWriter(fromdb.HistV3(chainDB)) - chainConfig := fromdb.ChainConfig(chainDB) br = freezeblocks.NewBlockRetire(estimate.CompressSnapshot.Workers(), dirs, blockReader, blockWriter, chainDB, chainConfig, nil, logger) return } @@ -408,7 +433,7 @@ func openSnaps(ctx context.Context, cfg ethconfig.BlocksFreezing, dirs datadir.D func doUncompress(cliCtx *cli.Context) error { var logger log.Logger var err error - if logger, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { + if logger, _, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { return err } ctx := cliCtx.Context @@ -419,7 +444,7 @@ func doUncompress(cliCtx *cli.Context) error { } f := args.First() - decompressor, err := compress.NewDecompressor(f) + decompressor, err := seg.NewDecompressor(f) if err != nil { return err } @@ -461,7 +486,7 @@ func doUncompress(cliCtx *cli.Context) error { func doCompress(cliCtx *cli.Context) error { var err error var logger log.Logger - if logger, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { + if logger, _, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { return err } ctx := cliCtx.Context @@ -473,7 +498,7 @@ func doCompress(cliCtx *cli.Context) error { f := args.First() dirs := datadir.New(cliCtx.String(utils.DataDirFlag.Name)) logger.Info("file", "datadir", dirs.DataDir, "f", f) - c, err := compress.NewCompressor(ctx, "compress", f, dirs.Tmp, compress.MinPatternScore, estimate.CompressSnapshot.Workers(), log.LvlInfo, logger) + c, err := seg.NewCompressor(ctx, "compress", f, dirs.Tmp, seg.MinPatternScore, estimate.CompressSnapshot.Workers(), log.LvlInfo, logger) if err != nil { return err } @@ -511,7 +536,7 @@ func doCompress(cliCtx *cli.Context) error { func doRetireCommand(cliCtx *cli.Context) error { var logger log.Logger var err error - if logger, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { + if logger, _, _, err = debug.Setup(cliCtx, true /* rootLogger */); err != nil { return err } defer logger.Info("Done") @@ -521,27 +546,27 @@ func doRetireCommand(cliCtx *cli.Context) error { from := cliCtx.Uint64(SnapshotFromFlag.Name) to := cliCtx.Uint64(SnapshotToFlag.Name) every := cliCtx.Uint64(SnapshotEveryFlag.Name) - version := uint8(cliCtx.Int(SnapshotVersionFlag.Name)) - if version != 0 { - snapcfg.SnapshotVersion(version) - } db := dbCfg(kv.ChainDB, dirs.Chaindata).MustOpen() defer db.Close() cfg := ethconfig.NewSnapCfg(true, false, true) - blockSnaps, borSnaps, br, agg, err := openSnaps(ctx, cfg, dirs, version, db, logger) + blockSnaps, borSnaps, caplinSnaps, br, agg, err := openSnaps(ctx, cfg, dirs, db, logger) if err != nil { return err } defer blockSnaps.Close() defer borSnaps.Close() + defer caplinSnaps.Close() defer agg.Close() chainConfig := fromdb.ChainConfig(db) if err := br.BuildMissedIndicesIfNeed(ctx, "retire", nil, chainConfig); err != nil { return err } + if err := caplinSnaps.BuildMissingIndices(ctx, logger); err != nil { + return err + } agg.CleanDir() @@ -552,7 +577,7 @@ func doRetireCommand(cliCtx *cli.Context) error { return err }) blockReader, _ := br.IO() - from2, to2, ok := freezeblocks.CanRetire(forwardProgress, blockReader.FrozenBlocks()) + from2, to2, ok := freezeblocks.CanRetire(forwardProgress, blockReader.FrozenBlocks(), coresnaptype.Enums.Headers, nil) if ok { from, to, every = from2, to2, to2-from2 } @@ -592,7 +617,7 @@ func doRetireCommand(cliCtx *cli.Context) error { for i := 0; i < 1024; i++ { if err := db.UpdateNosync(ctx, func(tx kv.RwTx) error { agg.SetTx(tx) - if err = agg.Prune(ctx, ethconfig.HistoryV3AggregationStep/2); err != nil { + if err = agg.Prune(ctx, config3.HistoryV3AggregationStep/2); err != nil { return err } return err @@ -638,7 +663,7 @@ func doRetireCommand(cliCtx *cli.Context) error { for i := 0; i < 1024; i++ { if err := db.UpdateNosync(ctx, func(tx kv.RwTx) error { agg.SetTx(tx) - if err = agg.Prune(ctx, ethconfig.HistoryV3AggregationStep/10); err != nil { + if err = agg.Prune(ctx, config3.HistoryV3AggregationStep/10); err != nil { return err } return err @@ -660,8 +685,9 @@ func doUploaderCommand(cliCtx *cli.Context) error { var logger log.Logger var err error var metricsMux *http.ServeMux + var pprofMux *http.ServeMux - if logger, metricsMux, err = debug.Setup(cliCtx, true /* root logger */); err != nil { + if logger, metricsMux, pprofMux, err = debug.Setup(cliCtx, true /* root logger */); err != nil { return err } @@ -671,10 +697,6 @@ func doUploaderCommand(cliCtx *cli.Context) error { erigonInfoGauge := metrics.GetOrCreateGauge(fmt.Sprintf(`erigon_info{version="%s",commit="%s"}`, params.Version, params.GitCommit)) erigonInfoGauge.Set(1) - if version := uint8(cliCtx.Int(SnapshotVersionFlag.Name)); version != 0 { - snapcfg.SnapshotVersion(version) - } - nodeCfg := node.NewNodConfigUrfave(cliCtx, logger) if err := datadir.ApplyMigrations(nodeCfg.Dirs); err != nil { return err @@ -688,9 +710,7 @@ func doUploaderCommand(cliCtx *cli.Context) error { return err } - if metricsMux != nil { - diagnostics.Setup(cliCtx, metricsMux, ethNode) - } + diagnostics.Setup(cliCtx, ethNode, metricsMux, pprofMux) err = ethNode.Serve() if err != nil { @@ -725,12 +745,12 @@ func doBodiesDecrement(cliCtx *cli.Context) error { l = append(l, f) } migrateSingleBody := func(srcF, dstF string) error { - src, err := compress.NewDecompressor(srcF) + src, err := seg.NewDecompressor(srcF) if err != nil { return err } defer src.Close() - dst, err := compress.NewCompressor(ctx, "compress", dstF, dirs.Tmp, compress.MinPatternScore, estimate.CompressSnapshot.Workers(), log.LvlInfo, logger) + dst, err := seg.NewCompressor(ctx, "compress", dstF, dirs.Tmp, compress.MinPatternScore, estimate.CompressSnapshot.Workers(), log.LvlInfo, logger) if err != nil { return err } @@ -797,8 +817,8 @@ func dbCfg(label kv.Label, path string) mdbx.MdbxOpts { opts = opts.Accede() return opts } -func openAgg(ctx context.Context, dirs datadir.Dirs, chainDB kv.RwDB, logger log.Logger) *libstate.AggregatorV3 { - agg, err := libstate.NewAggregatorV3(ctx, dirs.Snap, dirs.Tmp, ethconfig.HistoryV3AggregationStep, chainDB, logger) +func openAgg(ctx context.Context, dirs datadir.Dirs, chainDB kv.RwDB, logger log.Logger) *libstate.Aggregator { + agg, err := libstate.NewAggregator(ctx, dirs.Snap, dirs.Tmp, config3.HistoryV3AggregationStep, chainDB, logger) if err != nil { panic(err) } diff --git a/turbo/app/support_cmd.go b/turbo/app/support_cmd.go index 5bbb44f5581..7801e92ce67 100644 --- a/turbo/app/support_cmd.go +++ b/turbo/app/support_cmd.go @@ -20,6 +20,7 @@ import ( "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" "github.com/ledgerwatch/erigon-lib/gointerfaces/types" "github.com/ledgerwatch/erigon/rpc" + "github.com/ledgerwatch/erigon/turbo/debug" "github.com/ledgerwatch/log/v3" "github.com/urfave/cli/v2" ) @@ -36,13 +37,17 @@ var wsBufferPool = new(sync.Pool) var ( diagnosticsURLFlag = cli.StringFlag{ - Name: "diagnostics.addr", - Usage: "Address of the diagnostics system provided by the support team, include unique session PIN", + Name: "diagnostics.addr", + Usage: "Address of the diagnostics system provided by the support team, include unique session PIN", + Required: false, + Value: "localhost:8080", } debugURLsFlag = cli.StringSliceFlag{ - Name: "debug.addrs", - Usage: "Comma separated list of URLs to the debug endpoints thats are being diagnosed", + Name: "debug.addrs", + Usage: "Comma separated list of URLs to the debug endpoints thats are being diagnosed", + Required: false, + Value: cli.NewStringSlice("localhost:6060"), } insecureFlag = cli.BoolFlag{ @@ -61,12 +66,19 @@ var supportCommand = cli.Command{ Name: "support", Usage: "Connect Erigon instance to a diagnostics system for support", ArgsUsage: "--diagnostics.addr --ids --metrics.urls ", - Flags: []cli.Flag{ + Before: func(cliCtx *cli.Context) error { + _, _, _, err := debug.Setup(cliCtx, true /* rootLogger */) + if err != nil { + return err + } + return nil + }, + Flags: append([]cli.Flag{ &debugURLsFlag, &diagnosticsURLFlag, &sessionsFlag, &insecureFlag, - }, + }, debug.Flags...), //Category: "SUPPORT COMMANDS", Description: `The support command connects a running Erigon instances to a diagnostics system specified by the URL.`, } @@ -173,7 +185,7 @@ func tunnel(ctx context.Context, cancel context.CancelFunc, sigs chan os.Signal, nodes := map[string]*node{} for _, debugURL := range debugURLs { - debugResponse, err := metricsClient.Get(debugURL + "/debug/nodeinfo") + debugResponse, err := metricsClient.Get(debugURL + "/debug/diag/nodeinfo") if err != nil { return err @@ -314,7 +326,7 @@ func tunnel(ctx context.Context, cancel context.CancelFunc, sigs chan os.Signal, queryString = "?" + nodeRequest.QueryParams.Encode() } - debugURL := node.debugURL + "/debug/" + requests[0].Method + queryString + debugURL := node.debugURL + "/debug/diag/" + requests[0].Method + queryString debugResponse, err := metricsClient.Get(debugURL) if err != nil { diff --git a/turbo/cli/default_flags.go b/turbo/cli/default_flags.go index e2891a49798..47723db0266 100644 --- a/turbo/cli/default_flags.go +++ b/turbo/cli/default_flags.go @@ -20,6 +20,7 @@ var DefaultFlags = []cli.Flag{ &utils.TxPoolBlobPriceBumpFlag, &utils.TxPoolAccountSlotsFlag, &utils.TxPoolBlobSlotsFlag, + &utils.TxPoolTotalBlobPoolLimit, &utils.TxPoolGlobalSlotsFlag, &utils.TxPoolGlobalBaseFeeSlotsFlag, &utils.TxPoolAccountQueueFlag, @@ -67,6 +68,7 @@ var DefaultFlags = []cli.Flag{ &utils.WSEnabledFlag, &utils.WsCompressionFlag, &utils.HTTPTraceFlag, + &utils.HTTPDebugSingleFlag, &utils.StateCacheFlag, &utils.RpcBatchConcurrencyFlag, &utils.RpcStreamingDisableFlag, @@ -88,6 +90,8 @@ var DefaultFlags = []cli.Flag{ &AuthRpcWriteTimeoutFlag, &AuthRpcIdleTimeoutFlag, &EvmCallTimeoutFlag, + &OverlayGetLogsFlag, + &OverlayReplayBlockFlag, &utils.SnapKeepBlocksFlag, &utils.SnapStopFlag, @@ -126,7 +130,6 @@ var DefaultFlags = []cli.Flag{ &utils.GpoIgnoreGasPriceFlag, &utils.GpoMinSuggestedPriorityFeeFlag, &utils.InsecureUnlockAllowedFlag, - &utils.HistoryV3Flag, &utils.IdentityFlag, &utils.CliqueSnapshotCheckpointIntervalFlag, &utils.CliqueSnapshotInmemorySnapshotsFlag, @@ -140,6 +143,7 @@ var DefaultFlags = []cli.Flag{ &utils.MinerExtraDataFlag, &utils.MinerNoVerfiyFlag, &utils.MinerSigningKeyFileFlag, + &utils.MinerRecommitIntervalFlag, &utils.SentryAddrFlag, &utils.SentryLogPeerInfoFlag, &utils.DownloaderAddrFlag, @@ -154,8 +158,11 @@ var DefaultFlags = []cli.Flag{ &utils.BorBlockPeriodFlag, &utils.BorBlockSizeFlag, &utils.WithHeimdallMilestones, + &utils.WithHeimdallWaypoints, + &utils.PolygonSyncFlag, &utils.EthStatsURLFlag, &utils.OverrideCancunFlag, + &utils.OverridePragueFlag, &utils.OverrideOptimismCanyonFlag, &utils.OverrideOptimismEcotoneFlag, &utils.OverrideOptimismFjordFlag, @@ -174,6 +181,14 @@ var DefaultFlags = []cli.Flag{ &utils.SilkwormExecutionFlag, &utils.SilkwormRpcDaemonFlag, &utils.SilkwormSentryFlag, + &utils.SilkwormVerbosityFlag, + &utils.SilkwormNumContextsFlag, + &utils.SilkwormRpcLogEnabledFlag, + &utils.SilkwormRpcLogMaxFileSizeFlag, + &utils.SilkwormRpcLogMaxFilesFlag, + &utils.SilkwormRpcLogDumpResponseFlag, + &utils.SilkwormRpcNumWorkersFlag, + &utils.SilkwormRpcJsonCompatibilityFlag, &utils.BeaconAPIFlag, &utils.BeaconApiAddrFlag, @@ -187,6 +202,8 @@ var DefaultFlags = []cli.Flag{ &utils.BeaconApiIdleTimeoutFlag, &utils.CaplinBackfillingFlag, + &utils.CaplinBlobBackfillingFlag, + &utils.CaplinDisableBlobPruningFlag, &utils.CaplinArchiveFlag, &utils.TrustedSetupFile, diff --git a/turbo/cli/flags.go b/turbo/cli/flags.go index 083fc8ee272..003c067571c 100644 --- a/turbo/cli/flags.go +++ b/turbo/cli/flags.go @@ -234,6 +234,18 @@ var ( Value: rpccfg.DefaultEvmCallTimeout, } + OverlayGetLogsFlag = cli.DurationFlag{ + Name: "rpc.overlay.getlogstimeout", + Usage: "Maximum amount of time to wait for the answer from the overlay_getLogs call.", + Value: rpccfg.DefaultOverlayGetLogsTimeout, + } + + OverlayReplayBlockFlag = cli.DurationFlag{ + Name: "rpc.overlay.replayblocktimeout", + Usage: "Maximum amount of time to wait for the answer to replay a single block when called from an overlay_getLogs call.", + Value: rpccfg.DefaultOverlayReplayBlockTimeout, + } + TxPoolCommitEvery = cli.DurationFlag{ Name: "txpool.commit.every", Usage: "How often transactions should be committed to the storage", @@ -242,8 +254,13 @@ var ( ) func ApplyFlagsForEthConfig(ctx *cli.Context, cfg *ethconfig.Config, logger log.Logger) { + chainId := cfg.NetworkID + if cfg.Genesis != nil { + chainId = cfg.Genesis.Config.ChainID.Uint64() + } + mode, err := prune.FromCli( - cfg.Genesis.Config.ChainID.Uint64(), + chainId, ctx.String(PruneFlag.Name), ctx.Uint64(PruneHistoryFlag.Name), ctx.Uint64(PruneReceiptFlag.Name), @@ -376,7 +393,12 @@ func ApplyFlagsForEthConfigCobra(f *pflag.FlagSet, cfg *ethconfig.Config) { beforeC = *v } - mode, err := prune.FromCli(cfg.Genesis.Config.ChainID.Uint64(), *v, exactH, exactR, exactT, exactC, beforeH, beforeR, beforeT, beforeC, experiments) + chainId := cfg.NetworkID + if cfg.Genesis != nil { + chainId = cfg.Genesis.Config.ChainID.Uint64() + } + + mode, err := prune.FromCli(chainId, *v, exactH, exactR, exactT, exactC, beforeH, beforeR, beforeT, beforeC, experiments) if err != nil { utils.Fatalf(fmt.Sprintf("error while parsing mode: %v", err)) } @@ -440,6 +462,7 @@ func setEmbeddedRpcDaemon(ctx *cli.Context, cfg *nodecfg.Config, logger log.Logg AuthRpcPort: ctx.Int(utils.AuthRpcPort.Name), JWTSecretPath: jwtSecretPath, TraceRequests: ctx.Bool(utils.HTTPTraceFlag.Name), + DebugSingleRequest: ctx.Bool(utils.HTTPDebugSingleFlag.Name), HttpCORSDomain: libcommon.CliString2Array(ctx.String(utils.HTTPCORSDomainFlag.Name)), HttpVirtualHost: libcommon.CliString2Array(ctx.String(utils.HTTPVirtualHostsFlag.Name)), AuthRpcVirtualHost: libcommon.CliString2Array(ctx.String(utils.AuthRpcVirtualHostsFlag.Name)), @@ -454,20 +477,24 @@ func setEmbeddedRpcDaemon(ctx *cli.Context, cfg *nodecfg.Config, logger log.Logg WriteTimeout: ctx.Duration(AuthRpcWriteTimeoutFlag.Name), IdleTimeout: ctx.Duration(HTTPIdleTimeoutFlag.Name), }, - EvmCallTimeout: ctx.Duration(EvmCallTimeoutFlag.Name), - WebsocketPort: ctx.Int(utils.WSPortFlag.Name), - WebsocketEnabled: ctx.IsSet(utils.WSEnabledFlag.Name), - RpcBatchConcurrency: ctx.Uint(utils.RpcBatchConcurrencyFlag.Name), - RpcStreamingDisable: ctx.Bool(utils.RpcStreamingDisableFlag.Name), - DBReadConcurrency: ctx.Int(utils.DBReadConcurrencyFlag.Name), - RpcAllowListFilePath: ctx.String(utils.RpcAccessListFlag.Name), - Gascap: ctx.Uint64(utils.RpcGasCapFlag.Name), - MaxTraces: ctx.Uint64(utils.TraceMaxtracesFlag.Name), - TraceCompatibility: ctx.Bool(utils.RpcTraceCompatFlag.Name), - BatchLimit: ctx.Int(utils.RpcBatchLimit.Name), - ReturnDataLimit: ctx.Int(utils.RpcReturnDataLimit.Name), - AllowUnprotectedTxs: ctx.Bool(utils.AllowUnprotectedTxs.Name), - MaxGetProofRewindBlockCount: ctx.Int(utils.RpcMaxGetProofRewindBlockCount.Name), + EvmCallTimeout: ctx.Duration(EvmCallTimeoutFlag.Name), + OverlayGetLogsTimeout: ctx.Duration(OverlayGetLogsFlag.Name), + OverlayReplayBlockTimeout: ctx.Duration(OverlayReplayBlockFlag.Name), + WebsocketPort: ctx.Int(utils.WSPortFlag.Name), + WebsocketEnabled: ctx.IsSet(utils.WSEnabledFlag.Name), + WebsocketSubscribeLogsChannelSize: ctx.Int(utils.WSSubscribeLogsChannelSize.Name), + RpcBatchConcurrency: ctx.Uint(utils.RpcBatchConcurrencyFlag.Name), + RpcStreamingDisable: ctx.Bool(utils.RpcStreamingDisableFlag.Name), + DBReadConcurrency: ctx.Int(utils.DBReadConcurrencyFlag.Name), + RpcAllowListFilePath: ctx.String(utils.RpcAccessListFlag.Name), + Gascap: ctx.Uint64(utils.RpcGasCapFlag.Name), + Feecap: ctx.Float64(utils.RPCGlobalTxFeeCapFlag.Name), + MaxTraces: ctx.Uint64(utils.TraceMaxtracesFlag.Name), + TraceCompatibility: ctx.Bool(utils.RpcTraceCompatFlag.Name), + BatchLimit: ctx.Int(utils.RpcBatchLimit.Name), + ReturnDataLimit: ctx.Int(utils.RpcReturnDataLimit.Name), + AllowUnprotectedTxs: ctx.Bool(utils.AllowUnprotectedTxs.Name), + MaxGetProofRewindBlockCount: ctx.Int(utils.RpcMaxGetProofRewindBlockCount.Name), OtsMaxPageSize: ctx.Uint64(utils.OtsSearchMaxCapFlag.Name), diff --git a/turbo/debug/flags.go b/turbo/debug/flags.go index a2bd0f10a94..421da286d9d 100644 --- a/turbo/debug/flags.go +++ b/turbo/debug/flags.go @@ -24,6 +24,8 @@ import ( "os" "path/filepath" + "github.com/ledgerwatch/erigon-lib/common/disk" + "github.com/ledgerwatch/erigon-lib/common/mem" "github.com/ledgerwatch/erigon-lib/metrics" "github.com/ledgerwatch/log/v3" @@ -50,7 +52,9 @@ var ( Name: "metrics", } metricsAddrFlag = cli.StringFlag{ - Name: "metrics.addr", + Name: "metrics.addr", + Usage: "Prometheus HTTP server listening interface", + Value: "0.0.0.0", } metricsPortFlag = cli.UintFlag{ Name: "metrics.port", @@ -68,7 +72,7 @@ var ( pprofAddrFlag = cli.StringFlag{ Name: "pprof.addr", Usage: "pprof HTTP server listening interface", - Value: "127.0.0.1", + Value: "0.0.0.0", } cpuprofileFlag = cli.StringFlag{ Name: "pprof.cpuprofile", @@ -154,6 +158,10 @@ func SetupCobra(cmd *cobra.Command, filePrefix string) log.Logger { panic(err) } + // setup periodic logging and prometheus updates + go mem.LogMemStats(cmd.Context(), log.Root()) + go disk.UpdateDiskStats(cmd.Context(), log.Root()) + var metricsMux *http.ServeMux var metricsAddress string @@ -176,7 +184,7 @@ func SetupCobra(cmd *cobra.Command, filePrefix string) log.Logger { // Setup initializes profiling and logging based on the CLI flags. // It should be called as early as possible in the program. -func Setup(ctx *cli.Context, rootLogger bool) (log.Logger, *http.ServeMux, error) { +func Setup(ctx *cli.Context, rootLogger bool) (log.Logger, *http.ServeMux, *http.ServeMux, error) { // ensure we've read in config file details before setting up metrics etc. if err := SetFlagsFromConfigFile(ctx); err != nil { log.Warn("failed setting config flags from yaml/toml file", "err", err) @@ -188,13 +196,13 @@ func Setup(ctx *cli.Context, rootLogger bool) (log.Logger, *http.ServeMux, error if traceFile := ctx.String(traceFlag.Name); traceFile != "" { if err := Handler.StartGoTrace(traceFile); err != nil { - return logger, nil, err + return logger, nil, nil, err } } if cpuFile := ctx.String(cpuprofileFlag.Name); cpuFile != "" { if err := Handler.StartCPUProfile(cpuFile); err != nil { - return logger, nil, err + return logger, nil, nil, err } } pprofEnabled := ctx.Bool(pprofFlag.Name) @@ -204,44 +212,61 @@ func Setup(ctx *cli.Context, rootLogger bool) (log.Logger, *http.ServeMux, error var metricsMux *http.ServeMux var metricsAddress string - if metricsEnabled && (!pprofEnabled || metricsAddr != "") { + if metricsEnabled { metricsPort := ctx.Int(metricsPortFlag.Name) metricsAddress = fmt.Sprintf("%s:%d", metricsAddr, metricsPort) metricsMux = metrics.Setup(metricsAddress, logger) } - // pprof server if pprofEnabled { pprofHost := ctx.String(pprofAddrFlag.Name) pprofPort := ctx.Int(pprofPortFlag.Name) address := fmt.Sprintf("%s:%d", pprofHost, pprofPort) - if address == metricsAddress { - StartPProf(address, metricsMux) + if (address == metricsAddress) && metricsEnabled { + metricsMux = StartPProf(address, metricsMux) } else { - StartPProf(address, nil) + pprofMux := StartPProf(address, nil) + return logger, metricsMux, pprofMux, nil } } - return logger, metricsMux, nil + return logger, metricsMux, nil, nil } -func StartPProf(address string, metricsMux *http.ServeMux) { +func StartPProf(address string, metricsMux *http.ServeMux) *http.ServeMux { cpuMsg := fmt.Sprintf("go tool pprof -lines -http=: http://%s/%s", address, "debug/pprof/profile?seconds=20") heapMsg := fmt.Sprintf("go tool pprof -lines -http=: http://%s/%s", address, "debug/pprof/heap") log.Info("Starting pprof server", "cpu", cpuMsg, "heap", heapMsg) if metricsMux == nil { + pprofMux := http.NewServeMux() + + pprofMux.HandleFunc("/debug/pprof/", pprof.Index) + pprofMux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) + pprofMux.HandleFunc("/debug/pprof/profile", pprof.Profile) + pprofMux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) + pprofMux.HandleFunc("/debug/pprof/trace", pprof.Trace) + + pprofServer := &http.Server{ + Addr: address, + Handler: pprofMux, + } + go func() { - if err := http.ListenAndServe(address, nil); err != nil { // nolint:gosec + if err := pprofServer.ListenAndServe(); err != nil { log.Error("Failure in running pprof server", "err", err) } }() + + return pprofMux } else { metricsMux.HandleFunc("/debug/pprof/", pprof.Index) metricsMux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) metricsMux.HandleFunc("/debug/pprof/profile", pprof.Profile) metricsMux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) metricsMux.HandleFunc("/debug/pprof/trace", pprof.Trace) + + return metricsMux } } diff --git a/turbo/engineapi/engine_block_downloader/block_downloader.go b/turbo/engineapi/engine_block_downloader/block_downloader.go index 83c0e4dfece..227392452e4 100644 --- a/turbo/engineapi/engine_block_downloader/block_downloader.go +++ b/turbo/engineapi/engine_block_downloader/block_downloader.go @@ -30,15 +30,17 @@ import ( ) const ( - logInterval = 30 * time.Second - requestLoopCutOff int = 1 + logInterval = 30 * time.Second + requestLoopCutOff int = 1 + forkchoiceTimeoutMillis = 5000 ) type RequestBodyFunction func(context.Context, *bodydownload.BodyRequest) ([64]byte, bool) // EngineBlockDownloader is responsible to download blocks in reverse, and then insert them in the database. type EngineBlockDownloader struct { - ctx context.Context + bacgroundCtx context.Context + // downloaders hd *headerdownload.HeaderDownload bd *bodydownload.BodyDownload @@ -74,7 +76,7 @@ func NewEngineBlockDownloader(ctx context.Context, logger log.Logger, hd *header var s atomic.Value s.Store(headerdownload.Idle) return &EngineBlockDownloader{ - ctx: ctx, + bacgroundCtx: ctx, hd: hd, bd: bd, db: db, @@ -86,7 +88,7 @@ func NewEngineBlockDownloader(ctx context.Context, logger log.Logger, hd *header blockPropagator: blockPropagator, timeout: timeout, bodyReqSend: bodyReqSend, - chainRW: eth1_chain_reader.NewChainReaderEth1(ctx, config, executionClient, 1000), + chainRW: eth1_chain_reader.NewChainReaderEth1(config, executionClient, forkchoiceTimeoutMillis), } } @@ -94,7 +96,6 @@ func (e *EngineBlockDownloader) scheduleHeadersDownload( requestId int, hashToDownload libcommon.Hash, heightToDownload uint64, - downloaderTip libcommon.Hash, ) bool { if e.hd.PosStatus() != headerdownload.Idle { e.logger.Info("[EngineBlockDownloader] Postponing PoS download since another one is in progress", "height", heightToDownload, "hash", hashToDownload) @@ -108,7 +109,6 @@ func (e *EngineBlockDownloader) scheduleHeadersDownload( } e.hd.SetRequestId(requestId) - e.hd.SetPoSDownloaderTip(downloaderTip) e.hd.SetHeaderToDownloadPoS(hashToDownload, heightToDownload) e.hd.SetPOSSync(true) // This needs to be called after SetHeaderToDownloadPOS because SetHeaderToDownloadPOS sets `posAnchor` member field which is used by ProcessHeadersPOS @@ -205,7 +205,7 @@ func saveHeader(db kv.RwTx, header *types.Header, hash libcommon.Hash) error { return nil } -func (e *EngineBlockDownloader) insertHeadersAndBodies(tx kv.Tx, fromBlock uint64, fromHash libcommon.Hash, toBlock uint64) error { +func (e *EngineBlockDownloader) insertHeadersAndBodies(ctx context.Context, tx kv.Tx, fromBlock uint64, fromHash libcommon.Hash, toBlock uint64) error { blockBatchSize := 500 blockWrittenLogSize := 20_000 // We divide them in batches @@ -223,7 +223,7 @@ func (e *EngineBlockDownloader) insertHeadersAndBodies(tx kv.Tx, fromBlock uint6 return err } if len(blocksBatch) == blockBatchSize { - if err := e.chainRW.InsertBlocksAndWait(blocksBatch); err != nil { + if err := e.chainRW.InsertBlocksAndWait(ctx, blocksBatch); err != nil { return err } blocksBatch = blocksBatch[:0] @@ -235,7 +235,7 @@ func (e *EngineBlockDownloader) insertHeadersAndBodies(tx kv.Tx, fromBlock uint6 } number := header.Number.Uint64() if number > toBlock { - return e.chainRW.InsertBlocksAndWait(blocksBatch) + return e.chainRW.InsertBlocksAndWait(ctx, blocksBatch) } hash := header.Hash() body, err := rawdb.ReadBodyWithTransactions(tx, hash, number) @@ -245,11 +245,11 @@ func (e *EngineBlockDownloader) insertHeadersAndBodies(tx kv.Tx, fromBlock uint6 if body == nil { return fmt.Errorf("missing body at block=%d", number) } - blocksBatch = append(blocksBatch, types.NewBlockFromStorage(hash, header, body.Transactions, nil, body.Withdrawals)) + blocksBatch = append(blocksBatch, types.NewBlockFromStorage(hash, header, body.Transactions, body.Uncles, body.Withdrawals)) if number%uint64(blockWrittenLogSize) == 0 { e.logger.Info("[insertHeadersAndBodies] Written blocks", "progress", number, "to", toBlock) } } - return e.chainRW.InsertBlocksAndWait(blocksBatch) + return e.chainRW.InsertBlocksAndWait(ctx, blocksBatch) } diff --git a/turbo/engineapi/engine_block_downloader/body.go b/turbo/engineapi/engine_block_downloader/body.go index 0ca0daa2890..993eb895767 100644 --- a/turbo/engineapi/engine_block_downloader/body.go +++ b/turbo/engineapi/engine_block_downloader/body.go @@ -1,10 +1,13 @@ package engine_block_downloader import ( + "context" "fmt" "runtime" "time" + "github.com/ledgerwatch/log/v3" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/kv" @@ -12,11 +15,10 @@ import ( "github.com/ledgerwatch/erigon/dataflow" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/turbo/stages/bodydownload" - "github.com/ledgerwatch/log/v3" ) // downloadBodies executes bodies download. -func (e *EngineBlockDownloader) downloadAndLoadBodiesSyncronously(tx kv.RwTx, fromBlock, toBlock uint64) (err error) { +func (e *EngineBlockDownloader) downloadAndLoadBodiesSyncronously(ctx context.Context, tx kv.RwTx, fromBlock, toBlock uint64) (err error) { headerProgress := toBlock bodyProgress := fromBlock - 1 @@ -80,7 +82,7 @@ func (e *EngineBlockDownloader) downloadAndLoadBodiesSyncronously(tx kv.RwTx, fr sentToPeer = false if req != nil { start = time.Now() - peer, sentToPeer = e.bodyReqSend(e.ctx, req) + peer, sentToPeer = e.bodyReqSend(ctx, req) d2 += time.Since(start) } if req != nil && sentToPeer { @@ -152,7 +154,7 @@ func (e *EngineBlockDownloader) downloadAndLoadBodiesSyncronously(tx kv.RwTx, fr timer.Stop() timer = time.NewTimer(1 * time.Second) select { - case <-e.ctx.Done(): + case <-ctx.Done(): stopped = true case <-logEvery.C: deliveredCount, wastedCount := e.bd.DeliveryCounts() diff --git a/turbo/engineapi/engine_block_downloader/core.go b/turbo/engineapi/engine_block_downloader/core.go index a581419f183..5b10ab1217d 100644 --- a/turbo/engineapi/engine_block_downloader/core.go +++ b/turbo/engineapi/engine_block_downloader/core.go @@ -1,6 +1,8 @@ package engine_block_downloader import ( + "context" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces/execution" "github.com/ledgerwatch/erigon-lib/kv/mdbx" @@ -10,10 +12,10 @@ import ( ) // download is the process that reverse download a specific block hash. -func (e *EngineBlockDownloader) download(hashToDownload libcommon.Hash, downloaderTip libcommon.Hash, requestId int, block *types.Block) { +func (e *EngineBlockDownloader) download(ctx context.Context, hashToDownload libcommon.Hash, requestId int, block *types.Block) { /* Start download process*/ // First we schedule the headers download process - if !e.scheduleHeadersDownload(requestId, hashToDownload, 0, downloaderTip) { + if !e.scheduleHeadersDownload(requestId, hashToDownload, 0) { e.logger.Warn("[EngineBlockDownloader] could not begin header download") // could it be scheduled? if not nevermind. e.status.Store(headerdownload.Idle) @@ -30,7 +32,7 @@ func (e *EngineBlockDownloader) download(hashToDownload libcommon.Hash, download } e.hd.SetPosStatus(headerdownload.Idle) - tx, err := e.db.BeginRo(e.ctx) + tx, err := e.db.BeginRo(ctx) if err != nil { e.logger.Warn("[EngineBlockDownloader] Could not begin tx", "err", err) e.status.Store(headerdownload.Idle) @@ -38,14 +40,14 @@ func (e *EngineBlockDownloader) download(hashToDownload libcommon.Hash, download } defer tx.Rollback() - tmpDb, err := mdbx.NewTemporaryMdbx(e.ctx, e.tmpdir) + tmpDb, err := mdbx.NewTemporaryMdbx(ctx, e.tmpdir) if err != nil { e.logger.Warn("[EngineBlockDownloader] Could create temporary mdbx", "err", err) e.status.Store(headerdownload.Idle) return } defer tmpDb.Close() - tmpTx, err := tmpDb.BeginRw(e.ctx) + tmpTx, err := tmpDb.BeginRw(ctx) if err != nil { e.logger.Warn("[EngineBlockDownloader] Could create temporary mdbx", "err", err) e.status.Store(headerdownload.Idle) @@ -64,13 +66,13 @@ func (e *EngineBlockDownloader) download(hashToDownload libcommon.Hash, download } // bodiesCollector := etl.NewCollector("EngineBlockDownloader", e.tmpdir, etl.NewSortableBuffer(etl.BufferOptimalSize), e.logger) - if err := e.downloadAndLoadBodiesSyncronously(memoryMutation, startBlock, endBlock); err != nil { + if err := e.downloadAndLoadBodiesSyncronously(ctx, memoryMutation, startBlock, endBlock); err != nil { e.logger.Warn("[EngineBlockDownloader] Could not download bodies", "err", err) e.status.Store(headerdownload.Idle) return } tx.Rollback() // Discard the original db tx - if err := e.insertHeadersAndBodies(tmpTx, startBlock, startHash, endBlock); err != nil { + if err := e.insertHeadersAndBodies(ctx, tmpTx, startBlock, startHash, endBlock); err != nil { e.logger.Warn("[EngineBlockDownloader] Could not insert headers and bodies", "err", err) e.status.Store(headerdownload.Idle) return @@ -81,9 +83,9 @@ func (e *EngineBlockDownloader) download(hashToDownload libcommon.Hash, download return } // Can fail, not an issue in this case. - e.chainRW.InsertBlockAndWait(block) + e.chainRW.InsertBlockAndWait(ctx, block) // Lastly attempt verification - status, latestValidHash, err := e.chainRW.ValidateChain(block.Hash(), block.NumberU64()) + status, _, latestValidHash, err := e.chainRW.ValidateChain(ctx, block.Hash(), block.NumberU64()) if err != nil { e.logger.Warn("[EngineBlockDownloader] block verification failed", "reason", err) e.status.Store(headerdownload.Idle) @@ -107,14 +109,14 @@ func (e *EngineBlockDownloader) download(hashToDownload libcommon.Hash, download // StartDownloading triggers the download process and returns true if the process started or false if it could not. // blockTip is optional and should be the block tip of the download request. which will be inserted at the end of the procedure if specified. -func (e *EngineBlockDownloader) StartDownloading(requestId int, hashToDownload libcommon.Hash, downloaderTip libcommon.Hash, blockTip *types.Block) bool { +func (e *EngineBlockDownloader) StartDownloading(ctx context.Context, requestId int, hashToDownload libcommon.Hash, blockTip *types.Block) bool { e.lock.Lock() defer e.lock.Unlock() if e.status.Load() == headerdownload.Syncing { return false } e.status.Store(headerdownload.Syncing) - go e.download(hashToDownload, downloaderTip, requestId, blockTip) + go e.download(e.bacgroundCtx, hashToDownload, requestId, blockTip) return true } diff --git a/turbo/engineapi/engine_server.go b/turbo/engineapi/engine_server.go index 8fde4da74d9..9879879ee4f 100644 --- a/turbo/engineapi/engine_server.go +++ b/turbo/engineapi/engine_server.go @@ -6,12 +6,12 @@ import ( "errors" "fmt" "math/big" - "reflect" "sync" "time" "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/eth/ethutils" "github.com/ledgerwatch/log/v3" @@ -53,19 +53,17 @@ type EngineServer struct { executionService execution.ExecutionClient chainRW eth1_chain_reader.ChainReaderWriterEth1 - ctx context.Context lock sync.Mutex logger log.Logger } const fcuTimeout = 1000 // according to mathematics: 1000 millisecods = 1 second -func NewEngineServer(ctx context.Context, logger log.Logger, config *chain.Config, executionService execution.ExecutionClient, +func NewEngineServer(logger log.Logger, config *chain.Config, executionService execution.ExecutionClient, hd *headerdownload.HeaderDownload, blockDownloader *engine_block_downloader.EngineBlockDownloader, test bool, proposing bool) *EngineServer { - chainRW := eth1_chain_reader.NewChainReaderEth1(ctx, config, executionService, fcuTimeout) + chainRW := eth1_chain_reader.NewChainReaderEth1(config, executionService, fcuTimeout) return &EngineServer{ - ctx: ctx, logger: logger, config: config, executionService: executionService, @@ -76,14 +74,23 @@ func NewEngineServer(ctx context.Context, logger log.Logger, config *chain.Confi } } -func (e *EngineServer) Start(httpConfig *httpcfg.HttpCfg, db kv.RoDB, blockReader services.FullBlockReader, - filters *rpchelper.Filters, stateCache kvcache.Cache, agg *libstate.AggregatorV3, engineReader consensus.EngineReader, - eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, +func (e *EngineServer) Start( + ctx context.Context, + httpConfig *httpcfg.HttpCfg, + db kv.RoDB, + blockReader services.FullBlockReader, + filters *rpchelper.Filters, + stateCache kvcache.Cache, + agg *libstate.Aggregator, + engineReader consensus.EngineReader, + eth rpchelper.ApiBackend, + txPool txpool.TxpoolClient, + mining txpool.MiningClient, seqRPCService, historicalRPCService *rpc.Client, ) { base := jsonrpc.NewBaseApi(filters, stateCache, blockReader, agg, httpConfig.WithDatadir, httpConfig.EvmCallTimeout, engineReader, httpConfig.Dirs, seqRPCService, historicalRPCService) - ethImpl := jsonrpc.NewEthAPI(base, db, eth, txPool, mining, httpConfig.Gascap, httpConfig.ReturnDataLimit, httpConfig.AllowUnprotectedTxs, httpConfig.MaxGetProofRewindBlockCount, e.logger) + ethImpl := jsonrpc.NewEthAPI(base, db, eth, txPool, mining, httpConfig.Gascap, httpConfig.Feecap, httpConfig.ReturnDataLimit, httpConfig.AllowUnprotectedTxs, httpConfig.MaxGetProofRewindBlockCount, httpConfig.WebsocketSubscribeLogsChannelSize, e.logger) // engineImpl := NewEngineAPI(base, db, engineBackend) // e.startEngineMessageHandler() @@ -100,7 +107,7 @@ func (e *EngineServer) Start(httpConfig *httpcfg.HttpCfg, db kv.RoDB, blockReade Version: "1.0", }} - if err := cli.StartRpcServerWithJwtAuthentication(e.ctx, httpConfig, apiList, e.logger); err != nil { + if err := cli.StartRpcServerWithJwtAuthentication(ctx, httpConfig, apiList, e.logger); err != nil { e.logger.Error(err.Error()) } } @@ -115,39 +122,6 @@ func (s *EngineServer) checkWithdrawalsPresence(time uint64, withdrawals []*type return nil } -func (s *EngineServer) validatePayloadBlobs(req *engine_types.ExecutionPayload, - expectedBlobHashes []libcommon.Hash, transactions *[]types.Transaction) (*engine_types.PayloadStatus, error) { - if expectedBlobHashes == nil { - return nil, &rpc.InvalidParamsError{Message: "nil blob hashes array"} - } - actualBlobHashes := []libcommon.Hash{} - for _, txn := range *transactions { - actualBlobHashes = append(actualBlobHashes, txn.GetBlobHashes()...) - } - if len(actualBlobHashes) > int(s.config.GetMaxBlobsPerBlock()) || req.BlobGasUsed.Uint64() > s.config.GetMaxBlobGasPerBlock() { - s.logger.Warn("[NewPayload] blobs/blobGasUsed exceeds max per block", - "count", len(actualBlobHashes), "BlobGasUsed", req.BlobGasUsed.Uint64()) - bad, latestValidHash := s.hd.IsBadHeaderPoS(req.ParentHash) - if !bad { - latestValidHash = req.ParentHash - } - return &engine_types.PayloadStatus{ - Status: engine_types.InvalidStatus, - ValidationError: engine_types.NewStringifiedErrorFromString("blobs/blobgas exceeds max"), - LatestValidHash: &latestValidHash, - }, nil - } - if !reflect.DeepEqual(actualBlobHashes, expectedBlobHashes) { - s.logger.Warn("[NewPayload] mismatch in blob hashes", - "expectedBlobHashes", expectedBlobHashes, "actualBlobHashes", actualBlobHashes) - return &engine_types.PayloadStatus{ - Status: engine_types.InvalidStatus, - ValidationError: engine_types.NewStringifiedErrorFromString("mismatch in blob hashes"), - }, nil - } - return nil, nil -} - // EngineNewPayload validates and possibly executes payload func (s *EngineServer) newPayload(ctx context.Context, req *engine_types.ExecutionPayload, expectedBlobHashes []libcommon.Hash, parentBeaconBlockRoot *libcommon.Hash, version clparams.StateVersion, @@ -192,6 +166,15 @@ func (s *EngineServer) newPayload(ctx context.Context, req *engine_types.Executi return nil, err } + if version <= clparams.CapellaVersion { + if req.BlobGasUsed != nil { + return nil, &rpc.InvalidParamsError{Message: "Unexpected pre-cancun blobGasUsed"} + } + if req.ExcessBlobGas != nil { + return nil, &rpc.InvalidParamsError{Message: "Unexpected pre-cancun excessBlobGas"} + } + } + if version >= clparams.DenebVersion { if req.BlobGasUsed == nil || req.ExcessBlobGas == nil || parentBeaconBlockRoot == nil { return nil, &rpc.InvalidParamsError{Message: "blobGasUsed/excessBlobGas/beaconRoot missing"} @@ -233,14 +216,32 @@ func (s *EngineServer) newPayload(ctx context.Context, req *engine_types.Executi ValidationError: engine_types.NewStringifiedError(err), }, nil } + if version >= clparams.DenebVersion { - status, err := s.validatePayloadBlobs(req, expectedBlobHashes, &transactions) - if err != nil || status != nil { - return status, err + err := ethutils.ValidateBlobs(req.BlobGasUsed.Uint64(), s.config.GetMaxBlobGasPerBlock(), s.config.GetMaxBlobsPerBlock(), expectedBlobHashes, &transactions) + if errors.Is(err, ethutils.ErrNilBlobHashes) { + return nil, &rpc.InvalidParamsError{Message: "nil blob hashes array"} + } + if errors.Is(err, ethutils.ErrMaxBlobGasUsed) { + bad, latestValidHash := s.hd.IsBadHeaderPoS(req.ParentHash) + if !bad { + latestValidHash = req.ParentHash + } + return &engine_types.PayloadStatus{ + Status: engine_types.InvalidStatus, + ValidationError: engine_types.NewStringifiedErrorFromString("blobs/blobgas exceeds max"), + LatestValidHash: &latestValidHash, + }, nil + } + if errors.Is(err, ethutils.ErrMismatchBlobHashes) || errors.Is(err, ethutils.ErrInvalidVersiondHash) { + return &engine_types.PayloadStatus{ + Status: engine_types.InvalidStatus, + ValidationError: engine_types.NewStringifiedErrorFromString(err.Error()), + }, nil } } - possibleStatus, err := s.getQuickPayloadStatusIfPossible(blockHash, uint64(req.BlockNumber), header.ParentHash, nil, true) + possibleStatus, err := s.getQuickPayloadStatusIfPossible(ctx, blockHash, uint64(req.BlockNumber), header.ParentHash, nil, true) if err != nil { return nil, err } @@ -254,8 +255,14 @@ func (s *EngineServer) newPayload(ctx context.Context, req *engine_types.Executi s.logger.Debug("[NewPayload] sending block", "height", header.Number, "hash", blockHash) block := types.NewBlockFromStorage(blockHash, &header, transactions, nil /* uncles */, withdrawals) - payloadStatus, err := s.HandleNewPayload("NewPayload", block) + payloadStatus, err := s.HandleNewPayload(ctx, "NewPayload", block, expectedBlobHashes) if err != nil { + if errors.Is(err, consensus.ErrInvalidBlock) { + return &engine_types.PayloadStatus{ + Status: engine_types.InvalidStatus, + ValidationError: engine_types.NewStringifiedError(err), + }, nil + } return nil, err } s.logger.Debug("[NewPayload] got reply", "payloadStatus", payloadStatus) @@ -268,7 +275,7 @@ func (s *EngineServer) newPayload(ctx context.Context, req *engine_types.Executi } // Check if we can quickly determine the status of a newPayload or forkchoiceUpdated. -func (s *EngineServer) getQuickPayloadStatusIfPossible(blockHash libcommon.Hash, blockNumber uint64, parentHash libcommon.Hash, forkchoiceMessage *engine_types.ForkChoiceState, newPayload bool) (*engine_types.PayloadStatus, error) { +func (s *EngineServer) getQuickPayloadStatusIfPossible(ctx context.Context, blockHash libcommon.Hash, blockNumber uint64, parentHash libcommon.Hash, forkchoiceMessage *engine_types.ForkChoiceState, newPayload bool) (*engine_types.PayloadStatus, error) { // Determine which prefix to use for logs var prefix string if newPayload { @@ -285,7 +292,7 @@ func (s *EngineServer) getQuickPayloadStatusIfPossible(blockHash libcommon.Hash, return nil, fmt.Errorf("headerdownload is nil") } - headHash, finalizedHash, safeHash, err := s.chainRW.GetForkchoice() + headHash, finalizedHash, safeHash, err := s.chainRW.GetForkChoice(ctx) if err != nil { return nil, err } @@ -299,26 +306,26 @@ func (s *EngineServer) getQuickPayloadStatusIfPossible(blockHash libcommon.Hash, return &engine_types.PayloadStatus{Status: engine_types.ValidStatus, LatestValidHash: &blockHash}, nil } - header := s.chainRW.GetHeaderByHash(blockHash) + header := s.chainRW.GetHeaderByHash(ctx, blockHash) // Retrieve parent and total difficulty. var parent *types.Header var td *big.Int if newPayload { - parent = s.chainRW.GetHeaderByHash(parentHash) - td = s.chainRW.GetTd(parentHash, blockNumber-1) + parent = s.chainRW.GetHeaderByHash(ctx, parentHash) + td = s.chainRW.GetTd(ctx, parentHash, blockNumber-1) } else { - td = s.chainRW.GetTd(blockHash, blockNumber) + td = s.chainRW.GetTd(ctx, blockHash, blockNumber) } if td != nil && td.Cmp(s.config.TerminalTotalDifficulty) < 0 { s.logger.Warn(fmt.Sprintf("[%s] Beacon Chain request before TTD", prefix), "hash", blockHash) - return &engine_types.PayloadStatus{Status: engine_types.InvalidStatus, LatestValidHash: &libcommon.Hash{}}, nil + return &engine_types.PayloadStatus{Status: engine_types.InvalidStatus, LatestValidHash: &libcommon.Hash{}, ValidationError: engine_types.NewStringifiedErrorFromString("Beacon Chain request before TTD")}, nil } var isCanonical bool if header != nil { - isCanonical, err = s.chainRW.IsCanonicalHash(blockHash) + isCanonical, err = s.chainRW.IsCanonicalHash(ctx, blockHash) } if err != nil { return nil, err @@ -346,10 +353,10 @@ func (s *EngineServer) getQuickPayloadStatusIfPossible(blockHash libcommon.Hash, } if bad { s.hd.ReportBadHeaderPoS(blockHash, lastValidHash) - return &engine_types.PayloadStatus{Status: engine_types.InvalidStatus, LatestValidHash: &lastValidHash}, nil + return &engine_types.PayloadStatus{Status: engine_types.InvalidStatus, LatestValidHash: &lastValidHash, ValidationError: engine_types.NewStringifiedErrorFromString("previously known bad block")}, nil } - currentHeader := s.chainRW.CurrentHeader() + currentHeader := s.chainRW.CurrentHeader(ctx) // If header is already validated or has a missing parent, you can either return VALID or SYNCING. if newPayload { if header != nil && isCanonical { @@ -373,7 +380,7 @@ func (s *EngineServer) getQuickPayloadStatusIfPossible(blockHash libcommon.Hash, return &engine_types.PayloadStatus{Status: engine_types.ValidStatus, LatestValidHash: &blockHash}, nil } } - executionReady, err := s.chainRW.Ready() + executionReady, err := s.chainRW.Ready(ctx) if err != nil { return nil, err } @@ -445,7 +452,7 @@ func (s *EngineServer) forkchoiceUpdated(ctx context.Context, forkchoiceState *e // In the Optimism case, we allow arbitrary rewinding of the safe block // hash, so we skip the path which might short-circuit that if s.config.Optimism == nil { - status, err = s.getQuickPayloadStatusIfPossible(forkchoiceState.HeadHash, 0, libcommon.Hash{}, forkchoiceState, false) + status, err = s.getQuickPayloadStatusIfPossible(ctx, forkchoiceState.HeadHash, 0, libcommon.Hash{}, forkchoiceState, false) if err != nil { return nil, err } @@ -456,8 +463,16 @@ func (s *EngineServer) forkchoiceUpdated(ctx context.Context, forkchoiceState *e if status == nil { s.logger.Debug("[ForkChoiceUpdated] sending forkChoiceMessage", "head", forkchoiceState.HeadHash) - status, err = s.HandlesForkChoice("ForkChoiceUpdated", forkchoiceState, 0) + status, err = s.HandlesForkChoice(ctx, "ForkChoiceUpdated", forkchoiceState, 0) if err != nil { + if errors.Is(err, consensus.ErrInvalidBlock) { + return &engine_types.ForkChoiceUpdatedResponse{ + PayloadStatus: &engine_types.PayloadStatus{ + Status: engine_types.InvalidStatus, + ValidationError: engine_types.NewStringifiedError(err), + }, + }, nil + } return nil, err } s.logger.Debug("[ForkChoiceUpdated] got reply", "payloadStatus", status) @@ -467,49 +482,32 @@ func (s *EngineServer) forkchoiceUpdated(ctx context.Context, forkchoiceState *e } } - if payloadAttributes != nil { - timestamp := uint64(payloadAttributes.Timestamp) - if s.config.IsCancun(timestamp) && version < clparams.DenebVersion { // Not V3 after cancun - if payloadAttributes.ParentBeaconBlockRoot != nil { - return nil, &rpc.InvalidParamsError{Message: "Unexpected Beacon Root"} - } - return nil, &rpc.UnsupportedForkError{Message: "Unsupported fork"} - } - if s.config.IsCancun(timestamp) && version >= clparams.DenebVersion { - if payloadAttributes.ParentBeaconBlockRoot == nil { - return nil, &rpc.InvalidParamsError{Message: "Beacon Root missing"} - } - } - } - // No need for payload building if payloadAttributes == nil || status.Status != engine_types.ValidStatus { return &engine_types.ForkChoiceUpdatedResponse{PayloadStatus: status}, nil } - if !s.proposing { - return nil, fmt.Errorf("execution layer not running as a proposer. enable proposer by taking out the --proposer.disable flag on startup") + if version < clparams.DenebVersion && payloadAttributes.ParentBeaconBlockRoot != nil { + return nil, &engine_helpers.InvalidPayloadAttributesErr // Unexpected Beacon Root + } + if version >= clparams.DenebVersion && payloadAttributes.ParentBeaconBlockRoot == nil { + return nil, &engine_helpers.InvalidPayloadAttributesErr // Beacon Root missing } - headHeader := s.chainRW.GetHeaderByHash(forkchoiceState.HeadHash) - - if headHeader.Hash() != forkchoiceState.HeadHash && s.config.Optimism == nil { - // Per Item 2 of https://github.com/ethereum/execution-apis/blob/v1.0.0-alpha.9/src/engine/specification.md#specification-1: - // Client software MAY skip an update of the forkchoice state and - // MUST NOT begin a payload build process if forkchoiceState.headBlockHash doesn't reference a leaf of the block tree. - // That is, the block referenced by forkchoiceState.headBlockHash is neither the head of the canonical chain nor a block at the tip of any other chain. - // In the case of such an event, client software MUST return - // {payloadStatus: {status: VALID, latestValidHash: forkchoiceState.headBlockHash, validationError: null}, payloadId: null}. - // We skip this check in the Optimism case as Optimism allows arbitrary - // depth re-orgs + timestamp := uint64(payloadAttributes.Timestamp) + if !s.config.IsCancun(timestamp) && version >= clparams.DenebVersion { // V3 before cancun + return nil, &rpc.UnsupportedForkError{Message: "Unsupported fork"} + } + if s.config.IsCancun(timestamp) && version < clparams.DenebVersion { // Not V3 after cancun + return nil, &rpc.UnsupportedForkError{Message: "Unsupported fork"} + } - s.logger.Warn("Skipping payload building because forkchoiceState.headBlockHash is not the head of the canonical chain", - "forkChoice.HeadBlockHash", forkchoiceState.HeadHash, "headHeader.Hash", headHeader.Hash()) - return &engine_types.ForkChoiceUpdatedResponse{PayloadStatus: status}, nil + if !s.proposing { + return nil, fmt.Errorf("execution layer not running as a proposer. enable proposer by taking out the --proposer.disable flag on startup") } - log.Debug("Continuing EngineForkChoiceUpdated", "headNumber", headHeader.Number, "headHash", headHeader.Hash(), "numDeposits", len(payloadAttributes.Transactions)) - timestamp := uint64(payloadAttributes.Timestamp) + headHeader := s.chainRW.GetHeaderByHash(ctx, forkchoiceState.HeadHash) + if headHeader.Time >= timestamp { return nil, &engine_helpers.InvalidPayloadAttributesErr } @@ -557,7 +555,7 @@ func (s *EngineServer) forkchoiceUpdated(ctx context.Context, forkchoiceState *e } func (s *EngineServer) getPayloadBodiesByHash(ctx context.Context, request []libcommon.Hash, _ clparams.StateVersion) ([]*engine_types.ExecutionPayloadBodyV1, error) { - bodies, err := s.chainRW.GetBodiesByHashes(request) + bodies, err := s.chainRW.GetBodiesByHashes(ctx, request) if err != nil { return nil, err } @@ -583,7 +581,7 @@ func extractPayloadBodyFromBody(body *types.RawBody) *engine_types.ExecutionPayl } func (s *EngineServer) getPayloadBodiesByRange(ctx context.Context, start, count uint64, _ clparams.StateVersion) ([]*engine_types.ExecutionPayloadBodyV1, error) { - bodies, err := s.chainRW.GetBodiesByRange(start, count) + bodies, err := s.chainRW.GetBodiesByRange(ctx, start, count) if err != nil { return nil, err } @@ -754,8 +752,10 @@ func compareCapabilities(from []string, to []string) []string { } func (e *EngineServer) HandleNewPayload( + ctx context.Context, logPrefix string, block *types.Block, + versionedHashes []libcommon.Hash, ) (*engine_types.PayloadStatus, error) { header := block.Header() headerNumber := header.Number.Uint64() @@ -763,20 +763,20 @@ func (e *EngineServer) HandleNewPayload( e.logger.Info(fmt.Sprintf("[%s] Handling new payload", logPrefix), "height", headerNumber, "hash", headerHash) - currentHeader := e.chainRW.CurrentHeader() + currentHeader := e.chainRW.CurrentHeader(ctx) var currentHeadNumber *uint64 if currentHeader != nil { currentHeadNumber = new(uint64) *currentHeadNumber = currentHeader.Number.Uint64() } - parent := e.chainRW.GetHeader(header.ParentHash, headerNumber-1) + parent := e.chainRW.GetHeader(ctx, header.ParentHash, headerNumber-1) if parent == nil { e.logger.Debug(fmt.Sprintf("[%s] New payload: need to download parent", logPrefix), "height", headerNumber, "hash", headerHash, "parentHash", header.ParentHash) if e.test { return &engine_types.PayloadStatus{Status: engine_types.SyncingStatus}, nil } - if !e.blockDownloader.StartDownloading(0, header.ParentHash, headerHash, block) { + if !e.blockDownloader.StartDownloading(ctx, 0, header.ParentHash, block) { return &engine_types.PayloadStatus{Status: engine_types.SyncingStatus}, nil } @@ -794,12 +794,24 @@ func (e *EngineServer) HandleNewPayload( if !success { return &engine_types.PayloadStatus{Status: engine_types.SyncingStatus}, nil } - return &engine_types.PayloadStatus{Status: engine_types.ValidStatus, LatestValidHash: &headerHash}, nil + + status, _, latestValidHash, err := e.chainRW.ValidateChain(ctx, headerHash, headerNumber) + if err != nil { + return nil, err + } + + if status == execution.ExecutionStatus_Busy || status == execution.ExecutionStatus_TooFarAway { + e.logger.Debug(fmt.Sprintf("[%s] New payload: Client is still syncing", logPrefix)) + return &engine_types.PayloadStatus{Status: engine_types.SyncingStatus}, nil + } else { + return &engine_types.PayloadStatus{Status: engine_types.ValidStatus, LatestValidHash: &latestValidHash}, nil + } } else { return &engine_types.PayloadStatus{Status: engine_types.SyncingStatus}, nil } } - if err := e.chainRW.InsertBlockAndWait(block); err != nil { + + if err := e.chainRW.InsertBlockAndWait(ctx, block); err != nil { return nil, err } @@ -808,7 +820,7 @@ func (e *EngineServer) HandleNewPayload( } e.logger.Debug(fmt.Sprintf("[%s] New payload begin verification", logPrefix)) - status, latestValidHash, err := e.chainRW.ValidateChain(headerHash, headerNumber) + status, validationErr, latestValidHash, err := e.chainRW.ValidateChain(ctx, headerHash, headerNumber) e.logger.Debug(fmt.Sprintf("[%s] New payload verification ended", logPrefix), "status", status.String(), "err", err) if err != nil { return nil, err @@ -818,10 +830,15 @@ func (e *EngineServer) HandleNewPayload( e.hd.ReportBadHeaderPoS(block.Hash(), latestValidHash) } - return &engine_types.PayloadStatus{ + resp := &engine_types.PayloadStatus{ Status: convertGrpcStatusToEngineStatus(status), LatestValidHash: &latestValidHash, - }, nil + } + if validationErr != nil { + resp.ValidationError = engine_types.NewStringifiedErrorFromString(*validationErr) + } + + return resp, nil } func convertGrpcStatusToEngineStatus(status execution.ExecutionStatus) engine_types.EngineStatus { @@ -841,6 +858,7 @@ func convertGrpcStatusToEngineStatus(status execution.ExecutionStatus) engine_ty } func (e *EngineServer) HandlesForkChoice( + ctx context.Context, logPrefix string, forkChoice *engine_types.ForkChoiceState, requestId int, @@ -848,7 +866,7 @@ func (e *EngineServer) HandlesForkChoice( headerHash := forkChoice.HeadHash e.logger.Debug(fmt.Sprintf("[%s] Handling fork choice", logPrefix), "headerHash", headerHash) - headerNumber, err := e.chainRW.HeaderNumber(headerHash) + headerNumber, err := e.chainRW.HeaderNumber(ctx, headerHash) if err != nil { return nil, err } @@ -857,24 +875,24 @@ func (e *EngineServer) HandlesForkChoice( if headerNumber == nil { e.logger.Debug(fmt.Sprintf("[%s] Fork choice: need to download header with hash %x", logPrefix, headerHash)) if !e.test { - e.blockDownloader.StartDownloading(requestId, headerHash, headerHash, nil) + e.blockDownloader.StartDownloading(ctx, requestId, headerHash, nil) } return &engine_types.PayloadStatus{Status: engine_types.SyncingStatus}, nil } // Header itself may already be in the snapshots, if CL starts off at much earlier state than Erigon - header := e.chainRW.GetHeader(headerHash, *headerNumber) + header := e.chainRW.GetHeader(ctx, headerHash, *headerNumber) if header == nil { e.logger.Debug(fmt.Sprintf("[%s] Fork choice: need to download header with hash %x", logPrefix, headerHash)) if !e.test { - e.blockDownloader.StartDownloading(requestId, headerHash, headerHash, nil) + e.blockDownloader.StartDownloading(ctx, requestId, headerHash, nil) } return &engine_types.PayloadStatus{Status: engine_types.SyncingStatus}, nil } // Call forkchoice here - status, latestValidHash, err := e.chainRW.UpdateForkChoice(forkChoice.HeadHash, forkChoice.SafeBlockHash, forkChoice.FinalizedBlockHash) + status, validationErr, latestValidHash, err := e.chainRW.UpdateForkChoice(ctx, forkChoice.HeadHash, forkChoice.SafeBlockHash, forkChoice.FinalizedBlockHash) if err != nil { return nil, err } @@ -885,10 +903,15 @@ func (e *EngineServer) HandlesForkChoice( return &engine_types.PayloadStatus{Status: engine_types.SyncingStatus}, nil } if status == execution.ExecutionStatus_BadBlock { - return &engine_types.PayloadStatus{Status: engine_types.InvalidStatus}, nil + return &engine_types.PayloadStatus{Status: engine_types.InvalidStatus, ValidationError: engine_types.NewStringifiedErrorFromString("Invalid chain after execution")}, nil } - return &engine_types.PayloadStatus{ + payloadStatus := &engine_types.PayloadStatus{ Status: convertGrpcStatusToEngineStatus(status), LatestValidHash: &latestValidHash, - }, nil + } + + if validationErr != nil { + payloadStatus.ValidationError = engine_types.NewStringifiedErrorFromString(*validationErr) + } + return payloadStatus, nil } diff --git a/turbo/execution/eth1/block_building.go b/turbo/execution/eth1/block_building.go index 8b0692ad6eb..e488207f9d6 100644 --- a/turbo/execution/eth1/block_building.go +++ b/turbo/execution/eth1/block_building.go @@ -42,6 +42,7 @@ func (e *EthereumExecutionModule) evictOldBuilders() { // Missing: NewPayload, AssembleBlock func (e *EthereumExecutionModule) AssembleBlock(ctx context.Context, req *execution.AssembleBlockRequest) (*execution.AssembleBlockResponse, error) { if !e.semaphore.TryAcquire(1) { + e.logger.Warn("ethereumExecutionModule.AssembleBlock: ExecutionStatus_Busy") return &execution.AssembleBlockResponse{ Id: 0, Busy: true, @@ -69,12 +70,15 @@ func (e *EthereumExecutionModule) AssembleBlock(ctx context.Context, req *execut } // First check if we're already building a block with the requested parameters - if reflect.DeepEqual(e.lastParameters, ¶m) { - e.logger.Info("[ForkChoiceUpdated] duplicate build request") - return &execution.AssembleBlockResponse{ - Id: e.nextPayloadId, - Busy: false, - }, nil + if e.lastParameters != nil { + param.PayloadId = e.lastParameters.PayloadId + if reflect.DeepEqual(e.lastParameters, ¶m) { + e.logger.Info("[ForkChoiceUpdated] duplicate build request") + return &execution.AssembleBlockResponse{ + Id: e.lastParameters.PayloadId, + Busy: false, + }, nil + } } // Initiate payload building @@ -108,6 +112,7 @@ func blockValue(br *types.BlockWithReceipts, baseFee *uint256.Int) *uint256.Int func (e *EthereumExecutionModule) GetAssembledBlock(ctx context.Context, req *execution.GetAssembledBlockRequest) (*execution.GetAssembledBlockResponse, error) { if !e.semaphore.TryAcquire(1) { + e.logger.Warn("ethereumExecutionModule.GetAssembledBlock: ExecutionStatus_Busy") return &execution.GetAssembledBlockResponse{ Busy: true, }, nil diff --git a/turbo/execution/eth1/eth1_chain_reader.go/chain_reader.go b/turbo/execution/eth1/eth1_chain_reader.go/chain_reader.go index 756352b7df8..ddce4993606 100644 --- a/turbo/execution/eth1/eth1_chain_reader.go/chain_reader.go +++ b/turbo/execution/eth1/eth1_chain_reader.go/chain_reader.go @@ -6,31 +6,35 @@ import ( "math/big" "time" + "github.com/ledgerwatch/log/v3" + "google.golang.org/protobuf/types/known/emptypb" + "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/execution" types2 "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + "github.com/ledgerwatch/erigon/cl/clparams" + "github.com/ledgerwatch/erigon/cl/cltypes" + "github.com/ledgerwatch/erigon/cl/cltypes/solid" + "github.com/ledgerwatch/erigon/cl/utils" "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/turbo/engineapi/engine_types" "github.com/ledgerwatch/erigon/turbo/execution/eth1/eth1_utils" - "github.com/ledgerwatch/log/v3" - "google.golang.org/protobuf/types/known/emptypb" ) type ChainReaderWriterEth1 struct { - ctx context.Context cfg *chain.Config executionModule execution.ExecutionClient - fcuTimoutMillis uint64 + fcuTimeoutMillis uint64 } -func NewChainReaderEth1(ctx context.Context, cfg *chain.Config, executionModule execution.ExecutionClient, fcuTimoutMillis uint64) ChainReaderWriterEth1 { +func NewChainReaderEth1(cfg *chain.Config, executionModule execution.ExecutionClient, fcuTimeoutMillis uint64) ChainReaderWriterEth1 { return ChainReaderWriterEth1{ - ctx: ctx, - cfg: cfg, - executionModule: executionModule, - fcuTimoutMillis: fcuTimoutMillis, + cfg: cfg, + executionModule: executionModule, + fcuTimeoutMillis: fcuTimeoutMillis, } } @@ -38,10 +42,10 @@ func (c ChainReaderWriterEth1) Config() *chain.Config { return c.cfg } -func (c ChainReaderWriterEth1) CurrentHeader() *types.Header { - resp, err := c.executionModule.CurrentHeader(c.ctx, &emptypb.Empty{}) +func (c ChainReaderWriterEth1) CurrentHeader(ctx context.Context) *types.Header { + resp, err := c.executionModule.CurrentHeader(ctx, &emptypb.Empty{}) if err != nil { - log.Error("GetHeader failed", "err", err) + log.Warn("[engine] CurrentHeader", "err", err) return nil } if resp == nil || resp.Header == nil { @@ -49,19 +53,19 @@ func (c ChainReaderWriterEth1) CurrentHeader() *types.Header { } ret, err := eth1_utils.HeaderRpcToHeader(resp.Header) if err != nil { - log.Error("GetHeader decoding", "err", err) + log.Warn("[engine] CurrentHeader", "err", err) return nil } return ret } -func (c ChainReaderWriterEth1) GetHeader(hash libcommon.Hash, number uint64) *types.Header { - resp, err := c.executionModule.GetHeader(c.ctx, &execution.GetSegmentRequest{ +func (c ChainReaderWriterEth1) GetHeader(ctx context.Context, hash libcommon.Hash, number uint64) *types.Header { + resp, err := c.executionModule.GetHeader(ctx, &execution.GetSegmentRequest{ BlockNumber: &number, BlockHash: gointerfaces.ConvertHashToH256(hash), }) if err != nil { - log.Error("GetHeader failed", "err", err) + log.Warn("[engine] GetHeader", "err", err) return nil } if resp == nil || resp.Header == nil { @@ -69,71 +73,79 @@ func (c ChainReaderWriterEth1) GetHeader(hash libcommon.Hash, number uint64) *ty } ret, err := eth1_utils.HeaderRpcToHeader(resp.Header) if err != nil { - log.Error("GetHeader decoding", "err", err) + log.Warn("[engine] GetHeader", "err", err) return nil } return ret } -func (c ChainReaderWriterEth1) GetBlockByHash(hash libcommon.Hash) *types.Block { - header := c.GetHeaderByHash(hash) +func (c ChainReaderWriterEth1) GetBlockByHash(ctx context.Context, hash libcommon.Hash) *types.Block { + header := c.GetHeaderByHash(ctx, hash) if header == nil { return nil } number := header.Number.Uint64() - resp, err := c.executionModule.GetBody(c.ctx, &execution.GetSegmentRequest{ + resp, err := c.executionModule.GetBody(ctx, &execution.GetSegmentRequest{ BlockNumber: &number, BlockHash: gointerfaces.ConvertHashToH256(hash), }) if err != nil { - log.Error("GetBlockByHash failed", "err", err) + log.Warn("[engine] GetBlockByHash", "err", err) return nil } if resp == nil || resp.Body == nil { return nil } - body := eth1_utils.ConvertRawBlockBodyFromRpc(resp.Body) + body, err := eth1_utils.ConvertRawBlockBodyFromRpc(resp.Body) + if err != nil { + log.Warn("[engine] GetBlockByHash", "err", err) + return nil + } txs, err := types.DecodeTransactions(body.Transactions) if err != nil { - log.Error("GetBlockByHash failed", "err", err) + log.Warn("[engine] GetBlockByHash", "err", err) return nil } return types.NewBlock(header, txs, nil, nil, body.Withdrawals) } -func (c ChainReaderWriterEth1) GetBlockByNumber(number uint64) *types.Block { - header := c.GetHeaderByNumber(number) +func (c ChainReaderWriterEth1) GetBlockByNumber(ctx context.Context, number uint64) *types.Block { + header := c.GetHeaderByNumber(ctx, number) if header == nil { return nil } - resp, err := c.executionModule.GetBody(c.ctx, &execution.GetSegmentRequest{ + resp, err := c.executionModule.GetBody(ctx, &execution.GetSegmentRequest{ BlockNumber: &number, }) if err != nil { - log.Error("GetBlockByNumber failed", "err", err) + log.Warn("[engine] GetBlockByNumber", "err", err) return nil } if resp == nil || resp.Body == nil { return nil } - body := eth1_utils.ConvertRawBlockBodyFromRpc(resp.Body) + body, err := eth1_utils.ConvertRawBlockBodyFromRpc(resp.Body) + if err != nil { + log.Warn("[engine] GetBlockByNumber", "err", err) + return nil + } txs, err := types.DecodeTransactions(body.Transactions) if err != nil { - log.Error("GetBlockByNumber failed", "err", err) + log.Warn("[engine] GetBlockByNumber", "err", err) return nil } return types.NewBlock(header, txs, nil, nil, body.Withdrawals) } -func (c ChainReaderWriterEth1) GetHeaderByHash(hash libcommon.Hash) *types.Header { - resp, err := c.executionModule.GetHeader(c.ctx, &execution.GetSegmentRequest{ +func (c ChainReaderWriterEth1) GetHeaderByHash(ctx context.Context, hash libcommon.Hash) *types.Header { + resp, err := c.executionModule.GetHeader(ctx, &execution.GetSegmentRequest{ BlockNumber: nil, BlockHash: gointerfaces.ConvertHashToH256(hash), }) if err != nil { - log.Error("GetHeaderByHash failed", "err", err) + log.Warn("[engine] GetHeaderByHash", "err", err) return nil } if resp == nil || resp.Header == nil { @@ -141,19 +153,19 @@ func (c ChainReaderWriterEth1) GetHeaderByHash(hash libcommon.Hash) *types.Heade } ret, err := eth1_utils.HeaderRpcToHeader(resp.Header) if err != nil { - log.Error("GetHeaderByHash decoding", "err", err) + log.Warn("[engine] GetHeaderByHash", "err", err) return nil } return ret } -func (c ChainReaderWriterEth1) GetHeaderByNumber(number uint64) *types.Header { - resp, err := c.executionModule.GetHeader(c.ctx, &execution.GetSegmentRequest{ +func (c ChainReaderWriterEth1) GetHeaderByNumber(ctx context.Context, number uint64) *types.Header { + resp, err := c.executionModule.GetHeader(ctx, &execution.GetSegmentRequest{ BlockNumber: &number, BlockHash: nil, }) if err != nil { - log.Error("GetHeaderByHash failed", "err", err) + log.Warn("[engine] GetHeaderByNumber", "err", err) return nil } if resp == nil || resp.Header == nil { @@ -161,19 +173,19 @@ func (c ChainReaderWriterEth1) GetHeaderByNumber(number uint64) *types.Header { } ret, err := eth1_utils.HeaderRpcToHeader(resp.Header) if err != nil { - log.Error("GetHeaderByHash decoding", "err", err) + log.Warn("[engine] GetHeaderByNumber", "err", err) return nil } return ret } -func (c ChainReaderWriterEth1) GetTd(hash libcommon.Hash, number uint64) *big.Int { - resp, err := c.executionModule.GetTD(c.ctx, &execution.GetSegmentRequest{ +func (c ChainReaderWriterEth1) GetTd(ctx context.Context, hash libcommon.Hash, number uint64) *big.Int { + resp, err := c.executionModule.GetTD(ctx, &execution.GetSegmentRequest{ BlockNumber: &number, BlockHash: gointerfaces.ConvertHashToH256(hash), }) if err != nil { - log.Error("GetHeaderByHash failed", "err", err) + log.Warn("[engine] GetTd", "err", err) return nil } if resp == nil || resp.Td == nil { @@ -182,12 +194,12 @@ func (c ChainReaderWriterEth1) GetTd(hash libcommon.Hash, number uint64) *big.In return eth1_utils.ConvertBigIntFromRpc(resp.Td) } -func (c ChainReaderWriterEth1) GetBodiesByHashes(hashes []libcommon.Hash) ([]*types.RawBody, error) { +func (c ChainReaderWriterEth1) GetBodiesByHashes(ctx context.Context, hashes []libcommon.Hash) ([]*types.RawBody, error) { grpcHashes := make([]*types2.H256, len(hashes)) for i := range grpcHashes { grpcHashes[i] = gointerfaces.ConvertHashToH256(hashes[i]) } - resp, err := c.executionModule.GetBodiesByHashes(c.ctx, &execution.GetBodiesByHashesRequest{ + resp, err := c.executionModule.GetBodiesByHashes(ctx, &execution.GetBodiesByHashesRequest{ Hashes: grpcHashes, }) if err != nil { @@ -195,13 +207,16 @@ func (c ChainReaderWriterEth1) GetBodiesByHashes(hashes []libcommon.Hash) ([]*ty } ret := make([]*types.RawBody, len(resp.Bodies)) for i := range ret { - ret[i] = eth1_utils.ConvertRawBlockBodyFromRpc(resp.Bodies[i]) + ret[i], err = eth1_utils.ConvertRawBlockBodyFromRpc(resp.Bodies[i]) + if err != nil { + return nil, err + } } return ret, nil } -func (c ChainReaderWriterEth1) GetBodiesByRange(start, count uint64) ([]*types.RawBody, error) { - resp, err := c.executionModule.GetBodiesByRange(c.ctx, &execution.GetBodiesByRangeRequest{ +func (c ChainReaderWriterEth1) GetBodiesByRange(ctx context.Context, start, count uint64) ([]*types.RawBody, error) { + resp, err := c.executionModule.GetBodiesByRange(ctx, &execution.GetBodiesByRangeRequest{ Start: start, Count: count, }) @@ -210,21 +225,24 @@ func (c ChainReaderWriterEth1) GetBodiesByRange(start, count uint64) ([]*types.R } ret := make([]*types.RawBody, len(resp.Bodies)) for i := range ret { - ret[i] = eth1_utils.ConvertRawBlockBodyFromRpc(resp.Bodies[i]) + ret[i], err = eth1_utils.ConvertRawBlockBodyFromRpc(resp.Bodies[i]) + if err != nil { + return nil, err + } } return ret, nil } -func (c ChainReaderWriterEth1) Ready() (bool, error) { - resp, err := c.executionModule.Ready(c.ctx, &emptypb.Empty{}) +func (c ChainReaderWriterEth1) Ready(ctx context.Context) (bool, error) { + resp, err := c.executionModule.Ready(ctx, &emptypb.Empty{}) if err != nil { return false, err } return resp.Ready, nil } -func (c ChainReaderWriterEth1) HeaderNumber(hash libcommon.Hash) (*uint64, error) { - resp, err := c.executionModule.GetHeaderHashNumber(c.ctx, gointerfaces.ConvertHashToH256(hash)) +func (c ChainReaderWriterEth1) HeaderNumber(ctx context.Context, hash libcommon.Hash) (*uint64, error) { + resp, err := c.executionModule.GetHeaderHashNumber(ctx, gointerfaces.ConvertHashToH256(hash)) if err != nil { return nil, err } @@ -234,8 +252,8 @@ func (c ChainReaderWriterEth1) HeaderNumber(hash libcommon.Hash) (*uint64, error return resp.BlockNumber, nil } -func (c ChainReaderWriterEth1) IsCanonicalHash(hash libcommon.Hash) (bool, error) { - resp, err := c.executionModule.IsCanonicalHash(c.ctx, gointerfaces.ConvertHashToH256(hash)) +func (c ChainReaderWriterEth1) IsCanonicalHash(ctx context.Context, hash libcommon.Hash) (bool, error) { + resp, err := c.executionModule.IsCanonicalHash(ctx, gointerfaces.ConvertHashToH256(hash)) if err != nil { return false, err } @@ -245,78 +263,198 @@ func (c ChainReaderWriterEth1) IsCanonicalHash(hash libcommon.Hash) (bool, error return resp.Canonical, nil } -func (c ChainReaderWriterEth1) FrozenBlocks() uint64 { - ret, err := c.executionModule.FrozenBlocks(c.ctx, &emptypb.Empty{}) +func (c ChainReaderWriterEth1) FrozenBlocks(ctx context.Context) uint64 { + ret, err := c.executionModule.FrozenBlocks(ctx, &emptypb.Empty{}) if err != nil { panic(err) } return ret.FrozenBlocks } -const retryTimeout = 10 * time.Millisecond - -func (c ChainReaderWriterEth1) InsertBlocksAndWait(blocks []*types.Block) error { +func (c ChainReaderWriterEth1) InsertBlocksAndWait(ctx context.Context, blocks []*types.Block) error { request := &execution.InsertBlocksRequest{ Blocks: eth1_utils.ConvertBlocksToRPC(blocks), } - response, err := c.executionModule.InsertBlocks(c.ctx, request) + response, err := c.executionModule.InsertBlocks(ctx, request) if err != nil { return err } - retryInterval := time.NewTicker(retryTimeout) - defer retryInterval.Stop() + + // limit the number of retries + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + for response.Result == execution.ExecutionStatus_Busy { + const retryDelay = 100 * time.Millisecond select { - case <-retryInterval.C: - response, err = c.executionModule.InsertBlocks(c.ctx, request) - if err != nil { - return err - } - case <-c.ctx.Done(): - return context.Canceled + case <-time.After(retryDelay): + case <-ctx.Done(): + return ctx.Err() + } + + response, err = c.executionModule.InsertBlocks(ctx, request) + if err != nil { + return err } } + if response.Result != execution.ExecutionStatus_Success { + return fmt.Errorf("InsertBlocksAndWait: executionModule.InsertBlocks ExecutionStatus = %s", response.Result.String()) + } + return nil +} + +func (c ChainReaderWriterEth1) InsertBlocks(ctx context.Context, blocks []*types.Block) error { + request := &execution.InsertBlocksRequest{ + Blocks: eth1_utils.ConvertBlocksToRPC(blocks), + } + response, err := c.executionModule.InsertBlocks(ctx, request) + if err != nil { + return err + } + + if response.Result == execution.ExecutionStatus_Busy { + return context.DeadlineExceeded + } if response.Result != execution.ExecutionStatus_Success { return fmt.Errorf("insertHeadersAndWait: invalid code recieved from execution module: %s", response.Result.String()) } return nil } -func (c ChainReaderWriterEth1) InsertBlockAndWait(block *types.Block) error { - return c.InsertBlocksAndWait([]*types.Block{block}) +func (c ChainReaderWriterEth1) InsertBlockAndWait(ctx context.Context, block *types.Block) error { + blocks := []*types.Block{block} + return c.InsertBlocksAndWait(ctx, blocks) } -func (c ChainReaderWriterEth1) ValidateChain(hash libcommon.Hash, number uint64) (execution.ExecutionStatus, libcommon.Hash, error) { - resp, err := c.executionModule.ValidateChain(c.ctx, &execution.ValidationRequest{ +func (c ChainReaderWriterEth1) ValidateChain(ctx context.Context, hash libcommon.Hash, number uint64) (execution.ExecutionStatus, *string, libcommon.Hash, error) { + resp, err := c.executionModule.ValidateChain(ctx, &execution.ValidationRequest{ Hash: gointerfaces.ConvertHashToH256(hash), Number: number, }) if err != nil { - return 0, libcommon.Hash{}, err + return 0, nil, libcommon.Hash{}, err + } + var validationError *string + if len(resp.ValidationError) > 0 { + validationError = &resp.ValidationError } - return resp.ValidationStatus, gointerfaces.ConvertH256ToHash(resp.LatestValidHash), err + return resp.ValidationStatus, validationError, gointerfaces.ConvertH256ToHash(resp.LatestValidHash), err } -func (c ChainReaderWriterEth1) UpdateForkChoice(headHash, safeHash, finalizeHash libcommon.Hash) (execution.ExecutionStatus, libcommon.Hash, error) { - resp, err := c.executionModule.UpdateForkChoice(c.ctx, &execution.ForkChoice{ +func (c ChainReaderWriterEth1) UpdateForkChoice(ctx context.Context, headHash, safeHash, finalizeHash libcommon.Hash) (execution.ExecutionStatus, *string, libcommon.Hash, error) { + resp, err := c.executionModule.UpdateForkChoice(ctx, &execution.ForkChoice{ HeadBlockHash: gointerfaces.ConvertHashToH256(headHash), SafeBlockHash: gointerfaces.ConvertHashToH256(safeHash), FinalizedBlockHash: gointerfaces.ConvertHashToH256(finalizeHash), - Timeout: c.fcuTimoutMillis, + Timeout: c.fcuTimeoutMillis, }) if err != nil { - return 0, libcommon.Hash{}, err + return 0, nil, libcommon.Hash{}, err } - return resp.Status, gointerfaces.ConvertH256ToHash(resp.LatestValidHash), err + var validationError *string + if len(resp.ValidationError) > 0 { + validationError = &resp.ValidationError + } + return resp.Status, validationError, gointerfaces.ConvertH256ToHash(resp.LatestValidHash), err } -func (c ChainReaderWriterEth1) GetForkchoice() (headHash, finalizedHash, safeHash libcommon.Hash, err error) { +func (c ChainReaderWriterEth1) GetForkChoice(ctx context.Context) (headHash, finalizedHash, safeHash libcommon.Hash, err error) { var resp *execution.ForkChoice - resp, err = c.executionModule.GetForkChoice(c.ctx, &emptypb.Empty{}) + resp, err = c.executionModule.GetForkChoice(ctx, &emptypb.Empty{}) if err != nil { - log.Error("GetHeader failed", "err", err) + log.Warn("[engine] GetForkChoice", "err", err) return } return gointerfaces.ConvertH256ToHash(resp.HeadBlockHash), gointerfaces.ConvertH256ToHash(resp.FinalizedBlockHash), gointerfaces.ConvertH256ToHash(resp.SafeBlockHash), nil } + +func (c ChainReaderWriterEth1) HasBlock(ctx context.Context, hash libcommon.Hash) (bool, error) { + resp, err := c.executionModule.HasBlock(ctx, &execution.GetSegmentRequest{ + BlockHash: gointerfaces.ConvertHashToH256(hash), + }) + if err != nil { + return false, err + } + return resp.HasBlock, nil +} + +func (c ChainReaderWriterEth1) AssembleBlock(baseHash libcommon.Hash, attributes *engine_types.PayloadAttributes) (id uint64, err error) { + request := &execution.AssembleBlockRequest{ + Timestamp: uint64(attributes.Timestamp), + PrevRandao: gointerfaces.ConvertHashToH256(attributes.PrevRandao), + SuggestedFeeRecipient: gointerfaces.ConvertAddressToH160(attributes.SuggestedFeeRecipient), + Withdrawals: eth1_utils.ConvertWithdrawalsToRpc(attributes.Withdrawals), + ParentHash: gointerfaces.ConvertHashToH256(baseHash), + } + if attributes.ParentBeaconBlockRoot != nil { + request.ParentBeaconBlockRoot = gointerfaces.ConvertHashToH256(*attributes.ParentBeaconBlockRoot) + } + resp, err := c.executionModule.AssembleBlock(context.Background(), request) + if err != nil { + return 0, err + } + if resp.Busy { + return 0, fmt.Errorf("execution data is still syncing") + } + return resp.Id, nil +} + +func (c ChainReaderWriterEth1) GetAssembledBlock(id uint64) (*cltypes.Eth1Block, *engine_types.BlobsBundleV1, *big.Int, error) { + resp, err := c.executionModule.GetAssembledBlock(context.Background(), &execution.GetAssembledBlockRequest{ + Id: id, + }) + if err != nil { + return nil, nil, nil, err + } + if resp.Busy { + return nil, nil, nil, fmt.Errorf("execution data is still syncing") + } + if resp.Data == nil { + return nil, nil, nil, nil + } + + bundle := engine_types.ConvertBlobsFromRpc(resp.Data.BlobsBundle) + blockValue := gointerfaces.ConvertH256ToUint256Int(resp.Data.BlockValue).ToBig() + payloadRpc := resp.Data.ExecutionPayload + + extraData := solid.NewExtraData() + extraData.SetBytes(payloadRpc.ExtraData) + blockHash := gointerfaces.ConvertH256ToHash(payloadRpc.BlockHash) + block := &cltypes.Eth1Block{ + ParentHash: gointerfaces.ConvertH256ToHash(payloadRpc.ParentHash), + FeeRecipient: gointerfaces.ConvertH160toAddress(payloadRpc.Coinbase), + StateRoot: gointerfaces.ConvertH256ToHash(payloadRpc.StateRoot), + ReceiptsRoot: gointerfaces.ConvertH256ToHash(payloadRpc.ReceiptRoot), + LogsBloom: gointerfaces.ConvertH2048ToBloom(payloadRpc.LogsBloom), + BlockNumber: payloadRpc.BlockNumber, + GasLimit: payloadRpc.GasLimit, + GasUsed: payloadRpc.GasUsed, + Time: payloadRpc.Timestamp, + Extra: extraData, + PrevRandao: gointerfaces.ConvertH256ToHash(payloadRpc.PrevRandao), + Transactions: solid.NewTransactionsSSZFromTransactions(payloadRpc.Transactions), + BlockHash: blockHash, + BaseFeePerGas: gointerfaces.ConvertH256ToHash(payloadRpc.BaseFeePerGas), + } + copy(block.BaseFeePerGas[:], utils.ReverseOfByteSlice(block.BaseFeePerGas[:])) // reverse the byte slice + if payloadRpc.ExcessBlobGas != nil { + block.ExcessBlobGas = *payloadRpc.ExcessBlobGas + } + if payloadRpc.BlobGasUsed != nil { + block.BlobGasUsed = *payloadRpc.BlobGasUsed + } + + // change the limit later + withdrawals := solid.NewStaticListSSZ[*cltypes.Withdrawal](int(clparams.MainnetBeaconConfig.MaxWithdrawalsPerPayload), 44) + for _, w := range payloadRpc.Withdrawals { + withdrawals.Append(&cltypes.Withdrawal{ + Amount: w.Amount, + Address: gointerfaces.ConvertH160toAddress(w.Address), + Index: w.Index, + Validator: w.ValidatorIndex, + }) + } + block.Withdrawals = withdrawals + return block, bundle, blockValue, nil +} diff --git a/turbo/execution/eth1/eth1_utils/grpc.go b/turbo/execution/eth1/eth1_utils/grpc.go index 692e0755392..73852888327 100644 --- a/turbo/execution/eth1/eth1_utils/grpc.go +++ b/turbo/execution/eth1/eth1_utils/grpc.go @@ -65,7 +65,10 @@ func HeaderToHeaderRPC(header *types.Header) *execution.Header { } func HeadersToHeadersRPC(headers []*types.Header) []*execution.Header { - ret := []*execution.Header{} + if headers == nil { + return nil + } + ret := make([]*execution.Header, 0, len(headers)) for _, header := range headers { ret = append(ret, HeaderToHeaderRPC(header)) } @@ -136,6 +139,21 @@ func HeaderRpcToHeader(header *execution.Header) (*types.Header, error) { return h, nil } +func HeadersRpcToHeaders(headers []*execution.Header) ([]*types.Header, error) { + if headers == nil { + return nil, nil + } + out := make([]*types.Header, 0, len(headers)) + for _, h := range headers { + header, err := HeaderRpcToHeader(h) + if err != nil { + return nil, err + } + out = append(out, header) + } + return out, nil +} + func ConvertWithdrawalsFromRpc(in []*types2.Withdrawal) []*types.Withdrawal { if in == nil { return nil @@ -177,6 +195,7 @@ func ConvertRawBlockBodyToRpc(in *types.RawBody, blockNumber uint64, blockHash l BlockNumber: blockNumber, BlockHash: gointerfaces.ConvertHashToH256(blockHash), Transactions: in.Transactions, + Uncles: HeadersToHeadersRPC(in.Uncles), Withdrawals: ConvertWithdrawalsToRpc(in.Withdrawals), } } @@ -190,14 +209,19 @@ func ConvertRawBlockBodiesToRpc(in []*types.RawBody, blockNumbers []uint64, bloc return ret } -func ConvertRawBlockBodyFromRpc(in *execution.BlockBody) *types.RawBody { +func ConvertRawBlockBodyFromRpc(in *execution.BlockBody) (*types.RawBody, error) { if in == nil { - return nil + return nil, nil + } + uncles, err := HeadersRpcToHeaders(in.Uncles) + if err != nil { + return nil, err } return &types.RawBody{ Transactions: in.Transactions, + Uncles: uncles, Withdrawals: ConvertWithdrawalsFromRpc(in.Withdrawals), - } + }, nil } func ConvertBigIntFromRpc(in *types2.H256) *big.Int { diff --git a/turbo/execution/eth1/eth1_utils/grpc_test.go b/turbo/execution/eth1/eth1_utils/grpc_test.go new file mode 100644 index 00000000000..eeb684d5062 --- /dev/null +++ b/turbo/execution/eth1/eth1_utils/grpc_test.go @@ -0,0 +1,98 @@ +package eth1_utils + +import ( + "testing" + + "github.com/holiman/uint256" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/common/math" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/crypto" + "github.com/ledgerwatch/erigon/params" + "github.com/stretchr/testify/require" +) + +func makeBlock(txCount, uncleCount, withdrawalCount int) *types.Block { + var ( + key, _ = crypto.GenerateKey() + txs = make([]types.Transaction, txCount) + receipts = make([]*types.Receipt, len(txs)) + signer = types.LatestSigner(params.TestChainConfig) + uncles = make([]*types.Header, uncleCount) + withdrawals = make([]*types.Withdrawal, withdrawalCount) + ) + header := &types.Header{ + Difficulty: math.BigPow(11, 11), + Number: math.BigPow(2, 9), + GasLimit: 12345678, + GasUsed: 1476322, + Time: 9876543, + Extra: []byte("test block"), + } + for i := range txs { + amount, _ := uint256.FromBig(math.BigPow(2, int64(i))) + price := uint256.NewInt(300000) + data := make([]byte, 100) + tx := types.NewTransaction(uint64(i), libcommon.Address{}, amount, 123457, price, data) + signedTx, err := types.SignTx(tx, *signer, key) + if err != nil { + panic(err) + } + txs[i] = signedTx + receipts[i] = types.NewReceipt(false, tx.GetGas()) + } + for i := range uncles { + uncles[i] = &types.Header{ + Difficulty: math.BigPow(11, 11), + Number: math.BigPow(2, 9), + GasLimit: 12345678, + GasUsed: 1476322, + Time: 9876543, + Extra: []byte("test uncle"), + } + } + for i := range withdrawals { + withdrawals[i] = &types.Withdrawal{ + Index: uint64(i), + Validator: uint64(i), + Amount: uint64(10 * i), + } + } + return types.NewBlock(header, txs, uncles, receipts, withdrawals) +} + +func TestBlockRpcConversion(t *testing.T) { + t.Parallel() + require := require.New(t) + testBlock := makeBlock(50, 2, 3) + + // header conversions + rpcHeader := HeaderToHeaderRPC(testBlock.Header()) + roundTripHeader, err := HeaderRpcToHeader(rpcHeader) + if err != nil { + panic(err) + } + require.Equal(testBlock.Header(), roundTripHeader) + + // body conversions + rpcBlock := ConvertBlockToRPC(testBlock) + roundTripBody, err := ConvertRawBlockBodyFromRpc(rpcBlock.Body) + if err != nil { + panic(err) + } + testBlockRaw := testBlock.RawBody() + require.Greater(len(testBlockRaw.Transactions), 0) + require.Greater(len(testBlockRaw.Uncles), 0) + require.Greater(len(testBlockRaw.Withdrawals), 0) + require.Equal(testBlockRaw, roundTripBody) // validates txns, uncles, and withdrawals +} + +func TestBigIntConversion(t *testing.T) { + t.Parallel() + require := require.New(t) + + val := math.BigPow(2, 32) + rpcVal := ConvertBigIntToRpc(val) + roundTripVal := ConvertBigIntFromRpc(rpcVal) + require.Equal(val, roundTripVal) +} diff --git a/turbo/execution/eth1/ethereum_execution.go b/turbo/execution/eth1/ethereum_execution.go index 1a367602192..5122edb36b7 100644 --- a/turbo/execution/eth1/ethereum_execution.go +++ b/turbo/execution/eth1/ethereum_execution.go @@ -5,14 +5,16 @@ import ( "errors" "math/big" + "github.com/ledgerwatch/log/v3" + "golang.org/x/sync/semaphore" + "google.golang.org/protobuf/types/known/emptypb" + "github.com/ledgerwatch/erigon-lib/chain" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/execution" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" "github.com/ledgerwatch/erigon-lib/wrap" - "github.com/ledgerwatch/log/v3" - "golang.org/x/sync/semaphore" - "google.golang.org/protobuf/types/known/emptypb" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/common/math" @@ -33,6 +35,7 @@ const maxBlocksLookBehind = 32 // EthereumExecutionModule describes ethereum execution logic and indexing. type EthereumExecutionModule struct { + bacgroundCtx context.Context // Snapshots + MDBX blockReader services.FullBlockReader @@ -63,8 +66,14 @@ type EthereumExecutionModule struct { execution.UnimplementedExecutionServer } -func NewEthereumExecutionModule(blockReader services.FullBlockReader, db kv.RwDB, executionPipeline *stagedsync.Sync, forkValidator *engine_helpers.ForkValidator, - config *chain.Config, builderFunc builder.BlockBuilderFunc, hook *stages.Hook, accumulator *shards.Accumulator, stateChangeConsumer shards.StateChangeConsumer, logger log.Logger, engine consensus.Engine, historyV3 bool) *EthereumExecutionModule { +func NewEthereumExecutionModule(blockReader services.FullBlockReader, db kv.RwDB, + executionPipeline *stagedsync.Sync, forkValidator *engine_helpers.ForkValidator, + config *chain.Config, builderFunc builder.BlockBuilderFunc, + hook *stages.Hook, accumulator *shards.Accumulator, + stateChangeConsumer shards.StateChangeConsumer, + logger log.Logger, engine consensus.Engine, + historyV3 bool, ctx context.Context, +) *EthereumExecutionModule { return &EthereumExecutionModule{ blockReader: blockReader, db: db, @@ -79,6 +88,7 @@ func NewEthereumExecutionModule(blockReader services.FullBlockReader, db kv.RwDB accumulator: accumulator, stateChangeConsumer: stateChangeConsumer, engine: engine, + bacgroundCtx: ctx, } } @@ -141,6 +151,7 @@ func (e *EthereumExecutionModule) canonicalHash(ctx context.Context, tx kv.Tx, b func (e *EthereumExecutionModule) ValidateChain(ctx context.Context, req *execution.ValidationRequest) (*execution.ValidationReceipt, error) { if !e.semaphore.TryAcquire(1) { + e.logger.Trace("ethereumExecutionModule.ValidateChain: ExecutionStatus_Busy") return &execution.ValidationReceipt{ LatestValidHash: gointerfaces.ConvertHashToH256(libcommon.Hash{}), ValidationStatus: execution.ExecutionStatus_Busy, @@ -204,10 +215,14 @@ func (e *EthereumExecutionModule) ValidateChain(ctx context.Context, req *execut e.logger.Warn("ethereumExecutionModule.ValidateChain: chain is invalid", "hash", libcommon.Hash(blockHash)) validationStatus = execution.ExecutionStatus_BadBlock } - return &execution.ValidationReceipt{ + validationReceipt := &execution.ValidationReceipt{ ValidationStatus: validationStatus, LatestValidHash: gointerfaces.ConvertHashToH256(lvh), - }, tx.Commit() + } + if validationError != nil { + validationReceipt.ValidationError = validationError.Error() + } + return validationReceipt, tx.Commit() } func (e *EthereumExecutionModule) purgeBadChain(ctx context.Context, tx kv.RwTx, latestValidHash, headHash libcommon.Hash) error { @@ -254,8 +269,41 @@ func (e *EthereumExecutionModule) Start(ctx context.Context) { func (e *EthereumExecutionModule) Ready(context.Context, *emptypb.Empty) (*execution.ReadyResponse, error) { if !e.semaphore.TryAcquire(1) { + e.logger.Trace("ethereumExecutionModule.Ready: ExecutionStatus_Busy") return &execution.ReadyResponse{Ready: false}, nil } defer e.semaphore.Release(1) return &execution.ReadyResponse{Ready: true}, nil } + +func (e *EthereumExecutionModule) HasBlock(ctx context.Context, in *execution.GetSegmentRequest) (*execution.HasBlockResponse, error) { + tx, err := e.db.BeginRo(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback() + if in.BlockHash == nil { + return nil, errors.New("block hash is nil, hasBlock support only by hash") + } + blockHash := gointerfaces.ConvertH256ToHash(in.BlockHash) + + num := rawdb.ReadHeaderNumber(tx, blockHash) + if num == nil { + return &execution.HasBlockResponse{HasBlock: false}, nil + } + if *num <= e.blockReader.FrozenBlocks() { + return &execution.HasBlockResponse{HasBlock: true}, nil + } + has, err := tx.Has(kv.Headers, dbutils.HeaderKey(*num, blockHash)) + if err != nil { + return nil, err + } + if !has { + return &execution.HasBlockResponse{HasBlock: false}, nil + } + has, err = tx.Has(kv.BlockBody, dbutils.HeaderKey(*num, blockHash)) + if err != nil { + return nil, err + } + return &execution.HasBlockResponse{HasBlock: has}, nil +} diff --git a/turbo/execution/eth1/forkchoice.go b/turbo/execution/eth1/forkchoice.go index 39656b6087b..b1f59b702c3 100644 --- a/turbo/execution/eth1/forkchoice.go +++ b/turbo/execution/eth1/forkchoice.go @@ -75,7 +75,7 @@ func (e *EthereumExecutionModule) UpdateForkChoice(ctx context.Context, req *exe outcomeCh := make(chan forkchoiceOutcome, 1) // So we wait at most the amount specified by req.Timeout before just sending out - go e.updateForkChoice(ctx, blockHash, safeHash, finalizedHash, outcomeCh) + go e.updateForkChoice(e.bacgroundCtx, blockHash, safeHash, finalizedHash, outcomeCh) var fcuTimer *time.Timer if e.config.IsOptimism() { @@ -131,7 +131,7 @@ func (e *EthereumExecutionModule) updateForkChoice(ctx context.Context, blockHas return } defer e.semaphore.Release(1) - + var validationError string type canonicalEntry struct { hash libcommon.Hash number uint64 @@ -360,6 +360,7 @@ func (e *EthereumExecutionModule) updateForkChoice(ctx context.Context, blockHas status := execution.ExecutionStatus_Success if headHash != blockHash { status = execution.ExecutionStatus_BadBlock + validationError = "headHash and blockHash mismatch" if log { e.logger.Warn("bad forkchoice", "head", headHash, "hash", blockHash) } @@ -407,5 +408,6 @@ func (e *EthereumExecutionModule) updateForkChoice(ctx context.Context, blockHas sendForkchoiceReceiptWithoutWaiting(outcomeCh, &execution.ForkChoiceReceipt{ LatestValidHash: gointerfaces.ConvertHashToH256(headHash), Status: status, + ValidationError: validationError, }) } diff --git a/turbo/execution/eth1/getters.go b/turbo/execution/eth1/getters.go index b282bce4e01..7c94b1e6bca 100644 --- a/turbo/execution/eth1/getters.go +++ b/turbo/execution/eth1/getters.go @@ -5,10 +5,11 @@ import ( "errors" "fmt" + "google.golang.org/protobuf/types/known/emptypb" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/kv" - "google.golang.org/protobuf/types/known/emptypb" "github.com/ledgerwatch/erigon-lib/gointerfaces/execution" types2 "github.com/ledgerwatch/erigon-lib/gointerfaces/types" @@ -52,27 +53,27 @@ func (e *EthereumExecutionModule) GetBody(ctx context.Context, req *execution.Ge } tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: could not open database: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetBody: could not begin database tx %w", err) } defer tx.Rollback() blockHash, blockNumber, err := e.parseSegmentRequest(ctx, tx, req) - if err == errNotFound { + if errors.Is(err, errNotFound) { return &execution.GetBodyResponse{Body: nil}, nil } if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetBody: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetBody: parseSegmentRequest error %w", err) } td, err := rawdb.ReadTd(tx, blockHash, blockNumber) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetBody: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetBody: ReadTd error %w", err) } if td == nil { return &execution.GetBodyResponse{Body: nil}, nil } body, err := e.getBody(ctx, tx, blockHash, blockNumber) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetBody: coild not read body: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetBody: getBody error %w", err) } if body == nil { return &execution.GetBodyResponse{Body: nil}, nil @@ -89,27 +90,24 @@ func (e *EthereumExecutionModule) GetHeader(ctx context.Context, req *execution. } tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: could not open database: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: could not begin database tx %w", err) } defer tx.Rollback() blockHash, blockNumber, err := e.parseSegmentRequest(ctx, tx, req) - if err == errNotFound { + if errors.Is(err, errNotFound) { return &execution.GetHeaderResponse{Header: nil}, nil } td, err := rawdb.ReadTd(tx, blockHash, blockNumber) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: ReadTd error %w", err) } if td == nil { return &execution.GetHeaderResponse{Header: nil}, nil } - if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: %s", err) - } header, err := e.getHeader(ctx, tx, blockHash, blockNumber) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: coild not read body: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: getHeader error %w", err) } if header == nil { return &execution.GetHeaderResponse{Header: nil}, nil @@ -121,7 +119,7 @@ func (e *EthereumExecutionModule) GetHeader(ctx context.Context, req *execution. func (e *EthereumExecutionModule) GetBodiesByHashes(ctx context.Context, req *execution.GetBodiesByHashesRequest) (*execution.GetBodiesBatchResponse, error) { tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, err + return nil, fmt.Errorf("ethereumExecutionModule.GetBodiesByHashes: could not begin database tx %w", err) } defer tx.Rollback() @@ -131,18 +129,20 @@ func (e *EthereumExecutionModule) GetBodiesByHashes(ctx context.Context, req *ex h := gointerfaces.ConvertH256ToHash(hash) number := rawdb.ReadHeaderNumber(tx, h) if number == nil { - break + bodies = append(bodies, nil) + continue } body, err := e.getBody(ctx, tx, h, *number) if err != nil { - return nil, err + return nil, fmt.Errorf("ethereumExecutionModule.GetBodiesByHashes: getBody error %w", err) } if body == nil { - break + bodies = append(bodies, nil) + continue } txs, err := types.MarshalTransactionsBinary(body.Transactions) if err != nil { - return nil, err + return nil, fmt.Errorf("ethereumExecutionModule.GetBodiesByHashes: MarshalTransactionsBinary error %w", err) } bodies = append(bodies, &execution.BlockBody{ Transactions: txs, @@ -156,7 +156,7 @@ func (e *EthereumExecutionModule) GetBodiesByHashes(ctx context.Context, req *ex func (e *EthereumExecutionModule) GetBodiesByRange(ctx context.Context, req *execution.GetBodiesByRangeRequest) (*execution.GetBodiesBatchResponse, error) { tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, err + return nil, fmt.Errorf("ethereumExecutionModule.GetBodiesByRange: could not begin database tx %w", err) } defer tx.Rollback() @@ -165,7 +165,7 @@ func (e *EthereumExecutionModule) GetBodiesByRange(ctx context.Context, req *exe for i := uint64(0); i < req.Count; i++ { hash, err := rawdb.ReadCanonicalHash(tx, req.Start+i) if err != nil { - return nil, err + return nil, fmt.Errorf("ethereumExecutionModule.GetBodiesByRange: ReadCanonicalHash error %w", err) } if hash == (libcommon.Hash{}) { // break early if beyond the last known canonical header @@ -174,18 +174,30 @@ func (e *EthereumExecutionModule) GetBodiesByRange(ctx context.Context, req *exe body, err := e.getBody(ctx, tx, hash, req.Start+i) if err != nil { - return nil, err + return nil, fmt.Errorf("ethereumExecutionModule.GetBodiesByRange: getBody error %w", err) + } + if body == nil { + // Append nil and no further processing + bodies = append(bodies, nil) + continue } txs, err := types.MarshalTransactionsBinary(body.Transactions) if err != nil { - return nil, err + return nil, fmt.Errorf("ethereumExecutionModule.GetBodiesByRange: MarshalTransactionsBinary error %w", err) } bodies = append(bodies, &execution.BlockBody{ Transactions: txs, Withdrawals: eth1_utils.ConvertWithdrawalsToRpc(body.Withdrawals), }) } + // Remove trailing nil values as per spec + // See point 4 in https://github.com/ethereum/execution-apis/blob/main/src/engine/shanghai.md#specification-4 + for i := len(bodies) - 1; i >= 0; i-- { + if bodies[i] == nil { + bodies = bodies[:i] + } + } return &execution.GetBodiesBatchResponse{ Bodies: bodies, @@ -195,7 +207,7 @@ func (e *EthereumExecutionModule) GetBodiesByRange(ctx context.Context, req *exe func (e *EthereumExecutionModule) GetHeaderHashNumber(ctx context.Context, req *types2.H256) (*execution.GetHeaderHashNumberResponse, error) { tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetBody: could not open database: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetHeaderHashNumber: could not begin database tx %w", err) } defer tx.Rollback() blockNumber := rawdb.ReadHeaderNumber(tx, gointerfaces.ConvertH256ToHash(req)) @@ -212,11 +224,11 @@ func (e *EthereumExecutionModule) isCanonicalHash(ctx context.Context, tx kv.Tx, } expectedHash, err := e.canonicalHash(ctx, tx, *blockNumber) if err != nil { - return false, fmt.Errorf("ethereumExecutionModule.CanonicalHash: could not read canonical hash") + return false, fmt.Errorf("ethereumExecutionModule.isCanonicalHash: could not read canonical hash %w", err) } td, err := rawdb.ReadTd(tx, hash, *blockNumber) if err != nil { - return false, fmt.Errorf("ethereumExecutionModule.GetBody: %s", err) + return false, fmt.Errorf("ethereumExecutionModule.isCanonicalHash: ReadTd error %w", err) } if td == nil { return false, nil @@ -227,13 +239,13 @@ func (e *EthereumExecutionModule) isCanonicalHash(ctx context.Context, tx kv.Tx, func (e *EthereumExecutionModule) IsCanonicalHash(ctx context.Context, req *types2.H256) (*execution.IsCanonicalResponse, error) { tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.CanonicalHash: could not open database: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.CanonicalHash: could not begin database tx %w", err) } defer tx.Rollback() isCanonical, err := e.isCanonicalHash(ctx, tx, gointerfaces.ConvertH256ToHash(req)) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.CanonicalHash: could not read canonical hash") + return nil, fmt.Errorf("ethereumExecutionModule.CanonicalHash: could not read canonical hash %w", err) } return &execution.IsCanonicalResponse{Canonical: isCanonical}, nil @@ -242,12 +254,18 @@ func (e *EthereumExecutionModule) IsCanonicalHash(ctx context.Context, req *type func (e *EthereumExecutionModule) CurrentHeader(ctx context.Context, _ *emptypb.Empty) (*execution.GetHeaderResponse, error) { tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.CurrentHeader: could not open database: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.CurrentHeader: could not begin database tx %w", err) } defer tx.Rollback() hash := rawdb.ReadHeadHeaderHash(tx) number := rawdb.ReadHeaderNumber(tx, hash) - h, _ := e.blockReader.Header(context.Background(), tx, hash, *number) + h, err := e.blockReader.Header(ctx, tx, hash, *number) + if err != nil { + return nil, fmt.Errorf("ethereumExecutionModule.CurrentHeader: blockReader.Header error %w", err) + } + if h == nil { + return nil, fmt.Errorf("ethereumExecutionModule.CurrentHeader: no current header yet - probabably node not synced yet") + } return &execution.GetHeaderResponse{ Header: eth1_utils.HeaderToHeaderRPC(h), }, nil @@ -256,24 +274,24 @@ func (e *EthereumExecutionModule) CurrentHeader(ctx context.Context, _ *emptypb. func (e *EthereumExecutionModule) GetTD(ctx context.Context, req *execution.GetSegmentRequest) (*execution.GetTDResponse, error) { // Invalid case: request is invalid. if req == nil || (req.BlockHash == nil && req.BlockNumber == nil) { - return nil, errors.New("ethereumExecutionModule.GetHeader: bad request") + return nil, errors.New("ethereumExecutionModule.GetTD: bad request") } tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: could not open database: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetTD: could not begin database tx %w", err) } defer tx.Rollback() blockHash, blockNumber, err := e.parseSegmentRequest(ctx, tx, req) - if err == errNotFound { + if errors.Is(err, errNotFound) { return &execution.GetTDResponse{Td: nil}, nil } if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetTD: parseSegmentRequest error %w", err) } td, err := e.getTD(ctx, tx, blockHash, blockNumber) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: coild not read body: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetTD: getTD error %w", err) } if td == nil { return &execution.GetTDResponse{Td: nil}, nil @@ -285,7 +303,7 @@ func (e *EthereumExecutionModule) GetTD(ctx context.Context, req *execution.GetS func (e *EthereumExecutionModule) GetForkChoice(ctx context.Context, _ *emptypb.Empty) (*execution.ForkChoice, error) { tx, err := e.db.BeginRo(ctx) if err != nil { - return nil, fmt.Errorf("ethereumExecutionModule.GetHeader: could not open database: %s", err) + return nil, fmt.Errorf("ethereumExecutionModule.GetForkChoice: could not begin database tx %w", err) } defer tx.Rollback() return &execution.ForkChoice{ diff --git a/turbo/execution/eth1/inserters.go b/turbo/execution/eth1/inserters.go index c49a34de86a..704678bdea1 100644 --- a/turbo/execution/eth1/inserters.go +++ b/turbo/execution/eth1/inserters.go @@ -3,14 +3,39 @@ package eth1 import ( "context" "fmt" + "reflect" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/metrics" "github.com/ledgerwatch/erigon-lib/gointerfaces/execution" "github.com/ledgerwatch/erigon/core/rawdb" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/execution/eth1/eth1_utils" ) +func (s *EthereumExecutionModule) validatePayloadBlobs(expectedBlobHashes []libcommon.Hash, transactions []types.Transaction, blobGasUsed uint64) error { + if expectedBlobHashes == nil { + return &rpc.InvalidParamsError{Message: "nil blob hashes array"} + } + actualBlobHashes := []libcommon.Hash{} + for _, txn := range transactions { + actualBlobHashes = append(actualBlobHashes, txn.GetBlobHashes()...) + } + if len(actualBlobHashes) > int(s.config.GetMaxBlobsPerBlock()) || blobGasUsed > s.config.GetMaxBlobGasPerBlock() { + return nil + } + if !reflect.DeepEqual(actualBlobHashes, expectedBlobHashes) { + s.logger.Warn("[NewPayload] mismatch in blob hashes", + "expectedBlobHashes", expectedBlobHashes, "actualBlobHashes", actualBlobHashes) + return nil + } + return nil +} + func (e *EthereumExecutionModule) InsertBlocks(ctx context.Context, req *execution.InsertBlocksRequest) (*execution.InsertionResult, error) { if !e.semaphore.TryAcquire(1) { + e.logger.Trace("ethereumExecutionModule.InsertBlocks: ExecutionStatus_Busy") return &execution.InsertionResult{ Result: execution.ExecutionStatus_Busy, }, nil @@ -28,7 +53,10 @@ func (e *EthereumExecutionModule) InsertBlocks(ctx context.Context, req *executi if err != nil { return nil, fmt.Errorf("ethereumExecutionModule.InsertBlocks: cannot convert headers: %s", err) } - body := eth1_utils.ConvertRawBlockBodyFromRpc(block.Body) + body, err := eth1_utils.ConvertRawBlockBodyFromRpc(block.Body) + if err != nil { + return nil, fmt.Errorf("ethereumExecutionModule.InsertBlocks: cannot convert body: %s", err) + } height := header.Number.Uint64() // Parent's total difficulty parentTd, err := rawdb.ReadTd(tx, header.ParentHash, height-1) @@ -36,6 +64,9 @@ func (e *EthereumExecutionModule) InsertBlocks(ctx context.Context, req *executi return nil, fmt.Errorf("parent's total difficulty not found with hash %x and height %d: %v", header.ParentHash, header.Number.Uint64()-1, err) } + metrics.UpdateBlockConsumerHeaderDownloadDelay(header.Time, height-1, e.logger) + metrics.UpdateBlockConsumerBodyDownloadDelay(header.Time, height-1, e.logger) + // Sum TDs. td := parentTd.Add(parentTd, header.Difficulty) if err := rawdb.WriteHeader(tx, header); err != nil { diff --git a/turbo/jsonrpc/corner_cases_support_test.go b/turbo/jsonrpc/corner_cases_support_test.go index 4bb4425a3a4..14ba8e1b434 100644 --- a/turbo/jsonrpc/corner_cases_support_test.go +++ b/turbo/jsonrpc/corner_cases_support_test.go @@ -4,12 +4,14 @@ import ( "context" "testing" - "github.com/ledgerwatch/erigon-lib/common" "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon-lib/common" + + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "github.com/ledgerwatch/erigon/rpc" - "github.com/ledgerwatch/log/v3" ) // TestNotFoundMustReturnNil - next methods - when record not found in db - must return nil instead of error @@ -18,7 +20,7 @@ func TestNotFoundMustReturnNil(t *testing.T) { require := require.New(t) m, _, _ := rpcdaemontest.CreateTestSentry(t) api := NewEthAPI(newBaseApiForTest(m), - m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) ctx := context.Background() a, err := api.GetTransactionByBlockNumberAndIndex(ctx, 10_000, 1) diff --git a/turbo/jsonrpc/daemon.go b/turbo/jsonrpc/daemon.go index f0023519af4..2858edf09ec 100644 --- a/turbo/jsonrpc/daemon.go +++ b/turbo/jsonrpc/daemon.go @@ -1,7 +1,10 @@ package jsonrpc import ( + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" + "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcache" libstate "github.com/ledgerwatch/erigon-lib/state" @@ -12,17 +15,16 @@ import ( "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/services" - "github.com/ledgerwatch/log/v3" ) // APIList describes the list of available RPC apis func APIList(db kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, filters *rpchelper.Filters, stateCache kvcache.Cache, - blockReader services.FullBlockReader, agg *libstate.AggregatorV3, cfg *httpcfg.HttpCfg, engine consensus.EngineReader, + blockReader services.FullBlockReader, agg *libstate.Aggregator, cfg *httpcfg.HttpCfg, engine consensus.EngineReader, seqRPCService, historicalRPCService *rpc.Client, logger log.Logger, ) (list []rpc.API) { base := NewBaseApi(filters, stateCache, blockReader, agg, cfg.WithDatadir, cfg.EvmCallTimeout, engine, cfg.Dirs, seqRPCService, historicalRPCService) - ethImpl := NewEthAPI(base, db, eth, txPool, mining, cfg.Gascap, cfg.ReturnDataLimit, cfg.AllowUnprotectedTxs, cfg.MaxGetProofRewindBlockCount, logger) + ethImpl := NewEthAPI(base, db, eth, txPool, mining, cfg.Gascap, cfg.Feecap, cfg.ReturnDataLimit, cfg.AllowUnprotectedTxs, cfg.MaxGetProofRewindBlockCount, cfg.WebsocketSubscribeLogsChannelSize, logger) erigonImpl := NewErigonAPI(base, db, eth) txpoolImpl := NewTxPoolAPI(base, db, txPool) netImpl := NewNetAPIImpl(eth) @@ -51,6 +53,7 @@ func APIList(db kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, m otsImpl := NewOtterscanAPI(base, db, cfg.OtsMaxPageSize) gqlImpl := NewGraphQLAPI(base, db) + overlayImpl := NewOverlayAPI(base, db, cfg.Gascap, cfg.OverlayGetLogsTimeout, cfg.OverlayReplayBlockTimeout, otsImpl) if cfg.GraphQLEnabled { list = append(list, rpc.API{ @@ -151,6 +154,13 @@ func APIList(db kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, m }) case "clique": list = append(list, clique.NewCliqueAPI(db, engine, blockReader)) + case "overlay": + list = append(list, rpc.API{ + Namespace: "overlay", + Public: true, + Service: OverlayAPI(overlayImpl), + Version: "1.0", + }) } } diff --git a/turbo/jsonrpc/debug_api.go b/turbo/jsonrpc/debug_api.go index 5be670aca03..c1240bde92f 100644 --- a/turbo/jsonrpc/debug_api.go +++ b/turbo/jsonrpc/debug_api.go @@ -37,7 +37,7 @@ type PrivateDebugAPI interface { TraceBlockByNumber(ctx context.Context, number rpc.BlockNumber, config *tracers.TraceConfig, stream *jsoniter.Stream) error AccountRange(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash, start []byte, maxResults int, nocode, nostorage bool) (state.IteratorDump, error) GetModifiedAccountsByNumber(ctx context.Context, startNum rpc.BlockNumber, endNum *rpc.BlockNumber) ([]common.Address, error) - GetModifiedAccountsByHash(_ context.Context, startHash common.Hash, endHash *common.Hash) ([]common.Address, error) + GetModifiedAccountsByHash(ctx context.Context, startHash common.Hash, endHash *common.Hash) ([]common.Address, error) TraceCall(ctx context.Context, args ethapi.CallArgs, blockNrOrHash rpc.BlockNumberOrHash, config *tracers.TraceConfig, stream *jsoniter.Stream) error AccountAt(ctx context.Context, blockHash common.Hash, txIndex uint64, account common.Address) (*AccountResult, error) GetRawHeader(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (hexutility.Bytes, error) @@ -72,7 +72,7 @@ func (api *PrivateDebugAPIImpl) StorageRangeAt(ctx context.Context, blockHash co } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return StorageRangeResult{}, err } @@ -87,7 +87,7 @@ func (api *PrivateDebugAPIImpl) StorageRangeAt(ctx context.Context, blockHash co return storageRangeAtV3(tx.(kv.TemporalTx), contractAddress, keyStart, minTxNum+txIndex, maxResult) } - block, err := api.blockByHashWithSenders(tx, blockHash) + block, err := api.blockByHashWithSenders(ctx, tx, blockHash) if err != nil { return StorageRangeResult{}, err } @@ -128,7 +128,7 @@ func (api *PrivateDebugAPIImpl) AccountRange(ctx context.Context, blockNrOrHash } } else if hash, ok := blockNrOrHash.Hash(); ok { - block, err1 := api.blockByHashWithSenders(tx, hash) + block, err1 := api.blockByHashWithSenders(ctx, tx, hash) if err1 != nil { return state.IteratorDump{}, err1 } @@ -248,7 +248,7 @@ func (api *PrivateDebugAPIImpl) GetModifiedAccountsByHash(ctx context.Context, s } defer tx.Rollback() - startBlock, err := api.blockByHashWithSenders(tx, startHash) + startBlock, err := api.blockByHashWithSenders(ctx, tx, startHash) if err != nil { return nil, err } @@ -259,7 +259,7 @@ func (api *PrivateDebugAPIImpl) GetModifiedAccountsByHash(ctx context.Context, s endNum := startNum + 1 // allows for single parameter calls if endHash != nil { - endBlock, err := api.blockByHashWithSenders(tx, *endHash) + endBlock, err := api.blockByHashWithSenders(ctx, tx, *endHash) if err != nil { return nil, err } @@ -336,13 +336,13 @@ func (api *PrivateDebugAPIImpl) AccountAt(ctx context.Context, blockHash common. return result, nil } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } engine := api.engine() - block, err := api.blockByHashWithSenders(tx, blockHash) + block, err := api.blockByHashWithSenders(ctx, tx, blockHash) if err != nil { return nil, err } @@ -378,7 +378,7 @@ func (api *PrivateDebugAPIImpl) GetRawHeader(ctx context.Context, blockNrOrHash if err != nil { return nil, err } - header, err := api._blockReader.Header(context.Background(), tx, h, n) + header, err := api._blockReader.Header(ctx, tx, h, n) if err != nil { return nil, err } @@ -398,7 +398,7 @@ func (api *PrivateDebugAPIImpl) GetRawBlock(ctx context.Context, blockNrOrHash r if err != nil { return nil, err } - block, err := api.blockWithSenders(tx, h, n) + block, err := api.blockWithSenders(ctx, tx, h, n) if err != nil { return nil, err } diff --git a/turbo/jsonrpc/debug_api_test.go b/turbo/jsonrpc/debug_api_test.go index c16f1769cda..97f05dc8666 100644 --- a/turbo/jsonrpc/debug_api_test.go +++ b/turbo/jsonrpc/debug_api_test.go @@ -8,6 +8,9 @@ import ( "github.com/davecgh/go-spew/spew" jsoniter "github.com/json-iterator/go" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/iter" @@ -19,8 +22,6 @@ import ( "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/rpc/rpccfg" "github.com/ledgerwatch/erigon/turbo/adapter/ethapi" - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/require" ) var dumper = spew.ConfigState{Indent: " "} @@ -52,7 +53,7 @@ func TestTraceBlockByNumber(t *testing.T) { agg := m.HistoryV3Components() stateCache := kvcache.New(kvcache.DefaultCoherentConfig) baseApi := NewBaseApi(nil, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil) - ethApi := NewEthAPI(baseApi, m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + ethApi := NewEthAPI(baseApi, m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) api := NewPrivateDebugAPI(baseApi, m.DB, 0) for _, tt := range debugTraceTransactionTests { var buf bytes.Buffer @@ -97,7 +98,7 @@ func TestTraceBlockByNumber(t *testing.T) { func TestTraceBlockByHash(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) - ethApi := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + ethApi := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) api := NewPrivateDebugAPI(newBaseApiForTest(m), m.DB, 0) for _, tt := range debugTraceTransactionTests { var buf bytes.Buffer diff --git a/turbo/jsonrpc/erigon_block.go b/turbo/jsonrpc/erigon_block.go index e1b5c015407..8ba480439e4 100644 --- a/turbo/jsonrpc/erigon_block.go +++ b/turbo/jsonrpc/erigon_block.go @@ -104,7 +104,7 @@ func (api *ErigonImpl) GetBlockByTimestamp(ctx context.Context, timeStamp rpc.Ti firstHeaderTime := firstHeader.Time if currentHeaderTime <= uintTimestamp { - blockResponse, err := buildBlockResponse(api._blockReader, tx, highestNumber, fullTx) + blockResponse, err := buildBlockResponse(ctx, api._blockReader, tx, highestNumber, fullTx) if err != nil { return nil, err } @@ -113,7 +113,7 @@ func (api *ErigonImpl) GetBlockByTimestamp(ctx context.Context, timeStamp rpc.Ti } if firstHeaderTime >= uintTimestamp { - blockResponse, err := buildBlockResponse(api._blockReader, tx, 0, fullTx) + blockResponse, err := buildBlockResponse(ctx, api._blockReader, tx, 0, fullTx) if err != nil { return nil, err } @@ -157,7 +157,7 @@ func (api *ErigonImpl) GetBlockByTimestamp(ctx context.Context, timeStamp rpc.Ti resultingHeader = beforeHeader } - response, err := buildBlockResponse(api._blockReader, tx, uint64(blockNum), fullTx) + response, err := buildBlockResponse(ctx, api._blockReader, tx, uint64(blockNum), fullTx) if err != nil { return nil, err } @@ -165,8 +165,8 @@ func (api *ErigonImpl) GetBlockByTimestamp(ctx context.Context, timeStamp rpc.Ti return response, nil } -func buildBlockResponse(br services.FullBlockReader, db kv.Tx, blockNum uint64, fullTx bool) (map[string]interface{}, error) { - header, err := br.HeaderByNumber(context.Background(), db, blockNum) +func buildBlockResponse(ctx context.Context, br services.FullBlockReader, db kv.Tx, blockNum uint64, fullTx bool) (map[string]interface{}, error) { + header, err := br.HeaderByNumber(ctx, db, blockNum) if err != nil { return nil, err } @@ -174,7 +174,7 @@ func buildBlockResponse(br services.FullBlockReader, db kv.Tx, blockNum uint64, return nil, nil } - block, _, err := br.BlockWithSenders(context.Background(), db, header.Hash(), blockNum) + block, _, err := br.BlockWithSenders(ctx, db, header.Hash(), blockNum) if err != nil { return nil, err } diff --git a/turbo/jsonrpc/erigon_receipts.go b/turbo/jsonrpc/erigon_receipts.go index 46bbb2084b0..c8fa1d850c4 100644 --- a/turbo/jsonrpc/erigon_receipts.go +++ b/turbo/jsonrpc/erigon_receipts.go @@ -7,13 +7,15 @@ import ( "fmt" "github.com/RoaringBitmap/roaring" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" - "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/ethutils" "github.com/ledgerwatch/erigon/eth/filters" "github.com/ledgerwatch/erigon/ethdb/cbor" "github.com/ledgerwatch/erigon/rpc" @@ -28,19 +30,14 @@ func (api *ErigonImpl) GetLogsByHash(ctx context.Context, hash common.Hash) ([][ } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) - if err != nil { - return nil, err - } - - block, err := api.blockByHashWithSenders(tx, hash) + block, err := api.blockByHashWithSenders(ctx, tx, hash) if err != nil { return nil, err } if block == nil { return nil, nil } - receipts, err := api.getReceipts(ctx, tx, chainConfig, block, block.Body().SendersFromTxs()) + receipts, err := api.getReceipts(ctx, tx, block, block.Body().SendersFromTxs()) if err != nil { return nil, fmt.Errorf("getReceipts error: %w", err) } @@ -151,6 +148,9 @@ func (api *ErigonImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) } blockLogs = append(blockLogs, filtered...) } + if casted, ok := it.(kv.Closer); ok { + casted.Close() + } if len(blockLogs) == 0 { continue } @@ -177,7 +177,7 @@ func (api *ErigonImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) erigonLog.BlockNumber = blockNumber erigonLog.BlockHash = blockHash if log.TxIndex == uint(len(body.Transactions)) { - erigonLog.TxHash = types.ComputeBorTxHash(blockNumber, blockHash) + erigonLog.TxHash = bortypes.ComputeBorTxHash(blockNumber, blockHash) } else { erigonLog.TxHash = body.Transactions[log.TxIndex].Hash() } @@ -197,9 +197,9 @@ func (api *ErigonImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) // GetLatestLogs implements erigon_getLatestLogs. // Return specific number of logs or block matching a give filter objects by descend. -// IgnoreTopicsOrder option provide a way to match the logs with addresses and topics without caring the topics's orders +// IgnoreTopicsOrder option provide a way to match the logs with addresses and topics without caring about the topics' orders // When IgnoreTopicsOrde option is true, once the logs have a topic that matched, it will be returned no matter what topic position it is in. - +// // blockCount parameter is for better pagination. // `crit` filter is the same filter. // @@ -329,8 +329,11 @@ func (api *ErigonImpl) GetLatestLogs(ctx context.Context, crit filters.FilterCri if logOptions.LogCount != 0 && logOptions.LogCount <= logCount { break } - } + if casted, ok := it.(kv.Closer); ok { + casted.Close() + } + blockCount++ if len(blockLogs) == 0 { continue @@ -359,7 +362,7 @@ func (api *ErigonImpl) GetLatestLogs(ctx context.Context, crit filters.FilterCri erigonLog.BlockNumber = blockNumber erigonLog.BlockHash = blockHash if log.TxIndex == uint(len(body.Transactions)) { - erigonLog.TxHash = types.ComputeBorTxHash(blockNumber, blockHash) + erigonLog.TxHash = bortypes.ComputeBorTxHash(blockNumber, blockHash) } else { erigonLog.TxHash = body.Transactions[log.TxIndex].Hash() } @@ -408,18 +411,18 @@ func (api *ErigonImpl) GetBlockReceiptsByBlockHash(ctx context.Context, cannonic if err != nil { return nil, err } - block, err := api.blockWithSenders(tx, cannonicalBlockHash, blockNum) + block, err := api.blockWithSenders(ctx, tx, cannonicalBlockHash, blockNum) if err != nil { return nil, err } if block == nil { return nil, nil } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } - receipts, err := api.getReceipts(ctx, tx, chainConfig, block, block.Body().SendersFromTxs()) + receipts, err := api.getReceipts(ctx, tx, block, block.Body().SendersFromTxs()) if err != nil { return nil, fmt.Errorf("getReceipts error: %w", err) } @@ -427,7 +430,7 @@ func (api *ErigonImpl) GetBlockReceiptsByBlockHash(ctx context.Context, cannonic result := make([]map[string]interface{}, 0, len(receipts)) for _, receipt := range receipts { txn := block.Transactions()[receipt.TransactionIndex] - result = append(result, marshalReceipt(receipt, txn, chainConfig, block.HeaderNoCopy(), txn.Hash(), true)) + result = append(result, ethutils.MarshalReceipt(receipt, txn, chainConfig, block.HeaderNoCopy(), txn.Hash(), true)) } if chainConfig.Bor != nil { @@ -438,7 +441,7 @@ func (api *ErigonImpl) GetBlockReceiptsByBlockHash(ctx context.Context, cannonic return nil, err } if borReceipt != nil { - result = append(result, marshalReceipt(borReceipt, borTx, chainConfig, block.HeaderNoCopy(), borReceipt.TxHash, false)) + result = append(result, ethutils.MarshalReceipt(borReceipt, borTx, chainConfig, block.HeaderNoCopy(), borReceipt.TxHash, false)) } } } diff --git a/turbo/jsonrpc/erigon_receipts_test.go b/turbo/jsonrpc/erigon_receipts_test.go index fe38cf9d63d..79a72ff3a23 100644 --- a/turbo/jsonrpc/erigon_receipts_test.go +++ b/turbo/jsonrpc/erigon_receipts_test.go @@ -7,11 +7,14 @@ import ( "testing" "github.com/holiman/uint256" - libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/kv" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv" + + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/erigon/core" @@ -22,14 +25,13 @@ import ( "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/stages/mock" - "github.com/ledgerwatch/log/v3" ) func TestGetLogs(t *testing.T) { assert := assert.New(t) m, _, _ := rpcdaemontest.CreateTestSentry(t) { - ethApi := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + ethApi := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) logs, err := ethApi.GetLogs(context.Background(), filters.FilterCriteria{FromBlock: big.NewInt(0), ToBlock: big.NewInt(10)}) assert.NoError(err) diff --git a/turbo/jsonrpc/erigon_system.go b/turbo/jsonrpc/erigon_system.go index 54bcf65d4ac..ec1a4af1c68 100644 --- a/turbo/jsonrpc/erigon_system.go +++ b/turbo/jsonrpc/erigon_system.go @@ -3,6 +3,7 @@ package jsonrpc import ( "context" "errors" + "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/common" @@ -29,7 +30,7 @@ func (api *ErigonImpl) Forks(ctx context.Context) (Forks, error) { } defer tx.Rollback() - chainConfig, genesis, err := api.chainConfigWithGenesis(tx) + chainConfig, genesis, err := api.chainConfigWithGenesis(ctx, tx) if err != nil { return Forks{}, err } diff --git a/turbo/jsonrpc/eth_accounts.go b/turbo/jsonrpc/eth_accounts.go index 325982015ce..2f8aa98ffe4 100644 --- a/turbo/jsonrpc/eth_accounts.go +++ b/turbo/jsonrpc/eth_accounts.go @@ -33,7 +33,7 @@ func (api *APIImpl) GetBalance(ctx context.Context, address libcommon.Address, b if err != nil { return nil, err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, fmt.Errorf("read chain config: %v", err) } @@ -90,7 +90,7 @@ func (api *APIImpl) GetTransactionCount(ctx context.Context, address libcommon.A if err != nil { return nil, err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, fmt.Errorf("read chain config: %v", err) } @@ -130,7 +130,7 @@ func (api *APIImpl) GetCode(ctx context.Context, address libcommon.Address, bloc if err != nil { return nil, err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, fmt.Errorf("read chain config: %v", err) } @@ -176,7 +176,7 @@ func (api *APIImpl) GetStorageAt(ctx context.Context, address libcommon.Address, if err != nil { return hexutility.Encode(common.LeftPadBytes(empty, 32)), err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return hexutility.Encode(common.LeftPadBytes(empty, 32)), fmt.Errorf("read chain config: %v", err) } diff --git a/turbo/jsonrpc/eth_accounts_test.go b/turbo/jsonrpc/eth_accounts_test.go index 7368f02bdbc..0648c32f5ba 100644 --- a/turbo/jsonrpc/eth_accounts_test.go +++ b/turbo/jsonrpc/eth_accounts_test.go @@ -50,7 +50,7 @@ func (m *MockServer) GetRPC() (*rpc.Client, error) { func TestGetBalanceHistoricalRPC(t *testing.T) { m, _, _ := rpcdaemontest.CreateOptimismTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := libcommon.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") table := []struct { @@ -111,7 +111,7 @@ func TestGetBalanceHistoricalRPC(t *testing.T) { func TestGetTransactionCountHistoricalRPC(t *testing.T) { m, _, _ := rpcdaemontest.CreateOptimismTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := libcommon.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") table := []struct { @@ -172,7 +172,7 @@ func TestGetTransactionCountHistoricalRPC(t *testing.T) { func TestGetCodeHistoricalRPC(t *testing.T) { m, _, _ := rpcdaemontest.CreateOptimismTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 1e18, 5000000, 100_000, false, 100_000, 128, log.New()) addr := libcommon.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") table := []struct { @@ -233,7 +233,7 @@ func TestGetCodeHistoricalRPC(t *testing.T) { func TestGetStorageAtHistoricalRPC(t *testing.T) { m, _, _ := rpcdaemontest.CreateOptimismTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 1e18, 5000000, 100_000, false, 100_000, 128, log.New()) addr := libcommon.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") table := []struct { diff --git a/turbo/jsonrpc/eth_api.go b/turbo/jsonrpc/eth_api.go index e7d6334beb3..e1f5ccfdd90 100644 --- a/turbo/jsonrpc/eth_api.go +++ b/turbo/jsonrpc/eth_api.go @@ -109,8 +109,11 @@ type EthAPI interface { } type BaseAPI struct { - stateCache kvcache.Cache // thread-safe - blocksLRU *lru.Cache[common.Hash, *types.Block] // thread-safe + // all caches are thread-safe + stateCache kvcache.Cache + blocksLRU *lru.Cache[common.Hash, *types.Block] + receiptsCache *lru.Cache[common.Hash, []*types.Receipt] + filters *rpchelper.Filters _chainConfig atomic.Pointer[chain.Config] _genesis atomic.Pointer[types.Block] @@ -119,7 +122,7 @@ type BaseAPI struct { _blockReader services.FullBlockReader _txnReader services.TxnReader - _agg *libstate.AggregatorV3 + _agg *libstate.Aggregator _engine consensus.EngineReader evmCallTimeout time.Duration @@ -130,29 +133,43 @@ type BaseAPI struct { historicalRPCService *rpc.Client } -func NewBaseApi( - f *rpchelper.Filters, stateCache kvcache.Cache, blockReader services.FullBlockReader, agg *libstate.AggregatorV3, - singleNodeMode bool, evmCallTimeout time.Duration, engine consensus.EngineReader, dirs datadir.Dirs, - seqRPCService *rpc.Client, historicalRPCService *rpc.Client, -) *BaseAPI { - blocksLRUSize := 128 // ~32Mb +func NewBaseApi(f *rpchelper.Filters, stateCache kvcache.Cache, blockReader services.FullBlockReader, agg *libstate.Aggregator, singleNodeMode bool, evmCallTimeout time.Duration, engine consensus.EngineReader, dirs datadir.Dirs, seqRPCService *rpc.Client, historicalRPCService *rpc.Client) *BaseAPI { + var ( + blocksLRUSize = 128 // ~32Mb + receiptsCacheLimit = 32 + ) + // if RPCDaemon deployed as independent process: increase cache sizes if !singleNodeMode { - blocksLRUSize = 512 + blocksLRUSize *= 5 + receiptsCacheLimit *= 5 } blocksLRU, err := lru.New[common.Hash, *types.Block](blocksLRUSize) if err != nil { panic(err) } + receiptsCache, err := lru.New[common.Hash, []*types.Receipt](receiptsCacheLimit) + if err != nil { + panic(err) + } return &BaseAPI{ - filters: f, stateCache: stateCache, blocksLRU: blocksLRU, _blockReader: blockReader, _txnReader: blockReader, - _agg: agg, evmCallTimeout: evmCallTimeout, _engine: engine, dirs: dirs, - seqRPCService: seqRPCService, historicalRPCService: historicalRPCService, + filters: f, + stateCache: stateCache, + blocksLRU: blocksLRU, + receiptsCache: receiptsCache, + _blockReader: blockReader, + _txnReader: blockReader, + _agg: agg, + evmCallTimeout: evmCallTimeout, + _engine: engine, + dirs: dirs, + seqRPCService: seqRPCService, + historicalRPCService: historicalRPCService, } } -func (api *BaseAPI) chainConfig(tx kv.Tx) (*chain.Config, error) { - cfg, _, err := api.chainConfigWithGenesis(tx) +func (api *BaseAPI) chainConfig(ctx context.Context, tx kv.Tx) (*chain.Config, error) { + cfg, _, err := api.chainConfigWithGenesis(ctx, tx) return cfg, err } @@ -161,24 +178,24 @@ func (api *BaseAPI) engine() consensus.EngineReader { } // nolint:unused -func (api *BaseAPI) genesis(tx kv.Tx) (*types.Block, error) { - _, genesis, err := api.chainConfigWithGenesis(tx) +func (api *BaseAPI) genesis(ctx context.Context, tx kv.Tx) (*types.Block, error) { + _, genesis, err := api.chainConfigWithGenesis(ctx, tx) return genesis, err } -func (api *BaseAPI) txnLookup(tx kv.Tx, txnHash common.Hash) (uint64, bool, error) { - return api._txnReader.TxnLookup(context.Background(), tx, txnHash) +func (api *BaseAPI) txnLookup(ctx context.Context, tx kv.Tx, txnHash common.Hash) (uint64, bool, error) { + return api._txnReader.TxnLookup(ctx, tx, txnHash) } -func (api *BaseAPI) blockByNumberWithSenders(tx kv.Tx, number uint64) (*types.Block, error) { - hash, hashErr := api._blockReader.CanonicalHash(context.Background(), tx, number) +func (api *BaseAPI) blockByNumberWithSenders(ctx context.Context, tx kv.Tx, number uint64) (*types.Block, error) { + hash, hashErr := api._blockReader.CanonicalHash(ctx, tx, number) if hashErr != nil { return nil, hashErr } - return api.blockWithSenders(tx, hash, number) + return api.blockWithSenders(ctx, tx, hash, number) } -func (api *BaseAPI) blockByHashWithSenders(tx kv.Tx, hash common.Hash) (*types.Block, error) { +func (api *BaseAPI) blockByHashWithSenders(ctx context.Context, tx kv.Tx, hash common.Hash) (*types.Block, error) { if api.blocksLRU != nil { if it, ok := api.blocksLRU.Get(hash); ok && it != nil { return it, nil @@ -189,7 +206,7 @@ func (api *BaseAPI) blockByHashWithSenders(tx kv.Tx, hash common.Hash) (*types.B return nil, nil } - return api.blockWithSenders(tx, hash, *number) + return api.blockWithSenders(ctx, tx, hash, *number) } func (api *BaseAPI) blockNumberFromBlockNumberOrHash(tx kv.Tx, bnh *rpc.BlockNumberOrHash) (uint64, error) { @@ -206,13 +223,13 @@ func (api *BaseAPI) blockNumberFromBlockNumberOrHash(tx kv.Tx, bnh *rpc.BlockNum return 0, fmt.Errorf("invalid block number of hash") } -func (api *BaseAPI) blockWithSenders(tx kv.Tx, hash common.Hash, number uint64) (*types.Block, error) { +func (api *BaseAPI) blockWithSenders(ctx context.Context, tx kv.Tx, hash common.Hash, number uint64) (*types.Block, error) { if api.blocksLRU != nil { if it, ok := api.blocksLRU.Get(hash); ok && it != nil { return it, nil } } - block, _, err := api._blockReader.BlockWithSenders(context.Background(), tx, hash, number) + block, _, err := api._blockReader.BlockWithSenders(ctx, tx, hash, number) if err != nil { return nil, err } @@ -249,13 +266,13 @@ func (api *BaseAPI) historyV3(tx kv.Tx) bool { return enabled } -func (api *BaseAPI) chainConfigWithGenesis(tx kv.Tx) (*chain.Config, *types.Block, error) { +func (api *BaseAPI) chainConfigWithGenesis(ctx context.Context, tx kv.Tx) (*chain.Config, *types.Block, error) { cc, genesisBlock := api._chainConfig.Load(), api._genesis.Load() if cc != nil && genesisBlock != nil { return cc, genesisBlock, nil } - genesisBlock, err := api.blockByRPCNumber(0, tx) + genesisBlock, err := api.blockByRPCNumber(ctx, 0, tx) if err != nil { return nil, nil, err } @@ -277,23 +294,23 @@ func (api *BaseAPI) pendingBlock() *types.Block { return api.filters.LastPendingBlock() } -func (api *BaseAPI) blockByRPCNumber(number rpc.BlockNumber, tx kv.Tx) (*types.Block, error) { +func (api *BaseAPI) blockByRPCNumber(ctx context.Context, number rpc.BlockNumber, tx kv.Tx) (*types.Block, error) { n, h, _, err := rpchelper.GetBlockNumber(rpc.BlockNumberOrHashWithNumber(number), tx, api.filters) if err != nil { return nil, err } // it's ok to use context.Background(), because in "Remote RPCDaemon" `tx` already contains internal ctx - block, err := api.blockWithSenders(tx, h, n) + block, err := api.blockWithSenders(ctx, tx, h, n) return block, err } -func (api *BaseAPI) headerByRPCNumber(number rpc.BlockNumber, tx kv.Tx) (*types.Header, error) { +func (api *BaseAPI) headerByRPCNumber(ctx context.Context, number rpc.BlockNumber, tx kv.Tx) (*types.Header, error) { n, h, _, err := rpchelper.GetBlockNumber(rpc.BlockNumberOrHashWithNumber(number), tx, api.filters) if err != nil { return nil, err } - return api._blockReader.Header(context.Background(), tx, h, n) + return api._blockReader.Header(ctx, tx, h, n) } // checks the pruning state to see if we would hold information about this @@ -351,14 +368,16 @@ type APIImpl struct { gasCache *GasPriceCache db kv.RoDB GasCap uint64 + FeeCap float64 ReturnDataLimit int AllowUnprotectedTxs bool MaxGetProofRewindBlockCount int + SubscribeLogsChannelSize int logger log.Logger } // NewEthAPI returns APIImpl instance -func NewEthAPI(base *BaseAPI, db kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, gascap uint64, returnDataLimit int, allowUnprotectedTxs bool, maxGetProofRewindBlockCount int, logger log.Logger) *APIImpl { +func NewEthAPI(base *BaseAPI, db kv.RoDB, eth rpchelper.ApiBackend, txPool txpool.TxpoolClient, mining txpool.MiningClient, gascap uint64, feecap float64, returnDataLimit int, allowUnprotectedTxs bool, maxGetProofRewindBlockCount int, subscribeLogsChannelSize int, logger log.Logger) *APIImpl { if gascap == 0 { gascap = uint64(math.MaxUint64 / 2) } @@ -371,9 +390,11 @@ func NewEthAPI(base *BaseAPI, db kv.RoDB, eth rpchelper.ApiBackend, txPool txpoo mining: mining, gasCache: NewGasPriceCache(), GasCap: gascap, + FeeCap: feecap, AllowUnprotectedTxs: allowUnprotectedTxs, ReturnDataLimit: returnDataLimit, MaxGetProofRewindBlockCount: maxGetProofRewindBlockCount, + SubscribeLogsChannelSize: subscribeLogsChannelSize, logger: logger, } } @@ -402,9 +423,10 @@ type RPCTransaction struct { ChainID *hexutil.Big `json:"chainId,omitempty"` MaxFeePerBlobGas *hexutil.Big `json:"maxFeePerBlobGas,omitempty"` BlobVersionedHashes []common.Hash `json:"blobVersionedHashes,omitempty"` - V *hexutil.Big `json:"v,omitempty"` - R *hexutil.Big `json:"r,omitempty"` - S *hexutil.Big `json:"s,omitempty"` + V *hexutil.Big `json:"v"` + YParity *hexutil.Big `json:"yParity,omitempty"` + R *hexutil.Big `json:"r"` + S *hexutil.Big `json:"s"` // deposit-tx only SourceHash *common.Hash `json:"sourceHash,omitempty"` @@ -420,7 +442,7 @@ func NewRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber receipt *types.Receipt) *RPCTransaction { // Determine the signer. For replay-protected transactions, use the most permissive // signer, because we assume that signers are backwards-compatible with old - // transactions. For non-protected transactions, the homestead signer signer is used + // transactions. For non-protected transactions, the homestead signer is used // because the return value of ChainId is zero for those transactions. chainId := uint256.NewInt(0) result := &RPCTransaction{ @@ -432,6 +454,9 @@ func NewRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber To: tx.GetTo(), Value: (*hexutil.Big)(tx.GetValue().ToBig()), } + if t, ok := tx.(*types.BlobTxWrapper); ok { + tx = &t.Tx + } switch t := tx.(type) { case *types.LegacyTx: // avoid overflow by not calling DeriveChainId. chain id not included when v = 0 @@ -450,6 +475,7 @@ func NewRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber chainId.Set(t.ChainID) result.ChainID = (*hexutil.Big)(chainId.ToBig()) result.GasPrice = (*hexutil.Big)(t.GasPrice.ToBig()) + result.YParity = (*hexutil.Big)(t.V.ToBig()) result.V = (*hexutil.Big)(t.V.ToBig()) result.R = (*hexutil.Big)(t.R.ToBig()) result.S = (*hexutil.Big)(t.S.ToBig()) @@ -459,6 +485,7 @@ func NewRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber result.ChainID = (*hexutil.Big)(chainId.ToBig()) result.Tip = (*hexutil.Big)(t.Tip.ToBig()) result.FeeCap = (*hexutil.Big)(t.FeeCap.ToBig()) + result.YParity = (*hexutil.Big)(t.V.ToBig()) result.V = (*hexutil.Big)(t.V.ToBig()) result.R = (*hexutil.Big)(t.R.ToBig()) result.S = (*hexutil.Big)(t.S.ToBig()) @@ -490,6 +517,7 @@ func NewRPCTransaction(tx types.Transaction, blockHash common.Hash, blockNumber result.ChainID = (*hexutil.Big)(chainId.ToBig()) result.Tip = (*hexutil.Big)(t.Tip.ToBig()) result.FeeCap = (*hexutil.Big)(t.FeeCap.ToBig()) + result.YParity = (*hexutil.Big)(t.V.ToBig()) result.V = (*hexutil.Big)(t.V.ToBig()) result.R = (*hexutil.Big)(t.R.ToBig()) result.S = (*hexutil.Big)(t.S.ToBig()) diff --git a/turbo/jsonrpc/eth_api_test.go b/turbo/jsonrpc/eth_api_test.go index 79014212945..f2e43cb6357 100644 --- a/turbo/jsonrpc/eth_api_test.go +++ b/turbo/jsonrpc/eth_api_test.go @@ -11,10 +11,11 @@ import ( "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/holiman/uint256" - "github.com/ledgerwatch/erigon-lib/common" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/kv/kvcache" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/types" @@ -23,8 +24,9 @@ import ( "github.com/ledgerwatch/erigon/turbo/adapter/ethapi" "github.com/ledgerwatch/erigon/turbo/stages/mock" - "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" ) func newBaseApiForTest(m *mock.MockSentry) *BaseAPI { @@ -60,7 +62,7 @@ func TestGetTransactionReceipt(t *testing.T) { db := m.DB agg := m.HistoryV3Components() stateCache := kvcache.New(kvcache.DefaultCoherentConfig) - api := NewEthAPI(NewBaseApi(nil, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), db, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(NewBaseApi(nil, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), db, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) // Call GetTransactionReceipt for transaction which is not in the database if _, err := api.GetTransactionReceipt(context.Background(), common.Hash{}); err != nil { t.Errorf("calling GetTransactionReceipt with empty hash: %v", err) @@ -69,7 +71,7 @@ func TestGetTransactionReceipt(t *testing.T) { func TestGetTransactionReceiptUnprotected(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) // Call GetTransactionReceipt for un-protected transaction if _, err := api.GetTransactionReceipt(context.Background(), common.HexToHash("0x3f3cb8a0e13ed2481f97f53f7095b9cbc78b6ffb779f2d3e565146371a8830ea")); err != nil { t.Errorf("calling GetTransactionReceipt for unprotected tx: %v", err) @@ -81,7 +83,7 @@ func TestGetTransactionReceiptUnprotected(t *testing.T) { func TestGetStorageAt_ByBlockNumber_WithRequireCanonicalDefault(t *testing.T) { assert := assert.New(t) m, _, _ := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") result, err := api.GetStorageAt(context.Background(), addr, "0x0", rpc.BlockNumberOrHashWithNumber(0)) @@ -95,7 +97,7 @@ func TestGetStorageAt_ByBlockNumber_WithRequireCanonicalDefault(t *testing.T) { func TestGetStorageAt_ByBlockHash_WithRequireCanonicalDefault(t *testing.T) { assert := assert.New(t) m, _, _ := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") result, err := api.GetStorageAt(context.Background(), addr, "0x0", rpc.BlockNumberOrHashWithHash(m.Genesis.Hash(), false)) @@ -109,7 +111,7 @@ func TestGetStorageAt_ByBlockHash_WithRequireCanonicalDefault(t *testing.T) { func TestGetStorageAt_ByBlockHash_WithRequireCanonicalTrue(t *testing.T) { assert := assert.New(t) m, _, _ := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") result, err := api.GetStorageAt(context.Background(), addr, "0x0", rpc.BlockNumberOrHashWithHash(m.Genesis.Hash(), true)) @@ -122,7 +124,7 @@ func TestGetStorageAt_ByBlockHash_WithRequireCanonicalTrue(t *testing.T) { func TestGetStorageAt_ByBlockHash_WithRequireCanonicalDefault_BlockNotFoundError(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") offChain, err := core.GenerateChain(m.ChainConfig, m.Genesis, m.Engine, m.DB, 1, func(i int, block *core.BlockGen) { @@ -143,7 +145,7 @@ func TestGetStorageAt_ByBlockHash_WithRequireCanonicalDefault_BlockNotFoundError func TestGetStorageAt_ByBlockHash_WithRequireCanonicalTrue_BlockNotFoundError(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") offChain, err := core.GenerateChain(m.ChainConfig, m.Genesis, m.Engine, m.DB, 1, func(i int, block *core.BlockGen) { @@ -165,7 +167,7 @@ func TestGetStorageAt_ByBlockHash_WithRequireCanonicalTrue_BlockNotFoundError(t func TestGetStorageAt_ByBlockHash_WithRequireCanonicalDefault_NonCanonicalBlock(t *testing.T) { assert := assert.New(t) m, _, orphanedChain := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") orphanedBlock := orphanedChain[0].Blocks[0] @@ -184,7 +186,7 @@ func TestGetStorageAt_ByBlockHash_WithRequireCanonicalDefault_NonCanonicalBlock( func TestGetStorageAt_ByBlockHash_WithRequireCanonicalTrue_NonCanonicalBlock(t *testing.T) { m, _, orphanedChain := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) addr := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") orphanedBlock := orphanedChain[0].Blocks[0] @@ -200,7 +202,7 @@ func TestGetStorageAt_ByBlockHash_WithRequireCanonicalTrue_NonCanonicalBlock(t * func TestCall_ByBlockHash_WithRequireCanonicalDefault_NonCanonicalBlock(t *testing.T) { m, _, orphanedChain := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) from := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") to := common.HexToAddress("0x0d3ab14bbad3d99f4203bd7a11acb94882050e7e") @@ -223,7 +225,7 @@ func TestCall_ByBlockHash_WithRequireCanonicalDefault_NonCanonicalBlock(t *testi func TestCall_ByBlockHash_WithRequireCanonicalTrue_NonCanonicalBlock(t *testing.T) { m, _, orphanedChain := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) from := common.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") to := common.HexToAddress("0x0d3ab14bbad3d99f4203bd7a11acb94882050e7e") diff --git a/turbo/jsonrpc/eth_block.go b/turbo/jsonrpc/eth_block.go index 88cd139c5ce..732231b49de 100644 --- a/turbo/jsonrpc/eth_block.go +++ b/turbo/jsonrpc/eth_block.go @@ -13,7 +13,6 @@ import ( "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/opstack" - "github.com/ledgerwatch/erigon/polygon/bor/borcfg" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/common/math" @@ -23,6 +22,8 @@ import ( "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/crypto/cryptopool" + "github.com/ledgerwatch/erigon/polygon/bor/borcfg" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/adapter/ethapi" "github.com/ledgerwatch/erigon/turbo/rpchelper" @@ -36,7 +37,7 @@ func (api *APIImpl) CallBundle(ctx context.Context, txHashes []common.Hash, stat } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -49,14 +50,14 @@ func (api *APIImpl) CallBundle(ctx context.Context, txHashes []common.Hash, stat var txs types.Transactions for _, txHash := range txHashes { - blockNum, ok, err := api.txnLookup(tx, txHash) + blockNum, ok, err := api.txnLookup(ctx, tx, txHash) if err != nil { return nil, err } if !ok { return nil, nil } - block, err := api.blockByNumberWithSenders(tx, blockNum) + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) if err != nil { return nil, err } @@ -96,7 +97,7 @@ func (api *APIImpl) CallBundle(ctx context.Context, txHashes []common.Hash, stat } ibs := state.New(stateReader) - parent, _ := api.headerByRPCNumber(rpc.BlockNumber(stateBlockNumber), tx) + parent, _ := api.headerByRPCNumber(ctx, rpc.BlockNumber(stateBlockNumber), tx) if parent == nil { return nil, fmt.Errorf("block %d(%x) not found", stateBlockNumber, hash) } @@ -156,11 +157,10 @@ func (api *APIImpl) CallBundle(ctx context.Context, txHashes []common.Hash, stat // and apply the message. gp := new(core.GasPool).AddGas(math.MaxUint64).AddBlobGas(math.MaxUint64) - results := []map[string]interface{}{} - bundleHash := cryptopool.NewLegacyKeccak256() defer cryptopool.ReturnToPoolKeccak256(bundleHash) + results := make([]map[string]interface{}, 0, len(txs)) for _, txn := range txs { msg, err := txn.AsMessage(*signer, nil, rules) msg.SetCheckNonce(false) @@ -206,7 +206,7 @@ func (api *APIImpl) GetBlockByNumber(ctx context.Context, number rpc.BlockNumber } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -229,19 +229,18 @@ func (api *APIImpl) GetBlockByNumber(ctx context.Context, number rpc.BlockNumber if td != nil { additionalFields["totalDifficulty"] = (*hexutil.Big)(td) } - var borTx types.Transaction var borTxHash common.Hash if chainConfig.Bor != nil { borTx = rawdb.ReadBorTransactionForBlock(tx, b.NumberU64()) if borTx != nil { - borTxHash = types.ComputeBorTxHash(b.NumberU64(), b.Hash()) + borTxHash = bortypes.ComputeBorTxHash(b.NumberU64(), b.Hash()) } } // Optimism Deposit transactions need to access DepositNonce from their receipt. // A possible optimization would be to filter by Tx type and only populate the entries for the Deposits - receipts, err := api.getReceipts(ctx, tx, chainConfig, b, b.Body().SendersFromTxs()) + receipts, err := api.getReceipts(ctx, tx, b, b.Body().SendersFromTxs()) if err != nil { return nil, fmt.Errorf("getReceipts error: %w", err) } @@ -277,7 +276,7 @@ func (api *APIImpl) GetBlockByHash(ctx context.Context, numberOrHash rpc.BlockNu additionalFields := make(map[string]interface{}) - block, err := api.blockByHashWithSenders(tx, hash) + block, err := api.blockByHashWithSenders(ctx, tx, hash) if err != nil { return nil, err } @@ -292,7 +291,7 @@ func (api *APIImpl) GetBlockByHash(ctx context.Context, numberOrHash rpc.BlockNu } additionalFields["totalDifficulty"] = (*hexutil.Big)(td) - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -301,13 +300,13 @@ func (api *APIImpl) GetBlockByHash(ctx context.Context, numberOrHash rpc.BlockNu if chainConfig.Bor != nil { borTx = rawdb.ReadBorTransactionForBlock(tx, number) if borTx != nil { - borTxHash = types.ComputeBorTxHash(number, block.Hash()) + borTxHash = bortypes.ComputeBorTxHash(number, block.Hash()) } } // Optimism Deposit transactions need to access DepositNonce from their receipt. // A possible optimization would be to filter by Tx type and only populate the entries for the Deposits - receipts, err := api.getReceipts(ctx, tx, chainConfig, block, block.Body().SendersFromTxs()) + receipts, err := api.getReceipts(ctx, tx, block, block.Body().SendersFromTxs()) if err != nil { return nil, fmt.Errorf("getReceipts error: %w", err) } @@ -337,7 +336,7 @@ func (api *APIImpl) GetBlockTransactionCountByNumber(ctx context.Context, blockN defer tx.Rollback() if blockNr == rpc.PendingBlockNumber { - b, err := api.blockByRPCNumber(blockNr, tx) + b, err := api.blockByRPCNumber(ctx, blockNr, tx) if err != nil { return nil, err } @@ -365,6 +364,23 @@ func (api *APIImpl) GetBlockTransactionCountByNumber(ctx context.Context, blockN if err != nil { return nil, err } + + chainConfig, err := api.chainConfig(ctx, tx) + if err != nil { + return nil, err + } + + if chainConfig.Bor != nil { + borStateSyncTxHash := bortypes.ComputeBorTxHash(blockNum, blockHash) + _, ok, err := api._blockReader.EventLookup(ctx, tx, borStateSyncTxHash) + if err != nil { + return nil, err + } + if ok { + txAmount++ + } + } + numOfTx := hexutil.Uint(txAmount) return &numOfTx, nil @@ -389,6 +405,23 @@ func (api *APIImpl) GetBlockTransactionCountByHash(ctx context.Context, blockHas if err != nil { return nil, err } + + chainConfig, err := api.chainConfig(ctx, tx) + if err != nil { + return nil, err + } + + if chainConfig.Bor != nil { + borStateSyncTxHash := bortypes.ComputeBorTxHash(blockNum, blockHash) + _, ok, err := api._blockReader.EventLookup(ctx, tx, borStateSyncTxHash) + if err != nil { + return nil, err + } + if ok { + txAmount++ + } + } + numOfTx := hexutil.Uint(txAmount) return &numOfTx, nil @@ -396,7 +429,7 @@ func (api *APIImpl) GetBlockTransactionCountByHash(ctx context.Context, blockHas func (api *APIImpl) blockByNumber(ctx context.Context, number rpc.BlockNumber, tx kv.Tx) (*types.Block, error) { if number != rpc.PendingBlockNumber { - return api.blockByRPCNumber(number, tx) + return api.blockByRPCNumber(ctx, number, tx) } if block := api.pendingBlock(); block != nil { @@ -411,5 +444,5 @@ func (api *APIImpl) blockByNumber(ctx context.Context, number rpc.BlockNumber, t return block, nil } - return api.blockByRPCNumber(number, tx) + return api.blockByRPCNumber(ctx, number, tx) } diff --git a/turbo/jsonrpc/eth_block_test.go b/turbo/jsonrpc/eth_block_test.go index 2d2794504f1..7ad3421637d 100644 --- a/turbo/jsonrpc/eth_block_test.go +++ b/turbo/jsonrpc/eth_block_test.go @@ -7,10 +7,13 @@ import ( "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/stretchr/testify/assert" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "github.com/ledgerwatch/erigon-lib/kv/kvcache" - "github.com/stretchr/testify/assert" + + "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "github.com/ledgerwatch/erigon/core/rawdb" @@ -20,13 +23,12 @@ import ( "github.com/ledgerwatch/erigon/rpc/rpccfg" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/stages/mock" - "github.com/ledgerwatch/log/v3" ) // Gets the latest block number with the latest tag func TestGetBlockByNumberWithLatestTag(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) b, err := api.GetBlockByNumber(context.Background(), rpc.LatestBlockNumber, false) expected := common.HexToHash("0x5883164d4100b95e1d8e931b8b9574586a1dea7507941e6ad3c1e3a2591485fd") if err != nil { @@ -56,7 +58,7 @@ func TestGetBlockByNumberWithLatestTag_WithHeadHashInDb(t *testing.T) { } tx.Commit() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) block, err := api.GetBlockByNumber(ctx, rpc.LatestBlockNumber, false) if err != nil { t.Errorf("error retrieving block by number: %s", err) @@ -87,7 +89,7 @@ func TestGetBlockByNumberWithPendingTag(t *testing.T) { RplBlock: rlpBlock, }) - api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) b, err := api.GetBlockByNumber(context.Background(), rpc.PendingBlockNumber, false) if err != nil { t.Errorf("error getting block number with pending tag: %s", err) @@ -98,7 +100,7 @@ func TestGetBlockByNumberWithPendingTag(t *testing.T) { func TestGetBlockByNumber_WithFinalizedTag_NoFinalizedBlockInDb(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) ctx := context.Background() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) if _, err := api.GetBlockByNumber(ctx, rpc.FinalizedBlockNumber, false); err != nil { assert.ErrorIs(t, rpchelper.UnknownBlockError, err) } @@ -125,7 +127,7 @@ func TestGetBlockByNumber_WithFinalizedTag_WithFinalizedBlockInDb(t *testing.T) } tx.Commit() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) block, err := api.GetBlockByNumber(ctx, rpc.FinalizedBlockNumber, false) if err != nil { t.Errorf("error retrieving block by number: %s", err) @@ -137,7 +139,7 @@ func TestGetBlockByNumber_WithFinalizedTag_WithFinalizedBlockInDb(t *testing.T) func TestGetBlockByNumber_WithSafeTag_NoSafeBlockInDb(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) ctx := context.Background() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) if _, err := api.GetBlockByNumber(ctx, rpc.SafeBlockNumber, false); err != nil { assert.ErrorIs(t, rpchelper.UnknownBlockError, err) } @@ -164,7 +166,7 @@ func TestGetBlockByNumber_WithSafeTag_WithSafeBlockInDb(t *testing.T) { } tx.Commit() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) block, err := api.GetBlockByNumber(ctx, rpc.SafeBlockNumber, false) if err != nil { t.Errorf("error retrieving block by number: %s", err) @@ -177,7 +179,7 @@ func TestGetBlockTransactionCountByHash(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) ctx := context.Background() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) blockHash := common.HexToHash("0x6804117de2f3e6ee32953e78ced1db7b20214e0d8c745a03b8fecf7cc8ee76ef") tx, err := m.DB.BeginRw(ctx) @@ -209,7 +211,7 @@ func TestGetBlockTransactionCountByHash(t *testing.T) { func TestGetBlockTransactionCountByHash_ZeroTx(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) ctx := context.Background() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) blockHash := common.HexToHash("0x5883164d4100b95e1d8e931b8b9574586a1dea7507941e6ad3c1e3a2591485fd") tx, err := m.DB.BeginRw(ctx) @@ -241,7 +243,7 @@ func TestGetBlockTransactionCountByHash_ZeroTx(t *testing.T) { func TestGetBlockTransactionCountByNumber(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) ctx := context.Background() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) blockHash := common.HexToHash("0x6804117de2f3e6ee32953e78ced1db7b20214e0d8c745a03b8fecf7cc8ee76ef") tx, err := m.DB.BeginRw(ctx) @@ -273,7 +275,7 @@ func TestGetBlockTransactionCountByNumber(t *testing.T) { func TestGetBlockTransactionCountByNumber_ZeroTx(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) ctx := context.Background() - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) blockHash := common.HexToHash("0x5883164d4100b95e1d8e931b8b9574586a1dea7507941e6ad3c1e3a2591485fd") diff --git a/turbo/jsonrpc/eth_call.go b/turbo/jsonrpc/eth_call.go index 984a00150cc..eb07c1388e4 100644 --- a/turbo/jsonrpc/eth_call.go +++ b/turbo/jsonrpc/eth_call.go @@ -51,7 +51,7 @@ func (api *APIImpl) Call(ctx context.Context, args ethapi2.CallArgs, blockNrOrHa if err != nil { return nil, err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, fmt.Errorf("read chain config: %v", err) } @@ -76,7 +76,7 @@ func (api *APIImpl) Call(ctx context.Context, args ethapi2.CallArgs, blockNrOrHa if err != nil { return nil, err } - block, err := api.blockWithSenders(tx, hash, blockNumber) + block, err := api.blockWithSenders(ctx, tx, hash, blockNumber) if err != nil { return nil, err } @@ -164,7 +164,7 @@ func (api *APIImpl) EstimateGas(ctx context.Context, argsOrNil *ethapi2.CallArgs if err != nil { return 0, err } - chainConfig, err := api.chainConfig(dbtx) + chainConfig, err := api.chainConfig(ctx, dbtx) if err != nil { return 0, fmt.Errorf("read chain config: %v", err) } @@ -267,7 +267,7 @@ func (api *APIImpl) EstimateGas(ctx context.Context, argsOrNil *ethapi2.CallArgs // try and get the block from the lru cache first then try DB before failing block := api.tryBlockFromLru(latestCanHash) if block == nil { - block, err = api.blockWithSenders(dbtx, latestCanHash, latestCanBlockNumber) + block, err = api.blockWithSenders(ctx, dbtx, latestCanHash, latestCanBlockNumber) if err != nil { return 0, err } @@ -366,7 +366,7 @@ func (api *APIImpl) GetProof(ctx context.Context, address libcommon.Address, sto if err != nil { return nil, err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, fmt.Errorf("read chain config: %v", err) } @@ -495,7 +495,7 @@ func (api *APIImpl) CreateAccessList(ctx context.Context, args ethapi2.CallArgs, if err != nil { return nil, err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, fmt.Errorf("read chain config: %v", err) } @@ -516,7 +516,7 @@ func (api *APIImpl) CreateAccessList(ctx context.Context, args ethapi2.CallArgs, if err != nil { return nil, err } - block, err := api.blockWithSenders(tx, hash, blockNumber) + block, err := api.blockWithSenders(ctx, tx, hash, blockNumber) if err != nil { return nil, err } diff --git a/turbo/jsonrpc/eth_callMany.go b/turbo/jsonrpc/eth_callMany.go index f70f66443a0..c459b147bdf 100644 --- a/turbo/jsonrpc/eth_callMany.go +++ b/turbo/jsonrpc/eth_callMany.go @@ -7,13 +7,13 @@ import ( "math/big" "time" - "github.com/ledgerwatch/erigon-lib/common/hexutil" - "github.com/ledgerwatch/erigon-lib/opstack" - "github.com/holiman/uint256" - "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/ledgerwatch/erigon-lib/opstack" + "github.com/ledgerwatch/erigon/common/math" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/state" @@ -79,7 +79,6 @@ func (api *APIImpl) CallMany(ctx context.Context, bundles []Bundle, simulateCont blockCtx evmtypes.BlockContext txCtx evmtypes.TxContext overrideBlockHash map[uint64]common.Hash - baseFee uint256.Int ) overrideBlockHash = make(map[uint64]common.Hash) @@ -88,7 +87,7 @@ func (api *APIImpl) CallMany(ctx context.Context, bundles []Bundle, simulateCont return nil, err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -113,7 +112,7 @@ func (api *APIImpl) CallMany(ctx context.Context, bundles []Bundle, simulateCont return nil, err } - block, err := api.blockWithSenders(tx, hash, blockNum) + block, err := api.blockWithSenders(ctx, tx, hash, blockNum) if err != nil { return nil, err } @@ -140,9 +139,9 @@ func (api *APIImpl) CallMany(ctx context.Context, bundles []Bundle, simulateCont st := state.New(stateReader) - parent := block.Header() + header := block.Header() - if parent == nil { + if header == nil { return nil, fmt.Errorf("block %d(%x) not found", blockNum, hash) } @@ -157,21 +156,7 @@ func (api *APIImpl) CallMany(ctx context.Context, bundles []Bundle, simulateCont return hash } - if parent.BaseFee != nil { - baseFee.SetFromBig(parent.BaseFee) - } - - blockCtx = evmtypes.BlockContext{ - CanTransfer: core.CanTransfer, - Transfer: core.Transfer, - GetHash: getHash, - Coinbase: parent.Coinbase, - BlockNumber: parent.Number.Uint64(), - Time: parent.Time, - Difficulty: new(big.Int).Set(parent.Difficulty), - GasLimit: parent.GasLimit, - BaseFee: &baseFee, - } + blockCtx = core.NewEVMBlockContext(header, getHash, api.engine(), nil /* author */) blockCtx.L1CostFunc = opstack.NewL1CostFunc(chainConfig, st) // Get a new instance of the EVM diff --git a/turbo/jsonrpc/eth_callMany_test.go b/turbo/jsonrpc/eth_callMany_test.go index d4b875f2b68..9140d2c69c9 100644 --- a/turbo/jsonrpc/eth_callMany_test.go +++ b/turbo/jsonrpc/eth_callMany_test.go @@ -14,6 +14,8 @@ import ( "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/kv/kvcache" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon/accounts/abi/bind" "github.com/ledgerwatch/erigon/accounts/abi/bind/backends" "github.com/ledgerwatch/erigon/core/types" @@ -23,7 +25,6 @@ import ( "github.com/ledgerwatch/erigon/rpc/rpccfg" "github.com/ledgerwatch/erigon/turbo/adapter/ethapi" "github.com/ledgerwatch/erigon/turbo/jsonrpc/contracts" - "github.com/ledgerwatch/log/v3" ) // block 1 contains 3 Transactions @@ -85,7 +86,7 @@ func TestCallMany(t *testing.T) { db := contractBackend.DB() engine := contractBackend.Engine() api := NewEthAPI(NewBaseApi(nil, stateCache, contractBackend.BlockReader(), contractBackend.Agg(), false, rpccfg.DefaultEvmCallTimeout, engine, - datadir.New(t.TempDir()), nil, nil), db, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + datadir.New(t.TempDir()), nil, nil), db, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) callArgAddr1 := ethapi.CallArgs{From: &address, To: &tokenAddr, Nonce: &nonce, MaxPriorityFeePerGas: (*hexutil.Big)(big.NewInt(1e9)), diff --git a/turbo/jsonrpc/eth_call_test.go b/turbo/jsonrpc/eth_call_test.go index 11e574200b7..d53f99ce4f2 100644 --- a/turbo/jsonrpc/eth_call_test.go +++ b/turbo/jsonrpc/eth_call_test.go @@ -19,6 +19,8 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcache" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "github.com/ledgerwatch/erigon/common/math" "github.com/ledgerwatch/erigon/core" @@ -35,7 +37,6 @@ import ( "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/stages/mock" "github.com/ledgerwatch/erigon/turbo/trie" - "github.com/ledgerwatch/log/v3" ) func TestEstimateGas(t *testing.T) { @@ -45,7 +46,7 @@ func TestEstimateGas(t *testing.T) { ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, mock.Mock(t)) mining := txpool.NewMiningClient(conn) ff := rpchelper.New(ctx, nil, nil, mining, func() {}, m.Log) - api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) var from = libcommon.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") var to = libcommon.HexToAddress("0x0d3ab14bbad3d99f4203bd7a11acb94882050e7e") if _, err := api.EstimateGas(context.Background(), ðapi.CallArgs{ @@ -58,7 +59,7 @@ func TestEstimateGas(t *testing.T) { func TestEstimateGasHistoricalRPC(t *testing.T) { m, _, _ := rpcdaemontest.CreateOptimismTestSentry(t) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 1e18, 5000000, 100_000, false, 100_000, 128, log.New()) table := []struct { caseName string @@ -120,7 +121,7 @@ func TestEthCallNonCanonical(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) agg := m.HistoryV3Components() stateCache := kvcache.New(kvcache.DefaultCoherentConfig) - api := NewEthAPI(NewBaseApi(nil, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(NewBaseApi(nil, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) var from = libcommon.HexToAddress("0x71562b71999873db5b286df957af199ec94617f7") var to = libcommon.HexToAddress("0x0d3ab14bbad3d99f4203bd7a11acb94882050e7e") if _, err := api.Call(context.Background(), ethapi.CallArgs{ @@ -139,7 +140,7 @@ func TestEthCallToPrunedBlock(t *testing.T) { m, bankAddress, contractAddress := chainWithDeployedContract(t) doPrune(t, m.DB, pruneTo) - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) callData := hexutil.MustDecode("0x2e64cec1") callDataBytes := hexutility.Bytes(callData) @@ -160,7 +161,7 @@ func TestGetProof(t *testing.T) { if m.HistoryV3 { t.Skip("not supported by Erigon3") } - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, maxGetProofRewindBlockCount, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, maxGetProofRewindBlockCount, 128, log.New()) key := func(b byte) libcommon.Hash { result := libcommon.Hash{} @@ -253,7 +254,7 @@ func TestGetProof(t *testing.T) { tx, err := m.DB.BeginRo(context.Background()) assert.NoError(t, err) defer tx.Rollback() - header, err := api.headerByRPCNumber(rpc.BlockNumber(tt.blockNum), tx) + header, err := api.headerByRPCNumber(context.Background(), rpc.BlockNumber(tt.blockNum), tx) require.NoError(t, err) require.Equal(t, tt.addr, proof.Address) @@ -283,7 +284,7 @@ func TestGetProofHistoricalRPC(t *testing.T) { if m.HistoryV3 { t.Skip("not supported by Erigon3") } - api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 1e18, 5000000, 100_000, false, 100_000, 128, log.New()) table := []struct { caseName string diff --git a/turbo/jsonrpc/eth_filters.go b/turbo/jsonrpc/eth_filters.go index 0b3148225e9..3d77e38cca6 100644 --- a/turbo/jsonrpc/eth_filters.go +++ b/turbo/jsonrpc/eth_filters.go @@ -162,7 +162,7 @@ func (api *APIImpl) NewHeads(ctx context.Context) (*rpc.Subscription, error) { } // NewPendingTransactions send a notification each time when a transaction had added into mempool. -func (api *APIImpl) NewPendingTransactions(ctx context.Context) (*rpc.Subscription, error) { +func (api *APIImpl) NewPendingTransactions(ctx context.Context, fullTx *bool) (*rpc.Subscription, error) { if api.filters == nil { return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported } @@ -183,7 +183,13 @@ func (api *APIImpl) NewPendingTransactions(ctx context.Context) (*rpc.Subscripti case txs, ok := <-txsCh: for _, t := range txs { if t != nil { - err := notifier.Notify(rpcSub.ID, t.Hash()) + var err error + if fullTx != nil && *fullTx { + err = notifier.Notify(rpcSub.ID, t) + } else { + err = notifier.Notify(rpcSub.ID, t.Hash()) + } + if err != nil { log.Warn("[rpc] error while notifying subscription", "err", err) } @@ -257,7 +263,7 @@ func (api *APIImpl) Logs(ctx context.Context, crit filters.FilterCriteria) (*rpc go func() { defer debug.LogPanic() - logs, id := api.filters.SubscribeLogs(128, crit) + logs, id := api.filters.SubscribeLogs(api.SubscribeLogsChannelSize, crit) defer api.filters.UnsubscribeLogs(id) for { diff --git a/turbo/jsonrpc/eth_filters_test.go b/turbo/jsonrpc/eth_filters_test.go index cac2551db12..43ff00c4620 100644 --- a/turbo/jsonrpc/eth_filters_test.go +++ b/turbo/jsonrpc/eth_filters_test.go @@ -11,15 +11,18 @@ import ( "github.com/ledgerwatch/erigon/rpc/rpccfg" + "github.com/stretchr/testify/assert" + "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" + "github.com/ledgerwatch/erigon-lib/kv/kvcache" - "github.com/stretchr/testify/assert" + + "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "github.com/ledgerwatch/erigon/eth/filters" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/stages/mock" - "github.com/ledgerwatch/log/v3" ) func TestNewFilters(t *testing.T) { @@ -30,7 +33,7 @@ func TestNewFilters(t *testing.T) { ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, mock.Mock(t)) mining := txpool.NewMiningClient(conn) ff := rpchelper.New(ctx, nil, nil, mining, func() {}, m.Log) - api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) ptf, err := api.NewPendingTransactionFilter(ctx) assert.Nil(err) diff --git a/turbo/jsonrpc/eth_mining_test.go b/turbo/jsonrpc/eth_mining_test.go index 7d98f7cf44a..6a2a009a936 100644 --- a/turbo/jsonrpc/eth_mining_test.go +++ b/turbo/jsonrpc/eth_mining_test.go @@ -8,15 +8,17 @@ import ( "github.com/ledgerwatch/erigon/consensus/ethash" "github.com/ledgerwatch/erigon/rpc/rpccfg" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" + "github.com/ledgerwatch/erigon-lib/kv/kvcache" "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/stages/mock" - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/require" ) func TestPendingBlock(t *testing.T) { @@ -27,7 +29,7 @@ func TestPendingBlock(t *testing.T) { stateCache := kvcache.New(kvcache.DefaultCoherentConfig) engine := ethash.NewFaker() api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, nil, false, rpccfg.DefaultEvmCallTimeout, engine, - m.Dirs, nil, nil), nil, nil, nil, mining, 5000000, 100_000, false, 100_000, log.New()) + m.Dirs, nil, nil), nil, nil, nil, mining, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) expect := uint64(12345) b, err := rlp.EncodeToBytes(types.NewBlockWithHeader(&types.Header{Number: big.NewInt(int64(expect))})) require.NoError(t, err) diff --git a/turbo/jsonrpc/eth_receipts.go b/turbo/jsonrpc/eth_receipts.go index c6e603c240e..67d5974fd4f 100644 --- a/turbo/jsonrpc/eth_receipts.go +++ b/turbo/jsonrpc/eth_receipts.go @@ -7,11 +7,11 @@ import ( "fmt" "math/big" + "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/opstack" "github.com/RoaringBitmap/roaring" - "github.com/holiman/uint256" "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon-lib/chain" @@ -22,9 +22,11 @@ import ( "github.com/ledgerwatch/erigon-lib/kv/iter" "github.com/ledgerwatch/erigon-lib/kv/order" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" + "github.com/ledgerwatch/erigon/consensus/misc" + "github.com/ledgerwatch/erigon/eth/ethutils" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" "github.com/ledgerwatch/erigon/consensus" - "github.com/ledgerwatch/erigon/consensus/misc" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/state" @@ -39,12 +41,22 @@ import ( "github.com/ledgerwatch/erigon/turbo/transactions" ) -const PendingBlockNumber int64 = -2 +// getReceipts - checking in-mem cache, or else fallback to db, or else fallback to re-exec of block to re-gen receipts +func (api *BaseAPI) getReceipts(ctx context.Context, tx kv.Tx, block *types.Block, senders []common.Address) (types.Receipts, error) { + if receipts, ok := api.receiptsCache.Get(block.Hash()); ok { + return receipts, nil + } + + chainConfig, err := api.chainConfig(ctx, tx) + if err != nil { + return nil, err + } -func (api *BaseAPI) getReceipts(ctx context.Context, tx kv.Tx, chainConfig *chain.Config, block *types.Block, senders []common.Address) (types.Receipts, error) { - if cached := rawdb.ReadReceipts(chainConfig, tx, block, senders); cached != nil { - return cached, nil + if receipts := rawdb.ReadReceipts(chainConfig, tx, block, senders); receipts != nil { + api.receiptsCache.Add(block.Hash(), receipts) + return receipts, nil } + engine := api.engine() _, _, _, ibs, _, err := transactions.ComputeTxEnv(ctx, engine, block, chainConfig, api._blockReader, tx, 0, api.historyV3(tx)) @@ -79,6 +91,7 @@ func (api *BaseAPI) getReceipts(ctx context.Context, tx kv.Tx, chainConfig *chai receipts[i] = receipt } + api.receiptsCache.Add(block.Hash(), receipts) return receipts, nil } @@ -94,11 +107,10 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t defer tx.Rollback() if crit.BlockHash != nil { - block, err := api._blockReader.BlockByHash(ctx, tx, *crit.BlockHash) + block, err := api.blockByHashWithSenders(ctx, tx, *crit.BlockHash) if err != nil { return nil, err } - if block == nil { return nil, fmt.Errorf("block not found: %x", *crit.BlockHash) } @@ -115,10 +127,6 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t begin = latest if crit.FromBlock != nil { - if !getLogsIsValidBlockNumber(crit.FromBlock) { - return nil, fmt.Errorf("invalid value for FromBlock: %v", crit.FromBlock) - } - fromBlock := crit.FromBlock.Int64() if fromBlock > 0 { begin = uint64(fromBlock) @@ -133,10 +141,6 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t } end = latest if crit.ToBlock != nil { - if !getLogsIsValidBlockNumber(crit.ToBlock) { - return nil, fmt.Errorf("invalid value for ToBlock: %v", crit.ToBlock) - } - toBlock := crit.ToBlock.Int64() if toBlock > 0 { end = uint64(toBlock) @@ -167,7 +171,6 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t if api.historyV3(tx) { return api.getLogsV3(ctx, tx.(kv.TemporalTx), begin, end, crit) } - blockNumbers := bitmapdb.NewBitmap() defer bitmapdb.ReturnToPool(blockNumbers) if err := applyFilters(blockNumbers, tx, begin, end, crit); err != nil { @@ -219,6 +222,9 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t } blockLogs = append(blockLogs, filtered...) } + if casted, ok := it.(kv.Closer); ok { + casted.Close() + } if len(blockLogs) == 0 { continue } @@ -240,7 +246,7 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t log.BlockHash = blockHash // bor transactions are at the end of the bodies transactions (added manually but not actually part of the block) if log.TxIndex == uint(len(body.Transactions)) { - log.TxHash = types.ComputeBorTxHash(blockNumber, blockHash) + log.TxHash = bortypes.ComputeBorTxHash(blockNumber, blockHash) } else { log.TxHash = body.Transactions[log.TxIndex].Hash() } @@ -251,11 +257,6 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) (t return logs, nil } -// getLogsIsValidBlockNumber checks if block number is valid integer or "latest", "pending", "earliest" block number -func getLogsIsValidBlockNumber(blockNum *big.Int) bool { - return blockNum.IsInt64() && blockNum.Int64() >= PendingBlockNumber -} - // The Topic list restricts matches to particular event topics. Each event has a list // of topics. Topics matches a prefix of that list. An empty element slice matches any // topic. Non-empty elements represent an alternative that matches any of the @@ -423,7 +424,7 @@ func (api *APIImpl) getLogsV3(ctx context.Context, tx kv.TemporalTx, begin, end addrMap[v] = struct{}{} } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -622,12 +623,12 @@ func (api *APIImpl) GetTransactionReceipt(ctx context.Context, txnHash common.Ha var blockNum uint64 var ok bool - blockNum, ok, err = api.txnLookup(tx, txnHash) + blockNum, ok, err = api.txnLookup(ctx, tx, txnHash) if err != nil { return nil, err } - cc, err := api.chainConfig(tx) + cc, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -643,7 +644,7 @@ func (api *APIImpl) GetTransactionReceipt(ctx context.Context, txnHash common.Ha return nil, nil } - block, err := api.blockByNumberWithSenders(tx, blockNum) + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) if err != nil { return nil, err } @@ -665,10 +666,10 @@ func (api *APIImpl) GetTransactionReceipt(ctx context.Context, txnHash common.Ha if txn == nil && cc.Bor != nil { borTx = rawdb.ReadBorTransactionForBlock(tx, blockNum) if borTx == nil { - borTx = types.NewBorTransaction() + borTx = bortypes.NewBorTransaction() } } - receipts, err := api.getReceipts(ctx, tx, cc, block, block.Body().SendersFromTxs()) + receipts, err := api.getReceipts(ctx, tx, block, block.Body().SendersFromTxs()) if err != nil { return nil, fmt.Errorf("getReceipts error: %w", err) } @@ -681,14 +682,14 @@ func (api *APIImpl) GetTransactionReceipt(ctx context.Context, txnHash common.Ha if borReceipt == nil { return nil, nil } - return marshalReceipt(borReceipt, borTx, cc, block.HeaderNoCopy(), txnHash, false), nil + return ethutils.MarshalReceipt(borReceipt, borTx, cc, block.HeaderNoCopy(), txnHash, false), nil } if len(receipts) <= int(txnIndex) { return nil, fmt.Errorf("block has less receipts than expected: %d <= %d, block: %d", len(receipts), int(txnIndex), blockNum) } - return marshalReceipt(receipts[txnIndex], block.Transactions()[txnIndex], cc, block.HeaderNoCopy(), txnHash, true), nil + return ethutils.MarshalReceipt(receipts[txnIndex], block.Transactions()[txnIndex], cc, block.HeaderNoCopy(), txnHash, true), nil } // GetBlockReceipts - receipts for individual block @@ -703,25 +704,25 @@ func (api *APIImpl) GetBlockReceipts(ctx context.Context, numberOrHash rpc.Block if err != nil { return nil, err } - block, err := api.blockWithSenders(tx, blockHash, blockNum) + block, err := api.blockWithSenders(ctx, tx, blockHash, blockNum) if err != nil { return nil, err } if block == nil { return nil, nil } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } - receipts, err := api.getReceipts(ctx, tx, chainConfig, block, block.Body().SendersFromTxs()) + receipts, err := api.getReceipts(ctx, tx, block, block.Body().SendersFromTxs()) if err != nil { return nil, fmt.Errorf("getReceipts error: %w", err) } result := make([]map[string]interface{}, 0, len(receipts)) for _, receipt := range receipts { txn := block.Transactions()[receipt.TransactionIndex] - result = append(result, marshalReceipt(receipt, txn, chainConfig, block.HeaderNoCopy(), txn.Hash(), true)) + result = append(result, ethutils.MarshalReceipt(receipt, txn, chainConfig, block.HeaderNoCopy(), txn.Hash(), true)) } if chainConfig.Bor != nil { @@ -732,7 +733,7 @@ func (api *APIImpl) GetBlockReceipts(ctx context.Context, numberOrHash rpc.Block return nil, err } if borReceipt != nil { - result = append(result, marshalReceipt(borReceipt, borTx, chainConfig, block.HeaderNoCopy(), borReceipt.TxHash, false)) + result = append(result, ethutils.MarshalReceipt(borReceipt, borTx, chainConfig, block.HeaderNoCopy(), borReceipt.TxHash, false)) } } } diff --git a/turbo/jsonrpc/eth_receipts_test.go b/turbo/jsonrpc/eth_receipts_test.go index 91b3a96f054..995c520ba2b 100644 --- a/turbo/jsonrpc/eth_receipts_test.go +++ b/turbo/jsonrpc/eth_receipts_test.go @@ -7,10 +7,8 @@ import ( "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/common" - libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "github.com/ledgerwatch/erigon-lib/kv/kvcache" - "github.com/ledgerwatch/erigon-lib/kv/memdb" "github.com/ledgerwatch/erigon-lib/opstack" "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "github.com/ledgerwatch/erigon/common/u256" @@ -30,9 +28,9 @@ func TestGetReceipts(t *testing.T) { ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, mock.Mock(t)) mining := txpool.NewMiningClient(conn) ff := rpchelper.New(ctx, nil, nil, mining, func() {}, m.Log) - api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + api := NewEthAPI(NewBaseApi(ff, stateCache, m.BlockReader, agg, false, rpccfg.DefaultEvmCallTimeout, m.Engine, m.Dirs, nil, nil), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) - db := memdb.New("") + db := m.DB defer db.Close() tx, err := db.BeginRw(context.Background()) @@ -50,7 +48,7 @@ func TestGetReceipts(t *testing.T) { require.NoError(t, err) defer rTx.Rollback() - receipt, err := api.getReceipts(m.Ctx, rTx, m.ChainConfig, block, []libcommon.Address{}) + receipt, err := api.getReceipts(m.Ctx, rTx, block, []common.Address{}) require.NoError(t, err) require.Equal(t, 0, len(receipt)) @@ -71,8 +69,8 @@ func TestGetReceipts(t *testing.T) { systemTx := buildSystemTx(l1BaseFee, overhead, scalar) - tx1 := types.NewTransaction(1, libcommon.HexToAddress("0x1"), u256.Num1, 1, u256.Num1, systemTx) - tx2 := types.NewTransaction(2, libcommon.HexToAddress("0x2"), u256.Num2, 2, u256.Num2, nil) + tx1 := types.NewTransaction(1, common.HexToAddress("0x1"), u256.Num1, 1, u256.Num1, systemTx) + tx2 := types.NewTransaction(2, common.HexToAddress("0x2"), u256.Num2, 2, u256.Num2, nil) header = &types.Header{Number: bedrockBlock, Difficulty: big.NewInt(100)} body := &types.Body{Transactions: types.Transactions{tx1, tx2}} @@ -81,23 +79,23 @@ func TestGetReceipts(t *testing.T) { Status: types.ReceiptStatusFailed, CumulativeGasUsed: 1, Logs: []*types.Log{ - {Address: libcommon.BytesToAddress([]byte{0x11})}, - {Address: libcommon.BytesToAddress([]byte{0x01, 0x11})}, + {Address: common.BytesToAddress([]byte{0x11})}, + {Address: common.BytesToAddress([]byte{0x01, 0x11})}, }, TxHash: tx1.Hash(), - ContractAddress: libcommon.BytesToAddress([]byte{0x01, 0x11, 0x11}), + ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}), GasUsed: 111111, L1Fee: big.NewInt(7), } receipt2 := &types.Receipt{ - PostState: libcommon.Hash{2}.Bytes(), + PostState: common.Hash{2}.Bytes(), CumulativeGasUsed: 2, Logs: []*types.Log{ - {Address: libcommon.BytesToAddress([]byte{0x22})}, - {Address: libcommon.BytesToAddress([]byte{0x02, 0x22})}, + {Address: common.BytesToAddress([]byte{0x22})}, + {Address: common.BytesToAddress([]byte{0x02, 0x22})}, }, TxHash: tx2.Hash(), - ContractAddress: libcommon.BytesToAddress([]byte{0x02, 0x22, 0x22}), + ContractAddress: common.BytesToAddress([]byte{0x02, 0x22, 0x22}), GasUsed: 222222, L1Fee: big.NewInt(1), } @@ -121,7 +119,7 @@ func TestGetReceipts(t *testing.T) { require.NoError(t, err) defer rTx.Rollback() - receipts, err = api.getReceipts(m.Ctx, rTx, m.ChainConfig, b, senders) + receipts, err = api.getReceipts(m.Ctx, rTx, b, senders) require.NoError(t, err) require.Equal(t, 2, len(receipts)) diff --git a/turbo/jsonrpc/eth_subscribe_test.go b/turbo/jsonrpc/eth_subscribe_test.go index 25b252ef67e..1a595fb2718 100644 --- a/turbo/jsonrpc/eth_subscribe_test.go +++ b/turbo/jsonrpc/eth_subscribe_test.go @@ -5,11 +5,14 @@ import ( "fmt" "testing" + "github.com/stretchr/testify/require" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/direct" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" "github.com/ledgerwatch/erigon-lib/wrap" - "github.com/stretchr/testify/require" + + "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcservices" "github.com/ledgerwatch/erigon/core" @@ -20,7 +23,6 @@ import ( "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/stages" "github.com/ledgerwatch/erigon/turbo/stages/mock" - "github.com/ledgerwatch/log/v3" ) func TestEthSubscribe(t *testing.T) { @@ -55,7 +57,7 @@ func TestEthSubscribe(t *testing.T) { initialCycle := mock.MockInsertAsInitialCycle highestSeenHeader := chain.TopBlock.NumberU64() - hook := stages.NewHook(m.Ctx, m.DB, m.Notifications, m.Sync, m.BlockReader, m.ChainConfig, m.Log, m.UpdateHead) + hook := stages.NewHook(m.Ctx, m.DB, m.Notifications, m.Sync, m.BlockReader, m.ChainConfig, m.Log, nil) if err := stages.StageLoopIteration(m.Ctx, m.DB, wrap.TxContainer{}, m.Sync, initialCycle, logger, m.BlockReader, hook, false); err != nil { t.Fatal(err) } diff --git a/turbo/jsonrpc/eth_system.go b/turbo/jsonrpc/eth_system.go index f7777feff92..549750b70d7 100644 --- a/turbo/jsonrpc/eth_system.go +++ b/turbo/jsonrpc/eth_system.go @@ -2,9 +2,10 @@ package jsonrpc import ( "context" - "github.com/ledgerwatch/erigon-lib/common/hexutil" "math/big" + "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/kv" @@ -82,7 +83,7 @@ func (api *APIImpl) ChainId(ctx context.Context) (hexutil.Uint64, error) { } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return 0, err } @@ -110,12 +111,7 @@ func (api *APIImpl) GasPrice(ctx context.Context) (*hexutil.Big, error) { return nil, err } defer tx.Rollback() - cc, err := api.chainConfig(tx) - if err != nil { - return nil, err - } - - oracle := gasprice.NewOracle(NewGasPriceOracleBackend(tx, cc, api.BaseAPI), ethconfig.Defaults.GPO, api.gasCache) + oracle := gasprice.NewOracle(NewGasPriceOracleBackend(tx, api.BaseAPI), ethconfig.Defaults.GPO, api.gasCache) tipcap, err := oracle.SuggestTipCap(ctx) gasResult := big.NewInt(0) @@ -137,11 +133,7 @@ func (api *APIImpl) MaxPriorityFeePerGas(ctx context.Context) (*hexutil.Big, err return nil, err } defer tx.Rollback() - cc, err := api.chainConfig(tx) - if err != nil { - return nil, err - } - oracle := gasprice.NewOracle(NewGasPriceOracleBackend(tx, cc, api.BaseAPI), ethconfig.Defaults.GPO, api.gasCache) + oracle := gasprice.NewOracle(NewGasPriceOracleBackend(tx, api.BaseAPI), ethconfig.Defaults.GPO, api.gasCache) tipcap, err := oracle.SuggestTipCap(ctx) if err != nil { return nil, err @@ -162,11 +154,7 @@ func (api *APIImpl) FeeHistory(ctx context.Context, blockCount rpc.DecimalOrHex, return nil, err } defer tx.Rollback() - cc, err := api.chainConfig(tx) - if err != nil { - return nil, err - } - oracle := gasprice.NewOracle(NewGasPriceOracleBackend(tx, cc, api.BaseAPI), ethconfig.Defaults.GPO, api.gasCache) + oracle := gasprice.NewOracle(NewGasPriceOracleBackend(tx, api.BaseAPI), ethconfig.Defaults.GPO, api.gasCache) oldest, reward, baseFee, gasUsed, err := oracle.FeeHistory(ctx, int(blockCount), lastBlock, rewardPercentiles) if err != nil { @@ -196,16 +184,15 @@ func (api *APIImpl) FeeHistory(ctx context.Context, blockCount rpc.DecimalOrHex, type GasPriceOracleBackend struct { tx kv.Tx - cc *chain.Config baseApi *BaseAPI } -func NewGasPriceOracleBackend(tx kv.Tx, cc *chain.Config, baseApi *BaseAPI) *GasPriceOracleBackend { - return &GasPriceOracleBackend{tx: tx, cc: cc, baseApi: baseApi} +func NewGasPriceOracleBackend(tx kv.Tx, baseApi *BaseAPI) *GasPriceOracleBackend { + return &GasPriceOracleBackend{tx: tx, baseApi: baseApi} } func (b *GasPriceOracleBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { - header, err := b.baseApi.headerByRPCNumber(number, b.tx) + header, err := b.baseApi.headerByRPCNumber(ctx, number, b.tx) if err != nil { return nil, err } @@ -215,13 +202,14 @@ func (b *GasPriceOracleBackend) HeaderByNumber(ctx context.Context, number rpc.B return header, nil } func (b *GasPriceOracleBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) { - return b.baseApi.blockByRPCNumber(number, b.tx) + return b.baseApi.blockByRPCNumber(ctx, number, b.tx) } func (b *GasPriceOracleBackend) ChainConfig() *chain.Config { - return b.cc + cc, _ := b.baseApi.chainConfig(context.Background(), b.tx) + return cc } func (b *GasPriceOracleBackend) GetReceipts(ctx context.Context, block *types.Block) (types.Receipts, error) { - return rawdb.ReadReceipts(b.cc, b.tx, block, nil), nil + return b.baseApi.getReceipts(ctx, b.tx, block, nil) } func (b *GasPriceOracleBackend) PendingBlockAndReceipts() (*types.Block, types.Receipts) { return nil, nil diff --git a/turbo/jsonrpc/eth_system_test.go b/turbo/jsonrpc/eth_system_test.go index f01717b4cab..8c7ea7c40ba 100644 --- a/turbo/jsonrpc/eth_system_test.go +++ b/turbo/jsonrpc/eth_system_test.go @@ -7,14 +7,16 @@ import ( "testing" "github.com/holiman/uint256" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/turbo/stages/mock" - "github.com/ledgerwatch/log/v3" ) func TestGasPrice(t *testing.T) { @@ -40,7 +42,7 @@ func TestGasPrice(t *testing.T) { t.Run(testCase.description, func(t *testing.T) { m := createGasPriceTestKV(t, testCase.chainSize) defer m.DB.Close() - eth := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 100_000, false, 100_000, log.New()) + eth := NewEthAPI(newBaseApiForTest(m), m.DB, nil, nil, nil, 5000000, 1e18, 100_000, false, 100_000, 128, log.New()) ctx := context.Background() result, err := eth.GasPrice(ctx) diff --git a/turbo/jsonrpc/eth_txs.go b/turbo/jsonrpc/eth_txs.go index b84f6c0491e..8efe3076aff 100644 --- a/turbo/jsonrpc/eth_txs.go +++ b/turbo/jsonrpc/eth_txs.go @@ -12,6 +12,7 @@ import ( "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" "github.com/ledgerwatch/erigon-lib/gointerfaces/types" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" "github.com/ledgerwatch/erigon/core/rawdb" types2 "github.com/ledgerwatch/erigon/core/types" @@ -26,13 +27,13 @@ func (api *APIImpl) GetTransactionByHash(ctx context.Context, txnHash common.Has return nil, err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } // https://infura.io/docs/ethereum/json-rpc/eth-getTransactionByHash - blockNum, ok, err := api.txnLookup(tx, txnHash) + blockNum, ok, err := api.txnLookup(ctx, tx, txnHash) if err != nil { return nil, err } @@ -44,7 +45,7 @@ func (api *APIImpl) GetTransactionByHash(ctx context.Context, txnHash common.Has } } if ok { - block, err := api.blockByNumberWithSenders(tx, blockNum) + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) if err != nil { return nil, err } @@ -73,7 +74,7 @@ func (api *APIImpl) GetTransactionByHash(ctx context.Context, txnHash common.Has if chainConfig.Bor == nil { return nil, nil } - borTx := types2.NewBorTransaction() + borTx := bortypes.NewBorTransaction() return newRPCBorTransaction(borTx, txnHash, blockHash, blockNum, uint64(len(block.Transactions())), baseFee, chainConfig.ChainID), nil } @@ -125,14 +126,14 @@ func (api *APIImpl) GetRawTransactionByHash(ctx context.Context, hash common.Has defer tx.Rollback() // https://infura.io/docs/ethereum/json-rpc/eth-getTransactionByHash - blockNum, ok, err := api.txnLookup(tx, hash) + blockNum, ok, err := api.txnLookup(ctx, tx, hash) if err != nil { return nil, err } if !ok { return nil, nil } - block, err := api.blockByNumberWithSenders(tx, blockNum) + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) if err != nil { return nil, err } @@ -171,13 +172,13 @@ func (api *APIImpl) GetTransactionByBlockHashAndIndex(ctx context.Context, block return nil, err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } // https://infura.io/docs/ethereum/json-rpc/eth-getTransactionByBlockHashAndIndex - block, err := api.blockByHashWithSenders(tx, blockHash) + block, err := api.blockByHashWithSenders(ctx, tx, blockHash) if err != nil { return nil, err } @@ -196,7 +197,7 @@ func (api *APIImpl) GetTransactionByBlockHashAndIndex(ctx context.Context, block if borTx == nil { return nil, nil // not error } - derivedBorTxHash := types2.ComputeBorTxHash(block.NumberU64(), block.Hash()) + derivedBorTxHash := bortypes.ComputeBorTxHash(block.NumberU64(), block.Hash()) return newRPCBorTransaction(borTx, derivedBorTxHash, block.Hash(), block.NumberU64(), uint64(txIndex), block.BaseFee(), chainConfig.ChainID), nil } @@ -220,7 +221,7 @@ func (api *APIImpl) GetRawTransactionByBlockHashAndIndex(ctx context.Context, bl defer tx.Rollback() // https://infura.io/docs/ethereum/json-rpc/eth-getRawTransactionByBlockHashAndIndex - block, err := api.blockByHashWithSenders(tx, blockHash) + block, err := api.blockByHashWithSenders(ctx, tx, blockHash) if err != nil { return nil, err } @@ -238,7 +239,7 @@ func (api *APIImpl) GetTransactionByBlockNumberAndIndex(ctx context.Context, blo return nil, err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -249,7 +250,7 @@ func (api *APIImpl) GetTransactionByBlockNumberAndIndex(ctx context.Context, blo return nil, err } - block, err := api.blockWithSenders(tx, hash, blockNum) + block, err := api.blockWithSenders(ctx, tx, hash, blockNum) if err != nil { return nil, err } @@ -268,7 +269,7 @@ func (api *APIImpl) GetTransactionByBlockNumberAndIndex(ctx context.Context, blo if borTx == nil { return nil, nil } - derivedBorTxHash := types2.ComputeBorTxHash(blockNum, hash) + derivedBorTxHash := bortypes.ComputeBorTxHash(blockNum, hash) return newRPCBorTransaction(borTx, derivedBorTxHash, hash, blockNum, uint64(txIndex), block.BaseFee(), chainConfig.ChainID), nil } if chainConfig.IsOptimism() { @@ -290,7 +291,7 @@ func (api *APIImpl) GetRawTransactionByBlockNumberAndIndex(ctx context.Context, defer tx.Rollback() // https://infura.io/docs/ethereum/json-rpc/eth-getRawTransactionByBlockNumberAndIndex - block, err := api.blockByRPCNumber(blockNr, tx) + block, err := api.blockByRPCNumber(ctx, blockNr, tx) if err != nil { return nil, err } diff --git a/turbo/jsonrpc/eth_uncles.go b/turbo/jsonrpc/eth_uncles.go index c58cbab628b..17100653186 100644 --- a/turbo/jsonrpc/eth_uncles.go +++ b/turbo/jsonrpc/eth_uncles.go @@ -27,7 +27,7 @@ func (api *APIImpl) GetUncleByBlockNumberAndIndex(ctx context.Context, number rp if err != nil { return nil, err } - block, err := api.blockWithSenders(tx, hash, blockNum) + block, err := api.blockWithSenders(ctx, tx, hash, blockNum) if err != nil { return nil, err } @@ -59,7 +59,7 @@ func (api *APIImpl) GetUncleByBlockHashAndIndex(ctx context.Context, hash common } defer tx.Rollback() - block, err := api.blockByHashWithSenders(tx, hash) + block, err := api.blockByHashWithSenders(ctx, tx, hash) if err != nil { return nil, err } @@ -99,7 +99,7 @@ func (api *APIImpl) GetUncleCountByBlockNumber(ctx context.Context, number rpc.B return &n, err } - block, err := api.blockWithSenders(tx, blockHash, blockNum) + block, err := api.blockWithSenders(ctx, tx, blockHash, blockNum) if err != nil { return nil, err } @@ -124,7 +124,7 @@ func (api *APIImpl) GetUncleCountByBlockHash(ctx context.Context, hash common.Ha return nil, nil // not error, see https://github.com/ledgerwatch/erigon/issues/1645 } - block, err := api.blockWithSenders(tx, hash, *number) + block, err := api.blockWithSenders(ctx, tx, hash, *number) if err != nil { return nil, err } diff --git a/turbo/jsonrpc/get_chain_config_test.go b/turbo/jsonrpc/get_chain_config_test.go index af406fe70d5..c38df84004e 100644 --- a/turbo/jsonrpc/get_chain_config_test.go +++ b/turbo/jsonrpc/get_chain_config_test.go @@ -2,13 +2,14 @@ package jsonrpc import ( "context" - "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" "testing" + + "github.com/ledgerwatch/erigon/cmd/rpcdaemon/rpcdaemontest" ) func TestGetChainConfig(t *testing.T) { m, _, _ := rpcdaemontest.CreateTestSentry(t) - db := m.DB + db, ctx := m.DB, m.Ctx api := newBaseApiForTest(m) config := m.ChainConfig @@ -18,14 +19,14 @@ func TestGetChainConfig(t *testing.T) { } defer tx.Rollback() - config1, err1 := api.chainConfig(tx) + config1, err1 := api.chainConfig(ctx, tx) if err1 != nil { t.Fatalf("reading chain config: %v", err1) } if config.String() != config1.String() { t.Fatalf("read different config: %s, expected %s", config1.String(), config.String()) } - config2, err2 := api.chainConfig(tx) + config2, err2 := api.chainConfig(ctx, tx) if err2 != nil { t.Fatalf("reading chain config: %v", err2) } diff --git a/turbo/jsonrpc/graphql_api.go b/turbo/jsonrpc/graphql_api.go index 49585a68478..6a7255ed44c 100644 --- a/turbo/jsonrpc/graphql_api.go +++ b/turbo/jsonrpc/graphql_api.go @@ -5,12 +5,12 @@ import ( "fmt" "math/big" - "github.com/ledgerwatch/erigon-lib/common/hexutil" - "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/eth/ethutils" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/adapter/ethapi" "github.com/ledgerwatch/erigon/turbo/rpchelper" @@ -40,7 +40,7 @@ func (api *GraphQLAPIImpl) GetChainID(ctx context.Context) (*big.Int, error) { } defer tx.Rollback() - response, err := api.chainConfig(tx) + response, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -68,12 +68,12 @@ func (api *GraphQLAPIImpl) GetBlockDetails(ctx context.Context, blockNumber rpc. return nil, err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } - receipts, err := api.getReceipts(ctx, tx, chainConfig, block, senders) + receipts, err := api.getReceipts(ctx, tx, block, senders) if err != nil { return nil, fmt.Errorf("getReceipts error: %w", err) } @@ -82,7 +82,7 @@ func (api *GraphQLAPIImpl) GetBlockDetails(ctx context.Context, blockNumber rpc. for _, receipt := range receipts { txn := block.Transactions()[receipt.TransactionIndex] - transaction := marshalReceipt(receipt, txn, chainConfig, block.HeaderNoCopy(), txn.Hash(), true) + transaction := ethutils.MarshalReceipt(receipt, txn, chainConfig, block.HeaderNoCopy(), txn.Hash(), true) transaction["nonce"] = txn.GetNonce() transaction["value"] = txn.GetValue() transaction["data"] = txn.GetData() @@ -107,8 +107,14 @@ func (api *GraphQLAPIImpl) getBlockWithSenders(ctx context.Context, number rpc.B return nil, nil, err } - block, senders, err := api._blockReader.BlockWithSenders(ctx, tx, blockHash, blockHeight) - return block, senders, err + block, err := api.blockWithSenders(ctx, tx, blockHash, blockHeight) + if err != nil { + return nil, nil, err + } + if block == nil { + return nil, nil, nil + } + return block, block.Body().SendersFromTxs(), nil } func (api *GraphQLAPIImpl) delegateGetBlockByNumber(tx kv.Tx, b *types.Block, number rpc.BlockNumber, inclTx bool) (map[string]interface{}, error) { diff --git a/turbo/jsonrpc/otterscan_api.go b/turbo/jsonrpc/otterscan_api.go index b893d6a8b74..2f965263fef 100644 --- a/turbo/jsonrpc/otterscan_api.go +++ b/turbo/jsonrpc/otterscan_api.go @@ -6,25 +6,24 @@ import ( "fmt" "math/big" - "golang.org/x/sync/errgroup" - - hexutil2 "github.com/ledgerwatch/erigon-lib/common/hexutil" - "github.com/holiman/uint256" "github.com/ledgerwatch/log/v3" + "golang.org/x/sync/errgroup" "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/common" + hexutil2 "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/common/hexutility" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/iter" "github.com/ledgerwatch/erigon-lib/kv/order" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" - "github.com/ledgerwatch/erigon/consensus/ethash" + "github.com/ledgerwatch/erigon/consensus" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" + "github.com/ledgerwatch/erigon/eth/ethutils" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/adapter/ethapi" "github.com/ledgerwatch/erigon/turbo/rpchelper" @@ -77,7 +76,7 @@ func (api *OtterscanAPIImpl) GetApiLevel() uint8 { // TODO: dedup from eth_txs.go#GetTransactionByHash func (api *OtterscanAPIImpl) getTransactionByHash(ctx context.Context, tx kv.Tx, hash common.Hash) (types.Transaction, *types.Block, common.Hash, uint64, uint64, error) { // https://infura.io/docs/ethereum/json-rpc/eth-getTransactionByHash - blockNum, ok, err := api.txnLookup(tx, hash) + blockNum, ok, err := api.txnLookup(ctx, tx, hash) if err != nil { return nil, nil, common.Hash{}, 0, 0, err } @@ -85,7 +84,7 @@ func (api *OtterscanAPIImpl) getTransactionByHash(ctx context.Context, tx kv.Tx, return nil, nil, common.Hash{}, 0, 0, nil } - block, err := api.blockByNumberWithSenders(tx, blockNum) + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) if err != nil { return nil, nil, common.Hash{}, 0, 0, err } @@ -125,7 +124,7 @@ func (api *OtterscanAPIImpl) runTracer(ctx context.Context, tx kv.Tx, hash commo return nil, fmt.Errorf("transaction %#x not found", hash) } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -203,7 +202,7 @@ func (api *OtterscanAPIImpl) SearchTransactionsBefore(ctx context.Context, addr } defer callToCursor.Close() - chainConfig, err := api.chainConfig(dbtx) + chainConfig, err := api.chainConfig(ctx, dbtx) if err != nil { return nil, err } @@ -260,7 +259,7 @@ func (api *OtterscanAPIImpl) SearchTransactionsBefore(ctx context.Context, addr } func (api *OtterscanAPIImpl) searchTransactionsBeforeV3(tx kv.TemporalTx, ctx context.Context, addr common.Address, fromBlockNum uint64, pageSize uint16) (*TransactionsWithReceipts, error) { - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -345,7 +344,7 @@ func (api *OtterscanAPIImpl) searchTransactionsBeforeV3(tx kv.TemporalTx, ctx co TransactionIndex: uint(txIndex), BlockNumber: header.Number, BlockHash: blockHash, Logs: rawLogs, } - mReceipt := marshalReceipt(receipt, txn, chainConfig, header, txn.Hash(), true) + mReceipt := ethutils.MarshalReceipt(receipt, txn, chainConfig, header, txn.Hash(), true) mReceipt["timestamp"] = header.Time receipts = append(receipts, mReceipt) @@ -389,7 +388,7 @@ func (api *OtterscanAPIImpl) SearchTransactionsAfter(ctx context.Context, addr c } defer callToCursor.Close() - chainConfig, err := api.chainConfig(dbtx) + chainConfig, err := api.chainConfig(ctx, dbtx) if err != nil { return nil, err } @@ -522,29 +521,40 @@ type internalIssuance struct { Issuance string `json:"issuance,omitempty"` } -func delegateIssuance(tx kv.Tx, block *types.Block, chainConfig *chain.Config) (internalIssuance, error) { - if chainConfig.Ethash == nil { - // Clique for example has no issuance - return internalIssuance{}, nil +func delegateIssuance(tx kv.Tx, block *types.Block, chainConfig *chain.Config, engine consensus.EngineReader) (internalIssuance, error) { + // TODO: aura seems to be already broken in the original version of this RPC method + rewards, err := engine.CalculateRewards(chainConfig, block.HeaderNoCopy(), block.Uncles(), func(contract common.Address, data []byte) ([]byte, error) { + return nil, nil + }) + if err != nil { + return internalIssuance{}, err } - minerReward, uncleRewards := ethash.AccumulateRewards(chainConfig, block.Header(), block.Uncles()) - issuance := minerReward - for _, r := range uncleRewards { - p := r // avoids warning? - issuance.Add(&issuance, &p) + blockReward := uint256.NewInt(0) + uncleReward := uint256.NewInt(0) + for _, r := range rewards { + if r.Kind == consensus.RewardAuthor { + blockReward.Add(blockReward, &r.Amount) + } + if r.Kind == consensus.RewardUncle { + uncleReward.Add(uncleReward, &r.Amount) + } } var ret internalIssuance - ret.BlockReward = hexutil2.EncodeBig(minerReward.ToBig()) - ret.Issuance = hexutil2.EncodeBig(issuance.ToBig()) - issuance.Sub(&issuance, &minerReward) - ret.UncleReward = hexutil2.EncodeBig(issuance.ToBig()) + ret.BlockReward = hexutil2.EncodeBig(blockReward.ToBig()) + ret.UncleReward = hexutil2.EncodeBig(uncleReward.ToBig()) + + blockReward.Add(blockReward, uncleReward) + ret.Issuance = hexutil2.EncodeBig(blockReward.ToBig()) return ret, nil } -func delegateBlockFees(ctx context.Context, tx kv.Tx, block *types.Block, senders []common.Address, chainConfig *chain.Config, receipts types.Receipts) (uint64, error) { - fees := uint64(0) +func delegateBlockFees(ctx context.Context, tx kv.Tx, block *types.Block, senders []common.Address, chainConfig *chain.Config, receipts types.Receipts) (*big.Int, error) { + fee := big.NewInt(0) + gasUsed := big.NewInt(0) + + totalFees := big.NewInt(0) for _, receipt := range receipts { txn := block.Transactions()[receipt.TransactionIndex] effectiveGasPrice := uint64(0) @@ -555,10 +565,15 @@ func delegateBlockFees(ctx context.Context, tx kv.Tx, block *types.Block, sender gasPrice := new(big.Int).Add(block.BaseFee(), txn.GetEffectiveGasTip(baseFee).ToBig()) effectiveGasPrice = gasPrice.Uint64() } - fees += effectiveGasPrice * receipt.GasUsed + + fee.SetUint64(effectiveGasPrice) + gasUsed.SetUint64(receipt.GasUsed) + fee.Mul(fee, gasUsed) + + totalFees.Add(totalFees, fee) } - return fees, nil + return totalFees, nil } func (api *OtterscanAPIImpl) getBlockWithSenders(ctx context.Context, number rpc.BlockNumber, tx kv.Tx) (*types.Block, []common.Address, error) { @@ -571,8 +586,14 @@ func (api *OtterscanAPIImpl) getBlockWithSenders(ctx context.Context, number rpc return nil, nil, err } - block, senders, err := api._blockReader.BlockWithSenders(ctx, tx, hash, n) - return block, senders, err + block, err := api.blockWithSenders(ctx, tx, hash, n) + if err != nil { + return nil, nil, err + } + if block == nil { + return nil, nil, nil + } + return block, block.Body().SendersFromTxs(), nil } func (api *OtterscanAPIImpl) GetBlockTransactions(ctx context.Context, number rpc.BlockNumber, pageNumber uint8, pageSize uint8) (map[string]interface{}, error) { @@ -590,7 +611,7 @@ func (api *OtterscanAPIImpl) GetBlockTransactions(ctx context.Context, number rp return nil, nil } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -601,7 +622,7 @@ func (api *OtterscanAPIImpl) GetBlockTransactions(ctx context.Context, number rp } // Receipts - receipts, err := api.getReceipts(ctx, tx, chainConfig, b, senders) + receipts, err := api.getReceipts(ctx, tx, b, senders) if err != nil { return nil, fmt.Errorf("getReceipts error: %v", err) } @@ -609,7 +630,7 @@ func (api *OtterscanAPIImpl) GetBlockTransactions(ctx context.Context, number rp result := make([]map[string]interface{}, 0, len(receipts)) for _, receipt := range receipts { txn := b.Transactions()[receipt.TransactionIndex] - marshalledRcpt := marshalReceipt(receipt, txn, chainConfig, b.HeaderNoCopy(), txn.Hash(), true) + marshalledRcpt := ethutils.MarshalReceipt(receipt, txn, chainConfig, b.HeaderNoCopy(), txn.Hash(), true) marshalledRcpt["logs"] = nil marshalledRcpt["logsBloom"] = nil result = append(result, marshalledRcpt) diff --git a/turbo/jsonrpc/otterscan_block_details.go b/turbo/jsonrpc/otterscan_block_details.go index 16401d5aa71..c44bdb277f2 100644 --- a/turbo/jsonrpc/otterscan_block_details.go +++ b/turbo/jsonrpc/otterscan_block_details.go @@ -3,6 +3,7 @@ package jsonrpc import ( "context" "fmt" + "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/common" @@ -43,7 +44,7 @@ func (api *OtterscanAPIImpl) GetBlockDetailsByHash(ctx context.Context, hash com if blockNumber == nil { return nil, fmt.Errorf("couldn't find block number for hash %v", hash.Bytes()) } - b, senders, err := api._blockReader.BlockWithSenders(ctx, tx, hash, *blockNumber) + b, err := api.blockWithSenders(ctx, tx, hash, *blockNumber) if err != nil { return nil, err } @@ -52,11 +53,11 @@ func (api *OtterscanAPIImpl) GetBlockDetailsByHash(ctx context.Context, hash com } number := rpc.BlockNumber(b.Number().Int64()) - return api.getBlockDetailsImpl(ctx, tx, b, number, senders) + return api.getBlockDetailsImpl(ctx, tx, b, number, b.Body().SendersFromTxs()) } func (api *OtterscanAPIImpl) getBlockDetailsImpl(ctx context.Context, tx kv.Tx, b *types.Block, number rpc.BlockNumber, senders []common.Address) (map[string]interface{}, error) { - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -65,11 +66,11 @@ func (api *OtterscanAPIImpl) getBlockDetailsImpl(ctx context.Context, tx kv.Tx, if err != nil { return nil, err } - getIssuanceRes, err := delegateIssuance(tx, b, chainConfig) + getIssuanceRes, err := delegateIssuance(tx, b, chainConfig, api.engine()) if err != nil { return nil, err } - receipts, err := api.getReceipts(ctx, tx, chainConfig, b, senders) + receipts, err := api.getReceipts(ctx, tx, b, senders) if err != nil { return nil, fmt.Errorf("getReceipts error: %v", err) } @@ -81,6 +82,6 @@ func (api *OtterscanAPIImpl) getBlockDetailsImpl(ctx context.Context, tx kv.Tx, response := map[string]interface{}{} response["block"] = getBlockRes response["issuance"] = getIssuanceRes - response["totalFees"] = hexutil.Uint64(feesRes) + response["totalFees"] = (*hexutil.Big)(feesRes) return response, nil } diff --git a/turbo/jsonrpc/otterscan_contract_creator.go b/turbo/jsonrpc/otterscan_contract_creator.go index 3cdd5386bcd..2edc12e004a 100644 --- a/turbo/jsonrpc/otterscan_contract_creator.go +++ b/turbo/jsonrpc/otterscan_contract_creator.go @@ -47,7 +47,7 @@ func (api *OtterscanAPIImpl) GetContractCreator(ctx context.Context, addr common return nil, nil } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } diff --git a/turbo/jsonrpc/otterscan_generic_tracer.go b/turbo/jsonrpc/otterscan_generic_tracer.go index b18896c70a1..82c62455aba 100644 --- a/turbo/jsonrpc/otterscan_generic_tracer.go +++ b/turbo/jsonrpc/otterscan_generic_tracer.go @@ -73,7 +73,7 @@ func (api *OtterscanAPIImpl) genericTracer(dbtx kv.Tx, ctx context.Context, bloc return h } engine := api.engine() - block, err := api.blockByNumberWithSenders(dbtx, blockNum) + block, err := api.blockByNumberWithSenders(ctx, dbtx, blockNum) if err != nil { return err } diff --git a/turbo/jsonrpc/otterscan_has_code.go b/turbo/jsonrpc/otterscan_has_code.go index e4af5b4189b..af442e8d000 100644 --- a/turbo/jsonrpc/otterscan_has_code.go +++ b/turbo/jsonrpc/otterscan_has_code.go @@ -21,7 +21,7 @@ func (api *OtterscanAPIImpl) HasCode(ctx context.Context, address common.Address if err != nil { return false, err } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return false, err } diff --git a/turbo/jsonrpc/otterscan_search_trace.go b/turbo/jsonrpc/otterscan_search_trace.go index 7c501d627a9..63648ea3333 100644 --- a/turbo/jsonrpc/otterscan_search_trace.go +++ b/turbo/jsonrpc/otterscan_search_trace.go @@ -10,12 +10,12 @@ import ( "github.com/ledgerwatch/erigon-lib/opstack" "github.com/ledgerwatch/erigon/core" - "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/shards" + "github.com/ledgerwatch/log/v3" ) @@ -48,7 +48,7 @@ func (api *OtterscanAPIImpl) traceBlock(dbtx kv.Tx, ctx context.Context, blockNu return false, nil, err } - block, senders, err := api._blockReader.BlockWithSenders(ctx, dbtx, blockHash, blockNum) + block, err := api.blockWithSenders(ctx, dbtx, blockHash, blockNum) if err != nil { return false, nil, err } @@ -74,7 +74,10 @@ func (api *OtterscanAPIImpl) traceBlock(dbtx kv.Tx, ctx context.Context, blockNu } engine := api.engine() - blockReceipts := rawdb.ReadReceipts(chainConfig, dbtx, block, senders) + blockReceipts, err := api.getReceipts(ctx, dbtx, block, block.Body().SendersFromTxs()) + if err != nil { + return false, nil, err + } header := block.Header() rules := chainConfig.Rules(block.NumberU64(), header.Time) found := false diff --git a/turbo/jsonrpc/otterscan_trace_transaction.go b/turbo/jsonrpc/otterscan_trace_transaction.go index bbf1488acdc..c6df5d79f67 100644 --- a/turbo/jsonrpc/otterscan_trace_transaction.go +++ b/turbo/jsonrpc/otterscan_trace_transaction.go @@ -2,9 +2,10 @@ package jsonrpc import ( "context" - "github.com/ledgerwatch/erigon-lib/common/hexutil" "math/big" + "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/common" @@ -29,12 +30,13 @@ func (api *OtterscanAPIImpl) TraceTransaction(ctx context.Context, hash common.H } type TraceEntry struct { - Type string `json:"type"` - Depth int `json:"depth"` - From common.Address `json:"from"` - To common.Address `json:"to"` - Value *hexutil.Big `json:"value"` - Input hexutility.Bytes `json:"input"` + Type string `json:"type"` + Depth int `json:"depth"` + From common.Address `json:"from"` + To common.Address `json:"to"` + Value *hexutil.Big `json:"value"` + Input hexutility.Bytes `json:"input"` + Output hexutility.Bytes `json:"output"` } type TransactionTracer struct { @@ -42,55 +44,54 @@ type TransactionTracer struct { ctx context.Context Results []*TraceEntry depth int // computed from CaptureStart, CaptureEnter, and CaptureExit calls + stack []*TraceEntry } func NewTransactionTracer(ctx context.Context) *TransactionTracer { return &TransactionTracer{ ctx: ctx, Results: make([]*TraceEntry, 0), + stack: make([]*TraceEntry, 0), } } func (t *TransactionTracer) captureStartOrEnter(typ vm.OpCode, from, to common.Address, precompile bool, input []byte, value *uint256.Int) { - if precompile { - return - } - inputCopy := make([]byte, len(input)) copy(inputCopy, input) _value := new(big.Int) if value != nil { _value.Set(value.ToBig()) } + + var entry *TraceEntry if typ == vm.CALL { - t.Results = append(t.Results, &TraceEntry{"CALL", t.depth, from, to, (*hexutil.Big)(_value), inputCopy}) - return - } - if typ == vm.STATICCALL { - t.Results = append(t.Results, &TraceEntry{"STATICCALL", t.depth, from, to, nil, inputCopy}) - return - } - if typ == vm.DELEGATECALL { - t.Results = append(t.Results, &TraceEntry{"DELEGATECALL", t.depth, from, to, nil, inputCopy}) - return - } - if typ == vm.CALLCODE { - t.Results = append(t.Results, &TraceEntry{"CALLCODE", t.depth, from, to, (*hexutil.Big)(_value), inputCopy}) - return - } - if typ == vm.CREATE { - t.Results = append(t.Results, &TraceEntry{"CREATE", t.depth, from, to, (*hexutil.Big)(value.ToBig()), inputCopy}) - return - } - if typ == vm.CREATE2 { - t.Results = append(t.Results, &TraceEntry{"CREATE2", t.depth, from, to, (*hexutil.Big)(value.ToBig()), inputCopy}) - return + entry = &TraceEntry{"CALL", t.depth, from, to, (*hexutil.Big)(_value), inputCopy, nil} + } else if typ == vm.STATICCALL { + entry = &TraceEntry{"STATICCALL", t.depth, from, to, nil, inputCopy, nil} + } else if typ == vm.DELEGATECALL { + entry = &TraceEntry{"DELEGATECALL", t.depth, from, to, nil, inputCopy, nil} + } else if typ == vm.CALLCODE { + entry = &TraceEntry{"CALLCODE", t.depth, from, to, (*hexutil.Big)(_value), inputCopy, nil} + } else if typ == vm.CREATE { + entry = &TraceEntry{"CREATE", t.depth, from, to, (*hexutil.Big)(value.ToBig()), inputCopy, nil} + } else if typ == vm.CREATE2 { + entry = &TraceEntry{"CREATE2", t.depth, from, to, (*hexutil.Big)(value.ToBig()), inputCopy, nil} + } else if typ == vm.SELFDESTRUCT { + last := t.Results[len(t.Results)-1] + entry = &TraceEntry{"SELFDESTRUCT", last.Depth + 1, from, to, (*hexutil.Big)(value.ToBig()), nil, nil} + } else { + // safeguard in case new CALL-like opcodes are introduced but not handled, + // otherwise CaptureExit/stack will get out of sync + entry = &TraceEntry{"UNKNOWN", t.depth, from, to, (*hexutil.Big)(value.ToBig()), inputCopy, nil} } - if typ == vm.SELFDESTRUCT { - last := t.Results[len(t.Results)-1] - t.Results = append(t.Results, &TraceEntry{"SELFDESTRUCT", last.Depth + 1, from, to, (*hexutil.Big)(value.ToBig()), nil}) + // Ignore precompiles in the returned trace (maybe we shouldn't?) + if !precompile { + t.Results = append(t.Results, entry) } + + // stack precompiles in order to match captureEndOrExit + t.stack = append(t.stack, entry) } func (t *TransactionTracer) CaptureStart(env *vm.EVM, from common.Address, to common.Address, precompile bool, create bool, input []byte, gas uint64, value *uint256.Int, code []byte) { @@ -103,6 +104,22 @@ func (t *TransactionTracer) CaptureEnter(typ vm.OpCode, from common.Address, to t.captureStartOrEnter(typ, from, to, precompile, input, value) } -func (t *TransactionTracer) CaptureExit(output []byte, usedGas uint64, err error) { +func (t *TransactionTracer) captureEndOrExit(output []byte, usedGas uint64, err error) { t.depth-- + + lastIdx := len(t.stack) - 1 + pop := t.stack[lastIdx] + t.stack = t.stack[:lastIdx] + + outputCopy := make([]byte, len(output)) + copy(outputCopy, output) + pop.Output = outputCopy +} + +func (t *TransactionTracer) CaptureExit(output []byte, usedGas uint64, err error) { + t.captureEndOrExit(output, usedGas, err) +} + +func (t *TransactionTracer) CaptureEnd(output []byte, usedGas uint64, err error) { + t.captureEndOrExit(output, usedGas, err) } diff --git a/turbo/jsonrpc/otterscan_transaction_by_sender_and_nonce.go b/turbo/jsonrpc/otterscan_transaction_by_sender_and_nonce.go index 86348ae06c9..321aec8464b 100644 --- a/turbo/jsonrpc/otterscan_transaction_by_sender_and_nonce.go +++ b/turbo/jsonrpc/otterscan_transaction_by_sender_and_nonce.go @@ -276,10 +276,11 @@ func (api *OtterscanAPIImpl) findNonce(ctx context.Context, tx kv.Tx, addr commo if err != nil { return false, common.Hash{}, err } - block, senders, err := api._blockReader.BlockWithSenders(ctx, tx, hash, blockNum) + block, err := api.blockWithSenders(ctx, tx, hash, blockNum) if err != nil { return false, common.Hash{}, err } + senders := block.Body().SendersFromTxs() txs := block.Transactions() for i, s := range senders { diff --git a/turbo/jsonrpc/overlay/README.md b/turbo/jsonrpc/overlay/README.md new file mode 100644 index 00000000000..4d886ba5d79 --- /dev/null +++ b/turbo/jsonrpc/overlay/README.md @@ -0,0 +1,110 @@ +# Overlays +Overlays allow you to add your custom logic to already deployed contracts and simulate events and calls on top of them. +With overlays you can create new view functions, modify existing ones, change field visibility, emit new events and query the historical data of many contracts with your modified source code. + +## API +This explains how to use the overlay API. + +### `overlay_callConstructor` +This method needs to be called once with the new bytecode. + +It first does a lookup of the creationTx for the given contract. +Once it's found, it injects the new code and returns the new creation bytecode result from the EVM to the caller. + +Example request: +```json +{ + "id" : "1", + "jsonrpc" : "2.0", + "method" : "overlay_callConstructor", + "params" : [ + "", + "" + ] +} +``` + +Example response: +```json +{ + "jsonrpc": "2.0", + "id": "1", + "result": { + "code": "" + } +} +``` + +### `overlay_getLogs` +This method can be called multiple times to receive new logs from your new bytecode. + +It has the same interface as `eth_getLogs` but it also accepts state overrides as the second param. +We can pass the creation bytecode from the call to `overlay_callConstructor` along to `overlay_getLogs` as state overrides. +The passed block range for the filter defines the initial block range that needs to be replayed with the given state overrides. +Once all blocks are replayed, the logs are returned to the caller. + +Example request: +```json +{ + "id" : 1, + "jsonrpc" : "2.0", + "method" : "overlay_getLogs", + "params" : [ + { + "address" : "", + "fromBlock" : 19470165, + "toBlock" : 19478165 + }, + { + "" : { + "code" : "" + } + } + ] +} +``` + +Example response as in `eth_getLogs`: +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": [ + { + "address": "", + "topics": [ + "0x8b615fdc5486fad0275d26c56169e31fd7a71d8f916bb2e9ba80b626903a8b64", + "0x0000000000000000000000006f3a86a0fd7aafa0b679d4dac8ea7dfccce383ab", + "0x0000000000000000000000006f3a86a0fd7aafa0b679d4dac8ea7dfccce383ab", + "0x0000000000000000000000008e27d64063d74c7c2f7c8609e5b6d78d03378d23" + ], + "data": "0x0000000000000000000000000000000000000000000001795e6d875dd7c7541500000000000000000000000000000000000000000000014611be39e4bd5d6c300000000000000000000000000000000000000000000000294b9e341f9bf78418", + "blockNumber": "0x1293695", + "transactionHash": "0xbdc424f1b17589e7b0ea169f65f2a8e30fee612acc0560db350f42ec26bd1f87", + "transactionIndex": "0x7e", + "blockHash": "0xf5b1c1783f3a0e0e5a26e862da7b77d07f6d7ba01da74182af0fc432cc62e404", + "logIndex": "0x176", + "removed": false + } + ] +} +``` + +### `eth_call` +This method can be called multiple times to call new view functions that you defined in your new bytecode. + +By sending the creation bytecode received from `overlay_callConstructor` as state overrides to `eth_call` you'll be able to call new functions on your contract. + +## Optimizations +In general, a contract rarely touches every single block unless it's a very popular contract. There's an optimization that uses a bitmap check with +the existing db indexes for the `kv.CallFromIndex` and `kv.CallToIndex` to identify blocks which can be safely skipped. +This optimization makes ad-hoc simulations performant for block ranges of 10k or more, without the need of any back-filling infra for indexing. + +The overall processing time was reduced significantly for contracts which are not "busy". For contracts which are touching nearly every block, it won't make a huge difference. + +## Tests +There's a [postman collection for overlays](../../../cmd/rpcdaemon/postman/Overlay_Testing.json) with sample requests for `overlay_callConstructor` and `overlay_getLogs` which can be used for reference and refactorings. + +## Configuration +- add `ots,overlay` to your `--http.api` flag +- increase the concurrent db reads because overlays are computed in parallel `--db.read.concurrency=256` \ No newline at end of file diff --git a/turbo/jsonrpc/overlay_api.go b/turbo/jsonrpc/overlay_api.go new file mode 100644 index 00000000000..ca551435bba --- /dev/null +++ b/turbo/jsonrpc/overlay_api.go @@ -0,0 +1,631 @@ +package jsonrpc + +import ( + "context" + "fmt" + "math/big" + "runtime" + "sync" + "time" + + "github.com/RoaringBitmap/roaring" + "github.com/RoaringBitmap/roaring/roaring64" + "github.com/holiman/uint256" + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/chain" + "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutility" + "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" + "github.com/ledgerwatch/erigon/common/math" + "github.com/ledgerwatch/erigon/core" + "github.com/ledgerwatch/erigon/core/state" + "github.com/ledgerwatch/erigon/core/types" + "github.com/ledgerwatch/erigon/core/vm" + "github.com/ledgerwatch/erigon/core/vm/evmtypes" + "github.com/ledgerwatch/erigon/crypto" + "github.com/ledgerwatch/erigon/eth/filters" + "github.com/ledgerwatch/erigon/rpc" + "github.com/ledgerwatch/erigon/turbo/adapter/ethapi" + "github.com/ledgerwatch/erigon/turbo/rpchelper" +) + +type OverlayAPI interface { + GetLogs(ctx context.Context, crit filters.FilterCriteria, stateOverride *ethapi.StateOverrides) ([]*types.Log, error) + CallConstructor(ctx context.Context, address common.Address, code *hexutility.Bytes) (*CreationCode, error) +} + +// OverlayAPIImpl is implementation of the OverlayAPIImpl interface based on remote Db access +type OverlayAPIImpl struct { + *BaseAPI + db kv.RoDB + GasCap uint64 + OverlayGetLogsTimeout time.Duration + OverlayReplayBlockTimeout time.Duration + OtsAPI OtterscanAPI +} + +type CreationCode struct { + Code *hexutility.Bytes `json:"code"` +} + +type blockReplayTask struct { + idx int + BlockNumber int64 +} + +type blockReplayResult struct { + BlockNumber int64 `json:"block_number"` + Logs []*types.Log `json:"logs,omitempty"` + Error string `json:"error,omitempty"` +} + +// NewOverlayAPI returns OverlayAPIImpl instance +func NewOverlayAPI(base *BaseAPI, db kv.RoDB, gascap uint64, overlayGetLogsTimeout time.Duration, overlayReplayBlockTimeout time.Duration, otsApi OtterscanAPI) *OverlayAPIImpl { + return &OverlayAPIImpl{ + BaseAPI: base, + db: db, + GasCap: gascap, + OverlayGetLogsTimeout: overlayGetLogsTimeout, + OverlayReplayBlockTimeout: overlayReplayBlockTimeout, + OtsAPI: otsApi, + } +} + +func (api *OverlayAPIImpl) CallConstructor(ctx context.Context, address common.Address, code *hexutility.Bytes) (*CreationCode, error) { + var ( + replayTransactions types.Transactions + evm *vm.EVM + blockCtx evmtypes.BlockContext + txCtx evmtypes.TxContext + overrideBlockHash map[uint64]common.Hash + baseFee uint256.Int + ) + + tx, err := api.db.BeginRo(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback() + chainConfig, err := api.chainConfig(ctx, tx) + if err != nil { + return nil, err + } + + defer func(start time.Time) { log.Trace("CallConstructor finished", "runtime", time.Since(start)) }(time.Now()) + + creationData, err := api.OtsAPI.GetContractCreator(ctx, address) + if err != nil { + return nil, err + } + + blockNum, ok, err := api.txnLookup(ctx, tx, creationData.Tx) + if err != nil { + return nil, err + } + + if !ok { + return nil, fmt.Errorf("contract construction tx not found") + } + + err = api.BaseAPI.checkPruneHistory(tx, blockNum) + if err != nil { + return nil, err + } + + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) + if err != nil { + return nil, err + } + + // -1 is a default value for transaction index. + // If it's -1, we will try to replay every single transaction in that block + transactionIndex := -1 + for idx, transaction := range block.Transactions() { + if transaction.Hash() == creationData.Tx { + transactionIndex = idx + break + } + } + + if transactionIndex == -1 { + return nil, fmt.Errorf("could not find tx hash") + } + + replayTransactions = block.Transactions()[:transactionIndex] + + stateReader, err := rpchelper.CreateStateReader(ctx, tx, rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(blockNum-1)), 0, api.filters, api.stateCache, api.historyV3(tx), chainConfig.ChainName) + if err != nil { + return nil, err + } + + statedb := state.New(stateReader) + + parent := block.Header() + + if parent == nil { + return nil, fmt.Errorf("block %d(%x) not found", blockNum, block.Hash()) + } + + getHash := func(i uint64) common.Hash { + if hash, ok := overrideBlockHash[i]; ok { + return hash + } + hash, err := api._blockReader.CanonicalHash(ctx, tx, i) + if err != nil { + log.Debug("Can't get block hash by number", "number", i, "only-canonical", true) + } + return hash + } + + if parent.BaseFee != nil { + baseFee.SetFromBig(parent.BaseFee) + } + + blockCtx = evmtypes.BlockContext{ + CanTransfer: core.CanTransfer, + Transfer: core.Transfer, + GetHash: getHash, + Coinbase: parent.Coinbase, + BlockNumber: parent.Number.Uint64(), + Time: parent.Time, + Difficulty: new(big.Int).Set(parent.Difficulty), + GasLimit: parent.GasLimit, + BaseFee: &baseFee, + } + + // Get a new instance of the EVM + evm = vm.NewEVM(blockCtx, txCtx, statedb, chainConfig, vm.Config{Debug: false}) + signer := types.MakeSigner(chainConfig, blockNum, block.Time()) + rules := chainConfig.Rules(blockNum, blockCtx.Time) + + // Setup the gas pool (also for unmetered requests) + // and apply the message. + gp := new(core.GasPool).AddGas(math.MaxUint64).AddBlobGas(math.MaxUint64) + for idx, txn := range replayTransactions { + statedb.SetTxContext(txn.Hash(), block.Hash(), idx) + msg, err := txn.AsMessage(*signer, block.BaseFee(), rules) + if err != nil { + return nil, err + } + txCtx = core.NewEVMTxContext(msg) + evm = vm.NewEVM(blockCtx, txCtx, evm.IntraBlockState(), chainConfig, vm.Config{Debug: false}) + // Execute the transaction message + _, err = core.ApplyMessage(evm, msg, gp, true /* refunds */, false /* gasBailout */) + if err != nil { + return nil, err + } + _ = statedb.FinalizeTx(rules, state.NewNoopWriter()) + + } + + creationTx := block.Transactions()[transactionIndex] + statedb.SetTxContext(creationTx.Hash(), block.Hash(), transactionIndex) + + // CREATE2: keep original message so we match the existing contract address, code will be replaced later + msg, err := creationTx.AsMessage(*signer, block.BaseFee(), rules) + if err != nil { + return nil, err + } + + contractAddr := crypto.CreateAddress(msg.From(), msg.Nonce()) + if creationTx.GetTo() == nil && contractAddr == address { + // CREATE: adapt message with new code so it's replaced instantly + msg = types.NewMessage(msg.From(), msg.To(), msg.Nonce(), msg.Value(), api.GasCap, msg.GasPrice(), msg.FeeCap(), msg.Tip(), *code, msg.AccessList(), msg.CheckNonce(), msg.IsFree(), msg.MaxFeePerBlobGas()) + } else { + msg.ChangeGas(api.GasCap, api.GasCap) + } + txCtx = core.NewEVMTxContext(msg) + ct := OverlayCreateTracer{contractAddress: address, code: *code, gasCap: api.GasCap} + evm = vm.NewEVM(blockCtx, txCtx, evm.IntraBlockState(), chainConfig, vm.Config{Debug: true, Tracer: &ct}) + + // Execute the transaction message + _, err = core.ApplyMessage(evm, msg, gp, true /* refunds */, true /* gasBailout */) + if ct.err != nil { + return nil, err + } + + resultCode := &CreationCode{} + if ct.resultCode != nil && len(ct.resultCode) > 0 { + c := hexutility.Bytes(ct.resultCode) + resultCode.Code = &c + return resultCode, nil + } else { + // err from core.ApplyMessage() + if err != nil { + return nil, err + } + code := evm.IntraBlockState().GetCode(address) + if len(code) > 0 { + c := hexutility.Bytes(code) + resultCode.Code = &c + return resultCode, nil + } + } + + _ = statedb.FinalizeTx(rules, state.NewNoopWriter()) + + return nil, nil +} + +func (api *OverlayAPIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria, stateOverride *ethapi.StateOverrides) ([]*types.Log, error) { + timeout := api.OverlayGetLogsTimeout + // Setup context so it may be cancelled the call has completed + // or, in case of unmetered gas, setup a context with a timeout. + var cancel context.CancelFunc + if timeout > 0 { + ctx, cancel = context.WithTimeout(ctx, timeout) + } else { + ctx, cancel = context.WithCancel(ctx) + } + // Make sure the context is cancelled when the call has completed + // this makes sure resources are cleaned up. + defer cancel() + + tx, err := api.db.BeginRo(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback() + chainConfig, err := api.chainConfig(ctx, tx) + if err != nil { + return nil, err + } + + defer func(start time.Time) { log.Trace("Executing overlay_getLogs finished", "runtime", time.Since(start)) }(time.Now()) + + begin, end, err := getBeginEnd(ctx, tx, api, crit) + if err != nil { + return nil, err + } + + numBlocks := end - begin + 1 + var ( + results = make([]*blockReplayResult, numBlocks) + pend sync.WaitGroup + ) + + threads := runtime.NumCPU() + if threads > int(numBlocks) { + threads = int(numBlocks) + } + jobs := make(chan *blockReplayTask, threads) + for th := 0; th < threads; th++ { + pend.Add(1) + go func() { + defer pend.Done() + tx, err := api.db.BeginRo(ctx) + if err != nil { + log.Error("Error", "error", err.Error()) + return + } + defer tx.Rollback() + for task := range jobs { + blockNumber := task.BlockNumber + if err := ctx.Err(); err != nil { + results[task.idx] = &blockReplayResult{BlockNumber: task.BlockNumber, Error: err.Error()} + continue + } + + // try to recompute the state + stateReader, err := rpchelper.CreateStateReader(ctx, tx, rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(blockNumber-1)), 0, api.filters, api.stateCache, api.historyV3(tx), chainConfig.ChainName) + if err != nil { + results[task.idx] = &blockReplayResult{BlockNumber: task.BlockNumber, Error: err.Error()} + continue + } + statedb := state.New(stateReader) + + if stateOverride != nil { + err = stateOverride.Override(statedb) + if err != nil { + results[task.idx] = &blockReplayResult{BlockNumber: task.BlockNumber, Error: err.Error()} + continue + } + } + blockLogs, err := api.replayBlock(ctx, uint64(blockNumber), statedb, chainConfig, tx) + if err != nil { + results[task.idx] = &blockReplayResult{BlockNumber: task.BlockNumber, Error: err.Error()} + continue + } + log.Debug("[GetLogs]", "len(blockLogs)", len(blockLogs)) + logs := filterLogs(blockLogs, crit.Addresses, crit.Topics) + log.Debug("[GetLogs]", "len(logs)", len(logs)) + + results[task.idx] = &blockReplayResult{BlockNumber: task.BlockNumber, Logs: logs} + } + }() + } + + hasOverrides := false + allBlocks := roaring64.New() + for overlayAddress := range *stateOverride { + hasOverrides = true + fromB, err := bitmapdb.Get64(tx, kv.CallFromIndex, overlayAddress.Bytes(), begin, end+1) + if err != nil { + log.Error(err.Error()) + return nil, err + } + + toB, err := bitmapdb.Get64(tx, kv.CallToIndex, overlayAddress.Bytes(), begin, end+1) + if err != nil { + log.Error(err.Error()) + return nil, err + } + + allBlocks.Or(fromB) + allBlocks.Or(toB) + } + + var failed error + idx := 0 +blockLoop: + for blockNumber := begin; blockNumber <= end; blockNumber++ { + if hasOverrides && !allBlocks.Contains(blockNumber) { + log.Debug("skipping untouched blocked", "blockNumber", blockNumber) + continue + } + + // Send the trace task over for execution + task := &blockReplayTask{idx: idx, BlockNumber: int64(blockNumber)} + select { + case <-ctx.Done(): + failed = ctx.Err() + break blockLoop + case jobs <- task: + } + idx++ + } + close(jobs) + pend.Wait() + + // If execution failed in between, abort + if failed != nil { + log.Error("[GetLogs]", "failed", failed) + return nil, failed + } + + logs := []*types.Log{} + for idx := range results { + res := results[idx] + if res == nil { + continue + } + logs = append(logs, res.Logs...) + } + return logs, nil +} + +func filterLogs(logs types.Logs, addresses []common.Address, topics [][]common.Hash) []*types.Log { + addrMap := make(map[common.Address]struct{}, len(addresses)) + for _, v := range addresses { + addrMap[v] = struct{}{} + } + return logs.Filter(addrMap, topics) +} + +func (api *OverlayAPIImpl) replayBlock(ctx context.Context, blockNum uint64, statedb *state.IntraBlockState, chainConfig *chain.Config, tx kv.Tx) ([]*types.Log, error) { + log.Debug("[replayBlock] begin", "block", blockNum) + var ( + hash common.Hash + replayTransactions types.Transactions + evm *vm.EVM + blockCtx evmtypes.BlockContext + txCtx evmtypes.TxContext + overrideBlockHash map[uint64]common.Hash + baseFee uint256.Int + ) + + blockLogs := []*types.Log{} + overrideBlockHash = make(map[uint64]common.Hash) + + blockNumber := rpc.BlockNumber(blockNum) + blockNum, hash, _, err := rpchelper.GetBlockNumber(rpc.BlockNumberOrHash{BlockNumber: &blockNumber}, tx, api.filters) + if err != nil { + return nil, err + } + + block, err := api.blockWithSenders(ctx, tx, hash, blockNum) + if err != nil || block == nil { + return nil, err + } + + replayTransactions = block.Transactions() + log.Debug("[replayBlock] replayTx", "length", len(replayTransactions)) + + parent := block.Header() + + if parent == nil { + return nil, fmt.Errorf("block %d(%x) not found", blockNum, hash) + } + + getHash := func(i uint64) common.Hash { + if hash, ok := overrideBlockHash[i]; ok { + return hash + } + hash, err := api._blockReader.CanonicalHash(ctx, tx, i) + if err != nil { + log.Debug("Can't get block hash by number", "number", i, "only-canonical", true) + } + return hash + } + + if parent.BaseFee != nil { + baseFee.SetFromBig(parent.BaseFee) + } + + var excessBlobGas uint64 = 0 + blockCtx = evmtypes.BlockContext{ + CanTransfer: core.CanTransfer, + Transfer: core.Transfer, + GetHash: getHash, + Coinbase: parent.Coinbase, + BlockNumber: parent.Number.Uint64(), + Time: parent.Time, + Difficulty: new(big.Int).Set(parent.Difficulty), + GasLimit: parent.GasLimit, + BaseFee: &baseFee, + ExcessBlobGas: &excessBlobGas, + } + + signer := types.MakeSigner(chainConfig, blockNum, blockCtx.Time) + rules := chainConfig.Rules(blockNum, blockCtx.Time) + + timeout := api.OverlayReplayBlockTimeout + // Setup context so it may be cancelled the call has completed + // or, in case of unmetered gas, setup a context with a timeout. + var cancel context.CancelFunc + if timeout > 0 { + ctx, cancel = context.WithTimeout(ctx, timeout) + } else { + ctx, cancel = context.WithCancel(ctx) + } + // Make sure the context is cancelled when the call has completed + // this makes sure resources are cleaned up. + defer cancel() + + // Wait for the context to be done and cancel the evm. Even if the + // EVM has finished, cancelling may be done (repeatedly) + go func() { + <-ctx.Done() + evm.Cancel() + }() + + // Setup the gas pool (also for unmetered requests) + // and apply the message. + gp := new(core.GasPool).AddGas(math.MaxUint64).AddBlobGas(math.MaxUint64) + vmConfig := vm.Config{Debug: false} + evm = vm.NewEVM(blockCtx, evmtypes.TxContext{}, statedb, chainConfig, vmConfig) + receipts, err := api.getReceipts(ctx, tx, block, block.Body().SendersFromTxs()) + if err != nil { + return nil, err + } + + // try to replay all transactions in this block + for idx, txn := range replayTransactions { + log.Debug("[replayBlock] replaying transaction", "idx", idx, "transactionHash", txn.Hash()) + + msg, err := txn.AsMessage(*signer, block.BaseFee(), rules) + if err != nil { + log.Error(err.Error()) + return nil, err + } + msg.ChangeGas(api.GasCap, api.GasCap) + + receipt := receipts[uint64(idx)] + log.Debug("[replayBlock]", "receipt.TransactionIndex", receipt.TransactionIndex, "receipt.TxHash", receipt.TxHash, "receipt.Status", receipt.Status) + // check if this tx has failed in the original context + if receipt.Status == types.ReceiptStatusFailed { + log.Debug("[replayBlock] skipping transaction because it has status=failed", "transactionHash", txn.Hash()) + + contractCreation := msg.To() == nil + if !contractCreation { + // bump the nonce of the sender + sender := vm.AccountRef(msg.From()) + statedb.SetNonce(msg.From(), statedb.GetNonce(sender.Address())+1) + continue + } + } + + statedb.SetTxContext(txn.Hash(), block.Hash(), idx) + txCtx = core.NewEVMTxContext(msg) + evm.TxContext = txCtx + + // Execute the transaction message + res, err := core.ApplyMessage(evm, msg, gp, true /* refunds */, true /* gasBailout */) + if err != nil { + log.Error(err.Error()) + return nil, err + } + + err = statedb.FinalizeTx(rules, state.NewNoopWriter()) + if err != nil { + log.Error(err.Error()) + return nil, err + } + + // If the timer caused an abort, return an appropriate error message + if evm.Cancelled() { + log.Error("EVM cancelled") + return nil, fmt.Errorf("execution aborted (timeout = %v)", timeout) + } + + if res.Failed() { + log.Debug("[replayBlock] res result for transaction", "transactionHash", txn.Hash(), "failed", res.Failed(), "revert", res.Revert(), "error", res.Err) + log.Debug("[replayBlock] discarding txLogs because tx has status=failed", "transactionHash", txn.Hash()) + } else { + //append logs only if tx has not reverted + txLogs := statedb.GetLogs(txn.Hash()) + log.Debug("[replayBlock]", "len(txLogs)", len(txLogs), "transactionHash", txn.Hash()) + blockLogs = append(blockLogs, txLogs...) + } + } + return blockLogs, nil +} + +func getBeginEnd(ctx context.Context, tx kv.Tx, api *OverlayAPIImpl, crit filters.FilterCriteria) (uint64, uint64, error) { + var begin, end uint64 + if crit.BlockHash != nil { + block, err := api.blockByHashWithSenders(ctx, tx, *crit.BlockHash) + if err != nil { + return 0, 0, err + } + + if block == nil { + return 0, 0, fmt.Errorf("block not found: %x", *crit.BlockHash) + } + + num := block.NumberU64() + begin = num + end = num + } else { + // Convert the RPC block numbers into internal representations + latest, _, _, err := rpchelper.GetBlockNumber(rpc.BlockNumberOrHashWithNumber(rpc.LatestExecutedBlockNumber), tx, nil) + if err != nil { + return 0, 0, err + } + + begin = latest + if crit.FromBlock != nil { + fromBlock := crit.FromBlock.Int64() + if fromBlock > 0 { + begin = uint64(fromBlock) + } else { + blockNum := rpc.BlockNumber(fromBlock) + begin, _, _, err = rpchelper.GetBlockNumber(rpc.BlockNumberOrHashWithNumber(blockNum), tx, api.filters) + if err != nil { + return 0, 0, err + } + } + + } + end = latest + if crit.ToBlock != nil { + toBlock := crit.ToBlock.Int64() + if toBlock > 0 { + end = uint64(toBlock) + } else { + blockNum := rpc.BlockNumber(toBlock) + end, _, _, err = rpchelper.GetBlockNumber(rpc.BlockNumberOrHashWithNumber(blockNum), tx, api.filters) + if err != nil { + return 0, 0, err + } + } + } + } + + if end < begin { + return 0, 0, fmt.Errorf("end (%d) < begin (%d)", end, begin) + } + if end > roaring.MaxUint32 { + latest, err := rpchelper.GetLatestBlockNumber(tx) + if err != nil { + return 0, 0, err + } + if begin > latest { + return 0, 0, fmt.Errorf("begin (%d) > latest (%d)", begin, latest) + } + end = latest + } + return begin, end, nil +} diff --git a/turbo/jsonrpc/overlay_create_tracer.go b/turbo/jsonrpc/overlay_create_tracer.go new file mode 100644 index 00000000000..820b9e9fb5b --- /dev/null +++ b/turbo/jsonrpc/overlay_create_tracer.go @@ -0,0 +1,51 @@ +package jsonrpc + +import ( + "github.com/holiman/uint256" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon/core/vm" +) + +type OverlayCreateTracer struct { + contractAddress libcommon.Address + isCapturing bool + code []byte + gasCap uint64 + err error + resultCode []byte + evm *vm.EVM +} + +// Transaction level +func (ct *OverlayCreateTracer) CaptureTxStart(gasLimit uint64) {} +func (ct *OverlayCreateTracer) CaptureTxEnd(restGas uint64) {} + +// Top call frame +func (ct *OverlayCreateTracer) CaptureStart(env *vm.EVM, from libcommon.Address, to libcommon.Address, precompile bool, create bool, input []byte, gas uint64, value *uint256.Int, code []byte) { + ct.evm = env +} +func (ct *OverlayCreateTracer) CaptureEnd(output []byte, usedGas uint64, err error) {} + +// Rest of the frames +func (ct *OverlayCreateTracer) CaptureEnter(typ vm.OpCode, from libcommon.Address, to libcommon.Address, precompile bool, create bool, input []byte, gas uint64, value *uint256.Int, code []byte) { + if ct.isCapturing { + return + } + + if create && to == ct.contractAddress { + ct.isCapturing = true + _, _, _, err := ct.evm.OverlayCreate(vm.AccountRef(from), vm.NewCodeAndHash(ct.code), ct.gasCap, value, to, typ, true /* incrementNonce */) + if err != nil { + ct.err = err + } else { + ct.resultCode = ct.evm.IntraBlockState().GetCode(ct.contractAddress) + } + } +} +func (ct *OverlayCreateTracer) CaptureExit(output []byte, usedGas uint64, err error) {} + +// Opcode level +func (ct *OverlayCreateTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { +} +func (ct *OverlayCreateTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { +} diff --git a/turbo/jsonrpc/send_transaction.go b/turbo/jsonrpc/send_transaction.go index 879788b8f11..00f687dbd97 100644 --- a/turbo/jsonrpc/send_transaction.go +++ b/turbo/jsonrpc/send_transaction.go @@ -22,6 +22,15 @@ func (api *APIImpl) SendRawTransaction(ctx context.Context, encodedTx hexutility return common.Hash{}, err } + // If the transaction fee cap is already specified, ensure the + // fee of the given transaction is _reasonable_. + if err := checkTxFee(txn.GetPrice().ToBig(), txn.GetGas(), api.FeeCap); err != nil { + return common.Hash{}, err + } + if !txn.Protected() && !api.AllowUnprotectedTxs { + return common.Hash{}, errors.New("only replay-protected (EIP-155) transactions allowed over RPC") + } + // this has been moved to prior to adding of transactions to capture the // pre state of the db - which is used for logging in the messages below tx, err := api.db.BeginRo(ctx) @@ -31,7 +40,7 @@ func (api *APIImpl) SendRawTransaction(ctx context.Context, encodedTx hexutility defer tx.Rollback() - cc, err := api.chainConfig(tx) + cc, err := api.chainConfig(ctx, tx) if err != nil { return common.Hash{}, err } diff --git a/turbo/jsonrpc/send_transaction_test.go b/turbo/jsonrpc/send_transaction_test.go index 6f0cb860a47..ae089d32f86 100644 --- a/turbo/jsonrpc/send_transaction_test.go +++ b/turbo/jsonrpc/send_transaction_test.go @@ -89,7 +89,7 @@ func TestSendRawTransaction(t *testing.T) { ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, mockSentry) txPool := txpool.NewTxpoolClient(conn) ff := rpchelper.New(ctx, nil, txPool, txpool.NewMiningClient(conn), func() {}, mockSentry.Log) - api := jsonrpc.NewEthAPI(newBaseApiForTest(mockSentry), mockSentry.DB, nil, txPool, nil, 5000000, 100_000, false, 100_000, logger) + api := jsonrpc.NewEthAPI(newBaseApiForTest(mockSentry), mockSentry.DB, nil, txPool, nil, 5000000, 1e18, 100_000, false, 100_000, 128, logger) buf := bytes.NewBuffer(nil) err = txn.MarshalBinary(buf) @@ -141,7 +141,7 @@ func TestSendRawTransactionUnprotected(t *testing.T) { ctx, conn := rpcdaemontest.CreateTestGrpcConn(t, mockSentry) txPool := txpool.NewTxpoolClient(conn) ff := rpchelper.New(ctx, nil, txPool, txpool.NewMiningClient(conn), func() {}, mockSentry.Log) - api := jsonrpc.NewEthAPI(newBaseApiForTest(mockSentry), mockSentry.DB, nil, txPool, nil, 5000000, 100_000, false, 100_000, logger) + api := jsonrpc.NewEthAPI(newBaseApiForTest(mockSentry), mockSentry.DB, nil, txPool, nil, 5000000, 1e18, 100_000, false, 100_000, 128, logger) // Enable unproteced txs flag api.AllowUnprotectedTxs = true diff --git a/turbo/jsonrpc/trace_adhoc.go b/turbo/jsonrpc/trace_adhoc.go index 256cac7892a..5173a31793a 100644 --- a/turbo/jsonrpc/trace_adhoc.go +++ b/turbo/jsonrpc/trace_adhoc.go @@ -17,14 +17,13 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/opstack" types2 "github.com/ledgerwatch/erigon-lib/types" - math2 "github.com/ledgerwatch/erigon/common/math" "github.com/ledgerwatch/erigon/core" - "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/types/accounts" "github.com/ledgerwatch/erigon/core/vm" + "github.com/ledgerwatch/erigon/polygon/tracer" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/shards" @@ -58,6 +57,7 @@ type TraceCallParam struct { AccessList *types2.AccessList `json:"accessList"` txHash *libcommon.Hash traceTypes []string + isBorStateSyncTxn bool } // TraceCallResult is the response to `trace_call` method @@ -721,47 +721,57 @@ func (api *TraceAPIImpl) ReplayTransaction(ctx context.Context, txHash libcommon return nil, err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } - blockNum, ok, err := api.txnLookup(tx, txHash) + var isBorStateSyncTxn bool + blockNum, ok, err := api.txnLookup(ctx, tx, txHash) if err != nil { return nil, err } if !ok { - return nil, nil - } - // Private API returns 0 if transaction is not found. - if blockNum == 0 && chainConfig.Bor != nil { - blockNumPtr, err := rawdb.ReadBorTxLookupEntry(tx, txHash) + if chainConfig.Bor == nil { + return nil, nil + } + + // otherwise this may be a bor state sync transaction - check + blockNum, ok, err = api._blockReader.EventLookup(ctx, tx, txHash) if err != nil { return nil, err } - if blockNumPtr == nil { + if !ok { return nil, nil } - blockNum = *blockNumPtr + + isBorStateSyncTxn = true } - block, err := api.blockByNumberWithSenders(tx, blockNum) + + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) if err != nil { return nil, err } if block == nil { return nil, nil } - var txnIndex uint64 - for i, transaction := range block.Transactions() { - if transaction.Hash() == txHash { - txnIndex = uint64(i) + + var txnIndex int + for idx := 0; idx < block.Transactions().Len() && !isBorStateSyncTxn; idx++ { + txn := block.Transactions()[idx] + if txn.Hash() == txHash { + txnIndex = idx break } } + if isBorStateSyncTxn { + txnIndex = block.Transactions().Len() + } + signer := types.MakeSigner(chainConfig, blockNum, block.Time()) // Returns an array of trace arrays, one trace array for each transaction - traces, _, err := api.callManyTransactions(ctx, tx, block, traceTypes, int(txnIndex), *gasBailOut, signer, chainConfig) + traces, _, err := api.callManyTransactions(ctx, tx, block, traceTypes, txnIndex, *gasBailOut, signer, chainConfig) if err != nil { return nil, err } @@ -783,7 +793,7 @@ func (api *TraceAPIImpl) ReplayTransaction(ctx context.Context, txHash libcommon for txno, trace := range traces { // We're only looking for a specific transaction - if txno == int(txnIndex) { + if txno == txnIndex { result.Output = trace.Output if traceTypeTrace { result.Trace = trace.Trace @@ -798,6 +808,7 @@ func (api *TraceAPIImpl) ReplayTransaction(ctx context.Context, txHash libcommon return trace, nil } } + return result, nil } @@ -810,7 +821,7 @@ func (api *TraceAPIImpl) ReplayBlockTransactions(ctx context.Context, blockNrOrH return nil, err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -821,7 +832,7 @@ func (api *TraceAPIImpl) ReplayBlockTransactions(ctx context.Context, blockNrOrH } // Extract transactions from block - block, bErr := api.blockWithSenders(tx, blockHash, blockNumber) + block, bErr := api.blockWithSenders(ctx, tx, blockHash, blockNumber) if bErr != nil { return nil, bErr } @@ -864,9 +875,8 @@ func (api *TraceAPIImpl) ReplayBlockTransactions(ctx context.Context, blockNrOrH if traceTypeVmTrace { tr.VmTrace = trace.VmTrace } + tr.TransactionHash = trace.TransactionHash result[i] = tr - txhash := block.Transactions()[i].Hash() - tr.TransactionHash = &txhash } return result, nil @@ -880,7 +890,7 @@ func (api *TraceAPIImpl) Call(ctx context.Context, args TraceCallParam, traceTyp } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -903,7 +913,7 @@ func (api *TraceAPIImpl) Call(ctx context.Context, args TraceCallParam, traceTyp ibs := state.New(stateReader) - block, err := api.blockWithSenders(tx, hash, blockNumber) + block, err := api.blockWithSenders(ctx, tx, hash, blockNumber) if err != nil { return nil, err } @@ -1066,7 +1076,7 @@ func (api *TraceAPIImpl) CallMany(ctx context.Context, calls json.RawMessage, pa } // TODO: can read here only parent header - parentBlock, err := api.blockWithSenders(dbtx, hash, blockNumber) + parentBlock, err := api.blockWithSenders(ctx, dbtx, hash, blockNumber) if err != nil { return nil, err } @@ -1095,7 +1105,7 @@ func (api *TraceAPIImpl) CallMany(ctx context.Context, calls json.RawMessage, pa func (api *TraceAPIImpl) doCallMany(ctx context.Context, dbtx kv.Tx, msgs []types.Message, callParams []TraceCallParam, parentNrOrHash *rpc.BlockNumberOrHash, header *types.Header, gasBailout bool, txIndexNeeded int, ) ([]*TraceCallResult, *state.IntraBlockState, error) { - chainConfig, err := api.chainConfig(dbtx) + chainConfig, err := api.chainConfig(ctx, dbtx) if err != nil { return nil, nil, err } @@ -1120,10 +1130,13 @@ func (api *TraceAPIImpl) doCallMany(ctx context.Context, dbtx kv.Tx, msgs []type ibs := state.New(cachedReader) // TODO: can read here only parent header - parentBlock, err := api.blockWithSenders(dbtx, hash, blockNumber) + parentBlock, err := api.blockWithSenders(ctx, dbtx, hash, blockNumber) if err != nil { return nil, nil, err } + if parentBlock == nil { + return nil, nil, fmt.Errorf("parent block %d(%x) not found", blockNumber, hash) + } parentHeader := parentBlock.Header() if parentHeader == nil { return nil, nil, fmt.Errorf("parent header %d(%x) not found", blockNumber, hash) @@ -1141,7 +1154,7 @@ func (api *TraceAPIImpl) doCallMany(ctx context.Context, dbtx kv.Tx, msgs []type // Make sure the context is cancelled when the call has completed // this makes sure resources are cleaned up. defer cancel() - results := []*TraceCallResult{} + results := make([]*TraceCallResult, 0, len(msgs)) useParent := false if header == nil { @@ -1154,7 +1167,7 @@ func (api *TraceAPIImpl) doCallMany(ctx context.Context, dbtx kv.Tx, msgs []type if err := libcommon.Stopped(ctx.Done()); err != nil { return nil, nil, err } - traceResult := &TraceCallResult{Trace: []*ParityTrace{}} + var traceTypeTrace, traceTypeStateDiff, traceTypeVmTrace bool args := callParams[txIndex] for _, traceType := range args.traceTypes { @@ -1169,6 +1182,8 @@ func (api *TraceAPIImpl) doCallMany(ctx context.Context, dbtx kv.Tx, msgs []type return nil, nil, fmt.Errorf("unrecognized trace type: %s", traceType) } } + + traceResult := &TraceCallResult{Trace: []*ParityTrace{}, TransactionHash: args.txHash} vmConfig := vm.Config{} if (traceTypeTrace && (txIndexNeeded == -1 || txIndex == txIndexNeeded)) || traceTypeVmTrace { var ot OeTracer @@ -1185,10 +1200,7 @@ func (api *TraceAPIImpl) doCallMany(ctx context.Context, dbtx kv.Tx, msgs []type vmConfig.Tracer = &ot } - // Get a new instance of the EVM. blockCtx := transactions.NewEVMBlockContext(engine, header, parentNrOrHash.RequireCanonical, dbtx, api._blockReader) - txCtx := core.NewEVMTxContext(msg) - if useParent { blockCtx.GasLimit = math.MaxUint64 blockCtx.MaxGasLimit = true @@ -1197,43 +1209,81 @@ func (api *TraceAPIImpl) doCallMany(ctx context.Context, dbtx kv.Tx, msgs []type blockCtx.L1CostFunc = l1CostFunc // Create initial IntraBlockState, we will compare it with ibs (IntraBlockState after the transaction) - evm := vm.NewEVM(blockCtx, txCtx, ibs, chainConfig, vmConfig) - - gp := new(core.GasPool).AddGas(msg.Gas()).AddBlobGas(msg.BlobGas()) - var execResult *core.ExecutionResult - // Clone the state cache before applying the changes, clone is discarded + // Clone the state cache before applying the changes for diff after transaction execution, clone is discarded var cloneReader state.StateReader + var sd *StateDiff if traceTypeStateDiff { cloneCache := stateCache.Clone() cloneReader = state.NewCachedReader(stateReader, cloneCache) + + sdMap := make(map[libcommon.Address]*StateDiffAccount) + traceResult.StateDiff = sdMap + sd = &StateDiff{sdMap: sdMap} } - if args.txHash != nil { - ibs.SetTxContext(*args.txHash, header.Hash(), txIndex) + + var finalizeTxStateWriter state.StateWriter + if sd != nil { + finalizeTxStateWriter = sd + } else { + finalizeTxStateWriter = noop + } + + ibs.Reset() + + var txFinalized bool + var execResult *core.ExecutionResult + if args.isBorStateSyncTxn { + txFinalized = true + execResult, err = tracer.TraceBorStateSyncTxnTraceAPI( + ctx, + dbtx, + &vmConfig, + chainConfig, + api._blockReader, + ibs, + finalizeTxStateWriter, + blockCtx, + header.Hash(), + header.Number.Uint64(), + header.Time, + ) } else { - ibs.SetTxContext(libcommon.Hash{}, header.Hash(), txIndex) + if args.txHash != nil { + ibs.SetTxContext(*args.txHash, header.Hash(), txIndex) + } else { + ibs.SetTxContext(libcommon.Hash{}, header.Hash(), txIndex) + } + + txCtx := core.NewEVMTxContext(msg) + evm := vm.NewEVM(blockCtx, txCtx, ibs, chainConfig, vmConfig) + gp := new(core.GasPool).AddGas(msg.Gas()).AddBlobGas(msg.BlobGas()) + + execResult, err = core.ApplyMessage(evm, msg, gp, true /* refunds */, gasBailout /* gasBailout */) } - execResult, err = core.ApplyMessage(evm, msg, gp, true /* refunds */, gasBailout /* gasBailout */) if err != nil { return nil, nil, fmt.Errorf("first run for txIndex %d error: %w", txIndex, err) } + + chainRules := chainConfig.Rules(blockCtx.BlockNumber, blockCtx.Time) traceResult.Output = libcommon.CopyBytes(execResult.ReturnData) if traceTypeStateDiff { initialIbs := state.New(cloneReader) - sdMap := make(map[libcommon.Address]*StateDiffAccount) - traceResult.StateDiff = sdMap - sd := &StateDiff{sdMap: sdMap} - if err = ibs.FinalizeTx(evm.ChainRules(), sd); err != nil { - return nil, nil, err + if !txFinalized { + if err = ibs.FinalizeTx(chainRules, sd); err != nil { + return nil, nil, err + } } sd.CompareStates(initialIbs, ibs) - if err = ibs.CommitBlock(evm.ChainRules(), cachedWriter); err != nil { + if err = ibs.CommitBlock(chainRules, cachedWriter); err != nil { return nil, nil, err } } else { - if err = ibs.FinalizeTx(evm.ChainRules(), noop); err != nil { - return nil, nil, err + if !txFinalized { + if err = ibs.FinalizeTx(chainRules, noop); err != nil { + return nil, nil, err + } } - if err = ibs.CommitBlock(evm.ChainRules(), cachedWriter); err != nil { + if err = ibs.CommitBlock(chainRules, cachedWriter); err != nil { return nil, nil, err } } @@ -1247,6 +1297,7 @@ func (api *TraceAPIImpl) doCallMany(ctx context.Context, dbtx kv.Tx, msgs []type break } } + return results, ibs, nil } diff --git a/turbo/jsonrpc/trace_api.go b/turbo/jsonrpc/trace_api.go index ac248e961ea..90315156ceb 100644 --- a/turbo/jsonrpc/trace_api.go +++ b/turbo/jsonrpc/trace_api.go @@ -3,12 +3,12 @@ package jsonrpc import ( "context" "encoding/json" - "github.com/ledgerwatch/erigon-lib/common/hexutil" jsoniter "github.com/json-iterator/go" + libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon/cmd/rpcdaemon/cli/httpcfg" "github.com/ledgerwatch/erigon/rpc" ) @@ -16,6 +16,7 @@ import ( // TraceAPI RPC interface into tracing API type TraceAPI interface { // Ad-hoc (see ./trace_adhoc.go) + ReplayBlockTransactions(ctx context.Context, blockNr rpc.BlockNumberOrHash, traceTypes []string, gasBailOut *bool) ([]*TraceCallResult, error) ReplayTransaction(ctx context.Context, txHash libcommon.Hash, traceTypes []string, gasBailOut *bool) (*TraceCallResult, error) Call(ctx context.Context, call TraceCallParam, types []string, blockNr *rpc.BlockNumberOrHash) (*TraceCallResult, error) @@ -23,6 +24,7 @@ type TraceAPI interface { RawTransaction(ctx context.Context, txHash libcommon.Hash, traceTypes []string) ([]interface{}, error) // Filtering (see ./trace_filtering.go) + Transaction(ctx context.Context, txHash libcommon.Hash, gasBailOut *bool) (ParityTraces, error) Get(ctx context.Context, txHash libcommon.Hash, txIndicies []hexutil.Uint64, gasBailOut *bool) (*ParityTrace, error) Block(ctx context.Context, blockNr rpc.BlockNumber, gasBailOut *bool) (ParityTraces, error) diff --git a/turbo/jsonrpc/trace_filtering.go b/turbo/jsonrpc/trace_filtering.go index 8504e04e3c7..2ade7e1150d 100644 --- a/turbo/jsonrpc/trace_filtering.go +++ b/turbo/jsonrpc/trace_filtering.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" - "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/opstack" "github.com/RoaringBitmap/roaring/roaring64" @@ -14,12 +13,12 @@ import ( "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/bitmapdb" "github.com/ledgerwatch/erigon-lib/kv/iter" "github.com/ledgerwatch/erigon-lib/kv/order" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" - "github.com/ledgerwatch/erigon/consensus" "github.com/ledgerwatch/erigon/consensus/ethash" "github.com/ledgerwatch/erigon/core" @@ -29,6 +28,7 @@ import ( "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/eth/stagedsync" "github.com/ledgerwatch/erigon/ethdb" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/shards" @@ -45,30 +45,34 @@ func (api *TraceAPIImpl) Transaction(ctx context.Context, txHash common.Hash, ga return nil, err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } - blockNumber, ok, err := api.txnLookup(tx, txHash) + var isBorStateSyncTxn bool + blockNumber, ok, err := api.txnLookup(ctx, tx, txHash) if err != nil { return nil, err } if !ok { - return nil, nil - } - // Private API returns 0 if transaction is not found. - if blockNumber == 0 && chainConfig.Bor != nil { - blockNumPtr, err := rawdb.ReadBorTxLookupEntry(tx, txHash) + if chainConfig.Bor == nil { + return nil, nil + } + + // otherwise this may be a bor state sync transaction - check + blockNumber, ok, err = api._blockReader.EventLookup(ctx, tx, txHash) if err != nil { return nil, err } - if blockNumPtr == nil { + if !ok { return nil, nil } - blockNumber = *blockNumPtr + + isBorStateSyncTxn = true } - block, err := api.blockByNumberWithSenders(tx, blockNumber) + + block, err := api.blockByNumberWithSenders(ctx, tx, blockNumber) if err != nil { return nil, err } @@ -77,16 +81,25 @@ func (api *TraceAPIImpl) Transaction(ctx context.Context, txHash common.Hash, ga } var txIndex int - for idx, txn := range block.Transactions() { - if txn.Hash() == txHash { - txIndex = idx - break + if isBorStateSyncTxn { + txIndex = block.Transactions().Len() + } else { + var found bool + for idx := 0; idx < block.Transactions().Len(); idx++ { + txn := block.Transactions()[idx] + if txn.Hash() == txHash { + txIndex = idx + found = true + break + } + } + if !found { + return nil, fmt.Errorf("txn with hash %x belongs to currentely non-canonical block %d. only canonical blocks can be traced", txHash, block.NumberU64()) } } - bn := hexutil.Uint64(blockNumber) + bn := hexutil.Uint64(blockNumber) hash := block.Hash() - signer := types.MakeSigner(chainConfig, blockNumber, block.Time()) // Returns an array of trace arrays, one trace array for each transaction traces, _, err := api.callManyTransactions(ctx, tx, block, []string{TraceTypeTrace}, txIndex, *gasBailOut, signer, chainConfig) @@ -97,13 +110,12 @@ func (api *TraceAPIImpl) Transaction(ctx context.Context, txHash common.Hash, ga out := make([]ParityTrace, 0, len(traces)) blockno := uint64(bn) for txno, trace := range traces { - txhash := block.Transactions()[txno].Hash() // We're only looking for a specific transaction if txno == txIndex { for _, pt := range trace.Trace { pt.BlockHash = &hash pt.BlockNumber = &blockno - pt.TransactionHash = &txhash + pt.TransactionHash = trace.TransactionHash txpos := uint64(txno) pt.TransactionPosition = &txpos out = append(out, *pt) @@ -170,7 +182,7 @@ func (api *TraceAPIImpl) Block(ctx context.Context, blockNr rpc.BlockNumber, gas bn := hexutil.Uint64(blockNum) // Extract transactions from block - block, bErr := api.blockWithSenders(tx, hash, blockNum) + block, bErr := api.blockWithSenders(ctx, tx, hash, blockNum) if bErr != nil { return nil, bErr } @@ -178,7 +190,7 @@ func (api *TraceAPIImpl) Block(ctx context.Context, blockNr rpc.BlockNumber, gas return nil, fmt.Errorf("could not find block %d", uint64(bn)) } - cfg, err := api.chainConfig(tx) + cfg, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -190,12 +202,11 @@ func (api *TraceAPIImpl) Block(ctx context.Context, blockNr rpc.BlockNumber, gas out := make([]ParityTrace, 0, len(traces)) for txno, trace := range traces { - txhash := block.Transactions()[txno].Hash() txpos := uint64(txno) for _, pt := range trace.Trace { pt.BlockHash = &hash pt.BlockNumber = &blockNum - pt.TransactionHash = &txhash + pt.TransactionHash = trace.TransactionHash pt.TransactionPosition = &txpos out = append(out, *pt) } @@ -365,7 +376,7 @@ func (api *TraceAPIImpl) Filter(ctx context.Context, req TraceFilterRequest, gas return err } - chainConfig, err := api.chainConfig(dbtx) + chainConfig, err := api.chainConfig(ctx, dbtx) if err != nil { return err } @@ -390,7 +401,7 @@ func (api *TraceAPIImpl) Filter(ctx context.Context, req TraceFilterRequest, gas for it.HasNext() { b := it.Next() // Extract transactions from block - block, bErr := api.blockByNumberWithSenders(dbtx, b) + block, bErr := api.blockByNumberWithSenders(ctx, dbtx, b) if bErr != nil { if first { first = false @@ -416,7 +427,6 @@ func (api *TraceAPIImpl) Filter(ctx context.Context, req TraceFilterRequest, gas blockHash := block.Hash() blockNumber := block.NumberU64() - txs := block.Transactions() signer := types.MakeSigner(chainConfig, b, block.Time()) t, syscall, tErr := api.callManyTransactions(ctx, dbtx, block, []string{TraceTypeTrace}, -1 /* all tx indices */, *gasBailOut, signer, chainConfig) if tErr != nil { @@ -434,14 +444,13 @@ func (api *TraceAPIImpl) Filter(ctx context.Context, req TraceFilterRequest, gas includeAll := len(fromAddresses) == 0 && len(toAddresses) == 0 for i, trace := range t { txPosition := uint64(i) - txHash := txs[i].Hash() // Check if transaction concerns any of the addresses we wanted for _, pt := range trace.Trace { - if includeAll || filter_trace(pt, fromAddresses, toAddresses, isIntersectionMode) { + if includeAll || filterTrace(pt, fromAddresses, toAddresses, isIntersectionMode) { nSeen++ pt.BlockHash = &blockHash pt.BlockNumber = &blockNumber - pt.TransactionHash = &txHash + pt.TransactionHash = trace.TransactionHash pt.TransactionPosition = &txPosition b, err := json.Marshal(pt) if err != nil { @@ -461,7 +470,9 @@ func (api *TraceAPIImpl) Filter(ctx context.Context, req TraceFilterRequest, gas } else { stream.WriteMore() } - stream.Write(b) + if _, err := stream.Write(b); err != nil { + return err + } nExported++ } } @@ -506,7 +517,9 @@ func (api *TraceAPIImpl) Filter(ctx context.Context, req TraceFilterRequest, gas } else { stream.WriteMore() } - stream.Write(b) + if _, err := stream.Write(b); err != nil { + return err + } nExported++ } } @@ -535,7 +548,7 @@ func (api *TraceAPIImpl) filterV3(ctx context.Context, dbtx kv.TemporalTx, fromB return err } - chainConfig, err := api.chainConfig(dbtx) + chainConfig, err := api.chainConfig(ctx, dbtx) if err != nil { return err } @@ -671,7 +684,9 @@ func (api *TraceAPIImpl) filterV3(ctx context.Context, dbtx kv.TemporalTx, fromB } else { stream.WriteMore() } - stream.Write(b) + if _, err := stream.Write(b); err != nil { + return err + } nExported++ } } @@ -709,7 +724,9 @@ func (api *TraceAPIImpl) filterV3(ctx context.Context, dbtx kv.TemporalTx, fromB } else { stream.WriteMore() } - stream.Write(b) + if _, err := stream.Write(b); err != nil { + return err + } nExported++ } } @@ -811,7 +828,7 @@ func (api *TraceAPIImpl) filterV3(ctx context.Context, dbtx kv.TemporalTx, fromB } isIntersectionMode := req.Mode == TraceFilterModeIntersection for _, pt := range traceResult.Trace { - if includeAll || filter_trace(pt, fromAddresses, toAddresses, isIntersectionMode) { + if includeAll || filterTrace(pt, fromAddresses, toAddresses, isIntersectionMode) { nSeen++ pt.BlockHash = &lastBlockHash pt.BlockNumber = &blockNum @@ -835,7 +852,9 @@ func (api *TraceAPIImpl) filterV3(ctx context.Context, dbtx kv.TemporalTx, fromB } else { stream.WriteMore() } - stream.Write(b) + if _, err := stream.Write(b); err != nil { + return err + } nExported++ } } @@ -845,7 +864,7 @@ func (api *TraceAPIImpl) filterV3(ctx context.Context, dbtx kv.TemporalTx, fromB return stream.Flush() } -func filter_trace(pt *ParityTrace, fromAddresses map[common.Address]struct{}, toAddresses map[common.Address]struct{}, isIntersectionMode bool) bool { +func filterTrace(pt *ParityTrace, fromAddresses map[common.Address]struct{}, toAddresses map[common.Address]struct{}, isIntersectionMode bool) bool { f, t := false, false switch action := pt.Action.(type) { case *CallTraceAction: @@ -886,19 +905,38 @@ func (api *TraceAPIImpl) callManyTransactions( if pNo > 0 { pNo -= 1 } + parentNo := rpc.BlockNumber(pNo) rules := cfg.Rules(blockNumber, block.Time()) header := block.Header() txs := block.Transactions() + var borStateSyncTxn types.Transaction + var borStateSyncTxnHash common.Hash + if cfg.Bor != nil { + // check if this block has state sync txn + blockHash := block.Hash() + borStateSyncTxnHash = bortypes.ComputeBorTxHash(blockNumber, blockHash) + _, ok, err := api._blockReader.EventLookup(ctx, dbtx, borStateSyncTxnHash) + if err != nil { + return nil, nil, err + } + if ok { + borStateSyncTxn = bortypes.NewBorTransaction() + txs = append(txs, borStateSyncTxn) + } + } + callParams := make([]TraceCallParam, 0, len(txs)) reader, err := rpchelper.CreateHistoryStateReader(dbtx, blockNumber, txIndex, api.historyV3(dbtx), cfg.ChainName) if err != nil { return nil, nil, err } + initialState := state.New(reader) if err != nil { return nil, nil, err } + engine := api.engine() consensusHeaderReader := stagedsync.NewChainReaderImpl(cfg, dbtx, nil, nil) logger := log.New("trace_filtering") @@ -906,28 +944,38 @@ func (api *TraceAPIImpl) callManyTransactions( if err != nil { return nil, nil, err } + msgs := make([]types.Message, len(txs)) for i, tx := range txs { - hash := tx.Hash() - callParams = append(callParams, TraceCallParam{ - txHash: &hash, - traceTypes: traceTypes, - }) + isBorStateSyncTxn := tx == borStateSyncTxn + var txnHash common.Hash + var msg types.Message var err error + if isBorStateSyncTxn { + txnHash = borStateSyncTxnHash + // we use an empty message for bor state sync txn since it gets handled differently + } else { + txnHash = tx.Hash() + msg, err = tx.AsMessage(*signer, header.BaseFee, rules) + if err != nil { + return nil, nil, fmt.Errorf("convert tx into msg: %w", err) + } - msg, err := tx.AsMessage(*signer, header.BaseFee, rules) - if err != nil { - return nil, nil, fmt.Errorf("convert tx into msg: %w", err) - } - - // gnosis might have a fee free account here - if msg.FeeCap().IsZero() && engine != nil { - syscall := func(contract common.Address, data []byte) ([]byte, error) { - return core.SysCallContract(contract, data, cfg, initialState, header, engine, true /* constCall */) + // gnosis might have a fee free account here + if msg.FeeCap().IsZero() && engine != nil { + syscall := func(contract common.Address, data []byte) ([]byte, error) { + return core.SysCallContract(contract, data, cfg, initialState, header, engine, true /* constCall */) + } + msg.SetIsFree(engine.IsServiceTransaction(msg.From(), syscall)) } - msg.SetIsFree(engine.IsServiceTransaction(msg.From(), syscall)) } + callParams = append(callParams, TraceCallParam{ + txHash: &txnHash, + traceTypes: traceTypes, + isBorStateSyncTxn: isBorStateSyncTxn, + }) + msgs[i] = msg } @@ -944,8 +992,7 @@ func (api *TraceAPIImpl) callManyTransactions( } syscall := func(contract common.Address, data []byte) ([]byte, error) { - constCall := false // this syscall is used for calculating rewards, which is not constant - return core.SysCallContract(contract, data, cfg, lastState, header, engine, constCall) + return core.SysCallContract(contract, data, cfg, lastState, header, engine, false /* constCall */) } return traces, syscall, nil @@ -965,8 +1012,9 @@ type TraceFilterRequest struct { type TraceFilterMode string const ( - // Default mode for TraceFilter. Unions results referred to addresses from FromAddress or ToAddress + // TraceFilterModeUnion is default mode for TraceFilter. + // Unions results referred to addresses from FromAddress or ToAddress TraceFilterModeUnion = "union" - // IntersectionMode retrives results referred to addresses provided both in FromAddress and ToAddress + // TraceFilterModeIntersection retrieves results referred to addresses provided both in FromAddress and ToAddress TraceFilterModeIntersection = "intersection" ) diff --git a/turbo/jsonrpc/trace_types.go b/turbo/jsonrpc/trace_types.go index 7c79fbeaada..06ce3358765 100644 --- a/turbo/jsonrpc/trace_types.go +++ b/turbo/jsonrpc/trace_types.go @@ -36,7 +36,7 @@ type GethTrace struct { // GethTraces an array of GethTraces type GethTraces []*GethTrace -// ParityTrace A trace in the desired format (Parity/OpenEtherum) See: https://openethereum.github.io/wiki/JSONRPC-trace-module +// ParityTrace A trace in the desired format (Parity/OpenEthereum) See: https://openethereum.github.io/wiki/JSONRPC-trace-module type ParityTrace struct { // Do not change the ordering of these fields -- allows for easier comparison with other clients Action interface{} `json:"action"` // Can be either CallTraceAction or CreateTraceAction diff --git a/turbo/jsonrpc/tracing.go b/turbo/jsonrpc/tracing.go index 860ce9d5e0a..0d1798f288e 100644 --- a/turbo/jsonrpc/tracing.go +++ b/turbo/jsonrpc/tracing.go @@ -5,28 +5,28 @@ import ( "encoding/json" "errors" "fmt" - "math/big" "time" "github.com/holiman/uint256" + jsoniter "github.com/json-iterator/go" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutil" "github.com/ledgerwatch/erigon-lib/opstack" "github.com/ledgerwatch/erigon/common/math" "github.com/ledgerwatch/erigon/core" - "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/core/vm/evmtypes" "github.com/ledgerwatch/erigon/eth/tracers" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" + polygontracer "github.com/ledgerwatch/erigon/polygon/tracer" "github.com/ledgerwatch/erigon/rpc" "github.com/ledgerwatch/erigon/turbo/adapter/ethapi" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/transactions" - "github.com/ledgerwatch/log/v3" - - jsoniter "github.com/json-iterator/go" ) // TraceBlockByNumber implements debug_traceBlockByNumber. Returns Geth style block traces. @@ -46,34 +46,23 @@ func (api *PrivateDebugAPIImpl) traceBlock(ctx context.Context, blockNrOrHash rp return err } defer tx.Rollback() - var ( - block *types.Block - number rpc.BlockNumber - numberOk bool - hash common.Hash - hashOk bool - ) - if number, numberOk = blockNrOrHash.Number(); numberOk { - block, err = api.blockByRPCNumber(number, tx) - } else if hash, hashOk = blockNrOrHash.Hash(); hashOk { - block, err = api.blockByHashWithSenders(tx, hash) - } else { - return fmt.Errorf("invalid arguments; neither block nor hash specified") - } + blockNumber, hash, _, err := rpchelper.GetCanonicalBlockNumber(blockNrOrHash, tx, api.filters) + if err != nil { + stream.WriteNil() + return err + } + block, err := api.blockWithSenders(ctx, tx, hash, blockNumber) if err != nil { stream.WriteNil() return err } - if block == nil { - if numberOk { - return fmt.Errorf("invalid arguments; block with number %d not found", number) - } + stream.WriteNil() return fmt.Errorf("invalid arguments; block with hash %x not found", hash) } - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { stream.WriteNil() return err @@ -110,7 +99,8 @@ func (api *PrivateDebugAPIImpl) traceBlock(ctx context.Context, blockNrOrHash rp } if config.BorTraceEnabled == nil { - config.BorTraceEnabled = newBoolPtr(false) + var disabled bool + config.BorTraceEnabled = &disabled } engine := api.engine() @@ -125,25 +115,44 @@ func (api *PrivateDebugAPIImpl) traceBlock(ctx context.Context, blockNrOrHash rp rules := chainConfig.Rules(block.NumberU64(), block.Time()) stream.WriteArrayStart() - borTx := rawdb.ReadBorTransactionForBlock(tx, block.NumberU64()) txns := block.Transactions() - if borTx != nil && *config.BorTraceEnabled { - txns = append(txns, borTx) + var borStateSyncTxn types.Transaction + if *config.BorTraceEnabled { + borStateSyncTxHash := bortypes.ComputeBorTxHash(block.NumberU64(), block.Hash()) + _, ok, err := api._blockReader.EventLookup(ctx, tx, borStateSyncTxHash) + if err != nil { + stream.WriteArrayEnd() + return err + } + if ok { + borStateSyncTxn = bortypes.NewBorTransaction() + txns = append(txns, borStateSyncTxn) + } } for idx, txn := range txns { + isBorStateSyncTxn := borStateSyncTxn == txn + var txnHash common.Hash + if isBorStateSyncTxn { + txnHash = bortypes.ComputeBorTxHash(block.NumberU64(), block.Hash()) + } else { + txnHash = txn.Hash() + } + stream.WriteObjectStart() stream.WriteObjectField("txHash") - stream.WriteString(txn.Hash().Hex()) + stream.WriteString(txnHash.Hex()) stream.WriteMore() stream.WriteObjectField("result") select { default: case <-ctx.Done(): stream.WriteNil() + stream.WriteObjectEnd() + stream.WriteArrayEnd() return ctx.Err() } - ibs.SetTxContext(txn.Hash(), block.Hash(), idx) + ibs.SetTxContext(txnHash, block.Hash(), idx) msg, _ := txn.AsMessage(*signer, block.BaseFee(), rules) if msg.FeeCap().IsZero() && engine != nil { @@ -154,40 +163,55 @@ func (api *PrivateDebugAPIImpl) traceBlock(ctx context.Context, blockNrOrHash rp } txCtx := evmtypes.TxContext{ - TxHash: txn.Hash(), - Origin: msg.From(), - GasPrice: msg.GasPrice(), + TxHash: txnHash, + Origin: msg.From(), + GasPrice: msg.GasPrice(), + BlobHashes: msg.BlobHashes(), } - if borTx != nil && idx == len(txns)-1 { - if *config.BorTraceEnabled { - config.BorTx = newBoolPtr(true) - } + if isBorStateSyncTxn { + err = polygontracer.TraceBorStateSyncTxnDebugAPI( + ctx, + tx, + chainConfig, + config, + ibs, + api._blockReader, + block.Hash(), + block.NumberU64(), + block.Time(), + blockCtx, + stream, + api.evmCallTimeout, + ) + } else { + err = transactions.TraceTx(ctx, msg, blockCtx, txCtx, ibs, config, chainConfig, stream, api.evmCallTimeout) } - - err = transactions.TraceTx(ctx, msg, blockCtx, txCtx, ibs, config, chainConfig, stream, api.evmCallTimeout) if err == nil { err = ibs.FinalizeTx(rules, state.NewNoopWriter()) } - stream.WriteObjectEnd() // if we have an error we want to output valid json for it before continuing after clearing down potential writes to the stream if err != nil { stream.WriteMore() - stream.WriteObjectStart() - err = rpc.HandleError(err, stream) - stream.WriteObjectEnd() - if err != nil { - return err - } + rpc.HandleError(err, stream) } + + stream.WriteObjectEnd() if idx != len(txns)-1 { stream.WriteMore() } - stream.Flush() + + if err := stream.Flush(); err != nil { + return err + } } + stream.WriteArrayEnd() - stream.Flush() + if err := stream.Flush(); err != nil { + return err + } + return nil } @@ -199,20 +223,40 @@ func (api *PrivateDebugAPIImpl) TraceTransaction(ctx context.Context, hash commo return err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { stream.WriteNil() return err } // Retrieve the transaction and assemble its EVM context - blockNum, ok, err := api.txnLookup(tx, hash) + var isBorStateSyncTxn bool + blockNum, ok, err := api.txnLookup(ctx, tx, hash) if err != nil { stream.WriteNil() return err } if !ok { - stream.WriteNil() - return nil + if chainConfig.Bor == nil { + stream.WriteNil() + return nil + } + + // otherwise this may be a bor state sync transaction - check + blockNum, ok, err = api._blockReader.EventLookup(ctx, tx, hash) + if err != nil { + stream.WriteNil() + return err + } + if !ok { + stream.WriteNil() + return nil + } + if config == nil || config.BorTraceEnabled == nil || *config.BorTraceEnabled == false { + stream.WriteEmptyArray() // matches maticnetwork/bor API behaviour for consistency + return nil + } + + isBorStateSyncTxn = true } if chainConfig.IsOptimismPreBedrock(blockNum) { @@ -238,20 +282,7 @@ func (api *PrivateDebugAPIImpl) TraceTransaction(ctx context.Context, hash commo return err } - // Private API returns 0 if transaction is not found. - if blockNum == 0 && chainConfig.Bor != nil { - blockNumPtr, err := rawdb.ReadBorTxLookupEntry(tx, hash) - if err != nil { - stream.WriteNil() - return err - } - if blockNumPtr == nil { - stream.WriteNil() - return nil - } - blockNum = *blockNumPtr - } - block, err := api.blockByNumberWithSenders(tx, blockNum) + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) if err != nil { stream.WriteNil() return err @@ -260,40 +291,53 @@ func (api *PrivateDebugAPIImpl) TraceTransaction(ctx context.Context, hash commo stream.WriteNil() return nil } - var txnIndex uint64 + var txnIndex int var txn types.Transaction - for i, transaction := range block.Transactions() { + for i := 0; i < block.Transactions().Len() && !isBorStateSyncTxn; i++ { + transaction := block.Transactions()[i] if transaction.Hash() == hash { - txnIndex = uint64(i) + txnIndex = i txn = transaction break } } if txn == nil { - var borTx types.Transaction - borTx, err = rawdb.ReadBorTransaction(tx, hash) - if err != nil { - return err - } - - if borTx != nil { + if isBorStateSyncTxn { + // bor state sync tx is appended at the end of the block + txnIndex = block.Transactions().Len() + } else { stream.WriteNil() - return nil + return fmt.Errorf("transaction %#x not found", hash) } - stream.WriteNil() - return fmt.Errorf("transaction %#x not found", hash) } engine := api.engine() - msg, blockCtx, txCtx, ibs, _, err := transactions.ComputeTxEnv(ctx, engine, block, chainConfig, api._blockReader, tx, int(txnIndex), api.historyV3(tx)) + msg, blockCtx, txCtx, ibs, _, err := transactions.ComputeTxEnv(ctx, engine, block, chainConfig, api._blockReader, tx, txnIndex, api.historyV3(tx)) if err != nil { stream.WriteNil() return err } + if isBorStateSyncTxn { + return polygontracer.TraceBorStateSyncTxnDebugAPI( + ctx, + tx, + chainConfig, + config, + ibs, + api._blockReader, + block.Hash(), + blockNum, + block.Time(), + blockCtx, + stream, + api.evmCallTimeout, + ) + } // Trace the transaction and return return transactions.TraceTx(ctx, msg, blockCtx, txCtx, ibs, config, chainConfig, stream, api.evmCallTimeout) } +// TraceCall implements debug_traceCall. Returns Geth style call traces. func (api *PrivateDebugAPIImpl) TraceCall(ctx context.Context, args ethapi.CallArgs, blockNrOrHash rpc.BlockNumberOrHash, config *tracers.TraceConfig, stream *jsoniter.Stream) error { dbtx, err := api.db.BeginRo(ctx) if err != nil { @@ -301,7 +345,7 @@ func (api *PrivateDebugAPIImpl) TraceCall(ctx context.Context, args ethapi.CallA } defer dbtx.Rollback() - chainConfig, err := api.chainConfig(dbtx) + chainConfig, err := api.chainConfig(ctx, dbtx) if err != nil { return fmt.Errorf("read chain config: %v", err) } @@ -322,7 +366,7 @@ func (api *PrivateDebugAPIImpl) TraceCall(ctx context.Context, args ethapi.CallA } var stateReader state.StateReader - if config.TxIndex == nil || isLatest { + if config == nil || config.TxIndex == nil || isLatest { stateReader, err = rpchelper.CreateStateReader(ctx, dbtx, blockNrOrHash, 0, api.filters, api.stateCache, api.historyV3(dbtx), chainConfig.ChainName) } else { stateReader, err = rpchelper.CreateHistoryStateReader(dbtx, blockNumber, int(*config.TxIndex), api.historyV3(dbtx), chainConfig.ChainName) @@ -330,7 +374,7 @@ func (api *PrivateDebugAPIImpl) TraceCall(ctx context.Context, args ethapi.CallA if err != nil { return fmt.Errorf("create state reader: %v", err) } - header, err := api._blockReader.Header(context.Background(), dbtx, hash, blockNumber) + header, err := api._blockReader.Header(ctx, dbtx, hash, blockNumber) if err != nil { return fmt.Errorf("could not fetch header %d(%x): %v", blockNumber, hash, err) } @@ -373,7 +417,6 @@ func (api *PrivateDebugAPIImpl) TraceCallMany(ctx context.Context, bundles []Bun blockCtx evmtypes.BlockContext txCtx evmtypes.TxContext overrideBlockHash map[uint64]common.Hash - baseFee uint256.Int ) if config == nil { @@ -387,7 +430,7 @@ func (api *PrivateDebugAPIImpl) TraceCallMany(ctx context.Context, bundles []Bun return err } defer tx.Rollback() - chainConfig, err := api.chainConfig(tx) + chainConfig, err := api.chainConfig(ctx, tx) if err != nil { stream.WriteNil() return err @@ -421,11 +464,15 @@ func (api *PrivateDebugAPIImpl) TraceCallMany(ctx context.Context, bundles []Bun return err } - block, err := api.blockByNumberWithSenders(tx, blockNum) + block, err := api.blockByNumberWithSenders(ctx, tx, blockNum) if err != nil { stream.WriteNil() return err } + if block == nil { + stream.WriteNil() + return fmt.Errorf("block %d not found", blockNum) + } // -1 is a default value for transaction index. // If it's -1, we will try to replay every single transaction in that block @@ -449,9 +496,9 @@ func (api *PrivateDebugAPIImpl) TraceCallMany(ctx context.Context, bundles []Bun st := state.New(stateReader) - parent := block.Header() + header := block.Header() - if parent == nil { + if header == nil { stream.WriteNil() return fmt.Errorf("block %d(%x) not found", blockNum, hash) } @@ -467,21 +514,7 @@ func (api *PrivateDebugAPIImpl) TraceCallMany(ctx context.Context, bundles []Bun return hash } - if parent.BaseFee != nil { - baseFee.SetFromBig(parent.BaseFee) - } - - blockCtx = evmtypes.BlockContext{ - CanTransfer: core.CanTransfer, - Transfer: core.Transfer, - GetHash: getHash, - Coinbase: parent.Coinbase, - BlockNumber: parent.Number.Uint64(), - Time: parent.Time, - Difficulty: new(big.Int).Set(parent.Difficulty), - GasLimit: parent.GasLimit, - BaseFee: &baseFee, - } + blockCtx = core.NewEVMBlockContext(header, getHash, api.engine(), nil /* author */) blockCtx.L1CostFunc = opstack.NewL1CostFunc(chainConfig, st) // Get a new instance of the EVM @@ -521,38 +554,39 @@ func (api *PrivateDebugAPIImpl) TraceCallMany(ctx context.Context, bundles []Bun } stream.WriteArrayStart() - for bundle_index, bundle := range bundles { + for bundleIndex, bundle := range bundles { stream.WriteArrayStart() // first change blockContext blockHeaderOverride(&blockCtx, bundle.BlockOverride, overrideBlockHash) - for txn_index, txn := range bundle.Transactions { + for txnIndex, txn := range bundle.Transactions { if txn.Gas == nil || *(txn.Gas) == 0 { txn.Gas = (*hexutil.Uint64)(&api.GasCap) } msg, err := txn.ToMessage(api.GasCap, blockCtx.BaseFee) if err != nil { - stream.WriteNil() + stream.WriteArrayEnd() + stream.WriteArrayEnd() return err } txCtx = core.NewEVMTxContext(msg) ibs := evm.IntraBlockState().(*state.IntraBlockState) - ibs.SetTxContext(common.Hash{}, parent.Hash(), txn_index) + ibs.SetTxContext(common.Hash{}, header.Hash(), txnIndex) err = transactions.TraceTx(ctx, msg, blockCtx, txCtx, evm.IntraBlockState(), config, chainConfig, stream, api.evmCallTimeout) - if err != nil { - stream.WriteNil() + stream.WriteArrayEnd() + stream.WriteArrayEnd() return err } _ = ibs.FinalizeTx(rules, state.NewNoopWriter()) - if txn_index < len(bundle.Transactions)-1 { + if txnIndex < len(bundle.Transactions)-1 { stream.WriteMore() } } stream.WriteArrayEnd() - if bundle_index < len(bundles)-1 { + if bundleIndex < len(bundles)-1 { stream.WriteMore() } blockCtx.BlockNumber++ @@ -561,8 +595,3 @@ func (api *PrivateDebugAPIImpl) TraceCallMany(ctx context.Context, bundles []Bun stream.WriteArrayEnd() return nil } - -func newBoolPtr(bb bool) *bool { - b := bb - return &b -} diff --git a/turbo/jsonrpc/txpool_api.go b/turbo/jsonrpc/txpool_api.go index 96ff0435cad..aaf91175f3f 100644 --- a/turbo/jsonrpc/txpool_api.go +++ b/turbo/jsonrpc/txpool_api.go @@ -82,7 +82,7 @@ func (api *TxPoolAPIImpl) Content(ctx context.Context) (map[string]map[string]ma return nil, err } defer tx.Rollback() - cc, err := api.chainConfig(tx) + cc, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } @@ -158,7 +158,7 @@ func (api *TxPoolAPIImpl) ContentFrom(ctx context.Context, addr libcommon.Addres return nil, err } defer tx.Rollback() - cc, err := api.chainConfig(tx) + cc, err := api.chainConfig(ctx, tx) if err != nil { return nil, err } diff --git a/turbo/jsonrpc/txpool_api_test.go b/turbo/jsonrpc/txpool_api_test.go index 09f7816932b..27199e4b4c8 100644 --- a/turbo/jsonrpc/txpool_api_test.go +++ b/turbo/jsonrpc/txpool_api_test.go @@ -3,9 +3,10 @@ package jsonrpc import ( "bytes" "fmt" - "github.com/ledgerwatch/erigon-lib/common/hexutil" "testing" + "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces/txpool" diff --git a/turbo/logging/flags.go b/turbo/logging/flags.go index e5bc2887ebc..f0a2ac43225 100644 --- a/turbo/logging/flags.go +++ b/turbo/logging/flags.go @@ -51,6 +51,11 @@ var ( Usage: "Set the log verbosity for logs stored to disk", Value: log.LvlInfo.String(), } + + LogBlockDelayFlag = cli.BoolFlag{ + Name: "log.delays", + Usage: "Enable block delay logging", + } ) var Flags = []cli.Flag{ @@ -63,4 +68,5 @@ var Flags = []cli.Flag{ &LogDirPathFlag, &LogDirPrefixFlag, &LogDirVerbosityFlag, + &LogBlockDelayFlag, } diff --git a/turbo/logging/logging.go b/turbo/logging/logging.go index f36b0999b4c..879332018a8 100644 --- a/turbo/logging/logging.go +++ b/turbo/logging/logging.go @@ -10,8 +10,25 @@ import ( "github.com/spf13/cobra" "github.com/urfave/cli/v2" "gopkg.in/natefinch/lumberjack.v2" + + "github.com/ledgerwatch/erigon-lib/common/metrics" ) +// Determine the log dir path based on the given urfave context +func LogDirPath(ctx *cli.Context) string { + dirPath := "" + if !ctx.Bool(LogDirDisableFlag.Name) { + dirPath = ctx.String(LogDirPathFlag.Name) + if dirPath == "" { + datadir := ctx.String("datadir") + if datadir != "" { + dirPath = filepath.Join(datadir, "logs") + } + } + } + return dirPath +} + // SetupLoggerCtx performs the logging setup according to the parameters // containted in the given urfave context. It returns either root logger, // if rootHandler argument is set to true, or a newly created logger. @@ -25,6 +42,8 @@ func SetupLoggerCtx(filePrefix string, ctx *cli.Context, var consoleJson = ctx.Bool(LogJsonFlag.Name) || ctx.Bool(LogConsoleJsonFlag.Name) var dirJson = ctx.Bool(LogDirJsonFlag.Name) + metrics.DelayLoggingEnabled = ctx.Bool(LogBlockDelayFlag.Name) + consoleLevel, lErr := tryGetLogLevel(ctx.String(LogConsoleVerbosityFlag.Name)) if lErr != nil { // try verbosity flag @@ -212,7 +231,6 @@ func initSeparatedLogging( mux := log.MultiHandler(consoleHandler, log.LvlFilterHandler(dirLevel, userLog)) logger.SetHandler(mux) logger.Info("logging to file system", "log dir", dirPath, "file prefix", filePrefix, "log level", dirLevel, "json", dirJson) - return } func tryGetLogLevel(s string) (log.Lvl, error) { diff --git a/turbo/node/node.go b/turbo/node/node.go index b20a21a314f..b0a71a7b204 100644 --- a/turbo/node/node.go +++ b/turbo/node/node.go @@ -125,7 +125,7 @@ func New( if err != nil { return nil, err } - err = ethereum.Init(node, ethConfig) + err = ethereum.Init(node, ethConfig, ethereum.ChainConfig()) if err != nil { return nil, err } diff --git a/turbo/rpchelper/filters.go b/turbo/rpchelper/filters.go index 48234a2eec4..052b8c9071b 100644 --- a/turbo/rpchelper/filters.go +++ b/turbo/rpchelper/filters.go @@ -528,7 +528,7 @@ func (ff *Filters) OnNewTx(reply *txpool.OnAddReply) { if len(rlpTx) == 0 { continue } - txs[i], decodeErr = types.DecodeWrappedTransaction(rlpTx) + txs[i], decodeErr = types.DecodeTransaction(rlpTx) if decodeErr != nil { // ignoring what we can't unmarshal ff.logger.Warn("OnNewTx rpc filters, unprocessable payload", "err", decodeErr, "data", hex.EncodeToString(rlpTx)) diff --git a/turbo/rpchelper/helper.go b/turbo/rpchelper/helper.go index 2a6ccc0544b..c611c1a1f50 100644 --- a/turbo/rpchelper/helper.go +++ b/turbo/rpchelper/helper.go @@ -6,13 +6,13 @@ import ( "fmt" libcommon "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/config3" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/kv/kvcache" "github.com/ledgerwatch/erigon-lib/kv/rawdbv3" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/state" "github.com/ledgerwatch/erigon/core/systemcontracts" - "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" borfinality "github.com/ledgerwatch/erigon/polygon/bor/finality" "github.com/ledgerwatch/erigon/polygon/bor/finality/whitelist" @@ -38,7 +38,7 @@ func GetCanonicalBlockNumber(blockNrOrHash rpc.BlockNumberOrHash, tx kv.Tx, filt func _GetBlockNumber(requireCanonical bool, blockNrOrHash rpc.BlockNumberOrHash, tx kv.Tx, filters *Filters) (blockNumber uint64, hash libcommon.Hash, latest bool, err error) { // Due to changed semantics of `lastest` block in RPC request, it is now distinct - // from the block block number corresponding to the plain state + // from the block number corresponding to the plain state var plainStateBlockNumber uint64 if plainStateBlockNumber, err = stages.GetStageProgress(tx, stages.Execution); err != nil { return 0, libcommon.Hash{}, false, fmt.Errorf("getting plain state block number: %w", err) @@ -146,14 +146,14 @@ func CreateHistoryStateReader(tx kv.Tx, blockNumber uint64, txnIndex int, histor } func NewLatestStateReader(tx kv.Getter) state.StateReader { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") //b.pendingReader = state.NewReaderV4(b.pendingReaderTx.(kv.TemporalTx)) } return state.NewPlainStateReader(tx) } func NewLatestStateWriter(tx kv.RwTx, blockNum uint64) state.StateWriter { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") } return state.NewPlainStateWriter(tx, tx, blockNum) diff --git a/turbo/services/interfaces.go b/turbo/services/interfaces.go index 0857520ac88..a154e9fbbfa 100644 --- a/turbo/services/interfaces.go +++ b/turbo/services/interfaces.go @@ -3,13 +3,15 @@ package services import ( "context" + "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/chain" "github.com/ledgerwatch/erigon-lib/common" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/rlp" - "github.com/ledgerwatch/log/v3" ) type All struct { @@ -21,6 +23,7 @@ type BlockReader interface { BlockByHash(ctx context.Context, db kv.Tx, hash common.Hash) (*types.Block, error) CurrentBlock(db kv.Tx) (*types.Block, error) BlockWithSenders(ctx context.Context, tx kv.Getter, hash common.Hash, blockNum uint64) (block *types.Block, senders []common.Address, err error) + IterateFrozenBodies(f func(blockNum, baseTxNum, txAmount uint64) error) error } type HeaderReader interface { @@ -29,17 +32,33 @@ type HeaderReader interface { HeaderByHash(ctx context.Context, tx kv.Getter, hash common.Hash) (*types.Header, error) ReadAncestor(db kv.Getter, hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) - //TODO: change it to `iter` + // HeadersRange - TODO: change it to `iter` HeadersRange(ctx context.Context, walker func(header *types.Header) error) error + Integrity(ctx context.Context) error } type BorEventReader interface { + LastEventId(ctx context.Context, tx kv.Tx) (uint64, bool, error) EventLookup(ctx context.Context, tx kv.Getter, txnHash common.Hash) (uint64, bool, error) EventsByBlock(ctx context.Context, tx kv.Tx, hash common.Hash, blockNum uint64) ([]rlp.RawValue, error) + BorStartEventID(ctx context.Context, tx kv.Tx, hash common.Hash, blockNum uint64) (uint64, error) + LastFrozenEventId() uint64 } type BorSpanReader interface { - Span(ctx context.Context, tx kv.Getter, spanNum uint64) ([]byte, error) + Span(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) + LastSpanId(ctx context.Context, tx kv.Tx) (uint64, bool, error) + LastFrozenSpanId() uint64 +} + +type BorMilestoneReader interface { + LastMilestoneId(ctx context.Context, tx kv.Tx) (uint64, bool, error) + Milestone(ctx context.Context, tx kv.Getter, milestoneId uint64) ([]byte, error) +} + +type BorCheckpointReader interface { + LastCheckpointId(ctx context.Context, tx kv.Tx) (uint64, bool, error) + Checkpoint(ctx context.Context, tx kv.Getter, checkpointId uint64) ([]byte, error) } type CanonicalReader interface { @@ -58,7 +77,9 @@ type TxnReader interface { TxnLookup(ctx context.Context, tx kv.Getter, txnHash common.Hash) (uint64, bool, error) TxnByIdxInBlock(ctx context.Context, tx kv.Getter, blockNum uint64, i int) (txn types.Transaction, err error) RawTransactions(ctx context.Context, tx kv.Getter, fromBlock, toBlock uint64) (txs [][]byte, err error) + FirstTxnNumNotInSnapshots() uint64 } + type HeaderAndCanonicalReader interface { HeaderReader CanonicalReader @@ -66,7 +87,6 @@ type HeaderAndCanonicalReader interface { type BlockAndTxnReader interface { BlockReader - //HeaderReader TxnReader } @@ -76,6 +96,8 @@ type FullBlockReader interface { HeaderReader BorEventReader BorSpanReader + BorMilestoneReader + BorCheckpointReader TxnReader CanonicalReader @@ -87,6 +109,8 @@ type FullBlockReader interface { Snapshots() BlockSnapshots BorSnapshots() BlockSnapshots + + AllTypes() []snaptype.Type } type BlockSnapshots interface { @@ -94,6 +118,8 @@ type BlockSnapshots interface { ReopenFolder() error SegmentsMax() uint64 SegmentsMin() uint64 + Types() []snaptype.Type + Close() } // BlockRetire - freezing blocks: moving old data from DB to snapshot files @@ -105,22 +131,6 @@ type BlockRetire interface { SetWorkers(workers int) } -/* -type HeaderWriter interface { - WriteHeader(tx kv.RwTx, header *types.Header) error - WriteHeaderRaw(tx kv.StatelessRwTx, number uint64, hash libcommon.Hash, headerRlp []byte, skipIndexing bool) error - WriteCanonicalHash(tx kv.RwTx, hash libcommon.Hash, number uint64) error - WriteTd(db kv.Putter, hash libcommon.Hash, number uint64, td *big.Int) error - // [from,to) - FillHeaderNumberIndex(logPrefix string, tx kv.RwTx, tmpDir string, from, to uint64, ctx context.Context, logger log.Logger) error -} -type BlockWriter interface { - HeaderWriter - WriteRawBodyIfNotExists(tx kv.RwTx, hash libcommon.Hash, number uint64, body *types.RawBody) (ok bool, lastTxnNum uint64, err error) - WriteBody(tx kv.RwTx, hash libcommon.Hash, number uint64, body *types.Body) error -} -*/ - type DBEventNotifier interface { OnNewSnapshot() } diff --git a/turbo/silkworm/silkworm.go b/turbo/silkworm/silkworm.go index 8f8ea427317..439044fc624 100644 --- a/turbo/silkworm/silkworm.go +++ b/turbo/silkworm/silkworm.go @@ -3,20 +3,24 @@ package silkworm import ( "errors" "math/big" + "unsafe" - "github.com/erigontech/silkworm-go" + silkworm_go "github.com/erigontech/silkworm-go" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon/consensus" + "github.com/ledgerwatch/log/v3" ) type Silkworm = silkworm_go.Silkworm +type SilkwormLogLevel = silkworm_go.SilkwormLogLevel type SentrySettings = silkworm_go.SentrySettings +type RpcDaemonSettings = silkworm_go.RpcDaemonSettings +type RpcInterfaceLogSettings = silkworm_go.RpcInterfaceLogSettings type MappedHeaderSnapshot = silkworm_go.MappedHeaderSnapshot type MappedBodySnapshot = silkworm_go.MappedBodySnapshot type MappedTxnSnapshot = silkworm_go.MappedTxnSnapshot type MappedChainSnapshot = silkworm_go.MappedChainSnapshot -var New = silkworm_go.New var NewMemoryMappedRegion = silkworm_go.NewMemoryMappedRegion var NewMappedHeaderSnapshot = silkworm_go.NewMappedHeaderSnapshot var NewMappedBodySnapshot = silkworm_go.NewMappedBodySnapshot @@ -24,20 +28,41 @@ var NewMappedTxnSnapshot = silkworm_go.NewMappedTxnSnapshot var ErrInterrupted = silkworm_go.ErrInterrupted +func New(dataDirPath string, libMdbxVersion string, numIOContexts uint32, logLevel log.Lvl) (*Silkworm, error) { + var logVerbosity SilkwormLogLevel + switch logLevel { + case log.LvlCrit: + logVerbosity = silkworm_go.LogLevelCritical + case log.LvlError: + logVerbosity = silkworm_go.LogLevelError + case log.LvlWarn: + logVerbosity = silkworm_go.LogLevelWarning + case log.LvlInfo: + logVerbosity = silkworm_go.LogLevelInfo + case log.LvlDebug: + logVerbosity = silkworm_go.LogLevelDebug + case log.LvlTrace: + logVerbosity = silkworm_go.LogLevelTrace + } + return silkworm_go.New(dataDirPath, libMdbxVersion, numIOContexts, logVerbosity) +} + type RpcDaemonService struct { silkworm *Silkworm db kv.RoDB + settings RpcDaemonSettings } -func NewRpcDaemonService(s *Silkworm, db kv.RoDB) RpcDaemonService { +func NewRpcDaemonService(s *Silkworm, db kv.RoDB, settings RpcDaemonSettings) RpcDaemonService { return RpcDaemonService{ silkworm: s, db: db, + settings: settings, } } func (service RpcDaemonService) Start() error { - return service.silkworm.StartRpcDaemon(service.db.CHandle()) + return service.silkworm.StartRpcDaemon(service.db.CHandle(), service.settings) } func (service RpcDaemonService) Stop() error { @@ -45,11 +70,11 @@ func (service RpcDaemonService) Stop() error { } type SentryService struct { - silkworm *silkworm_go.Silkworm - settings silkworm_go.SentrySettings + silkworm *Silkworm + settings SentrySettings } -func NewSentryService(s *Silkworm, settings silkworm_go.SentrySettings) SentryService { +func NewSentryService(s *Silkworm, settings SentrySettings) SentryService { return SentryService{ silkworm: s, settings: settings, @@ -64,8 +89,20 @@ func (service SentryService) Stop() error { return service.silkworm.SentryStop() } -func ExecuteBlocks(s *Silkworm, txn kv.Tx, chainID *big.Int, startBlock uint64, maxBlock uint64, batchSize uint64, writeChangeSets, writeReceipts, writeCallTraces bool) (uint64, error) { - lastExecutedBlock, err := s.ExecuteBlocks(txn.CHandle(), chainID, startBlock, maxBlock, batchSize, writeChangeSets, writeReceipts, writeCallTraces) +func ExecuteBlocksEphemeral(s *Silkworm, txn kv.Tx, chainID *big.Int, startBlock uint64, maxBlock uint64, batchSize uint64, writeChangeSets, writeReceipts, writeCallTraces bool) (uint64, error) { + var txnHandle unsafe.Pointer + if txn != nil { + txnHandle = txn.CHandle() + } + lastExecutedBlock, err := s.ExecuteBlocksEphemeral(txnHandle, chainID, startBlock, maxBlock, batchSize, writeChangeSets, writeReceipts, writeCallTraces) + if (err != nil) && errors.Is(err, silkworm_go.ErrInvalidBlock) { + return lastExecutedBlock, consensus.ErrInvalidBlock + } + return lastExecutedBlock, err +} + +func ExecuteBlocksPerpetual(s *Silkworm, db kv.RwDB, chainID *big.Int, startBlock uint64, maxBlock uint64, batchSize uint64, writeChangeSets, writeReceipts, writeCallTraces bool) (uint64, error) { + lastExecutedBlock, err := s.ExecuteBlocksPerpetual(db.CHandle(), chainID, startBlock, maxBlock, batchSize, writeChangeSets, writeReceipts, writeCallTraces) if (err != nil) && errors.Is(err, silkworm_go.ErrInvalidBlock) { return lastExecutedBlock, consensus.ErrInvalidBlock } diff --git a/turbo/silkworm/silkworm_compat_check.sh b/turbo/silkworm/silkworm_compat_check.sh index da5a14523b9..0a508a97dc3 100755 --- a/turbo/silkworm/silkworm_compat_check.sh +++ b/turbo/silkworm/silkworm_compat_check.sh @@ -40,6 +40,10 @@ case $(uname -s) in exit 2 fi + # The os-release file does not require any variables to be set + # so we define these two to avoid 'unbound variable' errors. + ID="" + VERSION_ID="" source "$OS_RELEASE_PATH" if [[ -n "$ID" ]] && [[ -n "$VERSION_ID" ]] diff --git a/turbo/silkworm/silkworm_go_devenv.sh b/turbo/silkworm/silkworm_go_devenv.sh index 79ebb808a6a..2388db18de8 100755 --- a/turbo/silkworm/silkworm_go_devenv.sh +++ b/turbo/silkworm/silkworm_go_devenv.sh @@ -7,43 +7,52 @@ TARGET="silkworm_capi" script_dir=$(dirname "${BASH_SOURCE[0]}") project_dir=$(realpath "$script_dir/../..") -src_dir="$1" -build_dir="$2" +silkworm_dir="$1" +silkworm_build_dir="$2" +silkworm_go_dir="$3" -if [[ ! -d "$src_dir" ]] +if [[ ! -d "$silkworm_dir" ]] then - echo "source directory '$src_dir' not found" + echo "silkworm source directory '$silkworm_dir' not found" exit 1 fi -if [[ -z "$build_dir" ]] +if [[ -z "$silkworm_build_dir" ]] then - build_dir="$src_dir/build" + silkworm_build_dir="$silkworm_dir/build" fi -if [[ ! -d "$build_dir" ]] +if [[ ! -d "$silkworm_build_dir" ]] then - echo "build directory '$build_dir' not found" + echo "silkworm build directory '$silkworm_build_dir' not found" exit 1 fi -replace_dir=$(mktemp -d -t silkworm-go 2> /dev/null || mktemp -d -t silkworm-go.XXXXXXXX) +if [[ -z "$silkworm_go_dir" ]] +then + silkworm_go_dir=$(mktemp -d -t silkworm-go 2> /dev/null || mktemp -d -t silkworm-go.XXXXXXXX) + git clone --depth 1 "https://github.com/erigontech/silkworm-go" "$silkworm_go_dir" +fi -git clone --depth 1 "https://github.com/erigontech/silkworm-go" "$replace_dir" +if [[ ! -d "$silkworm_go_dir" ]] +then + echo "silkworm-go directory '$silkworm_go_dir' not found" + exit 1 +fi -ln -s "$src_dir/silkworm/capi/silkworm.h" "$replace_dir/include/" +ln -sf "$silkworm_dir/silkworm/capi/silkworm.h" "$silkworm_go_dir/include/" -product_dir="$build_dir/silkworm/capi" -product_path=$(echo "$product_dir/"*$TARGET*) +product_dir="$silkworm_build_dir/silkworm/capi" +product_path=$(echo "$product_dir/"*$TARGET.*) product_file_name=$(basename "$product_path") for platform in macos_arm64 macos_x64 linux_arm64 linux_x64 do - mkdir "$replace_dir/lib/$platform" - ln -s "$product_path" "$replace_dir/lib/$platform/$product_file_name" + mkdir -p "$silkworm_go_dir/lib/$platform" + ln -sf "$product_path" "$silkworm_go_dir/lib/$platform/$product_file_name" done cd "$project_dir/.." rm -f "go.work" go work init "$project_dir" -go work use "$replace_dir" +go work use "$silkworm_go_dir" diff --git a/turbo/snapshotsync/freezeblocks/beacon_block_reader.go b/turbo/snapshotsync/freezeblocks/beacon_block_reader.go index a17578c2f48..a81e1a0bfb7 100644 --- a/turbo/snapshotsync/freezeblocks/beacon_block_reader.go +++ b/turbo/snapshotsync/freezeblocks/beacon_block_reader.go @@ -9,9 +9,9 @@ import ( "github.com/klauspost/compress/zstd" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence" "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" "github.com/ledgerwatch/erigon/cl/persistence/format/snapshot_format" ) @@ -36,6 +36,7 @@ type BeaconSnapshotReader interface { ReadBlockBySlot(ctx context.Context, tx kv.Tx, slot uint64) (*cltypes.SignedBeaconBlock, error) ReadBlockByRoot(ctx context.Context, tx kv.Tx, blockRoot libcommon.Hash) (*cltypes.SignedBeaconBlock, error) ReadHeaderByRoot(ctx context.Context, tx kv.Tx, blockRoot libcommon.Hash) (*cltypes.SignedBeaconBlockHeader, error) + ReadBlindedBlockBySlot(ctx context.Context, tx kv.Tx, slot uint64) (*cltypes.SignedBlindedBeaconBlock, error) FrozenSlots() uint64 } @@ -44,12 +45,11 @@ type beaconSnapshotReader struct { sn *CaplinSnapshots eth1Getter snapshot_format.ExecutionBlockReaderByNumber - beaconDB persistence.BlockSource cfg *clparams.BeaconChainConfig } -func NewBeaconSnapshotReader(snapshots *CaplinSnapshots, eth1Getter snapshot_format.ExecutionBlockReaderByNumber, beaconDB persistence.BlockSource, cfg *clparams.BeaconChainConfig) BeaconSnapshotReader { - return &beaconSnapshotReader{sn: snapshots, eth1Getter: eth1Getter, cfg: cfg, beaconDB: beaconDB} +func NewBeaconSnapshotReader(snapshots *CaplinSnapshots, eth1Getter snapshot_format.ExecutionBlockReaderByNumber, cfg *clparams.BeaconChainConfig) BeaconSnapshotReader { + return &beaconSnapshotReader{sn: snapshots, eth1Getter: eth1Getter, cfg: cfg} } func (r *beaconSnapshotReader) FrozenSlots() uint64 { @@ -57,45 +57,114 @@ func (r *beaconSnapshotReader) FrozenSlots() uint64 { } func (r *beaconSnapshotReader) ReadBlockBySlot(ctx context.Context, tx kv.Tx, slot uint64) (*cltypes.SignedBeaconBlock, error) { + if r.eth1Getter == nil { + return nil, nil + } view := r.sn.View() defer view.Close() var buf []byte if slot > r.sn.BlocksAvailable() { - data, err := r.beaconDB.GetBlock(ctx, tx, slot) - if data == nil { + blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, slot) + if err != nil { + return nil, err + } + if blockRoot == (libcommon.Hash{}) { + return nil, nil + } + buf, err = tx.GetOne(kv.BeaconBlocks, dbutils.BlockBodyKey(slot, blockRoot)) + if err != nil { return nil, err } - return data.Data, err + } else { + seg, ok := view.BeaconBlocksSegment(slot) + if !ok { + return nil, nil + } + + idxSlot := seg.Index() + + if idxSlot == nil { + return nil, nil + } + if slot < idxSlot.BaseDataID() { + return nil, fmt.Errorf("slot %d is before the base data id %d", slot, idxSlot.BaseDataID()) + } + blockOffset := idxSlot.OrdinalLookup(slot - idxSlot.BaseDataID()) + + gg := seg.MakeGetter() + gg.Reset(blockOffset) + if !gg.HasNext() { + return nil, nil + } + + buf = buf[:0] + buf, _ = gg.Next(buf) } - if r.eth1Getter == nil { + if len(buf) == 0 { return nil, nil } - seg, ok := view.BeaconBlocksSegment(slot) - if !ok { - return nil, nil - } + // Decompress this thing + buffer := buffersPool.Get().(*bytes.Buffer) + defer buffersPool.Put(buffer) - if seg.idxSlot == nil { - return nil, nil - } - if slot < seg.idxSlot.BaseDataID() { - return nil, fmt.Errorf("slot %d is before the base data id %d", slot, seg.idxSlot.BaseDataID()) - } - blockOffset := seg.idxSlot.OrdinalLookup(slot - seg.idxSlot.BaseDataID()) + buffer.Reset() + buffer.Write(buf) + reader := decompressorPool.Get().(*zstd.Decoder) + defer decompressorPool.Put(reader) + reader.Reset(buffer) - gg := seg.seg.MakeGetter() - gg.Reset(blockOffset) - if !gg.HasNext() { - return nil, nil - } + // Use pooled buffers and readers to avoid allocations. + return snapshot_format.ReadBlockFromSnapshot(reader, r.eth1Getter, r.cfg) +} + +func (r *beaconSnapshotReader) ReadBlindedBlockBySlot(ctx context.Context, tx kv.Tx, slot uint64) (*cltypes.SignedBlindedBeaconBlock, error) { + view := r.sn.View() + defer view.Close() + + var buf []byte + if slot > r.sn.BlocksAvailable() { + blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, slot) + if err != nil { + return nil, err + } + if blockRoot == (libcommon.Hash{}) { + return nil, nil + } + buf, err = tx.GetOne(kv.BeaconBlocks, dbutils.BlockBodyKey(slot, blockRoot)) + if err != nil { + return nil, err + } + } else { + seg, ok := view.BeaconBlocksSegment(slot) + if !ok { + return nil, nil + } + + idxSlot := seg.Index() + + if idxSlot == nil { + return nil, nil + } + if slot < idxSlot.BaseDataID() { + return nil, fmt.Errorf("slot %d is before the base data id %d", slot, idxSlot.BaseDataID()) + } + blockOffset := idxSlot.OrdinalLookup(slot - idxSlot.BaseDataID()) - buf = buf[:0] - buf, _ = gg.Next(buf) + gg := seg.MakeGetter() + gg.Reset(blockOffset) + if !gg.HasNext() { + return nil, nil + } + + buf = buf[:0] + buf, _ = gg.Next(buf) + } if len(buf) == 0 { return nil, nil } + // Decompress this thing buffer := buffersPool.Get().(*bytes.Buffer) defer buffersPool.Put(buffer) @@ -107,10 +176,13 @@ func (r *beaconSnapshotReader) ReadBlockBySlot(ctx context.Context, tx kv.Tx, sl reader.Reset(buffer) // Use pooled buffers and readers to avoid allocations. - return snapshot_format.ReadBlockFromSnapshot(reader, r.eth1Getter, r.cfg) + return snapshot_format.ReadBlindedBlockFromSnapshot(reader, r.cfg) } func (r *beaconSnapshotReader) ReadBlockByRoot(ctx context.Context, tx kv.Tx, root libcommon.Hash) (*cltypes.SignedBeaconBlock, error) { + if r.eth1Getter == nil { + return nil, nil + } view := r.sn.View() defer view.Close() @@ -124,46 +196,53 @@ func (r *beaconSnapshotReader) ReadBlockByRoot(ctx context.Context, tx kv.Tx, ro var buf []byte if *slot > r.sn.BlocksAvailable() { - data, err := r.beaconDB.GetBlock(ctx, tx, *slot) - if data == nil { + slot, err := beacon_indicies.ReadBlockSlotByBlockRoot(tx, root) + if err != nil { return nil, err } - return data.Data, err - } - if r.eth1Getter == nil { - return nil, nil - } - // Find canonical block - canonicalBlockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, *slot) - if err != nil { - return nil, err - } - // root non-canonical? BAD - if canonicalBlockRoot != root { - return nil, nil - } + if slot == nil { + return nil, nil + } + buf, err = tx.GetOne(kv.BeaconBlocks, dbutils.BlockBodyKey(*slot, root)) + if err != nil { + return nil, err + } + } else { + // Find canonical block + canonicalBlockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, *slot) + if err != nil { + return nil, err + } + // root non-canonical? BAD + if canonicalBlockRoot != root { + return nil, nil + } - seg, ok := view.BeaconBlocksSegment(*slot) - if !ok { - return nil, nil - } + seg, ok := view.BeaconBlocksSegment(*slot) + if !ok { + return nil, nil + } - if seg.idxSlot == nil { - return nil, nil - } - if *slot < seg.idxSlot.BaseDataID() { - return nil, fmt.Errorf("slot %d is before the base data id %d", slot, seg.idxSlot.BaseDataID()) - } - blockOffset := seg.idxSlot.OrdinalLookup(*slot - seg.idxSlot.BaseDataID()) + idxSlot := seg.Index() - gg := seg.seg.MakeGetter() - gg.Reset(blockOffset) - if !gg.HasNext() { - return nil, nil + if idxSlot == nil { + return nil, nil + } + if *slot < idxSlot.BaseDataID() { + return nil, fmt.Errorf("slot %d is before the base data id %d", slot, idxSlot.BaseDataID()) + } + blockOffset := idxSlot.OrdinalLookup(*slot - idxSlot.BaseDataID()) + + gg := seg.MakeGetter() + gg.Reset(blockOffset) + if !gg.HasNext() { + return nil, nil + } + + buf = buf[:0] + buf, _ = gg.Next(buf) } - buf = buf[:0] - buf, _ = gg.Next(buf) if len(buf) == 0 { return nil, nil } diff --git a/turbo/snapshotsync/freezeblocks/block_reader.go b/turbo/snapshotsync/freezeblocks/block_reader.go index fc6834937fa..bc1b33033c6 100644 --- a/turbo/snapshotsync/freezeblocks/block_reader.go +++ b/turbo/snapshotsync/freezeblocks/block_reader.go @@ -4,27 +4,37 @@ import ( "bytes" "context" "encoding/binary" + "errors" "fmt" "math" "sort" + "time" "github.com/ledgerwatch/log/v3" + "github.com/ledgerwatch/erigon-lib/common/hexutility" + "github.com/ledgerwatch/erigon/polygon/bor" + "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/gointerfaces" "github.com/ledgerwatch/erigon-lib/gointerfaces/remote" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/recsplit" "github.com/ledgerwatch/erigon/core/rawdb" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/eth/ethconfig" - "github.com/ledgerwatch/erigon/polygon/bor" + bortypes "github.com/ledgerwatch/erigon/polygon/bor/types" + "github.com/ledgerwatch/erigon/polygon/heimdall" "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/turbo/services" ) +var ErrSpanNotFound = errors.New("span not found") + type RemoteBlockReader struct { client remote.ETHBACKENDClient } @@ -44,6 +54,11 @@ func (r *RemoteBlockReader) CurrentBlock(db kv.Tx) (*types.Block, error) { func (r *RemoteBlockReader) RawTransactions(ctx context.Context, tx kv.Getter, fromBlock, toBlock uint64) (txs [][]byte, err error) { panic("not implemented") } + +func (r *RemoteBlockReader) FirstTxnNumNotInSnapshots() uint64 { + panic("not implemented") +} + func (r *RemoteBlockReader) ReadAncestor(db kv.Getter, hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { panic("not implemented") } @@ -51,6 +66,10 @@ func (r *RemoteBlockReader) HeadersRange(ctx context.Context, walker func(header panic("not implemented") } +func (r *RemoteBlockReader) Integrity(_ context.Context) error { + panic("not implemented") +} + func (r *RemoteBlockReader) BadHeaderNumber(ctx context.Context, tx kv.Getter, hash common.Hash) (blockHeight *uint64, err error) { return rawdb.ReadBadHeaderNumber(tx, hash) } @@ -85,9 +104,9 @@ func (r *RemoteBlockReader) HeaderByNumber(ctx context.Context, tx kv.Getter, bl } return block.Header(), nil } - func (r *RemoteBlockReader) Snapshots() services.BlockSnapshots { panic("not implemented") } func (r *RemoteBlockReader) BorSnapshots() services.BlockSnapshots { panic("not implemented") } +func (r *RemoteBlockReader) AllTypes() []snaptype.Type { panic("not implemented") } func (r *RemoteBlockReader) FrozenBlocks() uint64 { panic("not supported") } func (r *RemoteBlockReader) FrozenBorBlocks() uint64 { panic("not supported") } func (r *RemoteBlockReader) FrozenFiles() (list []string) { panic("not supported") } @@ -109,6 +128,8 @@ func (r *RemoteBlockReader) CanonicalHash(ctx context.Context, tx kv.Getter, blo return rawdb.ReadCanonicalHash(tx, blockHeight) } +var _ services.FullBlockReader = &RemoteBlockReader{} + func NewRemoteBlockReader(client remote.ETHBACKENDClient) *RemoteBlockReader { return &RemoteBlockReader{client} } @@ -170,6 +191,10 @@ func (r *RemoteBlockReader) BlockWithSenders(ctx context.Context, _ kv.Getter, h return block, senders, nil } +func (r *RemoteBlockReader) IterateFrozenBodies(_ func(blockNum uint64, baseTxNum uint64, txAmount uint64) error) error { + panic("not implemented") +} + func (r *RemoteBlockReader) Header(ctx context.Context, tx kv.Getter, hash common.Hash, blockHeight uint64) (*types.Header, error) { block, _, err := r.BlockWithSenders(ctx, tx, hash, blockHeight) if err != nil { @@ -213,6 +238,10 @@ func (r *RemoteBlockReader) BodyRlp(ctx context.Context, tx kv.Getter, hash comm return bodyRlp, nil } +func (r *RemoteBlockReader) LastEventId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + return 0, false, fmt.Errorf("not implemented") +} + func (r *RemoteBlockReader) EventLookup(ctx context.Context, tx kv.Getter, txnHash common.Hash) (uint64, bool, error) { reply, err := r.client.BorEvent(ctx, &remote.BorEventRequest{BorTxHash: gointerfaces.ConvertHashToH256(txnHash)}) if err != nil { @@ -225,7 +254,7 @@ func (r *RemoteBlockReader) EventLookup(ctx context.Context, tx kv.Getter, txnHa } func (r *RemoteBlockReader) EventsByBlock(ctx context.Context, tx kv.Tx, hash common.Hash, blockHeight uint64) ([]rlp.RawValue, error) { - borTxnHash := types.ComputeBorTxHash(blockHeight, hash) + borTxnHash := bortypes.ComputeBorTxHash(blockHeight, hash) reply, err := r.client.BorEvent(ctx, &remote.BorEventRequest{BorTxHash: gointerfaces.ConvertHashToH256(borTxnHash)}) if err != nil { return nil, err @@ -236,8 +265,39 @@ func (r *RemoteBlockReader) EventsByBlock(ctx context.Context, tx kv.Tx, hash co } return result, nil } +func (r *RemoteBlockReader) BorStartEventID(ctx context.Context, tx kv.Tx, hash common.Hash, blockHeight uint64) (uint64, error) { + panic("not implemented") +} + +func (r *RemoteBlockReader) LastFrozenEventId() uint64 { + panic("not implemented") +} + +func (r *RemoteBlockReader) Span(_ context.Context, _ kv.Getter, _ uint64) ([]byte, error) { + panic("not implemented") +} + +func (r *RemoteBlockReader) LastSpanId(_ context.Context, _ kv.Tx) (uint64, bool, error) { + panic("not implemented") +} + +func (r *RemoteBlockReader) LastFrozenSpanId() uint64 { + panic("not implemented") +} + +func (r *RemoteBlockReader) LastMilestoneId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + return 0, false, fmt.Errorf("not implemented") +} -func (r *RemoteBlockReader) Span(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) { +func (r *RemoteBlockReader) Milestone(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) { + return nil, nil +} + +func (r *RemoteBlockReader) LastCheckpointId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + return 0, false, fmt.Errorf("not implemented") +} + +func (r *RemoteBlockReader) Checkpoint(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) { return nil, nil } @@ -265,6 +325,15 @@ func (r *BlockReader) BorSnapshots() services.BlockSnapshots { return nil } +func (r *BlockReader) AllTypes() []snaptype.Type { + var types []snaptype.Type + types = append(types, r.sn.Types()...) + if r.borSn != nil { + types = append(types, r.borSn.Types()...) + } + return types +} + func (r *BlockReader) FrozenBlocks() uint64 { return r.sn.BlocksAvailable() } func (r *BlockReader) FrozenBorBlocks() uint64 { if r.borSn != nil { @@ -287,6 +356,22 @@ func (r *BlockReader) HeadersRange(ctx context.Context, walker func(header *type } func (r *BlockReader) HeaderByNumber(ctx context.Context, tx kv.Getter, blockHeight uint64) (h *types.Header, err error) { + //TODO: investigate why code blolow causing getting error `Could not set forkchoice app=caplin stage=ForkChoice err="execution Client RPC failed to retrieve ForkChoiceUpdate response, err: unknown ancestor"` + //maxBlockNumInFiles := r.sn.BlocksAvailable() + //if maxBlockNumInFiles == 0 || blockHeight > maxBlockNumInFiles { + // if tx == nil { + // return nil, nil + // } + // blockHash, err := rawdb.ReadCanonicalHash(tx, blockHeight) + // if err != nil { + // return nil, err + // } + // if blockHash == (common.Hash{}) { + // return nil, nil + // } + // h = rawdb.ReadHeader(tx, blockHash, blockHeight) + // return h, nil + //} if tx != nil { blockHash, err := rawdb.ReadCanonicalHash(tx, blockHeight) if err != nil { @@ -331,7 +416,7 @@ func (r *BlockReader) HeaderByHash(ctx context.Context, tx kv.Getter, hash commo buf := make([]byte, 128) for i := len(segments) - 1; i >= 0; i-- { - if segments[i].idxHeaderHash == nil { + if segments[i].Index() == nil { continue } @@ -376,6 +461,15 @@ func (r *BlockReader) CanonicalHash(ctx context.Context, tx kv.Getter, blockHeig } func (r *BlockReader) Header(ctx context.Context, tx kv.Getter, hash common.Hash, blockHeight uint64) (h *types.Header, err error) { + //TODO: investigate why code blolow causing getting error `Could not set forkchoice app=caplin stage=ForkChoice err="execution Client RPC failed to retrieve ForkChoiceUpdate response, err: unknown ancestor"` + //maxBlockNumInFiles := r.sn.BlocksAvailable() + //if maxBlockNumInFiles == 0 || blockHeight > maxBlockNumInFiles { + // if tx == nil { + // return nil, nil + // } + // h = rawdb.ReadHeader(tx, hash, blockHeight) + // return h, nil + //} if tx != nil { h = rawdb.ReadHeader(tx, hash, blockHeight) if h != nil { @@ -397,7 +491,20 @@ func (r *BlockReader) Header(ctx context.Context, tx kv.Getter, hash common.Hash } func (r *BlockReader) BodyWithTransactions(ctx context.Context, tx kv.Getter, hash common.Hash, blockHeight uint64) (body *types.Body, err error) { - if tx != nil { + var dbgPrefix string + dbgLogs := dbg.Enabled(ctx) + if dbgLogs { + dbgPrefix = fmt.Sprintf("[dbg] BlockReader(idxMax=%d,segMax=%d).BodyWithTransactions(hash=%x,blk=%d) -> ", r.sn.idxMax.Load(), r.sn.segmentsMax.Load(), hash, blockHeight) + } + + maxBlockNumInFiles := r.sn.BlocksAvailable() + if maxBlockNumInFiles == 0 || blockHeight > maxBlockNumInFiles { + if tx == nil { + if dbgLogs { + log.Info(dbgPrefix + "RoTx is nil") + } + return nil, nil + } body, err = rawdb.ReadBodyWithTransactions(tx, hash, blockHeight) if err != nil { return nil, err @@ -405,6 +512,9 @@ func (r *BlockReader) BodyWithTransactions(ctx context.Context, tx kv.Getter, ha if body != nil { return body, nil } + if dbgLogs { + log.Info(dbgPrefix + "found in db=false") + } } view := r.sn.View() @@ -415,6 +525,9 @@ func (r *BlockReader) BodyWithTransactions(ctx context.Context, tx kv.Getter, ha var buf []byte seg, ok := view.BodiesSegment(blockHeight) if !ok { + if dbgLogs { + log.Info(dbgPrefix + "no bodies file for this block num") + } return nil, nil } body, baseTxnID, txsAmount, buf, err = r.bodyFromSnapshot(blockHeight, seg, buf) @@ -422,10 +535,16 @@ func (r *BlockReader) BodyWithTransactions(ctx context.Context, tx kv.Getter, ha return nil, err } if body == nil { + if dbgLogs { + log.Info(dbgPrefix + "got nil body from file") + } return nil, nil } txnSeg, ok := view.TxsSegment(blockHeight) if !ok { + if dbgLogs { + log.Info(dbgPrefix+"no transactions file for this block num", "r.sn.BlocksAvailable()", r.sn.BlocksAvailable(), "r.sn.idxMax", r.sn.idxMax.Load(), "r.sn.segmetntsMax", r.sn.segmentsMax.Load()) + } return nil, nil } txs, senders, err := r.txsFromSnapshot(baseTxnID, txsAmount, txnSeg, buf) @@ -433,8 +552,14 @@ func (r *BlockReader) BodyWithTransactions(ctx context.Context, tx kv.Getter, ha return nil, err } if txs == nil { + if dbgLogs { + log.Info(dbgPrefix + "got nil txs from file") + } return nil, nil } + if dbgLogs { + log.Info(dbgPrefix+"got non-nil txs from file", "len(txs)", len(txs)) + } body.Transactions = txs body.SendersToTxs(senders) return body, nil @@ -455,6 +580,9 @@ func (r *BlockReader) BodyRlp(ctx context.Context, tx kv.Getter, hash common.Has func (r *BlockReader) Body(ctx context.Context, tx kv.Getter, hash common.Hash, blockHeight uint64) (body *types.Body, txAmount uint32, err error) { maxBlockNumInFiles := r.sn.BlocksAvailable() if maxBlockNumInFiles == 0 || blockHeight > maxBlockNumInFiles { + if tx == nil { + return nil, 0, nil + } body, _, txAmount = rawdb.ReadBody(tx, hash, blockHeight) return body, txAmount, nil } @@ -484,14 +612,29 @@ func (r *BlockReader) BlockWithSenders(ctx context.Context, tx kv.Getter, hash c return r.blockWithSenders(ctx, tx, hash, blockHeight, false) } func (r *BlockReader) blockWithSenders(ctx context.Context, tx kv.Getter, hash common.Hash, blockHeight uint64, forceCanonical bool) (block *types.Block, senders []common.Address, err error) { + var dbgPrefix string + dbgLogs := dbg.Enabled(ctx) + if dbgLogs { + dbgPrefix = fmt.Sprintf("[dbg] BlockReader(idxMax=%d,segMax=%d).blockWithSenders(hash=%x,blk=%d) -> ", r.sn.idxMax.Load(), r.sn.segmentsMax.Load(), hash, blockHeight) + } + maxBlockNumInFiles := r.sn.BlocksAvailable() - if tx != nil && (maxBlockNumInFiles == 0 || blockHeight > maxBlockNumInFiles) { + if maxBlockNumInFiles == 0 || blockHeight > maxBlockNumInFiles { + if tx == nil { + if dbgLogs { + log.Info(dbgPrefix + "RoTx is nil") + } + return nil, nil, nil + } if forceCanonical { canonicalHash, err := rawdb.ReadCanonicalHash(tx, blockHeight) if err != nil { return nil, nil, fmt.Errorf("requested non-canonical hash %x. canonical=%x", hash, canonicalHash) } if canonicalHash != hash { + if dbgLogs { + log.Info(dbgPrefix + fmt.Sprintf("this hash is not canonical now. current one is %x", canonicalHash)) + } return nil, nil, nil } } @@ -500,10 +643,16 @@ func (r *BlockReader) blockWithSenders(ctx context.Context, tx kv.Getter, hash c if err != nil { return nil, nil, err } + if dbgLogs { + log.Info(dbgPrefix + fmt.Sprintf("found_in_db=%t", block != nil)) + } return block, senders, nil } if r.sn == nil { + if dbgLogs { + log.Info(dbgPrefix + "no files") + } return } @@ -511,6 +660,9 @@ func (r *BlockReader) blockWithSenders(ctx context.Context, tx kv.Getter, hash c defer view.Close() seg, ok := view.HeadersSegment(blockHeight) if !ok { + if dbgLogs { + log.Info(dbgPrefix + "no header files for this block num") + } return } @@ -520,6 +672,9 @@ func (r *BlockReader) blockWithSenders(ctx context.Context, tx kv.Getter, hash c return nil, nil, err } if h == nil { + if dbgLogs { + log.Info(dbgPrefix + "got nil header from file") + } return } @@ -528,6 +683,9 @@ func (r *BlockReader) blockWithSenders(ctx context.Context, tx kv.Getter, hash c var txsAmount uint32 bodySeg, ok := view.BodiesSegment(blockHeight) if !ok { + if dbgLogs { + log.Info(dbgPrefix + "no bodies file for this block num") + } return } b, baseTxnId, txsAmount, buf, err = r.bodyFromSnapshot(blockHeight, bodySeg, buf) @@ -535,11 +693,17 @@ func (r *BlockReader) blockWithSenders(ctx context.Context, tx kv.Getter, hash c return nil, nil, err } if b == nil { + if dbgLogs { + log.Info(dbgPrefix + "got nil body from file") + } return } if txsAmount == 0 { block = types.NewBlockFromStorage(hash, h, nil, b.Uncles, b.Withdrawals) if len(senders) != block.Transactions().Len() { + if dbgLogs { + log.Info(dbgPrefix + fmt.Sprintf("found block with %d transactions, but %d senders", block.Transactions().Len(), len(senders))) + } return block, senders, nil // no senders is fine - will recover them on the fly } block.SendersToTxs(senders) @@ -548,6 +712,9 @@ func (r *BlockReader) blockWithSenders(ctx context.Context, tx kv.Getter, hash c txnSeg, ok := view.TxsSegment(blockHeight) if !ok { + if dbgLogs { + log.Info(dbgPrefix+"no transactions file for this block num", "r.sn.BlocksAvailable()", r.sn.BlocksAvailable(), "r.sn.indicesReady", r.sn.indicesReady.Load()) + } return } var txs []types.Transaction @@ -555,23 +722,25 @@ func (r *BlockReader) blockWithSenders(ctx context.Context, tx kv.Getter, hash c if err != nil { return nil, nil, err } - if !ok { - return - } block = types.NewBlockFromStorage(hash, h, txs, b.Uncles, b.Withdrawals) if len(senders) != block.Transactions().Len() { + if dbgLogs { + log.Info(dbgPrefix + fmt.Sprintf("found block with %d transactions, but %d senders", block.Transactions().Len(), len(senders))) + } return block, senders, nil // no senders is fine - will recover them on the fly } block.SendersToTxs(senders) return block, senders, nil } -func (r *BlockReader) headerFromSnapshot(blockHeight uint64, sn *HeaderSegment, buf []byte) (*types.Header, []byte, error) { - if sn.idxHeaderHash == nil { +func (r *BlockReader) headerFromSnapshot(blockHeight uint64, sn *Segment, buf []byte) (*types.Header, []byte, error) { + index := sn.Index() + + if index == nil { return nil, buf, nil } - headerOffset := sn.idxHeaderHash.OrdinalLookup(blockHeight - sn.idxHeaderHash.BaseDataID()) - gg := sn.seg.MakeGetter() + headerOffset := index.OrdinalLookup(blockHeight - index.BaseDataID()) + gg := sn.MakeGetter() gg.Reset(headerOffset) if !gg.HasNext() { return nil, buf, nil @@ -591,20 +760,26 @@ func (r *BlockReader) headerFromSnapshot(blockHeight uint64, sn *HeaderSegment, // because HeaderByHash method will search header in all snapshots - and may request header which doesn't exists // but because our indices are based on PerfectHashMap, no way to know is given key exists or not, only way - // to make sure is to fetch it and compare hash -func (r *BlockReader) headerFromSnapshotByHash(hash common.Hash, sn *HeaderSegment, buf []byte) (*types.Header, error) { +func (r *BlockReader) headerFromSnapshotByHash(hash common.Hash, sn *Segment, buf []byte) (*types.Header, error) { defer func() { if rec := recover(); rec != nil { panic(fmt.Errorf("%+v, snapshot: %d-%d, trace: %s", rec, sn.from, sn.to, dbg.Stack())) } }() // avoid crash because Erigon's core does many things - if sn.idxHeaderHash == nil { + index := sn.Index() + + if index == nil { + return nil, nil + } + + reader := recsplit.NewIndexReader(index) + localID, ok := reader.Lookup(hash[:]) + if !ok { return nil, nil } - reader := recsplit.NewIndexReader(sn.idxHeaderHash) - localID := reader.Lookup(hash[:]) - headerOffset := sn.idxHeaderHash.OrdinalLookup(localID) - gg := sn.seg.MakeGetter() + headerOffset := index.OrdinalLookup(localID) + gg := sn.MakeGetter() gg.Reset(headerOffset) if !gg.HasNext() { return nil, nil @@ -624,7 +799,7 @@ func (r *BlockReader) headerFromSnapshotByHash(hash common.Hash, sn *HeaderSegme return h, nil } -func (r *BlockReader) bodyFromSnapshot(blockHeight uint64, sn *BodySegment, buf []byte) (*types.Body, uint64, uint32, []byte, error) { +func (r *BlockReader) bodyFromSnapshot(blockHeight uint64, sn *Segment, buf []byte) (*types.Body, uint64, uint32, []byte, error) { b, buf, err := r.bodyForStorageFromSnapshot(blockHeight, sn, buf) if err != nil { return nil, 0, 0, buf, err @@ -643,19 +818,22 @@ func (r *BlockReader) bodyFromSnapshot(blockHeight uint64, sn *BodySegment, buf return body, b.BaseTxId + 1, txsAmount, buf, nil // empty txs in the beginning and end of block } -func (r *BlockReader) bodyForStorageFromSnapshot(blockHeight uint64, sn *BodySegment, buf []byte) (*types.BodyForStorage, []byte, error) { +func (r *BlockReader) bodyForStorageFromSnapshot(blockHeight uint64, sn *Segment, buf []byte) (*types.BodyForStorage, []byte, error) { defer func() { if rec := recover(); rec != nil { panic(fmt.Errorf("%+v, snapshot: %d-%d, trace: %s", rec, sn.from, sn.to, dbg.Stack())) } }() // avoid crash because Erigon's core does many things - if sn.idxBodyNumber == nil { + index := sn.Index() + + if index == nil { return nil, buf, nil } - bodyOffset := sn.idxBodyNumber.OrdinalLookup(blockHeight - sn.idxBodyNumber.BaseDataID()) - gg := sn.seg.MakeGetter() + bodyOffset := index.OrdinalLookup(blockHeight - index.BaseDataID()) + + gg := sn.MakeGetter() gg.Reset(bodyOffset) if !gg.HasNext() { return nil, buf, nil @@ -673,18 +851,20 @@ func (r *BlockReader) bodyForStorageFromSnapshot(blockHeight uint64, sn *BodySeg return b, buf, nil } -func (r *BlockReader) txsFromSnapshot(baseTxnID uint64, txsAmount uint32, txsSeg *TxnSegment, buf []byte) (txs []types.Transaction, senders []common.Address, err error) { +func (r *BlockReader) txsFromSnapshot(baseTxnID uint64, txsAmount uint32, txsSeg *Segment, buf []byte) (txs []types.Transaction, senders []common.Address, err error) { defer func() { if rec := recover(); rec != nil { panic(fmt.Errorf("%+v, snapshot: %d-%d, trace: %s", rec, txsSeg.from, txsSeg.to, dbg.Stack())) } }() // avoid crash because Erigon's core does many things - if txsSeg.IdxTxnHash == nil { + idxTxnHash := txsSeg.Index(coresnaptype.Indexes.TxnHash) + + if idxTxnHash == nil { return nil, nil, nil } - if baseTxnID < txsSeg.IdxTxnHash.BaseDataID() { - return nil, nil, fmt.Errorf(".idx file has wrong baseDataID? %d<%d, %s", baseTxnID, txsSeg.IdxTxnHash.BaseDataID(), txsSeg.Seg.FilePath()) + if baseTxnID < idxTxnHash.BaseDataID() { + return nil, nil, fmt.Errorf(".idx file has wrong baseDataID? %d<%d, %s", baseTxnID, idxTxnHash.BaseDataID(), txsSeg.FilePath()) } txs = make([]types.Transaction, txsAmount) @@ -692,8 +872,8 @@ func (r *BlockReader) txsFromSnapshot(baseTxnID uint64, txsAmount uint32, txsSeg if txsAmount == 0 { return txs, senders, nil } - txnOffset := txsSeg.IdxTxnHash.OrdinalLookup(baseTxnID - txsSeg.IdxTxnHash.BaseDataID()) - gg := txsSeg.Seg.MakeGetter() + txnOffset := idxTxnHash.OrdinalLookup(baseTxnID - idxTxnHash.BaseDataID()) + gg := txsSeg.MakeGetter() gg.Reset(txnOffset) for i := uint32(0); i < txsAmount; i++ { if !gg.HasNext() { @@ -701,7 +881,7 @@ func (r *BlockReader) txsFromSnapshot(baseTxnID uint64, txsAmount uint32, txsSeg } buf, _ = gg.Next(buf[:0]) if len(buf) < 1+20 { - return nil, nil, fmt.Errorf("segment %s has too short record: len(buf)=%d < 21", txsSeg.Seg.FilePath(), len(buf)) + return nil, nil, fmt.Errorf("segment %s has too short record: len(buf)=%d < 21", txsSeg.FilePath(), len(buf)) } senders[i].SetBytes(buf[1 : 1+20]) txRlp := buf[1+20:] @@ -715,9 +895,11 @@ func (r *BlockReader) txsFromSnapshot(baseTxnID uint64, txsAmount uint32, txsSeg return txs, senders, nil } -func (r *BlockReader) txnByID(txnID uint64, sn *TxnSegment, buf []byte) (txn types.Transaction, err error) { - offset := sn.IdxTxnHash.OrdinalLookup(txnID - sn.IdxTxnHash.BaseDataID()) - gg := sn.Seg.MakeGetter() +func (r *BlockReader) txnByID(txnID uint64, sn *Segment, buf []byte) (txn types.Transaction, err error) { + idxTxnHash := sn.Index(coresnaptype.Indexes.TxnHash) + + offset := idxTxnHash.OrdinalLookup(txnID - idxTxnHash.BaseDataID()) + gg := sn.MakeGetter() gg.Reset(offset) if !gg.HasNext() { return nil, nil @@ -733,17 +915,24 @@ func (r *BlockReader) txnByID(txnID uint64, sn *TxnSegment, buf []byte) (txn typ return } -func (r *BlockReader) txnByHash(txnHash common.Hash, segments []*TxnSegment, buf []byte) (txn types.Transaction, blockNum, txnID uint64, err error) { +func (r *BlockReader) txnByHash(txnHash common.Hash, segments []*Segment, buf []byte) (types.Transaction, uint64, bool, error) { for i := len(segments) - 1; i >= 0; i-- { sn := segments[i] - if sn.IdxTxnHash == nil || sn.IdxTxnHash2BlockNum == nil { + + idxTxnHash := sn.Index(coresnaptype.Indexes.TxnHash) + idxTxnHash2BlockNum := sn.Index(coresnaptype.Indexes.TxnHash2BlockNum) + + if idxTxnHash == nil || idxTxnHash2BlockNum == nil { continue } - reader := recsplit.NewIndexReader(sn.IdxTxnHash) - txnId := reader.Lookup(txnHash[:]) - offset := sn.IdxTxnHash.OrdinalLookup(txnId) - gg := sn.Seg.MakeGetter() + reader := recsplit.NewIndexReader(idxTxnHash) + txnId, ok := reader.Lookup(txnHash[:]) + if !ok { + continue + } + offset := idxTxnHash.OrdinalLookup(txnId) + gg := sn.MakeGetter() gg.Reset(offset) // first byte txnHash check - reducing false-positives 256 times. Allows don't store and don't calculate full hash of entity - when checking many snapshots. if !gg.MatchPrefix([]byte{txnHash[0]}) { @@ -753,22 +942,26 @@ func (r *BlockReader) txnByHash(txnHash common.Hash, segments []*TxnSegment, buf senderByte, txnRlp := buf[1:1+20], buf[1+20:] sender := *(*common.Address)(senderByte) - txn, err = types.DecodeTransaction(txnRlp) + txn, err := types.DecodeTransaction(txnRlp) if err != nil { - return + return nil, 0, false, err } txn.SetSender(sender) // see: https://tip.golang.org/ref/spec#Conversions_from_slice_to_array_pointer - reader2 := recsplit.NewIndexReader(sn.IdxTxnHash2BlockNum) - blockNum = reader2.Lookup(txnHash[:]) + reader2 := recsplit.NewIndexReader(idxTxnHash2BlockNum) + blockNum, ok := reader2.Lookup(txnHash[:]) + if !ok { + continue + } // final txnHash check - completely avoid false-positives if txn.Hash() == txnHash { - return + return txn, blockNum, true, nil } } - return + + return nil, 0, false, nil } // TxnByIdxInBlock - doesn't include system-transactions in the begin/end of block @@ -813,7 +1006,7 @@ func (r *BlockReader) TxnByIdxInBlock(ctx context.Context, tx kv.Getter, blockNu } // TxnLookup - find blockNumber and txnID by txnHash -func (r *BlockReader) TxnLookup(ctx context.Context, tx kv.Getter, txnHash common.Hash) (uint64, bool, error) { +func (r *BlockReader) TxnLookup(_ context.Context, tx kv.Getter, txnHash common.Hash) (uint64, bool, error) { n, err := rawdb.ReadTxLookupEntry(tx, txnHash) if err != nil { return 0, false, err @@ -825,19 +1018,15 @@ func (r *BlockReader) TxnLookup(ctx context.Context, tx kv.Getter, txnHash commo view := r.sn.View() defer view.Close() - var txn types.Transaction - var blockNum uint64 - txn, blockNum, _, err = r.txnByHash(txnHash, view.Txs(), nil) + _, blockNum, ok, err := r.txnByHash(txnHash, view.Txs(), nil) if err != nil { return 0, false, err } - if txn == nil { - return 0, false, nil - } - return blockNum, true, nil + + return blockNum, ok, nil } -func (r *BlockReader) FirstTxNumNotInSnapshots() uint64 { +func (r *BlockReader) FirstTxnNumNotInSnapshots() uint64 { view := r.sn.View() defer view.Close() @@ -846,7 +1035,7 @@ func (r *BlockReader) FirstTxNumNotInSnapshots() uint64 { return 0 } - lastTxnID := sn.IdxTxnHash.BaseDataID() + uint64(sn.Seg.Count()) + lastTxnID := sn.Index(coresnaptype.Indexes.TxnHash).BaseDataID() + uint64(sn.Count()) return lastTxnID } @@ -856,10 +1045,10 @@ func (r *BlockReader) IterateFrozenBodies(f func(blockNum, baseTxNum, txAmount u for _, sn := range view.Bodies() { sn := sn - defer sn.seg.EnableMadvNormal().DisableReadAhead() + defer sn.EnableMadvNormal().DisableReadAhead() var buf []byte - g := sn.seg.MakeGetter() + g := sn.MakeGetter() blockNum := sn.from var b types.BodyForStorage for g.HasNext() { @@ -883,21 +1072,21 @@ func (r *BlockReader) IntegrityTxnID(failFast bool) error { var expectedFirstTxnID uint64 for _, snb := range view.Bodies() { - firstBlockNum := snb.idxBodyNumber.BaseDataID() + firstBlockNum := snb.Index().BaseDataID() sn, _ := view.TxsSegment(firstBlockNum) b, _, err := r.bodyForStorageFromSnapshot(firstBlockNum, snb, nil) if err != nil { return err } if b.BaseTxId != expectedFirstTxnID { - err := fmt.Errorf("[integrity] IntegrityTxnID: bn=%d, baseID=%d, cnt=%d, expectedFirstTxnID=%d", firstBlockNum, b.BaseTxId, sn.Seg.Count(), expectedFirstTxnID) + err := fmt.Errorf("[integrity] IntegrityTxnID: bn=%d, baseID=%d, cnt=%d, expectedFirstTxnID=%d", firstBlockNum, b.BaseTxId, sn.Count(), expectedFirstTxnID) if failFast { return err } else { log.Error(err.Error()) } } - expectedFirstTxnID = b.BaseTxId + uint64(sn.Seg.Count()) + expectedFirstTxnID = b.BaseTxId + uint64(sn.Count()) } return nil } @@ -933,9 +1122,11 @@ func (r *BlockReader) CurrentBlock(db kv.Tx) (*types.Block, error) { block, _, err := r.blockWithSenders(context.Background(), db, headHash, *headNumber, true) return block, err } + func (r *BlockReader) RawTransactions(ctx context.Context, tx kv.Getter, fromBlock, toBlock uint64) (txs [][]byte, err error) { return rawdb.RawTransactionsRange(tx, fromBlock, toBlock) } + func (r *BlockReader) ReadAncestor(db kv.Getter, hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { if ancestor > number { return common.Hash{}, 0 @@ -1014,19 +1205,24 @@ func (r *BlockReader) EventLookup(ctx context.Context, tx kv.Getter, txnHash com return blockNum, true, nil } -func (r *BlockReader) borBlockByEventHash(txnHash common.Hash, segments []*BorEventSegment, buf []byte) (blockNum uint64, ok bool, err error) { +func (r *BlockReader) borBlockByEventHash(txnHash common.Hash, segments []*Segment, buf []byte) (blockNum uint64, ok bool, err error) { for i := len(segments) - 1; i >= 0; i-- { sn := segments[i] - if sn.IdxBorTxnHash == nil { + idxBorTxnHash := sn.Index() + + if idxBorTxnHash == nil { + continue + } + if idxBorTxnHash.KeyCount() == 0 { continue } - if sn.IdxBorTxnHash.KeyCount() == 0 { + reader := recsplit.NewIndexReader(idxBorTxnHash) + blockEventId, exists := reader.Lookup(txnHash[:]) + if !exists { continue } - reader := recsplit.NewIndexReader(sn.IdxBorTxnHash) - blockEventId := reader.Lookup(txnHash[:]) - offset := sn.IdxBorTxnHash.OrdinalLookup(blockEventId) - gg := sn.seg.MakeGetter() + offset := idxBorTxnHash.OrdinalLookup(blockEventId) + gg := sn.MakeGetter() gg.Reset(offset) if !gg.MatchPrefix(txnHash[:]) { continue @@ -1039,9 +1235,55 @@ func (r *BlockReader) borBlockByEventHash(txnHash common.Hash, segments []*BorEv return } +func (r *BlockReader) BorStartEventID(ctx context.Context, tx kv.Tx, hash common.Hash, blockHeight uint64) (uint64, error) { + maxBlockNumInFiles := r.FrozenBorBlocks() + if maxBlockNumInFiles == 0 || blockHeight > maxBlockNumInFiles { + v, err := tx.GetOne(kv.BorEventNums, hexutility.EncodeTs(blockHeight)) + if err != nil { + return 0, err + } + startEventId := binary.BigEndian.Uint64(v) + return startEventId, nil + } + + borTxHash := bortypes.ComputeBorTxHash(blockHeight, hash) + view := r.borSn.View() + defer view.Close() + + segments := view.Events() + for i := len(segments) - 1; i >= 0; i-- { + sn := segments[i] + if sn.from > blockHeight { + continue + } + if sn.to <= blockHeight { + break + } + + idxBorTxnHash := sn.Index() + + if idxBorTxnHash == nil { + continue + } + if idxBorTxnHash.KeyCount() == 0 { + continue + } + reader := recsplit.NewIndexReader(idxBorTxnHash) + blockEventId, found := reader.Lookup(borTxHash[:]) + if !found { + return 0, fmt.Errorf("borTxHash %x not found in snapshot %s", borTxHash, sn.FilePath()) + } + return idxBorTxnHash.BaseDataID() + blockEventId, nil + } + return 0, nil +} + func (r *BlockReader) EventsByBlock(ctx context.Context, tx kv.Tx, hash common.Hash, blockHeight uint64) ([]rlp.RawValue, error) { maxBlockNumInFiles := r.FrozenBorBlocks() if maxBlockNumInFiles == 0 || blockHeight > maxBlockNumInFiles { + if tx == nil { + return nil, nil + } c, err := tx.Cursor(kv.BorEventNums) if err != nil { return nil, err @@ -1085,7 +1327,7 @@ func (r *BlockReader) EventsByBlock(ctx context.Context, tx kv.Tx, hash common.H } return result, nil } - borTxHash := types.ComputeBorTxHash(blockHeight, hash) + borTxHash := bortypes.ComputeBorTxHash(blockHeight, hash) view := r.borSn.View() defer view.Close() segments := view.Events() @@ -1097,18 +1339,24 @@ func (r *BlockReader) EventsByBlock(ctx context.Context, tx kv.Tx, hash common.H continue } if sn.to <= blockHeight { + break + } + + idxBorTxnHash := sn.Index() + + if idxBorTxnHash == nil { continue } - if sn.IdxBorTxnHash == nil { + if idxBorTxnHash.KeyCount() == 0 { continue } - if sn.IdxBorTxnHash.KeyCount() == 0 { + reader := recsplit.NewIndexReader(idxBorTxnHash) + blockEventId, ok := reader.Lookup(borTxHash[:]) + if !ok { continue } - reader := recsplit.NewIndexReader(sn.IdxBorTxnHash) - blockEventId := reader.Lookup(borTxHash[:]) - offset := sn.IdxBorTxnHash.OrdinalLookup(blockEventId) - gg := sn.seg.MakeGetter() + offset := idxBorTxnHash.OrdinalLookup(blockEventId) + gg := sn.MakeGetter() gg.Reset(offset) for gg.HasNext() && gg.MatchPrefix(borTxHash[:]) { buf, _ = gg.Next(buf[:0]) @@ -1118,7 +1366,84 @@ func (r *BlockReader) EventsByBlock(ctx context.Context, tx kv.Tx, hash common.H return result, nil } -func (r *BlockReader) LastFrozenEventID() uint64 { +// EventsByIdFromSnapshot returns the list of records limited by time, or the number of records along with a bool value to signify if the records were limited by time +func (r *BlockReader) EventsByIdFromSnapshot(from uint64, to time.Time, limit int) ([]*heimdall.EventRecordWithTime, bool, error) { + view := r.borSn.View() + defer view.Close() + + segments := view.Events() + var buf []byte + var result []*heimdall.EventRecordWithTime + stateContract := bor.GenesisContractStateReceiverABI() + maxTime := false + + for _, sn := range segments { + idxBorTxnHash := sn.Index() + + if idxBorTxnHash == nil || idxBorTxnHash.KeyCount() == 0 { + continue + } + + offset := idxBorTxnHash.OrdinalLookup(0) + gg := sn.MakeGetter() + gg.Reset(offset) + for gg.HasNext() { + buf, _ = gg.Next(buf[:0]) + + raw := rlp.RawValue(common.Copy(buf[length.Hash+length.BlockNum+8:])) + event, err := heimdall.UnpackEventRecordWithTime(stateContract, raw) + if err != nil { + return nil, false, err + } + + if event.ID < from { + continue + } + if event.Time.After(to) { + maxTime = true + goto BREAK + } + + result = append(result, event) + + if len(result) == limit { + goto BREAK + } + } + } + +BREAK: + return result, maxTime, nil +} + +func (r *BlockReader) LastEventId(_ context.Context, tx kv.Tx) (uint64, bool, error) { + cursor, err := tx.Cursor(kv.BorEvents) + if err != nil { + return 0, false, err + } + + defer cursor.Close() + k, _, err := cursor.Last() + if err != nil { + return 0, false, err + } + + var lastEventId uint64 + var ok bool + if k != nil { + lastEventId = binary.BigEndian.Uint64(k) + ok = true + } + + snapshotLastEventId := r.LastFrozenEventId() + if snapshotLastEventId > lastEventId { + return snapshotLastEventId, true, nil + } + + return lastEventId, ok, nil +} + +func (r *BlockReader) LastFrozenEventId() uint64 { if r.borSn == nil { return 0 } @@ -1130,9 +1455,9 @@ func (r *BlockReader) LastFrozenEventID() uint64 { return 0 } // find the last segment which has a built index - var lastSegment *BorEventSegment + var lastSegment *Segment for i := len(segments) - 1; i >= 0; i-- { - if segments[i].IdxBorTxnHash != nil { + if segments[i].Index() != nil { lastSegment = segments[i] break } @@ -1141,7 +1466,7 @@ func (r *BlockReader) LastFrozenEventID() uint64 { return 0 } var lastEventID uint64 - gg := lastSegment.seg.MakeGetter() + gg := lastSegment.MakeGetter() var buf []byte for gg.HasNext() { buf, _ = gg.Next(buf[:0]) @@ -1150,7 +1475,32 @@ func (r *BlockReader) LastFrozenEventID() uint64 { return lastEventID } -func (r *BlockReader) LastFrozenSpanID() uint64 { +func lastId(ctx context.Context, tx kv.Tx, db string) (uint64, bool, error) { + var last uint64 + var ok bool + + if tx != nil { + sCursor, err := tx.Cursor(db) + if err != nil { + return 0, false, err + } + + defer sCursor.Close() + k, _, err := sCursor.Last() + if err != nil { + return 0, false, err + } + + if k != nil { + ok = true + last = binary.BigEndian.Uint64(k) + } + } + + return last, ok, nil +} + +func (r *BlockReader) LastFrozenSpanId() uint64 { if r.borSn == nil { return 0 } @@ -1162,9 +1512,9 @@ func (r *BlockReader) LastFrozenSpanID() uint64 { return 0 } // find the last segment which has a built index - var lastSegment *BorSpanSegment + var lastSegment *Segment for i := len(segments) - 1; i >= 0; i-- { - if segments[i].idx != nil { + if segments[i].Index() != nil { lastSegment = segments[i] break } @@ -1173,28 +1523,29 @@ func (r *BlockReader) LastFrozenSpanID() uint64 { return 0 } - lastSpanID := bor.SpanIDAt(lastSegment.to) + lastSpanID := heimdall.SpanIdAt(lastSegment.to) if lastSpanID > 0 { lastSpanID-- } - return lastSpanID + return uint64(lastSpanID) } func (r *BlockReader) Span(ctx context.Context, tx kv.Getter, spanId uint64) ([]byte, error) { var endBlock uint64 if spanId > 0 { - endBlock = bor.SpanEndBlockNum(spanId) + endBlock = heimdall.SpanEndBlockNum(heimdall.SpanId(spanId)) } var buf [8]byte binary.BigEndian.PutUint64(buf[:], spanId) maxBlockNumInFiles := r.FrozenBorBlocks() - if maxBlockNumInFiles == 0 || endBlock > maxBlockNumInFiles { + if tx != nil && (maxBlockNumInFiles == 0 || endBlock > maxBlockNumInFiles) { v, err := tx.GetOne(kv.BorSpans, buf[:]) if err != nil { return nil, err } if v == nil { - return nil, fmt.Errorf("span %d not found (db), frozenBlocks=%d", spanId, maxBlockNumInFiles) + err := fmt.Errorf("span %d not found (db), frozenBlocks=%d", spanId, maxBlockNumInFiles) + return nil, fmt.Errorf("%w: %w", ErrSpanNotFound, err) } return common.Copy(v), nil } @@ -1203,32 +1554,158 @@ func (r *BlockReader) Span(ctx context.Context, tx kv.Getter, spanId uint64) ([] segments := view.Spans() for i := len(segments) - 1; i >= 0; i-- { sn := segments[i] - if sn.idx == nil { + idx := sn.Index() + + if idx == nil { continue } - spanFrom := bor.SpanIDAt(sn.from) + spanFrom := uint64(heimdall.SpanIdAt(sn.from)) if spanId < spanFrom { continue } - spanTo := bor.SpanIDAt(sn.to) + spanTo := uint64(heimdall.SpanIdAt(sn.to)) if spanId >= spanTo { continue } - if sn.idx.KeyCount() == 0 { + if idx.KeyCount() == 0 { + continue + } + offset := idx.OrdinalLookup(spanId - idx.BaseDataID()) + gg := sn.MakeGetter() + gg.Reset(offset) + result, _ := gg.Next(nil) + return common.Copy(result), nil + } + err := fmt.Errorf("span %d not found (snapshots)", spanId) + return nil, fmt.Errorf("%w: %w", ErrSpanNotFound, err) +} + +func (r *BlockReader) LastSpanId(_ context.Context, tx kv.Tx) (uint64, bool, error) { + var lastSpanId uint64 + var k []byte + if tx != nil { + sCursor, err := tx.Cursor(kv.BorSpans) + if err != nil { + return 0, false, err + } + + defer sCursor.Close() + k, _, err = sCursor.Last() + if err != nil { + return 0, false, err + } + + if k != nil { + lastSpanId = binary.BigEndian.Uint64(k) + } + } + + snapshotLastSpanId := r.LastFrozenSpanId() + if snapshotLastSpanId > lastSpanId { + return snapshotLastSpanId, true, nil + } + + return lastSpanId, k != nil, nil +} + +func (r *BlockReader) LastMilestoneId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + return lastId(ctx, tx, kv.BorMilestones) +} + +func (r *BlockReader) Milestone(ctx context.Context, tx kv.Getter, milestoneId uint64) ([]byte, error) { + var buf [8]byte + binary.BigEndian.PutUint64(buf[:], milestoneId) + v, err := tx.GetOne(kv.BorMilestones, buf[:]) + + if err != nil { + return nil, err + } + + if v == nil { + return nil, fmt.Errorf("milestone %d not found (db)", milestoneId) + } + + return common.Copy(v), nil +} + +func (r *BlockReader) LastCheckpointId(ctx context.Context, tx kv.Tx) (uint64, bool, error) { + lastCheckpointId, ok, err := lastId(ctx, tx, kv.BorCheckpoints) + + snapshotLastCheckpointId := r.LastFrozenCheckpointId() + + if snapshotLastCheckpointId > lastCheckpointId { + return snapshotLastCheckpointId, true, nil + } + + return lastCheckpointId, ok, err +} + +func (r *BlockReader) Checkpoint(ctx context.Context, tx kv.Getter, checkpointId uint64) ([]byte, error) { + var buf [8]byte + binary.BigEndian.PutUint64(buf[:], checkpointId) + v, err := tx.GetOne(kv.BorCheckpoints, buf[:]) + + if err != nil { + return nil, err + } + + if v != nil { + return common.Copy(v), nil + } + + view := r.borSn.View() + defer view.Close() + segments := view.Checkpoints() + for i := len(segments) - 1; i >= 0; i-- { + sn := segments[i] + index := sn.Index() + + if index == nil || index.KeyCount() == 0 || checkpointId < index.BaseDataID() { continue } - offset := sn.idx.OrdinalLookup(spanId - sn.idx.BaseDataID()) - gg := sn.seg.MakeGetter() + + offset := index.OrdinalLookup(checkpointId - index.BaseDataID()) + gg := sn.MakeGetter() gg.Reset(offset) result, _ := gg.Next(nil) return common.Copy(result), nil } - return nil, fmt.Errorf("span %d not found (snapshots)", spanId) + + return nil, fmt.Errorf("checkpoint %d not found (db)", checkpointId) +} + +func (r *BlockReader) LastFrozenCheckpointId() uint64 { + if r.borSn == nil { + return 0 + } + + view := r.borSn.View() + defer view.Close() + segments := view.Checkpoints() + if len(segments) == 0 { + return 0 + } + // find the last segment which has a built index + var lastSegment *Segment + for i := len(segments) - 1; i >= 0; i-- { + if segments[i].Index() != nil { + lastSegment = segments[i] + break + } + } + + if lastSegment == nil { + return 0 + } + + index := lastSegment.Index() + + return index.BaseDataID() + index.KeyCount() - 1 } // ---- Data Integrity part ---- -func (r *BlockReader) ensureHeaderNumber(n uint64, seg *HeaderSegment) error { +func (r *BlockReader) ensureHeaderNumber(n uint64, seg *Segment) error { h, _, err := r.headerFromSnapshot(n, seg, nil) if err != nil { return err diff --git a/turbo/snapshotsync/freezeblocks/block_reader_test.go b/turbo/snapshotsync/freezeblocks/block_reader_test.go index a408ea2b820..2b3309fd79c 100644 --- a/turbo/snapshotsync/freezeblocks/block_reader_test.go +++ b/turbo/snapshotsync/freezeblocks/block_reader_test.go @@ -11,44 +11,45 @@ import ( "github.com/stretchr/testify/require" "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" "github.com/ledgerwatch/erigon/eth/ethconfig" + borsnaptype "github.com/ledgerwatch/erigon/polygon/bor/snaptype" "github.com/ledgerwatch/erigon/turbo/testlog" ) -func TestBlockReaderLastFrozenSpanIDWhenSegmentFilesArePresent(t *testing.T) { +func TestBlockReaderLastFrozenSpanIdWhenSegmentFilesArePresent(t *testing.T) { t.Parallel() logger := testlog.Logger(t, log.LvlInfo) dir := t.TempDir() createTestBorEventSegmentFile(t, 0, 500_000, 132, dir, logger) - createTestSegmentFile(t, 0, 500_000, snaptype.BorSpans, dir, 1, logger) - borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + createTestSegmentFile(t, 0, 500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer borRoSnapshots.Close() err := borRoSnapshots.ReopenFolder() require.NoError(t, err) blockReader := &BlockReader{borSn: borRoSnapshots} - require.Equal(t, uint64(78), blockReader.LastFrozenSpanID()) + require.Equal(t, uint64(78), blockReader.LastFrozenSpanId()) } -func TestBlockReaderLastFrozenSpanIDWhenSegmentFilesAreNotPresent(t *testing.T) { +func TestBlockReaderLastFrozenSpanIdWhenSegmentFilesAreNotPresent(t *testing.T) { t.Parallel() logger := testlog.Logger(t, log.LvlInfo) dir := t.TempDir() - borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer borRoSnapshots.Close() err := borRoSnapshots.ReopenFolder() require.NoError(t, err) blockReader := &BlockReader{borSn: borRoSnapshots} - require.Equal(t, uint64(0), blockReader.LastFrozenSpanID()) + require.Equal(t, uint64(0), blockReader.LastFrozenSpanId()) } -func TestBlockReaderLastFrozenSpanIDReturnsLastSegWithIdx(t *testing.T) { +func TestBlockReaderLastFrozenSpanIdReturnsLastSegWithIdx(t *testing.T) { t.Parallel() logger := testlog.Logger(t, log.LvlInfo) @@ -56,23 +57,23 @@ func TestBlockReaderLastFrozenSpanIDReturnsLastSegWithIdx(t *testing.T) { createTestBorEventSegmentFile(t, 0, 500_000, 132, dir, logger) createTestBorEventSegmentFile(t, 500_000, 1_000_000, 264, dir, logger) createTestBorEventSegmentFile(t, 1_000_000, 1_500_000, 528, dir, logger) - createTestSegmentFile(t, 0, 500_000, snaptype.BorSpans, dir, 1, logger) - createTestSegmentFile(t, 500_000, 1_000_000, snaptype.BorSpans, dir, 1, logger) - createTestSegmentFile(t, 1_000_000, 1_500_000, snaptype.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 0, 500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 500_000, 1_000_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 1_000_000, 1_500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) // delete idx file for last bor span segment to simulate segment with missing idx file - idxFileToDelete := filepath.Join(dir, snaptype.IdxFileName(1, 1_000_000, 1_500_000, snaptype.BorSpans.String())) + idxFileToDelete := filepath.Join(dir, snaptype.IdxFileName(1, 1_000_000, 1_500_000, borsnaptype.BorSpans.Name())) err := os.Remove(idxFileToDelete) require.NoError(t, err) - borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer borRoSnapshots.Close() err = borRoSnapshots.ReopenFolder() require.NoError(t, err) blockReader := &BlockReader{borSn: borRoSnapshots} - require.Equal(t, uint64(156), blockReader.LastFrozenSpanID()) + require.Equal(t, uint64(156), blockReader.LastFrozenSpanId()) } -func TestBlockReaderLastFrozenSpanIDReturnsZeroWhenAllSegmentsDoNotHaveIdx(t *testing.T) { +func TestBlockReaderLastFrozenSpanIdReturnsZeroWhenAllSegmentsDoNotHaveIdx(t *testing.T) { t.Parallel() logger := testlog.Logger(t, log.LvlInfo) @@ -80,59 +81,59 @@ func TestBlockReaderLastFrozenSpanIDReturnsZeroWhenAllSegmentsDoNotHaveIdx(t *te createTestBorEventSegmentFile(t, 0, 500_000, 132, dir, logger) createTestBorEventSegmentFile(t, 500_000, 1_000_000, 264, dir, logger) createTestBorEventSegmentFile(t, 1_000_000, 1_500_000, 528, dir, logger) - createTestSegmentFile(t, 0, 500_000, snaptype.BorSpans, dir, 1, logger) - createTestSegmentFile(t, 500_000, 1_000_000, snaptype.BorSpans, dir, 1, logger) - createTestSegmentFile(t, 1_000_000, 1_500_000, snaptype.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 0, 500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 500_000, 1_000_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 1_000_000, 1_500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) // delete idx file for all bor span segments to simulate segments with missing idx files - idxFileToDelete := filepath.Join(dir, snaptype.IdxFileName(1, 1, 500_000, snaptype.BorSpans.String())) + idxFileToDelete := filepath.Join(dir, snaptype.IdxFileName(1, 1, 500_000, borsnaptype.BorSpans.Name())) err := os.Remove(idxFileToDelete) require.NoError(t, err) - idxFileToDelete = filepath.Join(dir, snaptype.IdxFileName(1, 500_000, 1_000_000, snaptype.BorSpans.String())) + idxFileToDelete = filepath.Join(dir, snaptype.IdxFileName(1, 500_000, 1_000_000, borsnaptype.BorSpans.Name())) err = os.Remove(idxFileToDelete) require.NoError(t, err) - idxFileToDelete = filepath.Join(dir, snaptype.IdxFileName(1, 1_000_000, 1_500_000, snaptype.BorSpans.String())) + idxFileToDelete = filepath.Join(dir, snaptype.IdxFileName(1, 1_000_000, 1_500_000, borsnaptype.BorSpans.Name())) err = os.Remove(idxFileToDelete) require.NoError(t, err) - borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer borRoSnapshots.Close() err = borRoSnapshots.ReopenFolder() require.NoError(t, err) blockReader := &BlockReader{borSn: borRoSnapshots} - require.Equal(t, uint64(0), blockReader.LastFrozenSpanID()) + require.Equal(t, uint64(0), blockReader.LastFrozenSpanId()) } -func TestBlockReaderLastFrozenEventIDWhenSegmentFilesArePresent(t *testing.T) { +func TestBlockReaderLastFrozenEventIdWhenSegmentFilesArePresent(t *testing.T) { t.Parallel() logger := testlog.Logger(t, log.LvlInfo) dir := t.TempDir() createTestBorEventSegmentFile(t, 0, 500_000, 132, dir, logger) - createTestSegmentFile(t, 0, 500_000, snaptype.BorSpans, dir, 1, logger) - borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + createTestSegmentFile(t, 0, 500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer borRoSnapshots.Close() err := borRoSnapshots.ReopenFolder() require.NoError(t, err) blockReader := &BlockReader{borSn: borRoSnapshots} - require.Equal(t, uint64(132), blockReader.LastFrozenEventID()) + require.Equal(t, uint64(132), blockReader.LastFrozenEventId()) } -func TestBlockReaderLastFrozenEventIDWhenSegmentFilesAreNotPresent(t *testing.T) { +func TestBlockReaderLastFrozenEventIdWhenSegmentFilesAreNotPresent(t *testing.T) { t.Parallel() logger := testlog.Logger(t, log.LvlInfo) dir := t.TempDir() - borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer borRoSnapshots.Close() err := borRoSnapshots.ReopenFolder() require.NoError(t, err) blockReader := &BlockReader{borSn: borRoSnapshots} - require.Equal(t, uint64(0), blockReader.LastFrozenEventID()) + require.Equal(t, uint64(0), blockReader.LastFrozenEventId()) } -func TestBlockReaderLastFrozenEventIDReturnsLastSegWithIdx(t *testing.T) { +func TestBlockReaderLastFrozenEventIdReturnsLastSegWithIdx(t *testing.T) { t.Parallel() logger := testlog.Logger(t, log.LvlInfo) @@ -140,23 +141,23 @@ func TestBlockReaderLastFrozenEventIDReturnsLastSegWithIdx(t *testing.T) { createTestBorEventSegmentFile(t, 0, 500_000, 132, dir, logger) createTestBorEventSegmentFile(t, 500_000, 1_000_000, 264, dir, logger) createTestBorEventSegmentFile(t, 1_000_000, 1_500_000, 528, dir, logger) - createTestSegmentFile(t, 0, 500_000, snaptype.BorSpans, dir, 1, logger) - createTestSegmentFile(t, 500_000, 1_000_000, snaptype.BorSpans, dir, 1, logger) - createTestSegmentFile(t, 1_000_000, 1_500_000, snaptype.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 0, 500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 500_000, 1_000_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 1_000_000, 1_500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) // delete idx file for last bor events segment to simulate segment with missing idx file - idxFileToDelete := filepath.Join(dir, snaptype.IdxFileName(1, 1_000_000, 1_500_000, snaptype.BorEvents.String())) + idxFileToDelete := filepath.Join(dir, snaptype.IdxFileName(1, 1_000_000, 1_500_000, borsnaptype.BorEvents.Name())) err := os.Remove(idxFileToDelete) require.NoError(t, err) - borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer borRoSnapshots.Close() err = borRoSnapshots.ReopenFolder() require.NoError(t, err) blockReader := &BlockReader{borSn: borRoSnapshots} - require.Equal(t, uint64(264), blockReader.LastFrozenEventID()) + require.Equal(t, uint64(264), blockReader.LastFrozenEventId()) } -func TestBlockReaderLastFrozenEventIDReturnsZeroWhenAllSegmentsDoNotHaveIdx(t *testing.T) { +func TestBlockReaderLastFrozenEventIdReturnsZeroWhenAllSegmentsDoNotHaveIdx(t *testing.T) { t.Parallel() logger := testlog.Logger(t, log.LvlInfo) @@ -164,33 +165,33 @@ func TestBlockReaderLastFrozenEventIDReturnsZeroWhenAllSegmentsDoNotHaveIdx(t *t createTestBorEventSegmentFile(t, 0, 500_000, 132, dir, logger) createTestBorEventSegmentFile(t, 500_000, 1_000_000, 264, dir, logger) createTestBorEventSegmentFile(t, 1_000_000, 1_500_000, 528, dir, logger) - createTestSegmentFile(t, 0, 500_000, snaptype.BorSpans, dir, 1, logger) - createTestSegmentFile(t, 500_000, 1_000_000, snaptype.BorSpans, dir, 1, logger) - createTestSegmentFile(t, 1_000_000, 1_500_000, snaptype.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 0, 500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 500_000, 1_000_000, borsnaptype.Enums.BorSpans, dir, 1, logger) + createTestSegmentFile(t, 1_000_000, 1_500_000, borsnaptype.Enums.BorSpans, dir, 1, logger) // delete idx files for all bor events segment to simulate segment files with missing idx files - idxFileToDelete := filepath.Join(dir, snaptype.IdxFileName(1, 0, 500_000, snaptype.BorEvents.String())) + idxFileToDelete := filepath.Join(dir, snaptype.IdxFileName(1, 0, 500_000, borsnaptype.BorEvents.Name())) err := os.Remove(idxFileToDelete) require.NoError(t, err) - idxFileToDelete = filepath.Join(dir, snaptype.IdxFileName(1, 500_000, 1_000_000, snaptype.BorEvents.String())) + idxFileToDelete = filepath.Join(dir, snaptype.IdxFileName(1, 500_000, 1_000_000, borsnaptype.BorEvents.Name())) err = os.Remove(idxFileToDelete) require.NoError(t, err) - idxFileToDelete = filepath.Join(dir, snaptype.IdxFileName(1, 1_000_000, 1_500_000, snaptype.BorEvents.String())) + idxFileToDelete = filepath.Join(dir, snaptype.IdxFileName(1, 1_000_000, 1_500_000, borsnaptype.BorEvents.Name())) err = os.Remove(idxFileToDelete) require.NoError(t, err) - borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + borRoSnapshots := NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer borRoSnapshots.Close() err = borRoSnapshots.ReopenFolder() require.NoError(t, err) blockReader := &BlockReader{borSn: borRoSnapshots} - require.Equal(t, uint64(0), blockReader.LastFrozenEventID()) + require.Equal(t, uint64(0), blockReader.LastFrozenEventId()) } func createTestBorEventSegmentFile(t *testing.T, from, to, eventId uint64, dir string, logger log.Logger) { - compressor, err := compress.NewCompressor( + compressor, err := seg.NewCompressor( context.Background(), "test", - filepath.Join(dir, snaptype.SegmentFileName(1, from, to, snaptype.BorEvents)), + filepath.Join(dir, snaptype.SegmentFileName(1, from, to, borsnaptype.Enums.BorEvents)), dir, 100, 1, @@ -211,7 +212,7 @@ func createTestBorEventSegmentFile(t *testing.T, from, to, eventId uint64, dir s KeyCount: 1, BucketSize: 10, TmpDir: dir, - IndexFile: filepath.Join(dir, snaptype.IdxFileName(1, from, to, snaptype.BorEvents.String())), + IndexFile: filepath.Join(dir, snaptype.IdxFileName(1, from, to, borsnaptype.BorEvents.Name())), LeafSize: 8, }, logger, diff --git a/turbo/snapshotsync/freezeblocks/block_snapshots.go b/turbo/snapshotsync/freezeblocks/block_snapshots.go index 866a21553d4..b4d298236e6 100644 --- a/turbo/snapshotsync/freezeblocks/block_snapshots.go +++ b/turbo/snapshotsync/freezeblocks/block_snapshots.go @@ -18,6 +18,7 @@ import ( "github.com/holiman/uint256" "github.com/ledgerwatch/log/v3" + "github.com/tidwall/btree" "golang.org/x/exp/slices" "golang.org/x/sync/errgroup" @@ -30,165 +31,141 @@ import ( "github.com/ledgerwatch/erigon-lib/common/dbg" dir2 "github.com/ledgerwatch/erigon-lib/common/dir" "github.com/ledgerwatch/erigon-lib/common/hexutility" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/diagnostics" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" types2 "github.com/ledgerwatch/erigon-lib/types" - "github.com/ledgerwatch/erigon/cmd/hack/tool/fromdb" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/rawdb/blockio" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" "github.com/ledgerwatch/erigon/core/types" - "github.com/ledgerwatch/erigon/crypto" - "github.com/ledgerwatch/erigon/crypto/cryptopool" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/eth/ethconfig/estimate" "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/params" - "github.com/ledgerwatch/erigon/polygon/bor" + "github.com/ledgerwatch/erigon/polygon/heimdall" "github.com/ledgerwatch/erigon/rlp" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/erigon/turbo/silkworm" ) -type HeaderSegment struct { - seg *compress.Decompressor // value: first_byte_of_header_hash + header_rlp - idxHeaderHash *recsplit.Index // header_hash -> headers_segment_offset - Range - version uint8 +type Range struct { + from, to uint64 } -type BodySegment struct { - seg *compress.Decompressor // value: rlp(types.BodyForStorage) - idxBodyNumber *recsplit.Index // block_num_u64 -> bodies_segment_offset - Range - version uint8 +func (r Range) From() uint64 { return r.from } +func (r Range) To() uint64 { return r.to } + +type Ranges []Range + +func (r Ranges) String() string { + return fmt.Sprintf("%d", r) } -type TxnSegment struct { - Seg *compress.Decompressor // value: first_byte_of_transaction_hash + sender_address + transaction_rlp - IdxTxnHash *recsplit.Index // transaction_hash -> transactions_segment_offset - IdxTxnHash2BlockNum *recsplit.Index // transaction_hash -> block_number +type Segment struct { Range - version uint8 + *seg.Decompressor + indexes []*recsplit.Index + segType snaptype.Type + version snaptype.Version } -func (sn *HeaderSegment) closeIdx() { - if sn.idxHeaderHash != nil { - sn.idxHeaderHash.Close() - sn.idxHeaderHash = nil - } -} -func (sn *HeaderSegment) closeSeg() { - if sn.seg != nil { - sn.seg.Close() - sn.seg = nil - } -} -func (sn *HeaderSegment) close() { - sn.closeSeg() - sn.closeIdx() +func (s Segment) Type() snaptype.Type { + return s.segType } -func (sn *HeaderSegment) openFiles() []string { - var files []string +func (s Segment) Version() snaptype.Version { + return s.version +} - if sn.seg.IsOpen() { - files = append(files, sn.seg.FilePath()) +func (s Segment) Index(index ...snaptype.Index) *recsplit.Index { + if len(index) == 0 { + index = []snaptype.Index{{}} } - if sn.idxHeaderHash != nil { - files = append(files, sn.idxHeaderHash.FilePath()) + if len(s.indexes) <= index[0].Offset { + return nil } - return files + return s.indexes[index[0].Offset] } -func (sn *HeaderSegment) reopenSeg(dir string) (err error) { - sn.closeSeg() - fileName := snaptype.SegmentFileName(sn.version, sn.from, sn.to, snaptype.Headers) - sn.seg, err = compress.NewDecompressor(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) +func (s Segment) IsIndexed() bool { + if len(s.indexes) < len(s.Type().Indexes()) { + return false } - return nil -} -func (sn *HeaderSegment) reopenIdxIfNeed(dir string, optimistic bool) (err error) { - if sn.idxHeaderHash != nil { - return nil - } - err = sn.reopenIdx(dir) - if err != nil { - if !errors.Is(err, os.ErrNotExist) { - if optimistic { - log.Warn("[snapshots] open index", "err", err) - } else { - return err - } + + for _, i := range s.indexes { + if i == nil { + return false } } - return nil + + return true } -func (sn *HeaderSegment) reopenIdx(dir string) (err error) { - sn.closeIdx() - if sn.seg == nil { - return nil - } - fileName := snaptype.IdxFileName(sn.version, sn.from, sn.to, snaptype.Headers.String()) - sn.idxHeaderHash, err = recsplit.OpenIndex(filepath.Join(dir, fileName)) + +func (s Segment) FileName() string { + return s.Type().FileName(s.version, s.from, s.to) +} + +func (s Segment) FileInfo(dir string) snaptype.FileInfo { + return s.Type().FileInfo(dir, s.from, s.to) +} + +func (s *Segment) reopenSeg(dir string) (err error) { + s.closeSeg() + s.Decompressor, err = seg.NewDecompressor(filepath.Join(dir, s.FileName())) if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) + return fmt.Errorf("%w, fileName: %s", err, s.FileName()) } - return nil } -func (sn *BodySegment) closeSeg() { - if sn.seg != nil { - sn.seg.Close() - sn.seg = nil +func (s *Segment) closeSeg() { + if s.Decompressor != nil { + s.Close() + s.Decompressor = nil } } -func (sn *BodySegment) closeIdx() { - if sn.idxBodyNumber != nil { - sn.idxBodyNumber.Close() - sn.idxBodyNumber = nil + +func (s *Segment) closeIdx() { + for _, index := range s.indexes { + index.Close() } + + s.indexes = nil } -func (sn *BodySegment) close() { - sn.closeSeg() - sn.closeIdx() + +func (s *Segment) close() { + if s != nil { + s.closeSeg() + s.closeIdx() + } } -func (sn *BodySegment) openFiles() []string { - var files []string +func (s *Segment) openFiles() []string { + files := make([]string, 0, len(s.indexes)+1) - if sn.seg.IsOpen() { - files = append(files, sn.seg.FilePath()) + if s.IsOpen() { + files = append(files, s.FilePath()) } - if sn.idxBodyNumber != nil { - files = append(files, sn.idxBodyNumber.FilePath()) + for _, index := range s.indexes { + files = append(files, index.FilePath()) } return files } -func (sn *BodySegment) reopenSeg(dir string) (err error) { - sn.closeSeg() - fileName := snaptype.SegmentFileName(sn.version, sn.from, sn.to, snaptype.Bodies) - sn.seg, err = compress.NewDecompressor(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - return nil -} -func (sn *BodySegment) reopenIdxIfNeed(dir string, optimistic bool) (err error) { - if sn.idxBodyNumber != nil { +func (s *Segment) reopenIdxIfNeed(dir string, optimistic bool) (err error) { + if len(s.Type().IdxFileNames(s.version, s.from, s.to)) == 0 { return nil } - err = sn.reopenIdx(dir) + + err = s.reopenIdx(dir) + if err != nil { if !errors.Is(err, os.ErrNotExist) { if optimistic { @@ -198,165 +175,75 @@ func (sn *BodySegment) reopenIdxIfNeed(dir string, optimistic bool) (err error) } } } - return nil -} -func (sn *BodySegment) reopenIdx(dir string) (err error) { - sn.closeIdx() - if sn.seg == nil { - return nil - } - fileName := snaptype.IdxFileName(sn.version, sn.from, sn.to, snaptype.Bodies.String()) - sn.idxBodyNumber, err = recsplit.OpenIndex(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } return nil } -func (sn *TxnSegment) closeIdx() { - if sn.IdxTxnHash != nil { - sn.IdxTxnHash.Close() - sn.IdxTxnHash = nil - } - if sn.IdxTxnHash2BlockNum != nil { - sn.IdxTxnHash2BlockNum.Close() - sn.IdxTxnHash2BlockNum = nil - } -} -func (sn *TxnSegment) closeSeg() { - if sn.Seg != nil { - sn.Seg.Close() - sn.Seg = nil +func (s *Segment) reopenIdx(dir string) (err error) { + s.closeIdx() + if s.Decompressor == nil { + return nil } -} -func (sn *TxnSegment) close() { - sn.closeSeg() - sn.closeIdx() -} - -func (sn *TxnSegment) openFiles() []string { - var files []string - if sn.Seg.IsOpen() { - files = append(files, sn.Seg.FilePath()) - } + for _, fileName := range s.Type().IdxFileNames(s.version, s.from, s.to) { + index, err := recsplit.OpenIndex(filepath.Join(dir, fileName)) - if sn.IdxTxnHash != nil && sn.IdxTxnHash.IsOpen() { - files = append(files, sn.IdxTxnHash.FilePath()) - } + if err != nil { + return fmt.Errorf("%w, fileName: %s", err, fileName) + } - if sn.IdxTxnHash2BlockNum != nil && sn.IdxTxnHash2BlockNum.IsOpen() { - files = append(files, sn.IdxTxnHash2BlockNum.FilePath()) + s.indexes = append(s.indexes, index) } - return files -} - -func (sn *TxnSegment) reopenSeg(dir string) (err error) { - sn.closeSeg() - fileName := snaptype.SegmentFileName(sn.version, sn.from, sn.to, snaptype.Transactions) - sn.Seg, err = compress.NewDecompressor(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - return nil -} -func (sn *TxnSegment) reopenIdx(dir string) (err error) { - sn.closeIdx() - if sn.Seg == nil { - return nil - } - fileName := snaptype.IdxFileName(sn.version, sn.from, sn.to, snaptype.Transactions.String()) - sn.IdxTxnHash, err = recsplit.OpenIndex(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - - /* - // Historically we had several times when: - // - erigon downloaded new version of .seg file - // - or didn't finish download and start indexing - // this was a "quick-fix protection" against this cases - // but now we have other protections for this cases - // let's try to remove this one - because it's not compatible with "copy datadir" and "restore datadir from backup" scenarios - if sn.IdxTxnHash.ModTime().Before(sn.Seg.ModTime()) { - log.Trace("[snapshots] skip index because it modify time is ahead before .seg file", "name", sn.IdxTxnHash.FileName()) - //Index has been created before the segment file, needs to be ignored (and rebuilt) as inconsistent - sn.IdxTxnHash.Close() - sn.IdxTxnHash = nil - } - */ - - fileName = snaptype.IdxFileName(sn.version, sn.from, sn.to, snaptype.Transactions2Block.String()) - sn.IdxTxnHash2BlockNum, err = recsplit.OpenIndex(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } return nil } -func (sn *TxnSegment) reopenIdxIfNeed(dir string, optimistic bool) (err error) { - if sn.IdxTxnHash != nil && sn.IdxTxnHash2BlockNum != nil { - return nil - } - err = sn.reopenIdx(dir) - if err != nil { - if !errors.Is(err, os.ErrNotExist) { - if optimistic { - log.Warn("[snapshots] open index", "err", err) - } else { - return err - } - } - } - return nil +func (sn *Segment) mappedHeaderSnapshot() *silkworm.MappedHeaderSnapshot { + segmentRegion := silkworm.NewMemoryMappedRegion(sn.FilePath(), sn.DataHandle(), sn.Size()) + idxRegion := silkworm.NewMemoryMappedRegion(sn.Index().FilePath(), sn.Index().DataHandle(), sn.Index().Size()) + return silkworm.NewMappedHeaderSnapshot(segmentRegion, idxRegion) } -type headerSegments struct { - lock sync.RWMutex - segments []*HeaderSegment +func (sn *Segment) mappedBodySnapshot() *silkworm.MappedBodySnapshot { + segmentRegion := silkworm.NewMemoryMappedRegion(sn.FilePath(), sn.DataHandle(), sn.Size()) + idxRegion := silkworm.NewMemoryMappedRegion(sn.Index().FilePath(), sn.Index().DataHandle(), sn.Index().Size()) + return silkworm.NewMappedBodySnapshot(segmentRegion, idxRegion) } -func (s *headerSegments) View(f func(segments []*HeaderSegment) error) error { - s.lock.RLock() - defer s.lock.RUnlock() - return f(s.segments) +func (sn *Segment) mappedTxnSnapshot() *silkworm.MappedTxnSnapshot { + segmentRegion := silkworm.NewMemoryMappedRegion(sn.FilePath(), sn.DataHandle(), sn.Size()) + idxTxnHash := sn.Index(coresnaptype.Indexes.TxnHash) + idxTxnHashRegion := silkworm.NewMemoryMappedRegion(idxTxnHash.FilePath(), idxTxnHash.DataHandle(), idxTxnHash.Size()) + idxTxnHash2BlockNum := sn.Index(coresnaptype.Indexes.TxnHash2BlockNum) + idxTxnHash2BlockRegion := silkworm.NewMemoryMappedRegion(idxTxnHash2BlockNum.FilePath(), idxTxnHash2BlockNum.DataHandle(), idxTxnHash2BlockNum.Size()) + return silkworm.NewMappedTxnSnapshot(segmentRegion, idxTxnHashRegion, idxTxnHash2BlockRegion) } -type bodySegments struct { - lock sync.RWMutex - segments []*BodySegment -} +// headers +// value: first_byte_of_header_hash + header_rlp +// header_hash -> headers_segment_offset -func (s *bodySegments) View(f func([]*BodySegment) error) error { - s.lock.RLock() - defer s.lock.RUnlock() - return f(s.segments) -} -func (s *bodySegments) ViewSegment(blockNum uint64, f func(*BodySegment) error) (found bool, err error) { - s.lock.RLock() - defer s.lock.RUnlock() - for _, seg := range s.segments { - if !(blockNum >= seg.from && blockNum < seg.to) { - continue - } - return true, f(seg) - } - return false, nil -} +// bodies +// value: rlp(types.BodyForStorage) +// block_num_u64 -> bodies_segment_offset + +// transactions +// value: first_byte_of_transaction_hash + sender_address + transaction_rlp +// transaction_hash -> transactions_segment_offset +// transaction_hash -> block_number -type txnSegments struct { +type segments struct { lock sync.RWMutex - segments []*TxnSegment + segments []*Segment } -func (s *txnSegments) View(f func([]*TxnSegment) error) error { +func (s *segments) View(f func(segments []*Segment) error) error { s.lock.RLock() defer s.lock.RUnlock() return f(s.segments) } -func (s *txnSegments) ViewSegment(blockNum uint64, f func(*TxnSegment) error) (found bool, err error) { + +func (s *segments) Segment(blockNum uint64, f func(*Segment) error) (found bool, err error) { s.lock.RLock() defer s.lock.RUnlock() for _, seg := range s.segments { @@ -372,15 +259,13 @@ type RoSnapshots struct { indicesReady atomic.Bool segmentsReady atomic.Bool - Headers *headerSegments - Bodies *bodySegments - Txs *txnSegments + types []snaptype.Type + segments btree.Map[snaptype.Enum, *segments] dir string segmentsMax atomic.Uint64 // all types of .seg files are available - up to this number idxMax atomic.Uint64 // all types of .idx files are available - up to this number cfg ethconfig.BlocksFreezing - version uint8 logger log.Logger // allows for pruning segments - this is the min availible segment @@ -392,11 +277,22 @@ type RoSnapshots struct { // - all snapshots of given blocks range must exist - to make this blocks range available // - gaps are not allowed // - segment have [from:to) semantic -func NewRoSnapshots(cfg ethconfig.BlocksFreezing, snapDir string, version uint8, logger log.Logger) *RoSnapshots { - return &RoSnapshots{dir: snapDir, cfg: cfg, version: version, Headers: &headerSegments{}, Bodies: &bodySegments{}, Txs: &txnSegments{}, logger: logger} +func NewRoSnapshots(cfg ethconfig.BlocksFreezing, snapDir string, segmentsMin uint64, logger log.Logger) *RoSnapshots { + return newRoSnapshots(cfg, snapDir, coresnaptype.BlockSnapshotTypes, segmentsMin, logger) +} + +func newRoSnapshots(cfg ethconfig.BlocksFreezing, snapDir string, types []snaptype.Type, segmentsMin uint64, logger log.Logger) *RoSnapshots { + var segs btree.Map[snaptype.Enum, *segments] + for _, snapType := range types { + segs.Set(snapType.Enum(), &segments{}) + } + + s := &RoSnapshots{dir: snapDir, cfg: cfg, segments: segs, logger: logger, types: types} + s.segmentsMin.Store(segmentsMin) + + return s } -func (s *RoSnapshots) Version() uint8 { return s.version } func (s *RoSnapshots) Cfg() ethconfig.BlocksFreezing { return s.cfg } func (s *RoSnapshots) Dir() string { return s.dir } func (s *RoSnapshots) SegmentsReady() bool { return s.segmentsReady.Load() } @@ -415,8 +311,8 @@ func (s *RoSnapshots) BlocksAvailable() uint64 { func (s *RoSnapshots) LogStat(label string) { var m runtime.MemStats dbg.ReadMemStats(&m) - s.logger.Info(fmt.Sprintf("[snapshots:%s] Blocks Stat", label), - "blocks", fmt.Sprintf("%dk", (s.BlocksAvailable()+1)/1000), + s.logger.Info(fmt.Sprintf("[snapshots:%s] Stat", label), + "blocks", fmt.Sprintf("%dk", (s.SegmentsMax()+1)/1000), "indices", fmt.Sprintf("%dk", (s.IndicesMax()+1)/1000), "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys)) } @@ -428,100 +324,107 @@ func (s *RoSnapshots) EnsureExpectedBlocksAreAvailable(cfg *snapcfg.Cfg) error { return nil } -// DisableReadAhead - usage: `defer d.EnableReadAhead().DisableReadAhead()`. Please don't use this funcs without `defer` to avoid leak. -func (s *RoSnapshots) DisableReadAhead() { - s.Headers.lock.RLock() - defer s.Headers.lock.RUnlock() - s.Bodies.lock.RLock() - defer s.Bodies.lock.RUnlock() - s.Txs.lock.RLock() - defer s.Txs.lock.RUnlock() - for _, sn := range s.Headers.segments { - sn.seg.DisableReadAhead() - } - for _, sn := range s.Bodies.segments { - sn.seg.DisableReadAhead() - } - for _, sn := range s.Txs.segments { - sn.Seg.DisableReadAhead() +func (s *RoSnapshots) Types() []snaptype.Type { return s.types } +func (s *RoSnapshots) HasType(in snaptype.Type) bool { + for _, t := range s.types { + if t.Enum() == in.Enum() { + return true + } } + return false +} + +// DisableReadAhead - usage: `defer d.EnableReadAhead().DisableReadAhead()`. Please don't use this funcs without `defer` to avoid leak. +func (s *RoSnapshots) DisableReadAhead() *RoSnapshots { + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + value.lock.RLock() + defer value.lock.RUnlock() + for _, sn := range value.segments { + sn.DisableReadAhead() + } + return true + }) + + return s } + func (s *RoSnapshots) EnableReadAhead() *RoSnapshots { - s.Headers.lock.RLock() - defer s.Headers.lock.RUnlock() - s.Bodies.lock.RLock() - defer s.Bodies.lock.RUnlock() - s.Txs.lock.RLock() - defer s.Txs.lock.RUnlock() - for _, sn := range s.Headers.segments { - sn.seg.EnableReadAhead() - } - for _, sn := range s.Bodies.segments { - sn.seg.EnableReadAhead() - } - for _, sn := range s.Txs.segments { - sn.Seg.EnableReadAhead() - } + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + value.lock.RLock() + defer value.lock.RUnlock() + for _, sn := range value.segments { + sn.EnableReadAhead() + } + return true + }) + return s } + func (s *RoSnapshots) EnableMadvWillNeed() *RoSnapshots { - s.Headers.lock.RLock() - defer s.Headers.lock.RUnlock() - s.Bodies.lock.RLock() - defer s.Bodies.lock.RUnlock() - s.Txs.lock.RLock() - defer s.Txs.lock.RUnlock() - for _, sn := range s.Headers.segments { - sn.seg.EnableWillNeed() - } - for _, sn := range s.Bodies.segments { - sn.seg.EnableWillNeed() - } - for _, sn := range s.Txs.segments { - sn.Seg.EnableWillNeed() - } + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + value.lock.RLock() + defer value.lock.RUnlock() + for _, sn := range value.segments { + sn.EnableMadvWillNeed() + } + return true + }) return s } + func (s *RoSnapshots) EnableMadvNormal() *RoSnapshots { - s.Headers.lock.RLock() - defer s.Headers.lock.RUnlock() - s.Bodies.lock.RLock() - defer s.Bodies.lock.RUnlock() - s.Txs.lock.RLock() - defer s.Txs.lock.RUnlock() - for _, sn := range s.Headers.segments { - sn.seg.EnableMadvNormal() - } - for _, sn := range s.Bodies.segments { - sn.seg.EnableMadvNormal() - } - for _, sn := range s.Txs.segments { - sn.Seg.EnableMadvNormal() - } + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + value.lock.RLock() + defer value.lock.RUnlock() + for _, sn := range value.segments { + sn.EnableMadvNormal() + } + return true + }) return s } +// minimax of existing indices func (s *RoSnapshots) idxAvailability() uint64 { - var headers, bodies, txs uint64 - for _, seg := range s.Headers.segments { - if seg.idxHeaderHash == nil { - break - } - headers = seg.to - 1 - } - for _, seg := range s.Bodies.segments { - if seg.idxBodyNumber == nil { - break + // Use-Cases: + // 1. developers can add new types in future. and users will not have files of this type + // 2. some types are network-specific. example: borevents exists only on Bor-consensus networks + // 3. user can manually remove 1 .idx file: `rm snapshots/v1-type1-0000-1000.idx` + // 4. user can manually remove all .idx files of given type: `rm snapshots/*type1*.idx` + // 5. file-types may have different height: 10 headers, 10 bodies, 9 trancasctions (for example if `kill -9` came during files building/merge). still need index all 3 types. + amount := 0 + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + if len(value.segments) == 0 || !s.HasType(segtype.Type()) { + return true + } + amount++ + return true + }) + + maximums := make([]uint64, amount) + var i int + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + if len(value.segments) == 0 || !s.HasType(segtype.Type()) { + return true } - bodies = seg.to - 1 - } - for _, seg := range s.Txs.segments { - if seg.IdxTxnHash == nil || seg.IdxTxnHash2BlockNum == nil { - break + + for _, seg := range value.segments { + if !seg.IsIndexed() { + break + } + + maximums[i] = seg.to - 1 } - txs = seg.to - 1 + + i++ + return true + }) + + if len(maximums) == 0 { + return 0 } - return cmp.Min(headers, cmp.Min(bodies, txs)) + return slices.Min(maximums) } // OptimisticReopenWithDB - optimistically open snapshots (ignoring error), useful at App startup because: @@ -538,245 +441,152 @@ func (s *RoSnapshots) OptimisticReopenWithDB(db kv.RoDB) { } func (s *RoSnapshots) Files() (list []string) { - s.Headers.lock.RLock() - defer s.Headers.lock.RUnlock() - s.Bodies.lock.RLock() - defer s.Bodies.lock.RUnlock() - s.Txs.lock.RLock() - defer s.Txs.lock.RUnlock() maxBlockNumInFiles := s.BlocksAvailable() - for _, seg := range s.Bodies.segments { - if seg.seg == nil { - continue - } - if seg.from > maxBlockNumInFiles { - continue - } - _, fName := filepath.Split(seg.seg.FilePath()) - list = append(list, fName) - } - for _, seg := range s.Headers.segments { - if seg.seg == nil { - continue - } - if seg.from > maxBlockNumInFiles { - continue - } - _, fName := filepath.Split(seg.seg.FilePath()) - list = append(list, fName) - } - for _, seg := range s.Txs.segments { - if seg.Seg == nil { - continue - } - if seg.from > maxBlockNumInFiles { - continue + + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + value.lock.RLock() + defer value.lock.RUnlock() + + for _, seg := range value.segments { + if seg.Decompressor == nil { + continue + } + if seg.from > maxBlockNumInFiles { + continue + } + list = append(list, seg.FileName()) } - _, fName := filepath.Split(seg.Seg.FilePath()) - list = append(list, fName) - } + return true + }) + slices.Sort(list) return list } func (s *RoSnapshots) OpenFiles() (list []string) { - s.Headers.lock.RLock() - defer s.Headers.lock.RUnlock() - s.Bodies.lock.RLock() - defer s.Bodies.lock.RUnlock() - s.Txs.lock.RLock() - defer s.Txs.lock.RUnlock() + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + value.lock.RLock() + defer value.lock.RUnlock() - for _, header := range s.Headers.segments { - list = append(list, header.openFiles()...) - } - - for _, body := range s.Bodies.segments { - list = append(list, body.openFiles()...) - } - - for _, txs := range s.Txs.segments { - list = append(list, txs.openFiles()...) - } + for _, seg := range value.segments { + list = append(list, seg.openFiles()...) + } + return true + }) return list } // ReopenList stops on optimistic=false, continue opening files on optimistic=true func (s *RoSnapshots) ReopenList(fileNames []string, optimistic bool) error { - return s.rebuildSegments(fileNames, true, optimistic) + if err := s.rebuildSegments(fileNames, true, optimistic); err != nil { + return err + } + return nil } func (s *RoSnapshots) InitSegments(fileNames []string) error { - return s.rebuildSegments(fileNames, false, true) + if err := s.rebuildSegments(fileNames, false, true); err != nil { + return err + } + return nil +} + +func (s *RoSnapshots) lockSegments() { + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + value.lock.Lock() + return true + }) +} + +func (s *RoSnapshots) unlockSegments() { + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + value.lock.Unlock() + return true + }) } func (s *RoSnapshots) rebuildSegments(fileNames []string, open bool, optimistic bool) error { - s.Headers.lock.Lock() - defer s.Headers.lock.Unlock() - s.Bodies.lock.Lock() - defer s.Bodies.lock.Unlock() - s.Txs.lock.Lock() - defer s.Txs.lock.Unlock() + s.lockSegments() + defer s.unlockSegments() s.closeWhatNotInList(fileNames) var segmentsMax uint64 var segmentsMaxSet bool -Loop: + for _, fName := range fileNames { - f, ok := snaptype.ParseFileName(s.dir, fName) + f, _, ok := snaptype.ParseFileName(s.dir, fName) if !ok { continue } - var processed bool = true - switch f.T { - case snaptype.Headers: - var sn *HeaderSegment - var exists bool - for _, sn2 := range s.Headers.segments { - if sn2.seg == nil { // it's ok if some segment was not able to open - continue - } - if fName == sn2.seg.FileName() { - sn = sn2 - exists = true - break - } - } - if !exists { - sn = &HeaderSegment{version: f.Version, Range: Range{f.From, f.To}} - } + if !s.HasType(f.Type) { + continue + } - if open { - if err := sn.reopenSeg(s.dir); err != nil { - if errors.Is(err, os.ErrNotExist) { - if optimistic { - continue Loop - } else { - break Loop - } - } - if optimistic { - s.logger.Warn("[snapshots] open segment", "err", err) - continue Loop - } else { - return err - } - } - } + segtype, ok := s.segments.Get(f.Type.Enum()) + if !ok { + segtype = &segments{} + s.segments.Set(f.Type.Enum(), segtype) + segtype.lock.Lock() // this will be unlocked by defer s.unlockSegments() above + } - if !exists { - // it's possible to iterate over .seg file even if you don't have index - // then make segment available even if index open may fail - s.Headers.segments = append(s.Headers.segments, sn) + var sn *Segment + var exists bool + for _, sn2 := range segtype.segments { + if sn2.Decompressor == nil { // it's ok if some segment was not able to open + continue } - if open { - if err := sn.reopenIdxIfNeed(s.dir, optimistic); err != nil { - return err - } - } - case snaptype.Bodies: - var sn *BodySegment - var exists bool - for _, sn2 := range s.Bodies.segments { - if sn2.seg == nil { // it's ok if some segment was not able to open - continue - } - if fName == sn2.seg.FileName() { - sn = sn2 - exists = true - break - } - } - if !exists { - sn = &BodySegment{version: f.Version, Range: Range{f.From, f.To}} + if fName == sn2.FileName() { + sn = sn2 + exists = true + break } + } - if open { - if err := sn.reopenSeg(s.dir); err != nil { - if errors.Is(err, os.ErrNotExist) { - if optimistic { - continue Loop - } else { - break Loop - } - } + if !exists { + sn = &Segment{segType: f.Type, version: f.Version, Range: Range{f.From, f.To}} + } + + if open { + if err := sn.reopenSeg(s.dir); err != nil { + if errors.Is(err, os.ErrNotExist) { if optimistic { - s.logger.Warn("[snapshots] open segment", "err", err) - continue Loop + continue } else { - return err + break } } - } - if !exists { - s.Bodies.segments = append(s.Bodies.segments, sn) - } - - if open { - if err := sn.reopenIdxIfNeed(s.dir, optimistic); err != nil { - return err - } - } - case snaptype.Transactions: - var sn *TxnSegment - var exists bool - for _, sn2 := range s.Txs.segments { - if sn2.Seg == nil { // it's ok if some segment was not able to open + if optimistic { + s.logger.Warn("[snapshots] open segment", "err", err) continue - } - if fName == sn2.Seg.FileName() { - sn = sn2 - exists = true - break - } - } - if !exists { - sn = &TxnSegment{version: f.Version, Range: Range{f.From, f.To}} - } - - if open { - if err := sn.reopenSeg(s.dir); err != nil { - if errors.Is(err, os.ErrNotExist) { - if optimistic { - continue Loop - } else { - break Loop - } - } - if optimistic { - s.logger.Warn("[snapshots] open segment", "err", err) - continue Loop - } else { - return err - } + } else { + return err } } + } - if !exists { - s.Txs.segments = append(s.Txs.segments, sn) - } + if !exists { + // it's possible to iterate over .seg file even if you don't have index + // then make segment available even if index open may fail + segtype.segments = append(segtype.segments, sn) + } - if open { - if err := sn.reopenIdxIfNeed(s.dir, optimistic); err != nil { - return err - } + if open { + if err := sn.reopenIdxIfNeed(s.dir, optimistic); err != nil { + return err } - default: - processed = false } - if processed { - if f.To > 0 { - segmentsMax = f.To - 1 - } else { - segmentsMax = 0 - } - segmentsMaxSet = true + if f.To > 0 { + segmentsMax = f.To - 1 + } else { + segmentsMax = 0 } + segmentsMaxSet = true } + if segmentsMaxSet { s.segmentsMax.Store(segmentsMax) } @@ -787,26 +597,20 @@ Loop: return nil } -func (s *RoSnapshots) Ranges() (ranges []Range) { +func (s *RoSnapshots) Ranges() []Range { view := s.View() defer view.Close() - - for _, sn := range view.Headers() { - ranges = append(ranges, sn.Range) - } - return ranges + return view.Ranges() } func (s *RoSnapshots) OptimisticalyReopenFolder() { _ = s.ReopenFolder() } func (s *RoSnapshots) OptimisticalyReopenWithDB(db kv.RoDB) { _ = s.ReopenWithDB(db) } func (s *RoSnapshots) ReopenFolder() error { - return s.ReopenSegments(snaptype.BlockSnapshotTypes) + return s.ReopenSegments(s.Types(), false) } -func (s *RoSnapshots) ReopenSegments(types []snaptype.Type) error { - files, _, err := segments(s.dir, s.version, 0, func(dir string, in []snaptype.FileInfo) (res []snaptype.FileInfo) { - return typeOfSegmentsMustExist(dir, in, types) - }) +func (s *RoSnapshots) ReopenSegments(types []snaptype.Type, allowGaps bool) error { + files, _, err := typedSegments(s.dir, s.segmentsMin.Load(), types, allowGaps) if err != nil { return err @@ -833,207 +637,111 @@ func (s *RoSnapshots) ReopenWithDB(db kv.RoDB) error { } func (s *RoSnapshots) Close() { - s.Headers.lock.Lock() - defer s.Headers.lock.Unlock() - s.Bodies.lock.Lock() - defer s.Bodies.lock.Unlock() - s.Txs.lock.Lock() - defer s.Txs.lock.Unlock() + if s == nil { + return + } + s.lockSegments() + defer s.unlockSegments() s.closeWhatNotInList(nil) } func (s *RoSnapshots) closeWhatNotInList(l []string) { -Loop1: - for i, sn := range s.Headers.segments { - if sn.seg == nil { - continue Loop1 - } - _, name := filepath.Split(sn.seg.FilePath()) - for _, fName := range l { - if fName == name { - continue Loop1 + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + Segments: + for i, sn := range value.segments { + if sn.Decompressor == nil { + continue Segments } - } - sn.close() - s.Headers.segments[i] = nil - } -Loop2: - for i, sn := range s.Bodies.segments { - if sn.seg == nil { - continue Loop2 - } - _, name := filepath.Split(sn.seg.FilePath()) - for _, fName := range l { - if fName == name { - continue Loop2 + _, name := filepath.Split(sn.FilePath()) + for _, fName := range l { + if fName == name { + continue Segments + } } + sn.close() + value.segments[i] = nil } - sn.close() - s.Bodies.segments[i] = nil - } -Loop3: - for i, sn := range s.Txs.segments { - if sn.Seg == nil { - continue Loop3 + return true + }) + + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + var i int + for i = 0; i < len(value.segments) && value.segments[i] != nil && value.segments[i].Decompressor != nil; i++ { } - _, name := filepath.Split(sn.Seg.FilePath()) - for _, fName := range l { - if fName == name { - continue Loop3 + tail := value.segments[i:] + value.segments = value.segments[:i] + for i = 0; i < len(tail); i++ { + if tail[i] != nil { + tail[i].close() + tail[i] = nil } } - sn.close() - s.Txs.segments[i] = nil - } - var i int - for i = 0; i < len(s.Headers.segments) && s.Headers.segments[i] != nil && s.Headers.segments[i].seg != nil; i++ { - } - tail := s.Headers.segments[i:] - s.Headers.segments = s.Headers.segments[:i] - for i = 0; i < len(tail); i++ { - if tail[i] != nil { - tail[i].close() - tail[i] = nil - } - } + return true + }) +} - for i = 0; i < len(s.Bodies.segments) && s.Bodies.segments[i] != nil && s.Bodies.segments[i].seg != nil; i++ { - } - tailB := s.Bodies.segments[i:] - s.Bodies.segments = s.Bodies.segments[:i] - for i = 0; i < len(tailB); i++ { - if tailB[i] != nil { - tailB[i].close() - tailB[i] = nil - } - } +func (s *RoSnapshots) removeOverlapsAfterMerge() error { + s.lockSegments() + defer s.unlockSegments() - for i = 0; i < len(s.Txs.segments) && s.Txs.segments[i] != nil && s.Txs.segments[i].Seg != nil; i++ { + list, err := snaptype.Segments(s.dir) + + if err != nil { + return err } - tailC := s.Txs.segments[i:] - s.Txs.segments = s.Txs.segments[:i] - for i = 0; i < len(tailC); i++ { - if tailC[i] != nil { - tailC[i].close() - tailC[i] = nil + + if _, toRemove := findOverlaps(list); len(toRemove) > 0 { + filesToRemove := make([]string, 0, len(toRemove)) + + for _, info := range toRemove { + filesToRemove = append(filesToRemove, info.Path) } - } -} -func (s *RoSnapshots) PrintDebug() { - s.Headers.lock.RLock() - defer s.Headers.lock.RUnlock() - s.Bodies.lock.RLock() - defer s.Bodies.lock.RUnlock() - s.Txs.lock.RLock() - defer s.Txs.lock.RUnlock() - fmt.Println(" == Snapshots, Header") - for _, sn := range s.Headers.segments { - fmt.Printf("%d, %t\n", sn.from, sn.idxHeaderHash == nil) - } - fmt.Println(" == Snapshots, Body") - for _, sn := range s.Bodies.segments { - fmt.Printf("%d, %t\n", sn.from, sn.idxBodyNumber == nil) - } - fmt.Println(" == Snapshots, Txs") - for _, sn := range s.Txs.segments { - fmt.Printf("%d, %t, %t\n", sn.from, sn.IdxTxnHash == nil, sn.IdxTxnHash2BlockNum == nil) + removeOldFiles(filesToRemove, s.dir) } + + return nil } -func (s *RoSnapshots) AddSnapshotsToSilkworm(silkwormInstance *silkworm.Silkworm) error { - mappedHeaderSnapshots := make([]*silkworm.MappedHeaderSnapshot, 0) - err := s.Headers.View(func(segments []*HeaderSegment) error { - for _, headerSegment := range segments { - mappedHeaderSnapshots = append(mappedHeaderSnapshots, headerSegment.mappedSnapshot()) - } +func (s *RoSnapshots) buildMissedIndicesIfNeed(ctx context.Context, logPrefix string, notifier services.DBEventNotifier, dirs datadir.Dirs, cc *chain.Config, logger log.Logger) error { + if s.IndicesMax() >= s.SegmentsMax() { return nil - }) - if err != nil { - return err } - - mappedBodySnapshots := make([]*silkworm.MappedBodySnapshot, 0) - err = s.Bodies.View(func(segments []*BodySegment) error { - for _, bodySegment := range segments { - mappedBodySnapshots = append(mappedBodySnapshots, bodySegment.mappedSnapshot()) - } - return nil - }) - if err != nil { - return err + if !s.Cfg().Produce && s.IndicesMax() == 0 { + return fmt.Errorf("please remove --snap.stop, erigon can't work without creating basic indices") } - - mappedTxnSnapshots := make([]*silkworm.MappedTxnSnapshot, 0) - err = s.Txs.View(func(segments []*TxnSegment) error { - for _, txnSegment := range segments { - mappedTxnSnapshots = append(mappedTxnSnapshots, txnSegment.mappedSnapshot()) - } + if !s.Cfg().Produce { return nil - }) - if err != nil { - return err } - - if len(mappedHeaderSnapshots) != len(mappedBodySnapshots) || len(mappedBodySnapshots) != len(mappedTxnSnapshots) { - return fmt.Errorf("addSnapshots: the number of headers/bodies/txs snapshots must be the same") + if !s.SegmentsReady() { + return fmt.Errorf("not all snapshot segments are available") } + s.LogStat("missed-idx") - for i := 0; i < len(mappedHeaderSnapshots); i++ { - mappedSnapshot := &silkworm.MappedChainSnapshot{ - Headers: mappedHeaderSnapshots[i], - Bodies: mappedBodySnapshots[i], - Txs: mappedTxnSnapshots[i], - } - err := silkwormInstance.AddSnapshot(mappedSnapshot) - if err != nil { - return err - } + // wait for Downloader service to download all expected snapshots + indexWorkers := estimate.IndexSnapshot.Workers() + if err := s.buildMissedIndices(logPrefix, ctx, dirs, cc, indexWorkers, logger); err != nil { + return fmt.Errorf("can't build missed indices: %w", err) } + if err := s.ReopenFolder(); err != nil { + return err + } + s.LogStat("missed-idx:reopen") + if notifier != nil { + notifier.OnNewSnapshot() + } return nil } -func buildIdx(ctx context.Context, sn snaptype.FileInfo, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) error { - //_, fName := filepath.Split(sn.Path) - //log.Info("[snapshots] build idx", "file", fName) - switch sn.T { - case snaptype.Headers: - if err := HeadersIdx(ctx, sn.Path, sn.Version, sn.From, tmpDir, p, lvl, logger); err != nil { - return err - } - case snaptype.Bodies: - if err := BodiesIdx(ctx, sn.Path, sn.From, tmpDir, p, lvl, logger); err != nil { - return err - } - case snaptype.Transactions: - dir, _ := filepath.Split(sn.Path) - if err := TransactionsIdx(ctx, chainConfig, sn.Version, sn.From, sn.To, dir, tmpDir, p, lvl, logger); err != nil { - return err - } - case snaptype.BorEvents: - dir, _ := filepath.Split(sn.Path) - if err := BorEventsIdx(ctx, sn.Path, sn.Version, sn.From, sn.To, dir, tmpDir, p, lvl, logger); err != nil { - return err - } - case snaptype.BorSpans: - dir, _ := filepath.Split(sn.Path) - if err := BorSpansIdx(ctx, sn.Path, sn.Version, sn.From, sn.To, dir, tmpDir, p, lvl, logger); err != nil { - return err - } +func (s *RoSnapshots) buildMissedIndices(logPrefix string, ctx context.Context, dirs datadir.Dirs, chainConfig *chain.Config, workers int, logger log.Logger) error { + if s == nil { + return nil } - //log.Info("[snapshots] finish build idx", "file", fName) - return nil -} -func BuildMissedIndices(logPrefix string, ctx context.Context, dirs datadir.Dirs, version uint8, minIndex uint64, chainConfig *chain.Config, workers int, logger log.Logger) error { dir, tmpDir := dirs.Snap, dirs.Tmp //log.Log(lvl, "[snapshots] Build indices", "from", min) - segments, _, err := Segments(dir, version, minIndex) - if err != nil { - return err - } ps := background.NewProgressSet() startIndexingTime := time.Now() @@ -1060,25 +768,31 @@ func BuildMissedIndices(logPrefix string, ctx context.Context, dirs datadir.Dirs } }() - for _, t := range snaptype.BlockSnapshotTypes { - for index := range segments { - segment := segments[index] - if segment.T != t { - continue - } - if hasIdxFile(segment, logger) { + s.segments.Scan(func(segtype snaptype.Enum, value *segments) bool { + for _, segment := range value.segments { + info := segment.FileInfo(dir) + + if segtype.HasIndexFiles(info, logger) { continue } - sn := segment + + segment.closeIdx() + g.Go(func() error { p := &background.Progress{} ps.Add(p) - defer notifySegmentIndexingFinished(sn.Name()) + defer notifySegmentIndexingFinished(info.Name()) defer ps.Delete(p) - return buildIdx(gCtx, sn, chainConfig, tmpDir, p, log.LvlInfo, logger) + if err := segtype.BuildIndexes(gCtx, info, chainConfig, tmpDir, p, log.LvlInfo, logger); err != nil { + return fmt.Errorf("%s: %w", info.Name(), err) + } + return nil }) } - } + + return true + }) + go func() { defer close(finish) g.Wait() @@ -1093,57 +807,90 @@ func BuildMissedIndices(logPrefix string, ctx context.Context, dirs datadir.Dirs } } -func BuildBorMissedIndices(logPrefix string, ctx context.Context, dirs datadir.Dirs, version uint8, minIndex uint64, chainConfig *chain.Config, workers int, logger log.Logger) error { - dir, tmpDir := dirs.Snap, dirs.Tmp +func (s *RoSnapshots) PrintDebug() { + s.lockSegments() + defer s.unlockSegments() + + s.segments.Scan(func(key snaptype.Enum, value *segments) bool { + fmt.Println(" == [dbg] Snapshots,", key.String()) + for _, sn := range value.segments { + args := make([]any, 0, len(sn.Type().Indexes())+1) + args = append(args, sn.from) + for _, index := range sn.Type().Indexes() { + args = append(args, sn.Index(index) != nil) + } + fmt.Println(args...) + } + return true + }) +} - segments, _, err := BorSegments(dir, version, minIndex) - if err != nil { - return err +func (s *RoSnapshots) AddSnapshotsToSilkworm(silkwormInstance *silkworm.Silkworm) error { + mappedHeaderSnapshots := make([]*silkworm.MappedHeaderSnapshot, 0) + if headers, ok := s.segments.Get(coresnaptype.Enums.Headers); ok { + err := headers.View(func(segments []*Segment) error { + for _, headerSegment := range segments { + mappedHeaderSnapshots = append(mappedHeaderSnapshots, headerSegment.mappedHeaderSnapshot()) + } + return nil + }) + if err != nil { + return err + } } - ps := background.NewProgressSet() - startIndexingTime := time.Now() - g, gCtx := errgroup.WithContext(ctx) - g.SetLimit(workers) - for _, t := range snaptype.BorSnapshotTypes { - for _, segment := range segments { - if segment.T != t { - continue - } - if hasIdxFile(segment, logger) { - continue + mappedBodySnapshots := make([]*silkworm.MappedBodySnapshot, 0) + if bodies, ok := s.segments.Get(coresnaptype.Enums.Bodies); ok { + err := bodies.View(func(segments []*Segment) error { + for _, bodySegment := range segments { + mappedBodySnapshots = append(mappedBodySnapshots, bodySegment.mappedBodySnapshot()) } - sn := segment - g.Go(func() error { - p := &background.Progress{} - ps.Add(p) - defer notifySegmentIndexingFinished(sn.Name()) - defer ps.Delete(p) - return buildIdx(gCtx, sn, chainConfig, tmpDir, p, log.LvlInfo, logger) - }) + return nil + }) + if err != nil { + return err + } + } + + mappedTxnSnapshots := make([]*silkworm.MappedTxnSnapshot, 0) + if txs, ok := s.segments.Get(coresnaptype.Enums.Transactions); ok { + err := txs.View(func(segments []*Segment) error { + for _, txnSegment := range segments { + mappedTxnSnapshots = append(mappedTxnSnapshots, txnSegment.mappedTxnSnapshot()) + } + return nil + }) + if err != nil { + return err } } - finish := make(chan struct{}) - go func() { - defer close(finish) - g.Wait() - }() - logEvery := time.NewTicker(20 * time.Second) - defer logEvery.Stop() - for { - select { - case <-finish: - return g.Wait() - case <-ctx.Done(): - return ctx.Err() - case <-logEvery.C: - var m runtime.MemStats - dbg.ReadMemStats(&m) - sendDiagnostics(startIndexingTime, ps.DiagnossticsData(), m.Alloc, m.Sys) - logger.Info(fmt.Sprintf("[%s] Indexing", logPrefix), "progress", ps.String(), "total-indexing-time", time.Since(startIndexingTime).Round(time.Second).String(), "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys)) + if len(mappedHeaderSnapshots) != len(mappedBodySnapshots) || len(mappedBodySnapshots) != len(mappedTxnSnapshots) { + return fmt.Errorf("addSnapshots: the number of headers/bodies/txs snapshots must be the same") + } + + for i := 0; i < len(mappedHeaderSnapshots); i++ { + mappedSnapshot := &silkworm.MappedChainSnapshot{ + Headers: mappedHeaderSnapshots[i], + Bodies: mappedBodySnapshots[i], + Txs: mappedTxnSnapshots[i], + } + err := silkwormInstance.AddSnapshot(mappedSnapshot) + if err != nil { + return err } } + + return nil +} + +func buildIdx(ctx context.Context, sn snaptype.FileInfo, chainConfig *chain.Config, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) error { + //log.Info("[snapshots] build idx", "file", sn.Name()) + if err := sn.Type.BuildIndexes(ctx, sn, chainConfig, tmpDir, p, lvl, logger); err != nil { + return fmt.Errorf("buildIdx: %s: %s", sn.Type, err) + } + //log.Info("[snapshots] finish build idx", "file", fName) + return nil } func notifySegmentIndexingFinished(name string) { @@ -1193,24 +940,16 @@ MainLoop: continue } for _, t := range types { - p := filepath.Join(dir, snaptype.SegmentFileName(f.Version, f.From, f.To, t)) + p := filepath.Join(dir, snaptype.SegmentFileName(f.Version, f.From, f.To, t.Enum())) if !dir2.FileExist(p) { continue MainLoop } + res = append(res, f) } - res = append(res, f) } return res } -func allTypeOfSegmentsMustExist(dir string, in []snaptype.FileInfo) (res []snaptype.FileInfo) { - return typeOfSegmentsMustExist(dir, in, snaptype.BlockSnapshotTypes) -} - -func borSegmentsMustExist(dir string, in []snaptype.FileInfo) (res []snaptype.FileInfo) { - return typeOfSegmentsMustExist(dir, in, []snaptype.Type{snaptype.BorEvents, snaptype.BorSpans}) -} - // noOverlaps - keep largest ranges and avoid overlap func noOverlaps(in []snaptype.FileInfo) (res []snaptype.FileInfo) { for i := range in { @@ -1221,7 +960,7 @@ func noOverlaps(in []snaptype.FileInfo) (res []snaptype.FileInfo) { for j := i + 1; j < len(in); j++ { // if there is file with larger range - use it instead f2 := in[j] - if f.From == f.To { + if f2.From == f2.To { continue } if f2.From > f.From { @@ -1233,80 +972,135 @@ func noOverlaps(in []snaptype.FileInfo) (res []snaptype.FileInfo) { res = append(res, f) } + return res } -func SegmentsCaplin(dir string, version uint8, minBlock uint64) (res []snaptype.FileInfo, missingSnapshots []Range, err error) { - list, err := snaptype.Segments(dir, version) +func findOverlaps(in []snaptype.FileInfo) (res []snaptype.FileInfo, overlapped []snaptype.FileInfo) { + for i := 0; i < len(in); i++ { + f := in[i] + + if f.From == f.To { + overlapped = append(overlapped, f) + continue + } + + for j := i + 1; j < len(in); i, j = i+1, j+1 { // if there is file with larger range - use it instead + f2 := in[j] + + if f.Type.Enum() != f2.Type.Enum() { + break + } + + if f2.From == f2.To { + overlapped = append(overlapped, f2) + continue + } + + if f2.From > f.From && f2.To > f.To { + break + } + + if f.To >= f2.To && f.From <= f2.From { + overlapped = append(overlapped, f2) + continue + } + + if i < len(in)-1 && (f2.To >= f.To && f2.From <= f.From) { + overlapped = append(overlapped, f) + } + + f = f2 + } + + res = append(res, f) + } + + return res, overlapped +} + +func SegmentsCaplin(dir string, minBlock uint64) (res []snaptype.FileInfo, missingSnapshots []Range, err error) { + list, err := snaptype.Segments(dir) if err != nil { return nil, missingSnapshots, err } { - var l []snaptype.FileInfo + var l, lSidecars []snaptype.FileInfo var m []Range for _, f := range list { - if f.T != snaptype.BeaconBlocks { + if f.Type.Enum() != snaptype.CaplinEnums.BeaconBlocks && f.Type.Enum() != snaptype.CaplinEnums.BlobSidecars { + continue + } + if f.Type.Enum() == snaptype.CaplinEnums.BlobSidecars { + lSidecars = append(lSidecars, f) // blobs are an exception continue } l = append(l, f) } l, m = noGaps(noOverlaps(l), minBlock) + if len(m) > 0 { + lst := m[len(m)-1] + log.Debug("[snapshots] see gap", "type", snaptype.CaplinEnums.BeaconBlocks, "from", lst.from) + } res = append(res, l...) + res = append(res, lSidecars...) missingSnapshots = append(missingSnapshots, m...) } return res, missingSnapshots, nil } -func Segments(dir string, version uint8, minBlock uint64) (res []snaptype.FileInfo, missingSnapshots []Range, err error) { - return segments(dir, version, minBlock, allTypeOfSegmentsMustExist) +func Segments(dir string, minBlock uint64) (res []snaptype.FileInfo, missingSnapshots []Range, err error) { + return typedSegments(dir, minBlock, coresnaptype.BlockSnapshotTypes, false) } -func segments(dir string, version uint8, minBlock uint64, segmentsTypeCheck func(dir string, in []snaptype.FileInfo) []snaptype.FileInfo) (res []snaptype.FileInfo, missingSnapshots []Range, err error) { - list, err := snaptype.Segments(dir, version) +func typedSegments(dir string, minBlock uint64, types []snaptype.Type, allowGaps bool) (res []snaptype.FileInfo, missingSnapshots []Range, err error) { + segmentsTypeCheck := func(dir string, in []snaptype.FileInfo) (res []snaptype.FileInfo) { + return typeOfSegmentsMustExist(dir, in, types) + } + + list, err := snaptype.Segments(dir) + if err != nil { return nil, missingSnapshots, err } - { - var l []snaptype.FileInfo - var m []Range - for _, f := range list { - if f.T != snaptype.Headers { - continue + + for _, segType := range types { + { + var l []snaptype.FileInfo + var m []Range + for _, f := range list { + if f.Type.Enum() != segType.Enum() { + continue + } + l = append(l, f) } - l = append(l, f) - } - l, m = noGaps(noOverlaps(segmentsTypeCheck(dir, l)), minBlock) - res = append(res, l...) - missingSnapshots = append(missingSnapshots, m...) - } - { - var l []snaptype.FileInfo - for _, f := range list { - if f.T != snaptype.Bodies { - continue + + if allowGaps { + l = noOverlaps(segmentsTypeCheck(dir, l)) + } else { + l, m = noGaps(noOverlaps(segmentsTypeCheck(dir, l)), minBlock) } - l = append(l, f) - } - l, _ = noGaps(noOverlaps(segmentsTypeCheck(dir, l)), minBlock) - res = append(res, l...) - } - { - var l []snaptype.FileInfo - for _, f := range list { - if f.T != snaptype.Transactions { - continue + if len(m) > 0 { + lst := m[len(m)-1] + log.Debug("[snapshots] see gap", "type", segType, "from", lst.from) } - l = append(l, f) + res = append(res, l...) + missingSnapshots = append(missingSnapshots, m...) } - l, _ = noGaps(noOverlaps(segmentsTypeCheck(dir, l)), minBlock) - res = append(res, l...) } return res, missingSnapshots, nil } -func chooseSegmentEnd(from, to, blocksPerFile uint64) uint64 { +func chooseSegmentEnd(from, to uint64, snapType snaptype.Enum, chainConfig *chain.Config) uint64 { + var chainName string + + if chainConfig != nil { + chainName = chainConfig.ChainName + } + blocksPerFile := snapcfg.MergeLimit(chainName, snapType, from) + next := (from/blocksPerFile + 1) * blocksPerFile to = cmp.Min(next, to) @@ -1358,23 +1152,32 @@ func (br *BlockRetire) HasNewFrozenFiles() bool { return br.needSaveFilesListInDB.CompareAndSwap(true, false) } -func CanRetire(curBlockNum uint64, blocksInSnapshots uint64) (blockFrom, blockTo uint64, can bool) { +func CanRetire(curBlockNum uint64, blocksInSnapshots uint64, snapType snaptype.Enum, chainConfig *chain.Config) (blockFrom, blockTo uint64, can bool) { if curBlockNum <= params.FullImmutabilityThreshold { return } blockFrom = blocksInSnapshots + 1 - return canRetire(blockFrom, curBlockNum-params.FullImmutabilityThreshold) + return canRetire(blockFrom, curBlockNum-params.FullImmutabilityThreshold, snapType, chainConfig) } -func canRetire(from, to uint64) (blockFrom, blockTo uint64, can bool) { +func canRetire(from, to uint64, snapType snaptype.Enum, chainConfig *chain.Config) (blockFrom, blockTo uint64, can bool) { if to <= from { return } blockFrom = (from / 1_000) * 1_000 roundedTo1K := (to / 1_000) * 1_000 var maxJump uint64 = 1_000 - if blockFrom%snaptype.Erigon2MergeLimit == 0 { - maxJump = snaptype.Erigon2MergeLimit + + var chainName string + + if chainConfig != nil { + chainName = chainConfig.ChainName + } + + mergeLimit := snapcfg.MergeLimit(chainName, snapType, blockFrom) + + if blockFrom%mergeLimit == 0 { + maxJump = mergeLimit } else if blockFrom%100_000 == 0 { maxJump = 100_000 } else if blockFrom%10_000 == 0 { @@ -1383,8 +1186,8 @@ func canRetire(from, to uint64) (blockFrom, blockTo uint64, can bool) { //roundedTo1K := (to / 1_000) * 1_000 jump := cmp.Min(maxJump, roundedTo1K-blockFrom) switch { // only next segment sizes are allowed - case jump >= snaptype.Erigon2MergeLimit: - blockTo = blockFrom + snaptype.Erigon2MergeLimit + case jump >= mergeLimit: + blockTo = blockFrom + mergeLimit case jump >= 100_000: blockTo = blockFrom + 100_000 case jump >= 10_000: @@ -1398,6 +1201,10 @@ func canRetire(from, to uint64) (blockFrom, blockTo uint64, can bool) { } func CanDeleteTo(curBlockNum uint64, blocksInSnapshots uint64) (blockTo uint64) { + if blocksInSnapshots == 0 { + return 0 + } + if curBlockNum+999 < params.FullImmutabilityThreshold { // To prevent overflow of uint64 below return blocksInSnapshots + 1 @@ -1406,22 +1213,57 @@ func CanDeleteTo(curBlockNum uint64, blocksInSnapshots uint64) (blockTo uint64) return cmp.Min(hardLimit, blocksInSnapshots+1) } +func (br *BlockRetire) dbHasEnoughDataForBlocksRetire(ctx context.Context) (bool, error) { + // pre-check if db has enough data + var haveGap bool + if err := br.db.View(ctx, func(tx kv.Tx) error { + firstInDB, ok, err := rawdb.ReadFirstNonGenesisHeaderNumber(tx) + if err != nil { + return err + } + if !ok { + return nil + } + lastInFiles := br.snapshots().SegmentsMax() + 1 + haveGap = lastInFiles < firstInDB + if haveGap { + log.Debug("[snapshots] not enough blocks in db to create snapshots", "lastInFiles", lastInFiles, " firstBlockInDB", firstInDB, "recommendations", "it's ok to ignore this message. can fix by: downloading more files `rm datadir/snapshots/prohibit_new_downloads.lock datdir/snapshots/snapshots-lock.json`, or downloading old blocks to db `integration stage_headers --reset`") + } + return nil + }); err != nil { + return false, err + } + return !haveGap, nil +} + func (br *BlockRetire) retireBlocks(ctx context.Context, minBlockNum uint64, maxBlockNum uint64, lvl log.Lvl, seedNewSnapshots func(downloadRequest []services.DownloadRequest) error, onDelete func(l []string) error) (bool, error) { + select { + case <-ctx.Done(): + return false, ctx.Err() + default: + } + notifier, logger, blockReader, tmpDir, db, workers := br.notifier, br.logger, br.blockReader, br.tmpDir, br.db, br.workers snapshots := br.snapshots() - blockFrom, blockTo, ok := CanRetire(maxBlockNum, minBlockNum) + blockFrom, blockTo, ok := CanRetire(maxBlockNum, minBlockNum, snaptype.Unknown, br.chainConfig) if ok { + if has, err := br.dbHasEnoughDataForBlocksRetire(ctx); err != nil { + return false, err + } else if !has { + return false, nil + } logger.Log(lvl, "[snapshots] Retire Blocks", "range", fmt.Sprintf("%dk-%dk", blockFrom/1000, blockTo/1000)) // in future we will do it in background - if err := DumpBlocks(ctx, snapshots.version, blockFrom, blockTo, snaptype.Erigon2MergeLimit, tmpDir, snapshots.Dir(), db, workers, lvl, logger, blockReader); err != nil { + if err := DumpBlocks(ctx, blockFrom, blockTo, br.chainConfig, tmpDir, snapshots.Dir(), db, workers, lvl, logger, blockReader); err != nil { return ok, fmt.Errorf("DumpBlocks: %w", err) } + if err := snapshots.ReopenFolder(); err != nil { return ok, fmt.Errorf("reopen: %w", err) } - snapshots.LogStat("retire") + snapshots.LogStat("blocks:retire") if notifier != nil && !reflect.ValueOf(notifier).IsNil() { // notify about new snapshots of any size notifier.OnNewSnapshot() } @@ -1448,11 +1290,14 @@ func (br *BlockRetire) retireBlocks(ctx context.Context, minBlockNum uint64, max } return nil } - err := merger.Merge(ctx, snapshots, rangesToMerge, snapshots.Dir(), true /* doIndex */, onMerge, onDelete) + err := merger.Merge(ctx, snapshots, snapshots.Types(), rangesToMerge, snapshots.Dir(), true /* doIndex */, onMerge, onDelete) if err != nil { return ok, err } + if err := snapshots.removeOverlapsAfterMerge(); err != nil { + return ok, err + } return ok, nil } @@ -1464,21 +1309,24 @@ func (br *BlockRetire) PruneAncientBlocks(tx kv.RwTx, limit int) error { if err != nil { return err } - canDeleteTo := CanDeleteTo(currentProgress, br.blockReader.FrozenBlocks()) - br.logger.Info("[snapshots] Prune Blocks", "to", canDeleteTo, "limit", limit) - if err := br.blockWriter.PruneBlocks(context.Background(), tx, canDeleteTo, limit); err != nil { - return err + if canDeleteTo := CanDeleteTo(currentProgress, br.blockReader.FrozenBlocks()); canDeleteTo > 0 { + br.logger.Debug("[snapshots] Prune Blocks", "to", canDeleteTo, "limit", limit) + if err := br.blockWriter.PruneBlocks(context.Background(), tx, canDeleteTo, limit); err != nil { + return err + } } - includeBor := br.chainConfig.Bor != nil - if includeBor { - canDeleteTo := CanDeleteTo(currentProgress, br.blockReader.FrozenBorBlocks()) - br.logger.Info("[snapshots] Prune Bor Blocks", "to", canDeleteTo, "limit", limit) - if err := br.blockWriter.PruneBorBlocks(context.Background(), tx, canDeleteTo, limit, bor.SpanIDAt); err != nil { - return err + if br.chainConfig.Bor != nil { + if canDeleteTo := CanDeleteTo(currentProgress, br.blockReader.FrozenBorBlocks()); canDeleteTo > 0 { + br.logger.Debug("[snapshots] Prune Bor Blocks", "to", canDeleteTo, "limit", limit) + if err := br.blockWriter.PruneBorBlocks(context.Background(), tx, canDeleteTo, limit, + func(block uint64) uint64 { return uint64(heimdall.SpanIdAt(block)) }); err != nil { + return err + } } } + return nil } @@ -1492,162 +1340,83 @@ func (br *BlockRetire) RetireBlocksInBackground(ctx context.Context, minBlockNum } go func() { - defer br.working.Store(false) - for { - maxBlockNum := br.maxScheduledBlock.Load() - - err := br.RetireBlocks(ctx, minBlockNum, maxBlockNum, lvl, seedNewSnapshots, onDeleteSnapshots) - - if err != nil { - br.logger.Warn("[snapshots] retire blocks", "err", err) - return - } - - if maxBlockNum == br.maxScheduledBlock.Load() { - return - } + err := br.RetireBlocks(ctx, minBlockNum, maxBlockNum, lvl, seedNewSnapshots, onDeleteSnapshots) + if err != nil { + br.logger.Warn("[snapshots] retire blocks", "err", err) + return } }() } -func (br *BlockRetire) RetireBlocks(ctx context.Context, minBlockNum uint64, maxBlockNum uint64, lvl log.Lvl, seedNewSnapshots func(downloadRequest []services.DownloadRequest) error, onDeleteSnapshots func(l []string) error) (err error) { +func (br *BlockRetire) RetireBlocks(ctx context.Context, minBlockNum uint64, maxBlockNum uint64, lvl log.Lvl, seedNewSnapshots func(downloadRequest []services.DownloadRequest) error, onDeleteSnapshots func(l []string) error) error { + if maxBlockNum > br.maxScheduledBlock.Load() { + br.maxScheduledBlock.Store(maxBlockNum) + } includeBor := br.chainConfig.Bor != nil + var err error if includeBor { // "bor snaps" can be behind "block snaps", it's ok: for example because of `kill -9` in the middle of merge - if frozen := br.blockReader.FrozenBlocks(); frozen > minBlockNum { - minBlockNum = frozen - } - - for br.blockReader.FrozenBorBlocks() < minBlockNum { - ok, err := br.retireBorBlocks(ctx, minBlockNum, maxBlockNum, lvl, seedNewSnapshots, onDeleteSnapshots) + // just build everything until `FrozenBlocks()` + for { + var okBor bool + minBlockNum = cmp.Max(br.blockReader.FrozenBlocks(), minBlockNum) + okBor, err = br.retireBorBlocks(ctx, br.blockReader.FrozenBorBlocks(), minBlockNum, lvl, seedNewSnapshots, onDeleteSnapshots) if err != nil { return err } - if !ok { + if !okBor { break } } } - var ok, okBor bool for { - if frozen := br.blockReader.FrozenBlocks(); frozen > minBlockNum { - minBlockNum = frozen - } + var ok, okBor bool + minBlockNum = cmp.Max(br.blockReader.FrozenBlocks(), minBlockNum) + maxBlockNum = br.maxScheduledBlock.Load() ok, err = br.retireBlocks(ctx, minBlockNum, maxBlockNum, lvl, seedNewSnapshots, onDeleteSnapshots) if err != nil { return err } if includeBor { - okBor, err = br.retireBorBlocks(ctx, minBlockNum, maxBlockNum, lvl, seedNewSnapshots, onDeleteSnapshots) + minBorBlockNum := cmp.Max(br.blockReader.FrozenBorBlocks(), minBlockNum) + okBor, err = br.retireBorBlocks(ctx, minBorBlockNum, maxBlockNum, lvl, seedNewSnapshots, onDeleteSnapshots) if err != nil { return err } } - haveMore := ok || okBor - if !haveMore { + + if !(ok || okBor) { break } } - return nil } func (br *BlockRetire) BuildMissedIndicesIfNeed(ctx context.Context, logPrefix string, notifier services.DBEventNotifier, cc *chain.Config) error { - if err := br.buildMissedIndicesIfNeed(ctx, logPrefix, notifier, cc); err != nil { - return err - } - - if err := br.buildBorMissedIndicesIfNeed(ctx, logPrefix, notifier, cc); err != nil { - return err - } - - return nil -} - -func (br *BlockRetire) buildMissedIndicesIfNeed(ctx context.Context, logPrefix string, notifier services.DBEventNotifier, cc *chain.Config) error { - snapshots := br.snapshots() - if snapshots.IndicesMax() >= snapshots.SegmentsMax() { - return nil - } - snapshots.LogStat("missed-idx") - if !snapshots.Cfg().Produce && snapshots.IndicesMax() == 0 { - return fmt.Errorf("please remove --snap.stop, erigon can't work without creating basic indices") - } - if !snapshots.Cfg().Produce { - return nil - } - if !snapshots.SegmentsReady() { - return fmt.Errorf("not all snapshot segments are available") - } - - // wait for Downloader service to download all expected snapshots - indexWorkers := estimate.IndexSnapshot.Workers() - if err := BuildMissedIndices(logPrefix, ctx, br.dirs, snapshots.Version(), snapshots.SegmentsMin(), cc, indexWorkers, br.logger); err != nil { - return fmt.Errorf("BuildMissedIndices: %w", err) - } - - if err := snapshots.ReopenFolder(); err != nil { + if err := br.snapshots().buildMissedIndicesIfNeed(ctx, logPrefix, notifier, br.dirs, cc, br.logger); err != nil { return err } - snapshots.LogStat("missed-idx:reopen") - if notifier != nil { - notifier.OnNewSnapshot() - } - return nil -} - -func (br *BlockRetire) buildBorMissedIndicesIfNeed(ctx context.Context, logPrefix string, notifier services.DBEventNotifier, cc *chain.Config) error { - if cc.Bor == nil { - return nil - } - - borSnapshots := br.borSnapshots() - if borSnapshots.IndicesMax() >= borSnapshots.SegmentsMax() { - return nil - } - - borSnapshots.LogStat("bor:missed-idx") - if !borSnapshots.Cfg().Produce && borSnapshots.IndicesMax() == 0 { - return fmt.Errorf("please remove --snap.stop, erigon can't work without creating basic indices") - } - if !borSnapshots.Cfg().Produce { - return nil - } - if !borSnapshots.SegmentsReady() { - return fmt.Errorf("not all bor snapshot segments are available") - } - // wait for Downloader service to download all expected snapshots - indexWorkers := estimate.IndexSnapshot.Workers() - if err := BuildBorMissedIndices(logPrefix, ctx, br.dirs, borSnapshots.Version(), borSnapshots.SegmentsMin(), cc, indexWorkers, br.logger); err != nil { - return fmt.Errorf("BuildBorMissedIndices: %w", err) + if cc.Bor != nil { + if err := br.borSnapshots().RoSnapshots.buildMissedIndicesIfNeed(ctx, logPrefix, notifier, br.dirs, cc, br.logger); err != nil { + return err + } } - if err := borSnapshots.ReopenFolder(); err != nil { - return err - } - borSnapshots.LogStat("bor:missed-idx:reopen") - if notifier != nil { - notifier.OnNewSnapshot() - } return nil } -func DumpBlocks(ctx context.Context, version uint8, blockFrom, blockTo, blocksPerFile uint64, tmpDir, snapDir string, chainDB kv.RoDB, workers int, lvl log.Lvl, logger log.Logger, blockReader services.FullBlockReader) error { - if blocksPerFile == 0 { - return nil - } - chainConfig := fromdb.ChainConfig(chainDB) +func DumpBlocks(ctx context.Context, blockFrom, blockTo uint64, chainConfig *chain.Config, tmpDir, snapDir string, chainDB kv.RoDB, workers int, lvl log.Lvl, logger log.Logger, blockReader services.FullBlockReader) error { - firstTxNum := blockReader.(*BlockReader).FirstTxNumNotInSnapshots() - for i := blockFrom; i < blockTo; i = chooseSegmentEnd(i, blockTo, blocksPerFile) { - lastTxNum, err := dumpBlocksRange(ctx, version, i, chooseSegmentEnd(i, blockTo, blocksPerFile), tmpDir, snapDir, firstTxNum, chainDB, *chainConfig, workers, lvl, logger) + firstTxNum := blockReader.FirstTxnNumNotInSnapshots() + for i := blockFrom; i < blockTo; i = chooseSegmentEnd(i, blockTo, coresnaptype.Enums.Headers, chainConfig) { + lastTxNum, err := dumpBlocksRange(ctx, i, chooseSegmentEnd(i, blockTo, coresnaptype.Enums.Headers, chainConfig), tmpDir, snapDir, firstTxNum, chainDB, chainConfig, workers, lvl, logger) if err != nil { return err } @@ -1656,140 +1425,75 @@ func DumpBlocks(ctx context.Context, version uint8, blockFrom, blockTo, blocksPe return nil } -func dumpBlocksRange(ctx context.Context, version uint8, blockFrom, blockTo uint64, tmpDir, snapDir string, firstTxNum uint64, chainDB kv.RoDB, chainConfig chain.Config, workers int, lvl log.Lvl, logger log.Logger) (lastTxNum uint64, err error) { +func dumpBlocksRange(ctx context.Context, blockFrom, blockTo uint64, tmpDir, snapDir string, firstTxNum uint64, chainDB kv.RoDB, chainConfig *chain.Config, workers int, lvl log.Lvl, logger log.Logger) (lastTxNum uint64, err error) { logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() - { - segName := snaptype.SegmentFileName(version, blockFrom, blockTo, snaptype.Headers) - f, _ := snaptype.ParseFileName(snapDir, segName) + if _, err = dumpRange(ctx, coresnaptype.Headers.FileInfo(snapDir, blockFrom, blockTo), + DumpHeaders, nil, chainDB, chainConfig, tmpDir, workers, lvl, logger); err != nil { + return 0, err + } - sn, err := compress.NewCompressor(ctx, "Snapshot Headers", f.Path, tmpDir, compress.MinPatternScore, workers, log.LvlTrace, logger) - if err != nil { - return lastTxNum, err - } - defer sn.Close() - if err := DumpHeaders(ctx, chainDB, blockFrom, blockTo, workers, lvl, logger, func(v []byte) error { - return sn.AddWord(v) - }); err != nil { - return lastTxNum, fmt.Errorf("DumpHeaders: %w", err) - } - if err := sn.Compress(); err != nil { - return lastTxNum, fmt.Errorf("compress: %w", err) - } + if lastTxNum, err = dumpRange(ctx, coresnaptype.Bodies.FileInfo(snapDir, blockFrom, blockTo), + DumpBodies, func(context.Context) uint64 { return firstTxNum }, chainDB, chainConfig, tmpDir, workers, lvl, logger); err != nil { + return lastTxNum, err + } - p := &background.Progress{} - if err := buildIdx(ctx, f, &chainConfig, tmpDir, p, lvl, logger); err != nil { - return lastTxNum, err - } + if _, err = dumpRange(ctx, coresnaptype.Transactions.FileInfo(snapDir, blockFrom, blockTo), + DumpTxs, func(context.Context) uint64 { return firstTxNum }, chainDB, chainConfig, tmpDir, workers, lvl, logger); err != nil { + return lastTxNum, err } - { - segName := snaptype.SegmentFileName(version, blockFrom, blockTo, snaptype.Bodies) - f, _ := snaptype.ParseFileName(snapDir, segName) + return lastTxNum, nil +} - sn, err := compress.NewCompressor(ctx, "Snapshot Bodies", f.Path, tmpDir, compress.MinPatternScore, workers, log.LvlTrace, logger) - if err != nil { - return lastTxNum, err - } - defer sn.Close() - lastTxNum, err = DumpBodies(ctx, chainDB, blockFrom, blockTo, firstTxNum, lvl, logger, func(v []byte) error { - return sn.AddWord(v) - }) - if err != nil { - return lastTxNum, fmt.Errorf("DumpBodies: %w", err) - } - if err := sn.Compress(); err != nil { - return lastTxNum, fmt.Errorf("compress: %w", err) - } +type firstKeyGetter func(ctx context.Context) uint64 +type dumpFunc func(ctx context.Context, db kv.RoDB, chainConfig *chain.Config, blockFrom, blockTo uint64, firstKey firstKeyGetter, collecter func(v []byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) - p := &background.Progress{} - if err := buildIdx(ctx, f, &chainConfig, tmpDir, p, lvl, logger); err != nil { - return lastTxNum, err - } - } +func dumpRange(ctx context.Context, f snaptype.FileInfo, dumper dumpFunc, firstKey firstKeyGetter, chainDB kv.RoDB, chainConfig *chain.Config, tmpDir string, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { + var lastKeyValue uint64 - { - segName := snaptype.SegmentFileName(version, blockFrom, blockTo, snaptype.Transactions) - f, _ := snaptype.ParseFileName(snapDir, segName) + sn, err := seg.NewCompressor(ctx, "Snapshot "+f.Type.Name(), f.Path, tmpDir, seg.MinPatternScore, workers, log.LvlTrace, logger) - sn, err := compress.NewCompressor(ctx, "Snapshot Txs", f.Path, tmpDir, compress.MinPatternScore, workers, log.LvlTrace, logger) - if err != nil { - return lastTxNum, fmt.Errorf("NewCompressor: %w, %s", err, f.Path) - } - defer sn.Close() + if err != nil { + return lastKeyValue, err + } + defer sn.Close() - expectedCount, err := DumpTxs(ctx, chainDB, blockFrom, blockTo, &chainConfig, workers, lvl, logger, func(v []byte) error { - return sn.AddWord(v) - }) - if err != nil { - return lastTxNum, fmt.Errorf("DumpTxs: %w", err) - } - if expectedCount != sn.Count() { - return lastTxNum, fmt.Errorf("incorrect tx count: %d, expected from db: %d", sn.Count(), expectedCount) - } - snapDir, fileName := filepath.Split(f.Path) - ext := filepath.Ext(fileName) - logger.Log(lvl, "[snapshots] Compression start", "file", fileName[:len(fileName)-len(ext)], "workers", sn.Workers()) - t := time.Now() - _, expectedCount, err = txsAmountBasedOnBodiesSnapshots(snapDir, version, blockFrom, blockTo) - if err != nil { - return lastTxNum, err - } - if expectedCount != sn.Count() { - return lastTxNum, fmt.Errorf("incorrect tx count: %d, expected from snapshots: %d", sn.Count(), expectedCount) - } - if err := sn.Compress(); err != nil { - return lastTxNum, fmt.Errorf("compress: %w", err) - } - logger.Log(lvl, "[snapshots] Compression", "took", time.Since(t), "ratio", sn.Ratio.String(), "file", fileName[:len(fileName)-len(ext)]) + lastKeyValue, err = dumper(ctx, chainDB, chainConfig, f.From, f.To, firstKey, func(v []byte) error { + return sn.AddWord(v) + }, workers, lvl, logger) - p := &background.Progress{} - if err := buildIdx(ctx, f, &chainConfig, tmpDir, p, lvl, logger); err != nil { - return lastTxNum, err - } + if err != nil { + return lastKeyValue, fmt.Errorf("DumpBodies: %w", err) } - return lastTxNum, nil -} + ext := filepath.Ext(f.Name()) + logger.Log(lvl, "[snapshots] Compression start", "file", f.Name()[:len(f.Name())-len(ext)], "workers", sn.Workers()) -func hasIdxFile(sn snaptype.FileInfo, logger log.Logger) bool { - dir, _ := filepath.Split(sn.Path) - fName := snaptype.IdxFileName(sn.Version, sn.From, sn.To, sn.T.String()) - var result = true - switch sn.T { - case snaptype.Headers, snaptype.Bodies, snaptype.BorEvents, snaptype.BorSpans, snaptype.BeaconBlocks: - idx, err := recsplit.OpenIndex(filepath.Join(dir, fName)) - if err != nil { - return false - } - idx.Close() - case snaptype.Transactions: - idx, err := recsplit.OpenIndex(filepath.Join(dir, fName)) - if err != nil { - return false - } - idx.Close() + if err := sn.Compress(); err != nil { + return lastKeyValue, fmt.Errorf("compress: %w", err) + } - fName = snaptype.IdxFileName(sn.Version, sn.From, sn.To, snaptype.Transactions2Block.String()) - idx, err = recsplit.OpenIndex(filepath.Join(dir, fName)) - if err != nil { - return false - } - idx.Close() + p := &background.Progress{} + + if err := f.Type.BuildIndexes(ctx, f, chainConfig, tmpDir, p, lvl, logger); err != nil { + return lastKeyValue, err } - return result + + return lastKeyValue, nil } var bufPool = sync.Pool{ New: func() any { - return make([]byte, 16*4096) + bytes := [16 * 4096]byte{} + return &bytes }, } // DumpTxs - [from, to) // Format: hash[0]_1byte + sender_address_2bytes + txnRlp -func DumpTxs(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, chainConfig *chain.Config, workers int, lvl log.Lvl, logger log.Logger, collect func([]byte) error) (expectedCount int, err error) { +func DumpTxs(ctx context.Context, db kv.RoDB, chainConfig *chain.Config, blockFrom, blockTo uint64, _ firstKeyGetter, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (lastTx uint64, err error) { logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() warmupCtx, cancel := context.WithCancel(ctx) @@ -1832,14 +1536,14 @@ func DumpTxs(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, chainCo ctx.WithSender(false) - valueBuf := bufPool.Get().([]byte) - defer bufPool.Put(valueBuf) //nolint + valueBuf := bufPool.Get().(*[16 * 4096]byte) + defer bufPool.Put(valueBuf) - valueBuf, err = parse(ctx, tv, valueBuf, nil, 0) + parsed, err := parse(ctx, tv, valueBuf[:], nil, 0) if err != nil { return err } - if err := collect(valueBuf); err != nil { + if err := collect(parsed); err != nil { return err } return nil @@ -1865,7 +1569,6 @@ func DumpTxs(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, chainCo if body.TxAmount == 0 { return true, nil } - expectedCount += int(body.TxAmount) if doWarmup && !warmupSenders.Load() && blockNum%1_000 == 0 { clean := kv.ReadAhead(warmupCtx, db, warmupSenders, kv.Senders, hexutility.EncodeTs(blockNum), 10_000) @@ -1901,9 +1604,9 @@ func DumpTxs(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, chainCo parseCtxs := make([]*types2.TxParseContext, workers) for i := 0; i < workers; i++ { - valueBuf := bufPool.Get().([]byte) - defer bufPool.Put(valueBuf) //nolint - valueBufs[i] = valueBuf + valueBuf := bufPool.Get().(*[16 * 4096]byte) + defer bufPool.Put(valueBuf) + valueBufs[i] = valueBuf[:] parseCtxs[i] = types2.NewTxParseContext(*chainID) } @@ -1983,11 +1686,11 @@ func DumpTxs(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, chainCo }); err != nil { return 0, fmt.Errorf("BigChunks: %w", err) } - return expectedCount, nil + return 0, nil } // DumpHeaders - [from, to) -func DumpHeaders(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, workers int, lvl log.Lvl, logger log.Logger, collect func([]byte) error) error { +func DumpHeaders(ctx context.Context, db kv.RoDB, _ *chain.Config, blockFrom, blockTo uint64, _ firstKeyGetter, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() @@ -2034,13 +1737,13 @@ func DumpHeaders(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, wor } return true, nil }); err != nil { - return err + return 0, err } - return nil + return 0, nil } // DumpBodies - [from, to) -func DumpBodies(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, firstTxNum uint64, lvl log.Lvl, logger log.Logger, collect func([]byte) error) (uint64, error) { +func DumpBodies(ctx context.Context, db kv.RoDB, _ *chain.Config, blockFrom, blockTo uint64, firstTxNum firstKeyGetter, collect func([]byte) error, workers int, lvl log.Lvl, logger log.Logger) (uint64, error) { logEvery := time.NewTicker(20 * time.Second) defer logEvery.Stop() @@ -2048,6 +1751,9 @@ func DumpBodies(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, firs blockHashByteLength := 32 key := make([]byte, blockNumByteLength+blockHashByteLength) from := hexutility.EncodeTs(blockFrom) + + lastTxNum := firstTxNum(ctx) + if err := kv.BigChunks(db, kv.HeaderCanonical, from, func(tx kv.Tx, k, v []byte) (bool, error) { blockNum := binary.BigEndian.Uint64(k) if blockNum >= blockTo { @@ -2070,8 +1776,8 @@ func DumpBodies(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, firs return true, nil } - body.BaseTxId = firstTxNum - firstTxNum += uint64(body.TxAmount) + body.BaseTxId = lastTxNum + lastTxNum += uint64(body.TxAmount) dataRLP, err := rlp.EncodeToBytes(body) if err != nil { @@ -2097,335 +1803,10 @@ func DumpBodies(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, firs } return true, nil }); err != nil { - return firstTxNum, err - } - - return firstTxNum, nil -} - -var EmptyTxHash = common2.Hash{} - -func txsAmountBasedOnBodiesSnapshots(snapDir string, version uint8, blockFrom, blockTo uint64) (firstTxID uint64, expectedCount int, err error) { - bodySegmentPath := filepath.Join(snapDir, snaptype.SegmentFileName(version, blockFrom, blockTo, snaptype.Bodies)) - bodiesSegment, err := compress.NewDecompressor(bodySegmentPath) - if err != nil { - return - } - defer bodiesSegment.Close() - - gg := bodiesSegment.MakeGetter() - buf, _ := gg.Next(nil) - firstBody := &types.BodyForStorage{} - if err = rlp.DecodeBytes(buf, firstBody); err != nil { - return - } - firstTxID = firstBody.BaseTxId - - lastBody := new(types.BodyForStorage) - i := uint64(0) - for gg.HasNext() { - i++ - if i == blockTo-blockFrom-1 { - buf, _ = gg.Next(buf[:0]) - if err = rlp.DecodeBytes(buf, lastBody); err != nil { - return - } - if gg.HasNext() { - panic(1) - } - } else { - gg.Skip() - } - } - - expectedCount = int(lastBody.BaseTxId+uint64(lastBody.TxAmount)) - int(firstBody.BaseTxId) - return -} - -func TransactionsIdx(ctx context.Context, chainConfig *chain.Config, version uint8, blockFrom, blockTo uint64, snapDir string, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { - defer func() { - if rec := recover(); rec != nil { - err = fmt.Errorf("TransactionsIdx: at=%d-%d, %v, %s", blockFrom, blockTo, rec, dbg.Stack()) - } - }() - firstBlockNum := blockFrom - firstTxID, expectedCount, err := txsAmountBasedOnBodiesSnapshots(snapDir, version, blockFrom, blockTo) - if err != nil { - return err - } - bodySegmentPath := filepath.Join(snapDir, snaptype.SegmentFileName(version, blockFrom, blockTo, snaptype.Bodies)) - bodiesSegment, err := compress.NewDecompressor(bodySegmentPath) - if err != nil { - return - } - defer bodiesSegment.Close() - - segFileName := snaptype.SegmentFileName(version, blockFrom, blockTo, snaptype.Transactions) - segmentFilePath := filepath.Join(snapDir, segFileName) - d, err := compress.NewDecompressor(segmentFilePath) - if err != nil { - return err - } - defer d.Close() - if d.Count() != expectedCount { - return fmt.Errorf("TransactionsIdx: at=%d-%d, pre index building, expect: %d, got %d", blockFrom, blockTo, expectedCount, d.Count()) - } - - if p != nil { - p.Name.Store(&segFileName) - p.Total.Store(uint64(d.Count() * 2)) - } - - txnHashIdx, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ - KeyCount: d.Count(), - Enums: true, - BucketSize: 2000, - LeafSize: 8, - TmpDir: tmpDir, - IndexFile: filepath.Join(snapDir, snaptype.IdxFileName(version, blockFrom, blockTo, snaptype.Transactions.String())), - BaseDataID: firstTxID, - }, logger) - if err != nil { - return err - } - - txnHash2BlockNumIdx, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ - KeyCount: d.Count(), - Enums: false, - BucketSize: 2000, - LeafSize: 8, - TmpDir: tmpDir, - IndexFile: filepath.Join(snapDir, snaptype.IdxFileName(version, blockFrom, blockTo, snaptype.Transactions2Block.String())), - BaseDataID: firstBlockNum, - }, logger) - if err != nil { - return err - } - txnHashIdx.LogLvl(log.LvlDebug) - txnHash2BlockNumIdx.LogLvl(log.LvlDebug) - - chainId, _ := uint256.FromBig(chainConfig.ChainID) - - parseCtx := types2.NewTxParseContext(*chainId) - parseCtx.WithSender(false) - slot := types2.TxSlot{} - bodyBuf, word := make([]byte, 0, 4096), make([]byte, 0, 4096) - - defer d.EnableMadvNormal().DisableReadAhead() - defer bodiesSegment.EnableMadvNormal().DisableReadAhead() - -RETRY: - g, bodyGetter := d.MakeGetter(), bodiesSegment.MakeGetter() - var i, offset, nextPos uint64 - blockNum := firstBlockNum - body := &types.BodyForStorage{} - - bodyBuf, _ = bodyGetter.Next(bodyBuf[:0]) - if err := rlp.DecodeBytes(bodyBuf, body); err != nil { - return err - } - - for g.HasNext() { - if p != nil { - p.Processed.Add(1) - } - - word, nextPos = g.Next(word[:0]) - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - - for body.BaseTxId+uint64(body.TxAmount) <= firstTxID+i { // skip empty blocks - if !bodyGetter.HasNext() { - return fmt.Errorf("not enough bodies") - } - - bodyBuf, _ = bodyGetter.Next(bodyBuf[:0]) - if err := rlp.DecodeBytes(bodyBuf, body); err != nil { - return err - } - - blockNum++ - } - - firstTxByteAndlengthOfAddress := 21 - isSystemTx := len(word) == 0 - if isSystemTx { // system-txs hash:pad32(txnID) - binary.BigEndian.PutUint64(slot.IDHash[:], firstTxID+i) - } else { - if _, err = parseCtx.ParseTransaction(word[firstTxByteAndlengthOfAddress:], 0, &slot, nil, true /* hasEnvelope */, false /* wrappedWithBlobs */, nil /* validateHash */); err != nil { - return fmt.Errorf("ParseTransaction: %w, blockNum: %d, i: %d", err, blockNum, i) - } - } - - if err := txnHashIdx.AddKey(slot.IDHash[:], offset); err != nil { - return err - } - if err := txnHash2BlockNumIdx.AddKey(slot.IDHash[:], blockNum); err != nil { - return err - } - - i++ - offset = nextPos - } - - if int(i) != expectedCount { - return fmt.Errorf("TransactionsIdx: at=%d-%d, post index building, expect: %d, got %d", blockFrom, blockTo, expectedCount, i) - } - - if err := txnHashIdx.Build(ctx); err != nil { - if errors.Is(err, recsplit.ErrCollision) { - logger.Warn("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) - txnHashIdx.ResetNextSalt() - txnHash2BlockNumIdx.ResetNextSalt() - goto RETRY - } - return fmt.Errorf("txnHashIdx: %w", err) - } - if err := txnHash2BlockNumIdx.Build(ctx); err != nil { - if errors.Is(err, recsplit.ErrCollision) { - logger.Warn("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) - txnHashIdx.ResetNextSalt() - txnHash2BlockNumIdx.ResetNextSalt() - goto RETRY - } - return fmt.Errorf("txnHash2BlockNumIdx: %w", err) - } - - return nil -} - -// HeadersIdx - headerHash -> offset (analog of kv.HeaderNumber) -func HeadersIdx(ctx context.Context, segmentFilePath string, version uint8, firstBlockNumInSegment uint64, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { - defer func() { - if rec := recover(); rec != nil { - _, fName := filepath.Split(segmentFilePath) - err = fmt.Errorf("HeadersIdx: at=%s, %v, %s", fName, rec, dbg.Stack()) - } - }() - - d, err := compress.NewDecompressor(segmentFilePath) - if err != nil { - return err - } - defer d.Close() - - if p != nil { - _, fname := filepath.Split(segmentFilePath) - p.Name.Store(&fname) - p.Total.Store(uint64(d.Count())) - } - - hasher := crypto.NewKeccakState() - defer cryptopool.ReturnToPoolKeccak256(hasher) - var h common2.Hash - if err := Idx(ctx, d, firstBlockNumInSegment, tmpDir, log.LvlDebug, func(idx *recsplit.RecSplit, i, offset uint64, word []byte) error { - if p != nil { - p.Processed.Add(1) - } - - headerRlp := word[1:] - hasher.Reset() - hasher.Write(headerRlp) - hasher.Read(h[:]) - if err := idx.AddKey(h[:], offset); err != nil { - return err - } - return nil - }, logger); err != nil { - return fmt.Errorf("HeadersIdx: %w", err) - } - return nil -} - -func BodiesIdx(ctx context.Context, segmentFilePath string, firstBlockNumInSegment uint64, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { - defer func() { - if rec := recover(); rec != nil { - _, fName := filepath.Split(segmentFilePath) - err = fmt.Errorf("BodiesIdx: at=%s, %v, %s", fName, rec, dbg.Stack()) - } - }() - - num := make([]byte, 8) - - d, err := compress.NewDecompressor(segmentFilePath) - if err != nil { - return err - } - defer d.Close() - - if p != nil { - _, fname := filepath.Split(segmentFilePath) - p.Name.Store(&fname) - p.Total.Store(uint64(d.Count())) - } - - if err := Idx(ctx, d, firstBlockNumInSegment, tmpDir, log.LvlDebug, func(idx *recsplit.RecSplit, i, offset uint64, word []byte) error { - if p != nil { - p.Processed.Add(1) - } - n := binary.PutUvarint(num, i) - if err := idx.AddKey(num[:n], offset); err != nil { - return err - } - return nil - }, logger); err != nil { - return fmt.Errorf("BodyNumberIdx: %w", err) - } - return nil -} - -// Idx - iterate over segment and building .idx file -func Idx(ctx context.Context, d *compress.Decompressor, firstDataID uint64, tmpDir string, lvl log.Lvl, walker func(idx *recsplit.RecSplit, i, offset uint64, word []byte) error, logger log.Logger) error { - segmentFileName := d.FilePath() - var extension = filepath.Ext(segmentFileName) - var idxFilePath = segmentFileName[0:len(segmentFileName)-len(extension)] + ".idx" - - rs, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ - KeyCount: d.Count(), - Enums: true, - BucketSize: 2000, - LeafSize: 8, - TmpDir: tmpDir, - IndexFile: idxFilePath, - BaseDataID: firstDataID, - }, logger) - if err != nil { - return err + return lastTxNum, err } - rs.LogLvl(log.LvlDebug) - - defer d.EnableMadvNormal().DisableReadAhead() - -RETRY: - g := d.MakeGetter() - var i, offset, nextPos uint64 - word := make([]byte, 0, 4096) - for g.HasNext() { - word, nextPos = g.Next(word[:0]) - if err := walker(rs, i, offset, word); err != nil { - return err - } - i++ - offset = nextPos - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - } - if err = rs.Build(ctx); err != nil { - if errors.Is(err, recsplit.ErrCollision) { - logger.Info("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) - rs.ResetNextSalt() - goto RETRY - } - return err - } - return nil + return lastTxNum, nil } func ForEachHeader(ctx context.Context, s *RoSnapshots, walker func(header *types.Header) error) error { @@ -2436,8 +1817,8 @@ func ForEachHeader(ctx context.Context, s *RoSnapshots, walker func(header *type defer view.Close() for _, sn := range view.Headers() { - if err := sn.seg.WithReadAhead(func() error { - g := sn.seg.MakeGetter() + if err := sn.WithReadAhead(func() error { + g := sn.MakeGetter() for g.HasNext() { word, _ = g.Next(word[:0]) var header types.Header @@ -2473,27 +1854,14 @@ func NewMerger(tmpDir string, compressWorkers int, lvl log.Lvl, chainDB kv.RoDB, } func (m *Merger) DisableFsync() { m.noFsync = true } -type Range struct { - from, to uint64 -} - -func (r Range) From() uint64 { return r.from } -func (r Range) To() uint64 { return r.to } - -type Ranges []Range - -func (r Ranges) String() string { - return fmt.Sprintf("%d", r) -} - func (m *Merger) FindMergeRanges(currentRanges []Range, maxBlockNum uint64) (toMerge []Range) { for i := len(currentRanges) - 1; i > 0; i-- { r := currentRanges[i] - mergeLimit := uint64(snaptype.Erigon2MergeLimit) + mergeLimit := snapcfg.MergeLimit(m.chainConfig.ChainName, snaptype.Unknown, r.from) if r.to-r.from >= mergeLimit { continue } - for _, span := range snaptype.MergeSteps { + for _, span := range snapcfg.MergeSteps(m.chainConfig.ChainName, snaptype.Unknown, r.from) { if r.to%span != 0 { continue } @@ -2512,85 +1880,38 @@ func (m *Merger) FindMergeRanges(currentRanges []Range, maxBlockNum uint64) (toM return toMerge } -type View struct { - s *RoSnapshots - closed bool -} +func (m *Merger) filesByRange(snapshots *RoSnapshots, from, to uint64) (map[snaptype.Enum][]string, error) { + toMerge := map[snaptype.Enum][]string{} -func (s *RoSnapshots) View() *View { - v := &View{s: s} - v.s.Headers.lock.RLock() - v.s.Bodies.lock.RLock() - v.s.Txs.lock.RLock() - return v -} + view := snapshots.View() + defer view.Close() -func (v *View) Close() { - if v.closed { - return - } - v.closed = true - v.s.Headers.lock.RUnlock() - v.s.Bodies.lock.RUnlock() - v.s.Txs.lock.RUnlock() -} -func (v *View) Headers() []*HeaderSegment { return v.s.Headers.segments } -func (v *View) Bodies() []*BodySegment { return v.s.Bodies.segments } -func (v *View) Txs() []*TxnSegment { return v.s.Txs.segments } -func (v *View) HeadersSegment(blockNum uint64) (*HeaderSegment, bool) { - for _, seg := range v.Headers() { - if !(blockNum >= seg.from && blockNum < seg.to) { - continue - } - return seg, true - } - return nil, false -} -func (v *View) BodiesSegment(blockNum uint64) (*BodySegment, bool) { - for _, seg := range v.Bodies() { - if !(blockNum >= seg.from && blockNum < seg.to) { - continue - } - return seg, true - } - return nil, false -} -func (v *View) TxsSegment(blockNum uint64) (*TxnSegment, bool) { - for _, seg := range v.Txs() { - if !(blockNum >= seg.from && blockNum < seg.to) { - continue - } - return seg, true + for _, t := range snapshots.Types() { + toMerge[t.Enum()] = m.filesByRangeOfType(view, from, to, t) } - return nil, false -} -func (m *Merger) filesByRange(snapshots *RoSnapshots, from, to uint64) (map[snaptype.Type][]string, error) { - toMerge := map[snaptype.Type][]string{} - view := snapshots.View() - defer view.Close() + return toMerge, nil +} - hSegments := view.Headers() - bSegments := view.Bodies() - tSegments := view.Txs() +func (m *Merger) filesByRangeOfType(view *View, from, to uint64, snapshotType snaptype.Type) []string { + paths := make([]string, 0) - for i, sn := range hSegments { + for _, sn := range view.Segments(snapshotType) { if sn.from < from { continue } if sn.to > to { break } - toMerge[snaptype.Headers] = append(toMerge[snaptype.Headers], hSegments[i].seg.FilePath()) - toMerge[snaptype.Bodies] = append(toMerge[snaptype.Bodies], bSegments[i].seg.FilePath()) - toMerge[snaptype.Transactions] = append(toMerge[snaptype.Transactions], tSegments[i].Seg.FilePath()) + + paths = append(paths, sn.FilePath()) } - return toMerge, nil + return paths } // Merge does merge segments in given ranges -func (m *Merger) Merge(ctx context.Context, snapshots *RoSnapshots, mergeRanges []Range, snapDir string, doIndex bool, onMerge func(r Range) error, onDelete func(l []string) error) error { +func (m *Merger) Merge(ctx context.Context, snapshots *RoSnapshots, snapTypes []snaptype.Type, mergeRanges []Range, snapDir string, doIndex bool, onMerge func(r Range) error, onDelete func(l []string) error) error { if len(mergeRanges) == 0 { return nil } @@ -2602,14 +1923,10 @@ func (m *Merger) Merge(ctx context.Context, snapshots *RoSnapshots, mergeRanges return err } - for _, t := range snaptype.BlockSnapshotTypes { - segName := snaptype.SegmentFileName(snapshots.version, r.from, r.to, t) - f, ok := snaptype.ParseFileName(snapDir, segName) - if !ok { - continue - } + for _, t := range snapTypes { + f := t.FileInfo(snapDir, r.from, r.to) - if err := m.merge(ctx, toMerge[t], f.Path, logEvery); err != nil { + if err := m.merge(ctx, toMerge[t.Enum()], f.Path, logEvery); err != nil { return fmt.Errorf("mergeByAppendSegments: %w", err) } if doIndex { @@ -2631,16 +1948,16 @@ func (m *Merger) Merge(ctx context.Context, snapshots *RoSnapshots, mergeRanges } } - for _, t := range snaptype.BlockSnapshotTypes { - if len(toMerge[t]) == 0 { + for _, t := range snapTypes { + if len(toMerge[t.Enum()]) == 0 { continue } if onDelete != nil { - if err := onDelete(toMerge[t]); err != nil { + if err := onDelete(toMerge[t.Enum()]); err != nil { return err } } - m.removeOldFiles(toMerge[t], snapDir, snapshots.Version()) + removeOldFiles(toMerge[t.Enum()], snapDir) } } m.logger.Log(m.lvl, "[snapshots] Merge done", "from", mergeRanges[0].from, "to", mergeRanges[0].to) @@ -2650,9 +1967,9 @@ func (m *Merger) Merge(ctx context.Context, snapshots *RoSnapshots, mergeRanges func (m *Merger) merge(ctx context.Context, toMerge []string, targetFile string, logEvery *time.Ticker) error { var word = make([]byte, 0, 4096) var expectedTotal int - cList := make([]*compress.Decompressor, len(toMerge)) + cList := make([]*seg.Decompressor, len(toMerge)) for i, cFile := range toMerge { - d, err := compress.NewDecompressor(cFile) + d, err := seg.NewDecompressor(cFile) if err != nil { return err } @@ -2661,7 +1978,7 @@ func (m *Merger) merge(ctx context.Context, toMerge []string, targetFile string, expectedTotal += d.Count() } - f, err := compress.NewCompressor(ctx, "Snapshots merge", targetFile, m.tmpDir, compress.MinPatternScore, m.compressWorkers, log.LvlTrace, m.logger) + f, err := seg.NewCompressor(ctx, "Snapshots merge", targetFile, m.tmpDir, seg.MinPatternScore, m.compressWorkers, log.LvlTrace, m.logger) if err != nil { return err } @@ -2696,19 +2013,19 @@ func (m *Merger) merge(ctx context.Context, toMerge []string, targetFile string, return nil } -func (m *Merger) removeOldFiles(toDel []string, snapDir string, version uint8) { +func removeOldFiles(toDel []string, snapDir string) { for _, f := range toDel { _ = os.Remove(f) _ = os.Remove(f + ".torrent") ext := filepath.Ext(f) withoutExt := f[:len(f)-len(ext)] _ = os.Remove(withoutExt + ".idx") - isTxnType := strings.HasSuffix(withoutExt, snaptype.Transactions.String()) + isTxnType := strings.HasSuffix(withoutExt, coresnaptype.Transactions.Name()) if isTxnType { _ = os.Remove(withoutExt + "-to-block.idx") } } - tmpFiles, err := snaptype.TmpFiles(snapDir, version) + tmpFiles, err := snaptype.TmpFiles(snapDir) if err != nil { return } @@ -2717,21 +2034,88 @@ func (m *Merger) removeOldFiles(toDel []string, snapDir string, version uint8) { } } -func (sn *HeaderSegment) mappedSnapshot() *silkworm.MappedHeaderSnapshot { - segmentRegion := silkworm.NewMemoryMappedRegion(sn.seg.FilePath(), sn.seg.DataHandle(), sn.seg.Size()) - idxRegion := silkworm.NewMemoryMappedRegion(sn.idxHeaderHash.FilePath(), sn.idxHeaderHash.DataHandle(), sn.idxHeaderHash.Size()) - return silkworm.NewMappedHeaderSnapshot(segmentRegion, idxRegion) +type View struct { + s *RoSnapshots + baseSegType snaptype.Type + closed bool } -func (sn *BodySegment) mappedSnapshot() *silkworm.MappedBodySnapshot { - segmentRegion := silkworm.NewMemoryMappedRegion(sn.seg.FilePath(), sn.seg.DataHandle(), sn.seg.Size()) - idxRegion := silkworm.NewMemoryMappedRegion(sn.idxBodyNumber.FilePath(), sn.idxBodyNumber.DataHandle(), sn.idxBodyNumber.Size()) - return silkworm.NewMappedBodySnapshot(segmentRegion, idxRegion) +func (s *RoSnapshots) View() *View { + v := &View{s: s, baseSegType: coresnaptype.Headers} + s.lockSegments() + return v } -func (sn *TxnSegment) mappedSnapshot() *silkworm.MappedTxnSnapshot { - segmentRegion := silkworm.NewMemoryMappedRegion(sn.Seg.FilePath(), sn.Seg.DataHandle(), sn.Seg.Size()) - idxTxnHashRegion := silkworm.NewMemoryMappedRegion(sn.IdxTxnHash.FilePath(), sn.IdxTxnHash.DataHandle(), sn.IdxTxnHash.Size()) - idxTxnHash2BlockRegion := silkworm.NewMemoryMappedRegion(sn.IdxTxnHash2BlockNum.FilePath(), sn.IdxTxnHash2BlockNum.DataHandle(), sn.IdxTxnHash2BlockNum.Size()) - return silkworm.NewMappedTxnSnapshot(segmentRegion, idxTxnHashRegion, idxTxnHash2BlockRegion) +func (v *View) Close() { + if v.closed { + return + } + v.closed = true + v.s.unlockSegments() +} + +func (v *View) Segments(t snaptype.Type) []*Segment { + if s, ok := v.s.segments.Get(t.Enum()); ok { + return s.segments + } + return nil +} + +func (v *View) Headers() []*Segment { return v.Segments(coresnaptype.Headers) } +func (v *View) Bodies() []*Segment { return v.Segments(coresnaptype.Bodies) } +func (v *View) Txs() []*Segment { return v.Segments(coresnaptype.Transactions) } + +func (v *View) Segment(t snaptype.Type, blockNum uint64) (*Segment, bool) { + if s, ok := v.s.segments.Get(t.Enum()); ok { + for _, seg := range s.segments { + if !(blockNum >= seg.from && blockNum < seg.to) { + continue + } + return seg, true + } + } + return nil, false +} + +func (v *View) Ranges() (ranges []Range) { + for _, sn := range v.Segments(v.baseSegType) { + ranges = append(ranges, sn.Range) + } + + return ranges +} + +func (v *View) HeadersSegment(blockNum uint64) (*Segment, bool) { + return v.Segment(coresnaptype.Headers, blockNum) +} + +func (v *View) BodiesSegment(blockNum uint64) (*Segment, bool) { + return v.Segment(coresnaptype.Bodies, blockNum) +} +func (v *View) TxsSegment(blockNum uint64) (*Segment, bool) { + return v.Segment(coresnaptype.Transactions, blockNum) +} + +func RemoveIncompatibleIndices(snapsDir string) error { + l, err := dir2.ListFiles(snapsDir, ".idx") + if err != nil { + return err + } + for _, fPath := range l { + index, err := recsplit.OpenIndex(fPath) + if err != nil { + if errors.Is(err, recsplit.IncompatibleErr) { + _, fName := filepath.Split(fPath) + if err = os.Remove(fPath); err != nil { + log.Warn("Removing incompatible index", "file", fName, "err", err) + } else { + log.Info("Removing incompatible index", "file", fName) + } + continue + } + return fmt.Errorf("%w, %s", err, fPath) + } + index.Close() + } + return nil } diff --git a/turbo/snapshotsync/freezeblocks/block_snapshots_test.go b/turbo/snapshotsync/freezeblocks/block_snapshots_test.go index 2cb17f77d80..a6d6a9f6528 100644 --- a/turbo/snapshotsync/freezeblocks/block_snapshots_test.go +++ b/turbo/snapshotsync/freezeblocks/block_snapshots_test.go @@ -6,21 +6,23 @@ import ( "testing" "testing/fstest" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon-lib/chain/networkname" "github.com/ledgerwatch/erigon-lib/chain/snapcfg" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/recsplit" - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/require" + "github.com/ledgerwatch/erigon-lib/seg" "github.com/ledgerwatch/erigon/common/math" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" "github.com/ledgerwatch/erigon/eth/ethconfig" "github.com/ledgerwatch/erigon/params" ) -func createTestSegmentFile(t *testing.T, from, to uint64, name snaptype.Type, dir string, version uint8, logger log.Logger) { - c, err := compress.NewCompressor(context.Background(), "test", filepath.Join(dir, snaptype.SegmentFileName(version, from, to, name)), dir, 100, 1, log.LvlDebug, logger) +func createTestSegmentFile(t *testing.T, from, to uint64, name snaptype.Enum, dir string, version snaptype.Version, logger log.Logger) { + c, err := seg.NewCompressor(context.Background(), "test", filepath.Join(dir, snaptype.SegmentFileName(version, from, to, name)), dir, 100, 1, log.LvlDebug, logger) require.NoError(t, err) defer c.Close() c.DisableFsync() @@ -42,12 +44,12 @@ func createTestSegmentFile(t *testing.T, from, to uint64, name snaptype.Type, di require.NoError(t, err) err = idx.Build(context.Background()) require.NoError(t, err) - if name == snaptype.Transactions { + if name == coresnaptype.Transactions.Enum() { idx, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ KeyCount: 1, BucketSize: 10, TmpDir: dir, - IndexFile: filepath.Join(dir, snaptype.IdxFileName(1, from, to, snaptype.Transactions2Block.String())), + IndexFile: filepath.Join(dir, snaptype.IdxFileName(1, from, to, coresnaptype.Indexes.TxnHash2BlockNum.Name)), LeafSize: 8, }, logger) require.NoError(t, err) @@ -63,25 +65,51 @@ func TestFindMergeRange(t *testing.T) { merger := NewMerger("x", 1, log.LvlInfo, nil, params.MainnetChainConfig, nil) merger.DisableFsync() t.Run("big", func(t *testing.T) { - var ranges []Range + var rangesOld []Range for i := 0; i < 24; i++ { - ranges = append(ranges, Range{from: uint64(i * 100_000), to: uint64((i + 1) * 100_000)}) + rangesOld = append(rangesOld, Range{from: uint64(i * 100_000), to: uint64((i + 1) * 100_000)}) } - found := merger.FindMergeRanges(ranges, uint64(24*100_000)) + found := merger.FindMergeRanges(rangesOld, uint64(24*100_000)) - expect := Ranges{} + expect := Ranges{{0, 500000}, {500000, 1000000}, {1000000, 1500000}, {1500000, 2000000}} + require.Equal(t, expect.String(), Ranges(found).String()) + + var rangesNew []Range + start := uint64(19_000_000) + for i := uint64(0); i < 24; i++ { + rangesNew = append(rangesNew, Range{from: start + (i * 100_000), to: start + ((i + 1) * 100_000)}) + } + found = merger.FindMergeRanges(rangesNew, uint64(24*100_000)) + + expect = Ranges{} require.Equal(t, expect.String(), Ranges(found).String()) }) t.Run("small", func(t *testing.T) { - var ranges Ranges - for i := 0; i < 240; i++ { - ranges = append(ranges, Range{from: uint64(i * 10_000), to: uint64((i + 1) * 10_000)}) + var rangesOld Ranges + for i := uint64(0); i < 240; i++ { + rangesOld = append(rangesOld, Range{from: i * 10_000, to: (i + 1) * 10_000}) } - found := merger.FindMergeRanges(ranges, uint64(240*10_000)) + found := merger.FindMergeRanges(rangesOld, uint64(240*10_000)) var expect Ranges + for i := uint64(0); i < 4; i++ { + expect = append(expect, Range{from: i * snaptype.Erigon2OldMergeLimit, to: (i + 1) * snaptype.Erigon2OldMergeLimit}) + } + for i := uint64(0); i < 4; i++ { + expect = append(expect, Range{from: 2_000_000 + i*snaptype.Erigon2MergeLimit, to: 2_000_000 + (i+1)*snaptype.Erigon2MergeLimit}) + } + + require.Equal(t, expect.String(), Ranges(found).String()) + + var rangesNew Ranges + start := uint64(19_000_000) + for i := uint64(0); i < 240; i++ { + rangesNew = append(rangesNew, Range{from: start + i*10_000, to: start + (i+1)*10_000}) + } + found = merger.FindMergeRanges(rangesNew, uint64(240*10_000)) + expect = nil for i := uint64(0); i < 24; i++ { - expect = append(expect, Range{from: i * snaptype.Erigon2MergeLimit, to: (i + 1) * snaptype.Erigon2MergeLimit}) + expect = append(expect, Range{from: start + i*snaptype.Erigon2MergeLimit, to: start + (i+1)*snaptype.Erigon2MergeLimit}) } require.Equal(t, expect.String(), Ranges(found).String()) @@ -93,16 +121,17 @@ func TestMergeSnapshots(t *testing.T) { logger := log.New() dir, require := t.TempDir(), require.New(t) createFile := func(from, to uint64) { - for _, snT := range snaptype.BlockSnapshotTypes { - createTestSegmentFile(t, from, to, snT, dir, 1, logger) + for _, snT := range coresnaptype.BlockSnapshotTypes { + createTestSegmentFile(t, from, to, snT.Enum(), dir, 1, logger) } } N := uint64(70) + for i := uint64(0); i < N; i++ { createFile(i*10_000, (i+1)*10_000) } - s := NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 1, logger) + s := NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) defer s.Close() require.NoError(s.ReopenFolder()) { @@ -110,15 +139,54 @@ func TestMergeSnapshots(t *testing.T) { merger.DisableFsync() ranges := merger.FindMergeRanges(s.Ranges(), s.SegmentsMax()) require.True(len(ranges) > 0) - err := merger.Merge(context.Background(), s, ranges, s.Dir(), false, nil, nil) + err := merger.Merge(context.Background(), s, coresnaptype.BlockSnapshotTypes, ranges, s.Dir(), false, nil, nil) require.NoError(err) } - expectedFileName := snaptype.SegmentFileName(1, 100_000, 200_000, snaptype.Transactions) - d, err := compress.NewDecompressor(filepath.Join(dir, expectedFileName)) + expectedFileName := snaptype.SegmentFileName(coresnaptype.Transactions.Versions().Current, 0, 500_000, coresnaptype.Transactions.Enum()) + d, err := seg.NewDecompressor(filepath.Join(dir, expectedFileName)) require.NoError(err) defer d.Close() a := d.Count() + require.Equal(50, a) + + { + merger := NewMerger(dir, 1, log.LvlInfo, nil, params.MainnetChainConfig, logger) + merger.DisableFsync() + ranges := merger.FindMergeRanges(s.Ranges(), s.SegmentsMax()) + require.True(len(ranges) == 0) + err := merger.Merge(context.Background(), s, coresnaptype.BlockSnapshotTypes, ranges, s.Dir(), false, nil, nil) + require.NoError(err) + } + + expectedFileName = snaptype.SegmentFileName(coresnaptype.Transactions.Versions().Current, 600_000, 700_000, coresnaptype.Transactions.Enum()) + d, err = seg.NewDecompressor(filepath.Join(dir, expectedFileName)) + require.NoError(err) + defer d.Close() + a = d.Count() + require.Equal(10, a) + + start := uint64(19_000_000) + for i := uint64(0); i < N; i++ { + createFile(start+i*10_000, start+(i+1)*10_000) + } + s = NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, start, logger) + defer s.Close() + require.NoError(s.ReopenFolder()) + { + merger := NewMerger(dir, 1, log.LvlInfo, nil, params.MainnetChainConfig, logger) + merger.DisableFsync() + ranges := merger.FindMergeRanges(s.Ranges(), s.SegmentsMax()) + require.True(len(ranges) > 0) + err := merger.Merge(context.Background(), s, coresnaptype.BlockSnapshotTypes, ranges, s.Dir(), false, nil, nil) + require.NoError(err) + } + + expectedFileName = snaptype.SegmentFileName(coresnaptype.Transactions.Versions().Current, start+100_000, start+200_000, coresnaptype.Transactions.Enum()) + d, err = seg.NewDecompressor(filepath.Join(dir, expectedFileName)) + require.NoError(err) + defer d.Close() + a = d.Count() require.Equal(10, a) { @@ -126,18 +194,68 @@ func TestMergeSnapshots(t *testing.T) { merger.DisableFsync() ranges := merger.FindMergeRanges(s.Ranges(), s.SegmentsMax()) require.True(len(ranges) == 0) - err := merger.Merge(context.Background(), s, ranges, s.Dir(), false, nil, nil) + err := merger.Merge(context.Background(), s, coresnaptype.BlockSnapshotTypes, ranges, s.Dir(), false, nil, nil) require.NoError(err) } - expectedFileName = snaptype.SegmentFileName(1, 600_000, 700_000, snaptype.Transactions) - d, err = compress.NewDecompressor(filepath.Join(dir, expectedFileName)) + expectedFileName = snaptype.SegmentFileName(coresnaptype.Transactions.Versions().Current, start+600_000, start+700_000, coresnaptype.Transactions.Enum()) + d, err = seg.NewDecompressor(filepath.Join(dir, expectedFileName)) require.NoError(err) defer d.Close() a = d.Count() require.Equal(10, a) } +func TestRemoveOverlaps(t *testing.T) { + logger := log.New() + dir, require := t.TempDir(), require.New(t) + createFile := func(from, to uint64) { + for _, snT := range coresnaptype.BlockSnapshotTypes { + createTestSegmentFile(t, from, to, snT.Enum(), dir, 1, logger) + } + } + + for i := uint64(0); i < 5; i++ { + createFile(i*10_000, (i+1)*10_000) + } + + createFile(0, 100_000) + + for i := uint64(3); i < 8; i++ { + createFile(100_000+i*10_000, 100_000+(i+1)*10_000) + } + + createFile(100_000, 200_000) + + for i := uint64(0); i < 3; i++ { + createFile(200_000+i*10_000, 200_000+(i+1)*10_000) + } + + s := NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: true}, dir, 0, logger) + + defer s.Close() + require.NoError(s.ReopenFolder()) + + list, err := snaptype.Segments(s.dir) + require.NoError(err) + require.Equal(45, len(list)) + + s.removeOverlapsAfterMerge() + + list, err = snaptype.Segments(s.dir) + require.NoError(err) + + require.Equal(15, len(list)) + + for i, info := range list { + if i%5 < 2 { + require.Equal(100_000, int(info.Len())) + } else { + require.Equal(10_000, int(info.Len())) + } + } +} + func TestCanRetire(t *testing.T) { require := require.New(t) cases := []struct { @@ -151,7 +269,7 @@ func TestCanRetire(t *testing.T) { {1_001_000, 2_000_000, 1_001_000, 1_002_000, true}, } for i, tc := range cases { - from, to, can := canRetire(tc.inFrom, tc.inTo) + from, to, can := canRetire(tc.inFrom, tc.inTo, snaptype.Unknown, nil) require.Equal(int(tc.outFrom), int(from), i) require.Equal(int(tc.outTo), int(to), i) require.Equal(tc.can, can, tc.inFrom, tc.inTo, i) @@ -159,73 +277,88 @@ func TestCanRetire(t *testing.T) { } func TestOpenAllSnapshot(t *testing.T) { logger := log.New() - dir, require := t.TempDir(), require.New(t) - chainSnapshotCfg := snapcfg.KnownCfg(networkname.MainnetChainName, 0) - chainSnapshotCfg.ExpectBlocks = math.MaxUint64 - cfg := ethconfig.BlocksFreezing{Enabled: true} - createFile := func(from, to uint64, name snaptype.Type) { createTestSegmentFile(t, from, to, name, dir, 1, logger) } - s := NewRoSnapshots(cfg, dir, 1, logger) - defer s.Close() - err := s.ReopenFolder() - require.NoError(err) - require.Equal(0, len(s.Headers.segments)) - s.Close() + baseDir, require := t.TempDir(), require.New(t) - createFile(500_000, 1_000_000, snaptype.Bodies) - s = NewRoSnapshots(cfg, dir, 1, logger) - defer s.Close() - require.Equal(0, len(s.Bodies.segments)) //because, no headers and transactions snapshot files are created - s.Close() + for _, chain := range []string{networkname.MainnetChainName, networkname.MumbaiChainName} { + dir := filepath.Join(baseDir, chain) + chainSnapshotCfg := snapcfg.KnownCfg(chain) + chainSnapshotCfg.ExpectBlocks = math.MaxUint64 + cfg := ethconfig.BlocksFreezing{Enabled: true} + createFile := func(from, to uint64, name snaptype.Type) { + createTestSegmentFile(t, from, to, name.Enum(), dir, 1, logger) + } + s := NewRoSnapshots(cfg, dir, 0, logger) + defer s.Close() + err := s.ReopenFolder() + require.NoError(err) + require.NotNil(s.segments.Get(coresnaptype.Enums.Headers)) + getSegs := func(e snaptype.Enum) *segments { + res, _ := s.segments.Get(e) + return res + } + require.Equal(0, len(getSegs(coresnaptype.Enums.Headers).segments)) + s.Close() - createFile(500_000, 1_000_000, snaptype.Headers) - createFile(500_000, 1_000_000, snaptype.Transactions) - s = NewRoSnapshots(cfg, dir, 1, logger) - err = s.ReopenFolder() - require.NoError(err) - require.Equal(0, len(s.Headers.segments)) - s.Close() + createFile(500_000, 1_000_000, coresnaptype.Bodies) + s = NewRoSnapshots(cfg, dir, 0, logger) + defer s.Close() + require.NotNil(getSegs(coresnaptype.Enums.Bodies)) + require.Equal(0, len(getSegs(coresnaptype.Enums.Bodies).segments)) + s.Close() - createFile(0, 500_000, snaptype.Bodies) - createFile(0, 500_000, snaptype.Headers) - createFile(0, 500_000, snaptype.Transactions) - s = NewRoSnapshots(cfg, dir, 1, logger) - defer s.Close() + createFile(500_000, 1_000_000, coresnaptype.Headers) + createFile(500_000, 1_000_000, coresnaptype.Transactions) + s = NewRoSnapshots(cfg, dir, 0, logger) + err = s.ReopenFolder() + require.NoError(err) + require.NotNil(getSegs(coresnaptype.Enums.Headers)) + require.Equal(0, len(getSegs(coresnaptype.Enums.Headers).segments)) + s.Close() - err = s.ReopenFolder() - require.NoError(err) - require.Equal(2, len(s.Headers.segments)) + createFile(0, 500_000, coresnaptype.Bodies) + createFile(0, 500_000, coresnaptype.Headers) + createFile(0, 500_000, coresnaptype.Transactions) + s = NewRoSnapshots(cfg, dir, 0, logger) + defer s.Close() - view := s.View() - defer view.Close() + err = s.ReopenFolder() + require.NoError(err) + require.NotNil(getSegs(coresnaptype.Enums.Headers)) + require.Equal(2, len(getSegs(coresnaptype.Enums.Headers).segments)) - seg, ok := view.TxsSegment(10) - require.True(ok) - require.Equal(int(seg.to), 500_000) + view := s.View() + defer view.Close() - seg, ok = view.TxsSegment(500_000) - require.True(ok) - require.Equal(int(seg.to), 1_000_000) + seg, ok := view.TxsSegment(10) + require.True(ok) + require.Equal(int(seg.to), 500_000) - _, ok = view.TxsSegment(1_000_000) - require.False(ok) + seg, ok = view.TxsSegment(500_000) + require.True(ok) + require.Equal(int(seg.to), 1_000_000) - // Erigon may create new snapshots by itself - with high bigger than hardcoded ExpectedBlocks - // ExpectedBlocks - says only how much block must come from Torrent - chainSnapshotCfg.ExpectBlocks = 500_000 - 1 - s = NewRoSnapshots(cfg, dir, 1, logger) - err = s.ReopenFolder() - require.NoError(err) - defer s.Close() - require.Equal(2, len(s.Headers.segments)) + _, ok = view.TxsSegment(1_000_000) + require.False(ok) - createFile(500_000, 900_000, snaptype.Headers) - createFile(500_000, 900_000, snaptype.Bodies) - createFile(500_000, 900_000, snaptype.Transactions) - chainSnapshotCfg.ExpectBlocks = math.MaxUint64 - s = NewRoSnapshots(cfg, dir, 1, logger) - defer s.Close() - err = s.ReopenFolder() - require.NoError(err) + // Erigon may create new snapshots by itself - with high bigger than hardcoded ExpectedBlocks + // ExpectedBlocks - says only how much block must come from Torrent + chainSnapshotCfg.ExpectBlocks = 500_000 - 1 + s = NewRoSnapshots(cfg, dir, 0, logger) + err = s.ReopenFolder() + require.NoError(err) + defer s.Close() + require.NotNil(getSegs(coresnaptype.Enums.Headers)) + require.Equal(2, len(getSegs(coresnaptype.Enums.Headers).segments)) + + createFile(500_000, 900_000, coresnaptype.Headers) + createFile(500_000, 900_000, coresnaptype.Bodies) + createFile(500_000, 900_000, coresnaptype.Transactions) + chainSnapshotCfg.ExpectBlocks = math.MaxUint64 + s = NewRoSnapshots(cfg, dir, 0, logger) + defer s.Close() + err = s.ReopenFolder() + require.NoError(err) + } } func TestParseCompressedFileName(t *testing.T) { @@ -245,24 +378,24 @@ func TestParseCompressedFileName(t *testing.T) { require.NoError(err) return s.Name() } - _, ok := snaptype.ParseFileName("", stat("a")) + _, _, ok := snaptype.ParseFileName("", stat("a")) require.False(ok) - _, ok = snaptype.ParseFileName("", stat("1-a")) + _, _, ok = snaptype.ParseFileName("", stat("1-a")) require.False(ok) - _, ok = snaptype.ParseFileName("", stat("1-2-a")) + _, _, ok = snaptype.ParseFileName("", stat("1-2-a")) require.False(ok) - _, ok = snaptype.ParseFileName("", stat("1-2-bodies.info")) + _, _, ok = snaptype.ParseFileName("", stat("1-2-bodies.info")) require.False(ok) - _, ok = snaptype.ParseFileName("", stat("1-2-bodies.seg")) + _, _, ok = snaptype.ParseFileName("", stat("1-2-bodies.seg")) require.False(ok) - _, ok = snaptype.ParseFileName("", stat("v2-1-2-bodies.seg")) + _, _, ok = snaptype.ParseFileName("", stat("v2-1-2-bodies.seg")) require.True(ok) - _, ok = snaptype.ParseFileName("", stat("v0-1-2-bodies.seg")) + _, _, ok = snaptype.ParseFileName("", stat("v0-1-2-bodies.seg")) require.True(ok) - f, ok := snaptype.ParseFileName("", stat("v1-1-2-bodies.seg")) + f, _, ok := snaptype.ParseFileName("", stat("v1-1-2-bodies.seg")) require.True(ok) - require.Equal(f.T, snaptype.Bodies) + require.Equal(f.Type.Enum(), coresnaptype.Bodies.Enum()) require.Equal(1_000, int(f.From)) require.Equal(2_000, int(f.To)) } diff --git a/turbo/snapshotsync/freezeblocks/bor_snapshots.go b/turbo/snapshotsync/freezeblocks/bor_snapshots.go index af486ef9347..6aee315ce9f 100644 --- a/turbo/snapshotsync/freezeblocks/bor_snapshots.go +++ b/turbo/snapshotsync/freezeblocks/bor_snapshots.go @@ -1,204 +1,84 @@ package freezeblocks import ( - "bytes" "context" - "encoding/binary" - "errors" "fmt" "os" "path/filepath" "reflect" - "runtime" - "sync" - "sync/atomic" - "time" - "github.com/ledgerwatch/log/v3" - "golang.org/x/exp/slices" - - "github.com/ledgerwatch/erigon-lib/chain" - "github.com/ledgerwatch/erigon-lib/chain/snapcfg" - common2 "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/background" - "github.com/ledgerwatch/erigon-lib/common/cmp" - "github.com/ledgerwatch/erigon-lib/common/dbg" - "github.com/ledgerwatch/erigon-lib/common/hexutility" - "github.com/ledgerwatch/erigon-lib/common/length" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" - "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/erigon-lib/recsplit" "github.com/ledgerwatch/erigon/cmd/hack/tool/fromdb" - "github.com/ledgerwatch/erigon/core/rawdb" - "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/eth/ethconfig" - "github.com/ledgerwatch/erigon/polygon/bor" + borsnaptype "github.com/ledgerwatch/erigon/polygon/bor/snaptype" "github.com/ledgerwatch/erigon/turbo/services" + "github.com/ledgerwatch/log/v3" ) -type BorEventSegment struct { - seg *compress.Decompressor // value: event_rlp - IdxBorTxnHash *recsplit.Index // bor_transaction_hash -> bor_event_segment_offset - Range - version uint8 +func (br *BlockRetire) dbHasEnoughDataForBorRetire(ctx context.Context) (bool, error) { + return true, nil } -func (sn *BorEventSegment) closeIdx() { - if sn.IdxBorTxnHash != nil { - sn.IdxBorTxnHash.Close() - sn.IdxBorTxnHash = nil - } -} -func (sn *BorEventSegment) closeSeg() { - if sn.seg != nil { - sn.seg.Close() - sn.seg = nil - } -} -func (sn *BorEventSegment) close() { - sn.closeSeg() - sn.closeIdx() -} -func (sn *BorEventSegment) reopenSeg(dir string) (err error) { - sn.closeSeg() - fileName := snaptype.SegmentFileName(sn.version, sn.from, sn.to, snaptype.BorEvents) - sn.seg, err = compress.NewDecompressor(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - return nil -} -func (sn *BorEventSegment) reopenIdx(dir string) (err error) { - sn.closeIdx() - if sn.seg == nil { - return nil +func (br *BlockRetire) retireBorBlocks(ctx context.Context, minBlockNum uint64, maxBlockNum uint64, lvl log.Lvl, seedNewSnapshots func(downloadRequest []services.DownloadRequest) error, onDelete func(l []string) error) (bool, error) { + select { + case <-ctx.Done(): + return false, ctx.Err() + default: } - fileName := snaptype.IdxFileName(sn.version, sn.from, sn.to, snaptype.BorEvents.String()) - sn.IdxBorTxnHash, err = recsplit.OpenIndex(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - return nil -} + snapshots := br.borSnapshots() -func (sn *BorEventSegment) reopenIdxIfNeed(dir string, optimistic bool) (err error) { - if sn.IdxBorTxnHash != nil { - return nil - } - err = sn.reopenIdx(dir) - if err != nil { - if !errors.Is(err, os.ErrNotExist) { - if optimistic { - log.Warn("[snapshots] open index", "err", err) - } else { - return err - } + chainConfig := fromdb.ChainConfig(br.db) + notifier, logger, blockReader, tmpDir, db, workers := br.notifier, br.logger, br.blockReader, br.tmpDir, br.db, br.workers + + blocksRetired := false + + minBlockNum = max(blockReader.FrozenBorBlocks(), minBlockNum) + for _, snaptype := range blockReader.BorSnapshots().Types() { + if maxBlockNum <= minBlockNum { + continue } - } - return nil -} -type borEventSegments struct { - lock sync.RWMutex - segments []*BorEventSegment -} + blockFrom, blockTo, ok := CanRetire(maxBlockNum, minBlockNum, snaptype.Enum(), br.chainConfig) + if ok { + blocksRetired = true -type BorSpanSegment struct { - seg *compress.Decompressor // value: span_json - idx *recsplit.Index // span_id -> offset - Range - version uint8 -} + if has, err := br.dbHasEnoughDataForBorRetire(ctx); err != nil { + return false, err + } else if !has { + return false, nil + } -func (sn *BorSpanSegment) closeIdx() { - if sn.idx != nil { - sn.idx.Close() - sn.idx = nil - } -} -func (sn *BorSpanSegment) closeSeg() { - if sn.seg != nil { - sn.seg.Close() - sn.seg = nil - } -} -func (sn *BorSpanSegment) close() { - sn.closeSeg() - sn.closeIdx() -} -func (sn *BorSpanSegment) reopenSeg(dir string) (err error) { - sn.closeSeg() - fileName := snaptype.SegmentFileName(sn.version, sn.from, sn.to, snaptype.BorSpans) - sn.seg, err = compress.NewDecompressor(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - return nil -} -func (sn *BorSpanSegment) reopenIdx(dir string) (err error) { - sn.closeIdx() - if sn.seg == nil { - return nil - } - fileName := snaptype.IdxFileName(sn.version, sn.from, sn.to, snaptype.BorSpans.String()) - sn.idx, err = recsplit.OpenIndex(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - return nil -} + logger.Log(lvl, "[bor snapshots] Retire Bor Blocks", "type", snaptype, "range", fmt.Sprintf("%dk-%dk", blockFrom/1000, blockTo/1000)) -func (sn *BorSpanSegment) reopenIdxIfNeed(dir string, optimistic bool) (err error) { - if sn.idx != nil { - return nil - } - err = sn.reopenIdx(dir) - if err != nil { - if !errors.Is(err, os.ErrNotExist) { - if optimistic { - log.Warn("[snapshots] open index", "err", err) - } else { - return err + for i := blockFrom; i < blockTo; i = chooseSegmentEnd(i, blockTo, snaptype.Enum(), chainConfig) { + end := chooseSegmentEnd(i, blockTo, snaptype.Enum(), chainConfig) + if _, err := snaptype.ExtractRange(ctx, snaptype.FileInfo(snapshots.Dir(), i, end), nil, db, chainConfig, tmpDir, workers, lvl, logger); err != nil { + return ok, fmt.Errorf("ExtractRange: %d-%d: %w", i, end, err) + } } } } - return nil -} -type borSpanSegments struct { - lock sync.RWMutex - segments []*BorSpanSegment -} - -func (br *BlockRetire) retireBorBlocks(ctx context.Context, minBlockNum uint64, maxBlockNum uint64, lvl log.Lvl, seedNewSnapshots func(downloadRequest []services.DownloadRequest) error, onDelete func(l []string) error) (bool, error) { - chainConfig := fromdb.ChainConfig(br.db) - notifier, logger, blockReader, tmpDir, db, workers := br.notifier, br.logger, br.blockReader, br.tmpDir, br.db, br.workers - snapshots := br.borSnapshots() - firstTxNum := blockReader.(*BlockReader).FirstTxNumNotInSnapshots() - blockFrom, blockTo, ok := CanRetire(maxBlockNum, minBlockNum) - if ok { - logger.Log(lvl, "[bor snapshots] Retire Bor Blocks", "range", fmt.Sprintf("%dk-%dk", blockFrom/1000, blockTo/1000)) - if err := DumpBorBlocks(ctx, chainConfig, snapshots.version, blockFrom, blockTo, snaptype.Erigon2MergeLimit, tmpDir, snapshots.Dir(), firstTxNum, db, workers, lvl, logger, blockReader); err != nil { - return ok, fmt.Errorf("DumpBorBlocks: %w", err) - } + if blocksRetired { if err := snapshots.ReopenFolder(); err != nil { - return ok, fmt.Errorf("reopen: %w", err) + return blocksRetired, fmt.Errorf("reopen: %w", err) } - snapshots.LogStat("retire") + snapshots.LogStat("bor:retire") if notifier != nil && !reflect.ValueOf(notifier).IsNil() { // notify about new snapshots of any size notifier.OnNewSnapshot() } } - merger := NewBorMerger(tmpDir, workers, lvl, db, chainConfig, notifier, logger) - rangesToMerge := merger.FindMergeRanges(snapshots.Ranges()) - logger.Log(lvl, "[bor snapshots] Retire Bor Blocks", "rangesToMerge", fmt.Sprintf("%s", Ranges(rangesToMerge))) + merger := NewMerger(tmpDir, workers, lvl, db, chainConfig, logger) + rangesToMerge := merger.FindMergeRanges(snapshots.Ranges(), snapshots.BlocksAvailable()) + if len(rangesToMerge) > 0 { + logger.Log(lvl, "[bor snapshots] Retire Bor Blocks", "rangesToMerge", Ranges(rangesToMerge)) + } if len(rangesToMerge) == 0 { - return ok, nil + return blocksRetired, nil } - ok = true // have something to merge + blocksRetired = true // have something to merge onMerge := func(r Range) error { if notifier != nil && !reflect.ValueOf(notifier).IsNil() { // notify about new snapshots of any size notifier.OnNewSnapshot() @@ -214,431 +94,57 @@ func (br *BlockRetire) retireBorBlocks(ctx context.Context, minBlockNum uint64, } return nil } - err := merger.Merge(ctx, snapshots, rangesToMerge, snapshots.Dir(), true /* doIndex */, onMerge, onDelete) - if err != nil { - return ok, err - } - return ok, nil -} -func DumpBorBlocks(ctx context.Context, chainConfig *chain.Config, version uint8, blockFrom, blockTo, blocksPerFile uint64, tmpDir, snapDir string, firstTxNum uint64, chainDB kv.RoDB, workers int, lvl log.Lvl, logger log.Logger, blockReader services.FullBlockReader) error { - if blocksPerFile == 0 { - return nil - } - for i := blockFrom; i < blockTo; i = chooseSegmentEnd(i, blockTo, blocksPerFile) { - if err := dumpBorBlocksRange(ctx, version, i, chooseSegmentEnd(i, blockTo, blocksPerFile), tmpDir, snapDir, firstTxNum, chainDB, *chainConfig, workers, lvl, logger, blockReader); err != nil { - return err - } + err := merger.Merge(ctx, &snapshots.RoSnapshots, borsnaptype.BorSnapshotTypes(), rangesToMerge, snapshots.Dir(), true /* doIndex */, onMerge, onDelete) + if err != nil { + return blocksRetired, err } - return nil -} - -func dumpBorBlocksRange(ctx context.Context, version uint8, blockFrom, blockTo uint64, tmpDir, snapDir string, firstTxNum uint64, chainDB kv.RoDB, chainConfig chain.Config, workers int, lvl log.Lvl, logger log.Logger, blockReader services.FullBlockReader) error { - logEvery := time.NewTicker(20 * time.Second) - defer logEvery.Stop() { - segName := snaptype.SegmentFileName(version, blockFrom, blockTo, snaptype.BorEvents) - f, _ := snaptype.ParseFileName(snapDir, segName) - - sn, err := compress.NewCompressor(ctx, "Snapshot BorEvents", f.Path, tmpDir, compress.MinPatternScore, workers, log.LvlTrace, logger) + files, _, err := typedSegments(br.borSnapshots().dir, br.borSnapshots().segmentsMin.Load(), borsnaptype.BorSnapshotTypes(), false) if err != nil { - return err - } - defer sn.Close() - if err := DumpBorEvents(ctx, chainDB, blockFrom, blockTo, workers, lvl, logger, func(v []byte) error { - return sn.AddWord(v) - }); err != nil { - return fmt.Errorf("DumpBorEvents: %w", err) - } - if err := sn.Compress(); err != nil { - return fmt.Errorf("compress: %w", err) + return blocksRetired, err } - p := &background.Progress{} - if err := buildIdx(ctx, f, &chainConfig, tmpDir, p, lvl, logger); err != nil { - return err - } + // this is one off code to fix an issue in 2.49.x->2.52.x which missed + // removal of intermediate segments after a merge operation + removeBorOverlapsAfterMerge(br.borSnapshots().dir, files, br.borSnapshots().BlocksAvailable()) } - { - segName := snaptype.SegmentFileName(version, blockFrom, blockTo, snaptype.BorSpans) - f, _ := snaptype.ParseFileName(snapDir, segName) - - sn, err := compress.NewCompressor(ctx, "Snapshot BorSpans", f.Path, tmpDir, compress.MinPatternScore, workers, log.LvlTrace, logger) - if err != nil { - return err - } - defer sn.Close() - if err := DumpBorSpans(ctx, chainDB, blockFrom, blockTo, workers, lvl, logger, func(v []byte) error { - return sn.AddWord(v) - }); err != nil { - return fmt.Errorf("DumpBorSpans: %w", err) - } - if err := sn.Compress(); err != nil { - return fmt.Errorf("compress: %w", err) - } - p := &background.Progress{} - if err := buildIdx(ctx, f, &chainConfig, tmpDir, p, lvl, logger); err != nil { - return err - } - } - return nil + return blocksRetired, nil } -func dumpBorEventRange(startEventId, endEventId uint64, tx kv.Tx, blockNum uint64, blockHash common2.Hash, collect func([]byte) error) error { - var blockNumBuf [8]byte - var eventIdBuf [8]byte - txnHash := types.ComputeBorTxHash(blockNum, blockHash) - binary.BigEndian.PutUint64(blockNumBuf[:], blockNum) - for eventId := startEventId; eventId < endEventId; eventId++ { - binary.BigEndian.PutUint64(eventIdBuf[:], eventId) - event, err := tx.GetOne(kv.BorEvents, eventIdBuf[:]) - if err != nil { - return err - } - snapshotRecord := make([]byte, len(event)+length.Hash+length.BlockNum+8) - copy(snapshotRecord, txnHash[:]) - copy(snapshotRecord[length.Hash:], blockNumBuf[:]) - binary.BigEndian.PutUint64(snapshotRecord[length.Hash+length.BlockNum:], eventId) - copy(snapshotRecord[length.Hash+length.BlockNum+8:], event) - if err := collect(snapshotRecord); err != nil { - return err - } - } - return nil -} +// Bor Events +// value: event_rlp +// bor_transaction_hash -> bor_event_segment_offset -// DumpBorEvents - [from, to) -func DumpBorEvents(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, workers int, lvl log.Lvl, logger log.Logger, collect func([]byte) error) error { - logEvery := time.NewTicker(20 * time.Second) - defer logEvery.Stop() - - from := hexutility.EncodeTs(blockFrom) - var first bool = true - var prevBlockNum uint64 - var startEventId uint64 - var lastEventId uint64 - if err := kv.BigChunks(db, kv.BorEventNums, from, func(tx kv.Tx, blockNumBytes, eventIdBytes []byte) (bool, error) { - blockNum := binary.BigEndian.Uint64(blockNumBytes) - if first { - startEventId = binary.BigEndian.Uint64(eventIdBytes) - first = false - prevBlockNum = blockNum - } else if blockNum != prevBlockNum { - endEventId := binary.BigEndian.Uint64(eventIdBytes) - blockHash, e := rawdb.ReadCanonicalHash(tx, prevBlockNum) - if e != nil { - return false, e - } - if e := dumpBorEventRange(startEventId, endEventId, tx, prevBlockNum, blockHash, collect); e != nil { - return false, e - } - startEventId = endEventId - prevBlockNum = blockNum - } - if blockNum >= blockTo { - return false, nil - } - lastEventId = binary.BigEndian.Uint64(eventIdBytes) - select { - case <-ctx.Done(): - return false, ctx.Err() - case <-logEvery.C: - var m runtime.MemStats - if lvl >= log.LvlInfo { - dbg.ReadMemStats(&m) - } - logger.Log(lvl, "[bor snapshots] Dumping bor events", "block num", blockNum, - "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys), - ) - default: - } - return true, nil - }); err != nil { - return err - } - if lastEventId > startEventId { - if err := db.View(ctx, func(tx kv.Tx) error { - blockHash, e := rawdb.ReadCanonicalHash(tx, prevBlockNum) - if e != nil { - return e - } - return dumpBorEventRange(startEventId, lastEventId+1, tx, prevBlockNum, blockHash, collect) - }); err != nil { - return err - } - } - return nil -} - -// DumpBorSpans - [from, to) -func DumpBorSpans(ctx context.Context, db kv.RoDB, blockFrom, blockTo uint64, workers int, lvl log.Lvl, logger log.Logger, collect func([]byte) error) error { - logEvery := time.NewTicker(20 * time.Second) - defer logEvery.Stop() - spanFrom := bor.SpanIDAt(blockFrom) - spanTo := bor.SpanIDAt(blockTo) - from := hexutility.EncodeTs(spanFrom) - if err := kv.BigChunks(db, kv.BorSpans, from, func(tx kv.Tx, spanIdBytes, spanBytes []byte) (bool, error) { - spanId := binary.BigEndian.Uint64(spanIdBytes) - if spanId >= spanTo { - return false, nil - } - if e := collect(spanBytes); e != nil { - return false, e - } - select { - case <-ctx.Done(): - return false, ctx.Err() - case <-logEvery.C: - var m runtime.MemStats - if lvl >= log.LvlInfo { - dbg.ReadMemStats(&m) - } - logger.Log(lvl, "[bor snapshots] Dumping bor spans", "spanId", spanId, - "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys), - ) - default: - } - return true, nil - }); err != nil { - return err - } - return nil -} - -func BorEventsIdx(ctx context.Context, segmentFilePath string, version uint8, blockFrom, blockTo uint64, snapDir string, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { - defer func() { - if rec := recover(); rec != nil { - err = fmt.Errorf("BorEventsIdx: at=%d-%d, %v, %s", blockFrom, blockTo, rec, dbg.Stack()) - } - }() - // Calculate how many records there will be in the index - d, err := compress.NewDecompressor(segmentFilePath) - if err != nil { - return err - } - defer d.Close() - g := d.MakeGetter() - var blockNumBuf [length.BlockNum]byte - var first bool = true - word := make([]byte, 0, 4096) - var blockCount int - var baseEventId uint64 - for g.HasNext() { - word, _ = g.Next(word[:0]) - if first || !bytes.Equal(blockNumBuf[:], word[length.Hash:length.Hash+length.BlockNum]) { - blockCount++ - copy(blockNumBuf[:], word[length.Hash:length.Hash+length.BlockNum]) - } - if first { - baseEventId = binary.BigEndian.Uint64(word[length.Hash+length.BlockNum : length.Hash+length.BlockNum+8]) - first = false - } - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - } - var idxFilePath = filepath.Join(snapDir, snaptype.IdxFileName(version, blockFrom, blockTo, snaptype.BorEvents.String())) - - rs, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ - KeyCount: blockCount, - Enums: blockCount > 0, - BucketSize: 2000, - LeafSize: 8, - TmpDir: tmpDir, - IndexFile: idxFilePath, - BaseDataID: baseEventId, - }, logger) - if err != nil { - return err - } - rs.LogLvl(log.LvlDebug) - - defer d.EnableMadvNormal().DisableReadAhead() -RETRY: - g.Reset(0) - first = true - var i, offset, nextPos uint64 - for g.HasNext() { - word, nextPos = g.Next(word[:0]) - i++ - if first || !bytes.Equal(blockNumBuf[:], word[length.Hash:length.Hash+length.BlockNum]) { - if err = rs.AddKey(word[:length.Hash], offset); err != nil { - return err - } - copy(blockNumBuf[:], word[length.Hash:length.Hash+length.BlockNum]) - } - if first { - first = false - } - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - offset = nextPos - } - if err = rs.Build(ctx); err != nil { - if errors.Is(err, recsplit.ErrCollision) { - logger.Info("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) - rs.ResetNextSalt() - goto RETRY - } - return err - } - - return nil -} - -func BorSpansIdx(ctx context.Context, segmentFilePath string, version uint8, blockFrom, blockTo uint64, snapDir string, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { - defer func() { - if rec := recover(); rec != nil { - err = fmt.Errorf("BorSpansIdx: at=%d-%d, %v, %s", blockFrom, blockTo, rec, dbg.Stack()) - } - }() - // Calculate how many records there will be in the index - d, err := compress.NewDecompressor(segmentFilePath) - if err != nil { - return err - } - defer d.Close() - g := d.MakeGetter() - var idxFilePath = filepath.Join(snapDir, snaptype.IdxFileName(version, blockFrom, blockTo, snaptype.BorSpans.String())) - - baseSpanId := bor.SpanIDAt(blockFrom) - - rs, err := recsplit.NewRecSplit(recsplit.RecSplitArgs{ - KeyCount: d.Count(), - Enums: d.Count() > 0, - BucketSize: 2000, - LeafSize: 8, - TmpDir: tmpDir, - IndexFile: idxFilePath, - BaseDataID: baseSpanId, - }, logger) - if err != nil { - return err - } - rs.LogLvl(log.LvlDebug) - - defer d.EnableMadvNormal().DisableReadAhead() -RETRY: - g.Reset(0) - var i, offset, nextPos uint64 - var key [8]byte - for g.HasNext() { - nextPos, _ = g.Skip() - binary.BigEndian.PutUint64(key[:], i) - i++ - if err = rs.AddKey(key[:], offset); err != nil { - return err - } - select { - case <-ctx.Done(): - return ctx.Err() - default: - } - offset = nextPos - } - if err = rs.Build(ctx); err != nil { - if errors.Is(err, recsplit.ErrCollision) { - logger.Info("Building recsplit. Collision happened. It's ok. Restarting with another salt...", "err", err) - rs.ResetNextSalt() - goto RETRY - } - return err - } - - return nil -} +// Bor Spans +// value: span_json +// span_id -> offset type BorRoSnapshots struct { - indicesReady atomic.Bool - segmentsReady atomic.Bool - - Events *borEventSegments - Spans *borSpanSegments - - dir string - segmentsMax atomic.Uint64 // all types of .seg files are available - up to this number - idxMax atomic.Uint64 // all types of .idx files are available - up to this number - cfg ethconfig.BlocksFreezing - logger log.Logger - version uint8 - - segmentsMin atomic.Uint64 + RoSnapshots } // NewBorRoSnapshots - opens all bor snapshots. But to simplify everything: // - it opens snapshots only on App start and immutable after // - all snapshots of given blocks range must exist - to make this blocks range available // - gaps are not allowed -// - segment have [from:to) semantic -func NewBorRoSnapshots(cfg ethconfig.BlocksFreezing, snapDir string, version uint8, logger log.Logger) *BorRoSnapshots { - return &BorRoSnapshots{dir: snapDir, version: version, cfg: cfg, Events: &borEventSegments{}, Spans: &borSpanSegments{}, logger: logger} +// - segment have [from:to] semantic +func NewBorRoSnapshots(cfg ethconfig.BlocksFreezing, snapDir string, segmentsMin uint64, logger log.Logger) *BorRoSnapshots { + return &BorRoSnapshots{*newRoSnapshots(cfg, snapDir, borsnaptype.BorSnapshotTypes(), segmentsMin, logger)} } -func (s *BorRoSnapshots) Version() uint8 { return s.version } -func (s *BorRoSnapshots) Cfg() ethconfig.BlocksFreezing { return s.cfg } -func (s *BorRoSnapshots) Dir() string { return s.dir } -func (s *BorRoSnapshots) SegmentsReady() bool { return s.segmentsReady.Load() } -func (s *BorRoSnapshots) IndicesReady() bool { return s.indicesReady.Load() } -func (s *BorRoSnapshots) IndicesMax() uint64 { return s.idxMax.Load() } -func (s *BorRoSnapshots) SegmentsMax() uint64 { return s.segmentsMax.Load() } -func (s *BorRoSnapshots) SegmentsMin() uint64 { return s.segmentsMin.Load() } -func (s *BorRoSnapshots) SetSegmentsMin(min uint64) { s.segmentsMin.Store(min) } -func (s *BorRoSnapshots) BlocksAvailable() uint64 { - return cmp.Min(s.segmentsMax.Load(), s.idxMax.Load()) -} -func (s *BorRoSnapshots) LogStat(label string) { - var m runtime.MemStats - dbg.ReadMemStats(&m) - s.logger.Info(fmt.Sprintf("[bor snapshots:%s] Blocks Stat", label), - "blocks", fmt.Sprintf("%dk", (s.SegmentsMax()+1)/1000), - "indices", fmt.Sprintf("%dk", (s.IndicesMax()+1)/1000), - "alloc", common2.ByteCount(m.Alloc), "sys", common2.ByteCount(m.Sys)) -} - -func BorSegments(dir string, version uint8, min uint64) (res []snaptype.FileInfo, missingSnapshots []Range, err error) { - list, err := snaptype.Segments(dir, version) - if err != nil { - return nil, missingSnapshots, err - } - { - var l []snaptype.FileInfo - var m []Range - for _, f := range list { - if f.T != snaptype.BorEvents { - continue - } - l = append(l, f) - } - l, m = noGaps(noOverlaps(borSegmentsMustExist(dir, l)), min) - res = append(res, l...) - missingSnapshots = append(missingSnapshots, m...) - } - { - var l []snaptype.FileInfo - for _, f := range list { - if f.T != snaptype.BorSpans { - continue - } - l = append(l, f) - } - l, _ = noGaps(noOverlaps(borSegmentsMustExist(dir, l)), min) - res = append(res, l...) - } - - return res, missingSnapshots, nil +func (s *BorRoSnapshots) Ranges() []Range { + view := s.View() + defer view.Close() + return view.base.Ranges() } // this is one off code to fix an issue in 2.49.x->2.52.x which missed // removal of intermediate segments after a merge operation -func removeBorOverlaps(dir string, version uint8, active []snaptype.FileInfo, max uint64) { - list, err := snaptype.Segments(dir, version) +func removeBorOverlapsAfterMerge(dir string, active []snaptype.FileInfo, max uint64) { + list, err := snaptype.Segments(dir) if err != nil { return @@ -648,7 +154,7 @@ func removeBorOverlaps(dir string, version uint8, active []snaptype.FileInfo, ma l := make([]snaptype.FileInfo, 0, len(list)) for _, f := range list { - if !(f.T == snaptype.BorSpans || f.T == snaptype.BorEvents) { + if !(f.Type.Enum() == borsnaptype.Enums.BorSpans || f.Type.Enum() == borsnaptype.Enums.BorEvents) { continue } l = append(l, f) @@ -666,7 +172,7 @@ func removeBorOverlaps(dir string, version uint8, active []snaptype.FileInfo, ma } for _, a := range active { - if a.T != snaptype.BorSpans { + if a.Type.Enum() != borsnaptype.Enums.BorSpans { continue } @@ -697,580 +203,46 @@ func removeBorOverlaps(dir string, version uint8, active []snaptype.FileInfo, ma } } -func (s *BorRoSnapshots) EnsureExpectedBlocksAreAvailable(cfg *snapcfg.Cfg) error { - if s.BlocksAvailable() < cfg.ExpectBlocks { - return fmt.Errorf("app must wait until all expected bor snapshots are available. Expected: %d, Available: %d", cfg.ExpectBlocks, s.BlocksAvailable()) - } - return nil -} - -// DisableReadAhead - usage: `defer d.EnableReadAhead().DisableReadAhead()`. Please don't use this funcs without `defer` to avoid leak. -func (s *BorRoSnapshots) DisableReadAhead() { - s.Events.lock.RLock() - defer s.Events.lock.RUnlock() - s.Spans.lock.RLock() - defer s.Spans.lock.RUnlock() - for _, sn := range s.Events.segments { - sn.seg.DisableReadAhead() - } - for _, sn := range s.Spans.segments { - sn.seg.DisableReadAhead() - } -} -func (s *BorRoSnapshots) EnableReadAhead() *BorRoSnapshots { - s.Events.lock.RLock() - defer s.Events.lock.RUnlock() - s.Spans.lock.RLock() - defer s.Spans.lock.RUnlock() - for _, sn := range s.Events.segments { - sn.seg.EnableReadAhead() - } - for _, sn := range s.Spans.segments { - sn.seg.EnableReadAhead() - } - return s -} -func (s *BorRoSnapshots) EnableMadvWillNeed() *BorRoSnapshots { - s.Events.lock.RLock() - defer s.Events.lock.RUnlock() - s.Spans.lock.RLock() - defer s.Spans.lock.RUnlock() - for _, sn := range s.Events.segments { - sn.seg.EnableWillNeed() - } - for _, sn := range s.Spans.segments { - sn.seg.EnableWillNeed() - } - return s -} -func (s *BorRoSnapshots) EnableMadvNormal() *BorRoSnapshots { - s.Events.lock.RLock() - defer s.Events.lock.RUnlock() - s.Spans.lock.RLock() - defer s.Spans.lock.RUnlock() - for _, sn := range s.Events.segments { - sn.seg.EnableMadvNormal() - } - for _, sn := range s.Spans.segments { - sn.seg.EnableMadvNormal() - } - return s -} - -func (s *BorRoSnapshots) idxAvailability() uint64 { - var events, spans uint64 - for _, seg := range s.Events.segments { - if seg.IdxBorTxnHash == nil { - break - } - events = seg.to - 1 - } - for _, seg := range s.Spans.segments { - if seg.idx == nil { - break - } - spans = seg.to - 1 - } - return cmp.Min(events, spans) -} - -// OptimisticReopenWithDB - optimistically open snapshots (ignoring error), useful at App startup because: -// - user must be able: delete any snapshot file and Erigon will self-heal by re-downloading -// - RPC return Nil for historical blocks if snapshots are not open -func (s *BorRoSnapshots) OptimisticReopenWithDB(db kv.RoDB) { - _ = db.View(context.Background(), func(tx kv.Tx) error { - snList, _, err := rawdb.ReadSnapshots(tx) - if err != nil { - return err - } - return s.ReopenList(snList, true) - }) -} - -func (s *BorRoSnapshots) Files() (list []string) { - s.Events.lock.RLock() - defer s.Events.lock.RUnlock() - s.Spans.lock.RLock() - defer s.Spans.lock.RUnlock() - max := s.BlocksAvailable() - for _, seg := range s.Events.segments { - if seg.seg == nil { - continue - } - if seg.from > max { - continue - } - _, fName := filepath.Split(seg.seg.FilePath()) - list = append(list, fName) - } - for _, seg := range s.Spans.segments { - if seg.seg == nil { - continue - } - if seg.from > max { - continue - } - _, fName := filepath.Split(seg.seg.FilePath()) - list = append(list, fName) - } - slices.Sort(list) - return list -} - -// ReopenList stops on optimistic=false, continue opening files on optimistic=true -func (s *BorRoSnapshots) ReopenList(fileNames []string, optimistic bool) error { - s.Events.lock.Lock() - defer s.Events.lock.Unlock() - s.Spans.lock.Lock() - defer s.Spans.lock.Unlock() - - s.closeWhatNotInList(fileNames) - var segmentsMax uint64 - var segmentsMaxSet bool -Loop: - for _, fName := range fileNames { - f, ok := snaptype.ParseFileName(s.dir, fName) - if !ok { - s.logger.Trace("BorRoSnapshots.ReopenList: skip", "file", fName) - continue - } - - var processed bool = true - switch f.T { - case snaptype.BorEvents: - var sn *BorEventSegment - var exists bool - for _, sn2 := range s.Events.segments { - if sn2.seg == nil { // it's ok if some segment was not able to open - continue - } - if fName == sn2.seg.FileName() { - sn = sn2 - exists = true - break - } - } - if !exists { - sn = &BorEventSegment{version: f.Version, Range: Range{f.From, f.To}} - } - if err := sn.reopenSeg(s.dir); err != nil { - if errors.Is(err, os.ErrNotExist) { - if optimistic { - continue Loop - } else { - break Loop - } - } - if optimistic { - s.logger.Warn("[bor snapshots] open segment", "err", err) - continue Loop - } else { - return err - } - } - - if !exists { - // it's possible to iterate over .seg file even if you don't have index - // then make segment availabe even if index open may fail - s.Events.segments = append(s.Events.segments, sn) - } - if err := sn.reopenIdxIfNeed(s.dir, optimistic); err != nil { - return err - } - case snaptype.BorSpans: - var sn *BorSpanSegment - var exists bool - for _, sn2 := range s.Spans.segments { - if sn2.seg == nil { // it's ok if some segment was not able to open - continue - } - if fName == sn2.seg.FileName() { - sn = sn2 - exists = true - break - } - } - if !exists { - sn = &BorSpanSegment{version: f.Version, Range: Range{f.From, f.To}} - } - if err := sn.reopenSeg(s.dir); err != nil { - if errors.Is(err, os.ErrNotExist) { - if optimistic { - continue Loop - } else { - break Loop - } - } - if optimistic { - s.logger.Warn("[bor snapshots] open segment", "err", err) - continue Loop - } else { - return err - } - } - - if !exists { - // it's possible to iterate over .seg file even if you don't have index - // then make segment availabe even if index open may fail - s.Spans.segments = append(s.Spans.segments, sn) - } - if err := sn.reopenIdxIfNeed(s.dir, optimistic); err != nil { - return err - } - default: - processed = false - } - - if processed { - if f.To > 0 { - segmentsMax = f.To - 1 - } else { - segmentsMax = 0 - } - segmentsMaxSet = true - } - } - if segmentsMaxSet { - s.segmentsMax.Store(segmentsMax) - } - s.segmentsReady.Store(true) - s.idxMax.Store(s.idxAvailability()) - s.indicesReady.Store(true) - - return nil -} - -func (s *BorRoSnapshots) Ranges() (ranges []Range) { - view := s.View() - defer view.Close() - - for _, sn := range view.Events() { - ranges = append(ranges, sn.Range) - } - return ranges -} - -func (s *BorRoSnapshots) OptimisticalyReopenFolder() { _ = s.ReopenFolder() } -func (s *BorRoSnapshots) OptimisticalyReopenWithDB(db kv.RoDB) { _ = s.ReopenWithDB(db) } func (s *BorRoSnapshots) ReopenFolder() error { - files, _, err := BorSegments(s.dir, s.version, s.segmentsMin.Load()) + files, _, err := typedSegments(s.dir, s.segmentsMin.Load(), borsnaptype.BorSnapshotTypes(), false) if err != nil { return err } - // this is one off code to fix an issue in 2.49.x->2.52.x which missed - // removal of intermediate segments after a merge operation - removeBorOverlaps(s.dir, s.version, files, s.BlocksAvailable()) - list := make([]string, 0, len(files)) for _, f := range files { _, fName := filepath.Split(f.Path) list = append(list, fName) } - return s.ReopenList(list, false) -} -func (s *BorRoSnapshots) ReopenWithDB(db kv.RoDB) error { - if err := db.View(context.Background(), func(tx kv.Tx) error { - snList, _, err := rawdb.ReadSnapshots(tx) - if err != nil { - return err - } - return s.ReopenList(snList, true) - }); err != nil { + if err := s.ReopenList(list, false); err != nil { return err } return nil } -func (s *BorRoSnapshots) Close() { - s.Events.lock.Lock() - defer s.Events.lock.Unlock() - s.Spans.lock.Lock() - defer s.Spans.lock.Unlock() - s.closeWhatNotInList(nil) -} - -func (s *BorRoSnapshots) closeWhatNotInList(l []string) { -Loop1: - for i, sn := range s.Events.segments { - if sn.seg == nil { - continue Loop1 - } - _, name := filepath.Split(sn.seg.FilePath()) - for _, fName := range l { - if fName == name { - continue Loop1 - } - } - sn.close() - s.Events.segments[i] = nil - } -Loop2: - for i, sn := range s.Spans.segments { - if sn.seg == nil { - continue Loop2 - } - _, name := filepath.Split(sn.seg.FilePath()) - for _, fName := range l { - if fName == name { - continue Loop2 - } - } - sn.close() - s.Spans.segments[i] = nil - } - var i int - for i = 0; i < len(s.Events.segments) && s.Events.segments[i] != nil && s.Events.segments[i].seg != nil; i++ { - } - tail := s.Events.segments[i:] - s.Events.segments = s.Events.segments[:i] - for i = 0; i < len(tail); i++ { - if tail[i] != nil { - tail[i].close() - tail[i] = nil - } - } - for i = 0; i < len(s.Spans.segments) && s.Spans.segments[i] != nil && s.Spans.segments[i].seg != nil; i++ { - } - tailS := s.Spans.segments[i:] - s.Spans.segments = s.Spans.segments[:i] - for i = 0; i < len(tailS); i++ { - if tailS[i] != nil { - tailS[i].close() - tailS[i] = nil - } - } -} - -func (s *BorRoSnapshots) PrintDebug() { - s.Events.lock.RLock() - defer s.Events.lock.RUnlock() - s.Spans.lock.RLock() - defer s.Spans.lock.RUnlock() - fmt.Println(" == BorSnapshots, Event") - for _, sn := range s.Events.segments { - fmt.Printf("%d, %t\n", sn.from, sn.IdxBorTxnHash == nil) - } - fmt.Println(" == BorSnapshots, Span") - for _, sn := range s.Spans.segments { - fmt.Printf("%d, %t\n", sn.from, sn.idx == nil) - } -} - type BorView struct { - s *BorRoSnapshots - closed bool + base *View } func (s *BorRoSnapshots) View() *BorView { - v := &BorView{s: s} - v.s.Events.lock.RLock() - v.s.Spans.lock.RLock() + v := &BorView{base: s.RoSnapshots.View()} + v.base.baseSegType = borsnaptype.BorSpans return v } func (v *BorView) Close() { - if v.closed { - return - } - v.closed = true - v.s.Events.lock.RUnlock() - v.s.Spans.lock.RUnlock() -} -func (v *BorView) Events() []*BorEventSegment { return v.s.Events.segments } -func (v *BorView) Spans() []*BorSpanSegment { return v.s.Spans.segments } -func (v *BorView) EventsSegment(blockNum uint64) (*BorEventSegment, bool) { - for _, seg := range v.Events() { - if !(blockNum >= seg.from && blockNum < seg.to) { - continue - } - return seg, true - } - return nil, false -} -func (v *BorView) SpansSegment(blockNum uint64) (*BorSpanSegment, bool) { - for _, seg := range v.Spans() { - if !(blockNum >= seg.from && blockNum < seg.to) { - continue - } - return seg, true - } - return nil, false -} - -type BorMerger struct { - lvl log.Lvl - compressWorkers int - tmpDir string - chainConfig *chain.Config - chainDB kv.RoDB - notifier services.DBEventNotifier - logger log.Logger -} - -func NewBorMerger(tmpDir string, compressWorkers int, lvl log.Lvl, chainDB kv.RoDB, chainConfig *chain.Config, notifier services.DBEventNotifier, logger log.Logger) *BorMerger { - return &BorMerger{tmpDir: tmpDir, compressWorkers: compressWorkers, lvl: lvl, chainDB: chainDB, chainConfig: chainConfig, notifier: notifier, logger: logger} -} - -func (m *BorMerger) FindMergeRanges(currentRanges []Range) (toMerge []Range) { - for i := len(currentRanges) - 1; i > 0; i-- { - r := currentRanges[i] - mergeLimit := uint64(snaptype.Erigon2MergeLimit) - if r.to-r.from >= mergeLimit { - continue - } - for _, span := range snaptype.MergeSteps { - if r.to%span != 0 { - continue - } - if r.to-r.from == span { - break - } - aggFrom := r.to - span - toMerge = append(toMerge, Range{from: aggFrom, to: r.to}) - for currentRanges[i].from > aggFrom { - i-- - } - break - } - } - slices.SortFunc(toMerge, func(i, j Range) int { return cmp.Compare(i.from, j.from) }) - return toMerge + v.base.Close() } -func (m *BorMerger) filesByRange(snapshots *BorRoSnapshots, from, to uint64) (map[snaptype.Type][]string, error) { - toMerge := map[snaptype.Type][]string{} - view := snapshots.View() - defer view.Close() - - eSegments := view.Events() - sSegments := view.Spans() - - for i, sn := range eSegments { - if sn.from < from { - continue - } - if sn.to > to { - break - } - toMerge[snaptype.BorEvents] = append(toMerge[snaptype.BorEvents], eSegments[i].seg.FilePath()) - toMerge[snaptype.BorSpans] = append(toMerge[snaptype.BorSpans], sSegments[i].seg.FilePath()) - } +func (v *BorView) Events() []*Segment { return v.base.Segments(borsnaptype.BorEvents) } +func (v *BorView) Spans() []*Segment { return v.base.Segments(borsnaptype.BorSpans) } +func (v *BorView) Checkpoints() []*Segment { return v.base.Segments(borsnaptype.BorCheckpoints) } +func (v *BorView) Milestones() []*Segment { return v.base.Segments(borsnaptype.BorMilestones) } - return toMerge, nil +func (v *BorView) EventsSegment(blockNum uint64) (*Segment, bool) { + return v.base.Segment(borsnaptype.BorEvents, blockNum) } -// Merge does merge segments in given ranges -func (m *BorMerger) Merge(ctx context.Context, snapshots *BorRoSnapshots, mergeRanges []Range, snapDir string, doIndex bool, onMerge func(r Range) error, onDelete func(l []string) error) error { - if len(mergeRanges) == 0 { - return nil - } - logEvery := time.NewTicker(30 * time.Second) - defer logEvery.Stop() - for _, r := range mergeRanges { - toMerge, err := m.filesByRange(snapshots, r.from, r.to) - if err != nil { - return err - } - - for _, t := range snaptype.BorSnapshotTypes { - segName := snaptype.SegmentFileName(snapshots.Version(), r.from, r.to, t) - f, ok := snaptype.ParseFileName(snapDir, segName) - if !ok { - continue - } - if err := m.merge(ctx, toMerge[t], f.Path, logEvery); err != nil { - return fmt.Errorf("mergeByAppendSegments: %w", err) - } - if doIndex { - p := &background.Progress{} - if err := buildIdx(ctx, f, m.chainConfig, m.tmpDir, p, m.lvl, m.logger); err != nil { - return err - } - } - } - if err := snapshots.ReopenFolder(); err != nil { - return fmt.Errorf("ReopenSegments: %w", err) - } - snapshots.LogStat("merge") - if err := onMerge(r); err != nil { - return err - } - - for _, t := range snaptype.BorSnapshotTypes { - if len(toMerge[t]) == 0 { - continue - } - - if err := onDelete(toMerge[t]); err != nil { - return err - } - - } - time.Sleep(1 * time.Second) // i working on blocking API - to ensure client does not use old snapsthos - and then delete them - for _, t := range snaptype.BorSnapshotTypes { - m.removeOldFiles(toMerge[t], snapDir, snapshots.Version()) - } - } - m.logger.Log(m.lvl, "[bor snapshots] Merge done", "from", mergeRanges[0].from, "to", mergeRanges[0].to) - return nil -} - -func (m *BorMerger) merge(ctx context.Context, toMerge []string, targetFile string, logEvery *time.Ticker) error { - var word = make([]byte, 0, 4096) - var expectedTotal int - cList := make([]*compress.Decompressor, len(toMerge)) - for i, cFile := range toMerge { - d, err := compress.NewDecompressor(cFile) - if err != nil { - return err - } - defer d.Close() - cList[i] = d - expectedTotal += d.Count() - } - - f, err := compress.NewCompressor(ctx, "Bor Snapshots merge", targetFile, m.tmpDir, compress.MinPatternScore, m.compressWorkers, log.LvlTrace, m.logger) - if err != nil { - return err - } - defer f.Close() - - for _, d := range cList { - if err := d.WithReadAhead(func() error { - g := d.MakeGetter() - for g.HasNext() { - word, _ = g.Next(word[:0]) - if err := f.AddWord(word); err != nil { - return err - } - } - return nil - }); err != nil { - return err - } - } - if f.Count() != expectedTotal { - return fmt.Errorf("unexpected amount after bor segments merge. got: %d, expected: %d", f.Count(), expectedTotal) - } - if err = f.Compress(); err != nil { - return err - } - return nil -} - -func (m *BorMerger) removeOldFiles(toDel []string, snapDir string, version uint8) { - for _, f := range toDel { - _ = os.Remove(f) - ext := filepath.Ext(f) - withoutExt := f[:len(f)-len(ext)] - _ = os.Remove(withoutExt + ".idx") - } - tmpFiles, err := snaptype.TmpFiles(snapDir, version) - if err != nil { - return - } - for _, f := range tmpFiles { - _ = os.Remove(f) - } +func (v *BorView) SpansSegment(blockNum uint64) (*Segment, bool) { + return v.base.Segment(borsnaptype.BorSpans, blockNum) } diff --git a/turbo/snapshotsync/freezeblocks/caplin_snapshots.go b/turbo/snapshotsync/freezeblocks/caplin_snapshots.go index ee7d2e70284..e458e91ade2 100644 --- a/turbo/snapshotsync/freezeblocks/caplin_snapshots.go +++ b/turbo/snapshotsync/freezeblocks/caplin_snapshots.go @@ -6,149 +6,74 @@ import ( "encoding/binary" "errors" "fmt" + "math" "os" "path/filepath" - "sync" "sync/atomic" "github.com/klauspost/compress/zstd" + "github.com/ledgerwatch/erigon-lib/common/datadir" + "github.com/ledgerwatch/log/v3" + + "github.com/ledgerwatch/erigon-lib/chain/snapcfg" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/background" "github.com/ledgerwatch/erigon-lib/common/cmp" - "github.com/ledgerwatch/erigon-lib/common/dbg" - "github.com/ledgerwatch/erigon-lib/compress" "github.com/ledgerwatch/erigon-lib/downloader/snaptype" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" "github.com/ledgerwatch/erigon-lib/recsplit" + "github.com/ledgerwatch/erigon-lib/seg" "github.com/ledgerwatch/erigon/cl/clparams" "github.com/ledgerwatch/erigon/cl/cltypes" - "github.com/ledgerwatch/erigon/cl/persistence" + "github.com/ledgerwatch/erigon/cl/persistence/beacon_indicies" + "github.com/ledgerwatch/erigon/cl/persistence/blob_storage" "github.com/ledgerwatch/erigon/cl/persistence/format/snapshot_format" + "github.com/ledgerwatch/erigon/cl/utils" "github.com/ledgerwatch/erigon/eth/ethconfig" - "github.com/ledgerwatch/log/v3" ) -type BeaconBlockSegment struct { - seg *compress.Decompressor // value: chunked(ssz(SignedBeaconBlocks)) - idxSlot *recsplit.Index // slot -> beacon_slot_segment_offset - ranges Range - version uint8 -} - -func (sn *BeaconBlockSegment) closeIdx() { - if sn.idxSlot != nil { - sn.idxSlot.Close() - sn.idxSlot = nil - } -} -func (sn *BeaconBlockSegment) closeSeg() { - if sn.seg != nil { - sn.seg.Close() - sn.seg = nil - } -} -func (sn *BeaconBlockSegment) close() { - sn.closeSeg() - sn.closeIdx() -} -func (sn *BeaconBlockSegment) reopenSeg(dir string) (err error) { - sn.closeSeg() - fileName := snaptype.SegmentFileName(sn.version, sn.ranges.from, sn.ranges.to, snaptype.BeaconBlocks) - sn.seg, err = compress.NewDecompressor(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - return nil -} -func (sn *BeaconBlockSegment) reopenIdxIfNeed(dir string, optimistic bool) (err error) { - if sn.idxSlot != nil { - return nil - } - err = sn.reopenIdx(dir) - if err != nil { - if !errors.Is(err, os.ErrNotExist) { - if optimistic { - log.Warn("[snapshots] open index", "err", err) - } else { - return err - } - } - } - return nil -} +var sidecarSSZSize = (&cltypes.BlobSidecar{}).EncodingSizeSSZ() -func (sn *BeaconBlockSegment) reopenIdx(dir string) (err error) { - sn.closeIdx() - if sn.seg == nil { - return nil - } - fileName := snaptype.IdxFileName(sn.version, sn.ranges.from, sn.ranges.to, snaptype.BeaconBlocks.String()) - sn.idxSlot, err = recsplit.OpenIndex(filepath.Join(dir, fileName)) - if err != nil { - return fmt.Errorf("%w, fileName: %s", err, fileName) - } - return nil -} - -type beaconBlockSegments struct { - lock sync.RWMutex - segments []*BeaconBlockSegment -} - -func (s *beaconBlockSegments) View(f func(segments []*BeaconBlockSegment) error) error { - s.lock.RLock() - defer s.lock.RUnlock() - return f(s.segments) -} - -func BeaconBlocksIdx(ctx context.Context, sn snaptype.FileInfo, segmentFilePath string, blockFrom, blockTo uint64, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { - defer func() { - if rec := recover(); rec != nil { - err = fmt.Errorf("BeaconBlocksIdx: at=%d-%d, %v, %s", blockFrom, blockTo, rec, dbg.Stack()) - } - }() - // Calculate how many records there will be in the index - d, err := compress.NewDecompressor(segmentFilePath) - if err != nil { - return err - } - defer d.Close() - _, fname := filepath.Split(segmentFilePath) - p.Name.Store(&fname) - p.Total.Store(uint64(d.Count())) - - if err := Idx(ctx, d, sn.From, tmpDir, log.LvlDebug, func(idx *recsplit.RecSplit, i, offset uint64, word []byte) error { +func BeaconSimpleIdx(ctx context.Context, sn snaptype.FileInfo, salt uint32, tmpDir string, p *background.Progress, lvl log.Lvl, logger log.Logger) (err error) { + num := make([]byte, binary.MaxVarintLen64) + if err := snaptype.BuildIndex(ctx, sn, salt, sn.From, tmpDir, log.LvlDebug, p, func(idx *recsplit.RecSplit, i, offset uint64, word []byte) error { if i%20_000 == 0 { - logger.Log(lvl, "Generating idx for beacon blocks", "progress", i) + logger.Log(lvl, fmt.Sprintf("Generating idx for %s", sn.Type.Name()), "progress", i) } p.Processed.Add(1) - num := make([]byte, 8) n := binary.PutUvarint(num, i) if err := idx.AddKey(num[:n], offset); err != nil { return err } return nil }, logger); err != nil { - return fmt.Errorf("BodyNumberIdx: %w", err) + return fmt.Errorf("idx: %w", err) } return nil } +// value: chunked(ssz(SignedBeaconBlocks)) +// slot -> beacon_slot_segment_offset + type CaplinSnapshots struct { indicesReady atomic.Bool segmentsReady atomic.Bool - BeaconBlocks *beaconBlockSegments + Salt uint32 + + BeaconBlocks *segments + BlobSidecars *segments dir string + tmpdir string segmentsMax atomic.Uint64 // all types of .seg files are available - up to this number idxMax atomic.Uint64 // all types of .idx files are available - up to this number cfg ethconfig.BlocksFreezing logger log.Logger // allows for pruning segments - this is the min availible segment segmentsMin atomic.Uint64 - version uint8 // chain cfg beaconCfg *clparams.BeaconChainConfig } @@ -158,19 +83,23 @@ type CaplinSnapshots struct { // - all snapshots of given blocks range must exist - to make this blocks range available // - gaps are not allowed // - segment have [from:to) semantic -func NewCaplinSnapshots(cfg ethconfig.BlocksFreezing, beaconCfg *clparams.BeaconChainConfig, snapDir string, version uint8, logger log.Logger) *CaplinSnapshots { - return &CaplinSnapshots{dir: snapDir, version: version, cfg: cfg, BeaconBlocks: &beaconBlockSegments{}, logger: logger, beaconCfg: beaconCfg} +func NewCaplinSnapshots(cfg ethconfig.BlocksFreezing, beaconCfg *clparams.BeaconChainConfig, dirs datadir.Dirs, logger log.Logger) *CaplinSnapshots { + return &CaplinSnapshots{dir: dirs.Snap, tmpdir: dirs.Tmp, cfg: cfg, BeaconBlocks: &segments{}, BlobSidecars: &segments{}, logger: logger, beaconCfg: beaconCfg} } -func (s *CaplinSnapshots) Version() uint8 { return s.version } func (s *CaplinSnapshots) IndicesMax() uint64 { return s.idxMax.Load() } func (s *CaplinSnapshots) SegmentsMax() uint64 { return s.segmentsMax.Load() } func (s *CaplinSnapshots) SegFilePaths(from, to uint64) []string { var res []string for _, seg := range s.BeaconBlocks.segments { - if seg.ranges.from >= from && seg.ranges.to <= to { - res = append(res, seg.seg.FilePath()) + if seg.from >= from && seg.to <= to { + res = append(res, seg.FilePath()) + } + } + for _, seg := range s.BlobSidecars.segments { + if seg.from >= from && seg.to <= to { + res = append(res, seg.FilePath()) } } return res @@ -180,38 +109,51 @@ func (s *CaplinSnapshots) BlocksAvailable() uint64 { return cmp.Min(s.segmentsMax.Load(), s.idxMax.Load()) } +func (s *CaplinSnapshots) Close() { + if s == nil { + return + } + s.BeaconBlocks.lock.Lock() + defer s.BeaconBlocks.lock.Unlock() + s.BlobSidecars.lock.Lock() + defer s.BlobSidecars.lock.Unlock() + s.closeWhatNotInList(nil) +} + // ReopenList stops on optimistic=false, continue opening files on optimistic=true func (s *CaplinSnapshots) ReopenList(fileNames []string, optimistic bool) error { s.BeaconBlocks.lock.Lock() defer s.BeaconBlocks.lock.Unlock() + s.BlobSidecars.lock.Lock() + defer s.BlobSidecars.lock.Unlock() s.closeWhatNotInList(fileNames) var segmentsMax uint64 var segmentsMaxSet bool Loop: for _, fName := range fileNames { - f, ok := snaptype.ParseFileName(s.dir, fName) + f, _, ok := snaptype.ParseFileName(s.dir, fName) if !ok { continue } var processed bool = true - switch f.T { - case snaptype.BeaconBlocks: - var sn *BeaconBlockSegment + switch f.Type.Enum() { + case snaptype.CaplinEnums.BeaconBlocks: + var sn *Segment var exists bool for _, sn2 := range s.BeaconBlocks.segments { - if sn2.seg == nil { // it's ok if some segment was not able to open + if sn2.Decompressor == nil { // it's ok if some segment was not able to open continue } - if fName == sn2.seg.FileName() { + if fName == sn2.FileName() { sn = sn2 exists = true break } } if !exists { - sn = &BeaconBlockSegment{version: s.version, ranges: Range{f.From, f.To}} + sn = &Segment{segType: snaptype.BeaconBlocks, version: f.Version, Range: Range{f.From, f.To}} } if err := sn.reopenSeg(s.dir); err != nil { if errors.Is(err, os.ErrNotExist) { @@ -237,16 +179,57 @@ Loop: if err := sn.reopenIdxIfNeed(s.dir, optimistic); err != nil { return err } - } + // Only bob sidecars count for progression + if processed { + if f.To > 0 { + segmentsMax = f.To - 1 + } else { + segmentsMax = 0 + } + segmentsMaxSet = true + } + case snaptype.CaplinEnums.BlobSidecars: + var sn *Segment + var exists bool + for _, sn2 := range s.BlobSidecars.segments { + if sn2.Decompressor == nil { // it's ok if some segment was not able to open + continue + } + if fName == sn2.FileName() { + sn = sn2 + exists = true + break + } + } + if !exists { + sn = &Segment{segType: snaptype.BlobSidecars, version: f.Version, Range: Range{f.From, f.To}} + } + if err := sn.reopenSeg(s.dir); err != nil { + if errors.Is(err, os.ErrNotExist) { + if optimistic { + continue Loop + } else { + break Loop + } + } + if optimistic { + s.logger.Warn("[snapshots] open segment", "err", err) + continue Loop + } else { + return err + } + } - if processed { - if f.To > 0 { - segmentsMax = f.To - 1 - } else { - segmentsMax = 0 + if !exists { + // it's possible to iterate over .seg file even if you don't have index + // then make segment available even if index open may fail + s.BlobSidecars.segments = append(s.BlobSidecars.segments, sn) + } + if err := sn.reopenIdxIfNeed(s.dir, optimistic); err != nil { + return err } - segmentsMaxSet = true } + } if segmentsMaxSet { s.segmentsMax.Store(segmentsMax) @@ -261,16 +244,16 @@ Loop: func (s *CaplinSnapshots) idxAvailability() uint64 { var beaconBlocks uint64 for _, seg := range s.BeaconBlocks.segments { - if seg.idxSlot == nil { + if seg.Index() == nil { break } - beaconBlocks = seg.ranges.to - 1 + beaconBlocks = seg.to - 1 } return beaconBlocks } func (s *CaplinSnapshots) ReopenFolder() error { - files, _, err := SegmentsCaplin(s.dir, s.version, s.segmentsMin.Load()) + files, _, err := SegmentsCaplin(s.dir, s.segmentsMin.Load()) if err != nil { return err } @@ -285,10 +268,10 @@ func (s *CaplinSnapshots) ReopenFolder() error { func (s *CaplinSnapshots) closeWhatNotInList(l []string) { Loop1: for i, sn := range s.BeaconBlocks.segments { - if sn.seg == nil { + if sn.Decompressor == nil { continue Loop1 } - _, name := filepath.Split(sn.seg.FilePath()) + _, name := filepath.Split(sn.FilePath()) for _, fName := range l { if fName == name { continue Loop1 @@ -298,7 +281,7 @@ Loop1: s.BeaconBlocks.segments[i] = nil } var i int - for i = 0; i < len(s.BeaconBlocks.segments) && s.BeaconBlocks.segments[i] != nil && s.BeaconBlocks.segments[i].seg != nil; i++ { + for i = 0; i < len(s.BeaconBlocks.segments) && s.BeaconBlocks.segments[i] != nil && s.BeaconBlocks.segments[i].Decompressor != nil; i++ { } tail := s.BeaconBlocks.segments[i:] s.BeaconBlocks.segments = s.BeaconBlocks.segments[:i] @@ -308,6 +291,31 @@ Loop1: tail[i] = nil } } +Loop2: + for i, sn := range s.BlobSidecars.segments { + if sn.Decompressor == nil { + continue Loop2 + } + _, name := filepath.Split(sn.FilePath()) + for _, fName := range l { + if fName == name { + continue Loop2 + } + } + sn.close() + s.BlobSidecars.segments[i] = nil + } + + for i = 0; i < len(s.BlobSidecars.segments) && s.BlobSidecars.segments[i] != nil && s.BlobSidecars.segments[i].Decompressor != nil; i++ { + } + tail = s.BlobSidecars.segments[i:] + s.BlobSidecars.segments = s.BlobSidecars.segments[:i] + for i = 0; i < len(tail); i++ { + if tail[i] != nil { + tail[i].close() + tail[i] = nil + } + } } type CaplinView struct { @@ -318,6 +326,7 @@ type CaplinView struct { func (s *CaplinSnapshots) View() *CaplinView { v := &CaplinView{s: s} v.s.BeaconBlocks.lock.RLock() + v.s.BlobSidecars.lock.RLock() return v } @@ -327,14 +336,26 @@ func (v *CaplinView) Close() { } v.closed = true v.s.BeaconBlocks.lock.RUnlock() + v.s.BlobSidecars.lock.RUnlock() } -func (v *CaplinView) BeaconBlocks() []*BeaconBlockSegment { return v.s.BeaconBlocks.segments } +func (v *CaplinView) BeaconBlocks() []*Segment { return v.s.BeaconBlocks.segments } +func (v *CaplinView) BlobSidecars() []*Segment { return v.s.BlobSidecars.segments } -func (v *CaplinView) BeaconBlocksSegment(slot uint64) (*BeaconBlockSegment, bool) { +func (v *CaplinView) BeaconBlocksSegment(slot uint64) (*Segment, bool) { for _, seg := range v.BeaconBlocks() { - if !(slot >= seg.ranges.from && slot < seg.ranges.to) { + if !(slot >= seg.from && slot < seg.to) { + continue + } + return seg, true + } + return nil, false +} + +func (v *CaplinView) BlobSidecarsSegment(slot uint64) (*Segment, bool) { + for _, seg := range v.BlobSidecars() { + if !(slot >= seg.from && slot < seg.to) { continue } return seg, true @@ -342,11 +363,13 @@ func (v *CaplinView) BeaconBlocksSegment(slot uint64) (*BeaconBlockSegment, bool return nil, false } -func dumpBeaconBlocksRange(ctx context.Context, db kv.RoDB, b persistence.BlockSource, version uint8, fromSlot uint64, toSlot uint64, tmpDir, snapDir string, workers int, lvl log.Lvl, logger log.Logger) error { - segName := snaptype.SegmentFileName(version, fromSlot, toSlot, snaptype.BeaconBlocks) - f, _ := snaptype.ParseFileName(snapDir, segName) +func dumpBeaconBlocksRange(ctx context.Context, db kv.RoDB, fromSlot uint64, toSlot uint64, salt uint32, dirs datadir.Dirs, workers int, lvl log.Lvl, logger log.Logger) error { + tmpDir, snapDir := dirs.Tmp, dirs.Snap + + segName := snaptype.BeaconBlocks.FileName(0, fromSlot, toSlot) + f, _, _ := snaptype.ParseFileName(snapDir, segName) - sn, err := compress.NewCompressor(ctx, "Snapshot BeaconBlocks", f.Path, tmpDir, compress.MinPatternScore, workers, lvl, logger) + sn, err := seg.NewCompressor(ctx, "Snapshot BeaconBlocks", f.Path, tmpDir, seg.MinPatternScore, workers, lvl, logger) if err != nil { return err } @@ -357,43 +380,94 @@ func dumpBeaconBlocksRange(ctx context.Context, db kv.RoDB, b persistence.BlockS return err } defer tx.Rollback() - var w bytes.Buffer - compressor, err := zstd.NewWriter(&w, zstd.WithEncoderLevel(zstd.SpeedBetterCompression)) - if err != nil { - return err - } - defer compressor.Close() - // Just make a reusable buffer - buf := make([]byte, 2048) + // Generate .seg file, which is just the list of beacon blocks. for i := fromSlot; i < toSlot; i++ { - obj, err := b.GetBlock(ctx, tx, i) + // read root. + blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, i) + if err != nil { + return err + } + dump, err := tx.GetOne(kv.BeaconBlocks, dbutils.BlockBodyKey(i, blockRoot)) if err != nil { return err } if i%20_000 == 0 { logger.Log(lvl, "Dumping beacon blocks", "progress", i) } - if obj == nil { - if err := sn.AddWord(nil); err != nil { - return err - } - continue + if err := sn.AddWord(dump); err != nil { + return err } - if buf, err = snapshot_format.WriteBlockForSnapshot(compressor, obj.Data, buf); err != nil { + } + if err := sn.Compress(); err != nil { + return fmt.Errorf("compress: %w", err) + } + // Generate .idx file, which is the slot => offset mapping. + p := &background.Progress{} + + return BeaconSimpleIdx(ctx, f, salt, tmpDir, p, lvl, logger) +} + +func dumpBlobSidecarsRange(ctx context.Context, db kv.RoDB, storage blob_storage.BlobStorage, fromSlot uint64, toSlot uint64, salt uint32, dirs datadir.Dirs, workers int, lvl log.Lvl, logger log.Logger) error { + tmpDir, snapDir := dirs.Tmp, dirs.Snap + + segName := snaptype.BlobSidecars.FileName(0, fromSlot, toSlot) + f, _, _ := snaptype.ParseFileName(snapDir, segName) + + sn, err := seg.NewCompressor(ctx, "Snapshot BlobSidecars", f.Path, tmpDir, seg.MinPatternScore, workers, lvl, logger) + if err != nil { + return err + } + defer sn.Close() + + tx, err := db.BeginRo(ctx) + if err != nil { + return err + } + defer tx.Rollback() + + reusableBuf := []byte{} + + // Generate .seg file, which is just the list of beacon blocks. + for i := fromSlot; i < toSlot; i++ { + // read root. + blockRoot, err := beacon_indicies.ReadCanonicalBlockRoot(tx, i) + if err != nil { + return err + } + + commitmentsCount, err := storage.KzgCommitmentsCount(ctx, blockRoot) + if err != nil { return err } - if err := compressor.Close(); err != nil { + if commitmentsCount == 0 { + sn.AddWord(nil) + continue + } + sidecars, found, err := storage.ReadBlobSidecars(ctx, i, blockRoot) + if err != nil { return err } - word := w.Bytes() + if !found { + return fmt.Errorf("blob sidecars not found for block %d", i) + } + reusableBuf = reusableBuf[:0] + // Make a concatenated SSZ of all sidecars. + for _, sidecar := range sidecars { + reusableBuf, err = sidecar.EncodeSSZ(reusableBuf) + if err != nil { + return err + } + } - if err := sn.AddWord(word); err != nil { + if i%20_000 == 0 { + logger.Log(lvl, "Dumping beacon blobs", "progress", i) + } + if err := sn.AddWord(reusableBuf); err != nil { return err } - w.Reset() - compressor.Reset(&w) + } if err := sn.Compress(); err != nil { return fmt.Errorf("compress: %w", err) @@ -401,48 +475,67 @@ func dumpBeaconBlocksRange(ctx context.Context, db kv.RoDB, b persistence.BlockS // Generate .idx file, which is the slot => offset mapping. p := &background.Progress{} - return BeaconBlocksIdx(ctx, f, filepath.Join(snapDir, segName), fromSlot, toSlot, tmpDir, p, lvl, logger) + return BeaconSimpleIdx(ctx, f, salt, tmpDir, p, lvl, logger) } -func DumpBeaconBlocks(ctx context.Context, db kv.RoDB, b persistence.BlockSource, version uint8, fromSlot, toSlot, blocksPerFile uint64, tmpDir, snapDir string, workers int, lvl log.Lvl, logger log.Logger) error { - if blocksPerFile == 0 { - return nil - } +func DumpBeaconBlocks(ctx context.Context, db kv.RoDB, fromSlot, toSlot uint64, salt uint32, dirs datadir.Dirs, workers int, lvl log.Lvl, logger log.Logger) error { + + for i := fromSlot; i < toSlot; i = chooseSegmentEnd(i, toSlot, snaptype.CaplinEnums.BeaconBlocks, nil) { + blocksPerFile := snapcfg.MergeLimit("", snaptype.CaplinEnums.BeaconBlocks, i) - for i := fromSlot; i < toSlot; i = chooseSegmentEnd(i, toSlot, blocksPerFile) { if toSlot-i < blocksPerFile { break } - to := chooseSegmentEnd(i, toSlot, blocksPerFile) + to := chooseSegmentEnd(i, toSlot, snaptype.CaplinEnums.BeaconBlocks, nil) logger.Log(lvl, "Dumping beacon blocks", "from", i, "to", to) - if err := dumpBeaconBlocksRange(ctx, db, b, version, i, to, tmpDir, snapDir, workers, lvl, logger); err != nil { + if err := dumpBeaconBlocksRange(ctx, db, i, to, salt, dirs, workers, lvl, logger); err != nil { + return err + } + } + return nil +} + +func DumpBlobsSidecar(ctx context.Context, blobStorage blob_storage.BlobStorage, db kv.RoDB, fromSlot, toSlot uint64, salt uint32, dirs datadir.Dirs, compressWorkers int, lvl log.Lvl, logger log.Logger) error { + for i := fromSlot; i < toSlot; i = chooseSegmentEnd(i, toSlot, snaptype.CaplinEnums.BlobSidecars, nil) { + blocksPerFile := snapcfg.MergeLimit("", snaptype.CaplinEnums.BlobSidecars, i) + + if toSlot-i < blocksPerFile { + break + } + to := chooseSegmentEnd(i, toSlot, snaptype.CaplinEnums.BlobSidecars, nil) + logger.Log(lvl, "Dumping blobs sidecars", "from", i, "to", to) + if err := dumpBlobSidecarsRange(ctx, db, blobStorage, i, to, salt, dirs, compressWorkers, lvl, logger); err != nil { return err } } return nil } -func (s *CaplinSnapshots) BuildMissingIndices(ctx context.Context, logger log.Logger, lvl log.Lvl) error { +func (s *CaplinSnapshots) BuildMissingIndices(ctx context.Context, logger log.Logger) error { + if s == nil { + return nil + } // if !s.segmentsReady.Load() { // return fmt.Errorf("not all snapshot segments are available") // } // wait for Downloader service to download all expected snapshots - segments, _, err := SegmentsCaplin(s.dir, s.version, 0) + segments, _, err := SegmentsCaplin(s.dir, 0) if err != nil { return err } for index := range segments { segment := segments[index] - if segment.T != snaptype.BeaconBlocks { + // The same slot=>offset mapping is used for both beacon blocks and blob sidecars. + if segment.Type.Enum() != snaptype.CaplinEnums.BeaconBlocks && segment.Type.Enum() != snaptype.CaplinEnums.BlobSidecars { continue } - if hasIdxFile(segment, logger) { + if segment.Type.HasIndexFiles(segment, logger) { continue } p := &background.Progress{} - if err := BeaconBlocksIdx(ctx, segment, segment.Path, segment.From, segment.To, s.dir, p, log.LvlDebug, logger); err != nil { + if err := BeaconSimpleIdx(ctx, segment, s.Salt, s.tmpdir, p, log.LvlDebug, logger); err != nil { return err } } @@ -461,12 +554,14 @@ func (s *CaplinSnapshots) ReadHeader(slot uint64) (*cltypes.SignedBeaconBlockHea return nil, 0, libcommon.Hash{}, nil } - if seg.idxSlot == nil { + idxSlot := seg.Index() + + if idxSlot == nil { return nil, 0, libcommon.Hash{}, nil } - blockOffset := seg.idxSlot.OrdinalLookup(slot - seg.idxSlot.BaseDataID()) + blockOffset := idxSlot.OrdinalLookup(slot - idxSlot.BaseDataID()) - gg := seg.seg.MakeGetter() + gg := seg.MakeGetter() gg.Reset(blockOffset) if !gg.HasNext() { return nil, 0, libcommon.Hash{}, nil @@ -489,3 +584,63 @@ func (s *CaplinSnapshots) ReadHeader(slot uint64) (*cltypes.SignedBeaconBlockHea // Use pooled buffers and readers to avoid allocations. return snapshot_format.ReadBlockHeaderFromSnapshotWithExecutionData(reader, s.beaconCfg) } + +func (s *CaplinSnapshots) ReadBlobSidecars(slot uint64) ([]*cltypes.BlobSidecar, error) { + view := s.View() + defer view.Close() + + var buf []byte + + seg, ok := view.BlobSidecarsSegment(slot) + if !ok { + return nil, nil + } + + idxSlot := seg.Index() + + if idxSlot == nil { + return nil, nil + } + blockOffset := idxSlot.OrdinalLookup(slot - idxSlot.BaseDataID()) + + gg := seg.MakeGetter() + gg.Reset(blockOffset) + if !gg.HasNext() { + return nil, nil + } + + buf, _ = gg.Next(buf) + if len(buf) == 0 { + return nil, nil + } + if len(buf)%sidecarSSZSize != 0 { + return nil, fmt.Errorf("invalid sidecar list length") + } + sidecars := make([]*cltypes.BlobSidecar, len(buf)/sidecarSSZSize) + for i := 0; i < len(buf); i += sidecarSSZSize { + sidecars[i/sidecarSSZSize] = &cltypes.BlobSidecar{} + if err := sidecars[i/sidecarSSZSize].DecodeSSZ(buf[i:i+sidecarSSZSize], int(clparams.DenebVersion)); err != nil { + return nil, err + } + } + return sidecars, nil +} + +func (s *CaplinSnapshots) FrozenBlobs() uint64 { + if s.beaconCfg.DenebForkEpoch == math.MaxUint64 { + return 0 + } + minSegFrom := ((s.beaconCfg.SlotsPerEpoch * s.beaconCfg.DenebForkEpoch) / snaptype.Erigon2MergeLimit) * snaptype.Erigon2MergeLimit + foundMinSeg := false + ret := uint64(0) + for _, seg := range s.BlobSidecars.segments { + if seg.from == minSegFrom { + foundMinSeg = true + } + ret = utils.Max64(ret, seg.to) + } + if !foundMinSeg { + return 0 + } + return ret +} diff --git a/turbo/snapshotsync/freezeblocks/dump_test.go b/turbo/snapshotsync/freezeblocks/dump_test.go index e056c64d2d7..78965b417a7 100644 --- a/turbo/snapshotsync/freezeblocks/dump_test.go +++ b/turbo/snapshotsync/freezeblocks/dump_test.go @@ -1,10 +1,12 @@ package freezeblocks_test import ( - "github.com/ledgerwatch/erigon/polygon/bor/borcfg" + "context" "math/big" "testing" + "github.com/ledgerwatch/erigon/polygon/bor/borcfg" + "github.com/holiman/uint256" "github.com/ledgerwatch/erigon-lib/chain/networkname" "github.com/ledgerwatch/erigon-lib/chain/snapcfg" @@ -107,7 +109,7 @@ func TestDump(t *testing.T) { var systemTxs int var nonceList []uint64 - cnt, err := freezeblocks.DumpTxs(m.Ctx, m.DB, 0, uint64(2*test.chainSize), m.ChainConfig, 1, log.LvlInfo, log.New(), func(v []byte) error { + _, err := freezeblocks.DumpTxs(m.Ctx, m.DB, m.ChainConfig, 0, uint64(2*test.chainSize), nil, func(v []byte) error { if v == nil { systemTxs++ } else { @@ -117,11 +119,11 @@ func TestDump(t *testing.T) { nonceList = append(nonceList, slot.Nonce) } return nil - }) + }, 1, log.LvlInfo, log.New()) require.NoError(err) require.Equal(2*(test.chainSize+1), systemTxs) require.Equal(nonceRange(0, test.chainSize-1), nonceList) - require.Equal(2*(test.chainSize+1)+test.chainSize, cnt) + //require.Equal(2*(test.chainSize+1)+test.chainSize, cnt) }) t.Run("txs_not_from_zero", func(t *testing.T) { require := require.New(t) @@ -132,7 +134,7 @@ func TestDump(t *testing.T) { var systemTxs int var nonceList []uint64 - cnt, err := freezeblocks.DumpTxs(m.Ctx, m.DB, 2, uint64(test.chainSize), m.ChainConfig, 1, log.LvlInfo, log.New(), func(v []byte) error { + _, err := freezeblocks.DumpTxs(m.Ctx, m.DB, m.ChainConfig, 2, uint64(test.chainSize), nil, func(v []byte) error { if v == nil { systemTxs++ } else { @@ -142,37 +144,37 @@ func TestDump(t *testing.T) { nonceList = append(nonceList, slot.Nonce) } return nil - }) + }, 1, log.LvlInfo, log.New()) require.NoError(err) require.Equal(2*(test.chainSize-2), systemTxs) require.Equal(nonceRange(1, test.chainSize-2), nonceList) - require.Equal(3*test.chainSize-6, cnt) + //require.Equal(3*test.chainSize-6, cnt) }) t.Run("headers", func(t *testing.T) { require := require.New(t) var nonceList []uint64 - err := freezeblocks.DumpHeaders(m.Ctx, m.DB, 0, uint64(2*test.chainSize), 1, log.LvlInfo, log.New(), func(v []byte) error { + _, err := freezeblocks.DumpHeaders(m.Ctx, m.DB, m.ChainConfig, 0, uint64(2*test.chainSize), nil, func(v []byte) error { h := types.Header{} if err := rlp.DecodeBytes(v[1:], &h); err != nil { return err } nonceList = append(nonceList, h.Number.Uint64()) return nil - }) + }, 1, log.LvlInfo, log.New()) require.NoError(err) require.Equal(nonceRange(0, test.chainSize), nonceList) }) t.Run("headers_not_from_zero", func(t *testing.T) { require := require.New(t) var nonceList []uint64 - err := freezeblocks.DumpHeaders(m.Ctx, m.DB, 2, uint64(test.chainSize), 1, log.LvlInfo, log.New(), func(v []byte) error { + _, err := freezeblocks.DumpHeaders(m.Ctx, m.DB, m.ChainConfig, 2, uint64(test.chainSize), nil, func(v []byte) error { h := types.Header{} if err := rlp.DecodeBytes(v[1:], &h); err != nil { return err } nonceList = append(nonceList, h.Number.Uint64()) return nil - }) + }, 1, log.LvlInfo, log.New()) require.NoError(err) require.Equal(nonceRange(2, test.chainSize-1), nonceList) }) @@ -182,14 +184,16 @@ func TestDump(t *testing.T) { txsAmount := uint64(0) var baseIdList []uint64 firstTxNum := uint64(0) - _, err := freezeblocks.DumpBodies(m.Ctx, m.DB, 0, uint64(test.chainSize-3), firstTxNum, log.LvlInfo, log.New(), func(v []byte) error { - i++ - body := &types.BodyForStorage{} - require.NoError(rlp.DecodeBytes(v, body)) - txsAmount += uint64(body.TxAmount) - baseIdList = append(baseIdList, body.BaseTxId) - return nil - }) + _, err := freezeblocks.DumpBodies(m.Ctx, m.DB, m.ChainConfig, 0, uint64(test.chainSize-3), + func(context.Context) uint64 { return firstTxNum }, + func(v []byte) error { + i++ + body := &types.BodyForStorage{} + require.NoError(rlp.DecodeBytes(v, body)) + txsAmount += uint64(body.TxAmount) + baseIdList = append(baseIdList, body.BaseTxId) + return nil + }, 1, log.LvlInfo, log.New()) require.NoError(err) require.Equal(test.chainSize-3, i) require.Equal(3*(test.chainSize-3)-1, int(txsAmount)) @@ -198,14 +202,14 @@ func TestDump(t *testing.T) { firstTxNum += txsAmount i = 0 baseIdList = baseIdList[:0] - _, err = freezeblocks.DumpBodies(m.Ctx, m.DB, 2, uint64(2*test.chainSize), firstTxNum, log.LvlInfo, log.New(), func(v []byte) error { + _, err = freezeblocks.DumpBodies(m.Ctx, m.DB, m.ChainConfig, 2, uint64(2*test.chainSize), func(context.Context) uint64 { return firstTxNum }, func(v []byte) error { i++ body := &types.BodyForStorage{} require.NoError(rlp.DecodeBytes(v, body)) txsAmount += uint64(body.TxAmount) baseIdList = append(baseIdList, body.BaseTxId) return nil - }) + }, 1, log.LvlInfo, log.New()) require.NoError(err) require.Equal(test.chainSize-1, i) require.Equal(firstTxNum+uint64(3*(test.chainSize-1)), txsAmount) @@ -216,13 +220,13 @@ func TestDump(t *testing.T) { i := 0 var baseIdList []uint64 firstTxNum := uint64(1000) - lastTxNum, err := freezeblocks.DumpBodies(m.Ctx, m.DB, 2, uint64(test.chainSize), firstTxNum, log.LvlInfo, log.New(), func(v []byte) error { + lastTxNum, err := freezeblocks.DumpBodies(m.Ctx, m.DB, m.ChainConfig, 2, uint64(test.chainSize), func(context.Context) uint64 { return firstTxNum }, func(v []byte) error { i++ body := &types.BodyForStorage{} require.NoError(rlp.DecodeBytes(v, body)) baseIdList = append(baseIdList, body.BaseTxId) return nil - }) + }, 1, log.LvlInfo, log.New()) require.NoError(err) require.Equal(test.chainSize-2, i) require.Equal(baseIdRange(int(firstTxNum), 3, test.chainSize-2), baseIdList) @@ -239,10 +243,10 @@ func TestDump(t *testing.T) { logger := log.New() tmpDir, snapDir := t.TempDir(), t.TempDir() - snConfig := snapcfg.KnownCfg(networkname.MainnetChainName, 0) + snConfig := snapcfg.KnownCfg(networkname.MainnetChainName) snConfig.ExpectBlocks = math.MaxUint64 - err := freezeblocks.DumpBlocks(m.Ctx, 1, 0, uint64(test.chainSize), uint64(test.chainSize), tmpDir, snapDir, m.DB, 1, log.LvlInfo, logger, m.BlockReader) + err := freezeblocks.DumpBlocks(m.Ctx, 0, uint64(test.chainSize), m.ChainConfig, tmpDir, snapDir, m.DB, 1, log.LvlInfo, logger, m.BlockReader) require.NoError(err) }) } diff --git a/turbo/snapshotsync/snapshotsync.go b/turbo/snapshotsync/snapshotsync.go index 7197fc68384..f56a85b89de 100644 --- a/turbo/snapshotsync/snapshotsync.go +++ b/turbo/snapshotsync/snapshotsync.go @@ -21,6 +21,7 @@ import ( "github.com/ledgerwatch/erigon-lib/state" "github.com/ledgerwatch/erigon/core/rawdb" + coresnaptype "github.com/ledgerwatch/erigon/core/snaptype" "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/log/v3" ) @@ -36,7 +37,7 @@ const ( ) func BuildProtoRequest(downloadRequest []services.DownloadRequest) *proto_downloader.AddRequest { - req := &proto_downloader.AddRequest{Items: make([]*proto_downloader.AddItem, 0, len(snaptype.BlockSnapshotTypes))} + req := &proto_downloader.AddRequest{Items: make([]*proto_downloader.AddItem, 0, len(coresnaptype.BlockSnapshotTypes))} for _, r := range downloadRequest { if r.Path == "" { continue @@ -67,7 +68,7 @@ func RequestSnapshotsDownload(ctx context.Context, downloadRequest []services.Do // WaitForDownloader - wait for Downloader service to download all expected snapshots // for MVP we sync with Downloader only once, in future will send new snapshots also -func WaitForDownloader(ctx context.Context, logPrefix string, histV3 bool, caplin CaplinMode, agg *state.AggregatorV3, tx kv.RwTx, blockReader services.FullBlockReader, cc *chain.Config, snapshotDownloader proto_downloader.DownloaderClient, stagesIdsList []string) error { +func WaitForDownloader(ctx context.Context, logPrefix string, histV3, blobs bool, caplin CaplinMode, agg *state.Aggregator, tx kv.RwTx, blockReader services.FullBlockReader, cc *chain.Config, snapshotDownloader proto_downloader.DownloaderClient, stagesIdsList []string) error { snapshots := blockReader.Snapshots() borSnapshots := blockReader.BorSnapshots() if blockReader.FreezingCfg().NoDownloader { @@ -82,13 +83,18 @@ func WaitForDownloader(ctx context.Context, logPrefix string, histV3 bool, capli return nil } + snapshots.Close() + if cc.Bor != nil { + borSnapshots.Close() + } + //Corner cases: // - Erigon generated file X with hash H1. User upgraded Erigon. New version has preverified file X with hash H2. Must ignore H2 (don't send to Downloader) // - Erigon "download once": means restart/upgrade/downgrade must not download files (and will be fast) // - After "download once" - Erigon will produce and seed new files // send all hashes to the Downloader service - snapCfg := snapcfg.KnownCfg(cc.ChainName, 0) + snapCfg := snapcfg.KnownCfg(cc.ChainName) preverifiedBlockSnapshots := snapCfg.Preverified downloadRequest := make([]services.DownloadRequest, 0, len(preverifiedBlockSnapshots)) @@ -99,17 +105,19 @@ func WaitForDownloader(ctx context.Context, logPrefix string, histV3 bool, capli continue } } - if caplin == NoCaplin && strings.Contains(p.Name, "beaconblocks") { + if caplin == NoCaplin && (strings.Contains(p.Name, "beaconblocks") || strings.Contains(p.Name, "blobsidecars")) { continue } - if caplin == OnlyCaplin && !strings.Contains(p.Name, "beaconblocks") { + if caplin == OnlyCaplin && !strings.Contains(p.Name, "beaconblocks") && !strings.Contains(p.Name, "blobsidecars") { + continue + } + if !blobs && strings.Contains(p.Name, "blobsidecars") { continue } - downloadRequest = append(downloadRequest, services.NewDownloadRequest(p.Name, p.Hash)) } - log.Info(fmt.Sprintf("[%s] Fetching torrent files metadata", logPrefix)) + log.Info(fmt.Sprintf("[%s] Requesting downloads", logPrefix)) for { select { case <-ctx.Done(): @@ -122,120 +130,103 @@ func WaitForDownloader(ctx context.Context, logPrefix string, histV3 bool, capli continue } break + } + downloadStartTime := time.Now() const logInterval = 20 * time.Second logEvery := time.NewTicker(logInterval) defer logEvery.Stop() - var m runtime.MemStats // Check once without delay, for faster erigon re-start stats, err := snapshotDownloader.Stats(ctx, &proto_downloader.StatsRequest{}) - if err == nil && stats.Completed { - goto Finish + + if err != nil { + return err } // Print download progress until all segments are available -Loop: - for { + + for !stats.Completed { select { case <-ctx.Done(): return ctx.Err() case <-logEvery.C: - if stats, err := snapshotDownloader.Stats(ctx, &proto_downloader.StatsRequest{}); err != nil { + if stats, err = snapshotDownloader.Stats(ctx, &proto_downloader.StatsRequest{}); err != nil { log.Warn("Error while waiting for snapshots progress", "err", err) - } else if stats.Completed { - diagnostics.Send(diagnostics.SnapshotDownloadStatistics{ - Downloaded: stats.BytesCompleted, - Total: stats.BytesTotal, - TotalTime: time.Since(downloadStartTime).Round(time.Second).Seconds(), - DownloadRate: stats.DownloadRate, - UploadRate: stats.UploadRate, - Peers: stats.PeersUnique, - Files: stats.FilesTotal, - Connections: stats.ConnectionsTotal, - Alloc: m.Alloc, - Sys: m.Sys, - DownloadFinished: stats.Completed, - }) - - log.Info(fmt.Sprintf("[%s] download finished", logPrefix), "time", time.Since(downloadStartTime).String()) - break Loop } else { - diagnostics.Send(diagnostics.SyncStagesList{Stages: stagesIdsList}) - diagnostics.Send(diagnostics.SnapshotDownloadStatistics{ - Downloaded: stats.BytesCompleted, - Total: stats.BytesTotal, - TotalTime: time.Since(downloadStartTime).Round(time.Second).Seconds(), - DownloadRate: stats.DownloadRate, - UploadRate: stats.UploadRate, - Peers: stats.PeersUnique, - Files: stats.FilesTotal, - Connections: stats.ConnectionsTotal, - Alloc: m.Alloc, - Sys: m.Sys, - DownloadFinished: stats.Completed, - TorrentMetadataReady: stats.MetadataReady, - }) - - if stats.MetadataReady < stats.FilesTotal { - log.Info(fmt.Sprintf("[%s] Waiting for torrents metadata: %d/%d", logPrefix, stats.MetadataReady, stats.FilesTotal)) - continue - } - - dbg.ReadMemStats(&m) - downloadTimeLeft := calculateTime(stats.BytesTotal-stats.BytesCompleted, stats.DownloadRate) - suffix := "downloading" - if stats.Progress > 0 && stats.DownloadRate == 0 { - suffix += " (or verifying)" - } - - log.Info(fmt.Sprintf("[%s] %s", logPrefix, suffix), - "progress", fmt.Sprintf("%.2f%% %s/%s", stats.Progress, common.ByteCount(stats.BytesCompleted), common.ByteCount(stats.BytesTotal)), - "time-left", downloadTimeLeft, - "total-time", time.Since(downloadStartTime).Round(time.Second).String(), - "download", common.ByteCount(stats.DownloadRate)+"/s", - "upload", common.ByteCount(stats.UploadRate)+"/s", - "peers", stats.PeersUnique, - "files", stats.FilesTotal, - "connections", stats.ConnectionsTotal, - "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), - ) + logStats(ctx, stats, downloadStartTime, stagesIdsList, logPrefix, "download") } } } -Finish: if blockReader.FreezingCfg().Verify { if _, err := snapshotDownloader.Verify(ctx, &proto_downloader.VerifyRequest{}); err != nil { return err } + + if stats, err = snapshotDownloader.Stats(ctx, &proto_downloader.StatsRequest{}); err != nil { + log.Warn("Error while waiting for snapshots progress", "err", err) + } } - stats, err = snapshotDownloader.Stats(ctx, &proto_downloader.StatsRequest{}) - if err != nil { - return err - } - if !stats.Completed { - goto Loop + + for !stats.Completed { + select { + case <-ctx.Done(): + return ctx.Err() + case <-logEvery.C: + if stats, err = snapshotDownloader.Stats(ctx, &proto_downloader.StatsRequest{}); err != nil { + log.Warn("Error while waiting for snapshots progress", "err", err) + } else { + logStats(ctx, stats, downloadStartTime, stagesIdsList, logPrefix, "download") + } + } } if err := snapshots.ReopenFolder(); err != nil { return err } + if cc.Bor != nil { if err := borSnapshots.ReopenFolder(); err != nil { return err } } + if err := agg.OpenFolder(); err != nil { return err } + // ProhibitNewDownloads implies - so only make the download request once, + // // Erigon "download once" - means restart/upgrade/downgrade will not download files (and will be fast) // After "download once" - Erigon will produce and seed new files // Downloader will able: seed new files (already existing on FS), download uncomplete parts of existing files (if Verify found some bad parts) - if _, err := snapshotDownloader.ProhibitNewDownloads(ctx, &proto_downloader.ProhibitNewDownloadsRequest{}); err != nil { - return err + // + // after the initial call the downloader or snapshot-lock.file will prevent this download from running + // + + // prohibits further downloads, except some exceptions + for _, p := range blockReader.AllTypes() { + if _, err := snapshotDownloader.ProhibitNewDownloads(ctx, &proto_downloader.ProhibitNewDownloadsRequest{ + Type: p.Name(), + }); err != nil { + return err + } + } + + if caplin != NoCaplin { + for _, p := range snaptype.CaplinSnapshotTypes { + if p.Enum() == snaptype.BlobSidecars.Enum() && !blobs { + continue + } + + if _, err := snapshotDownloader.ProhibitNewDownloads(ctx, &proto_downloader.ProhibitNewDownloadsRequest{ + Type: p.Name(), + }); err != nil { + return err + } + } } if err := rawdb.WriteSnapshots(tx, blockReader.FrozenFiles(), agg.Files()); err != nil { @@ -255,6 +246,58 @@ Finish: return nil } +func logStats(ctx context.Context, stats *proto_downloader.StatsReply, startTime time.Time, stagesIdsList []string, logPrefix string, logReason string) { + var m runtime.MemStats + + diagnostics.Send(diagnostics.SnapshotDownloadStatistics{ + Downloaded: stats.BytesCompleted, + Total: stats.BytesTotal, + TotalTime: time.Since(startTime).Round(time.Second).Seconds(), + DownloadRate: stats.DownloadRate, + UploadRate: stats.UploadRate, + Peers: stats.PeersUnique, + Files: stats.FilesTotal, + Connections: stats.ConnectionsTotal, + Alloc: m.Alloc, + Sys: m.Sys, + DownloadFinished: stats.Completed, + TorrentMetadataReady: stats.MetadataReady, + }) + + if stats.Completed { + log.Info(fmt.Sprintf("[%s] download finished", logPrefix), "time", time.Since(startTime).String()) + } else { + + if stats.MetadataReady < stats.FilesTotal && stats.BytesTotal == 0 { + log.Info(fmt.Sprintf("[%s] Waiting for torrents metadata: %d/%d", logPrefix, stats.MetadataReady, stats.FilesTotal)) + } + + dbg.ReadMemStats(&m) + + var remainingBytes uint64 + + if stats.BytesTotal > stats.BytesCompleted { + remainingBytes = stats.BytesTotal - stats.BytesCompleted + } + + downloadTimeLeft := calculateTime(remainingBytes, stats.DownloadRate) + + log.Info(fmt.Sprintf("[%s] %s", logPrefix, logReason), + "progress", fmt.Sprintf("%.2f%% %s/%s", stats.Progress, common.ByteCount(stats.BytesCompleted), common.ByteCount(stats.BytesTotal)), + // TODO: "downloading", stats.Downloading, + "time-left", downloadTimeLeft, + "total-time", time.Since(startTime).Round(time.Second).String(), + "download", common.ByteCount(stats.DownloadRate)+"/s", + "upload", common.ByteCount(stats.UploadRate)+"/s", + "peers", stats.PeersUnique, + "files", stats.FilesTotal, + "metadata", fmt.Sprintf("%d/%d", stats.MetadataReady, stats.FilesTotal), + "connections", stats.ConnectionsTotal, + "alloc", common.ByteCount(m.Alloc), "sys", common.ByteCount(m.Sys), + ) + } +} + func calculateTime(amountLeft, rate uint64) string { if rate == 0 { return "999hrs:99m" diff --git a/turbo/stages/blockchain_test.go b/turbo/stages/blockchain_test.go index c09fd913c00..d9732e83dab 100644 --- a/turbo/stages/blockchain_test.go +++ b/turbo/stages/blockchain_test.go @@ -2094,7 +2094,7 @@ func TestEIP2718Transition(t *testing.T) { // TestEIP1559Transition tests the following: // -// 1. A tranaction whose feeCap is greater than the baseFee is valid. +// 1. A transaction whose feeCap is greater than the baseFee is valid. // 2. Gas accounting for access lists on EIP-1559 transactions is correct. // 3. Only the transaction's tip will be received by the coinbase. // 4. The transaction sender pays for both the tip and baseFee. diff --git a/turbo/stages/bodydownload/body_algos.go b/turbo/stages/bodydownload/body_algos.go index 2ecf80449e3..e390a461d0f 100644 --- a/turbo/stages/bodydownload/body_algos.go +++ b/turbo/stages/bodydownload/body_algos.go @@ -7,11 +7,12 @@ import ( "math/big" "github.com/holiman/uint256" + "golang.org/x/exp/maps" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/dbg" "github.com/ledgerwatch/erigon-lib/common/length" "github.com/ledgerwatch/erigon-lib/kv" - "golang.org/x/exp/maps" "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/types" @@ -64,7 +65,7 @@ func (bd *BodyDownload) UpdateFromDb(db kv.Tx) (headHeight, headTime uint64, hea headTime = 0 headHeader, err := bd.br.Header(context.Background(), db, headHash, headHeight) if err != nil { - return 0, 0, libcommon.Hash{}, nil, fmt.Errorf("reading total difficulty for head height %d and hash %x: %d, %w", headHeight, headHash, headTd, err) + return 0, 0, libcommon.Hash{}, nil, fmt.Errorf("reading header for head height %d and hash %x: %d, %w", headHeight, headHash, headTd, err) } if headHeader != nil { headTime = headHeader.Time diff --git a/turbo/stages/genesis_test.go b/turbo/stages/genesis_test.go index c94b72ee15b..2d5642bddfd 100644 --- a/turbo/stages/genesis_test.go +++ b/turbo/stages/genesis_test.go @@ -27,8 +27,8 @@ import ( libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/datadir" "github.com/ledgerwatch/erigon-lib/kv" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/ledgerwatch/erigon/core" - "github.com/ledgerwatch/erigon/core/state/temporal" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/crypto" "github.com/ledgerwatch/erigon/eth/ethconfig" @@ -175,8 +175,9 @@ func TestSetupGenesis(t *testing.T) { test := test t.Run(test.name, func(t *testing.T) { t.Parallel() - _, db, _ := temporal.NewTestDB(t, datadir.New(tmpdir), nil) - blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, "", 1, log.New())) + dirs := datadir.New(tmpdir) + _, db, _ := temporaltest.NewTestDB(t, dirs) + blockReader := freezeblocks.NewBlockReader(freezeblocks.NewRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, dirs.Snap, 0, log.New()), freezeblocks.NewBorRoSnapshots(ethconfig.BlocksFreezing{Enabled: false}, dirs.Snap, 0, log.New())) config, genesis, err := test.fn(db) // Check the return values. if !reflect.DeepEqual(err, test.wantErr) { diff --git a/turbo/stages/headerdownload/header_algos.go b/turbo/stages/headerdownload/header_algos.go index 3c6fc8fde54..c7c0184b8e5 100644 --- a/turbo/stages/headerdownload/header_algos.go +++ b/turbo/stages/headerdownload/header_algos.go @@ -10,16 +10,17 @@ import ( "fmt" "io" "math/big" + "slices" "sort" "strings" "time" + "github.com/ledgerwatch/erigon-lib/common/metrics" "github.com/ledgerwatch/erigon-lib/kv/dbutils" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/etl" "github.com/ledgerwatch/erigon-lib/kv" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon/dataflow" "github.com/ledgerwatch/erigon/turbo/services" @@ -141,17 +142,6 @@ func (hd *HeaderDownload) IsBadHeader(headerHash libcommon.Hash) bool { return ok } -// See https://hackmd.io/GDc0maGsQeKfP8o2C7L52w -func (hd *HeaderDownload) SetPoSDownloaderTip(hash libcommon.Hash) { - hd.lock.Lock() - defer hd.lock.Unlock() - hd.posDownloaderTip = hash -} -func (hd *HeaderDownload) PoSDownloaderTip() libcommon.Hash { - hd.lock.RLock() - defer hd.lock.RUnlock() - return hd.posDownloaderTip -} func (hd *HeaderDownload) ReportBadHeaderPoS(badHeader, lastValidAncestor libcommon.Hash) { hd.lock.Lock() defer hd.lock.Unlock() @@ -558,6 +548,9 @@ func (hd *HeaderDownload) InsertHeader(hf FeedHeaderFunc, terminalTotalDifficult hd.logger.Info(fmt.Sprintf("[%s] Inserting headers", logPrefix), "progress", hd.highestInDb, "queue", hd.insertQueue.Len()) default: } + + metrics.UpdateBlockConsumerHeaderDownloadDelay(link.header.Time, link.header.Number.Uint64(), hd.logger) + td, err := hf(link.header, link.headerRaw, link.hash, link.blockHeight) if err != nil { return false, false, 0, lastTime, err @@ -618,6 +611,7 @@ func (hd *HeaderDownload) InsertHeader(hf FeedHeaderFunc, terminalTotalDifficult blocksToTTD = x.Uint64() } } + return hd.insertQueue.Len() > 0 && hd.insertQueue[0].blockHeight <= hd.highestInDb+1, false, blocksToTTD, lastTime, nil } @@ -696,7 +690,11 @@ func (hd *HeaderDownload) ProcessHeadersPOS(csHeaders []ChainSegmentHeader, tx k //return nil, nil } */ - hd.logger.Debug("[downloader] Unexpected header", "hash", headerHash, "expected", hd.posAnchor.parentHash, "peerID", common.Bytes2Hex(peerId[:])) + + if hd.posAnchor.blockHeight == header.Number.Uint64()+1 { + hd.logger.Debug("[downloader] Unexpected header", "hash", headerHash, "expected", hd.posAnchor.parentHash, "peerID", common.Bytes2Hex(peerId[:])) + } + // Not penalise because we might have sent request twice continue } @@ -1226,10 +1224,16 @@ func (hd *HeaderDownload) AddMinedHeader(header *types.Header) error { peerID := [64]byte{'m', 'i', 'n', 'e', 'r'} // "miner" _ = hd.ProcessHeaders(segments, false /* newBlock */, peerID) - hd.latestMinedBlockNumber = header.Number.Uint64() + hd.setLatestMinedBlockNumber(header.Number.Uint64()) return nil } +func (hd *HeaderDownload) setLatestMinedBlockNumber(num uint64) { + hd.lock.Lock() + hd.latestMinedBlockNumber = num + hd.lock.Unlock() +} + func (hd *HeaderDownload) AddHeadersFromSnapshot(tx kv.Tx, r services.FullBlockReader) error { n := r.FrozenBlocks() diff --git a/turbo/stages/headerdownload/header_data_struct.go b/turbo/stages/headerdownload/header_data_struct.go index 85e0e4b9e4d..4c7833edf96 100644 --- a/turbo/stages/headerdownload/header_data_struct.go +++ b/turbo/stages/headerdownload/header_data_struct.go @@ -295,7 +295,6 @@ type HeaderDownload struct { ShutdownCh chan struct{} // Channel to signal shutdown pendingPayloadHash common.Hash // Header whose status we still should send to PayloadStatusCh unsettledHeadHeight uint64 // Height of unsettledForkChoice.headBlockHash - posDownloaderTip common.Hash // See https://hackmd.io/GDc0maGsQeKfP8o2C7L52w badPoSHeaders map[common.Hash]common.Hash // Invalid Tip -> Last Valid Ancestor logger log.Logger } diff --git a/turbo/stages/mock/mock_sentry.go b/turbo/stages/mock/mock_sentry.go index 6feee7c5994..8eab77cdf6e 100644 --- a/turbo/stages/mock/mock_sentry.go +++ b/turbo/stages/mock/mock_sentry.go @@ -13,6 +13,8 @@ import ( "github.com/c2h5oh/datasize" lru "github.com/hashicorp/golang-lru/arc/v2" "github.com/holiman/uint256" + "github.com/ledgerwatch/erigon-lib/config3" + "github.com/ledgerwatch/erigon-lib/kv/temporal/temporaltest" "github.com/ledgerwatch/log/v3" "google.golang.org/protobuf/types/known/emptypb" @@ -40,7 +42,6 @@ import ( "github.com/ledgerwatch/erigon/core/rawdb" "github.com/ledgerwatch/erigon/core/rawdb/blockio" "github.com/ledgerwatch/erigon/core/state" - "github.com/ledgerwatch/erigon/core/state/temporal" "github.com/ledgerwatch/erigon/core/types" "github.com/ledgerwatch/erigon/core/vm" "github.com/ledgerwatch/erigon/crypto" @@ -51,6 +52,7 @@ import ( "github.com/ledgerwatch/erigon/eth/stagedsync/stages" "github.com/ledgerwatch/erigon/ethdb/prune" "github.com/ledgerwatch/erigon/p2p" + "github.com/ledgerwatch/erigon/p2p/sentry" "github.com/ledgerwatch/erigon/p2p/sentry/sentry_multi_client" "github.com/ledgerwatch/erigon/params" "github.com/ledgerwatch/erigon/polygon/bor" @@ -91,7 +93,6 @@ type MockSentry struct { Genesis *types.Block SentryClient direct.SentryClient PeerId *ptypes.H512 - UpdateHead func(Ctx context.Context, headHeight, headTime uint64, hash libcommon.Hash, td *uint256.Int) streams map[proto_sentry.MessageId][]proto_sentry.Sentry_MessagesServer sentMessages []*proto_sentry.OutboundMessageData StreamWg sync.WaitGroup @@ -109,7 +110,7 @@ type MockSentry struct { txPoolDB kv.RwDB HistoryV3 bool - agg *libstate.AggregatorV3 + agg *libstate.Aggregator BlockSnapshots *freezeblocks.RoSnapshots BlockReader services.FullBlockReader posStagedSync *stagedsync.Sync @@ -256,12 +257,12 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK logger := log.New() ctx, ctxCancel := context.WithCancel(context.Background()) - histV3, db, agg := temporal.NewTestDB(nil, dirs, nil) + histV3, db, agg := temporaltest.NewTestDB(nil, dirs) cfg.HistoryV3 = histV3 erigonGrpcServeer := remotedbserver.NewKvServer(ctx, db, nil, nil, nil, logger) - allSnapshots := freezeblocks.NewRoSnapshots(ethconfig.Defaults.Snapshot, dirs.Snap, 1, logger) - allBorSnapshots := freezeblocks.NewBorRoSnapshots(ethconfig.Defaults.Snapshot, dirs.Snap, 1, logger) + allSnapshots := freezeblocks.NewRoSnapshots(ethconfig.Defaults.Snapshot, dirs.Snap, 0, logger) + allBorSnapshots := freezeblocks.NewBorRoSnapshots(ethconfig.Defaults.Snapshot, dirs.Snap, 0, logger) mock := &MockSentry{ Ctx: ctx, cancel: ctxCancel, DB: db, agg: agg, tb: tb, @@ -276,8 +277,6 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK Accumulator: shards.NewAccumulator(), StateChangesConsumer: erigonGrpcServeer, }, - UpdateHead: func(Ctx context.Context, headHeight, headTime uint64, hash libcommon.Hash, td *uint256.Int) { - }, PeerId: gointerfaces.ConvertHashToH512([64]byte{0x12, 0x34, 0x50}), // "12345" BlockSnapshots: allSnapshots, BlockReader: freezeblocks.NewBlockReader(allSnapshots, allBorSnapshots), @@ -352,7 +351,7 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK dirs, notifications, mock.BlockReader, blockWriter, mock.agg, nil, terseLogger) chainReader := stagedsync.NewChainReaderImpl(mock.ChainConfig, txc.Tx, mock.BlockReader, logger) // We start the mining step - if err := stages2.StateStep(ctx, chainReader, mock.Engine, txc, blockWriter, stateSync, mock.sentriesClient.Bd, header, body, unwindPoint, headersChain, bodiesChain, histV3); err != nil { + if err := stages2.StateStep(ctx, chainReader, mock.Engine, txc, stateSync, header, body, unwindPoint, headersChain, bodiesChain, histV3); err != nil { logger.Warn("Could not validate block", "err", err) return err } @@ -366,24 +365,29 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK return nil } forkValidator := engine_helpers.NewForkValidator(ctx, 1, inMemoryExecution, dirs.Tmp, mock.BlockReader) - networkID := uint64(1) + + statusDataProvider := sentry.NewStatusDataProvider( + db, + mock.ChainConfig, + mock.Genesis, + mock.ChainConfig.ChainID.Uint64(), + logger, + ) + maxBlockBroadcastPeers := func(header *types.Header) uint { return 0 } mock.sentriesClient, err = sentry_multi_client.NewMultiClient( mock.DB, - "mock", mock.ChainConfig, - mock.Genesis.Hash(), - mock.Genesis.Time(), mock.Engine, - networkID, sentries, cfg.Sync, mock.BlockReader, blockBufferSize, + statusDataProvider, false, - forkValidator, maxBlockBroadcastPeers, + false, /* disableBlockDownload */ logger, ) if err != nil { @@ -415,7 +419,7 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK cfg.Sync, stagedsync.MiningStages(mock.Ctx, stagedsync.StageMiningCreateBlockCfg(mock.DB, miningStatePos, *mock.ChainConfig, mock.Engine, mock.txPoolDB, param, tmpdir, mock.BlockReader), - stagedsync.StageBorHeimdallCfg(mock.DB, snapDb, miningStatePos, *mock.ChainConfig, nil, mock.BlockReader, nil, nil, nil, recents, signatures), + stagedsync.StageBorHeimdallCfg(mock.DB, snapDb, miningStatePos, *mock.ChainConfig, nil, mock.BlockReader, nil, nil, nil, recents, signatures, false, nil), stagedsync.StageMiningExecCfg(mock.DB, miningStatePos, mock.Notifications.Events, *mock.ChainConfig, mock.Engine, &vm.Config{}, tmpdir, interrupt, param.PayloadId, mock.TxPool, mock.txPoolDB, mock.BlockReader), stagedsync.StageHashStateCfg(mock.DB, dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(mock.DB, false, true, true, tmpdir, mock.BlockReader, nil, histV3, mock.agg), @@ -434,9 +438,9 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK mock.Sync = stagedsync.New( cfg.Sync, stagedsync.DefaultStages(mock.Ctx, - stagedsync.StageSnapshotsCfg(mock.DB, *mock.ChainConfig, cfg.Sync, dirs, blockRetire, snapshotsDownloader, mock.BlockReader, mock.Notifications, mock.HistoryV3, mock.agg, false, nil), - stagedsync.StageHeadersCfg(mock.DB, mock.sentriesClient.Hd, mock.sentriesClient.Bd, *mock.ChainConfig, cfg.Sync, sendHeaderRequest, propagateNewBlockHashes, penalize, cfg.BatchSize, false, mock.BlockReader, blockWriter, dirs.Tmp, mock.Notifications, engine_helpers.NewForkValidatorMock(1), nil), - stagedsync.StageBorHeimdallCfg(mock.DB, snapDb, stagedsync.MiningState{}, *mock.ChainConfig, nil /* heimdallClient */, mock.BlockReader, nil, nil, nil, recents, signatures), + stagedsync.StageSnapshotsCfg(mock.DB, *mock.ChainConfig, cfg.Sync, dirs, blockRetire, snapshotsDownloader, mock.BlockReader, mock.Notifications, mock.HistoryV3, mock.agg, false, false, nil), + stagedsync.StageHeadersCfg(mock.DB, mock.sentriesClient.Hd, mock.sentriesClient.Bd, *mock.ChainConfig, cfg.Sync, sendHeaderRequest, propagateNewBlockHashes, penalize, cfg.BatchSize, false, mock.BlockReader, blockWriter, dirs.Tmp, mock.Notifications, nil), + stagedsync.StageBorHeimdallCfg(mock.DB, snapDb, stagedsync.MiningState{}, *mock.ChainConfig, nil /* heimdallClient */, mock.BlockReader, nil, nil, nil, recents, signatures, false, nil), stagedsync.StageBlockHashesCfg(mock.DB, mock.Dirs.Tmp, mock.ChainConfig, blockWriter), stagedsync.StageBodiesCfg(mock.DB, mock.sentriesClient.Bd, sendBodyRequest, penalize, blockPropagator, cfg.Sync.BodyDownloadTimeoutSeconds, *mock.ChainConfig, mock.BlockReader, cfg.HistoryV3, blockWriter, nil), stagedsync.StageSendersCfg(mock.DB, mock.ChainConfig, false, dirs.Tmp, prune, mock.BlockReader, mock.sentriesClient.Hd, nil), @@ -463,7 +467,7 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK stagedsync.StageHashStateCfg(mock.DB, mock.Dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(mock.DB, checkStateRoot, true, false, dirs.Tmp, mock.BlockReader, mock.sentriesClient.Hd, cfg.HistoryV3, mock.agg), stagedsync.StageHistoryCfg(mock.DB, prune, dirs.Tmp), - stagedsync.StageLogIndexCfg(mock.DB, prune, dirs.Tmp), + stagedsync.StageLogIndexCfg(mock.DB, prune, dirs.Tmp, nil), stagedsync.StageCallTracesCfg(mock.DB, prune, 0, dirs.Tmp), stagedsync.StageTxLookupCfg(mock.DB, prune, dirs.Tmp, mock.ChainConfig.Bor, mock.BlockReader), stagedsync.StageFinishCfg(mock.DB, dirs.Tmp, forkValidator), @@ -478,7 +482,7 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK snapshotsDownloader, mock.BlockReader, blockRetire, mock.agg, nil, forkValidator, logger, checkStateRoot) mock.posStagedSync = stagedsync.New(cfg.Sync, pipelineStages, stagedsync.PipelineUnwindOrder, stagedsync.PipelinePruneOrder, logger) - mock.Eth1ExecutionService = eth1.NewEthereumExecutionModule(mock.BlockReader, mock.DB, mock.posStagedSync, forkValidator, mock.ChainConfig, assembleBlockPOS, nil, mock.Notifications.Accumulator, mock.Notifications.StateChangesConsumer, logger, engine, histV3) + mock.Eth1ExecutionService = eth1.NewEthereumExecutionModule(mock.BlockReader, mock.DB, mock.posStagedSync, forkValidator, mock.ChainConfig, assembleBlockPOS, nil, mock.Notifications.Accumulator, mock.Notifications.StateChangesConsumer, logger, engine, histV3, ctx) mock.sentriesClient.Hd.StartPoSDownloader(mock.Ctx, sendHeaderRequest, penalize) @@ -500,7 +504,7 @@ func MockWithEverything(tb testing.TB, gspec *types.Genesis, key *ecdsa.PrivateK cfg.Sync, stagedsync.MiningStages(mock.Ctx, stagedsync.StageMiningCreateBlockCfg(mock.DB, miner, *mock.ChainConfig, mock.Engine, nil, nil, dirs.Tmp, mock.BlockReader), - stagedsync.StageBorHeimdallCfg(mock.DB, snapDb, miner, *mock.ChainConfig, nil /*heimdallClient*/, mock.BlockReader, nil, nil, nil, recents, signatures), + stagedsync.StageBorHeimdallCfg(mock.DB, snapDb, miner, *mock.ChainConfig, nil /*heimdallClient*/, mock.BlockReader, nil, nil, nil, recents, signatures, false, nil), stagedsync.StageMiningExecCfg(mock.DB, miner, nil, *mock.ChainConfig, mock.Engine, &vm.Config{}, dirs.Tmp, nil, 0, mock.TxPool, nil, mock.BlockReader), stagedsync.StageHashStateCfg(mock.DB, dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(mock.DB, false, true, false, dirs.Tmp, mock.BlockReader, mock.sentriesClient.Hd, cfg.HistoryV3, mock.agg), @@ -668,7 +672,7 @@ func (ms *MockSentry) insertPoWBlocks(chain *core.ChainPack) error { ms.ReceiveWg.Add(1) } initialCycle := MockInsertAsInitialCycle - hook := stages2.NewHook(ms.Ctx, ms.DB, ms.Notifications, ms.Sync, ms.BlockReader, ms.ChainConfig, ms.Log, ms.UpdateHead) + hook := stages2.NewHook(ms.Ctx, ms.DB, ms.Notifications, ms.Sync, ms.BlockReader, ms.ChainConfig, ms.Log, nil) if err = stages2.StageLoopIteration(ms.Ctx, ms.DB, wrap.TxContainer{}, ms.Sync, initialCycle, ms.Log, ms.BlockReader, hook, false); err != nil { return err @@ -685,20 +689,21 @@ func (ms *MockSentry) insertPoSBlocks(chain *core.ChainPack) error { return nil } - wr := eth1_chain_reader.NewChainReaderEth1(ms.Ctx, ms.ChainConfig, direct.NewExecutionClientDirect(ms.Eth1ExecutionService), uint64(time.Hour)) + wr := eth1_chain_reader.NewChainReaderEth1(ms.ChainConfig, direct.NewExecutionClientDirect(ms.Eth1ExecutionService), uint64(time.Hour)) + ctx := context.Background() for i := n; i < chain.Length(); i++ { if err := chain.Blocks[i].HashCheck(); err != nil { return err } } - if err := wr.InsertBlocksAndWait(chain.Blocks); err != nil { + if err := wr.InsertBlocksAndWait(ctx, chain.Blocks); err != nil { return err } tipHash := chain.TopBlock.Hash() - status, lvh, err := wr.UpdateForkChoice(tipHash, tipHash, tipHash) + status, _, lvh, err := wr.UpdateForkChoice(ctx, tipHash, tipHash, tipHash) if err != nil { return err @@ -774,21 +779,21 @@ func (ms *MockSentry) NewHistoryStateReader(blockNum uint64, tx kv.Tx) state.Sta } func (ms *MockSentry) NewStateReader(tx kv.Tx) state.StateReader { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") } return state.NewPlainStateReader(tx) } func (ms *MockSentry) NewStateWriter(tx kv.RwTx, blockNum uint64) state.StateWriter { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") } return state.NewPlainStateWriter(tx, tx, blockNum) } func (ms *MockSentry) CalcStateRoot(tx kv.Tx) libcommon.Hash { - if ethconfig.EnableHistoryV4InTest { + if config3.EnableHistoryV4InTest { panic("implement me") } @@ -798,7 +803,7 @@ func (ms *MockSentry) CalcStateRoot(tx kv.Tx) libcommon.Hash { } return h } -func (ms *MockSentry) HistoryV3Components() *libstate.AggregatorV3 { +func (ms *MockSentry) HistoryV3Components() *libstate.Aggregator { return ms.agg } diff --git a/turbo/stages/mock/sentry_mock_test.go b/turbo/stages/mock/sentry_mock_test.go index c03baff9086..2e7e1539cbe 100644 --- a/turbo/stages/mock/sentry_mock_test.go +++ b/turbo/stages/mock/sentry_mock_test.go @@ -5,11 +5,12 @@ import ( "testing" "github.com/holiman/uint256" + "github.com/ledgerwatch/log/v3" + "github.com/stretchr/testify/require" + libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/gointerfaces/sentry" "github.com/ledgerwatch/erigon-lib/wrap" - "github.com/ledgerwatch/log/v3" - "github.com/stretchr/testify/require" "github.com/ledgerwatch/erigon/common/u256" "github.com/ledgerwatch/erigon/core" @@ -502,7 +503,7 @@ func TestAnchorReplace2(t *testing.T) { m.ReceiveWg.Wait() // Wait for all messages to be processed before we proceeed initialCycle := mock.MockInsertAsInitialCycle - hook := stages.NewHook(m.Ctx, m.DB, m.Notifications, m.Sync, m.BlockReader, m.ChainConfig, m.Log, m.UpdateHead) + hook := stages.NewHook(m.Ctx, m.DB, m.Notifications, m.Sync, m.BlockReader, m.ChainConfig, m.Log, nil) if err := stages.StageLoopIteration(m.Ctx, m.DB, wrap.TxContainer{}, m.Sync, initialCycle, m.Log, m.BlockReader, hook, false); err != nil { t.Fatal(err) } diff --git a/turbo/stages/stageloop.go b/turbo/stages/stageloop.go index 1fe6d0df13b..13f95ca9e4e 100644 --- a/turbo/stages/stageloop.go +++ b/turbo/stages/stageloop.go @@ -4,11 +4,9 @@ import ( "context" "errors" "fmt" - "math/big" "time" lru "github.com/hashicorp/golang-lru/arc/v2" - "github.com/holiman/uint256" "github.com/ledgerwatch/log/v3" "github.com/ledgerwatch/erigon-lib/chain" @@ -41,7 +39,6 @@ import ( "github.com/ledgerwatch/erigon/turbo/services" "github.com/ledgerwatch/erigon/turbo/shards" "github.com/ledgerwatch/erigon/turbo/silkworm" - "github.com/ledgerwatch/erigon/turbo/stages/bodydownload" "github.com/ledgerwatch/erigon/turbo/stages/headerdownload" ) @@ -157,7 +154,7 @@ func StageLoopIteration(ctx context.Context, db kv.RwDB, txc wrap.TxContainer, s var tableSizes []interface{} var commitTime time.Duration if canRunCycleInOneTransaction && !externalTx { - tableSizes = stagedsync.PrintTables(db, txc.Tx) // Need to do this before commit to access tx + tableSizes = stagedsync.CollectDBMetrics(db, txc.Tx) // Need to do this before commit to access tx commitStart := time.Now() errTx := txc.Tx.Commit() txc.Tx = nil @@ -185,18 +182,17 @@ func StageLoopIteration(ctx context.Context, db kv.RwDB, txc wrap.TxContainer, s // -- send notifications END // -- Prune+commit(sync) - if err := stageLoopStepPrune(ctx, db, txc.Tx, sync, initialCycle); err != nil { + if externalTx { + err = sync.RunPrune(db, txc.Tx, initialCycle) + } else { + err = db.Update(ctx, func(tx kv.RwTx) error { return sync.RunPrune(db, tx, initialCycle) }) + } + if err != nil { return err } return nil } -func stageLoopStepPrune(ctx context.Context, db kv.RwDB, tx kv.RwTx, sync *stagedsync.Sync, initialCycle bool) (err error) { - if tx != nil { - return sync.RunPrune(db, tx, initialCycle) - } - return db.Update(ctx, func(tx kv.RwTx) error { return sync.RunPrune(db, tx, initialCycle) }) -} func stagesHeadersAndFinish(db kv.RoDB, tx kv.Tx) (head, bor, fin uint64, err error) { if tx != nil { @@ -235,11 +231,11 @@ type Hook struct { chainConfig *chain.Config logger log.Logger blockReader services.FullBlockReader - updateHead func(ctx context.Context, headHeight uint64, headTime uint64, hash libcommon.Hash, td *uint256.Int) + updateHead func(ctx context.Context) db kv.RoDB } -func NewHook(ctx context.Context, db kv.RoDB, notifications *shards.Notifications, sync *stagedsync.Sync, blockReader services.FullBlockReader, chainConfig *chain.Config, logger log.Logger, updateHead func(ctx context.Context, headHeight uint64, headTime uint64, hash libcommon.Hash, td *uint256.Int)) *Hook { +func NewHook(ctx context.Context, db kv.RoDB, notifications *shards.Notifications, sync *stagedsync.Sync, blockReader services.FullBlockReader, chainConfig *chain.Config, logger log.Logger, updateHead func(ctx context.Context)) *Hook { return &Hook{ctx: ctx, db: db, notifications: notifications, sync: sync, blockReader: blockReader, chainConfig: chainConfig, logger: logger, updateHead: updateHead} } func (h *Hook) beforeRun(tx kv.Tx, inSync bool) error { @@ -266,60 +262,46 @@ func (h *Hook) AfterRun(tx kv.Tx, finishProgressBefore uint64) error { return h.afterRun(tx, finishProgressBefore) } func (h *Hook) afterRun(tx kv.Tx, finishProgressBefore uint64) error { - notifications := h.notifications - blockReader := h.blockReader - // -- send notifications START - //TODO: can this 2 headers be 1 - var headHeader, currentHeader *types.Header - // Update sentry status for peers to see our sync status - var headTd *big.Int - var plainStateVersion, finalizedBlock uint64 - head, err := stages.GetStageProgress(tx, stages.Headers) - if err != nil { - return err + if h.updateHead != nil { + h.updateHead(h.ctx) } - headHash, err := rawdb.ReadCanonicalHash(tx, head) - if err != nil { - return err - } - if headTd, err = rawdb.ReadTd(tx, headHash, head); err != nil { - return err - } - headHeader = rawdb.ReadHeader(tx, headHash, head) - currentHeader = rawdb.ReadCurrentHeader(tx) - finalizedHeaderHash := rawdb.ReadForkchoiceFinalized(tx) - if fb := rawdb.ReadHeaderNumber(tx, finalizedHeaderHash); fb != nil { - finalizedBlock = *fb + if h.notifications != nil { + return h.sendNotifications(h.notifications, tx, finishProgressBefore) } + return nil +} +func (h *Hook) sendNotifications(notifications *shards.Notifications, tx kv.Tx, finishProgressBefore uint64) error { // update the accumulator with a new plain state version so the cache can be notified that // state has moved on - if plainStateVersion, err = rawdb.GetStateVersion(tx); err != nil { - return err - } - if notifications != nil && notifications.Accumulator != nil { + if notifications.Accumulator != nil { + plainStateVersion, err := rawdb.GetStateVersion(tx) + if err != nil { + return err + } + notifications.Accumulator.SetStateID(plainStateVersion) } - if headTd != nil && headHeader != nil { - headTd256, overflow := uint256.FromBig(headTd) - if overflow { - return fmt.Errorf("headTds higher than 2^256-1") + if notifications.Events != nil { + finishStageAfterSync, err := stages.GetStageProgress(tx, stages.Finish) + if err != nil { + return err } - h.updateHead(h.ctx, head, headHeader.Time, headHash, headTd256) - } - - if notifications != nil && notifications.Events != nil { - if err = stagedsync.NotifyNewHeaders(h.ctx, finishProgressBefore, head, h.sync.PrevUnwindPoint(), notifications.Events, tx, h.logger, blockReader); err != nil { + if err = stagedsync.NotifyNewHeaders(h.ctx, finishProgressBefore, finishStageAfterSync, h.sync.PrevUnwindPoint(), notifications.Events, tx, h.logger, h.blockReader); err != nil { return nil } } - if notifications != nil && notifications.Accumulator != nil && currentHeader != nil { - pendingBaseFee := misc.CalcBaseFee(h.chainConfig, currentHeader, 0) + currentHeader := rawdb.ReadCurrentHeader(tx) + if (notifications.Accumulator != nil) && (currentHeader != nil) { if currentHeader.Number.Uint64() == 0 { notifications.Accumulator.StartChange(0, currentHeader.Hash(), nil, false) } + + // Block time of every OP superchains is 2sec for now. + // Add 2 for next block. TODO: support custom block time for OP chain + pendingBaseFee := misc.CalcBaseFee(h.chainConfig, currentHeader, currentHeader.Time+2) pendingBlobFee := h.chainConfig.GetMinBlobGasPrice() if currentHeader.ExcessBlobGas != nil { excessBlobGas := misc.CalcExcessBlobGas(h.chainConfig, currentHeader) @@ -330,10 +312,14 @@ func (h *Hook) afterRun(tx kv.Tx, finishProgressBefore uint64) error { pendingBlobFee = f.Uint64() } - h.logger.Debug("[hook] Sending state changes", "currentBlock", currentHeader.Number.Uint64(), "finalizedBlock", finalizedBlock) + var finalizedBlock uint64 + if fb := rawdb.ReadHeaderNumber(tx, rawdb.ReadForkchoiceFinalized(tx)); fb != nil { + finalizedBlock = *fb + } + + //h.logger.Debug("[hook] Sending state changes", "currentBlock", currentHeader.Number.Uint64(), "finalizedBlock", finalizedBlock) notifications.Accumulator.SendAndReset(h.ctx, notifications.StateChangesConsumer, pendingBaseFee.Uint64(), pendingBlobFee, currentHeader.GasLimit, finalizedBlock) } - // -- send notifications END return nil } @@ -405,7 +391,7 @@ func addAndVerifyBlockStep(batch kv.RwTx, engine consensus.Engine, chainReader c return nil } -func StateStep(ctx context.Context, chainReader consensus.ChainReader, engine consensus.Engine, txc wrap.TxContainer, blockWriter *blockio.BlockWriter, stateSync *stagedsync.Sync, Bd *bodydownload.BodyDownload, header *types.Header, body *types.RawBody, unwindPoint uint64, headersChain []*types.Header, bodiesChain []*types.RawBody, histV3 bool) (err error) { +func StateStep(ctx context.Context, chainReader consensus.ChainReader, engine consensus.Engine, txc wrap.TxContainer, stateSync *stagedsync.Sync, header *types.Header, body *types.RawBody, unwindPoint uint64, headersChain []*types.Header, bodiesChain []*types.RawBody, histV3 bool) (err error) { defer func() { if rec := recover(); rec != nil { err = fmt.Errorf("%+v, trace: %s", rec, dbg.Stack()) @@ -469,7 +455,7 @@ func NewDefaultStages(ctx context.Context, snapDownloader proto_downloader.DownloaderClient, blockReader services.FullBlockReader, blockRetire services.BlockRetire, - agg *state.AggregatorV3, + agg *state.Aggregator, silkworm *silkworm.Silkworm, forkValidator *engine_helpers.ForkValidator, heimdallClient heimdall.HeimdallClient, @@ -507,10 +493,15 @@ func NewDefaultStages(ctx context.Context, } } + var noPruneContracts map[libcommon.Address]bool + if cfg.Genesis != nil { + noPruneContracts = cfg.Genesis.Config.NoPruneContracts + } + return stagedsync.DefaultStages(ctx, - stagedsync.StageSnapshotsCfg(db, *controlServer.ChainConfig, cfg.Sync, dirs, blockRetire, snapDownloader, blockReader, notifications, cfg.HistoryV3, agg, cfg.InternalCL && cfg.CaplinConfig.Backfilling, silkworm), - stagedsync.StageHeadersCfg(db, controlServer.Hd, controlServer.Bd, *controlServer.ChainConfig, cfg.Sync, controlServer.SendHeaderRequest, controlServer.PropagateNewBlockHashes, controlServer.Penalize, cfg.BatchSize, p2pCfg.NoDiscovery, blockReader, blockWriter, dirs.Tmp, notifications, forkValidator, loopBreakCheck), - stagedsync.StageBorHeimdallCfg(db, snapDb, stagedsync.MiningState{}, *controlServer.ChainConfig, heimdallClient, blockReader, controlServer.Hd, controlServer.Penalize, loopBreakCheck, recents, signatures), + stagedsync.StageSnapshotsCfg(db, *controlServer.ChainConfig, cfg.Sync, dirs, blockRetire, snapDownloader, blockReader, notifications, cfg.HistoryV3, agg, cfg.InternalCL && cfg.CaplinConfig.Backfilling, cfg.CaplinConfig.BlobBackfilling, silkworm), + stagedsync.StageHeadersCfg(db, controlServer.Hd, controlServer.Bd, *controlServer.ChainConfig, cfg.Sync, controlServer.SendHeaderRequest, controlServer.PropagateNewBlockHashes, controlServer.Penalize, cfg.BatchSize, p2pCfg.NoDiscovery, blockReader, blockWriter, dirs.Tmp, notifications, loopBreakCheck), + stagedsync.StageBorHeimdallCfg(db, snapDb, stagedsync.MiningState{}, *controlServer.ChainConfig, heimdallClient, blockReader, controlServer.Hd, controlServer.Penalize, loopBreakCheck, recents, signatures, cfg.WithHeimdallWaypointRecording, nil), stagedsync.StageBlockHashesCfg(db, dirs.Tmp, controlServer.ChainConfig, blockWriter), stagedsync.StageBodiesCfg(db, controlServer.Bd, controlServer.SendBodyRequest, controlServer.Penalize, controlServer.BroadcastNewBlock, cfg.Sync.BodyDownloadTimeoutSeconds, *controlServer.ChainConfig, blockReader, cfg.HistoryV3, blockWriter, loopBreakCheck), stagedsync.StageSendersCfg(db, controlServer.ChainConfig, false, dirs.Tmp, cfg.Prune, blockReader, controlServer.Hd, loopBreakCheck), @@ -537,7 +528,7 @@ func NewDefaultStages(ctx context.Context, stagedsync.StageHashStateCfg(db, dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(db, true, true, false, dirs.Tmp, blockReader, controlServer.Hd, cfg.HistoryV3, agg), stagedsync.StageHistoryCfg(db, cfg.Prune, dirs.Tmp), - stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp), + stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp, noPruneContracts), stagedsync.StageCallTracesCfg(db, cfg.Prune, 0, dirs.Tmp), stagedsync.StageTxLookupCfg(db, cfg.Prune, dirs.Tmp, controlServer.ChainConfig.Bor, blockReader), stagedsync.StageFinishCfg(db, dirs.Tmp, forkValidator), @@ -553,7 +544,7 @@ func NewPipelineStages(ctx context.Context, snapDownloader proto_downloader.DownloaderClient, blockReader services.FullBlockReader, blockRetire services.BlockRetire, - agg *state.AggregatorV3, + agg *state.Aggregator, silkworm *silkworm.Silkworm, forkValidator *engine_helpers.ForkValidator, logger log.Logger, @@ -583,9 +574,14 @@ func NewPipelineStages(ctx context.Context, } } + var noPruneContracts map[libcommon.Address]bool + if cfg.Genesis != nil { + noPruneContracts = cfg.Genesis.Config.NoPruneContracts + } + if len(cfg.Sync.UploadLocation) == 0 { return stagedsync.PipelineStages(ctx, - stagedsync.StageSnapshotsCfg(db, *controlServer.ChainConfig, cfg.Sync, dirs, blockRetire, snapDownloader, blockReader, notifications, cfg.HistoryV3, agg, cfg.InternalCL && cfg.CaplinConfig.Backfilling, silkworm), + stagedsync.StageSnapshotsCfg(db, *controlServer.ChainConfig, cfg.Sync, dirs, blockRetire, snapDownloader, blockReader, notifications, cfg.HistoryV3, agg, cfg.InternalCL && cfg.CaplinConfig.Backfilling, cfg.CaplinConfig.BlobBackfilling, silkworm), stagedsync.StageBlockHashesCfg(db, dirs.Tmp, controlServer.ChainConfig, blockWriter), stagedsync.StageSendersCfg(db, controlServer.ChainConfig, false, dirs.Tmp, cfg.Prune, blockReader, controlServer.Hd, loopBreakCheck), stagedsync.StageExecuteBlocksCfg( @@ -611,7 +607,7 @@ func NewPipelineStages(ctx context.Context, stagedsync.StageHashStateCfg(db, dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(db, checkStateRoot, true, false, dirs.Tmp, blockReader, controlServer.Hd, cfg.HistoryV3, agg), stagedsync.StageHistoryCfg(db, cfg.Prune, dirs.Tmp), - stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp), + stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp, noPruneContracts), stagedsync.StageCallTracesCfg(db, cfg.Prune, 0, dirs.Tmp), stagedsync.StageTxLookupCfg(db, cfg.Prune, dirs.Tmp, controlServer.ChainConfig.Bor, blockReader), stagedsync.StageFinishCfg(db, dirs.Tmp, forkValidator), @@ -619,8 +615,8 @@ func NewPipelineStages(ctx context.Context, } return stagedsync.UploaderPipelineStages(ctx, - stagedsync.StageSnapshotsCfg(db, *controlServer.ChainConfig, cfg.Sync, dirs, blockRetire, snapDownloader, blockReader, notifications, cfg.HistoryV3, agg, cfg.InternalCL && cfg.CaplinConfig.Backfilling, silkworm), - stagedsync.StageHeadersCfg(db, controlServer.Hd, controlServer.Bd, *controlServer.ChainConfig, cfg.Sync, controlServer.SendHeaderRequest, controlServer.PropagateNewBlockHashes, controlServer.Penalize, cfg.BatchSize, p2pCfg.NoDiscovery, blockReader, blockWriter, dirs.Tmp, notifications, forkValidator, loopBreakCheck), + stagedsync.StageSnapshotsCfg(db, *controlServer.ChainConfig, cfg.Sync, dirs, blockRetire, snapDownloader, blockReader, notifications, cfg.HistoryV3, agg, cfg.InternalCL && cfg.CaplinConfig.Backfilling, cfg.CaplinConfig.BlobBackfilling, silkworm), + stagedsync.StageHeadersCfg(db, controlServer.Hd, controlServer.Bd, *controlServer.ChainConfig, cfg.Sync, controlServer.SendHeaderRequest, controlServer.PropagateNewBlockHashes, controlServer.Penalize, cfg.BatchSize, p2pCfg.NoDiscovery, blockReader, blockWriter, dirs.Tmp, notifications, loopBreakCheck), stagedsync.StageBlockHashesCfg(db, dirs.Tmp, controlServer.ChainConfig, blockWriter), stagedsync.StageSendersCfg(db, controlServer.ChainConfig, false, dirs.Tmp, cfg.Prune, blockReader, controlServer.Hd, loopBreakCheck), stagedsync.StageBodiesCfg(db, controlServer.Bd, controlServer.SendBodyRequest, controlServer.Penalize, controlServer.BroadcastNewBlock, cfg.Sync.BodyDownloadTimeoutSeconds, *controlServer.ChainConfig, blockReader, cfg.HistoryV3, blockWriter, loopBreakCheck), @@ -647,7 +643,7 @@ func NewPipelineStages(ctx context.Context, stagedsync.StageHashStateCfg(db, dirs, cfg.HistoryV3), stagedsync.StageTrieCfg(db, checkStateRoot, true, false, dirs.Tmp, blockReader, controlServer.Hd, cfg.HistoryV3, agg), stagedsync.StageHistoryCfg(db, cfg.Prune, dirs.Tmp), - stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp), + stagedsync.StageLogIndexCfg(db, cfg.Prune, dirs.Tmp, noPruneContracts), stagedsync.StageCallTracesCfg(db, cfg.Prune, 0, dirs.Tmp), stagedsync.StageTxLookupCfg(db, cfg.Prune, dirs.Tmp, controlServer.ChainConfig.Bor, blockReader), stagedsync.StageFinishCfg(db, dirs.Tmp, forkValidator), @@ -656,12 +652,12 @@ func NewPipelineStages(ctx context.Context, } func NewInMemoryExecution(ctx context.Context, db kv.RwDB, cfg *ethconfig.Config, controlServer *sentry_multi_client.MultiClient, - dirs datadir.Dirs, notifications *shards.Notifications, blockReader services.FullBlockReader, blockWriter *blockio.BlockWriter, agg *state.AggregatorV3, + dirs datadir.Dirs, notifications *shards.Notifications, blockReader services.FullBlockReader, blockWriter *blockio.BlockWriter, agg *state.Aggregator, silkworm *silkworm.Silkworm, logger log.Logger) *stagedsync.Sync { return stagedsync.New( cfg.Sync, stagedsync.StateStages(ctx, - stagedsync.StageHeadersCfg(db, controlServer.Hd, controlServer.Bd, *controlServer.ChainConfig, cfg.Sync, controlServer.SendHeaderRequest, controlServer.PropagateNewBlockHashes, controlServer.Penalize, cfg.BatchSize, false, blockReader, blockWriter, dirs.Tmp, nil, nil, nil), + stagedsync.StageHeadersCfg(db, controlServer.Hd, controlServer.Bd, *controlServer.ChainConfig, cfg.Sync, controlServer.SendHeaderRequest, controlServer.PropagateNewBlockHashes, controlServer.Penalize, cfg.BatchSize, false, blockReader, blockWriter, dirs.Tmp, nil, nil), stagedsync.StageBodiesCfg(db, controlServer.Bd, controlServer.SendBodyRequest, controlServer.Penalize, controlServer.BroadcastNewBlock, cfg.Sync.BodyDownloadTimeoutSeconds, *controlServer.ChainConfig, blockReader, cfg.HistoryV3, blockWriter, nil), stagedsync.StageBlockHashesCfg(db, dirs.Tmp, controlServer.ChainConfig, blockWriter), stagedsync.StageSendersCfg(db, controlServer.ChainConfig, true, dirs.Tmp, cfg.Prune, blockReader, controlServer.Hd, nil), diff --git a/turbo/transactions/tracing.go b/turbo/transactions/tracing.go index ff3fb7e060d..9f298b7aadb 100644 --- a/turbo/transactions/tracing.go +++ b/turbo/transactions/tracing.go @@ -16,7 +16,6 @@ import ( "github.com/ledgerwatch/erigon-lib/kv" "github.com/ledgerwatch/erigon-lib/opstack" - ethereum "github.com/ledgerwatch/erigon" "github.com/ledgerwatch/erigon/consensus" "github.com/ledgerwatch/erigon/core" "github.com/ledgerwatch/erigon/core/state" @@ -26,7 +25,6 @@ import ( "github.com/ledgerwatch/erigon/eth/stagedsync" "github.com/ledgerwatch/erigon/eth/tracers" "github.com/ledgerwatch/erigon/eth/tracers/logger" - "github.com/ledgerwatch/erigon/polygon/bor/statefull" "github.com/ledgerwatch/erigon/turbo/rpchelper" "github.com/ledgerwatch/erigon/turbo/services" ) @@ -84,7 +82,10 @@ func ComputeTxEnv(ctx context.Context, engine consensus.EngineReader, block *typ consensusHeaderReader := stagedsync.NewChainReaderImpl(cfg, dbtx, nil, nil) logger := log.New("tracing") - core.InitializeBlockExecution(engine.(consensus.Engine), consensusHeaderReader, header, cfg, statedb, logger) + err = core.InitializeBlockExecution(engine.(consensus.Engine), consensusHeaderReader, header, cfg, statedb, logger) + if err != nil { + return nil, evmtypes.BlockContext{}, evmtypes.TxContext{}, nil, nil, err + } for idx, txn := range block.Transactions() { select { @@ -138,81 +139,103 @@ func TraceTx( stream *jsoniter.Stream, callTimeout time.Duration, ) error { + tracer, streaming, cancel, err := AssembleTracer(ctx, config, txCtx.TxHash, stream, callTimeout) + if err != nil { + stream.WriteNil() + return err + } + + defer cancel() + + execCb := func(evm *vm.EVM, refunds bool) (*core.ExecutionResult, error) { + gp := new(core.GasPool).AddGas(message.Gas()).AddBlobGas(message.BlobGas()) + return core.ApplyMessage(evm, message, gp, refunds, false /* gasBailout */) + } + + return ExecuteTraceTx(blockCtx, txCtx, ibs, config, chainConfig, stream, tracer, streaming, execCb) +} + +func AssembleTracer( + ctx context.Context, + config *tracers.TraceConfig, + txHash libcommon.Hash, + stream *jsoniter.Stream, + callTimeout time.Duration, +) (vm.EVMLogger, bool, context.CancelFunc, error) { // Assemble the structured logger or the JavaScript tracer - var ( - tracer vm.EVMLogger - err error - ) - var streaming bool switch { case config != nil && config.Tracer != nil: // Define a meaningful timeout of a single transaction trace timeout := callTimeout if config.Timeout != nil { - if timeout, err = time.ParseDuration(*config.Timeout); err != nil { - stream.WriteNil() - return err + var err error + timeout, err = time.ParseDuration(*config.Timeout) + if err != nil { + return nil, false, func() {}, err } } + // Construct the JavaScript tracer to execute with cfg := json.RawMessage("{}") if config != nil && config.TracerConfig != nil { cfg = *config.TracerConfig } - if tracer, err = tracers.New(*config.Tracer, &tracers.Context{ - TxHash: txCtx.TxHash, - }, cfg); err != nil { - stream.WriteNil() - return err + tracer, err := tracers.New(*config.Tracer, &tracers.Context{TxHash: txHash}, cfg) + if err != nil { + return nil, false, func() {}, err } + // Handle timeouts and RPC cancellations deadlineCtx, cancel := context.WithTimeout(ctx, timeout) go func() { <-deadlineCtx.Done() - tracer.(tracers.Tracer).Stop(errors.New("execution timeout")) + tracer.Stop(errors.New("execution timeout")) }() - defer cancel() - streaming = false + return tracer, false, cancel, nil case config == nil: - tracer = logger.NewJsonStreamLogger(nil, ctx, stream) - streaming = true - + return logger.NewJsonStreamLogger(nil, ctx, stream), true, func() {}, nil default: - tracer = logger.NewJsonStreamLogger(config.LogConfig, ctx, stream) - streaming = true + return logger.NewJsonStreamLogger(config.LogConfig, ctx, stream), true, func() {}, nil } +} + +func ExecuteTraceTx( + blockCtx evmtypes.BlockContext, + txCtx evmtypes.TxContext, + ibs evmtypes.IntraBlockState, + config *tracers.TraceConfig, + chainConfig *chain.Config, + stream *jsoniter.Stream, + tracer vm.EVMLogger, + streaming bool, + execCb func(evm *vm.EVM, refunds bool) (*core.ExecutionResult, error), +) error { // Run the transaction with tracing enabled. - vmenv := vm.NewEVM(blockCtx, txCtx, ibs, chainConfig, vm.Config{Debug: true, Tracer: tracer}) + evm := vm.NewEVM(blockCtx, txCtx, ibs, chainConfig, vm.Config{Debug: true, Tracer: tracer, NoBaseFee: true}) + var refunds = true if config != nil && config.NoRefunds != nil && *config.NoRefunds { refunds = false } + if streaming { stream.WriteObjectStart() stream.WriteObjectField("structLogs") stream.WriteArrayStart() } - var result *core.ExecutionResult - if config != nil && config.BorTx != nil && *config.BorTx { - callmsg := prepareCallMessage(message) - result, err = statefull.ApplyBorMessage(*vmenv, callmsg) - } else { - result, err = core.ApplyMessage(vmenv, message, new(core.GasPool).AddGas(message.Gas()).AddBlobGas(message.BlobGas()), refunds, false /* gasBailout */) - } - + result, err := execCb(evm, refunds) if err != nil { if streaming { stream.WriteArrayEnd() stream.WriteObjectEnd() - stream.WriteMore() - stream.WriteObjectField("resultHack") // higher-level func will assing it to NULL } else { stream.WriteNil() } return fmt.Errorf("tracing failed: %w", err) } + // Depending on the tracer type, format and return the output if streaming { stream.WriteArrayEnd() @@ -232,24 +255,18 @@ func TraceTx( stream.WriteString(returnVal) stream.WriteObjectEnd() } else { - if r, err1 := tracer.(tracers.Tracer).GetResult(); err1 == nil { - stream.Write(r) - } else { - return err1 + r, err := tracer.(tracers.Tracer).GetResult() + if err != nil { + stream.WriteNil() + return err + } + + _, err = stream.Write(r) + if err != nil { + stream.WriteNil() + return err } } - return nil -} -func prepareCallMessage(msg core.Message) statefull.Callmsg { - return statefull.Callmsg{ - CallMsg: ethereum.CallMsg{ - From: msg.From(), - To: msg.To(), - Gas: msg.Gas(), - GasPrice: msg.GasPrice(), - Value: msg.Value(), - Data: msg.Data(), - AccessList: msg.AccessList(), - }} + return nil } diff --git a/turbo/trie/structural_test.go b/turbo/trie/structural_test.go index 9cd3a827bee..2d02bc28605 100644 --- a/turbo/trie/structural_test.go +++ b/turbo/trie/structural_test.go @@ -22,12 +22,12 @@ import ( "bytes" "encoding/binary" "fmt" + "slices" "testing" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/length" "github.com/stretchr/testify/require" - "golang.org/x/exp/slices" "github.com/ledgerwatch/erigon/common" "github.com/ledgerwatch/erigon/crypto" diff --git a/turbo/trie/trie_root.go b/turbo/trie/trie_root.go index 6154815171f..15035cc3f4a 100644 --- a/turbo/trie/trie_root.go +++ b/turbo/trie/trie_root.go @@ -5,16 +5,16 @@ import ( "encoding/binary" "encoding/hex" "fmt" - "github.com/ledgerwatch/erigon-lib/common/hexutil" - dbutils2 "github.com/ledgerwatch/erigon-lib/kv/dbutils" "math/bits" "time" + "github.com/ledgerwatch/log/v3" + libcommon "github.com/ledgerwatch/erigon-lib/common" - "github.com/ledgerwatch/erigon-lib/common/length" + "github.com/ledgerwatch/erigon-lib/common/hexutil" length2 "github.com/ledgerwatch/erigon-lib/common/length" "github.com/ledgerwatch/erigon-lib/kv" - "github.com/ledgerwatch/log/v3" + dbutils2 "github.com/ledgerwatch/erigon-lib/kv/dbutils" "github.com/ledgerwatch/erigon/core/types/accounts" "github.com/ledgerwatch/erigon/turbo/rlphacks" @@ -548,16 +548,16 @@ func (r *RootHashAggregator) genStructStorage() error { } var wantProof func(_ []byte) *proofElement if r.proofRetainer != nil { - var fullKey [2 * (length.Hash + length.Incarnation + length.Hash)]byte + var fullKey [2 * (length2.Hash + length2.Incarnation + length2.Hash)]byte for i, b := range r.currAccK { fullKey[i*2] = b / 16 fullKey[i*2+1] = b % 16 } for i, b := range binary.BigEndian.AppendUint64(nil, r.a.Incarnation) { - fullKey[2*length.Hash+i*2] = b / 16 - fullKey[2*length.Hash+i*2+1] = b % 16 + fullKey[2*length2.Hash+i*2] = b / 16 + fullKey[2*length2.Hash+i*2+1] = b % 16 } - baseKeyLen := 2 * (length.Hash + length.Incarnation) + baseKeyLen := 2 * (length2.Hash + length2.Incarnation) wantProof = func(prefix []byte) *proofElement { copy(fullKey[baseKeyLen:], prefix) return r.proofRetainer.ProofElement(fullKey[:baseKeyLen+len(prefix)]) @@ -1134,23 +1134,7 @@ func (c *StorageTrieCursor) _consume() (bool, error) { } func (c *StorageTrieCursor) _seek(seek, withinPrefix []byte) (bool, error) { - var k, v []byte - var err error - if len(seek) == 40 { - k, v, err = c.c.Seek(seek) - } else { - // optimistic .Next call, can use result in 2 cases: - // - no child found, means: len(k) <= c.lvl - // - looking for first child, means: c.childID[c.lvl] <= int8(bits.TrailingZeros16(c.hasTree[c.lvl])) - // otherwise do .Seek call - //k, v, err = c.c.Next() - //if err != nil { - // return false, err - //} - //if len(k) > c.lvl && c.childID[c.lvl] > int8(bits.TrailingZeros16(c.hasTree[c.lvl])) { - k, v, err = c.c.Seek(seek) - //} - } + k, v, err := c.c.Seek(seek) if err != nil { return false, err } diff --git a/turbo/trie/trie_root_test.go b/turbo/trie/trie_root_test.go index efec782137a..e8a9ed037d1 100644 --- a/turbo/trie/trie_root_test.go +++ b/turbo/trie/trie_root_test.go @@ -4,12 +4,13 @@ import ( "bytes" "context" "encoding/binary" - "github.com/ledgerwatch/erigon-lib/common/hexutil" - "github.com/ledgerwatch/erigon-lib/kv/dbutils" "math/big" "testing" "time" + "github.com/ledgerwatch/erigon-lib/common/hexutil" + "github.com/ledgerwatch/erigon-lib/kv/dbutils" + "github.com/holiman/uint256" libcommon "github.com/ledgerwatch/erigon-lib/common" "github.com/ledgerwatch/erigon-lib/common/hexutility" @@ -473,7 +474,7 @@ func FuzzTrieRootAccounts(f *testing.F) { // populates the trie tables. Then, it modifies the database of accounts but // does not update the trie tables. Finally, for every seeded account (modified // and not), it computes a proof for that key and verifies that the proof -// matches the one as computed by the naive trie implementation and that that +// matches the one as computed by the naive trie implementation and that // proof is valid. func FuzzTrieRootAccountProofs(f *testing.F) { addFuzzTrieSeeds(f) @@ -554,7 +555,7 @@ func FuzzTrieRootAccountProofs(f *testing.F) { // modifies the database of storage but does not update the trie tables. // Finally, for every seeded storage key (modified and not), it computes a proof for // that key and verifies that the proof matches the one as computed by the naive -// trie implementation and that that proof is valid. +// trie implementation and that proof is valid. func FuzzTrieRootStorageProofs(f *testing.F) { addFuzzTrieSeeds(f) diff --git a/wmake.ps1 b/wmake.ps1 index ddb01d1e631..01a46755539 100644 --- a/wmake.ps1 +++ b/wmake.ps1 @@ -405,7 +405,7 @@ if (!Test-Path -Path [string](Join-Path $MyContext.Directory "\.git") -PathType if(!(Test-Git-Installed)) { exit 1 } ## Test GO language is installed AND min version -if(!(Test-GO-Installed "1.20")) { exit 1 } +if(!(Test-GO-Installed "1.21")) { exit 1 } # Build erigon binaries Set-Variable -Name "Erigon" -Value ([hashtable]::Synchronized(@{})) -Scope Script @@ -421,6 +421,7 @@ $Erigon.BuildFlags += " -ldflags ""-X $($Erigon.Package)/params.GitCommit=$($Eri $Erigon.BinPath = [string](Join-Path $MyContext.StartDir "\build\bin") $env:CGO_CFLAGS = "-g -O2 -D__BLST_PORTABLE__" +$env:GOPRIVATE = "github.com/erigontech/silkworm-go" New-Item -Path $Erigon.BinPath -ItemType Directory -Force | Out-Null if(!$?) {